Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Teorie vyčíslitelnosti Konečné automaty jsou dobrým modelem takových zařízení, která využívají jen velmi málo paměti. Zásobníkové automaty mají k dispozici.

Podobné prezentace


Prezentace na téma: "Teorie vyčíslitelnosti Konečné automaty jsou dobrým modelem takových zařízení, která využívají jen velmi málo paměti. Zásobníkové automaty mají k dispozici."— Transkript prezentace:

1 Teorie vyčíslitelnosti Konečné automaty jsou dobrým modelem takových zařízení, která využívají jen velmi málo paměti. Zásobníkové automaty mají k dispozici teoreticky neomezeně velkou paměť, ale lze ji využívat jen v režimu LIFO (last in – first out) K řešení mnoha praktických úloh vystačíme s KA a ZA, ale současně víme, že i poměrně jednoduše definované jazyky (například L = {a i b i c i |i  1} ) nelze těmito zařízeními rozpoznávat. Potřebujeme tedy nutně ještě obecnější model.

2 Turingův stroj Byl navržen Alanem Turingem ( ) v roce 1936 Má neomezenou paměť (pásku), tj. páska může být libovolně dlouhá Z pásky symboly nejen čte, ale také si na pásku zapisuje Čtecí (a současně i zapisovací) hlava se nad páskou pohybuje v obou směrech Má přijímací stav q accept, a zamítací stav q reject, jejichž dosažením je určen výsledek výpočtu 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í

3 Turingův stroj DEF: Turingův stroj M je sedmice M=(Q, , , , q 0, q accept, q reject ), kde Q je konečná množina vnitřních stavů stroje  je konečná množina vstupních symbolů neobsahující prázdný znak Ø (  „mezeru“),  je konečná množina páskových symbolů, pro kterou platí Ø   a     je přechodová funkce  : Qx   Qx  x{L,R} q 0 je počáteční stav stroje (q 0  Q) q accept je přijímací stav stroje (q accept  Q) q reject je zamítací stav stroje (q reject  Q)

4 Turingův stroj Také Turingův stroj pracuje po krocích (taktech). Činnost stroje je určena přechodovou funkcí . Příklad:  : (q 1,c)  (q 2,x,R) Ve stavu q 1 a při čtení symbolu c přejdi do stavu q 2, na pásku zapiš symbol x a posuň hlavu o jedno políčko doprava. abcdef q1q1  1 krok abxdef q2q2 

5 Turingův stroj DEF: Konfigurací Turingova stroje rozumíme zápis uqv, kde u je dosud přečtená část vstupního slova, q je aktuální vnitřní stav stroje a hlava stroje se nachází nad prvním písmenem dosud nepřečtené části slova v. abq 1 cdef abxq 2 def Počáteční konfigurací TS je konfigurace q 0 w, tj. TS je v počátečním stavu a hlava je nad prvním písmenem vstupního slova abcdef q1q1  1 krok abxdef q2q2 

6 Turingův stroj Poznámka: Předpokládáme, že vstupní slovo w je zapsáno na prvních n. TS začíná svoji práci na prvním políčku pásky a pokud by se kdykoliv v průběhu výpočtu chtěl posunout z tohoto pole ještě více vlevo (i kdyby mu to předepisovala přechodová funkce  ), nepovede se to a hlava zůstane nad prvním políčkem pásky. Koncovou konfigurací TS je libovolná konfigurace, při které je TS ve stavu q accept (přijímající koncová konfigurace) nebo q reject (zamítající koncová konfigurace) abcdef q1q1  X OK ..…

7 Turingův stroj Analogicky jako v předchozích případech definujeme relaci přechodu, která koresponduje s jedním krokem TS. DEF: Buď M =(Q, , , ,q 0,q accept,q reject ) Turingův stroj. Potom nad množinou všech konfigurací definujeme relaci přechodu pro q 1,q 2  Q, u,w   *, a,b,c  následovně: ua q 1 bw u q 2 acw jestliže  (q 1,b)= (q 2,c,L) respektive (při posunu hlavy doprava) ua q 1 bw uac q 2 w jestliže  (q 1,b)= (q 2,c,R) Již popsaná zvláštní situace na levém konci pásky znamená: q 1 aw q 2 bw jestliže  (q 1,a)= (q 2,b,L)   

