Elementy rachunku lambda λ 1
Notacja λ x 3x + 7 3x + 7 jest różniczkowalna 3x + 7 jest mniejsze od 2 (2,3) 5 f(2, 3) = 2 + 3 g(2) = 2 + 3 λx(3x + 7) 3x + 7 λx λy(x + y) = λxy(x + y) λx(x + 3) 2
Rachunek lambda (λ) Rachunek λ jest nie tylko formą notacji (Wykład 1). Został on zaprezentowany przez Churcha jako jeden z pierwszych systemów formalnych proponujących dokładną definicję obliczalności. Można podać formalną syntaktykę rachunku λ oraz model przyporządkowujący każdej konstrukcji syntaktycznej rachunku λ wartości z odpowiedniej dziedziny. 3
Pojęcia pomocnicze Operatorem nazywamy symbol (funkcyjny), który w połączeniu z pewnym wyrażeniem(napisem) zawierającym zmienną (wyróżnioną jako związaną tym operatorem) nabiera konkretnego sensu. Np.: kwantyfikatory, całki, nieskończone sumy i produkty itp. n x= 1 F ( x,y) = F( 1,y) + F( 2,y) +... + F( n,y) 4
Pojęcia pomocnicze Operatorem abstrakcji (znakiem abstrakcji) nazywa się symbol operacji, która przekształca funkcję zdaniową w nazwę zbioru przedmiotów spełniających tę funkcję. {x I x jest logikiem} stanowi nazwę zbioru logików zmienna x jest funkcja zdaniowa zmienną związaną operatorem abstrakcji 5
Pojęcia pomocnicze Operator lambda (λ-operator) stanowi uogólnienie operatora abstrakcji, gdyż stosuje się go nie tylko do funkcji zdaniowych lecz również do wyrażeń zbudowanych z symboli funkcyjnych (termów). 6
Język rachunku lambda Alfabet A rachunku A = zmienne stałe {λ, (, )} zmienne = {u, v, x, y, z} stałe = {a, b, c, d} Wyrażenia rachunku lambda (formuły) F zbudowane nad alfabetem A: F = F A F Z F A wyrażenia atomowe, F A = zmienne stale F Z wyrazenia zlozone 7
Wyrażenia złożone Jeśli L i M należą do F, to wyrażenie LM (operator aplikacji) lub postaci (LM) jest wyrażeniem rachunku lambda, przy czym L jest częścią operatorową, zaś M częścią argumentową. Jeśli L należy do F, to wyrażenie postaci λxl lub postaci (λxl) jest wyrażeniem rachunku lambda, λx jest częścią zmiennej związanej, zaś L jest ciałem. Przykłady: xy, x(yz), xyy, abcd (xy) (x(yz)) ((xy)y) (((ab)c)d) 8
Podwyrażenie wyrażenia G (1) G jest podwyrażeniem G (2) jeśli G LM, to każde podwyrażenie wyrażeń L i M jest także podwyrażeniem G, (3) jeśli G λxl, to każde podwyrażenie L jest także podwyrażeniem G. Przykłady: λyx i x są podwyrażeniami λyx λz(xyz), xy i y są podwyrażeniami λyλz(xyz) 9
Zmienne wolne w wyrażeniach (1) x jest jedyną zmienną wolną występującą w wyrażeniu x (2) jeśli P i S są zbiorami zmiennych wolnych występujących odpowiednio w wyrażeniach P i S, to zbiór zmiennych wolnych występujących w aplikacji PS jest równy P S, (3) jeśli P jest zbiorem zmiennych wolnych występujących w wyrażeniu P, to P -{x} jest zbiorem zmiennych wolnych występujących w wyrażeniu λxp. Przykłady: x jest zmienną wolną w wyrażeniach λyx, λyλz(xyz), abλz(zb)λux; y jest zmienną związaną w: λyx, λyλz(xyz), lecz wolną w podwyrażeniu dr hab. inż. Joanna λz(xyz) Józefowska, prof. PP 10
Wyrażenie wolne ze względu na podstawienie niech M i ε[x] będą λ-wyrażeniami; ε[x] oznacza, że zmienna x jest zmienną wolną w ε[x] lub że nie występuje w ε[x]; zapis ε[m/x] oznacza rezultat zastąpienia wszystkich wolnych wystąpień zmiennej x przez wyrażenie M; wyrażenie M jest wolne po zastąpieniu nim zmiennej x, jeśli podczas zastępowania nie nastąpią przypadkowe związania zmiennych wolnych występujących w M. 11
Wyrażenie wolne ze względu na podstawienie Przykłady wyrażenie M λxλy(xy) jest wolne po zastąpieniu zmiennej u w wyrażeniu ε[u] = λvu; wyrażenie M xz nie jest wolne po zastąpieniu zmiennej u w wyrażeniu ε[u] = λxu (zmienna wolna x z wyrażenia M zostaje związana) 12
Reguły redukcji wyrażeń niech L i M będą wyrażeniami, wtedy przez L M oznaczymy elementarną redukcję L do M; wyrażenie jest redukowalne do M, co zapisujemy L M, jeśli istnieje ciąg L = L 0, L 1,..., L n-1, L n = M taki, że (0 i n-1) L i L i+1 ; 13
Elementarne reguły redukcji Reguła przemianowywania zmiennych Niech A λx F[x] oraz niech y będzie nową zmienną, która nie występuje w F[x] jako zmienna wolna i pozostaje zmienna wolna po zastapieniu nia zmiennej x w F[x], wtedy: λx F[x] λy F[y] α Na przykład: λxλz(xz) α λyλz(yz) F[x] 14
Elementarne reguły redukcji Podstawowa reguła redukcji Niech A (λx ε[x])m i wyrażenie M jest wolne ze względu na zastąpienie nim zmiennej x w wyrażeniu ε[x], wtedy: (λxε[x])m ε[m/x] Na przykład: λx(xz)a (az) ε[x] M 15
Elementarne reguły redukcji Reguła pomocnicza Niech A λx(fx) gdzie F jest wyrażeniem, w którym zmienna x nie występuje jako zmienna wolna, wtedy: λx(fx) η F Na przykład: λx(λyyx) λxx F η λx(λyyx) η λyy α λyy F 16
Przykłady function f(x: integer): integer; begin f := x end; P 11 (x) = x; definicja funkcji f w rachunku lambda: λxx; przykładowe obliczenia dla wywołania:... y:=f(5);... M (λ x x 5) 5 ε[x] 17
Przykłady function f 1 (x: integer): integer; begin f 1 := x + 1 end; f 1 S 1 ; (funkcja następnika) definicja funkcji f 1 w rachunku lambda: λx((+1)x); przykładowe obliczenia dla wywołania:... y:=f 1 (5);... M (λ x((+1) x) 5) ((+1)5) 6 ε[x] 18
Technika Curry ego - currying (Schönfinkel) f n : A 1 x A 2 x... x A n B f n (a 1, a 2,..., a n ), a i A i f c,n : A 1 (A 2... (A n B)...) f c,n (a 1 ) f c,n (a 1 )(a 2 ) f c,n (a 1 )(a 2 )...(a n ) f c,2 : A (B C) lambda nazwa: λaλb treść funkcja może być zarówno daną, jak i funkcją 19
Przykłady function f 2 (x, y: integer): integer; begin f 2 := y end; f 2 P 12 ; (projekcja) definicja funkcji f 2 w rachunku lambda: λx 1 λx 2 x 1 ; przykładowe obliczenia dla wywołania: y:=f 3 (3,4);... M M (λ x 1 (λ x 2 x 1 4) 3) λ x 2 3 4 3 ε[x] ε[x] 20
Przykłady function f 3 (function f; x: integer): integer; begin f 3 := f(x) end; definicja funkcji f 3 w rachunku lambda: λfλx(fx); przykładowe obliczenia dla wywołania: y:=f 3 (f 1,5);... f λf(λx(fx)5)λx((+1)x) α M λf(λx(fx)5)λy((+1)y) λx(λy((+1)y)x)5 λy((+1)y)5 ((+1)5) ε[x] β 21
Przykłady λf(λx((+fx))1)5)λa((*x)a) f α λf(λx((+(fx))1)5)λa((*y)a) λx((+(λa((*y)a)x)1)5) β β ε[x] M λx((+(λa((*y)a)x)1)5) ((+(λa((*y)a)5)1)) ((+(((*y)5))1)) ε[x] M 22
Wyrażenie G, w którym nie można zastosować redukcji typu β lub η jest wyrażeniem zredukowanym (lub wyrażeniem w postaci normalnej); Przykład wyrażenia nieredukowalnego λx(xx)λx(xx) λx(xx)λx(xx)... 23
Przykład wyrażenia, dla którego istnieją dwa ciągi redukcji: skończony i nieskończony λxλyy(λx(xx)λx(xx)) λyy ε[x] M λxλyy(λx(xx)λx(xx)) λxλyy(λx(xx)λx(xx)) ε[x] M β 24
Twierdzenie Jeśli dla danego wyrażenia istnieją dwa ciągi redukcji, z których jeden jest nieskończony, drugi zaś daje określoną wartość, to wyrażenie to zawiera podwyrażenie redukowalne do postaci LM, przy czym M jest nieredukowalne, L ma postać λxp, gdzie P ma postać zredukowana i nie zawiera x. 25
Twierdzenie Jeśli wyrażenie oblicza się w drodze kolejnych skrajnie lewostronnych redukcji operatorargument, to uzyskany ciąg redukcji kończy się, jeśli wyrażenie jest redukowalne. 26
Twierdzenie (Churcha-Rossera o zbieżności) Jeśli dane wyrażenie ma dwa ciągi redukcji prowadzące do postaci zredukowanych, to postaci te są sobie równe z dokładnością do przemianowania zmiennych (znajdują się w tej samej klasie wartości). 27
Model rachunku lambda λu u(u) val[λu u(u)] = selfapplic Czy to jest funkcja? 28
Dana Scott (1970) - model rachunku λ D (D D) gdzie (D D) jest przestrzenią funkcji obliczalnych z D w D. Izomorfizm z D w (D D) oznacza, że D jest takim zbiorem wartości, który jest potrzebny do modelu rachunku λ. D jest kratą zupełną, a funkcje obliczalne są definiowane jako funkcje ciągłe w rozumieniu teorii krat. Każda funkcja ciągła z D w D ma punkt stały (Tarski, Knaster). 29
Dana Scott (1970) - model rachunku λ Twierdzenie o punkcie stałym Scott i Strachey wykorzystali do zapewnienia istnienia rozwiązań rekurencyjnych oraz do nadania znaczenia takim konstrukcjom, jak instrukcja while. Sposób konstrukcji modelu rachunku λ może być stosowany do wyznaczania dziedzin refleksywnych interesujących z punktu widzenia informatyki. 30
Zadanie domowe Zredukować wyrażenie postaci: λf f(y) (λy f(y)) Na powyższym przykładzie przeprowadzić analizę pojęcia zmiennej wolnej i związanej w λ-wyrażeniach. 31