Church call-by-name (x.e) e x e{x:=e x - - PowerPoint PPT Presentation

church
SMART_READER_LITE
LIVE PREVIEW

Church call-by-name (x.e) e x e{x:=e x - - PowerPoint PPT Presentation

T HE C ALL-BY-NEED L AMBDA C ALCULUS, R EVISITED Stephen Chang and Matthias Felleisen Northeastern University 26/3/2012 Church call-by-name (x.e) e x e{x:=e x } ()


slide-1
SLIDE 1

THE CALL-BY-NEED LAMBDA CALCULUS, REVISITED

Stephen Chang and Matthias Felleisen Northeastern University

26/3/2012

slide-2
SLIDE 2

Church

slide-3
SLIDE 3
slide-4
SLIDE 4
slide-5
SLIDE 5
slide-6
SLIDE 6
slide-7
SLIDE 7
slide-8
SLIDE 8

λ

call-by-name

(λx.e) ex → e{x:=ex} (β)

slide-9
SLIDE 9

λ

call-by-name

E[(λx.e) ex] → E[e{x:=ex}] (β)

"leftmost-outermost"

E @ λx e ex

slide-10
SLIDE 10

λv

call-by-value

E[(λx.e) vx] → E[e{x:=vx}] (βv)

"leftmost-outermost"

E @ λx e vx

slide-11
SLIDE 11

call-by-need

slide-12
SLIDE 12

call-by-need 1) Evaluate argument only when needed.

slide-13
SLIDE 13

call-by-need 1) Evaluate argument only when needed. 2) Evaluate argument at most once.

slide-14
SLIDE 14

λneed

? ?

call-by-need 1) Evaluate argument only when needed. 2) Evaluate argument at most once.

slide-15
SLIDE 15

λneed

λneed-af

Ariola/Felleisen '94,'95,'97

?

=

?

=

λneed-mow

Maraist/Odersky/Wadler '94,'95,'98

call-by-need 1) Evaluate argument only when needed. 2) Evaluate argument at most once.

slide-16
SLIDE 16

λneed

λneed-af

Ariola/Felleisen '94,'95,'97

  • λneed-mow

Maraist/Odersky/Wadler '94,'95,'98

call-by-need 1) Evaluate argument only when needed. 2) Evaluate argument at most once.

slide-17
SLIDE 17

λneed

λneed-af

Ariola/Felleisen '94,'95,'97

  • λneed-mow

Maraist/Odersky/Wadler '94,'95,'98

call-by-need

slide-18
SLIDE 18

λneed

λneed-af

Ariola/Felleisen '94,'95,'97

  • λneed-mow

Maraist/Odersky/Wadler '94,'95,'98

call-by-need

x

slide-19
SLIDE 19

λneed

λneed-af

Ariola/Felleisen '94,'95,'97

  • λneed-mow

Maraist/Odersky/Wadler '94,'95,'98

call-by-need

x λx

slide-20
SLIDE 20

λneed

λneed-af

Ariola/Felleisen '94,'95,'97

  • λneed-mow

Maraist/Odersky/Wadler '94,'95,'98

call-by-need

x λx ex

slide-21
SLIDE 21

λneed

λneed-af

Ariola/Felleisen '94,'95,'97

  • λneed-mow

Maraist/Odersky/Wadler '94,'95,'98

call-by-need

x λx ex → → @ λx x ex (reshuffle)

slide-22
SLIDE 22

λneed

λneed-af

Ariola/Felleisen '94,'95,'97

  • λneed-mow

Maraist/Odersky/Wadler '94,'95,'98

call-by-need

@ λx x vx → @ λx vx vx (like β)

slide-23
SLIDE 23
  • ur λneed

call-by-need

x λx ex

slide-24
SLIDE 24
  • ur λneed

call-by-need

x λx ex

slide-25
SLIDE 25
  • ur λneed

call-by-need "demand path"

x λx ex

slide-26
SLIDE 26
  • ur λneed

call-by-need "demand path"

x λx ex (βneed)

