Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken...

234
Automaten und Formale Sprachen Skript zur Vorlesung WS 2009/2010 Vorlesender: Prof. Dr. M. Kunde Fassung vom 07.01.2008 Autor: Prof. M. Dietzfelbinger Technische Universit¨ at Ilmenau Fakult¨ at f¨ ur Informatik und Automatisierung Fachgebiet Komplexit¨ atsheorie und Effiziente Algorithmen

Transcript of Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken...

Page 1: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Automaten und Formale Sprachen

Skript zur Vorlesung

WS 2009/2010

Vorlesender: Prof. Dr. M. Kunde

Fassung vom 07.01.2008

Autor: Prof. M. Dietzfelbinger

Technische Universitat Ilmenau

Fakultat fur Informatik und Automatisierung

Fachgebiet Komplexitatsheorie und Effiziente Algorithmen

Page 2: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Inhaltsverzeichnis

0 Vorbemerkungen 2

0.1 Einleitung und Uberblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

0.2 Zur Arbeitstechnik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

0.3 Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1 Grundbegriffe 9

1.1 Alphabete und Sprachen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2 Endliche Automaten und regulare Sprachen 18

2.1 Deterministische endliche Automaten . . . . . . . . . . . . . . . . . . . . . 18

2.1.1 Endliche Automaten mit Ausgabe . . . . . . . . . . . . . . . . . . . 30

2.2 Nichtdeterministische endliche Automaten . . . . . . . . . . . . . . . . . . 31

2.3 Regulare Ausdrucke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

2.4 Das Pumping-Lemma fur regulare Sprachen . . . . . . . . . . . . . . . . . 60

2.5 Abschlusseigenschaften fur regulare Sprachen . . . . . . . . . . . . . . . . . 63

2.6 Entscheidbarkeitsfragen fur regulare Sprachen . . . . . . . . . . . . . . . . 68

2.7 Die Minimierung deterministischer endlicher Automaten . . . . . . . . . . 71

2.7.1 Unerreichbare Zustande . . . . . . . . . . . . . . . . . . . . . . . . 71

2.7.2 Aquivalente und nicht-aquivalente Zustande . . . . . . . . . . . . . 74

2.7.3 Minimalautomaten . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

3 Grammatiken und die Chomsky-Hierarchie 87

3.1 Grammatiken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

3.2 Rechtslineare Grammatiken und regulare Sprachen . . . . . . . . . . . . . 99

3.2.1 Rechtslineare Grammatiken . . . . . . . . . . . . . . . . . . . . . . 99

3.2.2 Aquivalenz zu regularen Sprachen . . . . . . . . . . . . . . . . . . . 100

ii

Page 3: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

3.2.3 Linkslineare Grammatiken . . . . . . . . . . . . . . . . . . . . . . . 102

4 Kontextfreie Grammatiken und kontextfreie Sprachen 105

4.1 Beispiele und Ableitungen . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

4.2 Ableitungsbaume, Linksableitungen, Rechtsableitungen . . . . . . . . . . . 111

4.3 Die Chomsky-Normalform . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

4.3.1 Separierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

4.3.2 Verkurzung rechter Seiten . . . . . . . . . . . . . . . . . . . . . . . 127

4.3.3 Bearbeitung von ε-Produktionen . . . . . . . . . . . . . . . . . . . 129

4.3.4 Elimination von Kettenregeln . . . . . . . . . . . . . . . . . . . . . 137

4.4 Das Pumping-Lemma fur kontextfreie Sprachen . . . . . . . . . . . . . . . 141

4.5 Der Cocke-Younger-Kasami-Algorithmus . . . . . . . . . . . . . . . . . . . 158

4.6 Abschlusseigenschaften kontextfreier Sprachen I . . . . . . . . . . . . . . . 163

5 Kellerautomaten 167

5.1 Nichtdeterministische Kellerautomaten . . . . . . . . . . . . . . . . . . . . 167

5.2 Top-Down-Parsing, LL-Parsing . . . . . . . . . . . . . . . . . . . . . . . . 181

5.3 Bottom-Up-Parsing, LR-Parsing . . . . . . . . . . . . . . . . . . . . . . . . 191

5.4 Akzeptierungsmodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

5.5 Kellerautomaten und Grammatiken . . . . . . . . . . . . . . . . . . . . . . 198

5.6 Abschlusseigenschaften II . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

5.7 Deterministische Kellerautomaten und ihre Sprachen . . . . . . . . . . . . 202

5.8 Entscheidungsfragen fur kontextfreie Sprachen . . . . . . . . . . . . . . . . 209

A 214

A.1 Zahldarstellungen und Abzahlungen . . . . . . . . . . . . . . . . . . . . . . 214

A.1.1 Die b-are Zahldarstellung . . . . . . . . . . . . . . . . . . . . . . . 214

A.1.2 Die b-adische Zahldarstellung . . . . . . . . . . . . . . . . . . . . . 218

A.2 Induktive Definitionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222

A.2.1 Beispiel: Aussagenlogische Formeln . . . . . . . . . . . . . . . . . . 222

A.2.2 Beispiel: Korrekte Klammerausdrucke . . . . . . . . . . . . . . . . . 225

A.2.3 Induktive Definitionen: Formaler Rahmen . . . . . . . . . . . . . . 228

1

Page 4: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Kapitel 0

Vorbemerkungen

0.1 Einleitung und Uberblick

Die Lehrveranstaltung”Automaten und Formale Sprachen (AFS)“ behandelt zusammen

mit der Veranstaltung”Berechenbarkeit und Komplexitatstheorie (BKT)“ im 5. Semester

die Grundlagen der Theoretischen Informatik, wie sie traditionell im Grundstudium desStudienganges Informatik vermittelt werden. Die in diesen Vorlesungen benutzten Me-thoden sind mathematisch, auch hier werden also Dinge (

”Begriffe“/

”Konzepte“) formal

definiert, uber die dann Satze bewiesen werden. Allerdings haben die in diesen Veranstal-tungen behandelten Gegenstande auch noch die Eigenschaft, dass sie in engem Bezug zukonkreten Fragen aus dem Informatik-Alltag stehen.

In der AFS-Veranstaltung geht es hauptsachlich um Mittel zur Beschreibung”formaler

Sprachen“, wie man sie insbesondere bei der Erstellung von Compilern oder Interpreternbenotigt. Die wesentlichen Beschreibungsmittel hierfur sind Automaten und Grammati-ken.

Wir beginnen die Vorlesung mit der Einfuhrung des Begriffs (synonym: Konzeptes)”For-

male Sprache“. Etwas flapsig ausgedruckt ist eine formale Sprache einfach eine Mengevon Texten (technisch sagt man zu einem Text

”Wort“ oder

”String“), wobei man die

Menge der Zeichen festlegen muss, die im Text benutzt werden durfen. Beispiele fur for-male Sprachen sind

• die Menge {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, . . .} der Dezimaldarstellungen dernaturlichen Zahlen; die erlaubten Zeichen sind 0, 1, 2, 3, 4, 5, 6, 7, 8, 9;

• die Menge {0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, . . .} der Binardarstellungen dernaturlichen Zahlen; die erlaubten Zeichen sind 0 und 1;

• die Menge aller Zeichenreihen aus {X, , 0, 1,∨,∧,¬, (, )}, die Formeln mit Aussage-symbolen X 1, X 10, X 11 usw. in disjunktiver Form darstellen (wie (X 100∧X 11)∨(X 1 ∧ ¬X 10 ∧ ¬X 1001));

2

Page 5: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

• die Menge der korrekten Darstellungen fur Floating-point-Zahlen in Pascal (oder C,oder C++, oder Java);

• die Menge der korrekt gebildeten Namen (”identifier“) in Pascal-Programmen;

• die Menge der korrekt gebildeten arithmetischen Ausdrucke in Pascal-Progammen;

• die Menge der syntaktisch korrekten Pascal-Programme (oder C- oder C++- oderJava-Programme);

• die Menge der syntaktisch korrekten Pascal-Programme, die auf allen Eingaben nachendlich vielen Schritten anhalten;

• die Menge aller Worter, die in der gedruckten Version des Vorlesungsverzeichnissesder TU Ilmenau fur das Wintersemester 2007/08 stehen.

Man kann sich daruber streiten, ob die Menge der korrekten Satze der deutschen Spracheeine formale Sprache darstellt, da wohl fur viele Satze die Frage, ob sie korrekt oder nichtkorrekt sind, nicht eindeutig beantwortet werden kann, da die Antwort vom Zusammen-hang oder vom Geschmack abhangt oder sich im Lauf der Zeit andert.

Aus den Beispielen sieht man schon, dass viele wichtige formale Sprachen unendlich sind.Um eine solche Sprache zu beschreiben (d. h. zu

”spezifizieren“), kann man also nicht

einfach alle Worter aufzahlen, die dazu gehoren. Vielmehr brauchen wir Formalismen,die es gestatten, solche unendlichen Mengen von Texten durch einen einzigen endlichenText oder eine endliche Struktur zu beschreiben. Als Beispiel fur eine solche endlicheBeschreibung sei die bekannte Methode zur Definition der syntaktisch korrekten Pascal-Programme durch Syntaxdiagramme genannt. Alle Syntaxdiagramme (die man in jedemordentlichen Pascal-Buch findet) zusammen sind nur ein endliches Gebilde, aber sie er-lauben es, korrekte und nicht korrekte Programmtexte zu unterscheiden.

Ein Hauptgegenstand der Vorlesung sind also verschiedene Formalismen zur Beschreibungund Manipulation formaler Sprachen. Dabei beginnen wir mit den endlichen Automa-ten (schon aus der Vorlesung

”Rechnerorganisation“ bekannt), die eine der primitivsten

solchen Beschreibungsformen darstellen. Bemerkenswert ist, dass solche Automaten ei-ne Vielzahl von Anwendungen haben: ziemlich naheliegende im Zusammenhang mit demLesen und Analysieren einfachst strukturierter Texte (wie Identifier oder Floating-Point-Zahlen) oder einfacher Kommandosprachen, aber auch bei Grundfunktionen von Editoren(Suchen eines Strings in einer Datei). Andererseits werden endliche Automaten immerdann verwendet, wenn es um die mathematische Modellierung eines Systems geht, dasnur endlich viele Zustande annehmen kann. Diese findet man in praktisch jedem Anwen-dungsbereich, bei den Betriebssystemen, bei technischen Anwendungen (Steuerung), inder Rechnerarchitektur, in der Telematik ebenso wie bei der Modellierung von Transak-tionen zwischen Geschaftspartnern (e-commerce). Oft erzeugen endliche Automaten dannauch Ausgabesymbole oder Ausgabeworter. Diesen Aspekt streifen wir nur kurz. Nicht-deterministische endliche Automaten bilden eine Verallgemeinerung von endlichen

3

Page 6: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Automaten, bei denen der nachste Schritt nicht eindeutig vorgeschrieben ist. Dieses Mo-dell macht die Beschreibung einger Sprachen kompakter moglich; wir werden aber sehen,dass die Ausdruckskraft solcher Automaten im Prinzip nicht starker ist als die der gewohn-lichen endlichen Automaten. Automaten kann man als

”Akzeptoren“ fur Texte benutzen,

indem man sie einen endlichen Eingabetext Buchstabe fur Buchstabe lesen lasst und amEnde fragt, ob der Automat den gelesenen Text gut findet (

”akzeptiert“) oder nicht.

Wenn ein Automat M gegeben ist, bildet die Menge der von M akzeptierten Texte eineSprache LM . Die Sprachen, die sich von endlichen Automaten beschreiben lassen, nennenwir regulare Sprachen. Fur sie stellen wir noch einen anderen Beschreibungsmecha-nismus bereit, die regularen Grammatiken. Diese beschreiben Sprachen nicht durcheinen Lese- und Akzeptierungsmechanismus, sondern durch einen Erzeugungsprozess inder Art, wie die Syntaxdiagramme die Regeln aufzeigen, wie Pascalprogramme gebautwerden konnen. Wir zeigen, dass endliche Automaten und regulare Grammatiken genaudieselbe Klasse von Sprachen beschreiben, indem wir Grammatiken in Automaten undAutomaten in Grammatiken umbauen, ohne dass sich die zugehorige Sprache andert.

Weiter untersuchen wir Wege, wie wir zu einem”minimalen Automaten“ kommen konnen,

also demjenigen Automaten fur eine regulare Sprache L, der die geringste Anzahl vonZustanden hat. (Ein solcher Automat ist im wesentlichen eindeutig bestimmt.)

Eine weitere wichtige Beschreibungsform fur regulare Sprachen sind durch die regularenAusdrucke gegeben. Man begegnet einfachen regularen Ausdrucken, wenn man einenEditor eine komplexere Suchen nach Teilstrings in einer Datei durchfuhren lasst (z. B.mit wildcards und Wiederholungen von Teiltextstrukturen). Auch hier zeigen wir wie-der exakt, das heißt mit einem mathematischen Beweis, dass diese Beschreibungsformaquivalent zu der mit endlichen Automaten ist.

Die Untersuchung der regularen Ausdrucke und der von ihnen definierten Sprachen gibtuns Gelegenheit, die Methode der

”induktiven Definitionen“ etwas genauer unter die

Lupe zu nehmen, die oft zur Abgrenzung von”legalen“ Strukturen von

”illegalen“ benutzt

wird, wie etwa, um die Menge aller korrekt gebildeten aussagenlogischen Formeln prazi-se zu beschreiben. Auch die Beschreibung der Menge der syntaktisch korrekten Pascal-Programme lasst sich als eine solche induktive Definition auffassen. — Es stellt sich heraus,wiederum mit einem konstruktiven Umbau-Beweis, dass die Klasse der von regularen Aus-drucken beschreibbaren Sprachen wieder dieselbe ist wie die durch endliche Automatenbeschreibbare.

Wichtig sind mathematische Techniken, mit denen man beweisen kann, dass eine vorge-gebene Sprache nicht regular ist, man sich also die Suche nach einem sie beschreibendenAutomaten sparen kann. Wir beweisen das sogenannte Pumping Lemma, das die wich-tigste Technik fur diesen Zweck darstellt. Mit dieser Technik lasst sich dann schnell undelegant unterscheiden, welche Aufgaben man von endlichen Automaten erledigen lassenkann und welche nicht.

Der zweite Teil der Vorlesung ist der Betrachtung der kontextfreien Grammatiken undder zugehorigen Klasse der kontextfreien Sprachen gewidmet. Woher die merkwurdige

4

Page 7: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Bezeichnung stammt, werden wir im Verlauf der Vorlesung erklaren. Hier sei nur gesagt,dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax allerProgrammiersprachen definiert wird, die irgendeine Form von Klammerschachtelungzulassen (und das sind praktisch alle). Hinter den Pascal-Syntaxdiagrammen steckt einekontextfreie Grammatik, ebenso wie hinter den mehr oder weniger formalen Beschrei-bungen C, C++, Java, Haskell, usw. in den entsprechenden Handbuchern. Auch XML,der aktuell praktisch extrem wichtige Formalismus zur Beschreibung

”semistrukturierter

Daten“, ist im wesentlichen ein System, in dem man fur jede Anwendung eine eigenekontextfreie Grammatik uberlegen muss.

Wir definieren kontextfreie Grammatiken, untersuchen Syntaxbaume und Ableitungs-sequenzen, und betrachten wichtige Normalformen fur Grammatiken. Ein

”Pumping

Lemma“ fur kontextfreie Sprachen erlaubt den Nachweis, dass bestimmte Sprachen nichtkontextfrei sind; hierzu gehort zum Beispiel die Sprache aller Texte, die durch Hinter-einanderfugen eines Textes mit einer exakten Kopie entstehen (z. B. gehort das Wortabrakadabrakad zu dieser Sprache). Diese einfache Beobachtung fuhrt zu der Erkennt-nis, dass kontextfreie Grammatiken nicht ausreichen, um eine typische Eigenschaft vonPascal-Programmen auszudrucken, namlich dass jede Variable, die irgendwo benutzt wird,vorher deklariert worden sein muss. (Hierfur gibt es dann gesonderte

”Kontextbedingun-

gen“, die man zusatzlich zu den Syntaxdiagrammen beachten muss.)

Die Beschreibung der Menge der syntaktisch korrekten Programme ist eine Sache, die Syn-taxanalyse und die Ubersetzung in Maschinensprache (oder einen Zwischencode wie beiJava) eine andere. Hierfur braucht man Syntaxanalysemethoden, die im Fall von kontext-freien Grammatiken durch sogenannte Kellerautomaten geliefert werden. Auch diesesModell wird ausfuhrlich besprochen, und wir untersuchen im Prinzip, wie KellerautomatenWorter daraufhin untersuchen, ob sie zu einer von einer Grammatik beschriebenen Spra-che gehoren. Auch hier werden nichtdeterministische Automaten fur Modellierungszweckebenutzt. Um eine Syntaxanalyse durch einmaliges Lesen des Textes zu erreichen, benotigtman Kellerautomaten, die in jeder Situation einen eindeutig bestimmten nachsten Schritthaben, was zu den

”deterministischen Kellerautomaten“ fuhrt. Die Einzelheiten der Kon-

struktion von Syntaxanalyseverfahren aus einer kontextfreien Grammatik bleibt einerSpezialvorlesung zum Thema

”Ubersetzerbau“ vorbehalten.

Ausblick: Die Vorlesung”Berechenbarkeit und Komplexitatstheorie“ im 5. Semester be-

fasst sich zunachst mit der Theorie zur”Berechenbarkeit und Entscheidbarkeit“; hier

wird versucht, die Trennlinie zu verstehen zwischen Aufgaben, die man mit einem Com-puter im Prinzip losen kann und solchen, die man nicht losen kann. Das beruhmteste vonComputern unlosbare Problem, das

”Halteproblem“, mochte wohl jeder Programmierer

gerne gelost haben: Gegeben ein Computerprogramm P und eine Eingabedatei D, haltP irgendwann an, wenn ich es mit den Daten aus D als Input futtere? In einem zweitenTeil (

”NP-Vollstandigkeit“) geht es um die Grenze zwischen Problemen, die von effizien-

ten, das heißt, schnellen Algorithmen gelost werden konnen, und solchen, fur die es keineschnellen Algorithmen gibt.

5

Page 8: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

0.2 Zur Arbeitstechnik

Erfahrungsgemaß fallt es vielen Studierenden schwer, sich mit der Arbeits- und Denkwei-se anzufreunden, die in den beiden Theorie-Vorlesungen erwartet wird. Dabei fallt denmeisten die Arbeit mit der AFS-Vorlesung noch leichter als die BKT-Vorlesung.

Daher folgen hier einige aus der Erfahrung der mit diesen Vorlesungen und zugehorigenUbungen befassten Lehrpersonen fließende Ratschlage. (Sie klingen vielleicht banal, ihreBeachtung erhoht aber Ihre Erfolgschancen. Die Ratschlage sind nicht unbedingt leichtumzusetzen, erfordern also Ihre Aufmerksamkeit jede Woche neu.)

• Diese Vorlesung ist von der Dichte und der Art des Stoffs her nicht dafur geeignet,sie durch reines Zuhoren zu verarbeiten. Eigenes Weiterarbeiten ist unabdingbar.

• Arbeiten Sie daher den Stoff jeder Vorlesung zeitnah nach. Material hierfur sind Ihreeigenen Notizen, das Skript im Web, erganzendes Material von der Webseite, sowieweitere Literatur. Veranschlagen Sie hierfur mindestens 3 Zeitstunden pro Woche,also deutlich mehr als die Dauer der Vorlesung.

• Stil und Arbeitsweise sind mathematisch, und es kommt darauf an, dass man dieDefinitionen ganz genau ansieht und versteht.

• Es bestehen enge Zusammenhange innerhalb eines Vorlesungsteils, aber auch uberweitere Abstande. Man muss die relevanten Definitionen und Sachverhalte (

”Satze“)

aus den vergangenen Vorlesungen auswendig parat haben, da man sonst die Dingenicht verstehen kann, die darauf aufbauen.

• Wir geben alle 14 Tage ein Ubungsblatt heraus. Uberlegen Sie sich fur einige oderalle Ubungsaufgaben Losungen, die dann mit den in der Ubungsstunde angegebe-nen verglichen werden konnen. Studierende sind auch eingeladen, selbst Losungenvorzutragen. – Minimale Vorbereitung auf die Ubung ist das Durchdenken der Auf-gaben, damit man weiß, worum es geht. – Auch fur die Ubungen gilt, dass zeitnahesNacharbeiten und Kontrolle des eigenen Verstehens am meisten nutzt.

• Stellen Sie Fragen (in oder nach der Vorlesung, in oder nach den Ubungen).

• Bereiten Sie sich semesterbegleitend auf die Prufung vor, die im Februar stattfindet.

• Gegenstand der Prufung ist der Stoff der Vorlesung und die in den Ubungen bear-beiteten Aufgabentypen. Fur die Fragen zur Vorlesung ist es sehr hilfreich, wenn Siesich eine eigene Kurzfassung mit den Definitionen und den zentralen Tatsachen an-fertigen. Sie finden fruhere Klausuren auf unseren Webseiten. Das schriftliche Losenvon Ubungsaufgaben und fruheren Klausuraufgaben, auch in der Nacharbeit derUbungen, ist die beste Prufungsvorbereitung.

6

Page 9: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

0.3 Literatur

Zur Vorlesung erscheint ein Skript im ps- und pdf-Format, das im Copyshop und auf derWebseite zur AFS-Vorlesung

http://www.tu-ilmenau.de/fakia/Automaten-und-Formal.afs_ws07.0.html

zu finden ist.

Auf derselben Webseite findet sich auch weiteres Material (Ubungsblatter, Links zu fruher-en Vorlesungen, fruhere Klausuren, Kopien von Folien bzw. Prasentationsmaterialien, diein der Vorlesung benutzt wurden). Das Skript und die Folien gemeinsam definieren denprufungsrelevanten Stoff der Vorlesung.

Es wird aber allen Studierenden geraten, auch andere Darstellungen und Bucher zu Ratezu ziehen. Fast alle Bucher zum Thema decken den Stoff beider Vorlesungen (AFS undBKT) ab.

Hier einige (bei weitem nicht alle) Bucher zum Stoff der Vorlesungen AFS und BKT:

1. J. E. Hopcroft, R. Motwani, J. D. Ullman: Einfuhrung in die Automatentheorie,Formale Sprachen und Komplexitatstheorie. Pearson, 2002.(Klassiker in Neubearbeitung. Ubersetzt aus dem Englischen. Sehr ausfuhrlich, vieleAnwendungen und Beispiele, mathematische Details; Ubungsaufgaben.)

2. U. Schoning: Theoretische Informatik – kurzgefasst. 4. Auflage. Spektrum Akademi-scher Verlag, 2001.(Sehr kompakt, konzentriert sich auf die wesentlichen Techniken. Viele Exemplarein der Lehrbuchsammlung.)

3. I. Wegener: Theoretische Informatik – eine algorithmenorientierte Einfuhrung. 3.Auflage. Teubner, 2005.(Verwandt zur Vorlesung, aber anderer Stil. Beginnt mit BKT-Stoff, dann AFS-Stoff.)

4. I. Wegener: Kompendium Theoretische Informatik – eine Ideensammlung. Teubner,1996.(Erganzung zur Vorlesung, erlautert Konzepte und ubergreifende Ideen.)

5. G. Vossen, K.-U. Witt, Grundkurs Theoretische Informatik, 3. Auflage, Vieweg,2004.(Dieses Buch entwickelt die Theorie, legt aber auch großen Wert auf die Darstellungvon Anwendungsbeispielen.)

6. A. Asteroth, C.Baier: Theoretische Informatik – Eine Einfuhrung in Berechenbar-keit, Komplexitat und formale Sprachen mit 101 Beispielen. Pearson Studium, 2002.(Theoretische Informatik, wie sie an der Universitat Bonn gelehrt wird. Viele Bei-spiele, aber mathematisch genaue Entwicklung.)

7

Page 10: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

7. D. C. Kozen: Automata and Computability. Springer, 1997.(Amerikanische Version des Themas.)

8. K. W. Wagner: Theoretische Informatik – Eine kompakte Einfuhrung. 2. Auflage.Springer, 2003.(Theoretische Informatik, wie sie an der Universitat Wurzburg gelehrt wird. Deut-lich mehr Gewicht auf der Berechenbarkeitstheorie mit Maschinenmodellen.)

9. N. Blum: Einfuhrung in Formale Sprachen, Berechenbarkeit, Informations- undLerntheorie. Oldenbourg, 2007.(Kombination des Stoffs der Vorlesung mit einer Einfuhrung in das Gebiet der In-formationstheorie, exakte Durchfuhrung der Beweise.)

Zu Informatik- und Mathematik-Grundlagen:

1. A. Aho, J. D. Ullman. Informatik: Datenstrukturen und Konzepte der Abstraktion.International Thomson Publishing, 1996.

2. Ehrig, Mahr, Cornelius, Große-Rhode, Zeitz: Mathematisch-strukturelle Grundlagender Informatik. Springer, 2001.

3. C. Meinel, M. Middendorf: Mathematische Grundlagen der Informatik – Mathema-tisches Denken und Beweisen. Teubner, 2002.

Website:

1.”Lernumgebung Automatentheorie“, Universitat Zurich, Skript und Automaten zum

Selberbasteln. http://www.ifi.unizh.ch/cl/broder/jflap

Weiterfuhrende Literatur:

1. A. Aho, R. Sethi, J. D. Ullman. Compilerbau Teil 1. Oldenbourg, 1999.

2. R. Floyd, R. Beigel. Die Sprache der Maschinen. International Thomson Publishing,1996.

3. J. Hromkovic: Theoretical Computer Science – Introduction to Automata, Computa-bility, Complexity, Algorithmics, Randomization, Communication, and Cryptogra-phy. Springer, 2004.

4. H. Lewis, C. Papadimitriou: Elements of the Theory of Computation. Prentice Hall,1998.

5. R. Wilhelm, D. Maurer: Ubersetzerbau – Theorie, Konstruktion, Generierung. Sprin-ger, 1997.

8

Page 11: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Kapitel 1

Grundbegriffe

1.1 Alphabete und Sprachen

1.1.1 Vereinbarung N bezeichnet die Menge {0, 1, 2, 3, . . .} der naturlichen Zahlen.Fur die Menge {1, 2, 3, . . .} der positiven naturlichen Zahlen schreiben wir N+.

1.1.2 Definition Fur eine beliebige Menge X, X 6= ∅, bezeichnet Seq(X) die Mengeder endlichen Folgen oder “Tupel” in X, d. h. die Menge

{(a1, . . . , an) | n ≥ 0, a1, . . . , an ∈ X}.

(Im Gegensatz dazu ist XN = {(ai)i≥0 | ai ∈ X fur i ≥ 0} die Menge der unendlichenFolgen in X.)

1.1.3 Beispiel Wir konnen endliche Tupel aus naturlichen Zahlen betrachten: DieMenge Seq(N) enthalt ( ) (die leere Folge mit Lange 0), (0), (1), . . ., (0, 0), (0, 1), (0, 2),. . ., (1, 0), (1, 1), (1, 2), . . ., (3, 4, 4, 2), . . ..

In hoheren Programmiersprachen wie Pascal, C, Java, usw. wird anscheinend mit Zahlengerechnet. Bei genauerem Hinsehen stellt sich heraus, dass reale Rechner dies gar nichttun. Vielmehr operieren sie auf Bitfolgen (der Inhalt des Hauptspeichers eines Rechners et-wa ist eine Bitfolge, ebenso Dateiinhalte). Zahlen muß man binar kodieren. Auch wir wer-den uns meist auf den Standpunkt stellen, dass Maschinen nur Zeichenreihen mit Zeichenaus einem endlichen Zeichensatz bearbeiten konnen. Im Anhang

”Zahldarstellungen und

Abzahlungen“ (A.1) werden die Prinzipien des Umrechnens von Zahlen in Zeichenreihenund umgekehrt besprochen. An dieser Stelle geben wir einige allgemeine Grundkonzeptefur solche Zeichenreihen (synonym: Worter, Strings, Zeichenketten) an.

9

Page 12: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

1.1.4 Definition Ein Alphabet Σ ist eine endliche nichtleere Menge. (Alphabete wer-den oft auch mit ∆,Γ, . . . bezeichnet.) Die Elemente eines Alphabets heißen Buchstaben .Typische konkrete Buchstaben sind: 0, 1, 2,. . . , a, b, c, . . . , A, B, C, . . . , #, /c, $, . . ..Die Symbole a, b, . . . , a0, a1, a2, . . . werden auch als Platzhalter fur

”beliebige Buchstaben“

verwendet.

1.1.5 Beispiel

(a) Die Menge {1} oder {|} heißt das unare Alphabet . Die Menge Σ = {0, 1} heißt dasbinare Alphabet . Die Menge {0, 1, #} ist das binare Alphabet mit Trennzeichen#.

(b) Die Menge Γ = {0, 1}8 ist das Alphabet aller 8-Bit-Strings (Bytes). Der einfacheASCII-Code gibt eine injektive Abbildung einer Menge von

”naturlichen“ Buch-

staben, Ziffern, und Symbolen (d. h. eines gewissen Alphabets) in {0, 1}7 an. DieseDarstellung wird dann durch eine fuhrende Null zu einem Byte erganzt. Der volleASCII-Code hat 256

”Buchstaben“, unter ihnen auch jede Menge (unsichtbare)

Steuerzeichen.

(c) Das lateinische Alphabet besteht aus 26 Groß- und 26 Kleinbuchstaben. Hinzu kom-men eine Reihe von Sonderzeichen wie die Satzzeichen und der Zwischenraum.

(d) Naturlich sind Alphabete Σ und Σ′”gleichwertig“, wenn |Σ| = |Σ′| gilt, es also eine

bijektive Abbildung von Σ nach Σ′ gibt. Jedes Alphabet Σ mit k Buchstaben ist mit{1, 2, . . . , k} und {0, 1, . . . , k− 1} gleichwertig. Die Schreibweise Σ = {b1, b2, . . . , bk}bzw. Σ = {b0, b1, . . . , bk−1} stellt die entsprechende Korrespondenz her.

1.1.6 Definition Σ sei ein Alphabet. Fur n ∈ N bezeichnet Σn die Menge aller Folgenw = (a1, . . . , an) aus n Buchstaben aus Σ. Statt (a1, . . . , an) schreiben wir a1 · · · an, fallskeine Verwirrung moglich ist1. Eine solche Folge w nennen wir ein Wort uber Σ (synonym:Zeichenreihe, Zeichenkette oder String uber Σ). Die Lange von w, bezeichnet mit|w|, ist n. Offenbar gibt es genau |Σ|n Worter der Lange n uber Σ. Die Menge aller Worteruber Σ wird folgendermaßen bezeichnet:

Σ∗ :=⋃{Σn | n ∈ N}.

Naturlich ist Σ∗ = Seq(Σ). Ein besonderes Wort ist ε, das leere Wort, das einzige Wortder Lange 0 uber Σ. Formal: ε = ( ), die leere Folge.

1Sind die Buchstaben in Σ selbst Worter, muss man naturlich die Fugen markieren:z.B. w = (11, 7, 9, 13, 20) bei Σ = {0, . . . , 31} oder w = 〈del1〉〈text〉〈del2〉 bei Σ = {del1, text,del2, . . .}.Treten (, ) und das Komma als Buchstaben auf, verhindert man Missverstandnisse gegebenenfalls durchEinschließen in Anfuhrungszeichen “(”, “)”, “,” oder dergleichen.

10

Page 13: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Beachte: Σ0 = {ε}, Σ1

”=“ Σ. (Man identifiziert das 1-Tupel (a) mit dem Objekt a und

erhalt Σ1 = {(b) | b ∈ Σ}”=“ Σ.) Mit dieser Vereinbarung ist dann stets Σ ⊆ Σ∗.

Die Menge aller nichtleeren Worter uber Σ heißt Σ+:

Σ+ := Σ∗ − {ε} =⋃{Σn | n ≥ 1}.

1.1.7 Beispiel

(a) Σ = {1} : Dann ist Σ∗ = {ε, 1, 11, 111, 1111, 11111, . . .} = {0, 1, 2, 3, 4, 5, . . .}.(Die Bijektion 1 · · · 1︸ ︷︷ ︸

k−mal

↔ k liefert die Strichlistendarstellung oder unare Darstellung

fur die naturlichen Zahlen.)

(b) Σ = {0, 1} : Dann ist Σ∗ = {ε, 0, 1, 00, 01, 10, 11, 000, 001, . . .}, die Menge aller Bi-narworter.

(c) Ein ASCII-File ist ein Wort uber Σ = {0, 1}8. Man beachte dabei, dass bei der rech-nerinternen Darstellung die unsichtbaren Leerzeichen als Buchstabe (

”space“) gelten

und Zeilenumbruche durch Steuerzeichen markiert werden, die selbst Buchstabe imASCII-Alphabet sind.

1.1.8 Definition Sind u = (a1, . . . , an) und v = (b1, . . . , bm) Worter (uber einem Al-phabet Σ), so heißt u◦ v := (a1, . . . , an, b1, . . . , bm) (ein Wort der Lange n+m) die Kon-katenation oder Hintereinanderschaltung von u und v. Kurz: a1 · · · an ◦ b1 · · · bm =a1 · · · anb1 · · · bm. Manchmal findet man auch die Notation u · v fur diese Operation. Nor-malerweise lasst man das Operationszeichen weg und schreibt uv statt u ◦ v.

1.1.9 Beispiel010 · 111 = 010 ◦ 111 = 010111

ε · 11 = ε ◦ 11 = 1110 · ε = 10 ◦ ε = 10

εε = ε · ε = ε ◦ ε = ε

1.1.10 Bemerkung Die Menge Σ∗ ist mit der Operation ◦ (Konkatenation) ein Mo-noid mit neutralem Element ε, d.h. es gelten die folgenden Beziehungen:

(i) Assoziativitat: (uv)w = u(vw) fur alle u, v, w ∈ Σ∗.

(ii) Neutrales Element: εu = uε = u fur alle u ∈ Σ∗.

11

Page 14: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

1.1.11 Beispiel(00 ◦ 10) ◦ 111 = 001011100 ◦ (10 ◦ 111) = 0010111

100 ◦ ε = ε ◦ 100 = 100ε ◦ ε = ε

Konsequenz: Bei Konkatenation kann man Klammern beliebig setzen oder alle Klammernweglassen. Man schreibt also 00 ◦ 01 ◦ 101 fur (00 ◦ 01) ◦ 101 oder 00 ◦ (01 ◦ 101).

1.1.12 Definition Fur ein Wort w = a1 · · · an ∈ Σ∗ und einen Buchstaben a ∈ Σ sei

|w|a := die Haufigkeit des Auftauchens von a in w

:= |{i | 1 ≤ i ≤ n ∧ ai = a}|.

Beispiele: |0101011|1 = 4; |0101011|0 = 3; |0101011|2 = 0.

Offenbar gilt: |uv|a = |u|a + |v|a (und ahnliche Formeln) und |w| =∑k

i=1 |w|bi, wenn

Σ = {b1, . . . , bk} ist.

1.1.13 Definition Ist w ∈ Σ∗ ein Wort und i ∈ N, so wird mit wi die i-fache Kon-katenation von w mit sich selbst bezeichnet, d.h. wi = ww · · ·w︸ ︷︷ ︸

i−mal

. Formal definieren wir

induktiv:w0 := ε wi := wwi−1, fur i ≥ 1.

Da Σ ⊆ Σ∗, ist damit auch ai fur Buchstaben a ∈ Σ erklart. Informal: ai = a · · · a︸ ︷︷ ︸i−mal

, fur

i ≥ 0. Man beachte die Gleichheiten a0 = ε und a1 = a, sowie εi = ε fur beliebiges i ≥ 0.

Wir vereinbaren folgende Prioritatsregel beim Zusammentreffen von Konkatenation undPotenzierung: Potenzieren bindet starker als Konkatenation. Um dies aufzuheben, sindgeeignet Klammern zu setzen.

Beispiele: Sei Σ = {0, 1}. Ist a = 0 und w = 101, dann gilt a0 = w0 = ε, a6 = 000000,w3 = 101101101. Weiter gilt 000120 = 000110, (00)(01)20 = 0001010 und (0001)20 =000100010.

1.1.14 Definition u und w seien Worter uber Σ. Dann heißt u ein

TeilwortPrafix oder Anfangsstuck

Suffix oder Endstuck

von w, falls

∃v1, v2 ∈ Σ∗ : w = v1uv2

∃v ∈ Σ∗ : w = uv∃v ∈ Σ∗ : w = vu

.

Beachte: Wenn u ein Prafix (oder Suffix) von w ist, ist u auch Teilwort von w, da w = εuv(oder w = vuε) geschrieben werden kann. — Es ist klar, dass jedes w ∈ Σn genau n + 1Prafixe und n+ 1 Suffixe hat, unter denen sich jeweils auch w selbst und ε befinden.

12

Page 15: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

1.1.15 Beispiel 0000 ist Teilwort von 010000011, aber weder Prafix noch Suffix. 0000ist Prafix von 0000010 und Suffix von 1110000; daher ist 0000 auch Teilwort von 000010und 1110000.

1.1.16 Definition

(a) Wenn Σ ein Alphabet ist und L ⊆ Σ∗, dann heißt L eine (formale) Sprache uberΣ.

(b) Eine Menge L heißt eine (formale) Sprache, wenn es ein Alphabet Σ mit L ⊆ Σ∗

gibt.

Im Zusammenhang mit dieser Vorlesung bedeutet”Sprache“ immer dasselbe wie

”formale

Sprache“.

Sprachen interessieren uns in zweierlei Hinsicht: einmal als Formalisierung des Begriffseines

”Berechnungsproblems“ (dieser Aspekt wird in der Vorlesung

”Berechenbarkeit und

Komplexitatstheorie“ im Vordergrund stehen), hier aber zunachst als Gegenstande derTheorie der formalen Sprachen.

Charakteristisch am Umgang mit Sprachen in der Informatik ist, dass die dort vorkom-menden Sprachen meist unendlich viele Worter enthalten (man denke etwa an die Mengeder syntaktisch korrekten Pascal-Programme). Eine unendliche Sprache kann man nichtdurch Auflisten ihrer Elemente angeben, sondern immer nur dadurch, dass man eine end-liche Menge von Regeln angibt, anhand derer man entscheiden kann, welche Worter dazugehoren und welche nicht. In dieser Vorlesung werden viele solche Beschreibungsmetho-den angegeben und der Umgang mit ihnen geubt. Wir werden als Beschreibungsform(Spezifikation) von Sprachen hauptsachlich Grammatiken betrachten, aber auch Maschi-nenmodelle untersuchen, die die Analyse von vorgelegten Wortern durchfuhren konnen,im Hinblick darauf, ob sie zu einer Sprache gehoren oder nicht.

Wenn L eine Sprache uber Σ ist, so gehort zu L in ganz naturlicher Weise ein Entschei-dungsproblem, namlich:

Wortproblem fur L: Eingabe: w ∈ Σ∗. Ausgabe: JA, falls w ∈ L, NEIN sonst.

Umgekehrt kann man normalerweise Entscheidungsprobleme als Wortprobleme uber pas-senden Sprachen formulieren. Dieser Zusammenhang wird aber erst in der Vorlesung BKTwichtig werden.

1.1.17 Beispiel

(a) L∅ = ∅ heißt die leere Sprache ; Lε = {ε} ist die Sprache, die nur das leere Wortenthalt. L∅ und Lε sind Sprachen uber Σ fur jedes Alphabet Σ. Fur jedes beliebige

13

Page 16: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Alphabet Σ ist Σ ⊆ Σ∗, also ist die Menge Σ eine Sprache; fur n ∈ N beliebig ist Σn

eine Sprache, Σ∗ ist Sprache uber Σ. Fur a ∈ Σ ist {an | n ∈ N} Sprache uber Σ.

(b) Sei Σ = {0, 1} das binare Alphabet. Dann ist Σ+ = die Sprache aller nichtleeren Bit-strings; Σ8 ist die Sprache, die genau die 256 verschiedenen Bytes enthalt; Σ32 ist dieSprache, die alle 32-Bit-Worter enthalt. Einem Binarwort w = bk−1 · · · b0 ∈ Σk ent-spricht die Zahl (w)2 =

∑k−1i=0 bi2

i (Umrechnung von Binardarstellung in naturlicheZahl). Ist i ∈ N, so heißt ein Wort w mit |w| ≥ 1 und (w)2 = i eine Binardarstel-lung von i. Das kurzeste solche Wort w (außer fur (0)2 = 0 hat das Wort w alserstes Zeichen eine 1) heißt oft

”die“ Binardarstellung von i und wird mit bin(i)

bezeichnet.

Fur i ∈ N nennen wir 1i die Unardarstellung von i. Offenbar ist die Abbildung

N ∋ i 7→ 1i ∈ {1}∗

eine Bijektion. Eine (recht naturliche) Bijektion N↔ {1, 2}∗ wird in Abschnitt A.1.2im Anhang vorgestellt.

(c) Man kann nun mathematische und andere Probleme als Wortprobleme uber passen-den Sprachen darstellen, z. B.

Lgerade = {0, 10, 100, 110, 1000, 1010, 1100, . . .} = {bin(n) ∈ {0, 1}∗ | n gerade}.Lbin = {0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, . . .} = {bin(n) | n ∈ N}.Lprim = {10, 11, 101, 111, 1011, 1101, 10001, 10011, . . .} = {bin(p) | p Primzahl}.LPrimzahlzwillinge = {bin(i)#bin(j) | i, j ∈ N, i+ 2 = j, i, j Primzahl}.

Dabei heißt ein Paar (i, i + 2) ein Paar von Primzahlzwillingen, wenn sowohl i alsauch i+ 2 Primzahlen sind. Zum Beispiel sind (3, 5), (5, 7), (11, 13), (17, 19) solchePaare. Es ist ein beruhmtes offenes Problem der Zahlentheorie, herauszufinden, ob esunendlich viele solche Paare gibt. LPrimzahlzwillinge ist eine Sprache uber dem Alphabet{0, 1, #}. Das Problem

”Gibt es unendlich viele Primzahlzwillinge?“ lasst sich dann

schreiben als die Frage”Ist LPrimzahlzwillinge unendlich?“

Wenn Σ ⊆ Σ′ ist, so ist selbstverstandlich jede Sprache uber Σ automatisch auch Spracheuber Σ′. Wir werden dies im folgenden oft stillschweigend benutzen. Insbesondere kannman bei beliebigen Sprachen L1 (uber Σ1) und L2 (uber Σ2) immer annehmen, dassdasselbe Alphabet zugrundeliegt: man wahlt einfach Σ = Σ1 ∪ Σ2.

1.1.18 Bemerkung Die Gesamtheit aller Sprachen uber Σ riesig, namlich uberabzahl-bar unendlich. (Dies gilt fur jedes Alphabet Σ, selbst wenn Σ = {0} ist, also Σ nur einElement hat.) Daher werden wir nur sehr wenige Sprachen uberhaupt zu sehen bekommen.

Behauptung: Fur jedes Alphabet Σ ist LΣ = {L | L ⊆ Σ∗} eine uberabzahlbare Menge.

Wir bemerken zunachst, dass aus Korollar A.1.12 im Anhang folgt, dass wir die Elementevon Σ∗ aufzahlen konnen:

Σ∗ = {w0, w1, w2, w3, . . . }.

14

Page 17: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Die Mengen {w0}, {w1}, {w2}, . . . sind Elemente von LΣ, also ist diese Menge sicherunendlich.

Nun sei L0, L1, L2, . . . irgendeine Aufzahlung von (einigen) Elementen von LΣ. Wir defi-nieren

L× := {wi | wi /∈ Li}.Es ist klar, dass L× eine Teilmenge von Σ∗ ist, also eine Sprache. Kann L in der FolgeL0, L1, L2, . . . vorkommen? Nun, fur jedes j ∈ N gilt: wj ∈ Lj ⇔ wj /∈ L×, also Lj 6= L×.Daher kommt L nicht in L0, L1, L2, . . . vor. Das bedeutet, dass keine Aufzahlung ganz LΣ

erfassen kann, also kann LΣ nicht abzahlbar sein.

1.1.19 Definition

(a) Sind L1 und L2 Sprachen, so heißt

L1 ◦ L2 := {w1w2 | w1 ∈ L1, w2 ∈ L2} (auch L1 · L2 oder L1L2)

die Konkatenation von L1 und L2.

Beispiele:{0}∗{1}∗ = {0i1j | i, j ≥ 0},{0} ∪ {1}{0, 1}∗ = Lbin.

Beachte: Die Konkatenation ist assoziativ, d. h. fur beliebige Sprachen L1, L2, L3 gilt

(i) (L1L2)L3 = L1(L2L3).

Weiter gilt

(ii) LεL = LLε = L fur jede Sprache L.

(Damit ist fur jedes Alphabet Σ die Menge {L | L ⊆ Σ∗, L 6= ∅} der nichtleerenSprachen uber Σ ein Monoid mit neutralem Element Lε.) Andererseits ist L∅ einausloschendes Element, denn es gilt

L∅L = LL∅ = L∅ = ∅ fur jede Sprache L.

Beweis von (i): Wenn w ∈ (L1L2)L3, dann ist w = w′w3 fur ein w′ ∈ L1L2 undw3 ∈ L3. Weiter ist dann w′ = w1w2 fur ein w1 ∈ L1 und ein w2 ∈ L2. Damitist w2w2 ∈ L2L3, also w = w1(w2w3) ∈ L1(L2L3). Insgesamt haben wir gezeigt:(L1L2)L3 ⊆ L1(L2L3). Die umgekehrte Richtung zeigt man ahnlich.

Beweis von (ii): Wenn w ∈ LεL, dann ist w = ε ◦ w′ fur ein w′ ∈ L. Da ε neutralesElement ist, folgt w = w′, also w ∈ L. – Wenn umgekehrt w ∈ L ist, dann istw = ε ◦ w ∈ LεL.

15

Page 18: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

(b) Ist L Sprache, so definieren wir:

Li := {w1w2 · · ·wi | w1, . . . , wi ∈ L}, fur i ≥ 0.

Formal definieren wir induktiv:

L0 := Lε;Li := LLi−1 fur i ≥ 1.

Man beachte, dass {wi | w ∈ L} ⊆ Li ist, dass aber gewohnlich nicht Gleichheitherrscht, wie man etwa an dem Beispiel {01, 10}2 = {0101, 0110, 1001, 1010} 6={0101, 1010} sieht.

Weiter seiL

∗ :=⋃{Li | i ≥ 0} = L0 ∪ L1 ∪ L2 ∪ L3 ∪ · · ·

Diese Sprache heißt der Kleene-Abschluss von L. Weiter sei

L+ :=

⋃{Li | i ≥ 1} = L1 ∪ L2 ∪ L3 ∪ · · · .

In Worten: L∗ enthalt die Worter w der Form w = w1 · · ·wi, i ≥ 0, wobei w1, . . . , wi ∈L; L+ enthalt die Worter w = w1 · · ·wi, i ≥ 1, wobei w1, . . . , wi ∈ L sind. Zur Ubunguberlege man, dass L+ = LL∗ = L∗L ist.

Man beachte den Unterschied zwischen L∗ und {wi | w ∈ L, i ≥ 0}. Fur die SpracheL = {0, 11} ist zum Beispiel das Wort 011001111011 = 0(11)00(11)(11)0(11) in L∗

enthalten, nicht aber in {wi | w ∈ L, i ≥ 0}.

(c) Sprachen lassen naturlich auch alle Mengenoperationen zu, insbesondere folgen-de: Sind L1, L2 Sprachen, so auch die Vereinigung L1 ∪ L2 und der DurchschnittL1 ∩ L2.

Ist L Sprache uber Σ, kann man auch das Komplement L = Σ∗ − L betrachten.

L∅ ist neutrales Element bezuglich Vereinigung: L ∪ L∅ = L∅ ∪ L = L.Fur Sprachen uber Σ ist Σ∗ neutrales Element bezuglich Durchschnitt : L ∩ Σ∗ =Σ∗ ∩ L = L.

1.1.20 Beispiel Betrachte L1 = {w ∈ {0, 1}∗ | |w|0 = |w|1} undL2 = {0}∗{1}∗ = {0i1j | i, j ≥ 0}.Dann ist

L1 ∩ L2 = {0i1j | i = j} = {ε, 01, 0011, 000111, . . .}und

L1 = {w ∈ {0, 1}∗ | |w|0 6= |w|1}.

16

Page 19: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Sprechweise: Oft betrachtet man die Gesamtheit aller Sprachen mit einer gewissen Ei-genschaft. Dann sprechen wir gewohnlich von einer Klasse von Sprachen (nicht von einerMenge). Beispiele hierfur: Die

”Klasse aller Sprachen“, die

”Klasse der unendlichen Spra-

chen“, die”Klasse der Sprachen uber einem einelementigen Alphabet“, die

”Klasse der

regularen Sprachen“. Fur Mathematikfans und Puristen sei kurz der Hintergrund erklart:In der Mengenlehre zeigt man, dass die Gesamtheit aller Mengen selber keine Menge ist.Daraus ergibt sich sofort, dass die Gesamtheit aller Alphabete keine Menge sein kann, undauch nicht die Gesamtheit aller formalen Sprachen. Fur Gesamtheiten, die man definierenkann, die aber keine Mengen darstellen, benutzt man in der Mengenlehre die Bezeichnung

”(echte) Klasse“. Fur den Gebrauch in dieser Vorlesung macht diese Feinheit aber kei-

nen Unterschied. Die Bemerkung in Beispiel 1.1.5(d) zeigt, dass man sich immer auf ein

”Normalalphabet“ {b1, . . . , bk} zuruckziehen kann.

17

Page 20: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Kapitel 2

Endliche Automaten und regulareSprachen

Die regularen Sprachen (”regular sets“) sind die einfachsten formalen Sprachen. Wir wer-

den Maschinenmodelle kennenlernen (”endliche Automaten“ in verschiedenen Vari-

anten), die diesen Sprachen entsprechen, und andere Methoden, diese Sprachen zu be-schreiben (

”regulare Ausdrucke“ und

”regulare Grammatiken“). Wir wollen uns

anhand der regularen Sprachen exemplarisch die Ubergange zwischen verschiedenen Be-schreibungsformen fur dieselbe Sprache klarmachen, und fur diese Ubergange soweit wiemoglich effiziente Algorithmen bereitstellen. Zudem wird sich zeigen, dass man fur jederegulare Sprache algorithmisch einen

”effizientesten“ Automaten konstruieren kann.

Ebenso wichtig wie das Konzept der regularen Sprache ist das Konzept des Automatenselbst, das in vielen verschiedenen Teilbereichen der Theoretischen, der Praktischen undder Technischen Informatik Anwendung findet. Erinnert sei an die Vorlesung

”Rechner-

organisation“, in der schon endliche Automaten untersucht wurden.1

2.1 Deterministische endliche Automaten

In diesem Abschnitt besprechen wir das fur die regularen Sprachen grundlegende Ma-schinenmodell: die deterministischen endlichen Automaten (

”deterministic fi-

nite automata“, abgekurzt”DFA“). Diese Automaten erhalten ein Eingabewort x =

b1 · · · bm ∈ Σ∗ (fur ein Alphabet Σ) vorgelegt, das einmal von links nach rechts gelesenwird. Endliche Automaten haben eine Steuereinheit (engl. finite control), die eine endlicheSpeicherkapazitat reprasentiert und abstrakt durch eine endliche Menge Q von Zustandengegeben ist. Einer der Zustande ist als Startzustand ausgezeichnet (bezeichnet mit q0).Startend in p0 = q0, liest der DFA einen Buchstaben des Eingabewortes nach dem ande-ren und geht dabei in jedem Schritt in Abhangigkeit vom alten Zustand pt−1 und dem

1Im Gegensatz zur dortigen Darstellung ist es fur unsere Zwecke nicht wichtig, ob die Eingabezeichenund die Zustande binar oder anders dargestellt werden.

18

Page 21: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

gerade gelesenen Buchstaben at in einen Zustand pt uber, fur t = 1, 2, . . . ,m. WelcherZustand jeweils anzunehmen ist, wird von einer Ubergangsfunktion δ : Q × Σ → Q vor-geschrieben (δ(q, a) = q′ bedeutet: wird in Zustand q der Buchstabe a gelesen, so ist derneue Zustand q′). Am Ende der Berechnung, d. h. sobald der letzte Buchstabe bm gelesenwurde, wird (nur!) anhand von pm, dem schließlich erreichten Zustand, entschieden, obx = b1 · · · bm ”

akzeptiert“ oder”verworfen“ werden soll. Dazu wird eine Menge F ⊆ Q

(die”akzeptierenden“ Zustande) benutzt.

Hinter dem Modell des deterministischen endlichen Automaten steht das etwas allge-meinere Konzept eines

”finite state system“: ein System mit endlich vielen Zustanden

(Menge Q), das mit einer Folge von”Signalen“ aus einem endlichen Vorrat Σ von Signa-

len gefuttert wird und auf jedes Signal mit dem Ubergang in einen durch alten Zustandund Signal eindeutig bestimmten nachsten Zustand reagiert. Wenn man noch einen Start-zustand q0 spezifiziert (

”Reset-Zustand“), so bestimmt jede Signalfolge (b1, . . . , bm) ∈ Σ∗

eine Folge von Zustanden, die das System durchlauft. Dieses Modell lasst sich auch durcheine Ausgabefunktion erweitern, so dass etwa in jedem Schritt ein Ausgabesignal odereine endliche Folge von Ausgabesignalen erzeugt wird (Moore- und Mealy-Automaten).

Wir stellen die Bearbeitung eines Eingabewortes durch einen DFA wie folgt graphischdar:

p21p0p =q

0 F ?1 2b b bpm

mStart ...

Abbildung 2.1: Ablauf einer Berechnung auf einem DFA

Die Folge der durchlaufenen Zustande p0, . . . , pm wird als (gerichteter) Weg dargestellt,wobei naturlich Wiederholungen moglich sind. Die Kante vom Knoten pt−1 zum Knotenpt ist mit bt markiert.

Wir geben nun eine prazise Definition von DFA’s und ihrer Arbeitsweise.

2.1.1 Definition Ein deterministischer endlicher Automat (”deterministic

finite automaton“ — DFA) M besteht aus 5 Komponenten:

• einer endlichen Menge Q (der”Zustandsmenge“);

• einem Alphabet Σ (dem”Eingabealphabet“);

• einem ausgezeichneten Zustand q0 ∈ Q (dem”Startzustand“);

• einer Menge F ⊆ Q von”akzeptierenden“ Zustanden;

• einer”Ubergangsfunktion“ δ : Q× Σ→ Q.

(Formal schreibt man M = (Q,Σ, q0, F, δ).)

19

Page 22: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Wenn ein DFAM = (Q,Σ, q0, F, δ) gegeben ist, dann kann man ein beliebiges Eingabewortb1 · · · bm von M verarbeiten lassen und am Ende nachsehen, ob der erreichte Zustand pm

in F liegt oder nicht.

2.1.2 Beispiel Wir beschreiben einen DFA, der genau die Dezimalzahlen akzep-tiert, deren Wert nicht durch 3 teilbar ist. Nach einer bekannten Rechenregel gilt: N =(b1 · · · bm)10 ist durch 3 teilbar genau dann wenn die Quersumme der Dezimaldarstellungb1 · · · bm von N durch 3 teilbar ist, d. h. wenn

∑1≤i≤m bi ≡ 0 (mod 3) ist. Wir geben

nun einen Automaten an, der eine Dezimalzahl (auch mit fuhrenden Nullen) ziffernweisevon links nach rechts liest und dabei (in der Steuereinheit) die Quersumme der bislanggesehenen Ziffern modulo 3 speichert. Wir setzen M = (Q,Σ, q0, F, δ) mit Q = {0,1,2}(die moglichen Reste), Σ = {0, 1, . . . , 9}, q0 = 0, F = {1,2}; δ ist durch folgende Tabellegegeben:

δ:

aq 0 1 2 3 4 5 6 7 8 90 0 1 2 0 1 2 0 1 2 01 1 2 0 1 2 0 1 2 0 12 2 0 1 2 0 1 2 0 1 2

Tabelle 2.1: Tabellendarstellung eines DFA

Wir sehen uns an, wie der DFA auf der Eingabe w = 044318 arbeitet. Es werden dieZustande 0, 0, 1, 2, 2, 0 durchlaufen und schließlich 2 erreicht. Da 2 ∈ F , wird dasEingabewort w akzeptiert. — Man bemerkt, dass man aus der Berechnung auch erfahrt,

i 0 1 2 3 4 5 6bi 0 4 4 3 1 8pi 0 0 1 2 2 0 2∈ F? – –

√ √ √–

Tabelle 2.2: Arbeitsweise eines DFA

dass das leere Wort ε nicht akzeptiert wird, ebenso wie die Ziffernfolge 04431.

Dem Leser wird geraten, als weiteres Beispiel die vonM auf den Eingaben u = 00123234345durchlaufene Zustandsfolge anzusehen. (u wird nicht akzeptiert.) Man uberzeugt sichleicht (per Induktion uber t), dass M nach dem Lesen von b1, . . . , bt im Zustand( ∑

1≤i≤t bi

)mod 3 ist, sich also die Quersumme modulo 3

”merkt“. Aufgrund der Fest-

legung von F gilt dann, dass M genau die Worter akzeptiert, die Zahlen darstellen, dienicht durch 3 teilbar sind.

20

Page 23: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

2.1.3 Bemerkung Wir geben verschiedene nutzliche Darstellungsweisen fur endlicheAutomaten an.

(a) Tabellenform :

Man hat die Mengen Q und Σ durch Auflistungen gegeben, ebenso F ; weiter ein Elementq0 ∈ Q. Die Ubergangsfunktion δ ist als Tabelle (|Q| × |Σ|-Matrix) gegeben: Der Eintragam Schnittpunkt der Zeile fur q ∈ Q mit der Spalte fur a ∈ Σ ist δ(q, a) ∈ Q. Als Beispielbetrachte man Tabelle 2.1.

Diese Form ist besonders gut zur Ausfuhrung der Berechnungen von DFA’s und zur Ma-nipulation von DFA’s auf Rechnern geeignet. Die dazu benotigten Datenstrukturen mogeman sich selbst zurechtlegen. (Arrays fur Σ und Q, ein Bitvektor fur F , ein Index fur q0,ein zweidimensionales Array mit Eintragen aus Q fur δ. Wenn ein Eingabewort verarbeitetwird, muss nur ein Zustand, d. h. ein Index im Q-Array, gespeichert werden.)

(b) Beschreibung durch Formeln :

Mitunter ist Q so groß, dass eine explizite Auflistung nicht in Frage kommt. Man denkeetwa an ein 32 Bit breites Register, auf das eine Folge (b1, . . . , bm) von 30-Bit-Zahlenaufaddiert werden soll (modulo 232). Der Zustand ist der Inhalt des Registers, ein Eingabe-

”Buchstabe“ ist ein 30-Bit-String. Also ist Q = {0, 1}32 und Σ = {0, 1}30. Die Tabelle

hatte Große 262 ≈ 4,6 · 1018. Man schreibt aber einfach:

δ(q, a) = die Binardarstellung (mit 32 Bits) von ((q)2 + (a)2) mod 232,

fur q ∈ Q und a ∈ Σ; damit erubrigt sich das Berechnen und Speichern der Tabelle. DerStartzustand q0 ist eventuell das Wort 032; wie die Menge F zu wahlen ist, hangt von derAnwendung ab.

(c) Graphenform :

Man kann einen DFA M als einen gerichteten Graphen GM mit Knoten- und Kanten-markierungen auffassen. Jedem Zustand q ∈ Q entspricht ein Knoten vq mit Markierungq. Die (gerichteten) Kanten in GM sind mit Buchstaben a ∈ Σ markiert. Dabei verlaufteine mit a markierte Kante von vq nach vq′ genau dann wenn δ(q, a) = q′. Beachte, dassGM Mehrfachkanten (mit verschiedenen Markierungen) und Schleifen (Kanten mit dem-selben Anfangs- und Endpunkt) besitzen kann. Jeder Knoten in GM hat genau |Σ| vieleausgehende Kanten.

21

Page 24: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

q q’a

Einfachkante

(q,a)=q’δ

q q’a

b

d

b

d

Mehrfachkante

δ(q,a)=δ (q,d)=q’δ(q,b)=

a

q c

δ(q,a)=δ (q,c)=q

Schleife

Abbildung 2.2: Graphische Darstellung eines DFA

Eine Tabelle fur δ wie in (a) ist einfach eine kompakte Beschreibung von GM .

Die Knoten vq0und vq, q ∈ F , sind speziell markiert. Wenn wir GM zeichnen, markieren

wir vq0mit einem mit

”Start“ bezeichneten eingehenden Pfeil; die Knoten vq mit q ∈ F

erhalten einen doppelten Rand:

qq0Start

Abbildung 2.3: Startknoten (links) und Knoten fur einen akzeptierenden Zustand (rechts)

Bei der graphischen Darstellung vermeiden wir Mehrfachkanten von vq nach vq′ dadurch,dass wir nur eine Kante angeben und diese mit den Elementen der Menge {a ∈ Σ |δ(q, a) = q′} bzw. einer Abkurzung fur diese Menge markieren.

Der große Vorteil der Darstellung von endlichen Automaten als Graphen liegt nebender anschaulicheren Darstellung darin, dass DFA’s mit Graphenalgorithmen bearbeitetwerden konnen. Wir werden die Graphensichtweise oft verwenden.

Als graphische Darstellung des Automaten aus Beispiel 2.1.2 ergibt sich folgendes:

Start

0,3,6,9

1,4,7 1,4,7

1,4,7

2,5,8

0,3,6,92,5,80,3,6,92,5,8

0 1 2

Abbildung 2.4: Graphische Darstellung eines DFA

22

Page 25: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Die akzeptierende Berechnung von M auf der Eingabe x = 12211112 wird wie folgtdargestellt:

Start 1 2 2111120 1 0 2 0 1 2 0 2

Abbildung 2.5: Eine akzeptierende Berechnung

Man”sieht“, dass jedes Wort w = b1 · · · bm einen Weg in GM beschreibt, der in vq0

beginnt und dessen Kanten mit den Buchstaben b1, . . . , bm beschriftet sind. Dieser Wegist eindeutig bestimmt, weil δ eine Funktion ist. Die Darstellung der Berechnung wiein Abb. 2.1 ergibt sich dabei als

”abgewickelte“ Version dieses Weges, wobei die Knoten

wiederholt werden. Das Wort w wird genau dann akzeptiert, wenn der von w in G erzeugteWeg in einem Knoten vq mit q ∈ F endet.

2.1.4 Beispiel Sei Σ = B ∪Z, wo B = {a, . . . , z, A, . . . , Z} die Menge der Buchstabenund Z = {0, . . . , 9} die Menge der Dezimalziffern ist. Weiter sei

L := BΣ∗(= {w ∈ Σ∗ | w beginnt mit einem Buchstaben})

die Menge der legalen Bezeichner (”identifier“), z. B. in Pascal. Zum Beispiel sind eagle15

und afs2005 in L, nicht jedoch 1E oder ε. Der folgende Automat M = (Q,Σ, q0, F, δ)akzeptiert genau die Worter in L: Q = {0, 1, 2}, F = {1}, q0 = 0, und δ gegeben durchfolgendes Diagramm:

0

1

2

Start

B

Z

Σ

Σ

Abbildung 2.6: DFA mit Fehlerzustand”2“

Bemerkenswert an diesem Diagramm ist der Knoten v2:2 Σ

Ein solcher Knoten stellteinen

”Fehlerzustand“ dar. Wird wahrend der Verabeitung eines Eingabewortes einmal

dieser Zustand erreicht, kann er nie mehr verlassen werden, und der Automat wird ga-rantiert verwerfen. Mitunter lasst man in der graphischen Darstellung von DFA’s solcheFehlerzustande und die in sie hineinfuhrenden Kanten weg. Das sieht dann so aus:

0 1 ΣStart

B

Abbildung 2.7: DFA aus Abb. 2.6, Fehlerzustand weggelassen

23

Page 26: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Wenn beim Lesen eines Wortes w versucht wird, eine nicht vorhandene Kante zu benutzen,ist man schon sicher, dass w nicht akzeptiert wird.

Wir wenden uns nun der mathematischen Definition der zu einem DFA M gehorendenSprache zu. Man definiert, in welchen Zustand M gerat, wenn er in einem beliebigenZustand q startet und das Wort w = b1 · · · bm,m ≥ 0, liest, und sieht nach, ob dieserZustand in F liegt.

2.1.5 Definition

(a) Definiere δ : Q × Σ∗ −→ Q durch Induktion uber die Lange m eines Wortes w =b1 · · · bm:

δ(q, ε) := q, fur q ∈ Q.;

δ(q, b1 · · · bm) := δ(δ(q, b1 · · · bm−1), bm), fur q ∈ Q,m ≥ 1, b1, . . . , bm ∈ Σ.

(Kurz: δ(q, ε) = q, fur q ∈ Q; δ(q, ua) = δ(δ(q, u), a), fur q ∈ Q und u ∈ Σ∗, a ∈ Σ.)

(b) Fur w ∈ Σ∗ definieren wir: M akzeptiert w, falls δ(q0, w) ∈ F .

(c) LM := {w ∈ Σ∗ |M akzeptiert w}.Wenn L = LM , sagt man auch:

”M akzeptiert L“, als Abkurzung fur

”M akzeptiert

die Worter in L und nur diese“. Umgekehrt heißt L”die von M akzeptierte

Sprache“.

(d) Eine Sprache L heißt regular , falls es einen DFA M mit L = LM gibt.

(Die Herkunft der Bezeichnung”regular“ wird in Abschnitt 2.3 geklart.)

Fur q ∈ Q, a ∈ Σ gilt nach den Definitionen: δ(q, a) = δ(q, εa) = δ(δ(q, ε), a) = δ(q, a).Also ist δ eine Fortsetzung von δ von Q × Σ auf Q × Σ∗. Es kann also keine Verwirrungauftreten, wenn wir ab jetzt stets δ statt δ schreiben.

Die erweiterte δ-Funktion hat eine simple Interpretation im Automatengraphen GM :δ(q, w) = q′ gilt genau dann, wenn man in vq startend und dann den von w = b1 · · · bmvorgeschriebenen Kanten folgend den Knoten vq′ erreicht.

Wir notieren einfache Eigenschaften, die die Aneinanderreihung von Teilrechnungen be-treffen.

2.1.6 Bemerkung

(a) Sind w,w′ ∈ Σ∗, q ∈ Q, so ist δ(q, ww′) = δ(δ(q, w), w′).

(b) Sind w1, w2,∈ Σ∗, q ∈ Q mit δ(q, w1) = δ(q, w2), so ist δ(q, w1w′) = δ(q, w2w

′) furalle w′ ∈ Σ∗.

24

Page 27: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Beweis (a) Diese Aussage sollte intuitiv klar sein. Wir geben den Beweis als Beispielfur einen einfachen Beweis

”durch Induktion uber die Lange von Wortern“ an.

Induktion uber |w′|:I. A.: Ist |w′| = 0, also w′ = ε, so ist δ(q, ww′) = δ(q, w) = δ(δ(q, w), ε) nach Definiti-on 2.1.5(a).I. S.: Ist |w′| ≥ 1, also w′ = ua fur u ∈ Σ∗, a ∈ Σ, so gilt:

δ(q, ww′) = δ(q, wua)2.1.5(a)

= δ(δ(q, wu), a)I.V.= δ(δ(δ(q, w), u), a)

2.1.5(a)=

= δ(δ(q, w), ua) = δ(δ(q, w), w′).

(b) δ(q, w1w′)

(a)= δ(δ(q, w1), w

′)Vor.= δ(δ(q, w2), w

′)(a)= δ(q, w2w

′). �

Bemerkung 2.1.6 kann man informal so ausdrucken: Alles, was ein DFA nach dem Leseneines Prafixes w der Eingabe

”weiß“, steckt in dem Zustand δ(q0, w). Weil Q endlich ist,

kann ein DFA nur endlich viele verschiedene Situationen auseinanderhalten. Wir benutzendies, um eine ganz einfache Aufgabe anzugeben, die kein DFA losen kann.

2.1.7 Beispiel (”Kein endlicher Automat kann beliebig weit zahlen“.) Wir betrachten

die SpracheL := {x ∈ {0, 1}∗ | |x|0 = |x|1},

die aus allen Binarwortern besteht, die genau gleich viele Nullen und Einsen haben. (ZumBeispiel ist 01100011 ∈ L, nicht aber 00011100.) Wir behaupten: L ist nicht regular. DerBeweis ist indirekt. Angenommen, es gilt L = LM fur einen DFA M = (Q,Σ, q0, F, δ).Weil Q endlich ist, konnen die Zustande δ(q0, 0), δ(q0, 0

2), δ(q0, 03), . . . nicht alle verschie-

den sein, also gibt es i, j ≥ 0 mit i < j, so dass δ(q0, 0i) = δ(q0, 0

j). Weil L = LM

und 0i1i ∈ L und 0j1i /∈ L, gilt δ(q0, 0i1i) ∈ F und δ(q0, 0

j1i) 6∈ F . Andererseits gilt(wegen δ(q0, 0

j) = δ(q0, 0i) und nach 2.1.6(b)), dass δ(q0, 0

i1i) = δ(q0, 0j1i). Dies ist der

gewunschte Widerspruch.

2.1.8 Bemerkung Zwischen Definition 2.1.5 und der graphischen Darstellung GM

von DFA’s besteht folgender einfacher Zusammenhang. Dabei ist mit GM die eigentlicheVersion, also die mit Mehrfachkanten, gemeint. Zu einem Zustand q und einem Wortx = b1 · · · bm gehort ein eindeutig bestimmter Weg der Lange m, der in vq startet unddessen Kanten mit b1, . . . , bm markiert sind. Offenbar gilt δ(q, b1 · · · bm) = q′ genau dann,wenn dieser Weg in vq′ endet. (Z. B. haben wir in Abbildung 2.5 den Weg, der in demAutomaten aus Beispiel 2.1.2 von Zustand 0 ausgehend durch das Wort 12211112 erzeugtwird, explizit angegeben.) Man beachte den Spezialfall m = 0, der einem Weg der Lange 0entspricht. Der Fall q = q0 fuhrt zu folgender Charakterisierung des Akzeptierungsbegriffs:

b1 · · · bm ∈ LM genau dann, wenn der eindeutige Weg, der in vq0startet und

Kantenbeschriftung b1, . . . , bm hat, in einem Knoten vq mit q ∈ F endet.

Zur Ubung interpretiere man Bemerkung 2.1.6(a) in der Sichtweise der Graphen. (Eswerden Wege aneinandergehangt.)

25

Page 28: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Wir wollen einige einfache Eigenschaften der Klasse der regularen Sprachen notieren.Vorher stellen wir ein Lemma bereit, das besagt, dass man bei einer regularen SpracheL das Alphabet des zugehorigen Automaten beliebig wahlen kann, solange das Alphabetalle Buchstaben enthalt, die in Wortern von L vorkommen. Beispiel : Die Sprache {02i |i ∈ N} = {ε, 00, 0000, 000000, . . .} der Strichlisten gerader Lange ist Sprache uber demAlphabet {0}, aber auch Sprache uber den Alphabeten {0, 1} und {0, 1, . . . , 9} usw.

2.1.9 Lemma Wenn L regulare Sprache ist und L ⊆ Σ∗, dann existiert ein DFAM = (Q,Σ, q0, F, δ) mit L = LM .

Beweis Weil L regular ist, existiert nach Definition 2.1.5(d) ein DFAM ′ = (Q′,Σ′, q′0, F′, δ′)

mit L = LM ′ . (Das Problem ist, dass Σ 6= Σ′ sein kann, und auf den ersten Blick keinDFA fur L mit Alphabet Σ in Sicht ist. Man stelle sich vor, Σ = {0, 1}, L ⊆ {0}∗, und wirhaben einen DFA fur L mit Alphabet Σ′ = {0, a, b}.) Wir bauen M ′ wie folgt zu einemneuen DFA M um: Buchstaben aus Σ′ − Σ werden nicht berucksichtigt (sie kommen inWortern aus L auf keinen Fall vor). Buchstaben aus Σ− Σ′ werden gelesen, fuhren abersofort in einen Fehlerzustand, denn auch sie kommen in Wortern aus L nicht vor. Formalsetzen wir:

Q = Q′ ∪ {qFEHLER}, fur einen neuen Zustand qFEHLER,

q0 = q′0,

F = F ′,

δ(q, a) = δ′(q, a), wenn q ∈ Q′, a ∈ Σ ∩ Σ′;

δ(q, a) = qFEHLER, wenn q ∈ Q′, a ∈ Σ− Σ′;

δ(qFEHLER, a) = qFEHLER fur alle q ∈ Q.

In der Graphendarstellung sieht die Anderung so aus: Aus GM ′ werden alle Kanten weg-gelassen, die mit a ∈ Σ′−Σ beschriftet sind. Sodann wird ein neuer Knoten fur den (ver-werfenden) Fehlerzustand qFEHLER hinzugefugt; aus allen ursprunglichen Knoten fuhrenKanten, die mit a ∈ Σ− Σ′ beschriftet sind, in diesen Fehlerknoten.

Es ist leicht zu sehen, dass folgendes gilt: Fur w ∈ (Σ∩Σ′)∗ ist δ(q0, w) = δ′(q′0, w), also istw ∈ LM genau dann wenn w ∈ LM ′ = L. (Formal beweist man das durch Induktion uberdie Lange von w.) Fur w ∈ Σ∗, die mindestens einen Buchstaben aus Σ − Σ′ enthalten,ist δ(q0, w) = qFEHLER, also w 6∈ LM . Daraus folgt LM = L. �

2.1.10 Satz

(a) Die Sprache L∅ = ∅ ist regular.

(b) Ist Σ ein Alphabet und w ∈ Σ∗, so ist {w} regular. (Insbesondere sind also {ε} und{a} fur a ∈ Σ regular.)

26

Page 29: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

(c) Sind L1 und L2 regulare Sprachen, so sind auch L1 ∪ L2 und L1 ∩ L2 regular.

(d) Alle endlichen Sprachen sind regular.

(e) Ist L ⊆ Σ∗ eine regulare Sprache, so ist auch L = Σ∗ − L regular.

Beweis

(a) Der DFA

0Start Σ

(fur ein beliebiges Alphabet Σ) akzeptiert ∅. (Zur Ubung gebe man diesen Automa-ten auch in Tabellenform an.)

(b) Ist w = a1 · · · an ∈ Σ∗, so akzeptiert der DFA

1a a2 3a an-1 an

a2Σ−{ }3aΣ−{ } anΣ−{ }

Start . . . 0 1 2 n-1 n

qFEHLER

Σ. . .

Σ

Σ−{ }1a

die Sprache {w}.(Ubung: Wie sieht die Tabelle fur δ aus?)

Man beachte die folgenden Spezialfalle: Fur w = ε fallen die Zustande 0 und nzusammen, d. h. der DFA hat nur zwei Zustande 0 und qFEHLER. Dabei ist δ(0, a) =qFEHLER fur alle a ∈ Σ, und F = {0}. Fur w = a ∈ Σ hat der DFA drei Zustande 0,1 und qFEHLER. (Was ist δ und F?)

(c) Wahle ein Alphabet Σ mit L1 ∪ L2 ⊆ Σ∗ und (nach Lemma 2.1.9 geht das!)

DFA’s M1 = (Q1,Σ, q(1)0 , F1, δ1) und M2 = (Q2,Σ, q

(2)0 , F2, δ2) mit LM1

= L1 undLM2

= L2. Die Idee ist, beide Automaten”gleichzeitig“ laufen zu lassen. Dazu sieht

man Zustande vor, die aus einem M1-Zustand und einem M2-Zustand bestehen.

27

Page 30: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Aus offensichtlichen Grunden heißt die folgende Konstruktion Kreuzproduktkon-struktion . Definiere

Q := Q1 ×Q2,

q0 := (q(1)0 , q

(2)0 ),

δ((q(1), q(2)), a) :=(δ1(q

(1), a), δ2(q(2), a)

), fur q(1) ∈ Q1, q

(2) ∈ Q2, a ∈ Σ.

Man zeigt dann durch Induktion uber |w| :

δ(q0, w) = (δ1(q(1)0 , w), δ2(q

(2)0 , w)) ∈ Q, fur alle w ∈ Σ.

Wenn wir also definieren:

F ′ := {(q(1), q(2)) ∈ Q | q(1) ∈ F1 und q(2) ∈ F2},F ′′ := {(q(1), q(2)) ∈ Q | q(1) ∈ F1 oder q(2) ∈ F2},

so sehen wir (nach Definition 2.1.5), dass M ′ = (Q,Σ, q0, F′, δ) ein DFA fur L1 ∩L2

und M ′′ = (Q,Σ, q0, F′′, δ) ein DFA fur L1 ∪ L2 ist.

Analog kann man DFA’s fur andere Boolesche Kombinationen wie L1 − L2 oderL1 ⊕ L2 = (L1 − L2) ∪ (L2 − L1) konstruieren.

(Man uberlege zur Ubung, wie der Graph GM ′ bzw. GM ′′ aussieht. Tipp: Trage dieKnoten vonGM ′ in ein Gitter ein, dessen Zeilen mit q(1) ∈ Q1 und dessen Spalten mitq(2) ∈ Q2 beschriftet sind. Der Knoten fur Zustand (q(1), q(2)) sitzt am Schnittpunktvon Zeile q(1) und Spalte q(2).)

(d) Um einen DFA fur die Sprache L := {w1, . . . , wm} zu erhalten, definiere L0 := ∅und Li := {w1, . . . , wi}. Ein DFA fur Li entsteht aus dem fur Li−1 und dem fur{wi} (gemaß (b)) durch Anwendung der Konstruktion aus (c). Die Behauptungfolgt durch vollstandige Induktion.

Alternativ betrachte man die folgende direkte Konstruktion, die i. a. deutlich weni-ger Zustande benotigt. Es sei Σ ein Alphabet mit L ⊆ Σ∗. Die Idee ist folgende:Der DFA muss sich

”merken“, welche Zeichen er bisher gelesen hat. Wenn diese ein

Wort in L bilden, muss der DFA in einem akzeptierenden Zustand sein. Wenn diebisher gelesenen Zeichen nicht Prafix eines Wortes aus L sind, kann der DFA ineinen Fehlerzustand gehen. Nach kurzer Uberlegung sieht man, dass man als Zu-standsmenge einfach die Menge aller Prafixe der Worter in L und einen zusatzlichenFehlerzustand nehmen kann.

Q := {u ∈ Σ∗ | u ist Prafix eines Wortes w ∈ L} ∪ {qFEHLER};q0 := ε;

F := L;

δ(u, a) := ua, falls u ∈ Q− {qFEHLER} und ua ∈ Q,δ(u, a) := qFEHLER, falls u ∈ Q− {qFEHLER} und ua 6∈ Q,

δ(qFEHLER, a) := qFEHLER fur alle a ∈ Σ.

28

Page 31: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

(Ein Beispiel fur diese Konstruktion findet sich in Beispiel 2.1.11(c).) Man kann nundurch Induktion uber |w| zeigen, dass δ(q0, w) = w ist, falls w Prafix eines Wortesin L ist und δ(q0, w) = qFEHLER sonst. Daraus folgt nach der Definition von F , dassM genau die Worter in L akzeptiert.

(e) Nach Lemma 2.1.9 ist es moglich, einen DFA M = (Q,Σ, q0, F, δ) mit L = LM zuwahlen. Dann definiere F ′ := Q − F und M ′ := (Q,Σ, q0, F

′, δ), d. h. M ′ entstehtaus M durch Vertauschen von akzeptierenden und nicht akzeptierenden Zustanden.Es ist klar, dass L = Σ∗ − L = LM ′ , da fur w ∈ Σ∗ gilt:

w ∈ L⇔ w 6∈ L⇔ δ(q0, w) 6∈ F ⇔ δ(q0, w) ∈ F ′.Beachte: Fur diese Konstruktion ist es notig, dass δ eine Funktion ist. Die nichtdetermi-nistischen endlichen Automaten des nachsten Abschnitts lassen diese Konstruktion nichtzu. �

2.1.11 Beispiel

(a) Die Sprachen L0 = {x ∈ {0, 1}∗ | |x|0 gerade} und L1 = {x ∈ {0, 1}∗ ||x|1 gerade} sind regular: Offenbar ist L0 = LM0

fur folgenden DFA M0:

0 1Start

110

0

Vertauschen wir bei den Kantenmarkierungen 0 und 1, erhalten wir einen DFA M1

fur die Sprache L1. Setzen wir in M0 F′ = {0, 1} − F = {1}, so erhalten wir einen

DFA M ′0 fur die Sprache L0 = {x ∈ {0, 1}∗ | |x|0 ungerade}.

(b) Die mit dem Verfahren von Satz 2.1.10(c) konstruierten Automaten fur L0 ∪ L1,L0 ∩ L1, L0 ∪ L1 sehen im Prinzip wie folgt aus:

(0,0)Start

(1,0) (1,1)

(0,1)

0 0

1

1

0 01

1

29

Page 32: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Gezeichnet ist ein Automat fur L0∩L1. Automaten fur die anderen Sprachen erhaltman durch Variieren der Menge der Endzustande. Z. B. entspricht F = {(0, 0), (0, 1),(1, 0)} der Sprache L0 ∪ L1, und F = {(1, 1)} der Sprache L0 ∪ L1.

(c) Der mit dem Verfahren von Satz 2.1.10(d) konstruierte Automat fur die endlicheSprache L = {bei, beine, bube} (Prafixautomat) sieht folgendermaßen aus. Dabeiist der Fehlerzustand mit

”∅“ markiert.

e

bube

bei beinebein

0/

be

i n

u

eb

ε b

be

bu bub

Start

2.1.1 Endliche Automaten mit Ausgabe

Fur die Modellierung von Aufgaben sind auch endliche Automaten wichtig, die uber dasAkzeptieren/Verwerfen hinaus andere Ausgabesignale erzeugen. Beispiele hierfur wurdenauch in der Veranstaltung

”Rechnerorganisation“ besprochen. Wir skizzieren hier, wie

eine solche Zusatzanforderung in unseren formalen Rahmen passt. Hierfur skizzieren wirMealy-Automaten , bei denen die Ausgabe ein beliebiges (auch leeres) Wort sein kann,das vom gegenwartigen Zustand und vom gelesenen Zeichen abhangt.

Ein Mealy-Automat ist ein 6-Tupel M = (Q,Σ,Γ, q0, δ, λ), wobei

• Q die endliche, nichtleere Zustandsmenge ist,

• Σ das Alphabet der Eingangssignale/-symbole,

• Γ das Alphabet der Ausgabesignale/-symbole,

• q0 ∈ Q der Startzustand,

• δ : Q× Σ→ Q die Ubergangsfunktion, und

• (NEU) λ : Q× Σ→ Γ∗ die Ausgabefunktion

30

Page 33: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

ist.

Ein solcher Automat arbeitet wie folgt, in Schritten. M startet in Zustand q0. Wenn M inZustand q ist und Signal bzw. Symbol a ∈ Σ erhalt bzw. liest, wechselt M in den neuenZustand q′ = δ(q, a) und gibt die Folge λ(q, a) ∈ Γ∗ aus. (Dies konnte durch Ausgebeneiner Folge von Signalen oder durch Schreiben auf ein Ausgabeband erfolgen.)

Wie bei DFA’s kann man das Verhalten von M auf einem Eingabewort w ∈ Σ∗ (einerSignalfolge) induktiv beschreiben:

δ(q, ε) = q; δ(q, ua) = δ(δ(q, u), a), fur u ∈ Σ∗, a ∈ Σ;λ(q, ε) = ε ∈ Γ∗; λ(q, ua) = λ(q, u)λ(δ(q, u), a), fur u ∈ Σ∗, a ∈ Σ.

Dann sagt δ(q, w), welchen Zusatnd der Automat nach Lesen von w hat, und λ(q, w) sagt,welche Ausgabe von der Eingabe w bewirkt wird, falls der Automat im Zustand q startet.

Beispiel : Der folgende Mealy-Automat ersetzt in einer Eingabe w ∈ {0, 1}∗ jeden Blockvon ≥ 1 aufeinander folgenden Nullen durch 00. Er tut dies, indem er Einsen kopiert unddie jeweils erste Null in einem Block von Nullen verdoppelt, die darauf folgenden jedochignoriert.

Zustandsmenge: Q = {p0, p1}.(Intuition: p0: letztes Symbol war = 0; p1: letztes Symbol war 6= 0.)q0 := p1.δ(q, 1) = p1, λ(q, 1) = 1, fur q ∈ Q.δ(p0, 0) = p0; λ(p0, 0) = ε;δ(p1, 0) = p0; λ(p1, 0) = 00.

Zur Ubung sollte man sich Tabelle und graphische Darstellung fur M aufmalen. (An derKante von vq zu vq′ steht a | x wenn δ(q, a) = q′ und λ(q, a) = x ∈ Γ∗.)

Studieren Sie die Arbeitsweise von M an einigen Beispielen! (Eingabe 000100101110 sollteAusgabe 0010010011100 liefern.)

Eine Variante von Automaten mit Ausgabe sind die Moore-Automaten . Bei dieserSorte hangt die Ausgabe in einem Schritt nicht vom gelesenen Zeichen, sondern nur vomZustand ab. Es ist nicht schwer, sich zu uberlegen, dass bis auf oberflachliche UnterschiedeMoore- und Mealy-Automaten genau dieselben

”Ubersetzungs-Aufgaben“ losen konnen.

Alle Einzelheiten uber die entsprechenden Konstruktionen sind in der Literatur zu finden.

2.2 Nichtdeterministische endliche Automaten

Nichtdeterministische Automaten unterscheiden sich von deterministischen dadurch, dasssie in einer gegebenen Situation (Zustand und neu gelesenes Zeichen) eventuell die Moglich-keit haben, unter mehreren Nachfolgezustanden auszuwahlen. Nach wie vor liest der Au-tomat in jedem Schritt einen Buchstaben, jedoch ist zugelassen, dass zu einem gegebenengegenwartigen Zustand q und gelesenem Buchstaben a kein, ein oder mehr als ein legalerNachfolgezustand q′ existieren. Demgemaß gibt es zu einer Eingabe w unter Umstanden

31

Page 34: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

mehrere legale Berechnungen.

2.2.1 Beispiel (Eingeschranktes Rucksackproblem) Wir stellen uns folgendeSituation vor: Ein Einbrecher ist mit einem Rucksack ausgerustet, der genau h Kubikzen-timeter fasst, fur ein h ∈ N. Er steht in einem Raum, in dem sich n Sackchen befinden, diemit Edelmetallkrumeln gefullt sind. Die Sackchen sind beliebig verformbar; ihre Voluminasind a1, a2, . . . , an, wobei die ai Zahlen in {1, . . . , h} sind. Naturlich mochte der Einbre-cher seinen Rucksack moglichst voll packen. Ist es moglich, eine Teilmenge der Sackchenauszuwahlen, so dass die Kapazitat h des Rucksacks perfekt ausgenutzt wird? Technischausgedruckt: gibt es eine Teilfolge i1 < · · · < ik in der Folge 1, . . . , n derart dass

ai1 + · · ·+ aik = h

ist? Um diese Situation als Sprache zu modellieren, legen wir als Eingabealphabet dieMenge Σh = {1, 2, . . . , h} fest, fur ein h ≥ 1. Unser Problem entspricht dann dem Wort-problem fur die Sprache

LRSh =

{a1 · · · an ∈ Σ∗

∣∣ ∃I ⊆ {1, . . . , n} :∑

i∈I

ai = h}.

Beispielsweise ist (2, 2, 2, 2, 2, 2) /∈ LRS5 , jedoch (2, 1, 2, 3, 2, 1, 3) ∈ LRS

5 .

Wir wollen das Problem mit einem nichtdeterministischen Verfahren losen, bei dem dieReihe der Zahlen a1, . . . , an nur einmal von links nach rechts gelesen wird. Fur eine Einga-befolge (ein Eingabewort) w = a1 · · · an ∈ Σ∗h wollen wir also herausbekommen, ob es eineTeilfolge gibt, die sich zu h summiert. Wir geben einen endlichen Automaten mit nichteindeutig bestimmten Ubergangen an, der zur Bearbeitung des Problems geeignet ist. AlsZustandsmenge wahlen wir Q = {0, 1, . . . , h} (mit der Intention, in einem Zustand q dieSumme der bisher gewahlten Volumina zu speichern). Wir starten mit q0 = 0 (anfangsist nichts gewahlt) und zielen auf F = {h} (am Ende soll die Summe h genau erreichtsein). Wird nun ein Eingabezeichen a ∈ Σh gelesen, kann man die Zahl a entweder derTeilsumme hinzufugen oder nicht. Mogliche neue Zustande sind also q (Gegenstand nichtnehmen) oder q+a (Gegenstand nehmen — das ist naturlich nur sinnvoll, wenn q+a ≤ hist). Formal drucken wir das so aus, dass wir als Wert δ(q, a) die Menge aller Zustandeangeben, die von q aus gewahlt werden durfen, wenn a gelesen wird. Also:

δ(q, a) :=

{{q, q + a}, falls q + a ≤ h,{q}, falls q + a > h.

Nun kann eine Eingabe zu mehreren verschiedenen legalen Berechnungen fuhren. Bei-spielsweise kann man auf Eingabe w = (2, 1, 3, 1) unter anderen die beiden in Abb. 2.8gezeigten Berechnungen erhalten.

32

Page 35: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

4

42 1 3 1

0 2 3

02 1 3 1

50 1

3

Start

Start

Abbildung 2.8: Zwei verschiedene Berechnungen fur eine Eingabe auf einem NFA

Um einen Uberblick uber alle moglichen Berechnungen zu erhalten, stellen wir diese ineinem

”Berechnungsbaum“ dar. Fur jeden erreichten Zustand und das nachste eingelesene

Zeichen stellt man alle moglichen Nachfolgezustande als Knoten dar. Zum Beispiel ergebensich fur die Eingabeworter (2, 4, 2, 2) und (2, 1, 3, 1), wo h = 5, die in Abb. 2.9 angegebenenBilder.

Start

0 2 42 4 2 4 4

0 2 4 2 4

0 4 2

0 2

02 2

4 4 4

2 2 2 2 2

2 2 2 2 2 2 2 2

1

2

1 1 1 1

3 3 3 3 3 3 3

111111111111

2

0 3 1

4

4 2 5 3

0 1 2 3

0 2

0Start

0 1 3 4 1 2 5 2 3 5 3 4

Abbildung 2.9: Alle Berechnungen fur (2, 4, 2, 2) und (2, 1, 3, 1), fur h = 5

Bei Eingabe (2, 4, 2, 2) /∈ LRS5 enden alle Berechnungen in nicht akzeptierenden Zustanden;

dies entspricht der Situation, dass es keine Folge von Entscheidungen gibt, die dazu fuhrt,dass man am Ende in Zustand h = 5 landet. Bei Eingabe (2, 1, 3, 1) ∈ LRS

5 enden mancheBerechnungen in nicht akzeptierenden Zustanden; hier hat man unterwegs ungeeigneteEntscheidungen getroffen. Es gibt aber zwei verschiedene Berechnungswege, die zum ak-zeptierenden Zustand h = 5 fuhren.

Auch fur kleine Zustandsmengen und Alphabete konnen die Berechnungsbaume sehr großwerden. Konnen wir hier etwas sparen? Man sieht, dass Zustande auf demselben Level

33

Page 36: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

mehrfach aufgelistet werden, obwohl dies eigentlich nicht notig ist. Eine kurze Uberle-gung fuhrt zu der Erkenntnis, dass es genugt, die Menge der auf einem Level auftreten-den Zustande zu registrieren. (Das sind {0}, {0, 2}, {0, 2, 4}, {0, 2, 4}, {0, 2, 4} im erstenund {0}, {0, 2}, {0, 1, 2, 3}, {0, 1, 2, 3, 4, 5}, {0, 1, 2, 3, 4, 5} im zweiten Baum in Abb. 2.9.)Diese Beobachtung werden wir benutzen, um den Akzeptierungsmodus fur unsere nicht-deterministischen Automaten zu definieren.

Wir entwickeln nun die formale Definition von nichtdeterministischen endlichen Automa-ten. Ein solcher Automat M spezifiziert Q,Σ, q0, F und eine Ubergangsfunktionδ : Q× Σ→ P(Q) (wobei P(Q) die Potenzmenge {B | B ⊆ Q} bezeichnet).

2.2.2 Definition Ein nichtdeterministischer endlicher Automat (”nondeter-

ministic finite automaton“, abgekurzt NFA) M besteht aus

• einer endlichen Menge Q;

• einem Alphabet Σ;

• einem ausgezeichneten Zustand q0 ∈ Q;

• einer Menge F ⊆ Q;

• einer”Ubergangsfunktion“ δ : Q× Σ→ P(Q).

(Formal schreibt man M = (Q,Σ, q0, F, δ).)

Die Situation, dass q′ ∈ δ(q, a) ist, ist so zu interpretieren, dass M in den Zustand q′

ubergehen darf, falls er in Zustand q ist und a liest. Man beachte, dass δ(q, a) leer seinkann (kein Nachfolgezustand), ein Element enthalten kann (Nachfolgezustand eindeutigbestimmt), oder mehr als ein Element enthalten kann (nichtdeterministische Auswahl).

Der NFA M = MRS5 aus Beispiel 2.2.1 sieht dann folgendermaßen aus: M = (Q,Σ, q0, F, δ)

mit Q = {0, 1, 2, 3, 4, 5}, Σ = {1, 2, 3, 4, 5}, q0 = 0, F = {5}, und δ wie in Tabelle 2.3angegeben.

(Es ist untypisch an diesem Automaten, dass in jeder Situation mindestens ein nachsterSchritt moglich ist.)

Wenn ein NFA M = (Q,Σ, q0, F, δ) gegeben ist, setzen wir δ wieder auf Q × Σ∗ fort,definieren also aus δ eine iterierte Version δ. Wenn dann q′ ∈ δ(q, w) ist, bedeutet dies,dass der NFA, in Zustand q gestartet, bei der Verarbeitung des Wortes w in den Zustand q′

gelangen kann. Basierend auf unseren Beobachtungen zu Abb. 2.9 erfassen wir die Mengeder beim Lesen von w erreichbaren Zustande.

34

Page 37: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

aq 1 2 3 4 5

0 {0, 1} {0, 2} {0, 3} {0, 4} {0, 5}1 {1, 2} {1, 3} {1, 4} {1, 5} {1}2 {2, 3} {2, 4} {2, 5} {2} {2}3 {3, 4} {3, 5} {3} {3} {3}4 {4, 5} {4} {4} {4} {4}5 {5} {5} {5} {5} {5}

Tabelle 2.3: Tabellendarstellung der Ubergangsfunktion δ eines NFA

2.2.3 Definition Wir definieren δ : Q × Σ∗ → P(Q) durch Induktion uber die Langevon w ∈ Σ, wie folgt.

δ(q, ε) := q, fur q ∈ Q;

δ(q, ua) :=⋃

q′∈δ(q,u)

δ(q′, a), fur q ∈ Q, u ∈ Σ∗, a ∈ Σ.

Im in Abb. 2.3 angegebenen Beispiel ist etwa δ(1, ε) = {1}, δ(1, 2) = {1, 3}, δ(1, (2, 2)) ={1, 3} ∪ {3, 5} = {1, 3, 5}, und δ(1, (2, 2, 1)) = {1, 2} ∪ {3, 4} ∪ {5} = {1, 2, 3, 4, 5}.Wir beobachten, dass

δ(q, a) =⋃

q′∈δ(q,ε)

δ(q′, a) =⋃

q′∈{q}

δ(q′, a) = δ(q, a)

ist. Wie im Falle der DFA’s schreiben wir also wieder δ statt δ, ohne dass Verwechslungenauftreten konnen.

Um die doch recht technische Definition der iterierten δ-Funktion besser verstehen zukonnen, ubersetzen wir sie in die Sprache von Berechnungen. Wie gewunscht, zeigt sich,dass q′ ∈ δ(q, w) ist genau dann wenn es die Moglichkeit gibt, von q startend unter Lesenvon w nach q′ zu gelangen, wobei in jedem Schritt ein nach δ erlaubter Zustandsubergangstattfindet.

2.2.4 Lemma In der Situation von Definition 2.2.3 gilt q′ ∈ δ(q, b1 · · · bm) fur ein Wortw = b1 · · · bm genau dann wenn es eine Folge p0, . . . , pm in Q gibt derart dass p0 = q,pm = q′ und pi ∈ δ(pi−1, bi) fur 1 ≤ i ≤ m.

Beweis Dies wird durch Induktion uber die Lange m des Eingabewortes w = b1 · · · bmbewiesen.

35

Page 38: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Wenn m = 0, also w = ε ist, dann ist δ(q, w) = {q} und es gibt nur eine Folge p0, . . . , pm

mit der beschriebenen Eigenschaft, namlich die Folge mit dem einen Element q.

Sei nun m ≥ 1. Als Induktionsvoraussetzung nehmen wir an, die Aussage sei wahr furalle Worter u der Lange m− 1. Wir betrachten ein Wort w = b1 · · · bm.

”⇐“: Wenn es eine Zustandsfolge p0, . . . , pm in Q gibt derart dass p0 = q, pm = q′ undpi ∈ δ(pi−1, bi) fur 1 ≤ i ≤ m, dann folgt nach I.V., dass pm−1 ∈ δ(q, b1 · · · bm−1) gilt. Weilnun q′ ∈ δ(pm−1, bm), gilt nach Definition 2.2.3 auch q′ ∈ δ(q, b1 · · · bm).

”⇒“: Wenn q′ ∈ δ(q, b1 · · · bm), dann heißt dies nach der Definition, dass q′ ∈ δ(q′′, bm) fur

einen Zustand q′′ ∈ δ(q, b1 · · · bm−1). Nach I.V. gibt es dann eine Folge p0, . . . , pm−1 in Qmit p0 = q und pm−1 = q′′, derart dass pi ∈ δ(pi−1, bi) fur 1 ≤ i ≤ m − 1. Wir konnen q′

einfach an diese Folge anhangen. �

2.2.5 Definition Ein NFA M = (Q,Σ, q0, F, δ) sei gegeben.

(a) Fur w ∈ Σ∗ definiere: M akzeptiert w, falls δ(q0, w) ∩ F 6= ∅, d. h. wenn man,von q0 startend, bei der Verarbeitung des Wortes w einen akzeptierenden Zustanderreichen kann. (Das ist genau dann der Fall, wenn eine Folge p0, . . . , pm in Q mitp0 = q0, pm ∈ F und pi ∈ δ(pi−1, bi) fur 1 ≤ i ≤ m existiert.)

(b) LM := {w ∈ Σ∗ |M akzeptiert w}. LM heißt die von M akzeptierte Sprache .

Das Modell”nichtdeterministischer endlicher Automat“ ist nicht als eine Maschine zu

denken, die direkt gemaß ihrer Ubergangsfunktion rechnen kann, sondern vielmehr alseine Moglichkeit, in kompakter Weise eine Sprache zu spezifizieren. Wie wir gleich sehenwerden, kann man aber aus einem NFA M einen in gewisser Weise effizienten determi-nistischen Algorithmus fur das Wortproblem von LM gewinnen. Die in Definition 2.2.3angegebene rekursive Formel fuhrt namlich zu einem iterativen Algorithmus, der bei Ein-gabe w = b1 · · · bm nacheinander δ(q, b1 · · · bt) fur t = 0, 1, . . . ,m berechnet und hierfureine einigermaßen maßige Rechenzeit benotigt — solange die Ubergangsfunktion δ alsTabelle gespeichert werden kann. Wenn M ein NFA ist, benutzen wir

|M | :=∑

q∈Q,a∈Σ

(1 + |δ(q, a)|)

als ein Maß fur die Große von M . Dies entspricht in etwa der Anzahl der Eintrage vonZustanden in einer tabellarischen Auflistung von δ.

2.2.6 Satz Es gibt einen Algorithmus zur Losung des”Wortproblems fur NFA’s“, d.h.

fur das Problem, zu vorgelegtem NFA M und w ∈ Σ∗ zu entscheiden, ob w ∈ LM odernicht. Die Laufzeit des Algorithmus ist O(|M | · |w|); der Platzbedarf ist O(|Q|).

36

Page 39: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Beweis Wir geben etwas allgemeiner einen Algorithmus an, der die Menge δ(qin, w)berechnet, fur ein beliebiges gegebenes qin ∈ Q und ein w = b1 · · · bm ∈ Σ∗. Um dasWortproblem zu entscheiden, berechnet man mit dem Algorithmus δ(q0, w) und pruft, obdiese Menge ein Element von F enthalt.

Fur den Algorithmus setzen wir voraus, dass die Zustandsmenge Q einfach {1, 2, . . . , s}ist. Eine Teilmenge von Q lasst sich dann durch einen Bitvektor der Lange s darstel-len. Wir benutzen zwei solche Bitvektoren, Aalt[1..s] und Aneu[1..s]. Der BitvektorAneu[1..s] wird mit Nullen vorbesetzt, nur Aneu[qin] ist 1. Nun wird fur i = 1, 2, . . . ,mfolgendes durchgefuhrt:

1. kopiere Aneu[1..s] nach Aalt[1..s];

2. setze alle Eintrage in Aneu[1..s] auf 0;

3. fur jedes p mit Aalt[p] = 1 tue folgendes:fur jedes q ∈ δ(p, bi) fuhre Aneu[q]← 1 aus.

Die Ausgabe steht in Aneu[1..s].

Es ist mit einem Induktionsbeweis leicht zu sehen, dass der Algorithmus im Schleifen-durchlauf fur bi einen Bitvektor berechnet, der die Menge δ(qin, b1 · · · bi) darstellt. Wenndie Ubergangsfunktion in Tabellenform gegeben ist, dann erfordert die Ausfuhrung desSchleifendurchlaufs fur bi das Lesen und Abarbeiten der gesamten Spalte fur den Buch-staben a in der Tabelle. Diese Spalte hat Lange s, aber jeder Eintrag kann eine umfang-reiche Menge darstellen. Den gesamten Zeitaufwand konnen wir aber sicher als O(|M |)abschatzen (was den Kosten entspricht, die das Lesen der gesamten δ-Tabelle verursacht).

2.2.7 Bemerkung (Vgl. Bemerkung 2.1.3.) Auch NFA’s lassen sich bequem als GraphGM darstellen. Wieder gibt es fur jeden Zustand q ∈ Q einen Knoten vq, und von vq nachvq′ verlauft eine mit a ∈ Σ markierte Kante genau dann wenn q′ ∈ δ(q, a). Im Gegensatzzu DFA’s kann es nun sein, dass zu q ∈ Q und a ∈ Σ keine oder eine mit a markierteKante oder mehrere mit dem Buchstaben a markierte Kanten in vq beginnen:

a

amit Markierung

q q’

mit Markierungaus keine Kanteq

a

q

δ( , ) = {}q

aa

a

q’

q’’’

q’’q

q aδ( , ) = { , , }q’ q’’ q’’’

drei Kantenamit Markierung

eine Kante

a

q aδ( , ) = { }q’

37

Page 40: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Die Konventionen uber die Zusammenfassung von Mehrfachkanten sind dieselben wie beiden DFA’s.

Fortsetzung von Beispiel 2.2.1: Der NFA fur LRS3 hat die in Abb. 2.10 angegebene Graph-

darstellung.

2 2

3

1 1 1

1,2,3 1,2,3 1,2,3 1,2,3

Start 0 1 2 3

Abbildung 2.10: Graphdarstellung eines NFA

Wir beobachten, dass nunmehr Startknoten vq und Kantenbeschriftung b1, . . . , bm nichtmehr eindeutig einen Weg in GM festlegen. Unter Umstanden gibt es auch gar keinen mitb1, . . . , bm beschrifteten Weg, der in vq beginnt. Auf jeden Fall gilt fur q, q′ ∈ Q, b1 · · · bm ∈Σ∗ die folgende Charakterisierung des Akzeptierungsverhaltens eines NFA M . (Dies isteinfach eine Ubertragung von Definition 2.2.3 und der Charakterisierung der δ-Funktionin Lemma 2.2.4 in die Graphdarstellungs-Sprechweise.)

(a) q′ ∈ δ(q, b1 · · · bm) genau dann, wenn in GM ein Weg von vq nach vq′ existiert, dessenKanten mit b1, . . . , bm beschriftet sind.

Und damit, nach Definition 2.2.5(a):

(b) M akzeptiert b1 · · · bm genau dann, wenn in GM ein Weg von vq0zu einem Knoten

vq mit q ∈ F existiert, dessen Kanten mit b1, . . . , bm beschriftet sind.

Um ein Gefuhl fur diese Aussage zu bekommen, suche man im Graphen in Abb. 2.10Wege fur Eingaben (2, 2, 2, 2) und (1, 2, 3, 1, 2).

Man sieht sofort, dass jeder DFA M = (Q,Σ, q0, F, δ) einen NFA M ′ = (Q,Σ, q0, F, δ′)

bestimmt, der”dasselbe tut“ wie M : definiere einfach δ′(q, a) := {δ(q, a)}. Wir sagen:

”Jeder DFA M kann auch als NFA aufgefasst werden“. Wie sieht es mit der umgekehrten

Richtung aus?

Wir stellen im nachsten Satz fest, dass im Prinzip NFA’s nicht mehr leisten (also nichtmehr Sprachen akzeptieren) als DFA’s. Dennoch sind NFA’s nutzlich und wichtig: furtheoretische Untersuchungen wie die Klarung der Beziehung zwischen DFA’s und Gram-matiken und regularen Ausdrucken, die wir spater kennenlernen werden; zur bequemenKonstruktion von Automaten, wo direkte DFA-Konstruktionen muhselig waren; schließ-lich zur kompakten Darstellung von Automaten fur Sprachen, deren DFA’s zu groß waren(s. Bsp. 2.2.10 unten).

38

Page 41: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

2.2.8 Satz Ist L = LM fur einen NFA M , so gilt L = LM ′ fur einen DFA M ′.

Beweis (”Potenzmengenkonstruktion“) Sei M = (Q,Σ, q0, F, δ). Nach Definiti-

on 2.2.3 kann die Gesamtheit aller Berechnungen von M auf Eingabe w = b1 · · · bm durcheine Folge δ(q0, ε), δ(q0, b1), δ(q0, b1b2), . . . , δ(q0, b1 · · · bi), . . . , δ(q0, w) von Teilmengen vonQ dargestellt werden. Wir benutzen dementsprechend die Potenzmenge P(Q) als Zu-standsmenge fur M ′, und definieren: M ′ := (Q′,Σ, q′0, F

′, δ′), wo

Q′ := P(Q) = {B | B ⊆ Q};q′0 := {q0};F ′ := {B ∈ Q′ | B ∩ F 6= ∅};

δ′(B, a) :=⋃

q∈B

δ(q, a), fur B ∈ Q′, a ∈ Σ.

δ′(B, a) ist die Menge der Zustande, die M erreichen kann, wenn in einem Zustand q ∈ Bder Buchstabe a gelesen wird. Wir mussen zeigen, dass M ′ dieselben Worter akzeptiertwie M . Hierzu stellen wir einen Zusammenhang zwischen den beiden Automaten her:

Behauptung : δ′({q}, w) = δ(q, w) fur alle q ∈ Q,w ∈ Σ∗.

(Dabei ist δ′ die eben definierte Funktion, gehort also zu M ′, δ ist wie in 2.2.3, gehortalso zu M .)

Beweis der Behauptung durch Induktion uber |w| :w = ε :

δ′({q}, ε) Def.2.1.5(a)= {q} Def.2.2.3

= δ(q, ε).

w = ua fur u ∈ Σ∗, a ∈ Σ:

δ′({q}, ua) Def.2.1.5(a)= δ′(δ′({q}, u), a) I.V.

= δ′(δ(q, u), a)

Def. δ′=

q′∈δ(q,u)

δ(q′, a)2.2.3= δ(q, ua).

Damit haben wir, fur alle w ∈ Σ∗:

w ∈ LM

Def.2.2.5(a)⇔ δ(q0, w) ∩ F 6= ∅ Beh.⇔ δ′({q0}, w) ∩ F 6= ∅Def. q′

0,F ′

⇔ δ′(q′0, w) ∈ F ′ Def.2.1.5(b)⇔ w ∈ LM ′ .

Also ist LM = LM ′ . �

39

Page 42: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

2.2.9 Beispiel Wir fuhren Beispiel 2.2.1 fort, indem wir einen DFA fur LRSh angeben.

Die Potenzmengenkonstruktion liefert:

Q′ := P({0, 1, . . . , h})Σ = {1, . . . , h}q′0 := {0}F ′ := {B ⊆ {0, 1, . . . , h} | h ∈ B}

und, fur B ∈ Q′, a ∈ Σ :

δ′(B, a) := B ∪ ({b+ a | b ∈ B} ∩ {0, . . . , h}).

Als Beispiel wahlen wir h = 3 und geben den resultierenden Automaten graphisch an.Dabei werden Mengen durch Listen ihrer Elemente dargestellt.

0,1,2 0,1,3 0,2,3 1,2 1,2,3 1,3 2,3

0

0,1 0,2 0,3

Ο

0,1,2,3

321

Start

1 2

2

3

3

1 23 1 3 1 2

1,2,3

1,2,3

1,2

3

2,3

1

3

1,2,3 2,3 1,2,3

1 2

3

2,3

1

1,2,3

1,2,3

1 1

Beachte, dass im vorigen Beispiel der Teil des Graphen rechts (die Zustande B mit 0 6∈ B)in keiner Berechnung eine Rolle spielt, da diese Zustande vom Startzustand {0} nichterreicht werden konnen. (Solche Zustande heißen

”uberflussig“ und konnen weggelassen

werden, siehe weiter unten.) Man kann bei der Erstellung des Potenzmengenautomatendie Erzeugung uberflussiger Zustande vermeiden, indem man mit B0 = {q0} startet unddann nur solche Zustande generiert, die von einem bisher schon vorliegenden Zustand Baus durch Lesen eines Buchstabens erreicht werden, also als B′ =

⋃q∈B δ(q, a) darstellbar

sind.

Man kann dies zum Beispiel als Algorithmus formulieren, der mit einer (anfangs leeren)Warteschlange arbeitet:

40

Page 43: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Setze B0 := {q0}; (∗ Startzustand von M ′ ∗)setze B := {B0}. (∗ bisher erzeugte Zustande ∗)Fuge B0 in die Warteschlange ein.Solange die Warteschlange nicht leer ist:

entnehme ein B aus der Warteschlange;fur jedes a ∈ Σ teste ob B′ =

⋃q∈B δ(q, a) in B ist,

falls nicht, setze B := B ∪ {B′}und fuge B′ in die Warteschlange ein.

Ausgabe: B.

Nebenbei konnen wir die Tabelle fur die Ubergangsfunktion δ′ erzeugen.

Wie groß wird der von der Potenzmengenkonstruktion erzeugte DFA M ′? Grundsatzlichgibt es nur die obere Schranke |Q′| = 2|Q|. Lasst man uberflussige Zustande weg, wirdQ′ u. U. kleiner. Jedoch zeigt es sich, dass in manchen Fallen der exponentielle Blow-upunvermeidbar ist.

2.2.10 Beispiel Sei n ≥ 1 fest, und sei L = {0, 1}∗{0}{0, 1}n−1, die Menge allerBinarstrings der Lange mindestens n, die an der n-ten Stelle von rechts eine 0 haben. EinNFA fur L mit n+ 1 Zustanden sieht aus wie folgt:

0 n-11 2 n...Start

0,1

0 0,1 0,1 0,1

Die pure Potenzmengenkonstruktion liefert einen DFA mit 2n+1 Zustanden. Von diesensind 2n nicht erreichbar, namlich die B mit 0 /∈ B, wie man sich leicht uberlegt. DurchWeglassen dieser Zustande erhalten wir einen DFA mit 2n Zustanden. Andererseits gilt:

Behauptung : Jeder DFA M = (Q,Σ, q0, F, δ) mit L = LM hat mindestens 2n Zustande.

Dies sieht man mit folgendem indirekten Beweis ein: Angenommen, |Q| < 2n. Dannexistieren zwei verschiedene Worter a1 · · · an, b1 · · · bn ∈ {0, 1}n mit δ(q0, a1 · · · an) =δ(q0, b1 · · · bn). Wahle ein imit ai 6= bi, z. B. ai = 0 und bi = 1. Dann gilt a1 · · · ai · · · an0i−1 ∈L und b1 · · · bi · · · bn0i−1 6∈ L, also

δ(q0, a1 · · · an0i−1) ∈ F und δ(q0, b1 · · · bn0i−1) 6∈ F.Andererseits ist nach 2.1.6

δ(q0, a1 · · · an0i−1) = δ(q0, b1 · · · bn0i−1),

ein Widerspruch.

Wir betrachten noch zwei weitere Beispiele fur NFAs und die Potenzmengenkonstruktion.Dabei geht es um das Erkennen von Wortern aus einer endlichen Menge. Diese Beispielesollten im Detail studiert werden, da noch einige Besonderheiten von NFAs zur Sprachekommen.

41

Page 44: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

2.2.11 Beispiel Wir betrachten nochmals die Aufgabe, einen endlichen Automatenfur eine endliche Sprache L bereitzustellen. Diese Aufgabe wurde in Satz 2.1.10(d) schonauf zwei Arten gelost: durch einen Induktionsbeweis und durch direktes Angeben einesDFA, der als Zustandsmenge die Menge der Prafixe der Worter in L hatte.

Hier geben wir eine weitere Moglichkeit an: Wir konstruieren einen NFA fur L und wandelndiesen mit Hilfe der Potenzmengenkonstruktion in einen DFA um.

Angenommen, L = {w1, . . . , wn} mit s = |w1| + · · · + |wn|. Unser NFA ML hat einenStartzustand q0 und genau s weitere Zustande. Fur jedes Wort wi gibt es in GML

einenWeg, der aus Zustand 1 und |wi| weiteren Zustanden besteht. Die |wi| Kanten auf diesemWeg sind mit den Buchstaben von wi beschriftet. Die Endknoten der |L|Wege entsprechenakzeptierenden Zustanden. Wenn das leere Wort ε in L ist, entspricht diesem Wort einWeg der Lange 0; in diesem Fall ist der Startzustand 1 akzeptierend.

Abbildung 2.11 zeigt den NFA ML fur die Sprache L = {bei, beine, bube} uber demAlphabet Σ = {a, . . . , z}.

e8 9

10 11 12 13

b

b

b

bu e

e i

e i n1

2 3 4

5 6 7Start

Abbildung 2.11: Ein NFA in Graphdarstellung fur die Sprache {bei, beine, bube} uberΣ = {a, . . . , z}

Wir haben die Zustande willkurlich durchnummeriert. Der Startzustand ist q0 = 1, dieakzeptierenden Zustande sind durch F = {4, 9, 13} gegeben. Ein NFA fur die SpracheL′ = L ∪ {ε} wurde genau so aussehen, nur ware auch der Zustand 1 akzeptierend.Man beachte, dass man sich keine Muhe geben muss, gemeinsame Prafixe der Worterin L zu finden, da es bei einem NFA gestattet ist, dass ein Knoten mehrere ausgehendeKanten mit derselben Beschriftung hat, wie der Knoten 1 im Beispiel, aus dem drei b-Kanten herausfuhren. Es ist offensichtlich, dass in diesen NFA genau die drei Worteraus L

”hineinpassen“, im Sinn von Bemerkung 2.2.7. Alle Worter, die nicht Prafix eines

Wortes in L sind, fuhren in eine”Sackgasse“, d h. es gibt uberhaupt keine Berechnung

des NFA, der ein solches Wort vollstandig liest.

Die Ubergangsfunktion des NFA aus Abb. 2.11 ist in Tabellenform in Tab. 2.4 gegeben.

42

Page 45: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

q F b e i n u Σ− {b, e, i, n, u}start → 1 {2, 5, 10} − − − − −

2 − {3} − − − −3 − − {4} − − −4 ∗ − − − − − −5 − {6} − − − −6 − − {7} − − −7 − − − {8} − −8 − {9} − − − −9 ∗ − − − − − −

10 − − − − {11} −11 {12} − − − − −12 − {13} − − − −13 ∗ − − − − − −

Tabelle 2.4: Tabellendarstellung der Ubergangsfunktion δ eines NFA fur die Sprache L ={bei, beine, bube}. Statt

”∅“ schreiben wir

”−“; das Verhalten bei Buchstaben, die nicht

in L vorkommen, ist in einer Spalte zusammengefasst

Wenn wir die Potenzmengenkonstruktion auf diesen NFA anwenden, wobei wir die Versionverwenden, bei der die unerreichbaren Zustande nicht erzeugt werden, erhalten wir denDFA, der in Abb. 2.12 dargestellt ist.

43

Page 46: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

{1}

{8}

{11} {12} {13}

0/

be

i n e{9}{3,6} {4,7}

u{2,5,10}

eb

Start

Abbildung 2.12: Der durch Potenzmengenkonstruktion entstehende DFA fur die Sprache{bei, beine, bube}; gestrichelte Kanten fuhren zum Fehlerzustand ∅; sie sind mit allenBuchstaben beschriftet zu denken, die nicht explizit an anderen Kanten stehen

In der Abbildung gibt es einen Fehlerzustand (die leere Menge ∅); um die Abbildungubersichtlicher zu gestalten, haben die (gestrichelten) Kanten, die zu diesem Zustandfuhren, keine explizite Beschriftung. Dies soll bedeuten, dass alle nicht explizit angegebe-nen Ubergange uber diese Kanten in den Fehlerzustand fuhren.

Oft lasst man bei der graphischen Darstellung eines DFA mit einem Fehlerzustand diesenganz weg, inklusive aller Ubergange, die in ihn hineinfuhren. Im Bild wurde das bedeuten,dass alle gestrichelten Kanten weggelassen werden.

Nicht nur in diesem Beispiel, sondern immer bei der Anwendung der Potenzmengenkon-struktion auf den NFA ML ergibt sich ein DFA, der strukturell genau dem Prafixautoma-ten fur die Sprache L entspricht, siehe Satz 2.1.10(d). (In mathematischer Sprache sagtman, der entstehende DFA sei

”isomorph“ zum Prafixautomaten fur L.) Insbesonde-

re fuhrt die Potenzmengenkonstruktion hier nicht zu einer Vergroßerung der Anzahl derZustande.

2.2.12 Beispiel Unser letztes Beispiel sieht auf den ersten Blick dem vorangegange-nen Beispiel ahnlich. Wir untersuchen ein Problem, das bei der Verarbeitung von Textenimmer wieder vorkommt. Man mochte wissen, ob eine bestimmte Zeichenreihe in einemText (einem File) vorkommt, und wenn ja, wo. Etwas allgemeiner konnte man bei einergegebenen Suchwortliste S = (w1, . . . , wn) von endlich vielen Strings fragen, ob und woeiner dieser Strings in einem gegebenen File vorkommt. Das File wird dabei als Eingabe-wort w aufgefasst. (Allgemeinere Suchanfragen sind moglich; wir kommen spater daraufzuruck.)

Wir wollen einen deterministischen endlichen Automaten entwerfen, mit dem wir einEingabewort w durchmustern konnen, derart dass man unterwegs immer genau dann in

44

Page 47: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

einem akzeptierenden Zustand ist, wenn gerade das Ende eines der Worter aus S erreichtworden ist.

Wenn wir als Wortliste wieder (bei, beine, bube) verwenden, sollte beispielsweise dasWort obeinbubebeinebeleintabubeibringt zu einer Zustandsfolge fuhren, die sich fol-gendermaßen zu F verhalt:

o b e i n b u b e b e i n e b e l e i n t a b u b e i b r i n g t

- - - - F - - - - F - - F - F - - - - - - - - - - - F F - - - - - -

Wir konnen diese Anforderung wie folgt als formale Sprache formulieren, wobei Σ einpassendes Alphabet sein soll.

LS := {w ∈ Σ∗ | eines der Worter w1, . . . , wn ist Suffix von w}.

Dann ist jeder DFA fur uns geeignet, der das Wortproblem fur LS lost.

Wir bauen zunachst einen NFA MS fur LS, um diesen dann per Potenzmengenkonstruk-tion in einen DFA umzubauen. Kurzes Uberlegen zeigt, dass ein NFA fur LS einfach ausdem NFA aus Beispiel 2.2.11 fur die Wortmenge {w1, . . . , wn} zu erhalten ist, indem wiram Startzustand eine Schleife anbringen, die es ermoglicht, beliebige Buchstaben aus Σzu lesen, ohne diesen Zustand zu verlassen.

Wenn wir als Wortliste wieder (bei, beine, bube) und als Alphabet wieder Σ = {a, . . . , z}verwenden, ergibt sich die in Abbildung 2.13 angegebene Modifikation des NFA von eben.

a..z

9

10 11 12 13

b

b

bu e

e i

e i n e

b

1

2 3 4

5 6 7 8Start

Abbildung 2.13: Ein NFA fur LS mit S = (bei, beine, bube)

Wenn wir die Potenzmengenkonstruktion anwenden, naturlich wieder in der Version, in derkeine uberflussigen Zustande erzeugt werden, erhalten wir den in Abb. 2.14 angegebenenDFA.

45

Page 48: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

{1,3,6,13}b

b i n e

b

b

e

b

u

b

i

b

{1,2,5,10}

b

{1,9}{1,8}{1,3,6} {1,4,7}{1}

{1,2,5,10,12} e{1,11}b

u

Start

Abbildung 2.14: Ein DFA fur LS mit S = (bei, beine, bube)

Wir beobachten (ohne einen allgemeinen Beweis), dass der DFA nicht mehr Zustandehat als der NFA. (In unserem Fall sind es sogar weniger, weil bei Prafix von beine ist.)Wenn wir die erreichten DFA-Zustande (also NFA-Zustandsmengen) nicht nur daraufhinansehen, ob sie einen F -Zustand enthalten, sondern auch daraufhin, welche genau, konnenwir am nach dem Lesen eines Prafixes w′ von w erreichten Zustand B (des NFA) sogarablesen, welches Wort (welche Worter) aus S am Ende von w′ stehen.

2.3 Regulare Ausdrucke

Bisher haben wir Sprachen immer nur abstrakt oder durch zugehorige Maschinen beschrie-ben. Regulare Ausdrucke stellen eine andere Art dar, Sprachen zu spezifizieren. RegulareAusdrucke formalisieren den folgenden induktiven Ansatz zur Konstruktion immer kom-plizierterer Sprachen:

(i) Starte mit den”trivialen Sprachen“ ∅, {ε}, {a}, fur a ∈ Σ;

(ii) Wende die Operationen

Konkatenation: L1, L2 → L1L2 = L1 · L2 = {w1w2 | w1 ∈ L1, w2 ∈ L2}Vereinigung: L1, L2 → L1 ∪ L2 = {w | w ∈ L1 ∨ w ∈ L2}

46

Page 49: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

”Kleene-Abschluss“: L→ L∗ = {w1 . . . ws | s ≥ 0, w1, · · · , ws ∈ L}

iteriert auf bereits erzeugte Sprachen an.

Neben dem reinen Erzeugungsprozess geben regulare Ausdrucke den erzeugten Sprachenauch Namen (wobei jede Sprache unendlich viele Namen hat).

Fur das folgende setzen wir voraus, dass die Alphabete {∅, ε}, {(, ),+,∗ } und Σ disjunktsind.2 Fur allgemeine Informationen zu induktiven Definitionen siehe Anhang A.2.

2.3.1 Definition Σ sei ein Alphabet.

(a) Die Menge der regularen Ausdrucke (uber Σ) ist induktiv definiert wie folgt:

(i) ∅ und ε sind regulare Ausdrucke.(Hier werden

”∅“ und

”ε“ als Zeichen benutzt.)

Fur jedes a ∈ Σ ist a regularer Ausdruck.

(ii) Ist r regularer Ausdruck, so auch (r∗).

Sind r1 und r2 regulare Ausdrucke, so auch (r1r2) und (r1 + r2).

(iii) Nur die durch die obigen Regeln erzeugbaren Worter sind regulare Ausdrucke.

(b) Jedem regularen Ausdruck r ist eine Sprache L(r) ⊆ Σ∗ zugeordnet. Diese ist in-duktiv definiert wie folgt:

(i) L(∅) := ∅;L(ε) := {ε};L(a) := {a}, fur a ∈ Σ.

(ii) L((r∗)) := L(r)∗;

L((r1r2)) := L(r1)L(r2);

L((r1 + r2)) := L(r1) ∪ L(r2).

(c) Ist L(r) = L(r′), so heißen r und r′ aquivalent (Notation: r ∼ r′).

Wir werden sehen, dass die Klasse der solcherart erzeugten Sprachen (die durch”regulare

Ausdrucke“ beschriebenen Sprachen) gleich der Klasse der regularen Sprachen, d. h. dervon DFA’s akzeptierten Sprachen ist. Historisch war es naturlich umgekehrt: Die Be-zeichnung

”regulare Sprachen“ leitet sich von der Tatsache ab, dass diese Sprachen durch

regulare Ausdrucke beschrieben werden.

Regulare Ausdrucke uber Σ sind also Worter (uber dem Alphabet {∅, ε, (, ),+,∗ } ∪ Σ);jedes dieser Worter bezeichnet eine Sprache. Da L(r) = L((r+∅)) = L(((r+∅)+∅)) = . . .,gibt es fur jede Sprache L(r) unendlich viele Namen, d. h. zu r unendlich viele aquivalenteAusdrucke.

2Der Konvention gemaß benutzen wir in regularen Ausdrucken”∅“ und

”ε“ als Zeichen.

47

Page 50: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

2.3.2 Beispiel

(a) L((01)) = L(0)L(1) = {0}{1} = {01}

(b) L(((01)∗)) = L((01))∗ = {01}∗ = {ε, 01, 0101, 010101, . . .}

(c) L((((01)∗) + ((10)∗))) = L(((01)∗)) ∪ L(((10∗)) = {ε, 01, 10, 0101, 1010, . . .}

(d) L((((01)∗)((10)∗))) = . . . = {(01)i(10)j | i ≥ 0, j ≥ 0}

(e) L((a+ · · ·+ z+ A+ · · ·+ Z)(0+ · · ·+ 9+ a+ · · ·+ z+ A+ · · ·+ Z)∗) ist die Mengeder Pascal-Bezeichner. (Klammern weggelassen, siehe unten.)

(f) L(((0 + 1)∗)) = {0, 1}∗;L(((0 + ε)∗)) = L((0∗)), also ((0 + ε)∗) ∼ (0∗).

Um die Notation regularer Ausdrucke zu vereinfachen, legen wir Praferenzregeln fest: ∗

bindet starker als (das nicht geschriebene Zeichen) · (fur die Konkatenation) und +; ·bindet starker als +; wir notieren, dass + und · assoziativ sind und dass + kommutativist (bis auf Aquivalenz), wenn man die erzeugten Sprachen betrachtet. Dann lassen wiruberflussige Klammern weg:

(01∗001∗0 + (1 + 2)0∗1∗)∗

entspricht damit

(((((0(1∗))((00)(1∗)))0) + ((1 + 2)((0∗)(1∗))))∗)

oder auch(((((1 + 2)(0∗))(1∗)) + ((0(1∗))((00)((1∗)0))))∗).

Weiter benutzen wir manchmal die Abkurzung r+ fur (r∗)r. Offenbar gilt (L(r))+ =L(r)∗L(r) = L(r∗)L(r) = L((r∗)r) = L(r+).

Anmerkung: Oft findet man auch die Konvention, dass regulare Ausdrucke r und dievon ihnen bezeichnete Sprache L(r) identifiziert werden. Das liest sich dann so:

(01)∗ = {ε, 01, 0101, 010101, . . . },(0 + 1)∗ = {0, 1}∗,

(00 + 111)∗ = {ε, 00, 111, 00111, 11100, . . . }.

Statt des Aquivalenzsymbols benutzt man dann das Gleichheitszeichen: (0 + 1)∗ = ((0 +1)+1)∗ = (0+(1+1))∗; ((0+1)∗)∗ = (0+1)∗; (0+ε)∗ = 0∗; usw. Zum Einuben unterscheidenwir in diesem Text Sprachen und die regularen Ausdrucke, die sie bezeichnen.

Schließlich notieren wir noch einige Aquivalenzen, die beim”Rechnen“ mit regularen

Ausdrucken hilfreich sind:

48

Page 51: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

∅r ∼ r∅ ∼ ∅; εr ∼ rε ∼ r;r + ∅ ∼ ∅+ r ∼ r; (r + ε)∗ ∼ r∗; (r + ε)+ ∼ r∗;r + r ∼ r; (r∗)(r∗) ∼ r∗; (r∗)∗ ∼ r∗.

Die Beweise ergeben sich durch Betrachten der entsprechenden Manipulationen mit Spra-chen. Weitere Rechenregeln kann man sich selbst herleiten.

Wir zeigen im Rest dieses Abschnitts, dass regulare Ausdrucke genau die regularen Spra-chen erfassen.

2.3.3 Satz Ist M ein NFA, so gibt es einen regularen Ausdruck rM mit LM = L(rM).

Beweis M = (Q,Σ, q0, F, δ) sei gegeben. O. B. d. A. sei Q = {0, 1, . . . , s − 1}, q0 = 0.(Ist das nicht so, nummeriert man die Elemente von Q beliebig durch und ersetzt q ∈ Qdurch seine Nummer.) Wir definieren zunachst |Q|2 Sprachen:

L(i, j) := {w ∈ Σ∗ | j ∈ δ(i, w)}, fur 0 ≤ i, j < s.

Wir benutzen im folgenden intensiv die Interpretation von M als Graph GM (vgl. Bemer-kung 2.2.7). Demnach gilt: L(i, j) besteht aus den Wortern b1 · · · bm, die als Kantenbe-schriftung an Wegen auftreten, die in Knoten vi beginnen und in Knoten vj enden. UnserZiel ist es, regulare Ausdrucke rj fur L(0, j), j ∈ Q, zu finden (d. h. L(rj) = L(0, j)). Denndann konnen wir

rM := rj1 + · · ·+ rj|F |

benutzen, wo F = {j1, . . . , j|F |} ⊆ Q ist, weil LM =⋃{L(0, j) | j ∈ F} ist.

Um diese regularen Ausdrucke zu finden, benutzen wir einen algorithmischen Ansatz,der als

”dynamische Programmierung“ bekannt ist. Bei der Definition von L(i, j) werden

beliebige Wege von i nach j zugelassen. Wir fuhren eine feinere Unterscheidung ein, indemwir die Menge der Knoten einschranken, die auf dem Weg vorkommen durfen.

L(i, j, k) := {b1 · · · bm ∈ Σ∗ | ∃ Weg in GM von vi nach vj

mit Kantenbeschriftung b1, . . . , bm der [außer

vi am Anfang und vj am Ende] nur Knoten in

{v0, . . . , vk−1} benutzt},fur 0 ≤ i, j < s und 0 ≤ k ≤ s.

Schema eines Weges in GM , der b1 · · · bm ∈ L(i, j, k) bewirkt:

i j1b b2 b3 bm−1 bm...

nur Zustände in {0,...,k−1}

49

Page 52: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Wir beobachten folgende Eigenschaften der Mengen L(i, j, k), fur 0 ≤ i, j < s und k = 0bzw. k = s:

i 6= j ⇒ L(i, j, 0) = {a ∈ Σ | j ∈ δ(i, a)}(2.1)

= Menge der Buchstaben an Kanteni j

L(i, i, 0) = {a ∈ Σ | i ∈ δ(i, a)} ∪ {ε}(2.2)

= {ε} ∪ Menge der Buchstaben an Kanteni

(2.3) L(i, j) = L(i, j, s).

Um die regularen Ausdrucke fur L(i, j, k) induktiv konstruieren zu konnen, benotigen wirnoch eine Beziehung zwischen den Sprachen L(.., .., k) und L(.., .., k + 1). Dazu beob-achten wir: Ein Weg von vi nach vj, der unterwegs nur Knoten in {v0, . . . , vk} benutzt,verlauft entweder ganzlich in {v0, . . . , vk−1} oder setzt sich aus Teilwegen der folgendenArt zusammen:

(i) von vi nach vk in {v0, . . . , vk−1} ;

(ii) von vk nach vk in {v0, . . . , vk−1} [0-, 1-, oder mehrmals];

(iii) von vk nach vj in {v0, . . . , vk−1}.

Schematisch:

vjvi

vi vk vk vk vj

(l+1)-mal, l > 0

Weg in {v , ..., v }0 k-1

Daraus erkennt man:

L(i, j, k + 1) = L(i, j, k) ∪ L(i, k, k)L(k, k, k)∗L(k, j, k),(2.4)

fur 0 ≤ i, j < s, 0 ≤ k < s.

50

Page 53: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

[Fur Puristen geben wir einen exakten Beweis dieser Aussage an. Normalerweise wirdman sich mit dem genannten anschaulichen Argument zufriedengeben. Zum Gluck haltdie Graphensprechweise den Beweis noch einigermaßen ubersichtlich.

Beweis von (1.4):”⊆“: Ist w ∈ L(i, j, k + 1), so ist w = b1 · · · bm Kantenbeschriftung

eines Weges von vi nach vj uber Zwischenknoten in {v0, . . . , vk}. Falls auf diesem Wegvk nicht vorkommt, ist w ∈ L(i, j, k). Falls doch, zerlege den Weg in Teile wie oben un-ter (i), (ii), (iii) aufgefuhrt. Dadurch wird das Wort b1 · · · bm in Teilworter x, y1, . . . , yl,l ≥ 0, und z zerlegt, wo x die Kantenbeschriftung am Teilweg (i) ist, y1, . . . , yl die an denTeilwegen von Typ (ii), und z die Kantenbeschriftung am letzten Teilweg (iii). Damit istx ∈ L(i, k, k), y1, . . . , yl ∈ L(k, k, k), und z ∈ L(k, j, k), also w = b1 · · · bm = xy1 · · · ylz ∈L(i, k, k)L(k, k, k)∗L(k, j, k).

”⊇“: Es ist klar, dass L(i, j, k) ⊆ L(i, j, k + 1) gilt. Liegt

ein Wort w ∈ L(i, k, k)L(k, k, k)∗L(k, j, k) vor, so kann man w = xy1 · · · ylz schreiben furein l ≥ 0, x ∈ L(i, k, k), y1, . . . , yl ∈ L(k, k, k), z ∈ L(k, j, k). Diesen Wortern entspre-chen Wege von vi nach vk bzw. vk nach vk bzw. vk nach vj, die nur Zwischenknoten in{v0, . . . , vk−1} benutzen. Hangen wir diese l + 2 Wege hintereinander, erhalten wir einenWeg von vi nach vj mit Zwischenknoten in {v0, . . . , vk}, der w als Kantenbeschriftunghat; also ist w ∈ L(i, j, k + 1). Damit ist (1.4) bewiesen.]

Mit Hilfe der Aussagen (1.1), (1.2), (1.4) konstruieren wir (durch Induktion uber k) re-gulare Ausdrucke ri,j,k fur L(i, j, k), 0 ≤ i, j < s, 0 ≤ k ≤ s.

(1.1’) ri,j,0 := a1 + · · ·+ as + ∅, wo L(i, j, 0) = {a1, · · · , as} ⊆ Σ, i 6= j.

(1.2’) ri,i,0 := a1 + · · ·+ as + ε, wo L(i, i, 0) = {a1, . . . , as} ∪ {ε}.(1.4’) ri,j,k+1 := ri,j,k + ri,k,k(r

∗k,k,k)rk,j,k, fur 0 ≤ i, j < s, 0 ≤ k < s.

Aus der Konstruktion und (1.1), (1.2), (1.4) folgt sofort (technisch: per Induktion uberk), dass

L(i, j, k) = L(ri,j,k), fur 0 ≤ i, j < s, 0 ≤ k ≤ s.

Schließlich setzen wirrj := r0,j,s, fur 0 ≤ j < s;

es ist dann klar (mit (1.3)), dass

L(0, j) = L(0, j, s) = L(r0,j,s) = L(rj).

Damit kann die Konstruktion von rM beendet werden, wie ganz am Anfang des Beweisesangegeben. �

Der Beweis liefert auch eine konstruktive Methode, um rM zu erzeugen. Unglucklicherwei-se werden selbst fur kleine Automaten die entstehenden Ausdrucke schnell unhandlich.Man achte daher auf Vereinfachungsmoglichkeiten (Ersetzen von Teilausdrucken durchaquivalente einfachere). Weiter kann es Arbeit sparen, wenn man nicht alle ri,j,k konstru-iert, sondern nur die, die man zur Konstruktion von r0,j,s, j ∈ F , wirklich braucht.

Man kann beweisen, dass es eine Familie (Mn)n≥2 von DFA’s gibt, wo Mn = (Qn,Σn, . . . )mit |Qn| = n, |Σn| = n2, und wo der kleinste regulare Ausdruck rn fur LMn

mindestens

51

Page 54: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

2n−1 Symbole hat (vgl. I. Wegener, Theoretische Informatik – eine algorithmenorientierteEinfuhrung, Teubner, 1999, S. 133f.). Das bedeutet, dass im allgemeinen ein Explodierender Große des entstehenden regularen Ausdrucks unvermeidlich ist.

2.3.4 Beispiel Wir wollen einen regularen Ausdruck fur den NFA

0 1Start

0

11

konstruieren. Zur Ubung erzeugen wir alle ri,j,k.

k = 0 :

r0,0,0 = 0 + ε; r0,1,0 = 1; r1,0,0 = ∅; r1,1,0 = 1 + ε;

k = 1:

r0,0,1 = r0,0,0 + r0,0,0(r∗0,0,0)r0,0,0 = (0 + ε) + (0 + ε)(0 + ε)∗(0 + ε) ∼ 0∗;

r0,1,1 = r0,1,0 + r0,0,0(r∗0,0,0)r0,1,0 = 1 + (0 + ε)(0 + ε)∗1 ∼ 0∗1;

r1,0,1 = r1,0,0 + r1,0,0(r∗0,0,0)r0,0,0 = ∅+ ∅(0 + ε)∗(0 + ε) ∼ ∅;

r1,1,1 = r1,1,0 + r1,0,0(r∗0,0,0)r0,1,0 = (1 + ε) + ∅(0 + ε)∗1 ∼ (1 + ε).

k = 2 :

r0,0,2 = r0,0,1 + r0,1,1(r∗1,1,1)r1,0,1 = 0∗ + 0∗1(1 + ε)∗∅ ∼ 0∗;

r0,1,2 = r0,1,1 + r0,1,1(r∗1,1,1)r1,1,1 = 0∗1 + 0∗1(1 + ε)∗(1 + ε) ∼ 0∗1+;

r1,0,2 = ∅;r1,1,2 = r1,1,1 + r1,1,1(r

∗1,1,1)r1,1,1 = (1 + ε) + (1 + ε)(1 + ε)∗(1 + ε) ∼ 1∗.

Gesamt: rM = r0,0,2 + r0,1,2 = 0∗ + 0∗1+ ∼ 0∗1∗.

Wir mussen jetzt noch die andere Richtung unserer ursprunglichen Behauptung beweisen:Zu jedem regularen Ausdruck r gibt es einen NFA (und damit auch einen DFA), der L(r)akzeptiert. Ein solcher Automat ist sogar algorithmisch erzeugbar. Diese Richtung ist auchdie fur Anwendungen interessante: Man spezifiziert eine Sprache durch einen regularenAusdruck (das ist oft bequem); der dazugehorige DFA oder NFA wird vom Rechner er-zeugt. Zum Beispiel gehen Substring-Suchalgorithmen, die in Editoren benutzt werden, indieser Weise vor. Wir beschreiben im folgenden grob einen Algorithmus, der dies leistet.Als technisches Hilfsmittel definieren wir noch NFA’s mit

”ε-Ubergangen“, ein Konzept,

das auch praktisch wichtig ist. Man erlaubt dem NFA, gewisse Zustandsubergange auchohne Lesen eines Symbols auszufuhren.

2.3.5 Definition Ein NFA mit ε-Ubergangen (kurz: ε-NFA) ist ein 5-Tupel M =(Q,Σ, q0, F, δ), wo Q,Σ, q0, F wie bei NFA’s sind (vgl. 2.2.2), mit ε /∈ Σ, aber

δ : Q× (Σ ∪ {ε})→ P(Q).

52

Page 55: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Interpretation: Ist q′ ∈ δ(q, ε), so kann M , ohne ein Zeichen zu lesen, von Zustand q inZustand q′ gelangen. Die formale Definition der iterierten Funktion δ : Q × Σ∗ → P(Q)ist hier etwas muhsam; wir gehen daher den leichteren und anschaulicheren Weg uber diegraphische Darstellung GM von M (vgl. Bemerkung 2.2.7). Zusatzlich zu den Elementen,die GM fur einen NFA M hatte, sind bei ε-NFA’s jetzt auch Kanten

q ε q’

gestattet. Eine solche Kante ist vorhanden genau dann wenn q′ ∈ δ(q, ε).

53

Page 56: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Beispiel:

.

1

0

2

3Start

2

1

ε

ε ε

ε

3

Abbildung 2.15: Ein ε-NFA fur L(1∗3∗ + 2∗3∗)

2.3.6 Definition Sei M ein ε-NFA.

(a) Fur q ∈ Q,w = b1 · · · bm ∈ Σ∗ definieren wir

δ(q, w) := {p ∈ Q | ∃ Weg in GM von vq nach vp,

dessen Kantenmarkierungen, von ε’s

abgesehen, gleich b1, . . . , bm sind }.

Achtung: Es gilt δ(q, ε) ⊇ {q} und δ(q, a) ⊇ δ(q, a), aber nicht notwendig Gleichheit!

(b) M akzeptiert x :⇔ δ(q, x) ∩ F 6= ∅.

(c) LM := {x ∈ Σ∗ |M akzeptiert x}.

Im obigen Beispiel haben wir etwa den folgenden akzeptierenden Weg fur das Wort w =1113:

0 1 1 1 1 33Start ε ε1 1 1 3

Abbildung 2.16: Akzeptierende Rechnung fur 1113 ∈ LM

Es gibt keinen Pfad von v0 nach v3 mit Kantenbeschriftung ε · · · ε3ε · · · ε1ε · · · ε, also ist31 6∈ LM .

Wir stellen zunachst fest, dass ε-NFA’s nicht mehr Sprachen akzeptieren als NFA’s undDFA’s.

2.3.7 Satz Gilt L = LM fur einen ε-NFA M , so ist L = LM ′ fur einen NFA M ′ (alsoist L regular).

54

Page 57: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Beweis Sei M = (Q,Σ, q0, F, δ). Die einfache Idee der Konstruktion von M ′ ist es,ε-Wege

”kurzzuschließen“. Wo in GM ein Weg von vq nach vp fuhrt, der mit ε, . . . , ε, a

beschriftet ist (a ∈ Σ), soll in GM ′ eine direkte, mit a beschriftete Kante von vq nachvp fuhren. Man muss dann noch sicherstellen, dass Knoten vq, von denen aus man aufeinem reinen ε-Weg zu einem Knoten vp, p ∈ F , gelangt, selbst akzeptierend werden.Also: M ′ = (Q,Σ, q0, F

′, δ′), mit

δ′(q, a) := {p ∈ Q | ∃ Weg in GM von vq nach vp,

der mit ε, . . . , ε, a markiert ist },fur q ∈ Q, a ∈ Σ, und

F ′ := {q ∈ Q | ∃p ∈ F : ∃ Weg (der Lange ≥ 0) in GM von vq nach vp,

der mit ε, . . . , ε markiert ist }.Zu zeigen ist: Fur a1 · · · an ∈ Σ∗ gilt:

M akzeptiert a1 · · · an ⇔M ′ akzeptiert a1 · · · an.

”⇒“: Falls M das Wort a1 · · · an akzeptiert, gibt es einen Weg in GM von v0 zu einem vq

mit q ∈ F , dessen Kanten mit ε, . . . , ε, a1, ε, . . . , ε, a2, . . . , ε, . . ., ε, an, ε, . . . , ε beschriftetsind. Es seien vq1

, . . . , vqndie Knoten auf dem Weg, in die die mit a1, . . . , an beschrifteten

Kanten dieses Weges munden. Dann sind, nach Definition von δ′, die Kanten (vqi−1, vqi

)in GM ′ mit ai beschriftet, 1 ≤ i ≤ n, und qn ∈ F ′. Also gibt es in GM ′ einen Weg vonvq0

zu vq′ mit q′ ∈ F ′, dessen Kanten mit a1, . . . , an beschriftet sind, d. h. M ′ akzeptierta1 · · · an.

”⇐“: Falls M ′ das Wort a1 · · · an akzeptiert, gibt es einen Weg vq0

, vq1, . . . , vqn

in GM ′ mitqn ∈ F ′, so dass die Kante (vqi−1

, vqi) mit ai beschriftet ist, 1 ≤ i ≤ n. Nach Definition von

M ′ gibt es in GM Wege von vqi−1nach vqi

, die mit ε, . . . , ε, ai beschriftet sind, 1 ≤ i ≤ n,und einen Weg von vqn

zu vq mit q ∈ F , der mit ε, . . . , ε beschriftet ist. Man verkettetdiese n+ 1 Wege, um einen zu erhalten, der von vq0

nach vq verlauft, und abgesehen vonε’s, mit a1, . . . , an beschriftet ist. Also akzeptiert M das Wort a1 · · · an. �

Wenden wir die im Beweis angegebene Konstruktion auf das Beispiel von oben an, erhaltenwir folgenden NFA.

.30

1

2

Start

1

2

3

3

3

2

1

3

55

Page 58: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

2.3.8 Satz Sei Σ ein Alphabet. Ist r ein regularer Ausdruck uber Σ, so existiert einε-NFA Mr mit L(r) = LMr

. (Nach 2.3.7 und 2.2.6 ist also L(r) regular.)

Beweis Wir zeigen durch Induktion uber den Aufbau von r die folgende Aussage: Esgibt einen ε-NFA

Mr = (Q,Σ, q0, {qf}, δ), mit q0 6= qf .

mit L(r) = LMr. (Mr hat also genau einen akzeptierenden Zustand, der zudem vom

Startzustand verschieden ist.)

Die Automaten werden dabei durchweg in der Graphdarstellung angegeben. (Man be-achte, dass ahnliche Konstruktionen auch ohne die Einschrankung q0 /∈ F und |F | = 1moglich sind; dadurch vermindert sich u. U. die Große des entstehenden Automaten.) Diefolgenden Skizzen zeigen den Aufbau der Automaten M∅, Mε,Ma und die induktive Tech-nik, mit der man aus Mr1

und Mr2ε-NFA’s M(r1+r2),M(r1r2) und M(r∗

1) aufbaut. Dabei

stellt ein Rechteck

q0

qf

Start GM

M:

immer den Graphen eines ε-NFA M mit Startzustand q0 = q und akzeptierendem Zustandqf = q′ dar.

.

1OM :

Start 0

Abbildung 2.17: r = ∅ : GM∅hat keine Kante!

1εM :

Start 0 ε

Abbildung 2.18: r = ε : GMεhat eine ε-Kante.

56

Page 59: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

0 1

M :

Start aa

Abbildung 2.19: r = a : GMahat eine a-Kante.

Abbildung 2.20: r = r1r2: Aus Mr1, Mr2

baue Mr wie folgt:

εStart G GM Mr r 21

r1r2

r1 r2

M :

M M

57

Page 60: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Abbildung 2.21: r = r1 + r2: Aus Mr1, Mr2

baue Mr wie folgt:

2M

r1 r2M + :

GMr 2

Start

GMr 1

r1M

ε

ε

ε

r

ε

Abbildung 2.22: r = r∗1: Aus Mr1baue Mr wie folgt:

Start

M r1

ε

ε

εε GMr 1

(r *)M :1

Um die Behauptung zu beweisen, musste man fur jeden der Konstruktionsschritte nach-weisen, dass der zusammengesetzte Automat tatsachlich zu der Sprache L(r1r2), L(r1+r2),L(r∗1) gehort, vorausgesetzt, dies stimmt schon fur L(r1) undMr1

bzw. L(r2) undMr2. Die-

ser formale Beweis sei dem Leser/der Leserin als Ubung empfohlen. Als Vorbild benutzeman den Beweis der Formel (1.4) in Satz 2.3.3. �

58

Page 61: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

2.3.9 Bemerkung Die Konstruktion von ε-NFA’s (und damit NFA’s, s. Satz 2.3.7)aus regularen Ausdrucken ist wesentlich gutartiger als die umgekehrte Konstruktion. Manzeigt leicht durch (starke) Induktion uber l ≥ 1: Besteht r aus l Symbolen aus {ε} ∪ {a |a ∈ Σ} ∪ {∅} ∪ {+, ·, ∗}, so hat GMr

hochstens 2l Knoten und hochstens 4l Kanten.Wenn man die Datenstrukturen geschickt wahlt, und Syntaxanalysetechniken aus spaterenKapiteln benutzt, ist eine Konstruktion von GMr

aus r in Zeit O(l) moglich, da in jedemKonstruktionsschritt nur eine fixe Menge von Kanten neu zu ziehen ist.

2.3.10 Beispiel Wendet man die Konstruktion aus 2.3.8 auf den regularen Ausdruck0∗1∗ + 11∗0 an, ergibt sich folgender ε-NFA:

Start

ε ε

ε

ε

ε εε

ε

ε

ε

ε ε ε ε ε

ε ε ε

0 1

1 1 0ε

Obgleich dieser Automat im anschaulichen Sinn ubertriebenen Aufwand hat, ist seineKnotenzahl nicht großer als 2 ·# (Symbole in 0∗ · 1∗ + 1 · 1∗ · 0) = 2 · 12 = 24.

Wir fassen die beiden letzten Satze zusammen:

2.3.11 Satz Eine Sprache L ⊆ Σ∗ ist regular genau dann, wenn L = L(r) fur einenregularen Ausdruck r uber Σ.

2.3.12 Korollar Die Klasse der regularen Sprachen ist unter der ∗-Operation (Kleene-Abschluss) und unter Konkatenation abgeschlossen.

Beweis Wenn L, L1, L2 regulare Sprachen sind, dann kann man nach Satz 2.3.3 regulareAusdrucke r, r1 und r2 mit L = L(r), L1 = L(r1) und L2 = L(r2) angeben. Wir bildendie regularen Ausdrucke r∗ und r1r2. Dann sind nach Satz 2.3.7 L∗ = L(r∗) und L1L2 =L(r1r2) ebenfalls regular. �

Es ist eine interessante Ubung, das letzte Korollar ohne Benutzung von regularen Aus-drucken zu beweisen. (Man kann direkt mit NFA’s arbeiten.)

59

Page 62: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

2.4 Das Pumping-Lemma fur regulare Sprachen

Dieser Abschnitt behandelt eine”Struktur-Eigenschaft“, die jede regulare Sprache besitzt

(Satz 2.4.1). Diese wird meistens dazu benutzt, um nachzuweisen, dass gewisse Sprachennicht regular sind.

2.4.1 Satz (Pumping-Lemma fur regulare Sprachen)

Ist L regular, so gibt es eine Zahl n ≥ 1, fur die folgendes gilt:

Ist x ∈ L, |x| ≥ n, so kann man x = uvw schreiben fur u, v, w ∈ Σ∗, derart dass |uv| ≤n, |v| ≥ 1, und uviw ∈ L fur alle i ≥ 0.

(”Aufpumpen“ heißt aus x = uvw die Worter uv2w = uvvw, uv3w = uvvvw, . . . bilden;

”abpumpen“ heißt uv0w = uw bilden.)

Beweis Es sei L eine regulare Sprache. Dann ist L = LM fur einen NFA M = (Q,Σ, q0, F , δ). Die Zahl n ist einfach die Zahl |Q| der Zustande von M . Betrachte nunx = a1 · · · am ∈ L,m ≥ n. Es gibt eine akzeptierende Berechnung von M fur x, die einemWeg Px von vq0

nach vq, q ∈ F , in GM entspricht, dessen Kanten mit a1, . . . , am markiertsind:

p1

p2

p3

pn

pm

a1 a2 a3 a4 an amp0

... ...Start

(p = q )0 0

Da |Q| = n, konnen die Zustande p0, p1, . . . , pn nicht alle verschieden sein, also gibt esk, l ∈ {0, . . . , n} mit k < l, so dass pk = pl.

Wir setzen u := a1 · · · ak; v := ak+1 · · · al; w := al+1 · · · am. Offenbar ist x = uvw, |uv| =l ≤ n, |v| = l − k ≥ 1. Es bleibt nur die

”Pump-Eigenschaft“ nachzukontrollieren. Wir

zerschneiden den Weg Px in drei Teile:

Pu von vq0nach vpk

, Kantenmarkierungen a1, . . . , ak;

Pv von vpknach vpl

= vpk, Kantenmarkierungen ak+1, . . . , al;

Pw von vpl= vpk

nach vpm, Kantenmarkierungen al+1, . . . , am.

Sind P , P ′ zwei Wege, wo Endpunkt p und Anfangspunkt p′ ubereinstimmen, so bezeich-net PP ′ die Konkatenation der beiden. Wir haben: PuPw ist Weg von vq0

nach vpmmit

Kantenmarkierung uw; PuPvPvPw ist Weg von vq0nach vpm

mit Kantenmarkierung uv2w;allgemein: fur i ≥ 0 ist Pu Pv · · ·Pv︸ ︷︷ ︸

i-mal

Pw Weg von vq0nach vpm

mit Kantenmarkierung uviw.

Weil pm ∈ F , erhalten wir uviw ∈ L fur i ≥ 0. �

60

Page 63: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Als Beispiel betrachten wir den folgenden Automaten M , der die Sprache LM = {x ∈{0, 1}∗ | |x|0 , |x|1 sind gerade} akzeptiert.

0 1

3 2

Start

1

1

0 0

1

1

0 0

Der Weg in GM , der der Eingabe x = 000101 ∈ LM entspricht, sieht so aus:

0 3 0 123 0Start 0 0 0 1 0 1

//

//

Unter den ersten 5 Zustanden der Folge kommt ein Zustand, z. B. der Zustand 3, zweifachvor. Die akzeptierenden Wege in GM

0 3

2 1 000 3

2 1 0

0 3

Start

Start 3

1 0 10

0 0 0 0 0 1 0 1

die durch Entfernen bzw. Wiederholen des Teilwegs zwischen dem 2. und 4. Knoten ent-stehen, belegen, dass 0101 = 0(00)0101 und 00000101 = 0(00)2101 in L sind. Genausolassen sich langere solche Wege mit Kantenmarkierungen 0(00)i101 fur i ≥ 3 erzeugen.

Wir benutzen das Pumping-Lemma ausschließlich, um zu zeigen, dass gewisse Sprachennicht regular sind. Dafur verwenden wir folgendes Schema mit funf Schritten. L sei dieSprache, deren Nichtregularitat bewiesen werden soll.

[1] (Wortlich) Beweis indirekt. Annahme: L ist regular.

[2] (Wortlich) Dann gibt es ein n ≥ 1 mit den im Pumping-Lemma 2.4.1 behauptetenEigenschaften.

61

Page 64: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

[3] (Problemspezifisch) Wahle nun x ∈ L, mit |x| genugend groß (mindestens |x| ≥ n)— so dass Schritt 5 ausfuhrbar ist.

[4] (Wortlich) Gemaß Pumping-Lemma kann man x = uvw mit |uv| ≤ n und |v| ≥ 1schreiben, so dass X = {uw, uvw, uv2w, . . .} ⊆ L.

[5] (Problemspezifisch) Wahle ein passendes Element y aus X aus und zeige direkt,dass y nicht in L sein kann. (Manchmal ist dies uw, manchmal auch uviw fur eini ≥ 2.) Dies ist der gewunschte Widerspruch.

Wir demonstrieren die Verwendung des Schemas an einigen Beispielen.

2.4.2 Behauptung Die folgenden Sprachen sind nicht regular.

(a) L1 = {0m1m | m ∈ N}.(b) L2 = {0m2 | m ∈ N}.(c) L3 = {0m10l10m+l | m, l ∈ N}.(d) L4 = {0p | p ist Primzahl}.(e) L5 = {w | w ∈ {0, 1}∗ ist korrekter Klammerausdruck}.

Beweis

(a) [1] Beweis indirekt. Annahme: L1 ist regular. [2] Dann existiert ein n ≥ 1 mit den imPumping-Lemma behaupteten Eigenschaften. [3] Wir wahlen x = 0n1n. Offenbar istx ∈ L und |x| ≥ n. [4] Gemaß Pumping-Lemma kann x = uvw geschrieben werdenmit |uv| ≤ n und |v| ≥ 1 derart dass uviw ∈ L fur alle i ≥ 0. [5] Weil |uv| ≤ n,besteht uv nur aus Nullen. Also ist

uv0w = 0n−|v|1n.

Dieses Wort ist nicht in L1, weil |v| ≥ 1 ist. Andererseits musste nach dem Pumping-Lemma uv0w ∈ L1 sein. Das ist der gewunschte Widerspruch. (Genauso konnte manverwenden, dass uv2w = 0n+|v|1n /∈ L1 ist.)

Wenn man das Schema einmal verstanden hat, muss man es nicht mehr ganz detailliertabschreiben, wie in den folgenden Beweisen.

(b) Annahme, L2 ware regular. Dann gabe es n ≥ 1 wie im Pumping-Lemma. Wahlex = 0n2

. Offenbar ist x ∈ L2, |x| ≥ n. Gemaß Pumping-Lemma kann man x = uvwschreiben, mit |uv| ≤ n, |v| ≥ 1, so dass ∀i ∈ N : uviw ∈ L2. Nun ist aber z. B.uv2w = 0n2+|v| 6∈ L2, weil n2 + |v| ≤ n(n+ 1) < (n+ 1)2. Dies ist ein Widerspruch.

62

Page 65: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

(c) Annahme, L3 ware regular. Dann gabe es n ≥ 1 wie im Pumping-Lemma. Wahlex = 0n110n. Offenbar ist x ∈ L3, |x| ≥ n. Gemaß Pumping-Lemma kann manx = uvw schreiben, mit |uv| ≤ n, |v| ≥ 1, so dass ∀i ∈ N : uviw ∈ L3. Weil|uv| ≤ n, erstreckt sich uv nur uber einen Teil der ersten n Nullen in x; also ist z. B.uv0w = 0n−|v|110n 6∈ L3, ein Widerspruch.

(d) Annahme, L4 ware regular. Dann gabe es n ≥ 1 wie im Pumping-Lemma. Wahlex = 0p fur eine Primzahl p ≥ n + 2. Offenbar ist x ∈ L4 und |x| ≥ n + 2. GemaßPumping-Lemma kann man x = uvw schreiben mit |uv| ≤ n, |v| ≥ 1, und uviw ∈ L4

fur alle i ≥ 0. Offenbar ist dann |w| ≥ 2. Betrachte uv|u|+|w|w = 0|u|+|u||v|+|w||v|+|w| =0(|u|+|w|)(|v|+1). Es ist |u| + |w| ≥ 2 und |v| + 1 ≥ 2, also ist

∣∣uv|u|+|w|w∣∣ = (|u| +

|w|)(|v|+ 1) keine Primzahl, ein Widerspruch.

(e) Fur L5 benutzt man x = 0n1n und argumentiert sonst wie in Teil (a). �

Es gibt nichtregulare Sprachen, deren Nichtregularitat sich nicht mit dem Pumping-Lemma beweisen lasst. Zum Beispiel hat die Sprache

L ={z ∈ {0, 1}∗ | z = 1k fur ein k ≥ 0 oder z = 0j1k2

fur j ≥ 1 und k ≥ 0}

diese Eigenschaft. (Vgl. Buch von Wegener, S. 102, Bsp. 4.3.3.) Wir geben noch eineallgemeinere Version an, die fur manche solche Falle doch noch eine Handhabe liefert. DieVerwendung dieses Lemmas folgt demselben Schema wie oben formuliert.

2.4.3 Satz (Verallgemeinertes Pumping-Lemma fur regulare Sprachen) IstL regular, so gibt es eine Zahl n ≥ 1, fur die folgendes gilt: Ist x ∈ L, und ist x =y0y1 · · · ynyn+1 fur y0, . . . , yn+1 ∈ Σ∗, wo |y1| , . . . , |yn| ≥ 1, so gibt es Zahlen 0 ≤ k < l ≤ nderart dass fur u := y0 · · · yk, v := yk+1 · · · yl, w := yl+1 · · · yn+1 gilt: uviw ∈ L fur allei ≥ 0.

Beweis Analog zum Beweis von 2.4.1. �

2.5 Abschlusseigenschaften fur regulare Sprachen

Dieses kurze Kapitel behandelt Operationen, die aus regularen Sprachen wieder regulareSprachen erzeugen. Wir fassen zusammen, was wir schon wissen.

2.5.1 Satz Lreg, die Klasse der regularen Sprachen, enthalt alle endlichen Sprachen undist abgeschlossen unter Durchschnitt, Vereinigung, Komplementbildung, Konkatenationund Kleene-Abschluss.

63

Page 66: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Beweis Fur Abgeschlossenheit unter Konkatenation (sind L1, L2 regular, so auch L1L2)und Kleene-Abschluss (ist L regular, so auch L∗), siehe 2.3.7. Die anderen Eigenschaftenwurden in 2.1.10 bewiesen. �

Mitunter ist es gunstig, regulare Sprachen hierarchisch zu definieren. Ein primitives Bei-spiel ist folgendes: Die Sprache aller Bezeichner kann man erhalten, indem man die Spra-che L1 = L(B(B + Z)∗) uber dem Alphabet {B,Z} betrachtet, und dann in Worterdieser Sprache fur jedes vorkommende B einen beliebigen Buchstaben und fur jedes vor-kommende Z eine beliebige Ziffer einsetzt. Wir formalisieren und verallgemeinern dieseKonstruktion.

2.5.2 Definition Sei Σ = {a1, . . . , an} und sei ∆ ein Alphabet. Eine Substitution isteine Funktion f : Σ→ P(∆∗), d. h. f(ai) ist eine Sprache uber ∆, fur 1 ≤ i ≤ n.

Fur w = b1 · · · bm ∈ Σ∗ setzen wir

f(w) := f(b1)f(b2) · · · f(bm)︸ ︷︷ ︸Konkatenation von Sprachen

,

und fur L ⊆ Σ∗ setzen wirf(L) :=

⋃{f(w) | w ∈ L}.

(Im obigen Beispiel ware Σ = {B,Z},∆ = {a, . . . , z, A, . . . , Z, 0, . . . , 9} und f(B) ={a, . . . , z, A, . . . , Z} (eine Sprache!) und f(Z) = {0, . . . , 9}.)

2.5.3 Satz (”Lreg ist abgeschlossen unter Substitution“) Sei f Substitution wie in

2.5.2. Sind f(a1), . . . , f(an) regulare Sprachen und ist L regular, so ist auch f(L) regular.

Beweisidee: Betrachte DFA M mit L = LM und ε-NFA’s Ma mit LMa= f(a), fur a ∈ Σ,

und die entsprechenden graphischen Darstellungen dieser Automaten. Dabei nehmen wiran, dass die ε-NFA’s Ma das Format wie in 2.3.8 haben: ein Anfangszustand und eindavon verschiedener akzeptierender Zustand. Ersetze nun in GM jede Kante (q, q′) mitMarkierung a ∈ Σ

q q’a

durch eine Kopie von Ma, wobei eine ε-Kante von vq zum Startzustand von GMafuhrt

und eine ε-Kante von dem akzeptierenden Zustand von GMazu vq′ . Schematisch:

64

Page 67: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

q’q GMa

M a

ε ε

Der resultierende Graph stellt einen ε-NFA M ′ dar. Man muss sich nur noch uberlegen,dass ein Wort w von M ′ akzeptiert wird genau dann wenn man w = w1 · · ·wr schreibenkann, wo wj ∈ f(aj), 1 ≤ i ≤ r, und a1 · · · ar von M akzeptiert wird. Hierfur greift manwieder auf die Argumentationsweise von Satz 2.3.3, Formel (1.4), zuruck. �

2.5.4 Definition Ist f eine Substitution (siehe 2.5.2) mit |f(a)| = 1 fur alle a ∈ Σ, soheißt f Homomorphismus . (Man schreibt dann f(a) = u anstatt f(a) = {u}.) Ist L eineSprache, f Homomorphismus, so ist naturlich f(L) = {f(b1) · · · f(bm) | b1 · · · bm ∈ L}. Istweiter L′ ⊆ ∆∗, so kann man das Urbild

f−1(L′) = {w ∈ Σ∗ | f(w) ∈ L′}

betrachten (”inverser Homomorphismus“).

2.5.5 Satz (”Lreg ist abgeschlossen unter Homomorphismen und inversen Ho-

momorphismen“)

Sei f : Σ→ ∆∗ ein Homomorphismus. Dann gilt:

(a) Ist L ⊆ Σ∗ regular, so ist auch f(L) regular.

(b) Ist L′ ⊆ ∆∗ regular, so ist auch f−1(L′) regular.

Beweis (a) ist Spezialfall von 2.5.3. Fur (b) betrachte einen DFA

M ′ = (Q′,∆, q′0, F′, δ′) mit L′ = LM ′ . Wir definieren einen DFA M = (Q,Σ, q0, F, δ) wie

folgt:

Q := Q′, q0 := q′0, F := F ′ , und

δ(q, a) := δ′(q, f(a)) , fur jedes q ∈ Q, a ∈ Σ.

Man zeigt jetzt durch Induktion uber n, dass fur a1 · · · an ∈ Σ∗ gilt:

δ(q0, a1 · · · an) = δ′(q0, f(a1) · · · f(an)).

65

Page 68: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Also:

a1 · · · an ∈ LM ⇔ δ(q0, a1 · · · an) ∈ F⇔ δ′(q0, f(a1) · · · f(an)) ∈ F ′⇔ f(a1) · · · f(an) ∈ L′.

Also ist LM = f−1(L′). �

Man kann Teil (a) dieses Satzes benutzen, um die Nichtregularitat von kompliziertenSprachen (wie z. B. die syntaktisch korrekten Pascal-Programme) auf die prototypischerSprachen (wie die Sprache der korrekt geklammerten (-)-Ausdrucke) zuruckzufuhren, in-dem man einen Homomorphismus benutzt, der alle uninteressanten Buchstaben auf εabbildet.

Eine weitere ganz einfache Operation ist die Spiegelung von Wortern und Sprachen.

2.5.6 Definition Σ sei ein Alphabet.

(a) Zu w = a1 · · · an ∈ Σ∗, n ≥ 0, sei wR := an · · · a1.

(b) Zu L ⊆ Σ∗ sei LR := {wR | w ∈ L}.

(Beispiel: Ist L = {anbncn | n ≥ 0}, so ist LR = {cnbnan | n ≥ 0}.

2.5.7 Satz Ist L regular, so ist auch LR regular.

Beweis Wir skizzieren eine von mehreren Beweismoglichkeiten. Sei L ⊆ Σ∗ regular. SeiM = (Q,Σ, q0, F, δ) ein NFA mit L = LM . Betrachte GM . Wir fugen einen neuen Knotenvqf

hinzu, mit Kanten von vq nach vqffur alle q ∈ F , die alle mit ε markiert werden. Der

einzige akzeptierende Knoten im neuen Graphen GM ′ wird vqf. Offenbar ist M ′ ein ε-NFA

mit L = LM ′ , derart dass M genau einen akzeptierenden Zustand hat, der zudem von q0verschieden ist. Aus GM ′ bilde GM ′′ durch Umdrehen aller Kanten (ohne Veranderung derMarkierung); vq0

wird akzeptierend, vqfwird Startknoten. Es ist klar, dass LM ′′ = LR

M ,da in GM ′ genau dann ein Weg von vq0

nach vqfexistiert, der mit a1, a2, . . . , an markiert

ist, wenn in GM ′′ ein Weg von vqfnach vq0

existiert, der mit an, an−1, . . . , a1 markiert ist.�

Beispiel:

Start

00

1

1

0,1MG :

LM = L (0+(0 + 1)∗ + 1)

66

Page 69: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Start

00

1

1

0,1

ε

ε

M’G :

LM ′ = LM

0

1

1

0,1

ε

ε

0

Start

M"G :

LM ′′ = LRM = L (1 + (0 + 1)∗0+)

(Alternativ kann man durch Induktion uber die Definition regularer Ausdrucke beweisen,dass zu jedem regularen Ausdruck r ein rR existiert mit L(r)R = L(rR). Die Details mogeman sich als Ubung uberlegen.)

67

Page 70: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

2.6 Entscheidbarkeitsfragen fur regulare Sprachen

Hier fragen wir nach Verfahren, die anhand einer endlichen Sprachbeschreibung entschei-den, ob die entsprechende Sprache eine gewisse Eigenschaft hat oder nicht. Dabei bietendie regularen Sprachen im Bezug auf Entscheidbarkeitsfragen eine

”heile Welt“ an. Ins-

besondere sind die folgenden Probleme fur regulare Sprachen entscheidbar:

(a) Ist L = ∅?

(b) Ist |L| <∞?

(c) Ist L = Σ∗?

(d) Ist L1 ⊆ L2?

(e) Ist L1 = L2?

(f) Ist ε ∈ L?

(g) Ist w ∈ L? (Fur gegebenes w ∈ Σ∗.)

Naturlich muss man vorher sagen, in welcher Form die regularen Sprachen gegeben sind.Sprachen sind ja i. a. unendlich, also als Eingaben fur Algorithmen ungeeignet. Wir ver-wenden hier die bislang entwickelten Beschreibungsformen fur regulare Sprachen. Wirwerden also annehmen, dass die regularen Sprachen durch einen DFA, einen NFA, einenε-NFA oder einen regularen Ausdruck gegeben sind. Wir betrachten zunachst Automaten.

2.6.1 Satz Es gibt effiziente (d. h. Polynomialzeit-)Algorithmen, die folgende Pro-bleme losen: Zu einem vorgelegtem Automaten M = (Q, Σ, q0, F , δ) entscheide, ob(a) LM = ∅ (fur NFA oder ε-NFA M),(b) |LM | =∞ (fur NFA oder ε-NFA M),(c) LM = Σ∗ (fur DFA M).

Zu DFA’s M1 und M2 entscheide ob(d) LM1

⊆ LM2,

(e) LM1= LM2

.

Zu ε-NFA M entscheide ob(f) ε ∈ LM ,(g) w ∈ LM , fur gegebenes w ∈ Σ∗.

Beweis Wir formulieren die Algorithmen alle in der graphentheoretischen Sprache, stel-len uns also vor, dass ein Automat M als Graph GM gegeben ist. Beachte, dass dieTabelle (das |Q| × |Σ|-Array mit Eintragen aus P(Q) [fur (ε-)NFA’s] bzw. aus Q [furDFA’s]) fur δ im wesentlichen in seinen Zeilen die Adjazenzlisten fur GM enthalt, ein-schließlich der Kantenmarkierungen. Es ist fair, als Eingabegroße fur diesen Graphen

68

Page 71: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

|M | := |Q| + Σq∈Q,a∈Σ|δ(q, a)| anzusetzen, das ist die Summe aus Knoten- und Kanten-zahl in GM .

(a) Offenbar ist LM 6= ∅ genau dann, wenn es in GM uberhaupt einen Weg (vp0, . . . , vpm

)(mit m ≥ 0) von vq0

= vp0zu einem vpm

mit pm ∈ F gibt (ohne auf die Kantenmar-kierungen zu achten). Dies lasst sich z. B. durch Breitensuche in GM feststellen. DerZeitbedarf hierfur ist O(|M |).(b) Behauptung: |LM | =∞ gilt genau dann wenn es in GM einen Weg von vq0

zu einemvq mit q ∈ F gibt, der einen Kreis enthalt.[Beweis hiervon:

”⇒: Ist |LM | =∞, so existiert x ∈ LM mit m = |x| ≥ |Q|. Die Existenz

eines akzeptierenden Weges (p0, . . . , pm), der einen Knoten zweimal benutzt, also einenKreis enthalt, folgt wie im Beweis von Satz 2.4.1 (Pumping-Lemma).

”⇐“: Gibt es einen Weg von vq0

zu einem vq mit q ∈ F , der einen Kreis enthalt, sobesitzt nach dem Beweis von Satz 2.4.1 (Pumping-Lemma) L eine unendliche Teilmengeder Form {uviw | i ∈ N}, mit |v| ≥ 1, also ist L unendlich.]

Algorithmisch gehen wir so vor, dass wir zunachst die Menge V1 der Knoten ermitteln, vondenen aus ein Knoten vq mit q ∈ F erreichbar ist. Die anderen Knoten konnen naturlichfur das Akzeptieren von Wortern keine Rolle spielen; man kann sie weglassen. Dann prufenwir, ob es in Q1 einen bei vq0

beginnenden Weg mit einem Kreis gibt.

Algorithmus

1. Konstruiere die Umkehrung von GM :

GM :=({vq | q ∈ Q}, {(vq, vq′) | (vq′ , vq) Kante in GM}

).

2. Mittels Breitensuche in←

GM , startend von {vq | q ∈ F}, ermittle die Menge

V1 = {vq′ | ∃ Weg in←

GM von vq nach vq′ fur ein q ∈ F}( = {vq′ | ∃ Weg in GM von vq′ nach vq fur ein q ∈ F} ).

3. Bilde GM,1 := Einschrankung von GM auf V1.Falls Vq0

6∈ V ′, stoppe mit der Antwort”LM ist endlich“.

4. Tiefensuche in GM,1, vom Knoten vq0startend, mit dem Test, ob es jemals

Ruckwartskanten zu”aktiven“ Knoten gibt, erlaubt es festzustellen, ob von vq0

ausein gerichteter Kreis in G′ erreichbar ist. Falls dies so ist, wird

”∞“ ausgegeben,

sonst”endlich“.

Die”Behauptung“ besagt, dass LM unendlich ist genau dann wenn von vq0

aus ein gerich-teter Kreis in GM,1 erreichbar ist. Also ist der Algorithmus korrekt. Die Laufzeit ist durch

den Aufwand fur die Tiefensuche in←

GM bzw. GM1beschrankt; dies ist immer O(|M |).

(Fur Details zur Tiefensuche siehe die Vorlesung”Algorithmen und Datenstrukturen“

69

Page 72: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

oder auch das Buch von Cormen/Leiserson/Rivest/Stein, S. 540ff., insbesondere Lemma22.11.)

Bemerkung: Wenn M ε-Kanten hat, sucht man nach von vq0erreichbaren Kreisen in

GM,1, die mindestens eine mit einem Buchstaben a, also nicht mit ε, beschriftete Kantehaben. Ahnlichen Aufwand hat aber der Ansatz,M in einem NFA M ′ umzuwandeln (sieheSatz 2.3.7) und dann den beschriebenen Algorithmus auf M ′ anzuwenden. Hierbei erhohtsich eventuell die Kantenzahl, aber hochstens auf |Q|2. Die Laufzeit des Algorithmus istdamit O(|Q|2).(c) Da M ein DFA ist, genugt es zu testen, ob alle Wege von vq0

aus zu einem vq mitq ∈ F fuhren. Hierzu benutzt man eine einfache Breitensuche in gM , Laufzeit O(|M |).Bemerkung: Wenn M ein (ε-)NFA ist, genugt es nicht mehr, die Wege von vq0

aus zutesten. (Man konstruiere einen NFA, der nur akzeptierende Zustande hat und dennochnicht ganz Σ∗ akzeptiert.) Hier muss manM zuerst in einen DFA umwandeln. Die Laufzeitkann erheblich sein, da durch die Potenzmengenkonstruktion (Satz 2.2.8) die Zahl derZustande stark ansteigen kann, siehe Beispiel 2.2.10.

(d) Zu DFA’s M1,M2 bilde M ′2 mit LM ′

2= LM2

. Mit der Kreuzproduktkonstruktion

(Satz 2.1.10(c)) bilde M ′ mit LM ′ = LM1∩ LM ′

2= LM1

∩ LM2= LM1

− LM2. Teste (mit

dem Verfahren aus (a)) ob LM ′ = ∅.Die Laufzeit dieses Algorithmus ist linear in der Große von GM ′ , das ist O(|Q1| · |Q2| · |Σ|).(e) Wie in (d) baue mit der Kreuzproduktkonstruktion einen DFA M ′ fur die SpracheLM1⊕ LM2

= (LM1− LM2

) ∪ (LM2− LM1

). Mit dem Verfahren aus (a) teste, ob LM ′ = ∅.Bemerkung: (Fur (d) und (e).) Wenn M1,M2 (ε-)NFA’s sind, muss man sie zunachst inDFA’s umwandeln, wieder um den Preis einer eventuellen großen Erhohung der Zahl derZustande.

(f) Bei NFA M teste, ob der Startzustand akzeptierend ist. Bei ε-NFA M teste, ob es inGM einen ε-Weg (der Lange m ≥ 0) von vq0

zu einem vq mit q ∈ F gibt.

(g) Falls M DFA ist, lasst man (in Zeit O(|w|)) den Automaten M auf w ablaufen. FurNFA’s M benutzt man den Algorithmus aus Satz 2.2.6. Einen ε-NFA M wandelt manzunachst in einen NFA um und verwendet dann diesen Algorithmus.

2.6.2 Satz Es gibt Polynomialzeit-Algorithmen, die die folgenden Probleme losen: Zueinem vorgelegtem regularen Ausdruck r entscheide, ob

(a) L(r) = ∅,(b) |L(r)| =∞,(f) ε ∈ LM ,(g) w ∈ LM , fur gegebenes w ∈ Σ∗.

Fur die folgenden Probleme gibt es Algorithmen, die jedoch auch exponentielle Laufzeithaben konnen: Zu regularen Ausdrucken r bzw. r1 und r2 entscheide ob

70

Page 73: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

(c) L(r) = Σ∗,(d) L(r1) ⊆ L(r2),(e) L(r1) = L(r2). (d. h. r1 ∼ r2).

Beweis Bei (a), (b), (f) und (g) wandelt man mit der Methode von Satz 2.3.8 denregularen Ausdruck r in einen aquivalenten NFA Mr um und wendet dann den entspre-chenden Algorithmus aus Satz 2.6.1 an. Nach Bemerkung 2.3.9 ist M nicht viel großer alsr. Bei (c), (d), (e) hingegen muss man aus r bzw. r1 und r2 zuerst einen aquivalenten DFAkonstruieren (Potenzmengenkonstruktion, Satz 2.2.8), um die Algorithmen aus Satz 2.6.1anwenden zu konnen. Dies kann zu DFA’s fuhren, die exponentiell großer sind als derregulare Ausdruck, von dem man ausgegangen ist. �

Bemerkung: Alternativ hierzu kann man auch durch eine konsequente Analyse derStruktur von r feststellen, ob L(r) leer ist oder unendlich ist oder ob L(r) = {ε} ist.Dies ist (eventuell) Gegenstand einer Ubungsaufgabe.

2.7 Die Minimierung deterministischer endlicher Au-

tomaten

In diesem Abschnitt kehren wir zu den DFA’s zuruck. Wir suchen”effizienteste“ DFA’s zu

einer vorgegebenen regularen Sprache L. Was soll das sein? Schließlich macht jeder DFAauf einem Eingabewort der Lange n genau n Schritte. Ein vernunftiges Komplexitatsmaßfur einen DFA M ist aber seine

”Große“, also die Zahl |Q| der Zustande. Wir suchen also

nach DFA’s mit moglichst wenigen Zustanden fur eine gegebene Sprache.

2.7.1 Unerreichbare Zustande

Betrachte den NFA M = (Q,Σ, q0, F, δ), der in Abb. 2.23 dargestellt ist.

bb,

Start 0

1

2

3

a

ab

a

Abbildung 2.23: Ein NFA fur L((a + b)∗(ab + ba))

Der NFA M hat vier Zustande. Die zugehorige Sprache umfasst alle Worter uber {a, b},die mit

”ab“ oder

”ba“ enden. Wenn wir aufM die Potenzmengenkonstruktion (Satz 2.2.8)

71

Page 74: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

anwenden, erhalten wir einen DFA M ′ = (Q′,Σ, q′0, F′, δ′) mit 16 Zustanden. Ein Teil von

M ′ ist in Abb. 2.24 dargestellt. Bei der Darstellung der Elemente von Q′ im Bild lassenwir die Mengenklammern weg, schreiben also z. B. 013 fur {0, 1, 3}.

123

03

/0

0

01

02

023

013

0123012Start

a

a

b a

bb

ab

a

b

a

b

a

b

b

a

Weitere unerreichbare Zustände (Kanten weggelassen):

1 2 3 12 13 23

Abbildung 2.24: Ein DFA, erhalten mit der Potenzmengenkonstruktion (Teil)

Wegen der mit a, b beschrifteten Schleife an Zustand q0 = 0 in M gilt fur jeden vomStartzustand q′0 = {0} in M ′ aus erreichbaren Zustand B, dass 0 ∈ B ist. Die achtZustande, die 0 nicht enthalten (in Abb. 2.24 in der letzten Reihe aufgelistet), spielen alsofur kein Eingabewort eine Rolle.

Es gibt aber auch Zustande B von M ′, die 0 enthalten und trotzdem unerreichbar sind,namlich die Zustande {0, 3}, {0, 1, 2} und {0, 1, 2, 3}.Man vergleiche auch nochmals Beispiel 2.2.9 und das dortige Bild. Dort sind genau dieZustande B ∈ Q′ mit 0 /∈ B nicht von q0 aus erreichbar. Der Zustand {1, 2, 3} in demdortigen DFA ist ein Beispiel dafur, dass auch solche Zustande unerreichbar sein konnen,in die Kanten hineinfuhren.

2.7.1 Definition Sei M = (Q,Σ, q0, F, δ) ein DFA. Ein Zustand q ∈ Q heißt uner-reichbar (manchmal auch: uberflussig), wenn δ(q0, w) 6= q fur alle w ∈ Σ∗ (d. h.(!)wenn es in GM keinen Weg von vq0

nach vq gibt). Ein Zustand q ∈ Q heißt erreichbar,wenn δ(q0, w) = q fur ein w ∈ Σ∗.

Wieso konnen uberhaupt unerreichbare Zustande auftreten?”Von Hand“ konstruierte

DFA’s werden naturlich keine solchen Zustande enthalten. Oft werden aber DFA’s vonAlgorithmen oder Programmen erzeugt, die dann durchaus unerreichbare Zustande ent-halten konnen. Nicht nur bei der Potenzmengenkonstruktion, sondern auch bei der Kreuz-

72

Page 75: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

produktkonstruktion (Satz 2.1.10(c)) kann dies auftreten. Man uberlege sich zum Beispiel,dass das Kreuzprodukt eines DFA M mit sich selbst unerreichbare Zustande hat, wennM nicht vollig trivial ist.

Es gibt einen ganz einfachen Algorithmus, der zu einem DFA M = (Q,Σ, q0, F, δ) dieMenge U der unerreichbaren Zustande identifiziert. Es ist ziemlich naturlich, dass mandafur die Menge der erreichbaren Zustande ermittelt; die unerreichbaren Zustande sinddann der Rest von Q. Man fuhrt einfach in GM eine Breitensuche vom Startknoten vq0

aus durch; dabei werden genau die erreichbaren Zustande entdeckt. Wenn man geeigneteDatenstrukturen benutzt, ist die Laufzeit O(|Q| · |Σ|).Fur den DFA M ′ aus Abb. 2.24 ergibt sich {0, 01, 02, 023, 013} als die Menge der erreich-baren Zustande, unerreichbar sind die anderen 11 Zustande von M ′.

Uberflussige Zustande kann man weglassen, ohne die zu einem DFA gehorende Sprachezu verandern. Dies wird im Folgenden genau begrundet.

2.7.2 Bemerkung Zu einem DFAM = (Q,Σ, q0, F, δ) definieren wirMe = (Qe,Σ, q0, Fe,δe) durch:

Qe := {q ∈ Q | q erreichbar },Fe := Qe ∩ F,δe := δ ↾ Qe × Σ ,

(Einschrankung von δ auf Qe × Σ) .

Wir lassen also aus GM alle unerreichbaren Knoten weg, sowie die Kanten, die in solcheKnoten hineinfuhren oder aus solchen Knoten herausfuhren.

Wir behaupten nun: Me ist DFA ohne unerreichbare Zustande, und LM = LMe.

Beweis : Nach Definition entspricht Qe genau der Menge der Knoten in GM , die von vq0

aus auf einem Weg in GM erreichbar sind. Damit haben GM und GMegenau dieselben

von vq0aus startenden Wege, mit denselben Kantenmarkierungen. Die akzeptierenden

Zustande innerhalb von Qe sind ebenfalls identisch. Daraus folgt LM = LMe. Weiterhin

sind alle in GM von vq0aus erreichbaren Knoten auch in GMe

erreichbar, also hat GMe

keine unerreichbaren Zustande. �

Beispielsweise ergibt sich aus dem DFA M ′ aus Abb. 2.24 durch Weglassen der uner-reichbaren Zustande der in Abb. 2.25 angegebene DFA, in dem alle Zustande erreichbarsind.

73

Page 76: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

a

0

01

02

023

013

Start

a

a

bb

a

b

a

b

b

Abbildung 2.25: Ein DFA ohne unerreichbare Zustande

2.7.2 Aquivalente und nicht-aquivalente Zustande

Dass ein DFA keine unerreichbaren Zustande enthalt, heißt noch nicht, dass er schon dieminimale Zahl von Zustanden fur die akzeptierte Sprache hat.

2.7.3 Beispiel Sei M = ({0,1,2,3,4}, {a, b},0, {1,2}, δ) durch den in Abb. 2.26 dar-gestellten Graphen gegeben.

a

a

a

b

b

bb

b

a

a

Start 0

1

3

42

Abbildung 2.26: Ein DFA mit aquivalenten Zustanden

(Zur Ubung moge man sich uberlegen, welche Sprache LM zu diesem DFA gehort.)

Wir beobachten, durch Inspektion, dass die Zustande 1 und 2 praktisch”dasselbe tun“:

Wenn wir in 1 starten und eine Buchstabenfolge w = b1 · · · bm lesen, so bringt uns jedesgelesene a in den Zustand 1, und jedes b, das einem a folgt, in Zustand 3. Das erste Paaraufeinanderfolgender b’s fuhrt uns in Zustand 0. Wenn wir in 2 starten, spielt sich genaudasselbe ab, nur ubernimmt 4 die Rolle von 3 und 2 die Rolle von 1. Obendrein sind 1und 2 akzeptierend und 3 und 4 verwerfend. Man sieht, dass M beim Lesen eines Wortes

74

Page 77: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

w keinen Unterschied zwischen Start in Zustand 1 und Start in Zustand 2 feststellen kann,solange wir nur fragen, ob wir in einem akzeptierenden oder verwerfenden Zustand sind.

Technisch ausgedruckt: Fur jedes w ∈ {a, b}∗ gilt: δ(1, w) ∈ F ⇔ δ(2, w) ∈ F . Man kannnun auf den Zustand 2 verzichten und alle Kanten, die auf v2 zeigen, auf v1 ”

umhangen“,ohne die Menge der akzeptierten Worter zu verandern:

b

a

ab

b

b ,ba,ba

a

ab

a

1

3

4Start

1

3

0Start 0

Abbildung 2.27: DFA aus Abb. 2.26 nach Entfernen des (zu 1 aquivalenten) Zustandes 2und nach Streichen des unerreichbaren Zustandes 4

Nun ist Zustand 4 unerreichbar geworden, und mit 2.7.2 erhalten wir durch Weglassendieses Zustandes einen Automaten mit drei Zustanden fur LM (der sich nicht weiterverkleinern lasst).

”Aquivalenz“ von Zustanden liefert also einen Ansatz zur Verkleinerung von DFA’s. Wir

entwickeln nun zunachst eine Methode, um fur jedes Zustandspaar festzustellen, ob sie

”aquivalent“ sind oder nicht. Zunachst mussen wir genau formulieren, was wir unter Aqui-

valenz von Zustanden verstehen wollen.

Erinnerung: Aquivalenzrelationen und Partitionen.(Siehe Vorlesung

”Diskrete Strukturen“.)

Sei X eine nichtleere Menge. Eine zweistellige Relation ∼⊆ X ×X (wir schreiben x ∼ yfur (x, y) ∈∼) heißt eine Aquivalenzrelation, wenn gilt:

(i) Reflexivitat : ∀x ∈ X : x ∼ x.

(ii) Symmetrie : ∀x, y ∈ X : x ∼ y ⇒ y ∼ x.

(iii) Transitivitat : ∀x, y, z ∈ X : x ∼ y ∧ y ∼ z ⇒ x ∼ z.

Ist ∼ eine Aquivalenzrelation, so wird dadurch X in”Aquivalenzklassen“ Xi, i ∈ I

zerlegt.3 Das heißt: Die Mengen Xi, i ∈ I, sind paarweise disjunkt und X =⋃

i∈I Xi.(Man sagt: Xi, i ∈ I, bilden eine Partition (

”Aufteilung“) von X.) Und weiter: x ∼ y

gilt genau dann wenn es ein i mit x, y ∈ Xi gibt.

Fur die Aquivalenzklasse von x schreibt man [x] oder [x]∼. Es gilt: x ∼ y ⇔ [x] = [y] undx 6∼ y ⇒ [x] ∩ [y] = ∅.

3I ist eine passende Indexmenge.

75

Page 78: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Beispiel : X = {0, 1, 2, 3, 4, 5, 6, 7, 8, 10}.Mit x ∼ y :⇔ 3 teilt (x− y) ergeben sich die folgenden Klassen:

[0] = [3] = [6] = [9] = {0, 3, 6, 9},[1] = [4] = [7] = [10] = {1, 4, 7, 10},

[2] = [5] = [8] = {2, 5, 8}.

10

0 1 2

3 4 5

6 7 8

9

Abbildung 2.28: Eine Partition, entsprechend einer Aquivalenzrelation

Man lernt in der Mathematik, dass eine Aquivalenzrelation auf X gleichbedeutend miteiner Partition von X ist: Ist eine Aquivalenzrelation ∼ vorgegeben, bilden die Aquiva-lenzklassen eine Partition von X. Ist eine Partition {Xi | i ∈ I} von X gegeben, erhaltman eine Aquivalenzrelation durch die Festsetzung: x ∼ y falls x, y ∈ Xi fur ein i ∈ I.Wieso benutzt man zwei verschiedene Sprechweisen, wenn es doch eigentlich um dieselbeStruktur geht? Normalerweise kann man sich eine Einteilung von X in disjunkte Klas-sen leichter vorstellen; Aquivalenzrelationen auf X sind dagegen oft beweistechnisch undalgorithmentechnisch leichter zu handhaben – so auch in unserem Fall.

2.7.4 Definition Sei M = (Q,Σ, q0, F, δ) ein DFA. Fur p, q ∈ Q definiere: p ∼ q wennfur alle w ∈ Σ∗ gilt: δ(p, w) ∈ F ⇔ δ(q, w) ∈ F .

(Intuitiv gesprochen: Zustande p und q sind aquivalent, wenn M mit seinen Mitteln,namlich δ auf Worter anzuwenden und Zustande darauf zu testen, ob sie in F oder Fliegen, p und q nicht unterscheiden kann.)

Im DFA aus Abb. 2.26 sind die Zustande 1 und 2 aquivalent, wie oben diskutiert. DieZustande 0 und 2 sind nicht aquivalent, weil δ(0, ε) = 0 /∈ F , aber δ(2, ε) = 2 ∈ F .Weiterhin sind 0 und 4 nicht aquivalent, weil δ(0, b) = 2 ∈ F , aber δ(4, b) = 0 /∈ F .(Man suche weitere nichtaquivalente Paare!)

76

Page 79: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

2.7.5 Lemma Die in 2.7.4 definierte Relation ∼ ist eine Aquivalenzrelation auf Q.

Beweis Dass ∼ reflexiv, symmetrisch und transitiv ist, ergibt sich sofort aus den ent-sprechenden Eigenschaften von

”⇔“. �

Nun stellt sich die Frage, wie wir feststellen konnen, ob zwei Zustande p und q aqui-valent sind. Wenn man versucht, direkt Definition 2.7.4 zu benutzen, bemerkt man dieSchwierigkeit, in endlicher Zeit die Bedingung

∀w ∈ Σ∗ : δ(p, w) ∈ F ⇔ δ(q, w) ∈ F

zu testen, die von unendlich vielen w’s spricht.

Wir losen dieses Problem, indem wir zur komplementaren Relation, der Nicht-Aquivalenzubergehen. Wann sind p und q nicht aquivalent? Wir notieren eine Basis-Bedingung:

(∗) Wenn p ∈ F und q ∈ F oder q ∈ F und p ∈ F , dann sind p und q nicht aquivalent.

(Beweis : Das Wort ε erfullt

δ(p, ε) ∈ F ∧ δ(q, ε) /∈ F bzw. δ(q, ε) ∈ F ∧ δ(p, ε) /∈ F,

was der Definition von ∼ widerspricht.)

Weiterhin notieren wir eine Schlussregel, die es erlaubt, Nicht-Aquivalenz von einem Paarp, q auf ein anderes Paar p′, q′ zu ubertragen.

(∗∗) Wenn p 6∼ q und δ(q′, a) = q und δ(p′, a) = p fur ein a ∈ Σ, dann sind p′ und q′ auchnicht aquivalent.

(Beweis : Wenn p 6∼ q, dann heißt das nach Definition 2.7.4, dass es ein Wort w ∈ Σ∗ gibtderart dass einer der Zustande δ(p, w), δ(q, w) in F liegt, der andere nicht. Nun gilt

δ(p′, aw) = δ(p, w) und δ(q′, aw) = δ(q, w) ;

also liegt einer der Zustande δ(p′, aw), δ(q′, aw) in F , der andere nicht. Nach Definiti-on 2.7.4 bedeutet das aber gerade, dass p′ und q′ nicht aquivalent sind.)

Aus Regeln (i) und (ii) erhalten wir einen”Markierungsalgorithmus“ zum Ermitteln von

Paaren nicht-aquivalenter Zustande. Zu Beginn markieren wir Paare p, q, wenn p ∈ Fund q /∈ F oder umgekehrt. Nachher prufen wir fur unmarkierte Paare p′, q′, ob es eina ∈ Σ gibt derart dass q = δ(q′, a) und p = δ(p′, a) ein markiertes Paar bilden. In diesemFall wird auch p′, q′ markiert. Dieser Schritt wird so lange iteriert, bis er nicht mehrdurchfuhrbar ist. Etwas formaler gefasst ergibt sich folgendes Verfahren.4

4Mit [Q]2 bezeichnen wir die Menge {{p, q} | p, q ∈ Q, p 6= q} der ungeordneten Paare verschiedenerElemente von Q.

77

Page 80: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

2.7.6 Algorithmus”NICHT-AQUIVALENZ“

Input: DFA M = (Q,Σ, q0, F, δ)

var H: subset of [Q]2 (Halde oder Warteschlange:die markierten, noch nicht bearbeiteten Zustandspaare)

N: subset of [Q]2 (die als nicht-aquivalent markierten Zustandspaare)

begin

N := H := {{p, q} | p ∈ F, q /∈ F} ;

while H6= ∅ do

entnehme (beliebiges) Paar {p, q} aus H ;

for all a ∈ Σ do

for all p′, q′ ∈ Q do

if {δ(p′, a), δ(q′, a)} = {p, q} und {p′, q′} 6∈ N then

N := N∪{{p′, q′}} ;

H := H∪{{p′, q′}} ;

”bearbeite {p, q}“

return N ;

end.

Die Ausgabe ist die am Ende in N gespeicherte Menge von Paaren, die wir N∗ nennen.

Wir wenden Algorithmus 2.7.6 auf den DFA aus Abb. 2.26 an. Dies fuhrt zu folgenderBerechnung.

Runde Paar neu in N H

0 − {0, 1}, {0, 2}, {1, 3}, {2, 3}, {1, 4}, {2, 4} {0, 1}, {0, 2}, {1, 3}, {2, 3}, {1, 4}, {2, 4}1 {0, 1} – {0, 2}, {1, 3}, {2, 3}, {1, 4}, {2, 4}2 {0, 2} {0, 4}, {0, 3} {1, 3}, {2, 3}, {1, 4}, {2, 4}, {0, 4}, {0, 3}3 {1, 3} – {2, 3}, {1, 4}, {2, 4}, {0, 4}, {0, 3}4 {2, 3} – {1, 4}, {2, 4}, {0, 4}, {0, 3}5 {1, 4} – {2, 4}, {0, 4}, {0, 3}6 {2, 4} – {0, 4}, {0, 3}7 {0, 4} – {0, 3}8 {0, 3} – ∅

Der folgende Satz besagt, dass der Markierungsalgorithmus immer die nichtaquivalentenPaare liefert, so dass man aus seinem Ergebnis auch die aquivalenten Paare und damitauch die Aquivalenzklassen des DFA M ablesen kann.

2.7.7 Satz Wenn Algorithmus 2.7.6 auf einen DFA M = (Q,Σ, q0, F, δ) angewendetwird, dann werden genau die Paare {p, q} mit p 6∼M q markiert. (Die Ausgabemenge N∗

enthalt genau die Paare aus nicht-aquivalenten Zustanden.)

78

Page 81: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Beweis : Wir mussen zeigen, dass ein Paar {p, q} genau dann markiert wird, wenn p undq nicht aquivalent sind.

”⇒“: Einen Durchlauf durch die while-Schleife nennen wir eine

”Runde“. Wir zeigen

durch Induktion uber die Rundennummer, dass jedes markierte Paar {p, q} aus nichtaqui-valenten Zustanden besteht.

I.A.: Wenn {p, q} in der Initialisierungsphase markiert wird, dann gilt p ∈ F ⇔ q /∈ F .Nach Regel (∗) (nach Lemma 2.7.5) sind p, q nicht aquivalent.

Induktionsannahme: Alle bis zur Runde r − 1 markierten Zustandspaare {p, q} sindnichtaquivalent.

Induktionsschritt: Wenn {p′, q′} in Runde r ≥ 1 markiert wird, dann gibt es (nach demAlgorithmus) ein Paar {p, q}, das in einer fruheren Runde markiert wurde, und einenBuchstaben a ∈ Σ mit δ(p′, a) = p und δ(q′, a) = q. Nach I.V. gilt p 6∼ q. Nach Nach Regel(∗∗) (nach Lemma 2.7.5) sind p′, q′ nicht aquivalent. Damit ist die Induktionsbehauptunggezeigt.

”⇐“: Sei p 6∼ q, d. h., es gibt ein Wort w = b1 · · · bm mit δ(p, w) ∈ F ⇔ δ(q, w) /∈ F .

Wir definieren wi = b1 · · · bi, fur 0 ≤ i ≤ m, und zeigen die folgende Behauptung:

(2.5) δ(p, wi) 6∼ δ(q, wi) , fur 0 ≤ i ≤ m.

Die Behauptung wird durch Induktion uber i = m,m − 1, . . . , 0 bewiesen (man beachtedie etwas ungewohnliche Reihenfolge).

I.A.: δ(p, wm) = δ(p, w) und δ(q, wm) = δ(q, w). Von diesen Zustanden ist einer in F , derandere nicht, also sind sie nicht aquivalent.

I.Vor.: Sei i ≥ 1 mit δ(p, wi) 6∼ δ(q, wi).

I.Schritt: δ(p, wi) = δ(δ(p, wi−1), bi) und δ(q, wi) = δ(δ(q, wi−1), bi). Nach I.V. sindδ(p, wi) und δ(q, wi) nicht aquivalent, daraus folgt mit Regel (∗∗) (nach Lemma 2.7.5),dass δ(p, wi−1) und δ(q, wi−1) nicht aquivalent sind.

Nach der Behauptung fur i = 0 sind δ(p, w0) = δ(p, ε) = p und δ(q, w0) = δ(q, ε) = qnicht aquivalent, was zu zeigen war. �

Wir beschreiben noch eine ubersichtlichere Darstellungsweise fur den Markierungsalgo-rithmus fur die nichtaquivalenten Zustande, die fur die Durchfuhrung per Hand geeignetist. Man benutzt eine dreieckige Tabelle mit 1

2|Q|(|Q|−1) Platzen, in der es fur jedes (unge-

ordnete) Paar {p, q} von verschiedenen Zustanden eine Position gibt. Zu Beginn markiertman die Positionen der Paare {p, q} mit p ∈ F und q /∈ F und notiert, dass alle dieseMarkierungen noch nicht bearbeitet sind. Dann iteriert man folgenden Schritt: Wahleeine noch nicht bearbeitete Markierung, z. B. fur das Paar {p, q}. Fur jedes unmarkiertePaar {p′, q′} derart, dass es einen Buchstaben a gibt mit δ(q′, a) = q und δ(p′, a) = p,markiere {p′, q′} und notiere, dass {p′, q′} noch nicht bearbeitet ist.

Beispiel : Fur den DFA aus Abb. 2.26 benotigen wir eine Tabelle der folgenden Form.

79

Page 82: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

1

2

3

4

0 1 2 3

Wir markieren die Paare {p, q} mit p ∈ F und q /∈ F mit (willkurlich angeordneten)Nummern:

1 1

2 2

3 3 4

4 5 6

0 1 2 3

Nun werden die markierten Paare, z. B. in der Reihenfolge ihrer Nummern, durchmustert,und gepruft, ob sie zu neuen Markierungen fuhren. Bei Paar {0, 1} ist das nicht der Fall.Bei Paar {0, 2} sehen wir, dass δ(4, b) = 0 und δ(0, b) = 2. Daher wird nun Paar {0, 4}markiert. Weiter ist δ(3, b) = 0 und δ(0, b) = 2, und auch Paar {0, 3} wird markiert. Beibearbeiteten Paaren kann man z. B. die Markierung durchstreichen; sie werden nie mehrangesehen. Dies liefert folgendes Bild:

1 6 12 6 23 7 3 4

4 8 5 6

0 1 2 3

Abarbeiten der weiteren markierten Paare liefert nichts Neues mehr; wir erhalten alsendgultiges Resultat folgendes Bild:

1 6 12 6 23 6 7 6 3 6 44 6 8 6 5 6 6

0 1 2 3

In der Tabelle bleiben eventuell Felder frei. Diese entsprechen genau den unmarkiertenPaaren {p, q}, also den Paaren aquivalenter Zustande. Aus diesen Paaren lassen sich dieAquivalenzklassen leicht ablesen.

80

Page 83: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Wenn man den Algorithmus von Hand durchfuhrt, braucht man die Tabellenplatze nichtmit Nummern zu versehen, sondern es reicht, sie zu markieren, z. B. die entdeckten, abernoch nicht bearbeiteten Paare, also die Elemente von N∩ H, mit einem Strich

”/“ und die

bearbeiteten Paare (N− H) mit einem Kreuz”ד.

Wir betrachten noch ein weiteres, umfangreicheres Beispiel.

2.7.8 Beispiel Man betrachte den folgenden DFA M = (Q,Σ, q0, F, δ) mitQ = {0, 1, . . . , 8}, Σ = {a, b}, q0 = 0, F = {0, 1, 4, 5, 6, 8}:

Start

b

b b

b

b

b

b b b

a

a

a

a a

a a

aa0 1 2

3 4 5

6 7 8

Wir uberlegen kurz, welche Sprache dieser DFA erkennt. Mit dem Lesen eines”a“ ruckt

man zyklisch eine Spalte weiter, mit dem Lesen eines”b“ zyklisch eine Zeile. Akzeptiert

werden die Worter w, fur die |w|a ≡ |w|b mod 3 oder |w|a ≡ |w|b + 1 mod 3.

(Dieser DFA ergibt sich aus einer Variante der Kreuzproduktkonstruktion (vgl. 2.1.10(c)),angewendet auf zwei DFA’s zum Zahlen der a’s bzw. b’s modulo 3.)

Wir wenden den Markierungsalgorithmus auf diesen DFA an. Nach der Initialisierunghaben wir die folgende Tabelle:

1

2 1 4

3 2 5

4 7 11

5 8 12

6 9 13

7 3 6 15 16 17

8 10 14 18

0 1 2 3 4 5 6 7

81

Page 84: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Nun werden die Markierungen in aufsteigender Reihenfolge abgearbeitet. Zur Ubung sollteman jeden Schritt nachvollziehen.

Nummer Paarerreicht ubera-Kanten von

erreicht uberb-Kanten von

neu markiert

1 {0, 2} {1, 2} {6, 8} 19: {6, 8}2 {0, 3} {2, 5} {0, 6} 20: {0, 6}3 {0, 7} {2, 6} {4, 6} 21: {4, 6}4 {1, 2} {0, 1} {7, 8} 22: {0, 1}5 {1, 3} {0, 5} {0, 7} 23: {0, 5}6 {1, 7} {0, 6} {4, 7} –7 {2, 4} {1, 3} {1, 8} 24: {1, 8}8 {2, 5} {1, 4} {2, 8} 25: {1, 4}9 {2, 6} {1, 8} {3, 8} –10 {2, 8} {1, 7} {5, 8} 26: {5, 8}11 {3, 4} {4, 5} {0, 1} –12 {3, 5} {3, 4} {0, 2} –13 {3, 6} {5, 8} {0, 3} –14 {3, 8} {5, 7} {0, 5} –15 {4, 7} {3, 6} {1, 4} –16 {5, 7} {4, 6} {2, 4} –17 {6, 7} {6, 8} {3, 4} –18 {7, 8} {6, 7} {4, 5} 27: {4, 5}19 {6, 8} {7, 8} {3, 5} –20 {0, 6} {2, 8} {3, 6} –21 {4, 6} {3, 8} {1, 3} –22 {0, 1} {0, 2} {6, 7} –23 {0, 5} {2, 4} {2, 6} –24 {1, 8} {0, 7} {7, 5} –25 {1, 4} {0, 3} {1, 7} –26 {5, 8} {4, 7} {2, 5} –27 {4, 5} {3, 4} {1, 2} –

Tabelle 2.5 zeigt das Ergebnis nach dem Ausfullen. (Wir haben die Markierungsnummernnicht durchgestrichen.)

Die leeren Felder in Tabelle 2.5 geben die Paare nicht-aquivalenter Zustande an. Im Bei-spiel sind dies

{2, 3}, {0, 4}, {1, 5}, {1, 6}, {5, 6}, {2, 7}, {3, 7}, {0, 8}, {4, 8}was den folgenden Aquivalenzklassen entspricht:

{0, 4, 8}, {1, 5, 6}, {2, 3, 7}.(Diese Aquivalenzklassen lassen sich in Fig. 2.26 als Diagonalmengen interpretieren.

82

Page 85: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

1 22

2 1 4

3 2 5

4 25 7 11

5 23 8 12 27

6 20 9 13 21

7 3 6 15 16 17

8 24 10 14 26 19 18

0 1 2 3 4 5 6 7

Tabelle 2.5: Ergebnis des Markierungsalgorithmus

2.7.3 Minimalautomaten

Mit den Ergebnissen des letzten Abschnitts konnen wir die Zustandsmenge Q eines be-liebigen DFA’s in Aquivalenzklassen bezuglich ∼M aufteilen. Wir zeigen nun, dass sichdie Menge dieser Aquivalenzklassen als Zustandsmenge eines DFA fur LM mit minimalerGroße benutzen lasst, wenn man von einem DFA ohne unerreichbare Zustande ausgeht.Diesen neuen DFA (den

”Aquivalenzklassenautomaten“) kann man direkt definieren.

2.7.9 Definition Sei ∼ zu einem DFA M = (Q,Σ, q0, F, δ) wie in 2.7.4 definiert. Nundefiniere einen DFA M = (Q, Σ, q0, F , δ) durch:

Q := {[q] | q ∈ Q} (Menge der Aquivalenzklassen bzgl. ∼) ;

q0 := [q0] ;

F := {[q] | q ∈ F} ;

δ([q], a) := [δ(q, a)], fur [q] ∈ Q, a ∈ Σ.

Fur das Beispiel aus Abb. 2.7.8 hatten wir in Abschnitt 2.7.2 drei Aquivalenzklassenidentifiziert. Damit ergibt sich mit Definition 2.7.9:

Q ={{0, 4, 8}, {1, 5, 6}, {2, 3, 7}

},

Σ = {a, b},q0 = {0, 4, 8},F =

{{0, 4, 8}, {1, 5, 6}

};

die Ubergangsfunktion δ ist durch folgenden Graphen gegeben:

83

Page 86: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Start

a

b

2,3,71,5,60,4,8b b

aa

Man bemerkt, dass in diesem Beispiel kein Konflikt entsteht: Fur jede Klasse [q] ∈ Q ist[q] ⊆ F oder [q] ∩ F = ∅; und es gilt stets q ∼ q′ ⇒ δ(q, a) ∼ δ(q′, a). Im folgenden Satzwird unter anderem gezeigt, dass dies immer so ist.

2.7.10 Satz (Korrektheit der Aquivalenzklassen-Konstruktion) Sei M ein DFA;sei M zu M wie in 2.7.9 definiert. Dann gilt :

(a) Wenn q ∼ q′, dann gilt q ∈ F ⇔ q′ ∈ F .D. h.: fur jedes q ∈ Q ist [q] ⊆ F oder [q] ∩ F = ∅.

(b) δ ist wohldefiniert ;

(c) M ist ein DFA;

(d) LM = LM .

Beweis : (a) Sei q ∼ q′. Nach Def. 2.7.4 gilt q′ = δ(q′, ε) ∈ F genau dann wenn q = δ(q, ε) ∈F .

(b) Wohldefiniertheit bedeutet, dass die Definition von δ, die formal auf einen Re-prasentanten einer Aquivalenzklasse bezogen ist, nur von der Klasse, nicht vom Reprasen-tanten abhangt. Sei dazu a ∈ Σ, q′ ∈ [q] beliebig. Zu zeigen ist: [δ(q, a)] = [δ(q′, a)], d. h.δ(q, a) ∼ δ(q′, a). Tatsachlich gilt fur alle w ∈ Σ∗:

δ(q, aw) ∈ F ⇔ δ(q′, aw) ∈ F,

weil q ∼ q′. Also gilt fur alle w ∈ Σ∗:

δ(δ(q, a), w) ∈ F ⇔ δ(δ(q′, a), w) ∈ F,

was δ(q, a) ∼ δ(q′, a) bedeutet.

(c) Alle formalen Anforderungen an einen DFA sind erfullt:Q ist endlich und nichtleer, Σ ist Alphabet, q0 ∈ Q, F ⊆ Q und δ : Q× Σ→ Q.

(d) Hilfsbehauptung (HB):

δ([q], w) = [δ(q, w)], fur alle q ∈ Q, w ∈ Σ∗.

84

Page 87: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

[Beweis von HB durch Induktion uber n = |w|: Ist w = ε, so gilt δ([q], ε) = [q] = [δ(q, ε)].Im Induktionsschritt ist w = ua fur u ∈ Σ∗, a ∈ Σ. Dann gilt:

δ([q], ua) = δ(δ([q], u), a)I.V.= δ([δ(q, u)], a)

Def.δ= [δ(δ(q, u), a)] = [δ(q, ua)];

dies ist die Induktionsbehauptung.]

Damit haben wir fur beliebige w ∈ Σ∗:

w ∈ LM ⇔ δ(q0, w) ∈ F HB⇔ [δ(q0, w)] ∈ FTeil(a)⇔ δ(q0, w) ∈ F ⇔ w ∈ LM .

Aber ist nun der Aquivalenzklassenautomat endlich minimal? Ja, wie der nachste Satzbelegt. Damit ergibt sich der kleinste DFA fur eine Sprache LM wie folgt: Streiche aus Malle unerreichbaren Zustande (Ergebnis M0) und wende dann auf M0 die Aquivalenzklas-senkonstruktion an (Ergebnis M0).

2.7.11 Satz (Minimalitat) Es sei M = (Q,Σ, q0, F, δ) ein DFA ohne unerreichbareZustande, und M zu M sei wie in 2.7.9 definiert. Weiter sei M ′ = (Q′,Σ, q′0, F

′, δ′) einbeliebiger DFA ohne unerreichbare Zustande, mit LM = LM ′.Dann gibt es eine surjektive Funktion

Φ: Q′ → Q ,

so dass gilt :

(2.6) Φ(δ′(q′, a)) = δ(Φ(q′), a), fur a ∈ Σ und q′ ∈ Q′,

sowie

(2.7) q′ ∈ F ′ ⇔ Φ(q′) ∈ F .

Aus der Surjektivitat von Φ folgt insbesondere, dass |Q′| ≥ |Q|, also dass kein DFA furLM eine geringere Anzahl von Zustanden haben kann als M . Insofern konnen wir M einenMinimalautomaten fur LM nennen.

Die Formeln (2.6) und (2.7) besagen, dass M eine”Vergroberung“ auch von M ′ ist, wobei

die Funktion Φ aquivalente Zustande von M ′ auf denselben Zustand in M abbildet.

Beweis von Satz 2.7.11: Es sei q′ ∈ Q′. Weil jeder Zustand in M ′ erreichbar ist, gibt esein Wort w ∈ Σ∗ derart, dass δ′(q′0, w) = q′ ist. Wir definieren:

Φ(q′) = [δ(q0, w)].

85

Page 88: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Hier gibt es wieder die Frage, ob hierdurch Φ wohldefiniert ist, oder ob die Definitionvon der willkurlichen Wahl von w abhangt. Die folgende Behauptung zeigt, dass hierkein Problem besteht: wenn δ′(q′0, w1) = q′ und δ′(q′0, w2) = q′ gilt, dann ist [δ(q0, w1)] =[δ(q0, w1)].

Behauptung: Wenn δ′(q′0, w1) = q′ und δ′(q′0, w2) = q′, dann ist δ(q0, w1) ∼M δ(q0, w2).

(Beweis der Behauptung: Setze p1 = δ(q0, w1) und p2 = δ(q0, w1). Nun sei w ∈ Σ∗ beliebig.Wir haben:

δ(p1, w) = δ(q0, w1w) und δ(p2, w) = δ(q0, w2w).

Nach Voraussetzung ist δ′(q′0, w1w) = δ′(q′, w) = δ′(q′0, w2w). Das heißt, dass w1w ∈ LM ′ =LM gilt genau dann wenn w2w ∈ LM ′ = LM , in anderen Worten:

δ(p1, w) = δ(q0, w1w) ∈ F genau dann wenn δ(p2, w) = δ(q0, w2w) ∈ F.

Da dies fur jedes beliebige w gilt, ist p1 ∼M p2, wie gewunscht.)

Es sei [q] ein beliebiger Zustand in Q, mit q ∈ Q. Weil M keine unerreichbaren Zustandehat, gibt es ein w mit δ(q0, w) = q. Setze q′ = δ′(q′0, w). Dann gilt:

Φ(q′) = Φ(δ(q′0, w)) = [δ(q0, w)] = [q].

Also ist Φ surjektiv.

Es bleiben die beiden Gleichungen (2.6) und (2.7) zu beweisen, die besagen, dass Φ ein

”Automaten-Homomorphismus“ ist.

Es sei w ein Wort mit δ′(q′0, w) = q′. Dann ist einerseits

Φ(δ′(q′, a)) = Φ(δ′(q′0, wa)) = [δ(q0, wa)]

und andererseits

δ(Φ(q′), a) = δ([δ(q0, w)], a) = [δ(δ(q0, w), a)] = [δ(q0, wa)] .

Das beweist (2.6). Weiterhin gilt

q′ ∈ F ′ ⇔ w ∈ LM ′ = LM = LM ⇔ [Φ(q′)] = [δ(q0, w)] ∈ F .

Anmerkung: Wenn man noch etwas genauer hinsieht, kann man sogar feststellen, dassalle Automaten fur eine regulare Sprache mit der minimalen Zustandszahl

”isomorph“

sind. Im Licht dieser Tatsache ist es gerechtfertigt, den Aquivalenzklassenautomaten Mden Minimalautomaten fur LM zu nennen.

86

Page 89: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Kapitel 3

Grammatiken und dieChomsky-Hierarchie

In den 50er Jahren gab Noam Chomsky (∗1928), ein amerikanischer Linguist, vier Gram-matiktypen als mogliche Modelle fur Grammatiken naturlicher Sprachen an. Die Infor-matiker (und -innen), die sich einerseits mit Formalismen zur Spezifikation kunstlicherSprachen (Programmiersprachen!) und Algorithmen zur Syntaxanalyse in solchen Spra-chen beschaftigten, und andererseits die formalen Sprachen als interessanten Gegenstandmathematischer Untersuchungen ansahen, bemachtigten sich bald Chomskys Definitio-nen, formten um, bewiesen Aquivalenzen zu Sprachklassen, die zu verschiedenen Typenvon Automaten gehoren, und benutzten die Analysen als Basis fur die Konstruktion vonUbersetzern fur Programmiersprachen. Wir wollen in diesem Kapitel diese Grammatik-typen kurz betrachten; wir lassen dabei den Bezug zu den naturlichen Sprachen volligaußer acht und konzentrieren uns auf die Aspekte des Formalismus, die fur Informatik-Anwendungen von Bedeutung sind.1

3.1 Grammatiken

Bisher haben wir Sprachen L spezifiziert durch

• Algorithmen, die w ∈ L von w 6∈ L unterschieden (Automaten)

• regulare Ausdrucke (rekursive Konstruktion von Sprachen).

Grammatiken stellen eine ganz andere Methode dar, Sprachen zu spezifizieren, namlicheinen Kalkul, in dem gemaß gewisser Regeln Worter erzeugt werden (durch einen nicht-deterministischen Erzeugungs- oder Ableitungsprozess); die in diesem Kalkul erzeug-baren Worter bilden dann die Sprache.

1Im Buch”Theoretische Informatik – kurz gefasst“ von U. Schoning ist in Kap. 1 ein

”naturlichspra-

chiges“ Beispiel fur eine formale Grammatik angegeben.

87

Page 90: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Grob gesprochen sehen solche Regelsysteme so aus: Sie bestehen aus einem Alphabet∆, einem

”Startsymbol“ S ∈ ∆, und einer zweistelligen Relation ⇒ uber ∆∗. (α ⇒ α′

wird gelesen als:”α′ ist aus α in einem Schritt ableitbar“. Diese Relation hat nichts mit

logischer Implikation zu tun!) Dann betrachtet man die Iteration∗⇒ von ⇒:

α∗⇒ α′ , falls es eine Folge α0, . . . , αt in ∆∗ gibt mit

α0 = α, αr = α′, und αi−1 ⇒ αi fur 1 ≤ i ≤ t.

(∗⇒ ist die

”reflexive und transitive Hulle“ von ⇒; siehe Beispiel A.2.14 in Anhang A.2.)

Schließlich bezeichnet man{α ∈ ∆∗ | S ∗⇒ α}

als die Menge der im Regelsystem ableitbaren/herleitbaren Worter.

In dieser Allgemeinheit sind Regelsysteme impraktikabel, insbesondere weil ⇒ i. a. eineunendliche Relation ist und man sie daher nicht als endlichen Text schreiben kann. Aucherweist es sich als nutzlich, Hilfszeichen zu haben, die in Zwischenschritten von Ablei-tungen vorkommen durfen, die aber nicht zum Alphabet der letztendlich interessierendenSprache gehoren. Wir verfeinern also unseren Ansatz dadurch, dass wir ⇒ durch einenendlichen Satz

”lokaler Ersetzungsregeln“ spezifizieren und dadurch, dass wir zwei Typen

von Buchstaben verwenden:”Variable“ (das sind die Hilfszeichen) und

”Terminalzei-

chen“ (das sind die Zeichen des”Zielalphabets“). Technisch schreibt man ∆ = V ∪ Σ,

wo V , Σ disjunkte Alphabete sind, S ∈ V ; die interessierende Sprache L ist Sprache uberΣ.

3.1.1 Beispiel (Arithmetische Ausdrucke mit Prioritaten) Wir wollen die Men-ge aller arithmetischen Ausdrucke mit Operatoren +, -, *, /, und mit Klammern ( und )

spezifizieren. Die Operanden sind”Numerale“ (Zahldarstellungen), die nicht weiter spe-

zifiziert werden. Man kann sich vorstellen, dass das genaue Format von Numeralen durcheine regulare Sprache spezifiziert wird, die man dann substituiert.

Als Hilfszeichen benutzen wir 〈term〉, 〈expr〉, 〈factor〉.Die Terminalzeichen, das sind also die Zeichen, aus denen die arithmetischen Ausdruckeaufgebaut sind, sind

+, -, *, /, (, ), num,

wobei num Platzhalter fur ein Numeral, also die Darstellung einer Zahl, ist.

88

Page 91: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Regeln (oder”Produktionen“):

〈factor〉 → num

〈factor〉 → (〈expr〉)〈term〉 → 〈term〉 * 〈factor〉〈term〉 → 〈term〉 / 〈factor〉〈term〉 → 〈factor〉〈expr〉 → 〈expr〉 + 〈term〉〈expr〉 → 〈expr〉 - 〈term〉〈expr〉 → 〈term〉

Begonnen wird mit dem Hilfszeichen S = 〈expr〉. Eine mogliche Folge von Anwendungender Regeln liefert folgendes:

〈expr〉 ⇒ 〈term〉 ⇒ 〈term〉 / 〈factor〉⇒ 〈term〉 / (〈expr〉)⇒ 〈term〉 / (〈expr〉 - 〈term〉)⇒ 〈factor〉 / (〈expr〉 - 〈term〉)⇒ num / (〈expr〉 - 〈term〉)⇒ num / (〈expr〉 + 〈term〉 - 〈term〉)⇒ num / (〈expr〉 + 〈factor〉 - 〈term〉)⇒ num / (〈expr〉 + num - 〈term〉)...

⇒ num / (num + num - num)

Wir sagen, dass wir das resultierende Wort aus Terminalzeichen aus 〈expr〉”abgeleitet“

haben. Bei der Anwendung der Regeln hat man oft eine Auswahl sowohl darin, auf welchesHilfszeichen eine Regel angewendet werden soll als auch darin, welche von mehreren mogli-chen

”rechten Seiten“ eingesetzt werden soll. Der durch ein solches Ersetzungsregelsystem

gegebene Kalkul ist also grundsatzlich nichtdeterministisch (”darf ersetzen“).

Zur Ubung finde man Ableitungen fur die arithmetischen Ausdrucke

(num)+num-num und num*num/num/(num-num).

Nun wenden wir uns der Entwicklung des formalen Rahmens solcher Regelsysteme zu.

3.1.2 Definition Eine Grammatik G ist ein 4-Tupel (V,Σ, S, P ), wobei Σ und Vdisjunkte Alphabete sind, S ∈ V ist und P eine endliche Teilmenge von (V ∪Σ)+×(V ∪Σ)∗

ist.

Die Komponenten der Grammatik werden folgendermaßen bezeichnet:

89

Page 92: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

V : Menge der (syntaktischen)”Variablen“.

(Variable werden bei theoretischen Untersuchungen mit A, B, C, . . ., S, T , . . .bezeichnet, in praktischen Anwendungen mit Wortern wie statement oder expression,oder speziell markierten Strings wie 〈term〉, 〈expr〉, 〈factor〉, usw.)

Σ : Menge der”Terminalzeichen“.

(Die Bezeichnungen fur Terminalzeichen-Alphabete und Buchstaben sind dieselbenwie bei den regularen Sprachen.)

S ∈ V :”Startsymbol“,

”Startvariable“.

P : Menge von”Produktionen“ oder

”Ableitungsregeln“ (l, r), geschrieben l → r, mit

folgendem allgemeinen Format:

l→ r, l ∈ (V ∪ Σ)+ , r ∈ (V ∪ Σ)∗ .

Man liest:”man darf l durch r ersetzen“.

In Beispiel 3.1.1 ist V = {〈expr〉, 〈term〉, 〈factor〉}, Σ = {+, -, *, /, (, ),num}, S = 〈expr〉,und

P = {(〈factor〉,num), (〈factor〉, (〈expr〉)), (〈term〉, 〈term〉 * 〈factor〉),(〈term〉, 〈term〉 / 〈factor〉), (〈term〉, 〈factor〉),(〈expr〉, 〈expr〉 + 〈term〉), (〈expr〉, 〈expr〉 - 〈term〉), (〈expr〉, 〈term〉)}

Der besseren Lesbarkeit halber notiert man die Produktionen nicht als Liste von Paaren,sondern wie in Beispiel 3.1.1 als Tabelle von Eintragen l→ r.

Eine Grammatik G ist ein endlicher Text. Sie spezifiziert einen Kalkul, in dem Worter(uber V ∪Σ) erzeugt werden konnen. Wir beschreiben jetzt, wie dieser Kalkul funktioniert.

3.1.3 Definition Sei G = (V,Σ, S, P ) Grammatik.

(a) (Wir erlauben, inmitten eines Wortes die linke Seite l einer Produktion l→ r durchdie rechte zu ersetzen.)

Wir schreiben ulv ⇒G urv oder kurzer ulv ⇒ urv, falls u, v ∈ (V ∪ Σ)∗ und l → reine Produktion in P ist. (⇒ ist zweistellige Relation uber (V ∪ Σ)∗.)

Sprechweise: urv ist in 1 Schritt aus ulv ableitbar .

(Man nennt ⇒ auch die”Halbgruppenhulle“ von →, weil man → mittels der [asso-

ziativen] Konkatenationsoperation erweitert.)

90

Page 93: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

(b) (Wir erlauben, mehrere solche Schritte nacheinander auszufuhren.)∗⇒ ist die reflexive, transitive Hulle von ⇒.

Das heißt: α∗⇒ α′, falls es α0 = α, α1, . . . , αt = α′ gibt, t ≥ 0, so dass αi−1 ⇒ αi fur

1 ≤ i ≤ t. (Spezialfall t = 0: α∗⇒ α gilt immer.)

Sprechweise: α′ ist aus α (in t Schritten) ableitbar. Wenn man die Schrittanzahl

betonen will, kann man auch αt⇒ α′ schreiben.

(c) Was ist aus S ableitbar?

α ∈ (V ∪ Σ)∗ heißt Satzform von G, falls S∗⇒ α.

Eine Folge S = α0 ⇒ α1 ⇒ · · · ⇒ αt = α, t ≥ 0, heißt Ableitung/Herleitungvon α.

(d) Welche Worter uber Σ sind ableitbar?

L(G) := {w ∈ Σ∗ | S ∗⇒ w}

heißt die von G erzeugte (oder beschriebene) Sprache.

Mit Grammatiken in dieser allgemeinen Form kann man”so ziemlich alles“ machen – wir

werden das gleich prazisieren. Hier nur ein einfaches Beispiel fur eine Grammatik, dieZweierpotenzen in Unardarstellung erzeugt.

3.1.4 Beispiel Typische Satzformen unserer Grammatik sind /ca · · · aXa · · · a$, wobeiX eine der zwei Variablen A,B ist, und /ca · · · aCa · · · a. Die Produktionen sind so angelegt,dass in Ableitungen folgendes vor sich geht.

• Aus dem Startsymbol S wird /cAa$.

• A wandert von links nach rechts und verdoppelt jedes ubersprungene a.

• Wenn A beim $ anstoßt, wird A$ in B$ oder in C umgewandelt. (Im zweiten Fallwird das $-Zeichen

”geschluckt“.)

• B lauft von rechts nach links und wird beim Auftreffen auf /c wieder in A umgewan-delt. (Dann kann A erneut von links nach rechts laufen.)

• C lauft nach links, um sich beim Auftreffen auf das /c-Zeichen in”nichts“ ( ε )

aufzulosen.

Also: V = {S, /c, $, A,B,C}, Σ = {a}, und die Produktionsmenge P enthalt folgendePaare:

91

Page 94: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

(1) S → /cAa$(2) Aaa→ aaAa(3) Aa$→ aaB$(4) aB → Ba(5) /cB → /cA(6) Aa$→ aaC(7) aC → Ca(8) /cC → ε

Um in einem Ableitungsschritt ulv ⇒ urv anzudeuten, welche Produktion auf welchesTeilwort angewandt wird, unterstreichen wir l und schreiben die Nummer der Produktionauf den Pfeil. Beispiele:

A/caAaBa(4)⇒ A/caABaa

$$AaaB(2)⇒ $$aaAaB

$$AaaB(4)⇒ $$AaBa

Man erkennt: Auch”unsinnige“ Ableitungsschritte sind definiert, und die Ableitungsrela-

tion ist nichtdeterministisch. Die fur uns interessanten Ableitungen sind nur die, die mitS beginnen:

S(1)⇒ /cAa$

(6)⇒ /caaC(7)⇒ /caCa

(7)⇒ /cCaa(8)⇒ aa.

S(1)⇒ /cAa$

(3)⇒ /caaB$(4)⇒ /caBa$

(4)⇒ /cBaa$(5)⇒

⇒ /cAaa$(2)⇒ /caaAa$

(6)⇒ /caaaaC(7)⇒ /caaaCa

(7)⇒ · · · (7)⇒ /cCaaaa(8)⇒ aaaa.

Mit jeder Tour von A einmal von links nach rechts verdoppelt sich die Anzahl der a’s.Man uberlege, wie eine Ableitung fur das Wort aaaaaaaa aussieht. Wenn eine Tour vonA oder B oder C unvollstandig ist, dann enthalt die erreichte Satzform noch /c oder $,besteht also nicht nur aus Terminalzeichen. Man sieht also intuitiv, dass alle Folgen aj, die(aus S) ableitbar sind, die Form a2s

, s ≥ 1, haben, und dass jede dieser Folgen ableitbarist. Also:

L(G) = {w ∈ {a}∗ | S ∗⇒ w} = {a2s | s ≥ 1}.(Der formale Beweis dieser Aussage ist nur muhsam, nicht tief.)

Grammatiken in der in 3.1.3 angegebenen allgemeinen Form heißen auch

Chomsky-0-Grammatiken , Typ-0-Grammatiken oder Semi-Thue-Systeme .2

3.1.5 Definition Mit L0 bezeichnen wir die Klasse aller Sprachen L, fur die es eineTyp-0-Grammatik G mit L = L(G) gibt.

2A. Thue war Mathematiker, der um 1914 Regelsysteme zur Manipulation von Zeichenreihen, soge-nannte Thue-Systeme, untersuchte. Seine Regeln waren symmetrisch (l→ r impliziert r → l), das

”Semi“

(lat. fur”halb“) druckt aus, dass unsere Produktionen gerichtet sind.

92

Page 95: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Auf die Klasse L0 kommen wir spater und in der Vorlesung”Berechenbarkeit und Kom-

plexitatstheorie“ zuruck. Es wird sich herausstellen, dass sie genau die uberhaupt durcheinen beliebigen Kalkul erzeugbaren Sprachen enthalt (die

”rekursiv aufzahlbaren“

Sprachen).

Wir wenden uns nun einem ersten eingeschrankten Grammatiktyp zu. Dabei darf in ei-nem Ableitungsschritt immer nur eine Variable A ∈ V durch ein nichtleeres Wort ersetztwerden. Man hat aber die Moglichkeit, dies auszuschließen, wenn A nicht in einem vorge-schriebenen Teilwort vorkommt (dem

”Kontext“).

3.1.6 Definition (a) Sei G = (V,Σ, S, P ) Grammatik. Eine Produktion l → r heißtkontextsensitiv , wenn sie das folgende Format hat:

αAγ → αβγ, A ∈ V , α, β, γ ∈ (V ∪ Σ)∗ , |β| ≥ 1 .

(”Man darf A durch das nichtleere Wort β ersetzen, falls A im

”Kontext“ α..γ steht.“)

Um Missverstandnisse auszuschließen: Auch A → β mit |β| ≥ 1 ist eine kontextsensitiveProduktion (mit α = γ = ε ). Die eigentlich wesentliche Eigenschaft hier ist die

”Nicht-

Verkurzung“: es gilt stets |l| ≤ |r|.(b) Die Grammatik G = (V,Σ, S, P ) heißt kontextsensitiv , wenn

• entweder alle Produktionen von G kontextsensitiv sind

• oder alle Produktionen von G kontextsensitiv sind außer der folgenden: S → ε, undS nie auf der rechten Seite einer Produktion vorkommt.

Kontextsensitive Grammatiken heißen auch Chomsky-1-Grammatiken oder Typ-1-Grammatiken .

(c) Eine Sprache L heißt kontextsensitiv oder vom Typ 1 oder Chomsky-1-Sprache ,falls L = L(G) fur eine kontextsensitive Grammatik G gilt. L1 ist die Klasse aller kon-textsensitiven Sprachen.

Auch L1 wird spater nochmals diskutiert. Weil jede Typ-1-Grammatik auch Typ-0-Grammatikist, gilt naturlich L1 ⊆ L0.

Beispiele fur kontextsensitive Produktionen:

S → /cAa$Aab→ aaBabbbAa$→ bbaba$bbAa$→ bbSBa$/cB → /cA

Man suche jeweils die Teilworter α, β, γ!

Keine kontextsensitiven Produktionen sind:

93

Page 96: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Aa$→ aaB$aC → Ca/cC → εS → ε

Kontextsensitive Grammatiken sind theoretisch einfach zu handhaben, aber fur die Be-schreibung von Sprachen sehr unhandlich. Leichter geht es mit der allgemeiner aussehen-den Klasse der

”monotonen“ Grammatiken. Wir werden sehen, dass solche Grammatiken

relativ leicht in kontextsensitive umgebaut werden konnen. Damit ergibt sich folgendesStandard-Vorgehen: Spezifiziere eine Sprache L uber eine monotone Grammatik; schließe,dass L kontextsensitiv ist.

3.1.7 Definition (a) Sei G = (V,Σ, S, P ) eine Grammatik. Eine Produktion l → rheißt (wortlangen-)monoton , wenn |l| ≤ |r| ist.Beachte: Dies ist die Eigenschaft

”Nicht-Verkurzung“ von den kontextsensitiven Produk-

tionen. Also: Jede kontextsensitive Produktion ist monoton.

(b) Eine Grammatik G = (V,Σ, S, P ) heißt (wortlangen-)monoton , wenn

• entweder alle Produktionen von G monoton sind

• oder alle Produktionen von G monoton sind außer der folgenden: S → ε, und S nieauf der rechten Seite einer Produktion vorkommt.

Aus den Definitionen folgt sofort, dass jede kontextsensitive Grammatik monoton ist.Die Umkehrung gilt nicht! Zum Beipiel ist die Produktion aC → Ca monoton, abernicht kontextsensitiv. Es gilt aber, dass die monotonen Grammatiken nur kontextsensitiveSprachen beschreiben konnen.

3.1.8 Satz Sei L = L(G) fur eine monotone Grammatik G. Dann gibt es eine kontext-sensitive Grammatik G′ mit L = L(G′). (Insbesondere ist L(G) kontextsensitiv.)

3.1.9 Beispiel Betrachte die Grammatik G = (V,Σ, S, P ) mit V = {S,A,C}, Σ ={a, b, c}, Startsymbol S, und den folgenden Produktionen:

S → ε

S → abc

S → aAbc

A → aACb

A → aCb

Cb → bC

Cc → cc

94

Page 97: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Man sieht, dass alle Produktionen monoton sind außer S → ε, und dass S nicht rechtsvorkommt. Klar ist, dass S ⇒ ε und S ⇒ abc gilt und daher, dass ε, abc ∈ L(G). Weiterhaben wir die folgende Ableitungsfolge:

S ⇒ aAbc⇒ aaCbbc⇒ aabCbc⇒ aabbCc⇒ aabbcc.

Also ist auch aabbcc ∈ L(G). Die Grammatik G und die von ihr beschriebene Sprachewird in der Ubung genauer untersucht. Es stellt sich folgendes heraus:

L(G) = {anbncn | n ≥ 0}.

Mit Satz 3.1.8 konnen wir schließen, dass diese Sprache kontextsensitiv ist, also zur KlasseL1 gehort.

Auch wenn es auf den ersten Blick nicht so aussieht (wegen der Produktion /cC → ε), kannman auch die Grammatik aus Beispiel 3.1.4 zu einer monotonen Grammatik umbauen.Daraus folgt, wieder mit Satz 3.1.8, dass auch {a2i | i ≥ 1} ∈ L1 gilt.

Es fehlt noch der Beweis von Satz 3.1.8. Der Umbau von G = (V,Σ, S, P ) (monoton) inG′ = (V ′,Σ, S, P ′) (kontextsensitiv) erfolgt in zwei Schritten.

1. Schritt:”Separierung“. Hier wird erreicht, dass auf der linken Seite von Produk-

tionen nur noch Variable stehen, keine Terminalzeichen. Das ist ganz leicht. Man erfindetfur jedes a ∈ Σ eine neue Variable, z. B. Da, und ersetzt in jeder Produktion in P jedesVorkommen von a durch Da. Weiterhin fugt man fur jedes a ∈ Σ die eine neue ProduktionDa → a hinzu. Die neue Menge von Produktionen nennen wir P ′′.

Im Beispiel 3.1.9 bekommt man die folgende Menge P ′′:

S → ε

S → DaDbDc

S → DaADbDc

A → DaACDb

A → DaCDb

CDb → DbC

CDc → DcDc

Da → a

Db → b

Dc → c

Die Ableitungen, die sich mit P ′′ ergeben, sind dieselben wie die in G, nur stehen uber-all die Stellvertreter-Variablen an Stelle der Terminalzeichen. Zu beliebigen Zeiten kannman auch Variable Da in das Terminalzeichen a umwandeln. Ein solches Terminalzeichenkann aber nachher nicht mehr in einem Ableitungsschritt benutzt werden, weil in keiner

95

Page 98: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Produktion links ein Terminalzeichen vorkommt. Das bedeutet, dass man immer so tunkann, als ob diese Umwandlung erst ganz zum Schluss passiert.

Beispiel :

S ⇒ DaADbDc ⇒ DaaCDbDbDc ⇒ DaDaDbCDbDc

⇒ DaDaDbDbCDc ⇒ DaDaDbDbDcDc.

Aus dieser Satzform kann man in sechs abschließenden Schritten das Wort aabbcc erhal-ten.

2. Schritt:”Einzelschritte“. Hier werden die monotonen Produktionen aus P ′′, die

nicht ohnehin schon kontexsensitiv sind, in eine Folge kontextsensitiver Produktionenumgewandelt. Wir zeigen dies an einem Beispiel, das sich aber in offensichtlicher Weiseverallgemeinern lasst. Wir betrachten eine Produktion p:

X1X2X3 → Y1Y2Y3Y4Y5,

wobei X1, . . . , Y5 Variable sind. Wir erfinden drei neue Variable Z1, Z2, Z3, die nur furdiese Produktion p Verwendung finden. Die Produktion p wird ersetzt durch die folgendeListe von kontextsensitiven Produktionen:

X1X2X3 → Z1X2X3

Z1X2X3 → Z1Z2X3

Z1Z2X3 → Z1Z2Z3

Z1Z2Z3 → Y1Z2Z3

Y1Z2Z3 → Y1Y2Z3

Y1Y2Z3 → Y1Y2Y3Y4Y5

Diese Produktionen zerfallen in drei Gruppen: erst werden die Xi’s nacheinander in Zi’sumgewandelt, dann die Zi’s bis auf das letzte in Yi’s, und schließlich das letzte Zi ineinen Block von Yi’s. Man kann sich leicht uberlegen, dass diese Produktionsfolge in einerlegalen Ableitung zu nichts anderem benutzt werden kann als um X1X2X3 in Y1Y2Y3Y4Y5

zu transformieren. Das liegt daran, dass die”Zwischenergebnisse“ alle mindestens eine

der Zi-Variablen enthalten, die man nur wieder loswerden kann, wenn man die Folge vonProduktionen exakt in der vorgesehenen Reihenfolge durchfuhrt.

Im allgemeinen Fall hat man eine Produktion X1 · · ·Xn → Y1 · · ·Ym mit m ≥ n, unddasselbe Vorgehen funktioniert.

3.1.9 Beispiel, fortgesetzt: In der Produktionenmenge P ′′ ist nur die Produktion

CDb → DbC

nicht kontextsensitiv. Sie wird durch eine Folge von Produktionen ersetzt. Insgesamt ergibtsich die folgende kontextsensitive Grammatik fur die Sprache L(G) = {anbncn | n ≥ 0}.

96

Page 99: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

G′ = (V ′,Σ, S, P ′) mit V ′ = {S,A,C,Da, Db, Dc, Z1, Z2}; die Menge P ′ der Produktionenist:

S → ε

S → DaDbDc

S → DaADbDc

A → DaACDb

A → DaCDb

CDb → Z1Db

Z1Db → Z1Z2

Z1Z2 → DbZ2

DbZ2 → DbC

CDc → DcDc

Da → a

Db → b

Dc → c

Die nachste Definition ist grundlegend fur den Rest der Vorlesung.

3.1.10 Definition (a) Sei G = (V ; Σ, S, P ) eine Grammatik. Eine Produktion l →r heißt kontextfrei , wenn l ∈ V (und r ∈ (V ∪ Σ)∗ beliebig) ist. Eine kontextfreieProduktion hat also das Format

A→ α, A ∈ V , α ∈ (V ∪ Σ)∗ .

Beachte: Kontextfreie Produktionen, deren rechte Seite nicht ε ist, sind ein Spezialfallvon kontextsensitiven Produktionen. Man kann l = A durch r ersetzen, ganz egal wo undin welchem Wort A vorkommt. Erst hier wird der Grund fur die Bezeichnung

”Variable“

richtig klar: fur jede Variable kann (und muss) etwas anderes eingesetzt werden, damitsich schließlich ein Wort aus Terminalzeichen ergibt.

(b) Eine Grammatik G heißt kontextfrei , wenn alle ihre Produktionen kontextfreisind. Kontextfreie Grammatiken heißen auch Chomsky-2-Grammatiken oder Typ-2-Grammatiken .

(c) Eine Sprache L heißt kontextfrei (oder Typ-2-Sprache oder Chomsky-2-Spra-che), falls L = L(G) fur eine kontextfreie Grammatik G gilt. L2 ist die Klasse allerkontextfreien Sprachen.

Notation: Besonders bei kontextfreien Sprachen ist es ublich, Produktionen mit derselbenVariablen auf der linken Seite zusammenzufassen, wobei das Zeichen | benutzt wird, umdie verschiedenen rechten Seiten zu trennen. Statt

A→ β1 , A→ β2 , . . . , A→ βs

97

Page 100: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

schreibt man alsoA→ β1 | β2 | · · · | βs

oder senkrecht:

A → β1

| β2

| β3

......

| βs

Die Grammatik aus Beispiel 3.1.1 wurde dann also folgendermaßen aussehen:

〈factor〉 → num | (〈expr〉)〈term〉 → 〈term〉 * 〈factor〉

| 〈term〉 / 〈factor〉| 〈factor〉

〈expr〉 → 〈expr〉 + 〈term〉| 〈expr〉 - 〈term〉| 〈term〉

3.1.11 Beispiel (Korrekte Klammerausdrucke) Wir betrachten die GrammatikG = (V,Σ, S, P ) mit V = {S}, Σ = {0, 1}; P enthalt die folgenden Produktionen:(1) S → ε(2) S → SS(3) S → 0S1.

Kurz: S → ε | SS | 0S1.

Eine Ableitung in dieser Grammatik sieht z. B. aus wie folgt:

S ⇒ SS ⇒ SSS ⇒ 0S1SS ⇒ 01SS ⇒ 01S0S1⇒ 01S00S11

⇒ 0100S11⇒ 010011 ∈ Σ∗.

Ersetzt man 0 durch”(“ und 1 durch

”)“, ist dies das Wort ()(()). Tatsachlich kann man

zeigen, dass L(G) gerade die Menge kKA aller korrekten Klammerausdrucke ist, wie siein Anhang A.2 in Definition A.2.4 definiert werden; damit ist kKA kontexfrei.

3.1.12 Beispiel Betrachte G = (V,Σ, S, P ) mit V = {S}, Σ = {0, 1}; P enthalt diefolgenden Produktionen:

98

Page 101: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

(1) S → ε(2) S → 0S1.

Kurz: S → ε | 0S1. Eine typische Ableitung in dieser Grammatik sieht aus wie folgt:

S ⇒ 0S1⇒ 00S11⇒ 000S111⇒ 0000S1111⇒ 00001111.

Man sieht recht leicht: L(G) = {0n1n | n ≥ 0}. Wir wissen nach Behauptung 2.4.2(a),dass diese Sprache nicht regular ist.

3.2 Rechtslineare Grammatiken und regulare Spra-

chen

Mit kontextfreien Sprachen beschaftigen wir uns ausfuhrlich in den beiden folgenden Ka-piteln. Wir betrachten zuvor noch einen engeren Grammatiktyp.

3.2.1 Rechtslineare Grammatiken

3.2.1 Definition (a) Sei G = (V,Σ, S, P ) eine Grammatik. Eine Produktion l → rheißt rechtslinear , falls l ∈ V und r = aB fur a ∈ Σ, B ∈ V oder r = ε ist. Einekontextfreie Produktion hat also das Format

A→ aB, A,B ∈ V , a ∈ Σ, oder A→ ε, A ∈ V .

(”Auf der rechten Seite r steht die Variable rechts.“)

Beachte: Jede rechtslineare Produktion ist kontextfrei.

(b) Eine Grammatik G heißt rechtslinear , wenn alle ihre Produktionen rechtslinearsind (kurz: P ⊆ V × (ΣV ∪{ε})). Rechtslineare Grammatiken heißen auch Chomsky-3-Grammatiken oder Typ-3-Grammatiken .

(c) L3 ist die Klasse aller Sprachen L, fur die gilt: L = L(G) fur eine rechtslineareGrammatik G.

Es ist offensichtlich, dass jede rechtslineare Grammatik G auch kontextfrei ist. Damithaben wir L3 ⊆ L2.

3.2.2 Beispiel Die folgende Grammatik ist rechtslinear:

G = ({S,B,C,D}, {1, 2}, S, P ), wo P folgende Produktionen hat:

S → 1B , S → 2C , S → ε,

B → 1B , B → 2D , B → ε,

C → 2D,

99

Page 102: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

D → 2D , D → ε.

Kurzform:

S → 1B | 2C | ε, B → 1B | 2D | ε, C → 2D, D → 2D | ε.Typische Ableitungsfolgen fur diese Grammatik sind etwa:

S ⇒ 1B ⇒ 11B ⇒ 111B ⇒ 1112D ⇒ 11122D ⇒ 111222D ⇒ 111222.

S ⇒ 2C ⇒ 22D ⇒ 222D ⇒ 222.

In Ableitungen bei rechtslinearen Grammatiken”passiert“ immer nur am rechten Ende

der Satzform etwas, weil dort die einzige Variable der Satzform steht.

3.2.2 Aquivalenz zu regularen Sprachen

In diesem Abschnitt zeigen wir, dass die Typ-3-Sprachen nichts anderes sind als die re-gularen Sprachen. Genauer stellt sich heraus, dass rechtslineare Grammatiken eigentlichnur eine andere Schreibweise fur NFA’s sind.

3.2.3 Beispiel Es sei M folgender NFA:

SStart

B

C

D

1

2

2

2

1

2

Man macht sich leicht klar, dass LM = L(ε+ 1+2∗ + 22+) gilt.

Wir betrachten zwei Berechnungswege in M :

B B B D D DSStart

C DS

1 1 1 2 2 2

DStart 2 2 2

Diese Berechnungen von M auf Inputs 111222 und 222 vergleiche man mit den beiden inBeispiel 3.2.2 notierten Ableitungen in G.

100

Page 103: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Die Ahnlichkeit zwischen Berechnungen und Ableitungen ist offensichtlich, und nichtzufallig. Der nachste Satz (und sein Beweis) zeigen, dass NFA’s und rechtslineare Gram-matiken im wesentlichen nur verschiedene Notationen fur dasselbe Konzept darstellen.

3.2.4 Satz Sei L ⊆ Σ∗ Sprache. Dann gilt

L ∈ L3 ⇔ L ist regular.

Wir beschreiben die Transformation zwischen rechtslinearer Grammatik G und NFA Mzunachst anhand von Beispiel 3.2.2. Naturlich haben beide genau dasselbe (Terminalzei-chen-)Alphabet Σ = {0, 1}. Die Menge Q = {S,B,C,D} der Zustande in M entsprichtder Menge V der Variablen in G. Das Startsymbol S von G entspricht dem Startzustandin M . Im Automatengraphen zu M gibt es zum Beispiel die Kanten

BB1

S 1B

Diesen entsprechen die Produktionen

S → 1B und B → 1B.

(Man beachte die graphische Ahnlichkeit!) In dieser Weise kann man jeder Kante imAutomatengraphen eine Produktion der Form A → aB zuordnen. Schließlich sind dieZustande S, B und D in M akzeptierend; dem entsprechen die Produktionen S → ε,B → ε und D → ε, mit denen man Ableitungen abschließen kann.

Man kann sich dann uberlegen, dass es immer moglich ist, eine Ableitung

S ⇒ a1p1 ⇒ a1a2p2 ⇒ a1a2 · · · anpn ⇒ a1a2 · · · an

in der Grammatik zu benutzen, um einen Weg im Automatengraphen vom StartzustandS zu einem akzeptierenden Zustand pn zu finden, der mit a1, . . . , an beschriftet ist – undumgekehrt.

Es folgt der formale Beweis.

Beweis (Satz 3.2.4).

”⇒“: Sei L = LM fur einen NFA M = (Q,Σ, q0, F, δ). Wir setzen G = (V,Σ, S, P ) mitV := Q, (dasselbe Σ,) S := q0 und folgenden Regeln in P :

q → aq′ fur q, q′ ∈ Q = V, a ∈ Σ, q′ ∈ δ(q, a).q → ε fur q ∈ F .

101

Page 104: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Zu zeigen: M akzeptiert w ⇔ w ∈ L(G), fur w ∈ Σ∗. Das sieht man so ein:

M akzeptiert w = a1 · · · an

⇔ ∃ Zustande p0, p1, . . . , pn mit p0 = q0, pn ∈ F und

pi ∈ δ(pi−1, ai), 1 ≤ i ≤ n

⇔ ∃ Variable p0, p1, . . . , pn mit p0 = S und

p0 ⇒ a1p1 ⇒ a1a2p2 ⇒ · · · ⇒ a1 · · · anpn ⇒ a1 · · · an

ist Ableitung in G

⇔ a1 · · · an ∈ L(G).

”⇐“: Gegeben sei eine rechtslineare Grammatik G = (V,Σ, S, P ) mit L = L(G). Wir

definieren einen NFA M = (Q,Σ, q0, F, δ) durch: Q := V , (Σ gleich,) q0 := S, F := {A ∈V | A→ ε ist Produktion}, und δ(A, a) := {B | A→ aB ist Produktion}.Zu zeigen: M akzeptiert w ⇔ w ∈ L(G). Dazu muss man nur beobachten, dass dieDefinition des NFA M genau die Umkehrung der Definition der Grammatik G von obenist. Damit folgt die behauptete Gleichheit der Sprachen aus dem obigen Beweis. �

Wir haben also:L3 ⊆ L2

(denn jede rechtslineare Grammatik ist kontextfrei) und L3 6= L2, denn die Sprache{0n1n | n ≥ 0} ist nicht regular, wohl aber kontextfrei (Beispiel 3.1.12).

Die Chomsky-Hierarchie:

L3 ⊆ L2 ⊆ L1 ⊆ L0

In Worten: Fur Sprachen L gelten die folgenden drei Implikationen:

L regular ⇒ L kontextfrei ⇒ L kontextsensitiv ⇒ L rekursiv aufzahlbar

Wir haben hier schon notiert, dass L2 ⊆ L1 gilt, was nicht offensichtlich ist und erst spaterbewiesen wird. Spater werden wir auch sehen, dass L2 ( L1 ( L0 gilt, die Sprachklassenin der Chomsky-Hierarchie also eine echte Hierarchie bilden.

3.2.3 Linkslineare Grammatiken

Es ist naturlich, sich zu fragen, welche Sprachklasse man erhalt, wenn man nicht rechtsli-neare Produktionen A → aB, sondern

”linkslineare“ A → Ba betrachtet. Es sollte keine

große Uberraschung sein, dass man auch hier wieder die regularen Sprachen bekommt.Dies wollen wir in diesem Abschnitt uberlegen.

102

Page 105: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

3.2.5 Definition

(a) Eine Produktion A → r heißt linkslinear , falls r = ε oder r = Ba fur eineVariable B ∈ V und einen Buchstaben a ∈ Σ.

(b) Eine Grammatik heißt linkslinear, falls alle ihre Produktionen linkslinear sind.

3.2.6 Beispiel G = (V,Σ, S, P ) mit V = {S,A,B}, Σ = {0, 1}, Startsymbol S undP mit den Produktionen S → A0, A→ A0 | A→ B1, B → ε.

Eine typische Ableitungsfolge in dieser Grammatik sieht so aus:

S ⇒ A0⇒ A00⇒ A000⇒ B1000⇒ 1000.

Man sieht leicht, dass L(G) = L(10+) gilt.

3.2.7 Behauptung Es sei G = (V,Σ, S, P ) eine linkslineare Grammatik und L = L(G)die von G erzeugte Sprache. Dann gilt:

(a) Es gibt eine rechtslineare Grammatik G′ = (V,Σ, S, P ′) mit LR = L(G′).

(b) Es gibt einen NFA M fur LR; es gibt einen NFA M ′ fur L = (LR)R mit |V | + 1Zustanden. (Insbesondere ist L regular.)

(c) Es gibt eine rechtslineare Grammatik G′′ = (V ′′,Σ, S ′′, P ′′) fur L mit |V ′′| = |V |+1.

Wir wollen die Punkte (a) bis (c) parallel zum Beweis an folgendem Beispiel durchgehen:

G = (V,Σ, C, P ) mit

V = {A,B,C}Σ = {0, 1}Startsymbol: S = C

P enthalt die Produktionen C → B0 | B1 , B → A0 , A→ ε | A0 | A1 .

(G erzeugt die Worter aus {0, 1}∗, deren vorletztes Zeichen eine Null ist. Dies impliziert,dass diese Worter mindestens die Lange 2 haben mussen.)

(a) Konstruktion von GR mit L(GR) = LR:

G GR

A→ Ba A→ aBA→ ε A→ εS = S

Am Beispiel: GR hat folgende Produktionen:C → 0B | 1B , B → 0A , A→ ε | 0A | 1A.

103

Page 106: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Es ist leicht zu sehen, dass L(GR) = L(G)R ist.

(GR erzeugt die Worter aus {0, 1}∗, deren zweites Zeichen eine Null ist.)

(b) NFA-Konstruktion:

Nach Satz 2.2.3 existiert ein NFA MR mit L(GR) = LMR .

Aus MR konstruieren wir den”Umkehr-NFA“ M ′ mit L(M ′) = (LMR)R, gemaß

Satz 2.5.7. Wir wissen, dass M ′ so gewahlt werden kann, dass die Zustandszahlhochstens um 1 steigt, also hochstens |V |+ 1 Zustande erzeugt werden.

Am Beispiel:

M R:

C B A0,1 0

M’:

0,1

Start

C B A0,1 0 0,1

Start

LM ′ = (LMR)R = L(GR)R = (L(G)R)R = L(G).

(c) Konstruktion von G′′ mit L(G′′) = L:

Aus M ′ lasst sich nun nach Satz 2.2.3 eine rechtslineare Grammatik G′′ derartgewinnen, dass L(G′′) = LM ′ = L(G) ist. Die dort angegebene Konstruktion liefertfur unser Beispiel die folgende Grammatik G′′ = (V ′′,Σ, S ′′, P ′′):

V ′′ = {A,B,C}S ′′ = A

P ′′ enthalt: A→ 0A | 1A | 0B , B → 0C | 1C , C → ε

Fazit: Ist G eine linkslineare Grammatik, so ist L(G) regular.

Genauer gilt: Zu jeder linkslinearen Grammatik G = (V,Σ, S, P ) existiert eine aquivalenterechtslineare Grammatik G′ = (V ′,Σ, S, P ′) mit |V ′| ≤ |V |+ 1 und V ⊆ V ′.

Warnung: Mischen der beiden Produktionstypen”rechtslinear“ und

”linkslinear“ fuhrt

zu”linearen Grammatiken“, die aus der Klasse L3 der regularen Sprachen hinausfuhren.

Zum Beispiel betrachte man die Grammatik G = (V,Σ, S, P ) mit V = {S,B}, Σ = {a, b}und P mit den Produktionen S → aB | ε, B → Sb. P enthalt nur linkslineare undrechtslineare Produktionen, aber L(G) = {anbn | n ≥ 0} 6∈ L3.

104

Page 107: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Kapitel 4

Kontextfreie Grammatiken undkontextfreie Sprachen

In diesem Kapitel untersuchen wir die im vorigen Kapitel definierte Sprachklasse L2 ge-nauer. Diese Klasse (und besonders noch engere Teilklassen davon) spielt eine zentraleRolle bei der Spezifikation von Programmiersprachen und der Konstruktion von Compi-lern fur Programmiersprachen.

4.1 Beispiele und Ableitungen

Wir wiederholen Definition 3.1.10: Eine kontextfreie Grammatik G besteht aus derMenge V der (syntaktischen) Variablen , einem Terminalzeichen-Alphabet Σ, ei-nem Startsymbol S ∈ V und der Menge P der Produktionen , wobei jede Produktionin P die Form

A→ X1 · · ·Xr, A ∈ V, X1, . . . , Xr ∈ V ∪ Σ

hat. (Elemente von V ∪ Σ bezeichnen wir mit X,Y, Z,Xi, Yi, Zi, usw.)

Man erinnere sich auch an die Konvention, statt

A→ β1 , A→ β2 , . . . , A→ βs

kurzA→ β1 | β2 | · · · | βs

zu schreiben.

Wir haben schon mehrere Beispiele fur kontextfreie Grammatiken gesehen:

(a) Beispiel 3.1.1 sollte arithmetische Ausdrucke mit den vier Grundoperationen, Klam-merung und der Prioritatsregel

”Punkt vor Strich“ beschreiben.

105

Page 108: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

(b) Bei Beispiel 3.1.11 sollte, so wurde behauptet, mit den drei Produktionen

S → ε | SS | 0S1

die Menge kKA der korrekten Klammerausdrucke beschrieben werden. (Diese Spra-che wird in Definition A.2.4 im Anhang definiert.)

(c) In Beispiel 3.1.12 sollten die beiden Produktionen

S → ε | 0S1

die Sprache {0n1n | n ≥ 0} beschreiben.

Wir erinnern uns weiter an den Ableitungs-Kalkul. (Siehe Definition 3.1.3(c).) Wenn

α = Y1 · · ·Ys A Z1 · · ·Zt

(mit Y1, . . . , Ys, Z1, . . . , Zt ∈ V ∪ Σ), und A → X1 · · ·Xr eine Produktion in P ist, dannkann man aus α in einem Schritt

α′ = Y1 · · ·Ys X1 · · ·Xr Z1 · · ·Zt

ableiten ; man schreibt α⇒ α′.

Dann betrachtet man Ketten von Ableitungsschritten und schreibt α∗⇒ α′, wenn es eine

Folgeα = α0 ⇒ α1 ⇒ · · · ⇒ αt , t ≥ 0 ,

von Ableitungsschritten gibt. Die Worter α ∈ (V ∪ Σ)∗, die man auf diese Weise aus Serzeugen kann, heißen Satzformen in G. D. h.:

α ∈ (V ∪ Σ)∗ ist Satzform in G⇔ es existiert eine Folge S = α0 ⇒ α1 ⇒ · · · ⇒ αt = α, mit t ≥ 0.

Satzformen in Beispiel 3.1.1 sind z. B. die”Zwischenworter“, die in der in diesem Beispiel

angegebenen Ableitung auftreten, also

〈expr〉 , 〈term〉 , 〈term〉 / 〈factor〉 , 〈term〉 / (〈expr〉) , 〈term〉 / (〈expr〉 - 〈term〉) ,〈factor〉 / (〈expr〉 - 〈term〉) , num / (〈expr〉 - 〈term〉)

und so weiter. Keine Satzformen sind

(〈expr〉 / 〈expr〉)(〈term〉 / 〈expr〉) und -〈term〉 .

In Beispiel 3.1.11 sind z. B. die folgenden Worter Satzformen (prufen!):

S , 0S1 , 01 , SS , 0S1S , 01S , 01SS , 01S0S1 ,

010S1S , 0101S , 0101 , 01S01 , 0100S110S1 , 0100110S1 , 01001101 .

106

Page 109: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Keine Satzformen sind1S0 , S0S , 0S0S1,

und so weiter.

Sehr nutzlich fur den Nachweis, dass etwas keine Satzform ist, ist der Umstand, dass mandas Konzept der Satzformen auch als induktive Definition fassen kann, vgl. Anhang A.2:

(i) S ist Satzform in G;(ii) wenn α = Y1 · · ·YsAZ1 · · ·Zt Satzform in G ist und A → X1 · · ·Xr eine Pro-duktion in P ,dann ist auch α′ = Y1 · · ·YsX1 · · ·Xr Z1 · · ·Zt eine Satzform in G.(iii) Nichts sonst ist Satzform in G.

Die Aquivalenz der beiden Formulierungen ist nicht schwer nachzuweisen. (Der Leser isteingeladen, dies als Ubung zu beweisen.) Wir benutzen diejenige der beiden Formulierun-gen, die bequemer ist.

”Induktion uber den Aufbau von Satzformen“ ist oft hilfreich, um

nachzuweisen, dass alle Satzformen eine bestimmte Eigenschaft haben. In Beispiel 3.1.1kann man z. B. mit einer solchen Induktion leicht zeigen, dass keine Satzform mit

”-“

beginnt. Daher kann - 〈term〉 keine Satzform sein. Mit derselben Methode kann man be-weisen, dass in keiner Satzform eines der Worter )〈expr〉 , )〈term〉 , )〈factor〉 oder )( alsTeilwort vorkommen kann. Daher kann (〈expr〉 / 〈expr〉)(〈term〉 / 〈expr〉) keine Satzformsein.

Unter den Satzformen zu einer Grammatik G interessieren uns besonders diejenigen, diekeine Variable enthalten. In Beispiel 3.1.11 sind dies z. B. 01, 0101 und 01001101. DieMenge

L(G) = {w ∈ Σ∗ | w ist Satzform von G}ist die von G erzeugte Sprache. Also:

w ist in L(G) ⇔w ∈ Σ∗ und es gibt eine Ableitung S = α0 ⇒ α1 ⇒ · · · ⇒ αt = w.

Achtung: Wenn die Grammatik G mehr als eine Variable benutzt, hat die Menge L(G)normalerweise keine einfache induktive Definition.

4.1.1 Beispiel Sei G = (V,Σ, S, P ), wo V = {S},Σ = {0, 1}, undP enthalt die Produktionen S → 0S0, S → 1S1, S → 0, S → 1, S → ε, oder kurzer:

S → 0S0 | 1S1 | 0 | 1 | ε.

107

Page 110: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Ableitungen in der Grammatik G sehen beispielsweise so aus:

S ⇒ ε ; S ⇒ 0S0⇒ 01S10⇒ 01110 ; S ⇒ 1S1⇒ 11S11⇒ 110S011⇒ 110011 .

4.1.2 Proposition Fur die Grammatik G aus Beispiel 4.1.1 gilt

L(G) = {w ∈ {0, 1}∗ | w = wR}.

D. h.: L(G) ist die Sprache der Spiegelworter (”Palindrome“) uber {0, 1}.

Ein Palindrom sieht von vorne und hinten gelesen gleich aus. Palindrome uber dem 26-buchstabigen lateinischen Alphabet sind zum Beispiel

ara, elle, hannah, reliefpfeiler, sinnlosolnnis, ε .

(Wie sieht eine kontextfreie Grammatik fur die Menge der Palindrome uber {a, . . . , z}aus? Wie die fur die Palindrome uber einem beliebigen vorgegebenen Alphabet Σ?)

Beweis von Proposition 4.1.2:

(Dieser Beweis ist als (Ubungs-)Beispiel dafur zu verstehen, wie man das intuitiv Nahe-liegende formal exakt fassen kann.)

”⊆“: (Typisch: Durch Induktion uber den Aufbau der Satzformen beweist man eine Eigen-

schaft aller Satzformen. Diese wird dann benutzt, um eine Eigenschaft aller ableitbarenWorter w ∈ Σ∗ zu zeigen.)

Behauptung : Ist α eine Satzform in G, so gilt entweder

(I) α = wSwR fur ein w ∈ Σ∗ oder

(II) α = w ∈ Σ∗ mit w = wR.

(Aus dieser Behauptung folgt sofort, dass jedes in G ableitbare Wort w ∈ Σ∗ die Eigen-schaft w = wR hat.)

I.A.: α = S: S = εSεR, also Format (I).

I.V.: Die Behauptung gilt fur α.

I.S.: Sei α′ aus der Satzform α durch einen Ableitungsschritt gewonnen. Dann muss αmindestens eine Variable enthalten, also gilt nach der I.V.: α = wSwR fur ein w ∈ Σ∗.Nun gibt es drei Falle.

1. Fall : Es wird die Produktion S → ε angewendet, um von α nach α′ zu kommen. Dannist α′ = wwR, und es gilt (wwR)R = (wR)RwR = wwR. Also gilt (II) fur α′.

108

Page 111: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

2. Fall : Es wird eine Produktion S → a, a ∈ {0, 1} angewendet, um von α nach α′ zukommen. Dann ist α′ = wawR, und es gilt (wawR)R = (wR)RaRwR = wawR. Also gilt(II) fur α′.

3. Fall : Es wird eine Produktion S → aSa, a ∈ {0, 1}, angewendet, um von α nach α′ zukommen. Dann ist α′ = waSawR, und es gilt (waSawR)R = (wR)RaSawR = waSawR.Also gilt (I) fur α′.

In jedem Fall hat auch α′ Format (I) oder (II).

”⊇“: (Typisch: Durch Induktion uber die Wortlange zeigt man, dass gewisse Worter uber

Σ Satzformen darstellen, also in L(G) liegen.)

Durch Induktion uber die Wortlange |w| zeigen wir:

(+) Ist w = wR, so ist w ∈ L(G), fur alle w ∈ Σ∗.

I.A.: w = ε, 0, oder 1. Dann gilt w ∈ L(G), weil S ⇒ ε, S ⇒ 0, S ⇒ 1 Ableitungen sind.

I.V.: k ≥ 2, und fur alle w′ mit |w′| < k gilt (+).

I.S.: Sei w ein Palindrom mit |w| = k. Weil |w| ≥ 2, ist w = aw′a fur ein a ∈ {0, 1} undein w′ ∈ Σ∗. Offenbar gilt w′ = (w′)R und |w′| < k. Nach I.V. ist also w′ eine Satzform inG. Das heißt: Es existiert eine Ableitung

S ⇒ α1 ⇒ · · · ⇒ αr ⇒ w′

fur w′, mit r ≥ 0. Damit ist

S ⇒ aSa⇒ aα1a⇒ · · · ⇒ aαra = aw′a

Ableitung fur aw′a, also w = aw′a ∈ L(G).

Damit ist Proposition 4.1.2 bewiesen. �

Wir bemerken, dass nach einer Ubungsaufgabe die Sprache {w ∈ Σ∗ | w = wR} nichtregular ist. Also sehen wir hier nochmals, dass L3 6= L2 ist.

Nun wollen wir mit derselben Methode nachweisen, dass die Grammatik G = (V,Σ, S, P )aus Beispiel 3.1.11, mit V = {S},Σ = {0, 1}, und Produktionen S → ε | SS | 0S1, dieMenge kKA der korrekten Klammerausdrucke erzeugt, siehe Definition A.2.4.

Als Vorbereitung notieren wir eine nichtrekursive Charakterisierung der Elemente vonkKA: Ein 0-1-Wort w ist ein korrekter Klammerausdruck genau dann wenn w ebensoviele Nullen wie Einsen hat und wenn beim Lesen von w von links nach rechts es niemalsvorkommt, dass man mehr Einsen als Nullen gesehen hat. Formal:

4.1.3 Proposition Ein Wort w ∈ {0, 1}∗ ist in kKA genau dann wenn

(∗) |w|0 = |w|1 und fur jedes Prafix u von w gilt |u|0 ≥ |u|1.

109

Page 112: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Beweis : Siehe Satze A.2.5, A.2.6, A.2.7 in Anhang A.2. �

4.1.4 Proposition Fur die Grammatik G aus Beispiel 3.1.11 gilt:

kKA = L(G).

Beweis :”⊆“: Wir zeigen durch Induktion uber die Struktur von kKA, dass alle Elemente

w von kKA in L(G) sind, d. h., eine Ableitung haben.

(i) Ist w = ε, so ist S ⇒ ε eine Ableitung von w. Also ist w ∈ L(G).

(ii) Ist w = 0u1v, mit u, v ∈ kKA, so gibt es nach I.V. Ableitungen

S = α0 ⇒ · · · ⇒ αt = u , , S = β0 ⇒ · · · ⇒ βs = v.

Diese konnen wir mit den Anfangsschritten S ⇒ SS ⇒ 0S1S kombinieren, um eineAbleitung

S ⇒ SS ⇒ 0S1S = 0α01β0 ⇒ · · · ⇒ 0αt1β0 ⇒ · · · ⇒ 0αt1βs = 0u1v = w

fur w zu erhalten. Also ist w ∈ L(G).

(Ubung: Man benutze diese Strategie, um fur das Wort 010010101011 eine Ableitung inG zu finden.)

”⊇“: Wir beweisen die folgende Hilfsbehauptung (HB) uber Satzformen α in G:

(HBα) |α|0 = |α|1 und jedes Prafix γ von α erfullt |γ|0 ≥ |γ|1.

Der Beweis erfolgt durch Induktion uber den Aufbau von Satzformen.

I.A.: Wenn α = S, so ist (HBα) erfullt, weil S keine Nullen oder Einsen enthalt.

I.V.: α = β S ζ erfullt (HBα).

I.S.: Betrachte die Satzformen, die aus α in einem Schritt erzeugt werden konnen, indemman auf das S zwischen β und ζ eine Produktion anwendet. Es gibt zwei Falle:

1. Fall : α′ = β SS ζ. (HBα′) folgt unmittelbar aus (HBα), da sich an der Verteilung vonNullen und Einsen nichts andert.

2. Fall : α′ = β 0S1 ζ. Hier erhoht sich die Gesamtzahl von Nullen und Einsen um jeweils1, also folgt |α′|0 = |α′|1 aus der I.V. Nun betrachten wir Prafixe: Fur ein Prafix γ′ vonα′ gibt es verschiedene Moglichkeiten. Wenn γ′ Prafix von β ist, besagt die I.V. direkt,dass |γ′|0 ≥ |γ′|1. Weil nach I.V. |β|0 ≥ |β|1, folgt auch |β0|0 ≥ |β0|1, |β0S|0 ≥ |β0S|1und |β0S1|0 ≥ |β0S1|1. Schließlich konnte γ′ = β0S1ζ ′ fur ein Prafix ζ ′ von ζ sein. Dannliefert die I.V., dass |βζ ′|0 ≥ |βζ ′|1 gilt; daraus folgt sofort |β0S1ζ ′|0 ≥ |β0S1ζ ′|1, weilsich auf beiden Seiten die Anzahl der Nullen und Einsen um 1 erhoht.

Nach dem Prinzip der Induktion uber den Aufbau von der Satzformen in G folgt, dass(HBα) fur alle Satzformen in G gilt. Da jedes Wort w ∈ L(G) (auch) Satzform ist, erfulltjedes w ∈ L(G) Bedingung (∗) in Proposition 4.1.3, ist also in kKA. �

110

Page 113: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

4.2 Ableitungsbaume, Linksableitungen, Rechtsablei-

tungen

Wir haben bislang Ableitungen als Folgen S ⇒ α1 ⇒ · · · ⇒ αr in (V ∪ Σ)∗ dargestellt.Im Fall der kontextfreien Grammatiken bietet es sich jedoch an, Ableitungen als Baumedarzustellen. Diese

”Syntaxbaume“ oder

”Ableitungsbaume“ sind wichtiges Hilfmittel

und Zwischenergebnis bei der Analyse von Programmtexten durch einen Compiler.

4.2.1 Beispiel Wir betrachten wieder die Grammatik G mit Produktionen

S → ε | SS | 0S1

aus Beispiel 3.1.11. Folgendes ist eine Ableitung in dieser Grammatik:

S ⇒ SS ⇒ SSS ⇒ S0S1S ⇒ S01S ⇒ 0S101S ⇒ 0S101S ⇒ 0101S ⇒ 0101 .

(In jedem Schritt haben wir die Kopie von S, auf die eine Produktion angewandt wird,

1

:6 T :

7

_S

_S

_S

_S

_S

_S

_S

T :2

T :

T

T0:

T :3

T :4

T :5

S

S S

S

S

S S

0 1

S

S

S

S

1

S0 1

ε

ε

0 1

ε

ε

0 1S

S

S S

S

S0 1

S0 1

ε

ε ε

S

S

S

S

S

S

S

S S

S

S0 1

S

S

S S

S0

Abbildung 4.1: Schrittweiser Aufbau eines Ableitungsbaums

unterstrichen.) Aus einer solchen Ableitung α0 ⇒ · · · ⇒ αt bauen wir schrittweise Baume

111

Page 114: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

T0, . . . , Tt, wie folgt. Baum T0 ist ein Knoten, der mit S beschriftet ist. Nach Abarbeitender Ableitungsschritte α0 ⇒ · · · ⇒ αs, s ≤ t, haben wir einen Baum Ts, an dessenBlattern, von links nach rechts gelesen, die Buchstaben der Satzform αs stehen. Im Schrittαs ⇒ αs+1 wird eine der Produktionen S → ε, S → SS, S → 0S1 auf eine der Variablenangewendet, die in einem Blatt steht. An dieses Blatt hangen wir einen, zwei oder drei neueKnoten, die mit ε oder den Buchstaben in der rechten Seite der benutzten Produktionbeschriftet werden. Wenn s = t, sind wir fertig, und Tt ist

”der Ableitungsbaum“ zu

α0 ⇒ · · · ⇒ αt. Aus der Beispielableitung ergibt sich die in Abb. 4.1 dargestellte Folgevon Ableitungsbaumen. Aus der Ableitung

S ⇒ SS ⇒ SSS ⇒ 0S1SS ⇒ 0S1S ⇒ 01S ⇒ 010S1⇒ 0101

fur dasselbe Terminalzeichenwort erhalten wir am Ende denselben Baum wie in Abb. 4.1.(Der Leser/die Leserin ist eingeladen, die entsprechende Folge aufzuzeichnen und sichzu uberzeugen, dass eigentlich dieselben Ableitungsschritte vorgenommen werden, nur ineiner anderen Reihenfolge.)

Dagegen ergibt die Ableitung

S ⇒ SS ⇒ SSS ⇒ SS ⇒ 0S1S ⇒ 01S ⇒ 010S1⇒ 0101 ,

die dasselbe Wort erzeugt, den in Abb. 4.2 dargestellten Baum, der eine andere Strukturhat.

S

S

ε

S0 1

S

ε

S

S0 1

ε

S

Abbildung 4.2: Ein zweiter Ableitungsbaum fur 0101

Als weiteres Beispiel betrachten wir Ableitungsbaume zur Grammatik aus Beispiel 3.1.1.In den Abbildungen haben wir die Knoten, die syntaktischen Variablen entsprechen, ein-fach durch den Namen der Variablen dargestellt; nur Terminalzeichen sind als Kreis dar-gestellt. Abbildung 4.3 zeigt einen Ableitungsbaum fur das Wort

(num -num *num /num ) /num +num *num /num -num

112

Page 115: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

<factor>

num

+

num

/

*

num

)(

/

num

num

num

num

num

/

*

num

<expr>

<term>

<term>

<term>

<expr>

<expr>

<term>

<term>

<term> <expr>

<expr><term>

<term>

<term>

<term>

<factor>

<factor>

<factor>

<factor>

<factor>

<factor>

<factor>

<factor>

<factor>

Abbildung 4.3: Ableitungsbaum fur(num -num *num /num ) /num +num *num /num -num

Abbildung 4.4 einen fur num -num -num -num *num. In Abbildung 4.5 sieht maneinen Ableitungsbaum, in dem manche Blatter mit Variablen beschriftet sind, der alsoeine Satzform liefert und noch weiter ausgebaut werden konnte.

Wir definieren nun formal, was Ableitungsbaume sein sollen.

4.2.2 Definition Sei G = (V,Σ, S, P ) eine kontextfreie Grammatik.

(a) Ein Ableitungsbaum (auch: Syntaxbaum) T ist ein gerichteter, geordneter1 Baummit Wurzel, dessen Knoten mit je einem Buchstaben aus V ∪ Σ oder mit ε beschriftetsind, wobei folgendes gilt:

(I) Die Wurzel ist mit S beschriftet,

(II) Ist v ein Knoten, der mit a ∈ Σ oder mit ε beschriftet ist, so ist v ein Blatt, hat alsokeine Nachfolgerknoten.

1Ein Baum heißt geordnet, wenn die unmittelbaren Nachfolgerknoten eines Knotens eine Reihenfolge

”von links nach rechts“ haben.

113

Page 116: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

<factor>

num

<term>

<factor>

num

<term>

<factor>

num

<term>

<factor>

num

*

num

<expr>

<expr>

<expr>

<term>

<term>

<expr>

<factor>

Abbildung 4.4: Ableitungsbaum fur num -num -num -num *num

(III) Ist v ein Knoten, der mit A ∈ V beschriftet ist, und ist v kein Blatt, so gilt:

(i) die Nachfolgerknoten v1, . . . , vr von v sind mit X1, . . . , Xr ∈ Σ ∪ V beschriftet, undA→ X1 · · ·Xr ist Produktion in P

oder

(ii) v hat genau einen Nachfolger v′, der mit ε beschriftet ist, und A→ ε ist Produktionin P .

(b) Ist T ein Ableitungsbaum, so bezeichnen wir mit α(T ) das Wort uber V ∪Σ, das sichbeim Lesen der Blatter von T von links nach rechts ergibt.(Das Wort α(T ) heißt das

”Ergebnis“ oder

”Resultat“ von T (engl. yield), manchmal

auch das”Blattwort“ von T .)

In den Baumen in Abb. 4.1 sind die Worter α(T0), . . . , α(T7) einfach die Satzformen in derzugrunde liegenden Ableitung. Im Baum in Abb. 4.2 ist α(T ) = 0101. Bei der Bestimmungvon α(T ) werden ε’s naturlich einfach verschluckt. Im Extremfall sind alle Blatter von T

114

Page 117: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

<factor>

+

/

*

/

num

num

<expr>

<term>

<term>

<term>

<expr>

<term>

<term>

<term> <expr><factor>

<factor> <factor>

<factor>

Abbildung 4.5: Ableitungsbaum fur eine Satzform

mit ε beschriftet; dann ist α(T ) = ε. Ein Beispiel fur diese Situation ist fur die Grammatikaus Beispiel 4.2.1 in Abb. 4.6 angegeben.

S

ε

S

S S S

S S

ε ε

ε ε

S

S

Abbildung 4.6: Ein Ableitungsbaum fur ε

Wenn X ∈ V ∪ Σ beliebig ist, ist ein X-Ableitungsbaum genauso definiert wie inDefinition 4.2.2, außer dass man verlangt, dass die Beschriftung der Wurzel X ist. ZumBeispiel ist in Abb. 4.3 der linke Unterbaum der Wurzel ein 〈term〉-Ableitungsbaum T ′

mit Ergebnis α(T ′) = (num -num *num /num ) /num.

X-Ableitungsbaume werden schematisch so gezeichnet:

115

Page 118: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

X

α( )

T

T

Wir halten fest, dass Ableitungsbaume tatsachlich dasselbe leisten wie Ableitungsfolgen.

4.2.3 Lemma Sei G kontextfreie Grammatik. Dann sind fur X ∈ V ∪ Σ und α ∈(V ∪ Σ)∗ die folgenden beiden Aussagen aquivalent:

(i) X∗⇒ α;

(ii) α = α(T ) fur einen X-Ableitungsbaum T .

Insbesondere gilt: α ist Satzform von G genau dann wenn es einen (S-)AbleitungsbaumT mit α(T ) = α gibt; und

w ∈ L(G) ⇔ w ∈ Σ∗ und es gibt einen Ableitungsbaum T mit α(T ) = w.

Beweis”(i) ⇒ (ii)“: Sei X = α0 ⇒ · · · ⇒ αr = α Ableitung in G. Wir formulieren

die in 4.2.1 angewandte induktive Methode, aus einer Ableitung schrittweise einen Baumzu konstruieren, allgemein. Die Wurzel ist ein Knoten, der mit X = α0 beschriftet ist.Sei nun 0 ≤ s < r. Als Induktionsvoraussetzung nehmen wir an, wir hatten schon einenX-Ableitungsbaum Ts fur αs = X1 · · ·Xt, d. h. X1, . . . , Xt sind die von ε verschiedenenEintrage an den Blattern von Ts. Es gibt dann t′ ∈ {1, . . . , t} und Y1 · · ·Yu derart, dassXt′ → Y1 · · ·Yu eine Produktion ist und

αs = X1 · · ·Xt′ · · ·Xt ⇒ X1 · · ·Xt′−1Y1 · · ·YuXt′+1 · · ·Xt = αs+1

der nachste Ableitungsschritt ist. Der Knoten zu Xt′ in Ts erhalt u Nachfolgerknoten,die mit Y1, . . . , Yu beschriftet werden. Offenbar ist der resultierende Baum Ts+1 wiederein X-Ableitungsbaum, und α(Ts+1) = αs+1. Ist u = 0, erhalt der Knoten zu Xt′ einenNachfolger mit Markierung ε. Das Konstruktionsschema ist in Abb. 4.7 wiedergegeben.

116

Page 119: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

X

tXt’

Y Y1 u

Ts : Ts +1:X

X1 tXX t’ X1 X... ...

...

... ...

......

Abbildung 4.7: Konstruktion eines Ableitungsbaumes, ein Schritt

Nach r Schritten ergibt sich ein Baum Tr mit α(Tr) = αr = α.

”(ii) ⇒ (i)“: Es sei ein X-Ableitungsbaum T gegeben. Durch Induktion nach der Tiefe k

von T zeigen wir, dass X∗⇒ α(T ) gilt.

k = 0: Hat T nur einen Knoten, die Wurzel, so ist α(T ) = X, und X0⇒ X ist Ableitung.

k > 0: Ist T ein Baum, der nicht nur aus der Wurzel besteht, so muss die Wurzelbeschrif-tung X eine Variable A ∈ V sein. Falls die Wurzel nur einen, mit ε beschrifteten, Nachfol-ger besitzt, ist α(T ) = ε; dann muss aber A→ ε Produktion sein, also A⇒ ε Ableitung.Sonst hat die Wurzel r ≥ 1 Nachfolger v1, . . . , vr, die mit X1, . . . , Xr ∈ V ∪ Σ beschriftetsind. Der i-te Unterbaum Ti (mit Wurzel vi) ist Xi-Ableitungsbaum, fur 1 ≤ i ≤ r, jeweilsmit Tiefe kleiner als k. Nach Induktionsvoraussetzung gilt

Xi∗⇒ α(Ti) , fur 1 ≤ i ≤ r .

Durch Zusammensetzen dieser r Ableitungen erhalten wir die Ableitung

X ⇒ X1X2 · · ·Xr∗⇒ α(T1)X2 · · ·Xr

∗⇒ α(T1)α(T2)X3 · · ·Xr∗⇒ · · ·

∗⇒ α(T1) · · ·α(Tr) = α(T ) .

Beispiel: Wir wollen aus dem Baum

S

S0 1

S0 1

ε

S

S

ε

S0 1

S

ε

S

117

Page 120: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

zu der Grammatik aus 4.2.1 eine Ableitung bauen. Zuerst behandeln wir den linken Un-terbaum und finden (notfalls durch Anwenden derselben Prozedur auf diesen Unterbaum)die Ableitungsfolge

S ⇒ SS ⇒ S ⇒ 0S1⇒ 01.

Der rechte Unterbaum liefert die Ableitungsfolge

S ⇒ 0S1⇒ 00S11⇒ 0011.

Diese beiden Ableitungen werden”hintereinandergesetzt“ an den Startschritt S ⇒ SS

angefugt – mit der ersten Ableitung wird das erste”S“ bearbeitet, mit der zweiten das

zweite. Dies liefert:

S ⇒ SS ⇒ SSS ⇒ SS ⇒ 0S1S ⇒ 01S ⇒ 010S1⇒ 0100S11⇒ 010011.

Folgende Beobachtung ist fur spater wichtig: Ableitungsschritte, die zum rechten Unter-baum gehoren, werden erst durchgefuhrt, wenn der linke Unterbaum komplett abgearbei-tet ist. Dies fuhrt dazu, dass immer die am weitesten links stehende Variable bearbeitetwird.

Der Ableitungsbaum T enthalt vollstandige Information daruber, durch welche Ablei-tungsschritte die Satzform α(T ) abgeleitet wird, also auch noch jede Menge Strukturin-formation. Einzig von der Reihenfolge der Anwendung der Produktionen wird abgesehen.Deshalb heißen Ableitungsbaume auch Syntaxbaume oder Strukturbaume – sie geben uberdie

”Struktur“ oder den

”Satzbau“ des Wortes α(T ) bezuglich der Grammatik G Aus-

kunft. Diese Eindeutigkeit der verwendeten Produktionen ist bei Ableitungsfolgen nichtunbedingt gegeben; z. B. konnen zur Folge S ⇒ SS ⇒ SSS in der Grammatik vonBeispiel 4.2.1 die beiden verschiedenen Baume

SS

S

SS

SS

S

S

S

gehoren. Daher zieht man meist Ableitungsbaume als Darstellung fur Ableitungen vor.Oft ist es jedoch nutzlich, eindimensionale (zeigerfreie) Notationen fur Ableitungsbaumezu haben. Diesem Zweck dienen Linksableitungen (bzw. Rechtsableitungen).

4.2.4 Definition Eine Ableitung S = α0 ⇒ α1 ⇒ · · · ⇒ αr = w ∈ Σ∗

(NB: w besteht aus Terminalzeichen) ist eine Linksableitung , wenn fur 0 ≤ s < rbeim Ubergang von αs zu αs+1 auf die am weitesten links stehende Variable in αs eineProduktion angewendet wird.

Mit anderen Worten: In einer Linksableitung gilt fur jeden Ableitungsschritt

Y1 · · ·Ys A Z1 · · ·Zt ⇒ Y1 · · ·Ys X1 · · ·Xr Z1 · · ·Zt,

118

Page 121: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

dass Y1, . . . , Ys ∈ Σ sind.

Rechtsableitungen werden analog definiert: Produktionen werden immer auf die amweitesten rechts stehende Variable angewendet.

Beispiel: (Zu Grammatik aus Beispiel 4.2.1 )

S ⇒ SS ⇒ 0S1S ⇒ 00S11S ⇒ 0011S ⇒ 00110S1⇒ 001101

ist Linksableitung,

S ⇒ SS ⇒ S0S1⇒ S01⇒ 0S101⇒ 00S1101⇒ 001101

ist Rechtsableitung. Die Ableitung

S ⇒ SS ⇒ SSS ⇒ S0S1S ⇒ 0S1S ⇒ 0S10S1⇒ 010S1⇒ 0101

ist weder Links- noch Rechtsableitung.

Wenn man weiß, dass eine Ableitung eine Linksableitung (bzw. eine Rechtsableitung) ist,erubrigt es sich, in αs die Variable zu markieren, auf die eine Produktion angewendet wird– es ist immer die am weitesten links (bzw. rechts) stehende.

4.2.5 Proposition SeiG kontextfreie Grammatik, w ∈ Σ∗. Dann gilt: Ableitungsbaumeund Linksableitungen fur w entsprechen einander eineindeutig.

Die entsprechende Aussage gilt fur Ableitungsbaume und Rechtsableitungen.

Beispiel: Das Wort 010101 besitzt in der Grammatik aus 4.2.1 die beiden Linksableitungen

S ⇒ SS ⇒ 0S1S ⇒ 01S ⇒ 01SS ⇒ 010S1S ⇒ 0101S ⇒ 01010S1⇒ 010101,

S ⇒ SS ⇒ SSS ⇒ 0S1SS ⇒ 01SS ⇒ 010S1S ⇒ 0101S ⇒ 01010S1⇒ 010101,

entsprechend den beiden in Abb. 4.8 angegebenen Ableitungsbaumen. (Man suche dieentsprechenden Rechtsableitungen!)

S

S

S0 1

ε

S

S

S

S0 1

ε

S

S0 1

ε

S

S0 1

ε

S

S

S0 1

ε

S

S0 1

ε

Abbildung 4.8: Zwei verschiedene Ableitungsbaume fur das Wort 010101

119

Page 122: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Beweis von Proposition 4.2.5: Sei w ∈ L(G) fest.

Wenn eine beliebige Linksableitung LA fur w ∈ Σ∗ gegeben ist, so konnen wir wie im Be-weisteil

”(i) ⇒ (ii)“ von Lemma 4.2.3 daraus einen Ableitungsbaum TLA fur w erzeugen.

Sind zwei verschiedene Linksableitungen LA1 und LA2 fur w gegeben, so fuhren diese zuzwei verschiedenen Ableitungsbaumen TLA1

und TLA2. (Man betrachte den ersten Ablei-

tungsschritt, in dem sich LA1 und LA2 unterscheiden. Dabei mussen auf dieselbe Variablean derselben Position verschiedene Produktionen angewendet werden; dies schlagt sichdirekt in einem Unterschied in den Syntaxbaumen nieder.) Die Abbildung Φ: LA 7→ TLA

ist also injektiv.

Wenn man nun einen beliebigen Ableitungsbaum T fur w gegeben hat, so liefert dieKonstruktion aus Lemma 4.2.3

”(ii) ⇒ (i)“ eine Linksableitung LA(T ) fur w, und es gilt

TLA(T ) = T . Damit ist die Abbildung Φ auch surjektiv; sie stellt also eine Bijektion dar.�

Um diesen Beweis zu illustrieren, wende man die Konstruktionen aus 4.2.3 auf das nachBemerkung 4.2.5 angegebene Beispiel an.

4.2.6 Definition (a) Eine kontextfreie Grammatik G heißt mehrdeutig , wenn es einWort w ∈ L(G) gibt, das (mindestens) zwei verschiedene Ableitungsbaume besitzt. Sieheißt eindeutig , wenn jedes Wort w ∈ L(G) genau einen Ableitungsbaum besitzt.

(b) Eine Sprache L ∈ L2 heißt inharent mehrdeutig , wenn jede kontextfreie GrammatikG mit L = L(G) mehrdeutig ist.

Es ist fur die Syntaxanalyse (Konstruktion eines Ableitungs- oder Syntaxbaumes zueinem vorgelegten Wort w ∈ L(G)), wie sie z. B. in Compilern geleistet wird, sehr wich-tig, dass jedes Wort w ∈ L(G) nur einen Syntaxbaum, also auch nur eine Linksableitungbesitzt. Beim Entwurf von Programmiersprachen ist es also wichtig, eine eindeutige Gram-matik fur die Sprache zu haben. Insbesondere ist es ungunstig, wenn die Programmier-sprache selbst inharent mehrdeutig ist.

4.2.7 Beispiel (a) Die Grammatik aus Beispiel 4.2.1 fur kKA ist mehrdeutig, wie wiran den in Abb. 4.1 und 4.2 dargestellten verschiedenen Ableitungsbaumen fur das Wort0101 erkennen konnen. Dennoch ist die Sprache kKA nicht inharent mehrdeutig, da sieauch eine eindeutige Grammatik besitzt.

Wir behaupten namlich, und beweisen gleich, dass folgendes eine eindeutige Grammatikfur die Sprache kKA ist: G = ({S}, {0, 1}, S, P ), wo P die Produktionen S → ε , S →0S1S enthalt. (Man baue Ableitungsbaume in dieser Grammatik fur einige Worter w ∈kKA!)

(b) Ohne Beweis bemerken wir, dass die Sprache

L := {anbncm | n,m ∈ N} ∪ {ambncn | n,m ∈ N}

120

Page 123: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

eine inharent mehrdeutige kontextfreie Sprache ist. Die Aussage L ∈ L2 ist dabei nichtschwer zu zeigen. Folgendes ist eine naheliegende Grammatik fur L:

G = ({S,A,B}, {a, b, c}, S, P ),wobei P die folgenden Produktionen enthalt:

S → AD | ECA → aA | εD → bDc | εC → cC | εE → aEb | ε .

Zum Beispiel gibt es fur das Wort aabbcc die beiden folgenden verschiedenen Linksablei-tungen, anhand derer man auch die Idee hinter der Grammatik studieren kann:

S ⇒ AD ⇒ aAD ⇒ aaAD ⇒ aaD ⇒ aabDc⇒ aabbDcc⇒ aabbcc ;

S ⇒ EC ⇒ aEbC ⇒ aaEbbC ⇒ aabbC ⇒ aabbcC ⇒ aabbccC ⇒ aabbcc .

Der Nachweis der inharenten Mehrdeutigkeit ist aufwendiger und wird hier ausgelassen.Intuitiv benotigt jede Grammatik G′ mit L(G′) = L fur die beiden Teile der Spracheunabhangige

”Abteilungen“; die Worter anbncn fur große n mussen Ableitungen in beiden

”Abteilungen“ besitzen, die dann notwendig verschieden sind.

4.2.8 Proposition Es sei G = ({S}, {0, 1}, S, P ) mit P = {S → ε, S → 0S1S}. Danngilt:

(a) L(G) = kKA,

(b) G ist eindeutig.

Beweis : (a)

”⊆“: Durch Induktion uber die Lange t einer Ableitungsfolge

S = α0 ⇒ α1 ⇒ · · · ⇒ αt

beweist man, dass jede Satzform in der Grammatik G die Hilfsbehauptung (HBα) aus demBeweis von Prop. 4.1.4 erfullt. Das geht praktisch genau so wie dort vorgefuhrt. Darausfolgt dann, dass jedes w ∈ L(G) die Eigenschaft (∗) aus Prop. 4.1.3 hat, also ein korrekterKlammerausdruck ist.

”⊇“: Wir beweisen durch Induktion uber den Aufbau von korrekten Klammerausdrucken,

dass jeder korrekte Klammerausdruck w eine Ableitung in G besitzt.

I.A.: Wenn w = ε, ist S ⇒ ε eine Ableitung.I.S.: Nun sei w 6= ε ein korrekter Klammerausdruck. Nach der Definition ist w = 0w′1w′′

121

Page 124: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

fur korrekte Klammerausdrucke w′ und w′′. Nach I.V. gibt es Ableitungsfolgen S∗⇒ w′

und S∗⇒ w′′. Wenn wir diese Folgen mit dem Ableitungsschritt S ⇒ 0S1S kombinieren,

erhalten wir eine Ableitung

S ⇒ 0S1S∗⇒ 0w′1S

∗⇒ 0w′1w′′ = w,

wie gewunscht.

(b) Wir zeigen durch Induktion uber |w|, dass jedes Wort w ∈ L(G) genau eine Links-ableitung hat.

I.A.: Wenn w = ε, ist S ⇒ ε die einzige Ableitung fur w.I.V.: Es sei k ≥ 1, und fur jedes w′ ∈ L(G) gebe es genau eine Linksableitung. I.S.: Nunsei w ∈ L(G), w 6= ε, mit einer Linksableitung

S = α0 ⇒ 0S1S = α1 ⇒ · · · ⇒ αt = 0w′1w′′ = w.

Man denkt sich die 0 und die 1 in α1 = 0S1S permanent markiert (unterstrichen). Die-se Terminalzeichen werden ja nach dem ersten Ableitungsschritt nie mehr verandert.Da wir es mit einer Linksableitung von w zu tun haben, werden in einem ersten Teilα0 ⇒ · · · ⇒ αs der Ableitung Produktionen nur auf Variable zwischen 0 und 1 angewen-det, und αs = 0w′1S. Da man aus S nur Worter in L(G) erzeugen kann, ist w′ ∈ L(G)und der Teil der Ableitung α1 ⇒ · · · ⇒ αs, der sich zwischen 0 und 1 abspielt, bil-det eine Linksableitung fur w′. Nun ist |w′| < |w|, und daher ist nach der I.V. dieseAbleitung eindeutig bestimmt; daher sind α1, . . . , αs eindeutig bestimmt. Genauso argu-mentiert man, dass sich im zweiten Teil der Ableitung αs ⇒ · · · ⇒ αt im Teil rechts von1 eine Linksableitung fur das Wort w′′ abspielen muss. Wieder wegen der Eindeutigkeitdieser Linksableitung (nach I.V.) kann es auch nur eine Moglichkeit fur diesen zweitenTeil der Ableitung geben. Schließlich bemerkt man, dass 0w′1 das kurzeste Prafix von wist, das gleich viele Nullen wie Einsen enthalt. Damit sind die Teilworter w′ und w′′ durchw, nicht durch die spezielle Ableitung α0 ⇒ 0S1S ⇒ · · · ⇒ αt = w, festgelegt. Also kannes fur w nur diese eine Linksableitung geben; das ist die Induktionsbehauptung. �

Wir bemerken noch (ohne formalen Beweis), dass die Grammatik fur arithmetische Aus-drucke aus Beispiel 3.1.1 eindeutig ist. In den Ubungen wird eine mehrdeutige Grammatikfur klammerfreie arithmetische Ausdrucke besprochen.

4.3 Die Chomsky-Normalform

Sowohl fur theoretische Zwecke als auch fur praktische Anwendungen ist es gunstig, kon-textfreie Grammatiken zu haben, deren Produktionen noch engere Anforderungen erfullenals die bloße Kontextfreiheit. In diesem Abschnitt geben wir eine solche Normalform anund besprechen einen Konstruktionsalgorithmus dafur. Anwendungen werden in spaterenAbschnitten angegeben.

122

Page 125: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

4.3.1 Definition Eine kontextfreie Grammatik G = (V,Σ, S, P ) ist in Chomsky-Normalform, falls

• entweder alle Produktionen von G die Form

A→ BC (A,B,C ∈ V ) oder A→ a (A ∈ V, a ∈ Σ)

haben

• oder alle Produktionen von G die Form

A→ BC oder A→ a oder S → ε

haben, und S nie auf der rechten Seite einer Produktion vorkommt.

4.3.2 Beispiel (a) Die Grammatik G = (V,Σ, S, P ) mit V = {S,R,A,B, F,H},Σ = {0, 1}, Startsymbol S und Produktionen

S → ε | AFR → AF

F → BR | RH | 1H → BR | 1A → 0

B → 1

erfullt die Anforderungen der Definition. Die Produktion S → ε kommt vor; S kommtnicht auf der rechten Seite irgendeiner Produktion vor.

Die einzige Moglichkeit, das Wort ε zu erzeugen, ist mit der 1-Schritt-Ableitung S ⇒ ε.An der Beispiel-Linksableitung

S ⇒ AF ⇒ 0F ⇒ 0RH ⇒ 0AFH ⇒ 00FH ⇒ 00BRH ⇒ 001RH ⇒ 001AFH ⇒0010FH ⇒ 00101H ⇒ 00101BR⇒ 001011R⇒ 001011AF ⇒ 0010110F ⇒ 00101101

fur ein Wort 6= ε erkennt man, dass in jedem Ableitungsschritt entweder die Zahl derZeichen um 1 steigt oder eine Variable in ein Terminalzeichen umgewandelt wird. Daraussieht man sofort, auch allgemein, dass die Zahl der Ableitungsschritte in einer Grammatikin Chomsky-Normalform fur ein Wort w mit n Buchstaben genau 2n − 1 betragt. EineSatzform besteht immer aus 0 oder mehr Terminalzeichen, gefolgt von 0 oder mehr Varia-blen. Der Ableitungsbaum, der der Beispiel-Linksableitung entspricht, sieht folgenderma-ßen aus: Wieder erkennt man schon am Beispiel, dass Ableitungsbaume fur n-buchstabigeWorter genau n Blatter haben, die mit Terminalzeichen beschriftet sind, und dass derTeil des Baums, dessen Knoten mit Variablen beschriftet sind, einen

”vollen“ Binarbaum

123

Page 126: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

1

0

0

0 1

1

0

1

F

A

A

B

A F

A F

R

R

S

B R

H

F

Abbildung 4.9: Ein Ableitungsbaum zu einer Grammatik in Chomsky-Normalform

mit n Blattern darstellt.2 Man weiß, dass solche Baume 2n− 1 Knoten haben (die genauden Ableitungsschritten entsprechen).

Wie im Beispiel gilt allgemein, dass Ableitungen und Ableitungsbaume in Grammatikenin Chomsky-Normalform sehr stark standardisiert und ubersichtlich sind.

(b) Die Grammatik G = (V,Σ, S, P ) mit V = {S,A,B, F,H}, Σ = {0, 1}, Startsymbol Sund Produktionen

S → AF

F → BS | SH | 1H → BS | 1A → 0

B → 1

erfullt ebenfalls die Anforderungen der Definition. Die Startvariable erscheint auf derrechten Seite von Produktionen, aber es gibt uberhaupt keine ε-Produktion.

2Ein Binarbaum heißt”voll“, wenn jeder Knoten, der kein Blatt ist, genau zwei Nachfolger hat.

124

Page 127: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Der Leser/die Leserin ist eingeladen, einige Ableitungen und Ableitungsbaume fur dieseGrammatik zu entwickeln und zu spekulieren, welche Sprache zu G gehort.

4.3.3 Definition Zwei Grammatiken G und G′ heißen aquivalent , wenn L(G) =L(G′) gilt.

Am Ende dieses Abschnitts werden wir folgenden Satz bewiesen haben:

4.3.4 Satz Jede kontextfreie Grammatik G kann in eine aquivalente Grammatik G′ inChomsky-Normalform umgebaut werden.

Hierfur gehen wir in vier Schritten vor:

1. Separieren der Terminalzeichen-Produktionen

2. Verkurzen der rechten Seiten

3. Elimination der ε-Produktionen A→ ε

4. Elimination von Kettenregeln A→ B

4.3.1 Separierung

Zunachst wollen wir Produktionen, die Terminalzeichen erzeugen, von solchen trennen,die Variable erzeugen. Es soll also niemals auf einer rechten Seite eine Mischung von Ter-minalzeichen und Variablen stehen; zudem sollen niemals Blocke von mehreren Terminal-zeichen erzeugt werden. Es gibt keinen Grund, sich fur diese Uberlegung auf kontextfreieGrammatiken zu beschranken.

4.3.5 Definition Eine Grammatik G = (V,Σ, S, P ) (im Sinn von Definition 3.1.2)heißt separiert , wenn Terminalzeichen nur in Produktionen der Form

A→ a (A ∈ V , a ∈ Σ)

vorkommen. (Alle anderen Produktionen haben die Form

X1 · · ·Xs → Y1 · · ·Yt,

mit s ≥ 1, t ≥ 0, X1, . . . , Xs, Y1, . . . , Yt Variable.)

4.3.6 Lemma Jede Grammatik G = (V,Σ, S, P ) kann in eine aquivalente separierteGrammatik G′ = (V ′,Σ, S, P ′) umgebaut werden.

125

Page 128: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Beweis : Fur jedes a ∈ Σ wird eine neue Variable Da eingefuhrt. In allen Produktionen inP wird auf der linken und auf der rechten Seite a durch Da ersetzt. Weiterhin werden neueRegeln Da → a, fur a ∈ Σ, hinzugefugt. Offenbar gilt fur die resultierende Grammatik

G′ := (V ∪ {Da | a ∈ Σ},Σ, S, P ′),

dass L(G) = L(G′). �

4.3.7 Beispiel Wenn man die angegebene Konstruktion auf G = ({S}, {0, 1}, S, P )mit P = {S → ε | 0S1S} anwendet, braucht man zwei neue Variable, etwa A (als D0)und B (als D1). Die Produktionen der neuen Grammatik G′ sind dann:

S → ε | ASBSA → 0

B → 1

4.3.8 Beispiel Weiter wenden wir die Konstruktion aus Lemma 4.3.6 auf die Gram-matik aus Beispiel 3.1.1 an, die die folgenden Produktionen hat:

〈factor〉 → num | (〈expr〉)〈term〉 → 〈term〉 * 〈factor〉

| 〈term〉 / 〈factor〉| 〈factor〉

〈expr〉 → 〈expr〉 + 〈term〉| 〈expr〉 - 〈term〉| 〈term〉

Wir fuhren fur jedes Terminalzeichen eine neue Variable und eine Produktion ein, zumBeispiel wie folgt:

〈num〉 → num

〈likla〉 → (

〈rekla〉 → )

〈plus〉 → +

〈minus〉 → -

〈times〉 → *

〈over〉 → /

126

Page 129: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Die alten Produktionen sehen nach der Anderung wie folgt aus:

〈factor〉 → 〈num〉 | 〈likla〉〈expr〉〈rekla〉〈term〉 → 〈term〉 〈times〉 〈factor〉

| 〈term〉 〈over〉 〈factor〉| 〈factor〉

〈expr〉 → 〈expr〉 〈plus〉 〈term〉| 〈expr〉 〈minus〉 〈term〉| 〈term〉

4.3.2 Verkurzung rechter Seiten

Als nachsten Schritt mochten wir erreichen, dass unsere Grammatiken keine Produktionenmehr haben, bei denen auf der rechten Seite mehr als zwei Variable stehen. Das ist ganzleicht.

4.3.9 Lemma Jede separierte kontextfreie Grammatik G = (V,Σ, S, P ) kann in eineaquivalente separierte kontextfreie Grammatik G′ = (V ′,Σ, S, P ′) umgebaut werden, dienur noch Produktionen der folgenden Form hat:

• A→ ε,

• A→ a, mit A ∈ V , a ∈ Σ,

• A→ B, mit A,B ∈ V ,

• A→ BC, mit A,B,C ∈ V .

Beweis : Wir bearbeiten jede Produktion

A→ C1C2 · · · Cr

in P mit r ≥ 3 separat. Es werden r − 2 neue Variable Y2, . . . , Yr−1 (die nur fur dieseProduktion verwendet werden) zu V hinzugenommen; die folgenden Produktionen werdenzu P hinzugefugt:

A → C1 Y2

Y2 → C2 Y3

...

Yr−1 → Cr−1Cr.

Schließlich wird die Produktion A → C1C2 · · · Cr gestrichen. Die neue Variablenmengeheißt V ′; die neue Produktionenmenge P ′.

127

Page 130: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Es ist offensichtlich, dass in der neuen Grammatik G′ gilt:

A⇒ C1 Y2 ⇒ C1C2 Y3 ⇒ · · · ⇒ C1C2 · · · Yr−1 ⇒ C1C2 · · · Cr−1Cr.

Daher sind in G′ mindestens alle Worter von L(G) ableitbar. Umgekehrt kann man sichuberlegen, dass die neuen Variablen zu nichts anderem verwendet werden konnen, als ineiner Teilableitung oder in einem Teil des Ableitungsbaums A in C1 · · ·Cr zu transformie-ren. In der Notation der Ableitungsbaume sieht die Ubersetzung so aus: ersetze

A

1C

α 1

Cr

A

D2

r-1C Cr

Dr-1

1C

C2

...

...α r α 1

α

α α

2

r-1 r

durch

und umgekehrt. �

4.3.10 Beispiel Wenn wir mit der separierten Grammatik G = ({S,A,B}, {0, 1}, S, P )aus Beispiel 4.3.7 beginnen, die die Produktionen

S → ε | ASBSA → 0

B → 1

hat, benotigen wir zwei neue Variable, etwa F und H, und die neuen Produktionen

S → AF

F → SH

H → BS .

Die Produktion S → ASBS wird gestrichen.

128

Page 131: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

4.3.3 Bearbeitung von ε-Produktionen

Der erste ernsthafte Schritt in der Konstruktion der Chomsky-Normalform ist die Elimi-nation der ε-Regeln aus der Grammatik.

Hier gehen wir in zwei Teilschritten vor: Zunachst losen wir (fur eine beliebige kontextfreieGrammatik G) das Problem herauszufinden, aus welchen Variablen man das leere Wortableiten kann: wir bestimmen die Menge

Vε = {A ∈ V | A ∗⇒ ε} .

In einem zweiten Schritt bauen wir eine separierte GrammatikGmit kurzen rechten Seitenzu einer Grammatik G′ fur L(G)−{ε} um, so dass in G′ uberhaupt keine ε-Produktionenvorkommen.

Teilschritt 1: Ermittlung von Vε. Dies geschieht mit einem Markierungsalgorithmus.Eingabe ist eine kontextfreie Grammatik G = (V,Σ, S, P ).

Markierungsalgorithmus fur Vε

Auszufuhren auf einer Tabelle aller Produktionen in P

Runde 0: Markiere alle (Vorkommen von) A, wo A→ ε Produktion

Runde t: (t = 1, 2, . . .)

Wenn A→ C1C2 · · ·Cr Produktion, r ≥ 1, und C1, . . . , Cr sind alle markiert und A istunmarkiert

dann markiere (alle Vorkommen von) A .

Ausgabe: Menge der markierten Variablen .

4.3.11 Beispiel Die Liste der Produktionen konnte wie folgt aussehen:

S → BB

S → ABC

A → aA

A → a

B → bB

B → ε

C → SBT

T → A

T → BT

T → B

In Runde 0 wird B markiert (unterstrichen), und zwar alle neun Exemplare, die vor-kommen. In den Runden 1, 2 und 3 folgen S, T und C. Schließlich sieht die Tabelle so

129

Page 132: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

aus:

S → BB

S → ABC

A → aA

A → a

B → bB

B → ε

C → SBT

T → A

T → BT

T → B

Die Variable A kann nicht markiert werden, was der intuitiven Beobachtung entspricht,dass aus A das leere Wort nicht ableitbar ist. Fur diese Grammatik ergibt sich also Vε ={B,S, T, C}.

4.3.12 Proposition Fur das Resultat des Markierungsalgorithmus gilt:

(a) A wird markiert ⇔ A∗⇒ ε.

(b) A wird markiert ⇔ es gibt einen A-Ableitungsbaum T mit α(T ) = ε.

(c) ε ∈ L(G) ⇔ S wird markiert.

Beweis : Nach Lemma 4.2.3 sind (a) und (b) aquivalent. Weiter ist es klar, dass (c) aus(a) folgt. Es genugt also, (b) zu beweisen.

(b)”⇒“: Man zeigt durch eine einfache Induktion uber Markierungsschritte, dass es zu

jeder markierten Variablen A einen A-Ableitungsbaum TA,ε mit α(TA,ε) = ε gibt.

I.A.: Wenn A in Runde 0 markiert wird, gibt es die Produktion A → ε und daher denA-Ableitungsbaum

A

ε

I.S.: Nun betrachte eine Variable A, die in Runde t ≥ 1 markiert wird. Dies passiert, weiles eine Produktion A→ C1 · · ·Cr gibt, wobei die Variablen C1, . . . , Cr in fruheren Rundenmarkiert wurden. Nach der I.V. gibt es also fur jedes i, 1 ≤ i ≤ r, einen Ci-AbleitungsbaumTCi,ε mit Ergebnis α(TCi,ε) = ε. Diese Baume konnen wir wie in Abb. 4.10 angegeben zueinem A-Ableitungsbaum TA,ε zusammenbauen. Dies liefert die Induktionsbehauptung.

130

Page 133: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

:

1 εC ,r ε

C1 Cr

A,εA

εε

TT

T

C ,

Abbildung 4.10: Struktur eines A-Ableitungsbaums mit Ergebnis ε

(b)”⇐“:

Wir zeigen: Falls es einen A-Ableitungsbaum TA gibt, der Tiefe d hat und α(TA) = εerfullt, so wird A markiert.

(Man sollte sich uberlegen, dass dies keineswegs offensichtlich ist. Der Baum TA konnteim Prinzip sehr groß sein, und es ist nicht klar, wieso der Markierungsalgorithmus, derja hochstens |V | Runden ausfuhrt, feststellt, dass ε aus A ableitbar ist. Der Beweis zeigtaber, dass es in diesem Fall auch einen kleinen A-Ableitungsbaum mit Ergebnis ε gebenmuss, den der Algorithmus finden kann.)

Wir benutzen Induktion uber d.

I.A.: d = 1: Dann sieht TA wie folgt aus:

A

ε

Es muss also A→ ε Produktion in P sein; also wird A in Runde 0 markiert.

I.V.: d ≥ 2, und die Aussage stimmt fur d′ < d.

I.S.: Es sei d ≥ 2 und ein Baum TA der Tiefe d gegeben. Dann gibt es Variable C1, . . . ,Cr, r ≥ 1, und eine Produktion A→ C1 · · ·Cr derart, dass TA folgendermaßen aussieht:

131

Page 134: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

r

1 Cr

A

εε

TA

:

TT

C1

C

C

Die Unterbaume TC1, . . . , TCr

haben alle Tiefe kleiner als d, und jeder liefert als Ergebnisε. Nach I.V. werden also die Variablen C1, . . . , Cr alle markiert. Daraus folgt, nach derFormulierung des Algorithmus, und weil A → C1 · · ·Cr Produktion ist, dass auch dieVariableA irgendwann einmal markiert werden muss. Damit ist die Induktionsbehauptunggezeigt. �

Mit den vorangegangenen Uberlegungen konnen wir fur jede kontextfreie Grammatik Gdie Menge Vε ermitteln und auch feststellen, ob ε ∈ L(G) ist oder nicht.

Ausflug: Produktive und uberflussige Variable

Mit den eben fur Vε entwickelten Techniken lasst sich auch eine andere fundamentaleFrage uber eine gegebene kontextfreie Grammatik G losen, namlich ob L(G) = ∅ ist, oder

aquivalent, ob S∗⇒ w fur mindestens ein Wort w ∈ Σ∗ ist. Allgemeiner betrachtet man

folgende Eigenschaft von Variablen:

4.3.13 Definition Eine Variable A in einer kontextfreien Grammatik G = (V,Σ, S, P )

heißt produktiv , wenn es ein Terminalzeichenwort w mit A∗⇒ w gibt.

(Aquivalent: . . . wenn es einen A-Ableitungsbaum T mit α(T ) ∈ Σ∗ gibt.)

Die Menge der produktiven Variablen heißt Vprod.

Eine Variable A, die nicht produktiv ist, heißt uberflussig .

Man kann sich leicht uberlegen, dass eine uberflussige Variable in keinem Ableitungsbaumzur Grammatik G vorkommen kann, der als Ergebnis ein Terminalzeichenwort hat. Pro-duktionen, in denen solche Variablen vorkommen, konnen also weggelassen werden, ohnedie Sprache zu verandern. Die Sprache L(G) ist leer genau dann wenn S uberflussig ist.

Wenn G = (V,Σ, S, P ) gegeben ist, ermitteln wir die Menge der produktiven Variablendurch einen Markierungsalgorithmus, der dem fur Vε sehr ahnelt.

132

Page 135: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Markierungsalgorithmus fur Vprod

Auszufuhren auf einer Tabelle aller Produktionen in P

Runde 0: Markiere alle (Vorkommen von) A, wo A→ w Produktion fur ein w ∈ Σ∗

Runde t: (t = 1, 2, . . .)

Wenn A → X1X2 · · ·Xr Produktion, r ≥ 1, und X1X2 · · ·Xr sind markierte Variableoder Terminalzeichen, und A ist unmarkiert

dann markiere (alle Vorkommen von) A .

Ausgabe: Menge der markierten Variablen .

4.3.14 Proposition Fur das Resultat des Markierungsalgorithmus gilt:

(a) A wird markiert ⇔ A∗⇒ w fur ein w ∈ Σ∗.

(b) A wird markiert ⇔ es gibt einen A-Ableitungsbaum T mit α(T ) ∈ Σ∗.

(c) L(G) 6= ∅ ⇔ S wird markiert.

Der Beweis dieser Behauptung verlauft ganz genau so wie der fur Proposition 4.3.12.(Eine gute Ubung!)

4.3.15 Beispiel Betrachte folgende Produktionen:

S → ABC | ADC | AFA → aA | aB → bB

C → cC | εD → S | EabcE → AE | AaE | ACAF → FB | abB | FF

In Runde 0 werden die Variablen A und C markiert, wegen der Produktionen A→ a undC → ε. In Runde 1 wird E markiert (wegen der Produktion E → ACA), in Runde 2 D(wegen der Produktion D → Eabc) und in Runde 3 schließlich S (wegen der ProduktionS → ADC). Es ergibt sich die Tabelle

S → ABC | ADC | AFA → aA | aB → bB

C → cC | εD → S | EabcE → AE | AaE | ACAF → FB | abB | FF.

133

Page 136: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Keine weitere Variable kann mehr markiert werden. Als produktiv stellen sich also A,C, E, D und S heraus Weil S produktiv ist, erzeugt die Grammatik auch mindestensein Terminalzeichenwort. Als uberflussig ergeben sich B und F . (In diesem konkretenBeispiel ist auch intuitiv zu sehen, dass man die Variable B nie

”loswerden“ kann, auch

wenn man noch so viele Ableitungsschritte durchfuhrt, und dass sich dies dann auch aufF ubertragt.)

Dies beendet unsere kurze Diskussion von produktiven und uberflussigen Variablen. Wirkehren zuruck zur Konstruktion der Chomsky-Normalform, und hier konkret zur Elimi-nation von ε-Produktionen.

Teilschritt 2: Gegeben sei eine kontextfreie Grammatik G = (V,Σ, S, P ), in der es nurProduktionen der Form

• A→ ε,

• A→ a, mit A ∈ V , a ∈ Σ,

• A→ B, mit A,B ∈ V ,

• A→ BC, mit A,B,C ∈ V .

gibt. Auf diese Grammatik wenden wir den Markierungsalgorithmus fur ε-produzierendeVariable an, und erhalten Vε.

P ′ entsteht aus P durch folgende Anderungen:

• Wenn A→ BC Produktion und B ∈ Vε, fuge A→ C hinzu

• Wenn A→ BC Produktion und C ∈ Vε, fuge A→ B hinzu

• Streiche alle Produktionen A→ ε

4.3.16 Lemma Die Grammatik G′ = (V,Σ, S, P ′) erfullt L(G′) = L(G)− {ε}.

Bevor wir das Lemma beweisen, geben wir ein Beispiel an.

4.3.17 Beispiel In der GrammatikG = ({S,A,B, F,H}, {0, 1}, S, P ) aus Beispiel 4.3.10mit den Produktionen:

S → ε | AFF → SH

H → BS

A → 0

B → 1

134

Page 137: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

ergibt sich: Vε = {S}. Die folgenden Produktionen werden hinzugefugt:

F → H

H → B

die Produktion S → ε wird gestrichen. Damit ergibt sich als neue ProduktionenmengeP ′:

S → AF

F → H | SHH → B | BSA → 0

B → 1

Die Grammatik G′ = ({S,A,B, F,H}, {0, 1}, S, P ′) erzeugt L(G)−{ε}, das ist die Mengealler korrekten Klammerausdrucke ohne ε.

Beweis von Lemma 4.3.16: Wir mussen zeigen, dass man einen Ableitungsbaum fur w ∈Σ+ in G in einen in G′ umbauen kann und umgekehrt.

”⊇“: Gegeben ist ein Ableitungsbaum T fur das Wort w 6= ε in der alten GrammatikG. Wenn dieser Baum keine ε-Produktionen benutzt, sind wir fertig, weil dann T selbstein Baum fur die neue Grammatik G′ ist. Andernfalls suchen wir in T einen maximalenUnterbaum T0 mit α(T0) = ε.

”Maximal“ heißt hier, dass jeder Unterbaum, der T0 echt

T’

/

S

T

ε

T

B C

A

ε

BC

T :

=/

S

A

:T’

C

ε

C

=

Abbildung 4.11: Links: G-Baum, mit Produktion A → BC, der C-Unterbaum liefert ε.Rechts: entsprechender G′-Baum, mit Produktion A→ B, keine ε-Produktionen

enthalt, Ergebnis 6= ε hat. Es ist klar, dass T0 nicht der ganze Baum T ist (denn α(T ) 6= ε).Also hat die Wurzel von T0, die etwa mit B beschriftet ist, einen Vorganger (mit A

135

Page 138: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

beschriftet). Der Teilbaum unter dem A-Knoten kann nicht Ergebnis ε haben (da T0

maximal groß ist). Also hat der B-Knoten einen Bruder, etwa mit C beschriftet, und derUnterbaum unter dem C-Knoten liefert ein Ergebnis 6= ε. Dies liefert den ersten Baumin Abbildung 4.11.

Wir ersetzen die Produktion A→ BC im Baum T durch die Produktion A→ C aus derneuen GrammatikG′, ohne dass sich das Ergebnis des Baums andert. Diesen Schritt fuhrenwir gleichzeitig fur alle maximalen ε-erzeugenden Unterbaume aus. Dadurch andert sicheventuell auch der Baum TC unter dem C-Knoten in einen neuen Baum T ′C . Das Resultatist als zweiter Baum in Abb. 4.11 angegeben. Insgesamt erhalten wir einen Baum zurGrammatik G′ mit Ergebnis w.

”⊆“: Gegeben ist ein Ableitungsbaum T ′ fur das Wort w in der neuen GrammatikG′. Diese

benutzt Produktionen, die in G nicht vorkommen. Betrachte zum Beispiel die ProduktionA → C, die in P ′ ist, weil P die Produktion A → BC enthalt und B ∈ Vε ist. Dasbedeutet, dass es in G einen B-Ableitungsbaum TB,ε, gibt, der als Ergebnis ε liefert. Nunersetzen wir in T ′ einfach jedes Knotenpaar, das der Produktion A→ C entspricht, durcheine Unterstruktur fur die Produktion A → BC und hangen unter den B-Knoten denUnterbaum TB,ε. Diese Transformation ist in Abb. 4.12 skizziert.

ε

/=/

S

A

:T’

C

ε

CT

S

T

ε

T

B C

A

ε

C

T :

B,

=

Abbildung 4.12: Links: G′-Baum mit neuer Produktion A → C. Rechts: G-Baum furdasselbe Wort, mit Produktion A→ BC und B-Ableitungsbaum TB,ε mit Ergebnis ε

Durch eine solche Anderung andert sich das Ergebnis des Gesamtbaums nicht. Wenn wirdiesen Umbau fur alle in T ′ verwendeten neuen Produktionen durchfuhren, erhalten wireinen Ableitungsbaum fur w in der alten Grammatik G.

Damit ist Lemma 4.3.16 bewiesen. �

4.3.18 Lemma Jede separierte kontextfreie Grammatik G = (V,Σ, S, P ) mit Produk-

136

Page 139: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

tionen der FormA→ ε, A→ a, A→ B, A→ BC,

mit A,B,C ∈ V , a ∈ Σ, kann in eine aquivalente separierte kontextfreie GrammatikG′ = (V ′,Σ, S, P ′) umgebaut werden, die folgendes erfullt:

• entweder sind alle Produktionen von der Form A→ a, A→ B oder A→ BC,

• oder alle Produktionen sind von der Form A → a, A → B, A → BC oder S → εund S kommt nicht auf der rechten Seite einer Produktion vor.

Diese Grammatik G′ ist kontextsensitiv im Sinn von Definition 3.1.6(b).

Beweis : Sei L ∈ L2, also L = L(G) fur eine kontextfreie Grammatik G. Nach 4.3.9 und4.3.16 existiert eine kontextfreie Grammatik G1 = (V1,Σ, S, P1) mit L(G1) = L(G)−{ε},wobei P1 nur Produktionen der Form A→ a, A→ B und A→ BC hat. Demnach bestehtP1 nur aus kontextsensitiven Produktionen (Definition 3.1.6(a)).

1. Fall : ε 6∈ L. Dann ist L = L(G1), und wir konnen G′ = G1 wahlen.

2. Fall : ε ∈ L. Dann ist L = L(G′) fur die Grammatik

G′ = (V1 ∪ {S ′},Σ, S ′, P1 ∪ {S ′ → S, S ′ → ε}).

Diese erfullt die aufgefuhrten Anforderungen, ist also insbesondere kontextsensitiv. �

Wir notieren, dass wir mit Lemma 4.3.18 einen entscheidenden Schritt in Richtung Chomsky-Hierarchie getan haben. (Siehe hierzu die Bemerkungen zur Chomsky-Hierarchie am Endevon Abschnitt 3.2.)

4.3.19 Korollar Jede kontextfreie Sprache ist kontextsensitiv, in Zeichen:

L2 ⊆ L1

Beweis : Nach Lemma 4.3.9 kann jede kontextfreie Grammatik G in eine aquivalente kon-textsensitive Grammatik G′ umgebaut werden. �

4.3.4 Elimination von Kettenregeln

Mit der kontextsensitiven Form aus Lemma 4.3.18 sind wir noch immer nicht ganz zufrie-den. Wir wollen auch noch die

”Kettenregeln“, das sind Produktionen der Form A → B

fur A,B ∈ V , eliminieren.

Wir starten hierzu mit einer Grammatik G = (V,Σ, S, P ) mit Produktionen der Form wiein Lemma 4.3.18 fur G′ angegeben.

137

Page 140: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Zunachst konnen wir alle Produktionen der FormA→ A weglassen, da Ableitungsschritte,die diese Produktion benutzen, nichts andern. Die verbleibende Menge aller Kettenregelnin P nennen wir P1.

Die Idee fur das Weitere ist, Ableitungsfolgen der Form

A = A0 ⇒ A1 ⇒ · · · ⇒ At = B ⇒ CD

bzw.A = A0 ⇒ A1 ⇒ · · · ⇒ At = B ⇒ a

durch Hinzufugen von Produktionen A → CD bzw. A → a”kurzzuschließen“. Dadurch

entstehen naturlich keine Ableitungen fur Worter, die nicht schon vorher in L(G) waren.Nun werden alle Kettenregeln A → B weggelassen, und man muss sich uberlegen, dassdadurch die Menge der ableitbaren Worter nicht schrumpft.

4.3.20 Beispiel (a) Wir betrachten die Grammatik G = ({S,A,B, F,H}, {0, 1}, S, P )aus Beispiel 4.3.17 mit Produktionen:

S → AF

F → SH | HH → BS | BA → 0

B → 1

Hier gibt es die Ableitungsfolgen F ⇒ H ⇒ B ⇒ 1, F ⇒ H ⇒ BS und H ⇒ B ⇒ 1.Entsprechend fugen wir die neuen Produktionen

F → 1

F → BS

H → 1

hinzu. Die Kettenregeln F → H und H → B fallen weg. Dies liefert die folgende Listevon Produktionen:

S → AF

F → SH | BS | 1H → BS | 1A → 0

B → 1

Diese Grammatik in Chomsky-Normalform haben wir schon in Beispiel 4.3.2(b) gesehen.Aus dem Erzeugungsprozess folgt, dass sie die Klammersprache ohne ε erzeugt.

138

Page 141: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

(b) Weiter betrachten wir die Grammatik Gε = ({Sε, S, A,B, F,H}, {0, 1}, Sε, P ∪{Sε →ε | S}), die aus der Grammatik aus Beispiel 4.3.17 durch Hinzufugen eines speziellen neuenStartsymbols Sε hervorgeht. Wenn man hier alle Ketten uberbruckt und die Kettenregelnweglasst, ergibt sich die folgende Produktionenmenge fur die volle Klammersprache inChomsky-Normalform:

Sε → ε | AFS → AF

F → SH | BS | 1H → BS | 1A → 0

B → 1

Wenn wir hier S in R und dann Sε in S umbenennen, erhalten wir die Grammatik ausBeispiel 4.3.2(a).

Die formale Konstruktion besteht aus zwei Phasen.

Phase (a): Fur jedes A ∈ V ermittle die Menge

VA = {B ∈ V | A ∗⇒ B und A 6= B}.

Das heißt, B ∈ VA genau dann wenn

A = A0 ⇒ A1 ⇒ · · · ⇒ At = B

fur eine Variablenfolge A0, . . . , At, t ≥ 0, und A 6= B.

Algorithmisch gehen wir dazu folgendermaßen vor: Wir fassen V als Knotenmenge undE = P1 als Kantenmenge eines Graphen H = (V,E) auf. Nun ermitteln wir fur jedesA ∈ V durch Breitensuche die Menge VA = {B ∈ V | B ist von A aus erreichbar}. DerZeitaufwand hierfur ist O(|V | · (|V |+ |P1|)), also polynomiell.

Phase (b): Fur jede Kombination

A ∈ V, B ∈ VA, B → a in P

fugen wir die Produktion A→ a zu P hinzu; fur jede Kombination

A ∈ V, B ∈ VA, B → CD in P

fugen wir die Produktion A→ CD zu P hinzu. Alle Kettenregeln A→ B werden aus Pentfernt. Die neue Produktionenmenge heißt dann P ′; die neue Grammatik G′.

Man sieht sofort, dass in der neuen Grammatik G′ = (V,Σ, S, P ′) nicht mehr Worter ab-leitbar sind als in G. Umgekehrt kann man einen Ableitungsbaum T fur ein Wort w in derGrammatik G immer zu einem in der Grammatik G′ umbauen, indem man in T maximal

139

Page 142: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

lange Ketten von Knoten mit jeweils einem Nachfolger sucht, die dann TeilableitungenA = A0 ⇒ A1 ⇒ · · · ⇒ At = B ⇒ a bzw. . . . At = B ⇒ CD entsprechen, und diese Ket-ten durch die Unterstrukturen zur Grammatik G′ ersetzt, die den Teilableitungen A⇒ abzw. A⇒ CD entsprechen.

Wir ersetzen also

2

11

2

B

a

A

A

A

A

A

A

bzw.

C D

B

im Ableitungsbaum durch

C D a

A A

bzw.

und umgekehrt.

140

Page 143: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

4.4 Das Pumping-Lemma fur kontextfreie Sprachen

Wir benutzen die Chomsky-Normalform, um ein Pumping-Lemma ahnlich dem fur re-gulare Sprachen (Satz 2.4.1) zu beweisen. Dieses Lemma, das eine grundlegende Struktur-eigenschaft kontextfreier Sprachen formuliert, wird gewohnlich dafur benutzt (in ahnlicherWeise wie in Abschnitt 2.4 das fur regulare Sprachen), um nachzuweisen, dass gewisseSprachen nicht kontextfrei sind.

4.4.1 Satz (Pumping-Lemma fur kontextfreie Sprachen) Wenn L eine kontext-freie Sprache uber Σ ist, dann gibt es eine Zahl n ≥ 1, fur die folgendes gilt : Fur jedesz ∈ L mit |z| ≥ n gibt es Worter u, v, w, x, y ∈ Σ∗, derart dass :

(i) z = uvwxy,

(ii) |vwx| ≤ n,

(iii) |v|+ |x| ≥ 1,

(iv) ∀i ∈ N : uviwxiy ∈ L.

Beweis : Weil L kontextfrei ist, gibt es fur L eine Grammatik G = (V,Σ, S, P ) in Chomsky-Normalform (Definition 4.3.1 und Satz 4.3.4). – Wir definieren

n := 2|V |

und zeigen, dass diese Zahl die verlangten Eigenschaften hat.

Sei dazu z ∈ L = L(G) mit |z| ≥ n. Dann gibt es einen Ableitungsbaum T fur z in G. Weiln ≥ 1 ist und G in Chomsky-Normalform ist, kann in diesem Baum keine ε-Produktionbenutzt werden. Beispielsweise (Abb. 4.13) betrachte man nochmals den Ableitungsbaumaus Abb. 4.9 zur Grammatik aus Beispiel 4.3.2.

Da in der Grammatik G Terminalzeichen a ∈ Σ nur durch Produktionen A → a er-zeugt werden, hat T genau |z| viele Variablenknoten, die als Nachfolger ein (mit einemTerminalzeichen beschriftetes) Blatt haben; alle anderen Knoten haben genau zwei Nach-folger. Anders ausgedruckt: Der Variablenteil des Ableitungsbaumes bildet einen

”vollen

Binarbaum“.

Behauptung: Ein voller Binarbaum, in dem auf dem langsten Weg von der Wurzel zueinem Blatt genau d Knoten liegen, hat maximal 2d−1 viele Blatter.

(Dies beweist man durch Induktion uber d. I.A.: Wenn der langste Weg einen Knotenhat, besteht der Baum nur aus der Wurzel und hat 20 Blatter. I.S.: Sei nun d > 1. Imlinken Teilbaum hat der langste Weg maximal d− 1 Knoten, also hat der linke Teilbaumnach I.V. hochstens 2d−2 Blatter. Dasselbe gilt fur den rechten Teilbaum. Insgesamt gibtes also hochstens 2 · 2d−2 = 2d−1 Blatter.)

141

Page 144: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

1

0

0

0 1

1

0

1

F

A

A

B

A F

A F

R

R

S

B R

H

F

Abbildung 4.13: Ein Ableitungsbaum zu einer Chomsky-Normalform-Grammatik

Wir wahlen nun im Ableitungsbaum T fur z einen Wurzel-Blatt-Weg mit maximalerKnotenzahl; diese sei l. Nach der

”Behauptung“ gilt

2|V | = n ≤ |z| ≤ 2l−1,

also |V | < l. (Diese kleine Rechnung ist der Grund dafur, dass wir n = 2|V | gewahlthaben.)

142

Page 145: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

z

V

:TS

A

A

A

V

a

¦ |A

| |+1 Knoten

0

2

1

Abbildung 4.14: Ein maximal langer Weg in Ableitungsbaum T

Wir nennen die Variablen auf diesem Weg, vom Blatt her zahlend, A0, A1, . . . , Al−1. (SieheAbb. 4.14.) Nach dem Schubfachprinzip muss in der Folge A0, . . . , A|V | eine Variablewiederholt vorkommen. Wir konnen also i, j wahlen mit 0 ≤ i < j ≤ |V | und Ai = Aj.Die doppelt vorkommende Variable wird A genannt. Damit haben wir die in Abb. 4.15skizzierte Situation.

az

S

A

A

A

V

T :

<| |+1 Knoten

0

Abbildung 4.15: Eine Variablenwiederholung

143

Page 146: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Die beiden ausgewahlten Positionen in der Folge A0, . . . , A|V | bestimmen die Wurzeln vonzwei Unterbaumen T1 (Knoten zu Aj) und T2 (Knoten zu Ai) von T . Beide Knoten sindmit A beschriftet, siehe Abb. 4.16.

y

S

T

T

A

T

u v w x

A

:

:

:

2

1

Abbildung 4.16: Ineinander geschachtelte Teilbaume, beide Wurzeln mit A beschriftet

Die Teilbaume T1 und T2 teilen z = α(T ) in 5 Teile (von denen manche leer sein konnen):

u := der Inhalt der Blatter von T links von T1

v := der Inhalt der Blatter von T1 links von T2

w := α(T2)

x := der Inhalt der Blatter von T1 rechts von T2

y := der Inhalt der Blatter von T rechts von T1.

Im Beispielbaum aus Abb. 4.13 konnten diese Unterbaume und die zugehorigen Teilworterzum Beispiel aussehen wie in Abb. 4.17. Hier wiederholt sich die Variable F .

Folgende Eigenschaften der Teilworter liest man aus der Konstruktion ab.

(i) z = uvwxy.

(ii) |vwx| ≤ n.

Dies sieht man so: vwx = α(T1), also ist |vwx| gerade die Anzahl der Blatter in T1.Weil die zu A0, A1, . . . , A|V | gehorende Knotenfolge zu einem Weg maximaler Lange in Tgehort, hat der langste Weg in T1 hochstens |V | + 1 Variablenknoten. Nach der obigen

”Behauptung“ hat T1 hochstens 2|V | Blatter, also ist |vwx| ≤ 2|V | = n.

(iii) |v|+ |x| ≥ 1.

Dies gilt, weil nach der Konstruktion T2 echter Teilbaum von T1 ist, und weil es beiChomsky-Normalform-Grammatiken im Inneren eines Ableitungsbaumes nur Knoten von

144

Page 147: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

1

0

0

0 1

1

0

1

F

A

A

B

A F

A F

R

R

B

S

R

H

F

Abbildung 4.17: Zerlegung von α(T ) = 00101101: u = 00, v = 10, w = 1, x = ε, y = 101

Grad 2 und keine ε-Produktionen gibt. Also muss auf dem Weg von der Wurzel von T1 zurWurzel von T2 rechts oder links oder beidseitig von T2 ein nichtleeres Teilwort entstehen.

Es bleibt (iv) zu zeigen. Weil T1 und T2 im Wurzelknoten dieselbe Variable A als Inschrifthaben, kann man den Teil von T1, der nicht auch in T2 ist, beliebig oft, d.h., 0-mal, 1-mal,2-mal usw., zwischen den Baum T (ohne T1) und T2 einfugen und daraus stets einen legalenAbleitungsbaum zur Grammatik G erhalten. Diese Idee sieht man am besten anhand derin Abbildungen 4.18 und 4.19 wiedergegebenen Skizzen ein.

145

Page 148: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

y

T A

S

u

T

w

2:

:

Abbildung 4.18: T2 anstelle von T1 eingehangt.

In Abb. 4.18 nimmt T2 die Stelle von T1 ein; das Resultat ist ein Ableitungsbaum furuv0wx0y. Daher ist uwy = uv0wx0y in L = L(G). In Abb. 4.19 wird der Teil von T1, dernicht auch in T2 ist, zweimal benutzt; es ergibt sich ein Ableitungsbaum fur uv2wx2w.Damit liegt auch dieses Wort in L = L(G).

S

A

A

Au v

v w x

x y

T

T

T

T

1

:

:

:

:

1

2

Abbildung 4.19: Verdopplung eines Teils von T1

Es sollte zumindest anschaulich klar sein, dass man ebenso Ableitungsbaume fur uv3wx3y,

146

Page 149: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

uv4wx4y usw. konstruieren kann. – Also gilt

{uv0wx0y, uvwxy = z, uv2wx2y, uv3wx3y, . . . } ⊆ L,

wie in (iv) behauptet. �

4.4.2 Beispiel Aus der Grammatik in Beispiel 4.2.1 erhalt man durch Anwendungder Schritte

”Separierung“ und

”Verkurzung der rechten Seiten“ und durch Weglassen

der ε-Produktion eine Grammatik G = ({S,D,A,B}, {0, 1}, S, P ), wobei P die folgendenProduktionen enthalt:

S → SS | AD | AB ,

D → SB ,

A→ 0, B → 1 .

Diese Grammatik G ist in Chomsky-Normalform. Es ist klar, dass L(G) die Sprache derkorrekten Klammerausdrucke ohne ε ist. Betrachte z. B. den folgenden Ableitungsbaumfur z = 00101101 in dieser Grammatik:

A

S

B

S

T

A T

A

B

S

B

S

A

S

B

1

2

S

D

0 1 0 1

1

0 0 1

Wir haben einen langsten Pfad markiert; auf ihm wiederholt sich die Variable S (doppeltumrandet). Auch die resultierenden Teilbaume T1 und T2 sind markiert. Man uberprufe,

147

Page 150: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

dass hier u = 0, v = 01, w = 01, x = ε und y = 101 gilt, und die Aussagen (i), (ii), (iii)aus 4.4.1!

Durch Herausschneiden und Verdoppeln des Baumteils”T1 ohne T2“ ergeben sich die

folgenden Ableitungsbaume:

B

S B

A B

T

A

S

A

0 1

S

D

S

1

0 0 1

2

148

Page 151: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

2

B

A B

T1

T1

BA

B

BA

S

A

S

S

ohne T

A

0

D

0 1

S

1

S

S

0 1

S

0 1

S

0 1

Zur Ubung erstelle man einen Ableitungsbaum fur uv3wx3y!

Genau wie im Fall des Pumping-Lemmas fur regulare Sprachen wollen wir das Pumping-Lemma 4.4.1 fur den Beweis nutzen, dass gewisse Sprachen nicht kontextfrei sind. Dabeigehen wir nach demselben Schema vor wie in Kapitel 2 (vor 2.4.2). L sei die Sprache,deren Nichtregularitat bewiesen werden soll.

Schema fur Nicht-Kontextfreiheits-Beweise:

[1] (Wortlich) Beweis indirekt. Annahme: L ist kontextfrei.

[2] (Wortlich) Dann gibt es ein n ≥ 1 mit den im Pumping-Lemma fur kontextfreieSprachen (PL-kfS, Satz 4.4.1) behaupteten Eigenschaften.

[3] (Problemspezifisch) Wir wahlen z ∈ L, mit |z| ≥ n.

(z muss man geschickt wahlen, so dass Schritt [5] ausfuhrbar ist.)

[4] (Wortlich) Gemaß (PL-kfS) gibt es u, v, w, x, y derart dass

(i) z = uvwxy; (ii) |vwx| ≤ n; (iii) |v|+ |x| ≥ 1 und

149

Page 152: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

(iv) uviwxiy ∈ L fur alle i ≥ 0.

[5] (Problemspezifisch) Zeige nun, dass man fur jede mogliche Position der Teilworteru, v, w, x, y in z ein i angeben kann, so dass uviwxiy /∈ L ist.

(Hierfur muss man oft mehrere Falle betrachten. Eventuell sind in verschiedenenFallen die benotigten i’s unterschiedlich.)

(Wortlich) Dies ist der gewunschte Widerspruch.

Wir wenden dieses Beweisschema auf einige Beispiele an. Nur im ersten Beispiel markierenwir die Teilschritte. Die behandelten Sprachen sind auch charakteristisch fur Sprachen,die nicht kontextfrei sind.

4.4.3 Behauptung Die Sprache

L1 = {ambmcm | m ≥ 1}

ist nicht kontextfrei.

Beweis : [1] Indirekt. Angenommen, L1 ware kontextfrei. [2] Dann gibt es ein n ≥ 1 mit denEigenschaften wie in (PL-kfS). [3] Wir wahlen z = anbncn ∈ L1. Offenbar ist |z| = 3n ≥ n.[4] Nach (PL-kfS) gibt es u, v, w, x, y ∈ Σ∗ derart dass

(i) anbncn = uvwxy,

(ii) |vwx| ≤ n,

(iii) |v|+ |x| ≥ 1,

(iv) ∀i ∈ N : uviwxiy ∈ L1.

[5] Das Teilwort vwx von z kann nicht sowohl a’s als auch c’s enthalten. (Sonst musstevwx mindestens n+ 2 Buchstaben haben, was (ii) widerspricht.)

1. Fall: vwx enthalt kein c. Dann betrachten wir uv0wx0y = uwy. Dieses Wort enthalt(immer noch) genau n c’s, aber die Zahl der a’s und b’s zusammen ist gleich 2n−|v|−|x| <2n (wegen (iii)). Also ist uv0wx0y 6∈ L1, im Widerspruch zu (iv).

2. Fall: vwx enthalt kein a. Dann betrachten wir uv0wx0y = uwy. Dieses Wort enthalt(immer noch) genau n a’s, aber die Zahl der b’s und c’s zusammen ist gleich 2n−|v|−|x| <2n (wegen (iii)). Also ist uv0wx0y 6∈ L1, im Widerspruch zu (iv).

(Hinweis : Der zweite Fall ist so ahnlich zum ersten, dass man hier normalerweise”analog“

schreiben wurde.) �

150

Page 153: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

4.4.4 Bemerkung

(a) Es ist unwichtig, ob das leere Wort in der Sprache enthalten ist oder nicht; allgemei-ner kann man immer eine endliche Anzahl von Wortern hinzufugen oder entfernen,ohne die Eigenschaft der Kontextfreiheit zu verandern. (Technisch werden wir dieserst weiter unten sehen, siehe Abschnitt 5.6.) Also sind auch die Sprachen

{ambmcm | m ≥ 0} und {ambmcm | m ≥ 5}

(und so weiter) nicht kontextfrei.

(b) Auch Sprachen wie

{amb2mcm | m ≥ 0} und {a4mbmc3m | m ≥ 1}

oder{0m10m10m | m ≥ 0} und {0m1m0m | m ≥ 0}

sind nicht kontextfrei, was sich mit leichten Variationen des Beweises fur Behaup-tung 4.4.3 zeigen lasst. (Siehe Ubung.)

(c) In Beispiel 3.1.9 haben wir eine monotone Grammatik fur {ambmcm | m ≥ 1}angegeben, also ist dies eine Chomsky-1-Sprache. Wenn wir das mit Korollar 4.3.19kombinieren, erhalten wir, dass

L2 ( L1

gilt. Dies beweist einen weiteren Teil unserer fruher aufgestellten Behauptung, dassdie Chomsky-Hierarchie eine echte Hierarchie ist.

4.4.5 Behauptung Die Sprache

L2 = {ambkcmdk | m, k ≥ 1}

ist nicht kontextfrei.

Beweis : Indirekt. Angenommen, L2 ware kontextfrei. Dann gibt es ein n ≥ 1 mit denEigenschaften wie in (PL-kfS). Wahle nun z = anbncndn ∈ L2. Offenbar ist |z| = 4n ≥ n.Nach (PL-kfS) gibt es u, v, w, x, y ∈ Σ∗ derart dass

(i) anbncndn = uvwxy,

(ii) |vwx| ≤ n,

(iii) |v|+ |x| ≥ 1,

(iv) ∀i ∈ N : uviwxiy ∈ L2.

151

Page 154: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Das Teilwort vwx von z kann nicht sowohl a’s als auch c’s enthalten, und auch nichtsowohl b’s als auch d’s. (Sonst musste vwx mindestens n + 2 Buchstaben haben, was(ii) widerspricht.) Also ist vwx entweder Teilwort von anbn oder Teilwort von bncn oderTeilwort von cndn.

1. Fall: vwx ist Teilwort von anbn. Dann ist im Wort uv0wx0y die Zahl der a’s und b’szusammen gleich 2n−|v|−|x| < 2n (wegen (iii)), aber die Zahl der c’s und d’s zusammmengleich 2n. Jedes Wort t ∈ L2 erfullt aber |t|a + |t|b = |t|c + |t|d. Also ist uv0wx0y 6∈ L2.Dies widerspricht (iv).

2. Fall: vwx ist Teilwort von bncn. Dann ist im Wort uv0wx0y die Zahl der b’s und c’szusammen gleich 2n−|v|−|x| < 2n (wegen (iii)), aber die Zahl der a’s und d’s zusammmengleich 2n. Jedes Wort t ∈ L2 erfullt aber |t|a + |t|d = |t|b + |t|c. Also ist uv0wx0y 6∈ L2.Dies widerspricht (iv).

3. Fall: vwx ist Teilwort von cndn. Hier erhalt man analog zum 1. Fall einen Widerspruch.�

4.4.6 Bemerkung

(a) Auch Sprachen wie

{amb2kc3md4k | m ≥ 0} und {ambmambm | m ≥ 0}

erweisen sich mit ahnlichen Beweisen als nicht kontextfrei. Man versuche, das Mu-ster zu erkennen: Kontextfreie Grammatiken konnen nicht beschreiben, dass in vierTeilwortern w1, w2, w3, w4 von w, die voneinander abgegrenzt sind, die Langenbe-ziehung

|w1| = |w3| und |w2| = |w4|gilt. Intuitiv gesagt liegt das daran, dass die Anordnung der Paare (w1, w3) und(w2, w4) einander entsprechender Teilworter nicht einer korrekten Klammerung ent-spricht.

(b) Im Gegensatz zu (a) bemerken wir, dass die Sprache

L′2 = {ambkckdm | m, k ≥ 1},

die auf den ersten Blick sehr ahnlich zu L2 aussieht, kontextfrei ist. (Man kanneine Grammatik mit Variablen S und A und Produktionen S → aSd | aAd undA → bAc | bc benutzen.) Es ist also kein Problem, mit einer kontextfreien Gram-matik zu spezifizieren, dass in vier Teilwortern w1, w2, w3, w4 von w, die voneinanderabgegrenzt sind, die Langenbeziehung

|w1| = |w4| und |w2| = |w3|

gilt. Hier sind die einander entsprechenden Teilwortpaare wie in korrekten Klam-merausdrucken angeordnet.

152

Page 155: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

(c) Auch L2 und die in (a) genannten Sprachen sind Chomsky-1-Sprachen. (Hier ohneBeweis.)

4.4.7 Behauptung Die Sprache

L3 = {w2w | w ∈ {0, 1}∗}

uber Σ = {0, 1, 2} ist nicht kontextfrei.

Beweis : Indirekt. Angenommen, L3 ware kontextfrei. Dann gibt es ein n ≥ 1 mit denEigenschaften wie in (PL-kfS). Wahle nun z = 0n1n20n1n ∈ L3. Offenbar ist |z| = 4n+1 >n. Nach (PL-kfS) gibt es u, v, w, x, y ∈ Σ∗ derart dass

(i) 0n1n20n1n = uvwxy,

(ii) |vwx| ≤ n,

(iii) |v|+ |x| ≥ 1,

(iv) ∀i ∈ N : uviwxiy ∈ L3.

1. Fall: v oder x enthalt die”2“ aus z. Dann enthalt uv0wx0y uberhaupt keine

”2“, ist

also nicht in L3.

2. Fall: Die”2“ liegt im Teilwort u. D. h.: vwx liegt in z komplett rechts von der

”2“.

Dann befinden sich in uv0wx0y rechts von der”2“ weniger Buchstaben als links von der

”2“, also ist uv0wx0y nicht in L3.

3. Fall: Die”2“ liegt im Teilwort y. Analog zum 2. Fall ist dann uv0wx0y nicht in L3.

4. Fall: Die”2“ liegt im Teilwort w. D. h.: v liegt komplett links von der

”2“ und x

liegt komplett rechts von der”2“. Nach (ii) gilt |vwx| ≤ n, also ist v ein Teilwort des

Einserblocks links von der”2“ und x ein Teilwort des Nullerblocks rechts von der

”2“.

Damit istuv0wx0y = 0n1n−|v|20n−|x|1n.

Nach (iii) sind nicht |x| und |v| beide 0. Daher ist uv0wx0y /∈ L3.

In allen vier Fallen ergibt sich ein Widerspruch zu (iv). �

4.4.8 Bemerkung Die in der letzten Behauptung notierte Eigenschaft, dass kontext-freie Grammatiken nicht erzwingen konnen, dass zwei Teilworter identisch sind, kannverallgemeinert werden, zum Beispiel folgendermaßen: Die Sprache

{w13 · · · 3wr2v13 · · · 3vs | s ≥ r ≥ 1, w1, . . . , wr, v1, . . . , vr ∈ {0, 1}∗,jedes vi kommt in {w1, . . . , wr} vor}

153

Page 156: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

ist nicht kontextfrei. Dies hat zur Folge, dass eine grundlegende Eigenschaft korrekterPascal- und Java-Programme nicht durch kontextfreie Grammatiken ausgedruckt werdenkann, namlich das Prinzip, dass die Namen von Variablen, die benutzt werden, zuvordeklariert worden sein mussen. Bedingungen dieser Art werden daher stets zusatzlichzu der formalen Grammatik angegeben.

4.4.9 Behauptung Die Sprache

L4 = {0n2 | n ≥ 1}

ist nicht kontextfrei.

Beweis : Indirekt. Angenommen, L4 ware kontextfrei. Dann gibt es ein n ≥ 1 mit den Ei-genschaften wie in (PL-kfS). Wahle nun z = 0n2 ∈ L4. Nach (PL-kfS) gibt es u, v, w, x, y ∈Σ∗ derart dass fur z (i)–(iv) erfullt sind. Nun ist aber

uv2wx2y = 0n2+|v|+|x| = 0n2+k

fur ein k mit 1 ≤ k ≤ n (nach (ii) und (iii)). Jedoch ist n2 < n2 +k < (n+1)2, also n2 +kkeine Quadratzahl und damit uv2wx2y 6∈ L4. Dies widerspricht (iv). �

4.4.10 Bemerkung

(a) Der Beweis von Behauptung 4.4.9 verlauft genauso wie der Beweis von Behaup-tung 2.4.2(b), wo wir gesehen haben, dass L3 nicht regular ist. Dies ist charakte-ristisch fur Sprachen uber einem einelementigen Alphabet: Ein Nichtregularitats-beweis mit dem Pumping-Lemma fur regulare Sprachen fuhrt sofort zu einem fastgleichlautenden Beweis der Nicht-Kontextfreiheit, wenn wir das Pumping-Lemmafur kontextfreie Sprachen benutzen.

(b) Tatsachlich gilt:L ⊆ Σ∗, |Σ| = 1, L ∈ L2 ⇒ L ∈ L3.

Es gibt also uberhaupt keine kontextfreien Sprachen uber einem einelementigenAlphabet, die nicht regular sind. Der Beweis dieser Aussage ist etwas aufwendiger– er benutzt ubrigens das Pumping-Lemma 4.4.1 – und nicht Stoff der Vorlesung.

Zum Schluss dieses Abschnittes formulieren wir eine verstarkte Version des Pumping-Lemmas fur kontextfreie Sprachen, das in Beweisen fur Nicht-Kontextfreiheit oft zumZiel fuhrt, wenn die Anwendung des einfachen Pumping-Lemmas muhsam oder nichtmoglich ist. Diese Aussage nennt man nach seinem Urheber das

”Lemma von Ogden“.

Bei der Anwendung dieses Lemmas per Schema durfen wir in Schritt [3] nicht nur z wahlen,sondern in z auch n uns gunstig erscheinende Buchstaben in z

”markieren“ (unterstrei-

chen, rot einfarben). Die Zerlegung in u, v, w, x, y, die wir in Schritt [5] bearbeiten

154

Page 157: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

mussen, hat die Eigenschaft, dass entweder v oder x mindestens einen der markiertenBuchstaben enthalt.

Wir formulieren das Lemma und das resultierende Beweisschema. Auf einen Beweis desLemmas von Ogden verzichten wir hier. Dieser Beweis ist sehr ahnlich zu dem fur dasPumping-Lemma fur kontextfreie Sprachen (Satz 4.4.1).

4.4.11 Satz (Lemma von Ogden) Wenn L eine kontextfreie Sprache uber Σ ist,dann gibt es eine Zahl n ≥ 1, fur die folgendes gilt : Wenn z ein Wort in L ist, in dem nBuchstabenpositionen

”markiert“ sind, dann gibt es Worter u, v, w, x, y ∈ Σ∗, derart dass

folgendes gilt :

(i) z = uvwxy,

(ii) v und x zusammen enthalten mindestens ein markierte Buchstabenposition,

(iii) ∀i ∈ N : uviwxiy ∈ L.

Schema fur Nicht-Kontextfreiheits-Beweise mit dem Lemma von Ogden:

[1] (Wortlich) Beweis indirekt. Annahme: L ist kontextfrei.

[2] (Wortlich) Dann gibt es ein n ≥ 1 mit den im Lemma von Ogden (Satz 4.4.11)behaupteten Eigenschaften.

[3] (Problemspezifisch) Wahle z ∈ L, mit |z| ≥ n, und markiere n Buchstabenin z.

(z und die Markierungspunkte werden so gewahlt, dass Schritt [5] gut ausfuhrbarist.)

[4] (Wortlich) Gemaß (PL-kfS) gibt es u, v, w, x, y derart dass folgendes gilt:

(i) z = uvwxy; (ii) v und x enthalten mindestens eine markierte Position; und

(iii) uviwxiy ∈ L fur alle i ≥ 0.

[5] (Problemspezifisch) Zeige nun, dass man fur jede nach (ii) noch moglichePosition der Teilworter u, v, w, x, y in z ein i angeben kann, so dass uviwxiy /∈ List.

(Wortlich) Dies ist der gewunschte Widerspruch.

4.4.12 Behauptung Die Sprache

L4 = {akblcm | k ≥ l ≥ m ≥ 0}

ist nicht kontextfrei.

155

Page 158: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Beweis : Indirekt. Angenommen, L4 ware kontextfrei. Dann gibt es ein n ≥ 1 mit denEigenschaften wie im Lemma von Ogden. Wahle nun z = anbncn ∈ L4 und markiere dien a’s. Nach dem Lemma von Ogden gibt es u, v, w, x, y ∈ Σ∗ derart dass

(i) anbncn = uvwxy, ;

(ii) v und x zusammen enthalten mindestens einen markierten Buchstaben, also min-destens ein a;

(iii) ∀i ∈ N : uviwxiy ∈ L4.

1. Fall: v enthalt zwei verschiedene Buchstaben. Dann sieht man sofort, dass in uv2wx2ydie Buchstabenreihenfolge akblcm nicht eingehalten ist, was der Aussage aus (iii) wider-spricht.

2. Fall: x enthalt zwei verschiedene Buchstaben. Das fuhrt ebenso wie in Fall 1 zu einemWiderspruch.

Von hier an nehmen wir an, dass v und x jeweils nur eine Sorte von Buchstaben enthalt.

3. Fall: x besteht aus a’s. Dann besteht vx nur aus a’s, und uv0wx0y enthalt weniger a’sals b’s, also ist uv0wx0y nicht in L4, Widerspruch.

4. Fall: x besteht aus b’s. Wegen (ii) ist dann v eine nichtleere Folge von a’s, und uv0wx0yenthalt weniger a’s als c’s, also ist uv0wx0y nicht in L4, Widerspruch.

5. Fall: x besteht aus c’s. Fuhrt analog zum 4. Fall zu einem Widerspruch. �

Eine alternative Sicht auf Beweise mit dem Pumping-Lemma:Ein Spiel-Schema

Es gibt eine Formulierung fur Beweise mit dem Pumping-Lemma, die es vermeidet, dieStichworter

”Annahme“ und

”Widerspruch“ zu benutzen, die zu unserem Beweisschema

gehoren. Diese Formulierung formuliert den Beweis als ein Spiel, das wir (die”Beweiser“,

Spieler B), gegen einen Gegner (Spieler G) spielen. Auch hier sind die Zuge zum Teilmechanisch, zum Teil erfordern sie etwas Einfallsreichtum.

Gegeben ist eine Sprache L. Die zu beweisende Behauptung ist: L ist nicht kontextfrei.

Spiel-Schema

Runde 1: G gibt uns eine Zahl n ≥ 1.

Runde 2: (B) Wir wahlen (geschickt) ein z ∈ L mit |z| ≥ n

(∗ so dass wir in Runde 4 immer gewinnen ∗)

156

Page 159: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Runde 3: G gibt uns u, v, w, x, y mit(i) z = uvwxy, (ii) |vwx| ≤ n und (iii) |v|+ |x| ≥ 1 .(∗ Wir wissen nicht genau, wie u, v, w, x, y in z liegen. ∗)

Runde 4: (B) Wir wahlen, abhangig von u, v, w, x, y, ein i und zeigen, dass uviwxiy /∈L.(∗ Normalerweise muss man hier einige Falle betrachten. ∗)

Wenn man sich das Spiel-Schema ansieht, erkennt man, dass keine Komponenten einesindirekten Beweises (wie

”Annahme“ und

”Dies ist ein Widerspruch“) mehr vorkommen.

Allerdings hat sich die Schwierigkeit, die darin liegt, ein gutes z zu wahlen und in Runde4 fur alle Moglichkeiten von u, v, w, x, y zu zeigen, dass man ein passendes i finden kann,gegenuber dem gewohnlichen Schema nicht verandert.

Wir demonstrieren die Benutzung des Spielschemas an einem Beispiel.

Beh.: Die Sprache L = {0n12n23n | n ≥ 0} ist nicht kontextfrei.

Wir beweisen dies mit dem Spielschema.

Runde 1: G gibt uns eine Zahl n ≥ 1.

Runde 2: Wir (B) wahlen z = 0n12n23n.

Es ist klar, dass |z| = 6n ≥ n ist.

Runde 3: G gibt uns u, v, w, x, y mit(i) x = uvwxy, (ii) |vwx| ≤ n und (iii) |v|+ |x| ≥ 1 .

Runde 4: Unsere (B) Aufgabe ist es, nun zu zeigen, dass es ein i ∈ N gibt derart dassuviwxiy /∈ L ist. Da wir nicht wissen, wie u, v, w, x, y in z liegen, mussen wirmehrere Moglichkeiten betrachten.

Zuerst benutzen wir, dass |vwx| ≤ n ist und folgern, dass vwx entweder den Buch-staben 0 nicht enthalt oder den Buchstaben 2 nicht enthalt. (Sonst musste vwx alle1en und zudem eine 0 und eine 2 enthalten, hatte also Lange mindestens 2n+2 > n.)

1. Fall: vwx enthalt keine 2. – Setze i = 0. Dann gilt fur uv0wx0y = uwz folgendes:|uwy|0 + |uwy|1 = 3n − (|v| + |x|) < 3n, aber |uwy|2 = 3n. Daher kann uwy keinElement von L sein.

2. Fall: vwx enthalt keine 0. – Setze i = 0. Dann gilt fur uv0wx0y = uwz folgendes:|uwy|0 = n, aber |uwy|1 + |uwy|2 = 5n − (|v| + |x|) < 5n. Daher kann uwy keinElement von L sein.

Wir verzichten auf den formalen Beweis dafur, dass die korrekte Vervollstandigung desSpielschemas in Runden 2 und 4 fur eine Sprache L hinreichend dafur ist, zu zeigen, dassL nicht kontextfrei ist. Man sieht aber, dass man im Spielschema eigentlich nichts anderesmacht als in den gewohnlichen Beweisen nach dem Schema mit den indirekten Beweisen:

157

Page 160: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

wahle (geschickt) ein z und beweise dann fur eine beliebige Zerlegung von z in u, v, w, x,y, die (i), (ii), (iii) erfullt, dass es ein i mit uviwxiy /∈ L geben muss.

Bemerkung : Entsprechend modifizierte Spiel-Schemata sind auch geeignet, Nicht-Kontext-freiheits-Beweise mit dem Lemma von Ogden und Nicht-Regularitats-Beweise mit demPumping-Lemma fur regulare Sprachen durchzufuhren.

4.5 Der Cocke-Younger-Kasami-Algorithmus

In diesem Abschnitt betrachten wir das Wortproblem fur kontextfreie Grammatiken, d. h.das Problem, fur eine vorgelegte kontextfreie Grammatik G = (V,Σ, S, P ) und ein Wortw ∈ Σ∗ zu entscheiden, ob w ∈ L(G) gilt oder nicht. Wir konnen annehmen, dass Gin Chomsky-Normalform vorliegt (andernfalls wenden wir den Umbau-Algorithmus ausAbschnitt 4.3 an). Falls w = ε, mussen wir nur prufen, ob S → ε eine Produktion in Pist. Also interessieren uns nur Worter w 6= ε. In Ableitungen fur ein solches w konnenkeine ε-Produktionen vorkommen. Wir beschranken uns also auf die Produktionen in P ,die die Form A→ BC oder A→ a haben, mit A,B,C ∈ V , a ∈ Σ.

Wir benutzen das Prinzip der dynamischen Programmierung , das in der Vorlesung

”Effiziente Algorithmen“ genauer behandelt wird.

Es sei w = a1 · · · an ∈ Σ∗ gegeben, n ≥ 1. Wir wollen fur jedes Teilwort ai · · · ai+d−1,1 ≤ d ≤ n, 1 ≤ i ≤ n− d+ 1, von w wissen, aus welchen Variablen dieses Wort herleitbarist. Dazu definieren wir Mengen

Ud,i := {A ∈ V | A ∗⇒ ai · · · ai+d−1}, fur 1 ≤ d ≤ n, 1 ≤ i ≤ n− d+ 1.

Offenbar ist w ∈ L(G) genau dann wenn S ∈ Un,1. Wir uberlegen nun, wie die Ud,i durchInduktion uber d = 1, 2, . . . , n berechnet werden konnen.

Induktionsanfang d = 1: Weil G in Chomsky-Normalform ist, gilt A∗⇒ a fur A ∈ V ,

a ∈ Σ genau dann wenn A→ a in P ist. Also:

U1,i = {A ∈ V | A→ ai}, fur 1 ≤ i ≤ n.

Induktionsschritt d > 1: Setze v := ai · · · ai+d−1. Ist A∗⇒ v, so gibt es einen A-

Ableitungsbaum T mit α(T ) = v. Die Wurzel von T ist also mit A beschriftet, undT hat d Blatter. Die Wurzel muss zwei Nachfolger haben, die mit Variablen (etwa C undD) beschriftet sind. Schematisch sieht das so aus:

158

Page 161: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

TC

TD

A

C D

w’

w’’

Die beiden Teilbaume von T heißen TC und TD, und wir setzen w′ := α(TC), w′′ := α(TD).Offenbar gilt:

(4.1)C∗⇒ w′, D

∗⇒ w′′, v = w′w′′, und 1 ≤ |w′|, |w′′| < d ,und A→ CD ist Produktion.

Umgekehrt uberlegt man sich leicht, anhand desselben Bildes, dass aus der Situation (4.1)

folgt, dass A∗⇒ v. – Wir haben also, fur A ∈ V :

A∗⇒ ai · · · ai+d−1 ⇔ ∃C,D ∈ V ∃d′ : 1 ≤ d′ < d− 1 und

C∗⇒ ai · · · ai+d′−1, D

∗⇒ ai+d′ · · · ai+d−1

und A→ CD ist Produktion .

Damit erhalten wir folgende Rekursionsformel fur die Mengen Ud,i:

Ud,i = {A ∈ V | ∃C,D ∈ V ∃d′ : 1 ≤ d′ < d und

A→ CD ist Produktion und

C ∈ Ud′,i und D ∈ Ud−d′,i+d′}.

Aus der Rekursionsformel ergibt sich der folgende iterative Algorithmus zur Losung desWortproblems fur eine Grammatik G in Chomsky-Normalform.

Eingabe: Grammatik G = (V,Σ, S, P ) in Chomsky-Normalform, w = a1 · · · an ∈ Σ∗.

Falls w = ε, prufe, ob S → ε Produktion ist.Falls ja, gib

”JA“ aus, sonst

”NEIN“.

Ab hier wird n ≥ 1 vorausgesetzt.

Datenstruktur: Ein Array U [1..n, 1..n], wo jeder Eintrag eine Teilmenge von V ist.

Initialisierung: U [d, i] := ∅, fur 1 ≤ d ≤ n, 1 ≤ i ≤ n− d+ 1.

(Nur diese Eintrage in U werden benutzt. d ist die Lange des betrachteten Teilworts, idie Position des ersten Buchstabens.)

Methode:

1. U [1, i] := {A | A→ ai ist Produktion }, fur 1 ≤ i ≤ n.

159

Page 162: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

2. for d := 2 to n do

for i := 1 to n− d+ 1 do

for d′ := 1 to d− 1 do

U [d, i] := U [d, i] ∪ {A ∈ V | es gibt eine Produktion A→ CD

und C ∈ U [d′, i], D ∈ U [d− d′, i+ d′]} .

3. Falls S ∈ U [n, 1], gib”JA“ aus, sonst

”NEIN“.

Die Korrektheit des Algorithmus folgt aus den vorher angestellten Uberlegungen. DieLaufzeit ist O(n3) – dabei geht die Große der Grammatik G in die in dem

”O“ versteckte

Konstante ein.

Wenn man den CYK-Algorithmus von Hand ausfuhrt, verwendet man ein dreieckigesSchema, dessen Felder den relevanten Eintragen des Arrays U entsprechen. In Feld (d, i),1 ≤ d ≤ n, 1 ≤ i ≤ n − d + 1, werden die Variablen A ∈ Dd,i eingetragen, also dieVariablen, aus denen ai · · · ai+d−1 ableitbar ist.

. . . . .

d

n

a a an

n

w

i

...

= 1

...

2

2

...

2

=1

= 1

Die Eintrage werden zeilenweise berechnet. Die Eintrage in Zeile d = 1 ergeben sich direktaus den Produktionen der Form A → a. Um die Variablen in Zelle (d, i) fur d > 1 zuberechnen, betrachtet man Paare von schon ausgefullten Zellen nach folgendem Muster,etwa fur d = 5, i = 2:

160

Page 163: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

n

a a an

n

w

i. . . . .

*

1

2

3

4 1

2

3

4d

4

=

=

2

5

1

= 6

2

1

2

3

=1

Abbildung 4.20: Ein Schritt im CYK-Algorithmus, zu bearbeitende Zellen

Fur d′ = 1, . . . , d − 1 pruft man fur jede Produktion A → CD der Grammatik, ob C inZelle (i, d′) und D in Zelle (i+ d′, d− d′) vorkommt. (Falls dies so ist, wird A in die Zelle(d, i) eingetragen.) In Abb. 4.20 wird die Zelle (2, 5) ausgefullt. Zusammengehorige Zellen(i, d′) und (i+ d′, d− d′) sind mit den gleichen eingekreisten Zahlen markiert. Die Zellen(i, d′) bilden im Schema eine Teil-Spalte, die Zellen (i + d′, d − d′) eine Teil-Diagonale.Zum Beispiel muss man testen, ob es eine Produktion A → CD gibt, derart dass C inZelle (3, 2) und D in Zelle (2, 5) steht (mit eingekreister

”3“ markiertes Zellenpaar). Die

schraffierten Dreiecke deuten an, welche Teilworter betroffen sind, wenn die Zellen (2, 3)und (5, 2) (Nummer 3) untersucht werden.

Beispiel : Betrachte die Grammatik aus Beispiel 4.4.2. Anwenden des Verfahrens auf dieEingaben w1 = 00100111 und w2 = 01011100 liefert die in Abb. 4.21 angegebenen Er-gebnisse. (Ist die Menge Ud,i leer, deuten wir dies durch Freilassen des entsprechendenKastchens an.)

161

Page 164: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

AB B B B B B B BA A A A A A A

0 0 01 1 1

d=1

2

3

4

5

6

7

8

1 1 1 10 0 0 0

S S

S

S

S

D

0 1

S S S

D

S

D

D

Abbildung 4.21: Anwendung des CYK-Algorithmus auf zwei Worter

Es ergibt sich, dass w1 in L(G) ist, w2 dagegen nicht.

Durch eine leichte Erweiterung der Datenstruktur ist es auch moglich, den Algorithmusso auszubauen, dass im Falle w ∈ L(G) eine Ableitungsfolge oder ein Ableitungsbaum furw ausgegeben wird: Dazu notiert man fur jede eingetragene Variable A die ProduktionA→ BC, die zum Eintrag gefuhrt hat, und den Wert d′, der zu diesem Eintrag gehort. Mitdiesen Informationen lasst sich, von dem S in Kastchen (d, 1) beginnend, ein Ableitungs-baum aufbauen. Ebenso ist leicht feststellbar, ob das Wort w mehrere Ableitungen besitzt:Wenn in ein Kastchen (i, d) dieselbe Variable A ein zweites Mal eingetragen wird, bedeu-

tet dies, dass es zwei verschiedene Ableitungsbaume fur die Ableitung A∗⇒ ai · · · ai+d−1

gibt. Wenn ein solcher Eintrag im weiteren Verlauf dazu beitragt, dass die Variable S indas Kastchen (n, 1) eingetragen wird, dann gibt es fur das Eingabewort zwei verschiedeneAbleitungen.

Wir betrachten nochmals zwei Beispieleingaben fur die Grammatik aus Beispiel 4.4.2:w3 = 01001101 und w4 = 01010111. Die entsprechenden Eintragungen im Schema findensich in Abb. 4.22.

162

Page 165: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

2

21

1

B B B BA A A AB B B B

S S S

S

SS

SS

SS

S S

S S S

D

D

D

A

D

A AB

0 01 1 1

d=1

2

3

4

5

6

7

8

1 10 01 0 1 0 0 1 1

Abbildung 4.22: Mehrere Ableitungen im CYK-Algorithmus

Es ergibt sich, dass w3 zwei verschiedene Ableitungsbaume besitzt. Die beiden Paare vonVariablen S, die zu je einem Eintrag

”S“ in Kastchen (8, 1) fuhren, sind mit Indizes 1

bzw. 2 markiert. Das Schema fur w4 weist ebenfalls eine Doppel-Eintragung auf, jedochist w4 nicht in L(G).

Wir haben gezeigt:

4.5.1 Satz Es gibt einen Algorithmus, der zu einer vorgelegten kontextfreien GrammatikG = (V,Σ, S, P ) und w ∈ Σ∗ entscheidet, ob w ∈ L(G). Fur festes G ist die Laufzeit desAlgorithmus O(n3), fur |w| = n. (Die Große und Struktur der Grammatik G geht in dieim

”O“ versteckte Konstante ein.)

Es sei angemerkt, dass die Laufzeit O(n3) fur die Analyse und Ubersetzung von Pro-grammen in einer durch eine kontextfreie Grammatik spezifizierten Programmierspracheindiskutabel langsam ist – schließlich gibt es Programme, die aus zigtausenden von Text-einheiten (Tokens) bestehen. In der Praxis benutzt man daher spezielle Grammatiken, dieeine Syntaxanalyse in linearer Zeit erlauben. Weitere Erlauterungen hierzu finden sich imfolgenden Kapitel 5, und Details in einer Vorlesung

”Ubersetzerbau“.

4.6 Abschlusseigenschaften kontextfreier Sprachen I

Wir diskutieren hier zunachst einige Operationen, unter denen die Klasse L2 der kontext-freien Sprachen abgeschlossen ist. Die Beweistechniken fur diese positiven Abschlusseigen-

163

Page 166: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

schaften konnen auch gut fur den Entwurf von kontextfreien Grammatiken fur komplexereSprachen benutzt werden.

Zum zweiten werden wir zeigen, dass L2 nicht unter der Durchschnittsoperation undunter Komplementbildung abgeschlossen ist.

Weitere Abschlusseigenschaften der Klasse L2 und verwandter Klassen werden (nach derBesprechung von Kellerautomaten im folgenden Kapitel 5) in Abschnitt 5.6 diskutiert.

4.6.1 Satz Die Klasse L2 ist abgeschlossen unter Vereinigung, Konkatenation undKleene-Abschluss.

Beweis : Wir betrachten zunachst Vereinigung und Konkatenation.

Es sei L1 = L(G1), L2 = L(G2) fur kontextfreie Grammatiken G1 = (V1, Σ1, S1, P1) undG2 = (V2, Σ2, S2, P2). O. B. d. A. konnen wir annehmen, dass V1∩V2 = ∅. (Gegebenenfallsbenennt man Variablen um.) Dann definieren wir neue Grammatiken G′ und G′′ durchZusammenwerfen von P1 und P2 und Verbinden der beiden Teile durch eine passendgewahlte Startproduktion. Hierzu wahlen wir eine neue Startvariable S 6∈ V1 ∪ V2.

G′ := (V1 ∪ V2 ∪ {S},Σ1 ∪ Σ2, S, P1 ∪ P2 ∪ {S → S1 | S2})G′′ := (V1 ∪ V2 ∪ {S},Σ1 ∪ Σ2, S, P1 ∪ P2 ∪ {S → S1S2}).

Man uberzeugt sich leicht, dass L(G′) = L1 ∪ L2 und L(G′′) = L1L2 gilt.

Nun betrachten wir den Kleene-Abschluss. Gegeben sei eine kontextfreien GrammatikG =(V,Σ, S, P ). Wir wahlen eine neue Variable S ′, S ′ 6∈ V , und definieren eine kontextfreieGrammatik G′′′ wie folgt:

G′′′ := (V ∪ {S ′},Σ, S ′, P ∪ {S ′ → S S ′ | ε}).

Wieder ist leicht zu sehen, dass L(G′′′) = L(G)∗ gilt. �

4.6.2 Beispiel Wir betrachten die Grammatiken G1 = ({A}, {0, 1}, A, P1) mit denProduktionen A → 0A1 | ε und G2 = ({B}, {0, 1}, B, P2) mit den Produktionen B →1B0 | ε. Offenbar ist L(G1) = {0n1n | n ≥ 0} und L(G2) = {1n0n | n ≥ 0}.Eine Grammatik fur die Sprache

L(G1) ∪ L(G2) = {0n1n | n ≥ 0} ∪ {1n0n | n ≥ 0}

hat Startvariable S und Produktionen

S → A | BA → 0A1 | εB → 1B0 | ε

164

Page 167: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Eine Grammatik fur die Sprache

L(G1)L(G2) = {0n1n1m0m | n,m ≥ 0} = {0n1n+m0m | n,m ≥ 0}

hat Startvariable S und Produktionen

S → AB

A → 0A1 | εB → 1B0 | ε

Schließlich sieht eine Grammatik fur die Sprache

L(G1)∗ = {0n11n1 · · · 0nr1nr | r ≥ 0, n1, . . . , nr ≥ 0}

wie folgt aus: Startvariable S, Produktionen

S → AS | εA → 0A1 | ε

Fur den folgenden Satz rekapituliere man Definition 2.5.2, die die Substitution von Spra-chen definiert. Es ist ziemlich klar, dass kontextfreie Sprachen unter dieser Operationabgeschlossen sind.

4.6.3 Satz Die Klasse L2 ist abgeschlossen unter Substitution. D. h.: Wenn f eineSubstitution wie in Definition 2.5.2 ist und f(a1), . . . , f(an) sowie L kontextfreie Sprachensind, so ist auch f(L) kontextfrei.

Beweis : Man wahlt Grammatiken G1, . . . , Gn (mit Startvariablen S1, . . . , Sn) und G furdie Sprachen f(a1), . . . , f(an) und L und sorgt dafur, dass die Variablenmengen in diesenGrammatiken disjunkt sind. Dann ersetzt man fur 1 ≤ i ≤ n in G das Teminalzeichenai durch eine neue Variable Di, vereinigt alle Produktionenmengen, und fugt die n Pro-duktionen Di → Si zur Produktionenmenge hinzu. Die resultierende Grammatik erzeugtf(L). �

4.6.4 Satz Die Klasse L2 ist nicht abgeschlossen unter Durchschnitt und Komplement.

Beweis :”Durchschnitt“: Wir mussen zeigen, dass es kontextfreie Sprachen L1 und L2

gibt, deren Durchschnitt nicht kontextfrei ist. Betrachte hierzu

L1 = {aibicj | i, j ≥ 1} und L2 = {aibjcj | i, j ≥ 1}.

165

Page 168: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Beide Sprachen sind kontextfrei. Zum Beispiel wird L1 von einer Grammatik mit denProduktionen

S → AC

A → aAb | abC → cC | c

erzeugt.

Jedoch ist L1 ∩ L2 = {ambmcm | m ≥ 1}, eine Sprache, die sich in Behauptung 4.4.3 alsnicht kontextfrei herausstellte.

”Komplement“: Wir untersuchen die Sprache

L3 = {aibjck | i, j, k ≥ 0, i 6= j oder j 6= k}.

Behauptung 1: L3 ist kontextfrei. – Dies sieht man folgendermaßen:

L3 = L′1 ∪ L′2 ∪ L′3 ∪ L′4,

wobei

L′1 = {aibjck | 0 ≤ i < j, k ≥ 0}L′2 = {aibjck | 0 ≤ j < i, k ≥ 0}L′3 = {aibjck | 0 ≤ j < k, i ≥ 0}L′4 = {aibjck | 0 ≤ k < j, i ≥ 0}.

Die vier Sprachen L′1, . . . , L′4 sind alle kontextfrei – zum Beispiel wird L′1 von einer Gram-

matik mit den folgenden Produktionen erzeugt:

S → AbC

A → aAb | Ab | εC → cC | ε

Nach Satz 4.6.1 ist also auch L3 kontextfrei.

Behauptung 2: L4 := L3 ∪ (Σ∗ − L(a∗b∗c∗)) ist kontextfrei. – Dies sieht man so ein:Die Sprache L(a∗b∗c∗) ist regular. Da die regularen Sprachen unter Komplementbildungabgeschlossen sind, ist auch Σ∗ − L(a∗b∗c∗) regular. Weil L3 ⊆ L2, ist Σ∗ − L(a∗b∗c∗)auch kontextfrei. Daraus folgt, wieder mit Satz 4.6.1, dass L4 ebenfalls kontextfrei ist.

Behauptung 3: L4 ist nicht kontextfrei. – In L4 sind alle Worter, die weder in Σ∗ −L(a∗b∗c∗) noch in L3 sind. Dies sind also die Worter der Form aibjck, die i = j und j = kerfullen. Das heißt:

L4 = {ambmcm | m ≥ 0},die Sprache, die nach Behauptung 4.4.3 und Bemerkung 4.4.4 nicht kontextfrei ist. �

166

Page 169: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Kapitel 5

Kellerautomaten

In diesem Kapitel behandeln wir das Maschinenmodell, das den kontextfreien Grammati-ken entspricht, namlich die nichtdeterministischen Kellerautomaten. Anhand des Modellswerden verschiedene Prinzipien fur die Syntaxanalyse diskutiert, d. h. die Erstellung einesAbleitungsbaumes zu einem vorgelegten Wort aus L(G): Top-Down-Parsing und Bottom-Up-Parsing. Weiter wird auf die deterministische Variante des Kellerautomaten-Modellsund die zugehorige Sprachklasse eingegangen. Schließlich werden wesentliche Abschluss-und Entscheidbarkeitseigenschaften der entsprechenden Sprachklassen diskutiert.

5.1 Nichtdeterministische Kellerautomaten

Was passiert mit der Berechnungsstarke von endlichen Automaten, wenn sie zusatzlichzur Steuereinheit mit einem weiteren (unendlichen) Speichermedium versehen werden?

Wir betrachten hier eine ganz spezielle Form eines Speichers: einen”Keller“ oder

”Stack“

(englisch auch:”pushdown store“).1

Diese Datenstruktur lasst die Operationen empty, push und pop zu, wobei empty einenleeren Keller erzeugt, push a das Element a oben auf den Keller legt, und pop das ober-ste Kellerelement entfernt und ausliest. Im Zusammenhang mit Sprachen speichern wirBuchstaben eines (Keller-)Alphabets.

1Synonym auch: Stapel, LIFO-Speicher, fur last-in-first-out-Speicher. Diese Struktur wird im 1. Seme-ster in der Lehrveranstaltung

”Algorithmen und Programmierung“ besprochen.

167

Page 170: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

leer: push push push pop push push push

push pop pop pop pushpoppoppop

κκλ

κ

λ

φ λκ

κλ

ππ

λκ

κκπ

λκ

λ

κπ

λκ

π

λκ

κλ

π

π π

λκ

λκ

κ λ

Abbildung 5.1: Arbeitsweise eines Kellerspeichers

Die Funktionsweise eines Kellers wird in Abbildung 5.1 veranschaulicht, die den Effektder Operationsfolge

empty; push κ; push λ; push φ; pop; push π; push κ; push λ; pop; pop; push π;pop; pop; pop; pop; push λ;

auf einen anfangs leeren Keller zeigt.

Keller sind sehr gut zur Bearbeitung von klammerartigen Strukturen geeignet; zum Bei-spiel kann man die Auswertung eines (auch geklammerten und nach der Punkt-vor-Strich-Regel auszuwertenden) arithmetischen Ausdrucks sehr bequem mit einer solchen Daten-struktur durchfuhren. Wir werden hier sehen, dass alle von kontextfreien Grammatikenerzeugbaren Strukturen von Automaten mit einem Keller analysiert werden konnen.

Anschaulich gesprochen besteht ein Kellerautomat aus einem Kellerspeicher (pushdownstore), einer Steuereinheit, wie sie von den endlichen Automaten bekannt ist, und einemEingabeband, das einfach von links nach rechts gelesen wird. Abbildung 5.2 gibt einBeispiel.

168

Page 171: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Lesekopf:

a ab bbbc cc cc c#

Eingabeband:

Steuereinheit: B

B

C

A

C

Keller:

Abbildung 5.2: Anschauliches Bild eines Kellerautomaten

Im Keller eines solchen Kellerautomaten konnen die Elemente eines”Keller-Alphabets“ Γ

gespeichert werden. Anfangs steht im Keller ein besonderes Zeichen, das”Keller-Anfangs-

Symbol“. Die Eingabe fur den Kellerautomaten steht auf einem separaten Eingabeband,das mit Hilfe eines

”Lesekopfs“ einmal von links nach rechts gelesen wird. Anfangs steht

der Kopf auf dem ersten Zeichen des Eingabewortes x ∈ Σ∗. Die Steuereinheit des Keller-automaten sieht aus wie bei einem DFA oder einem NFA: es gibt endlich viele Zustande,von denen einer als Startzustand ausgezeichnet ist.

Der Kellerautomat rechnet in Schritten. In einem Schritt ruckt der Kopf auf dem Eingabe-band entweder um ein Feld nach rechts oder andert seine Position nicht (letzteres nennenwir einen

”ε-Zug“). Wenn das Eingabewort vollstandig gelesen worden ist, befindet sich

der Lesekopf rechts von der Eingabe; dies ist also auch eine legale Position.

Ein Schritt besteht dabei aus folgenden Teilschritten:

1. Das oberste Kellersymbol Z wird vom Keller entfernt und gemerkt (pop-Operation).

2. Es wird entweder das nachste Symbol ai des Eingabewortes gelesen (dann rucktder Lesekopf um ein Feld nach rechts) oder nichts vom Eingabeband gelesen (derLesekopf bewegt sich nicht: ε-Zug).

3. Das Kellerzeichen Z, der gegenwartige Zustand q und (falls kein ε-Zug vorliegt) dasZeichen ai zusammen legen fest, welche Zuge ausfuhrbar sind. Ein Zug besteht dabeiaus

– einem neuen Zustand q′;

169

Page 172: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

– einer Folge γ = Z1 · · ·Zr von Kellerzeichen, die auf den Keller gelegt werden:Der Keller verandert sich gemaß der Operationsfolge

push(Zr); push(Zr−1); . . . ; push(Z1).

Einer der ausfuhrbaren Zuge wird durchgefuhrt.

In einer gegebenen Situation konnen in Teilschritt 3. kein, ein, oder mehrere verschiedeneZuge ausfuhrbar sein. Die hier betrachteten Kellerautomaten sind also nichtdetermini-stisch. Daher sind, wie bei NFA’s, eventuell auf einer Eingabe viele verschiedene Berech-nungen moglich.

Per Konvention legen wir fest, dass der Kellerautomat”mit leerem Keller akzeptiert“,

d. h. eine Berechnung des Kellerautomaten auf einer Eingabe x = a1 · · · an akzeptiert, fallsnach Lesen aller Zeichen der Eingabe und Durchfuhrung entsprechender Zuge der Kellervollig geleert ist. Man beachte, dass nach volligem Entleeren des Kellers kein weitererSchritt moglich ist (Teilschritt 1. kann nicht durchgefuhrt werden) und dass nach Lesendes letzten Eingabezeichens an nur noch ε-Zuge moglich sind.

Die alternative Moglichkeit, uber akzeptierende Zustande zu akzeptieren, wird spaterbesprochen.

5.1.1 Beispiel Palindrome (Spiegelworter) uber {a, b, c} mit Mittezeichen.

Wir beschreiben die Funktionsweise einen Kellerautomaten, der genau die Worter der(nicht regularen) Sprache

L = {w#wR | w ∈ {a, b, c}∗}

akzeptiert. Zunachst gehen wir informal vor. Der Automat arbeitet in zwei Phasen.

Lesephase: Vor dem Auftauchen von”#“ werden im Keller die bisher gelesenen Zeichen

gespeichert.

Kontrollphase: Nach dem”#“ werden die gelesenen Zeichen der Reihe nach mit den

Kellerzeichen verglichen.

Die Steuereinheit wird benutzt, um zwischen den Phasen (”L“ fur links“,

”R“ fur

”rechts“)

zu unterscheiden. Wenn in der Kontrollphase ein weiteres”#“ auftaucht, bricht die Rech-

nung ab; die Eingabe wird nicht akzeptiert.

170

Page 173: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Beginn:

Lesekopf

a ab bbbc cc cc c#

Keller:

R

L

Eingabeband:

Nach dem Einlesen von 5 Buchstaben:

CACBB

a ab bbbc cc cc c#

Keller:

R

L

Eingabeband:

Nach dem Entdecken des #:

CACBBC

a ab bbbc cc cc c#

Keller:

R

L

Eingabeband:

171

Page 174: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Nach dem Kontrollieren von 3 Buchstaben:

CAC

a ab bbbc cc cc c#

Keller:

R

L

Eingabeband:

Am Ende der Eingabe:

Wort zuende, Keller leer: akzeptieren!

a ab bbbc cc cc c#

Keller:

R

L

Eingabeband:

Wir setzen nun die obige informale Beschreibung in eine formale Definition um.

5.1.2 Definition Ein nichtdeterministischer Kellerautomat (englisch: nondeter-ministic pushdown automaton; Abk.: NPDA) ist ein 6-Tupel M = (Q,Σ,Γ, q0, Z0, δ),bestehend aus 6 Komponenten:

• Q, einer endlichen, nichtleeren Menge von Zustanden,

• Σ, dem Eingabe-Alphabet;

• Γ, dem Keller-Alphabet (Stack-Alphabet)

• q0 ∈ Q, dem Startzustand

• Z0 ∈ Γ, dem Symbol, das anfangs im Keller steht

172

Page 175: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

• δ : Q× (Σ∪{ε})×Γ→ P<∞(Q×Γ∗), der (nichtdeterministischen) Ubergangsfunk-tion.

(Dabei steht P<∞(R) fur {T ⊆ R | T endlich}, fur beliebige Mengen R.)

Wir erlautern die Details und die Anwendung der Ubergangsfunktion δ. Wenn q ein Zu-stand, a ein Buchstabe aus Σ und Z ein Buchstabe aus dem Kelleralphabet Γ ist, dannist δ(q, a, Z) eine endliche Menge von Paaren (q′, Z1 · · ·Zr), q

′ Zustand, r ≥ 0, Z1, . . . , Zr

Buchstaben aus Γ. Jedes solche Paar beschreibt einen moglichen Zug , wenn auf demEingabeband a steht, der Automat in Zustand q ist und das oberste Kellerzeichen Z ist.Wenn δ(q, a, Z) = ∅ ist, ist in dieser Situation kein Zug moglich, der a liest. Wird der Zug(q′, Z1 · · ·Zr) angewendet,

• geht der Automat in den neuen Zustand q′ uber,

• das Eingabezeichen a wird gelesen,

• der Lesekopf wird um ein Feld nach rechts geruckt,

• das alte Kellerzeichen Z wird entfernt (”pop“) und

• die Kellerzeichen Z1, . . . , Zr werden auf den Keller gepackt, in der Art, dass Z1 obenliegt. Dies entspricht der Operationsfolge push(Zr); push(Zr−1); . . . ; push(Z1).

Bemerkung : Mit r = 0 wird das oberste Kellersymbol gestrichen. Mit r = 1 und Z1 = Zbleibt der Keller unverandert. Mit r ≥ 2 und Zr = Z werden Z1, . . . , Zr−1 auf den Kellergestapelt.

Neben den Zugen, die einen Buchstaben lesen, gibt es die ε-Zuge, die durch die Wer-te δ(q, ε, Z) gegeben sind. Auch δ(q, ε, Z) ist jeweils eine endliche, moglicherweise leere,Menge von Zugen. Wenn der Automat in Zustand q ist und das oberste KellerzeichenZ ist, kann einer der Zuge aus δ(q, ε, Z) ausgefuhrt werden. Wenn der Zug (q′, Z1 · · ·Zr)ausgefuhrt wird, geht der Automat in den Zustand q′ uber und ersetzt das oberste Kel-lerzeichen Z durch Z1 · · ·Zr. Der Lesekopf verandert seine Position nicht.

Beachte: In einer Situation, in der M in Zustand q ist, das nachste Eingabezeichen a istund das oberste Kellerzeichen Z ist, ist jeder der Zuge aus δ(q, a, Z)∪δ(q, ε, Z) anwendbar.

Wir sagen (vorerst informal), dass M ein Wort x akzeptiert, wenn es moglich ist, ausder Startsituation (Zustand q0, Kellerinhalt Z0, x als Inhalt des Eingabebands) durchAnwendung einer von δ erlaubten Folge von Zugen das Eingabewort vollstandig zu lesenund dabei den Keller zu leeren.

5.1.3 Beispiel Wir setzen Beispiel 5.1.1 fort. Ein NPDA, der genau die Palindromemit Mittezeichen akzeptiert, hat die folgenden Komponenten:

• Q = {L,R}

173

Page 176: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

• Σ = {a, b, c, #}• Γ = {A,B,C,⊥}• q0 = L

• Z0 = ⊥• δ ist durch die folgende Tabelle gegeben:

δ ⊥ A B C(L, a) (L,A) (L,AA) (L,AB) (L,AC)(L, b) (L,B) (L,BA) (L,BB) (L,BC)(L, c) (L,C) (L,CA) (L,CB) (L,CC)(L, #) (R, ε) (R,A) (R,B) (R,C)(R, a) – (R, ε) – –(R, b) – – (R, ε) –(R, c) – – – (R, ε)(R, #) – – – –

In der Tabelle steht ein Paar (q′, γ) fur die Einermenge {(q′, γ)}; der Strich”– “

steht fur ∅. Die Zeilen fur die ε-Zuge sind weggelassen, da δ(q, a, Z) = ∅ ist fur allea, q, Z, also uberhaupt keine ε-Zuge moglich sind.

Man sieht, dass die Ubergangsfunktion deterministisch ist in dem Sinn, dass in jeder Si-tuation entweder ein oder kein Zug moglich ist. Dies ist von der Definition nicht verboten.

Das Anfangs-Keller-Zeichen wird im ersten Leseschritt geloscht.

Man uberzeuge sich durch Testen auf einigen Eingabewortern, z. B. ε, #, a#a, a#, ac#caund acc#ccab, dass der beschriebene Automat genau mit den Palindromen mit Mitte-zeichen als Input die beabsichtigte Berechnung absolviert (vollstandiges Lesen des Ein-gabeworts, Leeren des Kellers). Situationen, die zu einem fehlerhaften Anhalten fuhren,sind:

• Leeren des Kellers, bevor das Eingabewort vollstandig gelesen ist;

• Erreichen des Endes des Eingabewortes, ohne dass der Keller leer ist;

• eine Situation mit Zustand q, oberstem Kellerzeichen Z, Eingabebuchstaben a, inder δ(q, a, Z) ∪ δ(q, ε, Z) = ∅ ist.

Auch beachte man die Wirkung der Zuge

• (L,AB) ∈ δ(L, a,B) (Hinzufugen von”A“ im Keller),

• (L,A) ∈ δ(L, #,A) (Keller bleibt unverandert),

• (R, ε) ∈ δ(L, a,A) (Loschen des Kellersymbols”A“ nach Abgleich mit dem Einga-

bezeichen a).

174

Page 177: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Alternativ zur Tabellendarstellung kann man fur den Entwurf und fur die Beschreibungder Ubergangsfunktion fur (kleine) NPDA’s auch eine graphische Darstellung benutzen.In Abb. 5.3 ist eine solche Darstellung fur den NPDA aus Beispiel 5.1.3 angegeben.

εa

b

,

,

A

B

c , C

u

u

u

u

u

u

,# u u

L R

Start

u

,# ε

steht für A, B oder C

b

c

,

,

a , A

B

C a

b

,

,

c ,

A

B

C

ε

ε

Abbildung 5.3: Graphische Darstellung eines NPDA

In einer solchen graphischen Darstellung von M = (Q,Σ,Γ, q0, Z0, δ) gibt es fur jedenZustand q ∈ Q einen Knoten, der mit q beschriftet ist. Der Knoten fur den Startzustandq0 ist mit einem Pfeil gekennzeichnet. Falls (q′, Z1 · · ·Zr) ∈ δ(q, a, Z), verlauft eine Kantevon q nach q′, die mit

a, Z | Z1 · · ·Zr

beschriftet ist. Dabei werden Mehrfachkanten zu einer zusammengefasst, die mit einerListe von Beschriftungen versehen ist; weitere Abkurzungen fur ahnliche Ubergange sindmoglich.

Um auch die Wirkung des Nichtdeterminismus zu sehen, betrachten wir ein weiteresBeispiel.

5.1.4 Beispiel Die Sprache

L = {w wR | w ∈ {a, b, c}∗}

enthalt genau die Palindrome (Spiegelworter) uber {a, b, c}, die gerade Lange haben.Zum Beispiel sind ε, aaaa und abbccbba in dieser Sprache, nicht hingegen aca und abca.Die Idee fur einen NPDA, der die Worter dieser Sprache akzeptiert, ist die folgende. DerAutomat arbeitet in zwei Phasen.

Lesephase: (Zustand”L“) Die gelesenen Zeichen werden im Keller gespeichert.

175

Page 178: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Kontrollphase: (Zustand”R“) Die gelesenen Zeichen werden mit den Kellerzeichen ver-

glichen.

Da das Eingabewort keine Markierung fur das Umschalten von der Lese- zur Kontrollphaseenthalt, benutzen wir hierfur den Nichtdeterminismus: Jederzeit wahrend der Lesephasekann der NPDA nichtdeterministisch wahlen, ob das nachste Zeichen gelesen und im Kellergespeichert oder spontan (mit einem ε-Zug) in die Kontrollphase gewechselt werden soll.

Der NPDA hat die folgenden Komponenten:

• Q = {L,R}

• Σ = {a, b, c}

• Γ = {A,B,C,⊥}

• q0 = L

• Z0 = ⊥

• δ ist durch die folgende Tabelle gegeben:

δ ⊥ A B C(L, a) (L,A) (L,AA) (L,AB) (L,AC)(L, b) (L,B) (L,BA) (L,BB) (L,BC)(L, c) (L,C) (L,CA) (L,CB) (L,CC)(L, ε) (R, ε) (R,A) (R,B) (R,C)(R, a) – (R, ε) – –(R, b) – – (R, ε) –(R, c) – – – (R, ε)

Die graphische Darstellung sieht aus wie in Abb. 5.4 angegeben.

ε

, u uεb

c

,

,

a , A

B

CL R

a

b

,

,

c ,

A

B

C

ε

ε

ε

a

b

,

,

A

B

c , C

Start

u

u

u

u

u

u

u

, ε

steht für A, B oder C

Abbildung 5.4: NPDA fur Palindrome gerader Lange

176

Page 179: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Nun hat in dieser Tabelle jeder Eintrag δ(q, a, Z) und δ(q, ε, Z) Große 1 oder Große 0. Woist die nichtdeterministische Enscheidungsmoglichkeit? Wenn zum Beispiel der Zustand Lund das oberste Kellerzeichen A ist, und der nachste Buchstabe auf dem Eingabeband dasb, dann kann der NPDA zwischen den Zugen (L,BA) ∈ δ(L, b,A) und (R,A) ∈ δ(L, ε,A)wahlen.

Man finde fur die Eingabe acca eine Berechnung des NPDA M , die das Wort liest und denKeller leert, sowie eine Berechnung, die eine Fehlentscheidung trifft und in eine Sackgassegerat! Wie sieht die erfolgreiche Berechnung fur die Eingabe ε aus?

Um das Verhalten von NPDA’s formal zu erfassen, ohne nichtmathematische Gegenstandewie Lesekopfe oder Kellerspeicher zu erwahnen, benutzen wir das Konzept der Konfigu-rationen . Dieses Vorgehen ist typisch und beispielhaft fur die exakte Beschreibung derSemantik von Systemen, die in Schritten rechnen und Speicher- oder Steuer-Zustandehaben.

5.1.5 Definition Sei M = (Q,Σ,Γ, q0, Z0, δ) ein NPDA.

(a) Eine Konfiguration von M ist ein Tripel (q, w, α) ∈ Q× Σ∗ × Γ∗.

Beispiel : Im NPDA aus Beispiel 5.1.4 sind (L, aabbc,BBC) oder (R, aabbc,CCC⊥AB)Konfigurationen.

(q ist der gegenwartige Zustand, w ist das noch nicht gelesene Suffix des Eingabe-wortes (w wird oft auch

”Restwort“ genannt), α = Y1 · · ·Yr ∈ Γ∗, r ≥ 0, ist der

Kellerinhalt – Y1 ist das oberste Kellersymbol. Es ist nicht verlangt, dass das Wortα in einer Berechnung als Kellerinhalt auftreten kann.)

Die Menge aller Konfigurationen von M nennen wir KM .

(KM ist naturlich eine unendliche Menge.)

(b) Wenn k = (q, au, Zγ) Konfiguration ist, mit q ∈ Q, a ∈ Σ, u ∈ Σ∗, Z ∈ Γ undγ ∈ Γ∗,

und wenn zudem (q′, Z1 · · ·Zr) ∈ δ(q, a, Z) ist, dann nennen wir k′ = (q′, u, Z1 · · ·Zr γ)eine direkte Nachfolgekonfiguration von k und schreiben

k ⊢M k′ oder k ⊢ k′;

weiterhin: wenn k = (q, u, Zγ) Konfiguration ist, mit q ∈ Q, u ∈ Σ∗, Z ∈ Γ undγ ∈ Γ∗,

und wenn zudem (q′, Z1 · · ·Zr) ∈ δ(q, ε, Z) ist, dann nennen wir k′ = (q′, u, Z1 · · ·Zr γ)eine direkte Nachfolgekonfiguration von k und schreiben

k ⊢M k′ oder k ⊢ k′.

Damit ist ⊢M eine zweistellige Relation auf KM .

177

Page 180: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

(c) Die Relation ⊢∗M , oder kurz ⊢∗, ist die reflexive und transitive Hulle von ⊢ (sieheBeispiel A.2.14 im Anhang), das heißt: k ⊢∗M k′ ⇔ es existiert eine Folge k0 =k, . . . , kl = k′, l ≥ 0, derart dass ki−1 ⊢ ki, fur 1 ≤ i ≤ l.

(Dies bedeutet, dass k = k′ ist oder dass man in einer Reihe von legalen Schrittenvon der Konfiguration k zur Konfiguration k′ kommen kann.)

(d) M akzeptiert x ∈ Σ∗, falls (q0, x, Z0) ⊢∗M (q, ε, ε) fur ein q ∈ Q.

(Startend in Zustand q0, mit Eingabe x und nur dem Zeichen Z0 im Keller, kannin einer Reihe von legalen Schritten das Eingabewort gelesen und der Keller geleertwerden. Der erreichte Zustand ist irrelevant.)

Die Konfiguration initM(x) := (q0, x, Z0) heißt Startkonfiguration von M zuEingabe x.

Jede legale Konfigurationenfolge

initM(x) = k0 ⊢M k1 ⊢M k2 ⊢M · · · ⊢M kt

heißt eine Berechnung von M auf x.

(e) LM := {x ∈ Σ∗ |M akzeptiert x} heißt die von M akzeptierte Sprache .

Wir betrachten nochmals Beispiel 5.1.4. Die folgenden Paare liegen in der Relation ⊢M :

(L, aabbc,BBC) ⊢M (L, abbc,ABBC)

(L, aabbc,BBC) ⊢M (R, aabbc,BBC)(Auch dumme Ubergange konnen legal sein.)

(L, abc,BBC⊥A) ⊢M (L, bc,ABBC⊥A) (Es kommt nicht darauf an, ob k und k′ inechten Berechnungen vorkommen.)

(R, aabbc,BBC) hat keine Nachfolgekonfiguration.

(R, aabbc, ε) hat keine Nachfolgekonfiguration. (Allgemein gilt: Eine Konfiguration mitleerem Keller hat keine Nachfolgekonfiguration.)

Eine legale Berechnung dieses NPDA, die zur gewunschten akzeptierenden Konfigurationfuhrt, ist folgende:

(L, cbbc,⊥)

⊢ (L, bbc,C)

⊢ (L, bc,BC)

⊢ (R, bc,BC)

⊢ (R, c,C)

⊢ (R, ε, ε).

178

Page 181: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Eine legale, aber nicht akzeptierende Berechnung auf demselben Eingabewort:

(L, cbbc,⊥)

⊢ (L, bbc,C)

⊢ (L, bc,BC)

⊢ (L, c,BBC)

⊢ (R, c,BBC)

Diese Berechnung fuhrt in eine”Sackgasse“, eine Konfiguration ohne Nachfolgekonfigura-

tion. Obgleich solche Sackgassen existieren, gehort das Wort x = cbbc zur Sprache LM :eine akzeptierende Berechnung genugt uns.

εε ε

ε

ε(L,bbbba,A)

(L,bbba,BA)

(L,bba,BBA)

(L,ba,BBBA)

(L,a,BBBBA)

(R,a,BBBBA)

(R,ba,BBBA)

(R,a,BBA)

(R,bba,BBA)

(R,abbbba, )

(L, ,ABBBBA)

(R,bbbba,A)

(R,bbba,BA)

(R,bba,A)

(R,ba,BA)

(R,a,A)

(L,abbbba, )

(R, ,ABBBBA) (R, , )

Abbildung 5.5: Baum aller moglichen Berechnungen auf Eingabe abbbba

Um dies zu verdeutlichen, geben wir in Abb. 5.5 den Baum aller moglichen legalen Be-rechnungen auf dem Eingabewort abbbba an. Sechs dieser Berechnungen enden in einerSackgasse, aber eine erreicht die akzeptierende Konfiguration (R, ε, ε). Dies genugt, umabbbba ∈ LM zu folgern. Wenn ein Wort x nicht in LM ist, dann enthalt der Baum allermoglichen Berechnungen keine einzige Berechnung, die in der akzeptierende Konfiguration(R, ε, ε) endet. (Man zeichne den entsprechenden Baum fur die Eingabe abbb!)

5.1.6 Beispiel Zu guter Letzt wollen wir noch einen NPDA fur die Sprache der kor-rekten Klammerausdrucke angeben. Zur Abwechslung benutzen wir nicht die Buchstaben0 und 1, sondern ( und ). Es geht also um die Sprache

L = {w | w ∈ {(, )}∗ ist korrekter Klammerausdruck}

179

Page 182: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Die Idee fur den NPDA ist ganz einfach: Wir merken uns im Keller (in Unardarstellung)die Anzahl der gelesenen

”offenen“ Klammern, fur die noch kein schließendes Gegenstuck

aufgetaucht ist. Das heißt: Beim Lesen eines”(“ wird der Kellerstand um 1 erhoht, beim

Lesen eines”)“ wird der Kellerstand um 1 erniedrigt. Ein Fehler tritt ein, wenn der

Keller leer ist und ein”)“ gelesen wird. Hingegen ist es kein Fehler, wenn der Keller leer

wird und dann wieder ein”(“ gelesen wird. (Man hat dann ein Prafix des Eingabewortes

gesehen, das fur sich ein korrekter Klammerausdruck ist.) Hierfur benutzen wir folgendenTrick: Das Kellerendezeichen ⊥ wird nicht geloscht. Wenn es als oberstes Kellerzeichenauftaucht, wissen wir, dass der Keller

”eigentlich“ leer ist und dass kein

”)“ gelesen werden

kann. Andererseits erlauben wir in dieser Situation einen ε-Ubergang, der das ⊥ loscht,den Keller im technischen Sinn leert, und die Berechnung beendet. Der NPDA hat diefolgenden Komponenten:

• Q = {0} (|Q| = 1: Zustand ist irrelevant);

• Σ = {(, )};

• Γ = {1,⊥};

• q0 = 0;

• Z0 = ⊥;

• δ ist durch folgende Tabelle gegeben:

δ ⊥ 1

(0, () (0, 1⊥) (0, 11)(0, )) − (0, ε)(0, ε) (0, ε) −

ε

( , 1

0Start ,

,

(

) ε

11

1

1

Abbildung 5.6: NPDA fur korrekte Klammerausdrucke

180

Page 183: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

5.2 Top-Down-Parsing, LL-Parsing

Wir wollen zunachst anhand eines Beispiels uberlegen, dass Worter zu kontextfreienGrammatiken mit Kellerautomaten verarbeitet werden konnen. Dazu betrachten wir dieGrammatik G = (V,Σ, S, P ) mit V = {S}, Σ = {(, )} und P = {S → (S)S | ε}, dienach Proposition 4.2.8 die korrekten Klammerausdrucke erzeugt. Der Kellerautomat hatBandalphabet Σ, Kelleralphabet Γ = {S, (, )} und Anfangs-Kellerzeichen Z0 = S.

Erlaubt sind folgende Aktionen:

1) Ist”(“ oberstes Kellerzeichen und nachstes Eingabezeichen, streiche

”(“ aus dem

Keller und rucke den Lesekopf auf dem Eingabeband um ein Feld nach rechts (”Le-

sen“: L).

2) Wie 1), mit”(“ durch

”)“ ersetzt (

”Lesen“ : L).

3) Ist S oberstes Kellerzeichen, ersetze dies durch nichts (ε) oder durch die 4 Zeichen

”(S)S“ (

”Expandieren“: E).

Die Eingabe ()(()()) kann dann folgendermaßen verarbeitet werden:

Aktionstyp gelesene Bandbuchstaben KellerStart - S

E - (S)SL ( S)SE ( )SL () SE () (S)SL ()( S)SE ()( (S)S)SL ()(( S)S)SE ()(( )S)SL ()(() S)SE ()(() (S)S)SL ()(()( S)S)SE ()(()( )S)SL ()(()() S)SE ()(()() )SL ()(()()) SE ()(()())

Schluss

Beobachte: Konkateniert man in jeder Zeile die gelesenen Buchstaben und den Kellerin-halt, ergibt sich, von oben nach unten gelesen, eine Linksableitung fur das Eingabewort()(()()). Leseschritte bringen dabei die Ableitung nicht voran, sie verschieben nur ein

181

Page 184: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Zeichen aus dem Keller in das schon gelesene Anfangsstuck. Expansionsschritte entspre-chen Ableitungsschritten.

Das Lesen eines Wortes w aus L(G) unter Herstellung einer Ableitung (insbesonodereeines Ableitungsbaums fur w) nennen wir Parsing . In unserem Beispiel wird das Wortvon links nach rechts gelesen; dabei wird eine Linksableitung erzeugt (

”LL-Parsing“).

Wenn man die in dieser Linksableitung durchgefuhrten Expansionsschritte in der in Lem-ma 4.2.3 (

”⇒“) beschriebenen Weise in einen Ableitungsbaum umsetzt, dann entsteht

dieser von der Wurzel (oben) her auf die Blatter (unten) zu wachsend. Wir sprechendaher beim LL-Parsing auch von

”Top-Down-Syntaxanalyse“.

5.2.1 Beispiel Wir formalisieren den oben skizzierten NPDA zur Grammatik mit denProduktionen S → (S)S | ε wie folgt:

• Q = {0}; q0 = 0 (der Zustand ist irrelevant);

• Σ = {(,)};

• Γ = {S, (, )}, Z0 = S;

• δ(0,(,() = {(0, ε)} (Leseschritt) ,

δ(0,),)) = {(0, ε)} (Leseschritt) ,

δ(0, ε, S) = {(0, ε), (0, (S)S)} (Expansionsschritt).

Das eben an einem Beispiel beschriebene Vorgehen lasst sich fur jede kontextfreie Gram-matik anwenden.

5.2.2 Satz Zu jeder kontextfreien Grammatik G gibt es einen NPDA M mit L(G) =LM . Der Kellerautomat M hat nur einen Zustand.

Beweis : Es sei G = (V,Σ, S, P ) eine kontextfreie Grammatik. Wir konstruieren M =(Q,Σ,Γ, q0, Z0, δ) in Verallgemeinerung von Beispiel 5.2.1 wie folgt. Wenn das obersteKellersymbol eine Variable A ist, kann diese in einem

”Expansionsschritt“ durch irgend-

eine rechte Seite α einer Produktion A→ α ersetzt werden. Der Nichtdeterminismus liegtdarin, dass zu einer Variablen mehrere rechte Seiten gehoren konnen. Wenn das obersteKellerzeichen ein Terminalzeichen a ist, kann nur ein

”Leseschritt“ erfolgen: es wird ge-

pruft, ob das nachste Eingabezeichen ebenfalls a ist; in diesem Fall wird dieses a gelesenund aus dem Keller geloscht. Formal:

• Q = {0},

• Γ = V ∪ Σ,

• Z0 = S,

182

Page 185: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

• δ(0, a, a) = {(0, ε)} (Leseschritt)

δ(0, ε, A) = {(0, γ) | A→ γ ist in P}, fur A ∈ V (Expansionsschritt).

Es folgt nun der formale Beweis dafur, dass tatsachlich L(G) = LM ist. Dabei ist die Ideedes Beweises ganz einfach. Aus einer akzeptierenden Berechnung von M auf w erhaltenwir durch Betrachten der Expansionsschritte eine Linksableitung fur w in G; umgekehrtkann man aus einer Linksableitung eine akzeptierende Berechnung erhalten, indem manpassende Leseschritte dazwischenschiebt.

Die Details des Beweises sind nicht prufungsrelevant. Jedoch muss man in derLage sein, zu einer gegebenen Grammatik G den NPDA M zu definieren sowie aus einerakzeptierenden Berechnung von M die entsprechende Linksableitung abzulesen und auseiner Linksableitung eine akzeptierende Berechnung des NPDA zu konstruieren.

”L(G) ⊆ LM“: Es sei ein Wort w ∈ L(G) mit einer Linksableitung

S = α0 ⇒G α1 ⇒G · · · ⇒G αt = w,

(mit t ≥ 1) gegeben. Die Idee ist, zu zeigen, dass es eine akzeptierende Berechnungvon M auf w gibt, die genau dieser Linksableitung folgt. Technisch zeigen wir, dass furj = 0, 1, . . . , t die folgende Aussage (Aj) gilt:

Es sei w′ das langste Prafix von αj, das nur aus Terminalzeichen besteht.Schreibe αj = w′β und w = w′w′′.(D. h.: Fur j < t ist β = Aγ mit einer Variablen A; fur j = t ist β = ε.)Dann gilt fur M : (0, w, S) ⊢∗M (0, w′′, β).

Wir beweisen (Aj) durch Induktion uber j.

I.A.: j = 0. In diesem Fall ist w′ = ε, also β = S, und w′′ = w; damit gilt (0, w, S) ⊢∗M(0, w′′, β), weil beide Konfigurationen gleich sind.

Nun sei j ≥ 1.

I.V.: Die Behauptung (Aj−1) gilt. Das heißt: Es sei u′ das langste Prafix von αj−1 ohneVariable, w = u′u′′, und und αj−1 = u′Aγ. Es gibt eine Berechnung

(0, w, S) ⊢∗M (0, u′′, Aγ).

I.S.: In der Konfiguration (0, u′′, Aγ) wenden wir einen Expansionsschritt an, und zwarmit der Produktion A→ α, die von αj−1 = u′Aγ zu αj = u′αγ fuhrt. Dies liefert:

(5.1) (0, u′′, Aγ) ⊢M (0, u′′, αγ).

In Kombination mit der I.V. ergibt sich daraus:

(5.2) (0, w, S) ⊢∗M (0, u′′, αγ).

183

Page 186: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Wenn nun αγ mit einer Variablen beginnt oder gleich ε ist, sind wir fertig, da dann u′

auch das langste Prafix von αj aus Terminalzeichen ist. Sonst sei v′ das langste Prafix vonαγ, das nur aus Terminalzeichen besteht. Schreibe αγ = v′ζ. Da u′αγ = u′v′ζ ⇒∗G u′u′′

im Rahmen einer Linksableitung, ist v′ auch Prafix von u′′, und wir konnen u′′ = v′v′′

schreiben. In der Konfiguration (0, u′′, αγ) wenden wir |v′| Leseschritte an und erhalten

(5.3) (0, u′′, αγ) = (0, v′v′′, v′ζ) ⊢∗M (0, v′′, ζ),

wobei entweder ζ = ε ist oder mit einer Variablen beginnt. Wenn wir nun (5.2) und (5.3)zusammensetzen, ergibt sich:

(5.4) (0, w, S) ⊢∗M (0, v′′, ζ),

und das ist die Induktionsbehauptung.

Damit haben wir die Aussage (Aj) fur alle j bewiesen. Insbesondere gilt (At). Weil aberαt = w ist, heißt (At) einfach, dass es eine Berechnung (0, w, S) ⊢∗M (0, ε, ε) gibt, was zuzeigen war.

”LM ⊆ L(G)“: Sei w ∈ LM . Dann haben wir eine akzeptierende Berechnung

initM(w) = (0, w, S) = k0 ⊢M k1 ⊢M · · · ⊢M kt = (0, ε, ε).

Wir zeigen (wie im Beispiel am Anfang dieses Abschnitts schon beobachtet), dass ausdieser Berechnung eine Linksableitung abgelesen werden kann. Technisch gehen wir wiefolgt vor.

Eine Konfiguration kj in dieser Berechnung hat folgende Form:

kj = (0, w′′j , βj),

wo w′′j der noch nicht gelesene Teil von w ist und βj ∈ (V ∪ Σ)∗ der Kellerinhalt. Wirkonnen also w = w′jw

′′j schreiben, fur ein Wort w′j (der schon gelesene Teil, der in der

Konfiguation kj nicht mehr erwahnt wird).

Behauptung: (Bj) S ⇒∗G w′jβj, fur j = 0, . . . , t.

(Wenn (Bj) fur alle j bewiesen ist, wenden wir (Bt) an und erhalten S ⇒∗G w′tβt = w, alsow ∈ L(G), wie gewunscht.)

Die Aussage (Bj) beweisen wir durch Induktion uber j.

I.A.: j = 0: Es ist w′0 = ε (noch nichts gelesen) und β0 = S. Daher gilt S ⇒∗G w′0β0.

Nun sei 1 ≤ j ≤ t.

I.V.: (Bj−1) gilt, d. h. S ⇒∗G w′j−1βj−1.

I.S.:

1. Fall : Der Schritt von kj−1 zu kj ist ein Expansionsschritt.Dann kann man βj−1 = Aγ schreiben, fur eine Variable A und γ ∈ (V ∪Σ)∗, und βj = αγ,

184

Page 187: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

wobei A→ α eine Produktion ist. Weiter gilt w′′j = w′′j−1 und daher w′j = w′j−1, weil keinZeichen gelesen wird. Daraus folgt:

w′j−1βj−1 = w′j−1Aγ ⇒G w′j−1αγ = w′jβj.

Wenn wir dies mit der I.V. kombinieren, ergibt sich S ⇒∗G w′jβj, also die Induktionsbe-hauptung (Bj).

2. Fall : Der Schritt von kj−1 zu kj ist ein Leseschritt.Dann gibt es ein a ∈ Σ so dass

βj−1 = aβj und w′′j−1 = aw′′j

gilt. Daraus folgt sofort w′j = w′j−1a. Wir erhalten:

w′j−1βj−1 = w′j−1aβj = w′jβj,

und daher nach der Induktionsvoraussetzung auch S ⇒∗G w′jβj, also die Induktionsbe-hauptung (Bj).

Dieser Beweis kann als Rezept interpretiert werden, wie aus einer akzeptierenden Berech-nung von M eine Linksableitung in G zu erhalten ist und umgekehrt. Die Leseschrittetauchen in der Ableitung nicht auf; die Schritte der Linksableitung entsprechen genau denExpansionsschritten der Berechnung des NPDAs. Man prufe dies noch einmal anhand desBeispiels am Anfang dieses Abschnitts (5.2) nach.

Ausblick: LL(1)-Grammatiken und ihre deterministischen Parser

Die Benutzung des Nichtdeterminismus zum Finden der richtigen Ableitungsschritte istnaturlich recht storend. Wenn die Grammatik G eindeutig ist (siehe Def. 4.2.6(a)), dannhat jedes Wort w ∈ L(G) genau eine Linksableitung; nach der Konstruktion aus demeben gefuhrten Beweis gibt es also genau eine akzeptierende Berechnung des NPDA M .Das heißt, dass es in jeder Situation genau eine korrekte Entscheidung gibt, die am Endezur akzeptierenden Situation fuhrt.

Wenn man einen wirklichen, benutzbaren Parser erstellen will, der nach dem Top-Down-Prinzip (und ohne Zurucksetzen) arbeitet, muss man einen Mechanismus bereitstellen,der es erlaubt, in jeder Situation diesen einen korrekten Zug zu finden. Eine Moglichkeithierfur sind die sogenannten LL(1)-Parser, die diese Entscheidung aufgrund des oberstenKellersymbols und des nachsten anstehenden Zeichen in der Eingabe treffen.

In Verallgemeinerung der LL(1)-Grammatiken betrachtet man auch LL(k)-Grammatikenfur beliebige k ≥ 1, bei denen der Parser die jeweils nachsten k Zeichen der Eingabeinspizieren darf (

”lookahead“), um die Entscheidung uber den nachsten vorzunehmenden

Zug zu treffen. Details zu LL(k)-Grammatiken und zur Konstruktion von LL-Parsern

185

Page 188: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

erfahrt man in der Vorlesung”Ubersetzerbau“ oder aus den entsprechenden Lehrbuchern

wie [Aho, Sethi, Ullman, Compilerbau, Oldenbourg 1999] oder [Wilhelm, Maurer, Uber-setzerbau, Springer 1997].

Wir skizzieren das Vorgehen bei LL(1)-Grammatiken. Um die Diskussion zu vereinfa-chen, vereinbaren wir folgendes. Zu einer Grammatik G = (V,Σ, S, P ) wird ein neuesTerminalzeichen $, eine neue Variable S ′ und eine neue Produktion S ′ → S$ hinzu-gefugt. Die Variable S ′ wird die Startvariable. Die neue (erweiterte) Grammatik soll dannG′ = (V ′,Σ′, S ′, P ′) heißen, und wir betrachten nur Grammatiken, die diese Strukturhaben. Damit endet jedes Wort in L(G′) auf $, und dieses Zeichen kommt nirgendwoanders vor. (In tatsachlich verwendeten Sprachen gibt es Abwandlungen dieser Vereinba-rung. Zum Beispiel signalisiert in der Programmiersprache Pascal die Zeichenfolge end.

das Ende des Programms. In anderen Programmiersprachen spielt das nicht-druckbareZeichen eof, das das Dateiende markiert, die Rolle des Schlusszeichens.)

Die betrachteten LL-Kellerautomaten beginnen ihre Berechnung damit, die Zeichen $

und S in den Keller zu schreiben. Eingabeworter, die das Zeichen $ nicht oder nicht nuram Schluss enthalten, fuhren immer zu einem Fehler. Damit ist klar, dass akzeptierendeBerechnungen mit einem Leseschritt enden mussen, bei dem das Schlusszeichen $ derEingabe gelesen und das Schlusszeichen $ im Keller geloscht wird.

5.2.3 Definition Eine kontextfreie Grammatik G′ = (V ′,Σ′, S ′, P ′) (mit Endezeichen$) heißt vom Typ LL(1), wenn fur jede Variable A und jedes Paar verschiedener Pro-duktionen A→ α und A→ β gilt:

(a) Wenn α∗⇒ au, β

∗⇒ bv, a, b ∈ Σ′, u, v ∈ (Σ′)∗, dann ist a 6= b.(Aus zwei verschiedenen rechten Seiten in Produktionen von A kann nie derselbeerste Terminalbuchstabe entstehen.)

(b) Wenn α∗⇒ au, β

∗⇒ ε, S ′∗⇒ xAbv, u, x, v ∈ (Σ′)∗, a, b ∈ Σ′, dann ist a 6= b.

(Es kann nicht vorkommen, dass aus einer Produktion von A ein Terminalbuchstabeals erstes Zeichen entsteht, der auch in einer Ableitung an dieser Stelle stehen kann,die aus A das leere Wort erzeugt.)

Der Effekt dieser Definition ist folgender: Wenn man beim bislang fehlerlosen LL-Parsingeines Wortes w ∈ L(G′) in einer Situation angekommen ist, wo w = w′aw′′, w′ das schongelesene Teilwort, und aw′′ das noch zu lesende Restwort ist, und wenn der KellerinhaltAγ ist, mit A ∈ V ′, γ ∈ (V ′ ∪ Σ′)∗, dann gibt es nur eine Produktion A → α, die jetztanwendbar ist. Diese Produktion ist durch A und a eindeutig bestimmt.

5.2.4 Fakt Es gibt einen Algorithmus, der Grammatiken auf die LL(1)-Eigenschafttestet und der zu jeder Kombination (A, a), A ∈ V ′, a ∈ Σ′, den richtigen Zug (d. h. diejetzt anzuwendende Produktion) ermittelt.

186

Page 189: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

5.2.5 Beispiel Wir demonstrieren die Struktur eines LL(1)-Parsers an einem ausfuhr-lichen Beispiel. Unsere erste Grammatik in Beispiel 3.1.1 diente zur Erzeugung der Mengeder arithmetischen Ausdrucke mit Klammern und Prioritaten. Wir wiederholen die Gram-matik hier, mit abgekurzten Variablen:

G = ({T,E, F}, {+, -, *, /, (, ),n}, E, P ), wobei P die folgenden Regeln enthalt:

E → E + T | E - T | TT → T * F | T / F | FF → ( E ) | n

Diese Grammatik enthalt eine Erscheinung, die man”Linksrekursion“ nennt: es gibt Pro-

duktionen der Form A → Aα (allgemeiner: A∗⇒ Aα). Solche Grammatiken konnen

niemals LL(1)-Grammatiken sein. (Wieso?) Man baut (mit einem einfachen Algorithmus,den wir hier nicht besprechen) die Grammatik zu einer aquivalenten Grammatik um, diedie Erscheinung

”Linksrekursion“ nicht hat, und fugt gleich das Abschlusszeichen $ hinzu.

Dies liefert die folgende Grammatik:

G′ = ({T, T ′, E,E ′, F, S ′}, {+, -, *, /, (, ),n, $}, E ′, P ′), wobei P ′ die folgenden Regelnenthalt:

S ′ → E $

E → T E ′

E ′ → + T E ′ | - T E ′ | εT → F T ′

T ′ → * F T ′ | / F T ′ | εF → ( E ) | n

187

Page 190: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

S’

E

T

F T’

n ε

E’

T E’

F

E

E’

T’

F T’

E

T

F T’

n ε

E’

T

T’F

T’F

T

F T’

n ε

E’

T

F T’

n ε

E’−

ε

$

+

( )

ε

ε

/

( )ε

n ε

*n

Abbildung 5.7: Der Ableitungsbaum in G′ fur das Wort n+(n*n)/(n-n-n)$

Als Anschauungsmaterial fur das Funktionieren dieser Grammatik geben wir den Ablei-tungsbaum (Abb. 5.7) und eine Linksableitung (Abb. 5.8) fur das Wort n+(n*n)/(n-n-n)$an. Um diese etwas abzukurzen, notieren wir die Teilableitung T ⇒ FT ′ ⇒ nT ′ ⇒ n, diestillschweigend (mit

∗⇒) benutzt wird.

188

Page 191: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

S ′ ⇒ E$

⇒ TE ′$∗⇒ nE ′$

⇒ n+TE ′$

⇒ n+FT ′E ′$

⇒ n+(E)T ′E ′$

⇒ n+(TE ′)T ′E ′$

⇒ n+(FT ′E ′)T ′E ′$

⇒ n+(nT ′E ′)T ′E ′$

⇒ n+(n*FT ′E ′)T ′E ′$

⇒ n+(n*nT ′E ′)T ′E ′$

⇒ n+(n*nE ′)T ′E ′$

⇒ n+(n*n)T ′E ′$

⇒ n+(n*n)/FT ′E ′$

⇒ n+(n*n)/(E)T ′E ′$

⇒ n+(n*n)/(TE ′)T ′E ′$∗⇒ n+(n*n)/(nE ′)T ′E ′$

⇒ n+(n*n)/(n-TE ′)T ′E ′$∗⇒ n+(n*n)/(n-nE ′)T ′E ′$

⇒ n+(n*n)/(n-n-TE ′)T ′E ′$∗⇒ n+(n*n)/(n-n-nE ′)T ′E ′$

⇒ n+(n*n)/(n-n-n)T ′E ′$

⇒ n+(n*n)/(n-n-n)E ′$

⇒ n+(n*n)/(n-n-n)$

Abbildung 5.8: Die Linksableitung in G′ fur n+(n*n)/(n-n-n)$

Um die Wirkungsweise der Grammatik intuitiv zu verstehen, kann man sich vorstel-len, dass

”E“ fur einen

”Ausdruck mit + und -“ steht,

”E ′“ fur

”Erweiterung eines

+/-Ausdrucks“, und dass ahnlich”T“ fur einen

”Ausdruck mit * und /“ steht,

”T ′“ fur

”Erweiterung eines *//-Ausdrucks“. Schließlich steht

”F“ fur einen

”Faktor“ innerhalb

eines *//-Ausdrucks.

Eine Entscheidungstabelle fur die Expansionsschritte fur diese Grammatik sieht folgen-dermaßen aus. Die Spalte

”Var.“ gibt die Variable an, die oben im Keller steht. Wenn das

oberste Kellerzeichen ein Terminalzeichen ist, kommt nur ein Leseschritt in Frage.

189

Page 192: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

nachstes Eingabezeichen

Var. n + - * / ( ) $

S′ S′ → E$ – – – – S′ → E$ – –

E E → TE′ – – – – E → TE′ – –

E′ – E′ → +TE′ E′ → -TE′ – – – E′ → ε E′ → ε

T T → FT ′ – – – – T → FT ′ – –

T ′ – T ′ → ε T ′ → ε T ′ → *FT ′ T ′ → /FT ′ – T ′ → ε T ′ → ε

F F → n – – – – F → (E) –

Erste Schritte des deterministischen LL(1)-Parsers auf der Eingabe n+(n*n)/(n-n-n):

nachstesgelesen Zeichen Keller Zug

ε n S ′ S ′ → Eε n E$ E → TE ′

ε n TE ′$ T → FT ′

ε n FT ′E ′$ F → nε n nT ′E ′$ Lesenn + T ′E ′$ T ′ → εn + E ′$ E ′ → +TE ′

n + +TE ′$ Lesenn+ ( TE ′$ T → FT ′

n+ ( FT ′E ′$ F → (E)n+ ( (E)T ′E ′$ Lesen

n+( n E)T ′E ′$ E → TE ′

n+( n TE ′)T ′E ′$ T → FT ′

n+( n FT ′E ′)T ′E ′$ F → nn+( n nT ′E ′)T ′E ′$ Lesen

n+(n * T ′E ′)T ′E ′$ T ′ → *FT ′

n+(n * *FT ′E ′)T ′E ′$ Lesenn+(n* n FT ′E ′)T ′E ′$ F → nn+(n* n nT ′E ′)T ′E ′$ Lesen

n+(n*n ) T ′E ′)T ′E ′$ T ′ → εn+(n*n ) E ′)T ′E ′$ E ′ → εn+(n*n ) )T ′E ′$ Lesen

n+(n*n) / T ′E ′$ . . ....

......

...

Es ist eine gute Ubung, die Tabelle zu vervollstandigen.

190

Page 193: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

5.3 Bottom-Up-Parsing, LR-Parsing

In Abschnitt 5.2 haben wir mit dem Top-Down-Parsing oder LL-Parsing eine Methodekennengelernt, wie man (im Prinzip) zu einem gegebenen Wort w ∈ L(G) mit einemKellerautomaten eine Ableitung und einen Ableitungsbaum entwickeln kann. In diesemAbschnitt besprechen wir einen anderen Ansatz, der denselben Effekt hat. Die Einga-beworter werden wieder von links nach rechts gelesen; im Gegensatz zum LL-Parsingwird aber eine Rechts-Ableitung erzeugt; der Ableitungsbaum entsteht von den Blatternher auf die Wurzel zu wachsend. Daher spricht man von LR-Parsing oder von Bottom-Up-Parsing .

Der Ausgangspunkt ist derselbe wie vorher. Gegeben ist eine kontextfreie GrammatikG = (V,Σ, S, P ) und ein w ∈ Σ∗. Wir wollen eine Ableitung und damit implizit einenSyntaxbaum konstruieren, falls w ∈ L(G) ist. Hierzu nehmen wir hier, in diesem theore-tischen Rahmen, wieder den Nichtdeterminismus zu Hilfe. Wir diskutieren zum Schlussnoch kurz, wie deterministische Parser aussehen, die nach dem Bottom-Up-Prinzip arbei-ten.

Die Grundidee ist, bei w zu beginnen und Schritt fur Schritt ruckwarts eine Ableitungvon w zu konstruieren. Ein elementarer Schritt in diesem Vorgang ist die

”Reduktion“,

das ist das Uberfuhren eines Wortes

αβ γ ∈ (V ∪ Σ)∗

in αAγ, wobei A → β eine Produktion ist. In Erweiterung unserer Standardnotationkonnte man

αβ γ ⇐ αAγ

fur einen solchen Schritt schreiben. Wenn man bei w beginnt und nach Anwenden einerReihe solcher Reduktionsschritte bei S ankommt, dann hat man gezeigt, dass w ∈ L(G)ist, und eine Ableitungsfolge ruckwarts durchlaufen. Diesen Vorgang wollen wir auf einemKellerautomaten durchfuhren, der w von links nach rechts liest, und zwar so, dass dieReduktionsschritte immer am oberen Kellerende stattfinden.

Schematisch kann man sich das so vorstellen. Wir zeichnen einen Kellerautomaten, wobeieinstweilen der Zustand keine Rolle spielen soll, so dass der Keller links steht, horizontalangeordnet, mit dem oberen Kellerende rechts. Die Eingabe wird rechts davon ebenfallshorizontal angeordnet.

Anfangssituation:

a1

a2 an. . . . . . . . .

Kellerobenunten

Eingabe

Steuereinheit

191

Page 194: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Zwischensituation:

n. . . . . . . . . . . . . a i

gelesen

r 1Z Z a

Eingabe

SteuereinheitKellerunten oben

In einer gegebenen Situation sind zwei Arten von Aktion moglich:

1)”shift“: Falls noch ungelesene Eingabebuchstaben vorhanden sind, kann das nachste

Eingabesymbol gelesen und oben auf den Keller gelegt werden.

Z. . . . ai

gelesen

r 1Z anai+1 . . . .

SteuereinheitKeller

Eingabe

2)”reduce“: Falls die s obersten Kellersymbole Z1, . . . , Zs, s ≥ 0, zusammen eine rechte

Seite β = Zs . . . Z1, s ≥ 0, einer Produktion A → β bilden, dann kann Z1, . . . , Zs durchA ersetzt werden. Dabei wird kein Eingabezeichen gelesen. Das Wort β ∈ (V ∪ Σ)∗ amoberen Kellerende nennt man

”handle“ (oder

”Griff“) fur die Reduktion.

san. . . . . . . . . a i

gelesen

A. . . .rZ Z +1

Keller

Eingabe

Steuereinheit

Ende: Die gesamte Kellerinschrift ist ⊥S. Dann kann diese geloscht werden.

Beispiel : Folgende Produktionen, mit Startsymbol S, gehoren zu einer eindeutigen kon-textfreien Grammatik fur die Sprache der korrekten Klammerausdrucke ohne ε:

S → (S)S | () | (S) | ()S.

Wir arbeiten die Eingabe nach den formulierten Regeln ab. Die Stelle in der Eingabe, ander der Lesekopf steht, ist durch einen senkrechten Strich (|) markiert. Mitunter sind eineiner Konfiguration mehrere Zuge moglich. Immer wenn eine Reduktion anwendbar ist unddie Eingabe noch nicht vollstandig gelesen ist, konnte man auch einen Leseschritt anwen-den (

”shift-reduce-Konflikt“). Es kann aber auch sein, dass nicht eindeutig bestimmt ist,

welcher Reduktionsschritt, d. h. welche Produktion, auf die Zeichen am oberen Kellerende

192

Page 195: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

anzuwenden ist. Dies kann vorkommen, wenn es verschiedene Produktionen A → β undB → γ gibt, wo β ein Prafix von γ oder gar gleich γ ist (

”reduce-reduce-Konflikt“; in der

hier betrachteten Grammatik nicht vorliegend). Wir benutzen hier Nichtdeterminismus,um denjenigen Zug zu wahlen, der zum Ziel fuhrt.

Keller Eingabe

⊥ | (())((()())())

shift: ⊥( ( | ())((()())())

shift: ⊥(( (( | ))((()())())

shift: ⊥(() (() | )((()())())”Griff“:()

reduce: ⊥(S (() | )((()())())

shift: ⊥(S) (()) | ((()())())”Griff“:(S)

”Shift-Reduce-Konflikt“ : fur shift entscheiden:

shift: ⊥(S)( (())( | (()())())

shift: ⊥(S)(( (())(( | ()())())

shift: ⊥(S)((( (())((( | )())())

shift: ⊥(S)((() (())((() | ())()) Konflikt! → shift

shift: ⊥(S)((()( (())((()( | ))())

shift: ⊥(S)((()() (())((()() | )())

reduce: ⊥(S)((()S (())((()() | )())

reduce: ⊥(S)((S (())((()() | )())

shift: ⊥(S)((S) (())((()()) | ()) Konflikt! → shift

shift: ⊥(S)((S)( (())((()())( | ))

shift: ⊥(S)((S)() (())((()())() | )

reduce: ⊥(S)((S)S (())((()())() | )

reduce: ⊥(S)(S (())((()())() | )

193

Page 196: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

shift: ⊥(S)(S) (())((()())()) |

reduce: ⊥(S)S (())((()())()) |

reduce: ⊥S (())((()())()) |

Schlussschritt: leere den Keller

ε (())((()())()) |

Wenn wir parallel zu dieser Berechnung die den Reduktionsschritten entsprechenden Teiledes Syntaxbaumes aufschreiben, so entsteht dieser von den Blattern beginnend nach obenauf die Wurzel zu. Wir sprechen daher von

”Bottom-Up-Parsing“.

Beobachtung: Von unten nach oben gelesen, bilden die Konkatenationen

Kellerinhalt Resteingabe

eine Rechtsableitung fur das Eingabewort w. Das liegt daran, dass”shift“-Schritte die

Konkatenation nicht andern und dass in”reduce“-Schritten ein Reduktionsschritt ange-

wendet wird, der die Umkehrung eines Ableitungsschrittes ist. Wegen der Endebedingung(Kellerinhalt ⊥S) und der Anfangsbedingung (Kellerinhalt ⊥, Restwort w) handelt essich um eine vollstandige Ableitung fur w. Schließlich ist in jedem Reduktionsschritt diein der jeweiligen Satzform am weitesten rechts stehende Variable betroffen, da in der

”Resteingabe“ naturlich nur Terminalzeichen stehen.

Bevor wir tatsachlich sagen konnen, dass diese Art von Reduktion von einem NPDAdurchgefuhrt werden kann, mussen wir noch ein technisches Problem diskutieren. Nachunserer Definition konnen NPDA’s nur das oberste Kellerzeichen lesen; in unserer Strate-gie haben wir aber so getan, als konnten wir die obersten

l = max{|α|

∣∣ A→ α Produktion}

Kellerzeichen sehen. Dies kann man aber leicht durch die Benutzung von Zustanden derSteuereinheit simulieren. In der Steuereinheit sind (Cache-artig) stets die obersten l Kel-lersymbole gespeichert; nur die noch tiefer liegenden Kellereintrage stehen

”wirklich“ im

Keller. Eine Kopie des ⊥-Zeichens verbleibt immer im Keller.

194

Page 197: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

ZZ r

Z r Z Z Z

>

r < l

l l

r l

Eingabe

+1

gelesen

1

1

Eingabe

gelesen

Als Zustandsmenge benutzen wir

Q =⋃

0≤r≤l

Γr, wobei Γ = {⊥} ∪ V ∪ Σ.

Die Bedingung, dass der Zustand die bis zu l obersten Kellerzeichen darstellt, ist leichtaufrechtzuerhalten. Wenn in einem

”shift“-Schritt die Kellerhohe wachst, muss das l-te

Zeichen aus dem Zustand in den”echten“ Keller verschoben werden. Wenn in einem

”reduce“-Schritt die Kellerhohe sinkt, muss man mit ε-Schritten Zeichen aus dem Keller

”nachziehen“, bis dieser leer ist oder die Steuereinheit wieder l Zeichen kennt. (Die formale

Definition von δ ist nicht schwer, nur etwas muhsam.)

. . .

rZ

rZ

Z Z

ZZ AsZ. . .

. . . . . .Z l l

l+s l+s

+1

+1

gelesen

Eingabe

Eingabe

+1

1

vorher

nachher

gelesen

Im Beispiel sind schon”shift-reduce-Konflikte“ aufgetreten. Die zweite oben erwahnte Art

von Konflikten, die eintreten, wenn in einer Konfiguration mehrere verschiedene Reduk-tionsschritte anwendbar sind (

”reduce-reduce-Konflikt“) gibt es in der Grammatik des

Beispiels nicht, da es keine rechten Seiten von Produktionen gibt, die gleich oder Prafixvoneinander sind. Allerdings sind solche Grammatiken nicht selten.

Bevor man den Shift-Reduce-Parsing-Vorgang algorithmisch einsetzt, mussen also nochWege gefunden werden, diese Konflikte jeweils deterministisch zu entscheiden. Hierfur

195

Page 198: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

geht man bei der Konstruktion von Parsern fur Programmiersprachen folgenden Weg.Um zwischen dem ε-Zug

”reduce“ und einem Leseschritt (

”shift“) zu entscheiden, darf der

Parser die nachsten k ≥ 1 Eingabesymbole ansehen. (Man nennt dies”lookahead“. Falls

er sich fur”reduce“ entscheidet, wird keines dieser Zeichen verbraucht; im Fall von

”shift“

nur eines. Man beachte, dass technisch gesehen unser NPDA-Modell im Fall eines ε-Zugesdas nachste Eingabesymbol uberhaupt nicht ansieht.) Es gibt nun gewisse eindeutige2

Grammatiken (die man dann”LR(k)-Grammatiken“ nennt), bei denen es moglich ist,

mit dieser Zusatzinformation samtliche Konflikte eindeutig aufzulosen, wobei immer dieeine richtige Moglichkeit gewahlt wird, die zum Ableitungsbaum bzw. zur Rechtsableitungfur das Eingabewort w fuhrt – falls w zu der Sprache, gehort, die von der Grammatikerzeugt wird. Der Algorithmus, der entscheidet, ob eine vorgelegte Grammatik eine LR(k)-Grammatik ist und eventuell einen entsprechenden NPDA baut, der die beschriebeneEindeutigkeitseigenschaft hat, ist etwas komplexer. Mit dieser Problemstellung beschaftigtsich die Vorlesung

”Ubersetzerbau“. Es gibt aber auch schon seit langem Werkzeuge,

sogenannte Parser-Generatoren, die diese Arbeit durchfuhren. Es ist also in der Praxiskein Problem, eine Grammatik auf die LR(1)-Eigenschaft (oder die LR(k)-Eigenschaft) zutesten und automatisch einen entsprechenden Kellerautomaten erzeugen zu lassen. Diesleistet zum Beispiel der Parser-Generator yacc, der zu den Standardapplikationen gehort,die in jedem Unix-System enthalten sind.

5.4 Akzeptierungsmodi

Die bislang betrachteten NPDA’s akzeptieren”mit leerem Keller“. Alternativ (und naher

am NFA-Modell) kann man auch den Modus”Akzeptieren durch akzeptierenden Zustand“

betrachten. Diese Variante von NPDA’s hat eine weitere Komponente F ⊆ Q. Die Defini-tion von Konfiguration und der Relation ⊢∗M bleibt gleich, jedoch wird w ∈ Σ∗ akzeptiert,ist also in LM , wenn (q0, w, Z0) ⊢∗M (q, ε, γ) fur ein q ∈ F und ein beliebiges γ ∈ Γ∗.Das heißt, man fragt, ob von der Startkonfiguration aus das ganze Wort gelesen werdenkann und dann ein akzeptierender Zustand erreicht werden kann. Die beiden Modelle sindaquivalent. Zur Ubung beschreiben wir die Transformation genau.

5.4.1 Behauptung Es sei L ⊆ Σ∗. Dann gilt: L = LM fur einen NPDA M , dermit leerem Keller akzeptiert, genau dann wenn L = LM ′ fur einen NPDA M ′, der mitakzeptierendem Zustand akzeptiert.

Beweis”⇒“ : Betrachte M = (Q,Σ,Γ, q0, Z0, δ). Wir bauen einen aquivalenten NPDA

M ′ = (Q′,Σ,Γ′, q′0, Z′0, δ′), der mit akzeptierenden Zustanden arbeitet. Die Idee ist einfach:

M ′ hat ein neues Keller-Anfangssymbol Z ′0 und einen neuen Startzustand q′0. Als ersteAktion jeder Berechnung schreibt M ′ zusatzlich das Keller-Anfangs-Zeichen Z0 von M in

2also Grammatiken, bei denen jedes ableitbare Wort genau einen Ableitungsbaum besitzt, sieheDef. 4.2.6

196

Page 199: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

seinen Keller und geht in den Zustand q0 uber. Von hier an verhalt sich M ′ genau wieM . Nur wenn der Keller von M leer ware, kann M ′ dies dadurch feststellen, dass dasKeller-Zeichen Z ′0 im Keller sichtbar ist. Wann immer das passiert, kann M ′ mit einemoptionalen ε-Zug in einen neuen akzeptierenden Zustand qacc wechseln, von dem aus nichtweitergerechnet werden kann. Wenn M ′ dies durchfuhrt, nachdem das Eingabewort wvollstandig gelesen worden ist, wird w von M ′ akzeptiert.

Formal wird diese Idee durch die folgenden Definitionen umgesetzt:

Q′ = Q ∪ {q′0, qacc}, Γ′ = Γ ∪ {Z ′0}, F = {qacc}.

(i) δ(q′0, ε, Z′0) = {(q0, Z0Z

′0)}.

(ii) δ′ stimmt auf Q× (Σ ∪ {ε})× Γ mit δ uberein.

(iii) δ′(q, ε, Z ′0) = {(qacc, ε)} fur q ∈ Q.

Es ist nicht schwer zu sehen, dass tatsachlich LM = LM ′ gilt.

”⇐“ : Wir gehen von einem NPDA M ′ = (Q′,Σ,Γ′, q′0, Z

′0, δ′, F ′) aus, der L

”mit akzep-

tierenden Zustanden“ akzeptiert. Wir suchen einen NPDA M , der dieselbe Sprache mitleerem Keller akzeptiert. Hierfur mussen wir M ′ simulieren, und immer, wenn M ′ in einemakzeptierenden Zustand ist, die Moglichkeit eroffnen, nichtdeterministisch in einen Modus(Zustand qevac) zu wechseln, in dem nur noch der Keller geleert wird. Hierfur definieren wirM = (Q,Σ,Γ, q0, Z0, δ) folgendermaßen. Die Zustandsmenge Q = Q′ ∪ {q0, qevac} enthalteinen neuen Startzustand q0 und einen

”Leere-den-Keller“-Zustand qevac. Das Kelleral-

phabet Γ = Γ′ ∪ {Z0} enthalt einen neuen Keller-Anfangs-Zustand Z0. Dieses besondereZeichen dient dazu, zu verhindern, dass der Keller von M leer wird, obgleich M ′ keinenakzeptierenden Zustand erreicht hat. Die Ubergangsfunktion δ wird wie folgt definiert.

(i) δ(q0, ε, Z0) = {(q′0, Z ′0Z0)}.

(ii) δ stimmt auf Q′ × (Σ ∪ {ε})× Γ′ mit δ′ uberein.

(iii) zusatzlich ist(qevac, ε) ∈ δ(q, ε, Z) fur q ∈ F ′ ∪ {qevac}, Z ∈ Γ′ ∪ {Z0}.

Man sieht, dass M dieselben Rechnungen wie M ′ durchfuhrt, nur mit dem zusatzlichenKellersysmbol Z0. Wenn (aus Sicht von M ′) ein akzeptierender Zustand erreicht wurde,kann begonnen werden, den Keller, einschließlich Z0, zu leeren, und damit M zu einerakzeptierenden Konfiguration zu fuhren – falls das Eingabewort fertig gelesen ist. Manbeachte, dass das zusatzliche Kellersymbol Z0 verhindert, dass die Situation, wo M ′ dasEingabewort fertig liest und gleichzeitig den Keller leert, jedoch nicht in einem akzeptie-renden Zustand ist,

”versehentlich“ zum Akzeptieren durch M fuhrt.

197

Page 200: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

5.5 Kellerautomaten und Grammatiken

Wir wenden uns nun dem bereits angekundigten Aquivalenzsatz zu, der besagt, dass kon-textfreie Grammatiken und NPDA’s dieselbe Sprachklasse beschreiben. Der Satz ist sehrwichtig. Von großer praktischer Bedeutung ist die Konstruktion von Parsern aus kontext-freien Grammatiken, wie in den Abschnitten 5.2 und 5.3 in Grundzugen dargestellt. DerUbergang von Kellerautomaten zu Grammatiken ist von prinzipieller und theoretischerBedeutung. Daher werden wir (fur die Neugierigen und Unerschrockenen) auch einenvollstandigen Beweis angeben. (In der Vorlesung werden die Details nicht ausgefuhrt, unddiese sind auch nicht prufungsrelevant .)

5.5.1 Satz Sei L ⊆ Σ∗ Sprache. Dann sind aquivalent :

(a) L = L(G) fur eine kontextfreie Grammatik G.

(b) L = LM fur einen NPDA M .

Beweis”(a) ⇒ (b)“: Diese Richtung wurde mit Satz 5.2.2 schon gezeigt.

”(b) ⇒ (a)“:

Es sei ein NPDA M = (Q,Σ,Γ, q0, Z0, δ) gegeben. Wir geben eine kontextfreie GrammatikG = (V,Σ, S, P ) an, die LM = L(G) erfullt. Wegen der besonderen Form der Variablenvon G heißt diese Konstruktion auch die

”Tripelkonstruktion“. Wir definieren

V := {S} ∪ {〈q, A, p〉 | p, q ∈ Q,A ∈ Γ}.

(S ist das Startsymbol vonG.) Unsere Absicht ist es, die Produktionen vonG so anzulegen,dass fur q, p ∈ Q, A ∈ Γ und w ∈ Σ∗ gilt:

(5.5) 〈q, A, p〉 ⇒∗G w ⇔ (q, w,A) ⊢∗M (p, ε, ε).

In Worten:

Es gibt einen G-Ableitungsbaum mit Wurzelbeschriftung 〈q, A, p〉 und Ergebnis(Blattinschrift) w⇔M kann von der Konfiguration (q, w,A) (Zustand q, Restwort w zu lesen, genau dasSymbol A im Keller) aus die Konfiguration (p, ε, ε) (Zustand p, w vollstandig gelesen,Keller leer) erreichen.

5.5.2 Bemerkung Es ist gunstig, sich gleich hier klarzumachen, dass (q, w,A) ⊢∗M(p, ε, ε) auch bedeutet, dass dieselbe Rechnung als Teilrechnung oben auf einem irgendwiegefullten Keller und mit einem nachfolgenden Restwort moglich ist, dass also (q, wu,Aγ) ⊢∗M(p, u, γ) gilt, fur beliebige u ∈ Σ∗ und γ ∈ Γ∗.

198

Page 201: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Um den in (5.5) angegebenen Effekt zu erzielen, legen wir fest, dass P folgende Produk-tionen enthalt:

(i) S → 〈q0, Z0, p〉, fur jedes p ∈ Q.

(ii)〈q, A, qm+1〉 → a〈q1, A1, q2〉〈q2, A2, q3〉 · · · 〈qm, Am, qm+1〉,

fur (q, a, A) ∈ Q× (Σ∪{ε})×Γ , q1, . . . , qm+1 ∈ Q , m ≥ 0, wenn (q1, A1 · · ·Am) ∈δ(q, a, A).

Man beachte zwei Spezialfalle: m = 0, was zur Produktion 〈q, A, q1〉 → a fuhrt, und a = ε,was zu einer Produktion 〈q, A, qm+1〉 → 〈q1, A1, q2〉 · · · 〈qm, Am, qm+1〉 fuhrt.

Damit ist die Konstruktion beendet. Der Umbau von NPDA in eine Grammatik ist alsouberhaupt nicht schwierig (nur etwas muhsam).

Etwas komplizierter (und nicht prufungsrelevant) ist der Beweis dafur, dass die neueGrammatik die von M definierte Sprache erzeugt.

Behauptung: Aussage (5.5) gilt.

Bevor wir dies beweisen, folgern wir, dass L(G) = LM ist:

w ∈ LM ⇔ ∃p ∈ Q : (q0, w, Z0) ⊢∗M (p, ε, ε)

(5.5)⇔ ∃p ∈ Q : 〈q0, Z0, p〉 ⇒∗G w

⇔ S ⇒∗G w

⇔ w ∈ L(G).

Die vorletzte Aquivalenz gilt dabei, weil aus S im ersten Schritt nur Variable 〈q0, Z0, p〉, p ∈Q, ableitbar sind.

Es bleibt die Behauptung zu beweisen.

”⇒“: Wir beweisen die Aussage

〈q, A, p〉 ⇒∗G w impliziert (q, w,A) ⊢∗M (p, ε, ε)

durch verallgemeinerte Induktion uber die Tiefe k ≥ 1 eines 〈q, A, p〉-Ableitungsbaumesmit Blattwort w.

Ist k = 1, so sieht der Ableitungsbaum fur w ∈ Σ∗ so aus:

<q,A,p>

w

199

Page 202: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Damit muss 〈q, A, p〉 → w eine Regel in P sein. Nach der Definition von P kann dies nurdann passieren, wenn w = ε oder w ∈ Σ ist; weiter gilt (p, ε) ∈ δ(q, w,A). Daraus folgtaber (q, w,A) ⊢M (p, ε, ε).

Sei nun k > 1. Der Ableitungsbaum fur die Ableitung 〈q, A, p〉 ⇒∗G w hat folgendesFormat:

k

m

1 2...

a

<q,A,p>

1w w

Tiefe <

<q , A , q >m m m+

<q , A , q >11

Dabei ist m ≥ 0, q1, . . . , qm ∈ Q, qm+1 = p, a ∈ Σ ∪ {ε} (wenn a = ε, fallt das ersteBlatt weg), und w1, . . . , wm ∈ Σ∗ sind die Eintrage an den Blattern der m Teilbaume,also w = aw1 · · ·wm, und 〈qi, Ai, qi+1〉 ⇒∗G wi mittels Ableitungsbaumen der Tiefe < k.Also gilt nach Induktionsvoraussetzung

(qi, wi, Ai) ⊢∗M (qi+1, ε, ε), fur 1 ≤ i ≤ m.

Also gilt mit der Regel (q1, A1 . . . Am) ∈ δ(q, a, A):

(q, aw1 · · ·wm, A) ⊢M (q1, w1 · · ·wm, A1 · · ·Am)

⊢∗M (q2, w2 · · ·wm, A2 · · ·Am)...

⊢∗M (qm+1, ε, ε) = (p, ε, ε),

wie gewunscht. (Man benutzt Bemerkung 5.5.2, um zu sehen, dass es legal ist, dieseTeilrechnungen aneinanderzuhangen.)

”⇐“: Wir beweisen die Aussage

(q, w,A) ⊢∗M (p, ε, ε) impliziert 〈q, A, p〉 ⇒∗G w

durch Induktion uber die Zahl k ≥ 1 der Schritte, die M macht, um (q, w,A) in (p, ε, ε)zu uberfuhren.

Ist k = 1, so muss w ∈ Σ ∪ {ε} und (p, ε) ∈ δ(q, w,A) sein. Also ist, nach Definitionvon P , 〈q, A, p〉 → w eine Produktion, also gilt 〈q, A, p〉 ⇒G w. Sei nun k > 1. Wir

200

Page 203: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

betrachten eine Rechnung, die M in k Schritten von (q, w,A) nach (p, ε, ε) fuhrt. Wirzerlegen w = aw′, wo a ∈ Σ oder a = ε ist, je nachdem, ob M im ersten Schritt einenBuchstaben von w liest oder nicht. Es sei

(q1, A1 · · ·Am) ∈ δ(q, a, A)

das Paar in der Ubergangsfunktion δ von M , das im ersten Schritt verwendet wird. Dieletzten k − 1 Schritte der betrachteten Berechnung von M fuhren also (q1, w

′, A1 · · ·Am)in (p, ε, ε) uber. Wir teilen diese Berechnung in m Phasen (t0, t1], . . . , (tm−1, tm] ein, wobei0 = t0 < t1 < · · · < tm die Schritte der Rechnung von M sind, die durch folgendeEreignisse gekennzeichnet sind:

ti ist der Schritt von M , nach dem erstmals Ai+1 · · ·Am die Kellerinschrift ist, 1 ≤ i ≤ m.

Offensichtlich dauert jede dieser Phasen < k Schritte, Mit wi, 1 ≤ i ≤ n, bezeichnen wirdas Teilwort von w, das wahrend Phase (ti−1, ti] von M gelesen wird.

Offenbar gilt dann w′ = w1 · · ·wm. Wahrend Phase i spielt sich also folgender Konfigura-tionsubergang ab, fur gewisse qi ∈ Q, i = 2, . . . ,m:

(qi, wi · · ·wm, Ai · · ·Am) ⊢M · · · ⊢M (qi+1, wi+1 · · ·wm, Ai+1 · · ·Am).

Da wahrend dieser Rechnung der Teil Ai+1 · · ·Am des Kellers nicht beruhrt, auch nichtgelesen wird, ist auch folgendes eine legale (Teil-)Rechnung des NPDA M , mit < k Schrit-ten:

(qi, wi, Ai) ⊢M · · · ⊢M (qi+1, ε, ε).

Nach Induktionsvoraussetzung folgt

〈qi, Ai, qi+1〉 ⇒∗G wi, fur 1 ≤ i ≤ m.

Da nach Definition von G auch

A⇒G a〈q1, A1, q2〉 · · · 〈qm, Am, qm+1〉

gilt, haben wir (durch Betrachten des Ableitungsbaums):

A⇒∗G aw1 · · ·wm = w.

Damit ist der Beweis der Behauptung, und auch der von Satz 5.5.1, beendet. �

5.6 Abschlusseigenschaften II

Wir erganzen noch eine interessante (und wichtige) Abschlusseigenschaft von L2.

5.6.1 Satz Ist L1 kontextfrei und L2 regular, so ist L1 ∩ L2 kontextfrei.

201

Page 204: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Beweis(idee): Weil L1 kontextfrei ist, gibt es nach Satz 5.5.1 und Behauptung 5.4.1 einenNPDA M , der L1 mit akzeptierenden Zustanden akzeptiert. Außerdem existiert ein DFAM ′ = (Q′,Σ, q′0, F

′, δ′) fur L2. Um einen NPDA M∩ fur L1 ∩ L2 zu erhalten, erweitertman die Steuereinheit von M in der folgenden Weise: Es wird ein zusatzliches Register(mathematisch: eine Komponente) angelegt, die einen Zustand von M ′ speichern kann.Dieses wird anfangs mit q′0 besetzt. Bei Zugen von M , bei denen ein Buchstabe a gelesenwird, wird dieses Register gemaß δ′ weitergeschaltet. Bei ε-Zugen bleibt der Registerinhaltunverandert. Der neue DPDA M∩ ist in einem akzeptierenden Zustand, wenn M in einemakzeptierenden Zustand ist und das Register einen Zustand q′ ∈ F ′ enthalt.

Es ist nicht schwierig, den NPDA M∩ durch eine leichte Verallgemeinerung der Kreuzpro-duktkonstruktion (siehe Satz 2.1.10(c)) prazise zu definieren und zu zeigen, dass LM∩ =L1 ∩ L2 ist. �

Wir bemerken, dass es nicht moglich ist, zwei NPDA’s mit einer an die Kreuzprodukt-konstruktion angelehnten Verfahren zu kombinieren. Grund ist, dass jeder NPDA seineneigenen Keller mitbringt und es nicht moglich ist, diese beiden Keller zu einem einzigen zu

”vermischen“. Hier handelt es sich um eine mathematisch prazise Aussage! Ware es im-

mer moglich, auf eine solche Weise aus zwei NPDA’s einen NPDA fur den Durchschnittder zwei Sprachen zu konstruieren, dann waren die kontextfreien Sprachen unter derDurchschnittsoperation abgeschlossen, was nach Satz 4.6.4 nicht der Fall ist. Tatsachlichwerden wir in der Vorlesung

”Berechenbarkeit und Komplexitatstheorie“ sehen, dass zwei

unabhangige Keller zu Rechenmodellen fuhren, die viel starker sind als die NPDA’s.

5.7 Deterministische Kellerautomaten und ihre Spra-

chen

Wir betrachten hier eine Teilklasse der NPDA’s, namlich deterministische Kellerautoma-ten (DPDA’s). Diese zeichnen sich dadurch aus, dass in jeder Konfiguration hochstens einnachster Zug moglich ist.

Weil dazu auch keine Wahlmoglichkeit zwischen ε-Zug und Lesen eines Symbols vomEingabeband bestehen darf, verlangt man:

(5.6) |δ(q, a, A)|+ |δ(q, ε, A)| ≤ 1

fur jedes q ∈ Q, a ∈ Σ, A ∈ Γ. Der Berechnungsbaum (vgl. Abb. 5.5) degeneriert zu einemWeg ohne Verzweigung. Weiterhin muss man (aus technischen Grunden) festlegen, dassuber akzeptierende Zustande akzeptiert wird, wie in der in Abschnitt 5.4 besprochenenVariante.

Beispiel : Wir wollen die Klammersprache mit einem deterministischen Kellerautomatenbearbeiten. Wurde dieser

”mit leerem Keller“ akzeptieren, dann musste zum Beispiel nach

dem Lesen des Wortes (()) der Keller leer sein; damit ist aber das Weiterrechnen und

202

Page 205: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Akzeptieren auf der Eingabe (())() nicht moglich. (Allgemein konnen deterministischeVerfahren mit Akzeptierungsmodus

”leerer Keller“ nicht funktionieren, wenn die zu ak-

zeptierende Sprache L nicht prafixfrei ist, d. h. wenn es Worter w1, w2 ∈ L gibt, derartdass w1 ein echtes Prafix von w2 ist.)

Ein DPDA hat also eine Menge F ⊆ Q von akzeptierenden Zustanden, und M akzeptiertw ∈ Σ∗, wenn w vollstandig gelesen wird und nach dem vollstandigen Lesen von w einakzeptierender Zustand erreicht wird. Die formalen Definitionen lauten folgendermaßen.

5.7.1 Definition Ein deterministischer Kellerautomat (DPDA) besteht aus 7Komponenten: Q, Σ, Γ, q0, Z0 sind wie in Definition 5.1.2, F ist Teilmenge von Q, und

δ : Q× (Σ ∪ {ε} × Γ)→ P<∞(Q× Γ∗),

wobei|δ(q, a, A)|+ |δ(q, ε, A)| ≤ 1, fur alle a ∈ Σ, q ∈ Q, A ∈ Γ.

5.7.2 Definition Sei M = (Q,Σ,Γ, q0, Z0, F, δ) ein DPDA, der (5.6) erfullt.

(a) Konfigurationen und die Relationen ⊢M und ⊢∗M sind wie in Abschnitt 5.1.5 definiert.(Man beachte, dass fur jede Konfiguration k hochstens eine direkte Nachfolgekonfi-guration existiert.)

(b) M akzeptiert w ∈ Σ∗, falls

(q0, w, Z0) ⊢∗M (q, ε, γ) fur ein q ∈ F, γ ∈ Γ∗.

(c) LM = {w ∈ Σ∗ |M akzeptiert w}.

Beachte:(i) Es ist erlaubt, dass M die Eingabe vollstandig liest und dann noch einen oder mehrereε-Zuge durchfuhrt, die den Keller (lesen und) verandern konnen und auch durch mehre-re Zustande fuhrt. Akzeptiert wird, wenn schließlich ein akzeptierender Zustand erreichtwird.(ii) Bei nicht akzeptierten Wortern ist uber das Verhalten zunachst nichts gesagt. DieRechnung kann (ohne Nachfolgekonfiguration) in der Mitte des Wortes anhalten oder (mitε-Zugen) in eine Endlosschleife geraten, in der sich nur noch Kellerinhalt und Zustandeandern. Dabei kann sogar der Keller immer weiter wachsen. (Wir kommen auf diese Pro-blematik zuruck.)

203

Page 206: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

5.7.3 Beispiel

Wir konstruieren einen deterministischen Kellerautomaten fur die Sprache L ⊆ {(, )}∗ derkorrekten Klammerausdrucke. Die grundlegende Idee ist einfach: Der Keller realisiert einen(unaren) Zahler. Wenn ein

”(“ gelesen wird, erhoht sich der Zahler; wenn ein

”)“ gelesen

wird, erniedrigt er sich. Dadurch wird erreicht, dass der Zahlerstand den”Vorsprung“ der

gelesenen offnenden Klammern vor den schließenden Klammern ausdruckt, der naturlichimmer nichtnegativ ist. Man kann akzeptieren, wenn der Zahlerstand 0 ist. Technischarbeitet man mit dem Kelleralphabet Γ = {1,⊥}. Dabei wird das Kelleranfangszeichen⊥ nie geloscht und markiert immer das Ende des Kellers. Wenn dieses Zeichen im Kellersichtbar ist, wechseln wir mit einem ε-Zug in einen akzeptierenden Zustand. Der Kellerwird dadurch nicht verandert, so dass auch Weiterrechnen moglich ist.

Formal legen wir den DPDA M wie folgt fest:

• Q = {A, V },• q0 = V ,

• Σ = {(, )},• Γ = {1,⊥},• Z0 = ⊥,

• F = {A},• δ ist als Graph und als Tabelle beschrieben.

V A

,( 1

ε ,

Start

) ,1 ε

( ,1 11

Abbildung 5.9: Ein DPDA fur die Klammersprache

δ ⊥ 1

(V, ε) (A,⊥) −(V, () − (V, 11)(V, )) − (V, ε)(A, ε) − −(A, () (V, 1⊥) −(A, )) − −

204

Page 207: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Auf der Eingabe ()(())((()())) arbeitet dieser DPDA wie folgt:

schon gelesen Keller Zustand− ⊥ V− ⊥ A( 1⊥ V() ⊥ V() ⊥ A()( 1⊥ V()(( 11⊥ V()(() 1⊥ V()(()) ⊥ V()(()) ⊥ A()(())( 1⊥ V()(())(( 11⊥ V()(())((() 11⊥ V()(())((()( 111⊥ V()(())((()() 11⊥ V()(())((()()) 1⊥ V()(())((()())) ⊥ V()(())((()())) ⊥ A

Man beachte, wie der Keller tatsachlich immer die Anzahl der momentan geoffneten Klam-mern widerspiegelt, und wie der ε-Zug im Zustand V genutzt wird, um die Beobachtung,dass das Kellersymbol ⊥ sichtbar ist, in einen Zustandswechsel umzusetzen.

5.7.4 Beispiel

Wir konstruieren einen Kellerautomaten fur die Sprache L = {aibj | i, j ≥ 0, i 6= j}.Hierbei ist die erste Idee, die Bedingung, dass erst a’s und dann b’s kommen sollen,im Zustand der Steuereinheit zu kontrollieren. Weiterhin zahlen wir die gelesenen a’sim Keller, um dann fur jedes gelesene b den Zahlerstand um 1 zu erniedrigen. Solangeder Zahlerstand nicht 0 ist, erklaren wir den Zustand fur akzeptierend. Wichtig ist hier,beim Herunterzahlen zunachst in einen verwerfenden Zustand zu gehen und erst dannmit einem ε-Zug in einen akzeptierenden zu wechseln, wenn sich der Keller nicht als leererweist. Wenn der Zahlerstand exakt 0 ist, muss verworfen werden; wenn dann weitere b’sfolgen, konnen wir wieder akzeptieren. Das Kellerendezeichen ⊥ wird nie geloscht. Formalsieht der DPDA fur L folgendermaßen aus.

• Q = {S,A,B,C,D},

• q0 = S,

• Σ = {a, b},

205

Page 208: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

• Γ = {1,⊥}

• Z0 = ⊥,

• F = {A,C,D},

• δ ist als Graph beschrieben.

a

, 1aB

, εb 1

C

,1ε 1 ,b ε1

,b

D ,b

,b

Start S A

,1 11

Abbildung 5.10: Ein DPDA fur die Sprache {aibj | i, j ≥ 0, i 6= j}

Man prufe nach, dass in diesem DPDA es nie zwei miteinander konkurrierende Zuge gibt.Die Zustande S und A dienen zum Lesen von a’s, die Zustande B, C und D zum Lesen vonb’s. Die Kombination der Zustande B und C realisiert das vorsichtige Lesen der b’s: erstwird gelesen und der Zahler erniedrigt (Zustand B), dann wird mit einem ε-Zug gepruft,dass der Keller nicht leer ist.

Eine Beispielberechnung dieses DPDA’s sieht wie folgt aus:

Eingabe: aaabbbbbbb

schon gelesen Keller Zustand

− ⊥ S− ⊥ Sa 1⊥ Aaa 11⊥ Aaaa 111⊥ Aaaab 11⊥ Baaab 11⊥ Caaabb 1⊥ Baaabb 1⊥ Caaabbb ⊥ Baaabbbb ⊥ Daaabbbbb ⊥ D. . . . . . . . .

206

Page 209: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

5.7.5 Definition Eine Sprache L heißt deterministisch kontextfrei , wenn L = LM

fur einen DPDA M gilt.

Wir merken an, dass die Klasse der deterministisch kontextfreien Sprachen uber ein Ma-schinenmodell definiert ist, obwohl die kontextfreien Sprachen uber eine Eigenschaft derzugehorigen Grammatiken definiert ist. Gibt es auch einen Grammatiktyp, der zu den de-terministisch kontextfreien Grammatiken gehort? Dies ist tatsachlich der Fall; es handeltsich um die

”LR(k)-Grammatiken“, fur k ≥ 1. Die Definition der Klasse der LR(k)-

Grammatiken ist nicht einfach syntaktisch wie bei den Typ-i-Grammatiken, i = 0, 1, 2, 3,sondern bezieht sich auf eine unendliche Menge von Situationen, die in Ableitungenauftreten konnen. Die Eigenschaft lauft darauf hinaus, dass ein bestimmtes determini-stisches Bottom-Up-Parsing-Verfahren (siehe Abschnitt 5.3), das fur das Auflosen vonShift-Reduce- und Reduce-Reduce-Konflikten die nachsten k Zeichen des Eingabewor-tes ansehen darf, erfolgreich arbeiten kann. Man kann aber Grammatiken algorithmischauf diese Eigenschaft testen. LR(k)-Grammatiken mit den zugehorigen Parsern sind diemachtigsten bekannten Syntaxbeschreibungsverfahren mit

”Syntaxanalyse in Linearzeit“.

Man kann zeigen (dies ware ein Thema einer fortgeschrittenen Vorlesung uber formaleSprachen), dass jede deterministisch kontextfreie Sprache sogar eine LR(1)-Grammatikhat, so dass die Grammatikklassen LR(k), k ≥ 1, alle gleichmachtig sind. InsbesondereLR(1)-Grammatiken werden bei der Konstruktion von Ubersetzern fur Programmierspra-chen bevorzugt eingesetzt. Naheres zu diesen Grammatiken und zur Konstruktion derzugehorigen Parser erfahrt man in der Vorlesung

”Ubersetzerbau“.

Wir notieren, dass die Klasse der deterministisch kontextfreien Sprachen unter Komple-mentbildung abgeschlossen ist. Sonst ist diese Klasse unter ziemlich wenigen Operationenabgeschlossen, insbesondere nicht unter Vereinigung oder Durchschnitt, Konkatenationund Kleene-Abschluss.

Die Grundidee fur die Konstruktion eines DPDA M ′ fur LM ist einfach: Man lasse Mauf Eingabe w laufen; wenn M akzeptiert, verwirft man, sonst akzeptiert man. Mit dieserIdee treten verschiedene Probleme auf. Das wichtigste davon ist, dass M auf Eingabenw /∈ LM nicht zu einem vernunftigen Abschluss der Berechnung finden muss.

5.7.6 Lemma Wenn M ein DPDA ist, dann kann man aus M einen DPDA M1 furdieselbe Sprache konstruieren, der folgende Eigenschaften hat :

• M1 liest jede Eingabe w bis zum letzten Buchstaben (es gibt kein vorzeitiges Ak-zeptieren oder Verwerfen);

• nach dem Lesen des letzten Buchstabens fuhrt M1 nur eine begrenzte Zahl von ε-Zugen aus (es kann nicht unendlich viele ε-Zuge geben, die keinen Buchstaben derEingabe lesen).

Fur einen Beweis (der etwas technisch ist) wird auf die Literatur verwiesen (z. B. [Floyd,Beigel, Die Sprache der Maschinen, Thomson 1996, S. 373ff.]).

207

Page 210: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

5.7.7 Lemma Wenn L deterministisch kontextfrei ist, dann auch L.

Beweis: Nach Lemma 5.7.6 gibt es einen DPDA M = (Q,Σ,Γ, q0, Z0, F, δ) mit L = LM ,der alle Eingabeworter bis zum Ende liest und nach dem Lesen eines Eingabebuchstabensnur endlich viele Schritte macht, bevor der nachste Buchstabe gelesen wird.

Die naheliegende Idee ist, in M einfach F und Q − F zu vertauschen. (Das funktioniertbei DFA’s, siehe Satz 2.1.10(e).) Es gibt aber noch ein kleines technisches Problem: Mkonnte nach dem Lesen von w ∈ Σ∗ noch einige ε-Schritte machen und dabei Zustandein F und Zustande in Q − F erreichen. Wurde man F und Q − F einfach vertauschen,wurde auch der neue DPDA w akzeptieren – falschlicherweise.

Dieses Problem ist aber leicht zu losen. Der neue DPDA M ′ registriert (in der Steuerein-heit), welche Art von Zustanden M in den ε-Zugen nach dem Lesen eines Buchstabensdurchlauft. Irgendwann erreicht M eine Situation, in der kein weiterer ε-Zug moglich ist.Nun gibt es zwei Moglichkeiten: (1) Alle Zustande nach dem Lesen des letzten Buchsta-bens waren nicht in F . Dann wechseltM ′ mit einem ε-Zug in einen (neuen) akzeptierendenZustand, und rechnet dann mit dem Lesen des nachsten Buchstabens weiter. (2) Nachdem Lesen des letzten Buchstabens wurde mindestens ein Zustand aus F durchlaufen.Dann rechnet M ′ einfach weiter, ohne in den akzeptierenden Zustand zu wechseln.

Außer gegen Komplementbildung sind deterministisch kontextfreie Sprachen gegen keineweitere der Standard-Operationen abgeschlossen.

5.7.8 Behauptung Es gibt kontextfreie Sprachen, die nicht deterministisch kontextfreisind.

Beweis: L = {aibjck | i 6= j ∨ j 6= k} ist kontextfrei. (Das haben wir im Beweis vonSatz 4.6.4 gesehen, Behauptung 1 uber L3.)

Ware L deterministisch kontextfrei, ware nach 5.7.7 auch L deterministisch kontextfrei,also insbesondere kontextfrei. Die Sprache L ist aber nicht kontextfrei, sonst ware nachSatz 5.6.1 L ∩ {a}∗{b}∗{c}∗ = {anbncn | n ≥ 0} ebenfalls kontextfrei, was nicht der Fallist. �

Ein sehr naheliegendes Beispiel einer kontextfreien, aber nicht deterministisch kontext-freien Sprache ist

{w | w ∈ {0, 1}∗, w = wR}.Intuitiv gesprochen kann ein deterministischer Kellerautomat die Stelle in einem Einga-bewort w nicht identifizieren, an der

”umzukehren“ und der Kellerinhalt mit dem bisher

Gelesenen zu vergleichen ist. Der Beweis fur diese einleuchtende Tatsache ist allerdingstechnisch aufwendig.

5.7.9 Behauptung Die deterministisch kontextfreien Sprachen sind nicht gegen ∪ und∩ abgeschlossen.

208

Page 211: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Beweis: L1 = {aibjck | i 6= j} undL2 = {aibjck | j 6= k} sind deterministisch kontextfrei (Beweis von Satz 4.6.4);

aber L1 ∪ L2 ist nicht deterministisch kontextfrei (Beweis von Behauptung 5.7.8).

L3 = {aibjck | i = j} undL4 = {aibjck | j = k} sind deterministisch kontextfrei;

aber L3 ∩ L4 ist nicht kontextfrei. (Vgl. Beweis von Satz 4.6.4.)

5.7.10 Behauptung Die deterministisch kontextfreien Sprachen sind nicht gegen Kon-katenation und Kleene-Abschluss abgeschlossen. (Ohne Beweis.)

5.7.11 Satz Die deterministisch kontextfreien Sprachen sind gegen Durchschnitt mitregularen Sprachen abgeschlossen.(D. h.: L1 deterministisch kontextfrei, L2 regular ⇒ L1 ∩ L2 deterministisch kontextfrei.)

Dies beweist man genauso wie Satz 5.6.1.

5.8 Entscheidungsfragen fur kontextfreie Sprachen

Ebenso wie bei regularen Sprachen kann man sich fragen, welche Eigenschaften der Spra-che L(G) man anhand der Grammatik G effizient – oder zumindest effektiv, also algorith-misch – testen kann. Dabei stellt sich heraus, dass viele Probleme bezuglich kontextfreierGrammatiken unentscheidbar werden. Das bedeutet, dass es prinzipiell keinen Algorith-mus geben kann, der dieses Problem fur alle Grammatiken losen kann. Den technischenHintergrund fur Unentscheidbarkeitsaussagen werden wir jedoch erst in der Vorlesung

”Berechenbarkeit und Komplexitatstheorie“ kennenlernen. Daher werden hier alle Unent-

scheidbarkeitsaussagen (einstweilen) ohne Beweis bleiben.

5.8.1 Satz Die folgenden Aufgaben bezuglich kontextfreier Sprachen sind algorithmischlosbar :

(a) (Leerheitsproblem) Gegeben eine kontextfreie Grammatik G = (V,Σ, S, P ), ent-scheide ob L(G) = ∅ ist.

(b) (Wortproblem) Gegeben eine kontextfreie Grammatik G = (V,Σ, S, P ) und einw ∈ Σ∗, entscheide ob w ∈ L(G), und finde im positiven Fall einen Ableitungsbaum.

(c) (Unendlichkeitsproblem) Gegeben eine kontextfreie Grammatik G, entscheideob |L(G)| =∞ ist.

209

Page 212: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Beweis : (a) Nach Proposition 4.3.14(c) genugt es, mit dem dort angegebenen Markie-rungsalgorithmus die Menge der produktiven Variablen in V zu bestimmen. Die SpracheL(G) ist nicht leer genau dann wenn S produktiv ist.

(b) Man wandelt G in eine aquivalente Grammatik G′ in Chomsky-Normalform um (s.Abschnitt 4.3). Dann wendet man auf G′ und w den CYK-Algorithmus an, der in Ab-schnitt 4.5 besprochen wurde.

(c) Mit dem Algorithmus aus Abschnitt 4.3 wandeln wir G in eine aquivalente Gram-matik G′ = (V ′,Σ, S ′, P ′) in Chomsky-Normalform um. Mit dem Algorithmus zu Pro-position 4.3.14 ermitteln wir die Menge der produktiven Variablen in V ′. Wenn S ′ nichtproduktiv ist, ist L(G) = ∅, und wir sind fertig. Sonst lassen wir aus V ′ die nicht pro-duktiven (die

”nutzlosen“) Variablen weg, und erhalten eine zu G aquivalente Grammatik

G′′ = (V ′′,Σ, S ′, P ′′) in Chomsky-Normalform, die keine nutzlosen Variablen hat.

Mit einem weiteren Markierungsalgorithmus ermitteln wir nun die Menge V ′′′ aller Varia-blen A ∈ V ′′, die in einer Satzform α von G′′ vorkommen, also mit einer Ableitungsfolge

S ⇒G′′ α1 ⇒G′′ α2 ⇒G′′ · · · ⇒G′′ αt = α

erreichbar sind. (Die Details moge man sich als Ubung uberlegen.) Wenn wir aus G′′

die nicht erreichbaren Variablen weglassen und alle Produktionen streichen, in denensolche Variablen vorkommen, erhalten wir eine zu G aquivalente Grammatik G′′′ =(V ′′′,Σ, S ′, P ′′′), in der jede Variable erreichbar und produktiv ist.

Zur Vereinfachung der Notation nehmen wir ab hier einfach an, dass L(G) 6= ∅ ist unddass V keine nutzlosen und keine unerreichbaren Variablen enthalt.

Nun definieren wir einen gerichteten Graphen H = (V,E) mit Knotenmenge V undKantenmenge

E := {(A,B) ∈ V × V | ∃C ∈ V : A→ BC oder A→ CB ist Produktion}.Mit einem geeigneten Graphalgorithmus oder auch einem simplen Markierungsalgorith-mus konnen wir uberprufen, ob es r ≥ 1 und eine Folge A0, A1, . . . , Ar in V gibt mitA0 = Ar und

(A0, A1), . . . , (Ar−1, Ar) ∈ E.(Diese Kantenfolge bildet also einen gerichteten Kreis der Lange r im Graphen H.) DieserTest liefert die gewunschte Antwort, wie die folgende Behauptung feststellt.

Behauptung:

|L(G)| =∞ ⇔ H besitzt einen gerichteten Kreis.

Beweis der Behauptung: “⇒“: Wenn H keinen Kreis besitzt, dann besitzt jeder Weg ineinem Ableitungsbaum von G hochstens |V | viele innere Knoten. Es gibt aber nur endlichviele Binarbaume der Tiefe ≤ |V | mit Knotenmarkierungen aus V , also lasst G nurendlich viele Ableitungsbaume zu. Also ist L(G) endlich.

“⇐“: Angenommen, H besitzt einen Kreis A0, A1, . . . , Ar = A0. Nun bauen wir einenAbleitungsbaum in G wie folgt:

210

Page 213: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

1. Bilde einen Ableitungsbaum T mit Wurzelbeschriftung S fur eine Satzform α(T ),in der A0 vorkommt. (Dies geht, weil jede Variable, also auch A0, erreichbar ist.)Das heißt, dass T einen Blattknoten k1 hat, der mit A0 beschriftet ist.

2. Bilde einen A0-Ableitungsbaum T ′1 mit Wurzelbeschriftung A0, der nicht nur aus derWurzel besteht und ein Wort α(T1) als Ergebnis hat, in dem A0 vorkommt. (Diesgeht mit den Produktionen, die den Kreis A0, A1, . . . , Ar = A0 in H erzeugen.)

3. Fuge T ′1 in T ein, indem die Wurzel von T ′1 mit k1 identifiziert wird. Das Resultatist der Baum T ′. Der Blattknoten in T ′1, der mit A0 beschriftet ist, heiße k2.

4. Wenn k ein Blatt von T ′ ist, das mit einer Variablen A beschriftet ist, so erganzeunter k einen A-Ableitungsbaum, dessen Blatter mit Terminalzeichen beschriftetsind. (Dies geht, weil A produktiv ist.)

5. Der resultierende Ableitungsbaum heiße T0. Der Unterbaum mit Wurzel k1 heißt T1;der Unterbaum von T1 mit Wurzel k2 heißt T2.

Nun haben wir eine Situation erreicht, die der im Beweis des Pumping-Lemmas (Satz 4.4.1)entspricht. Wenn wir w = α(T2) setzen und v und x so wahlen, dass α(T1) = vwx, undschließlich u und y so, dass uvwxy = α(T0) ist, so konnen wir genau wie im Beweis desPumping-Lemmas schließen, dass |vx| ≥ 1 ist und alle Worter uviwxiy ∈ L(G) sind. DieseWorter sind alle verschieden; also ist L(G) unendlich. �

5.8.2 Satz Die folgenden Aufgaben bezuglich NPDA’s sind algorithmisch losbar:

(a) (Leerheitsproblem) Gegeben ein NPDA M , entscheide ob LM = ∅ ist.

(b) (Wortproblem) Gegeben ein NPDA M und ein w ∈ Σ∗, entscheide ob w ∈ LM ,und finde im positiven Fall eine akzeptierende Berechnung von M auf x.

(c) (Unendlichkeitsproblem) Gegeben ein NPDA M , entscheide ob |LM | =∞ ist.

Beweis : Aus Satz 5.5.1 wissen wir, dass man aus M eine kontextfreie Grammatik G(in Chomsky-Normalform) mit L(G) = LM konstruieren kann. Auf diese Grammatikwenden wir die Algorithmen aus Satz 5.8.1(a), (b) und (c) an. Wenn wir in Aufgabe (b)herausfinden, dass w ∈ LM ist, dann probieren wir systematisch alle Berechnungen vonM auf Eingabe w durch, die t Schritte machen, fur t = |w|, |w| + 1, |w| + 2, . . ., bis wireine akzeptierende Berechnung finden. �

Bemerkung : Man beachte das vosichtige Vorgehen in (b). Es genugt nicht, den NPDAeinfach alle moglichen Berechnungen durchprobieren zu lassen, da es fur ein Wort w /∈ Lmoglicherweise unendlich viele Berechnungen gibt und man nie feststellt, dass es keineakzeptierende Berechnung gibt.

211

Page 214: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Naturlich sind dieselben Fragen fur DPDA’s im Prinzip mit denselben Algorithmen losbar,da DPDA’s nur ein Spezialfall von NPDA’s sind. Im Fall des Wortproblems gibt es furDPDA’s einen einfacheren Algorithmus. Gegeben einen DPDA M und ein Eingabewortw, bauen wir M nach den in Lemmas 5.7.6 und 5.7.7 erwahnten Methoden in einen zuM aquivalenten DPDA M ′ um, der seine Eingabe w vollstandig liest und dann mittelsseines Zustandes mitteilt, ob w ∈ LM oder nicht. Damit lasst sich das Wortproblem danndirekt losen, ohne den DPDA in eine Grammatik umzuformen.

Weiter kann man fur einen DPDA M algorithmisch testen, ob LM = Σ∗ ist. (Man bautmit der Methode der eben erwahnten Lemmata einen DPDA M ′ fur LM und testet, obLM ′ = ∅.)Zum Abschluss wollen wir noch einige

”algorithmisch unentscheidbare“ Eigenschaften von

kontextfreien Sprachen diskutieren. Eine”Eigenschaft“ ist dabei einfach eine Aussage,

die auf kontextfreie Grammatiken zutreffen kann oder nicht, beispielsweise die Aussagen

”L(G) ist endlich“ oder

”G ist mehrdeutig“.

Zunachst erklaren wir:

5.8.3 Erklarung Eine Eigenschaft E von kontextfreien Grammatiken heißt unent-scheidbar , wenn es keinen Algorithmus A gibt, der zu jeder vorgelegten kontextfreienGrammatik G als Eingabe die Antwort

”ja“ liefert, wenn G die Eigenschaft E hat, und

”nein“ sonst.

Die Erklarung des Begriffs”unentscheidbar“ muss momentan noch etwas vage und ma-

thematisch ungenau bleiben, weil wir den Begriff”Algorithmus“ nicht prazise definiert

haben (und dies auch gar nicht konnen). In der Vorlesung”Berechenbarkeit und Komple-

xitatstheorie“ wird gezeigt, wie man den intuitiven Algorithmusbegriff durch eine formaleDefinition ersetzen kann, so dass die Behauptung

”es gibt keinen Algorithmus“ mathema-

tischer Argumentation zuganglich wird.

Naturlich kann man genauso uber Eigenschaften anderer Dinge, wir NPDA’s oder DPDA’ssagen, sie seien unentscheidbar. Manchmal bezeichnet man auch eine Eigenschaft vonkontextfreien Sprachen als unentscheidbar (z. B. sagt man, die Eigenschaft

”L = Σ∗“ oder

”L ist regular“ sei

”fur kontextfreie Sprachen unentscheidbar“). Dann ist aber implizit

immer gemeint, dass die Sprachen durch eine endliche Beschreibung wie eine Grammatikoder einen Kellerautomaten gegeben sein mussen.

Wenn eine Eigenschaft von Grammatiken unentscheidbar ist, dann bedeutet dies ins-besondere, dass es prinzipiell kein

”Debugging-Tool“ geben kann, das das entsprechen-

de Entscheidungsproblem allgemein und fur jede Grammatik lost. Beispielsweise ist dieEigenschaft

”G ist mehrdeutig“ unentscheidbar. Das bedeutet, dass jeder menschliche

Grammatik-Designer, aber auch automatische Grammatik-Konstruktions-Verfahren aufandere Weise sicherstellen mussen, dass eine neu konstruierte Grammatik nicht verse-hentlich mehrdeutig wird.

Wir geben nun einige unentscheidbare Fragen im Zusammenhang mit kontextfreien Spra-chen an. Fur die Beweise (Auswahl) verweisen wir auf die Vorlesung

”Berechenbarkeit

212

Page 215: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

und Komplexitatstheorie“.

5.8.4 Satz (Unentscheidbare Fragen fur zwei kontextfreie Grammatiken)

Folgende Probleme sind unentscheidbar :

Gegeben seien zwei kontextfreie Grammatiken G1 und G2.

(a) Ist L(G1) ∩ L(G2) = ∅?

(b) Ist L(G1) = L(G2)?

5.8.5 Satz (Unentscheidbare Fragen fur eine kontextfreie Grammatik)

Folgende Probleme sind unentscheidbar :

Gegeben sei eine kontextfreie Grammatik G.

(a) Ist G mehrdeutig?

(b) Ist L(G) inharent mehrdeutig?

(c) Ist L(G) kontextfrei?

(d) Ist L(G) deterministisch kontextfrei?

(e) Ist L(G) regular?

Wir bemerken, dass die Unentscheidbarkeit sich auf NPDA’s ubertragt, da man nachSatz 5.5.1 Grammatiken und NPDA’s algorithmisch ineinander umformen kann.

Wir benennen noch den Entscheidbarkeitsstatus dreier Fragen zu DPDA’s. Der Statusdes Aquivalenzproblems bildete jahrzehntelang ein (beruhmtes) offenes Problem, bis er1997 geklart wurde.

5.8.6 Satz (Entscheidungsfragen fur DPDA’s)

(a) (Schnittproblem) Es ist unentscheidbar, ob fur gegebene DPDA’s M1 und M2 gilt,dass LM1

∩ LM2= ∅.

(b) (Aquivalenzproblem) Es gibt einen Algorithmus, der zu gegebenen DPDA’s M1

und M2 entscheidet, ob LM1= LM2

gilt. (G. Senizergues, 1997.)

(c) (Regularitatsproblem) Es gibt einen Algorithmus, der zu einem gegebenen DPDAM entscheidet, ob L(M) regular ist.

213

Page 216: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Anhang A

A.1 Zahldarstellungen und Abzahlungen

Wir betrachten verschiedene Zahldarstellungen. Diese Untersuchungen liefern Beispielefur Induktionsbeweise und sie liefern sehr naturliche Abzahlungen fur die Mengen Σ∗,wobei Σ ein beliebiges Alphabet ist. Der Inhalt dieses Kapitels ist nicht prufungsrelevant,allerdings wird er in der Vorlesung als bekannt vorausgesetzt.

Zur Erinnerung:

N = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, . . . }.

Eine Aufzahlung einer Menge X ist eine bijektive Funktion f : N → X. Wenn f eineAufzahlung von X ist, gilt

X = {f(0), f(1), f(2), f(3), . . . }.

Eine Menge X heißt abzahlbar (unendlich), wenn sie eine Aufzahlung hat.

Ein Hauptresultat dieses Abschnittes ist, dass fur jedes Alphabet Σ die Menge Σ∗ abzahl-bar unendlich ist, wobei die Aufzahlung sogar eine recht einfache Funktion ist.

A.1.1 Die b-are Zahldarstellung

In diesem Abschnitt diskutieren wir die mathematischen Grundlagen fur die Verwendungder Zahldarstellungen zu verschiedenen Basiszahlen. Allgemein ublich und vertraut istdie Dezimaldarstellung , das ist die Notation von Zahlen mit Ziffern 0, 1, 2, . . ., 9. Inder Informatik von zentraler Bedeutung ist die Binardarstellung , d. h. die Darstellungvon Zahlen mit den Ziffern 0 und 1. Haufig verwendet wird auch die Oktaldarstellung(Ziffern 0, 1, 2, 3, 4, 5, 6, 7) und die Hexadezimaldarstellung (Ziffern 0, 1, 2, 3, 4, 5,6, 7, 8, 9, A, B, C, D, E, F; dabei stehen A, . . . , F fur 10, . . . , 15.) Weil man sich manchmal

214

Page 217: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

die Binardarstellung von Zahlen in Bytes oder Maschinenworter zerlegt denkt, sind auchDarstellungen zur Basis 28 = 256, 216 = 65536 oder 232 interessant.

Beispielsweise kann man die Zahl 467 ∈ N in Binardarstellung als 111010011, in Oktaldar-stellung als 723 und in Hexadezimaldarstellung als 1D3 schreiben. Die Dezimaldarstellungist naturlich 467. (Auch wenn es etwas pedantisch erscheint, ist es gunstig, fur diesen Ab-schnitt die Zahl n ∈ N, die wir naturlich als Dezimalzahl (wie 467) notieren, von demWort (wie 467) uber dem Alphabet {0, 1, 2, . . . , 9} zu unterscheiden, das diese Zahldarstellt.) Wir benutzen als Alphabete Mengen Σb = {0, 1, . . . , b−1} fur b ≥ 2; fur b ≤ 16schreiben wir die Ziffern in der Schreibmaschinentype 0, 1, 2, . . . . Fur Zahlsysteme mitmehr als 16 Ziffern muss man andere Konventionen benutzen. Am einfachsten ist es, dieZiffern mit gewohnlicher (dezimaler) Notation zu schreiben und die Worter als k-Tupelmit Klammern und Kommas. Zum Beispiel hat dann die Zahl 300670126 zur Basis b = 100die Darstellung (3, 0, 67, 1, 26).

A.1.1 Definition Fur b ≥ 2 und ak−1 · · · a1a0 ∈ Σ+b = {0, 1, . . . , b− 1}+ sei

(A.1) (ak−1 · · · a1a0)b :=∑

0≤i<k

aibi

die durch ak−1 · · · a1a0 dargestellte naturliche Zahl.

Formal gesehen ist ( · )b eine Abbildung von Σ+b nach N. Falls notig, kann man auch

(ε)b := 0 definieren und damit die Abbildung ( · )b auf Σ∗ erweitern; das ist aber eherunublich.

Wir diskutieren kurz, wie man aus dem Wort ak−1 · · · a1a0 ∈ {0, 1, . . . , b − 1}+ die zu-gehorige Zahl berechnen kann. Anstelle von Formel (A.1) benutzt man das Horner-Schema

(A.2)∑

0≤i<k

aibi = (((· · · ((ak−1 · b+ ak−2) · b+ ak−3) · b+ · · · ) + a2) · b+ a1) · b+ a0.

Dies fuhrt zu folgendem iterativen Algorithmus fur die Berechnung von (ak−1 · · · a1a0)b:

x := ak−1 ;

for i := k − 2 downto 0 do

x := x * b + ai ;

Die Ausgabe ist der Inhalt x von x.

Wir zeigen an einem Beispiel, wie einfach etwa die Berechnung von (ak−1 · · · a1a0)2 durchiteriertes Verdoppeln und Addieren von 1 wird: ak−1 · · · a1a0 sei 000101101011100. EineMitschrift der Inhalte i und x der Variablen i und x aus dem Programm sieht folgender-maßen aus:

215

Page 218: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

i ai x14 0 013 0 012 0 011 1 110 0 29 1 58 1 117 0 22

i ai x6 1 455 0 904 1 1813 1 3632 1 7271 0 14540 0 2908

Es ist offensichtlich, dass fuhrende Nullen auf den Wert einer Zahldarstellung keinenEinfluss haben; zum Beispiel ist (000467)10 = (467)10 = 467.

A.1.2 Definition Wenn ak−1 · · · a1a0 ∈ {0, 1, . . . , b − 1}+ mit k = 1 (nur eine Ziffer)oder ak−1 6= 0 (keine fuhrende Null), und n = (ak−1 · · · a1a0)b, so heißt ak−1 · · · a1a0 eineb-are Darstellung von n.

Es ware nun denkbar, dass manche Zahlen keine b-are Darstellung besitzen, andere u. U.mehrere. Dass dies nicht so ist, macht das Konzept der b-aren Darstellung erst praktischverwendbar.

A.1.3 Satz Sei b ≥ 2. Dann gibt es fur jede Zahl n ∈ N genau eine b-are Darstellung.

Beweis Wir bezeichnen die Aussage”n besitzt genau eine b-are Darstellung“ mit E(n)

und zeigen ∀n : E(n) durch verallgemeinerte Induktion nach n. – Sei also n ∈ N.

1. Fall: 0 ≤ n < b. Dann ist a0 = n eine b-are Darstellung von n, mit k = 1. Istcl−1 · · · c1c0 eine beliebige b-are Darstellung von n, so kann nicht l ≥ 2 sein (sonst waren ≥ cl−1b

l−1 ≥ bl−1 ≥ b, ein Widerspruch). Also ist l = 1, und es folgt c0 = n = a0.

2. Fall: n ≥ b.Dann konnen wir nach der Methode der ganzzahligen Division mit Rest schreiben

n = q · b+ r fur ein q ∈ N und ein r mit 0 ≤ r < b,

fur eindeutig bestimmte q = ⌊n/b⌋ und r = n − qb. Dabei ist n > q = ⌊n/b⌋ ≥ 1, weiln ≥ b ≥ 2 ist. Wir konnen also die Induktionsvoraussetzung E(q) anwenden. Diese besagt,dass q eine eindeutig bestimmte b-are Darstellung cl−1 · · · c1c0 besitzt. Weil q ≥ 1 ist, giltalso

q =∑

0≤i<l

cibi, mit cl−1 6= 0.

Wir setzen a0 := r und ai+1 := ci fur 0 ≤ i < l, und k := l + 1. Dann gilt offenbar

n = r + b ·∑

0≤i<l

cibi =

0≤i<k

aibi,

216

Page 219: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

und ak−1 6= 0, also ist ak−1 · · · a1a0 eine b-are Darstellung von n. – Ist weiter dm−1 · · · d1d0

eine beliebige b-are Darstellung von n, so folgt aus n =∑

0≤i<m dibi = b·(∑1≤i<m dib

i−1)+d0, dass d0 = r = a0 und q =

∑1≤i<m dib

i−1 ist, mit dm−1 6= 0. Letzteres heißt, dassdm−1 · · · d1 eine b-are Darstellung von q ist. Nun ist aber (nach Induktionsvoraussetzung)cl−1 · · · c1c0 die einzige b-are Darstellung von q. Daraus folgt m = l + 1 = k und di =ci−1 = ai, fur 1 ≤ i < k. Also ist ak−1 · · · a1a0 die einzige b-are Darstellung von n. �

A.1.4 Bemerkung Man beachte, dass der Beweis eine (sogar praktisch leicht anwend-bare und sehr effiziente) Methode zur Berechnung der Ziffern der b-aren Darstellung vonn liefert. Genaugenommen beruht der Beweis eben auf der Beobachtung, dass man eineb-are Darstellung fur ein gegebenes n berechnen kann, ohne dass bei dieser BerechnungWahlmoglichkeiten bestehen. Diese Methode ist, iterativ formuliert, durch das folgendeProgrammstuck gegeben:

i := 0 ;

q := n;repeat

Teile ganzzahlig q durch b:r:= Rest und q:= Quotient ;

ai := r ;

i := i+1

until (q = 0)

Den Inhalt der Variablen i am Ende der Berechnung nennen wir k. Die Ausgabe istak−1 · · · a1a0 als b-are Darstellung von n.

A.1.5 Beispiel Bei n = 467 und b = 8 ergeben sich nacheinander die folgenden Paare(Quotient q, Rest r):

(⌊467/8⌋, 3) = (58, 3) , (⌊58/8⌋, 2) = (7, 2) , (⌊7/8⌋, 7) = (0, 7),

und damit die Oktaldarstellung 723 fur 467.

Angesichts der in Satz A.1.3 gemachten Feststellung ist es gerechtfertigt, von der b-arenDarstellung einer Zahl n zu sprechen. Aus der Sicht der formalen Sprachen ergibt sichfolgendes Resultat:

A.1.6 Korollar Die Abbildung

b-ar : N ∋ n 7→ ak−1 · · · a1a0 ∈ {0, 1, . . . , b− 1}+,wo ak−1 · · · a1a0 die b-are Darstellung von n ist,

ist injektiv. Ihr Bild ist

b-ar(N) = {0} ∪ {1, 2, . . . , b− 1}{0, 1, . . . , b− 1}∗.Fur jedes n ∈ N gilt (b-ar(n))b = n.

217

Page 220: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Das Bild der Abbildung b-ar ist eine echte Teilmenge von {0, 1, . . . , b− 1}+, da die mehrals einziffrigen Worter mit fuhrenden Nullen fehlen. Diese Funktion ist also nicht geeignet,eine Aufzahlung von {0, 1, . . . , b − 1}+ zu liefern. Dies gelingt erst mit der im folgendenAbschnitt beschriebenen alternativen Abbildung.

A.1.2 Die b-adische Zahldarstellung

Weit weniger gebrauchlich als die b-are Darstellung, aber strukturell interessant und ele-gant ist die b-adische Darstellung von naturlichen Zahlen. Diese liefert eine naturlicheBijektion zwischen N und Σ∗, fur jedes endliche Alphabet Σ.

Wir bemerken zuerst, dass wir uns ein endliches Alphabet Σ mit |Σ| = b ≥ 1 immerals die Menge ∆b := {1, 2, . . . , b} ⊆ N vorstellen konnen. Wir werden im folgenden auchimmer nur von solchen Alphabeten sprechen. Wie vorher werden wir fur die Darstellungder kleinen Alphabete ∆b fur 1 ≤ b ≤ 10 die Ziffern 1, 2, . . . , 9, A benutzen (A steht furdie 10).

A.1.7 Definition Fur b ≥ 1, k ≥ 0 und ak−1 · · · a1a0 ∈ ∆∗b = {1, 2, 3, . . . , b}∗ sei

[ak−1 · · · a1a0]b :=∑

0≤i<k

aibi

die durch ak−1 · · · a1a0 dargestellte naturliche Zahl.

A.1.8 Beispiel In Tabelle A.1 geben wir b-adische Darstellungen fur eine Reihe vonnaturlichen Zahlen an, fur b = 10, 5, 4, 3, 2, und 1.

Definition A.1.7 hat auf den ersten Blick große Ahnlichkeit mit der b-aren Darstellung.Man beachte aber, dass b = 1 nun erlaubt ist und dass die Ziffer 0 nicht vorkommt.

Die Abbildung [ · ]b bildet ∆∗b nach N ab. Man beachte, dass hier der Fall k = 0, alsoak−1 · · · a1a0 = ε ausdrucklich eingeschlossen ist. Es ist [ε]b = 0 (fur alle b).

Der Algorithmus zur Berechnung der Zahl [ak−1 · · · a1a0]b ist fast derselbe wie bei(ak−1 · · · a1a0)b. Nur muss hier der Sonderfall k = 0 berucksichtigt werden.

x := 0 ;

for i := k − 1 downto 0 do

x := x * b + ai ;

Die Ausgabe ist der Inhalt x von x.

Im Fall b = 1 hat die Multiplikation mit b keine Wirkung, und die einzige mogliche Zifferist die 1; damit ergibt sich hier eine sehr einfache Beziehung:

[1k]1 = k, fur alle k ∈ N.

218

Page 221: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

n b = 10 b = 5 b = 4 b = 3 b = 2 b = 10 ε ε ε ε ε ε1 1 1 1 1 1 1

2 2 2 2 2 2 11

3 3 3 3 3 11 111

4 4 4 4 11 12 1111

5 5 5 11 12 21 11111

6 6 11 12 13 22 111111

7 7 12 13 21 111 1111111

8 8 13 14 22 112 11111111

9 9 14 21 23 121 111111111

10 A 15 22 31 122 1111111111

11 11 21 23 32 211 111

12 12 22 24 33 212 112

13 13 23 31 111 221 113

14 14 24 32 112 222 114

15 15 25 33 113 1111 115

16 16 31 34 121 1112 116

17 17 32 41 122 1121 117

18 18 33 42 123 1122 118

19 19 34 43 131 1211 119

20 1A 35 44 132 1212 120

21 21 41 111 133 1221 121

126 126 451 1332 11123 22222 1126

127 127 452 1333 11131 111111 1127

200 19A 125 2414 13332 2112112 1200

1000 99A 13345 44214 323231 222212112 11000

Tabelle A.1: b-adische Darstellung einiger naturlicher Zahlen

219

Page 222: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

D. h. die 1-adische (oder monadische) Darstellung entspricht einfach der Reprasentationeiner naturlichen Zahl k durch eine Strichliste 11 · · · 11

︸ ︷︷ ︸k Einsen

.

A.1.9 Definition Wenn b ≥ 1 und ak−1 · · · a1a0 ∈ ∆∗b und n = [ak−1 · · · a1a0]b, dannheißt ak−1 · · · a1a0 eine b-adische Darstellung von n.

Man versuche, anhand von Tabelle A.1 die Gesetzmaßigkeiten zu entdecken, die das Wei-terzahlen von n auf n + 1 in diesen Darstellungen bestimmen! Zudem beobachte man,dass allem Anschein nach die Worter in ∆∗b in der

”kanonischen Reihenfolge“ auf-

gezahlt werden, namlich zunachst der Lange nach geordnet und innerhalb der Gruppengleicher Lange lexikographisch geordnet. Wie bei der b-aren Darstellung zeigt man fur dieb-adische Darstellung Existenz und Eindeutigkeit. Der Beweis hat auch dieselbe Struktur.

A.1.10 Satz Sei b ≥ 1. Dann gibt es fur jede Zahl n ∈ N genau eine b-adische Dar-stellung.

Beweis Wir bezeichnen die Aussage”n besitzt genau eine b-adische Darstellung“ mit

E(n) und zeigen ∀n : E(n) durch verallgemeinerte Induktion nach n. – Sei also n ∈ N.

1. Fall: n = 0. Dann ist ε eine b-adische Darstellung von n, mit k = 0. Kein Wortcl−1 · · · c1c0 ∈ ∆∗b mit l ≥ 1 kann b-adische Darstellung von 0 sein, weil

∑0≤i<l cib

i ≥ c0 > 0ist.

2. Fall: n ≥ 1.Dann konnen wir durch leichte Modifikation der ganzzahligen Division mit Rest schreiben

n = q · b+ r fur ein q ∈ N und ein r mit 1 ≤ r ≤ b,

fur eindeutig bestimmte q ∈ N und 1 ≤ r ≤ b. (Wenn die gewohnliche ganzzahlige Divisionn = q′ · b+ r′ fur q′ ∈ N und ein r′ mit 0 ≤ r′ < b liefert, so setzen wir (q, r) := (q − 1, b)falls r = 0 und (q, r) := (q′, r′) sonst.) Man sieht leicht ein, dass q = ⌊(n− 1)/b⌋ < n undr = n− qb gilt.

Wir konnen also die Induktionsvoraussetzung E(q) anwenden. Diese besagt, dass q eineeindeutig bestimmte b-adische Darstellung cl−1 · · · c1c0 ∈ ∆∗b besitzt:

q =∑

0≤i<l

cibi.

Wir setzen a0 := r und ai+1 := ci fur 0 ≤ i < l, und k := l + 1. Dann gilt offenbar

n = r + b ·∑

0≤i<l

cibi =

0≤i<k

aibi,

also ist ak−1 · · · a1a0 eine b-adische Darstellung von n. – Ist weiter dm−1 · · · d1d0 ∈ ∆∗b einebeliebige b-adische Darstellung von n, so folgt aus n =

∑0≤i<m dib

i = b ·(∑1≤i<m dibi−1)+

220

Page 223: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

d0, dass d0 = r = a0 und q =∑

1≤i<m dibi−1 ist. Letzteres heißt, dass dm−1 · · · d1 eine b-

adische Darstellung von q ist. Nun ist aber cl−1 · · · c1c0 die einzige b-adische Darstellungvon q. Daraus folgt m = l+ 1 = k und di = ci−1 = ai, fur 1 ≤ i < k. Also ist ak−1 · · · a1a0

die einzige b-adische Darstellung von n. �

A.1.11 Bemerkung Analog zur b-aren Darstellung liefert dieser Beweis eine effizienteMethode zur Berechnung der Ziffern der b-adischen Darstellung von n:

i := 0;

q := n;while (q > 0) do

Teile ganzzahlig q durch b :r:= Rest und q:= Quotient ;

if r = 0

then q := q-1; r:= b ;

ai := r ;

i := i+1

Der Inhalt von i am Ende der Berechnung sei k. Die Ausgabe ist ak−1 · · · a1a0 als b-adischeDarstellung von n.

Angesichts der in Satz A.1.10 gemachten Feststellung ist es gerechtfertigt, von der b-adischen Darstellung einer Zahl n zu sprechen. Aus der Sicht der formalen Sprachenergibt sich folgendes Resultat, das insbesondere besagt, dass fur jedes endliche AlphabetΣ die Menge Σ∗ abzahlbar ist:

A.1.12 Korollar Fur jedes b ≥ 1 ist die Abbildung

b-adic : N ∋ n 7→ ak−1 · · · a1a0 ∈ {1, 2, . . . , b}∗,wo ak−1 · · · a1a0 die b-adische Darstellung von n ist,

eine Bijektion. Ihre Umkehrung ist die Abbildung [ · ]b. �

Wir haben gesehen, dass die Menge der endlichen Folgen uber einem endlichen AlphabetΣ abzahlbar unendlich ist. Wie sieht es mit der Menge Seq(N) der endlichen Folgennaturlicher Zahlen aus? Interessanterweise ergibt die Sicht auf die Zahlen in b-adischerDarstellung eine sehr einfache Bijektion zwischen N und Seq(N).

Der Einfachheit halber betrachten wir die 2-adische Darstellung. Ein beliebiges Wort wuber {1, 2} hat das Format

w = 1 · · · 1︸ ︷︷ ︸i1 Einsen

2 1 · · · 1︸ ︷︷ ︸i2 Einsen

2 · · · 1 2 1 · · · 1︸ ︷︷ ︸ik Einsen

,

221

Page 224: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

wobei die Anzahl k ≥ 0 und die Lange i1, . . . , ik der Blocke aus Einsen eindeutig gegebenist. Wir definieren fur dieses w:

h(w) = (i1, . . . , ik).

Die Funktion h ist eine Bijektion von {1, 2}∗ auf Seq(N)−{( )}. (Die Worter w, die nur ausEinsen bestehen, werden auf die Folgen mit einer Komponente abgebildet. Insbesonderewird das leere Wort auf h(ε) = (0) abgebildet. Wir definieren daher:

f(n) :=

{( ) fur n = 0

h(2-adic(n− 1)) fur n ≥ 1

Nach Korollar A.1.12 ist klar, dass diese Funktion f die Zahl 0 auf die leere Folge und dieMenge N+ bijektiv auf Seq(N)− {( )} abbildet. Daher ist f eine Aufzahlung von Seq(N).

Zur Ubung ermittle man die Folgen f(n) fur n = 1, 3, 6, 10, 15, 21, 28.

A.2 Induktive Definitionen

Wir diskutieren in diesem Abschnitt eine fur alle Bereiche der Informatik wichtige Me-thode fur die Konstruktion von Objekten und Strukturen. Diese Methode kennen Sie ausder Vorlesung

”Logische Strukturen der Informatik“; in unserer Vorlesung spielt sie ei-

ne wichtige Rolle; auch im weiteren Verlauf des Studiums und in vielen auch praktischwichtigen Konstruktionen der Informatik wird sie gebraucht. Die rein mathematischenUberlegungen im letzten Teil dieses Abschnittes gehoren nicht zum Prufungsstoff. Wer je-doch den Mechanismus verstehen will, der hinter den in der Informatik allgegenwartigeninduktiven Konstruktionen und den zugehorigen Induktionsbeweisen steckt, sollte denhier prasentierten Stoff als Anlass zum Nachdenken nutzen. Die Beispiele sollte manauf jeden Fall durcharbeiten. Man muss in der Lage sein, einfache induktiveDefinitionen selbst zu entwerfen.

A.2.1 Beispiel: Aussagenlogische Formeln

Wir beginnen mit einem Beispiel, das ein Konzept aus der Vorlesung”Logische Syste-

me der Informatik“ anknupft, aber unabhangig von dieser Veranstaltung nachvollzogenwerden kann.

Aussagenlogische Formeln sind Gebilde wie

(A ∨B)

(A→ (B ∨ (¬C)))

((¬A)→ (A→ B))

((A ∧B)↔ (¬((¬A) ∨ (¬B))))

222

Page 225: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Dabei stehen die Zeichen A, B, C fur (nicht weiter spezifizierte) Aussagen; die Zeichen ¬(”nicht“), ∨

”oder“, ∧

”und“,→ (

”wenn . . . dann . . .“),↔

”genau dann wenn“ sind

”aussa-

genlogische Verknupfungen“. Wir wollen zunachst genau definieren, was aussagenlogischeFormeln sind (und was nicht). Damit wir immer genugend Aussagezeichen (

”Aussageva-

riable“) zur Verfugung haben, wahlen wir (etwas willkurlich) einen unendlichen Vorrat:

A = {Ai | i ∈ N}

ist die Menge der aussagenlogischen Variablen . (Mitunter benutzt man auch dieVariablenmenge {Xi | i ∈ N}.) Statt

”aussagenlogische Variable“ sagen wir auch kurz

”Variable“. (Diese Zeichen nennt man ubrigens auch deswegen

”Variable“, weil fur sie

spater etwas eingesetzt werden soll, namlich Wahrheitswerte”true“ oder

”false“.)

A.2.1 Definition (Aussagenlogische Formeln – alF)

(i) Jede Variable Ai, i ∈ N, ist eine aussagenlogische Formel (alF).

(ii) (α) Wenn φ eine alF ist, dann auch (¬φ).

(β) Wenn φ und ψ alF sind, dann auch folgendes:

(φ ∧ ψ),

(φ ∨ ψ),

(φ→ ψ),

(φ↔ ψ).

(iii) Nur die von (i) und (ii) erfassten Gegenstande sind aussagenlogische Formeln.

Durch Anwenden der Regeln erhalten wir, dass beispielsweise die folgenden Gebilde For-meln sind:

1. A0, A1, A2, A3, A10, A17, A1001, . . . ;

2. (¬A0), (¬A1), (¬A17), . . . (wegen 1. und (ii)(α));

3. (A0 ∨ (¬A0)), (A0 → (¬A3)), ((¬A0)↔ A3), (A0 ∧ A1), . . .(wegen 1., 2., und (ii)(β));

4. (¬(A0 → (¬A3))), (¬(A0 ∧ A1)), ((A0 ∨ (¬A0)) ∧ (A0 → (¬A3))), . . .(wegen 1., 2., 3. und (ii)(β));

5. ((¬(A0 → (¬A3))) ∧ (¬(A0 ∧ A1))), . . . (wegen 4. und (ii)(β))

usw.

Keine Formeln sind hingegen

223

Page 226: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

A0A0, (A0 ← A0), (¬¬A0), (A0 → A0A1), (A0 ∧ A1 ∧ A2), . . .

Um letzteres zu begrunden, musste man (iii) in geeigneter Weise einsetzen. Intuitiv ist eswohl klar, eine formal einwandfreie Begrundung liegt zunachst nicht auf der Hand.

Wie schon erwahnt, ist die Haupteigenschaft von aussagenlogischen Formeln, dass manfur die Variablen Wahrheitswerte einsetzen kann (

”0“:

”false“ und

”1“:

”true“) und dass

dann damit ganzen Formeln Wahrheitswerte zugeordnet werden. Hierfur benutzt man dasKonzept der

”Belegung“.

A.2.2 Definition Eine Belegung b ist eine Funktion b : A → {0, 1}.(Fur jedes Ai ∈ A ist b(Ai) ein Wert

”0“ oder

”1“.)

Wenn eine Formel φ und eine Belegung b vorliegt, so erhalt auch φ einen”Wahrheitswert“

valb(φ). Ist beispielsweise b(A0) = 0 und b(A1) = 1, wird man (¬A0) den Wert 1 und(A0∨ (¬A1)) den Wert 0 geben. Das Zeichen

”↔“ wird als “aquivalent“ interpretiert, also

werden bei dieser Belegung b die Formeln (A0 ↔ (¬A1)) und ((¬A0) ↔ A1) den Wert 1erhalten, die Formel (A0 ↔ A1) hingegen den Wert 0.

Allgemein definieren wir das Konzept Wert der aussagenlogischen Formel φ unter derBelegung b durch

”Induktion uber den Aufbau von φ“:

A.2.3 Definition Fur beliebiges b : A → {0, 1} und alF φ definieren wir valb(φ) wiefolgt:

(i) valb(Ai) = b(Ai), fur i ∈ N;

(ii) (α) Ist φ = (¬ψ), so ist

valb(φ) =

{1 falls valb(ψ) = 00 falls valb(ψ) = 1

(Man sieht: hier wird die Negation modelliert.)

(β) Ist φ = (ψ ∧ ϑ), so ist

valb(φ) =

{1 falls valb(ψ) = valb(ϑ) = 10 sonst.

(Hier wird die Idee modelliert, dass φ wahr ist, wenn ψ wahr ist und ϑ wahrist.)

(γ) Ist φ = (ψ ∨ ϑ), so ist

valb(φ) =

{0 falls valb(ψ) = valb(ϑ) = 01 sonst.

(Hier wird die Idee modelliert, dass φ wahr ist, wenn ψ wahr ist oder ϑ wahrist.)

(δ) Ist φ = (ψ → ϑ), so ist

valb(φ) =

{1 falls valb(ψ) = 0 oder valb(ϑ) = 10 sonst.

224

Page 227: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

(Dies entspricht der klassischen Interpretation der Implikation: ψ → ϑ ist falschgenau dann wenn ψ wahr und ϑ falsch ist.)

(ε) Ist φ = (ψ ↔ ϑ), so ist

valb(φ) =

{1 falls valb(ψ) = valb(ϑ)0 falls valb(ψ) 6= valb(ϑ)

(Dies entspricht der Aquivalenz : ψ ↔ϑ ist wahr genau dann wenn ψ und ϑ beide wahr oder beide falsch sind.)

Beispiele: Die Belegung b sei wie folgt gewahlt: b(Ai) = 1, falls i gerade ist, und b(Ai) = 0,falls i ungerade ist. Dann gilt:

valb((A0 ∨ A1)

)= max{b(A0), b(A1)} = 1

valb(((A1 ∨ A1) ∨ A3)

)= 0

valb((¬A1)

)= 1

valb((A0 ↔ A2) ∨ (A1 ↔ A4)

)= 1, weil valb(A0) = valb(A2).

Um systematisch die”Semantik“ einer Formel φ zu erfassen, benutzt man in der Logik

oft Wahrheitstafeln, in denen jeder moglichen Belegung (spezifiziert fur die Variablen, diein φ vorkommen) und jeder Teilformel ψ von φ der Wert valb(ψ) zugeordnet wird.

Beispiel:b(A0) b(A1) b(A2) valb((A0 ∧ A1)) valb((A1 ∨ A2)) valb(((A0 ∧ A1)↔ (A1 ∨ A2)))

0 0 0 0 0 10 0 1 0 1 00 1 0 0 1 00 1 1 0 1 01 0 0 0 0 11 0 1 0 1 01 1 0 1 1 11 1 1 1 1 1

Im Prinzip kann man fur jede alF φ (und ihre Komponentenformeln) eine solche Wahr-heitstafel aufstellen.

A.2.2 Beispiel: Korrekte Klammerausdrucke

In diesem Abschnitt wollen wir uns mit der Sprache der”korrekten Klammeraus-

drucke“ (kKA) befassen. Diese Sprache isoliert ein Merkmal aus vielen in der Informa-tik wichtigen Sprachen: die Moglichkeit, geklammerte Ausdrucke beliebig tief ineinanderzu schachteln. Geklammerte Ausdrucke kommen in der Mathematik vor; in Programmengibt es geklammerte arithmetische Ausdrucke und, ebenso wichtig, Strukturen aus inein-ander geschachtelten Blocken (in Pascal durch begin-end-Konstruktionen, in C, C++und Java durch die {-}-Struktur gegeben). Wir stellen uns vor, dass wir nur eine Sortevon Klammern, namlich ( und ), haben, und lassen aus den betreffenden Ausdrucken oderTexten alles weg, was nicht Klammer ist. Welche Ausdrucke bleiben ubrig?

225

Page 228: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Folgende Worter sind korrekte Klammerausdrucke:

(), ()(()), ((())), ()()(()()),

folgende nicht:), )(), (())), (())(, (()))(.

Im Lauf der Zeit merkt man, dass die intuitive Notation mit Klammern etwas unhandlichist. Wir schreiben im folgenden

0 fur ( und 1 fur ).

Unsere Beispiele fur kKA sind dann 01, 010011, 000111, 0101001011; die Gegenbeispielesind 1, 101, 00111, 00110, 001110.

A.2.4 Definition (Korrekte Klammerausdrucke)

Wir definieren die Menge der korrekten Klammerausdrucke (kKA, eine Sprache uber Σ ={0, 1}) wie folgt:

(i) ε ist in kKA;

(ii) Falls w1, w2 in kKA sind, dann ist auch 0w11w2 in kKA;

(iii) Sonst ist nichts in kKA.

Wir beweisen Aussagen uber korrekte Klammerausdrucke per Induktion uber die Defini-tion:

A.2.5 Satz Fur jeden korrekten Klammerausdruck w ∈ kKA gilt |w|0 = |w|1.

Beweis I.A.: Offenbar ist |ε|0 = 0 = |ε|1.I.V.: w1, w2 ∈ kKA erfullen die Behauptung.

I.S.: Betrachte w = 0w11w2. Dann gilt

|w|0 = 1 + |w1|0 + |w2|0 I.V.= 1 + |w1|1 + |w2|1 = |w|1,

wie gewunscht. �

Der nachste Satz druckt eine intuitiv einleuchtende Tatsache aus: Wenn man einen kor-rekten Klammerausdruck von links nach rechts liest, dann hat man zu jedem Zeitpunktmindestens so viele offnende Klammern wie schließende gesehen.

A.2.6 Satz Fur jeden korrekten Klammerausdruck w ∈ kKA gilt: Wenn u ein Prafixvon w ist, so ist |u|0 ≥ |u|1.

226

Page 229: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Beweis Wir fuhren Induktion uber den Aufbau von korrekten Klammerausdrucken.

I.A.: Offenbar ist |ε|0 = 0 ≥ 0 = |ε|1.I.V.: w1, w2 ∈ kKA erfullen die Behauptung.

I.S.: Betrachte w = 0w11w2 und ein beliebiges Prafix u von w. Es gibt mehrere Falle.

1. Fall: u = ε. – Dann gilt |u|0 = 0 ≥ 0 = |u|1.2. Fall: u = 0u1 fur ein Prafix u1 von w1. – Dann gilt mit Satz A.2.5:

|u|0 = 1 + |u1|0I.V.

≥ 0 + |u1|1 = |u|1.

3. Fall: u = 0w11. – Dann gilt |u|0 = 1 + |w1|0 = 1 + |w1|1 = |u|1.4. Fall: u = 0w11u2 fur ein Prafix u2 von w2. – Dann gilt mit Satz A.2.5:

|u|0 = 1 + |w1|0 + |u2|0I.V.

≥ 1 + |w1|1 + |u2|1 = |u|1.

5. Fall: u = w. – Dann gilt |u|0 = 1 + |w1|0 + |w2|0 = 1 + |w1|1 + |w2|1 = |u|1.�

Die in Satz A.2.5 und Satz A.2.6 gemachten Aussagen machen es uns leicht nachzuweisen,dass eine 0-1-Folge kein korrekter Klammerausdruck ist. In den Beispielen 1, 101, 00111,00110 von oben ist die Anzahl der Nullen und Einsen unterschiedlich; im Beispiel 001110hat das Prafix 00111 drei Einsen und zwei Nullen, was der Bedingung in Satz A.2.6widerspricht.

Die Bedingungen in den beiden Satzen zusammen sind auch hinreichend: Wenn ein Aus-druck die Prafixeigenschaft von Satz A.2.6 erfullt und insgesamt gleich viele offnende undschließende Klammern hat, dann liegt ein korrekter Klammerausdruck vor.

A.2.7 Satz Ist w ∈ {0, 1}∗ derart dass (i) |w|0 = |w|1 und so dass (ii) |u|0 ≥ |u|1 furjedes Prafix u von w, dann ist w ∈ kKA.

Beweis Wir benutzen verallgemeinerte Induktion uber i = |w|.I.A.: i = 0, d. h. w = ǫ. Dieses Wort ist in kKA.

I.V.: i ≥ 1 und fur alle Worter w′ mit |w′| = i′ < i, die (i), (ii) erfullen, gilt w′ ∈ kKA.

I.S.: Betrachte w ∈ {0, 1}∗ mit i = |w|, so dass (i), (ii) gelten. Betrachte das kurzestePrafix u 6= ε von w mit |u|0 = |u|1. (Wegen (i) ist w selbst ein solches Prafix, also gibtes welche. Die Intuition hinter der Wahl von u ist, in w von links beginnend die Stelle zusuchen, wo die schließende Klammer steht, die der ersten offnenden Klammer entspricht.)Wegen (ii) muss w, also auch u, mit 0 beginnen; aus der Wahl von u (

”kurzestes“) folgt

sofort, dass u mit dem Buchstaben 1 enden muss. Mit u = 0u′1 konnen wir schreiben:

w = 0u′1v,

227

Page 230: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

fur ein v ∈ {0, 1}∗. Man kann sich nun leicht folgendes uberlegen: u′ enthalt ebenso vieleNullen wie Einsen, und in jedem Prafix von u′ gibt es mindestens so viele Nullen wieEinsen – das folgt wieder daraus, dass u minimale Lange hat. Noch leichter sieht man,dass v die analogen Eigenschaften hat. Wir wenden die I.V. auf die Worter u′ und van (die beide kurzer als w sind) und erhalten, dass u′ und v zu kKA gehoren. Nach derinduktiven Definition A.2.4 von kKA ist also w = 0u′1v ∈ kKA. �

A.2.3 Induktive Definitionen: Formaler Rahmen

In dem in den Abschnitten A.2.1 und A.2.2 vorgestellten Beispielen finden sich die fol-genden Muster, die bei der Verwendung von induktiven Definitionen (bzw. rekursivenKonstruktionen) immer wieder auftauchen. Fur die Definition der Menge (alF oder kKA)selbst:

(i) Basisobjekte;

(ii) Vorschriften, wie aus gegebenen Objekten neue, zusammengesetzte Objekte zu ge-winnen sind;

(iii) die Einschrankung: nur die durch (i) und (ii) gelieferten Objekte sind gemeint.

Weiterhin haben wir an den Beispielen die Technik”Definition von Funktionen uber

den Aufbau von induktiv definierten Objekten“ (wie valb) kennengelernt sowie die Me-thode

”Beweis durch Induktion uber den Aufbau von induktiv definierten Objek-

ten“.

Wir wollen nun einen formalen Rahmen fur die obigen Konstruktionen diskutieren,der insbesondere die benutzten Definitions- und Beweismethoden rechtfertigt.

Dieser Abschnitt ist nicht prufungsrelevant. Allerdings muss man in der Lage sein,in konkreten Situationen induktive Definitionen zu bauen und Definitionen und Beweise

”uber den Aufbau“ durchzufuhren.

Was brauchen wir fur eine induktive Definition einer Menge M von Objekten wie aussa-genlogischen Formeln oder Klammerausdrucken?

(i) Basisobjekte , mit denen man anfangen kann.

(ii) Konstruktionsregeln , die sagen, unter welchen Umstanden man aus schon vor-liegenden Objekten neue Objekte bauen kann und wie diese aussehen.

(iii) Eine Ausschlussregel : Nur die durch (i) und (ii) erzeugten Objekte gehoren zuM .

228

Page 231: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Aus technischen Grunden ist es nutzlich, sich eine”universelle“ Grundmenge A vorzuge-

ben, innerhalb derer sich die konstruierten Objekte befinden.

Formal: A soll die Grundmenge sein, B ⊆ A die Menge der Basisobjekte; die Regelmengeist als Menge von Tupeln

((a1, . . . , al), b) , l ≥ 1

mit a1, . . . , al ∈ A gegeben. (Interpretation:”aus a1, . . . , al kann man b bauen“.)

In mathematischer Notation fasst man die Tupel, die Regeln entsprechen, als Relation

R ⊆ Seq+(A)× Aauf, wo Seq+(A) = {(a1, . . . , al) | l ≥ 1, a1, . . . , al ∈ A} die Menge der nichtleerenendlichen Folgen in A ist.

Die in den obigen Beispielen verwendeten induktiven Definitionen haben nun das folgendeMuster:

(i) B ⊆M .

(ii) Wenn a1, . . . , al ∈M und ((a1, . . . , al), b) ∈ R, dann ist auch b ∈M .

(iii) Nur die durch die Anwendung von (i) und (ii) erfassten Objekte sind in M .

Wie sollen wir uns die durch so etwas definierte Menge M vorstellen? Am einfachstenist es, sich die Objekte in M

”nach und nach“ gemaß den Regeln (i) und (ii) erzeugt

vorzustellen. Dazu teilen wir die konstruierten Objekte in”Schichten“ ein. Schicht 0 sind

die Basisobjekte; in Schicht i sind alle Objekte aus Schicht i−1 und zusatzlich diejenigen,die man mit einer Anwendung einer Regel in R aus Objekten der Schicht i−1 bauen kann.Formal kann man die Schichten so definieren:

i = 0 : I0R(B) := B;

i ≥ 1 : I iR(B) := I i−1

R (B) ∪ {b ∈ A | ∃a1, . . . , al ∈ I i−1R (B) mit ((a1, . . . , al), b) ∈ R}.

Als einfaches Beispiel betrachten wir die Klammersprache aus Abschnitt A.2.2. Als Awahlen wir {0, 1}∗. Die Menge der Basisobjekte gemaß Regel (i) ist B := {ε} ⊆ A. DieRegeln (ii) zur Erzeugung neuer Klammerausdrucke sind durch die Relation

R = {((w1, w2), 0w11w2) | w1, w2 ∈ A}gegeben. (Man sieht an diesem Beispiel, dass R auch vollig unsinnige konkrete Regelnenthalt, die beim Aufbau von M gar nicht benutzt werden. Beispielsweise liegt die Regel((010, 00), 0010100) in R. Dann ergibt sich:

I0R(B) = B = {ε}I1R(B) = {ε} ∪ {01}, weil 0 ◦ ε ◦ 1 ◦ ε = 01

I2R(B) = {ε, 01} ∪ {01, 0011, 0101, 001101}I3R(B) = I2

R(B) ∪ {0001110101, 0001110011, . . . }

229

Page 232: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

(Die Menge I3R(B) hat schon 26 Elemente.)

Es ist intuitiv einleuchtend, dass wegen der Regeln (i) und (ii) alle Elemente von I iR(B) zu

M gehoren mussen, fur alle i ≥ 0. Regel (iii) verlangt, dass wir nicht mehr Elemente alsunbedingt notig in M einbeziehen. Es ist daher naturlich, in die erzeugte Menge genaudie Objekte zu packen, die in einem der I i

R(B) liegen und daher dazugehoren mussen.Dies fuhrt zu folgender Definition.

IR(B) :=⋃

i≥0

I iR(B).

(Der Uberstrich symbolisiert eine”Abschlussoperation“: IR(B) entsteht durch Ab-

schluss von B unter den durch R gegebenen Konstruktionsregeln.)

Wir wollen zeigen, dass IR(B) unter allen Mengen, die (i) und (ii) erfullen, die kleinsteist. Hierzu definieren wir:

A.2.8 Definition C ⊆ A heißt R-abgeschlossen , wenn fur alle ((a1, . . . , al), b) ∈ Rgilt:

a1, . . . , al ∈ C ⇒ b ∈ C.

A.2.9 Satz

(a) Die Menge IR(B) erfullt B ⊆ IR(B) und ist R-abgeschlossen.

(b) Wenn B ⊆ C und C R-abgeschlossen ist, dann gilt IR(B) ⊆ C.

Beweis (a) Wir haben B = I0R(B) und I0

R(B) ⊆ IR(B) nach Definition.(b) Behauptung : I i

R(B) ⊆ C, fur alle i ≥ 0.Beweis durch vollstandige Induktion uber i ≥ 0:I.A.: I0

R(B) = B ⊆ C nach Annahme.I.V.: I i−1

R (B) ⊆ C.I.S.: Betrachte ein Element b von

I iR(B) = I i−1

R (B) ∪ {b ∈ A | ∃a1, . . . , al ∈ I i−1R (B) mit ((a1, . . . , al), b) ∈ R}.

Wenn b ∈ I i−1R (B), ist b ∈ C nach I.V. Wenn ((a1, . . . , al), b) ∈ R ist, fur a1, . . . , al ∈

I i−1R (B) ⊆ C, dann ist auch b ∈ C, weil C R-abgeschlossen ist. Also ist jedes Element vonI iR(B) in C, wie gewunscht.

Aus der Behauptung folgt sofort:

IR(B) =⋃

i≥0

I iR(B) ⊆ C.

230

Page 233: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Wir wollen Satz A.2.9 benutzen, um Induktionsbeweise im Zusammenhang mit induktivenDefinitionen zu rechtfertigen.

A.2.10 Fakt (Beweisprinzip”Induktion uber den Aufbau“ oder

”strukturelle

Induktion“) Es sei eine Menge A, eine Menge R ⊆ Seq(A)×A und ein B ⊆ A gegeben.E(a) sei eine Eigenschaft1, die fur Elemente von A wahr oder falsch sein kann. Falls nungilt:

(i) E(a) fur alle a ∈ B.

(ii) wenn ((a1, . . . , al), b) ∈ R und E(a1), . . . , E(al) gilt, so gilt auch E(b).

dann gilt E(a) fur alle a ∈ IR(B).

Beweis SetzeC := {a ∈ A | E(a) gilt}.

Wegen (i) gilt B ⊆ C; wegen (ii) gilt, dass C R-abgeschlossen ist. Daraus folgt mitSatz A.2.9, dass IR(B) ⊆ C ist – das heißt aber gerade, dass fur alle a ∈ IR(B) EigenschaftE(a) gilt. �

A.2.11 Beispiel Bei Klammerausdrucken konnte E(w) die folgende Aussage sein: furalle Prafixe v von w gilt: |v|0 ≥ |v|1.

Fakt A.2.10 liefert eine Rechtfertigung fur Induktionsbeweise in der in den Abschnit-ten A.2.1 und A.2.2 diskutierten Art. Fur eine gegebene Eigenschaft E(a) zeige man nur(i) und (ii); damit ist bewiesen, dass E(a) fur alle a ∈ IR(B) gilt.

Schließlich diskutieren wir noch kurz die Moglichkeit, auf Mengen IR(B)”durch Induktion

uber den Aufbau“ Funktionen zu definieren, wie es in den Anwendungen in selbstverstand-licher Weise gemacht wird.

A.2.12 Fakt Es seien A, B, R wie vorher. Die Relation R habe die zusatzliche Eigen-schaft, dass fur b ∈ IR(B) gilt:

b ∈ B oder ((a1, . . . , ar), b) ∈ R fur genau ein Tupel (a1, . . . , ar) ∈ Seq(IR(B)).

Dann kann man auf folgende Weise eine Funktion f mit Definitionsbereich IR(B) definie-ren:

(i) definiere f(a) fur alle a ∈ B;

(ii) fur b ∈ IR(B) − B spezifiziere, wie man f(b) aus a1, . . . , ar, b, f(a1), . . . , f(ar)berechnet, wenn ((a1, . . . , ar), b) ∈ Seq(IR(B))× IR(B).

1

”E“ ist ein geschwungenes

”E“ und hat mit

”ε“ (epsilon) nichts zu tun.

231

Page 234: Automaten und Formale Sprachen Skript zur Vorlesung WS ...€¦ · dass kontextfreie Grammatiken das Beschreibungsmittel sind, mit dem die Syntax aller Programmiersprachen definiert

Den (nicht schwierigen, aber trockenen) Beweis fur Fakt A.2.12 uberlassen wir der Ma-thematik. Wir betrachten lieber noch Beispiele.

A.2.13 Beispiel Fur Klammerausdrucke w definieren wir induktiv die Schachtelungs-tiefe d(w).(Beispiel: d(01) = 1, d(0001011011) = 3. Deutlicher wird die Idee, wenn man die Worterin der Schreibweise () und ((()())()) ansieht.)

Dies geht einfach, wie folgt:

(i) d(ε) = 0;

(ii) d(0w11w2) = max{1 + d(w1), d(w2)}.

Nun kann man (zur Ubung) Aussagen per Induktion beweisen, wie z. B. die folgende:

d(w) = max{|v|0 − |v|1 | v Prafix von w}.

A.2.14 Beispiel (Reflexive und transitive Hulle einer binaren Relation) Essei X eine Menge, S ⊆ X × X eine binare Relation. Wir definieren die reflexive undtransitive Hulle von S als

S∗ := IR(B),

wo die Grundmenge A := X ×X, die Konstruktionsrelation R := {((x, y), (y, z))|(x, y) ∈A, (y, z) ∈ S}, und die Startmenge B := {(x, x) | x ∈ X} ist. (Zur Ubung uberlege man,welche Tupel in I i

R(B) liegen.)

232