1 / 51

Teorie vyčíslitelnosti

Teorie vyčíslitelnosti. Na základě Church-Turingovy teze jsme ztotožnili pojem algoritmus s odpovídajícím Turingovým strojem. Díky tomu můžeme nyní zkoumat „meze“ vyčíslitelnosti. Uvidíme, že některé jsou algoritmicky neřešitelné. K čemu je to dobré?

andres
Télécharger la présentation

Teorie vyčíslitelnosti

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Teorie vyčíslitelnosti • Na základě Church-Turingovy teze jsme ztotožnili pojem algoritmus s odpovídajícím Turingovým strojem. • Díky tomu můžeme nyní zkoumat „meze“ vyčíslitelnosti. • Uvidíme, že některé jsou algoritmicky neřešitelné. • K čemu je to dobré? • Především je užitečné to vědět, protože pokud nás někdo požádá takový problém vyřešit, víme, že to obecně nejde a musíme problém nejprve zjednodušit. • A navíc fakt, že si uvědomíme, že jsou problémy, které jsou algoritmicky neřešitelné, nám dává zcela odlišný pohled na počítače jako takové.

  2. Rozhodnutelné problémy • Různé problémy budeme definovat pomocí jazyků, přičemž už víme: • Jazyk je rekurzivní, pokud existuje Turingův stroj který příslušný jazyk rozhoduje. • Jazyk je rekurzivně spočetný, pokud existuje Turingův stroj, který jej rozpoznává. (Může se stát, že stroj nedosáhne ani přijímacího ani zamítacího stavu a v takovém případě se zacyklí, neustále provádí příslušné kroky a nikdy se nezastaví) • Problém budeme tedy považovat za algoritmicky rozhodnutelný, pokud příslušný jazyk je rekurzivní (rozhodnutelný Turingovým strojem).

  3. Rozhodnutelné problémy • Příklad 1: Problém přijetí slova deterministickým konečným automatem je algoritmicky rozhodnutelný. • Důkaz: 1.Převedeme problém na jazyk ADKA={B,w| B je KA přijímající slovo w} Ukážeme-li, že tento jazyk je rekurzivní (rozhodnutelný), potom i příslušný problém je rozhodnutelný. Stačí sestrojit TS M, který rozhoduje výše uvedený jazyk: 1. Stroj M simuluje činnost stroje B při zpracování slova w 2. Když simulace skončí B v koncovém stavu, potom accept; pokud skončí v nekoncovém stavu, potom reject

  4. Rozhodnutelné problémy • Příklad 2: Problém přijetí slova nedeterministickým konečným automatem je algoritmicky rozhodnutelný. • Důkaz: 1.Převedeme problém na jazyk ANKA={B,w| B je NKA přijímající slovo w} Tentokrát stačí nedeterministický konečný automat B převést na ekvivalentní deterministický automat B’a potom už vše pokračuje zcela analogicky.

  5. Rozhodnutelné problémy • Příklad 3: Problém prázdnosti jazyka přijímaného deterministickým konečným automatem je algoritmicky rozhodnutelný. • Důkaz: Převedeme problém na jazyk EDKA={A| A je DKA a L(A)=Ø} 1. Věta - stačí vyzkoušet slova s délkou menší než n 2. Stačí si ovšem označit počáteční stav, v dalším kroku vždy označit všechny stavy dostupné z prvního nezpracovaného označeného stavu atd. Pokud na závěr je mezi označenými stavy alespoň jeden koncový, potom accept, jinak reject.

  6. Další rozhodnutelné problémy • P4: Problém ekvivalence jazyků přijímaných deterministickými konečnými automaty A a B je algoritmicky rozhodnutelný. EQDKA={A,B| A a B jsou DKA a L(A)=L(B)} • P5: Problém, zda v bezkontextové gramatice G lze vygenerovat slovo w, je algoritmicky rozhodnutelný. ACFG={G,w| G je bezkontextová gramatika generující w} • Důkaz: Není nutné (ani možné) zkoušet všechny derivace, ale pro slovo délky n stačí posloupnost nejvýše 2n-1 derivací

  7. Další rozhodnutelné problémy • P6: Problém prázdnosti jazyka generovaného bezkontextovou gramatikou je algoritmicky rozhodnutelný. • Ale bohužel například … • P7: Problém ekvivalence jazyků generovaných bezkontextovými gramatikamiG a H je algoritmicky nerozhodnutelný. EQCFG={G,H| G a H jsou bezkont. gramatiky a L(G)=L(H)}

  8. Nerozhodnutelné problémy • Jak vypadají algoritmicky neřešitelné problémy? • Jsou to problémy specielně vykonstruované matematiky, nebo i problémy, se kterými se může setkat „běžný“ programátor? • Konkrétně jde například o problém ekvivalence dvou různých programů, verifikace software (ověření, že se program chová korektně) atd. • Nejde tedy pouze o otázku filozofickou, ale o vážný problém s mnoha praktickými důsledky.

  9. Nerozhodnutelné problémy • Intuitivní důkaz existence problémů, které nejsou řešitelné pomocí počítače: • Uvažujme „první“ program v jazyce C: main() { printf(“hello, world\n”); } • Tento program může být použit samostatně, ale část kódu printf(“hello, world\n”); můžeme použít jako podprogram v jiném programu.

  10. Nerozhodnutelné problémy • Uvažujme nyní, že existuje program D, kterému na vstupu dáme program P a jeho vstup I. Náš program D rozhodne, zda program P na vstup I vypíše hlášku „hello, world“ • Program D je tedy jakýsi detektor toho, zda program P na vstup I tiskne „hello, world“ Program D Ano – pokud program P na vstup I tiskne „hello, world“ Program P Vstup I Ne – pokud program P na vstup I netiskne „hello, world“

  11. Nerozhodnutelné problémy • Program D, lze jistě snadno modifikovat na D1 tak, aby v případě negativního výsledku vypsal jiný text, například „hello, world“ • Pokud program D zjistí, že P na vstup I tiskne „hello, world“, napíše „ano“, jinak vypíše „hello, world“ Program D1 Ano – pokud program P na vstup I tiskne „hello, world“ Program P Vstup I Hello, world – pokud program P na vstup I netiskne „hello, world“

  12. Nerozhodnutelné problémy • Uvažujeme jakýkoliv program P a vstup I, a proto lze uvažovat, že program P dostane jako vstup svůj vlastní kód: • Nyní lze obrázek zjednodušit na: Program D1 Ano – pokud program P na vstup P tiskne „hello, world“ Program P Program P Hello, world – pokud program P na vstup P netiskne „hello, world“ Program D1 Ano – pokud program P na vstup P tiskne „hello, world“ Program P Hello, world – pokud program P na vstup P netiskne „hello, world“

  13. Nerozhodnutelné problémy • Uvažujme nyní situaci, kdy programu D1 předložíme jako vstup jeho vlastní kód, tj. program D1 • Je-li výstupem D1 „ano“, potom program D1 píše „hello, world“, což je v rozporu; je-li výstupem D1 „hello, world“, potom program D1 nepíše „hello, world“, což je opět spor • Ve výsledku dostáváme spor s tím, že existuje D1 a jelikož D1 je pouze jednoduše upravený D, nemůže tedy existovat ani D Program D1 Ano – pokud program D1 na vstup D1 tiskne „hello, world“ Program D1 Hello, world – pokud program D1 na vstup D1 netiskne „hello, world“

  14. Nerozhodnutelné problémy • Je tedy zřejmé, že neexistuje program, který by pro libovolný program P a vstup I uměl rozhodnout, zda jeho výstupem bude „hello, world“ • Máme příklad algoritmicky neřešitelné úlohy • Při konstrukci jsme využili takzvanou diagonalizační metodu (ve chvíli, kdy jsme jako vstup programu využili kód právě tohoto programu) • Pro snazší představu je možné uvažovat například program, který čte vstupní data a poté je tiskne – v našem případě bude tedy vstupními daty vlastní kód programu (program má za úkol vytisknout svůj vlastní kód)

  15. Nerozhodnutelné problémy • Další užitečnou technikou je redukce jednoho problému na problém jiný • Máme-li rozhodnout, zda nějaký problém P je či není rozhodnutelný a víme-li, že problém P1 rozhodnutelný není, potom obvykle postupujeme následovně: • Pokusíme se problém P1 převést na P takto Accept Problém P1 Převod (redukce) TS rozhodující problém P Problém P Reject

  16. Nerozhodnutelné problémy • Pokud se to podařilo, redukovali jsme problém P1 na P • Spojením redukce a TS pro problém P bychom ovšem získali TS rozhodující problém P1, což ale neexistuje • Proto nemůže existovat ani TS rozhodující problém P a tím jsme dokázali, že problém P je nerozhodnutelný • Nyní můžeme začít dokazovat nerozhodnutelnost konkrétních problémů • , zda jeho výstupem bude „hello, world“ • Máme příklad algoritmicky neřešitelné úlohy • Při konstrukci jsme využili takzvanou diagonalizační metodu (ve chvíli, kdy jsme jako vstup programu využili kód právě tohoto programu) • Pro snazší představu je možné uvažovat například program, který čte vstupní data a poté je tiskne – v našem případě bude tedy vstupními daty vlastní kód programu (program má za úkol vytisknout svůj vlastní kód) TS rozhodující problém P1 Accept Problém P1 Převod (redukce) TS rozhodující problém P Problém P Reject

  17. Chybný postup redukce • Redukovat musíme problém, o kterém víme, že není rozhodnutelný na problém, o kterém to chceme dokázat • Podaří-li se nám to opačně, ještě to vůbec neznamená, že náš problém je skutečně nerozhodnutelný • Redukci je třeba vždy dělat ze známého problému na náš: Problém P Převod (redukce) Neexistuje TS rozhodující problém P1 Problém P1 ???? Accept Problém P1 Převod (redukce) TS rozhodující problém P Problém P Reject

  18. Nerozhodnutelné problémy • Věta 1: Problém zastavení Turingova stroje je algoritmicky nerozhodnutelný (Halting problem). HALTTM={M,w| M je TS a M se zastaví na slovo w} • Důkaz: bude následovat později • Věta 2: Problém zastavení Turingova stroje je algoritmicky rozpoznatelný. • Důkaz: Stačí sestrojit TS Q, který rozpoznává výše uvedený jazyk HALTTM : 1. Stroj Q simuluje činnost stroje M při zpracování slova w 2. Když simulace M skončí ve stavu accept, potom accept; pokud skončí ve stavu reject, potom reject; pokud se zacyklí, zacyklí se i Q

  19. Důkaz k problému zastavení • Nutná odbočka: Diagonalizační metoda (Georg Cantor - 1873) • Jak porovnávat velikost množin? • U konečných stačí spočíst prvky a zkontrolovat výsledek. • U nekonečných prvky spočítat neumíme … • Lze to udělat tak, navrhneme funkci f, která každému prvku z množiny A bude přiřazovat prvek z množiny B tak, že pro ab, a,bA platí f(a)f(b). • Potom nutně musí platit, že prvků množiny B je stejně nebo více, než prvků množiny A. • Když to zařídím analogicky i opačně, mohutnost obou množin je nutně stejná.

  20. Diagonalizační metoda • Věta: Množina sudých čísel a množina lichých čísel mají stejnou mohutnost (jsou „spočetné“). • Důkaz: f: každému lichému číslu přiřadím číslo o 1 větší g: každému sudému číslu přiřadím číslo o 1 menší (1-2, 3-4, ….,153-154, …….) Vzhledem k této korespondenci je zřejmé, že mohutnost obou množin je stejná.

  21. Diagonalizační metoda • Věta: Množina sudých čísel a množina přirozených čísel mají stejnou mohutnost (jsou „spočetné“). • Důkaz: f: každému sudému číslu přiřadím číslo „poloviční“ (x div 2) g: každému přirozenému číslu přiřadím číslo dvojnásobné (číslu 2 odpovídá 1, … číslu 30 číslo 15, ….) Odtud je zřejmé, že sudých čísel, lichých čísel i všech přirozených čísel je stejný počet (tj. spočetně).

  22. Diagonalizační metoda • Věta: Množina reálných čísel je nespočetná. • Důkaz: V tomto případě dokážeme sporem, že se korespondenci mezi přirozenými čísly a reálnými čísly vytvořit nepodaří. Pro důkaz sporem předpokládejme, že taková korespondence existuje,tj. existuje tedy nějaká funkce f, která každému přirozenému číslu přiřadí odpovídající číslo reálné

  23. Diagonalizační metoda Předpokládejme například f: Snadno ukážeme, že existuje xR, které v tabulce nikde není. Pomocí diagonalizační metody budeme tvořit číslo x=0.x1x2x3x4…, kde xi se liší od čísla na i-tém řádku právě v i-té pozici za čárkou. V našem případě tedy x17 (tj. např. 5), x22 (tj. např. 3), …

  24. Diagonalizační metoda Námi zkonstruované číslo x=0.5374… se liší od čísla na i-tém řádku právě v i-té pozici a v tabulce tedy určitě není. Odtud je zřejmé, že funkce f není korespondence a jelikož f byla zcela obecná funkce, je zřejmé, že žádnou takovou f zkonstruovat nelze. Odtud tedy plyne, že reálných čísel je nespočetně.

  25. Univerzální Turingův stroj • Věta: Je možné zkonstruovat univerzální Turingův stroj U, který simuluje činnost jakéhokoliv Turingova stroje M, jehož definice slouží jako vstup. L(U)={M#w | wL(M) } Poznámka: Univerzálnímu Turingovu stroji U dáme na pásku definici stroje M a za oddělovačem # potom vstupní slovo w. Univerzální stroj Upotom simuluje činnost stroje M a pokud M slovo w přijme, přijme jej i stroj U.

  26. Univerzální Turingův stroj • Jak se konstrukce UTS provede prakticky? Klíčová je definice stroje M, přičemž jde o vhodné zakódování popisu stroje (máme M=(Q,,,,q0,qacc,qrej)) Zakódování je poměrně snadné: např. 0n10m10k10s10t10r10u10v může reprezentovat stroj s n stavy (očíslované 0 až n-1), m páskovými symboly reprezentovanými čísly 0 až m-1, z nichž prvních k symbolů jsou symboly vstupní abecedy, počáteční stav je s, přijímací stav je t, zamítací stav je r, a zbytek řetězce definuje funkci  např. řetězec 0p10a10q10b10 může reprezentovat (p,a)=(q,b,L)

  27. Univerzální Turingův stroj • Příklad konstrukce UTS Nechť přechodová funkce je dána následovně: (q0,0)=(q1,0,R) 01010010100 (q0,1)=(q1,0,L) 01001001010 (q1,0)=(q0,0,L) 0010101010 (q1,1)=(q1,0,R) 0010010010100 Dohromady lze zapsat celý kód jako: 0101001010011010010010101100101010101100100100101001111101 Jednotlivé části definice přechodové funkce od sebe dělí 11, po trojici jedniček (111 – předtím nikde být nemohla) následuje vstupní slovo w=1101

  28. Univerzální Turingův stroj • Jelikož Q je konečná množina, je konečná množina a je rovněž konečná množina, je zřejmé, že každý Turingův stroj mohu tímto způsobem zakódovat. • Takto získaný kód je tzv. Gödelovo číslo Turingova stroje M. (Kurt Gödel – 1906 Brno - 1978 ) • Je zřejmé, že bude existovat mnoho různých kódů pro tentýž Turingův stroj (v našem příkladu například záměnou řádků v definici přechodové funkce  lze získat 24 různých kódů).

  29. Univerzální Turingův stroj • Univerzálnímu Turingovu stroji U dáme na pásku Gödelovo číslo Turingova stroje M a za oddělovačem # (111)slovo w. • Univerzální stroj Upotom simuluje činnost stroje M a pokud M slovo w přijme, akceptuje toto slovo i stroj U. - - - - • Ne každý binární řetězec je Gödelovým číslem nějakého Turingova stroje M (101, 0101110, …) • Pro tyto případy lze snadno zajistit, aby Univerzální Turingův stroj S ukončil činnost ve stavu reject

  30. Důkaz k problému zastavení • Uvažujme všechnyTS pracující nad vstupní abecedou {0,1} • Každý z těchto strojů je identifikován svým číslem a pro příslušné vstupní slovo se buď zastaví (H), nebo zacyklí (L) • Zastavení umíme poznat a vyplnit do tabulky: První stroj v tabulce se zastaví po zpracování prázdného slova e, slov 0, 1 atd., ale na vstup 00 se v daném čase odpověď nepodařilo získat atd.

  31. Důkaz k problému zastavení • Předpokládejme, že existuje nějaký Turingův stroj K, který umí rozhodnout problém zastavení. • To znamená, že stroj K pro každý Turingův stroj Mx a vstupní slovo Mx#w se K zastaví ve stavu accept, pokud se Mx zastaví na w a zastaví ve stavu reject, pokud se Mx zacyklí na w • Na základě činnosti stroje K potom můžeme tabulku postupně doplňovat tak, že pro každý stroj a příslušný vstup zapíšeme do tabulky i symboly reprezentující zacyklení stroje (L), vždy, když K skončí ve stavu reject

  32. Důkaz k problému zastavení • Tabulka potom bude vypadat následovně přičemž symbol H v příslušné buňce znamená, že odpovídající Turingův stroj se na daný vstup zastavil (ať už ve stavu accept či reject), zatímco L značí jeho zacyklení

  33. Důkaz k problému zastavení • Diagonalizační metodou snadno sestavíme TS X, který se ode všech strojů v tabulce bude lišit chováním na diagonále. • Takový stroj X potom ovšem v tabulce zdánlivě chybí, ale jelikož zde máme všechny TS, dostáváme spor s předpokladem, že tabulku lze vyplnit s pomocí stroje K, který umí rozhodnout problém zastavení.

  34. Důkaz k problému zastavení • Sporem jsme došli ke zjištění, že takovou tabulku nelze vyplnit a tedy neexistuje ani TS K, který umí rozhodnout problém zastavení. • Platí tedy: Problém zastavení Turingova stroje je algoritmicky nerozhodnutelný. • Poznámka: Vždy můžeme simulovat činnost konkrétního TS při zpracování konkrétního vstupu w. Když se stroj zastaví, máme rozhodnuto a simulaci můžeme ukončit, ale když se nezastavuje, nemáme žádný obecný způsob jak rozhodnout, kdy simulaci zastavit a s jistotou říci, že se stroj zacyklil.

  35. Další nerozhodnutelné problémy Je algoritmicky rozhodnutelné, zda: • TS přijímá prázdné slovo? • TS přijímá alespoň jedno slovo? • TS přijímá každé slovo? • TS přijímá konečnou množinu slov? • Jsou dané dva TS ekvivalentní? • Je jazyk rozpoznatelný daným TS regulární? …. Ve všech výše uvedených případech je odpověď negativní.

  36. Algoritmicky nerozhodnutelný problém • Věta: Problém neprázdnosti jazyka přijímaného Turingovým strojem je algoritmicky nerozhodnutelný. ETM={M1| M1 je TS a L(M1)≠} • Důkaz: Předpokládejme, že existuje TS K, který rozhoduje problém neprázdnosti To znamená, že K se zastaví ve stavu accept, je-li L(M1)≠ a ve stavu reject, jestliže L(M1)= Na základě tohoto předpokladu ukážeme (redukcí), že pomocí takového stroje K bychom uměli rozhodnout halting problem, což ale už víme, že nelze a tím se dostaneme do sporu. Vezměme libovolný Turingův stroj N a slovo w, pro které bychom chtěli zjistit, zda N se zastaví na vstup w.

  37. Algoritmicky nerozhodnutelný problém • Pokračování důkazu: Nyní sestrojíme stroj N1 takový, že na jakýkoliv vstup x udělá následující kroky: 1) smaže vstup x 2) napíše si na pásku slovo w (má jej natvrdo „uložené“ v řídící jednotce) 3) simuluje činnost stroje N na vstupu w (i popis stroje N má natvrdo „uložený“ v řídící jednotce) 4) zastaví se ve stavu accept, jestliže se N zastaví na vstup w Činnost stroje N1 je zřejmá z následujícího obrázku: w x N N1 w smaž x napiš w simuluj N N

  38. Algoritmicky nerozhodnutelný problém • Pokračování důkazu: Stroj N1 pracuje tak, že na libovolný vstup x se zastaví právě tehdy, když se stroj N zastaví na vstup w, tj. L(N1) =∑*pokud se N zastaví na vstup w, nebo = pokud se Nnezastaví na vstup w Za předpokladu, že máme stroj K, který umí rozhodnout problém neprázdnosti jazyka, pustíme nyní tento stroj na jazyk L(N1). Na základě jeho výsledku jsme schopni rozhodnout halting problem pro stroj N a slovo w, což ale nelze a tím se dostáváme do sporu. Tím je věta: Problém neprázdnosti jazyka přijímaného Turingovým strojem je algoritmicky nerozhodnutelný. ETM={M1| M1 je TS a L(M1)≠} dokázána.

  39. Ekvivalence dvou TS • Věta: Problém ekvivalence dvouTuringových strojů je algoritmicky nerozhodnutelný. EQTM={M1,M2| M1 a M2 jsou TS a L(M1)=L(M2)} • Důkaz: Předpokládejme, že existuje TS K, který rozhoduje problém ekvivalence To znamená, že K se zastaví ve stavu accept, jsou-li příslušné jazyky ekvivalentní. Uvažujme TS N, který na jakýkoliv vstup přejde do stavu reject a tedy L(N) = Ø Pokud stroj K rozhoduje problém ekvivalence, použitím tohoto stroje na vstup M1,Njsme schopni rozhodnout problém neprázdnosti jazyka přijímaného Turingovým strojem M1, což ale nelze (viz předchozí věta) a máme tedy spor s předpokladem, že výše uvedený problém je rozhodnutelný.

  40. Další nerozhodnutelný problém Postův korespondenční problém: • Lze ze zadané sady dominových kostek složit posloupnost,ve které je výsledný horní řetězec stejný jako řetězec dolní? Příklad: • Kostky lze používat opakovaně, ne všechny je nutné použít. • Řešením je např. posloupnost: … abcaaabc … abcaaabc

  41. Další nerozhodnutelný problém Postův korespondenční problém: • Jindy je zřetelně vidět neřešitelnost takového úkolu. • Příklad: • Neřešitelnost je zřejmá z tvaru kostek. • Věta: Postův korespondeční problém je algoritmicky nerozhodnutelný.

  42. Turingovsky nerozpoznatelný problém • Již víme, že řada problémů je Turingovsky nerozhodnutelných. • Problém zastavení TS je nerozhodnutelný (příslušný jazyk není rekurzivní), ale určitě je rozpoznatelný (rekurzivně spočetný) • Existují ovšem i problémy Turingovsky nerozpoznatelné. Turingovsky nerozpoznatelné jazyky Rekurzivně spočetné jazyky Rekurzivní jazyky

  43. Turingovsky nerozpoznatelný problém • Věta: Jazyk L je Turingovsky rozhodnutelný, pokud L i jeho doplněk jsou Turingovsky rozpoznatelné. • Důkaz: K jazyku L a k jeho doplňku sestrojím odpovídající TS M1 a M2 a na každé vstupní slovo se jeden z nich zastaví. Potom sestrojím TS M takový, že přijme slovo v, které akceptuje M1 a odmítne slovo w, které přijme M2. Takový M potom rozhoduje jazyk L.

  44. Turingovsky nerozpoznatelný problém • Důsledek: Doplněk jazyka HALTTM={M,w| M je TS a M se zastaví na slovo w} je Turingovsky nerozpoznatelný (to znamená, že není rekurzivně spočetný). Jde o jazyk LOOPTM={M,w| M je TS a M se zacyklí na slovo w} • Důkaz: Problém zastavení je Turingovsky rozpoznatelný. Pokud by byl Turingovsky rozpoznatelný i jeho doplněk, potom by dle předchozí věty byl problém zastavení Turingovsky rozhodnutelný, což ale není pravda.

  45. Algoritmicky nerozpoznatelný problém • Proč má doplněk některých problému jinou obtížnost? • Naše logika vychází z předpokladu, že pokud po vyřešení originálního problému odpoví program ANO, odpověď na doplňkový problém je NE a naopak • Tato logika ale neuvažuje s tím, že program se může zacyklit a potom nemáme možnost změnit odpověď na opačnou

  46. Algoritmicky nerozpoznatelný problém • Věta: Problém neprázdnosti jazyka přijímaného Turingovým strojem je algoritmicky rozpoznatelný. ETM={M1| M1 je TS a L(M1)≠} • Důkaz: Příslušný nedeterministický TS zkouší možná slova a pokud některé wL(M1), stroj M1 se zastaví ve stavu accept, jinak všechny větve skončí v cyklu nebo ve stavu reject • Věta: Problém prázdnosti jazyka přijímaného Turingovým strojem je algoritmicky nerozpoznatelný. nonETM={M1| M1 je TS a L(M1)=} Důkaz: Jelikož doplněk tohoto problému (neprázdnost jazyka) je Turingovsky rozpoznatelný, ale nikoliv rozhodnutelný. Pokud by byl rozpoznatelný tak0 problém prázdnosti jazyka, problém neprázdnosti by byl i rozhodnutelný -> spor.

  47. Teorie vyčíslitelnosti Pokročilé partie: • Nerozhodnutelnost logických teorií (Church, Gödel) Uvažujeme-li například jednoduchou matematickou teorii, která pracuje pouze s přirozenými čísly a operacemi součtu a součinu(Th(N,+,*)), lze dokázat, že neexistuje algoritmus, který by obecně dokázal rozhodnout, zda příslušné tvrzení je či není pravdivé. • Příklady tvrzení v takové teorii: xy [x+x=y] pravdivé tvrzení yx [x+x=y] nepravdivé tvrzení xyz [x=y*z & y≠1 & y≠x] nepravdivé tvrzení qpxy [p>q & (x,y > 1  (xy≠p & xy≠p+2))] ???(existence libovolně velkých párů prvočísel = prvočísla lišící se o 2)

  48. Teorie vyčíslitelnosti • Nekomprimovatelnost určitých řetězců • Uvažujme řetězce 01010101010101010101 10x řetězec 01 111001011010001101111 ??? • Ke komprimaci použijeme Turingův stroj S, komprimovaný řetězec x označíme jako slovo w • Pustíme-li potom Turingův stroj S na slovo w, získáme jako výstup původní slovo x • DEF:Minimálním popisem slova x(značíme d(x)) rozumíme nejkratší řetězec M,w, kde M je Turingův stroj, který na vstup w zapíše na pásku x a zastaví.

  49. Teorie vyčíslitelnosti • DEF: Nechť x je řetězec. Říkáme, že x je c-komprimovatelný, pokud platí d(x)≤|x|-c Jestliže x není komprimovatelný s c=1, potom říkáme, že x je nekomprimovatelný. • Věta: Existují nekomprimovatelné řetězce všech délek. • Důkaz: Počet řetězců délky n je větší, než počet popisů délky n-1. Každý popis popisuje nejvýše jeden řetězec, a proto některé řetězce délky n nemají popis kratší než n.

  50. Turingův stroj s orákulem • Turingův stroj je možné doplnit orákulem, což je externí zařízení, které pro daný jazyk L rozhoduje zda wL a na požádání tuto informaci Turingovu stroji sděluje. • Turingův stroj M s orákulem pro jazyk L značíme ML. • Můžeme uvažovat například Turingův stroj M s orákulem pro jazyk L(M). Nyní jsme schopni rozhodnout problém zastavení stroje M (zeptám se orákula, zda příslušné wL(M) a dle odpovědi přejdu do stavu accept či reject) • Turingův stroj doplněný orákulem je mnohem silnější než obyčejný TS, ale i tak existují problémy, které jsou i tímto strojem nerozhodnutelné.

More Related