# A Tutorial on Co-induction and Functional Programming

@inproceedings{Gordon1994ATO, title={A Tutorial on Co-induction and Functional Programming}, author={Andrew D. Gordon}, booktitle={Functional Programming}, year={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 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…

## 86 Citations

An Introduction to ( Co ) Algebras and ( Co ) Induction and their Application to the Semantics of Programming Languages

- Computer Science
- 2005

Operational approaches to the formal semantics of programming languages are summarized and it is shown that they can be interpreted inductively by least fixed points as well as coinductively by greatest fixed points.

Coinductive Proofs over Streams as CHR Confluence Proofs

- Computer Science
- 2012

This paper illustrates how the confluence of CHR can be used to prove universal coinductive properties, and gives several examples of bisimulation proofs over streams.

A Proof Calculus for Natural Semantics Based on Greatest Fixed Point Semantics

- Computer ScienceElectron. Notes Theor. Comput. Sci.
- 2005

Coinductive Logic Programming and Its Applications

- Computer ScienceICLP
- 2007

Applications of coinductive logic programming to verification and model checking, lazy evaluation, concurrent logic programming and non-monotonic reasoning are discussed.

Coinduction Plain and Simple

- Computer ScienceArXiv
- 2020

Extensions of functional and logic programming with limited and decidable forms of the generalized coinduction proof principle are suggested, which makes the coinductions proof principle more intuitive and stresses its closeness with structural induction.

Bisimulations for probabilistic linear lambda calculi

- Computer Science2017 International Symposium on Theoretical Aspects of Software Engineering (TASE)
- 2017

It is shown that both a statebased and a distribution-based bisimilarity are sound coinductive proof techniques for reasoning about higher-order probabilistic programs, but only the distribution- based one is complete for linear contextual equivalence.

A Sound Metalogical Semantics for Input/Output Effects

- Computer ScienceCSL
- 1994

The vehicle is a small higher-order imperative language, with operations for interactive character I/O and based on ML syntax, that uses a novel labelled transition system that uniformly expresses both applicative and imperative computation.

A non-deterministic call-by-need lambda calculus

- Computer ScienceICFP '98
- 1998

This paper presents a non-deterministic call-by-need (untyped) lambda calculus λnd with a constant choice and a let-syntax that models sharing that has the nice operational properties of the standard lambda calculus.

Recursive subtyping revealed: (functional pearl)

- Computer ScienceICFP '00
- 2000

An "end-to-end" introduction to recursive types and subtyping algorithms, from basic theory to efficient implementation, set in the unifying mathematical framework of coinduction.

On Coinduction and Quantum Lambda Calculi

- Computer ScienceCONCUR
- 2015

A linear contextual equivalence and two notions of bisimilarity, a state-based and a distribution-based, as proof techniques for reasoning about higher-order quantum programs, but only the distribution- based one turns out to be complete.

## References

SHOWING 1-10 OF 41 REFERENCES

From Operational to Denotational Semantics

- MathematicsMFPS
- 1991

It is shown how any ordering on programs for which these basic theorems hold can be easily extended to give a fully abstract cpo for the language, giving evidence that any operational semantics with these basicTheorems proven is complete with respect to a denotational semantics.

Equality in lazy computation systems

- Mathematics[1989] Proceedings. Fourth Annual Symposium on Logic in Computer Science
- 1989

The author proves that if an extensionality condition holds of each of the operators of a computational system, then the equivalence relation is a congruence, so that the usual kinds of equality reasoning are valid for it.

Operational Theories of Improvement in Functional Languages (Extended Abstract)

- MathematicsFunctional Programming
- 1991

The main results of this paper build on Howe's study of equality in lazy computation systems and show that any improvement relation which satisfies a simple monotonicity condition with respect to the rules of the operational semantics has the desired congruence property.

Calculus with Reference Types and Standard ML

- Computer Science
- 1994

A syntactic translation for a substantial fragment of the core Standard ML language into a typed calculus with recursive types and imperative features in the form of reference types is described.

A Sound Metalogical Semantics for Input/Output Effects

- Computer ScienceCSL
- 1994

The vehicle is a small higher-order imperative language, with operations for interactive character I/O and based on ML syntax, that uses a novel labelled transition system that uniformly expresses both applicative and imperative computation.

Introduction to functional programming

- EconomicsPrentice Hall International series in computer science
- 1988

This is a thorough introduction to the fundamental concepts of functional programming that includes a simple, yet coherent treatment of the Haskell class; a calculus of time complexity; and new coverage of monadic input-output.

A co-Induction Principle for Recursively Defined Domains

- Computer ScienceTheor. Comput. Sci.
- 1994

Concurrency and Automata on Infinite Sequences

- Computer ScienceTheoretical Computer Science
- 1981

A general method for proving/deciding equivalences between omega-regular languages, whose recognizers are modified forms of Buchi or Muller-McNaughton automata, derived from Milner's notion of “simulation” is obtained.