Powerpoint-Präsentation

Download Report

Transcript Powerpoint-Präsentation

Endliche Automaten
Klaus Becker
2010
2
Endliche Automaten
3
Teil 1
Zustandsbasierte Modellierung
4
An der Tankstelle
Kennst du diese Situation? Das Auto soll aufgetankt werden. Man fährt an die erst beste freie
Zapfsäule, hält die Zapfpistole in den Tank und zieht den Hebel an der Zapfpistole an. Meistens
funktioniert das. Gelegentlich kommt es aber auch vor, dass (vorerst) kein Benzin aus der
Zapfpistole fließt. Hat die Tankstelle kein Benzin mehr, oder ist die Zapfpistole defekt, oder ...?
Quelle: http://commons.wikimedia.org/wiki/File:Hose_(PSF).png
5
An der Tankstelle
Das oben gezeigte Zustandsdiagramm zeigt in vereinfachter Form, wie sich das System
Zapfpistole verhält. Bei bestimmten Ereignissen wie z.B. "Hebel anziehen" reagiert das System
mit Aktionen wie z.B. "Benzin fließt". Allerdings hängt das Verhalten des Systems vom
aktuellen Zustand des Systems ab.
6
Aufgabe
Das oben gezeigte Zustandsdiagramm ist nicht vollständig. Es beschreibt z.B. nicht, was
geschieht, wenn man im Zustand bereit den Hebel anzieht.
Es beschreibt die Wirklichkeit auch nicht ganz korrekt. Z.B. hört des Benzin irgendwann auf, in
den Tank zu fließen.
Mache Vorschläge, wie ein Zustandsdiagramm aussehen könnte, das die Wirklichkeit adäquater
beschreibt.
7
Zustandsbasierte Modellierung
Das Verhalten vieler Systeme lässt sich mit Hilfe von Zuständen beschreiben. Anhängig vom
jeweiligen Zustand reagiert das System auf Ereignisse mit unterschiedlichen Aktionen. Ein
solches zustandsbasiertes Verhalten lässt sich mit Hilfe eines Zustandsdiagramms übersichtlich
darstellen.
8
Zustandsbasierte Modellierung
Im Zustandsdiagramm werden alle möglichen Zustände durch Kreise (Ellipsen oder
abgerundete Rechtecke) dargerstellt. Oft wird ein Zustand als Anfangszustand ausgezeichnet.
Ein Zustandsübergang beschreibt, wie das System auf ein Ereignis reagiert. Das System kann
in einen neuen Zustand wechseln, aber auch im bestehenden Zustand verbleiben. Oft werden
bei solchen Zustandsübergängen bestimmte Aktionen ausgeführt. Manchmal hängt ein
Zustandsübergang auch davon ab, ob eine bestimmte Bedingung erfüllt ist.
Zustand
Zustandsübergang
9
Simulation eines Aufzugs
Der Aufzug soll nur zwischen zwei
Stockwerken hin- und herpendeln. In der
Kabine befinden sich zwei Knöpfe, mit
denen man den Aufzug steuern kann.
Zusätzlich gibt es oben und unten
Haltesensoren, die den Aufzug jeweils
stoppen.
Bevor der Aufzug (mit Hilfe eines
Python-Programms) simuliert werden
kann, muss das Verhalten des Aufzugs
möglichst genau beschrieben / modelliert
werden.
10
Aufgabe
Entwickle ein zustandbasiertes Modell
zur Beschreibung des Aufzugverhaltens.
Welche Zustände hat das System?
Auf welche Ereignisse reagiert das
System, welche Aktionen führt es aus?
11
Ein zustandsbasiertes Modell ...
12
... und seine Implementierung
# Konstanten für die Zustände
q0 = 'steht unten'
q1 = 'fährt aufwärts'
q2 = 'steht oben'
q3 = 'fährt abwärts'
# Konstanten für die Ereignisse
e0 = 'HaltUnten'
e1 = 'HaltOben'
e2 = 'TasteUnten'
e3 = 'TasteOben'
# Konstanten für die Aktionen
a0 = 'hinauf'
a1 = 'hinab'
a2 = 'stopp'
...
# Klasse Aufzug
class Aufzug(object):
def __init__(self):
self.zustand = q0
def verarbeite(self, ereignis):
if self.zustand == q0:
if ereignis == e0:
self.zustand = q4
aktion = a2
elif ereignis == e1:
self.zustand = q4
aktion = a2
# ...
elif self.zustand == q1:
if ereignis == e0:
self.zustand = q4
aktion = a2
# ...
# Test
aufzug = Aufzug()
print(aufzug.zustand)
print(aufzug.verarbeite('TasteUnten'))
print(aufzug.zustand)
print(aufzug.verarbeite('TasteOben'))
print(aufzug.zustand)
print(aufzug.verarbeite('TasteUnten'))
print(aufzug.zustand)
13
Aufgabe
# Konstanten für die Zustände
q0 = 'steht unten'
q1 = 'fährt aufwärts'
q2 = 'steht oben'
q3 = 'fährt abwärts'
# Konstanten für die Ereignisse
e0 = 'HaltUnten'
e1 = 'HaltOben'
e2 = 'TasteUnten'
e3 = 'TasteOben'
# Konstanten für die Aktionen
a0 = 'hinauf'
a1 = 'hinab'
a2 = 'stopp'
...
Ergänze in der Klasse Aufzug die Methode
verarbeite gemäß der oben gezeigten
zustandsbasierten Verhaltensbeschreibung.
Ergänze weitere Tests des Aufzugs.
# Klasse Aufzug
class Aufzug(object):
def __init__(self):
self.zustand = q0
def verarbeite(self, ereignis):
if self.zustand == q0:
if ereignis == e0:
self.zustand = q4
aktion = a2
elif ereignis == e1:
self.zustand = q4
aktion = a2
# ...
elif self.zustand == q1:
if ereignis == e0:
self.zustand = q4
aktion = a2
# ...
# Test
aufzug = Aufzug()
print(aufzug.zustand)
print(aufzug.verarbeite('TasteUnten'))
print(aufzug.zustand)
print(aufzug.verarbeite('TasteOben'))
print(aufzug.zustand)
print(aufzug.verarbeite('TasteUnten'))
print(aufzug.zustand)
14
Zur grafischen Simulation des
beschriebenen Aufzug lade die Datei
aufzug0.txt (siehe inf-schule) herunter
und ändere die Dateiendung in
aufzug0.py ab. Ergänze in der Klasse
Aufzug die Methode verarbeite gemäß
der gezeigten zustandsbasierten
Verhaltensbeschreibung. Teste das
Simulationsprogramm.
Aufgabe
15
Übungen
Aufgabe:
Wie funktioniert die modellierte Digitaluhr? Beschreibe es in eigenen Worten.
16
Übungen
Aufgabe:
Entwickle ein zustandsbasiertes Modell zur Beschreibung der
Funktionsweise eines Garagentors.
Zur Steuerung des Garagentors wird eine Taste auf einem Handsender
benutzt. Wenn das Tor geschlossen ist, dann führt das Drücken der
Taste dazu, dass der Motor das Tor öffnet. Wird während dieses
Vorgangs die Taste erneut gedrückt, stoppt das Tor. Ein nochmaliges
Drücken setzt das Tor in die entgegengesetzte Richtung in Bewegung.
Bei anfangs geöffnetem Tor verläuft alles entsprechend umgekehrt.
Wenn das Tor die obere bzw. untere Endposition erreicht hat, wird
jeweils ein Kontaktschalter geschlossen und der Motor abgeschaltet.
17
Übungen
Aufgabe:
Der Zugang zu Parkplätzen wird oft durch Schranken geregelt. Nur, wer
im Besitz eines Schlüssels ist, kann die Schranke öffnen. Das Schließen
der Schranke sowie das Öffnen bei der Ausfahrt wird durch
Induktionsschleifen geregelt.
Entwickle ein zustandsbasiertes Modell einer Parkplatzschranke.
18
Übungen
Aufgabe:
Entwickle für eines der modellierten Systeme ein Simulationsprogramm.
19
Teil 2
Endliche Automaten
Getränkeautomat
20
Zustände:
z0:
z50:
z100:
z150:
0 Euro eingezahlt
0,50 Euro eingezahlt
1 Euro eingezahlt
1,50 Euro eingezahlt
Ereignisse / Eingaben:
e50:
e100:
eKorrektur:
eWare:
50-Cent-Münze einwerfen
1-Euro-Münze einwerfen
Korrektur-Taste drücken
Ware-Taste drücken
Aktionen / Ausgaben:
aNichts:
a50:
a100:
a150:
aGetränk:
nichts auswerfen
50-Cent-Münze auswerfen
1-Euro-Münze auswerfen
50-Cent-Münze und 1-Euro-Münze auswerfen
Getränk auswerfen
Aufgabe
21
Zustände:
z0:
z50:
z100:
z150:
0 Euro eingezahlt
0,50 Euro eingezahlt
1 Euro eingezahlt
1,50 Euro eingezahlt
Ereignisse / Eingaben:
e50:
e100:
eKorrektur:
eWare:
50-Cent-Münze einwerfen
1-Euro-Münze einwerfen
Korrektur-Taste drücken
Ware-Taste drücken
Wie liest man diese Tabelle? Ergänze selbst die letzte
Zeile.
Aktionen / Ausgaben:
aNichts:
a50:
a100:
a150:
aGetränk:
nichts auswerfen
50-Cent-Münze auswerfen
1-Euro-Münze auswerfen
50-Cent-Münze und 1-Euro-Münze auswerfen
Getränk auswerfen
22
Aufgabe
Zustand: z0
Eingabe: e50
Ausgabe: aNichts
Zustand: z50
Eingabe: e50
Ausgabe:
Zustand:
Eingabe: e100
Ausgabe:
Zustand:
Eingabe: eWare
Ausgabe:
Zustand:
Eingabe: eKorrektur
Ausgabe:
Zustand:
Eingabe: e50
Ausgabe:
Zustand:
Eingabe: e50
Ausgabe:
Zustand:
Eingabe: e50
Ausgabe:
Zustand:
Eingabe: eWare
Ausgabe:
Zustand:
Ergänze in dem Ablaufprotokoll die fehlenden Zustände und Ausgaben.
23
Fachkonzept - endlicher Automat
Der Getränkeautomat wird als Verarbeitungseinheit modelliert, die aus Eingaben - in
Abhängigkeit des aktuellen Zustands - Ausgaben erzeugt und gegebenenfalls in einen neuen
Zustand wechselt. Die Verarbeitungslogik dieser Verarbeitungseinheit kann mit Hilfe eines
Zustandsdiagramms oder einer Zustandstabelle festgelegt werden.
Zustandstabelle
Zustandsdiagramm
24
Fachkonzept - endlicher Automat
Ein endlicher Automat (kurz: EA) ist eine
Verarbeitungseinheit, die durch folgende
Bestandteile festgelegt wird:
 eine nichtleere, endliche Menge Z von
