Induction et CoInduction modifier

L'induction et la coinduction sont des concepts de structure que l'on retrouve dans les notions de (co)récurrence, et (co)récursion pour définir des objets (pas nécessairement) infinis, mais surtout dont la structure contient des motifs identiques à des échelles différentes (un peu comme les objets fractals).

Les notions liées à la (co)induction sont:

  • structurelles (structure (co)inductive)
  • fonctionnelles (fonctions (co)inductives)
  • probatoires (preuve par (co)induction)

Les fonctions et les preuves sont traitées simultanément en vertu de la correspondance de Curry-Howard.

La coinduction étant un peu plus technique, elle n'est que survolée dans l'aperçu.

Aperçu modifier

Un cas concret: les dominos modifier

On se donne un jeu de dominos que l'on pose verticalement les uns derrière les autres afin de déclencher une réaction en chaîne (effet domino).

(P)Pour s'assurer que tout le monde tombera quand on poussera le premier domino, il faut s'assurer que tout domino qui tombe entraine le suivant dans sa chute.

Cet énoncé manque quelque peu de formalisme:

  • "Que veut dire premier?"
  • "Que veut dire suivant?"
  • "Comment s'assurer que cet énoncé est valide?"

En fait tel quel, (P) n'est valide que dans le cas inductif, dans un cas coinductif, il n'est plus valide.

Pour être plus formel nous allons dire que tout domino est:

  • (A)soit un domino particulier (le "premier")
  • (B)soit le domino suivant un domino défini, (le "suivant")

Cette définition est inductive si elle vérifie la propriété selon laquelle on peut passer de tout domino au premier en un nombre fini d'étapes.

Toutes les définitions de dominos ne vérifient pas cette propriété, on pourrait très bien autoriser à un domino d'être le successeur de qui serait successeur de qui serait successeur de ; on aurait alors une boucle, et aucun de ceux ci ne tomberaient quand serait poussé; ou encore avoir une infinité de dominos de suite auquel cas un domino pourrait ne jamais tomber.

L'ensemble inductif est le plus petit des ensembles vérifiant (A) et (B); le coinductif est le plus grand; il existe d'autres formulations que l'on trouvera par la suite.

Les dominos sont des entiers modifier

Une autre façon de voir ces dominos est simplement de leur associer un entier:

  • devient
  • si devient , alors devient

Ceci définit une fonction .

On a alors , , , etc...

