Lambda calculus n n 20 30 te roky
Lambda calculus n n 20. -30. -te roky formalizácia matematiky, logiky 1932 – skúmanie funkcií, základy matematiky n n n λ-calul ako formalizácia výpočtu n n Alonzo Church Haskell Curry charakterizácia rekurzívnych funkcií najmenší programovací jazyk iný model pre výpočet Turingovho stroja 60. te roky jazyk Lisp
2+3=5 n rovnosť dvoch výrazov n n ale jeden má zložitejšiu štruktúru 5=5 nepokrýva proces výpočtu 2+3 n dosadenie argumentov, aplikovanie sčítania x+3 n n n výraz funkcia - abstrakcia n x -> x+3, λx(x+3) n int f (int x) { return x+3; } n f = λx(x+3) funkcia – aplikácia n f(7)
Syntax L je λ-term n x je premenná (spočítateľná množina premenných) L : : = x | (L L) | (λx L) n n (L L) je aplikácia (funkcie) (λx L) je λ-abstrakcia definujúca funkciu s argumentom x a telom L
Príklady λ-termov n n n (λx x) (λx y) (λx (x x))) (λy (λx (x x)))
Konvencie n malé písmená označujú premenné: x, y, x 1, x 2, … veľké písmená označujú λ-termy: M, N, … vonkajšie zátvorky nepíšeme n symbol. nahradzuje (, zodpovedajúca ) chýba n n n vnorené abstrakcie majú asociativitu vpravo n n (λx x) -> λx. x (λx (x x)) -> λx. xx ((λx (x x))) -> (λx. xx) (λy (λx (x x))) -> λy. λx. xx -> λyx. xx vnorené aplikácie majú asociativitu vľavo n (((λxyz. yz) a) b) c) -> (λxyz. yz)abc
Dôležité príklady n n n K = λxy. x I = λx. x S = λxyz. xz(yz) = λx. xx = = (λx. x x) 3 = λx. xxx
Voľná premenná, podterm n voľná premenná λ-termu n Free(x) = x Free(λx. M) = Free(M) – {x} n Free(M N) = Free(M) U Free(N) n viazaná premenná nie je voľná: n n λx. xy – y je voľná, x je viazaná podtermy λ-termu n n n Subt(x) = x Subt(λx. M) = Subt(M) U {λx. M} Subt(M N) = Subt(M) U Subt(N) U { (M N) }
Príklady n λxy. xz n n λx. (λy. y)(x (λy. y)) n n x je viazaná, z voľná, y sa nenachádza v Subt(λxy. xz) má dva výskyty podtermu (λy. y) x (y z) Subt( w(x (y z)) ) n n ale x(y z) Subt( w x(y z)) ) neplatí, lebo Subt( w x(y z)) ) obsahuje n w x(y z), w x, y z, w, x, z, y
Substitúcia n ak sa na to ide najivne: n n n (λ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] y[x: M] (A B)[x: M] (λx. B)[x: M] (λy. B)[x: M] = M = y = (A[x: M] B[x: M]) = (λx. B) = λ z. (B[y: z][x: M]) ak x Free(B), y Free(M) pričom z nie je voľné v B alebo M = λy. B[x: M]
Príklady n (λx. zx)[z: y] = n n λx. ((zx)[z: y]) = λx. (z[z: y]x[z: y]) = λx. (yx) (λy. zy)[z: y] = n n n (λ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] n n n λ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: n I M = x n (λx. x) M ->β x[x: M] = M n K M N = M n (λxy. x)MN ->β(λy. M)N ->β M n S M N P = M P (N P) 3 n λxyz. xz(yz) MNP -> β MP(NP) n S K K = I n λxyz. xz(yz) (λxy. x) ->β n λyz. (λxy. x)z(yz) (λxy. x) ->β n λyz. (λxy. x)z((λxy. x)z) ->β n λz. (λy. z)(λy. z) ->β n λz. z = I K = λxy. x I = λx. x S = λxyz. xz(yz)
Vlastnosti β-redukcie = λx. xx n = n 3 = λx. xxx nekonečná sekvencia n n puchnúca sekvencia n n ->β … 3 3 ->β 3 3 3 3 nejednoznačný výsledok n n KI ->β I ale aj KI ->β …
M Church-Rosser vlastnosť pre ľub. trojicu termov M, M 1, M 2 M ->*M 1 a M ->*M 2 existuje R, že M 1 ->*R a M 2 ->*R * M 1 * M 2 * takých, že R * Dôsledok: ak term má normálnu formu vzhľadom na ->, potom je jednoznačne určená ? je ->β Church-Rosser ?
Cvičenie Definujte základné funkcie pre interpreter λ-kalkuku: n free n subterm n substitute n β-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é: n n n (λx. x y) (λy. y) λx. λy. z (λz. z (λx. y)) (λx. λy. x z (y z)) (λx. y (λy. y)) 2) redukujte: n (λx. λy. x (λz. y z)) (((λx. λy. y) 8) (λx. (λy. y) x)) n (λh. (λ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)
- Slides: 18