Adloun

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 :

AppelArgumentPourquoi 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.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre