rachunek lambda i jezyki programowaniamabi/lambda/wyklad4.pdf · literatura (wybór) j¦zyki...
TRANSCRIPT
Rachunek Lambda
i J¦zyki Programowania
Maªgorzata Biernacka
Instytut Informatyki UWr
Wykªad 4
1
Plan
1 Rozszerzenia rachunku lambda
Konstrukcje skªadniowe
Rachunek domkni¦¢
Leniwa ewaluacja
2 Literatura (wybór)
2
Rozszerzenia rachunku lambda
Plan
1 Rozszerzenia rachunku lambda
Konstrukcje skªadniowe
Rachunek domkni¦¢
Leniwa ewaluacja
2 Literatura (wybór)
3
Rozszerzenia rachunku lambda Konstrukcje skªadniowe
Plan
1 Rozszerzenia rachunku lambda
Konstrukcje skªadniowe
Rachunek domkni¦¢
Leniwa ewaluacja
2 Literatura (wybór)
4
Rozszerzenia rachunku lambda Konstrukcje skªadniowe
Rozszerzenia rachunku lambda: staªe
I Skªadnia (nast¦pnik jako staªa):
t := . . . | n | succ
I Poj¦cie redukcji:
succ n → n + 1
I Warto±ci:
v := . . . | n | succ
I Strategia � w CBN dodajemy reguª¦ aplikatywn¡ dla aplikacji
nastepnika (w CBV � bez zmian)
r →n s
succ r →n succ s
I Za pomoc¡ kontekstów � dodajemy nowy kontekst:
C := . . . | C [succ [ ]]
5
Rozszerzenia rachunku lambda Konstrukcje skªadniowe
Rozszerzenia rachunku lambda: konstrukcja warunkowa
I Skªadnia (if jako forma specjalna):
t := . . . | #t | #f | if t t t
I Poj¦cie redukcji:
if #t r s → r
if #f r s → s
I Warto±ci:
v := . . . | #f | #t
I Strategia � dodajemy nast¦puj¡c¡ reguª¦ (w CBN i CBV):
r → s
if r t u → if s t u
I Za pomoc¡ kontekstów � dodajemy nowy kontekst:
C := . . . | C [if [ ] t u]
6
Rozszerzenia rachunku lambda Konstrukcje skªadniowe
Rozszerzenia rachunku lambda: konstrukcja let
I Skªadnia (let jako forma specjalna):
t := . . . | let x = t in t
I Poj¦cie redukcji:
let x = v in r → r [v/x ]
I Strategia � dodajemy nast¦puj¡c¡ reguª¦ (w CBN i CBV):
r → s
let x = r in u → let x = s in u
I Za pomoc¡ kontekstów � dodajemy nowe konstruktory kontekstu:
C := . . . | C [let x = [ ] in t]
7
Rozszerzenia rachunku lambda Konstrukcje skªadniowe
Rozszerzenia rachunku lambda: de�nicje funkcji
rekurencyjnych
I Skªadnia:
t := . . . | λf x .t
I Warto±ci: v := . . . | λf x .t
I Poj¦cie redukcji (uogólniona β-redukcja):
(λf x .t) r → t [r/x ] [λf x .t/f ]
8
Rozszerzenia rachunku lambda Rachunek domkni¦¢
Plan
1 Rozszerzenia rachunku lambda
Konstrukcje skªadniowe
Rachunek domkni¦¢
Leniwa ewaluacja
2 Literatura (wybór)
9
Rozszerzenia rachunku lambda Rachunek domkni¦¢
Rachunek domkni¦¢
I Modelowanie ewaluacji w maszynach ze ±rodowiskiem na poziomie
rachunku
I Reguªy redukcji odzwierciedlaj¡ �opó¹nione podstawienie�
I Rachunek po±redni mi¦dzy rachunkiem lambda a implementacjami
u»ywaj¡cymi ±rodowiska i domkni¦¢
I Istniej¡ ró»ne wersje rachunku, w szczególno±ci dla silnej normalizacji
i dla ewaluacji
10
Rozszerzenia rachunku lambda Rachunek domkni¦¢
Rachunek domkni¦¢ dla ewaluacji (λρ)
I Skªadnia:
(Term) t ::= i | λt | t t
(Domkni¦cie) c ::= t[s]
(Podstawienie) s ::= � | c � s
I Termy � jak w rachunku lambda z indeksami de Bruijna
I Domkni¦cia � syntaktyczna kategoria oznaczaj¡ca term z
podstawieniem do wykonania
I Podstawienie (±rodowisko) � lista domkni¦¢
I Pozycja na li±cie oznacza indeks zmiennej, pod któr¡ podstawiamy
11
Rozszerzenia rachunku lambda Rachunek domkni¦¢
Rachunek domkni¦¢ dla ewaluacji (λρ), c.d.
I Semantyka CBN:
Warto±ci:
v ::= (λt)[s]
System wnioskowania dla ewaluacji (semantyka du»ych kroków):
(Eval)t1[s]
ρ→� (λt 0
1)[s 0]
(t1 t2)[s]ρ→ t 0
1[(t2[s]) � s 0]
(Var) i [c1 � � � cm]ρ→ ci if i � m
Redukcje s¡ wykonywane tylko na domkni¦ciach
Sªaba redukcja � nie ma obsªugi termów wewn¡trz lambda abstrakcji
Semantyka maªych kroków nie jest wyra»alna w tym j¦zyku
12
Rozszerzenia rachunku lambda Rachunek domkni¦¢
Semantyka redukcyjna dla rachunku domkni¦¢ (λρ̂)
I Rozszerzamy skªadni¦ o konstrukcj¦ pozwalaj¡c¡ wyra»a¢ po±rednie
wyniki oblicze«
I Skªadnia j¦zyka λρ̂:
(Term) t ::= i | t t | λt
(Domkni¦cie) c ::= t[s] | c c
(Podstawienie) s ::= � | c � s
I Aplikacja domkni¦¢ � modeluje po±redni wynik oblicze«
13
Rozszerzenia rachunku lambda Rachunek domkni¦¢
Semantyka redukcyjna dla rachunku domkni¦¢, c.d.
I Warto±ci:
v ::= (λt)[s]
I Poj¦cie redukcji:
(Beta) ((λt)[s]) cbρ→ t[c � s]
(App) (t1 t2)[s]bρ→ (t1[s]) (t2[s])
(Var) i [c1 � � � cm]bρ→ ci if i � m
I Konteksty:
E ::= [ ] | E [[ ] c ]
14
Rozszerzenia rachunku lambda Rachunek domkni¦¢
Symulacja ewaluacji w obu semantykach
Theorem
Niech c1 i c2 b¦d¡ domkni¦ciami z j¦zyka λρ. Wówczas
I Je±li c1ρ→ c2, to c1
bρ→� c2.
I Je±li c1bρ→� c2, to c1
ρ→� c2.
Symulacja reguªy (Eval)
(t1 t2)[s]bρ→ (t1[s]) (t2[s])
bρ→� ((λt 0
1)[s0]) (t2[s])
bρ→ t 0
1[(t2[s]) � s0]
15
Rozszerzenia rachunku lambda Rachunek domkni¦¢
Zwi¡zek λρ i maszyn abstrakcyjnych
I Startuj¡c z rachunku domkni¦¢ z odpowiedni¡ strategi¡, stosuj¡c
konkretyzacj¦ semantyki redukcyjnej (�refocusing�) otrzymujemy
maszyn¦ abstrakcyjn¡ symuluj¡c¡ strategi¦ ewaluacji rachunku
¹ródªowego
I Kon�guracje otrzymanej maszyny skªadaj¡ si¦ z: kodu (term),
±rodowiska (podstawienie) i stosu (kontekst)
I Poprawno±¢ maszyny wynika z poprawno±ci kolejnych kroków metody
wyprowadzenia
16
Rozszerzenia rachunku lambda Leniwa ewaluacja
Plan
1 Rozszerzenia rachunku lambda
Konstrukcje skªadniowe
Rachunek domkni¦¢
Leniwa ewaluacja
2 Literatura (wybór)
17
Rozszerzenia rachunku lambda Leniwa ewaluacja
Nielokalne reguªy redukcji
I Standardowa semantyka redukcyjna:
Lokalne poj¦cie redukcji (kontrakcje)
r → r0
redukcja jednokrokowa
E [r ] →1 E [r 0]
I Semantyka redukcyjna nielokalna (wra»liwa na kontekst):
Nielokalne poj¦cie redukcji
E [r ] → r0 6= E [r 00]
Redukcja jednokrokowa nie jest kompatybilnym domkni¦ciem poj¦cia
redukcji
Caªy term wpªywa na posta¢ reguªy redukcji
18
Rozszerzenia rachunku lambda Leniwa ewaluacja
Przykªad rozszerze« nielokalnych
I Operatory kontroli:
Abort: E [A t] → t
Call/cc: E [Cλk .t] → E [t [E �/k ]]
19
Rozszerzenia rachunku lambda Leniwa ewaluacja
Leniwy rachunek lambda
I Leniwa ewaluacja wymaga wprowadzenia do j¦zyka reprezentacji
�pami¦ci�
I Maszyna abstrakcyjna modeluj¡ca leniw¡ ewaluacj¦:
hi , s, C , σi ⇒l hC , (λt 0, s 0), σi gdy σ(s(i)) = (λt 0, s 0)
hi , s, C , σi ⇒l ht0, s 0, C [upd(`, [ ])], σi gdy σ(s(i)) = (t 0, s 0)
hλt, s, C , σi ⇒l hC , (λt, s), σi
ht1 t2, s, C , σi ⇒l ht1, s, C [[ ] `], σ[` 7→ (t2, s)]i ` ±wie»e
h[ ], v , σi ⇒l (v , σ)
hC [[ ] `], (λt, s), σi ⇒l ht, ` � s, C , σi
hC [upd(`, [ ])], v , σi ⇒l hC , v , σ[` 7→ v ]i
20
Rozszerzenia rachunku lambda Leniwa ewaluacja
Leniwy rachunek lambda, c.d.
I Reguªy redukcji:
(Var1) hi [`1 � � � `j ], C [σ]i →l hv , C [σ]i gdy σ(`i) = v
(Var2) hi [`1 � � � `j ], C [σ]i →l hupd(`i , c), C [σ]i gdy σ(`i) = c
(Beta) h((λt)[s]) `, C [σ]i →l ht[` � s], C [σ]i
(App) h(t1 t2)[s], C [σ]i →l h(t1[s]) `, C [σ[` 7→ t2[s]]]i gdzie ` �±wie»e�
(Upd) hupd(`, v), C [σ]i →l hv , C [σ[` 7→ v ]]i
21
Rozszerzenia rachunku lambda Leniwa ewaluacja
Inne rozszerzenia
I Nielokalne redukcje i rozszerzenia skªadni stosuje si¦ do modelowaniaefektów takich, jak:
przypisanie
operatory kontroli
wej±cie/wyj±cie
wyj¡tki
22
Literatura (wybór)
Plan
1 Rozszerzenia rachunku lambda
Konstrukcje skªadniowe
Rachunek domkni¦¢
Leniwa ewaluacja
2 Literatura (wybór)
23
Literatura (wybór)
Rachunek lambda
I Podr¦czniki
1 H. Barendregt �The Lambda Calculus: Its Syntax and Semantics�
(1984)
2 Ch. Hankin �Lambda Calculi: A guide for computer scientists� (1994)
3 P. Urzyczyn �Beztypowy rachunek lambda�
(http://www.mimuw.edu.pl/�urzy/Lambda/beztypow.pdf)
I Artykuªy
1 H. Barendregt �The impact of the lambda calculus in logic and
computer science� (1997)
2 A. Church �The calculi of lambda conversion� (1941)
3 T. Æ. Mogensen �E�cient self-interpretation in lambda calculus�
(1992)
24
Literatura (wybór)
J¦zyki programowania
I Podr¦czniki1 M. Felleisen, M. Flatt �Programming languages and lambda calculi�
2 G. Winskel �The formal semantics of programming languages�
3 J. C. Reynolds �Theories of programming languages�
4 H. Abelson, G. J. Sussman, J. Sussman �Structure and interpretation
of computer programs�I Artykuªy
1 P. J. Landin �The mechanical evaluation of expressions� (1964)
2 J. C. Reynolds �De�nitional interpreters for higher-order programming
languages� (1972)
3 G. D. Plotkin �Call-by-name, call-by-value and the lambda calculus.�
(1975)
4 P.-L. Curien �An abstract framework for environment machines� (1990)
5 D. A. Turner �A new implementation technique for applicative
languages� (1979)
I W internecie: blog o j¦zykach programowania:
http://lambda-the-ultimate.org/
25