- Fonction d'Ackermann
-
Dans la théorie de la récursivité, la fonction d'Ackermann (aussi appelée fonction d'Ackermann-Péter), est un exemple simple de fonction récursive non récursive primitive, trouvée en 1926 par Wilhelm Ackermann. Elle est souvent présentée sous la forme qu'en a proposé la mathématicienne Rózsa Péter, comme une fonction à deux paramètres entiers naturels comme arguments et qui retourne un entier naturel comme valeur, noté en général A(n, m).
Sommaire
Histoire
Dans les années 1920, Wilhelm Ackermann et Gabriel Sudan, alors étudiants sous la direction de David Hilbert, étudiaient les fondements de la calculabilité. Sudan est le premier à donner un exemple de fonction récursive mais non récursive primitive, appelée alors fonction de Sudan. Peu après et indépendamment, en 1928, Ackermann a publié son propre exemple de fonction récursive mais non récursive primitive[1]. À l'origine, Ackermann considéra une fonction A (m, n, p) dépendant de trois variables, et consistant à calculer la puissance itérée p fois de m par n, c'est-à-dire m → n → p pour utiliser la notation de Conway.
Ackermann démontra que sa fonction A était bien une fonction récursive, i.e. une fonction qu'un ordinateur idéalisé peut calculer. Dans Sur l'infini, David Hilbert conjectura que la fonction d'Ackermann n'était pas primitivement récursive. Cette conjecture fut établie par Ackermann lui-même dans son article Zum Hilbertschen Aufbau der reellen Zahlen[2]. Sur l'infini était l'article le plus important de Hilbert sur les bases des mathématiques, servant de cœur au programme de Hilbert pour fixer la base des nombres transfinis.
Une fonction semblable de seulement deux variables fut donnée plus tard par Rózsa Péter et Raphael Robinson ; c'est cette dernière qui est connue aujourd'hui sous le nom de fonction d'Ackermann.
Définition
La fonction d'Ackermann est définie récursivement comme suit :
Autrement dit :
Ackermann a lui-même initialement donné cette définition :
Elle satisfait aux égalités suivantes :
Table de valeurs
Valeurs de A(m, n) m\n 0 1 2 3 4 n 0 1 2 3 4 5 n + 1 1 2 3 4 5 6 n + 2 2 3 5 7 9 11 2n + 3 3 5 13 29 61 125 2n + 3 − 3 4 13 65533 265536 − 3 A(3, 265536 − 3) A(3, A(4, 3)) 22...2 − 3 (n + 3 termes) 5 65533 A(4, 65533) A(4, A(5, 1)) A(4, A(5, 2)) A(4, A(5, 3)) 6 A(5, 1) A(5, A(5, 1)) A(5, A(6, 1)) A(5, A(6, 2)) A(5, A(6, 3)) Importance épistémologique
La fonction d'Ackermann croît extrêmement rapidement; A(4,2) a déjà 19729 chiffres, et représente bien plus que le nombre d'atomes estimé dans l'univers. Cette extrême croissance peut être exploitée pour montrer que la fonction f définie par f(n) = A(n, n) croît plus rapidement que n'importe quelle fonction récursive primitive et ainsi que A n'est pas primitive récursive.
Cette fonction est néanmoins définissable par récursion primitive d'ordre supérieur, un schéma de récursion proposé par le système T de Gödel et ses extensions et est calculable par une machine de Turing. La fonction d'Ackermann constitue donc un exemple de fonction récursive, mais non récursive primitive. C'est peut-être l'exemple le plus célèbre de fonction récursive mais non récursive primitive, et c'est ce pour quoi elle est connue principalement, cependant son intérêt épistémologique va au delà.
L'exemple de la fonction d'Ackermann, montre que la notion de calculabilité introduite par les fonctions récursives primitives n'est pas la notion de calculabilité la plus générale, celle atteinte avec un grand succès par la thèse de Church. En effet, la fonction d'Ackermann est calculable au sens de Turing et de Church, mais pas à l'aide d'une fonction récursive primitive. C'est un exemple qui montre que la thèse de Church ne concerne pas tous les systèmes de calcul. Il existe des systèmes de calcul, qui semblent pourtant généralistes et puissants comme les fonctions récursives primitives, et qui effectivement permettent de définir la plupart des fonctions usuelles, mais qui ne sont pas équivalents aux machines de Turing et au Lambda-calcul. La calculabilité de la fonction d'Ackermann sert ici de critère distinctif, ceci révèle sa véritable importance épistémologique.
Description explicite
Intuitivement, la fonction d'Ackermann génère progressivement une multiplication par deux (additions réitérées), une exponentiation de base 2 (multiplications réitérées), une exponentiation réitérée, une réitération de cette opération, et ainsi de suite. Elle peut être exprimée en utilisant la notation des puissances itérées de Knuth :
- A(1, n) = 2 + (n + 3) - 3
- A(2, n) = 2 × (n + 3) - 3
- A(3, n) = 2 ↑ (n + 3) - 3
- A(4, n) = 2 ↑ (2 ↑ (2 ↑ (... ↑2))) - 3 (n + 3 deux)
- = 2↑↑(n + 3) - 3
- A(5, n) = 2↑↑↑(n + 3) - 3 etc.
On montre assez facilement par récurrence que:
- A(u, v) = 2↑(u-2)(v + 3) - 3
Réciproque
Puisque la fonction f définie par f(n) = A(n,n) considérée précédemment croît réellement très vite, sa réciproque croît vraiment très lentement. Il est intéressant de remarquer que cette réciproque apparaît dans l'analyse de la complexité de certains algorithmes, tels que l'algorithme Union-Find et un algorithme de calcul de l'arbre couvrant de poids minimal.
Applications pratiques
La fonction d'Ackermann demandant beaucoup de calculs même pour de petites entrées, elle est parfois utilisée comme programme de test d'une implémentation d'un langage de programmation : en particulier, elle utilise de façon très exigeante la récursivité, de même que ses consœurs fib (suite de Fibonacci) et tak (fonction de Takeuchi (en)).
En plus de tester directement les performances d'un langage de programmation, la fonction d'Ackermann a été utilisée comme exemple pour étudier des transformations de programme et des optimisations, en particulier dans le domaine de la spécialisation de programmes et de l'évaluation partielle (en)[3].
Voir aussi
- Explosion combinatoire
- Fonction récursive
- Fonction de Sudan
- Hyperopération
- Notation des puissances itérées de Knuth
- Notation des flèches chaînées de Conway
- Hiérarchie de croissance rapide
- Union-Find
- Récursivité
Références
- Solomon Marcus et Ionel Tevy, The first example of a recursive function which is not primitive récursive, Historia Math., vol. 6, n. 4, 1979, pp. 380–84 Cristian Calude,
- Mathematische Annalen, vol. 99, 1928, pp. 118–33. Wilhelm Ackermann, Zum Hilbertschen Aufbau der reellen Zahlen,
- 2003 Yanhong A. Liu et Scott D. Stoller, Optimizing Ackermann's Function by Incrementalization, Workshop on Partial Evaluation and Semantics Based Program Manipulation,
Liens externes
Catégories :- Calculabilité
- Fonction remarquable
- Grand nombre
Wikimedia Foundation. 2010.