# Grenzen & Größen endlicher Automaten
## Nerode-Index einer Sprache
- Sei $L=\{w ∈ \{x,y,z\}^*\}\space | \space \#_z(w) ∈ \{2,3\}\}$
- betrachte die Wörter aus $\{x, y, z\}^*$
  - Gruppiere sie hinsichtlich des "Grad der Zugehörigkeit" zu $L$
    - ![image_780.png](image_780.png)
- Beobachtung:
  - zwei Worte $u ∈ L$ und $v \not\in L$ sind sicherlich nicht sehr ähnlich
  - zwei Worte $u,v ∈ L$ _können_ ähnlich sein 
    - ähnlich: $zz$ und $yzxxzy$
    - nicht ähnlich: $zz$ und $zzz$
  - zwei Worte $u,v \not\in L$ _können_ ähnlich sein
    - ähnlich: $ ε$ und $xxy$
    - nicht ähnlich: $ ε$ und $yzxxxy$

- **$u,v ∈ Σ^*$ sind ähnlich bezüglich $L$, wenn:**
  - durch anhängigen des gleichen, beliebigen Wortes
    - in beiden Fällen ein Wort aus $L$ entsteht
    - in beiden Fällen ein Wort aus $Σ \backslash L$ entsteht

### Rechtsäquivalenz
- gegebene Sprache $L$ über Alphabet Σ
- $u,v ∈ Σ^*$ heißen rechtsäquivalent bezüglich L, wenn
  - $∀s ∈ Σ^*: u*s ∈ L ↔ v*s ∈ L$
- wir schreiben auch: $(u,v) ∈ R_L$ oder $u \space R_L \space v$

### Nerode-Klassen und -Index
- gegebene Sprache $L$ über Alphabet Σ und Wort $u ∈ Σ^*$
- **Nerode-Klasse $N(u)$**: Menge der zu $u$ rechtsäquivalenten Wörter:
  - $N(u) := \{v ∈ Σ^* \space | \space (u,v) ∈ R_L\}$
- **Nerode-Index** von L: Anzahl Nerode-Klassen

### Beispiel
- ist $v ∈ N(u)$ so gilt $N(v)=N(u)$
- beliebiges $u ∈ N$ heißt _Repräsentant_ der Nerode-Klasse $N$

