"Die Länge eines Wortes $w$ ist die Anzahl der Symbole in $w$. Im Skript schreiben wir $\\|w\\|$, im Notebook benutzen wir ```size(w)```:"
"Die Länge eines Wortes $w$ ist die Anzahl der Symbole in $w$. Im Skript schreiben wir $|w|$, im Notebook benutzen wir ```size(w)```:"
]
},
{
...
...
%% Cell type:markdown id: tags:
## Formale Sprachen
Dieses Notebook begleitet Vorlesung 3 und erläutert die grundlegenden Definitionen der formalen Sprachen.
%% Cell type:code id: tags:
``` prob
::load
MACHINE Alphabet
SETS Σ = {a,b,c}
END
```
%% Output
Loaded machine: Alphabet
%% Cell type:markdown id: tags:
Ein Wort ist eine endliche Folge von Elementen aus dem Alphabet.
Im Skript schreiben wir $w \in \Sigma^{*}$; hier im Notebook schreiben wir
$w \in seq(\Sigma)$.
Im Skript schreiben wir Wörter in dem wir die Symbole aus $\Sigma$ hintereinander setzten: $abc$. Im Notebook schreiben wir $[a,b,c]$ für die Folge mit den drei Symbolen $a$, $b$ und $c$.
Also aus $abc \in \Sigma^*$ wird dies:
%% Cell type:code id: tags:
``` prob
[a,b,c] ∈ seq(Σ)
```
%% Output
$\mathit{TRUE}$
TRUE
%% Cell type:code id: tags:
``` prob
[a,a,b,c] ∈ seq(Σ)
```
%% Output
$\mathit{TRUE}$
TRUE
%% Cell type:markdown id: tags:
Die Länge eines Wortes $w$ ist die Anzahl der Symbole in $w$. Im Skript schreiben wir $\|w\|$, im Notebook benutzen wir ```size(w)```:
Die Länge eines Wortes $w$ ist die Anzahl der Symbole in $w$. Im Skript schreiben wir $|w|$, im Notebook benutzen wir ```size(w)```:
%% Cell type:code id: tags:
``` prob
size([a,b,c])
```
%% Output
$3$
3
%% Cell type:code id: tags:
``` prob
size([a,a,b,c])
```
%% Output
$4$
4
%% Cell type:markdown id: tags:
Das leere Wort ist das eindeutig bestimmte Wort der Laenge 0:
Leider ist in der B Sprache das Symbol λ schon vergeben (zur Definition von Funktionen). Deshalb müssen wir in einer weiteren Abweichung vom Skript Epsilon verwenden.
Eine formale Sprache ist eine jede Teilmenge von $\Sigma^*$.
Man sieht hier, dass die Folge aabc, mathematisch gesehen eine totale Funktion von 1..4 nach $\Sigma$ ist. Wir können aber den "Pretty-Printer" beeinflussen und Folgen anders ausgeben:
%% Cell type:code id: tags:
``` prob
:pref PP_SEQUENCES=TRUE
```
%% Output
Preference changed: PP_SEQUENCES = TRUE
%% Cell type:code id: tags:
``` prob
w₁
```
%% Output
$[a,\mathit{a},\mathit{b},c]$
[a,a,b,c]
%% Cell type:markdown id: tags:
Hier wird die Schreibweise von B für Folgen verwendet. Diese kann man auch so im Notebook eingeben.
%% Cell type:code id: tags:
``` prob
w₂
```
%% Output
$[c,c]$
[c,c]
%% Cell type:code id: tags:
``` prob
L₁
```
%% Output
$\{[c,c],[a,\mathit{a},\mathit{b},c]\}$
{[c,c],[a,a,b,c]}
%% Cell type:markdown id: tags:
Die Leere Sprache ist die Sprache die keine Wörter enthält, sie ist unterschiedlich von der Sprache die nur das leere Wort beinhaltet:
%% Cell type:code id: tags:
``` prob
LeereSprache = ∅ ∧ LeereSprache ≠ {ε}
```
%% Output
$\mathit{TRUE}$
**Solution:**
* $\mathit{LeereSprache} = []$
TRUE
Solution:
LeereSprache = []
%% Cell type:markdown id: tags:
Die Kardinalität einer Sprache L ist die Anzahl der Wörter von L.
%% Cell type:code id: tags:
``` prob
card(L₁)
```
%% Output
$2$
2
%% Cell type:code id: tags:
``` prob
card( {ε} )
```
%% Output
$1$
1
%% Cell type:code id: tags:
``` prob
card( ∅ )
```
%% Output
$0$
0
%% Cell type:markdown id: tags:
Die Mengeoperatoren (Vereinigung, Schnitt, Differenz) kann man auch auf Sprachen anwenden: