Ist das Halteproblem für bestimmte Eingaben / Annahmen berechenbar?


19

Nach meinem Verständnis des Beweises, dass das Problem des Anhaltens nicht berechenbar ist, ist dieses Problem nicht berechenbar, da wir, wenn wir ein Programm P (x) haben, das berechnet, ob das Programm x anhält oder nicht, ein Paradox erhalten, wenn wir P als Eingabe für das Programm geben dasselbe P mit: P (P), wobei versucht wird, zu entscheiden, ob P anhält oder nicht, indem P selbst verwendet wird.

Meine Frage ist also: Kann das Stopp-Problem von Programm P für alle anderen als Eingabe verwendeten Programme außer P selbst berechnet werden? Mit anderen Worten: Ist das Halteproblem nur in diesem speziellen Fall nicht berechenbar oder ist der Beweis allgemeiner und ich vermisse etwas?


Ich denke, Sie missverstehen den Beweis, dass das Stopp-Problem nicht berechenbar ist. P (P) gibt nur true zurück, weil P immer bestimmt, ob ein Programm in endlicher Zeit anhält. Sie müssen etwas komplizierter konstruieren, um einen Widerspruch zu erreichen.
Dan Staley

Ich denke, Sie würden bessere und vielleicht praktisch relevantere Antworten erhalten, wenn Sie fragen, ob es viele Programme gibt, für die das Stopp-Problem lösbar ist. Schließlich sind viele Programme sogar formal überprüfbar , was sicherlich die Feststellung einschließt, ob sie bei bestimmten Eingaben aufhören. Ich bin der festen Überzeugung, dass diese Gruppe nicht bestimmt werden kann (denn das würde eine Lösung bedeuten, wissen Sie), aber dass es für die überwiegende Mehrheit der Programme der realen Welt keine Hindernisse gibt, um festzustellen, ob sie für relevante Eingaben anhalten oder nicht.
Peter - Reinstate Monica

Antworten:


10

Wenn eine berechenbare Funktion ist, dann ist g definiert alsfG

G(n)={f(n)ob nkvAndernfalls

ist auch berechenbar für jede Wahl von .k,v

Wenn Sie ein Programm , das g ( n ) für alle n außer n = k berechnet , können Sie diesen Fall "korrigieren" (z. B. mit einem ) und ein anderes Programm P erhalten , das g ( n ) für berechnet alle n .PG(n)nn=kif then elsePG(n)n

Wenn Sie also die Anhaltefunktion "außer in einem Fall" berechnen könnten, könnten Sie auch die Anhaltefunktion berechnen (ohne Ausnahmen). Daraus können Sie wie gewohnt einen Widerspruch ableiten.

Fazit: Nein, Sie können das Stopp-Problem nicht "außer in einem Fall" (oder "außer in endlich vielen Fällen") entscheiden.


1
Ok, ich glaube, ich habe es mathematisch verstanden ... Aber ich habe mich gefragt: Wenn ich versuchen würde, ein Programm zu schreiben, das die HP berechnet, mit welchen konkreten Problemen würde ich konfrontiert sein? Warum und wie würde ich irgendwann verstehen, dass ich ein solches Programm nicht schreiben kann?
Alessio Martorana

@AlessioMartorana Es kommt darauf an: Wie würden Sie sich solchen Problemen nähern? Ein Hauptproblem ist, dass immer anhalten muss, auch wenn es sich bei seiner Eingabe um ein nicht anhalten- des Programm handelt. Sie können also nicht einfach versuchen, das Eingabeprogramm zu simulieren. P
Chi

Und wenn wir den Code des Eingabeprogramms sehen können? Können wir nicht anhand des Codes sehen, ob das Programm anhält?
Alessio Martorana

2
@AlessioMartorana Wir können den Code zwar sehen, aber wenn es zB eine while-Schleife gibt, können wir im Allgemeinen nicht viel sagen. Eine while-Schleife überprüft möglicherweise alle möglichen Beweise einer beliebigen mathematischen Vermutung und stoppt nur, wenn ein Beweis gefunden wird. Zu entscheiden, ob diese Schleife anhält, bedeutet zu entscheiden, ob die Vermutung beweisbar ist. Wenn Sie die HP lösen, erhalten Sie eine Maschine, die auf jede formale mathematische Frage Ja (beweisbar) / Nein (nicht beweisbar) antwortet. Das wäre unrealistisch mächtig.
Chi

1
@AlessioMartorana Wenn Sie dachten, Sie hätten ein Programm geschrieben, das die HP löst, gibt es zwei Möglichkeiten, bei denen Ihr Programm fehlschlägt: Bei einigen Programmen wird möglicherweise das falsche Ergebnis zurückgegeben (wenn etwas nicht funktioniert oder wenn etwas nicht funktioniert). t halt when it does) und / oder Ihr Entscheidungsprogramm selbst würde bei vielen Eingaben nicht anhalten, da Sie nicht wissen können, ob es wirklich nicht anhält oder nur mehr Zeit benötigt, um die Antwort zu berechnen.
Shufflepants