- Wie lauten die Nerode-Klassen von der Sprache $L_1 = \{w ∈ \{x,y,z\}^* \space | \space \#_Z(w) ∈ \{2,3\}\}$?
  - ![image_781.png](image_781.png)
- Wie viele Nerode-Klassen hat $L_2=\{0^n*1^n \space | \space n ∈ N_0\}$
  - ∞
  - bspw. $N_i=N(0^i)$ für $i ∈ N_0$

## Eigenschaften von Nerode-Klassen
### Nützliche Eigenschaften
#### Alles-oder-nichts
> Sei $L$ eine Sprache und $N$ eine Nerode Klasse von $L$.
> Dann gilt entweder $N ⊆ L$ oder $N \not ⊆ L := Σ^* \backslash L$

**Beweis:**
- wähle beliebiges, festes $u ∈ N$
- für jedes $v ∈ N$ gilt: $u$ und $v$ sind rechtsäquivalent
- insbesondere: $u = u * ε ∈ L ↔ v * ε = v ∈ L$
- also entweder sind _alle_ solche Wörter $v$ aus $L$ (wenn $u ∈ L$)
- oder es sind alle solche Wörter $v$ nicht aus $L$ (wenn $u \not ∈ L$)

#### Mitgegangen-Mitgefangen
> Sei $L$ eine Sprache und $u,v ∈ Σ^*$ Wörter aus der gleichen Nerode-Klasse. 
> Dann gilt für alle $s ∈ Σ^*$: $N(u*s)=N(v*s)$

**Beweis:**
- zu zeigen: $(u*s, v*s) ∈ R_{L(A)}$ 
  - d.h. $u*s$ und $v*s$ sind [rechtsäquivalent](#rechts-quivalenz)
- sei dazu $w ∈ Σ^*$ beliebig, dann gilt:
  - ![image_782.png](image_782.png)


#### Gemeinsame Reise
> Sei $A = (Σ, Q, q_s, Q_A, δ)$ ein DEA.
> Betrachte zwei Worte $u,v ∈ Σ^*$ die $A$ in den gleichen Zustand überführen.
> Dann sind $u$ und $v$ rechtsäquivalent bzgl. $L(A)$

![image_783.png](image_783.png)


## Nerode Klassen als Zustände
> Nerode Klassen eignen sich perfekt als DEA-Zustände

### Konstruktionsidee Beispiel
![image_819.png](image_819.png)
![image_820.png](image_820.png)

### Formale Konstruktion
Sei $L ⊆ Σ^*$ eine Sprache mit endlichem Index $m ∈ \mathbb{N}$.
Seien $N_1, N_2, ..., N_m$ die Nerode-Klassen von $L$.
Dann definieren wir den DEA $A_L =(Σ, Q, q_s, Q_a, δ)$:
- $Q :=\{N_1, N_2, ..., N_m\}$
- $q_s:= N(ε)$
- $Q_a :=\{N_i\space|\space N_i ⊆ L\}$
- für alle $i ∈ \{1,2,...,m\}$ sei $δ(N_i,x):=N(w*x)$...
  - für ein _beliebiges_ $w ∈ N_i$

## Der Satz von Myhill-Nerode
> Zu einer Sprache $L$ gibt es genau dann einen DEA $A = (Σ, Q, q_s, Q_A, δ)$ mit
> $L(A) = L$, wenn $L$ endlichen Index hat.

### Beweis (Richtung →) {id="beweis-richtung_1"}
- Sei $A$ ein DEA mit $L(A)=L$
- Wörter, die den gleichen Zustand erreichen
  - gehören zur gleichen Nerode Klasse
- Wenn man ein beliebiges Wort betrachtet endet man in einer Nerode-Klasse
- **jede Nerode-Klasse entspricht einer der endlich vielen $N_q$**

### Beweis (Richtung ←)
- Seien $N_1,N_2,...,N_m$ endlich viele Nerode-Klassen
- ![image_821.png](image_821.png)
- **$A$ ist ein DEA der die Sprache $L$ akzeptiert**



## Reaping the Fruits!
### Anwendung 1: Minimale endliche Automaten
- Weniger Zustände als Nerode-Klassen gibt es nicht
- > Ein DEA $A$ heißt minimal, wenn jeder DEA, der $L(A)$ akzeptiert, mindestens so viele Zustände wie $A$ hat.

### Anwendung 2: Nichtexistenz von DEAs
- gegebene Sprache $L$
  - $L$ hat unendlich viele Nerode-Klassen
- > Sei $L$ eine Sprache mit Index $i ∈ \mathbb{N}$. Jeder minimale DEA für $L$ hat $i$ Zustände.

#### Zu $L ⊆ Σ^*$ gibt es keinen DEA
- definiere _unendliche_ Wortmenge $X ⊆ Σ^*$
- zeige: keine zwei Worte sind rechtsäquivalent
  - wähle $u,v ∈ X$ mit $u \not = v$ beliebig
  - finde ein $w ∈ Σ^*$ mit $u*w ∈ L$ und $v * w \not ∈ L$
- dann hat $L$ Index $i ≥ |X| = ∞$ und hat folglich keinen DEA


## Minimierungsalgorithmus
> Grundprinzip: Äquivalente Zustände finden und zusammenführen

### Sprache eines Zustandes
- Sei $q ∈ Q$ der Zustand eines DEA $A = (Σ, Q, q_s, Q_a, δ)$
- Sprache des Zustands $q$
  - $L_A(q) := \{w ∈ Σ^*\space|\space δ^*(q,w) ∈ Q_a\}$


### Äquivalente Zustände
- DEA $A = (Σ, Q, q_s, Q_a, δ)$
- $q_1, q_2 in Q$ sind **äquivalent ($q_q ≡_A q_2$)** 
  - wenn $L_A(q_q) = L_A(q_2)$
- **Äquivalenzklasse** von $q ∈ Q$
  - Menge der zu $q$ äquivalenten Zustände
  - $[q]_{≡_A} := \{q' ∈ Q\space|\space q' ≡_A q'\}$

#### Unterschied ähnliche Zustände vs. ähnliche Wörter
> [Nerode Klasse $N(w)$](#nerode-klassen-als-zust-nde) sammelt Wörter (_ähnlich zu w_)
> 
> [Äquivalenzklasse $[q]_{≡_A}$](#quivalente-zust-nde) sammelt Zustände (_ähnlich zu q_)

- in beiden Fällen: "ähnlich" ≈ "gleiches Verhalten für Folgewort"

#### k-Äquivalenz
- $q ∈ Q$ ist ein Zustand eines DEA
- $L^k_A(q):=L_A(q) ∩ \{w ∈ Σ^* \space | \space |w| ≤ k\}$
  - Sprache von Zustand $q$ beschränkt auf Worte der Länge $≤ k$
- **k-Äquivalenz**
  - $q_1 ≡^k_A q_2 ↔ L^k_A(q_1) = L^k_A(q_2)$

### Minimierungsstrategie
1. Bestimme Äquivalenzklassen bzgl. $≡_A$
   - starte mit initialer Aufteilung und verfeinere Schritt für Schritt
   - Zu jeder Aufteilung:
     - Zeuge $z ∈ Σ^*$ für Notwendigkeit der Aufteilung
2. Baue Quotientenautomaten zu den Äquivalenzklassen

### Quotientenautomat
![image_838.png](image_838.png)

### Beispiel Minimierung
![image_839.png](image_839.png)
#### Bestimmung der Äquivalenzklassen
- initiale Aufteilung
  - $P_0 = \{\{a,b,c,d,e,f\},\{c\}\}$
  - Zeuge: `ε` 
    - akzeptierende / nicht akzeptierende Zustände
- 1. Verfeinerung
  - $P_1 = \{\{a,d,e,f\},\{b\},\{c\}\}$
  - Zeuge: `x`
    - _kommt mit Eingabe von `x` in einen akzeptierenden Zustand_
- 2. Verfeinerung
  - $P_2 = \{\{d,e,f\},\{a\},\{b\},\{c\}\}$
  - Zeuge: `yx`
    - _kommt mit Eingabe von `yx` in einen akzeptierenden Zustand_
- Ende
  - für jede Klasse gilt:
    - Zustände der Klasse verhalten sich für jedes weitere Zeichen gleich
  - → können nicht weiter verfeinern

![image_840.png](image_840.png)

#### Quotientenautomat am Beispiel
![image_841.png](image_841.png)