Comment démontrer qu'un algorithme avec une boucle donne toujours le bon résultat ?
Pour la division de a par b par soustractions successives, la propriété a = bq + r reste vraie à chaque tour : c'est un invariant. À la sortie, r < b, donc q et r sont le quotient et le reste. Une récurrence sur le nombre de tours le prouve, et la décroissance de r prouve que la boucle s'arrête.
Grand oral session 2027 : exposé de 10 minutes debout, puis 10 minutes d'échange, sans calculatrice. Plan prévu pour 9,5 min.
Pourquoi cette question : un modèle d'introduction
Le jury attend que vous expliquiez pourquoi vous avez choisi la question. Inspirez-vous de ce modèle, mais racontez votre propre parcours.
En NSI, on nous demande souvent de « prouver » un algorithme, et j'avais du mal à comprendre ce que cela signifiait : le programme marche, pourquoi le démontrer ? J'ai compris le jour où un de mes programmes, testé sur dix exemples, s'est révélé faux sur un cas limite. L'invariant de boucle m'est alors apparu comme la version informatique du raisonnement par récurrence.
L'enjeu et les notions du programme
Prouver la correction et la terminaison d'un algorithme itératif par un invariant (récurrence) et un variant (suite d'entiers décroissante).
Mathématiques
- Raisonnement par récurrence (terminale)
- Division euclidienne (seconde)
- Suites d'entiers strictement décroissantes (première)
Numérique et sciences informatiques
- Correction d'un algorithme, invariant de boucle (première)
- Terminaison, variant de boucle (première)
Le plan de l'exposé en 9,5 min
1. Introduction
1 minTester un programme sur des exemples ne prouve pas qu'il est juste. Problématique : comment démontrer qu'un algorithme comportant une boucle donne le bon résultat pour toutes les entrées ?
2. NSI : l'algorithme étudié
2,5 minDivision de a≥0 par b>0 par soustractions : on pose q=0 et r=a ; tant que r≥ b, on remplace r par r-b et q par q+1. On renvoie q et r.
Exemple avec a=17, b=5 : (q;r) vaut (0;17), (1;12), (2;7), (3;2). On s'arrête car 2<5 : quotient 3, reste 2, et 17=5×3+2.
3. Mathématiques : invariant et variant
4,5 minInvariant : « a=bq+r et r≥0 ». Initialisation : avant la boucle, q=0, r=a, donc bq+r=a, et r=a≥0. Conservation : si a=bq+r et r≥ b au début d'un tour, après le tour b(q+1)+(r-b)=bq+r=a, et r-b≥0. Par récurrence sur le nombre de tours, l'invariant est vrai après chaque tour.
À la sortie, la condition de boucle est fausse : r<b. Avec l'invariant, a=bq+r et 0≤ r<b : ce sont exactement le quotient et le reste de la division euclidienne. L'algorithme est correct.
Terminaison : r est un entier positif qui diminue de b≥1 à chaque tour ; une suite d'entiers naturels strictement décroissante ne peut pas être infinie. Le nombre de tours est q. C'est le variant de boucle.
Le cas limite b=0 montre l'utilité des hypothèses : r ne décroît plus et la boucle ne s'arrête jamais.
4. Conclusion
1,5 minUn invariant de boucle est une récurrence déguisée : vrai au départ, conservé à chaque tour, il donne le résultat à la sortie. Un variant, entier qui décroît, prouve l'arrêt. Ensemble, ils démontrent un algorithme pour toutes les entrées. J'ouvre sur les outils de preuve automatique, utilisés pour les logiciels du métro ou des avions.
Ce que j'écris au tableau
Pas de calculatrice ni de support numérique : un calcul clé écrit au tableau rend l'exposé concret et montre la solidité des connaissances.
sortie : r<b ⇒ a=bq+r, 0≤ r<b 17: (0;17)→(1;12)→(2;7)→(3;2)
Conclusion : la réponse à la question
Un algorithme se démontre comme un théorème : l'invariant joue le rôle de l'hérédité, le variant garantit l'arrêt. Le cas b = 0 rappelle que toute preuve repose sur des hypothèses.
Les questions probables du jury
Pendant les 10 minutesd'échange, le jury vous fait préciser et approfondir, sur tout le programme de vos spécialités en lien avec la question.
Qu'est-ce qu'un invariant de boucle ?
Une propriété vraie avant la boucle et conservée par chaque tour ; elle reste donc vraie à la sortie.
Combien de tours pour a = 100 et b = 7 ?
Le quotient : 14 tours (100=7×14+2).
Pourquoi une suite d'entiers naturels strictement décroissante est-elle finie ?
Elle perd au moins 1 à chaque terme ; partant de r₀, elle ne peut pas avoir plus de r₀ + 1 termes positifs.
Cet algorithme est-il efficace ?
Non pour de grands quotients : il fait q tours. La division posée ou l'opérateur // sont bien plus rapides.
Que se passe-t-il si a est négatif ?
La boucle ne s'exécute pas et renvoie q = 0, r = a < 0 : l'invariant r ≥ 0 est faux au départ.
Les pièges qui coûtent des points
- Confondre invariant (propriété conservée) et variant (quantité qui décroît).
- Oublier de prouver la terminaison.
- Ne pas utiliser la condition de sortie dans la conclusion.
Revoir les notions
Autres questions : logique et calculabilité
- Peut-on écrire un programme qui détecte tous les programmes qui tournent en boucle infinie ?
- Existe-t-il des nombres qu'aucun programme ne pourra jamais calculer ?
- Combien de fonctions logiques différentes peut-on construire avec n entrées, et peut-on toutes les réaliser avec ET, OU, NON ?
- Pourquoi « non (a et b) » ne veut-il pas dire « non a et non b », et pourquoi cette erreur cause-t-elle tant de bugs ?
Préparer l'oral, pas seulement le contenu
Gestion des 20 minutes de préparation, usage du tableau, posture debout, réponses au jury : la méthode complète, conforme aux règles de la session 2027.
Méthode : traiter une question de Grand oral →