# A natural semantics for lazy evaluation

@inproceedings{Launchbury1993ANS,
title={A natural semantics for lazy evaluation},
author={John Launchbury},
booktitle={POPL '93},
year={1993}
}
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…
414 Citations

## Figures from this paper

Operational Semantics for Lazy Evaluation
• Computer Science
• 2007
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
• 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
• Computer Science
• 2008
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
• Computer Science
ICTAC
• 2012
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
• Computer Science
Electron. Notes Theor. Comput. Sci.
• 2003
Operational Semantics for Functional Logic Languages
• Computer Science, Philosophy
Electron. Notes Theor. Comput. Sci.
• 2002
The Role of Indirections in Lazy Natural Semantics
• Computer Science
Ershov Memorial Conference
• 2014
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.

## References

SHOWING 1-10 OF 32 REFERENCES
An Adequate Operational Semantics for Sharing in Lazy Evaluation
• Computer Science
ESOP
• 1992
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.
• Computer Science
Functional Programming
• 1992
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
• Computer Science
PEPM '91
• 1991
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
• Physics
Softw. Pract. Exp.
• 1991
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
• Computer Science
FPCA
• 1987
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
• Computer Science
Functional Programming
• 1992
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
• Computer Science
ACM Trans. Program. Lang. Syst.
• 1989
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.