Résumé
In computer science, coinduction is a technique for defining and proving properties of systems of concurrent interacting objects. Coinduction is the mathematical 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, co-logic programming (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 logic programming, model checking, bisimilarity proofs, etc." Experimental implementations of co-LP are available from the University of Texas at Dallas and in Logtalk (for examples see ) and SWI-Prolog. In a concise statement is given of both the principle of induction and the principle of coinduction. While this article is not primarily concerned with induction, it is useful to consider their somewhat generalized forms at once. In order to state the principles, a few preliminaries are required. Let be a set and be a monotone function , that is: Unless otherwise stated, will be assumed to be monotone. X is F-closed if X is F-consistent if X is a fixed point if These terms can be intuitively understood in the following way. Suppose that is a set of assertions, and is the operation which takes the implications of .
À propos de ce résultat
Cette page est générée automatiquement et peut contenir des informations qui ne sont pas correctes, complètes, à jour ou pertinentes par rapport à votre recherche. Il en va de même pour toutes les autres pages de ce site. Veillez à vérifier les informations auprès des sources officielles de l'EPFL.
Concepts associés (5)
F-coalgèbre
En mathématiques, et plus particulièrement en théorie des catégories, une -coalgèbre est une structure définie par rapport à un foncteur . La notion de -coalgèbre possède des applications en informatique, notamment pour l'évaluation paresseuse, pour les structures de données infinies comme les flux ou pour les systèmes transitionnels. Les -coalgèbres sont une forme duale des . On appelle -coalgèbre sur un endofoncteur tout objet de muni d'un -morphisme Les homomorphismes des -coalgèbres sont les morphismes dans tel que : Une -coalgèbre associée à un foncteur constitue une catégorie.
Bisimulation
En informatique théorique, une bisimulation est une relation binaire entre systèmes de transition d'états, associant les systèmes qui se comportent de la même façon au sens qu'un des systèmes simule l'autre et vice-versa. Intuitivement, deux systèmes sont bisimilaires s'ils sont capables de s'imiter l'un l'autre. Dans cette optique, les systèmes ne peuvent être distingués l'un de l'autre par un observateur.
Initial algebra
In mathematics, an initial algebra is an initial object in the of F-algebras for a given endofunctor F. This initiality provides a general framework for induction and recursion. Consider the endofunctor F : Set → Set sending X to 1 + X, where 1 is the one-point (singleton) set, the terminal object in the category. An algebra for this endofunctor is a set X (called the carrier of the algebra) together with a function f : (1 + X) → X. Defining such a function amounts to defining a point and a function X → X.
Afficher plus