Gibt es irgendwelche Probleme, die mit einem haltenden Orakel nicht lösbar wären?

11

Ich verstehe, dass die meisten Probleme trivial sind, wenn ein haltendes Orakel verfügbar ist (oder, ich denke gleichwertig, Hyperberechnung). Die Anwendung des Arguments, das das Halteproblem anzeigt, ist für eine Turing-Maschine jedoch unmöglich. Dies zeigt auch, dass es für ein Turing-Orakel unmöglich ist, das Halteproblem für ein Turing-Orakel zu entscheiden. Gibt es tatsächliche, praktische Beispiele für Probleme, die durch ein haltendes Orakel nicht gelöst werden können?

Hinweis: Mit "Orakel" meine ich Orakel für eine Standard-Turing-Maschine, nicht ein TM mit einem Orakel selbst.

ike
quelle
2
Es gibt "willkürlich unentscheidbare" Probleme, siehe zB hier . Ich weiß nichts über "praktische" Beispiele (die auch nicht zu dem von Ihnen gewählten Titel passen); Was ist für Sie "praktisch"?
Raphael
Das ist nicht nur erfunden, um diese Frage zu beantworten. Ich habe anerkannt, dass das Problem des Anhaltens der nächsten Ebene weiterhin besteht.
wie am
Darüber hinaus können nicht alle Sprachen, die nicht rekursiv aufzählbar sind, auf HALT reduziert werden. Beispiele sind FINITE, EMPTY, ob zwei CFGs dieselbe Sprache ableiten usw.

Antworten:

15

Nehmen Sie einfach ein Problem, dessen Turing-Grad über liegt. Dies ist der Grad von The Halting Oracle. In Bezug auf die arithmetische Hierarchie möchten Sie Probleme, die über . Beispiele für solche Probleme (wobei die te teilweise berechenbare Funktion ist und ist das - th rechnerisch aufzählbare Menge):0Σ10ϕnnWn={kNϕn(k) is defined}n

  • {nNφn terminates for finitely many inputs} ist -complete.Σ20
  • ist Π 0 2 -vollständig.{nNφn is a total function}Π20
  • ist Σ 0 3 -vollständig.{nNWn is a computable set}Σ30

Keines dieser Probleme kann gelöst werden, selbst wenn Sie ein Halting Oracle haben. Betrachten Sie zum Beispiel das zweite Beispiel: " total?" Gegeben n , wie würde die Halting Oracle helfen uns , zu entscheiden , ob die Turing - Maschine von codierten n auf Halte jeden Eingang?φnnn


[Hinzugefügt am 03.06.2014] Betrachten Sie für einen "praktischen" Aspekt all dies das Problem: Ein Programmierer hat eine Funktion geschrieben void charge_credit_card(int card_number, int amount)und wir möchten wissen, ob die Funktion an allen Eingängen endet. Es ist unmöglich , einen Compiler zu schreiben, der dies im Allgemeinen automatisch überprüfen kann. Selbst wenn wir dem Compiler erlauben, uns Fragen des Formulars " charge_credit_cardBeendet bei Eingabe (k,m)?" Zu stellen, ist dies dennoch unmöglich.

Andrej Bauer
quelle
2
"Ich verstehe das Beispiel nicht" zu sagen, ohne zu erklären, was Sie verwirrt, ist nicht produktiv. Haben Sie die relevanten Wikipedia-Seiten gelesen, auf die ich hingewiesen habe? Diese stehen in direktem Zusammenhang mit Ihrer Frage. Sie sollten sich also zunächst mit den grundlegenden Konzepten vertraut machen.
Andrej Bauer
1
@ike, das Beispiel sollte intganz offensichtlich eine unendliche Menge von haben. Brauchst du wirklich, dass ich schreibe BigIntoder so, oder wirst du dich dann beschweren, dass der Computerspeicher endlich ist?
Andrej Bauer
1
Was auch immer. Ich habe dir gesagt, wie die Antwort auf deine Frage war. Wenn Sie es nicht in gutem Glauben verstehen wollen, dann stören Sie uns nicht mit Fragen.
Andrej Bauer
2
HALT¯{<M,w>:M doesn't halt on w}
1
@tAllan: Das solltest du als Antwort posten. Es schlägt mich, was das OP als "praktisch" ansieht, aber Ihr Beispiel ist sicherlich besser als meins.
Andrej Bauer