sekä muita TIEA241 Automaatit ja kieliopit, kesä 2013 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 19. kesäkuuta 2013
Sisällys
Chomskyn hierarkia (ja vähän muutakin) kieli säännöllinen LL(k) LR(1) kontekstiton kontekstinen rekursiivisesti lueteltava automaatti äärellinen (ennustava jäsennin) deterministinen pino pino lineaarirajoitettu Turingin kone
Moniraitainen TM k-raitainen Turingin kone (k 1) on Turingin kone, jonka nauhan lokeroissa on k nauhamerkkiä (järjestettynä jonona) kussakin ja joka lukee tai kirjoittaa kaikki k merkkiä samanaikaisesti. Käynnistettäessä syöte on ensimmäisellä raidalla, muut raidat ovat tyhjiä. Erikoistapaus k = 1 on standardimuotoinen TM. Simulointi standardimuotoisella TM:llä on lähes triviaalia: jos Γ 1,..., Γ k on k-raitaisen TM:n raitakohtaiset nauhamerkistöt, simuloivan koneen nauhamerkistö on (Γ 1 Γ k ) Γ 1. Syöte pitää toki kopioida nauhalta ensimmäiseen raitaan ennen simuloinnin alkua. Moniraitainen TM on siis yhtä vahva kuin standardimuotoinen TM.
Moninauhainen TM k-nauhainen Turingin kone (k 1) on Turingin kone, jossa on k toisistaan riippumatonta nauhaa. Lukupäitä ei ole pakko liikuttaa siirtymässä. Erikoistapaus k = 1, jossa lukupäätä liikutetaan aina, on standardimuotoinen TM. Voidaan simuloida esimerkiksi 2k-raitaisella Turingin koneella, jossa raita 2i sisältää nauhan i sisällön ja jossa raita 2i + 1 sisältää merkin, joka kertoo, missä kohtaa nauhan i lukupää on. Moninauhainen TM on siis yhtä vahva kuin moniraitainen TM ja siis kuin standardimuotoinen TM.
Epädeterministinen TM Epädeterministinen Turingin kone on yksinauhainen ja yksiraitainen Turingin kone, jossa sallitaan useampi kuin yksi siirtymä samasta tilasta samalla nauhamerkillä. Jos on mahdollista valita siirtymät siten, että laskenta päättyy hyväksyvään tilaan, epädeterministinen Turingin kone hyväksyy syötteen. Standardimuotoinen TM on epädeterministisen TM:n erikoistapaus. Mitä luulet? Voidaanko epädeterminististä TM:ää simuloida standardimuotoisella TM:llä?
Epädeterministisen TM:n rakenne Määritelmä Kahdeksikko M = (Q, Σ, Γ,, δ, q 0, q yes, q no ) on epädeterministinen Turingin kone (TM) (engl. nondeterministic Turing machine), jos siirtymäfunktiolle pätee δ : Q Γ P(Q Γ {L, R}), jossa Q = Q \ {q yes, q no }, ja jos M täyttää muilta osin standardimuotoisen TM:n määritelmän.
Epädeterministisen TM:n käyttäytyminen Tilanteet määritellään kuten standardimuotoiselle TM:lle. 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.
Epädeterministisen TM:n kielet 1 M hyväksyy merkkijonon w Σ, jos on olemassa γ, γ Γ, joille q 0 w γq yes γ pätee. M hylkää merkkijonon w Σ, jos on olemassa γ, γ Γ, joille q 0 w γq no γ pätee. M:n tilanne γ 1 qγ 2 on hyväksyvästi (hylkäävästi) ratkeava, jos joko q = q yes (q = q no ) pätee tai kaikki tilanteet γ 1 q γ 2, joille pätee γ 1qγ 2 γ 1 q γ 2, ovat hyväksyvästi (hylkäävästi) ratkeavia. M ratkaisee merkkijonon w Σ, jos tilanne q 0 w on hyväksyvästi tai hylkäävästi ratkeava. M tunnistaa kielen, joka koosttuu sen hyväksymistä merkkijonoista. M on ratkaisija eli ratkaisee tunnistamansa kielen, jos se ratkaisee kaikki merkkijonot. 1 Korjattu luennon jälkeen.
Epädeterminismin simulointi Olkoon Q simuloitavan koneen tilojen joukko, Γ sen nauhamerkistö ja δ sen siirtymäfunktio. Olkoon n = max δ(q, c). q Q,c Γ Laaditaan kaikille i = 0,..., n 1 funktiot δ i siten, että kaikilla q Q, c Γ pätee δ(q, c) = n 1 i=0 δ i (q, c) ja kaikilla i = 0,..., n 1 pätee δ i (q, c) 1. Simuloiva TM on kolminauhainen. Ensimmäisellä pidetään syötettä. Toisella simuloidaan simuloitavan koneen nauhaa, alussa tyhjä. Kolmannella pidetään kirjaa tehtävistä valinnoista, alussa tyhjä.
Simuloivan koneen tilat Jokaista simuloitavan koneen tilaa vastaa jokin tietty simuloivan koneen tila. Lisäksi simuloivassa koneessa on aputiloja seuraavalla kalvolla esitettävän käyttäytymisen toteuttamiseksi. Simuloitavan koneen alku- ja lopputilat eivät ole simuloivan koneen alku- ja lopputiloja.
Simuloivan koneen toiminta 1. Kopioi ensimmäinen nauha toiselle nauhalle. 2. Siirrä kaikkien nauhojen lukupää nauhan alkuun. 3. Siirry simuloitavan automaatin alkutilaan. 4. Olkoon q automaatin nykyinen tila, c toisen nauhan lukupään kohdalla oleva merkki ja i kolmannen nauhan lukupään kohdalla oleva merkki. Jos i =, niin tee tilasiirtymä δ i (q, c) ja siirrä kolmannen nauhan lukupäätä yksi askel oikealle; jos siirtymä onnistui, suorita tämä askel uudestaan. 5. Jos ollaan simuloitavan koneen hyväksyvässä tilassa, siirry simuloivan koneen hyväksyvään tilaan. 6. Olkoon w kolmannen nauhan sisältö blankomerkit pois lukien. Kirjoita kolmannelle nauhalle sanakirjajärjestyksessä w:tä seuraava merkistön {0,..., n 1} merkkijono. 7. Tyhjennä toinen nauha ja hyppää askeleeseen 1.
Huomioita Epädeterministinen TM on siten yhtä vahva kuin standardimuotoinen TM. Koska TM:n variantit ovat yleensä yhtä vahvoja kuin standardimuotoinen TM, ei ole väliä, mitä TM:n varianttia käytetään.
Rekursiivisesti lueteltavat kielet Määritelmä Kieli on rekursiivisesti lueteltava, jos on olemassa yleinen kielioppi, joka tuottaa sen. Lause Olkoon L jokin kieli. L on rekursiivisesti lueteltava, jos ja vain jos on olemassa Turingin kone, joka tunnistaa L:n. Huomautus Väite ei päde, jos vaadittaisiin, että kyseinen kone ratkaisisi tuon kielen.
TM:n simulointi yleisellä kieliopilla Kieliopin päätemerkkeinä toimivat TM:n syötemerkit. Kieliopin välikemerkkejä ovat aloitusmerkki S T, B, E, X ja Y TM:n tilat ja ne nauhamerkit, jotka eivät ole syötemerkkejä A c jokaiselle TM:n syötemerkille c Ideana on esittää koneen tilanne wqv merkkijonona BwqvE, jonka edessä on koneelle annettu syöte (johon ei kosketa), ja jos kone hyväksyy syötteen, B:n ja E:n välinen osa (ne mukaan lukien) katoaa.
Kontekstiset kielet Määritelmä Kieli on kontekstinen, jos on olemassa kontekstinen kielioppi, joka tuottaa sen. Määritelmä Turingin kone on lineaarirajoitettu, jos se ei koskaan kirjoita blankomerkin päälle muuta kuin blankomerkin. Lause Olkoon L jokin kieli. L on kontekstinen, jos ja vain jos on olemassa epädeterministinen lineaarirajoitettu Turingin kone, joka tunnistaa L:n.
While-kieli Määritelmä While-kielen ohjelmat noudattavat seuraavaa kontekstitonta kielioppia: S ε S S S x := E; x := read; write E; S if B {S} while B {S} B E = E E E E < E B B B B B (B) E E + E E E c x (E) missä x on mielivaltaista muuttujannimeä ja c mielivaltaista kokonaislukuvakiota edustava päätemerkki.
Semanttisia huomioita Sivuutetaan tässä tarkka merkitysopin määrittely. Muuttujat sisältävät kokonaislukuja; lukualue ei ole rajattu. read lukee syötteestä yhden merkin, ja tallettaa sen koodin muuttujaan. Nolla tarkoittaa syötteen loppua write kirjoittaa tulosteeseen yhden merkin sen, jonka koodi on lausekkeen arvo. Jos lausekkeen arvo ei ole minkään merkin koodi, lause ei tee mitään. Ohjelma pysähtyy, kun ohjelman viimeinen lause on tullut loppuun suoritettua. Ohjelma tunnistimena: tulostetaan Y tai N ja pysähdytään. 2 2 Y ja N voisivat olla mikä tahansa muukin merkkipari. Olennaista on, että sovitaan, mitkä merkit tarkoittavat mitäkin.
While-ohjelmat ja Turingin koneet Huomaa Mikä tahansa tietokoneohjelma, joka laskee matemaattisen funktion, on periaatteessa esitettävissä myös while-kielellä. Lause Jokaiselle Turingin koneelle on olemassa while-kielinen ohjelma, joka tunnistaa saman kielen ja pysähtyy samoilla syötteillä. Vastaavasti jokaiselle while-kieliselle ohjelmalle on olemassa Turingin kone, joka tunnistaa saman kielen ja pysähtyy samoilla syötteillä. Todistus Tarkastellaan ideatasolla taululla, tarkka todistus sivuutetaan.
For-kieli Jos while-kielestä poistetaan while-lause ja sen tilalle laitetaan rajoitettu for-silmukka S for E {S} jonka toistokertojen määrä luetaan (silmukan suorituksen alkaessa) lausekkeen arvosta, saadaan for-kieli. Jokainen for-kielinen ohjelma voidaan muuntaa while-kieliseksi ohjelmaksi. On olemassa while-kielisiä ohjelmia, joita ei voi esittää for-kielellä!
3 engl. random-access machines, RAM yksinkertaistettu nykyaikaisen (ei-rinnakkaisen) tietokoneen teoreettinen malli kuten Turingin koneessa, myös RAM:ssa ohjelma on kovakoodattu itse koneeseen Hajasaantikone koostuu syötenauhasta, jota se ei kykene muuttamaan tulostenauhasta, jota se ei kykene lukemaan muistipaikoista, joilla kullakin on osoite muistipaikka tallentaa mielivaltaisen kokonaisluvun kiinteästä ohjelmasta, joka on jono käskyjä Kullakin käskyllä on järjestysnumero, ensimmäinen on 0. Käskyt koostuvat neljästä kentästä, joista ensimmäinen on operaattori ja kolme muuta ovat operandeja. Operandien tulkinta vaihtelee operaattoreittain; kaikkia operandeja ei aina käytetä. 3 Hajasaantikoneita ei keretty käsitellä, joten ne jäävät opiskelijoiden oman kiinnostuksen varaan ja koealueen ulkopuolelle.
Hajasaantikoneen käskyt READ r lukee syötteestä seuraavan merkin ja tallettaa sen muistipaikkaan r WRITE r kirjoittaa tulosteen loppuun merkin, joka löytyy muistipaikasta r JGT l r hyppää käskyyn numero l, jos muistipaikan r sisältö on suurempi kuin nolla CONST r 1 c kirjoittaa muistipaikkaan r 1 kokonaislukuvakion c LOAD r 1 r 2 kirjoittaa muistipaikkaan r 1 sen muistipaikan sisällön, jonka osoite löytyy muistipaikasta r 2 STORE r 1 r 2 kirjoittaa muistipaikan r 1 sisällön siihen muistipaikkaan, jonka osoite löytyy muistipaikasta r 2 ADD r 1 r 2 r 3 laskee muistipaikkojen r 2 ja r 3 sisältöjen summan ja tallettaa tuloksen muistipaikkaan r 1 SUB r 1 r 2 r 3 laskee muistipaikkojen r 2 ja r 3 sisältöjen erotuksen ja tallettaa tuloksen muistipaikkaan r 1
Hajasaantikoneen toiminta Lähtötilanteessa syötenauhan lukupää on nauhan alussa tulostenauhan kirjoituspää on nauhan alussa kaikki muistipaikat on alustettu nolliksi suoritettavaksi tulee käsky numero 0 Kone siirtyy käskyn suorituksen jälkeen järjestysnumeroltaan seuraavaan käskyyn, jos käsky ei aiheuta hyppyä. Kone pysähtyy jos käskyjonon viimeinen käsky ei aiheuta hyppyä JGT yrittää hypätä käskyyn, jota ei ole LOAD tai STORE löytää muistipaikaista osoitteen, joka ei vastaa mitään muistipaikkaa
Esimerkkiohjelma 4 0 CONST r 1 1 1 CONST r 2 2 2 READ r 10 3 SUB r 5 r 1 r 10 4 JGT 13 r 5 5 SUB r 5 r 10 r 1 6 JGT 9 r 5 7 ADD r 11 r 11 r 1 8 JGT 2 r 1 9 SUB r 5 r 10 r 2 10 JGT 13 r 5 11 SUB r 11 r 11 r 1 12 JGT 2 r 1 13 JGT 18 r 11 14 SUB r 5 r 0 r 11 15 JGT 18 r 5 16 WRITE r 1 17 JGT 19 r 1 18 WRITE r 2 4 Oikeastaan r i :n sijalla pitäisi lukea i, mutta näin se on ehkä selkeämpi luettava. Vaakaviivat osoittavat ns. peruslohkojen (engl. basic block) rajat.
RAM tunnistimena RAM hyväksyy syötemerkkijonon, jos se tulostaa Y ja pysähtyy. RAM hylkää syötemerkkijonon, jos se tulostaa N ja pysähtyy. RAM M tunnistaa kielen L(M) = { v Σ M hyväksyy v:n } Jos RAM M tunnistaa kielen A ja jokaiselle syötemerkkijonolle joko hyväksyy tai hylkää sen, niin M ratkaisee kielen A.
RAM:n ilmaisuvoima Lause 1. Jokaiselle Turingin koneelle on olemassa RAM, joka tunnistaa saman kielen ja pysähtyy samoilla syötteillä. 2. Jokaiselle RAM:lle on olemassa Turingin kone, joka tunnistaa saman kielen ja pysähtyy samoilla syötteillä. Todistus Sivuutetaan.