Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. Weltenzyklopädie
  2. Induction structurelle — Wikipédia
Induction structurelle — Wikipédia 👆 Click Here! Read More..
Un article de Wikipédia, l'encyclopédie libre.
Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.
Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.

Certaines informations figurant dans cet article ou cette section devraient être mieux reliées aux sources mentionnées dans les sections « Bibliographie », « Sources » ou « Liens externes » (décembre 2017).

Vous pouvez améliorer la vérifiabilité en associant ces informations à des références à l'aide d'appels de notes.

En mathématiques et davantage en informatique, la définition récursive ou induction structurelle est un procédé de définition conjointe d'un type (classe ou ensemble) et d'objets (éléments) qui le compose au moyen de règles de construction (constructeurs) qui agencent ou structurent ces objets.

L'on peut ainsi définir des nombres, des listes, des arbres, des relations, et plus généralement, toute structure mathématique (langage, système, …). En permettant par le même principe de définir un prédicat total[pas clair] 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.

Outils mathématiques et informatiques

[modifier | modifier le code]

Les système, langages et logiciels supportant à des degrés divers cette fonctionnalité sont nombreux.

Cette section est vide, insuffisamment détaillée ou incomplète. Votre aide est la bienvenue ! Comment faire ?

L'un des plus puissants est le calcul des constructions inductives (CIC) et son logiciel Rocq.

Cette section est vide, insuffisamment détaillée ou incomplète. Votre aide est la bienvenue ! Comment faire ?

Caractéristiques

[modifier | modifier le code]
Cette section doit être déjargonisée (août 2023). Le texte doit être remanié en utilisant un vocabulaire plus directement compréhensible. Discutez des points à améliorer en page de discussion.

La définition récursives se distingue de la "macro" et de la définition algébrique en cela qu'elle est la seule créatrice d'objets. La « macro » n'est qu'un raccourci de langage (i.e., une notation), alors que la définition algébrique « quotiente » ou contraint et restreint un type préexistant ((en) carier) au moyen d'axiomes. En revanche, la définition inductive engendre ex nihilo ses objets. Les règles de construction sont donc procréatrice.

Ainsi contrairement à l'axiome, les règles de construction d'une récurrence bien fondée ne peuvent créer l'incohérence.

De plus, tout objet appartient à une génération. Dans le cas le plus général, cette génération est un entier ou un ordinal. Le nombre de générations peut donc être ω {\displaystyle \omega } {\displaystyle \omega }, fini … nulle (types vide) ou ne pas être.

La validité de l'induction découle du caractère bijectif du procédé de procréation :

  • injectivité : à construction différente, objet différent ;
  • surjectivité : tout objet a une construction.

L'induction structurelle est une généralisation de la récurrence traditionnelle.

Exemples

[modifier | modifier le code]

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

Les listes

[modifier | modifier le code]

Les listes sont définies comme étant

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

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

  • length ([ ]) = 0
  • length (a : ℓ {\displaystyle \ell } {\displaystyle \ell }) = 1 + length ( ℓ {\displaystyle \ell } {\displaystyle \ell }).

La fonction concat qui concatène deux listes ℓ 1 {\displaystyle \ell _{1}} {\displaystyle \ell _{1}} et ℓ 2 {\displaystyle \ell _{2}} {\displaystyle \ell _{2}}

  • concat ([ ], ℓ 2 {\displaystyle \ell _{2}} {\displaystyle \ell _{2}}) = ℓ 2 {\displaystyle \ell _{2}} {\displaystyle \ell _{2}}
  • concat (a : ℓ 1 {\displaystyle \ell _{1}} {\displaystyle \ell _{1}}, ℓ 2 {\displaystyle \ell _{2}} {\displaystyle \ell _{2}}) = a : (concat( ℓ 1 {\displaystyle \ell _{1}} {\displaystyle \ell _{1}}, ℓ 2 {\displaystyle \ell _{2}} {\displaystyle \ell _{2}}))

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

length(concat( ℓ 1 , ℓ 2 {\displaystyle \ell _{1},\ell _{2}} {\displaystyle \ell _{1},\ell _{2}})) = length( ℓ 1 {\displaystyle \ell _{1}} {\displaystyle \ell _{1}}) + length( ℓ 2 {\displaystyle \ell _{2}} {\displaystyle \ell _{2}}).

