Gibt es Programme, die niemals anhalten und keine unbeendigten Beweise haben?

23

Wie schwarze Löcher in der Informatik. Wir können nur wissen, dass sie existieren, aber wenn wir einen von ihnen haben, werden wir nie wissen, dass es einer von ihnen ist.

Otakar Molnár López
quelle
1
Die Entscheidung über das Halteproblem ist mindestens so schwer wie das Beweisen von Theoremen (bei einem Satz kann man einfach ein Programm schreiben , das Programm endet genau dann, wenn der Satz wahr ist). Wenn es solche Programme nicht gäbe, könnte man alle Theoreme beweisen, was bekanntermaßen falsch ist. Tif T is true then halt else loop forever
Bakuriu
@ Bakuriu: Wie würdest du schreiben if T is true?
Ruakh
@ruakh: Die traditionelle Methode istFor each string S in the (countable) universe of possible strings: If S is a syntactically valid proof of T, halt.
Quuxplusone
@Quuxplusone: Nun ja, aber das scheint nicht in Bakurius Konstruktion zu passen. . .
Ruakh
Das ist interessant, aber meines Wissens nach. Können Sie das näher erläutern?
Evorlor,

Antworten:

23

Es gibt in der Tat Programme wie dieses. Um dies zu beweisen, nehmen wir im Gegenteil an, dass es für jede Maschine, die nicht anhält, einen Beweis gibt, dass sie nicht anhält.

Diese Beweise sind Zeichenfolgen endlicher Länge, sodass wir für einige ganze Zahlen s alle Beweise mit einer Länge von weniger als auflisten können .ss

Wir können dies dann verwenden, um das Halteproblem wie folgt zu lösen: Wenn eine Turing-Maschine und eine Eingabe x gegeben sind , verwenden wir den folgenden Algorithmus: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

Wenn bei Eingabe x anhält , hält es in einer endlichen Anzahl von Schritten s an , sodass unser Algorithmus endet.Mxs

Wenn bei Eingabe x nicht anhält , gibt es nach unserer Annahme einige Beweislängen s, in denen es einen Beweis gibt, dass M nicht anhält. In diesem Fall wird unser Algorithmus immer beendet.MxsM

Wir haben also einen Algorithmus, der über das Problem des Anhaltens entscheidet und der immer endet. Wir wissen jedoch, dass dies nicht existieren kann, und daher muss unsere Annahme, dass es immer einen Beweis für die Unaufhaltsamkeit gibt, falsch sein.

jmite
quelle
2
Ich denke, dass sich daraus auch eine schwächere Form von Gödels Unvollständigkeitssatz ergibt. Grundsätzlich gibt es Dinge, die wahr sind, aber nicht bewiesen werden können. Dies ist eines meiner neuen Lieblingsexperimente.
Jake
Denken Sie, dass der Versuch, P = NP zu beweisen oder eine ungerade perfekte Zahl zu finden, eines dieser Programme sein könnte?
Otakar Molnár López
1
Das ist nicht ganz sinnvoll, da nicht terminierende Programme weder Beweise noch Zahlen sind, aber die Idee, auf die Sie stoßen, wurde angesprochen. Einige sagen, dass PvsNP nicht beweisbar ist
Jake
1
Ich glaube, ein Teil der Motivation von Turing-Maschinen war ein klarer Ausdruck der Idee hinter Godels Theorem.
25.
6

Für ein etwas konkreteres Beispiel nehmen wir an, dass die Theorie, die wir für unsere Beweise verwenden, die folgenden (durchaus vernünftigen, IMO) Merkmale aufweist:

  1. Es ist konsequent ; das heißt, es kann keinen Widerspruch beweisen.
  2. Seine Axiome sind rekursiv aufzählbar.
  3. Seine Beweise können als endliche Bitstrings niedergeschrieben werden.
  4. Die Frage, ob eine gegebene Zeichenkette einen wohlgeformten und korrekten Beweis darin codiert, ist algorithmisch in endlicher Zeit entscheidbar.
  5. Es ist expressiv genug, einen Beweis für Gödels zweiten Unvollständigkeitssatz zuzulassen , der besagt, dass er seine eigene Konsistenz nicht beweisen kann.

Mit diesen Annahmen wird das folgende Programm niemals anhalten, aber es kann nicht bewiesen werden (im Rahmen der Theorie, die wir verwenden), dass es nicht anhält:

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.

Das Schlüsseldetail ist hier die erste Annahme, nämlich dass die Theorie, die wir für unsere Beweise verwenden, konsistent ist. Natürlich müssen wir dies annehmen, damit unsere Beweise irgendetwas wert sind, aber Gödels zweiter Unvollständigkeitssatz besagt, dass wir dies für jede einigermaßen aussagekräftige und effektiv axiomatisierte Theorie nicht beweisen können (außer möglicherweise in einer anderen Theorie, deren Konsistenz wir dann haben annehmen müssen, etc. etc.).

Ilmari Karonen
quelle