Probleme – La récurrence forte est une induction bien fondée
Exercice · niveau 3 (difficile) · informatique (MP2I/MPI), chapitre 9 — Ordres bien fondés et induction structurelle
Énoncé
- Montrer que la récurrence forte sur est exactement le principe d'induction sur un ordre bien fondé.
- En déduire l'existence de la décomposition en facteurs premiers, et écrire la fonction.
- Prouver sa terminaison et sa correction, et donner sa complexité.
Corrigé
1. Les deux principes n'en font qu'un.
La récurrence forte dit : si pour tout , « vraie sur tous les » entraîne « vraie en », alors est vraie sur .
L'induction bien fondée dit : si est bien fondé sur et si pour tout , « vraie sur tous les » entraîne « vraie en », alors est vraie sur .
Prenons et l'ordre usuel : les deux énoncés sont le même texte. Et la démonstration du cours s'applique mot pour mot : si était fausse quelque part, l'ensemble des contre-exemples serait une partie non vide de , donc admettrait un plus petit élément ; tous les vérifieraient , donc aussi, contradiction.
Remarque qui lève une confusion fréquente. La récurrence forte n'a pas de « cas de base » séparé. Il est contenu dans l'hypothèse : pour , « vraie sur tous les » est vraie par vacuité, et l'hypothèse exige donc de prouver sans rien supposer. Le cas de base n'a pas disparu, il a été absorbé — exactement comme, dans l'induction structurelle, les assertions sont les éléments minimaux.
2. L'existence de la décomposition. Soit : « est un produit fini de nombres premiers ». Par récurrence forte.
Soit et supposons vraie sur . Si , c'est le produit vide — convention qui évite un cas particulier et qui n'est pas un artifice : le produit vide vaut . Si est premier, c'est un produit à un facteur. Sinon avec ; par hypothèse de récurrence, et sont des produits de premiers, et leur concaténation en donne un pour . C'est ici que la récurrence forte est indispensable : et ne sont pas , ils sont n'importe où en dessous de .
(* Renvoie la liste croissante des facteurs premiers de n, avec repetition.
Precondition : n >= 1. Postcondition : le produit de la liste vaut n
et tous ses elements sont premiers ; n = 1 donne la liste vide. *)
let rec facteurs n =
if n = 1 then []
else
let rec plus_petit_diviseur d =
if d * d > n then n (* aucun diviseur <= racine : n premier *)
else if n mod d = 0 then d
else plus_petit_diviseur (d + 1)
in
let p = plus_petit_diviseur 2 in
p :: facteurs (n / p)
3. Preuves et coût.
Terminaison de plus_petit_diviseur : variant , ou plus simplement le nombre d'entiers restant à essayer jusqu'à , qui décroît de à chaque appel.
Terminaison de facteurs : variant lui-même. Le facteur trouvé vaut au moins , donc , et . C'est bien la récurrence forte qui prouve la terminaison, pas une récurrence simple : l'appel ne porte pas sur .
Correction de plus_petit_diviseur : invariant « aucun entier de à ne divise ». S'il sort par , alors n'a aucun diviseur autre que ; il n'en a donc aucun du tout, car un diviseur apporterait le codiviseur . Donc est premier, et le rendre est correct. S'il sort par , est le plus petit diviseur , donc premier — car un diviseur de serait un diviseur plus petit de .
Correction de facteurs : par récurrence forte. Le produit de la liste rendue vaut , et tous ses éléments sont premiers puisque l'est et que ceux de l'appel récursif le sont par hypothèse.
Complexité. Chaque appel à plus_petit_diviseur coûte ; il y a au plus appels récursifs, l'argument étant au moins divisé par . Total : dans le pire cas, atteint pour premier — où l'unique parcours va jusqu'à .
Vérification, mesurée. Pour tout de à : le produit des facteurs rendus vaut , et tous sont premiers. Quelques valeurs : , , , et est premier.
Ce que le problème a montré au-delà de l'arithmétique. La récurrence forte n'est pas une variante commode de la récurrence : c'est l'induction sur , au même titre que l'induction structurelle est l'induction sur l'ordre induit. Un seul théorème, et l'on change seulement l'ordre bien fondé. C'est ce que le cours annonçait, et c'est ce qui rend le chapitre transverse.
Un mot sur ce que ce problème n'a pas prouvé : l'unicité de la décomposition. Elle est vraie, mais elle ne se déduit pas de cette récurrence — il y faut le lemme d'Euclide. Confondre les deux est l'erreur classique du théorème fondamental de l'arithmétique.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.