slide-27
SLIDE 27

OLD λneed: OPERATIONAL OVERVIEW 1) Find the next demanded variable. 2) Find its corresponding argument and evaluate it. 3) Substitute evaluated argument for demanded variable.

slide-28
SLIDE 28

OLD λneed: OPERATIONAL OVERVIEW 1) Find the next demanded variable. 2) Find its corresponding argument and evaluate it. 3) Substitute evaluated argument for demanded variable.

slide-29
SLIDE 29

OLD λneed: DEMAND CONTEXTS

D = [ ] | D e

slide-30
SLIDE 30

OLD λneed: DEMAND CONTEXTS

D = [ ] | D e

slide-31
SLIDE 31

OLD λneed: DEMAND CONTEXTS

D = [ ] | D e | (λx.D) e

slide-32
SLIDE 32

OLD λneed: DEMAND CONTEXTS

D = [ ] | D e | (λx.D) e

slide-33
SLIDE 33

OLD λneed: DEMAND CONTEXTS

D = [ ] | D e | (λx.D) e

slide-34
SLIDE 34

OLD λneed: DEMAND CONTEXTS

D = [ ] | D e | (λx.D) e

binding structure

slide-35
SLIDE 35

OLD λneed: DEMAND CONTEXTS

D = [ ] | D e | B[D]

binding structure

B = [ ] | (λx.B) e

slide-36
SLIDE 36

OLD λneed: BINDING STRUCTURE

B = [ ] | (λx.B) e

(λx.(λy.(λz. ...) ez) ey) ex

slide-37
SLIDE 37

OLD λneed: BINDING STRUCTURE

B = [ ] | (λx.B) e

(λx.(λy.(λz. ...) ez) ey) ex

slide-38
SLIDE 38

OLD λneed: BINDING STRUCTURE

B = [ ] | (λx.B) e

(λx.(λy.(λz. ...) ez) ey) ex

slide-39
SLIDE 39

OLD λneed: BINDING STRUCTURE

B = [ ] | (λx.B) e

(λx.(λy.(λz. ...) ez) ey) ex @ λx @ λy @ λz ... ez ey ex

slide-40
SLIDE 40

OLD λneed: RESHUFFLING OF BINDINGS

B = [ ] | (λx.B) e

(((λx.λy.λz. ...) ex) ey) ez @ @ @ λx λy λz ... ex ey ez

slide-41
SLIDE 41

OLD λneed: RESHUFFLING OF BINDINGS

B = [ ] | (λx.B) e

(((λx.λy.λz. ...) ex) ey) ez @ @ @ λx λy λz ... ex ey ez

slide-42
SLIDE 42

OLD λneed: RESHUFFLING OF BINDINGS

B = [ ] | (λx.B) e

(((λx.λy.λz. ...) ex) ey) ez @ @ @ λx λy λz ... ex ey ez

slide-43
SLIDE 43

OLD λneed: RESHUFFLING OF BINDINGS

B = [ ] | (λx.B) e

((λx.(λy.λz. ...) ey) ex) ez @ @ λx @ λy λz ... ey ex ez

slide-44
SLIDE 44

OLD λneed: RESHUFFLING OF BINDINGS

B = [ ] | (λx.B) e

((λx.(λy.λz. ...) ey) ex) ez @ @ λx @ λy λz ... ey ex ez

slide-45
SLIDE 45

OLD λneed: RESHUFFLING OF BINDINGS

B = [ ] | (λx.B) e

(λx.((λy.λz. ...) ey) ez) ex @ λx @ @ λy λz ... ey ez ex

slide-46
SLIDE 46

OLD λneed: RESHUFFLING OF BINDINGS

B = [ ] | (λx.B) e

(λx.((λy.λz. ...) ey) ez) ex @ λx @ @ λy λz ... ey ez ex

slide-47
SLIDE 47

OLD λneed: RESHUFFLING OF BINDINGS

B = [ ] | (λx.B) e

(λx.(λy.(λz. ...) ez) ey) ex @ λx @ λy @ λz ... ez ey ex

