Váhavý problém
váhavý problém je problém rozhodnutí který může být informally řečený takto:- Daný druh algoritmu a popisu jeho parafovat argumenty, stanovit zda algoritmus, když provedený s těmito argumenty, někdy se zastaví ( alternativa je že to běží navždy bez váhavý).
Důležitost váhavého problému spočívá ve skutečnosti, že to je první problém být dokázané undecidable. Následně, mnoho jiných takových problémů bylo popisované; typická metoda zkušební problém být undecidable má sesadit to na váhavý problém.
Jeden takový důsledek váhavého problému je undecidability je to Entscheidungsproblem je neřešitelný, a zvláště tam moci ne být obecný algoritmus, který se rozhodne zda dané prohlášení o přirozených číslech je pravdivé nebo ne. důvod pro toto je to problém to říká, že jistý algoritmus se zastaví daný jistý vstup může být automaticky reformulated jak sdělení o číslech. Protože není tam žádný algoritmus, který může rozhodnout se jestliže původní prohlášení o algoritmech je pravdivé nebo ne, to znamená, že není tam žádný algoritmus, který může rozhodnout se zda korespondenční prohlášení o číslech je pravdivé nebo ne.
Ještě jeden, docela ohromující, důsledek undecidability váhavého problému je Riceův teorém který říká, že pravda v některém non-triviální prohlášení o funkci, která je definována algoritmem je undecidable. Tak, například, problém rozhodnutí “odkázat tuto zastávku algoritmu pro vstup 0” je už undecidable. Poznamenat, že tento teorém drží pro funkci určenou algoritmem a ne algoritmus sám. To je, například, docela možný se rozhodnout jestliže algoritmus se zastaví uvnitř 100 kroků, ale toto není prohlášení o funkci, která je definována algoritmem.
Gregory Chaitin dal undecidable problém v algoritmické informační teorii který nezávisí na váhavém problému. Chaitin také dal intrikářskou definici váhavé pravděpodobnosti který reprezentuje pravděpodobnost že náhodně vytvořený program se zastaví.
Zatímco Turing důkaz ukáže, že to tam může být žádná obecná metoda nebo algoritmus stanovit zda algoritmy se zastaví, individuální příklady toho problému mohou velmi dobře být citlivé na útok. Daný specifický algoritmus, jeden může často ukázat, že to musí zastavit se pro nějaký vstup a ve skutečnosti vědci počítače často dělají právě to jako součást důkazu správnosti. Ale každý takový důkaz vyžaduje nové argumenty: není tam žádná mechanická, obecná cesta stanovit zda algoritmy se zastaví.
Tam je další námitka. Undecidability váhavého problému se spoléhá na skutečnost, že algoritmy jsou převzaty mít potenciálně nekonečný ukládání: v nějaké jedné době oni mohou jediný obchod finitely mnoho věcí, ale oni mohou vždy skladovat více a oni nikdy se vyčerpají paměti. Jestliže paměť a externí paměť stroje je omezena, zatímco to je pro nějaký počítač který vlastně existuje, pak váhavý problém pro běh programů na tom stroji může být řešen s generálem algoritmus (albeit extrémně nedostatečný).
| Tabulka s obsahem |
| 1 nástin důkazu 2 utváření váhavého problému 3 vztah s Gödel Incompleteness teorémem 4 mohou lidé vyřešit váhavou úlohu? 5 rozpoznávat částečná řešení |
V tomto náčrtku my reprezentujeme algoritmy se pseudokódem podobným Pascalu, a přijmout přímý reprezentace algoritmů jako řetězce.
Důkaz pokračuje reductio inzerátovým absurdum. My budeme předpokládat, že tam je algoritmus Zastavení(, i) to se rozhodne jestliže algoritmus kódovaný řetězcem zastaví když daný jako vstup řetězec i, a pak ukázat, že toto vede k rozporu.
My začínáme předpokládat, že to tam je algoritmus Se zastavit(, i) to vrátí řetězec “ano” jestliže algoritmus reprezentovaný řetězcem zastavení když daný jako vstup řetězec i, a vrátí řetězec “ne” jinak. Daný tento algoritmus my můžeme postavit další algoritmus Potíž(s) takto:
funkční potíž (s: řetězec ): řetězec začít jestliže zastavení (s, s) = “ne” pak vrátit se(“ano”) jinde ... nějaká nekonečná smyčka... konecTento algoritmus vezme řetězec s jako jeho argument a běhy algoritmus Se zastavit, dávat to s oba jako popis algoritmu ke kontrole a jako výchozí údaje ke krmení k tomu algoritmu. Jestliže výstupy zastavení “ne”, pak Problémové výstupy “ano”, jinak Potíž jde do nekonečné smyčky. Protože všechny algoritmy mohou být reprezentovány řetězci tam bude řetězec T to reprezentuje algoritmus Potíž. My můžeme nyní položit následující otázku:
- Co je výstup Zastavení(T, T)?
- Předpokládat, že výstup je “ne”. Protože Zastavení se rozhodne jestliže zakódovaný algoritmus zastaví se pro daný vstup, to znamená, že Potíž nezastaví se na vstupu T. Jestliže my se díváme na algoritmus Potíže my můžeme vidět, že toto je jen případ jestliže výsledek Zastavení(T, T) je “ano”, který odporuje domněnce že výstup je “ne”.
- Předpokládat, že výstup je “ano”, pak to následuje definicí Zastavení ta Potíž se zastaví na vstupu T. Jestliže my znovu se díváme na algoritmus Potíže my vidíme to výsledek Zastavení(T, T) pak muset být “ne”, který odporuje domněnce že to je “ano”.
Všimnout si blízké analogie tohoto důkazu k Russellovi' s Barber paradox: Se zastavit(U, V) kandiduje na”U oholení V” a T reprezentuje “holiče”. Potíž je definována zajistit to T oholení přesně ti to se neholí.
V jeho důkazu originálu Turing formoval pojetí algoritmu tím, že představí Turing stroje. Nicméně, aktuální volba formování dopadá být malé důležitosti. Jeden může vybrat si některého mnoho známých modelů vypočitatelnosti, takový jako Markov algoritmy, Lambda počet, posílat systémy nebo některý jiný Turing kompletní programovací jazyk.
Co je důležité je to formování připustí přímý mapování algoritmů k nějakému datovému typu že algoritmus může operovat na. Například, jestliže formalizmus nechá algoritmy určit funkce přes řetězce (takový jako Turing stroje) pak tam should být mapování těchto algoritmů k řetězcům, a jestliže formalizmus nechá algoritmy určit funkce přes přirozená čísla (takové jak rekurzivní funkce) pak tam should být mapování algoritmů k přirozeným číslům. Mapování k řetězcům je obvykle nejpřímější, ale řetězce přes abecedu s n charaktery mohou také být mapovány k číslům tím, že interpretuje je jako čísla v n- ary systém číslice.
Vztah s Gödel Incompleteness teorémem
pojetí zvednutý Gödel incompleteness teorémy jsou velmi podobné těm zvednutý váhavý problém a důkazy jsou docela podobní. Ve skutečnosti, slabší forma prvního Incompleteness teoréma je snadný důsledek undecidability váhavého problému. Tato slabší forma se liší od standardního prohlášení incompleteness teoréma tím, že tvrdí, že kompletní, shodný a zvuk axiomatization všech prohlášení o přirozených číslech unachievable. “zdravá” část je oslabování: to znamená, že my vyžadujeme axiomatický systém v pochybnost ukázat se jen opravdová prohlášení o přirozených číslech (to je velmi důležité poznamenat, že prohlášení standardní formy Gödel je nejprve Incompleteness teorém je kompletně unconcerned s otázkou pravdy ale jediná znepokojení výtisk provability).
Slabší forma teoréma může být dokázaná od undecidability váhavého problému takto. Předpokládat, že my máme souhlasný a kompletní axiomatization všichni pravdivý nejprve-objednávat logice prohlášení o přirozených číslech. Pak my můžeme stavět algoritmus, který vypočítá všechna tyto sdělení. Toto znamená, že to tam je algoritmus N(n) to, daný přirozené číslo n, vypočítá pravdivý nejprve-objednávat logice prohlášení o přirozených číslech takový to, pro všechna opravdová sdělení, tam je přinejmenším jeden n takový to N(n) je to sdělení. Nyní předpokládat, že my chceme se rozhodnout jestliže algoritmus s reprezentací zastávky na vstupu i. My víme, že toto sdělení může být vyjádřeno s nejprve-objednávat logice sdělení, říkat H(, i). Protože axiomatization je kompletní to znamená, že jeden tam je n takový to N(n) = H(, i) nebo tam je n ' takový to N(n ' ) = ¬ H(, i). Tak jestliže my opakujeme přes všechny n until my jeden objevit H(, i) nebo jeho negace, my vždy se zastavíme. Toto znamená, že toto dá nám algoritmus rozhodnout váhavý problém. Protože my víme, že to tam nemůže být takové algoritmus, to znamená, že předpoklad to tam je souhlasný a kompletní axiomatization všichni pravdivý nejprve-objednávat logiku prohlášení o přirozených číslech musí být falešná.
Mohou lidé vyřešit váhavou úlohu?
To by mohlo vypadat jako lidi mohl vyřešit váhavou úlohu. Nakonec, programátor může často se podívat na program a prozradit to zda to se zastaví. To je užitečné rozumět proč toto nemůže být pravdivé. Pro jednoduchost, my rozpoznáme váhavý problém pro programy s žádným vstupem, který je také undecidable.
“platit” váhavý problém chce být schopný k pohledu na některého naprogramovat a prozradit to zda to se zastaví. To není dost být schopný se dívat na některé programy a se rozhodnout. Turing stroj může dělat to. Ve skutečnosti, dokonce konečný státní stroj může dělat to. Tam existuje konečný státní stroj to, daný nějaký program méně než gigabajt dlouho, okamžitě se vrátí zda program se zastaví (my neznáme ten konečný státní stroj nicméně -- vidět dolů pro proč). Ale jestliže program je dlouhý dost, obvyklý přiléhat k délce života by předešel člověku od dokonce číst celý program. Po jen nemnoho desetiletí četby kód špaget, člověk by už začal k zapomenou některé ty detaily. Lidé nemohou vyřešit váhavou úlohu, náležitý k naprosté velikosti vstupu.
Dokonce pro krátké programy, to není jasné, že lidé mohou vždy prozradit to zda oni se zastaví. Například, předpokládat i, j, a k být libovolný-celé číslo preciznosti proměnné. Pak, dělá toto C zastavení programu?
pro (i = j = k = 1; -- j | | k; k = j? i % j? k: k-j: (j = i + = 2 ));Tento program hledá, než to objeví zvláštní, dokonalé číslo, pak se zastaví. To se zastaví jestliže a jediný jestliže takový číslo existuje, který je hlavní otevřená otázka v matematice. Tak, po stoletích práce, matematici mají zatím zjistit zda jednoduchý, 43-bajt C program se zastaví. Toto mohlo být zvažováno ultimate popletl C program, a to dělá to obtížný vidět jak lidé mohli vyřešit váhavou úlohu.
Žádný program může vyřešit váhavou úlohu. Tam být programy, které dávají správné odpovědi pro některé příklady to, a běžet navždy na všech jiných příkladech. Program, který vrátí odpovědi pro některé příklady váhavého problému by mohl být nazýván částečným váhavým solver (PHS). Můžeme rozpoznat opravit PHS když my vidíme to? Nechal PHS rozpoznávací problém být toto: daný PHS, stanovit zda to vrátí jediné správné odpovědi. Toto problémové zvuky jako to by mohly být snadnější než váhavý problém sám. To není. To je jen jako undecidable jak váhavý problém. Toto následuje trivially od Riceova teoréma. To také vyplývá z undecidability váhavého problému jak vůle teď být ukázaný.
Pro každý příklad váhavého problému, tam je příklad PHS rozpoznávacího problému, který je spravedlivý jak tvrdý platit. Například, předchozí sekce ukazovala příklad váhavého problému pro kterého žádný ví odpověď. Tady je jak to může být přeměněno na příklad PHS rozpoznávacího problému pro kterého žádný má odpověď:
Uložit program P jestliže P = “pro (i = j = k = 1; -- j | | k; k = j? i % j? k: k-j: (j = i + = 2 ));”
výstup “ano, ten program se zastaví” jiná smyčka navždyTen program vrátí jediné správné odpovědi? Ne jeden ví. Toto se ukáže dále právě jak těžký váhavý problém je. Není tam žádný způsob, jak řešit to obecně. Tam není dokonce obecný způsob, jak vědět to zda program částečně řeší to.Reference:
- Alan Turing, Na vypočitatelných číslech, s použitím na Entscheidungsproblem, soudní řízení Londýna matematická společnost, série 2, 42 (1936), 230 pp-265. online verze toto je papír epochal kde Turing definuje Turing stroje, formuluje váhavý problém a přehlídky to to (také jak Entscheidungsproblem) je neřešitelný.