Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Einführung in die Informatik II Automaten

Ähnliche Präsentationen


Präsentation zum Thema: "Einführung in die Informatik II Automaten"—  Präsentation transkript:

1 Einführung in die Informatik II Automaten
Java, Java, Java R. Morelli Einführung in die Informatik II Automaten Prof. Bernd Brügge, Ph.D Institut für Informatik Technische Universität München Sommersemester 2004 1. Juli 2004 2 Copyright 2000 by Ralph Morelli. All rights reserved.

2 Organisatorisches: Planung der restlichen Vorlesungen
29. Juni UML Zustandsdiagramme, Modell-Sicht-Steuerung Konzept, 1.-6 Juli Automaten und Grammatiken 8.-13 Juli: Überleitung zu maschinennaher Programmierung Übersetzung von Java in eine maschinenahe Sprache 15. Juli: Maschinennahe Programmierung Laufzeitkeller, Unterprogrammaufruf, Halde 20. Juli: Codierung 20. Juli: Zentralübung: Fragestunde zur Klausur. Alle Fragen bis zum 19. Juli per an werden berücksichtigt. 22. Juli: Vergleich von Modellierungs-&Programmierkonzepten, Abschluss 24. Juli: Klausur, zwischen 13: :00, Klausurmerkblatt wird am 20. Juli verteilt

3 Ziele dieser Vorlesung
Java, Java, Java R. Morelli Ziele dieser Vorlesung Sie können ein Objekt mit interessantem dynamischen Verhalten als endlichen Automaten modellieren. Sie verstehen, dass UML-Zustandsdiagramme eine Notation für endliche Automaten sind. Sie verstehen, dass endliche Automaten und reguläre Grammatiken äquivalente Interpretationen desselben Konzeptes sind. Sie können aus einem endlichen Automaten eine reguläre Grammatik erstellen, die dieselbe Sprache akzeptiert wie der Automat. Sie können für eine gegebene reguläre Grammatik den entsprechenden endlichen Automaten konstruieren. Copyright 2000 by Ralph Morelli. All rights reserved.

4 Modellierung mit endlichen Automaten
Ein Automat ist ein Modell, dass zur Modellierung von vielen Problemen verwendet werden kann. Die Ursprünge für endliche Automaten kamen aus folgenden Anwendungsdomänen: Biologie (McCollough & Pitts, "A logical calculus of the ideas immanent in nervous activity", 1943) Modellierung des menschlichen Gehirns: Ein Gehirn besteht aus etwa 235 Neuronen (ca. 35 Milliarden), und es sollte möglich sein, den Zustand jedes Neurons durch einige Bits zu beschreiben. Elektrotechnik (Mealy, "A method for synthesizing sequential circuits", 1955) Entwurf von Schaltkreisen aus einer endlichen Zahl von Gattern, die nur einen von 2 Werten annehmen können. Linguistik (Chomsky "Three models for the description of language", 1956) Beschreibung von Grammatiken für die natürliche Sprache

5 Endliche Automaten in der Informatik
Interaktive Systeme: Spezifikation der Eingaben, die in einem interaktiven System akzeptierbar sein sollen. Compilerbau: Zur lexikalischen Analyse von Programmen, d.h zur Erkennung von Schlüsselwörtern und Bezeichnern Softwaretechnik: Zur Beschreibung von Systemen, die durch die dynamischen Eigenschaften eines einzigen Objektes bestimmt werden.

6 Endliche Automaten Ein endlicher Automat ist ein gutes Werkzeug zur Modellierung von Problemen aus der Wirklichkeit, wenn folgende Eigenschaften vorliegen. Diskrete Ein-/Ausgabe: Das System reagiert nur auf diskrete Eingabe-Werte und gibt nur diskrete Werte aus. Endliche Anzahl von Zuständen: Das System kann nur in einer endlichen Zahl von internen Konfigurationen sein, die wir Zustände nennen. Gedächtnislosigkeit: Der Zustand, in dem das System gerade ist, umfasst die gesamte Information über die Vergangenheit des Systems Nur dieser Zustand entscheidet bei der nächsten Eingabe, was der nächste Zustand ist.

7 Beispiel für einen endlichen Automaten
Die Steuerung eines Fahrstuhls kann man mit einem endlichen Automaten modellieren. Diskrete Ein-/Ausgabe: Eingabe: Welche Knöpfe wurden in welchen Etagen gedrückt, aber noch nicht bedient? Ausgabe: In welche Richtung (hoch, runter) und wie weit muss der Fahrstuhl als nächstes fahren? Endliche Anzahl von Zuständen: Der Fahrstuhl bedient nur eine endliche Anzahl von Etagen. Gedächtnislosigkeit: Die Steuerung weiss nicht, welche Etagen der Fahrstuhl bis jetzt schon besucht hat. Wichtig ist der derzeitige Zustand: Wo steht der Fahrstuhl?

8 Ein altes Problem: Wolf, Kohl und Ziege
Eine Hirte steht mit einem Wolf, einer Ziege und einem Kohlkopf am linken Ufer eines Flusses. Sie wollen den Fluss überqueren. Es gibt eine Fähre, die hin und her fährt. Die Fähre ist allerdings so klein, dass sie höchstens den Hirten und einen weiteren Passagier gleichzeitig transportieren kann. Es gibt folgende Einschränkungen: Allein gelassen, frisst der Wolf die Ziege Allein gelassen, frisst die Ziege den Kohlkopf Ziel: Alle sollen den Fluss erfolgreich über-queren, ohne dass irgend jemand gefressen wird

9 Wie modellieren wir das Problem?
Sollen wir Anwendungsfälle mit Ereignisfolgen probieren? Akteure: Wolf, Hirte, Ziege, … Ereignisfolge: Alle sind am linken Ufer Der Hirte fährt mit der Ziege zum rechten Ufer Dort lässt er die Ziege, Dann fährt er allein zum linken Ufer ... Sollen wir ein Klassendiagramm erstellen? Das Problem hat viele Objekte. Abbott's Analyse ergibt: Hirte, Wolf, Ziege, Kohlkopf, Fluss, Ufer, überqueren, fressen, transportieren, Fähre, Kapazität. Brauchen wir dafür ein Sequenzdiagramm? Oder können wir das ganze Problem allein mit einem Zustandsdiagramm modellieren?

10 Analyse des Hirte-Wolf-Ziege-Kohl-Problems
Wir führen folgende Bezeichnungen ein: H ist der Hirte, W der Wolf, Z die Ziege und K der Kohl.  bezeichnet die leere Menge. Wir identifizieren eine Klasse Steuerung mit einem Attribut Uferverteilung vom Typ Zeichenkette mit Werten wie "HWZK-", "WK-HZ", usw. Die Attributwerte modellieren die Besetzung der beiden Uferseiten folgendermaßen: HWZK-: Alle Beteiligten sind am linken Ufer. WK-HZ: Wolf und Kohl am linken Ufer, Hirte und Ziege am rechten Ufer. K-HWZ: Kohl am linken Ufer, Hirte, Wolf und Ziege am rechten Ufer. -HWZK: Alle Beteiligten sind am rechten Ufer. Insgesamt kann Uferverteilung höchstens 24 = 16 verschiedene Werte annehmen, Wir haben also 16 Zustände (davon sind nicht alle erstrebenswert). Als Namen für die Zustände nehmen wir die Werte der Uferverteilung : HWZK- ist unser Anfangszustand, den Endzustand -HWZK wollen wir erreichen.

