Descărcați ca pdf sau txt
Descărcați ca pdf sau txt
Sunteți pe pagina 1din 26

Fundamentele limbajelor de programare

C02

Denisa Diaconescu
Traian S, erbănut, ă

Departamentul de Informatică, FMI, UB

1
Lambda calcul - elemente de bază
Lambda calcul

• Un model de calculabilitate

• Limbajele de programare funct, ională sunt extensii ale sale

• Un limbaj formal

• Expresiile din acest limbaj se numesc lambda termeni

• Vom defini reguli pentru a îi manipula

2
Lambda termeni

Fie V o mult, ime infinită de variabile, notate x , y , z , . . . .

Mult, imea lambda termenilor este dată de următoarea formă BNF:


lambda termen = variabilă
| aplicare
| abstractizare
M , N ::= x | (M N ) | (λx .M )

Example

• x, y, z • ((λx .x ) y ), ((λx .(x z )) y )


• (x y ), (y x ), (x (yx )) • (λf .(λx .(f (f x ))))
• (λx .x ), λx .(x y ), λz .(x y ) • (λx .x ) (λx .x )

3
Funct, ii anonime în Haskell

lambda termen = variabilă


| aplicare
| abstractizare
M , N ::= x | (M N ) | (λx .M )

În Haskell, \ e folosit în locul simbolului λ s, i −> în locul punctului:


λx .x ∗ x este \x -> x * x
λx .x > 0 este \x -> x > 0

4
Lambda termeni - definit, ie alternativă

Fie V o mult, ime infinită de variabile, notate x , y , z , . . . .

Fie A un alfabet format din elementele din V , s, i simbolurile speciale


”(”, ”)”, ”λ” si ”.”
Fie A ∗ mult, imea tuturor cuvintelor finite pentru alfabetul A .

Mult, imea lambda termenilor este cea mai mică submult, ime Λ ⊆ A ∗
astfel încât:
[Variabilă] V ⊆ Λ
[Aplicare] dacă M , N ∈ Λ atunci (M N ) ∈ Λ
[Abstractizare] dacă x ∈ V s, i M ∈ Λ atunci (λx .M ) ∈ Λ

5
Convent, ii

• Se elimină parantezele exterioare

• Aplicarea este asociativă la stânga


• M N P înseamnă (M N ) P
• f x y z înseamnă ((f x ) y ) z

• Corpul abstractizării (partea de după punct) se extinde la dreapta


cât se poate
• λx .M N înseamnă λx .(M N ), nu (λx .M ) N

• Mai mult, i λ pot fi comprimat, i


• λxyz .M este o abreviere pentru λx .λy .λz .M

Aceste convent, ii nu afectează definit, ia lambda termenilor.

6
Exercit, ii

Exercit, iu. Scriet, i termenii de mai jos cu cât mai put, ine paranteze s, i
folosind convent, iile de mai sus, fără a schimba sensul termenilor:

1. (λx .(λy .(λz .((x z )(y z )))))

2. (((a b ) (c d )) ((e f ) (g h )))

Exercit, iu. Adăugat, i parantezele în termenii de mai jos astfel încât


să nu le schimbat, i sensul:

1. x x x x

2. λx .x λy .y

7
Exercit, ii

Exercit, iu. Scriet, i termenii de mai jos cu cât mai put, ine paranteze s, i
folosind convent, iile de mai sus, fără a schimba sensul termenilor:

1. (λx .(λy .(λz .((x z )(y z ))))) Corect: λxyz .x z (y z )

2. (((a b ) (c d )) ((e f ) (g h )))

Exercit, iu. Adăugat, i parantezele în termenii de mai jos astfel încât


să nu le schimbat, i sensul:

1. x x x x

2. λx .x λy .y

7
Exercit, ii

Exercit, iu. Scriet, i termenii de mai jos cu cât mai put, ine paranteze s, i
folosind convent, iile de mai sus, fără a schimba sensul termenilor:

