Théorème 2Calculabilité
Forme normale de Kleene et fonction universelle
On code l'instruction par , l'instruction par , et un programme par le code de la suite des codes de ses instructions (Codages).
Réciproquement, tout entier est le code d'une unique suite , et l'on note le programme dont l'instruction est si est pair, et sinon. Si est le code d'un programme , alors . On note et l'on dit que est un indice de cette fonction ; on écrit pour .
Pour tout , il existe une relation primitive récursive et une fonction primitive récursive telles que, pour tous et ,
(i) Toute fonction calculable par machine est récursive. Avec Récursive ⇒ machine, les fonctions récursives d'arité sont exactement les , pour .
(ii) Fonction universelle. La fonction partielle est récursive.
(iii) Toute fonction récursive s'écrit avec une seule minimisation.
Démonstration
Configurations. On code une configuration par l'entier , où , produit fini sur les tels que . Par l'unicité de la décomposition en facteurs premiers (Nombres premiers, (ii)), pour tout : le code détermine la configuration.
Dans ce codage, multiplie par ; teste si divise , et, si oui, divise par .
Une étape. Soit défini ainsi, avec , et : si , . Sinon, soit le code de l'instruction de .
Si est pair et , on pose . Si est impair, avec et , on pose si , et sinon.
C'est une définition par cas, à partir des fonctions primitives récursives de Clôture et de Codages ; est primitive récursive. Si code une configuration non terminale de , code la configuration suivante ; si elle est terminale, elle ne change plus.
Le calcul. Posons , code de la configuration initiale, puis, par récurrence primitive sur , Par récurrence sur , code la configuration atteinte après étapes du calcul de sur , ou la configuration terminale si le calcul s'est arrêté avant.
On pose , « le calcul est arrêté au temps », et , contenu de . Si le calcul s'arrête, est le nombre de ses étapes, et lit le contenu final de ; sinon, aucun ne vérifie , et les deux membres sont indéfinis.
(i), (ii) et (iii) en découlent : le second membre est une fonction récursive de , obtenue par une seule minimisation, et toute fonction récursive est l'une des par Récursive ⇒ machine.
□Le théorème de forme normale est dû à Stephen Kleene (« General recursive functions of natural numbers », Mathematische Annalen 112, 1936), dans le cadre des fonctions récursives générales que Gödel avait définies dans ses leçons de Princeton de 1934, à partir d'une suggestion de Herbrand. La même année, Alonzo Church (American Journal of Mathematics 58, 1936) et Alan Turing proposaient, chacun par un modèle différent, de définir ainsi les fonctions calculables.
Thèse de Church-Turing. Toute fonction de dans calculable par un procédé mécanique, au sens intuitif, est récursive. C'est une thèse, et non un théorème : la notion intuitive de procédé mécanique n'a pas de définition mathématique, et rien ne peut donc être démontré à son sujet.
Elle s'appuie sur l'expérience : tous les modèles de calcul proposés, fonctions récursives, machines de Turing, machines à registres, λ-calcul de Church, calculent exactement les mêmes fonctions. Elle ne sert jamais dans les démonstrations de cette théorie, où chaque fonction est montrée récursive par construction.
Une même fonction a une infinité d'indices : ajouter à la fin d'un programme l'instruction ne change pas la fonction calculée, puisqu'elle s'exécute au plus une fois, au moment où le calcul atteindrait l'arrêt, et ne touche pas . Il faut s'en garder : le calcul atteint toujours l'instruction de numéro quand il s'arrête, si bien qu'ajouter au programme de l'addition donnerait . L'erreur la plus répandue est de confondre la fonction et le programme ; le théorème de Rice montre qu'aucune propriété non triviale de la fonction ne se lit de façon décidable sur le programme.