Slajdy do wykładu 3.

Transkrypt

Slajdy do wykładu 3.
Rachunek Lambda
i J¦zyki Programowania
Maªgorzata Biernacka
Instytut Informatyki UWr
Wykªad 3
1
Plan
1
Ewaluacja w j¦zykach funkcyjnych
Strategie ewaluacji i równowa»no±¢ programów
Ewaluacja w kontekstach
Maszyny abstrakcyjne
2
Ewaluacja w j¦zykach funkcyjnych
Plan
1
Ewaluacja w j¦zykach funkcyjnych
Strategie ewaluacji i równowa»no±¢ programów
Ewaluacja w kontekstach
Maszyny abstrakcyjne
3
Ewaluacja w j¦zykach funkcyjnych
Strategie ewaluacji i równowa»no±¢ programów
Plan
1
Ewaluacja w j¦zykach funkcyjnych
Strategie ewaluacji i równowa»no±¢ programów
Ewaluacja w kontekstach
Maszyny abstrakcyjne
4
Ewaluacja w j¦zykach funkcyjnych
Strategie ewaluacji i równowa»no±¢ programów
Semantyka operacyjna j¦zyków
I
I
Znaczenie konstrukcji j¦zyka okre±la pewna specykacja procesu
'wykonania' programu
Semantyka operacyjna mo»e by¢ okre±lona w sposób formalny, np.
przez system reguª dedukcji okre±laj¡cych pewn¡ relacj¦ przej±cia:
Semantyka du»ych kroków deniuje relacj¦ mi¦dzy programami a ich
warto±ciami
Semantyka maªych kroków deniuje relacj¦ przej±cia mi¦dzy stanami
wykonania programu
I
Semantyka operacyjna powinna by¢ czytelna dla u»ytkownika j¦zyka,
powinna umo»liwia¢ wnioskowanie o programach oraz implementacj¦
j¦zyka
I
Ró»ne opisy semantyczne tego samego j¦zyka powinny by¢
równowa»ne
5
Ewaluacja w j¦zykach funkcyjnych
Strategie ewaluacji i równowa»no±¢ programów
Semantyka wykonywalna
I
I
Semantyka zadana przez program (interpreter, kompilator)
J¦zyk, którego semantyk¦ deniujemy, nazywamy j¦zykiem
deniowanym, ¹ródªowym
I
J¦zyk, w którym okre±lona jest semantyka wykonywalna (interpreter
lub kompilator) nazywamy j¦zykiem deniuj¡cym
I
J¦zyk deniuj¡cy musi by¢ wystarczaj¡co ekspresywny, by symulowa¢
zachowanie j¦zyka deniowanego
I
Semantyka, jak¡ okre±limy dla j¦zyka deniowanego zale»y od
semantyki j¦zyka deniuj¡cego (oraz j¦zyka docelowego w przypadku
kompilatora)
6
Ewaluacja w j¦zykach funkcyjnych
Strategie ewaluacji i równowa»no±¢ programów
Semantyka wykonywalna
I
Interpreterem j¦zyka S napisanym w j¦zyku L nazywamy L-program
int ,
który dla dowolnego S-programu s i danych dla programu s,
b¦dzie symulowaª wykonanie programu s w j¦zyku L, a» do obliczenia
warto±ci (je±li istnieje):
[[s ]]S (x ) = [[int ]]L (s , x )
I
Kompilatorem j¦zyka S do j¦zyka T, napisanym w j¦zyku L,
nazywamy L-program
comp
taki, »e
[[s ]]S = [[[[comp ]]L (s )]]T
7
Ewaluacja w j¦zykach funkcyjnych
J¦zyk
I
Λn
Program dowolny zamkni¦ty
t
I
Warto±¢ programu λ − term:
:= x | t t | λx .t
λ-abstrakcja:
v
I
I
Strategie ewaluacji i równowa»no±¢ programów
:= λx .t
Strategia normalna (`woªanie-przez-nazw¦', 'call-by-name')
Semantyka operacyjna maªych kroków realizuj¡ca t¦ strategi¦:
r
I
(λx .t ) s →n t [s /x ]
ru
→n s
→n s u
Obserwacyjna równowa»no±¢:
t ∼ctx s
(
=
⇔ 8C .C [t ] = C [s ]
oznacza, »e oba zatrzymuj¡ si¦ i zwracaj¡ te same warto±ci, lub
oba nie zatrzymuj¡ si¦)
8
Ewaluacja w j¦zykach funkcyjnych
Strategie ewaluacji i równowa»no±¢ programów
Równowa»no±¢ programów
I
Obserwacyjna równowa»no±¢: kiedy dwa termy (fragmenty programu)
s¡ wymienialne? Kiedy mo»na jeden zast¡pi¢ drugim?
I
I
Zastosowanie: optymalizacja kodu, uproszczenie kodu
Równowa»no±¢ obserwacyjna jest wra»liwa na rozszerzenia j¦zyka
9
Ewaluacja w j¦zykach funkcyjnych
Ewaluacja w
1
a teoria
Dla ka»dego termu
r
2
Λn
→ v
λβ
r,
dla pewnej warto±ci
Dla ka»dych
Strategie ewaluacji i równowa»no±¢ programów
v
⇔ r →n v 0
dla pewnej warto±ci
v
0
.
r , s,
λβ ` r = s ⇒ r ∼ctx s .
Teoria
λβ
nie jest zupeªna: dowolne dwa termy, których ewaluacja si¦
nie zatrzymuje s¡ obserwacyjnie równowa»ne, ale nie musz¡ by¢
równe w teorii (np.
Ω i Ω (λx .x )).
10
Ewaluacja w j¦zykach funkcyjnych
Strategie ewaluacji i równowa»no±¢ programów
Równowa»no±¢ semantyki du»ych i maªych kroków
Twierdzenie
Dla ka»dego programu t
2
Λn ,
t
⇓n v ⇔ t →n v .
11
Ewaluacja w j¦zykach funkcyjnych
J¦zyk
I
Λv
Program dowolny zamkni¦ty
t
I
Warto±¢ programu λ − term:
:= x | t t | λx .t
λ-abstrakcja:
v
I
I
Strategie ewaluacji i równowa»no±¢ programów
:= λx .t
Strategia aplikatywna (`woªanie-przez-warto±¢', 'call-by-value')
Semantyka maªych kroków realizuj¡ca t¦ strategi¦:
(λx .t ) v →v t [v /x ]
r →v s
r u →v s u
r →v s
v r →v v s
12
Ewaluacja w j¦zykach funkcyjnych
Ewaluacja w
I
I
Λv
a teoria
λβv
Jaki jest zwi¡zek ewaluacji w
Zdeniujmy teori¦
λβv
Strategie ewaluacji i równowa»no±¢ programów
Λv
z teori¡
λβ?
przez zastrze»enie relacji
β-konwersji do reguªy
(λx .t ) v = t [v /x ]
I
Teori¦
λβv
deniuj¡ reguªy:
s
s
=u
u =s
=s
r
=s
s
r
=u
=u
s
=r
st =rt
(λx .t ) v = t [v /x ]
s
I
I
=t
rs =rt
Podobnie jak w przypadku
s
=t
λx .s = λx .t
λβ,
deniujemy relacj¦ redukcji
→
przez
skierowanie równa«
Powstaªa relacja redukcji ma wªasno±ci CR i standardyzacji
13
Ewaluacja w j¦zykach funkcyjnych
Λv
Ewaluacja w
1
Dla ka»dego termu
r
2
a teoria
→ v
Teoria
λβv ,
λβv
r , s,
c.d.
r,
dla pewnej warto±ci
Dla ka»dych
Strategie ewaluacji i równowa»no±¢ programów
λβv
`
v
⇔ r →v v 0
r
= s ⇒ r ∼ctx s .
dla pewnej warto±ci
v
0
.
nie jest zupeªna: dowolne dwa termy, których ewaluacja
si¦ nie zatrzymuje s¡ obserwacyjnie równowa»ne, ale nie musz¡ by¢
równe w teorii (np.
Ω i Ω (λx .x )).
14
Ewaluacja w j¦zykach funkcyjnych
Translacja mi¦dzy
I
Translacja Λv
i
Strategie ewaluacji i równowa»no±¢ programów
Λn
: Λv → Λn
x
= λk .k x
λx .t = λk .k (λx .t )
t1 t2
I
= λk .t1 (λv1 .t2 (λv2 .v1 v2 k ))
Translacja przeprowadza termy do stylu kontynuacyjnego
(continuation-passing style, CPS)
15
Strategie ewaluacji i równowa»no±¢ programów
Ewaluacja w j¦zykach funkcyjnych
Translacja mi¦dzy
Λn i Λv ,
c.d.
Wªasno±ci termów w CPS:
I
Niezale»no±¢ ewaluacji od strategii redukcyjnej j¦zyka deniuj¡cego:
t (λx .x )
I
Symulacja ewaluacji:
→v v ⇔ t (λx .x ) →n φ(v ),
t
I
gdzie
φ(λx .r ) = λx .r .
Translacja:
λβv
I
→v v ⇔ t (λx .x ) →n v
`
r
= s ⇒ λβv
`
r
= s ⇒ λβn
r
=s
Wªasno±¢ zachowania równowa»no±ci obserwacyjnej:
t (λx .x )∼n s (λx .x )
I
`
⇒ t ∼v s
Odwrotna implikacja nie zachodzi
16
Ewaluacja w j¦zykach funkcyjnych
Strategie ewaluacji i równowa»no±¢ programów
Redeksy administratywne
I
Translacja :
narzuca porz¡dek ewaluacji podtermów
nazywa cz¦±ciowe wyniki oblicze«
I
Translacja wprowadza dodatkowe redeksy (niewyst¦puj¡ce w termie
¹ródªowym), tzw. redeksy administratywne
I
Redeksy administratywne mog¡ by¢ zredukowane, prowadz¡c do
bardziej zwi¦zªej postaci termu
I
Programuj¡c translacj¦, mo»na wykona¢ wszystkie redeksy
administratywne w jednym przej±ciu (u»ywaj¡c ewaluacji na poziomie
metaj¦zyka do ich zredukowania)
17
Ewaluacja w j¦zykach funkcyjnych
Strategie ewaluacji i równowa»no±¢ programów
Przykªad
λx .x = λk .k (λxk 0 .k 0 x )
y
= λk .k y
(λx .x ) y = λk .(λxk .k x ) y k
18
Ewaluacja w j¦zykach funkcyjnych
Translacja mi¦dzy
I
Translacja Strategie ewaluacji i równowa»no±¢ programów
Λn i Λv
: Λv → Λn
x
= x
λx .t = λk .k (λx .t )
t1 t2
= λk .t1 (λv .v t2 k )
19
Strategie ewaluacji i równowa»no±¢ programów
Ewaluacja w j¦zykach funkcyjnych
Translacja mi¦dzy
Λn i Λv ,
c.d.
Wªasno±ci termów w CPS:
I
Niezale»no±¢ ewaluacji od strategii redukcyjnej j¦zyka deniuj¡cego:
t (λx .x )
I
Symulacja ewaluacji:
→n v ⇔ t (λx .x ) →v φ(v ),
t
I
gdzie
φ(λx .r ) = λx .r .
Translacja:
λβn
I
→v v ⇔ t (λx .x ) →n v
`
r
= s ⇔ λβv
`
r
= s ⇔ λβn
r
=s
Wªasno±¢ zachowania równowa»no±ci obserwacyjnej:
t (λx .x )∼v s (λx .x )
I
`
⇒ t ∼n s
Odwrotna implikacja nie jest prawdziwa
20
Strategie ewaluacji i równowa»no±¢ programów
Ewaluacja w j¦zykach funkcyjnych
Interpreter dla
I
Λn
Rozwa»my nieformaln¡ denicj¦ iterpretera dla rachunku lambda
(j¦zyka S):
E (Var x )
=x
E (App r s )
E (Abs f )
I
I
= (E (r ))(E (s ))
= λv .E (f v )
J¦zyk deniuj¡cy L lambda rachunek z pewn¡ strategi¡ ewaluacji
Ka»da konstrukcja j¦zyka deniowanego jest modelowana przez t¦
odpowiadaj¡c¡ cech¦ j¦zyka deniuj¡cego
I
Pytanie: jaka jest strategia, któr¡ nadamy j¦zykowi deniowanemu?
Co si¦ stanie, je±li j¡ zmienimy?
21
Strategie ewaluacji i równowa»no±¢ programów
Ewaluacja w j¦zykach funkcyjnych
Interpreter dla
I
Λn
Rozwa»my nieformaln¡ denicj¦ iterpretera dla rachunku lambda
(j¦zyka S):
E (Var x )
=x
E (App r s )
E (Abs f )
I
I
= (E (r ))(E (s ))
= λv .E (f v )
J¦zyk deniuj¡cy L lambda rachunek z pewn¡ strategi¡ ewaluacji
Ka»da konstrukcja j¦zyka deniowanego jest modelowana przez t¦
odpowiadaj¡c¡ cech¦ j¦zyka deniuj¡cego
I
Pytanie: jaka jest strategia, któr¡ nadamy j¦zykowi deniowanemu?
Co si¦ stanie, je±li j¡ zmienimy?
I
I
Je±li L jest CBN, to
App (Abs
(λxy .y )) Ω
ewaluuje do
λy .E (y )
Je±li L jest CBV, to
App (Abs
(λxy .y )) Ω
nie zatrzymuje si¦
21
Ewaluacja w j¦zykach funkcyjnych
Interpreter dla
I
Λn ,
c.d.
Przy u»yciu kontynuacji mo»emy narzuci¢ konkretn¡ strategi¦:
E (Var x ) c
=cx
E (App r s ) c
E (Abs f ) c
I
Strategie ewaluacji i równowa»no±¢ programów
= E (r ) (λf .E (s ) (λv .f v c ))
= c (λvc1 .E (f v ) c1 )
Wniosek: Semantyka j¦zyka ¹ródªowego zale»y od semantyki j¦zyka
deniuj¡cego w tym przypadku nadali±my j¦zykowi ¹ródªowemu
semantyk¦ aplikatywn¡ przez jawne wyspecykowanie kolejno±ci
oblicze« za pomoc¡ kontynuacji
22
Ewaluacja w j¦zykach funkcyjnych
Strategie ewaluacji i równowa»no±¢ programów
Interpreter ze ±rodowiskiem
I
I
Je±li nie chcemy u»ywa¢ HOAS ani podstawienia, standardowym
rozwi¡zaniem jest interpreter ze ±rodowiskiem (environment)
u»ycie ±rodowiska umo»liwia opó¹nione podstawienie dopiero
wtedy, gdy ewaluacja dotrze do zmiennej, wybieramy ze ±rodowiska
I
I
to, co nale»aªo podstawi¢ (domkni¦cie)
domkni¦cie (closure) jest par¡ (term, ±rodowisko)
±rodowisko jest list¡ par (zmienna, domkni¦cie)
e
:= | (x , c ) :: e
c
I
:= (t , e )
Interpreter ze ±rodowiskiem:
E (Var x ) e
= lookup e x
E (App r s ) e
= (E (r ) e )(E (s ) e )
E (Abs (x , r )) e
= λv .E (r ) (extend x v e )
23
Ewaluacja w j¦zykach funkcyjnych
Ewaluacja w kontekstach
Plan
1
Ewaluacja w j¦zykach funkcyjnych
Strategie ewaluacji i równowa»no±¢ programów
Ewaluacja w kontekstach
Maszyny abstrakcyjne
24
Ewaluacja w j¦zykach funkcyjnych
Ewaluacja w kontekstach
Semantyka redukcyjna
I
I
I
Semantyka maªych kroków
Jawny kontekst oblicze«
Otrzymywana bezpo±rednio z denicji poj¦cia redukcji i redukcji
jednokrokowej
25
Ewaluacja w kontekstach
Ewaluacja w j¦zykach funkcyjnych
Strategia w
I
Λn
za pomoc¡ kontekstów
Konteksty wyra»aj¡ reguªy kompatybilno±ci:
r
ru
I
→n s
→n s u
Skªadnia kontekstów:
Cn := [ ]
I
|
Cn [[ ] t ]
Semantyk¦ kontekstów deniuje funkcja wstawiania:
[ ][r ] = r
Cn [[ ] s ][r ] = Cn [(r s )]
I
Wówczas strategi¦ ewaluacji mo»na przedstawi¢ nast¦puj¡co:
Cn [(λx .r ) s ] →n Cn [r [s /x ]]
26
Ewaluacja w j¦zykach funkcyjnych
Ewaluacja w kontekstach
Semantyka redukcyjna, c.d.
I
I
I
I
I
gramatyka termów
gramatyka kontekstów
funkcja wstawiania
poj¦cie redukcji (jeden krok obliczenia)
warto±ciami s¡ termy, które nie s¡ redeksami i które nie dadz¡ si¦
zapisa¢ w postaci
C [t ]
27
Ewaluacja w kontekstach
Ewaluacja w j¦zykach funkcyjnych
Strategia w
I
Λv
za pomoc¡ kontekstów
Mamy 2 reguªy kompatybilno±ci:
→v
→v
→v
v r →v
r
ru
r
I
I
s
su
s
vs
Skªadnia kontekstów:
Cv := [ ]
|
Cv [[ ] t ]
|
Cv [v [ ]]
Denicja funkcji wstawiania:
[ ][r ] = r
I
Cv [[ ] s ][r ] = Cv [r s ]
Cv [v [ ]][r ] = Cv [v r ]
Wówczas strategi¦ ewaluacji mo»na przedstawi¢ nast¦puj¡co:
Cv [(λx .r ) v ] →n Cv [r [v /x ]]
28
Ewaluacja w j¦zykach funkcyjnych
Ewaluacja w kontekstach
Wªasno±¢ jednoznacznego rozkªadu
I
Je±li strategia jest deterministyczna, to mamy wªasno±¢
jednoznacznego rozkªadu:
Semantyka redukcyjna ma wªasno±¢ jednoznacznego rozkªadu, je±li dla
ka»dego termu t nieb¦d¡cego warto±ci¡, istnieje dokªadnie jeden kontekst
C
i dokªadnie jeden (potencjalny) redeks r taki, »e
I
C [r ] = t.
Semantyka przy CBV i CBN ma wªasno±¢ jednoznacznego rozkªadu.
29
Ewaluacja w kontekstach
Ewaluacja w j¦zykach funkcyjnych
Potencjalne redeksy
I
Redeksem potencjalnym nazywamy term, który mo»e by¢ albo
redeksem wªa±ciwym, albo termem niepoprawnym w sensie
semantyki j¦zyka (stuck term).
I
Λn
Rozwa»my rozszerzenie
o staªe liczbowe dn e i staª¡
S
reprezentuj¡c¡ operacj¦ nast¦pnika.
I
I
I
Warto±ci:
v
:= λx .r |
Potencjalne redeksy:
r
dn e
:= v t | Sv
Dodatkowe reguªy redukcji:
S dn e
I
Termy postaci dn e r lub
S λx .r
→n dn + 1e
s¡ poprawne skªadniowo, ale
niepoprawne semantycznie nie mo»na ich ewaluowa¢, ale nie s¡
poprawnymi warto±ciami
30
Ewaluacja w j¦zykach funkcyjnych
Ewaluacja w kontekstach
Interpreter
I
Semantyka redukcyjna prowadzi do nast¦puj¡cej implementacji
procesu ewaluacji:
1
2
3
4
Napisz funkcj¦ dekomponuj¡c¡ term na redeks i kontekst
Wykonaj
β-redukcj¦
Wstaw zredukowany term do kontekstu
Powtarzaj a» do osi¡gni¦cia warto±ci (je±li istnieje)
31
Ewaluacja w j¦zykach funkcyjnych
Ewaluacja w kontekstach
Refocusing optymalizacja ewaluacji
t0
→1
/ t1
→1
/ t2
→1
/
33
Ewaluacja w j¦zykach funkcyjnych
Ewaluacja w kontekstach
Refocusing optymalizacja ewaluacji
→1
t0
??
??
??
??
?
β
/
/ t1
> ??
~
??
plug ~~
??
~
~
??
~
~
?
~~
→1
β
/
→1
/ t2
>~ ??
??
plug ~~
??
~~
??
~
~
?
~~
/
β
/
33
Ewaluacja w j¦zykach funkcyjnych
Ewaluacja w kontekstach
Refocusing optymalizacja ewaluacji
t0
??
??
??
??
?
_ _ _ _/ I
→1
β
/ t1
> ??
~
??
plug ~~
??
~
~
??
~
~
?
~~
/ _ _ _ _ _ _ _ _/ refocus
→1
β
→1
/ t2
>~ ??
??
plug ~~
??
~~
??
~
~
?
~~
/ _ _ _ _ _ _ _ _/ refocus
/
β
/
refocusing optymalizacja ci¡gu redukcji (bez rekonstrukcji termów
po±rednich)
I
I
I
refocus funkcja przej±cia mi¦dzy stanami
stan = (term, kontekst)
przechodnie domkni¦cie funkcji refocus (iteracja) (prawie) maszyna
abstrakcyjna
33
Ewaluacja w j¦zykach funkcyjnych
Maszyny abstrakcyjne
Plan
1
Ewaluacja w j¦zykach funkcyjnych
Strategie ewaluacji i równowa»no±¢ programów
Ewaluacja w kontekstach
Maszyny abstrakcyjne
34
Ewaluacja w j¦zykach funkcyjnych
Maszyny abstrakcyjne
Maszyny abstrakcyjne
I
I
Abstrakcyjny model implementacji j¦zyka lub symulacji wykonania
programu wedªug pewnej strategii
Maszyna abstrakcyjna jest okre±lona jako funkcja przej±cia mi¦dzy
stanami (konguracjami):
stan okre±la chwilowy stan oblicze« (ª¡cznie z ewentualnym stanem
zasobów potrzebnych do wykonania tych oblicze«)
mo»liwe przej±cia mi¦dzy stanami okre±la funkcja przej±cia
(determinizm)
wyró»niamy stan pocz¡tkowy i stan ko«cowy (lub stany ko«cowe)
I
Maszyna abstrakcyjna jest abstrakcyjnym modelem, który mo»e
pomija¢ pewne szczegóªy implementacyjne, zale»nie od zastosowania
35
Ewaluacja w j¦zykach funkcyjnych
Maszyny abstrakcyjne
Maszyna Krivine'a z podstawieniem
I
I
I
Warto±ci:
v
::= λx .t
Konteksty ewaluacyjne:
E
E [[ ] t ]
::= [ ] |
Przej±cia maszyny:
⇒
ht
i
⇒
ht
i
⇒
ht1
t
h
λx .t ,
h
E [[ ] t 0 ]
t1 t2 , E
hv
, [ ]i
[t 0 /x ],
,
E
i
E [[ ] t2 ]
i
, [ ]i ⇒ v
37
Maszyny abstrakcyjne
Ewaluacja w j¦zykach funkcyjnych
Maszyna Krivine'a ze ±rodowiskiem
I
I
I
I
Warto±ci:
v
::= (λx .t , e )
e
‘rodowisko:
::= eempty | e [x →
7
(t , e )]
E
Konteksty ewaluacyjne:
::= [ ] | ARG(t , e , E )
Przej±cia maszyny:
⇒
ht
, eempty , [ ]i
i
⇒
ht
, e 0,
i
⇒
ht
, e [x →
7
(t 0 , e 0 )],
i
⇒
ht1
t
E
0
0
λx .t , e , ARG(t , e , E )
t1 t2 , e , E
hx
h
h
h
, e,
E
i
gdzie
e (x )
E
, e , ARG(t2 , e , E )i
= (t , e 0 )
i
λx .t , e , [ ]i ⇒ (λx .t , e )
39
Ewaluacja w j¦zykach funkcyjnych
Maszyny abstrakcyjne
Strategia maszyny Krivine'a
I
Maszyna Krivine'a jest poprawna wzgl¦dem semantyki maªych kroków
Twierdzenie
Dla ka»dego programu t
t
2
Λn ,
→n v ⇔ ht , eempty , [ ]i ⇒ (v 0 , e ),
gdzie (v 0 , e ) reprezentuje warto±¢ v .
I
I
Strategia maszyny symuluje strategi¦
→n
Ka»da tranzycja w maszynie odpowiada albo
β-redukcji,
albo regule
kompatybilno±ci, która wybiera nast¦pny podterm do ewaluacji
40
Ewaluacja w j¦zykach funkcyjnych
Maszyny abstrakcyjne
‘rodowisko a podstawienie
Realizacja
I
β-redukcji:
przez podstawienie
(λx .t ) s → t [s /x ]
I
przez ±rodowisko
h
λx .t , e , ARG(t 0 , e 0 , E )i ⇒
ht
, e [x →
7
(t 0 , e 0 )],
⇒
ht
0, e 0,
hx
, e,
E
i
E
i
gdzie
E
i
e (x )
= (t 0 , e 0 )
41
Ewaluacja w j¦zykach funkcyjnych
Maszyny abstrakcyjne
‘rodowisko a podstawienie, c.d.
I
‘rodowisko:
nie ma potrzeby wykonywa¢
α-przemianowanie
umo»liwia rozumowanie przez indukcj¦ strukturaln¡ na termach
podczas ewaluacji, termy nie ulegaj¡ zmianie, wi¦c mog¡ by¢
I
kompilowane
Podstawienie:
meta-operacja
brak zwi¡zku z praktyczn¡ technik¡ implementacji ±rodowiskiem, co
utrudnia wnioskowanie o wªasno±ciach implementacji
42
Ewaluacja w j¦zykach funkcyjnych
Maszyny abstrakcyjne
Maszyna CEK ze ±rodowiskiem
I
I
I
I
Warto±ci:
v
‘rodowisko:
Konteksty:
::= [x , t , e ]
e
E
::= eempty | e [x →
7
v]
::= [ ] | ARG(t , e , E ) | FUN(v , E )
Przej±cia maszyny:
t
⇒
ht
E eval
λx .t , e , E eval
t1 t2 , e , E eval
ARG(t , e , E ), v apply
FUN([x , t , e ], E ), v apply
i
⇒
h
h
i
⇒
h
h
i
⇒
h
i
⇒
h
i
⇒
h
hx
, e,
h
h
h
, eempty ,
E
ieval
E , e (x ) apply
E , [x , t , e ] apply
t1 , e , ARG(t2 , e , E ) eval
t , e , FUN(v , E ) eval
t , e [x → v ], E eval
i
i
i
7
i
i
[ ], v iapply ⇒ v
44
Ewaluacja w j¦zykach funkcyjnych
Maszyny abstrakcyjne
Strategia maszyny CEK
I
Maszyna CEK jest poprawna wzgl¦dem semantyki maªych kroków
Twierdzenie
Dla ka»dego programu t
t
2
Λv ,
→v v ⇔ ht , eempty , [ ]i ⇒ (v 0 , e ),
gdzie (v 0 , e ) reprezentuje warto±¢ v .
I
I
Strategia maszyny symuluje strategi¦
→v
Ka»da tranzycja w maszynie odpowiada albo
β-redukcji,
albo regule
kompatybilno±ci, która wybiera nast¦pny podterm do ewaluacji
45
Ewaluacja w j¦zykach funkcyjnych
Maszyny abstrakcyjne
Maszyna SECD
I
I
Pierwsza maszyna abstrakcyjna dla lambda rachunku (Landin '64)
Konguracja maszyny hS
stos warto±ci
±rodowisko
C
stos D
E
S
, E , C , Di
zawiera:
kod
I
I
Ekstensjonalnie równowa»na maszynie CEK (strategia CBV)
Intensjonalnie realizuje inny model implementacyjny ni» CEK
46
Ewaluacja w j¦zykach funkcyjnych
Maszyny abstrakcyjne
Maszyna SECD, c.d.
t
h
⇒
[x , t , e ] :: S , E , , hS 0 , E 0 , C 0 , D 0 ii ⇒
hS
hS
0
h(λx .t , E )
, E , x :: C , D i ⇒
, E , λx .t :: C , D i ⇒
:: v :: S , E , ap :: C , D i ⇒
hS
, E , (r s ) :: C , D i ⇒
hv
:: S , eempty , ,
i
h
h
, eempty , t ,
[x , t , e ] :: S 0 , E 0 , C 0 , D 0 i
hE
h
i
(x ) :: S , E , C , D i
(λx .t , E ) :: S , E , C , D i
h
, E [x →
7
v ], t , hS , E , C , D ii
hS
, E , s :: r :: ap :: C , D i
⇒ v
47
Ewaluacja w j¦zykach funkcyjnych
Maszyny abstrakcyjne
Maszyna SECD vs. CEK
I
SECD: W momencie wywoªania funkcji bie»¡cy stan maszyny jest
zachowywany na stosie
I
I
CEK: Kontekst jest rozszerzany w momencie ewaluacji funkcji i
argumentu; wywoªanie funkcji zawsze zmniejsza kontekst
Te wªasno±ci powoduj¡, »e maszyny konsumuj¡ ró»n¡ ilo±¢ miejsca na
kontekst:
Ewaluacja
Ω
jest niesko«czona na obu maszynach
Ilo±¢ miejsca na stos konsumowana przez CEK w tej ewaluacji jest
ograniczona
Stos w SECD ro±nie nieograniczenie z ka»dym wywoªaniem funkcji
I
‘rodowisko mo»e rosn¡¢ nieograniczenie w obu przypadkach (t¦ wad¦
mo»na wyeliminowa¢)
48