ATLAS Ouvrir dans l'atlas →

Théorème 1Fonctions primitives récursives

La fonction d'Ackermann n'est pas primitive récursive

Pour x∈ℕnx \in \mathbb N^n, on note ∣x∣=max⁡(x1,…,xn)|x| = \max(x_1, \dots, x_n).

Énoncé

(i) Pour toute fonction primitive récursive ff d'arité nn, il existe un entier kk tel que f(x)<A(k,∣x∣)f(x) < A(k, |x|) pour tout x∈ℕnx \in \mathbb N^n.

(ii) La fonction d'Ackermann n'est pas primitive récursive, ni la fonction x↦A(x,x)x \mapsto A(x, x).

Démonstration

(i) Par le principe d'induction de Primitives récursives, il suffit de vérifier la propriété sur les fonctions de base et de montrer qu'elle se conserve. On emploie sans le dire la croissance de AA en chaque variable (Croissance d'Ackermann, (ii) et (iii)).

Fonctions de base. Z(x)=0<A(0,x)Z(x) = 0 < A(0, x), Pin(x)⩽∣x∣<A(0,∣x∣)P^n_i(x) \leqslant |x| < A(0, |x|), et S(x)=x+1<x+2=A(1,x)S(x) = x + 1 < x + 2 = A(1, x).

Composition. Soit h=f(g1,…,gm)h = f(g_1, \dots, g_m), avec f(u)<A(k0,∣u∣)f(u) < A(k_0, |u|) et gj(x)<A(kj,∣x∣)g_j(x) < A(k_j, |x|), et kk le plus grand des kjk_j, pour 0⩽j⩽m0 \leqslant j \leqslant m. Le mm-uplet u=(g1(x),…,gm(x))u = (g_1(x), \dots, g_m(x)) vérifie ∣u∣<A(k,∣x∣)|u| < A(k, |x|), d'où, par le point (v) du lemme, h(x)<A(k,∣u∣)<A(k,A(k,∣x∣))<A(k+2,∣x∣).\begin{aligned} h(x) &< A(k, |u|) < A\big(k, A(k, |x|)\big) \\ &< A(k + 2, |x|). \end{aligned}

Récurrence primitive. Soit h(x,0)=f(x)h(x, 0) = f(x) et h(x,y+1)=g(x,y,h(x,y))h(x, y + 1) = g(x, y, h(x, y)), avec f(x)<A(kf,∣x∣)f(x) < A(k_f, |x|) et g(u)<A(kg,∣u∣)g(u) < A(k_g, |u|). Posons k=max⁡(kf,kg)+1k = \max(k_f, k_g) + 1, et montrons par récurrence sur yy que h(x,y)<A(k,∣x∣+y).h(x, y) < A(k, |x| + y).

Pour y=0y = 0, c'est l'hypothèse sur ff. Supposons-le pour yy. Les trois entiers ∣x∣|x|, yy et h(x,y)h(x, y) sont strictement inférieurs à A(k,∣x∣+y)A(k, |x| + y), par (i) du lemme et par l'hypothèse. Comme kg⩽k−1k_g \leqslant k - 1, h(x,y+1)<A(k−1,A(k,∣x∣+y))=A(k,∣x∣+y+1).\begin{aligned} h(x, y + 1) &< A\big(k - 1, A(k, |x| + y)\big) \\ &= A(k, |x| + y + 1). \end{aligned}

Enfin ∣x∣+y⩽2∣(x,y)∣<2∣(x,y)∣+3=A(2,∣(x,y)∣)|x| + y \leqslant 2|(x, y)| < 2|(x, y)| + 3 = A(2, |(x, y)|), d'où, par (v) du lemme, h(x,y)<A(k,A(2,∣(x,y)∣))<A(max⁡(k,2)+2,∣(x,y)∣).\begin{aligned} h(x, y) &< A\big(k, A(2, |(x, y)|)\big) \\ &< A\big(\max(k, 2) + 2, |(x, y)|\big). \end{aligned}

Sans paramètre, h(0)=ah(0) = a et l'on prend kf=ak_f = a, puisque A(a,0)⩾a+1A(a, 0) \geqslant a + 1 par la croissance en xx ; le même calcul s'applique avec ∣x∣=0|x| = 0.

(ii) Si AA était primitive récursive, la fonction d(x)=A(P11(x),P11(x))=A(x,x)d(x) = A(P^1_1(x), P^1_1(x)) = A(x, x) le serait aussi, par composition. Par (i), il existerait kk tel que A(x,x)<A(k,x)A(x, x) < A(k, x) pour tout xx ; pour x=kx = k, on obtiendrait A(k,k)<A(k,k)A(k, k) < A(k, k).

□
Remarque

Les premières valeurs, calculées par la définition et vérifiées par le point (iv) du lemme, montrent la croissance de ligne en ligne : A(x,y)012345x=0123456x=1234567x=235791113x=35132961125253\begin{array}{c|cccccc} A(x, y) & 0 & 1 & 2 & 3 & 4 & 5 \\ \hline x = 0 & 1 & 2 & 3 & 4 & 5 & 6 \\ x = 1 & 2 & 3 & 4 & 5 & 6 & 7 \\ x = 2 & 3 & 5 & 7 & 9 & 11 & 13 \\ x = 3 & 5 & 13 & 29 & 61 & 125 & 253 \end{array} La démonstration dit plus que l'énoncé : chaque fonction primitive récursive est dominée par une seule ligne A(k,⋅)A(k, \cdot), et la diagonale A(x,x)A(x, x) finit par dépasser chacune d'elles.

Remarque

La fonction d'Ackermann est pourtant calculable par un procédé mécanique évident, qui déroule la définition. Le nœud Ackermann est récursive le traduit : elle est récursive, et l'inclusion des fonctions primitives récursives dans les fonctions récursives totales est donc stricte.

Repose sur

Sert à

Aucune fiche de ce graphe ne l'utilise encore.
Ouvrir dans l'atlas interactif →