L'arrêt sur l'entrée vide
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 31 — Décidabilité et classes de complexité
Énoncé
On note arrêt-vide le problème : « étant donné le texte d'un programme , l'exécution de sur l'entrée vide se termine-t-elle ? ». Démontrer qu'il est indécidable.
Corrigé
On réduit arrêt à arrêt-vide — dans ce sens, puisque l'on veut transporter la difficulté de arrêt vers arrêt-vide.
La transformation. À un couple , on associe le texte du programme
(* q ignore son entree, se donne x, et lance p dessus. *)
let q () =
let x = "..." in (* la chaine x, ECRITE EN DUR dans le texte de q *)
executer p x
Fabriquer ce texte est un simple travail de chaîne de caractères : on colle et dans un patron. C'est calculable, et en temps linéaire en — donc polynomial, ce qui est bien plus que nécessaire ici.
L'équivalence. Par construction, ne fait rien d'autre que lancer sur . Donc
La conclusion. Supposons arrêt-vide décidable par un programme . Alors le programme suivant déciderait arrêt : recevant , il fabrique le texte de , appelle sur ce texte, et rend sa réponse. Or arrêt est indécidable. Contradiction : n'existe pas.
Ce que la démonstration illustre. On n'a pas refait de diagonale — on a réutilisé l'indécidabilité de arrêt. C'est le même mouvement que la np-difficulté à partir de sat : un premier résultat difficile, obtenu par un argument propre (la diagonale pour arrêt, Cook-Levin pour sat), puis une cascade de réductions.
Et un point de vocabulaire. La réduction employée ici transporte l'indécidabilité et n'a pas besoin d'être polynomiale — seulement calculable. C'est la même idée, à une exigence de ressources près : pour la complexité on borne le coût de la traduction, pour la calculabilité on ne le borne pas.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.