Voici une boucle : while n != 1: n = n // 2 if n % 2 == 0 else 3 n + 1…
Exercice supplémentaire · niveau 3 (difficile) · NSI (première), chapitre 7 — Parcourir, trier, prouver · Terminaison, échanges, partitions
Énoncé
Voici une boucle : while n != 1: n = n // 2 if n % 2 == 0 else 3<em>n + 1. Trouver un variant. Indication :* personne n'y est parvenu à ce jour — c'est la conjecture de Syracuse. Que peut-on en conclure sur la difficulté de prouver une terminaison ?
Corrigé
Pourquoi n lui-même ne convient pas. Il ne décroît pas : sur un impair, il est multiplié par et augmenté de . Partant de , la suite monte à avant de redescendre. Partant de , elle culmine à — plus de trois cents fois la valeur de départ — et met tours à retomber sur .
| de départ | tours | plus haut sommet atteint |
|---|---|---|
Aucune régularité : met plus de tours que tout en atteignant le même sommet. Sur tous les de à , le record de longueur est détenu par , avec tours. La boucle s'arrête sur tous les jusqu'à — vérifié — mais cela ne prouve rien.
Ce qu'il faudrait, et qu'on n'a pas. Un variant est une quantité entière, positive, qui décroît strictement à chaque tour. Ici, aucune quantité de ce genre n'est connue. Ce n'est pas faute d'avoir cherché : la conjecture est ouverte depuis les années , et Paul Erdős disait à son sujet que « les mathématiques ne sont pas prêtes pour de tels problèmes ».
Trois conclusions, et la troisième est la plus importante.
- Prouver une terminaison peut être arbitrairement difficile, même pour une boucle d'une ligne que n'importe quel élève de première comprend.
- Un test massif — cent mille valeurs — ne remplace pas une preuve. Il reste une infinité d'entiers non testés, et un seul contre-exemple suffirait.
- Il n'existe aucun programme capable de décider, en général, si un programme s'arrête : c'est le problème de l'arrêt, démontré indécidable par Turing en 1936. La difficulté n'est donc pas une faiblesse de notre méthode, c'est une limite de principe.
Ce qu'il faut en retenir pour l'examen. Que le variant est un outil puissant quand il existe — et il existe pour toutes les boucles du programme, dichotomie comprise. Qu'on ne sache pas toujours en trouver un ne retire rien à ceux qu'on trouve.
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.