Premièrement, pour dissiper une possible dissonance cognitive: raisonner sur des structures infinies n’est pas un problème, nous le faisons tout le temps. Tant que la structure est finement descriptible, ce n'est pas un problème. Voici quelques types courants de structures infinies:
- langages (ensembles de chaînes sur un alphabet, qui peuvent être finis);
- langues d'arbre (ensembles d'arbres sur un alphabet);
- traces d'exécution d'un système non déterministe;
- nombres réels;
- ensembles d'entiers;
- des ensembles de fonctions allant d’entiers à entiers; …
La coinductivité en tant que plus grand point de fixation
Là où les définitions inductives construisent une structure à partir de blocs élémentaires, les définitions coinductives façonnent les structures à partir de la manière dont elles peuvent être déconstruites. Par exemple, le type de listes dont les éléments sont dans un ensemble A
est défini comme suit dans Coq:
Inductive list (A:Set) : Set :=
| nil : list A
| cons : A -> list A -> list A.
De manière informelle, le list
type est le plus petit type contenant toutes les valeurs construites à partir des constructeurs nil
et cons
, avec l'axiome suivant: . Inversement, nous pouvons définir le type le plus grand contenant toutes les valeurs construites à partir de ces constructeurs, en conservant l’axiome de discrimination:∀xy,nil≠consxy
CoInductive colist (A:Set) : Set :=
| conil : colist A
| cocons : A -> colist A -> colist A.
list
est isomorphe à un sous-ensemble de colist
. En outre, colist
contient des listes infinies: listes avec cocons
sur cocons
.
CoFixpoint flipflop : colist ℕ := cocons 1 (cocons 2 flipflop).
CoFixpoint from (n:ℕ) : colist ℕ := cocons n (from (1 + n)).
flipflop
est l'infini (liste circulaire) ; est la liste infinie de nombres naturels .0 : : 1 : : 2 : : ...1::2::1::2::…from 0
0::1::2::…
Une définition récursive est bien formée si le résultat est construit à partir de blocs plus petits: les appels récursifs doivent fonctionner sur des entrées plus petites. Une définition corécursive est bien formée si le résultat génère des objets plus volumineux. L'induction regarde les constructeurs, la coinduction regarde les destructeurs. Notez que la dualité passe non seulement de plus en plus petit à plus grand mais également d’entrées en sorties Par exemple, la raison pour laquelle les flipflop
et from
définitions ci - dessus sont bien formés est que l'appel corecursive est gardée par un appel au cocons
constructeur dans les deux cas.
Lorsque les déclarations sur les objets inductifs ont des preuves inductives, les déclarations sur les objets coinductifs ont des preuves coinductives. Par exemple, définissons le prédicat infini sur les colistes; intuitivement, les colistes infinis sont ceux qui ne finissent pas avec conil
.
CoInductive Infinite A : colist A -> Prop :=
| Inf : forall x l, Infinite l -> Infinite (cocons x l).
Pour prouver que les couleurs de la forme from n
sont infinies, nous pouvons raisonner par coinduction. from n
est égal à cocons n (from (1 + n))
. Cela montre que from n
est plus grand que from (1 + n)
, qui est infini par l'hypothèse de la coinduction, from n
est donc infini.
Bisimilarité, une propriété coinductive
La coinduction en tant que technique de preuve s'applique également aux objets finitaires. Intuitivement, les preuves inductives sur un objet sont basées sur la façon dont l'objet est construit. Les preuves coinductives sont basées sur la façon dont l'objet peut être décomposé.
Lors de l’étude de systèmes déterministes, il est courant de définir l’équivalence par des règles inductives: deux systèmes sont équivalents s’il est possible de passer de l’un à l’autre par une série de transformations. De telles définitions tendent à ne pas saisir les nombreuses manières différentes dont les systèmes non déterministes peuvent avoir le même comportement (observable) malgré une structure interne différente. (La coinduction est également utile pour décrire les systèmes sans terminaison, même s'ils sont déterministes, mais ce n'est pas ce sur quoi je vais me concentrer ici.)
Les systèmes non déterministes tels que les systèmes concurrents sont souvent modélisés par des systèmes de transition étiquetés . Un LTS est un graphe orienté dans lequel les arêtes sont étiquetées. Chaque bord représente une transition possible du système. Une trace d'un LTS est la séquence d'étiquettes de bord sur un chemin dans le graphique.
Deux LTS peuvent se comporter de manière identique, en ce sens qu'ils ont les mêmes traces possibles, même si leur structure interne est différente. L'isomorphisme des graphes est trop fort pour définir leur équivalence. Au lieu de cela, un LTS est dit pour simuler un autre LTS si chaque transition du second LTS admet une transition correspondant à la première. Formellement, soit l’union disjointe des états des deux LTS, l’ensemble (commun) d’étiquettes et la relation de transition. La relation est une simulation si
B S L → R ⊆ S × S ∀ ( p , q ) ∈ R , si p alpha → p ' puis ∃ q ' ,ABSL→R⊆S×S
∀(p,q)∈R, if p→αp′ then ∃q′,q→αq′ and (p′,q′)∈R
A simule s'il existe une simulation dans laquelle tous les états de sont liés à un état dans . Si est une simulation dans les deux sens, on parle de bisimulation . La simulation est une propriété coinductive: toute observation d'un côté doit correspondre à l'autre.BBAR
Il existe potentiellement de nombreuses bisimulations dans un LTS. Différentes bisimulations peuvent identifier différents états. Étant donné deux bisimulations et , la relation donnée en prenant l'union des graphes de relation est elle-même une bisimulation, car les états liés donnent lieu à des états liés pour les deux relations. (Cela vaut également pour les unions infinies. La relation vide est une bisimulation non intelligible, de même que la relation identitaire.) En particulier, l'union de toutes les bisimulations est elle-même une bisimulation, appelée bisimilarité. La bisimilarité est le moyen le plus grossier d’observer un système qui ne fait pas la distinction entre des États distincts.R1R2R1∪R2
La bi-similitude est une propriété coinductive. Il peut être défini comme le plus grand point fixe d'un opérateur: c'est la relation la plus grande qui, lorsqu'elle est étendue à l'identification d'états équivalents, reste la même.
Références