Vote utilisateur: 5 / 5

Etoiles activesEtoiles activesEtoiles activesEtoiles activesEtoiles actives
 

Alan Turing : La Machine Universelle et l'Indécidabilité

En 1936, Alan Turing publie un article fondateur qui définit les bases de l'informatique moderne. En inventant un modèle de calcul universel, il démontre qu'il existe une limite mathématique à ce que les machines peuvent résoudre : c'est le problème de l'arrêt.


Alan Mathison Turing
23 June 1912  - 7 June 1954 (à 41 ans) - England

1. Alan Turing : Un destin hors du commun

Le saviez-vous ? Alan Turing (1912-1954) n'a pas seulement théorisé l'ordinateur. Pendant la Seconde Guerre mondiale, il a conçu des machines électromécaniques pour casser le code Enigma, une avancée qui aurait raccourci la guerre de deux ans.
1931 : Kurt Gödel démontre qu'il existe des vérités mathématiques indémontrables.
1936 : Turing définit sa machine pour répondre au problème de la décision (Entscheidungsproblem).
1950 : Turing propose le célèbre "Test de Turing" pour l'Intelligence Artificielle.

Le destin tragique d'Alan Turing

Malgré ses services héroïques durant la guerre, Alan Turing fut condamné en 1952 pour son homosexualité. Soumis à une castration chimique forcée, il meurt deux ans plus tard, à seulement 41 ans, par empoisonnement au cyanure.

"Nous ne pouvons voir qu'à une courte distance devant nous, mais nous pouvons voir que beaucoup reste à faire." — Alan Turing

2. La Machine de Turing : Le modèle de calcul

Pour Turing, calculer revient à manipuler des symboles selon des règles strictes. Sa machine est un automate composé de trois éléments fondamentaux :

  • Le Ruban : Une mémoire infinie découpée en cases contenant des symboles \( \{0, 1, \beta\} \) (où \( \beta \) est le symbole vide).
  • La Tête de lecture/écriture : Elle lit le symbole, le modifie et se déplace vers la Gauche (L) ou la Droite (R).
  • Le Registre d'état : Il mémorise la situation actuelle de la machine (ex: \( q_0, q_1, \dots, q_{accept} \)).
Définition technique : Le comportement de la machine est entièrement piloté par une table de transition. Pour chaque couple \( (\text{état}, \text{symbole}) \), elle définit l'action à entreprendre. C'est l'ancêtre de l'algorithme.

3. Exemple : La machine "Inverseur" (États A et B)

Considérons une machine dont le but est de parcourir un ruban et de transformer chaque \( 0 \) en \( 1 \). Elle s'arrête dès qu'elle rencontre une case vide \( \beta \).

État A
 
β
β
0
1
0
1
β
β
Machine prête : Départ sur case 1
Attente du lancement...

Table de transition simplifiée

État actuelSymbole luAction : ÉcrireAction : DéplacerNouvel État
État A (Calcul) \( 0 \) \( 1 \) Droite (R) État A
État A (Calcul) \( 1 \) \( 1 \) Droite (R) État A
État A (Calcul) \( \beta \) (Vide) \( \beta \) Stop (S) État B (Arrêt)

 

Un Autre exemple de machine de Turing

 

4. Lexique et Définitions  

ConceptDéfinition du programme NSI
Machine de Turing (MT) Modèle abstrait d'un appareil de calcul mécanique composé d'un ruban, d'une tête de lecture et d'une unité de contrôle.
Algorithme Un algorithme est la table de transition d'une machine de Turing.
Calculabilité Un problème est calculable s'il existe une machine de Turing déterministe qui le résout.
MT Universelle Machine capable de simuler n'importe quelle autre machine de Turing en lisant sa description.
Problème de décision Problème fermé dont la réponse est binaire : Oui ou Non.
Décidabilité Un problème est décidable s'il existe un algorithme qui répond en un nombre fini d'étapes. Sinon, il est indécidable.
Équivalence La notion de décidabilité et celle de calculabilité sont semblables.

5. Le Problème de l'Arrêt : Démystifier le Paradoxe

C'est le cœur de la découverte de Turing. Pour prouver qu'un problème est indécidable (qu'aucun algorithme ne peut le résoudre), il utilise un raisonnement par l'absurde. Pour le rendre concret, nous allons utiliser du code Python.

A. L'Hypothèse de départ : La fonction magique \(H\)

Imaginons qu'un programmeur de génie ait réussi à écrire une fonction Python parfaite, nommée test_arret(programme, entree). Sa spécification est simple :

  • Elle analyse le code source de n'importe quel programme.
  • Elle regarde ce que ce programme fait avec une entree donnée.
  • Elle répond **"S'arrête"** ou **"Boucle"**. Elle ne se trompe JAMAIS.

B. La construction du "Saboteur"

Pour piéger cette fonction magique, nous construisons un programme paradoxal. Appelons-le le Saboteur. Sa mission est simple : utiliser la prédiction de test_arret pour faire exactement le contraire.

Voici son code source simulé en Python :

# --- LE PROGRAMME SABOTEUR ---
def saboteur(programme):
    # ÉTAPE 1 : Le Saboteur utilise la fonction magique 
    # pour prédire ce qu'il ferait s'il s'analysait lui-même.
    prediction = test_arret(programme, programme)
    
    # ÉTAPE 2 : Il agit à l'opposé de la prédiction.
    if prediction == "S'arrête":
        # Si la fonction dit : "Il va s'arrêter"...
        # ...le Saboteur force une boucle infinie !
        while True:
            pass 
            
    else:
        # Si la fonction dit : "Il va boucler"...
        # ...le Saboteur s'arrête immédiatement.
        return "Fin"

C. Le Bug Logique : saboteur(saboteur)

Le moment critique arrive quand on demande à la fonction magique d'analyser le programme saboteur en lui donnant son propre code comme entrée. C'est l'auto-analyse :

Que fait l'exécution de \( saboteur(saboteur) \) ?

Il n'y a que deux cas possibles pour la réponse de la fonction magique \(H\) (test_arret) :

  • Cas 1 : Si \(H\) répond "S'arrête"
    Le code du Saboteur entre dans le bloc if. Le programme se met à **boucler à l'infini**.
    ⮕ CONTRADICTION : La fonction avait prédit qu'il s'arrêterait, mais il boucle.
  • Cas 2 : Si \(H\) répond "Boucle"
    Le code du Saboteur saute au bloc else. Le programme **s'arrête** immédiatement.
    ⮕ CONTRADICTION : La fonction avait prédit qu'il bouclerait, mais il s'arrête.

D. Conclusion Mathématique

Puisque peu importe la réponse de la fonction test_arret, elle finit par se contredire elle-même face au Saboteur, c'est que notre hypothèse de départ est fausse.

La fonction magique test_arret ne peut pas exister.

Le problème de l'arrêt est donc mathématiquement indécidable. Il n'existe aucun algorithme universel capable de le résoudre.
Sources et Références NSI

Cours de Spécialité NSI - Terminale - Mis à jour en 2026

Articles Connexes