Skript zur Vorlesung Theoretische Informatik 2

Werbung
Skript zur Vorlesung
„Theoretische Informatik 2“
Prof. Dr. Georg Schnitger
Sommersemester 2017
Inhaltsverzeichnis
I.
Einführung
5
1. Grundlagen
1.1. Begriffe und Notationen . . . . . . . . . . . . . . . . . . . . .
1.1.1. Aussagenlogik, Mengen, Relationen und Funktionen .
1.1.2. Summen, Produkte, Vereinigungen und Durchschnitte
1.1.3. Bäume und Graphen . . . . . . . . . . . . . . . . . . .
1.2. Was ist ein korrektes Argument? . . . . . . . . . . . . . . . .
1.2.1. Direkte Beweise . . . . . . . . . . . . . . . . . . . . . .
1.2.2. Beweis durch Kontraposition . . . . . . . . . . . . . .
1.2.3. Beweis durch Widerspruch . . . . . . . . . . . . . . .
1.2.4. Vollständige Induktion . . . . . . . . . . . . . . . . . .
1.3. Schatztruhe . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3.1. Geschlossene Ausdrücke für Summen . . . . . . . . . .
1.3.2. Größe von endlichen Mengen . . . . . . . . . . . . . .
1.4. Einige Grundlagen aus der Stochastik . . . . . . . . . . . . .
1.5. Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7
8
8
10
11
13
14
15
15
16
26
26
26
29
31
2. Komplexitäts- und Sprachklassen
2.1. Worte und Sprachen . . . . . . . . . . . . . . . .
2.1.1. Das Wortproblem . . . . . . . . . . . . . .
2.2. Turingmaschinen und die Churchsche These . . .
2.3. Sprachklassen . . . . . . . . . . . . . . . . . . . .
2.3.1. Formale Sprachen . . . . . . . . . . . . .
2.3.2. Zeit-Komplexitätsklassen . . . . . . . . .
2.3.3. Speicherplatz-Komplexitätsklassen . . . .
2.3.4. Die Komplexität paralleler Berechnungen
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
33
33
36
39
41
42
43
44
46
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
II. Formale Sprachen
3. Endliche Automaten und reguläre Sprachen
3.1. Minimierung . . . . . . . . . . . . . . . . . . .
3.1.1. Äquivalenzrelationen . . . . . . . . . . .
3.1.2. Die Verschmelzungsrelation . . . . . . .
3.1.3. Der Äquivalenzklassenautomat . . . . .
3.1.4. Ein Minimierungsalgorithmus . . . . . .
3.1.5. Schnellere Implementierungen . . . . . .
3.1.5.1. Der Algorithmus von Moore .
3.1.5.2. Der Algorithmus von Hopcroft
3.1.6. Die Myhill-Nerode Relation . . . . . . .
3.2. Reguläre Sprachen . . . . . . . . . . . . . . . .
3.2.1. Der Satz von Myhill und Nerode . . . .
51
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
53
58
59
62
63
66
71
71
73
77
83
84
1
Inhaltsverzeichnis
3.2.2. Das Pumping-Lemma . . . . . . . . . . . . . . . .
3.3. Endliche Automaten und Nichtdeterminismus . . . . . . .
3.3.1. Nichtdeterministische endliche Automaten: NFAs .
3.3.1.1. Minimierung von NFAs . . . . . . . . . .
3.3.1.2. NFAs mit -Übergängen . . . . . . . . . .
3.3.2. Abschlusseigenschaften . . . . . . . . . . . . . . . .
3.3.3. Zweiwege Automaten . . . . . . . . . . . . . . . .
3.3.3.1. Determinismus gegen Nichtdeterminismus
3.3.3.2. Ein Kommunikationsargument . . . . . .
3.4. Endliche Automaten und Probabilismus . . . . . . . . . .
3.5. Reguläre Ausdrücke . . . . . . . . . . . . . . . . . . . . .
3.5.1. Die Länge regulärer Ausdrücke . . . . . . . . . . .
3.6. Grammatiken und reguläre Grammatiken . . . . . . . . .
3.7. Entscheidungsprobleme . . . . . . . . . . . . . . . . . . .
3.8. Zusammenfassung . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
85
88
88
94
96
96
98
100
102
104
108
111
112
114
115
4. Kontextfreie Sprachen
4.1. Ableitungsbäume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2. Die Chomsky-Normalform und das Wortproblem . . . . . . . . . . . .
4.3. Das Pumping Lemma und Ogden’s Lemma . . . . . . . . . . . . . . .
4.3.1. Abschlusseigenschaften kontextfreier Sprachen . . . . . . . . .
4.4. Kellerautomaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.1. Deterministisch kontextfreie Sprachen . . . . . . . . . . . . . .
4.4.2. Abschlusseigenschaften deterministisch kontextfreier Sprachen .
4.5. Entscheidungsprobleme . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5.1. Das Postsche Korrespondenzproblem . . . . . . . . . . . . . . .
4.5.2. Unentscheidbare Probleme für kontextfreie Sprachen . . . . . .
4.5.3. Das Äquivalenzproblem für Finite State Transducer . . . . . .
4.6. Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
117
118
122
131
137
138
142
146
148
148
151
153
155
III. Speicherplatz und Parallelität
157
5. Speicherplatz-Komplexität
5.1. Eine Platzhierarchie . . . . . . . . . . . . . . . . . . .
5.2. Sub-Logarithmischer Speicherplatz . . . . . . . . . . .
5.3. Logarithmischer Speicherplatz . . . . . . . . . . . . . .
5.3.1. DL . . . . . . . . . . . . . . . . . . . . . . . . .
5.3.2. NL und NL-Vollständigkeit . . . . . . . . . . . .
5.3.3. Der Satz von Savitch . . . . . . . . . . . . . . .
5.3.4. Der Satz von Immerman und Szlepscenyi . . .
5.4. PSPACE-Vollständigkeit . . . . . . . . . . . . . . . . . .
5.4.1. QBF: Quantifizierte Boolesche Formeln . . . .
5.4.2. Das Geographie-Spiel . . . . . . . . . . . . . .
5.4.3. NFA’s und reguläre Ausdrücke . . . . . . . . .
5.5. Komplexitätsklassen und die Chomsky Hierarchie . . .
5.6. Probabilistische Turingmaschinen und Quantenrechner
5.7. Zusammenfassung . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
159
159
160
161
161
164
167
168
171
172
175
176
177
182
186
. . . . . . . . . . . . . . . . . . . .
187
189
6. Parallelität
6.1. Parallele Rechenzeit versus Speicherplatz
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Inhaltsverzeichnis
6.2. P-Vollständigkeit . . . . . . . . . . . . . . . . . .
6.2.1. Das Circuit Value Problem . . . . . . . .
6.2.2. Die Lineare Programmierung . . . . . . .
6.2.3. Parallelisierung von Greedy-Algorithmen
6.3. Zusammenfassung . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
190
191
196
197
198
IV. Algorithmische Fragestellungen in der Logik
199
7. Beweissysteme für die Aussagenlogik
7.1. Frege Systeme . . . . . . . . . . . . . . . . . . . . . . . .
7.1.1. Beweissysteme mit Definitionen, bzw. Ersetzung
7.1.2. Der Modus Ponens . . . . . . . . . . . . . . . . .
7.2. Resolution . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2.1. Das Schubfachprinzip . . . . . . . . . . . . . . .
7.2.2. Resolution und Frege Systeme . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
201
202
207
209
213
218
220
8. Temporale Aussagenlogik
8.1. Model Checking . . . . . . . . . . . .
8.2. Kripke-Strukturen . . . . . . . . . .
8.3. Computational Tree Logic . . . . . .
8.4. Die Semantik für CTL . . . . . . . .
8.4.1. Äquivalenz von CTL-Formeln
8.4.2. Effizientes Model Checking .
8.5. Zusammenfassung und Ausblick . . .
8.6. Literaturhinweise zu Kapitel 8 . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
223
223
224
227
228
233
234
236
236
9. (Un-)Vollständigkeit
9.1. Der Gödelsche Vollständigkeitssatz . . . . . . . . .
9.2. Logische Theorien . . . . . . . . . . . . . . . . . .
9.2.1. Die Komplexität der Presburger-Arithmetik
9.2.2. Der Gödelsche Unvollständigkeitssatz . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
237
237
239
241
243
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
Teil I.
Einführung
5
1. Grundlagen
Die Vorlesung „Theoretische Informatik 2“ baut auf dem Grundstudiumszyklus der theoretischen Informatik auf.
- In der Veranstaltung „Diskrete Modellierung“ werden fundamentale diskrete Modellierungsmethoden zur Verfügung gestellt. Behandelt werden Aussagen- und Prädikatenlogik,
Bäume und Graphen, Markovketten sowie eine Einführung in endliche Automaten und
kontextfreie Grammatiken.
- Die Veranstaltungen „Datenstrukturen“ und „Theoretische Informatik 1“ sind vor Allem
der Beschreibung von Datenstrukturen, Standardalgorithmen und Entwurfsmethoden
sowie der Effizienzmessung von Algorithmen gewidmet. Des Weiteren wird mit den
Konzepten der NP-Vollständigkeit und der Entscheidbarkeit die Möglichkeit gegeben,
die Komplexität algorithmischer Probleme zu bestimmen. Die Vorlesungsinhalte bilden
das Rüstzeug für den Entwurf effizienter Algorithmen und das Erkennen schwieriger
algorithmischer Probleme.
Im ersten Teil dieser Vorlesung werden informatische und mathematische Grundlagen behandelt.
Inhalt des zweiten Teils sind reguläre und kontextfreie Sprachen. Hier werden Themen der
diskreten Modellierung wieder aufgegriffen und fortgeführt: Neue Charakterisierungen regulärer
Sprachen mit Hilfe randomisierter Automaten und Zweiwege-Automaten und ein sehr schneller
Minimierungsalgorithmus werden beschrieben. Das Wortproblem für kontextfreie Sprachen,
Ogden’s Lemma, Kellerautomaten und unentscheidbare Probleme für kontextfreie Grammatiken
sind zentrale Themen für kontextfreie Sprachen.
Im dritten Teil fragen wir uns, wie viel Ressourcen benötigt werden, um das Wortproblem
für wichtige Klassen formaler Sprachen –wie etwa reguläre, kontextfreie oder kontextsensitive
Sprachen– zu lösen: Im Wortproblem für eine Sprache, also für eine Menge von Worten, ist
festzustellen, ob ein Eingabewort zur Sprache gehört oder nicht.
Neben den schon aus der Theoretischen Informatik 1 bekannten Komplexitätsklassen P und NP
spielen auch Komplexitätsklassen eine wichtige Rolle, die den notwendigen Speicherverbrauch
messen: Wir werden auf die Komplexitätsklassen DL und NL wie auch auf die Klasse PSPACE
geführt. Diese Klassen sind nicht nur für das Verständnis formaler Sprachen wichtig, sondern
auch für das Verständnis nicht-klassischer Berechnungen wie randomisierte Berechnungen
oder Quantenberechnungen. Als Nebenprodukt werden wir auch zum Beispiel sehen, dass das
Entscheidungsproblem „Besitzt der ziehende Spieler einen Gewinnzug?“ für viele nicht-triviale
Zweipersonenspiele zu den schwierigsten Problemen der Klasse PSPACE gehört: Man kann
deshalb die Klasse PSPACE auch zur Klassifikation der Schwierigkeit von Spielen benutzen.
Welche Probleme erlauben ultra-schnelle parallele Algorithmen? Wir betrachten zur Beantwortung dieser Frage die Klasse NC aller parallelisierbaren Entscheidungsprobleme: Ein
Entscheidungsproblem L gehört genau dann zu NC, wenn L rasant schnelle Algorithmen besitzt,
die mit nicht zu vielen Prozessoren arbeiten. Wir fragen uns dann, welche Probleme in P nicht
parallelisierbar sind und führen zur Beantwortung dieser Frage die LOGSPACE-Reduktion
und den Begriff der P-Vollständigkeit ein. Wir stellen fest, dass alle Sprachen in P parallelisierbar sind, dass also P = NC gilt, wenn eine P-vollständige Sprache parallelisierbar ist:
Die P-vollständigen Sprachen sind also die im Hinblick auf Parallelisierbarkeit schwierigsten
7
1. Grundlagen
Sprachen in P. Schließlich werden wir auf einen sehr engen Zusammenhang zwischen Parallelisierbarkeit und Speicherplatz-Komplexität geführt, wenn wir die Anzahl der Prozessoren
außer Acht lassen.
Im letzten Teil der Vorlesung werden algorithmische Fragestellungen der Logik untersucht.
Wir beginnen mit Beweissystemen für allgemeingültige aussagenlogische Formeln bzw. für
widersprüchliche Formeln in konjunktiver Normalform. Wir zeigen die Vollständigkeit des
auf dem Modus Ponens beruhenden Beweissystems ABS wie auch des Resolutionsverfahrens.
Davis-Putnam-Logemann-Loveland-Verfahren werden vorgestellt und ihre Grenzen werden
mit Hilfe des Schubfachprinzips untersucht.
Die temporale Aussagenlogik und insbesondere die „Computational Tree Logic“ (CTL) ist eine
eindrucksvolle Erfolgsstory in der Durchführung vieler Aspekte des Model Checking, also der
Frage, ob ein Systementwurf vorgeschriebene Spezifikationen einhält. Wir beschreiben Syntax
und Semantik von CTL und zeigen, dass CTL ein effizientes Model Checking unterstützt.
Lassen sich mächtige Systeme in der Prädikatenlogik beschreiben und kann man diese Formalismen beherrschen? Wir stellen mit dem Hilbertkalkül ein vollständiges Beweissystem für die
Prädikatenlogik vor. Am Beispiel der Theorie der Addition in den natürlich Zahlen lernen wir
mit den Axiomen der Presburger-Arithmetik ein einfaches Axiomensystem kennen, in dem
alle in den natürlichen Zahlen wahren Aussagen über die Addition auch ableitbar sind: Wahrheit und Ableitbarkeit stimmen überein. Betrachten wir hingegen die „volle Zahlentheorie“,
betrachten also Aussagen über die Addition und Multiplikation in den natürlichen Zahlen,
dann gilt der (erste) Gödelsche Unvollständigkeitssatz: Es gibt kein rekursiv aufzählbares
Axiomensystem, in dem alle wahren Aussagen der Zahlentheorie gelten. Das Konzept der
Ableitbarkeit ist zu schwach, um alle wahren zahlentheoretischen Aussagen herleiten zu können.
1.1. Begriffe und Notationen
Wir stellen Begriffe und Schreibweisen aus der Aussagenlogik, für Mengen, Relationen und
Funktonen, Bäume und Graphen zusammen. Ausführlicher gehen wir auf die Konzepte der
Worte und Sprachen ein.
1.1.1. Aussagenlogik, Mengen, Relationen und Funktionen
1. Wir erinnern an die Mengennotationen: Die Beschreibung x ∈ M bedeutet, dass x ein
Element der Menge M ist, x 6∈ M hingegen bedeutet, dass x kein Element von M ist.
Die Schreibweise
M 0 := {x ∈ M : x hat Eigenschaft E }
drückt aus, dass wir die Menge M 0 als die Menge aller Elemente x ∈ M definieren, die
die Eigenschaft E besitzen. Alternativ schreiben wir auch
M 0 := {x : x ∈ M und x hat Eigenschaft E }.
– Für Mengen M1 , M2 bedeutet M1 ⊆ M2 , bzw. M2 ⊇ M1 dass M1 eine Teilmenge
von M2 ist. P(M ) := { M 0 : M 0 ⊆ M } ist die Potenzmenge von M und ∅ ist die
leere Menge. Beachte, dass die leere Menge Teilmenge jeder Menge ist.
– Wir erinnern an die Mengenoperationen
8
1.1. Begriffe und Notationen
Durchschnitt M1 ∩ M2 := {x : x ∈ M1 und x ∈ M2 },
Vereinigung M1 ∪ M2 := {x : x ∈ M1 oder x ∈ M2 },
Mengendifferenz M1 \ M2 := M1 − M2 := {x : x ∈ M1 und x 6∈ M2 }.
2. Natürliche, ganze, rationale und reelle Zahlen:
N
:=
Menge der natürlichen Zahlen := {0, 1, 2, 3, ...}
N>0
:=
Menge der positiven natürlichen Zahlen := {1, 2, 3, ...}
Z
:=
Menge der ganzen Zahlen := {0, 1, −1, 2, −2, 3, −3, ...}
Q
:=
Menge der rationalen Zahlen := { ab : a, b ∈ Z b 6= 0}
R
:=
Menge der reellen Zahlen
Für eine reelle Zahl x ∈ R ist bxc die größte ganze Zahl kleiner oder gleich x und dxe
die kleinste ganze Zahl größer oder gleich x.
3. Das kartesische Produkt der Mengen M1 , . . . , Mk ist die Menge
M1 × · · · × Mk = { (m1 , . . . , mk ) : m1 ∈ M1 , . . . , mk ∈ Mk }.
4. Graphen werden durch Paare G = (V, E) bezeichnet, wobei V die Menge der Knoten und
E die Menge der Kanten ist. Wenn G ungerichtet ist, dann ist E ⊆ { {u, v} : u, v ∈
V und u 6= v}. Wenn G ein gerichteter Graph ist, dann ist stets E ⊆ V × V .
5. Um eine Funktion (oder Abbildung) f zu beschreiben, benutzen wir den Formalismus
f : A → B um anzugeben, dass die Funktion genau auf allen Elementen x ∈ A des
Definitionsbereichs A definiert ist. Der Wert von f für das Argument x ∈ A wird
durch f (x) bezeichnet; beachte, dass f (x) ein Element des Bildbereichs B ist, es gilt
also f (x) ∈ B.
– f ist injektiv, falls es für jedes Element b ∈ B des Bildbereichs höchstens ein
Element a des Definitionsbereichs mit f (a) = b gibt.
– f ist surjektiv, falls es für jedes Element b ∈ B des Bildbereichs mindestens ein
Element a des Definitionsbereichs mit f (a) = b gibt.
– f ist bijektiv, falls es für jedes Element b ∈ B des Bildbereichs genau ein Element
a des Definitionsbereichs mit f (a) = b gibt.
Die Funktionen f : A → B und g : B → C lassen sich hintereinander ausführen:
Zuerst wende f auf das Argument x an, dann wende g auf das Zwischenergebnis f (x) an,
um das Endergebnis g(f (x)) zu erhalten. Man bezeichnet die Hintereinanderausführung
auch als Komposition und benutzt die Notation g ◦ f .
6. Notation aus der Logik:
– Eine Belegung B ist eine partiell definierte Funktion, die aussagenlogischen Variablen die Wahrheitswerte 1 oder 0 zuweist. Der Wahrheitswert einer aussagenlogischen Formel unter einer Belegung B wird durch JφKB bezeichnet.
– ¬φ ist die Negation der Formel φ. Für Formeln φ und ψ ist φ ∧ ψ, φ ∨ ψ und φ ⊕ ψ
die Konjunktion, Disjunktion, bzw. das exklusive Oder (XOR) von φ und ψ.
Die Formeln φ → ψ und φ ↔ ψ bezeichnen die Implikation und die Äquivalenz.
Die Menge aller aussagenlogischen Formeln wird durch AL bezeichnet. Die Sprache
aller Tautologien, also aller Formeln φ ∈ AL, die unter allen Belegungen wahr
sind, wird mit T bezeichnet.
9
1. Grundlagen
– Die semantische Äquivalenz φ ≡ ψ gilt genau dann, wenn alle Belegungen, die
ψ erfüllen auch φ erfüllen und umgekehrt. Beachte (φ → ψ) ≡ (¬φ ∨ ψ) und
(φ ↔ ψ) ≡ ((φ → ψ) ∧ (ψ → φ)).
Die semantische Folgerung ψ |= φ gilt genau dann, wenn φ von allen Belegungen
erfüllt wird, die ψ erfüllen.
1.1.2. Summen, Produkte, Vereinigungen und Durchschnitte
Summen- und Produktsymbole haben sich für Summen und Produkte mit vielen Operanden
eingebürgert.
(a) Ist k ∈ N>0 und sind z1 , . . . , zk (natürliche, ganze, rationale, reelle oder komplexe) Zahlen,
so schreiben wir
k
X
zi
bzw.
i=1
X
zi
i∈{1,...,k}
um die Summe der Zahlen z1 , . . . , zk zu bezeichnen (d.h. die Zahl z1 + · · · + zk ).
Wir schreiben
k
Y
zi
bzw.
i=1
Y
zi
i∈{1,...,k}
um das Produkt der Zahlen z1 , . . . , zk zu bezeichnen (d.h. die Zahl z1 · · · · · zk ).
(b) Sind M1 , . . . , Mk Mengen, so schreiben wir
k
[
Mi
bzw.
i=1
[
Mi
i∈{1,...,k}
um die Vereinigung der Mengen M1 , . . . , Mk zu bezeichnen (d.h. die Menge M1 ∪· · ·∪Mk ).
Wir schreiben
k
\
i=1
Mi
bzw.
\
Mi
i∈{1,...,k}
um den Durchschnitt der Mengen M1 , . . . , Mk zu bezeichnen (d.h. die Menge M1 ∩ · · · ∩
Mk ).
(c) Ist K eine Menge, deren Elemente Teilmengen einer Menge U sind (d.h.: K ⊆ P(U )), so
ist
[
M
:=
{x ∈ U : es existiert eine Menge M ∈ K, so dass x ∈ M }
M ∈K
die Vereinigung aller Mengen M ∈ K (d.h. die Menge aller Elemente x, die in mindestens
einer Menge M ∈ K liegen). Analog ist
\
M
:=
{x ∈ U : für alle M ∈ K gilt x ∈ M }
M ∈K
der Durchschnitt aller Mengen M ∈ K (d.h. die Menge aller Elemente x, die in jeder
Menge M ∈ K liegen).
10
1.1. Begriffe und Notationen
1.1.3. Bäume und Graphen
Ein ungerichteter Graph ist ein Paar G = (V, E), das aus einer Knotenmenge V und
einer Kantenmenge E besteht, wobei alle Kanten Teilmengen von V der Größe zwei, also
Paarmengen sind: Für jede Kante e ∈ E gibt es Knoten u, v ∈ V mit u 6= v und
e = {u, v}.
Wir sagen, dass u und v Endknoten von e sind, bzw. dass e die Knoten u und v verbindet.
Die Knoten u, v ∈ V heißen benachbart (bzw. adjazent), wenn {u, v} eine Kante von G ist.
Die Anzahl der Nachbarn eines Knotens u ist der Grad von u. Der Grad eines Graphen ist
der maximale Grad eines Knotens.
In einem gerichteten Graphen sind Kanten geordnete Paare, d.h. es gilt stets E ⊆ V × V .
Die Kante
e = (u, v)
besitzt den Ausgangsknoten u und den Endknoten v; der Knoten v heißt auch ein direkter
Nachfolger von u und u heißt direkter Vorgänger von v. Der Ausgangsgrad Aus-GradG (u)
von Knoten u in G (Englisch: outdegree) ist die Anzahl der direkten Nachfolger von u, also
Aus-GradG (u) = { v ∈ V : (u, v) ∈ V }.
Der Eingangsgrad Ein-GradG (v) von Knoten v in G (Englisch: indegree) ist die Anzahl der
direkten Vorgänger von u, also
Ein-GradG (v) = { u ∈ V : (u, v) ∈ V }.
Während Kanten für ungerichtete Graphen stets zwei verschiedene Knoten verbinden, sind
„Schleifen“ (u, u) für gerichtete Graphen erlaubt.
Wir sagen (für ungerichtete wie auch gerichtete Graphen), dass die Knoten u und v mit der
Kante e inzident sind, wenn u und v Endknoten von e sind, bzw. Anfangs- und Endknoten
von e sind. Schließlich heißt G1 = (V, E1 ) ein Teilgraph von G2 = (V, E2 ), wenn E1 ⊆ E2 ,
wenn also jede Kante von G1 auch eine Kante von G2 ist.
Ein Weg der Länge k in G ist ein Tupel
(v0 , v1 . . . , vk )
von Knoten, so dass {vi−1 , vi } ∈ E, bzw. (vi−1 , vi ) ∈ E. Ein Weg ohne wiederholte Knoten ist
ein einfacher Weg. Die Distanz zwischen zwei Knoten ist die minimale Länge eines Weges
zwischen den beiden Knoten.
Ein Kreis der Länge k ist ein Weg (v0 , . . . , vk ) der Länge k mit v0 = vk und der Eigenschaft,
dass (v0 , . . . , vk−1 ) ein Weg ist. Ein Kreis (v0 , . . . , vk−1 , v0 ) heißt einfach, wenn (v0 , . . . , vk−1 )
ein einfacher Weg ist.
Ein Hamilton-Weg ist ein einfacher Weg, der jeden Knoten genau einmal durchläuft, ein
Hamilton-Kreis ist ein einfacher Kreis, der jeden Knoten genau einmal durchläuft, Ein
Euler-Weg ist ein Weg, der jede Kante genau einmal durchläuft, ein Euler-Kreis ist ein
Kreis, der jede Kante genau einmal durchläuft.
Nenne einen Graphen G azyklisch, wenn G keinen einfachen Kreis besitzt. Ein gerichteter
Graph heißt stark zusammenhängend, wenn es für je zwei Knoten u und v einen Weg von
u nach v gibt.
11
1. Grundlagen
Abbildung 1.1.: Der erste Graph ist ein Kreis der Länge 5. Der zweite Graph besteht aus zwei
Kreisen der Länge 3.
Eine Knotenmenge in einem ungerichteten Graphen ist zusammenhängend, wenn je zwei
Knoten der Menge durch einen Weg verbunden sind. Eine Zusammenhangskomponente
ist eine größte zusammenhängende Knotenmenge. Sei G = (V, E) ein ungerichteter Graph.
Ein Knoten u ∈ V besitzt offenbar genau eine Zusammenhangskomponente, nämlich die
Knotenmenge
ZH(u) = {v ∈ V : es gibt einen Weg von u nach v }.
Beachte, dass damit die Knotenmenge V eine disjunkte Vereinigung der Zusammenhangskomponenten von G ist. Warum? Angenommen, es ist w ∈ ZH(u) ∩ ZH(v). Damit wissen wir, dass
∗
∗
es Wege u → w von u nach w und v → w von v nach w gibt. Ein beliebiger Knoten v 0 ∈ ZH(v)
∗
kann somit durch einen Weg w → v 0 erreicht werden, wenn wir zuerst von w („rückwärts“)
∗
∗
nach v laufen und von dort aus nach v 0 . Also erhalten wir auch einen Weg u → w → v 0 von
u nach v 0 und ZH(v) ⊆ ZH(u) folgt. Analog zeigt man ZH(u) ⊆ ZH(v) und die Gleichheit
ZH(u) = ZH(v) folgt, wann immer ZH(u) und ZH(v) gemeinsame Knoten besitzen.
Ein Wald ist ein ungerichteter Graph ohne einfache Kreise. Ein Baum ist ein zusammenhängender Wald. (Mit anderen Worten, ein Wald ist eine knoten-disjunkte Vereinigung von
Bäumen.) Die Knoten mit Grad höchstens Eins heißen Blätter. Ein Wald W heißt ein Spannwald für einen ungerichteten Graphen G, wenn W ein Teilgraph von G ist und wenn G und
W dieselbe Knotenmenge besitzen; ist W sogar ein Baum, so heißt W ein Spannbaum von
G.
Abbildung 1.2.: Ein Wald, der aus drei Bäumen besteht.
Wir erhalten einen gewurzelten Baum T = (V, E) aus einem Baum T 0 = (V, E 0 ), indem wir
einen Knoten r ∈ V als Wurzel auszeichnen und alle Kanten von T 0 „von der Wurzel weg“
richten.
Genauer, ein gerichteter Graph T = (V, E) ist ein gewurzelter Baum, falls T die folgenden
Eigenschaften besitzt:
1. Es gibt genau einen Knoten r ∈ V mit Ein-GradT (r) = 0: Die Wurzel hat keine
eingehenden Kanten.
2. Für jeden Knoten v ∈ V gibt es einen in r beginnenden und in v endenden Weg.
12
1.2. Was ist ein korrektes Argument?
3. Für jeden von der Wurzel verschiedenen Knoten v ∈ V ist Ein-GradT (v) = 1: Bis auf
die Wurzel hat jeder Knoten genau einen Elternknoten.
Sei also T = (V, E) ein gewurzelter Baum. Für jede Kante e = (u, v) ∈ E heißt v ein Kind
von u und u der Elternknoten von v. Ist neben der Kante (u, v) auch (u, w) eine Kante von
B, dann nennen wir w einen Geschwisterknoten von v. Gibt es einen Weg von Knoten u
nach Knoten v, dann heißt u Vorfahre von v und v Nachfahre von u. Knoten vom Grad 1
heißen Blätter. Ein Knoten v ∈ V heißt ein innerer Knoten von T , wenn v kein Blatt ist
und von der Wurzel verschieden ist.
Die Tiefe des Knotens v ist die Länge des Weges von der Wurzel nach v, die Höhe von v ist
die größte Länge eines in v beginnenden Weges. Die Tiefe eines Baums ist die größte Tiefe
eines Blatts, die Höhe eines Baums ist die Höhe der Wurzel.
Ein gewurzelter Baum T = (V, E) heißt binär, wenn Aus-GradT (v) ≤ 2 für jeden Knoten
v ∈ V gilt. Ein vollständiger binärer Baum der Tiefe t ist ein binärer Baum, in dem alle
Blätter die Tiefe t besitzen und alle inneren Knoten wie auch die Wurzel den Aus-Grad genau
2 besitzen.
Ein vollständiger Graph oder eine Clique ist ein ungerichteter Graph, in dem je zwei Knoten benachbart sind. Eine unabhängige Menge ist eine Knotenmenge, in der je zwei Knoten
nicht durch eine Kante verbunden sind. Ein Graph ist bipartit, wenn seine Knotenmenge in
zwei unabhängige Mengen zerlegt werden kann.
Eine konfliktfreie Färbung eines ungerichteten Graphen G = (V, E) ist eine Farbzuweisung
an die Knoten, so dass benachbarte Knoten verschiedene Farben erhalten. Eine konfliktfreie
Färbung zerlegt somit die Knotenmenge in unabhängige Mengen. Die minimale Farbenzahl,
die für die Färbung eines Graphen G benötigt wird, heißt die chromatische Zahl χ(G) von
G.
Aufgabe 1
(a) Zeige, dass die Tiefe eines binären Baums mit n Blättern mindestens dlog2 ne beträgt.
(b) Sei B ein binärer Baum mit N Blättern und sei Ti die Tiefe des iten Blatts. Zeige die sogenannte Kraft’sche
Ungleichung
n
X
i=1
2−Ti ≤ 1.
Hinweis: Assoziiere einen binären String mit jedem Blatt.
1.2. Was ist ein korrektes Argument?
(Teile dieses Abschnitts orientieren sich an Kapitel 4 des Skripts „Diskrete Modellierung“.)
Die theoretische Informatik arbeitet mit mathematischen Methoden, um unumstößliche Aussagen machen zu können. In dieser Veranstaltung möchten wir zum Beispiel zweifelsfreie Aussagen
über das Verhalten von Algorithmen und Datenstrukturen zur Lösung eines algorithmischen
Problems angeben. Typische Aussagen sind von der folgenden Form:
Der Algorithmus löst das Problem für alle Eingaben, und für alle Eingaben der
Länge n garantieren die eingesetzten Datenstrukturen eine Laufzeit von höchstens
t(n) Schritten.
Kompliziertere Analysen unterteilen wir in Zwischenbehauptungen, die wir „Lemmas“ nennen
und die abschließende Behauptung, die in einem „Satz“ festgehalten wird. Die Zwischenbehauptungen wie auch die abschließende Behauptung müssen natürlich in jeder Situation richtig
13
1. Grundlagen
sein und durch jeweils einen „Beweis“ untermauert sein. Der Beweis einer Behauptung darf
verwenden:
• etwaige Voraussetzungen der Behauptung,
• Definitionen und bereits bekannte Tatsachen und Sätze,
• im Beweis selbst oder anderswo bereits als wahr bewiesene Aussagen,
• und darf diese Fakten durch logische Schlussregeln verknüpfen.
Das hört sich alles sehr kompliziert an, ist aber höchst einfach: Der Beweis muss aus einer
Folge von einfach nachvollziehbaren Schritten bestehen, die selbst der „Metzger um die Ecke“
nachvollziehen kann und überzeugend findet.
Ziel dieses Abschnitts ist ein kurzer Überblick über die folgenden grundlegenden Beweistechniken, insbesondere:
• direkter Beweis
• Beweis durch Kontraposition
• Beweis durch Widerspruch (indirekter Beweis)
• und vollständige Induktion.
1.2.1. Direkte Beweise
Bei einem direkten Beweis wird die Behauptung eines Satzes „direkt“, d.h. ohne „Umwege“,
bewiesen. Ein erstes Beispiel ist der Nachweis, dass das arithmetische Mittel stets mindestens
so groß wie das geometrische Mittel ist. Im Verlauf der Vorlesung werden wir viele weitere
Beispiele kennenlernen.
Satz 1.1 Für alle reellen Zahlen a, b ≥ 0 gilt
a+b √
≥ a · b.
2
Zuerst versuchen wir eine Beweisidee zu erhalten.
1. Die Wurzel stört und wir quadrieren:
√
2
a · b zeige die Ungleichung ( a+b
• Statt a+b
2 ≥
2 ) ≥ a · b.
2. Wir multiplizieren aus und erhalten die Ungleichung
a2 +2a·b+b2
4
≥ a · b.
3. Wir multiplizieren mit 4 und erhalten a2 + 2a · b + b2 ≥ 4a · b.
4. Wenn wir 4a · b nach links „bringen“, ist a2 − 2a · b + b2 ≥ 0 zu zeigen.
• a2 − 2a · b + b2 = (a − b)2 gilt.
• Jedes Quadrat ist nicht-negativ und die Ungleichung stimmt!?!
√
Das ist leider kein Beweis, weil wir aus der Ungleichung a+b
a · b eine wahre Aussage
2 ≥
folgern. Hoffentlich haben wir nur mit äquivalenten Umformungen gearbeitet.
Beweis:
1. a2 − 2a · b + b2 = (a − b)2 gilt und a2 − 2a · b + b2 ≥ 0 folgt.
2. Wir addieren 4a · b auf beide Seiten: a2 + 2a · b + b2 ≥ 4a · b gilt ebenfalls.
14
1.2. Was ist ein korrektes Argument?
3. Die linke Seite der Ungleichung stimmt mit (a + b)2 überein: Es gilt also
(a + b)2 ≥ 4a · b.
4. Wir dividieren beide Seiten durch 4 und ziehen die Wurzel:
a+b √
≥ ab
2
folgt und das war zu zeigen.
1.2.2. Beweis durch Kontraposition
Der Beweis durch Kontraposition beruht auf der Äquivalenz der beiden Implikationen
wenn Aussage A wahr ist, dann ist auch Aussage B wahr
und
wenn Aussage B falsch ist, dann ist auch Aussage A falsch.
Hier ist ein erstes Beispiel für einen Beweis durch Kontraposition.
Satz 1.2
Für jedes n ∈ N gilt: Falls n2 eine ungerade Zahl ist, so ist auch n eine ungerade Zahl.
Beweis: Durch Kontraposition. Sei n ∈ N beliebig. Falls n ungerade ist, so ist nichts weiter
zu beweisen.
Wir zeigen: Falls n keine ungerade Zahl ist, so ist auch n2 keine ungerade Zahl.
Beachte: Nach Definition ist eine natürliche Zahl m genau dann gerade, wenn es ein k ∈ N
gibt, s.d. m = 2 · k. Daher gilt:
n ist gerade ⇒ es existiert k ∈ N s.d. n = 2 · k
2
(denn n ist gerade)
⇒ es existiert k ∈ N s.d. n = 4 · k = 2 · (2 · k 2 )
⇒ n2 ist gerade
2
(nach Definition gerader Zahlen).
Somit ist n2 gerade, d.h. n2 ist keine ungerade Zahl.
1.2.3. Beweis durch Widerspruch
Man beweist einen Satz der Form
„Falls die Voraussetzungen A erfüllt sind, so gilt Aussage B“
durch Widerspruch dadurch, dass man
• annimmt, dass die Voraussetzungen A erfüllt sind, aber die Aussage B nicht gilt und
• daraus einen Widerspruch herleitet.
Nicht nur Implikationen lassen sich durch Widerspruch beweisen. Möchten wir zum Beispiel
die Aussage B durch Widerspruch beweisen, dann stellen wir uns vor, dass die Implikation
„Wenn 1 = 1, dann gilt Aussage B“ zu zeigen ist: Nimm an, dass die Aussage B nicht gilt und
leite daraus einen Widerspruch her.
Als ein erstes Beispiel für einen Beweis durch Widerspruch betrachten wir folgenden Satz:
15
1. Grundlagen
√
2 ist irrational, also keine rationale Zahl.
√
Beweis: Durch Widerspruch. Wir nehmen an, dass 2 eine rationale Zahl ist und müssen
einen Widerspruch herleiten.
√
Wenn 2 eine rationale Zahl ist, dann gibt es teilerfremde Zahlen p, q ∈ N mit
√
p
2= .
q
Satz 1.3
Wir quadrieren und erhalten die Gleichung
p2 = 2 · q 2 .
Also ist p2 eine gerade Zahl. Wir haben aber in Satz 1.2 gezeigt, dass dann auch p gerade ist.
Wenn aber p = 2r, dann folgt p2 = 4r2 = 2q 2 und damit 2r2 = q 2 . Dann ist aber q 2 gerade.
Wir wenden wieder Satz 1.2 an und erhalten, dass auch q gerade ist: Die Zahlen p und q haben
den gemeinsamen Teiler 2 im Widerspruch zur Teilerfremdheit
Der griechische Mathematiker Euklid (300 v. Chr.) hat gezeigt, dass es unendliche viele Primzahlen1 gibt. Dieses Resultat ist Grundlage für viele Verfahren der Public-Key Kryptographie.
Mehr über die Public-Key Kryptographie erfahren Sie in der Veranstaltung „Mathematik 2“.
Satz 1.4 (Satz von Euklid) Es gibt unendlich viele Primzahlen.
Beweis: Wir benutzen, dass sich jede natürliche Zahl als Produkt von Primzahlen schreiben
lässt.
Wir nehmen an, dass es nur endlich viele Primzahlen gibt und dass dies die Primzahlen
p1 , . . . , pn sind. Definiere die Zahl
N = p1 · · · pn + 1.
Dann ist N − 1 durch alle Primzahlen teilbar und N kann durch keine Primzahl teilbar sein,
denn Zahlen mit einem gemeinsamen Teiler größer als Eins haben einen Abstand größer als
Eins.
1.2.4. Vollständige Induktion
Wir möchten die Aussage A(n) für alle natürlichen Zahlen n zeigen. Dazu ist es ausreichend,
wenn wir
1. im Induktionsanfang die Aussage A(0) zeigen und
2. im Induktionsschritt die Implikation
(A(0) ∧ A(1) ∧ · · · ∧ A(n)) → A(n + 1)
für jedes n ∈ N nachweisen.
Typischerweise, wie auch in Beispiel 1.1, nimmt man „nur“ die Aussage A(n) in der Induktionsannahme an und weist die Aussage A(n + 1) nach. In Beispiel 1.2 müssen wir aber zum Beispiel
die stärkere Induktionsannahme A(n − 1) ∧ A(n) benutzen, um A(n + 1) zeigen zu können. Um
aber diese stärkere Induktionsannahme abrufen zu können, müssen wir im Induktionsanfang
mehr tun und die Aussagen A(1) und A(2) zeigen.
Manchmal gilt eine Aussage A(n) nur für alle Zahlen n ∈ N ab einer Zahl n0 . In einem solchen
Fall zeigt man die Aussage A(n0 ) im Induktionsanfang und behält die Vorgehensweise des
Induktionsschritts bei.
1
Eine Primzahl ist eine natürliche Zahl größer als Eins, die nur durch sich selbst und durch die Eins teilbar ist.
16
1.2. Was ist ein korrektes Argument?
Beispiel 1.1 [Es ist richtig dunkel]
Wir befinden uns in einem stockdunklem Gang, der in einer Richtung unbeschränkt lang
ist. Den Gang können wir nur in der anderen Richtung verlassen. Was tun, wenn wir noch
nicht einmal die Länge n des Weges bis zum Ende des Ganges kennen? Wie können wir mit
möglichst wenigen Schritten den Gang verlassen?
• Wie wär’s mit: Einen Schritt nach „vorn“, zwei zurück, drei nach vorn, vier zurück, . . .
• Und wie viele Schritte benötigen wir, um den Gang zu verlassen?
Satz 1.1
n
X
i = 1 + 2 + ... + n =
i=1
n · (n + 1)
.
2
Beweis: Wir geben zwei Argumente und beginnen mit der vollständigen Induktion nach n:
(a) Induktionsanfang für n = 0: Es ist
P0
i=1 i
= 0 und
0·(0+1)
2
= 0. X
(b) Induktionsschritt von n nach n + 1: Sei n ∈ N beliebig.
– Wir können die Induktionsannahme
–
Pn+1
X
i=1
i=
Pn
i=1 i
+ (n + 1)
Pn
i=1 i
Ind.ann. n·(n+1)
=
2
=
n·(n+1)
2
+ (n + 1) =
voraussetzen.
n·(n+1)+2·(n+1)
2
=
(n+1)·(n+2)
.
2
Unser zweites Argument ist ein direkter Beweis: Wir betrachten ein Gitter mit n Zeilen
P
und n Spalten. Das Gitter hat n2 Gitterpunkte. Die Summe ni=1 i stimmt überein mit der
Anzahl der Gitterpunkte unterhalb der Hauptdiagonalen und auf der Hauptdiagonalen. Die
Hauptdiagonale besitzt n Gitterpunkte und unterhalb der Hauptdiagonalen befindet sich die
Hälfte der verbleibenden n2 − n Gitterpunkte. Also folgt
n
X
i=1
i=n+
n · (n + 1)
n2 − n
=
X
2
2
Wie viele Schritte müssen wir gehen, wenn n die Länge des Weges bis zum Ende des Gangs
ist?
1. Nach 2k Wiederholungen sind wir insgesamt
(1 − 2) + (3 − 4) + · · · + (2k − 1 − 2k) = −k
Schritte nach vorn, also k Schritte zurückgegangen.
2. Nach 2k + 1 Wiederholungen haben wir also k + 1 Schritte nach vorn geschafft.
3. Um den Gang zu verlassen, müssen wir insgesamt
1 + 2 + · · · + (2n − 2) + (2n − 1) =
(2n − 1) · 2n
= (2n − 1) · n
2
Schritte zurücklegen.
Bei quadratisch vielen Schritten werden wir mächtig erschöpft sein! Sind denn quadratisch
viele Schritte wirklich notwendig? Alles auf eine Karte zu setzen, also nur in eine Richtung zu
marschieren, ist Unfug. Aber können wir etwas mutiger sein, als immer nur einen weiteren
Schritt zu wagen?
• Zum Beispiel, einen Schritt nach vorn, zwei zurück, vier nach vorn, acht zurück, . . . ,
17
1. Grundlagen
• Wie viele Schritte brauchen wir diesmal?
Wir benötigen das folgende fundamentale Resultat über die geometrische Reihe. (Wir definieren
a0 := 1 für alle reellen Zahlen a ∈ R.)
Satz 1.2 (Die geometrische Reihe) Für alle n ∈ N gilt
n
X
ai =
i=0
eine reelle Zahl ist.
an+1 − 1
, falls a 6= 1
a−1
Beweis: Sei a ∈ R von der Zahl 1 verschieden. Wir geben wieder zwei Argumente und beginnen
mit der vollständigen Induktion nach n:
(a) Induktionsanfang für n = 0:
P0
i=0 a
i
= 1 und
a0+1 −1
a−1
= 1. X
(b) Induktionsschritt von n auf n + 1: Sei n ∈ N beliebig.
– Wir können die Induktionsannahme
–
Pn
i
i=0 a
=
an+1 −1
a−1
voraussetzen. Dann ist
Pn+1 i
Pn
n+1
n+2 −an+1
n+2
n+1
i
n+1 Ind.ann
= a a−1−1 X
= a a−1−1 + an+1 = a −1+a
i=0 a + a
i=0 a =
a−1
Auch hier ist unser zweites Argument ein direkter Beweis:
(a − 1) ·
Pn
i=0 a
i
= a · ni=0 ai − ni=0 ai
Pn+1 i Pn
i
n+1 − a0 = an+1 − 1 .
=
i=0 a = a
i=1 a −
P
P
Jetzt dividiere durch a − 1 und wir haben die Behauptung gezeigt. X
Der stockdunkle Gang: Vorher quadratisch viele Schritte, jetzt linear viele! Warum? Es gelte
2k−1 < n ≤ 2k . Nach höchstens 1 + 2 + · · · + 2k + 2k+1 + 2k+2 = 2k+3 − 1 ≤ 16 · n − 1 Schritten
haben wir den rettenden Ausgang erreicht.
Ende Beispiel 1.1
Beispiel 1.2 (Die Fibonacci-Folge)
Ein Bauer züchtet Kaninchen. Jedes weibliche Kaninchen bringt im Alter von zwei Monaten
ein weibliches Kaninchen zur Welt und danach jeden Monat ein weiteres. Wie viele weibliche
Kaninchen hat der Bauer am Ende des n-ten Monats, wenn er mit einem neu geborenen
weiblichen Kaninchen startet? Diese Anzahl bezeichnen wir mit fib(n).
Wie schnell wächst fib(n)? Können wir sogar einen expliziten Ausdruck für fib(n) bestimmen?
Um diese Fragen beantworten zu können, geben wir zuerst eine rekursive Definition, benutzen
also die Grundidee der vollständigen Induktion, um die Folge fib(n) besser zu verstehen.
• Rekursionsanfang für n = 1 und n = 2: Es ist fib(1) := 1 und fib(2) := 1.
• Rekursionsschritt von n − 1 und n nach n + 1: Es ist fib(n + 1) := fib(n) + fib(n − 1)
für alle n ∈ N mit n ≥ 2.
Warum? Genau die fib(n − 1) Kaninchen, die sich im Monat n − 1 im Besitz des Bauern
befinden, haben jeweils einen Nachkommen im Monat n + 1. Des Weiteren besitzt der
Bauer fib(n) Kaninchen im Monat n und diese Kaninchen bleiben auch im Monat n + 1
in seinem Besitz.
Somit gilt:
n
fib(n)
18
1
1
2
1
3
2
4
3
5
5
6
8
7
13
8
21
9
34
10
55
11
89
12
144
1.2. Was ist ein korrektes Argument?
Die Folge fib(n) wird auch Fibonacci-Folge genannt; sie ist benannt nach dem italienischen
Mathematiker Leonardo Fibonacci (13. Jh.). Die Zahl fib(n) heißt auch n-te Fibonacci-Zahl.
Wir zeigen, dass
2n/2 ≤ fib(n) ≤ 2n
für alle n ≥ 6 gilt.
Satz 1.5
(a) Für alle natürlichen Zahlen n ≥ 1 gilt fib(n) ≤ 2n .
(b) Für alle natürlichen Zahlen n ≥ 6 gilt 2n/2 ≤ fib(n).
Beweis: Wir zeigen Teil (a) durch Induktion nach n.
Induktionsanfang: Betrachte n = 1 und n = 2.
Behauptung: fib(1) ≤ 21 und fib(2) ≤ 22 .
Def.
Def.
Beweis: Es gilt: fib(1) = 1 ≤ 2 = 21 und fib(2) = 1 ≤ 4 = 22 . X
Induktionsschritt: n → n + 1
Sei n ∈ N mit n ≥ 2 beliebig.
Induktionsannahme: Für alle natürlichen Zahlen i mit 1 ≤ i ≤ n gilt fib(i) ≤ 2i .
Behauptung: fib(n + 1) ≤ 2n+1 .
Def.
Beweis: fib(n + 1) = fib(n) + fib(n − 1)
Ind.ann.
≤
2n + 2n−1 ≤ 2 · 2n = 2n+1 .
Analog zeigt man auch die Aussage in Teil (b). Allerdings muss man diesmal im Induktionsanfang 2n/2 ≤ fib(n) für n = 6 und n = 7 zeigen.
Aufgabe 2
Zeige: Für alle natürlichen Zahlen n ≥ 6 gilt 2n/2 ≤ fib(n).
Bemerkung 1.1 Es gibt auch einen expliziten Ausdruck für die n-te Fibonacci-Zahl. Für alle
n ∈ N mit n ≥ 1 gilt nämlich:
√ !n
√ !n !
1+ 5
1
1− 5
fib(n) = √ ·
−
.
(1.1)
2
2
5
Aufgabe 3
Zeige Darstellung (1.1) durch vollständige Induktion nach n.
Hinweis:
√
1+ 5
2
und
√
1− 5
2
erfüllen die quadratische Gleichung x2 = x + 1.
Aufgabe 4
Ein einfaches Polygon ist ein von einem geschlossenen, sich nicht schneidenden, Streckenzug begrenztes, ebenes
geometrisches Objekt. Hier ein Beispiel für ein einfaches Polygon G mit n = 8 Ecken.
r
r
cc
rhhhh
c
hhr
c
cr
r `
G
r
`
```
```
`r
19
1. Grundlagen
Wir möchten ein einfaches Polygon triangulieren, das heißt in disjunkte Dreiecke zerlegen. Dazu können nicht
überschneidende Diagonalen in das einfache Polygon eingefügt werden, wobei eine Diagonale eine im Polygon
verlaufende Strecke ist, die zwei Eckpunkte verbindet. Hier ist ein Beispiel einer möglichen Triangulation des
obigen einfachen Polygons:
r
r
Dcc
D
rhhhh
h
hr
D cc
cr
C D
r `
G
Dr
C
`
```
``` C `Cr
(a) Beweise, dass sich jedes einfache Polygon G mit n Ecken durch n − 3 Diagonalen triangulieren lässt
und, dass dabei n − 2 Dreiecke entstehen.
(b) Beschreibe für allgemeine Eckenzahl n ein einfaches Polygon, bei dem diese Zerlegung eindeutig ist, d.h.
jede Triangulierung besitzt dieselbe Menge von Diagonalen. Aus deiner Beschreibung soll erkennbar sein,
wie man für gegebenes n ein solches einfaches Polygon konstruiert. Argumentiere, warum die Zerlegung
deiner einfachen Polygone eindeutig ist.
Allerdings müssen induktive Beweise sorgfältig geführt werden. Wo steckt der Fehler in den
beiden folgenden Argumenten?
Aufgabe 5
(a) Wir zeigen, dass je zwei natürliche Zahlen a und b gleich sind. Dazu setzen wir k = max{a, b} und führen
eine Induktion nach k. Im Basisschritt haben wir k = 0 und deshalb ist a = 0 = b und das war zu zeigen.
Im Induktionsschritt ist max{a, b} = k + 1, und wir können die Induktionsbehauptung auf a − 1 und b − 1
anwenden, denn max{a − 1, b − 1} = k. Also ist a − 1 = b − 1 und die Behauptung a = b folgt.
(b) Wir zeigen, dass alle Pferde die gleiche Farbe besitzen und führen einen Beweis durch Induktion über die Zahl
k aller Pferde. Im Basisschritt ist k = 1 und die Behauptung ist offensichtlich richtig. Für den Induktionsschritt
nehmen wir an, dass es k + 1 Pferde p1 , . . . , pk+1 gibt. Dann haben aber nach Induktionsvoraussetzung sowohl
p1 , p2 , . . . , pk die Farbe von p2 wie auch p2 , . . . , pk+1 ebenfalls die Farbe von p2 : Wir haben die Behauptung
gezeigt.
Analyse rekursiver Programme
Wir untersuchen ein rekursives Programm R(~
p) (mit den Parametern p~) und legen eine Eingabe
x fest. Während der Abarbeitung von R(~
p) werden rekursive Aufrufe getätigt, die ihrerseits
weitere rekursive Aufrufe starten und so weiter. Der Rekursionsbaum B modelliert die Struktur
all dieser rekursiven Aufrufe. B wird nach den folgenden Regeln gebaut.
1. Beschrifte die Wurzel von B mit den Parametern p~ des Erstaufrufs.
p) keine rekursiven Aufrufe getätigt werden, dann wird die
• Wenn innerhalb von R(~
Wurzel zu einem Blatt.
• Ansonsten erhält die Wurzel für jeden rekursiven Aufruf innerhalb R(~
p) ein neues
Kind, das mit den Parametern des rekursiven Aufrufs beschriftet wird.
2. Wenn ein Knoten v von B mit den Parametern ~q beschriftet ist, gehen wir mit v genauso
wie mit der Wurzel vor.
• Wenn innerhalb von R(~q) keine rekursiven Aufrufe getätigt werden, wird v zu einem
Blatt.
• Ansonsten erhält v für jeden rekursiven Aufruf innerhalb von R(~q) ein neues Kind,
das mit den Parametern des rekursiven Aufrufs beschriftet wird.
20
1.2. Was ist ein korrektes Argument?
Die Anzahl der Knoten von B stimmt überein mit der Anzahl aller rekursiven Aufrufe für
Eingabe x.
Beispiel 1.3 (Berechnung der nten Fibonacci-Zahl)
Wir möchten die nte Fibonacci-Zahl fib(n) für eine natürliche Zahl n ≥ 1 berechnen und tun
dies mit zwei verschiedenen Algorithmen. Welcher Algorithmus ist schneller?
Algo1(n):
(a) Falls n = 1, dann gib Algo1(1) := 1 als Ergebnis zurück.
(b) Falls n = 2, dann gib Algo1(2) := 1 als Ergebnis zurück.
(c) Falls n ≥ 3, dann gib Algo1(n) := Algo1(n − 1) + Algo1(n − 2) als Ergebnis
zurück.
Wenn wir jede Addition, jeden Vergleich, und jedes Zurückgeben eines Ergebnisses als einen
Schritt zählen, dann benötigt dieser rekursive Algorithmus bei Eingabe einer Zahl n genau
g1 (n) Schritte, wobei
g1 (1) = 2
und
g1 (2) = 3
und
g1 (n) = 3 + g1 (n − 1) + g1 (n − 2) + 2
= 5 + g1 (n − 1) + g2 (n − 2) für alle n ∈ N mit n ≥ 3.
Ein anderer Algorithmus, der für eine natürliche Zahl n ≥ 1 den Wert fib(n) berechnet, ist:
Algo2(n):
(a) Falls n = 1 oder n = 2, dann gib 1 als Ergebnis zurück.
(b) Seien a0 := 0, a1 := 1 und a2 := 1.
(c) Wiederhole für alle i von 3 bis n:
(d)
Ersetze a0 durch a1 und a1 durch a2 .
(e)
Ersetze a2 durch a0 + a1 .
(f) Gib den Wert a2 als Ergebnis zurück.
Dieser Algorithmus benötigt bei Eingabe n ≥ 1 genau g2 (n) := 6 + 5 · (n − 2) Schritte. (Ähnlich
wie oben zählen wir jeden Vergleich, jedes Zurückgeben eines Werts und jedes Setzen eines
Werts als einen Schritt. Für jeden Schleifendurchlauf berechnen wir zusätzlich zwei Schritte,
um den Wert von i um eins zu erhöhen und zu testen, ob das Ergebnis kleiner oder gleich n
ist).
1. Frage: Welchen Algorithmus nehmen wir?
Offensichtlich gilt g1 (n) ≥ fib(n). Wir wissen aber schon aus Beispiel 1.2, dass fib(n) ≥ 2n/2
für n ≥ 6 gilt. Der elegante rekursive Algo1 besitzt eine exponentielle Laufzeit und ist absolut
gräßlich, während sein unscheinbarer Kollege Algo2 mit „linearer Laufzeit“ glänzt.
2. Frage: Wie sehen die Rekursionsbäume für Algo1 und Algo2 aus?
Der Rekursionsbaum für Algo1(n) ist ein markierter binärer Baum der wie folgt rekursiv
definiert ist. Die Rekursionsbäume für n = 1 und n = 2 bestehen nur aus einem einzigen
Knoten der jeweils mit „1“, bzw. „2“ markiert ist. Kennen wir die Rekursionsbäume Bn−2 für
n − 2 und Bn−1 für n − 1, dann erhalten wir den Rekursionsbaum Bn für n, indem wir die
21
1. Grundlagen
n
n−1
n−2
Bn−2
n−3
n−2
Bn−3
Bn−2
Abbildung 1.3.: Die rekursive Definition des Baums Bn
1
2
3
1 2
4
2
5
3
1 2
3
1 2 2
6
4
5
4
3
1 2
2
3
3
1 2 1 2 2
4
3
1 2
Abbildung 1.4.: Die „Fibonacci-Bäume“ B1 , B2 , B3 , B4 , B5 und B6 .
Wurzel r von Bn mit n markieren, die Wurzel von Bn−2 zum linken Kind und die Wurzel von
Bn−1 zum rechten Kind von r machen.
Der Baum Bn hat „beinahe“ die Graph-Struktur eines vollständigen Binärbaums, aber der
linke Baum Bn−2 ist nicht so tief wie der rechte Baum Bn−1 . Die Wurzel „berechnet“ fib(n),
das linke Kind fib(n − 2) und das rechte Kind fib(n − 1). Und jetzt wird auch offensichtlich
wie idiotisch sich Algo2 verhält, denn um fib(n − 1) im rechten Kind der Wurzel zu berechnen,
wird fib(n − 3) aber auch fib(n − 2) neu berechnet, obwohl fib(n − 2) im linken Kind der Wurzel
bereits berechnet wurde. Als ein weiteres Beispiel: Die Fibonacci-Zahl fib(2) tritt 5-mal in B6
auf!
Diesen Fehler macht Algo2 nicht, denn jede Fibonacci-Zahl wird genau einmal berechnet.
Algo2 ist ein iteratives Programm und besitzt deshalb natürlich keinen Rekursionsbaum,
seine Vorgehensweise wird aber am besten durch einen Weg n → n − 1 → n − 2 → · · · → 2
wiedergegeben. Dieser Weg ist nur ein „klitzekleiner“ Teilbaum von Bn , die restlichen Knoten
von Bn führen alle unnötige Neuberechnungen bereits bekannter Fibonacci-Zahlen durch.
Beispiel 1.4 (Binärsuche)
Ein Array A = (A[1], . . . , A[n]) von n Zahlen und eine Zahl x ist gegeben. Wir möchten wissen,
ob und wenn ja wo die Zahl x in A vorkommt.
Wenn A nicht sortiert ist, dann bleibt uns nichts anderes übrig als uns alle Zellen von A auf
der Suche nach x anzuschauen. Wir führen eine lineare Suche durch, die im schlimmsten
Fall alle n Zellen des Arrays inspizieren muss. Wenn das Array aber aufsteigend sortiert ist,
dann können wir Binärsuche anwenden.
void Binärsuche( int unten, int oben){
22
1.2. Was ist ein korrektes Argument?
if (oben < unten)
std::cout « x « “ wurde nicht gefunden.“
« std::endl;
int mitte = (unten+oben)/2;
if (A[mitte] == x)
std::cout « x « “ wurde in Position “ « mitte « “ gefunden.“ « std::endl;
else {
if (x < A[mitte])
Binärsuche(unten, mitte-1);
else
Binärsuche(mitte+1,oben);}}
1. Frage: Ist Binärsuche korrekt?
Es sei n = oben − unten + 1. Wir geben einen Beweis mit vollständiger Induktion nach n.
(a) Induktionsanfang für n = 0: Es ist n = oben − unten + 1 = 0 und oben < unten folgt.
In diesem Fall wird Binärsuche(unten, oben) richtigerweise mit der Antwort „x wurde
nicht gefunden“ abbrechen. X
(b) Induktionsschritt n → n + 1: Es ist oben − unten + 1 = n + 1. Wenn A(mitte) mit x
übereinstimmt, dann wird richtigerweise mit Erfolgsmeldung abgebrochen.
Ansonsten sucht Binärsuche richtigerweise in der linken Hälfte, wenn x < A[mitte],
und sonst in der rechten Hälfte. Die rekursive Suche in der linken bzw. rechten Hälfte
verläuft aber nach Induktionsannahme korrekt. X
Wir fordern n = 2k − 1 für eine Zahl k ∈ N. Sei T (n) die maximale Anzahl von Zellen, die
Binärsuche für ein sortiertes Array von n Zahlen inspiziert.
2. Frage: Wie groß ist T (n)?
Hier ist eine rekursive Definition von T (n):
(a) Rekursionsanfang: T (0) = 0.
(b) Rekursionsschritt: T (n) = T ( n−1
2 ) + 1.
2 −2
Wir haben n = 2k − 1 gefordert. Beachte, dass n−1
= 2k−1 − 1 gilt. Nach jedem
2 =
2
rekursiven Aufruf wird der Exponent k also um 1 erniedrigt und T (2k − 1) = k „sollte“ folgen.
Wir zeigen T (2k − 1) = k mit vollständiger Induktion nach k.
k
(a) Induktionsanfang: T (20 − 1) = T (0) = 0. X
(b) Induktionsschritt: T (2k+1 − 1) = T (2k − 1) + 1
Induktionsannahme
=
k + 1. X
Und was bedeutet das jetzt? Binärsuche muss höchstens k Zahlen inspizieren gegenüber bis zu
2k − 1 Zahlen für die lineare Suche: Die lineare Suche ist exponentiell langsamer als Binärsuche.
3. Frage: Wie sieht der Rekursionsbaum B für ein Array A und einen Schlüssel y aus, der
nicht in A vorkommt?
Wir nehmen wieder an, dass das Array A genau n = 2k − 1 Schlüssel für eine Zahl k ∈ N
besitzt. Beachte, dass ein Knoten von B entweder ein Blatt ist oder genau einen rekursiven
Aufruf verursacht. Der Rekursionsbaum B besitzt also den Aus-Grad Eins.
23
1. Grundlagen
Wir wissen bereits, dass Binärsuche im schlimmsten Fall k Zellen inspiziert. Da der Schlüssel
y nicht in A vorkommt, tritt der schlimmste Fall ein und es werden genau k Zellen inspiziert.
In jedem rekursiven Aufruf der Binärsuche wird nur eine Zelle des Arrays inspiziert, nämlich
die mittlere Zelle des Array-Abschnitts in dem gegenwärtig gesucht wird.
Der Rekursionsbaum B ist also ein markierter Weg der Länge k.
Binärsuche ist schnell, weil stets höchstens ein rekursiver Aufruf getätigt wird und weil die
Länge des Array-Abschnitts in dem gesucht wird, mindestens halbiert wird.
Beispiel 1.5 (Türme von Hanoi)
Wir haben drei Stäbe mit den Nummern 1, 2 und 3. Ursprünglich liegen N Ringe auf Stab 1,
wobei die Ringe in absteigender Größe auf dem Stab aufgereiht sind: Der größte Ring von
Stab 1 ist also der unterste Ring. Die Stäbe 2 und 3 sind zu Anfang leer.
In einem Zug können wir einen zuoberst liegenden Ring von einem Stab auf einen anderen
bewegen. Der Zug ist nur dann erlaubt, wenn der Ring auf einen größeren Ring gelegt wird
oder wenn der Stab leer ist. Alle Ringe sollen am Ende auf Stab 2 liegen.
Stab 1
Stab 2
Stab 3
Stab 1
Stab 2
Stab 3
Das folgende in Pseudocode geschriebene rekursive Programm soll dieses Ziel für N ≥ 1
erreichen.
void Hanoi( int N, int stab1, int stab2, int stab3)
// Annahmen: Auf allen Stäben sind die Ringe der Größe nach geordnet.
// Jeder der oberen N Ringe auf Stab „stab1“ passt auf Stab „stab2“ und „stab3“.
// Die Folge (stab1,stab2,stab3) ist eine Permutation der Zahlen 1,2 und 3.
{if (N==1)
bewege den obersten Ring von Stab „stab1“ nach Stab „stab2“;
else {
Hanoi(N-1,stab1,stab3,stab2);
bewege den obersten Ring von Stab „stab1“ nach Stab „stab2“;
Hanoi(N-1,stab3,stab2,stab1); }}
1. Frage: Ist Hanoi(N-1,stab1,stab2, stab3) korrekt?
Wir zeigen mit vollständiger Induktion nach N : Für jede Permutation (stab1,stab2,stab3) der
drei Stäbe wird „Hanoi (N, stab1, stab2, stab3)“ die obersten N Ringe von stab1 auf stab2
bewegen ohne andere Ringe anzufassen. Vorausgesetzt wird, dass jeder der obersten N Ringe
von stab1 auf die beiden anderen Stäbe passt.
Beachte, dass wir eine stärkere Aussage behaupten als auf den ersten Blick notwendig zu sein
scheint: Wir behaupten nämlich die Richtigkeit für alle(!) Permutationen der drei Stäbe. Diese
24
1.2. Was ist ein korrektes Argument?
verschärfte Behauptung ist auch notwendig, um Aussagen über die beiden rekursiven Aufrufe
machen zu können. Die Formulierung einer verschärften Aussage ist charakteristisch für viele
Induktionsbeweise.
Induktionsanfang für N = 1. Richtigerweise wird der eine zuoberst liegende Ring von
„stab1“ nach „stab2“ bewegt.
Induktionsschritt von N auf N + 1: Wir können in der Induktionsannahme voraussetzen,
dass „Hanoi(N, stab1, stab2,stab3)“ – für jede Permutation (stab1,stab2,stab3) der drei Stäbe
– die N obersten Ringe von „stab1“ nach „stab2“ bewegt ohne andere Ringe anzufassen.
Im ersten rekursiven Aufruf wird „Hanoi(N, stab1, stab3,stab2)“, nach Induktionsannahme,
die obersten N Ringe von „stab1“ nach „stab3“ bewegen. Der jetzt zuoberst liegende Ring
von „stab1“ wird auf „stab2“ gelegt: Nach Annahme passt dieser Ring auf „stab2“.
Da dieser Ring der größte der ursprünglichen N + 1 obersten Ringe von „stab1“ ist, passen
alle jetzt auf „stab3“ hinzu gepackten Ringe auf „stab1“ und „stab2“. Der zweite und letzte
rekursive Aufruf „Hanoi(N, stab3, stab2,stab1)“ wird deshalb nach Induktionsannahme alle
durch den ersten rekursiven Aufruf auf „stab3“ bewegten Ringe erfolgreich auf „stab2“ bewegen:
Damit liegen die ursprünglich obersten N + 1 Ringe von „stab1“ jetzt auf „stab2“.
2. Frage: Wie viele Ringbewegungen führt Hanoi(N-1,stab1,stab2, stab3) aus?
Sei T(N) die Anzahl der Ringbewegungen nach Aufruf des Programms Hanoi(N,stab1,stab2,stab3).
(Beachte, dass diese Anzahl nicht von der Permutation (stab1,stab2,stab3) abhängt.) Wir
geben eine rekursive Definition von T(N) an.
(a) Rekursionsanfang: Es ist T (1) = 1 und
(b) Rekursionsschritt: Es ist T (N ) = 2 · T (N − 1) + 1.
Und wie sieht ein expliziter Ausdruck für T (N ) aus? Es ist T (1) = 1, T (2) = 3, T (3) =
7, T (4) = 15 und das sieht ganz so aus als ob T (N ) = 2N − 1 gilt. Wir verifizieren unsere
Vermutung mit vollständiger Induktion nach N .
(a) Induktionsanfang für N = 1: Unser Programm bewegt einen Ring und 1 = 21 − 1. X
(b) Induktionsschritt von N auf N + 1: Wir können in der Induktionsannahme voraussetzen, dass T (N ) = 2N − 1 gilt. Dann folgt
T (N + 1) = 2 · T (N ) + 1
Ind.ann
=
2 · (2n − 1) + 1 = 2N +1 − 1
und das war zu zeigen. X
3. Frage: Wie sieht der Rekursionsbaum B für Hanoi(N,1,2,3) aus?
Es werden zwei rekursive Aufrufe mit dem Parameter N − 1 getätigt. Der Rekursionsbaum B
hat also die Graph-Struktur eines Binärbaums.
Mit vollständiger Induktion über N zeigt man, das B die Graph-Struktur eines vollständigen
Binärbaums der Höhe N − 1 besitzt: Trifft diese Aussage für die beiden rekursiven Aufrufe zu,
dann gilt sie auch für den „Master-Aufruf“. Die Anzahl der Ringbewegungen ist so groß, weil
für N > 1 stets zwei rekursive Aufrufe getätigt werden, wobei der Parameter N nur um Eins
reduziert wird:
B ist ein vollständiger Binärbaum der Höhe N − 1 und besitzt 2N +1 − 1 Knoten.
25
1. Grundlagen
1.3. Schatztruhe
Wir geben geschlossene Ausdrücke für Summen an und bestimmen die Größe häufig auftretender
Mengen.
1.3.1. Geschlossene Ausdrücke für Summen
Lemma 1.6 (Summenformeln) Für alle natürlichen Zahlen n ≥ 0 gilt:
(a)
(b)
(c)
n
X
i=0
n
X
i=0
n
X
i=
n · (n + 1)
2
i2 =
a =
i
i=0
(d)
∞
X
ai =
i=0
1
· n · (n + 1) · (2n + 1).
6
(
an+1 −1
a−1
n+1
falls a 6= 1
sonst
1
für eine reelle Zahl a mit −1 < a < 1.
1−a
Beweis: Teil (a) wird in Satz ?? und Teil (c) in Satz ?? gezeigt. Teil (d) folgt aus Teil (c), da
1
an+1 − 1
=
.
n→∞ a − 1
1−a
lim
Teil (c) zeigt man mit vollständiger Induktion nach n.
1.3.2. Größe von endlichen Mengen
Zur Erinnerung: Für eine endliche Menge M bezeichnen wir die Anzahl der Elemente von M
mit |M |. Seien A und B endliche Mengen. Dann gilt:
|A| = |B| ⇔ es gibt eine bijektive Funktion von A nach B.
Der Binomialkoeffizient
setzen wir
n
k
ist für natürliche Zahlen n, k mit 0 ≤ k ≤ n definiert und zwar
n
k
!
=
n!
,
k! · (n − k)!
wobei 0! := 1 und r! := 1 · 2 · · · r für alle natürlichen Zahlen r ≥ 1.
Binomialkoeffizienten treten im binomischen Lehrsatz beim
Ausmultiplizieren der Potenz
n
n
(a + b) auf. Des Weiteren werden wir gleich sehen, dass k mit der Anzahl von k-elementigen
Teilmengen einer n-elementigen Menge übereinstimmt.
Lemma 1.7 (Binomialkoeffizienten) Für alle natürlichen Zahlen n, k ∈ N mit k ≤ n gilt:
!
(a)
n
k
!
(b)
n
k
26
=
n−1
n−1
+
, falls k ≥ 1
k
k−1
=
n
n−k
!
!
!
und
1.3. Schatztruhe
(c)
n
k
!
=
n−1
n
falls k ≥ 1.
·
k
k−1
!
(d) Binomischer Lehrsatz: Es gilt
(a + b) =
n
n
X
k=0
!
n k n−k
a b
.
k
Beweis: Die Aussagen (a), (b) und (c) lassen sich mit einem direkten Beweis verifizieren. Der
binomische Lehrsatz kann mit vollständiger Induktion nach n gezeigt werden.
Aufgabe 6
Beweise den binomischen Lehrsatz. Nimm dazu die Teile (a), (b) und (c) aus Lemma 1.7 an.
Satz 1.8 Die Kardinalität wichtiger Mengen
(a) Sei M eine Menge von n Elementen.
1. M hat genau
n
k
Teilmengen der Größe k
2. und es ist |P(M )| = 2n , M hat also genau 2n Teilmengen.
(b) Sei k ∈ N>0 und seien M1 , . . . , Mk endliche Mengen. Dann gilt:
| M1 × · · · × Mk | =
k
Y
|Mi |.
i=1
(c) A und B seien endliche Mengen. Dann gibt es genau |B||A| Funktionen f : A → B:
|Abb(A, B)| = |B||A| .
Beweis: (a1) Ohne Beschränkung der Allgemeinheit nehmen wir S = {1, . . . , n} an und
führen einen Beweis durch vollständige Induktion nach n.
Für den Induktionsanfang n= 1 ist nur zu beobachten, dass es genau eine Menge mit keinen
Elementen gibt und es ist 10 = 1. Des Weiteren gibt es genau eine Menge mit einem Element,
nämlich die Menge selbst und es ist 11 = 1.
Für den Induktionsschritt unterscheiden wir, ob eine k-elementige Teilmenge T ⊆ S das
Element n enthält oder nicht. Wenn ja, dann ist T \ {n} eine (k − 1)-elementige
Teilmenge
n−1
von {1, . . . , n − 1} und nach Induktionsvoraussetzung gibt es genau k−1 (k − 1)-elementige
Teilmengen von {1, . . . , n − 1}. Wenn nein, dann verbleiben genau n−1
Teilmengen, denn wir
k
müssen die k-elementigen Teilmengen
von {1, . . . , n − 1} zählen. Die Behauptung folgt jetzt
n−1
n
aus Teil (b), denn es ist n−1
+
=
k−1
k
k .
(a2)
Wir wenden den binomischen Lehrsatz für a = b = 1 an und erhalten nk=0 nk = 2n . Aber
Pn
n
n
k=0 k ist
k stimmt überein mit der Anzahl der Teilmengen von M der Mächtigkeit k und
die Anzahl der Teilmengen von M .
P
(b) Wende vollständige Induktion nach k an.
(c) Wir konstruieren eine bijektive Funktion
b : Abb(A, B) → B |A| ,
27
1. Grundlagen
von der Menge aller Abbildungen f : A → B in das |A|-fache Potenz der Menge B: Definiere
nämlich b(f ) als die Funktionstabelle von f , die in „Position“ a ∈ A den Funktionswert f (a)
vermerkt. Funktionstabellen sind |A|-Tupel mit Komponenten in B, da für jedes Argument
a ∈ A der Funktionswert f (a) ∈ B vermerkt wird.
Warum ist b bijektiv? Weil Funktionstabellen nur eine andere Darstellung der Funktionen sind.
Die Behauptung folgt jetzt aus Teil (b).
Beispiel 1.6 (Die Fakultät) n Teilnehmer nehmen an einem Rennen teil. Wie viele verschiedene Reihenfolgen gibt es für den Zieleinlauf? Wir beschreiben die Anzahl
fak(n)
der verschiedenen Reihenfolgen mit einer rekursiven Definition.
• Rekursionsanfang für n = 1: Es ist fak(1) := 1.
• Wir überlegen uns zuerst, dass es bei n+1 Teilnehmern genau n+1 verschiedene Gewinner
des Rennens geben kann. Wenn wir aber den Gewinner kennen, dann gibt es genau
fak(n) verschiedene Reihenfolgen für den Zieleinlauf der verbleibenden n Teilnehmer.
Rekursionsschritt von n auf n + 1: Es ist fak(n + 1) := (n + 1) · fak(n).
Wir behaupten, dass
fak(n) = n · (n − 1) · (n − 2) · · · · · 2 · 1 =
n
Y
i
i=1
gilt und beweisen diese Behauptung mit vollständiger Induktion. Der Induktionsanfang für
n = 1 ist klar, denn nach Definition ist fak(1) = 1.
Der Induktionsschritt von n auf n + 1 ist auch klar, denn es ist fak(n) = n · (n −
1) · (n − 2) · · · · · 2 · 1 nach Induktionsannahme und die Behauptung fak(n + 1) =
(n + 1) · n · (n − 1) · (n − 2) · · · · · 2 · 1 folgt aus der Definition fak(n + 1) := (n + 1) · fak(n).
Notation: Die Funktion fak : N>0 → N wird Fakultät genannt. Meistens schreibt man n!
statt fak(n) und spricht n! als „n Fakultät“ aus.
Ende Beispiel 1.6
Definition 1.1 M sei eine endliche Mengen. Eine bijektive Funktion f : M → M wird auch
eine Permutation der Menge M genannt.
Wie viele Permutationen besitzt eine endliche Menge M ?
Satz 1.9 M, M1 , M2 seien Mengen mit n Elementen.
(a) Es gibt genau n! bijektive Funktionen f : M1 → M2 .
(b) Die Menge M besitzt genau n! Permutationen.
Wenn M1 die Menge der n Teilnehmer eines Rennens ist, dann entspricht eine bijektive Funktion
f : M1 → {1, . . . , n} einer möglichen Reihenfolge im Zieleinlauf. Teil (a) verallgemeinert also
unser Ergebnis über die Anzahl verschiedener Zieleinläufe. Beachte, dass auch Teil (b) eine
Konsequenz von Teil (a) ist, wenn wir nämlich M1 := M und M2 := M setzen.
28
1.4. Einige Grundlagen aus der Stochastik
Beweis: Wir können unsere Argumentation für die Anzahl der verschiedenen Reihenfolgen
beim Zieleinlauf übernehmen, denn die Anzahl b(n) der bijektiven Funktionen zwischen zwei
n-elementigen Mengen besitzt die rekursive Definition
b(1) := 1, b(n + 1) := (n + 1) · b(n)
und diese rekursive Definition stimmt mit der rekursiven Definition der Fakultät überein. Aufgabe 7
Ein Handlungsreisender muss jede von n Städten genau einmal besuchen. Gesucht ist eine Rundreise minimaler
Länge. Wie viele verschiedene Rundreisen gibt es?
1.4. Einige Grundlagen aus der Stochastik
Wir werden in dieser Vorlesung meistens die pessimistische Sicht des Worst-Case-Szenarios
analysieren. Das heißt, wir werden uns bei der Analyse von Lösungsstrategien fragen, was
schlimmstenfalls geschehen könnte. Manchmal verzerrt dieser Blick aber die wahren Gegebenheiten zu stark, und eine Betrachtung dessen, was man vernünftigerweise erwarten sollte, ist
geboten. Insbesondere verliert die Worst-Case-Analyse drastisch an Wert, wenn der Worst-Case
extrem unwahrscheinlich ist.
Eine kurze Wiederholung elementarer Begriffe der Stochastik ist daher angebracht. Wir
konzentrieren uns auf endliche Wahrscheinlichkeitsräume. Also ist eine endliche Menge
Ω von Elementarereignissen gegeben sowie eine Wahrscheinlichkeitsverteilung p, die
jedem Elementarereignis e ∈ Ω die Wahrscheinlichkeit p(e) zuweist. Des Weiteren muss
P
p(e) ≥ 0 für alle e ∈ Ω gelten. Ein Ereignis E ist eine Teilmenge von Ω
e∈Ω p(e) = 1 und
P
und prob[E] = e∈E p(e) ist die Wahrscheinlichkeit von E.
Beispiel 1.7 Wir wählen die Menge der 37 Fächer eines Roulettspiels als unsere Menge
von Elementarereignissen. Die Ereignisse gerade, ungerade, rot oder schwarz können dann
als Vereinigung von Elementarereignissen beschrieben werden. Die Wahrscheinlichkeit eines
solchen Ereignisses ergibt sich aus der Summe der jeweiligen Elementarereignisse.
Lemma 1.10 (Rechnen mit Wahrscheinlichkeiten) Seien A und B Ereignisse über dem
endlichen Wahrscheinlichkeitsraum Ω = {e1 , . . . , en } und sei p = (p1 , . . . , pn ) eine Wahrscheinlichkeitsverteilung.
(a) prob[A ∩ B] =
P
p(e). Insbesondere ist 0 ≤ prob[A ∩ B] ≤ min{prob[A], prob[B]}.
(b) prob[A ∪ B] =
P
p(e). Insbesondere ist
e∈A∩B
e∈A∪B
max{prob[A], prob[B]} ≤ prob[A ∪ B]
= prob[A] + prob[B] − prob[A ∩ B] ≤ prob[A] + prob[B].
(c) prob[¬A] =
e∈A
/ p(e)
P
= 1 − prob[A].
Erwartungswerte spielen bei der Analyse von erwarteten Laufzeiten eine zentrale Rolle. Die
allgemeine Definition ist wie folgt.
Definition 1.2 (a) Die Menge A ⊆ R sei gegeben. Eine Zufallsvariable X : Ω → A wird
durch eine Wahrscheinlichkeitsverteilung (q(a) : a ∈ A) spezifiziert. Wir sagen, dass q(a) die
Wahrscheinlichkeit des Ereignisses X = a ist.
29
1. Grundlagen
(b) Sei X eine Zufallsvariable und sei q(a) die Wahrscheinlichkeit für das Ereignis X = a.
Dann wird der Erwartungswert von X durch
E[X] =
X
a · q(a)
a∈A
definiert.
Die möglichen Ausgänge a der Zufallsvariable werden also mit ihrer Wahrscheinlichkeit gewichtet und addiert. Eine zentrale Eigenschaft des Erwartungswerts ist seine Additivität.
Lemma 1.11 Für alle Zufallsvariablen X und Y ist E[X + Y ] = E[X] + E[Y ].
Der Informationsgehalt eines Erwartungswertes hängt dabei vom konkreten Experiment
ab. Dass man bei einem handelsüblichen Würfel eine 3.5 erwartet ist eine wenig nützliche
Information. Dass der erwartete Gewinn bei einem Einsatz von 10 Euro auf rot am Roulettetisch
18
19
37 · 20Euro + 37 · 0Euro = 9.73Euro ist, hat dagegen die nützliche Botschaft: Finger weg.
Aufgabe 8
Wir betrachten die Menge Ω = {1, 2, . . . , n}. In einem ersten Experiment bestimmen wir eine Menge A ⊆ Ω,
indem wir jedes Element aus Ω mit Wahrscheinlichkeit pA in A aufnehmen. Wir wiederholen das Experiment
und bilden eine Menge B, wobei wir jedes Element aus Ω mit Wahrscheinlichkeit pB in B aufnehmen.
(a) Bestimme E(|A ∩ B|), den Erwartungswert der Mächtigkeit der Schnittmenge.
(b) Bestimme E(|A ∪ B|), den Erwartungswert der Mächtigkeit der Vereinigungsmenge.
Aufgabe 9
Wir spielen ein Spiel gegen einen Gegner. Der Gegner denkt sich zwei Zahlen aus und schreibt sie für uns nicht
sichtbar auf je einen Zettel. Wir wählen zufällig einen Zettel und lesen die darauf stehende Zahl. Sodann haben
wir die Möglichkeit, diese Zahl zu behalten oder sie gegen die uns unbekannt gebliebene Zahl zu tauschen. Sei x
die Zahl, die wir am Ende haben, und y die andere. Dann ist unser (möglicherweise negativer) Gewinn x − y.
- Wir betrachten Strategien St der Form „Gib Zahlen < t zurück und behalte diejenigen ≥ t“. Analysiere
den Erwartungswert Ex,y (Gewinn(St )) des Gewinns dieser Strategie in Abhängigkeit von t, x und y.
- Gib eine randomisierte Strategie an, die für beliebige x 6= y einen positiven erwarteten Gewinn für uns
aufweist.
Häufig untersuchen wir wiederholte Zufallsexperimente. Wenn die Wiederholungen unabhängig
voneinander sind, hilft die Binomialverteilung weiter.
Lemma 1.12 (Binomialverteilung) Sei A ein Ereignis, welches mit Wahrscheinlichkeit p
auftritt. Wir führen n Wiederholungen des betreffenden Experimentes durch und zählen, wie
häufig ein Erfolg eintritt, das heißt wie häufig A eingetreten ist. Die Zufallsvariable X möge
genau dann den Wert k annehmen, wenn k Erfolge vorliegen.
(a) Die Wahrscheinlichkeit für k Erfolge ist gegeben durch
prob[X = k] =
!
n
· pk · (1 − p)n−k .
k
(b) Die Wahrscheinlichkeit, dass die Anzahl der Erfolge im Intervall [a, b] liegt ist also
prob[X ∈ [a, b] ] =
b
X
k=a
30
!
n
· pk · (1 − p)n−k .
k
1.5. Literatur
(c) E[X] = n · p ist die erwartete Anzahl der Erfolge.
Damit haben wir den Erwartungswert einer binomialverteilten Zufallsvariable berechnet.
Zufallsvariablen mit prinzipiell unendlich vielen Ausgängen werden uns zum Beispiel immer
dann begegnen, wenn wir uns fragen, wie lange man auf das Eintreten eines bestimmten
Ereignisses warten muss. Warten wir zum Beispiel am Roulettetisch auf die erste 0 des
Abends, so gibt es keine Anzahl von Runden, so dass die erste 0 innerhalb dieser Rundenzahl
gefallen sein muss. Natürlich wird aber anhaltendes Ausbleiben immer unwahrscheinlicher und
deswegen ergibt sich trotzdem ein endlicher Erwartungswert. Wir haben damit die geometrische
Verteilung beschrieben.
Lemma 1.13 (geometrische Verteilung) Sei A ein Ereignis mit Wahrscheinlichkeit p.
Die Zufallsvariable X beschreibe die Anzahl der Wiederholungen des Experimentes bis zum
ersten Eintreten von A.
(a) Die Wahrscheinlichkeit, dass X den Wert k annimmt ist
prob[X = k] = (1 − p)k−1 · p.
(b) Der Erwartungswert ist E(X) = p1 .
Aufgabe 10
Wir nehmen in einem Casino an einem Spiel mit Gewinnwahrscheinlichkeit p = 1/2 teil. Wir können einen
beliebigen Betrag einsetzen. Geht das Spiel zu unseren Gunsten aus, erhalten wir den Einsatz zurück und
zusätzlich denselben Betrag aus der Bank. Endet das Spiel ungünstig, verfällt unser Einsatz. Wir betrachten
die folgende Strategie:
i:=0
REPEAT
setze 2i $
i:=i+1
UNTIL(ich gewinne zum ersten mal)
Bestimme den erwarteten Gewinn dieser Strategie und die erwartete notwendige Liquidität (also den Geldbetrag,
den man zur Verfügung haben muss, um diese Strategie ausführen zu können).
1.5. Literatur
Die folgenden Textbücher sind besonders empfehlenswert.
- M. Sipser, Introduction to the Theory of Computation, Paperback 3rd edition, Cengage
Learning, 2012.
- U. Schöning, Theoretische Informatik - kurzgefasst, Spektrum 2008.
- Sanjeev Arora und Boaz Barak, Computational Complexity, a modern approach, Cambridge University Press 2009.
- I. Wegener, Theoretische Informatik: Eine algorithmenorientierte Einführung, B.G. Teubner 1999 (2. Auflage).
- J. Shallit, A second course in Formal Languages and Automata Theory, Cambridge
University Press, 2008.
- J.E. Hopcroft, J.D. Ullman, R. Motwani, Introduction to Automata Theory, Languages
and Computation, Addison-Wesley, 2013.
31
1. Grundlagen
Die Inhalte der Veranstaltungen „Diskrete Modellierung“, „Datenstrukturen“ und Theoretische
Informatik 1“ werden in den folgenden Skripten behandelt. Bitte jeweils die aktuelle Version
benutzen.
- G. Schnitger, Diskrete Modellierung, eine Einführung in grundlegende Begriffe und Methoden
der Theoretischen Infomatik. (Dieses Skript baut auf einem Skript von N. Schweikardt auf.)
- G. Schnitger, Datenstrukturen.
- G. Schnitger, Theoretische Informatik 1.
32
2. Komplexitäts- und Sprachklassen
2.1. Worte und Sprachen
An der Lösung welcher Probleme sollten wir interessiert sein? Wir formalisieren den Begriff
eines Problems durch den Begriff einer Sprache.
Definition 2.1 (Alphabete, Worte und Sprachen)
(a) Ein Alphabet Σ ist eine endliche, nicht-leere Menge. Die Elemente von Σ werden
Buchstaben genannt.
(b) Ein Wort w über Σ ist ein Tupel w = (a1 , . . . , am ). Wir sagen, dass w die Länge |w| = m
besitzt. Wir schreiben im folgenden a1 · · · an statt (a1 , . . . , an ).
(c) Das leere Wort () bezeichnen wir mit .
(d) Σn = {(a1 , . . . , an ) | ai ∈ Σ} ist die Menge aller Worte der Länge n über Σ. Dementsprechend besteht Σ0 = {} nur aus dem leeren Wort.
Σ∗ =
∞
[
Σn
n=0
ist die Menge aller Worte über dem Alphabet Σ,
Σ+ =
∞
[
Σn
n=1
ist die Menge aller nicht-leeren Worte über Σ.
(e) Eine Sprache L (über Σ) ist eine Teilmenge von Σ∗ .
Als nächstes besprechen wir die wichtigsten Begriffe im Umgang mit Sprachen.
Definition 2.2 Sei Σ ein Alphabet, u und v seien Worte über Σ.
(a) Es sei u = u1 · · · un und v = v1 · · · vm . Dann bezeichnet
u · v = u1 · · · un · v1 · · · vm
die Konkatenation von u und v. (Beachte, dass u · = · u = u). Wir schreiben auch
uv statt u · v.
(b) u heißt genau dann ein Teilwort von v wenn es Worte u1 und u2 über Σ gibt mit
v = u1 u u2 .
(c) u heißt genau dann Präfix von v wenn es ein Wort u1 über Σ mitv = u u1 gibt.
u heißt genau dann ein Suffix, wenn es ein Wort u1 über Σ mit v = u1 u gibt.
33
2. Komplexitäts- und Sprachklassen
(d) Für Sprachen L1 , L2 über Σ bezeichnet
L1 ◦ L2 = {uv | u ∈ L1 , v ∈ L2 }
die Konkatenation von L1 und L2 .
(e) Für eine Sprache L über Σ ist
Ln = {u1 · · · un | u1 , . . . , un sind Worte der Sprache L}
L∗ =
L+ =
∞
[
n=0
∞
[
Ln
(mit L0 = {})
Ln .
n=1
L∗ heißt die Kleene Hülle von L.
Aufgabe 11
Seien A, B ⊆ Σ∗ Sprachen. Zeigen Sie: X := A∗ · B ist eine unter Inklusion kleinste Sprache, die die „lineare
Gleichung“ X = AX ∪ B löst. Darüber hinaus ist diese Lösung eindeutig, wenn das leere Wort nicht in A
vorkommt.
Die Operationen bieten die Möglichkeit, Sprachen kompakt zu beschreiben.
Beispiel 2.1
(a) {A, B, C, D, E, F, G, H}◦{1, 2, 3, 4, 5, 6, 7, 8} ist die Menge aller Felder eines Schachbretts.
(b) {♣, ♦, ♥, ♠} ◦ {7, 8, 9, 10, Bube, Dame, K önig, Ass} ist die Menge der Karten eines
Skatblatts.
(c) {1} ◦ {0, 1}∗ ist die Menge der Binärdarstellungen der natürlichen Zahlen größer Null.
(d)
4
S
{·, −}i ist die Menge der Morsezeichen für die 26 Buchstaben, ä, ö, ü und ch.
i=1
(e) ({2} ◦ {0, 1, 2, 3} ∪ {, 1} ◦ {0, 1, . . . , 9}) ◦ {:} ◦ {0, 1, . . . , 5} ◦ {0, 1, . . . , 9} ist die Menge
der Uhrzeiten eines Tages.
(f) ({1} ◦ {0, 1, 2} ∪ {1, . . . , 9}) ◦ {:} ◦ {0, 1, . . . , 5} ◦ {0, 1, . . . , 9} ◦ {am, pm} ist die amerikanische Entsprechung.
Als nächstes spielen wir ein wenig mit der Konkatenation und mit dem Sternoperator, also
mit der Kleene Hülle.
Beispiel 2.2 Wir behaupten, dass das Wort abcd ein Element der Sprache
({a}∗ ◦ {b}∗ ◦ {d}∗ ◦ {c}∗ )∗ = L
ist. Dazu betrachten wir zuerst die Sprache
K = {a}∗ ◦ {b}∗ ◦ {d}∗ ◦ {c}∗ .
Dann ist
34
K = {an bm dk cl | n, m, k, l ∈ N}
2.1. Worte und Sprachen
und das Wort abcd gehört nicht zu K. Beachte aber, dass
L = K∗
und
abcd ∈ K 2 ,
denn abc ∈ K und d ∈ K. Somit ist also abcd ∈ L. Die Sprache L können wir aber einfacher
charakterisieren. Wir behaupten nämlich, dass
L = {a, b, c, d}∗ .
Wir zeigen zuerst L ⊆ {a, b, c, d}∗ . Dies ist offensichtlich, da L nur aus Worten über dem
Alphabet {a, b, c, d} besteht, und da {a, b, c, d}∗ die Menge aller Worte über {a, b, c, d} ist.
Zuletzt ist die umgekehrte Inklusion
{a, b, c, d}∗ ⊆ L
nachzuweisen. Sei w ein beliebiges Wort über dem Alphabet {a, b, c, d}. Wir müssen zeigen,
dass w auch ein Element von L ist. Wenn w = w1 · · · wn mit w1 , . . . , wn ∈ {a, b, c, d}, dann ist
natürlich w1 , . . . , wn ∈ K: jeder Buchstabe von w gehört zur Sprache K. Dann muß aber
w1 · · · wn ∈ K n
gelten und somit ist w = w1 · · · wn ∈ L.
Einige Sprachen L lassen sich rekursiv wie folgt definieren: L ist die kleinste Menge von Worten
über dem Alphabet Σ mit den Eigenschaften
(a) Worte w1 , . . . , wk ∈ Σ∗ gehören zu L.
(b) Wenn u1 , . . . , us zu L gehören, dann gehören auch bestimmte weitere, aus u1 , . . . , us
aufgebaute Worte zu L.
Hier ist ein erstes Beispiel.
Beispiel 2.3 Die Sprache L sei die kleinste Sprache über dem Alphabet Σ = {0, 1} mit den
folgenden Eigenschaften
(a) ∈ L
(b) wenn u ∈ L, dann 0u ∈ L und u1 ∈ L.
Wie sieht L aus? Wir geben eine einfache, nicht rekursive Beschreibung, nämlich
L = {0}∗ {1}∗ .
Beweis: Erst zeigen wir {0}∗ {1}∗ ⊆ L. Sei w ∈ {0}∗ {1}∗ und demgemäß w = 0n 1m . Wir
wissen, dass ∈ L und deshalb ist
0 · , 0 · 0 · , . . . , 0n · ∈ L.
Mit 0n = 0n ist aber auch
0n · 1, 0n · 1 · 1, · · · , 0n 1m ∈ L,
und deshalb ist w ∈ L.
Es bleibt zu zeigen, dass L ⊆ {0}∗ {1}∗ . Dazu genügt es zu bemerken, dass die Sprache
{0}∗ {1}∗ die Eigenschaften (1) und (2) in der Definition von L erfüllt. (Warum ist dies
ausreichend? L ist die kleinste Sprache mit den Eigenschaften (1) und (2)!).
35
2. Komplexitäts- und Sprachklassen
Aufgabe 12
Im Folgenden geben wir rekursive Definitionen von Sprachen an. In jedem Fall ist die gesuchte Sprache L die
kleinste Menge von Worten über dem Alphabet Σ = {a, b} mit den angegebenen Eigenschaften. Beschreibe
jeweils L umgangssprachlich und verifiziere deine Antwort mit vollständiger Induktion.
(a) Es gilt ∈ L. Wenn u ∈ L, dann au, ua, bub ∈ L.
(b) Es gilt ∈ L. Wenn u1 u2 ∈ L, dann auch u1 abu2 ∈ L und u1 bau2 ∈ L.
(c) Es gilt ∈ L. Wenn u ∈ L, dann aua, bub ∈ L.
(d) Es gilt ∈ L. Wenn u, v ∈ L, dann u · v ∈ L und (u) ∈ L.
2.1.1. Das Wortproblem
Das Wortproblem für eine Sprache L ist denkbar einfach zu beschreiben:
Es ist zu entscheiden, ob ein gegebenes Wort w in L liegt.
Das Wortproblem hat viele Anwendungen, alle algorithmischen Entscheidungsprobleme lassen
sich zum Beispiel als Wortprobleme auffassen.
Die Lösung des Wortproblems für L besteht in der Angabe eines möglichst effizienten Algorithmus. Dass das Wortproblem im Schwierigkeitsgrad stark schwankt, ist schnell überlegt.
Beispiel 2.4 Das Wortproblem für die Sprache
L = { Frühling, Sommer, Herbst, Winter }
ist leicht, da zu jedem Wort w schnell festgestellt werden kann, ob es eines der vier enthaltenen
ist.
Beispiel 2.5 Nehmen wir als anderes Beispiel die Sprache L, die über dem ASCII Zeichensatz
als Alphabet Σ definiert sei und alle syntaktisch korrekten C-Programme enthalten soll, die
für jede Eingabe halten. Wie ist es mit diesem Kandidaten w:
main(int n)
int i;
{
i=n;
while(NOT(prim(i)&&prim(i+2)))
i++;
}
boolean prim(int n)
int i;
{
for(i=2;i<n;i++)
if(n % i == 0) return(false);
return(true);
}
Was tut dieses Programm? Es beginnt bei der Zahl n aufsteigend nach Primzahlzwillingen zu
suchen und hört nur auf, wenn es fündig wird. Die Frage, ob dieses Programm w in unsere
Sprache L gehört, ist also gleichbedeutend mit der Frage, ob es unendlich viele Primzahlzwillinge
gibt. Das Programm hält nämlich genau dann für Eingabe n, wenn es zu n ein Paar von
größeren Primzahlzwillingen gibt. Ob das so ist, ist ein offenes Forschungsproblem.
36
2.1. Worte und Sprachen
Beispiel 2.6 Einen ungerichteten Graphen G = (V, E) können wir durch seine Adjazenzmatrix
repräsentieren. Die Adjazenzmatrix wiederum lässt sich durch zeilenweises Hintereinandersetzen
als ein binärer String auffassen. Wir können damit das Problem der Hamiltonschen Kreise
formulieren:
L = {w ∈ {0, 1}∗ | w beschreibt einen Graphen mit Hamiltonischen Kreis}
Das Wortproblem wird so zum Entscheidungsproblem „Hat ein durch seine Kodierung gegebener
Graph einen Hamiltonischen Kreis, also einen Kreis, der jeden Knoten genau einmal durchläuft?“
(a) Das Wort w1 = 0011001111001100 gehört zur Sprache L, da das Wort den Graphen
1
2
Q
Q Q
Q
Q
Q
3
4
beschreibt, der einen Hamiltonischen Kreis besitzt.
(b) Das Wort w2 = 0011001011011010 gehört nicht zur Sprache L, da das Wort den Graphen
1
c
#
c #
#
c
# c
#
c
3
2
4
beschreibt, der keinen Hamiltonischen Kreis besitzt.
(c) Das Wort w3 = 0010101101 gehört nicht zur Sprache L, da das Wort keinen Graphen
beschreibt: |w3 | ist keine Quadratzahl.
(d) Das Wort w4 = 0001000000000000 gehört nicht zur Sprache L, da der String keiner
Adjazenzmatrix entspricht.
Beispiel 2.7 Wir können über dem Alphabet Σ = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, } Folgen natürlicher
Zahlen, durch getrennt, kodieren. So können wir die Sprache
w beschreibt eine Zahlenfolge, so dass eine
∗
L = w ∈ Σ aufsteigende Teilfolge existiert, die mindestens


halb so lang ist wie die Gesamtfolge








definieren.
(a) Das Wort w1 = 9 15 21 4 11 gehört zur Sprache L, da die Zahlenfolge 9,15,21,4,11
repräsentiert wird, und die Teilfolge 9,15,21 mindestens halb so lang ist wie die Gesamtfolge.
(b) Das Wort w2 = 17 10 21 5 19 gehört nicht zur Sprache L, da die repräsentierte
Zahlenfolge 17, 10, 21, 5, 19 keine aufsteigende Teilfolge mit Länge größer als 2 besitzt.
(c) Das Wort w3 = 005 33 gehört nicht zur Sprache, da es keine Zahlenfolge kodiert.
Die Komplexitätstheorie beschäftigt sich mit der Frage, welche Ressourcen ein Algorithmus
benötigt, der ein vorgelegtes Entscheidungsproblem lösen soll.
37
2. Komplexitäts- und Sprachklassen
- Das Problem des Hamiltonischen Kreises (siehe Beispiel 2.6) gehört zu den NP-vollständigen Problemen. In der Veranstaltung „Theoretische Informatik 1“ wird gezeigt, dass
die Existenz eines effizienten Algorithmus, also eines Algorithmus mit polynomieller
Laufzeit, für irgendein NP-vollständiges Problem eine Sensation darstellen würde.
- Das Zahlenfolgenproblem (siehe Beispiel 2.7) kann mit dynamischer Programmierung in
polynomieller Zeit gelöst werden. Das Zahlenfolgenproblem liegt damit in der Klasse P,
der in polynomieller Zeit lösbaren Entscheidungsprobleme.
- Die Frage, ob ein C-Programm immer hält, ist nicht entscheidbar, kann also selbst
durch Algorithmen ohne Zeitbeschränkung nicht gelöst werden. Diese absolute Grenze
algorithmischer Berechnungskraft wird in der „Theoretischen Informatik 1“ nachgewiesen.
Das Wortproblem hat auch Implikationen über Entscheidungsprobleme, wie die hier dargestellten, hinaus. Das aus der „Theoretischen Informatik 1“ bekannte Rucksackproblem ist
zum Beispiel ein Optimierungsproblem. Die Frage ist, wieviel Wert kann in einem Rucksack
transportiert werden, wenn n Objekte mit den Einzelwerten w1 , w2 , . . . , wn und den Gewichten
g1 , . . . , gn zur Verfügung stehen, die ganz oder gar nicht mitgenommen werden können, und die
Kapazität C nicht überschritten werden darf. In dieser Formulierung ist die Antwort offenbar
nicht Ja oder Nein, sondern eine Zahl, nämlich der Wert einer optimalen Bepackung.
Zur Formulierung als Entscheidungsproblem führen wir noch einen Sollwert S ein. Die Frage
lautet nun, ob bei gegebenen Objekten und gegebener Kapazität der Wert S erreicht oder
übertroffen werden kann. Nun haben wir ein Entscheidungsproblem, dessen Instanzen wir in
eine Zeichenkette kodieren können. Etwa:
w1 g1 w2 g2 . . . wn gn C S
Nehmen wir nun an, wir könnten dieses Wortproblem in Zeit f (n) lösen, so können wir wie
folgt vorgehen, um das Ausgangsproblem zu lösen.
1. Setze l auf 0 und r auf die Summe aller Werte.
2. Solange l < r
a) Setze m = d(l + r)/2e.
b) Löse die Entscheidungsversion mit S = m.
c) Falls Antwort positiv, setze l = m anderenfalls r = m − 1.
3. Gib l als Lösung aus.
Eine simple Binärsuche löst also das Optimierungsproblem mit Hilfe des Entscheidungsproblems. Wie lange dauert die Suche? Wenn W die Summe aller Werte ist, dann wird die
Schleife höchstens O(log2 (W )) mal durchlaufen. Der Aufwand innerhalb einer Iteration ist im
wesentlichen der Aufwand des Entscheidungsproblems und wir erhalten
O(f (n) · log2 W )
als Gesamtlaufzeit, denn wir haben angenommen, dass sich das Wortproblem in Zeit f (n)
lösen lässt. Man beachte, dass log2 W aber nicht größer als die Länge der Binärdarstellungen
der Werte und somit ist log2 W nicht größer als die Eingabelänge n.
Interessieren wir uns also nur dafür, ob ein Optimierungsproblem in polynomieller Zeit gelöst
werden kann oder nicht, so wird uns die Entscheidungsversion bereits die richtige Antwort
liefern. In den Übungen werden wir sehen, dass auch das Problem des Auffindens der optimalen Bepackung selbst – im Gegensatz zum Wert – in derselben komplexitätstheoretischen
Preisklasse anzusiedeln ist.
38
2.2. Turingmaschinen und die Churchsche These
2.2. Turingmaschinen und die Churchsche These
Was genau ist ein Rechner? Betrachten wir die wesentlichen Anforderungen an ein vernünftiges
Rechnermodell:
Ein Rechner muss jderzeit auf die Eingabe zugreifen können und Rechnungen ohne
Beschränkung von Rechenzeit und Speicherplatz ausführen können.
Natürlich ist nicht klar, was es heißt „Rechnungen ausführen zu können“: Wir führen deshalb
zur Formalisierung ein sehr einfaches Rechnermodell, nämlich die Turingmaschine ein.
Eine (1-Band) Turingmaschine besitzt ein nach links und nach rechts unendliches, lineares
Band, das in Zellen unterteilt ist; die Zellen besitzen Zahlen aus Z als Adressen. Anfänglich ist
die Eingabe w = w1 · · · wn in den Zellen mit den Adressen 1 . . . , n abgelegt, wobei Zelle i (mit
1 ≤ i ≤ n) den Buchstaben wi speichert; alle verbleibenden Zellen speichern das Blanksymbol
B. Die Turingmaschine manipuliert ihr Band mit Hilfe eines Lese-/Schreibkopfes, der sich zu
Beginn der Rechnung auf der Zelle 1 befindet. Während zu Anfang also alle Buchstaben entweder
aus dem Eingabealphabet Σ stammen oder mit dem Blanksymbol übereinstimmen, darf die
Turingmaschine im Verlauf der Rechnung Zellen mit Buchstaben eines Arbeitsalphabets Γ
mit Σ ∪ {B} ⊆ Γ beschriften.
Wie rechnet eine Turingmaschine? Das Programm einer Turingmaschine wird durch eine
Zustandsüberführungsfunktion δ mit
δ : Q × Γ → Q × Γ × {links, bleib, rechts}
beschrieben. Die endliche Menge Q heißt Zustandsmenge, wobei wir annehmen, dass die
Maschine im Anfangszustand q0 ∈ Q startet. Wenn sich die Maschine im Zustand q ∈ Q
befindet und den Buchstaben γ ∈ Γ liest, dann ist der „Befehl“ δ(q, γ) anzuwenden. Falls
δ(q, γ) = (q 0 , γ 0 , Richtung)
gilt, dann wird γ 0 gedruckt (und damit wird γ überdruckt), die Maschine wechselt in den
Zustand q 0 und der Kopf wechselt zur linken Nachbarzelle (Richtung = links), zur rechten
Nachbarzelle (Richtung = rechts) oder bleibt stehen (Richtung = bleib).
Wir sagen, dass die Maschine hält, wenn sie „auf der Stelle tritt“, d.h. wenn sich die Maschine
im Zustand q ∈ Q befindet, den Buchstaben γ ∈ Γ liest und wenn δ(q, γ) = (q, γ, bleib) gilt.
Schließlich zeichnen wir eine Teilmenge F ⊆ Q als Menge der akzeptierenden Zustände
aus und sagen, dass die Maschine die Eingabe w akzeptiert, wenn sie in einem Zustand aus F
hält.
Zusammengefaßt: Eine Turingmaschine M wird durch das 6-Tupel
M = (Σ, Γ, Q, δ, q0 , F)
beschrieben. Wir sagen, dass die Turingmaschine M die Sprache
L(M ) = {w | M akzeptiert w}
akzeptiert. Schließlich messen wir die Laufzeit und definieren timeM (w) als die Anzahl der
Schritte von M auf Eingabe w ∈ Σ∗ . Die worst-case Laufzeit von M auf Eingaben der Länge
n ist dann
timeM (n) = max {timeM (w) | w ∈ Σn } .
39
2. Komplexitäts- und Sprachklassen
Polynomialzeit
Ist uns eine wirklich überzeugende Definition eines Rechnermodells gelungen? Der erste
Eindruck ist negativ, denn eine Turingmaschine erinnert eher an eine Nähmaschine als an
die Modellierung eines modernen Rechners. Tatsächlich können Nähmaschinen modernste
Rechner und sogar Parallelrechner ohne Probleme simulieren können, solange die Rechenzeit
der Nähmaschine polynomiell größer sein darf als die Rechenzeit des simulierten Rechners.
Diese Aussage setzt aber voraus, dass wir von deterministischen Rechnern reden, also von
Rechnern für die die nächste auszuführende Anweisung durch die gegenwärtige Konfiguration
von Befehlszähler und Speicherinhalt bestimmt ist.
So ist es bis heute nicht klar, ob deterministische Turingmaschinen in Polynomial-Zeit probabilistische Rechner simulieren können, obwohl vieles dafür spricht, wenn nur mit einem
kleinen Fehler gerechnet werden darf. Auf der anderen Seite ist es auch „wahrscheinlich“, dass
Quanten-Turingmaschinen in Polynomialzeit mächtiger als deterministische Turingmaschinen
in Polynomialzeit sind.
Der Berechnungsmodus, also Determinismus, Nichtdeterminismus, Probabilismus oder
Quantenberechnungen „macht den Unterschied aus“, nicht aber die auf den ersten Blick eher
mickrige Architektur einer Turingmaschine, die es tatsächlich nach polynomiellem Mehraufwand
mit den mächtigsten modernen Architekturen aufnehmen kann.
Wir benutzen deshalb Turingmaschinen in Abschnitt 2.3.2, um die von modernen Rechnern
benötigte Zeit „innerhalb eines Polynoms“ verlässlich vorauszusagen.
Die Churchsche These
Hängt die Klasse der von einem Rechnertyp lösbaren Probleme von dem benutzten Berechnungsmodus ab? Natürlich kann man eine solche Frage erst dann abschließend beantworten,
wenn es klar ist welche Berechnungsmodi in Frage kommen. Allerdings spricht vieles dafür, dass
jeder „vernünftige“ Berechnungsmodus von deterministisch arbeitenden Turingmaschinen simulierbar ist, solange die Berechnungsressourcen „Zeit“ und „Speicherplatz“ nicht eingeschränkt
werden.
Genau dies besagt die Churchsche These: Die Klasse der von einem vernünftigen Rechnermodell lösbaren Probleme stimmt überein mit der Klasse der Probleme, die durch deterministische
Turingmaschinen lösbar sind.
Ist die Churchsche These wahr, und dies wird man nie bestätigen, möglicherweise aber widerlegen können, dann hat man den Begriff eines „algorithmisch lösbaren Problems“ ein und für
alle Mal, ohne Bezug auf irgendwelche Rechnergenerationen, festzurren können. Toll, nicht
wahr?
Algorithmisch lösbare Probleme nennt man entscheidbar, nicht lösbare Probleme heißen
unentscheidbar.
Definition 2.3 Eine Sprache L heißt entscheidbar, wenn es eine stets haltende Turingmaschine M gibt mit
L = L(M ).
Eine nicht entscheidbare Sprache heißt unentscheidbar.
hM i bezeichne eine „leicht kodierbare“ Beschreibung einer Turingmaschine M als binäres
Wort. Dann werden die folgenden Sprachen in der Vorlesung „Theoretische Informatik 1“ als
40
2.3. Sprachklassen
unentscheidbar nachgewiesen:
Das Halteproblem := { hM iw : M hält für Eingabe w }
die universelle Sprache := { hM iw : M akzeptiert Eingabe w }.
Wir lernen weitere unentscheidbare Probleme als Konsequenz des Postschen Korrespondenzproblems kennen (siehe Abschnitt 4.5.1): Satz 4.15 nennt unentscheidbare Probleme im
Zusammenhang mit kontextfreien Grammatiken, in Korollar 4.16 wird die Unentscheidbarkeit
des Äquivalenzproblems für Finite State Transducer abgeleitet.
2.3. Sprachklassen
Wir können die Schwierigkeit des Wortproblems natürlich nicht für jede betrachtete Sprache
L individuell analysieren. Wir werden uns stattdessen im ersten Teil der Vorlesung auf
„formale Sprachen“ und insbesondere auf reguläre und kontextfreie Sprachen beschränken.
Diese Sprachklassen sind syntaktisch durch Grammatiken, bzw. durch besonders einfache
Rechnermodelle charakterisierbar. Das Wortproblem wird uns als so genanntes Compilerproblem
begegnen: Ist eine vorgelegte Zeichenkette ein syntaktisch korrektes Programm und was ist
die Bedeutung dieses Programms?
Im zweiten Teil betrachten wir Sprach- oder Problemklassen zu deren Lösung ein bestimmter Ressourcenverbrauch ausreichend ist. Nachdem wir in der „Theoretischen Informatik 1“
Laufzeitklassen wir Pund NPuntersucht haben, beschränken wir uns hier vor allem auf den
Speicherplatzverbrauch. Diese Speicherplatzklassen haben vielfältige Anwendungen.
(a) Im Bereich der formalen Sprachen:
• Reguläre Sprachen lassen sich exakt über ihren Speicherplatzverbrauch charakterisieren, für kontextfreie Sprachen gelingt eine approximative Charakterisierung.
• Selbst einfach klingende Entscheidungsprobleme wie etwa
Sind zwei nichtdeterministische endliche Automaten äquivalent?
gehören bereits zu den schwierigsten Problemen, die mit polynomiellem Speicherplatz lösbar sind. Wir werden auch eine neue Klasse formaler Sprachen, die Klasse
der kontextsensitiven Sprachen kennenlernen: Diese Sprachklasse wird sich mit Hilfe
der Speicherplatzkomplexität exakt charakterisieren lassen.
(b) Welche Probleme lassen sich sehr schnell mit parallelen Algorithmen lösen? Diese Frage
lässt sich durch einen überraschend starken Zusammenhang zwischen „Parallelisierbarkeit“
und „Berechenbarkeit mit kleinem Speicherplatzverbrauch“ beantworten.
(c) Randomisierte Algorithmen und sogar Quantenalgorithmen, die „nur“ polynomielle Zeit
benötigen, können durch konventionelle deterministische Algorithmen mit polynomiellem
Speicherplatzverbrauch simuliert werden. Dieses Ergebnis hilft in der Einschätzung der
Berechnungskraft von Randomisierung wie auch von Quantenberechnungen.
(d) Hat der ziehende Spieler (in einem nicht-trivialen Zwei-Personen-Spiel) einen Gewinnzug?
Für viele interessante Spiele führt diese Frage auf Berechnungen, die höchstwahrscheinlich
nicht in polynomieller Laufzeit, wohl aber mit polynomiellen Speicherplatz gelingen.
Aufgabe 13
Überflüssige Programmteile: Wir fragen, ob zum Compilierungszeitpunkt algorithmisch festgestellt werden
kann, ob ein gegebenes C-Programm eine Anweisung enthält, die für keine Eingabe zur Ausführung kommt. In
der Regel würde die Existenz einer solchen Anweisung auf einen Programmierfehler hindeuten.
Beurteile die Komplexität dieses Problems und belege Deine Einschätzung möglichst schlüssig.
41
2. Komplexitäts- und Sprachklassen
2.3.1. Formale Sprachen
Zuerst betrachten wir reguläre Sprachen als die einfachste Klasse formaler Sprachen und werden
Charakterisierungen aus verschiedensten Perspektiven erhalten, nämlich über deterministische
oder nichtdeterministische Automaten (DFAs oder NFAs), über reguläre Grammatiken oder
über reguläre Ausdrücke. Allerdings sind regulären Sprachen enge Grenzen gesetzt. Nehmen
wir etwa als Beispiel die Sprache L der legalen Klammerausdrücke, die wir wie folgt rekursiv
definieren.
(a) ∈ L
(b) u, v ∈ L → u ◦ v ∈ L
(c) w ∈ L → {[} ◦ w ◦ {]} ∈ L
(d) L ist die kleinste Sprache, die diese Bedingungen erfüllt.
Diese Sprache ist nicht regulär, mit rekursiven Definitionen, die sich selbst referenzieren dürfen,
haben wir aber kein Problem:
KLAM M ER =
{} ∪ (KLAM M ER ◦ KLAM M ER) ∪ ({[} ◦ KLAM M ER ◦ {]}).
Man spricht hier von einer kontextfreien Ableitungsvorschrift. Die entsprechende Sprachklasse
der kontextfreien Sprachen werden wir im Kapitel 4 untersuchen.
In der Definition von Programmiersprachen findet man viele Beispiele rekursiv definierter
Anweisungen. Man denke an die erweiterte Backus Naur Form oder an Syntaxdiagramme.
Eine IF Anweisung in C ist beispielsweise definiert als:
IF
= {if} ◦ {(} ◦ EXP RESSION ◦ {)} ◦ ST AT EM EN T ◦
( {} ∪ ({else} ◦ ST AT EM EN T )) .
Eine IF-Anweisung ist also ein if gefolgt von einem geklammerten Ausdruck. Eine Anweisung
folgt. Daran kann, muss aber nicht, sich ein Paar von Schlüsselwort else und einer Anweisung
anschließen.
Für Ausdrücke bietet C eine Fülle von Formen
EXP RESSION = CON ST AN T ∪ T ERM
∪ EXP RESSION ◦ BIN OP ◦ EXP RESSION
∪ T ERM ◦ ASGN OP ◦ EXP RESSION
∪ EXP RESSION ◦ {?} ◦ EXP RESSION ◦ {:} ◦ EXP RESSION
∪ {&, ++, −−} ◦ T ERM
∪ T ERM ◦ {++, −−}
∪ {−, !, ∼} ◦ EXP RESSION
∪ {(} ◦ T Y P EN AM E ◦ {)} ◦ EXP RESSION
∪ {(} ◦ EXP RESSION ◦ {)}.
Dies läßt sich bis zu den Zeichen des Zeichensatzes herunterbrechen. BIN OP , also ein binary
Operator, ist wie folgt definiert,
BIN OP
= BIN OP _A ∪ BIN OP _B
BIN OP _A = {∗, /, %, +, −, , , >, <, <=, >=, ==, ! =, &, ˆ, |}
BIN OP _B = {&&, ||, , }.
42
2.3. Sprachklassen
Es lassen sich allerdings nicht alle Anforderungen, die eine Programmiersprache an einen
Quellcode stellt, auf diese Weise beschreiben. Wir können zwar erzwingen, dass auf jede
öffnende Klammer eine schließende folgt, dass kein else ohne vorheriges if auftritt, aber wir
können beispielsweise nicht artikulieren, dass eine Variable deklariert sein muss, bevor man sie
verwendet.
Wir werden sehen, dass bei kontextfreien Sprachen schärfere Geschütze aufgefahren werden
müssen, um das Wortproblem in den Griff zu bekommen. Der Algorithmus von Cocke, Younger
und Kasami wird das Wortproblem für kontextfreie Sprachen in Zeit Θ(n3 ) für Eingaben der
Länge n lösen. Damit sind wir zwar im polynomiellen Bereich, aber für praktische Anwendungen
ist das zu langsam. Die Einschränkung auf deterministisch kontextfreie Sprachen wird hier
helfen, einen guten Ausgleich zwischen Ausdrucksstärke der Sprachen und der Effizienz ihrer
Kompilierung zu finden.
Für beide Klassen, reguläre und kontextfreie Sprachen, werden wir Techniken herleiten, um
formal nachzuweisen, dass eine gegebene Sprache nicht regulär bzw. nicht kontextfrei ist.
2.3.2. Zeit-Komplexitätsklassen
Wir wählen Turingmaschinen als Rechnermodell. Die Architektur einer Turingmaschine M
besteht aus einem nach links und rechts unbeschränktem, eindimensionalem Band. Das Band
ist in Zellen unterteilt und der Zelleinhalt wird von einem Lese-Schreibkopf modifiziert.
Eine Eingabe w = (w1 , . . . , wn ) ∈ Σ∗ , für das Eingabealphabet Σ, wird so abgespeichert, dass
Zelle i (1 ≤ i ≤ n) mit dem Buchstaben i beschriftet ist. Alle anderen Zellen enthalten das
Blanksymbol B. Der Kopf des Lesebands befindet sich zu Anfang der Berechnung auf Zelle
1. Während der Berechnung darf der Kopf den Inhalt der gegenwärtig besuchten Zelle (mit
einem Buchstaben des Bandalphabets Γ) überdrucken und in einem Schritt zur linken oder
rechten Nachbarzelle wandern.
Wenn die Maschine M auf Eingabe w hält, dann ist die Ausgabe M (w) der Berechnung die
Konkatenation der Zelleninhalte vom linkesten Nicht-Blank bis zum rechtesten Nicht-Blank.
Wenn die Maschine M für jede Eingabe nur die Symbole 0 oder 1 als Ausgabe produziert,
dann sagen wir, dass die Eingabe w akzeptiert (Ausgabe 1) bzw. verworfen wird (Ausgabe 0)
und definieren
L(M ) = {w ∈ Σ∗ | M akzeptiert w }
als die von M erkannte Sprache.
Definition 2.4 Sei Σ ein Alphabet , also eine endliche Menge von Buchstaben.
(a) Wenn die deterministische Turingmaschine M für Eingabe w ∈ Σ∗ genau timeM (w)
Schritte ausführt, dann definieren wir
timeM (n) = max{timeM (w) | w ∈ Σn }
als die Laufzeit von M für Eingabelänge n.
(b) Für die Funktion t : N → N definieren wir
Dtime(t) = {L ⊆ Σ∗ | es gibt eine deterministische Turingmaschine M
mit L(M ) = L und timeM = O(t) }.
43
2. Komplexitäts- und Sprachklassen
(c) Die Komplexitätsklasse P besteht aus den mit polynomieller Laufzeit erkennbaren Sprachen,
[
P=
Dtime(nk ).
k∈N
?
Die Frage P = NP ist eine nicht nur für die theoretische Informatik zentrale Frage, und sie wird
auch in dieser Veranstaltung eine prominente Rolle einnehmen. Wir sind deshalb natürlichen
auch an nichtdeterministischen Turingmaschinen und ihren Komplexitätsklassen interessiert.
Eine nichtdeterministische Turingmaschine M führt unter Umständen viele Berechnungen für
eine Eingabe aus. Wir sagen, dass M eine Eingabe w akzeptiert, wenn w von mindestens einer
Berechnung akzeptiert wird und definieren
L(M ) = {w | es gibt eine Berechnung von M , die w akzeptiert }.
Definition 2.5 Sei Σ ein Alphabet. Die Funktion t : N → N sei gegeben.
(a) Wir sagen, dass eine nichtdeterministische Turingmaschine M höchstens Zeit t(n) benötigt, wenn alle Berechnungen von M für Eingaben der Länge n höchstens t(n) Schritte
benötigen.
(b) Wir setzen
Ntime(t) = {L ⊆ Σ∗ | es gibt eine nichtdeterministische Turingmaschine M
mit L(M ) = L und L benötigt höchstens O(t) Schritte }.
(c) Die Komplexitätsklasse NP besteht aus den mit polynomieller Laufzeit erkennbaren
Sprachen,
[
NP =
Ntime(nk ).
k∈N
Aufgabe 14
Zeige: Wenn Dtime(n log n) = Ntime(n log n), dann gilt P = NP.
Aufgabe 15
Eine Sprache L gehört genau dann zur Komplexitätsklasse NP, wenn es eine Sprache K ∈ P und eine Konstante
k ∈ N gibt, so dass für alle Eingaben w
w ∈ L ⇔ ∃ y ∈ {0, 1}∗ ( |y| ≤ |x|k ∧ (x, y) ∈ K ).
2.3.3. Speicherplatz-Komplexitätsklassen
Wir wählen deterministische I-O (input-output) Turingmaschinen als Rechnermodell. Eine
I-O Turingmaschine M besitzt drei, nach links und rechts unbeschränkte ein-dimensionale
Bänder mit jeweils einem Lese-Schreibkopf, wobei jeder Kopf in einem Schritt (höchstens) zur
jeweiligen linken oder rechten Nachbarzelle der gegenwärtig besuchten Zelle wandern darf.
(1) Das erste Band ist das Leseband. Wenn Σ1 das Eingabealphabet bezeichnet, dann wird
die Eingabe w = (w1 , . . . , wn ) ∈ Σ∗1 auf den Zellen 0, . . . , n + 1 wie folgt abgespeichert:
Die Zellen 0 und n + 1 enthalten das Begrenzersymbol #, während Zelle i (1 ≤ i ≤ n) mit
dem Buchstaben wi beschriftet ist. Der Kopf des Lesebands befindet sich zu Anfang der
Berechnung auf Zelle 0 und darf während der Berechnung weder den durch die Begrenzer
beschriebenen Bereich verlassen noch einen Zelleninhalt überschreiben. Der Kopf verhält
sich somit wie ein Lesekopf.
44
2.3. Sprachklassen
(2) Das zweite Band ist das Arbeitsband, dessen Zellen gelesen aber auch mit den Buchstaben
des Arbeitsalphabets Γ, beschrieben werden dürfen. Zu Anfang der Berechnung sind alle
Zellen mit dem Blanksymbol B beschriftet.
(3) Das dritte Band ist das Ausgabeband, dessen Zellen zu Anfang der Berechnung ebenfalls
mit dem Blanksymbol beschriftet sind. Der Kopf darf das Ausgabeband mit Buchstaben
eines Ausgabealphabets Σ2 beschreiben, wobei aber in einem Schritt nur die rechte
Nachbarzelle aufgesucht werden darf. Der Kopf verhält sich also wie ein links-nach-rechts
wandernder Schreibkopf.
Wenn die Maschine M auf Eingabe w hält, dann ist die Konkatenation der Inhalte der
Zellen 0, . . . m die Ausgabe M (w) der Berechnung. (Die Zelle 0 ist die zu Anfang besuchte
Zelle und die Zelle m ist die im letzten Schritt besuchte Zelle des Ausgabebands.)
Wenn die Maschine M für jede Eingabe nur die erste Zelle des Ausgabebands modifiziert
und dabei nur die Symbole 0 oder 1 druckt, dann sagen wir, dass die Eingabe w akzeptiert
(Ausgabe 1) bzw. verworfen wird (Ausgabe 0). Wir definieren
L(M ) = {w ∈ Σ∗1 | M akzeptiert w }
als die von M erkannte Sprache.
I-O Turingmaschinen erlauben die Definition des Speicherplatzbedarfs durch Messung der
Anzahl während der Berechnung besuchter Zellen des Arbeitsbands. Hätten wir nur 1-Band
Turingmaschinen betrachtet, dann wäre der Speicherplatzbedarf stets mindestens so groß wie
das Maximum von Ein- und Ausgabelänge, und wir hätten den teuren Arbeitsspeicher mit
billigen Hintergrundspeichern (für die Ein- und Ausgabe) gleichgesetzt.
Definition 2.6 Sei Σ ein Alphabet.
(a) Die I-O Turingmaschine M besuche für jede Eingabe w ∈ Σ∗ genau DspaceM (w) viele
verschiedene Zellen des Arbeitsbands. Wir definieren
DspaceM (n) = max{DspaceM (w) | w ∈ Σn }
als den Speicherplatzbedarf von M für Eingabelänge n.
(b) Sei s : N → N gegeben. Dann definieren wir die Klasse aller mit Platzverbrauch höchstens
O(s(n)) lösbaren Entscheidungsprobleme durch
Dspace(s) = {L ⊆ Σ∗ | L(M ) = L für eine I-O TM M mit DspaceM = O(s) }.
(c) Die Komplexitätsklasse DL besteht aus allen mit logarithmischem Speicherplatzbedarf
erkennbaren Sprachen, also
DL = Dspace(log2 n).
(d) Die Komplexitätsklasse PSPACE besteht aus allen mit polynomiellem Speicherplatzbedarf
erkennbaren Sprachen, also
PSPACE =
[
Dspace(nk ).
k∈N
Man beachte, dass wir die Speicherplatzkomplexität in Teil (b) asymptotisch definiert haben.
Dieses Vorgehen wird durch das folgende “Kompressionslemma” geradezu erzwungen.
45
2. Komplexitäts- und Sprachklassen
Lemma 2.1 Die I-O Turingmaschine M erkenne die Sprache L mit Speicherplatzbedarf
höchstens s(n). Dann gibt es eine I-O Turingmaschine M 0 , die L mit Speicherplatzbedarf
höchstens d s(n)
2 e erkennt.
Beweisskizze: Sei Γ das Arbeitsalphabet von M . Die Maschine M 0 verhält sich genau wie
M , benutzt aber das Arbeitsalphabet Γ2 .
Wie ist der Speicherplatzbedarf von nichtdeterministischen Turingmaschinen zu definieren?
Offensichtlich ist auch hier die Betrachtung von (nichtdeterministischen) I-O Turingmaschinen
M angesagt. Wir definieren den Speicherplatzbedarf nspaceM (w) für eine Eingabe w durch
den maximalen Speicherplatzbedarf einer Berechnung für w.
Definition 2.7 Sei Σ ein Alphabet.
(a) Wir definieren
nspaceM (n) = max{nspaceM (w) | w ∈ Σn }
als den Speicherplatzbedarf von M für Eingabelänge n.
(b) Sei s : N → N gegeben. Dann definieren wir
NSPACE(s) = {L ⊆ Σ∗ | es gibt eine nichtdeterministische I-O TM
M mit L(M ) = L und nspaceM = O(s) }.
(c) Die Komplexitätsklasse NL besteht aus allen nichtdeterministisch, mit logarithmischem
Speicherplatzbedarf erkennbaren Sprachen, also
NL = NSPACE(log2 n).
(d) Die Komplexitätsklasse NPSPACE besteht aus allen nichtdeterministisch, mit polynomiellem
Speicherplatzbedarf erkennbaren Sprachen, also
NPSPACE =
[
NSPACE(nk ).
k∈N
2.3.4. Die Komplexität paralleler Berechnungen
Wann ist ein algorithmisches Problem parallelisierbar? Was soll „parallelisierbar“ überhaupt
bedeuten? Informell gesprochen sollten wir fordern, dass Berechnungen rasant schnell ablaufen
und mit nicht zu vielen Prozessoren arbeiten. Um diese Begriffe weiter zu klären, wählen wir
Schaltkreise als unser paralleles Rechnermodell.
Definition 2.8 Ein Schaltkreis S wird durch den Vektor
S = (G, Q, R, gatter, n, eingabe)
beschrieben.
• G = (V, E) ist ein gerichteter, azyklischer Graph.
• Q ist die Menge der Quellen (Knoten mit nur ausgehenden Kanten) und R die Menge
der Senken (Knoten mit nur eingehenden Kanten) von G.
46
2.3. Sprachklassen
• Die Funktion eingabe: Q → {1, . . . , n} weist jeder Quelle die Position des entsprechenden
Eingabebits zu.
• Die Funktion gatter: V \Q → {¬, ∨, ∧} weist jedem inneren Knoten von G eine Boolesche
Funktion zu, wobei einem Knoten v die Negation nur zugewiesen werden darf, wenn v
genau eine eingehende Kante besitzt.
Der Schaltkreis berechnet die Boolesche Funktion fS : {0, 1}n → {0, 1}|R| , indem die n
Eingabebits an die Quellen in G angelegt werden, und jeder Knoten das Ergebnis seiner
Gatterfunktion weiterleitet. Das Resultat wird an den Senken von G (in einer vorher fixierten
Reihenfolge) abgelesen.
Als nächstes führen wir die Komplexitätsmaße Tiefe, Größe und Fanin ein. Während die Tiefe
die parallele Rechenzeit wiedergibt, misst die Größe die Prozessoranzahl, bzw. in gewissem
Sinne die sequentielle Rechenzeit.
Definition 2.9
(a) Sei S = (G, Q, R, gatter, n, eingabe) ein Schaltkreis. Wir sagen, dass
(a) die Tiefe von S die Länge des längsten Weges in G ist,
(b) die Größe von S die Anzahl der Knoten von G ist, wobei wir keine Quellen zählen,
(c) und der Fanin von S das Maximum, über alle Knoten v, der Anzahl eingehender
Kanten von v ist.
(b) Für eine Boolesche Funktion f : {0, 1}n → {0, 1} definieren wir die minimale Tiefe
DEPTH(f ) = min{ d | Es gibt einen Schaltkreis der Tiefe d für f }
und die minimale Größe
SIZE(f ) = min{ s | Es gibt einen Schaltkreis der Größe s für f },
wobei wir jeweils nur Schaltkreise mit den Gattern ∧, ∨, ¬ vom Fanin zwei betrachten.
Aufgabe 16
a) Bestimme die Anzahl der Funktionen f : {0, 1}n → {0, 1}.
b) Gib eine möglichst gute obere Schranke für die Anzahl der Schaltkreise aus m Gattern mit Fanin 2 und n
Eingaben an.
c) Zeige: Es gibt eine Funktion f : {0, 1}n → {0, 1}, zu deren Berechnung Schaltkreise die Größe mindestens
Ω(2n /n) und die Tiefe mindestens Ω(n) benötigen.
Schaltkreise berechnen nur Funktionen mit einer festen Anzahl von Eingabebits. Um Funktionen
von unbeschränkt vielen Eingabebits berechnen zu können, benötigen wir das Konzept einer
uniformen Schaltkreisfamilie.
Definition 2.10 (a) Eine Schaltkreisfamilie ist eine Folge (Sn )n∈N von Schaltkreisen, so dass
Sn eine Boolesche Funktion auf genau n Eingaben berechnet. Eine Schaltkreisfamilie
(Sn )n∈N berechnet eine Funktion f : {0, 1}∗ → {0, 1} genau dann, wenn Sn für jedes n
die Funktion f , eingeschränkt auf {0, 1}n , berechnet.
(b) Eine Schaltkreisfamilie (Sn )n∈N ist uniform, wenn es eine log2 (Größe (Sn ) + n)-platzbeschränkte, deterministische Turingmaschine gibt, die für Eingabe 1n
- alle Knoten von Sn aufzählt,
- jedem inneren Knoten seine Funktion, also eine Funktion aus {¬, ∨, ∧}, zuweist,
47
2. Komplexitäts- und Sprachklassen
- sämtliche Kanten von Sn aufzählt und
- jeder Quelle von Sn eine Bitposition zuweist.
(c) Seien d, s : N → N gegeben. Definiere
DEPTHuniform (d)
als die Klasse aller Sprachen L, die durch eine uniforme Schaltkreisfamilie in Tiefe
O(d(n)) und mit Fanin zwei berechnet werden.
SIZEuniform (s)
ist die Klasse aller Sprachen L, die durch eine uniforme Schaltkreisfamilie mit Größe
O(s(n)) und mit Fanin zwei berechnet werden. Schließlich besteht
DEPTH−SIZEuniform (d, s) = DEPTHuniform (d) ∩ SIZEuniform (s)
aus allen Sprachen, die sowohl in Tiefe O(d) wie auch in Größe O(s) durch eine uniforme
Schaltkreisfamilie vom Fanin zwei berechnet werden.
Mit anderen Worten: Wir verlangen, dass eine uniforme Schaltkreisfamilie Sn einfach, nämlich
durch eine logarithmisch-bandbeschränkte Turingmaschine, konstruierbar sein muss. Warum
haben wir die Uniformität oder Einfachheit von Schaltkreisen gefordert?
Sei n die Gödelnummer der Turingmaschine M . Wenn M auf dem leeren Wort hält, dann
definieren wir Sn so, dass alle Eingaben akzeptiert werden. Wenn hingegen M auf dem leeren
Wort nicht hält, dann definiere Sn so, dass alle Eingaben verworfen werden. Mit anderen
Worten, das spezielle Halteproblem (für die Unärkodierung von Gödelnummern) kann mit
einer Schaltkreisfamilie berechnet werden, die nur aus Schaltkreisen mit einem Gatter bestehen.
Die beschriebene Schaltkreisfamilie (Sn )n∈N ist nicht uniform und ihre Konstruktion ist sogar
nicht berechenbar.
In uniformen Schaltkreisfamilien wird die wesentliche Arbeit von den Schaltkreisen geleistet
und nicht von der Beschreibung der Familie.
Aufgabe 17
a) Zeige: Für jede Funktion f : {0, 1}∗ → {0, 1} gibt es eine Schaltkreisfamilie der Tiefe O(n), die f berechnet.
b) Zeige: Es gibt eine berechenbare Funktion f : {0, 1}∗ → {0, 1}, die nicht von einer uniformen Schaltkreisfamilie polynomieller Tiefe berechnet werden kann.
Wir sind an rasant schnellen, parallelen Algorithmen interessiert, die mit einer vernünftigen
Größe auskommen. Die Begriffe „rasant schnell“ und „vernünftige Größe“ präzisieren wir durch
poly-logarithmische Rechenzeit und polynomielle Größe.
Definition 2.11 Für jedes k ∈ N definiere die Komplexitätsklassen:
NC
k
:=
∞
[
DEPTH − SIZEuniform (logk2 n, nl )
l=0
NC :=
[
NCk
k∈N
AC
k
AC :=
ist wie NCk definiert, allerdings beschränken wir den Fanin nicht.
[
k∈N
48
ACk .
2.3. Sprachklassen
Die Komplexitätsklasse NC ist unsere Definition der Klasse parallelisierbarer Probleme. NC steht
für „Nick’s Class“ (nach ihrem Autor Nick Pippenger). AC steht für „Alternating Circuits“,
d.h. Schaltkreise die alternierend aus Schichten von UND- bzw. ODER-Gattern aufgebaut
sind.
49
Teil II.
Formale Sprachen
51
3. Endliche Automaten und reguläre Sprachen
Die Beschreibung eines endlichen Automaten (oder DFA) A = (Σ, Q, δ, q0 , F ) besteht aus
den folgenden Komponenten:
• dem Eingabealphabet Σ,
• der endlichen Menge Q der Zustände,
• dem Programm bzw. der Zustandsüberführungsfunktion δ : Q × Σ → Q,
• dem Anfangszustand q0 ∈ Q sowie
• der Menge F der akzeptierenden Zustände.
Wie rechnet ein endlicher Automat? Beginnend mit einem Startzustand q0 wird die Eingabe
Buchstabe für Buchstabe eingelesen und bewirkt Zustandsänderungen. Die Eingabe wird
akzeptiert, wenn der zuletzt erhaltene Zustand akzeptierend ist.
Definition 3.1 Sei A = (Σ, Q, δ, q0 , F ) ein DFA.
(a) A liest ein Wort w ∈ Σ∗ von links nach rechts und wechselt seine Zustände gemäß dem
Programm δ. Formal:
Wir setzen δ auf Worte in Σ∗ fort und definieren
δ : Q × Σ∗ → Q
durch
δ(q, ) = q,
δ(q, w1 · · · wn+1 ) = δ δ(q, w1 · · · wn ), wn+1
Beachte, dass δ(q, w1 · · · wn ) den Zustand bezeichnet, den A nach Lesen der Eingabe
w1 · · · wn erreicht, wenn im Zustand q begonnen wird.
(b) A akzeptiert w ∈ Σ∗ genau dann, wenn δ(q0 , w) ∈ F .
(c) Die von A akzeptierte (oder erkannte) Sprache ist
L(A) = {w ∈ Σ∗ | A akzeptiert w}.
(d) Eine Sprache L ⊆ Σ∗ heißt regulär, wenn es einen endlichen Automaten A mit L = L(A)
gibt.
Das Programm eines endlichen Automaten läßt sich am besten durch ein Zustandsdiagramm
veranschaulichen, das aus Knoten und beschrifteten Kanten besteht. Die Knoten entsprechen
den Zuständen; für jeden Befehl der Form δ(q, a) = q 0 wird eine mit a beschriftete Kante
eingesetzt, die vom Knoten q zum Knoten q 0 verläuft. Den Anfangszustand markieren wir
durch einen Pfeil, akzeptierende Zustände werden doppelt umrandet.
Die Berechnung von A auf Eingabe w = w1 · · · wn beschreibt somit einen Weg im Zustandsgraphen, der im Knoten q0 beginnt und jeweils die mit w1 , w2 , . . . , wn beschrifteten Kanten
wählt.
53
3. Endliche Automaten und reguläre Sprachen
Beispiel 3.1 Wir behaupten, dass die Sprache
PARITÄT = w ∈ {0, 1}∗ | w hat gerade viele Einsen
n
o
regulär ist. PARITÄT wird von einem endlichen Automaten mit
• Zustandsmenge Q = {gerade, ungerade},
• Anfangszustand gerade,
• F = {gerade} und
• dem Programm δ akzeptiert, wobei
δ(gerade, 0) = gerade,
δ(gerade, 1) = ungerade,
δ(ungerade, 0) = ungerade, δ(ungerade, 1) = gerade.
Das Zustandsdiagramm hat die Form
0
1
q0
0
q1
1
Beispiel 3.2 Üben wir uns in der Modellierung und betrachten das folgende Problem. Die
Kindersicherung eines Fernsehers funktioniert so, dass über die Fernbedienung ein dreistelliger
Code korrekt eingegeben werden muss, damit der Fernseher eingeschaltet werden kann. Dafür
sind die Tasten von 0 bis 9 relevant. Es gibt eine BACK Taste, die es uns erlaubt, die letzteingegebene Zahl zurückzunehmen, außerdem gibt es die Taste CODE. Sie muss vor der Eingabe des
Codes gedrückt werden. Wird sie während der Codeeingabe noch mal gedrückt, so wird die
Eingabe neu begonnen.
Ein Automat bietet sich für die Modellierung an, da die Eingabe, die Folge der Tastenbetätigungen, ohnehin nur von links nach rechts (in der zeitlichen Abfolge) zur Verfügung steht.
Wir geben zunächst die Komponenten des Automaten an.
• Das Eingabealphabet sind die relevanten Tasten
Σ = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, BACK, CODE}.
• Die Zustände müssen widerspiegeln, wie weit die Eingabe bereits fortgeschritten ist.
Wie weit ist der Code richtig eingegeben worden? Folgen nach einem richtigen Anfang
vielleicht falsche Zeichen, die mit BACK wieder zurückgenommen werden könnten? All
diese Fragen müssen in den Zuständen beantwortet sein.
• Der Anfangszustand q0 entspricht dem Zustand, in dem noch nichts eingegeben wurde.
• Die Menge der akzeptierenden Zustände hat nur ein Element: den Zustand, der nach
erfolgreicher Codeeingabe angenommen wird.
• Die Übergangsfunktion δ wird die Zustände sinnvoll verbinden.
Ist der Code zum Entsperren des Fernsehers etwa 999, so erhalten wir den folgenden Automaten.
54
BACK,
CODE
CODE
BACK,
CODE
99
9
ON
9x
.,8
E
BACK
0, . . . , 9
0, . . . , 9
xx
9
0, .
.
COD
BACK,
CODE
0, . . . , 8
0, . . . , 8
CODE
x
9
9
BACK
ready
BACK
0, . . . , 9
OFF
0, . . . , 9,
BACK
Bei der Erstellung dieses Automaten haben wir gesunden Menschenverstand eingesetzt. Wir
haben erkannt, dass es nicht nötig ist zu unterscheiden, welche falsche Zahl getippt wurde. Auch
haben wir ausgenutzt, dass es egal ist, ob man die zweite Zahl richtig eintippt, nachdem die
erste falsch war. Sehr wohl spielt es aber eine Rolle, ob einer falschen zweiten Zahl eine richtige
erste vorausging. Ist dieser Automat aber kleinstmöglich oder könnte man die Anforderungen
kompakter, das heißt mit weniger Zuständen, formulieren?
Anwendungen
Warum betrachten wir endliche Automaten? Endliche Automaten erlauben eine Beschreibung
von Handlungsabläufen:
Wie ändert sich ein Systemzustand in Abhängigkeit von veränderten Umgebungsbedingungen?
Dementsprechend ist das Einsatzgebiet endlicher Automaten vielfältig: Endliche Automaten
finden Verwendung
- in der Entwicklung digitaler Schaltungen,
- in der Softwaretechnik (zum Beispiel in der Modellierung des Applikationsverhaltens),
- im Algorithmenentwurf für String Probleme
- oder in der Abstraktion tatsächlicher Automaten (wie Bank- und Getränkeautomaten)
Aufgabe 18
Ein Mann (M) steht mit einem Wolf (W), einer Ziege (Z) und einem Kohlkopf (K) am linken Ufer eines Flusses,
den er überqueren will. Er hat ein Bot, das groß genug ist, ihn und ein weiteres Objekt zu transportieren, so
dass er immer nur einen der drei mit sich hinübernehmen kann. Falls der Mann allerdings den Wolf und die
Ziege unbewacht an einem der Ufer zurückläßt, so wird der Wolf sicherlich die Ziege fressen. Genauso wird,
wenn die Ziege und der Kohlkopf unbewacht zurückbleiben, die Ziege den Kohlkopf fressen.
Eine Überführung ist ein Wort w über Σ = {M, W, Z, K}, wobei wi ∈ {W, Z, K}, wenn der Mann mit Objekt
wi zum Zeitpunkt i das Boot benutzt und wi = M , wenn der Mann das Bot alleine benutzt. Eine Überführung
55
3. Endliche Automaten und reguläre Sprachen
w = w1 · · · wn ist erfolgreich, falls nach der letzten Aktion wn der Mann und alle drei Objekte das rechte Ufer
erreicht haben.
Gebe einen möglichst kleinen Automaten an, der alle erfolgreichen Überführungen beschreibt.
Algorithmische Fragestellungen
Wir werden später sehen, dass die folgenden algorithmischen Probleme effiziente Lösungen
besitzen:
- Das Äquivalenzproblem: Gegeben seien endliche Automaten A und B. Sind A und B
äquivalent, d.h. gilt L(A) = L(B)?
- Das Minimierungsproblem: Gegeben sei ein endlicher Automat A. Bestimme einen
äquivalenten endlichen Automaten B mit der kleinsten Anzahl von Zuständen.
Als Konsequenz des Minimierungsproblem kann man damit automatisch kleinste endliche
Automaten für reguläre Sprachen entwerfen. Es stellt sich heraus, dass die Klasse der regulären
Automaten zu den größten Sprachenklassen gehört, für die optimale Programme effizient
bestimmt werden können. Wir werden das Minimierungsproblem im nächsten Kapitel angehen
und lösen.
In der Praxis werden häufig nichtdeterministische Automaten (NFAs) benutzt. Wir zeigen, dass
überraschenderweise jeder nichtdeterminische Automat einen äquivalenten deterministischen
Automat besitzt. Im Abschnitt 2.1 haben wir bereits reguläre Ausdrücke kennengelernt und es
stellt sich heraus, dass eine Sprache genau dann regulär ist, wenn die Sprache durch einen
regulären Ausdruck dargestellt werden kann. Schliellich werden formale Sprachen häufig durch
Grammatiken beschrieben: Deshalb werden wir reguläre Grammatiken einführen und zeigen,
dass eine Sprache genau dann regulär ist, wenn sie eine reguläre Grammatik besitzt.
Reguläre Sprachen besitzen also eine Vielzahl äquivalenter Charakterisierungen. Neben diesen
Eigenschaften des Maschinenmodells, bzw der Sprachenklasse, haben endliche Automaten trotz
ihrer Einfachheit auch Anwendungen im Algorithmenentwurf. Hier besprechen wir zuerst kurz
die lexikalische Analyse und untersuchen später das Pattern Matching Problem in Beispiel
3.11.
Beispiel 3.3 (Lexikalische Analyse)
Die lexikalische Analyse ist meistens die erste Phase bei der Compilierung eines vorgegebenen
Programms. Das Programm wird dabei Anweisung nach Anweisung gelesen und in Tokenklassen
aufgebrochen. (Beispiele für Tokenklassen sind Keywords, Konstanten, Variablen, arithmetische
Operatoren, Vergleichsoperatoren, Klammern, Kommentare etc.) Zum Beispiel wird in der
lexikalischen Analyse eine Anweisung der Form
if distance >= rate * (end - start) then distance = maxdistance;
aufgebrochen in die Tokenklassen
- Keywords (für if und then)
- Variablen (für distance, rate, end, start, maxdistance)
- Operatoren (für *, -, =)
- Vergleichsoperatoren (für >=)
- Klammern (für ( und ))
56
- Semikolon (für ;)
Weitere Phasen des Compilers bauen dann auf der Ausgabe der lexikalischen Analyse, also
der Zuweisung von Tokenklassen, auf. Die lexikalische Analyse wird meist durch endliche
Automaten implementiert, da die Erkennung von Tokenklassen durch „links-nach-rechts“ Lesen
des Programms möglich ist.
Neben den Eigenschaften des Maschinenmodells, bzw. der Sprachenklasse und den allerdings nur
eingeschränkten algorithmischen Anwendungen sind endliche Automaten in der Modellierung
wesentlich. Wir haben ein erstes Beispiel bereits in der Kindersicherung eines Fernsehers
kennengelernt. Hier ist ein zweites Beispiel.
Beispiel 3.4 (Modellierung sequentieller Schaltungen)
Bei einer sequentiellen Schaltung, im Gegensatz zu einer kombinatorischen Schaltung, hängt der
Wert am Ausgang der Schaltung nicht nur von den aktuellen Eingangswerten ab, sondern auch
von der Vorgeschichte, die sich im Inhalt der Speichebauteile niedergeschlägt. Der systematische
Aufbau einer solchen Schaltung ist dabei wie folgt:
kombinatorisch
Speicher
Takt
Wir modellieren die Schaltung durch einen Mealy Automaten1 . (Ein Mealy Automat ist
ein endlicher Automat, der für jeden Zustandsübergang eine Ausgabe ausgibt.) Wir wählen
als Eingabealphabet die Menge {0, 1}n , wenn n die Zahl der primären Eingänge ist. Wenn der
Speicher s Bits speichert, dann benutzen wir die Zustandsmenge
Q = {qb1 ···bs | b1 , . . . , bs ∈ {0, 1} }.
Angenommen der Inhalt des Speichers ist b und eine Eingabe x ∈ {0, 1}n liegt an. Wenn
die Schaltung den neuen Speicher c sowie die Ausgabe y produziert, dann wählen wir den
x
Zustandsübergang qb → qc und weisen diesem Zustandsübergang die Ausgabe y zu.
Man beachte allerdings, dass diese Modellierung für großes n nicht praktikabel ist. Die
Modellierung einer beliebigen Schaltung durch einen Mealy Automaten ist daher nur ein
konzeptioneller Beitrag.
Mealy-Automaten werden in der technischen Informatik häufig für die Modellierung von
Steuerwerken eingesetzt.
1
Ein Moore Automat ist ein endlicher Automat, der für jeden Zustand eine Augabe ausgibt. Man kann zeigen,
dass es zu jedem Mealy Automaten einen „äquivalenten“ Moore Automaten vergleichbarer Größe gibt und
umgekehrt.
57
3. Endliche Automaten und reguläre Sprachen
Weitere Fragestellungen
- Wann ist eine Sprache L nicht regulär, bzw. wie viele Zustände benötigt ein DFA für L
mindestens und wieviele Zustände sind ausreichend?
- Viele verschiedenes Sichtweisen (DFAs, NFAs, reguläre Ausdrücke oder reguläre Grammatiken) führen auf dieselbe Klasse der regulären Sprachen. Aber was passiert, wenn
wir mit Automaten arbeiten, die von einer Eingabezelle nach rechts oder links wandern
dürfen?
- Welche endliche Automaten, DFAs oder NFAs betreffende Fragen lassen sich effizient
beantworten? Und wenn wir reguläre Ausdrücke betrachten?
Aufgabe 19
Entwirf für folgende Sprachen deterministische endliche Automaten mit möglichst wenigen Zuständen:
(a) Ln = {w| w ∈ {0, 1}∗ und w hat mindestens n Einsen }.
(b) Ln = {ww| w ∈ {0, 1}n }.
(c) L = {w| w ∈ {0, 1}∗ und die Anzahl der Einsen in w ist durch 7 teilbar}.
Aufgabe 20
Entwirf einen deterministischen endlichen Automaten für folgende Sprachen:
L1 =
n
P|w|
o
L2 =
n
P|w|
wi 5|w|−i .
w|w ∈ {0, 1, 2, 3, 4}∗ und 3 teilt
w|w ∈ {0, 1, 2, 3, 4}∗ und 3 teilt
w 5i−1 .
i=1 i
i=1
o
Aufgabe 21
Die Sprache (IF − ST AT EM EN T ) wird wie folgt rekursiv definiert:
IF − ST AT EM EN T = {if } ◦ EXP RESSION ◦ {then} ◦ ST AT EM EN T
EXP RESSION definieren wir als:
EXP RESSION = {A, . . . Z}+ ◦ {≥ 0}
und ST AT EM EN T wird wie folgt definiert:
ST AT EM EN T = IF − ST AT EM EN T ∪ {A, . . . , Z}+ ◦ {= 0}
Zeige, dass die Sprache IF − ST AT EM EN T regulär ist.
Gibt es Schwierigkeiten im Nachweis der Regularität, wenn wir die rekursive Definition wie folgt verändern
IF − ST AT EM EN T = {if } ◦ EXP RESSION ◦ {then} ◦ ST AT EM EN T ◦ {; }
Aufgabe 22
Beweise oder widerlege:
(a) Zu jeder regulären Sprache L 6= ∅ gibt es einen DFA A mit genau einem akzeptierendem Zustand und
L = L(A).
(b) Falls L0 ⊆ L und L regulär ist, dann ist auch L0 regulär.
3.1. Minimierung
Definition 3.2 A = (Σ, QA , δ A , q0A , F A ) und B = (Σ, QB , δ B , q0B , F B ) seien DFAs.
(a) Wir nennen A und B äquivalent, wenn gilt
L(A) = L(B).
58
3.1. Minimierung
(b) A heißt minimal wenn kein mit A äquivalenter DFA eine kleinere Zustandszahl besitzt.
Äquivalente DFAs haben dasselbe Ausgabeverhalten, können aber völlig unterschiedliche
Zustandszahlen besitzen. Für einen gegebenen DFA A = (Σ, Q, δ, q0 , F ) suchen wir einen
„kleinsten“ mit A äquivalenten DFA. Das Tolle ist die genial einfache Idee der Minimierung:
Wir sollten doch zwei Zustände p, q ∈ Q zu einem einzigen Zustand verschmelzen
dürfen, wenn p und q „äquivalent“ sind,
also dasselbe Ausgabeverhalten besitzen.
Aber was bedeutet „dasselbe Ausgabeverhalten“ zu besitzen?
Definition 3.3 Der DFA A = (Σ, Q, δ, q0 , F ) sei gegeben. Die Verschmelzungsrelation
≡A ist eine 2-stellige Relation über der Zustandsmenge Q. Wir sagen, dass Zustände p, q ∈ Q
äquivalent bzgl. A sind (kurz p ≡A q), wenn
für alle Worte w ∈ Σ∗ : δ(p, w) ∈ F ⇐⇒ δ(q, w) ∈ F.
Wir nennen ≡A Verschmelzungsrelation, da wir bzgl. ≡A äquivalente Zustände in einen Zustand
verschmelzen möchten. Die Verschmelzungsrelation hat eine sehr schöne Eigenschaft, sie ist
nämlich eine Äquivalenzrelation.
3.1.1. Äquivalenzrelationen
Definition 3.4 Sei E eine 2-stellige Relation über einer Menge M .
(a) E heißt reflexiv, falls (v, v) ∈ E für alle v ∈ M gilt.
(b) E heißt symmetrisch, falls für alle v, w ∈ M gilt:
Wenn (v, w) ∈ E, dann auch (w, v) ∈ E.
(c) E heißt transitiv, falls für alle v, w, u ∈ M gilt:
Ist (v, w) ∈ E und (w, u) ∈ E, so auch (v, u) ∈ E.
(d) Eine Äquivalenzrelation ist eine 2-stellige Relation, die reflexiv, transitiv und symmetrisch ist.
Eine Äquivalenzrelation führt einen „Gleichheits-“ bzw. einen „Äquivalenzbegriff“ zwischen
Objekten im Hinblick auf bestimmte Eigenschaften ein. Die Wahl der Eigenschaften hängt
von der jeweiligen Äquivalenzrelation ab.
Beispiel 3.5 Beispiele für Äquivalenzrelationen:
(a) Gleichheit ist die „extremste“ Version der Äquivalenz: Für jede Menge M ist
E := { (m, m) : m ∈ M }
eine Äquivalenzrelation. Die Aussage “(x, y) ∈ E” entspricht gerade der Aussage “x = y”.
59
3. Endliche Automaten und reguläre Sprachen
(b) Gleichmächtigkeit: Für jede endliche Menge M ist
E := { (A, B) : A ⊆ M, B ⊆ M, |A| = |B| }
eine Äquivalenzrelation über der Potenzmenge P(M ). Hier werden also zwei Mengen als
äquivalent angesehen, wenn sie von der Perspektive der Größe übereinstimmen.
Skizze für M = {1, 2}:
{1, 2}
{1}
{2}
∅
(c) Logische Äquivalenz: Für die Menge M = AL der aussagenlogischen Formeln ist
E := { (φ, ψ) : φ, ψ ∈ AL, φ ≡ ψ }
eine Äquivalenzrelation. Diesmal werden also zwei Formeln als äquivalent angesehen, wenn
sie sich vom Standpunkt der Semantik gleich verhalten.
(d) Graphisomorphie: Für die Menge M = G der ungerichteten Graphen ist
E := { (G, H) : G, H ∈ G, G ' H }
eine Äquivalenzrelation. Zwei Graphen werden als äquivalent angesehen, wenn sie sich
vom Standpunkt der Graphisomorphie gleich verhalten.
(e) Eine der für die Informatik wichtigsten Äquivalenzrelationen ist die „Kongruenz modulo
einer natürlichen Zahl m“. Es ist M = N und
E := {(x, y) : x, y ∈ N, m teilt x − y}.
Zwei Zahlen werden also genau dann als äquivalent angesehen, wenn ihre Reste nach
Division durch m übereinstimmen.
Definition 3.5 Sei E eine Äquivalenzrelation über einer Menge M .
(a) Für jedes v ∈ M bezeichnet
[v]E := { v 0 ∈ M : (v, v 0 ) ∈ E }
die Äquivalenzklasse von v bezüglich E. Die Äquivalenzklasse [v]E besteht also aus
allen Elementen von V , die laut E „äquivalent“ zu v sind.
(b) Eine Menge W ⊆ V heißt Äquivalenzklasse (bzgl. E), falls es ein v ∈ M mit W = [v]E
gibt. Das Element v ist ein Vertreter, bzw. Repräsentant seiner Äquivalenzklasse W .
(c) Die Zahl der verschiedenen Äquivalenzklassen wird auch als Index von E bezeichnet.
Wir kommen zu der herausragenden Eigenschaft einer Äquivalenzrelation (bzgl. E).
Satz 3.1 E sei eine Äquivalenzrelation über der Menge M und [v]E , [w]E seien zwei beliebige
Äquivalenzklassen.
Die beiden Äquivalenzklassen stimmen entweder überein (d.h. [v]E = [w]E ) oder die Klassen
sind disjunkt (d.h. [v]E ∩ [w]E = ∅).
60
3.1. Minimierung
Beweis: Wir nehmen an, dass die Äquivalenzklassen [v]E und [w]E ein gemeinsames Element
u besitzen. Dann gilt
1. (v, u) ∈ E und (w, u) ∈ E nach Definition der Äquivalenzklassen,
2. Es folgt (u, w) ∈ E, denn E ist symmetrisch.
3. Wir benutzen, dass E transitiv ist und erhalten (v, w) ∈ E aus (v, u) ∈ E und (u, w) ∈ E.
4. Mit dem gleichen Argument folgt für ein beliebiges mit v äquivalentes Element x aus
(v, x) ∈ E (d.h. (x, v) ∈ E) und (v, w) ∈ E auch (x, w) ∈ E, bzw. (w, x) ∈ E. Wir erhalten
[v]E ⊆ [w]E .
5. Ebenso erhalten wir [v]E ⊆ [w]E und wir haben die Gleichheit [v]E = [w]E nachgewiesen. Die Äquivalenzklassen sind also disjunkt. Da jedes Element v ∈ M seiner Äquivalenzklasse
[v]E angehört, ist M eine disjunkte Vereinigung seiner verschiedenen Äquivalenzklassen.
Sei A = (Σ, Q, δ, q0 , F ) ein DFA. Wir erinnern an die Definition der Verschmelzungsrelation:
Zwei Zustände p, q ∈ Q sind äquivalent, kurz p ≡A q, wenn gilt
für alle Worte w ∈ Σ∗ : δ(p, w) ∈ F ⇐⇒ δ(q, w) ∈ F.
(3.1)
Satz 3.2 Sei A ein DFA. Dann ist die Verschmelzungsrelation ≡A eine Äquivalenzrelation.
Insbesondere ist die Zustandsmenge Q eine disjunkte Vereinigung von Äquivalenzklassen und
unsere Idee, äquivalente Zustände zu einem einzigen Zustand zu verschmelzen, erscheint sinnvoll. Wenn alles klappt, wenn wir also die Zustandsübergänge nach Verschmelzung „vernünftig“
setzen können, dann ist der „Äquivalenzklassenautomat“, also der DFA nach Verschmelzung
mit A äquivalent. Natürlich stimmt die Anzahl seiner Zustände mit dem Index der Verschmelzungsrelation überein. Ach wär das toll, wenn der Index die minimale Zustandszahl
wäre.
Beweis von Satz 3.2: Wenn wir q = p in (3.1) annehmen, erhalten wir p ≡A p als Konsequenz
und die Verschmelzungsrelation ist reflexiv. Die Symmetrie folgt auch sofort, denn aus p ≡A q,
d.h
für alle Worte w ∈ Σ∗ : δ(p, w) ∈ F ⇐⇒ δ(q, w) ∈ F
folgt q ≡A p, d.h.
für alle Worte w ∈ Σ∗ : δ(q, w) ∈ F ⇐⇒ δ(p, w) ∈ F.
Seien p, q, r beliebige Zustände. Um die Transitivität nachzuweisen, müssen wir p ≡A q, q ≡A r
annehmen und dann p ≡A r zeigen. Nach Annahme gilt also
für alle Worte w ∈ Σ∗ : δ(p, w) ∈ F ⇐⇒ δ(q, w) ∈ F ∧ δ(q, w) ∈ F ⇐⇒ δ(r, w) ∈ F .
und damit folgt
für alle Worte w ∈ Σ∗ : δ(p, w) ∈ F ⇐⇒ δ(r, w) ∈ F.
Wir haben die Behauptung p ≡A r gezeigt.
61
3. Endliche Automaten und reguläre Sprachen
3.1.2. Die Verschmelzungsrelation
Der DFA A = (Σ, Q, δ, q0 , F ) sei gegeben. Um die Zustandszahl von A zu reduzieren, führen
wir die folgenden Schritte durch:
1. Zuerst bestimmen wir die Äquivalenzklassen der Verschmelzungsrelation ≡A .
2. Für jede Äquivalenzklasse von ≡A verschmelzen wir alle Zustände der Klasse zu einem
einzigen Zustand und fügen „entsprechende“ Übergänge ein. Den neuen Automaten nennen
wir A0 und bezeichnen ihn als den Äquivalenzklassenautomaten von A.
• Wie sollen wir die Zustandsübergänge von A0 definieren, so dass A und A0 dieselbe
Sprache berechnen?
Wenn der Index von ≡A , und damit die Zustandszahl von A0 , mit der minimalen Zustandszahl
übereinstimmt, dann ist A0 minimal! Natürlich müssen wir uns auch fragen, ob wir ≡A und
den Äquivalenzklassenautomaten A0 effizient berechnen können.
Wir berechnen die Äquivalenzklassen der Verschmelzungsrelation
Wir bestimmen alle Paare nicht-äquivalenter Zustände.
Definition 3.6 Der DFA A = (Σ, Q, δ, q0 , F ) mit Zuständen p, q ∈ Q sei gegeben.
Wir sagen, dass das Wort w ∈ Σ∗ die Zustände p und q trennt, bzw. ein Zeuge für die
Inäquivalenz von p und q ist, wenn
δ(p, w) ∈ F ∧ δ(q, w) 6∈ F ∨ δ(p, w) 6∈ F ∧ δ(q, w) ∈ F .
Wie lassen sich alle Paare nicht-äquivalenter Zustände bestimmen?
Algorithmus 3.1 Verschmelzungsalgorithmus
1. Setze M0 := { {p, q} : p ∈ F, q 6∈ F }. Wir sagen, dass die Paarmengen in M0 markiert
wurden. (Es ist δ(p, ) ∈ F und δ(q, ) 6∈ F : Das leere Wort trennt p und q.)
2. Setze i := 0.
3. Für alle noch nicht markierten Paarmengen {r, s}, also alle Paarmengen {r, s} 6∈
Wenn {δ(r, a), δ(s, a)} ∈ Mi für ein a ∈ Σ, dann füge {r, s} zu Mi+1 hinzu.
S
j, j≤i Mj :
• Sei p = δ(r, a), q = δ(s, a). Da {p, q} ∈ Mi , gibt es einen Zeugen w mit
δ(p, w) ∈ F und δ(q, w) 6∈ F oder δ(p, w) 6∈ F und δ(q, w) ∈ F .
• Das Wort aw bezeugt, dass r und s nicht-äquivalent sind.
4. Halte, wenn keine neuen Paarmengen {r, s} markiert werden können. Ansonsten setze
i = i + 1 und gehe zu Schritt 3.
• Hoffentlich gilt p 6≡A q genau dann, wenn die Paarmenge {p, q} markiert wurde.
Der Verschmelzungsalgorithmus funktioniert!
Satz 3.3 Der Verschmelzungsalgorithmus findet alle Paare inäquivalenter Zustände.
62
3.1. Minimierung
Beweis: Sei P die Menge aller Paare {r, s} nicht-äquivalenter Zustände, die aber von unserem
Verfahren nicht gefunden werden. Wir müssen zeigen, dass P leer ist! Wir führen einen Beweis
durch Widerspruch und nehmen an, dass P nicht-leer ist. {p, q} ∈ P habe unter allen Paaren
in P einen kürzesten Zeugen w.
Fall 1: Wenn w = , dann ist
• δ(p, ) ∈ F und δ(q, ) 6∈ F oder δ(p, ) 6∈ F und δ(q, ) ∈ F ,
• bzw. p ∈ F und q 6∈ F oder p 6∈ F und q ∈ F .
Aber dann haben wir {p, q} im Schritt 1. markiert.
Fall 2: Wenn w = au für den Buchstaben a ∈ Σ, dann ist
• δ(p, au) ∈ F und δ(q, au) 6∈ F oder δ(p, au) 6∈ F und δ(q, au) ∈ F ,
• bzw.
δ(δ(p, a), u) ∈ F und δ(δ(q, a), u) 6∈ F oder δ(δ(p, a), u) 6∈ F und δ(δ(q, a), u) ∈
F .
Dann gilt δ(p, a) 6≡A δ(q, a) mit dem kürzeren Zeugen u: Aber {δ(p, a), δ(q, a)} muss nach
Annahme bereits markiert sein, und wir werden darauffolgend {p, q} markieren.
Ist unser Algorithmus effizient? Die Anzahl aller Zustandspaare ist durch |Q|2 nach oben
beschränkt. Wir werden deshalb höchstens |Q|2 Markierungsschritten benötigen.
Wir haben die Verschmelzungsrelation erfolgreich berechnet und bestimmen jetzt den Äquivalenzklassenautomaten.
3.1.3. Der Äquivalenzklassenautomat
Für Zustand p ∈ Q bezeichnet
[p]A := q ∈ Q | p ≡A q
die Äquivalenzklasse von p. Der Äquivalenzklassenautomat
A0 = (Σ, Q0 , δ 0 , q00 , F 0 )
für den DFA A = (Σ, Q, δ, q0 , F ) besitzt
• die Zustandsmenge
Q0 := [p]A | p ∈ Q ,
• den Anfangszustand q00 := [q0 ]A ,
• die Menge F 0 := [p]A | p ∈ F
• das Programm
δ0
mit
der akzeptierenden Zustände und
δ 0 ([p]A , a) := [ δ(p, a) ]A
für alle q ∈ Q und a ∈ Σ.
Wir haben alle Zustände einer Äquivalenzklasse [p]A zu einem einzigen Zustand zusammengefasst und haben diesen Zustand [p]A genannt. Folgerichtig arbeiten wir deshalb mit der Menge
Q0 aller Äquivalenzklassen von ≡A .
Als Menge der akzeptierenden Zustände des Äquivalenzklassenautomaten haben wir alle mit
einem akzpetierenden Zustand von A äquivalenten Zustände gewählt: Das scheint vernünftig,
63
3. Endliche Automaten und reguläre Sprachen
aber ist denn wirklich jeder mit einem akzeptierenden Zustand von A äquivalenter Zustand
auch selbst akzeptierend?
Um die Übergangsfunktion δ 0 für eine Äquivalenzklasse [p]A und einen Buchstaben a ∈ Σ zu
definieren, sind wir fast gezwungen, die Äquivalenzklasse des Zustands δ(p, a) zu wählen, und
genau das haben wir getan. Aber vorsichtig, gilt denn δ(p, a) ≡A δ(q, a) für je zwei äquivalente
Zustände p, q? Wenn nicht, dann wäre unsere Definition von δ 0 abhängig vom Vertreter der
Äquivalenzklasse, und das würde nichts Gutes verheißen!
Wir zeigen zuerst, dass die Definition von δ 0 unabhängig vom Vertreter der Äquivalenzklasse
ist. Danach können wir beweisen, dass A und A0 äquivalente DFAs sind.
Satz 3.4 A = (Σ, Q, δ, q0 , F ) sei ein DFA. Für alle Zustände p, q ∈ Q mit [p]A = [q]A gilt
δ(p, a) ≡A δ(q, a).
Beweis: Seien also p, q ∈ Q äquivalente Zustände, d.h. es gilt p ≡A q . Dann folgt:
p ≡A q =⇒ für alle w0 ∈ Σ∗ gilt: δ(p, w0 ) ∈ F ⇐⇒ δ(q, w0 ) ∈ F
=⇒ für alle w ∈ Σ∗ gilt: δ(p, aw) ∈ F ⇐⇒ δ(q, aw) ∈ F.
(3.2)
Für die letzte Implikation haben wir die Aussage der ersten Implikation auf alle w0 der Form
w0 = aw eingeschränkt. Jetzt beachte δ(p, aw) = δ(δ(p, a), w) und δ(q, aw) = δ(δ(q, a), w):
(3.2) =⇒ für alle w ∈ Σ∗ gilt: δ δ(p, a), w ∈ F ⇐⇒ δ δ(q, a), w ∈ F
=⇒ δ(p, a) ≡A δ(q, a).
Somit hängt die Definition von δ 0 nicht ab von der speziellen Wahl eines Vertreters der
Äquivalenzklasse.
Wir können jetzt nachweisen, dass A und A0 äquivalente DFAs sind!
Satz 3.5 A = (Σ, Q, δ, q0 , F ) sei ein DFA. Dann sind A und der Äquivalenzklassenautomat
A0 äquivalente DFAs, d.h. es gilt
L(A) = L(A0 ).
Beweis: Wir zeigen die Behauptung in drei Schritten.
1. Schritt 1: Zeige, dass
δ 0 ([q0 ]A , w) = [δ(q0 , w)]A
für alle w ∈ Σ∗ gilt. Wenn wir also wissen möchten, in welchem Zustand sich A0 nach Lesen
des Worts w befindet, dann bestimmen wir den Zustand p = δ(q0 , w) von A nach Lesen
von w. A0 befindet sich dann im Zustand [p]A und das ist alles andere als überraschend.
2. In den Schritten 2 und 3 zeigen wir die Inklusionen L(A) ⊆ L(A0 ) und L(A0 ) ⊆ L(A).
Verifikation von Schritt 1:
Durch vollständige Induktion über die Länge von w.
Induktionsanfang: Betrachte w = . Nach Definition von δ 0 gilt: δ 0 ([q0 ]A , ) = [q0 ]A =
[δ(q0 , )]A .
Induktionsschritt: Betrachte w = ua mit u ∈ Σ∗ und a ∈ Σ. Nach Induktionsannahme gilt
δ 0 ([q0 ]A , u) = [δ(q0 , u)]A . Wir müssen zeigen
64
3.1. Minimierung
Beh.: δ 0 ([q0 ]A , ua) = [δ(q0 , ua)]A .
Beweis:
δ 0 ([q0 ]A , ua)
=
δ 0 δ 0 ([q0 ]A , u), a
Induktionsannahme
=
δ 0 [δ(q0 , u)]A , a
=
δ 0 ([p]A , a),
Definition von δ 0
=
für p := δ(q0 , u)
[δ(p, a)]A = [δ δ(q0 , u), a ]A = [δ(q0 , ua)]A .
Schritt 1
Verifikation von Schritt 2: Zeige, dass L(A) ⊆ L(A0 ) gilt. Sei also w ein beliebiges Wort
in L(A).
1. A akzeptiert die Eingabe w, d.h. es gilt: p := δ(q0 , w) ∈ F .
2. Nach Schritt 1 gilt: δ 0 ([q0 ]A , w) = [δ(q0 , w)]A = [p]A .
3. Nach Definition von F 0 gilt: [p]A ∈ F 0 , denn p ∈ F .
Somit wird w von A0 akzeptiert, d.h. es gilt w ∈ L(A0 ).
Schritt 2
Verifikation von Schritt 3: Zeige, dass L(A0 ) ⊆ L(A) gilt. Wir zeigen eine Zwischenbehauptung.
Beh: Wenn p ≡A q und p ∈ F , dann auch q ∈ F .
Beweis: Wenn p ≡A q, dann folgt aus der Definition der Verschmelzungsrelation δ(p, w) ∈
F ⇐⇒ δ(q, w) ∈ F für alle Worte w ∈ Σ∗ . Also gilt insbesondere: δ(p, ) = p ∈ F ⇐⇒ δ(q, ) =
q ∈ F.
Zurück zu Schritt 3. Wir nehmen an, dass A0 die Eingabe w akzeptiert, d.h. es gilt: δ 0 ([q0 ]A , w) ∈
F 0 . Wir müssen w ∈ L(A) zeigen, d.h., dass δ(q0 , w) ∈ F gilt.
Nach Schritt 1 gilt:
δ 0 ([q0 ]A , w) = [δ(q0 , w)]A .
Aber δ 0 ([q0 ]A , w) ∈ F 0 . Nach Definition von F 0 muss es einen Zustand p ∈ F mit p ≡A δ(q0 , w)
geben. Also folgt aus der Zwischenbehauptung δ(q0 , w) ∈ F , d.h. w ∈ L(A).
Schritt 3
L(A) ⊆ L(A0 ) gilt nach Schritt 2 und L(A0 ) ⊆ L(A) nach Schritt 3. Es folgt L(A) = L(A0 )
und die Behauptung von Satz 3.5 ist gezeigt.
Der Äquivalenzautomat tut genau das, was wir von ihm verlangen. Allerdings müssen wir
später noch zeigen, dass A0 der kleinste mit A äquivalente DFA ist.
Bemerkung 3.1 Wenn wir den Äquivalenzklassenautomat für einen Moore oder Mealy Automaten bestimmen möchten, dann müssen wir die Verschmelzungsrelation dem Ausgabeverhalten
des Automaten anpassen: Für die Ausgabefunktion λ führen wir die Erweiterung λ für Worte
w ∈ Σ∗ ein und definieren dann die Äquivalenz von Zuständen p, q durch
p ≡A q ⇐⇒ für alle Worte w ∈ Σ∗ : λ(p, w) = λ(r, w).
65
3. Endliche Automaten und reguläre Sprachen
3.1.4. Ein Minimierungsalgorithmus
Um einen DFA A zu minimieren, entfernen wir zuerst alle vom Startzustand aus nicht
erreichbaren Zustände, berechnen dann die Äquivalenzklassen von ≡A und bestimmen den
Äquivalenzklassenautomaten A0 mit Hilfe der Klassen.
Algorithmus 3.2 Minimierungsalgorithmus
Eingabe: Ein DFA A = (Q, Σ, δ, q0 , F ).
Schritt 1: Entferne aus A alle überflüssigen Zustände, d.h. alle Zustände, die nicht von q0
aus erreichbar sind.
Schritt 2: Bestimme alle Paare {p, q} mit p, q ∈ Q und p 6≡A q:
1. Markiere alle Paarmengen in M0 :=
{p, q} : p ∈ F, q ∈ Q \ F
; Setze i := 0
2. Wiederhole
3.
Für alle {p, q} ∈ Mi und für alle x ∈ Σ tue folgendes:
4.
Markiere {p0 , q 0 } für alle p0 6= q 0 mit δ(p0 , x) = p und δ(q 0 , x) = q.
5.
Sei Mi+1 die Menge aller hierbei neu markierten Paarmengen.
6.
i := i + 1
7. bis Mi = ∅
8. Ausgabe: M := M0 ∪ · · · ∪ Mi−1 .
Schritt 3: Konstruiere A0 := (Q0 , Σ, δ 0 , q00 , F 0 ):
Q0 :=
[q]A : q ∈ Q , wobei [q]A =
q00 := [q0 ]A , F 0 :=
[q]A : q ∈ F
p ∈ Q : {p, q} 6∈ M
δ 0 : Q0 × Σ → Q0 mit δ 0 [q]A , a := [δ(q, a)]A für alle q ∈ Q und x ∈ Σ.
Ist Algorithmus 3.2 effizient? In jeder Iteration in Schritt 2 wird mindestens eine neue Paarmenge markiert: Es gibt also höchstens |Q|2 Iterationen und der Algorithmus ist effizient. In den
Abschnitten 3.1.5.1 und 3.1.5.2 werden wir die algorithmische Idee geschickter implementieren.
Die kritische Frage
„Ist A0 minimal?“
muss noch geklärt werden. Aber zuerst rechnen wir einige Beispiele durch.
Beispiel 3.6 Wir möchten den folgenden DFA minimieren:
a
b
a
a1
b1
a
b
bb
ε
b
b
a2
b2
a
a
66
b
a, b
3.1. Minimierung
Die Menge M0 : bb ist der einzige akzeptierende Zustand. Deshalb hat die Menge M0 die
Form
M0 = {{, bb}, {a1 , bb}, {a2 , bb}, {b1 , bb}, {b2 , bb}}.
Was haben wir gelernt? {bb} ist eine Klasse der Verschmelzungsrelation, die restlichen Klassen
sind disjunkte Teilmengen von {, a1 , a2 , b1 , b2 }.
Wir veranschaulichen die Menge aller Paare von Zuständen durch eine zweidimensionale
Tabelle und vermerken alle zu M0 gehörenden Paare.
a1
a2
b1
b2
bb
M0
M0
a1
M0
a2
M0
b1
M0
b2
Die Menge M1 : Wir inspizieren alle nicht mit M0 markierten Positionen der Tabelle und
überprüfen, ob wir eine mit M0 markierte Position erhalten, wenn der Buchstabe a (bzw. der
Buchstabe b) gelesen wird. Dies ist der Fall zum Beispiel für die Position in Zeile b1 und Spalte
, die zur Paarmenge {b1 , } gehört. Es ist δ(b1 , b) = bb und δ(, b) = a2 : {b1 , } gehört zur
Menge M1 , weil {bb, a2 } zur Menge M0 gehört.
a1
a2
b1
b2
bb
M1
M1
M0
M1
M1
M0
a1
M1
M1
M0
a2
M0
b1
M0
b2
Die Menge M2 : Diesmal inspizieren alle nicht mit M0 oder M1 markierten Positionen der
Tabelle und überprüfen, ob wir eine mit M1 markierte Position erhalten, wenn der Buchstabe
a (bzw. der Buchstabe b) gelesen wird. Dies ist der Fall zum Beispiel für die Position in Zeile
a1 und Spalte , die zur Paarmenge {a1 , } gehört. Es ist δ(a1 , b) = b1 und δ(, b) = a2 : {a1 , }
gehört zur Menge M2 , weil {b1 , a2 } zur Menge M1 gehört.
a1
a2
b1
b2
bb
M2
M2
M1
M1
M0
M1
M1
M0
a1
M1
M1
M0
a2
M0
b1
M0
b2
Die Menge M3 : Wir müssen nur die unmarkierten Positionen (mit den jeweiligen Paarmengen
{a2 , a1 } und {b2 , b1 }) inspizieren. Wir beginnen mit {a2 , a1 } und erhalten die unmarkierte
Paarmenge {a2 , a1 } für den Buchstaben a, bzw. die unmarkierte Paarmenge {b2 , b1 } für den
Buchstaben b: Die Paarmenge {a2 , a1 } bleibt unmarkiert.
Schließlich betrachten wir die Paarmenge {b2 , b1 }. Für den Buchstaben a erhalten wir die
unmarkierte Paarmenge {a2 , a1 } und für den Buchstaben b die Menge {bb, bb}, die natürlich
nicht markiert werden kann.
67
3. Endliche Automaten und reguläre Sprachen
Fazit: Es ist M3 = ∅ und wir kennen die Verschmelzungsrelation: Die einzigen nicht-trivialen
Äquivalenzbeziehungen sind a1 ≡A a2 und b1 ≡A b2 , die weiteren Zustände und bb bilden
jeweils ihre eigene Äquivalenzklasse. Wir erhalten nach Verschmelzung der Zustände a1 , a2 ,
bzw. b1 , b2 im Ausgangsautomaten
a
b
a1
a
b1
b
a
bb
ε
a, b
b
b
a2
b
b2
a
a
den Äquivalenzklassenautomaten
a, b
a
a, b
b
a
b
b
bb
a
Genügt es, wenn wir nur Zustände mit identischen Nachfolgezuständen verschmelzen? Nein,
der Automat aus dem letzten Beispiel ist ein Gegenbeispiel.
Beispiel 3.7 Wie stellt man fest, ob ein Wort das Suffix ab besitzt? Wir arbeiten mit dem
Alphabet Σ = {a, b} und speichern in unserem ersten Ansatz die beiden zuletzt gelesenen
Buchstaben im aktuellen Zustand ab. Wir benutzen deshalb die Zustände
Q = {, a, b, aa, ab, ba, bb}
• mit Startzustand q0 = („wir haben noch nichts gelesen“ und
• dem akzeptierenden Zustand ab: Die beiden letzten Buchstaben sind ab.
Hier ist unser erster Automat.
ε
a
a
a
a
aa
b
b
b
a
a
ab
b
ba
b
a
68
b
a
b
bb
b
3.1. Minimierung
Die Menge M0 : ab ist der einzige akzeptierende Zustand. Deshalb hat die Menge M0 die
Form
M0 = {{, ab}, {a, ab}, {b, ab}, {aa, ab}, {ba, ab}, {bb, ab}}.
Was haben wir gelernt? {ab} ist eine Klasse der Verschmelzungsrelation, die restlichen Klassen
sind disjunkte Teilmengen von {, a, b, aa, ba, bb}.
Wir veranschaulichen die Menge aller Paare von Zuständen wieder durch eine zweidimensionale
Tabelle und vermerken alle zu M0 gehörenden Paare.
a
b
aa
ab
ba
bb
M0
M0
a
M0
b
M0
aa
M0
M0
ab
ba
Die Menge M1 : Dazu inspizieren wir alle nicht mit M0 markierten Positionen der Tabelle
und überprüfen, ob wir eine mit M0 markierte Position erhalten, wenn der Buchstabe a (bzw.
der Buchstabe b) gelesen wird. Dies ist der Fall zum Beispiel für die Position oben links, die
die Paarmenge {a, } repäsentiert. Es ist δ(a, b) = ab und δ(, b) = b: {a, } gehört zur Menge
M1 , weil {ab, b} zur Menge M0 gehört.
Um nicht jede nicht markierte Position der Tabelle gesondert zu diskutieren, machen wir
die folgende Beobachtung. Für x = a oder x = b gilt: Wenn δ(p0 , x) = p, δ(q 0 , x) = q und
{p, q} ∈ M0 , dann ist {p0 , q 0 } ∈ M1 . Der Zustand ab wird aber genau dann erreicht, wenn der
Buchstabe x = b in den Zuständen a, aa oder ba gelesen wird. Demgemäß erhalten wir für M1
die Tabelle
a
b
aa
ab
ba
bb
M1
M1
M1
M0
M1
M0
M1
a
M1
M0
M1
b
M0
M1
aa
M0
M0
ab
M1
ba
Was haben wir gelernt?
1. Kein Zustand in der Menge a, aa, ba kann mit einem Zustand in der Menge , b, bb äquivalent
sein.
2. Die weiteren Äquivalenzklassen der Verschmelzungsrelation sind disjunkte Teilmengen
entweder von {a, aa, ba} oder von {, b, bb}.
Lassen sich die Zustände in {a, aa, ba} (bzw. in {, b, bb}) voneinander trennen?
Die Menge M2 :
1. Die Zustände a, aa, ba können nicht voneinander getrennt werden, da sie alle unter a auf
den Zustand aa und unter b auf den Zustand ab führen.
2. b und bb lassen sich ebenfalls nicht mehr trennen. Beide führen unter a auf ba und unter b
auf bb.
69
3. Endliche Automaten und reguläre Sprachen
3. Aber auch führt unter a auf die Klasse {a, aa, ba} und unter b auf b.
Es ist M2 = ∅, denn lässt sich nicht von b, bb trennen. Wie sehen die verschiedenen
Äquivalenzklassen aus?
(a) {ab} ist die Klasse des einzigen akzeptierenden Zustands,
(b) {a, aa, ba} und {, b, bb} sind die beiden verbleibenden Klassen.
Und die Verschmelzung führt vom Ausgangsautomaten
ε
a
a
b
a
a
a
b
aa
a
b
ab
ba
b
b
b
bb
a
b
b
a
auf den Äquivalenzklassenautomaten
b
ε
a
b
b
a
a
ab
a
Beispiel 3.8 Der DFA A mit Zustandsdiagramm
1
0
0
0
1
1
0
2
3
1
4
0
5
1
1
0
akzeptiert die Binärdarstellungen aller durch 6 teilbaren Zahle akzeptiert, also die Sprache
L(A) =
n
w ∈ {0, 1}∗ :
|w|
X
wi 2|w|−i ≡ 0 (mod 6) .
o
(3.3)
i=1
Wir möchten wieder den Äquivalenzklassenautomaten A0 bestimmen und stellen zuerst die
Tabelle aller Paarmengen auf:
70
3.1. Minimierung
1
2
3
4
5
M0
M0
M0
M0
M0
0
M2
M1
M2
1
M1
M2
2
M1
M1
3
M2
4
Wir können somit die Zustände 1 und 4, aber auch die Zustände 2 und 5 verschmelzen.
3.1.5. Schnellere Implementierungen
In der Verschmelzungsrelation fragen wir, ob sich zwei Zustände p, q – als Startzustände
aufgefasst – auf irgendeinem Wort unterscheiden. Mit dem Verschmelzungsalgorithmus 3.1
haben wir für jedes Paar {p, q} inäquivalenter Zustände einen Zeugen w ∈ Σi für ein geeignetes
i gefunden (siehe Satz 3.3). Der Verschmelzungsalgorithmus beginnt mit der Menge M0 aller
Paare, die durch das leere Wort getrennt werden und bestimmt die Menge Mi in seiner iten
Iteration. Mit einem induktivem Argument folgt, dass Mi die Menge aller Paare ist, die von
einem Zeugen der Länge i getrennt werden.
Definition 3.7 Sei A = (Σ, Q, δ, q0 , F ) ein DFA. Für jede natürliche Zahl i definieren wir die
Verschmelzungsrelation ≡iA der Ordnung i. Dazu setze für alle Zustände p, q ∈ Q
p ≡iA q :⇐⇒
für alle Worte w ∈ Σ∗ der Länge höchstens i gilt
( δ(p, w) ∈ F ⇐⇒ δ(q, w) ∈ F ).
Was tut der Verschmelzungsalorithmus? Es ist
p ≡iA q ⇐⇒ {p, q} 6∈
[
Mj ,
j, j≤i
denn Mj ist die Menge aller Paare mit einem Zeugen der Länge j. Der Verschmelzungsalgorithmus berechnet also nacheinander die Äquivalenzklassen ≡0A , ≡1A , . . . , ≡kA , wobei ≡kA
die Verschmelzungsrelation ist. Die anfängliche Zerlegung Q = F ∪ (F \ Q) der Zustandsmenge durch die Verschmelzungsrelation der Ordnung 0 wird sukzessive verfeinert bis die
Verschmelzungsrelation ≡A erreicht wird.
Um die gewünschte Verfeinerung zu erreichen, betrachtet man in der iten Iteration von
Algorithmus 3.2 alle noch nicht getrennten Zustände p, q. Wenn also p ≡i−1
q gilt, dann
A
untersucht man die Nachfolgezustände δ(p, c), δ(q, c) für alle Buchstaben c ∈ Σ: Gilt δ(p, c) 6≡i−1
A
δ(q, c) (zum Beispiel mit dem Zeugen w), haben wir die Trennung p 6≡iA q (mit dem Zeugen
cw) erreicht.
Im Folgenden setzen wir diesen algorithmischen Ansatz cleverer um. Wir beginnen mit dem
Algorithmus von Moore und schließen mit dem Champion, dem Algorithmus von Hopcroft.
3.1.5.1. Der Algorithmus von Moore
i
Wie lässt sich die Relation ≡i+1
A mit kleinem Aufwand berechnen, wenn ≡A bekannt ist?
Algorithmus 3.3 Der Algorithmus von Moore
71
3. Endliche Automaten und reguläre Sprachen
1. Der DFA A = (Σ, Q, δ, q0 , F ) ist gegeben. Z0 = (F, Q \ F ) ist die Zerlegung der Verschmelzungsrelation der Ordnung 0. Setze i = 0.
2. Wiederhole bis Zi = Zi+1 :
(a) Zi besteht aus den Äquivalenzklassen von ≡iA .
(b) Für alle Buchstaben a ∈ Σ und alle Äquivalenzklassen P von Zi : Bestimme die Zerlegung
a
Zi (a), hervorgerufen durch die Äquivalenzklassen der Äquivalenzrelation ≡A mit
i
i
r ≡i,a
A s :⇐⇒ r ≡A s und δ(r, a) ≡A δ(s, a).
(c) Beachte
i,a
r ≡i+1
A s ⇐⇒ r ≡A s für alle a ∈ Σ.
Bestimme die Zerlegung Zi+1 von ≡i+1
A als Verfeinerung der Zerlegungen Zi (a).
(d) Setze i = i + 1.
Aufgabe 23
Sei L = L(A) für einen DFA A = (Σ, Q, δ, q0 , F ). Definiere die Tiefe t von A als die kleinste Zahl i, so dass ≡iA
und ≡i+1
übereinstimmen.
A
(a) Zeige, dass die Tiefe für alle Automaten B mit L(B) = L(A) übereinstimmt.
Die Tiefe eines DFA hängt also nur von der Sprache L(A) ab. Demgemäß wird die Tiefe einer regulären
Sprache L durch die Tiefe irgendeines DFA definiert, der L akzeptiert.
(b) Zeige, dass es keinen DFA mit n Zuständen und Tiefe größer als n − 2 gibt.
(c) Sei L eine reguläre Sprache. Dann ist die Tiefe von L höchstens Index(L) − 2.
Aufgabe 24
Sei Σ = {a, b}.
(a) Zeige: Eine Sprache L besitzt genau dann die Tiefe 0, wenn L einen DFA mit höchstens zwei Zuständen
besitzt.
(b) Für jedes n ∈ N bestimme eine Sprache der Tiefe genau n.
Aufgabe 25
Sei Σ = {a, b} und sei w = w1 · · · wn ein Wort der Länge n über Σ. Wir definieren
Lw = {u ∈ {a, b}∗ : w ist ein Teilwort von u }.
Sei Aw = (Σ, Q, δ, q0 , F ) ein DFA mit Q = {0, . . . , n}, q0 = 0 und F = {n}.
(1) Definiere die Zustandsüberführungsfunktion δ so, dass L(Aw ) = Lw gilt.
(2) Führe den Algorithmus von Moore auf dem DFA Aw aus. Begründungen sind nicht erforderlich.
• Bestimme die Tiefe Tw von Aw .
• Beschreibe die Äquivalenzklassen ≡iA für alle i ≤ Tw .
Aufgabe 26
Für ein binäres Wort w, also für ein Wort w ∈ {0, 1}∗ , definiere die Sprache
Kw = { ak : w1+k mod n = 1}.
Bestimme die Tiefe der Sprachen Kw für die folgenden Wahlen von w:
(a) w = (01)n ,
(b) w ∈ {0, 1}n besitzt genau eine Eins.
72
3.1. Minimierung
Satz 3.6 Sei A = (Σ, Q, δ, q0 , F ) ein DFA mit n = |Q| und sei t die Tiefe von L(A). Dann
bestimmt Moores Algorithmus die Verschmelzungsrelation ≡A in Zeit O(t · |Σ| · n)
Beweis: Es gilt p ≡i+1
A q genau dann, wenn sich p, q – als Startzustände aufgefasst – nicht auf
Worten der Länge höchstens i + 1 unterscheiden. Das ist aber genau dann der Fall, wenn sich
weder p, q noch δ(p, a), δ(q, a) (für irgendeinen Buchstaben a) auf Worten der Länge höchstens
i unterscheiden. Also ist Zi+1 , die Zerlegung von ≡i+1
A , die Verfeinerung der Zerlegungen Zi (a),
und Algorithmus 3.3 ist korrekt.
Wir kommen zur Laufzeitanalyse. Die Zerlegung Zi (a) aus Schritt (2b) kann in Zeit O(n)
bestimmt werden, wenn die Zerlegung Zi bekannt ist. Hier setzen wir voraus, dass δ in einem
Schritt ausgewertet werden kann. In Schritt (2c) wird die Zerlegung Zi+1 als Verfeinerung der
|Σ| vielen Zerlegungen Zi (a) bestimmt.
Aufgabe 27
Um eine Zerlegung der Zustandsmenge Q in k Klassen darzustellen, verwende die Zahlen 0, . . . , k − 1 als
Klassenkennungen und weise jedem Zustand die Kennung seiner Klasse zu.
(a) Zeige, dass jede Zerlegung Zi (a) in Zeit O(n) bestimmt werden kann, wenn Zi bekannt ist.
(b) Zeige, dass Zi+1 in Zeit O(|Σ| · n) bestimmt werden kann, wenn die Zerlegungen Zi (a) für alle Buchstaben
a ∈ Σ bekannt sind.
Die Behauptung folgt, da Schritt 2 höchstens t mal wiederholt wird, wobei t die Tiefe von
L(A) ist.
Da die Tiefe eines DFA mit n Zuständen höchstens n beträgt, ist die Laufzeit von Moores
Algorithmus durch O(|Σ| · n2 ) beschränkt.
3.1.5.2. Der Algorithmus von Hopcroft
Die Berechnung des Äquivalenzklassenautomaten bleibt weiterhin unser Ziel. Sei Z eine
Zerlegung von Q. Wir nehmen an, dass Z die Verfeinerungseigenschaft besitzt: Jede
Klasse von Z ist Vereinigung von Äquivalenzklassen von ≡A . Der Algorithmus von Hopcroft
versucht ebenso wie der Algorithmus von Moore die Klassen der Verschmelzungsrelation durch
sukzessive Verfeinerung aus der Anfangszerlegung (F, Q \ F ) zu bestimmen.
Wann müssen wir eine Klasse X der Zerlegung Z weiter aufteilen?
Definition 3.8 Sei A = (Σ, Q, δ, q0 , F ) ein DFA und seien X, Y ⊆ Q Teilmengen von Q.
(a) Wir sagen, dass Y die Menge X (für den Buchstaben c) zerlegt, falls es x1 , x2 ∈ X mit
δ(x1 , c) ∈ Y und δ(x2 , c) 6∈ Y gibt.
(b) Setze
δc−1 (Y ) := { q ∈ Q : δ(q, c) ∈ Y }.
Seien X, Y Klassen von Z. Angenommen, Y zerlegt die Menge X für den Buchstaben c. In
welche Teilmengen ist die Menge X zu zerlegen, so dass die Verfeinerungseigenschaft erhalten
bleibt? Wenn δ(x1 , c) = z1 ∈ Y und δ(x2 , c) = z2 6∈ Y für Zustände x1 , x2 ∈ X gilt, dann
gehören z1 , z2 zu verschiedenen Klassen von Z und damit zu verschiedenen Klassen der
Verschmelzungsrelation, denn die Verschmelzungsrelation verfeinert K. Also sind z1 , z2 durch
einen Zeugen w trennbar, und wir können x1 , x2 durch den Zeugen cw voneinander trennen.
Wir sollten also X zerlegen in die Menge der Zustände, die unter c in einen Zustand innerhalb
73
3. Endliche Automaten und reguläre Sprachen
der Klasse Y bzw. in einen Zustand außerhalb Y wechseln, d.h. wir zerlegen X in die beiden
Klassen
X ∩ δc−1 (Y ) und X \ δc−1 (Y ).
(3.4)
Algorithmus 3.4 Der Algorithmus von Hopcroft
1. Der DFA A = (Σ, Q, δ, q0 , F ) ist gegeben. Z = (F, Q \ F ) ist die Anfangszerlegung. Setze
Check := {Y }, wobei Y die kleinere der Mengen F, Q \ F ist.
/* Während der Berechnung werden die folgenden Invarianten gelten:
(a) Die Äquivalenzklassen der Verschmelzungsrelation ≡A verfeinern Z, d.h. jede Klasse
von Z ist Vereinigung von Äquivalenzklassen von ≡A .
(b) Die Klassen X in Z stimmen genau dann mit den Klassen der Verschmelzungsrelation
überein, wenn in (3.4) keine neuen Klassen erzeugt werden, d.h. wenn X ∩δc−1 (Y ) = X
oder X ∩ δc−1 (Y ) = ∅ für alle Klassen X in Z und alle Klassen Y in Check gilt.
(c) Es gilt X ∩ δc−1 (Q \ F ) = X \ δc−1 (F ) sowie X \ δc−1 (Q \ F ) = X ∩ δc−1 (F ) =⇒ Für
jede Teilmenge X ⊆ Q erzeugen Y = F und Y = Q \ F dieselben Kinderklassen =⇒
Es ist nicht notwendig, dass Check anfänglich auch die Klasse Q \ F enthält.
*/
2. Solange Check nichtleer ist, wiederhole
(a) Wähle irgendeine Klasse Y aus Check und entferne Y aus Check.
(b) Für jeden Buchstaben c ∈ Σ: bestimme δc−1 (Y ) = { q ∈ Q : δ(q, c) ∈ Y } und alle
Klassen X in Z, die von Y zerlegt werden:
• Ersetze die „Mutterklasse“ X in Z durch die „Kinderklassen“ X ∩ δc−1 (Y ) und
X \ δc−1 (Y ).
• Wenn X ∈ Check, dann ersetze X in Check durch X ∩ δc−1 (Y ) und X \ δc−1 (Y ).
Ansonsten, wenn X 6∈ Check, dann füge die kleinere der beiden Mengen X ∩
δc−1 (Y ) und X \ δc−1 (Y ) zu Check hinzu.
Aufgabe 28
Der Algorithmus von Hopcroft arbeitet zu jedem Zeitpunkt mit einer Zerlegung Z und der Menge Check, in
der einige der Mengen aus Z gesammelt sind. Wir behaupten, dass die folgende Invariante für alle Klassen X1
und X2 , die zur Zerlegung Z gehören, gilt:
Wenn X1 die Klasse X2 zerlegt, dann gibt es Klassen Y1 , . . . , Y ∈ Check, die die Zerlegung
X2 =
X2 ∩
δc−1 (X1 )
∪
X2 \
δc−1 (X1 )}
verfeinern: X2 wird also von Y1 , . . . , Yk sukzessive zerlegt, so dass beide Kinderklassen (mgl. trivial)
zerlegt werden. Die Reihenfolge, in der Y1 , . . . , Yk ausgewählt werden, ist beliebig.
Wir unterbrechen Hopcrofts Algorithmus zu einem beliebigen Zeitpunkt und machen die folgenden Annahmen:
(1) Die Invariante sei bisher erfüllt.
(2) Der Algorithmus habe gerade die Klasse Y aus der Menge Check entfernt und Y zerlege die Klasse X.
Es gelte X 6∈ Check.
In diesem Fall wird Hopcrofts Algorithmus X in der Zerlegung Z durch die Kinderklassen X ∩ δc−1 (Y ) und
X \ δc−1 (Y ) ersetzen, aber nur die kleinere der Kinderklassen in Check einfügen.
Zeige: Die Invariante gilt auch nachdem (nur) die kleinere Kinderklasse in Check aufgenommen wurde.
Hopcrofts Algorithmus ist wesentlich schneller als Moores Algorithmus!
74
3.1. Minimierung
Satz 3.7 Sei A = (Σ, Q, δ, q0 , F ) ein DFA. Hopcrofts Algorithmus berechnet die Klassen der
Verschmelzungsrelation ≡A in Zeit O(|Σ| · n · log2 n), wobei n = |Q| ist.
Beweis: Warum funktioniert Hopcrofts Algorithmus?
• Ist die Aktualisierung von Z korrekt?
– Wird eine „Mutterklasse“ X der Zerlegung Z in Schritt ii) zerlegt, dann können
Zustände in der „Kinderklasse“ X ∩ δc−1 (Y ) nicht mit Zuständen in der anderen
„Kinderklasse“ X \ δc−1 (Y ) äquivalent sein. Die Ersetzung von X in der Zerlegung
Z durch die Kinderklassen X ∩ δc−1 (Y ) und X \ δc−1 (Y ) ist richtig.
• Ist die Aktualisierung der Menge Check korrekt?
– Wird eine Menge Y aus Check entfernt, dann wird Y , nach seiner Verarbeitung in
Schritt 2b), keine Klassen in Z mehr zerlegen: Y wird richtigerweise entfernt.
– Wird X durch Y zerlegt und gehört X zu Check, dann muss die Mutterklasse X in
der Menge Check durch die Kinderklassen X ∩ δc−1 (Y ), X \ δc−1 (Y ) ersetzt werden.
– Gilt hingegen X 6∈ Check, dann wird keine Klasse in Z durch X zerlegt: Unter einem
Buchstaben c sind entweder nur Zustände innerhalb von X Nachfolgezustände oder
nur Zustände außerhalb von X.
In diesem Fall wird X nur durch die kleinere der Kinderklassen ersetzt. Zeige die
nächste Übungsaufgabe.
Wir kommen zur Analyse der worst-case Laufzeit. Wir sagen, dass ein Zustandsübergang
δ(q, c) = r genau dann zu einer Klasse Y (der gegenwärtigen Zerlegung Z) gehört, wenn
r ∈ Y . Sei
tc (Y ) := |δc−1 (Y )|
die Anzahl der Übergänge, die zu Y gehören.
Aufgabe 29
Wir wenden Hopcrofts Algorithmus auf einen DFA A = (Σ, Q, δ, q0 , F ) an. Wie schnell kann eine einzelne
Iteration implementiert werden?
Wir fixieren einen Buchstaben c ∈ Σ. In einer Iteration wählt Hopcrofts Algorithmus eine Klasse in Check aus,
entfernt sie aus Check, bestimmt alle von Y zerlegten Klassen X ∈ Z und führt die Ersetzungen – in Z und
gegebenenfalls in Check – von X durch die Kinderklassen X ∩ δc−1 (Y ) und X \ δc−1 (Y ) aus.
Zeigen Sie: In Zeit O(|Σ| · |Q|) können Datenstrukturen initialisiert werden, so dass jede Iteration in Zeit
O(tc (Y )) abläuft, wobei tc (Y ) = |δc−1 (Y )| die Anzahl der Zustände q ∈ Q ist, die unter c in einen Zustand aus
Y wechseln.
Hinweis: Welche Aufgaben soll die Datenstruktur erfüllen?
• Für jede Klasse X sollten die folgenden Informationen bereitgestellt werden:
– Die Größe von X,
– eine Liste aller Elemente q ∈ X mit δc−1 ({q}) 6= ∅
– und ein zu Null initialisierter Zähler.
• Die Mengen Z und Check sollten als Mengen von Zeigern auf die Klassen in Z bzw. Check implementiert
werden.
• Für jeden Zustand q ∈ Q sollte man auf alle Zustände in δc−1 ({q}) in Linearzeit – also in Zeit O(|δc−1 ({q})|)
– zugreifen können.
Wenn die Menge Y mit r ∈ Y aus Check entfernt wird und eine andere Menge Y 0 mit r ∈ Y 0
irgendwann später zu Check hinzugefügt wird, dann ist
|Y 0 | ≤ |Y |/2
75
3. Endliche Automaten und reguläre Sprachen
als Konsequenz von Schritt 2b: Zum Zeitpunkt des Hinzufügens von Y 0 gehört die Vorfahrenklasse Y der Kinderklasse Y 0 nicht zu Check, denn r ∈ Y und Y wurde ja aus Check
entfernt.
Sei C die Menge aller Klassen Y , die irgendwann zur Menge Check gehört haben. Dann gehört
jeder Zustandsübergang somit zu höchstens log2 n verschiedenen Mengen Y in Check, und wir
erhalten für die Gesamtlaufzeit
X X
tc (Y ) =
c∈Σ Y ∈C
X X
c∈Σ Y ∈C
=
1
X
q∈Q : δ(q,c)∈Y
X X
1 =
X
Y ∈C : δ(q,c)∈Y
c∈Σ q∈Q
X
(c,q)∈Σ×Q
log2 n = |Σ| · n · log2 n.
Das war zu zeigen.
Bemerkung 3.2 Während sich Moores Algorithmus als ein Algorithmus auffassen lässt,
der Klassen in der „Reihenfolge der Breitensuche“ abarbeitet, ist Hopcrofts Algorithmus
völlig frei in der Auswahl der Reihenfolge. Hopcrofts Algorithmus garantiert dabei, dass ein
Zustandsübergang nur zu logarithmisch vielen Klassen gehört. Diese Eigenschaft wird erreicht,
weil eine zerlegte Mutterklasse, die nicht zu Check gehört, durch die kleinere ihrer beiden
Kinderklassen ersetzt wird.
Aufgabe 30
Wir erinnern an die Definition der Fibonacci-Zahlen mit f1 := 1, f2 := 2 und fk := fk−1 + fk−2 . Die FibonacciWorte werden ebenfalls rekursiv definiert und zwar ist W1 := 0, W2 := 01 und Wk := Wk−1 Wk−2 . Insbesondere
folgt |Wk | = fk .
Wir definieren einen „zyklischen“ Automaten FIBk = (Σ, Qk , δk , q0 , Fk ) mit Alphabet Σ = {a}, der Zustandsmenge Qk := {1, . . . , fk }, den Zustandsübergängen δk (i, a) = i + 1 für 1 ≤ i < fk und δk (fk , a) = 1, dem
Anfangszustand q0 = 1 und der Menge Fk = { i ∈ Qk : (Wk )i = 1}. Also sind genau die Zustände i ∈ Qk
akzeptierend, die einer Eins in Wk entsprechen.
Wie arbeitet Hopcrofts Algorithmus auf FIBk , d.h. welche Zerlegungen von Qk treten auf? Um diese Frage zu
beantworten definieren wir für ein Wort u ∈ {0, 1}∗ die Zustandsmenge
(u)
Qk
()
:= { i : 1 ≤ i ≤ n und u ist ein in Position i beginnendes Teilwort von Wk Wk }.
(0)
Es ist also Qk = Qk , Qk
Wk Wk der Länge t.
(1)
= Qk \ Fk und Qk
= Fk . Schließlich sei TWk (t) die Menge aller Teilworte von
Die folgenden Eigenschaften können ohne Beweis für diese und die nächsten Aufgabe benutzt werden.
(1) Für alle t < fk gibt es genau ein Teilwort u ∈ TWk (t) mit u0, u1 ∈ TWk (t + 1).
(2) Kein Teilwort von Wk Wk der Länge fk − 1 beginnt in zwei verschiedenen Positionen aus {1, . . . , fk }.
(u0)
(3) Für alle Worte u ∈ {0, 1}∗ gilt |Qk
(u1)
|, |Qk
(u)
| ≥ |Qk |/4.
Wir möchten verstehen wie Hopcrofts Algorithmus für FIBn arbeitet.
(a) Zeige alle Zerlegungen von Q4 , wenn Hopcrofts Algorithmus auf FIB4 angewandt wird. Für jede Zerlegung:
(u)
Welche Klassen Q4 treten auf und wie sieht die dazu gehörende Menge Check aus? Eine Begründung
ist nicht erforderlich.
(b) Zeige, dass FIBk für jedes k ≥ 1 minimal ist.
Hinweis: Benutzen Sie Eigenschaft (2).
(1)
(0)
(c) Zeige mit vollständiger Induktion, dass |Qk | = Fk−2 und |Qk | = Fk−1 für alle k ≥ 3 gilt.
(1)
(10)
(d) Zeige mit vollständiger Induktion, dass Qk = Qk
76
für alle k ≥ gilt.
3.1. Minimierung
Aufgabe 31
(u)
Wir nehmen an, dass die Zerlegung Z zum Zeitpunkt t ≤ fk − 2 aus allen Mengen Qk
(v)
besteht. Desweiteren gelte Check = {Qk } für ein v ∈ TWk (t).
für Worte u ∈ TWk (t)
(a) Zeige mit den Aufgabeteilen i) und ii), dass die Annahme auch zum „Zeitpunkt“ t + 1 gilt. D.h. nachdem
(v)
(v)
Qk aus Check entfernt wurde und alle möglichen Zerlegungen durch Qk ausgeführt wurden, besteht die
(u)
(v)
Zerlegung Z aus allen Mengen Qk mit u ∈ TWk (t+1) und es ist Check = {Qk } für ein v ∈ TWn (k +1).
(u)
(v)
i) Zeige: Wenn Qk von Qk zerlegt wird, dann gilt av = ub für Buchstaben a, b ∈ {0, 1}. Zusätzlich
(u)
(u0)
(u1)
wird Qk in der Zerlegung Z durch Qk und Qk ersetzt.
(v)
(u)
ii) Zeige mit Hilfe von Eigenschaft (1) und Aufgabe 2b): Qk zerlegt genau eine Klasse Qk in Z und
(u0)
(u1)
wird in Check durch die kleinere der Kinderklassen Qk , Qk ersetzt. Für alle übrigen Mengen
(w)
(w)
(wcw )
Qk ∈ Z gibt es genau ein Bit cw ∈ {0, 1} mit Qk = Qk
.
(b) Es sei n := fk . Sei T (n) die Laufzeit von Hopcrofts Algorithmus für FIBk . Zeige, dass T (n) = Ω(n log4 n)
gilt.
Hinweis: Benutze Teil (a), um die Entwicklung der Zerlegung Z zu verfolgen. In Teil (c) der vorigen
(1)
(0)
Aufgabe wird gezeigt, dass |Qk | = fk−2 und |Qk | = fk−1 gilt: Anfänglich sind die Klassen von Z also
sehr groß und verkleinern sich nach Eigenschaft (3) um höchstens den Faktor 4. Nach Eigenschaft (2)
müssen alle Klassen am Ende ein-elementig sein.
3.1.6. Die Myhill-Nerode Relation
Was haben wir bisher gelernt? Der ursprüngliche Automat A = (Σ, Q, δ, q0 , F ) und sein
Äquivalenzklassenautomat A0 sind äquivalent. Wir können A0 effizient berechnen. Aber hat A0
unter allen mit A äquivalenten DFAs die kleinste Zustandszahl?
Sei A = (Σ, Q, δ, q0 , F ) ein DFA. Wenn zwei Worte u, v ∈ Σ∗ auf denselben Zustand von A
führen (d.h. wenn δ(q0 , u) = δ(q0 , v) gilt), dann folgt
für alle w ∈ Σ∗ : (uw ∈ L(A) ⇐⇒ vw ∈ L(A)).
(3.5)
Wir interpretieren Eigenschaft (3.5) als Definition der „Äquivalenz“ der Worte u und v und
führen deshalb die Myhill-Nerode Relation ein.
Definition 3.9 Σ sei eine endliche Menge und L sei eine Sprache über Σ, d.h. es gilt L ⊆ Σ∗ .
(a) Die Myhill-Nerode Relation ≡L für L ist eine 2-stellige Relation über Σ∗ . Für alle
Worte u, v ∈ Σ∗ definiere
u ≡L v :⇐⇒ für alle w ∈ Σ∗ gilt: uw ∈ L ⇐⇒ vw ∈ L .
(b) Wir sagen, dass das Wort w ∈ Σ∗ die Worte u, v ∈ Σ∗ trennt, bzw. dass w ein Zeuge für
die Inäquivalenz von u und v ist, wenn
uw ∈ L ∧ vw 6∈ L ∨ uw 6∈ L ∧ vw ∈ L
(c) Index(L) ist die Anzahl der Äquivalenzklassen von ≡L .
77
3. Endliche Automaten und reguläre Sprachen
Die Myhill-Nerode Relation erlaubt, dass wir die Perspektive der DFAs aufgeben können und
uns nur noch auf die Struktur der Sprache L konzentrieren dürfen.
Beachte die Unterschiede zur Verschmelzungsrelation ≡A . Während ≡A auf dem DFA A
besiert, ist die Sprache L maßgeblich für die Nerode-Relation ≡L . Kurz gefasst: ≡A spricht
über die Äquivalenz von Zuständen, ≡L über die Äquivalenz von Worten.
Satz 3.1 Sei L eine beliebige Sprache. Dann ist die Nerode-Relation für L eine Äquivalenzrelation.
Beweis: Die Nerode-Relation ≡L ist
1. reflexiv, denn f.a. z ∈ Σ∗ gilt uz ∈ L ⇐⇒ uz ∈ L und deshalb gilt u ≡L u für alle Worte
u ∈ Σ∗ .
2. symmetrisch, denn aus u ≡L v folgt uz ∈ L ⇐⇒ vz ∈ L f.a. z ∈ Σ∗ und damit auch
vz ∈ L ⇐⇒ uz ∈ L f.a. z ∈ Σ∗ . Die letzte Aussage ist aber äquivalent zu v ≡L u.
3. transitiv, denn aus u ≡L v und v ≡L w folgt f.a. z ∈ Σ∗ uz ∈ L ⇐⇒ vz ∈ L ∧ vz ∈
L ⇐⇒ wz ∈ L . Also folgt uz ∈ L ⇐⇒ wz ∈ L f.a. z ∈ Σ∗ und damit u ≡L w.
Beispiel 3.9 (Die Partität). Wir betrachten die Sprache
P = {w ∈ {0, 1}∗ : w hat eine gerade Anzahl von Einsen }.
Es ist ε 6≡P 1 mit dem leeren Wort als Zeugen. Sei u ein beliebiges Wort mit gerade vielen
Einsen und v ein beliebiges Wort mit ungerade vielen Einsen. Dann gilt
εw ∈ P ⇐⇒ uw ∈ P
und 1w ∈ P ⇐⇒ vw ∈ P
für alle w ∈ Σ∗ . Mit anderen Worte, die Nerode-Relation für P hat genau zwei Äquivalenzklassen
– es ist Index(P ) = 2 – mit den jeweiligen Vertretern ε und 1.
Zusammengefasst: Es gilt
[]P
= { w ∈ {0, 1}∗ : w hat gerade viele Einsen } und
[1]P
= { w ∈ {0, 1}∗ : w hat ungerade viele Einsen }.
Wir bauen aus diesen beiden Äquivalenzklassen den sogenannten Nerode-Automaten NP . Hier
ist unser Rezept: Für jedes Wort w ∈ {0, 1}∗ soll NL nach Lesen von w den Zustand [w]P
erreichen.
• Damit ist schon klar, dass q0 = []P der Anfangszustand sein muss und q0 ist ein
akzeptierender Zustand, denn ∈ P .
• Der Nachfolgezustand unter 0 muss die Äquivalenzklasse von 0 = 0 sein und das ist die
Klasse []P , denn 0 ≡L . Der Nachfolgezustand unter 1 ist dann die Klasse [1]P .
• Der Zustand [1]P ist nicht akzeptierend, denn 1 6∈ P . Lesen wir im Zustand [1]P eine 0,
dann müssen wir die Äquivalenzklasse von 10 erreichen und das bleibt die Klasse [1]P .
Lesen wir eine 1, ist die Klasse von 11, also die Klasse []P unser Ziel.
Hier ist der Nerode-Automat NL :
78
3.1. Minimierung
0
0
1
[1]P
[]P
1
Ende von Beispiel 3.9
Wir sind im Beispiel 3.9 sehr unvorsichtig gewesen, denn wir haben nur die Vertreter und 1
der Nerode-Klassen betrachtet. Wir müssen aber beispielsweise für jeden Buchstaben a ∈ {0, 1}
garantieren, dass aus u ≡P 1 auch ua ≡P 1a folgt, denn nur dann erreicht NP nach Lesen von
ua den Zustand [ua]. Kein Problem, es genügt wenn wir nur mit den Vertretern arbeiten:
Satz 3.2 Sei L eine beliebige Sprache über dem Alphabet Σ und a ∈ Σ ein beliebiger Buchstabe.
Dann gilt für beliebige Worte u, w ∈ Σ∗
u ≡L w =⇒ ua ≡L wa.
Beweis: Angenommen, es ist u ≡L w, aber ua 6≡L wa. Dann gibt es einen Zeugen v ∈ Σ∗ , so
dass zum Beispiel uav ∈ L, aber wav 6∈ L. Aber dann folgt u ≡
6 L w mit dem Zeugen av, im
Widerspruch zur Annahme
Beispiel 3.10 In Beispiel 3.7 haben wir einen DFA für die „Suffixsprache“ S = {a, b}∗ · ab
minimiert. Hier fragen wir uns wie die Nerode-Klassen [w]S aussehen und ob wir wieder den
Nerode-Automaten NS bauen können. Fangen wir gleich mit dem Nerode-Automaten an.
• Der Startzustand ist die Klasse des leeren Worts, also q0 = []S . Hier gibt es nichts zum
Nachdenken.
Wenn w ≡S , dann kann w nicht mit einem a enden, denn sonst trennt der Zeuge v = b
das Wort w von . Auch kann w nicht mit ab enden, denn dann trennt der Zeuge ε. Also
folgt
[]S = { ubb : u ∈ {a, b}∗ } ∪ {, b}.
(3.6)
– Lesen wir den Buchstaben a haben wir einen Übergang zur Äquivalenzklasse von
a = a. Wir haben eine neue Äquivalenzklasse gefunden, denn 6≡S a mit dem
Zeugen v = b.
– Lesen wir den Buchstaben b erreichen wir die Äquivalenzklasse von b. Aber ≡S b
gilt (vgl. (3.6) und wir kehren unter b zum Startzustand zurück.
• Wann gilt w ≡S a für ein Wort w ∈ {a, b}∗ ? Wenn w mit einem b endet, dann folgt
w 6≡S a mit dem Zeugen b. Man überzeuge sich, dass ua ≡S a für alle Worte u gilt und
wir erhalten
[a]S = { ua : u ∈ {a, b}∗ }.
(3.7)
– Es ist aa ≡S a und NS verbleibt im Zustand [a]S , wenn a gelesen wird.
– Es gilt ab 6≡S a und ab 6≡S jeweils mit dem Zeugen : Wird der Buchstabe b
gelesen, dann wechselt NS vom Zustand [a]S in den neuen Zustand [ab]S .
79
3. Endliche Automaten und reguläre Sprachen
• Wann gilt w ≡S ab? Es muss w ∈ S gelten, denn ansonsten trennt das leere Wort w von
ab. Für jedes Wort w ∈ S gilt
abv ∈ S ⇐⇒ ((v ∈ S) ∨ (v = )) ⇐⇒ wv ∈ S
und als Konsequenz folgt
[ab]S = S.
– Wenn NS den Buchstaben a im Zustand [ab]S liest, dann gilt aba ≡S a und NS
wechselt in den Zustand [a]S .
– Liest NS hingegen den Buchstaben b, dann ist abb ≡S b und NS wechselt in den
Anfangszustand []S .
Wir haben keine neue Äquivalenzklasse gefunden, die Konstruktion des Nerode-Automaten
NS ist abgeschlossen und damit haben wir auch alle Nerodeklassen gefunden. Insbesondere
gilt Index(S) = 3.
b
[]S
a
b
a
[a]S
b
[ab]S
a
Ende von Beispiel 3.10
Kann man den Nerode-Automaten für jede Sprache L einführen? Na klar:
Definition 3.10 (Der Nerode-Automat). Sei L eine Sprache über dem Alphabet Σ. Dann
hat der Nerode-Automat NL = (Q, Σ, δ, q0 , F ) die folgenden Komponenten:
• Die Zustandsmenge Q besteht aus allen Äquivalenzklassen der Nerode-Relation ≡L .
• Es ist δ([w]L , a) := [wa]L für jedes Wort w ∈ Σ∗ und jeden Buchstaben a ∈ Σ.
• q0 := []L ist der Anfangszustand.
• F := { [w]L : w ∈ L } ist die Menge der akzeptierenden Zustände.
Ist der Nerode-Automat denn auch „wohl-definiert“? Schauen wir uns das Programm δ an:
Wenn u ≡L w gilt, darf ua 6≡L va nicht passieren, denn sonst ist δ([u]L , a) = [ua]L 6= [va]L =
δ[v]L , a) = δ([u]L , a) Aber keine Sorge, Satz 3.2 lässt nichts anbrennen.
Satz 3.3 Sei L eine Sprache über dem Alphabet Σ.
(a) Für jedes Wort w ∈ Σ∗ erreicht der Nerode-Automat NL den Zustand [w]L .
(b) NL akzeptiert die Sprache L mit Index(L) vielen Zuständen.
80
3.1. Minimierung
Beweis: Teil (a) zeigt man durch vollständige Induktion über die Länge von w.
b 0 , w) = q0 := []L . X
Induktionsanfang: Für w = ist δ(q
Induktionsschritt: Für w = ua ist
b 0 , w) = δ(q
b 0 , ua) = (δ(δ(q
b 0 , u), a) = (δ([u], a) := [ua]L .X
δ(q
Für Teil (b) betrachten wir die Menge F . Gibt es ein Wort u ∈ L und ein Wort w 6∈ L mit
u ≡L w? Kann nicht passieren, denn dann trennt der Zeuge v = die Worte u und w.
Zusammengefasst, NL erreicht den Zustand [u]L für das Wort u und [u]L ∈ F gilt genau dann
wenn u ∈ L.
Der Nerode-Automat NL akzeptiert die Sprache mit Index(L) vielen Zuständen. Die Intuition sollte sein, dass NL mit Zuständen äußerst geizig umgeht. Kann es einen DFA
A = (Σ, Q, δ, q0 , F ) für L geben, der weniger Zustände besitzt?
Wenn k = Index(L), dann besitzen die k verschiedenen Äquivalenzklassen der Nerode-Relation
k Vertreter u1 , . . . , uk , und diese Vertreter sind natürlich paarweise inäquivalent.
Angenommen, zwei dieser Vertreter, z.B. ui und uj (mit i 6= j), führen auf denselben Zustand
in Q. Dann gilt
b 0 , ui ) = δ(q
b 0 , uj )
δ(q
b 0 , ui w) = δ(q
b 0 , uj w) für alle Worte w ∈ Σ∗ . Aber A akzeptiert die Sprache L und
und es ist δ(q
es ist ui w ∈ L ⇐⇒ uj w ∈ L: Wir erhalten ui ≡L uj im Widerspruch zur Inäquivalenz von ui
und uj .
Jetzt können wir die Ernte einbringen und es gibt reichlich einzubringen!
Satz 3.4 (Der Satz von Myhill-Nerode, I). Sei A = (Σ, Q, δ, q0 , F ) ein DFA und es gelte
L = L(A).
(a) Index(L) stimmt überein mit der minimalen Zustandszahl eines DFA für die Sprache L.
(b) Der Äquivalenzklassenautomat A0 und der Nerode-Automat NL sind minimal.
Beweis: Für Teil (a) beachten wir mit Satz 3.3, dass der Nerode-Automat nur Index(L)
Zustände besitzt. Gerade aber haben wir gesehen, dass jeder DFA für L mindestens Index(L)
Zustände benötigt: Der Nerode-Automat ist der Champion!
Zum Beweis von Teil (b) nehmen wir an, dass Worte u, v ∈ Σ∗ im Äquivalenzklassenautomaten
A0 zu verschiedenen Zuständen führen. Dann folgt δb0 (q00 , u) 6= δb0 (q00 , v). Was passiert im
Ausgangsautomaten A mit den Worten u und v?
b 0 , u) und q = δ(q
b 0 , v). Dann folgt [p] = [δ(q
b 0 , u)] = δb0 (q 0 , u) 6= δb0 (q 0 , v) =
Für A sei p = δ(q
0
0
A
A
b
[δ(q0 , v)]A = [q]A .
Es ist also p 6≡A q und es gibt einen Zeugen w ∈ Σ∗ für die Inäquivalenz. Also:
b w) ∈ F und δ(q,
b w) 6∈ F
δ(p,
b w) 6∈ F und δ(q,
b w) ∈ F ,
oder δ(p,
bzw.
b 0 , uw) ∈ F und δ(q
b 0 , vw) 6∈ F
δ(q
b 0 , uw) 6∈ F und δ(q
b 0 , vw) ∈ F
oder δ(q
81
3. Endliche Automaten und reguläre Sprachen
bzw.
uw ∈ L(A) und vw 6∈ L(A) oder uw 6∈ L(A) und vw ∈ L(A) .
Wenn u und v in A0 zu verschiedenen Zuständen führen, dann folgt somit u 6≡L(A) v: Die
Anzahl der Zustände von A0 ist höchstens so groß wie der Index von L(A). Und nach Teil (a)
ist A0 minimal.
Bemerkung 3.3 Sei A ein DFA. Dann kennen wir jetzt zwei minimale DFAs für L = L(A),
nämlich den Äquivalenzklassenautomaten A0 und den Myhill-Nerode Automaten NL =
(Σ, QNL , δNL , [], FNL ). Natürlich gibt es noch mehr minimale Automaten, da der Äquivalenzklassenautomat B 0 für jeden mit B äquivalenten DFA B ja auch minimal ist. Tatsächlich
sind aber alle minimalen DFAs, bis auf eine Umbenennung ihrer Zustände, identisch!
Aufgabe 32
A = (Σ, QA , δA , q0A , FA ) und B = (Σ, QB , δB , q0B , FB ) seien zwei äquivalente minimale DFAs. Wir möchten eine
bijektive Funktion f : QA → QB konstruieren, so dass sich A und B – nach einer Umbenennung der Zustände
durch f – als gleich herausstellen.
Wie soll f aussehen? Für jedes Wort x ∈ Σ∗ definieren wir
f (δA (q0A , x)) := δB (q0B , x).
(a) Kann es passieren, dass zwei Worte x, y ∈ Σ∗ in A zu demselben Zustand, aber zu verschiedenen
Zuständen in B führen? In einem solchen Fall wäre unsere Definition von f nicht „wohldefiniert“. Zeigen
Sie deshalb für alle Worte x, y ∈ Σ∗ :
Wenn δA (q0A , x) = δA (q0A , y), dann auch δB (q0B , x) = δB (q0B , y).
Hinweis: Ein minimaler DFA C stimmt mit seinem Äquivalenzklassenautomaten überein, d.h. alle Klassen
der Verschmelzungsrelation ≡C sind einelementig. Weiterhin, da A und B äquivalent sind, folgt
für alle Worte x ∈ Σ∗ .
δA (q0A , x) ∈ FA ⇐⇒ δB (q0B , x) ∈ FB
(b) Zeigen Sie, dass die Funktion f : QA → QB bijektiv ist.
(c) Zeigen Sie: Für alle Zustände p ∈ QA und alle Buchstaben a ∈ Σ gilt
f (δA (p, a)) = δB (f (p), a).
Beispiel 3.11 (Pattern Matching)
Sei Σ ein beliebiges Alphabet und u ein Wort über Σ. Wir möchten das Teilwort-Problem
studieren und betrachten deshalb die Sprache
Lu = { w ∈ Σ∗ : u ist ein Teilwort von w }.
Sei u = u1 · · · uk mit den Buchstaben u1 , . . . , uk ∈ Σ. Wir behaupten, dass der Index von Lu
mindestens k + 1 ist. Wir betrachten dazu die k + 1 Präfixe p0 , . . . , pk mit
p0 = ε, p1 = u1 , p2 = u1 u2 , . . . , pi = u1 · · · ui , . . . , pk = u1 · · · uk .
(3.8)
Zwei verschiedene Präfixe pi = u1 · · · ui und pj u1 · · · uj (mit i < j) lassen sich mit dem Zeugen
uj+1 · · · uk trennen, denn u1 · · · uj · uj+1 · · · uk = u ∈ Lu , aber u1 · · · ui uj+1 · · · uk kann als ein
Wort mit weniger als k Buchstaben nicht in Lu liegen.
Editoren müssen das Teilwort-Problem blitzschnell lösen. Lässt sich ein kleiner DFA konstruieren, der genau alle Worte mit Teilwort u akzeptiert? Bei einer positiven Antwort können wir
das Teilwort-Problem tatsächlich blitzschnell auf kleinem Speicherplatz lösen!
Tatsächlich ist die Antwort positiv, denn Index(L) = k + 1. Dazu genügt es zu zeigen, dass
jedes Wort w ∈ Σ∗ zu einem der Präfixe pi äquivalent ist.
82
3.2. Reguläre Sprachen
• Wenn w ∈ Lu , dann ist w ≡Lu u1 · · · uk .
• Ansonsten ist u kein Teilwort von w und w ist mit dem Suffix w0 seiner letzten k
Buchstaben äquivalent. Zeige, dass w0 mit einem der k + 1 Präfixe pi äquivalent ist.
Beispiel 3.12 In Beispiel 3.8 haben wir einen DFA mit vier Zuständen konstruiert, der alle
Binärdarstellungen durch sechs teilbarer Zahlen akzeptiert. Sei L = L(A) die in (3.3) definierte
Sprache. Wir zeigen, dass der Index von L mindestens vier ist.
Betrachte dazu die Worte 00, 01, 10, 11. Das Wort 00 lässt sich durch das leere Wort von
01, 10, 11 trennen. Des Weiteren können wir 11 von 01 und 10 trennen, wenn wir 0 als Zeugen
verwenden. Schließlich folgt 01 6≡L 10 mit dem Zeugen 10, denn 0110 stellt die Zahl sechs dar,
während 1010 die nicht durch sechs teilbare Zahl zehn darstellt.
Der DFA nach Verschmelzen der Zustände 1 und 4, bzw. 2 und 5 ist somit minimal.
3.2. Reguläre Sprachen
Definition 3.11 Sei Σ eine endliche Menge. Eine Sprache L ⊆ Σ∗ heißt eine reguläre
Sprache, wenn es einen DFA A gibt mit
L = L(A).
Klar: Um zu zeigen, dass eine Sprache L ⊆ Σ∗ regulär ist, reicht es, einen DFA A mit L(A) = L
zu finden.
Frage: Wie kann man nachweisen, dass eine bestimmte Sprache L ⊆ Σ∗ nicht regulär ist?
Versuchen wir den Nerode-Automaten NL für eine vermutlich nicht-reguläre Sprache L zu
konstruieren. Wenn der minimale Automat NL unendlich viele Zustände hat, dann muss doch
jeder Automat für L unendlich viele Zustände besitzen und L kann nicht regulär sein.
Beispiel 3.13 (Die Sprache L = { an bn : n ∈ N }).
Wir zeigen später, dass die Sprache L von keinem DFA akzeptiert werden kann. Wir möchten
die Äquivalenzklassen der Nerode-Relation ≡L für jedes Wort u ∈ {a, b}∗ beschreiben. Dazu
führen wir eine Fallunterscheidung durch.
Fall 1: Es gibt kein Wort v ∈ {a, b}∗ mit u · v ∈ L.
Dann gilt u ≡L b. Warum? Für alle Worte v ∈ {a, b}∗ ist uv 6∈ L genauso wie bv 6∈ L gilt, denn
auch b ist nicht mehr „zu retten“.
Fall 2: Es gibt ein Wort v ∈ {a, b}∗ mit u · v ∈ L.
Dann gilt u = an bm für n ≥ m. Wir behandeln zwei Unterfälle
Fall 2.1 : Es ist u = an .
Wir behaupten, dass an1 6≡L an2 falls n1 6= n2 . Warum? Für den Zeugen v = bn1 ist an1 v ∈ L,
aber an2 v 6∈ L.
Zwischenstand: Die Worte an sind also paarweise inäquivalent und natürlich ist auch an 6≡L b
mit dem Zeugen v = bn .
Fall 2.2 : Es ist u = an bm mit 1 ≤ m ≤ n.
83
3. Endliche Automaten und reguläre Sprachen
Für alle Worte v ∈ {a, b}∗ ist
uv ∈ L ⇐⇒ an bm v ∈ L ⇐⇒ v = bn−m ,
an−m+1 bv ∈ L ⇐⇒ v = bn−m .
Also gilt an bm ≡L an−m+1 b. Wir erhalten also die Vertreter ak b und beobachten zuerst, dass
an1 6≡L an2 b für alle n1 , n2 gilt. Warum? Benutze den Zeugen v = abn1 +1 .
Die Vertreter an1 aus Fall 2.1 und an2 b aus Fall 2.2 sind also paarweise inäquivalent. Jetzt
haben wir ein vollständiges Bild erhalten, denn es ist an1 b 6≡L an2 b falls n1 6= n2 mit dem
Zeugen v = bn1 −1 .
Fazit: Wir haben die folgenden Äquivalenzklassen erhalten.
(a) Die Äquivalenzklasse [b]L mit
[b]L = {w ∈ {a, b}∗ : für alle Worte v ist wv 6∈ L }.
(b) Die Äquivalenzklassen [an ]L mit
[an ]L = {an }
(c) und die Klassen [an b]L mit
[an b]L = { an+k bk+1 : k ∈ N }.
Diesmal gibt es somit unendlich viele Äquivalenzklassen. Gleich werden wir sehen, dass L nicht
eine reguläre Sprache ist.
Ende von Beispiel 3.13
3.2.1. Der Satz von Myhill und Nerode
Mit Hilfe der Nerode-Relation können wir genau sagen, wann eine Sprache regulär ist.
Satz 3.5 (Satz von Myhill-Nerode, II) Sei L ⊆ Σ∗ eine Sprache über dem Alphabet Σ
Dann gilt
L ist regulär ⇐⇒ Index(L) ist endlich.
Beweis: =⇒ Die Sprache L ⊆ Σ∗ sei regulär. Dann gibt es einen DFA A mit L = L(A). A
hat mindestens Index(L) viele Zustände und Index(L) ist endlich.
⇐= Index(L) sei endlich. Dann wird L von seinem Nerode-Automaten NL akzeptiert. Aber
NL ist ein DFA und L ist eine reguläre Sprache.
Satz 3.6 L = {an bn : n ∈ N} ist nicht regulär.
Beweis: Wir müssen unendlich viele Worte aus Σ∗ bestimmen, die paarweise inäquivalent
bzgl. der Nerode-Relation sind. Wir wählen die Worte aus { ai : i ∈ N }.
Für i 6= j gilt ai 6≡L aj mit dem Zeugen bi , denn ai bi ∈ L, aber aj bi 6∈ L. (Alternativ hätten
wir natürlich auch den Zeugen bj benutzen können.
Satz 3.7 L = {ww : w ∈ {a, b}∗ } ist nicht regulär: DFAs können sich nur endlich viele
Dinge merken.
84
3.2. Reguläre Sprachen
Beweis: Wir zeigen, dass alle Worte in { ai b : i ∈ N } paarweise inäquivalent bzgl. der
Nerode-Relation sind.
Für i 6= j trenne ai b von aj b mit Hilfe des Zeugens v = ai b: Es ist ai bv = ai bai b ∈ L, aber
aj bv = aj bai b 6∈ L. Wir erhalten Index(L) = ∞ und L ist nicht regulär.
Weitere nicht-reguläre Sprachen L erhalten wir, wenn wir zeigen, dass Index(L) unendlich
groß ist.
Satz 3.8 Keine der folgenden Sprachen ist regulär.
(a) L1 = { an bm : n, m ∈ N, n ≤ m },
(b) L2 = { an bm cn+m : n, m ∈ N },
2
(c) L3 = { an : n ∈ N },
(d) L4 = { w ∈ {a, b}∗ : w ist ein Palindrom }.
Beweis: Übung.
Aufgabe 33
Sei Σ = {(, )} das Alphabet aus öffnender und schließender Klammer. Die Sprache K der legalen Klammerausdrücke ist die kleinste Sprache mit den folgenden Eigenschaften.
1. ∈ K
2. w ∈ K → (w) ∈ K
3. u ∈ K ∧ v ∈ K → u ◦ v ∈ K
Zeige, dass die Sprache K aller legalen Klammerausdrücke unendlichen Index hat.
Fazit: Damit ist also K keine reguläre Sprache.
Aufgabe 34
2
Wir betrachten die Sprache L = {0(k ) | k ≥ 1 ist eine natürliche Zahl }.
Zeige, dass die Myhill-Nerode Relation von L unendlichen Index hat (und die Sprache L somit nicht regulär
ist).
Aufgabe 35
Ist die Sprache
regulär?
L := { w ∈ {0, 1}∗ : in w tritt 01 genauso häufig wie 10 auf }
Aufgabe 36
Gegeben seien die beiden Sprachen: L1 = {w ∈ {a, b}∗ | ba ist Teilwort von w} und L2 = {w ∈ {a, b}∗ | ab ist
Teilwort von w}.
Konstruiere einen minimalen deterministischen endlichen Automaten, der die Sprache L = L1 ◦ L2 erkennt.
3.2.2. Das Pumping-Lemma
Das Pumping-Lemma formalisiert eine weitere Methode um nachzuweisen, dass eine Sprache
nicht regulär ist.
Satz 3.8 (Pumping-Lemma) Sei L regulär. Dann gibt es eine Pumpingkonstante N , so
dass jedes Wort z ∈ L mit |z| ≥ N eine Zerlegung mit den Eigenschaften
(a) z = uvw, |uv| ≤ N und |v| ≥ 1,
(b) uv i w ∈ L für jedes i ≥ 0
85
3. Endliche Automaten und reguläre Sprachen
besitzt. (Wenn Worte der Sprache lang genug sind, dann gibt es ein nicht-leeres Teilwort v,
das „aufgepumpt“ (i ≥ 1) oder „abgepumpt“ (i = 0) werden kann.)
In Anwendungen des Pumping-Lemmas wird gezeigt, dass das Auf- oder Abpumpen bestimmter,
sorgfältig ausgewählter und genügend langer Worte z ∈ L zu Worten außerhalb der Sprache
führt: Das ist im Widerspruch zur Aussage des Pumping-Lemmas und L kann somit nicht
regulär sein!
Beweis: Da L regulär ist, gibt es einen endlichen Automaten A, der L akzeptiert. Sei q0
Anfangszustand und Q Zustandsmenge von A. Wir wählen
N = |Q|
als Pumping-Konstante. Sei z ∈ L mit z = z1 z2 · · · zs und |z| = s ≥ N beliebig gewählt. Der
Automat A durchläuft die Zustandsfolge
z
z
z
z
zN +1
z
1
2
3
N
s
q0 ⇒
q1 ⇒
q2 ⇒
··· ⇒
qN ⇒ · · · ⇒
qs ,
wobei qs ein akzeptierender Zustand ist. Nachdem A den Präfix z1 z2 · · · zN von z gelesen hat,
hat A genau N + 1 Zustände durchlaufen. Ein Zustand qi muß also zweimal aufgetreten sein
und es gibt i, j, j 6= i, mit qi = qj . Demgemäß wählen wir die Zerlegung (falls i < j)
u = z1 · · · zi , v = zi+1 · · · zj , w = zj+1 · · · zs
Dann ist |uv| ≤ N und |v| ≥ 1. Weiterhin gilt
δ(q0 , u) = qi = qj = δ(q0 , uv)
und deshalb akzeptiert A ebenfalls die Worte
uw, uv 2 w, uv 3 w, . . . , uv i w, . . .
Wie zeigt man, dass eine Sprache L nicht regulär ist? Entweder zeigen wir, dass der MyhillNerode von L unendlich ist oder wir müssen das Pumping-Lemma falsifizieren. Wenn L regullär
ist, dann
- gibt es eine (uns unbekannte) Pumping-Konstante N ,
- so dass für jedes Wort z ∈ L mit |z| ≥ N
- eine Zerlegung z = uvw mit |uv| ≤ N und |v| ≥ 1 gibt, so dass
uv i w ∈ L
für alle i ≥ 0 gilt.
Wie zeigt man also, dass die Sprache L nicht regulär ist?
- Für jedes mögliche N
- müssen wir ein Wort z ∈ L mit |z| ≥ N konstruieren,
- so dass für jede mögliche Zerlegung z = uvw mit |uv| ≤ N und |v| ≥ 1
uv i w 6∈ L
für mindestens ein i ≥ 0 gilt.
86
3.2. Reguläre Sprachen
Wir müssen also für jede mögliche Zerlegung z = uvw ein i finden, so dass uv i w ∈
/ L. Ist dies
gelungen, haben wir einen Widerspruch zur Regularität von L erhalten.
Beispiel 3.14 Wir zeigen, dass die Sprache aller Palindrome über {0, 1}, also
L = w ∈ {0, 1}∗ | w = wreverse
n
o
nicht regulär ist. Wir folgen dem obigen Rezept.
- N sei die unbekannte Pumping-Konstante.
- Wir wählen z = 0N 1 0N (und sichern damit |z| ≥ N ).
- Für jede Zerlegung z = uvw mit |uv| ≤ N und |v| ≥ 1 müssen wir uv i w 6∈ L für
mindestens ein i nachweisen.
Offensichtlich ist uv ein Präfix von 0N , denn wir wissen, dass |uv| ≤ N gilt. Dann gibt es aber
ein k mit v = 0k und
uv 2 w = 0N +k 1 0N 6∈ L.
Die Pumping-Eigenschaft zeigt, dass die Klasse der regulären Sprachen sehr eingeschränkt ist.
Aber:
Aufgabe 37
Zeige, dass jede endliche Menge regulär ist.
Aufgabe 38
Wir beweisen mit Hilfe des Pumping-Lemmas, dass die endliche Sprache L = {a, b}100 nicht regulär ist.
Nehmen wir an L sei regulär. Aus dem Pumping Lemma folgt, dass es für das Wort a100 eine
Zerlegung a100 = xyz mit |xy| ≤Pumping-Konstante und |y| ≥ 1 gibt, so dass jedes Wort xy k z
(mit k ≥ 0 ) auch zu L gehört. Wir erhalten einen Widerspruch zur Annahme, dass die Sprache L
endlich ist, denn es gibt unendlich viele Strings der Form xy k z.
Finde den Fehler im Beweis.
Aufgabe 39
Zeige mit Hilfe des Pumping-Lemmas, dass die folgenden Sprachen nicht regulär sind:
(a) L = {w ∈ {0, 1}∗ | w hat genau so viele Nullen wie Einsen }.
(b) L = {wwreverse | w ∈ {0, 1}∗ }.
Aufgabe 40
Beweise das verallgemeinerte Pumping-Lemma. Die zu beweisende Aussage ist wie folgt:
Sei L eine reguläre Sprache. Dann gibt es eine Konstante n, so dass für jedes z ∈ L mit vorgegebener
Partition z = tyx mit |y| = n eine Zerlegung y = uvw mit |v| ≥ 1 gefunden werden kann, so dass
tuv i wx ∈ L für alle i ≥ 0.
(Mit anderen Worten, das verallgemeinerte Pumping-Lemma erlaubt ein „Fenster“ der Länge n über die Eingabe
zu schieben, so dass innerhalb dieses Fensters „gepumpt“ werden kann.)
Aufgabe 41
2
Wende dieses verallgemeinerte Pumping-Lemma an, um zu zeigen, dass die Sprache L = {1k | k ≥ 0}∪{0j 1(k ) |
j ≥ 1, k ≥ 0} nicht regulär ist. ( L enthält alle Wörter, die mit mindestens einer Null beginnen, gefolgt von
einer quadratischen Anzahl von Einsen.)
Warum kann mit Hilfe des Pumping-Lemmas der Vorlesung nicht gezeigt werden, dass L von keinem endlichen
Automaten akzeptiert wird?
(Das Pumping Lemma liefert somit keine hinreichende Bedingung für die Regularität von Sprachen.)
Aufgabe 42
Zeige, dass die wie folgt definierte Sprache über dem Eingabealphabet Σ = {0, 1} nicht regulär ist:
87
3. Endliche Automaten und reguläre Sprachen
L=
{w ∈ {0, 1}∗ | w hat eine Zerlegung der Form w = x1 . . . xn y1 . . . yn z0 , z1 . . . zn
für ein n ∈ N und es gilt
n
P
zi 2n−i =
i=0
n
P
xi 2n−i +
i=1
∗
n
P
i=1
yi 2n−i }
(Dies soll salopp formuliert heißen: Ein Wort w ∈ {0, 1} liegt in L, wenn es eine “korrekte Binäraddition”
beschreibt.)
Aufgabe 43
Wende in den beiden nächsten Teilaufgaben entweder den Satz von Myhill-Nerode oder das Pumping-Lemma
an. Zeige:
(a) Die Sprache L1 = {a, b}∗ ∪ {ck an bn : k, n ∈ N} ist nicht regulär.
(b) Die Sprache L2 = {1n : n ist das Produkt von zwei Primzahlen } ist nicht regulär.
3.3. Endliche Automaten und Nichtdeterminismus
Wir führen nichtdeterministische endliche Automaten (NFAs) ein und führen einen Vergleich mit
DFAs durch. Wir können die beiden folgenden wichtigen Fragen zufriedenstellend beantworten:
(a) Können NFAs nicht-reguläre Sprachen akzeptieren?
(b) Können NFAs reguläre Sprachen mit weitaus weniger Zuständen als DFAs akzeptieren?
Dann ändern wir das Automatenmodell und betrachten Zweiwege Automaten, die ihren
Lesekopf sowohl nach links wie auch nach rechts bewegen dürfen. Auch hier vergleichen wir
wieder Determinismus und Nichtdeterminismus, können diesmal aber nur partielle Antworten
geben.
3.3.1. Nichtdeterministische endliche Automaten: NFAs
Wir entwickeln nichtdeterministische endliche Automaten (NFAs), um Sprachen kurz beschreiben zu können.
Definition 3.12 Ein nichtdeterministischer endlicher Automat (NFA) hat die folgenden Komponenten:
• eine endliche Menge Q von Zuständen,
• das Eingabealphabet Σ,
• den Anfangszustand q0 ∈ Q,
• eine Menge F ⊆ Q akzeptierender Zustände
• sowie das Programm δ, das wir als Funktion
δ : Q × Σ → P(Q)
auffassen, wobei P(Q) die Potenzmenge von Q bezeichnet.
Wenn ein deterministischer Automat im Zustand p den Buchstaben a liest, dann ist der
Nachfolgezustand eindeutig festgelegt, also „determiniert“. Ein nichtdeterministischer Automat
hingegen hat möglicherweise viele Optionen: Jeder Zustand in der Menge δ(p, a) kommt als
Nachfolgezustand in Frage! Ein NFA kann also im Gegensatz zu einem DFA viele verschiedene
Berechnungen auf einer Eingabe w durchführen. Wann sollten wir sagen, dass w akzeptiert
wird?
Wir legen fest, dass w genau dann akzeptiert wird, wenn mindestens eine Berechnung erfolgreich
ist, also auf einen akzeptierenden Zustand führt.
88
3.3. Endliche Automaten und Nichtdeterminismus
Definition 3.13 Sei N = (Q, Σ, δ, q0 , F ) ein NFA. Automat.
(a) Wir definieren die Fortsetzung
δ : Q × Σ∗ → P(Q)
von Buchstaben auf Worte rekursiv wie folgt:
- δ(q, ) = {q}
- δ(q, wa) =
S
δ(p, a)
p∈δ(q,w)
Hiermit drücken wir aus, dass ein Zustand r ∈ Q durch Eingabe wa vom Zustand q aus
„erreichbar“ ist, falls ein Zustand p durch Eingabe w vom Zustand q erreichbar ist und
r ∈ δ(p, a) ein möglicher Nachfolgezustand ist.
(b) N akzeptiert w genau dann, wenn es einen akzeptierenden Zustand p ∈ F mit p ∈
δ(q0 , w) gibt.
L(N ) = {w ∈ Σ∗ | N akzeptiert w}
ist die von N akzeptierte (oder erkannte) Sprache.
Beschreibungen regulärer Sprachen durch DFAs erfordern manchmal „unangenehm“ viele
Zustände, obwohl die Sprachen einfach sind.
Beispiel 3.15 Wie betrachten die Sprache
Lk = {0, 1}∗ · {1} · {0, 1}k−1 .
Lk besteht also aus allen binären Worten, so dass der kletzte Buchstabe eine Eins ist. Wir
konstruieren einen sehr kleinen nichtdeterministischen Automaten, der die Position des (k)letzten Bits rät und nachfolgend verifiziert. Dies führt auf das folgende Zustandsdiagramm:
0, 1
q0
1
q1
0, 1
q2
0, 1
0, 1
qk
Dem entspricht das Programm δ(q0 , 0) = {q0 }, δ(q0 , 1) = {q0 , q1 }, . . ., δ(qi , 0) = δ(qi , 1) =
{qi+1 } für 1 ≤ i < k und δ(qk , 0) = δ(qk , 1) = ∅.
Man beachte, dass es durchaus erlaubt ist, einen NFA partiell zu definieren: Im obigen Beispiel
haben wir keine Übergänge vom Zustand qk aus definiert. Damit ist für alle w ∈ Σ∗
δ(qk , w) = ∅.
Wir zeigen, dass der Index von Lk mindestens 2k beträgt. Damit muß also jeder DFA für Lk
mindestens 2k Zustände und damit exponentiell mehr Zustände als unser NFA besitzen.
Es genügt zu zeigen, dass zwei beliebige, verschiedene Worte u, v ∈ {0, 1}k nicht Myhill-Nerode
äquivalent sind. Seien u, v ∈ {0, 1}k also beliebige verschiedene Worte.
Es gibt eine Position i mit ui 6= vi . Ohne Beschränkung der Allgemeinheit gelte
ui = 0 und vi = 1.
89
3. Endliche Automaten und reguläre Sprachen
Wir erhalten
v 0i−1 = v1 · · · vi−1 1 vi+1 · · · vk 0i−1 ∈ Lk ,
aber
u 0i−1 = u1 · · · ui−1 0 ui+1 · · · uk 0i−1 ∈
/ Lk .
Die beiden Worte u und v sind also nicht Myhill-Nerode äquivalent.
Sind denn nichtdeterministische Automaten überhaupt nützlich, d.h können wir das Wortproblem
Überprüfe für einen gegebenen nichtdeterministischen Automaten N und eine Eingabe
w, ob N die Eingabe w akzeptiert.
effizient lösen? Der Automat N rechnet nichtdeterministisch, aber wir müssen das Wortproblem
mit einem deterministischen Algorithmus lösen!
Aufgabe 44
Sei N = (Q, Σ, δ, q0 , F ) ein nichtdeterministischer endlicher Automat (NFA). Beschreibe einen Algorithmus,
der das Wortproblem für N löst: Der Algorithmus muss also für eine Eingabe w ∈ Σ∗ entscheiden, ob N das
Wort w akzeptiert. Zeige, dass eine Laufzeit von O(|w| · |Q|2 ) ausreichend ist.
Hinweis: Für ein Wort w ∈ Σ∗ ist die Menge δ(q0 , w), also die Menge der Zustände, die vom Startzustand q0
nach Lesen von w erreichbar sind, zu bestimmen.
Das Wortproblem für nichtdeterministische Automaten ist also effizient lösbar und nichtdeterministische Automaten erlauben in einigen Fällen sehr viel kürzere Beschreibungen: Wo
ist der Haken? Sind die von nichtdeterministischen Automaten erkannten Sprachen auch
stets regulär? Da steckt der Haken nicht, wie wir im nächsten Abschnitt zeigen, der Haken
steckt zum Beispiel in der Minimierung: Eine effiziente Minimierung nichtdeterministischer
Automaten ist in aller Wahrscheinlichkeit nicht mehr möglich.
Die Potenzmengenkonstruktion
Wir zeigen, wie äquivalente deterministische Automaten gebaut werden können und beginnen
mit einem Beispiel.
Beispiel 3.16 Der NFA N mit Zustandsdiagramm
a, b
q0
a
q1
b
q2
akzeptiert alle Worte über {a, b}∗ , die mit ab enden, die also ab als Suffix besitzen. Unser Ziel
ist die Konstruktion eines äquivalenten DFA A. Unsere Idee ist die gleichzeitige Simulation aller
Berechnungen von N . Demgemäß wählen wir Teilmengen der Zustandsmenge Q = {q0 , q1 , q2 }
als Zustände.
90
3.3. Endliche Automaten und Nichtdeterminismus
Ziel der Konstruktion: Wenn der DFA A die Eingabe w gelesen hat und sich im Zustand
s ⊆ Q befindet, dann fordern wir
!
s = {p ∈ Q | Es gibt eine Berechnung von N für w, die in p endet}.
Die rechte Seite der Gleichung stimmt natürlich mit
δN (q0 , w)
überein. Wir geben jetzt die Konstruktion von A Schritt für Schritt an.
Schritt 1: Wir wählen {q0 } als Anfangszustand von A. Mit dem Buchstaben a kann N die
Zustandsmenge {q0 , q1 } erreichen, mit dem Buchstaben b hingegen nur die Zustandsmenge
{q1 }. Wir setzen deshalb
δ({q0 }, a) = {q0 , q1 } und δ({q0 }, b) = {q0 }.
mit dem vorläufigem Zustandsdiagramm
b
{q0 }
a
{q0 , q1 }
Schritt 2: Von {q0 , q1 } aus kann N mit Buchstaben a die Zustandsmenge {q0 , q1 } erreichen.
Für den Buchstaben b wird die Zustandsmenge {q0 , q2 } erreicht. Deshalb setzen wir das
Diagramm wie folgt fort:
a
b
{q0 }
a
{q0 , q1 }
b
{q0 , q2 }
Wir haben den Zustand {q0 , q2 } als akzeptierend markiert. Warum? Weil der Zustand q2 akzeptierend ist und der Zustand {q0 , q2 } somit von mindestens einer akzeptierenden Berechnung
erreicht wird.
Schritt 3: Wir setzen die Zustandsübergänge vom Zustand {q0 , q2 }. Mit dem Buchstaben a
wird die Zustandsmenge {q0 , q1 } erreicht, mit dem Buchstaben b verharrt man in der Menge
{q0 , q2 }.
a
b
b
b
{q0 }
a
{q0 , q1 }
{q0 , q2 }
a
91
3. Endliche Automaten und reguläre Sprachen
Beachte, dass unsere Konstruktion beendet ist, da wir einen vollständig definierten DFA
erhalten haben. Statt der acht möglichen Zustände, nämlich den acht Teilmengen von {q0 , q1 , q2 }
entsprechend, haben wir nur drei Zustände. Dies ist eine Konsequenz unseres Vorgehens: Wir
haben zuerst den Anfangszustand {q0 } „expandiert“ und Übergänge für alle Buchstaben des
Alphabets berechnet. Danach haben wir nur solche Zustände expandiert auf die wir vorher
gestoßen sind.
Die Potenzmengenkonstruktion, die wir in diesem Beispiel angewandt haben, kann für jeden
NFA benutzt werden.
Satz 3.9 Äquivalenz von DFAs und NFAs
Sei N ein nichtdeterministischer Automat mit Komponenten QN , Σ, δN , q0 und FN . Der
deterministische Automat A habe die Komponenten
• QA = {t | t ⊆ QN },
• Anfangszustand {q0 },
• FA = {t ∈ QA | t enthält einen Zustand aus FN }
• δA ist definiert durch
δA (t, a) = p ∈ QN | Es gibt q ∈ t mit p ∈ δN (q, a) .
n
o
Dann sind N und A äquivalent, das heißt es gilt L(N ) = L(A).
Beweis: Wir werden zeigen, dass
δA ({q0 }, w) = {p ∈ QN | Es gibt eine Berechnung von N für w, die p erreicht}.
(3.9)
Ist dies gezeigt, folgt
N akzeptiert w ⇐⇒ Es gibt p ∈ FN mit p ∈ δN (q0 , w)
⇐⇒ δA ({q0 }, w) ∈ FA
⇐⇒ A akzeptiert w,
und die Behauptung des Satzes ist gezeigt.
Wir beweisen (3.9) durch Induktion über die Länge von w.
Basis:
|w| = 0.
Es ist δA ({q0 }, ) = {q0 }, aber auch alle Berechnungen von N für erreichen nur q0 .
Induktionsschritt:
|w| = n + 1
Es gelte w = w0 a und s0 = δA ({q0 }, w0 ). Wir erhalten
δA ({q0 }, w) = δA (δA ({q0 }, w0 ), a)
= δA (s0 , a)
= {p ∈ Q | Es gibt q ∈ s0 mit p ∈ δN (q, a)}
= {p ∈ Q | Es gibt eine Berechnung von N für
(3.10)
w0 ,
die einen
Zustand q ∈ Q erreicht mit p ∈ δN (q, a)}
(3.11)
= {p ∈ Q | Es gibt eine Berechnung von N für w, die p
erreicht},
(3.12)
und dies war zu zeigen. Gleichung (3.10) folgt gemäß Definition von δA . Gleichung (3.11) wendet
die Induktionshypothese an, während Gleichung (3.12) die Definition von δN widerspiegelt.
92
3.3. Endliche Automaten und Nichtdeterminismus
Bemerkung 3.4 A könnte überflüssige Zustände besitzen. Dies stellt kein Problem dar, wenn
wir wie im Beispiel vorgehen, also nur Zustandsmengen betrachten, die aus vom Startzustand
erreichbaren Zuständen bestehen.
Aufgabe 45
Betrachte den folgenden nichtdeterministischen endlichen Automaten N über dem Eingabealphabet Σ = {0, 1}
mit der Zustandsmenge Q = {q0 , . . . , q4 }, dem Anfangszustand q0 und F = {q4 }:
⇒
q0m
1
0,
1
? 1
- q1m
- q2m
0, 1
- q3m
1
- q4m
j
Führe die Potenzmengenkonstruktion für N aus und beschreibe den resultierenden deterministischen Automaten (mit Ausnahme überflüssiger Zustände!) durch sein Zustandsdiagramm.
Aufgabe 46
Für eine reguläre Sprache L ⊆ Σ∗ definieren wir
Präfix(L) = {w : es gibt ein v ∈ Σ∗ , so dass w · v ∈ L }.
Präfix(L) besteht also aus allen Präfixen von Wörtern aus L. Ist Präfix(L) regulär? Ist
regulär? Ist
regulär?
Suffix(L) = {w : es gibt ein v ∈ Σ∗ , so dass v · w ∈ L }
1
L = {u ∈ Σ∗ : es gibt v ∈ Σ∗ mit |u| = |v| und uv ∈ L }
2
Aufgabe 47
Zeige oder widerlege: Wenn die unendlich
vielen Sprachen L1 , L2 , . . . , Ln , Ln+1 , . . . alle regulär sind, dann
S∞
ist auch die unendliche Vereinigung i=0 Li regulär.
Aufgabe 48
Q∃ und Q∀ seien disjunkte, endliche Mengen von Zuständen. Wir führen alternierende endliche Automaten
(AFAs) als Verallgemeinerung von NFAs ein.
Definition: Ein AFA wird durch ein Tupel A = (Q∃ , Q∀ , Σ, δ, q0 , F ) beschrieben. Sei Q := Q∃ ∪ Q∀ . Die
Zustandsübergangsfunktion δ hat die Form
δ : Q × Σ → P(Q).
Für einen beliebigen Zustand q ∈ Q geben wir eine rekursive Definition der Sprache L(A)q aller Worte an, die
A mit q als Anfangszustand akzeptiert.
Basisregel: ∈ L(A)q gilt genau dann, wenn q ∈ F .
Rekursive Regeln: Für jeden Buchstaben a ∈ Σ und jedes Wort w ∈ Σ∗ gilt
(
aw ∈ L(A)q :⇐⇒
w∈
w∈
S
Tp∈δ(q,a)
L(A)p
L(A)p
p∈δ(q,a)
falls q ∈ Q∃ ,
falls q ∈ Q∀ .
In Worten: In einem „existentiellen“ Zustand q ∈ Q∃ wird aw akzeptiert, wenn w in mindestens einem
Nachfolgezustand p akzeptiert wird. In einem „universellen“ Zustand q ∈ Q∀ hingegen wird aw genau dann
akzeptiert, wenn w in allen Nachfolgezuständen akzeptiert wird.
Wir definieren L(A) := L(A)q0 als die Sprache der von A akzeptierten Worte. Im Folgenden möchten wir
untersuchen, wie mächtig AFAs sind.
(a) Sei N = (Q, Σ, δ, q0 , F ) ein NFA. Definiere die einzelnen Komponenten eines AFAs A so, dass L(A) = L(N )
gilt.
(b) Entwerfe einen AFA A mit O(k) Zuständen, der die Sprache
EQk = { xy : x, y ∈ {0, 1}k und x = y }
akzeptiert. (Auf Blatt 2 haben wir gesehen, dass NFAs mindestens 2k Zustände benötigen, um EQk zu
akzeptieren.)
93
3. Endliche Automaten und reguläre Sprachen
(c) Alice und Bob spielen das ZZ-Spiel – das Zweizeilen-Spiel – auf der Knotenmenge V = {0, 1} × N. Sei Σ die
Menge aller bipartiten Graphen mit den „linken“ Knoten (0, links), (1, links) und den „rechten“ Knoten
(0, rechts), (1, rechts). Ein Wort w = w1 · · · wn ∈ Σn definiert die Kantenmenge Ew : Für b, c ∈ {0, 1}
wird der Knoten (b, i − 1) aus V genau dann mit dem Knoten (c, i) aus V durch eine Kante verbunden,
wenn der Knoten (b,links) mit dem Knoten (c,rechts) durch eine Kante in dem durch wi bezeichneten
bipartiten Graphen verbunden ist.
Mit der Menge Ew kennen wir das Spielbrett. Wie sehen die Spielregeln aus? Anfänglich befindet sich
genau ein Steinchen auf dem Brett und zwar in Position (0, 0). Alice beginnt und danach alternieren
beide Spieler. Der ziehende Spieler muss das Steinchen über eine der eingesetzten Kanten zu einem
Knoten der nächsten Spalte ziehen; ist das nicht möglich, wird das Spiel beendet. Wer hat gewonnen?
Spätestens nach |w| Zügen wird das Spiel abgebrochen. Liegt das Steinchen nach Spielende in Zeile 0,
hat Alice und ansonsten Bob gewonnen.
Beschreibe einen AFA A = (Q∃ , Q∀ , Σ, δ, q0 , F ), der ein Wort w ∈ Σ∗ genau dann akzeptiert, wenn Alice
eine Gewinnstrategie für das von w definierte Spielbrett besitzt. Gib eine anschauliche Begründung
warum deine Konstruktion funktioniert.
(d) Sei A = (Q∃ , Q∀ , Σ, δ, q0 , F ) ein AFA. Zeige: Die Sprache L(A) ist regulär. Gib eine anschauliche
Begründung deiner Konstruktion.
Hinweis: Konstruieren Sie einen NFA N = (Q∗ , Σ, δ ∗ , q0∗ , F ∗ ), der A simuliert, d.h. für den L(N ) = L(A)
gilt. Wählen Sie die Zustandsmenge Q∗ := P(Q).
3.3.1.1. Minimierung von NFAs
DFAs können effizient zum Beispiel mit Moores oder Hopcrofts Algorithmus minimiert werden.
Das Minimierungsproblem für NFAs hingegen ist knüppelhart: Schon die Frage, ob L(A) 6= Σ∗
gilt, also ob der NFA A mindestens ein Wort nicht akzeptiert, ist PSPACE-hart. Bitte auf der
Zunge zergehen lassen: Die Frage, ob ein einziger Zustand ausreicht, ist so schwierig, wie die
Bestimmung von Gewinnstrategien für nicht-triviale Zwei-Personen-Spiele. (Dieses Ergebnis
zeigen wir in Satz 5.15.)
Hier ist ein erstes Indiz, dass es sehr schwierig ist, das Verhalten von NFAs korrekt vorauszusagen: Es gibt NFAs mit O(n3 ) Zuständen, die „anscheinend“ alle Worte akzeptieren – bis auf
extrem lange Worte, nämlich Worte der Länge mindestens 2n .
Aufgabe 49
(a) Sei A ein DFA mit n Zuständen. Zeigen Sie: Wenn L(A) 6= Σ∗ , dann verwirft A ein Wort der Länge
höchstens n − 1.
(b) Konstruieren Sie einen NFA N mit O(n3 ) Zuständen über dem Alphabet Σ = {1}, für den gilt: L(N ) 6= Σ∗ ,
aber der kürzeste von N verworfene String besitzt mindestens die Länge 2n .
Hinweis: Sie können annehmen, dass es mindestens n Primzahlen p ≤ n2 gibt. Des weiteren, wenn die
Zahlen n1 , . . . , nk paarweise teilerfremd sind, dann ist n1 · · · nk das kleinste gemeinsame Vielfache von
n1 , . . . , nk .
In einigen Fällen lässt sich die minimale Zustandszahl für NFAs exakt bestimmen.
Aufgabe 50
(a) Zeige, dass jeder NFA für
Lm = {an : n ∈ N und n ist durch m teilbar}
mindestens m Zustände besitzt.
(b) Zeige oder widerlege: Wenn die Sprache L nur Worte der Länge mindestens m besitzt, dann hat jeder
NFA für L mindestens m Zustände.
94
3.3. Endliche Automaten und Nichtdeterminismus
Aufgabe 51
Sei L eine Sprache, die nur Worte der Länge mindestens L besitzt. Zeige, dass jeder NFA für L mindestens L
Zustände besitzt.
Aber für einige Sprachen L lassen sich zumindest gute „unteren Schranke“ für die Zustandszahl
von NFAs angeben. Wie also kann man zeigen, dass jeder NFA, der L akzeptiert, mindestens
k Zustände hat?
Wenn man Glück hat, gilt Index(L) ≥ 2k . Dann hat nämlich jeder DFA für L mindestens 2k
Zustände. Aus einem NFA für L mit k 0 < k Zuständen kann man mit der Potenzmengenkon0
struktion einen DFA mit 2k < 2k Zuständen bauen. Als Konsequenz hat jeder NFA für L
mindestens k Zustände.
Wir betrachten die Sprache
Lk = {0, 1}∗ · {1} · {0, 1}k−1
aus Beispiel 3.15. Wir haben gesehen, dass der Index von Lk mindestens 2k beträgt und
dementsprechend werden NFAs mindestens k Zustände besitzen.
Wir lernen jetzt eine mächtigere Methode kennen.
Definition 3.14 (Fooling Sets)
Sei Σ ein endliches Alphabet und L eine Sprache über Σ. Für Worte u1 , . . . , uk , v1 , . . . , vk ∈ Σ∗
wird die Menge { (ui , vi ) : i ∈ { 1, . . . , k }} ein Fooling Set der Größe k für L genannt, falls
• für alle i ∈ { 1, . . . , k } gilt: ui vi ∈ L,
und
• für alle i, j ∈ { 1, . . . , k } mit i 6= j gilt:
ui vj 6∈ L oder uj vi 6∈ L.
Fooling(L) ist die maximale Größe eines Fooling Sets für L.
Satz 3.10 Sei L eine Sprache. Jeder NFA, der L akzeptiert, muss mindestens Fooling(L)
Zustände beitzen.
Aufgabe 52
(a) Zeige Satz 3.10.
(b) Zeige Fooling(L) ≤ Index(L) für alle Sprachen L.
Aufgabe 53
(a) Sei EQk = {xy | x, y ∈ {0, 1}k , x = y} und NEQk = {xy | x, y ∈ {0, 1}k , x 6= y}.
– Zeige: Fooling(EQk ) ≥ 2k . Jeder nichtdeterministische endliche Automat, der EQk akzeptiert,
benötigt also mindestens 2k Zustände.
– Konstruiere einen NFA für NEQk mit möglichst wenigen Zuständen. Zeige: Fooling(NEQk ) = O(k).
(b) Sei Lk = {0, 1}∗ · {1} · {0, 1}k−1 . Zeige: Lk hat ein Fooling Set der Größe k+1. Unser NFA für Lk ist
also minimal.
95
3. Endliche Automaten und reguläre Sprachen
3.3.1.2. NFAs mit -Übergängen
Manchmal erhalten wir eine noch kürzere Beschreibung, wenn wir -Übergänge zulassen, also
Zustandsübergänge für die kein Buchstabe gelesen werden muss.
Definition 3.15
Ein NFA (Q, Σ, δ, q0 , F ) mit -Übergängen ist wie ein konventioneller NFA definiert. Als
einziger Unterschied hat das Programm jetzt die Form
δ : Q × Σ ∪ {} → P(Q)
Der Automat darf „-Übergänge“ benutzen, darf also einen Zustandswechsel durchführen ohne
Buchstaben zu lesen.
Auch bei -Übergängen werden nur reguläre Sprachen akzeptiert. Dies folgt, da wir -Übergänge
nach dem folgenden Schema entfernen können: Wenn es einen Weg von Zustand p nach Zustand
q gibt und dieser Weg mit der Konkatenation a ∈ Σ markiert ist, dann füge die gerichtete
Kante (p, q) mit Markierung a ein. Nach diesem Einfüge-Schritt entferne alle -Übergänge.
3.3.2. Abschlusseigenschaften
Wir erinnern an die Definition von NFAs mit -Übergängen aus Definition 3.15. -Übergänge
helfen zum Beispiel im Nachweis der folgenden Abschlusseigenschaften.
Satz 3.11 Die Sprachen L, L1 und L2 seien regulär. Es folgt
(a) L ist regulär.
(b) L1 ∪ L2 und L1 ∩ L2 sind regulär.
(c) L1 ◦ L2 ist regulär.
(d) L∗ ist regulär.
Beweis: Die deterministischen Automaten A, A1 bzw. A2 mögen die Sprachen L, L1 bzw. L2
akzeptieren.
(a) Q sei die Zustandsmenge von A. Ersetze die Menge F der akzeptierenden Zustände von
A durch Q \ F .
(b) Wir zeigen nur, dass L1 ∪ L2 regulär ist. (Die Regularität von L1 ∩ L2 folgt mit (a), da
L1 ∩ L2 = L1 ∪ L2 .)
L1 ∪ L2 ist regulär, da der Automat
A1
3
q0
A2
3
genau die Vereinigung akzeptiert.
(c) Wir verbinden alle akzeptierenden Zustände von A1 durch -Übergänge mit dem Startzustand von A2 . Die akzeptierenden Zustände von A2 sind die akzeptierenden Zustände
des neuen Automaten: Der neue Automat akzeptiert L1 ◦ L2 .
96
3.3. Endliche Automaten und Nichtdeterminismus
(d) Verbinde alle akzeptierenden Zustände von A durch -Übergänge mit einem neuen
Startzustand q0∗ : Der Zustand q0∗ wird auch der einzige akzeptierende Zustand des neuen
Automaten. Schließlich füge einen -Übergang von q0∗ zum alten Startzustand q0 ein.
Da q0∗ akzeptierend ist, wird auch das leere Wort akzeptiert, und der neue Automat
akzeptiert die Sternhülle.
Aufgabe 54
Ist die Konstruktion in Teil (d) richtig?
Die Klasse der regulären Sprachen ist also unter den wichtigsten mengentheoretischen Operationen abgeschlossen wie auch unter der Konkatenation und der Sternoperation.
Aufgabe 55
(a) Seien R, S ⊆ Σ∗ Sprachen. Wir definieren die Quotientensprache
R/S := { u ∈ Σ∗ : es gibt v ∈ S, so dass uv ∈ R }.
Zeige, dass R/S regulär ist, wenn R regulär ist. (Die Sprache S ist mglw. nicht regulär!)
(b) Σ und ∆ seien Alphabete. Eine Funktion h : Σ∗ → ∆∗ heißt Homomorphismus, falls h() := , h
jedem Buchstaben a ∈ Σ ein Wort h(a) ∈ ∆∗ zuweist und h(x) = h(a1 ) · · · h(an ) für jedes Wort
x = a1 · · · an ∈ Σn gilt.
Zeige: Wenn L ⊆ Σ∗ eine reguläre Sprache und h : Σ∗ → ∆∗ ein Homomorphismus ist, dann ist auch
h(L) := { h(w) : w ∈ L }
eine reguläre Sprache. Hinweis: Beschreibe einen NFA für h(L).
Aufgabe 56
Seien Σ1 und Σ2 Alphabete.
wird durch die Vorschrift s(ε) = {ε},
(a) Eine Substitution ist eine Funktion s von Σ1 nach P(Σ∗2 ) und S
s(wa) = s(w) ◦ s(a) auf Wörter aus Σ∗1 sowie durch s(L) = w∈L s(w) auf eine Sprache L ⊆ Σ∗1
fortgesetzt. Mit anderen Worten: In jedem Wort w ∈ L dürfen wir jeden Buchstaben a ∈ Σ1 durch ein
beliebiges Wort aus einer Sprache s(a) ersetzen. Falls die Sprache s(a) für jedes a ∈ Σ1 regulär ist, ist s
eine reguläre Substitution.
Zeige, dass die Klasse der regulären Sprachen abgeschlossen unter regulären Substitutionen ist, das
heißt: Ist L eine reguläre Sprache, so ist auch jede reguläre Substitution von L regulär.
(b) Ein Homomorphismus ist eine Funktion h von Σ1 nach Σ∗2 und wird durch h(ε) = ε, h(wa) = h(w)h(a) auf
Wörter aus Σ∗1 sowie durch h(L) = {h(w) | w ∈ L} auf eine Sprache L ⊆ Σ∗1 fortgesetzt. Homomorphismen
können als Spezialfall regulärer Substitutionen angesehen werden: Jeder Buchstabe wird durch ein
bestimmtes Wort ersetzt.
−1
Die Funktion h−1 von Σ∗2 nach P(Σ∗1 ) mit
= {v ∈ Σ∗1 | h(v) = w} heißt inverser Homomorphismus
S h (w)
−1
−1
und wird wiederum durch h (L) = w∈L h (w) auf eine Sprache L ⊆ Σ∗2 fortgesetzt. Mit anderen
Worten: h−1 (L) enthält all diejenigen Wörter, die durch h auf ein Wort in L abgebildet werden.
Zeige, dass die Klasse der regulären Sprachen abgeschlossen unter inversen Homomorphismen ist.
Aufgabe 57
Die Klasse der regulären Sprachen ist unter anderem abgeschlossen unter Komplement, Vereinigung, Durchschnitt,
Konkatenation, Stern-Operation, Homomorphismen, inversenn Homomorphismen und Quotientenbildung. Wir
möchten mit Hilfe dieser Abschlusseigenschaften zeigen, dass eine vorgegebene Sprache L nicht regulär ist.
Dazu dürfen wir allerdings nur ausnutzen, dass die Sprache K := { an bn : n ∈ N } nicht regulär ist.
Um beispielsweise zu zeigen, dass die Sprache L = { w ∈ {a, b}∗ : |w|a = |w|b } nicht regulär ist, führen wir
einen indirekten Beweis und nehmen an, dass L doch regulär ist. Dann ist auch K = L ∩ ({a}∗ · {b}∗ ) als
Durchschnitt der beiden regulären Sprachen L und {a}∗ · {b}∗ regulär: Widerspruch.
Zeige mit Hilfe der Abschlusseigenschaften regulärer Sprachen: Die Sprache L aller wohlgeformten Klammerausdrücke zu dem Klammerpaar ( , ) ist nicht regulär.
97
3. Endliche Automaten und reguläre Sprachen
3.3.3. Zweiwege Automaten
Deterministische Zweiwege Automaten (2DFAs) verhalten sich wie konventionelle DFAs, können
aber in jedem Schritt entscheiden, ob sie den vorangegangenen linken oder den folgenden
rechten Buchstaben der Eingabe w ∈ Σ∗ besuchen möchten. Um Zweiwege Automaten zu
beschreiben, markieren wir zuerst das linke Ende der Eingabe mit dem Buchstaben α und das
rechte Ende mit dem Buchstaben β, die Eingabe w wird also durch die transformierte Eingabe
αwβ ersetzt. (Wir nehmen natürlich an, dass α und β nicht im Alphabet Σ vorkommen.)
Definition 3.16 Ein deterministischer endlicher Zweiwege Automat (oder 2DFA)
(Σ, Q, δ, q0 , F ) hat die folgenden Komponenten:
• das Eingabealphabet Σ für das {α, β} ∩ Σ = ∅ gelte,
• eine endliche Menge Q von Zuständen,
• das Programm δ, das wir als Funktion
δ : Q × (Σ ∪ {α, β}) → Q × { links, rechts }
auffassen. Wir nehmen also an, dass die Eingabe w durch das Wort αwβ repräsentiert
wird.
• den Anfangszustand q0 ∈ Q
• sowie eine Menge F ⊆ Q akzeptierender Zustände.
Wie arbeitet ein 2DFA A auf einer Eingabe w ∈ Σ∗ ? A arbeitet auf der transformierten
Eingabe αwβ. Wie auch im Fall von DFAs beginnt A im Anfangszustand q0 mit dem Lesen des
ersten Buchstabens α der (transformierten) Eingabe. In jedem Schritt schreibt das Programm
δ die Leserichtung vor, wobei A allerdings die Eingabe αwβ nicht nach links verlassen darf. A
akzeptiert das Wort w genau dann, wenn der Automat die transformierte Eingabe nach rechts
in einem Zustand aus F verlässt. Die Sprache
L(A)
ist die Menge aller von A akzeptierten Worte w ∈ Σ∗ .
Zweiwege Automaten können im Vergleich zu DFAs weitaus kompaktere Beschreibungen
erreichen.
Aufgabe 58
Die Sprache EQk der Gleichheit von Worten der Länge k ist definiert durch
EQk = { uu : u ∈ {a, b}k }.
Wir erinnern auch an die Sprache
Lk = {0, 1}∗ · {1} · {0, 1}k−1 .
Beschreibe Zweiwege Automaten mit möglichst wenigen Zuständen für EQk wie auch für Lk .
Wie auch im Fall von DFAs können wir für 2DFAs in völlig analoger Weise 2NFAs, also
nichtdeterministische Zweiwege Automaten einführen: Das Programm δ eines 2NFA ist diesmal
eine Funktion
δ : Q × (Σ ∪ {α, β}) → P(Q × { links, rechts }).
Die Sprache L(N ) eines 2NFAs N definieren wir natürlich als die Menge aller Worte w ∈ Σ∗ ,
so dass w von einer Berechnung von N akzeptiert wird.
98
3.3. Endliche Automaten und Nichtdeterminismus
2NFAs erscheinen sehr mächtig. Zwar dürfen sie sich keine Notizen machen, haben also keinen
modifizierbaren Speicher, aber sie sind nicht an den Einwege-Modus von DFAs gebunden und
dürfen darüberhinaus nichtdeterministisch rechnen.
Frage: Können 2NFAs nicht-reguläre Sprachen akzeptieren?
Satz 3.12 (Zweiwege Automaten akzeptieren nur reguläre Sprachen)
N sei ein 2NFA. Dann ist L(N ) regulär.
Beweis: Wir simulieren den 2NFA N = (Σ, QN , δN , q0 , FN ) durch einen NFA N ∗ . Wir
benötigen die Menge F aller Funktionen f : QN → (QN ∪ {⊥}), wobei ⊥ das Symbol für
„undefiniert“ ist.
Beachte zuerst, dass wir uns auf Berechnungen von N beschränken können, die jede Eingabeposition höchstens einmal in demselben Zustand besuchen. Wir wählen
QN ∗ = QN × F
als Zustandsmenge von N ∗ . Wenn N ∗ den Zustand (p, f ) annimmt, dann spekuliert N ∗ , dass
N eine Berechnung besitzt, die
(a) den bisher gelesenen Präfix der Eingabe zum ersten Mal im Zustand p nach rechts hin
verlässt und
(b) den Präfix im Zustand f (r) nach rechts verlässt, wenn es den Präfix im Zustand r von
rechts aus betritt. (Wenn f (r) =⊥, dann betritt N unter dieser Berechnung den Präfix
von rechts kommend nicht im Zustand r.)
Mit anderen Worten, der Zustand (p, f ) wettet darauf, dass der bisher gelesene Präfix zum
ersten Mal nach rechts im Zustand p verlassen wird und dass f die Reaktion auf einen „Besuch
von rechts“ festhält.
Wir sagen, dass p0 für den Buchstaben a konsistent mit (p, f ) ist und schreiben
p0 ∈ K((p, f ), a),
wenn es eine Zustandsfolge (p1 , q1 , . . . , pk−1 , qk−1 , pk ) gibt mit
• p1 = p.
• (qi , links) ∈ δN (pi , a) und pi+1 = f (qi ).
• (p0 , rechts) ∈ δN (pk , a).
Wenn p0 für a konsistent mit (p, f ) ist, dann gibt es eine mit f konsistente Berechnung, die
im Zustand p beginnt und zum ersten Mal im Zustand p0 den Buchstaben a nach rechts hin
verlässt.
Wir beschreiben das Programm δN ∗ für unseren NFA N ∗ . Wir sagen, dass N ∗ von seinen Startzustand q0∗ in einen Zustand (p, f ) wechseln darf, falls (p, rechts) ∈ δN (q0 , α) und
(f (r), rechts) ∈ δN (r, α) für alle Zustände r ∈ QN gilt. (Wenn δN (α, r) = ∅, setze f (r) =⊥.)
Wir setzen also
δN ∗ (q0∗ , α) = { (p, f ) : N ∗ darf in den Zustand (p, f ) wechseln }.
N ∗ besitzt einen Zustandsübergang
(p0 , f 0 ) ∈ δN ∗ (p, f ), a ,
wenn
99
3. Endliche Automaten und reguläre Sprachen
(a) p0 ∈ K((p, f ), a) und
(b) für jeden Zustand r ∈ QN ist (f 0 (r), rechts ) ∈ δN (r, a),
die Berechnung von N besucht den Präfix von rechts kommend im Zustand r und
kehrt sofort wieder im Zustand f 0 (r) um,
oder es gibt einen Zustand s ∈ QN mit (s, links ) ∈ δN (r, a) und f 0 (r) ∈ K((s, f ), a).
Die Berechnung von N wandert zuerst um eine Position nach links und wechselt
in den Zustand s. Nach möglicherweise vielen weiteren Schritten verlässt sie den
Buchstaben a nach rechts hin im Zustand f 0 (r), wobei f 0 (r) ∈ K((s, f ), a) gilt.
Wir erfinden einen neuen Zustand „ja“ für N ∗ und setzen FN ∗ := { ja }. Wann sollte N ∗
akzeptieren, wenn N ∗ das Endesymbol β im Zustand (p, f ) liest? Genau dann, wenn es einen
Zustand p0 ∈ FN mit p0 ∈ K((p, f ), β)) gibt. In einem solchen Fall setzen wir
δN ∗ ((p, f ), β) := {( ja , rechts )}
für p ∈ FN . In allen anderen Fällen ist δN ∗ ((p, f ), β) := ∅.
Anfänglich, für (p, f ) ∈ δN ∗ (q0∗ , α), haben wir sichergestellt, dass N eine Berechnung besitzt,
die α im Zustand p nach rechts verlässt und dass f die Reaktion dieser Berechnung auf
einen Besuch von α, von rechts kommend, beschreibt. Wir haben sodann Zustandsübergänge
a
(p, f ) 7→ (p0 , f 0 ) so definiert, dass N ∗ genau dann den Zustand (p, f ) nach Lesen von αu
annimmt, wenn N eine Berechnung hat, die
• αu zum ersten Mal im Zustand p verlässt
• und αu im Zustand f (r) verlässt, falls αu im Zustand r von rechts betreten wird.
Die letzte Aussage zeigt man durch vollständige Induktion über die Länge von u.
Wenn N ∗ den Begrenzer β im Zustand (p, f ) erreicht, dann wird N den Begrenzer zum ersten
Mal im Zustand p besuchen und die transformierte Eingabe in den Zuständen aus K((p, f ), β)
nach rechts verlassen. Also akzeptiert N ∗ die transformierte Eingabe αwβ genau dann, wenn
N das Wort w akzeptiert.
3.3.3.1. Determinismus gegen Nichtdeterminismus
Wir haben gesehen, dass NFAs einige Sprachen wie etwa L = {0, 1}∗ ◦ {0} ◦ {0, 1}k−1 mit sehr
viel weniger Zuständen akzeptieren können als DFAs. Man sollte ein ähnliches Phänomen
auch für den Vergleich von 2NFAs und 2DFAs erwarten, allerdings ist der Nachweis einer
exponentiellen Ersparnis bis heute nicht gelungen. Wir betrachten deshalb „sweeping DFAs“
(SDFAs), also 2DFAs, die ihre Eingabe in Phasen bearbeiten, wobei der 2DFA in einer Phase
die Eingabe zuerst von ganz links nach ganz rechts und darauffolgend von ganz rechts nach
ganz links lesen darf.
Aufgabe 59
Betrachte die Sprache
Ln := { xy : x, y ∈ {0, 1}n und x 6= y }.
(a) Konstruiere SDFAs, die Ln mit möglichst wenigen Zuständen akzeptieren.
(b) Konstruiere NFAs sowie 2DFAs, die (Ln $)∗ mit möglichst wenigen Zuständen akzeptieren.
Aufgabe 60
Betrachte die Sprache Ln = {0, 1}∗ {1}{0, 1}n−1 {1}{0, 1}∗ .
(a) Zeige: Index(Ln ) ≥ 2n .
(b) Beschreibe einen 2DFA, der Ln mit O(n) Zuständen erkennt.
100
3.3. Endliche Automaten und Nichtdeterminismus
(c) Beschreibe einen SDFA, der Ln mit O(n2 ) Zuständen erkennt.
Wir werden zeigen, dass SDFAs für (Ln $)∗ sehr viele Zustände benötigen. Das Konzept
generischer Worte stellt sich als wichtig heraus.
Definition 3.17 Sei L eine Sprache über dem Alphabet Σ. Der Buchstabe $ gehöre nicht zu
Σ. Darüberhinaus sei A ein SDFA, der die Sprache (L$)∗ akzeptiere. Die Zustandsmenge von
A sei Q.
(a) Für ein Wort s ∈ Σ∗ definiere
→
0
0
Z (s) := { q ∈ Q : es gibt einen Zustand q , so dass q von einer in q beginnenden
links-nach-rechts Bewegung erreicht wird, wenn s gelesen wird }.
←
Die Menge Z (s) ist analog definiert, aber diesmal betrachten wir rechts-nach-links
Bewegungen.
→
→
(b) Ein Wort g ∈ (L$)∗ heißt generisch für A, wenn | Z (g) | ≤ | Z (gt) | wie auch
←
←
| Z (g) | ≤ | Z (tg) | für alle Worte t ∈ (L$)∗ gilt.
Wir zeigen, dass jeder SDFA A ein generisches Wort g besitzt.
Lemma 3.13 Sei A ein SDFA. Dann gilt
(a)
→
→
←
←
Z (uv) ⊆ Z (v) und Z (uv) ⊆ Z (u)
für beliebige Worte u, v ∈ (L$)∗ .
(b) A besitzt ein generisches Wort g.
→
Beweis (a) Zum Beispiel: Wenn der Zustand q zu Z (uv) gehört, dann wird q in einer
links-nach-rechts Bewegung für die Eingabe uv erreicht. Sei q 0 der Zustand nach Lesen von u.
Dann wird q nach einer links-nach-rechts Bewegung erreicht, wenn die Eingabe v, beginnend
im Zustand q 0 , gelesen wird.
(b) Sei u ∈ (L$)∗ beliebig. Wenn u nicht generisch für A ist, dann gibt es o.B.d.A. ein Wort v
→
→
←
←
mit | Z (uv) | < | Z (u) |. Nach Teil (a) wissen wir, dass Z (uv) ⊆ Z (u) gilt und deshalb folgt
←
←
→
| Z (uv)| ≤ | Z (u)|. Jetzt ersetze u durch uv: Die Größe von Z (u) hat sich verringert, die
←
Größe von Z (u) hat nicht zugenommen.
→
→
Wenn es ein neues „Gegenbeispiel“ v ∈ (L$)∗ mit | Z (uv) | < | Z (u) | gibt, dann wiederhole
←
←
das Argument. Gilt hingegen | Z (vu) | < | Z (u) |, dann wiederhole das Argument auch in
diesem Fall, aber ersetze u durch vu.
Offensichtlich führt dieses Argument auf ein generisches Wort u. Setze g := u.
Warum sind generische Strings so interessant?
Lemma 3.14 Der SDFA A akzeptiere die Sprache (L$)∗ und das Wort g ∈ (L$)∗ sei generisch
für A. Dann gilt für jedes Wort w ∈ Σ∗
→
→
←
→
(3.13)
→
→
←
→
(3.14)
w ∈ L ⇒ Z (gs$g) =Z (g) und Z (gs$g) =Z (g),
w 6∈ L ⇒ Z (gs$g) ⊂Z (g) oder Z (gs$g) ⊂Z (g).
101
3. Endliche Automaten und reguläre Sprachen
Beweis: Sei w ∈ Σ∗ beliebig. Wir wenden Lemma 3.13 an und erhalten
→
→
←
←
Z (gw$g) ⊆ Z (g) und Z (gw$g) ⊆ Z (g).
→
←
Wenn es ein Wort w ∈ L gibt, so dass zum Beispiel Z (gw$g) eine echte Teilmenge von Z (g),
dann ist g im Widerspruch zur Annahme nicht generisch. Also ist Behauptung (3.13) richtig.
Sei also w 6∈ L beliebig, aber es gelte
→
→
←
→
←
←
Z (gw$g) = Z (g) und Z (gw$g) = Z (g).
Dann folgt auch
→
←
i
i
Z g(w$g) = Z (g) und Z (gw$) g = Z (g)
→
für jede Zahl i. Also definiert (w$g)i eine Permutation auf Z (g) und (gw$)i eine Permutation
←
auf Z (g). Es muss aber eine Zahl j geben, so dass sowohl (w$g)j wie auch (gw$)j die
Identitätspermutation erzeugen. Auf der einen Seite ist g ∈ (L$)∗ und gw$g 6∈ (L$)∗ . Auf
der anderen Seite gilt g(w$g)j = (gw$)j g mit der Konsequenz, dass A sowohl für eine linksnach-rechts Bewegung wie auch für eine rechts-nach-links Bewegung keine Chance hat, g und
g(w$g)j auseinanderzuhalten.
Ein Fazit: Wenn A, nach Lesen von gw$g mit einer links-nach-rechts Bewegung von zwei
→
verschiedenen Zuständen p1 , p2 ∈Z (g) aus denselben Zustand erhält, dann muss w 6∈ L
gelten. Ebenso folgt w 6∈ L, wenn A nach Lesen von gw$g in einer rechts-nach-links Bewegung
←
verschiedene Zustände in Z (g) auf denselben Zustand transformiert.
3.3.3.2. Ein Kommunikationsargument
Wenn die Sprache (L$)∗ von einem SDFA mit wenigen Zuständen akzeptiert wird, dann ist das
Komplement von L strukturell stark eingeschränkt. Um diese Einschränkung herauszuarbeiten,
führen wir ein Kommunikationsmodell ein.
(a) Zwei Spieler, Alice und Bob, nehmen teil. Alice erhält einen Präfix p der Eingabe w ∈ Σ∗ ,
Bob den verbleibenden Suffix s: Es gilt also
w = ps.
Weder hat Alice irgendeine Information über den Suffix s von Bob noch hat Bob irgendeine
Information über den Präfix p von Alice.
(b) Beide schicken sich gegenseitig Nachrichten nach einem nichtdeterministischen Protokoll.
Danach muss Alice
• in mindestens einer Berechnung akzeptieren, wenn w nicht zu L gehört, bzw.
• in allen Berechnungen verwerfen, wenn w zu L gehört.
Beide versuchen, möglichst wenige Nachrichten auszutauschen.
Sei N (L) die minimale Nachrichtenzahl einer nichtdeterministischen Berechnung: Gezählt
werden alle Nachrichtenfolgen, die für irgendein Wort w ∈ Σ∗ zwischen Alice und Bob
ausgetauscht werden.
Wir zeigen in einem ersten Schritt, dass N (L) „klein“ ist, wenn (L$)∗ von einem SDFA
mit „wenigen“ Zuständen akzeptiert wird. In einem zweiten Schritt weisen wir für bestimmte
102
3.3. Endliche Automaten und Nichtdeterminismus
Sprachen L nach, dass die minimale Nachrichtenzahl N (L) groß sein muss: Für solche Sprachen
L benötigt jeder SDFA für (L$)∗ viele Zustände.
Wir beginnen mit dem ersten Schritt.
Lemma 3.15 Wenn (L$)∗ von einem SDFA mit q Zuständen akzeptiert wird, dann gilt
N (L) ≤ 3q 2 .
Beweis: Wir erinnern uns, dass Alice einen Präfix p und Bob den dazugehörenden Suffix s
erhält. Beide versuchen nichtdeterministisch herauszufinden, ob w = ps nicht zu L gehört und
nutzen dazu aus, dass ein SDFA A die Sprache (L$)∗ mit höchstens q Zuständen akzeptiert.
→
→
←
→
Nach Lemma 3.14 gilt w 6∈ L genau dann, wenn Z (gs$g) ⊂Z (g) oder Z (gs$g) ⊂Z (g). Alice
beginnt die Kommunikation und rät die Richtung eines „Sweeps“ von A. Sie teilt Bob ihre
Entscheidung mit einem Bit mit.
Fall 1: Alice rät eine links-nach-rechts Bewegung.
→
Sie rät zwei Zustände p1 , p2 ∈Z (g), simuliert eine links-nach-rechts Bewegung von A für Eingabe gp auf beiden „Anfangszuständen“ und teilt Bob die „Endzustände“ q1 , q2 mit. Bob nimmt
die Simulation einer links-nach-rechts Bewegung von A mit den neuen „Anfangszuständen“
q1 , q2 wieder auf, diesmal aber für die Eingabe s$g, und berechnet seine Endzustände r1 , r2 .
Wenn r1 = r2 ,dann schickt er eine „Eins“ an Alice und sonst eine „Null“. Alice akzeptiert
→
→
genau dann, wenn sie eine Eins erhält: Sie weiß jetzt, dass Z (gs$g) ⊂Z (g) gilt.
In diesem Fall haben beide insgesamt höchstens 2q 2 Nachrichten ausgetauscht.
Fall 2: Alice rät eine rechts-nach-links Bewegung.
←
Diesmal übernimmt Bob die Initiative, rät Anfangszustände p1 , p2 ∈Z (g), simuliert eine
rechts-nach-links Bewegung von A auf Eingabe s$g und kommuniziert die Endzustände
q1 , q2 . Alice setzt die Simulation einer rechts-nach-links Bewegung jetzt für die Eingabe gp
fort und akzeptiert genau dann, wenn die Endzustände identisch sind: Sie weiß jetzt, dass
←
←
Z (gs$g) ⊂Z (g) gilt.
In diesem Fall haben beide insgesamt höchstens q 2 Nachrichten ausgetauscht.
In den Übungen haben wir die Sprache
Ln := { xy : x, y ∈ {0, 1}n und x 6= y }
betrachtet: NFAs wie auch 2DFAs können (Ln $)∗ mit wenigen Zuständen akzeptieren. SDFAs
hingegen tun sich sehr schwer, denn die Anzahl N (Ln ) verschiedener Nachrichten ist groß.
Satz 3.16 Ln hat nur große SDFAs
(a) N (Ln ) ≥ 2n .
(b) Jeder SDFA hat mindestens
p
2n /3 Zustände.
Beweis: Es genügt, wenn wir N (Ln ) ≥ 2n zeigen, denn mit Lemma 3.15 folgt dann
2n ≤ N (Ln ) ≤ 3q 2 ,
wobei q die Zustandszahl eines SDFA für (Ln $)∗ ist.
103
3. Endliche Automaten und reguläre Sprachen
Wir betrachten ein beliebiges nichtdeterministisches Protokoll. Angenommen, x, y ∈ {0, 1}n
sind verschiedene Worte und es gibt eine gemeinsame akzeptierende Nachrichtenfolge m
~ sowohl
für die Eingabe w1 = xx 6∈ Ln wie auch für die Eingabe w2 = yy 6∈ Ln . Dann führt m
~
fälschlicherweise dazu, dass die Eingabe xy ∈ Ln akzeptiert wird: Die 2n verschiedenen Worte
uu für u ∈ {0, 1}n besitzen ihre eigenen akzeptierenden Nachrichtenfolgen und N (Ln ) ≥ 2n
folgt.
Diese Argumentation kann leider nicht zu einer „Trennung“ von 2DFAs und 2NFAs führen,
da (Ln $)∗ ja kleine 2DFAs besitzt. Der Nachweis einer, im Vergleich zur Zustandszahl von
2NFAs super-polynomiell großen Zustandszahl für 2DFAs bleibt ein offenes Problem.
3.4. Endliche Automaten und Probabilismus
Ein probabilistischer endlicher Automat (PFA) W = (Σ, Q, δ, q0 , F ) darf würfeln: Das
Programm
δ : Q × Σ × Q → [0, 1]
weist jedem Zustand p ∈ Q, jedem Buchstaben a ∈ Σ und jedem potentiellen Nachfolgezustand
r ∈ Q die Wahrscheinlichkeit δ(p, a, r) zu, dass r tatsächlicher Nachfolgezustand von p wird,
wenn der Buchstabe a gelesen wird.
Für jeden Buchstaben a ∈ Σ definiert die Übergangsmatrix Pa die Übergangswahrscheinlichkeit vom Zustand p ∈ Q zum Zustand r ∈ Q. Insbesondere hat die Übergangsmatrix Pa
für jeden Zustand p ∈ Q eine Zeile und für jeden Zustand r ∈ Q eine Spalte und es gilt
Pa [p, r] := δ(p, a, r).
Beachte, dass die Matrix Pa eine stochastische Matriz ist, denn die Zeile von p definiert
P
eine Verteilung: Für alle Zustände p, r ∈ Q ist Pa [p, r] ≥ 0 und es ist r∈Q Pa [p, r] = 1.
Wie auch im Fall von NFAs setzen wir δ von Buchstaben auf Worte in Σ∗ fort.
Definition 3.18 Sei W = (Σ, Q, δ, q0 , F ) ein probabilistischer endlicher Automat (PFA).
(a) Für ein Wort u ∈ Σ∗ ist
δ(p, w, r)
die Wahrscheinlichkeit, dass sich W nach dem Lesen des Wortes u im Zustand r ∈ Q
befindet. Wir geben die folgende rekursive Definition an:
δ(p, ua, r) :=
X
δ(p, u, s) · δ(s, a, r).
(3.15)
s∈Q
(b) Die Akzeptanzwahrscheinlichkeit pW (u) des Wortes w wird definiert durch
pW (u) := pr[ W akzeptiert u ] :=
X
δ(q0 , u, r).
r∈F
(c) Die reelle Zahl λ ∈ [0, 1] sei gegeben. Die Sprache Lλ (W ) besteht aus allen Worten u ∈ Σ∗ ,
die mit einer Wahrscheinlichkeit von größer als λ akzeptiert werden, also
Lλ (W ) := { u ∈ Σ∗ : pW (u) > λ}.
Um die Sprache des probabilistischen Automaten W zu definieren, müssen wir einen
Schwellenwert λ angeben.
104
3.4. Endliche Automaten und Probabilismus
Was genau steckt „hinter“ der rekursiven Definition (3.15)? Wenn u = a1 · · · an , dann folgt
δ(p, u, r) = Pa1 · · · Pan [p, r]
mit vollständiger Induktion: Die Wahrscheinlichkeit eines Zustandsübergangs vom Zustand p
zum Zustand r wird durch das Matrizenprodukt Pa1 · · · Pan , ausgewertet in Zeile p und Spalte
r wiedergegeben.
Frage: Ist die Sprache Lλ (W ) für jeden probabilistischen endlichen Automaten und für jedes
λ eine reguläre Sprache?
Die Antwort ist ein donnerndes Jein! Wir betrachten den simplen PFA W = (Σ, Q, δ, q0 , F )
mit
1. Σ = {0, 1},
2. der Zustandsmenge Q = {0, 1},
3. dem Anfangszustand q0 = 0,
4. dem akzeptierenden Zustand 1 und
5. dem Programm δ, definiert durch die beiden Übergangsmatrizen
P0 =
"
1
1
2
0
1
2
#
und P1 =
"
1
2
0
1
2
1
#
.
Um die Akzeptanzwahrscheinlichkeit für ein Wort u = a1 · · · an ∈ {0, 1}n zu bestimmen,
beachte
pW (u) = Pa1 · · · Pan [0, 1],
denn wir sind an der Wahrscheinlichkeit von Berechnungen interessiert, die im Zustand 0
beginnen und im Zustand 1 enden.
Aufgabe 61
Zeige: Die Akzeptanzwahrscheinlichkeit pW (u) = Pa1 · · · Pan [0, 1] für das Wort u = a1 · · · an besitzt die
Binärdarstellung 0,an · · · a1 .
Wenn wir Schwellenwerte 0 ≤ λ1 < λ2 ≤ 1 betrachten, dann gilt
Lλ2 (W ) ⊂ Lλ2 (W )
und die Inklusion ist als Konsequenz der obigen Aufgabe echt. Der PFA W akzeptiert also
überabzählbar unendlich viele Sprachen, nämlich eine Sprache für jeden Schwellenwert λ ∈ [0, 1].
Es gibt aber nur abzählbar unendlich viele DFAs und damit gibt es „nur“ abzählbar unendlich
viele reguläre Sprachen: Die meisten von W akzeptierten Sprachen Lλ (W ) sind nicht regulär!
Aufgabe 62
(a) Zeige, dass die Klasse der regulären Sprachen abgeschlossen unter Rückwärtslesen ist, das heißt: Falls L
eine reguläre Sprache über dem Alphabet Σ ist, so ist auch
LR = {an · · · a1 | a1 , . . . , an ∈ Σ, a1 · · · an ∈ L}
regulär.
(b) Zeige, dass Lλ (W ) regulär ist, falls λ rational ist.
Hinweis: Jede rationale Zahl λ mit 0 ≤ λ < 1 besitzt eine Binärdarstellung der Form
0,xyyy . . .
mit x, y ∈ {0, 1} und y ∈
/ {1} .
∗
∗
105
3. Endliche Automaten und reguläre Sprachen
(c) Zeige, dass Lλ (W ) nicht regulär ist, falls λ die irrationale Zahl mit der Binärdarstellung
0,10102 103 1 . . .
ist.
Hinweis: Zeige Index(Lλ (W )R ) = ∞.
Aus Teil (c) der obigen Aufgabe folgt:
Satz 3.17 Es gibt einen PFA W und einen Schwellenwert λ, so dass Lλ (W ) nicht regulär ist.
Bemerkung 3.5 Im Teil (b) der obigen Übungsaufgabe wird gezeigt, dass die Sprache Lλ (W )
für einen rationalen Schwellenwert λ regulär ist. Es gibt aber PFAs mit sogar nur drei Zuständen,
nur rationalen Übergangswahrscheinlichkeiten und rationalem Schwellenwert, die eine nichtreguläre Sprache akzeptieren. Dieses Ergebnis verschärft somit Satz 3.17.
Sollte uns das Ergebnis von Satz 3.17 überraschen? Nicht wirklich, denn wie sollten wir denn
herausfinden können, ob ein Eingabewort u zur Sprache Lλ (W ) gehört, wenn wir nur die
Möglichkeit haben, verschiedene Berechnungen von W auf u zu beobachten? Für praktische
Belange ist unsere Definition der Sprache eines PFA (bzgl eines Schwellenwerts λ) viel zu
weit gefasst: Wir sollten für eine reelle Zahl δ > 0 fordern, dass alle Akzeptanzwahrscheinlichkeiten außerhalb eines Intervalls (λ − δ, λ + δ) liegen, weil wir nur dann die Möglichkeit
haben, experimentell bei nur wenigen beobachteten Berechnungen mit hoher Wahrscheinlichkeit
festzustellen, ob das Wort u zur Sprache Lλ (W ) gehört oder nicht.
Definition 3.19 δ sei eine positive reelle Zahl. Ein PFA W akzeptiert die Sprache L = Lλ (W )
mit (Schwellenwert λ und) Lücke δ, falls
pW (u) 6∈ (λ − δ, λ + δ)
für alle Worte u ∈ Σ∗ gilt.
Angenommen, ein PFA W akzeptiert die Sprache Lλ (W ) mit Lücke δ. Stelle die Prognose
u ∈ Lλ (W ) für ein Eingabewort u auf, wenn W das Wort u in k Versuchen mindestens
(λ − δ/2) · k mal akzeptiert: Der Prognosefehler wird umso kleiner sein, umso größer die Lücke
δ ist.
Jeder DFA A lässt sich natürlich als ein PFA auffassen, der die Sprache L = L1/2 (A) mit Schwellenwert 1/2 und der größtmöglichen Lücke 1/2 akzeptiert. Aber selbst Lücken der Größe fast
1/2 lassen sich mit PFAs erzielen, die mit sehr viel weniger Zuständen als ihre deterministischen
Mitbewerber oder sogar ihre nichtdeterministischen Wettbewerber auskommen.
Aufgabe 63
Wir betrachten die Sprache EQk = {ww : w ∈ {0, 1}k }. Jeder NFA für EQk benötigt mindestens 2k Zustände.
(a) Fasse ein Wort w = w1 · · · wk ∈ {0, 1}k als Binärdarstellung der Zahl Z(w) = i=1 wi · 2k−i auf. Für eine
Zahl m konstruiere einen DFA Am , der ein Wort xy genau dann akzeptiert, wenn x, y ∈ {0, 1}k und
Pk
Z(x) ≡ Z(y) (mod m).
Die Anzahl der Zustände von Am soll polynomiell in k und m sein.
(b) Konstruiere einen PFA mit poly(k) Zuständen, der EQk mit Schwellenwert
akzeptiert.
1+1/k
2
und Lücke
Hinweis: Für hinreichend großes n gibt es mindestens n2 Primzahlen kleiner oder gleich n3 .
106
1−1/k
2
3.4. Endliche Automaten und Probabilismus
Aufgabe 64
Benutze PFAs mit einer Anfangsverteilung: Ein PFA mit Anfangsverteilung π wählt den Zustand q mit
Wahrscheinlichkeit πq als Startzustand.
Die Sprachen L1 , . . . , Lk mögen DFAs mit jeweils höchstens N Zuständen besitzen. Beschreibe einen PFA mit
höchstens O(k · N ) Zuständen, der die Sprache L = L1 ∪ · · · ∪ Lk akzeptiert. Dein PFA sollte mindestens die
Lücke 1/(2k) mit dem Schwellenwert λ = 1/(2k) erreichen.
Kommentar: Die Lücke ist sehr klein: Wir müssen den PFA Ω(k) Mal „anwerfen“, bis wir eine verlässliche
Prognose über die Akzeptanz abgeben können.
Satz 3.18 (Satz von Rabin)
Sei W ein PFA, der die Sprache L = Lλ (W ) mit Lücke δ > 0 akzeptiert. Dann ist die Sprache
L regulär.
Beweis: Es gelte W = (Σ, Q, δ, q0 , F ). Der zweite Teil des Satzes von Myhill-Nerode (Satz
3.5) besagt, dass L = Lλ (W ) genau dann regulär ist, wenn der Index von L unendlich ist. Was
passiert also, wenn die Worte u1 , . . . , uN Vertreter verschiedener Myhill-Nerode Klassen sind?
Für je zwei Worte ui und uj gibt es ein Wort x mit zum Beispiel
ui x ∈ L, aber uj x 6∈ L.
Also folgt
pW (ui x) =
X
δ(q0 , ui , p) · δ(p, x, q) ≥ λ + δ,
p∈Q,q∈F
pW (uj x) =
X
δ(q0 , uj , p) · δ(p, x, q) ≤ λ − δ
p∈Q,q∈F
und insbesondere
2 · δ = λ + δ − (λ − δ) ≤ pW (ui x) − pW (uj x)
=
X
δ(q0 , ui , p) − δ(q0 , uj , p) · δ(p, x, q)
p∈Q,q∈F
=
X
X
p∈Q
q∈F
(δ(q0 , ui , p) − δ(q0 , uj , p) ·
δ(p, x, q)
Aber q∈F δ(p, x, q) ist eine reelle Zahl zwischen Null und |Q|, denn 0 ≤ δ(p, x, q) ≤ 1 gilt für
alle Zustände p, q ∈ Q. Als Konsequenz folgt
P
X
|δ(q0 , ui , p) − δ(q0 , uj , p)| > 2 · δ/|Q|.
p∈Q
Die Vektoren ξi := ( δ(q0 , ui , p) : p ∈ Q ) haben also einen Abstand von mindestens 2δ/|Q|
voneinander, wenn wir den Abstand in der 1-Norm2 messen. Aber für jedes µ > 0 gibt es nur
endlich viele Vektoren im |Q|-dimensionalen Würfel [0, 1]|Q| mit dem paarweisen Abstand von
mindestens µ: Der Myhill-Nerode Index von L ist endlich und L ist regulär.
2
Der Abstand zweier Vektoren u, v ∈ Rn in der 1-Norm wird durch
Pn
i=1
|ui − vi | definiert.
107
3. Endliche Automaten und reguläre Sprachen
3.5. Reguläre Ausdrücke
Wir führen eine weitere Beschreibungsmethode für reguläre Sprachen ein, nämlich reguläre
Ausdrücke. Wir haben reguläre Ausdrücke zum Beispiel bei der Definition der Sprache Lk =
Σ∗ ◦ {1} ◦ Σk eingesetzt: Diese Sprache besitzt NFAs mit wenigen Zuständen wie auch einen
kurzen regulären Ausdruck, aber nur deterministische endliche Automaten mit exponentiell in
k vielen Zuständen.
Definition 3.20 Das Alphabet Σ = {a1 , . . . , ak } sei gegeben. Wir geben eine rekursive Definition regulärer Ausdrücke an:
(a) ∅, , a1 , . . . , ak sind reguläre Ausdrücke (für die Sprachen ∅, {} und
{a1 }, . . . , {ak }).
(b) Sei R ein regulärer Ausdruck (für die Sprache L), dann ist R∗ ein regulärer Ausdruck
(für die Sprache L∗ ), und (R) ist ein regulärer Ausdruck (für die Sprache L).
(c) Seien R1 und R2 reguläre Ausdrücke (für die Sprachen L1 und L2 ). Dann sind auch
R1 + R2
und
R1 · R2
reguläre Ausdrücke (für die Sprachen L1 ∪ L2 und L1 ◦ L2 ).
Die Menge der regulären Ausdrücke ist die kleinste Menge mit den Eigenschaften (a), (b) und
(c). Wenn R ein regulärer Ausdruck für eine Sprache L ist, dann sagen wir auch, dass R die
Sprache L beschreibt und definieren
L(R) := L.
Beispiel 3.17 Reguläre Ausdrücke für die Sprachen
L1 =
n
w ∈ {a, b}∗ | w beginnt und endet mit a
L2 =
n
L3 =
n
w ∈ {a, b}∗ | aba ist Teilwort von w
o
o
w ∈ {a, b}∗ | w hat eine gerade Anzahl von a’s
o
sind zu konstruieren. Wir erhalten zum Beispiel
R1 = a · (a + b)∗ · a
R2 = (a + b)∗ · a · b · a · (a + b)∗
R3 = b∗ + (b∗ · a · b∗ · a · b∗ )∗ .
Während die regulären Ausdrücke für L1 und L2 einfach sind (und sich der Formalismus
regulärer Ausdrücke auszahlt), ist der reguläre Ausdruck für L3 , verglichen mit dem Automaten
b
q0
b
a
q1
a
relativ kompliziert: Jeder Formalismus hat seine Stärken und Schwächen.
108
3.5. Reguläre Ausdrücke
Aufgabe 65
Die Sprache L (über dem Alphabet Σ = {a, b}) sei die kleinste Wortmenge mit den Eigenschaften „der Buchstabe
a gehört zu L“ und „wenn das Wort x zu L gehört, so gehören auch die Worte bx, ax und xb zu L“.
Finde einen regulären Ausdruck für die Sprache L und beweise, dass deine Beschreibung zu der obigen
rekursiven Definition äquivalent ist.
Aufgabe 66
In welchen Beziehungen stehen die drei Sprachen L1 , L2 und L3 zueinander? Es soll paarweise entschieden
werden, ob Gleichheit oder Teilmengenbeziehung besteht.
L1
=
L2
=
L3
=
{a}∗ ◦ {b}∗ ◦ {c}+
{a, b}∗ ◦ {c}+
∗
∗
({a}∗ ◦ {c}+ ) ∪ ({b}∗ ◦ {c}+ )
∗
Aufgabe 67
Finde je einen regulären Ausdruck für die beiden folgenden Sprachen über Σ = {a, b, c}.
(a) L1 := {w ∈ Σ∗ | w enthält das Teilwort abc}
(b) L2 := {w ∈ Σ∗ | w enthält das Teilwort abc nicht}
Aufgabe 68
Sei r ein regulärer Ausdruck. Dann ist Länge(r) die Anzahl der Zeichen von r, die keine Klammern sind.
(a) Sei n ≥ 1 und w = w1 · · · wn ∈ Σn gegeben. Konstruieren Sie einen regulären Ausdruck r für die Sprache
{, w1 , w1 w2 , w1 w2 w3 , . . . , w1 · · · wn },
also für die Menge der Präfixe von w. Es soll Länge(r) = O(n) gelten.
(b) Sei Σ = {0, 1}. Für ein Wort w ∈ Σ∗ betrachten wir das Komplement
Kw := { u ∈ Σ∗ : w ist kein Teilwort von u }
der Teilwortsprache. Beachte: Es gibt DFAs mit |w| + 1 Zuständen für Kw . Sei w = 0n . Konstruieren Sie
einen möglichst kurzen regulären Ausdruck für Kw . Es gibt Ausdrücke der Länge O(|w|).
Kommentar: Für bestimmte w könnte Kw das Beispiel einer Sprache sein, für die DFAs eine wesentlich
kompaktere Beschreibung als reguläre Ausdrücke liefern. Sei zum Beispiel
w = FWk
das kte Fibonacci-Wort (mit der rekursiven Definition FW1 = 0, FW1 = 01 und FWk+2 = FWk+1 FWk ).
Reguläre Ausdrücke der Länge O(|w|) für Kw sind nicht bekannt.
Lemma 3.19 Wenn R ein regulärer Ausdruck ist, dann ist L(R) regulär.
Beweis: Offensichtlich sind
∅, {}, {a1 }, . . . , {ak }
reguläre Sprachen. Mit Satz 3.11 sind aber auch L∗ , L1 ◦ L2 und L1 ∪ L2 regulär, wenn L, L1
und L2 regulär sind. Deshalb führen auch die regulären Ausdrücke
R∗ ,
R1 · R2
und
R1 + R2
auf reguläre Sprachen (wenn wir induktiv annehmen, dass R, R1 und R2 auf reguläre Sprachen
L und L1 , L2 führen).
109
3. Endliche Automaten und reguläre Sprachen
Tatsächlich sind reguläre Ausdrücke und reguläre Sprachen identische Konzepte!
Satz 3.20 Satz von Kleene
Sei Σ ein endliches Alphabet. Eine Sprache L über Σ ist genau dann regulär, wenn es einen
regulären Ausdruck R mit L = L(R) gibt.
Beweis: Nach Lemma 3.19 ist L(R) für jeden regulären Ausdruck R eine reguläre Sprache.
Sei also L regulär. Wir müssen zeigen, dass es einen regulären Ausdruck für L gibt. Da L
regulär ist, gibt es einen (deterministischen) endlichen Automaten A, der L akzeptiert. Ohne
Beschränkung der Allgemeinheit sei
Q = {1, . . . , n}
die Zustandsmenge von A und q0 = 1 sein Anfangszustand. Wir betrachten die Menge
Lkp,q = w ∈ Σ∗ | δ(p, w) = q, und alle Zwischenzustände während des
n
Lesens von w liegen in der Menge {1, . . . , k}
Wir beachten, dass
L=
[
o
Ln1,p
p∈F
und es genügt deshalb zu zeigen, dass jede Sprache Lnp,q als regulärer Ausdruck darstellbar ist.
Wir zeigen mehr, nämlich dass jede Sprache Lkp,q durch einen regulären Ausdruck darstellbar
ist. Unsere Konstruktion verläuft rekursiv (nach k).
k = 0: L0p,q ist die Menge aller w ∈ Σ∗ mit δ(p, w) = q, wobei kein Zwischenzustand erlaubt
ist. Also ist
n
o
L0p,q =
a ∈ Σ | δ(p, a) = q ,
falls p =
6 q, bzw.
L0p,q = {} ∪ a ∈ Σ | δ(p, a) = p , falls p = q.
n
o
Die endliche Menge L0p,q ist offensichtlich durch einen regulären Ausdruck darstellbar.
k → k + 1: Es ist
k
k
k
Lk+1
p,q = Lp,q ∪ Lp,k+1 ◦ Lk+1,k+1
∗
◦ Lkk+1,q ,
denn entweder taucht Zustand k + 1 beim Lesen von w (mit Startzustand p und Endzustand q)
nicht auf, oder wir können die Folge der Zwischenzustände so zerlegen, dass in jeder Teilfolge
k + 1 kein Zwischenzustand, sondern nur Endzustand ist. Wenn aber die Sprachen Lkp,q , Lkp,k+1 ,
Lkk+1,k+1 und Lkk+1,q durch reguläre Ausdrücke beschrieben werden können, dann kann auch
Lk+1
p,q durch einen regulären Ausdruck beschrieben werden. (Beachte, dass wir einen Beweis
mit Hilfe der dynamischen Programmierung geführt haben.)
Aufgabe 69
Gegeben sei der folgende deterministische endliche Automat A über dem Eingabealphabet Σ = {0, 1} mit der
Zustandsmenge Q = {q0 , q1 , q2 }, dem Anfangszustand q0 und F = {q0 }:
0
1
q0
q1
1
110
0
1
q2
0
3.5. Reguläre Ausdrücke
Bestimme einen regulären Ausdruck für die Sprache L(A) mit der rekursiven Konstruktion aus dem Beweis
von Satz 3.20
Aufgabe 70
Es seien r und s reguläre Ausdrücke über disjunkten Alphabeten, und es sei das leere Wort 6∈ r. Bestimme
einen regulären Ausdruck x, der die Gleichung x = r ◦ x + s erfüllt. Dabei bezeichnet ◦ die Konkatenation und
+ die Vereinigung.
3.5.1. Die Länge regulärer Ausdrücke
Wir definieren die Länge eines regulären Ausdrucks R als die Anzahl aller Zeichen in R, die
keine Klammern sind.
Aufgabe 71
Gib möglichst kurze reguläre Ausdrücke für die folgenden Sprachen an und bestimme ihre Länge asymptotisch:
(a) Lk = {w ∈ {0, 1}∗ | w enthält 0k als Teilwort},
(b) Lk = {w ∈ {0, 1}∗ | w enthält 0k nicht als Teilwort}.
Seien n, k natürliche Zahlen mit n ≥ k und sei Ln,k = {w ∈ {0, 1}n | w enthält genau k Einsen}.
(c) Zeige: Index(Ln,k ) = Θ(k · (n − k)).
(d) Gib einen möglichst kurzen regulären Ausdruck für Ln,k an und bestimme seine Länge asymptotisch.
In den beiden nächsten Aufgaben wird der Zusammenhang zwischen der Länge regulärer
Ausdrücke und der Zustandszahl äquivalenter DFAs bzw. NFAs untersucht.
Aufgabe 72
(a) Zeige: Wenn r ein regulärer Ausdruck ist, dann gibt es einen zu r äquivalenten NFA N mit höchstens
Länge(r) + 1 Zuständen. (N ist äquivalent zu r, wenn L(N ) = L(r) gilt.)
Fazit: NFAs besitzen mindestens die Beschreibungskraft der regulären Ausdrücke.
(b) Wie groß können die Unterschiede in der Beschreibungslänge von DFAs und regulären Ausdrücken
werden?
i) Der reguläre Ausdruck r := (0|1)∗ ·1·(0|1)k−1 hat die Länge O(k), während DFAs für L(r) mindestens
2k Zustände besitzen. Dieses Beispiel deckt bereits einen fast größtmöglichen Unterschied in der
Beschreibungslänge auf.
Sei R ein regulärer Ausdruck. Zeige: Es gibt einen DFA für L(R) mit höchstens 2Länge(R)+1
Zuständen.
ii) Wie groß können zu einem DFA äquivalente reguläre Ausdrücke im schlimmsten Fall werden? Sei
A ein DFA mit Zustandsmenge Q. Zeige: Das dynamische Programmier-Verfahren im Beweis des
Satzes von Kleene produziert einen regulären Ausdruck der Länge höchstens |Σ| · |Q| · 2O(|Q|) .
Wenn R ein regulärer Ausdruck der Länge l ist, dann gibt es einen äquivalenten NFA mit
höchstens l + 1 Zuständen. Andererseits ist die Größe eines äquivalenten DFA möglicherweise
sogar exponentiell in l wie das Beispiel (0 | 1)∗ 1(0 | 1)l zeigt.
DFAs können aber für einige Sprachen sehr viel kompaktere Beschreibungen als reguläre
Ausdrücke liefern. Wir beschreiben eine solche Sprache Ln durch Angabe eines DFAs An =
(n)
(Σn , Qn , δn , q0 , Fn ), der Ln akzeptiert. Das Alphabet Σn = {(i, j) : 1 ≤ i 6= j ≤ n}
besteht aus allen Paaren unterschiedlicher Zahlen aus {1, . . . , n}. Die Zustandsmenge ist
Qn := {0, 1, . . . , n}, wobei Zustand 0 die Rolle eines „Trap-Zustands“ einnimmt; Zustand 1 ist
der Anfangszustand. Das Zustandsdiagramm – mit Ausnahme des Trap-Zustands – besteht
aus den vollständig verbundenen Zuständen 1, . . . , n, wobei es genau einen Übergang von
Zustand i nach Zustand j (i 6= j) gibt und zwar für den Buchstaben (i, j); alle von Zustand
111
3. Endliche Automaten und reguläre Sprachen
i ausgehenden Übergänge mit Buchstaben (k, j) für k =
6 i landen im Trap-Zustand. Es ist
Fn = {1, . . . , n}, so dass An genau die Worte akzeptiert, die den im Zustand 1 beginnenden
Wegen entsprechen: An akzeptiert also die Sprache aller Worte der Form (1, i1 )(i1 , i2 )(i2 , i3 ) · · · .
Es kann gezeigt werden:
Satz 3.21 L(An ) wird von einem DFA mit n + 1 Zuständen akzeptiert, aber jeder reguläre
Ausdruck für L(An ) hat die Länge Ω(2n ).
Wir wissen: Die Klasse aller regulären Sprachen ist abgeschlossen unter Komplement- und
Durchschnittbildung. Obwohl die regulären Ausdrücke keine expliziten Operatoren für Komplement- und Durchschnittbildung enthalten, gibt es daher für alle regulären Ausdrücke R und
S einen regulären Ausdruck
• R̃, der die Sprache L(R) beschreibt, und
• T , der die Sprache L(R) ∩ L(S) beschreibt.
Wie können wir bei gegebenen Ausdrücken R und S solche regulären Ausdrücke R̃ und T
konstruieren? Antwort:
R, S
NFAs
AL(R) , AL(S)
DFAs
BL(R) , BL(S)
DFAs
BL(R) , BL(R)∩L(S)
reguläre Ausdrücke R̃, T.
Laufzeit unserer Verfahren:
Für R̃: 22
Geht das nicht schneller? Hier ist die
O(|R|)
.
Für T : 22
O(|R|+|S|)
.
Antwort3
• Für R̃ ist unser Verfahren im Wesentlichen optimal: Es gibt reguläre Ausdrücke Rn
der Länge O(n), so dass die kürzesten regulären Ausdrücke, die die Sprache L(Rn )
n
beschreiben, die Länge mindestens 22 haben.
• Für T gibt es ein (relativ naheliegendes) Verfahren, das mit Laufzeit 2O(|R|·|S|) auskommt.
Dieses Verfahren ist im Wesentlichen optimal: Es gibt reguläre Ausdrücke Rn , Sn der
Länge O(n2 ), so dass die kürzesten regulären Ausdrücke, die die Sprache L(Rn ) ∩ L(Sn )
beschreiben, Länge mindestens 2n haben.
Aufgabe 73
Wir führen in dieser Aufgabe die erweiterten regulären Ausdrücke ein: Jeder reguläre Ausdruck ist auch ein
erweiterter regulärer Ausdruck. In erweiterten regulären Ausdrücken lassen wir zusätzlich die Operation ∩ zu,
d.h. wenn R1 und R2 erweiterte reguläre Ausdrücke für die Sprachen L1 und L2 sind, dann ist R1 ∩ R2 ein
erweiterter regulärer Ausdrück für die Sprache L1 ∩ L2 .
Beweise oder widerlege die folgende Aussage: Für alle regulären Sprachen L gilt: Gegeben sei ein erweiterter
regulärer Ausdruck R der Länge l (für L). Dann gibt es einen nichtdeterministischen endlichen Automaten mit
O(poly(l)) Zuständen (der L erkennt).
3.6. Grammatiken und reguläre Grammatiken
Was ist eine Grammatik?
Definition 3.21
3
W. Gelade, F. Neven, Succinctness of the Complement and Intersection of Regular Expressions, STACS,
Seiten 325-336, 2008
112
3.6. Grammatiken und reguläre Grammatiken
(a) Eine Grammatik G hat die folgenden Komponenten:
• ein endliches Alphabet Σ,
• eine endliche Menge V von Variablen (oder Nichtterminalen) mit Σ ∩ V = ∅,
• das Startsymbol S ∈ V und
• eine endliche Menge P von Produktionen, wobei eine Produktion von der Form
(u, v) ist mit
u ∈ (Σ ∪ V )∗ V (Σ ∪ V )∗ und v ∈ (Σ ∪ V )∗
(b) Sei (u, v) eine Produktion von G. Dann definieren wir für Worte w1 und w2 ∈ (Σ ∪ V )∗
w1 → w2 ⇐⇒ Es gibt x, y ∈ (Σ ∪ V )∗ mit w1 = xuy und
w2 = xvy.
(c) Seien r, s ∈ (Σ ∪ V )∗ . Dann definieren wir
r → s ⇐⇒ Es gibt Worte w1 = r, w2 , . . . , wk = s, so dass
∗
w1 → w2 → . . . → wk .
(d) L(G) = w ∈ Σ∗ | S → w ist die von der Grammatik erzeugte Sprache.
n
∗
o
Warum betrachten wir Grammatiken? Programmiersprachen lassen sich am besten als eine
formale Sprache, die Sprache aller syntaktisch korrekten Programme auffassen. Eine Grammatik
für eine Programmiersprache drückt dann die Regeln der Programmiersprache aus.
Beispiel 3.18 Wir geben eine Grammatik G für arithmetische Ausdrücke mit ganzzahligen
Komponenten an. G besitzt das Eingabealphabet
Σ = +, −, ∗, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, (, )
n
o
sowie
• das Startsymbol A und
• die Variablen I und Z.
Die Produktionen haben die Form
A → A + A | A − A | A ∗ A | (A) | I | + I | − I
I → ZI | Z
Z → 0|1|2|3|4|5|6|7|8|9
(Die vertikalen Linien trennen Produktionen, die dieselbe Variable ersetzen.) Die Regeln dieser
Grammatik spiegeln die rekursive Definition arithmetischer Ausdrücke wider.
Die erzeugte Sprache L(G) ist nicht regulär. (Warum?) Wenn wir aber das Startsymbol A durch
I ersetzen, erhalten wir eine reguläre Sprache, nämlich die Sprache der Dezimaldarstellungen
natürlicher Zahlen.
Definition 3.22 Eine Grammatik G = (Σ, V, S, P ) heißt regulär, wenn alle Produktionen in
P die Form
u→
(für u ∈ V ) oder
u → av (für u, v ∈ V , a ∈ Σ)
haben.
113
3. Endliche Automaten und reguläre Sprachen
Satz 3.22 L sei eine Sprache. Dann gilt:
L regulär ⇐⇒ Es gibt eine reguläre Grammatik G mit L = L(G).
Beweis: „⇒ “ Sei L regulär und sei A ein endlicher Automat A, der L akzeptiert. Auf Eingabe
w führt A die Zustandsübergänge
w
w
w
q0 →1 q1 →2 . . . →n qn
durch und akzeptiert, falls qn ∈ F . Dies legt nahe, eine Grammatik zu konstruieren, die
Ableitungsfolgen der Form
q0 → w1 q1 → w1 w2 q2 → . . . → w1 · · · wn qn
erlaubt mit anschließender Produktion qn → . Deshalb definieren wir eine Grammatik G mit
• Variablenmenge Q,
• Startsymbol q0 ,
• sowie den Produktionen
p → aq falls δ(p, a) = q
p→
falls p ∈ F .
„⇐“ Angenommen, L = L(G) für eine reguläre Grammatik G = (Σ, V, S, P ). Eine Ableitung
von G hat die Form
S → w1 V1 → w1 w2 V2 → . . . → w1 · · · wn Vn → w1 · · · wn .
Eine Simulation durch einen deterministischen Automaten scheint nicht sinnvoll, da im allgemeinen aus mehreren möglichen Produktionen gewählt werden kann. Es bietet sich vielmehr
eine Simulation durch einen nichtdeterministischen Automaten N an. Wir setzen
• Q=V,
• q0 = S
und definieren
• δ(X, a) = {Y | X → aY ∈ P }
• F = {X ∈ V | X → ∈ P }
Aufgabe 74
Beweise oder widerlege: Sei L regulär. Dann stimmt die minimale Zustandszahl eines NFA A für L überein
mit der kleinsten Zahl von Variablen einer regulären Grammatik G für L.
3.7. Entscheidungsprobleme
Wir zeigen jetzt, dass viele wichtige Eigenschaften deterministischer endlicher Automaten
effizient nachprüfbar sind. Entscheidungsprobleme für nichtdeterministische Automaten sind,
mit einigen wenigen Ausnahmen, deutlich schwieriger.
Satz 3.23 A, A1 und A2 bezeichne deterministische Automaten und N bezeichne einen nichtdeterministischen Automaten. Die folgenden Entscheidungsprobleme sind effizient lösbar:
114
3.8. Zusammenfassung
(a) Ist L(A) 6= ∅, bzw. ist L(N ) 6= ∅?
(b) Ist L(A) = Σ∗ ?
(c) Ist L(A1 ) = L(A2 ), bzw. ist L(A1 ) ⊆ L(A2 )?
(d) Ist L(A) endlich?
Beweis (a): Wir untersuchen die Frage nach Leerheit nur für einen nichtdeterministischen
Automaten N , das Leerheitsproblem für deterministische Automaten kann völlig analog gelöst
werden. Sei q0 der Anfangszustand von N und sei F die Menge der akzeptierenden Zustände.
Wir beobachten, dass L(N ) genau dann nichtleer ist, wenn es einen Weg von q0 zu einem
Zustand in F gibt. Das Erreichbarkeitsproblem für mindestens einen Zustand in F können wir
jetzt mit Hilfe der Tiefensuche, angewandt auf das Zustandsdiagramm von N , effizient lösen.
(b), (c) und (d) sind als Übungsaufgaben gestellt.
Aufgabe 75
Sei A ein DFA. Entwerfe einen möglichst effizienten Algorithmus, der entscheidet ob A unendlich viele Worte
akzeptiert. Bestimme die Laufzeit in Abhängigkeit von der Anzahl der Zustände von A.
Bemerkung 3.6 Die Entscheidungsprobleme (b), (c) und (d) aus Satz 3.23 lassen sich in aller
Wahrscheinlichkeit nicht effizient für nichtdeterministische Automaten lösen: Siehe dazu Satz
?
5.15. Erstaunlicherweise gehört das anscheinend unschuldige Problem L(N ) 6= Σ∗ noch nicht
einmal zur Klasse NP: Einer der Gründe hierfür ist, dass sich der Unterschied zwischen L(N )
und Σ∗ erst für Worte zeigen kann, deren Länge exponentiell in der Anzahl der Zustände ist!
Auch das Minimierungsproblem für nichtdeterministische Automaten ist anscheinend äußerst
schwierig.
Viele vernünftige Entscheidungsprobleme lassen sich effizient für deterministische Automaten
lösen. Eine Ausnahme ist das Interpolationsproblem: Für gegebene Teilmengen P, N ⊆ Σ∗
und einen Schwellenwert N , gibt es einen DFA mit höchstens N Zuständen, der alle Worte in
P akzeptiert und alle Worte in N verwirft?
3.8. Zusammenfassung
Wir haben endliche Automaten und die von ihnen akzeptierten Sprachen, die regulären
Sprachen, betrachtet. Wir haben verschiedene Minimierunsalgorithmen, nämlich den Algorithmus von Moore und den Algorithmus von Hopcroft besprochen, die zu einem gegebenen
deterministischen endlichen Automaten einen äquivalenten, aber minimalen Automaten, den
Äquivalenzklassenautomaten bestimmen. Der Beweis der Minimalität gelang durch den Index
der Sprache, der der Minimalanzahl von Zuständen entspricht. Unsere Argumentation hat
auch gezeigt, dass der minimale Automat, bis auf eine Umbenennung der Zustände, eindeutig
bestimmt ist.
Während der Betrachtung minimaler Automaten haben wir auch den Satz von Nerode erhalten,
der reguläre Sprachen als Sprachen mit endlichem Index charakterisiert. Der Nachweis der
Nichtregularität einer Sprache kann deshalb mit den Satz von Nerode oder mit dem PumpingLemma geführt werden.
Wir haben verschiedene äquivalente Charakterisierungen regulärer Sprachen kennengelernt,
nämlich durch
- deterministische endliche Automaten,
115
3. Endliche Automaten und reguläre Sprachen
- nichtdeterministische endliche Automaten,
- probabilistische Automaten mit positiver Lücke,
- deterministische oder nichtdeterministische Zweiwege Automaten
- reguläre Ausdrücke oder
- reguläre Grammatiken.
Die verschiedenen Charakterisierungen stellen reguläre Sprachen in unterschiedlicher Beschreibungslänge dar. Die größtmöglichen Unterschiede sind in vielen Fällen bekannt, allerdings
ist die Frage, ob 2DFAs für einige reguläre Sprachen exponentiell mehr Zustände als 2NFAs
erfordern, weiterhin offen. Wir haben allerdings gezeigt, dass sweeping 2DFAs exponentiell
mehr Zustände als NFAs benötigen.
Weiterhin haben wir gesehen, dass reguläre Sprachen unter den Operationen
- Vereinigung, Durchschnitt und Komplement
- sowie Konkatenation und Kleene-Abschluß (Sternoperation)
abgeschlossen sind. Der Abschluß unter vielen weiteren Operationen wird in den Übungen
besprochen.
Wichtige algorithmische Probleme wie die Feststellung der Äquivalenz oder die Minimierung
lassen sich für deterministische endliche Automaten effizient lösen, sind aber für nichtdeterministische endliche Automaten notorisch schwierig (siehe Satz 5.15): Die größere Beschreibungskraft
nichtdeterministischer endlicher Automaten muss algorithmisch teuer erkauft werden.
116
4. Kontextfreie Sprachen
Als Grundlage für die Syntaxdefinition von Programmiersprachen sind reguläre Sprachen zu
ausdrucksschwach. Deshalb betrachten wir in diesem Kapitel die weitaus mächtigere Klasse
der kontextfreien Sprachen, die wir durch kontextfreie Grammatiken einführen. Wir zeigen
wie das Wortproblem für kontextfreie Sprachen mit Hilfe der Chomsky Normalform effizient
gelöst werden kann und stellen Techniken vor, die es erlauben, Sprachen als nicht kontextfrei
nachzuweisen. Am Ende des Kapitels werden wir mit Hilfe von Kellerautomaten auf die
Klasse der deterministisch kontextfreien Sprachen geführt. Sie stellen den praxistauglichsten
Kompromiss zwischen Ausdruckskraft und Komplexität des Wortproblems dar.
Definition 4.1 Eine Grammatik G mit Produktionen der Form
u→v
mit u ∈ V und v ∈ (V ∪ Σ)∗
heißt kontextfrei. Eine Sprache L heißt kontextfrei, wenn es eine kontextfreie Grammatik G
mit
L(G) = L
gibt.
Beispiel 4.1 Wir beschreiben einen allerdings sehr kleinen Ausschnitt von Pascal durch eine
kontextfreie Grammatik. Dazu benutzen das Alphabet
Σ = {a, . . . , z, ;, :=}
und die Variablen
V
= {S, statements, statement, assign-statement, while-statement,
variable, boolean, expression }.
In den Produktionen unseres Pascal Fragments führen wir die Variablen „boolean, expression
und variable“ nicht weiter aus:
S → begin statements end
statements → statement | statement ; statements
statement → assign − statement | while − statement
assign − statement → variable := expression
while − statement → while boolean do statements
Lassen sich denn stets die syntaktisch korrekten Programme einer modernen Programmiersprache als eine kontextfreie Sprache auffassen? Die erste Antwort ist Nein. In Pascal muss zum
Beispiel sichergestellt werden, dass Anzahl und Typen der formalen und aktuellen Parameter
übereinstimmen.
Die „Kopiersprache“ {ww | w ∈ Σ∗ } modelliert die Überprüfung auf Typkonsistenz,
allerdings wird sich die Kopiersprache als nicht kontextfrei herausstellen.
117
4. Kontextfreie Sprachen
Die zweite Antwort ist aber „im wesentlichen Ja, wenn man „Details“ wie Typ-Deklarationen
und Typ-Überprüfungen ausklammert.
Typischerweise beschreibt man die Syntax durch eine kontextfreie Grammatik, die alle
syntaktisch korrekten Programme erzeugt. Allerdings werden auch syntaktisch inkorrekte
Progamme (z.B. aufgrund von Typ-Inkonsistenzen) erzeugt. Die nicht eingehaltenene
(nicht-kontextfreien) Syntax-Vorschriften können nach Erstellung des Ableitungsbaums
überprüft werden.
Was ist ein Ableitungsbaum? Das klären wir im nächsten Abschnitt.
4.1. Ableitungsbäume
Im Compilerproblem möchten wir nicht nur entscheiden, ob ein Wort w von einer kontextfreien
Grammatik erzeugt werden kann, sondern wir möchten zusätzlich eine Ableitung von w, bzw.
einen Ableitungsbaum von w konstruieren.
Definition 4.2 Sei G = (Σ, V, S, P ) eine kontextfreie Grammatik und sei B ein Baum mit
den folgenden Eigenschaften:
• Die Wurzel von B ist mit S markiert,
• innere Knoten sind mit Variablen markiert, während Blätter mit Buchstaben aus Σ
markiert sind,
• wenn der Knoten v mit der Variablen A markiert ist und wenn die Kinder von v die
Markierungen (von links nach rechts) v1 , . . . , vs tragen, dann ist A → v1 · · · vs eine
Produktion von G.
B heißt ein Ableitungsbaum des Wortes w, wenn man w durch die links-nach-rechts Konkatenation der Markierungen der Blätter von B erhält.
Beispiel 4.2 Wir geben zuerst eine kontextfreie Grammatik für die Sprache
L = w ∈ {0, 1}+ | w hat gleich viele Nullen wie Einsen
n
an. Unsere Grammatik G besitzt das Startsymbol S sowie die Variablen Null und Eins. Alle
von Null (bzw. Eins) ableitbaren Worte werden genau eine Null (bzw. Eins) mehr als Einsen
(bzw. Nullen) besitzen. Dies wird erreicht durch die Produktionen
S → 0 Eins | 1 Null
Eins → 1 | 0 Eins Eins | 1 S
Null → 0 | 1 Null Null | 0 S
(Zeige zuerst durch Induktion über die Länge der Ableitungen, dass
w ∈ {0, 1}+ | Eins → w = w ∈ {0, 1}+ | w hat eine Eins mehr
∗
n
und
o
n
w ∈ {0, 1}+ | Null → w = w ∈ {0, 1}+ | w hat eine Null mehr
n
∗
o
n
gilt. Dann folgt die Behauptung L = L(G).)
118
o
o
4.1. Ableitungsbäume
Wir betrachten als Nächstes das Wort w = 000111. w besitzt die Ableitung
S → 0 Eins → 00 Eins Eins → 000 Eins Eins Eins →
0001 Eins Eins → 00011 Eins → 000111.
und deshalb den Ableitungsbaum
S
0
Eins
0
0
Eins
Eins
Eins
Eins
1
1
1
Beachte, dass jedem Ableitungsbaum verschiedene Ableitungen entsprechen, nämlich zum
Beispiel Linksableitungen (die jeweils die linkeste Variable ersetzen), sowie Rechtsableitungen
(die jeweils die rechteste Variable ersetzen):
S → 0 Eins → 00 Eins Eins → 00 Eins 1 →
000 Eins Eins 1 → 000 Eins 11 → 000111.
Ordnet ein Compiler unterschiedlichen Ableitungsbäumen unterschiedliche Bedeutung zu,
dann kann ein Wort, abhängig von der Ableitung unterschiedliche Bedeutungen besitzen:
Ein Programm, das in einer mehrdeutigen Programmiersprache geschrieben wurde, besitzt
somit compiler-abhängige Semantiken! Wir sollten also schon auf eindeutigen Grammatiken
bestehen!
Definition 4.3 Sei G eine kontextfreie Grammatik.
(a) G heißt genau dann mehrdeutig, wenn es ein Wort w ∈ L(G) mit zwei verschiedenen
Ableitungsbäumen gibt.
Wenn G nicht mehrdeutig ist, dann heißt G eindeutig.
(b) Eine Sprache L heißt eindeutig, wenn es eine eindeutige Grammatik G gibt mit L = L(G).
Ansonsten heißt L inhärent mehrdeutig.
Satz 4.1 Jede reguläre Sprache ist eine eindeutige, kontextfreie Sprache.
Beweis: Sei L = L(A) für einen DFA A = (Σ, Q, δ, q0 , F ). Wir „bauen“ eine Grammatik
G = (Σ, V, S, P ), die die (eindeutigen) Berechnungen von A simuliert. Dazu setzen wir V := Q
und fügen eine Produktion p → aq genau dann zur Menge P hinzu, wenn δ(p, a) = q gilt. Da ein
DFA ein Wort w mit genau einer Berechnung akzeptiert, besitzt w genau einen Ableitungsbaum.
119
4. Kontextfreie Sprachen
Beispiel 4.3 Wir zeigen in einer Übungsaufgabe in Kapitel 4.3, dass
L = ai bj ck | i = j oder j = k
n
o
inhärent mehrdeutig ist. Woran liegt das? Wenn w ∈ L, dann gilt w = ai bi ck oder w = ai bj cj .
Eine Grammatik „sollte“ deshalb eine der zwei Optionen auswählen müssen; wenn aber beide
Optionen zutreffen, also wenn w = ai bi ci , dann hat w zwei verschiedene Ableitungsbäume und
die Grammatik ist mehrdeutig.
Beispiel 4.4 Die Grammatik G besitze die Komponenten
• Σ = {x, y, +, −, ∗, (, )}
• V = {S}
• die Produktionen
S → S + S | S ∗ S | (S) | x | y.
Damit ist L(G) die Sprache aller (teilweise geklammerten) arithmetischen Ausdrücke in den
Variablen x und y. G ist nicht eindeutig, denn x + x ∗ y besitzt die zwei Ableitungsbäume
S
S
S
+
x
S
S
*
x
S
S
S
y
x
+
*
S
S
y
x
Ableitungsbäume werden bei der Compilierung zur Codegenerierung benutzt. Der erste Baum
liefert dann den Code x + (x ∗ y), während der zweite Baum den Code (x + x) ∗ y liefert. Es
wäre also hilfreich, wenn die Sprache L eindeutig wäre, und dies ist auch tatsächlich der Fall,
wenn wir eine andere Grammatik G benutzen:
Die Grammatik G mit dem Startsymbol S und den Variablen T (generiert Terme) und F
(generiert Faktoren) wird eindeutig sein. Die Produktionen von G haben die Form
S → S + T |T
T
→ T ∗ F |F
F
→ (S) | x | y.
Mit dieser Grammatik legen wir fest, dass Multiplikation „starker bindet“ als Addition. Wir
zeigen durch Induktion über die Länge eines arithmetischen Ausdrucks A, dass es für jede
Variable X höchstens einen Ableitungsbaum für A gibt, dessen Wurzel mit X markiert ist.
Induktionsbasis: |A| = 1.
Es ist A ≡ x oder A ≡ y.
Zum Beispiel für A ≡ x ist S → T → F → x die (sogar)1 eindeutige Ableitung.
Induktionsschritt:
1
Beachte, dass eindeutige Grammatiken verschiedene Ableitungen für dasselbe Wort w besitzen können,
nämlich zum Beispiel die Links- und die Rechtsableitung von w. Alle Ableitungen von w müssen aber zum
eindeutig bestimmten Ableitungsbaum von w gehören.
120
4.1. Ableitungsbäume
Fall 1: Die Produktion S → S + T wird als Erste angewandt.
Der Buchstabe + wird ohne äußere Klammerung eingeführt. Jede andere erste Ableitung muss
äußere Klammern um + setzen setzen. Also beginnt jeder Ableitungsbaum B von A mit der
Produktion S → S + T. Die mit S und T beschrifteten Kinder der Wurzel erzeugen nach
Induktionsannahme Ausdrücke mit eindeutigen Ableitungsbäumen.
Die anderen Fälle werden analog behandelt.
Aufgabe 76
Beschreibe kontextfreie Grammatiken für die Sprachen L1 und L2 :
L1 = {ai bj ck | i, j, k ≥ 0 und i 6= j + k}.
Es sei Σ = {x, y, (, ), +, ∗}. L2 ist die Menge aller arithmetischen Ausdrücke über Σ (mit Variablen
x und y, sowie mit den Operationen Addition und Multiplikation). Ein arithmetischer Ausdruck darf aber
keine überflüssigen Klammern enthalten. Wir folgen den konventionellen Prioritätsregeln, nämlich dass die
Multiplikation eine höhere Priorität hat als die Addition.
Zum Beispiel gehören die Ausdrücke x ∗ x ∗ y, (x ∗ y + x) ∗ y, x + y + x zu L2 , während die Ausdrücke (x ∗ x) ∗ y,
((x ∗ y) + x) ∗ y, (x + y) + x überflüssige Klammern besitzen und deshalb nicht zu L2 gehören.
Aufgabe 77
Es sei L = {w ∈ {0, 1}∗ |für jedes Präfix u von w gilt: |u|0 ≥ |u|1 }. (|u|b zählt die Anzahl der Vorkommen von
b in u.)
Konstruiere eine kontextfreie Grammatik G, die die Sprache L erzeugt. Beweise, dass L(G) = L ist.
Aufgabe 78
Sei L = {ai bj ck : i, j, k ≥ 0 und i + j ≤ k ≤ 2 · (i + j)}.
(a) Zeige, dass L nicht regulär ist.
(b) Zeige, dass L kontextfrei ist, indem du eine kontextfreie Grammatik für die Sprache angibst.
Aufgabe 79
Es sei L = {ai bj ck | k =
6 i + j}. Konstruiere eine eindeutige kontextfreie Grammatik für die Sprache L.
Beweise die Eindeutigkeit.
Aufgabe 80
(a) Die Dyck-Sprache D aller wohlgeformten Klammerausdrücke wird definiert durch die kontextfreie
Grammatik G mit den Produktionen
S → (S) | SS | ε
Zeigen Sie, dass die Grammatik mehrdeutig ist, und konstruieren Sie eine eindeutige kontextfreie
Grammatik G0 für D. Zeigen Sie, dass G0 eindeutig ist und dass L(G) = L(G0 ) gilt.
(b) Die Grammatik G mit dem Terminalalphabet Σ := {i, e} und den Produktionen
S→i S e S| i S|
modelliert eine Spezifikation der if-then-else-Anweisung. Leider besitzt das Wort
iie
zwei verschiedene Ableitungsbäume. Entwerfen Sie eine eindeutige kontextfreie Grammatik G0 für die
Sprache L(G). Begründen Sie informell, warum Ihre Konstruktion funktioniert: Insbesondere, warum
gilt L(G) = L(G0 )?
Hinweis: Ihre eindeutige Grammatik G0 sollte einem „e“ das nächstliegende offene „i“ zuweisen. Was
bedeutet das? Für eine Produktion von der Form „Z → i X e Y “ ist zu garantieren, dass X nur
if-then-else-Ausdrücke mit derselben Anzahl von i’s und e’s erzeugt.
121
4. Kontextfreie Sprachen
Aufgabe 81
Zeige, dass die folgende Grammatik G mehrdeutig ist. G hat die folgenden Komponenten: das Alphabet
Σ = {a}, die Variablen S und A, das Startsymbol S und die Produktionen S → AA, A → aSa | a.
Beschreibe eine äquivalente, aber eindeutige kontextfreie Grammatik G0 . (Wir nennen G und G0 äquivalent,
wenn L(G) = L(G0 ).)
Hinweis: Versuche zuerst, L(G) zu bestimmen.
Aufgabe 82
Gegeben sei die folgende kontextfreie Grammatik G = (Σ, V, S, P ), mit Σ = {a, b, c, d}, V = {S, B} und den
Produktionen S ⇒ aS | SB | d, B ⇒ Bb | c.
Zeige, dass G nicht eindeutig ist.
Zeige, dass die Sprache L(G) eindeutig ist.
4.2. Die Chomsky-Normalform und das Wortproblem
Wir versuchen jetzt, eine effiziente Lösung des Compilerproblems zu erhalten. Um dies vorzubereiten, werden wir zuerst zeigen, dass sich jede kontextfreie Grammatik (die nicht das leere
Wort erzeugt) in Chomsky-Normalform überführen läßt.
Definition 4.4 Eine Grammatik ist in Chomsky-Normalform, wenn alle Produktionen die
Form
A → BC oder A → a
besitzen (für A, B, C ∈ V und a ∈ Σ).
Satz 4.2 Sei L kontextfrei mit ∈
/ L. Dann gibt es eine Grammatik G in Chomsky-Normalform
mit L = L(G).
Beweis: Es gelte L = L(G) für eine kontextfreie Grammatik G = (Σ, V, S, P ).
Schritt 1: Wir erzwingen, dass die rechte Seite einer Produktion entweder nur aus Variablen
besteht oder nur aus einem Buchstaben.
Für jeden Buchstaben a ∈ Σ füge die neue Variable Xa hinzu und erlaube Xa → a als neue
Produktion. Jetzt kann jede Produktion
A → α1 a1 α2 a2 · · · αr ar αr+1
(mit Buchstaben a1 , . . . , ar und α1 , . . . , αr+1 ∈ V ∗ ) durch die Produktion
A → α1 Xa1 α2 Xa2 · · · αr Xar αr+1
ersetzt werden. P1 sei die Menge der neuen Produktionen.
Schritt 2: Erzwinge, dass alle Produktionen eine rechte Seite der Länge höchstens zwei
besitzen.
Ersetze jede Produktion
p ≡ A → C1 · · · Cs
122
(mit s ≥ 3)
4.2. Die Chomsky-Normalform und das Wortproblem
durch die Produktionen
A → C1 X1p ,
X1p → C2 X2p ,
..
.
p
Xs−2
→ Cs−1 Cs
P2 sei die neue Produktionenmenge.
Schritt 3:
Entferne alle -Produktionen A → .
Die Produktion A → gehöre zu P2 . Es bietet sich an, die Produktion A → zu entfernen
und gleichzeitig für jede Produktion der Form
B → AC,
B → CA oder B → A
die neuen Produktionen
B → C,
oder B → B→C
hinzuzufügen. Aber damit haben wir uns eine neue -Produktion eingehandelt.
Schritt 3.1:
Bestimme V 0 = {A ∈ V | A → }.
∗
Wie? Seien A1 → , . . . , Ak → sämtliche -Produktionen in P2 . Wir setzen anfänglich
W = {A1 , . . . , Ak },
V 0 = ∅,
P 0 = P2
(1) Entferne irgendeine Variable A aus der Menge W , und füge A zu V 0 hinzu. Für jede
Produktion der Form
B → AC,
B → CA oder B → A
(mit B 6= A)
füge die neuen Produktionen B → C, B → zur Menge P 0 hinzu. Wenn B → zu P 0
hinzugefügt wird, dann füge B zur Menge W hinzu. Um zu verhindern, dass A wieder
in die Menge W hinzugefügt wird, entferne alle Produktionen
A→α
von P 0 .
(2) Wiederhole (1), solange W 6= ∅.
Schritt 3.2:
Für jede Regel
A → BC
oder A → CB
mit B ∈ V 0
füge die Regel A → C zu P2 hinzu und streiche alle -Produktionen. Nenne die neue Produktionenmenge P3 .
Schritt 4:
Die Produktionen in P3 sind von der Form
A → a,
A → B,
A → BC,
und nur die Kettenregeln A → B sind noch zu entfernen.
Schritt 4.1: Um die Kettenregeln besser veranschaulichen zu können, betrachten wir den
Graphen H(P3 ):
- Die Knoten von H(P3 ) entsprechen den Variablen,
123
4. Kontextfreie Sprachen
- für jede Kettenregel A → B erhält H(P3 ) die entsprechende Kante.
Mit einer Tiefensuche auf dem Graphen H(P3 ) können wir alle Kreise des Graphen entdecken:
Ein Kreis wird nämlich durch Rückwärtskanten geschlossen. Wähle einen beliebigen Kreis
A1 → A2 → . . . → Ak → A1 . Jetzt ersetze systematisch in jeder Produktion jede Variable A2 ,
. . . , Ak durch A1 ; dabei entstehende Produktionen A1 → Ai werden entfernt.
Die Variablen A2 , . . . , Ak sind jetzt überflüssig, da sie in keiner Produktion mehr auftauchen.
Wir wiederholen dieses Verfahren, bis alle Kreise zerstört sind. Die neue Produktionenmenge
sei P4 .
Schritt 4.2: Der Graph H(P4 ) ist jetzt kreisfrei. Wir numerieren die Knoten mit der Methode
des topologischen Sortierens, so dass
Ai → Aj
bedingt, dass i < j. Seien A1 , . . . , Am die Variablen.
Es gibt offensichtlich keine Kettenregel der Form Am → Ai . Wir betrachten nun sämtliche
unmittelbaren Vorgänger von Am . Existiert eine Produktion Ak → Am , so entfernen wir diese
Produktion und fügen für jede Produktion Am → α die Produktion Ak → α hinzu.
α ist aber entweder ein Buchstabe oder von der Form BC. Wir wiederholen dieses Verfahren,
bis alle Kettenregeln entfernt sind. Jetzt haben wir Chomsky-Normalform erreicht.
Bemerkung 4.1 Wir haben mehr erreicht als im Satz ausgesagt. Wir haben gezeigt, wie
aus einer kontextfreien Grammatik G eine äquivalente Grammatik in Chomsky-Noormalform
effizient konstruiert werden kann. Weiterhin ist die Größe der Grammatik, also die Gesamtlänge
aller Produktionen, nur polynomiell angestiegen.
Wir spielen nun den kompletten Algorithmus schrittweise an einer Fallstudie durch. Unsere Ausgangsgrammatik sei G = (Σ, V, S, P ) mit Σ = {a, b, c} und V = {S, A, B, C}. Die
Produktionsmenge P ist:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
S
S
S
A
A
A
A
B
B
B
B
C
C
C
→
→
→
→
→
→
→
→
→
→
→
→
→
→
aABCb
C
ABC
B
cC
aSc
aC
S
b
cC
SCCB
Im ersten Schritt haben wir die Regeln 1, 7, 8, 9 und 12 zu bearbeiten. Wir führen die neuen
Variablen Xa , Xb und Xc ein. Die betreffenden Produktionen lauten nun
124
4.2. Die Chomsky-Normalform und das Wortproblem
10 S → Xa ABCXb
70 A → Xc C
80 B → Xa SXc
90 B → Xa C
120 C → Xc C
und weisen rechts nur noch Strings aus V ∗ auf. Dazu kommen die neuen Produktionen
15 Xa → a
16 Xb → b .
17 Xc → c
Im zweiten Schritt widmen wir uns den Produktionen, die auf Variablenstrings abbilden,
die länger als 2 sind. Wir teilen die Produktionen 1’, 4, 8’, 13 auf. Danach lautet unsere
Produktionsmenge P2 :
10 a
S → Xa X11
0
1 b X11 → AX21
10 c X21 → BX31
10 d X31 → CXb
2
S → 3
S → C
4a
A → AX14
4b
X14 → BC
5
A → B
6
A → 70
A → Xc C
80 a
B → Xa X18
80 b X18 → SXc
90
B → Xa C
10
B → S
11
B → b
120
C → Xc C
13a
C → SX113
13
13b X1 → CX213
13c X213 → CB
14
C → 15
Xa → a
16
Xb → b
Xc → c
17
Jetzt haben wir uns den -Produktionen in Schritt drei zu widmen. Wir müssen die Menge
aller Variablen bestimmen, die auf abgebildet werden können. (Schritt 3.1). Wir stellen den
Ablauf tabellarisch dar.
Ausgangssituation: W = {S, A, C}, V 0 = ∅, P 0 = P2
125
4. Kontextfreie Sprachen
Phase 1, bewege S aus W nach V 0
hinzuzufügen X18 →Xc
B→
C→X113
füge B zu W hinzu.
entfernen
S→Xa X11
S→
S→C
W = {A, C, B} V 0 = {S}
Phase 3, bewege C aus W nach V 0
hinzuzufügen X31 →Xb
X14 →B
B→Xa
C→Xc
X113 →X213
X213 →B
W bleibt unverändert
entfernen
C→cC
C→SX113
C→
C→X113
C→Xc
W = {B} V 0 = {S, A, C}
Phase 5, bewege X14 aus W nach V 0
hinzuzufügen
nichts
W bleibt unverändert
entfernen X14 →BC
X14 →B
X14 →C
X14 →
W = {X213 } V 0 = {S, A, C, B, X14 }
Phase 2, bewege A aus W nach V 0
hinzuzufügen X11 →X21
A→X14
W bleibt unverändert
entfernen
A→AX14
A→B
A→
A→Xc C
A→X14
W = {C, B} V 0 = {S, A}
Phase 4, bewege B aus W nach V 0
hinzuzufügen X21 →X31
X14 →C
X213 →C
X14 →
X213 →
W := W ∪ {X14 , X213 }
entfernen
B→Xa X18
B→Xa C
B→S
B→b
B→
B→Xa
4
13
W = {X1 , X2 } V 0 = {S, A, C, B}
Phase 6, bewege X213 aus W nach V 0
hinzuzufügen X113 →C
X113 →
W := W ∪ {X113 }
entfernen X213 →BC
X213 →B
X213 →C
X213 →
W = {X113 } V 0 = {S, A, C, B, X14 , X213 }
Phase 7, bewege X113 aus W nach V 0
hinzuzufügen
nichts
W =∅
entfernen X113 →CX213
X113 →X213
X113 →C
X113 →
W = ∅ V 0 = {S, A, C, B, X14 , X213 , X113 }
126
4.2. Die Chomsky-Normalform und das Wortproblem
Als Menge V 0 erhalten wir also {S, A, B, C, X14 , X113 , X213 }. Das ist die Menge all jener Variablen,
die auf abgebildet werden können.
Gemäß Schritt 3.2 können wir nun die Produktionenmenge P3 bestimmen. Wir stellen P2
und P3 in der folgenden Tabelle gegenüber.
10 a
10 b
P2
S→Xa X11
X11 →AX21
10 c
X21 →BX31
10 d
X31 →CXb
2
3
4a
S→
S→C
A→AX14
4b
X14 →BC
5
6
70
A→B
A→
A→Xc C
80 a
80 b
B→Xa X18
X18 →SXc
90
B→Xa C
10
11
120
B→S
B→b
C→Xc C
13a
C→SX113
13b X113 →CX213
13c X213 →CB
14
15
16
17
C→
Xa →a
Xb →b
Xc →c
P3
S→Xa X11
X11 →AX21
X11 →X21
X21 →BX31
X21 →X31
X31 →CXb
X31 →Xb
S→C
A→AX14
A→X14
X14 →BC
X14 →B
X14 →C
A→B
A→Xc C
A→Xc
B→Xa X18
X18 →SXc
X18 →Xc
B→Xa C
B→Xa
B→S
B→b
C→cC
C→Xc
C→SX113
C→S
C→X113
13
X1 →CX213
X113 →C
X113 →X213
X213 →CB
X213 →C
X213 →B
Xa →a
Xb →b
Xc →c
Beachte, dass wir hier entstehende neue -Regeln, wie sie formal etwa in Zeile 4b entstehen
würden (X14 → ) gleich unterdrückt haben. Auch die in Zeile 4a entstehende triviale Regel
127
4. Kontextfreie Sprachen
A → A haben wir gar nicht erst aufgenommen.
Für den abschließenden vierten Schritt benötigen wir nunmehr den Graphen, der die Kettenregeln der Grammatik darstellt. Man vergleiche:
#
Xa
X14
6
-
?
Xc
A
X31
XX
XXX 6
@
I
@
X
XX @
R
@
XX
z
Xb
X21
C X
S
B
yXX
XX XX
@ @
I
X
X
X
@ @
@ X 13
X213
X18
X11
1
R
@
-
Mittels eines gängigen Graphenalgorithmus wie etwa der Tiefensuche ermittelt man die
Kreise. Nehmen wir an, wir würden Kreis B, S, C, X113 , X213 finden, dann können wir diese
fünf Variablen nun zu einer zusammenfassen. Da das Startsymbol unter ihnen ist, wählen wir
dieses. Wir erhalten:
-
#
Xa
X14
-
A
Xc
X31
:
@
6
I
@
R
@
@
S
X18
128
X21
Xb
X11
4.2. Die Chomsky-Normalform und das Wortproblem
Der Kreis ist nun zykelfrei. Unsere Produktionenmenge P3 verkleinert sich zu P4 :
P4
S→Xa X11
X11 →AX21
X11 →X21
X21 →SX31
X21 →X31
X31 →SXb
X31 →Xb
A→AX14
A→X14
X14 →SS
X14 →S
A→S
A→Xc S
A→Xc
S→Xa X18
X18 →SXc
X18 →Xc
S→Xa S
S→a
S→b
S→Xc C
S→c
S→SS
S→Xa
s→Xc
Xa →a
Xb →b
Xc →c
Eine topologische Sortierung kann z.B. so aussehen:
#
-
Xa 9
-
4
1
X3 3
X1 7
A 6
: Xc 10
@
6
I
@
R
@
@
S
8
Xb
X21 2
4
X18 5
X11 1
Wir beseitigen nun sukzessive die Kettenregeln in der durch die Sortierung vorgegebenen
Reihenfolge. Unsere Grammatik wächst noch einmal. Aber das Ziel ist damit auch erreicht.
129
4. Kontextfreie Sprachen
statt
S→Xc
X18 →Xc
A→Xc
S→Xa
X14 →S
A→S
A→X14
X31 →Xb
X21 →X31
X11 →X21
neu
S→c ex. bereits
X18 →c
A→c
S→a ex. bereits
X14 →Xa X11
X14 →Xa X18
X14 →Xa S
X14 →a
X14 →b
X14 →Xc C
X14 →c
X14 →SS ex. bereits
A→Xa X11
A→Xa X18
A→Xa S
A→a
A→b
A→Xc C
A→c ex. bereits
A→SS
A→SS ex. bereits
A→Xa X11 ex. bereits
A→Xa X18 ex. bereits
A→Xa S ex. bereits
A→a ex. bereits
A→b ex. bereits
A→Xc C ex. bereits
A→c ex. bereits
X31 →b
X21 →SXb
X21 →b
X11 →SX31
X11 →SXb
X11 →b
Diese Grammatik ist nun in Chomsky-Normalform.
Wir können jetzt das Compilerproblem (bzw. das Wortproblem) effizient lösen.
Satz 4.3 Satz von Cocke, Younger und Kasami
Sei G eine Grammatik in Chomsky-Normalform. Dann kann in Zeit
O |Produktionen von G| · |w|3
entschieden werden, ob w ∈ L(G).
Beweis: Wir benutzen die Methode der dynamischen Programmierung. Die Grammatik
G = (Σ, V, S, P ) liege in in Chomsky-Normalform vor und w = w1 · · · wn ∈ Σn sei die Eingabe.
130
4.3. Das Pumping Lemma und Ogden’s Lemma
Für jedes i, j (1 ≤ i ≤ j ≤ n) möchten wir die Menge
Vi,j = A ∈ V | A → wi · · · wj
∗
n
o
bestimmen. (Beachte, dass w ∈ L(G) genau dann gilt, wenn S ∈ V1,n .)
(1) Die Mengen Vi,i können sofort bestimmt werden, da
Vi,i = A ∈ V | A → wi = A ∈ V | A → wi ,
∗
n
o
n
o
denn G ist in Chomsky-Normalform.
(2) Angenommen, alle Mengen Vi,j mit j − i < s sind bestimmt. Seien jetzt i und j vorgegeben
mit j − i = s. Es gilt
A ∈ Vi,j
∗
⇔ A → wi · · · wj
⇔ Es gibt eine Produktion A → BC mit
B → wi · · · wk , und C → wk+1 · · · wj
∗
∗
⇔ Es gibt eine Produktion A → BC mit
B ∈ Vi,k und C ∈ Vk+1,j .
Wir können jetzt Vi,j in Zeit höchstens
n · Anzahl der Produktionen
bestimmen. Die behauptete Laufzeit folgt, da
n
2
Mengen zu bestimmen sind.
Kubische Laufzeit ist für Anwendungen nicht tolerabel. Wir werden uns deshalb später auf
determinstisch kontextfreie Sprachen beschränken.
Aufgabe 83
Eine Grammatik G = (Σ, V, S, P ) heißt linear, wenn jede Produktion in P die Form A → cBd, für A, B ∈ V
und c, d ∈ Σ∗ oder die Form A → a (für einen Buchstaben a ∈ Σ) hat.
Modifizieren Sie den Algorithmus von Cocke-Younger-Kasami, so dass das Wortproblem für eine gegebene
lineare Grammatik G = (Σ, V, S, P ) gelöst wird und analysieren Sie die asymptotische Laufzeit in Abhängigkeit
von der Wortlänge n := |w| einer Eingabe w. (Insbesondere können Sie die Anzahl |P | der Produktionen wie
auch die Längen der rechten Seiten von Produktionen A → cBd in P als Konstanten interpretieren.)
Hinweis: Es wird helfen, eine Datenstruktur zu bauen, die für jede Variable Y und für alle Paare (i, j) mit
?
1 ≤ i ≤ j ≤ n Fragen der Form „Y ∈ Vi,j “ in Konstantzeit beantwortet. (Zur Erinnerung: Vi,j = {X ∈ V :
∗
X ⇒ wi · · · wj })
4.3. Das Pumping Lemma und Ogden’s Lemma
Kontextfreie Grammatiken scheinen recht mächtig zu sein und die Frage nach den Grenzen
ihrer Beschreibungskraft drängt sich auf: Wie sehen möglichst einfache, nicht-kontextfreie
Sprachen aus? Für die Beantwortung dieser Frage leiten wir zuerst ein Pumping-Lemma für
kontextfreie Sprachen her:
Satz 4.4 Sei L eine kontextfreie Sprache. Dann gibt es eine Pumpingkonstante N , so dass
jedes z ∈ L mit |z| ≥ N eine Zerlegung z = uvwxy besitzt mit den Eigenschaften
(a) |vwx| ≤ N und |vx| ≥ 1 und
131
4. Kontextfreie Sprachen
(b) uv i wxi y ∈ L für alle i ≥ 0.
Wir betrachten zuerst zwei Beispiele:
Beispiel 4.5 Wir wollen zeigen, dass
L = am bm cm | m ≥ 0
n
o
nicht kontextfrei ist. Den Beweis führen wir durch eine Anwendung des Pumping-Lemmas.
Sei N die (unbekannte) Pumpingkonstante. Wir wählen dann das Wort z = aN bN cN ∈ L.
Wenn L kontextfrei ist, dann gibt es eine Zerlegung
z = uvwxy
(mit |vwx| ≤ N und |vx| ≥ 1, so dass uv i wxi y ∈ L für jedes i ≥ 0. Da |vwx| ≤ N , enthält
vwx nur a’s und b’s oder nur b’s und c’s. Wir nehmen das Erstere an. (Beachte, dass es auch
möglich ist, dass vwx nur a’s, nur b’s oder nur c’s enthält. Diese Fälle werden aber durch die
Erstgenannten mit abgedeckt.)
Dann ist aber uv 2 wx2 y ∈
/ L, denn das aufgepumpte Wort enthält mindestens ein a oder
mindestens ein b mehr als es c’s enthält. Also ist L nicht kontextfrei.
Beispiel 4.6 Wir möchten zeigen, dass die Sprache
L = dr ax by cz | r = 0 oder x = y = z
n
o
nicht kontextfrei ist. Wir versuchen, das Pumping-Lemma anzuwenden. Für die Pumpingkonstante N sei z ∈ L ein Wort mit |z| ≥ N .
Fall 1: d kommt nicht in z vor.
Dann wird d auch nach dem Auf- oder Abpumpen nicht im Wort vorkommen, und das aufoder abgepumpte Wort gehört deshalb zur Sprache L.
Fall 2: d kommt in z vor.
Dann werden wir allerdings nicht mit der Zerlegung
u = v = w = ,
x = d und
y = dr−1 ax bx cx
„fertig“: Auf- oder Abpumpen wird nur die Anzahl von d’s variieren.
Eine Argumentation mit dem Pumping-Lemma mißlingt also. Wir benötigen stattdessen eine
Version des Pumping-Lemmas, die es uns erlaubt, mindestens ein a, b oder c aufpumpen zu
können. Dies wird erreicht durch
Satz 4.5 Ogden’s Lemma
Sei L eine kontextfreie Sprache. Dann gibt es eine Pumpingkonstante N , so dass jedes z ∈ L
mit
mindestens N markierten Buchstaben
eine Zerlegung z = uvwxy besitzt, wobei
(a) höchstens N Buchstaben in vwx markiert sind,
132
4.3. Das Pumping Lemma und Ogden’s Lemma
(b) mindestens ein Buchstabe in vx markiert ist und
(c) uv i wxi y ∈ L für alle i ≥ 0 gilt.
Bemerkung 4.2 (a) Beachte, dass das Pumping-Lemma aus Odgen’s Lemma folgt, wenn wir
alle Buchstaben von z markieren.
(b) Wir können jetzt zeigen, dass
dr ax by cz | r = 0 oder x = y = z
n
o
nicht kontextfrei ist. Wenn N die Pumpingkonstante ist, wähle
z = daN bN cN
und markiere aN bN cN . Dann besitzt vwx kein a oder kein c (denn vwx besitzt nur n markierte
Buchstaben). Nach dem Aufpumpen wird uv 2 wx2 y also zuwenige a’s oder zuwenige c’s besitzen.
Beweis von Satz 4.5: Wenn L kontextfrei ist, dann ist auch L \ {} kontextfrei, und es
genügt, Odgen’s Lemma für L \ {} zu beweisen. Deshalb können wir annehmen, dass
L \ {} = L(G)
für eine Grammatik G = (Σ, V, S, P ) in Chomsky-Normalform ist. Wir wählen
N = 2|V |+1
als Pumpingkonstante. Sei nun z ∈ L ein beliebiges Wort in L mit mindestens N markierten
Buchstaben. Wir betrachten einen Ableitungsbaum B für z:
S
A
A
w
x
}
v
}
}
}
}
u
y
Wir sagen, dass ein Knoten v von B ein Verzweigungsknoten ist, wenn v markierte Blätter sowohl im linken wie auch im rechten Teilbaum besitzt. Wir erhalten die folgenden Eigenschaften
von B:
(a) B ist binär, da G in Chomsky-Normalform vorliegt.
(b) B hat 2|V |+1 markierte Blätter, also Blätter, die einen markierten Buchstaben speichern.
(c) Es gibt einen Weg W von der Wurzel zu einem Blatt, so dass W mindestens |V | + 1
Verzweigungsknoten besitzt.
Die Eigenschaften (a) und (b) sind offensichtlich. Wir weisen Eigenschaft (c) nach. Konstruiere
einen Weg W so, dass W jedes Mal mit dem Kind mit den meisten markierten Blättern
fortgesetzt wird. W beginnt an der Wurzel mit mindestens N markierten Blättern. Da die
Anzahl der markierten Blätter sich nur bei einem Verzweigungsknoten verringert, und dann
133
4. Kontextfreie Sprachen
auch nur um höchstens den Faktor 2, muß W mindestens log2 N = |V |+1 Verzweigungsknoten
besitzen.
Unter den Verzweigungsknoten von W betrachten wir die letzten |V | + 1 Verzweigungsknoten,
unter denen dann auch eine Variable A zweimal vorkommt. Das erste Vorkommen von A
benutzen wir zur Definition von v (Konkatenation der Blätter im linken Teilbaum) und wx
(Konkatenation der Blätter im rechten Teilbaum).
Beachte, dass v (und damit auch vx) mindestens einen markierten Buchstaben besitzt. Weiterhin besitzt vwx höchstens 2|V |+1 = N markierte Buchstaben: Wenn vwx mehr als N
markierte Buchstaben besitzt, dann besitzt W (auf seinem Endstück) auch mehr als |V | + 1
Verzweigungsknoten. Damit gilt
∗
S → uAy
sowie
A → vAx und
∗
∗
A → w.
Deshalb sind auch die Ableitungen
S → uAy → uwy = uv 0 wx0 y
∗
wie auch
∗
S → uAy → uvAxy → uv 2 Ax2 y
∗
∗
∗
∗
∗
∗
→ . . . → uv i Axi y → uv i wxi y
möglich, und deshalb ist uv i wxi y ∈ L für alle i ≥ 0.
Aufgabe 84
Gegeben sei eine kontextfreie Grammatik G = (Σ, V, S, P ) in Chomsky-Normalform. Außerdem sei eine
Kostenfunktion über den Produktionen P der Grammatik gegeben, die jeder Produktion p ∈ P einen Kostenfaktor
c(p) ∈ N zuordnet.
∗
Die Kosten einer Ableitung S ⇒ w sind die Summe der Kosten der benutzen Produktionen.
Beschreibe einen möglichst effizienten Algorithmus, der für ein Wort w ∈ Σ∗ den Wert einer Ableitung mit
minimalen Kosten bestimmt (bzw. den Wert unendlich ausgibt, falls w ∈
/ L(G)). Bestimme die Laufzeit deines
Algorithmus.
Aufgabe 85
Welche der folgenden Sprachen über dem Alphabet Σ = {a, b, c} sind kontextfrei?
Entwirf eine kontextfreie Grammatik, falls eine Sprache kontextfrei ist; benutze das Pumping-Lemma für
kontextfreie Sprachen oder Ogden’s Lemma, um zu zeigen, dass eine Sprache nicht kontextfrei ist.
L1 = {ai bj aj bi | i, j ≥ 0},
L2 = {ai bj ai bj | i, j ≥ 0},
L3 = {ai bi cj | i 6= j},
L4 = {ai bj ck | i ≤ k oder j ≤ k},
L5 = {ai bj ck |i = j = k gilt nicht},
L6 = {ai bj ci·j |i, j ≥ 0},
L7 = {ai bi cj dj |i, j ≥ 0}.
Aufgabe 86
Zeige oder widerlege die Kontextfreiheit der folgenden Sprachen:
(a) L1 = {w ∈ {a, b}∗ | w 6= wR },
134
4.3. Das Pumping Lemma und Ogden’s Lemma
(b) L2 = {ai bj ci | i, j ≥ 0, i 6= j},
(c) L3 = {xy | x, y ∈ {a, b}∗ , |x| = |y|, x 6= y}.
Falls eine Sprache nicht kontextfrei ist, wende das Pumping-Lemma oder Ogdens Lemma an, andernfalls
konstruiere eine kontextfreie Grammatik und entscheide, ob die jeweilige Sprache eindeutig ist.
Aufgabe 87
Zeige in den folgenden Aufgaben durch Angabe einer Grammatik oder eines Kellerautomaten, dass die jeweilige
Sprache L kontextfrei ist, bzw. zeige mit Hilfe von Ogden’s Lemma, dass L nicht kontextfrei ist. Bei Angabe einer
kontextfreien Grammatik G oder eines Kellerautomaten A genügt eine informelle, aber natürlich überzeugende
Begründung, dass L = L(G) bzw L = L(A) gilt. Begründe eine Anwendung von Ogden’s Lemma sorgfältig.
(a) Sei Σ = {a, b, #} und sei
L := {x#y : x, y ∈ {a, b}∗ , x 6= y}.
Zeige, dass L kontextfrei ist.
(b) Im Streich-Spiel ist ein Wort w ∈ {a, b}∗ gegeben. Wir müssen w in einer Folge von Zügen in das
leere Wort überführen. In einem Zug darf irgendein Teilwort, das nur aus a’s oder nur aus b’s besteht,
gestrichen werden, solange das Teilwort mindestens die Länge zwei hat.
Die Sprache ST besteht aus allen Worten w ∈ {a, b}∗ , die sich gemäß den Streich-Spiel-Regeln in das
leere Wort überführen lassen.
Beispiel: w := abbaaaba gehört zu ST , denn w → abbba → aa → . Andererseits gehört abbaaab nicht zu
ST .
Zeige, dass ST kontextfrei ist.
(c) Sei Σ = {a, b, c} und sei
L := { ai bi cj : i, j ∈ N, i 6= j }.
Zeige, dass L nicht kontextfrei ist.
Hinweis: Wenn L kontextfrei wäre, dann gibt es mit Ogden’s Lemma eine Pumpingkonstante N . Wählen
Sie z := aN bN cN +? . Welche Positionen sollten markiert werden und wie sollte ? gewählt werden?
Aufgabe 88
Wir betrachten in dieser Aufgabe eine vereinfachte Klasse von „Programmiersprachen“. Programme der Sprache
müssen durch die folgende kontextfreie Grammatik G erzeugbar sein.
Es sei G = {Σ, V, S, P }, mit Σ = {REAL, IN T, x, y, 0, 1, +, −, ; , ., e},
V
= {S, D, A, < decl >, < type >, < var-list >, < id >, < integer >, < sign >,
< digit >, < real >} und den Produktionen:
S
D
A
< decl >
< type >
< var-list >
< id >
< integer >
< sign >
< digit >
< real >
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
⇒
DA
ε | D < decl >
ε | A < id >=< integer >; | A < id >=< real >;
< type >< var-list >;
REAL | IN T
< id >|< var-list >, < id >
x | y |< id > x |< id > y
< sign >< digit >
ε|+|−
< digit > 0 |< digit > 1 | 0 | 1
< sign >< digit > . < digit > e < sign >< digit >
Zusätzlich soll für unsere Programmiersprache folgendes gelten: Jede im Anweisungsteil A benutzte Variable
muß zuvor im Deklarationsteil D deklariert sein, und der Typ der im Anweisungsteil benutzten Variablen muß
mit dem im Deklarationsteil festgelegten Typen übereinstimmen.
Zeige, dass diese Programmiersprache nicht kontextfrei ist.
Anmerkung: Wie wir an dieser Aufgabe sehen, ist folgende Arbeitsweise von Compilern notwendig: Zunächst
wird der Deklarationsteil abgearbeitet, indem die Variablen in eine Symboltabelle gehasht werden. Danach
135
4. Kontextfreie Sprachen
können auf dem verbliebenen Programm (ohne Deklarationsteil) die effizienten Lösungen des Compilerproblems
für kontextfreie Sprachen angewendet werden.
Aufgabe 89
Eine Grammatik heißt linear, wenn jede Produktion in P die Form u ⇒ xvy, für u, v ∈ V und x, y ∈ Σ∗ oder
u ⇒ hat. Wir nennen eine Sprache L linear, wenn es eine lineare Grammatik G mit L = L(G) gibt.
(a) Beweise das folgende Pumping-Lemma für lineare Sprachen: Wenn L eine lineare Sprache ist, dann
gibt es eine Pumping-Konstante N , so dass sich jedes z ∈ L mit |z| ≥ N als z = uvwxy schreiben lässt,
wobei |uvxy| ≤ N, |vx| ≥ 1 und uv i wxi y ∈ L für alle i ≥ 0 gilt.
(b) Zeige, dass {ai bi cj dj |i, j ≥ 0} keine lineare Sprache ist.
Aufgabe 90
Sei G eine Grammatik in Chomsky-Normalform.
(a) Sei L(G) endlich. Gib eine obere Schranke für die Länge eines längsten Wortes in L(G) an.
(b) Sei L(G) unendlich. Gib eine obere Schranke für die Länge eines kürzesten Wortes in L(G) an.
Das Pumping Lemma bzw. Ogden’s Lemma beschreibt die „Auf- und Abpumpeigenschaft“
kontextfreier Sprachen. Diese strukturelle Eigenschaft können wir benutzen, um Mehrdeutigkeit
nachzuweisen wie auch um zu zeigen, dass für unäre Alphabete kontextfreie Sprachen bereits
regulär sind.
Aufgabe 91
Die Sprache
L = { ai · bj · ck : i = j oder j = k }
ist kontextfrei. In dieser Aufgabe soll gezeigt werden, dass L inhärent mehrdeutig ist. Wende dazu Ogden’s
Lemma auf eine vermeintlich eindeutige Grammatik G für L an. Sei N die Pumping-Konstante.
(a) Wähle das Wort z1 := aM · bM · cM +M ! ∈ L (mit M := max{N, 3}) und markiere alle a’s. Aus dem
Beweis von Ogden’s Lemma erhält man
• eine Zerlegung z1 = u1 v1 w1 x1 y1 (mit mindestens einer markierten Position in v1 x1 und höchstens
N markierten Positionen in v1 w1 x1 ) sowie
• eine Variable A mit den Ableitungen S ⇒ u1 Ay1 sowie A ⇒ v1 Ax1 | w1 .
∗
∗
Wir schauen noch etwas genauer hin.
i) Zeige: v1 = aj und x1 = bj für ein j mit 1 ≤ j ≤ M .
ii) Zeige: Allein mit den Ableitungen S ⇒ u1 Ay1 und A ⇒ v1 Ax1 | w1 kann man das Wort
∗
erzeugen.
∗
z̃ := aM +M ! · bM +M ! · cM +M !
(b) Wenn man das Verfahren aus a) auf das Wort z2 := aM +M ! · bM · cM anwendet, erhält man eine Zerlegung
z2 = u2 v2 w2 x2 y2 mit v2 = bk , x2 = ck (für 1 ≤ k ≤ M ) sowie eine Variable B mit den Ableitungen
∗
∗
S ⇒ u2 By2 und B ⇒ v2 Bx2 | w2 . Auch diesmal kann man das Wort z̃ mit diesen neuen Ableitungen
erzeugen. Zeige, dass die beiden Ableitungen von z̃ aus a) und b) zwei verschiedene Ableitungsbäume
erfordern.
Aufgabe 92
Sei Σ = {1} und sei L ⊆ Σ∗ eine kontextfreie Sprache. Wir möchten mit Hilfe des Pumping-Lemmas für
kontextfreie Sprachen zeigen, dass L regulär ist.
(a) Sei N die Pumpingkonstante, wenn das Pumping-Lemma für L angewandt wird. Zeigen Sie: Für jedes
M ≥ N mit 1M ∈ L gibt es eine Zahl aM ≤ N , so dass
{ 1M −aM 1i·aM : i ∈ N } ⊆ L.
(b) Zeigen Sie, dass L0 := {1M ∈ L : M ≥ N } eine endliche Vereinigung von Mengen der Form {1b 1i·a :
i ∈ N>0 } für Zahlen a, b ∈ N mit a ≤ N und b ≥ N − a ist.
(c) Zeigen Sie, dass L regulär ist.
Kommentar: L ist also die Vereinigung von „linearen“ Sprachen.
136
4.3. Das Pumping Lemma und Ogden’s Lemma
4.3.1. Abschlusseigenschaften kontextfreier Sprachen
Als Konsequenz von Beispiel 4.5 erhalten wir, dass kontextfreie Sprachen nicht unter Durchschnittsbildung und auch nicht unter Komplementbildung abgeschlossen sind:
Satz 4.6 (a) Wenn L1 und L2 kontextfrei sind, dann sind auch L1 ∪ L2 , L1 ◦ L2 und L∗1
kontextfrei.
(b) Es gibt kontextfreie Sprachen L1 und L2 , so dass der Durchschnitt L1 ∩L2 nicht kontextfrei
ist.
(c) Es gibt eine kontextfreie Sprache L, so dass die Komplementsprache L nicht kontextfrei
ist.
Beweis: (a) Es gelte L1 = L(G1 ) und L2 = L(G2 ), wobei G1 = (Σ, V1 , S1 , P1 ), G2 =
(Σ, V2 , S2 , P2 ) und V1 ∩ V2 = ∅. Setze
- V = V1 ∪ V2 ∪ {S} mit S ∈
/ V1 ∪ V2
- P = P1 ∪ P2 ∪ {S → S1 , S → S2 }
für ein neues Symbol S. Dann ist offensichtlich L1 ∪ L2 = L(G), wobei G = (Σ, V, S, P ). Wenn
wir
n
o
P = P1 ∪ P2 ∪ S → S1 S2
setzen, erhalten wir L(G) = L1 ◦ L2 .
Schließlich erzeugt die Grammatik G1 ∗ = (Σ, V1 , S1 , P1 ∗ ) mit P1 ∗ = P1 ∪ {S1 → S1 S1 , S1 → }
den Kleene-Abschluß L1 ∗ .
(b) Wir setzen
L1 = an bn cm | n, m ≥ 0
n
o
und
L2 = am bn cn | n, m ≥ 0 .
n
o
Beide Sprachen sind kontextfrei, denn zum Beispiel besitzt L1 die Grammatik
S → Sc | T
T
→ aT b | .
Aber L1 ∩ L2 ist nicht kontextfrei, denn es ist
L1 ∩ L2 = an bn cn | n ≥ 0 .
n
o
(c) Angenommen, mit L ist auch stets die Komplementsprache L kontextfrei. Wegen
L1 ∩ L2 = L1 ∪ L2
wären die kontextfreien Sprachen dann aber unter der Durchschnittsbildung abgeschlossen.
137
4. Kontextfreie Sprachen
4.4. Kellerautomaten
Wir möchten wie im Fall regulärer Sprachen ein Maschinenmodell entwerfen, das genau die
Klasse kontextfreier Sprachen akzeptiert. Neben einer äquivalenten Charakterisierung kontextfreier Sprachen bieten Kellerautomaten die Möglichkeit, deterministisch kontextfreie Sprachen
einzuführen (nämlich diejenigen Sprachen, die von einem deterministischen Kellerautomaten
akzeptiert werden). Die Klasse der deterministisch kontextfreien Sprachen ist immer noch
ausdruckskräftig. Aber, und dies ist der große Vorteil, sehr schnelle Algorithmen lösen das
Compilerproblem.
Definition 4.5 Eine kontextfreie Grammatik G = (Σ, V, S, P ) ist in Greibach-Normalform,
wenn alle Produktionen von der Form
A → aα
(für A ∈ V , a ∈ Σ und α ∈ V ∗ )
sind.
Satz 4.7 Die Grammatik G = (Σ, V, S, P ) sei in Chomsky-Normalform. Dann gibt es eine
Grammatik G∗ = (Σ, V ∗ , S ∗ , P ∗ ) in Greibach-Normalform, so dass
- L(G) = L(G∗ )
- |P ∗ | = O |P |3 .
Beweis: Siehe I. Wegener, Theoretische Informatik, S. 172–181.
Wir entwerfen jetzt das Maschinenmodell eines Kellerautomaten, das Linksableitungen für
eine Grammatik in Greibach-Normalform simulieren kann. Beachte, dass eine Linksableitung
eines Wortes w ∈ Σ∗ die Form
∗
S → w1 A1 α1 → w1 w2 A2 α2 → w1 w2 w3 A3 α3 → w1 · · · wn
hat. Es liegt deshalb nahe, das Maschinenmodell mit einem sequentiell lesbaren Eingabeband
und einem Stack auszustatten: Anfänglich befindet sich nur das Startsymbol S auf dem Stack.
Dann wird S gelesen und durch den String A1 α1 ersetzt, während der Lesekopf nachprüft, ob
der Buchstabe w1 gelesen wurde. Ist dies der Fall, wird im nächsten Schritt
- das zuoberst gelesene Symbol A1 gelesen und durch den String A2 α2 ersetzt, und
- der Lesekopf überprüft, ob w2 auf dem Eingabeband gelesen wurde.
Diese Schritte werden wiederholt, bis
- alle Buchstaben gelesen wurden und
- der Stack geleert wurde.
Wir werden allerdings auch den Akzeptanzmodus „Akzeptiere durch Zustand“ betrachten.
Definition 4.6 Kellerautomaten
(a) Ein nichtdeterministischer Kellerautomat (PDA) A besitzt die folgenden Komponenten:
• die endliche Zustandsmenge Q,
• das Eingabealphabet Σ,
• das Stackalphabet Γ,
138
4.4. Kellerautomaten
• den Anfangszustand q0 und
• den anfänglichen Stackinhalt Z0 ∈ Γ sowie
• die Zustandsüberführungsfunktion
δ : Q × Σ ∪ {} × Γ → P (Q × Γ∗ ) .
Für den Akzeptanzmodus durch Zustände ist zusätzlich noch eine Teilmenge F ⊆ Q
von akzeptierenden Zuständen auszuzeichnen.
(b) Eine Konfiguration von A (für Eingabe w ∈ Σ∗ ) ist ein Tripel
(q, w0 , α)
mit q ∈ Q, w0 ∈ Σ∗ und α ∈ Γ∗ .
q ist der gegenwärtige Zustand, w0 ist der Suffix der noch nicht gelesenen Buchstaben)
von w, und α ist ein Stackinhalt. Wie arbeitet A? Wenn
0
(q, w10 · · · wm
, α1 · · · αs )
die gegenwärtige Konfiguration ist und wenn
(q 0 , Z1 · · · Zs ) ∈ δ(q, w10 , α1 ),
dann ist
0
(q 0 , w20 · · · wm
, Z1 · · · Zs α2 · · · αs )
eine mögliche Nachfolgekonfiguration. Wenn
(q 0 , Z1 · · · Zs ) ∈ δ(q, , α1 ),
dann ist
0
(q 0 , w10 · · · wm
, Z1 · · · Zs α2 · · · αs )
eine mögliche Nachfolgekonfiguration. Alle möglichen Nachfolgekonfigurationen werden
auf diese Art und Weise erhalten.
(c) Akzeptanz durch leeren Stack:
A akzeptiert die Eingabe w = w1 · · · wn genau dann, wenn es eine Konfigurationenfolge
(q0 , w1 · · · wn , Z0 ), . . . , (q, , )
gibt. Bis auf den letzten Schritt darf der Keller zu keinem anderen Zeitpunkt leer sein.
(d) Akzeptanz durch akzeptierende Zustände:
A akzeptiert die Eingabe w = w1 · · · wn genau dann, wenn es eine Konfigurationenfolge
(q0 , w1 · · · wn , Z0 ), . . . , (q, , α)
gibt mit α ∈ Γ∗ und q ∈ F . Bis auf den letzten Schritt darf auch diesmal der Keller nicht
leer werden.
Beispiel 4.7 L = {wwreverse | w ∈ {a, b}∗ }.
Wir entwerfen einen Kellerautomaten für L. Die Idee ist, dass sich der Kellerautomat in einer
ersten Phase die gelesenen Zeichen auf dem Stack merkt und irgendwann nichtdeterministisch
in eine zweiten Phase übergeht, in der die verbleibenden Zeichen der Eingabe mit dem Inhalt
des Stacks verglichen werden. Der Kellerautomat rät also die Mitte des Wortes.
139
4. Kontextfreie Sprachen
Wir wählen Q = {push, pop, fail}, Γ = {a, b, Z0 }, q0 = push und die Befehle
δ(push, a, x) = {(push, ax), (pop, ax)}
δ(push, b, x) = {(push, bx), (pop, bx)}
δ(pop, a, x) =
δ(pop, b, x) =
(
{(pop, )}
a=x
{(fail, x)} a =
6 x
(
{(pop, )}
b=x
{(fail, x)} b =
6 x
δ(fail, a, x) = {(fail, x)}
δ(fail, b, x) = {(fail, x)}
Satz 4.8 Sei G eine Grammatik in Greibach-Normalform. Dann gibt es einen Kellerautomaten
A mit L(G) = L(A), und A akzeptiert L mit leerem Stack.
Beweis: Sei G = (Σ, V, S, P ). Wir definieren einen Kellerautomaten mit den folgenden
Komponenten:
• Q = {q0 }: Q besteht also nur aus einem einziger Zustand,
• Γ=V,
• Z0 = S.
Das Programm wird so definiert, dass gilt:
∗
S → w1 · · · wn X1 · · · Xm
⇔
Der Automat A besitzt nach dem Lesen
von w1 · · · wn den Kellerinhalt X1 · · · Xm ,
wobei X1 zuoberst liegt.
Wir setzen deshalb
δ(q0 , a, y) = {(q0 , α) | y → aα ∈ P }.
In Worten: Wenn der Kellerautomat A das Symbol a ∈ Σ liest und y → aα eine Produktion
ist, dann darf
- die auf dem Stack zuoberst liegende Variable y durch α ersetzt werden und
- das nächste Symbol gelesen werden.
Dadurch werden keine -Bewegungen benötigt.
Sind Kellerautomaten mächtiger als kontextfreie Grammatiken?
Satz 4.9 Die Sprache L werde von einem Kellerautomaten A (mit leerem Stack) akzeptiert.
Dann gibt es eine kontextfreie Grammatik G mit
L(G) = L(A).
Beweis: (Tripelkonstruktion)
men, A hat die Konfiguration
Sei A = (Q, Σ, Γ, q0 , Z0 , δ) ein Kellerautomat. Angenom(p, u, X1 · · · Xm )
erreicht und hat bisher w = w1 · · · wk gelesen.
140
4.4. Kellerautomaten
Versuch 1: Dann liegt es nahe, die Grammatik G so zu entwerfen, dass die Ableitung
∗
S → w1 · · · wk p X1 · · · Xm
möglich ist. Leider ist aber die Grammatik als kontextfrei zu entwerfen; der Ersetzungsschritt
wird also nur vom Zustand p (und nicht auch vom Kellersymbol X1 ) abhängen dürfen.
Fazit: Wir müssen Zustand und Kellersymbol in einer Variablen zusammenfassen.
Versuch 2:
S → w1 · · · wk [p1 , X1 ][p2 , X2 ] · · · [pm , Xm ]
∗
Was ist p1 , der gegenwärtige Zustand? Was ist p2 ? Der geratene Zustand, wenn das Symbol
X2 , also das Symbol unterhalb von X1 , an die Spitze des Stacks gelangt. Aber wie verifizieren
wir, dass p2 der richtige Zustand ist?
Wir arbeiten mit Tripeln, um uns an den geratenen Zustand zu erinnern!
Versuch 3: Wir entwerfen die Grammatik so, dass
S → w1 · · · wk [p1 , X1 , p2 ][p2 , X2 , p3 ] · · · [pm , Xm , pm+1 ]
∗
ableitbar ist.
Die Absicht ist, dass pi der aktuelle Zustand ist, wenn Xi an die Spitze des Stacks gelangt und
dass pi+1 der aktuelle Zustand wird, falls das darunterliegende Symbol an die Spitze gelangt.
Diese Absicht realisieren wir durch die fogenden Produktionen:
(a) S → [q0 , Z0 , p] gehört zur Produktionenmenge für jedes p ∈ Q: Wir raten den Endzustand
p einer Berechnung.
(b) Für jeden Befehl (p0 , ) ∈ δ(p, a, X) fügen wir die Produktion
[p, X, p0 ] → a
hinzu.
(c) Für jeden Befehl
(p1 , α1 · · · αr ) ∈ δ(p, a, X)
mit a ∈ Σ ∪ {}
gehören die Produktionen
[p, X, qr+1 ] → a[p1 , α1 , p2 ][p2 , α2 , p3 ] · · · [pr , αr , pr+1 ]
zur Produktionenmenge, wobei alle Kombinationen (p2 , . . . , pr+1 ) durchlaufen werden.
In einer Linksableitung ist im nächsten Schritt die Variable [p1 , α1 , p2 ] zu ersetzen. Wird
α1 durch ein nicht-leeres Wort ersetzt, dann wird der (für die Offenlegung von α2 ) geratene
Zustand p2 weiterhin festgehalten. Wird hingegen α1 mit dem Befehl (q, ) ∈ δ(p1 , b, α1 )
durch das leere Wort ersetzt, dann wird der geratene Zustand p2 auf die Probe gestellt:
Es muss q = p2 gelten. An dieser Stelle setzt also die Verifikation ein!
Damit haben wir also nachgewiesen, dass die Klasse der kontextfreien Sprachen genau der
Menge der Sprachen, die von einem Kellerautomaten mit leerem Stack erkannt werden können,
entspricht. Im nächsten Satz machen wir die Aussage, dass die beiden Akzeptanzmodi „leerer
Stack“ bzw. „akzeptierender Zustand“ gleich mächtig sind.
Satz 4.10 (a) Sei A1 ein Kellerautomat, der mit Zuständen akzeptiert. Dann gibt es einen
äquivalenten Kellerautomaten A2 , der mit leerem Stack akzeptiert.
141
4. Kontextfreie Sprachen
(b) Sei A1 ein Kellerautomat, der mit leerem Stack akzeptiert. Dann gibt es einen äquivalenten
Kellerautomaten A2 , der mit Zuständen akzeptiert.
Beweis: (a) Hier ist die Idee: Wenn A1 irgendwann einen akzeptierenden Zustand erreicht,
dann sollte A2 die Option haben, den Stack zu leeren. Wenn aber A1 am Ende seiner Berechnung
„zufälliger Weise“ einen leeren Stack geschaffen hat, dann sollte A2 nicht notwendigerweise
akzeptieren.
Konstruktion von A2 :
- Am Anfang ersetze das Kellersymbol Z0 durch Z00 Z0 (kein „zufälliges“ Akzeptieren durch
leeren Stack).
- A2 übernimmt das Programm δ1 von A1 . Wenn ein Zustand in F erreicht wird, dann
darf A2 nichtdeterministisch seinen Stack leeren.
(b) Wir möchten, dass A2 bei leerem Stack (!) noch in einen akzeptierenden Zustand wechseln
kann.
Konstruktion von A2 :
- Zu Anfang ersetze Z0 über eine -Bewegung durch Z00 Z0 .
- Wenn das Kellersymbol Z00 erreicht wird, dann springe in einen akzeptierenden Zustand.
Damit haben wir also ein Maschinenmodell gefunden, welches genau den kontextfreien Sprachen
entspricht. Warum haben wir diese Betrachtungen überhaupt angestellt? Wir hatten mit dem
CY K − Algorithmus doch bereits ein Werkzeug, das das Wortproblem einer jeden kontextfreien Sprache in Polynomialzeit löst. Aber die kubische Laufzeit des CY K − Algorithmus
bekommt zwar aus theoretischer Sicht das Etikett „effizient“ angeheftet, ist aber für praktische Anwendungen nicht verwendungsfähig. Man überlege sich wie groß der Source-Code
eines Programmes werden kann und wie furchterregend dann die Laufzeit wird. Es ist auch
festzuhalten, dass der CY K − Algorithmus immer in kubischer Zeit läuft. Insbesondere wird
das Wortproblem für reguläre Sprachen ebenso nur in kubischer Zeit gelöst.
Wir werden im nächsten Abschnitt deterministische Kellerautomaten, also Kellerautomaten
ohne Wahlmöglichkeiten, untersuchen. Wir werden sehen, dass wir durch die Auflage des
Determinismus zu einer Einschränkung der Sprachklasse kommen. Wir werden aber auch
feststellen, dass die Ausdruckskraft immer noch respektabel ist und dass häufig eine sehr
schnelle Compilation möglich ist.
4.4.1. Deterministisch kontextfreie Sprachen
Wir führen nun den deterministischen Kellerautomaten ein.
Definition 4.7
(a) A heißt ein deterministischer Kellerautomat (DPDA), wenn
- für jedes Tripel (q, a, z) (mit q ∈ Q, a ∈ Σ und z ∈ Γ)
|δ(q, a, z)| + |δ(q, , z)| ≤ 1
gilt und
- A mit Zuständen akzeptiert.
142
4.4. Kellerautomaten
(b) Eine Sprache L heißt deterministisch kontextfrei, wenn L von einem deterministischen
Kellerautomaten erkannt wird.
Ein deterministischer Kellerautomat erlaubt also höchstens eine Nachfolgekonfiguration, darf
aber -Schritte durchführen. Beachte, dass die deterministisch kontextfreien Sprachen eine
Untermenge der kontextfreien Sprachen sind.
Beispiel 4.8 Wir entwerfen einen deterministischen Kellerautomaten für die Sprache aller
legalen Klammerausdrücke, also für die von den Produktionen
S → [S] | SS | erzeugte Sprache.
Es ist natürlich Σ = [, ] . Wir wählen Γ = [, Z0 , Q =
Programm δ hat die Form
n
o
δ ok, [, [ = ok, [[
n
o
n
o
n
o
ok, false
und q0 = ok. Das
/* Der Kellerautomat zählt die öffnenden Klammern */
δ ok, ], [ =
n
o
ok, /* Der Automat hat ein Paar zusammengehöriger Klammern gefunden */
δ ok, [, Z0 =
δ ok, ], Z0 =
n
n
ok, [Z0
o
false, Z0
o
Es wurde keine entsprechende offene Klammer gefunden und deshalb ist false der neue
Zustand. Im Zustand false wird keine Aktion ausgeführt, bis auf das Weiterlesen der Eingabe.
Wenn der Klammerausdruck legal ist, wird für jede öffnende Klammer auch eine schließende
Klammer gefunden: Unser Automat hält nur mit leerem Stack.
Wenn unser Automat mit leerem Stack hält, wurde für jede öffnende Klammer auch eine
schließende gefunden, und der Klammerausdruck ist legal. Unser Automat sollte also mit
leerem Stack akzeptieren.
Wir haben nun die Frage zu beantworten, inwiefern die Auflage des Determinismus zu einer
Einschränkung der Sprachklasse führt.
Bemerkung 4.3 Im letzten Abschnitt haben wir einen Kellerautomaten konstruiert, der
L = {wwreverse |w ∈ Σ∗ }
erkennt. Wir haben Nichtdeterminismus eingesetzt, um die Mitte des Wortes zu raten. Man
kann aber zeigen, dass ein deterministischer Kellerautomat hier überfordert ist.
Fragen:
1) Warum erlauben wir -Bewegungen in der Definition der deterministischen Kellerautomaten?
2) Warum haben wir Akzeptanz durch Zustand gefordert?
143
4. Kontextfreie Sprachen
Antwort zu 1): Die Sprache L = {an bm cr dn | n > 0, m > r, r > 0} kann von einem
deterministischen Kellerautomaten mit -Bewegung erkannt werden. Ohne -Bewegungen
erreicht man aber die gespeicherten a’s nicht.
An dieser Stelle kommen wir noch einmal auf die beiden uns bekannten Akzeptanzmodi
akzeptierender Zustand und leerer Stack zurück. Im letzten Abschnitt haben wir gesehen, dass
die beiden Modi die gleiche Sprachklasse akzeptieren. Für deterministische Kellerautomaten
kommen wir hier zu einem negativen Resultat und damit zu einer Antwort zu 2).
Definition 4.8 Wir definieren
LStack
= {L ⊆ Σ∗ |∃DPDA A, A akzeptiert L mit leerem Stack}
D
LFD
= {L ⊆ Σ∗ |∃DPDA A, A akzeptiert L mit akzeptierendem Zustand}.
Satz 4.11
⊂ LFD
LStack
D
Beweis: Im Beweis von Satz 4.10 haben wir aus einem Automaten A1 , der mit leerem Stack
akzeptierte, einen Automaten A2 gebaut, der per Zustand akzeptierte und L(A2 ) = L(A1 )
erfüllte. Man überzeuge sich, dass diese Konstruktion keinen Nichtdeterminismus hinzugefügt
hat. Damit haben wir
LStack
⊆ LFD
D
nachgewiesen. Wir betrachten nun die Sprache L = {0, 01}. Zunächst überzeuge man sich, dass
L durch einen deterministischen Kellerautomaten akzeptiert werden kann, der mit Zuständen
akzeptiert.
Dass diese Sprache nicht von einem deterministischen Kelleratomaten mit leerem Stack
akzeptiert werden kann, macht man sich mit einer einfachen Fallunterscheidung klar.
- Schreibt der Automat im Anfangszustand beim Eingabezeichen 0 ein Zeichen auf den
Stack, so wird das Eingabewort 0 nicht akzeptiert: Fehler.
- Schreibt der Automat im Anfangszustand beim Eingabezeichen 0 nichts auf den Stack,
so bricht die Berechnung nach dem Lesen des ersten Zeichens bereits erfolgreich ab. Auch
00 ∈
/ L wird akzeptiert: Fehler.
Damit haben wir die Echtheit der Inklusion gezeigt. Akzeptieren per Zustand ist für deterministische Kellerautomaten der mächtigere Akzeptanzmodus.
Bemerkung 4.4 Für deterministisch kontextfreie Sprachen liefert der akzeptierende deterministische Kellerautomat eine schnelle Lösung des Compilerproblems, wenn keine -Schritte
durchgeführt werden. In diesem Fall erhalten wir eine Lösung in linearer Zeit. Man mache sich
aber klar, dass das Fortlassen von -Schritten eine wesentliche Einschränkung ist.
Warum ist die Betrachtung von deterministischen kontextfreien Sprachen nun so wichtig?
Satz 4.12
(a) Jede deterministisch kontextfreie Sprache ist eindeutig.
(b) {wwreverse |w ∈ Σ∗ } ist eindeutig aber nicht deterministisch kontextfrei.
(c) Das Wortproblem für deterministisch kontextfreie Sprachen kann in Linearzeit gelöst
werden.
Beweis: Siehe zum Beispiel das Textbuch von Ingo Wegener.
144
4.4. Kellerautomaten
Aufgabe 93
Zeige Satz 4.12 (a).
Hinweis: Wende die Tripelkonstruktion an. Jede deterministisch kontextfreie Sprache wird durch einen DPDA
erkannt, dessen Endzustände keine ausgehenden ε-Übergänge haben.
Aufgabe 94
Zeige Satz 4.12 (b).
Wie zeigt man, dass eine Sprache L nicht deterministisch kontextfrei ist? Wenn bekannt ist, dass die Komplementsprache Σ∗ \ L nicht kontextfrei ist, dann kann L nicht deterministisch kontextfrei sein: Die Klasse
der deterministisch kontextfreien Sprachen ist ja unter Komplementbildung abgeschlossen. Hier ist ein zweites
Kriterium.
Wenn jede Nerode-Klasse von L nur endlich viele Vertreter besitzt, dann ist L nicht deterministisch
kontextfrei.
Sei A = (Q, Σ, Γ, q0 , Z0 , δ, F ) ein DPDA und es gelte |Σ| ≥ 2.
(a) Für ein Wort w ∈ Σ∗ sei s(w) ∈ Σ∗ ein Wort, sodass der Keller von A nach Verarbeitung2 von w · s(w)
eine minimale Höhe unter allen Worten in w · Σ∗ besitzt.
Zeige: Für alle Suffixe z hängt die Berechnung von A auf der Eingabe w · s(w) · z nur von dem Zustand
ab, der nach Lesen von w · s(w) erreicht wird, und von dem zu diesem Zeitpunkt zuoberst liegenden
Kellersymbol – nicht aber vom Inhalt des restlichen Kellers.
(b) Zeige, dass es eine unendliche Teilmenge U ⊆ Σ∗ mit den folgenden Eigenschaften gibt.
• Alle Worte u ∈ U haben die Form u = w · s(w) (mit w ∈ Σ∗ ).
• Es gibt einen Zustand q ∈ Q und ein Kellersymbol γ ∈ Γ, sodass A nach Verarbeitung eines jeden
Wortes u ∈ U den Zustand q annimmt und γ das zuoberst liegende Kellersymbol ist.
• Es gilt entweder U ⊆ L(A) oder U ⊆ Σ∗ \ L(A).
Hinweis: Hier sollten Sie |Σ| ≥ 2 ausnutzen.
(c) Zeige: Wenn jede Nerode-Klasse von L nur endlich viele Vertreter besitzt, dann ist L nicht deterministisch
kontextfrei.
(d) Zeige: L = {w ∈ {a, b}∗ : w = wR } ist keine deterministisch kontextfreie Sprache.
Hinweis: Alle Nerode-Klassen sind einelementig. Um das zu zeigen, nutzen Sie uauR , ubuR ∈ L für alle
Worte u ∈ {a, b}∗ aus.
Zunächst ist die Eindeutigkeit aus Sicht des Compilerbaus ein immenser Vorteil, da einem Wort
mit einer eindeutiger Ableitung leicht eine Semantik zugeordnet werden kann. Desweiteren
garantiert Teil (c) eine effiziente Lösung des Wortproblems.
Aufgabe 95
Für jede der folgenden Sprachen L ist die kleinste Sprachenklasse K anzugeben, zu der L gehört, bzw. zu
zeigen, dass L nicht kontextfrei ist. Zur Auswahl stehen die Klassen REG der regulären Sprachen, DCFL der
deterministisch kontextfreien Sprachen, ECFL der eindeutig kontextfreien Sprachen und CFL der kontextfreien
Sprachen.
Ein informelles, aber natürlich überzeugendes Argument, warum L ∈ K gilt, ist ausreichend.
(a) Sei Σ = {a, b} und L := { w : w = wR und w ∈ Σ∗ }.
(b) Sei Σ = {a, b, c, d} und L := { ai bj ci dj : i, j ∈ N }.
(c) Sei Σ = {a, b, c, d} und L := { ai bj cj di : i, j ∈ N } ∪ { ai bi cj dj : i, j ∈ N }.
(d) Sei L die Sprache aller wohlgeformten Klammerausdrücke für zwei Klammertypen, d.h. L sei die von der
Grammatik G = (Σ, {S}, S, P ) mit den Produktionen
S → (S) | [S] | SS | 2
erzeugte Sprache über dem Alphabet Σ = { (, [, ), ] }.
Wir sagen, dass A eine Eingabe verarbeitet hat, wenn A die Eingabe komplett gelesen hat und einen neuen
Buchstaben lesen möchte.
145
4. Kontextfreie Sprachen
(e) Sei Σ = {0, 1}3 . Für ein Wort u ∈ {0, 1}∗ sei Zahl(u) die natürliche Zahl mit Binärdarstellung uR : das
niedrigstwertigste Bit steht also ganz links. Wir setzen
L := (u0 , v0 , w0 ) · (u1 , v1 , w1 ) · · · (un , vn , wn ) · (0, 0, wn+1 ) : n ∈ N, Zahl(w) = Zahl(u)+Zahl(v) .
4.4.2. Abschlusseigenschaften deterministisch kontextfreier Sprachen
Unter welchen Operationen sind deterministisch kontextfreie Sprachen abgeschlossen? Im
Gegensatz zu kontextfreien Sprachen sind deterministisch kontextfreie Sprachen unter Komplementbildung abgeschlossen, aber nicht unter Vereinigung. Als unmittelbare Konsequenz
erhalten wir deshalb, dass deterministisch kontextfreie Sprachen eine echte Teilklasse der
kontextfreien Sprachen bilden.
Satz 4.13
(a) Wenn L deterministisch kontextfrei ist, dann auch L.
(b) Es gibt deterministisch kontextfreie Sprachen L1 und L2 , so dass der Schnitt L1 ∩ L2
nicht einmal kontextfrei ist.
(c) Die deterministisch kontextfreien Sprachen sind unter Vereinigung nicht abgeschlossen.
(d) Die deterministisch kontextfreien Sprachen bilden eine echte Untermenge der kontextfreien Sprachen.
Beweis: (a) Sei A ein deterministischer Kellerautomat mit A = (Q, Σ, q0 , Z0 , δ, F ). Wir
„bauen“ einen deterministischen Kellerautomaten A0 , der das Komplement von L akzeptiert.
Beachte, dass A eine Eingabe auch während eventueller -Bewegungen akzeptieren kann.
Deshalb verwirft A0 genau dann, wenn A irgendwann, und zwar nach dem Lesen des letzten
Buchstabens und vor dem Versuch den nächsten Buchstaben zu lesen, akzeptiert.
(b) Wir wissen, dass
{an bn cn | n ≥ 0} = L
nicht kontextfrei ist. Aber
L = {an bn cm | n, m ≥ 0} ∩ {am bn cn | n, m ≥ 0},
und beide Sprachen sind deterministisch kontextfrei.
(c) Nun zur Vereinigung. Wir betrachten die folgenden Sprachen K1 und K2 .
K1 = {ax by cz | x 6= y}
K2 = {ax by cz | y 6= z}
K1 und K2 sind deterministisch kontextfrei, da wir jeweils leicht einen deterministischen
Kellerautomaten angeben können. Wie sieht die Vereinigung der Sprachen K = K1 ∪ K2 aus?
K = K1 ∪ K2
= {ax by cz | x 6= y oder y 6= z}
Nehmen wir an, K sei deterministisch kontextfrei. Dann wäre wegen Teil (a) auch K deterministisch kontextfrei. Wie sieht diese Sprache aus:
K = {ax by cz | x = y = z}
146
4.4. Kellerautomaten
Diese Sprache ist aber nicht kontextfrei, womit K nicht deterministisch kontextfrei gewesen
sein kann.
(d) Die oben betrachtete Sprache
K = {ax by cz | x 6= y oder y 6= z}
ist nicht deterministisch kontextfrei. Da sie aber kontextfrei ist, belegt sie die Echtheit der
Inklusion.
Aufgabe 96
Die Grammatik G mit dem Terminalalphabet {anweisung, bedingung, if, then, else} und den Produktionen
S → if bedingung then S else S | if bedingung then S | anweisung
ist eine Spezifikation der if-Anweisung.
Konstruiere einen DPDA für die Sprache L(G).
Aufgabe 97
Ein Wort w = w1 · · · wn aus Teilwörtern wi ∈ {+1, −1}3 beschreibt ein zweidimensionales Array mit n Spalten
und drei Zeilen. Wenn wi = a1 a2 a3 , dann ist der Knotenwert in Spalte i und Zeile j genau aj Euro. Beachte,
dass aj positiv oder negativ sein kann.
Wir definieren die Sprache P über dem Terminalalphabet {+1, −1}. Das Wort w gehört genau dann zur
Sprache P , wenn es ein zweidimensionales Array beschreibt, das einen profitablen Weg W mit den folgenden
Eigenschaften enthält:
• W beginnt in Zeile 1 und Spalte 1.
• W läuft in einer Zeile stets von links nach rechts.
• In derselben Spalte kann W von Zeile j zu Zeile j + 1 springen, falls j ≤ 2. Wenn W die dritte Zeile
erreicht hat, kann er sie also nicht mehr verlassen.
• W endet in Spalte n.
Der Weg ist genau dann profitabel, wenn die Summe der durchlaufenen Knotenwerte positiv ist.
Beschreibe einen Kellerautomaten, der die Sprache P akzeptiert. Jeder Akzeptanzmodus, also Akzeptanz
durch leeren Keller oder Akzeptanz durch Zustände, ist erlaubt.
Aufgabe 98
Zeige, dass die folgenden Sprachenklassen abgeschlossen unter Durchschnitt mit regulären Sprachen sind:
• Die Klasse der kontextfreien Sprachen,
• die Klasse der deterministisch kontextfreien Sprachen,
• die Klasse der Sprachen, die durch Echtzeit-DPDAs erkannt werden.
Ein Echtzeit-DPDA ist ein deterministischer Kellerautomat ohne ε-Übergänge.
Aufgabe 99
Zeige die folgenden Aussagen:
(a) Die Sprache L1 = {0} ∪ {01ai bi ck | i, k ≥ 0} ∪ {1ai bk ck | i, k ≥ 0} ist deterministisch kontextfrei.
(b) Die Sprache L2 = {01ai bj ck | i, j, k ≥ 0, i = j oder j = k} ist nicht deterministisch kontextfrei.
Du darfst voraussetzen, dass die Sprache L3 = {ai bj ck | i, j, k ≥ 0, i = j oder j = k} nicht deterministisch
kontextfrei ist.
Zeige jetzt, dass die Klasse der deterministisch kontextfreien Sprachen nicht abgeschlossen ist unter den
Operationen
(c) Konkatenation,
(d) Kleene-Stern.
Hinweis: Finde je Teilaufgabe eine Transformation, die L1 in eine nicht deterministisch kontextfreie Sprache überführt. Jede Transformation darf korrekte Abschlusseigenschaften sowie die jeweils zu widerlegende
Abschlusseigenschaft ausnutzen.
147
4. Kontextfreie Sprachen
4.5. Entscheidungsprobleme
Nur wenige Entscheidungsprobleme für KFGs sind entscheidbar oder sogar effizient entscheidbar.
Das vielleicht wichtigste effizient entscheidbare Problem ist das Wortproblem, das vom Algorithmus von Cocke-Younger-Kasami gelöst wird. Beispiele von weiteren effizient entscheidbaren
Problemen sind
?
- das Leerheitsproblem (L(G) = ∅ und
- das Endlichkeitsproblem (ist L(G) endlich?).
Aufgabe 100
Gegeben sei eine kontextfreie Grammatik G = (Σ, V, S, P ) in Chomsky-Normalform. Beschreibe einen
möglichst effizienten Algorithmus, der entscheidet, ob L(G) endlich ist.
Bestimme die Laufzeit deines Algorithmus.
Aufgabe 101
Nur wenige Fragestellungen im Bereich der kontextfreien Grammatiken besitzen effiziente Lösungen. Hier
besprechen wir einige der wichtigsten dieser effizient lösbaren Fragestellungen.
G = (Σ, V, S, P ) sei eine kontextfreie Grammatik und es gelte V = {X0 , X1 , . . . , Xk } mit X0 = S.
(a) Eine Variable X ∈ V heißt eine -Variable, wenn X → gilt, d.h. wenn das leere Wort in möglicherweise
mehreren Schritten aus X ableitbar ist. Entwerfe einen möglichst effizienten Algorithmus, der alle
-Variablen von G ausgibt und bestimme seine Laufzeit in Abhängigkeit von
∗
|G| :=
X
X→α∈P
|α|.
(b) Eine Variable X ∈ V heißt nützlich, wenn X → w für ein Wort w ∈ Σ+ gilt, d.h. wenn das nicht-leere
Wort w aus X in möglicherweise mehreren Schritten ableitbar ist. Entwerfe einen möglichst effizienten
Algorithmus, der alle nützlichen Variablen von G ausgibt und bestimme seine Laufzeit in Abhängigkeit
von |G|.
∗
Viele wichtige Entscheidungsprobleme für kontextfreie Sprachen sind hingegen unentscheidbar.
Das Postsche Korrespondenzproblem ist die „Ursache allen Übels“.
4.5.1. Das Postsche Korrespondenzproblem
In der Untersuchung der Unentscheidbarkeit von Entscheidungsproblemen für kontextfreie
Sprachen und Kellerautomaten spielt das Postsche Korrespondenzproblem (PKP) ein wichtige
Rolle. Die Eingabe von PKP besteht aus einem endlichen Alphabet Σ, einer Zahl k ∈ N (k > 0)
und einer Folge (x1 , y1 ), (x2 , y2 ), . . . , (xk , yk ) von Wortpaaren mit x1 , y1 , . . . , xk , yk ∈ Σ+ . Es
ist zu entscheiden, ob es ein n ∈ N (n > 0) und Indizes i1 , . . . , in ∈ {1, . . . , k} gibt, so dass
xi1 xi2 · · · xin = yi1 yi2 · · · yin gilt. Mit anderen Worten, es ist zu entscheiden, ob es eine x-Folge
gibt, deren Konkatenation mit „ihrer“ Partnerfolge übereinstimmt.
Bei PKP handelt es sich somit um eine Art von Dominospiel, bei dem die Dominosteine nicht
wie üblich ein linkes und rechtes Feld, sondern diesmal ein oberes Feld (beschriftet mit xi ) und
ein unteres Feld (beschriftet mit yi ) besitzen. Wir müssen die Dominosteine so nebeneinander
legen, dass die obere mit der unteren Zeile übereinstimmt.
Beispiel 4.9 Das PKP mit Eingabe Σ = {0, 1}, k = 3 und
(x1 , y1 ) = (1, 111),
148
(x2 , y2 ) = (10111, 10),
(x3 , y3 ) = (10, 0).
4.5. Entscheidungsprobleme
hat eine Lösung mit n = 4 und i1 = 2, i2 = 1, i3 = 1, i4 = 3, denn wenn wir die „Dominosteine“
nebeneinander legen erhalten wir
x2 x1 x1 x3 = 10111 1
y2 y1 y1 y3 =
10
1
111 111
10
0
und die untere stimmt mit der oberen Zeile überein.
Bevor wir zeigen, dass PKP unentscheidbar ist, betrachten wir einige Problemvarianten. Die
Eingabe des modifizierten PKP (MPKP) ist identisch zur Eingabe von PKP. Diesmal ist
aber zu entscheiden, ob es eine mit x1 beginnende x-Folge gibt, die mit ihrer Partnerfolge
übereinstimmt.
Beispiel 4.10 Betrachtet als Eingabe für das MPKP hat das obige Beispiel keine Lösung.
Warum?
PKPΣ ist eine letzte PKP-Variante: Hier ist das Alphabet nicht mehr Teil der Eingabe, sondern
von vorne herein fixiert. Wir reduzieren die universelle Sprache
U = { hM iw | die Turingmaschine M akzeptiert Eingabe w }
auf das Postsche Korrespondenzproblem und seine Varianten. Da U unentscheidbar ist, folgt
die Unentscheidbarkeit von PKP, MPKP und PKP{0,1} .
Satz 4.14 Es gilt U ≤ MPKP ≤ PKP ≤ PKP{0,1} .
Beweisskizze: Wir zeigen zuerst die Reduktion PKP ≤ PKP{0,1} . Für ein endliches Alphabet
Σ = {a1 , . . . , am } geben wir zuerst eine Binärkodierung seiner Buchstaben an und zwar
kodieren wir aj durch h(aj ) = 0 1j für alle j ∈ {1, . . . , m}. Die Reduktion von PKP auf
PKP{0,1} weist einer Eingabe Σ, k, (x1 , y1 ), . . . , (xk , yk ) für’s PKP die folgende Eingabe
für’s PKP{0,1}
zu: k ist unverändert,
aber wir benutzen diesmal die binären Wortpaare
h(x1 ), h(y1 ) , . . . , h(xk ), h(yk ) .
Warum funktioniert die Reduktion? Für alle n ∈ N (n > 0) und alle i1 , . . . , in ∈ {1, . . . , k}
gilt:
xi1 xi2 · · · xin = yi1 yi2 · · · yin
⇐⇒
h(xi1 )h(xi2 ) · · · h(xin ) = h(yi1 )h(yi2 ) · · · h(yin ).
Da die Reduktion f berechenbar ist, ist f eine Reduktion von PKP auf PKP{0,1} .
Die Reduktion MPKP ≤ PKP stellen wir als Übungsaufgabe. Wir kommen also jetzt zum
zentralen Ziel, nämlich dem Nachweis der Reduktion U ≤ MPKP. Gesucht ist eine Transformation f , die jedem Wort u ∈ {0, 1}∗ eine Eingabe f (u) für’s MPKP zuordnet, so dass
u ∈ H, d.h. u = hM i w für eine
⇐⇒ das MPKP f (u) besitzt eine Lösung.
TM M , die Eingabe w akzeptiert
Betrachten wir zuerst den leichter Fall, dass u nicht von der Form hM i w. Dann wählen
wir eine Eingabe f (u) für’s MPKP, die keine Lösung besitzt, z.B., Σ = {0, 1}, k = 1, x1 = 0,
y1 = 1.
Kümmern wir uns um den schwierigen Fall, nämlich u = hM i w für eine Turingmaschine
M = (Σ, Q, Γ, δ, q0 , F ). Wir nehmen o.B.d.A. an, dass M nur dann in einen akzeptierenden
Zustand q ∈ F wechselt, wenn sie unmittelbar danach anhält. Schließlich fordern wir ebenfalls
149
4. Kontextfreie Sprachen
o.B.d.A, dass M nie den Kopf auf einer Zelle stehen lässt und nie seinen Eingabebereich nach
links hin verlässt.
Hier ist die Idee der Reduktion. Wir repräsentieren eine Konfigurationen von M durch Worte
˙ wie folgt:
über dem Alphabet Γ∪Q
uqv repräsentiert die Situation, bei der M im Zustand q ist, die Bandinschrift uv ist,
und der Kopf auf dem ersten Symbol von v steht. Die Startkonfiguration bei Eingabe w
wird also durch q0 w repräsentiert.
Wir geben jetzt eine Eingabe f (hM i w) für’s MPKP an, die aufeinander folgende Konfigurationen von M erzeugt, also die Berechnung von M nachmacht.
• Das Alphabet ist Γ ∪˙ Q ∪˙ {#}. Das Symbol # dient als Trennsymbol zwischen den
einzelnen Konfigurationen.
• Für ein geeignetes k ∈ N wählen wir Wortpaare (x1 , y1 ), (x2 , y2 ), . . . , (xk , yk ) wie folgt,
wobei
(x1 , y1 ) mit x1 := # und y1 := #q0 w#
das Startpaar ist. Das Wort y1 beschreibt also die Startkonfiguration, wenn M auf dem
leeren Wort rechnet. (Wenn w das leere Wort ist, dann wähle y1 = #q0 B#.) Als weitere
„Regeln“ verwenden wir
– für Rechtsbewegungen δ(q, a) = (q 0 , a0 , rechts) das Paar
(qa, a0 q 0 ),
solange q 6= qv ,
– für Linksbewegungen δ(q, a) = (q 0 , a0 , links) das Paar
(bqa, q 0 ba0 )
mit b ∈ Γ, solange q 6= qv ,
– die Kopierregeln mit den Paaren
(a, a)
für a ∈ Γ
– sowie die Abschlußregeln
(#, #), bzw. (#, B#)
für q ∈ F .
Tatsächlich müssen wir noch weitere Regeln aufnehmen, um die folgende Behauptung zu
zeigen.
Behauptung: M akzeptiert Eingabe w ⇐⇒ f (hM i) besitzt eine Lösung mit Startpaar
(x1 , y1 ).
Wie müssen die fehlenden Regeln aussehen? Betrachten wir die Richtung ⇒. Unser Ziel ist
die Konstruktion übereinstimmender x- und y-Zeilen. Das Startpaar (#, #q0 w#) erzwingt
dann ein Wort x2 das mit q0 beginnt und damit muss die Regel (q0 w1 , a0 q 0 ) für eine Rechtsbewegung δ(q0 , w1 ) = (q 0 , a0 , rechts) gewählt werden. Eine solche Regel steht aber nur dann
zur Verfügung, wenn M auf w1 eine Rechtsbewegung im Zustand q0 durchführt: Das muss M
aber tun, denn sonst verlässt es seinen Eingabebereich nach links hin. Also ist zwangsläufig
x2 = q0 w1 und y2 = a0 q 0 .
Die x-Zeile ist jetzt #q0 w1 und die y-Zeile ist #q0 w1 · · · wn #a0 q 0 w2 . Wir sind gezwungen ein
mit w2 beginnendes Wort x3 zu wählen und der Begrenzer # zwingt uns die Kopierregeln
150
4.5. Entscheidungsprobleme
anzuwenden, bis wir die x-Zeile #q0 w1 · · · wn und die y-Zeile #q0 w1 · · · wn #a0 q 0 w2 · · · wn
erreicht haben. Auch der nächste Schritt ist erzwungen, denn der Begrenzer muss hinzugefügt
werden. (Die Abschlussregel (#, B#) ist zu wählen, wenn w = w1 und M somit im nächsten
Schritt das Blanksymbol liest.)
Unsere Regeln gewährleisten also, dass x- und y-Zeile eine Berechnung von M auf Eingabe w
simulieren! Wir wissen nach Fallannahme, dass M die Eingabe w akzeptiert und deshalb, wenn
wir unsere Konstruktion genügend lange fortsetzen, entspricht die y-Zeile einer akzeptierenden
Konfiguration mit einem Zustand q ∈ F . Wir fügen jetzt die „Aufholregeln“
(aq, q), bzw. (qa, q)
für jeden akzeptierenden Zustand q und jeden Buchstaben a des Bandalphabets hinzu und
können damit die x-Zeile gegenüber der um die letzte Konfiguration längeren y-Zeile langsam
auffüllen: Wir benutzen Kopierregeln gefolgt von einer Anwendung der Aufholregel und
wiederholen diesen Prozess solange bis wir Gleichstand mit der Regel
(q##, #)
erreicht haben.
Da die Umkehrung ⇐ mit gleicher Argumentation folgt, ist die Beweisskizze erbracht.
Aufgabe 102
Wir sagen, dass das Postsche Korrespondenzproblem (PKP) zu einer Instanz „lösbar“ ist, wenn die Instanz zur
Sprache PKP gehört.
(a) Wir betrachten das PKP mit den „Dominosteinen“ (a, ac), (c, ba), (ba, a) und (acb, b). Entscheide, ob
das „Puzzle“ lösbar ist und begründe deine Antwort.
(b) Sei Σ = {1}. Zeige: Das PKP für Σ = {1} ist entscheidbar. (Aus den Resultaten der Vorlesung folgt,
dass das PKP für alle Alphabete Σ mit |Σ| ≥ 2 unentscheidbar ist.)
Hinweis: Wann ist eine PKP Instanz mit den Dominosteinen (1a , 1b ) und (1c , 1d ) lösbar? (Wir nehmen
natürlich a 6= b und c 6= d an.)
4.5.2. Unentscheidbare Probleme für kontextfreie Sprachen
Wir zeigen leider, dass viele wichtige Entscheidungsprobleme für kontextfreie Sprachen unentscheidbar sind. Wir reduzieren jedes Mal das Postsche Korrespondenzproblem auf das
betreffende Entscheidungsproblem.
Satz 4.15 Die folgenden Probleme für kontextfreie Grammatiken G, G1 , G2 und einen regulären Ausdruck R sind unentscheidbar:
(a) L(G1 ) ∩ L(G2 ) 6= ∅?
(b) Ist die Grammatik G eindeutig?
(c) L(G) = Σ∗ ?
(d) L(G1 ) = L(G2 )? und L(G1 ) ⊆ L(G2 )?
(e) L(R) = L(G)? und L(R) ⊆ L(G)?
Beweis: Gegeben sei ein Postsches Korrespondenzproblem (PKP) über dem Alphabet Σ =
{0, 1} mit den Wortpaaren (x1 , y1 ), . . . , (xk , yk ).
151
4. Kontextfreie Sprachen
(a) Um das PKP mit Hilfe der Frage „L(G1 ) ∩ L(G2 ) 6= ∅?“ zu lösen verwenden wir die
Sprachen
L(G1 ) = {xi1 · · · xin $yireverse
· · · yireverse
| n ∈ N i1 , . . . , in ∈ {1, . . . , k}},
n
1
L(G2 ) = {w$wreverse | w ∈ {0, 1}∗ }.
Offensichtlich ist das PKP genau dann lösbar, wenn L(G1 ) ∩ L(G2 ) 6= ∅ gilt. Beachte, dass
L(G1 ) kontextfrei ist: Benutze die Produktionen
S → xi S yireverse | xi $ yireverse für i = 1, . . . , k.
(b) Wir verwenden das Alphabet Σ = {0, 1, 1, 2, . . . , k} und wählen die kontextfreie Grammatik
G mit den Produktionen
S → A|B
A → x1 A1 | x2 A2 | · · · | xk Ak | ε
B → y1 B1 | y2 A2 | · · · | yk Ak | ε.
G ist genau dann eindeutig, wenn das PKP keine Lösung besitzt.
(c) Wir definieren die Sprache
L1 = {w$wreverse | w ∈ {0, 1}∗ },
wobei aber das Zeichen # an beliebiger Stelle in beliebiger Anzahl vorkommen kann, sowie
die Sprache
L2 = {xi1 # · · · #xin $ yireverse
# · · · #yireverse
| n ∈ N i1 , . . . , in ∈ {1, . . . , k}}.
n
1
L1 und L2 sind deterministisch kontextfrei. Also sind sowohl {0, 1, #, $}∗ \ L1 wie auch
{0, 1, #, $}∗ \ L2 kontextfrei. Dann ist aber auch
L = ({0, 1, #, $}∗ \ L1 ) ∪ ({0, 1, #, $}∗ \ L2 )
= {0, 1, #, $}∗ \ (L(G1 ) ∩ L(G2 ))
kontexfrei. Also ist das PKP genau dann unlösbar, wenn L = {0, 1, #, $}∗ .
(d) und (e) sind unmittelbare Konsequenz von (c).
Aufgabe 103
Die Sprache Universalität besteht aus allen kontextfreien Grammatiken G = (Σ, V, S, P ) für die
L(G) = Σ∗
gilt.
(a) Die Sprache Regularität besteht aus allen kontextfreien Grammatiken G = (Σ, V, S, P ) für die L(G) eine
reguläre Sprache ist. Zeige die Reduktion
Universalität ≤ Regularität.
Hinweis: Für eine beliebige kontextfreie Grammatik G ist – mit einem stets haltenden Programm – eine
kontextfreie Grammatik G∗ zu konstruieren, so dass gilt
L(G) = Σ∗ ⇐⇒ L(G∗ ) ist regulär.
(4.1)
Sei # ein Buchstabe, der nicht zu Σ gehört. Mache den Ansatz
L(G∗ ) =
152
L(G) · # · Σ∗
∪
Σ∗ · # · L
4.5. Entscheidungsprobleme
Natürlich muss L(G∗ ) eine kontextfreie Grammatik sein. Wie sollte man L wählen, so dass (4.1) gilt?
Begründe deine Konstruktion sorgfältig.
Kommentar: In der Vorlesung wurde gezeigt, dass das Universalitätsproblem, also die Sprache „Universalität“ nicht entscheidbar ist. Als Konsequenz der Reduktion folgt, dass die Sprache „Regularität“ und
damit, dass das Regularitätsproblem nicht entscheidbar ist.
(b) Die Sprache DK besteht aus allen kontextfreien Grammatiken G = (Σ, V, S, P ) für die L(G) eine
deterministisch kontextfreie Sprache ist.
Zeige die Reduktion
Universalität ≤ DK.
Kommentar: Das Problem zu entscheiden, ob eine gegebene kontextfreie Grammatik eine deterministisch
kontextfreie Sprache definiert, ist also unentscheidbar.
4.5.3. Das Äquivalenzproblem für Finite State Transducer
Wir geben eine weitere Konsequenz der Unentscheidbarkeit des Postschen Korrespondenzproblems für Finite State Transducer (FST) an: Ein FST A = (Q, Σ, Γ, I, F, δ) ist wie ein
nichtdeterministischer endlicher Automat mit Ausgabe aufgebaut. Insbesondere ist
• Q die Zustandsmenge, I ⊆ Q die Menge der Anfangszustände und F die Menge der
akzeptierenden Zustände,
• Σ ist das Eingabealphabet und Γ das Ausgabealphabet.
• Die Überführungsrelation δ hat die Form
δ ⊆ Q × Σ ∪ {} × Γ ∪ {} × Q.
Wenn sich die Maschine A im Zustand q befindet und den Buchstaben a ∈ Σ liest, dann
darf A genau dann in den Zustand q 0 wechseln und den Buchstaben a0 drucken, wenn
(q, a, a0 , q 0 ) ∈ δ.
Wir sagen, dass A unter Eingabe x ∈ Σ∗ die Ausgabe y ∈ Γ∗ produzieren kann, wenn es einen
Anfangszustand i ∈ I gibt, so dass eine in Zustand i beginnende Berechnung für Eingabe x
die Ausgabe y produziert.
Die Äquivalenz von NFA’s ist eine durchaus schwierige Aufgabe, die aber entscheidbar ist: Überführe die nfa’s in dfa’s mit Hilfe der Potenzmengenkonstruktion und überprüfe die Äquivalenz
der dfa’s. Die Äquivalenz von FST’s hingegen ist überraschender Weise (?!) unentscheidbar.
Korollar 4.16 Die Frage, ob zwei gegebene Finite State Transducer dieselbe Sprache erkennen,
ist nicht entscheidbar.
Beweis: Wir reduzieren PKP{0,1} auf das Äquivalenzproblem für Finite State Transducer.
Seien k und die Paare (x1 , y1 ), . . . , (xk , yk ) eine Eingabe für PKP{0,1} . Für das Eingabealphabet
Σ = {1, . . . , k} und das Ausgabealphabet Γ = {0, 1} bauen wir zuerst einen recht trivialen
FST A1 , der für jede Eingabe ξ ∈ Σ∗ jede Ausgabe η ∈ Γ∗ produzieren kann. Der FST A2 ist
ebenfalls sehr einfach: Für eine Eingabe i1 · · · in ∈ Σ∗ produziert A2 jede mögliche Ausgabe
w ∈ Γ∗ , falls w 6= xi1 · · · xin oder w 6= yi1 · · · yin .
Angenommen, es gibt eine Lösung für PKP{0,1} und die Eingabe (x1 , y1 ), . . . , (xk , yk ). Dann
gibt es i1 , . . . , in mit x1 · · · xk = y1 · · · yk . Dann wird aber A2 nicht die Ausgabe xi1 · · · xin produzieren und damit unterscheidet sich A1 von A2 . Ist PKP{0,1} für Eingabe (x1 , y1 ), . . . , (xk , yk )
hingegen nicht lösbar, dann sind A1 und A2 äquivalent.
153
4. Kontextfreie Sprachen
Aufgabe 104
Sei Σ ein Alphabet, das den „Stopper“ # nicht enthält. Ein 2K-DFA A = (Σ, Q, δ, q0 , qF ) ist ein DFA mit
zwei Köpfen, wobei die Köpfe unabhängig voneinander in jede Richtung marschieren können. A beginnt seine
Rechnung für eine Eingabe w ∈ Σ∗ mit beiden Köpfen auf dem linken Stopper in
#w#
Danach rechnet A gemäß dem Programm
δ : Q × (Σ ∪ {#})2 → Q × {links, rechts, bleib}2 .
Abhängig vom gegenwärtigen Zustand und den beiden gelesenen Symbolen wird ein neuer Zustand angenommen
und festgelegt, welche Nachbarzellen zu lesen sind. A akzeptiert w (und hält) genau dann, wenn A den Zustand
qF ∈ Q annimmt. Eine Berechnung, die den abgesteckten Eingabebereich verlässt, ist ebenso verwerfend wie
eine Berechnung, die in eine Schleife geraten ist..
(a) Konstruiere einen 2K-DFA, der die Sprache
L = { an · bn · cn : n ∈ N }
akzeptiert.
Kommentar: Obwohl der 2K-DFA keinen Speicher besitzt, können sogar nicht-kontextfreie Sprachen
akzeptiert werden. Die beiden Leseköpfe haben in diesem Fall eine größere Berechnungskraftals ein
Lesekopf mit „angeschlossenem“ Keller.
(b) Im Wortproblem für 2K-DFAs ist für einen 2K-DFA A und eine Eingabe w zu entscheiden, ob A die
Eingabe w akzeptiert.
Zeige: Das Wortproblem für 2K-DFAs ist entscheidbar.
(c) Wie schwierig ist es festzustellen, ob ein 2K-DFA A = (Σ, Q, δ, q0 , qF ) irgendeine Eingabe akzeptiert?
Diese Frage ist für konventionelle DFAs sehr einfach, da nur festzustellen ist, ob ein akzeptierender
Zustand vom Startzustand aus erreichbar ist. Für 2K-DFAs ist die Situation eine völlig andere. Um
genaueres zu verstehen, definieren wir die Sprache
Nicht-Leer2K-DFA := { hAi : A ist ein 2K-DFA mit L(A) 6= ∅ }.
Zeige
U ≤ Nicht-Leer2K-DFA ,
(4.2)
für die universelle Sprache U = {(hM i, w) : die Turingmaschine M akzeptiert die Eingabe w}. Für den
Nachweis von (4.2) muss ein 2K-DFA AhM i,w berechnet werden, so dass gilt
M akzeptiert Eingabe w ⇐⇒ L(AhM i,w ) 6= ∅.
(4.3)
i) Gehe zuerst wie im Beweis der Unentscheidbarkeit von MPKP vor: Eine Konfiguration ist von
der Form γ1 qγ2 , wobei γ1 γ2 der gegenwärtige Inhalt des Bandes von M ist, q der gegenwärtige
Zustand von M ist und der Kopf von M das erste Symbol von γ2 liest. Wir sagen, dass k0 die
Nachfolgekonfiguration der Konfiguration k ist, wenn M nach einem Schritt die Konfiguration k0
erreicht, wenn M in k startet.
Sei M = (Σ, Γ, Q, δ, q0 , F ). Entwerfe einen 2K-DFA A∗hM i,w , der die Sprache
L := { k$k0 : k0 ist die Nachfolgekonfiguration von k }
akzeptiert, wobei $ 6∈ Q ∪ Γ gelte.
ii) Konstruiere einen 2K-DFA AhM i,w für den Beweis der Äquivalenz (4.3).
Hinweis: Es darf angenommen werden, dass M hält, sobald es einen akzeptierenden Zustand q ∈ F
annimmt. Die akzeptierende Berechnung von M auf Eingabe w kann durch
k0 $k1 · · · kt $kt+1 · · · $km
repräsentiert werden, wobei k0 := q0 w, km = γ1 · q · γ2 für Worte γ1 , γ2 ∈ Γ∗ und einen Zustand
q ∈ F , und für jedes t (0 ≤ t < m) kt+1 die Nachfolgekonfiguration von kt ist.
154
4.6. Zusammenfassung
Aufgabe 105
Zeige: Die Frage, ob zwei gegebene Kellerautomaten dieselbe Sprache akzeptieren, ist nicht entscheidbar.
Aufgabe 106
(a) Im Problem k-UNIVERSALITY ist eine kontextfreie Grammatik G = (Σ, V, S, P ) mit |Σ| = k gegeben und es ist zu entscheiden, ob L(G) = Σ∗ gilt. Aus dem Beweis von Satz 4.15 (c) folgt, dass
4-UNIVERSALITY unentscheidbar ist.
Zeige, dass auch 2-UNIVERSALITY unentscheidbar ist.
(b) Eine kontextfreie Grammatik G = (Σ, V, S, P ) heiße minimal, falls jede kontextfreie Grammatik für
die Sprache L(G) mindestens |P | Produktionen besitzt. Im Minimierungsproblem für kontextfreie
Grammatiken ist eine kontextfreie Grammatik G gegeben und es ist eine minimale kontextfreie Grammatik
für die Sprache L(G) zu bestimmen.
Zeige, dass es keinen Algorithmus gibt, der das Minimierungsproblem für jede kontextfreie Grammatik
löst.
Hinweis: Überlege, wie ein Minimierungsalgorithmus eingesetzt werden kann, um 2-UNIVERSALITY zu
entscheiden. Beachte, dass 1-UNIVERSALITY entscheidbar ist.
4.6. Zusammenfassung
Wir haben gesehen, dass kontextfreien Sprachen eine wesentlich größere Sprachklasse abdecken
als die regulären Sprachen. Allerdings haben das Pumping-Lemma bzw. das mächtigere Lemma
von Ogden auch die Grenzen der Ausdrucksstärke kontextfreier Sprachen gezeigt. Das Konzept
des Ableitungsbaums hat sich in diesen Untersuchungen als besonders hilfreich erwiesen.
Wir haben die Chomsky-Normalform kontextfreier Sprachen eingeführt und gezeigt, dass wir
mit Hilfe der dynamischen Programmierung der (CYK-Algorithmus) das Wortproblem in Zeit
O(|Produktionen| · |w|3 )
lösen können. Für praktische Anwendungen ist das Konzept der kontextfreien Sprachen dennoch
etwas zu weit gefaßt. Kubische Laufzeit ist ab einer gewissen Sourcecodelänge nicht mehr
akzeptabel.
Als Konsequenz haben wir die kontextfreien Sprachen noch weiter eingeschränkt und kamen zu
den deterministisch kontextfreien Sprachen, die wir mit Hilfe deterministischer Kelleratomaten
eingeführt haben. Nebenbei haben wir beobachtet, dass nichtdeterministische Kellerautomaten genau die kontextfreien Sprachen akzeptieren. Die wichtigen Eigenschaften der Klasse
deterministisch kontextfreier Sprachen sind einerseits ihre Eindeutigkeit und andererseits die
Lösung des jeweiligen Wortproblems in Linearzeit.
Mit Hilfe des Postschen Korrespondenzproblems (PKP) kann die Unentscheidbarkeit vieler
Entscheidungsprobleme für kontextfreien Sprachen und Kellerautomaten gezeigt werden. Wir
haben die Unentscheidbarkeit des Äquivalenzproblems für kontextfreie Grammatiken und
Finite State Transducer mit Hilfe der Unentscheidbarkeit von PKP nachgewiesen.
155
Teil III.
Speicherplatz und Parallelität
157
5. Speicherplatz-Komplexität
Das Ziel dieses Kapitels ist die Bestimmung der Speicherplatz-Komplexität, also die Bestimmung des für die Lösung eines algorithmischen Problems notwendigen und hinreichenden
Speicherplatzes.
Warum sollte uns eine Untersuchung der Ressource „Speicherplatz“ interessieren? Es stellt sich
heraus, dass die Speicherplatzkomplexität hilft, die Komplexität der Berechnung von Gewinnstrategien für viele nicht-triviale 2-Personen Spiele zu charakterisiere. Weitere algorithmische
Probleme, deren Komplexität wir mit Hilfe der Speicherplatzkomplexität klären werden, sind:
(a) Akzeptiert ein nichtdeterministischer endlicher Automat eine gegebene Eingabe?
(b) Sind zwei nichtdeterministische endliche Automaten äquivalent?
(c) Minimiere einen NFA.
Des weiteren lassen sich „nicht-klassischen“ Berechnungsarten wie die Randomisierung oder
Quantenberechnungen durch konventionelle deterministische Rechner simulieren, falls wir
polynomiellen Speicherplatz erlauben. Im nächsten Kapitel werden wir zudem eine enge
Verbindung zwischen der Speicherplatz-Komplexität eines Problems und seiner parallelen
Rechenzeit feststellen.
In Abschnitt 2.3.3 haben wir deterministische und nichtdeterministische I-O (input-output)
Turingmaschinen als Rechnermodell eingeführt und die fundamentalen Klassen
DL, NLund PSPACE
definiert.
5.1. Eine Platzhierarchie
Definition 5.1 Eine Funktion s : N → N mit s(n) = Ω(log2 n) heißt genau dann platzkonstruierbar, wenn es eine deterministische Turingmaschine gibt, die für eine jede Eingabe
der Länge n höchstens O(s(n)) Speicherplatz benötigt, um s(n) Zellen zu markieren.
Wir geben mit Hilfe der Diagonalisierungsmethode eine Speicherplatz-Hierarchie an und zeigen,
dass man mit mehr zur Verfügung stehendem Speicher mehr Entscheidungsprobleme lösen
kann.
Satz 5.1 (Das Speicherplatz-Hierarchie Theorem)
Die Funktion s sei platz-konstruierbar. Dann ist Dspace(o(s)) eine echte Teilmenge von
Dspace(s).
Beweis: Für eine platz-konstruierbare Funktion s konstruieren wir die folgende I-O Turingmaschine M ∗ .
159
5. Speicherplatz-Komplexität
Algorithmus 5.1 Die Diagonalisierungsmethode
(1) M ∗ bestimmt die Länge n der Eingabe w.
(2) M ∗ steckt auf dem Arbeitsband 2s(n) Zellen ab.
/* Dies ist mit Speicherplatz O(s(n)) möglich, da s platz-konstruierbar ist.
*/
(3) Wenn w nicht von der Form hM i0k für eine I-O Turingmaschine M und eine Zahl
k ∈ N ist, dann verwirft M ∗ .
/* hM i bezeichnet die Gödelnummer der Turingmaschine M .
(4)
*/
simuliert M auf Eingabe w =
und beginnt die Simulation mit dem Kopf in
∗
der Mitte des abgesteckten Bereichs. M verwirft, wenn M irgendwann den abgesteckten
Bereich verlässt oder mehr als 2s(n) Schritte benötigt.
M∗
hM i0k
/* Kann M ∗ auf Speicherplatz s(n) gleichzeitig einen bis 2s(n) − 1 zählenden Zähler
implementieren und eine s(n) platzbeschränkte Berechnung von M simulieren? Ja, das
ist bei einem entsprechend vergrößerten Arbeitsalphabet unproblematisch.
*/
(5) M ∗ akzeptiert w, wenn M verwirft. Ansonsten akzeptiert M und M ∗ wird verwerfen.
Wir beachten zuerst, dass M ∗ immer hält und mit Speicherplatzbedarf O(s(n)) auskommt.
Also ist L(M ∗ ) ∈ Dspace(s).
Warum liegt L(M ∗ ) nicht in Dspace(r) für eine Funktion r = o(s)? Ist dies der Fall, dann wird
L(M ∗ ) von einer I-O Turingmaschine M mit Speicherplatzbedarf r erkannt. Für hinreichend
große Eingabelänge n rechnet M stets in Zeit höchstens 2s und M ∗ simuliert M für Eingaben
w = hM ∗ i0k mit hinreichend großem k erfolgreich. Jetzt garantiert Schritt (5), dass sich L(M )
und L(M ∗ ) unterscheiden: Speicherplatz r = o(s) ist unzureichend für die Berechnung von
L(M ∗ ).
Aufgabe 107
Zeige das Platz-Hierarchie Theorem für nichtdeterministische Turingmaschinen: Nspace(s) ist eine echte
Teilmenge von Nspace(S), falls s = o(S) und falls S platz-konstruierbar ist.
5.2. Sub-Logarithmischer Speicherplatz
Was ist die Speicherplatzkomplexität regulärer Sprachen? Eine reguläre Sprache L wird durch
einen endlichen DFA A akzeptiert. Wir fassen A als eine I-O Turingmaschine auf, die wie A
programmiert wird und erhalten, dass jede reguläre Sprache in der Klasse Dspace(0) liegt.
Und was passiert, wenn wir wie bisher Bewegungen von links-nach-rechts, aber auch jetzt
von rechts-nach-links erlauben? Diese Frage haben wir in Satz 5.2 beantwortet: Auch diesmal
werden nur reguläre Sprachen akzeptiert. Also stimmt die Klasse Dspace(0) mit der Klasse
regulärer Sprachen überein.
Überraschenderweise führt sehr(!) geringer Speicherplatz im Vergleich zu leerem Speicher nicht
zu größerer Berechnungskraft wie das nächste Ergebnis zeigt.
Satz 5.2 (Sprachen mit sehr geringem Speicherplatzbedarf sind regulär)
Die I-O Turingmaschine M akzeptiere L mit Speicherplatzbedarf sM = o(log2 log2 n). Dann
ist L regulär. Insbesondere folgt für jede Funktion s : N → N mit s = o(log2 log2 n), dass
Dspace(s) = Dspace(0) = die Klasse der regulären Sprachen.
160
5.3. Logarithmischer Speicherplatz
Beispiel 5.1 Dspace(log2 log2 n) enthält auch nicht-reguläre Sprachen. Es sei bin(i) die Binärdarstellung der Zahl i ohne führende Nullen. Wir wählen Σ = {0, 1, $} als Eingabealphabet
und definieren die Sprache
BIN = {bin(1)$bin(2)$ · · · $bin(n) | n ∈ N}.
Man überzeugt sich leicht mit dem Pumping Lemma, dass BIN nicht regulär ist. Es bleibt
zu zeigen, dass BIN ∈ Dspace(log2 log2 n). Das ist aber klar(?), da bin(i) für jedes i ≤ n aus
höchstens dlog2 ne Bits besteht.
Insbesondere haben wir für die Sprache BIN das seltene Glück, die genaue Speicherkomplexität angeben zu können. Denn da BIN nicht regulär ist, folgt BIN 6∈ Dspace(s), falls
s = o(log2 n log2 n). Andererseits haben wir gerade BIN ∈ Dspace(log2 log2 n) nachgewiesen.
Die sublogarithmischen Speicher-Komplexitätsklassen sind aber recht mickrig und erst DL, also
logarithmische Speicherplatz-Komplexität besitzt eine vernünftige Berechnungskraft.
5.3. Logarithmischer Speicherplatz
DL und NL gehören zu den wichtigsten Speicherplatz-Klassen.
- Die Berechnungskraft ist durchaus signifikant, da die Maschinen sich jetzt Positionen in
der Eingabe merken können.
- Viele Eigenschaften, die für DL und NL gelten, verallgemeinern sich auf beliebige Speicherplatzklassen. Dieses Phänomen werden wir im Satz von Savitch und im Satz von
Immerman-Szlepscenyi beobachten.
Wir beginnen mit deterministisch logarithmischem Platz.
5.3.1. DL
Sei PALINDROM die Sprache aller Palindrome über dem Alphabet {0, 1}. Wir behaupten,
dass sich PALINDROM mit logarithmischem Speicherplatz berechnen lässt.
Wir konstruieren eine I-O Turingmaschine, die zuerst die Eingabelänge n in Binärdarstellung
abspeichert. Dies gelingt, indem ein Anfangs auf 0 gesetzter binärer Längen-Zähler sukzessive
inkrementiert wird bis der Eingabekopf das Ende der Eingabe erreicht hat. Sodann werden
nacheinander die Bitpositionen 1 und n, 2 und n − 1, . . . , k und n − k ... verglichen, indem der
Eingabekopf jeweils um n − 1 Positionen nach rechts, dann um n − 2 Positionen nach links,
um n − 3 Positionen nach rechts, ... bewegt wird.
Zur Ausführung dieser Kopfbewegungen wird eine Kopie des Längen-Zählers angelegt und der
Längen-Zähler wie auch die Kopie um Eins (auf n − 1) vermindert. Die ersten Kopfbewegungen
um n − 1 Positionen nach rechts gelingen durch das Herunterzählen der Kopie. Nachdem
das Ziel erreicht ist, wird der Längenzähler um Eins reduziert und der neue Inhalt in die
Kopie geladen. Die nächsten n − 2 Kopfbewegungen nach links, wie auch alle nachfolgenden
Kopfbewegungen, werden dann mit demselben Verfahren gesteuert.
Die Klasse DL ist die erste nicht-triviale Speicherkomplexitätsklasse und enthält neben der
Palindrom-Sprache weitere wichtige Sprachen wie die Dyck-Sprache aller wohlgeformten
Klammerausdrücke oder die kontextsensitive Sprache {an bn cn | n ∈ N}.
161
5. Speicherplatz-Komplexität
Aufgabe 108
Zeige, dass die folgenden Probleme mit logarithmischem Speicher gelöst werden können. Eine informelle
Beschreibung der Vorgehensweise ist ausreichend, solange die Idee der Konstruktion überzeugend beschrieben
wird. Begründe aber sorgfältig, warum dein Algorithmus nur logarithmischen Speicherplatz benötigt.
(a) Sei Σ = {0, 1}. Für ein Wort u ∈ {0, 1}∗ sei Zahl(u) die natürliche Zahl mit Binärdarstellung u: das
niedrigstwertige Bit steht also ganz rechts.
i) Zeige, dass die Addition von zwei Binärzahlen auf logarithmischem Platz ausgeführt werden kann:
Für Eingabe x#y (mit x, y ∈ {0, 1}∗ ) ist die Binärdarstellung z der Summe Zahl(x) + Zahl(y) auf
dem Ausgabeband auszugeben. Für n = |x| + |y| dürfen nur O(log2 n) Zellen des Arbeitsbands
benutzt werden.
ii) Zeige, dass die Multiplikation von zwei Binärzahlen auf logarithmischem Platz ausgeführt werden
kann: Für Eingabe x#y (mit x, y ∈ {0, 1}∗ ) ist die Binärdarstellung z des Produkts Zahl(x) · Zahl(y)
auf dem Ausgabeband auszugeben. Für n = |x| + |y| dürfen nur O(log2 n) Zellen des Arbeitsbands
benutzt werden.
(b) Sei L die Sprache aller wohlgeformten Klammerausdrücke mit den Klammertypen (, ) und [, ]. D. h. L wird
erzeugt von der Grammatik G = (Σ, {S}, S, P ) mit dem Alphabet Σ = { (, ), [, ] } und den Produktionen
Zeige, dass L zur Klasse DL gehört.
S → (S) | [S] | SS | .
Hinweis: Der Fall von zwei Klammertypen ist komplizierter als der eines Klammertyps. Das Beispiel
( [ ) ] zeigt, dass sich die beiden Klammertypen gegenseitig stören können.
Wir können mit Hilfe des Konzepts der Konfiguration die Speicherplatzkomplexität der
Palindrom-Sprache exakt bestimmen. (Zur Erinnerung: Die Konfiguration kt zum Zeitpunkt
t besteht aus der Position des Lesekopfs zum Zeitpunkt t, dem gegenwärtigen Zustand, der
Position des Kopfs auf dem Arbeitsband und dem Inhalt des Arbeitsbands.) Es stellt sich
heraus, dass logarithmische Speicherkomplexität nicht nur hinreichend, sondern auch notwendig ist. Dies bestätigt die Intuition, dass nicht-triviale Algorithmen zumindest die Fähigkeit
haben sollten, sich an eine Eingabeposition erinnern zu können; beachte, dass diese Fähigkeit
logarithmischen Speicherplatz voraussetzt.
Lemma 5.3 Es ist PALINDROM ∈ DL. Andererseits ist PALINDROM 6∈ Dspace(s), falls
s = o(log2 n).
Beweis: Sei M eine I-O Turingmaschine mit Speicherplatzbedarf s(n), die die PalindromSprache erkenne. M besitze q Zustände und ein Arbeitsalphabet der Größe γ. Die Eingabelänge
sei gerade.
Behauptung 1: M wird die Eingabe-Position
n
Ω( s(n)
) mal besuchen.
n
2
für mindestens eine Eingabe mindestens
Bevor wir die Behauptung beweisen, zeigen wir, dass das Lemma aus der Behauptung folgt.
Wir nehmen an, dass M den Speicherplatzbedarf s(n) = o(log2 n) hat. Für jede Eingabe wird
M dann, bei hinreichend großer Eingabelänge n, höchstens
√
q · s(n) · γ s(n) = o( n)
Konfigurationen besitzen, für die der Lesekopf die Eingabeposition n2 besucht. Aber Position
n
2 kann nur einmal in einer vorgegebenen Konfiguration besucht werden, da ein zweiter Besuch
in derselben Konfiguration zu einer Endlos-Schleife führt. Die Behauptung fordert aber eine
√
n
Besuchshäufigkeit von mindestens Ω( s(n)
) >> n und wir haben einen Widerspruch zur
Annahme s(n) = o(log2 n) erhalten.
162
5.3. Logarithmischer Speicherplatz
Beweis von Behauptung 1: Wir weisen einer Eingabe w die Folge der Konfigurationen beim
Besuch der Eingabe-Position n2 zu. Wenn die Behauptung falsch ist, dann wird n2 höchstens
n
o( s(n)
) mal besucht. Insgesamt gibt es aber mit (5.1) höchstens
n
)
o( s(n)
(q · γ s(n) · s(n))
n
O(s(n))·o( s(n)
)
=2
= 2o(n)
Konfigurationenfolgen, wenn wir die Position des Lesekopfes fixieren. Es gibt aber 2n/2 Palindrome der Länge n und deshalb gibt es zwei verschiedene Palindrome u, v der Länge n mit
identischer Konfigurationenfolge auf Position n2 .
Behauptung 2: Fooling Argument
Die Eingaben u, v mögen beide die Konfigurationenfolge k besitzen. Wenn u = (u1 , u2 )
und v = (v1 , v2 ) mit |u1 | = |v1 | = n/2, dann besitzt auch die Eingabe w = (u1 , v2 ) die
Konfigurationenfolge k.
Aufgabe 109
Zeige Behauptung 2.
Behauptung 1 ist jetzt eine unmittelbare Konsequenz von Behauptung 2, da M für Palindrome
u und v auch die Eingabe w akzeptiert, obwohl w kein Palindrom ist.
Aufgabe 110
Die Palindrom-Sprache soll erkannt werden. Gib I-O-Maschinen an, die P ALIN DROM
(a) in Zeit O(n) erkennen.
(b) in Zeit O(n2 / log n) mit Platz O(log n) erkennen.
Aufgabe 111
Zeige, dass O(s) platzbeschränkten I-O-Turingmaschinen Zeit Ω(n2 /s) für das Erkennen der Palindrom-Sprache
benötigen.
Hinweis: Betrachte Worte der Form w#n wR der Länge 3n (mit w ∈ {0, 1}n ) und die Konfigurationenfolgen auf
den Eingabepositionen i ∈ {n + 1, . . . , 2n}. Zeige, dass sich für alle Eingaben w#n wR und v#n v R (mit w =
6 v)
auf Position i verschiedene Konfigurationsfolgen ergeben müssen. Daher muss es auf Position i mindestens 2n
verschiedene Konfigurationsfolgen geben und die meisten davon müssen lang sein. Schließe davon auf hohe
Rechenzeit für die meisten Eingaben.
Wie mächtig ist DL?
Satz 5.4 (Speicherplatz und Laufzeit)
(a) Sei M eine I-O Turingmaschine, die mit Speicherplatzbedarf s arbeite. Dann ist die
Laufzeit von M für Eingaben der Länge n durch n · 2O(s(n)) beschränkt.
(b) Es gelte s(n) ≥ log2 n. Dann ist Dspace(s) ⊆
DL ⊆ P.
S
k·s
k∈N Dtime(2 ).
Als Konsequenz folgt
Beweis (a): Sei M eine I-O Turingmaschine mit Speicherplatzbedarf s und sei w eine beliebige
Eingabe der Länge n. Wir beschreiben die Berechnung von M auf Eingabe w durch eine
Folge von Konfigurationen. Die Konfiguration kt zum Zeitpunkt t besteht aus der Position
des Lesekopfs zum Zeitpunkt t, dem gegenwärtigen Zustand, der Position des Kopfs auf dem
Arbeitsband und dem Inhalt des Arbeitsbands.
Wir kommen zur wesentlichen Beobachtung: M wird für keine Eingabe eine Konfiguration
zweimal annehmen! Wäre dies nämlich der Fall, dann wird M in eine Endlos-Schleife gezwungen
und hält nicht. Also ist die Laufzeit von M durch die Anzahl der Konfigurationen beschränkt.
163
5. Speicherplatz-Komplexität
Wir nehmen an, dass M q Zustände und ein Arbeitsalphabet der Größe γ besitzt. Damit ist
die Anzahl der Konfigurationen durch
n · q · s(n) · γ s(n) = n · q · s(n) · 2s(n)·log2 γ
nach oben beschränkt und, da s(n) ≤ 2s(n) , erhalten wir
n · q · s(n) · 2s(n)·log2 γ = n · 2O(s(n)) .
(5.1)
Die Laufzeit ist natürlich durch die Anzahl der Konfigurationen beschränkt und die Behauptung
folgt.
(b) ist eine direkte Konsequenz von Teil (a), denn wir nehmen s(n) ≥ log2 n an und n·2O(s(n)) ≤
2O(s(n)) folgt.
Wir definieren die Sprache U-REACHABILITY als die Menge aller ungerichteten Graphen
G, die einen Weg von Knoten 1 nach Knoten 2 besitzen. Der Graph G werde durch seine
Adjazenzmatrix repräsentiert. Analog sei die Sprache D-REACHABILITY definiert, wobei wir
diesmal allerdings gerichtete Graphen betrachten.
Erst in 2004 konnte durch Omer Reingold gezeigt werden, dass U-REACHABILITY in DL
liegt. Die Methode des Random Walks erlaubt eine mehr oder minder offensichtliche Lösung
von U-REACHABILITY mit logarithmischem Speicherplatzbedarf, wenn wir zufällig arbeiten
dürfen. Die von Reingold erhaltene Lösung für deterministische Turingmaschinen ist wesentlich
komplizierter.
Offensichtlich ist D-REACHABILITY das schwierigere der beiden Probleme: Wir werden
später starke Indizien erhalten, dass jede deterministische Turingmaschine mindestens die
Speicherkomplexität Ω(log22 n) für die Lösung von D-REACHABILITY benötigt.
Wir erhalten aber eine Lösung von D-REACHABILITY mit logarithmischem Speicherplatzbedarf, wenn wir nichtdeterministische Turingmaschinen betrachten: Eine nichtdeterministische
I-O Turingmaschine rät einen Weg von Knoten 1 nach Knoten 2 und benutzt ihren logarithmischen Speicher zum Durchsuchen der Adjazenzmatrix. Dieser Algorithmus ist Anlaß,
nichtdeterministische I-O Turingmaschinen zu betrachten.
Aufgabe 112
Gegeben sei ein gerichteter Graph als Adjazenzmatrix. Es soll entschieden werden, ob folgendes gilt: jeder
Knoten hat höchstens einen Nachfolger und Knoten 2 kann von Knoten 1 erreicht werden.
Gib einen möglichst speichereffizienten deterministischen Algorithmus zur Lösung des Problems (auf I-O-Turingmaschinen) an.
Aufgabe 113
Im 2-Zusammenhangsproblem ist ein ungerichteter Graph als Adjazenzmatrix gegeben. Es soll entschieden
werden, ob der Graph zweifach zusammenhängend ist, d.h., ob der Graph bei der Herausnahme eines beliebigen
Knotens immer zusammenhängend bleibt.
Gib einen möglichst speichereffizienten deterministischen Algorithmus zur Lösung des Problems (auf I-O-Turingmaschinen) an.
5.3.2. NL und NL-Vollständigkeit
Ist D-REACHABILITY deterministisch mit logarithmischem Speicherplatz erkennbar? Wir
werden im Folgenden zeigen, dass eine positive Antwort die Gleichheit der Klassen DL und
NL erzwingt, und die wahrscheinliche Antwort ist also negativ. Insbesondere zeigen wir,
dass D-REACHABILITY eine schwierigste Sprache in NL ist, wobei „Schwierigkeit“ durch
LOGSPACE-Reduktionen gemessen wird.
164
5.3. Logarithmischer Speicherplatz
Definition 5.2 Seien Σ1 und Σ2 Alphabete und seien L ⊆ Σ∗1 , K ⊆ Σ∗2 Sprachen über Σ1
beziehungsweise Σ2 .
(a) Wir sagen, dass L LOGSPACE-reduzierbar auf K ist (geschrieben L ≤LOG K), falls es
eine (deterministische) I-O Turingmaschine M mit logarithmischem Speicherplatzbedarf gibt,
so dass für alle Eingaben w ∈ Σ∗1 ,
w ∈ L ⇔ M (w) ∈ K.
(b) Die Sprache K heißt NL-hart, falls L ≤LOG K für alle Sprachen L ∈ NL gilt.
(c) Die Sprache K heißt genau dann NL-vollständig, wenn K ∈ NL und wenn K NL-hart ist.
Lemma 5.5 (Die wesentlichen Eigenschaften der LOGSPACE-Reduktion)
(a) Wenn M ≤LOG K und K ≤LOG L, dann ist M ≤LOG L.
(b) Wenn L ≤LOG K und wenn K ∈ DL, dann ist auch L ∈ DL.
Aufgabe 114
Zeige Lemma 5.5.
Wie auch für die Klassen P und NP (und die polynomielle Reduktion) fallen die Klassen DL
und NL zusammen, wenn eine einzige NL-vollständige Sprache in DL liegt.
Korollar 5.6 (LOGSPACE-vollständige und harte Sprachen)
(a) Die Sprache K sei NL-vollständig. Dann gilt
K ∈ DL ⇔ DL = NL.
(b) Wenn K NL-hart ist und wenn K ≤LOG L, dann ist auch L NL-hart.
Aufgabe 115
Zeige Korollar 5.6.
Gibt es überhaupt NL-vollständige Probleme?
Satz 5.7 D-REACHABILITY ist NL-vollständig.
Beweis: Wir haben bereits gesehen, dass D-REACHABILITY in NL liegt. Es ist also L ≤LOG
D-REACHABILITY für eine beliebige Sprache L ∈ NL nachzuweisen.
Da L ∈ NL, gibt es eine nichtdeterministische Turingmaschine M , die L mit logarithmischem
Speicherbedarf erkennt. Für eine Eingabe w betrachten wir den Berechnungsgraph GM (w)
von M auf Eingabe w. Die Konfigurationen bilden die Knoten von GM (w). Wir fügen eine
Kante von Konfiguration c nach Konfiguration d ein, wenn M auf Eingabe w in einem
Schritt von c nach d gelangen kann. Zusätzlich fügen wir eine Kante von jeder akzeptierenden
Haltekonfiguration zu einem neuen Knoten ein, dem wir den „Namen“ 2 geben. Der der
Anfangskonfiguration entsprechende Knoten erhält den Namen 1.
Behauptung: GM (w) kann von einer deterministischen I-O Turingmaschine mit logarithmischem Speicherplatz berechnet werden.
165
5. Speicherplatz-Komplexität
Beweis: Wir beachten zuerst, dass GM (w) nur polynomiell (in |w|) viele Knoten besitzt,
da die Konfigurationenzahl polynomiell ist. Wir müssen also auf logarithmischem Platz die
polynomiell große Adjazenzmatrix von GM (w) berechnen. Diese Aufgabe ist aber einfach, da
wir ja nur die Möglichkeit eines Ein-Schritt Übergangs zwischen zwei Konfigurationen (zu
jeweils logarithmischem Speicherplatz) überprüfen müssen.
Wir weisen GM (w) der Eingabe w zu und erhalten
w ∈ L ⇔ GM (w) ∈ D-REACHABILITY.
Die Behauptung des Satzes folgt.
Das nächste Ergebnis zeigt, dass NL in P enthalten ist. Dieses Ergebnis ist nicht mehr überraschend, sondern wegen der NL-Vollständigkeit des Problems D-REACHABILITY naheliegend.
Satz 5.8 DL ⊆ NL ⊆ P ⊆ NP.
Beweis: Die Beziehungen DL ⊆ NL sowie P ⊆ NP sind offensichtlich und es genügt der Nachweis
von NL ⊆ P.
Man überzeuge sich zuerst, dass aus L ≤LOG K und K ∈ P auch L ∈ P folgt. (Wende
Satz 5.4 (a) an!) Für eine beliebige Sprache L in NL gilt L ≤LOG D-REACHABILITY. Da
D-REACHABILITY in P liegt, folgt somit auch L ∈ P.
Es könnte durchaus sein, dass beide Inklusionen in DL ⊆ NL ⊆ P echte Inklusionen sind.
Beispiel 5.2 Die Klasse LOGCFL besteht aus allen Entscheidungsproblemen, die LOGSPACEreduzierbar auf eine kontextfreie Sprache sind.
Man kann zum Beispiel zeigen, dass NL eine Teilklasse von LOGCFL ist: Es gibt also eine
kontextfreie Sprache, auf die D-REACHABILITY reduziert werden kann.
Aufgabe 116
Man kann zeigen, dass für jede kontextfreie Sprache L Speicherplatz O(log22 n) ausreichend ist, um zu überprüfen
ob w ∈ L für eine Eingabe w der Länge n gilt.
(a) Die entsprechende Frage für lineare Sprachen ist anscheinend einfacher. Sei L eine kontextfreie Sprache,
die von einer linearen Grammatik G = (Σ, V, S, P ) erzeugt werde, d.h. es gilt X → αY β für alle
Produktionen in P , wobei α, β Worte über Σ und X, Y Variablen sind.
Zeige, dass L ∈ NL liegt.
(b) Sei Σ = {1, #}. Für eine Kante e = (i, j) ∈ N × N ist das Wort we := 1i #1j # die Beschreibung der
Kante e. Schließlich heißt ein Wort w ∈ Σ∗ legal, wenn es einen Weg v1 → v2 → · · · → vk mit v1 := 1
und vk = 2 gibt, so dass w ∈ Σ∗ · w(v1 ,v2 ) · Σ∗ · w(v2 ,v3 ) · Σ∗ · · · Σ∗ · wvk−1 ,vk · Σ∗ .
Wir definieren die Sprache
i) Zeige, dass L kontextfrei ist.
L = { w ∈ Σ∗ : w ist legal }
ii) Zeige, dass L NL-vollständig ist.
Kommentar: Es gibt also kontextfreie Sprachen, deren Wortproblem NL-vollständig ist. Das Wortproblem für reguläre Sprachen ist viel einfacher und ohne Speicher lösbar. Es ist nicht bekannt, ob
das Wortproblem für jede kontextfreie Sprache in NL liegt.
Desweiteren stimmt LOGCFL mit der Klasse aller Entscheidungsprobleme überein, die durch
Schaltkreise logarithmischer Tiefe gelöst werden können. Während verlangt wird, dass der
Fanin eines UND-Gatters zwei ist, ist der Fanin von ODER-Gattern unbeschränkt. Zudem
muss man die Schaltkreise durch „einfache Algorithmen“ beschreiben können –man sagt, dass
die Schaltkreise uniform sind.
166
5.3. Logarithmischer Speicherplatz
5.3.3. Der Satz von Savitch
Um wieviel mächtiger ist NL im Vergleich zu DL?
Aufgabe 117
Zeige: Wenn Dspace(log n) = Nspace(log n), dann gilt Dspace(s) = Nspace(s) für alle platz-konstruierbaren
Funktionen s.
Aufgabe 118
Es seien s, S Funktionen mit s = O(S) und s = Ω(n). Weiterhin gelte für alle g mit g = Ω(s) und g = O(S),
dass g nicht platz-konstruierbar ist. Zeige: Dann gilt Dspace(s) = Dspace(S).
Hinweis: Zeige, dass die Funktion spaceM (n) für Turingmaschinen M mit mindestens linearem Platzverbrauch
platz-konstruierbar ist.
Satz 5.9 (Der Satz von Savitch)
(a) D-REACHABILITY ∈ Dspace(log22 n).
(b) Die Funktion s sei platz-konstruierbar. Dann ist
Nspace(s) ⊆ Dspace(s2 )
und insbesondere folgt
NL ⊆ Dspace(log22 n) und PSPACE = NPSPACE.
Beweis (a): Leider können wir D-REACHABILITY weder mit Tiefensuche noch mit Breitensuche lösen, denn sowohl der Stack der Tiefensuche wie auch die Queue der Breitensuche verlangen
bis zu linearem Speicherplatz. Wir beschreiben deshalb ein neues Traversierungsverfahren, das
wesentlich speicher-effizienter sein wird.
Algorithmus 5.2 (Eine platz-effiziente Traversierung)
(1) Der Graph G sei als Adjazenzmatrix gegeben. G bestehe aus n Knoten.
(2) Für jedes m ≤ n − 1 rufe Algorithmus 5.3 mit dem Eingabegraphen G sowie den
Parametern 1, 2 und m auf.
/* Algorithmus 5.3 wird überprüfen, ob es in G einen Weg der Länge m (m ≤ n − 1)
vom Knoten 1 zum Knoten 2 gibt.
*/
(3) Akzeptiere genau dann, wenn Algorithmus 5.3 mindestens einmal akzeptiert.
Algorithmus 5.3
(1) Die Eingaben seien der Graph G sowie die Knoten u und v und die Weglänge m.
(2) Wenn m=1, dann akzeptiere, falls (u, v) eine Kante von G ist und verwerfe ansonsten.
(3) Für alle Knoten w führe zwei rekursive Aufrufe mit den jeweiligen Parametern u, w und
m
dm
2 e beziehungsweise w, v und b 2 c durch.
(4) Akzeptiere, wenn es einen Knoten w mit zwei akzeptierenden Aufrufen gibt und verwerfe
ansonsten.
167
5. Speicherplatz-Komplexität
Algorithmus 5.2 akzeptiert offensichtlich genau dann, wenn es einen Weg vom Knoten 1 zum
Knoten 2 gibt. Die entscheidende Frage ist die Größe des Speicherplatzbedarfs. Der rekursive
Algorithmus 5.3 benötigt einen Stack der Höhe log2 n, wobei jedes Element des Stacks einem
Knoten entspricht und damit ebenfalls logarithmischen Speicher in Anspruch nimmt. Insgesamt
benötigen wir, wie versprochen, also Speicherplatz O(log22 n).
Am Rande sei vermerkt, dass Algorithmus 5.3 zwar speicher-effizienter als Tiefen- oder
2
Breitensuche ist, dafür aber bis zu 2O(log2 n) Schritte verschlingt.
(b) Es sei s(n) ≥ log2 n und s sei platz-konstruierbar. Weiterhin sei M eine beliebige nichtdeterministische Turingmaschine mit Speicherplatzbedarf s und w sei eine Eingabe. Wir konstruieren
eine deterministische Turingmaschine M ∗ , die M auf Speicherplatz O(s2 ) simuliert.
Da s platz-konstruierbar ist, kann M ∗ einen Speicherplatz von s(n) Zellen abstecken und
damit die Konfigurationen von M systematisch erzeugen. Wir gehen davon aus, dass die Startkonfiguration den Namen 1 trägt und dass es genau eine akzeptierende Haltekonfiguration gibt,
der wir den Namen 2 zuweisen. M ∗ wendet nun Algorithmus 5.2 auf den Berechnungsgraphen
GM (w) (mit höchstens 2O(s(|w|)) Knoten) an und akzeptiert genau dann, wenn Algorithmus
5.2 akzeptiert.
Offensichtlich akzeptiert M ∗ die Eingabe w genau dann, wenn M die Eingabe w akzeptiert.
Die Behauptung folgt, da M ∗ nur den Speicherplatzbedarf O(s2 ) hat: Der Name eines jeden
Knotens hat höchstens O(s) Bits, und die Rekursionstiefe ist ebenfalls durch O(s) beschränkt.
Der Beweis des Satzes von Savitch betont die überragende Rolle von D-REACHABILITY für die
Speicherplatzkomplexität. Aussagen über die nichtdeterministische Speicherplatzkomplexität
werden zuerst für NL (und damit für D-REACHABILITY) nachgewiesen. Sodann ist zu
gewährleisten, dass sich die Aussagen nach „oben“ vererben, also auch für größeren Speicherplatz
gelten.
Aufgabe 119
Jede Sprache L in N P kann wie folgt beschrieben werden: Es gibt eine Sprache K ∈ P und eine Konstante c,
so dass für alle Eingaben x
x ∈ L ⇐⇒ ∃y ∈ {0, 1}∗ (|y| ≤ |x|c ∧ (x, y) ∈ K).
Definiere Σp1 = N P , Πp1 = co − N P sowie für alle k ∈ N, k > 1
Σpk = {L ⊆ {0, 1}∗
|
∃K ∈ Πpk−1 , c ∈ N ∀x ∈ {0, 1}∗ (x ∈ L ⇐⇒
∃y ∈ {0, 1}∗ (|y| ≤ |x|c ∧ (x, y) ∈ K))}.
Weiterhin ist Πpk = coΣpk und P H = ∪k∈N Σpk . P H heißt die polynomielle Hierarchie.
Zeige: (a) NP = coNP ⇐⇒ P H = N P .
(b) P H ⊆ PSPACE.
5.3.4. Der Satz von Immerman und Szlepscenyi
Wir zeigen als nächstes, dass überraschenderweise jede Sprache und ihr Komplement die
gleichen nichtdeterministischen Speicherplatz-Ressourcen benötigen, oder in anderen Worten,
dass nichtdeterministischer Speicherplatz abgeschlossen ist unter Komplementbildung. Der
wesentliche Schritt wird der Nachweis sein, dass das Komplement von D-REACHABILITY,
also
D-UNREACHABILITY = {G | es gibt keinen Weg von Knoten 1 nach Knoten 2 }
ebenfalls in NL liegt.
168
5.3. Logarithmischer Speicherplatz
Satz 5.10 (Der Satz von Immerman und Szlepscenyi)
(a) D-UNREACHABILITY ∈ NL.
(b) Die Funktion s sei platz-konstruierbar. Dann ist
Nspace(s) = coNspace(s),
wobei coNspace(s) = {L | L ∈ Nspace(s)} genau aus den Komplementen von Sprachen
aus Nspace(s) besteht.
Beweis (a): Der Graph G sei die Eingabe für D-UNREACHABILITY. Angenommen, wir
könnten das Anzahlproblem in NL lösen, also die Anzahl m der von Knoten 1 aus erreichbaren
Knoten bestimmen. Wir zeigen zuerst, dass dann auch D-UNREACHABILITY zu NL gehört.
Im zweiten Schritt lösen wir dann das Anzahlproblem mit nichtdeterministisch logarithmischem
Platz.
Wir nehmen also an, dass wir die Zahl m der von 1 aus erreichbaren Knoten kennen. Unsere
nichtdeterministische Maschine versucht jetzt nacheinander m verschiedene Knoten v1 , . . . , vm
zu finden, die von 1 aus erreichbar sind. Wenn der Knoten 2 von all diesen Knoten verschieden
ist, dann kann M folgern, dass 2 nicht von 1 aus erreichbar ist und M wird akzeptieren.
Im Detail sieht das Vorgehen von M wie folgt aus. Die erste Phase von M ist trivial: M „setzt“
v1 = 1, da 1 von 1 aus erreichbar ist. In der i + 1ten Phase rät M einen Knoten vi+1 und rät
sukzessive eine Knotenfolge beginnend mit Knoten 1. M verwirft, wenn vi+1 ≤ vi oder wenn
vi+1 = 2 oder wenn die geratene Knotenfolge keinem im Knoten vi+1 endenden Weg entspricht.
Ansonsten akzeptiert M , falls i + 1 = m, beziehungsweise beginnt Phase i + 1, falls i + 1 < m.
Wir haben also D-UNREACHABILITY gelöst, wenn das Anzahlproblem gelöst ist. Wie können
wir aber das Anzahlproblem in NL lösen? Sei mi die Anzahl der Knoten, die durch Wege der
Länge höchstens i von Knoten 1 aus erreichbar sind. Offensichtlich ist m0 = 1 und mn−1 = m.
Wir müssen nur für jedes i zeigen, dass mi+1 in NL berechnet werden kann, wenn mi bekannt
ist.
Wir können also annehmen, dass mi bekannt ist. Wir setzen zu Anfang mi+1 = 1 und
wiederholen dann im wesentlichen das Vorgehen von M für alle Knoten (in aufsteigender
Reihenfolge). Wenn Knoten k behandelt wird, raten wir sukzessive Knoten vi,1 < · · · < vi,mi
und verifizieren, dass jeder geratene Knoten vom Knoten 1 durch einen Weg der Länge
höchstens i erreichbar ist.
Wenn wir für den gegenwärtigen Knoten k gerade den Knoten vi,r verifiziert haben, dann
prüfen wir zusätzlich nach, ob vi,r ein Vorgänger von k ist. Ist dies der Fall, dann erhöhen
wir mi+1 um 1 und brechen die Behandlung von Knoten k ab, um mit der Behandlung von
Knoten k + 1 zu beginnen. Ist dies nicht der Fall, dann setzen wir die Ratephase für Knoten
mit Abstand höchstens i vom Knoten 1 fort. In diesem Fall beginnt die Behandlung von
Knoten k + 1 erst, wenn alle mi Knoten überprüft wurden.
Also ist auch das Anzahlproblem in NL lösbar und die Behauptung ist gezeigt.
(b) Die Sprache L werde von einer nichtdeterministischen Turingmaschine M mit Speicherplatzbedarf s erkannt. Wir wissen, dass s platz-konstruierbar ist und damit gilt insbesondere
auch s ≥ log2 n. Unser Ziel ist die Konstruktion einer nichtdeterministischen Turingmaschine
M ∗ , die das Komplement L mit Speicherplatzbedarf O(s) erkennt. M ∗ muss also nachprüfen,
ob M für eine Eingabe w eine akzeptierende Berechnung besitzt (sprich: einen Weg von
der Startkonfiguration 1 zur akzeptierenden Haltekonfiguration 2 besitzt) und genau dann
akzeptieren, wenn es eine akzeptierende Berechnung nicht gibt.
169
5. Speicherplatz-Komplexität
M ∗ wendet den Algorithmus aus Teil (a) auf den Berechnungsgraphen GM (w) an, wobei M ∗
die Existenz von Kanten selbst klären muss. Offensichtlich gelingt diese Klärung in Platz O(s),
da die Konfigurationen von M nur Platz O(s) benötigen.
Aufgabe 120
Zeige: Wenn L vollständig für NL ist, dann ist auch das Komplement L vollständig für NL.
Die Sprache 2-SAT besteht aus allen erfüllbaren aussagenlogischen Formeln in konjunktiver
Normalform mit jeweils höchstens zwei Literalen pro Klausel.
Korollar 5.11 2-SAT ist NL-vollständig.
Beweis: Wir zeigen zuerst die nicht-offensichtliche Aussage, dass 2-SAT in NL liegt. Sei also φ
eine Formel in konjunktiver Normalform mit jeweils zwei Literalen pro Klausel. Wir weisen φ
den gerichteten Graphen G(φ) zu, wobei die Knoten von G(φ) den Literalen von φ entsprechen.
Wir setzen eine Kante vom Literal α zum Literal β ein, falls ¬α ∨ β eine Klausel ist. Eine
Kante (α, β) entspricht also einer Implikation α → β. Für jede Kante (α, β) fügen wir auch
die „symmetrische“ Kante (¬β, ¬α) in G(φ) ein; beachte, dass α → β und ¬β → ¬α logisch
äquivalent sind.
Behauptung: φ ist genau dann nicht erfüllbar, wenn es ein Literal x gibt, so dass es einen
Weg von x nach ¬x wie auch einen Weg von ¬x nach x gibt.
Beweis ⇐: Die Existenz eines Weges von α nach β erzwingt für jede erfüllende Belegung,
die α auf 1 setzt, auch dass β auf 1 gesetzt wird. Also müssen x und ¬x auf denselben Wert
gesetzt werden, was aber nicht erlaubt ist.
⇒: Wir wissen also, dass φ nicht erfüllbar ist. Wir nehmen an, dass die Behauptung falsch ist
und konstruieren dann eine erfüllende Belegung. Wir beginnen mit irgendeinem ungesetzten
Literal x, für das wir annehmen können, dass es keinen Weg von x nach ¬x gibt. Wir weisen
x und allen von x in G(φ) erreichbaren Literalen den Wert 1 zu und weisen ¬x und allen
Literalen, die ¬x erreichen, den Wert 0 zu.
Unser Vorgehen ist wohl-definiert, da es kein Literal y geben kann, so dass sowohl y wie auch
¬y von x aus erreichbar sind. Der Graph G(φ) garantiert ja mit seinen symmetrischen Kanten
auch symmetrische Wege: Zu jedem Weg von x nach y gibt es auch einen Weg von ¬y nach ¬x
und simultane Wege von x nach y wie auch von x nach ¬y implizieren einen (ausgeschlossenen)
Weg von x nach ¬x über ¬y.
Weiterhin kann es kein von x aus erreichbares Literal geben, das vorher auf 0 gesetzt wurde.
Ein solcher Fall ist ausgeschlossen, da dann x schon gesetzt worden wäre.
Offensichtlich können wir unser Vorgehen solange wiederholen bis alle Literale gesetzt sind.
Wir haben aber alle Klauseln erfüllt und die Formel φ ist im Widerspruch zur Annahme erfüllt.
Aus der Behauptung erhalten wir sofort, dass die Nicht-Erfüllbarkeit in NL liegt, da wir ja nur
die Existenz von Wegen zwischen sich widersprechenden Literalen zu raten brauchen. Damit
folgt aber aus dem Satz von Immerman und Szlepscenyi, dass Erfüllbarkeit, also 2-SAT, in NL
liegt.
Es bleibt zu zeigen, dass 2-SAT NL-vollständig ist. Wir konstruieren zuerst die Reduktion
D-UNREACHABILITY ≤LOG 2-SAT. Sei also G ein Eingabegraph. Wir weisen dem Graphen
G eine Formel φG wie folgt zu. Wir fassen die Knoten von G als Variablen auf und fügen für
jede Kante (u, v) die Klausel ¬u ∨ v ein. Desweiteren verwenden wir die Einer-Klauseln 10
sowie ¬20 .
170
5.4. PSPACE-Vollständigkeit
Behauptung: φG ist genau dann erfüllbar, wenn es keinen Weg von 1’ nach 2’ gibt.
Beweis: Wenn es keinen Weg von 1’ nach 2’ gibt, dann ist φG erfüllt, wenn wir 1’ und allen
von 1’ erreichbaren Knoten den Wert 1 und den restlichen Knoten den Wert 0 zuweisen. Gibt
es hingegen einen Weg von 1’ nach 2’, dann müssen alle Knoten des Weges (und damit auch
2’) auf 1 gesetzt werden: φG ist nicht erfüllbar.
Die Transformation G → φG etabliert also die Reduktion. Jetzt brauchen wir nur noch zu
beachten, dass D-UNREACHABILITY NL-vollständig ist (warum?) und das Ergebnis folgt
mit Korollar 5.12.
Wir kennen also mittlerweile vier NL-vollständige Probleme, nämlich D-REACHABILITY und
2SAT sowie die beiden Komplemente. Das Simulationsproblem für NFAs ist auch NL-vollständig:
Aufgabe 121
Sei A = (Σ, Q, δ, q0 , F ) ein DFA oder NFA. Wie schwierig ist die Simulation von DFAs oder NFAs? Um
diese Frage zu beantworten, entwerfen wir zuerst eine „maschinenverständliche“ Kodierung hAi des jeweiligen
Automaten. Dazu nehmen wir an, dass Σ = {0, 1}, Q = {1, 2, . . . , k} und q0 = 1 gilt; es müssen also nur noch
k, F und δ spezifiziert werden. Für F = {r1 , . . . , rf } setze
hAi := 1k #1r1 #1r2 # · · · #1rf ## ·
Y
1p #1x #1q #
(p,x,q)∈δ
(a) Zeige, dass DFAs mit logarithmischem Speicherplatz simuliert werden können, d.h. zeige, dass die Sprache
in DL liegt.
LDFA := { hAiw : w ∈ {0, 1}∗ , der DFA A akzeptiert w }
(b) Die Simulation von NFAs hingegen scheint vom Standpunkt der Speicherplatzkomplexität viel komplizierter zu sein:
i) Zeige, dass die Sprache
ENFA := { hAi : A ist ein NFA mit L(A) 6= ∅ }
NL-hart ist.
Hinweis: Es genügt der Nachweis der LOGSPACE-Reduktion
D-Reachability ≤LOG ENFA .
ii) Zeige, dass die Sprache
EDFA := { hAi : A ist ein DFA mit L(A) 6= ∅ }
NL-hart ist.
iii) Zeige, dass die Sprache
NL-vollständig ist.
LNFA := { hAiw : w ∈ {0, 1}∗ , der NFA A akzeptiert w }
Hinweis: Zeigen Sie zuerst, dass LNFA in NL liegt. Dann genügt der Nachweis der LOGSPACEReduktion
ENFA ≤LOG LNFA .
5.4. PSPACE-Vollständigkeit
Wir möchten die schwierigsten Sprachen in PSPACE bezüglich der polynomiellen Reduktion
bestimmen. Zur Erinnerung: Wir sagen, dass ein Entscheidungsproblem L1 genau dann auf
ein Entscheidungsproblem L2 polynomiell reduzierbar ist (geschrieben L1 ≤P L2 ), wenn
w ∈ L1 ⇔ T (w) ∈ L2
171
5. Speicherplatz-Komplexität
für alle Eingaben w von L1 gilt. Die Transformation w 7→ T (w) muss in polynomieller Zeit
durch eine deterministische Turingmaschine berechenbar sein.
Die Definition der PSPACE-vollständigen Sprachen folgt dem Schema der NL- und NP-Vollständigkeit.
Definition 5.3 Sei K eine Sprache.
(a) K heißt PSPACE-hart, falls L ≤P K für jede Sprache L ∈ PSPACE gilt.
(b) K heißt PSPACE-vollständig, falls K PSPACE-hart ist und falls
K ∈ PSPACE.
PSPACE-harte Sprachen sind mindestens so schwierig wie NP-harte Sprachen:
Aufgabe 122
(a) Zeige: Jede PSPACE-harte Sprache ist NP-hart.
(b) Zeige: Wenn eine PSPACE-harte Sprache in NP liegt, ist NP = PSPACE.
(c) Unterstelle in dieser Teilaufgabe die folgende, falsche Definition von „PSPACE-Härte“: Eine Sprache K
heiße „PSPACE-hart“, falls L ≤PSPACE K für alle L ∈ PSPACE gilt. Die Reduktion ≤PSPACE sei analog zu
≤LOG durch eine transformierende Turingmaschine mit polynomiellem Speicherplatzbedarf definiert.
Zeige, dass nach dieser Definition von „PSPACE-Härte“ jede Sprache K ⊆ Σ∗ mit ∅ 6= K 6= Σ∗ „PSPACEhart“ ist.
Wie auch im Fall der NP- oder NL-Vollständigkeit führt eine Berechnung der vollständigen
Probleme innerhalb der kleineren Klasse (sprich: P) zum Kollaps der größeren Klasse. Weiterhin
genügt, wie üblich, zum Nachweis der Vollständigkeit die Reduktion auf ein vollständiges
Problem.
Korollar 5.12 (PSPACE-vollständige und PSPACE-harte Sprachen)
(a) Die Sprache K sei PSPACE-vollständig. Dann gilt
K ∈ P ⇔ P = PSPACE.
(b) Die Sprache K sei PSPACE-hart. Wenn K ≤P L, dann ist auch L PSPACE-hart.
5.4.1. QBF: Quantifizierte Boolesche Formeln
Wir konstruieren die Sprache QBF, die sich später als PSPACE-vollständig herausstellen wird.
Die Worte in QBF entsprechen Kodierungen hφi von quantifizierten Booleschen Formeln φ.
Die Formel φ besteht aus einem Quantorenteil gefolgt von einer aussagenlogischen Formel α.
Der Quantorenteil besteht aus All- und Existenz-Quantoren, so dass jede in α vorkommende
Variable von genau einem Quantor gebunden wird. Wir definieren
QBF = {hφi | φ ist eine wahre quantifizierte Boolesche Formel }.
Beispiel 5.3 Die Formel φ ≡ ∃p∀q((p∨¬q)∧(¬p∨q)) ist falsch, denn sie drückt die Äquivalenz
von p und q aus. Sicherlich gibt es aber keinen Wahrheitswert für p, der mit den beiden
Wahrheitswerten 0 und 1 äquivalent ist. Somit ist φ 6∈ QBF.
Die Formel ψ ≡ ∀p∃q((p ∨ ¬q) ∧ (¬p ∨ q)) ist hingegen wahr, denn zu jedem Wahrheitswert
für p gibt es einen äquivalenten Wahrheitswert für q. Also ist ψ ∈ QBF.
172
5.4. PSPACE-Vollständigkeit
Satz 5.13 QBF ist PSPACE-vollständig.
Beweis: Wir zeigen zuerst, dass QBF in PSPACE liegt. Dazu betrachten wir den folgenden
rekursiven Algorithmus.
Algorithmus 5.4 (Erkennen wahrer quantifizierter Formeln auf polynomiellem Platz)
(1) Die quantifizierte Booleschen Formel φ sei die Eingabe.
(2) Wenn φ keine Quantoren besitzt, dann besteht φ nur aus aussagenlogischen Verknüpfungen
der Konstanten 0 und 1 und kann direkt ausgewertet werden. Gib die Auswertung aus.
(3) Wenn φ ≡ ∃pψ(p), dann führe rekursive Aufrufe mit den quantifizierten Booleschen
Formeln ψ(0) und ψ(1) durch. Wenn eine der Formeln zu 1 auswertet, dann gib 1 als
Auswertung aus. Ansonsten gib 0 als Auswertung aus.
(4) Wenn φ ≡ ∀pψ(p), dann führe rekursive Aufrufe mit den quantifizierten Booleschen
Formeln ψ(0) und ψ(1) durch. Wenn eine der Formeln zu 0 auswertet, dann gib 0 als
Auswertung aus. Ansonsten gib 1 als Auswertung aus.
Algorithmus 5.4 hat eine höchstens lineare Rekursionstiefe. In jedem Rekursionsschritt ist
aber nur ein Wahrheitswert abzuspeichern, so dass der Algorithmus nur einen linearen Speicherplatzbedarf hat und QBF ∈ PSPACE folgt.
Wir kommen zum Nachweis der PSPACE-Härte. Die Sprache L ∈ PSPACE werde von deterministischen Turingmaschine M mit Speicherplatzbedarf O(nk ) berechnet. Wir müssen für jede
Eingabe w von L in polynomieller Zeit eine quantifizierte Boolesche Formel φw konstruieren,
so dass
w ∈ L ⇔ φw ist wahr
gilt. Wir erinnern an den NP-Vollständigkeitsbeweis von KNF-SAT. Eine (nicht-quantifizierte)
t kodiert die Konfiguration der Turingmaschine zum Zeitpunkt t. Die
Boolesche Formel αw
Kodierung gelingt durch Einbeziehung der aussagenlogischen Variablen
- Kopf t (z) für die Kopfposition. Kopf t (z) soll genau dann wahr ist, wenn der Kopf zum
Zeitpunkt t auf Zelle z steht,
- Zellet (z, a) für den Zelleninhalt. Zellet (z, a) soll genau dann wahr ist, wenn die Zelle z
zum Zeitpunkt t mit dem Buchstaben a beschriftet ist und
- Zustandt (q) für den aktuellen Zustand. Zustandt (q) soll genau dann wahr ist, wenn q
der Zustand zum Zeitpunkt ist.
Weiterhin wird die beabsichtigte Bedeutung erzwungen, in dem durch die Konjunktion von
zusätzlichen Klauseln sichergestellt wird, dass die Zelleninhalte, die Kopfbewegung und der
neue Zustand sich gemäss der Arbeitsweise der Maschine verändern.
Wir kehren zurück zum PSPACE-Vollständigkeitsbeweis von QBF und müssen eine kurze Formel
φw für die möglicherweise exponentiell lange Berechnung der Turingmaschine M zu schreiben!
Sei T die kleinste Zweierpotenz, die größer als die Anzahl der Konfigurationen von M ist. c0
ist die Anfangskonfiguration und ca die eindeutig bestimmte akzeptierende Haltekonfiguration
von M . (Wieso kann man verlangen, dass es genau eine akzeptierende Haltekonfiguration
gibt?) Unser Ziel ist die Konstruktion von höchstens polynomiell langen Formeln ψt (c, d), die
genau dann wahr sein sollen, wenn M –in der Konfiguration c startend– die Konfiguration d
nach höchstens t Schritten erreicht. Ist dies geschafft, dann setzen wir φw ≡ ψT (c0 , ca ) und φw
ist genau dann wahr, wenn M die Eingabe w akzeptiert.
173
5. Speicherplatz-Komplexität
Die Formeln ψ1 (c, d) sind einfach zu konstruieren. Wir müssen ausdrücken, dass c = d oder
dass d die Nachfolgekonfiguration von c ist. Wir übernehmen die Konfigurations-Kodierung
durch die drei Typen der aussagenlogischen Variablen aus dem N P -Vollständigkeitsbeweis
für KNF-SAT. Im Fall c = d müssen wir nur die Äquivalenz der c- und d-Variablen fordern,
während im anderen Fall die d-Variablen als Aktualisierung der c-Variablen zu formulieren
sind. In jedem der beiden Fälle sind keinerlei Quantoren notwendig.
Wir benutzen Existenz-Quantoren in der rekursiven Definition von ψt (c, d), um eine Zwischenkonfiguration e zu raten, sowie All-Quantoren, um die Formellänge klein zu halten. Wir
setzen
ψ2t (c, d) ≡ ∃e∀f ∀g( ((f = c ∧ g = e) ∨ (f = e ∧ g = d)) → ψt (f, g) ).
Beachte, dass ∃e einer Reihe von Existenz-Quantoren entspricht, nämlich den ExistenzQuantoren zu den Variablen der Konfiguration e bezüglich Kopfposition, Zelleninhalt und
Zustand; die gleiche Aussage gilt analog für ∀f und ∀g. Die Formel ψ2t (c, d) drückt aus, dass
eine Berechnung der Länge höchstens 2t aufgespalten werden kann in zwei aufeinanderfolgende
Berechnungen der Länge höchstens t. Der All-Quantor erlaubt eine simultane Überprüfung der
beiden Berechnungen von c nach e und von e nach d. Dementsprechend wächst die Formellänge
additiv um höchstens O(nk ), also höchstens um den Speicherplatzbedarf von M , und wir
erhalten O(n2k ) als obere Schranke für die Länge der Formel ψT (c0 , ca ).
Wir können die Sprache QBF ein wenig vereinfachen ohne die PSPACE-Vollständigkeit zu
verlieren. Insbesondere betrachten wir nur quantifizierte Boolesche Formeln φ, deren Quantoren
strikt alternieren: auf jeden All-Quantor folgt also ein Existenz-Quantor auf den wiederum
ein All-Quantor folgen muss. Diese Einschränkung ist oberflächlich, da wir stets beliebige
Quantoren einfügen können, die in der Formel nicht vorkommende Variablen binden. In der
zweiten und letzten Einschränkung fordern wir, dass sich die in φ quantifizierte aussagenlogische
Formel in konjunktiver Normalform befindet. Wir definieren dann QBF∗ als die Menge aller
quantifizierten Booleschen Formeln in QBF, die die beiden obigen Einschränkungen erfüllen.
Korollar 5.14 QBF∗ ist PSPACE-vollständig.
Beweis: Die Formel φ sei eine (nicht eingeschränkte) quantifizierte Boolesche Formel. Wir
überführen φ in polynomieller Zeit in eine äquivalente, aber eingeschränkte Formel φ∗ . Zuerst
führen wir Dummy-Quantoren ein, um strikte Quantoren-Alternation zu sichern. Dann werden
wir die aussagenlogische Formel α von φ durch Einführung neuer Variablen x in eine äquivalente
Formel ∃xα∗ (x) überführen, wobei α∗ in konjunktiver Normalform sein wird.
Wir nehmen zuerst an, dass sich Negationen nur auf Variablen beziehen; ist dies nicht der
Fall, dann schieben wir Negationen mit den de Morgan’schen Regeln bis zu den Variablen vor.
Sodann gehen wir indukiv vor.
Fall 1: α = α1 ∨ α2 . Wir erfinden neue Variablen x1 und x2 . x1 (bzw x2 ) wird mit jeder
Klausel der konjunktiven Normalform von α1 (bzw. α2 ) „verodert“. Sei α∗ die aus den beiden
modifizierten konjunktiven Normalformen sowie der neuen Klausel (¬x1 ∨ ¬x2 ) resultierende
konjunkive Normalform. Beachte, dass α ↔ ∃x1 ∃x2 α∗ .
Fall 2: α = α1 ∧ α2 . Wir definieren α∗ als die Konjunktion der konjunktiven Normalform für
α1 mit der konjunktiven Normalform für α2 . Etwaige Existenz-Quantoren in α1 oder α2 sind
nach vorne zu ziehen.
Wir können die Formel α∗ in polynomieller Zeit konstruieren und die Behauptung folgt.
Das PSPACE-vollständige Problem QBF ∗ hat also die Form ∃x1 ∀x2 ∃x3 . . . ∀xn P (x1 , . . . , xn )
für ein KNF-Prädikat P . Eine solche Struktur läßt sich als ein Zweipersonen-Spiel auffassen:
174
5.4. PSPACE-Vollständigkeit
Der ziehende Spieler muss für eine gegebene Spielsituation einen Zug bestimmen,
der gegen alle Züge des Gegenspielers in eine gewinnbare Spielsituation führt. Das
Prädikat P definiert das Spiel.
In vielen interessanten Spielen ist die Spielauswertung P als eine aussagenlogische Formel
darstellbar, und die Frage nach einer Gewinnstrategie für den ziehenden Spieler liegt dann in
PSPACE. Tatsächlich kann man zeigen, dass viele Spiele (zum Beispiel n × n Versionen von
Go oder Schach) sogar PSPACE vollständig sind, und dass daher Gewinnstrategien nicht in P
berechenbar sind, es sei denn, es gilt P = PSPACE.
5.4.2. Das Geographie-Spiel
Wir definieren das GEOGRAPHIE-Spiel, eine Verallgemeinerung des Spiels, bei dem zwei
Spieler abwechselnd noch nicht genannte Städtenamen wählen, wobei jede Stadt mit dem
Endbuchstaben der zuvor genannten Stadt beginnen muß.
- Die Eingabe: Ein gerichteter Graph G = (V, E) und ein ausgezeichneter Knoten s ∈ V .
- Die Spielregeln:
– Zwei Spieler A und B wählen abwechselnd jeweils eine noch nicht benutzte Kante
aus E.
– Spieler A fängt an und wählt eine Kante mit Startknoten s.
– Jede anschließend gewählte Kante muß im Endknoten der zuvor gewählten Kante
beginnen.
– Der Spieler, der als erster keine solche unbenutzte Kante mehr findet, verliert das
Spiel.
- Die Aufgabe: Es ist zu entscheiden, ob ein optimal spielender Spieler A gegen jeden
Spieler B auf G gewinnen kann.
Aufgabe 123
Zeige, dass GEOGRAPHIE durch eine deterministische Turingmaschine mit höchstens polynomiellem Speicherplatz gelöst werden kann.
Aufgabe 124
(a) Im Katze-Maus-Spiel ist ein gerichteter Graph G = (V, E) gegeben sowie Positionen k ∈ V für die Katze,
m ∈ V für die Maus und l ∈ V für das Mauseloch. Es gelte k 6= l.
Die beiden Spieler, Katze und Maus, ziehen abwechselnd. Katze beginnt und muss zu einem Nachbarn
k0 von k (mit k0 6= k und k0 6= l) wechseln. Danach wird k aktualisiert (k := k0 ). Maus ist am Zug und
wählt einen Nachbarn m0 von m (mit m0 =
6 m). Diesmal wird m aktualisiert (m := m0 ). Katze gewinnt,
wenn irgendwann k = m, Maus gewinnt, wenn irgendwann m = l gilt.
Wir definieren die Sprache
KM := { (G, k, m, l) : k 6= l und Katze hat eine Gewinnstrategie }.
Gehört KM zu P, ist KM NP-vollständig oder sogar PSPACE-vollständig? Begründe deine Antwort.
Hinweis: Wie viele verschiedene „Konfigurationen“ hat das Spiel?
(b) Gibt es eine kontextsensitive Sprache L, die PSPACE-vollständig ist? Begründe deine Antwort.
175
5. Speicherplatz-Komplexität
5.4.3. NFA’s und reguläre Ausdrücke
Im Entscheidungsproblem der Nicht-Universalität für reguläre Ausdrücke ist ein regulärer
Ausdruck R genau dann zu akzeptieren, wenn L(R) 6= Σ∗ für die von R beschriebene Sprache
L(R) gilt. Ein solch einfaches Problem kann doch nicht schwierig sein, oder? Tatsächlich ist
die Nicht-Universalität für reguläre Ausdrücke hammer-hart.
Satz 5.15 (Schwierige Entscheidungsprobleme für NFAs und reguläre Ausdrücke)
(a) Die Nicht-Universalität für reguläre Ausdrücke ist ebenso PSPACE-hart wie die NichtUniversalität für NFA.
(b) Das Äquivalenzproblem für reguläre Ausdrücke, also die Frage, ob zwei gegebene reguläre
Ausdrücke R1 und R2 dieselbe Sprache beschreiben –also ob L(R1 ) = L(R2 ) gilt–, ist
PSPACE-hart. Das Äquivalenzproblem für NFA ist ebenfalls PSPACE-hart.
Beweis (a): Das Entscheidungsproblem QBF ist PSPACE-vollständig und kann von einer
deterministischen Turingmaschine
M = (Q, Σ, Γ, δ, q0 , {qf })
gelöst werden, die in-place arbeitet, also nie den Eingabebereich verlässt.
Aufgabe 125
Wenn M eine nichtdeterministische Turingmaschine ist, die mit linearem Speicherplatz arbeitet, dann gibt es
eine zu M äquivalente in-place Turingmaschine M 0 .
Zusätzlich können wir verlangen, dass M für jede Eingabe der Länge n mindestens 2n Schritte
benötigt.
Für eine Eingabe w für M konstruieren wir einen regulären Ausdruck Rw , der alle Worte
akzeptiert, die nicht mit der Konfigurationenfolge einer akzeptierenden Berechnung von M
auf Eingabe w übereinstimmen. Haben wir die Konstruktion von Rw in polynomieller Zeit
geschafft, dann haben wir L(M ) –und damit QBF – auf die Nicht-Universalität für reguläre
Ausdrücke reduziert und, wie gefordert, die PSPACE-Härte nachgewiesen. Warum?
w ∈ L(M ) ⇔ nur die Konfigurationenfolge der akzeptierenden Berechnung
von M auf w gehört nicht zu L(Rw )
⇔ L(Rw ) 6= Σ∗ .
Um Konfigurationen zu kodieren, benutzen wir das Alphabet
Σ0 = Q × Γ ∪ Γ ∪ {#}.
Das neue Symbol # trennt Konfigurationen, ein Symbol [q, a] ∈ Q × Σ repräsentiert die
Kopfposition von M und gibt an, dass gegenwärtig der Buchstabe a gelesen wird.
Wir stellen sicher, dass nur die Konfigurationenfolge einer akzeptierenden Berechnung von M
verworfen wird, wenn
(1) die Anfangskonfiguration nicht von der Form
#[q0 , w1 ]w2 · · · wn #
ist oder
176
5.5. Komplexitätsklassen und die Chomsky Hierarchie
(2) keine Konfiguration der Konfigurationenfolge den Buchstaben [qf , γ] für irgendein γ ∈ Γ
enthält oder
(3) die Folge nicht mit dem Trennsymbol # endet oder
(4) wenn sich der Bandinhalt oder der Zustand zwischen aufeinanderfolgenden Konfigurationen auf eine nicht-legale Weise ändert.
Aufgabe 126
Konstruiere Rw als Vereinigung von vier regulären Ausdrücken der Länge O(|w|)–also einen Ausdruck für jeden
der vier Fälle.
Hinweis: Um einen „kurzen“ regulären Ausdruck für den vierten Fall zu erhalten, beachte, dass in einer legalen
Folge y von Konfigurationen für jedes Teilwort yi−1 yi yi+1 das „neue“ Symbol yi+n+1 eine Funktion von
yi−1 yi yi+1 ist. Insbesondere, wenn x eine illegale Konfigurationenfolge ist, dann gilt xi+n+1 =
6 xi , obwohl der
Kopf nicht auf Position i gestanden ist, oder xi+n+1 wird falsch aktualisiert.
Damit ist die Behauptung für reguläre Ausdrücke gezeigt. Das entsprechende Ergebnis für
NFA folgt mit einem völlig analogem Argument.
(b) Die Nicht-Universalität für einen regulären Ausdruck R ist äquivalent zur Frage, ob
L(R) 6= L(Σ∗ ) gilt, d.h. ob die beiden regulären Ausdrücke R und Σ∗ äquivalent sind. Die
PSPACE-Härte des Äquivalenzproblems für reguläre Ausdrücke folgt also aus Teil (a) und
Gleiches gilt für die PSPACE-Härte des Äquivalenzproblems für NFA.
Aufgabe 127
Wenn überprüft werden soll, ob L(A1 ) = L(A2 ) für zwei DFAs gilt, ob also A1 und A2 äquivalent sind, dann
gelingt dies in Zeit O(n log2 n), wenn n das Maximum der Zustandszahlen von A1 und A2 ist: Man bestimmt
den Äquivalenzklassenautomat A01 von A1 bzw A02 von A2 und überprüft, ob A01 , A02 isomorph sind. Das
Äquivalenzproblem für NFAs ist aber ungleich schwieriger.
?
Wir beginnen mit dem Universalitätsproblem „L(A) = Σ∗ “ für einen NFA A = (Σ, Q, δ, q0 , F ). Es sei n = |Q|.
(a) Zeige: Wenn L(A) 6= Σ∗ , dann verwirft A ein Wort w ∈ Σ∗ der Länge höchstens 2n .
(b) Entwerfe einen nichtdeterministischen Algorithmus, der die Sprache der Nicht-Universalität mit linearem
Speicherplatz akzeptiert: Ihr Algorithmus muss einen NFA also genau dann akzeptieren, wenn L(A) 6= Σ∗
gilt.
(c) Zeige, dass das Universalitätsproblem in PSPACE liegt.
Kommentar: Wir wissen, dass das Universalitätsproblem PSPACE-hart ist und wir können folgern, dass das
Universalitätsproblem PSPACE-vollständig ist. Mit ähnlichen Argumenten kann auch gezeigt werden, dass
das Äquivalenzproblem für NFAs zur Klasse PSPACE gehört. Da das Äquivalenzproblem aber mindestens
so schwierig wie das Universalitätsproblem ist, ist auch das Äquivalenzproblem PSPACE-vollständig.
Aufgabe 128
Gib einen Algorithmus an, der mit polynomiell beschränktem Platz arbeitet, und der bei Eingabe eines
nichtdeterministischen endlichen Automaten einen nichtdeterministischen endlichen Automaten mit minimaler
Zustandsanzahl für dieselbe Sprache konstruiert.
Hinweis: Gib einen nichtdeterministischen Algorithmus an. Zum Vergleich der Sprachen zweier nichtdeterministischer endlicher Automaten mit höchstens n Zuständen reicht es aus, das Verhalten auf allen Worten der
Länge 2n zu vergleichen.
5.5. Komplexitätsklassen und die Chomsky Hierarchie
Unser Ziel ist ein Vergleich der bereits betrachteten Komplexitätsklassen und Sprachenklassen
Wir haben bisher die Komplexitätsklassen DL, NL, P, NP und die Klasse PSPACE, der auf polynomiellen Speicherplatz entscheidbaren Sprachen kennengelernt und die Klassen der regulären
177
5. Speicherplatz-Komplexität
und kontextfreien Sprachen untersucht. Insbesondere haben wir eingeschränkte Grammatiken als Grundlagen für die Beschreibung von Programmiersprachen behandelt: Die beiden
vorrangigen Ziele einer Programmiersprache sind entgegengesetzt, nämlich
1. eine effiziente Lösung des Wortproblems. Es sollte in vertretbarer Zeit entscheidbar sein,
ob ein vorgelegtes Wort ableitbar ist, bzw. ob ein Programm syntaktisch korrekt ist.
Dauert dieser Entscheidungsvorgang zu lange, so kommt die Sprachenklasse als mögliche
Grundlage für Programmiersprachen und Compiler nicht in Frage.
2. Die Sprachen sollten möglichst ausdruckstark sein, um höhere Programmiersprachen
komfortabel darzustellen zu können.
Wir führen die Klasse der kontextsensitiven Grammatiken ein und erhalten damit die ChomskyHierarchie, eine Grobeinteilung der Sprachenklassen.
Definition 5.4 (Chomsky-Hierarchie)
(a) Grammatiken ohne jede Einschränkung heißen Typ-0 Grammatiken. Die entsprechende
Sprachenfamilie ist
n
o
L0 = L(G) | G ist vom Typ 0
(b) Eine Grammatik G mit Produktionen der Form
u→v
mit |u| ≤ |v|
heißt Typ-1 oder kontextsensitiv. Die zugehörige Sprachenfamilie ist
L1 = L(G) | G ist vom Typ 1 ∪ L(G) ∪ {} | G ist vom Typ 1
n
o
n
o
(c) Eine Grammatik G mit Produktionen der Form
u→v
mit u ∈ V und v ∈ (V ∪ Σ)∗
heißt Typ-2 oder kontextfrei. Die zugehörige Sprachenfamilie ist
L2 = L(G) | G hat Typ 2
n
o
(d) Eine reguläre Grammatik heißt auch Typ-3 Grammatik. Die zugehörige Sprachenfamilie
ist
n
o
L3 = L(G) | G hat Typ 3
Beispiel 5.4 Die kontextfreie Grammatik G mit Startsymbol S und Produktionen
S → 0S0 | 1S1 | erzeugt alle Palindrome über dem Alphabet {0, 1}. Diese Sprache ist offensichtlich nicht regulär.
Da anderseits jede reguläre Grammatik kontextfrei ist, zeigt dieses Beispiel, dass L2 eine echte
Obermenge von L3 ist.
Beispiel 5.5 Wir entwerfen eine kontextsensitive Grammatik, die die Sprache
K = ai bi ci | i ≥ 0
n
178
o
5.5. Komplexitätsklassen und die Chomsky Hierarchie
erkennt. Die Grammatik G besitzt drei Variablen, nämlich das Startsymbol S sowie die
Variablen R und L. Die Produktionen haben die Form
S → | abc
S → aRbc
R wird ein neues a und b einführen, dann nach rechts wandern bis das erste c angetroffen wird.
Ein c wird eingefügt, und R wird durch L ersetzt:
aRb → aabbR, bRb → bbR und bRc → bcc | Lbcc
Die Variable L läuft nach links bis das erste a gefunden wird. Dann wird L durch R ersetzt:
bL → Lb und aLb → aRb.
Die Sprache Kist nicht kontextfrei. Da kontextfreie Sprachen L mit ∈
/ L durch Grammatiken in
Chomsky Normalform erzeugt werden können, ist jede kontextfreie Sprache auch kontextsensitiv,
und L1 ist eine echte Obermenge von L2 .
Satz 5.16 Die Chomsky Hierarchie und die Platzkomplexität
(a) L0 ist die Klasse aller rekursiv aufzählbaren Sprachen.
(b) Es gilt L1 = Nspace(n). Also ist L1 die Klasse aller Sprachen, die von nichtdeterministischen Turingmaschinen auf linearem Platz erkannt werden. Insbesondere ist jede
Sprache in L1 entscheidbar.
(c) NL ⊆ LOGCFL ⊆ Dspace(log22 n).
(Insbesondere sind alle kontextfreie Sprachen in Dspace(log22 n) enthalten, es gilt also
L2 ⊆ Dspace(log22 n).)
(d) Die Klasse der regulären Sprachen stimmt mit der Klasse Dspace(0) überein, es gilt also
L3 = Dspace(0).
(e) L3 ⊂ L2 ⊂ L1 ⊂ L0 und alle Inklusionen sind echt.
Beweis (a): Wir behaupten, dass L(G) für jede Grammatik G rekursiv aufzählbar ist. Warum?
Wenn wir entscheiden wollen, ob ein Wort w zur Sprache L(G) gehört, produzieren wir alle
mögliche Ableitungen: Wenn w ∈ L(G) werden wir eine Ableitung finden. Wenn w ∈
/ L(G),
wird unser Programm nicht halten, aber dies ist auch nicht erforderlich.
Andererseits sei die Sprache L rekursiv aufzählbar. Es gibt also eine Turingmaschine M
mit L = L(M ). Wir müssen eine Grammatik G mit L(M ) = L(G) konstruieren. Für die
Konstruktion von G beachten wir, dass Berechnungen von M natürlich stets mit der Eingabe
w beginnen, während eine Ableitung von w mit w endet. Also sollten wir die Grammatik so
konstruieren, dass die Berechnungen von M „rückwärts“ simuliert werden.
Zuerst normieren wir M . Wir nehmen an, dass M
- nur einen akzeptierenden Zustand qa besitzt und
- dass akzeptierende Berechnungen mit dem leeren Band enden.
Wenn wir eine Berechnung von M anhalten, dann können wir die gegenwärtige Situation durch
den
- Bandinhalt α1 · · · αN ∈ ΓN ,
- den gegenwärtigen Zustand q ∈ Q und
179
5. Speicherplatz-Komplexität
- die Position des Kopfes
exakt beschreiben. Wenn der Kopf die Position i des Bands liest, dann beschreiben wir die
Konfiguration durch das Wort
α1 · · · αi−1 q αi · · · αN .
Die zu entwerfende Grammatik G wird Konfigurationen von M rückwärts konstruieren. G
besitzt
(Γ \ Σ) ∪ Q ∪ {}
als Variablenmenge und qa als Startsymbol. Zuerst wird der von M benutzte Bandbereich
durch die Produktionen qa → Bqa | qa B erzeugt. Dann beginnt die Rückwärtsrechnung.
Fall 1: δ(q, a) = (q 0 , b, links). Wir nehmen die Produktion
q 0 cb → cqa für alle c ∈ Γ
auf: Wenn die Konfiguration ∗ · · · ∗ q 0 cb ∗ · · · ∗ schon erzeugt wurde, können wir damit die
mögliche Vorgänger-Konfiguration ∗ · · · ∗ cqa ∗ · · · ∗ erzeugen.
Fall 2: δ(q, a) = (q 0 , b, bleib). Wir fügen die Produktion
q 0 b → qa.
zu G hinzu.
Fall 3: δ(q, a) = (q 0 , b, rechts). Diesmal nehmen wir die Produktion
bq 0 → qa.
auf.
Am Ende der Ableitung werden wir eine Konfiguration
Bk q0 wBs
erzeugt haben. Die zusätzlichen Produktionen
q0 → 1
B 1 → 1
1 → 2
2 a → a2
für a ∈ Σ
2 → 3
3 B → 3
3 → das leere Wort
garantieren jetzt, dass das Wort w abgeleitet wird und dass die Ableitung die Form qa →
∗
Bk q0 wBs → w hat. Insbesondere ist w genau dann ableitbar, wenn M die Konfigurationenfolge
∗
∗
Bk q0 wBs → qa
durchläuft.
(b) Zuerst beachten wir, dass eine kontextsensitive Grammatik längenerhaltend ist: Die rechte
Seite v einer kontextsensitiven Produktion u → v ist mindestens so lang wie die linke Seite u.
Wenn wir also aus dem Startsymbol ein Wort w ∈ Σ∗ erzeugen, dann sind alle zwischenzeitlich
180
5.5. Komplexitätsklassen und die Chomsky Hierarchie
erzeugten Strings aus (Σ ∪ Γ)∗ in ihrer Länge durch |w| nach oben beschränkt. Das aber
bedeutet, dass wir eine mögliche Ableitungsfolge auf Platz O(|w|) raten und verifizieren können:
Jede kontextsensitive Sprache kann also durch eine nichtdeterministische Turingmaschine auf
linearem Platz erkannt werden.
Betrachten wir jetzt eine nichtdeterministische Turingmaschine M , die auf linearem Platz
rechnet. Wir können zuerst annehmen, dass M sogar in-place arbeitet.
In Teil (a) haben wir eine beliebige Turingmaschine M durch Typ-0 Grammatiken simuliert
und insbesondere die Äquivalenz
qa → Bk q0 wBs ⇔ w ∈ L(M )
∗
erhalten. Sämtliche Produktionen der Ableitung qa → Bk q0 wBs sind längenerhaltend. Wenn
die Maschine M aber in-place arbeitet, erhalten wir deshalb die Äquivalenz
∗
qa → q0 w ⇔ w ∈ L(M ).
∗
Mit anderen Worten, wenn L ∈ Nspace(n), dann besitzt q0 L eine kontextsensitive Grammatik.
Wir sind fertig, denn:
Aufgabe 129
Wenn q0 L kontextsensitiv ist, dann ist auch L \ {} kontextsensitiv.
(c) Für die Beziehung
NL ⊆ LOGCFL
genügt der Nachweis, dass D-REACHABILITY mit einer LOGSPACE-Reduktion auf eine
kontextfreie Sprache L reduziert werden kann. Wir beschreiben L, indem wir einen Kellerautomaten K angeben, der L akzeptiert.
K nimmt an, dass die Eingabe w ein Element von (a∗ b∗ )∗ ist und interpretiert ein Teilwort
ar bs als die Kante von Knoten r nach Knoten s; ein mehrmaliges Auftreten von Kanten ist
erlaubt.
K rät einen Weg von Knoten 1 nach Knoten 2,
- indem es eine erste Kante (1, u) rät und u auf den Keller legt.
- Der Knoten v liege gegenwärtig auf dem Keller. K rät eine Kante (v 0 , w), die in der
Eingabe nach den bisher geratenen Kanten erscheint.
– Mit Hilfe des Kellers verifiziert K, dass v = v 0 gilt. Gilt v 6= v 0 , verwirft K.
– K legt w auf den Keller und akzeptiert, wenn w = 2.
– Für w 6= 2 wiederholt K sein Vorgehen.
Wir beschreiben eine LOGSPACE-Reduktion von D-REACHABILITY auf L. Für einen
gerichteten Graphen G zählen wir die Anzahl n der Kanten. Danach geben wir die Kanten, in
einer jeweils beliebigen Reihenfolge, genau n − 1 Mal aus. Der Kellerautomat K, wenn auf
die Ausgabe angesetzt, findet genau dann einen Weg von Knoten 1 nach Knoten 2, wenn ein
solcher Weg in G existiert.
Die verbleibende Beziehung „LOGCFL⊆ Dspace(log22 n)“ folgt aus der nächsten Übungsaufgabe.
Aufgabe 130
Zeige, dass das Wortproblem für kontextfreie Sprachen in Dspace(log22 n) liegt.
181
5. Speicherplatz-Komplexität
(d) Die Behauptung folgt aus Satz 5.2.
(e) Beachte, dass L1 eine echte Teilmenge von L0 ist, da alle Sprachen in L1 entscheidbar sind.
Die restlichen (echten) Inklusionen haben wir in den obigen Beispielen nachgewiesen.
Wie schwierig ist das Wortproblemn für die Klasse der kontextsensitiven Sprachen? Viel
zu schwierig, denn das NP-vollständige Erfüllbarkeitsproblem ist kontextsensitiv. Aber die
Situation ist sogar noch viel schlimmer, denn das Wortproblem ist, wie wir gleich sehen werden,
sogar PSPACE-vollständig.
Satz 5.17 (Das Wortproblem für kontextsensitive Sprachen)
(a) Die Sprache KNF-SAT ist kontextsensitiv.
(b) Das Wortproblem für kontextsensitive Sprachen ist PSPACE-vollständig.
Beweis (a): Wir können natürlich eine erfüllende Belegung auf linearem Platz raten und
verifizieren. Die Behauptung folgt also aus Satz 5.16 (b).
(b) ist eine Konsequenz der folgenden Übungsaufgabe.
Aufgabe 131
Zeige, dass das Wortproblem für kontextsensitive Sprachen PSPACE-vollständig ist.
Wie verhalten sich die Klassen P, NP und PSPACE zu den Klassen der Chomsky-Hierarchie?
Satz 5.18
(a) L3 ⊂ L2 ⊂ P und alle Inklusionen sind echt.
(b) L1 ⊂ PSPACE ⊂ L0 und alle Inklusionen sind echt.
Beweis (a): Da das Wortproblem in Zeit O(|w|3 ) lösbar ist, gehören alle kontextfreien Sprachen
zur Klasse P. Die Sprache {ak bk ck | k ∈ N} ist nicht kontextfrei, gehört aber natürlich zur
Klasse P. Also ist L2 eine echte Teilmenge von P.
(b) In Satz 5.16 haben wir gezeigt, dass L1 = Nspace(n) gilt. Damit folgt L1 ⊆ Dspace(n2 )
aus dem Satz von Savitch. Schließlich können wir Dspace(n2 ) ⊂ PSPACE aus der SpeicherplatzHierarchie von Satz 5.1 folgern.
Wiederum aus Satz 5.16 wissen wir, dass L0 mit der Klasse der rekursiv aufzählbaren Sprachen
übereinstimmt. Da jede Sprache in PSPACE entscheidbar ist, muss die Inklusion PSPACE
⊂ L0 echt sein.
5.6. Probabilistische Turingmaschinen und Quantenrechner
Um „wieviel mächtiger“ sind probabilistische Turingmaschinen oder Quanten-Turingmaschinen
im Vergleich zu „stink-normalen“ deterministischen Turingmaschinen?
Wir führen zuerst probabilistische Turingmaschinen ein. Eine probabilistische Turingmaschine
M wird durch den Vektor
M = (Q, Σ, δ, q0 , Γ, F )
182
5.6. Probabilistische Turingmaschinen und Quantenrechner
beschrieben. Die Überführungsfunktion δ hat, im Gegensatz zu deterministischen Turingmaschinen die Form
δ : Γ × Q × Γ × Q × {links, bleib, rechts} −→ [0, 1] ∩ Q
und weist jedem möglichen Übergang
(γ, q) −→ (γ 0 , q 0 , Richtung)
die Wahrscheinlichkeit
δ(γ, q, γ 0 , q 0 , Richtung)
zu. Wir verlangen, dass für jedes Paar (γ, q) ∈ Γ × Q eine Wahrscheinlichkeitsverteilung auf
den Übergängen vorliegt. Das heißt, wir fordern für jedes Paar (γ, q) die Bedingung
δ(γ, q, γ 0 , q 0 , Richtung) = 1.
X
(γ 0 ,q 0 ,Richtung)∈Γ×Q×{links,bleib,rechts}
Wie arbeitet eine probabilistische Turingmaschine M ? Für Eingabe x wird M potenziell viele
Berechnungen ausführen. Als Berechnung bezeichnen wir dabei die Folge von Konfigurationen
B : C0 → C1 → C2 → . . . → Cm ,
die die Maschine durchläuft. Die Konfiguration C0 ist die Konfiguration, bei der der Bandinhalt
die Eingabe ist, der aktuelle Zustand der Anfangszustand q0 und der Lese-/Schreibkopf in der
Ausgangsposition ist. Als Wahrscheinlichkeit einer Berechnung bezeichnen wir das Produkt
aller Übergangswahrscheinlichkeiten. Also
prob(B) =
m−1
Y
pi
i=0
wenn pi die Wahrscheinlichkeit des Übergangs von Konfiguration Ci zu Konfiguration Ci+1
bezeichnet. Wie sollen wir die von einer probabilistischen Turingmaschine M akzeptierte
Sprache definieren? Es liegt nahe, für jede Eingabe x die Wahrscheinlichkeit akzeptierender
Berechnungen, also
X
px =
prob(B)
zu messen.
B ist akzeptierende Berechnung von x
Definition 5.5 Sei M eine probabilistische Turingmaschine, dann ist
1
= x ∈ Σ |px >
2
LM
∗
die von M akzeptierte Sprache. Wir sagen, dass M beschränkten Fehler besitzt, falls es > 0
gibt, so dass stets px ≤ 12 − gilt, falls x nicht zur Sprache L gehört und px ≥ 12 + gilt, falls
x zur Sprache L gehört.
Probabilistische Berechnungen mit beschränktem Fehler sind ein sinnvolles und in der Praxis
nützliches Berechnungsmodell: Wenn wir eine Berechnung k-mal für eine vorgegebene Eingabe
x laufen lassen und das Mehrheitsergebnis übernehmen, dann wird die Wahrscheinlichkeit
eines Fehlers höchstens
2−Ω(k)
sein. (Warum ?)
Die Berechnungskraft probabilistischer Turingmaschinen mit unbeschränktem Fehler hingegen
ist immens. So kann man zum Beispiel zeigen, dass nichtdeterministische Turingmaschinen
ohne Zeitverlust simuliert werden können.
183
5. Speicherplatz-Komplexität
Satz 5.19 Sei M eine probabilistische Turingmaschine (mit nicht notwendigerweise beschränktem Fehler). Wenn die worst-case Laufzeit einer jeden Berechnung für Eingaben der Länge n
durch t(n) beschränkt ist, dann gilt
L(M ) ∈ Dspace(t).
Beweisskizze : Die höchstens 2O(t(n)) Berechnungen für eine vorgegebene Eingabe x werden
nacheinander simuliert. Ein Zähler summiert die Wahrscheinlichkeiten akzeptierender Berechnungen (auf O(t(n)) Zellen). Nachdem alle Berechnungen simuliert sind, wird geprüft, ob der
Zähler einen Wert größer 12 hat, und in diesem Fall wird akzeptiert.
Wir kommen als nächstes zu einer allerdings nur recht oberflächlichen Beschreibung von
Quantenrechnern. Zu Anfang erinnern wir an das Rechnen mit komplexen √
Zahlen. C =
{x + iy | x, y ∈ R} bezeichnet die Menge der komplexen Zahlen und es ist i = −1. Für die
komplexe Zahl z = x + iy ist z̄ = x − iy die Konjugierte von z. Die Länge von z ist durch
|z| =
q
x2 + y 2
definiert und für komplexe Zahlen z1 , z2 ∈ C mit zk = xk + iyk ist
z1 + z2 = x1 + x2 + i(y1 + y2 )
z1 · z2 = x1 · x2 − y1 · y2 + i(x1 · y2 + x2 · y1 ).
Die Grobstruktur eines Quantenrechners ähnelt der einer probabilistischer Turingmaschine.
Diesmal hat aber die Überführungsfunktion δ die Form
δ : Γ × Q × Γ × Q × {links, bleib, rechts} −→ Q + iQ
wobei nur komplexe Zahlen der Länge höchstens 1 zugewiesen werden. Wie im Fall probabilistischer Turingmaschinen gibt es zu jedem Paar (γ, q) ∈ Γ × Q potentiell viele Übergänge,
wobei diesmal
X
|δ(γ, q, γ 0 , q 0 , Richtung|2 = 1
γ 0 ,q 0 ,Richtung
gelten muß. Wir sagen, dass
δ(γ, q, γ 0 , q 0 , Richtung)
die (Wahrscheinlichkeits-)Amplitude ist und, dass
|δ(γ, q, γ 0 , q 0 , Richtung)|2
die zugewiesene Wahrscheinlichkeit ist. Bisher haben wir nur eine merkwürdige Darstellung
der Wahrscheinlichkeit eines Übergangs kennengelernt, der wesentliche Unterschied zu den
probabilistischen Turingmaschinen folgt aber sofort: Wir weisen jeder Berechnung B das
Produkt pB der ihren Übergängen entsprechenden Wahrscheinlichkeitsamplituden zu. Charakteristischerweise werden wir im Allgemeinen aber viele Berechnungen haben, die in derselben
Konfiguration C enden. Wir weisen der Konfiguration C die Wahrscheinlichkeitsamplitude
τC =
zu und definieren
184
X
B führt auf C
|τC |2
pB
5.6. Probabilistische Turingmaschinen und Quantenrechner
als die Wahrscheinlichkeit der Konfiguration C. Die von einem Quantenrechner Q akzeptierte
Sprache definieren wir dann als
L(Q) =




1 
|τC |2 > ,
2 
ist akzeptierende Konfiguration von Q auf Eingabe x
X
x|
C
analog zu probabilistischen Turingmaschinen.
Unsere Beschreibung ist zu diesem Zeitpunkt unvollständig: Das beschriebene Rechnermodell
ist weitaus mächtiger als das Modell der Quantenrechner. Deshalb noch einmal ein Ausflug in
die komplexe Zahlen.
Für eine Matrix A = (zi,j )1≤i,j≤n mit komplexwertigen Einträgen ist
A = (zj,i )1≤i,j≤n
die konjugiert Transponierte von A. Wir nennen A unitär, falls
A · A = Einheitsmatrix.
Wir halten jetzt in der Konfigurationsmatrix AQ die Wahrscheinlichkeitsamplituden eines
1-Schritt Übergangs zwischen je zwei Konfigurationen C und C 0 fest. Also
AQ [C, C 0 ] = Wahrscheinlichkeitsamplitude des Übergangs von C nach C 0 .
Eine Quantenberechnung liegt vor, wenn die Matrix AQ unitär ist.
Satz 5.20 Wenn ein Quantenrechner Q die Sprache L(Q) in Zeit t(n) akzeptiert, dann ist
L(Q) ∈ Dspace(t2 ).
Hierzu ist die Forderung eines beschränkten Fehlers ebenso nicht notwendig wie die Forderung,
dass die Konfigurationsmatrix AQ unitär ist.
Beweisskizze : Die simulierende deterministische Turingmaschine wird die Einträge des
Matrix/Vektor-Produkts
t(n)
AQ · v
nacheinander berechnen und die Wahrscheinlichkeiten akzeptierender Konfigurationen aufsummieren. Es wird akzeptiert, falls die Summe größer als 1/2 ist. Warum funktioniert dieser
Ansatz, wenn wir den Vektor v durch
vi =
(
0 i 6= Startkonfiguration
1
sonst
definieren? Der Vektor AQ · v gibt die Wahrscheinlichkeitsamplituden der 1-Schritt Nachfolger
der Startkonfiguration wieder und allgemeiner listet der Vektor AkQ · v die Wahrscheinlichkeitsamplituden der k-Schritt Nachfolger auf. Im letzten Schritt (also k = t(n)) müssen wir dann
nur noch von den Wahrscheinlichkeitsamplituden zu den Wahrscheinlichkeiten übergehen.
Wie berechnet man aber AQ · v in Platz O(t2 (n))? Die Matrix AQ besitzt ja 2O(t(n)) Zeilen
und Spalten! Hier ist ein Tip: Der Vektor AkQ · v kann in Platz O(k · t(n)) berechnet werden.
t(n)
Selbst bei unbeschränktem Fehler liegen also Sprachen, die von probabilistischen Turingmaschinen oder von Quanten-Turingmaschinen in polynomieller Zeit akzeptiert werden, in PSPACE.
Diese Aussage gilt selbst bei unbeschränktem Fehler.
185
5. Speicherplatz-Komplexität
5.7. Zusammenfassung
Wir haben zuerst deterministische Speicherplatzklassen untersucht. Wir haben gesehen, dass
die auf Speicherplatz o(log2 log2 n) berechenbaren Sprachen mit den regulären Sprachen
übereinstimmen und deshalb „bringt ein zu kleiner Speicherplatz nichts Neues“.
Die erste nicht-triviale Klasse ist die Klasse DL aller auf logarithmischem Platz berechenbaren Sprachen. Wir haben die Grenzen der Berechnungskraft von DL am Beispiel von DREACHABILITY betrachtet. Wir haben das Konzept der Log-Space Reduktionen entwickelt,
um zu zeigen, dass D-REACHABILITY NL-vollständig ist, also ein schwierigstes Problem in
NL ist, der Klasse aller in logarithmischem Platz nichtdeterministisch lösbaren Entscheidungsprobleme. (Insbesondere folgt, dass NL in P enthalten ist.) Weitere NL-vollständige Probleme
sind 2-SAT, das Wortproblem für NFA und der Test auf Bipartitness.
Der Satz von Savitch weist nach, dass Nichtdeterminismus nur zu einem quadratischen Speicherplatzgewinn führt, da Nspace(s) ⊆ Dspace(s2 ) für platz-konstruierbare Funktionen s
gilt. Auch das Komplementverhalten ist „nicht typisch für Nichtdeterminismus“, denn es ist
überraschenderweise Nspace(s) = coNspace(s), falls s platz-konstruierbar ist.
Schließlich haben wir die wichtige Komplexitätsklasse PSPACE definiert. PSPACE lässt sich als
die Komplexitätsklasse nicht-trivialer Zwei-Personen Spiele auffassen, da das Problem der
quantifizierten Booleschen Formeln PSPACE-vollständig ist. Entscheidungsprobleme für reguläre
Ausdrücke oder NFA, wie die Universalität, das Äquivalenzproblem oder die Minimierung,
haben sich als unanständig schwierig, nämlich als PSPACE-hart herausgestellt.
Die Klasse PSPACE ist mächtig und enthält alle Entscheidungsprobleme, die durch randomisierte
Algorithmen oder Quanten-Algorithmen in polynomieller Zeit lösbar sind.
Wir haben dann die Chomsky-Hierarchie betrachtet. Die rekursiv aufzählbaren Sprachen sind
genau die Sprachen, die von unbeschränkten Grammatiken erzeugt werden können. Selbst die
kontextsensitiven Sprachen sind noch zu komplex, da ihr Wortproblem PSPACE-vollständig
sein kann. (Beachte, dass die Klasse PSPACE die Klasse NP enthält und dementsprechend ist
eine Lösung eines PSPACE-vollständigen Wortproblems in aller Wahrscheinlichkeit noch sehr
viel komplexer als die Lösung eines NP-vollständigen Problems.) Demgegenüber stehen die
kontextfreien Sprachen, deren Wortproblem bei Beschränkung auf deterministisch kontextfreie
Sprachen sogar in Linearzeit gelöst werden kann.
186
6. Parallelität
Das Textbuch „Limits to Parallel Computation: P-Completeness Theory“, von Raymond
Greenlaw, James Hoover und Walter Ruzzo, Oxford University Press (1995) ist eine sehr gute
Referenz für die Inhalte dieses Kapitels1 .
Wann ist ein algorithmisches Problem parallelisierbar und welcher Grad an Parallelisierbarkeit wird erreicht? Diese Frage haben wir bereits in Abschnitt 2.3.4 angesprochen und die
fundamentalen Klassen
ACk , NCk und NC
definiert.
Die Komplexitätsklasse NC ist unsere Definition der Klasse parallelisierbarer Probleme. NC steht
für „Nick’s Class“ (nach ihrem Autor Nick Pippenger). AC steht für „Alternating Circuits“,
d.h. Schaltkreise die alternierend aus Schichten von UND- bzw. ODER-Gattern aufgebaut
sind.
Der folgende Satz stellt eine Beziehungen zwischen den eingeführten Komplexitätsklassen und
zur Klasse P her.
Satz 6.1 Für alle k ∈ N gilt
(a) ACk ⊆ NCk+1 ⊆ ACk+1 .
(b) AC = NC ⊆ P.
Beweis (a): Die Inklusion NCk+1 ⊆ ACk+1 ist offensichtlich. Wir zeigen ACk ⊆ NCk+1 . Sei
(Sn )n∈N eine uniforme Schaltkreisefamilie, die eine Sprache aus ACk akzeptiert. Ein Undbzw. Oder-Gatter mit p Eingängen kann durch einen binären Baum der Tiefe dlog2 pe und
Größe höchstens 2p + 1 simuliert werden. Da der Fanin von Sn durch n + Größe(Sn ) beschränkt
ist und da Größe(Sn ) polynomiell in der Eingabelänge n ist, führt die Ersetzung der Knoten
von Sn durch Binärbäume auf eine um höchstens den Faktor O(log2 n) größere Tiefe. Beachte,
daß die Größe durch die Ersetzungen höchstens quadriert wird.
(b) Die Gleichheit AC = NC folgt aus Teil (a). Betrachten wir die Inklusion NC ⊆ P. Sei L ∈ NC.
Dann gibt es eine uniforme Schaltkreisfamilie (Sn )n∈N , die L berechnet. Es genügt zu zeigen, daß
Sn in polynomieller Zeit konstruierbar und auswertbar ist. Die polynomielle Konstruierbarkeit
folgt, da Sn durch eine logarithmisch-platzbeschränkte Turingmaschine berechenbar ist. Eine
Auswertung gelingt mit Tiefensuche in polynomieller Zeit, da Größe(Sn ) = poly(n).
Bemerkung 6.1 Was geht wie schnell? Einige der folgenden Ergebnisse werden später gezeigt
oder in Übungsaufgaben angesprochen.
• In AC0 liegen
1
Das Buch kann auch über die Webseite
http://www.cs.armstrong.edu/greenlaw/research/PARALLEL/limits.pdf heruntergeladen werden.
187
6. Parallelität
– die Addition von zwei n-Bit Zahlen,
– die Multiplikation Boolescher Matrizen,
– für jede Konstante m ∈ N und jedes k ≤ logm
2 n die Frage, ob eine Eingabe höchstens,
mindestens oder genau k Einsen besitzt.
• In NC1 liegen
– die Berechnung x1 ⊕ x2 ⊕ · · · ⊕ xn der XOR-Funktion und, allgemeiner, die Klasse
der regulären Sprachen,
– die Multiplikation von zwei n-Bit Zahlen.
• In AC1 liegen
– die transitive Hülle von Graphen,
– das Wortproblem für kontextfreie Sprachen.
• In NC liegt das Maximum Matching Problem: Bestimme eine größtmögliche Menge
knoten-disjunkter Kanten.
• In P, aber wahrscheinlich nicht in NC, liegen
– das Auswertungsproblem für einen Schaltkreis S: Bestimme die Ausgabe S(x) für
Eingabe x.
– das Problem der linearen Programmierung.
Aufgabe 132
Manchmal gelingen Konstantzeit-Berechnungen mit vernünftig großen Schaltkreisen, manchmal sind selbst bei
einfachen Problemen extrem viele Gatter notwendig.
(a) Die Parität von n Bits, also die Summe x1 + · · · + xn mod 2 sei mit einer DNF zu bestimmen.
Zeigen Sie: Mindestens 2n−1 Gatter werden benötigt.
(b) Konstruieren Sie einen Schaltkreis Sn konstanter Tiefe und polynomieller Größe (in n), der für je zwei
Worte x, y ∈ {0, 1}n die Binärdarstellung z der Summe Zahl(x)+Zahl(y) berechnet.
Aufgabe 133
Ein DFA A = (Σ, Q, q0 , δ, F ) sei gegeben. Entwerfen Sie eine uniforme Schaltkreisfamilie (Sn : n ∈ N), so dass
Sn genau die Worte in L(A) ∩ Σn akzeptiert.
Die Tiefe von Sn soll durch O(log2 n) beschränkt sein, die Größe soll höchstens O(n) betragen. (Es ist also
L(A) ∈ DEPTH − SIZEuniform (log2 n, n) zu zeigen. Für eine Eingabe w von A ist Größe und Tiefe von Sn in
Abhängigkeit von der Eingabelänge n := |w| zu analysieren.)
Hinweis: Verwenden Sie einen Divide & Conquer-Ansatz.
Aufgabe 134
Es sei ein nichtnegativ gewichteter, gerichteter Graph als Distanzmatrix mit Einträgen einer bestimmten
Bitlänge gegeben. Es soll für alle Knotenpaare die Länge des kürzesten Weges zwischen ihren Knoten bestimmt
werden. Hierzu wird ein paralleler Algorithmus gesucht, der ähnlich wie Floyds Algorithmus arbeitet. Der
Algorithmus soll mit den Ressourcen von NC2 arbeiten.
Hinweis: Betrachte eine Matrixmultiplikation, bei der statt der normalen Multiplikation die Addition und statt
der normalen Addition die Minimumbestimmung verwendet wird und wende diese auf das Problem an.
Aufgabe 135
Eine Formel ist ein Schaltkreis mit Fanin 2 und Fanout 1, d.h. die Graphstruktur einer Formel ist ein Baum.
Die Größe einer Formel ist die Anzahl der Blätter.
(a) Zeige: Jede Funktion in NC1 hat eine polynomiell große Formel.
(b) Zeige: Wenn f eine Formel der Größe N hat, dann hat f eine äquivalente Formel der Tiefe O(log2 N ).
188
6.1. Parallele Rechenzeit versus Speicherplatz
Aufgabe 136
Die Klasse N-AC02 bestehe aus uniformen Schaltkreisfamilien mit unbeschränktem Fanin und Tiefe 2, die
nichtdeterministisch arbeiten, d.h., die zusätzlich zur „normalen“ Eingabe ein nichtdeterministisches Ratewort
lesen und entsprechend akzeptieren.
Zeige: NP = N-AC02 .
6.1. Parallele Rechenzeit versus Speicherplatz
Welche Funktionen können uniforme Schaltkreisfamilien in Tiefe s(n) berechnen? Angenommen,
die uniforme Schaltkreisfamilie (Sn )n∈N hat Tiefe s(n) = Ω(log2 n). Wir führen auf dem
Schaltkreis in umgekehrter Richtung, also von der Senke zu den Quellen, eine Tiefensuche
durch, um die Ausgabe des Schaltkreises Sn speicherplatz-effizient zu berechnen. Anstatt den
gesamten Schaltkreis zu speichern, leiten wir jedes Mal die für den Abruf einer speziellen
benötigten Information über Sn alle durch die Beschreibung des Schaltkreises gegebenen
Informationen. Das gelingt mit Speicherplatz O(s(n)).
Wir speichern den Weg der Tiefensuche durch die Bitfolge ~b ab. Falls bi = 1 (bzw. bi = 0), ist
der (i + 1)-te Knoten des Wegs der rechte (bzw. linke) Nachfolger des i-ten Knoten. Die Länge
der Liste ist proportional zur Tiefe s(n) und die Turingmaschine rechnet mit Speicherplatz
O(s(n)). Wir haben also gerade nachgewiesen, dass
DEPTHuniform (s) ⊆ Dspace(s)
gilt. Um die umgekehrte Fragestellung, nämlich die Simulation von „Speicherplatz“ durch
„Tiefe“ zu untersuchen, betrachten wir die transitive Hülle von Graphen.
Lemma 6.2 Es gibt uniforme Schaltkreisfamilien (mit unbeschränktem) Fanin, so dass
(a) zwei Boolesche n × n-Matrizen in Tiefe zwei mit O(n3 ) Gattern multipliziert werden und
(b) die transitive Hülle eines Graphen in Tiefe O(log2 n) und Größe O(n3 log2 n) mit unbeschränktem Fanin berechnet wird.
Beweis (a): Offensichtlich kann ein Schaltkreis das Produkt
(A · B)[i, j] =
n
_
A[i, k] ∧ B[k, j]
k=1
in Tiefe zwei mit O(n3 ) Gattern berechnen.
(b) Sei A die Adjazenzmatrix eines gerichteten Graphen mit n Knoten und sei En die n × n
Einheitsmatrix. Man beweist durch Induktion über d, dass es genau dann einen Weg der Länge
d von i nach j gibt, wenn Ad [i, j] = 1.
Ein Weg von i nach j darf auf jedem seiner Knoten für mehrere Schritte verweilen. Mit anderen
Worten, es gibt genau dann einen Weg von i nach j, wenn (A ∨ En )n [i, j] = 1. Die Matrix
(A ∨ En )n kann mit wiederholtem Quadrieren für eine Zweierpotenz n schnell berechnet werden.
B := A ∨ En ;
FOR i = 1 TO log2 n DO
B := B 2 ;
189
6. Parallelität
Jeder Quadrierungsschritt gelingt in Tiefe zwei und Größe O(n3 ) ist ausreichend. Wir haben
durch Übereinandersetzen von log2 n Schaltkreisen zur Matrizenmultiplikation die transitive Hülle in Tiefe O(log2 n) und Größe O(n3 log2 n) berechnet. Beachte, daß die erhaltene
Schaltkreisfamilie uniform ist (Warum? Wie geht man vor, wenn n keine Zweierpotenz ist?). Wir können jetzt die enge Kopplung zwischen den Komplexitätsmaßen „Speicherplatz“ und
„Tiefe“ präzisieren.
Satz 6.3 Sei s : N → N mit s(n) = Ω(log2 n) gegeben. Die Funktion s sei platz-konstruierbar.
Dann ist
Dspace(s) ⊆ Nspace(s) ⊆ DEPTH − SIZEuniform (s2 , 2O(s) ) ⊆ Dspace(s2 ).
Beweis: Wir wissen, dass DEPTHuniform (s) ⊆ Dspace(s) gilt. Also genügt der Nachweis von
Nspace(s) ⊆ DEPTH − SIZEuniform (s2 , 2O(s) ). Sei also M eine nichtdeterministische Turingmaschine, die mit Speicherplatz höchstens s rechnet. Für Eingabe w betrachten wir den
Berechnungsgraphen GM (w). Wir haben zu entscheiden, ob es einen Weg vom Startknoten
zu einem akzeptierenden Knoten in GM (w) gibt. Offensichtlich kann man annehmen, dass es
genau eine akzeptierende Konfiguration gibt, und wir müssen das Problem D-REACHABILITY
für GM (w) lösen
GM (w) hat höchstens N = 2O(s(n)) Knoten. Wir berechnen zuerst GM (w) und lösen sodann DREACHABILITY mit Lemma 6.2 in Tiefe O(log2 N ) = O(s) und Größe O(s(n)N 3 ) = 2O(s(n))
durch eine uniforme Schaltkreisfamilie2 . Um den Fanin von maximal 2O(s(n)) auf zwei zu
drücken, muss die Tiefe von O(s) auf O(s2 ) erhöht werden, die Größe ändert sich dabei
höchstens polynomiell.
Aufgabe 137
Zeige, dass NL ⊆ AC1 gilt.
6.2. P-Vollständigkeit
Wir möchten die vom Standpunkt der Parallelisierbarkeit „schwierigsten“ Probleme in P
bestimmen und wählen die LOGSPACE-Reduzierbarkeit, um die Parallelisierbarkeit zweier
vorgegebener Sprachen zu vergleichen. Weshalb betrachten wir die LOGSPACE-Reduktion?
Lemma 6.4
(a) DL ⊆ NC2 .
(b) Zwei Sprachen L1 , L2 ⊆ {0, 1}∗ seien gegeben. Aus L1 ≤LOG L2 und L2 ∈ NC folgt
L1 ∈ NC.
Beweis (a): ist eine direkte Konsequenz von Satz 6.3.
(b) Nach Definition existiert eine deterministische, logarithmisch-platzbeschränkte Turingmaschine M mit
w ∈ L1 ⇔ M (w) ∈ L2 .
Da M logarithmisch-platzbeschränkt ist, kann jedes Ausgabebit von M durch eine Schaltkreisfamilie (Tn |n ∈ N) mit polynomieller Größe und Tiefe O(log22 n) berechnet werden, denn
2
Um eine uniforme Schaltkreisfamilie zu konstruieren, muss gefordert werden, dass s(n) platz-konstruierbar
ist.
190
6.2. P-Vollständigkeit
DL ⊆ NC2 . Wenn also L2 durch die uniforme Schaltkreisfamilie (Sn |n ∈ N) polynomieller
Größe und polylogarithmischer Tiefe erkannt wird, so ist auch L1 in polynomieller Größe und
polylogarithmischer Tiefe erkennbar. Daher ist L1 ∈ NC.
Da DL ⊆ NC2 gilt, sind alle Sprachen in DL parallelisierbar. Insbesondere ist die LOGSPACEReduktion durch einen Schaltkreis polynomieller Größe und der Tiefe O(log2 n) simulierbar. Aus
Teil (b) folgt aus L1 ≤LOG L2 , dass L1 parallelisierbar ist, wenn L2 parallelisierbar ist. Trotzdem
ist Lemma 6.4 kein entscheidender Grund für die LOGSPACE-Reduktion, da die Aussage
auch für andere Reduktionen gilt. Zum Beispiel könnten wir statt LOGSPACE-Reduktionen
als Transformation eine uniforme Schaltkreisfamilie mit Tiefe poly(log2 n) und Größe poly(n)
zulassen. Zwar ist ein solcher Ansatz legal und wird gelegentlich auch benutzt, allerdings werden
meistens „starke“ Transformationen nicht benötigt: Die „schwache“ LOGSPACE-Reduktion
genügt sogar, um die wichtigsten NP-Vollständigkeitsergebnisse zu etablieren. Wir arbeiten
daher im weiteren nur mit der LOGSPACE-Reduktion.
Definition 6.1
(a) Eine Sprache L heißt genau dann P-hart, wenn K ≤LOG L für alle Sprachen K ∈ P gilt.
(b) Eine Sprache L heißt genau dann P-vollständig, wenn L ∈ P und wenn L P-hart ist.
Die P-vollständigen Sprachen sind die vom Standpunkt der Parallelisierbarkeit die schwierigsten
Sprachen in P: Wenn eine P-vollständige Sprache parallelisierbar ist, dann stimmen NC und P
überein und alle Sprachen in P wären überraschenderweise parallelisierbar.
Lemma 6.5 Sei L eine P-vollständige Sprache. Dann gilt:
P = NC ⇔ L ∈ NC.
Beweis ⇒: Da L ∈ P und da nach Voraussetzung P = NC, ist L ∈ NC.
⇐. Nach Voraussetzung ist L ∈ NC. Da L P-vollständig ist, gilt K ≤LOG L für alle K ∈ P. Aus
Lemma 6.4 folgt K ∈ NC für alle K ∈ P, also folgt P ⊆ NC. Nach Satz 6.1 gilt NC ⊆ P, und wir
erhalten die Behauptung.
6.2.1. Das Circuit Value Problem
Für einen Schaltkreis S sei hSi die Binärkodierung eines Programmes, das
• die Gatter von S in irgendeiner Reihenfolge aufzählt,
• jedem Gatter seine Funktion zuweist,
• sämtliche Kanten aufzählt und
• jeder Quelle eine Bitposition der Eingabe zuweist.
In diesem Abschnitt werden wir unsere erste P-vollständige Sprache kennenlernen, das CircuitValue-Problem (CVP). Das Problem CVP spielt als generisches Problem dieselbe Rolle wie das
Erfüllbarkeitsproblem KNFSAT für die NP-Vollständigkeit, QBF für die PSPACE-Vollständigkeit
oder D-REACHABILITY für die NL-Vollständigkeit.
Definition 6.2 Wir nehmen an, daß der Fanin für alle zu betrachtenden Schaltkreise höchstens
zwei ist.
191
6. Parallelität
(a) Die Sprache des Circuit-Value Problem ist gegeben durch
CVP = {hSix | S ist ein Schaltkreis mit Eingabe x und S(x) = 1.}
(b) Ein monotoner Schaltkreis besteht nur aus den Gatter ∧ und ∨. Die Sprache des
monotonen Circuit-Value Problems ist gegeben durch
M − CVP = {hSix | der monotone Schaltkreis S akzeptiert die Eingabe x }.
(c) Ein NOR-Schaltkreis besteht nur aus NOR-Gattern. Die Sprache des NOR-Circuit-Value
Problems ist gegeben durch:
NOR − CVP = {hSix | der NOR-Schaltkreis S akzeptiert die Eingabe x }.
Lemma 6.6 Die Sprachen CVP, M − CVP und NOR − CVP liegen in P.
Beweis: Ein Schaltkreis der Größe s mit n Eingaben kann sequentiell zum Beispiel mit Hilfe
der Tiefensuche in Zeit O(s + n) ausgewertet werden.
Das zentrale Resultat dieses Abschnitts ist die P-Vollständigkeit des Circuit-Value Problems.
Satz 6.7 CVP ist P-vollständig.
Beweis: Nach Lemma 6.6 ist CVP eine Sprache in P. Wir müssen noch zeigen, daß CVP
P-hart ist. Sei L eine beliebige Sprache in P. Wir zeigen die Reduktion L ≤LOG CVP.
Was ist über L bekannt? Es gibt eine deterministische Turingmaschine M , die L in höchstens
t(n) Schritten akzeptiert. Die Schrittzahl t(n) ist durch ein Polynom q(n) nach oben beschränkt.
Um die geforderte Reduktion zu konstruieren, simulieren wir M für Eingaben der Länge n
durch einen Schaltkreis Sn .
Wir simulieren M mit einem Schaltkreis Sn , dessen Grobstruktur einem zwei-dimensionalen
Gitter entspricht. Die „i-te Zeile“ des Gitters gibt Bandinhalt, Kopfposition und Zustand
von M zum Zeitpunkt i wieder. Die i-te Zeile ist aus identischen kleinen Schaltreisen Si,j
aufgebaut, wobei Si,j die Zelle j zum Zeitpunkt i simuliert. Ein solcher kleiner Schaltkreis Si,j
muß
• den von Schaltkreis Si−1,j berechneten Bandinhalt speichern können, falls der Kopf von
M zum Zeitpunkt i die Zelle j nicht besucht und sonst
• den Bandinhalt verändern, abhängig vom gegenwärtigen Zustand und vom gegenwärtigen
Bandinhalt. Weiterhin muss Si,j in diesem Fall den neuen Zustand und die Richtung des
Kopfes festlegen.
Diese Aufgaben lassen sich durch einen Schaltkreis konstanter Größe bewerkstelligen, wenn wir
die Ausgänge von Si−1,j−1 , Si−1,j und Si−1,j+1 zu Eingängen von Si,j machen. Die Ausgänge
jedes Schaltkreises müssen
• den Bandinhalt kodieren,
• angeben, ob die Zelle gerade besucht wurde und wenn ja, den neuen Zustand und die
Kopfrichtung spezifizieren.
192
6.2. P-Vollständigkeit
Beachte, dass sämtliche Schaltkreise Si,j „baugleich“ gewählt werden können, mit Ausnahme
der Schaltkreise S0,j , die entweder zu setzen sind (j ∈
/ {1, . . . , n}) oder an die Eingabe
anzuschliessen sind (j ∈ {1, . . . , n}).
Wir müssen das Gitter noch „auswerten“, d.h. wir müssen feststellen, ob der letzte Zustand
akzeptierend ist. Dies gelingt, wenn wir einen binären Auswertungsbaum „auf“ das Gitter setzen.
Man beachte, daß der beschriebene Schaltkreis durch eine logarithmisch-platzbeschränkte
Turingmaschine konstruierbar ist.
Bemerkung 6.2 Beachte, dass CVP P-vollständig bleibt, wenn die Knoten des Schaltkreises
Sn in topologischer Reihenfolge ausgegeben werden: Zuerst werden die Quellen des „Gitters“
ausgegeben, dann alle Knoten der Tiefe 1 gefolgt von allen Knoten der Tiefe 2 und so weiter.
Diese Eigenschaft wird später im Beweis der P-Vollständigkeit von LFMIS genutzt.
Bemerkung 6.3 Der Beweis von Satz 6.7 zeigt, dass wir eine polynomiell zeitbeschränkte
Turingmaschine durch eine uniforme Schaltkreisfamilie polynomieller Größe simulieren können.
Für den Nachweis von P 6= NP genügt somit der Nachweis, dass irgendein NP-vollständiges
Problem keine polynomiell großen Schaltkreise besitzt.
Satz 6.8 M − CVP und NOR − CVP sind P-vollständig.
Beweis: Nach Lemma 6.6 sind M-CVP und NOR-CVP Sprachen aus P. Wir müssen noch
zeigen, daß die Sprachen P-hart sind.
6
v1 ∨
(v1 , 0) ∨
]
v2
]
(v2 , 0)
¬
6
v3 v4
∧
∨
M
]
x1
x2
(v , 1)
6
x3
∧ i
i
-
(v3 , 0) ∧
∨ (v4 , 0)
M
x1
x2
]
∧
1 1
(v3 , 1)
∧
∨
(v4 , 1) x3
1
∧
O
(v2 , 1) M
¬x3
¬x2
]
¬x1
Abbildung 6.1.: Beispiel zur Reduktion CVP ≤LOG M-CVP
Wir zeigen die Reduktion CVP ≤LOG M-CVP.
Sei (S, x) eine Eingabe für CVP. Wir „schieben“ sämtliche Negationsgatter hinab zu den
Quellen von S. Da
¬(u ∧ w) ⇔ ¬u ∨ ¬w
¬(u ∨ w) ⇔ ¬u ∧ ¬w
¬(¬u) ⇔ u
bedeutet der Schiebeprozess das Vertauschen von ∧- und ∨-Gattern sowie die Einführung
neuer Quellen für die negierte Eingaben.
193
6. Parallelität
Wir ersetzen ein Gatter v durch zwei Gatter (v, 0) und (v, 1) mit den Ausgaben v beziehungsweise ¬v. Die obige Abbildung zeigt ein Beispiel. Formal sieht die Transformation wie folgt
aus:
1. Für jedes Gatter v von S (mit Ausnahme der Senke von S) führen wir zwei Gatter (v, 0)
und (v, 1) ein. Mit (v, 0) simulieren wir das ursprüngliche Gatter, mit (v, 1) simulieren wir
das negierte Gatter. Die Senke s von S wird durch die Senke (s, 0) des neuen Schaltkreises
ersetzt. Wir nehmen an, daß die Senke ein ∧- oder ∨-Gatter war.
2. Für jedes ∧-, ∨- oder ¬-Gatter des alten Schaltkreises fügen wir im neuen Schaltkreis
Verbindungen, wie in den beiden Abbildungen angedeutet, ein.
v
(v, 0)
∧
∧
]
v
∨
]
bzw.
(u, 0)
w
(v, 0)
(w, 0)
∨
-
w
(v, 1)
∧
]
bzw.
(u, 0)
(w, 1)
∨
]
(u, 1)
]
u
]
-
u
(v, 1)
(w, 0)
(u, 1)
(w, 1)
Abbildung 6.2.: Ersetzen von ∧- und ∨-Gattern.
v
(v, 1)
¬
∧
6
(v, 0)
]
-
∧
]
bzw.
(u, 0)
u
(u, 0)
(u, 1)
(u, 1)
Abbildung 6.3.: Ersetzen von ¬-Gattern.
3. Wir ersetzen eine Quelle v (mit Eingabe xi ) durch die beiden Quellen (v, 0) (mit Eingabe
xi ) und (v, 1) (mit Eingabe ¬xi ).
Sei S ∗ der neue Schaltkreis (mit gleicher Senke wie S) und sei x∗ die neue Eingabefolge von
S ∗ . Offenbar gilt:
S akzeptiert x ⇔ S ∗ akzeptiert x∗ .
Beachte, dass die Transformation
194
hSix 7→ hS ∗ ix∗
6.2. P-Vollständigkeit
durch eine Turingmaschine mit logarithmischer Platzbeschränkung berechnet werden kann.
Wir zeigen die Reduktion CVP ≤LOG NOR-CVP. Es ist nor(u, v) = ¬(u∨v). Jede der Operationen ∧, ∨ und ¬ kann man mit NOR-Gattern darstellen, da nor(u, u) = ¬u, nor(¬u, ¬v) = u ∧ v
und nor(nor(u, v),nor(u, v)) = u ∨ v. Eine deterministische, logarithmisch-platzbeschränkte Turingmaschine kann somit zu jedem {∧, ∨, ¬}-Schaltkreis S einen äquivalenten NOR-Schaltkreis
S ∗ konstruieren. Es gilt
S akzeptiert x ⇔ S ∗ akzeptiert x.
Beachte, dass die Reduktion
hSix 7→ hS ∗ ix
in logarithmischem Platz ausgeführt werden kann.
Aufgabe 138
(a) Ein Literal ist eine aussagenlogische Variable oder ihre Negation. Ein Disjunktionsterm wird durch eine
endliche Menge D von Literalen repräsentiert und stimmt überein mit der Disjunktion
_
`.
`∈D
Eine Einser-Klausel ist ein Disjunktionsterm D mit |D| = 1. In einem Einser-Resolutionsschritt darf
aus einer Einser-Klausel {`} und einem Disjunktionsterm {¬`, `1 , . . . , `m } der neue Disjunktionsterm
{`1 , . . . , `m } gefolgert werden.
Sei D ein Disjunktionsterm und sei φ = i=1 Di eine aussagenlogische Formel in konjunktiver Normalform
(KNF) mit Disjunktionstermen D1 , . . . , Dm . Ein Einser-Resolutionsbeweis von D aus φ ist eine
Folge B1 , . . . , Bm von Disjunktionstermen mit Bm = D, so dass Bi für jedes i (1 ≤ i ≤ m) mit
einem Disjunktionsterm von φ übereinstimmt oder durch einen Einser-Resolutionsschritt aus früheren
Disjunktionstermen Bj und Bk (1 ≤ j, k < i) gefolgert werden kann.
Vm
Im Problem der Einser-Resolution ist eine KNF ψ und ein Disjunktionsterm D gegeben und es ist zu
entscheiden, ob es einen Einser-Resolutionsbeweis von D aus ψ gibt.
i) Zeigen Sie: Das Problem der Einser-Resolution liegt in P.
ii) Zeigen Sie: Das Problem der Einser-Resolution ist P-vollständig.
Hinweis: Zeigen Sie die Reduktion M-CVP ≤LOG Einser-Resolution. Einem monotonem Schaltkreis
S (mit Senke s) und einer Eingabe y muss also ein Disjunktionsterm DS,y und eine KNF ψS,y
zugewiesen werden, so dass
S(y) = 1 ⇐⇒ es gibt einen Einser-Resolutionsbeweis von DS,y aus ψS,y .
Weisen Sie jedem Gatter g eine aussagenlogische Variable Vg zu und setzen DS,y := Vs (für die der
Senke s zugewiesene Variable V s). Jedes Gatter ist durch einen oder mehrere Disjunktionsterme zu
modellieren. Schließlich kann ψS,y als Konjunktion all dieser Disjunktionsterme definiert werden.
Wie sehen diese Terme für ein UND-Gatter g = g1 ∧ g2 , ein ODER-Gatter g = g1 ∨ g2 bzw. ein
Eingabegatter g = xi aus? Wie sollte die Eingabe y modelliert werden?
(b) Im Wortproblem für kontextfreie Grammatiken ist eine kontextfreie Grammatik G = (Σ, V, P, S)
und ein Wort w ∈ Σ∗ gegeben. Es ist zu entscheiden, ob w ∈ L(G) gilt.
Zeigen Sie: Das Wortproblem für kontextfreie Grammatiken ist P-vollständig.
Hinweis: Zeigen Sie die Reduktion M-CVP ≤LOG Wortproblem für kontextfreie Grammatiken. Dazu
müssen Sie für einen monotonen Schaltkreis S und eine Eingabe y eine kontextfreie Grammatik GS,y =
(Σ, V, S, P ) (mit Σ = {0, 1}) und ein Wort wS,y wählen, so dass
S(y) = 1 ⇐⇒ wS,y ∈ L(GS,y ).
Setzen Sie wS,y = und wählen Sie für jedes Gatter g eine eigene Variable. Das Startsymbol sollte dem
Ausgabegatter von S entsprechen.
195
6. Parallelität
6.2.2. Die Lineare Programmierung
Wir betrachten als nächstes das Problem der linearen Ungleichungen und der linearen Programmierung.
Definition 6.3 Gegeben ist eine ganzzahlige Matrix A ∈ zm×n sowie Vektoren b ∈ Zm und
c ∈ Zn .
(a) Im Problem der linearen Ungleichungen ist zu entscheiden, ob es einen Vektor x ∈ Qn
mit Ax ≤ b gibt.
(b) Im Problem der linearen Programmierung ist zu entscheiden, ob es einen Vektor x ∈ Qn
mit Ax ≤ b und c · x ≥ t gibt.
Das Problem der linearen Programmierung wird konventionell als Optimierungsproblem
formuliert:
Maximiere c · x, so daß Ax ≤ b und x ≥ 0 gilt.
Wir hingegen haben dieses Optimierungsproblem als Entscheidungsproblem formuliert.
Satz 6.9
(a) Das Problem der linearen Ungleichungen ist P-vollständig.
(b) Das Problem der linearen Programmierung ist P-vollständig.
Beweis: Beide Sprachen liegen in P, denn es existieren Polynomialzeit-Algorithmen. Bekannte
Beispiele für solche Verfahren sind Karmarkars Algorithmus und die Ellipsoid-Methode.
(a) Wir zeigen die Reduktion M-CVP≤LOG Lineare Ungleichungen. Sei (S, x) eine Eingabe
für M-CVP. Wir weisen jedem Gatter von S Ungleichungen zu.
• Beschreibe zuerst die Eingabe x.
– Falls xi = 0, verwende die Ungleichungen xi ≤ 0 und −xi ≤ 0.
– Falls xi = 1, verwende die Ungleichungen xi ≤ 1 und −xi ≤ −1.
• Für ein Gatter v ≡ u∧w verwende die Ungleichungen: v ≤ u, v ≤ w, u+w−1 ≤ v, 0 ≤ v.
• Für ein Gatter v ≡ u ∨ w verwende die Ungleichungen: u ≤ v, w ≤ v, v ≤ u + w, v ≤ 1.
Durch Induktion über die topologische Nummer eines Gatters zeigt man, dass das lineare
Ungleichungssystem genau eine Lösung hat und der gewünschten Lösung entspricht. Wir fügen
noch die Ungleichung
−s ≤ −1
für die eindeutig bestimmte Senke s des Schaltkreises hinzu. S akzeptiert genau dann die
Eingabe x, wenn das konstruierte, lineare Ungleichungssystem lösbar ist.
(b) Die Behauptung folgt, da die Reduktion
lineare Ungleichungen ≤LOG lineare Programmierung
trivial ist.
Korollar 6.10 Das Problem der linearen Ungleichungen und das Problem der linearen Programmierung bleiben sogar dann P-vollständig, wenn man die Koeffizienten der Matrix A und
des Vektors b auf {−1, 0, 1} beschränkt.
196
6.2. P-Vollständigkeit
6.2.3. Parallelisierung von Greedy-Algorithmen
Greedy-Methoden sind im allgemeinen leicht zu implementieren und führen zu effizienten,
sequentiellen Algorithmen. Leider sind Greedy-Algorithmen häufig inhärent sequentiell. Wir
werden am Beispiel einer Heuristik für das Independent-Set-Problem sehen, dass eine Parallelisierung nicht gelingen wird. (Gleichwohl gibt es andere Heuristiken, die lokale Minima in
polylogarithmischer Zeit bestimmen.)
Sei G = (V, E) ein ungerichteter Graph mit V = {1, . . . , n}. Im Independent-Set Problem ist
eine unabhängige Knotenmenge größter Kardinalität ist zu bestimmen. (Eine Knotenmenge
ist unabhängig, wenn keine zwei Knoten der Menge durch eine Kante verbunden sind.)
Algorithmus 6.1 Heuristik für das Independent-Set-Problem.
Die Eingabe besteht aus einem ungerichteten Graphen G = (V, E) mit V = {1, . . . , n}.
(a) I(G) := ∅ .
(b) FOR v = 1 TO n DO
IF (v ist nicht mit einem Knoten in I(G) verbunden) THEN I(G) = I(G) ∪ {v}.
(c) Die Menge I(G) wird ausgegeben.
Die Heuristik des Greedy-Algorithmus’ 6.1 findet in jedem Fall ein lokales Minimum (also eine
unabhängige Menge, für die keine echte Obermenge unabhängig ist).
Im Lexicographically-First-Maximal-Independent-Set-Problem (LFMIS) ist ein ungerichteter
Graph G = (V, E) mit V = {1, . . . , n} und ein Knoten v ∈ V gegeben. Es ist zu entscheiden,
ob der Knoten v von Algorithmus 6.1 gewählt wird.
Satz 6.11 Die Sprache LFMIS ist P-vollständig.
Beweis: LFMIS liegt in P, denn die Laufzeit von Algorithmus 6.1 ist linear in n. Wir zeigen
die Reduktion: NOR-CVP ≤LOG LFMIS.
Sei (S, x) die Eingabe für NOR-CVP und sei G = (V, E) die Graphstruktur des Schaltkreises S.
Wir konstruieren einen ungerichteten Graphen G∗ = (V ∗ , E ∗ ) aus dem gerichteten Graphen G:
Füge einen neuen Knoten v0 hinzu und setzen genau dann eine Kante {v0 , i} zum Eingabeknoten
i ein, wenn xi = 0 ist. Es ist also
V ∗ = V ∪ {v0 } und E ∗ = {{v0 , i} | xi = 0} ∪ E.
Wir können mit Bemerkung 6.2 annehmen, dass v0 die Nummer Eins erhält und die restlichen Knoten in topologischer Reihenfolge aufgezählt werden. Durch Induktion über die
Nummerierung zeigen wir
I(G∗ ) = {v0 } ∪ {v ∈ V | Gatter v hat den Wert 1}.
• Induktionsbasis: Da der Algorithmus stets den ersten Knoten in I(G∗ ) aufnimmt, ist
v0 ∈ I(G). Wenn eine Quelle i den Wert Null hat, wird i wegen der Kante {v0 , i}
nicht in I(G∗ ) aufgenommen. Wenn eine Quelle i den Wert Eins hat, wird i in I(G∗ )
aufgenommen.
197
6. Parallelität
w
nor
]
u
v
Abbildung 6.4.: Nor-Gatter im Induktionsschritt zu Beweis 6.11
• Induktionsschritt: Betrachten wir den Knoten w, der im Schaltkreis einem Nor-Gatter
w =nor(u, v) entspricht. Die Nummer der Knoten u und v ist kleiner als die Nummer
von w und es ist w = ¬(u ∨ v) = 0 ↔ (u = 1) ∨ (v = 1). Nach Induktionsannahme ist u
(bzw. v) genau dann in I(G∗ ), wenn u = 1 (bzw. v = 1) ist. Wegen der Kanten {u, w}
und {v, w} nimmt der Algorithmus genau dann w in die Menge I(G∗ ) auf, wenn das
Gatter w den Wert Eins hat.
Die Menge I(G∗ ) besteht also genau aus dem Knoten v0 und allen Knoten mit Ausgabe Eins.
Für die Senke s des NOR-Schaltkreises S ist
S(x) = 1 ⇐⇒ s ∈ I(G∗ )
und dies war zu zeigen.
6.3. Zusammenfassung
Wir haben Schaltkreise als paralleles Rechnermodell gewählt und die Klasse NC aller parallelisierbaren Sprachen eingeführt. Wir haben gesehen, dass ein enger Zusammenhang zwischen
den Komplexitätsmaßen Tiefe und Speicherplatz besteht. Die Parallel-Computation-Thesis
verallgemeinert diesen Zusammenhang auf alle möglichen Modelle paralleler Rechner und postuliert eine polynomielle Beziehung zwischen der Rechenzeit eines jeden vernünftigen parallelen
Rechnermodells und der Speicherplatzkomplexität der berechneten Sprache.
Wir haben die Parallelisierbarkeit von Problemen untersucht und die im Hinblick auf eine
Parallelisierung schwierigsten Sprachen, die P-vollständigen Sprachen mit Hilfe der LOGSPACEReduktion eingeführt. Wir haben das P-vollständige Circuit-Value Problem kennengelernt, das
als generisches Problem dieselbe Rolle für die P-Vollständigkeit spielt wie das Erfüllbarkeitsproblem KNFSAT für die NP-Vollständigkeit, QBF für PSPACE oder wie D-REACHABILITY für die
NL-Vollständigkeit. Die Lineare Programmierung wie auch die Bestimmung der lexikographisch
ersten maximalen unabhängigen Menge sind weitere P-vollständige Probleme.
198
Teil IV.
Algorithmische Fragestellungen in der
Logik
199
7. Beweissysteme für die Aussagenlogik
Tautologien, oder allgemeingültige Formeln, sind aussagenlogische Formeln, die für alle Belegungen wahr sind. Wie weist man nach, dass eine Formel φ eine Tautologie ist? Das Durchrechnen
aller möglichen Belegungen ist viel zu aufwändig: Bei k Variablen müssen 2k Belegungen
untersucht werden! Stattdessen versuchen wir zu beweisen, dass φ eine Tautologie ist.
Wir benutzen einen sehr weit gefassten Beweisbegriff, der nicht nur für Tautologien, sondern
sogar für allgemeine Sprachen anwendbar ist.
Definition 7.1 (Beweissystem)
Sei Σ ein Alphabet und L eine Sprache. Für eine surjektive Funktion
f : Σ∗ → L
heißt (Σ, f ) ein Beweissystem für L, wenn f in polynomieller Zeit berechenbar ist.
Wenn f (x) = w, dann sagen wir, dass x ein Beweis für w ist. Man beachte, dass nicht gefordert
wird, dass ein Beweis für w in Zeit polynomiell in der Länge von w konstruiert werden kann,
sondern es muss nur effizient feststellbar sein, welches Wort w durch x bewiesen wird. Natürlich
sollten wir zumindest an Beweisen interessiert sein, die eine vernünftige Länge besitzen.
Definition 7.2 (Polynomielle Beweissysteme)
Sei L eine Sprache und (Σ, f ) ein Beweissystem für L.
(a) Dann heißt f durch b : N → N beschränkt, wenn es für jedes Wort w ∈ L einen Beweis
x ∈ Σ∗ gibt mit |x| ≤ b(|w|).
(b) Das Beweissystem (Σ, f ) heißt polynomiell, wenn f durch ein Polynom beschränkt ist.
Welche Sprachen besitzen Beweissysteme polynomieller Länge?
Satz 7.1 Für alle Sprachen L gilt
L ∈ NP ⇐⇒ L besitzt ein polynomielles Beweissystem ({0, 1}, f ).
Beweis: ⇒ Wenn L ∈ NP, dann gibt es eine nichtdeterministische Turingmaschine M , die L in
polynomieller Zeit akzeptiert. Wir können uns vorstellen, dass M zu Beginn der Rechnung ein
„Orakelwort“ x ∈ {0, 1}∗ polynomieller Länge rät und danach deterministisch (in polynomieller
Zeit) rechnet. Sollte M die Eingabe w mit Orakelwort x akzeptieren, dann sagen wir dass x#w
ein Beweis für w ist. Wir setzen f (x#w) := w und erhalten, dass ({0, 1}, f ) ein Beweissystem
polynomieller Länge für L ist.
⇐ Angenommen, (Σ, f ) ist ein Beweissystem polynomieller Länge für L. Für eine Eingabe w
kann man dann einen Beweis x raten und in polynomieller Zeit verifizieren, dass f (x) = w gilt.
Wir haben also einen nichtdeterministischen Algorithmus erhalten, der L in polynomieller Zeit
akzeptiert.
Aufgabe 139
Die Komplexitätsklasse coNP besteht aus den Komplementen Σ∗ \ L für Sprachen L ∈ NP.
201
7. Beweissysteme für die Aussagenlogik
(a) Im Tautologie-Problem ist eine DNF-Formel φ gegeben und es ist zu überprüfen, ob φ allgemeingültig ist.
Zeige: Das Tautologie-Problem ist vollständig für coNP.
(b) Im Problem der Nichterfüllbarkeit ist eine KNF-Formel φ gegeben und es ist zu überprüfen, ob φ nicht
erfüllbar ist. Zeige: Das Problem der Nichterfüllbarkeit ist vollständig für coNP.
(c) Zeige: NP = coNP gilt genau dann, wenn irgendein coNP-vollständiges Problem in NP liegt.
In diesem Kapitel sind wir nur an Beweissystemen für die Sprache T aller Tautologien
interessiert. Es ist nicht zu erwarten, dass T ein Beweissystem polynomieller Länge besitzt:
Satz 7.2
Es gibt ein polynomielles Beweissystem für die Sprache T aller Tautologien ⇐⇒ NP = coNP.
Beweis: Es gibt ein polynomielles Beweissystem für T genau dann, wenn T ∈ NP gilt. Aber
T ∈ NP ist äquivalent zur Gleichheit coNP = NP, denn T ist ein coNP-vollständiges Problem. Die Gleichheit der Klassen NP und coNP erscheint sehr unwahrscheinlich, denn daraus folgt dass
„Raten“ und „Verifizieren“ bis auf einen polynomiellen Unterschied in der Laufzeit äquivalente
Berechnungsarten sind. Es wird also wahrscheinlich keine „kurzen“ Beweise für Tautologien
geben.
7.1. Frege Systeme
Wir betrachten „aussagenlogische“ Beweissysteme, die mit Axiomenschemata und Schlussregeln
arbeiten
Definition 7.3 φ1 (X1 , . . . , Xk ), . . . , φ` (X1 , . . . , Xk ) und ψ(X1 , . . . , Xk ) seien aussagenlogische
Formeln mit den Variablen X1 , . . . , Xk . Man nennt
S :=
φ1 (X1 , . . . , Xk ), . . . , φ` (X1 , . . . , Xk )
ψ(X1 , . . . , Xk )
eine Schlussregel, falls
φ1 ∧ · · · ∧ φ` |= ψ
(7.1)
gilt, d.h. falls jede Belegung, die φ1 ∧ · · · ∧ φ` erfüllt, auch ψ erfüllt. Für alle aussagenlogischen
Formeln α1 , . . . , αk wird
φ1 (α1 , . . . , αk ), . . . , φ` (α1 , . . . , αk )
ψ(α1 , . . . , αk )
als ein aus S abgeleiteter Schluss bezeichnet.
Wenn ` = 0, dann heißt
S :=
ψ(X1 , . . . , Xk )
ein Axiomenschema und ψ(α1 , . . . , αk ) wird ein (abgeleitetes) Axiom genannt. Beachte,
dass ψ(X1 , . . . , Xk ) eine Tautologie sein muss.
202
7.1. Frege Systeme
Bemerkung 7.1 (a) Auch ein abgeleiteter Schluss ist eine semantische Folgerung. Warum?
Ist χ(X1 , . . . , Xk ) eine allgemeingültige Formel, dann ist auch χ(α1 , . . . , αk ) allgemeingültig:
Eine Formel bleibt allgemeingültig, wenn jede ihrer Variablen durch eine beliebige Formel
ersetzt wird. (Dieses Ergebnis ist als „Substitutionslemma für die Aussagenlogik“ bekannt.)
(b) Sei Φ eine beliebige Menge von aussagenlogischen Formeln. Haben wir zum Beispiel bereits
die semantischen Folgerungen
Φ |= φ1 (α1 , . . . , αk ), . . . , Φ |= φ` (α1 , . . . , αk )
gezeigt, dann folgt auch Φ |= ψ(α1 , . . . , αk ) durch den aus
S :=
φ1 (X1 , . . . , Xk ), . . . , φ` (X1 , . . . , Xk )
ψ(X1 , . . . , Xk )
abgeleiteten Schluss. Schlussregeln bewahren semantische Folgerungen.
Beispiel 7.1 (Der Modus Ponens). Die Schlussregel S des Modus Ponens hat die Form
S :=
X1 , X1 → X2
X2
Diese Schlussregel ist eine semantische Folgerung, denn es gilt
X1 ∧ (X1 → X2 ) |= X2 .
Für alle aussagenlogischen Formeln α1 , α2 kann man somit α2 aus α1 und α1 → α2 folgern.
Beispiel 7.2 (Der Modus Tollens). Die Schlussregel S des Modus Tollens hat die Form
S :=
Es gilt
¬X2 , X1 → X2
¬X1
¬X2 ∧ (X1 → X2 ) |= ¬X1
und S ist eine Schlussregel. Wir können somit für alle aussagenlogischen Formeln α1 , α2 die
Formel ¬α1 aus ¬α2 und α1 → α2 folgern.
Der Modus Tollens ist ein „Zwilling“ des Modus Ponens. Warum? Es ist (α1 → α2 ) ≡ (¬α2 →
¬α1 ). Wendet man den Modus Ponens auf ¬α2 und ¬α2 → ¬α1 an, erhält man den „Schluss“
¬α1 und damit den Modus Tollens.
Ende von Beispiel 7.2
Ein aussagenlogisches Beweissystem ist ein sehr spezielles Beweissystem für die Menge T aller
Tautologien. Ein solches Beweissystem ist aus Schlussregeln und Axiomenschemata aufgebaut.
Definition 7.4 (Aussagenlogische Beweissysteme)
(a) Ein aussagenlogisches Beweissystem B besteht aus einer Menge von Schlussregeln,
bzw. Axiomenschemata.
203
7. Beweissysteme für die Aussagenlogik
(b) Sei Φ eine Menge aussagenlogischer Formeln, die wir Hypothesen nennen. Für eine Formel
φ wird
Ableitbarkeit von φ aus Φ in B (kurz Φ `B α)
rekursiv wie folgt definiert.
Basisregeln:
• Alle Axiome, also alle aus einem Axiomenschemata in B abgeleiteten Formeln χ ∈ A∗ ,
sind aus Φ in B ableitbar, es gilt also Φ `B χ.
• Alle Hypothesen χ ∈ Φ sind aus Φ in B ableitbar, es gilt also Φ `B χ.
Rekursive Regeln:
• Wenn Φ `B χi für i = 1, . . . , ` gilt und wenn
χ1 , . . . , χ `
χ
ein aus einer Schlussregel S ∈ B abgeleiteter Schluss ist, dann gilt Φ `B χ. Wir
sagen, dass χ mit Hilfe von S folgt.
(c) Um eine Ableitung Φ `B χ nachzuweisen, gibt man einen Beweis an, der aus einem Tupel
(χ1 , χ2 , . . . , χi , . . . , χn ) von aussagenlogischen Formeln besteht. Es muss gelten
(a) χn ist die Zielformel, d.h. es gilt χn = χ.
(b) Für jedes i mit 1 ≤ i ≤ n ist
• χi ein Axiom, d.h. χi ist aus einem Axiomenschemata in B ableitbar oder
• χi ist eine Hypothese, d.h. χi gehört zur Formelmenge Φ oder
• es gibt 1 ≤ i1 < · · · < i` < i und χi folgt aus χi1 , . . . , χi` mit Hilfe einer
Schlussregel in B.
Wir zeigen, dass syntaktische Ableitbarkeit die semantische Folgerung bedingt.
Satz 7.3 (Soundness)
Sei B ein aussagenlogisches Beweissystem. Wenn Φ `B χ für eine aussagenlogische Formel χ
und eine beliebige Menge Φ aussagenlogischer Formeln gilt, dann gilt auch Φ |= χ
Als Konsequenz des Satzes sagt man, dass aussagenlogische Beweissysteme korrekt sind (engl.:
sound), da nur semantische Folgerungen ableitbar sind.
Beweis: Man zeigt die Behauptung durch eine vollständige Induktion über die Länge eines
Beweises (χ1 , . . . , χn ) für χ.
Für den Induktionsanfang, also für Beweislänge n = 1 muss χ = χ1 gelten. Dann ist χ ein
Axiom oder eine Hypothese aus Φ. Axiome müssen aber allgemeingültig sein und für jede
Formelmenge Φ ist eine allgemeingültige Formel χ stets eine semantische Folgerung von Φ.
Natürlich sind alle Hypothesen χ ∈ Φ ebenfalls semantische Folgerungen von Φ.
Jetzt zum Induktionsschritt von n auf n + 1. Sei (χ1 , . . . , χn+1 ) ein Beweis für χ = χn+1 . Nach
Induktionsannahme dürfen wir annehmen, dass Φ |= χi für i = 1, . . . , n gilt. Klar, wenn χn+1
eine Axiom ist oder zu Φ gehört, dann folgt Φ |= χn+1 . Nehmen wir deshalb an, dass χn+1
mit Hilfe einer Schlussregel S ∈ B mit
S=
204
φ1 (X1 , . . . , Xk ), . . . , φ` (X1 , . . . , Xk )
ψ(X1 , . . . , Xk )
7.1. Frege Systeme
folgt, wobei
χi1 = φ1 (α1 , . . . , αk ), . . . , χi` = φ` (α1 , . . . , αk )
gilt. Es ist also
χn+1 = ψ(α1 , . . . , αk ).
Aber für i = 1, . . . , ` gilt Φ `B χij , und damit nach Induktionsannahme auch Φ |= χij . Also
folgt Φ |= χn+1 , denn nach Bemerkung 7.1 bewahren Schlussregeln semantische Folgerungen.
Von besonderem Interesse sind aussagenlogische Beweissysteme, die alle Tautologien ableiten
können. Statt eine Formel φ(X1 , . . . Xk ) durch alle 2k möglichen Belegungen auswerten zu
müssen, können wir hoffen einen kurzen Beweis ∅ `B φ bestimmen zu können.
Definition 7.5 (Frege Systeme)
(a) Ein aussagenlogisches Beweissystem B heißt vollständig, wenn für alle endlichen Mengen
Φ aussagenlogischer Formeln und für jede aussagenlogische Formel ψ gilt
Φ ` ψ ⇐⇒ Φ |= ψ.
(b) Ein vollständiges aussagenlogisches Beweissystem B heißt eine Frege System, wenn B
nur aus endlich vielen Schlussregeln und Axiomenschemata besteht.
Wir zeigen im nächsten Abschnitt, dass das Beweissystem des Modus Ponens ein Frege System
ist. Können sich Frege Systeme im Hinblick auf die Beweislänge für bestimmte Tautologien
dramatisch unterscheiden? Um diese Frage zu beantworten führen wir den Begriff der pSimulation für die allgemeinen Beweissysteme aus Definition 7.1 ein.
Definition 7.6 (p-Simulation)
Seien (Σ1 , f1 ) und (Σ2 , f2 ) Beweissysteme für eine Sprache L.
(a) Wir sagen, dass (Σ2 , f2 ) das Beweissystem (Σ1 , f1 ) p-simuliert (kurz: (Σ1 , f1 ) ≤p (Σ2 , f2 ))
genau dann, wenn es ein Polynom q(x) gibt, so dass für alle Worte w ∈ L gilt:
Wenn f1 (x) = w, dann gibt es einen Beweis y ∈ Σ∗2 mit f2 (y) = w und |y| ≤ q(|x|).
(b) (Σ1 , f1 ) und (Σ2 , f2 ) sind p-äquivalent, wenn (Σ1 , f1 ) ≤p (Σ2 , f2 ) und (Σ2 , f2 ) ≤p (Σ1 , f1 )
gilt.
Erstaunlicherweise unterscheiden sich für zwei Frege Systeme die Beweislängen auf allen
Tautologien nur um konstante Faktoren! Zum Nachweis dieses Ergebnisses brauchen wir die
folgende Vorbereitung.
Lemma 7.1 (Einmalige Ersetzung)
Sei B ein aussagenlogisches Beweissystem und es gelte
Φ(X1 , . . . , Xk ) `B φ(X1 , . . . , Xk )
für eine Menge Φ aussagenlogischer Formeln und eine aussagenlogische Formel φ mit den
Variablen X1 , . . . , Xk . Dann gilt auch
Φ(α1 , . . . , αk ) `B φ(α1 , . . . , αk )
für alle aussagenlogischen Formeln α1 , . . . , αk . Außerdem gibt es zu jedem Beweis für φ(X1 , . . . , Xk )
aus Φ einen Beweis gleicher Länge für φ(α1 , . . . , αk ) aus Φ(α1 , . . . , αk ).
205
7. Beweissysteme für die Aussagenlogik
Aufgabe 140
(a) Zeige Lemma 7.1.
(b) Wie stark wächst die Länge eines Beweises ohne Ersetzungen im schlimmsten Fall an, wenn ein Beweis mit
k Ersetzungen vorgegeben ist?
Satz 7.4 Je zwei Frege Systeme sind p-äquivalent. Es gilt sogar, dass sich die Längen kürzester
Beweise in den beiden Frege Systemen höchstens um einen konstanten Faktor unterscheiden.
Beweis: Seien B1 und B2 zwei Frege Systeme. Es genügt zu zeigen, dass B1 durch B2
p-simuliert werden kann. Sei dazu S ∈ B1 eine Schlussregel mit
S=
φ1 (X1 , . . . , Xk ), . . . , φ` (X1 , . . . , Xk )
ψ(X1 , . . . , Xk ).
Dann gilt {φ1 , . . . , φ` } `B1 ψ und deshalb folgt {φ1 , . . . , φ` } |=B1 ψ. Aber B2 ist ein Frege
System und deshalb gilt {φ1 , . . . , φ` } `B2 ψ mit einem Beweis der Länge NS .
Seien α1 , . . . , αk beliebige aussagenlogische Formeln. Nach Lemma 7.1 gibt es dann einen
Beweis {φ1 (α1 , . . . , αk ), . . . , φ` (α1 , . . . , αk )} `B2 ψ(α1 , . . . , αk ) mit einem Beweis der Länge
ebenfalls NS .
Sei N = max{NS : S ∈ B}. Es gibt somit zu jedem Beweis Φ `B1 φ einen Beweis Φ `B2 φ,
der in Länge höchstens um den Faktor N anwächst.
Definition 7.7 (Graphenstruktur von Beweisen)
Sei χ = (χ1 , χ2 , . . . , χj , . . . , χi , . . . , χn ) ein Beweis in einem aussagenlogischen Beweissystem
B.
(a) χ definiert den gerichteten Graphen G(χ) = (V, E) mit V := {χi : 1 ≤ i ≤ n}. Eine Kante
(χj , χi ) wird genau dann eingesetzt, wenn χi durch eine Schlussregel abgeleitet wird und
wenn χj in dieser Schlussregel auftaucht.
(b) Der Beweis χ hat Baumstruktur genau dann wenn G(χ) ein Baum ist.
Aufgabe 141
Sei φ eine aussagenlogische Formel.
Zeige, dass es zu jedem Beweis für φ in einem aussagenlogischen Beweissystem einen Beweis für φ mit
Baumstruktur gibt.
Bemerkung 7.2 Die obige Aufgabe zeigt, dass es zu jedem Beweis einer Formel ψ einen
Beweis mit Baumstruktur gibt. Aber die Gefahr besteht natürlich, dass der neue Beweis
erheblich an Länge zunimmt.
Erstaunlicherweise kann gezeigt werden, dass es zu jedem Beweis in einem Frege System einen
Beweis mit Baumstruktur gibt, dessen Länge proportional zum ursprünglichen Beweis ist.
206
7.1. Frege Systeme
7.1.1. Beweissysteme mit Definitionen, bzw. Ersetzung
Beweise sollten an Kraft gewinnen, wenn neue Konzepte definiert werden können und über
diese Konzepte argumentiert werden kann. Wir betrachten deshalb erweiterte Beweissysteme,
die zusätzlich Definitionen erlauben.
Definition 7.8 (Beweissysteme mit Definitionen)
Sei B ein aussagenlogisches Beweissystem. Dann heißt D(B) die Definitionserweiterung von
B, wenn D(B) genau aus den Schlussregeln von B besteht und zusätzlich Definitionen zulässt.
Insbesondere ist ein Tupel (χ1 , χ2 , . . . , χi , . . . , χn ) aussagenlogischer Formeln genau dann ein
Beweis von Φ `D(B) χn in D(B), wenn für jedes i mit 1 ≤ i ≤ n gilt
• χi ist ein Axiom oder
• χi ist eine Hypothese, d.h. χi gehört zu Φ oder
• es gibt 1 ≤ i1 < · · · < i` < i und χi folgt aus χi1 , . . . , χi` mit Hilfe einer Schlussregel in
B oder
• χi ist eine Definition, d.h. es gibt j mit j < i und χi = X ↔ χj , wobei die Variable X
weder in einer der Formeln χ1 , . . . , χi−1 noch in der Zielformel χn auftaucht.
Es bietet sich auch an, Beweise zuzulassen, die Variablen durch beliebige aussagenlogische
Formeln ersetzen dürfen.
Definition 7.9 (Beweissysteme mit Ersetzung)
Sei B ein aussagenlogisches Beweissystem. Dann heißt E(B) die Ersetzungserweiterung von
B, wenn E(B) genau aus den Schlussregeln von B besteht und zusätzlich Ersetzungen zulässt.
Insbesondere ist ein Tupel (χ1 , χ2 , . . . , χi , . . . , χn ) aussagenlogischer Formeln genau dann ein
Beweis von Φ `D(B) χn in E(B), wenn für jedes i mit 1 ≤ i ≤ n gilt
• χi ist ein Axiom oder
• χi ist eine Hypothese, d.h. χi gehört zu Φ oder
• es gibt 1 ≤ i1 < · · · < i` < i und χi folgt aus χi1 , . . . , χi` mit Hilfe einer Schlussregel in
B oder
• χi folgt durch eine Ersetzung, d.h. es gibt j mit j < i und χi = χj (α1 , . . . , αk ), wobei
χj unter anderen von den Variablen X1 , . . . , Xk abhängt und die Variable Xs durch die
aussagenlogische Formel αs ersetzt wird.
Man beachte, dass weder Beweissysteme mit Definitionen noch Beweissysteme mit Ersetzung
aussagenlogische Beweissysteme sind, da nicht ausschließlich nur Schlussregeln erlaubt sind.
Man beachte aber, dass es sich in beiden Fällen um Beweissysteme im Sinne von Definition 7.1
handelt. Es ist also nicht zu erwarten, dass es für alle Tautologien Beweise (mit Definitionen,
bzw. mit Ersetzung) polynomieller Länge gibt.
Satz 7.5 Frege Systeme mit Definitionen und Frege Systeme mit Ersetzung sind p-äquivalent.
Beweislänger unterscheiden sich um höchstens einen konstanten Faktor.
Wir zeigen nur, dass ein Frege System mit Ersetzung jedes Frege System mit Definitionen
p-simulieren kann. Dazu benötigen wir die folgende Vorbereitung.
207
7. Beweissysteme für die Aussagenlogik
Lemma 7.2 (Deduktionslemma)
Sei B ein Frege System. φ und ψ seien aussagenlogische Formeln, Φ sei eine Menge aussagenlogischer Formeln. Wenn es einen Beweis
Φ ∪ {φ} `B ψ
der Länge N gibt, dann gibt es einen Beweis
Φ `B φ → ψ
der Länge proportional zu N .
Beweis: Wir definieren ein neues aussagenlogisches Beweissystem B∗ . Dazu ersetze jede
Schlussregel
φ1 , . . . , φ `
ψ
von B durch die Schlussregel
φ → φ1 , . . . , φ → φ`
φ → ψ.
Weiterhin fügen wir das Axiomenschema
X→X
zu B∗ hinzu. Sei nun (χ1 , . . . , χn ) ein Beweis von Φ ∪ {φ} `B ψ in B. Wir beginnen einen
Beweis in B∗ mit dem Axiom φ → φ und übersetzen den B-Beweis dann Schritt für Schritt
in den entsprechenden B∗ -Beweis: Wir erhalten den B∗ -Beweis (φ → φ, χ∗1 , . . . , χ∗n ) mit
χ∗i := φ → χi . Beachte, dass χ∗n = φ → ψ gilt, und wir haben einen Beweis von Φ `B∗ φ → ψ
der Länge n + 2 erhalten.
Mit Satz 7.4 kann B das System B∗ p-simulieren. Aber dann gibt es einen Beweis Φ `B φ → ψ
der Länge O(n).
Lemma 7.3 Ein Frege System mit Definitionen kann durch ein Frege System mit Ersetzungen
p-simuliert werden.
Beweis: Sei B ein Frege System, das unter anderen die Schlussregel
(X ↔ X) → Y
Y
besitze. Wenn B diese Schlussregel nicht besitzt, dann können wir sie zu B hinzufügen: Die
Länge eines jeden Beweises wird sich mit Satz 7.4 höchstens um einen konstanten Faktor
ändern.
Sei (χ1 , . . . , χn ) ein Beweis von Φ `D(B) ψ in D(B). Wenn wir jede Definition X ↔ β als eine
Hypothese auffassen, erhalten wir einen „konventionellen“ Beweis Φ∗ `B ψ in B.
Seien Xi ↔ βi für 1 ≤ i ≤ k alle Definitionen im Beweis von ψ. Wenn wir Lemma 7.2
wiederholt anwenden, erhalten wir aus Φ∗ `B ψ den Beweis
Φ `B (X1 ↔ β1 ) → · · · → ((Xk ↔ βk ) → ψ) · · · )
in B. Führe diesen Beweis in E(B) aus und ersetze dann jedes Xi durch βi . Danach können
wir die Äquivalenzen βi ↔ βi mit der Schlussregel
208
7.1. Frege Systeme
(X ↔ X) → Y
Y
wieder entfernen und erhalten den Beweis Φ `E(B) ψ in E(B), dessen Länge höchstens um
einen konstanten Faktor zugenommen hat.
7.1.2. Der Modus Ponens
Wir beschreiben das Beweissystem ABS := (AABS , SABS )1 . Dazu beachte zuerst, dass sich
durch Implikation und Negation alle anderen Junktoren ∧, ∨, ↔, ⊕ ausdrücken lassen: Zum
Beispiel gilt (A ∨ B) ≡ (¬A → B) und (A ∧ B) ≡ ¬(A → ¬B). Wir beschränken uns deshalb
in der Beschreibung von ABS auf Formeln, die nur aus den Junktoren ¬ und → aufgebaut
sind.
Definition 7.10 AL({¬, →}) ist die Menge der aussagenlogischen Formeln, die nur aus den
Junktoren ¬ und → aufgebaut sind.
• Die Menge AABS besitzt genau drei Axiomenschemata, nämlich für alle aussagenlogischen
Formeln φ, χ, ψ ∈ AL({¬, →}) die folgenden drei Klassen von Formeln:
(1) φ → (ψ → φ) ∈ AABS ,
(2) (φ → (µ → ψ)) → ((φ → µ) → (φ → ψ)) ∈ AABS ,
(3) (¬φ → ¬ψ) → (ψ → φ) ∈ AABS .
• Die Schlussregel SABS
SABS :=
X, X → Y
Y
ist der Modus Ponens: Wenn φ und φ → ψ bereits aus Φ abgeleitet wurden, wenn also
Φ `ABS φ und Φ `ABS (φ → ψ) gilt, dann ist auch ψ aus Φ ableitbar, d.h. Φ `ABS ψ
folgt durch Anwendung des Modus Ponens.
Man überzeuge sich, dass alle Axiome in ABS allgemeingültig sind. Der Modus Ponens ist
eine Schlussregel und damit ist ABS ein Beweissystem.
Beispiel 7.3 Wir zeigen die Ableitung
{φ → ψ, ψ → χ} `ABS (φ → χ).
Diese Eigenschaft wird auch als „Transitivität der Implikation“ bezeichnet.
Hier sind die einzelnen Ableitungsschritte. Setze Φ := {φ → ψ, ψ → χ}.
1. Für χ1 := (ψ → χ) gilt Φ `ABS χ1 , denn ψ → χ ∈ Φ.
2. χ2 := ((ψ → χ) → (φ → (ψ → χ))) ist eine Formel des Axiomentyps (1) und ist deshalb
ableitbar.
3. Wenn der Modus Ponens auf χ1 und χ2 angewandt wird, erhalten wir die Ableitbarkeit
von φ3 := (φ → (ψ → χ)).
4. χ4 := ((φ → (ψ → χ)) → ((φ → ψ) → (φ → χ))) ist als Axiom vom Typ 2 ableitbar.
1
ABS ist eine Abkürzung für automatisches Beweissystem.
209
7. Beweissysteme für die Aussagenlogik
5. Diesmal wenden wir den Modus Ponens auf χ3 und χ4 an und können χ5 := ((φ → ψ) →
(φ → χ)) ableiten.
6. Und jetzt ist klar wie es weitergeht. Die Formel χ6 := φ → ψ ist ableitbar, denn φ → ψ ∈ Φ.
7. Die Zielformel χ7 := (φ → χ) ist ableitbar, wenn der Modus Ponens auf χ5 und χ6 angewandt
wird.
Einen sehr viel kürzeren Beweis der Transitivität lernen wir in Beispiel 7.4 kennen. Dort
studieren wir „Resolutionsbeweise“.
Ende von Beispiel 7.3
Aufgabe 142
Im folgenden werden aussagenlogische Formeln behandelt, die nur die Junktoren → und ¬ besitzen.
(a) Sei Φ eine Menge aussagenlogischer Formeln und φ eine aussagenlogische Formel. Wenn Φ `ABS φ, dann
gibt es eine endliche Teilmenge Φ∗ ⊆ Φ mit Φ∗ `ABS φ.
(b) Transitivität der Beweisbarkeit: Φ, Ψ seien Mengen von aussagenlogischen Formeln und χ sei eine
aussagenlogische Formel. Zeigen Sie: Wenn Φ `ABS Ψ und Ψ `ABS φ, dann folgt Φ `ABS φ.
(c) Das Deduktionslemma: Φ sei eine Menge von aussagenlogischen Formeln und φ, χ seien aussagenlogische Formeln. Zeigen Sie: Wenn Φ ∪ {φ} `ABS ψ, dann Φ `ABS φ → ψ.
Hinweis: Sei (χ1 , . . . , χn ) (mit χn = ψ) ein Beweis von ψ aus Φ ∪ {φ}. Benutzen Sie eine Induktion über
i, um Φ `ABS φ → χi für alle i (1 ≤ i ≤ n) zu zeigen.
Aufgabe 143
Sei Φ ⊆ AL({¬, →}) eine Formelmenge. Zeige, dass die folgenden „Regeln“ für aussagenlogische Formeln
φ, ψ ∈ AL({¬, →}) in ABS ableitbar sind:
(a) `ABS φ → φ,
(b) ¬φ `ABS φ → ψ,
(c) ¬¬φ `ABS φ,
(d) (¬φ → φ) `ABS φ,
(e) die Widerspruchsregel: {φ → ψ, φ → ¬ψ} `ABS ¬φ.
Jetzt lässt sich der Vollständigkeitssatz als zentrales Ergebnis dieses Abschnitts formulieren: Wahrheit (nämlich die semantische Folgerung) und Ableitbarkeit (nämlich Beweise im
Beweissystem ABS) stimmen überein.
Satz 7.6 (Vollständigkeitssatz).
(a) Die Formelmenge Φ ⊆ AL({¬, →}) und die Formel χ ∈ AL({¬, →}) seien gegeben. Dann
gilt
Φ |= χ ⇐⇒ Φ `ABS χ
für das Beweissystem ABS.
(b) Das Beweissystem ABS ist ein Frege System.
Wir erhalten aus dem Vollständigkeitssatz für Φ = ∅, dass χ genau dann allgemeingültig ist,
wenn χ aus den Axiomen in AABS mit Hilfe der Schlussregel des Modus Ponens ableitbar ist.
Beweis: Der Teil (a) ist eine unmittelbare Konsequenz von Teil (a). Die Richtung ⇐= in Teil
(a) wird in Satz 7.3 gezeigt. Wir müssen die Richtung =⇒ nachweisen.
210
7.1. Frege Systeme
Beweis des Vollständigkeitssatzes: Wenn Φ |= χ, dann Φ `ABS χ
Definition 7.11 Sei Φ ⊆ AL({¬, →}) eine Formelmenge.
(a) Φ heißt widerspruchsvoll (bzgl. ABS), wenn es eine Formel ψ ∈ AL({¬, →}) gibt mit
Φ `ABS ψ und Φ `ABS ¬ψ.
Gibt es eine solche Formel ψ nicht, dann heißt Φ widerspruchsfrei (bzgl. ABS).
(b) Φ heißt maximal widerspruchsfrei, wenn Φ widerspruchsfrei ist und wenn ψ ∈ Φ oder
¬ψ ∈ Φ für alle Formeln ψ ∈ AL({¬, →}) gilt.
(c) Φ heißt widersprüchlich, falls es keine Belegung gibt, die alle Formeln in Ψ erfüllt.
Das folgende Lemma ist der wesentliche Schritt im Beweis (der „kritischen“ Richtung) des
Vollständigkeitssatzes.
Lemma 7.4 Die Formelmenge Φ ⊆ AL({¬, →}) sei widerspruchsfrei. Weiterhin sei ψ ∈
AL({¬, →}) gegeben.
(a) Dann ist Φ ∪ {ψ} oder Φ ∪ {¬ψ} widerspruchsfrei.
(b) Zu jeder widerspruchsfreien Formelmenge Φ ⊆ AL({¬, →}) gibt es eine maximal widerspruchsfreie Formelmenge Φ∗ mit Φ ⊆ Φ∗ .
Beweis (a): Angenommen sowohl Φ ∪ {ψ} wie auch Φ ∪ {¬ψ} sind widerspruchsvoll.
Aufgabe 144
Die Formelmenge Ψ ⊆ AL({¬, →}) sei widerspruchsvoll.
(a) Dann gilt
für jede Formel ψ ∈ AL({¬, →}).
Ψ `ABS ψ
(b) Es gibt eine endliche Teilmenge von Ψ, die widersprüchlich ist.
Da Φ∪{ψ} nach Annahme widerspruchsvoll ist, folgt aus Teil (a) der Aufgabe, dass Φ∪{ψ} `ABS
¬ψ gilt. Mit dem Deduktionslemma erhalten wir deshalb
Φ `ABS ψ → ¬ψ.
Ebenfalls nach Annahme ist Φ∪{¬ψ} widerspruchsvoll. Wir erhalten Φ∪{¬ψ} `ABS ψ aus Teil
(a) der obigen Aufgabe und mit dem Deduktionslemma Φ∪ `ABS ¬ψ → ψ. Ebenfalls in einer
Übungsaufgabe haben wir (¬ψ → ψ) `ABS ψ abgeleitet. Aus der Transitivität der Implikation
folgt Φ `ABS ψ. Schließlich wenden wir den Modus Ponens auf ψ und ψ → ¬ψ an und erhalten
Φ `ABS ¬ψ. Wir haben einen Widerspruch erhalten, da Φ doch nicht widerspruchsfrei ist. Also
folgt die Behauptung.
Aufgabe 145
Zeige Lemma 7.4 (b).
Hinweis: Benutze Teil (a) und beachte, dass es für jede widerspruchsvolle Formelmenge Φ eine endliche Teilmenge
gibt, die widerspruchsvoll ist.
Wir kehren zum Beweis des Vollständigkeitssatzes zurück und können annehmen, dass Φ |= χ
gilt. Wir müssen Φ `ABS χ zeigen.
211
7. Beweissysteme für die Aussagenlogik
Aus Φ |= χ folgt, dass Φ∪{¬χ} keine erfüllende Belegung besitzt. Dann „sollte“ Φ∪{¬χ} widerspruchvoll sein. Aber gerade dieser Nachweis ist der zentrale Schritt des Arguments, denn wir
stellen fest, dass eine semantische Eigenschaft durch den anscheinend schwächeren Ableitungsbegriff ausgedrückt werden kann. Angenommen, Φ∪{¬χ} ist tatsächlich widerspruchsfrei. Dann
können wir Lemma 7.4 anwenden und erhalten eine maximal widerspruchsfreie Obermenge Φ∗
von Φ ∪ {¬χ}.
Wir definieren eine Belegung B∗ . Für jede Variable V gilt entweder V ∈ Φ∗ (und wir setzen
B∗ (V ) := 1) oder V 6∈ Φ∗ (und wir setzen B∗ (V ) := 0).
Aufgabe 146
Zeige, dass B∗ alle Formeln in Φ∗ erfüllt.
Hinweis: Benutze eine vollständige Induktion über den Aufbau von Formeln.
Wenn B∗ alle Formeln in Φ∗ erfüllt, dann natürlich auch alle Formeln in Φ ∪ {¬χ}, und wir
haben den gewünschten Widerspruch erhalten. Also ist Φ ∪ {¬χ} widerspruchsvoll und wir
können jede Formel aus Φ ∪ {¬χ} folgern. Es gilt also insbesondere
Φ ∪ {¬χ} `ABS χ.
Mit dem Deduktionslemma folgt
Φ `ABS (¬χ → χ).
In einer Übungsaufgabe haben wir (¬ψ → ψ) `ABS ψ abgeleitet. Mit der Transitivität der
Implikation folgt Φ `ABS χ.
Sei Φ eine möglicherweise unendlich große Menge von Formeln. Wir wissen bereits, dass Φ
eine endliche widerspruchsvolle Teilmenge besitzt, wenn Φ widerspruchsvoll ist. Was passiert,
wenn Φ widersprüchlich ist, wenn Φ also keine Belegung besitzt, die alle Formeln in Φ erfüllt?
Satz 7.7 Kompaktheitssatz
Sei Φ eine widersprüchliche Menge von Formeln. Dann gibt es eine endliche Teilmenge Φ0 ⊆ Φ,
die widersprüchlich ist.
Aufgabe 147
Zeige Satz 7.7.
Hinweis: Wende den Vollständigkeitssatz an.
Frage: Um nachzuprüfen, ob Φ |= φ gilt, genügt es doch Wahrheitstafeln anzuwenden, oder?
Warum beschäftigt man sich dann mit Beweissystemen?
Ja richtig, aber die Methode der Wahrheitstafel ist bei Formeln mit vielen Variablen aufgrund
der Größe der Wahrheitstafel nicht mehr automatisch durchführbar. Diese Aussage gilt selbst
dann, wenn die Formel φ in der zu zeigenden Folgerung Φ |= φ eine „einfache Konsequenz“
von Φ ist und die Frage der Ableitbarkeit Φ `ABS φ vielleicht einfacher zu beantworten ist.
Leider kann aber auch die Frage, ob Φ `ABS φ gilt, im Allgemeinen für Formeln bei vielen
Variablen nur mit sehr zeitaufwändigen Methoden beantwortet werden. Wir greifen aber die
Frage der Ableitbarkeit in Abschnitt 7.2 wieder auf und werden mit der Resolution eine „in der
Praxis“ für Formeln in konjunktiver Normalform häufig erfolgreiche Methode kennenlernen.
212
7.2. Resolution
7.2. Resolution
Definition 7.12 (KNF-Erfüllbarkeitsproblem).
Im KNF-Erfüllbarkeitsproblem (kurz: KNF-SAT für die englische Beschreibung Satisfiability)
ist für eine KNF-Formel φ, also für eine aussagenlogische Formel in konjunktiver Normalform
zu entscheiden, ob φ erfüllbar ist.
In der „Theoretischen Informatik 1“ wird gezeigt
Satz 7.8 (Satz von Cook).
KNF-SAT ist NP-vollständig.
Eine präzise Definition des Begriffs „NP-vollständig“ wird in der Veranstaltung „Theoretische
Informatik 1“ gegeben. Grob gesagt bedeutet die NP-Vollständigkeit von KNF-SAT, dass es
vermutlich kein effizientes Verfahren gibt, das KNF-SAT für alle Eingabeformeln löst. :-((
Ein Verfahren wird effizient genannt, wenn seine Laufzeit nur moderat mit der Länge
der Formel wächst. Genauer: Die Laufzeit muss polynomiell in der Eingabelänge
sein!
Diese schlechten Nachrichten beschreiben, was wir zu erwarten haben: Im schlimmsten Fall
wird unser Verfahren versagen, da es zu viel Zeit benötigt, im besten Fall haben wir Erfolg und
können Erfüllbarkeit bzw. Widersprüchlichkeit nachweisen. Wir möchten Methoden entwickeln,
die in vielen wichtigen Fällen Erfolg haben und wenden die Methode der Beweissysteme an.
Eine erste wichtige Frage ist die für den Beweis der Widersprüchlichkeit von KNFs benötigte
Beweislänge. In Satz 7.2 haben wir beobachtet, dass es ein Beweissystem mit polynomieller
Beweislänge für alle Tautologien genau dann gibt, wenn NP = coNP. Deshalb ist nicht davon
auszugehen, dass es Frege Systeme, ob mit oder ohne Definitionen oder ob mit oder ohne
Ersetzung gibt, die polynomielle Beweislänge für Tautologien garantieren. Aber wie sieht es
mit polynomiell langen Beweisen für die Widersprüchlichkeit von KNF-Formeln aus? Wir
müssen uns ja nicht mit allen möglichen aussagenlogischen Formeln herumplagen, sondern nur
mit KNFs.
Satz 7.9 Es ist NP = coNP genau dann, wenn es ein Beweissystem gibt, so dass jede unerfüllbare KNF φ in polynomieller Länge in φ beweisbar ist.
Aufgabe 148
Zeige die Behauptung des Satzes.
Also ist es sehr wahrscheinlich, dass die Beweislänge für unser Verfahren im schlimmsten
Fall super-polynomiell ist. Aber das Problem der Widersprüchlichkeit von KNFs hat so viele
wichtige Anwendungen, dass wir ein Verfahren entwickeln möchten, dass „in der Praxis“ häufig
erfolgreich ist.
Bemerkung 7.3 Im Problem des Model Checking ist zu überprüfen, ob eine Implementierung für jede Instanz eine vorgebene Spezifikation einhält. Wir nehmen an, dass es möglich ist
Implementierung und Spezifikation effizient auszuwerten. Unter dieser Annahme können wir
einen effizienten Algorithmus A bauen, der eine Instanz x genau dann akzeptiert, wenn sich
Implementierung und Spezifikation unterscheiden:
Die Implementierung hält die Spezifikation immer ein ⇐⇒ L(A) = ∅.
213
7. Beweissysteme für die Aussagenlogik
Sind wir nur an Instanzen x ∈ {0, 1}n interessiert, dann reduziert sich das Problem des Model
Checking auf das KNF-Erfüllbarkeitsproblem. Dazu baut man eine KNF φ, so dass
φ(x) ist wahr ⇐⇒ A akzeptiert x.
Also hält die Implementierung die Spezifikation genau dann für alle Eingaben x ∈ {0, 1}n ein,
wenn φ nicht erfüllbar ist.
Trotz der NP-Vollständigkeit lösen die besten der so genannten SAT-Solver das KNF-Erfüllbarkeitsproblem für viele Eingabe-Formeln erstaunlich schnell. SAT-Solver basieren auf dem
Beweisverfahren der Resolution, einem gegenüber dem Beweissystem ABS stark eingeschränktem Beweissystem, das nur auf Disjunktionsterme anwendbar ist und deshalb ungleich einfacher
als ABS zu handhaben ist.
In diesem Abschnitt stellen wir einen Disjunktionsterm2 D = `1 ∨ · · · ∨ `m als die Menge
{`1 , . . . , `m } seiner Literale dar. Den leeren Disjunktionsterm bezeichnen wir mit .
Definition 7.13 (Resolution).
(a) Sei X eine Variable, α0 , β 0 seinen Disjunktionsterme mit α0 = α ∪ {X} und β 0 = β ∪ {¬X}.
Dann besagt die Resolutionsregel, dass der Disjunktionsterm α ∨ β abgeleitet werden
darf. Man schreibt auch kurz
α ∪ {X}, β ∪ {¬X}
α∪β
Wir sagen auch, dass α ∪ β eine Anwendung der Resolutionsregel zu X ist. (Beachte, dass
{ α ∪ {X}, β ∪ {¬X} } |= α ∪ β gilt, die Resolutionsregel erlaubt also nur die Ableitung
von semantischen Folgerungen.)
(b) Die Resolutionsregel ist die einzige Schlussregel des Beweissystems R.
(c) Für eine Menge Φ von Disjunktionstermen und einen Disjunktionsterm χ führt man den
Begriff
Φ `R χ
eines Resolutionsbeweises rekursiv wie folgt ein:
Basisregel: Für jede Hypothese α ∈ Φ ist Φ `R α.
Rekursive Regel: Wenn Φ `R α ∪ {X} und Φ `R β ∪ {¬X}, dann gilt auch Φ `R α ∪ β.
(d) Ein Resolutionsbeweis für die Ableitung Φ `R χ ist ein Tupel (χ1 , . . . , χi , . . . , χn ) von
Disjunktionstermen. Es muss gelten:
(a) χn ist die Zielformel, d.h. es gilt χn = χ.
(b) Für jedes i mit 1 ≤ i ≤ n ist entweder
• χi ist eine Hypothese (d.h. χi ∈ Φ) oder
• es gibt 1 ≤ i1 < i2 < i und χi folgt aus χi1 , χi2 durch Anwendung der Resolutionsregel.
Die Resolution ist also ein aussagenlogisches Beweisverfahren, das nur für den Nachweis der
Widersprüchlichkeit von KNF-Formeln taugt.
2
Disjunktionsterme werden auch als Klauseln bezeichnet.
214
7.2. Resolution
Beispiel 7.4 In Beispiel 7.3 haben wir uns ein wenig quälen müssen, um die „Transitivität“
der Implikation, also um
{X → Y, Y → Z} `ABS {¬X, Z}.
mit dem Beweissystem ABS herzuleiten. Im Beweissystem der Resolution geht alles blitzschnell.
Zuerst müssen allerdings die Äquivalenzen (X → Y ) ≡ {¬X, Y } und (Y → Z) ≡ {¬Y, Z}
beobachtet werden und dann ist
Φ := { {¬X, Y }, {¬Y, Z} }
zu setzen. Es ist Φ `R χ mit χ := {¬X, Z} zu zeigen.
1. Die Formel χ1 := {¬X, Y } gehört zu Φ und ist deshalb in R ableitbar.
2. Gleiches gilt für die Formel χ2 := {¬Y, Z} und deshalb ist auch χ2 in R ableitbar.
3. Jetzt erhalten wir χ3 := χ = {¬X, Z} nach Anwendung der Resolutionsregel
{¬X, Y }, {¬Y, Z}
{¬X, Z}
auf χ1 und χ2 .
Ende von Beispiel 7.4
Sei der leere Disjunktionsterm. Man legt fest, dass unerfüllbar ist: Diese Festlegung ist
sinnvoll, denn man erhält den leeren Disjunktionsterm nur falls widersprüchliche Literale
abgeleitet wurden. Wie kann man mit einem Resolutionsbeweis zeigen, dass eine Menge Φ von
Disjunktionstermen unerfüllbar ist? Indem man die Ableitung Φ `R herleitet.
Beispiel 7.5 Die Deutsche Bahn soll sich entscheiden, ob der Frankfurter Kopfbahnhof in
einen Durchgangsbahnhof umgebaut werden soll. Dabei muss sie ihre Entscheidung auf die
folgenden Fakten basieren:
1. Die Kunden der Bahn sind nicht zufrieden, wenn
• sich die Preise erhöhen: Wir erhalten die Implikation P → ¬Z, bzw. den Disjunktionsterm {¬P, ¬Z},
• oder sich die Fahrzeiten verlängern: Wir erhalten die Implikation F → ¬Z, bzw. den
Disjunktionsterm {¬F, ¬Z}.
2. Wenn der Frankfurter Kopfbahnhof nicht in einen Durchgangsbahnhof umgebaut wird,
verlängern sich die Fahrzeiten: Diesmal erhalten wir die Implikation ¬B → F , bzw. den
Disjunktionsterm {B, F }.
3. Der Bahnhof kann nur dann umgebaut werden, wenn die Fahrpreise erhöht werden: Also
folgt B → P , bzw. der Disjunktionsterm {¬B, P } folgt.
Die Bahn kann es niemandem recht machen, denn die Menge
Φ := {¬P, ¬Z} {¬F, ¬Z}, {B, F }, {¬B, P }, {Z}
n
o
ist unerfüllbar. Wie sieht ein Resolutionsbeweis aus?
1. Der Disjunktionsterm χ1 := {¬P, ¬Z} liegt in Φ genauso wie der Disjunktionsterm χ2 :=
{Z}. Folgere χ3 := {¬P } in einer Anwendung der Resolutionsregel.
2. Der Disjunktionsterm χ4 := {¬F, ¬Z} gehört zur Menge Φ. Zusammen mit χ2 = {Z} folgt
χ5 := {¬F } mit einer Anwendung der Resolutionsregel.
215
7. Beweissysteme für die Aussagenlogik
3. Der Disjunktionsterm χ6 := {¬B, P } gehört zur Menge Φ. Also folgt χ7 := {¬B} aus χ6
und χ3 durch eine Anwendung der Resolutionsregel.
4. Der Disjunktionsterm χ8 := {B, F } gehört zur Menge Φ. Also folgt χ9 := {B} durch eine
Anwendung der Resolutionsregel aus χ8 und χ5 .
5. Der leere Disjunktionsterm folgt durch Anwendung der Resolutionsregel aus χ7 und χ9 :
Die Menge Φ ist unerfüllbar!
Ende von Beispiel 7.5
Angenommen, Φ ist eine beliebige unerfüllbare Menge von Disjunktionstermen. Gibt es dann
auch einen Resolutionsbeweis Φ `R ?
Satz 7.10 (Vollständigkeit der Resolution)
Sei Φ eine Menge von Disjunktionstermen. Dann gilt


^

D  ist unerfüllbar
⇐⇒ Φ `R .
D∈Φ
Beweis: Sei Φ eine Menge von Disjunktionstermen. Wir beschreiben das Davis-PutnamVerfahren, das nacheinander Variablen mit Hilfe der Resolutionsregel entfernt bis Erfüllbarkeit
festgestellt wird oder der leere Disjunktionsterm abgeleitet wird.
Algorithmus 7.1 (Das Davis-Putnam Verfahren)
Setze k := 0 und Φ0 := Φ.
Wiederhole:
1. Entferne alle allgemeingültigen Disjunktionsterme D aus Φk .
(D ist genau dann allgemeingültig, wenn D = D0 ∪ {X, ¬X} gilt.)
2. Die Unit-Clause-Regel: Wenn ein Literal l ein Disjunktionsterm in Φk ist, dann
entferne ¬l aus allen Disjunktionstermen und entferne alle Disjunktionsterme aus
Φk , in denen l auftaucht.
(Das Verfahren ist gezwungen, l auf wahr zu setzen.)
3. Die Pure-Literal-Regel: Wenn es ein Literal l gibt, so dass ¬l in keinem Disjunktionsterm vorkommt, dann entferne alle Disjunktionsterme aus Φk in denen l
vorkommt.
(Ohne Einschränkung der Allgemeinheit kann l auf wahr gesetzt werden.)
4. Wenn Φk = ∅, dann halte mit der Antwort „Φ ist erfüllbar“. Wenn Φk den leeren
Disjunktionsterm enthält, dann halte mit der Antwort „Φ ist unerfüllbar“.
5. Wähle eine aussagenlogische Variable X, die in mindestens einem Disjunktionsterm
in Φk vorkommt.
5.1 Wende, wann immer möglich, die Resolutionsregel zu X an, d.h. bestimme
Ψ1 := {α ∪ β : α ∪ {X} ∈ Φk , β ∪ {¬X} ∈ Φk }
216
7.2. Resolution
5.2 Nimm all diese Anwendungen der Resolutionsregel in Φk auf und entferne aus Φk
alle Disjunktionsterme, die das Literal X, bzw. das Literal ¬X enthalten. D.h.
bestimme
Ψ2 := {α : X ∈ Var(α) und α ∈ Φk }
und setze
Φk+1 := (Φk ∪ Ψ1 ) \ Ψ2 .
Achtung: Die Menge Φk+1 nimmt möglicherweise gewaltig an Größe zu!
5.3 Setze k := k + 1.
Das Verfahren terminiert, da nacheinander alle Variablen entfernt werden. Also zeige
Φk erfüllbar ⇐⇒ Φk+1 erfüllbar.
„=⇒“ B erfülle alle Disjunktionsterme in Φk . Ein Disjunktionsterm D ∈ Φk+1 gehört entweder
zu Φk , und wird dann natürlich von B erfüllt, oder wurde neu hinzugefügt. Im letzten
Fall ist D = α ∪ β und α ∪ {X} wie auch β ∪ {¬X} gehören zu Φk . Nach Annahme gilt
Jα ∪ {X}KB = Jβ ∪ ¬XKB = 1 und Jα ∨ βKB = 1 folgt. Also erfüllt B alle Disjunktionsterme
in Φk+1 .
„⇐=“ B erfülle alle Disjunktionsterme in Φk+1 . Es gelte JXKB = 0, der Fall JXKB = 1
0
verläuft analog. Sei B0 die „Geschwisterbelegung“ mit JXKB = 1, aber B0 stimme sonst mit
B überein. Ein Disjunktionsterm D ∈ Φk gehört entweder zu Φk+1 , und wird dann natürlich
von B wie auch von B0 erfüllt, oder D wurde aus Φk entfernt. Wenn B alle entfernten
Disjunktionsterme erfüllt, dann ist Φk erfüllbar und das war zu zeigen. Also falsifiziere B den
entfernten Disjunktionsterm D und D = α ∪ {X} folgt.
Dann muss B (und damit auch B0 ) alle Disjunktionsterme β mit β ∪ {¬X} ∈ Φk erfüllen,
0
denn sonst gilt Jα ∪ βKB = 0 im Gegensatz zur Annahme. Aber dann folgt Jα ∪ {X}KB = 1 =
0
Jβ ∪ {¬X}KB für alle entfernten Disjunktionsterme: B0 erfüllt alle Terme in Φk und Φk ist
erfüllbar.
Das Davis-Putnam Verfahren führt zu einem viel zu hohem Aufwand, da die Mengen Φk im
Allgemeinen in Größe explodieren. Statt alle möglichen Resolutionsschritte für eine ausgewählte
Variable X gleichzeitig auszuführen, wendet das DPLL-Verfahren von Davis, Putnam,
Logemann und Loveland deshalb die Splitting-Regel in Schritt 5. an.
Algorithmus 7.2 (Das DPLL-Verfahren)
Wiederhole:
1. Entferne alle allgemeingültigen Disjunktionsterme D aus Φ.
(D ist genau dann allgemeingültig, wenn D = D0 ∪ {X, ¬X} gilt.)
2. Die Unit-Clause-Regel: Wenn ein Literal l ein Disjunktionsterm in Φ ist, dann entferne
¬l aus allen Disjunktionstermen und entferne alle Disjunktionsterme aus Φk in denen l
auftaucht.
(Das Verfahren ist gezwungen, l auf wahr zu setzen.)
3. Die Pure-Literal-Regel: Wenn es ein Literal l gibt, so dass ¬l in keinem Disjunktionsterm
vorkommt, dann entferne alle Disjunktionsterme aus Φ in denen l vorkommt.
(Ohne Einschränkung der Allgemeinheit kann l auf wahr gesetzt werden.)
217
7. Beweissysteme für die Aussagenlogik
4. Wenn Φ = ∅, dann halte mit der Antwort „Φ ist erfüllbar“. Wenn Φ den leeren Disjunktionsterm enthält, dann halte mit der Antwort „Φ ist unerfüllbar“.
5. „Choose Literal“: Wähle eine aussagenlogische Variable X, die in mindestens einem
Disjunktionsterm in Φk vorkommt. Wende die Splitting-Regel an:
- Setze X = 1, entferne alle erfüllten Disjunktionsterme und entferne jedes Vorkommen
von ¬X in einem Disjunktionsterm.
Rufe das DPLL-Verfahren für die neue Menge Φ auf.
- Wenn die Antwort „unerfüllbar“ ist, dann setze X = 0, entferne alle erfüllten Disjunktionsterme und entferne jedes Vorkommen von X in einem Disjunktionsterm.
Rufe das DPLL-Verfahren für die neue Menge Φ auf.
Bemerkung 7.4 Zu erfolgreichen Implementierungen des DPLL-Verfahrens gehören Chaff
(http://www.princeton.edu/~chaff/) und zChaff (http://www.princeton.edu/~chaff/
zchaff.html). Die verschiedenen Implementierungen unterscheiden sich vor Allem in der
Umsetzung der Schritte „Choose Literal“ und „Backtracking“.
Das DPLL-Verfahren scheint die Resolution nur in einem oberflächlichen Umfang zu benutzen,
da nur die Unit-Resolution verwandt wird. Tatsächlich kann man aus dem Rekursionsbaum
des DPLL-Verfahrens einen Resolutionsbeweis (sogar mit Baumstruktur) gewinnen.
Aufgabe 149
φ sei eine KNF-Formel. Ein DPLL-Baum T für φ ist ein Rekursionsbaum des DPLL-Verfahrens für Eingabe φ
mit den folgenden Beschriftungen.
1. Beschrifte einen inneren Knoten v von T mit
(a) der aussagenlogischen Variablen X, die im Aufruf von v entfernt wird und
(b) mit der Angabe, ob X durch die Unit-Clause-Regel, die Pure-Literal-Regel oder die Splitting-Regel
entfernt wurde.
Beschrifte die von v ausgehenden Kanten mit X = 0 bzw. X = 1 wie verlangt.
2. Beschrifte ein Blatt b von T mit einem Disjunkionsterm, der durch die Belegung des Weges von der Wurzel
nach b falsifiziert wird.
Zeige, dass der DPLL-Baum T für φ einen Resolutionbeweis bT mit den folgenden Eigenschaften definiert:
(a) bT hat Baumstruktur und
(b) die Länge von bT ist beschränkt durch die Anzahl der Knoten von T .
7.2.1. Das Schubfachprinzip
Nach Satz 7.9 wird man kurze Resolutionsbeweise nicht für alle KNFs erwarten können. Aber
für welche KNFs gibt es denn nur sehr lange Resolutionsbeweise?
Wir betrachten ein für die Resolution besonders schwieriges Problem, das Schubfach-Prinzip:
Verteilt man n Objekte in m Fächer und ist n > m, dann gibt es mindestens ein Fach, das mehr
als ein Objekt erhält. Hier ist eine entsprechende Formalisierung mit Hilfe der Aussagenlogik.
(a) Wir arbeiten mit den aussagenlogischen Variablen pi,j für 1 ≤ i ≤ n und 1 ≤ j ≤ m.
pi,j = 1 hat die beabsichtigte Bedeutung, dass Objekt i in Fach j gelegt wird.
(b) Wir haben zwei Typen von Disjunktionstermen.
(1) Der Disjunktionsterm Di = pi,1 ∨ pi,2 ∨ · · · ∨ pi,m ist genau dann erfüllt, wenn Objekt
i in (mindestens) ein Fach gelegt wird.
218
7.2. Resolution
(2) Der Disjunktionsterm Di,j,k = ¬pi,k ∨ ¬pj,k „fordert“ für i 6= j, dass Fach k nicht
sowohl Objekt i wie auch Objekt j erhält.
Sei Sn,m die Konjunktion aller gerade eingeführten Disjunktioneterme. Dann ist Sn,m genau
dann erfüllbar, wenn die n (n > m) Objekte auf die m Fächer verteilt werden, ohne dass ein
Fach mehr als ein Objekt erhält. Wir fragen uns wie lang Resolutionsbeweise sein müssen, die
Sn,m widerlegen.
Wir setzen m = n−1. Wir akzeptieren sogar falsche Resolutionsbeweise, die möglicherweise viel
kürzer sind als richtige Beweise. Wir fordern von einem Resolutionsbeweis mit Axiomensystem
{D1 , . . . , Dn } ∪ {Di,j,m | 1 ≤ i 6= j ≤ n, 1 ≤ k ≤ m} nämlich nur, dass der am Ende bewiesene
Disjunktionsterm B falsch ist, wenn wir B für Matchings der Größe n − 1 auswerten:
Die Belegung Mi,j ist ein Matching der Größe n−1 genau dann, wenn die Belegung
ausdrückt, dass n−1 Objekte auf n−1 Fächer bijektiv verteilt werden. Die Belegung
heißt i-kritisch, wenn Objekt i nicht verteilt wird, d.h. wenn Mi,1 = · · · = Mi,m = 0.
Weil wir uns freiwillig auf diesen anscheinend sehr einfachen Beweistest einschränken, können
wir annehmen, dass der Beweis keine Negation benutzt. Taucht nämlich das Literal ¬pi,j
W
in einem Disjunktionsterm des Beweises auf, dann können wir ¬pi,j durch l6=i pl,j ersetzen:
Objekt i landet nicht in Fach j, wenn dort bereits ein anderes Objekt landet. Hier nutzen wir
W
aus, dass ¬pi,j genau dann von einem Matching M der Größe n − 1 erfüllt wird, wenn l6=i pl,j
W
von M erfüllt wird: Die Disjunktionsterme ¬pi,j und l6=i pl,j sind für Matchings der Größe
n − 1 äquivalent.
Einen Resolutionsbeweis, der keine Negation benutzt, nennen wir monoton. Die folgende
Überlegung ist zentral.
Lemma 7.5 Jede monotone Wiederlegung von φn,n−1 besitzt einen Disjunktionsterm mit
mindestens 2n2 /9 Variablen.
Wir verschieben den Beweis und zeigen zuerst, dass diese anscheinend harmlose Überlegung
extrem lange Resolutionsbeweise für das Schubfach-Prinzip erzwingt.
Satz 7.11 Die Komplexität der Resolution für das Schubfachprinzip
Jede Widerlegung von φn,n−1 mit Hilfe der Resolution erfordert Beweise der Länge mindestens
2n/24 .
Nenne einen Disjunktionsterm mit mindestens n2 /11 Variablen lang. Lemma 7.5 besagt, dass
es einen langen Disjunktionsterm gibt. Sei L die Anzahl langer Disjunktionsterme. Es muss
eine Variable pi,j geben, so dass pi,j in mindestens
L·
n2 /11
≥ L/11
n(n − 1)
langen Disjunktionstermen vorkommt. Wir setzen pi,j = 1 und alle Disjunktionsterme, die
pi,j enthalten, sind wahr und können aus dem Beweis entfernt werden. Wir möchten nach
dieser Setzung ein neues Schubfach-Problem auf jetzt n − 1 Objekten erhalten und setzen
deshalb pi,j 0 = 0 für j 0 6= j sowie pi0 ,j = 0 für i0 =
6 i. Die verbleibenden Disjunktionsterme des
monotonen Beweises müssen jetzt das Schubfach-Problem Sn−1,n−2 beweisen.
Wiederholen wir diesen Setzungsprozess t Mal, erhalten wir einen montonen Beweis für das
Schubfach-Problem Sn−t,n−t−1 . Wir wenden Lemma 7.5 an und erhalten einen Disjunktionsterm
des Beweises mit mindestens 2(n − t)2 /9 Variablen. Wenn t ≤ n/3, dann ist
2(n − t)2
2(2n)2
8n2
n2
>
=
>
.
9
92
81
11
219
7. Beweissysteme für die Aussagenlogik
Die ersten n/3 Anwendungen dieses Setzungsprozesses eliminieren deshalb jedesmal mindestens
ein Elftel aller langen Disjunktionsterme, und es muss
1
L 1−
11
n/3
10
=L
11
n/3
≥1
gelten. Die Behauptung von Satz 7.11 folgt, wenn wir
11
10
n/3
> 2n/24
beachten.
Beweis von Lemma 7.5: Wir führen das Fortschrittsmaß
Zeugen(D) = {i | D wird von einer i-kritischen Belegung falsifiziert }
für die Disjunktionsterme D des Beweises ein. Beachte, dass für den Disjunktionsterm B am
Ende des Beweises
|Zeugen(B)| = n
gelten muss. Wenn der Disjunktionsterm D aus den Disjunktionstermen D0 und D00 gefolgert
wird, gilt
|Zeugen(D)| ≤ |Zeugen(D0 )| + |Zeugen(D00 )|,
denn jede Belegung, die D falsifiziert, muss D0 oder D00 falsifizieren. Also gibt es einen
Disjunktionsterm D für die n/3 < t = |Zeugen(D)| < 2n/3 gilt. Wir zeigen, dass D mindestens
t(n − t) Variablen besitzt. Die Behauptung folgt, da t(n − t) > 2n2 /9.
Angenommen, die i-kritische Belegung α falsifiziert D. Sei j ein beliebiges Objekt, das aber
nicht zu Zeugen(D) gehört. Wir produzieren aus α eine j-kritische Belegung β wie folgt: Wenn
Objekt j für α in Fach l gelegt wird, dann lege für β stattdessen Objekt i in Fach l; Objekt j
wird keinem Fach zugeteilt. Da β j-kritisch ist, j aber nicht zu Zeugen(D) gehört, muss β den
Disjunktionsterm D erfüllen, während α den Disjunktionsterm falsifiziert. Das bedeutet aber,
dass pi,l in D vorkommt. Für jede Position i ∈ Zeugen(C) besitzt Ck also mindestens n − t
Variablen pi,l und die Behauptung folgt.
Bemerkung 7.5 Der Nachweis großer Beweislänge ist sehr viel schwieriger für Frege Systeme
als für die Resolution zu erbringen. Bis heute kennt man nur unter Schranken Ω(n3 / log3 n)
für Formeln der Länge n.
Aufgabe 150
Welche Eigenschaften der Resolution werden im Beweis ausgenutzt?
7.2.2. Resolution und Frege Systeme
Wir beobachten, dass ein Frege System mindestens so mächtig wie die Resolution ist. Aber
as genau soll das heißen? Mit der Resolution versuchen wir den leeren Disjunktionsterm
herzuleiten, um Widersprüchlichkeit nachzuweisen, aber wie weist man die Widersprüchlichkeit
einer Formel φ mit einem Frege System nach? Indem man beweist, dass ¬φ eine Tautologie ist!
220
7.2. Resolution
Satz 7.6 (p-Simulation der Resolution durch Frege Systeme)
Für jeden Resolutionsbeweis Φ `R der Widersprüchlichkeit einer Menge Φ von Disjunktionstermen gibt es einen Beweis Φ `B φ → (x ∧ ¬x) in einem Frege System B und dieser Beweis
wächst in Länge um höchstens einen konstanten Faktor.
Beweis: Sei φ die Konjunktion der Disjunktionsterme in Φ und sei Φ `R ein Resolutionsbeweis
der Widersprüchlichkeit von φ.
Wir bauen ein Frege System für eine p-Simulation der Resolution. Unser erstes Ziel ist die
Ableitung der Formel φ → (X ∨ ¬X). Das gelingt mit Hilfe des Axiomensystems
Z → (X ∨ ¬X)
wenn wir Z durch φ ersetzen. Die Hinzunahme einer Hypothese C ∈ Φ im Resolutionsbeweis
simulieren wir durch die Ableitung der Formel φ → C mit Hilfe der Schlussregel
Y
Z→Y
indem wir Y durch C und Z durch φ ersetzen. Um einen Resolutionsschritt
¬X ∨ C, X ∨ D
C ∨D
von Φ `R zu simulieren, soll unser Frege System die Schlussregel
Z → (¬X ∨ U ), Z → (X ∨ V )
Z → (U ∨ V )
für Variablen U, V, X, Z enthalten: Wenn wir in unserem Frege System die Formeln φ →
(¬X ∨ C) und φ → (X ∨ D) bereits abgeleitet haben, dann können wir in einem Schritt die
Formel φ → (C ∨ D) ableiten, vorausgesetzt Z wird durch φ, U durch C und V durch D
ersetzt.
Im letzten Schritt des Resolutionsbeweises wird der leere Disjunktionsterm aus bereits
abgeleiteten Literalen U und ¬U hergeleitet. Um diesen letzten Schritt zu simulieren, stellen
wir die Schlussregel
Z → ¬X, Z → X
¬Z
zur Verfügung: Wenn Z durch φ und X durch U ersetzt wird, dann sind wir am Ziel. Wir
erhalten ein Frege System nach dem Hinzufügen geeigneter weiterer Schlussregeln.
Bemerkung 7.6 In Definition 7.8 haben wir Beweissysteme mit Definitionen eingeführt. Wir
können die Kraft von Definitionen auch für die Resolution untersuchen, wenn wir Definitionen
des Typs
X↔ψ
für eine KNF über bereits definierte Variablen und eine neue Variable X zulassen, solange X
nicht in dem zu beweisenden Disjunktionsterm vorkommt. Die Kraft der Resolution nimmt
schlagartig zu:
Frege Systeme mit Definitionen und Resolution mit Definitionen sind p-äquivalent.
Darüber hinaus hat das Schubfachprinzip Beweise polynomieller Länge.
221
7. Beweissysteme für die Aussagenlogik
Aufgabe 151
In dem Beweissystem R∗ der erweiterten Resolution dürfen zusätzlich aussagenlogische Formeln durch aussagenlogische Variablen abgekürzt werden. Resolutionsregeln dürfen dann auch auf Disjunktionsterme angewandt
werden, die Abkürzungen enthalten.
Ein Beweis Φ `R∗ φ beginnt mit einem Definitionsteil und wird mit der Angabe von Hypothesen bzw. mit
Anwendungen der Resolutionsregel weitergeführt. Seien x1 , . . . , xn die in den Formeln aus Φ∪{φ} vorkommenden
Variablen. Im Definitionsteil werden „neue“ Variablen y1 , . . . , ym als Abkürzungen mit der jeweiligen Setzung
y i ↔ ψi
eingeführt, wobei ψi eine DNF ist, die nur von den Variablen x1 , . . . , xn , y1 , . . . , yi−1 abhängt.
(i)
i
(a) ψ := K1 ∨ K2 sei eine DNF mit den Konjunktionstermen Ki := j=1
`j für i = 1, 2. Um die
Resolutionsregel mit Erfolg anzuwenden, muss eine Definition y ↔ ψ als eine nicht zu lange KNF
geschrieben werden: Die Disjunktionsterme dieser KNF erscheinen dann im Definitionsteil des R∗ Beweises und stehen für den anschließenden Resolutionsbeweis zur Verfügung.
Vm
Zeigen Sie: Die Äquivalenz y ↔ ψ kann als eine KNF mit höchstens O(m1 · m2 ) Disjunktionstermen
geschrieben werden.
(b) Das Schubfachprinzip Sn :=
definiert durch
Vn
i=1
Di ∧
V
1≤i6=j≤n,1≤k≤n−1
Di,j,k für n Objekte und n − 1 Fächer wird
• die n Disjunktionsterme Di := pi,1 ∨ · · · ∨ pi,n−1 (jedes Objekt i muss in ein Fach) und
• die O(n3 ) Disjunktionsterme Di,j,k := ¬pi,k ∨ ¬pj,k (verschiedene Objekte i 6= j dürfen nicht in
das gleiche Fach gelegt werden).
Es gibt leider nur Resolutionsbeweise der Länge 2Ω(n) , die zeigen, dass Sn widersprüchlich ist. Mit der
erweiterten Resolution hingegen gelingen Widerspruchsbeweise polynomieller Länge.
i) Die Funktion f : {1, . . . , n} → {1, . . . , n − 1} sei gegeben. Definiere die Funktion f ∗ : {1, . . . , n −
1} → {1, . . . , n − 2} für 1 ≤ i ≤ n − 1 durch
f ∗ (i) :=
f (i)
f (n)
f (i) 6= n − 1,
f (i) = n − 1
Also f ∗ (i) = f (i) oder f ∗ (i) = f (n). Zeigen Sie: Wenn f injektiv ist, dann ist f ∗ injektiv.
Kommentar: Außerhalb der Aussagenlogik lässt sich Sn also recht einfach auf das kleinere Schubfachprinzip Sn−1 zurückführen. Eine iterative Wiederholung führt dann auf das triviale Schubfachprinzip
S2 .
ii) Zeigen Sie: Sn `R∗ . Das Argument aus i) kann also mit erweiterter Resolution innerhalb der
Aussagenlogik ausgeführt werden kann.
– Führen Sie Variablen qi,j (für 1 ≤ i ≤ n − 1 und 1 ≤ j ≤ n − 2) ein, um das kleinere
Schubfachprinzip aus Sn herzuleiten. Wie sind die Variablen qi,j zu definieren? Beschreiben
Sie insbesondere die Disjunktionsterme der Definition von qi,j .
– Beschreiben Sie die Herleitung von qi,1 ∨ · · · ∨ qi,n−2 mit höchstens O(n) Resolutionen.
Benutzen Sie u.a. die Disjunktionsterme pi,1 ∨ · · · ∨ pi,n−1 und pn,1 ∨ · · · ∨ pn,n−1 .
– Beschreiben Sie die Herleitung von ¬qi,k ∨ ¬qj,k für i 6= j mit O(1) Resolutionen.
Hinweis: Leiten Sie ¬qi,k ∨ ¬pn,k ∨ pi,n−1 und ¬qj,k ∨ ¬pn,k ∨ pj,n−1 her.
222
8. Temporale Aussagenlogik
8.1. Model Checking
Unser Ziel ist der Entwurf eines fehlerfreien nebenläufigen Systems: Während in einem sequentiellen System Befehle nacheinander auf deterministische Art abgearbeitet werden, laufen
in einem nebenläufigen System mehrere Berechnungen oder Prozesse „fast gleichzeitig nebeneinander“. Zum Beispiel sind in der nebenläufigen Programmierung meist mehrere Prozesse
beteiligt, die mehr oder minder unabhängig voneinander sind, aber miteinander kommunizieren
können. Die verschiedenen Schritte der einzelnen Prozesse laufen im allgemeinen nicht parallel
ab, sondern können in beliebiger Weise miteinander verschränkt sein. Entsprechend komplex
ist die Vermeidung von Fehlern.
Beispiel 8.1 Die verschiedensten Dienste eines Betriebssystems (wie etwa Drucken, Mausbewegungen, Surfen etc.) sind aus Anwendungssicht unabhängig und ihr Angebot erfolgt
gleichzeitig. Tatsächlich handelt es sich um verschiedenste Prozesse, die vielleicht auf einem
einzigen Prozessor ausgeführt werden müssen: Ihre miteinander verschränkte Ausführung ist
also „auf unvorhersehbare Weise“ sequentiell.
Die Erstellung eines modernen Betriebssystems ohne nebenläufige Programmierung ist undenkbar. Zum Beispiel lassen sich Effizienzsteigerungen durch intelligente Verschränkung von
Prozessen erzielen. Ist die Festplatte mit dem Schreiben oder Lesen von Daten beschäftigt,
dann kann der Prozessor in der Zwischenzeit für Rechnungen benutzt werden.
Die häufig angewandten Methoden der Simulation und des Testens auf ausgewählten Instanzen
finden durchaus viele „Bugs“. Es ist aber nicht ausgeschlossen, dass einige wenige Bugs
unentdeckt bleiben und großen Schaden anrichten.
Am 4. Juni 1996 explodierte die Ariane 5, eine Trägerrakete der ESA1 mit vier Satelliten an
Bord und vernichtete Werte in der Größenordnung von 500 Millionen Dollar. Die eingesetzte
Software hatte im Fall der Ariane 4 perfekt funktioniert. Leider war die Geschwindigkeit der
Ariane 5 größer was zu einem Overflow-Fehler führte.
Der „Pentium Bug“ in 1994 kostete der Firma Intel nicht nur Ansehen, sondern fügte ihr auch
einen finanziellen Schaden von mindestens 400 Millionen Dollar zu.
Man rechnet bei normaler Software mit bis zu 25 Fehlern auf tausend Programmzeilen, in
guter Software reduziert sich die Fehlerzahl auf ca. zwei Fehler. In der Space Shuttle Software
soll die Fehlerzahl bei zehntausend Zeilen sogar unter Eins liegen.
Eine möglichst vollständige Verifikation ist eine wirklich dringliche Aufgabe! Wir stellen hier
die wesentlichen Schritte der Methode des Model Checking vor.
1. Zuerst wird der Entwurf des Systems in eine Beschreibung A überführt, möglicherweise
unter Vernachlässigung von Eigenschaften, die für die Verifikation nicht notwendig sind.
Man sagt, dass A das Modell des Systems ist.
1
European Space Agency
223
8. Temporale Aussagenlogik
2. Das gewünschte Verhalten wird in einem Formalismus, meistens in einer Logik durch eine
Formel φ beschrieben.
3. Im letzten Schritt des Model Checking hat man nachzuweisen, dass das Modell A die
gewünschte Eigenschaft φ besitzt.
Um Model Checking durchführen zu können, sind die folgenden Fragen zu beantworten.
1. Welche Systembeschreibungen A sollen zugelassen werden? Wir beschäftigen uns mit
reaktiven Systemen: Ein reaktives System interagiert mit der Umwelt in dem es auf
externe Einflüsse reagiert.
Einfache reaktive Systeme sind Lampen, die auf die Betätigung eines Schalters mit Leuchten
reagieren. Auch ein Thermostat ist ein reaktives System: Abhängig von der gemessenen
Temperatur wird ein Heizungssystem an-, bzw. ausgeschaltet. Nebenläufige Systeme und
ihre Reaktionen auf externe Einflüsse sind weitere Beispiele.
2. In welchem Formalismus, bzw. in welcher Logik sollte man das gewünschte Verhalten φ
formulieren? Wir betrachten temporale Aussagenlogiken, um den zeitlichen Ablauf in der
Interaktion mit der Umwelt wiedergeben zu können.
3. Es gibt viele temporale Aussagenlogiken. Wir müssen einen sorgfältigen Kompromiss schließen zwischen der Ausdrucksstärke der Logik einerseits und der algorithmischen Komplexität
des Model Checking andererseits: Der Nachweis, dass ein Modell A die Eigenschaft φ besitzt,
also die Formel φ erfüllt, muss auch für komplexe Modelle A und komplexe Eigenschaften
φ in vernünftiger Zeit gelingen.
Wir konzentrieren uns deshalb auf CTL, die „Computational Tree Logic“.
Wir formalisieren reaktive Systeme durch Kripke-Strukturen und führen danach CTL ein.
Zuletzt ist zu klären, wie Syntax (also CTL) und Semantik (also Kripke-Strukturen) zusammenpassen.
8.2. Kripke-Strukturen
Definition 8.1 Eine Kripke-Struktur A = (A, E, L) über einer endlichen Menge Var aussagenlogischer Variablen besitzt die folgenden Komponenten:
(a) Die endliche Menge A ist das Universum oder der Zustandsraum, die Elemente von A
sind die Zustände von A.
(b) E ist eine Menge von gerichteten Kanten, d.h. es ist E ⊆ A × A. Zusätzlich fordern wir
für jeden Zustand a ∈ A, dass es mindestens einen Zustand b ∈ A mit (a, b) ∈ E gibt. (Es
gibt also für jeden Zustand a mindestens einen Nachfolgezustand. Die nicht-leere Menge
der Nachfolger eines Zustands a ist N (a) = {b ∈ A : (a, b) ∈ E }.)
(c) Die Funktion L : A → P(Var) weist jedem Zustand a ∈ A die Menge L(a) der in a erfüllten
aussagenlogischen Variablen zu.
Kommentar:
L(a) definiert für jeden Zustand a eine Belegung Ba : Var → {0, 1} mit Ba (X) = 1 :⇐⇒
X ∈ L(a).
Das Kripke-Diagramm einer Kripke-Struktur A ist eine Veranschaulichung von A. Das
Diagramm besteht aus der Veranschaulichung des Graphen (A, E), wobei jeder Knoten mit
allen in Knoten a erfüllten aussagenlogischen Variablen aus Var beschriftet ist.
224
8.2. Kripke-Strukturen
Beispiel 8.2 Die Modellierung einer Mikrowelle
Die Menge Var besteht aus den aussagenlogischen Variablen
an, Tür zu, heizen, Fehler.
Wir unterscheiden zwischen den Variablen an und heizen, da die Mikrowelle erst einige Zeit
nach dem Anschalten mit dem Aufwärmen und Kochen beginnt. Hier ist das Kripke-Diagramm.
Tür öffnen
W
M
e
rt
st
a
n
ze
et
ck
s
rü
an
Tür zu
¬ heizen
¬ Fehler
¬ an
Tür zu
heizen
¬ Fehler
kochen
zu
n
ne
fertig
starte MW
Tür schließen
an
Tür zu
¬ heizen
Fehler
öff
¬ an
Tür zu
¬ heizen
¬ Fehler
ür
T
Tür schließen
an
¬ Tür zu
¬ heizen
Fehler
Tür öffnen
an
Tür zu
heizen
Fehler
kochen starten
¬
¬
¬
¬
aufwärmen
an
Tür zu
heizen
¬ Fehler
Unsere Kripke-Struktur besitzt also sieben Zustände. Für jeden Zustand haben wir einen Knoten
angelegt und vermerkt, welche aussagenlogischen Variablen (und sogar welche Negationen)
wahr sind. Zusätzlich wird für jeden Zustandsübergang vermerkt, welche Aktion den Übergang
verursacht hat. Man beachte, dass Aktionen nicht Bestandteil der Kripke-Struktur sind, sie
dienen ausschließlich dem Verständnis des Kripke-Diagramms.
Beispiel 8.3 Wechselseitiger Ausschluss I
In einem nebenläufigen Programm treten zwei Prozesse P0 und P1 auf. Prozess Pi befindet
sich entweder im nicht-kritischen Bereich, bittet um Zugang zum kritischen Bereich und wartet
auf Erlaubnis oder hält sich im kritischen Bereich2 auf.
Um zu gewährleisten, dass sich zu keinem Zeitpunkt beide Prozesse im kritischen Bereich
aufhalten, erhalten P0 , P1 Zugriff auf die Variable „turn“, die nur die Werte 0 oder 1 annehmen
darf. Gilt turn = i wird Prozess i nach voriger Bitte um Erlaubnis in den kritischen Bereich
gelassen. Verlässt Prozess i den kritischen Bereich muss er turn = 1 − i setzen.
Zur Modellierung wählen wir
Var := { turn = 0, turn = 1, c0 , c1 , n0 , n1 , t0 , t1 }.
2
Ein kritischer Bereich ist eine Sammlung von Programmanweisungen, die zu jedem Zeitpunkt von nur einem
Prozess ausgeführt werden darf.
225
8. Temporale Aussagenlogik
Es soll ci = 1 genau dann gelten, wenn Prozess Pi Zugang zum kritischen Bereich erhalten
hat, ni = 1 wenn Pi sich im nicht-kritischen Bereich befindet und ti = 1, wenn Pi um Zugang
bittet. Um Zugang zum kritischen Bereich zu erhalten, muss Pi vorher um Erlaubnis bitten.
turn = 0
n0 , n1
turn = 0
n0 , t1
turn = 1
n0 , n1
turn = 0
t0 , n1
turn = 0
t0 , t1
turn = 1
n0 , t1
turn = 0
c0 , n 1
turn = 1
n0 , c1
turn = 0
c0 , t 1
turn = 1
t0 , n1
turn = 1
t0 , t1
turn = 1
t0 , c1
Welche der folgenden fünf Eigenschaften werden erfüllt?
1. Sicherheit: Zu keinem Zeitpunkt halten sich beide Prozesse im kritischen Bereich auf.
2. Starke Lebendigkeit: Wenn ein Prozess um Erlaubnis bittet, in den kritischen Bereich zu
gelangen, wird die Erlaubnis irgendwann gewährt.
3. Lebendigkeit: Wenn ein Prozess um Erlaubnis bittet, in den kritischen Bereich zu gelangen,
wird die Erlaubnis irgendwann gewährt, solange der andere Prozess irgendwann später
selbst um Zugang bittet.
4. Schwache Lebendigkeit: Wenn turn= i und wenn Prozess i um Erlaubnis bittet, in den
kritischen Bereich zu gelangen, wird die Erlaubnis irgendwann gewährt.
5. Keine Blockade: Ein Prozess darf jederzeit um Zugang zum kritischen Bereich bitten.
Beispiel 8.4 Digitale Schaltungen
(Dieses Beispiel setzt einige Grundkenntnisse aus der Schaltungstechnik voraus.) Wir modellieren eine aus drei Gattern bestehende synchrone3 digitale Schaltung S. Wie rechnet S? Wenn
vi der gegenwärtige boolesche Wert des i-ten Gatters und vi0 der neue Wert ist, dann soll gelten
v00 = ¬v0 ,
v10 = v0 ⊕ v1 ,
v20 = (v0 ∧ v1 ) ⊕ v2 .
Für die Definitionen einer Kripke-Struktur A setzen wir Var := {bit0 , bit1 , bit2 }, wobei biti
dem gegenwärtigen Wert des i-ten Gatters vi entspricht. Weiterhin soll A = {0, 1}3 für den
Zustandsraum A gelten und eine Kante soll von v ∈ A zu w ∈ A führen, wenn w = v 0 ist.
Aufgabe 152
3
Eine Schaltung heißt synchron, wenn alle Gatter gleichzeitig schalten. Man sagt auch, dass die Schaltung
getaktet ist.
226
8.3. Computational Tree Logic
(a) Zeige das Kripke-Diagramm von A.
(b) Was tut S?
(c) Berechnet S dieselbe Funktion, wenn die Gatter asynchron, also ohne Taktung, rechnen dürfen?
8.3. Computational Tree Logic
Sei A = (A, E, L) eine Kripke-Struktur über der Variablenmenge Var. Wir betrachten im Folgenden nur Berechnungen, die in einem ausgezeichneten Zustand a ∈ A, dem Anfangszustand
beginnen. In einer Kripke-Struktur besitzt jeder Zustand mindestens einen Nachfolge-Zustand.
Eine Berechnung von A entspricht deshalb einem in a beginnenden, unendlich langen Weg
im Graphen (A, E). Unendlich lange, im Knoten a beginnende Wege des Graphen (A, E) und
Berechnungen der Kripke-Struktur sind also äquivalente Begriffe.
Wege im Graphen (A, E), die im Zustand a beginnen, lassen sich durch den Berechnungsbaum (für a) (engl.: Computational Tree) veranschaulichen. Der Berechnungsbaum entsteht
aus dem Graphen (A, E), indem man systematisch alle in a beginnenden Wege des Graphen
aufführt. Zum Beispiel, für den Graphen
ab
c
bc
und den mit „a b“ beschrifteten Anfangszustand erhalten wir den Berechnungsbaum
ab
c
bc
ab
..
.
..
.
c
c
..
.
..
.
In der Computational Tree Logic (CTL) werden Aussagen über die Existenz möglicher Berechnungen (d.h. unendlich langer, in a beginnender Wege) durch den Weg-Quantor E, bzw
Aussagen über alle möglichen Berechnungen (d.h. alle unendlich langen in a beginnenden
Wege) durch den Weg-Quantor A ermöglicht. Neben den Weg-Quantoren A und E werden noch fünf temporale Quantoren zur Verfügung gestellt, um zeitliche Eigenschaften
von Berechnungen zu beschreiben. Die Quantoren dürfen nicht in beliebiger Anordnung in
einer CTL-Formel auftreten, sondern treten in Paaren auf: Auf jeden Weg-Quantor folgt ein
temporaler Quantor. Wir beschreiben aber zuerst die temporalen Quantoren.
Man stelle sich vor, dass wir eine bestimmte Berechnung ausgewählt haben:
(a) Formeln ohne Weg-Quantoren und ohne temporale Quantoren sind aussagenlogische
Formeln. Eine aussagenlogische Formel φ gilt, wenn die von Zustand a definierte Belegung
Ba die Formel erfüllt, d.h. wenn JφKBa = 1 gilt.
227
8. Temporale Aussagenlogik
(b) Xφ (bzw. next) soll bedeuten, dass φ im zweiten Knoten des Wegs gilt.
• φ gilt im nächsten Schritt der Berechnung.
(c) Fφ (bzw. in the future) soll bedeuten, dass φ für irgendeinen Knoten des Wegs gilt.
• φ gilt irgendwann während der Berechnung.
(d) Gφ (bzw. globally) soll bedeuten, dass φ für alle Knoten des Wegs gilt.
• φ gilt für alle Schritte der Berechnung.
(e) φ U ψ (bzw. φ until ψ) soll bedeuten, dass es einen Knoten des Weges gibt, in dem ψ gilt
und φ für alle „vorigen“ Knoten erfüllt ist.
• φ gilt solange bis ψ erfüllt ist und ψ gilt irgendwann.
Definition 8.2 Sei Var eine Menge aussagenlogischer Variablen. Wir führen die Formelmenge
CTL( Var) mit Hilfe einer rekursiven Definition ein.
Basisregel:
• 0 und 1 gehören zu CTL(Var).
• Wenn p eine aussagenlogische Variable in Var ist, dann gehört p zu CTL(Var), kurz:
Var ⊆ CTL(Var).
Rekursive Regeln:
• Wenn φ und ψ zu CTL(Var) gehören, dann gehören auch ¬φ, (φ∧ψ), (φ∨ψ), (φ → ψ),
(φ ↔ ψ), (φ ⊕ ψ) zu CTL(Var).
– Formeln in CTL(Var) sind unter allen aussagenlogischen Junktoren abgeschlossen.
• Wenn φ und ψ zu CTL(Var) gehören, dann gehören auch AXφ, EXφ, AFφ, EFφ,
AGφ, EGφ, sowie A(φUψ) und E(φUψ) zu CTL(Var).
– Weder Weg-Quantoren noch temporale Quantoren dürfen isoliert auftreten,
vielmehr muss auf jeden Weg-Quantor ein temporaler Quantor folgen.
– Die temporalen Quantoren X, F, G, U beziehen sich stets auf eine nicht weiter
festgelegte Berechnung, die Weg-Quantoren A, E legen fest, ob alle Berechnungen oder nur die Existenz einer beliebigen Berechnung gemeint ist.
Als nächstes ist die Bedeutung von CTL(Var)-Formeln zu definieren.
8.4. Die Semantik für CTL
Wir definieren die Semantik von CTL(Var).
Definition 8.3 Sei Var eine Menge aussagenlogischer Variablen und A = (A, E, L) eine
Kripke-Struktur. Wir definieren, wann eine CTL(Var)-Formel φ in der Kripke-Struktur A mit
dem Anfangszustand a gilt, d.h. wann (A, a) |= φ gilt.
Wir geben eine rekursive Definition an.
Basisregel:
• Es ist (A, a) |= 1 und (A, a) 6|= 0.
228
8.4. Die Semantik für CTL
– Die Konstante 1 ist immer wahr, die Konstante 0 immer falsch.
• Für jedes p ∈ Var gilt (A, a) |= p genau dann, wenn p ∈ L(a), und ansonsten ist
(A, a) 6|= p.
– Die Variable p ist genau dann gegenwärtig erfüllt, wenn p im Zustand a erfüllt
ist, d.h. wenn p ∈ L(a) gilt.
Rekursive Regeln:
• Die Bedeutung der aussagenlogischen Junktoren wird wie im Fall der Aussagenlogik
erklärt. Mit anderen Worten, wenn φ und ψ zu CTL(Var) gehören, dann gilt
– (A, a) |= ¬φ genau dann, wenn (A, a) 6|= φ.
– (A, a) |= (φ ∧ ψ) genau dann, wenn (A, a) |= φ und (A, a) |= ψ.
– (A, a) |= (φ ∨ ψ) genau dann, wenn (A, a) |= φ oder (A, a) |= ψ.
– (A, a) |= (φ → ψ) genau dann, wenn (A, a) 6|= φ oder (A, a) |= ψ.
– (A, a) |= (φ ↔ ψ) genau dann, wenn (A, a) |= (φ ∧ ψ) oder (A, a) |= (¬φ ∧ ¬ψ)).
– (A, a) |= (φ ⊕ ψ) genau dann, wenn (A, a) 6|= (φ ↔ ψ).
• Wir kommen zum entscheidenden Punkt, die Bedeutung aller Paare von Weg- und
temporalem Quantor. Wenn φ und ψ zu CTL(Var) gehören, dann gilt
– (A, a) |= AXφ genau dann, wenn (A, b) |= φ für jeden direkten Nachfolger b
von a gilt.
a
ϕ
ϕ
– (A, a) |= EXφ genau dann, wenn (A, b) |= φ für mindestens einen direkten
Nachfolger b von a gilt.
a
ϕ
– (A, a) |= AFφ genau dann, wenn es auf jedem in a beginnenden unendlich
langen Weg in (A, E) einen Knoten b des Weges mit (A, b) |= φ gibt.
∗ In loser Übersetzung: Auf jedem Weg gilt φ irgendwann.
229
8. Temporale Aussagenlogik
a
ϕ
ϕ
X
ϕ
X
!
X
– (A, a) |= EFφ genau dann, wenn für irgendeinen von a aus erreichbaren Knoten
b gilt: (A, b) |= φ. (Beachte, dass der Knoten a trivialerweise sich selbst erreicht).
∗ In loser Übersetzung: Es gibt einen Weg, auf dem φ irgendwann gilt.
a
ϕ
– (A, a) |= AGφ genau dann, wenn für jeden von a aus erreichbaren Knoten b
gilt: (A, b) |= φ.
∗ In loser Übersetzung: φ gilt immer.
ϕ a
ϕ
ϕ
ϕ
ϕ
ϕ
ϕ
– (A, a) |= EGφ genau dann, wenn es einen in a beginnenden unendlich langen
Weg gibt, so dass für alle Knoten b des Wegs gilt: (A, b) |= φ.
∗ In loser Übersetzung: Es gibt einen Weg, auf dem φ überall gilt.
ϕ
a
ϕ
ϕ
!
– (A, a) |= A(φUψ) genau dann, wenn es auf jedem in a beginnenden unendlich
langen Weg ein Anfangsstück (b0 , b1 , . . . , bk ) mit a = b0 gibt, sodass (A, bk ) |= ψ
und (A, bi ) |= φ für alle i < k gilt.
∗ In loser Übersetzung: Auf jedem Weg gilt φ solange, bis ψ gilt (und ψ gilt
irgendwann).
230
8.4. Die Semantik für CTL
ϕ
a
ϕ
ϕ
ϕ
ϕ
ϕ
ϕ
ϕ
ψ
ϕ
ψ
X
ψ
X
X
ψ ϕ
!
!
!
X
– (A, a) |= E(φUψ) genau dann, wenn es einen Weg (b0 , b1 , . . . , bk ) mit a = b0
gibt, sodass (A, bk ) |= ψ und (A, bi ) |= φ für alle i < k gilt.
∗ In loser Übersetzung: Auf mindestens einem Weg gilt φ solange, bis ψ gilt
(und ψ gilt irgendwann).
ϕ
a
ϕ
ϕ
ϕ
ψ
Beispiel 8.5 (Die Bedeutung einiger CTL(Var)-Formeln).
1. Die aussagenlogische Variable „Cola kommt raus“ gehöre zu Var. Der Betreiber eines
Getränke-Automaten sollte besser sicherstellen, dass die CTL(Var)-Formel
EF Cola kommt raus
wahr ist: Ansonsten würde der Automat die Cola nämlich unter keinen Umständen herausrücken!
2. Für welche Zustände a gilt die CTL-Formel
AG( φ → EF ψ),
d.h. wann gilt (A, a) |= AG( φ → EF ψ)? Für alle von a aus erreichbaren Zustände b muss
gelten (A, b) |= φ → EFψ. Mit anderen Worten, für alle von a aus erreichbaren Zustände,
in denen φ gilt, ist ein Zustand erreichbar, in dem ψ gilt.
Also, wann gilt AG( φ → EF ψ) im Zustand a? Für jede im Zustand a beginnende Berechnung: Gilt irgendwann φ, dann ist ψ später nicht ausgeschlossen.
3. Für welche Zustände a ist die CTL-Formel
AG( φ → AF ψ)
wahr? Für alle in a beginnenden Berechnungen: Ist φ wahr, dann gilt ψ später.
231
8. Temporale Aussagenlogik
4. Für welche Zustände a ist die Formel
(AG (AF φ) ∧ AG (AF ¬φ))
wahr? Für alle in a beginnenden Berechnungen und beliebige Zeitpunkte wird φ wie auch
¬φ irgendwann später gelten.
5. Für welche Zustände a ist die Formel AF AG φ wahr? Für alle in a beginnenden Berechnungen gibt es einen (späteren) Zeitpunkt, ab dem φ immer gilt.
Zum Beispiel könnten wir mit φ := ( Prozess 1 endet ) und der Formel AF AG φ fordern,
dass Prozess 1 immer irgendwann endet.
6. Wir fordern für den Zustand a, dass solange ψ nicht zum ersten Mal eingetreten ist, auch
φ nicht eintritt. In allen in a beginnenden Berechnungen gilt also ¬φ solange ψ nicht gilt.
Wir müssen also die Formel A(¬φ U ψ) fordern.
Ende von Beispiel 8.5
Beispiel 8.6 Wechselseitiger Ausschluss II
Wir kehren zur Situation von Beispiel 8.3 zurück und formulieren Sicherheit, Lebendigkeit
und Blockadefreiheit als CTL-Formeln.
1. Sicherheit: Zu keinem Zeitpunkt dürfen sich beide Prozesse im kritischen Bereich aufhalten.
φ1 := AG¬(c0 ∧ c1 ).
2. Lebendigkeit: Wenn ein Prozess um Erlaubnis um Zugang zum kritischen Bereich bittet,
dann wird die Erlaubnis irgendwann gewährt.
φ2 := AG((t0 → AFc0 ) ∧ (t1 → AFc1 )).
3. Keine Blockade: Jeder Prozess darf jederzeit um Zugang zum kritischen Bereich bitten.
φ3 := AG(n0 → EX t0 ) ∧ AG(n1 → EX t1 ).
Wir versuchen es mit einer neuen Kripke-Struktur A1 , diesmal über der Variablenmenge
Var = { c0 , c1 , n0 , n1 , t0 , t1 }:
n0 n1
t0 n1
c0 n1
n 0 c1
t0 t1
c0 t1
232
n0 t1
t 0 c1
8.4. Die Semantik für CTL
Wir wählen den mit n0 n1 beschrifteten Zustand als Anfangszustand a. Dann gilt (A1 , a) |= φ1
und die Eigenschaft der Sicherheit ist gewährleistet. Auch gilt (A1 , a) |= φ3 und Blockaden
treten nicht auf. Aber leider ist (A1 , a) 6|= φ2 : Lebendigkeit ist verletzt. Wenn Prozess 0
gegenwärtig als Erster um Zugang zum kritischen Bereich bittet (t0 = 1, n1 = 1), dann kann
Prozess 1 immer noch an Prozess 0 „vorbeiziehen“. Es kann somit nicht garantiert werden,
dass Prozess 0 jemals zum Zug kommt.
Wir können unsere Kripke-Struktur aber korrigieren, so dass auch Lebendigkeit erfüllt ist: Der
Prozess, der als Erster nachfragt, erhält als Erster Zugang. Hier ist das Kripke-Diagramm der
neuen Kripke-Struktur A2 :
n0 n1
c0 n1
t0 n1
n0 t1
t0 t1
t0 t1
c0 t1
n 0 c1
t 0 c1
Der mit n0 n1 beschriftete Zustand sei wieder als Anfangszustand a gewählt. Man überzeuge
sich, dass Sicherheit, Lebendigkeit und Blockade-Freiheit garantiert sind, d.h. es ist
(A2 , a) |= φ1 ∧ φ2 ∧ φ3 .
8.4.1. Äquivalenz von CTL-Formeln
Definition 8.4 Sei Var eine Menge aussagenlogischer Variablen. Weiterhin mögen φ und ψ
zu CTL(Var) gehören. Dann gilt
φ≡ψ
genau dann, wenn
(A, a) |= φ ⇐⇒ (A, a) |= ψ
für alle Kripke-Strukturen A = (A, E, L) und alle Zustände a ∈ A gilt.
Die acht Quantorenpaare lassen sich auch mit den drei Quantorenpaaren EX, EG und EU
ausdrücken.
Satz 8.1 (Einige Rechenregeln).
(a) AF φ ≡ ¬EG ¬φ,
(b) AG φ ≡ ¬EF ¬φ,
(c) EF φ ≡ E( 1 U φ),
233
8. Temporale Aussagenlogik
(d) A(φ U ψ) ≡ ¬E(¬ψ U (¬φ ∧ ¬ψ)) ∧ ¬EG¬ψ,
(e) AX φ ≡ ¬EX ¬φ.
Beweisidee Teil (a): φ gilt genau dann in jeder Berechnung irgendwann, wenn es keine Berechnung gibt für die φ nirgends gilt.
Teil (b): φ gilt genau dann in jeder Berechnung überall, wenn es keine Berechnung gibt für die
¬φ irgendwann gilt.
Teil (c): φ gilt genau dann in einer Berechnung irgendwann, wenn es eine Berechnung gibt für
die φ irgendwann gilt.
Teil (d) ist als Übungsaufgabe gestellt.
Teil (e): φ gilt genau dann in allen Nachbarzuständen, wenn es keinen Nachbarzustand gibt,
in dem ¬φ gilt.
Aufgabe 153
Zeigen Sie die folgenden Äquivalenzen:
(a) AG φ ≡ φ ∧ AX AG φ,
(b) EG φ ≡ φ ∧ EX EG φ,
(c) AF φ ≡ φ ∧ AX AF φ,
(d) EF φ ≡ φ ∧ EX EF φ,
(e) A(φ U ψ) ≡ ψ ∨ (φ ∧ AX A(φ U ψ)),
(f) E(φ U ψ) ≡ ψ ∨ (φ ∧ EX E(φ U ψ)).
Satz 8.2 Es gibt eine Konstante K > 0, so dass es zu jeder CTL-Formel φ eine äquivalente
CTL-Formel ψ mit den folgenden Eigenschaften gibt:
(a) Die Anzahl der Symbole in ψ ist beschränkt durch das K-fache der Anzahl der Symbole in
φ und
(b) nur die Quantorenpaare EX, EG, EU und AU kommen in ψ vor.
Fazit: Nach höchstens linearem Wachstum der Länge der Formel kann man sich auf vier
Quantorenpaare beschränken.
8.4.2. Effizientes Model Checking
Eine Kripke-Struktur A = (A, E, L) über der Menge Var von aussagenlogischen Variablen und
eine CTL(Var)-Formel φ ist gegeben.
Wir möchten zwar nur klären, ob (A, a0 ) |= φ für den ausgezeichneten Anfangszustand a0 gilt,
um dies aber schnell zu bewerkstelligen, tun wir mehr und bestimmen die Menge
JφKA := { a ∈ A : (A, a) |= φ}
aller potentiellen Anfangszustände a ∈ A, in denen φ gilt.
Nehmen wir zuerst an, dass φ keine Quantorenpaare besitzt, d.h. φ ist eine aussagenlogische
Formel. Um nachzuprüfen, ob (A, a) |= φ gilt, müssen wir die aussagenlogische Formel φ nur
für die von L(a) definierte Belegung Ba auswerten und das geht fix. Interessant ist also der
Fall, dass eine „echte“ CTL(Var)-Formel φ vorliegt.
Wir bearbeiten φ von innen nach außen, indem wir immer länger werdende Teilformeln von φ
auswerten. Nehmen wir also an, dass wir die Teilformeln ψ, bzw. ψ1 und ψ2 schon erfolgreich
bearbeitet haben und damit JψKA wie auch Jψ1 KA und Jψ2 KA kennen.
234
8.4. Die Semantik für CTL
Algorithmus 8.1 Model Checking für CTL-Formeln
(a) Aussagenlogische Kombinationen von ψ, ψ1 und ψ2 lassen sich mit Leichtigkeit bearbeiten.
• Wenn φ = ¬ψ, dann ist JφKA = A \ JψKA .
• Wenn zum Beispiel φ = (ψ1 ∧ ψ2 ), dann ist JφKA = Jψ1 KA ∩ Jψ2 KA .
• Die Junktoren ∨, →, ↔ und ⊕ lassen sich völlig analog behandeln.
(b) Wir können nach Satz 8.2 annehmen, dass nur die Quantorenpaare EG, EU, EX und
AU vorkommen.
• Für φ = EGψ ist festzustellen, ob die Formel ψ in mindestens einer Berechnung
immer gilt. Wir gehen wie folgt vor:
1. Berechne JψKA .
Für welche Zustände a ∈ JψKA gibt es einen in a beginnenden unendlich langen
Weg, der nur in JψKA verläuft? Ein solcher unendlich langer Weg wird von a aus
in mehreren Schritten zu einer starken Zusammenhangskomponente C laufen
und dann in C „kreisen“. Achtung: C muss „gut“ sein, d.h. wenn C nur aus
einem Zustand b besteht, dann muss b eine Eigenschleife besitzen.
2. Berechne alle starken Zusammenhangskomponenten in JψKA . In der Vorlesung
„Datenstrukturen“ wird gezeigt, dass dies schnell gelingt.
3. Es ist
JφKA = { a ∈ JψKA : es gibt einen in JψKA verlaufenden Weg, der in a beginnt
und in einer „guten“ Zusammenhangskomponente endet }.
Jetzt lässt sich JφKA fix mit Hilfe der Tiefensuche berechnen.
• Für φ = E(ψ1 U ψ2 ) führe die folgenden Schritte aus:
1. Berechne Jψ1 KA und Jψ2 KA .
Es ist zu klären für welche Zustände a es einen Weg gibt, der in a beginnt, dann
nur in Jψ1 KA verläuft und schließlich in einem Knoten aus Jψ2 KA endet.
2. Bestimme die Menge B aller Zustände in Jψ1 KA , die einen Knoten in Jψ2 KA
mit einer Kante aus E erreichen, d.h. B := { b ∈ Jψ1 KA : es gibt c ∈
Jψ2 KA mit (b, c) ∈ E }.
3. Dann ist
JφKA = { a ∈ A : a ∈ Jψ2 KA oder es gibt einen Weg von a zu einem Knoten
in B, der nur über Knoten in Jψ1 KA verläuft }
und auch diesmal lässt sich JφKA fix mit Tiefensuche berechnen.
• Für φ = EXψ ist festzustellen für welche Zustände a ∈ A die Formel ψ in einem
Nachbarn von a gilt. Wir gehen wie folgt vor:
1. Bestimme JψKA .
2. Dann ist JφKA = { a ∈ A : a besitzt einen direkten Nachfolger in JψKA }.
Und wiederum lässt sich die Bestimmung schnell bewerkstelligen.
235
8. Temporale Aussagenlogik
• Für φ = AUψ beachte die Äquivalenz A(φ U ψ) ≡ ¬E(¬ψ U (¬φ ∧ ¬ψ)) ∧ ¬EG¬ψ
aus Satz 8.1. Also ist
JAUψKA = J¬E(¬ψ U (¬φ ∧ ¬ψ))KA ∩ J¬EG¬ψKA .
Zuletzt berechne die Zustandsmengen J¬E(¬ψ U (¬φ ∧ ¬ψ))KA und J¬EG¬ψKA mit
den gerade beschriebenen Methoden.
Insgesamt haben wir gezeigt, dass Model Checking effizient durchgeführt werden kann.
8.5. Zusammenfassung und Ausblick
Im Model Checking für die temporale Aussagenlogik wird ein komplexes Hardware- oder
Software-System S durch eine Kripke-Struktur AS = (A, E, L) über einer Menge Var von
aussagenlogischen Variablen beschrieben. Um zu überprüfen, ob das System S eine gewünschte
Eigenschaft φ besitzt, ist Model Checking durchzuführen, nämlich die Zustandsmenge
JφKAS = {a ∈ A : (AS , a) |= φ }
zu bestimmen. Für die „Computational Tree Logic“ CTL kann JφKAS effizient bestimmt werden.
Man kann sogar zeigen, dass Model Checking in Zeit proportional zur Größe der Kripke-Struktur
und der Größe von φ ausgeführt werden kann. Lediglich für zu große Kripke-Strukturen ist
Model Checking zu „teuer“.
Darüber hinaus bietet CTL in vielen Anwendungen genügend Ausdruckskraft, um interessante Eigenschaften φ formalisieren zu können. Natürlich ist die Ausdruckskraft von CTL
beschränkt: Die Aussage „In allen Berechnungen gilt irgendwann immer φ“ lässt sich in
CT L nicht formalisieren. Die Formel AFGφ ist eine Formalisierung, besteht aber aus einem
Weg-Quantor und zwei temporalen Quantoren. Beachte, dass die CTL-Formel AFAGφ keine
exakte Formalisierung ist!
8.6. Literaturhinweise zu Kapitel 8
In diesem Kapitel wird Material aus den ersten vier Kapiteln des Buchs [?] von Edmund
Clarke et al. beschrieben. In der im Internet frei verfügbaren PDF-Datei „The Birth of Model
Checking“ von Clarke wird die geschichtliche Entwicklung des Model Checking erzählt, unter
dem Link http://www.cs.cmu.edu/~emc/15817-f08/lectures/lec-01_4up.pdf findet sich
ein Foliensatz zu diesem Thema.
236
9. (Un-)Vollständigkeit
KNF-SAT, das Erfüllbarkeitsproblem für aussagenlogische Formeln in konjunktiver Normalform,
ist NP-vollständig. Es gibt jedoch recht gute Algorithmen wie etwa DPLL-Algorithmen, die für
in der Praxis auftretende KNF-Formeln häufig erfolgreich sind.
Wir haben QBF, die Klasse der wahren quantifizierten Booleschen Formeln in konjunktiver
Normalform, kennengelernt. Das PSPACE-vollständige QBF ist weitaus schwieriger als KNFSAT und Heuristiken, die einen ähnlichen Erfolg wie der DPLL-Algorithmus für KNF-SAT
erreichen, sind nicht bekannt.
Allerdings können quantifzierte Boolesche Formeln φ mit n Variablen in Zeit O(|φ|2n ) auf
Wahrheit getestet werden, wenn man systematisch alle Belegungen untersucht. (|φ| bezeichnet
die Anzahl der aussagenlogischen Operatoren von φ und „steht für die Größe“ der Formel
φ.) Das Problem des automatischen Beweisens von Formeln der Prädikatenlogik ist da ein
ganz anderes Kaliber wie wir in Kürze an den Beispielen der Presburger-Arithmetik und der
Peano-Arithmetik sehen werden.
Wir setzen ein Grundwissen der Prädikatenlogik voraus, zum Beispiel ist die Behandlung der
Prädikatenlogik in der Veranstaltung „Diskrete Modellierung“ ausreichend. Zuerst zu einigen
Begriffsbildungen.
(a) Eine Signatur σ ist eine Menge, die aus Symbolen für Konstanten, Funktionen und
Relationen besteht.
(b) Eine σ-Formel besteht aus
• der aussagenlogischen Verknüpfung von Prädikaten aus σ, wobei Konstanten und
Funktionen aus Σ in die Prädikate eingesetzt werden dürfen und
• aus Existenz- und Allquantoren.
(c) Eine σ-Struktur A = (A, σ A ) besteht aus einem Universum A und Interpretationen der
Symbole aus σ.
• Sei φ eine Formel über σ. Dann schreiben wir
A |= φ,
wenn φ von A erfüllt wird.
• Sei Φ eine Menge von Formeln über σ. Dann heißt eine σ-Struktur A ein Modell
von Φ, wenn A |= φ für jede Formel φ ∈ Φ gilt.
9.1. Der Gödelsche Vollständigkeitssatz
In Satz 7.6 haben wir gezeigt, dass alle semantischen Folgerungen Φ |= φ für aussagenlogische
Formeln auch ableitbar sind, d.h. es gilt Φ `ABS φ. Gilt eine entsprechende Aussage auch für
die Prädikatenlogik? Um eine solche Frage beantworten zu können, müssen wir zuerst ein
geeignetes Beweissystem einführen.
237
9. (Un-)Vollständigkeit
Definition 9.1 Der Hilbertkalkül arbeitet nur mit der Schlussregel des Modus Ponens und
benutzt die folgenden Axiome.
1. Tautologien: Eine Formel φ ist eine Tautologie, wenn φ aus einer aussagenlogischen Tautologie entsteht, indem die aussagenlogischen Variablen durch (beliebige) Formeln der
Prädikatenlogik ersetzt werden.
Alternativ genügen die drei Axiomtypen des Beweissystems ABS, nämlich
(a) φ → (ψ → φ),
(b) (φ → (µ → ψ)) → ((φ → µ) → (φ → ψ)) und
(c) (¬φ → ¬ψ) → (ψ → φ)
für alle Formeln φ, χ, ψ der Prädikatenlogik.
2. Gleichheitsaxiome: ∀x(x = x), ∀x∀y(x = y → y = x) und ∀x∀y∀z((x = y ∧ y = z) → x = z).
Weiterhin wird gefordert, dass Funktionswerte unverändert bleiben und Relationen ihren
Wahrheitswert beibehalten, wenn Argumente durch gleiche Argumente ersetzt werden.
3. Spezialisierung: Die Formel φ([t/x]) entstehe aus der Formel φ, wenn die freie Variable x
durch den Term t ersetzt wird. Dann ist
∀xφ → φ([t/x])
für jede Formel φ, für jede freie Variable x und jeden Term t ein Axiom.
4. Generalisierung: Für jede Formel φ und jede Variable x, die nicht frei in φ vorkommt, ist
φ → ∀xφ
ein Axiom.
5. Distributivität des Allquantors: Für alle Formeln φ und ψ ist
∀x(φ → ψ) → (∀xφ → ∀xψ)
ein Axiom.
Wir präzisieren jetzt den Begriff der Ableitbarkeit mit Hilfe des Hilbertkalküls.
Definition 9.2 Sei σ eine Signatur, φ eine σ-Formel und Φ eine Menge von σ-Formeln.
(a) φ ist aus Φ ableitbar,
kurz: Φ `H φ,
wenn φ aus Φ und den Axiomen des Hilbertkalküls durch Anwendungen der Schlussregel
des Modus Ponens folgt.
(b) Wenn
A |= Φ =⇒ A |= φ
für alle σ-Strukturen A gilt, dann sagen wir, dass φ eine semantische Folgerung von Φ
ist,
kurz: Φ |= φ.
Der Gödelsche Vollständigkeitssatz zeigt, dass semantische Folgerung und Ableitbarkeit übereinstiimen und wir können Satz 7.6 verallgemeinern.
Satz 9.1 Der Gödelsche Vollständigkeitssatz
Sei σ eine Signatur, φ eine σ-Formel und Φ eine Menge von σ-Formeln. Dann gilt
Φ |= φ ⇐⇒ Φ `H φ.
238
9.2. Logische Theorien
9.2. Logische Theorien
Definition 9.3 Sei σ eine Signatur. Weiterhin sei Φ eine Formelmenge der Prädikatenlogik
und φ eine Formel der Prädikatenlogik, jeweils über der Signatur σ.
(a) Φ heißt eine logische Theorie, wenn jede aus Φ ableitbare Formel in Φ enthalten ist.
(b) Eine logische Theorie Φ ist vollständig, wenn für jede Formel φ über σ gilt
φ ∈ Φ oder ¬φ ∈ Φ.
Für jede σ-Struktur A ist
Th(A) := { φ : φ ist eine σ-Formel und A |= φ }
eine vollständige Theorie.
Beispiel 9.1 Die Presburger-Arithmetik
Die Signatur σ{+} = {0, S, +, <} sei gegeben. Dann ist
N{+} = (N, 0, Nachfolger, +, <)
die Struktur der natürlichen Zahlen mit Nachfolger(n) = n + 1, Addition und Ordnung.
Th(N{+} )
ist die additive Theorie der natürlichen Zahlen, besteht also aus allen σ{+} -Formeln, die
in N{+} wahr sind.
Besitzt Th(N{+} ) ein „übersichtliches“ Axiomensystem? Und wie schwierig ist die Auffinden
von Beweisen? Die erste Frage können wir positiv beantworten, die Antwort auf die zweite
Frage ist leider negativ.
Die Axiome der Presburger-Axiome lauten:
(P 1) S(x) 6= 0,
(P 2) S(x) = S(y) → x = y,
(P 3) x + 0 = x, (P 4) x + S(y) = S(x + y),
(P 5) ¬(x < 0),
(P 6) x < S(y) ↔ x < y ∨ x = y,
(P 7) x < y ∨ x = y ∨ y < x,
Weiterhin wird das Induktionsaxiom
φ(0) ∧ ∀x(φ(x) → φ(S(x))) → φ
für jede σ{+} -Formel φ gefordert.
Definition 9.4 Die Presburger-Arithmetik PR-A ist die Menge aller Formeln, die aus den
Axiomen der Presburger-Arithmetik ableitbar ist.
Man kann sogar zeigen, dass die Presburger-Arithmetik PR-A eine vollständige Theorie ist!
Die additive Theorie der natürlichen Zahlen lässt sich also über die Axiome der PresburgerArithmetik in den Rechner „packen“.
Ende von Beispiel 9.1
239
9. (Un-)Vollständigkeit
Beispiel 9.2 Die Peano-Arithmetik
Diesmal arbeiten wir zusätzlich noch mit der Multiplikation, benutzen also die Signatur
σ{+,∗} = {0, S, +, ∗, <}. Dann ist
N{+,∗} = (N, 0, Nachfolger, +, ·, <)
die Struktur der natürlichen Zahlen mit Nachfolger(n) = n + 1, Addition, Multiplikation und
Ordnung.
Th(N{+,∗} )
ist die Theorie der natürlichen Zahlen bzw. die „Zahlentheorie“, besteht also aus
allen σ{+,∗} -Formeln, die in N{+,∗} wahr sind. Besitzt die Zahlentheorie ein „übersichtliches“
Axiomensystem? Und was heißt übersichtlich?
Wir versuchen eine positive Antwort auf die erste Frage mit Hilfe der Peano-Arithmetik, die
aus den folgenden Axiomen besteht:
(P 1) S(x) 6= 0,
(P 2) S(x) = S(y) → x = y,
(P 3) x + 0 = x, (P 4) x + S(y) = S(x + y),
(P 5) x ∗ 0 = 0,
(P 6) x ∗ S(y) = x ∗ y + x,
(P 7) ¬(x < 0),
(P 8) x < S(y) ↔ x < y ∨ x = y,
(P 9) x < y ∨ x = y ∨ y < x,
Weiterhin wird für jede σ{+,∗} -Formel φ das Induktionsaxiom
φ(0) ∧ ∀x(φ(x) → φ(S(x))) → φ
gefordert.
Definition 9.5 PE-A ist die Menge aller Formeln der Prädikatenlogik, die aus den Axiomen
der Peano-Arithmetik ableitbar sind.
Ende von Beispiel 9.2
Wir haben vollständige Beweissysteme für die Aussagenlogik wie auch für KNF-Formeln
erhalten. Lassen sich auch komplexere „Realitäten“ durch logische Theorien beschreiben?
Diese Frage lässt sich mit Hilfe der Presburger-Arithmetik positiv für Eigenschaften der
Addition natürlicher Zahlen beantworten. Allerdings ist die für das Auffinden von Beweisen
notwendige Laufzeit gruselig wie wir später sehen werden.
Betrachten wir Aussagen der Zahlentheorie, also Aussagen, die sowohl über Addition wie
auch Multiplikation „sprechen“, verlieren wir sogar die Möglichkeit „alles Wahre“ auch zeigen
zu können: Der Gödelsche Unvollständigkeitssatz wird zeigen, dass es kein „vernünftiges“
Axiomensystem für die Zahlentheorie gibt. Der Gödelsche Vollständigkeitssatz verallgemeinert
zwar unseren Vollständigkeitssatz (Satz 7.6) von der Aussagenlogik auf die Prädikatenlogik,
aber besagt „nur“, dass Ableitbarkeit und semantische Folgerung übereinstimmen.
Aufgabe 154
Formuliere die Aussagen
(a) „x teilt y“,
(b) „x ist eine Primzahl“,
240
9.2. Logische Theorien
(c) „Es gibt unendlich viele Primzahlzwillinge“
als σ{+,∗} −Formeln.
Will man also zum Beispiel mit einem automatischen Beweissystem zeigen, dass es unendlich
viele Primzahlzwillinge gibt, dann ist es nicht ausgeschlossen, dass es in einigen Modellen
der Peano-Arithmetik unendlich viele Primzahlzwillinge gibt, in anderen hingegen nicht: In
einem solchen Fall würde weder die Existenz nur endlich vieler noch die Existenz unendlich
vieler Primzahlzwillinge aus den Axiomen der Peano-Arithmetik folgen. Der Gödelsche Unvollständigkeitssatz sagt also im Wesentlichen, dass es kein vernünftiges Axiomensystem für
die Zahlentheorie gibt, das die Addition und Multiplikation in N präzise genug beschreibt: Es
wird immer „nicht-standard Modelle“ mit „nicht-standard Eigenschaften“ geben.
9.2.1. Die Komplexität der Presburger-Arithmetik
Wir führen die gruselige Komplexitätsklasse E aller in Exponentialzeit lösbaren Entscheidungsprobleme ein.
Definition 9.6 E =
dungsprobleme.
S
kn
k∈N Dtime(2 )
ist die Klasse aller in Exponentialzeit lösbaren Entschei-
Analog zur Definition N P -harter Sprachen definieren wir E-harte Sprachen mit Hilfe der
polynomiellen Reduktion.
Definition 9.7 Eine Sprache L heißt hart für E genau dann, wenn K ≤P L für jede Sprache
K ∈ E gilt.
Aufgabe 155
Zeige: Wenn eine Sprache L hart für E ist, dann liegt L nicht in P.
Hinweis: Es kann benutzt werden, dass Dtime(2n ) eine echte Teilmenge von Dtime(22n ) ist.
Satz 9.2 Die Presburger-Arithmetik PR-A ist hart für E. Insbesondere gibt es keine Turingmaschine, die genau die wahren Formeln von PR-A in polynomieller Zeit erkennt.
Beweis: Sei M eine deterministische Turingmaschine, die stets nach T = 2α·n Schritten hält.
Wir erwähnen ohne Beweis, dass eine Formel φM,w der Peano-Arithmetik konstruiert werden
kann, so dass φM,w genau dann wahr ist, wenn M die Eingabe w akzeptiert. Leider ist φM,w
eine Formel der Peano-Arithmetik und enthält damit das Prädikat für die Multiplikation.
Wir beachten aber, dass wir die Existenz- und Allquantoren von φM,w durch die beschränkten
2
2
Quantoren ∃x ≤ 2O(T ) und ∀x ≤ 2O(T ) ersetzen können. Warum? Die Variablen der Formel
kodieren die Konfigurationen bzw. die Konfigurationenfolgen von M und eine Konfiguration K
von M wird durch eine natürliche Zahl cK ≤ 2O(T ) kodiert; eine Folge von T Konfigurationen
2
wird damit durch eine Zahl der Größe höchstens (2O(T ) )T = 2O(T ) kodiert.
Behauptung: Die Formel
mn (a, b, c) := (a · b = c ∧ a ≤ pn )
kann für ein (bestimmtes) pn ≥ 22 durch eine Formel m∗n (a, b, c) der Presburger-Arithmetik
ausgedrückt werden. m∗n (a, b, c) besitzt lineare Länge in n und kann in polynomieller Zeit
bestimmt werden.
n
241
9. (Un-)Vollständigkeit
Satz 9.2 folgt aus der Behauptung, da wir eine Formel φ∗M,w der Presburger-Arithmetik in
polynomieller Zeit (in der Länge von w) konstruieren können, so dass φ∗M,w genau dann wahr
ist, wenn M die Eingabe w akzeptiert.
Beweis der Behauptung: Wir definieren die Formeln m∗n durch Induktion über n. Für
0
n = 0 setzen wir p0 = 22 = 2 und definieren
m∗0 (a, b, c) := ((a = 0 ∧ c = 0) ∨ (a = S(0) ∧ c = b) ∨ (a = S(S(0)) ∧ c = b + b)).
Wir können jetzt annehmen, dass m∗n bereits definiert ist. Beachte zuerst, dass
a · b = c ⇔ ∃a1 ∃a2 ∃a3 ∃a4 (((a1 · a2 + a3 + a4 ) · b = c) ∧ (a1 · a2 + a3 + a4 = a)).
√
Die zentrale Idee ist, dass wir a1 , a2 , a3 , a4 ≤ b ac annehmen können. (Warum? Wenn a = b2 −c
√
für 1 ≤ c < 2b−1, dann wähle a1 = a2 = b ac = b−1 und b2 −2b+1 ≤ a1 ·a2 +a3 +a4 ≤ b2 −1
folgt.) Wir können also statt der einen Multiplikation a·b = c großer Zahlen die Multiplikationen
a1 · a2 · b, a3 · b, a4 · b und a1 · a2 für kleinere Zahlen durchführen.
Schließlich brechen wir die Dreier-Multiplikation a1 · a2 · b in Zweier-Multiplikationen auf,
nämlich
a1 · a2 · b = c1 ⇔ ∃c2 (a1 · c2 = c1 ∧ a2 · b = c2 ).
Insgesamt haben wir also erhalten, dass
a · b = c ⇔ ∃ a1 , a2 , a3 , a4 , c1 , c2 , c3 , c4 , d (c1 + c3 + c4 = c ∧ d + a3 + a4 = a
(a1 · c2 = c1 ∧ a2 · b = c2 ) ∧ a3 · b = c3 ∧ a4 · b = c4 ∧ a1 · a2 = d).
∧
√
Wir wählen pn+1 so, dass b pn+1 c = pn . Beachte, dass damit die Rekursion p0 = 2, pn+1 ≥ p2n
n
folgt und die Ungleichung pn ≥ 22 ist erzwungen.
Wenn wir jetzt allerdings die aufgeführten Multiplikationen durch die Formeln m∗n ersetzen,
dann erhalten wir die Längenrekursion
L(n + 1) = 5 · L(n) + O(1)
und damit leider auch eine exponentielle Länge in n. Wir benutzen All-Quantoren, um die
Länge drastisch zu reduzieren. Wir setzen
m∗n+1 (a, b, c) := ∃ a1 , a2 , a3 , a4 , c1 , c2 , c3 , c4 , d ∀ e, f, g
(c1 + c3 + c4 = c ∧ d + a3 + a4 = a) ∧ [((e = a1 ∧ f = c2 ∧ g = c1 )
∨
(e = a2 ∧ f = b ∧ g = c2 ) ∨ (e = a3 ∧ f = b ∧ g = c3 )
∨
(e = a4 ∧ f = b ∧ g = c4 ) ∨ (e = a1 ∧ f = a2 ∧ g = d))
→ m∗n (e, f, g)].
Offensichtlich hat m∗n damit eine lineare Länge und m∗n kann in polynomieller Zeit konstruiert
werden.
Bemerkung 9.1 Tatsächlich ist die Situation sogar noch schlimmer als in Satz 9.2 beschrieben,
q·n
denn PR-A ist sogar hart für Ntime(22 ) für eine positive rationale Zahl q. (Zur Definition des
Begriffs harter Sprachen wird auch hier die polynomielle Reduktion benutzt.) Als „positives“
Ergebnis ist nur die Inklusion
2c·n
PR-A ∈ Dtime(22 )
für eine positive Konstante c bekannt. Die Komplexität der Presburger-Arithmetik ist also
„irgendwo“ zwischen doppelt und dreifach exponentieller Laufzeit anzusiedeln.
242
9.2. Logische Theorien
9.2.2. Der Gödelsche Unvollständigkeitssatz
Frage: Gibt es wahre zahlentheoretische Aussagen, die in der Peano-Arithmetik nicht beweisbar
sind? Stimmen also Wahrheit und Beweisbarkeit nicht überein?
Die Ausdruckskraft der Peano-Arithmetik ist enorm. So kann man zum Beispiel zeigen:
Satz 9.3 Für jede rekursiv aufzählbare Sprache L über dem Alphabet Σ = {0, 1} gibt es eine
Formel ϕL der Peano-Arithmetik, so dass
x ∈ L ⇔ ϕL (x) ist wahr in der Struktur der natürlichen Zahlen
gilt.
Beweisskizze: Sei M eine deterministische Turingmaschine und sei w eine beliebige Eingabe
der Länge n. Wir beschreiben die Berechnung von M auf Eingabe w durch eine Folge von
Konfigurationen. Die Konfiguration Kt zum Zeitpunkt t besteht aus der Position des Kopfes
zum Zeitpunkt t, dem gegenwärtigen Zustand und dem Inhalt des Bands.
Wir möchten Konfigurationen und Konfigurationenfolgen durch natürliche Zahlen kodieren.
Dazu genügt es offensichtlich, Worte über einem Alphabet durch natürliche Zahlen zu kodieren,
denn eine Konfiguration K können wir darstellen durch das Wort
K = γ1 · · · γi · q · γi+1 · · · γm ,
wobei die Symbole γj dem Arbeitsalphabet angehören und q ein Zustand ist; den Zustand q
haben wir vor der gegenwärtig besuchten Zelle eingefügt. Ein Wort u = u1 · · · uk über einem
Alphabet Σ lässt sich aber gemäss
code(u) =
k
X
code(ui ) · (|Σ| + 1)i−1
i=1
durch eine natürliche Zahl der Grösse 2O(k) kodieren. (Wenn Σ = {σ1 , . . . , σr }, dann setzen
wir code(σi ) = i.)
Natürlich müssen wir mit Formeln der Peano-Arithmetik die Kodierung von Worten (bzw. die
Kodierung von Konfigurationen und Konfigurationenfolgen) beschreiben. Hier hilft:
Lemma 9.4 Sei M eine Turingmaschine. Es gibt Formeln φi der Peano-Arithmetik, so dass
(1) φ1 (l) genau dann wahr ist, wenn die Zahl l eine Konfiguration von M kodiert,
(2) φ2 (l1 , l2 ) genau dann wahr ist, wenn die Zahlen l1 und l2 aufeinanderfolgende Konfigurationen von M kodieren,
(3) φ3 (l) genau dann wahr ist, wenn die Zahl l eine Folge (beliebiger Länge) von aufeinanderfolgenden Konfigurationen von M kodiert,
(4) φ4 (l, l1 , l2 , l3 ) genau dann wahr ist, wenn l eine Folge kodiert, die die Konkatenation der
von l1 , l2 und l3 kodierten Folgen ist,
(5) φ5 (l, l1 , l2 ) genau dann wahr ist, wenn l eine Folge von aufeinanderfolgenden Konfigurationen von M ist und wenn l die Konfiguration l1 als erste und die Konfiguration l2 als
letzte Konfiguration besitzt.
243
9. (Un-)Vollständigkeit
Beweis (1)-(4): sind als Übungsaufgaben gestellt. Schließlich ist
φ5 (l, l1 , l2 ) ↔ φ3 (l) ∧ φ1 (l1 ) ∧ φ1 (l2 ) ∧ ∃ l3 ( φ3 (l3 ) ∧ φ4 (l, l1 , l3 , l2 ) )
und damit ist (5) gezeigt.
Aufgabe 156
Gib jeweils Formeln der Peano-Arithmetik an.
(a) φa (x, y): y ist ein Teiler von x.
(b) φb (x): x ist eine Potenz der festen Primzahl p.
(c) φc (z): z kodiert ein Wort.
Dabei sollen Worte w über einem Alphabet Σ = {1, . . . , p − 1} durch die Zahl
eine Primzahl, auch das leere Wort ist erlaubt).
P
i
wi pi kodiert werden (p sei
(d) φd (z, y): z kodiert ein Wort w und w enthält den Buchstaben y nicht.
Aufgabe 157
Gib jeweils Formeln der Peano-Arithmetik an.
(a) φe (x, y, z): x, y, z kodieren Worte w, w1 , w2 und w ist die Konkatenation von w1 und w2 .
(b) φ1 (x): x kodiert eine Konfiguration einer 1-Band Turingmaschine. Dabei ist eine Konfiguration gegeben
durch die Konkatenation von drei Worten w1 , w2 , w3 , wobei w1 der Inhalt der linken Bandhälfte, w2 der Zustand,
w3 der Inhalt der rechten Bandhälfte ist.
(c) φf (x): x kodiert eine Folge von Konfigurationen, d.h. ein Wort, dass aus durch ein spezielles Symbol
getrennten Konfigurationen besteht (die Übergangsfunktion muss dabei nicht beachtet werden).
Offensichtlich können wir annehmen, dass M genau dann hält, wenn der Zustand q1 erreicht
wird. Somit akzeptiert M genau dann die Eingabe w, wenn
∃ l (l kodiert eine Folge aufeinanderfolgender Konfigurationen von M
∧ die erste Konfiguration von l ist ein Wort der Form q0 · w
∧ die letzte Konfiguration von l ist ein Wort aus q1 · 1).
Zur Formalisierung benutzen wir natürlich die Formel φ5 . Die zusätzlichen Forderungen an
die erste und letzte Konfiguration sind einfach zu beschreiben (wie?).
Satz 9.3 ist damit gezeigt.
Wenn Wahrheit und Beweisbarkeit übereinstimmen, folgt also
x ∈ L ⇔ ϕL (x) ist aus den Axiomen der Peano Arithmetik beweisbar
und ebenso natürlich
x 6∈ L ⇔ ¬ϕL (x) ist wahr.
⇔ (¬ϕL (x)) ist beweisbar.
Also ist
L̄ = {x|(¬ϕL (x)) ist beweisbar }
und damit ist L̄ rekursiv aufzählbar. Warum?
Aufgabe 158
Sei Φ eine rekursiv aufzählbare Menge von Formeln der Zahlentheorie. Dann ist die Menge der aus Φ beweisbaren
Formeln rekursiv aufzählbar.
244
9.2. Logische Theorien
Also ist für jede rekursiv aufzählbare Sprache L auch ihr Komplement rekursiv aufzählbar: Jede
rekursiv aufzählbare Sprache ist auch entscheidbar! Wir haben einen Widerspruch erhalten
und damit gezeigt, dass nur eine echte Teilmenge aller wahren Formeln auch beweisbar ist.
Nun könnte man zu den Axiomen der Peano Arithmetik weitere wahre Formeln hinzunehmen
und hoffen, dass das neue Axiomensystem Φ∗ „vollständig“ ist, also für alle wahren Formeln
auch Beweise zulässt. Mitnichten, denn entweder ist Φ∗ nicht rekursiv aufzählbar (und wir
können noch nicht einmal verifizieren, dass ein Axiom zu Φ∗ gehört) oder es gibt weiterhin
wahre, aber nicht beweisbare Aussagen.
Satz 9.5 Gödelscher Unvollständigkeitssatz.
Sei Φ eine rekursiv aufzählbare Menge von wahren Formeln der Zahlentheorie, wobei PE-A
⊆ Φ gelte. Dann gibt es eine wahre Formel, die nicht aus Φ ableitbar ist.
Beweis: Wenn Wahrheit mit Beweisbarkeit zusammenfällt, dann können wir die obigen
Argumente wieder anwenden. (Wir benötigen die rekursive Aufzählbarkeit von Φ, um wieder
schließen zu können, dass die Menge L̄ rekursiv aufzählbar ist).
Die Sprache aller für die natürlichen Zahlen wahren Formeln ist also nicht nur nicht entscheidbar,
sondern es gibt sogar kein (rekursiv aufzählbares) Axiomensystem, das erlaubt alle wahren
Formeln abzuleiten:
Komplexe Wirklichkeiten lassen sich nicht formal beschreiben!
245
Herunterladen