8.8 Anwendungen des Postschen Korrespondenzproblems

Erinnerin Sie sich an kontextfreie Grammatiken? Das waren formale Grammatiken wie zum Beispiel STcTTaTbTϵ Diese Grammatiken erlauben uns, gewisse Sprachen zu beschreiben, indem Sie Regeln festlegen - hier Produktionen genannt, nach welchen man aus dem Startsymbol S Wörter über dem Alphabet (hier: {a,b,c}) ableiten kann. Beispielsweise: STcTaTbcTaTaTbbcTaTabbcTaabbcaabbc 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 G ein Palindromwort ableitbar ist, also ein γ, das von rechts nach links gelesen gleich ist, sprich γ=γR. Dieses Problem ist unentscheidbar.

Formal gesehen müssten wir eine Codierung kontextfreier Grammatiken über einem festen Alphabet (zum Beispiel {0,1,,;,} 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 P gegeben. Wir bauen daraus eine kontextfreie Grammatik G, so dass G genau dann ein Palindromwort ableiten kann, wenn P eine Lösung hat. Die Konstruktion ist überraschend einfach. Wir erschaffen ein Startsymbol S für unsere Grammatik und erstellen zu jeder Kachel α:β die Grammatikregel SαSβR , wobei βR das Wort β von rechts nach links gelesen bedeutet, also (xyz)R=zyx. Wir fügen noch eine weitere Regel hinzu: S$ , wobei $ ein neues Zeichen ist, dass nicht in der Symbolmenge des PCP-Puzzles P enthalten ist.

Behauptung 8.8.2 Wenn die Grammatik G ein Palindromwort ableiten kann, dann hat das PCP-Puzzle P eine Lösung.
Beweis. Die letzte angewandte Regel muss S$ sein, und somit hat das abgeleitete Wort die Form α1α2αn$βnRβ2Rβ1R . Jedes Paar αi:βi ist eine Kachel des PCP-Puzzles. Wenn das Wort ein Palindrom ist, dann gilt α1αn=β1βn und somit ist (α1:β1)(α2:β2)(αn:βn) eine Lösung des PCP-Puzzles.
Behauptung 8.8.3 Wenn das PCP-Puzzle P eine Lösung hat, dann kann die Grammatik G ein Palindromwort ableiten.
Beweis. Sei (α1:β1)(α2:β2)(αn:βn) eine Lösung des Puzzles, also α1α2αn=β1β2βn. Dann ist auch α1α2αn$(β1β2βn)R ein Palindrom und kann von G abgeleitet werden: Sα1Sβ1Rα1α2Sβ2Rβ1Rα1α2αnSβnRβ2Rβ1Rα1α2αn$βnRβ2Rβ1R Somit ist gezeigt, dass G 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 P, baue nach den obigen Regeln daraus die Grammatik G und frage dann den Algorithmus, ob G 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 nn! im λ-Kalkül berechenbar ist.
  • Wir wissen bereits, wie man nn! als primitiv-rekursive Funktion schreibt.
  • Wir wissen bereits, wie man eine allgemeine primitiv rekursive Funktion im λ-Kalkül implementiert.
  • Wir schließen nun, dass nn! 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 L1Σ1 und L2Σ2 zwei Sprachen. Eine Reduktion von L1 nach L2 ist eine Turing-berechenbare Funktion f:Σ1Σ2 mit der Eigenschaft, dass xΣ1: xL1f(x)L2 .

Erinnern Sie sich: dass f Turing-berechenbar ist, heißt, dass es eine Turingmaschine f gibt mit einem dezidierten Ausgabe-Band, so dass Mf(x) für jedes Eingabewort terminiert und zum Zeitpunkt der Terminierung f(x) auf das Ausgabeband geschrieben hat. Wenn wir eine Reduktion von L1 nach L2 haben, dann liefert uns jeder Entscheidungsalgorithmus für L2 unmittelbar einen Entscheidungsalgorithmus für L1:

Beobachtung 8.8.5 Wenn f eine Reduktion von L1 nach L2 ist und L2 entscheidbar ist, dann ist auch L1 entscheidbar.
Beweis. Sei M2 eine Turingmaschine, die L2 entscheidet und sei Mf die Turingmaschine, die f berechnet. Wir bauen nun eine neue Turingmaschine M1. Sie nimmt das Eingabewort xΣ1 und lässt die Turingmaschine Mf auf x arbeiten; wenn Mf terminiert, steht f(x) auf ihrem Ausgabeband. Wir rufen nun die Turing-Maschien M2 mit dem Eingabewort f(x) auf. Wenn M2 akzeptiert (oder eben ablehnt), dann lassen wir M1 akzeptieren (oder eben ablehnen). Es gilt nun: M1(x)=acceptM2(f(x))=accept(weil M2 die Sprache L2 entscheidet)f(x)L2(weil f eine Reduktion ist)xL1 und somit entscheidet M1 die Sprache L1.
Stellen Sie sich einfach vor, dass Mf der Code ist, den Sie selber schreiben müssen, und M2 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 f eine Reduktion von L1 nach L2 ist und L1 unentscheidbar ist, dann ist auch L2 unentscheidbar.
Beweis. Angenommen, L2 wäre entscheidbar. Dann wäre laut Behauptung 4.6.8 die Sprache L1 ja auch entscheidbar, was sie aber nach Annahme nicht ist. Daher ist L2 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 G1,G2. Es ist unentscheidbar, ob L(G1)L(G2) nichtleer ist, ob es also ein Wort x mit xG1 und xG2 gibt.

Dieses Problem ist als Schnittproblem kontextfreier Sprachen bekannt.

Beweis. Wir reduzieren das Palindromwortproblem (bereits bekannt) auf das Schnittproblem (neues Problem). Sei G eine Grammatik und Σ die Menge der Terminalsymbole. Sei G die folgende Grammatik: (für alle xΣ)SxSx(für alle xΣ)SxSϵ Die Grammatik G erzeugt genau die Sprache der Palindromwörter über Σ. Unsere Reduktion f nimmt nun als Eingabe eine kontextfreie Grammatik G (bzw. deren Codierung) und gibt das Paar (G,G) aus (bzw. deren Codierungen). Wir stellen fest: G kann ein Palindromwort ableiten genau dann, wenn L(G)L(G), wenn es also ein Wort α gibt, dass aus G und aus G abgeleitet werden kann. Die Funktion f 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 G. Es ist unentscheidbar, ob G mehrdeutig ist, d.h., ob es ein Wort xΣ 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 G1,G2 mit Startsymbolen S1,S2 und Nichtterminalmenge N1,N2. Wir machen in einem ersten Schritt die Mengen N1 und N2 disjunkt (wenn sie es nicht eh schon sind; wir können beispielsweise jedes XN2 in X umbenennen). Dann führen wir ein Super-Startsymbol S ein und zwei Produktionen: SS1SS2 und übernehmen alle Produktionen von G1 und G2. Dies ist unsere neue Grammatik G. Sie sehen nun: wenn es ein xL(G1)L(G2) gibt, dann kann man x auf zwei verschiedene Weisen in G ableiten, nämlich (Ableitung wie in G1)SS1x(Ableitung wie in G2)SS2x , und das sind wirklich zwei verschiedene Ableitungen, weil ja bereits S1S2. Wenn nun umgekehrt ein Wort y via S1 und via S2 ableitbar sein sollte (G also mehrdeutig sein sollte), dann bedeutet dies, dass G1 und G2 beide das Wort y ableiten können, also einen nichtleeren Schnitt haben. Dies ist somit unsere Reduktion f: nimm als Eingabe das Paar G1,G2 (bzw. dessen Codierung), konstruiere G und gib G aus. Dieses f reduziert das Schnittproblem auf das Mehrdeutigkeitsproblem.

Haben Sie den Fehler im Beweis erkannt? Das Problem ist, dass es sein könnte, dass G1 und G2 leeren Schnitt haben, G1 aber bereits mehrdeutig ist. Die Ausgabe-Grammatik G wäre dann auch mehrdeutig; also hätte die Reduktion f 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 top(s)=bottom(s)=γtop(s)=bottom(s)=γ . 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 P={(α1:β1),,(αn:βn)} gegeben. Wir erstellen nun eine kontextfreie Gramatik, die es dem "User" erlaubt, zu entscheiden, ob er das Wort via die oberen Teile αi 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: SS1SS2(für alle oberen Teile αi)S1αiS1i | αii(für alle unteren Teile βi)S2βiS2i | βii wobei 1,2,,n neue Symbole sind. Die Indizes i stellen sicher, dass jede von S1 ausgehende Ableitung eindeutig ist (und genau so von S2); die einzige Mehrdeutigkeit kann aufkommen, wenn ein Wort sowohl via S1 als auch via S2 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.