# Grundlagen endlicher Automaten ## Definition ### Deterministischer endlicher Automat (DEA) - 5-Tupel - $A=(Σ,Q,q_s,Q_a, δ)$ - $Σ$: endliches Eingabealphabet - $Q$: endliche Menge von Zuständen - $q_s ∈ Q$: Startzustand - $Q_a ⊆ Q$: akzeptierte Zustände - $ δ: Q x Σ → Q$: Übergangsfunktion ### Graphdarstellung $G_A$ - Graphknoten: $Q$ - Startzustand: _Knoten mit eingehender Kante ohne Quelle_ - akzeptierter Zustand: _Knoten mit Doppelkreis_ - gelabelte Kanten: Zustandsübergänge - Kante von $q$ nach $q'$ mit Label $a ↔ δ(q,a) = q'$ ### Beispiel einfacher endlicher Automat - $ A=(Σ,Q,q_s,Q_a, δ)$ - $Σ=\{0,1\}$ - $Q=\{q_1,q_2,q_3\}$ - $q_s=q_1$ - $Q_a=\{q_3\}$ - $δ:$ - | Zustand | $ δ(.,0)$ | $ δ(.,1)$ | |---------|-----------|-----------| | $q_1$ | $q_1$ | $q_2$ | | $q_2$ | $q_1$ | $q_3$ | | $q_3$ | $q_3$ | $q_3$ | - Graphdarstellung - ![image_740.png](image_740.png) ### Sprache eines Automaten > Sei $A=( Σ,Q,q_s,Q_a, δ)$ ein DEA. Die fortgesetzte Übergangsfunktion $ δ^*: Q x Σ^* →Q$ ist definiert durch > > $ δ^*(q, ε):=q$ und > > $ δ^*(q,wx):= δ( δ^*(q,w),x)$ für $w ∈ Σ^* und x ∈ Σ$ ↑ ~_induktive Definition_ > Sei $A= ( Σ,Q, q_s, Q_a, δ) ein DEA. > > (a) Wir sagen $A$ akzeptiert $w ∈ Σ^*$, wenn $ δ^*(q_s,w) ∈ Q_a$ > > (b) Die von $A$ akzeptierte Sprache ist $L(A) := \{w ∈ Σ^* \space| \space A\space akzeptiert \space w\}$ ### Übung: #### (a) $L_1 = \{a^nb^mc^k \space | \space n,m,k ≥ 1\}$ ![image_749.png](image_749.png) ### Unvollständige Automaten > Ein unvollständiger deterministischer Automat $A=( Σ, Q,Q_s, Q_a, δ)$ ist wie ein normaler DEA > mit folgenden Änderungen: > > (a) Die Übergangsfunktion $ δ$ darf partiell sein > > (b) Ist während einer Berechnung der nächste Zustand nicht definiert → Eingabe verwerfen #### Beispiel unvollständiger Automat: ![image_741.png](image_741.png) ## Nichtdeterministischer endlicher Automat (NEA) ### Nichtdeterminismus - Erlauben pro Zustand/Zeichen-Paar mehrere Folgezustände - _die wiederum selbst wieder mehrere Folgezustände haben können_ - **Eine Eingabe, mehrere Berechnungspfade** - Eingabe wird akzeptiert, wenn - Berechnungspfad existiert, der in akzeptierendem Zustand endet ### Definition NEA - 5-Tupel - $A=(Σ,Q,q_s,Q_a, δ)$ - $Σ$: endliches Eingabealphabet - $Q$: endliche Menge von Zuständen - $q_s ∈ Q$: Startzustand - $Q_a ⊆ Q$: akzeptierte Zustände - $ δ: Q x Σ → P(Q)$: Übergangsfunktion - jede einzelne Berechnung wie beim DEA - starte in $q_s$ - lies nächstes Zeichen - berechne Folgezustand mit $ δ$ - wechsle in Folgezustand - ist akzeptierend? → `:)` - sonst → verwerfe - > Goldene Regel: Akzeptiere Eingabe, wenn akzeptierende Berechnung existiert ### Sprache eines NEA > Sei $N=( Σ,Q,q_s,Q_a, δ)$ ein NEA. Die fortgesetzte Übergangsfunktion $ δ^*: Qx Σ^*→P(Q)$ ist definiert durch: > > $ δ^*(q, ε) := \{q\}$ und > > $ δ^*(q,wx) := ∪ δ(q', x)$ für $w ∈ Σ^*$ und $x ∈ Σ$ > > _$q' ∈ δ^*(q,w)$_ ### Beispiel NEA ![image_742.png](image_742.png) ![image_743.png](image_743.png) ## NEA vs DEA - NEA scheinbar viel mächtiger als DEAs - sehr viele Berechnungspfade (statt nur einem pro Wort) - Alternativer Blick auf das Parsen eines NEAs - für jede Stelle der Eingabe - in welchen Zuständen könnte der NEA sein? - akzeptiere, wenn finaler Metazustand Zustand aus $Q_a$ enthält - ![image_744.png](image_744.png) ## Potenzautomaten ![image_745.png](image_745.png) ![image_746.png](image_746.png) ### Konstruktion und Sprache eines Potenzautomaten #### Konstruktion: Funktionstabelle für δ - 1. Spalte: bisher entdeckte Metazustände - restliche Spalten: Folge-Metazustand für jedes Zeichen $x ∈ Σ$ - solange unvollständige Zeile existiert: ausfüllen - initial: nur $\{s\}$ sicher erreichbar → eine unvollständige Zeile - je neu entdecktem Metazustand: lege neue Zeile an > Der Potenzautomat $A_N$ eines NEA $N$ ist ein deterministischer endlicher Automat mit $L(A_N) = L(N)$ > > ![image_747.png](image_747.png) > > Beweis: ![image_748.png](image_748.png) ## Mächtigkeit & Grenzen endlicher Automaten - parsen einfacher Strukturen - E-Mail - XML-Tags - Datumsformate - ... - können sich Dinge merken - NEAs betrachten viele Berechnungswege "gleichzeitig" - sind aber letztlich nur _Syntactic Sugar_ - _nur dafür da, dass es besser lesbar ist_ - können sich nur so viel merken, wie sie Zustände haben - geht: das 17. Zeichen von w ist 0 - geht nicht: das |w|/2. Zeichen von w ist 0 - können keine komplexen Strukturen erkennen - Palindrome - _LAGERREGAL_ - arithmetische Ausdrücke - $42*(x+y)-z$ - Hierarchien - Verschachtelungen - ...