11 Modellierung des Problems mit UML-Zustandsdiagramm
HKZW- Z KW-HZ HKW-Z H W K K-HWZ W-HKZ Eingabe: Z Z Z H W Z K H Z HKZ-W HWZ-K akzeptiert! -HKWZ K W Z H K Z W HZ Z-HKW HZ-KW H Z ebenfalls akzeptiert!

12 Verfeinert Modellierung des Problems
Z H HKZW- KW-HZ HKW-Z Z H W W K K K-HWZ W-HKZ Z Z Z Z Akzeptierbare Eingaben: ZZZHHHWZKHZ HKZ-W HWZ-K ZHWZKKKKKKKHZ ZHWZKKKKKKKKKKKHZ usw. K W W K Z-HKW HZ-KW -HKWZ H Z H Z

13 Endlicher Automat Definition: Ein endlicher Automat ist ein 5-Tupel A = ( ∑, Q, , q0 , F): ∑ ist ein endlicher Zeichenvorrat (also ein Alphabet) Q ist eine nichtleere endliche Menge von Zuständen  : Q  ∑  Q ist eine Übergangsfunktion wobei gilt:  (q, a) ist ein definierter Zustand für jeden Zustand q und Eingabe a  ∑ q0  Q ist ein Anfangszustand F ist eine Menge von Endzuständen

14 Arbeitsweise eines endlichen Automaten
Eingabeband E mit Symbolen aus ∑ 1 1 1 1 1 1 S LeseKopf L Steuerung S: Besteht aus Zuständen  Q und Übergangsfunktion  Clemens Harlfinger: Folie für Präsentation ausblenden!

15 Arbeitsweise eines endlichen Automaten
Clemens Harlfinger: Folie für Präsentation einblenden! Eingabeband E mit Symbolen aus ∑ 1 1 1 1 1 1 1 1 1 1 1

16 Ein endlicher Automat ist ein Algorithmus
BandendeErreicht() == True Unser Modell: BandendeErreicht() == False 1 LeseKopf L Eingabeband E mit Symbolen aus ∑ Steuerung S = (q0,0) Steuerung S = q0 Der Algorithmus: Setze die Steuerung S auf den Anfangszustand; // S = q0; Positioniere Lesekopf L am Anfang des Eingabebandes E; akzeptiert = istEndzustand(q0); while not BandendeErreicht() do { Lies Symbol unter dem Lesekopf L; // L = ai; Berechne den neuen Zustand aus S und L; // S = (S,L); Ist der neue Zustand ein Endzustand? Wenn ja, akzeptiert = true; } // while not BandendeErreicht() return akzeptiert;

17 Darstellungsmöglichkeiten für die Übergangsfunktion
Die Übergangsfunktion  eines endlichen Automaten lässt sich auf verschiedene Art und Weise darstellen: als Graph  Übergangsgraph (bei der Modellierung) als Tabelle  Übergangstabelle als Menge  Menge von Produktionen (bei der Beschreibung von Grammatiken)

18 Übergangsgraph: Übergangsfunktion  als Graph
Ein endlicher Automat kann als gerichteter Graph G dargestellt werden, wenn wir folgende Zuordnungen festlegen: die Menge der Zustände Q ist die Menge der Knoten des Graphen mit q0 als Anfangszustand Zwei Knoten q1 und q2 im Graphen sind durch eine mit der Eingabe a beschriftete gerichtete Kante verbunden, wenn es einen Übergang vom Zustand q1 nach q2 gibt, d.h. wenn  (q1, a) = q2 gilt. Den gerichteten Graphen nennen wir Übergangsgraph UML-Zustandsdiagramme sind also Übergangsgraphen.

19 Beispiel für einen Übergangsgraphen
Wir wollen einen Prüfer bauen, der eine vorgegebene Zeichenkette aus '0' und '1' nur dann akzeptiert, wenn die Kette eine gerade Anzahl von 0'en und eine gerade Anzahl 1'en hat. Beispiel: wird akzeptiert, wird nicht akzeptiert Übergangsgraph: Ungerade: Eine 1 zuviel 1 q0 q1 1 q3 Gerade 1 1 q2 Ungerade: Eine 0 zuviel Ungerade: Eine 1 und eine 0 zuviel

20 Alternative Notation für Übergangsgraphen
In der Softwaretechnik benutzen wir UML-Zustandsdiagramme für die Notation von endlichen Automaten. In der Automatentheorie hat sich vorher schon eine einfachere Notation etabliert: Zustände werden als Kreise gezeichnet Der Anfangszustand hat einen kleinen gerichteten Pfeil Der Endzustand besteht aus 2 konzentrischen Kreisen q0 q1 1 q2 q3 Zusätzlicher Pfeil: Startzustand Kreis: Zustand Doppelkreis: Endzustand Bei endlichen Automaten ohne größere Komplexität werden wir diese Notation öfters benutzen.

21 Übergangsfunktion  als Tabelle
Definition Übergangstabelle: Tabellenförmige Darstellung der Übergangsfunktion eines endlichen Automaten. Eingabe aus ∑ a b ... z j q0 q1 qn Zustände qi ...  (qo, b)  (qo, j)  (q1, a)  (q1, b)  (q1, j)  (q1, z)  (qi a)  (qi, b)  (qi, z)  (qn, b)  (qn, j)  (qn, z) ...  (q0, a)  (qo, z)  (qi, j)  (qn a)

22 Übergangstabelle für den Gleichheitsprüfer
Eingabe 1 q0 q1 q3 Zustand q2 q2 q1 q3 q0 Erweiterung der Übergangsfunktion  von einzelnen Zeichen auf Zeichenketten: (q, aw) = ((q, a), w) a  , w  * Anfangszustand: q0 Beispiel: Eingabe  (q0, 1) = q1  (q1, 1) = q0  (q0, 0) = q2  (q2, 1) = q3  (q3, 0) = q1  (q1, 1) = q0 Für diese Folge von Berechnungen schreiben wir auch verkürzt:  (q0, ) * q0

23 Übergangsfunktion  als Produktionenmenge
 (q0, a) = q kann man auch als Produktion sehen: q0 a  q Die Übergangsfunktion definiert dann eine Menge von Produktionen Beispiel: Die eben durchgeführte Folge von Berechnungen  (q0, 1) = q1  (q1, 1) = q0  (q0, 0) = q2  (q2, 1) = q3  (q3, 0) = q1  (q1, 1) = q0 kann als Ableitungsfolge gesehen werden: q  q110101 q  q00101 q00101  q2101 q2101  q301 q301  q11 q11  q0 q0 1  q1 q11  q0 q00  q2 q21  q3 q30 q1 q11  q0 Für diese Ableitungsfolge schreiben wir manchmal verkürzt: q q0 * und sagen, das Wort wird vom Automaten erkannt.