21

Kann das Problem des Anhaltens von Programm P für alle anderen als Eingabe verwendeten Programme außer P selbst berechnet werden?

Nein . Betrachten wir die unendliche Folge von Programmen , wobei P i ist „Bewegen Sie den Kopf i  Quadrate nach rechts, dann i  Quadrate nach links, dann tun genau das, was P tun würde.“ Jedes dieser Programme erzeugt für jeden Eingang genau die gleiche Ausgabe wie  P (einschließlich einer  Endlosschleife, wenn P für immer eine Endlosschleife ausführt), aber alle sind unterschiedliche Programme.P1,P2,PichichichPPP

Und Sie können dies nicht umgehen, indem Sie nur dazu verpflichten , an Programmen zu arbeiten, die sich funktional nicht entsprechen, da diese Eigenschaft ebenfalls unentscheidbar ist. Vielleicht wäre das Problem entscheidbar, wenn es auf diese Instanzen beschränkt wäre (obwohl ich vermute, dass dies nicht der Fall ist), aber die Menge der Instanzen ist unentscheidbar, sodass Sie die Einschränkung nicht durchführen können.P


15
Ich vermute, dass Ihr letzter Satz wahrscheinlich wahr ist, aber ich glaube nicht, dass eine Einschränkung der auf dieser Eigenschaft basierenden Eingabemenge das Problem unentscheidbar macht, da eine Eigenschaft unentscheidbar ist. Wenn Sie beispielsweise die Eingabemenge auf das Beenden von Programmen beschränken (eine unentscheidbare Eigenschaft), kann das Problem entschieden werden (durch ein Programm, das immer true zurückgibt).
Owen

3
@Owen Wenn die Beschränkung selbst nicht entschieden werden kann, können Sie die Beschränkung nicht durchsetzen, sodass Sie in der Realität nichts kaufen können.
David Richerby

5

Es gibt Algorithmen, die zeigen, dass bestimmte Klassen von Programmen anhalten oder nicht. Beispielsweise,

  • Es ist möglich, algorithmisch zu bestimmen, ob ein Programm, das eine Maschine mit endlichen Zuständen modelliert, anhält.
  • Es kann rechnerisch festgestellt werden, ob eine linear begrenzte Drehmaschine anhält
  • Wenn Sie wissen, in welcher Komplexitätsklasse sich ein Programm befindet, wissen Sie, dass das Programm für endliche Eingaben anhält.

Während es keinen Algorithmus gibt, der feststellt, ob ein beliebiges Programm anhält, wurde ein Großteil des Codes entweder zum Anhalten (wie die meisten Subroutinen) oder nicht zum Anhalten (wie eine Endlosschleife zum Behandeln von Ereignissen) entworfen, und es ist möglich, algorithmisch festzustellen, welches Programm welches ist. Mit anderen Worten, Sie können einen Algorithmus haben, der entweder auf "Anhalten", "Nicht Anhalten" oder "Keine Ahnung" antwortet, und ein solcher Algorithmus kann so entworfen werden, dass er genügend Programme abdeckt, die nützlich wären.


