THEORETISCHE INFORMATIK
|
|
|
- Teresa Grosser
- vor 10 Jahren
- Abrufe
Transkript
1 THEORETISCHE INFORMATIK Vorlesungsskript Jiří Adámek Institut für Theoretische Informatik Technische Universität Braunschweig Januar 2014
2
3 Inhaltsverzeichnis 1 Endliche Automaten Mathematische Grundbegriffe Definition der endlichen Automaten Nichtdeterministische Automaten Reguläre Ausdrücke Der Brzozowsky-DEA Äquivalente Zustände Konstruktion eines Quotient-DEA Minimierung von Automaten Beweise der Regularität Algorithmische Aspekte von Automaten Algorithmus für Zugehörigkeit zu einer regulären Sprache Algorithmus für verschiedene Darstellungen Eigenschaften regulärer Sprachen Minimierung von Automaten Kontextfreie Sprachen und Kellerautomaten Die Idee einer formalen Grammatik Kontextfreie Grammatik Anwendungen von kontextfreien Grammatiken Ableitungsbäume Kontextfreie und reguläre Sprachen Eigenschaften kontextfreier Sprachen Nullierbare Variablen Chomsky-Normalform Algorithmen für kontextfreie Sprachen Kellerautomaten Kellerautomaten und kontextfreie Sprachen Turingmaschinen Definition einer Turingmaschine i
4 ii INHALTSVERZEICHNIS 3.2 Modifikationen von Turingmaschinen TM mit mehreren finalen Zuständen TM mit zusätzlichem Gedächtnis TM mit erweitertem Bandalphabet TM mit mehrspurigem Band TM mit mehreren Bändern Nichtdeterministische Turingmaschinen Rekursiv aufzählbare Sprachen Rekursive Sprachen Church-Turing-These, rekursive Funktionen und Grammatiken Berechenbare Funktionen Primitive Rekursion µ-rekursive Funktionen Grammatiken und Turingmaschinen Unentscheidbare Probleme Universelle Turingmaschine Das Halteproblem Ein Rechner als Turing-Maschine Unentscheidbare Probleme Das Akzeptanzproblem Akzeptanz des leeren Wortes Ist eine TM ein Algorithmus? Das Problem von hello world Programmen Satz von Rice Minimierung von Turingmaschinen Komplexität von Algorithmen Beispiele effizienter Algorithmen Komplexitätsklasse P Polynomiale Reduktion Robustheit der Klasse P TM mit zusätzlichem Gedächtnis TM mit mehrspurigem Band Mehr-Band TM Komplexitätsklasse N P N P-Vollständigkeit Weitere N P-vollständige Probleme Raumkomplexität Raumkomplexität von mehr-band-tm
5 Kapitel 1 Endliche Automaten kapea In diesem Kapitel wird das einfachste Maschinenmodell eingeführt, das wir in diesem Skript untersuchen werden: die endlichen Automaten. Wie bei den realistischeren Modellen (Kellerautomaten, Turingmaschinen, usw.), die in den folgenden Kapiteln behandelt werden, gibt es auch zwei Typen von endlichen Automaten: die, die formale Sprachen akzeptieren und die, die Funktionen berechnen. Eine formale Sprache ist nichts anderes als eine Menge von Wörtern, die über einem Alphabet Σ gebildet werden, z. B. über dem binären Alphabet Σ = {0, 1}. Sie repräsentieren für uns alle Entscheidungsprobleme. Beispiel: Hat ein gegebener Graph G eine Clique von 14 Elementen? Das ist ein Entscheidungsproblem: die Antwort auf jede Eingabe, die einen Graphen codiert, ist JA oder NEIN. Es gibt verschiedene Codierungsmöglichkeiten für Graphen über dem Alphabet {0, 1} (z. B. als Liste aller Knoten und Kanten oder als Adjazenzmatrix zwischen Knoten und Kanten), aber für jede feste Codierung c läßt sich die Antwort auf die obige Frage auf folgende Weise ersetzen: L sei die formale Sprache aller Codes der Graphen mit Antwort JA, also L = { c(g) G ist ein Graph mit einer Clique von 14 Elementen }. Wir fragen dann, ob ein gegebenes Wort zu der Sprache L gehört. Diese einfache Formulierung ermöglicht es, dass wir uns weiterhin mit formalen Sprachen anstatt Entscheidungsproblemen beschäftigen können. So müssen wir nicht mehr die verschiedenen Codierungen der Eingaben diskutieren, sondern können annehmen, dass vorher eine geeignete Codierung vereinbart wurde. Nicht alle Probleme sind Entscheidungsprobleme, oft ist ein Ergebnis zu berechnen, anstatt eine Frage mit JA oder NEIN zu beantworten. Beispiel: Gegeben ist ein Graph G, finde eine Clique mit 14 Elementen. Was hier erwartet wird, ist eine Funktion f, die jedem binären Wort w = c(g), wobei G ein Graph mit einer Clique von 14 Elementen ist, ein Wort f(w), das eine Codierung einer konkreten Clique ist, zuordnet. Auch die Berechnungsprobleme haben viel mit den formalen Sprachen zu tun z. B. ist der Definitionsbereich unserer Funktion f genau die oben erwähnte formale Sprache L. Wir werden also Maschinen untersuchen, die entweder formale Sprachen erkennen oder Funktionen zwischen formalen Sprachen berechnen. Wir beginnen mit den sehr simplen, aber für einige Anwendungen noch hinreichenden, endlichen Automa- 1
6 2 KAPITEL 1. ENDLICHE AUTOMATEN ten. Ihre Theorie ist klarer als die der komplizierteren Maschinen, die wir später einführen. Vorher geben wir noch kurz einige Grundbegriffe an, die im ganzen Skript eine wichtige Rolle spielen. 1.1 Mathematische Grundbegriffe (a) Mengen Eine Menge kann durch eine Aufzählung ihrer Elemente gegeben werden, z. B.: A = {2} nur ein Element, 2, B = (leere Menge) kein Element, C = {a, b, c, 2} oder durch eine erzeugende Eigenschaft P in der Form {x; x hat Eigenschaft P }, z. B.: A = {x; x ist eine gerade Primzahl}, = {x; x x}. Für unendliche Mengen gibt es nur die zweite Variante. Wichtiges Beispiel: N bezeichnet die Menge aller natürlichen Zahlen. In diesem Skript ist 0 eine natürliche Zahl, also N = {0, 1, 2,...}. Eine Teilmenge einer Menge A ist eine Menge B mit der Eigenschaft, dass x B x A. Notation: B A. Wir benutzen die übliche Notation für die Mengenoperationen: A B A B A B A B Vereinigung, Durchschnitt, Komplement, A B = {x; x A und x B}, Kartesisches Produkt, A B = {(x, y); x A und y B}.
7 1.1. MATHEMATISCHE GRUNDBEGRIFFE 3 (b) Relationen und Funktionen Eine Relation zwischen zwei Mengen A und B ist eine Menge R von Paaren (a, b), wobei a A und b B gilt. Wir sagen, dass a in Relation R zu b steht und schreiben arb. Formal ist eine Relation R dasselbe wie eine Teilmenge von A B. Im Fall A = B nennen wir R eine Relation auf der Menge A. Diese heißt reflexiv, falls ara für alle a A gilt, und transitiv, falls aus arb und brc folgt arc (a, b, c A) Für jede Relation R auf der Menge A bezeichnen wir mit R die kleinste reflexive und transitive Relation, die R enthält, die sogenannte reflexive transitive Hülle von R. Also gilt für zwei Elemente a, b aus A: ar b genau wenn a = b oder es gibt a = c 1, c 2,..., c n = b in A mit c i Rc i+1 für i = 1,..., n 1 Eine Funktion f A B ist eine Relation f A B mit der Eigenschaft, dass es für jedes Element a A genau ein Element b B gibt, mit dem a in Relation steht; das bezeichnen wir wie üblich mit f(a) = b. A heißt der Urbildbereich oder Definitionsbereich und B der Wertebereich der Funktion f. Ein schwächerer Begriff ist der einer partiellen Funktion f A B: das ist eine Relation, die für jedes Element a A höchstens ein Element b B hat, das in Relation zu a steht. Funktionen nennen wir manchmal auch totale Funktionen, wenn wir betonen wollen, dass wir sie von den partiellen Funktionen unterscheiden. Beispiel 1. Die Nachfolgerfunktion ist eine (totale) Funktion suc: N N. Die Vorgängerfunktion ist dagegen eine partielle Funktion pred: N N, die durch pred(n) = n 1 für alle n 1 definiert ist (und pred(0) ist nicht definiert). Funktionen zweier Variablen lassen sich als (übliche) Funktionen formalisieren, deren Definitionsbereich ein kartesisches Produkt ist. Also ist f A B C eine Funktion, die Variablen aus A und B nimmt und ihnen Werte in C zuordnet.
8 4 KAPITEL 1. ENDLICHE AUTOMATEN (c) Wörter Eine nichtleere endliche Menge heißt auch Alphabet und ihre Elemente werden auch Buchstaben genannt. Beispiel: das binäre Alphabet ist die Menge mit zwei Buchstaben, 0 und 1. Falls Σ ein Alphabet ist und n eine natürliche Zahl, so wird ein geordnetes n-tupel von Elementen aus Σ als Wort der Länge n über dem Alphabet Σ bezeichnet. Wir schreiben die Wörter, etwas informell, ohne Kommas oder Klammern einfach als a für a Σ (Wörter der Länge 1) ab für a, b Σ (Wörter der Länge 2) usw. Der Fall n = 0 entspricht dem leeren Wort, das mit ε bezeichnet wird. Für die Länge eines Wortes w schreiben wir z. B. ε = 0, ab = 2 usw. w, Die Menge aller (endlichen!) Wörter über dem Alphabet Σ bezeichnen wir mit Σ. Beispiel: für das binäre Alphabet Σ = {0, 1} gilt Σ = {ɛ, 0, 1, 00, 01, 10, 11, 000,... }. Die Konkatenation zweier Wörter u = a 1 a 2... a n und v = b 1 b 2... b m ist das Wort uv = a 1 a 2... a n b 1 b 2... b m (ohne Lücke geschrieben, denn Lücke kann selbst ein Symbol in Σ sein). Vereinbarung. Weiter nehmen wir immer an, daß jedes Alphabet, das hier betrachtet wird, die beiden Symbole ε (leeres Wort) und # (Blankzeichen) nicht als Elemente enthält. Das vermeidet Unklarheiten des Typs, ob εε die Konkatenation zweier leerer Wörter ist (also εε = ε), oder ein Wort der Länge 2 die zweite Variante schließen wir hier aus. Darüberhinaus nehmen wir an, dass für zwei Elemente a b des Alphabets, b kein Wort mit Präfix a ist. Also ist beispielsweise {0, 1, 13} kein Alphabet während {0, 1, 24} eines ist. (d) Formale Sprachen Eine formale Sprache ist eine Menge von Wörtern. Genauer: eine formale Sprache über dem Alphabet Σ ist das gleiche wie eine Teilmenge L der Menge Σ, L Σ. Beispiel: Σ selbst ist eine formale Sprache, aber auch ist eine. Die Menge L aller binären Codierungen der Graphen, die eine Clique mit 14 Elementen haben, ist eine formale Sprache L {0, 1}.
9 1.2. DEFINITION DER ENDLICHEN AUTOMATEN 5 (e) Graphen Ein gerichteter Graph ist eine Menge V (von Knoten) zusammen mit einer Relation E auf V, d.h. E V V. Die Paare (a, b) E heißen Kanten des Graphen. Beispiel: b a c bezeichnet den gerichteten Graphen mit den Knoten a, b, c und den Kanten (a, b), (b, c), (c, b) und (c, c). Falls die Kanten oder Knoten mit Symbolen eines Alphabets M bezeichnet werden, sprechen wir von markierten Graphen. Konkreter ist ein kantenmarkierter Graph ein Tripel (V, E, f), wobei (V, E) ein gerichteter Graph und f E M eine Funktion ist. Beispiel: bezeichnet den obigen Graphen mit der Markierung a 0 b 0 1 c f V {0, 1} mit dem Wert 0 für (a, b) und (b, c) und dem Wert 1 für (b, c) und (c, c). 1 sectdea 1.2 Definition der endlichen Automaten Reale Rechner bestehen aus einem Prozessor, der sich in einem von endlich vielen Zuständen befindet, einem Speicher und einer Ein-/Ausgabe-Einheit. Falls der Speicher beliebig erweitert werden kann, betrachten wir ihn als potentiell unendlich. Wenn aber keine Erweiterung möglich ist, können wir die Zustände des Speichers auch als globale Zustände des Rechners betrachten. Dann hat der Rechner also nur endlich viele Zustände. Wir befassen uns jetzt mit einem solchen Rechner, der noch dazu die Eingabe mit einem read-only Kopf bearbeitet, der sich systematisch von links nach rechts bewegt und das Ausgabealphabet {JA, NEIN} hat, so dass wir einfach zwei Typen von Zuständen unterscheiden: die finalen Zustände (Antwort JA) und die nicht finalen (Antwort NEIN). Mathematisch läßt sich solch eine einfache Maschine dadurch beschreiben, dass wir für jedes Paar (q, s) q - Zustand, s - Eingabesymbol den nächsten Zustand δ(q, s) bestimmen. Sei also Q die Menge aller Zustände und Σ das Eingabealphabet. Dann beschreibt die Übergangsfunktion δ Q Σ Q
10 6 KAPITEL 1. ENDLICHE AUTOMATEN die Arbeitsweise der Maschine. Wir gehen davon aus, dass die Bearbeitung der Eingabe immer in demselben (initialen) Zustand beginnt. Das führt zur folgenden Definition: Definition. Ein deterministischer endlicher Automat (DEA) ist ein Fünftupel A = (Q, Σ, δ, q 0, F ), wobei Q Σ δ Q Σ Q q 0 Q eine endliche Zustandsmenge, ein Eingabealphabet, die Übergangsfunktion, der Initialzustand und F Q die Menge aller akzeptierender (oder finaler) Zustände ist Notation. Statt δ(q, s) = q schreibt man auch q s q oder Wir benutzen auch kennzeichnen: (q, s) q., um den Initialzustand und die finalen Zustände zu q Initialzustand q Finaler Zustand bspdea Beispiel 1. Sei A = ({q 0, q 1, q 2 }, {0, 1}, δ, q 0, {q 2 }) der Automat, dessen Übergangsfunktion δ wie folgt definiert ist: (q 0, 0) q 0 (q 0, 1) q 1 (q 1, 0) q 2 (q 1, 1) q 1 (q 2, 0) q 1 (q 2, 1) q 0 Diesen Automaten kann man durch den folgenden markierten Graphen repräsentieren: 0 1 q 0 1 q q 1
11 1.2. DEFINITION DER ENDLICHEN AUTOMATEN 7 Das Wort 0110 wird akzeptiert, denn der Initialzustand q 0 wird dadurch in einen finalen Zustand überführt. Das Wort wird nicht akzeptiert. q 0 0 q0 1 q1 1 q1 0 q2 F. Definition. 1. Eine Konfiguration eines DEA A = (Q, Σ, δ, q 0, F ) ist ein Paar (q, w), wobei q ein Zustand und w ein Wort über Σ ist (der momentane Zustand und der noch nicht gelesene Teil des Eingabewortes). Konfigurationen (q 0, w) heißen Initialkonfigurationen und Konfigurationen (q, ε) heißen Finalkonfigurationen. 2. Für jede Konfiguration (q, w) mit w = s 1 s 2... s n heißt die Konfiguration (q, w ) mit q = δ(q, s 1 ) und w = s 2... s n die Folgekonfiguration, und wir bezeichnen dies mit dem Symbol (q, w) (q, w ). bspdea0110 Kürzer: (q, s 1 s 2... s n ) (δ(q, s 1 ), s 2... s n ). Beispiel 1 (Fortsetzung) Der Automat aus Beispiel 1 berechnet das Wort 0110 durch die folgende Reihe von Konfigurationen: (q 0, 0110) (q 0, 110) (q 1, 10) (q 1, 0) (q 2, ε) Bemerkung 1. Das kartesische Produkt Q Σ ist also die Menge aller möglichen Konfigurationen und (Folgekonfiguration) ist eine Relation auf dieser Menge. Wir bezeichnen durch die reflexive und transitive Hülle dieser Relation. Für zwei Konfigurationen (q, w) und (q, w ) aus Q Σ gilt demzufolge (q, w) (q, w ), wenn eine Berechnung, die in der Konfiguration (q, w) anfängt, endet in der Konfiguration (q, w ). Dies gilt genau dann, wenn entweder (q, w) = (q, w ) ist oder Konfigurationen (q 1, w 1 ),..., (q n, w n ) existieren, so dass (q, w) = (q 1, w 1 ), (q, w ) = (q n, w n ) und (q 1, w 1 ) (q 2, w 2 )... (q n, w n ) gilt. Die Liste der Konfigurationen heißt Berechnung von (q, w ) aus (q, w). (q i, w i ), i = 1,..., n Definition. Ein DEA A = (Q, Σ, δ, q 0, F ) akzeptiert ein Wort w über Σ, falls die Initialkonfiguration (q 0, w) zu einer Berechnung mit Endkonfiguration (q, ε) führt, wobei q ein finaler Zustand ist. Das heißt, falls es einen Zustand q F gibt mit (q 0, w) (q, ε). Die Sprache aller Wörter, die A akzeptiert, wird mit L(A) bezeichnet und heißt die von A akzeptierte Sprache. Kurz: L(A) = {w Σ ; es gibt q F mit (q 0, w) (q, ε)}
12 8 KAPITEL 1. ENDLICHE AUTOMATEN Beispiel 2. Ist eine Zahl gerade? Dies ist die Sprache aller Wörter in Σ = {0, 1,..., 9}, die folgende Eigenschaften erfüllen: (a) die letzte Ziffer ist 0, 2, 4, 6, 8 (b) wenn die erste Ziffer 0 ist, dann ist die Wortlänge 1 0 q 1 0,1,...,9 0,1,...,9 q 2 q 0 2,4,6,8 q 3 1,3,5,7,9 2,4,6,8 q 4 1,3,5,7,9 Das Wort 123 wird wie folgt berechnet (q 0, 123) (q 4, 23) (q 3, 3) (q 4, ε) und nicht akzeptiert, weil der letzte Zustand in Q-F liegt. B:sechs Beispiel 3. Die Sprache L {0, 1} aller Wörter mit einer geraden Anzahl von 0 en und einer geraden Anzahl von 1 en wird von dem Automaten q q 2 1 q q 3 1 akzeptiert. Definition. Eine Sprache heißt regulär, falls es einen DEA gibt, der sie akzeptiert. bspregtriv bspnichtreg Beispiel 4. Σ, und die Menge aller geraden Zahlen sind regulär. Beispiel 5 (Eine nicht reguläre Sprache). Über dem Alphabet {a} definieren wir die Sprache L = {ε, a, aaaa,...} aller Wörter der Länge k 2 (k = 0, 1, 2,...) Wir zeigen, dass jeder Automat A mit L L(A) auch Wörter außerhalb L akzeptiert, also L L(A). Sei n die Anzahl der Zustände von A. Da n 2 von A akzeptiert wird, gibt es einen Weg durch A, der nach n 2 Schritten in einem finalen Zustand endet: q 0 initial q 1 = δ(q 0, a) q 2 = δ(q 1, a) q n 2 = δ(q n2 1, a) final. Die Zustände q i, i = 0,..., n, sind nicht alle verschieden, da A nur n Zustände hat und hier n+1 Indizes auftreten. Daher existieren i und k mit 0 < k n und q i = q i+k :
13 1.2. DEFINITION DER ENDLICHEN AUTOMATEN 9 q 0 q 1... q i q i+k+1... q n 2 q i+k 1 q i+1... Weil A das Wort a n2 der Länge n 2 = i + k + (n 2 i k) akzeptiert, folgt, dass auch a n2 +k mit n 2 + k = i + 2k + (n 2 i k) von A akzeptiert wird. (In beiden Fällen wird derselbe Weg durch A zurückgelegt, im zweiten Fall wird der Zyklus q i,..., q i+k 1, q i zweimal durchlaufen.) Es gilt aber: n 2 < n 2 +k, da k > 0, und (n+1) 2 > n 2 +n n+k, da k n. Also liegt n 2 + k zwischen n 2 und (n + 1) 2 und a n2 +k kann kein Wort der Sprache L sein. Beobachtung. Sei A ein DEA mit Eingabealphabet Σ. beobonestepabl 1. Für jedes Wort u über Σ gilt: aus (q, w) (q, w ) folgt (q, wu) (q, w u). In der Tat, für w = s 1 s 2... s n haben wir Sei u = t 1... t m, dann gilt also q = δ(q, s 1 ) und w = s 2... s n. q = δ(q, s 1 ) und w u = s 2... s n t 1... t m. Das sagt genau, dass (q, wu) (q, w u), weil wu = s 1... s n t 1... t m. 2. Es gilt ebenfalls für jedes Wort u, dass aus (q, w) (q, w ) folgt (q, wu) (q, w u). Dies ist nur eine wiederholte Anwendung von 1. Notation. Die Übergangsfunktion δ Q Σ Q können wir von Buchstaben aus Σ auf Worte aus Σ erweitern: wir definieren δ Q Σ Q einem Paar (q, w) durch Induktionin der Länge n des Wortes w wie folgt: n = 0: δ (q, ε) = q (keine Eingabe keine Bewegung) n + 1: hier w = vs und v hat länge n, deswegen ist δ (q, v) = q schon definiert. Wir setzen δ (q, vs) = δ( q, s) Diese Funktion δ weist jeder Konfiguration (q, w) den Endzustand der Berechnung des Eingabewertes w zu. Jetzt können wir die Sprache L(A) noch kürzer definieren: es besteht aus allen Worten w mit δ (q 0, w) F.
14 10 KAPITEL 1. ENDLICHE AUTOMATEN sectnea 1.3 Nichtdeterministische Automaten Nichtdeterministische Automaten sind wie endliche Automaten definiert, nur hat die Übergangsfunktion δ(q, s) mehrere Möglichkeiten. Kurz: δ ist keine Funktion, sondern eine Relation zwischen Q Σ und Q: Beispiel 1. Lexikale Analyse von Positionen. Nehmen wir alle binären Wörter, die auf Position 2 von rechts eine 1 haben. Dafür haben wir den Automat 0,1 q 0 1 q 1 0,1 q 2 Der ist aber nicht deterministisch: aus q 0 kann Eingabe 1 zu q 0 oder q 1 führen usw. Analog für Der Automat L (n) = alle binären Wörter mit 1 auf Position n von rechts. 0,1 q 0 1 q 1 0,1 q 2 0,1... 0,1 q n hat n + 1 Zustände und akzeptiert die erwünschte Sprache. Es gibt auch DEA s dafür, aber diese sind sehr kompliziert und sehr groß: L (n) braucht mindestens 2 n Zustände, siehe Beispiel 2 in 1.8. Beispiel 2. Textsuche. Eine häufig benötigte Aufgabe im Internet ist die Untersuchung von Dokumenten auf gewisse Wörter (sogenannte Schlüsselwörter). Dies wird mit NEAs durchgeführt. Nehmen wir an, dass nur ein Schlüsselwort a 1... a k im Alphabet Σ (= ASCII-Zeichen, zum Beispiel) gegeben wird. Hier ist unser Automat: Σ a 1 a 2... Bei mehreren Schlüsselwörtern ist der NEA analog. Konkret für Schlüsselwörter: web und ebay: Σ w e b a k e b a y Definition. Ein nichtdeterministischer endlicher Automat (NEA) ist ein Quintupel A = (Q, Σ, δ, q 0, F ), wobei Q, Σ und F Q endliche Mengen sind, δ (Q Σ) Q eine Relation ist und q 0 Q. bspnea Beispiel q 0 q q 2 0 1
15 1.3. NICHTDETERMINISTISCHE AUTOMATEN 11 Das ist der nichtdeterministische Automat mit Σ = {0, 1}, Zuständen q 0 (initial), q 1 und q 2 (final) und den angedeuteten Übergängen. Bemerkung Wir verwenden dieselbe Notation wie im deterministischen Fall. Speziell schreiben wir q s q oder (q, s) q statt (q, s)δq. Hier können jedoch zwei verschiedene Übergangsregeln (q, s) q dieselbe linke Seite haben (und umgekehrt muß für ein Paar (q, s) keine Regel mit dieser linken Seite vorhanden sein). 2. Auch Konfigurationen sind, wie im deterministischen Fall, als Paare (q, w) in Q Σ definiert. Für jede Konfiguration (q, w) mit w = s 1 s 2... s n gibt es im allgemeinen mehrere Folgekonfigurationen: alle Konfigurationen (q, w ), wobei (q, s 1 ) q und w = s 2... s n. Wir benutzen wieder das Symbol, also (q, s 1 s 2... s n ) (q, s 2... s n ) für alle q Q mit (q, s 1 ) q. Die reflexive und transitive Hülle dieser Relation wird wieder mit bezeichnet. 3. Wichtige Frage: wann wird ein Wort akzeptiert? Jedes Eingabewort w hat natürlich verschiedene Berechnungen. Falls wenigstens eine Berechnung in einem finalen Zustand endet, sagen wir, dass der NEA das Wort w akzeptiert: Definition. Für einen NEA A wird ein Wort w über Σ akzeptiert, falls es einen finalen Zustand q mit (q 0, w) (q, ε) gibt. Die Menge L(A) aller akzeptierten Wörter heißt die von A akzeptierte Sprache. bspneaakzeptiert Beispiel 1 (Fortsetzung) Der nichtdeterministische Automat aus Beispiel 3 akzeptiert die Sprache L aller Wörter, die entweder 1. genau eine 0 enthalten, oder 2. die Form 1 i 0 j 1 k mit i 0, j > 0, k > 0 haben. Kann diese Sprache von einem deterministischen Automaten mit nur drei Zuständen akzeptiert werden? NEIN (Beweis später, siehe??, Beispiel??) Mit 2 3 = 8 Zuständen geht es: Notation. Für jede Menge Q bezeichnet PQ (die Potenzmenge von Q) die Menge aller Untermengen von Q. Beispiel: P{0, 1} = {, {0}, {1}, {0, 1}}. Konstruktion. Sei A ein NEA. Wir können einen DEA A mit derselben Sprache konstruieren: L(A) = L(A ). Die Idee ist, dass jede Gruppe M von Zuständen von A (das heißt, jede Untermenge M Q) als ein einziger Zustand des neuen Automaten betrachtet wird. Dann ergibt die nichtdeterministische Übergangsrelation δ die folgende deterministische Übergangsfunktion δ : für jeden Zustand von A, das heißt jede Menge M Q und jedes Eingabesymbol s Σ, bezeichnen wir durch δ (M, s)
16 12 KAPITEL 1. ENDLICHE AUTOMATEN die Menge aller Zustände q, für die gilt (q, s) q (in δ), wobei q in M liegt. Kürzer: defdeltastrich (1) δ (M, s) = {q Q; es gibt q M mit (q, s)δq}. Also ist A der folgende deterministische Automat A = (2 Q, Σ, δ, {q 0 }, F ), wobei δ durch (1) (für alle M 2 Q und s Σ) definiert ist, {q 0 } der Initialzustand ist und F genau die Zustände von A enthält, in denen wenigstens ein Finalzustand von A liegt: F = {M; M Q und M F }. Beispiel 1 (Fortsetzung) Der DEA, der Beispiel 1 darstellt, hat 8 = 2 3 Zustände: {q 0, q 1, q 2 } 1 {q 0 } 1 {q 0, q 1 } 0 {q 1, q 2 } 0 0 {q 1 } q {q 0, q 2 } 0,1 satzpotenzkonstr Satz 1. Die Automaten A und A akzeptieren dieselbe Sprache. potenzkonstrbew (2) Beweis. Für jedes Wort s 1... s n über Σ bezeichnen wir durch M 0, M 1,..., M n die Zustände der Berechnung des Wortes im Automat A M 0 = {q 0 } und M i+1 = δ (M i, s i+1 ). Wir beweisen, dass ein Zustand q von A genau dann in M n liegt, wenn eine Berechnung von s 1... s n durch A existiert, die in q endet. Damit wird bewiesen, dass, falls s 1... s n in L(A ) liegt (falls also M n F einen finalen Zustand von A enthält), eine Berechnung durch A existiert, die in einem finalen Zustand endet also akzeptiert auch A das Wort s 1... s n. Umgekehrt gibt es, falls A das Wort akzeptiert, eine Berechnung, die in einem finalen Zustand endet. Dieser Zustand ist, aufgrund von (2), ein Element von M n das beweist, dass M n F, also akzeptiert A das Wort s 1... s n. Der Beweis von (2) erfolgt durch Induktion über die Länge n des gegebenen Wortes: n = 0 Hier ist M n = {q 0 } und eine Berechnung von ε durch A endet immer in q 0. n n + 1 Da M n+1 = δ (M n, s n+1 ), sagt uns (1), dass M n+1 einen Zustand q genau dann enthält, wenn es einen Zustand q in M n gibt mit (q, s n+1 )δq. Bei der Induktionsvoraussetzung sind diese Zustände q genau die, die in A durch eine Berechnung von s 1... s n erreicht werden können. Hier folgt (2) also aus der Beobachtung, dass die Berechnung von s 1... s n s n+1 einen Zustand q genau dann erreicht, wenn es einen Zustand q gibt, der durch die Berechnung von s 1... s n erreicht werden kann und (q, s n+1 )δq erfüllt. Bemerkung 2. Bei vielen Anwendungen ist es möglich, einen viel kleineren DEA zu konstruieren indem wir uns auf die Zuständem die vom Initialzustand durch ein Eingabewort erreichbar sind, beschränken.
17 1.3. NICHTDETERMINISTISCHE AUTOMATEN 13 Definition. Ein Zustand q eines DEA A = (Q, Σ, δ, q 0, F ) ist erreichbar, falls es ein Wort w in Σ mit (q 0, w) (q, ε) gibt. Der folgende DEA A r = (Q r, Σ, δ r, q 0, F Q r ) wobei Q r die Menge aller erreichbaren Zustände von A ist und δ r die Restriktion von δ ist, heißt der erreichbare Teil von A. Falls A = A r ist, also jeder Zustand von A erreichbar ist, heißt A ein erreichbarer Automat. bemerreichbarabg Bemerkung 3. Falls q erreichbar ist, ist auch der Zustand q = δ(q, s) (für jedes s Σ) erreichbar, denn aus (q 0, w) (q, ε) folgt (q 0, ws) (q, s) (q, ε). Wir erhalten also eine Funktion δ r Q r Σ Q r als Restriktion von δ Q Σ Q. bemerreichbareqiv Bemerkung 4. Es gilt: A und A r sind äquivalent, d.h. sie akzeptieren dieselbe Sprache. Es ist nämlich leicht zu sehen, dass (q 0, w) (q, ε) in A genau dann gilt, wenn es auch in A r gilt. Beispiel 1 (Fortsetzung) Die obere Konstruktion des DEA mit 8 Zuständen ist nicht erreichbar: die Zustände {q 0, q 1 } und {q 0, q 1, q 2 } können weggelassen werden. Beispiel 4. Im Automat A 0 q q 0 1 q 3 1 q 2 1 0,1 ist der Zustand q 3 nicht erreichbar. Alle anderen Zustände sind aber erreichbar, deswegen ist A r der folgende Automat 0 q 1 0 q q 2 0,1
18 14 KAPITEL 1. ENDLICHE AUTOMATEN Beispiel 5. Für den NEA 1 q 3 1 q 1 0 q 4 q 0 1 q 2 0 q 5 1 q 6 konstruieren wir einen äquivalenten DEA als den erreichbaren Teil der obigen Konstruktion: 1 {q 0 } {q 1, q 2 } 0 0,1 {q 3, q 6 } Dieser hat also 5 (und nicht 2 7 = 128) Zustände. 0,1 1 0,1 0 {q 4, q 5 } Bemerkung 5. Für manche Anwendungen ist es geschickt, auch spontane Übergänge, d.h. Übergänge ohne Eingabe, zu erlauben. Dazu benutzen wir ε als ein Spezialsymbol, das keine Eingabe bezeichnet. Jetzt können wir den spontanen Übergang von q nach q im selben Stil wie die anderen Übergänge (q, s) q bezeichnen, nämlich als q ε q oder (q, ε) q. Genauer: die Übergangsrelation δ (Q Σ) Q wird jetzt durch eine Relation δ (Q (Σ {ε})) Q ersetzt. Die spontanen Übergänge heißen auch ε-übergänge und die entsprechenden Maschinen ε-neas: Definition. Ein nichtdeterministischer endlicher Automat mit spontanen Übergängen (ε-nea) ist ein Quintupel A = (Q, Σ, δ, q 0, F ), wobei Q, Σ und F Q endliche Mengen sind, δ (Q (Σ {ε})) Q eine Relation ist und q 0 Q. Bemerkung 6. Für jeden ε-nea definieren wir, wie zuvor, eine Konfiguration als ein Paar (q, w) in Q Σ. Die Folgekonfigurationen einer Konfiguration (q, w) sind und 1. wie bisher: alle Konfigurationen (q, s 2... s n ), wobei w = s 1 s 2... s n und (q, s 1 ) q, 2. alle Konfigurationen (q, w), wobei (q, ε) q also alle Konfigurationen, die durch spontane Übergänge den Zustand ändern, ohne das restliche Eingabewort zu beeinflussen.
19 1.3. NICHTDETERMINISTISCHE AUTOMATEN 15 Kurz: ist die kleinste Relation auf die Menge Q Σ aller Konfigurationen mit und (q, s 1 s 2... s n ) (q, s 2... s n ) falls (q, s 1 ) q (q, s 1 s 2... s n ) (q, s 1 s 2... s n ) falls (q, ε) q Die Bedeutung von ist wie oben, ein Wort w über Σ wird akzeptiert, falls es einen finalen Zustand q gibt mit (q 0, w) (q, ε). NEAS0u1s Beispiel 6. Der folgende ε-nea q 0 0 ε ε q 1 q 2 1 akzeptiert das leere Wort, denn es gibt die folgende Berechnung (q 0, ε) (q 2, ε) (q 1, ε). Auch 01 wird aufgrund der Berechnung (q 0, 01) (q 1, 1) (q 2, ε) (q 1, ε) akzeptiert. Bemerkung 7. Speziell gilt für Zustände q und q (q, ε) (q, ε) genau dann wenn es eine Berechnung wie folgt gibt: q ε q 1 ε q 2... ε q i ε q i+1 ε q i+2... ε q Wir sagen, dass q in der ε-hülle von q liegt. Definition. Zwei Automaten A und A (DEA, NEA, oder ε-neas) heißen äquivalent, falls sie dieselbe Sprache akzeptieren, das heißt, L(A) = L(A ). Konstruktion. Für jeden ε-nea A = (Q, Σ, δ, q 0, F ) konstruieren wir einen äquivalenten ε-nea: wir lassen Q und q 0 unverändert und definieren wie folgt: in δ haben wir einen Übergang s q q A = (Q, Σ, δ, Ī, F ) genau dann wenn q in der ε-hülle eines Zustandes q liegt, für den der Übergang s q q vorhanden ist. Und F {q 0 } F = F wenn die ε-hülle von q 0 einen Zustand aus F enthält sonst. Satz 2. Die Automaten A und Ā sind äquivalent.
20 16 KAPITEL 1. ENDLICHE AUTOMATEN BerInA (3) Beweis. (a) Sei w ein Wort, dass A akzeptiert. Falls w = ε, folgt aus der Definition von F, dass q 0 final in A ist, also akzeptiert auch A das leere Wort. Falls w = s 1 s 2... s n, n > 0, bedeutet das, dass es einen finalen Zustand q F gibt und eine Berechnung in A der Form q 0 ε... ε s 1 ε... ε s n ε ε... q Bezeichnen wir mit q i den Zustand, den A nach der Eingabe s i erreicht (i = 1,..., n), dann gilt in A: q 0 s 1 q 1 q 1 s 2 q 2 q n 1 s n q n, sogar q n 1 s n q BerInAs (4) Also haben wir eine Berechnung in A q 0 s 1 q 1 s 2... s n q und da q F, ist das Wort s 1 s 2... s n von A akzeptiert. (b) Sei w ein Wort, das A akzeptiert. Falls w = ε, bedeutet das, dass q 0 F. Also entweder q 0 F (dann akzeptiert A natürlich ε) oder q 0 F F und A akzeptiert ε aufgrund der Definition von F. Falls w = s 1 s 2... s n, n > 0, haben wir eine Berechnung (4) in A mit q F. Daraus folgt, dass wir in A eine Berechnung (3) haben. Falls q F, akzeptiert also A das Wort w = s 1 s 2... s n. Falls q F F, gilt: q = q 0, und A akzeptiert ε. Das letzte bedeutet, dass es einen Finalzustand q 1 F gibt mit der folgenden Berechnung: q 0 ε ε... ε q 1 Diese Berechnung kann, da q = q 0, an die von (3) angeknüpft werden, und wir sehen, dass (q 0, s 1... s n, ) (q 1, ε). Daraus folgt, dass A das Wort s 1 s 2... s n akzeptiert. sectreg 1.4 Reguläre Ausdrücke Wir wollen jetzt die regulären Sprachen (siehe Abschnitt 1.2) charakterisieren. Notation. Wir verwenden die folgenden Operationen für Sprachen L Σ : 1. Vereinigung L 1 L 2 ist die Sprache aller Wörter, die in L 1 oder L 2 liegen. 2. Konkatenation L 1 L 2 (oder nur L 1 L 2 ) ist die Sprache aller Wörter w 1 w 2 mit w 1 L 1, w 2 L 2. Falls L 1 = L 2 = L, schreiben wir L 2 statt L L (analog L 3 usw.).
21 1.4. REGULÄRE AUSDRÜCKE Iteration (oder Kleenescher Stern) L = {ε} L (L L) (L L L)... ist die Sprache aller Wörter w 1 w 2... w n mit w 1,..., w n L (n N) (inklusive ε für den Fall n = 0); wir benutzen auch für die Sprache aller Wörter w 1 w 2... w n mit w 1,..., w n L und n Komplement L = Σ L. L + Beispiel 1. Für L 1 = {00} und L 2 = {1, 101} gilt L 1 L 2 = {00, 1, 101} L 1 L 2 = {001, 00101} L 1 = {ε, 00, 0000,... }. satzregabgpluscat Satz 1. Falls L 1 und L 2 reguläre Sprachen sind, sind auch die Sprachen L 1 L 2 und L 1 L 2 regulär. Beweis. Für L i (i = 1, 2) gibt es nach Definition einen DEA A i = (Q i, Σ, δ i, q 0i, F i ), der L i akzeptiert. Wir können ohne Beschränkung der Allgemeinheit annehmen, dass die Zustandsmengen Q 1 und Q 2 disjunkt sind. 1. Regularität von L 1 L 2 : die folgende parallele Komposition von A 1 und A 2 : q 0 ε q 01 F 1 ε q 02 F 2 akzeptiert die Sprache L(A 1 ) L(A 2 ) = L 1 + L 2. Formal ist dies der ε-nea A = (Q 1 Q 2 {q 0 }, Σ, δ, q 0, F 1 F 2 ), wobei q 0 Q 1 Q 2 und δ durch die folgenden Übergangsregeln definiert wird: E:fuenf (1) (q, s) δ i (q, s) für alle q Q i, i = 1, 2, s Σ und (q 0, #) q 10, (q 0, #) q Regularität von L 1 L 2 : die folgende serielle Komposition von A 1 und A 2 : ε ε q 01 F 1 q 02 F 2 ε akzeptiert die Sprache L(A 1 ) L(A 2 ) = L 1 L 2. Formal ist dies der ε-nea A = (Q 1 Q 2, Σ, δ, q 01, F 2 ), wobei δ durch (1) und (q, #) q 02 für alle q F 1 definiert wird.
22 18 KAPITEL 1. ENDLICHE AUTOMATEN kor:finiteregular satzregabgstar Folgerung 1. Jede endliche Sprache ist regulär. Beweis. Für L = {w 1,..., w n } gilt: L ist die Vereinigung der Sprachen L i = {w i }, und L i ist die Konkatenation der Sprachen L ij = {s j }, falls w i = s 1... s k oder L i = {ε}. Die Sprache {s j } bzw. {ε} sind regulär: siehe die folgenden NEAs: s j und Daher ist L regulär. Satz 2. Falls L eine reguläre Sprache ist, sind auch L und L + regulär. Beweis. Der folgende Feedback eines L akzeptierenden Automaten A = (Q, Σ, δ, q 0, F ): q 0 F ε akzeptiert die Sprache L +. Formal definieren wir den ε-nea A = (Q, Σ, δ, q 0, F ), wobei δ die ursprüngliche Übergangsfunktion mit den zusätzlichen spontanen Übergängen l00p11s ist. Es gilt L(A ) = L(A) + = L +. (q, ε) q 0 für alle q F Der Fall L = L + {ε} folgt aus Satz 1 und Folgerung 1. Beispiel 2. Die Sprache L aller Wörter in {0, 1}, in denen jeder Buchstabe wiederholt wird, d. h. L = ({11} {00}), wird von dem folgenden Automaten akzeptiert: für 11 haben wir 1 1 analog für {00}. Die parallele Komposition dieser Automaten: 1 1 ε ε 0 0 akzeptiert die Sprache {11} {00}. Jetzt machen wir den Feedback mit q 0 final: ε 1 1 ε ε 0 0 ε Dieser Automat akzeptiert die Sprache L.
23 1.4. REGULÄRE AUSDRÜCKE 19 Definition. Ein regulärer Ausdruck über einem Alphabet Σ = {s 1,..., s n } ist ein Ausdruck mit den Operationen +,,, die auf Buchstaben s 1,..., s n und auf die Symbole ε und angewendet werden. Genauer: die regulären Ausdrücke r werden durch BNF wie folgt definiert: r = s 1... s n ε (r + r) (rr) (r ) Jeder reguläre Ausdruck repräsentiert eine Sprache: s i ε L 1 + L 2 L 1 L 2 L repräsentiert {s i }, die Sprache, die nur das Wort s i enthält repräsentiert {ε}, die Sprache, die nur das leere Wort enthält repräsentiert (kein Wort) repräsentiert die Vereinigung repräsentiert die Konkatenation repräsentiert die Iteration (L) repräsentiert dasselbe wie L. Konvention 3. Wie in der Arithmetik bindet (Konkatenation) stärker als +. Dies erlaubt uns viele überflüssige Klammern wegzulassen. Beispiel 3. Die Sprache aller Wörter, die entweder mit 11 beginnen oder enden, wird durch 11(0 + 1) + (0 + 1) 11 repräsentiert. Beispiel 4. Für jede endliche Sprache L = {s 1 s 2... s n, t 1 t 2... t m,..., u 1 u 2... u k } gibt es einen regulären Ausdruck, der L repräsentiert: s 1 s 2... s n + t 1 t 2... t m + + u 1 u 2... u k. Folgerung 2. Jede Sprache, die durch einen regulären Ausdruck repräsentiert wird, ist regulär. Beweis. Die trivialen Fälle s i, ε und repräsentieren reguläre Sprachen siehe Folgerung 1. Für kompliziertere reguläre Ausdrücke wissen wir schon aus den Sätzen 1 und 2, dass die Operationen +,, die Regularität erhalten. Satz 4 (Kleenescher Satz). Eine Sprache ist genau dann regulär, wenn sie durch einen regulären Ausdruck repräsentiert werden kann. Beweis. Dies ist ein konstruktiver Beweis: für jeden DEA, A, konstruieren wir einen regulären Ausdruck, der L(A) repräsentiert. Seien q 0 (initial), q 1,..., q n alle Zustände von A. Wir bezeichnen mit L ij die Sprache aller Wörter, die q i nach q j überführen, also w L ij (q i, w) (q j, ε). Wenn wir einen regulären Ausdruck für jede Sprache L ij finden, sind wir fertig, da falls q ji, q j2,... q jm alle finalen Zustände sind, gilt L(A) = L 0j1 L 0j2 L 0jm. Um einen regulären Ausdruck für L ij zu finden, führen wir noch eine Verfeinerung dieser Sprache ein: wir bezeichnen mit L k ij (k = 0,..., n + 1) die Sprache aller Wörter w = s 1... s n in L ij : q i s 1 s 2... s r 1 s r q j
24 20 KAPITEL 1. ENDLICHE AUTOMATEN wo die inneren (nicht markierten) Zustände nur Indizes kleiner als k benutzen. D.h., jeder innere Zustand ist q d für d < k. Z.B. L 0 ij erlaubt gar keinen inneren Zustand: L 0 ij besteht aus (a) s Σ mit q s i q j und (b) ε wenn i = j. Es ist klar, dass L ij = L n+1 ij. Es genügt also zu zeigen, wie jede Sprache L k ij (für beliebige i, j und k) durch einen regulären Ausdruck repräsentiert wird kann. Das beweisen wir durch Induktion über k: k = 0 Für L 0 ij mit i j ist der reguläre Ausdruck die Summe aller s mit δ(q i, s) = q j. Wenn i = j kommt noch der Summand ε dazu. k k + 1 Für jedes Wort w in L k+1 ij bezeichnen wir mit s die Zahl aller inneren Zustände, die q k gleich sind. Falls s = 0 ist, liegt w in L k ij. Falls s > 0, können wir das Wort so in s Wörter w = w 1 w 2... w s zerlegen, dass die Berechnung des ersten Teils w 1 den Zustand q i zum ersten Mal nach q k überführt (also liegt w 1 in L k ik ), die Berechnung von w 2 von der ersten zur zweiten Begegnung mit q k führt (also liegt w 2 in L k kk ), analog w 3,..., w s 1 und w s überführt den Zustand q k beim letzten Auftreten nach q j (also liegt w s in L k kj ). Beispiel: s = 2. W 1 W 2 W 3 q i... q k... q h... q j Es folgt, dass entweder w L k ij oder w L k ik (L k kk) L k kj. Umgekehrt ist es leicht zu sehen, dass alle Wörter aus L k ik (Lk kk ) L k kj in L k+1 ij liegen. Es gilt also reklijk (*) L k+1 ij = L k ij L k ik (L k kk) L k kj. Das ergibt einen regulären Ausdruck für L k+1 ij Ausdrücken für L k ij (Induktionsvoraussetzung). aufgrund von regulären Beispiel 5. Wir beschreiben einen regulären Ausdruck für die Sprache, die der folgende Automat akzeptiert: q 0 a b b q 1 a Wir suchen L(A) = L Erst berechnen wir L 0 ij L 0 ij j = 0 1 i = 0 ε + b a 1 b ε + a Dann L 1 ij = L0 ij + L0 i0 (L0 00) L 0 oj. Zum Beispiel L 1 00 = L L 0 00(L 0 00) 0 L 1 00 = ε + b + (ε + b)(ε + b) (ε + b) = b
25 1.5. DER BRZOZOWSKY-DEA 21 Hier alle Ergebnisse: L 1 ij j = s 1 i = 0 b b a 1 b ε + b a Zuletzt L 2 01: L 2 01 = L L 1 01(L 1 11) L 1 11 = b a + b a(ε + b a) (ε + b a) = b a(ε + (ε + b a) + ) = b a(ε + b a) = (a + b) a sectabl 1.5 Der Brzozowsky-DEA Hier charakterisieren wir reguläre Sprachen als genau die, die nur endliche Ableitungen haben. Dies ermöglicht uns ein einfaches Beispiel einer nicht regulären Sprache zu zeigen. Die Ableitungen können für eine Konstruktion von DEAs benutzt werden. Im nächsten Abschnitt zeigen wir, dass diese Konstruktion optimal ist. Definition. Gegeben sei eine Sprache L Σ und ein Wort w Σ. Die Ableitung w 1 L ist die Sprache aller Wörter u mit wu L. Bemerkung 1. L selbst ist eine Ableitung: man setze w = ε. Beispiel 1. (1) Die Sprache L {0, 1} aller Wörter von gerader Länge hat die Ableitung 0 1 L von allen Wörtern ungerader Länge. Es ist leicht zu sehen, dass alle Ableitungen von L gleich L oder 0 1 L sind. (2) Die Sprache L = {0 n 1 n ; n N} hat die Ableitungen die alle voneinander verschieden sind. 0 1 = {0 n 1 1 n ; n 1} 00 1 = {0 n 2 1 n ; n 2} (3) Die Sprache L aller Wörter über {a, b} die dieselbe Anzahl von a s und b s besitzen ist nicht regulär: alle Ableitungen (a n ) 1 L sind voneinander verschieden. Lemma 1. (wv) 1 L = v 1 (w 1 L). Beweis. Die rechte Seite besteht aus genau den Wörtern u mit vu w 1 L, d.h. mit wvu L. Konstruktion. Wenn eine Sprache L nur endlich viele Ableitungen besitzt, definieren wir den Brzozowsky DEA für L wie folgt: (a) Zustände sind alle Ableitungen von L. (b) Der Initialzustand ist L. (c) Eine Ableitung w 1 L ist akzeptierend g.d.w. w L. (d) Die Übergänge sind für jedes a Σ durch K a a 1 K definiert. (D.h., wenn K = w 1 L, dann ist der Folgezustand a 1 (w 1 K) = (aw) 1 K.)
26 22 KAPITEL 1. ENDLICHE AUTOMATEN Die Sprache aller Wörter gerader Länge hat den Br- Beispiel 1 (Fortsetzung) zozowsky DEA L 0,1 0,1 0 1 L Beobachtung. Der Brzozowsky DEA akzeptiert L. In der tat, jedes Wort w Σ mit w = a a... a n hat die folgende Berechnung (siehe Lemma oben): L a 1 a 1 1 L a 2 a 1 a 1 2 L a 3... a n w 1 L Das Wort wird akzeptiert g.d.w. der zustand w 1 akzeptierend ist, d.h., w L Satz 1. Eine Sprache ist regulär, g.d.w. sie nur endlich viele Ableitungen besitzt. Beweis. Wenn L endlich viele Ableitungen besitzt, ist sie durch einen Brzozowsky DEA akzeptiert und deswegen regulär. Umgekehrt, wenn L Σ regulär ist, gibt es einen DEA, A, der mit n Zuständen L akzeptiert. Wir beweisen, dass L höchstens n Ableitungen besitzt. Für jedes Wort w Σ bezeichnen wir durch q w den Zustand von A, den wir vom Initialzustand durch die Eingabe w erreichen. Es genügt zu beweisen, dass zwei Wörter w und v die selbe Ableitung ergeben, wenn sie q w = q v erfüllen: q w = q v w 1 L = v 1 L In der Tat, ein Wort u liegt in w 1 L genau dann, wenn die Berechnung q 0... q w... q wu w u in einem akzeptierenden Zustand q wu endet. Das bedeutet, dass der DEA, den wir aus A bekommen, wenn der Initialzustand zu q w geändert wird, w akzeptiert. Das selbe gilt für u v 1 L. Deswegen folgt w 1 L = v 1 L aus q w = q v. Beispiel 2. Die Sprache aller Wörter über {a, b} mit der gleichen Anzahl von a s und b s ist nicht regulär, denn sie hat unendlich viele Ableitungen. 1.6 Äquivalente Zustände Wir zeigen, wie zu jedem erreichbaren DEA ein minimaler DEA für die selbe Sprache konstruiert werden kann. Dieser minimale Automat ist durch die Anzahl seiner Zustände völlig bestimmt. Wir haben durch L(A) die Sprache, die ein DEA akzeptiert, indem er im Initialzustand q 0 anfängt, bezeichnet: ein Wort w Σ liegt in L(A) g.d.w. δ (q 0, w) ein akzeptierender Zustand ist (siehe Notation in 1.2). Nehmen wir an, dass wir statt q 0 einen anderen Zustand q Q gewählt haben. Dann bezeichnen wir durch A(q) den so geänderten Automat. Seine Sprache L(A(q)) besteht aus allen Wörtern w mit dem Zustand δ (q, w) akzeptierend.
27 1.6. ÄQUIVALENTE ZUSTÄNDE 23 Definition. Zwei Zustände q und r eines DEAs heißen äquivalent wenn sie die selbe Sprache akzeptieren, d.h., Notation. q A r Beispiel 1. Im DEA LA(q) = LA(r) (oder nur q r wenn A klar ist). a q 1 a q 0 b b q 2 a,b b q 3 a sind q 1 und q 3 äquivalent. In der Tat, beide Zustände akzeptieren a(a + b) Die Zustände q 0 und q 1 sind nicht äquivalent: q 1 akzeptiert a, q 0 nicht. Satz 1. Wenn die Zustände q und r äquivalent sind und nach Eingabe a Σ bekommen wir die zustände q und r, sind auch diese äquivalent. Kurz: q r δ(q, a) δ(r, a) Beweis. Der Zustand q akzeptiert ein Wort w: w q a q... q g.d.w. die Berechnung in einem akzeptierenden Zustand q = δ (q, w) endet. Das Wort aw wird im Zustand q mit demselben Ergebnis berechnet: δ (q, aw) = δ (q, w) = q. Deswegen gilt: L(A(q)) = al(a(q )). Analog L(A(r)) = al(a(r )) Da L(A(q )) = L(A(r )), folgt daraus L(A(q)) = L(A(r)). Bemerkung 1. a. Umgekehrt: wenn zwei Zustände q und r nicht äquivalent sind, a und wenn wir für eine Eingabe a Übergänge q a q sowie r r haben, sind auch q und r nicht äquivalent. b. Ein akzeptierender Zustand ist zu keinem nicht-akzeptierenden Zustand äquivalent. Es gilt nämlich: q F g.d.w. ε LA(q) Algorithmus 2. für die Äquivalenz. Wir formen eine tabelle in der jedes zugeordnete Paar von Zuständen q i q j einmal vorkommt q 0 q 1 q 2 q n q 0 q 1... q n 1 Dann kreuzen wir nicht-äquivalente Paare an. Dies geschieht rekursiv bis kein neues nicht-äquivalentes Paar vorkommt, dann ist durch die ungekreuzten Paare charakterisiert.
28 24 KAPITEL 1. ENDLICHE AUTOMATEN Erster Schritt Kreuze jedes Paar von Zuständen an, wobei ein akzeptierend und der andere nicht-akzeptierend ist. Rekursiver Schritt Nimm ein ungekreuztes paar (q i, q j ) und versuche eine Eingabe a Σ zu finden, für die das Paar δ(q i, a) und δ(q j, a) angekreuzt wird. Dann kreuze (q i, q j ) an. Beispiel 2. Im Oberen DEA ergibt Schritt 1 q 1 q 2 q 3 q 0 q 1 q 2 Im Schritt 2 ergibt Eingabe a neue nicht-äquivalenzen : q 0 / q 1 und q 0 / q 3 : Hier endet der Algorithmus und ergibt q 1 q 2 q 3 q 0 q 1 q 2 und sonst nur q i q i. Beispiel 3. Der DEA q 1 q 3 A 0 1 E 1 0 B 1 0 F C G D H 0 ergibt B C D E F G H A B C D E F G Nur A E, H B und F D bleiben übrig. Satz 3. Der Algorithmus ist korrekt: nach endlich vielen Schritten endet er und dann gilt: ein Paar von zuständen ist äquivalent g.d.w. er nicht angekreuzt ist.
29 1.7. KONSTRUKTION EINES QUOTIENT-DEA 25 Beweis. Ein Automat von n Zuständen hat nur ( n ) verschiedene Paare und nach 2 so vielen Schritten endet der Algorithmus. Wir beweisen, dass (a) jedes angekreuzte Paar (q i, q j ) erfüllt q i / q j und (b) jedes nicht angekreuzte erfüllt q i q j. (a) Induktion in der Zahl k des Schrittes, wo das Paar angekreuzt wurde. Induktionsanfang: k = 0. Wenn q i akzeptierend ist und q j nicht, ist es klar, dass q i / q j gilt. Induktionsschritt: in Schritt k wird (q i, q j ) nur dann angekreuzt, wenn es ein in Schritt k 1 angekreuztes Paar (q i, q j ) gibt mit q i = δ(q i, a) und q j = δ(q j, a) für eine Eingabe a Σ. Nach Induktionsvorraussetzung gilt q i / q j. Aus Satz 1 folgt q i / q j. (b) Diese Aussage können wir so formulieren: wenn q i / q j, dann wird (q i, q j ) angekreuzt. Nehmen wir ein Wort w, das Zeuge von q i / q j ist. D.h., δ (q i, w) ist akzeptierend und δ (q j, w) nicht (oder umgekehrt). Wir beweisen, dass das Paar angekreuzt wird, per Induktion in der Länge k des Wortes w. Induktionsanfang: k = 0. D.h., w = ε und wir sehen, dass q i akzeptierend ist und q j nicht. Das Paar wird im ersten Schritt angekreuzt. Induktionsschritt: w = av mit v = k 1. Setzen wir q i = δ (q i, a) und q j = δ (q j, a). Dann gilt: δ (q i, v) = δ (q i, w) ist akzeptierend und δ (q j, v) = δ (q j, w) nicht: v q i a q i... q j a q j... v Da v = k 1, besagt die Induktionsvorraussetzung, dass (q i, q j ) angekreuzt wurde. Wenn dies im Schritt l passiert, wird (q i, q j ) im Schnitt l +1 angekreuzt. 1.7 Konstruktion eines Quotient-DEA Gegeben sei ein DEA. Wir berechnen die Äquivalenzrelation und bekommen einen neuen DEA Ā. Zustände: Äquivalenzklassen [q] von Zuständen von A, d.h. [q] Q ist die menge aller zu q äquivalenten Zustände. Übergänge: [q] Initialzustand: [q 0 ] a [r] g.d.w. q Akzeptierende Zustände: [q] mit q F. a s in A mit r s.
30 26 KAPITEL 1. ENDLICHE AUTOMATEN Beispiel 3 (Fortsetzung): 1 G 1 D, F A, E 1 0 B, H 0 1 C Satz 1. Der Quotient-DEA Ā akzeptiert dieselbe Sprache wie A. Beweis. Erstens, die Definition der Übergänge ist korrekt auf Grund von Satz 1: wenn die Klasse [q] durch einen anderen Zustand q dargestellt wird, d.h., q q, dann haben wir einen Übergang q a s in A von dem wir wissen, dass s s. Mit anderen Worten [r] = [s] = [s ]. Und wenn q ein akzeptierender zustand in A ist, sind alle zustände in [q] akzeptierend. Wir beweisen für jedes Wort w = a 1... a n, dass w von A akzeptiert wird, g.d.w. Ā es akzeptiert. Sei q 0 a 1 q 1 a 2... die Berechnung von w in A. Dann folgt aus der Definition von Ā, dass w die folgende Berechnung hat: [q 0 ] a 1 [q 1 ] a 2... a n q n a n [q n ] Dann akzeptiert A das Wort g.d.w. q n akzeptierend in A ist, dies ist dazu äquivalent, dass [q n ] ein akzeptierender Zustand von Ā ist, d.h., Ā das Wort akzeptiert. sectmin 1.8 Minimierung von Automaten Definition. Ein DEA heißt minimal wenn er (a) erreichbar ist und (b) paarweise nicht-äquivalente Zustände hat. Bemerkung 1. Bedingung (a) sagt, dass der DEA nicht durch wegwerfen von Zuständen minimiert werden kann. Bedingung (b) sagt, dass keine Minimierung durch Identifikation von Zuständen möglich ist. Zusammen bedeuten sie, wie wir unten beweisen, dass die Anzahl der zustände minimal ist. Beispiel 1. Der Brzozowsky DEA ist minimal. In der Tat, jeder zustand w 1 L wobei w = a 1... a n ist vom Initialzustand q 0 erreichbar: siehe Beobachtung in 1.5. Und für beliebige Zustände w 1 L v 1 L gibt es ein Wort u mit wu L und vu / L (oder umgekehrt) und dann führt die Eingabe u den Zustand zum akzeptierenden Zustand (wu) 1 L, während sie den Zustand v 1 L zum nicht-akzeptierenden Zustand (vu) 1 L führt. Deswegen sind die Zustände w 1 L und v 1 L nicht äquivalent.
31 1.8. MINIMIERUNG VON AUTOMATEN 27 Bemerkung 2. Die folgenden DEAs q 1 0 s 0 0,1 r 1 q ,1 q 2 q 1 1 sind, bis auf Umbenennung der Zustände, gleich. Im allgemeinen, gegeben DEAs A = (Q, Σ, δ, q 0, F ) und A = (Q, Σ, δ, q 0, F ) mit dem selben Eingangsalphabet Σ, sagen wir, dass sie bis auf Umbenennung der Zustände gleich sind, wenn es eine Bijektion (d.h. invertierbare Funktion) b Q Q zwischen den Zuständen gibt, sodass (a) für jeden Übergang wobei q = b(q) und r = b(r), (b) b(q 0 ) = q 0 und q a r in A gibt es den Übergang q a r in A, (c) q ist ein akzeptierender Zustand in A g.d.w. b(g) ein akzeptierender Zustand in A ist. Satz 1. Jeder minimale DEA ist bis auf Umbenennung der Zustände gleich dem Brzozowsky DEA. Beweis. Gegeben sei ein minimaler DEA A = (Q, Σ, δ, q 0, F ) mit Sprache L = L(A). Für jedes Wort w Σ bezeichnen wir durch q w den Zustand, den A bei Eingabe w erreicht. Wenn wir den Initialzustand von A zu q w ändern, bekommen wir den DEA A(q w ), der w 1 L akzeptiert: ein Wort u wird vom neuen DEA akzeptiert q 0... q w... q w u g.d.w. der Zustand q final ist, d.h., wenn wu L. Deswegen wenn q w = q v für zwei Worte gilt, sehen wir, dass w 1 L = v 1 L. Umgekehrt, wenn w 1 L = v 1 L, sind die Zustände q w und q v gleich, denn A ist minimal und q w q v. In der Tat, A(q w ) akzeptiert w 1 L, die selbe Sprache wie A(q, v). Deswegen haben wir eine Funktion b, die jedem Zustand w 1 L des Brzozowsky DEA den Zustand q w von A zuordnet. Ein Übergang w 1 a L (wa) 1 L in Brzozowsky s DEA entspricht einem Übergang q w a q wa in A. Der Initialzustand L wird zu b(l) = q ε = q 0 überführt: q 0 ist durch das leere Wort erreichbar. Und ein Zustand w 1 L ist akzeptierend g.d.w. w L, und dies bedeutet genau, dass q w akzeptierend in A ist. Folgerung 3. (Minimal = Zustand-minimal). Sei A ein minimaler DEA, der L akzeptiert und n Zustände hat. Jeder L akzeptierender DEA hat wenigstens n Zustände. Und wenn er genau n Zustände hat, ist er gleich A bis auf Umbenennung der Zustände.
32 28 KAPITEL 1. ENDLICHE AUTOMATEN Beweis. In der Tat, nach dem vorigen Satz ist n die Anzahl aller Ableitungen. Sei A 0 ein DEA, der L akzeptiert. Der Zustand q w der ein A 0 mit Eingabe w akzeptiert erfüllt: A 0 (q w ) akzeptiert w 1 L. Deswegen aus w 1 L v 1 L folgt, dass q w q v. Wir sehen, dass A 0 wenigstens n Zustände hat. Wenn A 0 genau n Zustände hat, folgt daraus, dass er Zustand-minimal ist. Deswegen ist er erreichbar (denn der erreichbare Teil kann nicht kleiner sein) und hat nicht-äquivalente Zustände (denn der Quotient kann nicht kleiner sein). Dann ist A 0 minimal. Deswegen sind A, A 0 und der Brzozowsky DEA alle gleich bis Umbenennung der Zustände. Beispiel 2. Die Sprache L (n) = (a + b) b(a + b) n für die wir in 1.3, Beispiel 1 einen NEA mit n + 1 Zustände gesehen haben, braucht wenigstens 2 n Zustände wenn DEAs benutzt werden. Dies folgt daraus, dass die Ableitungen w 1 L wobei w alle 2 n Wörter der Länge n sind, paarweise verschieden sind. In der Tat, gegeben zwei solche Wörter w v, unterscheiden sie sich auf Stelle i = 1,..., n. Sagen wir w i = a und v i = b. Das Wort wa i 1 hat b auf Stelle n von links, d.h., es liegt in L (n), so dass a i 1 v 1 L. Aber wa i 1 liegt in L (n) nicht, a i 1 / w 1 L. Deswegen w 1 L v 1 L. Beispiel 3. Nichtdeterministische Automaten haben nicht die Eigenschaft, dass der minimale Automat durch seine Anzahl von Zuständen eindeutig bestimmt wird. Z.B. die NEAs 0,1 0,1 0 und 0 0,1 akzeptieren beide die Sprache aller Wörter mit dem letzten Symbol 0. Und sie sind sicher minimal. Aber ihre Übergangsstrukturen sind unterschiedlich. sectregbew 1.9 Beweise der Regularität Wenn wir beweisen wollen, dass eine Sprache regulär ist, können wir verschiedene Methoden kombinieren: 1. reguläre Ausdrücke beschreiben reguläre Sprachen, 2. endliche Automaten (auch nichtdeterministische) akzeptieren reguläre Sprachen, 3. die Anzahl von Ableitungen ist endlich Zusammensetzung 4. Zusammensetzung aus einfacheren regulären Sprachen. Zu 4 wissen wir, dass die Operationen +,, aus regulären Sprachen wieder reguläre Sprachen erzeugen. Wir zeigen jetzt zwei weitere Eigenschaften dieses Typs: satzregabgkompl Satz 1. Falls L Σ eine reguläre Sprache ist, ist auch ihr Komplement L = Σ L regulär.
33 1.9. BEWEISE DER REGULARITÄT 29 Beweis. Sei M ein DEA, der L akzeptiert. Sei M derselbe Automat, bei dem nur die Mengen F (aller finalen Zustände) und Q F (aller nicht finalen Zustände) vertauscht sind: M = (Q, Σ, δ, q 0, F ) M = (Q, Σ, δ, q 0, Q F ). Dann akzeptiert M ein Wort genau dann, wenn M das Wort nicht akzeptiert, also L(M) = Σ L(M). Korollar 1. Der Durchschnitt zweier regulärer Sprachen ist regulär. Beweis. Dies folgt aus den bekannten de Morganschen Regeln: Falls L 1, L 2 Σ regulär sind, so sind auch Σ L 1 und Σ L 2 regulär, deswegen ist L = (Σ L 1 ) + (Σ L 2 ) = Σ (L 1 L 2 ) regulär und aus Satz 1 folgt dann, dass auch regulär ist. L 1 L 2 Korollar 2. Für jede reguläre Sprache L Σ ist auch die Sprache L + regulär. Beweis. Falls ε L, ist L + = L regulär, nach Satz 2 in Abschnitt 1.4 L + = L (Σ {ε}) und da L regulär ist (siehe 1.4) und Σ {ε}, als Komplement der regulären Sprache {ε}, regulär ist, ist auch L + regulär. Beispiel 1. Sei L die Sprache aller Wörter über dem Alphabet Σ = {0, 1,..., 9}, die dezimale Codierungen von Zahlen, die durch sechs teilbar sind, darstellen. Also: L = {w Σ ; w ist eine durch sechs teilbare Zahl}. Um zu zeigen, dass L regulär ist, beobachten wir, dass ausser 0 kein Wort in L mit dem Buchstaben 0 beginnt, also ist L eine Untermenge der regulären Sprache L 1 = 0 + ( )( ) aller Wörter, die eine Zahl codieren. Ferner stellen wir fest, dass eine Zahl genau dann durch sechs teilbar ist, wenn sie gerade und durch drei teilbar ist. Also gilt L = L 1 L 2 L 3, wobei L 2 die Sprache aller Wörter, die mit einer geraden Zahl enden, ist: L 2 = ( ) ( ), und L 3 die Sprache aller Wörter ist, bei denen die Summe aller Ziffern durch 3 teilbar ist. Es bleibt zu zeigen, dass L 3 regulär ist. Wir untersuchen die Nerode- Äquivalenz von L 3 : falls Wörter w 1, w 2 über {0, 1,..., 9} zwei Zahlen repräsentieren, die modulo 3 kongruent sind, sind sie Nerode-äquivalent, denn w 1 u ist genau dann durch 3 teilbar, wenn w 2 u durch 3 teilbar ist. Jedes Wort ist also Nerode-äquivalent zu ε, 1, 2 oder 3. Die Nerode-Äquivalenz hat 4 Klassen, deswegen ist L 3 regulär.
34 30 KAPITEL 1. ENDLICHE AUTOMATEN Beispiel217 Beispiel 2. Ist die Sprache L {a, b} aller Wörter, deren Länge ungerade ist und die eine gerade Zahl an a s beinhalten, regulär? Wir sprechen also von der Sprache L = L 1 L 2, wobei L 1 die Sprache aller Wörter ungerader Länge und L 2 die Sprache der Wörter mit gerader Anzahl von a s ist. Es gilt: die Menge L 1 aller Wörter gerader Länge ist regulär: L 1 = (aa + ab + ba + bb). Also ist L 1 auch regulär. Die Sprache L 2 ist regulär, denn sie wird von dem folgenden Automaten akzeptiert: b a Bemerkung 1. In Beispiel 5 aus 1.2 haben wir eine Sprache gezeigt, die nicht regulär ist. Jetzt wollen wir ein Kriterium formulieren, das uns oft erlaubt, die Nichtregularität zu beweisen. Satz 2 (Pumping-Lemma für reguläre Sprachen). Falls L Σ eine reguläre Sprache ist, dann besitzt sie eine Konstante n 1, so dass für jedes Wort w aus L der Länge w n eine Zerlegung a b w = xyz mit x, y, z Σ existiert, für die gilt 1. y ε und xy n und 2. das aufgepumpte Wort xy k z liegt in L für jedes k = 0, 1, 2,... Beweis. Sei M ein DEA, der L akzeptiert, und sei n die Anzahl seiner Zustände. Für jedes Wort w L, das mindestens n Buchstaben hat, müssen sich in der Berechnung von w Zustände wiederholen. Das heißt, falls w = s 1 s 2... s p (p n) bezeichnen wir mit q 0,..., q p die Zustände von M in der Berechnung von w: q 0 ist der initiale Zustand und q 1 = δ(q 0, s 1 ),..., q p = δ(q p 1, s p ). Dann können die Zustände q 0,..., q p nicht alle voneinander verschieden sein, da wir nur n Zustände zur Verfügung haben und p + 1 > n. Wir betrachten die erste Wiederholung eines Zustandes in der Folge q 0,..., q p, d. h. es seien k und i die kleinstmöglichen Indices mit q i = q i+k, für i = 1,..., n und k 1. q 0 q 1... q i q i+k+1... q p q i+k 1 q i+1...
35 1.9. BEWEISE DER REGULARITÄT 31 Wir setzen x = s 1 s 2... s i y = s i+1 s i+2... s i+k z = s i+k+1 s i+k+2... s n Da k 1, gilt y ε. Da k und i die erste Wiederholung darstellen, also so klein wie möglich gewählt wurden, gilt ferner k +i n und somit xy n. Die Berechnung von w = xyz endet im Zustand q p, der final sein muß, weil w akzeptiert wird. Aber auch die Berechnung von xyyz endet im Zustand q p : nachdem xy berechnet worden ist, befindet sich der Automat M im Zustand q i+k = q i, und von diesem Zustand führt ihn das Wort yz nach q p. Deswegen wird auch xyyz akzeptiert. Analoges gilt für xy r z, falls r > 0. Und xz wird auch akzeptiert: hierbei wird der Kreis q i,..., q i+k 1 ausgelassen. Beispiel 3. Ist die Sprache L = {01, 0011, ,... } = {0 n 1 n ; n = 1, 2, 3,... } regulär? Nein, denn sonst hätten wir ein Wort xyz, y ε, so dass xy m z L für alle m 0. Aber aus xyz L, y ε, folgt xyyz L. Falls nämlich y nur aus 0 en besteht, hat xyyz mehr 0 en als 1 en, analog falls y nur aus 1 en besteht. Aber falls y 0 en sowie 1 en beinhaltet, hat xyyz eine 1 vor einer 0, also wieder xyyz L. Bemerkung 2. Das Pumping-Lemma wird oft für Beweise, dass eine Sprache L nicht regulär ist, benutzt. Dazu müssen wir die Aussagen des Pumping-Lemma negieren (wobei die Negation von es existiert X ist für alle... nicht X und umgekehrt). D.h., für jede Zahl n müssen wir ein Wort w in L finden mit Länge w n so dass das folgende gilt: für jede Zerlegung w = xyz mit y ε und xy n existiert ein k 0 mit xy k z / L. Beispiel 4. Ist die Sprache L = {0 n 1 k 0 m ; n, k, m = 0, 1, 2,... } regulär? Bestimmt! Sie ist doch repräsentiert durch Bemerkung 3. Was können wir über eine Sprache L sagen, wenn es uns nicht gelingt durch Pumping-Lemma zu beweisen, dass L nicht regulär ist? Können wir dann behaupten, dass L regulär ist? NEIN! Pumping Lemma ist keine Äquivalenz, nur eine Eigenschaft aller regulären Sprachen. Das illustriert das nächste Beispiel 5. Die Sprache L aller Wörter a i b j c k wobei i, j, k = 0, 1, 2, 3... und es gilt wenn i = 1 dann j = k ist nicht regulär. Trotzdem hat jedes Wort w ε von L eine Zerlegung w = xyz mit so dass alle Wörter xy k z in L liegen. y ε und xy 2 (a) Die Zerlegung. Wähle x = ε und y = aa. Das klappt für alle a i b j c k mit i 2. Für i = 1 wähle x = ε und y = a und für i = 0 wähle y = b (wenn j 0) oder y = c (sonst). (b) Die Nichtregularität von L. Die Sprache L 1 aller Wörter ab j c j ist nicht regulär: dies ist analog zum Beispiel 3. Es gilt L 1 = L ab c. Das beweist, dass L nicht regulär ist, denn der Durchschnitt regulärer Sprachen ist regulär.
36 32 KAPITEL 1. ENDLICHE AUTOMATEN 1.10 Algorithmische Aspekte von Automaten Algorithmus für Zugehörigkeit zu einer regulären Sprache Gegeben eine reguläre Sprache L wollen wir einen Algorithmus beschreibend, der für Eingabe w, ein Wort, entscheidet, ob w in L liegt. Wenn L durch einen DEA dargestellt wird, ist dies eine einfache Aufgabe: wir geben die n Buchstaben von w = s 1... s n ein, simulieren die n Schritte des DEAs und und am Ende wissen wir, ob der Zustand akzeptierend ist. Dies ist ein Algorithmus in linearer Zeit: es dauert O( w ) Schritte. Was passiert, wenn eine ε-nea benutzt wird? Erinnern wir uns an ε-hülle(q) rekursiv berechnet als die Menge S mit S = {q}; für alle Zustände p / S und r S mit r ε p setze S = S {p} Wenn die ε-nea k Zustände hat, dauert ein rekursiver Schritt Zeit ak (a eine Konstante) und es gibt höchstens k rekursive Schritte. Deswegen ist ε-hülle(q) in ak 2 Schritten berechnet. Gegeben ein Wort w = s 1... s n, definiere Mengen W 0,..., W n von zustände wie folgt: W 0 = ε-hülle(q 0 ) W i+1 = r Wi q ε-hülle(q) wobei q durch alle Zustände mit p s i+1 q läuft. Dann gilt: w liegt in L g.d.w. W n F Wir brauchen höchstens k (ak 2 ) = ak 3 Schritte um W i+1 zu berechnen, deswegen ist die gesamte Zeit ak 3 n. Da a sowie k Konstanten sind, ist dies wieder ein Algorithmus in Zeit O(n). Was passiert wenn L durch einen regulären Ausdruck repräsentiert wird? Wieder bekommen wir einen Algorithmus in linearer Zeit: Algorithmus für verschiedene Darstellungen Um einen regulären Ausdruck in einen ε-neas umzuwandeln, brauchen wir nur lineare Zeit. Der ε-neas hat darüber hinaus die folgenden Eigenschaften: (1) nur ein akzeptierender Zustand, aus dem keine Übergänge führen und (2) nur ein initialer Zustand, zu dem keine Übergänge führen. Gegeben einen regulären Ausdruck r, definieren wir einen solchen ε-nea A(r) rekursiv. Basisfall ist klar: A( ) = A(ε) = A(s) = s (s Σ)
37 1.10. ALGORITHMISCHE ASPEKTE VON AUTOMATEN 33 Für zusammengesetzte Ausdrücke benutzen wir A(r 1 ), A(r 2 )... auf Unterausdrücke r i von r und definieren A(r 1 + r 2 ) = ε A(r 1) ε ε A(r 2) ε A(r 1 r 2 ) = A(r 1) ε A(r 2) ε A(r ) ε A(r 1) ε ε Wir sehen, dass bei jedem rekursiven Schritt werden höchstens 2 Zustände mit 4 Übergängen hinzugefügt. Deswegen hat das Ergebnis für einen Ausdruck der Länge n höchstens 2n Zustände und 4n Übergänge (denn wir machen höchstens n rekursive Schritte). Einen Automaten in einen regulären Ausdruck umzuwandeln, dazu haben wir im Beweis des Kleeneschen Satzes einen Algorithmus gesehen: L k+1 ij = L k ij + L k ik(l k kk) L k kj Leider ist dies kein effizienter Algorithmus: die Länge des Ausdrucks L k+i ij kann 4- mal größer sein als die Ausdrücke mit deren Index k, deswegen ist die Dauer für einen Automaten von n Zuständen größer als 4 n. Diese exponentielle Zeit deutet an, dass der Algorithmus in der Praxis oft zu langsam wird Eigenschaften regulärer Sprachen Gegeben eine reguläre Sprache, wie schnell können wir überprüfen, ob sie leer ist? Ist sie durch einen DEA Automaten dargestellt, müssen wir nur den erreichbaren Teil berechnen und entscheiden, ob dort ein akzeptierender Zustand liegt. Dies dauert Zeit O(n 2 ) wobei n die Anzahl der Zustände ist. In der tat, gegeben ein Alphabet Σ mit k Symbolen, berechnen wir S 0 = {q 0 } S i+1 = {r; es gibt q S i und s Σ mit q s r } Die Anzahl der Rekursionsschritte ist höchstens n, jeder Schritt dauert höchstens nk Zeiteinheiten, deswegen gibt es höchstens n 2 k = O(n 2 ) Zeit. Auch bei anderen Darstellungen (ε-nea oder regulärer Ausdruck) brauchen wir aufgrund der oberen Algorithmen nur quadratische Zeit. Eine verwandte Frage: gegeben eine reguläre Sprache L über Σ, gilt L = Σ? Wieder gibt es einen Algorithmus in quadratischer zeit, wenn L als DEA dargestellt wird: wir tauschen die akzeptierenden und nicht-akzeptierenden Zustände um und verwenden den vorigen Algorithmus.
38 34 KAPITEL 1. ENDLICHE AUTOMATEN Minimierung von Automaten Wir wissen, dass die Minimierung eines DEAs von n Zuständen in zwei Schritten durchführbar ist: (1) die Berechnung des erreichbaren Teils (dauert Zeit O(n)); (2) die Berechnung des minimalen Quotient Automaten. In Schritt (2) haben wir einen Algorithmus, der die Relation berechnet, gesehen. Das war ein rekursiver Algorithmus, der höchstens n 2 rekursive Schritte machte und in jedem Schritt Zeit kn 2 (k Symbole in Σ) brauchte. Deswegen haben wir in Zeit O(n 4 ) die Relation. Die Konstruktion des Quotient-DEA dauert nur nk Schritte: für jeden Zustand q brauchen wir zu entscheiden, ob seine Klasse [q] neu ist und wenn ja, welche k Übergänge sie macht. Die Minimierung eines DEA kann in Zeit O(n 4 ) durchgeführt werden. Im Gegensatz, einen Zustand-minimalen NEA für eine Sprache zu konstruieren ist ein Problem der Klasse PSPACE und deswegen ist es unwahrscheinlich, dass es einen Algorithmus mit polynomialer Zeitkomplexität gibt.
39 Kapitel 2 Kontextfreie Sprachen und Kellerautomaten 2.1 Die Idee einer formalen Grammatik ectbspaltzweieinseins bspaltzweieinseins Wir haben gesehen, wie endliche Automaten eine Sprache akzeptieren. In vielen Gebieten der Software-Entwicklung ist es aber wichtiger, Sprachen zu erzeugen, als zu akzeptieren. Dafür sind die regulären Ausdrücke besser als die endlichen Automaten geeignet. Das illustrieren wir informell durch einige Beispiele, bevor wir die formale Definition präsentieren. Beispiel 1. Betrachten wir die Sprache L, die durch den regulären Ausdruck a(a + b )b definiert wird. Dieser Ausdruck erzeugt die Wörter der Sprache L, indem er sagt: 1. Der erste Buchstabe ist a. 2. Dann folgt der Rumpf T des Wortes: eine Reihe lauter a s oder b s. 3. Am Ende kommt ein b. Diese Erzeugungsidee kann wie folgt formalisiert werden: sei S ein Startsymbol oder das Symbol, das wir abstrakt String (= Wort) nennen. Wir können 1., 2., 3. kompakt durch die folgenden drei Ersetzungsregeln ausdrücken. Zuerst hat jedes Wort die Form at b, wobei T der Rumpf aus a + b ist: 1. S at b. Das Symbol soll kann sein gelesen werden; hier also S (String) kann a(rumpf)b sein. Jetzt müssen wir den Rumpf durch geeignete Regeln erzeugen. Zuerst führen wir eine Variable A für String aus a s ein; diese wird durch die folgenden Regeln 2. A ε aa ( A kann entweder ε oder von der Form aa sein ) bestimmt. Analog für 3. B ε bb und letztlich ectbspaltzweieinszwei 4. T A B ( der Rumpf kann entweder A oder B sein ). 35
40 36 KAPITEL 2. KONTEXTFREIE SPRACHEN UND KELLERAUTOMATEN bspaltzweieinszwei sectbspaltzweieinsdrei Beispiel 2. Die Sprache aller Wörter 0 n 1 n (n = 1, 2, 3,... ) lässt sich durch die folgenden Regeln S 01 0S1 erzeugen. In dieser Sprache gilt: ein Wort S kann (nur) 01 oder von der Form 0(Wort)1 sein. bspaltzweieinsdrei Beispiel 3. Die Sprache aller Palindrome, d.h. aller Wörter im Alphabet Σ = {a, b,..., z}, die rückwärts genauso gelesen werden wie vorwärts, lässt sich durch die folgenden Regeln S ε asa bsb... zsz a b... z erzeugen. Diese Beispiele illustrieren informell die Idee einer formalen Grammatik: a. Man unterscheidet zwischen den eigentlichen oder terminalen Symbolen, in denen die erzeugten Wörter geschrieben werden (z.b. a, b in Beispiel 1 in Abschnitt 2.1) und Hilfssymbolen oder Variablen (z.b. S, T, A, B in Beispiel 1in Abschnitt 2.1). b. Die Grammatik besteht aus Ersetzungsregeln (kurz Regeln, auch Produktionen genannt) der Form A w, die uns erlauben, in jedem Wort den Buchstaben A durch das Wort w zu ersetzen. c. Wir interessieren uns lediglich für die Wörter über dem terminalen Alphabet, die aus dem Startsymbol S ableitbar (durch eine oder mehrere Anwendungen der Regeln) sind. Notation. Ersetzungsregeln A w 1,..., A w n mit derselben linken Seite werden kompakter als A w 1 w 2... w n beschrieben. 2.2 Kontextfreie Grammatik Definition. Eine kontextfreie Grammatik G ist ein Quadrupel G = (Σ, V, S, P), wobei Σ ein Alphabet (aller terminalen Symbole) ist, V ein Alphabet (aller Variablen oder nichtterminalen Symbole) ist, das zu Σ disjunkt ist, S V das Startsymbol ist und P eine endliche Untermenge von V (Σ V ) ist, deren Elemente Produktionen (oder Regeln) heißen und in der Form A a 1 a 2... a n mit A V und a 1... a n (Σ V ) dargestellt werden. Bemerkung 1. Die Anwendung der Produktion A a 1 a 2... a n auf ein Wort w bedeutet, dass im Wort w der Buchstabe A durch das Wort u = a 1 a 2... a n ersetzt wird. (Das ist nur möglich, falls w den Buchstaben A enthält. Falls w den Buchstaben an verschiedenen Stellen enthält, sind verschiedene Ergebnisse einer Anwendung der Produktion auf w möglich.) Formal: Sei w = w Aw ein Wort, wobei w, w (Σ V ) Wörter sind. Das Ergebnis der Anwendung der Produktion A u auf w ist das Wort w uw. Falls n = 0, die Produktion also die Form A ε hat, ist das Ergebnis der Anwendung auf w = w Aw das Wort w w. Da ε die Rolle der Bezeichnung des leeren Wortes hat, brauchen wir die folgende Voraussetzung: Weder Σ noch V enthält das Symbol ε.
41 2.2. KONTEXTFREIE GRAMMATIK 37 Notation. 1. Mit bezeichnen wir die Anwendung einer einzelnen Produktion; also schreiben wir für Wörter w, v (Σ V ) w v, falls es eine Produktion A u der Grammatik und Wörter w, w (Σ V ) gibt, so dass w = w Aw und v = w uw. 2. Mit bezeichnen wir die reflexive und transitive Hülle der Relation. Das heißt: w v [zu lesen: v ist aus w ableitbar] bedeutet, dass w = v oder w v, oder es gibt Wörter w 1,..., w n mit w w 1 w 2... w n v. Bemerkung 2. Das Wort w = w Aw heißt der Kontext, in dem sich der Buchstabe A befindet. Die obige Definition der Anwendung sagt uns, dass eine Produktion A u ohne Berücksichtigung des Kontextes von A angewendet wird deshalb spricht man von kontextfreien Grammatiken. Definition. Für jede kontextfreie Grammatik G heißt die Menge aller Wörter über dem Terminalalphabet Σ, die aus dem Startsymbol ableitbar sind, die von G erzeugte Sprache L(G). Kürzer: L(G) = {w Σ ; S w}. Beispiel 1. Palindrome. Hier nehmen wir die Sprache L {0, 1} aller Worte w deren Umkehrung w R das gleiche Wort ist: w = w R. Z.B. ε, 0 und 1 sind Palindrome. Jedes andere Palindrom hat die Form 0S0 oder 1S1 (wobei S ein Palindrom ist). Das können wir durch folgende Liste von Regeln (oder Produktionen ausdrücken: S ε S 0 S 1 S 0P 0 S 1P 1 Hier ist P eine Variable, die Palindrome darstellt. Beispiel 2. Arithmetische Ausdrücke. Wir wollen Ausdrücke, die die Operationen + und auf Bezeichner (oder Identifier, kurz I) anwenden. Als Bezeichner benutzen wir Wörter über {a, b, 0, 1} die mit a oder b anfangen. hier brauchen wir zwei Variablen: E für Ausdruck (expression) und I für Bezeichner (identifier) mit den
42 38 KAPITEL 2. KONTEXTFREIE SPRACHEN UND KELLERAUTOMATEN Regeln E I E E + E E E E I a I b I Ia I Ib I I0 I I1 Aufpassen, dies genügt nicht z.b. für (a + a0) (b1 + b0), wir brauchen noch E (E) Notation. Alle Regeln mit der selben Variablen auf der linken Seite werden zusammengefasst und durch getrennt. Die obere Liste hat dann die Form sectbspaltzweizweieins bspaltzweizweieins E I E E E + E (E) I a b Ia Ib I0 I1 Beispiel 3. Die Sprache L = {0 n 1 n ; n = 1, 2, 3,... } wird von der folgenden Grammatik G erzeugt wird: G = ({0, 1}, {S}, S, P), wobei P die folgenden Produktionen sind: S 01 0S1 Das beweisen wir jetzt formal. Beweis. (von L = L(G)) 1. Wir zeigen zuerst, dass jedes Wort 0 n 1 n ableitbar ist, das heißt, dass L L(G) gilt: wir wenden (n 1)-mal die Produktion A 0S1 an und bekommen S 0S1 00S n 1 S1 n 1. Jetzt wird die Produktion S 01 angewendet: S 0 n 1 S1 n 1 0 n 1 n. 2. Demnächst zeigen wir, dass L(G) L gilt. Wir beweisen eine etwas allgemeinere Aussage (die auch Wörter mit Variablen betrifft). Jedes Wort w {0, 1, S}, das aus S ableitbar ist, hat die Form w = 0 n 1 n oder w = 0 n S1 n. Das beweisen wir durch Induktion über der Länge k der Ableitung S w: k = 0 w = S ist hier von der zweiten Form (mit n = 0). k k + 1 Falls w das vorletzte Wort der Ableitung von w ist, so gilt: S w w, und für w haben wir eine Ableitung der Länge k. Nach der Induktionsvoraussetzung gilt also entweder w = 0 n 1 n (das ist aber nicht möglich, denn es gilt w w und auf 0 n 1 n kann man keine Produktion anwenden) oder w = 0 n S1 n. Die beiden Produktionen unserer Grammatik ergeben dann w = 0 n+1 1 n+1 oder w = 0 n+1 S1 n+1.
43 2.2. KONTEXTFREIE GRAMMATIK 39 ectbspaltzweizweizwei bspaltzweizweizwei Beispiel 4. Hier wollen wir ein Beispiel, das in die Richtung natürlicher Sprachen geht, vorführen. Wir verwenden die folgenden Variablen: S Startsymbol (oder Satz ) (SBS) Substantiv (ADJ) Adjektiv (VRB) Verb (PHR) Phrase mit den folgenden Produktionen: 1. Ein Satz hat die Form (Phrase)(Verb)(Phrase): S (PHR)(VRB)(PHR) 2. Phrase ist ein Substantiv mit oder ohne einem Adjektiv: (PHR) (SBS) (ADJ)(SBS) ectbspaltzweizweidrei bspaltzweizweidrei 3. Produktionen für Terminalsymbole: (SBS) Apfel Karl (ADJ) groß grün (VRB) isst Genauer: wir betrachten die Grammatik G = (Σ, V, S, P ), wobei Σ = { Apfel, Karl, groß, grün, isst }, V = {S, (SBS), (ADJ), (VRB), (PHR)} und P aus den oben genannten Produktionen 1. bis 3. besteht. Einige Beispiele der Sätze, die die Grammatik erzeugt: Karl isst Apfel groß Karl isst grün Apfel. Da unsere Grammatik kontextfrei ist, erhalten wir leider auch Sätze, die dem intuitiven Kontext nicht entsprechen, wie z.b. grün Karl isst grün Karl. Beispiel 5. Reguläre Ausdrücke. Erinnern wir uns an die Definition eines regulären Ausdrucks r, sagen wir, über {0, 1}: r = 0 1 ε r + r r r r* (r) Das ist fast eine kontextfreie Grammatik für reguläre Ausdrücke mit Startsymbol r. Wir müssen aber die folgenden Details modifizieren: 1. Die ersten vier regulären Ausdrücke werden selbstverständlich Terminalsymbole unserer Grammatik. Da aber ε kein Terminalsymbol sein darf, schreiben wir statt dessen epsilon. Also: die Sprache, die nur das leere Wort beinhaltet, ist mit epsilon repräsentiert. 2. Statt r schreiben wir r (zwei Buchstaben). 3. Wir erlaubten, r r als rr zu schreiben, jetzt bestehen wir auf r r. Das heißt, wir arbeiten mit der Grammatik G = (Σ, {r}, r, P ), wobei die Terminalsymbole die folgenden sind: Σ = {0, 1, epsilon,, (, ), +,, }, die einzige Variable r das Startsymbol ist und P die folgende Menge von Produktionen ist: r 0 1 epsilon r + r r r r (r)
44 40 KAPITEL 2. KONTEXTFREIE SPRACHEN UND KELLERAUTOMATEN Es ist klar, dass (mit den obigen Modifikationen) die Sprache L(G) nur reguläre Ausdrücke über {0, 1} enthält. Umgekehrt gilt, dass jeder reguläre Ausdruck ein Wort in L(G) ist, denn die Menge aller regulären Ausdrücke ist (laut Definition) die kleinste Menge, in der 0, 1, epsilon und enthalten sind, und dass für Elemente r 1, r 2 dieser Menge auch r 1 +r 2, r 1 r 2, r 1 und (r) Elemente sind und L(G) erfüllt dies alles. Zum Beispiel ist die Sprache aller Wörter, die mit 11 anfangen und, falls noch etwas kommt, die Form 1101 n 0 haben, durch den regulären Ausdruck 11(01*0 + ε) repräsentiert, oder, modifiziert: 1 1 (0 1 0+epsilon). Dafür haben wir die folgende Ableitung: r r r r (r) r (r + r) r (r r + r) r (r r r + r) r (r r r + r) r r (r r r + r) 1 r (r r r + r) 1 1 (r r r + r) 1 1 (0 r r + r) 1 1 (0 1 r + r) 1 1 ( r) 1 1 ( epsilon) Satz 1. Für jede kontextfreie Grammatik gilt: aus u 1 u 1 und u 2 u 2 folgt u 1 u 2 u 1u 2 für alle Wörter u 1 u 2, u 1u 2 über Σ K. Proof. 1. Aus u u folgt vuw vu w (für beliebige Wörter u, u, v und w über Σ V ). In der Tat haben wir u = u 1 Au 1 und u = u 1 zu 1, wobei A z eine Produktion unserer Grammatik ist. Es gilt vuw = (vu 1 )A(u 2 w) und vu w = (vu 1 )z(u 2 w), und das beweist, dass dieselbe Produktion vuw vu w ergibt. 2. Aus u u folgt vuw vu w. Dies ist eine wiederholte Anwendung des ersten Falls. 3. Aus u 1 u 1 und u 2 u 2 folgt u 1 u 2 u 1u 2. In der Tat gilt u 1 u 2 u 1u 2 (wir können 2. mit v = ε und w = u 2 anwenden) und u 1u 2 u 1u 2 (wir können 2. mit v = u 1 und w = ε anwenden). 2.3 Anwendungen von kontextfreien Grammatiken 1. Parser. Grammatiken werden zur Beschreibung von Programmiersprachen angewendet. Wo eine reguläre Sprache vorhanden ist, z.b., bei Beschreibung der Bezeichners als lex-eingabe, können DEAs angewendet werden. Beispiel 1. Bezeichner, die alphanumerisch sind und mit einem Buchstaben anfangen müssen. In Programmiersprache C: [A Z, a z][a Z, a z, 0 9]
45 2.3. ANWENDUNGEN VON KONTEXTFREIEN GRAMMATIKEN 41 dies entspricht dem DEA state A Z,a z A z,a z,0 9 stateerror Aber viele Aspekte der Programmiersprachen sind zu komplex für eine reguläre Sprache. Z.B. die richtige Klammerung, wobei die Struktur der rechten Klammern korrekt zu der den linken Klammern passt. Schon die Sprache L = {(), (()), ((())),...} aller solcher Ausdrücke OHNE andere Symbole ist nicht regulär! (Erinnern wir uns an den Beweis für a n b n, n N.) Aber sie ist kontextfrei: Beispiel 2. Die Grammatik mit Produktionen erzeugt die obere Sprache. S (T ) T (T ) ε Befehl YACC in unix-systemen erzeugt die Syntaxbäume aus einer kontextfreien Grammatik. Die Notation von Produktionen, die Aktionen heißen, ist ähnlich, nur wird durch ersetzt. Eine Aktion wird ausgeführt, sobald ein Knoten des Syntaxbaumes erzeugt wird, der dieser Aktion entspricht. Terminalsymbole werden durch halbe Ausführungszeichen bezeichnet. Beispiel 3. Quellcode Exp Id Id Exp + Exp Exp Exp ( Exp ) b a I a I b I 0 I 1 HTML Dokumente Hier ein Beispiel, dass Text als eine Kette von Zeichen Char definiert (inkl. leeres Zeichen). Und Dokument Doc als entweder leer oder folgen von Elementen. Wobei Element ist entweder Text oder zusammengehörige Tags, die ein Dokument einschließen (<EM> und </EM>) oder nur einleiten (<P>). Die letzte Möglichkeit von Tag ist <OL>List</OL> wobei List eine Liste von Listitem ist, die die Form LIDoc haben: Char a A... z Z
46 42 KAPITEL 2. KONTEXTFREIE SPRACHEN UND KELLERAUTOMATEN Text ε Char Text Doc ε Element Doc Element Text <EM> Doc </EM> <P> Doc <OL> List </OL> List ε Listitem List Listitem <LI> Doc 2.4 Ableitungsbäume Eine Möglichkeit, um Ableitungen anschaulicher zu machen, ist das Benutzen des Ableitungsbaumes (auch Pars-Bäume genannt), wobei dir Produktion A a 1... a n durch den Baum A sectbspaltzweidreieins a 1 a 2... a n 1 a n repräsentiert wird. Bevor wir diese Idee formalisieren, zeigen wir zwei Beispiele informell. bspaltzweidreieins Beispiel 1. In der Grammatik für die Sprache 0 n 1 n (Beispiel 2 in Abschnitt 2.1) wird die Ableitung von wie folgt repräsentiert: S 0 S 1 0 S 1 sectbspaltzweidreizwei bspaltzweidreizwei 0 1 Hier sehen wir, dass der Baum mit Symbolen aus Σ V markiert wird, die Blätter terminale Symbole und die inneren Knoten Variablen tragen. Für jeden inneren Knoten formen alle Markierungen der Nachkommen entweder 01 oder 0S1, was den beiden Produktionen S 01 und S 0S1 entspricht. Beispiel 2. Die Sprache aa(aa + bb) aller Wörter, in denen jeder Buchstabe wiederholt wird und die mit aa beginnen, hat die Grammatik G = ({a, b}, {S, T }, S, P ) mit den Produktionen P :
47 2.4. ABLEITUNGSBÄUME 43 S aat T ε aat bbt. Hier ist ein Ableitungsbaum für die Ableitung von aaaabb: S a a T a a T b b T ε Daran sehen wir, dass das Symbol ε (das aufgrund der Produktion T ε aufgetaucht ist) einfach ignoriert werden soll. Bemerkung 1. Wir wollen kurz an die Begriffe geordneter und ungeordneter Baum erinnern. Ein gerichteter Graph wird Baum genannt, falls er einen Knoten w (genannt Wurzel) hat, so dass für jeden weiteren Knoten genau ein gerichteter Pfad von der Wurzel zu diesem Knoten existiert. (Ein Pfad zwischen x und y ist eine Liste von Knoten x = z 0, z 1,..., z n = y, so dass (z i 1, z i ) für i = 1,..., n eine Kante ist.) Sei ein solcher Pfad für einen Knoten x wie folgt gegeben: w = z 0, z 1,..., z n = x. Dann heißt der Knoten z n 1 der Vorfahre von x. Umgekehrt heißt x ein Kind des Knoten z n 1. Jeder Knoten außer w hat also genau einen Vater. Knoten, die keine Söhne haben, heißen Blätter. Ein geordneter Baum besteht aus folgenden zwei Komponenten: 1. einem Baum B und 2. einer linearen Ordnung aller Kinder von x, für jeden Knoten x, der kein Blatt ist. Falls y und z zwei Söhne von x sind, sagen wir, dass y links von z steht, falls in der Ordnung aller Söhne y vor z steht. Ein markierter geordneter Baum, kurz: Baum, mit der (gegebenen) Markierungsmenge M, ist ein geordneter Baum zusammen mit einer Funktion von der Menge aller Knoten nach M. Bäume können kürzer rekursiv definiert werden: 1. Die Wurzel allein mit einer Marke a M ist ein Baum: a 2. Falls Bäume B 1,..., B n (n 1) und eine Marke a M für die Wurzel gegeben sind, so ist auch a B 1 B 2 B n... ein Baum.
48 44 KAPITEL 2. KONTEXTFREIE SPRACHEN UND KELLERAUTOMATEN 3. Jeden Baum kann man durch endlich viele Anwendungen von 1. und 2. repräsentieren. Die Tiefe eines Baumes ist die maximale Länge eines Pfades (von der Wurzel zum entferntesten Blatt). Definition. Sei G = (Σ, V, S, P ) eine kontextfreie Grammatik. Ein Ableitungsbaum ist ein Baum B mit Markierungen von Knoten in der Markierungsmenge Σ V {ε} so dass gilt: Jeder innere Knoten wird mit einer Variablen A markiert, und falls alle seine Söhne von links nach rechts mit a 1,..., a n markiert werden, ist A a 1... a n eine Produktion in P. sectbspaltzweidreidrei bspaltzweidreidrei Das Ergebnis des Ableitungsbaumes B ist das Wort w aus den Markierungen aller Blätter von links nach rechts, wobei Blätter mit Markierung ε werden ignoriert. Falls alle Blätter von B mit ε markiert sind, gilt w B = ε. Beispiel 3. In der Grammatik G aus Beispiel 2 in Abschnitt 2.4 sind die folgenden Bäume Beispiele für Ableitungsbäume: S S S a a T a a T b b T S ε a a T a a T b b T Bemerkung 2. Wir wollen jetzt zeigen, dass für jede kontextfreie Grammatik G gilt: Ein Wort w liegt in L(G) w hat einen Ableitungsbaum mit Wurzel S und w Σ. Wir müssen betonen, dass es im allgemeinen mehrere Ableitungsbäume für ein Wort w L(G) gibt, z.b. hat das Wort abc in einer Grammatik mit den Produktionen S as ab Sc bc die folgenden Ableitungsbäume: ε
49 2.4. ABLEITUNGSBÄUME 45 S S S c a S a b b c Konstruktion eines Ableitungsbaumes: Sei w ein Wort über Σ, das aus S ableitbar ist. Wir konstruieren einen Ableitungsbaum B mit w = w B wie folgt. Gegeben eine Ableitung S w 1 w 2... w n 1 w n = w. Wir konstruieren Bäume B 1,..., B n, so dass die Blätter von B i das Wort w i formen; der Baum B n ist dann ein Ableitungsbaum für w. Baum B 1 : Sei w 1 = a 1... a p, dann ist S a 1... a p eine Produktion unserer Grammatik. Wir setzen: B 1 : S a 1 a 2... a p Falls n = 1, das heißt S w, ist dies ein Ableitungsbaum für w. Baum B 2 : Sei A b 1... b q eine Produktion unserer Grammatik, deren Anwendung die Ableitung w 1 w 2 ergibt: w 1 = a 1... a i 1 Aa i+1... a p (das heißt A = a i ) und w 2 = a 1... a i 1 b 1... b q a i+1... a p Wir setzen B 2 : S a 1... a i 1 a i a i+1... a p Und so weiter. b 1 b 2... b q ctsatzaltzweidreieins satzaltzweidreieins Satz 1. Für jede kontextfreie Grammatik G ist L(G) genau die Sprache aller Wörter über Σ, die einen Ableitungsbaum mit Wurzel S haben. Beweis. Aus der obigen Konstruktion folgt, dass jedes Wort in L(G) einen Ableitungsbaum mit Wurzel S hat. Umgekehrt beweisen wir jetzt, dass für jeden Ableitungsbaum B mit Wurzel X gilt X w B. Falls B keine Variablen in den Blättern hat, folgt w B Σ. Falls nun außerdem X = S gilt, haben wir also w B L(G). Wir benutzen Induktion über die Tiefe k des Baumes B. k = 0 Hier besteht der Baum B aus der Wurzel allein, also gilt w B = X und deswegen X w B. k k + 1 Seien a 1,..., a n die Markierungen aller Kinder der Wurzel (von links nach rechts).
50 46 KAPITEL 2. KONTEXTFREIE SPRACHEN UND KELLERAUTOMATEN X a 1 a 2... a n sectbspaltzweidreivier bspaltzweidreivier B 1 B 2 B n Mit B i bezeichnen wir den Baum aller Knoten mit einem Pfad von a i, für i = 1,..., n. Dann ist B i ein Ableitungsbaum mit Wurzel a i der Tiefe k. Die Induktionsvoraussetzung ergibt also a i w Bi für i = 1,..., n. Aus der ersten Bemerkung in 2.2 sehen wir, dass dann a 1 a 2... a n w B1 a 2... a n w B1 w B2 a 3... a n w B1 w B2... w Bn. Ferner ist X a 1... a n eine Produktion unserer Grammatik, weswegen gilt X a 1... a n w B1 w B2... w Bn. Aus der Konstruktion der Bäume B 1,..., B n sehen wir, dass das Wort w B gleich dem Wort w B1 w B2... w Bn ist. Das beweist also X w. Beispiel 4. Die Syntax von vielen Programmiersprachen kann man durch eine kontextfreie Grammatik erzeugen. Das zeigen wir anhand einer sehr einfachen Sprache, deren Befehle COM nur eine der folgenden Formen 1. bis 3. haben: 1. COM = VAR := AEXP (Zuweisung), wobei VAR eine Variable (sagen wir, hier nur x oder y) und AEXP ein algebraischer Ausdruck ist. 2. COM = COM; COM (Verkettung) oder 3. COM = if BEXP then COM else COM, wobei BEXP ein Boolescher Ausdruck ist. Für AEXP erlauben wir nur Variablen x, y, Konstanten 0, 1, 2 und Operationen +,. Für Boolesche Ausdrücke sind nur Konstanten true, false oder eine Gleichung zweier algebraischer Ausdrücke mit den üblichen Operationen and, not erlaubt. Unsere Grammatik G hat also die folgenden terminalen Symbole: Σ = {x, y, 0, 1, 2, +,, true, false, =,, ;, and, not, if, then, else} und die folgenden nichtterminalen Symbole: V = {COM, AEXP, BEXP} mit dem Startsymbol COM. Die Produktionen sind: COM x = AEXP y = AEXP COM; COM if BEXP then COM else COM AEXP x y AEXP AEXP AEXP AEXP BEXP true false AEXP = AEXP and BEXP BEXP not BEXP Zum Beispiel das Programm x = 1; if x = y then y = + xy else y = 0 hat den Ableitungsbaum
51 2.5. KONTEXTFREIE UND REGULÄRE SPRACHEN 47 COM COM ; COM x = AEXP 1 if BEXP then COM else COM AEXP = AEXP y = AEXP y = AEXP x y + AEXP AEXP 0 ctsatzaltzweidreizwei satzaltzweidreizwei Satz 2. Für eine kontextfreie Grammatik G bezeichnen wir die maximale Länge der rechten Seite einer Produktion mit k. Dann hat jedes Wort in L(G) mit einem Ableitungsbaum der Tiefe i höchstens die Länge k i. x y Beweis. Für jeden Ableitungsbaum B beweisen wir, dass das Wort w B, das die Blätter von B bilden (wenn ε wie üblich ignoriert wird), höchstens die Länge k i hat. Der Beweis ist durch Induktion über die Tiefe i des Baumes B durchzuführen. Induktionsanfang i = 0: Ein Baum der Tiefe 0 besteht nur aus der Wurzel und somit gilt: w B hat eine Länge 1 = k 0. Induktionsschritt: Jeder Baum der Tiefe i + 1 > 0 hat die Form A B 1 B 2... B n wobei B 1,..., B n (n 1) Bäume sind, deren Tiefe höchstens i ist. Nach der Induktionsvoraussetzung gilt: die Länge des Wortes w Bj für j = 1,..., n ist höchstens k j. Seien a 1,..., a n die Markierungen aller Söhne von A (d.h. aller Wurzeln von B 1,..., B n ). 1. Falls a 1,..., a n in Σ V liegen, gilt w B = w B1 w B2... w Bn (Konkatenation), und die Länge von w B ist also höchstens k i +k i + +k i = nk i. Da A a 1,..., a n eine Produktion in P ist, gilt (nach Definition von k) n k, also nk i k i Falls sich ε unter den a k s befindet, gilt n = 1 und w B = ε: A ε Die Länge von w B ist 0 k i Kontextfreie und reguläre Sprachen ectbspaltzweiviereins bspaltzweiviereins Definition. Eine Sprache heißt kontextfrei, falls sie von einer kontextfreien Grammatik erzeugt werden kann, d.h. falls sie die Form L(G), G ist eine kontextfreie Grammatik hat. Beispiel 1. Kontextfreie Sprachen:
52 48 KAPITEL 2. KONTEXTFREIE SPRACHEN UND KELLERAUTOMATEN a. Die Sprache aller regulären Ausdrücke ist kontextfrei siehe Beispiel 5 in Abschnitt 2.2. b. Die (nichtreguläre) Sprache L = {0 n 1 n ; n = 1, 2, 3,... } ist kontextfrei siehe Beispiel 3 in Abschnitt 2.2. c. Die Sprache L = {a n b n c n ; n = 1, 2, 3,... } ist nicht kontextfrei, wie wir in Abschnitt 2.5 beweisen werden. d. Im Gegensatz zu c. ist die Sprache L = {a n b n c k ; n, k = 1, 2, 3,... } kontextfrei. Sie wird von der folgenden Grammatik G = ({a, b, c}, {S, T }, S, P ) mit den Produktionen S Sc T c T ab at b erzeugt. In der Tat: (a) Jedes Wort a n b n c k (n 1, k 1) ist ableitbar: S S c S c S c k-mal T c a T b a T b a T b (n 1)-mal a T b sectsatzaltzweiviereins satzaltzweiviereins a b (b) Jedes ableitbare Wort aus {a, b, c} hat die Form a n b n c k. Allgemeiner: jedes von S ableitbare Wort aus {a, b, c, T } hat entweder die Form a n b n c k oder a n T b n c k. Das folgt aus der Form der Ableitungsbäume und kann leicht durch Induktion über die Tiefe des Baumes bewiesen werden. Satz 1. Jede reguläre Sprache ist kontextfrei. Bemerkung 1. Für jede reguläre Sprache werden wir in der Tat eine Grammatik finden, deren Produktionen die Form A ε oder A bb (A, B V, b Σ) haben. Beweis. Für jede reguläre Sprache L gibt es einen endlichen Automaten M = (Q, Σ, δ, q 0, F ), der L akzeptiert. Wir definieren eine Grammatik G, deren Variablen die Zustände
53 2.5. KONTEXTFREIE UND REGULÄRE SPRACHEN 49 von M sind, wie folgt: G = (Σ, Q, q 0, P) mit den folgenden Produktionen P: A ε für jeden finalen Zustand A und A sb für jeden Übergang A s B Wir beweisen, dass L = L(G) gilt. 1. Zuerst zeigen wir, dass jedes akzeptierte Wort w = s 1... s n in der Grammatik G ableitbar ist; also folgt L L(G). Aus den Zuständen der Berechnung von s 1... s n : s 1 s 2 s q 0 q 1... n q n erhalten wir den Ableitungsbaum für w: q 0 s 1 q 1 s 2 q 2 s 3 q n 1 s n q n ohne Variablen in den Blättern. ε 2. Jetzt zeigen wir, dass jedes ableitbare Wort w = s 1... s n von M akzeptiert wird, d.h. L(G) L: ein Ableitungsbaum ohne Variablen in den Blättern muss nämlich die obige Form haben, dann folgt aus q i = δ(q i 1, s i ), dass δ (q 0, w) = q n F. ectkoraltzweiviereins koraltzweiviereins Definition. Eine reguläre Grammatik ist eine kontextfreie Grammatik, deren Produktionen die Form A b 1 b 2... b n oder A b 1 b 2... b n B haben, wobei A, B Variablen sind und b 1... b n ein (möglicherweise leeres) Wort aus terminalen Symbolen ist. Korollar 1. Jede reguläre Sprache kann durch eine reguläre Grammatik erzeugt werden. Bemerkung 2. Wir haben im Satz 1 in Abschnitt 2.5 scheinbar etwas mehr bewiesen: nicht nur, dass reguläre Sprachen mit Hilfe der Produktionen A b 1... b n oder A b 1... b n B erzeugbar sind, sondern auch, dass uns die einfacheren Produktionen A ε oder A bb genügen. Dies ist allerdings nicht allgemeiner, denn jede reguläre Grammatik G kann so modifiziert werden, dass nur diese einfachere Form der Produktionen vorkommt. Genauer, eine einfachere Grammatik G mit L(G) = L(G ) kann wie folgt konstruiert werden: 1. Jede Produktion A b 1 b 2... b n mit n 1 kann man durch die folgenden Produktionen ersetzen:
54 50 KAPITEL 2. KONTEXTFREIE SPRACHEN UND KELLERAUTOMATEN A b 1 B 1 B 1 b 2 B 2 B n 2 b n 1 B n 1 B n 1 b n B n B n ε (wobei B 1,..., B n neue Variablen sind, die sich paarweise unterscheiden). In der Tat, die Produktion A wird dann durch b 1 b 2... b n A b 1 B 1 b 2 B n 1 b n B n ε ersetzt. (Und kein anderer Ableitungsbaum kann mit den neuen Variablen konstruiert werden.) Also gilt L(G) = L(G ). 2. Analog ersetzt man A b 1 b 2... b n B durch A b 1 B 1 b 2 B n 1 b n B sectbspaltzweivierzwei bspaltzweivierzwei 3. Es bleiben also Produktionen der Form A ε, A bb oder A B. Aus dem folgenden Satz folgt, dass die letzte Form auch ersetzbar ist. Beispiel 2. Die folgende Grammatik G = ({0, 1}, {S, A, B}, S, P ) mit den Produktionen P : S 01A 0A 0B B 1 1B A ε ist regulär. Sie kann durch die Grammatik G = ({0, 1}, {S, A, B, C, D}, S, R ) ersetzt werden, deren Produktionen R die folgenden sind:
55 2.5. KONTEXTFREIE UND REGULÄRE SPRACHEN 51 ctsatzaltzweivierzwei satzaltzweivierzwei S 0C 0A 0B C 1A B 1D 1B D ε A ε Satz 2. Jede reguläre Grammatik erzeugt eine reguläre Sprache. Beweis. Wie aus der obigen Bemerkung folgt, genügt es zu zeigen, dass jede reguläre Grammatik G = (Σ, V, S, P ), deren Produktionen eine der Formen A ε, A bb, oder A B haben, eine reguläre Sprache erzeugt. Wir konstruieren einen NEAS wie folgt: M = (V, Σ, δ, S, F ), also sind Zustände die Variablen von G, mit S als Initialzustand. Die finale Zustände sind gerade die Variablen, bei denen A ε eine Produktion in P ist. Die Übergänge sind durch die Produktionenn der Grammatik bestimmt: A S B im Automaten M A sb ist eine Produktion und A # B im Automaten M A B ist eine Produktion. Dann gilt: L(G) = L(M), also akzeptiert M ein Wort w genau dann, wenn S w. In der Tat, falls M das Wort w = s 1... s n akzeptiert, haben wir eine Berechnung (1) S # A 1 #... s 1 A i1 #... s n A in #... # A k im Automaten M, und wir haben einen Ableitungsbaum ohne Variablen in den Blättern, der diese Berechnung kopiert: (2) S A 1 A i1 1 s 1 A i1 A i2 1 s 2 A i2 A in 1 s n A in A k ectkoraltzweivierzwei koraltzweivierzwei ε Umgekehrt wird jedes Wort w mit einem Ableitungsbaum B ohne Variablen in den Blättern von M akzeptiert: der Ableitungsbaum kann nämlich nur die Form (2) wie oben haben, und daraus können wir eine Berechnung (1) des Wortes durch M ableiten. Korollar 2. Eine Sprache ist genau dann regulär, wenn sie von einer regulären Grammatik erzeugt werden kann.
56 52 KAPITEL 2. KONTEXTFREIE SPRACHEN UND KELLERAUTOMATEN sectbspaltzweivierdrei bspaltzweivierdrei sectbspaltzweiviervier bspaltzweiviervier Beispiel 3. Die Grammatik G aus Beispiel 2 in Abschnitt 2.5 ergibt den folgenden nichtdeterministischen Automaten, der L(G ) akzeptiert: 0 1 S B D C 1 A8 Beispiel 4. Die folgende Grammatik G = ({0, 1}, {S, T }, S, P ) mit den Produktionen S 1 11 S T 0S0S11 ist nicht regulär. Sie erzeugt jedoch eine reguläre Sprache: L(G) = Bemerkung 3. Jeder innere Knoten p eines Syntaxbaumes mit Markierung X ergibt einen Unterbaum (mit Wurzel-Markierung X) der selbst ein Syntaxbaum ist: Y p X u v Das Ergebnis des ursprünglichen Baumes ist uvw wobei (a) v ist das Ergebnis des Unterbaumes w (b) u ist die Markierung der Blätter links von p und w ist die Markierung der Knoten rechts von p. Das Wort kontextfrei hat mit der oberen Struktur der Wörter zu tun: ein Wort v erscheint im Wort uvw im Kontext, der vom Präfix u und Suffix w besteht. Da alle Produktionen die Form X..., X eine Variable, haben, ist die Anwendung vom Kontext eines Wortes abhängig. Im Kontrast, die Regel xa ba erlaubt X durch b nur im Kontext (Suffix fängt mit a an) zu ersetzen. sectsatzaltzweifuenfeins satzaltzweifuenfeins 2.6 Eigenschaften kontextfreier Sprachen Satz 1. Für zwei kontextfreie Sprachen L 1 und L 2 sind auch die Sprachen L 1 L 2 und L 1 L 2 kontextfrei.
57 2.6. EIGENSCHAFTEN KONTEXTFREIER SPRACHEN 53 Beweis. Wir haben eine Grammatik G i = (Σ i, V i, S i, R i ) für die Sprache L i (i = 1, 2), und ohne Beschränkung der Allgemeinheit können wir voraussetzen, dass V 1 V 2 =. 1. Erzeugung der Sprache L 1 L 2 : sei G die Grammatik mit terminalen Symbolen Σ 1 Σ 2, Variablen V 1 V 2 {S}, wobei S V 1 V 2 das Startsymbol von G ist und den Produktionen S S 1 S 2 (*) zusammen mit allen Produktionen in R 1 und R 2. Dann gilt L(G) = L 1 L 2. In der Tat hat jeder Ableitungsbaum B der Grammatik G die Form S S S 1 oder S 2 B 1 B 2 wobei B i ein Ableitungsbaum der Grammatik G i für i = 1, 2 ist. Es gilt w B = W Bi L i. Also liegt ein Wort genau dann in L(G), wenn es entweder in L 1 oder in L 2 liegt. 2. Erzeugung der Sprache L 1 L 2 : Sei G dieselbe Grammatik wie in 1., nur wird (*) durch die einzige Produktion S S 1 S 2 ersetzt. Die Ableitungsbäume von G haben die Form S S 1 S 2 B 1 B 2 tsatzaltzweifuenfzwei satzaltzweifuenfzwei wobei B i ein Ableitungsbaum der Grammatik G i für i = 1, 2 ist. Es gilt w B = w B1 w B2. Also liegt ein Wort genau dann in L(G), wenn es die Form w 1 w 2, wobei w i L i für i = 1, 2 gilt, hat. Satz 2. Falls L eine kontextfreie Sprache ist, ist L auch kontextfrei. Beweis. Sei G = (Σ, V, S, P ) eine Grammatik für L. Wir erweitern sie zu einer Grammatik G = (Σ, V {S}, S, P ), wobei S eine neue Variable ist, indem wir neue Produktionen S S S, S S und S ε hinzufügen. Dann gilt: L(G) = L. In der Tat: 1. L L(G): Für jedes Wort w = w 1 w 2... w n L, wobei die w i in L liegen, haben wir Ableitungsbäume B i für w i in der Grammatik G, aus denen der folgende Ableitungsbaum für w hergestellt wird:
58 54 KAPITEL 2. KONTEXTFREIE SPRACHEN UND KELLERAUTOMATEN S S S S S... B 1 S S B 2 S S S ε B n Der Ableitungsbaum für ε ist klar. 2. L(G) L : Für jedes Wort w L(G) haben wir einen Ableitungsbaum B mit Wurzel S in der Grammatik G mit w = w B. Durch Induktion über die Tiefe i des Baumes B zeigen wir, dass w L : i = 1 Hier ist B der Baum S ε und w B = ε L. i i + 1 Der Ableitungsbaum B hat eine der folgenden Formen: entweder S S B wobei B ein Ableitungsbaum in der Grammatik G ist, dann gilt oder w B L L, S S S B 1 B 2 sectkoraltzweifuenfeins koraltzweifuenfeins wobei B 1, B 2 Ableitungsbäume der Grammatik G sind, dann gilt w = w B1 w B2. Die Bäume B 1, B 2 haben eine Tiefe i, also ergibt die Induktionsvoraussetzung w B1, w B2 L. Daraus folgt w L. Korollar 1. Die Klasse aller kontextfreien Sprachen enthält alle regulären Sprachen und ist unter den Operationen, und abgeschlossen. Bemerkung 1. Leider ist diese Klasse nicht unter Durchschnitt abgeschlossen. Um das zu zeigen, müssen wir Mittel zur Verfügung haben, um zu beweisen, dass eine Sprache nicht kontextfrei ist. Für reguläre Sprachen war das Pumping-Lemma
59 2.6. EIGENSCHAFTEN KONTEXTFREIER SPRACHEN 55 tsatzaltzweifuenfdrei solch ein Mittel (siehe 1.8). Auch für kontextfreie Sprachen gilt ein, hier ein bisschen komplizierterer, Satz desselben Stils. Bevor wir ihn aber beweisen, wollen wir noch eine Eigenschaft der kontextfreien Sprachen erwähnen: satzaltzweifuenfdrei Satz 3. (ohne Beweis) Falls L 1 eine kontextfreie Sprache und L 2 eine reguläre Sprache ist, so ist L 1 L 2 kontextfrei. Bemerkung 2. In einem Ableitungsbaum B können wir einen beliebigen Knoten p auswählen und durch B den Baum aller Nachfolger von p bezeichnen: S B p Dann ist B ein A-Baum. Falls x das Wort aller Blätter von B ist, die vor den Blättern von B stehen, und y das Wort aller Blätter nach den Blättern von B : S ctbspaltzweifuenfnull bspaltzweifuenfnull x p B y w B gilt w B = xw B y. Beispiel 1. In dem Baum B: S X Y 0 1 X X wählen wir den Knoten y mit der Markierung Y. Dann ist B : Y X X Hier ist x = 01, w B = 0101 und y = ε. Sei A die Variable, die den Knoten p markiert. Dann ist B ein verallgemeinerter Ableitungsbaum mit A an der Wurzel. Falls B ein beliebiger verallgemeinerter Ableitungsbaum mit derselben Markierung der Wurzel ist, können wir B durch B ersetzen und bekommen einen neuen Ableitungsbaum S x A B y w B der das Wort xw B y erzeugt. In dem oberen Beispiel sei
60 56 KAPITEL 2. KONTEXTFREIE SPRACHEN UND KELLERAUTOMATEN B : Y Z dann ergibt die Ersetzung von B durch B im Ableitungsbaum S X Y 0 1 Z Diese Überlegungen werden im Beweis des folgenden Pumping-Lemmas verwendet: Pumping-Lemma für kontextfreie Sprachen: Für jede kontextfreie Sprache L existiert eine Zahl n, so dass jedes Wort w in L mit der Länge w n eine Zerlegung w = uvxyz, mit u, v, x, y, z Σ und den folgenden Eigenschaften hat: 1. v ε oder y ε, 2. vxy n, 3. uv r xy r z liegt in L für alle r = 0, 1, 2,.... Beweis. Wir haben eine Grammatik G mit L = L(G) und bezeichnen mit i = die Anzahl aller Variablen von G und mit k = die maximale Länge der rechten Seite einer Produktion von G. Wir beweisen, dass die Zahl n = k i+1 die gewünschte Konstante ist. Sei w ein Wort aus L, das eine Länge größer gleich n hat. Wir wählen einen Ableitungsbaum B für w mit der kleinsten Anzahl an Knoten. Nach Satz 2 in Abschnitt 2.4 wissen wir, dass B die Tiefe größer als i haben muss. Es existiert also in B ein Pfad der Länge i + 1 in B. Jeder seiner i + 1 Knoten, die keine Blätter sind, wird also mit einer Variablen markiert. Das ergibt i + 1 Markierungen, obwohl es nur i Variablen gibt. Es müssen sich also Markierungen wiederholen. Wir können also zwei Knoten p und q aus B wählen, so dass 1. q ein Nachfolger von p ist, 2. p und q dieselbe Markierung A haben und 3. p die größte Tiefe unter Knoten mit 1. und 2. besitzt. Wir bezeichnen den Unterbaum von B, den alle Nachfolger von p bilden, als B. Man beachte, dass die Tiefe von B höchstens i + 1 ist, weil der längste Pfad in B diese Länge hat (gäbe es einen längeren Pfad könnte man ein p mit größerer Tiefe in B wählen!). Dann hat B die folgende Form:
61 2.6. EIGENSCHAFTEN KONTEXTFREIER SPRACHEN 57 B p u q w B z Das Wort w = w B hat also die Form w = uw z, wobei w = w B das Wort aller Blätter von B, u das Wort aller Blätter von B, die links von B stehen und z das Wort aller Blätter von B, die rechts von B stehen ist. Eine analoge Situation gilt für B selbst: sei B der Unterbaum aller Nachfolger von q. Dann hat B die folgende Form: p B q v y x B Das Wort w hat also die Form w = vxy, wobei w B = x. Hier gilt v ε oder y ε, denn falls v = y = ε, d.h., falls jeder Vorgänger von q im Baum B nur einen Sohn hat, können wir einen kleineren Ableitungsbaum für w finden (aber B ist der kleinste!): Es genügt, in B den Unterbaum B durch B zu ersetzen. Da der Baum B höchstens die Tiefe i + 1 hat, gilt nach Satz 2 in Abschnitt 2.4 außerdem vxy = w k i+1 = n. Der Baum B sieht jetzt wie folgt aus: B p u v q y B z x B Da die Knoten p und q dieselbe Markierung tragen, können wir einen neuen Ableitungsbaum erstellen, indem wir B durch eine Kopie des Baumes B ersetzen: B p u v v x p q y y z B B B
62 58 KAPITEL 2. KONTEXTFREIE SPRACHEN UND KELLERAUTOMATEN Da B keine Variablen in den Blättern hat, gilt dasselbe für den letzten Baum. Das zeigt, dass das Wort uvvxyyz zu L(G) = L gehört. Diesen Prozess können wir wiederholen: im letzten Baum ersetzen wir B durch B und erhalten uv 3 xy 3 z L, usw. Letztendlich können wir direkt B im Baum B durch B ersetzen und bekommen einen Ableitungsbaum für uxz. Beispiel 2. Die Sprache L = {a k ; k = 0, 1, 4, 9...} aller Wörter über {a} von quadratischer Länge ist nicht kontextfrei. In der Tat, gegeben sei n wie im Pumping-Lemma, setzen wir w = a n2 und beweisen, dass keine Zuerlegung w = avxyz die Eigenschaften besitzen kann. Sei p = y + v (p > 0 da y ε oder v ε). Aus vxy n folgt p n. Das Wort xv 2 xy 2 z L hat die Länge n 2 +p und dies muss ein Quadrat sein. Das ist ein Widerspruch, denn n 2 < n 2 + p < (n + 1) 2 sectbspaltzweifuenfeins bspaltzweifuenfeins Die erste Ungleichung folgt aus p > 0 und die zweite besagt, dass p < 2n + 1, was aus p n folgt. Beispiel 3. Die Sprache L = {a k b k c k ; k = 1, 2, 3,... } ist nicht kontextfrei. Wir zeigen, dass keine Konstante n das Pumping-Lemma für L erfüllt. Wir wählen w = a n b n c n. Falls das Pumping-Lemma für L gilt, haben wir also eine Zerlegung a n b n c n = uvxyz, so dass v ε oder y ε und uv 2 xy 2 z L. Wir zeigen, dass das nicht möglich ist. 1. Falls y nur aus einem Buchstaben besteht, muss v zwei Buchstaben (also a und b) enthalten, denn sonst wären die drei Buchstaben nicht in gleicher Anzahl in uv 2 xy 2 z enthalten. Dann findet man aber in uv 2 xy 2 z ein b vor einem a, also gilt uv 2 xy 2 z L. 2. Falls v nur aus einem Buchstaben besteht, können wir für y analog zu 1. argumentieren. sectbspaltzweifuenfzwei bspaltzweifuenfzwei 3. Falls v sowie y mehrere Buchstaben enthalten, findet man in uv 2 xy 2 z wieder ein b vor einem a. Beispiel 4. Zwei kontextfreie Sprachen, deren Durchschnitt nicht kontextfrei ist. Sei L 1 = {a n b n c k ; n, k = 1, 2, 3,... } die kontextfreie Sprache aus Beispiel 1.d in Abschnitt 2.5, Analog zeigt man, dass die Sprache L 2 = {a k b n c n ; n, k = 1, 2, 3,... } kontextfrei ist. Aber L 1 L 2 = {a n b n c n ; n = 1, 2, 3,... } ist nicht kontextfrei, wie wir oben gesehen haben.
63 2.7. NULLIERBARE VARIABLEN 59 ctkoraltzweifuenfdrei koraltzweifuenfdrei Korollar 2. Kontextfreie Sprachen sind nicht unter der Komplementbildung abgeschlossen, d.h., es gibt kontextfreie Sprachen L Σ, so dass L = Σ L nicht kontextfrei ist. In der Tat folgt aus der DeMorganschen Regel L 1 L 2 = L 1 + L 2, dass eine Klasse von Sprachen, die unter + und Komplementbildung abgeschlossen ist, auch unter Durchschnitt abgeschlossen sein muss. tnullierbarevariablen sectdfnullierbar dfnullierbar 2.7 Nullierbare Variablen In diesem Abschnitt zeigen wir, wie man Produktionen des Typs A ε loswerden kann. Erst zeigen wir einen einfachen Algorithmus, der entscheidet, ob eine Grammatik das leere Wort erzeugt. Definition. In einer kontextfreien Grammatik heißt eine Variable A nullierbar, falls aus ihr ε abgeleitet werden kann, d.h. falls A ε. Beobachtung. Für eine kontextfreie Grammatik G gilt: ε liegt in L(G) genau dann, wenn das Startsymbol nullierbar ist. matikohneanachepsilon matikohneanachepsilon Berechnung der Menge V 0 aller nullierbaren Variablen erfolgt durch die folgende Rekursion: Anfang: V 0 = Rekursiver Schritt: V 0 = V 0 {A V ; es gibt eine Produktion A B 1 B 2... B n mit B 1, B 2,..., B n V 0 }. Also liegen nach dem ersten Durchgang in V 0 alle Variablen A, für die es eine Produktion A ε gibt. Nach dem zweiten Schritt alle Variablen, für die es eine Produktion A B 1 B 2... B n mit Produktionen B 1 ε,..., B n ε gibt, usw. Nach dem letzten Durchgang hat V 0 die folgende Eigenschaft: Für jede Produktion A B 1 B 2... B n mit B 1, B 2,..., B n V 0 gilt A V 0. Es ist leich zu sehen, dass jede durch diese rekursive Prozedur in V 0 gelegte Variable nullierbar ist. Umgekehrt, sei A nullierbar, und sei n die Länge der Ableitung von ε aus A. Dann liegt A nach dem n-ten Durchgang der Prozedur oben in V 0. Dies ist klar für n = 1; für größere n benutzen wir Induktion: Sei A B 1... B n die erste Produktion, die die Ableitung A ε benutzt. Dann haben wir kürzere Ableitungen für B 1,..., B n, d.h. diese Variablen liegen in V 0 nach der Induktionsvoraussetzung. Die obige Eigenschaft von V 0 beweist A V 0. Satz 1. Jede kontextfreie Sprache L, die ε nicht enthält, hat eine kontextfreie Grammatik ohne Produktionen A ε. In der Tat zeigen wir einen Algorithmus, der für jede kontextfreie Grammatik G, für die ε / L(G) gilt, eine kontextfreie Grammatik G erzeugt mit L(G) = L(G) so dass G keine Produktionen A ε hat. Beweis. Sei G die Grammatik, die aus G dadurch entsteht, dass neue Produktionen hinzugefügt werden: für jede Produktion B w 1 w 2... w i 1 Aw i+1... w n, wobei A nullierbar ist, fügen wir die Produktion B w 1 w 2... w i 1 w i+1... w n
64 60 KAPITEL 2. KONTEXTFREIE SPRACHEN UND KELLERAUTOMATEN hinzu. Diese Prozedur wird solange wiederholt, bis keine neue Produktionen entstehen. Das ändert bestimmt nicht die akzeptierte Sprache, d.h. L(G) = L(G ). Jetzt bezeichnen wir durch G die Grammatik, die wir erhalten, wenn wir aus G alle Produktionen der Form A ε entfernen. Es ist klar, dass L(G) L(G ). Zeigen wir L(G ) = L(G). Damit ist der Satz bewiesen. Für jedes Wort w in L(G ) wählen wir den kleinsten Ableitungsbaum B. Wir beweisen, dass kein Blatt von B mit ε markiert ist. Dann ist B ein Ableitungsbaum der Grammatik G, also w L(G). Falls aber ein Blatt t mit ε markiert wäre, könnten wir einen kleineren Ableitungsbaum finden: sei t der Vater von t und t sein Großvater (aufpassen: t hat einen Großvater, d.h. t ist nicht die Wurzel. Dann hätte B die Form S ε Dann wäre aber w = ε, was der Voraussetzung ε / L(G ) wiederspräche.) Sei X die Markierung des Großvaters t und w 1,..., w n die Markierungen seiner Söhne. Einer davon, der i-te, ist wohl t. Da sein Sohn t mit ε markiert ist, wird t mit einer nullierbaren Variablen A markiert: BAUM B S X t w 1... w i 1 A w i+1... w n t ε Aufgrung der Konstruktion von G ist dann auch B w 1... w i 1 w i+1... w n eine Produktion, die den folgenden kleineren Ableitungsbaum B ergibt: BAUM B S X w 1... w i 1 w i+1... w n Das ist der gesuchte Widerspruch. Bemerkung 1. Für Grammatiken G, die das leere Wort erzeugen (also mit S nullierbar), gibt es einen ähnlichen Satz: Wir können eine Grammatik G mit L(G) = L(G) erzeugen, die die Produktion S ε, aber keine andere Produktion der Form A ε (A S) enthält. Der Beweis ist fast derselbe.
65 2.8. CHOMSKY-NORMALFORM 61 sec:cnf ctdfchomskynormalform dfchomskynormalform ctbspaltzweisechseins 2.8 Chomsky-Normalform Wir zeigen jetzt, dass jede kontextfreie Grammatik so modifiziert werden kann, dass sie (ohne die erzeugte Sprache zu ändern) nur Produktionen der Form S ε, A a oder A BC hat, wobei A, B, C nichtterminale Symbole sind und a ein Terminalsymbol ist. Der erste Typ, S ε, ist nur für die Erzeugung des leeren Wortes nötig. Wir werden uns erst auf kontextfreie Sprachen ohne ε konzentrieren und daher nur Produktionen A a oder A BC benutzen. Falls ε in der Sprache liegt, schreiben wir dann immer noch S ε am Ende als eine der Produktionen. Definition. Chomsky-Normalform Eine kontextfreie Grammatik ist in Chomsky-Normalform, falls sie nur Produktionen der Form A BC (A, B, C Variablen) A a (A Variable, a Terminalsymbol) oder S ε hat. bspaltzweisechseins Beispiel 1. Die Grammatik G = ({0, 1}, {S, A}, S, P ) hat die Produktionen P : S 0A A A 10A ε S B AA Das ist keine Normalform-Grammatik, jedoch kann man eine Normalform-Grammatik, die diese Sprache erzeugt, finden, wie wir noch zeigen werden. Zuerst wollen wir aber einen wichtigen Begriff der Graphentheorie einführen: Bemerkung 1. TOPOLOGISCHES SORTIEREN Gegeben sei ein gerichteter Graph G = (V, E), eine Sortierung seiner Knoten ist eine bijektive Abbildung ord V {1, 2,..., n}. Sie heißt topologisch, falls für jede Kante (v, w) in E gilt ord(v) < ord(w). Z.B. hat von den folgenden Graphen G 1 und G 2 G 1 G 2 der Graph G 2 keine topologische Sortierung, da er ein Dreieck enthält es ist klar, dass nur azyklische Graphen topologische sortiert werden können. Der Graph G 1 hat die folgenden topologischen Sortierungen: Jeder azyklische Graph hat eine topologische Sortierung: man findet einen Knoten x ohne Vorgänger (x kann gefunden werden, wenn wir mit einem beliebigen Knoten starten und uns solange wie möglich in Gegenrichtung der Pfeile bewegen kein Knoten wird wiederholt besucht, also steht am Ende ein Knoten ohne Vorgänger). Man setzt ord(x) = 1 und entfernt x aus dem Graphen. Jetzt wird der Prozess mit der Bewertung ord = 2 wiederholt, usw
66 62 KAPITEL 2. KONTEXTFREIE SPRACHEN UND KELLERAUTOMATEN Genauer: wir haben den folgenden Algorithmus für topologisches Sortieren. Wir bezeichnen mit i = Anzahl aller schon sortierten Knoten und W = Menge aller noch nicht sortierten Knoten. Initialisierung: i = 0 und W = V Rekursiver Schritt: while ein Knoten x W ohne Vorgänger in W existiert do i = i + 1; ord(x) = i; W = W {x} od Ende: Falls n = i, ist der Graph azyklisch und ord ist seine topologische Sortierung. Falls n > i, ist der Graph nicht azyklisch. Normalisierungsalgorithmus: Für jede kontextfreie Grammatik G mit ε L(G) konstruieren wir eine Grammatik in Chomsky-Normalform, die dieselbe Sprache erzeugt. Wir illustrieren die einzelnen Schritte jeweils anhand der Grammatik aus Beispiel 1. Schritt 1: ε-produktionen werden eliminiert, siehe Abschnitt 2.7 Beispiel 1 - Schritt 1: Wir berechnen die nullierbaren Variablen: V 0 = {A, S}.Dies ergibt die Grammatik S 0A 0 A A 10A 10 S B AA A Schritt 2: Alle Produktionen A B (A, B Variablen) werden ersetzt. Sei H der gerichtete Graph, dessen Knoten alle Variablen und dessen Kanten genau die unerwünschten Produktionen A B unserer Grammatik sind. 1. Die Produktionen A A werden eliminiert. Alle Kreise des Graphen H werden wie folgt entfernt. Sei A n... A 1 A 2 A 3 ein Kreis der Länge n. Wir entfernen A 2,..., A n aus der Liste aller Variablen und ersetzen A i durch A 1 in jeder Produktion der Grammatik (für i = 2,..., n). Jede Produktion A i w, i 1, wird durch A 1 w ersetzt. Diesen Prozess wiederholen wir solange, bis kein Kreis übrigbleibt. Falls S eine der Variablen des Kreises ist, wählen wir immer S = A In der modifizierten Grammatik ist der Graph H azyklisch, und wir können seine Knoten, d.h. alle (übriggebliebenen) Variablen, topologisch sortieren: V = {A 1, A 2,..., A m }. Wir entfernen alle Produktionen A i A j systematisch nach dem Index i = m, m 1,..., 1 mit dem folgenden rekursiven Prozess: i = m Keine Produktion A m A j existiert.
67 2.8. CHOMSKY-NORMALFORM 63 i i 1 Nachdem alle Produktionen A m A j, A m 1 A j,..., A i A j entfernt wurden, ersetzen wir jede Produktion A i 1 A j durch A i 1 w für alle Wörter w, für die A j w eine Produktion ist. Schritt 3: Alle Produktionen bekommen die Form A w, wobei w entweder ein Wort aus Variablen oder ein einziges Terminalsymbol ist. Man ersetzt in w (falls w aus Variablen sowie Terminalsymbolen besteht) jedes Terminalsymbol a durch eine neue Variable D a und fügt die Produktion D a a zu P hinzu. Beispiel 1 Schritt 2: Die obige Grammatik wird durch die Grammatik G = ({0, 1}, {S, A, D 0, D 1 }, S, P ) mit den Produktionen P ersetzt: S D 0 S 0 D 1 D 0 S D 1 D 0 B SS D 0 S 0 D 1 D 0 S D 1 D 0 D 0 0 D 1 1 Schritt 4: Alle Produktionen A w, bei denen w länger als zwei ist, werden durch Produktionen des Typs A BC ersetzt. Statt A B 1 B 2... B m schreibt man A B 1 C 1 C 1 B 2 C 2 C 2 B 3 C 3 C m 3 B m 2 C m 2 C m 2 B m 1 B m wobei C 1,..., C m 2 neue Variablen sind. Beispiel 1 Schritt 4: In der obigen Grammatik G ersetzen wir S D 1 D 0 S durch S D 1 C C D 0 S. Analog ersetzen wir B D 1 D 0 B durch B D 1 C C D 0 B. Schritt 5: Die Produktion S ε wird hinzugefügt, vorausgesetzt S liegt in V 0. Hier ist die Chomsky Normalform unseres Beispiels: S D 0 S 0 D 1 C D 1 D 0 ε C D 0 S B SS D 0 S 0 D 1 C D 1 D 0 C D 0 B D 0 0 D 1 1 Beispiel 1 Schritt 2: Die nach Schritt 1 erhaltene Grammatik definiert den Graphen S A B Wir entfernen die variable A und bekommen die Grammatik S 0S 0 S10S 10 B SS S Die ergibt den Graphen
68 64 KAPITEL 2. KONTEXTFREIE SPRACHEN UND KELLERAUTOMATEN B S Den Loop S S eliminieren wir und sortieren den restlichen Graphen topologisch. B S 1 2 Die Produktion B S ersetzen wir durch die Produktionen B w wobei wir vorher die Produktion S w hatten. Wir bekommen die Grammatik S 0S 0 S10S 10 B SS 0S 0 10S 10 sectalgoformsprachen 2.9 Algorithmen für kontextfreie Sprachen Die Frage, ob für eine beliebige kontextfreie Sprache L ein gegebenes Wort w zu L gehört kann von einem effizienten Algorithmus entschieden werden, der Cocke- Younger-Kasami (CYK) Algorithmus heißt. Wir nehmen an, dass die Codierung von kontextfreien Sprachen durch eine Grammatik in Chomsky-Normalform geschieht. Die Entscheidung, ob ein gegebenes Wort w (Eingabe) in L liegt, ist trivial für w = ε: Die Antwort ist JA genau dann, wenn S ε eine Produktion von G ist. Für nichtleere Wörter benutzen wir die Technik der dynamischen Programmierung. Zuerst verallgemeinern wir die Anfrage, ob w in L liegt, d.h., ob S w gilt, wie folgt: gegeben Variable A V und nichtleeres Wort w Σ entscheide, ob A w. Die Idee ist, dass wir für jedes Wort w = s 1... s n den Teil s i s i+1... s i+j 1 der Länge j, der in s i beginnt, mit w i,j bezeichnen und wir die Frage gilt A w i,j? für alle i = 1,..., n und j = 1,..., n i entscheiden. Da w = w 1,n, wird dies unsere Aufgabe lösen. Wir entscheiden A w i,j mit Induktion über j. Der Fall j = 1 bedeutet, dass das Terminalsymbol s i von A ableitbar ist. Da unsere Grammatik die Chomsky-Normalform hat, ist die Antwort JA, genau wenn A s i eine Produktion ist. Sei j > 1 und sei A w i,k für alle i und k j 1 entschieden. In der Ableitung A w i,j bezeichnen wir mit A BC die erste angewendete Produktion: A B C Dann gilt: s i s i+1... s i+k 1 s i+k... s i+j 1
69 2.10. KELLERAUTOMATEN 65 sectbspaltzweisieben bspaltzweisieben (*) B w i,k und C w i+k,j k für ein k = 1,..., j 1. Umgekehrt folgt aus (*), dass A w i,j gilt. Um den CYK-Algorithmus genau zu beschreiben, bezeichnen wir V i,j = {A V ; A w i,j } für alle i = 1,..., n 1 und j = 1,..., n i + 1. CYK-Algorithmus Eingabe: Eine kontextfreie Grammatik G = (Σ, V, S, P ) in Chomsky-Normalform und ein Wort w = s 1 s 2... s n über Σ. Erster Schritt: Für alle i = 1,..., n setzt man V i,1 = {A V ; A s i ist eine Produktion} Rekursiver Schritt: Für alle i = 1,..., n und j = 2,..., n setzt man V i,j = {A V ; es gibt k = 1,..., j 1 und B V i,k, C V i+k,j k so, dass A BC eine Produktion ist} Ausgabe: JA, falls S in V 1,n liegt, NEIN sonst. Beispiel 1. Sei G = ({a, b}, {S, A, B, C}, R, S) die Grammatik mit den folgenden Produktionen: S AB BC A BA a B CC b C AB a Für das Wort baaba wird der CYK-Algorithmus die folgenden Mengen V i,j berechnen: i j 1 B A, C A, C B A, C 2 S, A B S, C S, A 3 B B 4 S, A, C 5 S, A, C Da S in V 1,5 liegt, gehört baaba zur Sprache L(G) Kellerautomaten Es gibt kontextfreie Sprachen, die nicht regulär sind, also von keinem endlichen Automaten akzeptiert werden können. Wir brauchen also stärkere Maschinen für kontextfreie Sprachen. Nehmen wir das Beispiel der Sprache L aller Palindrome (Beispiel 3 in Abschnitt 2.1): um zu verifizieren, dass die Eingabe a 1 a 2... a n, die ein read-only Kopf liest, ein Palindrom ist, müssen wir uns im Laufe der Bearbeitung wenigstens an die erste Hälfte des Eingabewortes erinnern (um sie mit der anderen Hälfte vergleichen zu können). Das schafft ein endlicher Automat nicht, denn dazu brauchen wir einen potenziell unendlichen Speicher. Falls wir jetzt aber zu dem Automaten einen externen Speicher hinzufügen, in dem die Eingabe gespeichert werden kann, ist es möglich, Sprachen wie die aller Palindrome zu akzeptieren. Der externe Speicher wird die Form eines Kellers (oder Stack, also last-in-first-out Speichers) haben. Das bedeutet, dass in jedem Schritt das erste Symbol aus dem Keller gelesen und weggeworfen wird (pop-operation) und ein oder mehrere neue Symbole gespeichert werden (push-operation). Wir zeigen, dass jede kontextfreie Sprache von einem endlichen Automaten mit externem Keller akzeptiert werden kann und umgekehrt, solche Automaten ak-
70 66 KAPITEL 2. KONTEXTFREIE SPRACHEN UND KELLERAUTOMATEN zeptieren gerade die kontextfreien Sprachen. Leider müssen wir hier von Anfang an mit nichtdeterministischen Automaten arbeiten, denn in diesem Berechnungsmodell gilt nicht, dass jeder nichtdeterministische Automat von einem deterministischen Automaten ersetzt werden kann. Wir arbeiten hier mit zwei Alphabeten: Σ das Alphabet der Eingabesymbole K das Alphabet der Kellersymbole. Der Inhalt des Kellers wird von n Zeichen k 1,..., k n geformt. Dies wird als ein Wort k 1 k 2... k n K beschrieben (wegen ε K kann der Keller auch leer sein). Die Übergangsfunktion δ hat hier, statt zwei Variablen q (Zustand) und s (Eingabe), drei Variablen: die dritte, k K, ist der erste Buchstabe des Kellerwortes. Aufgrund des Tripels (q, s, k) Q Σ K wird entschieden werden, welcher der neue Zustand q Q wird und welches Wort w K im Keller gespeichert werden soll; das schreiben wir in der Form s,k/w q q Also soll δ eine Untermenge von (Q Σ K) (Q K ) sein. Aber da wir auch spontane Übergänge (ohne Eingabe, vergleiche mit Automaten, Absatz 1.3) erlauben wollen, also Produktionen der Form (q, #, k) (q, w), ist δ eine Untermenge von (Q (Σ {#}) K) (Q K ). Beispiel 1. Die Sprache 0 n 1 n (n = 1, 2, 3,...) wird von dem Kellerautomat akzeptiert, der (a) im Initialzustand q 0 immer Eingabe 0 in den Keller speichert, wenn er k 0 oder 1 sieht: 0,k 0/0k 0 0,0/00 q 0 q 0 (b) Eingabe 1 dazu führt, dass eine 0 aus dem keller entfernt wird und der Zustand zu q 1 geändert wird: q 0 1,0/ε q 1 und q 1 1,0/ε q 1 und (c) Beim Kellertop k 0 wird spontan k 0 entfernt: q 1 #k 0/ε q 1 Hier der ganze Kellerautomat: 0,k 0/0k 0 0,0/00 q 0 1,0/ε 1,0/ε #,k 0/ε q 1 Definition. Ein Kellerautomat (englisch: pushdown automaton) P ist ein 7-Tupel P = (Q, Σ, K, δ, q 0, k 0, F ) wobei
71 2.10. KELLERAUTOMATEN 67 Q eine endliche Menge, die Zustandsmenge, ist, Σ und K zwei Alphabete (Eingabe- und Kelleralphabet) sind, δ eine endliche Untermenge von (Q (Σ {#}) K) (Q K ) ist, deren Elemente mit (q, s, k) (q, w) bezeichnet werden und Übergangsregeln heißen, q 0 Q der Initialzustand ist, F Q die Menge aller Finalzustände ist und k 0 K das Startsymbol ist. Bemerkung 1. Wie arbeitet ein Kellerautomat? Am Anfang hat er den Zustand q 0 und im Keller steht der Buchstabe k 0. Jetzt werden die folgenden Schritte durchgeführt: Erster Schritt: ist entweder spontan, d.h., der Zustand q 0 geht in den Zustand q 1 über und der Kellerinhalt wird von k 0 zu w 1 verändert, falls (q 0, #, k 0 ) (q 1, w 1 ) eine der Übergangsregeln ist. Oder der erste Schritt ist nicht spontan: q 0 geht nach q 1 über und der Kellerinhalt ändert sich zu w 1, falls (q 0, s 1, k 0 ) (q 1, w 1 ) mit s 1 Σ eine der Übergangsregeln ist. Im zweiten Fall wird s 1 von der Eingabe entfernt, und s 2 wird als nächstes Eingabesymbol gelesen. Zweiter Schritt: dieser tritt nur dann ein, wenn der Keller nach dem ersten Schritt nicht leer ist. Sei k 1 das top-element des Kellers. Wir gehen von dem Zustand q 1 zu q 2 über und ändern den Kellerinhalt von w 1 zu w 2 entweder spontan: (q 1, #, k 1 ) (q 2, w 2 ) oder nicht spontan: (q 1, s i, k 1 ) (q 2, w 2 ), wobei i = 1 oder i = 2 (je nachdem, ob s 1 im Schritt 1 entfernt wurde oder nicht). Im zweiten Fall wird s i von der Eingabe entfernt, usw. Formal: Definition. Eine Konfiguration eines Kellerautomaten ist ein Tripel (q, s 1... s n, k 1... k m ) in Q Σ K das den momentanen Zustand q, die (restliche) momentane Eingabe s 1... s n Σ und den momentanen Kellerinhalt k 1... k m K beschreibt. Die Folgekonfigurationen einer Konfiguration (q, s 1... s n, k 1 k 2... k m ) sind alle Konfigurationen (q, s 2... s n, wk 2... k m ), wobei (q, s 1, k 1 ) (q, w) eine Regel ist, sowie alle Konfigurationen (q, s 1... s n, wk 2... k m ), wobei (q, #, k 1 ) (q, w) eine Regel ist. Wir schreiben C C falls C eine Folgekonfiguration der Konfiguration C ist. Wie oben, bezeichnet die transitive und reflexive Hülle von. Definition. (a) Konfigurationen (q 0, s 1... s n, k 0 ) heißen initial. Hier ist s 1... s n die (ganze) eingehend. (b) Konfiguration (q, ε, ε) wobei q F heißen akzeptierend. D.h. der Keller ist leer (deswegen keine weitere Schritte möglich), es gibt keinen Rest der Eingabe und der Zustand ist akzeptierend. (c) Ein Wort w = s 1... s n Σ wird von dem Kellerautomaten P akzeptiert, falls wenigstens eine akzeptierende Berechnung von w möglich ist. D.h., von der
72 68 KAPITEL 2. KONTEXTFREIE SPRACHEN UND KELLERAUTOMATEN sectbspaltzweiachteins bspaltzweiachteins Initialkonfiguration (q 0, w, k 0 ) eine akzeptierende Konfiguration erreicht werden kann: (q 0, w, k 0 ) (q, ε, ε) für ein q F. Die Sprache aller von P akzeptierten Wörter ist durch L(P ) bezeichnet. Kurz L(P ) = {w; w Σ und es gibt q F mit (q 0, w, k 0 ) (q 0, ε, ε)}. Beispiel 1 (Fortsetzung) Der Kellerautomat akzeptiert alle Wörter 0 n 1 n. Zum Beispiel die Berechnung von 0011 ist (q 0, 0011, k 0 ) (q 0, 011, 0k 0 ) (q 0, 11, 00k 0 ) (q 0, 1, 0k 0 ) (q 0, ε, k 0 ) (q 1, ε, ε) Umgekehrt, jedes akzeptierende Wort hat die Form 0 n 1 n. In der tat, wenn (q 0, w, k 0 ) (q 1, ε, ε) gilt, muss die vorletzte Konfiguration dieser Berechnung (q 1, ε, k 0 ) sein. Die Anzahl n von Schritten der Berechnung in denen q 0 als Zustand bleibt entspricht dem Anfang 0 n von w. Dann kommt ε 1 (und wird nicht verlassen werden). Da die vorletzte Konfiguration keine 0 im Speicher hat, müssen genau n Schritte passieren, d.h., w = 0 n 1 n. Beispiel 2. Palindrome über {a, b} von gerader Länge. D.h., L besteht aus ww R mit w {a, b}. Der Automat bleibt im Zustand q 0 und speichert einfach die Eingabe q 0 a,x/ax b,x/bx q 0 wobei x = a, b oder k 0 In der zweiten Hälfte vergleicht er Eingabe und Kellertop und wenn sie gleich sind, schmeißt er den Kellertop weg q 0 a/a/ε b,b/ε q 0 Wenn er am Ende k 0 sieht, schmeißt er es spontan weg: q 0 a,x/ax b,x/bx a,a/ε b,b/ε #,k 0/ε Jedes Wort ww R wird akzeptiert. Beispiel sectbspaltzweiachtdrei bspaltzweiachtdrei (q 0, abba, k 0 ) (q 0, bba, ak 0 ) (q 0, ba, bak 0 ) (q 0, a, ak 0 ) (q 0, ε, k 0 ) (q 0, ε, ε) Beispiel 3. Jeder endliche, nichtdeterministische Automat M kann als Kellerautomat, der nie auf den Keller zugreift, aufgefasst werden. Genauer: es genügt, die Übergangsregeln (q, s) q von M in die Form
73 2.11. KELLERAUTOMATEN UND KONTEXTFREIE SPRACHEN 69 (q, s, k 0 ) (q, k 0 ) zu übersetzen und die spontanen Übergänge (q, #, k 0 ) (q, ε) für alle finalen Zustände hinzuzufügen. ectbspaltzweiachtvier bspaltzweiachtvier Bemerkung 2. In den vorigen Beispielen hatten wir schon eine kontextfreie Grammatik, und wir konstruierten einen zusätzlichen Kellerautomaten. Es gibt aber viele Beispiele, bei denen es auf den ersten Blick nicht klar ist, was für eine Grammatik hier zu definieren wäre, aber die Konstruktion eines Kellerautomaten ist intuitiv klar. Beispiel 4. Die Sprache L aller Wörter in {a, b} mit derselben Anzahl von a s und b s. Der Kellerautomat P speichert am Anfang das gelesene Symbol a oder b zum Startsymbol k 0 hinzu und ändert den Zustand zu q 1 : (q 0, a, k 0 ) (q 1, ak 0 ) (q 0, b, k 0 ) (q 1, bk 0 ). Danach speichert P entweder eine Reihe von a s (falls bisher mehr a s als b s gelesen wurden), und in diesem Fall führt jedes gelesene b zur Pop-Operation eines a: 1. (q 1, a, a) (q 1, aa) 2. (q 1, b, a) (q 1, ε) oder umgekehrt, P speichert eine Reihe von b s (falls mehr b s als a s gelesen wurden): 3. (q 1, b, b) (q 1, bb) 4. (q 1, a, b) (q 1, ε) Falls im Kellertop k 0 steht, kann P spontan in den Haltezustand q 2 F übergehen: (q 1, #, k 0 ) (q 2, ε). Genauer: der folgende Kellerautomat akzeptiert L: a,a/aa b,a/ε b,b/bb a,b/ε a,k 0/ak 0 b,k q 0/bk 0 0 q 1 #,k 0/ε q Kellerautomaten und kontextfreie Sprachen Wir zeigen jetzt, dass jede kontextfreie Sprache von einem Kellerautomaten akzeptiert werden kann. Umgekehrt gilt, dass jede von einem Kellerautomaten akzeptierte Sprache kontextfrei ist. Also gilt zwischen kontextfreien Sprachen und Kellerautomaten dieselbe Beziehung wie zwischen regulären Sprachen und endlichen (nichtdeterministischen) Automaten. Konstruktion eines Kellerautomaten Für jede kontextfreie Grammatik G = (Σ, V, S, P ) definieren wir einen Kellerautomaten P G mit einem einzigen Zustand q (der initial sowie final ist), dem Eingabealphabet Σ und dem Kelleralphabet Σ V, wobei S das Kellerstartsymbol ist. Die Übergangsregeln sind wie folgt: 1. (q, x, x) (q, ε) für alle x Σ, (also wird eine pop-operation in dem Falle durchgeführt, dass die Eingabe mit dem Top-Element des Kellers übereinstimmt) und
74 70 KAPITEL 2. KONTEXTFREIE SPRACHEN UND KELLERAUTOMATEN 2. (q, #, A) (q, w) für alle Ableitungsregeln A w der Grammatik G (also erfolgt eine spontane Ersetzung des Top-Elements des Kellers durch ein Wort nach den Produktionen der Grammatik). Also P G = ({q}, Σ, Σ V, δ, q, S, {q}), wobei δ von den Übergangsregeln 1. und 2. geformt wird. Beispiel 1. Die Grammatik für Palindrome über Σ = {a, b}: ergibt den Kellerautomaten S ε a b asa bsb S,#ε S,#/a S,#/bSb a,a/ε b,b/ε q 0 Jedes Wort aus L(g) wird akzeptiert: wir formen einen Syntaxbaum und durchsuchen ihn mit Tiefensuche und bekommen eine Berechnung: Beispiel abbba S a S a (q 0, abbba, S) (q 0, abbba, asa) (q 0, bbba, Sa) (q 0, bbba, bsba) (q 0, bba, Sba) (q 0, bba, bba) (q 0, ba, ba) (q 0, a, a) (q 0, ε, ε) b S b b Bemerkung 1. Ein Baum wird Tiefensuche durchsucht, falls wir alle Knoten wie folgt besuchen: 1. Der erste besuchte Knoten ist die Wurzel. 2. Falls der besuchte Knoten kein Blatt ist, ist der nächste besuchte Knoten sein erster Sohn. 3. Falls der besuchte Knoten x ein Blatt ist und noch nicht alle Knoten besucht wurden, gehen wir von x in Richtung Wurzel, bis wir den ersten Knoten y antreffen, der einen noch nicht besuchten Sohn hat. Wir besuchen als nächstes den ersten noch nicht besuchten Sohn von y. Der Baum B wird wie angedeutet depth-first durchsucht:
75 2.11. KELLERAUTOMATEN UND KONTEXTFREIE SPRACHEN 71 BAUM B TIEFENSUCHE ctsatzaltzweineuneins satzaltzweineuneins 9 10 Satz 1. Für jede kontextfreie Grammatik G akzeptiert der oben konstruierte Kellerautomat P G die Sprache L(G). Beweis. 1. Jedes Wort w in L(G) wird von P G akzeptiert. Falls nämlich B ein Ableitungsbaum für w ist, können wir eine Berechnung, die w akzeptiert, wie folgt beschreiben: Der Ableitungsbaum wird depth-first durchsucht. Jeder Schritt dieser Durchsuchung entspricht einem Schritt der Berechnung, wobei im Kellertop immer die Markierung des momentanen Knotens gespeichert wird. In jedem Knoten, der kein Blatt ist und der einer Produktion A a 1... a n entspricht, ändert sich die Konfiguration von P G spontan, entsprechend der Übergangsregel (q, #, A) (q, a 1... a n ). Zum Beispiel, am Anfang S a 1 a 2... a n w ändert P G die Konfiguration wie folgt (q, w, S) (q, w, a 1 a 2... a n ), und die Durchsuchung des Ableitungsbaumes geht zum ganz links stehenden Sohn der Wurzel über. (Im Top des Kellers steht also die Markierung des momentanen Knotens!) In jedem Blatt markiert mit a benutzen wir die Übergangsregel (q, a, a) (q, ε). Nachdem der ganze Baum durchsucht wurde, erhalten wir die akzeptierende Konfiguration (q, ε, ε). 2. Umgekehrt, falls w akzeptiert wird, konstruieren wir einen Ableitungsbaum für w. Die Konstruktion folgt eine akzeptierende Berechnung von w. Der Baum wird Schritt für Schritt depth-first konstruiert; in jedem Berechnungsschritt erzeugen wir einen neuen Knoten des Baumes und markieren ihn mit dem Top-Element des Kellers. Der erste Schritt muss also darin bestehen, dass die Wurzel erzeugt und mit S markiert wird. Weitere Schritte: (a) Falls die Berechnung aufgrund der spontanen Übergangsregel (q, #, A) (q, a 1... a n ) weiter geht, erzeugen wir n neue Söhne des momentan be-
76 72 KAPITEL 2. KONTEXTFREIE SPRACHEN UND KELLERAUTOMATEN suchten Knotens und markieren sie mit a 1,..., a n. Da der Baum depthfirst untersucht wird, gehen wir zum ganz links stehenden Sohn über (der, wie gewünscht, mit dem Top-Element a1 des Kellers markiert wird). (b) Falls die Übergangsregel (q, a, a) (q, ε) benutzt wurde, bleibt der momentan besuchte Knoten ein Blatt, und wir gehen (depth-first) zum nächsten Knoten über. Bemerkung 2. In dem letzten Beweis konstruierten wir einen Kellerautomaten, der nur einen Zustand hat. Das ist im Vergleich mit endlichen Automaten (und deren Zustandsminimierung) überraschend. Eigentlich gilt aber: Jeder Kellerautomat P kann durch einen Kellerautomaten P mit nur einem Zustand simuliert werden. sectsatzaltzweineunzwei satzaltzweineunzwei (Die Idee der Simulation ist, dass der Automat P die folgenden Kellersymbole (q, k, q ) Q Γ Q hat und, falls P im Zustand q das Topsymbol k im Keller liest und den Zustand zu q ändert, entspricht dies dem Symbol (q, k, q ) im Top des Kellers von P.) Wir führen hier den Beweis dieses Simulationssatzes nicht durch. Satz 2. Eine Sprache ist genau dann kontextfrei, wenn sie von einem Kellerautomaten akzeptiert wird. Beweis. Jede kontextfreie Sprache wird, nach Satz 1 in Abschnitt 2.11, von einem Kellerautomaten akzeptiert. Umgekehrt beweisen wir für jeden Kellerautomaten P, dass die Sprache L(P ) kontextfrei ist. Wir nehmen an, dass P nur einen Zustand hat (siehe vorige Bemerkung). Die Übergangsregeln von P werden als Produktionen einer Grammatik G wie folgt übersetzt: 1. statt (q, x, k) (q, k 1... k n ) schreibt man k xk 1... k n und 2. statt (q, #, k) (q, k 1... k n ) schreibt man k k 1... k n. Genauer: wir formen die kontextfreie Grammatik G = (Σ, Γ, k 0, P ), deren Variablen die Kellersymbole von P sind und deren Produktionen die obige Form 1. und 2. haben. Der Beweis, dass L(G) = L(P ) folgt analog zum Beweis von Satz 1 in Abschnitt 2.11: Falls ein Wort w von G erzeugt wird, d.h., falls wir einen Ableitungsbaum für w haben, können wir den Ableitungsbaum depth-first durchsuchen, und wir bekommen eine akzeptierende Berechnung für den Kellerautomaten P : die beginnt mit der Initialkonfiguration (q, w, k 0 ) und geht mit den Übergangsregeln weiter, die den benutzten Produktionen im Ableitungsbaum genau entsprechen. Umgekehrt, falls ein Wort w von P akzeptiert wird, konstruieren wir einen Ableitungsbaum für w dadurch, dass wir depth-first neue Knoten erzeugen, die den Übergangsregeln der Berechnung entsprechen. Bemerkung 3. Automaten P G, wie oben konstruiert (genauer: deterministische Kellerautomaten, die P G modifizieren), werden im Compilerbau bei der Top-Down- Syntaxanalyse von Programmen benutzt.
77 Kapitel 3 Turingmaschinen kaptm Weder endliche Automaten noch Kellerautomaten sind genügend starke Berechnungsmodelle, denn sie sind nicht fähig, selbst so einfache Sprachen wie z. B. {a n b n c n ; n 1} zu akzeptieren. Wir führen jetzt ein Modell einer Maschine ein, die eine sehr starke Leistung hat, obwohl die Definition nicht komplizierter als die der Kellerautomaten ist: die Turingmaschinen. Diese Maschinen wurden von Alan Turing in den 1930 er als Formalisierung des intuitiven Begriffs des Algorithmus eingeführt. Turing versuchte zu zeigen, dass jeder Rechenprozess, den ein Mensch aufgrund einer (endlichen, eindeutigen) Anweisung durchführen kann, auch automatisch von einer Maschine durchgeführt werden kann. Was einem menschlichen Rechner zur Verfügung steht, ist eine endliche Liste von Instruktionen, die zusammen mit den Daten in seinem Gedächtnis eine endliche Menge von (inneren) Zuständen formt. Außerdem hat er einen unbeschränkten Raum, in dem er lesen, schreiben und überschreiben darf. Das kann (zweidimensional) durch einen beliebig erweiterbaren Papierstoß realisiert werden, oder äquivalent, falls alle Zeilen als Erweiterungen der ersten angesehen werden, als ein (eindimensionales) unendliches Band. Das formale Modell ist dann dem eines Kellerautomaten ähnlich: anstelle des Kellers gibt es hier ein Band, auf dem sich ein read-and-write-kopf unbeschränkt bewegt. Die Leistungsfähigkeit von Turingmaschinen ist trotzdem unvergleichlich größer als die der Kellerautomaten. Es zeigt sich, dass die Klasse aller Probleme, die mit Turingmaschinen gelöst werden können, dieselbe ist wie die Klasse aller Probleme, die moderne Rechner mit modernen Programmiersprachen lösen können. Die Churchsche These, die wir s0päter genauer erläutern, behauptet, dass die Turingmaschine sogar ein ganz allgemeines Modell des Begriffs des Algorithmus ist. Also kann ein Problem genau dann mit einem Algorithmus gelöst werden, wenn eine Turingmaschine es lösen kann. Diese These kann nicht bewiesen werden (der Begriff des Algorithmus ist eben doch nur intuitiv), aber sie wurde mehrmals überzeugend dadurch untermauert, dass andere oft grundsätzlich verschiedene Berechnungsmodelle dieselbe Klasse lösbarer Probleme ergeben. 3.1 Definition einer Turingmaschine Eine Turingmaschine besteht analog zum Kellerautomaten aus inneren Zuständen, externem Speicher und einer Betriebseinheit, die aufgrund des momentanen Zustandes und des gerade gelesenen Symbols entscheidet, welcher der nächste Zustand ist und wie der Speicher geändert wird. Im Vergleich zu Kellerautomaten hat hier der Speicher den Typ eines (unbeschränkten) Bandes, auf dem sich ein 73
78 74 KAPITEL 3. TURINGMASCHINEN Lese-/Schreibkopf frei bewegt:... a b b a... Kopf Band q 0 Betriebseinheit q 3 q 2 q 1 (Obwohl das Band unbeschränkt ist, ist zu jedem Zeitpunkt nur ein endlicher Teil beschrieben; der Rest ist leer.) Noch ein Unterschied im Vergleich zu den Kellerautomaten: wir arbeiten zuerst nur mit deterministischen Turingmaschinen, denn sie sind (wie im Fall der endlichen Automaten) genauso leistungsfähig wie die nichtdeterministischen. Das beweisen wir später. Die Übergangsfunktion δ einer Turingmaschine entscheidet aufgrund des momentanen Zustandes q und des gerade gelesenen Bandsymbols s, ob 1. sich der Zustand zu q ändert und sich der Kopf nach links (L) oder rechts (R) bewegt oder 2. sich der Zustand zu q ändert und der Kopf das momentane Bandsymbol mit einem neuen Symbol s überschreibt. Das beschreiben wir als Funktion δ(q, s) = (q, s ), wobei s = L, R oder s Σ ist. (Σ ist das gegebene Eingabealphabet). Wir müssen aber auch Bandfelder, die nicht beschriftet sind, behandeln. Dazu führen wir ein Spezialsymbol # (Blank) ein, das unbeschriftete Felder bezeichnet. In der Formel δ(q, s) = (q, s ) sind q und q also Zustände, s ein Symbol aus Σ {#} und s ein Symbol aus Σ {#,L,R}. Obwohl die Turingmaschine, wie wir sie jetzt definieren, deterministisch ist, gibt es neben 1. und 2. noch eine weitere Möglichkeit für ihr Verhalten, nämlich dass 3. die Maschine im Zustand q auf dem Bandsymbol s hält und die Berechnung endet. sectdefturingmaschine defturingmaschine Formal wird dies dadurch beschrieben, dass δ(q, s) nicht definiert ist. Hier ist δ also eine partielle Funktion. Es gibt einen wichtigen Grund für diesen dritten Fall: der Kopf der Turingmaschine ist kein read-only-kopf (wie im Fall der endlichen Automaten und Kellerautomaten). Der Impuls, eine Berechnung zu beenden, erfolgt hier also nicht durch das Ende der Eingabe. Im Vergleich mit den DEA oder Kellerautomaten ergibt sich eine kleine Vereinfachung: es genügt ein finaler Zustand, wir brauchen keine Menge F Q (vergleiche 3.2 unten). Notation. Wir bezeichnen Σ = Σ { } als die Menge aller Bandsymbole. Definition. Eine Turingmaschine (TM) ist ein Fünftupel M = (Q, Σ, δ, q 0, q F ) wobei
79 3.1. DEFINITION EINER TURINGMASCHINE 75 ectbspaltdreieinseins bspaltdreieinseins Q Σ δ q 0 Q q F Q eine endliche Menge (aller Zustände), eine endliche Menge (das Eingabealphabet), die die Symbole L, R und # nicht enthält, eine partielle Funktion (die Übergangsfunktion) mit Definitionsbereich Q (Σ {#}) und Wertebereich Q (Σ {#,L,R}), der Initialzustand und der Finalzustand ist. Notation. Wir schreiben statt δ(q, s) = (q, s ) oft nur (q, s) (q, s ) und sprechen von Übergangsregeln. Wenn s = L, bedeutet diese Regel, dass der Lesekopf nach links geht. Analog für s = R. Wenn s in Σ liegt, wird das gelesene Symbol s durch s überschrieben und der Kopf bewegt sich nicht. Beispiel 1. Teilbarkeit durch 5. Der Algorithmus, der für eine Zahl entscheidet, ob sie durch 5 teilbar ist, ist einfach: akzeptiert werden Zahlen mit der letzten Ziffer 0 oder 5. Wir lesen also die Eingabe s 1... s n bis wir das letzte beschriebene Feld s n erreichen (also: bis # erscheint und dann einen Schritt zurück). Falls s n = 0 oder 5, gehen wir in den Finalzustand q F über: (q 0, i) (q 0, R) für i = 0, 1,..., 9 (wir lesen weiter) (q 0, #) (q 1, L) einen Schritt zurück und in den neuen Zustand q 1 (q 1, 0) (q F, 0) (q 1, 5) (q F, 5) } falls s n = 0 oder 5, ist der letzte Zustand q F Genauer: die folgende TM M = ({q 0, q 1, q F }, {0, 1,..., 9}, δ, q 0, q F ), deren Übergangsregeln oben aufgelistet sind, akzeptiert die Sprache aller Wörter über Σ = {0, 1,..., 9}, die mit 0 oder 5 enden. Beispiel einer Berechnung: für die Eingabe 132 wird die TM die folgenden Schritte machen:... # # # # # #... q 0 Initialkonfiguration... # # # # # #... q 0... # # # # # #... q 0... # # # # # #... q 1 q 0... # # # # # #... Haltekonfiguration Da kein Übergang (q 1, 2) definiert ist, hält hier die Turingmaschine. Die Eingabe 132 wird nicht akzeptiert, da q 1 nicht der Finalzustand ist.
80 76 KAPITEL 3. TURINGMASCHINEN Die Berechnung von Eingaben formalisieren wir jetzt. Konfigurationen: Eine Konfiguration einer Turingmaschine ist die vollständige Information über die TM zu einem Zeitpunkt der Berechnung; sie wird durch (1) den momentanen Zustand q, (2) den Inhalt des Bandes und (3) die Position des Kopfes bestimmt. Also ist (1) ein Element der Menge Q. Wir können (2) und (3) zusammenfassen, indem wir sagen, welches Wort u L links vom Kopf steht, welches Wort u R rechts steht und welches Symbol a aus Σ = Σ {#} der Kopf liest. Dabei ist u L entweder leer, oder hat das erste Symbol aus Σ und die weiteren aus Σ: Analog u R Σ Σ {ε}. u L Σ Σ {ε}. Eine Konfiguration ist also ein Quadrupel (q, u, a, v), wobei q Q, u Σ Σ {ε}, a Σ und v Σ Σ {ε}. Die Menge aller solcher Quadrupel heißt Konfigurationsmenge. K = Q (Σ Σ {ε}) Σ (Σ Σ {ε}) Die üblichere (und übersichtlichere) Schreibweise ist, u, a, v zu konkatenieren und a zu unterstreichen: (q, uav). In Beispiel 1 hat die Berechnung also die Konfigurationen (q 0, 132) (q 0, 132) (q 0, 132) (q 0, 132#) und (q 1, 132) Berechnung: Die Eingabe s 1 s 2... s n Σ wird immer so auf das Band geschrieben, dass die Buchstaben ohne Leerzeichen hintereinander stehen. Der Kopf wird auf den ersten Buchstaben gestellt und der Zustand ist initial. Mit anderen Worten heißt das: wir erwarten am Anfang, dass die Konfiguration die folgende Form hat: ( ) (q 0, s 1 s 2... s n ), wobei s 1... s n Σ. Der Fall der leeren Eingabe ε Σ (also n = 0) entspricht der Konfiguration (q 0, #). Konfigurationen der Form ( ) heißen Initialkonfigurationen. Falls die Turingmaschine eine Konfiguration (q, s 1 s 2... s i 1 s i s i+1... s n ) erreicht hat, gibt es zwei Möglichkeiten: entweder ist δ(q, s i ) nicht definiert, dann heißt die Konfiguration Haltekonfiguration, oder es gilt δ(q, s i ) = (q, s ) mit s {L,R} Σ, dann definieren wir die Folgekonfiguration wie folgt: 1. falls s =L, dann ist die Folgekonfiguration (q, s 1 s 2... s i 1 s i s i+1... s n ) 2. falls s =R, dann ist die Folgekonfiguration (q, s 1 s 2... s i 1 s i s i+1... s n ) 3. falls s Σ, dann ist die Folgekonfiguration (q, s 1 s 2... s i 1 s s i+1... s n ).
81 3.1. DEFINITION EINER TURINGMASCHINE 77 Konfiguration δ(q, s i ) Folgekonfiguration (q, s 1 s 2... s i 1 s i s i+1... s n ) (q, L) (q, s 1 s 2... s i 1 s i s i+1... s n ) (q, s 1 s 2... s i 1 s i s i+1... s n ) (q, R) (q, s 1 s 2... s i 1 s i s i+1... s n ) (q, s 1 s 2... s i 1 s i s i+1... s n ) (q, s ) (q, s 1 s 2... s i 1 s s i+1... s n ) (q, s 1 s 2... s i 1 s i s i+1... s n ) nicht definiert keine (Haltekonfiguration) Tabelle 3.1: Definition tabfolgekonfiguration der Folgekonfiguration der TM TabFolgekonfiguration Diese Definition ist in Tabelle 3.1 zusammengefasst. Bemerkung 1. Wie ist der Fall 1 zu verstehen, falls i = 1 gilt? Die Folgekonfiguration zu (q 0, s 1... s n ) ist natürlich (q, #s 1... s n ). Analog folgt im Fall 2 aus i = n, dass die Folgekonfiguration (q, s 1... s n #) ist. Notation. Die Relation Folgekonfiguration auf der Menge K aller Konfigurationen bezeichnen wir mit dem Symbol. Also ergibt der 1. Fall (q, s 1 s 2... s i 1 s i s i+1... s n ) (q, s 1 s 2... s i 1 s i s i+1... s n ) usw. Die reflexive und transitive Hülle dieser Relation wird mit bezeichnet; d.h., K K bedeutet, dass K und K zwei Konfigurationen sind, die entweder gleich sind oder dass es Konfigurationen K = K 0, K 1,..., K n = K mit K i 1 K i für i = 1,..., n gibt. Wir sagen, dass die Konfiguration K von K berechenbar ist. ectdeftmkonfiguration deftmkonfigurationen In Beispiel 1 in Abschnitt 3.1 gilt (q 0, 132) (q 0, 132)... (q 1, 132) und, die letzte Konfiguration hat keine Folgekonfiguration, da sie eine Haltekonfiguration ist. Definition. Für jede Turingmaschine ist die Berechnung einer Eingabe s 1 s 2... s n Σ eine endliche oder unendliche Liste von Konfigurationen: K 0 K 1 K2... wobei 1. K 0 die Initialkonfiguration mit K 0 = (q 0, s 1 s 2... s n ) ist, und 2. falls die Liste endlich ist, ist die letzte Konfiguration eine Haltekonfiguration. Wir sagen, dass die Turingmaschine die Eingabe genau dann akzeptiert, wenn ihre Berechnung endlich ist und der Zustand der letzten Konfiguration final ist. Bemerkung 2. Die Berechnung einer Eingabe w hat also drei mögliche Ergebnisse: 1. die TM hält und akzeptiert w, 2. die TM hält und akzeptiert w nicht, 3. die TM hält nicht (und akzeptiert w deshalb nicht). Am Anfang ist die Eingabe kompakt, also ohne Unterbrechung (durch #) auf dem Band geschrieben. Im Verlauf der Berechnung kann # an jeder Stelle erscheinen.
82 78 KAPITEL 3. TURINGMASCHINEN sectdefspracheeinertm Beispiel 1. (Fortsetzung) Die Berechnung der Eingabe 132 haben wir beschrieben. Die letzte Konfiguration ist (q 1, 132). Da q 1 nicht final ist, wird 132 nicht akzeptiert. Auch das leere Wort wird nicht akzeptiert: hier haben wir eine 1-Schritt-Berechnung, denn (q 0, #) ist eine Haltekonfiguration, und q 0 ist nicht final. Diese Turingmaschine hält auf jede Eingabe (eine wichtige Eigenschaft, wie wir später erfahren werden) und akzeptiert genau die Eingaben, deren letztes Symbol 0 oder 5 ist. defspracheeinertm sectbspaltdreieinsdrei Definition. Für jede Turingmaschine M = (Q, Σ, δ, q 0, F ) bezeichnen wir mit L(M) die Sprache aller Wörter über Σ, die M akzeptiert. bspaltdreieinsdrei Beispiel 2. DEA als Turing-Maschine. Gegeben sei ein DEA, A = (Q, Σ, δ, q 0, F ), definieren wir eine TM wie folgt: Ā = (Q {q f }, Σ, δ, q 0, q f ) wobei q f / Q (a) jedem Übergang (q, s) q in A entspricht der Übergang (q, s) (q, R) in Ā und (b) für jeden Zustand q F, der in A final ist, den Übergang (q, ) (q f, ). Dann hat die Turing-Maschine dieselbe Berechnung einer Eingabe s 1... s n wie der DEA: wir starten in... s 1 s 2... s n... q 0 und für den Übergang (q 0, s 1 ) q 1 in A ist die nächste Konfiguration usw. Wenn wir die Konfiguration erreichen, dann... s 1 s 2... s n... q 1 s 1 s 2... s n q n q n final die nächste Konfiguration mit Zustand q f akzeptiert und q n nicht final keine weitere Konfiguration und die letzte akzeptiert nicht.
83 3.2. MODIFIKATIONEN VON TURINGMASCHINEN 79 Bemerkung 3. Für einen DEA von k Zuständen und m Eingaben hat die entsprechende TM km + 1 Zustände. Beispiel 3. Eine Turing-Maschine für die Sprache a + b + c + Da diese Sprache regulär ist, wird sie durch einen DEA akzeptiert: a q o a b q 1 b c q 2 c q 3 a,c a,b b,c q 5 a,b,c a,b,c Diesen DEA können wir als eine TM mit = 16 Zuständen simulieren. Beispiel 4. Die Sprache aller Wörter der Form [a n b n c n ] mit n = 1, 2, 3,... ist nicht kontextfrei. (Beweis analog zu dem für a n b n c n.) Aber sie kann durch eine einfache TM akzeptiert werden. Die Simulieren den folgenden Algorithmus: 1. überprüfe, ob das innere Wort in der Sprache a + b + c + liegt: dann genügt die TM aus dem vorigen Beispiel. 2. rekursiv lösche ein a dann ein b und dann ein c solange bis der Inhalt des Bandes die Form [##... #] Wenn 2. gelungen ist, akzeptiere, sonst akzeptiere nicht. sectmodifikationentm subsecttmmehrerefinal 3.2 Modifikationen von Turingmaschinen Wir behaupteten in der Einleitung zu diesem Kapitel, dass Turingmaschinen zu einer starken Leistung fähig sind. Das ist auf den ersten Blick nicht leicht zu erkennen. Aber wir führen jetzt kompliziertere Maschinen ein, mit deren Hilfe schon recht komplizierte Sprachen akzeptiert werden können. Anschließend zeigen wir, dass sich alle diese neuen Maschinen auf den einfachen Fall reduzieren lassen. (Das ist keine Überraschung: erinnern wir uns an die Churchsche These, die behauptet, dass sich alle Berechnungsmodelle auf TM reduzieren lassen!) TM mit mehreren finalen Zuständen Wir können das Konzept der Turingmaschinen zu einer Maschine M = (Q, Σ, δ, q 0, F ) verallgemeinern, die der obigen entspricht, nur ist F Q eine Menge finaler Zustände. Jede solche Maschine kann durch die folgende TM M = (Q {q F }, Σ, δ, q 0, q F ) simuliert werden: q F ist ein neuer Zustand, und δ besteht aus allen Übergangsregeln, die in δ enthalten sind, und zusätzlich werden in δ noch die folgenden Regeln
84 80 KAPITEL 3. TURINGMASCHINEN (q, s) (q F, s) aufgenommen, wobei q F ein Zustand ist, für den δ(q, s) undefiniert ist. (Also führen Haltekonfigurationen (q, s) von M, bei denen q final ist, zu Haltekonfigurationen (q F, s) von M.) Die Anzahl von Schritten, die M macht, ist n + 1 wenn M n Schritte macht. subsect-tm-gedaechtnis TM mit zusätzlichem Gedächtnis Wir können die Definition einer TM so modifizieren, dass die Maschine in jedem Schritt zusätzlich einen Zugriff auf ein Gedächtnis hat, wobei Symbole eines endlichen Alphabets A gespeichert werden. Die Übergangsfunktion δ entscheidet jetzt aufgrund (1) des Zustandes, (2) des gelesenen Symbols aus Σ {#} und (3) des gespeicherten Symbols aus A. Die Übergänge haben jetzt die Form (q, a, s) (q, s ) mit q, q Q, a A, s Σ und s Σ L, R sectbspaltdreizweieins bspaltdreizweieins Für Initialkonfigurationen nehmen wir an, dass ein ausgewähltes Symbol a 0 A gemerkt wird. Beispiel 1. Die Sprache aller Wörter, deren erstes Symbol nie wieder vorkommt, also L = {s 1... s n Σ ; s 1 s i für i = 2,..., n}, kann durch eine TM mit zusätzlichem Gedächtnis wir folgt akzeptiert werden: die TM liest das erste Symbol und speichert es im Gedächtnis (also A = Σ, d.h., das zusätzliche Gedächtnis kann ein Symbol aus Σ speichern). Dies in Initialzustand q 0. Dann vergleicht die TM im Zustand q 1 die anschließend gelesenen Symbole mit dem gespeicherten und hält und akzeptiert nicht, falls sie eine Übereinstimmung feststellt. Sobald die TM das Blanksymbol liest, hält sie und akzeptiert im Zustand q 0, der initial sowie final ist. Diese TM braucht nur zwei Zustände: q 0, initial und final, in dem s 1 gespeichert wird, und q 1, in dem nach rechts gegangen und mit dem Speicher verglichen wird. Bemerkung 1. Eine TM mit zusätzlichem Gedächtnis ist eigentlich eine TM in dem vorher definierten Sinne, deren Zustandsmenge das kartesische Produkt Q A ist (d. h. die Menge aller Paare (q, a), wobei q ein Zustand und a A ist). Die Übergänge der Maschine sind also von (q, a) Q A und s S abhängig. Der Initialzustand ist (q 0, a 0 ), und alle Zustände (q F, a), a A, sind final. Zum Beispiel gilt für die Maschine aus Beispiel 1, dass A = Σ (mit s 0 Σ beliebig gewählt) und die Zustandsmenge Q = {q 0, q 1 } Σ ist. Wir können sie wie folgt als normale TM beschreiben, wobei der Initialzustand (q 0, s 0 ) und alle Zustände (q 0, s) final sind. So gibt es die folgenden Übergangsregeln: ((q 0, s 0 ), s) ((q 1, s), R) für alle s Σ ((q 1, s), s ) ((q 1, s), R) für alle s Σ, s s ((q 1, s), #) ((q 0, s 0 ), #). Zum Beispiel wird die Eingabe stt wie folgt berechnet: ((q 0, s 0 ), stt) ((q 1, s), stt) ((q 1, s), stt) ((q 1, s), stt#) ((q 0, s 0 ), stt#). Hier hält die TM und akzeptiert.
85 3.2. MODIFIKATIONEN VON TURINGMASCHINEN 81 subsecttmerwbandalph ectbspaltdreizweivier bspaltdreizweivier TM mit erweitertem Bandalphabet Manchmal ist es geschickt, zusätzliche (Hilfs-)Symbole auf das Band schreiben zu dürfen, die nicht zum Eingabealphabet gehören. Das bedeutet, dass außer dem Eingabealphabet Σ noch ein Bandalphabet Γ mit Σ Γ gegeben wird und die Übergangsfunktion δ mit allen Symbolen aus Γ arbeitet, d.h., δ ist eine partielle Funktion mit Definitionsbereich Q (Γ {#}) und Wertebereich Q (Γ {#, L, R}). Eine TM mit erweitertem Bandalphabet ist also ein 6-Tupel M = (Q, Σ, Γ, δ, q 0, q F ) wobei Σ Γ das Eingabealphabet und δ Q (Γ {#}) Q (Γ {#, L, R}) eine partielle Funktion ist. Die Sprache, die M akzeptiert, ist die Sprache L(M) Σ aller Wörter über dem (kleineren) Eingabealphabet Σ, für die M im Finalzustand hält. Beispiel 2. Eine 1-Band TM, die die Sprache {a n b n c n ; n 1} akzeptiert. Hier haben wir Σ = {a, b, c}, und wir benutzen Γ = {a, b, c, [, ]}. Die TM wird erst die Eingabe mit [ und ] umklammern: (q 0, a) (q 0, L) (q 0, #) (q 0, [ ) (q 0, [ ) (q 1, R) (q 1, x) (q 1, R) für x = a, b, c (q 1, #) (q 1, ] ). Jetzt kann sie die TM von Beispiel 2 in Abschnitt 3.1 simulieren. Beispiel 3. Eine einfache TM für die Sprache a n b n c n (n 1). Wir löschen die Symbole nicht, sondern ersetzen sie mit einem neuen Symbol X. Die TM hat das Bandalphabet a, b, c, X und arbeitet wie folgt (der Kopf ignoriert das Symbol X): (1) Das gelesene a wird durch X ersetzt. (2) Kopf geht nach rechts zum ersten b, das mit X ersetzt wird. Wenn keine b gefunden wird oder erst c vorkommt, hält die TM und akzeptiert nicht. (3) Kopf geht nach rechts zum ersten c, das mit X ersetzt wird. Wenn kein c vor # gefunden wird, hält die TM und akzeptiert nicht. (4) Kopf geht nach links bis # und dann rechts bis (4a) ein a gefunden wird, dann wiederholt sich der Zyklus (1) - (3) oder (4b) b oder c gefunden wird, dann hält die TM und akzeptiert nicht oder (4c) # gefunden wird, dann hält die TM und akzeptiert. Bemerkung 2. Für jede TM mit erweitertem Bandalphabet M gibt es eine ( normale ) TM, die M simuliert. (a) Nehmen wir erst an, dass Γ eine Untermenge von Σ + ist. D.h. die neuen Symbole sind Wörter s 1... s k im ursprünglichen Alphabet Σ. Jeden Übergang (q, s 1... s k ) (q, s 1... s l )
86 82 KAPITEL 3. TURINGMASCHINEN der TM können wir durch eine Sequenz von Übergängen einer neuen TM mit Bandalphabet Σ simulieren: der Kopf, statt das Wort s 1... s k auf einmal zu lesen, liest es in k Schritten und speichert es im zusätzlichen Gedächtnis. Dann Schreibt der Kopf, statt s 1... s l auf einmal, das Wort in l Schritten, indem er s 1... s k im zusätzlichen Gedächtnis zur Verfügung hat. (b) Wenn Γ ein beliebiges Alphabet ist, können wir es mit Wörtern aus Σ codieren: da die Menge Γ endlich ist und die Menge Σ + unendlich ist, gibt es eine injektive Funktion γ Γ Σ + mit γ(s) = s für alle s Σ( Γ). Dann können wir, statt Γ, mit der gleichmächtigen Menge Γ = γ(γ), die Untermenge von Σ + ist, arbeiten und den Fall (a) anwenden. subsecttmmehrspur TM mit mehrspurigem Band Wir arbeiten hier mit einer Modifikation von TM, die darin besteht, dass das Band in k Spuren unterteilt wird, die alle gleichzeitig gelesen werden. Stellen wir uns erst vor, dass k = 2 ist. Wir schreiben Symbole aus dem Eingabealphabet Σ = Σ 1 auf Spur 1 und Symbole eines Hilfsalphabetes Σ 2 auf Spur 2:... # # # # # # a # b # # a #... sectbspaltdreizweizwei bspaltdreizweizwei Die Maschine entscheidet in jedem Schritt abhängig vom Zustand und dem Inhalt beider Spuren (1) was der nächste Zustand wird und (2) ob sich der Kopf bewegt oder beide Spuren gleichzeitig überschrieben werden. Eine 2-Spur-TM ist eigentlich eine TM im vorher definierten Sinne, deren Bandalphabet aus Paaren (s 1, s 2 ), mit s 1 Σ 1 und s 2 Σ 2, geformt wird. Die einzige Ausnahme ist das Paar (#, #), das jetzt als Blank-Symbol dient. Also ist eine 2- Spur-TM einfach eine TM mit dem Eingabealphabet Σ = Σ 1 Σ 2 {(#, #)}. Analoges gilt für k-spurige Maschinen, die auf der i-ten Spur Symbole aus Σ i tragen (i = 1,..., k): das sind also die normalen TM mit Eingabealphabet Σ = Σ 1 Σ 2 Σ k {(#, #,..., #)} und mit dem Blanksymbol (#, #,..., #). Beispiel 4. Primzahltest Wir zeigen, wie man eine 3-spurige TM konstruiert, die die Sprache L aller Primzahlen (in binärer Darstellung) akzeptiert. Hiermit kann man auch gut die Idee von Turing illustrieren, dass jeder Algorithmus mit einer TM automatisiert werden kann. Wir verwenden hier den primitiven Algorithmus, der jede Zahl n durch alle Testzahlen 2, 3, 4,..., n 1 teilt und n akzeptiert, falls alle Divisionen einen positiven Rest ergeben. EINGABESPUR TESTZAHLSPUR HILFSSPUR q 0 Die Spuren der TM sind (1) Eingabespur, die während der Berechnung unverändert bleibt, (2) Testzahlspur, die am Anfang mit 1 beschriftet wird und in jedem Berech-
87 3.2. MODIFIKATIONEN VON TURINGMASCHINEN 83 nungsdurchgang um eins vergrößert wird (sodass in dem ersten Berechnungsdurchgang durch 2 dividiert wird, im zweiten mit 3, usw.) und (3) eine Hilfsspur. Wir schreiben am Anfang also die gegebene Zahl n = 1, 2, 3,... auf Spur 1, die Zahl 1 auf Spur 2 und nichts auf Spur 3. Der Initialzustand q 0 überprüft (durch Vergleich mit Spur 2), ob auf Spur 1 eine Zahl n 2 steht. Im Fall von n = 0 oder n = 1, wird der Zustand q 0 zu q, einem nicht-finalen Haltezustand verändert. (Also werden 0 und 1 nicht akzeptiert.) Falls n 2 ist, werden Berechnungsdurchgänge rekursiv durchgeführt, die man wie folgt beschreiben kann: Anfang eines Berechnungsdurchganges: Spur 1 wird auf Spur 3 kopiert. Die Zahl auf Spur 2 wird um 1 vergrößert. Die Spuren 1 und 2 werden verglichen und falls die Zahlen gleich sind, wird der Zustand zu q +, einem finalen Haltezustand geändert (die Eingabe wird also akzeptiert, denn keine Zahl kleiner n, die n teilt, wurde gefunden). Rumpf eines Berechnungsdurchganges: Die Zahl von Spur 3 wird durch die auf Spur 2 dividiert (z.b. durch wiederholte Subtraktion). Ende eines Berechnungsdurchganges: Jetzt steht auf Spur 3 der Rest der Eingabe modulo der Testzahl. Falls der Rest 0 ist, wird der Zustand zu q verändert. Falls der Rest positiv ist, wird der Kopf nach links zum ersten Symbol 1 von Spur 1 geschoben und ein neuer Berechnungsdurchgang beginnt. Es ist leicht einzusehen, dass sich diese informale Beschreibung der Turingmaschine relativ einfach durch eine formal definierte TM realisieren lässt TM mit mehreren Bändern Die nächste Modifikation von TM ist eine Maschine, die mehrere Bänder hat und bei der auf jedem Band ein Lese-/Schreibkopf steht. Die k Köpfe bewegen sich unabhängig voneinander und schreiben auch unabhängig voneinander auf ihren individuellen Bändern. Die Kontrolle ist aber zentral (durch den gegebenen Zustand): Band 1 Band Kopf Kopf 2 q 4 q 0 q 1 q 3 q 2 sectdefkbandtm SCHEMA EINER 2-BAND TM Das bedeutet, dass der Übergangsfunktion δ hier der Zustand q und die k gelesenen Symbole (s 1, s 2,..., s k ) Σ k zur Verfügung stehen. (Wir bezeichnen mit A k = A A A die Menge aller k-tupel von Elementen aus A). Hier ist Σ die Menge aller Bandsymbole von allen k Bändern. Als Ergebnis haben wir einen neuen Zustand q und ein k-tupel von Symbolen aus {L,R} Σ {#}. Das heißt, dass δ eine partielle Funktion mit Urbildbereich Q (Σ {#}) k und Wertebereich Q (Σ {#,L,R}) k ist. defkbandtm Definition. Eine k-band-turingmaschine ist ein Fünftupel M = (Q, Σ, δ, q 0, q F ), die wie eine TM definiert wird, nur ist δ jetzt eine partielle Funktion mit Urbildbereich Q (Σ) k und Wertebereich Q (Σ {L,R}) k.
88 84 KAPITEL 3. TURINGMASCHINEN sectbspaltdreizweidrei bspaltdreizweidrei Die Berechnung durch eine k-band TM ist analog zum Fall einer 1-Band TM definiert. Eine Konfiguration hat die Form (q, u 1 a 1 v 1, u 2 a 2 v 2,..., u k a k v k ), wobei q der Zustand und u i a i v i der Inhalt des i-ten Bandes bezeichnet. Falls δ(q, a 1... a k ) definiert ist, wird die Folgekonfiguration individuell auf jedem Band berechnet. Falls δ(q, a 1... a k ) undefiniert ist, heißt die Konfiguration Haltekonfiguration. Band 1 dient als Eingabeband, das heißt, die Initialkonfiguration für eine Eingabe s 1... s n ist (q 0, s 1... s n, #, #,..., #) (k 1) mal Die Eingabe wird akzeptiert, falls die Maschine eine Haltekonfiguration mit dem finalen Zustand erreicht. Beispiel 5. Eine 2-Band TM, die die Sprache {a n b n c n ; n 1} akzeptiert. Die TM hat ein Eingabeband (Band 1) und ein Hilfsband (Band 2). Band 1 bleibt unverändert, Band 2 ist am Anfang leer. Band 1 a a... a b b... b c c... c # # Band 2 # # #... Initialkonfiguration Erste Etappe der Berechnung: Solange der Kopf 1 a liest, schreibt Kopf 2 a, und beide Köpfe bewegen sich ein Feld nach rechts. Nur am Anfang schreibt Kopf 2 ein x anstelle von a. Band 1 a a... a b b... b c c... c # # Band 2 x a... a # # #... Zweite Etappe: Hier bewegen sich Kopf 1 und Kopf 2 gleichzeitig in entgegengesetzte Richtungen: Kopf 1 nach rechts und Kopf 2 nach links, bis Kopf 1 c und Kopf 2 x liest. Falls Kopf 1 während dieser Bewegung immer b und Kopf 2 immer a liest, gehen wir zur dritten Etappe über; falls nicht, hält die TM in einem nicht-finalen Zustand (Eingabe nicht akzeptiert). Band 1... ## a a... a b b... b c c... Band 2... # x a... a # # #... Dritte Etappe: Beide Köpfe bewegen sich gleichzeitig nach rechts, bis Kopf 1 # liest. Falls in jedem dieser Schritte außer dem letzten Kopf 1 c und Kopf 2 a liest und
89 3.2. MODIFIKATIONEN VON TURINGMASCHINEN 85 falls beide Köpfe im letzten Schritt # lesen, dann hält die TM im finalen Zustand q F (Eingabe akzeptiert). Falls nicht, hält die TM und akzeptiert nicht. Formal können wir die Übergänge wie folgt beschreiben: Erste Etappe: (q 0, a, #) (q 1, a, x) (q 1, a, x) (q 1, R, R) (q 1, a, #) (q 1, a, a) (q 1, a, a) (q 1, R, R) Zweite Etappe: (q 1, b, #) (q 2, R, L) (q 2, b, a) (q 2, R, L) (q 2, c, x) (q 2, R, R) Dritte Etappe: (q 2, c, a) (q 2, R, R) (q 2, #, #) (q F, #, #). Das sind alle Übergänge für die 2-Band TM mit Bandalphabet ˆΣ = {a, b, c, x} und Eingabealphabet Σ = {a, b, c}, die die Sprache aller a n b n c n (n 1) akzeptiert. (Vergleichen Sie das mit Beispiel 2 in Abschnitt 3.1). Beispiele von Berechnungen: Die Eingabe aabbcc wird wie folgt berechnet: (q 0, aabbcc, #) (q 0, aabbcc, x) (q 0, aabbcc, x#) (q 0, aabbcc, xx) (q 0, aabbcc, xx#) (q 0, aabbcc, xx#) (q 0, aabbcc, xx#) (q 0, aabbcc, xx#) (q 0, aabbcc#, xx#) (q F, aabbcc#, xx#) und wird akzeptiert. Die Eingabe aabcc wird wie folgt berechnet: (q 0, aabcc, #) (q 0, aabcc, x) (q 0, aabcc, x#) (q 0, aabcc, xx) (q 0, aabcc, xx#) (q 0, aabcc, xx) (q 0, aabcc, xx#) und wird nicht akzeptiert. Bemerkung 3. Simulation einer 2-Band-TM durch eine 1-Band-TM Sei M = (Q, Σ, δ, q 0, F ) eine 2-Band-TM. Wir konstruieren eine 1-Band-TM mit zusätzlichem Gedächtnis, M, die die Maschine M Schritt für Schritt simuliert. Das Band von M ist 4-spurig: Band 1 Band 2 a a b a a Maschine M... a a b a a # # # # # # # # # # # # # # # # # # # # # # # # # # Maschine M... Band 1 der Maschine M wird auf die Spur 1 von M kopiert, die Kopfposition des Kopfes von Band 1 steht auf der Spur 2. Analog wird Band 2 auf Spur 3 von M kopiert und die Kopfposition des Bandes auf Spur 4. Das Eingabealphabet von M
90 86 KAPITEL 3. TURINGMASCHINEN ist also Σ = (Σ {#}) {, #} (Σ {#}) {, #} {(#, #, #, #)}, wobei (#, #, #, #) das Blank-Symbol ist. Die Zustände von M und M sind dieselben. Die Maschine M muss sich die letzten von Kopf 1 und Kopf 2 gelesenen Symbole merken, also hat sie ein zusätzliches Gedächtnis der Form (s 1, s 2, x), wobei s i Σ i {#} das aktuelle Symbol von Band i (= 1, 2) der Turingmaschine M ist und x {l, r} aussagt, ob Kopf 2 (also das Symbol auf Spur 4)links oder rechts von Kopf 1 (dem Symbol auf Spur 2) steht. 1. Anfang der Simulation: Auf Spur 1 steht die Eingabe v 1 v 2... v n von M, die Spuren 2-4 sind leer. Wir schreiben je ein auf die Spuren 2 und 4 unter v 1 von Spur 1. SPUR 1 SPUR 2 SPUR 3 SPUR 4... # v 1 v 2... v n # # #... # # #... # # Berechnungsschritt: Am Anfang der Simulation einers Schrittes von M steht der Kopf von M unter dem Symbol auf Spur 2. Das gerade gelesene Symbol von Spur 1 wird als s 1 im zusätzlichen Gedächtnis gespeichert. Danach sucht der Kopf von M das Symbol auf Spur 4: entweder stehen die beiden Symbole untereinander, sonst suchen wir links bzw. rechts, falls im zusätzlichen Gedächtnis x = l bzw. x = r steht. Sobald gefunden ist, wird das gerade gelesene Symbol von Spur 3 als s 2 gespeichert. Aufgrund des Zustandes q von M und des Paares (s 1, s 2 ) im zusätzlichen Gedächtnis werden jetzt die Kopfpositionssymbole auf den Spuren 3 und 4 so bewegt, wie die Maschine M die Köpfe bewegt, und die Symbole auf den Spuren 1 und 3 werden so überschrieben, wie M die Symbole auf beiden Bändern überschreibt. (Das geschieht in endlich vielen Schritten der Kopfbewegung von M.) Die Eingabe x {l, r} im Gedächtnis wir aktualisiert und der Kopf wird nach auf Spur 2 bewegt. uivalenzkbandtmeinbandtm uivalenzkbandtmeinbandtm 3. Ende der Simulation: Die Maschine M hält genau dann, wenn eine Haltekonfiguration von M erreicht wird. Und M akzeptiert genau dann, wenn M akzeptiert. Satz 1. Für jede k-band-tm gibt es eine (1-Band-) TM, die dieselbe Sprache akzeptiert. Beweis. Für k = 2 folgt der Beweis aus der gerade beschriebenen Simulation und dem Fakt, dass eine 4-spurige TM mit zusätzlichem Gedächtnis durch eine TM simuliert werden kann (siehe Kapitel 3.2.2). Für k > 2 ist der Beweis analog und wird dem Leser überlassen. 3.3 Nichtdeterministische Turingmaschinen inistischeturingmaschine inistischeturingmaschine Analog zum Fall nichtdeterministischer Automaten führen wir hier nichtdeterministische TM ein. Statt einer partiellen Funktion δ Q Σ Q Σ {L,R} haben wir hier eine Relation δ: Definition. Eine nichtdeterministische Turingmaschine M (NTM) ist ein Fünftupel M = (Q, Σ, δ, q 0, q F ), das wie eine TM definiert wird, außer dass hier δ
91 3.3. NICHTDETERMINISTISCHE TURINGMASCHINEN 87 eine Relation δ [Q Σ] [Q (Σ {L,R})] ist. Wir schreiben, wie oben, (q, s) (q, s ) falls die Relation δ das Quadrupel (q, s, q, s ) enthält. Der ganze Unterschied bezüglich der Notation zwischen einer TM und einer nichtdeterministischen TM ist, dass für eine deterministische TM für zwei beliebige Übergangsregeln (q, s) (q, s ) und (q, s) (q, s ) gilt, dass, falls die linken Seiten gleich sind (q = q und s = s), auch die rechten Seiten gleich sein müssen (q = s und s = s ). Für nichtdeterministische TM gilt keine solche Einschränkung. Beispiel 1. stochastischer Zahlengenerator. Wir beschreiben eine nichtdeterministische Turingmaschine M, die auf ihr Band entweder eine beliebige Zahl n 1 (in binärer Form) schreibt und hält oder nie hält. Im Initialzustand q 0 schreibt M eine 1 und geht zum Zustand q 1, in dem die folgende Wahl getroffen wird: entweder wird der Haltezustand q F erreicht, oder es wird ein neues Symbol 0, 1 geschrieben und (unter Verwendung eines Hilfezustandes q 2 ) der Kopf nach rechts bewegt. Formal: M = ({q 0, q 1, q 2, q F }, {0, 1}, δ, q 0, q F ) wobei δ durch die folgenden Übergangsregeln beschrieben wird: (q 0, #) (q 0, 1) (q 0, 1) (q 1, R) (q 1, #) (q 2, 0) Beispiel: (q 1, #) (q 2, 1) (q 1, #) (q F, #) (q 2, i) (q 1, R) für i = 0, 1.
92 88 KAPITEL 3. TURINGMASCHINEN sectdeftmakzeptiertw deftmakzeptiertw sectbspaltdreivierzwei bspaltdreivierzwei q q q q q q q q F Konfigurationen und die Berechnung von Eingaben sind genauso definiert wie für die (deterministischen) TM. Hier hat eine Eingabe natürlich nicht nur eine, sondern mehrere Berechnungen. Definition. Eine nichtdeterministische Turingmaschine M akzeptiert die Eingabe w Σ, falls es für w mindestens eine Berechnung gibt, so dass M nach endlich vielen Schritten eine Haltekonfiguration mit dem finalen Zustand erreicht. Die Sprache aller Eingaben, die M akzeptiert, wird mit L(M) bezeichnet. Bemerkung 1. Die k-band-tm lassen sich analog zu den nichtdeterministischen k-band-tm verallgemeinern: hier ist δ eine Relation δ [Q Σ k ] [Q (Σ {L,R}) k ]. Beispiel 2. Test der Zerlegbarkeit. Wir zeigen eine nichtdeterministische 3-Band-TM, die die Sprache L { } aller zerlegbarer Zahlen, also Zahlen der Form n = pq mit p > 1 und q > 1 akzeptiert. Wie in Beispiel 4 in Abschnitt hat M ein Eingabeband, ein Testzahlband und ein Hilfsband. Im Initialzustand schreibt M die Zahl zwei ( ) auf Band 2 (jede Testzahl ist größer oder gleich ) und verändert den Zustand zu q 1. In q 1, dem einzigen nichtdeterministischen Zustand, gibt es zwei Möglichkeiten: entweder wird ein neuer Strich auf Band 2 geschrieben, und der Zustand q 1 bleibt, oder der Zustand verändert sich zu q 2. Im Zustand q 2 wird wie folgt deterministisch berechnet:
93 3.3. NICHTDETERMINISTISCHE TURINGMASCHINEN Die Zahl n auf Band 1 wird mit der Zahl m auf Band 2 verglichen. Falls n m ist, hält die Maschine, ohne zu akzeptieren. 2. Falls n > m, wird n auf Band 3 kopiert. 3. Band 2 wird von Band 3 abgezogen, bis auf Band 3 der Rest der Division von n durch die Testzahl steht. Dann hält die Maschine. 4. Falls Band 3 leer ist, wird die Eingabe akzeptiert, falls Band 3 nicht leer ist, wird sie nicht akzeptiert. ectbspaltdreivierdrei bspaltdreivierdrei Wir sehen, dass die Testzahl m eine beliebige Zahl m = 2, 3, 4,... sein kann. Die Eingabe n wird genau dann akzeptiert, wenn es ein m < n gibt, das n teilt. Beispiel 3. Simulation eines Kellerautomaten Wir können einfach jeden Kellerautomaten durch eine nichtdeterministische 2- Band-Turingmaschine M simulieren, bei der auf Band 1 die Eingabe des Kellerautomaten und auf Band 2 der Kellerinhalt steht. M hat ein zusätzliches Gedächtnis, in dem die Übergangsregeln des Kellerautomaten notiert werden. Am Anfang schreibt die NTM das Symbol k 0 auf Band 2. Jede Übergangsregel (q, s, k) (q, k 1... k n ), s Σ, des Kellerautomaten wird wie folgt simuliert: Band 1... s s... s Übergang... s s... s Band 2... k k k... k 1... k n k k... Falls die Maschine M im Zustand q die Symbole s (Band 1) und k (Band 2) liest, ändert sie ihren Zustand zu q, bewegt den Kopf 1 einen Schritt nach rechts und macht folgendes auf Band 2: 1. Falls n 0 (also k 1... k n ε), wird k von k n überschrieben, und der Kopf 2 schreibt, sich nach links bewegend, die Symbole k n 1,..., k Falls n = 0, löscht Kopf 2 das Symbol k und bewegt sich einen Schritt nach rechts. zsimulationntmdurchtm zsimulationntmdurchtm Analog wird jede spontane Übergangsregel (q, #, k) (q, k 1... k n ) simuliert: der einzige Unterschied ist, dass hierbei Kopf 1 stehenbleibt. Satz 1. Jede NTM kann durch eine (deterministische) TM simuliert werden. Beweis. Sei M eine NTM, und sei r eine Zahl, so dass es für jedes Paar (q, s) aus Q (Σ {#}) höchstens r Übergänge (q, s) (q, s ) gibt. Dann können wir die Übergänge durchnummerieren: (q, s) (q i, s i) für i = 1, 2,..., r (Wiederholungen sind erlaubt). Die einzige Ausnahme ist δ(q, s) = (Haltekonfiguration). Wir simulieren M mit einer 4-Band-TM wie folgt: Band 1 ist das Eingabeband mit einem read-only Kopf. Auf Band 2 werden systematisch alle Zahlen k = 0, 1, 2, 3,...
94 90 KAPITEL 3. TURINGMASCHINEN geschrieben, sie geben die Länge der Berechnung vor. Auf Band 3 werden systematisch alle k-tupel aus Zahlen 1,..., r erzeugt (k = 1, 2, 3,... ). Auf Band 4 werden für jeden Eintrag i 1 i 2... i k von Band 3 die ersten k Takte der Maschine M simuliert, aber in jedem Takt wählen wir den Übergang, dessen Index auf Band 2 steht. Also wird im Takt n der Übergang (q, s) (q i n, s i n ) gewählt, wobei q der momentane Zustand ist und s das gerade gelesene Symbol. In einer Haltekonfiguration von M mit q = q F hält M und akzeptiert die Eingabe, andernfalls, also auch bei Haltekonfigurationen mit q /= q F wird k erhöht und die Simulation fortgesetzt. Es gibt also die folgenden Möglichkeiten für die Berechnung einer Eingabe w: 1. M hält auf w nach k Schritten für irgendeine Zahl k und akzeptiert w, d.h., es gibt eine akzeptierende Berechnung der Länge k von w. Dann hält auch M auf w und akzeptiert w (mit einem der r k möglichen Inhalte von Band 3); 2. M akzeptiert w nicht, d.h., alle von M bei Eingabe w erreichbaren Haltekonfigurationen haben einen von q F verschienedenen Zustand. Dann hält M nie, denn M schreibt immer länger werdende k-tupel (k = 1, 2, 3,... ) auf Band 2. Damit gehört w weder zu L(M) noch zu L(M). Es folgt, dass L(M) = L(M). sectentscheidrek defrekursivesprache sectbspaltdreidreieins bspaltdreidreieins 3.4 Rekursiv aufzählbare Sprachen Definition. Eine Sprache L heißt rekursiv aufzählbar oder semientscheidbar, falls es eine Turingmaschine M gibt, die L akzeptiert. Beispiel 1. Die folgenden Sprachen sind rekursiv aufzählbar, denn die oben konstruierten TM akzeptieren sie: 1. Die Sprache aller durch 5 teilbaren Zahlen (siehe Beispiel 1 in Abschnitt 3.1). 2. Die Sprache aller Primzahlen (siehe Beispiel 4 in Abschnitt 3.2.4). 3. Die Sprache {a n b n c n ; n 1} (siehe Beispiel 5 in Abschnitt und Satz 1 in Abschnitt 3.2.5). sectbspaltdreidreizwei bspaltdreidreizwei 4. Jede kontextfreie Sprache (siehe Beispiel 3 in Abschnitt 3.3). Beispiel 2. Eine Sprache L code, die nicht rekursiv aufzählbar ist. Es ist nicht möglich, ein natürliches Beispiel einer nicht rekursiv aufzählbaren Sprache zu finden, da alle natürlichen Beispiele durch irgendeinen Algorithmus beschrieben werden. Aber vorausgesetzt, dass wir eine Codierung für alle TM mit dem Bandalphabet {0, 1} haben (eine solche Codierung wird in Kapitel 5.1 ausführlich beschrieben), können wir eine konkrete Sprache, die nicht rekursiv aufzählbar ist, konstruieren. Wir nehmen also an, dass es für jede Turingmaschine M mit Bandalphabet {0, 1} ein Wort c(m) über {0, 1} gibt, sodass der Code c(m) die Sprache der Turingmaschine M vollständig beschreibt. Das heißt, dass für alle Turingmaschinen M und M gilt: c(m) = c(m ) L(M) = L(M ). Mit L code bezeichnen wir die Sprache aller Codewörter w = c(m) solcher Turingmaschinen M, die ihr eigenes Codewort nicht akzeptieren: L code = {w; w = c(m) für eine Turingmaschine M mit w L(M)}. Diese Sprache ist nicht rekursiv aufzählbar.
95 3.5. REKURSIVE SPRACHEN 91 tsatzllstrichrekursiv satzllstrichrekursiv Beweis. Die Annahme, dass es eine Turingmaschine ˆM mit L( ˆM) = L code gibt, führt zu einem Widerspruch. Für das Codewort ŵ = c( ˆM) dieser Maschine ˆM zeigen wir nämlich, dass (a) aus ŵ L code folgt ŵ L code und (b) aus ŵ L code folgt ŵ L code. Dann ist weder ŵ L code noch ŵ L code wahr. Zu (a): Da ŵ L( ˆM) und ŵ = c( ˆM), folgt aus der Definition von L code, dass ŵ L code. Zu (b): Da ŵ L code, gibt es M mit ŵ = c(m) und ŵ L(M). Aus c(m) = c( ˆM) folgt aber L(M) = L( ˆM); es gilt also ŵ L( ˆM) = L code. Satz 1. Falls L und L rekursiv aufzählbaren Sprachen sind, sind auch die Sprachen L L, L L, LL und L rekursiv aufzählbar. Beweis. Sei M eine TM, die L akzeptiert, und M eine TM, die L akzeptiert. Wir nehmen an, dass M und M auf jede Eingabe halten. (1) L + L. Diese Sprache wird von einer 2-Band TM akzeptiert, die auf Band 1 die Maschine M und gleichzeitig auf Band 2 die Maschine M simuliert. Falls beide Maschinen halten, ist der Zustand der neuen Maschine genau dann final, wenn einer der entsprechenden Zustände (von M oder M ) final ist. (2) L L. Der Beweis ist analog zu 1., nur ist ein Zustand genau dann final, wenn beide Zustände (von M sowie von M ) final sind. 3.5 Rekursive Sprachen Wie oben erwähnt, repräsentiert eine TM eine formale Darstellung des Begriffs eines Algorithmus, indem sie eine beliebige Eingabe berechnet (und entweder akzeptiert oder nicht). Die Frage ist, ob wir nur terminierende Algorithmen betrachten dürfen, oder ob wir auch Algorithmen erlauben, die unendlich lange berechnen. Im Berechnungsmodell der TM entsprechen den terminierenden Algorithmen die TM, die auf jede Eingabe halten. Das bedeutet, dass das Nichtakzeptieren immer dadurch erfolgt, dass die TM in einem nichtfinalen Zustand hält. Die allgemeineren, nicht terminierenden Algorithmen werden von allgemeinen TM repräsentiert. Probleme, die ein terminierender Algorithmus löst, heißen entscheidbar. Die entsprechenden formalen Sprachen werden entweder entscheidbar oder rekursiv genannt. Definition. Eine Sprache heißt rekursiv oder entscheidbar wenn sie von einer TM, die auf jede Eingabe hält, akzeptiert wird. Beispiel 1. Alle bisher konstruierten TM halten auf jede Eingabe. Deswegen sind alle obere rekursiv aufzählbaren Sprachen eigentlich rekursiv. Bemerkung 1. Um ein Beispiel einer Sprache, die zwar rekursiv aufzählbar aber nicht rekursiv zeigen zu können, werden wir erst die Eigenschaften von rekursiven Sprachen erforschen. Merken Sie, dass in Satz 1 von Abschnitt 3.4 (über Eigenschaften von rekursiv aufzählbaren Sprachen) nichts über Komplement L = Σ L behauptet wurde? Dies ist ein entscheidender Unterschied zu rekursiven Sprachen.: Satz 1. Wenn L und L rekursive Sprachen im Alphabet Σ sind, sind auch die Sprachen L L, L L, LL, L und L = Σ L rekursiv.
96 92 KAPITEL 3. TURINGMASCHINEN Beweis. (1) L L und L L : der Beweis ist gleich zu dem im Satz 1 von Abschnitt 3.4. (2) LL. Hier benutzen wir eine 4-Band-Turingmaschine M. Band 1 ist ein Eingabeband mit einem read-only-kopf. Auf Band 2 steht die Zahl i der Etappe (am Anfang i = 0). Auf Band 3 wird M simuliert, und auf Band 4 wird M simuliert. Jede Eingabe s 1... s n der Länge n wird in n + 1 Etappen berechnet. Die i-te Etappe besteht daraus, dass das Wort s 1... s i auf Band 3 und das Wort s i+1... s n auf Band 4 kopiert werden, und dann simuliert unsere TM die Maschine M auf Band 2 und die Maschine M auf Band 3, bis beide Maschinen M und M halten. Falls sie beide akzeptieren, hält auch M und akzeptiert. Falls M oder M nicht akzeptiert und i < n, wird die nächste Etappe mit i = i+1 durchgeführt. Falls M oder M nicht akzeptiert und i = n, hält M und akzeptiert nicht. (3) L. Dieser Beweis ist analog zu 3. Zunächst prüft M, ob das Eingabeband leer ist und akzeptiert gegebenenfalls. Ansonsten erzeugen wir auf Band 2, statt nur einer Zahl i allein, alle möglichen aufsteigenden Listen (i 0, i 1,..., i r ) von Zahlen mit 0 = i 0 < i 1 < i 2 < < i r = n wobei r = 1,..., n. Band 3 simuliert M: wir kopieren erst s 1 s 2... s i1 auf Band 3 und, falls die Simulation in einem finalen Zustand von M hält, s i1+1s i s i2 auf Band 3 und, falls die Simulation wieder in einem finalen Zustand hält, s i s i3 auf Band 3 usw. Falls alle Simulationen in finalen Zuständen von M halten, wird die Eingabe von M akzeptiert. Falls irgendeine der Simulationen in einem nichtfinalen Zustand hält, beginnt eine neue Etappe (mit der nächsten Liste auf Band 2). Wenn alle Listen auf Band 2 durchgegangen worden sind, ohne dass bis dahin M akzeptiert hat, hält M in einem nichtfinalen Zustand. (4) L: Gegeben sei eine TM, M, die L akzeptiert, bezeichnen wir durch M dieselbe TM, nur alle Zustände außer q F sind final und q F ist nicht-final. Wenn M ein Wort nicht akzeptiert, dann akzeptiert es M: hier ist wichtig, dass M auf die Eingabe hält! Dann hält sie in einem Zustand q q F der in M final ist. Es gibt also L( M) = Σ L(M). Bemerkung 2. Es ist erstaunlich, dass die Implikation L rekursiv L rekursiv die folgende Umkehrung hat: Satz 2. Wenn eine rekursiv aufzählbare Sprache L Σ auch rekursiv das aufzählbare Komplement L = Σ L besitzt, dann ist L rekursiv. Beweis. Gegeben sind TM M für die Sprache L und M für die Sprache L Wir konstruieren eine TM, M 1, die L akzeptiert und auf jede Eingabe hält: M 1 ist eine 2-Band TM, die auf Band 1 die Maschine M und auf Band 2 die Maschine M simuliert. Die Maschine M 1 rechnet so lange, bis auf Band 1 oder Band 2 die Berechnung hält. Wenn das passiert, dann (a) M 1 akzeptiert genau wenn M auf Band 1 akzeptiert (falls M hält) und
97 3.5. REKURSIVE SPRACHEN 93 (b) M 1 akzeptiert genau wenn M auf Band 2 nicht akzeptiert (falls M hält). Die einzige Frage ist: hält M 1 auf jede Eingabe w 2? Ja! Wenn w L, hält die Maschine M. Und wenn w L(= L( M)), dann hält die Maschine M. Bemerkung 3. Jede rekursive Sprache ist selbstverständlich rekursiv aufzählbar, und jede kontextfreie Sprache ist rekursiv, wie sofort bewiesen wird. REGULÄR KONTEXTFREI REKURSIV REKURSIV AUFZÄHLBAR ALLE SPRACHEN Beispiel 5 in Abschnitt zeigt, dass die Sprache L = {a n b n c n ; n 1} rekursiv (aber nicht kontextfrei) ist. Ein Beispiel einer Sprache, die rekursiv aufzählbar aber nicht rekursiv ist, wird in Kapitel 5 vorgeführt. Dort zeigen wir, dass ein solches Beispiel die Sprache L halt aller Wörter c(m)w ist, wobei M eine Turingmaschine und w ein Eingabewort ist, auf das die Turingmaschine M hält. (Das bedeutet, dass das Halteproblem nicht entscheidbar ist.)
98 94 KAPITEL 3. TURINGMASCHINEN
99 Kapitel 4 Church-Turing-These, rekursive Funktionen und Grammatiken 4.1 Berechenbare Funktionen Der berühmte Logiker Alfonzo Chruch, als er gesehen hat, dass sein am Anfang der 1930 er eingeführte λ-kalkül genau dieselbe berechenbare Funktion, definiert als die µ-rekursive Funktion hat einige Jahre vor Turings Paper über TM die These formuliert, dass der intuitive Begriff einer Funktion, die mechanisch berechnet werden kann, mit dem Begriff von µ-rekursiven Funktionen übereinstimmt. Später hat Turing, unabhängig von Chruch, seine These formuliert: die mechanisch berechenbare Funktionen sind genau die, die eine TM berechnen kann. Wie werden berechnen TM Funktionen berechnet? Wir beginnen mit zwei Beispielen. Beispiel 1. Die Funktion f(x) = 2x für x in binären Darstellung schreibt eine 0 am Ende des Wortes: (q 0, 0) (q 0, R) (q 0, 1) (q 0, R) (q 0, #) (q F, 0) Beispiel 2. Die Nachfolgegeschwindigkeit succ(x) = x + 1 kann in der binären Darstellung auch einfach als TM dargestellt werden. Noch einfacher ist sie im Alphabet Σ = { }. Hier ist Σ die unäre Darstellung von natürliche Zahlen: statt 0, 1, 2,... schreiben wir ε,, Die TM für succ ist deswegen wie folgt: (q 0, #) (q F, ) (q 0, ) (q 0, R) Bemerkung 1. Daraus, dass die Nachfolgefunktion durch eine TM berechenbar werden kann folgt, dass die Addition auch berechnet werden kann, denn Addition ist eine rekursive Anwendung von succ. Analog: Multiplikation kann durch eine TM berechnet werden, denn dies ist eine rekursive Anwendung von Addition. Um diese Überlegung zu präsentieren, werden wir die primitiv rekursiven Funktionen einführen und beweisen, dass sie durch eine TM berechenbar sind. Erst müssen wir aber erklären, wie Funktionen durch eine TM programmiert werden. 95
100 96KAPITEL 4. CHURCH-TURING-THESE, REKURSIVE FUNKTIONEN UND GRAMMATIKEN Definition. Wir sagen, dass eine TM eine partielle Funktion f von Σ nach Γ berechnet wenn das Bandalphabet die menge Σ Γ enthält und auf jede Eingabe w aus Σ Solche Funktionen heißen partiell-berechenbar. (a) M hält, wenn f(w) definiert ist, und auf dem Band steht f(w) und (b) M hält nicht, wenn f(w) nicht definiert ist Beispiel 3. Die partielle Funktion pred N N definiert durch pred(n) = n 1 für n 0 wird im Alphabet Σ = { } wie folgt berechnet: (q 0, #) (q 0, R) (q 0, ) (q F, #) In der Tat, für Eingabe 0 hält die TM nicht, denn sie geht stets nach rechts. Für Eingabe n =..., n 0, löscht sie ein und hält. Definition. Eine (überall definierte) Funktion heißt berechenbar oder rekursiv wenn sie durch eine TM, die auf jede Eingabe hält berechnet werden kann. Bemerkung Wie im Fall von Sprachenakzeptanz können wir auch für Funktionen den Begriff der TM modifizieren und zum Beispiel eine Mehrband- TM benutzen. Es ist dann üblich, Band 1 als Eingabeband und Band 2 als Ausgabeband (mit Inhalt f(w), nachdem die TM hält) zu verwenden. 2. Der Finalzustand spielt bei Berechnungen keine Rolle (und könnte, für diese Anwendung der TM, aus der Definition entfernt werden). sectbspaltdreifuenfdrei bspaltdreifuenfdrei sectbspaltdreifuenfvier bspaltdreifuenfvier 3. Für Funktionen zweier (oder mehrerer) Variablen werden die verschiedenen Variablen voneinander durch eine leere Zelle getrennt. Also zum Beispiel eine Funktion f(w 1, w 2 ) zweier Variabler aus Σ mit Werten in Γ wird von einer TM berechnet, falls die TM auf jede Eingabe w 1 #w 2 mit Bandinhalt f(w 1, w 2 ) hält. Beispiel 4. Addition. Wir wollen die Funktion f(n, m) = n + m (unär dargestellt) durch eine TM berechnen: es genügt, das erste Symbol zu streichen und die Lücke, die die zwei Variablen voneinander trennt, durch zu ersetzen: (q 0, ) (q 1, #) (q 0, #) (q F, R) (q 1, #) (q 2, R) (q 2, ) (q 2, R) (q 2, #) (q F, ) Genauer, die TM M = ({q 0, q 1, q 2, q F }, { }, δ, q 0, q F ) mit der oben definierten Übergangsfunktion δ berechnet die Addition in unärer Darstellung. Beispiel 5. Multiplikation. Die Funktion f(n, m) = n m (unär dargestellt) kann von der folgenden 2-Band-TM berechnet werden: Band 1 ist das Eingabeband, aus Band 2 schreibt die Maschine n-mal hintereinander die Zahl m, das heißt, m Symbole. Dann hält sie und hat auf Band 2 (Ausgabeband) die Zahl n m.
101 4.1. BERECHENBARE FUNKTIONEN 97 tbspaltdreifuenffuenf bspaltdreifuenffuenf tbspaltdreifuenfsechs Bemerkung 3. Wer der Churchschen These glaubt, erwartet, dass jede durch einen (terminierenden) Algorithmus gegebene, voll-definierte Funktion durch eine TM berechenbar sein muss: man implementiert einfach den Algorithmus auf einer TM. Beispiel 6. Division. Die Funktion n m (ganzzahlig) falls m 0 f(n, m) = { undefiniert falls m = 0 kann von der folgenden 2-Band-TM berechnet werden: Band 1 ist das Eingabeband, auf Band 2 schreibt die TM erst n und dann versucht sie, m Striche auf Band 2 wegzuwischen. Falls dies nicht möglich ist, hält sie. Falls es jedoch möglich ist, versucht die Maschine erneut, m Striche auf Band 2 zu löschen und so weiter. bspaltdreifuenfsechs Beispiel 7. Eine unberechenbare Funktion β N N. Diese Funktion, die als busy beaver (fleißiger Biber) bekannt ist, ist wie folgt definiert: β(0) = 0 und für jedes n > 0 ist β(n) = k, falls k die größte Zahl ist, die eine TM mit n Zuständen auf die leere Eingabe schreiben kann. D.h., die TM hält auf der leeren Eingabe mit k auf dem Band. Wir können β(n) einfach bestimmen, wenn wir alle TM mit n Zuständen durchgehen (und die, die auf die leere Eingabe nicht halten, ausschließen). (a) β(1): Die TM mit der einzigen Übergangsregel (q 0, #) (q 0, ) schreibt auf die leere Eingabe. Daraus folgt β(1) 1. Aber jede Maschine mit nur einem Zustand, die mehr als einen Strich auf die leere Eingabe schreibt, hält nie. Also gilt β(1) = 1. (b) β(2): Die folgende TM (q 0, #) (q 0, ) (q 0, ) (q 1, R) schreibt auf das leere Band. Umgekehrt, für jede (q 1, #) (q 1, ) TM mit zwei Zuständen darf δ nur auf drei Elementen der vierelementigen Menge Q Σ definiert sein, damit die Maschine hält. Daraus folgt sofort β(2) = 2. (c) Im allgemeinen gilt ( ) β(n + 2) > β(n) für jedes n. In der Tat, falls β(n) = k, d.h., falls eine Turingmaschine M mit n Zuständen k schreibt, konstruieren wir eine Turingmaschine, M, die n+2 Zustände hat und k+1 schreibt woraus β(n + 2) k + 1 > β(n) folgt. Wir fügen zwei neue Zustände q und q zu den Zuständen von M hinzu. Hält M im Zustand q auf einem Feld, so ergänzen wir M um drei neue Übergangsregeln: (q, ) (q, L) (q, ) (q, L) (q, #) (q, ). Hält dagegen M im Zustand q auf einem Feld #, so kann sich dieses Feld wegen der Maximalität von β(n) nur direkt neben dem Ergebnis k von M befinden. Wir können M nun um die Übergangsregel (q, #) (q, ) ergänzen. In jedem Fall hält die Maschine M im Zustand q, nachdem sie k+1 geschrieben hat.
102 98KAPITEL 4. CHURCH-TURING-THESE, REKURSIVE FUNKTIONEN UND GRAMMATIKEN sectsatzzufgibtesr satzzufgibtesr Satz 1. Für jede berechenbare Funktion f(n) gibt es eine Konstante r mit der Eigenschaft, dass β(n + r) f(n) für alle n. Beweis. f(n) wird von einer Turingmaschine M berechnet. Sei r die Zahl aller Zustände von M. Wir konstruieren für jede Zahl n eine Turingmaschine M n, die n + r Zustände hat und f(n) Striche auf die leere Eingabe schreibt damit ist β(n + r) f(n) bewiesen. Zu den Zuständen von M werden n neue Zustände q 0 (initial), q 1,..., q n 1 hinzugefügt, sodass M n auf die leere Eingabe n-mal einen schreibt und sich dabei nach links bewegt: (q i, #) (q i, ) für i = 0,..., n 1 (q i, ) (q i+1, L) für i = 0,..., n 2 (q n 1, ) (q 0, ) Der letzte Übergang bedeutet, dass von jetzt an die Maschine M (mit der Eingabe n ) simuliert wird sie schreibt also f(n) und hält. Folgerung 4. Die busy-beaver-funktion β(n) ist nicht berechenbar. Falls nämlich β(n) berechenbar wäre, müsste auch β(2n) berechenbar sein (wir hätten eine TM, die erst die Zahl aller e der Eingabe verdoppelt, siehe Beispiel?? und dann die TM für β(n) simuliert). Dann würde es eine Konstante r geben mit β(n + r) β(2n) für alle n. Speziell ergibt n = r + 2 β(2r + 2) β(2r + 4), ein Widerspruch zu (c) oben. 4.2 Primitive Rekursion sectdfbasisfunktion dfbasisfunktion Wir betrachten hier Funktionen mehrerer Variablen aus N die durch Rekursion und Verknüpfung aus sehr einfachen Basis -Funktionen konstruiert werden. Die Fakultätsfunktion definiert man z.b. rekursiv mit Multiplikation, die Multiplikation wiederum rekursiv mit Addition und die Addition rekursiv mit der Nachfolgerfunktion succ. Hier endet aber diese Kette: succ ist eine der Basisfunktionen. Wir arbeiten hier mit k-stelligen Funktionen natürlicher Zahlen, d.h. mit Funktionen f N k N, wobei N k = N N (k-mal), für k = 1, 2, 3,.... f hat also k Variablen im Bereich N. Die konstante Funktion K i mit Wert i gilt als 0-stellig, da sie von keiner Variablen abhängt. Nicht-konstante Funktionen sind k-stelllig für k 1. Besonders einfache k-stellige Funktionen sind die Projektionen π1 k,..., πk k : die Projektion πi k ordnet jedem k-tupel sein i-tes Element zu. Beispiel 1. π k i (n 1, n 2,..., n k ) = n i. Für k = 2 gibt es z.b. zwei Projektionen π 2 1(n, m) = n und π 2 2(n, m) = m. Für k = 1 ist π 1 1(n) = n die Identitätsfunktion. Definition. Die folgenden Funktionen heißen Basisfunktionen: 1. die Nachfolgerfunktion succ (mit succ(n) = n + 1) 2. die Nullfunktion K 0 (mit dem einzigen Wert 0) und 3. die Projektionen π k i für alle 1 i k, k = 1, 2, 3,....
103 4.2. PRIMITIVE REKURSION 99 ctbspaltvierfuenfeins bspaltvierfuenfeins ctbspaltvierfuenfzwei bspaltvierfuenfzwei ctbspaltvierfuenfdrei bspaltvierfuenfdrei Aus den Basisfunktionen können weitere Funktionen mit Hilfe der Verknüpfung definiert werden: Beispiel 2. Konstante Funktionen. Die konstante Funktion K 1 entspricht der Verknüpfung von K 0 mit succ: K 1 = succ(k 0 ). Analog K 2 = succ(k 1 ) = succ(succ(k 0 )) usw. Beispiel 3. Die Funktion f(n) = n + 2 für alle n N ist die Verknüpfung von succ mit sich selbst: f(n) = succ(succ(n)). Beispiel 4. Die Funktion g(n, m) = m + 2 (für alle n, m N) ist eine Verknüpfung der zweiten Projektion π 2 2(n, m) (die n wegfallen lässt) und der Funktion f aus Beispiel 3: g(n, m) = f(π 2 2(n, m)) = succ(succ(π 2 2(n, m)). Bemerkung 1. Im Allgemeinen definieren wir die Verknüpfung mehrstelliger Funktionen wie üblich: falls f N k N (k 1) eine k-stellige Funktion ist und g 1,..., g k N m N (m 0) k m-stellige Funktionen sind, ist die Verknüpfung von f mit g 1,..., g k die m-stellige Funktion h N m N, die durch h(n 1,..., n m ) = f(g 1 (n 1,..., n m ), g 2 (n 1,..., n m ),..., g k (n 1,..., n m )) für alle (n 1,..., n m ) auf N m definiert wird. Beispiel 5. Aus der Nachfolgefunktion succ lässt sich die Addition add N N N wie folgt rekursiv definieren: add(n, 0) = n add(n, succm))succ(add(n, m)) Dies ist im Beispiel von primitiver Rekursion: ctbspaltvierfuenfvier bspaltvierfuenfvier tbspaltvierfuenffuenf bspaltvierfuenffuenf Definition. Gegeben sei eine (k 1)-stellige Funktion g und eine (k + 1)-stellige Funktion h, definieren wir ihre primitive Rekursion als die k-stellige Funktion f wie folgt: f(n 1,..., n k 1, 0) = g(n 1,..., n k 1 ) und f(n 1,..., n k 1, m + 1) = h(n 1,..., n k 1, m, f(n 1,..., n k 1, m)). Beispiel 6. Addition. add(n, m) = n + m wird durch primitive Rekursion mit g(n) = n = π 1 1(n) und h(n, m, i) = succ i = succ(π 3 3(n, m, i)) definiert. In der Tat gilt add(n, 0) = g(n) add(n, m + 1) = h(n, m, add(n, m)). Beispiel 7. Die Multiplikation ist durch primitive Rekursion aus Addition definiert: n 0 = 0
104 100KAPITEL 4. CHURCH-TURING-THESE, REKURSIVE FUNKTIONEN UND GRAMMATIKEN sectdfprimitivrekursiv dfprimitivrekursiv sectbspaltvierfuenfsechs bspaltvierfuenfsechs sectbspaltvierfuenfacht bspaltvierfuenfacht rsivundturingberechenbar rsivundturingberechenbar n (m + 1) = (n m) + m. Genauer: für mul(n, m) = n m definieren wir g(n) = K 0 und h(n, m, i) = add(m, i) = add(π 3 2(n, m, i), π 3 3(n, m, i)). Dann gilt mul(n, 0) = g(n) mul(n, m + 1) = h(n, m, mul(n, m)). Definition. Eine Funktion heißt primitiv-rekursiv, falls sie durch endlich viele Anwendungen von Verknüpfung und primitiver Rekursion auf die Basisfunktionen definiert werden kann. Mit anderen Worten ist die kleinste Klasse von Funktionen, die alle Basisfunktionen enthält und unter Verknüpfung und primitiver Rekursion abgeschlossen ist, die Klasse aller primitiv-rekursiver Funktionen. Beispiele: K n, f(n) = n+2, g(n, m) = m+2, add(n, m) und mul(n, m) sind primitivrekursiv. Beispiel 8. Die Fakultätsfunktion m! ist primitiv-rekursiv, da sie mit der folgenden primitiven Rekursion definiert werden kann: 0! = 1 (m + 1)! = mul(m + 1, m!). Hier ist also g = K 1 und h(x, y) = mul(x + 1, y) = mul(succ(π 2 1(x, y), π 2 2(x, y)). Da g und h beide primitiv-rekursiv sind, ist auch m! primitiv-rekursiv. Beispiel 9. Die modifizierte Subtraktion n m = { n m falls n m 0 falls n < m ist primitiv-rekursiv: n 0 = n n (m + 1) = f(n m) für f aus Beispiel??. Hier gilt also g(n) = n und h(n, m, i) = f(π3(n, 3 m, i)) = f(i). Bemerkung 2. Die Klasse aller primitiv-rekursiven Funktionen ist so mächtig, dass es nicht einfach ist, ein Beispiel einer Funktion außerhalb dieser Klasse zu finden (siehe Beispiel 10). Deswegen ist der folgende Satz eine neue Bestätigung der Stärke von Turingmaschinen. Satz 1. Jede primitiv-rekursive Funktion ist Turing-berechenbar. Beweis. Es genügt, zu beweisen, dass gilt: 1. alle Basisfunktionen sind Turing-berechenbar, 2. die Verknüpfung Turing-berechenbarer Funktionen ist Turing-berechenbar, und 3. die primitive Rekursion, die mit zwei Turing-berechenbaren Funktionen arbeitet, ergibt eine Turing-berechenbare Funktion. Dann sind alle primitiv-rekursiven Funktionen Turing-berechenbar. (1) ist trivial und (2) auch: Die Verknüpfung f(g(n)) wird z.b. von einer 2-Band- TM berechnet, wobei Band 1 die Funktion g(n) berechnet und das Ergebnis als Eingabe der Funktion f auf Band 2 kopiert.
105 4.2. PRIMITIVE REKURSION 101 Wir wollen also (3) beweisen, d.h., dass es für die Funktion f mit f(n 1,..., n k, 0) = g(n 1,..., n k ) und f(n 1,..., n k, m + 1) = h(n 1,..., n k, m, f(n 1,..., n k, m)) eine TM gibt, falls M g und M h zwei TM sind, die g und h berechnen. Unsere TM hat fünf Bänder: Band 1 (Eingabeband) Band 2 (Schrittzähler) Band 3 (simuliert M g ) Band 4 (simuliert M h ) Band 5 (Ausgabeband) n 1 $ n 2 $... $ n k m FUNKTION g FUNKTION h ZWISCHENERGEBNIS j Die Berechnung von f erfolgt in Schritten Nr. m = 0, 1, 2,..., die auf Band 2 gezählt werden und die wie folgt ablaufen: Schritt 0: Band 2 enthält 0, auf Band 3 wird n 1,..., n k 1 (von Band 1) kopiert und g(n 1,..., n k 1 ) wird berechnet. Das Ergebnis wird auf Band 5 geschrieben. Schritt m + 1: Falls n k der Inhalt von Band 2 ist, hält die TM. (Band 5 enthält dann das Ergebnis.) Falls nicht, wird auf Band 4 die Eingabe n 1 $... $ n k $ m $ j geschrieben. j = f(n 1,..., n k 1, m) ist der Inhalt von Band 5, m der von Band 2. Jetzt wird h(n 1,..., n k, m, j) berechnet und das Ergebnis auf Band 5 geschrieben. Der Inhalt von Band 2 wird um eins erhöht. Folgerung 5. Die busy beaver Funktion β ist nicht primitiv rekursiv. tbspackermannfunktion Bemerkung 3. Nicht jede partiell berechenbare Funktion ist primitiv-rekursiv. In der Tat sind alle primitiv-rekursiven total (d.h. überall definiert), und es gibt partielle Turing-berechenbare Funktionen. Aber auch alle totalen berechenbaren Funktionen sind leider nicht primitiv-rekursiv. Das können wir abstrakt wie folgt zeigen: alle primitiv-rekursiven Funktionen können wir systematisch aufzählen, z.b. setzen wir f 0 = K 0, f 1 = succ, f 2 = π 1 1. Mit den gegebenen Funktionen f 0,..., f i machen wir alle möglichen Verknüpfungen und primitiven Rekursionen. Dabei entstehen f i+1,..., f j, dann ist f j+1 die nächste noch nicht eingenommene Projektion, usw. Diese Aufzählung kann bestimmt eine TM durchführen. Dann ist die Funktion P (n) = 1 + f n (n, n,..., n) Berechenbar. Aber P ist nicht primitiv-rekursiv: falls nämlich P = f n, haben wir P (n) = 1 + f n (n) f n (n) ein Widerspruch. Es ist Wilhelm Ackermann 1928 gelungen, ein viel konkreteres Beispiel einer Funktion anzugeben, die nicht primitiv-rekursiv ist, sich aber mit einem einfachen Algorithmus berechnen läßt. Die Funktion, die man heute Ackermann-Funktion nennt, ist eine von Rozsa Peter später entdeckte Vereinfachung der ursprünglichen Idee: bspackermannfunktion Beispiel 10. Die Ackermann-Funktion A N 2 N ist wie folgt definiert: A(0, m) = m + 1 A(n + 1, 0) = A(n, 1) und A(n + 1, m + 1) = A(n, A(n + 1, m)). Es gilt also
106 102KAPITEL 4. CHURCH-TURING-THESE, REKURSIVE FUNKTIONEN UND GRAMMATIKEN A(0, 0) = 1, A(0, 1) = 2, A(1, 0) = A(0, 1) = 2, A(0, 2) = 3, A(1, 1) = A(0, A(1, 0)) = A(0, 2) = 3, A(2, 0) = A(1, 1) = 3, usw. Wir erhalten einen Algorithmus, um jeden Wert A(n, m) zu berechnen: alle möglichen Paare (n, m) werden so aufgezählt, dass der Wert A(n, m) direkt aus den vorigen Werten berechnet wird. Beispiel 11. A(4, m) = mit m+2 Exponenten. So dass zum Beispiel A(4, 4) mehr als dezimale Ziffern braucht (und es gibt weniger als Atome im sichtbaren Teil des Universums). Die Formel für A(4, m) lässt sich einfach per Induktion beweisen, wobei man erst die folgenden Formeln beweist: A(2, m) = 2m + 3 A(1, m) = m + 2 A(3, m) = 2 m+3 3 All diese Beweise sind trivial. Satz 2. (Ohne Beweis.) Die Ackermann-Funktion ist nicht primitiv-rekursiv, denn A(n, n) wächst schneller als jede primitiv-rekursive Funktion f(n) (d.h., es gibt eine Konstante n 0 mit f(n) < A(n, n) für alle n n 0 ). Satz 3. Die Ackermann-Funktion ist berechenbar. Beweis. Gegeben seien n, m. Wir wollen A(n, n) durch eine TM berechnen. Die TM berechnet systematisch alle Werte von A und schreibt sie in der Form $$n 0 $m 0 $A(n 0, m 0 )$$ in einem Speicher: $$0$0$1$$0$i$2$$1$0$0$2$$... A(0, 0) A(0, 1) A(1, 0) A(0, 1) Bei jedem Schritt fragt sie, ob sie schon A(n, n) berechnet hat: Band 1 (Eingabeband) n m Band 2 (Ausgabe) Band 3 (Zähler) Band 4 (Zähler) Band 5 (Speicher) A(n, m) n 0 = 0, 1, 2... n 0 = 0, 1, 2... $$n 0 $m 0 $A(n 0, m 0 )$$ Am Anfang ist B2 leer, auf B3 und B4 steht 0 und dann fängt die Maschine mit den folgenden Schritten an: (a) Ist n 0 = n und m 0 = m? Wenn ja, schreibe A(n, m) aus B5 auf B2 und halte. (b) Wenn nein, berechne den nächsten Wert der Ackermann-Funktion: entweder setze n 0 = n 0 + 1, berechne A(n 0 + 1, m 0 ) und schreibe es auf B7, oder setze m 0 = m 0 + 1, berechne A(n 0, m 0 + 1) und schreibe es auf B7. GOTO (a). 4.3 µ-rekursive Funktionen Die Operationen Verknüpfung und primitive Rekursion sind nicht stark genug, um alle berechenbaren Funktionen zu generieren. Aber wenn der folgenden Operation µ hinzugefügt wird, genügen sie:
107 4.3. µ-rekursive FUNKTIONEN 103 Definition. Gegeben sei eine partielle Funktion f von k + 1 variablen, definieren wir ihre Minimierung µf als die folgende partielle Funktion von k Variablen: µf(n 1,..., n k )) = m wenn m die kleinste zahl ist, so dass f(n 1,..., n k, m) = 0. (Und wenn keine solche Zahl existiert, ist µf in den k-tupel nicht definiert). Notation. Wir schreiben auch µ m f um zu betonen, dass die Variable m minimiert wird. Beispiel 1. Die Vorgängerfunktion pred(n) hat die Form µ m f für f(n, m) = n m (undefiniert für n < m). Beispiel 2. Die Funktion 0 für n = 0 K 0 (n) = undefiniert sonst hat die Form K 0 (n) = µ m π 1 1(n, m). In der Tat, π 1 1(n, m) = 0 nur wenn n = 0 und das kleinste mögliche m ist m = 0. Beispiel 3. Für die Funktion der ganzzahligen Divison: n m div(n, m) undefiniert falls dividierbar sonst hätten wir die Tendenz zu schreiben div(n, m) = µ k (n m k). Denn das kleinste k mit n m k = 0 ist k = n. Aber dies ergibt 0 0 = 0. Deswegen m setzen wir f(n, m, k) = n succ(pred(m)) k Dann gilt div(n, m) = µ k f(n, m, k) Definition. Eine Funktion heißt rekursiv (oder µ-rekursiv), wenn sie durch die Basisfunktionen und endlich viele Anwendungen von 1. Verknüpfung, 2. primitiver Rekursion und 3. Minimierung µ definiert werden kann. Beispiel 4. (a) Alle primitiv-rekursive Funktionen sind µ-rekursiv (b) Die Funktion sub(n, m) = n m für n m ist µ-rekursiv: sie ensteht aus der Funktion K 0 in Beispiel 2 durch die folgende primitive Rekursion: sub(0, m) = K 0 (m) sub(n + 1, m) = succ(sub(n, m)). D.h., die Bestandteile der primitiven Rekursion sind g(m) = K 0 h(n, m, i) = succ(i) = succ(π 3 1) beide µ-rekursiv.
108 104KAPITEL 4. CHURCH-TURING-THESE, REKURSIVE FUNKTIONEN UND GRAMMATIKEN rsivundturingberechenbar rsivundturingberechenbar (c) Deswegen ist pred µ-rekursiv, siehe Beispiel 1. Und auch Division ist µ-rekursiv, siehe Beispiel 3. Satz 1. Jede µ-rekursive Funktion ist partiell berechenbar. Beweis. Es genügt zu den Punkten aus Satz 1 einen vierten Punkt hinzuzufügen: 4. Falls f partiell berechenbar ist, so ist es auch µf. ngberechenbarundrekursiv ngberechenbarundrekursiv Sei M eine TM, die f berechnet. Wir konstruieren eine 3-Band TM für µf wie folgt: n 1 $ n 2 $... $ n k Band 1 (Eingabeband) Band 2 (Schrittzähler) Band 3 (simuliert M) i FUNKTION f Am Anfang wird i = 0 auf Band 2 geschrieben, und dann wird auf Band 3 immer f(n 1,..., n k, i) berechnet. Falls das Ergebnis 0 ist, hält die TM, und Band 2 enthält die Ausgabe. Falls das Ergebnis nicht 0 ist, wird Band 2 um 1 erhöht (i = i + 1), und f(n 1,..., n k, i) wird erneut berechnet, usw. Satz 2. (Ohne Beweis) Jede partiell berechenbare Funktion ist µ-rekursiv. Bemerkung 1. Für die totalen berechenbaren Funktionen gibt es einen analogen Satz. Die einzige Differenz ist, dass der Minimierungsoperator µ nur eingeschränkt benutzt wird: Definition. Eine totale Funktion f von k + 1 Variablen heißt minimierbar wenn für jeden k-tupel n 1,..., n k es ein m gibt mit f(n 1,..., n k, m) = 0. Bemerkung 2. µ m f ist dann eine totale Funktion. Satz 3. (Ohne Beweis.) Eine totale Funktion (mehrerer Variablen aus N) ist berechenbar, genau dann, wenn sie aus den Basisfunktionen durch endlich viele Anwendungen von Verknüpfungen, primitive Rekursion und Minimierung von minimierbaren Funktionen definiert werden kann. Beispiel 5. Die Ackermann-Funktion ist µ-rekursiv (mit µ nur auf minimierbare Funktionen angewendet). 4.4 Grammatiken und Turingmaschinen sectdefgrammatik defgrammatik In Kapitel 2 sprachen wir von kontextfreien Grammatiken, die es erlauben, eine Variable durch ein Wort zu ersetzen. Das ist ein Spezialfall einer Grammatik (auch unbeschränkte Grammatik oder Grammatik des Typs 0 genannt), die es allgemein erlaubt, ein Wort durch ein anderes zu ersetzen. Es zeigt sich, dass diese Grammatiken genau die rekursiv aufzählbaren Sprachen definieren. In diesem Sinn erhalten wir also ein vollkommen neues Modell von Sprachen, die Turing-akzeptierbar sind. Definition. Eine Grammatik G ist ein Quadrupel G = (Σ, V, S, R), wobei Σ das Alphabet aller Terminalsymbole, V das Alphabet aller Variablen (zu Σ disjunkt), S V das Startsymbol und R eine endliche Menge an Paaren (α, β) von Wörtern über Σ V mit α ε ist.
109 4.4. GRAMMATIKEN UND TURINGMASCHINEN 105 DurchGErzeugteSprache DurchGErzeugteSprache Bemerkung 1. Elemente (α, β) aus R werden mit α β bezeichnet und werden Produktionen oder Ersetzungsregeln genannt. Die Anwendung einer Regel α β auf ein Wort w ist genau dann möglich, wenn w die Form w = w αw (w, w Wörter über Σ V ) hat. Das Ergebnis der Anwendung ist das Wort w βw. Notation. 1. Mit bezeichnen wir die Anwendung einer einzigen Regel; also schreiben wir für zwei Wörter u, w in (Σ V ) u v, falls es eine Regel α β in R und Wörter u 1, u 2 in (Σ V ) gibt, so dass u = u 1 αu 2 und v = u 1 βu Mit bezeichnen wir die reflexive und transitive Hülle der Relation. Definition. Für jede Grammatik G heißt die Menge aller Wörter über Σ, die vom Startsymbol ableitbar sind, die Sprache L(G) erzeugt durch G. Kürzer: L(G) = {w Σ ; S w}. ectbspaltvierdreizwei Alle oben definierten Begriffe verallgemeinern die in Kapitel 2 eingeführten Begriffe für kontextfreie Sprachen. Aber die allgemeinen Grammatiken erzeugen Sprachen, die nicht kontextfrei sein müssen: bspaltvierdreizwei Beispiel 1. Eine Grammatik für die (nicht kontextfreie) Sprache L = {a n b n c n ; n 1}. Sei G = ({a, b, c}, {B, C, S}, S, R) die Grammatik mit den Regeln (1) S abc asbc (2) CB BC (3) ab ab (4) bb bb (5) bc bc (6) cc cc Das Wort a n b n c n, n 1, liegt in L(G), da es sich wie folgt ableiten lässt: S a n 1 S(BC) n 1 [Regel S asbc, (n 1)-mal angewendet] a n (BC) n [Regel S abc] a n B n C n [Regel BC CB, (n 1)-mal angewendet] a n bb n 1 C n [Regel ab ab] a n b n C n [Regel bb bb, (n 1)-mal angewendet] a n b n cc n 1 [Regel bc bc] a n b n c n [Regel cc cc, (n 1)-mal angewendet] Umgekehrt beweisen wir, dass nur Wörter der Form a n b n c n ableitbar sind. In der Tat: falls w ein Wort ist, das von S ableitbar ist und keine Variable enthält, beweisen wir das folgende: 1. Die Anzahl von a s im Wort w ist dieselbe wie die von b s und dieselbe wie die von c s. In der Tat, die Regeln (2) - (6) ändern die Anzahl der Buchstaben a, b/b oder c/c nicht, und Regel (1) erhöht alle drei dieser Zahlen gleichzeitig um Alle a s stehen links im Wort w, das heißt, w hat die Form w = a n v (und v besteht aus n b s und n c s ). Keine der Regeln (1) - (6) ändert nämlich die linke Position von a.
110 106KAPITEL 4. CHURCH-TURING-THESE, REKURSIVE FUNKTIONEN UND GRAMMATIKEN 3. Das Wort w enthält nicht die Kombination cb (das heißt, w hat nicht die Form w = ucbv). Um das zu beweisen, betrachten wir die Regeln (3) - (6): diese ändern weder Anzahl noch Position der Buchstaben a, b/b oder c/c im Wort, sie wandeln nur B b oder C c um. Wir können daher annehmen, dass in der Ableitung S w zuerst nur die Regeln (1) und (2) benutzt werden, und dann erst werden die Regeln (3) - (6) angewendet. Genauer: es gibt eine Ableitung: S w 1 w 2 w i w k = w, wobei für S w i nur die Regeln (1) und (2) angewendet werden und für w i w k nur die Regeln (3) - (6). Dann unterscheiden sich die Wörter w i und w k nur dadurch, dass an der Stelle im Wort, an der b steht, w i den Buchstaben B hat und dasselbe gilt analog für c/c. Das Wort w i enthält die Kombination CB nicht, denn keine der Regeln (3) - (6) kann B in b umwandeln, falls vor diesem B entweder C oder c steht. Es folgt, dass das Wort w = w k die Kombination cb nicht enthält. 4. w = a n b n c n, denn in 2. haben wir ein Wort v mit n b s, n c s und ohne die Kombination cb das einzige Wort ist v = b n c n. Beispiel 2. Die Sprache aller Wörter über {a, b, c} mit der gleichen Anzahl von a s, b s und c s. Auch diese Sprache ist nicht kontextfrei (beweisen Sie es mithilfe des Pumping-Lemmas!). Hier ist eine Grammatik für diese Sprache: (a) Start. Hier darf das Startsymbol einfach verschwinden: S ABSC ε (b) Alle Variablen A, B, C sind untereinander kommutativ AB BA BA AB AC CA CA AC BC CB CB BC (c) Von Variablen zu Eingabesymbolen A a B b C c. Jedes Wort w mit Länge 3n und mit n a s, b s sowie c s lässt sich Ableiten: Wir verwenden erst (a) n 1-mal S ABSC ABABSCC... (AB) n SC n (AB) n C n Zunächst gestalten wir (AB) n C n zum Wort w um, außer dass die Buchstaben groß sind. Dies lässt sich durch Anwendung der Produktionen aus (b) leicht machen. Am Ende benutzen wir (c) um w zu erhalten. Um gekehrt, jedes Wort aus L(G) hat die gleiche Anzahl von a s, b s und c s. in der tat, wir beweisen das folgende: gegeben S w mit w über {a, b, c, A, B, C, S} ist die Anzahl von a, A gleich der von b, B und gleich der von c, C. Beweis per Induktion in der Länge k der Ableitung von w aus S: k = 0 Dann w = s: die drei Zahlen sind gleich 0. k + 1: Wir haben S w 1... w k w k+1 (= w). Nach Induktionsvoraussetzung hat w k dieselbe Anzahl (sagen wir v) von a, A und
111 4.4. GRAMMATIKEN UND TURINGMASCHINEN 107 ectbspaltvierdreidrei bspaltvierdreidrei b, B und c, C. Das Wort w k+1 entsteht aus w k indem eine der Produktionen oben angewendet wird. Wenn S ABSC angewendet wurde, hat w k genau i+1 der Symbole a, A sowie b, B und c, C. Alle anderen Produktionen haben die Eigenschaft, dass die Anzahl von a, A auf der rechten und linken Seite gleich ist. Dasselbe gilt für b, B und c, C. Deswegen hat auch w k+1 genau i Symbolen a, A sowie b, B und c, C. Beispiel 3. Simulation einer TM. Wir zeigen jetzt, wie die Arbeit einer TM vollständig von einer Grammatik simuliert werden kann. Erinnern wir uns an das Konzept von Konfigurationen (q, u, a, v) aus Kapitel 3.1:... a... u q v Die Konfigurationen werden jetzt statt (q, uav) durch das Wort [uqav] über Σ Q {[, ], #} bezeichnet. Also ist die Initialkonfiguration mit Eingabe s 1... s n das Wort [q 0 s 1... s n ]. Die Arbeit der TM wird durch die Relation ( Folgekonfiguration ) beschrieben. Wir konstruieren jetzt eine Grammatik G, in der für zwei Konfigurationen gilt: [uqav] [u q a v ] genau dann, wenn [u q a v ] [uqav]. (Also beschreibt die Ableitung in der Grammatik G die Berechnung rückwärts.) Wir benutzen die Bandsymbole Σ der TM als terminale Symbole und die folgenden Variablen: V = Q {S, #, [, ]}; wir setzen V Σ = wie üblich voraus. Also G = (Σ, V, S, R), und die Produktionen R entsprechen den Möglichkeiten von (siehe Tabelle 3.1 in Abschnitt 3.1): 1. Für jede Übergangsregel (q, s) (q, s ) der TM mit s in Σ {#} haben wir die Folgekonfigurationen [uqsv] [uq s v], und wir benötigen also die Produktion (in der Gegenrichtung) (1) q s qs. 2. Für jede Übergangsregel (q, s) (q, R) der TM haben wir die Folgekonfigurationen [uqsv] [usq v] falls v ε und [uqs] [usq #] falls v = ε. Wir benötigen dafür die Produktionen (2) sq qs (3) sq #] qs] 3. Für jede Übergangsregel (q, s) (q, L) brauchen wir die Produktionen (4) q s s s qs s Σ {#} (5) [q #s [qs Nehmen wir jetzt an, dass die TM ein Wort s 1... s n über Σ akzeptiert, und dass sie ihr Eingabeband löscht, bevor sie hält. Dann haben wir eine Berechnung, die mit der Initialkonfiguration [q 0 s 1... s n ] beginnt und mit der Finalkonfiguration [q F #] endet. Das heißt, aufgrund der Produktionen (1) - (5) gibt es eine Ableitung (in der Gegenrichtung!) [q F #]... [q 0 s 1... s n ].
112 108KAPITEL 4. CHURCH-TURING-THESE, REKURSIVE FUNKTIONEN UND GRAMMATIKEN sectsatztmdiebandloescht satztmdiebandloescht Wir fügen jetzt drei Produktionen hinzu, so dass wir dann vom Startsymbol S das Wort s 1... s n ableiten: (6) S [q F #] (7) [q 0 ε (8) ] ε Wir haben also die Grammatik G M = (Σ, V {#, [, ], S}, S, R) mit den Produktionen (1) - (8). Wir beweisen jetzt, dass sie die Sprache L(M) erzeugt. Satz 1. Falls M eine TM ist, die ihr Band immer löscht, bevor sie hält, dann gilt für die obige Grammatik G M, dass L(M) = L(G M ). Beweis. 1. Jedes Wort w = s 1... s n, das M akzeptiert, ist aus G M ableitbar, das heißt, L(M) L(G M ). In der Tat, für eine gegebene Berechnung, die in der Konfiguration [q 0 s 1... s n ] beginnt und in [q F #] endet, seien k 0 = [q 0 s 1... s n ] k 1... k M = [q F #] die Konfigurationen der Berechnung. Dann gilt S [q F #] k M 1 k M 2 k 1 [q 0 s 1... s n ] s 1... s n, wobei am Anfang die Produktion (6) und am Ende die Produktionen (7) und (8) verwendet wurden. Also gehört s 1... s n zu L(G M ). 2. Sei w = s 1... s n ein Wort, das von S ableitbar ist. Wir haben eine Ableitung der Form S [q F #] w 1 w 2... w M = s 1... s n. Wir dürfen annehmen, dass die Regeln (7) und (8) (die bestimmt angewendet wurden, da w 1 die beiden Klammern enthält, aber w M nicht) erst am Ende der Ableitung angewendet wurden, also w M 2 = [q 0 s 1... s n ]. Für die Ableitung w 1 w M 2 wurden nur die Regeln (1) - (6) angewendet. Es ist also hinreichend, zu zeigen, dass, falls für zwei Konfigurationen w und w, w w aufgrund von (1) - (6) gilt, dann folgt daraus w w. (a) Falls die Produktion (1) angewendet wurde, gilt w = [uq s v] und w = [uqsv], wobei qs q s eine Übergangsregel ist. Dann ist w eine Folgekonfiguration von w. (b) Falls die Produktion (2) angewendet wurde, gilt w = [usq v] und w = [uqsv]. Wieder ist w eine Folgekonfiguration von w. (c) Falls die Produktion (3) angewendet wurde, gilt w = [usq #] und w = [uqs], und auch diesmal ist w eine Folgekonfiguration von w. Analog mit den Produktionen (4) und (5). vaufzaehlbarundgrammatik vaufzaehlbarundgrammatik sectbspaltvierdreivier bspaltvierdreivier sectbspaltvierdreifuenf Also für w 1 = [q F #] und w M 2 = [q 0 s 1... s n ] folgt aus w 1 w M 2, dass w M 2 w 1. Das bedeutet, dass die TM auf die Eingabe s 1... s n hält und akzeptiert. Also gehört s 1... s n zu L(M). Korollar 1. Für jede rekursiv-aufzählbare Sprache L gibt es eine Grammatik, die L erzeugt. Beweis. Es gibt eine TM, die L akzeptiert. Sei M eine Modifikation dieser TM, die sich nur dadurch unterscheidet, dass M ihr Band löscht, bevor sie hält. Dann gilt L = L(M) = L(G M ).
113 4.4. GRAMMATIKEN UND TURINGMASCHINEN 109 bspaltvierdreifuenf ndrekursivaufzaehlbar ndrekursivaufzaehlbar Beispiel 4. Die folgende TM akzeptiert die Sprache aller ungeraden Zahlen (über Σ = { }): M = ({q 0, q 1, q 2 }, { }, δ, q 0, q F ) mit Übergängen (q 0, ) (q 1, #) (q 1, #) (q F, R) (q F, ) (q 2, #) (q 2, #) (q 0, R) Dieser TM entspricht die folgende Grammatik G M = ({ }, {q 0, q 1, q 2, #, [, ], S}, S, R) mit den Produktionen S [q F #] q 1 # q 0 #q F q 1 # #q F #] q 1 #] q 2 # q F #q 0 q 2 # #q 2 #] q 2 #] [q 0 ε ] ε Satz 2. Jede von einer Grammatik erzeugte Sprache ist rekursiv-aufzählbar. Beweis. Wir wollen zeigen, dass für jede Grammatik G die Sprache L(G) von einer TM akzeptiert werden kann. Wir benutzen eine nichtdeterministische 2-Band-TM, die alle Produktionen von G in einem zusätzlichen Gedächtnis hat. Band 1 ist ein read-only Eingabeband. Auf Band 2 schreibt die TM zu Beginn das Startsymbol S. In jedem Berechnungsschritt zerlegt die TM nichtdeterministisch das Wort w auf Band 2 in drei Wörter: w = upv u, p, v (Σ V ) mit p ε. Zum Beispiel ist am Anfang die einzige mögliche Zerlegung u = ε, p = S und v = ε. Jetzt wählt die TM nichtdeterministisch eine Produktion von G von der Form p q (falls keine solche Produktion existiert, hält die TM in einem nichtfinalen Zustand). Dann schreibt die TM das Wort w = uqv auf Band 2 und vergleicht Band 1 mit Band 2. Falls die Inhalte gleich sind, hält die TM und akzeptiert. Falls sie nicht gleich sind, wird der neue Berechnungsschritt (Zerlegung des Wortes w in drei Wörter usw.) gestartet. Es ist klar, dass die Eingabe auf Band 1, falls sie von S ableitbar ist, nach endlich vielen Berechnungsschritten (die der Ableitung der Eingabe aus S entsprechen) akzeptiert wird. Falls umgekehrt die Eingabe nicht zu L(G) gehört, ist jede mögliche Berechnung entweder unendlich oder hält und akzeptiert nicht.
114 110KAPITEL 4. CHURCH-TURING-THESE, REKURSIVE FUNKTIONEN UND GRAMMATIKEN
115 Kapitel 5 Unentscheidbare Probleme sectunivtm 5.1 Universelle Turingmaschine Wir konstruieren jetzt eine universelle (oder programmierbare ) TM, die bei Eingaben der Form (c, w) c Algorithmus, w Datei die Datei w entsprechend des Algorithmus c berechnet. Da wir Algorithmen als Turingmaschinen interpretieren, können wir genauer sagen: eine universelle Turingmaschine M u erhält als Eingabe ein Wort c(m)w, wobei c(m) eine passende Codierung der (beliebigen) Turingmaschine M und w ein (beliebiges) Eingabewort für M ist. Dann berechnet M u die Eingabe und liefert genau dasselbe Ergebnis, das die Maschine M auf Eingabe w liefert. Das können wir entweder in der Akzeptor-Variante interpretieren, also M u hält genau dann auf c(m)w, wenn M auf w hält, und dann akzeptiert M u genau dann, wenn M akzeptiert, oder in der Rechner-Variante, also M u führt für c(m)w zu der gleichen Ausgabe wie M für w. Es zeigt sich, dass die Maschine M u, die wir jetzt beschreiben, beide Rollen erfüllt. Wir beschränken uns auf TM mit dem binären Bandalphabet Σ = {0, 1}. Also hat die universelle Turingmaschine M u sowie alle simulierten Maschinen M dieses Eingabealphabet. Codierung c(m) von Turingmaschinen M: Für jede TM deren Zustände M = (Q, {0, 1}, δ, q 0, q 1 ) Q = {q 0, q 1,..., q n 1 } so durchnummeriert sind, dass q 0 der Initialzustand und q 1 der Finalzustand ist, definieren wir ein binäres Codewort c(m) wie folgt. Wir benutzen 0 i um die Zahl i zu codieren und 1 als Trennungssymbol. Das Wort c(m) hat die folgende Form: Am Anfang steht 0 n, das die Anzahl n aller Zustände bezeichnet. Dann werden die einzelnen t Übergangsregeln aus R 111
116 112 KAPITEL 5. UNENTSCHEIDBARE PROBLEME durch binäre Wörter w 1,..., w t codiert, wie später erklärt wird, und durch eine 1 voneinander getrennt. Am Ende schreiben wir 111. Der Code hat also die Form c(m) = 0 n 1w 1 1w w t 111. bsptmcode1 Um die Übergangsregeln zu codieren, schreiben wir für Zustände 10 i+1 statt q i und codieren die Symbole L, R, #, 0, 1 wie folgt Symbol L R # 0 1 Code Die Übergangsregel erhält also den Code die Übergangsregel den Code usw. (q i, 0) (q j, L) w = 10 i j+1 10, (q i, #) (q j, 0) w = 10 i j Beispiel 1. Wir codieren die Maschine M 1 mit Zuständen q 0, q 1 und Übergangsregeln wie folgt: (q 0, 1) (q 1, R) (q 1, #) (q 1, 1) c(m 1 ) = w 1 1w wobei w 1 der Code für (q 0, 1) (q 1, R) ist: w 1 = und w 2 der Code für (q 1, #) (q 1, 1) ist: Insgesamt ergibt sich w 2 = c(m 1 ) = Wir bemerken, dass einzelne Übergangsregeln voneinander durch 11 getrennt werden. Jede Turingmaschine wird durch ihren Code vollständig beschrieben. bsptmcode2 Beispiel 2. Falls eine Turingmaschine den Code c(m 2 ) = hat, muss es die Maschine M 2 = ({q 0, q 1, q 2 }, {0, 1}, δ, q 0, q 1 ) mit den Übergangsregeln (q 0, 1) (q 0, #) (q 0, #) (q 0, L) (q 1, 0) (q 2, R) sein.
117 5.1. UNIVERSELLE TURINGMASCHINE 113 Bemerkung 1. Erinnern wir uns an die in Kapitel 3 eingeführte Sprache L code = { c(m) M ist eine TM, die c(m) nicht akzeptiert }. Zum Beispiel das Wort c(m 1 ) in Beispiel 1 ist ein Codewort einer TM. Akzeptiert diese TM das Wort c(m 1 )? Der erste Buchstabe von c(m 1 ) ist 0 und da kein Übergang (q 0, 9)? definiert ist, hält die TM sofort. Da q 0 nicht final ist, akzeptiert das Wort c(m 1 ) nicht. Das heißt, c(m 1 ) L code. Wie in Abschnitt 3.4 bewiesen, ist die Sprache L code nicht rekursiv-aufzählbar. Das bedeutet, dass kein Algorithmus entscheiden kann, ob eine beliebige TM ihr eigenes Wort akzeptiert oder nicht. Universelle Turingmaschine M u Wir konstruieren jetzt eine universelle Turingmaschine M u. Also reagiert sie auf die Eingabe c(m)w, wobei M eine TM mit Eingabe aus {0, 1} und w ein Wort über {0, 1} ist, wie folgt: 1. M u hält genau dann, wenn M auf das Wort w hält, 2. M u akzeptiert genau dann, wenn M das Wort w akzeptiert 3. falls M gehalten hat, hat M u auf Band 1 dasselbe Ausgabewort wie M. Die Maschine M u wird als eine 3-Band TM beschrieben, aber wir wissen, dass das unwichtig ist, weil wir eine 1-Band TM konstruieren können, die M u simuliert. BAND 1 BAND 2 # # #... c(m) Enthält c(m) w BAND i + 1 Zustand q i Band 1 enthält am Anfang die Eingabe c(m)w. Das Ende des Wortes c(m) wird durch 111 gekennzeichnet und die Bänder 2 und 3 sind, wie üblich, leer. Zur Vorbereitung auf die Simulation führt M u die folgenden Schritte aus: 1. c(m) wird von Band 1 auf Band 2 kopiert und auf Band 1 gelöscht, 2. der Kopf von Band 1 wird auf das erste Symbol von w gestellt 3. Auf Band 3 wird 10 geschrieben (Zustand q 0 ), und der Kopf wird auf die 1 gestellt. BAND 1 # # #... c(m)
118 114 KAPITEL 5. UNENTSCHEIDBARE PROBLEME BAND 2 BAND c(m) # 1 0 # Dann wird M in rekursiven Schritten wie folgt simuliert (so dass das Band von M identisch mit dem Band 1 von M u ist und der Zustand von M gleich q i ist, wobei 0 i+1 auf Band 3 von M u steht): Simulation von M: Der Kopf von Band 1 liest s = #, 0 oder 1, also ein Symbol, das den Code 10 p hat, wobei p = 3 (#), p = 4 (0) oder p = 5 (1) gilt. Jetzt beginnt der Kopf auf Band 2 eine systematische Suche nach der Kombination 10 i+1 10 p, wobei i + 1 die Zahl der 0 en auf Band 3 ist. Falls die Kombination 10 i+1 10 p nicht gefunden wurde, hat die Maschine M keine Übergangsregel (q i, s)?, deshalb hält M. Also hält auch M u (wenn sie die rechte Gruppe 111 auf Band 2 erreicht hat, ohne die gesuchte Kombination zu finden). M u akzeptiert genau dann, wenn Band 3 den Inhalt 100 hat, d.h., genau dann, wenn M im Finalzustand q 1 gehalten hat. Falls die Kombination 10 i+1 10 p gefunden wurde, liest der Kopf auf Band 2 weiter bis zur nächsten Gruppe 11. Wir haben jetzt das Wort 10 i+1 10 p 10 j+1 10 r auf Band 2 und das bedeutet, dass eine Übergangsregel von M die folgende Form besitzt: (q i, s) (q j, s ) s hat den Code 10 r (r = 1,..., 5) Die Maschine M u ändert den Bandinhalt von Band 3 zu 10 j+1 und bewegt den Kopf auf Band 1 nach links oder rechts, falls r = 1 oder 2 ist, oder M u überschreibt s mit #(falls r = 3), 0 (r = 4) oder 1 (r = 5). Jetzt ist M u für den nächsten Simulationsschritt vorbereitet. Definition. Die Sprache L u = L(M u ) aller binären Wörter c(m)w wobei die TM, M, das Wort w akzeptiert, heißt die universale Sprache. Folgerung 6. L u ist rekursiv aufzählbar. Bemerkung Die obige Codierung kann auch auf nichtdeterministische Turingmaschinen mit dem Bandalphabet {0, 1} angewendet werden. 2. Es ist einfach zu entscheiden, ob ein binäres Wort v der Code einer (deterministischen oder nichtdeterministischen) TM ist. Die Codierungen sind nämlich alle von der Form TMcode1 (1) v = 0 n 1w 1 1w w t 111, wobei w 1,..., w t verschiedene Wörter der Form TMcode2 (2) 10 i+1 10 p 10 j+1 10 r mit i, j = 0,..., n 1, p = 3, 4, 5 und r = 1, 2, 3, 4, 5
119 5.2. DAS HALTEPROBLEM 115 sind. Umgekehrt ist jedes Wort v, das (1) und (2) erfüllt, der Code einer TM. Mit anderen Worten ist die Sprache aller Codierungen von allen nichtdeterministischen TM rekursiv. 3. Auch die Sprache aller Codierungen aller deterministischen TM ist rekursiv: hier muss der Algorithmus nur noch für alle Paare k, k = 1,..., t von Indizes mit w k = 10 i+1 10 p 10 j+1 10 r und überprüfen, ob j = j und r = r. w k = 10i p 10 j r secthalt 5.2 Das Halteproblem Gibt es einen Algorithmus, der für jedes Paar (Algorithmus c, Datei w) entscheidet, ob c auf die Datei w hält? Aus Abschnitt 5.1 wissen wir, dass es einen Algorithmus gibt, der auf die Eingabe (c, w) das Ergebnis von c auf die Datei w berechnet - das macht die universale Turingmaschine! Dennoch ist die Antwort auf die obige Frage, die als Halteproblem bekannt ist, negativ. Auch dann, wenn wir uns nur auf die Algorithmen beschränken, die von TM mit dem Bandalphabet {0, 1} repräsentiert werden, ist die Antwort negativ. Für diese Maschinen M haben wir die Codierung c(m) aus Abschnitt 5.1, und wir können das Halteproblem präziser formulieren: ist die Sprache L halt = { v v = c(m)w für ein binäres Wort w und eine Turingmaschine M, rekursiv? die auf Eingabe w hält } Wir beweisen, dass L halt nicht rekursiv (also das Halteproblem nicht entscheidbar) ist, sie aber rekursiv-aufzählbar ist. Daraus folgt, dass das Komplement L halt nicht rekursiv-aufzählbar ist. Das bedeutet, dass das Problem, ob ein Algorithmus c auf die Datei w nicht hält, nicht einmal mehr semi-entscheidbar ist. Bemerken wir, dass in jedem Wort v = c(m)w der Code c(m) eindeutig bestimmt ist (aufgrund der Trenngruppen 111 am Anfang und Ende von c(m)) und also auch w eindeutig bestimmt ist. Es gibt einen Algorithmus, der überprüft, ob u diese Form hat siehe Bemerkung in Abschnitt 5.1. Bemerkung 1. Viele (auch ungelöste!) mathematische Probleme kann man umformulieren zu Fragen, ob eine leicht konstruierbare TM auf eine Eingabe hält. Beispiel 1. Beispiel einer TM mit sehr interessantem Halteproblem. Es ist ziemlich trivial, eine 5-Band-TM zu konstruieren, die auf Band 2 systematisch alle Zahlen n = 3, 4, 5,... schreibt und für jede Zahl n auf die Bänder 3-5 systematisch alle Zahlen a, b, c 2 schreibt und dann auf Band 1 die Zahl a n + b n c n berechnet. Falls diese Zahl 0 ist, hält die TM. Falls nicht, berechnet die TM den nächsten Quadrupel (n, a, b, c). Die Entscheidung, ob diese Turingmaschine M auf die leere Eingabe hält, das heißt, ob c(m) L halt
120 116 KAPITEL 5. UNENTSCHEIDBARE PROBLEME gilt, ist bestimmt höchst kompliziert: dies ist äquivalent zum Beweis des berühmten Satzes von Fermat! Satz 1. Die Sprache L halt ist rekursiv-aufzählbar. Beweis. Die folgende Turingmaschine akzeptiert L halt : TURINGMASCHINE M 0 v EINGABE Hat v die Form v = c(m)w für eine TM M? JA Hält M u auf Eingabe v? JA v akzeptiert NEIN v nicht akzeptiert NEIN v nicht akzeptiert satzhalt Also überprüft M 0, ob die Eingabe die Form c(m)w hat (siehe Bemerkung in 5.1), und falls das der Fall ist, simuliert sie die universale Turingmaschine M u. Die Eingabe v wird genau dann von M 0 akzeptiert, wenn v = c(m)w und M u (akzeptierend oder nicht akzeptierend) auf die Eingabe v hält. Äquivalent dazu ist: genau dann, wenn M auf die Eingabe w hält. Kürzer: L(M 0 ) = L halt. Satz 2 (Unentscheidbarkeit des Halteproblems). Die Sprache L halt ist nicht rekursiv. Beweis. Die Annahme, dass L halt rekursiv ist, führt zu einem Widerspruch: es folgt, dass die Sprache L code = {w; w = c(m) für eine Turingmaschine M mit w L(M)} rekursiv-aufzählbar ist. Das ist aber falsch, siehe Beispiel 2 in Kapitel 3.4. Sei M halt eine TM, die L halt akzeptiert und auf jede Eingabe hält. Dann lässt sich in der Tat eine TM konstruieren, die die Sprache L code akzeptiert: TURINGMASCHINE M code w EINGABE Hat w die Form w = c(m) für eine TM M? JA Akzeptiert M halt Eingabe ww? JA Akzeptiert M u Eingabe ww? JA w nicht akzeptiert NEIN NEIN NEIN w nicht akzeptiert w akzeptiert w akzeptiert Das heißt, dass die Turingmaschine M code eine Eingabe w wie folgt berechnet: 1. M code überprüft, ob w = c(m) für eine Turingmaschine M gilt (siehe Bemerkung in 5.1). 2. Falls ja, wiederholt M code die Eingabe und schreibt also auf das Band. ww = c(m)w 3. Jetzt simuliert M code die Maschine M halt bis sie hält. (a) Falls M halt die Eingabe ww nicht akzeptiert, hält M code und akzeptiert w. In diesem Fall hält nämlich die Maschine M nicht auf die Eingabe w (denn c(m)w L halt ); also wird w von M nicht akzeptiert es folgt w L code.
121 5.3. EIN RECHNER ALS TURING-MASCHINE 117 (b) Falls M halt akzeptiert, simuliert M code die universale TM auf dieselbe Eingabe ww. Da c(m)w L halt gilt, hält M auf die Eingabe w, also hält die universale TM auf die Eingabe c(m)w. M code akzeptiert genau dann, wenn M u nicht akzeptiert. Die Turingmaschine M code hält auf jede Eingabe: der erste Schritt hält (denn die Sprache aller Codes ist rekursiv, siehe Bemerkung ), der zweite hält nach unserer Voraussetzung von M halt, und der letzte hält, denn M u erhält nur solche Eingaben ww, die von M halt akzeptiert werden, das heißt Eingaben c(m)w mit w = c(m), so dass M auf w hält (oder äquivalent: M u hält auf die Eingabe c(m)w = ww). Welche Eingaben w akzeptiert M code? Genau die der Form w = c(m), wobei entweder M auf w nicht hält, d.h., M halt akzeptiert die Eingabe c(m)w nicht, oder M auf w hält und nicht akzeptiert, d.h., M u akzeptiert die Eingabe c(m)w nicht. Also gilt: w L(M code ) genau dann, wenn w = c(m) und w L(M); oder kürzer: L(M code ) = L code, ein Widerspruch. Folgerung 7. Das Problem, ob eine TM nicht hält, ist nicht semi-entscheidbar. D.h., die Sprache L halt ist nicht rekursiv-aufzählbar. Beweis. Das folgt aus Satz 2 im Abschnitt 5.1: falls L halt und L halt rekursivaufzählbar wären, wäre L halt rekursiv. 5.3 Ein Rechner als Turing-Maschine Die universelle TM zeigt, dass TM programmierbar sind: wir können die Eingabe c(m)w der Maschine M u als ein Paar von Algorithmen und Datei w, die als c(m) dargestellt werden, verstehen. Ist aber klar, dass reelle Computer durchaus simuliert werden können? Ja, das wollen wir jetzt (informell, weil Computer ist nicht definiert...) zeigen. (a) Wir nehmen an, dass der Speicher des Computers aus einer Reihe w 0, w 1, w 2,... (potentiell unendlich) von Wörtern oder Bytes besteht, wobei w i die Adresse i hat. (b) In einigen Wörtern ist das Programm gespeichert. Jedes Wort repräsentiert eine einfache Anweisung entsprechend der Maschinensprache (oder der Assemblersprache). Wir erlauben indirekte Adressierung: Inhalt eines Wortes kann die Adresse sein, wo man die notwendige Datei findet. (c) Die Register, d.h., die Wörter mit besonders schnellem Zugriff, können als separate Bänder der TM genommen werden. Hier nehmen wir an, dass unser Rechner nur ein Register hat, den Akkumulator (in dem z.b. die Arithmetik durchgeführt wird). Nehmen wir die einfache Programmiersprache, die nur die folgende Anweisung hat:
122 118 KAPITEL 5. UNENTSCHEIDBARE PROBLEME LEAD i Kopiert W i in den Akkumulator ADD i Addiert W i + Akkumulator und speichert dies in dem Akkumulator JUMP i Sprung auf Adresse i READ i Lese i Bits der Eingabe WRITE Kopiert Akkumulator in die Ausgabe Die TM hat 7 Bänder: Band 1: Speicher Band 2: Band 3: Programmregister Band 4: Adressregister Band 5: Band 6: Band 7: $$0$W 0 $1$W 1 $10$W 2 $ Eingabe des Rechners (read only) 101 (Einweisung in W 5 durchgeführt) 111 (Einweisung hat Adresse 7) Akkumulator Name der Anweisung Ausgabe Anfang der Simulation Band 1 enthält w$$u wobei w Datei (Eingabe) und u Inhalt des Speichers ist. Auf Band 2 kopieren wir die Eingabedatei aus Band 1 und löschen sie dort, sodass Band 1 den Speicher des Rechners enthält. Simulation einer Anweisung aus w j schreibe Auf Band 3 lese j, suche $j$w j $ auf Band 1 und (a) den Namen der Anweisung (LOAD, ADD,...) auf Band 6 und die Adresse i auf Band 4. (b) erhöhe Band 3 um 1 (c) die Anweisung durchführen Z.B. falls LOAD i in w j steht, suche die TM $i$w i $ auf Band 1 und schreibt w i auf Band 5. Im Fall von WRITE i führt die TM die Addition von Band 5 und w i durch und schreibt das Ergebnis auf Band 5, usw.
123 Kapitel 6 Unentscheidbare Probleme Wir zeigen jetzt weitere Probleme, die nicht entscheidbar sind. Wir benutzen ständig die Codierung c(m) von (deterministischen und nichtdeterministischen) Turingmaschinen M aus Abschnitt 3.5. Auch alle Modifikationen von Turingmaschinen mit Bandalphabet {0, 1} aus Abschnitt 3.2 sind damit codiert. Falls M z.b. eine nichtdeterministische k-band TM ist, bezeichnen wir mit c(m) den Code einer 1-Band- TM, die M simuliert. Auch für jeden Kellerautomaten erhalten wir eine Codierung, in dem Sinne, dass wir ihn mit einer nichtdeterministischen 2-Band TM simulieren (Beispiel 3 in Kapitel 3.3) und den Code der TM verwenden. Wir werden eine TM, die auf jede Eingabe hält und die Sprache L akzeptiert, kurz Algorithmus für L nennen. subsectakzeptanz 6.1 Das Akzeptanzproblem Erinnern wir uns an den CYK-Algorithmus (Kapitel 2.9), der für jede kontextfreie Grammatik G mit Terminalsymbolen aus {0, 1} und jedes Wort w über {0, 1} entscheidet, ob w in L(G) liegt. Daraus folgt, dass das Akzeptanzproblem für Kellerautomaten entscheidbar ist; mit anderen Worten haben wir einen Algorithmus, der für jeden Kellerautomaten M und jedes Wort w entscheidet, ob M das Wort w akzeptiert. Oder kürzer: die Sprache L (K) acc = {u; u = c(m)w für einen Kellerautomaten M und ein Wort w aus L(M)} entscheidet, wie folgt kon- ist rekursiv. In der Tat kann ein Algorithmus, der L (K) acc struiert werden: 1. Wir überprüfen, ob die Eingabe u die Form u = c(m)w, wobei M ein Kellerautomat ist, hat vergleiche die Bemerkung in Für den gegebenen Kellerautomaten M konstruieren wir eine kontextfreie Grammatik G(M), die die Sprache L(M) erzeugt. 3. Der CYK-Algorithmus wird auf G(M) und w angewendet. Falls also M 0 eine TM ist, die diesen Algorithmus repräsentiert, gilt L (K) acc = L(M 0 ). Im Kontrast hierzu zeigen wir jetzt, dass das Akzeptanzproblem für Turingmaschinen, also die Frage, ob eine gegebene Turingmaschine ein gegebenes Eingabewort akzeptiert, unentscheidbar ist. Kürzer: die Sprache aller c(m)w wobei M das Wort w akzeptiert ist nicht rekursiv: 119
124 120 KAPITEL 6. UNENTSCHEIDBARE PROBLEME Definition. L acc ist die Sprache aller binären Wörter c(m)w für eine Turingmaschine M und ein Wort w aus L(M). Satz 1. Die Sprache L acc ist nicht rekursiv. Beweis. Wir merken erst an, dass es zu jeder Turingmaschine M eine Turingmaschine M gibt, die sich von M nur darin unterscheidet, dass finale und nichtfinale Zustände ausgetauscht werden. (Genauer: wenn wir in M die finalen und nichtfinalen Zustände austauschen, erhalten wir eine TM mit mehreren finalen Zuständen, und M ist eine TM, die M simuliert, siehe Abschnitt 3.2.1) Der Übergang von M zu M lässt sich offensichtlich durch einen (kleinen) Algorithmus implementieren. Das bedeutet, dass es eine Turingmaschine ˆM gibt, die auf die Eingabe c(m) die Ausgabe c(m) berechnet. Es gilt w L(M) genau dann, wenn M auf die Eingabe w hält und nicht akzeptiert. Wir beweisen jetzt, dass die Annahme, dass L acc rekursiv ist, zu einem Widerspruch führt: wenn L acc rekursiv wäre, würde folgen, dass L halt rekursiv ist. In der Tat: falls L acc von einer Turingmaschine M acc akzeptiert wird, die auf jede Eingabe hält, können wir die folgende Turingmaschine M halt konstruieren, die L halt akzeptiert und auf jede Eingabe hält: TURINGMASCHINE M halt u EINGABE Hat u die Form u = c(m)w für eine TM M? JA Akzeptiert M acc Eingabe c(m)w? NEIN c(m) wird von ˆM berechnet u nicht akzeptiert NEIN Akzeptiert M acc Eingabe c(m)w? NEIN JA u nicht akzeptiert u akzeptiert u akzeptiert JA Diese TM akzeptiert genau die Eingaben u = c(m)w, für die gilt, dass entweder M akzeptiert w (d.h., M acc akzeptiert c(m)w), oder M akzeptiert w (d.h., M acc akzeptiert c(m)w). Das heißt, genau die Eingaben c(m)w, für die M auf die Eingabe w hält. Kürzer: L(M halt ) = L halt. Darüber hinaus hält M halt auf jede Eingabe ein Widerspruch zu Satz 2 aus Kapitel 5.2. subsectakzeptanzeps 6.2 Akzeptanz des leeren Wortes Eine noch einfachere Frage ist, ob eine TM die leere Eingabe akzeptiert. Auch diese Frage ist aber unentscheidbar: Definition. L ε ist die SPrache aller binären Wörter c(m)w wobei M eine TM ist die ε akzeptiert Satz 1. Die Sprache L ε ist nicht rekursiv.
125 6.3. IST EINE TM EIN ALGORITHMUS? 121 Wir merken erst an, dass es für jede Turingmaschine M und jedes Wort w eine Turingmaschine M w gibt, die das leere Wort genauso berechnet wie M das Wort w. M w schreibt erst das Wort w = s 1... s n von links nach rechts auf ihr Band (mit Hilfe von n neuen Zuständen q 1,..., q n, wobei q n der Initialzustand von M w ist) und dann geht sie in den Initialzustand q 0 der Maschine M über und beginnt die Berechnung wie M. Das bedeutet, dass zu den Übergangsregeln von M die folgenden Regeln hinzugefügt werden: (q n, #) (q n, s n ) (q n, s n ) (q n 1, L) (q n 1, #) (q n 1, s n 1 ) (q n 1, s n 1 ) (q n 2, L) (q 1, #) (q 1, s 1 ) (q 1, s 1 ) (q 0, s 1 ) (Jetzt steht der Kopf im Zustand q 0 am Anfang des Wortes w = s 1... s n.) Offensichtlich kann der Übergang von (M, w) zu M w durch einen Algorithmus implementiert werden, d.h., es gibt eine Turingmaschine ˆM, die auf die Eingabe c(m)w die Ausgabe c(m w ) berechnet. Die Annahme, dass L ε rekursiv ist, führt zu einem Widerspruch: daraus würde folgen, dass L acc rekursiv ist. In der Tat haben wir, falls M ε ein Algorithmus für L ε ist, den folgenden Algorithmus für L acc : TURINGMASCHINE M acc u EINGABE Hat u die Form u = c(m)w für eine TM M? JA c(m w) wird von ˆM berechnet. Akzeptiert M ε Eingabe c(m w)? NEIN u nicht akzeptiert NEIN u nicht akzeptiert JA u akzeptiert Es ist klar, dass M ε die Eingabe u = c(m)w genau dann akzeptiert, wenn M w das leere Wort akzeptiert und das geschieht genau dann, wenn M das Wort w akzeptiert. Das heißt, genau dann, wenn die Eingabe u = c(m)w in L acc liegt. Kürzer: L(M acc ) = L acc. Außerdem hält M acc auf jede Eingabe ein Widerspruch zu Ist eine TM ein Algorithmus? Auch diese Frage, d.h., das Problem, ob eine gegebene TM auf jede Eingabe hält, ist unentscheidbar. Definition. L alg ist die Sprache aller binären Wörter c(m)w wobei M eine TM ist, die auf jede Eingabe hält Satz 1. Die Sprache L alg ist nicht rekursiv. Wir merken erst an, dass es für jede Turingmaschine M eine Turingmaschine M gibt, die jede Eingabe so berechnet wie M die Eingabe ε: M löscht erst das Band
126 122 KAPITEL 6. UNENTSCHEIDBARE PROBLEME und dann simuliert sie M. Offensichtlich kann der Übergang von M zu M durch einen Algorithmus durchgeführt werden. Die Annahme, dass L alg rekursiv ist, führt zu einem Widerspruch: daraus würde folgen, dass L ε rekursiv ist. In der Tat haben wir den folgenden Algorithmus für L ε, falls M alg ein Algorithmus für die Sprache L alg ist: TURINGMASCHINE M ε u EINGABE Hat u die Form u = c(m) für eine TM M? JA c(m ) wird von ˆM berechnet. Akzeptiert M alg Eingabe c(m )? JA u akzeptiert JA Akzeptiert M u die Eingabe c(m )? NEIN NEIN NEIN u nicht akzeptiert u nicht akzeptiert u nicht akzeptiert Die Maschine M ε hält auf jede Eingabe u: nur im letzten Schritt müssen wir aufpassen, ob M u auf die Eingabe c(m ) hält (äquivalent: ob M auf die Eingabe ε hält) das folgt daraus, dass M alg die Eingabe c(m ) akzeptiert. Und eine Eingabe u wird genau dann von M ε akzeptiert, wenn u = c(m) für eine Turingmaschine, für die gilt: M hält auf jede Eingabe und M akzeptiert ε. Das ist äquivalent dazu, dass M auf ε hält und akzeptiert. Also u L(M ε ) genau dann, wenn u = c(m) L ε. Das steht im Widerspruch zu Das Problem von hello world Programmen Es ist leicht, ein JAVA-Programm zu schreiben, welches auf jede Eingabe hello world ausgibt und hält. Ist es aber so leicht, diese Eigenschaft zu überprüfen? Wir wollen ein Programm P hallo schreiben, welches für gegebene Eingabedatei w und JAVA Programmcode P entscheidet, ob P mit Eingabe w hello world schreibt und hält. Ist dies möglich? Nein, so ein Programm kann man nicht schreiben. Oder, äquivalent dazu, die folgende Sprache ist nicht rekursiv: L hallo = {c(m)w; die TM M auf Eingabe w hält und hat ASCII-Code für hello world auf dem Band }. Satz 1. L hallo ist unentscheidbar. Beweis. Angenommen, dass L hallo entscheidbar ist, leiten wir einen Widerspruch her. Wir haben eine TM, M hallo, die auf jede Eingabe hält und akzeptiert g.d.w. die Eingabe c(m)w in L hallo ist. Wir modifizieren sie zu einer TM M hallo, die auf jede Eingabe w = c(m) funktioniert wie M hallo auf Eingabe ww. Aber wenn M hallo hält und akzeptiert, löscht M hallo das Band. Vorausgesetzt M hallo hält und akzeptierte nicht, schreibt M hallo hello world auf das Band. TURINGMASCHINE M hallo
127 6.5. SATZ VON RICE 123 EINGABE w ww M akzeptiert hallo Band löschen hello world am Band akzeptiert nicht Es gibt zwei Möglichkeiten für das Wort w = c(m hallo ), beide sind widersprüchlich: (a) Das Wort w w liegt in L hallo. Dann akzeptiert M hallo das Wort w w. Deswegen ist das Band von M hallo auf Eingabe w leer. Das aber bedeutet, dass M hallo akzeptiert c( M) w = w w nicht. (b) Das Wort w w liegt nicht in L hallo. Dann akzeptiert M hallo nicht diese Eingabe, deswegen schreibt M hallo auf Eingabe w hello world. Daras folgt, dass M hallo akzeptiert c( M hallo ) w = w w. 6.5 Satz von Rice Ist es entscheidbar, ob für eine Turingmaschine M die akzeptierte Sprache L(M) ist? regulär, kontextfrei, oder nichtleer Alle drei Antworten sind negativ. In der Tat gilt ein überraschend allgemeiner Satz in diesem Gebiet. Sei S eine beliebige Eigenschaft formaler Sprachen (z.b. regulär, kontextfrei, nicht leer, usw.) Wir fragen, ob es entscheidbar ist, dass eine TM eine Sprache mit der Eigenschaft S akzeptiert. Kürzer, ob die Sprache L S = {c(m); M ist eine TM und L(M) hat die Eigenschaft S} rekursiv ist. Das ist selbstverständlich der Fall, falls S trivial ist, d.h., entweder hat jede Sprache L(M) die Eigenschaft S, oder keine Sprache L(M) hat die Eigenschaft S. Die drei oben erwähnten Eigenschaften sind bestimmt nicht trivial. Der folgende Satz ergibt also die negativen Antworten: Satz 1 (Satz von Rice). Für jede nichttriviale Eigenschaft S von Sprachen ist es unentscheidbar, ob für eine Turingmaschine M die Sprache L(M) die Eigenschaft S hat. Kürzer: die Sprache L S ist nicht rekursiv. Beweis. 1. Nehmen wir erst an, dass die leere Sprache die Eigenschaft S nicht hat. Da S nicht trivial ist, gibt es eine Turingmaschine M 0, so dass gilt L(M 0 ) hat die Eigenschaft S. Für jede Turingmaschine M und jedes Wort w konstruieren wir die folgende Turingmaschine M w :
128 124 KAPITEL 6. UNENTSCHEIDBARE PROBLEME TURINGMASCHINE M w u EINGABE Akzeptiert M 0 die Eingabe u? JA Akzeptiert M die Eingabe w? JA u akzeptiert NEIN u nicht akzeptiert NEIN u nicht akzeptiert Es gilt L(M w L(M 0 ) ) = falls M die Eingabe w akzeptiert falls M die Eingabe w nicht akzeptiert Der Übergang von (M, w) zu M w kann offensichtlich durch einen Algorithmus implementiert werden. Es gibt also eine Turingmaschine ˆM, die auf die Eingabe c(m)w die Ausgabe c(m w ) berechnet. Die Annahme, dass L S rekursiv ist, führt zu einem Widerspruch: es würde folgen, dass L acc (6.1) rekursiv ist. In der Tat erhalten wir, falls M S ein Algorithmus für die Sprache L S ist, den folgenden Algorithmus für L acc : TURINGMASCHINE M acc u EINGABE Hat u die Form u = c(m)w für eine TM M? JA c(m w ) wird von ˆM berechnet. u nicht akzeptiert NEIN Akzeptiert M S Eingabe c(m w )? NEIN u nicht akzeptiert JA u nicht akzeptiert In der Tat akzeptiert M acc genau die Wörter c(m)w, für die M S die Eingabe c(m w ) akzeptiert, d.h., für die die Sprache L(M w ) die Eigenschaft S hat. Es gilt: L(M w ) hat die Eigenschaft S M akzeptiert w, denn für L(M w ) haben wir nur zwei Möglichkeiten: L(M w ) = L(M 0 ) und L(M 0 ) hat die Eigenschaft S, oder L(M w ) =, und hat die Eigenschaft S nicht. Also: M acc akzeptiert genau die Wörter c(m)w, die in L acc liegen. Da M acc auf jede Eingabe hält, bekommen wir einen Widerspruch zu Nehmen wir an, dass die leere Sprache die Eigenschaft S hat. Sei S die komplementäre Eigenschaft (das heißt, die Negation von S), die genau die Sprachen haben, die die Eigenschaft S nicht haben. Speziell hat also nicht die Eigenschaft S, und S ist sicher nichttrivial. Aus (1) folgt, dass L S nicht rekursiv ist. Daraus folgt, dass die Sprache L S (aller Wörter, die nicht in L S liegen) nicht rekursiv ist, denn L S ist der Durchschnitt von L S und der Sprache aller Codes {c(m); M eine TM}. Die letztere Sprache ist rekursiv, siehe Bemerkung in 5.1 Falls also auch L S rekursiv wäre, müsste L S rekursiv sein. Aus Satz??? folgt, dass L S nicht rekursiv ist.
129 6.6. MINIMIERUNG VON TURINGMASCHINEN Minimierung von Turingmaschinen Wir zeigen, dass es im Gegensatz zu endlichen Automaten keinen Minimierungsalgorithmus für Turingmaschinen gibt. Für jede TM (die, wie oben, das Bandalphabet {0, 1} hat) bezeichnen wir mit f M die partielle Funktion, die M wie folgt berechnet: falls M die Eingabe n (binär) hat, und falls M hält, ist f M (n) die Zahl, die auf dem Band steht, wenn alle Blanksymbole und eventuell am Anfang stehende Nullen ignoriert werden. Ein Minimierungsalgorithmus für Turingmaschinen ist ein Algorithmus A, der jeder Turingmaschine M eine Turingmaschine A(M) mit der minimalen Anzahl von Zuständen zuordnet, die dieselbe Funktion berechnet, f M (n) = f A(M) (n) für alle n. Beispiel 1. Für jede Turingmaschine M, die die Identitätsfunktion berechnet, d.h., f M (n) = n für alle n N erfüllt, hat die Turingmaschine A(M) nur einen Zustand. Denn die Identitätsfunktion kann von einer TM mit einem einzigen Zustand und keiner Übergangsregel realisiert werden. Satz 1. Es gibt keinen Minimierungsalgorithmus für Turingmaschinen. Beweis. Wir merken erst an, dass es für jede Turingmaschine M und jedes Wort w möglich ist, die folgende Turingmaschine M (w) zu konstruieren TURINGMASCHINE M (w) n (binär) EINGABE Hält M auf die Eingabe w in höchstens n Schritten? JA M (w) schreibt Ausgabe 0 NEIN M (w) lässt n ausgeben Also simuliert M (w) die Turingmaschine M auf die Eingabe w für k n Schritte, bis M hält, und dann schreibt M (w) die Ausgabe 0; falls M in n Schritten nicht hält, schreibt M (w) die Ausgabe n. Der Übergang von M und w zu M (w) kann offensichtlich von einer Turingmaschine ˆM durchgeführt werden ( ˆM ist eine einfache Modifikation der universalen TM). Also ist ˆM eine TM, die auf die Eingabe c(m)w die Ausgabe c(m (w) ) liefert. Es gilt: f M(w) (n) = n, falls M auf Eingabe w nicht hält, d.h., die Machine M (w) berechnet die Identitätsfunktion. Also gilt für jeden Minimierungsalgorithmus A, A(M (w) ) hat 1 Zustand, falls M auf w nicht hält. Umgekehrt gilt: falls M auf Eingabe w hält, ist f M(w) Es gilt also: nicht die Identitätsfunktion. M hält nicht auf Eingabe w A(M (w) ) berechnet die Identitätsfunktion. Die Annahme, dass es einen Minimierungsalgorithmus A gibt, führt zu einem Widerspruch: es folgt, dass die Sprache L halt rekursiv-aufzählbar ist (siehe Korollar in 5.2). In der Tat akzeptiert die folgende Turingmaschine M die Sprache L halt :
130 126 KAPITEL 6. UNENTSCHEIDBARE PROBLEME TURINGMASCHINE M u EINGABE Hat u die Form u = c(m)w für eine TM M? JA c(m (w) ) wird von ˆM berechnet. M (w) wird von A minimiert. NEIN u nicht akzeptiert Hat A(M (w) ) nur einen Zustand? JA Berechnet A(M (w) ) die Identitätsfunktion? JA u akzeptiert NEIN u nicht akzeptiert NEIN u nicht akzeptiert (Die letzte Entscheidung, ob eine TM mit nur einem Zustand die Identitätsfunktion berechnet, lässt sich bestimmt mit einem kleinen Algorithmus durchführen.) Die Maschine M hält auf jede Eingabe und akzeptiert alle Wörter u = c(m)w, wobei M (w) die Identitätsfunktion berechnet. Da f M(w) genau dann die Identitätsfunktion ist, wenn M auf die Eingabe w nicht hält, gilt M akzeptiert c(m)w M hält nicht auf w. Kürzer: L(M ) = L halt, ein Widerspruch.
131 Kapitel 7 Komplexität von Algorithmen Bisher haben wir uns die Frage gestellt, ob ein Problem entscheidbar (d.h. mit Hilfe eines Algorithmus lösbar) ist. Jetzt wollen wir auch die Effizienz von Algorithmen diskutieren. Es gibt wichtige Aufgaben, wie z.b. jeden Graphen mit der kleinstmöglichen Zahl an Farben zu färben (ohne dass eine Kante gleichfarbige Knoten verbindet), für die es zwar Algorithmen gibt, aber kein effizienter Algorithmus bekannt ist. Wir führen zuerst die Klasse P aller Probleme ein, die effizient lösbar sind; z.b. das Problem, jeden Graphen, für den es möglich ist, mit zwei Farben zu färben. Effizient bedeutet: in polynomialer Zeit durchführbar. Genauer: ein Problem gehört der Klasse P an, falls es mit einem Algorithmus lösbar ist, für den es ein Polynom p(m) gibt, so dass für jede Eingabe der Größe m die Lösung in p(m) Zeiteinheiten gefunden werden kann. Es zeigt sich, dass die Klasse P nicht von dem Modell der Berechnung abhängt: es kann eine Turingmaschine, eine RAM oder eine moderne Workstation sein. (Natürlich wird für diese drei Modelle das ausgewählte Polynom p(n) ganz verschieden sein, d.h., der Grad der Effizienz hängt sehr von der konkreten Implementierung ab. Aber die prinzipielle Möglichkeit, die Zeit durch ein Polynom zu beschränken, ist implementierungsunabhängig.) Danach wird die Klasse N P aller Probleme eingeführt, für die wenigstens die Überprüfung, ob eine gegebene Datei das Problem löst, effizient ist. Z.B. das Problem, jeden Graphen, für den es möglich ist, mit drei Farben zu färben: es ist kein effizienter Algorithmus bekannt, aber die Überprüfung, ob eine vorgeschlagene Färbung wirklich drei Farben benutzt und keine Kante zwischen gleichfarbigen Knoten ergibt, ist effizient. Leider ist es bis heute nicht bekannt, ob P = N P. Aber es sind viele Probleme bekannt, die N P-vollständig sind - für diese gilt: wäre eines dieser Probleme effizient lösbar, wären es alle anderen auch, denn dann folgt P = N P. Das erwähnte Problem der Dreifärbung von Graphen ist, wie wir beweisen werden, N P- vollständig. Es scheint sehr unwahrscheinlich, dass dieses Problem effizient lösbar ist, aber falls ja, würde daraus folgen, dass viele andere wichtige Probleme (z.b. Traveling Salesman Problem) effizient lösbar wären. Dieses Kapitel hat, wie die vorigen, theoretischen Charakter; z.b. benutzt die Klasse P beliebige Polynome zur Zeiteinschränkung und das ist nicht realistisch, falls das Polynom einen zu großen Exponenten hat. Dennoch hat Komplexitätstheorie wichtige praktische Aspekte. Stellen Sie sich vor, dass Ihr Chef Sie damit beauftragt hat, ein Programm zu schreiben, das überprüft, ob eine vorgeschlagene Produktspe- 127
132 128 KAPITEL 7. KOMPLEXITÄT VON ALGORITHMEN zifikation realisierbar ist. Trotz einigen Wochen intensiven Versuchens ist es Ihnen nicht gelungen, das Programm zu schreiben. Was jetzt? Wenn Sie die Produktspezifikation analysieren und feststellen, dass sie sehr allgemein formuliert ist, liegt es vielleicht an der Allgemeinheit und nicht an Ihrer Unfähigkeit. Es wäre z.b. toll, wenn Sie zeigen können, dass das von Ihnen verlangte Programm eigentlich auch das Halteproblem lösen könnte dann können Sie Ihrem Chef beweisen, dass er unlösbare Aufgaben erteilt. Das ist aber leider nicht sehr wahrscheinlich, denn das Halteproblem ist doch sehr allgemein. Also versuchen Sie zu zeigen, dass Ihr Programm eines von den hunderten N P-vollständiger Problemen lösen würde das zeigt nicht, dass die Aufgabe prinzipiell nicht effektiv implementierbar wäre, aber dass es schon einer Schar ausgezeichneter Programmierer nicht gelungen ist, einen effizienten Algorithmus zu entwickeln. sect-eff-alg 7.1 Beispiele effizienter Algorithmen In diesem Abschnitt illustrieren wir eine genaue Analyse der Effizienz von Algorithmen an einigen wichtigen Beispielen von Graphen-Algorithmen. Ein gerichteter Graph G = (V, E), wobei V die Menge aller (n) Knoten und E die Menge aller Kanten (d.h. geordneten Paaren von Knoten) ist, wird gewöhnlich durch seine n n-adjazenzmatrix (a ij ) repräsentiert, wobei 1 falls (i, j) eine Kante in E ist a ij = 0 sonst Oder durch Adjazenzlisten, d.h., durch n lineare Listen, wobei die i-te Liste alle Knoten j mit (i, j) E enthält und die heads (Listenköpfe) in einem Array gespeichert werden. Beispiel: für den gerichteten Graphen haben wir die Adjazenzmatrix der Gesamtgröße m = n und die Adjazenzlisten der Gesamtgröße m = n + k
133 7.1. BEISPIELE EFFIZIENTER ALGORITHMEN Beispiel 1. REACHABILITY. Gegeben einen Graphen mit Knoten 1,..., n wollen wir einen gerichteten Pfad von 1 nach n konstruieren. Die Entscheidung, die wir treffen wollen, ist: gibt es einen? Ein effizienter Algorithmus bildet eine Menge S von Knoten und markiert die Knoten die in S sind oder waren. Am Anfang S = {1} und nur 1 ist markiert. Im rekursiven Schritt wähle i S, entferne i aus S, und nehme alle Nachbarknoten j, die nicht markiert sind: j wird zu S hinzugefügt und markiert. Wenn S = antworte JA, g.d.w. n markiert wurde. Dieser Algorithmusist korrekt, denn jeder markierte Knoten i hat einen Pfad von 1 zu 1, während die unmarkierten keinen Pfad besitzen? Die Wahl von i in S bestimmt die Implementierung. Z.B. wenn i immer als der Knoten gewählt wird, der in S am längsten ist (Breitensuche) konstruieren wir den kürzesten Pfad. Wie viel Zeit braucht der Algorithmus? Wenn der Graph als Adjazenzlisten dargestellt wird, brauchen wir bei n Knoten und k Kanten nur O(k) Schritte (vorausgesetzt mengentheoretische Operationen, z.b. S = S {j}, nur konstante Zeit brauchen). Denn jede Kante wir höchstens einmal durchsucht. Wenn der Graph als Adjazenzmatrix dargestellt wird (n n binäre Matrix der Nachbarschaftsrelationen) brauchen wir O(n 2 ) Schritte. Jedenfalls, unabhängig von Implementierung, brauchen wir polynomiale Zeit, d.h., Zeit O(p(n)), p(n) ein Polynom in n N für Bearbeitung von Graphen der Größe n (wobei wir die Größe einfach als die Zahl der Knoten definieren können im Falle von O(k) oben ist jedenfalls k n 2 ). Beispiel 2. MAXFLOW. Es wird wieder ein Graph und zwei Knoten 1, n gegeben. Wir nehmen an, dass es keine Kante x 1 oder n x gibt. Ein Fluss ist eine Liste von Pfaden von 1 zu n, die paarweise keine gemeinsamen Kanten haben:
134 130 KAPITEL 7. KOMPLEXITÄT VON ALGORITHMEN Im oberen Beispiel haben wir einen Fluss von 2 Pfaden (links) und einen von 3 Pfaden (rechts) gezeigt. Die Frage ist: wie konstruieren wir den maximalen Fluss? Ein berühmter Algorithmus dafür benutzt den Begriff eines erweiternden Grades für einen gegebenen Fluss f. Dies ist eine Liste von Knoten so dass für jedes i 1 = v 0, v 1,..., v k = n entweder (v i, v i+1 ) eine Kante des Graphen die frei ist (auf keinem Pfad von f), oder (v i+1, v i ) eine Kante des Graphen, die unfrei ist, ist. Z.B. für den Fluss oben links ist der Pfad 1, 3, 5, 2, 7, 6, 8 erweiternd. Es ist leicht einzusehen, dass der gegebene Fluss f wie folgt verbessert werden kann: für jede Kante (v i, v i+1 ) die frei ist, füge sie zum Fluss hinzu und entferne alle Kanten des Flusses, die im umgekehrter Richtung auf dem Pfad liegen, aus dem Fluss. Und so gilt Satz 1. (ohne Beweis) Ein Fluss ist maximal g.d.w. er keinen Pfad besitzt. Daraus erfolgt ein effizienter Algorithmus für MAXFLOW: starte mit dem leeren Fluss (0 Pfaden). Gegeben einen Fluss f, mache eine systematische Suche nach einem erweiterten Pfad: dies ist REACHABILITY angewendet auf den Graphen, in dem alle unfreien Kanten umgekehrt werden. Wenn keiner gefunden, halte. Beispiel 3. BIPARTITE MATCHING. In diesem Problem suchen wir, gegeben eine Liste von Knaben K, Mädchen M, und potentielle Paare R K M die sich bilden lassen, ein matching, d.h., eine Liste von Paaren in R in der jeder Knabe und jedes Mädchen genau einmal vorkommt. Wir fragen uns: gibt es ein matching? Hier kommt ein wichtiger Begriff der Algorithmen-theorie: Reproduktion. Wir haben einen effizienten Algorithmus für BIPARTITE MATCHING indem wir dies auf MAXFLOW reduzieren: Sei G ein Graph mit Knoten K M {1, n} und Kanten 1 x für alle x K, y n für alle y M und x y für alle (x, y) R. Dann bekommen wir eine Eingabe für MAXFLOW. Falls die Größe des maximalen Flusses gleich der Anzahl der Knaben sowie der Anzahl der Mädchen ist, ist die Antwort JA. Sonst NEIN. Bemerkung 1. Bis jetzt haben wir uns nur mit Zeiteffizienz befasst: wie viele Schritte braucht der Algorithmus (im schlimmsten Fall)? Eine andere Sicht ist die des Speichers: wie viel Platz braucht der Algorithmus? Klar ist, dass polynomiale Zeit polynomialen Speicherbedarf mit sich bringt: in einer Zeiteinheit schreiben wir nur konstante Anzahl von Symbolen, aber nicht umgekehrt! Beispiel 4. TSP, travelling salesman problem. Gegeben n Städte und die Zeit d ij, die die Reise von i nach j verlangt, sollen wir die kürzeste Route berechnen. DIes kann definiert werden als die zyklische Permutation p 1,..., p n von 1,..., n für die die Zahl d p1p 2 + d p2p d pn 1p n + d pnp 1 minimal ist. Ein brute force Algorithmus nimmt alle solche Permutationen und addiert die Distanzen für jede. Leider ist dies keine Polynomialzeit: wir brauchen
135 7.1. BEISPIELE EFFIZIENTER ALGORITHMEN 131 (n 1)! Permutationen zum Durchsuchen. Schon mit 40 Städten ergibt dies mehr als Permutationen so etwas kann kein Rechner jeder Zeit schaffen. Bis heute existiert kein effizienter Algorithmus, der TSP genau löst (d.h., die kürzeste Route immer findet). Und wir werden theoretische Ergebnisse sehen, die zeigen, dass auch in der Zukunft kein effizienter Algorithmus gefunden wird. Merken wir aber, dass der brute force Algorithmus im linearen Raum O(n) durchführbar ist: wir brauchen uns nur die gegebenen Permutationen und den bisher minimalen Wert zu merken. Definition. O(t(n)) bezeichnet die Klasse aller Funktionen f(n), für die es Konstanten n 0 und C gibt, so dass f(n) Ct(n) für alle n n 0. Beispiel O(n) ist die Klasse aller linear aufsteigenden Funktionen. O(1) enthält alle konstanten Funktionen. 2. Jedes quadratische Polynom gehört zur Klasse In der Tat, für O(n 2 ). f(n) = a + bn + cn 2 = ( a n + b + c) 2 n2 n gilt: falls n max{a, b}, ist f(n)leq(2 + c)n 2. Es genügt also, n 0 = max{a, b} und C = 2 + c zu setzen. 3. Allgemeiner enthält die Klasse alle Polynome des Grades k. O(n k ) 4. Die exponentielle Funktion 2 n gehört nicht zu der Klasse O(n k ), denn 2 n lim n n =. k bsp-2-faerb Beispiel 6 (2-FÄRBUNG). Wir wollen einen (ungerichteten) Graphen G mit zwei Farben, z.b. rot und blau, so färben, dass keine zwei benachbarten Knoten gleichfarbig sind. Es ist klar, dass das für Graphen, die ein Dreieck enthalten, unmöglich ist. Allgemeiner: für einen Graphen mit einem Zyklus ungerader Länge existiert keine solche Färbung. In dem Fall, dass G keine Zyklen ungerader Länge hat, läßt sich ein einfacher Algorithmus wie folgt angeben: wir wählen einen Knoten v und färben ihn rot. Alle Nachbarn von v werden blau gefärbt da G kein Dreieck enthält, verursacht diese Färbung keine Probleme. Dann werden alle Nachbarn der zuletzt gefärbten Knoten rot gefärbt - da G kein Dreieck und keinen Zyklus aus fünf Kanten enthält, verursacht auch dies keine Probleme. So wird fortgefahren, bis die ganze Komponente von v (d.h., alle Knoten, die mit v durch einen ungerichteten Weg verbunden sind) gefärbt ist. Dann wählen wir wieder einen beliebigen, noch nicht gefärbten, Knoten, der rot gefärbt wird, usw. Zeitkomplexität: Falls Graphen als Adjazenzlisten implementiert werden und die mengentheoretischen Operationen konstante Zeit erforden, hat dieser Algorithmus eine lineare Zeitkomplexität O(n+k) (wobei n die Zahl aller Knoten und k die Zahl aller Kanten ist).
136 132 KAPITEL 7. KOMPLEXITÄT VON ALGORITHMEN In der Tat benötigt die Initialisierung die Zeit O(1). Die Färbung einer Komponente K (die Zeilen ), deren Zahl von Kanten k(k) ist, dauert O(k(K)), da jede Kante nur einmal durchsucht wird. Falls der Graph G genau r Komponenten hat, gilt k = k(k 1 )+ +k(k r ) und die r Durchgänge der Schleife dauern O(n+k) Schritte. Die Überprüfung, ob ROT oder BLAU eine Kante enthalten, benötigt auch die lineare Zeit O(n + k). Insgesamt wird der Algorithmus also in O(n + k) Schritten durchgeführt. Beispiel 7 (3-FÄRBUNG). Die analoge Aufgabe, einen gegebenen Graphen mit drei Farben zu färben, ist viel schwieriger. Kein effizienter Algorithmus ist bekannt und später werden wir Gründe dafür kennenlernen, weshalb es unwahrscheinlich ist, dass ein effizienter Algorithmus existiert. Ineffizient können wir einfach alle möglichen Färbungen ausprobieren. Das ist bestimmt ein Algorithmus aber er braucht O(3 n ) Schritte, da es 3 n Färbungsmöglichkeiten gibt. Und das ist sehr aufwendig. sect-classp 7.2 Komplexitätsklasse P Alle Probleme, die ein Rechner mit polynomialer Zeitkomplexität lösen kann, formen die Klasse P. Genauer: ein Entscheidungsproblem gehört zu P, falls es einen Algorithmus gibt, der für jede Eingabe der Länge n in höchstens p(n) Zeiteinheiten entscheidet, ob die Antwort JA oder NEIN ist, wobei p(n) ein (gegebenes) Polynom ist. Es entsteht die Frage: welche Implementierung haben wir hier im Sinn? Die Antwort ist: die Klasse P ist von der Implementierung unabhängig. Verschiedene Implementierungen können natürlich verschiedene Zeitkomplexitäten haben; d.h., das Polynom p(n) wird für jede Implementierung individuell gewählt werden. Aber die Existenz eines Polynomes ist unabhängig von der Implementierung. Das zeigen wir, indem wir Turingmaschinen als Implementierungsmodell nehmen und dann beweisen, dass dieselbe Klasse P auch z.b. mit einem realen Rechner als Modell entsteht. Der Beweis für andere Berechnungsmodelle folgt analog. Definition. Wir sagen, dass eine deterministische TM eine Zeitkomplexität t(n) hat, wobei t(n) eine Funktion aus der Menge N ist, falls die TM für jede Eingabe der Länge n in höchstens t(n) Schritten hält. kompl-bsp Beispiel 1. Die Sprache L {0, 1} aller Wörter, die keine zwei benachbarten Einsen enthalten, kann von der folgenden TM akzeptiert werden: M bleibt solange im Initialzustand q 0, wie sie Nullen liest, also (q 0, 0) (q0, R). Falls M eine 1 liest, geht sie in den Zustand q 1 über: (q 0, 1) (q1, R). Falls nach der 1 gleich eine 0 folgt, gehen wir zurück zum Zustand q 0, falls aber noch eine 1 gelesen wird, hält die Maschine im (nichtfinalen) Zustand q 1. Und falls das Blanksymbol gelesen wird, hält die Maschine im finalen Zustand q F. Hier ist eine vollständige Beschreibung von M: M = ({q 0, q 1, q F }, {0, 1}, δ, q 0, q F )
137 7.2. KOMPLEXITÄTSKLASSE P 133 wobei δ durch die folgenden Übergangsregeln bestimmt wird: (q 0, 0) (q 0, R) (q 0, 1) (q 1, R) (q 0, #) (q F, #) (q 1, 0) (q 0, R) (q 1, #) (q F, #) Jede Eingabe der Länge n liest die TM von links nach rechts und hält spätestens bei dem Symbol # hinter dem Eingabewort, also nach höchstens n + 1 Schritten. Sie hat also die Zeitkomplexität t(n) = n + 1. Bemerkung Im Kapitel 3 haben wir verschiedene Varianten von TM eingeführt (zum Beispiel mit zusätzlichem Gedächtnis, mit mehreren Bändern, usw.). Die Definition der Klasse P (s.u.) ist unabhängig davon, welche der Varianten als TM gemeint ist; das beweisen wir exakt im Abschnitt Zeitkomplexität ist nicht eindeutig definiert (denn sie ist nur eine Abschätzung für die Anzahl der Berechnungsschritte). Genau genommen ist jede Funktion t (n) mit t (n) n+1 für alle n auch eine Zeitkomplexität der TM aus Beispiel 1. Definition. Wir bezeichnen mit P die Klasse aller formalen Sprachen, die von einer TM mit polynomialer Zeitkomplexität akzeptiert werden können. Genauer: eine Sprache L gehört zur Klasse P, falls es eine Turingmaschine M und ein Polynom p(n) gibt, so dass L = L(M) und M hält auf Eingaben der Länge n in höchstens p(n) Schritten. Bemerkung 2. Erinnern wir uns daran, dass Entscheidungsproblem formale Sprache. Genau genommen müssen wir ein Entscheidungsproblem erst codieren (z.b. binär, mit Symbolen 0 und 1). Dann bezeichnet L {0, 1} die Sprache aller Codierungen der Eingaben, auf die die Entscheidung JA ist. Weiter nehmen wir immer an, dass die Codierung von Problemen vernünftig ist. Wenn nämlich jemand freiwillig eine extrem lange Codierung der Eingabe benutzt, kann er auch ein kompliziertes Problem in linearer Zeit p(n) = n, wobei n die unvernünftige Codelänge ist, lösen. Die folgenden Regeln sind als vernünftig anzusehen: 1. Zahlen werden binär oder dezimal repräsentiert. (Nicht unär!) 2. Graphen werden durch Adjazenzmatrizen oder Adjazenzlisten dargestellt (siehe Abschnitt 7.1). 3. Mengentheoretische Operationen (Insert, Delete, Vereinigung, Durchschnitt) werden so implementiert, dass ihre Ausführung eine konstante Zahl von Zeiteinheiten dauert.
138 134 KAPITEL 7. KOMPLEXITÄT VON ALGORITHMEN Beispiel 2 (2-COLORABILITY). Das Problem, ob ein Graph mit zwei Farben gefärbt werden kann, gehört zur Klasse P. In Abschnitt 7.1 haben wir dafür einen Algorithmus mit linearer Zeitkomplexität beschrieben. Es ist nicht kompliziert, den Algorithmus mit einer TM zu implementieren und zu beweisen, dass diese TM polynomiale Zeitkomplexität hat. Beispiel 3 (REACHABILITY). ist wie im Beispiel 1 von Abschnitt 6.1 gezeigt, ein Problem in P. bsp-2-3-sat Beispiel 4 (SAT, Erfüllbarkeit boolescher Formeln). Analog zu der Situation der 2-Färbung und 3-Färbung haben wir hier ein anderes wichtiges Beispiel der Probleme, deren leichtere Variante zu P gehört und deren schwierige (wahrscheinlich) nicht. Es handelt sich um Boolesche Formeln über den Variablen x 1,..., x n. Die einfachsten Formeln sind die Variablen x i selbst und ihre Negationen x i - diese Formeln heißen Literale. Die komplizierteren Formeln werden mit Hilfe der üblichen logischen Operationen, z.b. Konjunktion, Disjunktion und Implikation erzeugt. Jede Disjunktion von Literalen heißt Klausel. Beispiele: x y z und x. Jede Boolesche Formel phi hat eine konjunktive Normalform (KNF), d.h., φ = φ 1 φ 2 φ n ist eine Konjunktion der Klauseln φ 1,..., φ n. Z.B. hat die Formel φ = (x y z) ( x z) die folgende KNF: wir benutzen die Äquivalenz von und erhalten a b und a b φ = ( x (y z)) (x z) Da x (y z) äquivalent zu ( x y) ( x z) ist (de Morgansches Gesetz), gilt φ = ( x y) ( x z) (x z). Das ist also eine Boolesche Formel, deren Klauseln je zwei Literale enthalten. Eine Formel φ heißt erfüllbar, falls die Variablen so mit true oder false belegt werden können, dass φ den Wert true annimmt. Beispiel: die obige Formel ist erfüllbar, denn für x = true, y = true, z = true gilt φ = true. Das Problem SAT fragt, ob eine Formel in KNF erfüllbar ist. Es ist kein effizienter Algorithmus bekannt, der für jede Boolesche Formel unterscheidet, ob sie erfüllbar ist. Das Problem m-sat ist: Gegeben, eine Boolesche Formel φ in konjunktiver Normalform, wobei jede Klausel m Literale enthält, ist φ erfüllbar? Wir definieren die Größe der Eingabe φ als n + k, wobei n die Anzahl aller Variablen und k die Anzahl aller Klauseln von φ ist. 2-SAT gehört zur Klasse P. Wir könnten hier einen effizienten Algorithmus angeben, aber einfacher ist es zu zeigen (in Abschnitt??), dass es eine effiziente Reduktion dieses Problems auf ein anderes Problem der Klasse P gibt daraus folgt dann indirekt, dass 2-SAT zur Klasse P gehört. 3-SAT ist dagegen schwierig: in Abschnitt 7.4 zeigen wir, dass dieses Problem N P- vollständig ist, also genauso schwierig wie 3-FÄRBUNG.
139 7.3. POLYNOMIALE REDUKTION 135 Es gibt aber ein entscheidbares Problem von dem bekannt ist, dass es nicht in P liegt: Satz 1. (ohne Beweis) Die Zeitkomplexität von Pressburger Arithmetik ist doppelt exponential: für jeden Algorithmus mit Zeitkomplexität t(n) gibt es eine Konstante K mit t(n) 2 2Kn sec_poly_red 7.3 Polynomiale Reduktion Es gibt Probleme, als Sprachen L 0 Σ, auf die sich viele andere Probleme schnell reduzieren lassen. Eine Reduktion vom Problem L Γ auf L 0 ist eine Funktion f, die alle Wörter über Γ in Wörter über Σ übersetzt: und für jedes Wort w über Γ erfüllt: f Γ Σ w liegt in L g.d.w. f(w) in L 0 liegt. Dabei ist wichtig, dass die Reduktion in polynomialer Zeit stattfindet: Definition. Eine Reduktion in polynomialer Zeit einer Sprache L Γ auf eine Sprache L 0 Σ, in Symbolen L P L 0 ist eine Funktion f Γ Σ so dass (a) ein Wort e Γ in L liegt g.d.w. f(w) in L 0 liegt. (b) f ist in polynomialer Zeit berechenbar, d.h., es gibt keine TM, M, und ein Polynom p(n) so dass auf jede Eingabe s 1... s n in Γ berechnet M die Ausgabe f(s 1... s n ) in höchstens p(n) Schritten. Bemerkung 1. Die Relation p ist (a) reflexiv: L p L gilt mil hier f(n) = n (b) transitiv: aus L 1 p L 2 und L 2 p L 3 folgt L 1 p L 3. In der Tat, wir haben, für L i Σ i (i = 1, 2, 3) Funktionen f Σ 1 Σ 2 and g Σ 2 Σ 3 die in polynomialer Zeit berechenbar sind und w L 1 g.d.w. f(w) L 2 und w L 2 g.d.w. f(w) L 3 erfüllen. Die Verknüpfung h(w) = g(f(w)) erfüllt w L 1 g.d.w. v = f(w) L 2 g.d.w. h(w) = g(v) L 3.
140 136 KAPITEL 7. KOMPLEXITÄT VON ALGORITHMEN Also bleibt nur zu zeigen, dass h(x) in polynomialer Zeit berechnet wird. In der Tat: die Funktion f(n) wird durch eine TM M in polynomialer Zeit p(n) berechnet. Und g(n) wird druch eine TM M in polynomialer Zeit q(n) berechnet. Dann wird die Funktion h(n) = g(f(n)) durch die folgende TM berechnet: w M f(w) M g(f(w)) Für Wörter w der Länge n macht M höchstens p(n) Schritte und schreibt also höchstens p(n) Symbole. Das Wort f(w) hat daher die Länge n + p(n). Dann dauert die Berechnung von M höchstens q(n + p(n)) Schritte. Insgesamt braucht die obige TM höchstens Schritte, und das ist ein Polynom. p(n) + q(n + p(n)) Beispiel 1. Das Problem k-clique fragt, ob in einem Graphen G eine Clique von k Elementen (wobei jedes Paar von verschiedenen Knoten durch eine Kante verbunden ist) existiert. Die können wir auf das Problem k-independent SET reduzieren: hier fragen wir, ob in einem Graphen G eine Menge der Größe k existiert, in der kein Paar von Knoten durch eine Kante verbunden wird. Die Reduktion f berechnet zu jedem Graphen den komplementären Graphen G = (V, E) f(g) = (V, Ē) wobei (x, y) eine Kante von Ē ist g.d.w. x y und (x, y) keine Kante von E ist. Es ist klar, dass (a) eine Menge von Knoten ist eine Clique von G g.d.w. sie unabhängig in f(g) ist (b) die Berechnung von f(g) dauert nur eine lineare Zeit. Deswegen k-clique p k-independent-set Bemerkung 2. Die Relation p ist zwar reflexiv und transitiv, aber sie ist keine lineare Ordnung, weil sie nicht antisymmetrisch ist. Z.B. haben wir auch k-independent-set p k-clique wieder aufgrund der Berechnung des komplementären Graphen. bsp-starke-komp Beispiel 2 (STRONG COMPONENTS). Zwei Knoten eines gerichteten Graphen G können genau dann in beiden Richtungen durch einen gerichteten Weg verbunden werden, wenn sie in einem Kreis des Graphen liegen. Wir sagen dann, dass die beiden Knoten in derselben starken Komponente liegen. Genauer: eine starke Komponente von G ist eine maximale Menge von Knoten, die durch gerichtete Wege (in beiden Richtungen) miteinander verbunden werden können. Beispiel: der folgende Graph
141 7.3. POLYNOMIALE REDUKTION 137 rke-komp-formen-graph a d b f c e hat drei starke Komponenten: {a, b, c}, {d, e} und {f}. Aufgrund des Algorithmus aus Beispiel?? in 7.1 können wir einen trivialen Algorithmus finden, der für einen Graphen mit n Knoten und k Kanten in der Zeit O(n 2 (n + k)) die starken Komponenten aufzählt: wir wählen einen Knoten v und fragen für jeden Knoten w, ob ein Weg von v zu w sowie ein Weg von w nach v führt. Das braucht O(2(n + k)) = O(n + k) Schritte für jeden Knoten w, also insgesamt O(n(n + k)) Schritte. Damit wird die starke Komponente von v in der Zeit O(n(n + k)) bestimmt. Außerdem gibt es höchstens n starke Komponenten, also ist die gesamte Komplexität O(n 2 (n + k)). Der berühmte Algorithmus von Tarjan berechnet die starken Komponenten in linearer Zeit O(n + k) berechnet. Diesen werden wir hier aber nicht vorführen. Bemerkung 3. Starke Komponenten jedes Graphen G formen einen neuen gerichteten Graphen G. Genauer, die Knoten von G sind die starken Komponenten v der Knoten v von G. Und für zwei starke Komponenten v, w von G gilt: (v, w) ist eine Kante von G genau dann, wenn v w und ein gerichteter Weg von v nach w führt in G. Zum Beispiel ergibt sich aus dem obigen Graphen G der folgende Graph {a, b, c} {d, e} {f} Es ist klar, dass der neue Graph G azyklisch ist (denn jeder Kreis von G kann zu einem Kreis aus G ergänzt werden, der dann mehrere starke Komponenten verbinden würde, das ist jedoch nicht möglich). Aufgrund von Beispiel?? in 7.1 können also die starken Komponenten jedes gerichteten Graphen so sortiert werden, dass ord(v) ord(w) für jede Kante (v, w) von G. Beispiel 3 (2-SAT). Das Problem 2-SAT, siehe Beispiel 4 in 6.2 REF-TODO fragt: gegeben eine boolsche Formel in KNF, ϕ = ϕ 1... ϕ n wobei ϕ i Klauseln von 2 Literalen sind, ist ϕ erfüllt? Wir zeigen, dass 2-SAT der Klasse P angehört, denn es hat eine polynomiale Reproduktion von STRONG COMPONENTS. Für jede Formel φ in konjunktiver Normalform mit 2 Literalen je Klausel konstruieren wir einen gerichteten Graphen G φ wie folgt: Knoten: für jede Variable x von φ hat G φ zwei Knoten, markiert mit x und x. Kanten: für jede Klausel α β von φ gibt es zwei Kanten in G: α β und β α
142 138 KAPITEL 7. KOMPLEXITÄT VON ALGORITHMEN Beispiel: für die Formel haben wir den Graphen φ = (x y) ( x z) ( z y) x x y y z z Diese Konstruktion ist eine Reduktion in polynomialer Zeit, denn es gilt 1. φ ist erfüllbar genau dann, wenn x und x in verschiedenen starken Komponenten von G liegen (für jede Variable x), und 2. die Funktion f, die jeder Formel φ den Graphen G φ zuordnet, hat eine lineare Zeitkomplexität. Es ist klar, dass (2) gilt: falls φ eine Formel der Größe n (= Anzahl aller Variablen + Anzahl aller Klauseln) ist, benötigt die Konstruktion von G φ die Zeit O(n). Wir beweisen (1). a) Sei φ erfüllbar. Wir haben also eine Belegung der Variablen, so dass jede Klausel von φ den Wert true hat (d.h., für jede Klausel α β gilt α = true oder β = true). Es folgt, dass von einem true Knoten in G φ keine Kante zu einem false Knoten führt. (Für die Kante α β gilt, falls α = true, dass β = true sein muss, denn α β ist eine Klausel von φ; analoges gilt für β α.) Falls die Variable x den Wert true hat, führt in G φ also kein Weg zu x; falls x = false ist, führt kein Weg von x zu x. In beiden Fällen liegen x und x in verschiedenen starken Komponenten. b) Seien x und x immer in verschiedenen starken Komponenten. Wir erinnern an die obige Bemerkung 3: die starken Komponenten v der Knoten v des Graphen G φ können so sortiert werden, dass für jede Kante v w von G ord(v) ord(w) gilt. Wir belegen die Variablen wie folgt: x = true genau dann, wenn ord( x) < ord(x) (d.h., x hat genau dann den Wert true, wenn die starke Komponente von x vor der starken Komponente von x liegt). Wir müssen beweisen, dass für jede Klausel α β entweder α = true oder β = true gilt (denn dann gilt φ = true). Nehmen wir an, dass α = false, d.h., ord(α) ord( α), dann beweisen wir β = true. Da G φ die Kante α β enthält, gilt ord( α) ord(β) und da er auch die Kante β α enthält, gilt ord( β) ord(α). Also Damit ist bewiesen, dass ord( β) ord(α) ord( α) ord(β). ord( β) < ord(β) (denn die Komponenten β und β sind wohl verschieden), also β = true.
143 7.4. ROBUSTHEIT DER KLASSE P 139 Konkrete Beispiele: Die Formel oben ist erfüllbar, denn die starken Komponenten des Graphen G φ sind Die Formel {x, z, y} und { x, y, z}. (y x) ( y z) ( z x) ( x t) (t x) ist nicht erfüllbar, denn der entsprechende Graph x y z t x y z t hat eine einzige starke Komponente. sect-p-robust 7.4 Robustheit der Klasse P Die Definition der Klasse P war auf dem Modell von TM aufgebaut. Sie ist aber von diesem Modell unabhängig, wie wir jetzt demonstrieren werden. Zuerst zeigen wir, dass, falls verschiedene Modifikationen von TM benutzt worden wären, die Klasse P dieselbe geblieben wäre. Die Zeitkomplexität ist für k-band-tm genau wie oben für TM definiert TM mit zusätzlichem Gedächtnis Erinnern wir daran, dass eine TM mit zusätzlichem Gedächtnis die Möglichkeit eines Zugriffs auf ein Gedächtnis hat, in dem Symbole eines endlichen Alphabets A gespeichert werden, siehe Dies ist allerdings eine normale TM mit der Zustandsmenge Q A. Für die Definition der Klasse P ist es also unerheblich, ob wir TM oder TM mit zusätzlichem Gedächtnis als Berechnungsmodell anwenden TM mit mehrspurigem Band Auch dieses Modell ändert die Klasse P nicht, denn wie in gezeigt wurde, ist eine TM mit k-spurigem Band eine normale TM mit dem Bandalphabet Σ = (Σ 1 {#}) (Σ k {#}) {(#,..., #)} Mehr-Band TM In haben wir das Modell einer k-band-tm eingeführt: die TM hat k Bänder mit k unabhängigen Lese- und Schreibköpfen, aber mit einer Steuereinheit, die aufgrund des gegebenen Zustandes und der k gelesenen Symbole die Aktivität der k Köpfe steuert. Wir haben in bewiesen, dass jede k-band-tm durch eine TM simuliert werden kann. Jetzt beweisen wir, dass dies in polynomialer Zeit möglich ist:
144 140 KAPITEL 7. KOMPLEXITÄT VON ALGORITHMEN satz-k-band-sim-quad Satz 1. Jede k-band-tm mit einer Zeitkomplexität t(n) n kann durch eine 1- Band-TM mit einer Zeitkomplexität O(t(n) 2 ) simuliert werden. Beweis. Wir führen den Beweis für k = 2 durch, der allgemeine Fall läßt sich ganz analog durchführen. Wir gehen von der Simulation, die in Kapitel 3 (siehe 3.2.2) beschrieben wurde, aus. Jeder Berechnungsschritt der Simulation hat drei Unterabschnitte. Abschnitt 1 (der Anfang) dauert einen Schritt, Abschnitt 2 (Kopfbewegung nach rechts oder links) benötigt höchstens O(t(n)) Schritte, denn der Kopf wird unter das nächste Symbol bewegt und in der Zeit t(n) kann die k-band-tm auf jedem Band höchstens O(t(n)) neue Felder beschreiben. Im Abschnitt 3 wird die Berechnung von Kopf i simuliert (in konstanter Zeit für i = 1, 2) und der Kopf wird zwischen die beiden Symbole (in O(t(n)) Schritten bewegt. Jeder Simulationsdurchgang dauert also höchstens O(t(n)) Schritte. Da wir höchstens t(n) Durchgänge benötigen, hat die 1-Band-TM die Zeitkomplexität O(t(n) 2 ). Korollar 1. Jede Sprache, die von einer k-band-tm mit polynomialer Zeitkomplexität akzeptiert wird, gehört zur Klasse P. Beweis. Falls t(n) ein Polynom ist, ist auch t(n) 2 ein Polynom. Bemerkung 1. Mit anderen Worten würde die Klasse P die gleiche bleiben, falls wir bei der Definition von P anstelle der TM die k-band-tm benutzt hätten. Dasselbe gilt auch für reale Rechner: die Probleme, die sie in polynomialer Zeit lösen können, sind genau die der Klasse P. sect-classnp bsp-zerlegbarkeit 7.5 Komplexitätsklasse N P Probleme, die grundsätzlich schwieriger zu lösen sind als die der Klasse P, die sich aber trotzdem in polynomialer Zeit von einer nichtdeterministischen TM lösen lassen, formen die Komplexitätsklasse N P. Intuitiv kann man N P wie folgt erklären: falls ein Entscheidungsproblem die Eigenschaft hat, dass man in polynomialer Zeit überprüfen kann, ob eine angebotene Lösung wirklich die Aufgabe löst, gehört das Problem zu N P. Bevor wir N P formal definieren, zeigen wir diese intuitive Erklärung an einem Beispiel. Beispiel 1 (ZERLEGBARKEIT). Wir sollen entscheiden, ob für eine Zahl n (Eingabe) eine Zerlegung in ein Produkt n = pq zweier kleinerer Zahlen existiert. Obwohl das ein Problem ist, dass in der Mathematik seit tausenden von Jahren behandelt wurde, gibt es keinen effizienten Algorithmus dafür. Wir wissen also nicht, ob ZER- LEGBARKEIT zu P gehört. Aber dieses Problem gehört offensichtlich zu N P: falls uns jemand Zahlen p und q nennt, können wir effizient überprüfen, ob sie eine Lösung bilden, d.h., ob das Produkt pq der Eingabe gleicht. Das letzte kann mit einer nichtdeterministischen TM wie folgt gelöst werden: Band 1 ist das Eingabeband. Auf Band 2 wird nichtdeterministisch eine Zahl p geschrieben und auf Band 3 nichtdeterministisch eine Zahl q. Die NTM multipliziert p mit q und vergleicht pq mit Band 1: falls pq auf Band 1 steht, hält die NTM und akzeptiert, falls nicht, hält sie und akzeptiert nicht. Für jede Zahl n, die zerlegbar ist, gibt es eine Berechnung, die n in linearer Zeit akzeptiert. Definition. Wir sagen, dass eine nichtdeterministische Turingmaschine M die Zeitkomplexität p(n) hat, falls es für jede Eingabe der Länge n, die M akzeptiert, eine akzeptierende Berechnung gibt, die höchstens p(n) Berechnungsschritte benötigt. Mit N P bezeichnen wir die Klasse aller Sprachen (oder Entscheidungsprobleme), die von einer NTM mit polynomialer Zeitkomplexität akzeptiert (oder gelöst) werden
145 7.5. KOMPLEXITÄTSKLASSE N P 141 können. Genauer: eine Sprache L gehört zu N P, falls es eine NTM und ein Polynom p(n) gibt, so dass die NTM die Zeitkomplexität p(n) hat und L akzeptiert. bsp-np Beispiel Jedes Problem der Klasse P gehört zu N P. 2. ZERLEGBARKEIT ist ein Problem der Klasse N P; es ist nicht bekannt, ob es zur Klasse P gehört. bsp-np-sat bsp-np-tsp 3. ERFÜLLBARKEIT (siehe Beispiel 4 in 7.2) ist ein Problem der Klasse N P: für jede Boolesche Formel f(x 1,..., x n ) und jede potentielle Lösung, d.h. jede (beliebig berechnete) Belegung aller Variablen x 1,..., x n, können wir effizient entscheiden, ob der Wert von f true oder false ist. Es ist einfach, eine NTM mit polynomialer Zeitkomplexität zu konstruieren, die das Problem ERFÜLLBARKEIT löst: Band 1 ist ein Eingabeband, auf dem ein Code der Formel f(x 1,..., x n ) gespeichert wird. Auf Band 2 erzeugt die NTM nichtdeterministisch n Werte 0 oder 1. Dann berechnet sie den Wert von f mit diesen n Variablenwerten (mit 1 = true und 0 = false). 4. TRAVELING SALESMAN PROBLEM (TSP) ist ein Problem der Klasse N P mit großer praktischer Relevanz. Die Eingabe ist eine Liste S 1,..., S n von Städten und eine Matrix von Zahlen d(i, j) 0 für i, j = 1,..., n die die Distanz von S i zu S j repräsentieren (oder die Kosten der Reise von S i nach S j ). Die Aufgabe ist, zu entscheiden, ob alle Städte besucht werden können, ohne dass die gesamten Kosten eine gegebene Zahl k überschreiten. Das heißt: die Eingabe besteht aus Zahlen k und d ij für i, j = 1,..., n. Die Lösung ist eine Rundfahrt, d.h. eine Permutation (i 1, i 2,..., i n ) der Zahlen 1,..., n, so dass eq-tsp-def ( ) d(i 1, i 2 ) + d(i 2, i 3 ) + + d(i n 1, i n ) + d(i n, i 1 ) k. Auch für dieses Problem gibt es keinen effizienten Algorithmus. Aber das Problem gehört sicher zu N P: falls eine Permutation gegeben wird, benötigt die Überprüfung der Ungleichung ( ) nur lineare Zeit. Satz 1. Jede NTM mit der Zeitkomplexität p(n) kann von einer TM mit der Zeitkomplexität O(K p(n) ) wobei K eine Konstante ist simuliert werden. Beweis. Im Beweis des Satzes 1 in 3.3 haben wir eine Simulation einer nichtdeterministischen Turingmaschine M durch eine deterministische 3-Band Turingmaschine M gezeigt. Wir beweisen, dass M die Zeitkomplexität O(r 2p(n) ) für eine Konstante r hat, falls M die Zeitkomplexität p(n) hat. Danach simulieren wir M mit einer (1-Band) TM, deren Komplexität O(n 2 + (r 2p(n) ) 2 ) ist, siehe Satz 1 in 7.4. Da (r 2p(n) ) 2 = r 4p(n), setzen wir K = r 4 : die Funktion n 2 + r 4p(n) gehört zu O(K p(n) ). Sei, wie im Beweis des Satzes 1 in 3.3, eine Numerierung der Übergänge (q, s) (q i, s i ) für i = 1,..., r gegeben. Für jede Eingabe der Länge n brauchen wir nur die ersten p(n) Berechnungsschritte der Maschine M zu simulieren. Die Maschine M erzeugt systematisch alle Listen aus Zahlen i 1 i 2... i k mit k p(n) (und 1 i s r für s = 1,..., k) auf Band 2 die Anzahl dieser Listen ist r + r 2 + r r p(n) O(r p(n) ).
146 142 KAPITEL 7. KOMPLEXITÄT VON ALGORITHMEN Für jede Liste wird M (in k p(n) Schritten) simuliert, also dauert die ganze Simulation einer Eingabe höchstens O(p(n)r p(n) ) Schritte. Es gilt p(n)r p(n) O(r 2p(n) ). Korollar 1. Jedes Problem der Klasse N P kann von einem Algorithmus mit exponentieller Zeitkomplexität gelöst werden. K p(n) K Konstante, p(n) Polynom Bemerkung 1. Die Idee, dass eine Sprache L genau dann zu N P gehört, wenn angebotene Lösungen in polynomialer Zeit überprüft werden können, läßt sich sich durch den Begriff Zertifikat formalisieren. Z.B. ist für 3-FÄRBUNG ein Zertifikat eines ungeordneten Graphen eine Färbung (korrekt oder nicht) seiner Knoten mit drei Farben. Wir formen die Sprache L check aller Wörter wz, wobei w ein Code eines Graphen ist und z ein Code seines Zertifikates, das korrekt ist. Diese Sprache gehört der Klasse P an, denn für jeden Graphen und jede Färbung ist die Korrektheit effizient überprüfbar. Wichtig ist hier, dass die angebotenen Lösungen nicht komplizierter zu codieren sind als die Eingaben selbst. Genauer: für die Wörter wz (w Eingabe, z - Zertifikat) nehmen wir an, dass die Länge z des Wortes z durch p( w ), wobei p(n) ein Polynom ist, begrenzt werden kann: Definition. Für eine Sprache L Σ heißt eine Sprache L check eine Zertifikatensprache, falls 1. L check in P liegt und 2. es gibt ein Polynom p(n), so dass für jedes Wort w über Σ der Länge n gilt: w L wz L check für irgendein Wort z der Länge p(n). Satz 2. Eine Sprache gehört genau dann zur Klasse N P, wenn sie eine Zertifikatensprache hat. Beweis. 1. Gegeben eine Zertifikatensprache L check Γ für L Σ, wir beweisen, dass L N P. Sei M eine Turingmaschine mit polynomialer Zeitkomplexität q(n), die L check akzeptiert. Dann haben wir die folgende nichtdeterministische Turingmaschine M, die L akzeptiert: Band 1 Eingabeband w 1 w 2... w n Band 2 Erzeugung von z z 1 z 2... z k für k p(n) Band 3 Simulation von M w 1 w 2... w n z 1 z 2... z k Auf Band 1 steht die Eigabe w der Länge n. Auf Band 2 wird nichtdeterministisch ein Wort z der Länge k p(n) geschrieben. Hier ist p(n) das Polynom, dass die Länge der Zertifikate abgleicht. Dann werden w und danach z auf Band 3 kopiert, und die Maschine M wird simuliert; falls M hält und akzeptiert, hält auch M und akzeptiert. Es folgt also, dass M genau die Wörter w akzeptiert, für die es ein Wort z der Länge p(n) mit wz L check gibt also akzeptiert M die Sprache L. Die Erzeugung von z dauert 2k O(p(n)) Schritte und die Simulation von M dauert q(n+k) O(q(p(n))) Schritte, also hat M eine polynomiale Zeitkomplexität.
147 7.6. N P-VOLLSTÄNDIGKEIT Für jede Sprache L Σ der Klasse N P konstruieren wir eine Zertifikatensprache. Wir haben eine nichtdeterministische Turingmaschine M mit polynomialer Zeitkomplexität p(n), die L akzeptiert. Für den Grad r des Nichtdeterminismus haben wir im Beweis von Satz 1 gesehen, wie zu jedem akzeptierten Wort w = w 1... w n der Länge n ein Wort i 1... i k über {1,..., r} der Länge k p(n) zugeordnet wird, das eine akzeptierende Berechnung von w beschreibt. Sei L check die Sprache über Σ {1,..., r} aller Wörter w 1... w n $i 1... i k wobei w 1... w n ein WOrt in L ist und i 1... i k eine akzeptierende Berechnung von w der NTM M, k p(n). Dann gilt: wenn w L gibt es z = i 1... i k mit wz L check. Umgekehrt, wenn wz L check, gilt w L.++Wir konstruieren eine 2-Band TM, M, die Lcheck akzeptiert: B1 w 1... w n $i 1... i k B2 M deterministisch simuliert Auf B1 steht eine Eingabe. Wenn sie die Form w$i 1,... i k mit i 1,..., i k in {1,..., n} nicht hat, akzeptiert M nicht. Wenn die Eingabe w$i1... i k ist, simuliert M auf B2 die NTM mit Eingabe w deterministisch für k Schnitte und akzeptiert g.d.w. M das Wort w akzeptiert. Für Eingaben der Länge m = n k = O(p(n)) braucht M nur n Schritte, um w auf B2 zu kopieren, und k p(n) Schritte für die Simulation. Deswegen liegt L check in P. 7.6 N P-Vollständigkeit Wir haben oben erwähnt, dass kein effizienter Algorithmus für Probleme wie ZER- LEGBARKEIT oder TSP bekannt ist. Mit anderen Worten ist es nicht bekannt, ob diese Probleme in der Klasse P liegen. Eigentlich ist auch die folgende allgemeine Frage bisher unbeantwortet: Offenes Problem: Gilt P = N P? Trotz intensiver Bemühungen vieler Wissenschaftler und trotz vieler Nebenergebnisse zu diesem Thema ist die Antwort noch nicht bekannt. Es gibt aber Probleme, die in der Klasse N P eine besondere Stellung haben: wenn man für eines dieser Probleme feststellen würde, dass es zu P gehöre, so würde jedes Problem der Klasse N P zu P gehören also wäre die Antwort auf die obige Frage positiv. Solche Probleme (zu denen z.b. TSP gehört) heißen N P-vollständig. Erinnern wir uns an den Begriff der Reduktion in polynomialer Zeit (??): Definition. Eine Sprache L heißt N P-hart, falls es für jede Sprache L der Klasse NP eine Reduktion auf L in polynomialer Zeit gibt, oder kürzer: L N P L p L. Eine Sprache, die N P-hart ist und zu N P gehört, heißt N P-vollständig. Satz 1. Falls eine N P-harte Sprache in P liegt, gilt P = N P. Beweis. Sei L eine N P-harte Sprache in P. Für jede Sprache L in N P gibt es eine Reduktion auf L in polynomialer Zeit. Aus L P folgt also L P (Satz 1 in??). Damit ist P = N P bewiesen.
148 144 KAPITEL 7. KOMPLEXITÄT VON ALGORITHMEN Satz 2 (von Cook und Levin.). ERFÜLLBARKEIT ist N P-vollständig. Beweis. 1. ERFÜLLBARKEIT ist ein Problem der Klasse NP: siehe Beispiel 2 Nr. 3 in Abschnitt Für jede Sprache L in N P zeigen wir, dass L auf ERFÜLLBARKEIT in polynomialer Zeit reduzierbar ist. Wir haben eine Turingmaschine M mit polynomialer Zeitkomplexität n k, die L akzeptiert. Wir können für M, ohne Beschränkung der Allgemeinheit, das folgende annehmen: (a) Die Zustände von M sind wie folgt durchnumeriert: q 0 (initial), q 1 (final), q 2,..., q m. Der finale Zustand q 1 ist ein Haltezustand. (b) Die Bandsymbole von M sind s 1,..., s l und wir setzen s 0 def = #. (c) Die Zellen des Bandes sind mit ganzen Zahlen durchnumeriert. Die Eingabe steht in den Zellen 1,..., n. Zelle Nr.: n n+1 n+2 n+3... # # # s i1 s i2... s in # # #... q 0 Initialkonfiguration (d) Jede Berechnung dauert genau p(n) Zeiteinheiten. Für kürzere Berechnungen bleibt unsere TM im letzten Zustand bis Zeit t = p(n). Bemerkung 1. In der Zeit p(n) kann die TM höchstens p(n) Felder beschriften, also genügt es, die Bandzellen Nr. p(n), p(n) + 1,..., 0, 1,..., p(n) zu betrachten. Die Reduktion der Sprache L auf ERFÜLLBARKEIT bedeutet, dass für jedes Wort w über Σ eine Boolesche Formel φ w in KNF konstruiert wird, so dass φ w ist erfüllbar w L und dass die Konstruktion in polynomialer Zeit durchgeführt wird. Die Aussage w L bedeutet, dass es eine Berechnung des Wortes w durch M gibt, die im Zustand q 1 hält. Eine solche Berechnung können wir durch eine Formel φ w eindeutig beschreiben, wenn wir die folgenden Booleschen Variablen einführen: NAME BEDEUTUNG: ist true belegt genau dann, wenn UMFANG qi t Zur Zeit t hat M den Zustand q i. t = 0,..., p(n) i = 0,..., m kr t Zur Zeit t steht der Kopf im Feld r t = 0,..., p(n) r = p(n),..., p(n) s t j,r Zur Zeit t steht im Feld r das Symbol s j t = 0,..., p(n) j = 0,..., k r = p(n),..., p(n) Wir sind bereit jedem Eingabewort w = s i1 s i2... s in
149 7.6. N P-VOLLSTÄNDIGKEIT 145 eine boolsche Formel f(w) zuzuordnen so dass m von der TM akzeptiert wird, g.d.w. f(w) erfüllbar ist. Diese Formel ist eine Konjunktion f(w) = ϕ start ϕ accept all ϕ move von 4 Formeln sein: Formel ϕ start beschreibt den Zustand am Anfang: n n+1... s i1 s i2... s in q 0 Sie besagt, dass zur zeit t = 0 ist sowie q0 0 Zustand q 0 k1 0 Kopfposition r = 1 s 0 i,..., 11 s0 i nn die Eingabe in Zellen 1,..., n s 0 0,r für alle r i 1,..., i n. Deswegen ist ϕ start die folgende Konjunktion ϕ start = q0 0 k0 1 n s 0 i l,l l=1 Diese Formel hat Länge O(p(n)). p(n) r= p(n),r 1,...,n s 0 0,r Formel ϕ accept beschreibt die Tatsache, dass die Berechnung in Zeit p(n) akzeptiert, d.h. den akzeptierenden Zustand q 1 erreicht: ϕ accept = w p(n) 1. Formel ϕ all beschreibt, dass das Band sich so benimmt, wie wir erwarten: zu jeder zeit t gibt es in jeder Zelle r ein Symbol s 0,..., s n : dies ist die Konjunktion aller s t j,r. Und nie finden wir zwei verschiedene Symbole in einer Zelle: /st j, r s t j,r für alle t, r, j und j j. Analog mit Kopfposition und Zuständen: zu jeder Zeit t genau eine vorhanden. Dies ergibt eine große Konjunktion ϕ von kleinen Formeln. Da wir beliebige Indizes t und r (beide in O(p(n))) nehmen müssen, sowie alle j und j, die aber nur von 0 bis k, d.h., unabhängig von n, laufen, ist ϖ tape eine Formel der Länge O(p(n 2 )). Formel ϕ move Diese Formel beschreibt, dass sich der Kopf zu jeder Zeit t nach einer der Übergangsregeln bewegt. Da in jedem Takt t nur 3 Zellen beinflusst werden können und nur Zeiten t und t + 1 eine Rolle Spielen, lässt sich ϕ move als eine Formel der Länge O(p(n 2 )) schreiben. Wir verzichten auf die Details, die kann der Leser z.b. im Buch M.Sipser Introductions to the theory of computation (Cowrse Technology, Boston USA, 2006) finden Satz 3. Für jedes Wort w der Länge n wird die Formel f(w) = ϕ start ϕ acept ϕ all ϕ move in Zeit O(p(n) 2 ) geschrieben und sie ist genau dann erfüllbar wenn w in L(M) liegt.
150 146 KAPITEL 7. KOMPLEXITÄT VON ALGORITHMEN Wenn w von der TM akzeptiert wird, wählen wir eine akzeptierende Berechnung der Länge i p(n). Daraus ergibt sich für uns eine Belegung aller Variablen: gi t =true wenn in der gegebenen Berechnung der Zustand in Zeit t gleicht q i, analog für kr t und s t j,r. Es ist klar, dass da die Berechnung Beweis. Da die Formel Länge O(p(n 2 )) hat und wir sie direkt, Schritt für Schritt, aus der Eingabe (für ϕ start ) und der Übergangstabelle von M (für ϕ move ablesen können, brauchen wir nur Zeit O(p(n) 2 ). Wenn w von der TM akzeptiert wird, wählen wir eine akzeptierende Berechnung der Länge i p(n). Dies ergibt eine Belegung aller Variablen: gi t = true wenn in der gegebenen Berechnung der Zustand in Zeit t dem von q i gleicht, analog für ke t und s t j,r. Es ist klar, dass da die Berechnung akzeptierend ist, sind alle Konjunktionen von ϕ w wahr, deswegen ist ϕ w wahr. Wenn w erfüllbar ist, wird w akzeptiert. in der Tat, für die gegebene Belegung der Variablen, da ϕ all = true, beschreiben die true Variablen immer eine real existierende Berechnung. Dann bedeutet ϕ start = true, dass die Berechnung mit dem Eingabewort w anfängt. Und aus ϕ accept = true ergibt sich, dass diese Berechnung w akzeptiert. Bemerkung 2. Im Kontrast, für die disjunktive Normalform (DNF) ist die Erfüllbarkeit in linearer Zeit entscheidbar: die Formel ϕ = ϕ 1 ϕ 2... ϕ n ist erfüllbar g.d.w. ϕ i erfüllbar ist für ein i = 1,..., { }. Wenn ϕ i Konjunktion von Literalen ist, ist ϕ i erfüllbar g.d.w. sie nicht x sowie x enthält. Dann belegen wir die Variablen wie folgt: true α(x) = false wenn x in ϕ liegt sonst. Warum arbeiten wir dann mit KNF und nicht mit DNF? Weil DNF exponentiell größer sein kann: Beispiel 1. Die Formel ϕ n = (x 1 y 1 ) (x 2 y 2 )... (x n y n ) die eine KNF der Länge O(n) ist, hat eine DNF länger als 2 n : es ist die Disjunktion aller 2 n Formeln n wobei für x oder y steht (beliebig kombiniert). Z.B. ϕ 2 = (x 1 y 1 ) (x 2 y 2 ) (x 1 x 2 ) (x 1 y 2 ) (x 2 y 1 ) (x 2 y 2 ) und ϕ3 = (x 1 y 1 ) (x 2 y 2 ) (x 3 y 3 ) (x 1 x 2 x 3 ) (x 1 x 2 y 3 ) (x 1 y 2 x 3 ) (x 1 y 2 y 3 ) (y 1 x 2 x 3 ) (y 1 x 2 y 3 ) (y 1 y 2 x 3 ) (y 1 y 2 y 3 ) 7.7 Weitere N P-vollständige Probleme Satz 1. Sei L eine N P-vollständige Sprache. Dann ist jede Sprache in N P, auf die L in polynomialer Zeit reduziert werden kann, auch N P-vollständig.
151 7.7. WEITERE N P-VOLLSTÄNDIGE PROBLEME 147 Beweis. Sei L 0 Γ eine Sprache der Klasse N P, und sei f Σ Γ eine Reduktion von L Σ auf L 0 in polynomialer Zeit. Wir beweisen, dass L 0 N P- vollständig ist. Für jede Sprache L (Σ ) der Klasse N P gibt es eine Reduktion g (Σ ) Σ von L nach L in polynomialer Zeit. Es genügt zu zeigen, dass die zusammengesetzte Abbildung f(g(x)) von (Σ ) nach Γ eine Reduktion in polynomialer Zeit von L nach L 0 ist. Damit ist die N P-Vollständigkeit von L 0 bewiesen. Für jedes Wort x über Σ gilt x L g(x) L f(g(x)) L 0, also müssen wir nur zeigen, dass f(g(x)) eine Funktion der Klasse FP ist. Sei M eine TM, die f berechnet und die polynomiale Zeitkomplexität p(n) hat, und sei M eine TM, die g berechnet und die polynomiale Zeitkomplexität q(n) hat. Dann haben wir eine 2-Band Maschine M, die auf Band 1 die Maschine M simuliert (in q(n) Schritten) und das Ergebnis auf Band 2 kopiert, wo sie die Maschine M simuliert (in p(q(n)) Schritten). Das Ergebnis von M auf Band 2 ist das Wort f(g(x)), das in O(p(q(n))) Schritten berechnet wurde. Beispiel 1 (3-SAT). Wir wissen, dass 2-SAT zu P gehört, siehe Beispiel 3 im Abschnitt 7.3. Trotzdem ist 3-SAT, d.h., das Problem der Erfüllbarkeit für Formeln, die in KNF höchstens drei Literale je Klausel enthalten, NP-vollständig: 1. 3-SAT gehört zu N P klar. 2. Für SAT existiert eine Reduktion in polynomialer Zeit auf 3-SAT: In der Tat kann jede Klausel aus vier Literalen mit zwei Klauseln aus je drei Literalen a 1 a 2 a 3 a 4 (a 1 a 2 b) ( b a 3 a 4 ) ersetzt werden. Es ist klar, dass a 1 a 2 a 3 a4 genau dann erfüllt ist, wenn die letzte Formel mit b = true oder b = false erfüllt. Analog wird mit drei Klauseln ersetzt: a 1 a 2 a 3 a 4 a 5 (a 1 a 2 b) ( b a 3 c) ( c a 4 a 5 ) usw. Diese Übersetzung dauert lineare Zeit O(n), denn für jede Klausel der Länge n benötigen wir n 2 Klauseln der Länge 3. Beispiel 2 (INDEPENDENT SET). Eine Menge von Knoten eines Graphen ist abhängig wenn sie keine kanten enthält. Das Problem INDEPENDENT SET hat Eingabe: Graph G und zahl k Ausgabe: JA g.d.w. G eine unabhängige Menge von k Knoten besitzt. Dieses Problem ist N P-vollständig. In der Tat: (1) Es liegt in N P, da wir als Zerfifikat eine Menge D von Knoten nehmen können.. In polynomialer Zeit überprüfen wir, ob D anhängig ist.
152 148 KAPITEL 7. KOMPLEXITÄT VON ALGORITHMEN (2) 3-SAT eine Reduktion von INDEPENDENT SET besitzt. Die ordnet jede Formel ϕ = ϕ... ϕ n den ungerichteten Graphen f(ϕ) zu, der für jede Klausel ϕ i = α β γ ein Dreieck besitzt. α β γ Diese Dreiecke sind so verbunden, dass zwischen zwei Knoten verschiedene Dreiecke genau dann eine kante führt, wenn sie mit Literalen x und x markiert werden. Z.B. für ϕ = (x y z) ( x y z) haben wir x y z x u Die Konstruktion von f(ϕ) dauert Zeit O(k) für Formeln ϕ der Länge k. Und es gilt ϕ erfüllbar, g.d.w. f(ϕ) unabhängige Menge von n Knoten besitzt. In der Tat, ist ϕ erfüllbar, wählen wir einen true-knoten in jedem Dreieck. Dies ergibt n Knoten und keine Kanten. Umgekehrt, hat f(ϕ) eine unabhängige Menge D von n Knoten, dann (da in jedem der n Dreiecke höchstens ein Knoten in D liegt) hat jedes Dreieck genau einen Knoten in D. Wir belegen die Variablen so, dass die Knoten in D true sind da D unabhängig ist, gibt es eine solche Belegung. In jeder Klausel von ϕ gibt es eine true-literal, deswegen ist ϕ true. Beispiel 3 (NODE COVER). Eine Menge D von Knoten heißt Knoten-Überdeckung wenn jede Kante einen Knoten in D besitzt. Das problem NODE COVER hat Eingabe: Graph G und Zahl k Ausgabe: JA wenn eine Knotenüberdeckung von k Knoten existiert. Auch dieses problem ist N P-vollständig: wir haben eine triviale Reduktion INDEPENDENT SET p NODE COVER Es genügt zu beobachten, dass eine menge D C von Knoten unabhängig ist g.d.w. ihr Komplement V D eine Knotenüberdeckung ist. Beispiel 4 (3-FÄRBUNG.). Dies ist das Problem, ob ein gegebener Graph mit drei Farben gefärbt werden kann. Während 2-FÄRBUNG zu P gehört (Beispiel 6 in 7.1), zeigen wir jetzt, dass 3-FÄRBUNG N P-vollständig ist. Also gilt auch hier: falls jemand einen effizienten Algorithmus für 3-FÄRBUNG findet, beweist er P = N P! 1. 3-FÄRBUNG ist in N P. Falls eine 3-Färbung der Knoten vorgeschlagen wird, können wir in linearer Zeit entscheiden, ob sie korrekt ist. z
153 7.7. WEITERE N P-VOLLSTÄNDIGE PROBLEME SAT läßt sich in polynomialer Zeit auf 3-FÄRBUNG reduzieren. Um den zweiten Teil zu beweisen, benutzen wir den folgenden Hilfsgraphen b c a d Hilfsgraph Wenn seine Knoten mit drei Farben, z.b. weiß, schwarz, blau gefärbt werden gilt: eq-d-schwarz (1) Falls a, b und c schwarz sind, muß d auch schwarz sein. (Das ist leicht zu überprüfen, denn falls b und c schwarz sind, ist keiner der beiden Knoten direkt unter b und c schwarz und die Spitze des rechten Dreiecks muß also schwarz sein. Dasselbe gilt dann für das linke Dreieck.) eq-d-weiss (2) Falls a oder b oder c weiß ist, darf d weiß sein. Genauer: färben wir a, b, c so mit den drei Farben, so dass mindestens einmal weiß benutzt wird, dann läßt sich der ganze Hilfsgraph so färben, dass d weiß wird. (Das ist auch leicht zu überprüfen). Wir konstruieren jetzt für jede Boolesche Formel φ mit Klauseln aus drei Literalen einen Graphen G φ, so dass φ ist erfüllbar G φ ist 3-färbbar. Der Graph G φ hat drei verschiedene Typen von Knoten. Typ 1 sind drei Knoten, die mit den drei Farben markiert werden und ein Dreieck formen: S B W Typ 2: für jede Variable x der Formel φ wird ein extra Dreieck an den Knoten B angehängt. Die beiden freien Knoten dieses Dreiecks werden mit x und x markiert. Z.B. erhalten wir, falls φ nur die Variablen x, y, z hat, den folgenden Graphen:
154 150 KAPITEL 7. KOMPLEXITÄT VON ALGORITHMEN x x y y z z S B W Typ 3: für jede Klausel α β γ der Formel φ nehmen wir den obigen Hilfsgraphen: β γ α W und die vier Knoten, die mit α, β, γ, W markiert sind, werden mit den gerade markierten Knoten des Typs 2 identifiziert. Beispiel: für φ = y x z (1 Klausel) erhalten wir den Graphen x x y y z z S B W Wir beweisen zuerst: φ erfüllbar G φ ist 3-färbbar. Für die gegebene Belegung der Variablen mit φ = true färben wir wie folgt:
155 7.7. WEITERE N P-VOLLSTÄNDIGE PROBLEME S, B und W wie angedeutet (schwarz, blau, weiß), 2. Knoten des Typs 2 sind weiß, falls ihr Wert true ist, und schwarz, falls der Wert false ist, 3. in jedem der Hilfsgraphen ist mindestens einer der Knoten a, b, c weiß gefärbt, deshalb können wir eine Färbung finden, die auch d weiß färbt finden, siehe (2) oben. Umgekehrt beweisen wir: G φ 3-färbbar φ erfüllbar. Wir können, ohne Beschränkung der Allgemeinheit, annehmen, dass die gegebene Färbung die Knoten des Typs 1 wie angedeutet färbt. Wir setzen dann x = true der x-knoten des Typs 2 ist weiß. Wir beweisen, dass φ = true, d.h., dass in jeder Klausel α β γ von φ eines der Literale α, β, γ true ist. Da kein Knoten des Typs 2 blau gefärbt werden kann (wegen der Kante zu B), sind sie schwarz oder weiß. Aufgrund der Eigenschaft (1) des Hilfsgraphen können nicht α, β, γ gleichzeitig schwarz sein also ist α, β oder γ true. Es ist klar, dass für eine Formel φ der Größe n = Anzahl aller Variablen + Anzahl aller Klauseln die Konstruktion des Graphen G φ in linearer Zeit O(n) durchführbar ist. Beispiel 5. k-färbung ist NP-vollständig für jedes k 3. Wir können z.b. 3- FÄRBUNG auf 4-FÄRBUNG in polynomialer Zeit wie folgt reduzieren: ein Graph G ist genau dann 3-färbbar, wenn der folgende Graph Neuer Knoten G 4-färbbar ist. Bemerkung 1. Ein Graph ist planar, falls er so in der Ebene gezeichnet werden kann, dass die Kanten sich nicht überkreuzen. Das k-färbungsproblem für planare Graphen ist 1. trivial für k 4, denn jeder planare Graph ist 4-färbbar, aber trotzdem 2. N P-vollständig für k = 3 (vergl. Bemerkung 4 in Abschnitt 6.5). Wir erinnern daran, dass ein Hamiltonscher Kreis in einem ungerichteten Graphen ein Kreis ist, der jeden Knoten genau einmal besucht. Das Problem HAMILTON- SCHER KREIS hat als Eingabe einen Graphen G und wir sollen entscheiden, ob G einen Hamiltonschen Kreis hat. Beispiel 6 (HAMILTON CIRCUIT). Eingabe: Ein Graph Ausgabe: JA wenn ein Hamiltonscher Kreis (der jeden Knoten genau einmal durchgeht) existiert.
156 152 KAPITEL 7. KOMPLEXITÄT VON ALGORITHMEN Bemerkung 2. Dies ist ein Spezialfall von TSP (Travelling Salesman Problem): die Städte sind die n Knoten des Graphen, ihre ABstände sind definiert durch 1 wenn ı j eine Kante ist d ij = n + 1 sonst. Wenn eine Route mit Gesamtdistanz n existiert, ist sie ein Hamiltonscher kreis. Umgekehrt, wenn ein Hamiltonscher Kreis existiert, ist er eine Route von Gesamtdistanz n. Wir zeigen jetzt, dass HAMILTON CIRCUIT N P-vollständig ist, indem wir eine Reduktion 3-SAT p HAMILTON CIRCUIT konstruieren. Gegeben eine boolsche Formel ϕ in 3-KNF, konstruieren wir einen Graphen f(ϕ), der einen Hamiltonschen Kreis besitzt g.d.w. ϕ erfüllbar ist. Die Formel ϕ hat n Klauseln ϕ = ϕ 1 ϕ... ϕ n Für jede Variable x in ϕ formen wir einen Hilfsgraphen H(x) von 2n + 2 Knoten wie folgt: (x, 1) (x, 2) a ( x, 1) ( x, 2) (x, n) b ( x, n) All diese Graphen, für alle Variablen x, y,..., t von ϕ, setzen wir in einen Kreis:
157 7.7. WEITERE N P-VOLLSTÄNDIGE PROBLEME 153 Graph K: a H(x) b a H(y) b a H(t) b Wie sehen Hamiltonsche Kreise in diese Graphen aus? Es gibt viele! Wir starten im obersten Knoten a und jedes mal wenn wir in einem Knoten von H(u), u eine Variable, außer b sehen haben wir eine Wahl, die durch die Antwort auf die Frage kommt jetzt u vor u? bestimmt wird. Deswegen ergibt jede Belegung der variablen von ϕ einen Hamiltonschen Kreis: wir beantworten die obere Frage mit u kommt vor u g.d.w. u = true.
158 154 KAPITEL 7. KOMPLEXITÄT VON ALGORITHMEN Beispiel: wenn ϕ nur 3 Klauseln hat mit Variablen x, y haben wir K (x, 1) (x, 2) (y, 1) (y, 2) a b a b ( x, 1) ( x, 2) ( y, 1) ( y, 2) Es ist klar, dass genau 4 Hamiltonsche Kreise in dem obere Knoten a starten. Jetzt nehmen wir eine Klausel ϕ j = α β γ und formen den Hilfsgraphen von 6 Knoten: F j = α γ β α β γ Der besitzt 3 Hamiltonsche Kreise: wenn wir in α starten genau einen, analog mit β, γ. Wir verknüpfen F j zum Hilfsgraphen wie folgt: (a) wenn α = u in F j eine Variable ist, wählen wir i = 1,..., n und geben Kanten (u, i) α und α ( u, i)
159 7.7. WEITERE N P-VOLLSTÄNDIGE PROBLEME 155 hinzu: a (u,i) ( u,i) u K(u) u Analog wenn α = u eine negierte Variable ist, geben wir Kanten b ( u, i) α und α (u, i) (b) analog verbinden wir β und γ von F j (c) die Wahl i ist so, dass wir jeden Knoten von K mit höchstens eionem Knoten von F 1,..., F n verbinden. Satz 2. Die Formel ϕ ist erfüllbar g.d.w. der Graph f(ϕ) einen Hamiltonschen Kreis besitzt. Proof. (1) Nehmen wir an, dass ϕ erfüllbar ist. Die erfüllende Belegung bestimmt einen Hamiltonschen Kreis von K. Von dem Machen wir einen Abstecken zu f j, für eine Klausel ϕ j = α β γ, wie folgt: wir wählen ein true-literal von ϕ j, z.b. α = x. Dann haben wir im Kreis x vor x und der Abstecken geht von (x, i) in K zu x in F j (oben). Wir haben den Hamiltonschen Kreis von F j der in x (unten) endet. Wir kehren dann zu ( x, i) oder ( x, i H ) in K zurück. Dies funktioniert, da im Kreis X vor x kommt (denn x = true). Analog wenn z.b. α = x true ist: der Abstecken startet in ( x, i) und endet in (x, i), das ist so in Ordnung, weil x vor x im Kreis kommt. Dies erweitert den Hamiltonschen Kreis von K auf einen ganzen Graphen f(ϕ). (2) Nehmen wir an, dass f(ϕ) einen Hamiltonschen kkreis besitzt. Die Belegung u = true g.d.w. in H(u) u vor u kommt macht dann ϕ true. Denn für jede Klausel ϕ j = α β γ gibt es im gegebenen Kreis eine Kante zum oberen 3-Zyklus von F j. Wenn es die Kante z.b. zu α ist, ist α true. In der Tat: Wenn α = u eine Variable ist, haben wir (nur) eine Verbindung wie im Bild 2. Der Einzige Hamiltonsche Kreis von F j, der in α anfängt, endet in u unten und geht zu ( u, i) in K zurück. Da im Kreis deswegen u vor u kommt, ist u = true;
160 156 KAPITEL 7. KOMPLEXITÄT VON ALGORITHMEN Wenn α = u, ist das Argument analog: im Kreis kommt u vor u, deswegen u = false, denn α = true. Folgerung 8. TSP ist N P-vollständig. In der tat, wir wissen schon, dass TSP in N P liegt, und oben haben wir eine Reduktion gesehen. HAMILTON CYCLE p TSP 7.8 Raumkomplexität Bisher haben wir einen Algorithmus als effizient betrachtet, falls er wenig Zeit braucht. Ein anderer wichtiger Gesichtspunkt ist der Speicherbedarf eines Algorithmus. Wie die Zeitkomplexität ist auch die Raumkomplexität prinzipiell von der Implementation unabhängig, falls wir nur die Frage stellen, ob polynomial großer Speicher genügt. Deswegen können wir wieder Turingmaschinen als Berechnungsmodell verwenden. Wir sagen, dass eine TM die Raumkomplexität s(n) hat, wobei s(n) eine Funktion über der Menge N aller natürlichen Zahlen ist, falls für jede Eingabe w der Länge n die TM hält und der Kopf höchstens s(n) Bandfelder durchgegangen ist. Definition. Wir bezeichnen mit PSPACE die Klasse aller formalen Sprachen, die von einer TM mit polynomialer Raumkomplexität akzeptiert werden können. Genauer: eine Sprache L gehört zur Klasse PSPACE, falls es eine Turingmaschine M und ein Polynom p(n) gibt, so dass L = L(M) und M hat die Raumkomplexität p(n). Beispiel 1. SAT kann durch eine TM mit linearer Raumkomplexität gelöst werden. Wenn eine Formel ϕ mit n Variablen gegeben wird, brauchen wir Raum n um all Belegungen zu generieren: erst Schreiben wir und dann wird eine binäre Addition x = x + 1 benutzt bis erreicht wird. Gegeben eine Belegung, brauchen wir nur Raum n um den Wert von ϕ mit der gegebenen Belegung zu berechnen. Wenn true ankommt, halte und akzeptiere, wenn false ankommt, dann nimm die nächste Belegung. Wenn alle Belegungen von bis immer false ergeben haben, halte und akzeptiere nicht. bem-pspace Bemerkung Die vorher eingeführten Klassen P und N P werden oft PT IME und N PT IME bezeichnet, um sie von PSPACE zu unterscheiden. bem-time-in-space 2. Es gilt PT IME PSPACE denn in einem Schritt kann eine TM nur ein Bandfeld besuchen. Es folgt, dass Probleme wie 2-FÄRBUNG, 2-ERFÜLLBARKEIT usw. in PSPACE liegen.
161 7.9. RAUMKOMPLEXITÄT VON MEHR-BAND-TM Das Problem der PRESSBURGER ARITHMETIK gehört nicht zur Klasse PSPACE. Erinnern wir deren, dass dieses Problem doppelt exponentielle Zeitkomplexität hat. Und es gilt Lemma 1. Jede NTM mit Raumkomplexität p(n9 hat, für eine Konstante C, die Zeitkomplexität 2 Cp(n). Es gibt eine Konstante C, so dass die Berechnung eines Wortes der Länge n höchstens 2 Cp(n) Konfigurationen durchläuft. In der Tat haben die Konfigurationen die Form (q, s 1... s i... s p(n) ), wobei q ein Zustand ist, s 1... s p(n) ist der Inhalt des Bandes und i ist die Kopfposition. Falls die Maschine r Zustände und m Symbole in Σ {#} hat, ist die Zahl der Konfigurationen gleich r (für Zustände q) mal p(n) (für Kopfpositionen i) mal der Zahl m p(n) aller Wörter s 1... s p(n) über Σ {#}. Es gilt für eine geeignete Konstante C. rp(n)m p(n) < rm p(n) m p(n) = rm 2p(n) < 2 Cp(n) 7.9 Raumkomplexität von mehr-band-tm Bei mehreren Bänden, wobei Band 1 das Band mit der Eingabe ist, nehmen wir immer an, dass Band 1 read-only ist. Dann wir der Raum, der die Eingabe auf Band 1 nimmt, nicht zugerechnet: Definition. Eine k-band-tm mit read-only Band 1 hat Raumkomplexität s(n) wenn für jede Eingabe der Länge n jede Berechnung höchstens s(n) Zellen, auf allen Bändern 2-k zusammen, braucht. Bemerkung 1. Dies ist eine vernünftige Darstellung der reellen Situation, wo die Eingabe uns auf einem Medium überreicht wird und wir müssen entscheiden, wie viel zusätzlichen Speicher wir brauchen. Die Definition macht auch Sinn bei Funktionen s(n) die kleiner als die lineare sind: Beispiel 1 (REACHABILITY). hat Raumkomplexität O(log 2 n). D.h., gegeben ein Graph G mit Knoten 1,..., n können wir in diesem sublinearen Raum entscheiden, ob ein (gerichteter) Pfad von 1 nach n führt. Dafür betrachten wir beliebige Knoten x und y und fragen: gibt es einen Pfad der Länge 2 i von x nach y? Diese boolsche Aussage wird durch REACH(x, y, i) bezeichnet. Z.B. REACH(x, y, i) = true g.d.w. x = y oder x y ein Pfeil ist. Diese Aussage können wir ohne zusätzlichen Raum aus der Eingabe, d.h., der Kanten von G, feststellen.
162 158 KAPITEL 7. KOMPLEXITÄT VON ALGORITHMEN Wenn REACH(x, y, i) für alle x und y festgestellt wurde, stellen wir REACH(x, y, i+ 1) wie folgt fest: REACH(x, y, i+1) = true g.d.w. es z mit REACH(x, z, i) REACH(z, y, i)= true gibt. In der tat, gegeben ein Pfad der Länge 2 i+1 von x nach y, sei z der mittlere Knoten dieses Pfades. Wir berechnen dies auf einer 2-Band-TM, wo Band 2 einen Knoten z = 1,..., n nach dem anderen nimmt und RACH(x, z, i) im Raum 0 berechnet. Implementierung: auf Band 2 schreiben wir x, y (Raum O(log(n)) und nehmen alle Knoten z = 1,..., n. Wir berechnen REACH(x, z, i) und wenn false, nehmen wir den nächsten Knoten z; wenn true, wird REACH(x,z,i) durch REACH(z, y, i) ersetzt und wenn true, ist REACH(x, y, i+1) = true. Wenn bis z = n nie zwei true Werte berechnet werden, ist REACH(x, y, i + 1) = false. In jedem Augenblick dieser Berechnung speichert man höchstens log n Tripeln (x, y, i) die Länge 3 log n haben, deswegen reicht Raum log n 2 = O(log 2 n). Bemerkung 2. Bisher haben wir nur mit deterministischen TM gearbeitet. Es zeigt sich, dass die nichtdeterministischen nichts neues bringen: die Klasse NPSPACE braucht man nicht! Dies besagt der folgende Satz: Satz 1 (Savitch-Satz). Jede nichtdeterministische Turingmaschine mit polynomialer Raumkomplexität kann durch eine (deterministische) Turingmaschine mit polynomialer Raumkomplexität simuliert werden. Beweis. Sei M eine NTM mit Raumkomplexität p(n) > n, dann konstruieren wir eine (deterministische) Turingmaschine M, mit der Raumkomplexität O(p 2 (n)), die dieselbe Sprache akzeptiert. Wir können annehmen, dass M das Band löscht, bevor sie im finalen Zustand hält. Dann ist (q F, #) die einzige akzeptierende Konfiguration. Aus dem Lemma oben folgt, dass für jedes von M akzeptierte Wort s 1... s n eine akzeptierende Berechnung von höchstens 2 Cp(n) Schritten existiert. In der Tat, nehmen wir die kürzeste akzeptierende Berechnung von s 1... s n, dann wird keine der 2 Cp(n) Konfigurationen wiederholt. Es gilt: M akzeptiert s 1... s n genau dann, wenn (q 0, s 1... s n ) (q F, #). Sei G der Graph dessen Knoten alle die 2 Cp(n) Konfigurationen sind und die kanten K K bedeuten, dass K eine der Folgekonfigurationen von K ist. Wir haben oben gesehen, dass die Entscheidung, ob ein Pfad von der Initialkonfiguration K i = (q 0, s 1... s n ) in die akzeptierende Konfiguration K a = w F, #) führt sich im Raum O(log 2 2 Cp(n) ) = O(C 2 p 2 (n)) = O(p 2 (n)) berechnen lässt. Dann können wir unsere NTM mit der TM, die diese Entscheidung berechnet, simulieren: ein Wort wird von der NTM genau dann akzeptiert, wenn die TM Antwort true berechnet. Bemerkung 3. Die Klasse PSPACE enthält also alle Probleme, für die es (Zeit-) effizient entscheidbar ist, ob eine angebotene Lösung wirklich das Problem löst. Z. B. TSP, 3-FÄRBBARKEIT usw. Es ist nicht bekannt, ob N PT IME = PSPACE gilt. Wir zeigen jetzt ein interessantes Beispiel eines Prolems, für das nicht klar ist, ob es zu N PT IME gehört, da es keinen vernünftigen Begriff von angebotener Lösung gibt, das aber zu PSPACE gehört.
163 7.9. RAUMKOMPLEXITÄT VON MEHR-BAND-TM 159 Beispiel 2 (QUANTIFIZIERTE BOOLESCHE FORMELN). Eingabe: Eine quantifizierte Boolesche Formel φ ohne freie Variablen. Ausgabe: JA genau dann, wenn φ den Wert true hat. Bisher sprachen wir nur über Boolesche Formeln ohne Quantoren ( x), ( x). Die quantifizierten Booleschen Formeln, QBF, in Variablen x i (i = 1,..., n) können wie folgt definiert werden: 1. Jede Variable x i ist eine QBF 2. Die Konstanten 1 (true) und 0 (false) sind QBF 3. Wenn E 1, E 2 zwei QBF sind, sind auch E 1 E 2 und E 1 QBF 4. Wenn E eine QBF ist, ist auch (für jede Variable x) QBF n..)e Notation. E[ 1 / x ] ist die Formel E in der die Varibale x immer durch true ersetzt wird. Analog E[ 0 / x ]. Definition. Der Wert einer geschlossenen boolschen Formel E, WERT(E) = true oder false definiert man rekursiv: Formel Wert 1 true 0 false E F true g.d.w. WERT(E) = WERT(F ) = true E true g.d.w. WERT(E) = false ( x)e true g.d.w. die Werte von E[ 1 / x ] und E[ 0 / x ] beide true sind. x)e analog, aber wenigstens einmal true. Bemerkung 4. Die Pränex-Normalform, in der alle Quantoren stehen, lässt sich in Zeit O(n 2 ) schreiben. Erst werden die Variablen umbenannt so, dass alle Quandoren verschiedene Variablen quantifizieren. Bei einer Formel der Länge n (mit n Variablen) dauert dies Zeit O(n). Dann werden alle Quantoren nach vorne geschoben. Dies dauert O(n) Zeit pro Quantor und wir haben höchstens n Quantoren. Algorithmus für QBF Gegeben eine Pränex-Normal-Form ϕ der Längen mit Variablen x 1... x k, berechnen wir ihren Wert und benutzen Raum O(n 2 ). Dies passiert dadurch, dass wir einen Quantor nach dem anderen abbauen. Wenn ϕ keinen Quantor besitzt, besitzt sie auch keine Variable. Dann bewerten wir ϕ ohne Zusatzraum. Beispiel: die Formel 0 1 (0 1) wird bewerten auf dem Raum wo sie steht: wir ersetzen 1 durch 0, dann 0 0 durch 0 usw. Besitzt ϕ Quantoren und der erste ist x i, d.h. u = x i ψ, dann schreiben wir neben ϕ die Nummer der Variablen x und die Formel ψ[ 1 / xi ]. Dann bewerten diese
164 160 KAPITEL 7. KOMPLEXITÄT VON ALGORITHMEN (rekursiv: diese Formel hat einen Quantor weniger als ϕ. Wenn diese Bewertung false ergibt, hat ϕ Wert false. Wenn sie true ergibt, überschreiben wir ψ[ 1 / x ] durch ψ[ 0 / x ], ohne neuen Raum zu benutzen. Jetzt bewerten wir ψ[ 0 / x ] und der Wert ist gleich dem Wert von ϕ. Analog wenn ϕ = x ψ: wir bewerten ψ[ 1 / x ], wenn true, hat ϕ den Wert true. Wenn false überschreiben wir ψ[ 1 / x ] durch ψ[ 0 / x ] und bewerten, der Wert ist gleich dem Wert von ϕ. Die Formel ϕ der Länge n hat höchstens n Quantoren und in der ganzen rekursiven Prozedur stehen höchstens n Formeln (plus Eingaben über Variablen) hintereinander. Beispiel: ϕ = x 2 x 1 x 3 (x 1 x 3 ) x 2 ergibt Berechnungen des Typs ϕ x 2 x 1 x 3 (x 1 x 3 ) 1 x 1 x 3 (0 x 3 ) 1 x 3 (0 0) 1 Das Bedeutet, dass wir höchstens n Paare (Variable, Formel) hintereinander schreiben und da die Formel kürzlich als ϕ sind, brauchen wir nur Raum O(n 2 ). Satz 2 (ohne Beweis). QBF hat keine Zertifikatensprache. Genauer: Wenn es eine Zertifikatensprache für QBF gibt, gilt N P = NPSPACE.
THEORETISCHE INFORMATIK
THEORETISCHE INFORMATIK Vorlesungsskript Jiří Adámek @ Institut für Theoretische Informatik Technische Universität Braunschweig Dezember 28 Inhaltsverzeichnis Endliche Automaten. Mathematische Grundbegriffe......................
THEORETISCHE INFORMATIK I
THEORETICHE INFORMATIK I Vorlesungsskript Jiří Adámek Institut für Theoretische Informatik Technische Universität Braunschweig Juni 23 Inhaltsverzeichnis Endliche Automaten. Mathematische Grundbegriffe.......................
Programmiersprachen und Übersetzer
Programmiersprachen und Übersetzer Sommersemester 2010 19. April 2010 Theoretische Grundlagen Problem Wie kann man eine unendliche Menge von (syntaktisch) korrekten Programmen definieren? Lösung Wie auch
Informatik IC2. Balazs Simon 2005.03.26.
Informatik IC2 Balazs Simon 2005.03.26. Inhaltsverzeichnis 1 Reguläre Sprachen 3 1.1 Reguläre Sprachen und endliche Automaten...................... 3 1.2 Determinisieren.....................................
Primzahlen und RSA-Verschlüsselung
Primzahlen und RSA-Verschlüsselung Michael Fütterer und Jonathan Zachhuber 1 Einiges zu Primzahlen Ein paar Definitionen: Wir bezeichnen mit Z die Menge der positiven und negativen ganzen Zahlen, also
4.9 Deterministische Kellerautomaten Wir haben bereits definiert: Ein PDA heißt deterministisch (DPDA), falls
4.9 Deterministische Kellerautomaten Wir haben bereits definiert: Ein PDA heißt deterministisch (DPDA), falls δ(q, a, Z) + δ(q, ɛ, Z) 1 (q, a, Z) Q Σ. Die von einem DPDA, der mit leerem Keller akzeptiert,
Grundbegriffe der Informatik
Grundbegriffe der Informatik Einheit 15: Reguläre Ausdrücke und rechtslineare Grammatiken Thomas Worsch Universität Karlsruhe, Fakultät für Informatik Wintersemester 2008/2009 1/25 Was kann man mit endlichen
Grundlagen Theoretischer Informatik I SoSe 2011 in Trier. Henning Fernau Universität Trier [email protected]
Grundlagen Theoretischer Informatik I SoSe 2011 in Trier Henning Fernau Universität Trier [email protected] 1 Grundlagen Theoretischer Informatik I Gesamtübersicht Organisatorisches; Einführung Logik
Deterministische Turing-Maschinen (DTM) F3 03/04 p.46/395
Deterministische Turing-Maschinen (DTM) F3 03/04 p.46/395 Turing-Machine Wir suchen ein Modell zur formalen Definition der Berechenbarkeit von Funktionen und deren Zeit- und Platzbedarf. Verschiedene Modelle
Motivation. Formale Grundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen. Informales Beispiel. Informales Beispiel.
Kontextfreie Kontextfreie Motivation Formale rundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen Bisher hatten wir Automaten, die Wörter akzeptieren Frank Heitmann [email protected]
Grundlagen der Theoretischen Informatik
Grundlagen der Theoretischen Informatik 3. Endliche Automaten (V) 21.05.2015 Viorica Sofronie-Stokkermans e-mail: [email protected] 1 Bis jetzt Determinierte endliche Automaten (DEAs) Indeterminierte
Informationsblatt Induktionsbeweis
Sommer 015 Informationsblatt Induktionsbeweis 31. März 015 Motivation Die vollständige Induktion ist ein wichtiges Beweisverfahren in der Informatik. Sie wird häufig dazu gebraucht, um mathematische Formeln
1 Mathematische Grundlagen
Mathematische Grundlagen - 1-1 Mathematische Grundlagen Der Begriff der Menge ist einer der grundlegenden Begriffe in der Mathematik. Mengen dienen dazu, Dinge oder Objekte zu einer Einheit zusammenzufassen.
Grammatiken. Einführung
Einführung Beispiel: Die arithmetischen Ausdrücke über der Variablen a und den Operationen + und können wie folgt definiert werden: a, a + a und a a sind arithmetische Ausdrücke Wenn A und B arithmetische
Einführung. Vorlesungen zur Komplexitätstheorie: Reduktion und Vollständigkeit (3) Vorlesungen zur Komplexitätstheorie. K-Vollständigkeit (1/5)
Einführung 3 Vorlesungen zur Komplexitätstheorie: Reduktion und Vollständigkeit (3) Univ.-Prof. Dr. Christoph Meinel Hasso-Plattner-Institut Universität Potsdam, Deutschland Hatten den Reduktionsbegriff
Wortproblem für kontextfreie Grammatiken
Wortproblem für kontextfreie Grammatiken G kontextfreie Grammatik. w Σ w L(G)? Wortproblem ist primitiv rekursiv entscheidbar. (schlechte obere Schranke!) Kellerautomat der L(G) akzeptiert Ist dieser effizient?
Codierungstheorie Rudolf Scharlau, SoSe 2006 9
Codierungstheorie Rudolf Scharlau, SoSe 2006 9 2 Optimale Codes Optimalität bezieht sich auf eine gegebene Quelle, d.h. eine Wahrscheinlichkeitsverteilung auf den Symbolen s 1,..., s q des Quellalphabets
Vorlesung Theoretische Informatik
Vorlesung Theoretische Informatik Automaten und Formale Sprachen Hochschule Reutlingen Fakultät für Informatik Masterstudiengang Wirtschaftsinformatik überarbeitet von F. Laux (Stand: 09.06.2010) Sommersemester
1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:
Zählen und Zahlbereiche Übungsblatt 1 1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage: Für alle m, n N gilt m + n = n + m. in den Satz umschreiben:
Grundlagen der Theoretischen Informatik, SoSe 2008
1. Aufgabenblatt zur Vorlesung Grundlagen der Theoretischen Informatik, SoSe 2008 (Dr. Frank Hoffmann) Lösung von Manuel Jain und Benjamin Bortfeldt Aufgabe 2 Zustandsdiagramme (6 Punkte, wird korrigiert)
Theoretische Informatik I
Theoretische Informatik I Einheit 2.4 Grammatiken 1. Arbeitsweise 2. Klassifizierung 3. Beziehung zu Automaten Beschreibungsformen für Sprachen Mathematische Mengennotation Prädikate beschreiben Eigenschaften
Mathematische Grundlagen der Informatik 2
Zusammenfassung Math2I Mathematische Grundlagen der Informatik 2 Emanuel Duss [email protected] 12. April 2013 1 Zusammenfassung Math2I Mathematische Grundlagen der Informatik 2 Dieses Dokument basiert
Einführung in die Algebra
Prof. Dr. H. Brenner Osnabrück SS 2009 Einführung in die Algebra Vorlesung 13 Einheiten Definition 13.1. Ein Element u in einem Ring R heißt Einheit, wenn es ein Element v R gibt mit uv = vu = 1. DasElementv
4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.
Binäre Bäume Definition: Ein binärer Baum T besteht aus einer Menge von Knoten, die durch eine Vater-Kind-Beziehung wie folgt strukturiert ist: 1. Es gibt genau einen hervorgehobenen Knoten r T, die Wurzel
Theoretische Grundlagen der Informatik
Theoretische Grundlagen der Informatik Vorlesung am 12.01.2012 INSTITUT FÜR THEORETISCHE 0 KIT 12.01.2012 Universität des Dorothea Landes Baden-Württemberg Wagner - Theoretische und Grundlagen der Informatik
Lineargleichungssysteme: Additions-/ Subtraktionsverfahren
Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als
4. AUSSAGENLOGIK: SYNTAX. Der Unterschied zwischen Objektsprache und Metasprache lässt sich folgendermaßen charakterisieren:
4. AUSSAGENLOGIK: SYNTAX 4.1 Objektsprache und Metasprache 4.2 Gebrauch und Erwähnung 4.3 Metavariablen: Verallgemeinerndes Sprechen über Ausdrücke von AL 4.4 Die Sprache der Aussagenlogik 4.5 Terminologie
Zeichen bei Zahlen entschlüsseln
Zeichen bei Zahlen entschlüsseln In diesem Kapitel... Verwendung des Zahlenstrahls Absolut richtige Bestimmung von absoluten Werten Operationen bei Zahlen mit Vorzeichen: Addieren, Subtrahieren, Multiplizieren
Entscheidungsprobleme. Berechenbarkeit und Komplexität Entscheidbarkeit und Unentscheidbarkeit. Die Entscheidbarkeit von Problemen
Berechenbarkeit und Komlexität Entscheidbarkeit und Unentscheidbarkeit Wolfgang Schreiner [email protected] Research Institute for Symbolic Comutation (RISC) Johannes Keler University,
Das Briefträgerproblem
Das Briefträgerproblem Paul Tabatabai 30. Dezember 2011 Inhaltsverzeichnis 1 Problemstellung und Modellierung 2 1.1 Problem................................ 2 1.2 Modellierung.............................
Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können.
6. Bäume Lernziele 6. Bäume Lernziele: Definition und Eigenschaften binärer Bäume kennen, Traversierungsalgorithmen für binäre Bäume implementieren können, die Bedeutung von Suchbäumen für die effiziente
6.2 Petri-Netze. kommunizierenden Prozessen in der Realität oder in Rechnern Verhalten von Hardware-Komponenten Geschäftsabläufe Spielpläne
6.2 Petri-Netze WS 06/07 mod 621 Petri-Netz (auch Stellen-/Transitions-Netz): Formaler Kalkül zur Modellierung von Abläufen mit nebenläufigen Prozessen und kausalen Beziehungen Basiert auf bipartiten gerichteten
Anmerkungen zur Übergangsprüfung
DM11 Slide 1 Anmerkungen zur Übergangsprüfung Aufgabeneingrenzung Aufgaben des folgenden Typs werden wegen ihres Schwierigkeitsgrads oder wegen eines ungeeigneten fachlichen Schwerpunkts in der Übergangsprüfung
GTI. Hannes Diener. 6. Juni - 13. Juni. ENC B-0123, [email protected]
GTI Hannes Diener ENC B-0123, [email protected] 6. Juni - 13. Juni 1 / 49 Die Turingmaschine war das erste (bzw. zweite) formale Modell der Berechenbarkeit. Sie wurden bereits 1936 (also lange
3. Zusammenhang. 22 Andreas Gathmann
22 Andreas Gathmann 3. Zusammenhang Eine der anschaulichsten Eigenschaften eines topologischen Raumes ist wahrscheinlich, ob er zusammenhängend ist oder aus mehreren Teilen besteht. Wir wollen dieses Konzept
Grundbegriffe der Informatik
Grundbegriffe der Informatik Kapitel 6: Induktives Vorgehen Thomas Worsch KIT, Institut für Theoretische Informatik Wintersemester 2015/2016 GBI Grundbegriffe der Informatik KIT, Institut für Theoretische
t r Lineare Codierung von Binärbbäumen (Wörter über dem Alphabet {, }) Beispiel code( ) = code(, t l, t r ) = code(t l ) code(t r )
Definition B : Menge der binären Bäume, rekursiv definiert durch die Regeln: ist ein binärer Baum sind t l, t r binäre Bäume, so ist auch t =, t l, t r ein binärer Baum nur das, was durch die beiden vorigen
Absolute Stetigkeit von Maßen
Absolute Stetigkeit von Maßen Definition. Seien µ und ν Maße auf (X, Ω). Dann heißt ν absolut stetig bezüglich µ (kurz ν µ ), wenn für alle A Ω mit µ(a) = 0 auch gilt dass ν(a) = 0. Lemma. Sei ν ein endliches
Reguläre Sprachen Endliche Automaten
Endliche Automaten (Folie 54, Seite 16 im Skript) Einige Vorteile endlicher deterministischer Automaten: durch Computer schnell simulierbar wenig Speicher benötigt: Tabelle für δ (read-only), aktueller
Basis und Dimension. Als nächstes wollen wir die wichtigen Begriffe Erzeugendensystem und Basis eines Vektorraums definieren.
Basis und Dimension Als nächstes wollen wir die wichtigen Begriffe Erzeugendensystem und Basis eines Vektorraums definieren. Definition. Sei V ein K-Vektorraum und (v i ) i I eine Familie von Vektoren
Also kann nur A ist roter Südler und B ist grüner Nordler gelten.
Aufgabe 1.1: (4 Punkte) Der Planet Og wird von zwei verschiedenen Rassen bewohnt - dem grünen und dem roten Volk. Desweiteren sind die Leute, die auf der nördlichen Halbkugel geboren wurden von denen auf
Übung Theoretische Grundlagen
Übung Theoretische Grundlagen Berechenbarkeit/Entscheidbarkeit Nico Döttling November 26, 2009 INSTITUT FÜR KRYPTOGRAPHIE UND SICHERHEIT KIT University of the State of Baden-Wuerttemberg and National Laboratory
2.11 Kontextfreie Grammatiken und Parsebäume
2.11 Kontextfreie Grammatiken und Parsebäume Beispiel: Beispiel (Teil 3): Beweis für L(G) L: Alle Strings aus L der Länge 0 und 2 sind auch in L(G). Als Induktionsannahme gehen wir davon aus, dass alle
Mengensysteme, Wahrscheinlichkeitsmaße
Kapitel 1 Mengensysteme, Wahrscheinlichkeitsmaße Der Großteil der folgenden fundamentalen Begriffe sind schon aus der Vorlesung Stochastische Modellbildung bekannt: Definition 1.1 Eine Familie A von Teilmengen
WS 2008/09. Diskrete Strukturen
WS 2008/09 Diskrete Strukturen Prof. Dr. J. Esparza Lehrstuhl für Grundlagen der Softwarezuverlässigkeit und theoretische Informatik Fakultät für Informatik Technische Universität München http://www7.in.tum.de/um/courses/ds/ws0809
Vorlesung Diskrete Strukturen Graphen: Wieviele Bäume?
Vorlesung Diskrete Strukturen Graphen: Wieviele Bäume? Bernhard Ganter Institut für Algebra TU Dresden D-01062 Dresden [email protected] WS 2013/14 Isomorphie Zwei Graphen (V 1, E 1 ) und (V
Konzepte der Informatik
Konzepte der Informatik Vorkurs Informatik zum WS 2011/2012 26.09. - 30.09.2011 17.10. - 21.10.2011 Dr. Werner Struckmann / Christoph Peltz Stark angelehnt an Kapitel 1 aus "Abenteuer Informatik" von Jens
WS 2009/10. Diskrete Strukturen
WS 2009/10 Diskrete Strukturen Prof. Dr. J. Esparza Lehrstuhl für Grundlagen der Softwarezuverlässigkeit und theoretische Informatik Fakultät für Informatik Technische Universität München http://www7.in.tum.de/um/courses/ds/ws0910
1 topologisches Sortieren
Wolfgang Hönig / Andreas Ecke WS 09/0 topologisches Sortieren. Überblick. Solange noch Knoten vorhanden: a) Suche Knoten v, zu dem keine Kante führt (Falls nicht vorhanden keine topologische Sortierung
Theorie der Informatik
Theorie der Informatik 6. Formale Sprachen und Grammatiken Malte Helmert Gabriele Röger Universität Basel 17. März 2014 Einführung Beispiel: Aussagenlogische Formeln Aus dem Logikteil: Definition (Syntax
Formale Systeme, WS 2012/2013 Lösungen zu Übungsblatt 4
Karlsruher Institut für Technologie Institut für Theoretische Informatik Prof. Dr. Peter H. Schmitt David Farago, Christoph Scheben, Mattias Ulbrich Formale Systeme, WS 2012/2013 Lösungen zu Übungsblatt
Theoretische Informatik 2 (WS 2006/07) Automatentheorie und Formale Sprachen 19
Inhalt 1 inführung 2 Automatentheorie und ormale prachen Grammatiken Reguläre prachen und endliche Automaten Kontextfreie prachen und Kellerautomaten Kontextsensitive und yp 0-prachen 3 Berechenbarkeitstheorie
Der Zwei-Quadrate-Satz von Fermat
Der Zwei-Quadrate-Satz von Fermat Proseminar: Das BUCH der Beweise Fridtjof Schulte Steinberg Institut für Informatik Humboldt-Universität zu Berlin 29.November 2012 1 / 20 Allgemeines Pierre de Fermat
Die Komplexitätsklassen P und NP
Die Komplexitätsklassen P und NP Prof. Dr. Berthold Vöcking Lehrstuhl Informatik 1 Algorithmen und Komplexität RWTH Aachen 3. Dezember 2009 Berthold Vöcking, Informatik 1 () Vorlesung Berechenbarkeit und
50. Mathematik-Olympiade 2. Stufe (Regionalrunde) Klasse 11 13. 501322 Lösung 10 Punkte
50. Mathematik-Olympiade. Stufe (Regionalrunde) Klasse 3 Lösungen c 00 Aufgabenausschuss des Mathematik-Olympiaden e.v. www.mathematik-olympiaden.de. Alle Rechte vorbehalten. 503 Lösung 0 Punkte Es seien
Berechnungen in Access Teil I
in Access Teil I Viele Daten müssen in eine Datenbank nicht eingetragen werden, weil sie sich aus anderen Daten berechnen lassen. Zum Beispiel lässt sich die Mehrwertsteuer oder der Bruttopreis in einer
9.2. DER SATZ ÜBER IMPLIZITE FUNKTIONEN 83
9.. DER SATZ ÜBER IMPLIZITE FUNKTIONEN 83 Die Grundfrage bei der Anwendung des Satzes über implizite Funktionen betrifft immer die folgende Situation: Wir haben eine Funktion f : V W und eine Stelle x
Beispiel 48. 4.3.2 Zusammengesetzte Zufallsvariablen
4.3.2 Zusammengesetzte Zufallsvariablen Beispiel 48 Ein Würfel werde zweimal geworfen. X bzw. Y bezeichne die Augenzahl im ersten bzw. zweiten Wurf. Sei Z := X + Y die Summe der gewürfelten Augenzahlen.
Logische Folgerung. Definition 2.11
Logische Folgerung Definition 2.11 Sei 2A eine aussagenlogische Formel und F eine endliche Menge aussagenlogischer Formeln aus A. heißt logische Folgerung von F genau dann, wenn I ( ) =1für jedes Modell
Austausch- bzw. Übergangsprozesse und Gleichgewichtsverteilungen
Austausch- bzw. Übergangsrozesse und Gleichgewichtsverteilungen Wir betrachten ein System mit verschiedenen Zuständen, zwischen denen ein Austausch stattfinden kann. Etwa soziale Schichten in einer Gesellschaft:
Kapitel 2: Formale Sprachen Kontextfreie Sprachen. reguläre Grammatiken/Sprachen. kontextfreie Grammatiken/Sprachen
reguläre Grammatiken/prachen Beschreibung für Bezeichner in Programmiersprachen Beschreibung für wild cards in kriptsprachen (/* reguläre Ausdrücke */)?; [a-z]; * kontextfreie Grammatiken/prachen Beschreibung
Theoretische Informatik
Theoretische Informatik für die Studiengänge Ingenieur-Informatik berufsbegleitendes Studium Lehramt Informatik (Sekundar- und Berufsschule) http://theo.cs.uni-magdeburg.de/lehre04s/ Lehrbeauftragter:
Gleichungen Lösen. Ein graphischer Blick auf Gleichungen
Gleichungen Lösen Was bedeutet es, eine Gleichung zu lösen? Was ist überhaupt eine Gleichung? Eine Gleichung ist, grundsätzlich eine Aussage über zwei mathematische Terme, dass sie gleich sind. Ein Term
Was meinen die Leute eigentlich mit: Grexit?
Was meinen die Leute eigentlich mit: Grexit? Grexit sind eigentlich 2 Wörter. 1. Griechenland 2. Exit Exit ist ein englisches Wort. Es bedeutet: Ausgang. Aber was haben diese 2 Sachen mit-einander zu tun?
a n + 2 1 auf Konvergenz. Berechnen der ersten paar Folgenglieder liefert:
Beispiel: Wir untersuchen die rekursiv definierte Folge a 0 + auf Konvergenz. Berechnen der ersten paar Folgenglieder liefert: ( ) (,, 7, 5,...) Wir können also vermuten, dass die Folge monoton fallend
Data Mining: Einige Grundlagen aus der Stochastik
Data Mining: Einige Grundlagen aus der Stochastik Hagen Knaf Studiengang Angewandte Mathematik Hochschule RheinMain 21. Oktober 2015 Vorwort Das vorliegende Skript enthält eine Zusammenfassung verschiedener
Wie löst man Mathematikaufgaben?
Wie löst man Mathematikaufgaben? Manfred Dobrowolski Universität Würzburg Wie löst man Mathematikaufgaben? 1 Das Schubfachprinzip 2 Das Invarianzprinzip 3 Das Extremalprinzip Das Schubfachprinzip Verteilt
Das RSA-Verschlüsselungsverfahren 1 Christian Vollmer
Das RSA-Verschlüsselungsverfahren 1 Christian Vollmer Allgemein: Das RSA-Verschlüsselungsverfahren ist ein häufig benutztes Verschlüsselungsverfahren, weil es sehr sicher ist. Es gehört zu der Klasse der
Formale Sprachen und Grammatiken
Formale Sprachen und Grammatiken Jede Sprache besitzt die Aspekte Semantik (Bedeutung) und Syntax (formaler Aufbau). Die zulässige und korrekte Form der Wörter und Sätze einer Sprache wird durch die Syntax
Was ist Sozial-Raum-Orientierung?
Was ist Sozial-Raum-Orientierung? Dr. Wolfgang Hinte Universität Duisburg-Essen Institut für Stadt-Entwicklung und Sozial-Raum-Orientierte Arbeit Das ist eine Zusammen-Fassung des Vortrages: Sozialräume
Grundbegriffe der Informatik
Grundbegriffe der Informatik Tutorium 27 29..24 FAKULTÄT FÜR INFORMATIK KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Definition
4. Relationen. Beschreibung einer binären Relation
4. Relationen Relationen spielen bei Datenbanken eine wichtige Rolle. Die meisten Datenbanksysteme sind relational. 4.1 Binäre Relationen Eine binäre Relation (Beziehung) R zwischen zwei Mengen A und B
Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster
Es gibt in Excel unter anderem die so genannten Suchfunktionen / Matrixfunktionen Damit können Sie Werte innerhalb eines bestimmten Bereichs suchen. Als Beispiel möchte ich die Funktion Sverweis zeigen.
Professionelle Seminare im Bereich MS-Office
Der Name BEREICH.VERSCHIEBEN() ist etwas unglücklich gewählt. Man kann mit der Funktion Bereiche zwar verschieben, man kann Bereiche aber auch verkleinern oder vergrößern. Besser wäre es, die Funktion
Grundlagen der Künstlichen Intelligenz
Grundlagen der Künstlichen Intelligenz 27. Aussagenlogik: Logisches Schliessen und Resolution Malte Helmert Universität Basel 28. April 2014 Aussagenlogik: Überblick Kapitelüberblick Aussagenlogik: 26.
Grundbegriffe der Informatik
Grundbegriffe der Informatik Tutorium 4 26..25 INSTITUT FÜR THEORETISCHE INFORMATIK KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu
Komplexität und Komplexitätsklassen
Dr. Sebastian Bab WiSe 12/13 Theoretische Grundlagen der Informatik für TI Termin: VL 21 vom 21.01.2013 Komplexität und Komplexitätsklassen Die meisten Probleme mit denen wir zu tun haben sind entscheidbar.
Grundlagen der Informatik
Mag. Christian Gürtler Programmierung Grundlagen der Informatik 2011 Inhaltsverzeichnis I. Allgemeines 3 1. Zahlensysteme 4 1.1. ganze Zahlen...................................... 4 1.1.1. Umrechnungen.................................
Grundbegriffe der Informatik
Grundbegriffe der Informatik Einheit 3: Alphabete (und Relationen, Funktionen, Aussagenlogik) Thomas Worsch Universität Karlsruhe, Fakultät für Informatik Oktober 2008 1/18 Überblick Alphabete ASCII Unicode
Sprachen/Grammatiken eine Wiederholung
Sprachen/Grammatiken eine Wiederholung Was sind reguläre Sprachen? Eigenschaften regulärer Sprachen Sprachen Begriffe Symbol: unzerlegbare Grundzeichen Alphabet: endliche Menge von Symbolen Zeichenreihe:
Grammatiken und die Chomsky-Hierarchie
Grammatiken und die Chomsky-Hierarchie Def.: Eine Grammatik G=(Σ,V,S,R) besteht aus endlichem Alphabet Σ endlicher Variablenmenge V mit V Σ= Startsymbol SєV endlicher Menge R с (V Σ) + x(v Σ)* von Ableitungsregeln
Analysis I für Studierende der Ingenieurwissenschaften
Fachbereich Mathematik der Universität Hamburg WiSe 2015/16 Prof. Dr. M. Hinze Dr. P. Kiani Analysis I für Studierende der Ingenieurwissenschaften Lösungshinweise zu Blatt 2 Aufgabe 1: (12 Punkte) a) Beweisen
7 Rechnen mit Polynomen
7 Rechnen mit Polynomen Zu Polynomfunktionen Satz. Zwei Polynomfunktionen und f : R R, x a n x n + a n 1 x n 1 + a 1 x + a 0 g : R R, x b n x n + b n 1 x n 1 + b 1 x + b 0 sind genau dann gleich, wenn
Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1
Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1 Wenn der Name nicht gerade www.buch.de oder www.bmw.de heißt, sind Internetadressen oft schwer zu merken Deshalb ist es sinnvoll, die Adressen
Formale Grundlagen der Informatik 1 Kapitel 12 Zusammenfassung
Formale Grundlagen der Informatik 1 Kapitel 12 Zusammenfassung Frank Heitmann [email protected] 13. Mai 2014 Frank Heitmann [email protected] 1/17 Überblick Wir hatten
Mathematische Maschinen
Mathematische Maschinen Ziel: Entwicklung eines allgemeinen Schemas zur Beschreibung von (mathematischen) Maschinen zur Ausführung von Algorithmen (hier: (partiellen) Berechnungsverfahren). Mathematische
Algorithmen II Vorlesung am 15.11.2012
Algorithmen II Vorlesung am 15.11.2012 Kreisbasen, Matroide & Algorithmen INSTITUT FÜR THEORETISCHE INFORMATIK PROF. DR. DOROTHEA WAGNER KIT Universität des Landes Baden-Württemberg und Algorithmen nationales
Rekursionen. Georg Anegg 25. November 2009. Methoden und Techniken an Beispielen erklärt
Methoden und Techniken an Beispielen erklärt Georg Anegg 5. November 009 Beispiel. Die Folge {a n } sei wie folgt definiert (a, d, q R, q ): a 0 a, a n+ a n q + d (n 0) Man bestimme eine explizite Darstellung
Urlaubsregel in David
Urlaubsregel in David Inhaltsverzeichnis KlickDown Beitrag von Tobit...3 Präambel...3 Benachrichtigung externer Absender...3 Erstellen oder Anpassen des Anworttextes...3 Erstellen oder Anpassen der Auto-Reply-Regel...5
Fachschaft Mathematik und Informatik (FIM) LA I VORKURS. Herbstsemester 2015. gehalten von Harald Baum
Fachschaft Mathematik und Informatik (FIM) LA I VORKURS Herbstsemester 2015 gehalten von Harald Baum 2. September 2015 Inhaltsverzeichnis 1. Stichpunkte zur Linearen Algebra I 2. Körper 3. Vektorräume
Satz. Für jede Herbrand-Struktur A für F und alle t D(F ) gilt offensichtlich
Herbrand-Strukturen und Herbrand-Modelle Sei F eine Aussage in Skolemform. Dann heißt jede zu F passende Struktur A =(U A, I A )eineherbrand-struktur für F, falls folgendes gilt: 1 U A = D(F ), 2 für jedes
WS 2013/14. Diskrete Strukturen
WS 2013/14 Diskrete Strukturen Prof. Dr. J. Esparza Lehrstuhl für Grundlagen der Softwarezuverlässigkeit und theoretische Informatik Fakultät für Informatik Technische Universität München http://www7.in.tum.de/um/courses/ds/ws1314
Theoretische Grundlagen des Software Engineering
Theoretische Grundlagen des Software Engineering 11: Abstrakte Reduktionssysteme [email protected] Reduktionssysteme Definition: Reduktionssystem Ein Reduktionssystem ist ein Tupel (A, ) Dabei gilt: A
Automaten und formale Sprachen: Vorlesungsskript G. Brewka, A. Nittka
Automaten und formale Sprachen: Vorlesungsskript G. Brewka, A. Nittka Literatur: John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman, Einführung in die Automatentheorie, Formale Sprachen und Komplexitätstheorie,
Die Post hat eine Umfrage gemacht
Die Post hat eine Umfrage gemacht Bei der Umfrage ging es um das Thema: Inklusion Die Post hat Menschen mit Behinderung und Menschen ohne Behinderung gefragt: Wie zufrieden sie in dieser Gesellschaft sind.
Einführung in die Kodierungstheorie
Einführung in die Kodierungstheorie Einführung Vorgehen Beispiele Definitionen (Code, Codewort, Alphabet, Länge) Hamming-Distanz Definitionen (Äquivalenz, Coderate, ) Singleton-Schranke Lineare Codes Hamming-Gewicht
Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.
040304 Übung 9a Analysis, Abschnitt 4, Folie 8 Die Wahrscheinlichkeit, dass bei n - maliger Durchführung eines Zufallexperiments ein Ereignis A ( mit Wahrscheinlichkeit p p ( A ) ) für eine beliebige Anzahl
geben. Die Wahrscheinlichkeit von 100% ist hier demnach nur der Gehen wir einmal davon aus, dass die von uns angenommenen
geben. Die Wahrscheinlichkeit von 100% ist hier demnach nur der Vollständigkeit halber aufgeführt. Gehen wir einmal davon aus, dass die von uns angenommenen 70% im Beispiel exakt berechnet sind. Was würde
Technische Informatik - Eine Einführung
Martin-Luther-Universität Halle-Wittenberg Fachbereich Mathematik und Informatik Lehrstuhl für Technische Informatik Prof. P. Molitor Ausgabe: 2005-02-21 Abgabe: 2005-02-21 Technische Informatik - Eine
