ATLAS Ouvrir dans l'atlas →

Lemme 1Arithmétisation de la syntaxe

Récurrence de valeurs

Soit p⩾0p \geqslant 0 et f:ℕp+1→ℕf : {\mathbb N^{p+1}} \to \mathbb N une fonction. Pour x∈ℕpx \in \mathbb N^p et n∈ℕn \in \mathbb N, on note fˉ(x,n)=⟨f(x,0),…,f(x,n−1)⟩\bar f(x, n) = \langle f(x, 0), \dots, f(x, n - 1) \rangle le code de la suite de ses valeurs avant nn, au sens de Codages ; ainsi fˉ(x,0)=0\bar f(x, 0) = 0. Comme lg(fˉ(x,n))=n\mathrm{lg}(\bar f(x, n)) = n, on a (fˉ(x,n))m=f(x,m)(\bar f(x, n))^m = f(x, m) pour tout m<nm < n, où (N,j)↦(N)j(N, j) \mapsto (N)^j est la fonction primitive récursive de Codages, (iii), définie pour tous NN et jj par la formule qui y est donnée.

Pour une relation R⊂ℕp+1R \subset \mathbb N^{p+1}, on note de même χˉR\bar\chi_R pour χR‾\overline{\chi_R}.

Énoncé

(i) Soit G:ℕp+2→ℕG : \mathbb N^{p+2} \to \mathbb N une fonction primitive récursive. Il existe une unique fonction f:ℕp+1→ℕf : \mathbb N^{p+1} \to \mathbb N telle que, pour tous xx et nn, f(x,n)=G(x,n,fˉ(x,n)),f(x, n) = G\big(x, n, \bar f(x, n)\big), et elle est primitive récursive.

(ii) Soit Q⊂ℕp+2Q \subset \mathbb N^{p+2} une relation primitive récursive. Il existe une unique relation R⊂ℕp+1R \subset \mathbb N^{p+1} telle que, pour tous xx et nn, R(x,n)  ⟺  Q(x,n,χˉR(x,n)),R(x, n) \iff Q\big(x, n, \bar\chi_R(x, n)\big), et elle est primitive récursive.

C'est le principe de récurrence de valeurs : une fonction dont la valeur en nn se calcule, de façon primitive récursive, à partir de toutes ses valeurs en des entiers plus petits que nn est primitive récursive.

Démonstration

(i) Existence. Définissons F:ℕp+1→ℕF : \mathbb N^{p+1} \to \mathbb N par récurrence primitive (Primitives récursives) : F(x,0)=0,F(x,n+1)=aj(F(x,n),G(x,n,F(x,n))),\begin{aligned} F(x, 0) &= 0, \\ F(x, n + 1) &= \mathrm{aj}\big(F(x, n), \\ &\qquad\quad G(x, n, F(x, n))\big), \end{aligned} où aj\mathrm{aj} est la fonction d'ajout de Codages. Pour p=0p = 0, c'est la récurrence primitive sans paramètre, avec l'entier initial 00. La fonction f(x,n)=G(x,n,F(x,n))f(x, n) = G(x, n, F(x, n)) est primitive récursive, par composition.

Montrons par récurrence sur nn que F(x,n)=fˉ(x,n)F(x, n) = \bar f(x, n). Pour n=0n = 0, les deux membres valent 00, code de la suite vide. Si F(x,n)=fˉ(x,n)F(x, n) = \bar f(x, n), alors G(x,n,F(x,n))=f(x,n)G(x, n, F(x, n)) = f(x, n) par définition de ff, et F(x,n+1)=aj(fˉ(x,n),f(x,n))=fˉ(x,n+1),\begin{aligned} F(x, n + 1) &= \mathrm{aj}\big(\bar f(x, n), f(x, n)\big) \\ &= \bar f(x, n + 1), \end{aligned} puisque l'ajout place f(x,n)f(x, n) à la fin de la suite codée par fˉ(x,n)\bar f(x, n). Ainsi f(x,n)=G(x,n,fˉ(x,n))f(x, n) = G(x, n, \bar f(x, n)) pour tous xx et nn.

Unicité. Soit f′f' une autre fonction qui vérifie la même égalité, et xx fixé. Montrons par récurrence forte sur nn que f′(x,n)=f(x,n)f'(x, n) = f(x, n) : si c'est vrai pour tout m<nm < n, les suites (f′(x,0),…,f′(x,n−1))(f'(x, 0), \dots, f'(x, n - 1)) et (f(x,0),…,f(x,n−1))(f(x, 0), \dots, f(x, n - 1)) sont égales, donc fˉ′(x,n)=fˉ(x,n)\bar f'(x, n) = \bar f(x, n), et les deux égalités donnent f′(x,n)=f(x,n)f'(x, n) = f(x, n).

(ii) Appliquons (i) à G=χQG = \chi_Q : la fonction ff obtenue ne prend que les valeurs 00 et 11, et la relation R={(x,n):f(x,n)=1}R = \{(x, n) : f(x, n) = 1\} a pour fonction caractéristique χR=f\chi_R = f. Elle est primitive récursive, et R(x,n)  ⟺  f(x,n)=1  ⟺  Q(x,n,χˉR(x,n)).\begin{aligned} R(x, n) &\iff f(x, n) = 1 \\ &\iff Q\big(x, n, \bar\chi_R(x, n)\big). \end{aligned} Si R′R' vérifie la même équivalence, χR′\chi_{R'} vérifie l'égalité de (i) avec G=χQG = \chi_Q, donc χR′=f=χR\chi_{R'} = f = \chi_R par l'unicité de (i).

□
Remarque

Dans toutes les applications de ce chapitre, la fonction GG, ou la relation QQ, ne lit sa dernière variable hh qu'à travers des termes (h)m(h)^m pour des entiers m<nm < n ; lorsque h=fˉ(x,n)h = \bar f(x, n), ce sont les valeurs f(x,m)f(x, m). L'erreur la plus répandue est d'oublier cette condition : une définition qui ferait appel à f(x,2n)f(x, 2n) pour calculer f(x,n)f(x, n) n'est pas une récurrence de valeurs, et elle peut n'avoir aucune solution, comme f(n)=f(2n)+1f(n) = f(2n) + 1, qui imposerait f(0)=f(0)+1f(0) = f(0) + 1, ou en avoir plusieurs, comme f(n)=f(2n)f(n) = f(2n). Les entiers mm consultés seront toujours des codes de sous-mots propres, plus petits que nn par le point (ii) du codage des mots.

Remarque

La récurrence de valeurs ne sort pas de la classe des fonctions primitives récursives, contrairement à la double récurrence qui définit la fonction d'Ackermann. Elle ne fait que réorganiser une récurrence primitive autour de l'historique fˉ(x,n)\bar f(x, n), que l'on transporte d'une étape à la suivante comme une pile : à chaque étape, on calcule une valeur et on l'ajoute à la fin.

Ouvrir dans l'atlas interactif →