+ All Categories
Home > Documents > Paradigme de programare - Cursuri Automatica si...

Paradigme de programare - Cursuri Automatica si...

Date post: 05-Jan-2020
Category:
Upload: others
View: 4 times
Download: 1 times
Share this document with a friend
58
Paradigme de programare Paradigme de programare 2010-2011, semestrul 2 Curs 2
Transcript
Page 1: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

Paradigme de programareParadigme de programare2010-2011, semestrul 2

Curs 2

Page 2: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

CuprinsCuprins

� Teza lui Church� Calcul lambda – sintaxa si semantica

operationala� Functii curry/uncurry� Functii curry/uncurry� Forme normale� Teorema Church – Rosser� Strategii de evaluare

Page 3: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

Teza lui ChurchTeza lui Church

� Orice calcul efectiv poate fimodelat in calcul lambda (prinfunctii recursive)

Page 4: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

Teza ChurchTeza Church--TuringTuring� orice definitie adecvata a calculabilitatii

efective se va dovedi echivalenta cu definitiile propuse de Church, respectiv Turing

� definitia lui Turing a avut un impact mai � definitia lui Turing a avut un impact mai mare intrucat propunea un model de masina pe care sa se execute algoritmii

� in acelasi timp, reprezentarea numarului2 in calcul lambda arata in felul urmator:

Page 5: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

Modele de calculabilitateModele de calculabilitate

� Masina Turing (programare imperativa)� Masina Lambda (programare functionala)� Masina algoritmica Markov (programare

asociativa)� Masina de calcul cu FOL (programare

logica)

Toate modelele sunt echivalente intre ele (aceleasi functii sunt calculabile in oricare din ele).

Page 6: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

Calcul LambdaCalcul Lambda� Inventat de Alonzo Church in 1932 ca un formalism

matematic menit sa descrie comportamentul functiilor

� Nu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii, insa si-a gasit aplicatiisemnificative in programaresemnificative in programare

� Limbaje bazate pe calcul lambda: Lisp, Scheme, Haskell, ML (intreaga programare functionala)

Page 7: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

λλ--expresiaexpresia

Sintaxa:e ≡ x variabila

| λx.e functie (unara, anonima)

| (e e) aplicatie| (e e) aplicatie

parametru corpul functiei

formal

parametru efectiv

Page 8: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

λλ--expresiaexpresia

Semantica:(λx.e1 e2) = functia cu parametrul

formal x si corpul e1, aplicata asupra lui e2lui e2

� pentru evaluare se substituie x cu e2 in corpul e1, se evalueaza e1 si se intoarcerezultatul

� se noteaza e1[e2/x]

Page 9: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

λλ--expresiiexpresii -- exempleexemple

λx.x(x y)λx. λy.(x y)(λx.x a)(λx.x a)(λx.y a)(λx.x λx.y)

Page 10: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

λλ--expresiiexpresii -- exempleexemple

λx.x functia identitate(x y)λx. λy.(x y)(λx.x a)(λx.x a)(λx.y a)(λx.x λx.y)

Page 11: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

λλ--expresiiexpresii -- exempleexemple

λx.x(x y) aplicatia lui x asupra lui yλx. λy.(x y)(λx.x a)(λx.x a)(λx.y a)(λx.x λx.y)

Page 12: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

λλ--expresiiexpresii -- exempleexemple

λx.x(x y)λx. λy.(x y) o functie de un parametru

x care intoarce o alta functiede un parametru y care ilaplica pe x asupra lui y

(λx.x a)(λx.y a)(λx.x λx.y)

Page 13: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

λλ--expresiiexpresii -- exempleexemple

λx.x(x y)λx. λy.(x y)(λx.x a) functia identitate aplicata(λx.x a) functia identitate aplicata

asupra lui a (se vaevalua la a)

(λx.y a)(λx.x λx.y)

Page 14: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

λλ--expresiiexpresii -- exempleexemple

λx.x(x y)λx. λy.(x y)(λx.x a)(λx.x a)(λx.y a) functia cu parametrul

formal x si corpul y,aplicata asupra lui a(se va evalua la y)

(λx.x λx.y)

Page 15: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

λλ--expresiiexpresii -- exempleexemple

λx.x(x y)λx. λy.(x y)(λx.x a)(λx.x a)(λx.y a)(λx.x λx.y) functia identitate aplicata

asupra functiei cu parametrul formal x si corpul y (=> λx.y)

Page 16: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

AparitiiAparitii ale unei variabile intrale unei variabile intr--o o λλ--expresieexpresie

Fie o variabila x si o aparitie xn a sa intr-o λ-expresie E.

Ex: λx.(x λy.x) s-ar putea rescrie caλx1.(x2 λy.x3) dpdv al aparitiilor lui x.

