582206 Laskennan mallit (syksy 2010) Harjoitus 4, ratkaisuja 1. Esitä tilakaaviona NFA N = (Q, Σ, δ, q 0, F ), missä Q = { q 0, q 1, q 2, q 3, q 4, q 5, q 6, q 7 }, Σ = { a, b, c }, F = { q 4 } ja δ on seuraava: Mikä on automaatin hyväksymä kieli? δ a b c ε q 0 { q 1, q 5 } q 1 { q 1, q 2 } { q 1 } { q 1 } q 2 { q 3 } { q 3 } q 3 { q 4 } q 4 { q 4 } { q 4 } { q 4 } q 5 { q 5 } { q 5 } { q 5, q 6 } q 6 { q 7 } { q 7 } q 7 { q 4 } Automaattia vastaava tilakaavio on: a,b,c a b, ε q1 q2 q3 q0 ε c q4 a,b,c ε c b, ε q5 q6 q7 a a,b,c Automaatin tunnistamaan kieleen kuuluvat merkkijonot, joilla on osajonona ac, abc, ca tai cba. 2. Olkoon aakkoston { 0, 1 } kieli A niiden merkkijonojen joukko, jotka loppuvat nollaan, ja kieli B niiden merkkijonojen joukko, jotka loppuvat 01. Nämä kielet voidaan tunnistaa seuraavilla epädeterministisillä automaateilla: 0, 1 0, 1 0 0 1 a b A B C (a) Muodosta kielen A B tunnistava NFA luennoilla kuvatulla konstruktiolla (ss. 81 82, Sipser ss. 60 61). Anna myös tuloksen formaali esitys.
Kielen A B tunnistava automaatti on seuraava: Automaatin formaali esitys on (Q, Σ, δ, a, F ), jossa Q = { a, b, A, B, C }, Σ = { 0, 1 }, F = { C } ja δ on seuraava: δ 0 1 ε a { a, b } { a } b { A } A { A, B } { A } B { C } C (b) Esitä syntyneen automaatin laskentapuu (luennot s. 61, Sipser s. 49) syötteellä 001101. Automaatin laskentapuu syötteellä 001101 on seuraava: Viimeisellä rivillä on kaksi kertaa lopputila C, eli automaatti voi hyväksyä merkkijonon 001101 kahdella eri tavalla. Mahdolliset tulkinnat ovat 0 01101 ja 00 1101. (c) Muodosta saman kielen tunnistava DFA luentojen konstruktiolla (ss. 71 73, Sipser ss. 55 56). 2
3. Kielen A tunnistavan äärellisen automaatin konstruktiossa (ss. 83 84, Sipser ss. 62 63) kielen A tunnistavaan automaattiin N 1 lisättiin uusi tila q 0, jonka tehtävänä on huolehtia, että tyhjä merkkijono ε tulee hyväksytyksi. Miksi tämän sijasta ei voi vain yksinkertaisesti tehdä automaatin N 1 alkutilasta hyväksyvää? Anna esimerkki. Ongelmana on, että alkutilaan voidaan palata myöhemmin, jolloin sen muuttaminen hyväksyväksi johtaisi ylimääräisten merkkijonojen hyväksymiseen. Yksinkertainen esimerkki saadaan seuraavasta automaatista, jonka tunnistama kieli L koostuu merkkiin 0 päätyvistä merkkijonoista: 1 0 0 a b 1 Jos tila a muutetaan hyväksyväksi (ja lisätään siirtymä δ(b, ε) = { a }), syntyvä automaatti hyväksyy esim. merkkijonon 111, joka ei kuulu kieleen L. 4. (Sipser Problem 1.38) Epädeterministinen automaatti hyväksyy syötteen, jos yksikin mahdollinen laskenta päätyy hyväksyvään tilaan. Määritellään uudenlainen automaatti, NFA, joka on muuten kuin NFA, mutta hyväksyy vain, jos kaikki mahdolliset laskennat päätyvät hyväksyvään tilaan. Osoita, että kieli voidaan tunnistaa NFA:lla, jos ja vain jos se on säännöllinen. Tehtävänä on osoittaa, että kieli on säännöllinen, jos ja vain jos se voidaan tunnistaa NFA:lla. Toinen suunta on ilmeinen: jos kieli on säännöllinen, se voidaan määritelmän mukaan tunnistaa DFA:lla, joka on (pieniä merkintäteknisiä seikkoja lukuunottamatta) NFA:n erikoistapaus. Olkoon toisaalta N = (Q, Σ, δ, q 0, F ) jokin NFA. Muodostamme DFA:n M, jolla L(M) = L(N); tämä osoittaa, että L(N) on säännöllinen. Muodostetaan ensin automaatista N DFA M = (P(Q), Σ, δ, q 0, F ) samalla konstruktiolla kuin luentojen sivuilla 71 73 (Sipser s. 55 56). Nyt tietysti M yleensä hyväksyy liikaa merkkijonoja, sillä sen hyväksyvien tilojen joukko F on valittu normaalin NFA:n hyväksymisehdon mukaan. Lopulliseksi DFA:ksi tulee M = (P(Q), Σ, δ, q 0, F ), missä tila X P(Q) (eli X Q) on hyväksyvä, jos q F kaikilla q X (eli X F ); voimme kirjoittaa tämän F = P(F ). Selvästi automaatin M laskennan viimeinen tila kuuluu joukkoon F, jos ja vain jos automaatin N kaikki laskennat päätyvät hyväksyvään tilaan. Siis L(M) = L(N), kuten haluttiin. Lisähuomio: Jos ollaan tarkkoja, voidaan kuitenkin havaita, että tehtävänmäärittely ei ollut täysin yksikäsitteinen, koska emme ole tarkalleen määritelleet, mikä on laskenta. Jos tarkastelemme esim. tehtävän 2(b) ratkaisussa annettua laskentapuuta, näemme sen pohjariviltä selvästi, että kaksi laskentaa on päätynyt hyväksyvään tilaan C ja yhteensä kolme laskentaa ei-hyväksyviin tiloihin a ja A. Mutta riviltä 4 havaitsemme myös, että yksi laskenta on jäänyt kesken (joutunut umpikujaan) tilassa C, joka on hyväksyvä. Lasketaanko tämä hyväksyvään tilaan päätymiseksi? Luonteva (ja tehtävänlaatijan tarkoittama) tulkinta on, että kesken jääneet laskennat eivät ole hyväksyvään tilaan päätyviä. Siis sovimme NFA:n hyväksymisehdoksi tarkemmin, että kaikilla siirtymäfunktion mukaisilla seuraajatilan valinnoilla automaatti käsittelee koko syötteen ja päätyy hyväksyvään tilaan. Edellä esitetty konstruktio ei noudata tätä sopimusta, koska kesken jääneistä laskennoista ei jää mitään jälkeä siihen, mikä tilajoukko laskentapuun pohjariville tulee. Ongelman ratkaisemiseksi muunnetaan ensin N sellaiseksi, että mikään laskenta ei jää kesken. Tätä varten olkoon N = (Q, Σ, δ, q 0, F ) jokin 3
NFA kuten edellä. Muodostetaan Q = Q { q reject }, missä q reject Q on uusi tila. Määrittelemme N = (Q, Σ, δ, q 0, F ), missä δ (q, x) = δ(q, x) jos q Q ja δ(q, x) δ (q, x) = { q reject } jos q Q ja δ(q, x) = δ (q reject, x) = { q reject } kaikilla x Σ. Nyt N tunnistaa saman kielen kuin N, mutta ei jätä mitään laskentaa kesken. Edellä esitetty konstruktio sovellettuna automaattiin N tuottaa DFA:n M, joka tunnistaa saman kielen kuin NFA N. 5. (Sipser Problem 1.31) Määritellään kielen A käänteiskieli A R = { w R w A }. Väite: Jos aakkoston Σ kieli A on säännöllinen, niin myös kieli A R on. Todistus: Olkoon A säännöllinen ja M = (Q, Σ, δ, q 0, F ) sen tunnistava DFA. Muodostetaan NFA kääntämällä DFA:n M siirtymien suunnat ja lisäämällä alkutila, josta on ε-siirtymät DFA:n hyväksyviin tiloihin. Täsmällisemmin olkoon N = ( ˆQ, Σ, ˆδ, ˆq, ˆF ), missä ˆq Q on uusi tila ˆQ = Q { ˆq } ˆF = { q 0 } siirtymäfunktio on seuraava: ˆδ(ˆq, ε) = F ˆδ(ˆq, a) = kun a Σ ˆδ(q, ε) = kun q Q ˆδ(q, a) = { r δ(r, a) = q } kun q Q ja a Σ. Selvästi N tunnistaa kielen A R. Tunnetusti jos kieli voidaan tunnistaa NFA:lla, se on säännöllinen. Edellä esitetty on riittävä vastaus tehtävään. Jos haluaa perustella tarkemmin, miksi L(N) = A R, sen voi tehdä seuraavasti: Olkoon ensin v A R. Siis v = w R jollakin w = w 1... w n A, missä w i Σ. Koska M hyväksyy merkkijonon w, siinä on tilat r 0,..., r n, missä r 0 = q 0 r n F ja r i = δ(r i 1, w i ) kun i = 1,..., n. Muodostetaan jono s 0,..., s n+1 tiloja NFA:ssa N, missä s 0 = ˆq ja s i = r n i+1 kun i = 1,..., n + 1. Muodostetaan lisäksi jono y = (y 1,..., y n+1 ) Σ n+1 ε, missä y 1 = ε ja y i+1 = w n i+1 kun i = 1,..., n. Nyt y 1 y 2 y 3... y n+1 = εw n w n 1... w 1 = v. Lisäksi s 0 = ˆq on automaatin N alkutila s 1 = r n F, joten s 1 ˆδ(ˆq, ε) = ˆδ(s 0, y 1 ) kaikilla i = 1,..., n pätee s i = r n i+1 = δ(r n i, w n i+1 ) = δ(s i+1, y i+1 ), joten s i+1 ˆδ(s i, y i+1 ). 4
Siis (s 0,..., s n+1 ) on eräs mahdollinen automaatin N tilajono syötteellä v. Koska lisäksi s n+1 = r 0 = q 0 ˆF, niin N hyväksyy merkkijonon v. Olkoon toisaalta v = v 1... v n jokin merkkijono, jonka N hyväksyy. Määritelmän mukaan on olemassa m n, jono (y 1,..., y m ) Σ m ε ja jono (s 0,..., s m ) ˆQ m+1, missä v = y 1..., y m s 0 = ˆq s i+1 ˆδ(s i, y i+1 ) kun i = 0,..., m ja s m ˆF. Koska automaatissa N ei ole siirtymiä alkutilaan ˆq eikä muita ε-siirtymiä kuin alkutilasta lähtevät, voidaan päätellä m = n + 1, y 1 = ε ja y i+1 = v i kun i = 1,..., n. Määritellään r i = s n+1 i kun i = 0,..., n. Koska s n+1 ˆF = { q 0 }, pätee r 0 = q 0. Koska s 1 ˆδ(s 0, y 1 ), pätee r n = s 1 ˆδ(s 0, y 1 ) = ˆδ(ˆq, ε) = F. Koska s i+1 ˆδ(s i, y i+1 ), pätee s i = δ(s i+1, y i+1 ) eli r n+1 i = δ(r n i, v i ) kaikilla i = 1,..., n. Toisin sanoen r j+1 = δ(r j, v n j ), kun j = 0,..., n 1. Siis tilajono (r 0,..., r n ) osoittaa, että M hyväksyy merkkijonon w = v n v n 1... v 1, joten w A. Koska voidaan kirjoittaa v = w R, missä w A, pätee v A R. Olemme osoittaneet, että N hyväksyy merkkijonon v, jos ja vain jos v A R. 6. (a) Sanotaan, että merkkijono w on merkkijonon x alkuosa, jos jollakin merkkijonolla z pätee x = wz. Kun A on aakkoston Σ kieli, määritellään sen alkuosien joukko PREFIX(A) = { w Σ wz A jollakin z Σ }. Väite: Jos kieli A on säännöllinen, niin myös PREFIX(A) on. Todistus: Olkoon A säännöllinen kieli ja M = (Q, Σ, δ, q 0, F ) sen tunnistava DFA. Olkoon F niiden tilojen joukko, joista johtaa siirtymäketju johonkin hyväksyvään tilaan: F = { q Q jollakin z Σ pätee δ (q, z) F }, missä δ on luentojen sivuilla 27 28 määritelty yleistetty siirtymäfunktio. Muodostetaan automaatti M = (Q, Σ, δ, q 0, F ). Ainoa ero alkuperäiseen automaattiin M on siis hyväksyvien tilojen joukon laajentuminen. Selvästi M tunnistaa kielen PREFIX(A). Edellä esitetty on riittävä vastaus tehtävään. Jos haluaa perustella tarkemmin, miksi L(M ) = PREFIX(A), sen voi tehdä esim. seuraavasti: Olkoon w PREFIX(A). Siis on olemassa sellaiset x A ja z Σ, että x = wz. Merkitään q = δ (q 0, w). Koska x A, niin δ (q 0, x) F. Toisaalta δ (q 0, x) = δ (δ (q 0, w), z) = δ (q, z). Siis δ (q, z) F, joten q F ja w L(M ). Olkoon toisaalta w L(M ). Merkitään q = δ (q 0, w). Koska q F, on olemassa z, jolla δ (q, z) F. Tällöin δ (q 0, wz) = δ (q, z) F, joten wz A ja siis w PREFIX(A). (b) Sanotaan, että merkkijono w on merkkijonon x loppuosa, jos jollakin merkkijonolla z pätee x = zw. Kun A on aakkoston Σ kieli, määritellään sen loppuosien joukko SUFFIX(A) = { w Σ zw A jollakin z Σ }. Väite: Jos kieli A on säännöllinen, niin myös SUFFIX(A) on. 5
Todistus: Olkoon w = w 1... w n mielivaltainen merkkijono. Todetaan ensin, että w SUFFIX(A) on olemassa merkit z 1,..., z k Σ joilla z 1... z k w 1... w n A on olemassa merkit z 1,..., z k Σ joilla w n... w 1 z k... z 1 A R w R PREFIX(A R ). Siis SUFFIX(A) = (PREFIX(A R )) R. Olkoon nyt A säännöllinen. Tehtävän 5 nojalla A R on säännöllinen. Tästä seuraa edelleen kohdan (a) nojalla, että PREFIX(A R ) on säännöllinen. Soveltamalla uudestaan tehtävää 5 nähdään, että (PREFIX(A R )) R on säännöllinen. Edellä todetun mukaisesti (PREFIX(A R )) R on sama kieli kuin SUFFIX(A). 7. Koostukoon kieli A n niistä aakkoston { a, b } merkkijonoista, joiden n:nneksi viimeinen merkki on a. (a) Anna kielen A n tunnistava NFA, jossa on enintään n + 1 tilaa. Kielen A n tunnistava epädeterministinen n + 1-tilainen automaatti on seuraava nlai- nen: a,b 1 a a,b a,b a,b a,b 2 3 n n+1 Automaatin formaali esitys on M = (Q, {a, b}, δ, 1, {n + 1}), missä automaatin tiloina on joukko Q = {1, 2,..., n + 1} ja siirtymät ovat: δ(1, a) = {1, 2}, δ(1, b) = {1} ja δ(i, a) = δ(i, b) = {i + 1} kaikilla i = 2, 3,..., n. Aloitustilana on tila 1 ja ainut hyväksyvä tila on tila n + 1. (b) Väite: Missä tahansa kielen A n tunnistavassa DFA:ssa on ainakin 2 n tilaa. Todistus: Olkoon M = (Q, Σ, δ, q 0, F ) DFA, missä Q < 2 n. Väitämme, että L(M) A n. Erilaisia tasan n merkin mittaisia merkkijonoja aakkostossa { a, b } on 2 n kappaletta. Koska Q < 2 n, kyyhkyslakkaperiaatteen mukaan on olemassa kaksi eri merkkijonoa u ja v, jotka ovat tasan n merkin mittaisia ja joilla δ (q 0, u) = δ (q 0, v). Koska u ja v poikkeavat ainakin yhden merkin osalta, voimme valita u = u 1... u i 1 au i+1 u n ja v = v 1... v i 1 bv i+1 v n jollain 1 i n. Merkitään nyt δ (q 0, u) = δ (q 0, v) = q 1 ja δ (q 1, 0 i 1 ) = q 2. Siis q 2 = δ (q 0, u0 i 1 ) = δ (q 0, v0 i 1 ). Jos q 2 F, niin M hyväksyy merkkijonon v0 i 1, vaikka v0 i 1 A n. Jos q 2 F, niin M hylkää merkkijonon u0 i 1, vaikka u0 i 1 A n. Tämä voidaan taas nähdä esimerkkinä tehtävän 2.4 relaatiosta L sovellettuna tapaukseen L = A n. Jos 1 j n ja kaksi merkkijonoa x ja y poikkeavat toisistaan j:nneksi viimeisen merkin osalta, ne ovat A n -erottuvia ja erottuvuuden osoittaa mikä tahansa n j merkin mittainen z. Tämän jälkeen ratkaisun logiikka on sama kuin tehtävässä 2.4. 6