Skip to content
Snippets Groups Projects
Commit 41417c5a authored by Michael Leuschel's avatar Michael Leuschel
Browse files

minor fixes

parent 4d2118c4
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id: tags:
## Grammatiken und Chomsky-Hierarchie
Dieses Notebook begleitet Teil 2 der Vorlesung 3 und führt am Ende die Chomsky-Hierarchie ein
%% Cell type:markdown id: tags:
Eine __Grammatik__ ist ein Quadrupel
$G = (\Sigma , N, S, P)$, wobei
* $\Sigma$ ein Alphabet (von so genannten __Terminalsymbolen__) ist,
* $N$ eine endliche Menge (von so genannten __Nichtterminalen__) mit
$\Sigma \cap N = \emptyset$,
* $S \in N$ das __Startsymbol__ und
* $P \subseteq (N \cup \Sigma)^+ \times (N \cup \Sigma)^{\ast}$ die
endliche Menge der __Produktionen__ (Regeln).
Diese mathematische Definition setzen wir im Notebook folgendermaßen um.
Wir verwenden eine B Maschine um eine neue Basismenge an Symbolen (ΣN) einführen zu können.
Hier steht ```seq1(T)``` für die nicht leeren Folgen über T, also $T^+$ in der Notation des Skripts.
%% Cell type:code id: tags:
``` prob
::load
MACHINE Grammatik
SETS ΣN = {a,b,c, S}
CONSTANTS Σ, N, P
PROPERTIES
Σ = {a,b,c} ∧
Σ ∩ N = {} ∧
Σ ∪ N = ΣN ∧
S ∈ N ∧
P ⊆ seq1(ΣN) × seq(ΣN) ∧
// Die Beispiel Grammatik G1 von den Folien
P = { [S] ↦ [],
[S] ↦ [a,S,b]
}
DEFINITIONS SET_PREF_PP_SEQUENCES == TRUE
END
```
%% Output
Loaded machine: Grammatik
%% Cell type:code id: tags:
``` prob
:constants
```
%% Output
Machine constants set up using operation 0: $setup_constants()
%% Cell type:code id: tags:
``` prob
[S] ↦ RHS ∈ P
```
%% Output
$\mathit{TRUE}$
**Solution:**
* $\mathit{RHS} = []$
TRUE
Solution:
RHS = []
%% Cell type:markdown id: tags:
Mit dem relationalen Bild können wir alle Regeln mit der Folge S auf der rechten Seite finden:
%% Cell type:code id: tags:
``` prob
P[{[S]}]
P[{ [S] }]
```
%% Output
$\{[],[a,\mathit{S},b]\}$
{[],[a,S,b]}
%% Cell type:markdown id: tags:
Definiere die __unmittelbare Ableitungsrelation__ bzgl. $G$ so
* $u \vdash_{G} v \Longleftrightarrow u = xpz, v = xqz$,
wobei $x,z \in (N \cup \Sigma)^{\ast}$ und $p \rightarrow q$ eine Regel in $P$
ist.
Im Notebook können wir dies so umsetzen, können aber leider nicht das Symbol $\vdash_G$ verwenden.
Aus $u \vdash_{G} v$ wird $u \mapsto v \in abl$.
%% Cell type:code id: tags:
``` prob
::load
MACHINE Grammatik
SETS ΣN = {a,b,c, S}
CONSTANTS Σ, N, P
ABSTRACT_CONSTANTS abl
PROPERTIES
Σ = {a,b,c} ∧
Σ ∩ N = {} ∧
Σ ∪ N = ΣN ∧
S ∈ N ∧
P ⊆ seq1(ΣN) × seq(ΣN) ∧
// Die Beispiel Grammatik G1 von den Folien
P = { [S] ↦ [],
[S] ↦ [a,S,b]
}
abl = {u,v | ∃(x,z,p,q).( p↦q ∈ P ∧ u = x^p^z ∧ v = x^q^z )}
DEFINITIONS SET_PREF_PP_SEQUENCES == TRUE
END
```
%% Output
Loaded machine: Grammatik
%% Cell type:code id: tags:
``` prob
:constants
```
%% Output
Machine constants set up using operation 0: $setup_constants()
%% Cell type:markdown id: tags:
Da diese Relation unendlich ist wird diese im Notebook symbolisch gehalten. Wir können aber prüfen ob Paare an Folgen in der Relation sind:
Da diese Relation ```abl``` unendlich ist wird diese im Notebook symbolisch gehalten. Wir können aber prüfen ob Paare an Folgen in der Relation sind:
%% Cell type:code id: tags:
``` prob
[S] ↦ [a,S,b] ∈ abl
abl
```
%% Output
$\newcommand{\qdot}{\mathord{\mkern1mu\cdot\mkern1mu}}/*@symbolic*/ \{\mathit{u},\mathit{v}\mid\exists(\mathit{x},\mathit{z},\mathit{p},\mathit{q})\qdot(\mathit{p} \mapsto \mathit{q} \in \{([S]\mapsto []),([S]\mapsto [a,\mathit{S},b])\} \land \mathit{u} = \mathit{x} ⌒ \mathit{p} ⌒ \mathit{z} \land \mathit{v} = \mathit{x} ⌒ \mathit{q} ⌒ \mathit{z})\}$
/*@symbolic*/ {u,v∣∃(x,z,p,q)·(p ↦ q ∈ {([S]↦[]),([S]↦[a,S,b])} ∧ u = x ⌒ p ⌒ z ∧ v = x ⌒ q ⌒ z)}
%% Cell type:code id: tags:
``` prob
[a,S,b,S] ↦ [a,S,b,a,S,b] ∈ abl
```
%% Output
$\mathit{TRUE}$
TRUE
%% Cell type:code id: tags:
``` prob
[S] ↦ [a,b] ∈ abl
```
%% Output
$\mathit{FALSE}$
FALSE
%% Cell type:code id: tags:
``` prob
[S] ↦ x : abl
[S] ↦ x abl
```
%% Output
$\mathit{TRUE}$
**Solution:**
* $\mathit{x} = []$
TRUE
Solution:
x = []
%% Cell type:markdown id: tags:
Mit dem relationalen Abbild können wir die Menge aller Umschreibungen berrechnen:
%% Cell type:code id: tags:
``` prob
abl[ {[S]} ]
abl[ { [S] } ]
```
%% Output
$\{[],[a,\mathit{S},b]\}$
{[],[a,S,b]}
%% Cell type:code id: tags:
``` prob
abl[ {[a,S,b]} ]
abl[ {[a,S,b,S]} ]
```
%% Output
$\{[a,b],[a,\mathit{a},\mathit{S},\mathit{b},b]\}$
{[a,b],[a,a,S,b,b]}
$\{[a,\mathit{b},S],[a,\mathit{S},b],[a,\mathit{S},\mathit{b},\mathit{a},\mathit{S},b],[a,\mathit{a},\mathit{S},\mathit{b},\mathit{b},S]\}$
{[a,b,S],[a,S,b],[a,S,b,a,S,b],[a,a,S,b,b,S]}
%% Cell type:markdown id: tags:
Durch mehrfache Anwendung bekommen wir die Ergebnisse von immer längeren Ableitungen:
%% Cell type:code id: tags:
``` prob
abl[ abl[ {[S]} ] ]
```
%% Output
$\{[a,b],[a,\mathit{a},\mathit{S},\mathit{b},b]\}$
{[a,b],[a,a,S,b,b]}
%% Cell type:code id: tags:
``` prob
abl[ abl[ abl[ {[S]} ] ] ]
```
%% Output
$\{[a,\mathit{a},\mathit{b},b],[a,\mathit{a},\mathit{a},\mathit{S},\mathit{b},\mathit{b},b]\}$
{[a,a,b,b],[a,a,a,S,b,b,b]}
%% Cell type:markdown id: tags:
Durch $n$-malige Anwendung von $\vdash_{G}$ erhalten wir
$\vdash_{G}^{n}$. Das heiß t:
* $u \vdash_{G}^{n} v \Longleftrightarrow u = x_0 \vdash_{G} x_1
\vdash_{G} \cdots \vdash_{G} x_n = v$
Im Notebook kann man für die n-malige Anwendung einer binären Relation den Operator ```iterate``` verwenden:
%% Cell type:code id: tags:
``` prob
[S] ↦ [a,b] ∈ iterate(abl,2)
```
%% Output
$\mathit{TRUE}$
TRUE
%% Cell type:markdown id: tags:
Die Menge $\{w \mid S \vdash_{G}^{n} w\}$ kann direkt mit dem relationalen Bild berechnet werden. Zum Beispiel für n = 0,1,2,3,4:
%% Cell type:code id: tags:
``` prob
iterate(abl,0)[ {[S]} ]
```
%% Output
$\{[S]\}$
{[S]}
%% Cell type:code id: tags:
``` prob
iterate(abl,1)[ {[S]} ]
```
%% Output
$\{[],[a,\mathit{S},b]\}$
{[],[a,S,b]}
%% Cell type:code id: tags:
``` prob
iterate(abl,2)[ {[S]} ]
```
%% Output
$\{[a,b],[a,\mathit{a},\mathit{S},\mathit{b},b]\}$
{[a,b],[a,a,S,b,b]}
%% Cell type:code id: tags:
``` prob
iterate(abl,3)[ {[S]} ]
```
%% Output
$\{[a,\mathit{a},\mathit{b},b],[a,\mathit{a},\mathit{a},\mathit{S},\mathit{b},\mathit{b},b]\}$
{[a,a,b,b],[a,a,a,S,b,b,b]}
%% Cell type:code id: tags:
``` prob
iterate(abl,4)[ {[S]} ]
```
%% Output
$\{[a,\mathit{a},\mathit{a},\mathit{b},\mathit{b},b],[a,\mathit{a},\mathit{a},\mathit{a},\mathit{S},\mathit{b},\mathit{b},\mathit{b},b]\}$
{[a,a,a,b,b,b],[a,a,a,a,S,b,b,b,b]}
%% Cell type:markdown id: tags:
Die von der Grammatik $G$ erzeugte Sprache ist
definiert als
$L(G) = \{w \in \Sigma^* \mid S \vdash_{G}^{\ast} w\}.$
Bis zur Länge 4 gibt es folgende abgeleitenen Wörter über $\Sigma \cup N$
(auch Satzformen genannt):
%% Cell type:code id: tags:
``` prob
UNION(i).(i:0..4|iterate(abl,i)[ {[S]} ])
```
%% Output
$\{[],[a,b],[S],[a,\mathit{a},\mathit{b},b],[a,\mathit{S},b],[a,\mathit{a},\mathit{a},\mathit{b},\mathit{b},b],[a,\mathit{a},\mathit{S},\mathit{b},b],[a,\mathit{a},\mathit{a},\mathit{S},\mathit{b},\mathit{b},b],[a,\mathit{a},\mathit{a},\mathit{a},\mathit{S},\mathit{b},\mathit{b},\mathit{b},b]\}$
{[],[a,b],[S],[a,a,b,b],[a,S,b],[a,a,a,b,b,b],[a,a,S,b,b],[a,a,a,S,b,b,b],[a,a,a,a,S,b,b,b,b]}
%% Cell type:markdown id: tags:
Wenn wir mit $\Sigma^*$ schneiden bekommen wir Wörter der von der Grammatik generierten Sprache:
%% Cell type:code id: tags:
``` prob
UNION(i).(i:0..4|iterate(abl,i)[ {[S]} ]) ∩ seq(Σ)
```
%% Output
$\{[],[a,b],[a,\mathit{a},\mathit{b},b],[a,\mathit{a},\mathit{a},\mathit{b},\mathit{b},b]\}$
{[],[a,b],[a,a,b,b],[a,a,a,b,b,b]}
%% Cell type:markdown id: tags:
Wir können die Ableitungsrelationen für alle Satzformen bis zu einer gegebenen Tiefe auch grafisch darstellen.
%% Cell type:code id: tags:
``` prob
:let SF UNION(i).(i:0..4|iterate(abl,i)[ {[S]} ])
```
%% Output
$\{[],[a,b],[S],[a,\mathit{a},\mathit{b},b],[a,\mathit{S},b],[a,\mathit{a},\mathit{a},\mathit{b},\mathit{b},b],[a,\mathit{a},\mathit{S},\mathit{b},b],[a,\mathit{a},\mathit{a},\mathit{S},\mathit{b},\mathit{b},b],[a,\mathit{a},\mathit{a},\mathit{a},\mathit{S},\mathit{b},\mathit{b},\mathit{b},b]\}$
{[],[a,b],[S],[a,a,b,b],[a,S,b],[a,a,a,b,b,b],[a,a,S,b,b],[a,a,a,S,b,b,b],[a,a,a,a,S,b,b,b,b]}
%% Cell type:code id: tags:
``` prob
:pref DOT_DECOMPOSE_NODES=FALSE
```
%% Output
Preference changed: DOT_DECOMPOSE_NODES = FALSE
%% Cell type:code id: tags:
``` prob
:dot expr_as_graph ("abl",SF <| abl |> SF)
```
%% Output
<Dot visualization: expr_as_graph [SFSF={[],[a,b],[S],[a,a,b,b],[a,S,b],[a,a,a,b,b,b],[a,a,S,b,b],[a,a,a,S,b,b,b],[a,a,a,a,S,b,b,b,b]}("abl",SF<|abl|>SF)]>
%% Cell type:markdown id: tags:
Die Grammatik G2 können wir wie folgt umsetzen:
%% Cell type:code id: tags:
``` prob
::load
MACHINE Grammatik2
SETS ΣN = {a,b,c, S, B,C}
CONSTANTS Σ, N, P
ABSTRACT_CONSTANTS abl
PROPERTIES
Σ = {a,b,c} ∧
Σ ∩ N = {} ∧
Σ ∪ N = ΣN ∧
S ∈ N ∧
P ⊆ seq1(ΣN) × seq(ΣN) ∧
// Die Beispiel Grammatik G1 von den Folien
P = { [S] ↦ [a,B,C],
[S] ↦ [a,S,B,C],
[C,B] ↦ [B,C],
[a,B] ↦ [a,b],
[b,B] ↦ [b,b],
[b,C] ↦ [b,c],
[c,C] ↦ [c,c]
}
abl = {u,v | ∃(x,z,p,q).( p↦q ∈ P ∧ u = x^p^z ∧ v = x^q^z )}
DEFINITIONS SET_PREF_PP_SEQUENCES == TRUE
END
```
%% Output
Loaded machine: Grammatik2
%% Cell type:code id: tags:
``` prob
:constants
```
%% Output
Machine constants set up using operation 0: $setup_constants()
%% Cell type:code id: tags:
``` prob
:let SF UNION(i).(i:0..4|iterate(abl,i)[ {[S]} ])
```
%% Output
$\{[S],[a,\mathit{b},c],[a,\mathit{b},C],[a,\mathit{S},\mathit{B},C],[a,\mathit{B},C],[a,\mathit{a},\mathit{b},\mathit{c},\mathit{B},C],[a,\mathit{a},\mathit{b},\mathit{C},\mathit{B},C],[a,\mathit{a},\mathit{b},\mathit{B},\mathit{C},C],[a,\mathit{a},\mathit{B},\mathit{C},\mathit{B},C],[a,\mathit{a},\mathit{B},\mathit{B},\mathit{C},C],[a,\mathit{a},\mathit{S},\mathit{B},\mathit{C},\mathit{B},C],[a,\mathit{a},\mathit{S},\mathit{B},\mathit{B},\mathit{C},C],[a,\mathit{a},\mathit{a},\mathit{S},\mathit{B},\mathit{C},\mathit{B},\mathit{B},\mathit{C},C],[a,\mathit{a},\mathit{a},\mathit{S},\mathit{B},\mathit{B},\mathit{C},\mathit{C},\mathit{B},C],[a,\mathit{a},\mathit{a},\mathit{S},\mathit{B},\mathit{C},\mathit{B},\mathit{C},\mathit{B},C],[a,\mathit{a},\mathit{a},\mathit{B},\mathit{B},\mathit{C},\mathit{C},\mathit{B},C],[a,\mathit{a},\mathit{a},\mathit{b},\mathit{C},\mathit{B},\mathit{C},\mathit{B},C],[a,\mathit{a},\mathit{a},\mathit{B},\mathit{C},\mathit{B},\mathit{B},\mathit{C},C],[a,\mathit{a},\mathit{a},\mathit{B},\mathit{C},\mathit{B},\mathit{C},\mathit{B},C],[a,\mathit{a},\mathit{a},\mathit{a},\mathit{B},\mathit{C},\mathit{B},\mathit{C},\mathit{B},\mathit{C},\mathit{B},C],[a,\mathit{a},\mathit{a},\mathit{a},\mathit{S},\mathit{B},\mathit{C},\mathit{B},\mathit{C},\mathit{B},\mathit{C},\mathit{B},C]\}$
{[S],[a,b,c],[a,b,C],[a,S,B,C],[a,B,C],[a,a,b,c,B,C],[a,a,b,C,B,C],[a,a,b,B,C,C],[a,a,B,C,B,C],[a,a,B,B,C,C],[a,a,S,B,C,B,C],[a,a,S,B,B,C,C],[a,a,a,S,B,C,B,B,C,C],[a,a,a,S,B,B,C,C,B,C],[a,a,a,S,B,C,B,C,B,C],[a,a,a,B,B,C,C,B,C],[a,a,a,b,C,B,C,B,C],[a,a,a,B,C,B,B,C,C],[a,a,a,B,C,B,C,B,C],[a,a,a,a,B,C,B,C,B,C,B,C],[a,a,a,a,S,B,C,B,C,B,C,B,C]}
%% Cell type:code id: tags:
``` prob
SF ∩ seq(Σ)
```
%% Output
$\{[a,\mathit{b},c]\}$
{[a,b,c]}
%% Cell type:code id: tags:
``` prob
:pref DOT_DECOMPOSE_NODES=FALSE
```
%% Output
Preference changed: DOT_DECOMPOSE_NODES = FALSE
%% Cell type:code id: tags:
``` prob
:dot expr_as_graph ("abl",SF <| abl |> SF)
```
%% Output
<Dot visualization: expr_as_graph [SFSF={[S],[a,b,c],[a,b,C],[a,S,B,C],[a,B,C],[a,a,b,c,B,C],[a,a,b,C,B,C],[a,a,b,B,C,C],[a,a,B,C,B,C],[a,a,B,B,C,C],[a,a,S,B,C,B,C],[a,a,S,B,B,C,C],[a,a,a,S,B,C,B,B,C,C],[a,a,a,S,B,B,C,C,B,C],[a,a,a,S,B,C,B,C,B,C],[a,a,a,B,B,C,C,B,C],[a,a,a,b,C,B,C,B,C],[a,a,a,B,C,B,B,C,C],[a,a,a,B,C,B,C,B,C],[a,a,a,a,B,C,B,C,B,C,B,C],[a,a,a,a,S,B,C,B,C,B,C,B,C]}("abl",SF<|abl|>SF)]>
%% Cell type:code id: tags:
``` prob
:unlet SF
```
%% Cell type:markdown id: tags:
## Chomsky-Hierarchie
Die Chomsky-Hierarchie klassifiziert Grammatiken nach folgenden Kriterien:
Sei $G = (\Sigma , N, S, P)$ eine Grammatik.
* $G$ ist eine __Typ-0-Grammatik__, falls $P$ keinerlei
Einschränkungen unterliegt.
* $G$ ist eine __Typ-1-Grammatik__ (bzw. __kontextsensitiv__ bzw. _nichtverkürzend_ oder __monoton__), falls für alle Regeln $p \rightarrow q$ in
$P$ gilt: $|p| \leq |q|$.
* Eine Typ-1-Grammatik $G$ ist __vom Typ 2__ (bzw. ___kontextfrei__), falls für alle Regeln $p \rightarrow q$ in $P$ gilt: $p \in N$.
* Eine Typ-1-Grammatik $G$ ist __vom Typ 2__ (bzw. __kontextfrei__), falls für alle Regeln $p \rightarrow q$ in $P$ gilt: $p \in N$.
* Eine Typ-2-Grammatik $G$ ist __vom Typ 3__ (bzw. __regulär__ bzw. __rechtslinear__), falls f"ur
* Eine Typ-2-Grammatik $G$ ist __vom Typ 3__ (bzw. __regulär__ bzw. __rechtslinear__), falls für
alle Regeln $p \rightarrow q$ in $P$ gilt: $p \in N$ und $q \in \Sigma \cup \Sigma N$.
Eine Sprache $A \subseteq \Sigma^*$ ist genau dann vom Typ $i \in
\{0,1,2,3\}$, wenn es eine Typ-$i$-Grammatik $G$ gibt mit $L(G) = A$.
%% Cell type:code id: tags:
``` prob
P
```
%% Output
$\{([a,B]\mapsto [a,b]),([b,B]\mapsto [b,b]),([b,C]\mapsto [b,c]),([c,C]\mapsto [c,c]),([S]\mapsto [a,\mathit{S},\mathit{B},C]),([S]\mapsto [a,\mathit{B},C]),([C,B]\mapsto [B,C])\}$
{([a,B]↦[a,b]),([b,B]↦[b,b]),([b,C]↦[b,c]),([c,C]↦[c,c]),([S]↦[a,S,B,C]),([S]↦[a,B,C]),([C,B]↦[B,C])}
%% Cell type:markdown id: tags:
Jede Grammatik ist vom Typ-0.
Die Grammatik $G_2$ ist nicht-verkürzend, also vom Typ 1:
%% Cell type:code id: tags:
``` prob
∀(p,q).( p↦q ∈ P ⇒ size(p) ≤ size(q))
```
%% Output
$\mathit{TRUE}$
TRUE
%% Cell type:code id: tags:
``` prob
P
```
%% Output
$\{([a,B]\mapsto [a,b]),([b,B]\mapsto [b,b]),([b,C]\mapsto [b,c]),([c,C]\mapsto [c,c]),([S]\mapsto [a,\mathit{S},\mathit{B},C]),([S]\mapsto [a,\mathit{B},C]),([C,B]\mapsto [B,C])\}$
{([a,B]↦[a,b]),([b,B]↦[b,b]),([b,C]↦[b,c]),([c,C]↦[c,c]),([S]↦[a,S,B,C]),([S]↦[a,B,C]),([C,B]↦[B,C])}
%% Cell type:markdown id: tags:
Die Grammatik $G_2$ ist aber nicht vom Typ 2:
%% Cell type:code id: tags:
``` prob
∀(p,q).( p↦q ∈ P ⇒ size(p)=1 & p∈seq(N))
```
%% Output
$\mathit{FALSE}$
FALSE
%% Cell type:markdown id: tags:
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.
%% Cell type:code id: tags:
``` prob
∀(p,q).( p↦q ∈ P ⇒ p ∈ N)
```
%% Output
:eval: Computation not completed: Type mismatch: Expected POW(seq(ΣN)), but was POW(ΣN) in 'N'
%% Cell type:markdown id: tags:
Die Grammatik $G_2$ ist also vom Typ 1 aber nicht vom Typ 2 oder 3.
Wie sieht es mit der Grammatik $G_1$ aus?
Diese erfüllt die Typ-2 Bedingung:
%% Cell type:code id: tags:
``` prob
:let P1 { [S] ↦ [], [S] ↦ [a,S,b] }
```
%% Output
$\{([S]\mapsto []),([S]\mapsto [a,\mathit{S},b])\}$
{([S]↦[]),([S]↦[a,S,b])}
%% Cell type:code id: tags:
``` prob
∀(p,q).( p↦q ∈ P1 ⇒ size(p)=1 & p∈seq(N))
```
%% Output
$\mathit{TRUE}$
**Solution:**
* $\mathit{P1} = \{([S]\mapsto []),([S]\mapsto [a,\mathit{S},b])\}$
TRUE
Solution:
P1 = {([S]↦[]),([S]↦[a,S,b])}
%% Cell type:markdown id: tags:
Die Grammatik $G_1$ erfüllt aber nicht die Typ 1 Bedingung, da die erste Regel verkürzend ist:
%% Cell type:code id: tags:
``` prob
∀(p,q).( p↦q ∈ P1 ⇒ size(p) ≤ size(q))
```
%% Output
$\mathit{FALSE}$
FALSE
%% Cell type:code id: tags:
``` prob
p↦q ∈ P1 ∧ size(p) > size(q) /* Gegenbeispiel */
```
%% Output
$\mathit{TRUE}$
**Solution:**
* $\mathit{p} = [S]$
* $\mathit{q} = []$
* $\mathit{P1} = \{([S]\mapsto []),([S]\mapsto [a,\mathit{S},b])\}$
TRUE
Solution:
p = [S]
q = []
P1 = {([S]↦[]),([S]↦[a,S,b])}
%% Cell type:markdown id: tags:
Die Grammatik $G_1$ ist also vom Typ-0.
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:
### Chomsky-Hierarchie
Die __Chomsky-Hierarchie__ besteht aus den vier Sprachklassen:
* $\mathfrak{L}_i = \{L(G) \Longleftrightarrow \mbox{$G$ ist Typ-$i$-Grammatik} \}$,
wobei $i \in \{0,1,2,3\}$.
Übliche Bezeichnungen:
* $\mathfrak{L}_0$ ist die Klasse aller Sprachen, die durch eine
Grammatik erzeugt werden können;
* $\mathfrak{L}_1 = CS$ ist die __Klasse der kontextsensitiven Sprachen__;
* $\mathfrak{L}_2 = CF$ ist die __Klasse der kontextfreien Sprachen__;
* $\mathfrak{L}_3 = REG$ ist die __Klasse der regulären Sprachen__.
* $REG \subseteq CF \subseteq CS \subseteq \mathfrak{L}_0.$
%% Cell type:code id: tags:
``` prob
```
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment