Eine nicht deterministische Turing-Maschine akzeptiert, wenn mindestens ein Pfad akzeptiert; Es wird nur abgelehnt, wenn alle Pfade ablehnen. Diese Asymmetrie macht es schwierig, "Antworten umzudrehen".
Angenommen, Sie haben eine nicht deterministische Turing-Maschine , die zwei Pfade für die Eingabe : einer akzeptiert, der andere lehnt ab. hat mindestens einen Akzeptanzpfad für , also akzeptiert es. Angenommen, wir möchten eine Maschine produzieren, die genau die Eingaben akzeptiert, die ablehnt. Der offensichtliche erste Versuch besteht darin, zu nehmen und seine akzeptierenden Zustände abzulehnen und seine ablehnenden Zustände zu akzeptieren. hat einen Akzeptanzpfad für und einen Ablehnungspfad; Diese neue Maschine hat einen Ablehnungspfad und einen Akzeptanzpfad. Also akzeptiert es immer noch , was es ablehnen sollte!w M w M M M w M ' wM.wM.wM.M.M.wM.'w
Eine nichtdeterministische Maschine kann nicht alle Pfade gleichzeitig betrachten und basierend auf den Aktionen all dieser Pfade Maßnahmen ergreifen. Wenn Sie möchten, können Sie sich das als eine Form der Parallelität vorstellen, bei der es den Threads verboten ist, miteinander zu kommunizieren. Wenn alle Threads beendet sind, muss sich das Programm die folgende Frage stellen: "Hat mindestens einer meiner Threads akzeptiert?" Wenn die Antwort ja ist, ist es gesetzlich verpflichtet zu akzeptieren; Wenn die Antwort Nein lautet, ist sie gesetzlich zur Ablehnung verpflichtet. Es kann nichts anderes tun.
Wenn Sie eine nichtdeterministische Maschine mit einer anderen, , simulieren simuliert jeder Pfad von einen Pfad von und sieht nur diesen Pfad. Es kann nicht sagen: "Wenn all diese anderen Pfade abgelehnt werden, werde ich akzeptieren", weil es die anderen Pfade nicht sehen kann. es kann nur sich selbst sehen. Alles, was es möglicherweise sagen könnte, sind Dinge wie "Wenn der von mir simulierte Pfad akzeptiert wird, werde ich ablehnen" oder "Wenn der von mir simulierte Pfad akzeptiert wird, werde ich auch akzeptieren". Am Ende der Berechnung muss die Maschine dann sagen: "Wenn einer meiner Pfade akzeptiert wird, akzeptiere ich auch", was zu dem oben beschriebenen Problem führt. Um das Verhalten von , wird jeder Pfad vonM ' M ' M M M ' M M.M.M.'M.'MMM′muss sagen: "Wenn der von mir simulierte Pfad akzeptiert wird, lehne ich ab; sonst akzeptiere ich" und am Ende der Berechnung muss die Maschine sagen: "Wenn alle meine Pfade akzeptiert werden, akzeptiere ich; ansonsten lehne ich ab . " Dies liegt daran, dass, wenn alle Pfade des Simulators akzeptiert wurden, dies bedeutet, dass alle Pfade von abgelehnt wurden, also abgelehnt wurde, sodass der Simulator akzeptieren muss. Der Simulator ist jedoch keine gültige nichtdeterministische Turing-Maschine, da er nicht das gesetzlich vorgeschriebene Akzeptanzkriterium verwendet. Das kann es nicht.MM
Der einzige Weg, um herauszufinden, ob eine nicht deterministische Maschine ihre Eingabe ablehnt, besteht darin, jeden möglichen Pfad auszuprobieren und zu überprüfen, ob sie alle ablehnen. Wenn sogar einer von ihnen akzeptiert würde, würde die Maschine die Eingabe akzeptieren. Aber jeden möglichen Weg auszuprobieren ist exponentiell langsamer als nur einen.