# 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
  - ...
