Paradigme de Programare

Documente similare
Cursul 1: Introducere Paradigme de Programare Conf. dr. ing. Andrei Olaru Departamentul de Calculatoare 2019

Paradigme de Programare

Paradigme de programare

Paradigme de Programare

LOGICA MATEMATICA SI COMPUTATIONALA Sem. I,

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

ExamView Pro - Untitled.tst

Prelegerea 3 În această prelegere vom învăţa despre: Clase speciale de latici: complementate. modulare, metrice, distributive şi 3.1 Semi-distributivi

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

Prelegerea 4 În această prelegere vom învăţa despre: Algebre booleene; Funcţii booleene; Mintermi şi cuburi n - dimensionale. 4.1 Definirea algebrelor

PowerPoint Presentation

Logică și structuri discrete Logică propozițională Marius Minea marius/curs/lsd/ 3 noiembrie 2014

Analiză statică Analiza fluxului de date 23 octombrie 2014

Analiză de flux de date 29 octombrie 2012

Coman Marinela Furnizor program formare acreditat: CCD BRĂILA Denumire program: INFORMATICĂ ŞI TIC PENTRU GIMNAZIU Clasa a V-a Categorie: 1; Tip de co

Limbaje de ordinul I LOGICA DE ORDINUL I Un limbaj L de ordinul I este format din: o mulţime numărabilă V = {v n n N} de variabile; conectorii şi ; pa

Probleme date la examenul de logică matematică şi computaţională. Partea a II-a Claudia MUREŞAN Universitatea din Bucureşti Facultatea de Matematică ş

Şiruri de numere reale Facultatea de Hidrotehnică Universitatea Tehnică Gheorghe Asachi Iaşi, 2015 Analiză Matematică Lucian Maticiuc 1 / 29

Logică și structuri discrete Relații. Funcții parțiale Marius Minea marius/curs/lsd/ 20 octombrie 2014

Facultatea de Matematică Anul II Master, Geometrie Algebrică Mulţimi algebrice ireductibile. Dimensiune 1 Mulţimi ireductibile Propoziţia 1.1. Fie X u

Microsoft Word - Mapa 0.doc

Retele Petri si Aplicatii

