1 / 68 Cvičenie 3 - Nedeterministické konečné automaty Ing. Viliam Hromada, PhD. C-510 Ústav informatiky a matematiky FEI STU viliam.hromada@stuba.sk 7.10.2020
2 / 68 Determinizácia 1 Determinizujte nasledovný NKA. Určte, aký jazyk akceptuje daný NKA (DKA). 0 Start q 0 q 1 0 1
3 / 68 Vidíme, že automat na obrázku je nedeterministický, pretože zo stavu q 0 sú na symbol 0 definované prechody do 2 rôznych stavov: {q 0, q 1 }. Taktiež v stave q 0 nie je definovaný prechod na symbol 1 a v stave q 1 nie je definovaný prechod na symbol 0. Formálne by sme daný NKA mohli popísat ako päticu ({q 0, q 1 }, {0, 1}, δ, q 0, {q 1 }), kde prechodová funkcia δ: δ(q 0, 0) = {q 0, q 1 } δ(q 0, 1) = δ(q 1, 0) = δ(q 1, 1) = {q 1 } Respektíve pomocou prechodovej tabul ky: 0 1 q 0 {q 0, q 1 } q 1 {q 1 }
4 / 68 Determinizáciu (t.j. vyrobenie ekvivalentného DKA) vykonáme pomocou tzv. subset-konštrukcie (Prednáška č. 3, slajdy 24-27). Stavy DKA budú všetky možné množiny stavov NKA. Počiatočný stav DKA bude stav obsahujúci len q 0, t.j. {q 0 } Akceptačné stavy DKA budú tie stavy, ktoré obsahujú aspoň 1 akceptačný stav NKA, t.j. v našom prípade {q 1 }, {q 0, q 1 }: Zostáva už len určit obsah prechodovej tabul ky: {q 0 } {q 1 } {q 0, q 1 } 0 1
5 / 68 Pre pripomenutie, prechody v DKA určíme podl a nasledovného "návodu": na výpočet prechodu zo stavu S na vstupný symbol a sa pozrieme na stavy p S, do akých stavov vedel prejst NKA zo stavov p na symbol a a tieto stavy zjednotíme. Formálne δ D (S, a) = δ N (p, a), kde δ N je prechodová funkcia NKA. p S Toto urobíme pre všetky stavy DKA, aby sme postupne vyplnili tabul ku 0 1 {q 0 } {q 1 } {q 0, q 1 }
6 / 68 Uvažujme S = a postupne symboly 0 a 1. V oboch prípadoch: δ D (, 0) = p δ D (, 1) = p 0 1 {q 0 } {q 1 } {q 0, q 1 } δ N (p, 0) = δ N (p, 1) =
7 / 68 Uvažujme S = {q 0 } a postupne symboly 0 a 1. δ D ({q 0 }, 0) = δ D ({q 0 }, 1) = p {q 0 } p {q 0 } 0 1 {q 0 } {q 0, q 1 } {q 1 } {q 0, q 1 } δ N (p, 0) = δ N (q 0, 0) = {q 0, q 1 } δ N (p, 1) = δ N (q 0, 1) =
8 / 68 Uvažujme S = {q 1 } a postupne symboly 0 a 1. δ D ({q 1 }, 0) = δ D ({q 1 }, 1) = p {q 1 } p {q 1 } 0 1 {q 0 } {q 0, q 1 } {q 1 } {q 1 } {q 0, q 1 } δ N (p, 0) = δ N (q 1, 0) = δ N (p, 1) = δ N (q 1, 1) = {q 1 }
9 / 68 Uvažujme S = {q 0, q 1 } a postupne symboly 0 a 1. δ D ({q 0, q 1 }, 0) = δ D ({q 0, q 1 }, 1) = p {q 0,q 1 } p {q 0,q 1 } 0 1 {q 0 } {q 0, q 1 } {q 1 } {q 1 } {q 0, q 1 } {q 0, q 1 } {q 1 } δ N (p, 0) = δ N (q 0, 0) δ N (q 1, 0) = {q 0, q 1 } = {q 0, q 1 } δ N (p, 1) = δ N (q 0, 1) δ N (q 1, 1) = {q 1 } = {q 1 }
10 / 68 Výsledný DKA má teda prechodovú tabul ku: Prechodový diagram: 0 1 {q 0 } {q 0, q 1 } {q 1 } {q 1 } {q 0, q 1 } {q 0, q 1 } {q 1 } {q 0, q 1 } 0 Start 0 1 {q 0 } {q 1 } 0 1 0, 1 1
Vyskúšajme si správanie oboch automatov pre rôzne vstupné ret azce w. ˆδ N bude rozšírená prechodová funkcia NKA, ˆδ D bude rozšírená prechodová funkcia DKA. w = 0 ˆδN (q 0, 0) = {q 0, q 1 }. q 1 je akceptačný stav NKA, t.j. 0 NKA akceptuje. ˆδ D ({q 0 }, 0) = {q 0, q 1 } {q 0, q 1 } je akceptačný stav DKA, t.j. 0 DKA akceptuje. w = 00 ˆδN (q 0, 00) = {q 0, q 1 }. q 1 je akceptačný stav NKA, t.j. 00 NKA akceptuje. ˆδD ({q 0 }, 00) = {q 0, q 1 }. {q 0, q 1 } je akceptačný stav DKA, t.j. 00 DKA akceptuje. w = 001 ˆδN (q 0, 001) = {q 1 }. q 1 F N, 001 L(N). ˆδD ({q 0 }, 001) = {q 1 }. {q 1 } F D, 001 L(D). w = 0011 ˆδ N (q 0, 0011) = {q 1 }. q 1 F N, 0011 L(N). ˆδD ({q 0 }, 0011) = {q 1 }. {q 1 } F D, 0011 L(D). 11 / 68
12 / 68 Spracovanie ret azca 0011 v NKA si vieme demonštrovat aj takto: Ked že po spracovaní ret azca sa vie NKA dostat do akceptačného stavu q 1, tak ret azec akceptujeme. Všimnite si, že to isté musí nastat aj pri DKA.
13 / 68 Ak chceme zistit, aký jazyk NKA (DKA) akceptuje, tentokrát to možno bude jednoduchšie z pohl adu na NKA: Na začiatku môže byt nejaká postupnost núl, pre ktorú by bol NKA stále v stave q 0. Potom sa môže pomocou jednej nuly presunút do q 1. A následne môže nasledovat postupnost jednotiek, ktorá bude stále súčast akceptovaného ret azca. Čiže akceptované ret azce začínajú postupnost ou núl dĺžky aspoň 1, za ktorými ide postupnost jednotiek dĺžky aspoň nula. L(N) = L(D) = 0 + 1, prípadne L(N) = L(D) = {0 i 1 j i 1, j 0, i, j Z}.
14 / 68 Determinizácia 2 Determinizujte nasledovný NKA nad abecedou {a, b, c}. Určte, aký jazyk akceptuje daný NKA (DKA). a b c Start q 0 q 1 q a 2 b
Vidíme, že automat na obrázku je nedeterministický, pretože zo stavu q 0 sú na symbol a definované prechody do 2 rôznych stavov: {q 0, q 1 }, podobne zo stavu q 1 sú na symbol b definované prechody do 2 rôznych stavov q 1, q 2. Taktiež v stave q 0 nie sú definované prechody na symboly b, c, v stave q 1 nie sú definované prechody na symboly a, c a v stave q 2 nie sú definované prechody na symboly a, b. Formálne by sme daný NKA mohli popísat ako päticu ({q 0, q 1, q 2 }, {a, b, c}, δ, q 0, {q 1, q 2 }), kde prechodová funkcia δ: δ(q 0, a) = {q 0, q 1 } δ(q 0, b) = δ(q 0, c) = δ(q 1, a) = δ(q 1, b) = {q 1, q 2 } δ(q 1, c) = δ(q 2, a) = δ(q 2, b) = δ(q 2, c) = {q 2 } 15 / 68
16 / 68 Popis prechodovou tabul kou: a b c q 0 {q 0, q 1 } q 1 {q 1, q 2 } q 2 {q 2 }
17 / 68 Determinizáciu (t.j. vyrobenie ekvivalentného DKA) znovu vykonáme pomocou tzv. subset-konštrukcie. Predpripravená tabul ka: (s označenými počiatočným a akceptačnými stavmi). a b c {q 0 } {q 1 } {q 2 } {q 0, q 1 } {q 0, q 2 } {q 1, q 2 } {q 0, q 1, q 2 }
Uvažujme S = a postupne symboly a, b a c. δ D (, a) = δ N (p, a) = p δ D (, b) = p δ D (, c) = p δ N (p, b) = δ N (p, c) = a b c {q 0 } {q 1 } {q 2 } {q 0, q 1 } {q 0, q 2 } {q 1, q 2 } {q, q, q } 18 / 68
Uvažujme S = {q 0 }. δ D ({q 0 }, a) = δ N (p, a) = δ N (q 0, a) = {q 0, q 1 } δ D ({q 0 }, b) = δ D ({q 0 }, c) = p {q 0 } p {q 0 } p {q 0 } δ N (p, b) = δ N (q 0, b) = δ N (p, c) = δ N (q 0, c) = a b c {q 0 } {q 0, q 1 } {q 1 } {q 2 } {q 0, q 1 } {q 0, q 2 } {q 1, q 2 } 19 / 68
δ D ({q 1 }, a) = δ N (p, a) = δ N (q 1, a) = δ D ({q 1 }, b) = δ D ({q 1 }, c) = p {q 1 } p {q 1 } p {q 1 } δ N (p, b) = δ N (q 1, b) = {q 1, q 2 } δ N (p, c) = δ N (q 1, c) = a b c {q 0 } {q 0, q 1 } {q 1 } {q 1, q 2 } {q 2 } {q 0, q 1 } {q 0, q 2 } {q 1, q 2 } {q 0, q 1, q 2 } 20 / 68
δ D ({q 2 }, a) = δ N (p, a) = δ N (q 2, a) = δ D ({q 2 }, b) = δ D ({q 2 }, c) = p {q 2 } p {q 2 } p {q 2 } δ N (p, b) = δ N (q 2, b) = δ N (p, c) = δ N (q 2, c) = {q 2 } a b c {q 0 } {q 0, q 1 } {q 1 } {q 1, q 2 } {q 2 } {q 2 } {q 0, q 1 } {q 0, q 2 } {q 1, q 2 } {q 0, q 1, q 2 } 21 / 68
δ D ({q 0, q 1 }, a) = δ N (p, a) = δ N (q 0, a) δ N (q 1, a) = {q 0, q 1 } = {q 0, q 1 } δ D ({q 0, q 1 }, b) = δ D ({q 0, q 1 }, c) = p {q 0,q 1 } p {q 0,q 1 } p {q 0,q 1 } δ N (p, b) = δ N (q 0, b) δ N (q 1, b) = {q 1, q 2 } = {q 1, q 2 } δ N (p, c) = δ N (q 0, c) δ N (q 1, c) = = a b c {q 0 } {q 0, q 1 } {q 1 } {q 1, q 2 } {q 2 } {q 2 } {q 0, q 1 } {q 0, q 1 } {q 1, q 2 } {q 0, q 2 } {q 1, q 2 } {q 0, q 1, q 2 } 22 / 68
δ D ({q 0, q 2 }, a) = δ N (p, a) = δ N (q 0, a) δ N (q 2, a) = {q 0, q 1 } = {q 0, q 1 } δ D ({q 0, q 2 }, b) = δ D ({q 0, q 2 }, c) = p {q 0,q 2 } p {q 0,q 2 } p {q 0,q 2 } δ N (p, b) = δ N (q 0, b) δ N (q 2, b) = = δ N (p, c) = δ N (q 0, c) δ N (q 2, c) = {q 2 } = {q 2 } a b c {q 0 } {q 0, q 1 } {q 1 } {q 1, q 2 } {q 2 } {q 2 } {q 0, q 1 } {q 0, q 1 } {q 1, q 2 } {q 0, q 2 } {q 0, q 1 } {q 2 } {q 1, q 2 } {q 0, q 1, q 2 } 23 / 68
δ D ({q 1, q 2 }, a) = δ N (p, a) = δ N (q 1, a) δ N (q 2, a) = = δ D ({q 1, q 2 }, b) = δ D ({q 1, q 2 }, c) = p {q 1,q 2 } p {q 1,q 2 } p {q 1,q 2 } δ N (p, b) = δ N (q 1, b) δ N (q 2, b) = {q 1, q 2 } = {q 1, q 2 } δ N (p, c) = δ N (q 1, c) δ N (q 2, c) = {q 2 } = {q 2 } a b c {q 0 } {q 0, q 1 } {q 1 } {q 1, q 2 } {q 2 } {q 2 } {q 0, q 1 } {q 0, q 1 } {q 1, q 2 } {q 0, q 2 } {q 0, q 1 } {q 2 } {q 1, q 2 } {q 1, q 2 } {q 2 } {q 0, q 1, q 2 } 24 / 68
25 / 68 δ D ({q 0, q 1, q 2 }, a) = δ N (p, a) = δ N (q 0, a) δ N (q 1, a) δ N (q 2, a) = p {q 0,q 1,q 2 } {q 0, q 1 } = {q 0, q 1 } δ D ({q 0, q 1, q 2 }, b) = δ N (p, b) = δ N (q 0, b) δ N (q 1, b) δ N (q 2, b) = p {q 0,q 1,q 2 } {q 1, q 2 } = {q 1, q 2 } δ D ({q 0, q 1, q 2 }, c) = δ N (p, c) = δ N (q 0, c) δ N (q 1, c) δ N (q 2, c) = {q 2 } = {q 2 } p {q 0,q 1,q 2 }
26 / 68 a b c {q 0 } {q 0, q 1 } {q 1 } {q 1, q 2 } {q 2 } {q 2 } {q 0, q 1 } {q 0, q 1 } {q 1, q 2 } {q 0, q 2 } {q 0, q 1 } {q 2 } {q 1, q 2 } {q 1, q 2 } {q 2 } {q 0, q 1, q 2 } {q 0, q 1 } {q 1, q 2 } {q 2 }
27 / 68 Správanie sa NKA pre ret azec aa: T.j. ˆδ N (q 0, aa) = {q 0, q 1 }. Vidíme, že NKA sa vie dostat po spracovaní ret azca aa do jedného zo stavov {q 0, q 1 }. Ekvivalentne, v DKA: ˆδ D ({q 0 }, aa) = {q 0, q 1 }. V oboch automatoch by sme samozrejme aa akceptovali.
28 / 68 Správanie sa NKA pre ret azec aba: T.j. ˆδ N (q 0, aba) =. Vidíme, že NKA sa nevie dostat spracovaním aba do žiadneho stavu, pretože sa pre všetky možné výpočty zasekne. Ekvivalentne, v DKA: ˆδ D ({q 0 }, aba) =. V oboch automatoch by sme samozrejme aba neakceptovali.
29 / 68 Pri pohl ade na NKA (alebo aj DKA) vidíme, že tieto automaty akceptujú jazyk: L(N) = L(D) = {a i b j c k i 1, j 0, k 0, i, j, k Z} ekvivalentne: L(N) = L(D) = a + b c.
30 / 68 Efektívnejšia determinizácia DKA, ktorý sme dostali, má až 8 stavov, ked že pôvodný NKA mal 3 (2 3 = 8). Vo vzniknutom DKA sú však stavy {q 1 }, {q 0, q 2 }, {q 0, q 1, q 2 } nedosiahnutel né, t.j. neexistuje vstupné slovo, pri ktorého spracovaní by sa automat vedel dostat do jedného z týchto 3 stavov. Preto sú v automate nadbytočné. Preto môžeme uvažovat upravený algoritmus determinizácie, pri ktorom nevytvoríme všetky stavy DKA hned, ale konštruujeme ich "on-the-fly" počas determinizácie podl a toho, či sú alebo nie sú dosiahnutel né.
31 / 68 Efektívnejšia determinizácia Začnime teda znovu z daného NKA: a b c Start q 0 q 1 q a 2 b Na začiatku vieme, že v DKA bude určite dosiahnutel ný jeho počiatočný stav {q 0 }. Preto vyšetríme prechody z neho a každý stav, ktorý takto dostaneme bude tiež dosiahnutel ný. a b c {q 0 }
32 / 68 a b c {q 0 } {q 0, q 1 } Vidíme, že aj stavy a {q 0, q 1 } sú dosiahnutel né, tak ich pridáme do prechodovej tabul ky a vyšetríme prechody aj pre ne: a b c {q 0 } {q 0, q 1 } {q 0, q 1 } {q 0, q 1 } {q 1, q 2 } Pribudol d alší dosiahnutel ný stav {q 1, q 2 }. Vyšetríme aj jeho prechody:
33 / 68 a b c {q 0 } {q 0, q 1 } {q 0, q 1 } {q 0, q 1 } {q 1, q 2 } {q 1, q 2 } {q 1, q 2 } {q 2 } Pribudol d alší dosiahnutel ný stav {q 2 }, vyšetríme aj ten: a b c {q 0 } {q 0, q 1 } {q 0, q 1 } {q 0, q 1 } {q 1, q 2 } {q 1, q 2 } {q 1, q 2 } {q 2 } {q 2 } {q 2 }
34 / 68 Ked že už žiadne d alšie dosiahnutel né stavy nepribudli, máme DKA ekvivalentný k zadanému NKA, pričom počet stavov je 5, čo je menej než 8, získaných pôvodnou subset konštrukciou. Samozrejme, oba DKA sú ekvivalentné.
35 / 68 Príklad 3 Determinizujte nasledovný NKA. Určte, aký jazyk akceptuje daný NKA (DKA). b q 1 Start q 0 a, b b b a q 2
36 / 68 Vykonáme rýchlu determinizáciu. T.j. začneme s počiatočným stavom {q 0 } v DKA a hl adáme z neho dosiahnutel né stavy. a b {q 0 } δ D ({q 0 }, a) = δ D ({q 0 }, b) = p {q 0 } p {q 0 } δ N (p, a) = δ N (q 0, a) = {q 1, q 2 } δ N (p, b) = δ N (q 0, b) = {q 1 } Doplníme do prechodovej tabul ky a zároveň vidíme, že dosiahnutel né sú 2 nové stavy: {q 1, q 2 } a {q 1 }. Oba sú zároveň aj akceptačné.
37 / 68 a {q 0 } {q 1, q 2 } {q 1 } {q 1, q 2 } {q 1 } Najprv zistíme prechody zo stavu {q 1, q 2 }: δ D ({q 1, q 2 }, a) = δ D ({q 1, q 2 }, b) = {q 0, q 1, q 2 } p {q 1,q 2 } p {q 1,q 2 } b δ N (p, a) = δ N (q 1, a) δ N (q 2, a) = = δ N (p, b) = δ N (q 1, b) δ N (q 2, b) = {q 1 } {q 0, q 2 } = Doplníme do prechodovej tabul ky a zároveň vidíme, že dosiahnutel né sú 2 nové stavy: (neakceptačný) a {q 0, q 1, q 2 } (akceptačný).
38 / 68 a {q 0 } {q 1, q 2 } {q 1 } {q 1, q 2 } {q 0, q 1, q 2 } {q 1 } {q 0, q 1, q 2 } Zistíme prechody zo stavu {q 1 }: δ D ({q 1 }, a) = δ D ({q 1 }, b) = p {q 1 } p {q 1 } b δ N (p, a) = δ N (q 1, a) = δ N (p, b) = δ N (q 1, b) = {q 1 } Doplníme do prechodovej tabul ky. Vidíme, že oba stavy už v tabul ke máme, čiže sme nenašli nový dosiahnutel ný stav.
a {q 0 } {q 1, q 2 } {q 1 } {q 1, q 2 } {q 0, q 1, q 2 } {q 1 } {q 1 } {q 0, q 1, q 2 } Zistíme prechody zo stavu : δ D (, a) = p δ D (, b) = p δ N (p, a) = δ N (p, b) = b Doplníme do prechodovej tabul ky. Vidíme, že sme nenašli nový dosiahnutel ný stav. 39 / 68
Doplníme do prechodovej tabul ky. Vidíme, že sme nenašli nový dosiahnutel ný stav. 40 / 68 a {q 0 } {q 1, q 2 } {q 1 } {q 1, q 2 } {q 0, q 1, q 2 } {q 1 } {q 1 } {q 0, q 1, q 2 } b Zistíme prechody zo stavu {q 0, q 1, q 2 }: δ D ({q 0, q 1, q 2 }, a) = δ N (p, a) = δ N (q 0, a) δ N (q 1, a) δ N (q 2, a) = p {q 0,q 1,q 2 } {q 1, q 2 } = {q 1, q 2 } δ D ({q 0, q 1, q 2 }, b) = p {q 0,q 1,q 2 } {q 1 } {q 1 } {q 0, q 2 } = {q 0, q 1, q 2 } δ N (p, b) = δ N (q 0, b) δ N (q 1, b) δ N (q 2, b) =
41 / 68 a {q 0 } {q 1, q 2 } {q 1 } {q 1, q 2 } {q 0, q 1, q 2 } {q 1 } {q 1 } {q 0, q 1, q 2 } {q 1, q 2 } {q 0, q 1, q 2 } b Ked že tabul ka je celá vyplnená a každý stav sme vyšetrili, dostávame výslednú prechodovú tabul ku DKA, ktorý je ekvivalentný zadanému NKA. Čiže z maximálneho počtu 8 stavov má tento DKA stavov len 5.
42 / 68
43 / 68 Výpočet slova abbab v NKA: Vidíme, že existuje 6 rôznych spôsobov, akými môže NKA spracovat vstup abbab.
44 / 68 Pre porovnanie výpočet slova abbab v príslušnom DKA: Ked že je to DKA, tu existuje len 1 spôsob, ako možno spracovat vstup abbab.
45 / 68 Ak by sme chceli určit jazyk, ktorý NKA / DKA akceptujú, tak jednoduchšie je to z pohl adu na NKA: Slovo akceptujem tak, že sa z q0 viem jeho prečítaním dostat do q 1, t.j. určite na jeho konci je jedno a / jedno b (cesta z q 0 do q 1 ), za ktorými môže nasledovat postupnost b (slučka v q 1 ). Ale navyše, je možné ešte predtým íst z q 0 cez q 2 naspät do q 0 l ubovol ný počet krát, t.j. na začiatku slova sa môžu opakovat a (t.j. z q 0 do q 2 ), za ním môže byt l ubovol ná postupnost b (slučka v q 2 ) a následne 1 b (z q 2 do q 0 ). Čiže celkovo ret azce, ktoré automaty akceptujú, sú v tvare: {{a}{b} {b}} {a, b}{b}
46 / 68 Príklad 4 Nájdite NKA, ktorý akceptuje jazyk L nad abecedou {0, 1}, kde L = {0w1 w {0, 1} } inými slovami: L = {w w začína nulou a končí jednotkou } Ret azce z jazyka: L = {01, 001, 011, 0001, 0011, 0101, 0111,...}
NKA sú ideálne pre popis takýchto jazykov, ked že sú často jednoduchšie na zostrojenie než DKA. Najmä v NKA nemusíme uvažovat, či je prechod na jednotku súčast ou časti w alebo je to posledná jednotka. Proste definujeme aj taký, aj taký prechod a NKA sa "postará" o zvyšok. Ked že w má označovat l ubovol ný ret azec z núl a jednotiek, v NKA to vieme realizovat vel mi jednoducho pomocou slučky na všetky symboly. 47 / 68
48 / 68 0, 1 Start q 0 q 1 q 2 0 1
49 / 68 DKA vytvorený z NKA by vyzeral nasledovne: 0 1 0 Start {q 0 } {q 1 } {q 1, q 2 } 0 1 1 0, 1
50 / 68 Príklad 5 Nájdite NKA, ktorý akceptuje jazyk L nad abecedou {a, b}, kde L = {xayb x, y {a, b} } Ret azce z jazyka: L = {ab, aab, aabb, baab, babb,...}
51 / 68 a, b a, b Start q 0 q 1 q a 2 b
52 / 68 Príklad 6 Na predchádzajúcom cvičení bola medzi náročnejšími úlohami úloha nájst DKA, ktorý akceptuje nasledovný jazyk nad abecedou {0, 1}: L = {w tretí symbol w od konca je jednotka } Táto úloha sa ovel a jednoduchšie rieši tak, že sa nájde NKA a ten sa potom skonvertuje na DKA, než že sa nájde DKA priamo.
53 / 68 Skonštruujeme NKA, ktorý dokáže rozpoznat, že tretí symbol od konca je jednotka. To znamená, že prečíta akýkol vek prefix pred touto jednotkou a následne zistí, že tretí symbol od konca je jednotka a za ňou ešte dva l ubovol né symboly. Tento jazyk sa dá totižto prepísat aj nasledovne: {0, 1} 1{0, 1} 2 A to pomocou NKA zostrojíme pomerne jednoducho:
54 / 68 0, 1 Start q 0 q 1 q 2 q 3 1 0, 1 0, 1
Príslušný DKA by vyzeral nasledovne (pozor, v obrázku to nie je dobre vidiet, ale zo stavu q3 je prechod do stavu q6 na symbol 0) 55 / 68
Ďalšie 2 zaujímavé úlohy (obe sú variantou úloh z knihy [1], odporúčam sa pozriet na d alšie úlohy v spomínanej literatúre v kapitole 2.3.7, kde sú úlohy na NKA). 1. Množina ret azcov nad abecedou {0, 1, 2} taká, že ich posledný symbol sa v ret azci vyskytuje ešte aspoň jeden krát. Do jazyka patria napríklad 00, 0120, 0121, 0122, 122, 212, 222,... Do jazyka nepatria napríklad 0, 1, 2, 01, 12, 20, 012, 210,... 2. Množina ret azcov nad abecedou {0, 1} taká, že sa v nich nachádzajú dve nuly, ktoré sú od seba oddelené počtom pozícií, ktorý je násobok trojky. Do jazyka patria napríklad 11100, 01110, 00100, 00101010, 1001, 101000,... Do jazyka nepatria napríklad 010, 111, 0110,... 56 / 68
57 / 68 A pre vel ký úspech dôkazová úloha Pre jazyk L = {0w1 w {0, 1} } sme zostrojili NKA: 0, 1 Start q 0 q 1 q 2 0 1 Dokážme, že tento automat naozaj akceptuje daný jazyk a teda, že akceptačný výpočet (t.j. taký, ktorý po prečítaní skončí v stave q 2 ) existuje práve také ret azce, ktoré začínajú nulou a končia jednotkou.
58 / 68 Chceme teda dokázat, že pre náš automat platí tvrdenie: S 3 : q 2 ˆδ N (q 0, w) vtedy a len vtedy, ak w začína nulou a končí jednotkou. Na dôkaz si pomôžeme d alšími dvomi tvrdeniami o zvyšných 2 stavoch: S 2 : q 1 ˆδ N (q 0, w) vtedy a len vtedy, ak w začína nulou. S 1 : q 0 ˆδ N (q 0, w) vtedy a len vtedy, ak w = ε. Tvrdenia S 2, S 3 sa týkajú ret azcov l ubovol nej dĺžky, tie budeme dokazovat matematickou indukciou. Tvrdenie S 1 je možné dokázat bez indukcie.
59 / 68 Dôkaz S 1 : q 0 ˆδ N (q 0, w) vtedy a len vtedy, ak w = ε. 1. Ak w = ε, potom q 0 ˆδ N (q 0, w). Nech w = ε. Potom ˆδ N (q 0, w) = ˆδ N (q 0, ε), čo podl a definície je rovné {q 0 }. T.j. platí, že q 0 ˆδ N (q 0, w). 2. Ak q 0 ˆδ N (q 0, w), potom w = ε. Nech q 0 ˆδ N (q 0, w). Z pohl adu na automat, takýto ret azec w nemôže mat prvý symbol 0, lebo by q 0 nebolo možné výpočtom dosiahnut. Taktiež ak by bol prvý symbol 1, automat by sa zasekol. Preto je w ret azec "bez prvého symbolu" a teda prázdny ret azec, t.j. w = ε.
60 / 68 Dôkaz S 2 : q 1 ˆδ N (q 0, w) vtedy a len vtedy, ak w začína nulou. Základný krok, n = 0 1. Ak w začína nulou, potom q 1 ˆδ N (q 0, w). Máme w = ε. Takéto w nulou však začínat nemôže. Predpoklad je teda nesplnený a celé tvrdenie považujeme v tomto prípade za platné. 2. Ak q 1 ˆδ N (q 0, w), potom w začína nulou. Máme w = ε. V takom prípade sa však nemôže stat, že q 1 ˆδ N (q 0, w), čiže predpoklad je nesplnený. V takom prípade je však celé tvrdenie platné.
61 / 68 Dôkaz S 3 : q 2 ˆδ N (q 0, w) vtedy a len vtedy, ak w začína nulou a končí jednotkou. Základný krok, n = 0 1. Ak w začína nulou a končí jednotkou, potom q 2 ˆδ N (q 0, w). Máme w = ε. Takéto w však nemôže začínat nulou a končit jednotkou. Predpoklad je teda nesplnený a celé tvrdenie považujeme v tomto prípade za platné. 2. Ak q 2 ˆδ N (q 0, w), potom w začína nulou a končí jednotkou. Máme w = ε. V takom prípade sa však nemôže stat, že q 2 ˆδ N (q 0, w), čiže predpoklad je nesplnený. V takom prípade je však celé tvrdenie platné.
Základné prípady S 2, S 3 platia, vyslovme teda indukčný predpoklad, že tvrdenia platia pre ret azce dĺžky n a dokážme, že platia pre ret azce dĺžky n + 1. 62 / 68
63 / 68 Dôkaz S 2 : q 1 ˆδ N (q 0, w) vtedy a len vtedy, ak w začína nulou. w = n + 1 1. Ak w začína nulou, potom q 1 ˆδ N (q 0, w). Nech w = xa, x = n, a {0, 1}. Ked že w začína nulou, tým pádom aj x začína nulou a navyše x je dĺžky n. Z indukčného predpokladu vieme, že q 1 ˆδ N (q 0, x). A z obrázka automatu je zrejmé, že q 1 δ N (q 1, a) aj pre a = 0, aj pre a = 1. Preto teda aj q 1 ˆδ N (q 0, w). 2. Ak q 1 ˆδ N (q 0, w), potom w začína nulou. (Dôkaz na d alšom slajde)
Ak q 1 ˆδ N (q 0, w), potom w začína nulou. w = n + 1 w = xa, x = n, a {0, 1}. Ak q 1 ˆδ N (q 0, w), potom uvažujme, ako sa tam q 1 dostalo: Nech a = 0. V takom prípade po ret azci x musí byt NKA v takých stavoch, z ktorých sa prečítaním nuly dá íst do q 1. Teda q 0 ˆδ N (q 0, x), aj q 1 ˆδ N (q 0, x). Ak q 0 ˆδ N (q 0, x), tak vieme, že musí platit, že x = ε. A v tom prípade w = xa = 0, čiže ret azec začínajúci nulou. Ak q 1 ˆδ N (q 0, x), tak z indukčného predpokladu musí platit, že x začína nulou. Lenže v takom prípade aj w začína nulou. Nech a = 1. V takom prípade po ret azci x musí byt NKA v takých stavoch, z ktorých sa prečítaním nuly dá íst do q 1. Teda q 1 ˆδ N (q 0, x). Z indukčného predpokladu vieme, že x musí v takom prípade začínat nulou a teda aj w bude začínat nulou. Analýzou všetkých možností sme dospeli k tomu, že ak q 1 ˆδ N (q 0, w), tak potom určite w bude začínat nulou. 64 / 68
65 / 68 Dôkaz S 3 : q 2 ˆδ N (q 0, w) vtedy a len vtedy, ak w začína nulou a končí jednotkou. w = n + 1 1. Ak w začína nulou a končí jednotkou, potom q 2 ˆδ N (q 0, w). Nech w = x1, x = n. Ked že w začína nulou, tým pádom aj x začína nulou a navyše x je dĺžky n. Z indukčného predpokladu vieme, že q 1 ˆδ N (q 0, x). A z obrázka automatu je zrejmé, že q 2 δ N (q 1, 1). Preto teda aj q 2 ˆδ N (q 0, w). 2. Ak q 2 ˆδ N (q 0, w), potom w začína nulou a končí jednotkou. (Dôkaz na d alšom slajde)
66 / 68 Ak q 2 ˆδ N (q 0, w), potom w začína nulou a končí jednotkou. w = n + 1 w = xa, x = n, a {0, 1}. Ak q 2 ˆδ N (q 0, w), potom uvažujme, ako sa tam q 2 dostalo: Nech a = 0. Z pohl adu na obrázok automatu je zrejmé, že nie je možné, aby ret azec, ktorého posledný symbol bol 0, skončil v stave q 2, pretože zo žiadneho stavu nie je možný prechod do stavu q 2 na symbol 0. Preto posledný symbol w nemôže byt nula. Nech a = 1. V takom prípade po ret azci x musí byt NKA v takých stavoch, z ktorých sa prečítaním jednotky dá íst do q 2. Taký stav je len q 1. To znamená, že x má tú vlastnost, že q 1 ˆδ N (q 0, x). Z indukčného predpokladu však vyplýva, že v takom prípade musí x začínat nulou. A teda aj w musí začínat nulou. Čiže v tomto prípade w začína nulou a končí jednotkou! Analýzou všetkých možností sme dospeli k tomu, že ak q 2 ˆδ N (q 0, w), tak potom určite w bude začínat nulou a končit jednotkou.
67 / 68 Tým sme dokázali platnost 3 tvrdení: S 3 : q 2 ˆδ N (q 0, w) vtedy a len vtedy, ak w začína nulou a končí jednotkou. Na dôkaz si pomôžeme d alšími dvomi tvrdeniami o zvyšných 2 stavoch: S 2 : q 1 ˆδ N (q 0, w) vtedy a len vtedy, ak w začína nulou. S 1 : q 0 ˆδ N (q 0, w) vtedy a len vtedy, ak w = ε. Z tvrdenia S 3 vyplýva, že jazyk tohto automatu tvoria práve ret azce, ktoré začínajú 0 a končia 1, lebo to sú práve tie ret azce, pre ktoré existuje výpočet do akceptačného stavu q 2.
68 / 68 Použitá literatúra 1 Hopcroft, Motwani, Ullman - Introduction to Automata Theory, Languages and Computations, 3rd Ed.