"Machine constants set up using operation 0: $setup_constants()"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
":constants"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ein Automat befindet sich jeweils in einem der Zustände $z$ aus Z. Er kann dann in diesem Zustand ein Symbol $x$ aus $\\Sigma$ verarbeiten und wechselt dann in den Zustand $\\delta(z,x)$.\n",
"Zum Beispiel, wenn der DFA im Zustand z0 das Symbol $0$ erhält wechselt er nach:"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
"$\\mathit{z1}$"
],
"text/plain": [
"z1"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"δ(z0,0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wenn der Automat dann das Symbol 1 erhält wechselt er von Zustand $z1$ nach:"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
"$\\mathit{z2}$"
],
"text/plain": [
"z2"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"δ(z1,1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Da $z2\\in F$ ein Endzustand ist, akzeptiert der DFA das Wort $01$ (oder $[0,1]$ in der Notation vom Notebook).\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Zustandgraph\n",
"\n",
"Man kann den DFA auch grafisch darstellen: Endzustände sind mit einem doppelten Kreis gekennzeichnet, der Anfangszustand wird durch eine besondere Startkante gekennzeichnet.\n",
"\n",
"Formal ist dies so definiert:\n",
"Ein DFA $M= (\\Sigma, Z, \\delta , z_0, F)$ lässt sich anschaulich durch \n",
"seinen __Zustandsgraphen__ darstellen,\n",
"\\begin{itemize}\n",
"* dessen Knoten die Zustände von $M$ und\n",
"* dessen Kanten Zustands\"uberg\"ange gemäß der\n",
"* Gilt $\\delta(z,a) = z'$ f\"ur ein Symbol $a \\in \\Sigma$ und für\n",
" zwei Zustände $z, z' \\in Z$, so hat dieser Graph eine gerichtete\n",
" Kante von $z$ nach~$z'$, die mit $a$ beschriftet ist.\n",
"* Der Startzustand wird durch einen Pfeil auf $z_0$ dargestellt.\n",
"* Endzustände sind durch einen Doppelkreis markiert.\n",
"\n",
"Für den Automaten oben ergiebt dies folgenden Zustandsgraphen.\n",
"(Anmerkung: diese Darstellung erfordert eine neue Version des Jupyter-Kernels. Falls diese bei ihnen nicht funktioniert schauen Sie sich die Abbildung auf den Folien an)."
Machine constants set up using operation 0: $setup_constants()
%% Cell type:markdown id: tags:
Ein Automat befindet sich jeweils in einem der Zustände $z$ aus Z. Er kann dann in diesem Zustand ein Symbol $x$ aus $\Sigma$ verarbeiten und wechselt dann in den Zustand $\delta(z,x)$.
Zum Beispiel, wenn der DFA im Zustand z0 das Symbol $0$ erhält wechselt er nach:
%% Cell type:code id: tags:
``` prob
δ(z0,0)
```
%% Output
$\mathit{z1}$
z1
%% Cell type:markdown id: tags:
Wenn der Automat dann das Symbol 1 erhält wechselt er von Zustand $z1$ nach:
%% Cell type:code id: tags:
``` prob
δ(z1,1)
```
%% Output
$\mathit{z2}$
z2
%% Cell type:markdown id: tags:
Da $z2\in F$ ein Endzustand ist, akzeptiert der DFA das Wort $01$ (oder $[0,1]$ in der Notation vom Notebook).
%% Cell type:markdown id: tags:
#### Zustandgraph
Man kann den DFA auch grafisch darstellen: Endzustände sind mit einem doppelten Kreis gekennzeichnet, der Anfangszustand wird durch eine besondere Startkante gekennzeichnet.
Formal ist dies so definiert:
Ein DFA $M= (\Sigma, Z, \delta , z_0, F)$ lässt sich anschaulich durch
seinen __Zustandsgraphen__ darstellen,
\begin{itemize}
* dessen Knoten die Zustände von $M$ und
* dessen Kanten Zustands"uberg"ange gemäß der
Überführungs\-funktion $\delta$ repräsentieren.
* Gilt $\delta(z,a) = z'$ f"ur ein Symbol $a \in \Sigma$ und für
zwei Zustände $z, z' \in Z$, so hat dieser Graph eine gerichtete
Kante von $z$ nach~$z'$, die mit $a$ beschriftet ist.
* Der Startzustand wird durch einen Pfeil auf $z_0$ dargestellt.
* Endzustände sind durch einen Doppelkreis markiert.
Für den Automaten oben ergiebt dies folgenden Zustandsgraphen.
(Anmerkung: diese Darstellung erfordert eine neue Version des Jupyter-Kernels. Falls diese bei ihnen nicht funktioniert schauen Sie sich die Abbildung auf den Folien an).
%% Cell type:code id: tags:
``` prob
:dot custom_graph
```
%% Output
<Dot visualization: custom_graph []>
%% Cell type:markdown id: tags:
#### Erweiterte Überführungsfunktion und akzeptierte Sprache
Wir hatten gesehen, dass der Automat von $z0$ bei der Eingabe von $0$ nach $z1=\delta(z0,0)$
wechselt und nach einer weiteren Eingabe von $1$ in den Zustand $z2 = \delta(z1,1)$ wechselt.
Den aktuellen Zustand nach der Eingabe von dem Wort $01$ kann man also so berechnen:
%% Cell type:code id: tags:
``` prob
δ(δ(z0,0),1)
```
%% Output
$\mathit{z2}$
z2
%% Cell type:markdown id: tags:
Dies führt zu der folgenden Definition, mit der man den Zustand nach einer beliebigen Folge von Eingabesymbolen berechnen kann:
Sei $M = (\Sigma, Z, \delta , z_0, F)$ ein DFA.
Die __erweiterte Überführungsfunktion
$\widehat{\delta} : Z \times \Sigma^*\rightarrow Z$ von $M$ ist induktiv definiert: