ATLAS Ouvrir dans l'atlas →

Théorème 3Calculabilité

Théorème s-m-n

Énoncé

Pour tous m,n⩾1m, n \geqslant 1, il existe une fonction primitive récursive s:ℕ1+m→ℕs : {\mathbb N^{1+m}} \to \mathbb N telle que, pour tous ee, x∈ℕmx \in \mathbb N^m et y∈ℕny \in \mathbb N^n, φs(e,x)(n)(y)≃φe(m+n)(x,y).\varphi^{(n)}_{s(e, x)}(y) \simeq \varphi^{(m+n)}_e(x, y).

Démonstration

Soit δ=m+n+1\delta = m + n + 1 ; ce registre est vide dans la configuration initiale de yy, et aucune des instructions ci-dessous ne l'incrémente. On fait précéder le programme PeP_e d'indice ee, décodé comme au nœud Kleene, d'un préfixe QxQ_x qui transforme la configuration initiale de yy en celle de (x,y)(x, y).

Pour k=n,n−1,…,1k = n, n - 1, \dots, 1, dans cet ordre, QxQ_x transfère RkR_k dans Rm+kR_{m+k}, par la boucle DEC(k,⋅)\mathrm{DEC}(k, \cdot), INC(m+k)\mathrm{INC}(m + k), DEC(δ,⋅)\mathrm{DEC}(\delta, \cdot) ; comme m⩾1m \geqslant 1, les registres d'arrivée sont vides quand on y transfère, ceux d'indice supérieur à kk ayant déjà été vidés. Puis QxQ_x contient, pour k=1,…,mk = 1, \dots, m, xkx_k instructions INC(k)\mathrm{INC}(k).

Le programme Ps(e,x)P_{s(e, x)} est QxQ_x suivi de PeP_e, dont chaque saut DEC(i,j)\mathrm{DEC}(i, j) devient DEC(i,j+L0)\mathrm{DEC}(i, j + L_0), où L0L_0 est la longueur de QxQ_x ; un saut de PeP_e vers j⩾lg(e)j \geqslant \mathrm{lg}(e) devient un saut au-delà de la fin, et arrête encore le calcul. Le calcul de Ps(e,x)P_{s(e, x)} sur yy est celui de PeP_e sur (x,y)(x, y), précédé de celui de QxQ_x, qui s'arrête toujours.

Le code s(e,x)s(e, x) est primitif récursif. Le code de QxQ_x s'obtient par la fonction d'ajout de Codages, les xkx_k instructions INC(k)\mathrm{INC}(k) par récurrence primitive sur xkx_k. Le code du programme décalé s'obtient par récurrence primitive sur le rang, en ajoutant, pour chaque terme c=(e)lc = (e)^l, le terme cc s'il est pair, et 2i+13j+L0+12^{i+1}3^{j + L_0} + 1 sinon, avec i=(c−1)0−˙1i = (c - 1)_0 \mathbin{\dot{-}} 1 et j=(c−1)1j = (c - 1)_1. On conclut par la concaténation.

□
Remarque

Le théorème dit qu'on peut fixer une partie des données d'un programme, et que le programme spécialisé se calcule à partir du programme initial et des données fixées. C'est l'outil qui permet de transformer une famille de questions en une seule, comme dans la preuve du théorème de Rice.

Remarque

Il est dû à Kleene ; les sources ne s'accordent pas sur la date, 1938 (« On notation for ordinal numbers », Journal of Symbolic Logic 3) selon Odifreddi, 1943 selon d'autres. Sa preuve est ici élémentaire parce que le modèle est une machine : fixer une donnée, c'est écrire quelques instructions au début du programme.

Ouvrir dans l'atlas interactif →