Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Machine de Turing : ruban, tête et règles

Après cette leçon: Je peux suivre une machine de Turing sur son ruban, pas après pas.

Leçon de 60 min5 commandesLab de compilation et d’architecture : gcc, flex, bison et RISC-V dans une VM

Le plus petit ordinateur imaginable

Une machine de Turing est un modèle très simple d’ordinateur, qui sert à définir ce qu’un ordinateur peut calculer. Elle a un ruban sans fin, une tête qui lit et écrit une case à la fois, et une table de règles.

Tout ce que calcule votre téléphone, une machine de Turing sait le calculer aussi, plus lentement. Vous allez suivre une machine qui ajoute 1 à un nombre binaire, puis la programmer.

À la fin de cette leçon

Remarque

Je peux suivre une machine de Turing sur son ruban, pas après pas.

Mots-clés

MotCe que ça veut direExemple
Rubanune suite de cases, sans fin, où l’on lit et écrit
Têtel’élément qui lit et écrit une case à la fois
Règlece qu’on écrit, où l’on va et le nouvel étatdroite,1 -> 1 D droite
Symbole blancle contenu d’une case vide_
Pasune règle appliquée une fois
État d’arrêtl’état où la machine s’arrête

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Ruban, tête et règles : les trois pièces

Le ruban est une suite de cases, sans fin dans les deux sens. Chaque case contient un symbole, ou le symbole blanc _.

La tête est sur une case à la fois. À chaque pas, elle lit la case, puis applique la règle qui correspond à l’état et au symbole lu. Une règle dit trois choses : quoi écrire, de quel côté aller (G ou D), et quel est le nouvel état.

Exemple travaillé : la machine « ajouter 1 »

ÉtatSymbole luÉcrireAllerNouvel état
droite00Ddroite
droite11Ddroite
droite__Gretenue
retenue10Gretenue
retenue01Garret
retenue_1Garret

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

La machine sur le nombre 1011

PasÉtat avantSymbole luRuban après le pas
1droite11011
2droite01011
3droite11011
4droite11011
5droite_ (blanc)1011
6retenue11010
7retenue11000
8retenue01100, arrêt

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Programmer un seul pas

Code: python
# Un seul pas de la machine "ajouter 1".
regles = {
    "droite,0": ["0", "D", "droite"],
    "droite,1": ["1", "D", "droite"],
    "droite,_": ["_", "G", "retenue"],
    "retenue,1": ["0", "G", "retenue"],
    "retenue,0": ["1", "G", "arret"],
    "retenue,_": ["1", "G", "arret"],
}
ruban = {0: "1", 1: "0", 2: "1", 3: "1"}
tete = 4
etat = "droite"
# Lire la case, appliquer la règle, bouger, changer d'état.
symbole = "_"
if tete in ruban:
    symbole = ruban[tete]
regle = regles[etat + "," + symbole]
ruban[tete] = regle[0]
if regle[1] == "D":
    tete = tete + 1
else:
    tete = tete - 1
etat = regle[2]
print("écrit", regle[0], "- tête en", tete, "- état", etat)
# Mettez tete = 3 et etat = "retenue", puis relancez.

Une machine peut ne jamais s’arrêter

La machine « ajouter 1 » s’arrête toujours : la retenue finit par trouver un 0 ou un blanc. Ce n’est pas vrai de toute machine.

Si une règle renvoie la tête vers la droite sans jamais changer d’état, elle avance pour toujours. Le tableau compare trois machines. Savoir à l’avance si une machine s’arrête est le sujet de la leçon suivante.

Trois machines et leur arrêt

MachineRèglesCe qui se passe
Ajouter 1Six règles du tableauS’arrête en 8 pas sur 1011
Effacer les 1e,1 -> _ D e et e,_ -> _ D arretS’arrête après le dernier 1
Bouclea,_ -> _ D aNe s’arrête jamais

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Python calcule autant qu’une machine de Turing

Tout ce qu’on sait calculer avec un langage comme Python, une machine de Turing le calcule aussi, et l’inverse est vrai. Aucun ordinateur connu n’a dépassé ce modèle.

On appelle cela la thèse de Church-Turing. C’est une idée acceptée, pas un théorème, car « calculable » est une notion de la vie courante.

Une table de règles est un fichier texte

Le labo ne contient pas de machine de Turing, mais ses outils lisent n’importe quelle table écrite en texte. Le premier Run écrit les six règles de « ajouter 1 » dans un fichier, une règle par ligne, les cinq champs séparés par une espace.

Les suivants comptent les lignes, cherchent un état et listent les états de départ. Le dernier montre qu’un nombre de Python n’a pas de limite fixe.

Écrire la table dans un fichier

Commande
printf '%s\n' 'droite 0 0 D droite' 'droite 1 1 D droite' 'droite _ _ G retenue' 'retenue 1 0 G retenue' 'retenue 0 1 G arret' 'retenue _ 1 G arret' > ~/regles.txt

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Compter les règles

Commande
wc -l < ~/regles.txt

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Les règles qui parlent de retenue

Commande
grep -c "retenue" ~/regles.txt

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Les états de départ

Commande
cut -d' ' -f1 ~/regles.txt | sort -u

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Un nombre sans limite fixe

Commande
python3 -c "print(2 ** 200)"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Erreur fréquente

Attention

Beaucoup de gens pensent qu’une machine de Turing est trop simple pour calculer comme un vrai ordinateur, ou qu’elle finit toujours. Chaque règle est minuscule, mais leur suite suffit pour tout calcul possible. Rien n’oblige la machine à s’arrêter : une boucle sans fin reste possible.

Pour aller plus loin

Écrivez la table d’une machine qui efface tous les 1 du ruban, puis s’arrête sur le premier blanc. Combien de pas faut-il pour le mot 111 ?

Écrivez ensuite une machine qui ne s’arrête jamais avec une seule règle. Vérifiez-la avec votre fonction et un maximum de 50 pas.

À propos de ce labo et de sa source: Lab de compilation et d’architecture : gcc, flex, bison et RISC-V dans une VM

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.