This commit is contained in:
David Schirrmeister 2025-06-15 17:42:22 +02:00
parent 195bce294a
commit 21f691f6a3
4 changed files with 390 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -142,6 +142,7 @@
<toc-element topic="ti_hausaufgabe5.md"/>
<toc-element topic="ti_hausaufgabe6.md"/>
<toc-element topic="ti_hausaufgabe7.md"/>
<toc-element topic="ti_hausaufgabe8.md"/>
</toc-element>
<toc-element topic="01Einleitung.md"/>

View File

@ -0,0 +1,389 @@
# Übungsblatt 8
> Wenzel Schwan (1125033), Paul Kneidl (1125219), David Schirrmeister (1125746), Michelle Klein (1126422)
## Übung 1
### 1(a)
Beschreiben Sie für jeden der folgenden regulären Ausdrücke $\alpha_i$ die entsprechende Sprache $L(\alpha_i)$ (formal oder informal, Ihre Wahl):
- (i) $\alpha_1 = (00 \mid 1)^* (11 \mid 0)$
- Alle Wörter, welche mit beliebig vielen Aneinanderreihungen von `00` und `1` beginnen und dann mit `11` oder `0` enden
- (ii) $\alpha_2 = (1 \mid 01 \mid 001)^* (1 \mid 111)$
- Alle Wörter, welche mit beliebig vielen Aneinanderreihungen von `1`, `01` und `001` beginnen und dann mit `1` oder `111` enden
### 1(b)
Bestimmen Sie für jeden der folgenden regulären Ausdrücke $\beta_i$ einen endlichen Automaten (deterministisch oder nichtdeterministisch, Ihre Wahl), der die Sprache $L(\beta_i)$ akzeptiert:
- (i) $\beta_1 = \emptyset$
- ```plantuml
@startuml
scale 0.50
left to right direction
skinparam dpi 150
skinparam state {
BackgroundColor #FFFACD
BorderColor black
FontName Helvetica
RoundCorner 30
Shadowing false
LineThickness 0
}
state S##[bold]
[*]-->S
@enduml
```
- (ii) $\beta_2 = ((0 \mid 1)^* 1)^*$
- ```plantuml
@startuml
scale 0.50
left to right direction
skinparam dpi 150
skinparam state {
BackgroundColor #FFFACD
BorderColor black
FontName Helvetica
RoundCorner 30
Shadowing false
LineThickness 0
}
state S##[bold]
state U##[bold]
[*]-->S
S --> T: 0,1
T --> U: 1
T --> T: 0,1
S --> U: 1
U --> T: 0,1
@enduml
```
### 1(c)
Betrachten Sie die endlichen Automaten $N_1$ und $N_2$ aus Abbildung 1. Bestimmen Sie für jede der drei Sprachen $L(N_1)$, $L(N_2)$ und $L(N_1) \setminus L(N_2)$ einen regulären Ausdruck, der die jeweilige Sprache beschreibt.
![image_923.png](image_923.png)
- $L(N_1)$
- $1(0|1)^*1$
- $L(N_2)$
- $(0|1)^*11(0|1)^*$
- $L(N_1) \backslash L(N_2)$
- $10(0|10)^*1$
### 1(d)
Bestimmen Sie einen regulären Ausdruck, der die Sprache aller Binärstrings beschreibt, die **nicht auf 11 enden**.
$(0|1)^*(00|01|10)$
## Übung 2
Betrachten Sie folgende reguläre Grammatik über dem Alphabet $\Sigma = \{x, y, z\}$:
$$
G: \quad
S \Rightarrow xS \mid xA \mid zB \\
A \Rightarrow yA \mid B \\
B \Rightarrow zB \mid \varepsilon
$$
### 2(a)
Erarbeiten Sie sich den Begriff eines nichtdeterministischen endlichen Automaten mit $\varepsilon$-Übergängen mit Hilfe des Skriptes (Seiten 137139).
Überlegen Sie sich, wie sich ein zur Grammatik $G$ passender, nichtdeterministischer endlicher Automat mit $\varepsilon$-Übergängen konstruieren lässt, der die Sprache $L(G)$ akzeptiert.
Geben Sie den Automaten dazu in **Graphdarstellung** an.
```plantuml
@startuml
scale 0.50
left to right direction
skinparam dpi 150
skinparam state {
BackgroundColor #FFFACD
BorderColor black
FontName Helvetica
RoundCorner 30
Shadowing false
LineThickness 0
}
state B##[bold]
[*]-->S
S --> S: x
S --> A: x
S --> B: z
A --> A: y
A --> B: ε
B --> B: z
@enduml
```
### 2(b)
Nutzen Sie das Kochrezept aus den Folien (Kapitel 6), um die Grammatik zu normalisieren.
(Schritte 1 und 2 des Kochrezepts sind hier nicht notwendig, da es keine Regeln der entsprechenden Form gibt.)
- $S → xS | xA | zB$
- $A → yA | zB | ε$
- $B → zB | ε$
### 2(c)
Nutzen Sie den zweiten Teil des Kochrezepts zur Umwandlung einer regulären Grammatik $G$ in einen NEA (Kapitel 6), um für die **normalisierte Grammatik** einen NEA zu konstruieren, der die von der Grammatik erzeugte Sprache akzeptiert.
```plantuml
@startuml
scale 0.50
left to right direction
skinparam dpi 150
skinparam state {
BackgroundColor #FFFACD
BorderColor black
FontName Helvetica
RoundCorner 30
Shadowing false
LineThickness 0
}
state B##[bold]
state A##[bold]
[*]-->S
S --> S: x
S --> A: x
S --> B: z
A --> A: y
A --> B: z
B --> B: z
@enduml
```
## Übung 3
### 3(a)
Entwerfen Sie eine reguläre Grammatik $G_{\text{date}}$, um Datumsangaben bestehend aus Tag (T), Monat (M) und Jahr (Y) in der Form `YYYY-MM-TT` über einem geeigneten Alphabet zu erzeugen.
- Σ = {0,...,9,-}
- $S = S$
- $V=\{S,Y,M,D,Y_1,Y_2,Y_3,A,B,M_1,M_2,C\}$
- $R$
- $S→YMD$
- $Y → AY_1$
- $Y_1 → AY_2$
- $Y_2 → AY_3$
- $Y_3 → AB$
- $A→0|1|2|3|4|5|6|7|8|9$
- $B→-$
- $M→0M_1|1M_2$
- $M_1→1B|2B|3B|4B|5B|6B|7B|8B|9B$
- $M_2→0B|1B$
- $D→0A|1A|2A|3C$
- $C→0|1$
### 3(b)
Entwerfen Sie eine reguläre Grammatik $G_{\text{time}}$, um Uhrzeiten bestehend aus Stunde (H) und Minute (M) in der Form `HH:MM` über einem geeigneten Alphabet zu erzeugen.
- Σ = {0,...,9,:}
- $S = S$
- $V=\{S,H,M,A,H_1}$
- $R$
- $S→HM$
- $H→0H_1|1H_1|2H_1|3H_1|4H_1|5H_1$
- $H_1→A:$
- $A→0|1|2|3|4|5|6|7|8|9$
- $M→0A|1A|2A|3A|4A|5A$
### 3(c)
Kombinieren Sie die Grammatiken $G_{\text{date}}$ und $G_{\text{time}}$ zu drei neuen Grammatiken, welche jeweils die Sprache
$L(G_{\text{date}}) \cup L(G_{\text{time}})$,
$L(G_{\text{date}}) \circ L(G_{\text{time}})$ und
$L(G_{\text{date}})^*$ erzeugen.
**(i) $L(G_{\text{date}}) \cup L(G_{\text{time}})$**
Um die Vereinigungsgrammatik zu erzeugen, fügt man eine neue Startregel hinzu, die entweder in das Datum oder in die Uhrzeit verzweigt. Es wird also eine neue Startvariable $S'$ eingeführt und die bisherigen Startsymbole $S_{\text{date}}$ und $S_{\text{time}}$ ersetzt:
- Neue Startregel:
- $S' \rightarrow S_{\text{date}} \mid S_{\text{time}}$
- Dabei ist $S_{\text{date}}$ die bisherige Startvariable der Datumsgrammatik, $S_{\text{time}}$ die der Uhrzeitgrammatik.
- Alle Regeln aus beiden Grammatiken werden übernommen und $S$ wird jeweils durch $S_{\text{date}}$ bzw. $S_{\text{time}}$ ersetzt, um Namenskonflikte zu vermeiden.
---
**(ii) $L(G_{\text{date}}) \circ L(G_{\text{time}})$**
Für die Konkatenation fügt man eine neue Startregel ein, die zuerst die Erzeugung eines Datums, danach die einer Uhrzeit erlaubt. Auch hier müssen die Startvariablen unterschieden werden:
- Neue Startregel:
- $S' \rightarrow S_{\text{date}} S_{\text{time}}$
- Wieder werden alle bisherigen Regeln beibehalten, aber die Startvariablen entsprechend umbenannt.
- Die Sprache besteht dann aus Zeichenketten der Form `YYYY-MM-DDHH:MM`.
---
**(iii) $L(G_{\text{date}})^*$**
Um beliebig viele Datumsangaben zu erzeugen, wird ein neuer Startzustand $S'$ eingeführt, der entweder ein Datum erzeugt, gefolgt von einer rekursiven Wiederholung, oder auf $\varepsilon$ endet:
- Neue Startregeln:
- $S' \rightarrow S_{\text{date}} S' \mid \varepsilon$
- Die übrige Grammatik bleibt unverändert.
- Es können also beliebig viele aufeinanderfolgende Datumsangaben erzeugt werden, z.B. `2025-06-152025-07-01...`
Bei allen drei Fällen ist es notwendig, **Namenskonflikte** zwischen den Nichtterminalen der beiden Grammatiken (Datum vs. Uhrzeit) zu vermeiden. Das kann man entweder durch Präfixe (z.B. $A_{\text{date}}$, $A_{\text{time}}$) oder durch getrennte Mengen von Nichtterminalen und Startsymbolen lösen.
## Übung 4
Betrachten Sie den nichtdeterministischen endlichen Automaten $N$. Bestimmen Sie systematisch einen regulären Ausdruck, der die Sprache $L(N)$ beschreibt, indem Sie wie folgt vorgehen:
![image_924.png](image_924.png)
### 4(a)
Wandeln Sie $N$ in einen äquivalenten nichtdeterministischen Automaten $N_\varepsilon$ mit $\varepsilon$-Übergängen um, der **genau einen akzeptierenden Zustand** hat.
```plantuml
@startuml
scale 0.50
left to right direction
skinparam dpi 150
skinparam state {
BackgroundColor #FFFACD
BorderColor black
FontName Helvetica
RoundCorner 30
Shadowing false
LineThickness 0
}
state Z##[bold]
[*]-->A
A --> A: a
A --> B: a
A --> D: a
D --> E: a
E --> Z: ε
B --> C: a
C --> F: a
F --> F: b
F --> Z: ε
F --> G: c
A --> G: c
G --> G: c
G --> Z: ε
@enduml
```
### 4(b)
Als nächstes erlauben wir anstatt einfachen Symbolen an den Kanten auch **reguläre Ausdrücke**.
Ein regulärer Ausdruck $\alpha$ an einer Kante von Zustand $q \in Q$ nach $q' \in Q$ (wir schreiben $q \xrightarrow{\alpha} q'$) bedeutet dabei, dass der Automat durch Lesen eines Wortes der Sprache $L(\alpha)$ von Zustand $q$ in Zustand $q'$ wechseln kann.
Mit diesem neuen Mittel ausgerüstet, können wir z.B. den Zustand $B$ aus dem Automaten $N_\varepsilon$ entfernen, indem wir die Kanten $A \xrightarrow{a} B$ und $B \xrightarrow{a} C$ entfernen und stattdessen die neue Kante $A \xrightarrow{aa} C$ einfügen.
**Entfernen Sie auf diese Weise nacheinander die Zustände $B$, $C$, $D$ und $E$ aus $N_\varepsilon$ und zeichnen Sie den entstehenden Automaten.**
```plantuml
@startuml
scale 0.50
left to right direction
skinparam dpi 150
skinparam state {
BackgroundColor #FFFACD
BorderColor black
FontName Helvetica
RoundCorner 30
Shadowing false
LineThickness 0
}
state Z##[bold]
[*]-->A
A --> A: a
A --> F: aaa
A --> Z: aa
F --> F: b
F --> Z: ε
F --> G: c
A --> G: c
G --> G: c
G --> Z: ε
@enduml
```
### 4(c)
Als nächstes entfernen wir den Zustand $F$.
Betrachten Sie dazu jedes Paar $q, q' \in Q \setminus \{F\}$ mit Kanten $q \xrightarrow{\alpha} F$ und $F \xrightarrow{\beta} q'$.
Fügen Sie als Ersatz für diese Kanten eine Kante $q \xrightarrow{\gamma} q'$ für einen geeignet gewählten regulären Ausdruck $\gamma$ ein (beachten Sie die Schleife $F \xrightarrow{b} F$ in $F$!).
Nach Bearbeitung aller solcher Paare kann der Zustand $F$ gelöscht werden (**warum?**).
**Entfernen Sie auf diese Weise neben Zustand $F$ auch den Zustand $G$ und zeichnen Sie den entstehenden Automaten.**
```plantuml
@startuml
scale 0.50
left to right direction
skinparam dpi 150
skinparam state {
BackgroundColor #FFFACD
BorderColor black
FontName Helvetica
RoundCorner 30
Shadowing false
LineThickness 0
}
state Z##[bold]
[*]-->A
A --> A: a
A --> Z: aa | aaa | aaa(b)* | aaa(c)+ | (c)+
@enduml
```
### 4(d)
Sie sollten nun einen Automaten mit noch zwei Zuständen (Startzustand und Endzustand) haben.
Leiten Sie von diesem Automaten den regulären Ausdruck für die Sprache $L(N)$ ab.
(**Beachten Sie die Schleife in Zustand $A$!**)
$(a)^*(aa|aaa|aaa(b)^*|aaa(c^+)|(c)^+)$
### 4(e)
Der erhaltene reguläre Ausdruck ist vermutlich recht lang.
**Versuchen Sie ihn (durch „scharfes Hinsehen“) soweit wie möglich zu vereinfachen.**
$a^*(aa|aaa(b^*|c^*)|c^+)$
ODER
$a^*(aa(a(b^*|c^*))^?|c^+)$