Rajoittamattomat kieliopit Ohjelmoinnin ja laskennan perusmalleista muistetaan, että kieli voidaan kuvata (esim.) kieliopilla joka tuottaa sen, tai automaatilla joka tunnistaa sen. säännölliset lausekkeet äärelliset automaatit kontekstittomat kieliopit pinoautomaatit Nyt saadaan yksi vastaava pari lisää: rajoittamattomat kieliopit Turingin koneet 46
Rajoittamaton kielioppi on nelikko G = (V, Σ, P, S) missä V aakkosto Σ päätemerkit; N = V Σ välikemerkit P (V { ε }) V produktiot S N lähtösymboli Produktiota (α, β) merkitään yleensä α β. Erona kontekstittomiin kielioppeihin, että produktion vasemmalla puolella voi olla mikä tahansa epätyhjä merkkijono. 47
Merkkijono γ V johtaa suoraan merkkijonon γ V jos voidaan kirjoittaa γ = αωβ ja γ = αω β missä ω ω P. Tällöin merkitään γ G γ. Merkkijono γ V johtaa merkkijonon γ V jos on olemassa γ 0 = γ, γ 1, γ 2,..., γ n = γ joille γ i 1 G γ i. Tällöin merkitään γ G γ. Kieliopin G tuottama kieli on L(G) = { } x Σ S x. G 48
Esimerkki: muodostetaan G = (V, Σ, P, S) jolle L(G) = { a k b k c k k 0 }. (Huom. kieli { a k b k c k k 0 } ei ole kontekstiton.) Siis Σ = { a, b, c }. Valitaan N = { S, X, T, A, B, C } ja otetaan produktiot S XT S ε T ABCT T ABC BA AB CA AC CB BC XA a aa aa ab ab bb bb bc bc cc cc 49
Siis merkkijonon a k b k c k tuottamiseksi tuotetaan X(ABC) k järjestetään A-, B- ja C-merkit aakkosjärjestykseen; tuloksena LA k B k C k korvataan isot kirjaimet pienillä vasemmalta alkaen. Tämä osoittaa että rajoittamattomilla kieliopeilla voidaan tuottaa muitakin kuin kontekstisia kieliä. Seuraavaksi käydään periaatetasolla läpi konstruktiot, jotka osoittavat että itse asiassa rajoittamattomilla kieliopeilla voidaan tuottaa tasan ne kielet, jotka voidaan tunnistaa Turingin koneella. 50
Lause: Jos kieli voidaan tuottaa rajoittamattomalla kieliopilla, niin se voidaan tunnistaa Turingin koneella. Todistus (periaate): Olkoon G rajoittamaton kielioppi. Aiemmin esitetyn perusteella riittää muodostaa kaksinauhainen epädeterministinen Turingin kone M jolle L(M) = L(G). Nauha 1 sisältää vain kopion syötejonosta. Nauhalle 2 tuotetaan (epädeterministisesti) lähtösymbolista tuotettavissa olevia merkkijonoja. Laskennan aluksi nauhalle 2 kirjoitetaan pelkkä lähtösymboli. Jos jossain vaiheessa nauhojen sisällöt ovat samat, hyväksytään. 51
Laskenta koostuu vaiheista joissa kussakin viedään epädeterministisesti nauhan 2 nauhapää mielivaltaiseen paikkaan valitaan epädeterministisesti mielivaltainen kieliopin G produktio jos nauhapään kohdalta löytyy produktion vasen puoli, kirjoitetaan sen paikalle produktion oikea puoli verrataan nauhojen 1 ja 2 sisältöjä Koska produktioita on äärellinen määrä, ne voidaan koodata Turingin koneen tiloihin. Tarkemmat yksityiskohdat sivuutetaan. 52
Lause: Jos kieli voidaan tunnistaa Turingin koneella, niin se voidaan tuottaa rajoittamattomalla kieliopilla. Todistus: Olkoon M = (Q, Σ, Γ, δ, q 0, #, F ) annettu. Idea on muodostaa kielioppi G = (V, Σ, P, S) joka tuottaa koneen M tilanteita. Välikkeiksi otetaan siis ainakin koneen M tilojen symbolit. Produktiot suunnitellaan siten että [vqw] G [v q w ] jos ja vain jos vqw M v q w missä [ ja ] ovat uusia välikesymboleja. Tämä on mahdollista koska vqw M v q w edellyttää että vqw ja v q w eroavat toisistaan vain merkin q lähiympäristössä. 53
Merkkijonon x L(M) tuottaminen tapahtuu kolmessa vaiheessa: 1. tuotetaan lähtösymbolista S merkkijono x[q 0 x]. 2. muunnetaan x[q 0 x] G x[vq f w] missä q f F 3. siistitään x[vq f w] G x Varsinainen työ tapahtuu vaiheessa 2 jossa G simuloi konetta M. Jos x L(M), niin G ei pysty tuottamaan muotoa x[vq f w] olevia merkkijonoja. 54
Esitetään vielä konstruktion yksityiskohdat. Aakkostona on (huom. Σ Γ). V = Γ Q { S, T, [, ], X, Y } { A a a Σ } Produktiot jakautuvat edelläesitettyjen vaiheiden mukaisesti kolmeen osakokonaisuuteen: Vaihe 1: alkutilanteen tuottaminen S T [q 0 ] T ε T at A a A a [q 0 [q 0 A a A a b ba a A a ] a] (kaikilla a, b Σ) 55
Vaihe 2: siirtymien simulointi (nämä niille a, b, c Γ jotka ilmenevät siirtymäfunktiosta) Siirtymä δ(q, a) = (q, b, R) δ(q, a) = (q, b, L) δ(q, #) = (q, b, R) δ(q, #) = (q, b, L) δ(q, a) = (q, b, L) Vastaava produktio qa bq cqa q cb q] bq] cq] qcb] [qa [q#b Vaihe 3: lopputilanteen siistiminen (kaikille a Γ, q f F ) q f XY ax X [X ε Y a Y Y ] ε 56