title: Coinduction
text: # 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é
  