Commit 40b68335 authored by Christopher Happe's avatar Christopher Happe
Browse files

Darstellung der Tabelle von PDA und TM verbessert

parent 8c83627c
%% Cell type:markdown id: tags:
# DFAs, PDAs und TM
Im folgenden werden wir uns damit befassen wie die verschiedenen Automatenmodelle in Verbinndung stehen und wie man sie ineinander übersetzt.
Wie bereits aus der Vorlesung bekannt ist, akzeptieren DFAs reguläre, PDAs kontextfreie und Turingmaschienen $\mathbb{L}_0$ Sprachen. Da die $REG\subseteq CF \subseteq \mathbb{L}_0$ kann jeder DFA durch einen PDA und jeder PDA durch eine TM dargestellt werden. Folgende Maschiene demonstriert eine Möglichkeit dies zu tun:
%% Cell type:code id: tags:
``` prob
MACHINE DFA_PDA_TM
SETS
Alphabet={a,b,Blank, Bottom, lambda};
States = {z_0,z_1,z_2,z_3,z_4,z_5,z_6,z_end};
Direction = {L,R,N}
CONSTANTS DFA, Z_DFA, δ_DFA, z_start, F_DFA,
PDA, Γ_PDA, Z_PDA, δ_PDA,
TM, Γ_TM, Z_TM, δ_TM, F_TM
PROPERTIES
//Allgemeine Regeln
Σ ⊆ Alphabet ∧
z_end ∉ Z_DFA ∪ Z_PDA ∧
lambda ∉ Σ ∪ Γ_PDA ∪ Γ_TM ∧
//Definition des DFAs
DFA = (Σ, Z_DFA, δ_DFA, z_start, F_DFA) ∧
Z_DFA ⊆ States ∧
δ_DFA ∈ (Z_DFA×Σ)→Z_DFA ∧
z_start ∈ Z_DFA ∧
F_DFA ⊆ Z_DFA ∧
//Definition eines PDAs zum DFA
PDA = (Σ, Γ_PDA, Z_PDA, δ_PDA, z_start, Bottom) ∧
Γ_PDA ⊆ Alphabet ∧
Z_PDA ⊆ States ∧
δ_PDA ∈ (Z_PDA×(Σ∪{lambda})×Γ_PDA)⇸(Z_PDA×seq(Γ_PDA)) ∧
z_start ∈ Z_PDA ∧
Bottom ∈ Γ_PDA ∧
Γ_PDA = Σ∪{Bottom} ∧
Z_PDA = Z_DFA ∧
δ_PDA = {regel|∃zustand1,zustand2,terminal.((zustand1,terminal)↦zustand2 ∈ δ_DFA ∧
(regel = (zustand1, terminal, Bottom) ↦ (zustand2, [Bottom])))}
{regel | ∃zustand.(zustand ∈ F_DFA ∧
regel = (zustand, lambda, Bottom) ↦ (zustand, []))} ∧
//Definition einer TM zum DFA
TM = (Σ, Γ_TM, Z_TM, δ_TM, z_start, Blank, F_TM) ∧
Γ_TM ⊆ Alphabet ∧
Z_TM ⊆ States ∧
δ_TM ∈ (Z_TM×Γ_TM)→(Z_TM×Γ_TM×Direction) ∧
z_start ∈ Z_TM ∧
Blank ∈ Γ_TM ∧
F_TM ⊆ Z_TM ∧
Γ_TM = Σ ∪ {Blank} ∧
Z_TM = Z_DFA ∪ {z_end} ∧
δ_TM = {regel|∃zustand1,zustand2,terminal.((zustand1,terminal)↦zustand2 ∈ δ_DFA ∧
(regel = (zustand1, terminal) ↦ (zustand2, Blank, R)))}
{regel | ∃zustand.(zustand ∈ Z_DFA\F_DFA ∧
regel = (zustand, Blank) ↦ (zustand, Blank, N))}
{regel | ∃zustand.(zustand ∈ F_DFA ∧
regel = (zustand, Blank) ↦ (z_end, Blank, N))}
{regel | ∃terminal.(terminal ∈ Γ_TM ∧ regel = (z_end, terminal) ↦ (z_end, terminal, N))} ∧
F_TM = {z_end}
DEFINITIONS
Σ == {a, b};
//Animation des Zustandsgraphen für den DFA
CUSTOM_GRAPH_NODES1 == rec(shape:"doublecircle",nodes∈F_DFA); // Endzustände
CUSTOM_GRAPH_NODES2 == rec(shape:"circle",nodes∈Z_DFA\F_DFA); // andere Zustände
CUSTOM_GRAPH_NODES3 == rec(shape:"none",color:"white",style:"none",nodes:{""});
CUSTOM_GRAPH_EDGES1 == rec(color:"green",label:"a",edges:{x,y|x∈Z_DFA ∧ y=δ_DFA(x,a) ∧ y≠δ_DFA(x,b)});
CUSTOM_GRAPH_EDGES2 == rec(color:"green",label:"b",edges:{x,y|x∈Z_DFA ∧ y=δ_DFA(x,b) ∧ y≠δ_DFA(x,a)});
CUSTOM_GRAPH_EDGES3 == rec(color:"green",label:"a, b",edges:{x,y|x∈Z_DFA ∧ y=δ_DFA(x,a) ∧ y=δ_DFA(x,b)});
CUSTOM_GRAPH_EDGES4 == rec(color:"black",label:"",edges:{""}*{z_start}); // Kanten für Startknoten
END
```
%% Output
Loaded machine: DFA_PDA_TM
%% Cell type:code id: tags:
``` prob
:constants DFA=({a, b}, //Σ
{z_0,z_1,z_2,z_3}, //Z
{(z_0,a)↦z_1, (z_0,b)↦z_3,
(z_1,a)↦z_3, (z_1,b)↦z_2,
(z_2,a)↦z_2, (z_2,b)↦z_2,
(z_3,a)↦z_3, (z_3,b)↦z_3 }, //δ
z_0, {z_0, z_2}) //z0, F
```
%% Output
Machine constants set up using operation 0: $setup_constants()
%% Cell type:markdown id: tags:
Der Zustandsgraph des DFA sieht wie folgt aus:
%% Cell type:code id: tags:
``` prob
:dot custom_graph
```
%% Output
<Dot visualization: custom_graph []>
%% Cell type:code id: tags:
``` prob
:init
```
%% Output
Machine initialised using operation 1: $initialise_machine()
%% Cell type:markdown id: tags:
Der entstandene PDA hat die gleiche Zustandsmenge, wie der gegebene DFA.
Die Überführungen erfolgen ebenfalls analog.
Damit der PDA allerdings ein Wort akzeptiert muss der Keller leer sein. Dafür werden lambda-Übergänge eingefügt, mit denen man in einem Endzustand des DFA den Keller leeren kann.
Die vollständige Überführungsfunktion des PDA ist durch folgende Tabelle gegeben:
Die vollständige Überführungsfunktion des PDA ist durch die nachfolgende Tabelle gegeben. Dabei ist die Spalte **keller_symbole** als aneinanderkettung der Symbole in der Menge zu verstehen. Also bei {(1↦Bottom)} wird Bottom und bei ∅ wird kein Symbol wieder auf den Keller gelegt.
%% Cell type:code id: tags:
``` prob
:table {z,symbol,keller_symbol,z2,keller_symbole| ((z,symbol,keller_symbol)↦(z2,keller_symbole) : δ_PDA)}
:table {zustand,symbol,keller_symbol,neuer_zustand,keller_symbole| ((zustand,symbol,keller_symbol)↦(neuer_zustand,keller_symbole) : δ_PDA)}
```
%% Output
|z|symbol|keller_symbol|z2|keller_symbole|
|zustand|symbol|keller_symbol|neuer_zustand|keller_symbole|
|---|---|---|---|---|
|$\renewcommand{\emptyset}{\mathord\varnothing}\renewcommand{\emptyset}{\mathord\varnothing}\mathit{z\_0}$|$\mathit{a}$|$\mathit{Bottom}$|$\mathit{z\_1}$|$\{(1\mapsto \mathit{Bottom})\}$|
|$\mathit{z\_0}$|$\mathit{b}$|$\mathit{Bottom}$|$\mathit{z\_3}$|$\{(1\mapsto \mathit{Bottom})\}$|
|$\mathit{z\_0}$|$\mathit{lambda}$|$\mathit{Bottom}$|$\mathit{z\_0}$|$\emptyset$|
|$\mathit{z\_1}$|$\mathit{a}$|$\mathit{Bottom}$|$\mathit{z\_3}$|$\{(1\mapsto \mathit{Bottom})\}$|
|$\mathit{z\_1}$|$\mathit{b}$|$\mathit{Bottom}$|$\mathit{z\_2}$|$\{(1\mapsto \mathit{Bottom})\}$|
|$\mathit{z\_2}$|$\mathit{a}$|$\mathit{Bottom}$|$\mathit{z\_2}$|$\{(1\mapsto \mathit{Bottom})\}$|
|$\mathit{z\_2}$|$\mathit{b}$|$\mathit{Bottom}$|$\mathit{z\_2}$|$\{(1\mapsto \mathit{Bottom})\}$|
|$\mathit{z\_2}$|$\mathit{lambda}$|$\mathit{Bottom}$|$\mathit{z\_2}$|$\emptyset$|
|$\mathit{z\_3}$|$\mathit{a}$|$\mathit{Bottom}$|$\mathit{z\_3}$|$\{(1\mapsto \mathit{Bottom})\}$|
|$\mathit{z\_3}$|$\mathit{b}$|$\mathit{Bottom}$|$\mathit{z\_3}$|$\{(1\mapsto \mathit{Bottom})\}$|
z symbol keller_symbol z2 keller_symbole
zustand symbol keller_symbol neuer_zustand keller_symbole
z_0 a Bottom z_1 {(1|->Bottom)}
z_0 b Bottom z_3 {(1|->Bottom)}
z_0 lambda Bottom z_0 {}
z_1 a Bottom z_3 {(1|->Bottom)}
z_1 b Bottom z_2 {(1|->Bottom)}
z_2 a Bottom z_2 {(1|->Bottom)}
z_2 b Bottom z_2 {(1|->Bottom)}
z_2 lambda Bottom z_2 {}
z_3 a Bottom z_3 {(1|->Bottom)}
z_3 b Bottom z_3 {(1|->Bottom)}
%% Cell type:markdown id: tags:
Im Gegensatz zum PDA hat die TM einen zusätzlichen Zustand.
Dieser wird benötigt, da eine TM sofort hält, wenn sie einen Endzustand erreicht.
Wenn das Wort also komplett gelesen wurde und die TM in einem Endzustand des DFA ist, darf in den Endzustand der TM übergegangen werden.
Ansonsten sind die Übergänge analog zum DFA.
Die Überführungsfunktion der TM ist durch folgende Tabelle gegeben:
%% Cell type:code id: tags:
``` prob
:table {z,x,z2,x2,R| ((z,x)↦(z2,x2,R)) : δ_TM}
:table {zustand,symbol,neuer_zustand,geschriebenes_symbol,Richtung| ((zustand,symbol)↦(neuer_zustand,geschriebenes_symbol,Richtung)) : δ_TM}
```
%% Output
|z|x|z2|x2|R|
|zustand|symbol|neuer_zustand|geschriebenes_symbol|Richtung|
|---|---|---|---|---|
|$\mathit{z\_0}$|$\mathit{a}$|$\mathit{z\_1}$|$\mathit{Blank}$|$\mathit{R}$|
|$\mathit{z\_0}$|$\mathit{b}$|$\mathit{z\_3}$|$\mathit{Blank}$|$\mathit{R}$|
|$\mathit{z\_0}$|$\mathit{Blank}$|$\mathit{z\_end}$|$\mathit{Blank}$|$\mathit{N}$|
|$\mathit{z\_1}$|$\mathit{a}$|$\mathit{z\_3}$|$\mathit{Blank}$|$\mathit{R}$|
|$\mathit{z\_1}$|$\mathit{b}$|$\mathit{z\_2}$|$\mathit{Blank}$|$\mathit{R}$|
|$\mathit{z\_1}$|$\mathit{Blank}$|$\mathit{z\_1}$|$\mathit{Blank}$|$\mathit{N}$|
|$\mathit{z\_2}$|$\mathit{a}$|$\mathit{z\_2}$|$\mathit{Blank}$|$\mathit{R}$|
|$\mathit{z\_2}$|$\mathit{b}$|$\mathit{z\_2}$|$\mathit{Blank}$|$\mathit{R}$|
|$\mathit{z\_2}$|$\mathit{Blank}$|$\mathit{z\_end}$|$\mathit{Blank}$|$\mathit{N}$|
|$\mathit{z\_3}$|$\mathit{a}$|$\mathit{z\_3}$|$\mathit{Blank}$|$\mathit{R}$|
|$\mathit{z\_3}$|$\mathit{b}$|$\mathit{z\_3}$|$\mathit{Blank}$|$\mathit{R}$|
|$\mathit{z\_3}$|$\mathit{Blank}$|$\mathit{z\_3}$|$\mathit{Blank}$|$\mathit{N}$|
|$\mathit{z\_end}$|$\mathit{a}$|$\mathit{z\_end}$|$\mathit{a}$|$\mathit{N}$|
|$\mathit{z\_end}$|$\mathit{b}$|$\mathit{z\_end}$|$\mathit{b}$|$\mathit{N}$|
|$\mathit{z\_end}$|$\mathit{Blank}$|$\mathit{z\_end}$|$\mathit{Blank}$|$\mathit{N}$|
z x z2 x2 R
zustand symbol neuer_zustand geschriebenes_symbol Richtung
z_0 a z_1 Blank R
z_0 b z_3 Blank R
z_0 Blank z_end Blank N
z_1 a z_3 Blank R
z_1 b z_2 Blank R
z_1 Blank z_1 Blank N
z_2 a z_2 Blank R
z_2 b z_2 Blank R
z_2 Blank z_end Blank N
z_3 a z_3 Blank R
z_3 b z_3 Blank R
z_3 Blank z_3 Blank N
z_end a z_end a N
z_end b z_end b N
z_end Blank z_end Blank N
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment