THE CALL-BY-NEED LAMBDA CALCULUS, REVISITED Stephen Chang and Matthias Felleisen Northeastern University 26/3/2012 1
Church 12
13
24
35
46
57
λ call-by-name (.e) e{x:= } (β) 68-69
λ call-by-name E[(.e) ] E[e{x:= }] (β) "leftmost-outermost" e E 70
λ v call-by-value E[(.e) v x ] E[e{x:=v x }] (β v ) "leftmost-outermost" e E v x 71
call-by-need 72
call-by-need 1) Evaluate argument only when needed. 73
call-by-need 1) Evaluate argument only when needed. 2) Evaluate argument at most once. 74
λ?? need call-by-need 1) Evaluate argument only when needed. 2) Evaluate argument at most once. 75
λ need-af Ariola/Felleisen '94,'95,'97? = λ need? = λ need-mow Maraist/Odersky/Wadler '94,'95,'98 call-by-need 1) Evaluate argument only when needed. 2) Evaluate argument at most once. 76
λ need-af Ariola/Felleisen '94,'95,'97 λ need λ need-mow Maraist/Odersky/Wadler '94,'95,'98 call-by-need 1) Evaluate argument only when needed. 2) Evaluate argument at most once. 77
λ need-af Ariola/Felleisen '94,'95,'97 λ need λ need-mow Maraist/Odersky/Wadler '94,'95,'98 call-by-need 78
λ need-af Ariola/Felleisen '94,'95,'97 λ need λ need-mow Maraist/Odersky/Wadler '94,'95,'98 call-by-need x 79
λ need-af Ariola/Felleisen '94,'95,'97 λ need λ need-mow Maraist/Odersky/Wadler '94,'95,'98 call-by-need x 80
λ need-af Ariola/Felleisen '94,'95,'97 λ need λ need-mow Maraist/Odersky/Wadler '94,'95,'98 call-by-need x 81
λ need-af Ariola/Felleisen '94,'95,'97 λ need λ need-mow Maraist/Odersky/Wadler '94,'95,'98 call-by-need x x (reshuffle) 92
λ need-af Ariola/Felleisen '94,'95,'97 λ need λ need-mow Maraist/Odersky/Wadler '94,'95,'98 call-by-need v x v x x v x (like β) 103
our λ need call-by-need x 104
our λ need call-by-need x 105
our λ need call-by-need x "demand path" 106
our λ need call-by-need x (β need ) "demand path" 107
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. 108
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. 109
OLD λ need : DEMAND CONTEXTS D = [ ] D e 110
OLD λ need : DEMAND CONTEXTS D = [ ] D e 111
OLD λ need : DEMAND CONTEXTS D = [ ] D e (.D) e 112
OLD λ need : DEMAND CONTEXTS D = [ ] D e (.D) e 113
OLD λ need : DEMAND CONTEXTS D = [ ] D e (.D) e 114
OLD λ need : DEMAND CONTEXTS D = [ ] D e (.D) e binding structure 115
OLD λ need : DEMAND CONTEXTS D = [ ] D e B[D] binding structure B = [ ] (.B) e 116
OLD λ need : BINDING STRUCTURE B = [ ] (.B) e (.(λy.(λz....) e z ) e y ) 117
OLD λ need : BINDING STRUCTURE B = [ ] (.B) e (.(λy.(λz....) e z ) e y ) 118
OLD λ need : BINDING STRUCTURE B = [ ] (.B) e (.(λy.(λz....) e z ) e y ) 119
OLD λ need : BINDING STRUCTURE B = [ ] (.B) e (.(λy.(λz....) e z ) e y ) λy λz... e z e y 130
OLD λ need : RESHUFFLING OF BINDINGS B = [ ] (.B) e (((.λy.λz....) ) e y ) e z λy λz... e y e z 131
OLD λ need : RESHUFFLING OF BINDINGS B = [ ] (.B) e (((.λy.λz....) ) e y ) e z λy λz... e y e z 132
OLD λ need : RESHUFFLING OF BINDINGS B = [ ] (.B) e (((.λy.λz....) ) e y ) e z λy λz... e y e z 133
OLD λ need : RESHUFFLING OF BINDINGS B = [ ] (.B) e ((.(λy.λz....) e y ) ) e z λy λz... e y e z 149
OLD λ need : RESHUFFLING OF BINDINGS B = [ ] (.B) e ((.(λy.λz....) e y ) ) e z λy λz... e y e z 150
OLD λ need : RESHUFFLING OF BINDINGS B = [ ] (.B) e (.((λy.λz....) e y ) e z ) λy λz... e z e y 161
OLD λ need : RESHUFFLING OF BINDINGS B = [ ] (.B) e (.((λy.λz....) e y ) e z ) λy λz... e z e y 162
OLD λ need : RESHUFFLING OF BINDINGS B = [ ] (.B) e (.(λy.(λz....) e z ) e y ) λy λz... e z e y 173
PROBLEMS WITH OLD CALL-BY-NEED CALCULUS 1) Reshuffling rules. 174
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. 175
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. 176
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. 177
OLD λ need : DEREFERENCING (.(λy.(λz....) e z ) e y ) λy λz... e z e y 178
OLD λ need : DEREFERENCING (.(λy.(λz. y ) e z ) e y ) λz y λy e z e y 179
OLD λ need : DEREFERENCING (.(λy.(λz. y ) e z ) v y ) λz y λy e z v y 190
OLD λ need : DEREFERENCING (.(λy.(λz. y ) e z ) v y ) λz y λy e z v y (λy.d[y]) v (λy.d[v]) v (deref) 191
OLD λ need : DEREFERENCING (.(λy.(λz. v y ) e z ) v y ) λz v y λy e z v y (λy.d[y]) v (λy.d[v]) v (deref) 202
PROBLEMS WITH OLD CALL-BY-NEED CALCULUS 1) Reshuffling rules. 2) Arguments and applications never go away. 203
NEW λ need : HANDLING ARBITRARY BINDING STRUCTURE λy λz... e z e y 204-205
NEW λ need : HANDLING ARBITRARY BINDING STRUCTURE λy λz... e z e y B = [ ] (.B) e 206
NEW λ need : HANDLING ARBITRARY BINDING STRUCTURE λy λz... e y e z A = [ ]??? 207
NEW λ need : HANDLING ARBITRARY BINDING STRUCTURE λy λz... e z e y A = [ ]??? 208
NEW λ need : HANDLING ARBITRARY BINDING STRUCTURE λy λz... e y e z A = [ ]??? 209
NEW λ need : HANDLING ARBITRARY BINDING STRUCTURE λy λz... e y e z A = [ ] (.A) e 210
NEW λ need : HANDLING ARBITRARY BINDING STRUCTURE λy λz... e y e z A = [ ] (.A) e 211
NEW λ need : HANDLING ARBITRARY BINDING STRUCTURE λy λz... e y e z A = [ ] (.A) e 212
NEW λ need : HANDLING ARBITRARY BINDING STRUCTURE λy λz... e y e z A = [ ] A[(.A)] e 213
NEW λ need : HANDLING ARBITRARY BINDING STRUCTURE λy λz... e y e z A = [ ] A[(.A)] e D = [ ] D e A[D] 214
PROBLEMS WITH OLD CALL-BY-NEED CALCULUS 1) Reshuffling rules. 2) Arguments and applications never go away. 215
NEW λ need : SPLITTING CONTEXTS λy λz... e y e z 216
NEW λ need : SPLITTING CONTEXTS λy λz... e y e z A[...] 217
NEW λ need : SPLITTING CONTEXTS λy λz D[y] e y e z A[D[y]] 218
NEW λ need : SPLITTING CONTEXTS λy λz D[y] e y e z A[D[y]] 219
NEW λ need : SPLITTING CONTEXTS λy λz D[y] e y e z... (λy...d[y])...e y... 220
NEW λ need : SPLITTING CONTEXTS λy λz D[y] e y e z... (λy...d[y])...e y... 221
NEW λ need : SPLITTING CONTEXTS λy λz D[y] e y e z...a[λy...d[y] ] e y... 222
NEW λ need : SPLITTING CONTEXTS λy λz D[y] e y e z...a[λy...d[y] ] e y... 223
NEW λ need : SPLITTING CONTEXTS λy λz D[y] e y e z...a[λy. [D[y]]] e y... = [ ] A[. ] 224
NEW λ need : SPLITTING CONTEXTS λy λz D[y] e y e z...a[λy. [D[y]]] e y... = [ ] A[. ] 225
NEW λ need : SPLITTING CONTEXTS λy λz D[y] e y e z [A[λy. [D[y]]] e y ] = [ ] A[. ] = [ ] A[ ] e 226
NEW λ need : SPLITTING CONTEXTS λy λz D[y] v y e z [A[λy. [D[y]]] v y ] = [ ] A[. ] = [ ] A[ ] e 237
NEW λ need : β need λy λz D[y] v y e z [A[λy. [D[y]]] v y ] [A[ [D[y]]{y:=v y }]] (β need) 238
NEW λ need : β need e z v y e z λy λz λz D[y] {y:=v y} D[y] [A[λy. [D[y]]] v y ] [A[ [D[y]]{y:=v y }]] (β need) 249
PROBLEMS WITH PREVIOUS CALL-BY-NEED CALCULUS 1) Reassociation rules. 2) Function calls not resolved. 250
NEW λ need : EVALUATING ARGUMENTS D = [ ] D e A[D] 251-252
NEW λ need : EVALUATING ARGUMENTS D = [ ] D e A[D] [A[λy. [D[y]]] D] 253
OTHER INTERESTING THINGS IN THE PAPER... Correspondence to Launchbury's (1993) machine semantics. 254-255
OTHER INTERESTING THINGS IN THE PAPER... Correspondence to Launchbury's (1993) machine semantics. Confluence, Standardization properties. 256
OTHER INTERESTING THINGS IN THE PAPER... Correspondence to Launchbury's (1993) machine semantics. Confluence, Standardization properties. Soundness with respect to observational equivalence. 257
Thanks! 258