 
Summary: The Lazy Lambda Calculus
Samson Abramsky
Department of Computing
Imperial College of Science and Technology
March 6, 2006
1 Introduction
The commonly accepted basis for functional programming is the calculus;
and it is folklore that the calculus is the prototypical functional language in
purified form. But what is the calculus? The syntax is simple and classical;
variables, abstraction and application in the pure calculus, with applied calculi
obtained by adding constants. The further elaboration of the theory, covering
conversion, reduction, theories and models, is laid out in Barendregt's already
classical treatise [Bar84]. It is instructive to recall the following crux, which
occurs rather early in that work (p. 39):
Meaning of terms: first attempt
· The meaning of a term is its normal form (if it exists).
· All terms without normal forms are identified.
This proposal incorporates such a simple and natural interpretation of the 
calculus as a programming language, that if it worked there would surely be
no doubt that it was the right one. However, it gives rise to an inconsistent