24 Sprache eines Automaten
Die von einem endlichen Automaten A akzeptierte Sprache L(A) ist definiert als * L(A) = { x | x  ∑*, q0 x qf mit qf  F} Alle Eingabeworte, die den Automaten A vom Anfangszustand in einen Endzustand überführen, sind also Teil der Sprache L(A) Wolf-Kohl-Ziege Automat W: ZHWZKKKKKKKHZ  L(W), KZHW  L(W) Gleichheits-Checker P:  L(P),  L(P) Im Übergangsgraphen entspricht ein x  L(A) einem Weg vom Anfangszustand q0 zu einem Endzustand.

25 Endliche Automaten mit Ausgabe
Endliche Automaten, wie wir sie bis jetzt definiert haben, besitzen nur eine Eingabe, aber keine richtige Ausgabe: Die Ausgabe ist ein binäres Signal: "Die Eingabe ist akzeptiert" oder "Die Eingabe ist nicht akzeptiert" Es gibt Probleme, die mit endlichen Automaten modellierbar sind, bei denen die Ausgabe wichtiger ist als der erreichte Endzustand. Beispiel: MVV-Fahrkartenautomat. Ich wähle einen Fahrschein aus, z.B. eine Tageskarte. Ich werfe den korrekten Geldbetrag in den Automaten. Jetzt erwarte ich, dass der Fahrschein ausgegeben wird. Ob der Automat dabei in einem Endzustand ist, interessiert mich absolut nicht. Es gibt viele Arten von Automaten, die Ausgabe ermöglichen. Wichtige Varianten sind die Mealy-, Moore- und Harel-Automaten.

26 Moore-Automat Ein Moore-Automat ist ein 6-Tupel M = (Q, , T, , , qo), wobei Q, ,  und qo wie beim endlichen Automaten definiert sind. T ist das Ausgabealphabet, und  ist eine Abbildung von Q nach T. In einem Zustand wird also ein Zeichen t  T ausgegeben. Jeder MVV-Kartenautomat enthält zwei Moore-Automaten, wobei das Eingabealphabet immer aus erlaubten Geldstücken besteht: Fahrscheinausgabe F: Wenn der korrekte Geldbetrag eingegeben worden ist, wird ein Zustand erreicht, in dem der Fahrschein ausgegeben wird. Wechselgeldausgabe W: Wenn mehr als der korrekte Geldbetrag eingeben wurde, muss ein Zustand erreicht werden, in dem das zuviel eingezahlte Geld ausgegeben wird.

27 Mealy-Automat Ein Mealy-Automat ist ein 6-Tupel M = (Q, , T, , , qo) wobei Q, , T,  und qo wie beim Moore-Automaten definiert sind.  ist allerdings eine Abbildung von Q   nach T. Beim Übergang von einem Zustand zu einem anderen Zustand wird also bei Eingabe a   ein Zeichen t  T ausgegeben. Jeder MVV-Kartenautomat enthält einen Mealy-Automaten: Eingabealphabet sind wieder die erlaubten Geldstücke. Anzeige des fehlenden Betrages F: Nach dem Einwurf jedes Geldstückes wird der noch fehlende Betrag auf dem Bildschirm angezeigt.

28 Harel-Automat Die durch UML-Zustandsdiagramme beschreibbaren Automaten nennen wir Harel-Automaten. Ein Harel-Automat hat eine Zustandsmenge Q, die hierarchisch organisiert sein kann (durch Superzustände) eine Eingabemenge  von Ereignissen eine Ausgabemenge T eine Menge von Prädikaten  für Wächter einen Anfangszustand q0 Zwei Funktionen mit Ausgabe: Übergangsfunktion  : Q      T  Q Zustandsausgabe : Q  T Ereignis  [Wächter]  /Aktion T

29 Endliche Automaten vs Harel-Automaten
Die Eingabe in einem endlichen Automaten entspricht den Ereignissen in einem Harel-Automaten. Die Ereignisse kommen dabei aus der Modellierung der Anwendungsdomäne. Die Ausgabe in einem endlichen Automaten ist äquivalent zu einer Aktion oder einer Aktivität im entsprechenden Harel-Automaten. Ein UML-Zustandsdiagramm beschreibt einen Mealy-Automaten, wenn es keine Wächter und keine Aktivitäten enthält, sondern nur Aktionen der Form a/t. Ein UML-Zustandsdiagramm beschreibt einen Moore-Automaten, wenn es keine Wächter und keine Aktionen enthält, sondern nur Aktivitäten der Form do/print(t)

30 Automaten mit -Übergängen
Ein endlicher Automat kann auch Transitionen ohne spezifische Eingabe ausführen. In diesem Fall verallgemeinern wir die Übergangsfunktion  folgendermaßen:  : Q  (∑  {})  Q, wobei gilt:  (q, a) ist ein definierter Zustand für jeden Zustand q und jede Eingabe a  ∑  {}. Erstaunlich: Die Sprachen von Automaten mit -Übergängen sind nicht mächtiger als die von endlichen Automaten. Satz: Jeder Automat mit -Übergängen kann in einen äquivalenten endlichen Automaten (ohne -Übergänge) transformiert werden. Beweis  Hauptstudium (Automatentheorie)

31 Beispiel für einen Automaten mit -Übergängen
Z H HKZW- KW-HZ HKW-Z Z H W W K K -Übergang K-HWZ W-HKZ -Übergang Z Z Z Z HKZ-W HWZ-K K W Im allgemeinen wird in UML-Zustandsdiagrammen das leere Wort nicht gezeigt W K Z-HKW HZ-KW -HKWZ H Z H Z

32 Nichtdeterministischer endlicher Automat
Bisher haben wir angenommen, dass  : Q  ∑  Q für die Berechnung von Zustandsübergängen eine Funktion ist. Für jedes Paar Zustand/Eingabe gibt es nur einen neuen Zustand. Solche Automaten nennen wir deterministisch. Im allgemeinen Fall kann man von einem gegebenen Zustand q bei Eingabe eines Zeichens mehr als einen Zustand bekommen. Beispiel:  (q1 , a) = q3 und  (q1 , a) = q4  ist dann keine Funktion, sondern eine Relation. Ein endlicher Automat, bei dem  eine Relation ist, heißt nichtdeterministisch. Erstaunlich: Die Sprachen, die von nichtdeterministischen endlichen Automaten akzeptiert werden, sind nicht mächtiger als die von deterministischen endlichen Automaten. Satz: Jeder nichtdeterministische endliche Automat kann in einen äqui-valenten deterministischen endlichen Automaten transformiert werden.

33 Ein weiteres Beispiel: Erkennung von Zahlen
Wir wollen einen endlichen Automaten konstruieren, der Bezeichner akzeptiert. Ein Bezeichner muss mit einem Buchstaben anfangen, gefolgt von beliebig vielen Buchstaben oder Ziffern. Endlicher Automat A: Eingabealphabet  = { b, z } wobei b ein Buchstabe ist und z eine Ziffer Übergangsdiagramm: z q1 b q0 b

