informatique (MP2I/MPI) · Chapitre 9 · Exercice de TD
Ackermann : ce qui décroît quand rien ne décroît
Ordres bien fondés et induction structurelle · niveau 2
Énoncé
- Vérifier que ni ni ne décroît à chaque appel de la fonction d'Ackermann.
- Donner l'ordre bien fondé qui prouve la terminaison, et le vérifier sur les trois appels récursifs.
- Calculer , et en fonction de .
Corrigé
1. Le troisième cas est celui qui résiste.
else ackermann (m - 1) (ackermann m (n - 1))
L'appel interne est ackermann m (n - 1) : n'a pas bougé. L'appel externe est ackermann (m - 1) v où est la valeur rendue par l'appel interne — et cette valeur est en général beaucoup plus grande que . Ni ni ne décroît donc à chaque appel, et aucun variant entier construit sur l'un ou l'autre ne peut fonctionner.
2. Le couple décroît pour l'ordre lexicographique sur , qui est bien fondé. Les trois appels :
| Appel | Argument | Pourquoi il est plus petit |
|---|---|---|
ackermann (m-1) 1 | : première composante | |
ackermann m (n-1) | et : seconde | |
ackermann (m-1) v | , quel que soit |
La dernière ligne est le cœur de l'affaire : l'ordre lexicographique permet à la seconde composante d'exploser pourvu que la première baisse. C'est ce qu'aucun ordre produit ne permettrait — et sont incomparables pour le produit dès que .
3. Les formes closes, obtenues et vérifiées par le calcul :
Valeurs mesurées : ; ; et .
Le prix de la terminaison. Le nombre d'appels a été compté :
| valeur | |||||
| appels |
et demande appels. La fonction termine pour tout couple — c'est démontré — et pourtant compte chiffres. Terminaison et faisabilité sont deux questions différentes, et l'ordre bien fondé ne répond qu'à la première.