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..................................... 4 1.3 Specifizieren...................................... 6 1.4 Aufgaben........................................ 6 1.5 Minimalisieren..................................... 6 1.6 Equivalenz der regulären Grammatiken und der endlichen Automaten........ 7 1.7 Aufgaben........................................ 8 1.8 Bemerkungen...................................... 9 1.8.1 In zwei Richtung bewegender Automat.................... 9 1.8.2 Reguläre Sprachen als Mengen......................... 9 2
Kapitel 1 Reguläre Sprachen 1.1 Reguläre Sprachen und endliche Automaten Eine Reguläre Sprache lässt sich durch eine Grammatik von der 3. Sprachenklasse generiert. Die Automaten, die die Enthaltungsproblem dieser Sprachen lösen kann, heissen endliche Automaten. Ein endliche Automat ist die einfachste aus der Automaten, es kann nur lesen und es hat kein Memory. Es hat eine endliche Zustandsraum, so kommt der Name. Mathematische Definition: wo Q ist die Menge der Zustanden Σ ist die Alphabet der Sprache M(Q, Σ, δ, q 0, F ) δ ist die Menge der Bewegungsregeln, es ist auch endlich q 0 Q ist die Anfangszustand des Automats F Q ist die Menge der akzeptierenden Zustanden Die Bewegungsregeln: Q Σ Q (Chartesichen Produkt von Zustände und der Alphabet.) Es gibt eine Abbildung von Zustand-Charakter Paaren zu Zustände. Diese Abbildung muss nicht unbedingt volständig sein, und es kann auch nicht eindeutig sein. Definitionen: Deterministischer Automat: zu jede Zustand-Charakter Paar gehört höchstens 1 Bewegingsregeln, die Bewegung der Automat ist eindeutig Nicht deterministischer Automat: zu einige Zustand-Charakter Paaren gehören mehr als 1 Bewegingsregeln, der Automat kann in einer beliebiger Richtung weitergehen Völlig specifizierte Automat: zu jede Zustand-Charakter Paar gehört mindestens 1 Bewegingsregeln Nicht völlig specifizierte Automat: zu einige Zustand-Charakter Paaren gehören kein Bewegingsregeln Bewegung: wenn wir ein Bewegungsregel verwenden, lesen wir ein Charakter von der Band, und der nächste Charakter wird aktiv sein 3
4 KAPITEL 1. REGULÄRE SPRACHEN Akzeptierung: es hat 2 Bedingungen, beide müssen erfüllt sein. Der Automat muss die ganze Zeichenkette durchlesen, und nach der Einlesen der letzte Charakter befindet sich es in akzeptierenden Zustand. Die erste Bedingung ist darum wichtig, weil es kann passieren, dass für eine gewisse Zustand-Charakter Paar kein Bewegiungsregel existiert, der Automat haltet ohne die Zeichenkette durchzulesen. Ablehnung: Der Automat haltet ohne die Zeichenkette durchzulesen oder es haltet in ein nicht akzeptierende (Ablehnung-)Zustand. Abschreiben der Automat: grapisch, als ein gerichteter Graph Knotenpunkten: Zustände (Anfang, Akzeptieren, Ablehnen) Kanten: Bewegungsregeln: δ(a, b) = B Beispiele für deterministische, nicht deterministishe, völlig specifizierte, nicht völlig specifizierte Automaten, für den Sprache a i b j c k 1.2 Determinisieren Deterministischer Automat: zu jede Zustand-Charakter Paar gehört höchstens 1 Bewegingsregeln, die Bewegung der Automat ist eindeutig Nicht deterministischer Automat: zu einige Zustand-Charakter Paaren gehören mehr als 1 Bewegingsregeln, der Automat kann in einer beliebiger Richtung weitergehen Die deterministischer Automaten bilden eine Teilmenge der nichtdeterministischen Automaten. Frage: ist es eine echte Teilmenge, oder die zwei Mengen sind equivalent? Die sind equivalent, wir geben ein konstruktieves Beweis. Folgen die Zustandswechseln einer deterministischen Automat: wir nehmen eine Münze und plazieren es in die Anfangszustand. Für die Bewegungsregeln bewegen wir die Münze in der nächste Zustand. Falls wir nicht weitergehen können und wir noch nicht die ganze Zeichenkette durchlesen könnte, dann ablehnen wir. Falls wir die ganze Zeichenkette durchgelesen haben und die Münze ist in einer Akzeptierungszustand, dann akzeptieren wir die Zeichenkette. Was können wir machen beim nichtdeterministische Automaten? Wir sollen akzeptieren, wenn es eine solche Bewegungsfolge existiert, dass wir den ganze Zeichenkette durchgelesen haben und wir in einem Akzeptierenzustand sind. Wir nehmen auch eine Münze und plazieren es in die Anfangszustand. Falls wir die Münze nicht eindeutig bewegen können, nehmen wir die Münze ab, und plazieren wir neue Münzen in alle Zustände auf, die von der originale Zustand (oder Zustände) durch die aktuelle Bewegungsregeln erreichtbar sind. So können wir alle mögliche Benehmen der Automat folgen. Am Ende, wenn wir die ganze Zeichenkette durchgelesen haben, und mindesens eine Münze in einer Akzeptierungszustand ist, dann akzeptieren wir die Zeichenkette. Das grosse Unterschied: bei den deterministischen Automaten hatten wir immer eine Zustand, die wir erreichen konnten, bei den nichtdeterministischen Automaten haben wir eine Menge von Zustanden. Wir können eine neue Automat definieren, dessen Zustände sind die Mengen, die wir beim Folgen der Bewegungen bekommen hatten.
1.2. DETERMINISIEREN 5 Der undeterministische Automat: wo Q ist die Menge der Zustanden Σ ist die Alphabet der Sprache M(Q, Σ, δ, q 0, F ) δ ist die Menge der Bewegungsregeln, es ist auch endlich q 0 Q ist die Anfangszustand des Automats F Q ist die Menge der akzeptierenden Zustanden Mathematische Beschreibung den neuen Automat: wo M (Q, Σ, δ, q 0, F ) Q 2 Q ist eine Teilmenge der Potenzmenge von Q, Q Σ = Σ ist die Alphabet der Sprache δ (p, a) = δ(q, a), wo p ist der Zustand des neuen Automats: wir nehmen alle originale q p Zustände von p, lesen wir a und der neue Zustand des deterministischen Automats ist die Menge der neuen Zustände des undetermischen Automats q 0 = q 0 ist die Anfangszustand des Automats F = {p p F } ist die Menge der Zustanden p, in denen solche Elemente es gibt, die in dem undeterministischen Automat akzeptierende Zustände sind Wir müssen nicht alle 2 Q Zustände aufnehmen, nur die, die eigentlich vorkommen. Beispiele: 1. a i b j c k 2. Nehmen wir eine Sprache, der solche Zeichenketten enthält, in denen aa oder bb als Teilzeichenketten vorkommt. Bilden wir einen deterministischer Automat für diese Sprache! Bemerkungen: Der deterministische Automat hat 9 Zuständen statt 2 5 = 32 Zustände. Der deterministische Automat hat mehr Zustände, als der nichtdeterministische, aber es ist nicht obligatorisch. Es kann vorkommen, dass es weniger Zustände hat. Wir können über deterministische Grammatiken und auch über deterministische Sprachen sprechen. 1. Eine Grammatik ist deterministisch, falls der zugehörige Automat deterministisch ist. 2. Eine Sprache ist determinisch, falls es eine deterministiche Grammatik existiert, die diese Sprache akzeptiert. Wir haben bewiesen, dass wir zu jedem nichtdeterminischen Automat einen deterministischen Automat auch konstruieren können, deshalb die deterministische Automaten bedecken die Sprachenklasse 3. Wir können unser Ergebnis auch so sagen, dass die deterministische Grammatiken können die ganze 3. Sprachenklasse generieren, also die reguläre Sprachen sind deterministische Sprachen.
6 KAPITEL 1. REGULÄRE SPRACHEN 1.3 Specifizieren Wenn ein Automat nicht völlig specifiziert, das bedeutet, dass es solche Zustand-Charakter Paar existiert, zu dem keine Bewegungsregen gibt. Führen wir einen neuen T Trap Zustand ein, der nicht akzeptierender Zustand ist. Für jede solche Zustand-Charakter Paaren, wofür keine Bewegungsregen existieren, ergänzen wir unsere Regeln mit einer solchen Regel, die für diese Zustand-Charakter Paar den Automat in den T Zustand bringt. Wir machen es für alle solche Zustand-Charakter Paaren. Der Zustand T wird immer in T bleiben für alle gelesene Charaktere, wir können nie ausgehen. Der neue Automat wird dieselbe Sprache akzeptieren, wie der originale. Falls der originale Automat haltet ohne die Zeichenkette durchzulesen, wird der neue in den Trap Zustand gehen, und dort bleiben. Wegen dieser Zustand einen Ablehnungszustand ist, wird die Zeichenkette nicht akzeptiert. Falls der originale Automat die Zeichenkette akzeptiert hat, wird der neue Automat auch akzeptieren. Beispiele: 1. a i b j c k 2. Nehmen wir eine Sprache, der solche Zeichenketten enthält, in denen aa oder bb als Teilzeichenketten vorkommt. Bilden wir einen völlig spezifizierten Automat für diese Sprache! Das bedeutet, dass wir können einen beliebigen Automat haben, wir können einfach eine deterministische und völlig spezifizierte Automat von ihnen konstruieren. 1.4 Aufgaben Geben wir deterministische und völlig specifizierte Automaten für die folgende Sprachen: 1. L = {w {a, b} in w: a ist mit 3 teilbar, b ist gerade} 2. L = {w {a, b} in w der 3. Charakter von hinten ist b } 3. L = {w {a, b} in w zwei a Charakters sind nie benachbart} 1.5 Minimalisieren Fragen: 1. Wie können wir die einfachste deterministische und völlig spezifizierte Automaten einer Sprache finden? (einfachste bedeutet, dass es möglichst wenig Zustände hat: es existiert, weil einen endliche Automat endlich viele Zustände hat) 2. Ist dieser einfachste Automat eindeutig, oder können mehrere solcher Automaten existieren? Antwort: ja, es ist unikal und ist als Minimalautomat der Sprache genannt Wir werden wieder ein konstruktieves Beweis geben. Wir haben einen deterministiche und völlig spezifizierte Automat, und wir möchten es minimalisieren. Zu jeder Zustand des Automats ordnen wir eine Sprache. Diese Sprache ist durch einen solchen Automat akzeptiert, die identisch mit dem originalen Automat ist, aber es hat den neuen Zustand als Anfangszustand. Zu den originalen Anfangszustand gehört dieselbe Sprache, wie vorher. Bezeichnung: zu dem Zustand A gehört die Sprache L A. Führen wir eine Relation ein. Die Zustände A und B sind in Relation, falls L A = L B gilt. Diese Relation ist equivalenzrelation: es ist reflexiv (A A), symmetrisch (A B B A) und auch transitiv (A B B C A C).
1.6. EQUIVALENZ DER REGULÄREN GRAMMATIKEN UND DER ENDLICHEN AUTOMATEN7 Diese Relation ordnet die Menge der Zustände in Equivalenzklassen. Zwei Zustände A und B sind in dieselbe Equivalenzklasse, falls sie gemeinsame generierte Sprachen haben. Also wir können sie nicht unterscheiden, es gibt keine Zeichenkette, die dieser Zustände unterscheidet. Wenn wir eine Zeichenkette aus A oder aus B startet durchlesen möchten, dann wird der Automat aus beide Zustände startet entweder akzeptieren oder ablehnen. Falls C und D nicht in dieselbe Equivalenzklasse sind, existiert eine solche Zeichenkette, die von C und D startet bekommen wir Akzeptierung in einem Fall und Ablehnung in dem anderen Fall. Existierte solche Zeichenkette nicht, könnten wir C und D nicht unterscheiden. Sie wären in dieselbe Equivalenzklasse. Es wäre logisch, wenn wir statt jede Equivalenzklasse nur einen einzige Zustand aufnehmen, weil wir die Zustände dieser Equivalenzklasse nicht unterscheiden können. Dieser neuen Automat wird der Minimalautomat sein. Wie können wir die Equivalenzklassen in endliche Schritten finden? Führen wir eine neue Relation ein: sei zwei Zustände i equivalent, falls wir sie mit höchstens i lange Zeichenketten nicht unterscheiden können. Die originale Relation bedeutet, dass i. Aus der i Equivalenzklassen können wir die i + 1 Equivalenzklassen einfach finden. Falls zwei Zuständen nicht i equivalent sind, werden sie auch nicht i + 1 equivalent sein (wir könnten sie mit i lange Zeichenketten unterscheiden, aber nicht mit i + 1 lage). Wir müssen nur darauf beachten, wenn in einer i Equivalenzklasse mehr als 1 Zustand ist. Diese Klasse kann zerfallen, wenn wir eine neue Character einlesen. Eine Klasse zerfällt, falls wir aus zwei Zustände dieser Klasse in zwei verchiedene i Equivalenzklasse gehen, wenn wir eine neue Charakter einlesen. Falls die i und i + 1 Equivalenzklassen gleich sind, dann werden die spätere Equivalenzklassen auch so aussehen, wir können später sie auch nicht unterscheiden, also die sind gleich mit der Equivalenzklassen. Wir anfangen mit der 0 Equivalenzklasse, wir haben die Zeichenkette ɛ. Es gibt zwei Klassen: Akzeptierung- und Ablehnungzustände. Bei jeder schritt können einige Klassen zerfallen. Falls diese in einer Schritt nicht passiert, dann sind wir fertig. Also wir brauchen höchstens Q Schritten die Equivalenzklassen zu bestimmen. Die Minimalautomat ist unikal, aber wir werden es nicht beweisen. Beispiele: 1. a i b j c k 2. Nehmen wir eine Sprache, der solche Zeichenketten enthält, in denen aa oder bb als Teilzeichenketten vorkommt. Bilden wir einen Minimalautomat für diese Sprache! 1.6 Equivalenz der regulären Grammatiken und der endlichen Automaten Satz. Durch die regulären Grammatiken generierte Sprachen sind equivalent mit durch die endlichen Automaten generierte Sprachen. Wir nehmen den Beweis nicht, nur die Konstruktion für linksreguläre Grammatiken. Es ist ähnlich für rechtsreguläre Grammatiken auch. Die 2 Arten von Regeln bei linksregulären Grammatiken: A ab, A a. 1. : Gegeben sei einen Automat. Konstruieren wir einen Grammatik aus dieser Automat. Σ wird die gleiche sein für die Grammatik. Zu die Zustände der Automat ordnen wir eine Nichtterminalsymbol in der Grammatik zu. Statt eine δ(a, a) = B Regel ordnen wir eine A ab Regel zu. Für jede Akzeptierungszustand führen wir eine A ɛ ein. Falls wir eine solche Regel benutzen, wird das Nichtterminalsymbol verschwinden, und der Satz ist fertig.
8 KAPITEL 1. REGULÄRE SPRACHEN 2. : Wir werden die Grammatik so ändern, dass die akzeptierte Sprache bleibt die selbe. Führen wir eine neue Nichtterminalsymbol E ein, und die zugehörige Regel sei E ɛ. Falls wir eine Regel in Form A a haben, nehmen wir statt dieser Regel A ae. Zu jede Nichtterminalsymbol nehmen wir eine Zustand in dem Automat. E wird der Akzeptierungszustand, alle andere Zustände werden Ablehnungszustände sein. Zu eine Regel A ab ordnen wir eine Regel δ(a, a) = B. Wenn existiert auch eine Regel A ɛ), dann wird A auch Akzeptierungszustand sein. Beispiele: 1. Konstruieren wir einen Automat für die Sprache, die durch den folgenden Grammatik generiert werden kann: S as bb b A aa a bc B bb b aa a C bc as 2. Konstruieren wir einen Grammatik für die Sprache, die durch den folgenden Automat akzeptiert werden kann: (die Automat der gerade Anzahl von a-s und b-s akzeptiert) 1.7 Aufgaben Minimalisieren wir den folgenden Automaten: 1. Anfangszustand: A, Akzeptierungszustand: B δ(a, 0) = A, B δ(a, 1) = B δ(b, 0) = A δ(b, 1) = B 2. Anfangszustand: A, Akzeptierungszustände: D und F δ(a, 0) = E δ(a, 1) = B δ(b, 0) = C δ(b, 1) = B δ(c, 0) = D δ(d, 1) = D δ(e, 0) = F δ(f, 1) = D 3. Anfangszustand: A, Akzeptierungszustände: C,D,F,G und H δ(a, a) = E δ(a, b) = C δ(b, a) = H δ(b, b) = A δ(c, a) = C δ(c, b) = G δ(d, a) = D δ(d, b) = H δ(e, a) = H δ(e, b) = F δ(f, a) = F δ(f, b) = D δ(g, a) = D δ(g, b) = F δ(h, a) = H δ(h, b) = H
1.8. BEMERKUNGEN 9 1.8 Bemerkungen 1.8.1 In zwei Richtung bewegender Automat Es existieren solche endliche Automaten, die in beide Richtungen lesen können. Es kann bewiesen werden, dass dieser Automaten dieselbe Kraft haben, wie die Automaten, die nur in einer Richtung lesen. 1.8.2 Reguläre Sprachen als Mengen Eine Sprache L ist eine Menge von Sätze. Deshalb können wir die Mengeoperationen auch für die Sprachen betrachten. Die Operationen sind die folgenden: Σ ist das Universum L ist das Komplement der Sprache L: L = Σ L L 1 L 2 ist die Union zweier Sprachen L 1 L 2 ist der Durchschnitt zweier Sprachen L 1 L 2 (oder kürzer: L 1 L 2 ) ist die Konkatenierte zweier Sprachen L ist die transitive Hülle einer Sprache: L = L i i=0 Falls wir Σ als eine Sprache nehmen, dann Σ ist die transitive Hülle von dieser Sprache: es enthält alle mögliche Zeichenketten, die aus Charaktere von Σ stehen. Es kann bewiesen sein, dass die reguläre Sprachen für alle dieser Operationen geschlossen sind. Also wenn wir eine dieser Operationen verwenden, bekommen wir wieder eine reguläre Sprache. Später werden wir sehen, dass nicht alle Sprachenklassen geschlossen für diese Operationen sind.