lambda calculus

18
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

Upload: kylee-vang

Post on 31-Dec-2015

23 views

Category:

Documents


4 download

DESCRIPTION

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 c harakteri zácia rekurzívnych funkcií najmenší programovací jazyk iný model pre výpočet Turingovho stroja - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 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

Page 2: Lambda calculus

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)

Page 3: Lambda calculus

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

Page 4: Lambda calculus

Príklady λ-termov

(λx x) (λx y) (λx (x x)) ((λx (x x)) (λx (x x))) (λy (λx (x x)))

Page 5: Lambda calculus

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

Page 6: Lambda calculus

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

Page 7: Lambda calculus

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) }

Page 8: Lambda calculus

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

Page 9: Lambda calculus

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]

Page 10: Lambda calculus

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

Page 11: Lambda calculus

α-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

Page 12: Lambda calculus

β-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)

Page 13: Lambda calculus

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 ->β …

Page 14: Lambda calculus

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

* *

**

Page 15: Lambda calculus

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)

Page 16: Lambda calculus

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)

Page 17: Lambda calculus

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

Page 18: Lambda calculus

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