Il est assez simple de comprendre pourquoi le problème d'arrêt est indécidable pour les programmes impurs (c'est-à-dire ceux dont les E / S et / ou les états dépendent de l'état global de la machine); mais intuitivement, il semble que l'arrêt d'un programme pur sur un ordinateur idéal serait décidable par exemple par l'analyse statique.
Est-ce bien le cas? Sinon, quels sont les contre-exemples ou les documents qui réfutent cette affirmation?
Réponses:
Voici une preuve d'indécidabilité par réduction du problème d'arrêt.
Réduction: étant donné une machineM et une entrée X , construisez une nouvelle machine de Turing H qui ne lit aucune entrée, mais écrit M et X sur la bande et simule M sur X jusqu'à ce que M s'arrête.
Le comportement de cette nouvelle machine est indépendant de la bande d'entrée, il s'agit donc d'une machine de Turing pure sur laquelle seule l'analyse statique est applicable. Si l'analyse statique était suffisante, cela pourrait montrer si s'arrête, ce qui montrerait si s'arrête sur , ce qui résoudrait le problème d'arrêt pour les machines impures, que nous savons indécidable, et donc votre problème est indécidable aussi.H M xH H M X
la source
Non, ce n'est pas le cas et, de plus, cela ne dépend pas des E / S.
Contre-exemple simple: écrire un programme pour trouver un nombre impair parfait (c'est un problème ouvert: nous ne savons pas encore s'il en existe un) - il ne prend aucune entrée et n'effectue aucune tâche impure ; il peut s'arrêter lorsqu'il en trouve un ou fonctionner à l'infini (dans le cas où un tel nombre n'existe pas). Maintenant, si l'analyse statique était suffisamment puissante pour déterminer le cas d'arrêt, elle serait utilisée pour répondre à cette question (et à bien d'autres) où l'arrêt signifierait l'existence positive d'un tel nombre et ne pas s'arrêter signifierait qu'il n'y en a pas, mais malheureusement l'analyse statique n'est pas si puissant.
la source
La preuve classique par diagonalisation est une machine pure , non seulement c'est une machine de Turing pure, mais elle ne repose pas sur des "problèmes ouverts".
Par exemple, une machine de Turing qui exécute la conjecture de Collatz a un statut d'arrêt inconnu, mais qui repose sur notre ignorance de la conjecture de Collatz, un jour nous pourrions prouver que Collatz avait raison et nous pourrions alors décider du statut d'arrêt de la conjecture (Soit pour certaines entrées ne s'arrête pas, soit s'arrête toujours).
Ainsi, la conjecture de Collatz pourrait déjà répondre à votre question (temporairement au moins), mais elle repose sur quelque chose que nous ne savons pas . Au lieu de cela, la preuve classique est un problème résolu: nous savons déjà que c'est indécidable .
la source
Pour mémoire, la preuve standard de l'indécidabilité du problème d'arrêt repose sur la même idée que les quines: qu'il est possible d'écrire un programme dont un sous-terme est évalué dans le code source de l'ensemble du programme. Ensuite, s'il y avait une fonction
halts
qui, étant donné le code source d'un programme, renvoyait True si ce programme s'arrêtait sur toutes les entrées et False sinon, ce serait un programme légal:où
"prog"
serait une expression évaluée par le code source deprog
; cependant, vous pouvez rapidement voir queprog
s'arrête (pour toutes les entrées) ssi il ne s'arrête pas, ce qui est une contradiction. Rien dans cette preuve ne repose en aucune façon sur les E / S (avez-vous besoin d'E / S pour écrire une quine?).Soit dit en passant, vous souhaiterez peut-être consulter les "E / S basées sur les dialogues" pour plus de preuves que les E / S ne sont pas du tout pertinentes pour votre problème (en gros, les programmes qui font des E / S peuvent être réduits à des programmes qui acceptent (explicites) des arguments fonctionnels et renvoyer la sortie sous forme de résultats supplémentaires (explicites) dans un langage paresseux). Malheureusement, je ne trouve pas de page raisonnable, non biaisée (ou pro-dialogue) sur le Web pour le moment.
la source