Page 17: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

AparitieAparitie legatalegata

xn este legata in E daca:� E=...λxn.e… x = variabila de legare

xn = aparitia care “leaga”� E=…λx.e… si x apare in e� E=…λx.e… si xn apare in e

Ex: λx.(x λy.x)

Aici toate aparitiile lui x sunt legate.

Page 18: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

AparitieAparitie liberalibera

O aparitie care nu este legata in E este libera in E.

Ex: Ex: E = λx.(y λy.(x (y z)))E = (x λx.(λx.y λy.(x z)))

Page 19: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

AtentieAtentie!!

Notiunea de aparitie libera/legata are sens in cadrul unei expresii.

Ex: Ex: E = λx.(y λy.(x (y z))) =notatie λx.eOrice aparitie a lui x e legata in E.In schimb, in e, aparitia lui x este libera!e = (y λy.(x (y z)))

Page 20: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

ExercitiiExercitii

(x λy.x)(y λy.x)λz.((+ z) x)(λx. λy.(x y) y)(λx. λy.(x y) y)

Page 21: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

ExercitiiExercitii

(x λy.x)(y λy.x)λz.((+ z) x)(λx. λy.(x y) y)(λx. λy.(x y) y)

Page 22: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

ExercitiiExercitii

(x λy.x)(y λy.x)λz.((+ z) x)(λx. λy.(x y) y)(λx. λy.(x y) y)

Page 23: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

ExercitiiExercitii

(x λy.x)(y λy.x)λz.((+ z) x)(λx. λy.(x y) y)(λx. λy.(x y) y)

Page 24: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

ExercitiiExercitii

(x λy.x)(y λy.x)λz.((+ z) x)(λx. λy.(x y) y)(λx. λy.(x y) y)

Page 25: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

Variabila legata/liberaVariabila legata/libera

O variabila x este legata intr-o λ-expresie E daca toate aparitiile ei sunt legate.

Variabilele legate suntVariabilele legate suntlegate fedeles!

O variabila care nu e legata intr-o λ-expresie e libera in acea λ-expresie.

Page 26: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

ExempleExemple

(x λy.x)(y λy.x)λz.((+ z) x)(λx.λy.(x y) y)(λx.λy.(x y) y)

Obs: Si aici, notiunea are sens in cadrul unei expresii. Daca luam doar o parte din expresie, felul variabilei se poate schimba.

Page 27: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

ExempleExemple

E = (λx.λy.(x y) y) =notatie (λx.e y)x e legata in E.y e libera in E.

Dar in e = λy.(x y)?O imagine face cat 1000 de cuvinte.E exact pe dos!

Page 28: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

“Algoritm” de determinare a “Algoritm” de determinare a variabilelor legate/liberevariabilelor legate/libere

BV(x) =

BV(λx.e) =

BV((e1 e2)) =

FV(x) =

FV(λx.e) =

FV((e1 e2)) =

BV = bound variables FV = free variables

Page 29: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

“Algoritm” de determinare a “Algoritm” de determinare a variabilelor legate/liberevariabilelor legate/libere

BV(x) = Ø

BV(λx.e) = {x} U BV(e)

BV((e1 e2)) =

BV(e ) U BV(e ) \

FV(x) =

FV(λx.e) =

FV((e1 e2)) =

BV(e1) U BV(e2) \(FV(e1) ∩ BV(e2)) \

(FV(e2) ∩ BV(e1))

BV = bound variables FV = free variables

Page 30: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

“Algoritm” de determinare a “Algoritm” de determinare a variabilelor legate/liberevariabilelor legate/libere

BV(x) = Ø

BV(λx.e) = {x} U BV(e)

BV((e1 e2)) =

BV(e ) U BV(e ) \

FV(x) = {x}

FV(λx.e) = FV(e) \ {x}

FV((e1 e2)) =

FV(e ) U FV(e )BV(e1) U BV(e2) \(FV(e1) ∩ BV(e2)) \

(FV(e2) ∩ BV(e1))

BV = bound variables

FV(e1) U FV(e2)

FV = free variables

Page 31: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

ββ--redexredex si si ββ--reducerereducere

β-redex = λ-expresie de forma (λx.e1 e2)

β-reducere = efectuarea calcululuiβ-reducere = efectuarea calculului(λx.e1 e2) →β e1[e2/x]

Ex:(λx.λy.(x y) y) este un β-redex.

Page 32: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

Problema cu Problema cu ββ--reducereareducereaEx1:(λx.x t) →β x[t/x] = t (perfect!)

Ex2:(λx.λy.(x y) y) →(λx.λy.(x y) y) →β

