Jump to content

Coinduction: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Ruud Koot (talk | contribs)
Ruud Koot (talk | contribs)
→‎Further reading: Eduardo Giménez and Pierre Castéran (2007). [http://www.labri.fr/perso/casteran/RecTutorial.pdf "A Tutorial on [Co-]Inductive Types in Coq"]
Line 32: Line 32:
* [[Andrew D. Gordon]] (1994). {{cite paper | id = {{citeseerx|10.1.1.37.3914}} | title = A Tutorial on Co-induction and Functional Programming }} — mathematically oriented description
* [[Andrew D. Gordon]] (1994). {{cite paper | id = {{citeseerx|10.1.1.37.3914}} | title = A Tutorial on Co-induction and Functional Programming }} — mathematically oriented description
* [[Bart Jacobs]] and [[Jan Rutten]] (1997). [http://citeseer.ist.psu.edu/jacobs97tutorial.html A Tutorial on (Co)Algebras and (Co)Induction] ([http://www.cs.ru.nl/B.Jacobs/PAPERS/JR.pdf alternate link]) — describes induction and coinduction simultaneously
* [[Bart Jacobs]] and [[Jan Rutten]] (1997). [http://citeseer.ist.psu.edu/jacobs97tutorial.html A Tutorial on (Co)Algebras and (Co)Induction] ([http://www.cs.ru.nl/B.Jacobs/PAPERS/JR.pdf alternate link]) — describes induction and coinduction simultaneously
* Eduardo Giménez and Pierre Castéran (2007). [http://www.labri.fr/perso/casteran/RecTutorial.pdf "A Tutorial on [Co-]Inductive Types in Coq"]
* [http://www.cs.ucsd.edu/groups/tatami/handdemos/doc/coind.htm Coinduction] — short introduction
* [http://www.cs.ucsd.edu/groups/tatami/handdemos/doc/coind.htm Coinduction] — short introduction
; History
; History

Revision as of 16:31, 25 November 2015

In computer science, coinduction is a technique for defining and proving properties of systems of concurrent interacting objects.

Coinduction is the mathematical dual to structural induction. Coinductively defined types are known as codata and are typically infinite data structures, such as streams.

As a definition or specification, coinduction describes how an object may be "observed", "broken down" or "destructed" into simpler objects. As a proof technique, it may be used to show that an equation is satisfied by all possible implementations of such a specification.

To generate and manipulate codata, one typically uses corecursive functions, in conjunction with lazy evaluation. Informally, rather than defining a function by pattern-matching on each of the inductive constructors, one defines each of the "destructors" or "observers" over the function result.

In programming, the co-logic paradigm (Co-LP for brevity) "is a natural generalization of logic programming and coinductive logic programming, which in turn generalizes other extensions of logic programming, such as infinite trees, lazy predicates, and concurrent communicating predicates. Co-LP has applications to rational trees, verifying infinitary properties, lazy evaluation, concurrent LP, model checking, bisimilarity proofs, etc."[1] Experimental implementations of Co-LP are available from U.T.Dallas [2] and in Logtalk (for examples see [3]) and SWI-Prolog.

See also

References

Further reading

Text books
  • Davide Sangiorgi (2012). Introduction to Bisimulation and Coinduction. Cambridge University Press.
  • Davide Sangiorgi and Jan Rutten (2011). Advanced Topics in Bisimulation and Coinduction. Cambridge University Press.
Introductory texts
  • Andrew D. Gordon (1994). "A Tutorial on Co-induction and Functional Programming". CiteSeerx10.1.1.37.3914. {{cite journal}}: Cite journal requires |journal= (help) — mathematically oriented description
  • Bart Jacobs and Jan Rutten (1997). A Tutorial on (Co)Algebras and (Co)Induction (alternate link) — describes induction and coinduction simultaneously
  • Eduardo Giménez and Pierre Castéran (2007). "A Tutorial on [Co-Inductive Types in Coq"]
  • Coinduction — short introduction
History
Miscellaneous