ATLAS Ouvrir dans l'atlas →

Proposition 1Arithmétisation de la syntaxe

Codage des mots du langage de l'arithmétique

Le langage de l'arithmétique a pour signature une constante 00, un symbole de fonction unaire SS et deux symboles de fonctions binaires ++ et ×\times (Langage, signature). On énumère son alphabet par a0==, a1=¬, a2=→, a3=∀,a4=0, a5=S, a6=+, a7=×,\begin{aligned} &a_0 = {=},\ a_1 = \neg,\ a_2 = {\to},\ a_3 = \forall, \\ &a_4 = 0,\ a_5 = S,\ a_6 = +,\ a_7 = \times, \end{aligned} puis a8+i=xia_{8+i} = x_i pour les variables : la lettre aka_k est une variable si et seulement si k⩾8k \geqslant 8.

Le code d'un mot w=ak0⋯akm−1w = a_{k_0} \cdots a_{k_{m-1}} est l'entier ⌜w⌝=⟨k0,…,km−1⟩\ulcorner w \urcorner = \langle k_0, \dots, k_{m-1} \rangle, codage du point (iii) de l'extension par témoins, repris dans Codages. Tout entier est le code d'une unique suite finie d'entiers, donc d'un unique mot ; on parle du « mot de code NN », dont la lettre de rang jj est a(N)ja_{(N)^j} pour j<lg(N)j < \mathrm{lg}(N).

Un facteur d'un mot ww est un mot formé de lettres consécutives de ww, c'est-à-dire un mot uu tel que w=vuv′w = vuv' pour des mots vv et v′v', éventuellement vides. On note sm(N,i,j)\mathrm{sm}(N, i, j) le code du facteur (N)i⋯(N)j−1(N)^i \cdots (N)^{j-1}, formé des lettres de rangs ii à j−1j - 1, pour i⩽j⩽lg(N)i \leqslant j \leqslant \mathrm{lg}(N).

Enfin, cc(M1,…,Mr)\mathrm{cc}(M_1, \dots, M_r) désigne le code de la concaténation des mots de codes M1,…,MrM_1, \dots, M_r, obtenu par r−1r - 1 concaténations successives : cc(M1,…,Mr)=conc(cc(M1,…,Mr−1),Mr).\begin{aligned} &\mathrm{cc}(M_1, \dots, M_r) \\ &\quad = \mathrm{conc}\big(\mathrm{cc}(M_1, \dots, M_{r-1}), M_r\big). \end{aligned}

Énoncé

(i) Les fonctions sm\mathrm{sm} et cc\mathrm{cc} sont primitives récursives, de même que k↦⟨c1,…,cr,k⟩k \mapsto \langle c_1, \dots, c_r, k \rangle pour des entiers c1,…,crc_1, \dots, c_r fixés.

(ii) Facteurs. Si uu est un facteur de ww, alors ⌜u⌝⩽⌜w⌝\ulcorner u \urcorner \leqslant \ulcorner w \urcorner, et l'inégalité est stricte si u≠wu \neq w. En particulier, sm(N,i,j)<N\mathrm{sm}(N, i, j) < N dès que i⩽j⩽lg(N)i \leqslant j \leqslant \mathrm{lg}(N) et que i⩾1i \geqslant 1 ou j<lg(N)j < \mathrm{lg}(N).

(iii) Si la lettre aka_k figure dans le mot de code NN, alors 2k+1⩽N2k + 1 \leqslant N, donc k<Nk < N.

Démonstration

(i) Définissons, par récurrence primitive sur tt, avec les paramètres NN et ii, σ(N,i,0)=0,σ(N,i,t+1)=aj(σ(N,i,t), (N)i+t).\begin{aligned} \sigma(N, i, 0) &= 0, \\ \sigma(N, i, t + 1) &= \mathrm{aj}\big(\sigma(N, i, t),\ (N)^{i+t}\big). \end{aligned} Par récurrence sur tt, σ(N,i,t)\sigma(N, i, t) code la suite (N)i,…,(N)i+t−1(N)^i, \dots, (N)^{i+t-1} ; on pose sm(N,i,j)=σ(N,i,j−˙i)\mathrm{sm}(N, i, j) = \sigma(N, i, j \mathbin{\dot{-}} i). La fonction cc\mathrm{cc} est une composée de conc\mathrm{conc}, et ⟨c1,…,cr,k⟩=aj(aj(⋯aj(0,c1)⋯ ,cr),k)\langle c_1, \dots, c_r, k \rangle = \mathrm{aj}(\mathrm{aj}(\cdots\mathrm{aj}(0, c_1) \cdots, c_r), k) ; toutes sont primitives récursives par Codages, (iii).

