Results 1 -
2 of
2
A Tutorial on Co-induction and Functional Programming
- IN GLASGOW FUNCTIONAL PROGRAMMING WORKSHOP
, 1994
"... 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 ..."
Abstract
-
Cited by 24 (1 self)
- Add to MetaCart
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.
Infinitary Howe's Matrix
"... Howe’s method is a well-known technique for proving that various kinds of applicative bisimilarity (or similarity) on a functional language are congruences (or precongruences). It proceeds by constructing an extension of the given relation that has certain special properties. The method can be used ..."
Abstract
- Add to MetaCart
Howe’s method is a well-known technique for proving that various kinds of applicative bisimilarity (or similarity) on a functional language are congruences (or precongruences). It proceeds by constructing an extension of the given relation that has certain special properties. The method can be used for deterministic and for erratically nondeterministic languages, but in the latter case it has a strange limitation: it requires the language’s syntax to be finitary. That excludes, for example, languages with countable sum types, and has repeatedly caused problems in the literature. In this paper, we give a variation on Howe’s method, called “infinitary Howe’s method”, that avoids this problem. The method involves defining two extensions of the original relation by mutual coinduction. Both extensions possess the key properties of Howe’s extension, but it is their intersection that is compatible. In the first part of the paper, we see how this works for a call-by-value language with countable sum types. In the second part, we see that the method continues to work when we make the syntax non-well-founded. More precisely, we show, using a mixed inductive/coinductive argument, that the various forms of applicative similarity and bisimilarity are preserved by any substituting context.

