Article de reference

fonction d'Ackermann

En théorie de la calculabilité , la fonction d'Ackermann , nommée d'après Wilhelm Ackermann , est l'un des exemples les plus simples et les plus anciens de fonction totalement c...

théorie de la calculabilité , la fonction d'Ackermann , nommée d'après Wilhelm Ackermann , est l'un des exemples les plus simples et les plus anciens de fonction totalement calculable qui n'est pas primitive récursive . Toutes les fonctions primitives récursives sont totales et calculables, mais la fonction d'Ackermann illustre le fait que toutes les fonctions totalement calculables ne sont pas primitives récursives. Elle est essentiellement construite en diagonalisant une suite de fonctions primitives récursives choisies dans la hiérarchie de Grzegorczyk . Ceci fait de la fonction d'Ackermann le premier point limite de cette hiérarchie à croissance rapide .

Définition

Définition : en tant que fonction m -aire

La fonction originale à trois arguments d'Ackermann est définie récursivement comme suit pour les entiers non négatifs et :

2 \\\\ \\varphi(m, n, p) &= \\varphi(m, \\varphi(m, n-1, p), p - 1) && \ ext{for } n, p > 0 \\end{align}" 2\\\varphi (m,n,p)&=\varphi (m,\varphi (m,n-1,p),p-1)&&{ ext{for }}n,p>0\end{aligned φ(m,n,0)=m+nφ(m,0,1)=0φ(m,0,2)=1φ(m,0,p)=mfor p>2φ(m,n,p)=φ(m,φ(m,n1,p),p1)for n,p>0{\displaystyle {\begin{aligned}\varphi (m,n,0)&=m+n\\\varphi (m,0,1)&=0\\\varphi (m,0,2)&=1\\\varphi (m,0,p)&=m&&{ ext{for }}p>2\\\varphi (m,n,p)&=\varphi (m,\varphi (m,n-1,p),p-1)&&{ ext{for }}n,p>0\end{aligned}}}2\\\varphi (m,n,p)&=\varphi (m,\varphi (m,n-1,p),p-1)&&{ ext{pour }}n,p>0\end{aligned

Parmi les différentes versions à deux arguments, celle développée par Péter et Robinson (appelée « la » fonction d'Ackermann par la plupart des auteurs) est définie pour les entiers non négatifs et comme suit :

La fonction d'Ackermann a également été exprimée en relation avec la séquence d'hyperopération :

0 \\\\ \\end{cases}" 0\\\end{cases A(m,n)={n+1m=02[m](n+3)3m>0{\displaystyle A(m,n)={\begin{cases}n+1&m=0\\2[m](n+3)-3&m>0\\\end{cases}}}0\\\end{cases

ou, écrit dans la notation de Knuth avec flèche vers le haut (étendue aux indices entiers ) :

0 \\\\ \\end{cases}" 0\\\end{cases A(m,n)={n+1m=02m2(n+3)3m>0{\displaystyle A(m,n)={\begin{cases}n+1&m=0\\2\uparrow ^{m-2}(n+3)-3&m>0\\\end{cases}}}0\\\end{cases

ou, de manière équivalente, en termes de la fonction F de Buck :

0 \\\\ \\end{cases}" 0\\\end{cases A(m,n)={n+1m=0F(m,n+3)3m>0{\displaystyle A(m,n)={\begin{cases}n+1&m=0\\F(m,n+3)-3&m>0\\\end{cases}}}0\\\end{cases

Par récurrence sur , on peut montrer que pour tout .

Définition : en tant que fonction 1-aire itérée

Définir comme la n -ième itération de :

L'itération est le processus qui consiste à composer une fonction avec elle-même un certain nombre de fois. La composition de fonctions est une opération associative , donc …

En concevant la fonction d'Ackermann comme une suite de fonctions unaires, on peut définir .

La fonction devient alors une séquence de fonctions unaires , définies à partir de l'itération :

Calcul

Calcul par programme LOOP

Les fonctions s’inscrivent dans la hiérarchie à croissance rapide (FGH) (niveau fini) des fonctions

L'inégalité suivante est vérifiée : 1,\forall n>1:\operatorname {A} _{m}(n)<\operatorname {FGH} _{m}(n)

Pour une valeur fixe de , la fonction peut être calculée par un programme LOOP de profondeur d'imbrication :

d'hyperopérations :

0 \\\\ \\end{cases}" 0\\\end{cases A(m,n)={n+1m=02[m](n+3)3m>0{\displaystyle A(m,n)={\begin{cases}n+1&m=0\\2[m](n+3)-3&m>0\\\end{cases}}}0\\\end{cases

ou, après suppression de la constante 2 de la liste des paramètres, en termes de fonction de Buck

0 \\\\ \\end{cases}" 0\\\end{cases A(m,n)={n+1m=0F(m,n+3)3m>0{\displaystyle A(m,n)={\begin{cases}n+1&m=0\\F(m,n+3)-3&m>0\\\end{cases}}}0\\\end{cases

La fonction de Buck , une variante de la fonction d'Ackermann, peut être calculée avec les règles de réduction suivantes :

Ces règles prennent en charge le cas de base , l'alignement et le correctif (-3).

Exemple

Calculer

en utilisant la règle de réduction :

Les égalités correspondantes sont

  • lorsque le TRS avec la règle de réduction est appliqué :

  • lorsque le TRS avec la règle de réduction est appliqué :

  • Le calcul de selon les règles {b1 ​​- b5, b6, r8 - r10} est profondément récursif. La profondeur maximale des itérations est . Le problème vient de l'ordre d'exécution des itérations : . La première itération disparaît seulement après le déroulement complet de la séquence.
  • Le calcul selon les règles {b1 ​​- b5, b7, r8 - r10} est plus efficace à cet égard. L'itération simule la boucle répétée sur un bloc de code. L'imbrication est limitée à un niveau de récursion par fonction itérée.
  • La mémoïsation est une technique d'optimisation qui consiste à mettre en cache les résultats des appels de fonction et à les restituer lorsque les mêmes entrées sont utilisées à nouveau. Voir par exemple

nombres naturels sur la première ligne. Pour trouver un nombre dans le tableau, on prend celui qui se trouve immédiatement à sa gauche. On utilise ensuite ce nombre pour chercher le nombre recherché dans la colonne correspondante, une ligne plus haut. S'il n'y a pas de nombre à sa gauche, on consulte simplement la colonne « 1 » de la ligne précédente. Voici un extrait du coin supérieur gauche du tableau :

Valeurs de A ( m , n )
123456
2357911
35132961125
413655332 65536 – 3
565533
6
m

Les nombres ici exprimés uniquement par exponentiation récursive ou par flèches de Knuth sont très grands et prendraient trop de place pour être notés en chiffres décimaux simples.

Malgré les grandes valeurs présentes dans cette première partie du tableau, des nombres encore plus grands ont été définis, comme le nombre de Graham , qui ne peut être représenté par un petit nombre de flèches de Knuth. Ce nombre est construit selon une technique similaire à l'application récursive de la fonction d'Ackermann à elle-même.

Il s'agit d'une répétition du tableau ci-dessus, mais avec les valeurs remplacées par l'expression correspondante de la définition de la fonction afin de mettre clairement en évidence le modèle :

Valeurs de A ( m , n )
ordre lexicographique des paires, qui est un bon ordre , tout comme l'ordre des entiers non négatifs ; cela signifie qu'on ne peut pas descendre dans cet ordre une infinité de fois de suite.) Cependant, lorsque diminue, il n'y a pas de limite supérieure à sa croissance — et celle-ci est souvent importante.