TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 16. toukokuuta 2011
Sisällys
engl. random-access machines, RAM yksinkertaistettu nykyaikaisen (ei-rinnakkaisen) tietokoneen teoreettinen malli kuten Turingin koneessa, myös RAM:ssa ohjelma on kovakoodattu itse koneeseen on myös universaalikonetta vastaava variantti, engl. random-access stored-program machine (RASP) 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ä.
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 1 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 1 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 formaalisti Määritelmä Viisikko M = (I, Σ, Γ, σ, γ) on hajasaantikone (engl. random-access machine), jos seuraavat pätevät: Σ ja Γ ovat epätyhjiä, äärellisiä joukkoja (syöte- ja tulostemerkistöt) σ : Σ {1,..., Σ } on bijektio (syötemerkistön koodaus) γ : {1,..., Γ } Γ on bijektio (tulostemerkistön koodaus) I = (I 0,..., I n 1 ) on epätyhjä, äärellinen jono (ohjelma), jossa kaikilla i = 0,..., n pätee I i C N N N, jossa C = {READ, WRITE, JGT, CONST, LOAD, STORE, ADD, SUB}.
RAM:n tilanteet Määritelmä Olkoon M = (I, Σ, Γ, σ, γ) RAM, jossa I = (I 0,..., n 1). Sen tilanne on nelikko (v, k, m, w), jossa v Σ on jäljellä oleva syöte k {0,..., n 1} on seuraavan käskyn järjestysnumero m : N Z on koneen muistin tila 2 w Γ on syntynyt tuloste Alkutilanne syötteellä v Γ on (v, 0,, ε). 2 Tämä usein esitetään luettelemalla nollasta eroavat muistipaikat arvoineen: esim. m = {(0, 1), (1, 2)}.
RAM:n toiminta RAM:n toiminta määritellään antamalla tilanteiden välinen relaatio. 3 (cv, k, m, w) (v, k + 1, m {(r 1, σ(c))}, w) kun I k = READ r 1 (ε, k, m, w) (v, k + 1, m {(r 1, 0)}, w) kun I k = READ r 1 (v, k, m, w) (v, k + 1, m, wc) kun I k = WRITE r 1 c = γ(m(r 1 )) (v, k, m, w) (v, k + 1, m, w) kun I k = JGT l r m(r) 0 (v, k, m, w) (v, l, m, w) kun I k = JGT l r m(r) > 0 (v, k, m, w) (v, k + 1, m {(r, C)}, w) kun I k = CONST r C (v, k, m, w) (v, k + 1, m {(r 1, m(r 2 ))}, w) kun I k = LOAD r 1 r 2 (v, k, m, w) (v, k + 1, m {(m(r 2 ), r 1 )}, w) kun I k = STORE r 1 r 2 (v, k, m, w) (v, k + 1, m {(r 1, m(r 2 ) + m(r 3 ))}, w) kun I k = ADD r 1 r 2 r 3 (v, k, m, w) (v, k + 1, m {(r 1, m(r 2 ) m(r 3 ))}, w) kun I k = ADD r 1 r 2 r 3 Relaatio määritellään tavanomaiseen tapaan. 3 Operaattoria käytetään muistifunktion muuttamiseen: (f S)(x) = { y f (x) jos (x, y) S muuten
RAM tunnistimena Määritelmä RAM M = (I, Σ, {Y, N}, σ, γ) hyväksyy merkkijonon w Σ, jos (v, 0,, ε) (v, 0, m, Y) pätee. RAM M = (I, Σ, {Y, N}, σ, γ) hylkää merkkijonon w Σ, jos (v, 0,, ε) (v, 0, m, N) pätee. 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 Olkoon A mielivaltainen kieli. 1. On olemassa Turingin kone, joka tunnistaa A:n, jos ja vain jos on olemassa RAM, joka tunnistaa A:n. 2. On olemassa Turingin kone, joka ratkaisee A:n, jos ja vain jos on olemassa RAM, joka ratkaisee A:n. Todistus Sivuutetaan.
Sisällys
Kieli laskentasääntöineen, joka kuvaa funktioiden rakentamista ja kutsumista eikä mitään muuta. λxe tarkoittaa lauseketta E tulkittuna x:n funktioksi. λxx on identiteettifunktio λxc on vakiofunktio, jonka arvo on aina c fx tarkoittaa funktion f kutsua argumentilla x (λxx)c saa arvokseen c puhtaassa lambda-laskennossa ei ole mitään muuta, käytännössä yleensä laajennetaan esim. aritmetiikalla
Lambdakieli Määritelmä Lambdakieli on kontekstiton kieli, jonka voi kuvata seuraavalla kontekstittomalla kieliopilla: T X T TT T λxt T (T) X x X X (applikaatio) (abstraktio) Välikemerkin T merkkijonot ovat termejä määritellään T = { w T w} ja välikemerkin X merkkijonot ovat muuttujia määritellään X = { w X w}. Päätemerkit ovat x,, (, ), λ.
Vapaat ja sidotut muuttujat Abstraktio λxt sitoo (engl. binds) muuttujan x. Muuttuja esiintyy vapaana (engl. occurs free) lambdatermissä, jos ainakin sen yksi esiintymä ei ole sitä sitovan abstraktion sisällä.
Korvaus Määritellään korvausoperaattori t[x := u], missä t, u T ja x X, siten, että tuloksena on t muutettuna niin, että jokainen x:n vapaa esiintymä korvataan u:lla. Täsmällinen määritelmä on sotkuinen ja siksi sivuutetaan.
α- ja β-ekvivalenssit t ja u ovat α-ekvivalentit, jos ne eroavat vain sidottujen muuttujien nimissä. Määritellään β-ekvivalenssi = β seuraavasti: (λxt)u = β t[x := u] x = β x t 1 t 2 = β u 1 u 2 jos t 1 = β u 1 ja t 2 = β u 2 λxt = β λxu jos t = β u (t) = β (u) jos t = β u
Church Rosser Määritelmä Lambdatermi on normaalimuodossa, jos se ei sisällä yhtään alitermiä, joka olisi muotoa (λxt)u. Lause (Church Rosser) Jos t = β u ja t = β u pätevät ja sekä u että u ovat normaalimuodossa, niin u ja u ovat α-ekvivalentit.
Suhde Turingin koneisiin Lause (Turing) 1. On olemassa normaalimuotoiset lambdatermit t y ja t n, joille pätee: Jokaiselle standardimalliselle Turingin koneelle M ja sen syötteelle w on olemassa lambdakielinen termi t M,w, jolle pätee t M,w = β t y jos ja vain jos M hyväksyy w:n ja t M,w = β t n jos ja vain jos M hylkää w:n. 2. On olemassa Turingin kone, joka saatuaan syötteenä lambdatermin t pysähtyy niin, että nauhalla on normaalimuotoinen lambdatermi u, jos ja vain jos t = β u pätee. Todistus Sivuutetaan.
Sisällys
Yleinen eli rajoittamaton kielioppi on kontekstittomien kielioppien yleistys. Kuten kontekstittomissa kieliopeissa: välikesymbolien joukko V, päätesymbolien joukko Σ ja aloitussymboli S. Produktiot ovat muotoa ω 1 ω 2 ω 1 (V Σ) + nuolen vasemmallakin puolella saa siis olla mitä vain (paitsi ei tyhjää)! ω 2 (V Σ)
Esimerkki S LT ε T ABCT ABC BA AB CB BC CA AC LA a aa aa ab ab bb bb bc bc cc cc
Lause Kieli on rekursiivisesti lueteltava jos ja vain jos se voidaan tuottaa yleisellä kieliopilla.
Kontekstilliset kieliopit Kontekstillinen (engl. context-sensitive) kielioppi on rajoitettu versio yleisistä kieliopeista Produktiot ovat muotoa ω 1 Aω 3 ω 1 ω 2 ω 3 tai S ε S on aloitussymboli ω 1, ω 3 (V Σ) A V ω 2 (V Σ) + ω 1 ja ω 2 ovat produktion konteksti
Lause Kieli voidaan tuottaa kontekstillisella kieliopilla jos ja vain jos se voidaan tunnistaa sellaisella epädeterministisellä Turingin koneella, joka ei koskaan kirjoita blankomerkin päälle muuta kuin blankomerkin itsensä (ns. lineaarirajoitettu automaatti).