CURBE BÉZIER În CAGD se utilizează adesea curbele polinomiale, adică acele curbe definite de o parametrizare polinomială: C : [a, b] R 3 C(t) = (x(t),

Managementul Resurselor Umane

Microsoft Word - Curs_08.doc

Notiuni de algebra booleana

Cursul 7 Formula integrală a lui Cauchy Am demonstrat în cursul precedent că, dacă D C un domeniu simplu conex şi f : D C o funcţie olomorfă cu f cont

DOMENIUL: Matematica

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Microsoft Word - Algoritmi genetici.docx

Fâciu N. Maria-Ema CASA CORPULUI DIDACTIC BRĂILA PROGRAM DE FORMARE INFORMATICĂ ȘI TIC PENTRU GIMNAZIU CLASA A V-A SERIA 1 GRUPA 2 CURSANT: Fâciu N. M

Microsoft Word - cap1p4.doc

Limbaje Formale, Automate si Compilatoare

Probleme proiect TP BITPERM Implementați un algoritm care citește de la intrarea standard două numere naturale și scrie la ieșirea standard da

Microsoft Word - Curs_09.doc

Dorel LUCHIAN Gabriel POPA Adrian ZANOSCHI Gheorghe IUREA algebră geometrie clasa a VIII-a ediţia a V-a, revizuită mate 2000 standard EDITURA PARALELA

Capitole Speciale de Informatică Curs 4: Calculul scorurilor în un sistem complet de extragere a informaţiilor 18 octombrie 2018 Reamintim că în cursu

Microsoft Word - CarteC.doc

Microsoft Word - Curs1.docx

Elemente de aritmetica

Utilizare Internet

Baze de date Anul 2 Teorie Examen 1. Diagrama entitate/relatie si diagrama conceptuala (curs 2-5) 2. Arbore algebric si expresie algebrica (curs 6-10)

L4. TEOREMELE ALGEBREI BINARE. FUNCȚII LOGICE ELEMENTARE. OPERAȚII LOGICE PE BIT. SINTEZA FUNCȚIILOR LOGICE DIN TABELE DE ADEVĂR 1. Obiective Prin par

LUCRAREA 8 PROGRAMAREA NELINIARĂ ÎN REZOLVAREA PROBLEMELOR DIN ENERGETICĂ. METODE DE ORDINUL Aspecte generale Programarea neliniară are o foart

Cursul 8 Funcţii analitice Vom studia acum comportarea şirurilor şi seriilor de funcţii olomorfe, cu scopul de a dezvălui o proprietate esenţială a ac

COMENTARII FAZA JUDEŢEANĂ, 9 MARTIE 2013 Abstract. Personal comments on some of the problems presented at the District Round of the National Mathemati

PPSD

TEORIA MĂSURII Liviu C. Florescu Universitatea Al.I.Cuza, Facultatea de Matematică, Bd. Carol I, 11, R Iaşi, ROMANIA, e mail:

PROGRAMARE ORIENTATA PE OBIECTE

B

proiectarea bazelor de date

Raport Național

Microsoft PowerPoint - Prezentarea_programelor_de_studii_de_licenta_2019

Gheorghe IUREA Adrian ZANOSCHI algebră geometrie clasa a VII-a ediţia a V-a, revizuită mate 2000 standard EDITURA PARALELA 45 Matematică. Clasa a VII-

Limbaje de Programare Curs 6 – Functii de intrare-iesire

Microsoft Word - Curs_10.doc

E_d_Informatica_sp_MI_2015_bar_02_LRO

OPERATII DE PRELUCRAREA IMAGINILOR 1

MergedFile

Laborator 3

Logică și structuri discrete Mulțimi Casandra Holotescu

Curs 8: Tehnica divizării (I) Algoritmi si structuri de date - Curs 8 1

Cursul 12 (plan de curs) Integrale prime 1 Sisteme diferenţiale autonome. Spaţiul fazelor. Fie Ω R n o mulţime deschisă şi f : Ω R n R n o funcţie de

PowerPoint Presentation

ROMÂNIA MINISTERUL EDUCAŢIEI NAȚIONALE Domeniul fundamental: Matematică și știinţe ale naturii Domeniul de licenţă: Informatică Ciclu de studii: 1 Pro

Microsoft Word - Cap09_AutoorganizareSiEmergentaInSistemeleAdaptiveComplexe_grile.doc

Slide 1

Laborator 1 suport teoretic Mediul de dezvoltare Eclipse GLOSAR - Aplicaţie: program obţinut în urma aplicării operației BUILD asupra unui proiect (ve

G.I.S. Curs 3

INDICATORI AI REPARTIŢIEI DE FRECVENŢĂ

Distanţa euclidiană (indusă de norma euclidiană) (în R k ). Introducem în continuare o altă aplicaţie, de această dată pe produsul cartezian R k XR k,

Subiectul 1

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

Microsoft Word - Laborator 6 - Expresii Regulate IV.doc

FIŞA DISCIPLINEI

Microsoft Word - TIC5

D.Rusu, Teoria măsurii şi integrala Lebesgue 6 MĂSURA LEBESGUE Cursul 5 Teorema 6.26 Există submulţimi ale lui R care nu sunt măsurabile Lebesgue. Dem

Slide 1

Curs 10 Aplicaţii ale calculului diferenţial. Puncte de extrem 10.1 Diferenţiale de ordin superior S¼a trecem acum la de nirea diferenţialelor de ordi

Aggregating Data

E_d_Informatica_sp_SN_2014_bar_10_LRO

Raport Național

MD.09. Teoria stabilităţii 1

Microsoft Word - O problema cu bits.doc

Slide 1

Microsoft Word - Curs_07.doc

MergedFile

Guidelines on LGD estimates under downturn conditions_RO.docx

Microsoft Word - PCLP2_Curs_4_2019.doc

BCBA-BCaBA task list fourth edition romanian

Curs8

Aero-BCD, , Prof. L. Costache & M. Olteanu Notițe de Adrian Manea Seminar 5 Șiruri și serii de funcții. Serii de puteri 1 Șiruri de funcții D

Acest fișier conține rezumatul anumitor explicații prezente în Curs - privind Sintaxa GNY Totul este legat de Alf = alfabetul de neterminali/ unități

PAS cap. 2: Reprezentări rare p. 1/35 Prelucrarea avansată a semnalelor Capitolul 2: Reprezentări rare Bogdan Dumitrescu Facultatea de Automatică şi C

Top

08_03

PLAN DE ÎNVĂŢĂMÂNT

GHERCĂ MAGDA CASA CORPULUI DIDACTIC BRĂILA PORTOFOLIU EVALUARE INFORMATICĂ ȘI TIC PENTRU GIMNAZIU CLASA A V-A Neamț SERIA 1 GRUPA 1 CURSANT: GHERCĂ G

Transcriere:

Paradigme de Programare Conf. dr. ing. Andrei Olaru andrei.olaru@cs.pub.ro cs@andreiolaru.ro Departamentul de Calculatoare 2019 3 : 1 / 60

Cursul 3 Calcul Lambda 3 : 2 / 60

Cursul 3: Calcul Lambda 1 Introducere 2 Lambda-expresii 3 Reducere 4 Evaluare 5 Limbajul lambda-0 și incursiune în TDA 6 Racket vs. lambda-0 3 : 3 / 60

Introducere 3 : 4 / 60

Modele de calculabilitate De ce? ne punem problema dacă putem realiza un calcul sau nu pentru a demonstra trebuie să avem un model simplu al calculului (cum realizăm calculul, în mod formal). un model de calculabilitate trebuie să fie cât mai simplu, atât ca număr de operații disponibile cât și ca mode de construcție a valorilor. corectitudinea unui program se demonstrează mai ușor dacă limbajul de programare este mai apropiat de mașina teoretică (modelul abstract de calculabilitate). 3 : 5 / 60

Calculul Lambda λ Model de calculabilitate (Alonzo Church, 1932) introdus în cadrul cercetărilor asupra fundamentelor matematicii. [http://en.wikipedia.org/wiki/lambda_calculus] sistem formal pentru exprimarea calculului. Echivalent cu Mașina Turing (v. Teza Church-Turing) Axat pe conceptul matematic de funcție totul este o funcție 3 : 6 / 60

Aplicații ale calculului λ Aplicații importante în programare demonstrarea formală a corectitudinii programelor, datorită modelului simplu de execuție Baza teoretică a numeroase limbaje: LISP, Scheme, Haskell, ML, F#, Clean, Clojure, Scala, Erlang etc. 3 : 7 / 60

Lambda-expresii 3 : 8 / 60

λ-expresii Exemple 1 x variabila (numele) x Ex Exemplu 2 λ x.x funcția identitate 3 λx.λy.x funcție selector 4 (λ x.x y) aplicația funcției identitate asupra parametrului actual y 5 (λx.(x x) λx.x)? 3 : 9 / 60

λ-expresii Exemple 1 x variabila (numele) x Ex Exemplu 2 λ x.x funcția identitate 3 λx.λy.x funcție selector 4 (λ x.x y) aplicația funcției identitate asupra parametrului actual y 5 (λx.(x x) λx.x)? 3 : 9 / 60

λ-expresii Exemple 1 x variabila (numele) x Ex Exemplu 2 λ x.x funcția identitate 3 λx.λy.x funcție selector 4 (λ x.x y) aplicația funcției identitate asupra parametrului actual y 5 (λx.(x x) λx.x)? 3 : 9 / 60

λ-expresii Exemple 1 x variabila (numele) x Ex Exemplu 2 λ x.x funcția identitate 3 λx.λy.x funcție selector 4 (λ x.x y) aplicația funcției identitate asupra parametrului actual y 5 (λx.(x x) λx.x)? 3 : 9 / 60

λ-expresii Exemple 1 x variabila (numele) x Ex Exemplu 2 λ x.x funcția identitate 3 λx.λy.x funcție selector 4 (λ x.x y) aplicația funcției identitate asupra parametrului actual y 5 (λx.(x x) λx.x)? 3 : 9 / 60

λ-expresii Exemple 1 x variabila (numele) x Ex Exemplu 2 λ x.x funcția identitate 3 λx.λy.x funcție selector 4 (λ x.x y) aplicația funcției identitate asupra parametrului actual y 5 (λx.(x x) λx.x)? Intuitiv, evaluarea aplicației (λ x.x y) presupune substituția textuală a lui x, în corp, prin y rezultat y. 3 : 9 / 60

λ-expresii Definiție + λ-expresie Variabilă: o variabilă x este o λ-expresie; Funcție: dacă x este o variabilă și E este o λ-expresie, atunci λ x.e este o λ-expresie, reprezentând funcția anonimă, unară, cu parametrul formal x și corpul E; Aplicație: dacă F și A sunt λ-expresii, atunci (F A) este o λ-expresie, reprezentând aplicația expresiei F asupra parametrului actual A. 3 : 10 / 60

Evaluare Intuitiv ((λx.λy.x z) t) 3 : 11 / 60

Evaluare Intuitiv ( ( λx.λy.x z ) t) parametru formal parametru actual 3 : 11 / 60

Evaluare Intuitiv ( ( λx.λy.x z ) t) substituție (λy.z t) parametru formal parametru actual 3 : 11 / 60

Evaluare Intuitiv ( ( λx.λy.x z ) t) substituție ( λy.z t ) parametru formal parametru actual parametru formal parametru actual 3 : 11 / 60

Evaluare Intuitiv ( ( λx.λy.x z ) t) substituție ( λy.z t ) substituție z parametru formal parametru actual parametru formal parametru actual 3 : 11 / 60

Evaluare Intuitiv ( ( λx.λy.x z ) t) substituție ( λy.z t ) substituție z nu mai este nicio funcție de aplicat parametru formal parametru actual parametru formal parametru actual 3 : 11 / 60

Evaluare Intuitiv ( ( λx.λy.x z ) t) substituție ( λy.z t ) substituție z nu mai este nicio funcție de aplicat parametru formal parametru actual parametru formal parametru actual cum știm ce reducem, cum reducem, în ce ordine, și ce apariții ale variabilelor înlocuim? 3 : 11 / 60

Reducere 3 : 12 / 60

β-redex Cum arată (Formal, vedem mai târziu) β-redex: o λ-expresie de forma: (λx.e A) E λ-expresie este corpul funcției A λ-expresie este parametrul actual β-redexul se reduce la E [A/x] E cu toate aparițiile libere ale lui x din E înlocuite cu A prin substituție textuală. 3 : 13 / 60

Apariții ale variabilelor Legate vs libere + Apariție legată O apariție x n a unei variabile x este legată într-o expresie E dacă: E = λx.f sau E =... λx n.f... sau E =... λx.f... și x n apare în F. + Apariție liberă O apariție a unei variabile este liberă într-o expresie dacă nu este legată în acea expresie. Atenție! În raport cu o expresie dată! 3 : 14 / 60

Apariții ale variabilelor Mod de gândire O apariție legată în expresie este o apariție a parametrului formal al unei funcții definite în expresie, în corpul funcției; o apariție liberă este o apariție a parametrului formal al unei funcții definite în exteriorul expresiei, sau nu este parametru formal al niciunei funcții. x (λy. x λ x <2> apariție liberă z) apariție încă liberă, nu o leagă nimeni.(λy. x (λ x.(λy. x z) <2> }{{} corp λx 2 λ x.(λ x.(λy. x z) λ x leagă apariția x <2> x ) <3> z) x apariția x 3 este liberă este în exteriorul corpului funcției cu parametrul formal x (λx 2 ) ) λ x leagă apariția x <4> <3> <4> <2> <3> 3 : 15 / 60

Apariții ale variabilelor Mod de gândire O apariție legată în expresie este o apariție a parametrului formal al unei funcții definite în expresie, în corpul funcției; o apariție liberă este o apariție a parametrului formal al unei funcții definite în exteriorul expresiei, sau nu este parametru formal al niciunei funcții. x (λy. x λ x <2> apariție liberă z) apariție încă liberă, nu o leagă nimeni.(λy. x (λ x.(λy. x z) <2> }{{} corp λx 2 λ x.(λ x.(λy. x z) λ x leagă apariția x <2> x ) <3> z) x apariția x 3 este liberă este în exteriorul corpului funcției cu parametrul formal x (λx 2 ) ) λ x leagă apariția x <4> <3> <4> <2> <3> 3 : 15 / 60

Apariții ale variabilelor Mod de gândire O apariție legată în expresie este o apariție a parametrului formal al unei funcții definite în expresie, în corpul funcției; o apariție liberă este o apariție a parametrului formal al unei funcții definite în exteriorul expresiei, sau nu este parametru formal al niciunei funcții. x (λy. x λ x <2> apariție liberă z) apariție încă liberă, nu o leagă nimeni.(λy. x (λ x.(λy. x z) <2> }{{} corp λx 2 λ x.(λ x.(λy. x z) λ x leagă apariția x <2> x ) <3> z) x apariția x 3 este liberă este în exteriorul corpului funcției cu parametrul formal x (λx 2 ) ) λ x leagă apariția x <4> <3> <4> <2> <3> 3 : 15 / 60

Apariții ale variabilelor Mod de gândire O apariție legată în expresie este o apariție a parametrului formal al unei funcții definite în expresie, în corpul funcției; o apariție liberă este o apariție a parametrului formal al unei funcții definite în exteriorul expresiei, sau nu este parametru formal al niciunei funcții. x (λy. x λ x <2> apariție liberă z) apariție încă liberă, nu o leagă nimeni.(λy. x (λ x.(λy. x z) <2> }{{} corp λx 2 λ x.(λ x.(λy. x z) λ x leagă apariția x <2> x ) <3> z) x apariția x 3 este liberă este în exteriorul corpului funcției cu parametrul formal x (λx 2 ) ) λ x leagă apariția x <4> <3> <4> <2> <3> 3 : 15 / 60

Apariții ale variabilelor Mod de gândire O apariție legată în expresie este o apariție a parametrului formal al unei funcții definite în expresie, în corpul funcției; o apariție liberă este o apariție a parametrului formal al unei funcții definite în exteriorul expresiei, sau nu este parametru formal al niciunei funcții. x (λy. x λ x <2> apariție liberă z) apariție încă liberă, nu o leagă nimeni.(λy. x (λ x.(λy. x z) <2> }{{} corp λx 2 λ x.(λ x.(λy. x z) λ x leagă apariția x <2> x ) <3> z) x apariția x 3 este liberă este în exteriorul corpului funcției cu parametrul formal x (λx 2 ) ) λ x leagă apariția x <4> <3> <4> <2> <3> 3 : 15 / 60

Variabile Legate vs libere + O variabilă este legată într-o expresie dacă toate aparițiile sale sunt legate în acea expresie. + O variabilă este liberă într-o expresie dacă nu este legată în acea expresie i.e. dacă cel puțin o apariție a sa este liberă în acea expresie. Atenție! În raport cu o expresie dată! 3 : 16 / 60

Variabile și Apariții ale lor Exemplu 1 Ex Exemplu În expresia E = (λx.x x), evidențiem aparițiile lui x: (λ x ). x x <3> x <2> x. x <2> }{{} F, x <2> x <3> în E în F! în E și F în E 3 : 17 / 60

Variabile și Apariții ale lor Exemplu 1 Ex Exemplu În expresia E = (λx.x x), evidențiem aparițiile lui x: (λ x ). x x <3> x <2> x. x <2> }{{} F, x <2> x <3> legate în E în E în F! în E și F 3 : 17 / 60

Variabile și Apariții ale lor Exemplu 1 Ex Exemplu În expresia E = (λx.x x), evidențiem aparițiile lui x: (λ x ). x x <3> x <2> x. x <2> }{{} F x <3>, x <2> liberă în E legate în E în F! în E și F 3 : 17 / 60

Variabile și Apariții ale lor Exemplu 1 Ex Exemplu În expresia E = (λx.x x), evidențiem aparițiile lui x: (λ x ). x x <3> x <2> x. x <2> }{{} F x <3>, x <2> liberă în E legate în E liberă în F! în E și F 3 : 17 / 60

Variabile și Apariții ale lor Exemplu 1 Ex Exemplu În expresia E = (λx.x x), evidențiem aparițiile lui x: (λ x ). x x <3> x <2>. x <2> }{{} F x <3>, x <2> liberă în E legate în E liberă în F! x liberă în E și F 3 : 17 / 60

Ex Exemplu Variabile și apariții ale lor Exemplu 2 În expresia E = (λx.λz.(z x) (z y)), evidențiem aparițiile: (λ x.λ z.( z x ) ( z )). <3> <2> <2> } {{ } F, z x, x <2> y z x <2>, z <3>, z <2>, z în F <2> în E în F y în E x în E, în F y în E z în E, în F 3 : 18 / 60

Ex Exemplu Variabile și apariții ale lor Exemplu 2 În expresia E = (λx.λz.(z x) (z y)), evidențiem aparițiile: (λ x.λ z.( z x ) ( z )). <3> <2> <2> } {{ } F, z x, x <2> y z x <2>, z <3>, z <2>, z în F <2> în E în F y legate în E x în E, în F y în E z în E, în F 3 : 18 / 60

Ex Exemplu Variabile și apariții ale lor Exemplu 2 În expresia E = (λx.λz.(z x) (z y)), evidențiem aparițiile: (λ x.λ z.( z x ) ( z )). <3> <2> <2> } {{ } F, z x, x <2> y z x <2>, z <3>, z <2>, z <2> libere în E în F în F y legate în E x în E, în F y în E z în E, în F 3 : 18 / 60

Ex Exemplu Variabile și apariții ale lor Exemplu 2 În expresia E = (λx.λz.(z x) (z y)), evidențiem aparițiile: (λ x.λ z.( z x ) ( z )). <3> <2> <2> } {{ } F, z x, x <2> y z x <2>, z <3>, z <2>, z <2> libere în E legate în F în F y legate în E x în E, în F y în E z în E, în F 3 : 18 / 60

Ex Exemplu Variabile și apariții ale lor Exemplu 2 În expresia E = (λx.λz.(z x) (z y)), evidențiem aparițiile: (λ x.λ z.( z x ) ( z )). <3> <2> <2> } {{ } F, z x, x <2> y z x <2>, z <3>, z <2>, z <2> libere în E legate în F liberă în F y legate în E x în E, în F y în E z în E, în F 3 : 18 / 60

Ex Exemplu Variabile și apariții ale lor Exemplu 2 În expresia E = (λx.λz.(z x) (z y)), evidențiem aparițiile: (λ x.λ z.( z x ) ( z )). <3> <2> <2> } {{ } F, z x, x <2> y z x <2>, z <3>, z <2>, z <2> libere în E legate în F liberă în F y legate în E x legată în E, dar liberă în F y în E z în E, în F 3 : 18 / 60

Ex Exemplu Variabile și apariții ale lor Exemplu 2 În expresia E = (λx.λz.(z x) (z y)), evidențiem aparițiile: (λ x.λ z.( z x ) ( z )). <3> <2> <2> } {{ } F, z x, x <2> y z x <2>, z <3>, z <2>, z <2> libere în E legate în F liberă în F y legate în E x legată în E, dar liberă în F y liberă în E z în E, în F 3 : 18 / 60

Ex Exemplu Variabile și apariții ale lor Exemplu 2 În expresia E = (λx.λz.(z x) (z y)), evidențiem aparițiile: (λ x.λ z.( z x ) ( z )). <3> <2> <2> } {{ } F, z x, x <2> y z x <2>, z <3>, z <2>, z <2> libere în E legate în F liberă în F y legate în E x legată în E, dar liberă în F y liberă în E z liberă în E, dar legată în F 3 : 18 / 60

Determinarea variabilelor libere și legate O abordare formală Variabile libere (free variables) FV (x) = {x} FV (λx.e) = FV (E) \ {x} FV ((E 1 E 2 )) = FV (E 1 ) FV (E 2 ) Variabile legate (bound variables) BV (x) = /0 BV (λx.e) = BV (E) {x} BV ((E 1 E 2 )) = BV (E 1 ) \ FV (E 2 ) BV (E 2 ) \ FV (E 1 ) 3 : 19 / 60

Expresii închise + O expresie închisă este o expresie care nu conține variabile libere. Ex Exemplu (λx.x λx.λy.x) (λx.x a) Variabilele libere dintr-o λ-expresie pot sta pentru alte λ-expresii Înaintea evaluării, o expresie trebuie adusă la forma închisă. Procesul de înlocuire trebuie să se termine. 3 : 20 / 60

Expresii închise + O expresie închisă este o expresie care nu conține variabile libere. Ex Exemplu (λx.x λx.λy.x) închisă (λx.x a) Variabilele libere dintr-o λ-expresie pot sta pentru alte λ-expresii Înaintea evaluării, o expresie trebuie adusă la forma închisă. Procesul de înlocuire trebuie să se termine. 3 : 20 / 60

Expresii închise + O expresie închisă este o expresie care nu conține variabile libere. Ex Exemplu (λx.x λx.λy.x) închisă (λ x.x a) deschisă, deoarece a este liberă Variabilele libere dintr-o λ-expresie pot sta pentru alte λ-expresii Înaintea evaluării, o expresie trebuie adusă la forma închisă. Procesul de înlocuire trebuie să se termine. 3 : 20 / 60

β-reducere Definiție + β-reducere: Evaluarea expresiei (λx.e A), cu E și A λ-expresii, prin substituirea textuală a tuturor aparițiilor libere ale parametrului formal al funcției, x, din corpul acesteia, E, cu parametrul actual, A: (λx.e A) β E [A/x] + β-redex Expresia (λx.e A), cu E și A λ-expresii o expresie pe care se poate aplica β-reducerea. 3 : 21 / 60

β-reducere Exemple (λx.x y) β x [y/x] y Ex (λx.λx.x y) Exemplu (λx.λy.x y) 3 : 22 / 60

β-reducere Exemple (λx.x y) β x [y/x] y Ex (λx.λx.x y) β λx.x [y/x] λx.x Exemplu (λx.λy.x y) 3 : 22 / 60

β-reducere Exemple (λx.x y) β x [y/x] y Ex (λx.λx.x y) β λx.x [y/x] λx.x Exemplu (λx.λy.x y) β λy.x [y/x] λy.y 3 : 22 / 60

β-reducere Exemple (λx.x y) β x [y/x] y Ex (λx.λx.x y) β λx.x [y/x] λx.x Exemplu (λx.λy.x y) β λy.x [y/x] λy.y Greșit! Variabila liberă y devine legată, schimbându-și semnificația. λy (a).y (b) 3 : 22 / 60

β-reducere Exemple (λx.x y) β x [y/x] y Ex (λx.λx.x y) β λx.x [y/x] λx.x Exemplu (λx.λy.x y) β λy.x [y/x] λy.y Greșit! Variabila liberă y devine legată, schimbându-și semnificația. λy (a).y (b) Care este problema? 3 : 22 / 60

β-reducere Coliziuni Problemă: în expresia (λ x.e A): dacă variabilele libere din A nu au nume comune cu variabilele legate din E: FV(A) BV(E) = /0 reducere întotdeauna corectă dacă există variabilele libere din A care au nume comune cu variabilele legate din E: FV(A) BV(E) /0 reducere potențial greșită Soluție: redenumirea variabilelor legate din E, ce coincid cu cele libere din A α-conversie. 3 : 23 / 60

β-reducere Coliziuni Problemă: în expresia (λ x.e A): dacă variabilele libere din A nu au nume comune cu variabilele legate din E: FV(A) BV(E) = /0 reducere întotdeauna corectă dacă există variabilele libere din A care au nume comune cu variabilele legate din E: FV(A) BV(E) /0 reducere potențial greșită Soluție: redenumirea variabilelor legate din E, ce coincid cu cele libere din A α-conversie. Ex Exemplu (λx.λy.x y) α (λx.λz.x y) β λz.x [y/x] λz.y 3 : 23 / 60

α-conversie Definiție + α-conversie: Redenumirea sistematică a variabilelor legate dintr-o funcție: λx.e α λy.e [y/x]. Se impun două condiții. Ex Exemplu λx.y α λy.y [y/x] λy.y λx.λy.x α λy.λy.x [y/x] λy.λy.y 3 : 24 / 60

α-conversie Definiție + α-conversie: Redenumirea sistematică a variabilelor legate dintr-o funcție: λx.e α λy.e [y/x]. Se impun două condiții. Ex Exemplu λx.y α λy.y [y/x] λy.y Greșit! λx.λy.x α λy.λy.x [y/x] λy.λy.y 3 : 24 / 60

α-conversie Definiție + α-conversie: Redenumirea sistematică a variabilelor legate dintr-o funcție: λx.e α λy.e [y/x]. Se impun două condiții. Ex Exemplu λx.y α λy.y [y/x] λy.y Greșit! λx.λy.x α λy.λy.x [y/x] λy.λy.y Greșit! 3 : 24 / 60

α-conversie Definiție + α-conversie: Redenumirea sistematică a variabilelor legate dintr-o funcție: λx.e α λy.e [y/x]. Se impun două condiții. Ex Exemplu λx.y α λy.y [y/x] λy.y Greșit! λx.λy.x α λy.λy.x [y/x] λy.λy.y Greșit!. Condiții y nu este o variabilă liberă, existentă deja în E orice apariție liberă în E rămâne liberă în E [y/x] 3 : 24 / 60

α-conversie Exemple λx.(x y) α λz.(z y) Corect! Ex λx.λx.(x y) α λy.λx.(x y) Exemplu λx.λy.(y x) α λy.λy.(y y) λx.λy.(y y) α λy.λy.(y y) 3 : 25 / 60

α-conversie Exemple λx.(x y) α λz.(z y) Corect! Ex λx.λx.(x y) α λy.λx.(x y) Greșit! y este liberă în λx.(x y) Exemplu λx.λy.(y x) α λy.λy.(y y) λx.λy.(y y) α λy.λy.(y y) 3 : 25 / 60

α-conversie Exemple λx.(x y) α λz.(z y) Corect! Ex λx.λx.(x y) α λy.λx.(x y) Greșit! y este liberă în λx.(x y) Exemplu λx.λy.(y x) α λy.λy.(y y) Greșit! Apariția liberă a lui x din λy.(y x) devine legată, după substituire, în λy.(y y) λx.λy.(y y) α λy.λy.(y y) 3 : 25 / 60

α-conversie Exemple λx.(x y) α λz.(z y) Corect! Ex λx.λx.(x y) α λy.λx.(x y) Greșit! y este liberă în λx.(x y) Exemplu λx.λy.(y x) α λy.λy.(y y) Greșit! Apariția liberă a lui x din λy.(y x) devine legată, după substituire, în λy.(y y) λx.λy.(y y) α λy.λy.(y y) Corect! 3 : 25 / 60

Reducere Definiții + Pas de reducere: O secvență formată dintr-o α-conversie și o β-reducere, astfel încât a doua se produce fără coliziuni: E 1 E 2 E 1 α E 3 β E 2. + Secvență de reducere: Succesiune de zero sau mai mulți pași de reducere: E 1 E 2. Reprezintă un element din închiderea reflexiv-tranzitivă a relației. 3 : 26 / 60

Reducere Proprietăți. Reducere E 1 E 2 = E 1 E 2 un pas este o secvență E E zero pași formează o secvență E 1 E 2 E 2 E 3 E 1 E 3 tranzitivitate Ex Exemplu ((λx.λy.((y x) y) λx.x) (λz.(z y) λx.x) (λx.x y) y ((λx.λy.((y x) y) λx.x) y 3 : 27 / 60

Evaluare 3 : 28 / 60

Întrebări Pentru construcția unei mașini de calcul Dacă am vrea să construim o mașină de calcul care să aibă ca program o λ-expresie și să aibă ca operație de bază pasul de reducere, ne punem câteva întrebări: 1 Când se termină calculul? Se termină întotdeauna? 2 Dacă mai multe secvențe de reducere se termină, obținem întotdeauna același rezultat? 3 Comportamentul depinde de secvența de reducere? 4 Dacă rezultatul este unic, cum îl obținem? 3 : 29 / 60

Terminarea reducerii (reductibilitate) Exemplu și definiție Ex Exemplu Ω = (λx.(x x) λx.(x x)) (λx.(x x) λx.(x x))... Ω nu admite nicio secvență de reducere care se termină. 3 : 30 / 60

Terminarea reducerii (reductibilitate) Exemplu și definiție Ex Exemplu Ω = (λx.(x x) λx.(x x)) (λx.(x x) λx.(x x))... Ω nu admite nicio secvență de reducere care se termină. + Expresie reductibilă este o expresie care admite (cel puțin o) secvență de reducere care se termină. expresia Ω nu este reductibilă. 3 : 30 / 60

Secvențe de reducere și terminare Dar! Ex Exemplu E = (λx.y Ω) y sau E y sau E E y sau...... n y, n 0... 3 : 31 / 60

Secvențe de reducere și terminare Dar! Ex Exemplu E = (λx.y Ω) y sau E y sau E E y sau...... n y, n 0... E are o secvență de reducere care nu se termină; dar E are forma normală y E este reductibilă; lungimea secvențelor de reducere ale E este nemărginită. 3 : 31 / 60

Forme normale Cum știm că s-a terminat calculul? Calculul se termină atunci când expresia nu mai poate fi redusă expresia nu mai conține β-redecși. + Forma normală a unei expresii este o formă (la care se ajunge prin reducere, care nu mai conține β-redecși i.e. care nu mai poate fi redusă. 3 : 32 / 60

Forme normale Este necesar să mergem până la Forma Normală? + Forma normală funcțională FNF este o formă λx.f, în care F poate conține β-redecși. Ex Exemplu (λx.λy.(x y) λx.x) FNF λy.(λx.x y) FN λy.y FN a unei expresii închise este în mod necesar FNF. într-o FNF nu există o necesitate imediată de a evalua eventualii β-redecși interiori (funcția nu a fost încă aplicată). 3 : 33 / 60

Unicitatea formei normale Rezultate T Teorema Church-Rosser / diamantului Dacă E E 1 și E E 2, atunci există E 3 astfel încât E 1 E 3 și E 2 E 3. E E 1 E 2 E 3 C Corolar Dacă o expresie este reductibilă, forma ei normală este unică. Ea corespunde valorii expresiei. 3 : 34 / 60

Unicitatea formei normale Exemplu Ex (λx.λy.(x y) (λx.x y)) Exemplu λz.((λx.x y) z) λz.(y z) α λa.(y a) (λx.λy.(x y) y) λw.(y w) α λa.(y a) 3 : 35 / 60

Unicitatea formei normale Exemplu Ex (λx.λy.(x y) (λx.x y)) Exemplu λz.((λx.x y) z) λz.(y z) α λa.(y a) (λx.λy.(x y) y) λw.(y w) α λa.(y a) 3 : 35 / 60

Unicitatea formei normale Exemplu Ex (λx.λy.(x y) (λx.x y)) Exemplu λz.((λx.x y) z) λz.(y z) α λa.(y a) (λx.λy.(x y) y) λw.(y w) α λa.(y a) Forma normală corespunde unei clase de expresii, echivalente sub redenumiri sistematice. Valoarea este un anumit membru al acestei clase de echivalență. Valorile sunt echivalente în raport cu redenumirea. 3 : 35 / 60

Modalități de reducere Cum putem organiza reducerea? + Reducere stânga-dreapta: Reducerea celui mai superficial și mai din stânga β-redex. Ex Exemplu ((λx.x λx.y) (λx.(x x) λx.(x x))) (λx.y Ω) y + Reducere dreapta-stânga: Reducerea celui mai adânc și mai din dreapta β-redex. Ex Exemplu (λx.(λx.x λx.y) (λx.(x x) λx.(x x))) (λx.(λx.x λx.y) Ω)... 3 : 36 / 60

Ce modalitate alegem? T Teorema normalizării Dacă o expresie este reductibilă, evaluarea stânga-dreapta a acesteia se termină. Teorema normalizării (normalizare = aducere la forma normală) nu garantează terminarea evaluării oricărei expresii, ci doar a celor reductibile! Dacă expresia este ireductibilă, nicio reducere nu se va termina. 3 : 37 / 60

Răspunsuri la întrebări 1 Când se termină calculul? Se termină întotdeauna? se termină cu forma normală [funcțională]. NU se termină decât dacă expresia este reductibilă. 2 Comportamentul depinde de secvența de reducere? DA. 3 Dacă mai multe secvențe de reducere se termină, obținem întotdeauna același rezultat? DA. 4 Dacă rezultatul este unic, cum îl obținem? Reducere stânga-dreapta. 5 Care este valoarea expresiei? Forma normală [funcțională] (FN[F]). 3 : 38 / 60

Ordine de evaluare Tipuri + Evaluare aplicativă (eager) corespunde unei reduceri mai degrabă dreapta-stânga. Parametrii funcțiilor sunt evaluați înaintea aplicării funcției. + Evaluare normală (lazy) corespunde reducerii stânga-dreapta. Parametrii funcțiilor sunt evaluați la cerere. + Funcție strictă funcție cu evaluare aplicativă. + Funcție nestrictă funcție cu evaluare normală. 3 : 39 / 60

Ordine de evaluare În practică Evaluarea aplicativă prezentă în majoritatea limbajelor: C, Java, Scheme, PHP etc. Ex Exemplu (+ (+ 2 3) (* 2 3)) (+ 5 6) 11 Nevoie de funcții nestricte, chiar în limbajele aplicative: if, and, or etc. Ex Exemplu (if (< 2 3) (+ 2 3) (* 2 3)) (< 2 3) #t (+ 2 3) 5 3 : 40 / 60

Limbajul lambda-0 și incursiune în TDA 3 : 41 / 60

Limbajul λ 0 Scop Am putea crea o mașină de calcul folosind calculul λ mașină de calcul ipotetică; Mașina folosește limbajul λ 0 calcul lambda; Programul λ-expresie; + Legări top-level de expresii la nume. Datele λ-expresii; Funcționarea mașinii reducere substituție textuală evaluare normală; terminarea evaluării cu forma normală funcțională; se folosesc numai expresii închise. 3 : 42 / 60

Tipuri de date Cum reprezentăm datele? Cum interpretăm valorile? Putem reprezenta toate datele prin funcții cărora, convențional, le dăm o semnificație abstractă. Ex Exemplu T def λx.λy.x F def λx.λy.y Pentru aceste tipuri de date abstracte (TDA) creăm operatori care transformă datele în mod coerent cu interpretarea pe care o dăm valorilor. Ex Exemplu not def λx.((x F ) T ) (not T ) (λx.((x F ) T ) T ) ((T F ) T ) F 3 : 43 / 60

TDA Definiție + Tip de date abstract TDA Model matematic al unei mulțimi de valori și al operațiilor valide pe acestea.. Componente constructori de bază: cum se generează valorile; operatori: ce se poate face cu acestea; axiome: cum lucrează operatorii / ce restricții există. 3 : 44 / 60

TDA Bool Specificare Constructori: T : F : Bool Bool Operatori: not : and : or : if : Bool Bool Bool 2 Bool Bool 2 Bool Bool A A A Axiome: not : not(t ) = F not(f ) = T and : and(t,a) = a and(f,a) = F or : or(t,a) = T or(f,a) = a if : if (T,a,b) = a if (F,a,b) = b 3 : 45 / 60

TDA Bool Specificare Constructori: T : F : Bool Bool Operatori: not : and : or : if : Bool Bool Bool 2 Bool Bool 2 Bool Bool A A A Axiome: not : not(t ) = F not(f ) = T and : and(t,a) = a and(f,a) = F or : or(t,a) = T or(f,a) = a if : if (T,a,b) = a if (F,a,b) = b 3 : 45 / 60

TDA Bool Specificare Constructori: T : F : Bool Bool Operatori: not : and : or : if : Bool Bool Bool 2 Bool Bool 2 Bool Bool A A A Axiome: not : not(t ) = F not(f ) = T and : and(t,a) = a and(f,a) = F or : or(t,a) = T or(f,a) = a if : if (T,a,b) = a if (F,a,b) = b 3 : 45 / 60

TDA Bool Implementarea constructorilor de bază Intuiție bazat pe comportamentul necesar pentru if: selecția între cele două valori T def λx.λy.x F def λx.λy.y 3 : 46 / 60

TDA Bool Implementarea operatorilor if def λc.λx.λy.((c x) y) and def λx.λy.((x y) F ) ((and T ) a) ((λx.λy.((x y) F ) T ) a) ((T a) F ) a ((and F ) a) ((λx.λy.((x y) F ) F ) a) ((F a) F ) F or def λx.λy.((x T ) y) ((or T ) a) ((λx.λy.((x T ) y) T ) a) ((T T ) a) T ((or F ) a) ((λx.λy.((x T ) y) F ) a) ((F T ) a) a not def λx.((x F ) T ) (not T ) (λx.((x F ) T ) T ) ((T F ) T ) F (not F ) (λx.((x F ) T ) F ) ((F F ) T ) T 3 : 47 / 60

TDA Bool Implementarea operatorilor if def λc.λx.λy.((c x) y) and def λx.λy.((x y) F ) ((and T ) a) ((λx.λy.((x y) F ) T ) a) ((T a) F ) a ((and F ) a) ((λx.λy.((x y) F ) F ) a) ((F a) F ) F or def λx.λy.((x T ) y) ((or T ) a) ((λx.λy.((x T ) y) T ) a) ((T T ) a) T ((or F ) a) ((λx.λy.((x T ) y) F ) a) ((F T ) a) a not def λx.((x F ) T ) (not T ) (λx.((x F ) T ) T ) ((T F ) T ) F (not F ) (λx.((x F ) T ) F ) ((F F ) T ) T 3 : 47 / 60

TDA Bool Implementarea operatorilor if def λc.λx.λy.((c x) y) and def λx.λy.((x y) F ) ((and T ) a) ((λx.λy.((x y) F ) T ) a) ((T a) F ) a ((and F ) a) ((λx.λy.((x y) F ) F ) a) ((F a) F ) F or def λx.λy.((x T ) y) ((or T ) a) ((λx.λy.((x T ) y) T ) a) ((T T ) a) T ((or F ) a) ((λx.λy.((x T ) y) F ) a) ((F T ) a) a not def λx.((x F ) T ) (not T ) (λx.((x F ) T ) T ) ((T F ) T ) F (not F ) (λx.((x F ) T ) F ) ((F F ) T ) T 3 : 47 / 60

TDA Bool Implementarea operatorilor if def λc.λx.λy.((c x) y) and def λx.λy.((x y) F ) ((and T ) a) ((λx.λy.((x y) F ) T ) a) ((T a) F ) a ((and F ) a) ((λx.λy.((x y) F ) F ) a) ((F a) F ) F or def λx.λy.((x T ) y) ((or T ) a) ((λx.λy.((x T ) y) T ) a) ((T T ) a) T ((or F ) a) ((λx.λy.((x T ) y) F ) a) ((F T ) a) a not def λx.((x F ) T ) (not T ) (λx.((x F ) T ) T ) ((T F ) T ) F (not F ) (λx.((x F ) T ) F ) ((F F ) T ) T 3 : 47 / 60

TDA Bool Implementarea operatorilor if def λc.λx.λy.((c x) y) and def λx.λy.((x y) F ) ((and T ) a) ((λx.λy.((x y) F ) T ) a) ((T a) F ) a ((and F ) a) ((λx.λy.((x y) F ) F ) a) ((F a) F ) F or def λx.λy.((x T ) y) ((or T ) a) ((λx.λy.((x T ) y) T ) a) ((T T ) a) T ((or F ) a) ((λx.λy.((x T ) y) F ) a) ((F T ) a) a not def λx.((x F ) T ) (not T ) (λx.((x F ) T ) T ) ((T F ) T ) F (not F ) (λx.((x F ) T ) F ) ((F F ) T ) T 3 : 47 / 60

TDA Bool Implementarea operatorilor if def λc.λx.λy.((c x) y) and def λx.λy.((x y) F ) ((and T ) a) ((λx.λy.((x y) F ) T ) a) ((T a) F ) a ((and F ) a) ((λx.λy.((x y) F ) F ) a) ((F a) F ) F or def λx.λy.((x T ) y) ((or T ) a) ((λx.λy.((x T ) y) T ) a) ((T T ) a) T ((or F ) a) ((λx.λy.((x T ) y) F ) a) ((F T ) a) a not def λx.((x F ) T ) (not T ) (λx.((x F ) T ) T ) ((T F ) T ) F (not F ) (λx.((x F ) T ) F ) ((F F ) T ) T 3 : 47 / 60

TDA Bool Implementarea operatorilor if def λc.λx.λy.((c x) y) and def λx.λy.((x y) F ) ((and T ) a) ((λx.λy.((x y) F ) T ) a) ((T a) F ) a ((and F ) a) ((λx.λy.((x y) F ) F ) a) ((F a) F ) F or def λx.λy.((x T ) y) ((or T ) a) ((λx.λy.((x T ) y) T ) a) ((T T ) a) T ((or F ) a) ((λx.λy.((x T ) y) F ) a) ((F T ) a) a not def λx.((x F ) T ) (not T ) (λx.((x F ) T ) T ) ((T F ) T ) F (not F ) (λx.((x F ) T ) F ) ((F F ) T ) T 3 : 47 / 60

TDA Bool Implementarea operatorilor if def λc.λx.λy.((c x) y) and def λx.λy.((x y) F ) ((and T ) a) ((λx.λy.((x y) F ) T ) a) ((T a) F ) a ((and F ) a) ((λx.λy.((x y) F ) F ) a) ((F a) F ) F or def λx.λy.((x T ) y) ((or T ) a) ((λx.λy.((x T ) y) T ) a) ((T T ) a) T ((or F ) a) ((λx.λy.((x T ) y) F ) a) ((F T ) a) a not def λx.((x F ) T ) (not T ) (λx.((x F ) T ) T ) ((T F ) T ) F (not F ) (λx.((x F ) T ) F ) ((F F ) T ) T 3 : 47 / 60

TDA Bool Implementarea operatorilor if def λc.λx.λy.((c x) y) and def λx.λy.((x y) F ) ((and T ) a) ((λx.λy.((x y) F ) T ) a) ((T a) F ) a ((and F ) a) ((λx.λy.((x y) F ) F ) a) ((F a) F ) F or def λx.λy.((x T ) y) ((or T ) a) ((λx.λy.((x T ) y) T ) a) ((T T ) a) T ((or F ) a) ((λx.λy.((x T ) y) F ) a) ((F T ) a) a not def λx.((x F ) T ) (not T ) (λx.((x F ) T ) T ) ((T F ) T ) F (not F ) (λx.((x F ) T ) F ) ((F F ) T ) T 3 : 47 / 60

TDA Bool Implementarea operatorilor if def λc.λx.λy.((c x) y) and def λx.λy.((x y) F ) ((and T ) a) ((λx.λy.((x y) F ) T ) a) ((T a) F ) a ((and F ) a) ((λx.λy.((x y) F ) F ) a) ((F a) F ) F or def λx.λy.((x T ) y) ((or T ) a) ((λx.λy.((x T ) y) T ) a) ((T T ) a) T ((or F ) a) ((λx.λy.((x T ) y) F ) a) ((F T ) a) a not def λx.((x F ) T ) (not T ) (λx.((x F ) T ) T ) ((T F ) T ) F (not F ) (λx.((x F ) T ) F ) ((F F ) T ) T 3 : 47 / 60

TDA Pair Implementare Intuiție: pereche funcție ce așteaptă selectorul, pentru a-l aplica asupra membrilor fst def λp.(p T ) (fst ((pair a) b)) (λp.(p T ) λz.((z a) b)) (λz.((z a) b) T ) ((T a) b) a snd def λp(f ) (snd ((pair a) b)) (λp.(p F ) λz.((z a) b)) (λz.((z a) b) F ) ((F a) b) b pair def λx.λy.λz.((z x) y) ((pair a) b) (λx.λy.λz.((z x) y)ab )λz.((z a) b) 3 : 48 / 60

TDA Pair Implementare Intuiție: pereche funcție ce așteaptă selectorul, pentru a-l aplica asupra membrilor fst def λp.(p T ) (fst ((pair a) b)) (λp.(p T ) λz.((z a) b)) (λz.((z a) b) T ) ((T a) b) a snd def λp(f ) (snd ((pair a) b)) (λp.(p F ) λz.((z a) b)) (λz.((z a) b) F ) ((F a) b) b pair def λx.λy.λz.((z x) y) ((pair a) b) (λx.λy.λz.((z x) y)ab )λz.((z a) b) 3 : 48 / 60

TDA Pair Implementare Intuiție: pereche funcție ce așteaptă selectorul, pentru a-l aplica asupra membrilor fst def λp.(p T ) (fst ((pair a) b)) (λp.(p T ) λz.((z a) b)) (λz.((z a) b) T ) ((T a) b) a snd def λp(f ) (snd ((pair a) b)) (λp.(p F ) λz.((z a) b)) (λz.((z a) b) F ) ((F a) b) b pair def λx.λy.λz.((z x) y) ((pair a) b) (λx.λy.λz.((z x) y)ab )λz.((z a) b) 3 : 48 / 60

TDA Pair Implementare Intuiție: pereche funcție ce așteaptă selectorul, pentru a-l aplica asupra membrilor fst def λp.(p T ) (fst ((pair a) b)) (λp.(p T ) λz.((z a) b)) (λz.((z a) b) T ) ((T a) b) a snd def λp(f ) (snd ((pair a) b)) (λp.(p F ) λz.((z a) b)) (λz.((z a) b) F ) ((F a) b) b pair def λx.λy.λz.((z x) y) ((pair a) b) (λx.λy.λz.((z x) y)ab )λz.((z a) b) 3 : 48 / 60

TDA Pair Implementare Intuiție: pereche funcție ce așteaptă selectorul, pentru a-l aplica asupra membrilor fst def λp.(p T ) (fst ((pair a) b)) (λp.(p T ) λz.((z a) b)) (λz.((z a) b) T ) ((T a) b) a snd def λp(f ) (snd ((pair a) b)) (λp.(p F ) λz.((z a) b)) (λz.((z a) b) F ) ((F a) b) b pair def λx.λy.λz.((z x) y) ((pair a) b) (λx.λy.λz.((z x) y)ab )λz.((z a) b) 3 : 48 / 60

TDA Pair Implementare Intuiție: pereche funcție ce așteaptă selectorul, pentru a-l aplica asupra membrilor fst def λp.(p T ) (fst ((pair a) b)) (λp.(p T ) λz.((z a) b)) (λz.((z a) b) T ) ((T a) b) a snd def λp(f ) (snd ((pair a) b)) (λp.(p F ) λz.((z a) b)) (λz.((z a) b) F ) ((F a) b) b pair def λx.λy.λz.((z x) y) ((pair a) b) (λx.λy.λz.((z x) y)ab )λz.((z a) b) 3 : 48 / 60

TDA Pair Implementare Intuiție: pereche funcție ce așteaptă selectorul, pentru a-l aplica asupra membrilor fst def λp.(p T ) (fst ((pair a) b)) (λp.(p T ) λz.((z a) b)) (λz.((z a) b) T ) ((T a) b) a snd def λp(f ) (snd ((pair a) b)) (λp.(p F ) λz.((z a) b)) (λz.((z a) b) F ) ((F a) b) b pair def λx.λy.λz.((z x) y) ((pair a) b) (λx.λy.λz.((z x) y)ab )λz.((z a) b) 3 : 48 / 60

TDA List și Natural Implementare Intuiție: listă pereche (head, tail) nil def λx.t cons def pair ((cons e) L) ((λx.λy.λz.((z x) y) e) L) λz.((z e) L) car def fst cdr def snd Intuiție: număr listă cu lungimea egală cu valoarea numărului zero def nil succ def λn.((cons nil) n) pred def cdr vezi și [http://en.wikipedia.org/wiki/lambda_calculus#encoding_datatypes] 3 : 49 / 60

Absența tipurilor Chiar avem nevoie de tipuri? Rolul tipurilor Modalitate de exprimare a intenției programatorului; Documentare: ce operatori acționează asupra căror obiecte; Reprezentarea particulară a valorilor de tipuri diferite: 1, Hello, #t etc.; Optimizarea operațiilor specifice; Prevenirea erorilor; Facilitarea verificării formale; 3 : 50 / 60

Absența tipurilor Consecințe asupra reprezentării obiectelor Un număr, o listă sau un arbore, posibil desemnate de aceeași valoare! Valori și operatori reprezentați de funcții, semnificația fiind dependentă de context. Valoare aplicabilă asupra unei alte valori operator! 3 : 51 / 60

Absența tipurilor Consecințe asupra corectitudinii calculului Incapacitatea Mașinii λ de a interpreta semnificația expresiilor; asigura corectitudinea acestora (dpdv al tipurilor). Delegarea celor două aspecte programatorului; Orice operatori aplicabili asupra oricăror valori; Construcții eronate acceptate fără avertisment, dar calcule terminate cu valori fără semnificație sau expresii care nu sunt valori (nu au asociată o semnificație), dar sunt ireductibile instabilitate. 3 : 52 / 60

Absența tipurilor Consecințe pozitive Flexibilitate sporită în reprezentare; Potrivită în situațiile în care reprezentarea uniformă obiectelor, ca liste de simboluri, este convenabilă.... vin cu prețul unei dificultăți sporite în depanare, verificare și mentenanță 3 : 53 / 60

Recursivitate Perspective asupra recursivității Cum realizăm recursivitatea în λ 0, dacă nu avem nume de funcții? Textuală: funcție care se autoapelează, folosindu-și numele; Semantică: ce obiect matematic este desemnat de o funcție recursivă, cu posibilitatea construirii de funcții recursive anonime. 3 : 54 / 60

Implementare length Problemă Lungimea unei liste: length def λl.(if (null L) zero (succ (length (cdr L)))) Cu ce înlocuim zona subliniată, pentru a evita recursivitatea textuală? (expresia pentru length nu este închisă!) Putem primi ca parametru o funcție echivalentă computațional cu length? Length def λf L.(if (null L) zero (succ (f (cdr L)))) (Length length) = length length este un punct fix al lui Length! Cum obținem punctul fix? 3 : 55 / 60

Combinator de punct fix mai multe la [http://en.wikipedia.org/wiki/lambda_calculus#recursion_and_fixed_points] Ex Fix = λf.(λx.(f (x x)) λx.(f (x x))) Exemplu (Fix F ) (λx.(f (x x)) λx.(f (x x))) (F (λx.(f (x x)) λx.(f (x x)))) (F (Fix F )) (Fix F ) este un punct fix al lui F. Fix se numește combinator de punct fix. length def (Fix Length) (Length (Fix Length)) λ L.(if (null L) zero (succ ((Fix Length) (cdr L)))) Funcție recursivă, fără a fi textual recursivă! 3 : 56 / 60

Racket vs. lambda-0 3 : 57 / 60

Racket vs. λ 0 Construcția expresiilor / sintaxă λ Racket Variabilă/nume x x Funcție λ x.corp (lambda (x) corp) uncurry λ x y.corp (lambda (x y) corp) Aplicare (F A) (f a) uncurry (F A1 A2) (f a1 a2) Legare top-level - (define nume expr) Program λ-expresie închisă colecție de legări top-level (define) Valori λ-expresii / TDA valori de diverse tipuri (numere, liste, etc.) 3 : 58 / 60

Racket vs. λ 0 Mai precis similar cu λ 0, folosește S-expresii (bază Lisp); tipat dinamic/latent variabilele nu au tip; valorile au tip (3, #f); verificarea se face la execuție, în momentul aplicării unei funcții; evaluare aplicativă; permite recursivitate textuală; avem legări top-level. 3 : 59 / 60

Sfârșitul cursului 3 Elemente esențiale Baza formală a calculului λ: expresie λ, β-redex, variabile și apariții legate vs. libere, expresie închisă, α-conversie, β-reducere FN și FNF, reducere, reductibilitate, evaluare aplicativă și normală TDA și recursivitate pentru calcul lambda 3 : 60 / 60