TGI-Skript S. 46 - 51 (PDF)
TGI-Skript S. 46 - 51 (PDF)
TGI-Skript S. 46 - 51 (PDF)
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Wir können an dieser Stelle die folgende Feststellung machen:<br />
Satz:<br />
Zu jedem deterministischen endlichen Automaten M = (Z, E, *, z 0, E) gibt es eine reguläre<br />
Grammatik G = (V, G, P, z 0) mit L(M) = L(G).<br />
Beweis:<br />
Jeder Zustand des Automaten M wird zu einem Nichtterminal der rechtslinearen Grammatik<br />
G, also Z = V. Gibt es einen Übergang *(z, a) = z', gilt z 6 az' 0 P. Falls z' Endzustand ist, kann<br />
man entweder statt z 6 az' nur die Produktion z 6 a hinzunehmen oder zusätzlich z' 6 g.<br />
Dass alles, was M erkennt auch von G produziert werden kann und umgekehrt, dass alles, was<br />
G produziert auch von M erkannt werden kann, ist wegen der Konstruktion von P aus * unmittelbar<br />
klar.<br />
Ê<br />
Allerdings muss an dieser Stelle auch darauf hingewiesen werden, dass die Definition des<br />
endlichen Automaten weder mit dem Z-Diagramm für die Grammatik<br />
S 6 aS | aB<br />
B 6 bC | bB<br />
C 6 aC | a<br />
noch mit dem für die Grammatik<br />
S 6 aB<br />
B 6 aB | bC<br />
C 6 bC | aD<br />
D 6 aD | g<br />
in den Eingangsbeispielen kompatibel ist. Im ersten Fall starten zwei Pfeile mit der Beschriftung<br />
b in B und gehen nach B bzw. C. Hier liegt ein nichtdeterministisches Verhalten vor. Um das zu<br />
modellieren, bräuchten wir eine Verallgemeinerung von *, was die Angabe *(B, b) = B und *(B,<br />
b) = C zum Ausdruck bringen würde. Dies könnte mit der Angabe *(B, b) = {B, C} geschehen.<br />
Im zweiten Fall gibt es einen g-Übergang, der, wie wir noch sehen werden, im allgemeinen<br />
Fall - also nicht gerade vor dem Übergang in den Endzustand - auch einen Nichtdeterminismus<br />
darstellt.<br />
Es wird sich zeigen, dass die genannten Probleme gelöst werden können, wobei wir noch<br />
weitere Definitionen benötigen.<br />
<strong>46</strong>
Definition:<br />
Ein nichtdeterministischer endlicher Automat (NEA) ist ein 5-Tupel (Z, E, *, s, E). Z , E, s<br />
und E sind - wie beim DEA - die Menge der Zustände, das Eingabealphabet, der Startzustand 9<br />
bzw. die Menge der Endzustände. Die Übergangsfunktion * wird erweitert zu * : Z × E 6 (Z),<br />
wobei (Z) die Potenzmenge von Z ist.<br />
Die erweiterte Übergangsfunktion ** des NEA wird definiert als:<br />
**(z, g) = {z}, für alle z 0 Z<br />
**(z, aw) = ^ z'0*(z, a) **(z', w), für a 0 E, w 0 E*<br />
Der Konfigurationsbegriff überträgt sich direkt.<br />
Das Paar k' = (z', w) heißt Folgekonfiguration von k, i. W. k | k', wenn v = aw mit w 0 E* ist<br />
und z' 0 *(z, a).<br />
Ein Automat M = (Z, E, *, z 0, E) erkennt / akzeptiert ein Wort a 1a 2...a n 0 E*, wenn es eine<br />
Folge von Konfigurationen (z 0, a 1a 2...a n) | (z 1, a 2...a n) | ... | (z n, g) gibt mit z n 0 E und für 0 # i<br />
< n gilt z i+1 0 *(z i, a i+1).<br />
Sei M = (Z, E, *, z 0, E) ein NEA. Dann ist die von M akzeptierte Sprache die Menge L(M) =<br />
{w | w 0 E*, (z 0, w) |* (z, g), z 0 E}.<br />
Ê<br />
Man sieht sofort, dass ein DEA auch als NEA aufgefasst werden kann. Dabei ist nur notwendig<br />
zu erkennen, dass beim DEA die Mächtigkeit der Menge der Nachfolger 1 ist. Also kann<br />
man sagen, dass es zu jedem DEA auch einen äquivalenten NEA gibt. Die Frage ist, ob auch die<br />
Umkehrung gilt.<br />
9 In manchen Büchern wird der NEA über eine Menge von Anfangszuständen definiert.<br />
Dementsprechend muss auch * modifiziert werden.<br />
47
Satz (Rabin, Scott 1959):<br />
Zu jedem NEA gibt es einen äquivalenten DEA, also L(NEA) = L(DEA).<br />
Beweisidee:<br />
Sei M = (Z, E, *, s, E) ein NEA. Aus ihm konstruieren wir quasi durch „Parallelverfolgung”<br />
der Nachfolgezustände an den jeweiligen Zuständen den DEA N = ((Z), E, * N, s, E N). Die<br />
Menge der Nachfolgerzustände jeweils zu einem a 0 E ergibt einen einzigen „Sammelzustand”<br />
für N. Die Menge der Endzustände von N sind die Zustandsmengen, die eine Element aus E<br />
beinhalten. Genauer gesagt gilt schließlich<br />
* N(X, a) = ^ z0X *(z, a) für alle X f Z<br />
E N = {Y f Z | Y 1 E … i}<br />
Durch Induktion lässt sich nun zeigen dass für alle w 0 E* gilt: **(s, w) = * N*({s}, w).<br />
Weil die Menge aller möglichen Zustände von N die Menge aller Teilmengen von Z ist, nennt<br />
man diese Konstruktion auch die „Potenzmengenkonstruktion”. Es sei gleich an dieser Stelle<br />
gesagt, dass nicht unbedingt alle Elemente von (Z) im so konstruierten Automaten letztlich<br />
notwendig sind. Dazu siehe auch folgendes Beispiel:<br />
Beispiel:<br />
Betrachte folgenden NEA:<br />
Nichtdeterministischer endlicher Automat<br />
48<br />
Ê
Der Automat hat die folgende Tabellendarstellung mit B als Endzustand, was durch Unterstreichung<br />
kenntlich gemacht wurde:<br />
M a b c<br />
A {A, B} {A} {A}<br />
B {B} {A} {A, B}<br />
So ergeben sich z.B. beim Übergang a im Startzustand A die Folgezustände A und B, die im<br />
Sammelfolgezustand [AB] notiert werden. Jeder Zustand dieses Sammelzustands wird untersucht<br />
und seine möglichen Folgezustände hinsichtlich eines Eingabezeichens werden wieder in<br />
einem Sammelzustand zusammengefasst. Schließlich ergibt sich der folgende Automat mit den<br />
Endzuständen [AB] und [B].<br />
N a b c<br />
[A] [AB] [A] [A]<br />
[AB] [AB] [A] [AB]<br />
[B] [B] [A] [AB]<br />
Äquivalenter deterministischer endlicher Automat<br />
Im Zustandsübergangsdiagramm ist gut ersichtlich, dass der schraffierte neue Zustand [B]<br />
vom Startzustand aus nicht erreichbar und somit überflüssig ist. Damit kann man den Automa<br />
ten um diesen Zustand reduzieren.<br />
49
Auf den formalen Beweis, dass mit den Konstruktionen tatsächlich ein äquivalenter Automat<br />
entsteht, wird an dieser Stelle verzichtet.<br />
Ê<br />
Den Nichtdeterminismus sollte man nicht als Erschwernis sehen. Er kann sehr hilfreich bei der<br />
Konstruktion von endlichen Automaten sein.<br />
Beispiel:<br />
Betrachten wir die Sprache, die aus allen Wörtern aus {0, 1}* bestehen, die auf 100 enden.<br />
Ein zugehöriger NEA ist schnell konstruiert:<br />
Ihn gleich in der deterministischen Variante hinzuschreiben, ist zweifelsohne aufwendiger. Es<br />
empfiehlt sich, erst den zugehörigen NEA zu konzipieren und ihn dann zum äquivalenten DEA<br />
zu transformieren („separation of concerns”):<br />
50
Was noch bleibt, ist die Behandlung von Z-Diagrammen mit g-Übergängen, die z.B. für eine<br />
Grammatik dann zu zeichnen sind, wenn Produktionen der Art A 6 B vorliegen würden. Als Z-<br />
Diagramm bei einem Automaten wäre das so zu interpretieren, dass der Automat quasi „spontan”<br />
in einen anderen Zustand übergeht, ohne dass ein Zeichen aus dem Eingabeband gelesen<br />
wird. Wir benötigen das Konzept des endlichen Automaten mit g-Übergängen später außerdem<br />
noch zum modularen Zusammenschalten von endlichen Automaten. Die g-Übergänge sind in<br />
der Praxis beim Beschreiben von Prozessvorgängen mittels endlicher Automaten ebenfalls recht<br />
brauchbar, analog zur Empfehlung, es erst mit dem NEA bei der Problemmodellierung zu<br />
versuchen und das Ergebnis schließlich deterministisch machen.<br />
Definition:<br />
Ein (nichtdeterministischer) endlicher Automat mit g-Übergängen (NEAg) ist ein 5-Tupel A<br />
= (Z, E, *, s, E). Z, E, s und E sind - wie beim NEA - die Menge der Zustände, das Eingabealphabet,<br />
der Startzustand bzw. die Menge der Endzustände. Die Übergangsfunktion * wird<br />
erweitert zu * : Z × (E c {g}) 6 (Z), wobei (Z) die Potenzmenge von Z ist.<br />
Die erweiterte Übergangsfunktion ** des EAg wird definiert als:<br />
**(z, g) = *(z, g), für z 0 Z<br />
**(z, aw) = ^ z'0*(z, a) **(z', w), für a 0 E c {g}, w 0 E*<br />
Der Konfigurationsbegriff überträgt sich direkt.<br />
Das Paar k' = (z', w) heißt Folgekonfiguration von k, i. W. k | k', wenn v = aw mit w 0 E* ist<br />
und z' 0 *(z, a).<br />
Ein Automat M = (Z, E, *, z 0, E) erkennt / akzeptiert ein Wort a 1a 2...a n 0 E*, wenn es eine<br />
Folge von Konfigurationen (z 0, a 1a 2...a n) | (z 1, a 2...a n) | ... | (z n, g) gibt mit z n 0 E und für 0 # i<br />
< n gilt z i+1 0 *(z i, a i+1).<br />
Sei M = (Z, E, *, z 0, E) ein NEAg. Dann ist die von M akzeptierte Sprache die Menge L(M)<br />
= {w | w 0 E*, (z 0, w) |* (z, g), z 0 E}.<br />
Ê<br />
<strong>51</strong>