"Die obige Tabelle zeigt, in welche Sprachklasse die entsprechenden Grammatiken fallen. Dabei ist zu beachten, dass L3 = L4 ist, aber P3 und P4 unterschiedliche Typen haben. Die Sprache fällt allerdings immer in die größte Spracheklasse zu der es eine Grammatik gibt, die diese Sprache erzeugt. Also gilt $L4 ∈ \\mathfrak{L}_3 = REG$. Daher reicht die Angabe einer Grammatik nicht aus, um zu zeigen dass eine Sprache höchstens in einer der Klassen liegt. Um dies zu zeigen gibt es verschiedene Methoden, wie z.B. das Pumping-Lemma oder die Myhill-Nerode Relation."
]
},
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count": null,
"execution_count": null,
...
...
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
## Grammatiken und Chomsky-Hierarchie
## Grammatiken und Chomsky-Hierarchie
Dieses Notebook begleitet Teil 2 der Vorlesung 3 und führt am Ende die Chomsky-Hierarchie ein
Dieses Notebook begleitet Teil 2 der Vorlesung 3 und führt am Ende die Chomsky-Hierarchie ein
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
Eine __Grammatik__ ist ein Quadrupel
Eine __Grammatik__ ist ein Quadrupel
$G = (\Sigma , N, S, P)$, wobei
$G = (\Sigma , N, S, P)$, wobei
* $\Sigma$ ein Alphabet (von so genannten __Terminalsymbolen__) ist,
* $\Sigma$ ein Alphabet (von so genannten __Terminalsymbolen__) ist,
* $N$ eine endliche Menge (von so genannten __Nichtterminalen__) mit
* $N$ eine endliche Menge (von so genannten __Nichtterminalen__) mit
Anmerkung: im Skript wird nicht zwischen einem Nicht-Terminal Symbol und einer Folge der Länge 1 bestehend aus einem Nicht-Terminal unterschieden.
Anmerkung: im Skript wird nicht zwischen einem Nicht-Terminal Symbol und einer Folge der Länge 1 bestehend aus einem Nicht-Terminal unterschieden.
Deshalb steht im Skript $p\in N$. Im Notebook sind $p$ und die Folge bestehend aus einem $p$ (geschrieben als [p]) von einem unterschiedlichen Typ. Die wortwörtliche Übersetzung von $p\in N$ führt zu einem Typfehler.
Deshalb steht im Skript $p\in N$. Im Notebook sind $p$ und die Folge bestehend aus einem $p$ (geschrieben als [p]) von einem unterschiedlichen Typ. Die wortwörtliche Übersetzung von $p\in N$ führt zu einem Typfehler.
%% Cell type:code id: tags:
%% Cell type:code id: tags:
``` prob
``` prob
∀(p,q).( p↦q ∈ P ⇒ p ∈ N)
∀(p,q).( p↦q ∈ P ⇒ p ∈ N)
```
```
%% Output
%% Output
:eval: Computation not completed: Type mismatch: Expected POW(seq(ΣN)), but was POW(ΣN) in 'N'
:eval: Computation not completed: Type mismatch: Expected POW(seq(ΣN)), but was POW(ΣN) in 'N'
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
Die Grammatik $G_2$ ist also vom Typ 1 aber nicht vom Typ 2 oder 3.
Die Grammatik $G_2$ ist also vom Typ 1 aber nicht vom Typ 2 oder 3.
Wir werden aber in der nächsten Woche eine Sonderregelung für das leere Wort erlauben, damit auch Grammatiken vom Typ 1,2 oder 3 das leere Wort in ihrer Sprache generieren können.
Wir werden aber in der nächsten Woche eine Sonderregelung für das leere Wort erlauben, damit auch Grammatiken vom Typ 1,2 oder 3 das leere Wort in ihrer Sprache generieren können.
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
### Chomsky-Hierarchie
### Chomsky-Hierarchie
Die __Chomsky-Hierarchie__ besteht aus den vier Sprachklassen:
Die __Chomsky-Hierarchie__ besteht aus den vier Sprachklassen:
* $\mathfrak{L}_i = \{L(G) \Longleftrightarrow \mbox{$G$ ist Typ-$i$-Grammatik} \}$,
* $\mathfrak{L}_i = \{L(G) \Longleftrightarrow \mbox{$G$ ist Typ-$i$-Grammatik} \}$,
wobei $i \in \{0,1,2,3\}$.
wobei $i \in \{0,1,2,3\}$.
Übliche Bezeichnungen:
Übliche Bezeichnungen:
* $\mathfrak{L}_0$ ist die Klasse aller Sprachen, die durch eine
* $\mathfrak{L}_0$ ist die Klasse aller Sprachen, die durch eine
Grammatik erzeugt werden können;
Grammatik erzeugt werden können;
* $\mathfrak{L}_1 = CS$ ist die __Klasse der kontextsensitiven Sprachen__;
* $\mathfrak{L}_1 = CS$ ist die __Klasse der kontextsensitiven Sprachen__;
* $\mathfrak{L}_2 = CF$ ist die __Klasse der kontextfreien Sprachen__;
* $\mathfrak{L}_2 = CF$ ist die __Klasse der kontextfreien Sprachen__;
* $\mathfrak{L}_3 = REG$ ist die __Klasse der regulären Sprachen__.
* $\mathfrak{L}_3 = REG$ ist die __Klasse der regulären Sprachen__.
Machine constants set up using operation 0: $setup_constants()
%% Cell type:code id: tags:
``` prob
:init
```
%% Output
Machine initialised using operation 1: $initialise_machine()
%% Cell type:code id: tags:
``` prob
:show
```
%% Output
<table style="font-family:monospace"><tbody>
<tr>
<td style="padding:10px">P</td>
<td style="padding:10px">L0(P)</td>
<td style="padding:10px">L1(P)</td>
<td style="padding:10px">L2(P)</td>
<td style="padding:10px">L3(P)</td>
</tr>
<tr>
<td style="padding:10px">P0</td>
<td style="padding:10px">TRUE</td>
<td style="padding:10px">FALSE</td>
<td style="padding:10px">FALSE</td>
<td style="padding:10px">FALSE</td>
</tr>
<tr>
<td style="padding:10px">P1</td>
<td style="padding:10px">TRUE</td>
<td style="padding:10px">TRUE</td>
<td style="padding:10px">FALSE</td>
<td style="padding:10px">FALSE</td>
</tr>
<tr>
<td style="padding:10px">P2</td>
<td style="padding:10px">TRUE</td>
<td style="padding:10px">TRUE</td>
<td style="padding:10px">TRUE</td>
<td style="padding:10px">FALSE</td>
</tr>
<tr>
<td style="padding:10px">P3</td>
<td style="padding:10px">TRUE</td>
<td style="padding:10px">TRUE</td>
<td style="padding:10px">TRUE</td>
<td style="padding:10px">TRUE</td>
</tr>
<tr>
<td style="padding:10px">P4</td>
<td style="padding:10px">TRUE</td>
<td style="padding:10px">FALSE</td>
<td style="padding:10px">FALSE</td>
<td style="padding:10px">FALSE</td>
</tr>
</tbody></table>
<Animation function visualisation>
%% Cell type:markdown id: tags:
Die obige Tabelle zeigt, in welche Sprachklasse die entsprechenden Grammatiken fallen. Dabei ist zu beachten, dass L3 = L4 ist, aber P3 und P4 unterschiedliche Typen haben. Die Sprache fällt allerdings immer in die größte Spracheklasse zu der es eine Grammatik gibt, die diese Sprache erzeugt. Also gilt $L4 ∈ \mathfrak{L}_3 = REG$. Daher reicht die Angabe einer Grammatik nicht aus, um zu zeigen dass eine Sprache höchstens in einer der Klassen liegt. Um dies zu zeigen gibt es verschiedene Methoden, wie z.B. das Pumping-Lemma oder die Myhill-Nerode Relation.