Download - Lambda calculus
Lambda calculus 20.-30.-te roky formalizácia matematiky,
logiky 1932 – skúmanie funkcií, základy matematiky
Alonzo Church Haskell Curry
λ-calul ako formalizácia výpočtu charakterizácia rekurzívnych funkcií najmenší programovací jazyk iný model pre výpočet Turingovho stroja
60.te roky jazyk Lisp
2+3=5 rovnosť dvoch výrazov
ale jeden má zložitejšiu štruktúru 5=5 nepokrýva proces výpočtu 2+3
dosadenie argumentov, aplikovanie sčítania
x+3 výraz funkcia - abstrakcia
x -> x+3, λx(x+3) int f (int x) { return x+3;} f = λx(x+3)
funkcia – aplikácia f(7)
SyntaxL je λ-term x je premenná (spočítateľná množina
premenných)
L ::= x | (L L) | (λx L)
(L L) je aplikácia (funkcie) (λx L) je λ-abstrakcia definujúca funkciu s
argumentom x a telom L
Príklady λ-termov
(λx x) (λx y) (λx (x x)) ((λx (x x)) (λx (x x))) (λy (λx (x x)))
Konvencie malé písmená označujú premenné: x, y, x1, x2, … veľké písmená označujú λ-termy: M, N, … vonkajšie zátvorky nepíšeme
symbol . nahradzuje (, zodpovedajúca ) chýba (λx x) -> λx.x (λx (x x)) -> λx.xx ((λx (x x)) (λx (x x))) -> (λx.xx)(λx.xx)
vnorené abstrakcie majú asociativitu vpravo (λy (λx (x x))) -> λy.λx.xx -> λyx.xx
vnorené aplikácie majú asociativitu vľavo (((λxyz.yz) a) b) c) -> (λxyz.yz)abc
Dôležité príklady
K = λxy.x I = λx.x S = λxyz.xz(yz)
= λx.xx = = (λx.x x)(λx.x x) 3 = λx.xxx
Voľná premenná, podterm voľná premenná λ-termu
Free(x) = x Free(λx.M) = Free(M) – {x} Free(M N) = Free(M) U Free(N)
viazaná premenná nie je voľná: λx.xy – y je voľná, x je viazaná
podtermy λ-termu Subt(x) = x Subt(λx.M) = Subt(M) U {λx.M} Subt(M N) = Subt(M) U Subt(N) U { (M N) }
Príklady λxy.xz
x je viazaná, z voľná, y sa nenachádza v Subt(λxy.xz)
λx.(λy.y)(x (λy.y)) má dva výskyty podtermu (λy.y)
x (y z) Subt( w(x (y z)) ) ale x(y z) Subt( w x(y z)) ) neplatí, lebo Subt( w x(y z)) ) obsahuje
w x(y z), w x, y z, w, x, z, y
Substitúcia ak sa na to ide najivne:
(λx.zx)[z:y] -> λx.yx -- rovnaké vstupy, rôzne výsledky
(λy.zy)[z:y] -> λy.yy
substitúcia N[x:M] x[x:M] = M
y[x:M] = y(A B)[x:M] = (A[x:M] B[x:M]) (λx.B)[x:M] = (λx.B) (λy.B)[x:M] = λ z.(B[y:z][x:M]) ak xFree(B), yFree(M) pričom z nie je voľné v B alebo M(λy.B)[x:M] = λy.B[x:M]
Príklady
(λx.zx)[z:y] = λx.((zx)[z:y]) = λx.(z[z:y]x[z:y]) = λx.(yx)
(λy.zy)[z:y] = (λw.(zy)[y:w])[z:y] = (λw.(z[y:w]y[y:w]))[z:y] = (λw.(zw))[z:y] = λw.(zw)[z:y] = λw.(z[z:y]w[z:y]) = λw.(yw)
najivne(λx.zx)[z:y] -> λx.yx(λy.zy)[z:y] -> λy.yy
α-konverzia
λx.M =α λy.M[x:y]
λx.M je premenovaním viazanej premennej λy.M[x:y], ak y nie je voľná v M
=α je relácia ekvivalencie =α kongruencia na λ termoch
β-redukcia(λ x.B) e ->β B[x:e]
Príklad: I M = x
(λx.x) M ->β x[x:M] = M K M N = M
(λxy.x)MN ->β(λy.M)N ->β M S M N P = M P (N P)
λxyz.xz(yz) MNP ->3β MP(NP)
S K K = I λxyz.xz(yz) (λxy.x) (λxy.x) ->β λyz.(λxy.x)z(yz) (λxy.x) ->β λyz.(λxy.x)z((λxy.x)z) ->β λz.(λy.z)((λxy.x)z) ->β λz.(λy.z)(λy.z) ->β λz.z = I
K = λxy.xI = λx.xS = λxyz.xz(yz)
Vlastnosti β-redukcie = λx.xx = 3 = λx.xxx
nekonečná sekvencia ->β ->β ->β …
puchnúca sekvencia 3 3 ->β 3 3 3 ->β 3 3 3 3
nejednoznačný výsledok KI ->β I ale aj KI ->β KI ->β KI ->β …
Church-Rosser vlastnosť
pre ľub.trojicu termov M, M1, M2 takých, že M ->*M1 a M ->*M2
existuje R, že M1 ->*R a M2 ->*R
Dôsledok: ak term má normálnu formu vzhľadom na -
>, potom je jednoznačne určená
? je ->β Church-Rosser ?
M
M1 M2
R
* *
**
CvičenieDefinujte základné funkcie pre interpreter λ-kalkuku:
free subterm substitute β-redukcia
navrhovaná reprezentácia (kľudne si zvoľte inú):data LExp = LAMBDA String LExp | – abstrakcia ID String | – premenná LExp [LExp] | – aplikácia,
zovšeobecnená CON String | – konštanta, built-in fcia CN Integer – int.konštanta deriving(Show, Read, Eq)
Cvičenie (použite váš tool)
1) určite voľné a viazané premenné: (λx.x y) (λy.y) λx.λy.z (λz.z (λx.y)) (λx.λy.x z (y z)) (λx.y (λy.y))
2) redukujte: (λx.λy.x (λz.y z)) (((λx. λy.y) 8) (λx.(λy.y) x)) (λh.(λx.h (x x)) (λx.h (x x))) ((λa.λb.a) (+ 1 5))
3) Nech F = (λt.t t) (λf.λx.f (f x)).Vyhodnoťte F succ 0, succ = λx. (+ x 1)
Riešenia
(λx.λy.x (λz.y z)) (((λx. λy.y) 8) (λx.(λy.y) x)) ->β (λx.λy.x (λz.y z)) ((λy.y) (λx.(λy.y) x)) ->β (λx.λy.x (λz.y z)) ((λy.y) (λy.y) ) ->β (λx.λy.x (λz.y z)) (λy.y) ->β λy.(λz.y z) (λy.y) ->β (λz.(λy.y) z) ->β (λz.z) ->β I
Riešenie
(λh.(λx.h (x x)) (λx.h (x x))) ((λa.λb.a) (+ 1 5)) ->β (λx.((λa.λb.a) (+ 1 5)) (x x)) (λx.((λa.λb.a) (+ 1 5)) (x x)) -
>β ((λa.λb.a) (+ 1 5)) (
(λx.((λa.λb.a) (+ 1 5)) (x x)) (λx.((λa.λb.a) (+ 1 5)) (x x))) ->β
(λb.(+ 1 5) ((λx.((λa.λb.a) (+ 1 5)) (x x)) (λx.((λa.λb.a) (+ 1 5)) (x x)))
->β
(+ 1 5) ->β 6