λy.(x y)[y/x] = λy.(y y) (oooops!)

Nu asta voiam sa se intample! Voiam sa obtinem o functie care il aplica pe y asupra oricarui argument cu care va fi vreodata apelata functia. Acum orice argument este aplicat asupra lui insusi.

Page 33: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

Mai clar, ce se Mai clar, ce se intamplaintampla? De ? De unde apare problema?unde apare problema?

La o β-reducere (λx.e1 e2) →β e1[e2/x]

inlocuiesc aparitiile libere are lui x in e1cu e2.cu e2.

Variabilele libere din e2 se pot trezi legate in e1!

Page 34: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

SolutiaSolutia: : αα--conversiaconversiaIdeea: numele parametrului formal nu conteaza, deci

il putem reboteza.

α-conversie = rebotezarea sistematica a variabilelor legate dintr-o λ-expresie a.i. ele sa nu coincida cu variabilele libere din parametrul efectiv pe care variabilele libere din parametrul efectiv pe care aplicam expresia. ( λx.e1 →α λy.e1[y/x] , unde y nu era libera in e1 )

Ex:(λx.λy.(x y) y) →α (λx.λz.(x z) y) →β

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

Page 35: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

ObservatieObservatieDe ce la o β-reducere (λx.e1 e2) →β e1[e2/x] inlocuiesc

aparitiile libere are lui x in e1 cu e2?

Ex:(λx.λy.(x (y λx.x)) t) trebuie sa devina(λx.λy.(x (y λx.x)) t) trebuie sa devina

λy.(t (y λx.x)).

Functia identitate ramane functia identitateoricum ii zicem parametrului formal, ceea ce trebuie sa devina t este primul x, iar acea aparitie (nu variabila!) e libera in e1, chiar daca e legata in (λx.e1 e2).

Page 36: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

NotatiiNotatii

Pas de reducere:→β o →α se noteaza→

Secventa de reducere:Secventa de reducere:→*

Page 37: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

ExercitiuExercitiu

(λx.(x z) λz.λx.(z x))

Page 38: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

ExercitiuExercitiu

(λx.(x z) λz.λx.(z x)) →α

(λx.(x z) λt.λx.(t x))

Page 39: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

ExercitiuExercitiu

(λx.(x z) λz.λx.(z x)) →α

(λx.(x z) λt.λx.(t x)) →β

(λt.λx.(t x) z)

Page 40: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

ExercitiuExercitiu

(λx.(x z) λz.λx.(z x)) →α

(λx.(x z) λt.λx.(t x)) →β

(λt.λx.(t x) z) →β

λx.(z x)λx.(z x)

Page 41: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

ZaharelZaharel sintacticsintactic

� λx1. λx2. λx3. … λxn.e se noteazaλx1 x2 x3 … xn .e

� (…(λx1. λx2. … λxn.e p1) p2) … pm) � (…(λx1. λx2. … λxn.e p1) p2) … pm) se noteaza(λx1 x2 … xn .e p1 p2 … pm)

Noi stim ca e vorba de functii unare si de aplicatiile lor.

Page 42: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

FunctiiFunctii curry/curry/uncurryuncurry

Ati observat apelul:(λx1 x2 … xn.e p1 p2 … pm)

Numarul de parametri formali nu coincide cu numarul de parametri efectivi. Se poate una numarul de parametri efectivi. Se poate una ca asta?

DA! Se poate, iar rezultatul unui astfel de apel este o functie de restul de parametri (formali).

Page 43: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

FunctiiFunctii curry/curry/uncurryuncurry

Functia curry� isi ia parametrii pe rand� poate fi aplicata partial (doar pe o parte

din parametri) – rezultand o noua functiedin parametri) – rezultand o noua functie� (λx1 x2 … xn.e p1 p2 … pm) →*

λxm+1 xm+2 … xn.e[p1/x1, p2/x2,…pm/xm]

Functia uncurry� Isi ia obligatoriu toti parametrii deodata

Page 44: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

Exemplu (in Scheme)Exemplu (in Scheme)

Sa urmarim impreuna cate o functiecurry/uncurry pentru adunarea a 2 numere…

… si altele.

Page 45: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

FunctiiFunctii curry curry -- concluziiconcluzii

� Functii curry reutilizare de cod� Sunt suportate de majoritatea

limbajelor functionale� Desi nu exista nici un motiv ca � Desi nu exista nici un motiv ca

celelalte limbaje sa nu le aiba, in general nu le au

Page 46: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

Forme normaleForme normale

O λ-expresie e in forma normala = nu mai contine niciun β-redex.

� Are orice λ-expresie o forma normala?� Are orice λ-expresie o forma normala?� Daca o λ-expresie admite o forma

