MetaCart Sign in to MyCiteSeerX

Include Citations | Advanced Search | Help

Disambiguated Search | Include Citations | Advanced Search | Help

A Tutorial on Co-induction and Functional Programming (1994) [22 citations — 1 self]

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