Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 79

L'indécidabilité du problème de l'arrêt

Recommended resources

Bonjour,

Dans la leçon précédente, nous avons établi une distinction fondamentale entre les langages décidables (récursifs) et les langages reconnaissables (récursivement énumérables). Nous avons vu que tout langage décidable est reconnaissable, mais nous avons laissé en suspens une question essentielle : existe-t-il des problèmes qu'une machine peut semi-résoudre (reconnaître) mais pas entièrement résoudre (décider) ?

Aujourd'hui, nous répondons à cette question de manière retentissante en abordant l'un des résultats les plus profonds et les plus célèbres de l'informatique théorique. L'objectif de cette leçon est de définir formellement le problème de l'arrêt (Halting Problem) et de démontrer son indécidabilité par la méthode de la diagonalisation. Cette preuve, élégante et contre-intuitive, est une pierre angulaire de la calculabilité et un passage obligé pour tout candidat à l'Agrégation.

1. Le Problème de l'Arrêt : Une question simple, une réponse impossible

Au cœur du problème de l'arrêt se trouve une question d'apparence simple, mais aux implications immenses pour un informaticien :

Est-il possible de créer un programme universel qui, pour n'importe quel autre programme P et n'importe quelle entrée I, puisse déterminer si P finira par s'arrêter ou s'il tournera en boucle à l'infini ?

Un tel programme serait un outil de débogage ultime. Il pourrait détecter toutes les boucles infinies, prouver des conjectures mathématiques (comme celle de Goldbach, en vérifiant si un programme qui cherche un contre-exemple s'arrête un jour), et bien plus encore. Malheureusement, nous allons prouver qu'un tel outil universel ne peut pas exister.

Formalisation du Problème

Pour raisonner formellement, nous traduisons ce problème en termes de langages et de machines de Turing.

Le problème de l'arrêt est formalisé par le langage (parfois noté ou HALT) :

Ici, est une chaîne de caractères qui encode la machine et son entrée . "Décider" le problème de l'arrêt revient à construire une machine de Turing qui décide le langage .

est Récursivement Énumérable (Reconnaissable)

Avant de prouver que n'est pas décidable, montrons qu'il est au moins reconnaissable. On peut construire une machine de Turing universelle, appelons-la , qui reconnaît comme suit :

  1. Sur une entrée , simule l'exécution de sur .
  2. Si, au cours de la simulation, atteint un état d'acceptation, s'arrête et accepte.
  3. Si, au cours de la simulation, atteint un état de rejet, s'arrête et rejette.
  4. Si boucle à l'infini sur , alors boucle également à l'infini.

Le comportement de correspond exactement à la définition d'un reconnaisseur pour . La question cruciale est donc : peut-on améliorer pour qu'elle s'arrête toujours, même lorsque boucle ? La réponse est non.


2. La Preuve de l'Indécidabilité

Nous allons démontrer que est indécidable en utilisant un raisonnement par l'absurde. La technique employée, la diagonalisation, a été popularisée par Georg Cantor pour montrer qu'il existe différentes "tailles" d'infinis, et a été adaptée par Turing d'une manière magistrale.

L'Intuition : Le Paradoxe du Menteur

Pour saisir l'essence de la preuve, commençons par une vidéo qui en explique la logique de manière très intuitive, en la reliant au célèbre paradoxe du menteur ("Je mens").

Décidabilité et indécidabilité : Problème de l'arrêt | Rachid Guerraoui

Cette vidéo de Rachid Guerraoui (EPFL), issue de la chaîne Wandida, est une excellente introduction. Elle décompose le raisonnement par l'absurde de Turing en trois étapes claires et utilise une analogie simple pour rendre la contradiction évidente.

Regardez la vidéo de 01:59 à 06:56. Concentrez-vous sur la séquence des trois étapes : 1) l'hypothèse de l'existence d'un algorithme de l'arrêt (AH), 2) la construction d'un algorithme contradictoire (AH-barre), et 3) la contradiction qui en résulte.

La Construction Formelle

Maintenant, formalisons ce que vous venez de voir.

Étape 1 : L'hypothèse (par l'absurde)

Supposons que est décidable.
Cela implique qu'il existe une machine de Turing (le "Halting Decider") qui décide . Par définition d'un décideur, s'arrête toujours et se comporte comme suit :

Étape 2 : La machine contradictoire

À partir de , nous construisons une nouvelle machine de Turing, appelons-la (pour "Diagonale" ou "Démoniaque").

  • Entrée de : prend en entrée l'encodage d'une seule machine, .
  • Fonctionnement de :
    1. exécute sur l'entrée . C'est-à-dire que demande à : "La machine s'arrête-t-elle et accepte-t-elle si on lui donne son propre code comme entrée ?".
    2. inverse la réponse de :
      • Si accepte, entre dans une boucle infinie (ou rejette ; le point crucial est qu'elle n'accepte pas).
      • Si rejette, s'arrête et accepte.

