Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista Antti-Juhani Kaijanaho 15. maaliskuuta 2012 1 Apumääritelmä Määritelmä 1. Olkoon Σ merkistö, jolla on olemassa täydellinen järjestys ( ) Σ 2. Määritellään sen merkkijonoille sanakirjajärjestys ( ) (Σ ) 2 seuraavasti: ε ε w < v w v w = v c < d cw dv w = v c = d w v cw dv kaikilla v, w Σ ja c, d Σ. 2 Epädeterministinen Turingin kone Määritellään täsmällisesti jatkoa varten: Määritelmä 2. Kahdeksikko M = (Q, Σ, Γ,, δ, q 0, q yes, q no ) on epädeterministinen Turingin kone (TM) (engl. Turing machine), jos seuraavat pätevät: Q on äärellinen joukko ( tilat) Γ on äärellinen joukko ( nauhamerkistö) TIEA241 Automaatit ja kieliopit, kevät 2012 1
Σ Γ on epätyhjä joukko ( syötemerkistö) Γ \ Σ ( blanko, tyhjämerkki) Q Γ = q 0 Q ( alkutila) q yes Q ( hyväksyvä lopputila) q no Q ( hylkäävä lopputila) δ : Q Γ P(Q Γ {L, R}) ( siirtymäfunktio), jossa Q = Q \ {q yes, q no }. M:n tilanteet ovat merkkijonot muotoa wqv, missä w, v Γ ja q Q. Olkoot w, v, w, v, w, v Γ, q, q, q Q ja c, c, d Γ. Määritellään tilanteiden välinen relaatio seuraavasti: wqcv wc q v jos δ(q, c) (q, c, R) wdqcv wq dc v jos δ(q, c) (q, c, L) qcw q c w jos δ(q, c) (q, c, L) wq wcq jos δ(q, ) (q, c, R) wdq wq dc jos δ(q, ) (q, c, L) q q c jos δ(q, ) (q, c, L) Määritellään lisäksi normaaliin tapaan. M hyväksyy merkkijonon w Σ, jos on olemassa γ, γ Γ, joille q 0 w γq yes γ pätee. M pysähtyy aina merkkijonolla w Σ, jos ei ole olemassa ääretöntä tilanteiden jonoa I 0, I 1, I 2,... Γ QΓ siten, että I 0 = q 0 w on voimassa ja kaikilla i N pätee I i I i+1. Jos M pysähtyy aina w:llä mutta ei hyväksy sitä, se hylkää sen. M:n tunnistama ja ratkaisema kieli määritellään normaaliin tapaan. Lause 3. Jokaiselle epädeterministiselle Turingin koneelle on olemassa standardimuotoinen Turingin kone, joka hyväksyy ja hylkää samat merkkijonot. Vastaavasti jokaiselle standardimuotoiselle Turingin koneelle on olemassa epädeterministinen Turingin kone, joka hyväksyy ja hylkää samat merkkijonot. Todistus. Sivuutetaan siltä osin kuin asiaa ei ole käsitelty kalvoilla. 2
3 Kieliopit Lause 4. Kieli on rekursiivisesti lueteltava, jos ja vain jos on olemassa Turingin kone, joka tunnistaa sen. Todistus. Rekursiivisesti lueteltavalla kielellä on olemassa yleinen kielioppi, joka tuottaa sen. Saman kielen tunnistaa epädeterministinen Turingin kone, joka toimii seuraavasti: Kone etsii nauhalta osamerkkijonoa w, jolle löytyy kieliopista produktio v w jollakin v. Kun sellainen osamerkkijono löytyy, se epädeterministisesti joko valitsee jonkin sellaisen produktion taikka jatkaa etsimistä. Valittuaan produktion v w se korvaa löytämänsä osamerkkijonon w merkkijonolla v. Kone hyväksyy syötteen, mikäli se päätyy tilanteeseen, jossa nauhalla on pelkästään kieliopin aloitussymboli. Tarkka konstruktio ja todistus sivuutetaan teknisesti työläänä. Tarkastellaan nyt standardimuotoista Turingin konetta, ja rakennetaan yleinen kielioppi, joka tuottaa koneen tunnistaman kielen. Kieliopin päätesymboleita ovat koneen syötemerkit. Välikesymboleita ovat ne koneen nauhamerkit, jotka eivät ole päätesymboleita, nauhamerkistön ulkopuoliset merkit T, B, E, I X ja Y, nauhamerkistön ulkopuolinen aloitusmerkki S sekä jokaiselle päätemerkille c nauhamerkistön ulkopuolinen merkki A c. Kieliopin produktiot ovat seuraavat. Ensiksi alustus, joka tuottaa merkkijonon wbq 0 we, missä w Σ : S IT BE T ca c T ca c A c c c A c A c B Bc Ic ci IB Bq 0 Sitten Turingin koneen siirtymiä vastaavat säännöt: qc c q jos δ(q, c) = (q, c, R) dqc q dc jos δ(q, c) = (q, c, L) Bqc Bq c jos δ(q, c) = (q, c, L) qe cq E jos δ(q, ) = (q, c, R) dqe q dce jos δ(q, ) = (q, c, L) 3
BqE Bq ce jos δ(q, ) = (q, c, L) Lopuksi siivoussäännöt, jotka muuttavat merkkijonon wbvq yes v E merkkijonoksi w: q yes XY cx X BX ε Y c Y Y E ε Produktiot, joissa esiintyy A c, c, c, d, q tai q toistetaan kaikilla c, c, d Σ ja q, q Q. Tarkempi todistus sivuutetaan. Todistus kontekstiselle kielelle sivuutetaan, koska se on osittain demotehtää. 4 While-kieli Se, että jokaiselle Turingin koneelle on while-kielinen ohjelma, joka tunnistaa saman kielen ja pysähtyy samoilla syötteillä, on johdettavissa seuraavista aputuloksista: Kertolasku ja jakolasku (sekä osamäärä että jakojäännös) on mahdollista toteuttaa while-kielellä. While-kielellä on mahdollista simuloida taulukkomuuttujaa, jonka alkion koko on rajoitettu. Olkoot taulukon alkiot a 0,..., a n 1, ja päteköön jokaiselle alkiolle 0 a i < m. Tällöin taulukko voidaan esittää lukumuuttujana, jonka arvo on n 1 a i m i. i=0 Turingin koneen nauhan sisältö (lukuunottamatta ääretöntä blankojonoa sen lopussa) on mahdollista esittää taulukkona. Jokaiselle while-kieliselle ohjelmalle on rakennettavissa Turingin kone, joka tunnistaa saman kielen ja pysähtyy samoilla syötteillä, seuraavilla periaatteilla: 4
Muokataan ohjelma ensiksi muotoon, jossa jokaisen laskutoimituksen tai vertailun tulos tallennetaan muuttujaan, ja operandeina esiintyy vain muuttujia. Käytetään k + 2-nauhaista Turingin konetta, missä k on ohjelmassa esiintyvien muuttujien määrä. Nauhalla 1 on (ja pysyy) syöte. Nauhalle k + 2 kirjoitetaan tuloste. Muilla nauhoilla pidetään yllä muuttujien arvoja. Ohjelmalogiikka koodataan sopivalla tavalla tilasiirtymiksi. 5 Kielihierarkia Seuraavassa taulukossa kullakin rivillä tarkoitettu kieli on sitä ylemmillä riveillä tarkoitettujen kielten osajoukko: Kieli Kielioppi Tunnistava automaatti Tunnistava ohjelmointikieli Rekursiivisesti lueteltava Yleinen Turingin kone While-kieli Rekursiivinen joka syötteellä pysähtyvä TM Primitiivirekursiivinen For-kieli Kontekstinen Kontekstinen lineaarirajoitettu TM Kontekstiton Kontekstiton epädeterministinen pinoautomaatti Deterministinen kontekstiton LR(1) deterministinen pinoautomaatti Yacc ym. LL(k) LL(k) Antlr ym. Säännöllinen Vasen/oikealineaarinen äärellinen säännölliset lausekkeet Tunnistus hyväksyvällä tilalla eikä pinon tyhjentämällä Jokaisella k N pätee LL(k) LL(k + 1). LL(0) ei ole mielenkiintoinen: se pystyy kuvaamaan vain kielet, joissa on enintään yksi merkkijono. 5