D'après ma compréhension de la preuve que le problème d'arrêt n'est pas calculable, ce problème n'est pas calculable parce que si nous avons un programme P (x) qui calcule si le programme x s'arrête ou non, nous avons un paradoxe lorsque nous donnons P comme entrée au même P, ayant: P (P), essayant de décider si P s'arrête ou non en utilisant P lui-même.
Ma question est donc la suivante: l'arrêt du problème est-il calculable par le programme P pour tous les autres programmes utilisés en entrée, mais P lui-même? En d'autres termes: le problème d'arrêt n'est-il pas calculable uniquement dans ce cas particulier ou la preuve est plus générale et il me manque quelque chose?
halting-problem
Alessio Martorana
la source
la source
Réponses:
Si est une fonction calculable, alors g , défini commef g
est également calculable, pour tout choix de .k,v
Fondamentalement, si vous avez un programme qui calcule g ( n ) pour tous les n sauf pourP′ g(n) n , vous pouvez "corriger" ce cas (par exemple en utilisant un) et obtenir un autre programme P qui calcule g ( n ) pour tous n .n=k P g(n) n
if then else
Par conséquent, si vous pouviez calculer la fonction d'arrêt "sauf pour un cas", vous pourriez également calculer la fonction d'arrêt (sans exception). De cela, vous pouvez obtenir une contradiction comme d'habitude.
Conclusion: non, vous ne pouvez pas décider du problème d'arrêt "sauf un cas" (ni "sauf un nombre fini de cas").
la source
Considérez la séquence infinie de programmes , où P i est «Déplacez la tête i carrés vers la droite, puis i carrés vers la gauche, puis faites exactement ce que PP1,P2,… Pi i i P ferait." Chacun de ces programmes produit exactement la même sortie que pour chaque entrée (y compris en boucle pour toujours si P boucle pour toujours), mais ce sont tous des programmes différents.P P
Et vous ne pouvez pas contourner cela en exigeant uniquement que travaille sur des programmes qui ne sont pas fonctionnellement équivalents à lui-même, car cette propriété est également indécidable. Peut-être que le problème serait décidable lorsqu'il est limité à ces instances (bien que je soupçonne que ce ne serait pas le cas) mais l'ensemble d'instances est indécidable, vous ne pouvez donc pas réellement effectuer la restriction.P
la source
Il existe des algorithmes pour montrer que certaines classes de programmes s'arrêtent ou non. Par exemple,
Bien qu'il n'y ait pas d'algorithme pour déterminer si un programme arbitraire s'arrête, la majorité du code a été conçu pour s'arrêter (comme la plupart des sous-programmes) ou ne pas s'arrêter (comme une boucle infinie pour gérer les événements), et il est possible de déterminer par algorithme lequel est lequel. En d'autres termes, vous pouvez avoir un algorithme qui répond soit à «s'arrête», «ne s'arrête pas» ou «je ne sais pas», et un tel algorithme peut être conçu pour couvrir suffisamment de programmes qu'il serait utile.
la source
Les preuves par contradiction ne doivent pas être exhaustives , un seul contre-exemple suffit. La preuve que le problème d'arrêt est indécidable vous fournit un exemple de P pour lequel la propriété d'arrêt ne peut pas être décidée. Cette preuve n'indique pas que P est le seul programme de ce type, en fait, il peut exister des preuves indépendantes construisant des classes complètement différentes de P.
la source
La preuve est en effet plus générale: le problème d'arrêt est un cas particulier du théorème de Rice , qui énonce
où "indépendant de la représentation" signifie que si et B sont des programmes qui ont le même comportement pour toutes les entrées, alors Φ ( A ) est valable si Φ ( B ) est valide.A B Φ(A) Φ(B)
Cela signifie notamment que pour chaque entrée , l'ensemble des programmes qui s'arrêtent sur x est indécidable; vous ne pouvez pas obtenir la décidabilité en réduisant l'espace d'entrée.x x
Vous pouvez obtenir des résultats en restreignant l'espace des programmes avec lesquels vous souhaitez travailler, bien que ces restrictions doivent être assez drastiques. Par exemple, si vous êtes assuré que le programme qui vous est donné s'arrête dans les 100 étapes ou s'exécute indéfiniment, décider s'il s'arrête devient facile.
Un cas plus compliqué est lorsque vous savez que le programme comporte au plus 100 caractères. Puisqu'il n'y a qu'un nombre fini de programmes de cette longueur, il existe un certain nombre d'étapes qui est une limite supérieure sur la durée pendant laquelle un tel programme peut s'exécuter s'il se termine. Cependant, la fonction qui mappe une longueur de programme k à un nombre maximum d'étapes B B ( k ) n'est pas calculable.N k BB(k)
la source
Soit R tout ensemble récursivement énumérable mais non récursif. Il existe une infinité de tels ensembles. Soit T une machine de Turing qui s'arrête à l'entrée k si et seulement si k est dans R. Un tel T existe pour tout ensemble énumérable récursivement. Il est impossible d'écrire un programme qui peut résoudre le problème d'arrêt de ce T. C'est parce que tout algorithme pour déterminer si T s'arrête produirait un algorithme pour déterminer l'appartenance à R, ce qui est impossible si R n'est pas récursif. Puisqu'il existe une infinité de tels R, dont chacun donne des machines de Turing différentes, il existe une infinité de machines de Turing sur lesquelles toute tentative d'arrêt du programme P échouerait.
la source