normala, pot garanta gasirea ei?� Secvente distincte de reducere pot

duce la forme normale distincte?

Page 47: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

ObservatieObservatie

� raspunsurile la toate intrebarile de mai sus ar trebui sa devina evidente daca ne gandim ca avem de-a face cu un ne gandim ca avem de-a face cu un model de calculabilitate: lambda-expresiile sunt practic programe capabile sa ruleze pe o ipotetica masina Lambda

Page 48: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

Are orice Are orice λλ--expresieexpresie o forma normala?o forma normala?

NU.

Ex:(λx.(x x) λx.(x x)) →(λx.(x x) λx.(x x)) →?

Page 49: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

λλ--expresiiexpresii (i)reductibile(i)reductibile

(λx.(x x) λx.(x x)) →(λx.(x x) λx.(x x)) →(λx.(x x) λx.(x x)) →……

λ-expresie reductibila = admite o secventafinita de reducere care se termina cu o forma normala

Altfel: ireductibila

Page 50: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

Daca o Daca o λλ--expresieexpresie admite o forma admite o forma normala, pot garanta normala, pot garanta gasireagasirea ei?ei?

DA.

Ex:E = (λx.(x x) λx.(x x))E1 = (λx.(x x) λx.(x x))E2 = (λx.y E1) → y

Daca incepeam sa reduc in interiorul E1nu mai terminam niciodata.

Page 51: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

Teorema Teorema normalizariinormalizarii

Daca o λ-expresie este reductibila, atunci voi ajunge la forma ei normala aplicand reducere stanga->dreapta(reducand mereu cel mai din stanga(reducand mereu cel mai din stangaβ-redex)

Page 52: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

SecventeSecvente distincte de reducere pot duce distincte de reducere pot duce la forme normale distincte?la forme normale distincte?NU.

Lema caroului (the diamond lemma)e → a a → d

Daca si atunci ∃∃∃∃ d a.i. siDaca si atunci ∃∃∃∃ d a.i. sie → b b → d

a

/ \

/ \

e d

\ /

\ /

b

Page 53: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

Teorema Teorema ChurchChurch--RosserRosser

e →* a a →* d Daca si atunci ∃∃∃∃ d a.i. si

e →* b b →* d

Se demonstreaza cu ajutorul lemei caroului.

Corolar: Daca o λ-expresie este reductibila, atunci forma normala este unica.

Page 54: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

Strategii de evaluareStrategii de evaluare

= reguli de evaluare a expresiilor intr-un limbaj de programare

2 mari categorii:2 mari categorii:� Strategii stricte� Strategii nestricte

Page 55: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

Evaluare/Evaluare/functiefunctie stricta/nestrictastricta/nestricta

Evaluare stricta = argumentele unei functiisunt evaluate la apel (inainte ca functia sa fie aplicata)

Evaluare nestricta = argumentele unei functiiEvaluare nestricta = argumentele unei functiinu sunt evaluate pana ce valoarea lor nu e efectiv necesara undeva in corpul functiei

Functie stricta/nestricta = functie care isievalueaza strict/nestrict argumentele

Page 56: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

In practicaIn practica

� Limbajele care sunt stricte tind sa aibasi cateva functii cu evaluare nestricta

� Ex: Scheme (if, and, or)

Page 57: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

Strategii stricteStrategii stricte� Evaluare aplicativa: la intalnirea unui redex

(λx. e1 e2), mai intai se reduce e2 cat de mult se poate

� Call by value: argumentul e evaluat inaintede a fi pasat functiei; functiei i se da o copie de a fi pasat functiei; functiei i se da o copie a valorii rezultate in urma evaluarii (Pascal, C, Java, Scheme, Ocaml etc)

� Call by reference: functiei i se paseaza o referinta la argument; in principiu asta inseamna ca il poate modifica (Perl, Visual Basic; C simuleaza cu ajutorul pointerilor)

Page 58: Paradigme de programare - Cursuri Automatica si Calculatoareandrei.clubcisco.ro/cursuri/f/f-sym/2pp/cb/curs2.pdfNu a reusit sa inlocuiasca teoria multimilor ca fundament al matematicii,

Strategii nestricteStrategii nestricte� Evaluare normala: evaluare stanga-

>dreapta; difera de call by name prin aceea ca face evaluari in corpul functiilor incaneaplicate

� Call by name: argumentele nu se � Call by name: argumentele nu se evalueaza deloc, se transmit ca atare si, daca e nevoie de ele, se reevalueaza de fiecare data cand e nevoie (lent dar sigur)

� Call by need: un call by name in care prima evaluare stocheaza rezultatul intr-un cache(va fi luat de acolo cand va mai fi nevoie de el) (Haskell, R)


Recommended