Es ist ziemlich einfach zu verstehen, warum das Problem des Anhaltens für unreine Programme (dh Programme mit E / A und / oder Zuständen, die vom maschinenglobalen Zustand abhängen) nicht entschieden werden kann. aber intuitiv scheint es, dass das Anhalten eines reinen Programms auf einem idealen Computer z. B. durch statische Analyse entscheidbar wäre.
Ist das tatsächlich der Fall? Wenn nicht, welche Gegenbeispiele oder Papiere widerlegen diese Behauptung?
Antworten:
Hier ist ein Beweis der Unentscheidbarkeit durch Reduktion des Halteproblems.
quelle
Nein, das ist es nicht und es hängt auch nicht von der E / A ab.
Einfaches Gegenbeispiel: Schreiben Sie ein Programm, um eine perfekte ungerade Zahl zu finden (dies ist ein offenes Problem: Wir wissen noch nicht, ob es eine gibt). Es nimmt keine Eingaben entgegen und führt keine unreinen Aufgaben aus. es kann anhalten, wenn es eine findet, oder es kann unendlich funktionieren (in dem Fall, dass eine solche Nummer nicht existiert). Wenn nun die statische Analyse leistungsfähig genug wäre, um den Haltefall zu bestimmen, würde sie verwendet, um diesen (und viele weitere) Fragen zu beantworten, bei denen das Halten die positive Existenz einer solchen Zahl bedeuten würde und nicht das Halten die Existenz einer solchen Zahl bedeuten würde, aber leider die statische Analyse ist nicht so mächtig.
quelle
Der klassische Beweis durch Diagonalisierung ist eine reine Maschine , nicht nur eine reine Turingmaschine, sondern beruht nicht auf "offenen Problemen".
In einem Beispiel hat eine Turing-Maschine, die die Collatz-Vermutung ausführt, einen unbekannten Haltestatus, der sich jedoch auf unsere Unkenntnis der Collatz-Vermutung stützt. Eines Tages könnten wir beweisen, dass Collatz Recht hatte, und dann würden wir in der Lage sein, den Haltestatus der Vermutung zu bestimmen (Entweder für einige Eingaben nicht anhalten, oder immer anhalten).
Die Collatz-Vermutung könnte Ihre Frage also bereits beantworten (zumindest vorübergehend), stützt sich jedoch auf etwas, das wir nicht wissen . Stattdessen ist der klassische Beweis ein gelöstes Problem: Wir wissen bereits, dass dies nicht zu entscheiden ist .
quelle
Nur zur Veranschaulichung: Der Standardbeweis für die Unentscheidbarkeit des Halteproblems basiert auf der gleichen Idee wie Quines: Es ist möglich, ein Programm zu schreiben, von dem ein Teilbegriff den Quellcode für das gesamte Programm auswertet. Wenn es dann eine Funktion gäbe
halts
, die im angegebenen Quellcode für ein Programm True zurückgibt, wenn dieses Programm bei allen Eingaben angehalten wird, und andernfalls False, wäre dies ein zulässiges Programm:wo
"prog"
wäre ein Ausdruck, für den der Quellcode ausgewertet wirdprog
; Sie können jedoch schnell erkennen, dassprog
(für alle Eingaben) angehalten wird, wenn es nicht angehalten wird, was ein Widerspruch ist. Nichts in diesem Beweis ist in irgendeiner Weise von I / O abhängig (brauchen Sie I / O, um ein Quine zu schreiben?).Übrigens möchten Sie vielleicht in "dialogbasierte E / A" nachsehen, um weitere Beweise dafür zu finden, dass E / A für Ihr Problem völlig irrelevant sind (im Grunde können Programme, die E / A ausführen, auf Programme reduziert werden, die Eingaben als annehmen (explizite) funktionale Argumente und Ausgabe als (explizite) zusätzliche Ergebnisse in einer faulen Sprache). Leider kann ich im Moment keine vernünftige, nicht voreingenommene (oder pro-dialogische) Seite im Web finden.
quelle