Teorie vyčíslitelnosti – věta o rekurzi

Slides:



Advertisements
Podobné prezentace
DOTAZOVACÍ JAZYKY slajdy přednášce DBI006
Advertisements

Deduktivní soustava výrokové logiky
DOTAZOVACÍ JAZYKY slajdy přednášce DBI006
J. Pokorný 1 DOTAZOVACÍ JAZYKY slajdy přednášce DBI006 J. Pokorný MFF UK
J. Pokorný 1 DOTAZOVACÍ JAZYKY slajdy přednášce DBI006 J. Pokorný MFF UK
Rozhodnutelnost.
Fakulta životního prostředí Katedra informatiky a geoinformatiky
J. Pokorný 1 DOTAZOVACÍ JAZYKY slajdy přednášce DBI006 J. Pokorný MFF UK Odpřednášeno
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Teorie vyčíslitelnosti – věta o rekurzi
ALGO – Algoritmizace 1. cvičení
Algebra.
Teorie čísel Nekonečno
Varianty Turingova stroje Výpočet funkcí pomocí TS
Algebraické výrazy: lomené výrazy
Úvod do Teorie množin.
Základní číselné množiny
Algoritmizace a programování
Seminář – Základy programování
Vyhledávání dat podle určených kritérií Máte za úkol vytvořit databázi klientů v bance s jejich osobními údaji, čísly účtů a konečnými zůstatky na těchto.
13AMP 6. přednáška Ing. Martin Molhanec, CSc.. Co jsme se naučili naposled Synchronizace procesů Synchronizace procesů Producent-Konzument Producent-Konzument.
Church-Turingova teze Univerzální Turingův stroj Diagonalizace
Algoritmizace a základy programování
Téma: Shodnost trojúhelníků
Formální jazyky a gramatiky
Abeceda a formální jazyk
Logika: systémový rámec rozvoje oboru v ČR a koncepce logických propedeutik pro mezioborová studia (reg. č. CZ.1.07/2.2.00/ , OPVK)
Příklady jazyků Příklad 1: G=({S}, {0,1}, P, S)
Gramatiky a jazyky Přednáška z předmětu Řízení v komplexních systémech
Teorie vyčíslitelnosti
KOMBINAČNÍ LOGICKÉ FUNKCE
Predikátová logika.
V matematice existují i seskupení objektů, které nejsou množinami.
Definiční obory. Množiny řešení. Intervaly.
Vztah bezkontextových jazyků a ZA
Regulární výrazy Regulární výrazy představují další možnost popisu regulárních jazyků (právě od nich dostaly své jméno). Definice: Množina všech regulárních.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Složitost II TIN063 Ondřej Čepek. 2 Sylabus 1.Výpočetní model – DTS a NTS 2.Časová a prostorová složitost výpočtu 3.Technické pomůcky: lineární komprese,
P-těžké, np-těžké a np-úplné problémy
Pre-algebra Antonín Jančařík.
Turingův stroj.
Automaty a gramatiky.
Mlhavost Fuzzy logika, fuzzy množiny, fuzzy čísla
Úvod do logiky (presentace 2) Naivní teorie množin, relace a funkce
Čísla Množiny a podmnožiny čísel Přirozená čísla Nula Celá čísla
Jak může Turingův stroj řešit úlohu? Mám rozhodnout, zda posloupnost znaků 0 a 1 obsahuje dvě 0 za sebou.
Algoritmicky nerozhodnutelný problém Věta: Problém přijetí prázdného slova Turingovým strojem je algoritmicky nerozhodnutelný. A TM ={  M,e  | M je TS.
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 1 / 15Doc. Josef Kolář (ČVUT)Turingovy strojeGRA, LS 2012/13, Lekce 12 1 / 21 TURINGOVY.
Podprogramy (subroutines) Pojmenované kousky programu, které –tvoří logicky ucelené části –se v programu opakují Jsou zapsány na jednom místě a v případě.
Programování v MATLABu © Leonard Walletzký, ESF MU, 2000.
Algoritmizace a programování Algoritmy 1 - Úvod. Základní pojmy Počítačový program Počítačový program zápis zdrojového kódu, kterému rozumí počítač zápis.
Soustavy lineárních rovnic Matematika 9. ročník Creation IP&RK.
Úvod do databázových systémů
Množina bodů dané vlastnosti
Definiční obor a obor hodnot
Obsah a rozsah pojmu Pojem lze vymezit buď definicí, jež určí nutné specifické vlastnosti, anebo výčtem všech předmětů, které pod tento pojem spadají.
C# konzole – Podíl dvou čísel, podmínka IF
ZAL – 3. cvičení 2016.
Konstrukce trojúhelníku
Příkazy cyklu (1) Umožňují vícekrát (nebo ani jednou) pro-vést určitý příkaz Jazyk C rozlišuje příkaz cyklu: s podmínkou na začátku: obecný tvar: while.
Nerovnice Ekvivalentní úpravy - 1..
Množina bodů dané vlastnosti
Gödelova(y) věta(y).
Cyklus for (1) Obecný tvar: for (výraz1; výraz2; výraz3) příkaz
Množina bodů dané vlastnosti
Soustavy lineárních rovnic
Definiční obory. Množiny řešení. Intervaly.
Konstrukce trojúhelníku
Algoritmizace a datové struktury (14ASD)
Algebraické výrazy: lomené výrazy
Transkript prezentace:

Teorie vyčíslitelnosti – věta o rekurzi Živé organismy mají schopnost vlastní reprodukce, zatímco u neživých věcí tuto schopnost nepředpokládáme. Jaký je vztah mezi strojem a živým organismem? Moderní biologie vyznává zásadu, že projevy života u organismů lze vysvětlit na principech mechaniky. Přijmeme-li předpoklady, že Živé organismy jsou stroje Živé organismy jsou schopné reprodukce Stroje nejsou schopné reprodukce dostáváme logický paradox, který se zdá být způsobený první premisou.

Teorie vyčíslitelnosti – věta o rekurzi Vycházíme z přesvědčení, že stroj nemůže vytvořit sám sebe už proto, že továrna na stroje musí být složitější než stroj, který se zde vyrábí. Továrna vyrábějící auta, roboty či výtahy musí být složitější než její produkt (auto, robot, výtah), protože musí mít nejen plán výroby tohoto produktu, ale současně také zřejmě při jeho výrobě využívá dalších strojů a zařízení (a tedy mít i jejich detailní popis) Takové uvažování ale není správné a ukážeme, že existují stroje, které jsou schopné reprodukce. Pracujeme s Turingovými stroji, a proto vytvoříme Turingův stroj, který vytiskne svůj vlastní popis (kód).

Teorie vyčíslitelnosti – věta o rekurzi Lemma: Lze vytvořit Turingův stroj Q realizující funkci q: *  * tak, že pro libovolné w  * je q(w) je popis Turingova stroje Pw, který vytiskne w a zastaví se. Stroj Pw tiskne slovo w Stroj Q tiskne popis (kód) stroje Pw Q w Pw <Pw> Ke slovu w vytvoř stroj Pw a vypiš jeho kód ???... Pw w Pw

Teorie vyčíslitelnosti – věta o rekurzi Důkaz: K libovolnému řetězci w  * lze sestrojit Turingův stroj Pw, který má w zabudováno ve svém kódu a po spuštění jej vytiskne. Stroj Q je definován následovně: Q = „Na vstupní slovo w: 1. Sestroj Turingův stroj Pw Pw = „Na libovolný vstup: 1. Smaž vstupní slovo 2. Napiš na pásku slovo w 3. Zastav“ 2. Vypiš <Pw>.“

Teorie vyčíslitelnosti – věta o rekurzi Konstrukce stroje „SELF“: Turingův stroj SELF vytvoříme ve dvou krocích jako dva na sebe bezprostředně navazující stroje A a B tak, aby výsledkem práce stroje SELF bylo vytištění vlastního kódu <SELF> = <AB>. Nejprve se spustí stroj A, jehož cílem je vypsat kód stroje B, a naopak potom stroj B vypíše kód stroje A. Vypsáním kódu <AB> získáme na pásce kód <SELF>.

Konstrukce stroje „SELF“ Ke konstrukci stroje A použijeme stroj P<B> popsaný funkcí q(<B>) („vypiš kód stroje B“). Stroj A tedy vytiskne <B> a k dokončení jeho definice tedy nutně potřebujeme získat popis stroje B. Bylo by snadné definovat analogicky i stroj B (B je q(<A>)), ale to by byla nepoužitelná definice kruhem. Potřebujeme tedy stroj B definovat jiným způsobem.

Konstrukce stroje „SELF“ Jelikož jsme definovali A pomocí funkce q(<B>), stroji B stačí získat svůj vlastní popis <B>. Pokud bychom na tento popis aplikovali funkci q, dostaneme definici stroje A. Jak získáme popis stroje B? Tento popis (<B>) přece zůstal na pásce po ukončení činnosti stroje A. Stroj B tedy přečte obsah pásky, spočte q(<B>)=<A> a zkombinuje kód na pásce do popisu jediného stroje <AB>, což je dle definice stroj <SELF>.

Konstrukce stroje „SELF“ - shrnutí Stroj SELF = AB je definován následovně: A = P<B> B = „Na vstup <M>, kde M je Turingův stroj: 1. Vytvoř q(<M>) % Turingův stroj tisknoucí <M> 2. Zkombinuj q(<M>) a <M> do jediného Turingova stroje 3. Vypiš kód výsledného stroje a zastav.“ A (=P<B>) B A (=P<B>) <AB> B

Funkce stroje „SELF“ Stroj SELF funguje následujícím způsobem: 1. Nejprve běží stroj A, který vytiskne popis B (to jest <B>). 2. Zahájí činnost stroj B a přečte si z pásky svůj vlastní kód. 3. Stroj B vytvoří q(<B>)=A a zkombinuje jeho kód s kódem <B> do jediného Turingova stroje (<AB>= <SELF>). 4. Stroj B vypíše výsledný kód a zastaví.

Funkce stroje „SELF“ Je to jen teorie, nebo se to dá skutečně naprogramovat? Příklad 1: Vypiš tuto větu. Řešení: program (); begin listing (program); % vypiš soubor „program“ end Problém: manipuluje se zdrojovým souborem

Funkce stroje „SELF“ Příklad 2: Vypiš tuto větu dvakrát tak, že podruhé bude v uvozovkách: „Vypiš tuto větu dvakrát tak, že podruhé bude v uvozovkách:“ Lépe odpovídá chápání odvolávky kódu na sama sebe Lépe koresponduje i s popsanou konstrukcí stroje SELF Stroj B: Vypiš tuto větu dvakrát tak, že podruhé bude v uvozovkách: Stroj A: “Vypiš tuto větu dvakrát tak, že podruhé bude v uvozovkách:“ Stroj A nejprve vytiskne popis B (<B> - věta v uvozovkách) a stroj B svůj vlastní popis zpracuje tak, že jej zkombinuje s již vytištěným textem (vytiskne před text v uvozovkách)

„SELF“ v praxi Quine – počítačový program, který vypíše svůj vlastní kód (Willard Van Orman Quine – vlivný americký filozof; pojmenování použil Douglas R. Hofstadter ) program ( ); print(„program ( ); “); print(„print(„program ( ); “);“); ..... Naivní postup nás vede k nekonečné posloupnosti příkazů Něco se musí vytisknout, k tomu potřebuji příkaz print( ) a potom nutně musím vytisknout tento příkaz print ( ) ...

Quine Řešení: dva stroje, kód v uvozovkách, sebereference, ... Namísto neustálého opakování částí kódu použijeme proměnnou, do níž kód uložíme a potom vytiskneme obsah proměnné (sebereference) f=„main(); begin print(‘f=„‘, f, ‘ ”; ‘, f); end.”; main(); begin print(‘f=„‘, f, ‘ ”; ‘, f); end.

Quine Možné technické problémy: uvozovky, apostrofy, ... lze snadno řešit použitím ASCII kódu výsledný program nemá stejnou „strukturu“ (řádkování) lze řešit vhodným použitím příkazů pro odřádkování ("\n") Další info a příklady v mnoha programovacích jazycích: http://www.nyx.net/~gthompso/quine.htm#languages http://rosettacode.org/wiki/Quine http://www.madore.org/~david/computers/quine.html

Věta o rekurzi Věta (Kleene): Nechť T je Turingův stroj realizující funkci t: *x* *. Potom existuje Turingův stroj R realizující funkci r: * * tak, že pro každé w  * platí r(w) = t(<R>,w). K vytvoření Turingova stroje R, který si opatří svůj vlastní kód a potom jej využívá při výpočtu, stačí sestrojit stroj T, který dostává popis stroje <R> jako zvláštní vstup. Na základě výše uvedené věty tím získáme stroj R, který funguje stejně jako stroj T, ale již s automaticky doplněným popisem <R>.

Věta o rekurzi Důkaz: - analogicky jako při konstrukci stroje SELF Stroj A je definován jako q(<BT>). Musíme ošetřit, aby tisk kódu <BT> nezničil vstupní slovo w, a proto pozměníme stroj A tak, aby tiskl <BT> až za slovo w. Po skončení činnosti stroje A bude na pásce w<BT> A (=P<BT>) w B T A (=P<BT>) w<BT> B T

Věta o rekurzi Stroj B nyní prozkoumá pásku a aplikuje na ni funkci q. Jelikož q(<BT>)=A, získáváme jeho kód, zkombinujeme jej s <BT> do kódu jediného stroje <ABT>= <R>. Na pásku se zapíše řetězec <R>w a řízení se předá stroji T. A (=P<BT>) w<BT> B T A (=P<BT>) <R>w B T

Věta o rekurzi Význam věty o rekurzi: Turingův stroj může získat svůj vlastní kód a potom s ním pracovat Užitečná vlastnost pro teorii – získá-li stroj svůj vlastní popis, může nejen vytisknout svůj kód (SELF), ale také zjistit počet stavů, sám sebe simulovat atd. Používá se v důkazech Na konstrukci, která byla použita ve výše uvedených důkazech, mohou být založeny i počítačové viry.

Věta o rekurzi - využití Věta: Problém přijetí prázdného slova Turingovým strojem je algoritmicky nerozhodnutelný. Důkaz: předpokládejme, že máme stroj D rozhodující problém přijetí prázdného slova Sestrojíme stroj M následovně: M = „Na libovolný vstup w: 1. Smaž vstup w 2. Získej svůj vlastní popis <M> 3. Pusť D na vstup <M,e> 4. Udělej opačné rozhodnutí než udělal stroj D. Jestliže D skončí ve stavu accept, potom reject a naopak.“ Spustíme-li nyní M na vstup e, dělá přesný opak toho, než by dělat měl podle stroje D, čímž dospíváme ke sporu.

Věta o rekurzi - využití Def: Nechť M je Turingův stroj, potom délkou popisu <M> rozumíme počet symbolů potřebných k zapsání M. Def: M je minimální Turingův stroj, jestliže neexistuje ekvivalentní Turingův stroj s kratším popisem. Věta: Problém minimálního Turingova stroje je algoritmicky nerozhodnutelný. MINTM={<M>| M je minimální Turingův stroj}

Věta o rekurzi - využití Důkaz: Předpokládejme, že existuje M je Turingův stroj, který rozhoduje MINTM. Sestrojíme Turingův stroj C tak, že C = „Na vstup w: 1. Získej svůj vlastní popis <C> 2. Generuj Turingovy stroje (gödelova čísla) a testuj je strojem M, dokud nenajdeš stroj D, jehož popis je delší než popis C 3. Simuluj činnost stroje D na vstup w.“ Jelikož M rozhoduje a posloupnost gödelových čísel je nekonečná, krok 2 skončí nalezením stroje D, který má delší popis než C. V kroku 3 C simuluje D a je s ním tedy ekvivalentní. Jelikož je popis C kratší než popis D, dostáváme spor s předpokladem, že D je minimální Turingův stroj.

Riceova věta Kromě důkazu nerozhodnutelnosti některých dílčích problémů existuje i tvrzení, které ukazuje nerozhodnutelnost celé třídy problémů. Máme-li libovolný Turingův stroj M, potom následující problémy jsou nerozhodnutelné: Obsahuje L(M) i popis stroje M (tj. <M>)? Je L(M) = *? Je L(M) prázdný / neprázdný? Je L(M) konečný / nekonečný? Nerozhodnutelnost těchto problémů vyplývá z Riceovy věty.

Riceova věta Def: Vlastnost jazyka je množina jazyků. Říkáme, že jazyk L splňuje vlastnost L  P. Def: Pro vlastnost jazyka P definujeme jazyk LP, který obsahuje Turingovy stroje přijímající jazyka z P, tedy LP ={<M>| L(M)  P } Umíme-li rozhodnout LP , znamená to, že jazyk reprezentovaný příslušným Turingovým strojem splňuje vlastnost P. Příklad – vlastnosti jazyka: {<M>| L(M) je nekonečný} ETM ={<M>| L(M) = } Naopak: {<M>| M má 9 stavů} – nejde o vlastnost jazyka, ale stroje!

Riceova věta Def: Vlastnost jazyka je triviální, pokud ji splňuje (nebo naopak nesplňuje) každý rekurzivně spočetný jazyk. Zřetelně platí, že pokud je P triviální, potom i doplněk P je triviální. Def: Vlastnost jazyka je netriviální, pokud existuje alespoň jeden jazyk, který tuto vlastnost nemá (P není prázdná, ale současně existuje jazyk LP). Věta (Rice): Jestliže P je netriviální vlastnost jazyka, potom jazyk LP ={<M>| L(M)  P } je nerozhodnutelný. Důsledek: Jakákoliv zajímavá vlastnost jazyků reprezentovaných Turingovým strojem je algoritmicky nerozhodnutelná (jde o vlastnost jazyka, nikoliv TS – viz výše uvedený rozhodnutelný problém s počtem stavů atd.).

Riceova věta Důkaz: Předpokládejme netriviální vlastnost jazyka P a nechť P (pokud by platilo, že P, budu pracovat s doplňkem P, který automaticky reprezentuje také netriviální vlastnost, a dojdu ke stejným závěrům) Vzhledem k definici netriviálnosti musí existovat alespoň jeden jazyk M0 P Předpokládejme, že LP ={<M>| L(M)  P } je rozhodnutelný Nyní provedeme redukci problému přijetí slova Turingovým strojem (ATM) na problém LP Jelikož už víme, že ATM je algoritmicky nerozhodnutelný, bude totéž potom platit i pro LP

Riceova věta K libovolnému stroji M a slovu w sestavíme stroj N následovně: Na vstup x 1. Ignoruj vstup a simuluj činnost stroje M na slovu w 2. Jestliže M se zastaví a reject, potom také skonči a reject 3. Jestliže M se zastaví a accept, potom simuluj M0 na vstup x 4. Jestliže M0 přijme x, potom skonči ve stavu accept Je zřejmé, že jestliže M přijme w, potom L(N)=L(M0), jinak L(N)= Jestliže M přijme w, potom L(N)=L(M0)P a jestliže M nepřijme w, potom L(N)=P Tedy <M,w> ATM  NLP A dostáváme se do sporu s nerozhodnutelností ATM.

Riceova věta Které z následujících problémů jsou nerozhodnutelné v důsledku Riceovy věty? Zastaví se stroj M na řetězec 001? ANO – netriviální vlastnost Má stroj M více než deset stavů? NE – vlastnost stroje, nikoliv jazyka Platí, že pro libovolné n se stroj M na vstupech délky nejvýše n vícekrát zastaví než nezastaví? Je pravda, že pro libovolné vstupní slovo stroj M realizuje jeho zdvojení?

Hierarchie jazyků Všechny jazyky Rekurzivně spočetné jazyky doplněk ATM ETM .. Rekurzivně spočetné jazyky HALT ATM .. Rekurzivní jazyky ekviv. reg. výrazů Třída NP SAT .. Třída P Bezkontextové jazyky Regulární jazyky