slide-48
SLIDE 48

PROBLEMS WITH OLD CALL-BY-NEED CALCULUS

1) Reshuffling rules.

slide-49
SLIDE 49

OLD λneed: OPERATIONAL OVERVIEW 1) Find the next demanded variable. 2) Find its corresponding argument and evaluate it. 3) Substitute evaluated argument for demanded variable.

slide-50
SLIDE 50

OLD λneed: OPERATIONAL OVERVIEW 1) Find the next demanded variable. 2) Find its corresponding argument and evaluate it. 3) Substitute evaluated argument for demanded variable.

slide-51
SLIDE 51

OLD λneed: OPERATIONAL OVERVIEW 1) Find the next demanded variable. 2) Find its corresponding argument and evaluate it. 3) Substitute evaluated argument for demanded variable.

slide-52
SLIDE 52

OLD λneed: DEREFERENCING

(λx.(λy.(λz. ...) ez) ey) ex @ λx @ λy @ λz ... ez ey ex

slide-53
SLIDE 53

OLD λneed: DEREFERENCING

(λx.(λy.(λz. y ) ez) ey) ex @ λx @ λy @ λz y ez ey ex

slide-54
SLIDE 54

OLD λneed: DEREFERENCING

(λx.(λy.(λz. y ) ez) vy) ex @ λx @ λy @ λz y ez vy ex

slide-55
SLIDE 55

OLD λneed: DEREFERENCING

(λx.(λy.(λz. y ) ez) vy) ex @ λx @ λy @ λz y ez vy ex

(λy.D[y]) v → (λy.D[v]) v (deref)

slide-56
SLIDE 56

OLD λneed: DEREFERENCING

(λx.(λy.(λz. vy ) ez) vy) ex @ λx @ λy @ λz vy ez vy ex

(λy.D[y]) v → (λy.D[v]) v (deref)

slide-57
SLIDE 57

PROBLEMS WITH OLD CALL-BY-NEED CALCULUS

1) Reshuffling rules. 2) Arguments and applications never go away.

slide-58
SLIDE 58

NEW λneed: HANDLING ARBITRARY BINDING STRUCTURE

@ λx @ λy @ λz ... ez ey ex

slide-59
SLIDE 59

NEW λneed: HANDLING ARBITRARY BINDING STRUCTURE

@ λx @ λy @ λz ... ez ey ex B = [ ] | (λx.B) e

slide-60
SLIDE 60

NEW λneed: HANDLING ARBITRARY BINDING STRUCTURE

@ @ @ λx λy λz ... ex ey ez A = [ ] | ???

slide-61
SLIDE 61

NEW λneed: HANDLING ARBITRARY BINDING STRUCTURE

@ λx @ @ λy λz ... ey ez ex A = [ ] | ???

slide-62
SLIDE 62

NEW λneed: HANDLING ARBITRARY BINDING STRUCTURE

@ @ λx @ λy λz ... ey ex ez A = [ ] | ???

slide-63
SLIDE 63

NEW λneed: HANDLING ARBITRARY BINDING STRUCTURE

@ @ λx @ λy λz ... ey ex ez A = [ ] | (λx.A) e

slide-64
SLIDE 64

NEW λneed: HANDLING ARBITRARY BINDING STRUCTURE

@ @ λx @ λy λz ... ey ex ez A = [ ] | (λx.A) e

slide-65
SLIDE 65

NEW λneed: HANDLING ARBITRARY BINDING STRUCTURE

@ @ λx @ λy λz ... ey ex ez A = [ ] | (λx.A) e

slide-66
SLIDE 66

NEW λneed: HANDLING ARBITRARY BINDING STRUCTURE

@ @ λx @ λy λz ... ey ex ez A = [ ] | A[(λx.A)] e

slide-67
SLIDE 67

NEW λneed: HANDLING ARBITRARY BINDING STRUCTURE

@ @ λx @ λy λz ... ey ex ez A = [ ] | A[(λx.A)] e D = [ ] | D e | A[D]

