Ackermann : ce qui décroît quand rien ne décroît
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 9 — Ordres bien fondés et induction structurelle
É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.
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.