A natural semantics for lazy evaluation

  title={A natural semantics for lazy evaluation},
  author={John Launchbury},
  booktitle={POPL '93},
We define an operational semantics for lazy evaluation which provides an accurate model for sharing. The only computational structure we introduce is a set of bindings which corresponds closely to a heap. The semantics is set at a considerably higher level of abstraction than operational semantics for particular abstract machines, so is more suitable for a variety of proofs. Furthermore, because a heap is explicitly modelled, the semantics provides a suitable framework for studies about space… 

Figures from this paper

Operational Semantics for Lazy Evaluation
An operational semantics for lazy evaluation of a calculus without higher order functions was defined and it was proved that it is equivalent with respect to the values calculated to the operational semantics of LAZY-PCF+SHAR due to S. Purushothaman Iyer and Jill Seaman.
Distributed Lazy Evaluation: A Big-Step Mechanised Semantics
  • S. H. Haeri, S. Schupp
  • Computer Science
    2014 22nd Euromicro International Conference on Parallel, Distributed, and Network-Based Processing
  • 2014
This paper gives criteria which establish a notion of bisimilarity between heaps, and proves the validity of an induction principle that is used for proving observational equivalence between programs written in this system.
An Intrinsic Denotational Semantics for a Lazy Functional Language
This paper presents a denotational semantics for a lazy functional language that defines meaning for typing derivations instead of language expressions and contrasts this semantics with the well-known evaluation rules defined by Sestoft.
Deriving a lazy abstract machine
  • P. Sestoft
  • Computer Science
    Journal of Functional Programming
  • 1997
The machine derived is a lazy version of Krivine's abstract machine, which was originally designed for call-by-name evaluation, and is extended with datatype constructors and base values, so the final machine implements all dynamic aspects of a lazy functional language.
Semantics of Lazy Evaluation using the Two-Level Grammar
The semantics of lazy evaluation for the lambda calculus is formalized using the two-level grammar formalism, which enjoys several properties, e.g., there is a sharing in the recursive computation, there is no α conversion and the heap is automatically reclaimed.
The Correctness of Launchbury's Natural Semantics for Lazy Evaluation
This work machine-checked the proof of John Launchbury's semantics and found it to fail, and provides two ways to fix it: One by taking a detour via a modified natural semantics with an explicit stack, and one by adjusting the denotational semantics of heaps.
A Locally Nameless Representation for a Natural Semantics for Lazy Evaluation
It is proved that the choice of names during the evaluation of a term is irrelevant as long as they are fresh enough, and cofinite quantification is used to express the semantic rules that require the introduction of fresh names.
A monadic semantics for core Curry
Operational Semantics for Functional Logic Languages
The Role of Indirections in Lazy Natural Semantics
This paper focuses on the introduction of indirections during \(\beta \)-reduction and defines a relation between heap/term pairs to establish the equivalence between Launchbury’s alternative natural semantics and its corresponding version without indirections.


An Adequate Operational Semantics for Sharing in Lazy Evaluation
A natural operational semantics is presented for Lazy-PCF+Shar and it is shown that it is equivalent to the standard fixed-point semantics.
The Semantics of Lazy Functional Languages
Efficient compilation of lazy evaluation
The principles underlying an efficient implementation of a lazy functional language, compiling to code for ordinary computers, based on combinator-like graph reduction: the user defined functions are used as rewrite rules in the graph.
Avoiding Unnecessary Updates
This paper takes some steps towards an analysis for determining when updates to the graph representing the computation may be omitted, because no other computation requires this value, so the update is unnecessary.
A syntactic approach to program transformations
Kid, a language for expressing compiler oPtirnizations for functional languages is introduced, which goes beyond ,4-calcnlus by including I-structures which are essential to express efficient translations of list and array comprehensions.
A modular fully‐lazy lambda lifter in Haskell
In his thesis, Hughes showed that by doing lambda lifting in a particular way, a useful property called full laziness can be preserved and has been seen as intertwined with lambda lifting ever since.
TIM: A simple, lazy abstract machine to execute supercombinatorics
The three instruction machine Tim is described, an abstract machine for the execution of supercombinators that usually executes programmes faster than the G-machine style of abstract machine while being at least as easy to implement as an S-K combinator reducer.
Optimal derivations in weak lambda-calculi and in orthogonal term rewriting systems
The new framework of Labeled Terms Rewriting Systems (T~RS), a general framework to express sharing in Term Rewriters Systems (TRS), is introduced and optimal derivations are characterized, showing the optimality of the tazy strategy.
Profiling Lazy Functional Programs
Profiling tools, which measure and display the dynamic space and time behaviour of programs, are essential for identifying execution bottlenecks for non-strict functional languages.
I-structures: data structures for parallel computing
It is difficult to achieve elegance, efficiency, and parallelism simultaneously in functional programs that manipulate large data structures, and it is shown that even in the context of purely functional languages, I-structures are invaluable for implementing functional data abstractions.