8 Turingův stroj Na pravém konci pásky žádný problém nevzniká, protože předpokládáme, že páska je neomezeně dlouhá a je vyplněna mezerami (symbol Ø, resp.  ), a proto: waq 1 je totéž jako waq 1 Ø a není nutné přijímat žádné další opatření, protože Ø  . DEF: Turingův stroj M =(Q, , , ,q 0,q accept,q reject ) přijímá slovo w, jestliže existuje posloupnost konfigurací q 0 w * uq accept v 

9 Turingův stroj DEF: Turingův stroj M =(Q, , , ,q 0,q accept,q reject ) zamítá (nepřijímá) slovo w, jestliže existuje posloupnost konfigurací q 0 w * uq reject v nebo pokud se při výpočtu zacyklí a nikdy nezastaví. Poznámka: Zatímco přijetí slova je zřejmé ( v konečném čase dostaneme na otázku zda w  L odpověď ANO ), zamítnutí je obtížnější. Po konečném čase můžeme dostat odpověď NE ( TS se dostal do stavu q reject a ukončil výpočet ), ale my dopředu nevíme, jak dlouho máme čekat, a ukončení výpočtu uživatelem v libovolném čase T může znamenat pouze nedostatek trpělivosti. 

10 Rozpoznatelnost vs. rozhodování DEF: Turingův stroj M =(Q, , , ,q 0,q accept,q reject ) rozpoznává jazyk L, jestliže přijímá všechna slova jazyka L a nepřijímá slova, která do tohoto jazyka nepatří. (Někdy se namísto „rozpoznává“ uvádí termín TS „přečísluje“ jazyk) Poznámka: U slov, která nepatří do jazyka L není důležité, zda je Turingův stroj zamítne skrze zamítací konfiguraci, nebo zda se výpočet zacyklí (tj. požadujeme pouze, aby se pro w  L stroj zastavil v přijímací stavu). DEF: Jazyky rozpoznatelné Turingovým strojem se nazývají rekurzivně vyčíslitelné (či rekurzivně spočetné).

11 Rozpoznatelnost vs. rozhodování DEF: Turingův stroj M =(Q, , , ,q 0,q accept,q reject ) rozhoduje jazyk L, jestliže se pro každé slovo w   * výpočet stroje po konečném počtu kroků zastaví. Poznámka: U slov, která patří do jazyka L, skončí výpočet v přijímací konfiguraci a u slov, která do L nepatří, skončí v zamítací konfiguraci (tj. požadujeme jasnou odpověď typu ANO-NE). DEF: Jazyky rozhodnutelné Turingovým strojem se nazývají rekurzivní.

12 Rozpoznatelnost vs. rozhodování Je zřejmé, že každý turingovsky rozhodnutelný jazyk je turingovsky rozpoznatelný, neboli množina rekurzivních jazyků je podmnožinou rekurzivně spočetných jazyků. Existují jazyky, které jsou rekurzivně spočetné (turingovsky rozhodnutelné), ale nikoliv rekurzivní Existují ovšem i jazyky, které jsou turingovsky nerozhodnutelné Rekurzivně spočetné jazyky Rekurzivní jazyky

13 Příklady TS Příklad 1: Sčítačka dvou přirozených čísel. Čísla jsou uložena na pásce za sebou tak, že číslo n reprezentuje n+1 znaků x a oddělena jsou znakem # Myšlenka: Smažu prostřední znak # a poté smažu poslední dva znaky x (jeden prázdný, druhý #) (zbyde mi n+1+1+m+1-2=n+m+1 znaků x)

14 Příklady TS Postup výpočtu (4+2=6): 1. q 0 xxxxx#xxx#8. xxxxxxxq 1 xx# 2. xq 0 xxxx#xxx#9. xxxxxxxxq 1 x# 3. xxq 0 xxx#xxx#10. xxxxxxxxxq 1 # 4. xxxq 0 xx#xxx#11. xxxxxxxxq 2 x 5. xxxxq 0 x#xxx#12. xxxxxxxq 3 x 6. xxxxxq 0 #xxx#13. xxxxxxx#q accept 7. xxxxxxq 1 xxx#