Zuständen
Z = {z0, z50, z100, z150}
 eine nichtleere, endliche Menge E von
Eingabesymbole
E = {e50, e100, eKorrektur, eWare}
 eine nichtleere, endliche Menge A von
Ausgabesymbole
 eine Überführungsfunktion f: Z x E -> Z,
die jedem Paar aus aktuellem Zustand und
Eingabe einen Folgezustand zuordnet
 eine Ausgabefunktion g: Z x E -> A, die
jedem Paar aus aktuellem Zustand und
Eingabe eine Ausgabe zuordnet
 ein ausgezeichnetes Element
z0  Z, der sogenannte
Anfangszustand
Automatentafel
A = {aNichts, a50, a100, a150, aGetränk}
f: (z0, e50) -> z50; ...
g: (z0, e50) -> aNichts; ...
z0 = z0
formale Beschreibung eines endlichen Automaten
25
Simulation endlicher Automaten
class Automat(object):
def __init__(self):
# Zustände
self.zustaende = ('z0','z50','z100','z150')
# Eingaben
self.eingaben = ('e50','e100','eKorrektur','eWare')
# Ausgaben
self.ausgaben = ('aNichts','a50','a100','a150','aGetraenk')
# Automatentafel
self.f = [[(0,1),(0,2),(0,0),(0,0)],
[(0,2),(0,3),(1,0),(0,1)],
[(0,3),(2,2),(2,0),(0,2)],
[(1,3),(2,3),(3,0),(4,0)]]
# Anfangszustand
self.zustand = 0
def verarbeite(self, eingabe):
(ausgabe, self.zustand) = self.f[self.zustand][eingabe]
return ausgabe
>>> a = Automat()
>>> a.zustand
0
>>> a.verarbeite(1)
0
>>> a.zustand
2
Die Implementierung benutzt ein
einheitliches Schema, mit dem
jeder endliche Automat simuliert
werden kann. Das Schema greift
dabei die Präzisierung des
Fachkonzepts endlicher Automat
auf.
Automatentafel
Präzisierung erweist sich hier also
als Schlüssel, um eine ganze
Problemklasse (Simulation
zustandsbasierter Systeme)
einheitlich zu bearbeiten.
26
Simulation endlicher Automaten
class Automat(object):
def __init__(self):
self.zustaende = ('z0','z50','z100','z150')
self.eingaben = ('e50','e100','eKorrektur','eWare')
self.ausgaben = ('aNichts','a50','a100','a150','aGetraenk')
self.f = [[(0,1),(0,2),(0,0),(0,0)],
[(0,2),(0,3),(1,0),(0,1)],
[(0,3),(2,2),(2,0),(0,2)],
[(1,3),(2,3),(3,0),(4,0)]]
self.zustand = 0
def verarbeite(self, eingabeString):
if eingabeString in self.eingaben:
eingabe = list(self.eingaben).index(eingabeString)
(ausgabe, self.zustand) = self.f[self.zustand][eingabe]
ausgabeString = self.ausgaben[ausgabe]
else:
ausgabeString = 'keine Verarbeitung möglich'
return ausgabeString
def getZustand(self):
return self.zustaende[self.zustand]
>>> a = Automat()
>>> a.getZustand()
'z0'
>>> a.verarbeite('e50')
'aNichts'
Automatentafel
27
Übungen
Aufgabe:
Beschreibe das abgebildete zustandsbasierte Modell als endlichen Automaten. Gibt hierzu die
Bestandteile des endlichen Automaten genau an.
28
Übungen
Aufgabe:
Entwickle analog zum Simulationsprogramm für den Getränkeautomaten ein
Simulationsprogramm für den Aufzug.
29
Teil 3
Spracherkennung mit endlichen Automaten
30
Dieser Automat verarbeitet
Eingaben, erzeugt aber keine
Ausgaben. An den Pfeilen zur
Darstellung der
Zustandsübergänge sind (mit
Komma abgetrennt) nur die
Eingabezeichen aufgelistet, die
den jeweiligen
Zustandsübergang bewirken.
Es sind aber keine zugehörigen
Ausgabezeichen aufgeführt.
Einige Zustände sind zudem
durch Doppelkreise
hervorgehoben. Diese
Zustände haben eine
besondere Bedeutung. Wenn
der Automat bei der
Verarbeitung von
Eingabefolgen in einen solchen
Zustand gerät, dann gilt die
Eingabefolge als akzeptiert,
ansonsten als nicht akzeptiert.
Zahldarstellung
31
(a) Betrachte die folgenden
Zeichenfolgen als
Eingabefolgen, die vom oben
vorgegebenen Automaten
verarbeitet werden sollen.
Welche dieser Zeichenfolgen
werden vom Automaten
akzeptiert, welche nicht?
81
0
007
4.2
1.2.3
4.
0.23
.67
0.001
(b) Versuche allgemein in
Worten zu beschreiben, welche
Zeichenfolgen vom Automaten
akzeptiert werden.
Aufgabe
32
Fachkonzept - Akzeptor
Ein Akzeptor bzw. erkennender Automat ist
eine Verarbeitungseinheit, die durch folgende
Bestandteile festgelegt wird:
Z = {q0, q1, q2, q3, q4, q5, q6}
 eine nichtleere, endliche Menge Z von
