Définition 3Calculabilité
Machines à registres
Une machine à registres dispose de registres , contenant chacun un entier. Un programme est une suite finie d'instructions de deux sortes :
ajoute au contenu de et passe à l'instruction suivante ;
, si contient un entier non nul, lui retire et passe à l'instruction suivante ; sinon, elle passe à l'instruction de numéro .
Une configuration est un couple formé d'un numéro d'instruction et d'une application nulle sauf en un nombre fini de points, étant le contenu de . Elle est terminale si ; sinon, l'instruction la transforme comme on vient de le dire en une configuration suivante.
Soit . Le calcul de sur est la suite des configurations issue de , où pour et sinon. S'il atteint une configuration terminale , on pose ; sinon, n'est pas défini. Une fonction partielle est calculable par machine si elle est l'une des .
Le programme suivant calcule l'addition. Le registre reste nul, si bien que est un saut inconditionnel vers l'instruction : La première boucle vide dans , la seconde vide dans , et le calcul s'arrête au numéro .
Une vérification exhaustive pour montre que le calcul s'arrête toujours, en étapes, avec .
Ce modèle est volontairement pauvre : deux instructions, aucune mémoire autre que des entiers. Les machines de Turing, introduites par Alan Turing (« On computable numbers, with an application to the Entscheidungsproblem », Proceedings of the London Mathematical Society 42, 1936-1937), lisent et écrivent des symboles sur un ruban ; elles calculent exactement les mêmes fonctions, mais l'équivalence demande un codage plus long. L'erreur serait de croire que la pauvreté du modèle limite ce qu'il calcule : le nœud Kleene montre qu'il calcule toutes les fonctions récursives, et rien de plus.