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é.
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).
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
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.
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.
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í
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 gramatikami G a H je algoritmicky nerozhodnutelný. EQCFG={G,H | G a H jsou bezkont. gramatiky a L(G)=L(H)}
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.
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 můžeme použít jako podprogram v jiném programu.
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“
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“
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“
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“
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)
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
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
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
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
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 ab, a,bA 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á.
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á.
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ě).
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é
Diagonalizační metoda Předpokládejme například f: Snadno ukážeme, že existuje xR, 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 x17 (tj. např. 5), x22 (tj. např. 3), … n f(n) 1 2.7453… 2 317.6248… 3 0.0764… 4 0.9632… …
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ě. n f(n) 1 2.7453… 2 317.6248… 3 0.0764… 4 0.9632… …
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 | wL(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 U potom simuluje činnost stroje M a pokud M slovo w přijme, přijme jej i stroj U.
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)
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
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ů).
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 U potom 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
Důkaz k problému zastavení Uvažujme všechny TS 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. e 1 00 01 …. M0 H … M1 M2 M3
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
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í e 1 00 01 …. M0 H L … M1 M2 M3
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í. e 1 00 01 …. M0 HL H L … M1 M2 LH M3
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.
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í.
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.
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 N N1 w N x smaž x napiš w simuluj N
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 N nezastaví 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.
Ekvivalence dvou TS Věta: Problém ekvivalence dvou Turingový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ý.
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
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ý.
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
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.
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.
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
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é wL(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.
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: xy [x+x=y] pravdivé tvrzení yx [x+x=y] nepravdivé tvrzení xyz [x=y*z & y≠1 & y≠x] nepravdivé tvrzení qpxy [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)
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í.
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.
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 wL 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é wL(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é.
Algoritmicky nerozhodnutelný problém Věta: Problém přijetí prázdného slova Turingovým strojem je algoritmicky nerozhodnutelný. ATM={M1,e | M1 je TS a eL(M1)} Dokažte: a) jde o problém algoritmicky rozpoznatelný b) jde o problém algoritmicky nerozhodnutelný