Zuständen
f: (q0, 0) -> q2; (q0, 1) -> q1; ...
 eine nichtleere, endliche Menge E von
Eingabesymbole
 eine Überführungsfunktion f: Z x E -> Z,
die jedem Paar aus aktuellem Zustand und
Eingabe einen Folgezustand zuordnet
 ein ausgezeichnetes Element z0  Z, der
sogenannte Anfangszustand
 einer Menge ZE  Z von Endzuständen
E = {., 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
z0 = q0
ZE = {q2, q3, q5}
33
Fachkonzept - Akzeptor
Die Menge E der Eingabesymbole eines
Akzeptors A = (Z, E, f, z0, ZE) kann als
Alphabet einer Sprache aufgefasst werden.
Unter der Sprache eines Akzeptors versteht
man die Menge aller Wörter über dem
Alphabet E, die den Automaten vom
Anfangszustand z0 in einen Endzustand aus
ZE überführen.
Wenn A = (Z, E, f, z0, ZE) ein gegebener
Akzeptor ist, dann schreiben wir L(A) für die
Sprache des Akzeptors A.
 = {., 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
L(A) = {0, 1, 2, ..., 12.375, ...}
34
Fachkonzept - Akzeptor
Ein Akzeptor ist also eine Verarbeitungseinheit, die Symbole eines Eingabeworts verarbeitet und
sich dabei stets in einem bestimmten Zustand befindet. Anhand des aktuellen Zustands kann
dann festgestellt werden, ob das zu verarbeitende Eingabewort akzeptiert wird oder nicht.
35
Experimente mit JFlap
Beachte bei der Eingabe des Automaten, dass Zustandsübergänge zu verschiedenen Eingaben
so wie in der folgenden Abbildung erzeugt werden. Eine Auflistung der Eingaben führt hier
nicht zum gewünschten Verhalten.
36
Übungen
Python lässt eine Vielzahl an Darstellungen
bei Fließkommazahlen zu:
4.2
4.
0.001
.67
007.
...
(a) Teste selbst, welche Darstellungen bei
Fließkommazahlen in Python erlaubt sind
und welche nicht. Eine exakte Beschreibung
der möglichen Zahldarstellungen findest du
in den gezeigten Syntaxdiagrammen.
(b) Entwickle einen Automaten ohne
Ausgaben, der die in Python erlaubten
Fließkommazahlen (ohne Exponent / mit
Exponent) akzeptiert.
37
Übungen
Emoticons:
Entwickle einen Automaten ohne Ausgabe, der Emoticons für ein lachendes Gesicht erkennt.
(siehe http://de.wikipedia.org/wiki/Emoticon)
38
Übungen
Mustererkennung in Texten:
Oft kommt es vor, dass man einen Text daraufhin untersuchen muss, ob er ein bestimmtes
Textmuster enthält (z.B. ob eine Webadresse die Zeichenkette "sex" enthält).
Das soll in vereinfachter Form hier durchgespielt werden.
Entwickle einen endlichen Automaten ohne Ausgaben, der Binärzahlen daraufhin untersucht,
ob sie
(a) die Zeichenkette 101
(b) die Zeichenkette 1011
enthalten.
Warum ist Fall (b) schwieriger als Fall (a)?
Statt Binärzahlen kannst du auch Wörter über dem Alphabet  = {a, i, n} betrachten, die das
Teilwort (a) "anni" bzw. (b) "nina" enthalten.
39
Ausblick - Theoriebildung
Wir betrachten die Sprache LEMail der stark vereinfachten EMail-Adressen, die durch folgende Syntaxdiagramme
festgelegt wird. Beachte, dass in diesen Adressen nur die
Symbole b, @ und . vorkommen dürfen. Eine nach diesen
Syntaxdiagrammen gültige E-Mail-Adresse ist z.B.
[email protected].
Problem:
Gibt es einen Akzeptor A, der die Sprache LEMail erkennt?
Aufgabe:
Versuche, einen Akzeptor A mit L(A) = LEMail zu
konstruieren.
40
Ausblick - Theoriebildung
Wir betrachten die Sprache LKlammer der stark vereinfachten
Klammerausdrücke, die durch folgende Syntaxdiagramme
festgelegt wird. Zur Sprache LKlammer gehören also alle
Klammerausdrücke der Gestalt ((())), bei denen nach einer
Folge öffnender Klammern genau so viele schließende
Klammern folgen.
Problem:
Gibt es einen Akzeptor A, der die Sprache LKlammer erkennt?
Aufgabe:
Versuche, einen Akzeptor A mit L(A) = LKlammer zu
konstruieren.
41
Teil 4
Endliche Automaten und reguläre Sprachen
42
Fallstudie - Binärzahlen
Zusammenhänge zwischen Sprachen und Automaten lassen sich sehr gut mit dem Werkzeug
JFlap erkunden. In einem ersten Schritt werden solche Zusammenhänge durch Experimente
erkundet. In einen zweiten Schritt werden die Zusammenhänge dann aufgegriffen und
präzisiert. Als Untersuchungsgegenstand wird in diesem Abschnitt die Sprache der Binärzahlen
gewählt.
Binärzahlen sind Zahlen, die im Dualsystem / Zweiersystem dargestellt sind und daher nur die
Symbole 0 und 1 zur Zahldarstellung benutzen. Die folgende Zahlenreihe beschreibt, wie man
im Dualsystem / Zweiersystem zählt:
0, 1, 10, 11, 100, 101, 110, 111, 1000, ...
Binärzahlen sind Wörter über dem Alphabet Σ = {0, 1}. Die Sprache der Binärzahlen LBin
besteht aus sämtlichen Wörtern über Σ = {0, 1}, die eine Binärzahl darstellen:
LBin = {0, 1, 10, 11, 100, 101, 110, 111, 1000, ...}
43
JFlap: Vom Automaten zur Grammatik
Aufgabe: Wie wird die Grammatik aus dem Akzeptor erzeugt? Wenn du es verstanden hast,
dann gib einen Automaten vor, erzeuge selbst die zugehörige Grammatik und überprüfe deinen
Vorschlag.
44
JFlap: Von der Grammatik z. Automaten
Aufgabe: Wie der Akzeptor aus der Grammatik erzeugt? Wenn du es verstanden hast, dann gib
eine Grammatik vor, erzeuge selbst den zugehörigen Akzeptor und überprüfe deinen Vorschlag.
Reguläre Sprachen
45
Zum erkennenden Automaten A lässt sich die Grammatik GA erzeugen. Es fällt auf, dass alle
Produktionen dieser Grammatik GA eine bestimmte Struktur haben.
S -> 0B
B -> λ
S -> 1A
A -> 0A
A -> 1A
A -> λ
Nichtterminalsymbol
Nichtterminalsymbol
A -> λ
S -> 0B
Terminalsymbol
Nichtterminalsymbol
leeres Wort
46
Fachkonzept - reguläre Sprache
Eine Produktion u -> v heißt regulär genau
dann, wenn gilt: Die linke Seite u der
Produktion ist ein Nichtterminalsymbol. Die
rechte Seite v der Produktion besteht aus
einem Terminalsymbol gefolgt von einem
Nichtterminalsymbol, oder sie besteht nur
aus dem leeren Wort.
Eine Grammatik heißt regulär genau dann,
wenn alle Produktionen der Grammatik
regulär sind.
Eine Sprache heißt regulär genau dann,
wenn es eine reguläre Grammatik gibt, die
diese Sprache erzeugt.
LBin = {0, 1, 10, 11, 100, 101, 110, 111, ...}
S -> 0B
B -> λ
S -> 1A
A -> 0A
A -> 1A
A -> λ
S -> 0
S -> 1R
R -> ZR
R -> λ
Z -> 0
Z -> 1
reguläre Grammatik für LBin
nicht-reguläre Grammatik für LBin
Beachte, dass es zu einer regulären Sprache durchaus nicht-reguläre Grammatiken geben
kann. Um nachzuweisen, dass eine Sprache regulär ist, reicht es aus, eine reguläre Grammatik
zur Sprache zu konstruieren. Zu einer Sprache kann man stets eine Vielzahl von Grammatiken
angeben. Auch wenn man noch keine reguläre Grammatik zu einer Sprache gefunden hat, so
heißt das noch nicht, dass die Sprache nicht-regulär ist.
47
Nichtdeterministischer Automat
Zur Grammatik G lässt sich ein Automat AG erzeugen. Es fällt auf, dass dieser Automat kein
endlicher Automat im bisherigen Sinne ist.
A -> 1B
A -> 0C
A -> 1C
C -> λ
B -> 0B
B -> 1B
B -> 0D
B -> 1D
D -> λ
nichtdeterministische
Zustandsübergänge
Zustandsübergänge ohne
Eingaben
48
Fachkonzept - Nichtdeterm. Automat
Einen endlichen Automaten, der nichtdeterministische Zustandsübergänge und λ-Übergänge
zulässt, nennt man nichtdeterministischen endlichen Automaten (kurz: NFA für
nondeterministic finite automaton). Entsprechend nennt man einen endlichen Automaten, der
keine nichtdeterministische Zustandsübergänge und keine λ-Übergänge enthält, einen
deterministischen endlichen Automaten (kurz: DFA für deterministic finite automaton).
deterministischer
endlicher Automat
nichtdeterministischer
endlicher Automat
49
Spracherkennung mit einem NFA
Spracherkennung mit nichtdeterministischen Automaten funktioniert so ähnlich wie
Spracherkennung mit deterministischen Automaten. Man muss nur alle möglichen
Zustandsübergänge für eine Eingabe durchspielen. Wenn nach der Verarbeitung des gesamten
Eingabeworts ein Endzustand erreicht werden kann, dann gilt die Eingabe als akzeptiert,
ansonsten als nicht akzeptiert.
50
Zusammenhang zwischen DFA und NFA
Satz (Zusammenhang zwischen deterministischen und nichtdeterministischen Automaten):
Zu jedem nichtdeterministischen erkennenden Automaten gibt es einen deterministischen
erkennenden Automaten, der dieselbe Sprache erkennt. Man kann den deterministischen
erkennenden Automaten automatisiert aus dem nichtdeterministischen erkennenden
Automaten erzeugen.
51
Theorie - reg. Sprachen und Automaten
Satz (Zusammenhang zwischen deterministischen Automaten und regulären Sprachen):
Die Sprache eines deterministischen erkennenden Automaten (Akzeptors) ist regulär: Zum
deterministischen erkennenden Automaten gibt es eine reguläre Grammatik, die dieselbe
Sprache erzeugt, die vom Automaten erkannt wird. Man kann diese reguläre Grammatik
automatisiert erzeugen.
S -> 0B
B -> λ
S -> 1A
A -> 0A
A -> 1A
A -> λ
52
Theorie - reg. Sprachen und Automaten
Satz (Zusammenhang zwischen regulären Sprachen und nichtdeterministischen Automaten):
Zu jeder regulären Sprache gibt es einen nichtdeterministischen erkennenden Automaten, der
diese Sprache erkennt. Der nichtdeterministische erkennende Automat kann automatisiert aus
einer reguläre Grammatik zur regulären Sprache erzeugt werden.
Satz (Zusammenhang zwischen regulären Sprachen und deterministischen Automaten):
Zu jeder regulären Sprache gibt es einen deterministischen erkennenden Automaten, der diese
Sprache erkennt. Der deterministische erkennende Automat kann automatisiert aus einer
reguläre Grammatik zur regulären Sprache erzeugt werden.
A -> 1B
A -> 0C
A -> 1C
C -> λ
B -> 0B
B -> 1B
B -> 0D
B -> 1D
D -> λ
Anwendung der Theorie
53
Problem:
Gibt es einen Akzeptor A, der die Sprache LEMail (die durch
die Syntaxdiagramme festgelegt wird) erkennt?
E -> U@D
U -> N
D -> ST
S -> N.
S -> N.S
T -> bb
N -> B
N -> BN
B -> b
E -> bU
U -> bU
U -> @S
S -> bB
B -> bB
B -> .S
B -> .T
T -> bZ
Z -> b
E -> bU
U -> bU
U -> @S
S -> bB
B -> bB
B -> .S
B -> .T
T -> bZ
Z -> bX
X -> λ
regulär
Lösung:
Nach dem Satz über den Zusammenhang zwischen
regulären Sprachen und deterministischen Automaten gibt
es zu dieser Grammatik einen deterministischen
erkennenden Automaten, der die von der Grammatik
erzeugte Sprache erkennt. Dieser Automat kann auch
Schritt für Schritt (z.B. mit Hilfe von JFlap) erzeugt werden
(siehe Übungen).
54
Anwendung der Theorie
Problem:
Gibt es einen Akzeptor A, der die Sprache LEMail (die durch
die Syntaxdiagramme festgelegt wird) erkennt?
NFA
Lösung:
Der Automat zur Erkennung von LEMail ist
nichtdeterministisch. Nach dem Satz über den
Zusammenhang zwischen deterministischen und
nichtdeterministischen Automaten gibt es einen
deterministischen erkennenden Automaten, der dieselbe
Sprache erkennt. Dieser Automat kann auch Schritt für
Schritt (z.B. mit Hilfe von JFlap) erzeugt werden (siehe
Übungen).
55
Übungen
Erzeuge mit JFlap einen Akzeptor A, der die Sprache LEMail
(die durch die Syntaxdiagramme festgelegt wird) erkennt.
56
Übungen
Mustererkennung in Texten:
Oft kommt es vor, dass man einen Text daraufhin untersuchen muss, ob er ein bestimmtes
Textmuster enthält (z.B. ob eine Webadresse die Zeichenkette "sex" enthält).
Das soll in vereinfachter Form hier durchgespielt werden.
Entwickle einen endlichen Automaten ohne Ausgaben, der Binärzahlen daraufhin untersucht,
ob sie
(a) die Zeichenkette 101
(b) die Zeichenkette 1011
enthalten.
Warum ist Fall (b) schwieriger als Fall (a)?
Statt Binärzahlen kannst du auch Wörter über dem Alphabet  = {a, i, n} betrachten, die das
Teilwort (a) "anni" bzw. (b) "nina" enthalten.
57
JFlap: Vom reg. Ausdruck z. Automaten
JFlap kann aus einem regulären Ausdruck einen endlichen Automaten erzeugen. Der
Erzeugungsprozess ist bei komplexeren regulären Ausdrücken schwer zu durchschauen.
Einfacher geht das, wenn man nur Teilausdrücke von Jflap verarbeiten lässt, z.B. die regulären
Ausdrücke 10 (als Beispiel für eine Konkatenation), 0+1 (als Beispiel für eine Alternative) und
1* (als Beispiel für eine Iteration). Probiere das einmal aus und versuche, das
Umwandlungsverfahren zu beschreiben.
58
JFlap: Vom Automaten z. reg. Ausdruck
JFlap kann ebenfalls aus einem endlichen Automaten einen regulären Ausdruck erzeugen.
Probiere das einmal aus.
59
Vom regulären Ausdruck z. Automaten
Ø ist ein regulärer Ausdruck.
Er beschreibt die leere Wortmenge {}.
λ ist ein regulärer Ausdruck.
Er beschreibt die Wortmenge {λ}, in der nur
das leere Wort vorkommt.
Für jedes a  Σ ist a ein regulärer Ausdruck.
Der reguläre Ausdruck a beschreibt die
Wortmenge {a}.
Wenn α und β reguläre Ausdrücke sind, dann
ist auch die Konkatenation αβ ein regulärer
Ausdruck.
Wenn α die Wortmenge A und β die
Wortmenge B beschreibt, dann beschreibt
die Konkatenation αβ die Menge {ab | a  A
und b  B} aller Wörter, die mit einem Wort
aus A beginnen und mit einem Wort aus B
enden.
60
Vom regulären Ausdruck z. Automaten
Wenn α und β reguläre Ausdrücke sind, dann
ist auch die Alternative α+β ein regulärer
Ausdruck.
Wenn α die Wortmenge A und β die
Wortmenge B beschreibt, dann beschreibt
die Alternative α+β die Menge {w | w  A
oder w  B} aller Wörter, die in A oder in B
vorkommen.
Wenn α ein regulärer Ausdruck ist, dann ist
auch die Iteration α* ein regulärer Ausdruck.
Wenn α die Wortmenge A beschreibt, dann
beschreibt die Iteration α* die Menge A*
aller Wörter, die durch endlich-maliges
Aneinanderfügen von Wörtern aus A
entstehen.
61
Theorie - reg. Ausdrücke u. Automaten
Satz (Zusammenhang zwischen regulären Ausdrücken u. (nicht)deterministischen Automaten):
Zu jedem regulären Ausdruck gibt es einen nichtdeterministischen erkennenden Automaten
(und folglich auch einen deterministischen erkennenden Automaten), der die vom regulären
Ausdruck beschriebene Sprache erkennt. Der (nicht)deterministische erkennende Automat
kann automatisiert aus dem regulären Ausdruck erzeugt werden.
0+1(0+1)*
62
Theorie - reg. Ausdrücke u. Automaten
Satz (Zusammenhang zwischen (nicht)deterministischen Automaten u. regulären Ausdrücken):
Zu jedem nichtdeterministischen erkennenden Automaten (und folglich auch deterministischen
erkennenden Automaten) gibt es einen regulären Ausdruck, der die vom
(nicht)deterministische Automat erkannte Sprache beschreibt. Der reguläre Ausdruck kann
automatisiert aus dem erkennenden Automaten erzeugt werden.
Satz (über reguläre Sprachen und endliche Automaten):
Die Klasse der Sprachen, die mit einer regulären Grammatik beschrieben werden können, ist
identisch mit der Klasse der Sprachen, die mit einem regulären Ausdruck beschrieben werden
können, ebenso mit der Klasse der Sprachen, die von deterministischen endlichen Automaten
erkannt werden können, und ebenso mit der Klasse der Sprachen, die von
nichtdeterministischen endlichen Automaten erkannt werden können.
63
Übungen
Entwickle systematischen einen endlichen Automaten, die die Sprache zum regulären Ausdruck
a(a+b)*ab erkennt.
64
Übungen
Teste mit Hilfe von JFlap die Erzeugung von regulären Ausdrücken aus gegebenen endlichen
Automaten.
65
Aufwand bei der Spracherkennung
Grammatiken und reguläre Ausdrücke dienen zur Beschreibung von Sprachen. Sie sind nicht
auf schnelle Spracherkennung optimiert. Das zeigt sich, wenn man Experimente mit JFlap
durchführt.
66
Aufwand bei der Spracherkennung
Wenn man einen deterministischen endlichen Automaten zur Spracherkennung benutzt, dann
erhält man ohne Wartezeiten direkt eine Rückmeldung.
Grenzen von endlichen Automaten
67
Problem: Gesucht ist ein endlicher Automat, der die der Klammerausdrücke erkennt.
(((())))
aaaabbbb
ok
A
((())
aaabb
Fehler
Versuche, einen solchen endlichen Automaten A zu konstruieren, scheitern an der
Schwierigkeit, die Anzahl der öffnenden Klammern im Automaten mitzuzählen. Es scheint, dass
diese Schwierigkeit bei endlichen Automaten - die ja eine feste Anzahl von Zuständen haben unüberwindbar ist. Die folgenden Argumentationen zeigen, dass das tatsächlich der Fall ist.
Grenzen von endlichen Automaten
68
Gibt es einen endlichen Automaten, der L = {anbn | n = 1, 2, 3, ...} erkennt?
(((())))
aaaabbbb
ok
DFA
((())
aaabb
Fehler
Angenommen, es gibt einen endlichen Automaten A mit L(A) = L. Dieser Automat A hat eine
feste Anzahl Zustände, etwa m = 15 (die Zahl 15 ist hier willkürlich gewählt, sie spielt für die
Argumentation keine Rolle).
Wie wählen nun ein Wort w = akbk aus L = {anbn | n = 1, 2, 3, ...} aus mit k > m, etwa k = 16.
Bei der Abarbeitung des Wortes w = akbk muss bereits bei der Verarbeitung der 16 a's
mindestens ein Zustand z mindestens zweimal durchlaufen werden, denn es gibt mehr a's als
Zustände.
Wir nehmen einmal an, dass der Zustand z mit dem dritten a und mit dem siebten a erreicht
wird. Für die folgende Argumentation ist nicht entscheidend, mit welchen a's man z erreicht,
sondern nur, dass z zweimal durchlaufen wird.
Es entsteht eine Schleife, die erst mit dem ersten b wieder verlassen wird. Wie die 16 b's den
Automaten in einen Endzustand bringen, ist für die Argumentation ohne Belang.
69
Grenzen von endlichen Automaten
Die folgende Grafik soll die Situation verdeutlichen:
- A hat m Zustände (hier m = 15).
- A akzeptiert w = akbk mit k > m (hier w = a16b16).
- Bei d. Verarbeitung des a-Anfangsteils von w wird ein Zustand mindestens zweimal
durchlaufen werden (hier wird q3 insgesamt 4 mal durchlaufen).
Weitere spezielle
Eigenschaften von A, die in
der Grafik zu erkennen
sind, sind für den
Beweisgang nicht von
Bedeutung.
Grafik entnommen aus:
http://hsg.region-kaiserslautern.de/faecher/inf/material/automaten/anbn/index.php
70
Grenzen von endlichen Automaten
Dem Bild kann man direkt entnehmen,
dass neben w = a16b16 auch andere
Wörter wie a4b16 (Schleife wurde nicht
durchlaufen) oder auch a8b16 (Schleife
wurde einmal durchlaufen) akzeptiert
werden.
Der Automat akzeptiert folglich auch
Wörter, die nicht zu L = {anbn | n = 1, 2,
3, ...} gehören. Das steht aber im
Widerspruch zur Annahme, dass der
Automat A die Sprache L = {anbn | n =
1, 2, 3, ...} erkennt.
Da die Annahme, dass es einen
endlichen Automaten gibt, der die
Sprache L = {anbn | n = 1, 2, 3, ...}
erkennt, zu einem Widerspruch führt,
muss die Annahme falsch sein.
71
Grenzen von endlichen Automaten
Satz (über die Grenzen von endlichen Automaten):
Die Sprache L = {anbn | n = 1, 2, 3, ...} kann nicht von einem endlichen Automaten erkannt
werden. Sie ist also nicht regulär.
72
Literaturhinweise
F. Gasper, I. Leiß, M. Spengler, H. Stimm: Technische und theoretische Informatik. Bsv 1992.
E. Modrow: Automaten, Schaltwerke, Sprachen. Dümmlers Verlag 1988.
R. Baumann: Informatik für die Sekundarstufe II, Band 2. Klett-Verlag 1993.
Informatik heute, Band 2. Schroedel-Verlag 1988.
U. Schöning: Theoretische Informatik – kurzgefasst. Spektrum Akademischer Verlag 2001.
J. E. Hopcroft / J. D. Ullman: Einführung in die Automatentheorie, Formale Sprachen und
Komplexitätstheorie. Addison-Wesley 1988.
S. H. Rodger, T. W. Finley: JFLAP. Jones and Bartlett Publishers 2006.
...
Die Darstellung hier orientiert sich an den Materialien auf den Webseiten:
http://www.inf-schule.de