Puisque nous avons supposé que est un décideur (s'arrête toujours), notre machine est aussi une machine de Turing parfaitement valide.

Le schéma suivant résume la construction de (appelée CM, Contradictory Machine) à partir de (appelée HM, Halting Machine).

Demonstration of the Halting Problem's Undecidability
Ce diagramme illustre la construction de la machine contradictoire CM (notre machine D) qui utilise un hypothétique décideur de l'arrêt HM (notre machine H). CM inverse le résultat de HM lorsque la machine testée est identique à son entrée. La contradiction survient lorsque CM est testée sur elle-même.

Étape 3 : La Contradiction

Puisque est une machine de Turing, elle possède son propre encodage, . Que se passe-t-il si nous donnons comme entrée à la machine elle-même ?

Analysons le comportement de :

  • Cas 1 : Supposons que accepte son entrée .

    • En regardant la définition de , pour qu'elle accepte, il faut que l'appel interne à ait renvoyé "rejette".
    • Mais si rejette , cela signifie (par définition de ) que n'accepte pas son entrée .
    • Contradiction : Nous avons supposé que accepte et nous en avons déduit que n'accepte pas .
  • Cas 2 : Supposons que n'accepte pas son entrée (elle boucle ou rejette).

    • En regardant la définition de , pour qu'elle n'accepte pas, il faut que l'appel interne à ait renvoyé "accepte".
    • Mais si accepte , cela signifie (par définition de ) que accepte son entrée .
    • Contradiction : Nous avons supposé que n'accepte pas et nous en avons déduit que accepte .

Dans les deux cas, nous aboutissons à une absurdité logique. L'existence même de la machine est paradoxale. Comme la construction de à partir de est logiquement correcte, la seule faille dans notre raisonnement est l'hypothèse initiale.

Conclusion de la preuve : L'hypothèse selon laquelle un décideur pour existe est fausse. Par conséquent, le langage est indécidable.

Visualisation par la Diagonale

Le nom "diagonalisation" vient d'une manière plus visuelle de présenter cette preuve. Imaginez un tableau infini où les lignes sont toutes les machines de Turing et les colonnes sont tous les encodages de ces machines . La case (i, j) du tableau contient le résultat de .

Notre machine est construite en regardant la diagonale de ce tableau (les cases (i, i)) et en inversant chaque résultat. Le paradoxe vient du fait que doit elle-même se trouver quelque part dans la liste des machines (disons, à la ligne ), mais par construction, son comportement sur l'entrée (c'est-à-dire ) doit être différent de celui de la ligne sur la diagonale.

La vidéo suivante explique cette construction en détail.

L15: Proof by Diagonalization that ATM (Halting Problem) is Not Decidable

Cette vidéo de UC Davis est un exposé classique et rigoureux de la preuve par diagonalisation. Elle utilise la visualisation du tableau pour clarifier pourquoi cette technique porte ce nom.

Regardez la vidéo de 01:39 à 17:10. Portez une attention particulière à la construction de la machine D (appelée D dans la vidéo) et à la manière dont elle se comporte par rapport à la diagonale du tableau des comportements de toutes les machines.

Consolidation : La Preuve Formelle

Pour finir, il est indispensable de maîtriser la version entièrement formelle de cette preuve, en utilisant la notation standard pour désigner la fonction calculée par la i-ème machine de Turing. C'est le niveau de rigueur attendu à l'Agrégation.

[PDF] Notes de cours Modèles de Calcul Machines de Turing L3

Ce document est un extrait d'un cours de L3 qui formalise la théorie de la calculabilité. La section sur les problèmes insolubles contient une preuve concise et rigoureuse de l'indécidabilité du problème de l'arrêt.

Lisez attentivement la section 4.2 'Problèmes insolubles' (page 10). Focalisez-vous sur le Théorème 6 et sa preuve. Essayez de faire le lien entre la fonction 'g' de la preuve et notre machine H, et la fonction 'Ψ' et notre machine D.


Conclusion : La Première Limite Fondamentale

Aujourd'hui, nous avons non seulement défini le problème de l'arrêt, mais nous avons surtout démontré formellement qu'il est impossible de le résoudre algorithmiquement.

Points clés à retenir :

  • Le problème de l'arrêt est formalisé par le langage .
  • est reconnaissable (on peut simuler sur ) mais indécidable.
  • La preuve de l'indécidabilité repose sur un raisonnement par l'absurde appelé diagonalisation : on suppose l'existence d'un décideur de l'arrêt (), on l'utilise pour construire une machine contradictoire () qui fait le contraire de ce que le décideur prédit sur elle-même, menant à un paradoxe.
  • Nous avons donc prouvé que la classe des langages décidables est un sous-ensemble strict de la classe des langages reconnaissables.

Le fait que le problème de l'arrêt soit indécidable est bien plus qu'une curiosité théorique. C'est la première brique qui nous permet de construire tout un édifice de problèmes "impossibles". Dans la prochaine leçon, nous introduirons la notion de réduction, une technique puissante qui permet de prouver l'indécidabilité d'autres problèmes en montrant qu'ils sont "au moins aussi difficiles" que le problème de l'arrêt.