Première étape

length(concat([ ], ℓ 2 {\displaystyle \ell _{2}} {\displaystyle \ell _{2}})) = length( ℓ 2 {\displaystyle \ell _{2}} {\displaystyle \ell _{2}}) = 0 + length( ℓ 2 {\displaystyle \ell _{2}} {\displaystyle \ell _{2}}) = length([ ]) + length( ℓ 2 {\displaystyle \ell _{2}} {\displaystyle \ell _{2}})

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

length(concat(a : ℓ 1 {\displaystyle \ell _{1}} {\displaystyle \ell _{1}}, ℓ 2 {\displaystyle \ell _{2}} {\displaystyle \ell _{2}})) = length(a : concat( ℓ 1 {\displaystyle \ell _{1}} {\displaystyle \ell _{1}}, ℓ 2 {\displaystyle \ell _{2}} {\displaystyle \ell _{2}})) = 1 + length(concat( ℓ 1 {\displaystyle \ell _{1}} {\displaystyle \ell _{1}}, ℓ 2 {\displaystyle \ell _{2}} {\displaystyle \ell _{2}}))
= (par hypothèse d'induction structurelle) 1+ length( ℓ 1 {\displaystyle \ell _{1}} {\displaystyle \ell _{1}}) + length( ℓ 2 {\displaystyle \ell _{2}} {\displaystyle \ell _{2}}) = length(a: ℓ 1 {\displaystyle \ell _{1}} {\displaystyle \ell _{1}}) + length( ℓ 2 {\displaystyle \ell _{2}} {\displaystyle \ell _{2}})

Les arbres binaires

[modifier | modifier le code]

Considérons les arbres binaires définis ainsi :

  • ◻ {\displaystyle \Box } {\displaystyle \Box } pour l'arbre vide,
  • B 1 {\displaystyle _{1}} {\displaystyle _{1}} ∙ {\displaystyle \bullet } {\displaystyle \bullet } B 2 {\displaystyle _{2}} {\displaystyle _{2}} pour un arbre non vide ayant pour sous-arbre gauche B 1 {\displaystyle _{1}} {\displaystyle _{1}} et pour sous-arbre droit B 2 {\displaystyle _{2}} {\displaystyle _{2}}.

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

  • taille( ◻ {\displaystyle \Box } {\displaystyle \Box }) = 0
  • taille(B 1 {\displaystyle _{1}} {\displaystyle _{1}} ∙ {\displaystyle \bullet } {\displaystyle \bullet } B 2 {\displaystyle _{2}} {\displaystyle _{2}}) = taille(B 1 {\displaystyle _{1}} {\displaystyle _{1}}) + taille(B 2 {\displaystyle _{2}} {\displaystyle _{2}}) + 1

Principes

[modifier | modifier le code]

Premier principe d'induction

[modifier | modifier le code]
Article détaillé : Raisonnement par récurrence.

Sur N {\displaystyle \mathbb {N} } {\displaystyle \mathbb {N} }, le premier principe d'induction, permet, en montrant une propriété sur un cas de base et la conservation de cette propriété de manière héréditaire, de montrer la propriété pour tous les entiers naturels si le cas de base est n 0 = 0 {\displaystyle n_{0}=0} {\displaystyle n_{0}=0}.

Premier principe d'induction [1] — Soit P ( n ) {\displaystyle P(n)} {\displaystyle P(n)} un prédicat (une propriété) dépendant de l'entier n ∈ N {\displaystyle n\in \mathbb {N} } {\displaystyle n\in \mathbb {N} }. Si les deux conditions suivantes sont vérifiées :

  • ( B n 0 {\displaystyle B_{n_{0}}} {\displaystyle B_{n_{0}}}) P ( n 0 ) {\displaystyle P(n_{0})} {\displaystyle P(n_{0})} est vrai
  • ( H n 0 {\displaystyle H_{n_{0}}} {\displaystyle H_{n_{0}}}) ∀ n ⩾ n 0 , ( P ( n ) ⇒ P ( n + 1 ) ) {\displaystyle \forall n\geqslant n_{0},(P(n)\Rightarrow P(n+1))} {\displaystyle \forall n\geqslant n_{0},(P(n)\Rightarrow P(n+1))}

alors ∀ n ∈ N , n ⩾ n 0 , P ( n ) {\displaystyle \forall n\in \mathbb {N} ,n\geqslant n_{0},P(n)} {\displaystyle \forall n\in \mathbb {N} ,n\geqslant n_{0},P(n)} est vrai.

( B n 0 {\displaystyle B_{n_{0}}} {\displaystyle B_{n_{0}}}) s'appelle l'étape de base de l'induction, elle affirme que P ( n 0 ) {\displaystyle P(n_{0})} {\displaystyle P(n_{0})} est vrai.

( H n 0 {\displaystyle H_{n_{0}}} {\displaystyle H_{n_{0}}}) s'appelle l'étape héréditaire ou inductive, elle affirme pour tout n ⩾ n 0 {\displaystyle n\geqslant n_{0}} {\displaystyle n\geqslant n_{0}} que si P ( n ) {\displaystyle P(n)} {\displaystyle P(n)} est vrai alors P ( n + 1 ) {\displaystyle P(n+1)} {\displaystyle P(n+1)} est vrai aussi[1].

Deuxième principe d'induction

[modifier | modifier le code]
Article détaillé : Raisonnement par récurrence#Récurrence forte.

Lorsque l'on a des cas plus complexes, que l'on ait besoin d'utiliser P ( n 0 ) , P ( n 0 + 1 ) , … P ( n ) {\displaystyle P(n_{0}),P(n_{0}+1),\dots P(n)} {\displaystyle P(n_{0}),P(n_{0}+1),\dots P(n)} pour montrer P ( n + 1 ) {\displaystyle P(n+1)} {\displaystyle P(n+1)}, il est plus pratique d'utiliser le second principe d'induction.

Deuxième principe d'induction [1] — Soit P ( n ) {\displaystyle P(n)} {\displaystyle P(n)} une propriété dépendant de l'entier n {\displaystyle n} {\displaystyle n}. Si la proposition suivante est vérifiée :

  • ( Γ n 0 {\displaystyle \Gamma _{n_{0}}} {\displaystyle \Gamma _{n_{0}}}) ∀ n ∈ N , n ⩾ n 0 , ( ( ∀ k ∈ { n 0 , … , n − 1 } , P ( k ) ) ⇒ ( P ( n ) ) ) {\displaystyle \forall n\in \mathbb {N} ,n\geqslant n_{0},{\big (}(\forall k\in \{n_{0},\dots ,n-1\},P(k))\Rightarrow (P(n)){\big )}} {\displaystyle \forall n\in \mathbb {N} ,n\geqslant n_{0},{\big (}(\forall k\in \{n_{0},\dots ,n-1\},P(k))\Rightarrow (P(n)){\big )}}

alors ∀ n ∈ N , n ⩾ n 0 , P ( n ) {\displaystyle \forall n\in \mathbb {N} ,n\geqslant n_{0},P(n)} {\displaystyle \forall n\in \mathbb {N} ,n\geqslant n_{0},P(n)} est vraie.

L'étape de base est cachée dans Γ n 0 {\displaystyle \Gamma _{n_{0}}} {\displaystyle \Gamma _{n_{0}}}.

Sur N {\displaystyle \mathbb {N} } {\displaystyle \mathbb {N} }, les deux principes d'induction sont équivalents, mais seul le deuxième principe d'induction se généralise à des ensembles ordonnés plus généraux[1].

Définition par induction structurelle

[modifier | modifier le code]

Considérons une structure définie par des constructeurs f 1 , . . . , f n {\displaystyle f_{1},...,f_{n}} {\displaystyle f_{1},...,f_{n}} d'arité a 1 , . . . , a n {\displaystyle a_{1},...,a_{n}} {\displaystyle a_{1},...,a_{n}}. Les constructeurs d'arité 0 sont des constantes.

La définition par induction structurelle d'une fonction g {\displaystyle g} {\displaystyle g} s'écrit pour chaque constructeur f i {\displaystyle f_{i}} {\displaystyle f_{i}}

  • g ( f i ( x 1 , . . x a i ) , y 1 , . . . y n ) = E i ( g ( x 1 ) , . . . , g ( x a i ) , y 1 , . . . , y n ) {\displaystyle g(f_{i}(x_{1},..x_{a_{i}}),y_{1},...y_{n})=E_{i}(g(x_{1}),...,g(x_{a_{i}}),y_{1},...,y_{n})} {\displaystyle g(f_{i}(x_{1},..x_{a_{i}}),y_{1},...y_{n})=E_{i}(g(x_{1}),...,g(x_{a_{i}}),y_{1},...,y_{n})}

où E i {\displaystyle E_{i}} {\displaystyle E_{i}} est une expression qui dépend de i'. On remarque que si f i {\displaystyle f_{i}} {\displaystyle f_{i}} est une constante, la définition est celle d'un cas de base:

  • g ( f i , y 1 , . . . y n ) = E i ( y 1 , . . . , y n ) {\displaystyle g(f_{i},y_{1},...y_{n})=E_{i}(y_{1},...,y_{n})} {\displaystyle g(f_{i},y_{1},...y_{n})=E_{i}(y_{1},...,y_{n})}

Raisonnement par induction structurelle

[modifier | modifier le code]

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 f i {\displaystyle f_{i}} {\displaystyle f_{i}}

P ( x 1 ) . . . P ( x a i ) P ( f i ( x 1 , . . . , x a i ) ) {\displaystyle {\frac {P(x_{1})...P(x_{a_{i}})}{P(f_{i}(x_{1},...,x_{a_{i}}))}}} {\displaystyle {\frac {P(x_{1})...P(x_{a_{i}})}{P(f_{i}(x_{1},...,x_{a_{i}}))}}}

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

Le cas des entiers naturels

[modifier | modifier le code]

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.

La coinduction

[modifier | modifier le code]

Grossièrement la coinduction étend l'induction en offrant la possibilité d'omettre les éléments initiaux (le jardin d'éden).

Par exemple, omettre la liste vide, transforme la liste en flux ((en) stream). : Un flux de trucs est un truc qui s'ajoute à un flux de trucs.


Bibliographie

[modifier | modifier le code]
  • (en) John E. Hopcroft, Rajeev Motwani et Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, Reading Mass, Addison-Wesley, 2001, 2nd éd., 521 p. (ISBN 0-201-44124-1)
  • (en) R.M. Burstall, « Proving Properties of Programs by Structural Induction », The Computer Journal, vol. 12, no 1,‎ février 1968, p. 41–48 (DOI 10.1093/comjnl/12.1.41, lire en ligne)
  • Niklaus Wirth, Algorithms and Data Structures, Prentice Hall, 1985 (lire en ligne)
  • Horst Reichel, Structural induction on partial algebras, Akademie-Verlag, 1984
  • Jason Filippou, « Structural Induction », 7 mai 2016
  • 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 ensembles abstraits avec, comme domaines, des structures adaptées).

Références

[modifier | modifier le code]
  1. ↑ a b c et d André Arnold et Irène Guessarian, Mathématiques pour l'informatique: avec exercices corrigés, Masson, coll. « Enseignement de l'informatique », 1997 (ISBN 978-2-225-82919-2)

Voir aussi

[modifier | modifier le code]
  • Forme de Backus-Naur
  • Type récursif
  • Définition par récurrence
  • Ordre bien fondé
  • Raisonnement par récurrence
  • Récurrence transfinie
  • Terme (logique)
v · m
Types de données
Non interprétée
  • Bit
  • Byte
  • Trit
  • Tryte
  • Mot
Numérique
  • Bignum
  • Complexe (en)
  • Décimal (en)
  • Virgule fixe
  • Virgule flottante
  • Entier
    • Non signé (en)
  • Intervalle
  • Rationnel (en)
Texte brut
  • Caractère
  • Chaîne de caractères
Pointeur
  • Adressage mémoire
    • Physique
    • Virtuelle
  • Référence
Composite (en)
  • Type algébrique de données
    • Généralisé
  • Tableau
  • Tableau associatif
  • Classe
  • Dépendant
  • Égalité (en)
  • Inductive (en)
  • Liste
  • Objet
    • Métaobjet
  • Option (en)
  • Produit
    • Enregistrement
  • Ensemble (set)
  • Vecteur
  • Union (en)
    • Disjointe
Autres
  • Booléen
  • Type vide
  • Collection
  • Conteneur
  • Type énuméré
  • Exception
  • Fonction
  • Opaque (en)
  • Type récursif
  • Sémaphore
  • Flux
  • Top (en)
  • Type class (en)
  • Type unité
  • Void
Articles liés
  • Type abstrait
  • Structure de données
  • Généricité
  • Kind (en)
    • Métaclasse
  • Parametric polymorphism (en)
  • Primitive data type (en)
  • Interface
  • Subtyping (en)
  • Type constructor (en)
  • Conversion de type
  • Type system (en)
v · m
Éléments de programmation informatique
Bibliothèque logicielle
  • Bibliothèque standard
  • Espace de noms
  • Framework
  • Gabarit
  • Interface
  • Interface de programmation (API)
Vocabulaire
  • Algorithme
  • Expression
  • Indentation
  • Instruction
  • Ligne de code
  • Opérateur
  • Pseudo-code
  • Ramasse-miettes
Fonctions
  • Dispatch multiple
  • Factorisation
  • Fonction imbriquée
  • Fonction de rappel
  • Fonction d'ordre supérieur
  • Fonction récursive
  • Généricité
  • Opérande
  • Paramètre
  • Polymorphisme
  • Procédure
  • Signature de type
  • Surcharge
Objet
  • Classe
  • Constructeur
  • Destructeur
  • Encapsulation
  • Héritage
  • Héritage multiple
  • Instance
  • Méthode
Événementiel Inversion de contrôle
Code source
Structures de données
  • Arbre
  • Enregistrement
  • Ensemble
  • File
  • Liste
  • Liste chaînée
  • Pile
  • Sémaphore
  • Tableau
  • Tas
  • Type abstrait
  • Vecteur
Déclarations
  • Affectation
  • Convention de nommage
  • Pointeur
  • Portée
  • Référence
  • Tableau associatif
  • Type énuméré
  • Type récursif
  • Typage statique
  • Variable
  • Variable globale
  • Variable locale
Structures de contrôle
  • Case
  • Eval
  • For
  • Goto
  • Switch
  • While
Fonctions usuelles
  • Concaténation
  • Incrémentation
  • malloc
  • printf
Outil de développement
  • Environnement de développement
  • Générateur de documentation
  • Gestion de versions
  • Modèle
  • Patch
  • Spécification
Folklore
  • Hello world
  • Principe KISS
  • Langage de programmation exotique
Catégories :
  • Programmation informatique
  • Développement logiciel
  • icône décorative Portail de la programmation informatique
  • icône décorative Portail de la logique
  • icône décorative Portail des mathématiques
  • icône décorative Portail de l'informatique théorique
Ce document provient de « https://fr.teknopedia.teknokrat.ac.id/w/index.php?title=Induction_structurelle&oldid=225702566 ».
Catégories :
  • Structure de données
  • Logique mathématique
  • Raisonnement mathématique
  • Méthode de démonstration
Catégories cachées :
  • Article avec source à lier
  • Article avec une section vide ou incomplète
  • Article à déjargoniser
  • Article contenant un appel à traduction en anglais
  • Portail:Programmation informatique/Articles liés
  • Portail:Informatique/Articles liés
  • Portail:Logique/Articles liés
  • Portail:Mathématiques/Articles liés
  • Portail:Sciences/Articles liés
  • Portail:Informatique théorique/Articles liés

  • indonesia
  • Polski
  • الرية
  • Deutsch
  • English
  • Español
  • Français
  • Italiano
  • مصر
  • Nederlands
  • 本語
  • Português
  • Sinugboanong Binisaya
  • Svenska
  • Українска
  • Tiếng Việt
  • Winaray
  • 中文
  • Русски
Sunting pranala
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022
Email: pmb@teknokrat.ac.id