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