Existe-t-il des programmes qui ne s'arrêtent jamais et n'ont pas de preuve de non-résiliation?

23

Comme des trous noirs en informatique. Nous pouvons seulement savoir qu'ils existent, mais lorsque nous en aurons un, nous ne saurons jamais que c'est l'un d'eux.

Otakar Molnár López
la source
1
Décider du problème d'arrêt est au moins aussi difficile que de prouver des théorèmes (étant donné un théorème vous pouvez simplement écrire un programme comme , le programme se termine si et seulement si le théorème est vrai). S'il n'y avait pas de tels programmes, cela signifierait que vous pourriez prouver tous les théorèmes, ce qui est bien connu pour être faux. Tif T is true then halt else loop forever
Bakuriu
@Bakuriu: Comment écririez-vous if T is true?
ruakh
@ruakh: La méthode traditionnelle estFor each string S in the (countable) universe of possible strings: If S is a syntactically valid proof of T, halt.
Quuxplusone
@Quuxplusone: Eh bien, oui, mais cela ne semble pas correspondre à la construction de Bakuriu. . .
2014
C'est intéressant, mais au-delà de mes connaissances. Pouvez-vous élaborer, s'il vous plaît?
Evorlor

Réponses:

23

Il existe en effet des programmes comme celui-ci. Pour le prouver, supposons au contraire que pour chaque machine qui ne s'arrête pas, il y a une preuve qu'elle ne s'arrête pas.

Ces preuves sont des chaînes de longueur finie, nous pouvons donc énumérer toutes les preuves de longueur inférieure à pour certains entiers s .ss

Nous pouvons ensuite l'utiliser pour résoudre le problème d'arrêt comme suit: Étant donné une machine de Turing et une entrée x , nous utilisons l'algorithme suivant:Mx

s := 0
while (True)
    test if machine M halts on input x in s steps
    look at all proofs of length s and see if they prove M doesn't halt on input x
    set s := s + 1

Si s'arrête sur l'entrée x , alors il s'arrête dans un nombre fini d'étapes s , donc notre algorithme se termine.Mxs

Si ne s'arrête pas à l'entrée x , alors selon notre hypothèse, il y a des longueurs de preuve s où il y a une preuve que M ne s'arrête pas. Donc dans ce cas, notre algorithme se termine toujours.MxsM

Ainsi, nous avons un algorithme décidant du problème d'arrêt qui se termine toujours. Mais nous savons que cela ne peut pas exister, donc notre supposition qu'il y a toujours une preuve de non-arrêt doit être fausse.

jmite
la source
2
Je pense qu'une forme plus faible du théorème d'incomplétude de Godel en découle également. Fondamentalement, il existe des choses qui sont vraies mais qui ne peuvent pas être prouvées. C'est l'une de mes nouvelles expériences de pensée préférées.
Jake
Pensez-vous qu'essayer de prouver P = NP ou essayer de trouver un nombre parfait impair pourrait être l'un de ces programmes?
Otakar Molnár López
1
Cela n'a pas vraiment de sens, car les programmes qui ne se terminent pas ne sont pas des preuves ni des chiffres, mais l'idée à laquelle vous en êtes venu a été évoquée. Certains disent que PvsNP n'est pas démontrable
Jake
1
@Jake Je crois qu'une partie de la motivation des machines de Turing était une expression plus claire de l'idée derrière le théorème de Godel.
cpast
6

Pour un exemple un peu plus concret, supposons que la théorie que nous utilisons pour nos preuves a les caractéristiques suivantes (tout à fait raisonnables, IMO):

  1. C'est cohérent ; c'est-à-dire qu'elle ne peut pas prouver une contradiction.
  2. Son ensemble d'axiomes est récursivement énumérable.
  3. Ses preuves peuvent être écrites sous forme de chaînes de bits finies.
  4. La question de savoir si une chaîne donnée encode une preuve bien formée et correcte est décidable algorithmiquement en temps fini.
  5. Il est suffisamment expressif pour admettre une preuve du deuxième théorème d'incomplétude de Gödel , qui dit qu'il ne peut pas prouver sa propre cohérence.

Avec ces hypothèses, le programme suivant ne s'arrêtera jamais, mais il ne peut pas être prouvé (dans le cadre de la théorie que nous utilisons) de ne pas s'arrêter:

let k := 0;
repeat:
    let k := k + 1;
    let s := binary expansion of k, excluding leading 1 bit;
while s does not encode a proof of a contradiction;
halt.

Le détail clé ici est la première hypothèse ci-dessus, à savoir que la théorie que nous utilisons pour nos preuves est cohérente. Évidemment, nous devons supposer cela, pour que nos preuves valent quoi que ce soit, mais le second théorème d'incomplétude de Gödel dit que, pour toute théorie raisonnablement expressive et effectivement axiomatisée, nous ne pouvons pas réellement le prouver (sauf peut-être dans une autre théorie, dont nous avons ensuite la cohérence besoin de supposer, etc. etc.).

Ilmari Karonen
la source