ja ja TIEA241 Automaatit ja kieliopit, kesä 2012 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 26. kesäkuuta 2013
Sisällys ja
ja on yksi vanhimmista tavoista yrittää mallittaa mekaanista laskentaa. Kurt Gödel käytti sen pääpointteja kuuluisan epätäydellisyyslauseensa todistuksessa. Edeltää olennaisilta osin Turingin konetta ja muita kurssilla käsiteltyjä malleja. Church muotoili oman teesinsä myös rekursioteorian kielellä, mutta juuri kukaan muu ei siihen uskonut ennen Turingin koneita. Päälähde Soaren Computability and Recursion 1 ; lisäksi Stanford Encyclopedia of Philosophyn artikkeli Recursive Functions 2. 1 http://www.jstor.org/stable/420992 2 http://plato.stanford.edu/archives/fall2012/ entries/recursive-functions/
Primitiivirekursio, osa 1 Määritelmä Perusfunktioita ovat kaikki vakiofunktiot c n k : Nn N, c n k (x 1..., x n ) = k seuraajafunktio s : N N, s(x) = x + 1 kaikki projektiofunktiot p n i : N n N, p n i (x 1..., x i,..., x n ) = x i ja Määritelmä Olkoot g 1,..., g m : N n N ja h : N m N osittaisfunktioita. Niiden yhdiste h (g 1,..., g m ) : N n N, määritellään seuraavasti: 3 (h (g 1,..., g m ))(x 1,..., x n ) = h(g 1 (x 1,..., x n ),..., g m (x 1,..., x n )) 3 Tässä a = b on tosi silloin, kun sekä a että b ovat määriteltyjä ja samanarvoisia, sekä silloin, kun sekä a että b ovat määrittelemättömiä.
Primitiivirekursio, osa 2 ja Määritelmä Olkoot g : N n+1 N ja h : N n 1 N osittaisfunktioita. Niiden primitiivirekursio ϱ(h, g) : N n N määritellään paloittain rekursiivisesti seuraavasti: ϱ(h, g)(0, y 2,..., y n ) = h(y 2,..., y n ) ϱ(h, g)(x + 1, y 2,..., y n ) = g(x, f (x, y 2,..., y n ), y 2,..., y n ) Määritelmä Osittaisfunktio on primitiivirekursiivinen, jos se voidaan muodostaa perusfunktioista yhdistettä ja primitiivirekursiota tarpeellisen monta kertaa soveltaen.
ja Lause Primitiivirekursiiviset osittaisfunktiot ovat täydellisiä funktioita. Lause Yhteenlasku on primitiivirekursiivinen. Lause For-kieliset ohjelmat laskevat täsmälleen kaikki primitiivirekursiiviset funktiot.
µ-rekursio ja Määritelmä Olkoon f : N n+1 N osittaisfunktio. Sen minimisaatio µf : N n N määritellään seuraavasti: (µf )(x 1,..., x n ) = min{ k N f (k, x 1,..., x n ) = 0 } Näin saatava kieli on µ-rekursion laskennon kieli. Määritelmä Osittaisfunktio f : N N on µ-rekursiivinen, jos se voidaan rakentaa perusfunktioista yhdistettä, primitiivirekursiota ja minimisaatiota tarpeellisen monta kertaa soveltaen.
Kleenen normaalimuotolause ja Lause (Kleene) Jokaiselle µ-rekursiiviselle osittaisfunktiolle f : N n N on primitiivirekursiiviset funktiot g : N n+1 N ja h : N N, joille pätee f = h µg Todistus Sivuutetaan.
Yhteys rekursiivisiin kieliin ja Määritelmä Olkoon merkistö Σ = {0,..., n 1}. Tällöin voidaan esittää mielivaltainen merkkijono c 0... c m Σ yksikäsitteisesti ei-negatiivisena kokonaislukuna 4 [c 0... c m ] = m i=0 c i n i. Kielen A Σ (Gödel-numeroitu) karakteristinen funktio on kuvaus f : N {0, 1}, jolle A = { w Σ f ([w]) = 1 }. 4 Tämä on merkkijonojen eräs Gödel-numerointi.
Määritelmä jatkuu Kieli A Σ on primitiivirekursiivinen, jos sen karakteristinen funktio on primitiivirekursiivinen. Kieli A Σ on µ-rekursiivinen, jos sen karakteristinen funktio (joka ei ole osittaisfunktio) on µ-rekursiivinen. Kieli A Σ + on µ-rekursiivisesti lueteltava jos ja vain jos se on tyhjä tai on olemassa µ-rekursiivinen funktio f : N N, jolle A = { w Σ k N: f (n) = [w] } pätee. ja Lause 1. Kieli on µ-rekursiivinen jos ja vain jos se on rekursiivinen. 2. Kieli on µ-rekursiivisesti lueteltava jos ja vain jos se on rekursiivisesti lueteltava.
ja Alun perin Alonzo Churchin malli mekaaniselle laskennalle, nykyisin käyttössä ohjelmointikielten teoriassa. Kieli laskentasääntöineen, joka kuvaa funktioiden rakentamista ja kutsumista eikä mitään muuta. λx E tarkoittaa lauseketta E tulkittuna x:n funktioksi. λx x on identiteettifunktio λx c on vakiofunktio, jonka arvo on aina c fx tarkoittaa funktion f kutsua argumentilla x (λx x) c saa arvokseen c Puhtaassa lambda-laskennossa ei ole mitään muuta, käytännössä yleensä laajennetaan esim. aritmetiikalla
Lambdakieli ja Määritelmä Lambdakieli määritellään seuraavalla moniselitteisellä kontekstittomalla kieliopilla: T x T λx T T T T T (U) abstraktio applikaatio Välikemerkin T merkkijonot ovat termejä määritellään T = { w T w}. Päätemerkkejä ovat x (joka edustaa muuttujia) sekä λ, ( ja ). Operaattorit on lueteltu yllä laskevassa presedenssijärjestyksessä. Applikaatio assosioi vasemmalle, abstraktio oikealle.
Vapaat ja sidotut muuttujat ja Abstraktio λx t sitoo (engl. binds) muuttujan x. Muuttujaa, joka on jonkin abstraktion sitoma, sanotaan sidotuksi muuttujaksi (engl. bound variable). Muuttuja esiintyy vapaana (engl. occurs free) lambdatermissä, jos ainakin sen yksi esiintymä ei ole sitä sitovan abstraktion sisällä. Vapaana esiintyvää muuttujaa sanotaan myös vapaaksi muuttujaksi (engl. free variable) 5. Termin t vapaiden muuttujien joukkoa merkitään FV(t). 5 I am not a number, I am a free variable!
Korvaus ja 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ä: x[x := u] = u x[y := u] = x (t v)[x := u] = t[x := u] v[x := u] (λx t)[x := u] = λx t (λx t)[y := u] = λx t[y := u] x FV(u) missä y = x.
α- ja β-ekvivalenssit ja t ja u ovat α-ekvivalentit, jos ne eroavat vain sidottujen muuttujien nimissä. Jatkossa samastetaan α-ekvivalentit termit toisiinsa. Termi, joka on muotoa (λx t) u on β-redeksi. Määritellään β-sievennys operaatioksi, jossa termiin sisältyvä β-redeksi (λx t) u muutetaan muotoon t[x := u]. Kaksi termiä ovat β-ekvivalentit, jos kummastakin voidaan päästä (mahdollisesti tyhjällä) jonolla β-sievennyksiä samaan (α-ekvivalenttiin) termiin. Merkitään β-ekvivalenssia = β.
Church Rosser ja Määritelmä Lambdatermi on normaalimuodossa, jos se ei sisällä yhtään β-redeksiä. Lause (Church Rosser) Jos t = β u ja t = β u pätevät, niin on olemassa termi v jolle pätee u = β v ja u = β v. u β t β u β v β
Esimerkkejä ja 0 λf λxx s λnλf λx(f (nx)) p n i λx 1 λx n x i Y = λf (λx(f (xx)))(λx(f (xx)))
Suhde Turingin koneisiin ja 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.
Kirjallisuutta ja Stephen Cole Kleene: Introduction to Metamathematics. Groningen: Wolthers Noordhoff & North-Holland, 1971. H. P. Barendregt: The Lambda Calculus: Its Syntax and Semantics. Revised edition. Amsterdam: Elsevier, 1984.