8.8 Anwendungen des Postschen Korrespondenzproblems
Erinnerin Sie sich an kontextfreie Grammatiken? Das waren formale Grammatiken wie zum Beispiel
Diese Grammatiken erlauben uns, gewisse Sprachen zu beschreiben, indem Sie Regeln festlegen -
hier
Produktionen genannt, nach welchen man aus dem Startsymbol Wörter über dem
Alphabet
(hier: ) ableiten kann. Beispielsweise:
Kontextfreie Grammatiken werden zum Beispiel verwendet, um die Syntax von Dateiformaten,
Programmiersprachen und manchmal sogar natürlicher Sprachen zu beschreiben. Es wäre daher
schön, über gegebene kontextfreie Grammatik möglichst viele Dinge herausfinden zu können.
Leider sind viele solche Probleme unentscheidbar. Als einfaches Beispiel:
Theorem 8.8.1 Wir wollen bestimmen, ob
aus einer gegebenen kontextfreien Grammatik ein Palindromwort ableitbar ist,
also ein , das von rechts nach links gelesen gleich ist, sprich
. Dieses Problem ist unentscheidbar.
Formal gesehen müssten wir eine Codierung kontextfreier Grammatiken über einem festen
Alphabet (zum Beispiel angeben, um dann die Sprache
der
Codierungen all jener
kontextfreien Grammatik, die ein Palindromwort ableiten können
definieren zu können. Da wir aber mittlerweile verstanden haben, dass alle
"endlichen" Objekte irgendwie auf Turingmschinen-verträgliche Weise codiert werden können,
ersparen wir uns diese Formalitäten.
Beweis.
Wir zeigen: wenn man zu einer gegebenen kontextfreien Grammatik entscheiden könnte,
ob sie ein Palindromwort ableiten kann, dann könnten wir auch entscheiden, ob ein
gegebenes PCP-Puzzle eine Lösung hat. Da wir bereits Letzteres als unentscheidbar
erkannt haben, schließen wir, dass Ersteres auch unentscheidbar ist.
Konkret sei uns nun also ein PCP-Puzzle gegeben. Wir bauen daraus eine
kontextfreie Grammatik , so dass
genau dann ein Palindromwort ableiten kann, wenn eine Lösung hat.
Die Konstruktion ist überraschend einfach. Wir erschaffen ein Startsymbol
für unsere Grammatik und erstellen zu jeder Kachel die
Grammatikregel
wobei das Wort von rechts nach links gelesen bedeutet, also
. Wir fügen noch eine weitere Regel hinzu:
wobei ein neues Zeichen ist, dass nicht in der Symbolmenge des PCP-Puzzles
enthalten ist.
Behauptung 8.8.2 Wenn die Grammatik ein Palindromwort
ableiten kann, dann hat das PCP-Puzzle eine Lösung.
Beweis.
Die letzte angewandte Regel muss sein, und somit hat
das abgeleitete Wort die Form
Jedes Paar ist eine Kachel des PCP-Puzzles. Wenn das
Wort ein Palindrom ist, dann gilt
und somit ist
eine Lösung des PCP-Puzzles.
Behauptung 8.8.3 Wenn
das PCP-Puzzle eine Lösung hat, dann kann die Grammatik ein Palindromwort
ableiten.
Beweis.
Sei
eine Lösung des Puzzles, also .
Dann ist auch
ein Palindrom und kann von abgeleitet werden:
Somit ist gezeigt, dass ein Palindromwort ableiten kann.
Hätten wir nun also einen Algorithmus, der für eine gegebene kontextfreie Grammatik
entscheiden könnte, ob sie ein Palindromwort ableiten kann, dann könnten wir
PCP-Puzzles wie folgt entscheiden: nimm das Puzzle , baue nach den obigen
Regeln daraus die Grammatik und frage dann den Algorithmus, ob
ein Palindromwort ableiten kann. Dies beantwortet auch die Frage
nach der Lösbarkeit des gegebenen PCP-Puzzles.
Reduktionen
Es lohnt sich, an dieser Stelle zu pausieren. Was Sie gerade gesehen haben,
ist eine Reduktion. Im "echten" Leben verwenden wir Reduktionen,
um bereits gefundene Lösungen zu "recyceln". Beispielsweise:
Aufgabe: Zeigen Sie, dass die Funktion
im -Kalkül berechenbar ist.
Wir wissen bereits, wie man als
primitiv-rekursive Funktion schreibt.
Wir wissen bereits, wie man eine allgemeine primitiv rekursive Funktion
im -Kalkül implementiert.
Wir schließen nun, dass im -Kalkül implementierbar ist,
und ersparen uns die Details.
Im Kontext der Turing-Berechenbarkeit können wir dieses Prinzip wie folgt
formalisieren:
Definition 8.8.4
Seien und zwei Sprachen.
Eine Reduktion von nach ist eine Turing-berechenbare Funktion
mit der Eigenschaft, dass
Erinnern Sie sich: dass Turing-berechenbar ist, heißt, dass es eine Turingmaschine
gibt mit einem dezidierten Ausgabe-Band, so dass für jedes Eingabewort
terminiert und zum Zeitpunkt der Terminierung auf das Ausgabeband geschrieben hat.
Wenn wir eine Reduktion von nach haben, dann liefert uns jeder
Entscheidungsalgorithmus
für unmittelbar einen Entscheidungsalgorithmus für :
Beobachtung 8.8.5 Wenn eine Reduktion von nach
ist und entscheidbar ist, dann ist auch entscheidbar.
Beweis.
Sei eine Turingmaschine, die entscheidet und sei die Turingmaschine,
die berechnet.
Wir bauen nun eine neue Turingmaschine .
Sie nimmt das Eingabewort und lässt die Turingmaschine
auf arbeiten; wenn terminiert, steht auf ihrem Ausgabeband.
Wir rufen nun die Turing-Maschien mit dem Eingabewort auf.
Wenn akzeptiert (oder eben ablehnt), dann lassen wir akzeptieren (oder eben
ablehnen). Es gilt nun:
und somit entscheidet die Sprache .
Stellen Sie sich einfach vor, dass der Code ist, den Sie selber schreiben müssen,
und die "Bibliotheksfunktion" ist, die Sie ohne groß nachzudenken aufrufen,
weil sie ja bereist von anderen Leuten (hoffentlich korrekt) implementiert worden ist.
Behauptung 4.6.8 zeigt also, das etwas möglich ist.
In der Berechenbarkeitstheorie und Komplexitätstheorie sind wir eher daran interessiert,
zu zeigen, was nicht möglich ist, und wenden daher häufiger das Kontrapositiv
der Behauptung an:
Beobachtung 8.8.6 Wenn eine Reduktion von nach
ist und unentscheidbar ist, dann ist auch unentscheidbar.
Beweis.
Angenommen, wäre entscheidbar. Dann wäre laut Behauptung 4.6.8 die Sprache
ja auch entscheidbar, was sie aber nach Annahme nicht ist. Daher ist
eben nicht entscheidbar.
Beachten Sie nun, dass so etwas wie Behauptung 4.6.9 bereits oben angewandt haben: wir haben
das Haltproblem auf das MPCP-Problem reduziert; jenes dann auf das PCP; und schließlich PCP
auf das "Kann ein Palindrom abgeleitet werden"-Problem. Wir haben also eine ganze Kette
von Reduktionen bereits durchgeführt.
Für Neulinge ist diese Richtung oft inintuitiv und verwirrend. Dies spiegelt
sich in der Verwendung des Konjunktivs wäre / wäre in Behauptung 4.6.9 wider.
Auch ist es schlicht ungewohnt, ein altes Problem auf ein neues zu reduzieren
statt umgekehrt.
Üben wir also Reduktionen:
Theorem 8.8.7
(Schnittproblem kontextfreier Sprachen)
Gegeben zwei kontextfreie Grammatiken . Es ist
unentscheidbar, ob nichtleer ist, ob es
also ein Wort mit und gibt.
Dieses Problem ist als Schnittproblem kontextfreier Sprachen
bekannt.
Beweis.
Wir reduzieren das Palindromwortproblem (bereits bekannt) auf das Schnittproblem (neues
Problem).
Sei eine Grammatik und die Menge der Terminalsymbole. Sei die
folgende Grammatik:
üü
Die Grammatik erzeugt genau die Sprache der Palindromwörter über .
Unsere Reduktion nimmt nun als Eingabe eine kontextfreie Grammatik (bzw. deren
Codierung) und gibt das Paar aus (bzw. deren Codierungen). Wir stellen fest:
kann ein Palindromwort ableiten genau dann, wenn ,
wenn es also ein Wort gibt, dass aus und aus abgeleitet werden kann.
Die Funktion ist also eine Reduktion vom Palindromwortproblem auf das Schnittproblem.
Mit Behauptung 4.6.9 zusammen heißt das, dass das Schnittproblem unentscheidbar ist.
Theorem 8.8.8(Mehrdeutigkeitsproblem kontextfreier Sprachen)
Gegeben eine kontextfreie Grammatik . Es ist unentscheidbar,
ob mehrdeutig ist, d.h., ob es ein Wort gibt,
für das zwei verschiedene Ableitungsbäume existieren.
Falscher Beweis.
Wir reduzieren das uns bereits bekannte Schnittproblem auf das Mehrdeutigkeitsproblem.
Gegeben seien zwei kontextfreie Grammatiken mit Startsymbolen und
Nichtterminalmenge . Wir machen in einem ersten Schritt die Mengen und
disjunkt (wenn sie es nicht eh schon sind; wir können beispielsweise jedes
in
umbenennen). Dann führen wir ein Super-Startsymbol ein und zwei Produktionen:
und übernehmen alle Produktionen von und . Dies ist unsere neue Grammatik .
Sie sehen nun:
wenn es ein gibt, dann kann man auf zwei verschiedene
Weisen in ableiten, nämlich
und das sind wirklich zwei verschiedene Ableitungen, weil ja bereits .
Wenn nun umgekehrt ein Wort via und via ableitbar sein sollte
( also mehrdeutig sein sollte), dann bedeutet dies, dass und beide
das Wort ableiten können, also einen nichtleeren Schnitt haben.
Dies ist somit unsere Reduktion : nimm als Eingabe das Paar (bzw. dessen
Codierung),
konstruiere und gib aus. Dieses reduziert das Schnittproblem auf das
Mehrdeutigkeitsproblem.
Haben Sie den Fehler im Beweis erkannt? Das Problem ist, dass es sein könnte, dass
und leeren Schnitt haben, aber bereits mehrdeutig ist.
Die Ausgabe-Grammatik wäre dann auch mehrdeutig; also hätte die Reduktion
einen Fehler gemacht.
Wir müssen leider bis zum Postschen Korrespondenzproblem zurückgehen und direkt von dort
reduzieren.
Problematisch ist, dass ein PCP-Puzzle selbst mehrere Lösungen haben kann und auch für
ein Lösungswort es mehrere Möglichkeiten geben kann, es zu "legen", also
Wenn dem so wäre, dann würde bereits unsere Reduktion auf das Palindromwortproblem eine
mehrdeutige Grammatik erzeugen. Wir gehen einen anderen Weg.
Ich folge hier dem Tip in Exercise 5.21 aus
Michael Sipsers Buch Introduction to the Theory of Computation, third edition.
Beweis.
Sei ein PCP-Puzzle gegeben.
Wir erstellen nun eine kontextfreie Gramatik, die es dem "User" erlaubt, zu entscheiden,
ob er das Wort via die oberen Teile oder via die unteren Teile ableiten will;
wenn es auf beide Weisen geht, dann ist die Grammatik mehrdeutig und das PCP hat eine Lösung.
Also:
üü
wobei neue Symbole sind. Die Indizes stellen sicher,
dass jede von ausgehende Ableitung eindeutig ist (und genau so von );
die einzige Mehrdeutigkeit kann aufkommen, wenn ein Wort sowohl via als
auch via ableitbar ist; und dies geschieht genau dann, wenn das PCP-Puzzle
eine Lösung hat. Wir haben nun also unsere Reduktion von PCP auf das Mehrdeutigkeitsproblem.