Abstract:
Co-induction is an important tool for reasoning about unbounded structures. This tutorial explains the foundations of co-induction, and shows how it justifies intuitive arguments about lazy streams, of central importance to lazy functional programmers. We explain from first principles a theory based on a new formulation of bisimilarity for functional programs, which coincides exactly with Morris-style contextual equivalence. We show how to prove properties of lazy streams by co-induction and derive Bird and Wadler's Take Lemma, a well-known proof technique for lazy streams. The aim of this paper is to explain why co-inductive definitions and proofs by co-induction are useful to functional programmers. Co-induction is dual to induction. To say a set is inductively defined just means it is the least solution of a certain form of inequation. For instance, the set of natural numbers N is the least solution (ordered by set inclusion, `) of the inequation f0g [ fS(x) j x 2 Xg ` X: (1) Th...
Citations
|
2701
|
Communication and Concurrency
– Milner
- 1989
|
|
1122
|
Introduction to Functional Programming
– Bird, Wadler
- 1988
|
|
751
|
Introduction to Lattices and Order
– Davey, Priestley
- 1991
|
|
540
|
Concurrency and Automata on Infinite Sequences
– Park
- 1981
|
|
327
|
LCF considered as a programming language
– Plotkin
- 1977
|
|
149
|
An Introduction to Inductive Definitions
– Aczel
- 1977
|
|
116
|
Full abstraction in the lazy lambda calculus
– Abramsky, Ong
- 1993
|
|
111
|
Lambda Calculus Models of Programming Languages
– Morris
- 1982
|
|
99
|
Bisimilarity as a Theory of Functional Programming
– Gordon
- 1995
|
|
98
|
Functional Programming and Input/Output
– Gordon
- 1994
|
|
97
|
Fully abstract models of typed lambda-calculus
– Milner
- 1977
|
|
93
|
Observable properties of higher order functions that dynamically create local names, or: What's new
– Pitts, Stark
- 1993
|
|
82
|
Control operators, the SECD-machine, and the -calculus
– Felleisen, Friedman
- 1986
|
|
82
|
Equality in lazy computation systems
– Howe
- 1989
|
|
42
|
A co-induction principle for recursively defined domains
– Pitts
- 1994
|
|
37
|
Domain Theory and the Logic of Observable Properties
– Abramsky
- 1987
|
|
20
|
Operational theories of improvement in functional languages
– Sands
- 1991
|
|
19
|
Correspondence between operational and denotational semantics
– Ong
- 1995
|
|
18
|
From operational to denotational semantics
– Smith
- 1991
|
|
16
|
A fully abstract translation between a -calculus with reference types and Standard ML
– Ritter, Pitts
- 1995
|
|
9
|
A sound metalogical semantics for input/output effects
– Crole, Gordon
- 1994
|
|
5
|
Total Correctness and Improvement in the Transformation of Functional Programs
– Sands
- 1994
|
|
3
|
Can LCF be topped? Flat lattice models of typed lambda calculus
– Bloom
- 1988
|
|
2
|
Natural semantics for nondeterminism
– Hughes, Moran
- 1993
|
|
2
|
A Logic of Functional Programs with an Application to Concurrency
– Sander
- 1992
|
|
1
|
Non-determinism in a functional setting (extended abstract
– Ong
- 1993
|