Thunks and the lambda-calculus
John Hatcliff, DIKU, Computer Science Department, Copenhagen University
Olivier Danvy, DAIMI, Computer Science Department, Aarhus University
In his paper, Call-by-name, call-by-value and the lambda-calculus,
Plotkin formalized evaluation strategies and simulations using
operational semantics and continuations. In particular, he showed how
call-by-name evaluation could be simulated under call-by-value
evaluation and vice versa. Since Algol 60, however, call-by-name is
both implemented and simulated with thunks rather than with
continuations. We recast this folk theorem in Plotkin's setting, and
show that thunks, even though they are simpler than continuations, are
sufficient for establishing all the correctness properties of
Plotkin's call-by-name simulation.
Furthermore, we establish a new relationship between Plotkin's two
continuation-based simulations Cn and Cv, by deriving
Cn as the composition of our thunk-based simulation T and of
Cv+ --- an extension of Cv handling thunks. Almost all of the
correctness properties of Cn follow from the properties
of T and Cv+. This simplifies reasoning about call-by-name
continuation-passing style.
We also give several applications involving
factoring continuation-based transformations using thunks.
Technical Report 95/3,
Computer Science Department,
University of Copenhagen,
February 1995.