Základy teoretické informatiky Formální jazyky a automaty Petr Osička KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI
Outline Literatura Obsah J.E. Hopcroft, R. Motwani, J.D. Ullman Introduction to Automata Theory, Languages, and Computation, 2nd ed. Addison-Wesley, 2 P. Martinek Základy teoretické informatiky. Elektronická skripta M. Sipser Introduction to the Theory of Computation PWS Publishing Company, 997 Formální jazyky a automaty (3 přednášky) 2 Vyčíslitelnost a složitost (2 přednášky) Osička (Univerzita Palackého v Olomouci) YZTI LS 25 / 43
Gramatiky Definice Abeceda je konečná neprázdná množina. Její prvky označujeme jako symboly. Řetěz (slovo) nad abecedou je posloupnost symbolů z této abecedy. Počet symbolů v řetezu označujeme jako délku řetezu, značíme pomocí. Souvislou podposloupnost řetězu označujeme jako podřetěz. Řetěz s délkou (neobsahuje žádné symboly) je prázdný řetěz značený ϵ. Spojením řetězů x = x x 2... x n a y = y y 2... y m je řetez xy = x x 2... x n y y 2... y m. Jazyk nad abecedou je množina řetězů nad touto abecedou. Jazyk všech řetezů nad abecedou Σ značíme Σ Příklad Abeceda Σ = {a, b, c, d}. Řetěz x = abbbcd. Pak x = 6, dcaa není podřetězem x, bc je podřetězem x. Spojením ababa a cdcdd je ababacdcdd. Osička (Univerzita Palackého v Olomouci) YZTI LS 25 2 / 43
Gramatika množina pravidel pro odvozování řetězů Definice Gramatika je čtveřice (N, Σ, P, S), kde N je abeceda neterminálních symbolů (proměnných). Σ je abeceda terminálních symbolů. Platí, že N Σ =. P je množina odvozovacích pravidel. Odvozovací pravidlo je uspořádaná dvojice řetězců (α, β) nad abecedou Σ N, přičemž α obsahuje alespoň jeden neterminální symbol. Pro přehlednost pravidla značíme α β. P musí obsahovat alespoň jedno pravidlo, kde α = S. S je neterminální symbol, který označujeme jako startovací. Definice Nechť x, y jsou řetezy nad abecedou N Σ. Řekneme, že y přímo odvodíme (přímo derivujeme) z x, značeno x y, když existuje pravidlo α β P takové, že α je podřetězem x y dostaneme tak, že právě jeden podřetěz α v x nahradíme řetězem β. Osička (Univerzita Palackého v Olomouci) YZTI LS 25 3 / 43
Definice (pokračování) Řetěz y odvodíme (derivujeme) z x, značeno x + y, když existuje posloupnost řetězů z, z 2,..., z n taková, že z = x, z n = y, z i z i+ pro všechna přípustná i. x y právě když x + y nebo x = y. Definice Jazykem generovaným gramatikou G = (N, Σ, P, S) je množina L(G) = {w Σ S w} Osička (Univerzita Palackého v Olomouci) YZTI LS 25 4 / 43
Příklad (Gramatiky a odvozování) Σ = {+,, a, b, (, )}, N = {S, I}, Pravidla: S I S + S S S (S) I ai bi a b Odvození: S S S S (S) S (S + S) I (S + S) a (S + S) a (I + S) a (ai + S) a (ab + S) a (ab + I) a (ab + b) počáteční symbol S S S S (S) S S + S S I I a S I I ai I b S I I b Poznámka Zápis více pravidel se stejnou levou stranou zkracujeme tak, že je napíšeme na pravou stranu prvního z pravidel oddělené znakem ' ' (přitom ovšem ' ' nesmí patřit do žádné z abeced). Neterminály se většinou značí velkými písmeny (nebo speciálními řetězci), terminály malými písmeny, příp. spec znaky. Počáteční symbol je znak S. Gramatiky pak lze specifikovat pouze pravidly (abecedy jsou pak tvořeny příslušnými znaky v pravidlech) Osička (Univerzita Palackého v Olomouci) YZTI LS 25 5 / 43
Chomského hierarchie gramatik Typ gramatiky podle obecné definice Kontextově závislá gramatika (typ ) pravidla ve tvaru γ Aγ 2 γ βγ 2, kde γ, γ 2, β jsou řetězy nad Σ N, β ϵ a A N. Bezkontextová gramatika (typ 2) pravidla ve tvaru A β, kde β je řetěz nad Σ N, β ϵ, A N. Regulární gramatika (typ 3) pravidla ve tvaru A β, kde A N, β je buď terminální symbol nebo řetěz ab, kde a je terminál a B je neterminál. U gramatik typů až 3 připoušíme pravidlo S ϵ, pokud se S nevyskytuje na pravé straně žádného pravidla. Osička (Univerzita Palackého v Olomouci) YZTI LS 25 6 / 43
Jazyky generované gramatikami přebírají názvy těchto gramatik, hovoříte tedy o kontextově závislých, bezkontextových a regulárních jazycích (jazycích typu,,2,3). Věta Pro i =, 2, 3 platí Každá gramatika typu i je i gramatikou typu i. 2 Každý jazyk typu i je i jazykem typu i. Věta Pro i =,, 2 existuje jazyk typu i, který není jazykem typu i +. Poznámka U bezkontextových jazyků můžeme připustit i pravidla typu N ϵ pro obecný neterminál N. V tom případě by první věta na tomto slajdu neplatila. Nicméně druhá věta by pořád platila. Gramatiku, které obsahuje pravidla typu N ϵ lze převést na bezkontextovou gramatiku podle původní definice. Osička (Univerzita Palackého v Olomouci) YZTI LS 25 7 / 43
Příklad (Typy gramatik) Kontextově závislá gramatika S abc asbc CB WB, WB WC, WC BC, bb bb cc cc bc bc Př: S asbc aabcbc aabbcc aabbcc aabbcc aabbcc Bezkontextová gramatika S I S + S S S (S) I ai ai a b Regulární gramatika S P 2P 3P... 9P P... 9 P... 9P, R R... 9 R... 9R Př.: S P 2P 2, R 2, 3R 2, 32 Osička (Univerzita Palackého v Olomouci) YZTI LS 25 8 / 43
Konečné automaty Definice (Deterministický) konečný automat (DKA) je pětice (Q, Σ, δ, q, F), kde Q je konečná množina stavů Σ je vstupní abeceda δ je přechodová funkce s definičním oborem Q Σ a oborem hodnot Q q Q je počáteční stav F Q je množina koncových stavů. Stavový diagram = grafické znázornění konečného automatu pomocí orientovaného grafu pro každý stav z množiny Q jeden uzel, koncové stavy označíme dvojitou čarou (případně jinak, např. barvou), počáteční uzel označíme pomocí slova start a šipky. pokud δ(q, a) = q 2 přidáme orientovanou hranu ze stavu q do stavu q 2, kterou popíšeme pomocí a. Osička (Univerzita Palackého v Olomouci) YZTI LS 25 9 / 43
Příklad (Konečný automat) q start q q 2, Vidíme, že Q = {q, q, q 2 }, Σ = {, }, F = {q 2 }, počáteční stav je q a δ je dána δ q q q q q q 2 q 2 q 2 q 2 Dohoda o mrtvém stavu: Funkce δ je úplná. Při popisu větších automatů občas můžeme specifikovat δ jako neúplnou. Předpokládáme existenci speciálního stavu (mrtvý stav), který je výsledkem aplikace δ na argumenty, pro které není výsledek specifikován. Mrtvý stav není koncový. Osička (Univerzita Palackého v Olomouci) YZTI LS 25 / 43
Výpočet konečného automatu inicializace: na vstupu máme řetěz w, automat je v počátečním stavu q obecný krok: q je aktuální stav, a je první znak řetezu na vstupu. Automat přejde do stavu δ(q, a) a odebere a z řetezce konec: výpočet končí v momentě, kdy je řetez na vstupu prázdný. Pokud je aktuální stav koncový, automat přijímá. Definice Rozšířená přechodová funkce je funkce ^δ : Q Σ Q definovaná ^δ(q, ϵ) = q pro řetěz w = xa, kde a Σ a x Σ máme ^δ(q, w) = δ(^δ(q, x), a) Jazyk přijímaný konečným automatem A = (Q, Σ, δ, q, F) je L(A) = {w Σ ^δ(q, w) F} Osička (Univerzita Palackého v Olomouci) YZTI LS 25 / 43
Příklad (Výpočet deterministického automatu) Konfigurace je dvojice q, w, kde q je aktuální stav a w je nepřečtený řetez. Automat při výpočtu přejde (v několika krocích) z q, w do q i, ϵ. Pokud je q i koncový, automat přijímá. q start q q 2, Pro vstupní řetěz projde automat konfiguracemi q, q, q, q, q 2, q 2, q 2, ϵ a přijímá. Vídíme například, že ^δ(q, ) = q, ^δ(q, ) = q 2. Automat přijímá všech řetězy, které obsahují jako podřetěz. Osička (Univerzita Palackého v Olomouci) YZTI LS 25 2 / 43
Definition Nedeterministický konečný automat (NKA) je pětice (Q, Σ, δ, q, F), kde Q je konečná množina stavů Σ je vstupní abeceda δ je přechodová funkce s definičním oborem Q Σ a oborem hodnot 2 Q q Q je počáteční stav F Q je množina koncových stavů. Definice Rozšířená přechodová funkce je funkce ^δ : Q Σ 2 Q definovaná ^δ(q, ϵ) = {q} pro řetěz w = xa, kde a Σ a x Σ máme ^δ(q, w) = q ^δ(q,x) δ(q, a) Jazyk přijímaný nedeterministickým konečným automatem A = (Q, Σ, δ, q, F) je L(A) = {w Σ ^δ(q, w) F } Osička (Univerzita Palackého v Olomouci) YZTI LS 25 3 / 43
Příklad (Nedeterministický automat), q start q q 2 Vidíme, že Q = {q, q, q 2 }, Σ = {, }, F = {q 2 }, počáteční stav je q a δ je dána δ q {q, q } {q } q {q 2 } q 2 Např. ^δ(q, ) = {q, q }, ^δ(q, ) = {q, q }, ^δ(q, ) = {q, q 2 }. Konfigurace ted netvoří seznam, ale strom. Osička (Univerzita Palackého v Olomouci) YZTI LS 25 4 / 43
Příklad (Nedeterministický automat), q start q q 2 První dvě urovně stromu konfigurací (hrany označeny čtenými symboly) q q q q q q q q 2 q q q Osička (Univerzita Palackého v Olomouci) YZTI LS 25 5 / 43
Věta Ke každému DKA A existuje NKA B tak, že L(A) = L(B). 2 Ke každému NKA B existuje DKA A tak, že L(A) = L(B). Důkaz. K DKA A = (Q, Σ, δ A, q, F) sestavíme NKA B = (Q, Σ, δ B, q, F) tak, že vezmeme δ B (q, a) = {q } právě když δ A (q, a) = q. Pak platí, že ^δ B (q, w) = {^δ A (q, w)}, a tedy L(A) = L(B). 2 K NKA B = (Q B, Σ, δ B, q, F B ) sestavíme DKA A = (Q A, Σ, δ A, {q }, F A ) tak, že vezmeme Q A = 2 Q B S Q B, S F B právě když S F B pro S Q B a a Σ definujeme δ A (S, a) = q S δ B(q, a). Z Q A lze vynechat izolované stavy, tj. stavy, do kterých se A nikdy nemůže dostat. Nyní ukážeme, že ^δ A ({q }, w) = ^δ B (q, w) pro každý řetez w nad Σ. Odtud pak plyne, že L(A) = L(B). Osička (Univerzita Palackého v Olomouci) YZTI LS 25 6 / 43
pokračování. Důkaz provedeme indukcí přes délku řetezu w. Pro w = ϵ plyne tvrzení přímo z definic. Máme totiž ^δ A ({q }, ϵ) = ^δ B (q, ϵ) = {q }. Nechť w = xa, kde a Σ a x je řetěz nad Σ. Předpokládejme, že platí ^δ A ({q }, x) = ^δ B (q, x) = K. Potom z definice rozšířené přechodové funkce a z konstrukce δ A plyne ^δ A ({q }, w) = δ A (^δ A ({q }, x), a) = q K δ B (q, a), ^δ B (q, w) = q ^δ B (q,x) δ B (q, a) = q K δ B (q, a). Osička (Univerzita Palackého v Olomouci) YZTI LS 25 7 / 43
Příklad (Převod NKA na DKA), q start q q 2 {q, q } start {q } {q, q 2 } Osička (Univerzita Palackého v Olomouci) YZTI LS 25 8 / 43
Věta Ke každé regulární gramatice G existuje NKA A takový, že L(G) = L(A). Důkaz. Ke gramatice G = (N, Σ, P, S) sestavíme NKA A = (Q, Σ, δ, q, F), kde Q = N {M}, kde M je nově dodaný symbol q = S { {M, S} pokud S ϵ P F = {M} jinak δ(b, a) = {C B ac P} {M B a P} Pokud gramatika obsahuje pravidlo S ϵ, pak q je koncový stav a tedy A přijímá ϵ. Nechť w = a a 2... a k. Potom S w právě když existují pravidla S a B, B a 2 B 2,, B k a k. Tato pravidla existují právě když B δ(q, a ), B 2 δ(b, a),, M δ(b k, a k ). A tedy M ^δ(q, w). Osička (Univerzita Palackého v Olomouci) YZTI LS 25 9 / 43
Věta Ke každému NKA A existuje regulární gramatika G taková, že L(M) = L(G). Důkaz. K NKA A = (Q, Σ, δ, q, F) sestavíme gramatiku G = (N, Σ, P, S), kde N = Q S = q P = {B ac C δ(b, a)} {B a δ(b, a) F } {S ϵ pokud S F} Důkaz ekvivalence jazyků je analogický druhé části důkazu předchozí věty (ekvivalence uvažujeme v opačném směru). Gramatika G nemusí být nutně regulární. Může se stát, že obsahuje pravidlo S ϵ a S se vyskytuje na pravé straně nějakého pravidla. G lze ovšem převést na regulární gramatiku následovně: Přidáme nový počáteční neterminál S. Pro každé pravidlo S α přidáme pravidlo S α. Odstraníme pravidlo S ϵ. Ke každému pravidlu B as přidáme pravidlo B a. Důkaz toho, že nová gramatika generuje ekvivalentní jazyk s G je ponechán jako cvičení. Osička (Univerzita Palackého v Olomouci) YZTI LS 25 2 / 43
Příklad (Převod gramatiky na automat) Gramatika: S P 2P 3P... 9P P... 9 P... 9P, R R... 9 R... 9R Automat:,..., 9,..., 9, start S P R,..., 9,..., 9,..., 9 M Osička (Univerzita Palackého v Olomouci) YZTI LS 25 2 / 43
Příklad (Převod automatu na gramatiku) Automat q start q q 2 Gramatika: q q q q Osička (Univerzita Palackého v Olomouci) YZTI LS 25 22 / 43
Definice Automat s ϵ přechody (ϵ-nka) je nedeterministický konečný automat s přechodovou funkcí rozšířenou o ϵ přechody, tj δ : Q (Σ {ϵ}) 2 Q. Přechod δ(q, ϵ) = {q, q 2,... } značí, že automat může přejít ze stavu q do některého ze stavů q, q 2,... a nepřečíst přitom znak ze vstupu. Definice ϵ-uzávěr stavu q, ozn Enclose(q) je definován: q Enclose(q), pokud je p Enclose(q), pak Enclose(q) obsahuje všechny stavy z množiny δ(p, ϵ). Definice Rozšířená přechodová funkce ϵ-nka je dána: ^δ(q, ϵ) = Enclose(q) Pro w = xa, kde a je symbol a x je řetěz: Vezmeme množinu K = p ^δ(q,x) δ(p, a) a uzavřeme ji. Tedy ^δ(q, w) = p K Enclose(p). Osička (Univerzita Palackého v Olomouci) YZTI LS 25 23 / 43
Příklad (Automat s ϵ přechody),..., 9,..., 9 ϵ, +, start q q, q,..., 9 2 q ϵ 3 q 5,..., 9, q 4 Automat přijímá desetinná čísla, s volitelným znaménkem. Buď před desetinnou čárkou nebo za desetinnou čárkou musí být neprázdný řetěz číslic. Osička (Univerzita Palackého v Olomouci) YZTI LS 25 24 / 43
Věta Ke každému DKA A existuje ϵ-nka B tak, že L(A) = L(B). 2 Ke každému ϵ-nka B existuje DKA A tak, že L(A) = L(B). Důkaz. Upravíme konstrukci NKA B z předchozího důkazu (věta o stejné výpočetní síle DKA a NKA) tak, že přechodovou funkci rozšíříme o δ B (q, ϵ) = pro každý stav q. Pro každý stav q pak platí, že Enclose(q) = {q} a z definice rozšířené přechodové funkce automatu B pak plyne, že L(A) = L(B). 2 K NKA B = (Q, Σ, δ B, q, F) sestavíme DKA A = (Q A, Σ, δ A, q A, F A ) tak, že vezmeme Q A = 2 Q B q A = Enclose(q ) pro S Q B platí: S F B právě když S F B pro S Q B a a Σ sestavíme množinu K = q S δ B(q, a) a poté vezmeme ^δ A (S, a) = q K Enclose(q). Z Q A lze vynechat izolované stavy, tj. stavy, do kterých se A nikdy nemůže dostat. Osička (Univerzita Palackého v Olomouci) YZTI LS 25 25 / 43
pokračování. Indukcí přes délku řetezu w dokážeme, že ^δ B (q, w) = ^δ A (q A, w). Pokud w = ϵ, pak ^δ B (q ) = Enclose(q ) a ^δ A (q A, ϵ) = q A = Enclose(q ). Nechť w = xa pro řetěz x a symbol a. Předp. že ^δ B (q, x) = ^δ A (q A, x) = K. Pak si všimneme, že přechodová funkce automatu A, je zkonstruována stejně, jako rozšířená přechodová funkce automatu B, tedy že ^δ A (q A, w) = δ A (K, a) = q K Enclose(q) = q ^δ B (q,x) Enclose(q) = ^δ B (q, w). Osička (Univerzita Palackého v Olomouci) YZTI LS 25 26 / 43
Příklad (Převod ϵ-nka na DKA) Automat, který obdržíme převodem automatu z předchozího příkladu. Vynechán mrtvý stav.,..., 9,..., 9,..., 9 +,,..., 9, start {q, q } {q } {q, q 4 } {q 2, q 3, q 5 },,,..., 9 {q 2 } {q 3, q 5 },..., 9 Osička (Univerzita Palackého v Olomouci) YZTI LS 25 27 / 43
Uzávěrové vlastnosti regulárních jazyků Regulární jazyky jsou uzavřeny na operaci, pokud aplikací operace na regulární jazyky dostaneme opět regulární jazyk. Definice Zřetezením jazyků L a M je jazyk LM = {xy x L, y M}. Pro i =, 2, 3... definujeme jazyk L i následovně: L = L L i = L i L Pozitivním uzávěrem jazyka L je jazyk L + = j= L j. Uzávěrem jazyka L je jazyk L = L + {ϵ} Osička (Univerzita Palackého v Olomouci) YZTI LS 25 28 / 43
Věta Regulární jazyky jsou uzavřeny na následující operace: sjednocení 2 doplněk 3 průnik 4 rozdíl 5 zřetězení 6 pozitivní uzávěr, uzávěr Důkaz. Uvedeme jenom kostry důkazů. Uvažme jazyk L přijímaný DKA A L a jazyk M přijímaný DKA A M. Pak ϵ-nka, který získáme vytvořením nového počátečního stavu, a přidáním ϵ přechodů z tohoto nového stavu do počátečních stavů automatů A L a A M, přijímá L M. Osička (Univerzita Palackého v Olomouci) YZTI LS 25 29 / 43
pokračování. 2 Automat, který přijímá doplněk jazyka L (doplněk L značíme L) získáme tak, že v automatu A L = (Q, Σ, δ, q, F), který přijímá L, nastavíme množinu koncových stavů na Q F. 3 Plyne z předhozího, protože L M = L M. 4 Plyne z předchozího, protože L M = L M. 5 Uvažme jazyk L přijímaný DKA A L a jazyk M přijímaný DKA A M. ϵ-nka, který obdržíme přidáním ϵ přechodů z koncových stavů A L do počátečního stavu automatu A M, přijímá jazyk LM, pokud jako jeho koncové stavy ponecháme pouze koncové stavy automatu A M. 6 Uvažme jazyk L přijímaný NKA A L. Pak ϵ-nka, který získáme přidáním nového počátečního stavu q, přidáním nového koncového stavu q f, přidáním ϵ přechodů ze všech koncových stavů automatu A L do počátečního stavu automatu A L, ϵ přechodu ze stavu q do počátečního stavu automatu A L, ϵ přechodu ze všech koncových stavů A L do q f, a ϵ přechodu z q do q f, přijímá jazyk L (jediný koncový stav je nyní q f ). Pokud při konstrukci vynecháme přechod z q do q f, přijímá automat L +. Osička (Univerzita Palackého v Olomouci) YZTI LS 25 3 / 43
Regulární výrazy Definition Nechť Σ je abeceda neobsahující symboly ϵ,, +,,, (, ). Regulární výraz na abecedou Σ je definován induktivně jako:, ϵ, a pro a Σ jsou regulární výrazy, pokud jsou R a R 2 regulární výrazy, pak i (R + R 2 ), (R R 2 ), (R ) jsou regulární výrazy. Definice Regulární výraz R nad abecedou Σ indukuje jazyk L(R) nad touto abecedou, který je definován: pokud R =, pak L(R) =. Pokud R = ϵ, pak L(R) = {ϵ}. Pokud R = a, kde a Σ, pak L(R) = {a}. Nechť R a R 2 jsou regulární výrazy. Potom L((R + R 2 )) = L(R ) L(R 2 ), L((R R 2 )) = L(R )L(R 2 ), L((R ) ) = L(R ). Osička (Univerzita Palackého v Olomouci) YZTI LS 25 3 / 43
Věta Jazyk generovaný regulárním výrazem je regulární. 2 Ke každému regulárnímu jazyku existuje regulární výraz, který ho indukuje. Důkaz., {ϵ}, {a} pro a Σ jsou regulární jazyky. Zbytek tvrzení plyne z toho, že regulární jazyky jsou uzavřeny na sjednocení, průnik a uzávěr. 2 Vynechán. Volitelná četba převod regulárního výrazu na automat převod automatu na regulární výraz Osička (Univerzita Palackého v Olomouci) YZTI LS 25 32 / 43
Příklad (Regulární výrazy a jejich jazyky) Abychom mohli vynechat některé závorky, určíme prioritu symbolů, má přednost před, které má přednost před +. Symbol se někdy vynechává. Σ = {a, b} R = a, L(R) = {a} R = ab, L(R) = {ab} R = a(a + b), L(R) = {aa, ab} R = a (a + b), L(R) = {a, b, aa, ab, aaa, aab,... } R = (a + b) a(a + b), L(R) = {w Σ w obsahuje symbol a} R = ϵ + a + b, L(R) = {ϵ, a} {b n n N} Osička (Univerzita Palackého v Olomouci) YZTI LS 25 33 / 43
Minimalizace DKA Definice Řekneme, že stavy q a p v DKA jsou ekvivalentní když platí: Pro všechny řetězy w platí, že ^δ(p, w) je koncový stav, právě když ^δ(q, w) je koncový stav. Stavy, které nejsou ekvivalentní, označujeme jako rozlišitelné. DKA A a DKA B jsou ekvivalentní, právě když přijímají stejný jazyk. Věta DKA A a DKA B jsou ekvivalentní právě když jejich počáteční stavy jsou ekvivalentní. Poznámka Pokud A a B pracují nad stejnou abecedou, lze mluvit o ekvivalenci stavu z automatu A se stavem z automatu B (je nutné použít přechodovou funkci ze správného automatu!) Osička (Univerzita Palackého v Olomouci) YZTI LS 25 34 / 43
Minimalizace DKA Věta Relace mezi stavy R = { p, q p a q jsou ekvivalentní} je ekvivalence. Důkaz. Reflexivita a symetrie plynou přímo z definice. Ověříme tranzitivitu. Sporem. Předpokládejme, že p, q R a q, r R a současně p, r / R. Potom existuje řetěz w takový, že právě jeden ze stavů ^δ(p, w) a ^δ(r, w) je koncový. Pokud je ^δ(q, w) koncový, pak z p, q R plyne, že že ^δ(p, w) je koncový a ^δ(r, w) není koncový. Tedy q, r / R, což je spor. Pokud ^δ(q, w) není koncový, pak z q, r R plyne, že ^δ(r, w) není koncový a tedy ^δ(p, w) je koncový. Pak ale p, q / R, což je spor. Osička (Univerzita Palackého v Olomouci) YZTI LS 25 35 / 43
Algoritmus pro nalezení dvojic rozlišitelných stavů (table-filling algoritmus): Vstupem algoritmu je DKA A, výstupem je seznam všech dvojic rozlišitelných stavů v A. všechny dvojice stavů označíme jako nerozlišitelné 2 Pokud q je koncový stav a p není koncový stav, je dvojice p, q rozlišitelná. 3 Nechť p a q jsou stavy, pro které existuje symbol a takový, že δ(p, a) = s a δ(q, a) = r, a s, r jsou již označeny za rozlišitelné. Pak jsou p a q rozlišitelné. 4 Opakujeme předchozí bod, dokud lze najít rozlišitelný pár stavů. Poznámka krok 3 algoritmu lze provádět po kolech. V každém kole hledáme dvojice stavů p, q takové, že existuje symbol a takový, že stavy δ(p, a) a δ(q, a) byly označeny jako rozlišitelné v minulém kole. Prvním kolem je krok 2. algoritmus tedy vlastně hledá pro každou dvojici p, q řetěz w, který je rozlišuje (tedy právě jeden ze stavů ^δ(p, w) a ^δ(q, w) je koncový). V kroku 2 je w = ϵ, v každém kole se pak w prodlužuje o jeden symbol (připojený na začátek!) Osička (Univerzita Palackého v Olomouci) YZTI LS 25 36 / 43
Příklad start A B C D E F G H A B C D E F G B C D E F G H Pomocí označíme dvojice stavů, z nichž jeden je koncový (tedy C) a druhý není 2 Pomoci označíme dvojice stavů p, q takové, že právě jeden ze stavů δ(p, ), δ(q, ) nebo právě jeden ze stavů δ(p, ), δ(q, ) je C. Protože C je rozlišitelný od každého stavu, jsou i p, q rozlišitelné. 3 Pomocí označíme dvojice stavů p, q takové, že alespoň jedna z dvojic stavů δ(p, ), δ(q, ) a δ(p, ), δ(q, ) byla v minulém kole označena pomocí. Protože tato dvojice je rozlišitelná, jsou rozlišitelné i p, q. V dalším kole již nerozlišitelné stavy nenajdeme. Osička (Univerzita Palackého v Olomouci) YZTI LS 25 37 / 43
Věta Pokud table-filling algoritmus neoznačí dvojici stavů jako rozlišitelnou, pak jsou tyto stavy ekvivalentní. Důkaz. Sporem. Předpokládejme, že tvrzeni neplati, tj. existuje dvojice rozlišitelných stavů (p, q), které algoritmus jako rozlišitelné neoznačil (dvojici říkáme bad pair). Jistě existuje řetěz w = a a 2... a n takový, že právě jeden ze stavů ^δ(p, w) a ^δ(q, w) je koncový. Předpokládejme, že (p, q) je bad pair s nejkratším takovým w (mezi všemi bad pairy). Stavy r = δ(p, a ) a s = δ(q, a ) jsou rozlišitelné řetezem a 2 a 3... a n. Tento řetěz je ale kratší než w a tedy (r, s) není bad pair (algoritmus je správně označil jako rozlišitelné). Z indukčního kroku algoritmu pak ale plyne, že p, q označí jako rozlišitelné. To je spor s předpokladem. Osička (Univerzita Palackého v Olomouci) YZTI LS 25 38 / 43
Minimalizace DKA = nalezení ekvivalentního DKA s minimálním počtem stavů. Algoritmus pro minimalizaci DKA A (výsledkem je DKA B) Z automatu A odstraníme nedosažitelné stavy (např. průchodem do šírky, pokud si automat představíme jako orientovaný graf). 2 Pomocí table-filling algoritmu nalezneme relaci ekvivalence na množině stavů automatu A. 3 Nalezneme rozklad množiny stavů automatu A na třídy. Tento rozklad je množinou stavů automatu B. 4 Nechť T, S jsou třídy rozkladu. Potom přechodovou funkci automatu B nastavíme na δ B (T, a) = S, právě když pro každý stav q T platí, že δ A (q, a) S. 5 Počátečním stavem automatu B je třída rozkladu, která obsahuje počáteční stav automatu A. 6 Množina koncových stavů automatu B je tvořena třídami rozkladu, které obsahují jenom koncové stavy automatu A. Osička (Univerzita Palackého v Olomouci) YZTI LS 25 39 / 43
Věta Uvažme DKA A a DKA M, který je ekvivalentní s A a má minimální počet stavů. Pak automat B, který obdržíme z automatu A algoritmem z předchozího slajdu má stejný počet stavů jako M. Důkaz. Všimněme si, že A,B,M přijímají stejný jazyk. B a M navíc neobsahují nedosažitelné stavy. Předpokládejme, že množiny stavů automatů M a B jsou disjuktní. Spustíme algoritmus table-filling na oba automaty M a B současně (a tedy zjištujeme i ekvivalenci stavů z různých automatů). Počáteční stavy obou automatů jsou ekvivalentní (protože přijímají stejný jazyk). Každý ze stavů automatu B je ekvivalentní alespoň jednomu stavu automatu M. Protože pro řetěz w, stav q, do kterého se B dostane po přečtení w, a stav p, do kterého se M dostane po přečtení w platí, že p a q jsou ekvivalentní (jinak by počáteční stavy B a M byly rozlišitelné pomocí w). Uvažme stav q automatu M a množinu K alespoň dvou stavů automatu B takovou, že všechny její prvky jsou ekvivalentní s q. Pak jsou ale i prvky K vzájemně ekvivalentní. Ovšem B nemůže obsahovat nerozlišitelné stavy a tedy ke každému stavu automatu B existuje právě jeden ekvivalentní stav automatu N. Osička (Univerzita Palackého v Olomouci) YZTI LS 25 4 / 43
Příklad start A B C D E F G H start {A, E} {B, H} {C} {F} {G} Jediný nedosažitelný stav je D. Pomocí ekvivalence získané table-filling algoritmem získáme rozklad {{A, E}, {B, H}, {C}, {F}, {G}}. Přechody doplníme podle definice. Počáteční stav je {A, E}, koncový stav je {C}. Osička (Univerzita Palackého v Olomouci) YZTI LS 25 4 / 43
Pumping lemma Lemma (pumping lemma pro regulární jazyky) Pro každý regulární jazyk L existuje konstanta n tak, že pro každý řetez w L od délce alespoň n lze rozdělit na tři podřetězy w = xyz tak, že y ϵ xy n pro každé k patří xy k z do L Důkaz. Jazyk L je přijímán DKA A, za číslo n vezmeme počet jeho stavů. Uvažme řetěz w = a a 2... a s z L délky alepoň n. Pro i =,,..., n definujume stavy p i = ^δ(q, a... a i ), p = q. Při přijetí w projde A všemi s n + stavy p i, ale A má jenom n stavů, tudíž musí jeden stav navštívit vícekrát. Tzn. existují čísla l < m n taková, že p l = p m (m n protože první stav, který se zopakuje je nejhůře p n, v tomto případě pokrývají p,..., p n všech n stavů automatu). Nyní můžeme w rozdělit na x = a... a l, y = a l+..., a m a z = a m+... a s. První podmínka je zjevně splněna. Druhá podmínka je také splněna, protože stav m n. Osička (Univerzita Palackého v Olomouci) YZTI LS 25 42 / 43
pokračování. Po zpracování x se A dostane do stavu p l, poté k krát zpracuje y (po každém zpracování se dostane opět od p l ). Poté zpracuje z a dostane se z p l do koncového stavu. O jazyce můžeme dokázat, že není regulární, tak, že ukážeme, že pro něj neplatí pumping lemma. Příklad Tvrzení: Jazyk L = { n n n N} není regulární. Uvažme libovolnou přirozenou konstantu m. Pak můžeme vzít řetez w = m m. Chceme najít x, y, z tak, aby w = xyz a aby řetězce odpovídaly pumping lemmatu. Protože y má délku alespoň jedna a xy má délku maximálně m, je y řetěz tvořený jenom symboly. Pro k pak xy k z nepatří do L, protože obsahuje různé počty a. Pokud tedy platí první dvě podmínky pumping lemmatu, nemůže platit ta třetí. Tedy pumping lemma pro L neplatí. Osička (Univerzita Palackého v Olomouci) YZTI LS 25 43 / 43