34 Grammatik für Bezeichner
Für die eben definierten Bezeichner können wir auch eine Grammatik entwickeln, und zwar mit den Produktionen P: { Bezeichner  'b' ZahlBuchstabe | 'b' ZahlBuchstabe  'b' ZahlBuchstabe | 'b' ZahlBuchstabe  'z' ZahlBuchstabe | 'z' } Diese Grammatik akzeptiert dieselbe Sprache wie der eben entwickelte Automat ! Dies ist kein Zufall, sondern liegt an einem tieferen Zusammenhang zwischen Automaten und Grammatiken, den wir jetzt genauer herausarbeiten.

35 Einschub: Reguläre Grammatik (Chomsky-3-Grammatik)
Gegeben sei eine Chomsky-Grammatik G = (T, N, P, Z). Seien A und B Nichtterminale aus N und a ein Terminal aus T. Wir definieren eine Rechtslineare Produktion als eine Produktion der Form A  aB Wir definieren eine Linkslineare Produktion als eine Produktion der Form A  Ba Definition: Eine Grammatik ist eine reguläre Grammatik oder auch Chomsky-3-Grammatik, wenn sie neben terminierenden Produktionen entweder nur links- oder nur rechtslineare Produktionen enthält. Beispiele: P = {A  aB, A  a, B  aB}  G ist regulär P = {A  Ba, B  a, B  Ba}  G ist regulär P = {A  Ba, B  a, B  aB}  G ist nicht regulär P = {A  BA, B  a, B  aB}  G ist nicht regulär

36 Regulär oder nicht regulär?
P = {A  aB, A  a, B  aB} Grammatik ist regulär (Produktionen sind terminal oder rechtslinear) Grammatik ist nicht regulär (hat eine sog. -Produktion, die weder rechts- noch linkslinear ist) P = {A  Ba, B  a, A  } P = {A  Ba, B  a, B  aB} Grammatik ist nicht regulär (hat sowohl rechts- als auch linkslineare Produktionen) P = {A  BA, B  a, B  aB} Grammatik ist nicht regulär (hat eine Produktion, die weder rechts- noch linkslinear ist)

37 Automaten und Grammatiken
Wir hatten L(A) als die Sprache definiert, die von einem Automaten A akzeptiert wird. Für eine gegebene Chomsky-Grammatik G = (, N, P, Z) hatten wir L(G) als die Sprache definiert, die von G erzeugt wird (siehe Info I - Vorlesung 4, Folie 32). Satz über Äquivalenz zwischen endlichen Automaten und regulären Grammatiken Eine Menge L  * ist genau dann die Sprache L = L(A) eines endlichen Automaten A, wenn es eine reguläre Grammatik G = (, N, P, Z) gibt, so dass L = L(G). Die Äquivalenz ist beschränkt auf die nichtleeren Worte aus L: Eine reguläre Grammatik kann  nicht im Sprachschatz haben, es gibt aber endliche Automaten, die  erkennen (Welche?)

38 Endliche Automaten und reguläre Grammatiken
Zurück zu unserem Satz: Immer wenn wir einen endlichen Automaten haben, der eine Sprache L(A) akzeptiert, können wir eine reguläre Grammatik konstruieren, die denselben Sprachschatz akzeptiert. Dasselbe gilt auch umgekehrt. Wir führen den Beweis in beiden Richtungen. 1. Gegeben eine reguläre Grammatik  endlicher Automat 2. Gegeben ein endlicher Automat  reguläre Grammatik

39 Reguläre Grammatik  Endlicher Automat
Der Beweis ist konstruktiv, d.h. wir zeigen, wie für eine beliebige vorgegebene reguläre Grammatik der entsprechende Automat konstruiert werden kann. Sei eine reguläre Grammatik G = (T, N, P, Z) gegeben. Die Produktionen in P haben also alle die Form A  aB, A  a Für rechtslineare Produktionen wird der Beweis analog geführt

40 Reguläre Grammatik  Endlicher Automat (3)
Aus der Grammatik G = (T, N, P, Z) konstruieren wir den Automaten A = (, Q, , q0, F) folgendermaßen:  = T Eingabealphabet  : Alle Terminale T Zustandsmenge Q: Alle Nichtterminale N Zustandsmenge Q: Alle Nichtterminale N plus ein neuer Endzustand qf Q = N  {qf} Q = N q0 = Z Anfangszustand q0: Das Axiom Z F = {qf} Endzustandsmenge F: Neu eingeführter Zustand qf (A, a) = B wenn A  aB  P Für jede Produktion aus P berechnen wir einen Wert für die Übergangsfunktion  (Der Rest von  ist undefiniert) (A, a) = qf wenn A  a  P Das heißt: Für jede reguläre Grammatik können wir einen endlichen Automaten konstruieren, der dieselbe Sprache akzeptiert.

41 Endlicher Automat  Reguläre Grammatik
Aus dem Automaten A = (, Q, , q0, F) konstruieren wir die Grammatik G = (T, N, P, Z) folgendermaßen: Terminale T: Alle Elemente aus dem Eingabealphabet  T =  N = Q Nichtterminale N sind alle Zustände von Q P: Für jedes (A, a) = B definieren wir eine Produktion A  aB Für jedes Eingabesymbol a, das aus Zustand A zu einem Endzustand qf  F führt, d.h. (A, a) = qf, definieren wir eine Produktion A  a Z = q0 Als Axiom Z nehmen wir den Anfangszustand q0 Das heißt: Für jeden endlichen Automaten können wir eine reguläre Grammatik konstruieren, die dieselbe Sprache (bis auf ) akzeptiert. q.e.d.

42 Beispiel: Konvertierung einer Grammatik in endlichen Automaten
bzzzz, bzbz  L(G), z, zb  L(G) G = (T, N, P, Z), wobei gilt: T = { 'b', 'z'} N = { Bezeichner, ZahlBuchstabe} P = { Bezeichner  'b' ZahlBuchstabe | 'b' ZahlBuchstabe  'b' ZahlBuchstabe | 'b' ZahlBuchstabe  'z' ZahlBuchstabe | 'z' } Z = Bezeichner

43 Konstruktion des Automaten
 = T = {b, z} Q = N  qf = {Bezeichner, ZahlBuchstabe, qf} q0 = Z = Bezeichner F = qf (A, a) = B wenn A  aB  P  (Bezeichner, b) = {ZahlBuchstabe, qf} b // Bezeichner  'b' ZahlBuchstabe  (ZahlBuchstabe, b) = {ZahlBuchstabe, qf} // ZahlBuchstabe  'b‘ZahlBuchstabe  (ZahlBuchstabe, z) = {ZahlBuchstabe, qf} // ZahlBuchstabe  'z' ZahlBuchstabe b z ZahlBuchstabe qf Bezeichner b b z

