100 Übungsaufgaben zu Grundlagen der Informatik: Band I: Theoretische Informatik 9783486781311, 9783486731798

Die optimale Prüfungsvorbereitung anhand 100 Aufgaben zur Theoretischen Informatik mit ausführlicher Lösung. Zu jedem Ka

401 93 1MB

German Pages 209 [199] Year 2013

Report DMCA / Copyright

DOWNLOAD PDF FILE

Table of contents :
Vorwort
1 Endliche Automaten mit Ausgabe
2 Endliche Automaten ohne Ausgabe
3 Minimierung endlicher Automaten
4 Rechtslineare Grammatiken und reguläre Ausdrücke
5 Kellerautomaten
6 Kontextfreie Grammatiken
7 Pumping-Lemma
8 Turingmaschinen
9 Kontextsensitive und monotone Grammatiken
10 Berechenbarkeits- und Komplexitätstheorie
Lösungen
A Mathematische Grundlagen
B Klassifizierung von Sprachen
Literaturverzeichnis
Recommend Papers

100 Übungsaufgaben zu Grundlagen der Informatik: Band I: Theoretische Informatik
 9783486781311, 9783486731798

  • 0 0 0
  • Like this paper and download? You can publish your own PDF file online for free in a few minutes! Sign Up
File loading please wait...
Citation preview

100 Übungsaufgaben zu Grundlagen der Informatik Band I: Theoretische Informatik von

Lukas König

Karlsruher Institut für Technologie (KIT)

Friederike Pfeiffer-Bohnen

Karlsruher Institut für Technologie (KIT)

Prof. Dr. Hartmut Schmeck

Karlsruher Institut für Technologie (KIT)

Oldenbourg Verlag München

Lektorat: Johannes Breimeier Herstellung: Tina Bonertz Grafik: Irina Apetrei Einbandgestaltung: hauser lacour Bibliografische Information der Deutschen Nationalbibliothek Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.dnb.de abrufbar. Library of Congress Cataloging-in-Publication Data A CIP catalog record for this book has been applied for at the Library of Congress. Dieses Werk ist urheberrechtlich geschützt. Die dadurch begründeten Rechte, insbesondere die der Übersetzung, des Nachdrucks, des Vortrags, der Entnahme von Abbildungen und Tabellen, der Funksendung, der Mikroverfilmung oder der Vervielfältigung auf anderen Wegen und der Speicherung in Datenverarbeitungsanlagen, bleiben, auch bei nur auszugsweiser Verwertung, vorbehalten. Eine Vervielfältigung dieses Werkes oder von Teilen dieses Werkes ist auch im Einzelfall nur in den Grenzen der gesetzlichen Bestimmungen des Urheberrechtsgesetzes in der jeweils geltenden Fassung zulässig. Sie ist grundsätzlich vergütungspflichtig. Zuwiderhandlungen unterliegen den Strafbestimmungen des Urheberrechts. © 2014 Oldenbourg Wissenschaftsverlag GmbH Rosenheimer Straße 143, 81671 München, Deutschland www.degruyter.com/oldenbourg Ein Unternehmen von De Gruyter Gedruckt in Deutschland Dieses Papier ist alterungsbeständig nach DIN/ISO 9706.

ISBN 978-3-486-73179-8 eISBN 978-3-486-78131-1

Inhaltsverzeichnis Vorwort

VII

1

Endliche Automaten mit Ausgabe

1

2

Endliche Automaten ohne Ausgabe

7

3

Minimierung endlicher Automaten

19

4

Rechtslineare Grammatiken und reguläre Ausdrücke

27

5

Kellerautomaten

37

6

Kontextfreie Grammatiken

43

7

Pumping-Lemma

53

8

Turingmaschinen

61

9

Kontextsensitive und monotone Grammatiken

69

10

Berechenbarkeits- und Komplexitätstheorie

75

Lösungen

91

A

Mathematische Grundlagen

179

B

Klassifizierung von Sprachen

187

Literaturverzeichnis

189

Vorwort Diese Aufgabensammlung in zwei Bänden über die Grundlagen der Informatik ist als Übungsbuch und Nachschlagewerk für Studierende der Informatik und verwandter Studiengänge konzipiert. Sie kann zur Prüfungsvorbereitung, vorlesungsbegleitend oder zur Wissensauffrischung genutzt werden. Der vorliegende erste Band behandelt die Grundlagen der Theoretischen Informatik, also insbesondere die Theorie der formalen Sprachen, Automaten und Grammatiken sowie die Berechenbarkeits- und Komplexitätstheorie. Entstehung Die Aufgabensammlung ist in den Jahren 2009 bis 2013 im Rahmen der Vorlesung „Grundlagen der Informatik II“ entstanden, die als Grundlagenvorlesung für die Studiengänge Wirtschaftsingenieurwesen, Technische Volkswirtschaftslehre und Wirtschaftsmathematik am Karlsruher Institut für Technologie (KIT) üblicherweise für das dritte Semester angeboten wird. Dabei wurde dem Wunsch der Studierenden nach einer größeren Aufgabenfülle zur Prüfungsvorbereitung und nach Aufgaben, die den Stoff in verständlicher und intuitiver Weise veranschaulichen, nachgegangen. Es ist jedoch schwierig, gerade Anfängern eine intuitive Veranschaulichung der sehr formalen Inhalte zu ermöglichen, die erst über mehrere Ecken ihren praktischen Nutzen entfalten. Oft entsteht eine Kluft zwischen den Dozenten, die eine korrekte, in das Gesamtbild passende Sicht vermitteln wollen, und den Studierenden, denen dieses Gesamtbild zu Beginn noch nicht verständlich ist und für die eine schrittweise Heranführung, möglicherweise über Umwege, hilfreicher wäre. Um diesem Problem zu begegnen, wurden die Ideen für die Mehrzahl der Aufgaben und deren Lösungen nicht von Dozenten geliefert, sondern von Tutoren, also von studentischen Hilfskräften, die zur Unterstützung des Übungsbetriebs eingesetzt werden. Diese sind hauptsächlich Studierende, welche selbst die Vorlesung im Vorsemester gehört haben. So entstanden Aufgaben, die sich aus Studierendensicht mit den essentiellen Verständnisproblemen der jeweiligen Inhalte beschäftigen und auch in Studierendensprache die Lösung dieser Probleme darstellen. Die Aufgaben wurden teilweise in den vergangenen zwei Vorlesungszyklen den Studierenden zur Prüfungsvorbereitung angeboten und stießen dabei auf sehr gute Resonanz. Natürlich entziehen sich die Autoren dennoch nicht der Verantwortung, ausgewogene, hochwertige und fehlerfreie Aufgaben in diesem Buch zur Verfügung zu stellen. Die Aufgaben, die jetzt den Hauptteil dieser Aufgabensammlung bilden, wurden aus einem noch größeren Pool studentischer Aufgaben ausgewählt, sie wurden einzeln mehrfach überarbeitet, korrigiert, ergänzt und in ein einheitliches Format gebracht. Struktur Jeder Band der Aufgabensammlung ist in zwei Hauptteile gegliedert, von denen der erste eine Zusammenfassung der theoretischen Grundlagen und die Aufgabenstellungen enthält und der zweite Lösungen zu den Aufgaben. Der erste Hauptteil ist inhaltlich nach Kapiteln gegliedert, die jeweils mit einer Einführung in das Thema und einer Erläuterung aller für das Lösen der

VIII

Vorwort

Aufgaben nötigen Voraussetzungen beginnen. In diesem Rahmen wurde auch versucht, auf typische Probleme und Missverständnisse einzugehen, die Studierende erfahrungsgemäß häufig mit den jeweiligen Inhalten haben. Im Anschluss an die Einführung folgt in jedem Kapitel der Aufgabenteil, der Aufgabenstellungen unterschiedlicher Schwierigkeitsgrade enthält. Die Schwierigkeit einer Aufgabe wird zu deren Beginn durch die Symbole  leicht,  mittel oder 



schwer 

gekennzeichnet. Einige wenige Aufgaben sind durch das Symbol  als sehr schwer bezeichnet; die Lösung dieser Aufgaben kann unter Umständen sehr viel Zeit beanspruchen und sollte nicht unterschätzt werden. Zu jeder Aufgabe gibt es im zweiten Hauptteil einen Lösungsvorschlag mit ausführlichen Erklärungen und Rechenwegen. Allgemeine Grundlagen werden ganz am Ende jedes Bandes im Anhang behandelt. Vorlesungsaufzeichnungen Die Vorlesung „Grundlagen der Informatik II“, auf deren Inhalten die Aufgabensammlung beruht, wird seit Jahren aufgezeichnet, und die Videos sind für den öffentlichen Zugriff freigeschaltet. Im Rahmen der Arbeit an diesem Buch wurden die Videos neu zusammengeschnitten, sodass sie thematisch zu den Kapiteln passen. Am Ende der Einführung jedes Kapitels ist ein Link abgedruckt, unter dem man zu dem entsprechenden Thema das Vorlesungsvideo abrufen kann. Das Video kann sowohl im Browser angesehen als auch im AVI-Format heruntergeladen werden. Diskussionsforum Im Rahmen der Forschung im Bereich der Verbesserung der Lehre in universitären Großveranstaltungen wurde in den Vorlesungszyklen der Wintersemester 2011/12 und 2012/13 der Vorlesung „Grundlagen der Informatik II“ ein Konzept entwickelt, das die Diskussion von Lösungen und Problemen einzelner Aufgaben zwischen Studierenden und Dozenten ermöglicht [Pfe+12]. Im Zentrum steht ein Forum, das für jede Aufgabe einen Thread enthält, in dem die Aufgabe diskutiert werden kann. Dieses Forum wird für die Buchversion der Aufgabensammlung fortgeführt und kann unter der folgenden Adresse abgerufen werden: http://www.dasinfobuch.de/links/Forum.html

Um eine bestimmte Aufgabe im Forum wiederzufinden, ist jeder Aufgabe eine fünfstellige ID vorangestellt, beispielsweise „END-AA“. Die Threads des Forums sind mit genau diesen IDs betitelt, die Diskussion zur Aufgabe END-AA findet also im Thread END-AA des Forums statt.

Vorwort

IX

Im Forum können die in der Vergangenheit bereits in über 2000 Beiträgen diskutierten Themen eingesehen oder neue eigene Beiträge verfasst werden. Selbstverständlich werden auch zukünftig die Dozenten im Forum weiter mitdiskutieren und die Probleme und Lösungen kommentieren. Zusammen mit Vorlesungsaufzeichnungen und Diskussionsforum stellt diese Aufgabensammlung ein interaktives Gesamtkonzept dar, mit dem die Autoren hoffen, der Leserin und dem Leser auf eine ansprechende und verständliche Art die Grundlagen der Informatik nahebringen zu können. In diesem Sinne wünschen sie ihnen eine angenehme Lektüre und viel Erfolg beim Lernen und beim Lösen der Aufgaben. Danksagung Die Autoren bedanken sich für die kreative Mitwirkung an den Aufgaben bei Jonas Benterbusch, Philippe Blättchen, Marcel Braith, Leonard Brauck, Johannes Burchardt, Jose Antonio Cepeda, Vivian Cheng, Jacob Eberhardt, Theresa Euring, Yvonne Freytag , Philip Grefe, Anna-Lena Hau, Christiane Haubitz, Matthias Hauser, Stefanie Häuser, Michael Heck, Jonas Hemlein, Patrick Henkes, Yannick Hilgers, Lisa Hoffmann, Julian Holz, Lukas Jansen, Maximilian Jentsch, Fabian Jost, Claus Kadelka, Tobias Käfer, Nico Kaltenbacher, Fabian Kerstholt, Christian Kiefer, Isabelle Krämer, Martin Kreuser, Daniel Kübler, Melanie Lampert, Tobias Lurz, Florian Mägerlein, Christina Marx, Bastian Prell, Jördis Rappl, Adam Rodacki, Benedict Schendzielorz, Sebastian Schienle, Irena Schips, Sven Schömer, Marcel Schrumpf, Anja Schuler, Alexander Sigmund, Birgit Spitz, Eva Steffes, Tobias Stengel, Michael Vormittag, Simon Wiedemann, Lea Wild und Kai Windscheid. Für Arbeiten an den Vorlesungsaufzeichnungen und der Verlinkung des Forums danken sie Solveig Gronau und Caroline Strunz. Für das Durchsehen der Texte hinsichtlich Grammatik und Stil danken sie Christian Gitte, Christian Hirsch, Sebastian Kochanneck, Ingo Mauser, Sabrina Merkel, Marc Mültin, Daniel Pathmaperuma, Fabian Rigoll, Felix Vogel und Micaela Wünsche. Karlsruhe, September 2013 Lukas König, Friederike Pfeiffer-Bohnen, Hartmut Schmeck

1

Endliche Automaten mit Ausgabe

Einführung Endliche Automaten stellen ein einfaches Berechnungsmodell dar, bei dem im Laufe einer Berechnung nur endlich viele verschiedene Zustände zur Verfügung stehen, die in einer vordefinierten Weise abhängig von der Eingabe durchlaufen werden. Im Gegensatz zu mächtigeren Automatenmodellen wie Kellerautomaten und Turingmaschinen haben endliche Automaten keinen Zugriff auf ein unendliches beschreibbares Band, das für die Speicherung des Zustands zusätzlich genutzt werden kann. Endliche Automaten lesen eine aus Zeichen über einem gegebenen Eingabealphabet bestehende Eingabe sequentiell ein, wobei sie nach jedem Zeichen in einen Folgezustand wechseln. Endliche Automaten mit Ausgabe erzeugen dabei entweder bei jedem Besuch eines Zustands (Moore-Automaten) oder bei jedem Wechsel von einem Zustand zu einem anderen (Mealy-Automaten) ein Zeichen aus einem Ausgabealphabet als Ausgabe. Moore- und Mealy-Automaten sind in ihrer Berechnungsmächtigkeit äquivalent und jeweils durch einen Algorithmus ineinander überführbar. Definition Formal sind endliche Automaten mit Ausgabe 6-Tupel (E, S , A, δ, γ, s0 ), wobei E das Eingabealphabet ist, S die Zustandsmenge, A das Ausgabealphabet, δ die Zustandsüberführungsfunktion oder Zustandsübergangsfunktion, γ die Ausgabefunktion und s0 ∈ S der Anfangszustand. Die Zustandsüberführungsfunktion δ:S ×E →S definiert, in welchen Folgezustand ein endlicher Automat nach dem Lesen eines Zeichens wechselt. Die Ausgabefunktion γ : S → A (Moore) bzw.

γ : S × E → A (Mealy)

definiert, welche Ausgabe der Automat in einem Zustand (Moore) bzw. bei einem Zustandswechsel (Mealy) auf das Ausgabeband schreibt. Die von einem Moore- oder Mealy-Automaten berechnete Funktion f : E  → A ist für ein Eingabewort w ∈ E  definiert als das Ausgabewort f (w) =de f w ∈ A , das der Automat beim Einlesen von w als Ausgabe erzeugt. Darstellung Die Zustandsüberführungs- und Ausgabefunktionen endlicher Automaten werden üblicherweise als gerichtete Graphen dargestellt, wobei jeder Zustand s ∈ S als Knoten und jede Überführung vom Zustand s zu einem anderen Zustand s ∈ S als Kante vom Knoten s zum Knoten

2

1 Endliche Automaten mit Ausgabe

s gezeichnet wird. Ein Eingabezeichen, das zum Wechsel von Zustand s zu Zustand s führt, wird als Kantenbeschriftung zur Kante von s nach s hinzugefügt. Ausgabezeichen a ∈ A werden entsprechend bei Moore-Automaten zusätzlich zur Beschriftung des Zustands hinzugefügt und bei Mealy-Automaten zur Beschriftung der Kanten. Der Anfangszustand s0 wird mit einem eingehenden Pfeil gekennzeichnet. Zu einer vollständigen Darstellung eines endlichen Automaten mit Ausgabe gehören neben einer solchen Abbildung auch immer eine Definition der Alphabete und der Zustandsmenge sowie des Anfangszustands. Beispielsweise stellt die folgende Abbildung einen Moore-Automaten Amoore dar, der im Zustand s0 startet und dort bleibt, solange a eingelesen wird; wenn in der Eingabe ein b gelesen wird, wird in den Zustand s1 gewechselt und bei weiteren b’s in s1 geblieben, bis durch a wieder ein Zustandswechsel erfolgt. Dabei gibt der Automat im Zustand s0 bei jedem gelesenen Eingabezeichen das Ausgabezeichen 0 aus und im Zustand s1 das Ausgabezeichen 1. Der Automat berechnet also eine Funktion, durch die jedes a in der Eingabe durch 0 und jedes b durch 1 ersetzt wird. Amoore = ({a, b}, {s0 , s1 }, {0, 1}, δ, γ1 , s0 ) δ, γ1 :





  

 

  

Der folgende Mealy-Automat Amealy zeigt dasselbe Verhalten und berechnet dieselbe Funktion, nur dass die Ausgabe hier an den Zustandsübergängen erfolgt. Amealy = ({a, b}, {s0 , s1 }, {0, 1}, δ, γ2 , s0 ) δ, γ2 :



   

 

  

Endliche Automaten mit und ohne Ausgabe (vgl. Kapitel 2) finden, neben ihrer Bedeutung für die Theoretische Informatik, auch praktische Anwendung, beispielsweise im HardwareDesign [Ric73], zur Steuerung von Maschinen und Robotern [Jun+12; KMS09] oder im Softwareentwicklungsprozess. Themen dieses Kapitels Dieses Kapitel beschäftigt sich mit deterministischen endlichen Automaten mit Ausgabe, also mit Moore- bzw. Mealy-Automaten, auch Moore- bzw. Mealy-Maschinen genannt. Die fünf Aufgaben dieses Kapitels behandeln die Erzeugung von Moore- bzw. Mealy-Automaten für bestimmte Berechnungsaufgaben, das Ablesen der von einem gegebenen Automaten berechneten Funktion und die Umwandlung von Mealy-Automaten in Moore-Automaten. Die benutzten

Einführung

3

Verfahren können im Buch von Hopcroft, Motwani und Ullman [HMU11] nachgelesen werden. Weiterführende Informationen gibt es auch in den Büchern von Ingo Wegener [Weg05] und Uwe Schöning [Sch08]. Die Umwandlung eines Moore- in einen Mealy-Automaten wird nicht behandelt, da sich der Automat dabei fast nicht verändert und nur die Ausgabe, die beim Moore-Automaten an einem Zustand erfolgt, beim Mealy-Automaten zu all den eingehenden Übergängen des entsprechenden Zustands zugewiesen wird. Darüber hinaus werden als Anwendungsbeispiele die Interpretation von Zahlen in BCD-Darstellung und die binäre Subtraktion (vgl. Band 2, Kapitel 5) durch endliche Automaten mit Ausgabe behandelt.

Dieses Thema in der Vorlesungsaufzeichnung zur Vorlesung „Grundlagen der Informatik II“: http://www.dasinfobuch.de/links/ Endliche-Automaten-mit-Ausgabe.html

4

1 Endliche Automaten mit Ausgabe

Aufgaben Aufgabe 1

END-AU 

Umwandlung von Moore-Automaten in Mealy-Automaten 



Gegeben sei folgender Moore-Automat M. M = ({a, b, c}, {s0 , s1 , s2 , s3 }, {a, b, c}, δ, γ, s0 ) δ, γ:



  

  

   







   

   

Wandeln Sie M in einen äquivalenten Mealy-Automaten M  um und geben Sie diesen vollständig an. → Lösung: S. 91

Aufgabe 2

END-AT 

Mealy- und Moore-Automaten 



Gegeben sei der folgende Mealy-Automat M = (E, S , A, δ, γ, s0 ). M = ({0, 1}, {s0 , s1 , s2 }, {0, 1}, δ, γ, s0 ) δ, γ:

   

 

 



a) Welche Funktion f : E  → A berechnet M? b) Was ist der Unterschied zwischen Mealy- und Moore-Automaten?

Aufgaben

5

c) Geben Sie zu dem Mealy-Automaten M den zugehörigen Moore-Automaten M  an. Definieren Sie den M  vollständig. d) Warum kommen Mealy-Automaten gegenüber Moore-Automaten bei gleicher Funktionsweise mit weniger Zuständen aus? → Lösung: S. 91

Aufgabe 3 Mealy-Automaten 

END-AA 



Entwerfen Sie einen Mealy-Automaten M zur bitseriellen Subtraktion zweier gleichlanger Zahlen. Geben Sie M vollständig an. → Lösung: S. 92

Aufgabe 4 Mealy-Automaten 

END-AR 



Zur Darstellung von Zahlen kann die BCD-Kodierung verwendet werden (vgl. Band 2, Kapitel 5). Diese Blockkodierung ist eine Tetradenkodierung, wobei jede Ziffer einer Dezimalzahl durch vier Bits mit der Stellenwertigkeit 23 = 8, 22 = 4, 21 = 2 und 20 = 1 dargestellt wird. Der BCD-Code 0110 1001 0000 0100 entspricht beispielsweise der Dezimalzahl 6904. Definieren Sie einen Mealy-Automaten M, der bei Eingabe einer BCD kodierten Zahl die entsprechende Dezimalzahl ausgibt. Geben Sie M vollständig an. Hinweis: Gehen Sie davon aus, dass es sich bei allen eingegebenen Binärzahlen um BCDKodierungen handelt, eine Überprüfung dessen also nicht notwendig ist. Der andernfalls notwendige Auffangzustand wird als implizit vorhanden angenommen. → Lösung: S. 93

6

1 Endliche Automaten mit Ausgabe Aufgabe 5

END-AS 

Mealy-Automaten 



Auf den meisten Golfplätzen findet man im Übungsbereich eine Driving Range, auf der lange Schläge geübt werden können. Die einzelnen Abschlagplätze sind nebeneinander aufgereiht und die Trainierenden schlagen aus Sicherheitsgründen alle in die gleiche Richtung. Die Golfbälle zum Trainieren kann man sich an speziellen Ballautomaten ausgeben lassen. Konstruieren Sie den im folgenden Abschnitt beschriebenen Ballautomaten als Mealy-Automat M = (E, S , A, δ, γ, s0 ). Geben Sie M vollständig an. Der zu modellierende Automat nimmt ausschließlich 1 Euro und 2 Euro Münzen an, alle anderen Münzen sind ungültig und werden zurückgegeben. Maximal wird vom Automaten eine Gesamteingabe von 3 Euro akzeptiert. Sofern mit einer weiteren eingeworfenen Münze dieser Betrag überschritten wird, wird die betreffende Münzen direkt zurückgegeben. Über eine Rückgabetaste kann der Kunde sich zudem das eingezahlte Geld auch direkt zurückgeben lassen, sollte er sich doch keine Golfbälle ausgeben lassen wollen. Kunden können zwischen drei verschiedenen Ballpaketen wählen und für jede dieser Optionen gibt es am Automaten eine Taste: 1) Die Ausgabe von 10 Golfbällen kostet 1 Euro, 2) 25 Golfbälle gibt es für 2 Euro und 3) 50 Golfbälle kosten 3 Euro. Bei einer Eingabe von beispielsweise 3 Euro kann der Kunde sich direkt 50 Golfbälle ausgeben lassen, es ist jedoch auch möglich, sich erst 25 Golfbälle ausgeben zu lassen und sich den Restbetrag von 1 Euro auszahlen zu lassen oder mit diesem Restbetrag 10 weitere Golfbälle zu ordern. → Lösung: S. 94

2

Endliche Automaten ohne Ausgabe

Einführung Im Gegensatz zu endlichen Automaten mit Ausgabe, die dazu dienen, Funktionen zu berechnen, haben endliche Automaten ohne Ausgabe (im Folgenden nur „endliche Automaten“) eine Klassifizierungsfunktionalität. Formal berechnen sie Funktionen aus der Menge aller Wörter über einem Alphabet E in die Menge {true, f alse}, sortieren also jedes einzelne dieser Wörter in eine von zwei „Schubladen“. Dabei definieren sie eine Sprache, die durch die Menge der Wörter gegeben ist, die in der Schublade true landen. Diese wird als (akzeptierte) Sprache L(A) eines endlichen Automaten A bezeichnet. Die Klassifizierung erfolgt, indem ein Wort w = e1 . . . en ∈ E  Zeichen für Zeichen durch den Automaten eingelesen wird; befindet er sich nach Einlesen des letzten Zeichens en in einem „Endzustand“ (was das genau heißt, wird unten definiert), gilt das Wort als akzeptiert (true), sonst nicht ( f alse). Definition Endliche Automaten werden als 5-Tupel (E, S , δ, s0 , F) definiert, wobei E das Eingabealphabet ist, S die Zustandsmenge, δ die Zustandsüberführungsfunktion, s0 ∈ S der Anfangszustand und F ⊆ S die Menge der Endzustände. Die Zustandsüberführungsfunktion δ definiert, in welche Folgezustände ein endlicher Automat nach dem Lesen eines Zeichens wechselt. Wir unterscheiden dabei zwischen deterministischen und nichtdeterministischen endlichen Automaten. Deterministische endliche Automaten haben für jeden Zustand s ∈ S und jedes eingelesene Eingabezeichen e ∈ E genau einen definierten Folgezustand s ∈ S . Daher wird die Zustandsüberführungsfunktion hier als δ : S × E → S : (s, e) → s definiert. Der Automat akzeptiert das Wort w ∈ E  genau dann, wenn er sich nach Einlesen von w in einem Endzustand f ∈ F befindet. Nichtdeterministische endliche Automaten können dagegen keinen, einen oder mehrere Folgezustände haben, also eine Menge von Folgezuständen S  ⊆ S , die sich für denselben Zustand s ∈ S und dasselbe Eingabezeichen e ∈ E ergibt. Daher definieren wir hier die Zustandsüberführungsfunktion als δ : S × E → ℘(S ) : (s, e) → S  Der Automat akzeptiert das Wort w genau dann, wenn er sich nach Einlesen von w in einer Zustandsmenge F  ⊆ S befindet, die einen Endzustand enthält, also falls F  ∩ F  ∅ gilt. Zwei endliche Automaten A und A heißen genau dann äquivalent, wenn ihre Sprachen gleich sind, also L(A) = L(A ). Die Klassen der von deterministischen bzw. nichtdeterministischen endlichen Automaten akzeptierten Sprachen heißen LEA bzw. Lndet−EA ; es gilt LEA = Lndet−EA .

8

2 Endliche Automaten ohne Ausgabe

Nichtdeterminismus und die Potenzmengenkonstruktion Nichtdeterministische Automaten stellen ein mathematisches Konstrukt dar, das man in der physikalischen Welt nicht bauen kann, sondern das nur von theoretischem Interesse ist. Man kann sich Nichtdeterminismus etwas vereinfacht vorstellen, als würde der Automat unter mehreren möglichen Rechenwegen immer den richtigen raten oder als verfolgte er an jeder nichtdeterministischen Abzweigung alle möglichen Wege auf einmal. Trotz dieses mächtigen Ratemechanismus, der nichtdeterministischen endlichen Automaten zur Verfügung steht, unterscheiden sich deterministische und nichtdeterministische endliche Automaten nicht in ihrer Sprachmächtigkeit. Beide liegen im Bereich des Chomsky-Typs 3, können also genau die Sprachen der Sprachklasse L3 akzeptieren, die durch rechts- oder linkslineare Grammatiken erzeugt oder durch reguläre Ausdrücke definiert werden können (vgl. Kapitel 4). Während deterministische endliche Automaten definitionsgemäß ein Spezialfall der nichtdeterministischen endlichen Automaten sind, können nichtdeterministische endliche Automaten durch eine Potenzmengenkonstruktion in äquivalente deterministische endliche Automaten umgewandelt werden [HMU11]. Dabei wird für jede mögliche Teilmenge von Zuständen S  ⊆ S , die im nichtdeterministischen Ausgangsautomaten über irgendein Wort w ∈ E  erreichbar ist, ein Zustand s[S  ] im neuen deterministischen Automaten angelegt. Eine Überführung von einem Zustand s[S  ] zu einem Zustand s[S  ] über ein Eingabezeichen e ∈ E existiert im neuen Automaten genau dann, wenn von einem der Zustände s ∈ S  eine Überführung über e zu einem der Zustände s ∈ S  im Ausgangsautomaten existiert. Endzustände sind alle Zustände s[F  ] , für die F  ∩ F  ∅ gilt. Dieses Verfahren ist für alle nichtdeterministischen endlichen Automaten anwendbar, allerdings kann die Zustandszahl dabei exponentiell ansteigen. Ein Beispiel für die Potenzmengenkostruktion eines deterministischen aus einem nichtdeterministischen endlichen Automaten wird unten gezeigt. Darstellung Wie bei endlichen Automaten mit Ausgabe wird auch bei endlichen Automaten ohne Ausgabe die Zustandsüberführungsfunktion als gerichteter Graph dargestellt, dessen Knoten die Zustände und dessen Kanten die Zustandsübergänge symbolisieren. Anstelle einer Darstellung der Ausgabefunktion müssen hier jedoch die Endzustände von den Nicht-Endzuständen unterschieden werden. Dafür werden Endzustände durch einen Doppelkreis und Nicht-Endzustände durch einen Einfachkreis gekennzeichnet. Zu einer vollständigen Darstellung eines endlichen Automaten gehören neben einer solchen Abbildung auch immer eine Definition des Eingabealphabets und der Zustandsmenge sowie des Anfangszustands und der Menge der Endzustände. Beispielsweise stellt die folgende Abbildung einen deterministischen endlichen Automaten A dar, der alle Wörter über dem Alphabet {a, b} akzeptiert, die auf b enden. A = ({a, b}, {s0 , s1 }, δ, s0 , {s1 }) δ:



 

 



Einführung

9

Beispiel der Potenzmengenkonstruktion Die folgende Abbildung zeigt den nichtdeterministischen endlichen Automaten Andet , der durch eine Potenzmengenkonstruktion in einen äquivalenten deterministischen endlichen Automaten Adet umgewandelt wird. Die abgebildete Tabelle zeigt, welche Zustandsteilmengen S  ⊆ S von welchen anderen Zustandsteilmengen S  ⊆ S aus über welche Eingabesymbole e ∈ E erreichbar sind. Um nur die von s0 aus erreichbaren Zustandsteilmengen zu betrachten, beginnen wir mit der Menge {s0 } in der ersten Zeile und tragen nur die Zustandsteilmengen in die weiteren Zeilen ein, die sich aus vorherigen Zeilen ergeben. Aus diesen Informationen wird der deterministische endliche Automat generiert, wobei jeder Zustandsteilmenge S  ein Zustand s[S  ] (vereinfacht als si , i ∈ N0 geschrieben) zugeordnet wird.

Andet = ({a, b}, {s0 , s1 , s2 , s3 , s4 }, δndet , s0 , {s0 }) δndet :    

 

{s0 }=s ˆ 0 ∅=s ˆ 1 {s4 }=s ˆ 3 {s1 , s2 }=s ˆ 5 {s3 }=s ˆ 2 {s2 , s3 }=s ˆ 6 {s1 }=s ˆ 4

 



a ∅ ∅ {s1 , s2 } {s2 , s3 } {s1 } {s1 , s2 } {s2 , s3 }





 





b {s4 } ∅ {s3 } {s1 } {s0 } {s0 } {s1 }

Der im Folgenden abgebildete deterministische endliche Automat Adet hat also 7 Zustände, die allen erreichbaren Zustandsteilmengen des nichtdeterministischen endlichen Automaten Andet entsprechen. Die Zustandsübergänge von Adet ergeben sich aus der Tabelle.

10

2 Endliche Automaten ohne Ausgabe Adet = ({a, b}, {s0 , s1 , s2 , s3 , s4 , s5 , s6 }, δdet , s0 , {s0 })

δdet :    





  

 

 







 





Themen dieses Kapitels Die fünfzehn Aufgaben dieses Kapitels behandeln die Konstruktion endlicher Automaten für eine gegebene Sprache, die Ableitung der von einem gegebenen endlichen Automaten akzeptierten Sprache, die Umwandlung nichtdeterministischer in deterministische endliche Automaten, die Ableitung regulärer Ausdrücke (vgl. Kapitel 4) aus endlichen Automaten und umgekehrt sowie die Ableitung rechtslinearer Grammatiken (vgl. Kapitel 4) aus endlichen Automaten und umgekehrt. Darüber hinaus wird die Interpretation von Binärzahlen durch endliche Automaten und die Minimierung endlicher Automaten (vgl. Kapitel 3) am Rande gestreift.

Dieses Thema in der Vorlesungsaufzeichnung zur Vorlesung „Grundlagen der Informatik II“: http://www.dasinfobuch.de/links/ Endliche-Automaten-ohne-Ausgabe.html

Aufgaben

11

Aufgaben Aufgabe 6

END-AE 

Endliche Automaten 



Gegeben sei die Sprache L mit L = {w ∈ {0, 1} | ∃u ∈ {0, 1} : w = 1u1} Die Sprache L enthält also alle Wörter über {0, 1}, die mit einer 1 beginnen und mit einer 1 enden. Geben Sie einen nichtdeterministischen endlichen Automaten A = (E, S , δ, s0 , F) an mit L(A) = L. Geben Sie A vollständig an. → Lösung: S. 95

Aufgabe 7

END-AH 

Endliche Automaten 



Für einen Binärstring w ∈ {0, 1}+ bezeichne w2 den Zahlenwert des Binärstrings als Dualzahl interpretiert. a) Entwerfen Sie einen deterministischen endlichen Automaten A1 , der alle Binärstrings akzeptiert, die als Dualzahl interpretiert durch 2 teilbar sind. Der Automat soll also folgende Sprache L1 erkennen: L1 = {w ∈ {0, 1}+ | w2 mod 2 = 0}

b) Entwerfen Sie einen deterministischen endlichen Automaten A2 , der alle Binärstrings akzeptiert, die als Dualzahl interpretiert durch 4 teilbar sind. Der Automat soll also folgende Sprache L2 erkennen: L2 = {w ∈ {0, 1}+ | w2 mod 4 = 0}

→ Lösung: S. 96

12

2 Endliche Automaten ohne Ausgabe

Aufgabe 8

END-AV 

Endliche Automaten 



Ein Spiel sei definiert als zwei aufeinanderfolgende Würfe mit einem Würfel, der alle Zahlen zwischen 1 und 6 enthält. Das Spiel gilt als gewonnen, wenn die Summe der Augenzahlen durch 3 teilbar ist. Im Folgenden sei der Ablauf eines Spiels kodiert als ein Wort w ∈ {1, . . . , 6}2 , wobei das erste Zeichen für den ersten Wurf und das zweite für den zweiten steht. a) Entwickeln Sie einen deterministischen endlichen Automaten A, welcher die Kodierung eines Spielablaufs genau dann akzeptiert, wenn das Spiel als gewonnen gilt. Geben Sie den Automaten vollständig an. b) Minimieren Sie den Automaten A und geben Sie den minimierten Automaten A vollständig an. c) Verallgemeinern Sie den endlichen Automaten A bzw. A , sodass er bei einem beliebig langen Würfelspiel mit einem Würfel genau dann akzeptiert, wenn die Summe aller Würfe durch 3 teilbar ist. Geben Sie den verallgemeinerten Automaten Aallg ebenfalls vollständig an. → Lösung: S. 96

Aufgabe 9

END-AF 

Endliche Automaten und reguläre Ausdrücke 



a) Gegeben sei die Sprache L aller Wörter über E = {a, b, c}, die auf abc enden. 1) Geben Sie einen deterministischen endlichen Automaten A1 = (E, S , δ, s0 , F) an mit L(A1 ) = L. Geben Sie A1 vollständig an. 2) Geben Sie die Sprache L formal an. b) Gegeben sei der nichtdeterministische endliche Automat A2 = ({0, 1}, {s0 , . . . , s4 }, δ2 , s0 , {s4 }) 

δ2 : 

















1) Wandeln Sie den Automaten A2 in einen deterministischen endlichen Automaten A2 = (E, S  , F  , δ2 , s0 ) um mit L(A2 ) = L(A2 ). Geben Sie A2 vollständig an. 2) Geben Sie einen regulären Ausdruck α an mit L(α) = L(A2 ) = L(A2 ). → Lösung: S. 98

Aufgaben

13

Aufgabe 10

END-AG 

Endliche Automaten und reguläre Ausdrücke 



Gegeben sei eine Sprache L mit L = {w ∈ {0, 1} | ∃v ∈ {0, 1} : w = 01v01}. Die Sprache L enthält somit alle Wörter, die sowohl mit 01 beginnen als auch mit 01 enden. a) Erstellen Sie eine rechtslineare Grammatik, welche die Sprache L erzeugt. Geben Sie die Grammatik vollständig an und leiten Sie das Testwort 010010001 ab. b) Gegeben sei ein nichtdeterministischer endlicher Automat A, der die Sprache L erkennt, mit A = ({0, 1}, {S , A, B, C, D}, δ, S , {D}) 

δ: 

















Geben Sie einen deterministischen endlichen Automaten A = ({0, 1}, S  , δ , s0 , F  ) an mit L(A ) = L(A) = L. (Beachten Sie, dass die Zustände des Automaten A zur Verdeutlichung der Ähnlichkeit zur Grammatik aus Aufgabenteil a) mit Großbuchstaben bezeichnet sind; insbesondere ist dadurch S ein Zustand, aber S  eine Zustandsmenge.) c) Geben Sie einen regulären Ausdruck α an mit L(α) = L(A) = L(A ) = L. → Lösung: S. 99

Aufgabe 11

END-AC 

Umwandlung nichtdeterministischer in deterministische endliche Automaten 



Gegeben sei der reguläre Ausdruck α mit α = 01(0 + 1) 10 Entwickeln Sie einen nichtdeterministischen endlichen Automaten A und formen Sie diesen anschließend in einen deterministischen endlichen Automaten A um mit L(α) = L(A) = L(A ). Geben Sie die Automaten A und A vollständig an. → Lösung: S. 100

14

2 Endliche Automaten ohne Ausgabe

Aufgabe 12

END-AL 

Umwandlung nichtdeterministischer in deterministische endliche Automaten 



Gegeben sei folgender nichtdeterministischer endlicher Automat A A = ({a, b}, {s0 , s1 , s2 , s3 }, δ, s0 , {s3 }) δ:



 













a) Wandeln Sie A in einen äquivalenten deterministischen endlichen Automaten A um mit L(A ) = L(A) und geben Sie diesen vollständig an. b) Geben Sie die Sprache, die von dem Automaten erkannt wird, als regulären Ausdruck α an, sodass L(α) = L(A) gilt. → Lösung: S. 101

Aufgabe 13

END-AN 

Umwandlung nichtdeterministischer in deterministische endliche Automaten 



Gegeben sei folgender nichtdeterministischer endlicher Automat A A = ({0, 1}, {s0 , s1 , s2 }, δ, s0 , {s2 }) δ:



  

 

 



a) Konstruieren Sie zu dem nichtdeterministischen endlichen Automaten A einen äquivalenten deterministischen endlichen Automaten A mit L(A ) = L(A) und geben Sie diesen vollständig an. b) Geben Sie einen regulären Ausdruck α an mit L(α) = L(A) = L(A ). → Lösung: S. 102

Aufgaben

15

Aufgabe 14

END-AI 

Umwandlung nichtdeterministischer in deterministische endliche Automaten 



Gegeben sei der nichtdeterministische endliche Automat A A = ({0, 1}, {s0 , s1 , s2 , s3 }, δ, s0 , {s2 }) δ:

 

 

 











Konstruieren Sie zu A einen äquivalenten deterministischen endlichen Automaten A . Geben Sie den Automaten A vollständig an. → Lösung: S. 103

Aufgabe 15

END-AM 

Umwandlung nichtdeterministischer in deterministische endliche Automaten 



Wandeln Sie den folgenden nichtdeterministischen endlichen Automaten A in einen äquivalenten deterministischen endlichen Automaten A um mit L(A ) = L(A). Geben Sie A vollständig an. A = ({0, 1}, {s0 , s1 , s2 , s3 , s4 }, δ, s0 , {s4 }) δ:

   

 







 





→ Lösung: S. 103

16

2 Endliche Automaten ohne Ausgabe

Aufgabe 16

END-AX 

Umwandlung nichtdeterministischer in deterministische endliche Automaten 



Gegeben sei der nichtdeterministische endliche Automat A = ({a, b}, {s0 , s1 , s2 , s3 , s4 }, δ, s0 , {s4 }) δ:

 

 

 





 





a) Konstruieren Sie einen äquivalenten deterministischen endlichen Automaten A , sodass gilt L(A ) = L(A). Geben Sie A vollständig an. b) Geben Sie die Sprache, die von dem Automaten erkannt wird, als regulären Ausdruck α an mit L(α) = L(A). → Lösung: S. 104

Aufgabe 17

END-AW

Umwandlung nichtdeterministischer in deterministische endliche Automaten 







Gegeben sei folgender nichtdeterministischer endlicher Automat A. Konstruieren Sie einen äquivalenten deterministischen endlichen Automaten A , sodass gilt L(A ) = L(A). Geben Sie A vollständig an. A = ({0, 1}, {s0 , s1 , s2 , s3 , s4 }, δ, s0 , {s4 }) δ:



 



 

 





 

→ Lösung: S. 105

Aufgaben

17

Aufgabe 18

END-AY

Umwandlung nichtdeterministischer in deterministische endliche Automaten 







Konstruieren Sie zu dem nichtdeterministischen endlichen Automaten A einen äquivalenten deterministischen endlichen Automaten A mit L(A ) = L(A). Geben Sie den Automaten A vollständig an. A = ({1, 2, 3}, {s0 , s1 , s2 , s3 , s4 }, δ0 , s0 , {s4 }) δ0 :

   











 

 

 

→ Lösung: S. 106

Aufgabe 19

END-AK 

Umwandlung nichtdeterministischer in deterministische endliche Automaten 



Konstruieren Sie zu den nachfolgenden nichtdeterministischen endlichen Automaten Ai , i ∈ {1, 2} äquivalente deterministische endliche Automaten Ai mit L(Ai ) = L(Ai ) und geben Sie diese vollständig an. Beschreiben Sie zudem die Sprachen, welche von den Automaten erkannt werden, als reguläre Ausdrücke αi , sodass L(αi ) = L(Ai ) gilt. a) A1 sei gegeben durch A1 = ({0, 1}, {s0 , s1 , s2 }, δ1 , s0 , {s2 }) δ1 :



 

 

 

18

2 Endliche Automaten ohne Ausgabe b) A2 sei gegeben durch A2 = ({0, 1}, {s0 , s1 , s2 , s3 , }, δ2 , s0 , {s2 }) δ2 :



  



 









→ Lösung: S. 107

Aufgabe 20

END-AZ

Umwandlung nichtdeterministischer in deterministische endliche Automaten 







Gegeben sei folgender nichtdeterministischer endlicher Automat A A = (E, S , δ, s0 , F) = ({0, 1}, {s0 , s1 , s2 , s3 , s4 }, δ, s0 , {s1 , s4 }) δ:

   





 

 









a) Geben Sie die Zustandsübergangstabelle für die Potenzmengen-Konstruktion eines zu A äquivalenten deterministischen endlichen Automaten A an. Geben Sie A vollständig an. b) Geben Sie die Sprache L als regulären Ausdruck α an mit L(α) = L(A ) = L(A). → Lösung: S. 108

3

Minimierung endlicher Automaten

Einführung Endliche Automaten werden in vielen unterschiedlichen Bereichen eingesetzt. Mitunter muss man dabei auch mit sehr komplexen Automaten umgehen, weshalb es im Hinblick auf die Zeitund Platzeffizienz wichtig ist, erkennen zu können, ob ein endlicher Automat „verkleinert“ werden kann, ohne dass sich die von ihm erkannte Sprache ändert. Werden endliche Automaten beispielsweise als Schaltwerke in Hardware realisiert, hat dies direkte Auswirkungen auf die Anzahl der benötigten Register bzw. Speicherelemente. Dieses Kapitel beschäftigt sich mit der Minimierung von deterministischen endlichen Automaten ohne Ausgabe (die Minimierung von endlichen Automaten mit Ausgabe kann durch einen ähnlichen Algorithmus, wie dem hier vorgestellten, durchgeführt werden). Bei deterministischen endlichen Automaten, bei denen die Anzahl der Zustandsübergänge für eine gegebene Zustandszahl fest ist, bezieht sich die Verkleinerung immer auf die Anzahl der Zustände. Hierbei wird der im Buch von Hopcroft, Motwani und Ullman [HMU11] beschriebene Algorithmus verwendet, der auf dem Satz von Myhill-Nerode beruht. Für die Generierung des zu einem gegebenen endlichen Automaten äquivalenten Minimalautomaten werden zuerst alle nicht erreichbaren Zustände entfernt; der so entstandene Automat heißt vereinfacht. In einem vereinfachten Automaten werden zwei Zustände als k-äquivalent bezeichnet, wenn bei Eingabe aller Wörter der Länge k oder weniger kein Unterschied in ihrem Akzeptanzverhalten vorliegt. Das bedeutet, dass der Automat bei Eingabe jedes dieser Wörter entweder aus beiden Zuständen in einen Endzustand oder aus beiden in einen Nicht-Endzustand übergeht. Der Algorithmus markiert, beginnend mit k = 0, in jeder Iteration alle Zustandspaare, die zueinander nicht k-äquivalent sind und erhöht k um 1. Wenn in einer Iteration keine weiteren Markierungen vorgenommen werden, terminiert der Algorithmus. Die dann nicht markierten Zustandspaare sind zueinander äquivalent. Der Minimalautomat wird im Anschluss durch das Zusammenfassen der äquivalenten Zustände generiert. Er ist bis auf Isomorphismen (beispielsweise Umbenennung der Zustände) eindeutig; es gibt also im Wesentlichen nur eine einzige richtige Lösung. Im Folgenden wird der Algorithmus zur Markierung der nicht-äquivalenten Zustände anhand einer Dreieckstabelle durchgeführt, die alle fraglichen Zustandspaare enthält. Der Algorithmus trägt in seinem Verlauf eine Markierung in alle diejenigen Zellen der Tabelle ein, die zueinander nicht äquivalente Zustände bezeichnen. Die Markierung „×k “ in einer Tabellenzelle (i, j) bedeutet dabei, dass das Zustandspaar (i, j) in der k-ten Iteration des Algorithmus markiert wurde und die Zustände i und j somit zueinander (k − 1)-äquivalent, aber nicht k-äquivalent und somit insbesondere nicht äquivalent sind. Bleibt eine Zelle bis zum Ende unmarkiert, sind die entsprechenden Zustände zueinander äquivalent.

20

3 Minimierung endlicher Automaten

Beispiel Der im Folgenden abgebildete endliche Automat A kann um zwei Zustände reduziert werden, wie man durch die darunter abgebildete Minimierungstabelle sehen kann. Das folgt aus der Tatsache, dass die Zustände s1 , s2 und s4 zueinander äquivalent sind, da die entsprechenden Zustandspaare im Verlauf des Minimierungsalgorithmus nicht markiert wurden (dargestellt durch „−“). Es ergibt sich der minimierte Automat Amin , und es gilt L(A) = L(Amin ); der minimierte endliche Automat erkennt also dieselbe Sprache wie der Ursprungsautomat. A = ({a, b}, {s0 , s1 , s2 , s3 , s4 , s5 }, δ, s0 , {s1 , s2 , s4 , s5 }) δ:





 





 





  

  





Minimierungstabelle: s1 s2 s3 s4 s5

×0 ×0 ×1 ×0 ×0 s0

− ×0 − ×2 s1

×0 − ×2 s2

×0 ×0 s3

×2 s4

Der minimierte endliche Automat ergibt sich durch Zusammenfassen der Zustände s1 , s2 und s4 zu einem einzigen Zustand, den wir s1 nennen: Amin = ({a, b}, {s0 , s1 , s3 , s5 }, δmin , s0 , {s1 , s5 }) δmin : 

 

 





 

 



Einführung

21

Themen dieses Kapitels Die sieben Aufgaben dieses Kapitels behandeln neben der Minimierung endlicher Automaten auch die Themen k-Äquivalenz, reguläre Ausdrücke (vgl. Kapitel 4) und Struktur endlicher Automaten.

Dieses Thema in der Vorlesungsaufzeichnung zur Vorlesung „Grundlagen der Informatik II“: http://www.dasinfobuch.de/links/ Minimierung-Endlicher-Automaten.html

22

3 Minimierung endlicher Automaten

Aufgaben Aufgabe 21

MIN-AA

Minimierung endlicher Automaten 





Minimieren Sie den endlichen Automaten A und geben Sie den minimierten Automaten vollständig an. A = ({0, 1}, {s0 , s1 , s2 , s3 , s4 }, δ, s0 , {s4 }) δ: 















  









→ Lösung: S. 109

Aufgabe 22

MIN-AB

Minimierung endlicher Automaten 





Gegeben sei der endliche Automat A. Zählen Sie für k = 0, 1, 2, . . . die Mengen aller zueinander k-äquivalenten Zustände auf. Lassen sich mehrere Zustände zu einem zusammenfassen? A = ({0, 1}, {s0 , . . . , s5 }, δ, s0 , {s4 , s5 }) δ:

  

 

 

 







 





→ Lösung: S. 110

Aufgaben

23

Aufgabe 23

MIN-AE

Minimierung endlicher Automaten 





Gegeben sei der deterministische endliche Automat A = (E, S , δ, s0 , F) mit A = ({0, 1}, {s0 , s1 , s2 , s3 , s4 , s5 , s6 , s7 }, δ, s2 , {s2 , s5 }) δ:

  



 

 



 















 









Minimieren Sie A und geben Sie den minimierten Automaten A = (E, S  , δ , s0 , F  ) vollständig an. → Lösung: S. 111

Aufgabe 24

MIN-AD

Minimierung endlicher Automaten 





Gegeben sei der deterministische endliche Automat A = (E, S , δ, s0 , F). Durch das abgebildete Zustandsdiagramm sei δ definiert. A = ({0, 1}, {s0 , s1 , s2 , s3 , s4 , s5 , s6 }, δ, s0 , {s4 }) δ:

  





  



 

 

 



 







24

3 Minimierung endlicher Automaten

Minimieren Sie A und geben Sie den minimierten Automaten A = (E, S  , δ , s0 , F  ) vollständig an. → Lösung: S. 112

Aufgabe 25

MIN-AF

Minimierung endlicher Automaten 





Gegeben sei der deterministische endliche Automat A = (E, S , δ, s0 , F). Durch das abgebildete Zustandsdiagramm sei δ definiert. A = ({0, 1}, {s0 , s1 , s2 , s3 , s4 , s5 , s6 , s7 }, δ, s0 , {s5 }) δ:

























 













 

Minimieren Sie A und geben Sie den minimierten Automaten vollständig an. → Lösung: S. 113

Aufgabe 26

MIN-AG

Minimierung endlicher Automaten 





Gegeben sei der endliche Automat A = ({0, 1}, {s0 , s1 , s2 , s3 , s4 , s5 , s6 }, δ, s0 , {s1 , s2 , s3 , s4 , s5 , s6 }) δ:

 



 







  

 





  



 

Aufgaben

25

a) Minimieren Sie den endlichen Automaten A. b) Würde sich die Anzahl an Zuständen des minimierten Automaten im Vergleich zu a) ändern, falls ein anderer Knoten Startknoten wäre als s0 ? c) Wie viele Zustände hätte der minimierte Automat, wenn sich δ zu folgendem Zustandsdiagramm δneu ändern würde (die einzige Änderung im Vergleich zur minimierten Version des Automaten aus a) ist, dass es keinen Übergang mehr von Zustand s4 zu Zustand s0 gibt und stattdessen von s4 über 1 nach s4 übergegangen wird)? Geben sie den minimierten Automaten vollständig an. (Wenn Sie „scharf hinsehen“, ist kein Algorithmus erforderlich.) Aneu = ({0, 1}, {s0 , s1 , s2 , s3 , s4 }, δneu , s0 , {s1 , s2 , s3 , s4 }) δneu :



 





 

















→ Lösung: S. 114

Aufgabe 27

MIN-AC

Minimierung endlicher Automaten 





Gegeben sei der endliche Automat A = ({0, 1}, {s0 , . . . , s9 }, δ, s3 , {s2 , s8 , s9 }) δ: 

 

 







   



 











 













a) Minimieren Sie A und geben Sie den minimierten Automaten vollständig an. b) Geben Sie einen regulären Ausdruck α an mit L(α) = L(A) = L(A ).





26

3 Minimierung endlicher Automaten c) Geben Sie die Mengen der Zustände des vereinfachten (nicht minimierten) Automaten an, die zueinander 0-, 1-, 2- und 3-äquivalent sind. → Lösung: S. 115

4

Rechtslineare Grammatiken und reguläre Ausdrücke

Einführung Chomsky-Grammatiken Eine (allgemeine) Chomsky-Grammatik ist formal ein 4-Tupel G = (N, T, P, S ) aus einem Alphabet von Nonterminalzeichen N (auch „syntaktische Variablen“), einem Alphabet von Terminalzeichen T (auch „syntaktische Konstanten“), einer Menge von Produktionen oder Regeln P ⊂ (N ∪ T )+ \T  × (N ∪ T ) und einem Startzeichen S ∈ N. Wir schreiben für p ∈ P p=φ→ψ mit φ ∈ (N ∪ T )+ \T  , ψ ∈ (N ∪ T ) . Die Sprache L(G) einer Grammatik G ist definiert als die Menge aller terminalen Wörter w ∈ T  , die beim Durchführen folgender Prozedur irgendwann zur Menge LG hinzugefügt werden: • Beginne mit LG =de f {S }. • Wiederhole solange, bis LG sich nicht mehr ändert (muss nie eintreten): Für alle Wörter w ∈ LG , für alle Zerlegungen w = xuy (u, x, y ∈ (N ∪ T ) ) und alle Produktionen u → ψ ∈ P füge das Wort w = xψy zu LG hinzu. Zu beachten ist, dass nur die terminalen Wörter aus LG zu L(G) gehören, es gilt also: L(G) = {w ∈ LG | w ∈ T  } Sei beispielsweise G = ({S }, {a, b}, {S → aS b, S → λ}, S ), dann ergibt sich: LG = {S , λ, aS b, ab, aaS bb, aabb, . . .} und

L(G) = {λ, ab, aabb, . . .}

Wir schreiben, wenn mehrere Produktionen mit gleicher linker Seite existieren, beispielsweise statt {S → aS b, S → λ} auch {S → aS b | λ}. Die Ableitung eines einzelnen Wortes schreiben wir auch als S ⇒ aS b ⇒ aaS bb ⇒ aabb (Einzelschritte) bzw. S ⇒ aabb (zusammengefasst)

28

4 Rechtslineare Grammatiken und reguläre Ausdrücke

Rechtslineare oder Typ-3-Grammatiken Von einer rechtslinearen Grammatik spricht man, wenn die Menge der Produktionen eingeschränkt ist zu P ⊆ N × (T ∪ T N ∪ {λ}) Auf der linken Seite der Produktionen darf sich hier also nur je ein Nonterminalzeichen befinden, und auf der rechten Seite darf nur das leere Wort, ein Terminalzeichen oder ein Terminalzeichen gefolgt von einem Nonterminalzeichen stehen. Innerhalb der Ableitung wird den Wörtern also pro Schritt maximal ein Zeichen rechts hinzugefügt, was zu einem höchstens linearen Wachstum der Wörter in der Anzahl der Ableitungsschritte führt (daher die Bezeichnung „rechtslinear“). Die alternative Bezeichnung Typ-3-Grammatik leitet sich von der Chomsky-Hierarchie ab, innerhalb derer allgemeine Grammatiken als Typ 0, kontextsensitive Grammatiken als Typ 1, kontextfreie als Typ 2 und rechtslineare als Typ 3 bezeichnet werden (vgl. auch Kapitel 6 und 9). Wir werden im Folgenden die Menge aller Sprachen, die von Grammatiken des Typs i, i ∈ {0, 1, 2, 3} erzeugt werden können, als Li bezeichnen. Reguläre Ausdrücke Ein regulärer Ausdruck definiert eine Sprache über die Beschreibung der erlaubten Operationen auf Elementen einer der Sprache zugrunde liegenden Menge von Basismengen. Die Menge der Basismengen ist für ein Alphabet E definiert als: {∅} ∪ {{e} | e ∈ E} = {∅, {e1 }, {e2 }, . . .} Auf diesen Basismengen können die Mengenoperationen Vereinigung, (Komplex-) Produkt („Hintereinanderschreibung“) und Iteration (beliebig häufige, aber endliche Anwendung des Komplexprodukts auf sich selbst) durchgeführt werden. Ein konkreter regulärer Ausdruck beschreibt, in welcher Weise diese Operationen durchgeführt werden dürfen, wie im Folgenden definiert wird. Die Menge der regulären Ausdrücke RA(E) über dem Alphabet E, also die Menge der Zeichenketten, die gültige reguläre Ausdrücke über E darstellen, ist definiert durch: • ∅ ∈ RA(E) • ∀e ∈ E : e ∈ RA(E) • ∀α, α ∈ RA(E) : (α + α ) ∈ RA(E), (α · α ) ∈ RA(E), (α ) ∈ RA(E) Klammern und den Produkt-Punkt lassen wir zur Vereinfachung weg, wenn die Interpretation dabei eindeutig bleibt (Vorrangregeln: Klammer vor Stern vor Punkt vor Plus). Ein regulärer Ausdruck α ∈ RA(E) definiert eine reguläre Sprache L(α) ∈ E  . Dafür werden reguläre Ausdrücke in folgender Weise interpretiert: • L(∅) =de f ∅ • ∀e ∈ E : L(e) =de f {e} • ∀α, α ∈ RA(E) : Vereinigung: L(α + α ) =de f L(α) ∪ L(α ) Produkt: L(α · α ) =de f L(α) ◦ L(α ) mit L1 ◦ L2 =de f {w1 w2 | w1 ∈ L1 , w2 ∈ L2 }

Einführung

29 Iteration: L(α ) =de f

 i∈N0

L(α)i

Einige Beispiele für reguläre Ausdrücke über dem Alphabet E = {a, b, c}: α α α α

= ∅ = a + bc = (a + b)c = a b

⇒ ⇒ ⇒ ⇒

L(α) = {λ}, denn L(∅) enthält L(∅)0 = ∅0 = λ L(α) = {a, bc}, denn L(α) = L(a) ∪ L(b · c) = {a} ∪ {bc} = {a, bc} L(α) = {ac, bc} L(α) = {b, ab, aab, . . .}

Wir bezeichnen die Klasse der durch reguläre Ausdrücke darstellbaren Sprachen als Lreg , wobei gilt: Lreg = LEA = Lndet−EA = L3 Themen dieses Kapitels Die dreizehn Aufgaben dieses Kapitels decken zum Teil ähnliche Themen ab wie die Aufgaben des Kapitels 2. Diesmal ist der Fokus jedoch auf die Äquivalenz von endlichen Automaten, rechtslinearen Grammatiken und regulären Ausdrücken gerichtet. Die drei Modelle werden zum Definieren von Sprachen genutzt und unter Beibehaltung der definierten Sprache ineinander überführt.

Dieses Thema in der Vorlesungsaufzeichnung zur Vorlesung „Grundlagen der Informatik II“: http://www.dasinfobuch.de/links/ RL-Grammatiken-Reg-Ausdrücke.html

30

4 Rechtslineare Grammatiken und reguläre Ausdrücke

Aufgaben Aufgabe 28 Chomsky-Grammatiken 

END-BA 



Das Konzept der „Sprachen“ wird in der Informatik und auch in der Linguistik genutzt, um „Wörter“ (oder ling. „Sätze“) nach ihrer syntaktischen Korrektheit zu unterscheiden oder um ihre Bedeutung zu definieren und zu extrahieren. a) Wie lassen sich Sprachen grundsätzlich unterteilen? b) Was gehört zur Beschreibung einer Sprache? c) Was ist eine Chomsky-Grammatik? Erläutern Sie die einzelnen Komponenten kurz. → Lösung: S. 116

Aufgabe 29

REC-AA

Rechtslineare Grammatiken und endliche Automaten 







Gegeben sei folgender endlicher Automat A = ({0, 1}, {s0 , s1 , s2 }, δ, s0 , {s2 }) δ:

   

 

 



a) Um welchen Automatentyp (deterministisch oder nichtdeterministisch) handelt es sich bei dem abgebildeten Automaten? b) Welche Sprache L(A) akzeptiert der Automat? c) Geben Sie eine rechtslineare Grammatik G an, die die Sprache L(A) erzeugt. Es soll also gelten L(A) = L(G). → Lösung: S. 117

Aufgaben

31

Aufgabe 30

REC-AB

Rechtslineare Grammatiken 





Geben Sie eine rechtslineare Grammatik G an, sodass gilt L(G) = L mit L = {w ∈ {0, 1}+ | ∀u, v ∈ {0, 1} : w  u1111v} Wörter aus L sind also mindestens ein Zeichen lang und dürfen die Teilfolge 1111 nicht enthalten. Produzieren Sie das Testwort: 011100110001110. → Lösung: S. 118

Aufgabe 31

REC-AC 



Rechtslineare Grammatiken 



Gegeben sei die Sprache L = {w ∈ {0, 1}+ | ∀u, v ∈ {0, 1} : w = u1v ⇒ ∃x, y ∈ {0, 1} : (u = x1 ∧ v = 00y) ∨ v = 100y} Wörter aus L müssen also nichtleer sein und jede 1 muss im Rahmen der Zeichenfolge 1100 auftreten; Beispiele: 0001100 ∈ L, 01101  L. a) Geben Sie eine rechtslineare Grammatik G an, sodass gilt L(G) = L. b) Existiert ein deterministischer endlicher Automat A zu dieser rechtslinearen Grammatik mit L(A) = L(G) = L? Falls ja, konstruieren Sie diesen und geben Sie ihn vollständig an. → Lösung: S. 118

32

4 Rechtslineare Grammatiken und reguläre Ausdrücke

Aufgabe 32

END-AP

Rechtslineare Grammatiken 





Gegeben seien die Sprachen Li , i ∈ {1, 2}. L1 = {w ∈ {0, 1} | |w|0 mod 2 = 0 und |w|1 mod 2 = 1} L2 = {w ∈ {0, 1} | ∀u, v ∈ {0, 1} : w  u00v, w  u11v} a) Geben Sie jeweils eine rechtslineare Grammatik Gi an, so dass gilt L(Gi ) = Li . Geben Sie diese vollständig an. b) Geben Sie jeweils einen endlichen Automaten Ai an mit L(Ai ) = Li erkennen. Geben Sie die Automaten vollständig an. → Lösung: S. 119

Aufgabe 33

REC-AK 

Rechslineare Grammatiken und reguläre Ausdrücke 



Gegeben sei die Sprache L aller Wörter über dem Alphabet E = {0, 1}, die nicht mit einer Eins enden und bei denen die Anzahl aller vorkommenden Einsen ungerade ist: L = {w ∈ E  | |w|1 mod 2 = 1 und ∀u ∈ E  : w  u1} a) Geben Sie einen endlichen Automaten A an, sodass gilt L(A) = L. Geben Sie den Automaten vollständig an. b) Geben Sie eine Grammatik G an, sodass gilt L(G) = L. Definieren Sie die Grammatik vollständig. c) Geben Sie einen regulären Ausdruck α an, sodass gilt L(α) = L. → Lösung: S. 120

Aufgaben

33

Aufgabe 34

END-AO

Rechtslineare Grammatiken und reguläre Ausdrücke 





Gegeben sei die folgende Sprache L L = {w ∈ {a, b} | w = ak oder w = bl für k, l ∈ N0 }. a) Geben Sie eine rechtslineare Grammatik G an, so dass gilt L(G) = L. Geben Sie G vollständig an. b) Geben Sie einen äquivalenten regulären Ausdruck α an, so dass gilt L(α) = L. c) Geben Sie einen deterministischen endlichen Automaten A = (E, S , δ, s0 , F) an mit L(A) = L. → Lösung: S. 121

Aufgabe 35

REC-AE

Reguläre Ausdrücke und endliche Automaten 







Gegeben seien die Sprachen L1 und L2 (siehe unten). Entwerfen Sie reguläre Ausdrücke α1 , α2 und deterministische endliche Automaten A1 , A2 , sodass gilt: L(α1 ) = L(A1 ) = L1 und L(α2 ) = L(A2 ) = L2 a) L1 ist die Sprache der Wörter, bei denen auf jede 1 mindestens zweimal 0 folgt: L1 = {w ∈ {0, 1} | ∀u, v ∈ {0, 1} : w = u1v ⇒ ∃x ∈ {0, 1} : v = 00x}

b) L2 ist die Sprache der nichtleeren Wörter, deren Länge ein Vielfaches von drei ist: L2 = {w ∈ {0, 1}3n | n ∈ N+ }

→ Lösung: S. 121

34

4 Rechtslineare Grammatiken und reguläre Ausdrücke

Aufgabe 36

REC-AF 

Reguläre Ausdrücke und endliche Automaten 



Gegeben sei der reguläre Ausdruck α ∈ RA({a, b}) durch α = (b + ab) aa(abb + b) a) Konstruieren Sie einen deterministischen endlichen Automaten A mit L(A) = L(α). Geben Sie A vollständig an. b) Wie sieht ein deterministischer endlicher Automat A aus, wenn zusätzlich noch das leere Wort in der Sprache enthalten sein soll (sich aber an der Sprache sonst nichts ändert)? → Lösung: S. 122

Aufgabe 37

REC-AH 

Reguläre Ausdrücke 



Geben Sie zu den folgenden Sprachen L1 , L2 reguläre Ausdrücke α1 und α2 an, sodass L(α1 ) = L1 und L(α2 ) = L2 a) L1 ist die Sprache aller Wörter, die nach jeder 0 genau eine 1 enthalten: L1 = {w ∈ {0, 1} | ∀u, v ∈ {0, 1} : w = u0v ⇒ ∃x ∈ {0, 1} : v = 10x ∨ v = 1}

b) L2 ist die Sprache aller Wörter, die nach jeder 0 mindestens eine 1 enthalten: L2 = {w ∈ {0, 1} | ∀u, v ∈ {0, 1} : w = u0v ⇒ ∃x ∈ {0, 1} : v = 1x}

→ Lösung: S. 123

Aufgaben

35

Aufgabe 38

REC-AJ 

Reguläre Ausdrücke 



Erzeugen Sie zu den folgenden vier Sprachen Li mit (i = a, b, c, d) jeweils einen regulären Ausdruck αi , sodass gilt L(αi ) = Li . a) Sprache der Wörter mit höchstens 6 Zeichen: La = {w ∈ {0, 1} | |w| ≤ 6}

b) Sprache der Wörter, die niemals zwei oder mehr Nullen hintereinander enthalten: Lb = {w ∈ {0, 1} | ∀u, v ∈ {0, 1} : w  u00v}

c) Sprache der Wörter, die niemals drei oder mehr Nullen hintereinander enthalten: Lc = {w ∈ {0, 1} | ∀u, v ∈ {0, 1} : w  u000v}

d) Sprache der Wörter mit gerader Anzahl an Zeichen, die niemals zwei gleiche Zeichen hintereinander enthalten: Ld = {w ∈ {0, 1}2n | n ∈ N0 ; ∀u, v ∈ {0, 1} , ∀x ∈ {0, 1} : w  uxxv}

→ Lösung: S. 123

Aufgabe 39

REC-AI 

Reguläre Ausdrücke 



Gegeben seien die unten angegebenen nichtdeterministischen endlichen Automaten A1 , A2 und A3 . Geben Sie reguläre Ausdrücke α1 , α2 und α3 an, sodass gilt: L(α1 ) = L(A1 ), L(α2 ) = L(A2 ), L(α3 ) = L(A3 )

36

4 Rechtslineare Grammatiken und reguläre Ausdrücke a) Automatendefinition: A1 = ({0, 1, 2}, {s0 , s1 , s2 }, δ1 , s0 , {s0 }) 

δ1 : 



 

 







 

b) Automatendefinition: A2 = ({0, 1, 2}, {s0 , s1 , s2 , s3 }, δ2 , s0 , {s0 }) δ2 :













 

 





c) Automatendefinition: A3 = ({0, 1, 2}, {s0 , s1 , s2 }, δ3 , s0 , {s2 }) δ3 :

 



 



 



→ Lösung: S. 123

Aufgabe 40

REC-AG 

Reguläre Ausdrücke 



Geben Sie einen regulären Ausdruck für die Sprache L der deutschen Festnetznummern an. Dabei soll gelten: • die Vorwahl besteht aus 4 oder 5 Ziffern und startet mit einer „0“, die 2. Ziffer darf keine „0“ sein, • die Rufnummer besteht aus 4 bis 8 Ziffern und darf nicht mit einer „0“ beginnen, • Vorwahl und Rufnummer werden durch „/“ voneinander getrennt. → Lösung: S. 124

5

Kellerautomaten

Einführung Kellerautomaten bilden eine naheliegende Erweiterung endlicher Automaten, indem ein unendliches Speicherband („Keller“) hinzugefügt wird. Durch die Kombination der endlichen Zustandsmenge eines endlichen Automaten mit den unendlich vielen möglichen Zuständen des Speicherbands wird die Gesamtmenge an Zuständen, in denen sich ein Automat befinden kann, unendlich, während sie vorher endlich war. Allerdings darf der Keller nur sehr eingeschränkt nach einem Last-In-First-Out-Prinzip (LIFO-Prinzip) genutzt werden. Definition Formal ist ein Kellerautomat ein 7-Tupel KA = (E, S , K, δ, s0 , k0 , F) aus Eingabealphabet E, Zustandsmenge S , Kelleralphabet K, partieller Zustandsüberführungsfunktion δ, Anfangszustand s0 ∈ S , geschütztem Kellerstartzeichen k0 ∈ K (k0  E) und Menge an Endzuständen F ⊆ S. Wie bei endlichen Automaten gibt es auch bei Kellerautomaten ein Eingabeband, auf dem zu Beginn ein Wort w ∈ E  steht, das zeichenweise eingelesen wird, und eine Menge S von (explizit angegebenen) Zuständen, die über Zustandsübergänge miteinander verknüpft sind. Während die Zustandsübergänge bei endlichen Automaten nur vom aktuellen Zustand und dem aktuell eingelesenen Eingabezeichen abhängen, darf man bei Kellerautomaten auch das „oberste“ Zeichen im Keller für die Entscheidung über den Folgezustand nutzen. Bei jedem Zustandsübergang kann zusätzlich das oberste Kellerzeichen durch eine beliebige Kette von Kellerzeichen ersetzt werden. Eine Ersetzung durch das leere Wort λ entspricht einem Löschen des obersten Zeichens aus dem Keller. Anders als bei endlichen Automaten (wie wir sie hier definiert haben) kann ein Kellerautomat das Lesen der Eingabe „aussetzen“ und einen Zustandsübergang unabhängig vom nächsten Eingabezeichen ausführen. Die hier betrachteten Kellerautomaten sind ausschließlich Akzeptoren, haben also keine Ausgabe, sondern sortieren Eingaben in die beiden Schubladen true/ f alse. Deterministische Kellerautomaten Bei deterministischen Kellerautomaten ist die Zustandsüberführungsfunktion folgendermaßen definiert: δ : S × (E ∪ {λ}) × K → S × K  mit folgender Zusatzbedingung: ∀s ∈ S , e ∈ E, k ∈ K : δ(s, e, k) definiert ⇒ δ(s, λ, k) undefiniert (also nicht existent) Eine Zustandsüberführung erfolgt also normalerweise aus einem Zustand s ∈ S über ein Eingabezeichen e ∈ E und ein Kellerzeichen k ∈ K in einen neuen Zustand, wobei das oberste

38

5 Kellerautomaten

Kellerzeichen durch eine Zeichenkette v ∈ K  ersetzt wird (oft gilt |v| ≤ 2). Falls δ(s, λ, k) definiert ist, ignoriert KA das Eingabeband und verändert nur Keller und Zustand. Die Bedingung sorgt dafür, dass der Kellerautomat deterministisch bleibt, da im Fall des Einlesens von Eingabezeichen e und Kellerzeichen k sonst sowohl δ(s, e, k) als auch δ(s, λ, k) als Zustandsübergänge gewählt werden könnten. Insgesamt ergibt sich für den deterministischen Kellerautomaten folgende Arbeitsweise: • Zu Beginn befindet sich der Kellerautomat im Zustand s0 , der Lesekopf ist über dem linkesten Eingabezeichen des Eingabewortes w ∈ E  , und der Keller enthält nur das Zeichen k0 . • Solange sich der Kellerautomat in Zustand s befindet, der Lesekopf über dem Zeichen e steht, und das oberste Kellerzeichen k ist, werden folgende Fälle unterschieden: a) Falls δ weder für (s, e, k) noch für (s, λ, k) definiert ist, hält der Kellerautomat an. b) δ(s, e, k) = (s , v): Der neue Zustand des Kellerautomaten ist s ∈ S , k wird ersetzt durch v ∈ K  , das linkeste Zeichen von v wird das neue oberste Kellerzeichen und der Lesekopf wird um eine Position nach rechts bewegt. c) δ(s, λ, k) = (s , v): wie b), nur dass die Position des Lesekopfs unverändert bleibt. • Ein Wort w ∈ E  wird akzeptiert, falls a) der Lesekopf rechts von w steht (Wort ist vollständig abgearbeitet) und b) der Kellerautomat sich in einem Endzustand f ∈ F befindet. Die Sprache eines Kellerautomaten KA ist die Menge der Wörter, die er akzeptiert, und wird als L(KA) bezeichnet. Wir bezeichnen die Klasse der von deterministischen Kellerautomaten erkennbaren Sprachen als LKA , wobei gilt: L3 ⊂ LKA ⊂ L2 LKA entspricht genau den Sprachen, die von LR-k-Grammatiken bzw. deterministisch kontextfreien Grammatiken erzeugt werden können. Konfigurationen Die Konfiguration eines Kellerautomaten definiert seinen aktuellen Zustand inklusive Eingabebandposition und Kellerinhalt zu einem beliebigen Zeitpunkt während der Berechnung. Dabei ist eine Konfiguration ein 3-Tupel (s, w, v), wobei s ∈ S der aktuelle Zustand des Kellerautomaten ist, w ∈ E  das zu verarbeitende Restwort auf dem Eingabeband und v ∈ K  der aktuelle Kellerinhalt. Bei jedem Zustandsübergang wechselt der Kellerautomat von einer Konfiguration zur nächsten. Eine Konfigurationsfolge ist eine Sequenz aus Konfigurationen, die durch gültige Zustandsübergänge während der Berechnung eines Kellerautomaten nacheinander auftreten. Nichtdeterministische Kellerautomaten Analog zur Idee von nichtdeterministischen endlichen Automaten kann auch ein nichtdeterministischer Kellerautomat definiert werden; ein solcher Kellerautomat kann Übergänge aus einem Zustand in mehrere Folgezustände enthalten. Anders als bei endlichen Automaten kann bei

Einführung

39

Kellerautomaten die nichtdeterministische Variante eine größere Sprachklasse erkennen (nämlich genau die kontextfreien Sprachen) als die deterministische. Ein nichtdeterministischer Kellerautomat ist ebenfalls ein Tupel KA = (E, S , K, δ, s0 , k0 , F), wobei alle Komponenten außer δ wie für einen deterministischen Kellerautomaten definiert sind, und die Überführungsfunktion δ von folgender Gestalt ist: δ : S × (E ∪ {λ}) × K → ℘(S × K  ) Die Arbeitsweise eines nichtdeterministischen Kellerautomaten entspricht der eines deterministischen Kellerautomaten, nur dass er sich zu einem Zeitpunkt in einer Zustandsmenge befinden kann und entsprechend alle Zustandsüberführungen aus den Zuständen dieser Menge berücksichtigen muss. Eine Zusatzbedingung beim Aussetzen des Lesens der Eingabe existiert hier nicht. Ein nichtdeterministischer Kellerautomat akzeptiert ein Wort, wenn es eine Konfigurationsfolge gibt, die vom Anfangszustand zu einem Endzustand führt. Wir bezeichnen die Klasse der von nichtdeterministischen Kellerautomaten erkennbaren Sprachen als Lndet−KA , wobei gilt: Lndet−KA = L2

Themen dieses Kapitels In den sechs Aufgaben dieses Kapitels werden Kellerautomaten zu vorgegebenen Sprachen gesucht. Dabei ist manchmal ein Testwort angegeben, anhand dessen man durch Angabe einer Konfigurationsfolge vom Anfangs- zu einem Endzustand die Berechnung des Kellerautomaten illustrieren soll.

Dieses Thema in der Vorlesungsaufzeichnung zur Vorlesung „Grundlagen der Informatik II“: http://www.dasinfobuch.de/links/ Kellerautomaten.html

40

5 Kellerautomaten

Aufgaben Aufgabe 41

KEL-AB 

Kellerautomaten 



Gegeben sei folgende Sprache L L = {w ∈ {a, b} | w = (a2 b)n mit n ∈ N0 } a) Geben Sie zu dieser Sprache L einen Kellerautomaten A an mit L(A) = L. Geben Sie A vollständig an. b) Geben Sie für L einen deterministischen endlichen Automaten A = (E, S , δ, s0 , F) an mit L(A ) = L. Geben Sie diesen vollständig an. c) Zu welcher/welchen Chomsky-Sprachklasse(n) gehört die Sprache L nach den Ergebnissen aus a) und b)? → Lösung: S. 124

Aufgabe 42

KEL-AE 

Kellerautomaten 



Gegeben sei folgende Sprache L mit L = {w ∈ {a, b} | w = (ab)i (ba)i mit i ∈ N0 } a) Geben Sie einen deterministischen Kellerautomaten A an, mit L(A) = L. Geben Sie A vollständig an. b) Zeigen Sie, dass Ihr Kellerautomat das Testwort abba akzeptiert. → Lösung: S. 125

Aufgaben

41

Aufgabe 43

KEL-AC 

Kellerautomaten 



Geben Sie für folgende Sprache L einen deterministischen Kellerautomaten A an mit L(A) = L. L = {w ∈ {a, b, $} | w = u$u , u ∈ {a, b} } Definieren Sie den Kellerautomaten A vollständig. → Lösung: S. 126

Aufgabe 44

KEL-AD 

Kellerautomaten 



Gegeben sei folgende Sprache L L = {w ∈ {a, b, c} | w = am cq bn a p mit m = n + p; q = 2r; m, n, p, r ∈ N0 } Geben Sie zu L einen nichtdeterministischen Kellerautomaten A mit L(A) = L vollständig an. → Lösung: S. 126

Aufgabe 45

KEL-AA 

Kellerautomaten 





Gegeben sei folgende Sprache L L = {w ∈ {0, 1} | |w|0 = 2 · |w|1 } a) Geben Sie für L einen Kellerautomaten A = (E, S , K, δ, s0 , k0 , F) an mit gilt L(A) = L. Geben Sie A vollständig an. b) Zeigen Sie, dass Ihr Kellerautomat das Testwort 100011100000 erkennt. → Lösung: S. 127

42

5 Kellerautomaten

Aufgabe 46

KEL-AF 

Kellerautomaten 



Gegeben sei folgende kontextfreie Grammatik G = (N, T, P, S ) mit N = {S }, T = {a, b}, P = {S → aab | bbS } a) Geben Sie einen nichtdeterministischen Kellerautomaten A = (E, S , K, δ, s0 , k0 , F) an, der zu G äquivalent ist. Definieren Sie A vollständig. b) Geben Sie die Konfigurationsübergänge von A für das Testwort bbbbaab an. → Lösung: S. 128

6

Kontextfreie Grammatiken

Einführung In der Einführung zu Kapitel 4 wurde eine (allgemeine) Chomsky-Grammatik definiert als 4-Tupel G = (N, T, P, S ) aus einem Alphabet von Nonterminalzeichen N, einem Alphabet von Terminalzeichen T , einer Menge von Produktionen P ⊂ (N ∪ T )+ \T  × (N ∪ T ) und einem Startzeichen S ∈ N. Die Menge der kontextfreien Grammatiken ist eine echte Teilmenge aller Chomsky-Grammatiken und eine echte Obermenge der rechtslinearen Grammatiken. Kontextfreie oder Typ-2-Grammatiken Eine Grammatik heißt kontextfrei, wenn die Menge der erlaubten Produktionen eingeschränkt ist zu P ⊆ N × (N ∪ T ) Jede Regel ist also von der Form A → ψ mit A ∈ N, ψ ∈ (N ∪ T ) Solche Grammatiken heißen kontextfrei, weil jede Regel A → ψ auf jedes Nonterminalzeichen A angewendet werden kann, ohne dass der Kontext, also der Rest des Wortes oder ein Teil davon, berücksichtigt werden muss. Im Gegensatz dazu sind bei kontextsensitiven Grammatiken (Kapitel 9) Regeln erlaubt, welche die Ableitung eines Nonterminalsymbols zu einer Zeichenkette nur dann ermöglichen, wenn sich das Nonterminalsymbol in einem gewissen Kontext befindet. Eine typische Sprache, die von kontextfreien, aber nicht von rechtslinearen Grammatiken erzeugt werden kann, ist L = {an bn | n ∈ N0 } Wie man mit dem Pumping-Lemma (vgl. Kapitel 7) leicht zeigen kann, gibt es keinen endlichen Automaten und damit auch keine rechtslineare Grammatik zu dieser Sprache. Dagegen gibt es folgende kontextfreie Grammatik G mit L(G) = L: G = (N, T, P, S ) N = {S }, T = {a, b}, P = {S → aS b | λ} Kontextfreie Grammatiken können genau die Sprachen erzeugen, die von nichtdeterministischen Kellerautomaten erkannt werden können, es gilt also für eine Sprache L immer: ∃ kontextfreie Grammatik G : L(G) = L ⇔ ∃ ndet. Kellerautomat KA : L(KA) = L

44

6 Kontextfreie Grammatiken

Chomsky-Normalform Eine Grammatik befindet sich in Chomsky-Normalform (CNF), wenn für die Produktionen gilt: P ⊆ N × (NN ∪ T ) Alle Produktionen müssen also von der Form A → BC oder A → a, mit A, B, C ∈ N, a ∈ T sein. Wir fügen noch die Ausnahme hinzu, dass eine Produktion S → λ erlaubt ist, wenn S auf keiner rechten Seite einer Produktion vorkommt; damit wird gewährleistet, dass das leere Wort abgeleitet werden kann. Offenbar sind alle Grammatiken in CNF auch kontextfrei. Es gilt aber auch umgekehrt, dass man zu jeder kontextfreien Grammatik G eine Grammatik GCNF in CNF angeben kann, die dieselbe Sprache erzeugt, also L(G) = L(GCNF ). Die Umwandlung einer kontextfreien Grammatik in eine äquivalente Grammatik in CNF soll anhand eines Beispiels illustriert werden. Die allgemeine Vorgehensweise kann in [HMU11] nachgelesen werden. Sei G eine (etwas umständliche) Grammatik für die Sprache gültiger Klammerstrukturen: G = ({S , A}, {[, ]}, {S → A, A → AA | [A] | λ}, S ) (1) Mache G λ-frei (eventuell unter Hinzufügen eines neuen Startsymbols, falls λ ∈ L(G) und S auf rechter Seite von Regeln auftritt): P(1) = {S → A | λ, A → AA | A | [A] | []} (2) Eliminiere Produktionen vom Typ „A → B“, wobei für jedes „B → ψ“ die Produktion „A → ψ“ hinzugefügt wird (mit A, B ∈ N, ψ ∈ (N ∪ T ) ): P(2) = {S → AA | [A] | [] | λ, A → AA | [A] | []} (3) Ersetze jedes Terminalsymbol a durch ein neues Nonterminalsymbol Ca und füge eine Regel Ca → a hinzu: P(3) = {S → AA | C[ AC] | C[C] | λ, A → AA | C[ AC] | C[C] , C[ → [, C] →]} (4) Ersetze jede Regel der Form „A → B1 . . . Bn “ (n > 2) durch A → B1 D1 , D1 → B2 D2 , ... Dn−3 → Bn−2 Dn−2 , Dn−2 → Bn−1 Bn

Einführung

45

wobei Di , i ∈ {1, . . . , n − 2} neue Nonterminalsymbole sind: GCNF = ({S , A, D1 , C[ , C] }, {[, ]}, PCNF , S ) PCNF = {S → AA | C[ D1 | C[C] | λ, A → AA | C[ D1 | C[C] , D1 → AC] C[ → [, C] →]} Neben der Chomsky-Normalform gibt es noch weitere Normalformen für kontextfreie Grammatiken wie beispielsweise die Greibachnormalform, auf die hier aber nur am Rande eingegangen wird. Cocke-Younger-Kasami-Algorithmus Durch den Cocke-Younger-Kasami- (CYK-) Algorithmus kann man entscheiden, ob ein Wort w von einer kontextfreien Grammatik G erzeugt werden kann oder nicht. Dafür muss die Grammatik in CNF vorliegen. Der Algorithmus arbeitet nach dem Prinzip des dynamischen Programmierens und läuft folgendermaßen ab: INPUT: Grammatik G = (N, T, P, S ) in CNF, Wort w = e1 . . . en ∈ T  . OUTPUT: true, falls w ∈ L(G), f alse sonst. BEGIN Setze alle Vi j  ∅ für 1 ≤ i, j ≤ n FOR i  1 TO n DO

// Finde alle Ein-Schritt-Ableitungen zu Terminalen.

Vi1  {A | A → ei ∈ P} FOR j  2 TO n DO

// Finde alle Ableitungen zu Mehrsymbol-Teilwörtern.

FOR i  1 TO n − j + 1 DO FOR k  1 TO j − 1 DO Vi j  Vi j ∪ {A | (A → BC ∈ P) ∧ (B ∈ Vik ) ∧ (C ∈ Vi+k, j−k )} RETURN S ∈ V1n END Die Grundidee des Algorithmus ist, dass bei einem gegebenen Wort w = e1 . . . en ∈ T  alle Mengen Vi j für j = 1, . . . , n, i = 1, . . . , n − j + 1 berechnet werden, wobei Vi j die Menge aller Nonterminalsymbole ist, aus denen ei . . . ei+ j−1 durch die Grammatik abgeleitet werden kann. Der Ablauf des Algorithmus lässt sich leicht nachvollziehen, indem man eine Dreieckstabelle mit n Zeilen aufstellt, wobei die j-te Zeile n − j + 1 Spalten hat, siehe Abbildung. In zeilenweise aufsteigender Reihenfolge werden nach dem Algorithmus von links nach rechts die Zellen befüllt, wobei die Zelle (i, j) die Menge der Nonterminale enthält, aus denen sich der Wortteil ei . . . ei+ j−1 ableiten lässt. Dementsprechend gilt genau dann w ∈ L(G), wenn sich nach Ablauf des Algorithmus das Startsymbol S in V1n , also in der einzigen Zelle der n-ten Zeile befindet.

46

6 Kontextfreie Grammatiken

1 .. .

j−1 j

e1 V11 .. .

.. .

.. .

n

S ∈ V1n

...

ei Vi1 .. .

...

Vi, j−1 Vi j

Vi+1, j−1

..

... ..

.

ei+ j−1 Vi+ j−1,1

... ..

.

en Vn1

.

?

Bei der Darstellung der Tabelle lassen wir üblicherweise die Mengenklammern in den Zellen der Lesbarkeit halber weg. Die Funktionsweise des Algorithmus wird auch in den Vorlesungsaufzeichnungen anschaulich erklärt. Themen dieses Kapitels Die dreizehn Aufgaben dieses Kapitels beschäftigen sich mit der Definition von kontextfreien Grammatiken zu gegebenen Sprachen, der Umwandlung kontextfreier Grammatiken in die CNF und der Anwendung des CYK-Algorithmus. Darüber hinaus werden allgemeine Eigenschaften kontextfreier Grammatiken und Sprachen betrachtet.

Dieses Thema in der Vorlesungsaufzeichnung zur Vorlesung „Grundlagen der Informatik II“: http://www.dasinfobuch.de/links/ Kontextfreie-Grammatiken.html

Aufgaben

47

Aufgaben Aufgabe 47 Sprachen 

SPR-AE 



Argumentieren Sie, warum die angegebenen Aussagen zu Sprachen über einem konstanten Alphabet E wahr bzw. falsch sind. Wahr

Falsch

Wenn die Sprachen A und B regulär sind, dann ist jede Sprache C mit A ⊆ C ⊆ B auch regulär.





Sei A regulär und B nicht-regulär. Dann ist A ∩ B stets regulär.





Der Durchschnitt von zwei nicht-regulären Sprachen A und B ist stets nicht-regulär.





Die Menge der kontextfreien Sprachen L2 ist gegen Komplementbildung abgeschlossen (d. h. L ∈ L2 ⇔ L ∈ L2 ).





Hinweis: Für ein Alphabet E ist sowohl E  als auch ∅ durch endliche Automaten, rechtslineare Grammatiken usw. darstellbar und somit regulär. Die zugehörigen (nichtdeterministischen) endlichen Automaten bestehen bspw. beide aus nur einem einzigen Zustand, der für E  gleichzeitig Endzustand ist und für ∅ nicht. → Lösung: S. 129

Aufgabe 48 Kontextfreie Grammatiken 

KON-AA 





Geben Sie eine kontextfreie Grammatik G an, für die gilt L(G) = L mit L = {0i 1 j | i, j ∈ N0 , i < j} Definieren Sie die Grammatik vollständig. → Lösung: S. 130

48

6 Kontextfreie Grammatiken

Aufgabe 49

KON-AH 

Kontextfreie Grammatiken 



Gegeben sei eine Sprache L von Palindromen der Länge 8: L = {vv | v ∈ {a, b} , |v| = 4} Es gilt beispielsweise: abbbbbba ∈ L. Gesucht ist eine Grammatik G = (N, T, P, S ), für die gilt: L(G) = L. a) Geben Sie eine solche Grammatik G vollständig an. b) Zeichnen Sie einen Ableitungsbaum für das Testwort abbaabba. c) Existiert eine rechtslineare Grammatik Grl , die diese Sprache erzeugt? → Lösung: S. 130

Aufgabe 50

KON-AI 

Kontextfreie Grammatiken 



Gegeben seien die folgenden Sprachen L1 und L2 : L1 = {a2k+1 b2k | k ∈ N0 }, L2 = {(ab)k c2k | k ∈ N} a) Geben Sie eine kontextfreie Grammatik G1 = (N1 , T 1 , P1 , S 1 ) vollständig an, für die gilt: L(G1 ) = L1 . b) Geben Sie eine kontextfreie Grammatik G2 = (N2 , T 2 , P2 , S 2 ) vollständig an, für die gilt: L(G2 ) = L2 . → Lösung: S. 131

Aufgaben

49

Aufgabe 51

KON-AL 

Kontextfreie Grammatiken 



Gesucht ist eine kontextfreie Grammatik G, für die gilt: L(G) = L mit L = {an bn cm | m, n ≥ 0}. Außerdem sei das Testwort aaabbbc gegeben. a) Geben Sie die Grammatik G = (N, T, P, S ) vollständig an. b) Geben Sie die Produktion des Testwortes an. → Lösung: S. 131

Aufgabe 52

KON-AJ 

Kontextfreie Grammatiken 



Entscheiden Sie, ob folgende Aussagen wahr oder falsch sind und begründen Sie kurz: Wahr

Falsch

Jede kontextfreie Sprache ist eine Typ-0-Sprache.





Kontextfreie Grammatiken sind monoton.





Die Sprache L = {an (bc)n | n ∈ N0 } kann von einer kontextfreien Grammatik erzeugt werden.





Zu jeder kontextfreien Grammatik G gibt es eine kontextfreie Grammatik G in Greibach-Normalform mit L(G ) = L(G)\{λ}.





Eine Grammatik in Greibach-Normalform ist automatisch auch in Chomsky-Normalform.





Eine Typ-3-Sprache kann von einer kontextfreien Grammatik erzeugt werden.





→ Lösung: S. 132

50

6 Kontextfreie Grammatiken

Aufgabe 53

KON-AK 

Kontextfreie Grammatiken 





Zeigen Sie, dass die Menge der kontextfreien Sprachen bezüglich der Verknüpfung „∩“ nicht abgeschlossen ist, dass also der Schnitt zweier kontextfreier Sprachen nicht notwendigerweise kontextfrei ist. → Lösung: S. 133

Aufgabe 54

KON-AB 

Chomsky-Normalform 



Bringen Sie folgende Grammatik G = (N, T, P, S ) mit N = {S , A, B, C} T = {a, b, c, d, e} P = {S → A | AB | ACa, A → b | bc, B → d, C → eCe | d} in Chomsky-Normalform. → Lösung: S. 133

Aufgabe 55

KON-AC

Chomsky-Normalform und Cocke-Younger-Kasami-Algorithmus 





Gegeben sei die kontextfreie Grammatik G = (N, T, P, S ) mit N = {S , A} T = {a, b} P = {S → A, A → aAb | ab} a) Bringen Sie G in Chomsky-Normalform (CNF). b) Überprüfen Sie mithilfe des Cocke-Younger-Kasami-Algorithmus, ob durch G das Wort w = aaabbb erzeugt werden kann. → Lösung: S. 134

Aufgaben

51

Aufgabe 56

KON-AD

Chomsky-Normalform und Cocke-Younger-Kasami-Algorithmus 





Gegeben sei die Grammatik G = (N, T, P, S ) mit N = {S , A, B, C, D}, T = {a, b, c}, P = {S → ABC | AB | λ, A → aC | aB | b, B → bA | ABC | a, C → c | D, D → CB | c} a) Bringen Sie G in die Chomsky-Normalform. b) Überprüfen Sie mit dem Cocke-Younger-Kasami-Algorithmus, ob durch die Grammatik G das Wort w = acbbacacc erzeugt werden kann. c) Produzieren Sie das Wort w = acbbacacc mithilfe der Grammatiken aus Aufgabenteil a) vor und nach der Umwandlung in CNF. → Lösung: S. 135

Aufgabe 57

KON-AE 

Cocke-Younger-Kasami-Algorithmus 



Gegeben sei die Grammatik G = (N, T, P, S ) mit N = {S , A, B, C}, T = {a, b} und P = {S → AB | BC, A → BA | a, B → CC | b, C → AB | a} Überprüfen Sie mithilfe des Cocke-Younger-Kasami-Algorithmus, ob bbaaab ∈ L(G). → Lösung: S. 137

52

6 Kontextfreie Grammatiken

Aufgabe 58

KON-AF 

Cocke-Younger-Kasami-Algorithmus 



Überprüfen Sie mithilfe des Cocke-Younger-Kasami-Algorithmus, ob das Wort bcedea von der Grammatik G = (N, T, P, S ) erzeugt werden kann, mit N = {S , A, B, C, D, E, F, G, H, I} T = {a, b, c, d, e} P = {S → b | DE | AB | AH, A → d | DE, B → d, C → GI | d, D → b, E → c, F → a, G → e, H → CF, I → CG}

→ Lösung: S. 138

Aufgabe 59

KON-AG 

Cocke-Younger-Kasami-Algorithmus 



Gegeben sei die Grammatik G = (N, T, P, S ) mit N = {S , A, B} T = { f, i, n, o} P = {S → iB | nBA, A → f A f | f Bo, B → nBo | f B | λ} a) Bringen Sie G in Chomsky-Normalform (CNF). b) Überprüfen Sie mithilfe des Algorithmus von Cocke, Younger und Kasami, ob in f o ∈ L(G) = L(GCNF ). → Lösung: S. 138

7

Pumping-Lemma

Einführung In diesem Kapitel wird das Pumping-Lemma (PPL) für reguläre Sprachen und das PPL für kontextfreie Sprachen behandelt. Das PPL ist eine Eigenschaft, die alle Sprachen aus der jeweiligen zugehörigen Sprachklasse haben. Es macht Aussagen über Sprachen, deren Wörter strukturell nach einfachen Prinzipen definiert werden können (beispielsweise durch endliche Automaten bzw. kontextfreie Grammatiken). Für solche Sprachen gilt, dass sie, wenn sie Wörter einer bestimmten Mindestlänge enthalten, automatisch eine unendliche Menge weiterer Wörter enthalten müssen, die sich durch das „Aufpumpen“ der vorhandenen Wörter ergeben. Da jede reguläre (kontextfreie) Sprache das PPL für reguläre (kontextfreie) Sprachen erfüllt, kann der Nachweis, dass eine Sprache das PPL für reguläre (kontextfreie) Sprachen nicht erfüllt, als Nachweis für die Nicht-Regularität (Nicht-Kontextfreiheit) dieser Sprache angesehen werden. Die Umkehrung gilt allerdings im Allgemeinen nicht, es gibt also nicht-reguläre (nichtkontextfreie) Sprachen, die das PPL für reguläre (kontextfreie) Sprachen erfüllt (vgl. dazu Jaffes PPL für reguläre Sprachen [Jaf78]). PPL für reguläre Sprachen Bei regulären Sprachen orientiert man sich bei der Formulierung des PPLs an endlichen Automaten, da jede reguläre Sprache durch einen endlichen Automaten erkannt werden kann. Wir können also davon ausgehen, dass eine reguläre Sprache immer Sprache L(A) eines endlichen Automaten A ist. Man beobachtet, dass ein endlicher Automat, der ein Wort w erkennt, das mindestens so lang ist wie die Anzahl seiner Zustände |S |, mindestens eine Schleife enthalten muss. Wenn er aber eine Schleife enthält, dann kann diese beliebig oft durchlaufen werden (keinmal, einmal oder öfter), wodurch unendlich viele weitere Wörter ebenfalls akzeptiert werden. Formal sei also dieser endliche Automat gegeben durch A = (E, S , δ, s0 , F) mit n =de f |S | Dann gibt es für jedes Wort w ∈ L(A) mit |w| ≥ n Wörter x, y, z ∈ E  mit w = xyz, sodass gilt: 1) |xy| ≤ n, 2) |y| ≥ 1, 3) ∀i ∈ N0 : xyi z ∈ L(A). In der obigen Definition bezeichnet 3) die Tatsache, dass wegen einer Schleife im Automaten neben dem Wort w = xyz auch noch die „gepumpten“ Wörter xz, xyyz, xyyyz, . . . akzeptiert werden; dabei wird i als Pumpvariable bezeichnet. 1) beschreibt die Eigenschaft, dass die Schleife innerhalb der ersten n Zeichen des Wortes w auftreten muss und 2) die Eigenschaft, dass sich innerhalb der Schleife mindestens ein Zeichen befinden muss.

54

7 Pumping-Lemma

Üblicherweise wird das PPL in seiner Umkehrung benutzt, um nachzuweisen, dass eine Sprache L nicht regulär ist. Dabei reicht es zu zeigen, dass es ein Wort w ∈ L mit |w| ≥ n gibt, sodass für alle Zerlegungen w = xyz mindestens eine der Folgerungen 1), 2) oder 3) nicht gilt. Im Normalfall geht man davon aus, dass 1) und 2) erfüllt sind, und zeigt, dass dann 3) nicht erfüllt werden kann, dass es also mindestens ein i gibt, sodass xyi z  L. Bemerkung: Zu beachten ist, dass beim Beweisen der Nicht-Regularität einer Sprache über alle möglichen endlichen Automaten argumentiert wird, deren Zustandszahl zwar immer endlich ist, aber sonst beliebig groß sein kann. Damit das betrachtete Wort w, das gepumpt werden soll, eine mindestens so große Länge hat wie die Zustandszahl jedes dieser Automaten (und da Wörter nicht unendlich lang sein können), muss die Länge von w mit n wachsen (wir können beispielsweise ein Wort wie an bn wählen, aber nie ein Wort konstanter Länge wie aaabbb); es handelt sich also genaugenommen um eine unendliche Teilmenge von Wörtern aus L. Diese Bemerkung gilt analog auch für das PPL für kontextfreie Sprachen. PPL für kontextfreie Sprachen Beim kontextfreien PPL betrachtet man kontextfreie Grammatiken, um zu einer analogen Aussage wie beim regulären PPL zu kommen. Eine Grammatik (N, T, P, S ) heißt dabei kontextfrei, wenn P ⊆ N × (N ∪ T ) gilt, also wenn alle Produktionen von der Form A → ψ mit A ∈ N und ψ ∈ (N ∪ T ) sind. Dabei stellt man fest, dass bei der Ableitung eines Wortes z, das eine bestimmte Länge k ∈ N hat oder überschreitet, mindestens ein Nonterminalsymbol A ∈ N der kontextfreien Grammatik auf einem Pfad des Ableitungsbaums mindestens zweimal vorkommen muss, da in jedem Schritt genau ein Nonterminalsymbol „verbraucht“ wird. Für beliebige Wörter u, v, w, x, y ∈ T  , die als Teilwörter bei der Ableitung gebildet werden können, ergibt sich dann: S → uAy → uvAxy → uvwxy = z  A kehrt wieder Vom ersten zum zweiten Auftreten von A wurde durch A das Wort vAx produziert, und es spricht nichts dagegen, diese Ableitungsfolge mehrfach (keinmal, einmal oder öfter) zu durchlaufen. Also erhalten wir wieder eine Art Schleife und dadurch zusätzlich die möglichen Ableitungen uAy, uvvAxxy, uvvvAxxxy, . . . Am Ende wird aus A noch ein Wort w abgeleitet, das in der Mitte stehenbleibt. Daher weiß man, ohne die tatsächliche Definition einer Grammatik zu kennen, nur über die Tatsache, dass ein Wort z der Mindestlänge k von ihr erzeugt werden kann, dass aus derselben Grammatik auch die Wörter uvi wxi y für bestimmte u, v, w, x, y und i ∈ N0 erzeugt werden können. Die Größe von k ergibt sich aus der Struktur der Grammatik, ist aber, wie beim regulären PPL, für dessen Kernaussage unerheblich. Formal ist die Aussage des kontextfreien PPLs, dass es für jede kontextfreie Sprache L über einem Alphabet T ein k ∈ N gibt, sodass für alle z ∈ L mit |z| ≥ k Wörter u, v, w, x, y ∈ T  existieren mit z = uvwxy und es gilt: 1) |vwx| ≤ k, 2) |vx| ≥ 1, 3) ∀i ∈ N0 : uvi wxi y ∈ L. Dabei bezeichnet 3) die Tatsache, dass wegen einer Wiederholung eines Nonterminals neben dem Wort z = uvwxy auch noch die „gepumpten“ Wörter uwy, uvvwxxy, uvvvwxxxy, . . . erzeugt

Einführung

55

werden. 1) beschreibt die Eigenschaft, dass die gesamte Pumpstelle zusammen mit dem inneren Teil w nicht mehr als k Zeichen lang sein kann und 2) die Eigenschaft, dass sich innerhalb des gepumpten Teils mindestens ein Zeichen befinden muss. Wie das PPL für reguläre Sprachen wird auch dieses PPL meist in seiner Umkehrung benutzt, um nachzuweisen, dass eine Sprache L nicht kontextfrei ist. Dabei zeigt man, dass es ein Wort z ∈ L mit |z| ≥ k gibt, sodass für alle Zerlegungen z = uvwxy mindestens eine der Folgerungen 1), 2) oder 3) nicht gilt. Wieder geht man im Normalfall davon aus, dass 1) und 2) erfüllt sind, und zeigt, dass dann 3) nicht erfüllt werden kann, dass es also mindestens ein i gibt, sodass uvi wxi y  L. Themen dieses Kapitels Die dreizehn Aufgaben dieses Kapitels behandeln die Frage, wie man für eine gegebene Sprache zeigt, dass sie regulär (kontextfrei) bzw. nicht-regulär (nicht-kontextfrei) ist. Ersteres kann durch Angabe entsprechender Automaten/Grammatiken/usw. bewiesen werden, letzteres mit den beiden PPLs. Dabei werden auch einige strukturelle Aspekte der PPLs und am Rande der CYK-Algorithmus (vgl. Kapitel 6) behandelt. Die Lösungen zu den Aufgaben PUM-AA (Seite 56) und PUM-AL (Seite 57) beschreiben anhand jeweils eines Beispiels noch einmal besonders ausführlich die typische Vorgehensweise beim Widerspruchsbeweis mit den beiden PPLs.

Dieses Thema in der Vorlesungsaufzeichnung zur Vorlesung „Grundlagen der Informatik II“: http://www.dasinfobuch.de/links/ Pumping-Lemma.html

56

7 Pumping-Lemma

Aufgaben Aufgabe 60

PUM-AB 

Pumping-Lemma für reguläre Sprachen 



Benennen Sie die zentrale Aussage des Pumping-Lemmas für reguläre Sprachen in eigenen Worten. → Lösung: S. 139

Aufgabe 61

PUM-AA 

Pumping-Lemma für reguläre Sprachen 



Zeigen Sie mithilfe des Pumping-Lemmas für Typ-3-Sprachen (reguläre Sprachen), dass kein endlicher Automat existiert, der die Sprache L = {w ∈ {0, 1} | |w|1 = |w|0 } erkennt. → Lösung: S. 140

Aufgabe 62

PUM-AF 

Pumping-Lemma für reguläre Sprachen 



Zeigen Sie, dass folgende Sprache L nicht rechtslinear ist: L = {an bbcn | n ∈ N}

→ Lösung: S. 141

Aufgaben

57

Aufgabe 63

PUM-AC 

Pumping-Lemma für reguläre Sprachen 



Für ein Alphabet E und ein Wort w ∈ E  bezeichne w ∈ E  die Umkehrung von w (vgl. Anhang A.3). Gegeben sei die Sprache L = {x1x | x ∈ {0, 1} }. a) Zeigen Sie mithilfe des geeigneten Pumping-Lemmas, dass L nicht von einem endlichen Automaten erkannt werden kann. b) Geben Sie eine kontextfreie Grammatik G an mit L(G) = L. c) Erzeugen Sie eine Grammatik G in Greibach-Normalform mit L(G ) = L(G) = L. Hinweis: Erlaubt sind dabei nur Produktionen der Form N × T N  . → Lösung: S. 141

Aufgabe 64

PUM-AL 

Pumping-Lemma für kontextfreie Sprachen 



Gegeben sei die Sprache L mit L = {ai b j ck | i ≤ j ≤ k ∈ N} Ist L kontextfrei? → Lösung: S. 142

Aufgabe 65

PUM-AD 

Pumping-Lemma für kontextfreie Sprachen 



Zeigen Sie, dass folgende Sprache L nicht kontextfrei ist:   L = 0l 10l 10l | l ∈ N0

→ Lösung: S. 144

58

7 Pumping-Lemma

Aufgabe 66

PUM-AG

Pumping-Lemma für kontextfreie Sprachen 





Zeigen Sie, dass folgende Sprache L nicht kontextfrei ist: L = {0i 1 j 2i 3 j | i, j ∈ N}

→ Lösung: S. 145

Aufgabe 67

PUM-AI

Pumping-Lemma für kontextfreie Sprachen 





Gegeben sei die Sprache L mit L = {(ab)n (ca)n (bc)n | n ∈ N0 } Gibt es eine kontextfreie Grammatik, die L erzeugt? Wenn ja, geben Sie eine solche Grammatik an, wenn nein, begründen Sie, warum es keine gibt. → Lösung: S. 146

Aufgabe 68

PUM-AJ

Pumping-Lemma für kontextfreie Sprachen 





Gegeben sei die Sprache L mit L = {AB ∈ {0, 1} | |A|0 = |B|0 und |A|1 = |B|1 } Zeigen Sie, dass L nicht kontextfrei ist. → Lösung: S. 147

Aufgaben

59

Aufgabe 69

PUM-AK 

Pumping-Lemma für kontextfreie Sprachen 



Gegeben sei die Sprache L mit L = {an bm cn·m | n, m ∈ N} Zeigen Sie, dass L nicht kontextfrei ist. → Lösung: S. 147

Aufgabe 70

PUM-AM 

Pumping-Lemma für kontextfreie Sprachen 



Ist die folgende Sprache L kontextfrei? L = {ai b j ci | i ≥ j ∈ N}

→ Lösung: S. 148

Aufgabe 71

PUM-AH 

Pumping-Lemma für kontextfreie Sprachen 





Gegeben sei die Sprache L mit 2

L = {ak bk | k ≥ 0} Zeigen Sie, dass L nicht kontextfrei ist. → Lösung: S. 149

60

7 Pumping-Lemma

Aufgabe 72 Pumping-Lemma für kontextfreie Sprachen 

PUM-AE 



Entscheiden Sie, ob die folgenden Aussagen wahr oder falsch sind. Wahr

Falsch

Es gibt nicht-kontextfreie Sprachen, die das Pumping-Lemma für kontextfreie Sprachen erfüllen.





Man bedient sich des Pumping-Lemmas für kontextfreie Sprachen, um in einem Widerspruchsbeweis zu zeigen, dass eine Sprache nicht kontextfrei ist.





Die Konstante k des Pumping-Lemmas für kontextfreie Sprachen ergibt sich aus der Anzahl der Zustände eines endlichen Automaten.





Mit dem Algorithmus von Cocke, Younger und Kasami lässt sich für jede nicht-kontextfreie Sprache ein Pumpwort für einen Widerspruchsbeweis mit dem Pumping-Lemma konstruieren.





Das Pumping-Lemma für kontextfreie Sprachen hat zwei, das für reguläre Sprachen nur eine Pumpstelle.





Für einen Widerspruchsbeweis mit dem Pumping-Lemma für kontextfreie Sprachen kann man dieses Pumping-Lemma immer durch das Pumping-Lemma für reguläre Sprachen ersetzen, indem man für eine der beiden Pumpvariablen das leere Wort wählt.





→ Lösung: S. 150

8

Turingmaschinen

Einführung Die Turingmaschine ist eine weitere Verallgemeinerung der endlichen Automaten bzw. Kellerautomaten, wobei nun ein aus unendlich vielen Feldern bestehendes Arbeitsband zur Verfügung steht, das sequentiell abgelaufen und an beliebigen Positionen gelesen und beschrieben werden kann. Bei Turingmaschinen wird nicht mehr zwischen Ein- und Ausgabeband unterschieden, sondern die Eingabe wird vor Beginn der Berechnung auf das Arbeitsband geschrieben. Um die Eingabe von noch unbeschriebenen Teilen des Bandes zu unterscheiden, gibt es ein „Leersymbol“ , das nicht Teil des Eingabealphabets ist. Im Zuge der Berechnung wird ein Schreib-/Lesekopf auf dem Band hin- und herbewegt, der das Bandfeld direkt unter sich lesen und verändern kann. Dabei können sowohl die Felder, auf denen die Eingabe steht, als auch die übrigen, anfangs leeren Felder des Bandes verändert werden. Abhängig vom aktuellen Zustand und dem aktuell gelesenen Bandzeichen wird das zu schreibende Zeichen gewählt, der Schreib-/Lesekopf um ein Feld nach links oder rechts verschoben oder stehen gelassen und ein Zustandswechsel der Turingmaschine vollzogen. Wie endliche Automaten (und im Prinzip auch Kellerautomaten) können auch Turingmaschinen sowohl als Akzeptoren genutzt werden als auch zur Berechnung von Funktionen. Die von (allgemeinen) Turingmaschinen erkennbaren Sprachen entsprechen genau den Typ-0-Sprachen, also den von allgemeinen ChomskyGrammatiken erzeugbaren Sprachen. Hintergrund Das Modell der Turingmaschine wurde von Alan Turing, einem der Pioniere der Theoretischen Informatik, bereits 1936 als universelles Berechnungsmodell vorgeschlagen [Tur36]. Turings Idee war, die Art wie Menschen mit Papier und Bleistift rechnen, beliebige Positionen auf dem Papier ansteuern und die dort befindlichen Symbole durch andere ersetzen, in ein mathematisches Modell umzusetzen. Eine erste zweidimensionale Version konnte dabei zu der hier beschriebenen Variante mit einem eindimensionalen Arbeitsband vereinfacht werden. Es stellte sich heraus, dass das Modell mit allen anderen bisher vorgeschlagenen Berechnungsmodellen äquivalent ist. Daraus entstand die Churchsche These, die besagt, dass die Turingberechenbarkeit mit dem intuitiven Begriff der Berechenbarkeit von Funktionen übereinstimmt (vgl. Kapitel 10). Allgemeine deterministische Turingmaschinen Eine (deterministische) Turingmaschine ist ein 6-Tupel T = (E, B, S , δ, s0 , F) mit dem Eingabealphabet E, wobei   E, dem Bandalphabet B, wobei E ∪ {} ⊆ B, der Zustandsmenge S , der partiellen Zustandsüberführungsfunktion δ : S × B → S × B × {L, R, N} dem Anfangszustand s0 ∈ S und der Menge von Endzuständen F ⊆ S .

62

8 Turingmaschinen

Die Turingmaschine befindet sich zu Beginn ihrer Rechnung im Anfangszustand s0 , und der Schreib-/Lesekopf ist über dem äußerst linken Zeichen des Eingabewortes w =de f e1 . . . en , das, eingebettet von Leersymbolen , auf dem Arbeitsband steht:

...



← 

s0 e1

→ e2 . . . en Bandinschrift



...

Das Kästchen mit s0 in der Tabelle symbolisiert den Schreib-/Lesekopf und den aktuellen Zustand der Turingmaschine. Zustandsübergänge sind abhängig vom aktuellen Zustand s ∈ S und dem aktuell unter dem Schreib-/Lesekopf befindlichen Bandzeichen b ∈ B. Die Maschine entscheidet auf dieser Grundlage, welcher Folgezustand s ∈ S gewählt wird, durch welches Bandzeichen b ∈ B das unter dem Schreib-/Lesekopf befindliche Bandzeichen ersetzt wird und in welche Richtung X ∈ {L, R, N} sich der Schreib-/Lesekopf bewegen soll (dabei steht L für „ein Feld nach links“, R für „ein Feld nach rechts“ und N für keine Veränderung der Position). Dafür wird die Zustandsüberführungsfunktion herangezogen, die entweder einen Übergang δ(s, b) = (s , b , X) definiert oder für (s, b) undefiniert ist, was bedeuten würde, dass die Turingmaschine anhält. Eine Turingmaschine berechnet eine Funktion f : E → B : w → f (w), wobei w die Eingabe ist, die zu Beginn auf dem Band steht, und f (w) das Wort, das nach dem Halten der Turingmaschine auf dem durch die äußersten beiden Nicht--Zeichen begrenzten Teil des Bandes steht (diesen Teil des Bandes nennt man Bandinschrift). Eine Turingmaschine akzeptiert eine Eingabe w ∈ E  , wenn sie sich beim Halten in einem Endzustand f ∈ F befindet. Die Sprache der von einer Turingmaschine T akzeptierten Wörter wird als L(T ) bezeichnet. Wir bezeichnen die Klasse der von deterministischen Turingmaschinen erkennbaren Sprachen als LT M , wobei gilt: LT M = L0

Konfigurationen Wie bei Kellerautomaten definiert die Konfiguration einer Turingmaschine ihren aktuellen Berechnungsschritt zu einem beliebigen Zeitpunkt während der Berechnung. Dafür müssen in einer Konfiguration die aktuelle Bandinschrift, die aktuelle Position des Schreib-/Lesekopfes und der aktuelle Zustand enthalten sein. Daher ist für Turingmaschinen eine Konfiguration definiert als 3-Tupel (v, s, w) ∈ B × S × B mit • vw ist die aktuelle Bandinschrift, • v ist der Teil der Bandinschrift links vom Schreib-/Lesekopf, • w ist der Teil der Bandinschrift, der das Zeichen unter dem Schreib-/Lesekopf sowie das Restwort rechts vom Schreib-/Lesekopf enthält und • s ist der aktuelle Zustand.

Einführung

63

Die Anfangskonfiguration ist also (λ, s0 , w). Wie bei Kellerautomaten gilt auch für Turingmaschinen, dass bei jedem Zustandsübergang von einer Konfiguration zur nächsten gewechselt wird. Eine Konfigurationsfolge ist eine Sequenz aus Konfigurationen, die durch gültige Zustandsübergänge während der Berechnung einer Turingmaschine nacheinander auftreten. Eine Konfiguration (v, s, w) heißt (akzeptierende) Endkonfiguration, falls s ∈ F gilt und es für (v, s, w) keine Folgekonfiguration gibt (unabhängig von der Bandinschrift). Nichtdeterministische Turingmaschinen Analog zu der Vorgehensweise bei nichtdeterministischen endlichen Automaten oder Kellerautomaten, kann auch eine nichtdeterministische Turingmaschine von einem Zustand in mehrere Folgezustände gleichzeitig wechseln. Wie bei endlichen Automaten, aber anders als bei Kellerautomaten, kann bei Turingmaschinen die nichtdeterministische Variante keine größere Sprachklasse erkennen als die deterministische (beide erkennen nämlich genau die Typ-0-Sprachen). Allerdings ist bis heute die Frage offen, ob sich deterministische und nichtdeterministische Turingmaschinen signifikant in der Berechnungsgeschwindigkeit unterscheiden. So ist eines der wichtigsten offenen Probleme der Informatik die Frage, ob die Klasse der von nichtdeterministischen Turingmaschinen in Polynomialzeit berechenbaren Probleme gleich der Klasse von deterministischen Turingmaschinen in Polynomialzeit berechenbaren Probleme ist (NP = P oder NP  P; vgl. Kapitel 10). Eine nichtdeterministische Turingmaschine ist ebenfalls ein 6-Tupel T = (E, B, S , δ, s0 , F), wobei alle Komponenten, außer der Überführungsfunktion δ, wie für eine deterministische Turingmaschine definiert sind und δ von folgender Gestalt ist: δ : S × B → ℘(S × B × {L, R, N}) Eine nichtdeterministische Turingmaschine akzeptiert ein Wort, wenn es eine Konfigurationsfolge gibt, die von der Anfangskonfiguration zu einer Endkonfiguration führt (es müssen also insbesondere nicht alle Konfigurationsfolgen zu einer Endkonfiguration führen). Wir bezeichnen die Klasse der von nichtdeterministischen Turingmaschinen erkennbaren Sprachen als Lndet−T M , wobei gilt: Lndet−T M = LT M = L0 Turingmaschinen mit linearer Bandbeschränkung Eine linear beschränkte Turingmaschine, auch linear beschränkter Automat (LBA) genannt, ist eine akzeptierende Turingmaschine, bei der nur ein beschränkter Teil des Bandes benutzt werden darf (linear in der Länge des Eingabewortes). Modelliert wird das durch ein nach links nicht über das Eingabewort hinaus nutzbares und nach rechts durch ein Begrenzungssymbol $  E, das nicht „überschritten“ werden darf, begrenztes Eingabeband. Die Länge des verfügbaren Bandabschnitts LB(w) ist LB(w) =de f k · |w| + c für Konstanten k, c ∈ N0 und hängt somit linear von der Länge des Eingabewortes ab: s0 → e1 e2 |w| = n

. . . en (erstes)

 ...  n (zweites)

... ...

 ...  n (k-tes)

... c

← $

64

8 Turingmaschinen

Die Erkennungsmächtigkeit von LBAs liegt zwischen der von Turingmaschinen und der von Kellerautomaten. Genauer gesagt können LBAs genau die Sprachen erkennen, die von kontextsensitiven (oder monotonen) Grammatiken erzeugt werden können (vgl. Kapitel 9). LBAs können ebenfalls nichtdeterministisch sein, wobei hier die Frage, ob sich die Sprachmächtigkeit durch den Nichtdeterminismus erhöht, ein offenes Problem darstellt (erstes LBA-Problem). Themen dieses Kapitels Die acht Aufgaben dieses Kapitels beschäftigen sich mit der Definition von Turingmaschinen, die eine bestimmte Funktion berechnen oder eine bestimmte Sprache akzeptieren sollen. Darüber hinaus werden die Themen Grammatiken und Zahlendarstellung gestreift sowie Zusammenhänge zwischen allen behandelten Automatenklassen hergestellt.

Dieses Thema in der Vorlesungsaufzeichnung zur Vorlesung „Grundlagen der Informatik II“: http://www.dasinfobuch.de/links/ Turingmaschinen.html

Aufgaben

65

Aufgaben Aufgabe 73

TUR-AA 

Turingmaschinen 



Geben Sie eine Turingmaschine A an, die die als Binärzahl interpretierte Bandinschrift w ∈ {0, 1} in die Zweikomplement-Darstellung w umwandelt (vgl. Band 2, Kapitel 5). Geben Sie A vollständig an. Hinweise: • Der Schreib-/Lesekopf steht zu Beginn über dem linkesten Zeichen des Eingabewortes w. • A soll über dem linkesten Zeichen des konvertierten Wortes w halten. → Lösung: S. 151

Aufgabe 74

TUR-AF 

Turingmaschinen 



Entwerfen Sie eine Turingmaschine A, welche eine gegebene Binärfolge w ∈ {0, 1} um ihr Komplement erweitert, beispielsweise wird aus der Folge 111 die Folge 111000, aus 011 wird die Folge 011100, und aus 001 wird 001110. Geben Sie A vollständig an. → Lösung: S. 151

Aufgabe 75

TUR-AH 

Turingmaschinen 



Geben Sie eine Turingmaschine A an, die die Bandinschrift w ∈ {a, b, c} um ein Feld nach links verschiebt. Definieren Sie A vollständig. → Lösung: S. 152

66

8 Turingmaschinen

Aufgabe 76

TUR-AC 

Turingmaschinen 



Konstruieren Sie eine Turingmaschine A, die rechts neben der Eingabe w ∈ {0, 1} nochmals das Wort w schreibt. Geben Sie A vollständig an. → Lösung: S. 153

Aufgabe 77

TUR-AG 

Turingmaschinen 



Gegeben sei folgende Sprache L L = {w ∈ {a, b, c}+ | w = w und |w| ≥ 1} L ist also eine Sprache, die nur Palindrome enthält. Ein Palindrom ist ein Wort, das von hinten und vorne gelesen das gleiche ergibt wie von vorne nach hinten (über anderem Alphabet beispielsweise „otto“, „reittier“). Einelementige Wörter sind Palindrome, die in L enthalten sind. Das leere Wort ist ein Palindrom, das nicht in L enthalten ist. a) Geben Sie eine kontextfreie Grammatik G an, für die gilt L(G) = L. b) Geben Sie eine Turingmaschine A an, die Wörter der Sprache L akzeptiert, für die also gilt L(A) = L(G) = L. Definieren Sie A vollständig. → Lösung: S. 153

Aufgabe 78

TUR-AE 

Turingmaschinen 



Definieren Sie eine Turingmaschine A, welche bei einer Eingabe w ∈ {0, 1} folgende Funktion f : {0, 1} → {0, 1} berechnet. ⎧ ⎪ ⎪ ⎨w1, falls |w|1 = 2v + 1 mit v ∈ N0 f (w) → ⎪ ⎪ ⎩w0 sonst Die Turingmaschine A erkennt also, ob eine gerade oder ungerade Anzahl an Einsen vorkommt. Bei einer ungeraden Anzahl schreibt sie rechts neben die Bandeinschrift eine 1, bei gerader Anzahl eine 0. Geben Sie A vollständig an. → Lösung: S. 154

Aufgaben

67

Aufgabe 79

TUR-AD 



Turingmaschinen 



Geben Sie eine Turingmaschine A bzw. A an, die für eine Eingabe w ∈ {0, 1} jeweils folgende Funktionen f : {0, 1} → {0, 1} bzw. f  : {0, 1} → {0, 1} berechnet. a)

⎧ ⎪ ⎪ ⎨wu, f (w) → ⎪ ⎪ ⎩undefiniert

falls w = uv für u, v ∈ {0, 1} und |u| = |v| sonst

Die Turingmaschine überprüft also, ob w = uv für u, v ∈ {0, 1} und u hat die gleiche Wortlänge wie v. In diesem Fall schreibt sie das Wort u noch einmal hinter die Eingabe. Falls die Eingabe nicht diese Form hat, ist das Verhalten von A undefiniert. In diesem Fall soll A lediglich in einem Nicht-Endzustand halten. Geben Sie A vollständig an. b)

⎧ ⎪ ⎪ falls w = vv für ein v ∈ {0, 1} ⎨wv, f (w) → ⎪ ⎪ ⎩undefiniert sonst 

Die Turingmaschine überprüft also, ob w = vv für ein v ∈ {0, 1} ist. In diesem Fall schreibt sie das Wort v noch einmal hinter die Eingabe. Falls die Eingabe nicht die Form vv hat, ist das Verhalten von A undefiniert. In diesem Fall soll A wieder in einem Nicht-Endzustand halten. Geben Sie A vollständig an. → Lösung: S. 155

Aufgabe 80

SPR-AD 

Automaten und Sprachen 



Sind folgende Aussagen wahr oder falsch? Wahr

Falsch

Alle endlichen Mengen von Wörtern sind Sprachen eines Kellerautomaten.





Jede beliebige Menge von Wörtern ist Sprache einer Turingmaschine.





Zu jedem nichtdeterministischen endlichen Automaten gibt es einen eindeutig bestimmten minimalen Automaten.





68

8 Turingmaschinen Nichtdeterministische endliche Automaten sind mächtiger als deterministische endliche Automaten (bezogen auf die Sprachmächtigkeit).





Zu jedem nichtdeterministischen endlichen Automaten A gibt es einen regulären Ausdruck α mit L(α) = L(A).





→ Lösung: S. 157

9

Kontextsensitive und monotone Grammatiken

Einführung In Kapitel 4 wurde eine allgemeine Chomsky-Grammatik als 4-Tupel G = (N, T, P, S ) aus einem Alphabet von Nonterminalzeichen N, einem Alphabet von Terminalzeichen T , einer Menge von Produktionen P ⊂ (N ∪ T )+ \T  × (N ∪ T ) und einem Startzeichen S ∈ N definiert. Kontextsensitive und monotone Grammatiken sind eine Teilmenge der allgemeinen ChomskyGrammatiken und stehen beide auf der Stufe 1 der Chomsky-Hierarchie, erzeugen also gerade die L1 -Sprachen; sie sind somit in ihrer Sprachmächtigkeit zueinander äquivalent. Ihre Sprachmächtigkeit entspricht außerdem genau der Sprachmächtigkeit von linear beschränkten Turingmaschinen (LBAs; vgl. Kapitel 8) und liegt daher über der von kontextfreien Grammatiken und Kellerautomaten, aber unter der von allgemeinen Turingmaschinen und allgemeinen Grammatiken. Kontextsensitive Grammatiken Eine Grammatik heißt Typ-1-Grammatik oder kontextsensitive Grammatik, wenn alle Produktionen von der Form φ1 Aφ2 → φ1 ψφ2 mit A ∈ N, φ1 , φ2 , ψ ∈ (N ∪ T ) , ψ  λ sind. Ferner darf zusätzlich S → λ definiert sein, S darf dann aber sonst auf keiner rechten Seite auftreten. Anders ausgedrückt wird also durch kontextsensitive Produktionen, wie bei kontextfreien Produktionen, immer nur ein einzelnes Nonterminalsymbol A durch eine bliebige (nichtleere) Kette ψ aus Terminal- und Nonterminalsymbolen ersetzt. Im Gegensatz zu kontextfreien Produktionen muss hier allerdings auch der Kontext φ1 , φ2 betrachtet werden, in dem sich A befindet, A darf also nicht immer durch ψ ersetzt werden, sondern nur, wenn es sich zwischen φ1 und φ2 befindet. Monotone Grammatiken Die Einschränkung der Produktionen bei monotonen Grammatiken ist noch einfacher, sie besagt nämlich nur, dass die rechte Seite einer Produktion nicht kürzer sein darf als die linke Seite. Monotone Produktionen sind also von der Form φ → ψ, sodass |φ| ≤ |ψ| mit φ, ψ ∈ (N ∪ T ) Eine Ableitung durch eine monotone Grammatik wächst also in jedem Schritt oder bleibt gleich lang, sie wird aber niemals kürzer. Eine Ausnahme ist auch hier, dass zusätzlich S → λ definiert

70

9 Kontextsensitive und monotone Grammatiken

sein darf, wenn S auf keiner rechten Seite auftritt. Offenbar sind alle kontextsensitiven Grammatiken monoton. Man kann darüber hinaus zeigen, dass monotone Grammatiken genau dieselben Sprachen erzeugen können wie kontextsensitive, indem man einen Algorithmus angibt, der aus einer beliebigen kontextsensitiven Grammatik eine äquivalente monotone Grammatik generiert [HMU11]. Zu beachten ist, dass kontextfreie bzw. rechtslineare Produktionen der Form A → λ (für A  S ) weder monoton noch kontextsensitiv sind. Trotzdem können alle kontextfreien (L2 ) und rechtslinearen (L3 ) Sprachen durch monotone und kontextsensitive Grammatiken erzeugt werden, denn es gibt zu jeder rechtslinearen oder kontextfreien Grammatik eine kontextsensitive und monotone Grammatik, die dieselbe Sprache erzeugt. Die von kontextsensitiven oder monotonen Grammatiken erzeugte Klasse von Sprachen L1 ist also eine (echte) Obermenge der von kontextfreien bzw. rechtslinearen Grammatiken erzeugten Sprachen L2 bzw. L3 , obwohl nicht jede kontextfreie bzw. rechtslineare Grammatik auch kontextsensitiv oder monoton sein muss. Die Tabelle in Anhang B fasst die verschiedenen Möglichkeiten der Charakterisierung von Typ-1-Sprachen zusammen und gibt auch eine typische Sprache an, die in L1 \L2 liegt. Themen dieses Kapitels Die acht Aufgaben dieses Kapitels beschäftigen sich mit der Chomsky-Hierarchie, der Ableitung von Wörtern durch eine gegebene monotone oder kontextsensitive Grammatik und der Definition einer monotonen oder kontextsensitiven Grammatik für eine gegebene Sprache. Die letzte Aufgabe dieses Kapitels zeigt, wie man eine Grammatik angeben kann, die alle Wörter generiert, deren Länge eine Primzahl ist. Diese Aufgabe ist sehr schwer und erfordert Interesse, Zeit und Geduld.

Dieses Thema in der Vorlesungsaufzeichnung zur Vorlesung „Grundlagen der Informatik II“: http://www.dasinfobuch.de/links/ Kontextsensitive-Allgemeine-Grammatiken.html

Aufgaben

71

Aufgaben Aufgabe 81 Sprachen 

SPR-AC 



Beantworten Sie, ob die folgenden Aussagen wahr oder falsch sind (Li , i ∈ {0, 1, 2, 3} steht für die Sprachklasse i in der Chomsky-Hierarchie). Wahr

Falsch

L1 ⊂ L0





L3 = Lndet−EA





LKA = Lndet−KA





Lreg  L3





L0  LT M





LEA  Lndet−EA





Lndet−T M = LT M





→ Lösung: S. 157

Aufgabe 82

SPR-AA 

Chomsky-Hierarchie 



Nennen Sie die vier Haupt-Sprachklassen der Chomsky-Hierarchie und die zugehörigen Automatenmodelle und Grammatiken sowie sonstige Charakterisierungen. Geben Sie jeweils eine Beispiel-Grammatik an. → Lösung: S. 158

72

9 Kontextsensitive und monotone Grammatiken

Aufgabe 83

SPR-AB 

Chomsky-Hierarchie 



Zeichnen Sie ein Diagramm, aus dem die Inklusionsbeziehungen der Chomsky-Sprachklassen Li , i ∈ {0, . . . , 3}, der Menge der entscheidbaren Sprachen und der Menge aller Sprachen ℘(E  ) über einem Alphabet E deutlich werden. → Lösung: S. 160

Aufgabe 84

MON-AB

Monotone/kontextsensitive Grammatiken 





Gegeben sei folgende monotone Grammatik G: G = ({S , T, X, Y}, {b}, P, S ), P = {S → YT | b | bb, Y → XY | bb, Xb → bbX, XbT → bbT, XbbT → bbbb} a) Leiten Sie das Wort w = bbbbbbbb mit der Grammatik ab. b) Welche Sprache wird durch die Grammatik erzeugt? → Lösung: S. 160

Aufgabe 85

MON-AC

Monotone/kontextsensitive Grammatiken 







Gegeben sei die Sprache L = {w ∈ {a, b, c}+ | |w|a = |w|b = |w|c } a) Geben Sie eine monotone Grammatik G = (N, T, P, S ) an, so dass gilt L(G) = L. b) Produzieren Sie das Testwort w = bcaabc. → Lösung: S. 161

Aufgaben

73

Aufgabe 86

MON-AD

Monotone/kontextsensitive Grammatiken  Gegeben sei die Sprache





L = {an bn cn | n ∈ N}

a) Geben Sie eine monotone Grammatik G an, so dass gilt L(G) = L. b) Wie groß ist im schlechtesten Fall der Aufwand, um zu überprüfen, ob ein Wort von einer monotonen Grammatik erzeugt werden kann? → Lösung: S. 161

Aufgabe 87

MON-AE

Allgemeine und monotone Grammatiken 







In dieser Aufgabe soll die Eigenschaft der Teilbarkeit von Zahlen durch Grammatiken dargestellt werden. Gegeben seien dafür die Sprachen L und L mit L = {a p | p ist Primzahl} und L = {a} \L = {λ, a} ∪ {am·n | m, n ∈ N; m, n ≥ 2} Es gilt also: aa, aaa, aaaaa, aaaaaaa, aaaaaaaaaaa, . . . ∈ L ( L) und λ, a, aaaa, aaaaaa, aaaaaaaa, . . . ∈ L ( L) a) Geben Sie zunächst eine Grammatik G an mit L(G) = L. b) Geben Sie eine Grammatik G an mit L(G) = L. Gehen Sie folgendermaßen vor: • Geben Sie zunächst eine Grammatik Gu für die Sprache Lu an, deren Wörter aus zwei Teilen bestehen, wobei die Anzahl der Zeichen des vorderen Teils die des hinteren nicht (restlos) teilt: Lu = {am Uu an | m, n ∈ N : ∀k ∈ N : k · m  n} Hinweis: Es gilt w ∈ Lu ⇔ w = an Uu am mit (n > m oder an Uu am−n ∈ Lu ). • Geben Sie einen Grammatikteil an, der aus Strings der Form Xe an Ze am Ye genau dann, wenn n = m gilt, den folgenden String erzeugt: an Ee am = an Ee an . • Erzeugen Sie unter Zuhilfenahme der Teilgrammatiken die Grammatik G.

74

9 Kontextsensitive und monotone Grammatiken c) Leiten Sie aaaaaaaaa ∈ L aus G ab. Schätzen Sie, wie viele Ableitungsschritte man bräuchte, um aaaaa ∈ L aus G abzuleiten. d) Sind Ihre Grammatiken G und G kontextsensitiv bzw. monoton? Falls nicht, argumentieren Sie, warum es kontextsensitive bzw. monotone Versionen G1 bzw. G1 zu beiden geben muss. → Lösung: S. 162

Aufgabe 88

SPR-AF 

Allgemeine Grammatiken 



Schreiben Sie ein Programm in Pseudocode, das bei Eingabe einer beliebigen Grammatik alle Wörter aufzählt, die von der Grammatik erzeugt werden. Die Grammatik ist gegeben durch • eine Menge von Nonterminalen N = {n1 , . . . , nk }, • eine Menge von Terminalen T = {t1 , . . . , tl }, • eine Menge von Regeln P = {(l1 → r1 ), . . . , (ln → rn )} mit li , ri ∈ (N ∪ T ) (li  T  ), • ein Startsymbol S ∈ N. Sie dürfen im Pseudocode folgende Elemente verwenden: • Die üblichen Programmierkonstrukte wie if B then ... (else ...) end if, while B loop ... end loop, for all x in X loop ... end loop, . . . • Die üblichen mathematischen Operationen wie x ∈ X, X ∪ Y, . . . • Eine Methode mit Signatur match(w, p), die überprüft, ob die Regel p ∈ P auf das Wort w ∈ (N ∪ T ) angewendet werden kann. – Es wird die (potenziell leere) Menge {w1 , . . . , wk } aller Wörter zurückgegeben, die beim Anwenden von p auf w entstehen können. – Beispiel: match((a, S , b), ((S , b) → (a, c, b))) = {(a, a, c, b)}    w

p

w1

• Eine Methode isTerminal(w), die wahr zurückgibt, gdw. w ∈ T  . → Lösung: S. 165

10

Berechenbarkeits- und Komplexitätstheorie

Einführung Dieses Kapitel beschäftigt sich mit zwei wichtigen Teilbereichen der Theoretischen Informatik, nämlich der Berechenbarkeitstheorie, bei der es um die Erforschung von prinzipiell berechenbaren Funktionen geht, und der Komplexitätstheorie, die für berechenbare Funktionen untersucht, mit welchem Aufwand (meist Zeit- und Platz-, aber auch Kommunikations-, SchaltkreisKomplexität usw.) sie berechnet werden können. Aus Gründen der Platzeffizienz kann diese Einleitung nicht als umfassende Einführung in diese beiden Gebiete dienen, sondern nur die wesentlichen Grundlagen darstellen. Weiterführende Informationen gibt es in den Aufzeichnungen zur Vorlesung (siehe unten) sowie im Lehrbuch von Hopcroft, Motwani und Ullman [HMU11]. Berechenbarkeitstheorie Wir definieren die Menge der berechenbaren Funktionen folgendermaßen: Seien E ein Alphabet, M1 und M2 beliebige Teilmengen von E  und f : M1 → M2 eine beliebige Funktion. Die Funktion f heißt genau dann berechenbar, wenn es einen Algorithmus A f : M1 → M2 gibt mit A f (w) = f (w) für alle w ∈ M1 . An dieser Stelle haben wir allerdings noch nicht definiert, was ein Algorithmus ist, sondern dessen Existenz in der Art einer Funktion nur intuitiv vorausgesetzt. Ein Algorithmus ist ein in endlicher Länge beschreibbares Verfahren, das für jeden Ausführungsschritt endliche Zeit benötigt und nach endlich vielen Schritten terminiert. Dabei berechnet ein Algorithmus auf eindeutig determinierte Weise aus einer Eingabe, die eine Probleminstanz eines allgemeinen Problems darstellt, eine Lösung dieses Problems. Beispielsweise berechnet ein Sortieralgorithmus (mit den oben beschriebenen Eigenschaften) aus einer Eingabe, die eine Folge von Zahlen darstellt, eine Folge derselben Zahlen in sortierter Reihenfolge. Auch diese Beschreibung ist jedoch schwammig und muss noch formalisiert werden. Präziser gesagt sei ein Algorithmus AP : A → L für eine Problemklasse P ein allgemeines Verfahren, welches auf richtige Anfangsdaten a ∈ A angewendet nach endlich vielen elementaren Schritten hält und die Lösung L(a) ∈ L liefert. Dabei sei A die Menge konkreter Probleminstanzen (also die Menge derjenigen Datensätze, die konkrete Probleminstanzen beschreiben) und L die Menge von Lösungen zu den Problemen aus A (also die Menge derjenigen Daten, die Lösungen beschreiben). A p kann also für determinierte Algorithmen als eine Funktion im mathematischen Sinne aufgefasst werden. Diese Beschreibung ist zwar präziser, wir haben aber immer noch keine konkreten Angaben über die Gestalt eines Algorithmus gemacht. Während es durchaus zulässig ist, Algorithmen in

76

10 Berechenbarkeits- und Komplexitätstheorie

Pseudocode zu beschreiben oder konkrete Programmiersprachen für die Definition heranzuziehen, ist das mathematisch wohl einfachste Konstrukt, das die Bedingungen erfüllt, die wir an einen Algorithmus gestellt haben, die Turingmaschine. Zur Erinnerung: Eine Turingmaschine T = (E, B, S , δ, s0 , F) berechnet eine Funktion f : E  → B , wenn zu Beginn der Rechnung w die Bandinschrift bzw. Eingabe ist, T nach endlich vielen Rechenschritten in einem Endzustand anhält und dann f (w) die finale Bandinschrift darstellt (vgl. Kapitel 8). Im Folgenden werden wir von diesem auf Turingmaschinen basierenden Begriff des Algorithmus ausgehen und im Hinblick auf obige Definition auch von Turingberechenbarkeit sprechen. Auch die folgenden Begriffsdefinitionen sind eigentlich auf die Berechnung durch Turingmaschinen bezogen, wir verzichten aber aus Lesbarkeitsgründen meist auf die Vorsilbe „Turing-“, solange es keine Missverständnisse geben kann. Wir nennen für ein Alphabet E  die Menge M ⊆ E  entscheidbar (oder rekursiv), wenn es eine berechenbare Funktion f : E  → {true, f alse} gibt, sodass M = {m ∈ E  | f (m) = true}. M ist also die Menge aller Elemente m ∈ E  , für die f (m) = true; es ist demnach durch einen Algorithmus für jedes n ∈ E  „entscheidbar“, ob n ∈ M oder nicht. Wir nennen weiter die Menge M semientscheidbar, wenn es einen Algorithmus gibt, der für alle m ∈ M die Lösung true ausgibt, für Elemente m  M jedoch entweder f alse ausgibt oder niemals anhält. Eine solche Menge M wird auch als aufzählbar bezeichnet mit der Bedeutung, dass es eine surjektive, berechenbare Funktion f : N0 → M gibt; die Menge kann also als „Aufzählung“ M = { f (0), f (1), . . .} aufgefasst werden, die durch einen Algorithmus sukzessive berechnet werden kann. Wie man zeigen kann, sind die Begriffe aufzählbar und semientscheidbar äquivalent; darüber hinaus werden solche Mengen auch als rekursiv aufzählbar bezeichnet. Eine Menge, die nicht semientscheidbar (bzw. aufzählbar oder rekursiv aufzählbar) ist, muss insbesondere abgegrenzt werden von einer Menge, die nur unentscheidbar oder „nicht entscheidbar“ ist, die also semientscheidbar oder nicht semientscheidbar sein kann. Die Klasse der semientscheidbaren Sprachen entspricht genau der Klasse der Typ-0-Sprachen in der Chomsky-Hierarchie. Die Klasse der entscheidbaren Sprachen liegt zwischen den Typ-0und den Typ-1-Sprachen, ist also eine echte Teilmenge der Typ-0-Sprachen und eine echte Obermenge der Typ-1-Sprachen. Eine Sprache, die nicht entscheidbar, aber semientscheidbar ist, ist beispielsweise das sogenannte Halteproblem, nämlich die Fragestellung, ob eine gegebene Turingmaschine auf eine gegebene Eingabe anhalten wird oder ewig weiterläuft. Es gibt auch Sprachen, die entscheidbar, aber nicht vom Typ 1 sind (vgl. Anhang B). Im Folgenden werden wir die oben definierten Begriffe vor allem auf Sprachen, also Mengen von Wörtern über einem gegebenen Alphabet, anwenden. Das stellt aber keine wesentliche Einschränkung dar, denn man kann alle Entscheidungsprobleme als Sprachen definieren und umgekehrt gehört zu jeder Sprache ein Entscheidungsproblem. So kann beispielsweise das Problem S AT (das für eine gegebene aussagenlogische Formel fragt, ob es eine erfüllende Belegung der Variablen gibt) definiert werden als Menge der erfüllbaren aussagenlogischen Formeln beziehungsweise genauer der Sprache aller Kodierungen von erfüllbaren aussagenlogischen Formeln, beispielsweise über dem Alphabet {0, 1}: S AT = {w ∈ {0, 1} | w ist Kodierung einer erfüllbaren aussagenlogischen Formel} Eine Lösung des Problems ist ein Algorithmus AS AT , der für eine gegebene Formel (oder auch ein syntaktisch inkorrektes Wort) w ∈ {0, 1} entscheiden kann, ob w ∈ S AT oder nicht, also AS AT (w) = true, wenn w ∈ S AT , f alse sonst. Auch für die meisten Optimierungsprobleme

Einführung

77

kann man Entscheidungsvarianten angeben, die wesentliche Eigenschaften der ursprünglichen Probleme beibehalten und selbst als Sprachen dargestellt werden können. Um die Turingmaschine weiter als umfassendes Rechenmodell zu etablieren, wird noch der Begriff der universellen Turingmaschine benötigt. Eine universelle Turingmaschine ist das Turingmaschinen-Äquivalent zu einem modernen Computer, der nicht nur eine einzige Funktion berechnen kann, sondern in der Lage ist, Beschreibungen von Algorithmen einzulesen und die entsprechenden Berechnungen auszuführen. Ebenso soll eine universelle Turingmaschine in der Lage sein, eine beliebige andere Turingmaschine (bzw. deren Kodierung) als Eingabe aufzufassen und zu simulieren, um am Ende das Ergebnis auszugeben, das die eingegebene Turingmaschine ausgegeben hätte, wenn man sie direkt ausgeführt hätte. Man kann zeigen, dass solche universellen Turingmaschinen existieren und dass somit das Modell der Turingmaschine als Universalrechner genutzt werden kann. Der Verdacht, dass alle denkbaren Berechenbarkeitsmodelle für Funktionen auf das Modell der Turingmaschine zurückgeführt werden können, wird in der von Church und Turing unabhängig voneinander entwickelten Church-Turing-These (oder auch Churchsche These) zusammengefasst. Diese lautet sinngemäß: „Die Klasse der Turing-berechenbaren Funktionen stimmt mit der Klasse der intuitiv berechenbaren Funktionen überein.“ (Vgl. allerdings auch die weiterführenden Gedanken bezüglich der Natur von Berechenbarkeit über die Berechnung von Funktionen hinaus in [GW05].) Heute glaubt man sogar, dass Turingmaschinen die Rechenzeit bis auf polynomielle Faktoren „richtig“ erfassen, dass also ein Problem genau dann effizient (in Polynomialzeit) lösbar ist, wenn es von Turingmaschinen in Polynomialzeit gelöst werden kann; diese Vermutung nennt man auch die erweiterte Church-Turing-These. Komplexitätstheorie Die Komplexitätstheorie beschäftigt sich innerhalb der Klasse der berechenbaren Probleme mit der Frage, wie viel (Zeit oder Platz) die Berechnung einer Funktion bzw. das Lösen eines Problems kostet. Dafür definiert man folgende Komplexitätsmaße: Für jedes Alphabet E, beliebige Mengen M1 , M2 ⊆ E  und eine Funktion f : M1 → M2 , die von der Turingmaschine T M = (E, S , B, δ, s0 , F) berechnet wird, sei • die Zeitkomplexität T T M der Berechnung von f mit der Turingmaschine T M für ein Wort w ∈ M1 gegeben durch: tT M (w) =de f Länge der Konfigurationenfolge von T M bis zum Halten T T M (n) =de f max{tT M (w) | TM hält angesetzt auf w und |w| = n} • die Platzkomplexität PT M der Berechnung von f mit der Turingmaschine T M für ein Wort w ∈ M1 gegeben durch: pT M (w) =de f Anzahl der bei der Berechnung veränderten Bandfelder von T M PT M (n) =de f max{pT M (w) | TM hält angesetzt auf w und |w| = n} Bei nichtdeterministischen Turingmaschinen wählt man für beide Maße die kürzeste Konfigurationenfolge, die zu einer Endkonfiguration führt. Diese Maße beziehen sich auf den Berechnungsaufwand im schlechtesten Fall; ebenso könnte man Maße für das mittlere Verhalten

78

10 Berechenbarkeits- und Komplexitätstheorie

(bezüglich einer gegebenen Verteilung der Probleminstanzen), das Verhalten im besten Fall usw. wählen. Wir definieren für eine Funktion g : N → R folgende Komplexitätsklassen (DTM steht für deterministische Turingmaschine, NTM für nichdeterministische Turingmaschine, f ist eine berechenbare Funktion): DTime(g) =de f NTime(g) =de f DSpace(g) =de f NSpace(g) =de f

{f {f {f {f

| | | |

f f f f

ist mit Zeitkomplexität O(g) von einer DTM berechenbar} ist mit Zeitkomplexität O(g) von einer NTM berechenbar} ist mit Platzkomplexität O(g) von einer DTM berechenbar} ist mit Platzkomplexität O(g) von einer NTM berechenbar}

Als wichtigste dieser Komplexitätsklassen definieren wir die Klassen der von deterministischen bzw. nichtdeterministischen Turingmaschinen in polynomieller Zeit berechenbaren Funktionen (P bzw. NP):

P =de f DTime(nk ) k∈N

NP =de f

NTime(nk )

k∈N

Für ein Entscheidungsproblem, das sich in der Klasse NP befindet, bedeutet das, dass man nichtdeterministisch eine potentielle Lösung raten und dann in polynomieller Zeit die Korrektheit der Lösung überprüfen kann. Offensichtlich gilt P ⊆ NP. Als eines der wichtigsten offenen Probleme der Informatik gilt die Frage, ob man bei Weglassen des Nichtdeterminismus eine exponentielle Verschlechterung der Laufzeit in Kauf nehmen muss (wie es die meisten Wissenschaftler heute annehmen) oder ob man den Nichtdeterminismus effizient deterministisch simulieren kann, also im Bereich der Polynomialzeit bleibt. Dies ist die Frage, ob P = NP? Von vielen praktischen Problemen weiß man, dass sie in NP liegen (insbesondere viele Entscheidungsprobleme wie S AT und Entscheidungsvarianten von Optimierungsproblemen wie dem „Travelling Salesperson“-Problem T S P). Bisher kennt aber niemand einen Algorithmus, der sie deterministisch in polynomieller Zeit löst. Da Nichtdeterminimus in der realen Welt nicht existiert, viele wichtige Probleme aber in NP liegen (sogar NP-vollständig sind, s. u.), ist die Frage, ob P = NP gilt oder nicht, von zentraler praktischer Bedeutung. Um zu zeigen, dass ein Problem L in einer bestimmten Komplexitätsklasse liegt, reicht es zu zeigen, dass es einen Algorithmus gibt, der die Schranken der jeweiligen Komplexitätsklasse einhält und das Problem löst; dies entspricht der Berechnung einer oberen Schranke für das Problem. Meist ist es aber viel schwieriger, eine untere Schranke für Probleme anzugeben, also zu zeigen, dass sie nicht in einer bestimmten Komplexitätsklasse liegen. Etwas einfacher kann es sein, Probleme untereinander bezüglich ihrer Komplexität zu sortieren im Sinne von „Problem A ist nicht schwerer als Problem B“. Dafür definiert man den Begriff der Reduzierbarkeit: Seien A und B Probleme und LA und LB Mengen von Lösungen zu A bzw. B. A heißt genau dann polynomialzeit-reduzierbar auf B, wenn A durch eine in polynomieller Zeit berechenbare

Einführung

79

Funktion f in B transformiert werden kann und jede Lösung von f (A) = B in polynomieller Zeit in eine Lösung von A transformiert werden kann. Das wird bezeichnet durch A ≤ pol B Die zugrunde liegende Idee ist, dass man, statt das Problem A zu lösen, auch eine Instanz des Problems A so umwandeln kann, dass sie zu einer Instanz des Problems B wird. Jetzt muss man „nur noch“ das Problem B lösen und die Lösung wieder zurückführen auf eine Lösung für A. Wenn diese beiden Umwandlungsprozesse in Polynomialzeit erfolgen (was wir als „effizient“ bezeichnen), heißt das, dass die einzige Stelle, wo ein Flaschenhals auftreten kann, das Lösungsverfahren für B ist. Erfolgt auch dieses in Polynomialzeit, kann man A in Polynomialzeit lösen. Meistens wenden wir dieses Verfahren allerdings nicht an, um einen effizienten Algorithmus für A zu finden (in dieser Richtung würden wir wieder eine obere Schranke erhalten), sondern um zu zeigen, dass B nicht effizient berechnet werden kann. Die Argumentation ist dann genau umgekehrt: Wenn wir bereits wissen, dass A ein schweres Problem ist (das nicht in Polynomialzeit berechnet werden kann) und wir A auf B in Polynomialzeit reduzieren können, dann können wir schlussfolgern, dass die Berechnung von B zum Flaschenhals werden muss, da die beiden Umformungsschritte effizient möglich sind. Etwas salopp kann man A ≤ pol B umgangssprachlich also lesen als „A ist höchstens so zeitaufwändig wie (bis auf polynomielle Faktoren) B“. Bemerkung: Häufig wird der Begriff „reduzieren“ intuitiv missverstanden als „leichter machen“ im Sinne der Komplexität des Problems. Das Gegenteil ist aber der Fall, da es das Ziel ist, leichtere Probleme auf schwerere (oder in etwa gleich schwere) zu reduzieren. Reduziert wird also nicht die algorithmische Komplexität des Problems, sondern die „gedankliche“ Schwierigkeit für eine Person, es zu lösen. Als Analogie für diese Vorgehensweise stelle man sich das Problem vor, den Weg vom Eingang e zum Ausgang a eines Labyrinths zu finden. Angenommen, es existiere eine Wegbeschreibung von e zu einem beliebigen Punkt x in dem Labyrinth und eine weitere von x nach a. Dann kann das Gesamtproblem gelöst werden, indem man es auf das Lösen der beiden Teilprobleme reduziert. Das bedeutet aber nicht, dass die Lösung über den Umweg x von der Komplexität her günstiger ist als eine direkte Lösung. Es bleibt die Frage, woher wir wissen, dass ein Problem „schwer“ ist. Es gibt für manche Probleme untere Schranken für gewisse Komplexitätsklassen (beispielsweise für das Sortieren basierend auf Schlüsselvergleichen, von dem bekannt ist, dass es in Ω(n log n) liegt), allerdings bisher nicht für viele praktisch besonders interessante Probleme aus NP, für die es bis heute keine Polynomialzeit-Algorithmen gibt. Stattdessen kann man sich mit dem Reduktionsbegriff behelfen, um die Klasse der „schwierigsten Probleme aus NP“ zu definieren. Zunächst definieren wir die Klasse NP-schwer als die Klasse der Probleme, auf die sich alle Probleme aus NP reduzieren lassen: NP-schwer =de f {B | ∀A ∈ NP : A ≤ pol B} In dieser Klasse befinden sich diejenigen Probleme, die auf die oben definierte Art schwieriger oder gleich schwer sind wie jedes Problem aus NP. Hier liegen auch Probleme, die außerhalb von NP liegen und unter Umständen noch viel schwieriger sein können; ein besonders schweres Beispiel eines NP-schweren Problems ist das nicht einmal berechenbare Halteproblem. Die interessanten Probleme aus NP-schwer sind aber diejenigen, die selbst innerhalb von NP liegen. Diese nennen wir NP-vollständig und definieren sie als NP-vollständig =de f NP-schwer ∩ NP

80

10 Berechenbarkeits- und Komplexitätstheorie

Für alle Probleme in dieser Klasse gilt insbesondere, dass alle gegenseitig aufeinander in Polynomialzeit reduzierbar sind. Daraus folgt, dass entweder alle in P liegen oder keines. Es gilt also: P = NP ⇔ ∃A ∈ NP-vollständig : A ∈ P Die Lösung eines einzigen dieser Probleme in deterministischer Polynomialzeit führt also zu einer Lösung aller dieser Probleme in deterministischer Polynomialzeit. Ebenso gilt: P  NP ⇔ ∃A ∈ NP-vollständig : A  P Eines der ersten als NP-vollständig bekannten Probleme war das Problem S AT . Heute sind Tausende von NP-vollständigen Probleme bekannt, die letztendlich meist durch Reduktion von S AT auf andere Probleme und Reduktion dieser Probleme auf wieder andere gefunden wurden. Jedes dieser Probleme kann man für das Lösen der Fragestellung P = NP? heranziehen; dass dennoch bisher keine Lösung der Fragestellung existiert, zeigt deren mathematische Schwierigkeit. Deshalb und wegen ihrer praktischen Bedeutung ist die P/N P-Problematik in die Liste der sogenannten Millennium-Probleme aufgenommen worden, für deren Lösung jeweils ein Preisgeld von einer Million US-Dollar ausgesetzt ist. Eine praktische Konsequenz aus diesen Ergebnissen ist, dass man zeigen kann, dass ein Problem B „schwierig“ (NP-schwer) ist, indem man beispielsweise ein beliebiges Problem A aus NP-vollständig wählt und es auf das Problem B in Polynomialzeit reduziert (A ≤ pol B). Obwohl das kein Beweis für die Schwierigkeit von B ist, gilt wegen der augenscheinlichen Unrealisierbarkeit eines deterministischen Polynomialzeit-Algorithmus für A die Schwierigkeit von B als sehr wahrscheinlich. Einige weitere gebräuchliche Komplexitätsklassen sind:   Co-NP =de f L | L ∈ NP mit L = {w | w  L}

DSpace(nk ) = NSpace(nk ) PS PACE =de f k∈N

EXPT I ME =de f

k∈N

DTime(k ) = n

k∈N

EXPS PACE =de f

k∈N

NTime(kn )

k∈N

DSpace(k ) = n

NSpace(kn )

k∈N

Für diese Klassen gilt P⊆

NP ⊆ PS PACE ⊆ EXPT I ME ⊆ EXPS PACE Co-NP

Wie zu sehen ist, ist für die Klassen, bei denen polynomieller Platz bzw. exponentielle Zeit oder exponentieller Platz zur Verfügung stehen, die nichtdeterministische Variante gleich der deterministischen, die analoge Frage zur P/NP-Problematik ist hier also schon geklärt. Man kann auch zeigen, dass es, falls P  NP gilt, Probleme innerhalb von NP gibt, die weder in P noch in NP-vollständig liegen. Ob Co-NP = NP gilt, ist unbekannt, gilt aber als ähnlich unwahrscheinlich wie P = NP.

Einführung

81

Themen dieses Kapitels Die zwölf Aufgaben dieses Kapitels beschäftigen sich mit der relativen Schwierigkeit von Problemen und Problemklassen untereinander, der Polynomialzeit-Reduktion von Problemen aufeinander, der Beweisführung durch Diagonalisierung, der universellen Turingmaschine sowie der Entscheidbarkeit, Semientscheidbarkeit, Aufzählbarkeit und Abzählbarkeit von Mengen und der Berechenbarkeit von Problemen.

Dieses Thema in der Vorlesungsaufzeichnung zur Vorlesung „Grundlagen der Informatik II“: http://www.dasinfobuch.de/links/ Berechenbarkeits-Komplexitätstheorie.html

82

10 Berechenbarkeits- und Komplexitätstheorie

Aufgaben Aufgabe 89

BER-AA 

Komplexitäts- und Sprachklassen 



Betrachten Sie die folgende Abbildung:

a) Tragen Sie (unter der Annahme P  NP und Berücksichtigung der Inklusionsbeziehungen) folgende Problemklassen in die Abbildung ein: • P, • NP, • NP-vollständig, • NP-schwer, • Entscheidbare Probleme, • Semientscheidbare Probleme, • Menge aller Entscheidungsprobleme ℘(E  ). b) Wo würde ein Problem A liegen, welches zwar NP-schwer und entscheidbar, nicht jedoch NP-vollständig ist? Wo könnte ein Problem B ∈ NP liegen, welches nicht NPschwer ist? c) Welche Eigenschaften hat ein Problem X, das zur Klasse der NP-schweren Probleme gehört? d) Welche Eigenschaften hat ein Problem X, das zur Klasse der NP-vollständigen Probleme gehört?

Aufgaben

83

e) Was würde sich in der Abbildung verändern, wenn man von der Annahme P = NP ausginge? f) Welche prinzipiellen Vorgehensweisen sind denkbar, wenn man beweisen möchte, dass: • P = NP, • P  NP. → Lösung: S. 166

Aufgabe 90

BER-AJ 

Komplexitätsklassen 



Ordnen Sie die Klassen PS PACE, NP, P, EXPS PACE und EXPT I ME in einem Schaubild an, welches die untereinander geltenden Inklusionsbeziehungen darstellt. Von welcher dieser Klassen ist bekannt, dass sie echt unterschiedlich sind? → Lösung: S. 167

Aufgabe 91

BER-AB 

Komplexitätsklassen und Polynomialzeitreduktion 



Es gelte für die Probleme A, B, C, D: • A ist NP-vollständig, • B ∈ NP, • C ist NP-schwer, • D ∈ P. Wenn nichts anders vermerkt ist, gelte die Annahme P  NP. Geben Sie an, welche der folgenden Aussagen aus diesen Annahmen folgen.

84

10 Berechenbarkeits- und Komplexitätstheorie Wahr

Falsch

Eine Lösung für A kann in Polynomialzeit verifiziert werden.





B kann nicht in Polynomialzeit gelöst werden.





Falls P = NP, dann ist C in Polynomialzeit lösbar.





Es gilt A ≤ pol C.





Für ein Problem F gilt: F ∈ EXPT I ME ⇒ F ∈ EXPS PACE.





Jede abzählbare Menge ist auch entscheidbar.





D ist in Polynomialzeit reduzierbar auf C, aber nicht auf A.





→ Lösung: S. 167

Aufgabe 92

BER-AH 

Polynomialzeitreduktion 



Gegeben seien S AT (das NP-vollständige Erfüllbarkeitsproblem der Aussagenlogik) sowie die Probleme A, B, C, D und E mit den folgenden Eigenschaften: • A ∈ NP-vollständig, • B ∈ NP, • C ∈ NP-schwer, • D ∈ P, • E ist entscheidbar. Entscheiden Sie, welche der folgenden Aussagen aus den Angaben folgen und welche nicht (unter der Annahme P  NP). Wahr

Falsch

A ≤ pol S AT





A ≤ pol C





A ≤ pol D





B ≤ pol C





Aufgaben

85

E ≤ pol C ⇒ E ∈ NP





A ist nicht entscheidbar





B ist entscheidbar





C ist entscheidbar





D ist entscheidbar





A ist semientscheidbar





A ≤ pol D ⇒ P = NP





C ist in Polynomialzeit lösbar





A ∈ EXPT I ME





A  PS PACE





A  EXPT I ME \ PS PACE





→ Lösung: S. 168

Aufgabe 93

BER-AI 

Polynomialzeitreduktion 



Gegeben sei das Problem S AT und die drei Probleme A, B und C, für die Folgendes gilt: • A ist ein entscheidbares Problem, • B ist NP-schwer und nichtdeterministisch in Polynomialzeit lösbar, • C ist in der Menge P. Geben Sie an, ob die folgenden Aussagen aus den Annahmen folgen oder nicht. Nehmen Sie dabei an, dass P  NP gilt.

86

10 Berechenbarkeits- und Komplexitätstheorie Wahr

Falsch

Wenn A NP-schwer ist, so kann es in Polynomialzeit auf jedes NP-vollständige Problem reduziert werden.





Wenn A ∈ NP, dann ist A auch NP-vollständig.





B lässt sich auf C reduzieren.





B lässt sich auf S AT reduzieren.





Gilt entgegen der Annahme P = NP, dann ist C NP-vollständig.





Das Problem „ist n ∈ N, eine Primzahl?“ ist entscheidbar.





Jede entscheidbare Menge ist auch aufzählbar.





→ Lösung: S. 168

Aufgabe 94

BER-AC 

Polynomialzeitreduktion 





Eine Knotenabdeckung der Größe k eines Graphen G = (V, E) ist eine Teilmenge der Knoten C ⊆ V mit |C| = k, sodass jede Kante mit mindestens einem Knoten aus C verbunden ist. Das Problem VC (Vertex Cover) ist die Frage, ob es zu einem Graphen G = (V, E) eine Knotenabdeckung einer bestimmten Größe k gibt. Formal: VC = {(G, k) | ∃C ⊆ V : |C| = k ∧ ∀(v1 , v2 ) ∈ E : v1 ∈ C ∨ v2 ∈ C} Beispielsweise wäre im abgebildeten Graphen eine (in diesem Fall minimale) Knotenabdeckung C = {a, b, c, e} mit k = 4.

a

b e

c a) Zeigen Sie: VC ∈ NP.

d

f

Aufgaben

87

b) Zeigen Sie, dass VC NP-vollständig ist, indem Sie das Problem CLIQUE darauf reduzieren. → Lösung: S. 169

Aufgabe 95 Abzählbarkeit, Aufzählbarkeit, Entscheidbarkeit 

BER-AK 



a) Beschriften Sie das vorgezeichnete Diagramm mit den Bezeichnungen • abzählbare Mengen, • entscheidbare Mengen und • aufzählbare Mengen, sodass die zugehörigen Inklusionsbeziehungen widergespiegelt werden.

b) Was bedeutet es, wenn eine Turingmaschine eine Funktion „berechnet“? c) Nennen Sie die Definition von Turing-Aufzählbarkeit. d) Nennen Sie die Definition von Turing-Entscheidbarkeit. e) Warum nennt man Turing-aufzählbare Mengen auch semientscheidbare Mengen? f) Geben Sie die Idee einer universellen Turingmaschine wieder und erklären Sie deren grundlegende Funktionsweise. → Lösung: S. 170

88

10 Berechenbarkeits- und Komplexitätstheorie

Aufgabe 96

BER-AD

Diagonalisierung, Überabzählbarkeit 







Zeigen Sie durch Diagonalisierung folgende Aussagen:   a) Für ein Alphabet E ist ℘ E  (also die Menge aller Sprachen über den Wörtern aus E  ) überabzählbar. b) Die Menge R der reellen Zahlen ist überabzählbar. → Lösung: S. 172

Aufgabe 97 Berechenbarkeit 

BER-AG 



a) Wann ist eine Funktion Turing-berechenbar? b) Entscheiden Sie, ob folgende Aussagen wahr oder falsch sind. Wahr

Falsch

Jede Funktion ist berechenbar.





Die Menge aller berechenbaren Funktionen ist abzählbar.





Wenn eine Menge M abzählbar ist, dann ist sie auch aufzählbar.





Die Menge M = {n, n + 1, n + 2, . . . , n + n} für 0 < n < ∞ ist überabzählbar.





Das reelle Intervall [3, 6] ist abzählbar.





c) Geben Sie jeweils ein Beispiel an für Mengen, die • entscheidbar, • aufzählbar aber nicht entscheidbar, • abzählbar aber nicht aufzählbar sind.   d) Ist die Menge −17, −3, 14 , 2, 73, 84, 152 abzählbar, aufzählbar bzw. entscheidbar? e) Geben Sie einen Pseudocode-Algorithmus an, der die Menge der Quadratzahlen aufzählt. → Lösung: S. 173

Aufgaben

89

Aufgabe 98 Berechenbarkeit 

BER-AE 



Sei E ein Alphabet. Beweisen Sie, dass nicht jede Funktion f : E  → E  berechenbar ist. → Lösung: S. 175

Aufgabe 99 Berechenbarkeits- und Komplexitätstheorie 

BER-AL 



Entscheiden Sie, ob folgende Aussagen wahr oder falsch sind. Wahr

Falsch

Nicht jede Funktion ist berechenbar.





Wenn eine Menge M abzählbar ist, dann ist M auch aufzählbar.





Die Äquivalenz zweier beliebiger Programme A und B ist entscheidbar.





Das Travelling-Salesman-Problem liegt in PS PACE.





Q ≤ pol P ∧ Q ist in Polynomialzeit lösbar ⇒ P ist in Polynomialzeit lösbar.





Q ≤ pol P ∧ P ist in Polynomialzeit lösbar ⇒ Q ist in Polynomialzeit lösbar.





Q ≤ pol P ∧ Q ist nicht in Polynomialzeit lösbar ⇒ P ist nicht in Polynomialzeit lösbar.





Q ≤ pol P ∧ P ist nicht in Polynomialzeit lösbar ⇒ Q ist nicht in Polynomialzeit lösbar.





→ Lösung: S. 176

90

10 Berechenbarkeits- und Komplexitätstheorie

Aufgabe 100 Beweisverfahren 

VER-AB 





Ihnen fällt folgende Zahlenspielerei auf: 8 · 123456789 = 987654312 Wenn man die Ziffern von 1 bis 9 fortlaufend aufsteigend hintereinander schreibt und die entstehende Zahl (im Dezimalsystem) mit 8 multipliziert, drehen sich die Ziffern also um, mit Ausnahme der beiden hintersten. Sie denken noch etwas nach, und schließlich stellen Sie fest, dass für verschiedene Basen b  10 folgende Verallgemeinerung der obigen Formel gilt (unformal geschrieben in b-adischer Darstellung): (b − 2) · 123456789ABC · · · [b − 1] = [b − 1] · · · CBA987654312 Wieder dreht sich also eine aus den fortlaufenden Ziffern 1 bis [b − 1] bestehende Zahl bei Multiplikation mit (b − 2) komplett um, mit Ausnahme der beiden hintersten Ziffern. a) Welche Beweisverfahren gibt es, mit denen man prinzipiell die Vermutung beweisen könnte, dass obige Formel für alle Basen b > 2 gilt? b) Wählen Sie eines dieser Verfahren und beweisen Sie die Vermutung. → Lösung: S. 176

Lösungen → Aufgabe S. 4

Lösung zu Aufgabe 1 – END-AU Zu M ergibt sich folgender Moore-Automat M  M  = ({a, b, c}, {s0 , s1 , s2 , s3 }, {a, b, c}, δ , γ , s0 ) δ , γ :

  





Lösung zu Aufgabe 2 – END-AT

 

  









→ Aufgabe S. 4

a) Der Automat M teilt gegebene Binärzahlen durch zwei, wobei ein gegebenenfalls auftretender Rest nicht ausgegeben wird. Der Automat bewirkt also eine Shift-Right-Operation. So wird beispielsweise aus der Eingabe der Binärzahl 10110011 die Ausgabe 01011001. ⎧ ⎪ ⎪ ⎨0v, w = vu (v ∈ E  , u ∈ E) f (w) = ⎪ ⎪ ⎩λ, w = λ Lösung zu Aufgabe 2 – END-AT

→ Aufgabe S. 4

b) Bei Mealy-Automaten wird die Ausgabe mit dem Zustandsübergang assoziiert, wohingegen bei Moore-Automaten die Ausgabe mit einem Zustand assoziiert wird.

92

Lösungen → Aufgabe S. 4

Lösung zu Aufgabe 2 – END-AT c) Es ergibt sich folgender Moore-Automat M  M  = ({0, 1}, {s0 , s1 , s2 , s3 , s4 }, {−, 0, 1}, δ , γ , s0 ) δ , γ :

 

   



   



  







  

   

Anmerkung: Die Ausgabe − im Startzustand wird für das Ergebnis der Teilung der Binärzahl ignoriert. → Aufgabe S. 4

Lösung zu Aufgabe 2 – END-AT

d) Mealy-Automaten können mit einem Zustand für jedes Eingabesymbol eine andere Ausgabe erzeugen. Moore-Automaten brauchen dagegen für unterschiedliche Ausgaben auch unterschiedliche Zustände. Im schlechtesten Fall bräuchte man S × E als Zustandsmenge im Moore-Automaten. → Aufgabe S. 5

Lösung zu Aufgabe 3 – END-AA

Folgende Wahrheitstabelle zeigt die bitserielle Subtraktion zweier Zahlen. Dabei ist a das entsprechende Bit des Minuenden, b das entsprechende Bit des Subtrahenden und c der jeweilige Übertrag. Als Ergebnis erhält man das neue Ergebnis-Bit d sowie den neuen Übertrag c . a 0 0 0 0 1 1 1 1

b 0 0 1 1 0 0 1 1

c 0 1 0 1 0 1 0 1

d 0 1 1 0 1 0 0 1

c 0 1 1 1 0 0 0 1

Lösungen

93

Somit ergibt sich folgender Mealy-Automat M: M = ({00, 01, 10, 11}, {s0 , s1 }, {0, 1}, δ, γ, s0 ) δ, γ:

   





Hierbei kommt den Zuständen folgende Bedeutung zu: s0 : Übertrag c bzw. c ist 0 s1 : Übertrag c bzw. c ist 1

→ Aufgabe S. 5

Lösung zu Aufgabe 4 – END-AR

Die Zahlen 0 bis 9 werden bei der BCD-Kodierung folgendermaßen dargestellt: 0 0 0 0 0 0 0 0 1 1

0 0 0 0 1 1 1 1 0 0

0 0 1 1 0 0 1 1 0 0

0 1 0 1 0 1 0 1 0 1

0 1 2 3 4 5 6 7 8 9

Somit ergibt sich folgender Mealy-Automat M, wobei eine Ausgabe von − ignoriert wird und somit erst nach der Eingabe einer BCD-Ziffer, also nach 4 Bits, eine interpretierbare Ausgabe erfolgt.

94

Lösungen M({0, 1}, {s0 , s1 , s2 s3 , s4 s5 , s6 , s7 s8 , s9 , s10 }, {−, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, δ, γ, s0 )

δ, γ:  



 























  

   









 

Lösung zu Aufgabe 5 – END-AS Eingabealphabet E = {M1, M2, MU, 10, 25, 50, MR} mit der Bedeutung: M1 = 1 Euro Münze M2 = 2 Euro Münze MU = Ungültige Münze 10 = Taste zur Ausgabe von 10 Golfbällen 25 = Taste zur Ausgabe von 25 Golfbällen 50 = Taste zur Ausgabe von 50 Golfbällen MR = Rückgabetaste Zustandsmenge S = {s0 , s1 , s2 , s3 } mit der Bedeutung: s0 s1 s2 s3

= Kein Geld eingeworfen = Einzahlungen in Höhe von 1 Euro = Einzahlungen in Höhe von 2 Euro = Einzahlungen in Höhe von 3 Euro

→ Aufgabe S. 6

Lösungen

95

Ausgabealphabet A = {RU, R1, R2, R3, A10, A25, A50, −} mit der Bedeutung: RU = Rückgabe von ungültiger Münze R1 = Rückgabe von Einzahlungen in Höhe von 1 Euro R2 = Rückgabe von Einzahlungen in Höhe von 2 Euro R3 = Rückgabe von Einzahlungen in Höhe von 3 Euro A10 = Ausgabe von 10 Golfbällen A25 = Ausgabe von 25 Golfbällen A50 = Ausgabe von 50 Golfbällen − = Keine Aktion Folglich ergibt sich folgender Mealy-Automat:

M = ({M1, M2, MU, 10, 25, 50, MR}, {s0 , s1 , s2 , s3 }, {RU, R1, R2, R3, A10, A25, A50, −}, δ, γ, s0 ) δ, γ:

  



 



 







    

   





  





 





 

 

   



    

→ Aufgabe S. 11

Lösung zu Aufgabe 6 – END-AE Der nichtdeterministische endliche Automat A lautet: A = ({0, 1}, {s0 , s1 , s2 }, δ, s0 , {s2 }) δ:

 









96

Lösungen → Aufgabe S. 11

Lösung zu Aufgabe 7 – END-AH a) Der deterministische endliche Automat A1 lautet A1 = ({0, 1}, {s0 , s1 }, δ, s0 , {s1 }) 



δ:



 



→ Aufgabe S. 11

Lösung zu Aufgabe 7 – END-AH b) Der deterministische endliche Automat A2 lautet A2 = ({0, 1}, {s0 , s1 , s2 , s3 }, δ, s0 , {s3 }) 

δ:  

Lösung zu Aufgabe 8 – END-AV



  

  





→ Aufgabe S. 12

a) Das Eingabealphabet E besteht aus den Zahlen 1 bis 6, die die möglichen Ergebnisse eines Wurfes darstellen. Der deterministische endliche Automat lässt sich demnach wie folgt darstellen:

Lösungen

97 A = ({1, 2, 3, 4, 5, 6}, {s0 , . . . , s8 }, δ, s0 , {s7 })

δ:

   

   

  

  







         

   



   

 



     



   

 

 

       



→ Aufgabe S. 12

Lösung zu Aufgabe 8 – END-AV

b) Beim Ausgangsautomaten A können immer zwei Zustände zusammengefasst werden, da diese, wie aus A ersichtlich, die gleichen Übergänge aufweisen. Auf eine Minimierung mithilfe des Algorithmus wird somit an dieser Stelle verzichtet (für Aufgaben zum Minimierungsalgorithmus, vgl. 3). Der minimierte Automat A ergibt sich folglich zu: A = ({1, 2, 3, 4, 5, 6}, {s0 , . . . , s5 }, δ , s0 , {s4 }) δ :  

 



  



  

 

 



98

Lösungen → Aufgabe S. 12

Lösung zu Aufgabe 8 – END-AV

c) Der allgemeine Automat ist von der Anzahl der Zustände her gesehen einfacher als der Automat, der nur auf zwei Würfe beschränkt ist. Der Automat A bzw. A muss im Gegenteil zu Aallg nämlich auch in der Nummer der Würfe unterscheiden. Bei Aallg ist es ausreichend, die möglichen Fehlmengen zur Quersumme (Rest) in den Zuständen zu kodieren. Aallg = ({1, 2, 3, 4, 5, 6}, {s0 , s1 , s2 }, δ, s0 , {s0 }) 

δ:

 

  

 

 





   

  

 

  

→ Aufgabe S. 12

Lösung zu Aufgabe 9 – END-AF a) Der deterministische endliche Automat A1 ergibt sich zu: A1 = ({a, b, c}, {s0 , s1 , s2 , s3 }, δ1 , s0 , {s3 }) 

δ1 :

 

  







 

 



Die Sprache L lautet: L(A1 ) = {w ∈ {a, b, c}+ | ∃v ∈ {a, b, c} : w = vabc}

→ Aufgabe S. 12

Lösung zu Aufgabe 9 – END-AF b) Umwandlung durch Potenzmengenkonstruktion: {s0 }=s ˆ 0 {s1 }=s ˆ 1 {s1 , s2 }=s ˆ 2 {s1 , s2 , s3 }=s ˆ 3 {s1 , s2 , s3 , s4 }=s ˆ 4 ∅=s ˆ 5

0 {s1 } {s1 } {s1 } {s1 } {s1 } ∅

1 ∅ {s1 , s2 } {s1 , s2 , s3 } {s1 , s2 , s3 , s4 } {s1 , s2 , s3 , s4 } ∅

Lösungen

99

Daraus ergibt sich folgender deterministischer endlicher Automat A2 : A2 = ({0, 1}, {s0 , s1 , s2 , s3 , s4 , s5 }, δ2 , s0 , {s4 }) δ2 :

 

 



  

 















Anmerkung: Der deterministische endliche Automaten hätte auch ohne Potenzmengenkonstruktion durch folgende informale Überlegung erstellen können: Zunächst wird ein Pfad vom Anfangszustand zum Endzustand über (0 → 1 → 1 → 1) hergestellt, der den Mittelteil mit beliebig vielen Nullen und Einsen weglässt. Die noch nicht definierten Übergänge können durch folgende Überlegungen ergänzt werden: • Da zu Beginn immer eine 0 stehen muss, muss A2 von s0 über 1 in eine Senke führen. • Da am Ende genau drei 0 kommen müssen, müssen alle übrigen Zuständen über 0 nach s1 wechseln. Der Regulärer Ausdruck kann direkt aus A2 abgelesen werden und lautet: α = 0(0 + 1) 111

→ Aufgabe S. 13

Lösung zu Aufgabe 10 – END-AG

a) Die rechtslineare Grammatik mit P ⊆ N × (T ∪ T N ∪ {λ}) ergibt sich zu: G = (N, T, P, S ) N = {A, B, C, S } T = {0, 1} P = {S → 0A, A → 1B, B → 0B | 1B | 0C, C → 1}

100

Lösungen Produktion des Testwortes: S ⇒ 0A ⇒ 01B ⇒ 010B ⇒ 0100B ⇒ 01001B ⇒ 010010B ⇒ 0100100B ⇒ 01001000C ⇒ 010010001 → Aufgabe S. 13

Lösung zu Aufgabe 10 – END-AG b) Anmerkung:

Beachten Sie die Parallelität in den Strukturen der Grammatik und des nichtdeterministischen Automaten. Durch Potenzmengenkonstruktion ergibt sich: 0 {A} ∅ {B, C} {B, C} {B, C} ∅

{S }=S ˆ {A}=A ˆ {B}=B ˆ {B, C}=E ˆ {B, D}=F ˆ ∅=G ˆ

1 ∅ {B} {B} {B, D} {B} ∅

A = ({0, 1}, {S , A, B, E, F, G}, δ , S , {F}) 

δ :

 

 









  



 







→ Aufgabe S. 13

Lösung zu Aufgabe 10 – END-AG c) α = 01(0 + 1) 01

→ Aufgabe S. 13

Lösung zu Aufgabe 11 – END-AC Der nichtdeterministische endliche Automat A ergibt sich zu: A = ({0, 1}, {s0 , s1 , s2 , s3 }, δ, s0 , {s3 }) δ:



 













Lösungen

101

Umwandlung durch Potenzmengenkonstruktion: 0 {s1 } ∅ {s2 } {s2 , s3 } ∅

{s0 }=s ˆ 0 {s1 }=s ˆ 1 {s2 }=s ˆ 2 {s2 , s3 }=s ˆ 4 ∅=s ˆ 5

1 ∅ {s2 } {s2 , s3 } {s2 , s3 } ∅

Der deterministische endliche Automat A ergibt sich zu: A = ({0, 1}, {s0 , s1 , s2 , s4 , s5 }, δ , s0 , {s4 }) δ :







 

















→ Aufgabe S. 14

Lösung zu Aufgabe 12 – END-AL a) Umwandlung durch Potenzmengenkonstruktion: a {s0 , s1 } {s0 , s1 } {s0 , s1 , s3 } {s0 , s1 }

{s0 }=s ˆ 0 {s0 , s1 }=s ˆ 1 {s0 , s1 , s2 }=s ˆ 2 {s0 , s1 , s3 }=s ˆ 3

b {s0 } {s0 , s1 , s2 } {s0 , s1 , s2 } {s0 , s1 , s2 }

Der deterministische endliche Automat A ergibt sich zu: A = ({a, b}, {s0 , s1 , s2 , s3 }, δ, s0 , {s3 }) δ:

 

 



 

  





102

Lösungen → Aufgabe S. 14

Lösung zu Aufgabe 12 – END-AL

b) Aus dem nichtdeterministischen endlichen Automaten ergibt sich folgender regulärer Ausdruck: α = (a + b) a(a + b) ba oder α = b a(a + b) ba → Aufgabe S. 14

Lösung zu Aufgabe 13 – END-AN a) Umwandlung durch Potenzmengenkonstruktion: {s0 }={s ˆ 0} {s0 , s1 }={s ˆ 1} {s2 }={s ˆ 2} ∅={s ˆ 3}

0 {s0 , s1 } {s0 , s1 } {s0 , s1 } ∅

1 ∅ {s2 } {s2 } ∅

Es ergibt sich folgender Automat: A = ({0, 1}, {s0 , s1 , s2 , s3 }, δ , a0 , {s2 }) δ :





 





 



 

Lösung zu Aufgabe 13 – END-AN

→ Aufgabe S. 14

b) Der entsprechende reguläre Ausdruck α lautet (dabei sei zusätzlich zu den Operatoren der regulären Ausdrücke noch der Operator „+“ zugelassen mit x+ =de f xx ): α = 0 01(1 + 00 01 + 01) (aus A abgelesen)  = 0+ 1(1 + 0+ 01 + 01) oder α = 0(0 + 1) 1 (aus A abgelesen)

Lösungen

103 → Aufgabe S. 15

Lösung zu Aufgabe 14 – END-AI Umwandlung durch Potenzmengenkonstruktion: 0 {s1 } {s2 } {s2 , s3 } ∅ {s2 , s3 } {s2 } {s1 , s2 } {s2 , s3 } {s1 } ∅

{s0 }=s ˆ 0 {s1 }=s ˆ 1 {s2 }=s ˆ 2 {s3 }=s ˆ 3 {s2 , s3 }=s ˆ 4 {s1 , s3 }=s ˆ 5 {s0 , s1 , s3 }=s ˆ 6 {s1 , s2 }=s ˆ 7 {s0 , s3 }=s ˆ 8 ∅=s ˆ 9

1 ∅ {s0 } {s3 } {s1 , s3 } {s1 , s3 } {s0 , s1 , s3 } {s0 , s1 , s3 } {s0 , s3 } {s1 , s3 } ∅

Es ergibt sich der folgende Automat: A = ({0, 1}, {s0 , s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 }, δ , s0 , {s2 , s4 , s7 }) δ :

     





 











 









 







→ Aufgabe S. 15

Lösung zu Aufgabe 15 – END-AM Umwandlung durch Potenzmengenkonstruktion:

{s0 }=s ˆ 0 {s1 , s3 }=s ˆ 1 {s1 , s2 }=s ˆ 2 {s3 , s4 }=s ˆ 3 {s4 }=s ˆ 4 ∅=s ˆ 5







0 {s0 } {s1 , s2 } {s1 , s2 } ∅ ∅ ∅

1 {s1 , s3 } {s3 , s4 } {s3 , s4 } {s4 } ∅ ∅

104

Lösungen

Der deterministische endliche Automat A lautet: A = ({0, 1}, {s0 , s1 , s2 , s3 , s4 , s5 }, δ , s0 , {s3 , s4 }) δ : 



 

























→ Aufgabe S. 16

Lösung zu Aufgabe 16 – END-AX a) Umwandlung durch Potenzmengenkonstruktion: a {s0 } {s1 , s2 } {s1 , s2 } {s1 , s2 , s4 } {s1 , s2 , s4 } {s1 , s2 }

{s0 }=s ˆ 0 {s1 }=s ˆ 1 {s1 , s2 }=s ˆ 2 {s1 , s3 }=s ˆ 3 {s1 , s3 , s4 }=s ˆ 4 {s1 , s2 , s4 }=s ˆ 5

b {s1 } {s1 , s3 } {s1 , s3 , s4 } {s1 , s3 } {s1 , s3 } {s1 , s3 , s4 }

Daraus ergibt sich folgender deterministischer endlicher Automat: A = ({a, b}, {s0 , s1 , s2 , s3 , s4 , s5 }, δ , s0 , {s4 , s5 }) 

δ :   

 





 

 





 

 

Lösungen

105 → Aufgabe S. 16

Lösung zu Aufgabe 16 – END-AX b) α = a b(a + b) (ab + ba)

→ Aufgabe S. 16

Lösung zu Aufgabe 17 – END-AW Umwandlung durch Potenzmengenkonstruktion: Zustandsmenge {s0 }=s ˆ 0 {s1 }=s ˆ 1 {s1 , s2 }=s ˆ 2 {s1 , s2 , s3 }=s ˆ 3 {s1 , s2 , s3 , s4 }=s ˆ 4 {s0 , s1 , s2 , s3 , s4 }=s ˆ 5 {s3 }=s ˆ 6 {s4 }=s ˆ 7 ∅=s ˆ 8

0 ∅ ∅ ∅ {s3 } {s3 } {s3 } {s3 } ∅ ∅

1 {s1 } {s1 , s2 } {s1 , s2 , s3 } {s1 , s2 , s3 , s4 } {s0 , s1 , s2 , s3 , s4 } {s0 , s1 , s2 , s3 , s4 } {s4 } {s0 } ∅

Somit ergibt sich folgender endlicher Automat: A = ({0, 1}, {s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 }, δ , s5 , {s9 , s10 , s12 }) δ : 







 

 



 

 









 

 



 





106

Lösungen → Aufgabe S. 17

Lösung zu Aufgabe 18 – END-AY Umwandlung durch Potenzmengenkonstruktion:

{s0 }=s ˆ 0 {s1 , s2 }=s ˆ 1 {s3 }=s ˆ 2 {s2 , s4 }=s ˆ 3 {s3 , s4 }=s ˆ 4 {s2 , s3 }=s ˆ 5 {s4 }=s ˆ 6 {s2 , s3 , s4 }=s ˆ 7 ∅=s ˆ 8

1 {s1 , s2 } {s3 } {s2 , s3 } {s3 , s4 } {s2 , s3 , s4 } {s2 , s3 } {s3 , s4 } {s2 , s3 , s4 } ∅

2 ∅ {s2 , s4 } {s3 } {s4 } {s3 } {s3 , s4 } ∅ {s3 , s4 } ∅

3 ∅ {s3 , s4 } {s3 } {s3 , s4 } {s3 , s4 } {s3 , s4 } {s4 } {s3 , s4 } ∅

Somit ergibt sich folgender endlicher Automat: A = ({1, 2, 3}, {s0 , . . . , s8 }, δ1 , s0 , {s3 , s4 , s6 , s7 }) δ1 :

   







  







 



 

 



 



 

  

Lösungen

107 → Aufgabe S. 17

Lösung zu Aufgabe 19 – END-AK a) Umwandlung durch Potenzmengenkonstruktion: {s0 }=s ˆ 0 {s1 , s2 }=s ˆ 3 {s2 }=s ˆ 2 {s1 }=s ˆ 1 ∅=s ˆ 4

0 {s1 , s2 } {s1 } ∅ {s1 } ∅

1 {s2 } {s1 , s2 } ∅ {s1 , s2 } ∅

Daraus ergibt sich folgender deterministischer endlicher Automat: A1 = ({0, 1}, {s0 , s1 , s2 , s3 , s4 }, δ1 , s0 , {s2 , s3 }) δ1 :



 







 



  



mit dem regulären Ausdruck: α1 = 0 + 1 + 0(0 + 1) 1 oder α1 = 1 + 0((0 + 1) 1) → Aufgabe S. 17

Lösung zu Aufgabe 19 – END-AK b) Umwandlung durch Potenzmengenkonstruktion: {s0 }=s ˆ 0 {s1 , s3 }=s ˆ 4 {s1 }=s ˆ 1 {s2 }=s ˆ 2 {s3 }=s ˆ 3 ∅=s ˆ 5

0 {s1 , s3 } {s3 } {s3 } {s1 , s3 } ∅ ∅

1 {s1 } {s2 } {s2 } ∅ {s2 } ∅

108

Lösungen Daraus ergibt sich folgender deterministischer endlicher Automat: A2 = ({0, 1}, {s0 , s1 , s2 , s3 , s4 , s5 }, δ2 , s0 , {s2 }) δ2 :

  



 

 



 

 

 





mit dem regulären Ausdruck: α2 = ((0 + 1)(01 + 1) + 01)(01 + 001) oder α2 = (0(01 + 1) + 1(01 + 1))(0(1 + 01)) → Aufgabe S. 18

Lösung zu Aufgabe 20 – END-AZ a) Umwandlung durch Potenzmengenkonstruktion: {s0 }=s ˆ 0 {s1 }=s ˆ 1 {s2 }=s ˆ 2 {s0 , s1 }=s ˆ 3 {s3 , s4 }=s ˆ 6 {s2 , s4 }=s ˆ 7 {s2 , s3 , s4 }=s ˆ 8 {s4 }=s ˆ 4 ∅=s ˆ 5

0 {s1 } {s0 , s1 } {s2 , s4 } {s0 , s1 } {s4 } {s2 , s4 } {s2 , s4 } ∅ ∅

1 {s2 } {s3 , s4 } {s2 } {s2 , s3 , s4 } ∅ {s2 } {s2 } ∅ ∅

Lösungen

109

Somit ergibt sich folgender deterministischer endlicher Automat: A = ({0, 1}, {s0 , s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 }, δ , s0 , {s1 , s3 , s4 , s6 , s7 , s8 }) 

δ : 













 

















 

 

 



→ Aufgabe S. 18

Lösung zu Aufgabe 20 – END-AZ b) α = (000 + ∅ )1(0 + 1) 0 + 00 (1 + 10 + ∅ )

→ Aufgabe S. 22

Lösung zu Aufgabe 21 – MIN-AA Zustandsübergangstabelle: δ s0 s1 s2 s3 s4

0 s1 s4 s4 s4 s0

1 s2 s2 s2 s2 s3

Minimierungstabelle (×k in einer Zelle bedeutet, dass die entsprechenden Zustände nicht käquivalent sind, aber, falls k > 0, (k − 1)-äquivalent): s1 s2 s3 s4

×1 ×1 ×1 ×0 s0

− − ×0 s1

− ×0 s2

×0 s3

⇒ s1 , s2 , s3 sind äquivalent (s1 ∼ s2 ∼ s3 ) und werden im neuen Automaten A zu s1 zusammengefasst.

110

Lösungen   A = {0, 1}, {s0 , s1 , s4 }, δ , s0 , {s4 }

δ :

  



 





→ Aufgabe S. 22

Lösung zu Aufgabe 22 – MIN-AB Zustandsübergangstabelle: δ s0 s1 s2 s3 s4 s5

0 s1 s2 s4 s5 s4 s5

1 s2 s3 s3 s5 s5 s5

Minimierungstabelle: s1 s2 s3 s4 s5

×2 ×1 ×1 ×0 ×0 s0

×1 ×1 ×0 ×0 s1

×1 ×0 ×0 s2

×0 ×0 s3

− s4

• Mengen 0-äquivalenter Zustände: {s0 , s1 , s2 , s3 }; {s4 , s5 } • Mengen 1-äquivalenter Zustände: {s0 , s1 }; {s2 }; {s3 }; {s4 , s5 } • Mengen 2-äquivalenter Zustände: {s0 }; {s1 }; {s2 }; {s3 }; {s4 , s5 } • Mengen 3- und mehr-äquivalenter Zustände: {s0 }; {s1 }; {s2 }; {s3 }; {s4 , s5 } ⇒ Mengen äquivalenter Zustände: {s0 }; {s1 }; {s2 }; {s3 }; {s4 , s5 } Die Zustände s4 und s5 lassen sich zu einem neuen Endzustand zusammenfassen, da sie für alle k zueinander k-äquivalent sind.

Lösungen

111 → Aufgabe S. 23

Lösung zu Aufgabe 23 – MIN-AE Zustandsüberführungstabelle: δ s0 s1 s2 s3 s4 s5 s6 s7

0 s3 s0 s2 s1 s5 s6 s1 s3

1 s7 s6 s4 s6 s1 s0 s5 s5

Minimierungstabelle: s1 s2 s3 s4 s5 s6 s7

− ×0 − ×1 ×0 ×1 ×1 s0

×0 − ×1 ×0 ×1 ×1 s1

×0 ×0 ×1 ×0 ×0 s2

×1 ×0 ×1 ×1 s3

×0 ×1 ×1 s4

×0 ×0 s5

− s6

Es gilt s0 ∼ s1 ∼ s3 und s6 ∼ s7 . Mit s0 ={s0 , s1 , s3 }, s6 ={s6 , s7 } ergibt sich: A = (E, S  , δ , s0 , F  ) = ({0, 1}, {s0 , s2 , s4 , s5 , s6 }, δ , s2 , {s2 , s5 }) δ :

  





 

 



 

  

112

Lösungen → Aufgabe S. 23

Lösung zu Aufgabe 24 – MIN-AD Zustandsübergangstabelle: δ s0 s1 s2 s3 s4 s5 s6

0 s6 s5 s6 s1 s4 s4 s4

1 s3 s0 s0 s5 s0 s1 s2

− ×2 ×0 ×1 ×1 s1

×2 ×0 ×1 ×1 s2

×0 ×1 ×1 s3

Minimierungstabelle: s1 s2 s3 s4 s5 s6

×3 ×3 ×2 ×0 ×1 ×1 s0

×0 ×0 s4

− s5

Es gilt s1 ∼ s2 und s5 ∼ s6 . Mit s1 ={s1 , s2 }, s5 ={s5 , s6 } im neuen Automaten A ergibt sich: A = (E, S  , δ , s0 , F  ) = ({0, 1}, {s0 , s1 , s3 , s4 , s5 }, δ , s0 , {s4 }) δ :



 

 









 



  

Lösungen

113 → Aufgabe S. 24

Lösung zu Aufgabe 25 – MIN-AF Zustandsüberführungstabelle: δ s0 s1 s2 s3 s4 s5 s6 s7

0 s1 s2 s5 s2 s3 s4 s5 s3

1 s2 s4 s5 s7 s6 s5 s5 s6

Minimierungstabelle: ×2 ×1 ×2 − ×0 ×1 − s0

s1 s2 s3 s4 s5 s6 s7

×1 − ×2 ×0 ×1 ×2 s1

×1 ×1 ×0 − ×1 s2

×2 ×0 ×1 ×2 s3

×0 ×1 − s4

×0 ×0 s5

×1 s6

Es gilt s0 ∼ s4 ∼ s7 , s1 ∼ s3 und s2 ∼ s6 . Mit s0 ={s0 , s4 , s7 }, s1 ={s1 , s3 }, s2 ={s2 , s6 } ergibt sich: A = (E, S  , δ , s0 , F  ) = ({0, 1}, {s0 , s1 , s2 , s5 }, δ , s0 , {s5 }) δ :

  





 

 

 

114

Lösungen → Aufgabe S. 24

Lösung zu Aufgabe 26 – MIN-AG

a) Zustand s6 wird nie erreicht und braucht deshalb nicht betrachtet zu werden. Wir betrachten im Folgenden nur den vereinfachten Automaten. Zustandsübergangstabelle: δ s0 s1 s2 s3 s4 s5

0 s1 s2 s3 s4 s1 s2

1 s0 s1 s1 s5 s0 s5

Minimierungstabelle: ×0 ×0 ×0 ×0 ×0 s0

s1 s2 s3 s4 s5

×3 ×2 ×1 − s1

×2 ×1 ×3 s2

×1 ×2 s3

×1 s4

Es gilt s1 ∼ s5 . ={s1 , s5 }: Der minimale Automat ist mit s1 A = ({0, 1}, {s0 , s1 , s2 , s3 , s4 }, δ , s0 , {s1 , s2 , s3 , s4 }) δ :

















 



 

 

Lösung zu Aufgabe 26 – MIN-AG

→ Aufgabe S. 24

b) Falls die Knoten s1 , s2 , s3 , s4 oder s5 Startknoten wären, würde sich zwar der Automat verändern, nicht aber die Anzahl an Zuständen des minimalen Automaten (da man von jedem Knoten aus zu s0 kommt). Allein Knoten s6 bildet die Ausnahme: wäre er Startknoten, so müsste er bei Anwendung des Algorithmus berücksichtigt werden. Nach Durchführen des Algorithmus ergibt sich aber, dass s1 ∼ s5 ∼ s6 gilt (siehe Tabelle unten). Also ändert sich die Anzahl an Zuständen auch hier nicht.

Lösungen

115

Zustandsübergangstabelle: δ s0 s1 s2 s3 s4 s5 s6

0 s1 s2 s3 s4 s1 s2 s2

1 s0 s1 s1 s5 s0 s5 s1

×3 ×2 ×1 − − s1

×2 ×1 ×3 ×3 s2

×1 ×2 ×2 s3

Minimierungstabelle: s1 s2 s3 s4 s5 s6

×0 ×0 ×0 ×0 ×0 ×0 s0

×1 ×1 s4

− s5 → Aufgabe S. 24

Lösung zu Aufgabe 26 – MIN-AG

c) Der minimierte Automat hätte nur 2 Zustände, da man vom Endzustand s1 nur in andere Endzustände kommt. Damit ergibt sich der minimale Automat zu: A = (E, S  , δ , s0 , F  ) mit E = {0, 1}, S  = {s0 , s1 }, F  = {s1 } δ :



 





→ Aufgabe S. 25

Lösung zu Aufgabe 27 – MIN-AC

a) Die Zustände s0 , s1 und s2 werden nie erreicht und müssen vor der Minimierung entfernt werden. Der dadurch entstandene Automat wird „vereinfachter Automat“ genannt und er wird im Folgenden ausschließlich für die Minimierung betrachtet. Zustandsübergangstabelle: δ s3 s4 s5 s6 s7 s8 s9

0 s3 s6 s8 s9 s9 s7 s5

1 s4 s5 s6 s6 s7 s8 s9

116

Lösungen Minimierungstabelle: s4 s5 s6 s7 s8 s9

×2 ×1 ×1 ×1 ×0 ×0 s3

×1 ×1 ×1 ×0 ×0 s4

− − ×0 ×0 s5

− ×0 ×0 s6

×0 ×0 s7

− s8

⇒ s5 ∼ s6 ∼ s7 und s8 ∼ s9 Im minimierten Automaten A gilt: s5 ={s5 , s6 , s7 }, s8 ={s8 , s9 }

A = ({0, 1}, {s3 , s4 , s5 , s8 }, δ , s3 , {s8 }) δ :

 



 







 



Lösung zu Aufgabe 27 – MIN-AC

→ Aufgabe S. 25

b) α = 0 1(0 + 1)1 0(1 + 01 0) Lösung zu Aufgabe 27 – MIN-AC c)

→ Aufgabe S. 25

• Mengen 0-äquivalenter Zustände: {s8 , s9 }, {s3 , s4 , s5 , s6 , s7 } • Mengen 1-äquivalenter Zustände: {s8 , s9 }, {s3 , s4 }, {s5 , s6 , s7 } • Mengen 2-äquivalenter Zustände: {s8 , s9 }, {s3 }, {s4 }{s5 , s6 , s7 } • Mengen 3-äquivalenter Zustände: {s8 , s9 }, {s3 }, {s4 }{s5 , s6 , s7 } (Das entspricht auch den Mengen äquivalenter Zustände.)

Lösung zu Aufgabe 28 – END-BA a) Natürliche Sprachen: • z. B. Deutsch, Englisch, Französisch, . . . Formale Sprachen: • Programmiersprachen: z. B. Java • Spezifikationssprachen: z. B. UML • Anfragesprachen: z. B. SQL • Mark-up-Sprachen: z. B. HTML

→ Aufgabe S. 30

Lösungen

117 → Aufgabe S. 30

Lösung zu Aufgabe 28 – END-BA b)

• Syntax: Menge von Vorschriften/Regeln, die den formal korrekten Aufbau von Wörtern (Sätzen) angeben (beispielsweise Chomsky-Grammatiken). • Semantik: Definition der Bedeutung eines syntaktisch korrekten Wortes (Satzes). Für eine natürliche Sprache ist die Semantik meist komplex und schwer anzugeben. Für eine Programmiersprache ist eine klar definierte Semantik dagegen eine Grundvoraussetzung, damit sie sinnvoll genutzt werden kann. • Pragmatik: Subjektive Aspekte individueller Benutzer/Sprecher/Umstände, z. B. Umgebung, Zeit usw. Die Pragmatik wird vor allem in der Linguistik/Computerlinguistik erforscht und spielt in der reinen Informatik normalerweise keine Rolle. → Aufgabe S. 30

Lösung zu Aufgabe 28 – END-BA

c) Eine Chomsky-Grammatik definiert eine Sprache und wird beschrieben durch ein Tupel G = (N, T, P, S ) mit • N : Menge der Nonterminalsymbole (syntaktische Variablen) • T : Menge der Terminalsymbole (syntaktische Konstanten) • P ⊆ (N ∪ T )+ \T  × (N ∪ T ) : Menge der Produktionen • S ∈ N : Startsymbol N, T und P sind jeweils endlich und nicht leer. → Aufgabe S. 30

Lösung zu Aufgabe 29 – REC-AA

a) Deterministisch, da es von jedem Zustand aus mit jedem Eingabezeichen genau einen Übergang gibt und nichtdeterministisch, denn nichtdeterministische Automaten sind eine Obermenge von deterministischen. → Aufgabe S. 30

Lösung zu Aufgabe 29 – REC-AA

b) Sprache der nichtleeren Wörter, die eine gerade Anzahl an Nullen enthalten: L(A) = {w ∈ {0, 1} | |w| > 0 und |w|0 mod 2 = 0} → Aufgabe S. 30

Lösung zu Aufgabe 29 – REC-AA c) Die Grammatik G lautet: G = (N, T, P, S ) N = {S , A}, T = {0, 1}, P = {S → 0A | 1S | 1, A → 0S | 1A | 0}

118

Lösungen → Aufgabe S. 31

Lösung zu Aufgabe 30 – REC-AB Die Grammatik G lautet: G = (N, T, P, S ), N = {S , A, B, C}, T = {0, 1}, P = {S → 0S | 1A | 1 | 0, A → 0S | 1B | 1 | 0, B → 0S | 1C | 1 | 0, C → 0S | 0 | λ} Produktion des Testwortes:

S ⇒ 0S ⇒ 01A ⇒ 011B ⇒ 0111C ⇒ 01110S ⇒ 011100S ⇒ 0111001A ⇒ 01110011B ⇒ 011100110S ⇒ 0111001100S ⇒ 01110011000S ⇒ 011100110001A ⇒ 0111001100011B ⇒ 01110011000111C ⇒ 011100110001110 → Aufgabe S. 31

Lösung zu Aufgabe 31 – REC-AC a) Die Grammatik G lautet: G = (N, T, P, S ), N = {S , A, B, C}, T = {0, 1}, P = {S → 0 | 0S | 1A, A → 1B, B → 0C, C → 0S | 0}

→ Aufgabe S. 31

Lösung zu Aufgabe 31 – REC-AC

b) Zu jeder rechtslinearen Grammatik existiert auch ein deterministischer endlicher Automat und umgekehrt. Direkt aus der Grammatik lässt sich eine nichtdeterministische Version des Automaten ableiten (beachten Sie die analoge Konstruktion): Andet = ({0, 1}, {S 0 , S , A, B, C}, δndet , S 0 , {S }) δndet : 

 

 

  



 



Lösungen

119

Daraus kann man leicht den deterministischen Automaten berechnen, indem man die fehlenden Zustandsübergänge in den Senkenzustand s4 hinzufügt (die Zustände sind hier wieder mnemonisch mit si benannt). A = ({0, 1}, {s0 , s1 , s2 , s3 , s4 , se }, δ, s0 , {se }) 

δ:





 







 









 



→ Aufgabe S. 32

Lösung zu Aufgabe 32 – END-AP

a) Die Sprache L1 enthält alle Wörter w ∈ {0, 1} deren Anzahl an 0en gerade und deren Anzahl an 1en ungerade ist. Die Sprache L2 enthält alle Wörter w ∈ {0, 1} , die weder die Zeichenfolge 00 noch 11 enthalten. Die entsprechenden rechtslinearen Grammatiken lauten:

G1 = {N, T, P, S } N = {S , A, B, C} T = {0, 1} P = {S → 0B | 1A, A → 0C | 1S | λ, B → 0S | 1C, C → 0A | 1B}

G2 = {N, T, P, S } N = {S , A, B} T = {0, 1} P = {S → 0A | 1B | λ, A → 1B | λ, B → 0A | λ}

Alternative für G2 (nicht rechtslinear): P = {S → 1A | A, A → 01A | λ | 0} P = {S → A | B, A → 01A | 0 | λ} B → 10B | 1 | λ}

→ Aufgabe S. 32

Lösung zu Aufgabe 32 – END-AP b) Der erste Automat lautet wie folgt: A1 = ({0, 1}, {s0 , s1 , s2 , s3 }, δ1 , s0 , {s1 }) δ1 :

  



   



  

120

Lösungen Der zweite Automat lautet wie folgt: A2 = ({0, 1}, {s0 , s1 , s2 , s3 }, δ2 , s0 , {s0 , s1 , s2 }) 

δ2 :   





 







→ Aufgabe S. 32

Lösung zu Aufgabe 33 – REC-AK a) Der endliche Automat A lautet: A = ({0, 1}, {s0 , s1 , s2 }, δ, s0 , {s2 }) δ:

 

 



 





→ Aufgabe S. 32

Lösung zu Aufgabe 33 – REC-AK b) Die rechtslineare Grammatik G ergibt sich zu: G = ({A, B, C}, E, P, A) P = {A → 1B | 0A, B → 0C | 1A | 0, C → 0C | 1A | 0}

Die dritte Zeile kann auch weggelassen werden, wenn in der zweiten Zeile C in B unbenannt wird. Lösung zu Aufgabe 33 – REC-AK

→ Aufgabe S. 32

c) Aus der Sprachdefinition abgeleitet: α = 0 1(0 10 10 ) 00 Weitere, aus dem Automaten direkt abgelesene Alternativen (deutlich komplizierter): α = 0 1(10 1) 0(0 + 10 1(10 1) 0) oder α = (0 + 11) 10(0 + 1(0 + 11) 10)

Lösungen

121 → Aufgabe S. 33

Lösung zu Aufgabe 34 – END-AO a) Die rechtslineare Grammatik G ergibt sich zu: = = = =

G N T P

(N, T, P, S ) {S , A, B} {a, b} {S → aA | bB | λ, A → aA | a | λ, B → bB | b | λ} → Aufgabe S. 33

Lösung zu Aufgabe 34 – END-AO b) Der reguläre Ausdruck α lautet: α = a + b

→ Aufgabe S. 33

Lösung zu Aufgabe 34 – END-AO c) Der deterministische endliche Automat A lautet: A = ({a, b}, {s0 , s1 , s2 , s3 }, δ, s0 , {s0 , s1 , s2 }) 

δ:  



 

 

 



→ Aufgabe S. 33

Lösung zu Aufgabe 35 – REC-AE a) Regulärer Ausdruck: α1 = 0 (1000 ) 0 oder α1 = (0 (100) ) Endlicher Automat: A1 = ({0, 1}, {s0 , s1 , s2 , s3 }, δ1 , s0 , {s0 }) δ1 :



  

 



  



122

Lösungen → Aufgabe S. 33

Lösung zu Aufgabe 35 – REC-AE

b) Regulärer Ausdruck: α2 = (0 + 1)(0 + 1)(0 + 1)((0 + 1)(0 + 1)(0 + 1)) oder α2 = ((0 + 1)(0 + 1)(0 + 1))+ mit x+ =de f xx („x+ “ ist nicht Teil der Sprache der regulären Ausdrücke und muss definiert werden). Endlicher Automat: A2 = ({0, 1}, {s0 , s1 , s2 , s3 }, δ2 , s0 , {s3 }) δ2 :













 

→ Aufgabe S. 34

Lösung zu Aufgabe 36 – REC-AF

a) Bei dieser Sprache können sich am Anfang b und ab beliebig oft abwechseln. Danach muss zweimal das Zeichen a kommen. Dann können noch beliebig viele a’s und b’s kommen, hinter jedem a müssen aber noch zwei b’s kommen. Alle anderen Wörter müssen in einen Senkenzustand führen. Es ergibt sich folgender Automat: A = ({a, b}, {s1 , s2 , s3 , s4 , s5 , s6 }, δ, s1 , {s6 }) 

δ:





  



















 

→ Aufgabe S. 34

Lösung zu Aufgabe 36 – REC-AF

b) Der Anfangszustand muss nun auch ein Endzustand sein. Zu beachten ist, dass der Zustand s0 neu hinzugekommen ist, damit z. B. ab nicht auch akzeptiert wird. A = ({a, b}, {s0 , s1 , s2 , s3 , s4 , s5 , s6 }, δ , s1 , {s1 , s6 }) δ :





 

 

  

 





 



  



Lösungen Lösung zu Aufgabe 37 – REC-AH

123 → Aufgabe S. 34

a) α1 = 1 (01) Lösung zu Aufgabe 37 – REC-AH

→ Aufgabe S. 34

b) α2 = (1 (011 ) ) Lösung zu Aufgabe 38 – REC-AJ

→ Aufgabe S. 35

a) αa = (∅ + 0 + 1)(∅ + 0 + 1)(∅ + 0 + 1)(∅ + 0 + 1)(∅ + 0 + 1)(∅ + 0 + 1) Lösung zu Aufgabe 38 – REC-AJ

→ Aufgabe S. 35

b) αb = (1 (01) ) (∅ + 0) oder αb = (1 + 01) (∅ + 0) Lösung zu Aufgabe 38 – REC-AJ

→ Aufgabe S. 35

c) αc = (1 + 01 + 001) (∅ + 0 + 00) Lösung zu Aufgabe 38 – REC-AJ

→ Aufgabe S. 35

d) αd = (01) + (10) Lösung zu Aufgabe 39 – REC-AI

→ Aufgabe S. 35

a) Die Zustände s1 und s2 sind symmetrisch zueinander aufgebaut. Daher ergeben sich bspw. folgende reguläre Ausdrücke: α1 = (2 + 12 (02 ) 1) oder α1 = (2 (1(0 + 2) 1) ) Bei genauerer Betrachtung des Automaten erkennt man, dass s1 und s2 sogar äquivalent sind und sich dieser also vereinfachen lässt. Daraus ergibt sich der folgende weiter vereinfachte reguläre Ausdruck: α1 = (2 + 1(0 + 2) 1) Lösung zu Aufgabe 39 – REC-AI

→ Aufgabe S. 35

b) Sobald irgendein Zeichen eingelesen wird, kann kein Endzustand mehr erreicht werden. Für das leere Wort verbleibt man aber im Endzustand. Es ergibt sich folgender regulärer Ausdruck, der die Sprache bezeichnet, die nur das leere Wort enthält: α2 = ∅

124

Lösungen → Aufgabe S. 35

Lösung zu Aufgabe 39 – REC-AI c) Der reguläre Ausdruck α3 ergibt sich zu: α3 =(0 + 2) 11 (0 + 2)((1 + 2)1 (0 + 2) + 0) oder: α3 =(0 + 2) 11 (0 + 2)(0 ((1 + 2)1 (0 + 2)) )

→ Aufgabe S. 36

Lösung zu Aufgabe 40 – REC-AG Alphabet E = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /}.

α = 0(1 + 2 + . . . + 8 + 9)(0 + 1 + 2 + . . . + 8 + 9) (0 + 1 + 2 + . . . + 8 + 9)(0 + 1 + 2 + . . . + 8 + 9 + ∅ )/ (1 + 2 + . . . + 8 + 9)(0 + 1 + 2 + . . . + 8 + 9)(0 + 1 + 2 + . . . + 8 + 9) (0 + 1 + 2 + . . . + 8 + 9)(0 + 1 + 2 + . . . + 8 + 9 + ∅ ) (0 + 1 + 2 + . . . + 8 + 9 + ∅ )(0 + 1 + 2 + . . . + 8 + 9 + ∅ ) (0 + 1 + 2 + . . . + 8 + 9 + ∅ ) oder α = 0NN0 N0 (N0 + ∅ )/NN0 N0 N0 (∅ + N0 + N0 N0 + N0 N0 N0 + N0 N0 N0 N0 ) mit N0 =de f (0 + 1 + . . . + 9), N =de f (1 + 2 + . . . + 9). → Aufgabe S. 40

Lösung zu Aufgabe 41 – KEL-AB

a) Der Kellerautomat A lautet: A = (E, S , K, δ, s0 , k0 , F) mit E = {a, b}, S = {s0 , s1 , se }, K = {k0 , a}, F = {se } δ : (s0 , a, k0 ) (s0 , λ, k0 ) (s0 , a, a) (s1 , b, a) (se , a, k0 )

→ → → → →

(s0 , ak0 ) (se , k0 ) (nichtdeterministisch) (s1 , a) (se , λ) (s0 , ak0 )

Anmerkung: Es könnte hier auch ein Kellerautomaten angeben werden, der ohne Zugriffe auf den Keller auskommt, also ein endlicher Automat, vgl. Teilaufgabe b).

Lösungen

125 → Aufgabe S. 40

Lösung zu Aufgabe 41 – KEL-AB b) Der deterministische endliche Automat A lautet:

A = (E, S , δ, s0 , F) mit E = {a, b}, S = {s0 , s1 , s2 , s3 }, F = {s0 } δ:



 







 







→ Aufgabe S. 40

Lösung zu Aufgabe 41 – KEL-AB c) Typ 0, Typ 1, Typ 2 und Typ 3

→ Aufgabe S. 40

Lösung zu Aufgabe 42 – KEL-AE a) Der deterministische Kellerautomat A lautet: A = ({a, b}, {s0 , s1 , s2 , se }, {k0 , a, b}, δ, s0 , k0 , {s0 , se }) δ:

Lösung zu Aufgabe 42 – KEL-AE

(s0 , a, k0 ) (s1 , b, a) (s1 , a, b) (s1 , b, b) (s2 , a, a) (s2 , b, b) (s2 , λ, k0 )

→ → → → → → →

(s1 , ak0 ) (s1 , ba) (s1 , ab) (s2 , λ) (s2 , λ) (s2 , λ) (se , k0 )

→ Aufgabe S. 40

b) Erkennung des Testwortes: (s0 , abba, k0 )  (s1 , bba, ak0 )  (s1 , ba, bak0 )  (s2 , a, ak0 )  (s2 , λ, k0 )  (se , k0 )

126

Lösungen → Aufgabe S. 41

Lösung zu Aufgabe 43 – KEL-AC

A = (E, S , K, δ, s0 , k0 , F) mit E = {a, b, $}, S = {s0 , s1 , s2 }, K = {k0 , a, b}, F = {s2 } δ : (s0 , a, k0 ) (s0 , b, k0 ) (s0 , a, a) (s0 , a, b) (s0 , b, a) (s0 , b, b) (s0 , $, k0 ) (s0 , $, a) (s0 , $, b) (s1 , a, a) (s1 , b, b) (s1 , λ, k0 )

Lösung zu Aufgabe 44 – KEL-AD

→ → → → → → → → → → → →

(s0 , ak0 ) (s0 , bk0 ) (s0 , aa) (s0 , ab) (s0 , ba) (s0 , bb) (s1 , k0 ) (s1 , a) (s1 , b) (s1 , λ) (s1 , λ) (s2 , k0 )

→ Aufgabe S. 41

Die Sprache L enthält alle Wörter w, die am Anfang so viele a’s enthalten wie am Ende des Wortes b’s und a’s stehen. Dazwischen steht eine gerade Anzahl an c’s. Zu beachten ist, dass m, n, p, r ∈ N0 gilt. Dadurch ergibt sich folgender Kellerautomat:

Lösungen

127

A = ({a, b, c}, {s0 , s1 , s2 , s3 , s4 , se }, {k0 , a, c}, δ, s0 , k0 , {se }) δ:

(s0 , λ, k0 ) (s0 , a, k0 ) (s0 , c, k0 ) (s1 , a, a) (s1 , b, a) (s1 , a, a) (s1 , c, a) (s2 , c, c) (s2 , c, a) (s2 , c, k0 ) (s2 , λ, k0 ) (s2 , b, a) (s2 , a, a) (s3 , b, a) (s3 , λ, k0 ) (s3 , a, a) (s4 , a, a) (s4 , λ, k0 )

→ → → → → → → → → → → → → → → → → →

(se , k0 ) (s1 , ak0 ) (s2 , ck0 ) (s1 , aa) (s3 , λ) (s4 , λ) (s2 , ca) (s2 , λ) (s2 , ca) (s2 , ck0 ) (se , k0 ) (s3 , λ) (s4 , λ) (s3 , λ) (se , k0 ) (s4 , λ) (s4 , λ) (se , k0 )

Anmerkung: Durch die Übergänge (s0 , λ, k0 ) gekoppelt mit (s0 , a, k0 ) bzw. (s0 , c, k0 ), den doppelten Übergang von (s1 , a, a) und die Übergänge (s2 , λ, k0 ) gekoppelt mit (s2 , c, k0 ) wird der Automat nichtdeterministisch. Lösung zu Aufgabe 45 – KEL-AA

→ Aufgabe S. 41

a) Wörter, die zu dieser Sprache gehören, beinhalten doppelt so viele Nullen wie Einsen. Folgende Idee liegt dem Kellerautomaten A zugrunde: • Zustand s0 : Anzahl Nullen zu Anzahl Einsen entspricht dem Verhältnis 2 : 1 • Zustand s1 : Anzahl Nullen zu Anzahl Einsen entspricht einem Verhältnis größer als 2 : 1 (zu viel Nullen vorhanden) • Zustand s2 : Übergangszustand von s1 zu s3 bzw. Auffangzustand zum Löschen von zwei Nullen bei einer Eins • Zustand s3 : Anzahl Nullen zu Anzahl Einsen entspricht einem Verhältnis kleiner als 2 : 1 (zu wenig Nullen vorhanden)

128

Lösungen A = (E, S , K, δ, s0 , k0 , F) mit E = {0, 1}, S = {s0 , s1 , s2 , s3 }, K = {0, 1, b, k0 }, F = {s0 } δ : (s0 , 0, k0 ) (s0 , 1, k0 ) (s1 , 0, 0) (s1 , 1, 0) (s2 , λ, 0) (s1 , λ, k0 ) (s2 , λ, k0 ) (s3 , 1, 1) (s3 , 0, 1) (s3 , 0, b) (s3 , 1, b) (s3 , λ, k0 )

→ → → → → → → → → → → →

(s1 , 0k0 ) (s3 , 1k0 ) (s1 , 00) (s2 , λ) (s1 , λ) (s0 , k0 ) (s3 , b) (s3 , 11) (s3 , b) (s3 , λ) (s3 , b1) (s0 , k0 )

Anmerkung: Beachten Sie, dass der Kellerautomat trotz mehrerer λ-Übergänge deterministisch ist, da es nie die Möglichkeit gibt, in einem bestimmten Zustand entweder λ oder ein anderes Zeichen zu lesen, wenn bei beiden Übergängen das obere Kellerzeichen gleich ist. → Aufgabe S. 41

Lösung zu Aufgabe 45 – KEL-AA b) Erkennung des Testwortes:

(s0 , 100011100000, k0 )  (s3 , 00011100000, 1k0 )  (s3 , 0011100000, bk0 )  (s3 , 011100000, k0 )  (s0 , 011100000, k0 )  (s1 , 11100000, 0k0 )  (s2 , 1100000, k0 )  (s3 , 1100000, bk0 )  (s3 , 100000, b1k0 )  (s3 , 00000, b11k0 )  (s3 , 0000, 11k0 )  (s3 , 000, b1k0 )  (s3 , 00, 1k0 )  (s3 , 0, bk0 )  (s3 , λ, k0 )  (s0 , k0 ) → Aufgabe S. 42

Lösung zu Aufgabe 46 – KEL-AF 

a) Die Sprache L, die G beschreibt, lautet: L(G) = {w ∈ {a, b} | w = b aab, n ∈ N0 } Daraus ergibt sich folgender Kellerautomat: A = ({a, b}, {s0 , s1 , s2 , s3 , se }, {k0 }, δ, s0 , k0 , {se }) δ : (s0 , b, k0 ) (s0 , a, k0 ) (s1 , b, k0 ) (s2 , a, k0 ) (s3 , b, k0 )

→ → → → →

(s1 , k0 ) (s2 , k0 ) (s0 , k0 ) (s3 , k0 ) (se , k0 )

2n

Lösungen

129

Anmerkungen: • Beachten Sie, dass dieser Kellerautomat den Keller nicht nutzt. Es existiert folglich ein äquivalenter endlicher Automat. Dies folgt aus der Tatsache, dass die Sprache L(G) regulär ist (obwohl G zwei kontextfreie Regeln enthält). Bei Nutzung des Kellers bräuchte man aber u. U. weniger Zustände. • Der angegebene Kellerautomat ist in diesem Fall deterministisch und somit auch nichtdeterministisch, da die deterministischen Kellerautomaten eine Teilmenge der nichtdeterministischen darstellen. Lösung zu Aufgabe 46 – KEL-AF

→ Aufgabe S. 42

b) Erkennung des Testwortes: (s0 , bbbbaab, k0 )  (s1 , bbbaab, k0 )  (s0 , bbaab, k0 )  (s1 , baab, k0 )  (s0 , aab, k0 )  (s2 , ab, k0 )  (s3 , b, k0 )  (se , k0 ) Lösung zu Aufgabe 47 – SPR-AE

Wenn die Sprachen A und B regulär sind, dann ist jede Sprache C mit A ⊆ C ⊆ B auch regulär.

→ Aufgabe S. 47

Wahr

Falsch





Erklärung: Sei C = {0n 1n | n ∈ N} eine nicht-reguläre Sprache. Es gilt ∅ ⊆ C ⊆ E  , und damit ist die Aussage falsch. Sei A regulär und B nicht-regulär. Dann ist A ∩ B stets regulär.





Erklärung: Wenn B ⊆ E  nicht regulär ist, dann ist E  ∩B = B immer noch nicht regulär. Der Durchschnitt von zwei nicht-regulären Sprachen A und B ist stets nicht-regulär.





Erklärung: Seien z. B. A = {0n 1n | n ∈ N} und B = {1n 0n | n ∈ N} zwei nicht-reguläre Sprachen. Dann ist A ∩ B = ∅ trotzdem regulär. Die Menge der kontextfreien Sprachen L2 ist gegen Komplementbildung abgeschlossen (d. h. L ∈ L2 ⇔ L ∈ L2 ).





Erklärung: Die Sprache L = {w ∈ {0, 1} | ∀u ∈ {0, 1} : w  uu} ist kontextfrei, ihr Komplement L = {w ∈ {0, 1} | ∃u ∈ {0, 1} : w = uu} ist jedoch nicht kontextfrei.

130

Lösungen → Aufgabe S. 47

Lösung zu Aufgabe 48 – KON-AA Die Grammatik G lautet: G = (N, T, P, S ) mit N = {S } T = {0, 1} P = {S → 0S 1 | S 1 | 1}

→ Aufgabe S. 48

Lösung zu Aufgabe 49 – KON-AH a) Die Grammatik G lautet: G = ({S , A, B, C}, {a, b}, P, S ), P = {S → aAa | bAb, A → aBa | bBb, B → aCa | bCb, C → aa | bb}

→ Aufgabe S. 48

Lösung zu Aufgabe 49 – KON-AH b) S

a

A

a

b

B

b

b

C

b

a

a

Lösungen

131 → Aufgabe S. 48

Lösung zu Aufgabe 49 – KON-AH

c) Da die Sprache nur endlich viele Wörter enthält, gibt es eine rechtslineare Grammatik Grl , ebenso wie einen endlichen Automaten A und einen regulären Ausdruck α mit L(Grl ) = L(A) = L(α) = L. → Aufgabe S. 48

Lösung zu Aufgabe 50 – KON-AI a) Die kontextfreie Grammatik G1 lautet: G1 = ({S }, {a, b}, P1 , S ), P1 = {S → aaS bb | a}

→ Aufgabe S. 48

Lösung zu Aufgabe 50 – KON-AI b) Die kontextfreie Grammatik G2 lautet: G2 = ({S }, {a, b, c}, P2 , S ), P2 = {S → abS cc | abcc}

→ Aufgabe S. 49

Lösung zu Aufgabe 51 – KON-AL a) Es ergibt sich folgende Grammatik: G = (N, T, P, S ) mit N = {S , A, B}, T = {a, b, c}, P = {S → AB, A → aAb | λ, B → cB | λ} Lösung zu Aufgabe 51 – KON-AL

→ Aufgabe S. 49

b) S ⇒ AB ⇒ aAbB ⇒ aaAbbB ⇒ aaaAbbbB ⇒ aaabbbB ⇒ aaabbbcB ⇒ aaabbbc

132 Lösung zu Aufgabe 52 – KON-AJ

Jede kontextfreie Sprache ist eine Typ-0-Sprache.

Lösungen → Aufgabe S. 49

Wahr

Falsch





Erklärung: Jede kontextfreie Sprache ist eine Typ-2-Sprache; Typ-2-Sprachen bilden eine Teilmenge der Typ-0-Sprachen. Kontextfreie Grammatiken sind monoton.





Erklärung: Da Regeln der Form A → λ erlaubt sind, sind kontextfreie Grammatiken nicht monoton. Die Sprache L = {an (bc)n | n ∈ N0 } kann von einer kontextfreien Grammatik erzeugt werden.









Erklärung: Z. B.: G = ({S }, {a, b, c}, {S → aS bc | λ}, S ). Zu jeder kontextfreien Grammatik G gibt es eine kontextfreie Grammatik G in Greibach-Normalform mit L(G ) = L(G)\{λ}.

Erklärung: Bis auf Sprachen, die das leere Wort enthalten, können alle Typ-2-Sprachen durch eine Grammatik in Greibach-Normalform erzeugt werden. Beweis: Übung. Eine Grammatik in Greibach-Normalform ist automatisch auch in Chomsky-Normalform.





Erklärung: Die Greibach-Normalform besteht aus Regeln der Form A → aϕ, die Chomsky-Normalform aber aus Regeln der Form A → a | BC mit a ∈ T ; A, B, C ∈ N; ϕ ∈ N  . Die beiden Normalformen haben also, bis auf die terminalen Regeln, vollkommen unterschiedlich strukturierte Regeln. Eine Typ-3-Sprache kann von einer kontextfreien Grammatik erzeugt werden.





Erklärung: Jede rechtslineare Grammatik ist kontextfrei, und jede Typ-3-Sprache kann von einer rechtslinearen Grammatik erzeugt werden.

Lösungen

133

Lösung zu Aufgabe 53 – KON-AK

→ Aufgabe S. 50

Wähle die folgenden beiden Sprachen: L = {an1 bn1 cm1 | m1 , n1 ∈ N0 }, L = {an2 bm2 cm2 | m2 , n2 ∈ N0 } L enthält also Wörter mit gleich vielen a’s und b’s, aber beliebig vielen c’s („an bn c “), und L Wörter mit gleich vielen b’s und c’s, aber beliebig vielen a’s („a bm cm “). L ist kontextfrei, da die Sprache durch die Grammatik G = (N, T, P, S ) erzeugt werden kann, mit N = {S , A, B} T = {a, b, c} P = {S → AB, A → aAb | λ, B → Bc | λ} L ist ebenfalls kontextfrei, da die Sprache durch die Grammatik G = (N, T, P , S ) erzeugbar ist, mit P = {S → AB, A → Aa | λ, B → bBc | λ} Der Schnitt aus beiden Sprachen ist: L ∩ L = {ak bl cm | mit k, l, m, ∈ N0 ; k = l (aus L) und l = m (aus L )} = {an bn cn | n ∈ N0 } Um zu zeigen, dass L ∩ L nicht kontextfrei ist, kann man das Pumping-Lemma für kontextfreie Sprachen benutzen. Der Beweis ist eine einfache Übung. Lösung zu Aufgabe 54 – KON-AB (1) Mache G λ-frei – entfällt. (2) Eliminiere reine Umbenennungen. G(2) = (N, T, P(2) , S ) mit P(2) = {S → b | bc | AB | ACa, A → b | bc, B → d, C → eCe | d}

→ Aufgabe S. 50

134

Lösungen

(3) Bringe rechte Seiten auf die Form, dass sie entweder aus einem Terminalsymbol oder beliebig viele Nonterminalsymbolen bestehen. G(3) = (N(3) , T, P(3) , S ) mit N(3) = {S , A, B, C, D, E, F, G}, P(3) = {S → b | DE | AB | ACF, D → b, E → c, F → a, A → b, | DE B → d, C → GCG | d, G → e} (4) Ersetze jede Regel, auf deren rechter Seite mehr als zwei Nonterminalsymbole stehen, durch Regeln, die genau zwei Nonterminalsymbole auf der rechten Seite enthalten. GCNF = (N(3) ∪ {H, I}, T, PCNF , S ) mit PCNF = {S → b | DE | AB | AH, H → CF, D → b, E → c, F → a, A → b | DE, B → d, C → GI | d, I → CG, G → e} → Aufgabe S. 50

Lösung zu Aufgabe 55 – KON-AC a)

(1) Mache G λ-frei – entfällt. (2) Eliminiere reine Umbenennungen. Die einzige Umbenennung, die vorkommt ist S → A. G(2) = ({S }, T, P(2) , S ) mit P(2) = {S → aS b | ab}

Lösungen

135

(3) Forme so um, dass die rechte Seite entweder ein Terminalsymbol oder beliebig viele Nonterminalsymbole besitzt. G(3) = ({S , B, C}, T, P(3) , S ) mit P(3) = {S → BS C | BC, B → a, C → b} (4) Ersetze jede Regel, auf deren rechter Seite mindestens drei Nonterminalsymbole stehen, durch Regeln mit genau zwei Nonterminalsymbolen auf der rechten Seite. GCNF NCNF T PCNF

= (NCNF , T, PCNF , S ) = {S , B, C, D} = {a, b} = {S → BD | BC, D → S C, B → a, C → b} → Aufgabe S. 50

Lösung zu Aufgabe 55 – KON-AC b) Dreieckstabelle: m=1 m=2 m=3 m=4 m=5 m=6

a B − − − − S

a B − − S D

a B S D −

b C − −

b C −

b C

Da das unterste Feld das Symbol S enthält, gilt: aaabbb ∈ L(G). → Aufgabe S. 51

Lösung zu Aufgabe 56 – KON-AD a)

(1) G λ-frei machen: Einführen eines neuen Startzustands (wäre hier nicht unbedingt nötig, da der bisherige Startzustand S auf keiner rechten Seite vorkommt). G(1) = (N(1) , T, P(1) , S  ) mit N(1) = {S  , S , A, B, C, D}, P(1) = {S  → S | λ, S → ABC | AB, A → aC | aB | b, B → bA | ABC | a, C → c | D, D → CB | c}

136

Lösungen (2) Reine Umbenennungen (außer S  → S ) entfernen: C → D und D → CB wird zu C → c | CB. Mit C → c ist auch das ursprüngliche D → c abgedeckt. G(2) = (N(2) , T, P(2) , S  ) mit N(2) = {S  , S , A, B, C}, P(2) = {S  → S | λ, S → ABC | AB, A → aC | aB | b, B → bA | ABC | a, C → c | CB} (3) Änderung der rechten Seiten, sodass sie entweder ein Terminalsymbol oder beliebig viele Nonterminalsymbole enthalten: G(3) = (N(3) , T, P(3) , S  ) mit N(3) = {S  , S , A, B, C, E, F}, P(3) = {S  → S | λ, S → ABC | AB, A → EC | EB | b, B → FA | ABC | a, C → c | CB, E → a, F → b} (4) Jede Regel, auf deren rechter Seite mindestens drei Nonterminalsymbole vorkommen, ersetzen durch Regeln mit genau zwei Nonterminalsymbolen: GCNF = (NCNF , T, PCNF , S  ) mit NCNF = {S  , S , A, B, C, E, F, G}, PCNF = {S  → S | λ, S → AG | AB, A → EC | EB | b, B → FA | AG | a, C → c | CB, E → a, F → b, G → BC}

Lösungen

137 → Aufgabe S. 51

Lösung zu Aufgabe 56 – KON-AD b) Dreieckstabelle: m=1 m=2 m=3 m=4 m=5 m=6 m=7 m=8 m=9

a B, E A, G − S , S  , A, G S , S  , A, G S , S , B S , S , B S , S  , A, G S , S , B

c C − C C − − C −

b A, F B − S, S  S, S  S , S , B S , S , G

b A, F S, S  S , S , B S , S , B S , S , G S , S , B

a B, E A, G S , S  , A, G S , S , B G

c C C − −

a B, E A, G −

c C −

c C

Das Wort ist erzeugbar, da S  in der untersten Zelle enthalten ist. Anmerkung: Wegen der Regel S  → S muss in jeder Zelle, die S enthält, auch S  enthalten sein (dies ist eine Ausnahmeregelung, die nicht direkt zum CYK-Algorithmus gehört). → Aufgabe S. 51

Lösung zu Aufgabe 56 – KON-AD c)

• Vor Umwandlung in CNF: S ⇒ ABC ⇒ aCBC ⇒ acBC ⇒ acABCC ⇒ acbBCC ⇒ acbABCCC ⇒2 acbbBDCC ⇒ acbbaDCC ⇒ acbbaCBCC ⇒ acbbacacc • Nach Umwandlung in CNF: S  ⇒ S ⇒ AG ⇒ ABC ⇒ ECBC ⇒ ECBBC ⇒ ECFABC ⇒ ECFAAGC ⇒ ECFAECGC ⇒ ECFAECBCC ⇒ acbbacacc → Aufgabe S. 51

Lösung zu Aufgabe 57 – KON-AE Dreieckstabelle: m=1 m=2 m=3 m=4 m=5 m=6

b B − A − S , A, C S, C

b B S, A − S , A, C S, C

a A, C B S , A, C S, C

a A, C B B

a A, C S, C

Da das Startsymbol im untersten Feld der Tabelle steht, gilt w ∈ L(G).

b B

138

Lösungen → Aufgabe S. 52

Lösung zu Aufgabe 58 – KON-AF Dreieckstabelle:

m=1 m=2 m=3 m=4 m=5 m=6

b S, D S, A − − − S

c E − − − −

e G − C H

d A, B, C I −

e G −

a F

S ist im untersten Feld enthalten, also wird das Wort von der Grammatik erzeugt: bcedea ∈ L(G)

→ Aufgabe S. 52

Lösung zu Aufgabe 59 – KON-AG a)

(1) Mache G λ-frei. G(1) = (N, T, P(1) , S ) P(1) = {S → iB | nBA | i | nA, A → f A f | f Bo | f o, B → nBo | f B | no | f } (2) Eliminiere reine Umbenennungen; dieser Schritt entfällt hier, da es keine Nonterminal-Umbenennungen gibt. (3) Forme so um, dass die rechten Seiten entweder aus einem Terminalsymbol oder beliebig vielen Nonterminalsymbolen bestehen. G(3) = (N ∪ {I, F, N, O}, T, P(3) , S ) P(3) = {S → IB | NBA | i | NA, A → FAF | FBO | FO, B → NBO | FB | NO | f, I → i, F → f, N → n, O → o}

Lösungen

139

(4) Ersetze jede Regel, auf deren rechter Seite mindestens 3 Nonterminalsymbole stehen, durch Regeln, mit genau zwei Nonterminalsymbolen. Es entsteht die Grammatik GCNF = (NCNF , T, PCNF , S ) mit NCNF = {S , A, B, C, D, E, I, F, N, O} T = { f, i, n, o} PCNF = {S → IB | NC | i | NA, A → FD | FE | FO, B → NE | FB | NO | f, C → BA, D → AF, E → BO, I → i, F → f, N → n, O → o} → Aufgabe S. 52

Lösung zu Aufgabe 59 – KON-AG b) Dreieckstabelle: m=1 m=2 m=3 m=4

i S, I S

n N S, B

f B, F A, E

o O

S ist im letzten Feld enthalten, der Algorithmus liefert also das Ergebnis, dass das angegebene Wort in f o durch die angegebene Grammatik erzeugt werden kann. Lösung zu Aufgabe 60 – PUM-AB

→ Aufgabe S. 56

Das Pumping-Lemma ist eine Aussage über alle Sprachen, die von einem endlichen Automaten (EA) erkannt werden können. Die mit dem Pumping-Lemma eng verbundene Frage ist, ob eine Sprache L von irgendeinem EA erkannt werden kann, ob also ein EA A existiert mit L(A) = L. Zur Beantwortung dieser Frage geht man folgender Idee nach: Sobald die Anzahl der Zeichen eines Wortes w größer als (oder gleich groß wie) die Anzahl der Zustände eines EAs ist, der es erkennt, muss es eine Schleife geben, also eine Stelle, an der das Wort „aufgepumpt“ werden kann; der EA erkennt dann auch die aufgepumpten Wörter. Sei w = xyz ein solches Wort, wobei x der Teil von w ist, der sich vor der Schleife befindet, y der Teil in der Schleife und z der Teil nach der Schleife. Dann akzeptiert der Automat nicht nur das Wort xyz, sondern auch die Wörter xz, xyyz, xyyyz usw. (allgemein ∀i : xyi z), da man das Wort an der Stelle y aufpumpen kann. Das ist die wesentliche Aussage des Pumping-Lemmas, die für jede Sprache, die von einem EA erkannt werden kann, gilt.

140

Lösungen

Die Umkehrung dieser Aussage besagt, dass, wenn das Pumping-Lemma für eine Sprache nicht gilt, es auch keinen EA gibt, der diese Sprache erkennt. Diese Einsicht kann verwendet werden, um einen Widerspruchsbeweis zu führen, um zu zeigen, dass es keinen EA für eine Sprache L gibt. Lässt sich zeigen, dass bei einer Zerlegung des Wortes w ∈ L in drei Teile x, y, z nach den Bedingungen 1) und 2) (siehe Einführung) ein Aufpumpen nicht möglich ist, dass es also mindestens ein i gibt, für das xyi z  L(A) (Widerspruch zu Bedingung 3); siehe Einführung), dann kann die Sprache nicht von einem endlichen Automaten akzeptiert werden. → Aufgabe S. 56

Lösung zu Aufgabe 61 – PUM-AA

Wir nehmen an, L würde von einem endlichen Automaten A erkannt und dieser Automat hätte |S | = n Zustände. Laut Pumping-Lemma existieren dann für jedes Wort w ∈ L mit |w| ≥ n Wörter x, y, z ∈ E  mit w = xyz, sodass gilt: 1) |xy| ≤ n, 2) |y| ≥ 1, 3) ∀i ∈ N0 : xyi z ∈ L. Diese Folgerung des Pumping-Lemmas führen wir im Folgenden zum Widerspruch, um zu zeigen, dass die Annahme, L würde von einem endlichen Automaten erkannt, falsch ist. Dafür müssen wir die Aussage des Pumping-Lemmas umdrehen, also für ein einziges Wort w zeigen, dass alle möglichen Zerlegungen in x, y und z dazu führen, dass mindestens eine der obigen Bedingungen 1), 2) oder 3) nicht erfüllt wird. Wir nehmen dafür an, dass 1) und 2) erfüllt seien und zeigen, dass dann 3) nicht erfüllt sein kann, indem wir ein einziges i angeben, dass die dritte Bedingung nicht erfüllt: Wir wählen das Wort w = 0n 1n ∈ L mit |w| ≥ n. Wenn |xy| ≤ n und |y| ≥ 1 ist, dann gibt es k, j mit 0 < k ≤ j ≤ n, sodass xy = 0 j , y = 0k und x = 0 j−k , denn xy kann nicht länger als n Zeichen sein und die ersten n Zeichen von w sind Nullen; für das Restwort z gilt dann z = 0n− j 1n . x

z

  Wenn wir nun beispielsweise i = 0 setzen, gilt w =de f xy0 z = 0 j−k 0n− j 1n = 0n−k 1n  L, denn wegen k > 0 ist die Anzahl der Nullen n − k in w um mindestens eins kleiner als die Anzahl der Einsen n, was nicht der Definition der Sprache L entspricht. Da nach dem Pumping-Lemma die Bedingung 3) für alle i ∈ N0 gelten müsste, sie aber offenbar für i = 0 nicht gilt, sind wir zu einem Widerspruch gekommen. Also muss die anfängliche Annahme falsch sein, dass L = L(A) für einen endlichen Automaten A, was beweist, dass die Sprache nicht vom Typ 3 ist. Bemerkung: Ein Widerspruchsbeweis mit dem Pumping-Lemma beginnt mit der Wahl eines geeigneten Pumpwortes w. Da das Pumping-Lemma eine Aussage über alle Wörter einer bestimmten Länge macht, reichte es in der Umkehrung aus, ein einziges Wort zu finden, für das die Aussage des Pumping-Lemmas nicht gilt (allerdings muss dieses Wort variable Länge haben, damit garantiert werden kann, dass es länger als n ist). Wir wählen hier ein möglichst einfach strukturiertes Wort der Sprache, das aber nach n Zeichen eine wesentliche Veränderung in seiner Struktur erfährt, die durch ein Aufpumpen der ersten n Zeichen nicht mitgemacht wird. In diesem Fall enthält das Wort w = 0n 1n nur Nullen innerhalb der ersten n Zeichen; pumpt man diese, kommen entweder weitere Nullen hinzu (i > 1) oder es werden welche gelöscht (i = 0); auf keinen Fall ändert sich aber die Anzahl der Einsen, weswegen sich auf jeden

Lösungen

141

Fall ein Missverhältnis zwischen Nullen und Einsen im gepumpten Wort ergibt. (Jede andere Wahl i  1 wäre hier also auch in Ordnung gewesen.) In anderen Fällen kann die Wahl von i schwieriger sein und unter Umständen auch von der jeweiligen konkreten Belegung von x, y und z abhängen. Da diese nicht frei gewählt werden dürfen, muss über alle möglichen Belegungen (im Rahmen der Pumping-Lemma-Bedingungen) argumentiert werden. Für jede mögliche Belegung darf es aber prinzipiell unterschiedliche Werte für i geben. → Aufgabe S. 56

Lösung zu Aufgabe 62 – PUM-AF

Wenn L rechtslinear ist, wird L auch von einem endlichen endlichen Automaten erkannt. Dann besagt das Pumping-Lemma für Typ-3-Sprachen, dass es ein n ∈ N geben muss, sodass für alle w ∈ L mit |w| ≥ n eine Zerlegung w = xyz existiert, für die gilt: 1) |xy| ≤ n, 2) y  λ, 3) ∀i ∈ N0 : xyi z ∈ L. Wählen wir nun w = an bbcn , gilt |w| ≥ n. Für jede beliebige Zerlegung, für die 1) und 2) gilt, kann y nur a’s enthalten, da |xy| ≤ n gilt und die ersten n Zeichen von w alle a sind, und y enthält mindestens ein a wegen y  λ. Genauer gesagt gilt xy = a j , y = ak , x = a j−k und z = an− j bbcn für 0 < k ≤ j ≤ n. x

z

  Durch Pumpen mit i = 0 entsteht das Wort w =de f xy0 z = a j−k an− j bbcn = an−k bbcn  L (da wegen k > 0 die Anzahl der a’s nicht gleich der Anzahl der c’s im Wort ist). Damit ergibt sich ein Widerspruch, denn nach dem Pumping-Lemma müsste w ∈ L gelten. Wir müssen also die ursprüngliche Annahme aufgeben, es gäbe einen endlichen Automaten, der L akzeptiert, und damit kann L auch nicht rechtslinear sein. → Aufgabe S. 57

Lösung zu Aufgabe 63 – PUM-AC

a) Angenommen, es existiere ein endlicher Automat (EA) A mit |S | = n Zuständen und L(A) = L. Dann gibt es laut Pumping-Lemma für jedes Wort w ∈ L mit |w| ≥ n eine Zerlegung w = xyz mit 1) |xy| ≤ n, 2) |y| ≥ 1, 3) ∀i ∈ N0 : xyi z ∈ L. Wir wählen als Pumpwort w = 0n 10n ∈ L, für das offenbar |w| ≥ n gilt. Wegen den Bedingungen 1) und 2) existieren j, k mit 0 < k ≤ j ≤ n, sodass xy = 0 j , y = 0k , x = 0 j−k und z = 0n− j 10n . x

z

  Wird beispielsweise i = 0 gewählt, enthält w =de f xy z = 0 j−k 0n− j 10n = 0n−k 10n weniger Nullen im ersten Teil des Wortes als im zweiten Teil; das ergibt sich direkt 

0

142

Lösungen aus k > 0. Also gilt w  L, da die Struktur des Wortes nicht der Sprachdefinition entspricht. Damit ergibt sich ein Widerspruch, und wir müssen die ursprüngliche Annahme aufgeben, es gäbe einen EA, der L akzeptiert. → Aufgabe S. 57

Lösung zu Aufgabe 63 – PUM-AC b) Eine Grammatik G mit L(G) = L wäre beispielsweise: G = (N, T, P, S ) mit N = {S }, T = {0, 1}, P = {S → 1S 1 | 0S 0 | 1}

→ Aufgabe S. 57

Lösung zu Aufgabe 63 – PUM-AC

c) Eine Grammatik G in Greibach-Normalform mit L(G ) = L wäre beispielsweise: G = (N, T, P, S ) N = {S , A, B} T = {0, 1} P = {S → 1S A | 0S B | 1, A → 1, B → 0} Es ist nicht immer so einfach, aus einer beliebigen kontextfreien Grammatik eine Grammatik in Greibach-Normalform zu erzeugen. In diesem Fall haben wir nur die jeweils hintere 1 bzw. 0 der beiden „nicht-Greibach-konformen“ Produktionen von G durch ein Zwischen-Nonterminalzeichen A bzw. B ersetzt und dieses in einem zweiten Schritt in 1 bzw. 0 übergehen lassen, um auf G zu kommen. Lösung zu Aufgabe 64 – PUM-AL

→ Aufgabe S. 57

Wir nehmen an, L könnte von einer kontextfreien Grammatik G erzeugt werden. Dann existiert (abhängig von der Struktur dieser Grammatik G) eine Konstante k ∈ N, sodass für alle Wörter z ∈ L mit |z| ≥ k eine Zerlegung z = uvwxy existiert mit 1) |vwx| ≤ k, 2) |vx| ≥ 1, 3) ∀i ∈ N0 : uvi wxi y ∈ L. Wie bei den Aufgaben zum Pumping-Lemma für reguläre Sprachen, führen wir diese Folgerung des Pumping-Lemmas auch hier zum Widerspruch, um zu zeigen, dass die Annahme, L würde von einer kontextfreien Grammatik erzeugt, falsch ist. Dafür müssen wir die Aussage des Pumping-Lemmas umdrehen, also für ein einziges Wort z zeigen, dass alle möglichen

Lösungen

143

Zerlegungen dieses Wortes in u, v, w, x und y dazu führen, dass mindestens eine der obigen Bedingungen 1), 2) oder 3) nicht erfüllt wird. Wir nehmen dafür an, dass 1) und 2) erfüllt seien und zeigen, dass dann 3) nicht erfüllt sein kann, indem wir ein einziges i angeben, dass die dritte Bedingung nicht erfüllt: Wir wählen ein Wort z = ak bk ck ∈ L mit |z| = 3k ≥ k. Aus |vwx| ≤ k und der Struktur von z folgt, dass vx maximal zwei der drei Symbole a, b und c enthalten kann; aus |vx| ≥ 1 folgt, dass v oder x (oder beide) mindestens eines dieser Symbole enthalten müssen. Es ergeben sich folgende mögliche Fälle: • vx enthält mindestens ein a: dann enthält vx kein c, denn die höchstens k Zeichen von vwx reichen nicht „über die b’s hinüber“ bis zu den c’s im Wort z = ak bk ck . Es gilt also: |vx|a > 0 ⇒ |vx|c = 0 Jedes gepumpte Wort z =de f uvi wxi y mit i > 1 gehört dann nicht zur Sprache L, weil |z |a > |z |c , und das entspricht nicht der Struktur von L. • vx enthält kein a: dann enthält vx mindestens ein b oder ein c, denn es darf ja nicht leer sein. Es gilt also: |vx|a = 0 ⇒ (|vx|b > 0 oder |vx|c > 0) Dann ist für i = 0 das gepumpte Wort z =de f uv0 wx0 y = uwy nicht Element der Sprache, weil |z |a > |z |b oder |z |a > |z |c gilt und beides nicht der Struktur der Sprache entspricht. In beiden Fällen entsteht ein Widerspruch, denn laut Pumping-Lemma sollte jedes gepumpte Wort ebenfalls in L liegen. Also müssen wir die ursprüngliche Annahme aufgeben, dass es eine kontextfreie Grammatik G gibt mit L(G) = L. Bemerkung: Wie beim Pumping-Lemma für reguläre Sprachen (vgl. Bemerkung in Lösung zu Aufgabe PUM-AA) steht und fällt auch beim Pumping-Lemma für kontextfreie Sprachen ein Widerspruchsbeweis mit der geschickten Wahl des zu pumpenden Wortes z. Auch hier sollte ein möglichst einfach strukturiertes Wort der Sprache gewählt werden, wobei die Struktur des Wortes diesmal zwei wesentliche Veränderungspunkte haben sollte, die mindestens k Zeichen voneinander entfernt sind. In obigem Beispiel enthält das Wort z = ak bk ck als Trenner zwischen den a’s und den c’s eine Kette von k b’s. Das führt dazu, dass auf keinen Fall a’s, b’s und c’s gleichzeitig gepumpt werden können, da die beiden Pumpstellen höchstens k Zeichen voneinander entfernt sind. Durch geeignete Wahl von i kann dann so gepumpt werden, dass sich die Anzahl der Zeichen im Verhältnis zueinander so verändert, dass das gepumpte Wort nicht mehr in der Sprache liegt, was den gewünschten Widerspruch herbeiführt. Wie man sieht, kann die Wahl von i auch durchaus von der jeweiligen konkreten Belegung der Teilwörter u, v, w, x und y abhängen (i > 1 im ersten Fall und i = 0 im zweiten Fall). Im Gegensatz zu den Aufgaben zum Pumping-Lemma für reguläre Sprachen verzichten wir hier auf die genaue Aufschlüsselung der Struktur der Teilwörter u, v, w, x und y. Die Darstellung dieser Struktur ist zwar möglich, aber benötigt oft Fallunterscheidungen und ist komplizierter als im regulären Fall. Da Beweise mit dem Pumping-Lemma für kontextfreie Sprachen ohnehin oft nicht ohne Fallunterscheidungen auskommen, würde die explizite Darstellung der Teilwörter mehr Verwirrung als Einsicht bringen. Wir verzichten ebenfalls darauf, die Konstante k genau anzugeben und beschränken uns darauf festzustellen, dass es so eine Konstante geben muss. Während beim Pumping-Lemma für reguläre Sprachen die analog verwendete Konstante n einfach der Anzahl der Zustände eines endlichen Automaten entspricht, ist k komplizierter zu bestimmen; es wächst im Wesentlichen

144

Lösungen

exponentiell in der Anzahl der Nonterminalsymbole der Grammatik G. Sowohl für n als auch für k gilt, dass der genaue Wert unwesentlich ist und für die üblichen Beweise mit den PumpingLemmata nicht bestimmt werden muss. Lösung zu Aufgabe 65 – PUM-AD

→ Aufgabe S. 57

Angenommen L sei kontextfrei, dann besagt das Pumping-Lemma für kontextfreie Sprachen, dass eine Zahl k ∈ N existiert, sodass sich jedes Wort z ∈ L mit |z| ≥ k zerlegen lässt zu z = uvwxy mit 1) |vwx| ≤ k, 2) vx  λ, 3) ∀i ∈ N0 gilt uvi wxi y ∈ L. Diese Folgerung führen wir zum Widerspruch. Wir wählen dazu das Wort z = 0k 10k 10k ∈ L mit |z| ≥ k und zeigen, dass für jede mögliche Zerlegung von z, die 1) und 2) erfüllt, 3) nicht erfüllt sein kann. (Man beachte, dass in diesem Fall die Struktur des Pumpwortes z alle Wörter aus L umfasst – in dem Sinne, dass ein durch alle natürlichen Zahlen durchlaufendes k alle Wörter aus L ergeben würde.) Wegen 1) kann vwx nicht beide Einsen von z enthalten, und auch nur Nullen aus maximal zwei der drei durch die Einsen abgegrenzten Bereiche: a) Bereich vor der ersten Eins, b) Bereich zwischen der ersten und zweiten Eins, c) Bereich nach der zweiten Eins. Es ergeben sich zwei mögliche Fälle, die betrachtet werden müssen, um zum Widerspruch zu kommen: • vwx enthält keine Eins: dann muss vwx mindestens eine 0 enthalten, da vx  λ. Da der Wortteil vx nicht gleichzeitig Nullen aus allen drei Bereichen enthalten kann (wegen |vwx| ≤ k), kann mit beliebigem i  1 gepumpt werden, um zu einem Widerspruch zu kommen: Das gepumpte Wort sei z =de f uvi wxi y mit i  1. Die Pumpstellen v und x enthalten Nullen aus mindestens einem der drei Bereiche (Bereich X) und aus mindestens einem nicht (Bereich Y). Durch das Pumpen ändert sich die Anzahl der Nullen in X (sie wird um mindestens eine Null kleiner, falls wir i = 0 wählen und um mindestens eine Null größer, falls wir i > 1 wählen), aber nicht die Anzahl der Nullen in Y. Also stimmt die Anzahl der Nullen in den drei Bereichen nicht mehr überein, was nicht der Definition der Sprache entspricht. Es gilt z  L. • vwx enthält eine Eins: Dieser Fall unterteilt sich in zwei weitere Fälle: – Keine Eins ist in vx enthalten (sondern eine oder beide Einsen in w): dann enthält vx wieder Nullen aus höchstens zwei der drei Bereiche und es gilt mit derselben Argumentation wie im ersten Fall, dass z =de f uvi wxi y für alle i  1 nicht in L liegen kann, also z  L.

Lösungen

145 – Mindestens eine Eins ist in vx enthalten: dann enthält vx entweder keine Nullen oder Nullen aus höchstens zwei der drei Bereiche; das ist zum Pumpen ungeschickt, denn wir wissen nicht, ob sich die Anzahl der Nullen dabei ändern würde oder nicht. Wir argumentieren daher einfacher über die Anzahl der Einsen: wenn mit irgendeinem i  1 gepumpt wird, dann verändert sich die Anzahl der Einsen von vwx zu vi wxi (sie wird um mindestens eine Eins kleiner für i = 0 und um mindestens eine Eins größer für i > 1) und damit vom ungepumpten Wort z zum gepumpten Wort z =de f uvi wxi y. Da laut Sprachdefinition die Anzahl der Einsen immer zwei sein muss, gilt wieder z  L.

Für alle Fälle existiert also ein i (sogar unendlich viele verschiedene i, da jeweils mit allen i  1 gepumpt werden kann), sodass das gepumpte Wort uvi wxi y  L. Damit ergibt sich ein Widerspruch, da laut Pumping-Lemma alle gepumpten Wörter ebenfalls in L liegen müssten. Daher müssen wir die Annahme aufgeben, L sei kontextfrei. Lösung zu Aufgabe 66 – PUM-AG

→ Aufgabe S. 58

Angenommen L sei kontextfrei, dann existiert laut Pumping-Lemma für kontextfreie Sprachen eine Zahl k ∈ N, sodass sich jedes Wort z ∈ L mit |z| ≥ k zerlegen lässt als z = uvwxy mit 1) |vwx| ≤ k 2) |vx| ≥ 1 3) ∀i ∈ N0 : uvi wxi y ∈ L Um zum Widerspruch zu kommen, wählen wir z = 0k 1k 2k 3k ∈ L mit |z| ≥ k. Da |vwx| ≤ k und |vx| ≥ 1, besteht vwx (und damit insbesondere auch vx) entweder aus einer nichtleeren Kette eines einzigen Zeichens (0, 1, 2 oder 3) oder aus zwei verschiedenen Zeichen (0 und 1, 1 und 2 oder 2 und 3). Es ergeben sich drei wesentliche Fälle für die Zeichen in vx, wenn das Vorkommen nur eines Zeichens als Spezialfall des Vorkommens von zwei Zeichen (mit einem Zeichen null Mal vorkommend) betrachtet wird. Seien s, t ∈ N0 , die Pumpvariable i = 0 und damit das gepumpte Wort z =de f uv0 wx0 y = uwy. Die drei Fälle sind: • vx enthält keine 2 und keine 3, also vx = 0 s 1t : dann ist z = uwy = 0k−s 1k−t 2k 3k . • vx enthält keine 0 und keine 3, also vx = 1 s 2t : dann ist z = uwy = 0k 1k−s 2k−t 3k . • vx enthält keine 0 und keine 1, also vx = 2 s 3t : dann ist z = uwy = 0k 1k 2k−s 3k−t . In jedem Fall gilt k  k − s oder k  k − t, wegen |vx| = s + t ≥ 1. Dadurch ist in z • im ersten Fall entweder die Anzahl der Nullen kleiner als die Anzahl der Zweien oder die Anzahl der Einsen kleiner als die Anzahl der Dreien; • im zweiten Fall entweder die Anzahl der Nullen größer als die Anzahl der Zweien oder die Anzahl der Einsen kleiner als die Anzahl der Dreien; • im dritten Fall entweder die Anzahl der Nullen größer als die Anzahl der Zweien oder die Anzahl der Einsen größer als die Anzahl der Dreien. Da die jeweiligen Anzahlen laut Sprachdefinition gleich sein müssten, kann z nicht in der Sprache liegen und es gilt z  L. Damit ergibt sich ein Widerspruch zu 3) und wir müssen die Annahme, L sei kontextfrei, aufgeben.

146

Lösungen

Bemerkung: Es mag überraschen, dass eine Sprache, die eine so einfache Struktur hat wie L = {0i 1 j 2i 3 j | i, j ∈ N} nicht kontextfrei ist, während „ähnliche“ Sprachen wie beispielsweise L = {0i 1i 2 j 3 j | i, j ∈ N} oder L = {0i 1 j 2 j 3i | i, j ∈ N} kontextfrei sind. Der Grund für die Schwierigkeit von L liegt in der Verschränkung der Blöcke, die jeweils gleich viele Zeichen haben sollen, ineinander. Salopp gesagt müsste ein Kellerautomat sich zunächst sowohl die Anzahl der Nullen als auch die Anzahl der Einsen merken, indem er entsprechend viele Zeichen in den Keller schreibt; dann müsste er die Anzahl der Nullen mit der Anzahl der Zweien vergleichen, die Nullen liegen aber unter den Einsen und können wegen des LIFO-Prinzips nicht betrachtet werden. Lösung zu Aufgabe 67 – PUM-AI

→ Aufgabe S. 58

Die Sprache L ist nicht kontextfrei – was wegen der Zuordnung der Aufgabe zum PumpingLemma-Kapitel vielleicht nicht sehr überraschend ist. Wir zeigen durch einen Widerspruchsbeweis, dass es keine kontextfreie Grammatik für L geben kann. Angenommen, es gäbe eine solche Grammatik für L, dann existiert laut Pumping-Lemma für kontextfreie Sprachen eine Zahl k ∈ N, sodass sich jedes Wort z ∈ L mit |z| ≥ k zerlegen lässt als z = uvwxy mit 1) |vwx| ≤ k, 2) |vx| ≥ 1, 3) ∀i ∈ N0 : uvi wxi y ∈ L. Um diese Folgerung zum Widerspruch zu führen, sei z = (ab)k (ca)k (bc)k ∈ L mit |z| ≥ k. Sei weiter die Pumpvariable i = 0, es gilt also für das gepumpte Wort z =de f uv0 wx0 y = uwy. Wir unterscheiden zwei Fälle je nach Struktur der Zerlegung in u, v, w, x und y. Dabei interessiert besonders die Belegung der Pumpstellen x und y. • v und x enthalten nur Teilausdrücke, die „wohlgeformt“ sind (also (ab) , (ca) , (bc) aber beispielsweise nicht (ab) a, (ca) c oder (bc) b): dann betrachten wir zwei Fälle. – Liegt vwx im vorderen Teil von z, enthält vwx also (ab), (ca) oder beides, aber keines der hinteren (bc)’s (wegen |vwx| ≤ k kann es nicht alle drei enthalten), dann enthält z = uwy zu wenige (ab)’s oder zu wenige (ca)’s im Vergleich zur Anzahl der (bc)’s und demnach gilt z  L. – Liegt vwx im hinteren Teil von z, enthält vwx also (ca), (bc) oder beides, aber keines der vorderen (ab)’s, dann enthält z = uwy zu wenige (ca)’s oder zu wenige (bc)’s im Vergleich zur Anzahl der (ab)’s und demnach gilt z  L. • v oder x enthält Teilausdrücke, die nicht „wohlgeformt“ sind: dann wird beim Pumpen die Struktur der wohlgeformten Ausdrücke verletzt, sodass z  L gilt. (Das sieht man einfacher, wenn i = 2 gewählt wird; dann kommt nach dem Pumpen obiger Beispiele für nicht-wohlgeformte Ausdrücke jeweils ein Zeichen zweimal hintereinander vor, was nicht erlaubt ist. Strenggenommen müssten hier eigentlich alle möglichen Fälle betrachtet werden, um den Beweis abzuschließen.)

Lösungen

147

Damit ergibt sich in jedem der Fälle ein Widerspruch zu 3). Man muss daher die Annahme aufgeben, dass eine kontextfreie Grammatik existiert, die L erzeugt, und L ist nicht kontextfrei. Lösung zu Aufgabe 68 – PUM-AJ

→ Aufgabe S. 58

Angenommen, L sei kontextfrei, dann besagt das Pumping-Lemma für kontextfreie Sprachen, dass es ein k ∈ N gibt, sodass sich jedes Wort z ∈ L mit |z| ≥ k zerlegen lässt in z = uvwxy mit 1) |vwx| ≤ k, 2) vx  λ (diese alternative Schreibweise bedeutet dasselbe wie |vx| > 0), 3) ∀i ∈ N0 : uvi wxi y ∈ L. Um einen Widerspruch herbeizuführen, betrachten wir das Wort z = 0k 1k 0k 1k ∈ L mit |z| ≥ k. Sei z = AB mit |A| = |B|. Wir bezeichnen A als die vordere Hälfte des Wortes z und B als die hintere Hälfte. Im Folgenden unterscheiden wir zwei Fälle: • vx enthält unterschiedlich viele Zeichen aus A und B: dann führt ein Pumpen mit i = 0 dazu, dass sich die Mitte des Wortes nach links oder rechts verschiebt. Dabei werden aus der einen Hälfte immer mehr Zeichen von einer Sorte gelöscht als aus der anderen, da wegen 1) vx nicht Einsen oder Nullen aus beiden Hälften enthalten kann. Das bedeutet, dass die Anzahl der Einsen bzw. Nullen in der hinteren bzw. vorderen Hälfte zunimmt und in der vorderen bzw. hinteren abnimmt. Da laut Definition von L die Anzahl der Nullen und Einsen in der vorderen und hinteren Hälfte gleich sein muss, ist für diesen Fall z =de f uv0 wx0 y  L. • vx enthält gleich viele Zeichen aus A und B: Hier führt ein Pumpen mit i = 0 nicht dazu, dass sich die Mitte des Wortes verschiebt. Da vx wegen 1) und 2) jedoch von der Form vx = 1 p 0 p mit p ∈ N ist, bedeutet dies, dass die Anzahl der Einsen in der vorderen Hälfte und die Anzahl der Nullen in der hinteren Hälfte zunimmt, während die Anzahl der Einsen in der hinteren und die Anzahl der Nullen in der vorderen gleich bleibt. Dies ist erneut ein Widerspruch zur Definition von L, also gilt auch für diesen Fall z  L. Also gibt es für das Wort z keine Zerlegung mit den drei Pumpeigenschaften. Da es laut Pumping-Lemma für jedes Wort der Sprache L mit mindestens der Länge k eine solche Zerlegung geben müsste, müssen wir unsere ursprüngliche Annahme, dass L kontextfrei sei, aufgeben. Lösung zu Aufgabe 69 – PUM-AK

→ Aufgabe S. 59

Angenommen L sei kontextfrei, dann besagt das Pumping-Lemma für kontextfreie Sprachen, dass es ein k ∈ N gibt, so dass sich jedes Wort z ∈ L mit |z| ≥ k zerlegen lässt in z = uvwxy mit: 1) |vwx| ≤ k, 2) |vx| > 0, 3) ∀i ∈ N0 : uvi wxi y ∈ L.

148

Lösungen

Um einen Widerspruch herbeizuführen und die Annahme als falsch zu beweisen, betrachten wir 2 das Wort z = ak bk ck ∈ L mit |z| = 4k ≥ k. Da |vwx| ≤ k, kann vx nicht a, b und c gleichzeitig enthalten. Sei i = 2 und das gepumpte Wort z =de f uv2 wx2 y. Wir unterscheiden im Folgenden zwei Fälle: • vx enthält kein c: dann enthält vx mindestens ein a oder ein b. Da wegen |vx| > 0 die Pumpvariablen v und x nicht beide leer sein dürfen, muss ein Pumpen mit i = 2 dazu führen, dass das Wort z mehr a’s und/oder mehr b’s als z enthält. Da die Anzahl der c’s für ein Wort in L das Produkt der Anzahl der a’s und b’s ist, müsste auch die Zahl der c’s zunehmen, damit z ∈ L gilt. Das Teilwort vx enthält aber kein c, es gilt also z  L. • vx enthält kein a: dann enthält vx mindestens ein b oder ein c. Hier führt ein Pumpen mit i = 2 dazu, dass das Wort z mehr b’s und/oder mehr c’s enthält, als z. Da die Anzahl der c’s für ein Wort in L aber das Produkt der Anzahl der a’s und b’s ist und da z genau k-mal a enthält, müssten für jedes gepumpte b k zusätzliche c’s entstehen. Das bedeutet, dass vx entweder mindestens k + 1 Zeichen enthalten müsste (ein b und k c’s), was 1) widersprechen würde, oder leer sein müsste, was 2) widersprechen würde. Es gilt also auch hier z  L. Es gibt also keine Zerlegung des Wortes z, für die alle Bedingungen des Pumping-Lemmas gelten. Unsere Annahme, dass L kontextfrei ist, muss falsch sein. Lösung zu Aufgabe 70 – PUM-AM

→ Aufgabe S. 59

Angenommen, L sei kontextfrei, dann existiert eine Konstante k ∈ N, sodass für alle Wörter z ∈ L mit |z| ≥ k Wörter u, v, w, x, y ∈ {a, b, c} existieren mit z = uvwxy, sodass gilt: 1) |vwx| ≤ k, 2) |vx| ≥ 1, 3) ∀i ∈ N0 : uvi wxi y ∈ L. Um zum Widerspruch zu kommen, setzen wir z = ak bk ck ∈ L mit |z| = 3k ≥ k. Aus |vwx| ≤ k folgt, dass vx maximal zwei der drei Symbole a, b und c enthalten kann. Wir unterscheiden folgende Fälle: • vx enthält mindestens ein a: dann enthält es kein c: |vx|a > 0 ⇒ |vx|c = 0 Jedes z =de f uvi wxi y mit i  1 ist dann nicht Element der Sprache, weil |z |a  |z |c . Es gilt also z  L. • vx enthält kein a: dann enthält es mindestens ein b oder ein c: |vx|a = 0 ⇒ |vx|b > 0 oder |vx|c > 0 Es folgt z = uvi wxi y  L für alle i > 1, weil dann |z |a < |z |b oder |z |a  |z |c (oder beides) gilt. Daraus folgt ein Widerspruch, denn laut Pumping-Lemma sollte jedes gepumpte Wort ebenfalls in L liegen. Also müssen wir die ursprüngliche Annahme aufgeben, dass L eine kontextfreie Sprache ist.

Lösungen

149

Lösung zu Aufgabe 71 – PUM-AH

→ Aufgabe S. 59

Angenommen L sei kontextfrei, dann existiert laut Pumping-Lemma für kontextfreie Sprachen eine Zahl k ∈ N, sodass sich jedes Wort z ∈ L mit |z| ≥ k zerlegen lässt zu z = uvwxy mit 1) |vwx| ≤ k, 2) |vx| ≥ 1, 3) ∀i ∈ N0 : uvi wxi y ∈ L. Wir zeigen durch ein Gegenbeispiel, dass so eine Zerlegung nicht immer existiert, und führen 2 damit die Annahme zum Widerspruch. Dazu wählen wir z = ak bk ∈ L (mit |z| ≥ k) und  2 2 i = 2, sodass sich das gepumpte Wort zu z =de f uv wx y ergibt. Das Teilwort vwx bzw. der zu pumpende Teil vx kann nur a’s, nur b’s oder sowohl a’s als auch b’s enthalten; vx muss außerdem mindestens ein Zeichen enthalten, da |vx| ≥ 1. Wir unterscheiden die folgenden Fälle: • vx enthält nur a’s oder nur b’s: dann enthält z = uv2 wx2 y zu viele a’s beziehungsweise zu viele b’s, denn nur eines der beiden Zeichen wurde gepumpt. Damit gilt auf jeden Fall |z |2a  |z |b , und die Definition der Sprache ist nicht erfüllt; es gilt z  L. • vx enthält sowohl a’s als auch b’s: dann ist vx = al bm für l, m ∈ N0 mit l + m ≤ k, denn es gilt |vwx| ≤ k. Nun hängt der weitere Beweis von der konkreten Belegung von v und x ab. Wir unterscheiden folgende Fälle: – v enthält nur a’s und x enthält nur b’s: dann ist v = al und x = bm . Damit gilt für die Anzahl der a’s bzw. b’s im gepumpten Wort z = uv2 wx2 y: |z |a = |z|a + l = k + l, |z |b = |z|b + m = k2 + m bzw. für das gepumpte Wort z : 2 2 ? z = ak+l bk +m = aq bq Nun stellt sich die Frage, ob es ein q ∈ N gibt, sodass q = k + l und q2 = k2 + m, denn wenn es ein solches q nicht geben sollte, wäre z  L, da die Anzahl der b’s nicht das Quadrat der Anzahl der a’s wäre. Wenn es so ein q geben sollte, müsste gelten: (k + l)2 = k2 + m ⇔ l(l + 2k) = m Eine Lösung der Gleichung, die l = 0 oder m = 0 beinhaltet, können wir ausschließen, denn das widerspricht der Forderung „vx enthält sowohl a’s als auch b’s“. Sei also l, m ≥ 1. Wegen k ≥ |vwx| ≥ m muss gelten: l(l + 2m) ≤ m (Abschätzung, indem k auf der linken Seite der Gleichung durch m ersetzt wird). Offenbar ist aber für l, m ≥ 1 l(l + 2m) = l2 + 2lm > m Das ist ein Widerspruch; damit konnten wir zeigen, dass es kein q wie oben gefordert geben kann und dass somit z  L. – Entweder v oder x enthält sowohl a’s als auch b’s: dann enthält entweder v2 oder x2 das Teilwort ba, denn „(a . . . ab . . . b)2 = a . . . ab . . . ba . . . ab . . . b“; damit enthält auch z = uv2 wx2 y dieses Teilwort, was nicht der Sprachdefinition von L entspricht, und es gilt z  L.

150

Lösungen

Damit ergibt sich in jedem der insgesamt drei Fälle ein Widerspruch zu der Bedingung 3). Wir müssen (und dürfen) daher die Annahme aufgeben, dass eine kontextfreie Grammatik existiert, die L erzeugt. L ist also nicht kontextfrei. Lösung zu Aufgabe 72 – PUM-AE

Es gibt nicht-kontextfreie Sprachen, die das Pumping-Lemma für kontextfreie Sprachen erfüllen.

→ Aufgabe S. 60

Wahr

Falsch





Erklärung: Die beiden Pumping-Lemmata sind Eigenschaften aller regulären bzw. kontextfreien Sprachen, allerdings nicht ausschließlich, denn es gibt auch nicht-reguläre bzw. nicht-kontextfreie Sprachen, die das jeweilige Pumping-Lemma erfüllen. Man bedient sich des Pumping-Lemmas für kontextfreie Sprachen, um in einem Widerspruchsbeweis zu zeigen, dass eine Sprache nicht kontextfrei ist.





Erklärung: Beide Pumping-Lemmata werden meist in dieser Form verwendet. Die Konstante k des Pumping-Lemmas für kontextfreie Sprachen ergibt sich aus der Anzahl der Zustände eines endlichen Automaten.





Erklärung: Die Konstante n des Pumping-Lemmas für reguläre Sprachen ergibt sich aus der Anzahl der Zustände eines endlichen Automaten, die Konstante k des PumpingLemmas für kontextfreie Sprachen aus der Anzahl der Nonterminalsymbole einer Grammatik (allerdings ist k nicht genau die Anzahl dieser Nonterminalsymbole, sondern hängt exponentiell davon ab). Mit dem Algorithmus von Cocke, Younger und Kasami lässt sich für jede nicht-kontextfreie Sprache ein Pumpwort für einen Widerspruchsbeweis mit dem Pumping-Lemma konstruieren.





Erklärung: Der Algorithmus von Cocke, Younger und Kasami überprüft, ob ein Wort zu einer kontextfreien Sprache gehört, er erzeugt jedoch (leider) keine Pumpwörter für das Pumping-Lemma. Das Pumping-Lemma für kontextfreie Sprachen hat zwei, das für reguläre Sprachen nur eine Pumpstelle.





Erklärung: Die eine Pumpstelle beim Pumping-Lemma für reguläre Sprachen ergibt sich aus einer notwendigen Schleife in einem endlichen Automaten, die zwei bei dem für kontextfreie Sprachen aus dem Ableitungsbaum einer kontextfreien Grammatik.

Lösungen

151

Für einen Widerspruchsbeweis mit dem Pumping-Lemma für kontextfreie Sprachen kann man dieses Pumping-Lemma immer durch das Pumping-Lemma für reguläre Sprachen ersetzen, indem man für eine der beiden Pumpvariablen das leere Wort wählt.





Erklärung: Abgesehen davon, dass die Aussage insgesamt nicht viel Sinn ergibt, kann insbesondere in einem Widerspruchsbeweis mit einem Pumping-Lemma die Zerlegung nicht gewählt werden, sondern es muss über alle möglichen Belegungen argumentiert werden. → Aufgabe S. 65

Lösung zu Aufgabe 73 – TUR-AA

Das Zweikomplement wird gebildet durch Kippen aller Bits und Addition von 1. Vorgehensweise: • w endet auf 1: Schreibe eine 1 und invertiere alle Zeichen links davon. • w endet auf 0: Schreibe eine 0 und suche von rechts aus die erste 1. Invertiere alle Zeichen links von dieser 1. A = (E, B, S , δ, s0 , F) mit E = {0, 1}, B = {0, 1, }, S = {s0 , s1 , s2 , se }, F = {se } δ s0 s1 s2 se

0 (s0 , 0, R) (s1 , 0, L) (s2 , 1, L)

Lösung zu Aufgabe 74 – TUR-AF

1 (s0 , 1, R) (s2 , 1, L) (s2 , 0, L)

 (s1 , , L) (se , , R) (se , , R)

→ Aufgabe S. 65

Vorgehensweise: • A erstellt das Komplement auf dem Band im Anschluss an die Folge aus Binärzeichen codiert mit den Zeichen E für 1 und N für 0. • Sie ersetzt jedes bereits verneinte Zeichen durch ein E für 1 bzw. N für 0. • Wenn das komplette Band nur noch aus E und N besteht, ersetzt A diese durch die entsprechenden Binärzeichen 0 und 1. A = (E, B, S , δ, s0 , F); E = {0, 1}, B = {0, 1, E, N, }, S = {s0 , s1 , s2 , s3 , s4 , s5 , s6 , se }, F = {se }

152

Lösungen δ s0 s1 s2 s3 s4 s5 s6 se

1 (s1 , E, R) (s1 , 1, R) (s3 , 1, L) (s3 , 1, L) (s4 , 1, R)

0 (s4 , N, R) (s1 , 0, R) (s3 , 0, L) (s3 , 0, L) (s4 , 0, R)

(s6 , 1, L)

(s6 , 0, L)

 (se , , N) (s2 , N, L) (s5 , , R) (s2 , E, L) (s6 , , L) (se , , R)

E

N

(s1 , E, R) (s2 , E, L) (s0 , E, R) (s4 , E, R) (s5 , 1, R)

(s1 , N, R) (s2 , N, L) (s0 , N, R) (s4 , N, R) (s5 , 0, R)

→ Aufgabe S. 65

Lösung zu Aufgabe 75 – TUR-AH Vorgehensweise: • s0 : Gehe auf äußerst rechtes Zeichen. • s1 : Äußerst rechtes Zeichen merken und löschen. • sa : Gemerktes a schreiben und aktuelles Zeichen merken. • sb : Gemerktes b schreiben und aktuelles Zeichen merken. • sc : Gemerktes c schreiben und aktuelles Zeichen merken. • se : Endzustand.

A = (E, B, S , δ, s0 , F) mit E = {a, b, c}, S = {s0 , s1 , sa , sb , sc , se }, B = {a, b, c, }, F = {se } δ s0 s1 sa sb sc se

a (s0 , a, R) (sa , , L) (sa , a, L) (sa , b, L) (sa , c, L)

b (s0 , b, R) (sb , , L) (sb , a, L) (sb , b, L) (sb , c, L)

c (s0 , c, R) (sc , , L) (sc , a, L) (sc , b, L) (sc , c, L)

 (s1 , , L) (se , , N) (se , a, N) (se , b, N) (se , c, N)

Anmerkung: Diese Aufgabe ist zwar eine gute Übung, so eine Turingmaschine hätte aber keinen praktischen Nutzen, da sich aus Sicht der Turingmaschine nichts ändert, wenn die Eingabe auf dem unendlichen Band irgendwohin verschoben sind.

Lösungen

153 → Aufgabe S. 66

Lösung zu Aufgabe 76 – TUR-AC Vorgehensweise: • Gestartet wird links am Wort w.

• Wenn eine 1 gelesen wird, wird e geschrieben und ganz nach rechts gegangen, um auch dort ein e schreiben. • Wenn eine 0 gelesen wird, wird n geschrieben und ganz nach rechts gegangen, um dort ein n zu schreiben. • Wieder nach links gehen und bei jeder gelesenen 1 oder 0 den Vorgang wiederholen. • Am Ende wird aus jedem e eine 1 und aus jedem n eine 0 gemacht. A = (E, B, S , δ, s0 , F) mit E = {0, 1}, B = {0, 1, n, e, }, S = {s0 , s1 , s2 , s3 , s4 , s5 , se }, F = {se } δ s0 s1 s2 s3 s4 s5 se

0 (s1 , n, R) (s1 , 0, R) (s3 , 0, L) (s3 , 0, L) (s4 , 0, R) (s5 , 0, L)

1 (s4 , e, R) (s1 , 1, R) (s3 , 1, L) (s3 , 1, L) (s4 , 1, R) (s5 , 1, L)

 (s5 , , L) (s2 , n, L) (s0 , , R) (s2 , e, L) (se , , R)

n (s0 , 0, R) (s1 , n, R) (s2 , n, L) (s0 , n, R) (s4 , n, R)

e (s0 , 1, R) (s1 , e, R) (s2 , e, L) (s0 , e, R) (s4 , e, R)

Lösung zu Aufgabe 77 – TUR-AG a) Die kontextfreie Grammatik lautet G = (N, T, P, S ) N = {S , D} T = {a, b, c} P = {S → aDa | bDb | cDc | a | b | c, D → aDa | bDb | cDc | a | b | c | λ}

→ Aufgabe S. 66

154

Lösungen → Aufgabe S. 66

Lösung zu Aufgabe 77 – TUR-AG b) Vorgehensweise:

• Überschreibt erstes Zeichen mit  und merkt sich das Zeichen im Zustand sa , sb oder sc ; läuft bis zum Bandende, wechselt entsprechend in saa , sbb oder scc •

1) falls letztes Zeichen gleich überschreibt dieses Zeichen mit , läuft mit sL zurück bis zu  und Neuanfang in s00 2) falls letztes Zeichen ungleich und nicht  bleibt A stehen 3) falls letztes Zeichen  (Wort mit ungerader Länge) geht A in den Endzustand se

A = (E, B, S , δ, s0 , F) mit E = {a, b, c}, B = {a, b, c, }, S = {s0 , s00 , sa , saa , sb , sbb , sc , scc , sL , se }, F = {se } δ s0 s00 sa saa sb sbb sc scc sL se

a (sa , , R) (sa , , R) (sa , a, R) (sL , , L) (sb , a, R)

b (sb , , R) (sb , , R) (sa , b, R)

c (sc , , R) (sc , , R) (sa , c, R) (sb , c, R)

(sc , a, R)

(sb , b, R) (sL , , L) (sc , b, R)

(sL , a, L)

(sL , b, L)

(sc , c, R) (sL , , L) (sL , c, L)

 (se , , N) (saa , , L) (se , , N) (sbb , , L) (se , , N) (scc , , L) (se , , N) (s00 , , R) → Aufgabe S. 66

Lösung zu Aufgabe 78 – TUR-AE Vorgehensweise: • s0 : gerade Anzahl an Einsen; schreibt bei  eine 0 • s1 : ungerade Anzahl an Einsen; schreibt bei  eine 1

A = (E, B, S , δ, s0 , F) mit E = {0, 1}, B = {0, 1, }, S = {s0 , s1 , s2 , se }, F = {se } δ s0 s1 s2 se

0 (s0 , 0, R) (s1 , 0, R) (s2 , 0, L)

1 (s1 , 1, R) (s0 , 1, R) (s2 , 1, L)

 (s2 , 0, L) (s2 , 1, L) (se , ∗, R)

Lösungen

155 → Aufgabe S. 67

Lösung zu Aufgabe 79 – TUR-AD a) Vorgehensweise:

• Links neben der Bandinschrift wird ein Binärzähler realisiert, der die Anzahl der 1 und 0 zählt (sa1 , sa2 , sa3 ). • Die abgearbeiteten 1 und 0 werden in e und n umgewandelt (s1 ). • Der Zähler wird durch Löschen der hinteren 0 durch 2 geteilt (sd ) und die Hälfte der e und n werden wieder in 1 und 0 umwandelt (sm1 , sm2 , sm3 ). • Abschließend wird der Zähler gelöscht und die vordere Hälfte der Eingabe wird kopiert (s2 , s3 , s4 , s5 , s6 , s7 , s8 ). A = (E, B, S , δ, s0 , F) mit E = {0, 1}, B = {0, 1, n, e, $, }, S = {s0 , s1 , sa1 , sa2 , sa3 , sd , sm1 , sm2 , sm3 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , se }, F = {se } δ s0 s1 sa1 sa2 sa3 sd sm1 sm2 sm3 s2 s3 s4 s5 s6 s7 s8 se

0 (s0 , 0, L) (sa1 , n, L)

1 (s0 , 1, L) (sa1 , e, L)

(sa3 , 1, R) (sa3 , 0, R) (sm1 , $, L) (sm1 , 1, L) (sm2 , 0, R) (sm3 , 0, L)

(sa2 , 0, L) (sa3 , 1, R)

(s4 , n, R) (s4 , 0, R) (s5 , 0, R) (s6 , 0, L)

(sm2 , 0, R) (sm2 , 1, R) (sm3 , 1, L) (s2 , 1, R) (s5 , e, R) (s4 , 1, R) (s5 , 1, R) (s6 , 1, L) (s8 , , L)

 (s1 , , R) (sd , , L) (sa2 , $, L) (sa3 , 1, R)

n (s0 , n, L) (s1 , n, R) (sa1 , n, L)

e (s0 , e, L) (s1 , e, R) (sa1 , e, L)

(se , , N) (s2 , , R)

(sd , n, L)

(sd , e, L)

(sm3 , 0, L)

(sm3 , 1, L)

(s7 , , L) (s6 , n, L) (s6 , e, L)

(s3 , n, R) (s4 , n, R) (s5 , n, R) (s6 , n, L) (s7 , 0, L)

(s3 , e, R) (s4 , e, R) (s5 , e, R) (s6 , e, L) (s7 , 1, L)

(se , , R) (se , , R)

$

(sa2 , $, L) (s1 , $, R) (sd , $, L) (sm1 , $, L) (sm2 , $, R) (sm1 , $, L) (s3 , $, R) (s3 , $, R) (s3 , $, R) (s8 , , L) (s8 , , L)

156

Lösungen → Aufgabe S. 67

Lösung zu Aufgabe 79 – TUR-AD b) Vorgehensweise:

• Von vorne und hinten abwechselnd die Bandinschrift mit n für 0, e für 1 überschreiben, um die Mitte zu finden (s0 , s1 , s2 , s3 ), z. B. 001001 ⇒ n0100e ⇒ nnenne. • Anschließend eine Hälfte mit 0 und 1 überschreiben (s4 ), z. B. nne001. • Überprüfen, ob die zwei Hälften identisch sind (s5 , s6 , s7 , s8 ), z. B. nne001 ⇒ 001nne. • Kopieren einer Hälfte und überschreiben der n mit 0 und der e mit 1 (s9 , s10 , s11 , s12 , s13 , s14 , s15 ), z. B. 001nne001 ⇒ 001001001. A = (E, B, S , δ, s0 , F) mit E = {0, 1}, B = {0, 1, n, e, }, S = {s0 , s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 , s14 , s15 , se }, F = {se } δ s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 se

0 (s1 , n, R) (s1 , 0, R) (s3 , n, L) (s3 , 0, L)

1 (s1 , e, R) (s1 , 1, R) (s3 , e, L) (s3 , 1, L)

(s6 , n, L) (s6 , 0, L) (s7 , 0, L) (s8 , 0, R) (se , 0, N) (s10 , 0, R) (s11 , 0, R) (s9 , 0, R) (s13 , 0, R) (s14 , 0, R) (s15 , 0, L)

(s7 , e, L) (s6 , 1, L) (s7 , 1, L) (s8 , 1, R) (se , 1, N) (s10 , 1, R) (s11 , 1, R) (s9 , 1, R) (s13 , 1, R) (s14 , 1, R) (s15 , 1, L)

n (s4 , n, N) (s2 , n, L)

e (s4 , e, N) (s2 , e, L)

(s0 , n, R) (s4 , 0, R)

(s0 , e, R) (s4 , 1, R)

(s8 , 0, R) (s5 , n, L) (s10 , 0, R) (s10 , n, R) (s11 , n, R) (s12 , n, L) (s9 , 0, R) (s9 , 0, R) (s12 , n, N)

(s8 , 1, R) (s5 , e, L) (s11 , 1, R) (s10 , e, R) (s11 , e, R) (s12 , e, L) (s9 , 1, R) (s9 , 1, R) (s12 , e, N)

 (s2 , , L) (s5 , , L) (s13 , , R) (s14 , , R) (s13 , , R) (s9 , , L) (se , , L) (s15 , 0, L) (s15 , 1, L)

(se , , R)

Lösungen

157 → Aufgabe S. 67

Lösung zu Aufgabe 80 – SPR-AD

Wahr

Falsch

Alle endlichen Mengen von Wörtern sind Sprachen eines Kellerautomaten.





Jede beliebige Menge von Wörtern ist Sprache einer Turingmaschine.





Zu jedem nichtdeterministischen endlichen Automaten gibt es einen eindeutig bestimmten minimalen deterministischen endlichen Automaten.





Nichtdeterministische endliche Automaten sind mächtiger als deterministische endliche Automaten (in Bezug auf die Sprachmächtigkeit).





Zu jedem nichtdeterministischen endlichen Automaten A gibt es einen regulären Ausdruck α mit L(α) = L(A).





Erklärung: Der minimale Automat ist bis auf Isomorphien eindeutig.

Lösung zu Aufgabe 81 – SPR-AC

→ Aufgabe S. 71

Wahr

Falsch

L1 ⊂ L0





L3 = Lndet−EA





LKA = Lndet−KA





Lreg  L3





L0  LT M





LEA  Lndet−EA





Lndet−T M = LT M





158

Lösungen → Aufgabe S. 71

Lösung zu Aufgabe 82 – SPR-AA Im Folgenden sei eine Grammatik wie üblich definiert als G = (N, T, P, S ). 1) Typ-3-Sprachen (L3 ; reguläre Sprachen):

• Rechtslineare Grammatiken können genau die Sprachen aus L3 erzeugen. Sie enthalten nur Produktionen der Form N × (T ∪ T N ∪ {λ}) in P. • Deterministische und nichtdeterministische endliche Automaten können genau die Sprachen aus L3 erkennen. • Durch reguläre Ausdrücke können genau die Sprachen aus L3 dargestellt werden. • Das Pumping-Lemma für reguläre Sprachen ist ein notwendiges Kriterium für jede Sprache aus L3 . • Beispiel-Grammatik: G = ({S , B, C}, {a, b, c, d}, P, S ), P = {S → aB, B → b | dC, C → c | λ} 2) Typ-2-Sprachen (L2 ; kontextfreie Sprachen): • Kontextfreie Grammatiken können genau die Sprachen aus L2 erzeugen. Sie enthalten nur Produktionen der Form N × (N ∪ T ) in P. • Nichtdeterministische Kellerautomaten können genau die Sprachen aus L2 erkennen. (Deterministische Kellerautomaten erkennen eine echte Teilmenge der Sprachen aus L2 , die mit den von LR(k)-Grammatiken erzeugbaren Sprachen identisch ist.) • Das Pumping-Lemma für kontextfreie Sprachen ist ein notwendiges Kriterium für jede Sprache aus L2 . • Beispiel-Grammatik: G = ({S , A}, {a, b}, P, S ), P = {S → aAa | aS a, A → bAb | λ} 3) Typ-1-Sprachen (L1 ; kontextsensitive Sprachen): • Kontextsensitive Grammatiken können genau die Sprachen aus L1 erzeugen. Sie enthalten in P nur Produktionen der Form ϕ1 Aϕ2 → ϕ1 ψϕ2 , wobei A ∈ N; ϕ1 , ϕ2 , ψ ∈ (N ∪ T ) , ψ  λ

Lösungen

159 • Darüber hinaus können monotone Grammatiken genau die Sprachen aus L1 erzeugen. Diese enthalten in P nur Produktionen der Form ϕ → ψ mit |ϕ| ≤ |ψ|. (In diesen beiden Grammatiktypen ist ausnahmsweise die Produktion S → λ erlaubt, wenn S sonst auf keiner rechten Seite vorkommt.) • Nichtdeterministische linear beschränkte Turingmaschinen (LBA) können genau die Sprachen aus L1 erkennen. Die Frage, ob deterministische linear beschränkte Turingmaschinen ebenfalls dieselbe Klasse von Sprachen erkennen können, ist das bis heute ungelöste „erste LBA-Problem“. • Beispiel-Grammatik: G = ({S , A, B}, {a, b}, P, S ), P = {S → ABS , abAB → abaB | abba, AB → ab, B → bb}

4) Typ-0-Sprachen (L0 ; rekursiv aufzählbare/semientscheidbare Sprachen): • Allgemeine Chomsky-Grammatiken (oder Phrasenstrukturgrammatiken) können genau die Sprachen aus L0 erzeugen. Ihre Produktionen sind nicht weiter eingeschränkt, außer dass auf der linken Seite nicht ausschließlich Terminalsymbole vorkommen dürfen. • Deterministische und nichtdeterministische Turingmaschinen können genau die Sprachen aus L0 erkennen. Allerdings muss eine Turingmaschine, die L ∈ L0 erkennt, für Wörter w  L nicht anhalten. Die von Turingmaschinen entscheidbaren Sprachen (für die auch bei Wörtern außerhalb der Sprache ein definiertes Nichtakzeptieren gefordert ist) bilden eine echte Teilmenge von L0 . • Beispiel-Grammatik: G = ({S , B, C, D}, {1, 2}, P, S ), P = {S → BBS | BS S | λ, BBS → CD | λ, CD → S S 1 | 1, BBBB → DC | 2}

160

Lösungen → Aufgabe S. 72

Lösung zu Aufgabe 83 – SPR-AB

L3

L2

Lösung zu Aufgabe 84 – MON-AB

L1

Entscheidbare Sprachen

L0

p(E*)

→ Aufgabe S. 72

a) Ableitung: S ⇒ YT ⇒ XYT ⇒ XXYT ⇒ XXbbT ⇒ XbbXbT ⇒ bbXbXbT ⇒ bbbbXXbT ⇒ bbbbXbbT ⇒ bbbbbbbb Lösung zu Aufgabe 84 – MON-AB

→ Aufgabe S. 72

b) Offenbar werden die Wörter b, bb, bbbb, bbbbbbbb durch die Grammatik erzeugt (bbbb durch S ⇒ YT ⇒ XYT  ⇒ XbbT ⇒ bbbb). Die Vermutung liegt also nahe, dass  2n L =de f b | n ∈ N0 = L(G) Wir stellen fest, dass die ersten beiden Regeln entweder b/bb erzeugen oder Wörter der Form X n bbT, n ∈ N0 . Nun müssen alle X und T verschwinden, um terminale Wörter w ∈ L(G) zu erzeugen. Das geht nur, indem die X von links nach rechts durch Xb → bbX durchgereicht werden, bis sie über die Regel XbT → bbT entfernt werden können. Das kann man mit allen X außer dem letzten machen; dieses muss genutzt werden, um über XbbT → bbbb auch noch das T verschwinden zu lassen. Die Grammatik ist so konstruiert, dass die b’s (mit Ausnahme der rechtesten) beim Durchreichen jedes X gerade verdoppelt werden. Mit den Regeln zum Entfernen von X und T ergibt sich letztendlich immer genau eine Zweierpotenz an b’s. Wir belassen es bei dieser unformalen Begründung, überlegen Sie bei Interesse selbst, wie man einen echten Beweis führen könnte, dass L(G) = L . Überlegen Sie auch, wie eine nicht-monotone Grammatik für dieselbe Sprache aussehen könnte (diese ist etwas einfacher aufzustellen).

Lösungen

161

Lösung zu Aufgabe 85 – MON-AC

→ Aufgabe S. 72

a) Die monotone Grammatik G lautet: G = ({S , A, B, C}, {a, b, c}, P, S ), P = {S → ABC | ABCS , AB → BA, AC → CA, BA → AB, BC → CB, CA → AC, CB → BC, A → a, B → b, C → c} Lösung zu Aufgabe 85 – MON-AC

→ Aufgabe S. 72

b) Produktion des Testwortes: S ⇒ ABCS ⇒ ABCABC ⇒ BACABC ⇒ BCAABC ⇒ bcaabc Lösung zu Aufgabe 86 – MON-AD a) Die monotone Grammatik G lautet: G = ({S , B, C}, {a, b, c}, P, S ), P = {S → aS BC | abC, CB → BC, bB → bb, bC → bc, cC → cc}

→ Aufgabe S. 73

162

Lösungen

Lösung zu Aufgabe 86 – MON-AD

→ Aufgabe S. 73

b) Da das Wortproblem für Typ-1-Sprachen PS PACE-vollständig ist, benötigt es nach heutigen Kenntnissen im schlechtesten Fall exponentielle Rechenzeit. Lösung zu Aufgabe 87 – MON-AE

→ Aufgabe S. 73

a) Die Grammatik G lautet: G = ({S , S  , A, B, C, X, Y, Z}, {a}, P, S ) P = {S → a | S  AAX, S  → S  A | ZB, BA → Y AB, AY → Y A, BX → CX | λ, AC → CA, ZY → YZ, ZCA → ZBA, A → a, Y → a, Z → λ} Zunächst wird mit S  → S  A eine beliebig lange Kette von A’s erzeugt. Diese Kette wird dann beliebig oft kopiert. Lösung zu Aufgabe 87 – MON-AE b) Die Grammatik Gu lautet: Gu = (Nu , {a}, Pu , S u ) Nu = {S u , S u , S u , Au , Bu , Cu , Uu , Xu , Yu , Zu , Eu }, Pu = {S u → XuCuCu S u Bu Yu , S u → Cu S u Bu | Cu S u | S u , XuCu → Xu ZuCu | EuCu , ZuCu → Au Zu , Zu S u → S u , Au S u Bu → Cu S u Bu Bu , AuCu → Cu Au , EuCu → aEu , Eu S u → Uu Eu , Eu Bu → aEu , Eu Yu → λ}

→ Aufgabe S. 73

Lösungen

163

Die Grammatik funktioniert folgendermaßen: • Irgendeine Variante des S -Symbols kodiert das spätere Uu . • Xu und Yu markieren Wortanfang bzw. Wortende. • Au bzw. Cu markieren verschiedene Zustände der Ableitung der vorderen a’s, Bu markiert die hinteren a’s. • Ganz zum Schluss werden diese Platzhalter durch ihre terminale Bedeutung ersetzt; dafür läuft Eu einmal von links nach rechts durch das Wort. • Mit den zwei oberen Regeln werden alle Strings {an Uu am | 1 ≤ m < n ∈ N} ⊂ L (bzw. deren Platzhalter aus Nonterminalen) erzeugt. • Mit den weiteren Regeln implementiert man die Aussage: Falls an Uu am ein gültiger String ist, dann auch an Uu am+n . Überlegen Sie selbst, warum auf diese Weise alle Strings aus Lu (und keine anderen) erzeugt werden können. Anmerkung: Uu sollte eigentlich ein Terminal sein. Da wir die Grammatik aber als Teil der Primzahlgrammatik verwenden wollen, lassen wir es schon hier in der Menge der Nonterminale, wie später benötigt. Dieser Grammatikteil für sich erzeugt somit eigentlich gar keine (terminalen) Wörter. Der Grammatikteil für Strings der Form Xe an Ze am Ye : Ne = {Ce , De , Ee , Xe , Ye , Ze }, Pe = {aZe a → Ce Ze De , aCe → Ce a, De a → aDe , XeCe → aXe , De Ye → Ye a, Xe Ze Ye → Ee }

164

Lösungen Die Grammatik G: G = (Nu ∪ Ne ∪ {S , C, D, X, Y, X0 , Y0 , K, K  , T, V}, {a}, P, S ) P =Pu ∪ Pe ∪ {S → X0 XaaT aaaY | aa, T → T aa | aV | K, V → Xt S u Y t , Xa → XXe a, aY → aYe Y, Uu → Ye Uu Xe , Xt → Ze , Yt → Z e , aUu → Uu , Uu a → Uu , Ee Uu Ee → aV | K, aKa → CKD, aC → Ca, Da → aD, XC → aX, DY → Ya, XKaY → K  a, aK  a → K  a, X0 K  a → a} Die Grammatik erzeugt „aa“ oder ein Wort X0 XaaT an Y, n ungerade. Die Bedeutung des letzteren ist in der Folge, dass der vordere Teil durch die Anzahl k der „a“s angibt, bis zu welcher Zahl der hintere Teil a p nicht teilbar ist. Um zu zeigen, dass der hintere Teil prim ist, wird der vordere Teil sukzessive um „a“ erweitert; bei jeder Erweiterung wird über S u irgendein Wort erzeugt, bei dem der vordere Teil den hinteren „nicht“ teilt (man kann sich ja nicht aussuchen, welches Wort erzeugt wird, sondern muss alle Möglichkeiten beachten). Dann wird mit der Gleichheits-Grammatik überprüft, ob das erzeugte Wort genau der Aussage entspricht, dass der neue vordere Teil k+1 den hinteren Teil p nicht teilt. In diesem Fall weiß man, dass der hintere Teil bis zu k + 1 nicht teilbar ist. Wenn man bei der Aussage „p ist bis p − 1 nicht teilbar“ angekommen ist, kann man mit K den Abschlussvorgang starten. Es ist wichtig zu beachten, dass in allen anderen Fällen keine komplett terminalen Wörter abgeleitet werden können (bspw. wenn K zu früh erzeugt wird oder wenn aus dem Nonterminal S u ein unpassendes Wort erzeugt wird; und insbesondere wenn p gar nicht prim ist).

Lösungen

165

Lösung zu Aufgabe 87 – MON-AE c)

→ Aufgabe S. 73

• aaaaaaaaa aus G: S ⇒ S  AAX ⇒ S  AAAX ⇒ ZBAAAX ⇒ ZY ABAAX ⇒ ZY AY ABAX ⇒ ZY AY AY ABX ⇒ ZYY AAY ABX ⇒ ZYY AY AABX ⇒ ZYYY AAABX ⇒ ZYYY AAACX ⇒ ZYYY AACAX ⇒ ZYYY ACAAX ⇒ ZYYYCAAAX ⇒ YZYYCAAAX ⇒ YYZYCAAAX ⇒ YYYZCAAAX ⇒ YYYZBAAAX ⇒ YYYZY ABAAX ⇒ YYYZY AY ABAX ⇒ YYYZY AY AY ABX ⇒ YYYZY AY AY A ⇒ aaaaaaaaa. • aaaaa aus G: Die Ableitung benötigt mit der hier vorgeschlagenen Grammatik G etwa 300 Ableitungsschritte.

Lösung zu Aufgabe 87 – MON-AE

→ Aufgabe S. 73

d) Die beiden angegebenen Grammatiken sind nicht monoton (G wegen der beiden λRegeln, G wegen mehrerer verkürzender Regeln.) Es ist jedoch leicht (zumindest prinzipiell), sich eine linear beschränkte Turingmaschine zu überlegen, die L bzw. L erkennt. Damit muss es auch Typ-1-Grammatiken für diese Sprachen geben. Mit einem entsprechenden Algorithmus kann man die Grammatiken direkt aus den Turingmaschinen generieren. Lösung zu Aufgabe 88 – SPR-AF

→ Aufgabe S. 74

Set W = {S}; while W != {} loop Set A = {}; for all w in W loop if isTerminal(w) then print(w); else for all p in P loop A = A + match(w, p); end loop end if end loop W = A; end loop print("Fertig. Die Sprache der Grammatik ist endlich.");

166

Lösungen → Aufgabe S. 82

Lösung zu Aufgabe 89 – BER-AA

A

N

a / b)

P-

v.

B

Lösung zu Aufgabe 89 – BER-AA

→ Aufgabe S. 82

c) ∀Y ∈ NP : Y ≤ pol X (oder ∃Y ∈ NP-vollständig: Y ≤ pol X) Lösung zu Aufgabe 89 – BER-AA

→ Aufgabe S. 82

d) X ist NP-schwer und X ∈ NP Lösung zu Aufgabe 89 – BER-AA

→ Aufgabe S. 82

e) Die Bereiche für P und NP würden zusammenfallen. Der Bereich NP-vollständig würde sich fast damit überdecken, es gäbe technisch gesehen aber noch die beiden (trivialen) Probleme ∅ und E  , die in P = NP wären, aber nicht NP-vollständig. Lösung zu Aufgabe 89 – BER-AA f)

→ Aufgabe S. 82

• P = NP: Man gibt für ein beliebiges NP-vollständiges Problem einen deterministischen Polynomialzeit-Algorithmus an oder man führt einen Beweis, der nicht konstruktiv ist, also keinen Algorithmus liefert. • P  NP: Man führt einen nicht-konstruktiven Beweis, indem man zeigt, dass es für ein NP-vollständiges Problem (bzw. für irgendein Problem aus NP) keinen deterministischen Polynomialzeit-Algorithmus gibt.

Lösungen

167 → Aufgabe S. 83

Lösung zu Aufgabe 90 – BER-AJ

Es gilt folgende Teilmengenbeziehung (wobei meist unbekannt ist, ob die Grenzen echte Inklusionen darstellen oder die Mengen doch identisch sind):

P

NP

PSPACE

EXPTIME

EXPSPACE

Es ist lediglich bekannt, dass P  EXPT I ME und PS PACE  EXPS PACE. Im Allgemeinen wird jedoch angenommen, dass alle diese Mengen unterschiedlich sind. Lösung zu Aufgabe 91 – BER-AB

→ Aufgabe S. 83

Wahr

Falsch

Eine Lösung für A kann in Polynomialzeit verifiziert werden.





B kann nicht in Polynomialzeit gelöst werden.





Falls P = NP, dann ist C in Polynomialzeit lösbar.





Es gilt A ≤ pol C.





Für ein Problem F gilt: F ∈ EXPT I ME ⇒ F ∈ EXPS PACE.





Jede abzählbare Menge ist auch entscheidbar.





D ist in Polynomialzeit reduzierbar auf C, aber nicht auf A.





Erklärung: D ist sowohl auf C als auch auf A in Polynomialzeit reduzierbar.

168 Lösung zu Aufgabe 92 – BER-AH

Lösungen → Aufgabe S. 84

Wahr

Falsch

A ≤ pol S AT





A ≤ pol C





A ≤ pol D





B ≤ pol C





E ≤ pol C ⇒ E ∈ NP





A ist nicht entscheidbar





B ist entscheidbar





C ist entscheidbar





D ist entscheidbar





A ist semientscheidbar





A ≤ pol D ⇒ P = NP





C ist in Polynomialzeit lösbar





A ∈ EXPT I ME





A  PS PACE





A  EXPT I ME \ PS PACE





Lösung zu Aufgabe 93 – BER-AI

→ Aufgabe S. 85

Wahr

Falsch

Wenn A NP-schwer ist, so kann es in Polynomialzeit auf jedes NP-vollständige Problem reduziert werden.





Wenn A ∈ NP, dann ist A auch NP-vollständig.





Lösungen

169

B lässt sich auf C reduzieren.





B lässt sich auf S AT reduzieren.





Gilt entgegen der Annahme P = NP, dann ist C NP-vollständig.





Erklärung: Das gilt zwar für fast alle Probleme C ∈ P, allerdings nicht für die Spezialfälle C = E  bzw. C = ∅; daher ist die Aussage falsch. Das Problem „ist n ∈ N, eine Primzahl?“ ist entscheidbar.





Jede entscheidbare Menge ist auch aufzählbar.





Lösung zu Aufgabe 94 – BER-AC

→ Aufgabe S. 86

a) Für eine geratene Knotenteilmenge C ⊆ V mit |C| = k kann in Polynomialzeit verifiziert werden, ob alle Kanten einen Knoten in C haben. Lösung zu Aufgabe 94 – BER-AC

→ Aufgabe S. 86

b) Behauptung: Für G = (V, E), k ∈ N gilt (G, k) ∈ CLIQUE ⇔ (Gc , |V| − k) ∈ VC wobei Gc = (V, E  ) und E  = {(v1 , v2 ) ∈ V × V | (v1 , v2 )  V}. In Gc gibt es zwischen zwei Knoten also genau dann eine Kante, wenn es in G keine gibt. Beweis: (G, k) ∈ CLIQUE ⇔∃S ⊆ V, |S | = k : ∀v1 , v2 ∈ S : (v1 , v2 ) ∈ E (S enthält k Knoten und alle Knoten aus S sind in G paarweise verbunden) ⇔∃S ⊆ V, |S | = k : ∀v1 , v2 ∈ S : (v1 , v2 )  E  (alle Knoten aus S sind in Gc paarweise unverbunden) ⇔∃S ⊆ V, |S | = k : ∀(v1 , v2 ) ∈ E  : v1 ∈ V\S ∨ v2 ∈ V\S (V\S ist Knotenüberdeckung von Gc mit Größe |V| − k) ⇔(Gc , |V| − k) ∈ VC Da die Umformung von (G, k) nach (Gc , |V|−k) in Polynomialzeit möglich ist, gilt damit CLIQUE ≤ pol VC und mit dem Ergebnis aus a), dass VC NP-vollständig ist.  Beispiel: Für k = 4 bilden in der Abbildung die Knoten a, b, c, d die Menge S , e, f sind in der Menge V\S .

170

Lösungen G:

a

b

c

d

a

b

e

f

e

f

Gc :

c

d

→ Aufgabe S. 87

Lösung zu Aufgabe 95 – BER-AK a)

Entscheidbare Mengen

Aufzählbare Mengen

Abzählbare Mengen

Lösungen Lösung zu Aufgabe 95 – BER-AK

171 → Aufgabe S. 87

b) Eine Funktion f : M ⊆ E  → N ⊆ B , wobei E und B Alphabete sind, heißt genau dann Turing-berechenbar, wenn es eine Turingmaschine T = (E, B, S , δ, s0 , F) gibt, die f „berechnet“. Das bedeutet, dass die Rechnung der Turingmaschine, wenn zu Beginn ein Wort w ∈ M (umgeben von ) auf dem Band steht, in endlicher Zeit terminiert und nach Terminierung das Wort f (w) ∈ N (umgeben von ) auf dem Band steht. Für Wörter außerhalb des Definitionsbereichs von f muss die Turingmaschine weder eine bestimmte Ausgabe liefern noch halten. Lösung zu Aufgabe 95 – BER-AK

→ Aufgabe S. 87

c) Eine Menge M ⊆ E  für ein Alphabet E heißt genau dann Turing-aufzählbar, wenn es eine surjektive, Turing-berechenbare Funktion f : N → M gibt. Man kann also in endlicher Zeit herausfinden, dass eine Eingabe w ∈ E  in der Menge M enthalten ist, indem man nacheinander f (1), f (2), . . . betrachtet oder „aufzählt“. Wenn für ein n ∈ N gilt: f (n) = w, dann weiß man, dass w ∈ M. Falls w jedoch nicht in M ist, hat man keine Möglichkeit, das herauszufinden, da die beschriebene Prozedur dann endlos läuft, man aber nicht weiß, ob für ein höheres n nicht doch noch f (n) = w gelten wird. In der Praxis ist diese Methode also im Allgemeinen nicht verwendbar. Lösung zu Aufgabe 95 – BER-AK

→ Aufgabe S. 87

d) Eine Menge M ⊆ E  für ein Alphabet E heißt genau dann Turing-entscheidbar, wenn ihre charakteristische Funktion χ M Turing-berechenbar ist. Insofern sind die Begriffe Entscheidbarkeit und Berechenbarkeit in gewisser Weise äquivalent. Lösung zu Aufgabe 95 – BER-AK

→ Aufgabe S. 87

e) Eine Menge M ist genau dann Turing-aufzählbar, wenn es eine Turingmaschine gibt, die genau die Eingaben w ∈ M akzeptiert. Für w  M jedoch kann es sein, dass die Turingmaschine nie stoppt (siehe Aufgabenteil c) und die entsprechende Erklärung). Da solche Mengen sozusagen nur „zur Hälfte“ entschieden werden, nennt man sie semientscheidbar. Lösung zu Aufgabe 95 – BER-AK

→ Aufgabe S. 87

f) Eine „gewöhnliche“ Turingmaschine T berechnet genau eine Funktion T f . Eine universelle Turingmaschine U soll andere Turingmaschinen simulieren können, d. h. verschiedene Funktionen berechnen können, je nachdem, was für eine Turingmaschine eingegeben wird. Damit soll durch das Automatenmodell die Verbindung zu realen Computern, die beliebige Programme ausführen können, hergestellt werden, um damit die Turingmaschine als deren theoretische Grundlage zu rechtfertigen. Hierzu erhält U als Teil der Bandeingabe zunächst eine Kodierung [T ] der jeweiligen Turingmaschine T , deren Funktion sie berechnen soll; dazu gehört insbesondere eine Kodierung aller Zustandsübergänge. Davon abgetrennt steht in der Eingabe von U eine Kodierung [(λ, s0 , w)] der Anfangskonfiguration von T , also insbesondere auch des Eingabewortes, auf dem T simuliert werden soll. Nun wird auf dem Arbeitsband fortlaufend eine Kodierung der

172

Lösungen Folgekonfiguration der aktuell auf dem Band stehenden Konfiguration entsprechend der kodierten Arbeitsweise von T erzeugt. Wenn U während dieser Prozedur die Kodierung einer Endkonfiguration von T erzeugt hat, geht auch die universelle Turingmaschine in eine Endkonfiguration über. Die Bandbeschriftung kann zu Anfang etwa wie folgt aussehen (wobei $ als Trennzeichen dient): ···



[T ]

$

[(λ, s0 , w)]



··· → Aufgabe S. 88

Lösung zu Aufgabe 96 – BER-AD

a) Die Wörter aus E  können abgezählt werden, bspw. durch eine längenlexikographische Sortierung: w1 = λ, w2 = a, w3 = b, w4 = aa, w5 = ab, w6 = ba, w7 = bb, . . . für das Alphabet {a, b}. Wir können sie also als unendlich lange, aber abzählbare Liste anordnen. abgezählt werden kann. Dann Wir nehmen an, dass die Potenzmenge von E  ebenfalls  kann jeder Teilmenge M ⊆ E  (also M ∈ ℘ E  ) eindeutig eine natürliche Zahl zugeordnet werden, d. h. man kann eine Liste abzählbar unendlicher Länge angeben, die an  n-ter Stelle die n-te Teilmenge Mn enthält, wobei jedes Element von ℘ E  in der Liste enthalten ist. Wir stellen folgende Tabelle T der Teilmengen von E  auf (beispielhaft ausgefüllt): M1 M2 M3 M4 .. .

w1 0 1 1 0

w2 0 0 0 1

w3 1 1 1 1

w4 1 0 1 1

w5 0 0 1 0

... ... ... ... ...

In jeder Zelle T i j enthält die Tabelle eine Eins, wenn w j ∈ Mi , und eine Null sonst. Eine Zeile i der Tabelle definiert also vollständig die Menge Mi . Betrachte die Menge M  = {w j | w j  M j } ⊆ E  mit j ∈ N In obigem Beispiel enthielte M  w1 und w2 (und u. U. weitere Elemente w j mit j > 4), aber nicht w3 und w4 . Unserer Annahme entsprechend müsste für ein n ∈ N gelten M  = Mn , da alle Teilmengen von E  in der Liste vorkommen sollten. Die Menge M  ist aber gerade so definiert, dass sie sich in mindestens einem Element (dem Diagonalelement) von jeder Menge in der Liste unterscheidet. Da es (mind.) eine Menge gibt, die in der Liste nicht enthalten ist, muss unsere Anfangsannahme falsch sein, und die Menge ℘(E  ) ist nicht abzählbar, sondern überabzählbar. 

Lösungen

173 → Aufgabe S. 88

Lösung zu Aufgabe 96 – BER-AD

b) Wir zeigen, dass sogar das Intervall [0, 1[ überabzählbar ist, was die obige Behauptung impliziert. Wir nehmen an, dass die Zahlen aus [0, 1[ abgezählt werden können, dass sie also wie in a) durch eine Liste (r1 , r2 , r3 , . . .) unendlicher, aber abzählbarer Länge vollständig angegeben werden können. Wir stellen folgende Tabelle T der reellen Zahlen zwischen 0 und 1 auf (beispielhaft ausgefüllt): r1 r2 r3 r4 .. .

d1 0 7 3 3

d2 5 1 5 2

d3 7 4 7 6

d4 1 5 6 9

d5 4 1 2 5

... ... ... ... ...

Eine Zeile i in der Tabelle definiert nun die Nachkommastellen der reellen Zahl 0 ≤ ri < 1; eine Zelle T i j gibt demnach die j-te Nachkommastelle der i-ten reellen Zahl ri an. Bspw. gilt r1 = 0,05714 . . . Betrachte die Zahl r , die sich aus der Hintereinanderschreibung ∞  (T ii + 1) mod 10 r = 0, · i=1

ergibt (das Produkt wird hier als Symbol für Konkatenation verwendet wie bei regulären Ausdrücken, der Nachkommateil der Zahl r ist also gerade die Diagonale der Tabelle um eins inkrementiert und modulo 10 genommen). In obigem Beispiel wäre r = 0,1280 . . . Unserer Annahme folgend müsste r = rn für ein n ∈ N gelten. Nach Definition unterscheidet sich r aber an mindestens einer Stelle (der Diagonalstelle) von allen Zahlen in der Liste. Da es (mind.) eine Zahl gibt, die in unserer Liste nicht vorkommt, muss die Annahme falsch sein und es gibt überabzählbar viele Zahlen in [0, 1[ und damit auch in R.  Lösung zu Aufgabe 97 – BER-AG

→ Aufgabe S. 88

a) Gegeben seien ein Alphabet E und zwei Mengen M1 , M2 ⊆ E  von Wörtern über E. Eine Funktion f : M1 → M2 heißt Turing-berechenbar, wenn es eine Turingmaschine T = (E, B, S , δ, s0 , F) mit E  ⊇ M1 und B ⊇ M2 gibt, die eine Funktion T f : M1 → M2 berechnet mit ∀w ∈ M1 : T f (w) = f (w).

174

Lösungen

Lösung zu Aufgabe 97 – BER-AG

→ Aufgabe S. 88

b) Wahr

Falsch

Jede Funktion ist berechenbar.





Die Menge aller berechenbarer Funktionen ist abzählbar.





Wenn eine Menge M abzählbar ist, dann ist sie auch aufzählbar.





Die Menge M = {n, n + 1, n + 2, . . . , n + n} für 0 < n < ∞ ist überabzählbar.





Das reelle Intervall [3, 6] ist abzählbar.





Lösung zu Aufgabe 97 – BER-AG c)

→ Aufgabe S. 88

• Entscheidbar: Menge der Primzahlen, Menge der Quadratzahlen, Menge der Palindrome usw. • Aufzählbar aber nicht entscheidbar: Die Menge der Kodierungen aller Turingmaschinen mit einer zugehörigen Eingabe, die auf dieser Eingabe anhalten. • Abzählbar aber nicht aufzählbar: Die Menge der Kodierungen aller Turingmaschinen, die auf ihrer eigenen Kodierung als Eingabe nicht halten.

Lösung zu Aufgabe 97 – BER-AG

→ Aufgabe S. 88

d) Da es sich um eine endliche Menge handelt, ist diese abzählbar, aufzählbar und entscheidbar. Lösung zu Aufgabe 97 – BER-AG e) int i := 0; forever do print (i·i) i := i + 1; end do

→ Aufgabe S. 88

Lösungen

175 → Aufgabe S. 89

Lösung zu Aufgabe 98 – BER-AE Wir zeigen die Behauptung über die folgenden zwei Lemmata: 1) Die Menge aller Funktionen f : E  → E  ist überabzählbar.

2) Die Menge aller berechenbaren Funktionen f : E  → E  ist abzählbar. Daraus folgt, dass nicht jede Funktion berechenbar sein kann, da es mehr Funktionen als berechenbare Funktionen gibt. Beweis: 1) Wir nehmen probehalber an, dass die Menge F aller Funktionen f : E  → E  abzählbar ist. Dann kann man die Elemente von F in einer unendlich langen, aber abzählbaren Liste anordnen: F = { f1 , f2 , . . .} Wie auf Seite 88 gezeigt, können die Wörter aus E  abgezählt werden, bspw. durch eine längenlexikographische Sortierung. Man kann also E  schreiben als: E  = {w1 , w2 , . . .} Wenn die Annahme stimmt, lassen sich daher alle Funktionen mitsamt ihrer Funktionswerte in einer unendlich großen, aber abzählbaren Tabelle darstellen: f1 f2 f3 .. .

w1 f1 (w1 ) f2 (w1 ) f3 (w1 )

w2 f1 (w2 ) f2 (w2 ) f3 (w2 )

w3 f1 (w3 ) f2 (w3 ) f3 (w3 )

w4 f1 (w4 ) f2 (w4 ) f3 (w4 )

... ... ... ...

Definiere nun für u, v ∈ E  , u  v eine Funktion g : E  → E  durch ⎧ ⎪ ⎪ ⎨u, falls fi (wi )  u ∀i ∈ N : g(wi ) = ⎪ ⎪ ⎩v, falls fi (wi ) = u Die Funktion g unterscheidet sich also von allen Funktionen in der Tabelle in mindestens einem Funktionswert. Wenn F abzählbar ist, muss es ein k ∈ N geben, sodass g = fk . Dann muss insbesondere auch gelten, dass g(wk ) = fk (wk ). Nach Definition von g gilt aber g(wk )  fk (wk ). Wir kommen also zu einem Widerspruch und müssen die ursprüngliche Annahme aufgeben, dass F abzählbar ist. 2) Dass die Menge aller berechenbaren Funktionen Fb abzählbar ist, sieht man durch folgende (informale) Überlegung: Wenn f ∈ Fb berechenbar ist, dann gibt es einen Text endlicher Länge über einem Alphabet E zur Beschreibung eines f berechnenden Algorithmus. Da die Menge aller Texte E  abzählbar ist, ist die Menge aller berechenbaren Funktionen abzählbar. Wie oben beschrieben, folgern wir aus den Lemmata, dass es mehr Funktionen als berechenbare Funktionen gibt und dass somit nicht alle Funktionen f : E  → E  berechenbar sind. 

176

Lösungen

Lösung zu Aufgabe 99 – BER-AL

→ Aufgabe S. 89

Wahr

Falsch

Nicht jede Funktion ist berechenbar.





Wenn eine Menge M abzählbar ist, dann ist M auch aufzählbar.





Die Äquivalenz zweier beliebiger Programme A und B ist entscheidbar.





Das Travelling-Salesman-Problem liegt in PS PACE.





Q ≤ pol P ∧ Q ist in Polynomialzeit lösbar ⇒ P ist in Polynomialzeit lösbar.





Q ≤ pol P ∧ P ist in Polynomialzeit lösbar ⇒ Q ist in Polynomialzeit lösbar.





Q ≤ pol P ∧ Q ist nicht in Polynomialzeit lösbar ⇒ P ist nicht in Polynomialzeit lösbar.





Q ≤ pol P ∧ P ist nicht in Polynomialzeit lösbar ⇒ Q ist nicht in Polynomialzeit lösbar.





Lösung zu Aufgabe 100 – VER-AB

→ Aufgabe S. 90

a) Es gibt folgende Möglichkeiten, die Vermutung zu beweisen: • Formel aufstellen und direkt beweisen. • Beweis durch Widerspruch. • Beweis durch vollständige Induktion. • (Wenn man den Verdacht hat, dass die Vermutung gar nicht stimmt, dann reicht ein Gegenbeispiel, um sie zu widerlegen.)

Lösungen

177 → Aufgabe S. 90

Lösung zu Aufgabe 100 – VER-AB

b) Wir stellen eine Formel auf und beweisen sie direkt. Die Vermutung kann man formulieren als (der Dreher der letzten beiden Ziffern ist dargestellt als „−b + 1“): (b − 2) ·

b−1 

b−1 

i · bb−i−1 =

i=1



b−1 

i·b

b−i

i=1 b−1 

−2·

i=1

⇔2·

i · bi−1 − b + 1

i·b

b−i−1

=

b−1 

i=1 b−1 

i · bb−i−1 +

i=1

i · bi−1 − b + 1

i=1 b−1 

i · bi−1

b−1 



i=1



1·bb−2 +...+(b−1)·b0



(b−1)·bb−2 +...+1·b0

i · bb−i

=b−1

i=1



1·bb−1 +2·bb−2 +...+(b−1)·b1

Durch Zusammenfassen der Summen erhält man: ⇔ 2b − 1 − bb−1 +

b−2  (2 · (b − i − 1) + (i + 1) − (b − i)) · bi = b − 1 i=1

⇔ (b − 1) ·

b−2 

bi = bb−1 − b

i=1

Auflösen der geometrischen Reihe: ⇔ (b − 1) · ⇔1=1

bb−1 − b = bb−1 − b b−1 

A

Mathematische Grundlagen

In diesem Anhang werden mathematische Grundlagen erläutert, die so allgemein sind, dass sie nicht einzelnen Kapiteln zugeordnet werden können. Es handelt sich dabei entweder um sehr allgemeine Themen wie Mengen, Funktionen oder Graphen oder um Themen, die in zwei oder mehr Kapiteln vorkommen und entweder keinem vorrangig zugeordnet werden können oder aus Gründen der einfacheren Nachschlagbarkeit hier untergebracht sind. Um das Auffinden der Definitionen einfacher zu gestalten, ist der Anhang in beiden Bänden des Aufgabenbuches „100 Übungsaufgaben zu Grundlagen der Informatik“ vollständig abgedruckt. Es wird allerdings auf eine Einführung der gängigen mathematischen Begriffe und Notationen aus Mengentheorie, Algebra usw. verzichtet und deren Kenntnis als vorhanden vorausgesetzt.

A.1

Mengen und Funktionen

Für Mengenrelationen, algebraische Operationen und Relationen, Terme und ähnlich gebräuchliche mathematische  Konstrukte werden die üblichen Notationen verwendet (beispielsweise ∈, ∪, ∩, +, −, ·, /, , , , ≥, . . .). Eine Menge kann explizit angegeben werden durch • die Auflistung ihrer Elemente, beispielsweise B = {true, f alse}, N = {1, 2, . . .} oder • eine Einschränkung der Elemente einer anderen Menge mithilfe einer Aussage über diese Elemente, beispielsweise PRI MES = {x ∈ N | x ist Primzahl} Darüber hinaus können Mengen durch Vereinigung, Schnittbildung, usw. aus anderen Mengen abgeleitet werden. Mengen können unter anderem endlich, abzählbar oder überabzählbar sein. Für eine endliche Menge Me ist die Anzahl ihrer Elemente endlich und wir bezeichnen mit |Me | die Anzahl der in Me enthaltenen Elemente. Für eine abzählbare Menge Ma gibt es eine injektive Abbildung von Ma in die natürlichen Zahlen; insbesondere ist eine endliche Menge also auch abzählbar. Für eine überabzählbare Menge existiert so eine Abbildung nicht. Für jede Menge M wird mit ℘(M) =de f {M  | M  ⊆ M} die Potenzmenge von M, also die Menge aller Teilmengen von M, angegeben. Die Potenzmenge einer endlichen Menge M hat 2|M| Elemente (daher auch die manchmal gebräuchliche alternative Notation ℘(M) = 2 M ), die Potenzmenge einer abzählbaren nichtendlichen Menge ist überabzählbar.

180

A Mathematische Grundlagen

Die folgenden speziellen Mengen werden in dieser Aufgabensammlung häufig verwendet: • Mengen der natürlichen (ohne 0), ganzen, rationalen und reellen Zahlen N, Z, Q und R; • Menge der natürlichen Zahlen mit 0, Mengen der positiven und negativen (jeweils ohne 0) ganzen, rationalen und reellen Zahlen N0 , Z+ , Z− , Q+ , Q− , R+ , R− ; • Boolesche Menge B = {true, f alse}, wobei wir true auch mit 1 und f alse auch mit 0 identifizieren. Eine Funktion f aus einer Urbildmenge M in eine Bildmenge N wird durch f : M → N : m → f (m) notiert, wobei m ∈ M und f (m) ∈ N gilt. Dabei kann f (m) auch durch einen Term angegeben werden. Falls eine Umkehrabbildung existiert (im Fall einer injektiven Funktion f ), wird diese bezeichnet als f −1 : N → M

A.2

Graphen

Ein Graph ist ein Tupel G = (V, E) aus einer Menge von Knoten („vertices“) V und einer Menge von Kanten („edges“) E. Wir betrachten nur Graphen ohne Mehrfachkanten; diese können gerichtet sein (in diesem Fall ist E ⊆ V × V) oder ungerichtet (in diesem Fall ist E Teilmenge aller zweielementigen Teilmengen von V). Die maximal mögliche Anzahl an Kanten ist in einem gerichteten Graphen |V|2 und in einem ungerichteten |V|2 /2. Graphen werden dargestellt, indem jeder Knoten als Kreis gezeichnet wird; in einem ungerichteten Graphen wird jede Kante e = {v1 , v2 } ∈ E als Linie zwischen den Knoten v1 und v2 gezeichnet; in gerichteten Graphen wird für jede Kante e = (v1 , v2 ) ∈ E die entsprechende Linie als Pfeil von v1 nach v2 gezeichnet. Die Kante e heißt in diesem Fall von v1 ausgehend und in v2 eingehend. Im ungerichteten Fall ist der Grad eines Knotens die Anzahl der anliegenden Kanten. Im gerichteten Fall unterscheiden wir für jeden Knoten einen Ausgangsgrad und einen Eingangsgrad anhand der Anzahl der ausgehenden und eingehenden Kanten. Sowohl die Knoten als auch die Kanten eines Graphen können beschriftet werden. Eine Teilmenge der gerichteten bzw. ungerichteten Graphen stellen gerichtete bzw. ungerichtete Bäume dar. Im ungerichteten Fall ist ein Baum definiert als ein zusammenhängender kreisfreier Graph. Die Knoten mit Grad 1 heißen Blätter, alle anderen Knoten heißen innere Knoten. Wenn ein beliebiger Knoten eines ungerichteten Baums als Wurzel ausgezeichnet wird, erhält man einen gerichteten Baum, indem man alle Kanten von der Wurzel zu den Blättern ausrichtet. Anders ausgedrückt ist ein gerichteter Baum ein gerichteter kreisfreier Graph mit genau einer Wurzel, wobei eine Wurzel als Knoten mit Eingangsgrad 0 definiert ist. Knoten mit Ausgangsgrad 0 heißen hier Blätter. In einem gerichteten Baum werden für einen Knoten v ∈ V alle Knoten v ∈ V Kindknoten genannt, zu denen eine Kante (v, v ) ∈ E existiert, während v Vaterknoten für all diese v heißt. Ein gerichteter Baum heißt Binärbaum, wenn jeder seiner Knoten höchstens 2 Kindknoten hat.

A.3 Alphabete, Zeichen, Wörter und Sprachen

A.3

181

Alphabete, Zeichen, Wörter und Sprachen

Eine nichtleere endliche Menge E wird als Alphabet bezeichnet. Die Elemente eines Alphabets heißen Zeichen oder Symbole, die durch Hintereinanderschreibung zu Wörtern werden. Ein Wort ist also ein Tupel (e1 , e2 , . . .), wobei e1 , e2 , . . . ∈ E. Ein Spezialfall ist das leere Wort λ, das keine Zeichen enthält bzw. durch die null-fache Hintereinanderschreibung der Zeichen aus E entsteht. Formal sind Wörter Tupel aus Zeichen, wir verzichten aber auf das Schreiben von Klammern und Kommas und schreiben die Zeichen direkt hintereinander. Die Menge aller Wörter, die über einem Alphabet E gebildet werden können (inklusive dem leeren Wort λ) wird durch E  bezeichnet. Beispielsweise gilt: E = {0, 1} ⇒ E  = {λ, 0, 1, 00, 01, 10, 11, . . .} Eine (formale) Sprache ist eine beliebige Menge von Wörtern, also eine Teilmenge der Menge E  für ein gegebenes Alphabet E. Die Menge aller Sprachen über einem Alphabet E ergibt sich somit zu ℘(E  ). Wir benutzen neben der Schreibweise E  für Wörter beliebiger Länge über dem Alphabet E auch noch die Bezeichnung E n ⊂ E  für die Menge aller Wörter der Länge n über E. Darüber hinaus wird die Bezeichnung E + =de f E  \{λ} für die Menge aller nichtleeren Wörter über E verwendet. Für eine Sprache L ⊆ E  bezeichnen wir deren Komplementsprache mit L =de f E  \L Für ein Alphabet E und ein Wort w ∈ E  bezeichnet |w| die Anzahl der in w vorkommenden Zeichen. Formal: ⎧ ⎪ ⎪ falls w = λ ⎨0, |w| =de f ⎪ ⎪ ⎩|v| + 1, falls w = va, v ∈ E  , a ∈ E Für ein Alphabet E, ein Wort w ∈ E  und ein Zeichen a ∈ E bezeichnet |w|a die Anzahl der in w vorkommenden a’s. Formal:

|w|a =de f

⎧ ⎪ 0, ⎪ ⎪ ⎪ ⎨ |v|a + 1, ⎪ ⎪ ⎪ ⎪ ⎩|v| , a

falls w = λ falls w = va, v ∈ E  falls w = vb, v ∈ E  , a  b ∈ E

Für ein Alphabet E und ein Wort w ∈ E  bezeichnen wir durch w die „Rückwärtsschreibung“ von w: ⎧ ⎪ ⎪ falls |w| ≤ 1 ⎨w,  w =de f ⎪ ⎪ ⎩av , falls w = va, v ∈ E  , a ∈ E Gilt w = w , heißt w Palindrom. Als Wortproblem einer Sprache bezeichnen wir das algorithmische Problem, zu einem beliebigen gegebenen Wort festzustellen, ob es zu der Sprache gehört oder nicht.

182

A Mathematische Grundlagen

A.4

Landau-Notation

Die Landau-Notation wird verwendet, um das asymptotische Verhalten von Funktionen und Folgen zu beschreiben. Die Landau-Symbole werden auf Funktionen f angewendet und bezeichnen jeweils eine Menge von Funktionen, die eine bestimmte Eigenschaft in Relation zu f haben. Wir nutzen die folgenden Symbole mit der im Anschluss definierten Bedeutung (wobei f, g : N → R):   f (x)  =0 f ∈ o(g) ⇔de f lim  x→∞ g(x)    f (x)   < ∞ ⇔ ∃c, x0 > 0 ∀x > x0 : | f (x)| ≤ c · |g(x)| f ∈ O(g) ⇔de f lim sup  g(x)  x→∞     f (x)  f (x)     ≤ lim sup   < ∞ ⇔ f ∈ O(g) ∧ g ∈ O( f ) f ∈ Θ(g) ⇔de f 0 < lim inf  x→∞ g(x)  g(x)  x→∞   f (x)   ≤ ∞ ⇔ ∃c, x0 > 0 ∀x > x0 : | f (x)| ≥ c · |g(x)| ⇔ g ∈ O( f ) f ∈ Ω(g) ⇔de f 0 < lim inf  x→∞ g(x)    f (x)   = ∞ ⇔ g ∈ o( f ) f ∈ ω(g) ⇔de f lim  x→∞ g(x)  Die wichtigsten Landau-Symbole sind • O( f ): Funktionen, die asymptotisch höchstens so schnell wachsen wie f , • Ω( f ): Funktionen, die asymptotisch mindestens so schnell wachsen wie f und • Θ( f ): Funktionen, die asymptotisch mit f wachsen. Für diese sind oben neben den Definitionen über den Limes auch die äquivalenten, vielleicht etwas greifbareren Definitionen über Quantoren angegeben. So ist eine Funktion f ∈ O(g), wenn für alle x über einer bestimmten Größe x0 der Wert f (x) höchstens um einen konstanten Faktor c größer (im Wesentlichen also kleiner oder gleich) ist als g(x). Aus den Definitionen ergeben sich direkt die folgenden Beziehungen: Θ( f ) = O( f ) ∩ Ω( f ) und damit Θ( f ) ⊆ O( f ) und Θ( f ) ⊆ Ω( f )

A.5

Boolesche Algebren

Eine Boolesche Algebra ist eine algebraische Struktur (M; ·, +,  ), also eine Menge M versehen mit den Verknüpfungen +, ·,  auf dieser Menge (vgl. auch algebraische Strukturen wie Gruppen, Ringe oder Körper sowie die verwandten Begriffe der Booleschen Räume und Booleschen Verbände). Dabei gilt |M| ≥ 2, und die Verknüpfungen sind definiert als · : M × M → M : (a, b) → a · b (Boolesches Produkt), + : M × M → M : (a, b) → a + b (Boolesche Summe), 

: M → M : a → a (Boolesches Komplement),

A.5 Boolesche Algebren

183

wobei die Huntingtonschen Axiome gelten: BA1: „·“ und „+“ sind kommutativ: a · b = b · a, a + b = b + a; BA2: „·“ und „+“ sind wechselseitig distributiv: a·(b+c) = a·b+a·c, a+(b·c) = (a+b)·(a+c); BA3: es gibt neutrale Elemente 0 und 1: a · 1 = a, a + 0 = a; BA4: a ist komplementär zu a in der folgenden Weise: a · a = 0. Aus diesen Axiomen ergibt sich eine Vielzahl weiterer Gesetze, zu denen insbesondere das De-Morgansche Gesetz ∀a, b ∈ M : (a · b) = a + b , (a + b) = a · b und das Assoziativgesetz ∀a, b, c ∈ M : a · (b · c) = (a · b) · c, a + (b + c) = (a + b) + c zählen. Wir nutzen in dieser Aufgabensammlung die einfachste Boolesche Algebra mit der zweielementigen Menge M = B. Typische Beispiele für Boolesche Algebren sind die Aussagenlogik mit den Verknüpfungen ∨, ∧, ¬, die Mengenalgebra mit den Verknüpfungen ∪, ∩, x und die Schaltalgebra mit den Verknüpfungen ∨, ∧, x, die in Band 2, Kapitel 1 definiert wird. Als (n-stellige) Boolesche Funktionen werden Funktionen der Form Bn → B bezeichnet. Zu jeder Booleschen Funktion lässt sich ein Boolescher Ausdruck (oder Boolescher Term) angeben. Umgekehrt definiert jeder Boolesche Ausdruck mit n verschiedenen Variablen genau eine n-stellige Boolesche Funktion. Dabei sind Boolesche Ausdrücke wie folgt definiert: Seien V = {a1 , . . . , an } eine Menge Boolescher Variablen, S = {0, 1, ·, +, , (, )} eine Menge von Symbolen und V ∩ S = ∅. • Jedes Symbol 0 und 1 (Konstanten) und jede Variable a ∈ V ist ein Boolescher Ausdruck. • Sind A und B Boolesche Ausdrücke, so auch A , (A · B) und (A + B). • Nur Zeichenreihen, die sich mit den obigen beiden Regeln in endlich vielen Schritten konstruieren lassen, sowie deren „Abkürzungen“ gemäß den Vorrangregeln (Klammer vor  vor · vor +) sind Boolesche Ausdrücke. Beispielsweise ist (a · b) + c ein (abgekürzter) Boolescher Ausdruck über den Variablen a, b und c. Die Auswertung („Semantik“) eines Booleschen Ausdrucks ergibt sich aus den oben angegebenen Gesetzen der Booleschen Algebren.

184

A Mathematische Grundlagen

A.6

Kodierung

Für zwei Alphabete A, B heißt eine Abbildung c : A → B Kodierung von A. Der Bildbereich c(A) =de f {c(a) | a ∈ A} heißt Code und jedes Element b ∈ c(A) heißt Codewort. Die natürliche Fortsetzung der Kodierung c ist definiert durch ⎧ ⎪ ⎪ falls w = λ ⎨λ, c : A → B : w → ⎪ ⎪ ⎩c (w )c(a) falls w = w a, w ∈ A , a ∈ A 





Insbesondere gilt c (a) = c(a) für alle a ∈ A. Wir unterscheiden die folgenden Klassen von Kodierungen: • c : A → B heißt Chiffrierung, c(A) heißt Chiffre; • c : A → Bn , n ∈ N heißt Blockkodierung; • c : A → B heißt Binärkodierung; • c : A → Bn , n ∈ N heißt n-Bit-Kodierung. Wenn die Kodierung c injektiv ist, existiert eine Umkehrabbildung c−1 : c(A) → A; diese wird Dekodierung von c(A) genannt. Die Kodierung c erfüllt die Fano-Bedingung genau dann, wenn kein Codewort Anfang eines anderen Codewortes ist, also wenn ∀u, w ∈ c(A) ∀v ∈ B : (w = uv ⇒ v = λ) Es gilt stets c injektiv ⇒ c injektiv c injektiv und c erfüllt die Fano-Bedingung ⇒ c injektiv

A.7

Zahlendarstellung

Wenn Zahlen in diesem Buch vorkommen, wird die Darstellungsart normalerweise aus dem Kontext erschlossen. So wird eine Zeichenkette, die aus den Ziffern 0, . . . , 9 besteht, als Zahl in Dezimaldarstellung interpretiert. Wenn eine Zeichenkette w ∈ E  für ein Alphabet E explizit als Zahl in einer bestimmten Darstellungsart D interpretiert werden soll, wird die Zeichenkette eingeklammert und die Darstellungsart als Index im Anschluss an die Zahl geschrieben als (w)D . Man kann beispielsweise schreiben: (10)2 = (2)10 Wenn die Interpretation eindeutig ist, kann die Klammer auch weggelassen werden.

A.8 Maßeinheiten für die Größe von Daten

185

Jeder Index D bezeichnet also eine Dekodierung D : E → R Insbesondere sind also eigentlich nur Zeichen aus E in der Klammer zulässig, wenn die Interpretation eindeutig ist, wird aber auch die Berechnung eines Terms in der Klammer zugelassen. In diesem Fall wird die Funktion auf die Zeichenkette angewendet, die sich aus der Berechnung des Terms ergibt, beispielsweise (12 + 24)10 = (36)10 = 36 Für D sind folgende Funktionen zulässig: • 1, 2, . . . , 8, . . . , 10, . . . , 16, . . .: unäre, duale, . . . , oktale, . . . , dezimale, . . . , hexadezimale, . . . , allgemein D-adische Darstellung mit E = {0, . . . , D − 1}; Ausnahme: D = 1 ⇒ E = {1}. Dabei ist für ein Wort w = en−1 en−2 . . . e0 ∈ E  der Wert wD definiert als wD =de f

n−1 

e i Di

i=0

• Exzess-q: Um q gegenüber der Dualdarstellung „verschobene“ Darstellung mit E = {0, 1}, also wExzess-q =de f w2 − q. • 1K: Einskomplement-Darstellung mit E = {0, 1}, siehe Band 2, Kapitel 5. • 2K: Zweikomplement-Darstellung mit E = {0, 1}, siehe Band 2, Kapitel 5. • FPZ: Festpunkt-Darstellung mit E = {0, 1}, siehe Band 2, Kapitel 5. • GPZ: Gleitpunkt-Darstellung mit E = {0, 1}, siehe Band 2, Kapitel 5. • IEEE-754: IEEE-Gleitpunkt-Darstellung, einfache Genauigkeit (mit E = {0, 1}), siehe Band 2, Kapitel 5. • BCD: Binary Coded Decimal mit E = {0000, 0001, . . . , 1001}, siehe Band 2, Kapitel 5. • Aiken: Aiken-Darstellung mit E = {0000, . . . , 0100, 1011, . . . 1111}, siehe Band 2, Kapitel 5. • 2-aus-5: 2-aus-5-Darstellung mit E ⊂ {0, 1}5 , siehe Band 2, Kapitel 5. Durch Anhängen von „ , n“ an den Index kann die Beschränkung auf n Bits gekennzeichnet werden. Besonders wichtig über alle Aufgaben dieses Aufgabenbuchs hinweg ist neben der Dezimaldarstellung die Dualdarstellung.

A.8

Maßeinheiten für die Größe von Daten

Da Computer auf Hardwareebene mit binären Werten arbeiten, ist die kleinste relevante Dateneinheit das Bit, welches entweder eine 0 oder eine 1 darstellt. Der Wert eines Bits kann in einem

186

A Mathematische Grundlagen

Flipflop gespeichert werden (vgl. Band 2, Kapitel 1). 8 Bits werden zu einem Byte zusammengefasst und mehrere Bytes werden auch Wort genannt (meist zwei oder vier Bytes, der Begriff ist aber nicht eindeutig definiert). Für größere Datenmengen sind die folgenden Maßeinheiten gebräuchlich: • Kibibyte (KiB): 1 KiB = 210 = 1.024 ≈ 103 Bytes = 1 Kilobyte • Mebibyte (MiB): 1 MiB = 220 = 1.048.576 ≈ 106 Bytes = 1 Megabyte • Gebibyte (GiB): 1 GiB = 230 = 1.073.741.824 ≈ 109 Bytes = 1 Gigabyte • Tebibyte (TiB): 1 TiB = 240 = 1.099.511.627.776 ≈ 1012 Bytes = 1 Terabyte ?

• Pebibyte (PiB): 1 PiB = 250 = 1.125.899.906.842.624 ≈ 1015 Bytes = 1 Petabyte • ... Für die fettgedruckten Einheiten werden umgangssprachlich oft auch alternativ die Begriffe Kilobyte (kB), Megabyte (MB), Gigabyte (GB), Terabyte (TB) und Petabyte (PB) genutzt, die jedoch strenggenommen die Zehnerpotenzen 103 , 106 , . . . bezeichnen und somit nicht genau den über Zweierpotenzen definierten Werten 210 , 220 , . . . entsprechen. Um präzise Aussagen über Speichervolumina zu machen, sollte man diesen Unterschied genau kennen (zumal sich jeweils die beiden alternativen Begriffe in ihrer Bedeutung mit zunehmender Größe relativ immer weiter voneinander entfernen; ob 1 PiB noch als „ungefähr gleich“ zu 1 PB gilt, bei einer Abweichung von etwa 12,6%, ist je nach Kontext schon zweifelhaft).

B

Klassifizierung von Sprachen

Die folgende Tabelle stellt für die Sprachklassen der Chomsky-Hierarchie L0 , . . . , L3 sowie für die Klasse aller Sprachen ℘(E  ) über einem Alphabet E übliche Charakterisierungsarten durch Automaten, Grammatiken sowie auf andere Weise (falls vorhanden) dar. Darüber hinaus wird für jede Sprachklasse eine „typische“ Sprache angegeben, die sich in dieser Klasse, aber nicht in der darüberliegenden, eingeschränkten Klasse befindet. In der rechten Spalte wird der Zeitaufwand des Wortproblems im schlimmsten Fall für die jeweilige Sprachklasse angegeben. Im Folgenden ist E ein Alphabet und es gilt $  E; in der letzten Zeile bezeichnen wir mit wi bzw. T i das i-te Wort bezüglich einer festen Sortierung aller Wörter bzw. die durch das i-te Wort kodierte Turingmaschine; det./ndet. steht für deterministisch/nichtdeterministisch.

Typische Sprache(n)

Wortproblem (Zeit)

{w | |w| mod k = 0} mit w ∈ E  und k ∈ N konstant

O(n)



{an bn | n ∈ N0 } {w$w | w ∈ E  }

O(n)

PumpingLemma

{ww | w ∈ E  }

O(n3 )



{an bn cn | n ∈ N0 } {an1 an2 . . . ank | k, n ∈ N0 , ai ∈ E}

O(2n )

Det./ndet. Turingmaschine

Entscheidbare Sprachen Aufzählbare Sprachen

{(α1 , α2 ) | L(α1 ) = L(α2 )} mit α1 , α2 ∈ RA(E) {(T, w) | T hält auf w} für Turingmaschine T und w ∈ E 





{wi ∈ E  | wi  L(T i )}

Grammatik

Automat

Reguläre Sprachen

Rechtsoder linkslineare Grammatik

L2

LR-kGrammatik

Kontextsensitive Sprachen

Kontextfreie Grammatik Kontextsensitive oder monotone Grammatik

Det./ndet. endlicher Automat; λ-Automat Det. Kellerautomat Ndet. Kellerautomat Ndet. linear beschränkte Turingmaschine

L0





Allgemeine Grammatik −

L3

Kontextfreie Sprachen L1

Typ-0Sprachen ℘(E  ) Alle Sprachen

Sonstige Charakterisierung Reguläre Ausdrücke; PumpingLemma

Rekursiv aufzählbar Rekursiv aufzählbar Nicht rekursiv aufzählbar

188

B Klassifizierung von Sprachen

Die typischen Sprachen für L0 und ℘(E  ) sind etwas komplizierter als die für L1 , . . . , L3 . Bei den entscheidbaren Typ-0-Sprachen ist die typische Sprache das Äquivalenzproblem regulärer Ausdrücke, also die Frage, ob zwei gegebene reguläre Ausdrücke dieselbe Sprache definieren oder nicht. Für die nicht entscheidbaren Typ-0-Sprachen ist die angegebene typische Sprache das Halteproblem für Turingmaschinen, also die Frage, ob eine (durch ihre Kodierung) gegebene Turingmaschine auf eine gegebene Eingabe anhält oder ewig weiterläuft. Für ℘(E  ) ist als typische Sprache die sogenannte Diagonalsprache angegeben, also die Sprache der Kodierungen all derjenigen Turingmaschinen, die ihre eigene Kodierung als Eingabe nicht akzeptieren. Alternativ könnte man hier beispielsweise auch das Komplement des Halteproblems angeben oder das Äquivalenzproblem von Turingmaschinen.

Literaturverzeichnis [Esc93]

B. Eschermann. Funktionaler Entwurf Digitaler Schaltungen: Methoden und CAD-Techniken. Springer-Verlag, 1993.

[Fly72]

M. Flynn. „Some Computer Organizations and Their Effectiveness“. In: IEEE Transactions on Computers C-21 (1972), S. 948–960.

[GW05]

D. Goldin und P. Wegner. „The Church-Turing Thesis: Breaking the Myth“. In: New Computational Paradigms. Springer, 2005, S. 152–168.

[HMU11]

J. E. Hopcroft, R. Motwani und J. D. Ullman. Einführung in Automatentheorie, Formale Sprachen und Berechenbarkeit. Addison-Wesley, 2011.

[Jaf78]

J. Jaffe. „A necessary and sufficient pumping lemma for regular languages“. In: SIGACT News 10 (1978), S. 48–49.

[Jun+12]

J. Jung u. a. „Walking intent detection algorithm for paraplegic patients using a robotic exoskeleton walking assistant with crutches“. In: International Journal of Control, Automation and Systems 10 (2012), S. 954–962.

[KMS09]

L. König, S. Mostaghim und H. Schmeck. „Decentralized Evolution of Robotic Behavior using Finite State Machines“. In: International Journal of Intelligent Computing and Cybernetics 2 (2009), S. 695–723.

[Pfe+12]

F. Pfeiffer u. a. „An Interactive Pool of Exercises for Individual Learning Support in Academic Courses“. In: Proceedings of the 2012 World Conference on Educational Media and Technology (EdMedia2012). AACE, 2012, S. 442–452.

[Ric73]

C. L. Richards. „An easy way to design complex program controllers“. In: Electronics 1 (1973), S. 107–113.

[Sch08]

U. Schöning. Theoretische Informatik – kurz gefasst. Spektrum, 2008.

[Tan07]

A. S. Tanenbaum. Modern Operating Systems. Prentice Hall, 2007.

[Tur36]

A. M. Turing. „On computable numbers, with an application to the Entscheidungsproblem“. In: Proceedings of the London mathematical society 42.2 (1936), S. 230–265.

[Weg05]

I. Wegener. Theoretische Informatik – eine algorithmenorientierte Einführung. Teubner Verlag, 2005.

[Wob01]

R. Wobst. Abenteuer Kryptologie – Methoden, Risiken und Nutzen der Datenverschüsselung. Addison-Wesley, 2001.