1 Prof. Dr. Martine De Cock academiejaar Lambdarekenen
2 Turing-machine toestand symbool nieuwe toestand nieuw symbool richting a1a1R a0b1R b1b1R b0c0L c1s0L a10110 a10110 b11110 b11110 b11110 c11110 s11100
3 Lambdacalculus (Church) ( x.( y.x(yy))( y.x(yy)))( zxy.(( x.(x( xy.x))) x)y(z(( x.(x( xy.y)))x)(( x.(( xyz.zxy)( xy.y) x))y)))(( xyz.zxy)( xy.y)( x.x))(( xyz.zxy)( xy.y)(( xyz.zxy)( xy.y)( x.x))) optellen van 1 en 2 programma (inclusief invoer): ( xyz.zxy)( xy.y)(( xyz.zxy) ( xy.y)(( xyz.zxy)( xy.y)( x.x))) uitvoer:
4 Overzicht Lambdatermen Substitutie Rekenregels Lambdacombinatoren Programmeren in lambdacalculus
5 Lambdatermen vmet v in V (M N) met M in en N in ( v.M) met v in V en M in 3 GEDAANTES verz. van alle uitdrukkingen
6 Haakjes en vernestelde abstr. buitenste haakjes applicatie is linksassociatief vernestelde abstractie invloed abstractor: naar rechts x.(xy) x.(xy)) xy(xy) VOORNAAFSPRAAK x.xy x.(xy) xyz (xy)z x. y.xy xy.xy
7 Overzicht Lambdatermen Substitutie Rekenregels Lambdacombinatoren Programmeren in lambdacalculus
8 Vrij en gebonden verzameling van veranderlijken met vrij voorkomen in L voor v in V, M en N in
9 Substitutie voor v in V, M en N in met u niet vrij in M !
10 Overzicht Lambdatermen Substitutie Rekenregels Lambdacombinatoren Programmeren in lambdacalculus
11 Rekenregels voor v in V, M en N in conversie conversie voor v en w in V, M in en w niet vrij in M
12 conversie veranderlijken in abstractor verschillend veranderlijken vrij en gebonden verschillend vergemakkelijkt substitutie lambatermen zijn -congruent indien ze door -conversie in elkaar kunnen omgezet worden
13 redex en -normaalvorm Een -redex is een lambdaterm van de vorm ( v.M)N Een -normaalvorm is een lambdaterm waarin geen -redex voorkomt
14 Overzicht Lambdatermen Substitutie Rekenregels Lambdacombinatoren Programmeren in lambdacalculus
15 Lambdacombinatoren Een lambdacombinator (of gesloten term) is een lambdaterm die geen vrije voorkomens van veranderlijken bevat.
16 Overzicht Lambdatermen Substitutie Rekenregels Lambdacombinatoren Programmeren in lambdacalculus
17 Lambdacalculus (Church) ( x.( y.x(yy))( y.x(yy)))( zxy.(( x.(x( xy.x))) x)y(z(( x.(x( xy.y)))x)(( x.(( xyz.zxy)( xy.y) x))y)))(( xyz.zxy)( xy.y)( x.x))(( xyz.zxy)( xy.y)(( xyz.zxy)( xy.y)( x.x))) optellen van 1 en 2 programma (inclusief invoer): ( xyz.zxy)( xy.y)(( xyz.zxy) ( xy.y)(( xyz.zxy)( xy.y)( x.x))) uitvoer:
18 Waarheidswaarden Tru = K en Fls = TK Tru MN = M Fls MN = N Cons MN = z.zMN Cons MN Tru = M Cons MN Fls = N
19 Getallen 1 ( xyz.zxy) ( xy.y) ( x.x) 2 ( xyz.zxy) ( xy.y) (( xyz.zxy) ( xy.y) ( x.x)) 3 ( xyz.zxy) ( xy.y) (( xyz.zxy) ( xy.y) (( xyz.zxy) ( xy.y) ( x.x)))
20 Lijsten [] x.( xy.x) [t]( xyz.zxy)t( x.( xy.x)) [s,t]( xyz.zxy)s(( xyz.zxy)t( x.( xy.x))) koppel lege lijst
21 Recursie probleem opsplitsen in deelproblemen die analoog zijn maar gemakkelijker F is een fixpuntcombinator als M( F M) = F M voor elke lambdaterm M x.( y.x(yy)) ( y.x(yy)) (Curry)