rachunek lambda i jezyki programowaniamabi/lambda/wyklad4.pdf · literatura (wybór) j¦zyki...

25

Upload: others

Post on 14-Aug-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

Rachunek Lambda

i J¦zyki Programowania

Maªgorzata Biernacka

Instytut Informatyki UWr

Wykªad 4

1

Page 2: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

Plan

1 Rozszerzenia rachunku lambda

Konstrukcje skªadniowe

Rachunek domkni¦¢

Leniwa ewaluacja

2 Literatura (wybór)

2

Page 3: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

Rozszerzenia rachunku lambda

Plan

1 Rozszerzenia rachunku lambda

Konstrukcje skªadniowe

Rachunek domkni¦¢

Leniwa ewaluacja

2 Literatura (wybór)

3

Page 4: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

Rozszerzenia rachunku lambda Konstrukcje skªadniowe

Plan

1 Rozszerzenia rachunku lambda

Konstrukcje skªadniowe

Rachunek domkni¦¢

Leniwa ewaluacja

2 Literatura (wybór)

4

Page 5: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

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

Page 6: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

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

Page 7: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

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

Page 8: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

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

Page 9: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

Rozszerzenia rachunku lambda Rachunek domkni¦¢

Plan

1 Rozszerzenia rachunku lambda

Konstrukcje skªadniowe

Rachunek domkni¦¢

Leniwa ewaluacja

2 Literatura (wybór)

9

Page 10: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

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

Page 11: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

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

Page 12: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

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

Page 13: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

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

Page 14: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

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

Page 15: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

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

Page 16: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

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

Page 17: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

Rozszerzenia rachunku lambda Leniwa ewaluacja

Plan

1 Rozszerzenia rachunku lambda

Konstrukcje skªadniowe

Rachunek domkni¦¢

Leniwa ewaluacja

2 Literatura (wybór)

17

Page 18: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

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

Page 19: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

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

Page 20: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

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

Page 21: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

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

Page 22: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

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

Page 23: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

Literatura (wybór)

Plan

1 Rozszerzenia rachunku lambda

Konstrukcje skªadniowe

Rachunek domkni¦¢

Leniwa ewaluacja

2 Literatura (wybór)

23

Page 24: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

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

Page 25: Rachunek Lambda i Jezyki Programowaniamabi/lambda/wyklad4.pdf · Literatura (wybór) J¦zyki programowania I Podr¦czniki 1 M. Felleisen, M. Flatt Programming languages and lambda

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