Proposition 2Fonctions primitives récursives
Codage des suites finies
Comme au point (iii) de l'extension par témoins, on code une suite finie d'entiers, vue comme un mot dont les lettres sont des entiers, par l'entier défini par récurrence sur : la suite vide a pour code , et
On note , , , … les nombres premiers rangés par ordre croissant, et, pour , l'exposant de dans la décomposition de (Nombres premiers) ; on convient que .
(i) La fonction est primitive récursive, ainsi que .
(ii) Tout entier est le code d'une unique suite finie.
(iii) Les fonctions suivantes sont primitives récursives : l'ajout , qui ajoute la lettre à la fin de la suite de code ; pour , le code de la suite privée de son dernier terme et ce dernier terme , prolongés par ; la longueur de la suite de code ; son terme de rang , noté pour ; et la concaténation , code de la suite de code suivie de la suite de code .
Démonstration
(i) Soit un nombre premier et . Par le point (ii) de Nombres premiers, a un diviseur premier . Si l'on avait , diviserait , donc , ce qui est absurde ; ainsi .
Le nombre premier qui suit est donc fonction primitive récursive de par les points (iii) à (v) de Clôture. Comme et est le premier qui suit , la fonction s'obtient par récurrence primitive.
Si et , alors ; l'exposant de est donc le plus petit tel que ne divise pas , ce qui s'écrit formule qui vaut aussi pour .
(ii) L'injectivité est celle du point (iii) de Témoins de Henkin. Pour la surjectivité, raisonnons par récurrence forte sur . L'entier code la suite vide. Tout s'écrit avec ; si code la suite , alors code la suite suivie de .
(iii) L'ajout est primitif récursif par les exemples de Primitives récursives. Pour , le code de la suite privée de son dernier terme et ce dernier terme valent et ces formules donnent ; on a si .
Les itérés et s'obtiennent par récurrence primitive. Si code une suite de longueur , code, pour , la suite privée de ses derniers termes, et vaut donc exactement à partir de ; comme tant qu'il est non nul, on a , et
Le terme de rang est le dernier terme de la suite privée de ses derniers termes, d'où
Enfin , où et : on ajoute un à un les termes de la seconde suite.
□Ces codes sont gigantesques : , mais une suite de six termes a un code qui s'écrit comme une tour d'exposants. Cela n'a aucune importance ici, où l'on ne demande aux codes que d'exister et d'être manipulés par des fonctions primitives récursives ; l'efficacité des calculs est l'objet d'une autre théorie, la complexité.
Deux codages servent dans la suite, chacun là où il est le plus simple. Le code des mots, repris de la démonstration du théorème de complétude, convient aux suites que l'on lit et que l'on prolonge, comme les programmes et les formules. Le codage par exposants, , convient aux suites dont on modifie un terme quelconque, comme le contenu des registres d'une machine : multiplier ou diviser par change le seul terme de rang .