15 Příklady TS M=({q 0,q 1,q 2,q 3,q acc, q reject },{x,#},{x,#,Ø}, , q 0,q acc, q reject } Stejnou úlohu by uměl vyřešit i zásobníkový automat Jde o jazyk L={x i #x j # |i,j>0} Otázka: Daný Turingův stroj jazyk L rozpoznává nebo rozhoduje?

16 Příklady TS Pro jednoduchost obvykle nekreslíme do obrázku stav q reject, ale většinou je zřejmé, jak jej doplnit. Stačí, když u každého stavu, kde není definován přechod pro některý symbol z  doplníme přechod do stavu q reject a ohodnotíme ji příslušným symbolem z  (na nově zapisovaném symbolu nezáleží).

17 Příklady TS Po doplnění chybějícího stavu a příslušných šipek je zřejmé,že tento TS rozhoduje jazyk L={x i #x j # |i,j>0}.

18 Příklady TS Příklad 2: TS rozpoznávající (rozhodující) jazyk L={w#w|w  {0,1}*} Myšlenka: Smažu první 1 nebo 0 (přepíšu např. na x), pokračuji až za oddělovací # a potom zkontroluji první znak druhého slova. Je-li správný, přepíšu jej na x a jedu zpět pro druhý znak prvního slova atd. Kyvadlově pokračuji až dokud při čtení prvního slova nenarazím na znak # a poté již jen zkontroluji,že z druhého slova žádný znak na pásce nezbyl (jsou tam jen samá x)

19 Příklady TS Příklad 2: TS rozpoznávající jazyk L={w#w|w  {0,1}*}

20 Příklady TS Příklad 2: M=({q 1,q 2,q 3,q 4,q 5,q 6,q 7,q acc, q reject },{0,1,#},{0,1,#,x,Ø}, , q 1,q acc, q reject } TS rozhodující jazyk L={w#w|w  {0,1}*} by musel být doplněn o stav q reject a všechny zde nedefinované přechody budou směřovány právě do tohoto stavu.

21 Příklady TS Postup výpočtu (pro slovo 001#001): 1. q 1 001#001ii. xxxq 1 #xxx 2. xq 2 01#001iii..…. 3. x0q 2 1#001 iv. xxx#xxxq 8 4. x01q 2 #001 v. xxx#xxxØq accept 5. x01#q x01q 6 #x01 7. x0q 7 1#x01 8. xq 7 01#x01 9. q 7 x01#x xq 1 01#x …..

22 Praktická poznámka Poznámka: Turingovy stroje (TS) již jsou poměrně komplikované pro zcela detailní formální popis jako tomu bylo v případě KA a ZA. Proto je obvyklé, že popis TS je proveden pouze na obecné úrovni (princip činnosti) a teprve jestliže je to skutečně potřebné, přistupuje se k detailní formální definici. Většinou se tedy spokojíme s popisem činnosti stroje na úrovni „myšlenky“a pokud je realizace této myšlenky zřejmá, již ji dále nerozpracováváme.

23 Další příklady TS Příklad 3: Navrhněte TS rozpoznávající (rozhodující) jazyk L={0 2 n |n  0} Myšlenka: Stroj M na vstupní slovo w 1. jede vpravo a každý druhý symbol 0 přepíše na x 2. pokud páska obsahovala jedinou 0, potom accept 3. pokud páska obsahovala více než jedinou 0 a počet nul je lichý, potom reject 4. návrat hlavy na začátek pásky (zpět úplně vlevo) 5. pokračuj krokem číslo 1

24 Další příklady TS Příklad 4: Navrhněte TS rozpoznávající (rozhodující) jazyk L={a i b j c k |i,j,k  1 a současně i×j=k} Myšlenka: Stroj M na vstupní slovo w 1. ověří, zda na pásce je slovo a + b + c +, jinak reject 2. návrat hlavy na začátek pásky (zpět úplně vlevo) 3. přepiš první a na x a potom přejdi na první b. „Cestuj mezi b-čky a c-čky a škrtej obojí dokud zbývá nějaké b. Pokud dojdou c-čka předčasně, potom reject. 4. zrekonstruuj sekvenci b-ček a potom pokračuj krokem 3 jestliže na pásce zbývá ještě nějaký symbol a. Pokud ne, zkontroluj, zda na pásce už není ani žádné c. Pokud není, potom accept, jinak reject.

25 Shrnutí příkladů Všechny dosud uvedené příklady jazyků byly rekurzivní, tj. existuje Turingův stroj který příslušný jazyk rozhoduje. Samozřejmě,že tyto jazyky jsou automaticky i rekurzivně spočetné, protože nutně existuje Turingův stroj, který je rozpoznává. Existují jazyky, které jsou rekurzivně spočetné, ale nejsou rekurzivní.

26 Varianty TS Turingův stroj je velmi robustní model, neboť se ukazuje, že celá řada variant TS, které využívají jistého rozšíření, má naprosto shodnou výpočetní sílu. Co když například umožníme Turingovu stroji při výpočtu vykonávat nejen posunout vlevo a vpravo, ale i zůstat na stejné pozici? Tj., přechodová funkce bude mít tvar  : Qx   Qx  x{L,R,S}, kde S znamená „zůstaň“ Takový TS bude rozpoznávat zcela stejnou třídu jazyků, protože „setrvání“ na místě lze snadno nasimulovat na „standardním“ TS pomocí dvou po sobě jdoucích přechodů (jdi vpravo a potom jdi vlevo).

27 Varianty TS Vícepáskový Turingův stroj má na rozdíl od zde již definovaného TS k dispozici hned několik pásek. Každá páska má vlastní čtecí/zapisovací hlavu. Přechodová funkce je upravena tak, aby bylo možné pracovat na několika nebo dokonce všech páskách současně:  : Qx  k  Qx  k x{L,R,S} k, kde k je počet pásek Potom například výraz:  (q i,a 1,..,a k )= (q j,b 1,..,b k,L,R,…,R) předepisuje, že pokud je TS ve stavu q i, na první pásce čte symbol a 1, na druhé ….., potom přejde do stavu q j, na první pásku zapíše symbol b 1 a posune příslušnou hlavu vlevo, …

28 Varianty TS Ačkoliv vícepáskový TS se na první pohled zdá být mocnější,není tomu tak. Věta: Ke každému vícepáskovému TS lze sestrojit ekvivaletní TS s jedinou páskou. Důkaz: Činnost vícepáskového TS lze simulovat na jediné pásce tak, že obsahy k pásek napíšeme za sebe a oddělíme vhodným oddělovačem (#). Dále je nutné simulovat činnost k hlav,a proto musím znát jejich pozici nad danou částí pásky. K tomu se obvykle použije nějaký vhodný znak (tečka nad symbolem atd.). Do páskové abecedy je potom nutné přidat všechny znaky originální plus tytéž znaky s tečkou.

29 Varianty TS Ačkoliv vícepáskový TS se na první pohled zdá být mocnější,není tomu tak. q1q1  abaab  q1q1 ..… ccc  aa  abaab#ccc#aa#  

30 Simulace vícepáskového TS TS prochází pásku a zjišťuje symboly pod virtuálními hlavami (ty jsou označené tečkou) Při dalším průchodu mění (zapisuje) symboly dle přechodové funkce a současně posunuje i virtuální hlavy (posunuje „tečky“ nad příslušnými symboly) Při práci může zjistit, že na některé z pásek (v některém úseku) nemá dostatek místa k zapisování (pozná tak,že dojde na symbol #), potom zapíše do tohoto políčka pásky mezeru a posune všechny symboly počínaje znakem # až po poslední # na pásce o 1 políčko vpravo.Tím si vytvoří v daném úseku místo a poté pokračuje dále v simulaci.

31 Varianty TS Nedeterministický Turingův stroj nemá jednoznačně definovanou přechodovou funkci, ale pracuje se zobrazením  : Qx  P(Qx  x{L,R}) V některých krocích výpočtu se tento výpočet dělí do více větví a pokud alespoň jedna větev dojde do stavu q accept, je výpočet úspěšný. Ani nedeterminismus nerozšiřuje možnosti TS. Věta: Ke každému nedeterministickému TS lze sestrojit ekvivaletní deterministický TS.

32 Varianty TS Důkaz: Sestrojíme deterministický TS, který simuluje činnost nedeterministického TS na třech páskách. Na vstupní pásce je slovo w, které se nemění. Slovo w se překopíruje na pásku simulační a zde se s ním pracuje. Pokud dojde k větvení, zapíše se příslušná konfigurace na adresní pásku, kde čeká na vyřízení (odsimulování) požadavku Pozor – nelze provést prohledáváním do hloubky! Hrozí zacyklení!  0011 qxqx ..… xx#011x 1221 x  ..… vstupní páska..… simulační páska..… adresní páska

33 Varianty TS Jiná definice umožňuje Turingovu stroji využívat oboustranně neohraničenou pásku, ale ani tentokrát se možnosti stroje nezmění. Pokud ovšem omezíme možnosti TS tak, že TS nikdy neopustí políčka pásky, na kterých je napsáno vstupní slovo w, potom jde o lineárně omezený TS a jeho možnosti jsou ve srovnání s TS podstatně menší. Lze dokázat,že Turingovy stroje rozpoznávají jazyky typu 0 (bez omezení), zatímco lineárně omezené TS rozpoznávají jazyky kontextové (jazyky typu 1).

34 Ekvivalence s jinými modely Kromě různých variant Turingova stroje existují i jiné modely (např. RAM – Random Access Machine –stroj s libovolným přístupem, ZA se dvěma zásobníky, či -kalkul), které rozpoznávají stejnou třídu jazyků (neboli jsou ekvivalentní z hlediska výpočetní síly). Tyto modely mají i přes velkou rozdílnost některé společné rysy (přístup k neomezené paměti, omezený rozsah činnosti,kterou lze vykonat v jediném kroku,atd.) Přes rozdílnost modelů zůstává tatáž třída jazyků, které lze pomocí příslušných modelů rozpoznávat, což má závažné matematické,filozofické, ale i praktické důsledky.

35 Ekvivalence s jinými modely Jakousi paralelou k tomuto zjištění je volba vhodného programovacího jazyka. Přestože například C++, Pascal či Prolog jsou naprosto rozdílné programovací jazyky, využitím kteréhokoliv z nich dostaneme naprosto stejnou třídu algoritmů, které lze naprogramovat. Každý jazyk má určité přednosti a výhody, které umožňují programátorovi postupovat někdy rychleji, ale výsledná třída algoritmů je ve všech případech stejná.

36 Definice algoritmu Algoritmus je těžké definovat formálně matematicky, přestože matematika algoritmy používá (zjištění prvočísla, nejmenšího společného násobku atd.) Algoritmus chápeme intuitivně jako určitý postup, proceduru, či recept. V roce 1936 definoval Alonzo Church algoritmus pomocí formalismu zvaného -kalkul a Alan Turing pomocí „svého“ stroje, přičemž obě definice se ukázaly být ekvivalentními. Teprve mnohem později (s nástupem skutečných počítačů) se objevuje model RAM, který je bližší našemu chápání počítače, ale přesto je svými možnostmi ekvivalentní TS

37 Churchova teze Ať už se na otázku vyčíslitelnosti díváme z jakéhokoliv úhlu, zkoumáme ji použitím různých formalismů, vždy docházíme ke stejnému závěru. Churchova (Churchova-Turingova) teze: Každý algoritmus je ekvivalentní s výpočtem příslušného Turingova stroje. Každý jazyk, který lze popsat konečným výrazem, je rekurzivně spočetný. Není to matematická věta (jen teze), a proto nelze dokázat.

38 Churchova teze Z dnešního pohledu se nám může zdát nepříliš významná, protože jsme obklopeni počítači a máme „jasnou“ představu, co je to algoritmus. Je třeba mí na paměti, že byla formulována v době, kdy žádné počítače ani programovací jazyky neexistovaly. Jde o první model, který bylo možné považovat za „programovatelný“. I přes jistý kriticismus (TS neuvažuje interaktivní výpočty atd.) TS zůstávají pevným základem teorie vyčíslitelnosti.

39 Příklady TS Příklad 5: Navrhněte TS rozpoznávající (rozhodující) jazyk L={a i b i c i |i  0} Myšlenka: ??? Stavový diagram: ???

40 Příklady TS Příklad 6: Navrhněte TS, který zdvojí slovo zapsané na vstupní pásce (např. pro vstup abb bude výstupem abbabb) Myšlenka: Stavový diagram:

41 Příklady TS Příklad 7: Navrhněte TS, který k číslu zapsanému na pásce ve dvojkové soustavě přičte jedničku (např. pro vstup bude výstupem 11101, pro vstup 11 bude výstupem 100 atd.) Myšlenka: Stavový diagram:


Stáhnout ppt "Teorie vyčíslitelnosti Konečné automaty jsou dobrým modelem takových zařízení, která využívají jen velmi málo paměti. Zásobníkové automaty mají k dispozici."

Podobné prezentace


Reklamy Google