44 UML-Zustandsdiagramm
Zusammenfassung (1) Mealy-Automat: Ausgabe nur bei Zustandsübergängen Moore-Automat Ausgabe nur bei Zuständen Endlicher Automat: Keine Ausgabe, Endzustände Harel-Automat Übergänge haben Ereignis, Wächter und Operation, Zustände haben Ausgabe Zeichnen wir als UML-Zustandsdiagramm

45 Zusammenfassung (2) Endlicher Automat zur Modellierung von dynamischen Aspekten in Systemen Verschiedene Darstellungen für die Übergangsfunktion: Übergangsgraph, Übergangstabelle, Produktionenmenge Wichtige Automaten mit Ausgabe: Mealy, Moore, und Harel UML-Zustandsdiagramme sind Übergangsgraphen für Harel-Automaten. Endliche Automaten und reguläre Grammatiken sind verschiedene Interpretationen desselben Sachverhaltes Viele Einsichten über Automaten erhalten wir, weil wir zwischen diesen Interpretationen hin und her wechseln können. Da ein Übergangsgraph ein Graph ist, können wir auch Kenntnisse aus der Graphentheorie zum Verständnis der Eigenschaften von endlichen Automaten verwenden.

46 Einführung in die Informatik II Automaten
Java, Java, Java R. Morelli Einführung in die Informatik II Automaten Prof. Bernd Brügge, Ph.D Institut für Informatik Technische Universität München Sommersemester 2004 6. Juli 2004 2 Copyright 2000 by Ralph Morelli. All rights reserved.

47 Ziele dieses Vorlesungsabschnitts
Java, Java, Java R. Morelli Ziele dieses Vorlesungsabschnitts Sie können einen nichtdeterministischen endlichen Automaten in einen endlichen Automaten transformieren mit dem Myhill-Verfahren Sie können zeigen, dass eine gegebene Sprache nicht regulär ist mit dem Pumping-Lemma Sie verstehen, dass es Sprachen gibt, die man mit endlichen Automaten nicht erkennen kann Chomsky-2-Sprachen Copyright 2000 by Ralph Morelli. All rights reserved.

48 Wiederholung: Alternative Notation für Übergangsgraphen
In der Softwaretechnik benutzen wir UML-Zustandsdiagramme für die Notation von endlichen Automaten. In der Automatentheorie hatte sich schon vorher eine einfachere Notation etabliert: Zustände werden als Kreise gezeichnet Der Anfangszustand hat einen kleinen gerichteten Pfeil Der Endzustand besteht aus 2 konzentrischen Kreisen q0 q1 1 q2 q3 Zusätzlicher Pfeil: Startzustand Kreis: Zustand Doppelkreis: Endzustand

49 Übung: Welche Sprache akzeptiert dieser Automat?
1 1 1 q0 q3 q4 Der Automat akzeptiert 0011, denn die Folge von Zuständen q0, q3, q4, q4 , q4 endet in q4, einem Endzustand 1 q1 Allgemein akzeptiert der Automat alle Eingaben, die entweder mit 00 oder mit 11 anfangen. Beispiele: 001, 0001, 11, 110, 1101 1 1 q2

50 Und welche Sprache akzeptiert dieser Automat?
1 1 1 1 Eingabebeispiel: 01001 q0 q3 q4 Der Automat akzeptiert 01001: Es gibt eine Folge von Zuständen q0, q0, q0, q3, q4, q4 die in q4, einem Endzustand, endet ? ? 1 q1 Allgemein akzeptiert der Automat alle Eingaben, die mindestens 2 konsekutive Einsen oder Nullen enthalten. Beispiele: 001, 0001, 11, 110, 1101, ... 1 1 q2 In welcher Reihenfolge finden die Zuständsübergänge statt? Was machen wir z.B in Zustand q0, wenn wir eine 0 lesen? Bleiben wir in q0 oder gehen wir nach q3? Blieben wir immer in q0, würde nicht akzeptiert werden. Wann tun wir was?

51 Nichtdeterministische endliche Automaten
Endliche Automaten mit Zuständen, die für dieselbe Eingabe mehr als einen Übergang erlauben, hatten wir nichtdeterministisch genannt. Das Konzept der nichtdeterministischen endlichen Automaten spielt eine große Rolle in mehreren Gebieten der Informatik, insbesondere im Übersetzerbau und beim Beweisen von Theoremen. Wir hatten schon erwähnt, dass nichtdeterministische endliche Automaten keine mächtigeren Sprachen akzeptieren, als deterministische endliche Automaten. Das werden wir nun im folgenden beweisen. Eine solche Äquivalenz gilt nicht für alle Arten von Automaten (gilt nicht für unendliche Automaten und Kellerautomaten).  Hauptstudium

52 Gedankenmodell: Ein nicht-deterministischer endlicher Automat hat mehrere Steuerungen
Eingabeband E mit Symbolen aus ∑ 1 1 1 1 1 LeseKopf L Steuerung S2 Steuerung S = q0 Steuerung S1 P = (q0, 0) = {S1, S2} Algorithmus: Setze die Steuerung S auf den Anfangszustand; // S = q0; Akzeptiert = istEndzustand(S); While not BandendeErreicht() do { Lies Symbol unter dem Lesekopf // L = a1; Berechne die Menge P aller Zustände aus S und L; // P = (S,L); = {S1, S2, …Sn} ; //P enthält eine Menge von Steuerungen Si . Alle Steuerungen zeigen auf dasselbe Eingabesymbol, können aber in verschiedenen Zuständen sein // In einer Java-Implementation können die Steuerungen als Threads implementiert werden Ist eine der Steuerungen in P in einem Endzustand? Wenn ja, Akzeptiert = true; } // while not Akzeptiert

53 Zustandsbaum eines nicht-deterministischen endlichen Automaten
q3 q4 q1 q2 1 1 q0 1 Zustandsbaum: Gerichteter Graph für eine gegebene Eingabe, wobei die Zustände die Knotenwerte sind, und die Kanten mit dem jeweiligen Eingabesymbol beschriftet sind. Der Anfangszustand ist die Wurzel des Zustandsbaumes. 1 q0 q3 1 q0 q1 q0 q3 q3 q0 q4 1 q0 q1 q4 q0 Wurzel des Zustandsbaums für die Eingabe 01001

54 Die Entstehung der Steuerungen im Zustandsbaum
q0 q3 1 q0 q1 q0 q3 q3 q0 q4 1 q0 q1 q4 q0 S1 S2 S3 S4 S5 S6

55 Ein nicht-deterministischer endlicher Automat kann also immer in mehr als einem Zustand sein
q0 q3 1 q0 q1 q0 q3 q3 q0 q4 1 q0 q1 q4 q0 {q0 , q3} {q0 , q1} {q0 , q3} {q0 ,q3 ,q4} {q0 ,q1 ,q4} Alles Elemente der Potenzmenge von Q, die wir mit P(Q) bezeichnen Wir verallgemeinern die Übergangsfunktion  : Q  ∑  Q deshalb zu  : Q  ∑  P(Q)

