Slajdy do wykładu 4.

Transkrypt

Slajdy do wykładu 4.
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
Konstrukcje skªadniowe
Rozszerzenia rachunku lambda
Rozszerzenia rachunku lambda: staªe
I
Skªadnia (nast¦pnik jako staªa):
t
I
Poj¦cie redukcji:
I
Warto±ci:
succ n → n + 1
v
I
:= . . . | n | succ
:= . . . | n | succ
Strategia w CBN dodajemy reguª¦ aplikatywn¡ dla aplikacji
nastepnika (w CBV bez zmian)
r
succ r
I
→n s
→n succ s
Za pomoc¡ kontekstów dodajemy nowy kontekst:
C := . . . | C [succ [ ]]
5
Konstrukcje skªadniowe
Rozszerzenia rachunku lambda
Rozszerzenia rachunku lambda: konstrukcja warunkowa
I
Skªadnia (if
jako forma specjalna):
t
I
:= . . . | #t | #f | if t t t
Poj¦cie redukcji:
if #t r s → r
if #f r s → s
I
Warto±ci:
v
I
:= . . . | #f | #t
Strategia dodajemy nast¦puj¡c¡ reguª¦ (w CBN i CBV):
r
I
if r t u
→s
→ if s t u
Za pomoc¡ kontekstów dodajemy nowy kontekst:
C := . . . | C [if [ ] t u]
6
Konstrukcje skªadniowe
Rozszerzenia rachunku lambda
Rozszerzenia rachunku lambda: konstrukcja
I
Skªadnia (let jako forma specjalna):
t
I
:= . . . | let x =
in t
v
in r → r [v /x ]
Strategia dodajemy nast¦puj¡c¡ reguª¦ (w CBN i CBV):
let x =
I
t
Poj¦cie redukcji:
let x =
I
let
r
r → s
in u → let x =
s
in u
Za pomoc¡ kontekstów dodajemy nowe konstruktory kontekstu:
C := . . . | C [let x
= [ ] in t ]
7
Rozszerzenia rachunku lambda
Konstrukcje skªadniowe
Rozszerzenia rachunku lambda: denicje funkcji
rekurencyjnych
I
Skªadnia:
t
I
I
Warto±ci: v
:= . . . | λf x .t
:= . . . | λf x .t
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
I
Reguªy redukcji odzwierciedlaj¡ opó¹nione podstawienie
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
I
I
Skªadnia:
(Term)
t
::= i | λt |
(Domkni¦cie)
c
::= t [s ]
(Podstawienie)
s
::= |
t t
c s
Termy jak w rachunku lambda z indeksami de Bruijna
Domkni¦cia syntaktyczna kategoria oznaczaj¡ca term z
podstawieniem do wykonania
I
I
Podstawienie (±rodowisko) lista domkni¦¢
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)
(Var)
ρ
t1 [s ] → (λt10 )[s 0 ]
ρ
(t1 t2 )[s ] → t10 [(t2 [s ]) s 0 ]
ρ
i [c1 c ] → c if i
m
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¦¢ (λb
ρ)
I
Rozszerzamy skªadni¦ o konstrukcj¦ pozwalaj¡c¡ wyra»a¢ po±rednie
wyniki oblicze«
I
I
Skªadnia j¦zyka
λb
ρ:
(Term)
t
::= i |
(Domkni¦cie)
c
::= t [s ] |
(Podstawienie)
s
::= |
t t
| λt
c c
c s
Aplikacja domkni¦¢ modeluje po±redni wynik oblicze«
13
Rozszerzenia rachunku lambda
Rachunek domkni¦¢
Semantyka redukcyjna dla rachunku domkni¦¢, c.d.
I
Warto±ci:
v
I
Poj¦cie redukcji:
b
ρ
((λt )[s ]) c → t [c
(Beta)
I
::= (λt )[s ]
Konteksty:
s
]
b
ρ
(App)
(t1 t2 )[s ] → (t1 [s ]) (t2 [s ])
(Var)
i c1 cm
[
E ::= [ ]
|
b
ρ
] → ci
if i m
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
I
Je±li c1
→ c2 ,
I
Je±li c1
→ c2 ,
ρ
b
ρ
Symulacja reguªy
to c1
to c1
λρ.
Wówczas
b
ρ
→ c2 .
ρ
→ c2 .
(Eval)
(t1 t2 )[s ] → (t1 [s ]) (t2 [s ]) → ((λt10 )[s 0 ]) (t2 [s ]) → t10 [(t2 [s ]) s 0 ]
b
ρ
b
ρ
b
ρ
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
Konguracje 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
I
E [r ] →1 E [r 0 ]
Semantyka redukcyjna nielokalna (wra»liwa na kontekst):
Nielokalne poj¦cie redukcji
E [r ] → r 0 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:
Call/cc:
E[
E[
A t
C
]→t
λk .t ] → E [t [E /k ]]
19
Leniwa ewaluacja
Rozszerzenia rachunku lambda
Leniwy rachunek lambda
I
Leniwa ewaluacja wymaga wprowadzenia do j¦zyka reprezentacji
pami¦ci
I
Maszyna abstrakcyjna modeluj¡ca leniw¡ ewaluacj¦:
C, σ
i, s, C , σ
λt , s , C , σ
t1 t2 , s , C , σ
hi
, s,
h
h
h
i
⇒l
h
i
⇒l
h
i
⇒l
h
i
⇒l
h
C , (λt 0 , s 0 ), σ
0
0
t , s , C [upd(`, [ ])], σ
C , (λt , s ), σ
t1 , s , C [[ ] `], σ[` → (t2 , s )]
i
i
h
C [upd(`, [ ])], v , σ
i
⇒l
h
s
gdy σ(s (i )) = (t 0 ,
0)
s
i
7
[ ], v , σi ⇒l (v , σ)
hC [[ ] `], (λt , s ), σi ⇒l ht , ` s ,
h
gdy σ(s (i )) = (λt 0 ,
C, σ
i
` ±wie»e
i
C , v , σ[` → v ]
7
i
20
0
Rozszerzenia rachunku lambda
Leniwa ewaluacja
Leniwy rachunek lambda, c.d.
I
Reguªy redukcji:
C [σ]
i [`1
` ], C [σ]
((λt )[s ]) `, C [σ]
(t1 t2 )[s ], C [σ]
upd(`, v ), C [σ]
→l
i
→l hupd(`i , c ),
i
→l
ht
h
i
→l
h
h
i
→l
h
hi
(Var2 )
h
(Beta)
(App)
(Upd)
h
C [σ]
i
(Var1 )
[`1 `j ],
j
hv
,
i
gdy
σ(`i ) = v
i
gdy
σ(`i ) = c
7
i gdzie
C [σ]
C [σ]
(t1 [s ]) `, C [σ[` → t2 [s ]]]
v , C [σ[` → v ]]
[` s ],
7
i
`
±wie»e
i
21
Rozszerzenia rachunku lambda
Leniwa ewaluacja
Inne rozszerzenia
I
Nielokalne redukcje i rozszerzenia skªadni stosuje si¦ do modelowania
efektó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
I
(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)
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 Ecient self-interpretation in lambda calculus
(1992)
24
Literatura (wybór)
J¦zyki programowania
I
Podr¦czniki
1
2
3
4
I
M. Felleisen, M. Flatt Programming languages and lambda calculi
G. Winskel The formal semantics of programming languages
J. C. Reynolds Theories of programming languages
H. Abelson, G. J. Sussman, J. Sussman Structure and interpretation
of computer programs
Artykuªy
1 P. J. Landin The mechanical evaluation of expressions (1964)
2 J. C. Reynolds Denitional 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
I
languages (1979)
W internecie: blog o j¦zykach programowania:
http://lambda-the-ultimate.org/
25