Was hat das mit goto zu tun? Können wir nicht ein Programm haben, das goto verwendet und trotzdem entscheidet, ob es anhält, solange es eine endliche Zustandsmaschine modelliert?
Bergi

Ich wollte über das Anhalten in Bezug auf for-Schleifen schreiben und änderte es dann nur, um über endliche Zustandsmaschinen und so weiter zu sprechen
Antonio Perez

4

Beweise durch Widerspruch müssen nicht erschöpfend sein , ein einziges Gegenbeispiel reicht aus. Der Beweis, dass das Halteproblem unentscheidbar ist, liefert Ihnen ein Beispiel für P, für das die Halteeigenschaft nicht entschieden werden kann. Dieser Beweis besagt nicht, dass P das einzige Programm dieser Art ist. Tatsächlich kann es unabhängige Beweise geben, die völlig unterschiedliche Klassen von P konstruieren.


3

Der Beweis ist in der Tat allgemeiner: Das Halteproblem ist ein Sonderfall des Satzes von Rice , der besagt

Φ

EINBΦ(EIN)Φ(B)

xx

Sie können einige Ergebnisse erzielen, indem Sie den Speicherplatz der Programme einschränken, mit denen Sie arbeiten möchten, obwohl diese Einschränkungen ziemlich drastisch sein müssen. Wenn Sie beispielsweise die Garantie haben, dass das Programm, das Sie erhalten, innerhalb von 100 Schritten angehalten wird oder für immer ausgeführt wird, wird die Entscheidung, ob es angehalten wird, einfach.

NkBB(k)


1
Technisch, Nist berechenbar: Es ist nur eine natürliche Zahl und jede natürliche Zahl ist berechenbar. Was Sie wirklich meinen, ist, dass jede Funktion, die die Anzahl der Zeichen im Programm auf eine Obergrenze der Laufzeit von Programmen dieser Länge abbildet, nicht berechenbar ist.
David Richerby

1
Der letzte Absatz ähnelt dem von Busy Beaver.
Evil

In Bezug auf die "ziemlich drastischen" Einschränkungen: Total Programming Languages ​​sind eine Sache. Sie erfordern in der Regel ein relativ hohes Maß an Raffinesse. Vielleicht halten Sie das für drastisch, aber es ist möglich, echte Probleme in einem Raum von Programmen zu lösen, die nachweislich zum Stillstand kommen.
Ben Millwood

Das Einfügen eines Links zu en.wikipedia.org/wiki/Rice%27s_theorem wäre IMO sinnvoll.
Dmitry Grigoryev

Danke, ich habe die Antwort aktualisiert. @BenMillwood Sicher, aber angesichts ihrer Lösung lautet "Mach alles halt". Ich bin mir nicht sicher, ob es wirklich das ist, wonach Alessio sucht. Ein Fall, in dem das Halteverhalten zwar entscheidend, aber nicht trivial ist, wäre jedoch interessant: Vielleicht Agda + -Koinduktionstypen?
Anton Golov

0

Sei R eine beliebige rekursiv aufzählbare, aber nicht rekursive Menge. Es gibt unendlich viele solcher Sets. Sei T eine Turing-Maschine, die bei Eingabe von k genau dann anhält, wenn k in R ist. Ein solches T existiert für jede rekursiv aufzählbare Menge. Es ist unmöglich, ein Programm zu schreiben, das das Halteproblem für dieses T lösen kann. Dies liegt daran, dass jeder Algorithmus zur Bestimmung, ob T anhält, einen Algorithmus zur Bestimmung der Zugehörigkeit zu R liefert, der unmöglich ist, wenn R nicht rekursiv ist. Da es unendlich viele solcher R gibt, die jeweils unterschiedliche Turing-Maschinen ergeben, gibt es unendlich viele Turing-Maschinen, bei denen ein Versuch, das Programm P anzuhalten, fehlschlagen würde.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.