56 Nicht-deterministischer Endlicher Automat: Definition
Definition: Ein nichtdeterministischer endlicher Automat ist ein 5-Tupel A = (∑, Q, nea, q0 , F), wobei gilt: ∑, Q, q0 und F (Eingabe, Zustände, Anfangszustand und Endzustände) sind wie beim deterministischen Automaten definiert. Die Übergangsfunktion nea: Q  ∑  P(Q) bildet dabei Tupel (Zustand, Eingabe) auf eine Teilmenge der Potenzmenge von Q ab. nea ist eine Erweiterung von  wie folgt: nea(q, ) = {q} nea(q, wa) = {p |  r  nea(q,w)   (r,a) = p} d.h. ausgehend von einem Zustand q lesen wir die Zeichenkette w. Dann gibt es einen Zustand r, von dem wir aus mit dem Eingabezeichen a zum Zustand p gehen können.

57 Die Äquivalenz von nicht-deterministischen und deterministischen endlichen Automaten
Satz: Sei L eine von einem nicht-deterministischen endlichen Automaten akzeptierte Sprache. Dann existiert ein deterministischer endlicher Automat, der L auch akzeptiert. Beweisidee: Der Beweis baut darauf auf, dass wir für einen gegebenen nicht-deterministischen endlichen Automaten NEA einen deterministischen endlichen Automaten DEA bauen können, der NEA simuliert. Jeder Zustand im DEA wird dabei rein syntaktisch aus den Zustandsteilmengen (die "Ellipsen" auf Folie 55) von NEA konstruiert.

58 Äquivalenz-Beweis Wir beginnen mit einem nicht-deterministischen endlichen Automaten NEA = (∑, Q, nea , q0 , F). Aus diesem konstruieren wir einen deter-ministischen endlichen Automaten DEA = (∑', Q', ', q0', F') wie folgt: ∑' = ∑ Q' = P(Q) . Die Zustände in DEA sind also Elemente der Potenzmenge der Zustände von NEA. Elemente von Q' bezeichnen wir als DEA-Zustand [q1, q2,…, qn]. Ein Zustand ist ein DEA-Zustand [q1, q2, …, qn], wenn der NEA in einem der korrespondierenden Zustände q1, q2, …oder qn ist. q0'= [ q0 ] F' ist die Menge aller DEA-Zustände [q1…, qi ,..., qn] in Q', bei denen mindestens ein Element qi aus F ist. Jetzt müssen wir "nur noch" die Übergangsfunktion ' des deterministischen Automaten aus nea konstruieren.

59 Äquivalenz-Beweis (2) Wir definieren die Übergangsfunktion des deterministischen Automaten DEA wie folgt: '([q1, q2,…, qn], a) = [p1,p2,…, pn] genau dann wenn nea({q1, q2,…, qn}, a) = {p1,p2,…, pn} ' für DEA-Zustand [q1, q2,…, qn] bei Eingabe a wird so berechnet: Wir wenden die nea vom NEA auf jeden der NEA-Zustände q1, q2,…, qn für a an, was mehrere Zustandsmengen ergibt. Diese Zustandsmengen vereinigen wir dann zur Menge {p1,p2,...,pn}, woraus wir den DEA-Zustand [p1,p2,...,pn] erhalten. Illustratives Beispiel: NEA: nea(q1 ,a)={p1}, nea(q2,a)={p2, p7}, nea(q3,a)={p2, p3, p12} NEA: nea(q1 ,a)={p1}, nea(q2,a)={p2, p7}, nea(q3,a)={p2, p3, p12} {p1 p2, p3, p7 ,p12} => [p1 p2, p3, p7 ,p12] DEA: '([q1, q2, q3]), a) = [p1 p2, p3, p7 ,p12] DEA: '([q1, q2, q3]), a) = [p1 p2, p3, p7 ,p12]