Et réciproquement à tout domino indicé par un entier je peux lui associer un domino dans la représentation initiale (si j'en ai assez):

  • devient
  • si devient , alors devient

Ceci définit une fonction et .

Les dominos "sont" donc des entiers.

En fait ce n'est pas étonnant puisque tout entier est:

  • (A')soit
  • (B')soit , le successeur de l'entier

de manière inductive (axiomatique de Peano).

Lien avec la récurrence modifier

Après cette description de la structure des dominos, il faut être en mesure de l'utiliser, c'est à dire pouvoir définir des fonctions et des preuves sur ces structures.

Etant donné un ensemble (à au moins deux éléments), il existe une infinité de fonctions des dominos dans ; malheureusement beaucoup d'entre elles ne sont pas descriptibles (cf. ensemble récursif), on va donc s'intéresser à un fragment de ces fonctions: les fonctions récursives.

Comme le suggère la structure des dominos en deux cas (A) et (B), il suffit de définir notre fonction des dominos vers sur chacun de ces cas; c'est la construction par récurrence:

  • (RA) on se donne , et on pose
  • (RB) on se donne et on pose

Ceci définit récursivement notre fonction.

En programmation fonctionnelle, on peut même parfois définir une fonction de type:

, telle que .

On peut encore généraliser cela au cas où dépend du domino, et définir par récurrence une fonction dont le type est: par:

  • (RA') on se donne , et on pose
  • (RB') on se donne et on pose

Dans ce contexte, a pour type: .

En utilisant notre association entre domino et entiers, on obtient:

,

type que les mathématiciens ont l'habitude de voir écrit:

;

c'est l'axiome de récurrence.

La propriété (P) énoncée au début de cette partie se démontre donc dans le cas inductif grâce à qui s'écrit aussi:

et qui exprime:

Si je sais prouver que:

  • "quand tombe, tombe" ()

et que: ()

  • pour tout , ()
    • si je sais prouver que:
      • "quand tombe, tombe" ()
    • alors je sais prouver que: ()
      • "quand tombe, tombe" ()

alors je sais prouver que: ()

  • pour tout , ()
    • "quand tombe, tombe" ()

Rappel: cet axiome, n'est pas valide en coinduction.

Un autre cas concret: l'avalanche modifier

Le cas précédent montre que la récurrence n'est qu'une forme d'induction, on va ici utiliser une forme plus intéressante.

Une pré-avalanche est soit:

  • (AA) une boule de neige, notée
  • (AB) deux pré-avalanches déclenchables par une boule de neige, notée

Exemples:

  • Une boule seule:
  • Une petite avalanche:
  • Une autre avalanche:

Cette fois ci, l'induction consiste en les avalanches finies (qui se terminent toujours en déclenchant une boule ).

La coinduction mène à des avalanches très exotiques dont certaines parties terminent en déclenchant , d'autres parties bouclent en se déclenchant elle-même, et d'autres ne finissent jamais.

Les avalanches sont des arbres modifier

En informatique cette structure d'avalanche et celle d'arbre binaire; c'est une structure avec deux constructeurs:

  • est d'arité 0, c'est la partie terminale de la structure
  • est d'arité 2 et prend 2 arbres en arguments, elle permet de réunir deux arbres

Plus puissant que la réccurrence? modifier

Le principe d'induction est cette fois ci le suivant:

(sans dépendance)

ou:

(avec dépendance),

et on a donc l'axiome d'induction:

On peut se ramener au raisonnement par récurrence sur les entiers, mais cela oblige à définir une fonction de profondeur de l'arbre; puis raisonner par récurrence sur cette profondeur.

En règle générale, tout raisonnement par induction peut se prouver par récurrence sur les entiers (la réciproque est évidente, puisque la récurrence est l'induction sur les entiers comme vu avec les dominos), mais cela implique la définition d'une fonction , de mesure de nos structures vers les entiers (heureusement pas nécessairement injective), puis faire une récurrence sur appliquée à notre structure.

L'induction n'est donc pas plus puissante que la récurrence, elle est juste d'une utilisation plus aisée.

Une structure courante de coinductif: le flux modifier

Les parties précédentes portaient sur les inductifs et peu des coinductifs; il n'en est question ici que pour présenter une structure coinductive tant utilisée en mathématiques qu'en informatique: celle du flux.

Un flux sur est:

  • un élément de suivi de d'un flux sur , noté

C'est tout.

La version inductive du flux n'est pas très intéressante; c'est l'ensemble vide, en effet, cet ensemble vérifie cette propriété ("pour tout élément de A et tout élément de l'ensemble vide, je peux construire un élément de l'ensemble vide") et c'est le plus petit.

Noter que:

  • dans la version des dominos, l'ensemble vide ne vérifie pas (A):
  • dans la version des pré-avalanches, l'ensemble vide ne vérifie pas (AA):
  • on peut prouver en utilisant l'axiome d'induction avec

L'objet coinductif, lui, a soit aucun élément (), soit un unique élément (), soit une infinité non dénombrable d'éléments.

En mathématiques, il peut représenter les suites (au lieu de les représenter par une fonction), les p-adiques, les développements dans une base...

Mais si on ne peut pas raisonner par induction dessus, on peut tout de même l'utiliser pour construire d'autres coinductifs par coinduction.

Les fonctions corécursives ont la propriété que chacun de leurs appels récursifs doivent produire un constructeur, dont les arguments pourront être évalués paresseusement.

Par exemple, le flux des entiers positifs supérieurs à se définit par:

Théorie modifier

Vision Ensembliste par le bas modifier

Structures modifier

Fonctions et preuves modifier

Vision Ensembliste par le haut modifier

Structures modifier

Fonctions et preuves modifier

Algèbres et catégories modifier

Structures modifier

Fonctions et preuves modifier

Liens internes modifier

catégorie:Algèbre]]