(ii) Préfixes. Pour un mot ww et une lettre aka_k, on a ⌜w ak⌝=2⌜w⌝(2k+1)>⌜w⌝,\ulcorner w\, a_k \urcorner = 2^{\ulcorner w \urcorner}(2k + 1) > \ulcorner w \urcorner, puisque 2n>n2^n > n pour tout entier nn. Par récurrence sur la longueur de vv, il vient ⌜u⌝<⌜uv⌝\ulcorner u \urcorner < \ulcorner u v \urcorner si vv n'est pas vide.

Suffixes. Montrons ⌜v⌝⩽⌜uv⌝\ulcorner v \urcorner \leqslant \ulcorner u v \urcorner, avec inégalité stricte si uu n'est pas vide, par récurrence sur la longueur de vv. Si vv est vide, ⌜v⌝=0\ulcorner v \urcorner = 0, et le code d'un mot non vide, de la forme 2n(2k+1)2^n(2k + 1), est au moins 11. Si v=v′akv = v' a_k, l'hypothèse de récurrence et la croissance stricte de n↦2nn \mapsto 2^n donnent ⌜v′ak⌝=2⌜v′⌝(2k+1)⩽2⌜uv′⌝(2k+1)=⌜uv′ak⌝,\begin{aligned} \ulcorner v' a_k \urcorner &= 2^{\ulcorner v' \urcorner}(2k + 1) \\ &\leqslant 2^{\ulcorner u v' \urcorner}(2k + 1) = \ulcorner u v' a_k \urcorner, \end{aligned} avec inégalité stricte si l'hypothèse l'est.

Si enfin w=vuv′w = v u v', on a ⌜u⌝⩽⌜vu⌝⩽⌜vuv′⌝\ulcorner u \urcorner \leqslant \ulcorner v u \urcorner \leqslant \ulcorner v u v' \urcorner, et si u≠wu \neq w, l'un des mots vv et v′v' n'est pas vide, ce qui rend stricte l'une des deux inégalités. Le facteur de code sm(N,i,j)\mathrm{sm}(N, i, j) est différent du mot de code NN si i⩾1i \geqslant 1 ou j<lg(N)j < \mathrm{lg}(N), puisqu'il est alors plus court.

(iii) Le mot aka_k, réduit à une lettre, est un facteur du mot de code NN, et son code est ⟨k⟩=20(2k+1)\langle k \rangle = 2^0(2k + 1) ; on applique (ii).

□
Remarque

Les premiers codes restent lisibles : ⌜0⌝=⟨4⟩=9\ulcorner 0 \urcorner = \langle 4 \rangle = 9, ⌜x0⌝=17\ulcorner x_0 \urcorner = 17, puis ⌜S 0⌝=2⌜S⌝⋅9=211⋅9=18 432,\ulcorner S\, 0 \urcorner = 2^{\ulcorner S \urcorner} \cdot 9 = 2^{11} \cdot 9 = 18\,432, et ⌜= x0 0⌝=234⋅9=154 618 822 656\ulcorner {=}\, x_0\, 0 \urcorner = 2^{34} \cdot 9 = 154\,618\,822\,656, puisque ⌜= x0⌝=21⋅17=34\ulcorner {=}\, x_0 \urcorner = 2^1 \cdot 17 = 34. Mais dès cinq lettres, le code de ∀x0 (x0=x0)\forall x_0\, (x_0 = x_0) est une tour d'exponentielles dont le premier étage, 221762^{2176}, a déjà 656656 chiffres. Seules comptent ici l'existence de ces entiers et les inégalités du point (ii).

Remarque

Le code ne croît pas avec la longueur : ⌜x10000⌝=20 017\ulcorner x_{10000} \urcorner = 20\,017 dépasse ⌜S 0⌝=18 432\ulcorner S\, 0 \urcorner = 18\,432, alors que le premier mot n'a qu'une lettre. Le point (ii) ne compare que des mots dont l'un est facteur de l'autre, et c'est exactement ce dont la récurrence de valeurs a besoin : un mot se reconnaît à partir de ses facteurs propres, qui ont des codes plus petits.

Ouvrir dans l'atlas interactif →