60 Äquivalenz-Beweis (3) Jetzt sind wir soweit, den Beweis der Äquivalenz zu machen. Wir benutzen dabei vollständige Induktion über die Länge der Eingabe-Zeichenkette x. D.h. für alle x beliebiger Länge gilt: '(q0', x) = [p1,p2,…, pn] genau dann, wenn nea(q0, x) = {p1,p2,…, pn} Induktionsanfang: |x| = 0. Als Eingabe ist also nur das leere Wort  möglich. Beide Automaten akzeptieren  genau dann, wenn q0 ein Endzustand ist ('(q0', ) = nea (q0, ), aufgrund der Konstruktion von DEA (siehe Folie 59), wo q0'= [ q0 ]. Also L(DEA) = L(NEA). Induktionsschritt: Annahme: Für alle Eingaben der Länge |x| ≤ m akzeptieren die Automaten dieselbe Sprache L(DEA) = L(NEA). '(q0', x) = [p1,p2,…, pn] genau dann, wenn nea(q0, x) = {p1,p2,…, pn} Nun betrachten wir Eingaben der Länge m+1, d.h. alle xa, wobei a ein beliebiges Element aus ∑ ist.Wir müssen jetzt zeigen, dass genau dann, wenn xa vom nichtdeterministischen endlichen Automaten erkannt wird, es auch vom deterministischen endlichen Automaten erkannt wird.

61 Äquivalenz-Beweis (4) (1) Aufgrund der Induktionshypothese gilt für |x| ≤ m : '(q0', x) = [p1,p2,…, pn] genau dann, wenn nea(q0, x) = {p1,p2,…, pn} d.h. die Eingabe von x wird von DEA genau dann erkannt, wenn sie auch von NEA erkannt wird. (2) Zur Erinnerung: Die Übergangsfunktion ' von DEA war definiert als: '([p1, p2,…, pn], a) = [r1,r2,…, rn] genau dann, wenn nea({p1, p2,…, pn}, a) = {r1,r2,…, rn} (3) Außerdem gilt: '(q0' , xa) = ' ('(q0' , x), a) Aus diesen 3 Gleichungen erhalten wir: '(q0', xa) genau dann, wenn nea(q0, xa) = {r1,r2,…, rn} d.h. die Eingabe von xa führt auf einen DEA-Zustand genau dann, wenn die Eingabe von xa einen der korrespondierenden Zustände im NEA ergibt. = [r1,r2,…, rn]

62 Äquivalenz-Beweis (5) Um diese Richtung des Beweises zu beenden, müssen wir nur noch sicherstellen, dass '(q0', x) genau dann in F' ist, wenn beim nichtdeterministischen endlichen Automaten die Berechnung (q0, x) einen Zustand ergibt, der in F ist. Für den vollständigen Beweis der Äquivalenz von NEA und DEA muss noch gezeigt werden, wie aus einem DEA ein NEA konstruiert wird: nichts zu tun, da jeder DEA bereits ein NEA ist Damit gilt also: L(NEA) = L(DEA) q.e.d

63 Beispiel: Konstruktion eines DEA aus einem NEA
Gegeben sei ein NEA = (∑, Q, nea, q0 , F) mit Eingabealphabet ∑ ={0,1} Zustandsmenge Q ={q0 , q1} Übergangsfunktion nea nea(q0 , 0) = {q0 , q1} nea(q0 , 1) = {q1} nea(q1 , 0) =  nea(q1 , 1) = {q0 , q1} Anfangszustand q0 Endzustandsmenge F = {q1} q0 q1 1

64 Beispiel: Konstruktion eines DEA aus einem NEA (2)
Wir konstruieren nun den DEA= (∑', Q', ', [q0], F') wie folgt: Eingabealphabet: ∑'= ∑ = {0, 1} Zustandsmenge: Q' = {[q0 ], [q1 ], [q0 ,q1]} denn die Potenzmenge von Q={q0 , q1} ist P(Q) = {, {q0}, {q1}, {q0,q1}} Übergangsfunktion ': '([q0], 0) = [q0 , q1] denn nea(q0 , 0) = {q0 , q1} '([q0], 1) = [q1] denn nea(q0 , 1) = {q1} '([q1], 0) =  denn nea(q1 , 0) =  '([q1], 1) = [q0, q1] denn nea(q1 , 1) = {q0 , q1} '([q0 , q1], 0) = [q0, q1] denn nea({q0 , q1}, 0)= nea(q0 , 0)  nea(q1 , 0) = {q0 , q1}   = {q0 , q1} '([q0 , q1], 1) = [q0, q1] denn nea({q0 , q1}, 1)= nea(q0 , 1)  nea(q1 , 1) = {q1}  {q0 , q1} = {q0 , q1} Anfangszustand: [q0] Endzustände: F' = {[q1], [q0, q1]} (denn q1 ist ein Endzustand in NEA)

65 Myhill-Verfahren: Einfachere Konstruktion des DEA
Wenn der NEA als Übergangsgraph vorliegt, lässt sich der korrespondierende DEA relativ leicht konstruieren. q0 q1 1 Die Übergangsfunktion ' für DEA konstruieren wir, indem wir die Zustände der Übergangstabelle schrittweise nur nach Bedarf erstellen. Wir fangen mit dem Anfangszustand [q0] an. Eingabe 1 Zustände 3: [q1] ist neu [q0] [q0 , q1] [q1] 2: [q0 , q1] wird hinzugefügt 1: [q0 , q1] ist neu [q0 , q1] [q0 , q1] [q0 , q1] [q1] 4: [q1] wird hinzugefügt [q0 , q1] Neue Zustände werden also nur dann in die Spalte Zustände hinzugefügt, wenn sie als Resultat einer Zustandsberechnung in der Übergangstabelle auftauchen.

66 Myhill-Verfahren (2): Aus der Übergangstabelle erzeugen wir dann den Übergangsgraph von DEA
Eingabe aus ∑' 1 [q0] [q0 , q1] [q1] Zustände [q0 , q1] [q0 , q1] [q0 , q1] [q1] [q0 , q1] [q0 ,q1] 1 1 1 [q0] [q1]

67 Sprachen erzeugen interessante Probleme
Wenn wir Sprachen durch eine Grammatik oder durch einen Automaten spezifizieren, gibt es viele interessante Fragen. Sind zwei Sprachen, die wir mit verschiedenen Grammatiken spezifiziert haben, äquivalent? (Beispiel: Ist Java äquivalent mit C++?) Sind zwei Sprachen, die von verschiedenen Automaten akzeptiert werden, äquivalent? (Beispiel: Zwei Java-Compiler auf verschiedenen Plattformen) Ist die Sprache, die von einem endlichen Automaten akzeptiert wird, endlich oder unendlich? Ist die Sprache regulär oder nicht? Wir nennen eine Sprache regulär, wenn sie von einem endlichen Automaten erkannt wird, oder von einer regulären Grammatik erzeugt wird. Im Rest dieses Vorlesungsabschnitts beschäftigen wir uns mit einem wichtigen Werkzeug, mit dem wir zeigen können, dass bestimmte Sprachen nicht regulär sind. => Pumping Lemma

68 Pumping-Lemma: Vorbereitungen
Gegeben sei ein endlicher Automat A = (∑, Q, , q0 , F) mit n Zuständen. Als Eingabe nehmen wir eine Zeichenkette a1a2….am, wobei m ≥ n gilt. Die Zeichenkette hat also mindestens die Länge n. Wir konstruieren jetzt eine ganz spezielle Übergangsfunktion : (q0 , a1a2….am) = qi für i = 1, 2, ..., m, d.h.  ist so konstruiert, dass folgendes gilt: (q0 , a1) = q1 (q0 , a1a2) = q2 (q0 , a1a2a3) = q3 (q0 , a1a2….am) = qm Erkenntnis: Da der Automat nur n Zustände hat und m ≥ n ist, ist es nicht möglich, dass die Zustände q0, q1, q2, q3, …, qm in der Übergangsfunktion alle verschieden sind! Diese Erkenntnis ist das Kernstück des Pumping-Lemmas.

69 Pumping-Lemma: Vorüberlegungen (2)
Schauen wir uns unsere Übergangsfunktion einmal im Übergangsgraphen für die Eingabe a1a2…am der Länge m an: q0 qm qj =qk a1a2….aj aj+1aj+2….ak ak+1ak+2….am Da die Eingabe m ≥ n Zeichen enthält und wir daher mindestens n+1 Zustände q0, …, qm durchlaufen, wir aber nur n verschiedene Zustände haben, muss es zwei Indizes j und k geben, 0 ≤ j < k ≤ m, für die gilt: qj = qk Das Teilwort aj+1aj+2….ak hat dabei mindestens die Länge 1. Im Weiteren gehen wir davon aus, dass wir die kleinsten Indizes j, k finden (d.h. die Länge des Teilworts a1a2…ak ist kleiner gleich n).

70 Pumping-Lemma: Vorüberlegungen (3)
aj+1aj+2….ak a1a2….aj ak+1ak+2….am q0 qi =qk qm Da qm ein Endzustand ist, ist a1a2…am in L(A), d.h. in der von A akzeptierten Sprache. Es ist aber auch a1a2…aj ak+1ak+2…am in L(A), also die Eingabe, die die Schleife aj+1aj+2….ak beim Zustand qi =qk vermeidet. Und es ist a1a2…aj aj+1aj+2…akaj+1aj+2…ak ak+1ak+2…am in L(A), d.h. die Eingabe, die zweimal über die Schleife beim Zustand qi =qk geht. Dies können wir natürlich verallgemeinern.

71 Pumping-Lemma: Vorüberlegungen (4)
q0 qm qi =qk a1a2….aj aj+1aj+2….ak ak+1ak+2….am Es gilt für ein beliebiges i ≥ 0: Wenn qm ein Endzustand ist und a1a2….am in L(A), dann ist auch a1a2….aj (aj+1aj+2….ak)i ak+1ak+2….am in L(A), d.h. eine Eingabe, die i-mal über die Schleife bei qi =qk geht. Wir haben also folgendes: Gegeben sei eine lange Eingabezeichenkette E, die von einem endlichen Automaten A akzeptiert wird Dann können wir immer eine Teilzeichenkette in E finden, die wir "aufpumpen" können. Die daraus resultierende Zeichenkette wird auch von A akzeptiert.

72 Pumping-Lemma für reguläre Sprachen
Lemma: Sei L(A) eine von einem endlichen Automaten akzeptierte Sprache, also eine reguläre Sprache. Dann gibt es eine Konstante n >0, mit der folgendes gilt: Sei z ein beliebiges Wort mit der Länge |z| ≥ n. Dann ist es möglich, z als Konkatenation von Teilwörtern u, v und w zu schreiben: z = uvw, wobei |uv| ≤ n und |v| ≥ 1. Damit ist dann auch uviw in L(A) für ein beliebiges i ≥ 0.

73 Pumping-Lemma für reguläre Sprachen: Beweis
z = uvw in L(A) => uviw in L(A) für ein beliebiges i ≥ 0 Beweis: Ausgangspunkt ist der Übergangsgraph aus unseren Vorüberlegungen. Wir belegen z, u, v und w einfach wie folgt: z = a1a2….am u = a1a2….aj v = aj+1aj+2….ak w = ak+1ak+2….am q.e.d q0 qm qi =qk a1a2….aj aj+1aj+2….ak ak+1ak+2….am v= w = u=

74 Anwendungen des Pumping-Lemmas
Wir benutzen das Pumping-Lemma mit Vorliebe dann. wenn wir zeigen wollen, dass eine bestimmte Sprache nicht von einem endlichen Automaten erkannt werden kann. Wir benutzen dabei die Beweismethode "Beweis durch Widerspruch": Wir nehmen an, die Sprache ist regulär, d.h. von einem endlichen Automaten erkennbar. Dann wählen wir geschickt eine hinreichend lange Zeichenkette z. Wir zeigen, dass es für jede mögliche Zerlegung z = uvw eine aufgepumpte Zeichenkette uviw gibt, die nicht in der Sprache liegt. Das ist ein Widerspruch zur Annahme, denn nach dem Pumping-Lemma müssen alle aufgepumpten Zeichenketten in der Sprache liegen.

75 "Algorithmus" für das Ausführen von Beweisen mit dem Pumping-Lemma
2-Personenspiel: Kontrahent behauptet, die Sprache L ist regulär. Sie behaupten, dass die Sprache L nicht regulär ist. 1) Der Kontrahent behauptet, dass L regulär ist, also muss das Pumping-Lemma gelten. 2) Sie bitten Ihren Kontrahenten, eine beliebige endliche Zahl n auszuwählen. n ist beliebig, aber einmal ausgewählt ist n fest. 3) Sie wählen nun geschickt eine Zeichenkette z aus L mit |z| ≥ n. Die Wahl von z ist im allgemeinen von n abhängig. 4) Sie bitten Ihren Kontrahenten, z in u, v und w aufzubrechen, wobei die Einschränkungen |uv| ≤ n und |v| ≥ 1 aus dem Pumping-Lemma einzuhalten sind. 5) Dann zeigen Sie, dass für mindestens ein i die nach dem Pumping-Lemma aufgepumpte Zeichenkette uviw nicht in L ist. Das ist ein Widerspruch zur Annahme 1), denn es würde bedeuten, dass das Pumping-Lemma nicht gilt. 6) Wenn der Kontrahent alle möglichen Zerlegungen ausprobiert hat, haben Sie gewonnen: L kann nicht regulär sein.