1. (λx .(λy .(λz .((x z )(y z ))))) Corect: λxyz .x z (y z )

2. (((a b ) (c d )) ((e f ) (g h ))) Corect: a b (c d ) (e f (g h ))

Exercit, iu. Adăugat, i parantezele în termenii de mai jos astfel încât


să nu le schimbat, i sensul:

1. x x x x

2. λx .x λy .y

7
Exercit, ii

Exercit, iu. Scriet, i termenii de mai jos cu cât mai put, ine paranteze s, i
folosind convent, iile de mai sus, fără a schimba sensul termenilor:

1. (λx .(λy .(λz .((x z )(y z ))))) Corect: λxyz .x z (y z )

2. (((a b ) (c d )) ((e f ) (g h ))) Corect: a b (c d ) (e f (g h ))

Exercit, iu. Adăugat, i parantezele în termenii de mai jos astfel încât


să nu le schimbat, i sensul:

1. x x x x Corect: (((x x ) x ) x )

2. λx .x λy .y

7
Exercit, ii

Exercit, iu. Scriet, i termenii de mai jos cu cât mai put, ine paranteze s, i
folosind convent, iile de mai sus, fără a schimba sensul termenilor:

1. (λx .(λy .(λz .((x z )(y z ))))) Corect: λxyz .x z (y z )

2. (((a b ) (c d )) ((e f ) (g h ))) Corect: a b (c d ) (e f (g h ))

Exercit, iu. Adăugat, i parantezele în termenii de mai jos astfel încât


să nu le schimbat, i sensul:

1. x x x x Corect: (((x x ) x ) x )

2. λx .x λy .y Corect: (λx .(x (λy .y )))

7
Variabile libere s, i variabile legate

• λ_._ se numes, te operator de legare (binder)


• x din λx ._ se numes, te variabilă de legare (binding)
• N din λx .N se numes, te domeniul (scope) de legare a lui x
• toate aparit, iile lui x în N sunt legate
• O aparit, ie care nu este legată se numes, te liberă.
• Un termen fără variable libere se numes, te închis (closed).
• Un termen închis se mai numes, te s, i combinator.

De exemplu, în termenul
M ≡ (λx .xy ) (λy .yz )
• x este legată
• z este liberă
• y are s, i o aparit, ie legată, s, i una liberă
• mult, imea variabilelor libere ale lui M este {y , z }
8
Variabile libere

Mult, imea variabilelor libere dintr-un termen M este notată FV (M ) s, i


este definită formal prin:

FV (x ) = {x }
FV (M N ) = FV (M ) ∪ FV (N )
FV (λx .M ) = FV (M ) \ {x }

Exemplu de definit, ie recursivă pe termeni. Adică în definit, ia lui


FV (M ) am presupus că am definit deja FV (N ) pentru tot, i
subtermenii lui M.
Example

• FV (λx .x y ) = FV (x y ) \ {x } = (FV (x ) ∪ FV (y )) \ {x }
= ({x } ∪ {y }) \ {x } = {y }
• FV (x λx .x y ) = {x , y }
9
Redenumire de variabile

Ce înseamnă să redenumim o variabilă într-un termen?

Dacă x , y sunt variabile s, i M este un termen, M hy /x i este rezultatul


obt, inut după redenumirea lui x cu y în M.

x hy /x i ≡ y ,
z hy /x i ≡ z , dacă x , z
(M N )hy /x i ≡ (M hy /x i) (N hy /x i)
(λx .M )hy /x i ≡ λy .(M hy /x i)
(λz .M )hy /x i ≡ λz .(M hy /x i), dacă x , z

Observat, i că acest tip de redenumire înlocuies, te toate aparit, iile lui x
cu y, indiferent dacă este liberă, legată, sau de legare.

Se foloses, te doar în cazuri în care y nu apare deja în M.


10
α-echivalent, ă

Ce înseamnă că doi termeni sunt egali,


modulo redenumire de variabile legate?