slide-68
SLIDE 68

PROBLEMS WITH OLD CALL-BY-NEED CALCULUS

1) Reshuffling rules. 2) Arguments and applications never go away.

slide-69
SLIDE 69

NEW λneed: SPLITTING CONTEXTS

@ @ @ λx λy λz ... ex ey ez

slide-70
SLIDE 70

NEW λneed: SPLITTING CONTEXTS

@ @ @ λx λy λz ... ex ey ez A[ ...]

slide-71
SLIDE 71

NEW λneed: SPLITTING CONTEXTS

@ @ @ λx λy λz D[y] ex ey ez A[D[y]]

slide-72
SLIDE 72

NEW λneed: SPLITTING CONTEXTS

@ @ @ λx λy λz D[y] ex ey ez A[D[y]]

slide-73
SLIDE 73

NEW λneed: SPLITTING CONTEXTS

@ @ @ λx λy λz D[y] ex ey ez ... (λy...D[y])...ey...

slide-74
SLIDE 74

NEW λneed: SPLITTING CONTEXTS

@ @ @ λx λy λz D[y] ex ey ez ... (λy...D[y])...ey...

slide-75
SLIDE 75

NEW λneed: SPLITTING CONTEXTS

@ @ @ λx λy λz D[y] ex ey ez ...A[λy...D[y] ] ey ...

slide-76
SLIDE 76

NEW λneed: SPLITTING CONTEXTS

@ @ @ λx λy λz D[y] ex ey ez ...A[λy...D[y] ] ey ...

slide-77
SLIDE 77

NEW λneed: SPLITTING CONTEXTS

@ @ @ λx λy λz D[y] ex ey ez ...A[λy. [D[y]]] ey ... = [ ] | A[λx. ]

slide-78
SLIDE 78

NEW λneed: SPLITTING CONTEXTS

@ @ @ λx λy λz D[y] ex ey ez ...A[λy. [D[y]]] ey ... = [ ] | A[λx. ]

slide-79
SLIDE 79

NEW λneed: SPLITTING CONTEXTS

@ @ @ λx λy λz D[y] ex ey ez [A[λy. [D[y]]] ey] = [ ] | A[λx. ] = [ ] | A[ ] e

slide-80
SLIDE 80

NEW λneed: SPLITTING CONTEXTS

@ @ @ λx λy λz D[y] ex vy ez [A[λy. [D[y]]] vy] = [ ] | A[λx. ] = [ ] | A[ ] e

slide-81
SLIDE 81

NEW λneed: βneed

@ @ @ λx λy λz D[y] ex vy ez [A[λy. [D[y]]] vy]

[A[ [D[y]]{y:=vy}]] (βneed)

slide-82
SLIDE 82

NEW λneed: βneed

@ @ @ λx λy λz D[y] ex vy ez → @ @ λx λz D[y]{y:=vy} ex ez [A[λy. [D[y]]] vy]

[A[ [D[y]]{y:=vy}]] (βneed)

slide-83
SLIDE 83

PROBLEMS WITH PREVIOUS CALL-BY-NEED CALCULUS

1) Reassociation rules. 2) Function calls not resolved.

slide-84
SLIDE 84

NEW λneed: EVALUATING ARGUMENTS

D = [ ] | D e | A[D]

slide-85
SLIDE 85

NEW λneed: EVALUATING ARGUMENTS

D = [ ] | D e | A[D] | [A[λy. [D[y]]] D]

slide-86
SLIDE 86

OTHER INTERESTING THINGS IN THE PAPER . . . Correspondence to Launchbury's (1993) machine semantics.

slide-87
SLIDE 87

OTHER INTERESTING THINGS IN THE PAPER . . . Correspondence to Launchbury's (1993) machine semantics. Confluence, Standardization properties.

slide-88
SLIDE 88

OTHER INTERESTING THINGS IN THE PAPER . . . Correspondence to Launchbury's (1993) machine semantics. Confluence, Standardization properties. Soundness with respect to observational equivalence.

slide-89
SLIDE 89

Thanks!