Coinduction
En informatique théorique, la coinduction est une technique de définition et de vérification de propriétés de systèmes d'objets en interaction.
La coinduction est la notion duale de l'induction structurelle. Les types définis par coinduction sont aussi connus comme codata et sont en général des structures de données infinies, tels que les flux.
En tant que définition ou spécification informatique, la coinduction décrit comment un objet peut être décomposé en objets plus simples. Comme technique de démonstration, elle peut être utilisée pour montrer qu'une équation est satisfaite par toutes les implémentations possible d'une telle spécification.
Pour engendrer et manipuler des codata, on utilise typiquement des fonctions corécursives en conjonction avec l'évaluation paresseuse. De manière informelle, plutôt que de définir une fonction par pattern-matching sur chacun de ses constructeurs inductifs, on définit des destructeurs (c'est le dual d'un constructeur). Pour une liste par exemple, les constructeurs sont nil et cons, les destructeurs sont tête et queue.
En programmation, la coinduction, aussi appelée programmation co-logique, est une généralisation naturelle de la programmation logique à la programmation en logique coinductive, généralisant d'autres extensions, comme les arbres infinis, les prédicats paresseux, ou les prédicats communicants concurrents. Elle intervient en plus dans la vérification de propriétés infinitaires, le model checking, preuves par bisimilarité.
En France, Claude Pair est un pionnier de l'utilisation de la coinduction en informatique. La coinduction est largement utilisée dans des assistants de preuves comme Coq.
Articles liés
- F-coalgèbre
- Corecursion (en)
- Bisimulation
- Anamorphisme
- Total functional programming (en)
- Coq
- Assistant de preuve
- Dualité
Notes et références
- (en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « Coinduction » (voir la liste des auteurs).
Bibliographie
- Ouvrages
- (en) Bart Jacobs, Introduction to Coalgebra : Towards Mathematics of States and Observation, Cambridge, Cambridge University Press, coll. « Cambridge Tracts in Theoretical Computer Science », , 494 pages (ISBN 978-1-107-17789-5, présentation en ligne).
- Davide Sangiorgi, Introduction to Bisimulation and Coinduction, Cambridge University Press, .
- Davide Sangiorgi et Jan Rutten, Advanced Topics in Bisimulation and Coinduction, Cambridge University Press, .
- Textes d'introduction
- Bart Jacobs et Jan Rutten, « A Tutorial on (Co)Algebras and (Co)Induction », Bulletin EATCS, no 62,‎ , p. 222-269 (lire en ligne, consulté le ) — describes induction and coinduction simultaneously
- Eduardo Giménez et Pierre Castéran, « "A Tutorial on [Co-]Inductive Types in Coq" », (consulté le ).
- Dexter Kozen et Alexandra Silva, « Practical coinduction », Mathematical Structures in Computer Science, vol. 27, no 07,‎ , p. 1132–1152 (ISSN 0960-1295, DOI 10.1017/S0960129515000493, lire en ligne).
- Pierre-Marie Pédrot, « A Survey of coinduction in Coq », (consulté le ).