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