Definim α-echivalent, a ca fiind cea mai mică relat, ie de congruent, ă


=α pe mult, imea lambda termenilor, astfel încât pentru orice termen
M s, i orice variabilă y care nu apare în M, avem
λx .M =α λy .(M hy /x i)

11
α-echivalent, ă

α-echivalent, a =α este cea mai mică relat, ie pe lambda termeni care


satisface regulile:

Convent, ia Barendregt:
variabilele legate sunt redenumite pentru a fi distincte.

12
Substitut, ii

Vrem să substituim variabile cu lambda termeni.

M [N /x ] este rezultatul obt, inut după înlocuirea lui x cu N în M.

Trebuie să fim atent, i la următoarele cazuri:

1. Vrem să înlocuim doar variabile libere.


Numele variabilelor legate este considerat imaterial, s, i nu ar trebui
să afecteze rezultatul substitut, iei.
De exemplu, x (λxy .x )[N /x ] ar trebui să fie N (λxy .x ),
nu N (λxy .N ) sau N (λNy .N ).

13
Substitut, ii

2. Nu vrem să legăm variabile libere neintent, ionat.

De exemplu, fie M ≡ λx .y x s, i N ≡ λz .x z.

Variabila x este legată în M s, i liberă în N.

Ce ar trebui să obt, inem dacă am substitui y cu N în M?


Naiv, ne-am gândi la

M [N /y ] = (λx .y x )[N /y ] = λx .N x = λx .(λz .x z ) x.

Totus, i, nu este ceea ce am vrea să obt, inem, deoarece x este liber
în N, iar în timpul "substitut, iei" a devenit legată.

Trebuie să luăm în calcul că x-ul legat din M nu este x-ul liber din N,
s, i de aceea redenumim variabilele legate înainte de substitut, ie.

M [N /y ] = (λx 0 .y x 0 )[N /y ] = λx 0 .N x 0 = λx 0 .(λz .x z ) x 0 .


14
Substitut, ii

Substitut, ia aparit, iilor libere ale lui x cu N în M, notată cu M [N /x ],


este definită prin:

x [N /x ] ≡ N
y [N /x ] ≡ y dacă x , y
(M P )[N /x ] ≡ (M [N /x ]) (P [N /x ])
(λx .M )[N /x ] ≡ λx .M
(λy .M )[N /x ] ≡ λy .(M [N /x ]) dacă x , y s, i y < FV (N )
(λy .M )[N /x ] ≡ λy 0 .(M hy 0 /y i[N /x ]) dacă x , y, y ∈ FV (N )
s, i y 0 variabilă nouă

Deaorece nu specificăm ce variabilă nouă alegem,


spunem că substitut, ia este bine-definită modulo α-echivalent, e.

15
Exercit, ii

Exercit, iu. Calculat, i următoarele substitut, ii:

1. (λz .x )[y /x ]

2. (λy .x )[y /x ]

3. (λy .x )[(λz .z w )/x ]

16
Exercit, ii

Exercit, iu. Calculat, i următoarele substitut, ii:

1. (λz .x )[y /x ] Corect: λz .y

2. (λy .x )[y /x ]

3. (λy .x )[(λz .z w )/x ]

16
Exercit, ii

Exercit, iu. Calculat, i următoarele substitut, ii:

1. (λz .x )[y /x ] Corect: λz .y

2. (λy .x )[y /x ] Corect: λy 0 .y, Gres, it: λy .y

3. (λy .x )[(λz .z w )/x ]

16
Exercit, ii

Exercit, iu. Calculat, i următoarele substitut, ii:

1. (λz .x )[y /x ] Corect: λz .y

2. (λy .x )[y /x ] Corect: λy 0 .y, Gres, it: λy .y

3. (λy .x )[(λz .z w )/x ] Corect: λyz .zw

16
Quiz time!

https://tinyurl.com/C02-Quiz1

17
Pe săptămâna viitoare!

18

S-ar putea să vă placă și