340 likes | 507 Views
Lambda kalkulus. A -kifejezések nyelvének szimbólumait két halmazzal adhatjuk meg:. C= { c, c', c'', ... } konstansok végtelen ábécéje V= { v, v', v'', ... } változók végtelen ábécéje. További szimbólumok a ( ) zárójelek és a szimbólum. A -kifejezések induktív definíciója :.
E N D
A -kifejezések nyelvének szimbólumait két halmazzal adhatjuk meg: • C={c, c', c'', ...} konstansok végtelen ábécéje • V={v, v', v'', ...} változók végtelen ábécéje. További szimbólumok a ()zárójelek és a szimbólum.
A -kifejezések induktív definíciója : Ha x egy változó, M egy -kifejezés, akkor (xM) egy újabb -kifejezés. Ez a művelet az ún. (függvény)absztrakció, x a függvény paramétere, M a függvény törzse. Ez egyben egy kvantoros művelet, a (xM) kifejezésben a kvantor, x a kvantoros előtag, és M a kvantoros előtag hatásköre. Ha M és N-kifejezések, akkor (MN) is az. Ez egy kétoperandusú művelet, az ún. (függvény) alkalmazás vagy (függvény) applikáció. Szokásos műveleti jele a pont (mint szorzásjel) vagy a szóköz, de legtöbbször a műveleti jelet elhagyják. Ezen utóbbit követjük mi is. Minden konstans szimbólum egyben -kifejezés is. Minden változó szimbólum egyben -kifejezés is. A -kifejezések halmazát -val jelöljük.
Ugyanez B-N-Formában : konstans ::c | konstans' változó ::v | változó' -kifejezés ::konstans | változó | -kifejezés -kifejezés | változó -kifejezés Ugyanez a definíció absztrakt szintaxist használva : C | V | | V
Egyszerűnek nevezünk egy -kifejezést, ha nem tartalmaz konstansokat. Egy -kifejezésben azt a változóelőfordulást, amely egy kvantoros előtagban vagy egy vele megegyező változójú kvantoros előtag hatáskörében van, kötött változóelőfordulásnaknevezzük. Mindazok a válto-zóelőfordulások, amelyek nem kötöttek, szabadok. Azokat a változókat, amelyeknek egy adott -kifeje-zésben van szabad előfordulása, a kifejezés paramé-tereinek nevezzük. Azt a -kifejezést, amelynek nincs paramétere, zárt -kifejezésnek vagy kombi-nátornak nevezzük.
Jelölési konvenciók: • c, d, e, ... tetszőleges konstansokat jelölnek • x, y, z, ... tetszőleges változókat jelölnek • L, M, N, … tetszőleges -kifejezéseket jelölnek • M1M2M3...Mmaz (...((M1M2) M3)...Mm) kifejezést jelöli • x1x2...xn.M az (x1(x2...(xnM))) kifejezést jelöli • x1...xn.M1M2...Mmaz (x1...(xn(...(M1M2)...Mm))) kifejezést jelöli • A külső zárójelek elhagyhatók.
Például az első oszlopban lévő kifejezések a második oszlopban lévő -kifejezéseket jelölik: x x xc (xc) x.xc (x(xc)) yx.xc (y(x(xc))) (x.xc)y ((x(xc))y) x.xx.x (x(x(xx))) xyz.x(yz) (x(y(z(x(yz)))))
A -kalkulus M=N alakú egyenlőségek kalkulusa. Axiómái: Kötött változók szabályos átjelölése(-helyettesítés): () x.M = y.M[xy] Azt mondjuk, hogy két kifejezés kongruens (jele: ), ha -konverzióval egymásba átvihetők. A -kalkulus alapaxiómája (-helyettesítés): () (x.M)N M[xN], ahol a jobb oldal a változó szabályos helyettesítését jelöli.
Logikai axióma és levezetési szabályok (a szabá-lyokban a megszokott törtvonal helyett a jel szerepel) : • M=M • M=NN=M • M=N, N=LM=L • M=NML=NL, LM=LN • M=Nx.Mx.N • Ha a -kalkulusban M=N levezethető, ennek jele | M=N, vagy röviden M=N , akkor azt mondjuk, hogy M és N egymásba -kovertálhatóak.
Ebben a szemantikában (a Herbrand-interpretáci-ókhoz hasonlóan) a formális kifejezések halmaza, azaz esetünkben a halmaz az alaphalmaz. A változók és konstansok ebből a halmazból vehetik fel értéküket. • Egy -n értelmezett bináris reláció kompatibili-tási reláció, ha • M N ML NL, LM LN, x.M x.N • kongruencia reláció, ha ekvivalencia és kompati-bilitási reláció, redukció reláció, ha reflexív, tranzitív és kompatibilitási reláció.
A -helyettesítés kompatibilis lezártját egylé-péses -redukciónak (jele ), a redukciós lezártját -redukciónak (jele ), a -redukció ekvivalencia lezártját -konvertál-hatósági relációnak (jele =) nevezzük.
-redexnek nevezzük a kifejezések (x.M)N alakú részkifejezéseit. Ha egy kifejezés nem tartalmaz -redexet akkor -normál formájú-nak nevezzük. Ha M=N, és N -normál formájú, akkor N az M -normál formája. Tétel : Ha M-normál formájú, és MN, akkor MN. Tétel : (Church-Rosser) Ha MN1, MN2, akkor van olyan N3, hogy N1N3, N2N3 .
Következmény: Ha M= N, akkor van olyan L, hogy ML, NL . Következmény: Ha N az M -normál formája, akkor MN. Következmény: Minden -kifejezésnek legfeljebb egy -normál formája van. Az =(x.xx)(x.xx) -kifejezésnek nincs -normál formája.
Tétel :A -kalkulus helyes, azaz ha | M=N, akkor M= N. Informálisan egy kifejezés kiszámítása a kifejezés -normalizálását jelenti.
Stratégiák A redexben szereplő kvantorjelet a redex főszimbólumának nevezzük. A redexek egymás-hoz viszonyított helyét a főszimbólumok helye határozza meg. Lusta kiértékelés: minden lépésben a legbalol-dalibb redexet redukáljuk. Tétel : Ha egy kifejezésnek van normál formája akkor a lusta kiértékeléssel eljutunk hozzá. Mohó kiértékelés: előbb az argumentumokat normalizáljuk, csak azután helyettesítjük.
truexy.x • falsexy.y • ifpqr.pqr • if true A B (pqr.pqr) true A B • true A B (xy.x) A B A • Curch-számok: • 0fx.x • 1fx.fx • 2fx.f(fx) • 3fx.f(f(fx)) • ...
zero x.x (true false) true • zero 2 (x.x (true false) true) (2) • 2 (true false) true • (fx.f(fx)) (true false) true • (true false) ((true false) true) = • ((xy.x) false) ((true false) true) false • succ nfx.nf(fx) • succ 2 (nfx.nf(fx)) 2 fx.2 f(fx) • fx.(fx.f(fx)) f (fx) = fx.f(f(fx)) = 3
B yz.z(succ(y true))(y true) C z.z 0 0 pred n.n B C false xyz.x(yz)
pred 3 (n.n B C false) 3 3 B C false B (B(B C)) false (yz.z(succ(y true))(y true)) (B(B C)) false false (succ(B(B C)true)) (B(B C)true) (xy.y) (succ(B(B C)true)) (B(B C)true) B(B C) true (yz.z(succ(y true))(y true)) (B C) true true (succ(B C true)) (B C true) (xy.x) (succ(B C true)) (B C true) succ(B C true) succ((yz.z(succ(y true)) (y true)) C true) succ(true(succ(C true)) (C true)) succ((xy.x)(succ(C true)) (C true)) succ(succ(C true)) succ(succ((z.z 0 0) true)) succ(succ(true 0 0)) succ(succ((xy.x) 0 0)) succ(succ(0)) 2
2 3 xyz.x(yz) 2 3 z.2(3 z) z.2((fx.f(f(fx)))z) z.2(x.z(z(zx))) z.(fx.f(fx)) (x.z(z(zx))) z.(x.(x.z(z(zx))) ((x.z(z(zx))) x)) zx.(x.z(z(zx))) ((x.z(z(zx))) x) zx.(x.z(z(zx))) (z(z(zx))) zx.z(z(z(z(z(zx)))))) fx.f(f(f(f(f(fx))))) 6
Rekurzió fac n.if (zero n) 1 (n(fac(pred n))) A fac függvény a F függvény fixpontja, ahol F fn.if (zero n) 1 (n(f(pred n))) AA Turing-féle fixpont kombinátor, ahol A xy.y(xxy) Ha X AAG, akkor GX G(AAG) (xy.y(xxy)) AG AAG X fac F
fac 3 F 3 A A F 3 (xy.y(xxy)) A F 3 F(A A F) 3 F(A A F) 3 F( F) 3 F fac 3 (fn.if (zero n)1(n(f(pred n)))) fac3 if(zero 3) 1 (3(fac(pred 3))) if false 1 (3(fac 2)) 3 (fac 2) 3 (2 (fac 1)) 3 (2 (1 (fac 0))) 3 (2 (1 ( F 0))) 3 (2 (1 (A A F 0))) 3 (2 (1 ((xy.y(xxy)) A F 0))) 3 (2 (1 (F fac 0))) 3(2(1((fn.if(zeron)1(n(f(predn))))fac0))) 3 (2 (1 (if (zero 0) 1 (0 (fac(pred 0)))))) 3 (2 (1 1)) 6
Teljes háló egy olyan D=(D,) féligrendezett halmaz, amelyre teljesül, hogy minden részhalmazának van pontos alsó és felső korlátja. A továbbiakban D, D', D'' stb. teljes hálókat jelölnek.
A D teljes háló egy XD részhalmaza irányított, ha nem üres, és bármely két elemének létezik Xbeli közös felső korlátja. Egy f :DD' leképezés folytonos, ha bármely XD irányított részhalmazra teljesül, hogy f(sup(X))=sup(f(X)). Folytonos függvények egyben monotonok.
Jelölje [ DD' ] a D-t D'-be képező folytonos függvények halmazát. Legyen definíció szerint f g, ha minden dD-re f(d) g(d) teljesül. Ezzel a féligrendezéssel [ DD' ] is teljes háló.
D a D'szűkítése (jele: D D'), ha léteznek az F :D'D és G :DD' folytonos leképezések úgy, hogy F o G = idD , azaz F(G(d)) d . D reflexív, ha[ DD ] D.
Legyen D egy reflexív halmaz, éslegyenek F, G olyan folytonos leképezések, hogy F : D[DD] és G : [DD]D, és F o G = idD . Legyen :VD egy értékelés. Jelölje (x:=d) azt a ' :VD értékelést, amelyre igaz, hogy'(y) = (y), ha y x, és '(x) = d.
Adott D és mellett jelölje az M • -kifejezésinterpretációját [M]D , • amelynek induktív definícióját az alábbi táblázat tartalmazza: • M[M]D • x (x) • NP(F([N]D))([P]D) • x.N G(dD.[N]D(x:=d))
Ha minden értékelés mellett [M]D= [N]Dteljesül, akkor azt mondjuk, hogy az M=Nigaz D-ben, jele D|= M=N . Tétel : Ha D reflexív, akkor D a lambda kalkulus egy helyes modellje, azaz ha | M=N, akkor D|= M=N.
Tétel : Létezik reflexív halmaz. • Bizonyítás : Legyen A egy halmaz. Definiáljuk a Bnsorozatot a következő módon: • B0 =A • Bn+1=Bn(,b) bBn és Bn és véges. • Legyen B=nBn , és DA =P(B) ={x| x B}. • Megmutatható, hogy az • F(x)(y) = {b | y. (,b)x} és G(f) = {(,b)x}| bf()} • függvények által a DAhalmaz reflexív.