Ein Alphabet ist eine endliche nicht-leere Menge S. Ein Element s ∈ S heißt Symbol oder Zeichen.
s = s1…sn, si ∈ S, i = 1…n heißt Wort über S.
S+ := { s | s Wort über S } Menge der Wörter über S, die aus mindestens einem Zeichen bestehen.
Sei s ∈ S+. |s| := Länge des Wortes := Anzahl der Symbole im Wort s.
Sei s ∈ S. |s|t := die Anzahl des Auftretens des Symbols t im Wort s.
Sn := { s ∈ S+ | |s| = n } Menge der Wörter über S der Länge n.
Konkatenation: Seien s = s1…sn ∈ S+, si ∈ S, i = 1…n, t = t1…tm ∈ S+, ti ∈ S, i = 1…m. st = s1…snt1…tm ∈ S+ heißt Konkatenation von s mit t.
L ⊆ S* heißt (formale) Sprache über S.
Einordung "Automatentheorie"
Funktion endlicher Automaten: Eingaben → (innere) Zustände → Ausgaben
Automaten werden von außen bedient, interagieren also mit ihrer Umwelt.
Sie reagieren auf Eingaben mit bestimmten zugeordneten Ausgaben.
Ihre Arbeitsweise ist gekennzeichnet durch die Abfolge unterscheidbarer Schritte und Stadien der Bearbeitung der Ein- und Ausgaben.
Klassifizierung
Eingaben: Zeichenfolgen über Alphabet X = { x1, x2, …, xn }
Ausgaben: Zeichenfolgen über Alphabet Y = { y1, y2, …, yn }
Zustände (states): unterscheidbare Stadien der Verarbeitung von Eingaben
Zustandsmenge S = { s1, s2, …, sn }
Partizipien weisen auf Zustände hin: "Taste gedrückt" etc.
deterministisch = "sind determiniert", Folgezustand ist durch aktuellen Zustand und Eingabesymbol eindeutig bestimmt
Definition: A = (X, S, s0, δ, F)
X: Eingabealphabet (endlich)
S: Zustandsmenge (endlich)
s0: Anfangszustand s0 ∈ S
δ: Zustandsübergangsfunktion
F: Menge der Endezustände F ⊆ S
δ*: Fortsetzung der Zustandsübergangsfunktion auf Wörter ∈ X*
δ*(s0, w) ∈ S | w = x1, x2, …, xn, xi ∈ X
δ*(s, ε) = s | s ∈ S, ε leeres Wort
δ*(s, xi) = δ(s, xi) | xi ∈ X, ein Zeichen
δ*(s, x) = δ*(s, x1x2…xn) = δ*(δ(s, x1), x2x3…xn)
Konfiguration: (aktueller Zustand, restliche Eingabe)
Arbeitsweise (Beispiel Lesekopf)
Eingabeband enthält endlich viele Eingabesymbole des Eingabealphabets, Lesekopf in s0 über erstem Zeichen
Lesekopf in Zustand s liest aktuelles Zeichen x und geht in Zustand δ(s, x), bewegt sich eine Position nach rechts
Ist das Eingabeband leer und der Automat ist in einem Endzustand, hat der Automat die Eingabe akzeptiert
Der Automat springt nicht zurück an den Anfang. Neues Wort heißt neuer Automat.
Sei A = (X, S, s0, δ, F) ein DEA. L(A) := { w ∈ X* | δ*(s0, w) ∈ F} heißt die durch A akzeptierte Sprache (Menge aller Wörter, die vom Anfangszustand in einen mehrerer möglicher Endzustände führen)
Eine Sprache L ist durch einen endlichen Automaten definierbar (oder regulär), falls es einen DEA A gibt mit L = L(A) (Automat akzeptiert die Sprache)
Zustandsübergangsfunktion des NEA hat P(S) als Wertebereich
Im DEA gibt es für jeden Zustand für jedes Eingabezeichen eine Transition in seinen Folgezustand!
DEA: nur eindeutige Transitionen, NEA: mehrdeutige (oder keine) Transitionen möglich
NEA hat evtl. mehrere Anfangszustände
im NEA können alle Transitionen in Fehlerzustände im Gegensatz zum DEA weggelassen werden
Eigenschaften
Definition: A = (X, S, S0, δ, F)
X: Eingabealphabet (endlich)
S: Zustandsmenge (endlich)
S0: Menge der Anfangszustände, S0 ⊆ S
δ: Zustandsübergangsfunktion
S x X → P(S), zu einem Eingabesymbol ist in einem definierten Zustand eine Menge von Folgezuständen möglich
δ(si, xj) → Sk (Folgezustände zu si, leere Menge, ein oder mehrere Zustände)
F: Menge der Endezustände F ⊆ S
werden zwei NEA zusammengefasst, bilden sie ein logisches Oder bzw. die Vereinigungsmenge
Sei A = (X, S, S0, δ, F) ein NEA. L(A) := { w ∈ X* | ∃ s0 ∈ S0 : δ*(s0, w) ∩ F ≠ ∅ } heißt die durch A akzeptierte Sprache (Menge aller Wörter, die von einem Anfangszustand in eine Zustandsmenge führen, die wenigstens einen Endezustand enthält)
Eine Sprache L ist durch einen endlichen Automaten definierbar (oder regulär), falls es einen DEA A gibt mit L = L(A) (Automat akzeptiert die Sprache)
Konstruiere zu gegebenem DEA einen äquivalenten NEA (direkt erfüllt, da jeder DEA schon ein NEA ist)
Konstruiere zu gegebenem NEA einen äquivalenten DEA (akzeptiert die selbe Sprache)
A = (X, S, S0, δ, F) → Ad = (X, Sd, s0d, δd, Fd)
Sd := P(S) (alle möglichen Teilmengen von S)
s0d := S0 (Menge der Anfangszustände des NEA ist ein Element von P(S))
δ(Q, x) := Uq ∈ Qδ(q, x) (alle Mengen der Folgezustände zu qi, die vereinigt werden müssen)
Fd := { Q ∈ Sd | Q ∩ F ≠ ∅}
ab einer gewissen Länge von Wörtern (> Anzahl der Zustände) sind in diesen Zyklen enthalten, die beliebig häufig durchlaufen werden können
Sei L regulär über X: ∃ n ∈ N, sodass ∀ x ∈ L mit |x| ≥ n: x = uvw (uvw = Teilwörter, u = Weg in den Zyklus, v = Zyklus, w = Weg aus dem Zyklus)
Bedingung: |uv| ≤ n, |v| ≥ 1, n muss mindestens die Anzahl der Zustände sein
⇒ uviw ∈ L ∀ i ∈ N (vi: v wird i-mal vervielfältigt)
Nachweis, dass folgende Sprache nicht regulär ist, durch Umkehrung des Pumping-Lemma:
L = { x ∈ {a, b} | x = anbn für n ∈ N}
wähle n entsprechend des Pumping-Lemmas
wähle Exemplar/Wort x ∈ L: anbn
betrachte Zerlegungen in Teilwörter x = uvw mit |uv| ≤ n, |v| ≥ 1
für alle Zerlegungen von x in Teilwörter mit x = uvw und v in an werden nur a's vervielfältigt ⇒ |uviw|a ≠ |uviw|b
Definition: A = (X, Y, S, s0, δ, σ)
Mealy-Automaten: Ausgabe bei Transition
Moore-Automaten: Ausgabe im Zielzustand
Eselsbrücke: Moore → Zustand, Mealy → Transition
formale Sprache: Menge von Wörtern bestehend aus Symbolen eines endlichen Alphabets
Ableitung: fortgesetzte Ersetzungsschritte, die mit dem Startsymbol beginnen (Kennzeichnung ⇒*)
Grammatiken erzeugen/generieren formale Sprachen: G = (N, T, S, P)
N: Menge der nicht-terminalen Symbole (Großbuchstaben)
T: Menge der terminalen Symbole (Kleinbuchstaben)
S: Startsymbol
P: Menge der Produktionen (Ersetzungsregeln)
eine durch G erzeugte Sprache: L(G) = { x ∈ T* | S ⇒* x} (alle Wörter, die aus dem Startsymbol abgeleitet werden können)
Chomsky-Hierarchie (Typ(i + 1) ist gleichzeitig vom Typ(i)) definiert 4 Typen von Grammatiken
Typ 0 (allgemeine Grammatiken): keine Einschränkung der Produktionen
Typ 1 (nicht verkürzende Grammatiken): für Produktionen a → b gilt b ∈ (N ∪ T)+ (leeres Wort ausgeschlossen) und |a| ≤ |b|
aB → abA, B → ab, AB → CaB
Termination, Expansion 2, doppelte Substitution
Typ 2 (kontextfreie Grammatiken): für Produktionen a → b gilt a ∈ N, b ∈ (N ∪ T)+
Typ 3 ((rechts-)lineare Grammatiken, reguläre Sprachen): für Produktionen a → b gilt a ∈ N, b hat die Form tB oder t mit t ∈ T*, B ∈ N, b ≠ ε
Normalformen sind einfache Repräsentanten einer Klasse äquivalenter Grammatiken
Sei L eine formale Sprache. L ist regulär, wenn es eine lineare Grammatik G gibt mit L = L(G) (Grammatiken vom Typ 3 erzeugen reguläre Sprachen)
Um eine Grammatik vom Typ 3 durch einen Automaten abzubilden, müssen Regeln der Form A → t ersetzt werden durch A → tNε und Nε → ε
Für jede Transition in einen Endzustand müssen zwei Produktionen vorhanden sein, wenn im Endzustand weitere Eingaben erlaubt (aber nicht verpflichtend) sind: (Beispielautomat "otto" erkennen, Endzustand W) V → o | oW, W → o | t | oW | tW
Typische Fragen zu Grammatiken
Typ nach Chomsky? → Produktionen untersuchen
Ist G in Normalform? → Produktionen untersuchen, Verstöße gegen Normalform suchen
Ist die Ableitung des Wortes xyz möglich? → mit den Produktionen ausgehend von S versuchen, das Wort nachzubauen
Typ 3
A → aaB ersetzen durch A → aC, C → aB
A → B ersetzen durch A → w | B ⇒* w
alle Regeln sind nun von der Form A → a oder A → aB
Typ 2
für jedes terminale Symbol t wird ein nicht-terminales Symbol T erstellt und die Produktionen um T → t erweitert
A → bi ersetzen durch A → Bi für jedes i
A → BCD ersetzen durch A → BE, E → CD
alle Regeln sind nun von der Form A → a oder A → BC
Beispiele aus Vorlesung nochmal machen
Aufgaben 3.5.2 machen
Übung: NEA in DEA überführen
BNF
Skript Herold lesen
Definition reguläre Sprache
Normalformen
Kann man Automaten mit LaTeX setzen?