76 Beispiel für eine nicht-reguläre Sprache
Gegeben sei die Sprache L = { akbk | k > 0 } Beispiel für L: a =( und b = ). Dann gilt unter anderem In L: (), (()), ((())), (((()))) Nicht in L: (, ), ((, ())), (()(, ))(( Kontrahent behauptet, L ist regulär. Sie behaupten, L ist nicht regulär. Kontrahent wählt n = 4. Sie wählen die Zeichenkette z = (((())))  L Kontrahent hat jetzt prinzipiell drei Möglichkeiten, z in u, v und w aufzubrechen: Er wählt v weit links in z = (((()))), so dass es nur öffnende Klammern, z.B. ((, besitzt: Dann hat uv2w = (((((())))zwar genau so viele schließende Klammern wie z, aber mindestens eine öffnende Klammer mehr  uv2w liegt nicht in L. Er wählt v weit rechts in z, so dass es nur schließende Klammern besitzt: Dann hat uv2w zwar genau so viele öffnende Klammern wie z, aber mindestens eine schließende Klammer mehr  uv2w liegt nicht in L. Er wählt v in der Mitte von z, so dass es aus öffnenden und schließenden Klammern besteht: Dann liegt in uv2w mindestens eine öffnende Klammer hinter einer schließenden Klammer ...(...( )...) (...( )...)...  uv2w liegt nicht in L. Wegen des Pumping-Lemmas muss uv2w aber in L liegen. Widerspruch für jede Zerlegung!  L kann nicht regulär sein. q.e.d. u v w

77 Alternativer Beweis Gegeben sei die Sprache L = { akbk | k > 0 }
Beispiel für L: a =( und b = ). Dann gilt unter anderem In L: (), (()), ((())), (((()))) Nicht in L: (, ), ((, ())), (()(, ))(( Kontrahent behauptet, L ist regulär. Sie behaupten, L ist nicht regulär. Kontrahent wählt n = 4. Sie wählen die Zeichenkette z = (((())))  L Wegen der Bedingung |uv| ≤ n aus dem Pumping-Lemma kann der Kontrahent z nur so in u, v und w aufbrechen, dass v nur aus öffnenden Klammern (...( besteht. Dann hat uv2w zwar genau so viele schließende Klammern wie z, aber mindestens eine öffnende Klammer mehr als z  uv2w liegt nicht in L. Wegen des Pumping-Lemmas muss uv2w aber in L liegen. Widerspruch für jede Zerlegung!  L kann nicht regulär sein. q.e.d.

78 Es gibt eine Grammatik für L = { akbk | k > 0}
Die Chomsky-Grammatik G = (T, N, P, Z) mit N = {Z}, T = {a, b} und P = { Z aZb, Z ab} erkennt die Sprache L = { akbk | k > 0 } Beispiel einer Ableitung: Z  aZb  aaZbb  a3Zb3  .... ak-1Zbk-1  akbk G ist nicht regulär, denn die Produktion Z aZb ist weder linkslinear noch rechtslinear. Man bezeichnet solche Produktion als kontextfrei. Eine Grammatik, die kontextfreie Produktionen enthält, bezeichnet man als Chomsky-2 oder kontextfreie Grammatik => mehr über Grammatiken in Info IV

79 Zusammenfassung Für jede Sprache, die von einem nichtdeterministischen endlichen Automaten akzeptiert wird, gibt es einen äquivalenten deterministischen endlichen Automaten. Wir brauchen daher zwischen deterministischen und nicht-deterministischen endlichen Automaten nicht zu unterscheiden und sprechen deshalb nur von endlichen Automaten. Das Pumping-Lemma ist ein wichtiges Werkzeug, wenn man zeigen möchte, dass eine bestimmte Sprache nicht regulär ist, also von einem endlichen Automaten nicht erkannt werden kann.


Herunterladen ppt "Einführung in die Informatik II Automaten"

Ähnliche Präsentationen


Google-Anzeigen