Aller au contenu

Induction structurelle

Un article de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 21 mai 2017 à 19:31 et modifiée en dernier par PIerre.Lescanne (discuter | contributions). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.

L'induction structurelle ou récurrence structurelle est une méthode de définition d'une fonction ou d'une propriété sur une structure, c'est-à-dire sur des objets (mathématiques ou informatiques) structurées comme, par exemple, les listes, les arbres ou les arbres binaires, mais qui, plus généralement, s'utilise sur toute structure mathématique ayant une définition récursive. En permettant par le même principe de définir un prédicat total i.e. qui est défini partout, l'induction structurelle est aussi une méthode de démonstration d'une propriété sur une structure.

L'induction structurelle est à la fois une généralisation de la récurrence traditionnelle et un cas particulier de la récurrence bien fondée.

Exemples

Les fonctions définies par récurrence structurelle généralisent les fonctions définies par récurrence sur les entiers.

Les listes

Les listes sont définies comme étant

  • soit la liste vide [ ],
  • soit la liste obtenue par la mise en tête d'une liste d'un élément a, ce qui donne a : .

La fonction length qui définit la longueur d'une liste se définit par induction structurelle :

  • length ([ ]) = 0
  • length (a : ) = 1 + length ().

La fonction concat qui concatène deux listes et

  • concat ([ ], ) =
  • concat (a : , ) = a : (concat(, )

On peut démontrer par induction structurelle la proposition suivante :

length(concat()) = length + length().

Première étape

length(concat([ ], )) = length() = 0 + length() = length([ ]) + length()

Deuxième étape La démonstration utilise l'hypothèse d'induction structurelle

length(concat(a : , )) = length(a : concat(, )) = 1 + length(concat(, ))
= (par hypothèse d'induction structurelle) 1+ length() + length() = length(a:) + length()

Les arbres binaires

Considérons les arbres binaires définis ainsi :

  • pour l'arbre vide,
  • B B pour un arbre non vide ayant pour sous-arbre gauche B et pour sous-arbre droit B.

On peut définir la fonction taille (le nombre de nœuds internes de l'arbre binaire) :

  • taille() = 0
  • taille(B B) = taille(B) + taille(B) + 1

Principes

Considérons une structure définie par des constructeurs d'arité . Les constructeurs d'arité 0 sont des constantes.

Définition par induction structurelle

La définition par induction structurelle d'une fonction s'écrit pour chaque constructeur

est une expression qui dépend de i'. On remarque que si est une constante, la définition est celle d'un cas de base:

Raisonnement par induction structurelle

Le schéma de démonstration qu'une propriété P est valide sur toute une structure se présente sous la forme d'une règle d'inférence pour chaque constructeur

Il faut donc faire une démonstration d'« hérédité » pour chaque constructeur.

Le cas des entiers naturels

Le cas des entiers naturels est celui où il y a deux constructeurs: 0 d'arité 0 (donc une constante) et succ (autrement dit +1) d'arité 1. La récurrence traditionnelle se réduit donc à une récurrence structurelle sur ces deux constructeurs.

Bibliographie

  • (en) John E. Hopcroft, Rajeev Motwani et Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, Reading Mass, 2nd, (ISBN 0-201-44124-1)
  • R.M. Burstall, « Proving Properties of Programs by Structural Induction », The Computer Journal, vol. 12,‎ , p. 41–48 (DOI 10.1093/comjnl/12.1.41)
  • Niklaus Wirth Algorithms and Data Structures Prentice Hall (1985)
  • Rozsa Peter, Über die Verallgemeinerung der Theorie der rekursiven Funktionen für abstrakte Mengen geeigneter Struktur als Definitionsbereiche, Symposium International, Varsovie septembre (1959) (Sur la généralisation de la théorie des fonctions récursives à des quantités abstraites avec comme domaines des structures adaptées).

Voir aussi