Kapitel 7: Berechenbarkeit

Werbung
Kapitel 7: Berechenbarkeit
§ 7.1 Das Halteproblem in JAVA
§ 7.2 Entscheidbarkeit und Aufzählbarkeit
§ 7.3 GOTO-Programme
§ 7.4 Turingmaschinen
§ 7.5 Berechenbare Funktionen auf den
natürlichen Zahlen
§ 7.6 Das Halteproblem für GOTO-Programme
§ 7.7 Die Unentscheidbarkeit der Logik der
ersten Stufe
539
§ 7.1 Das Halteproblem in JAVA
540
Automatische Verifikation von Software
Ziel
Automatische (d.h., so weit wie möglich computergestützte)
Verifikation von Programmen.
Zwei Arten von Fehlern in Programmen:
Spezifische Fehler
Ein Programm tut nicht das, was es soll, d.h., es genügt nicht seiner
Spezifikation.
Automatisches Erkennen solcher Fehler scheint schwierig und
erfordert zumindest auch eine vollständige Formalisierung der
Spezifikation. Diese ist auch wieder fehleranfällig!
Generische Fehler
Ein Programm tut gar nichts, d.h., es stürzt ab“ und hält mit einer
”
Fehrmeldung an, oder es hält gar nicht an.
Automatisches Erkennen solcher Fehler scheint auf den ersten Blick
leichter.
541
Das Halteproblem
Problem
Entscheide, ob ein gegebenes Programm bei jeder Eingabe
irgendwann anhält (d.h., dass das Programm niemals in eine
Endlosschleife läuft).
Ziel
Ein Programm für das Halteproblem.
542
Eine konkrete Spezifikation des
Halteproblems in JAVA
Eingabe:
Ausgabe:
String method (Name der zu überprüfenden
JAVA-Methode)
Array parameters von Objekten (die Parameter, die an die Methode übergeben werden)
true, falls method wirklich eine Methode in
einer verfügbaren Klasse bezeichnet,
parameters die richtige Zahl von Parametern mit den richtigen Typen enthält
und die Methode method bei Eingabe
parameters (irgendwann) anhält,
false sonst.
543
In JAVA:
class Halt {
...
static boolean halt(String method,
Object[] parameters) {
...
}
...
}
Wir können annehmen, dass die Methode halt Zugriff auf den
Quellcode von method hat.
544
Die Unentscheidbarkeit des Halteproblems
Satz 7.1
Es gibt kein JAVA-Programm, das das Halteproblem löst.
545
Beweis von Satz 7.1
Angenommen, es gibt ein Programm, das das Halteproblem löst. Wir
können annehmen, dass dies mittels einer Methode
static boolean halt(String method,Object[] parameters)
in einer Klasse Halt geschieht.
Wir definieren eine neue Methode diag in einer Klasse Diag:
class Diag{
static void diag(String method) {
Object[] parameters = { method };
// Eingaben bestehen nur aus
// dem einen String method.
if ( Halt.halt(method,parameters) ) {
while ( true ) {};
// Wenn Methode method bei
// Eingabe method hält,
// dann laufe in Endlosschleife.
}
}
}
546
Was passiert beim Aufruf
Diag.diag("foo")
wenn foo der Name einer Methode ist, die einen String als
Parameter erwartet?
⇐⇒
⇐⇒
diag.diag("foo") hält
Halt.halt("foo",{"foo"}) gibt false zurück
foo("foo") hält nicht.
Also beim Aufruf Diag.diag("Diag.diag"):
⇐⇒
Diag.diag("Diag.diag") hält
Diag.diag("Diag.diag") hält nicht.
Widerspruch!
547
§ 7.2 Entscheidbarkeit und Aufzählbarkeit
548
Ein informeller Algorithmenbegriff
Eigenschaften von Algorithmen (oder Berechnungsverfahren)
I
I
I
I
Ein Algorithmus ist eine schrittweise Anleitung (ein Kochrezept“)
”
zur Lösung eines Problems.
Ein Algorithmus lässt sich von einem geeignet programmierten
Computer ausführen.
Ein Algorithmus verarbeitet möglicherweise ein oder mehrere
Eingaben und produziert möglicherweise ein oder mehrere
Ausgaben.
Führt man einen Algorithmus aus, so ist die Ausführung
möglicherweise nach endlich vielen Schritten beendet (wir
sagen, der Algorithmus hält), oder die Ausführung ist nie
beendet.
549
Beispiele
1. Der Davis-Putnam Algorithmus zum Testen von Erfüllbarkeit von
aussagenlogischen Formeln.
Eingabe: Endliche Menge von aussagenlogischen Klauseln.
Ausgabe: Erfüllbar“ oder unerfüllbar“.
”
”
2. Das algebraische Verfahren zum Testen von Äquivalenz von
Aussagenlogischen Formeln.
Eingabe: Aussagenlogische Formeln α und α 0 .
Ausgabe: Äquivalent“, möglicherweise hält der Algorithmus aber
”
gar nicht an.
3. Der Auswertungsalgorithmus für σ-Formeln in endlichen
Strukturen.
Eingabe: Endliche σ-Struktur A, σ-Formel ϕ(x1 , . . . , xn ).
Ausgabe: ϕ(A).
550
Repräsentation durch Zeichenketten
Ein- und Ausgaben von Algorithmen sind endliche“ Objekte. Alle
”
endlichen Objekte lassen sich als Wörter über einem endlichen
Alphabet darstellen.
Computer repräsentieren intern alle Objekte als Bitfolgen, also als
Wörter über dem Alphabet {0, 1}.
Definition 7.2
Seien A, B endliche Alphabete.
1. Ein Entscheidungsproblem über A ist eine Teilmenge P ⊆ A∗ .
2. Ein funktionales Problem über A, B ist eine partielle Funktion von
A∗ nach B ∗ .
551
Beispiele von Entscheidungsproblemen
Das Primzahlproblem.
Wir kodieren natürliche Zahlen in Binärdarstellung, d.h., als Wörter
über dem Alphabet {0, 1}.
Dann ist das Primzahlproblem folgendes Entscheidungsproblem über
{0, 1}:
Pprim := {n ∈ {0, 1}∗ | n ist Primzahl}
552
Das Graphenzusammenhangsproblem.
Wir kodieren Graphen in geeigneter Weise als Wörter über dem
Alphabet {0, 1}, d.h. wir definieren eine injektive Abbildung κ, die
jedem Graphen G (auf natürliche Weise“) ein Wort κ(G) über {0, 1}
”
zuordnet.
Das Zusammenhangsproblem ist folgendes Entscheidungsproblem
über {0, 1}:
PZus := g ∈ {0, 1}∗ Es gibt einen zusammenhängenden
Graphen G, so dass g = κ(G) .
553
Das aussagenlogische Erfüllbarkeitsproblem.
Wir betrachten aussagenlogische Formeln in ASCII-Syntax, d.h., als
Wörter über dem Alphabet ASCII.
Dann ist das aussagenlogische Erfüllbarkeitsproblem folgendes
Entscheidungsproblem über ASCII:
PAL-Erf := α ∈ ASCII∗ α ∈ AL, α ist erfüllbar .
554
Das Allgemeingültigkeitsproblem für σ-Sätze
Ähnlich wie aussagenlogische Formeln können wir auch σ-Formeln
eine ASCII-Syntax geben (Symbole können wir etwa als Wörter
kodieren, die aus eine Punkt gefolgt von Buchstaben und Zahlen
bestehen).
Das Allgemeingültigkeitsproblem für σ-Sätze ist folgendes Problem
über dem Alphabet ASCII:
Pσ-Allg := ϕ ∈ ASCII∗ ϕ ist allgemeingültiger σ-Satz .
555
Entscheidbarkeit
Definition 7.3
Seien A ein endliches Alphabet und P ⊆ A∗ ein
Entscheidungsproblem über A.
1. Ein Algorithmus A entscheidet P (oder: ist ein
Entscheidungsalgorithmus für P), wenn er bei Eingabe x ∈ A∗
hält und ein y ∈ A∗ ausgibt, so dass
y 6= ε falls x ∈ P,
y = ε falls x 6∈ P.
2. P heißt entscheidbar, falls es einen Algorithmus gibt, der P
entscheidet.
556
Beispiele
1. Das Primzahlproblem Pprim ist entscheidbar.
2. Das Graphenzusammenhangsproblem PZus ist entscheidbar.
3. Das aussagenlogische Erfüllbarkeitsproblem PAL-Erf ist
entscheidbar.
4. Lσ , aufgefasst als Entscheidungsproblem über ASCII, ist
entscheidbar.
557
Aufzählbarkeit
Definition 7.4
Seien A ein endliches Alphabet und P ⊆ A∗ ein
Entscheidungsproblem über A.
1. Ein Algorithmus A ist ein Aufzählungsalgorithmus für P, wenn er
in Gang gesetzt nach und nach genau die Wörter aus P ausgibt
(in irgendeiner Reihenfolge, eventuell mit Wiederholungen).
2. P heißt aufzählbar, wenn es ein Aufzählungsalgorithmus für P
gibt.
Achtung!
Aufzählbar und abzählbar (im Sinne der Mengenlehre) sind nicht
dasselbe.
Ist A ein endliches Alphabet, so ist jede Teilmenge von A∗ abzählbar,
d.h., endlich oder abzählbar unendlich, aber es gibt nicht für jede
Teilmenge von A∗ einen Aufzählungsalgorithmus.
558
Aufzählbarkeit aller Wörter über einem
endlichen Alphabet
Lemma 7.5
Sei A ein endliches Alphabet. Dann ist A∗ (aufgefasst als
Entscheidungsproblem über A) aufzählbar.
Ein Aufzählungsalgorithmus für A∗ :
1. M := {ε}
2. Ausgabe ε
3. Wiederhole folgende Schritte:
4.
M 0 := ∅
5.
Für alle x ∈ M
6.
Für alle a ∈ A
7.
M 0 := M 0 ∪ {xa}
8.
Ausgabe xa
9.
M := M 0
559
Aufzählbarkeit von Lσ
Lemma 7.6
Lσ ist aufzählbar.
Aufzählungsalgorithmus für Lσ :
1. Für alle x ∈ ASCII∗
// Verwende Aufzählungsalgorithmus für ASCII∗
2.
3.
Wenn x ∈ Lσ dann
// Verwende Entscheidungsalgorithmus für Lσ
Ausgabe x
560
Entscheidbarkeit vs Aufzählbarkeit 1
Satz 7.7
Jedes entscheidbare Problem ist aufzählbar.
Beweis: Sei A ein endliches Alphabet und P ⊆ A∗ entscheidbar.
Dann ist folgender Algorithmus ein Aufzählungsalgorithmus für P:
1. Für alle x ∈ A∗
// Verwende Aufzählungsalgorithmus für A∗
2.
3.
Wenn x ∈ P dann
// Verwende Entscheidungsalgorithmus für P
Ausgabe x
561
Aufzählbarkeit der σ-BS Beweise
Beweise im System σ-BS sind endliche Tupel von Formeln, wir
können sie also auch als Wörter über dem Alphabet ASCII
auffassen.
Lemma 7.8
Das Entscheidungsproblem
Pσ-BS := x ∈ ASCII∗ x σ-BS Beweis
ist entscheidbar.
Korollar 7.9
Pσ-BS ist aufzählbar.
562
Aufzählbarkeit der allgemeingültigen σ-Sätze
Satz 7.10
Pσ-Allg , das Allgemeingültigkeitsproblem für σ-Sätze, ist aufzählbar.
Aufzählungsalgorithmus für Pσ-Allg :
1. Für alle σ-BS Beweise (ϕ1 , . . . , ϕ` )
// Verwende Aufzählungsalgorithmus für Pσ-BS
2.
3.
Wenn frei(ϕ` ) = ∅ dann
Ausgabe ϕ`
563
Entscheidbarkeit vs Aufzählbarkeit 2
Satz 7.11
Sei A ein endliches Alphabet und P ⊆ A∗ , so dass P und A∗ \ P
aufzählbar sind. Dann ist P entscheidbar.
Beweis: Sei A ein Aufzählungsalgorithmus für P und B ein
Aufzählungsalgorithmus für A∗ \ P.
Folgender Algorithmus entscheidet P:
Eingabe: x ∈ A∗ .
1. Führe abwechselnd jeweils einen Schritt von A und einen Schritt von B
aus.
2.
3.
4.
5.
Immer wenn A ein Wort y ∈ A∗ ausgibt, teste, ob x = y.
Wenn ja, halte mit irgendeiner Ausgabe 6= ε.
Immer wenn B ein Wort y ∈ A∗ ausgibt, teste, ob x = y.
Wenn ja, halte mit Ausgabe ε.
Der Algorithmus hält immer, weil entweder w ∈ P oder w ∈ A∗ \ P
und damit A bzw. B irgendwann w ausgibt.
564
Semi-Entscheidbarkeit
Definition 7.12
Seien A ein endliches Alphabet und P ⊆ A∗ ein
Entscheidungsproblem über A.
1. Ein Algorithmus A ist ein Semi-Entscheidungsalgorithmus für P,
wenn er bei Eingabe x ∈ A∗ genau dann hält, wenn x ∈ P.
2. P heißt semi-entscheidbar, falls es einen
Semi-Entscheidungsalgorithmus für P gibt.
565
Semi-Entscheidbarkeit vs Aufzählbarkeit
Satz 7.13
Ein Entscheidungsproblem ist genau dann semi-entscheidbar, wenn
es aufzählbar ist.
566
Berechenbare Funktionen
Definition 7.14
Seien A, B endliche Alphabete und F eine partielle Funktion von A∗
nach B ∗ .
1. Ein Algorithmus A berechnet F (oder: ist ein
Berechnungsalgorithmus für F ), wenn er bei Eingabe x ∈ A∗
genau dann hält, wenn x ∈ def(F ), und dabei F (x) ausgibt.
2. F heißt berechenbar, falls es einen Algorithmus gibt, der F
berechnet.
567
Berechenbarkeit vs Entscheidbarkeit
Satz 7.15
Sei A ein endliches Alphabet und P ⊆ A∗ ein Entscheidungsproblem.
Die Funktion cP : A∗ → {0, 1}∗ sei definiert durch
1 falls x ∈ P,
cP (x) :=
0 sonst,
für x ∈ A∗ .
Man bezeichnet cP als die charakteristische Funktion von P.
Dann gilt:
P ist entscheidbar ⇐⇒ cP is berechenbar.
568
Berechenbarkeit vs Semi-Entscheidbarkeit
Satz 7.16
Sei A ein endliches Alphabet, a ∈ A und P ⊆ A∗ ein
Entscheidungsproblem.
Die partielle Funktion dP von A∗ nach {0, 1}∗ sei definiert durch
1
falls x ∈ P,
dP (x) :=
undefiniert sonst,
für x ∈ A∗ .
Dann gilt:
P ist semi-entscheidbar ⇐⇒ dP is berechenbar.
569
Ansätze zur Präzisierung des
Algorithmenbegriffs
Historisch vor den ersten Computern:
I
Rekursive Funktionen (Gödel 1934, Kleene 1936)
I
I
Turingmaschinen (Turing 1936)
λ-Kalkül (Church 1936)
I
Postsche Korrespondenzsysteme (Post 1936)
An Computern und Programmiersprachen orientierte
Algorithmenbegriffe:
I
Registermaschinen
I
WHILE- oder GOTO-Sprachen
Programmiersprachen wie JAVA oder C.
I
570
Alan Turing (1912–1954)
Alonzo Church (1903–1995)
571
Emil Post (1897–1954)
Stephen Cole Kleene (1909–1994)
572
Die Church-Turingsche These
Satz 7.17
Alle genannten Präzisierungen des Algorithmenbegriffs führen zur
selben Klasse von berechenbaren Funktionen (und damit zu den
selben Klassen von entscheidbaren und aufzählbaren Problemen).
Church-Turingsche These
Der intuitive Algorithmenbegriff führt zur selben Klasse von
berechenbaren Funktionen wie die genannten Präzisierungen.
573
§ 7.3 GOTO-Programme
574
Syntax der GOTO-Sprache
Arbeitsalphabet: A (endliches Alphabet)
Variablen: Var = {v0 , v1 , v2 , . . .}
Anweisungen (über A):
I
Verlängerungsanweisung.
Für i ∈ N und a ∈ A: vi ← vi + a
I
Verkürzungsanweisung.
Für i ∈ N: vi ← vi −
I
Sprunganweisung. Für s ∈ N: GOTO s
I
Leerheitstest. Für i, s ∈ N: IF vi = ε GOTO s
Buchstabentest. Für i, s ∈ N und a ∈ A: IF vi ?a GOTO s
I
575
Programme
Sei A ein endliches Alphabet. Ein GOTO-Programm (über A) ist ein
Tupel (Z0 , . . . , Zr ) von Anweisungen über A.
Beispiel 7.18
Ein Programm über dem Alphabet {a}:
`
´
IF v0 = ε GOTO 5, v0 ← v0 −, v1 ← v1 + a, v1 ← v1 + a, GOTO 0
Um die Lesbarkeit zu erhöhen, geben wir den Programmen Namen
und notieren Sie zeilenweise:
Beispiel-1
0. IF v0 = ε GOTO 5
1. v0 ← v0 −
2. v1 ← v1 + a
3. v1 ← v1 + a
4. GOTO 0
576
Semantik von GOTO-Programmen (intuitiv)
Programme laufen auf Registermaschinen
Programm
...
0 ...
1 ...
2 ...
v4
v3
v2
Z
Zeilenzähler
Recheneinheit
v1
v0
Register
So lange der Zähler auf einer gültigen Programmzeile steht, wird die
Anweisung in dieser Zeile ausgeführt und der Speicher und Zähler
entsprechend verändert.
577
Bedeutung der Anweisungen
I vi ← vi + a: Verlängere das Wort in vi um den Buchstaben a.
I
vi ← vi −: Streiche den letzten Buchstaben des Wortes in vi ,
wenn diese Wort nicht leer ist.
I
GOTO z: Weiter mit Zeile z (wenn Zeile z nicht existiert, so halte
an).
I
IF vi = ε GOTO z: Wenn vi das leere Wort enthält, so weiter mit
Zeile z.
I
IF vi ?a GOTO z: Wenn vi mit dem Buchstaben a endet, so weiter
mit Zeile z.
578
Beispiel
Berechnung des Programms Beispiel-1.
0.
1.
2.
3.
4.
IF v0 = e GOTO 5
v0 <− v0 −
v1 <− v1 + a
v1 <− v1 + a
GOTO 0
0
aa
579
Beispiel
Berechnung des Programms Beispiel-1.
0.
1.
2.
3.
4.
IF v0 = e GOTO 5
v0 <− v0 −
v1 <− v1 + a
v1 <− v1 + a
GOTO 0
1
aa
580
Beispiel
Berechnung des Programms Beispiel-1.
0.
1.
2.
3.
4.
IF v0 = e GOTO 5
v0 <− v0 −
v1 <− v1 + a
v1 <− v1 + a
GOTO 0
2
a
581
Beispiel
Berechnung des Programms Beispiel-1.
0.
1.
2.
3.
4.
IF v0 = e GOTO 5
v0 <− v0 −
v1 <− v1 + a
v1 <− v1 + a
GOTO 0
3
a
a
582
Beispiel
Berechnung des Programms Beispiel-1.
0.
1.
2.
3.
4.
IF v0 = e GOTO 5
v0 <− v0 −
v1 <− v1 + a
v1 <− v1 + a
GOTO 0
4
aa
a
583
Beispiel
Berechnung des Programms Beispiel-1.
0.
1.
2.
3.
4.
IF v0 = e GOTO 5
v0 <− v0 −
v1 <− v1 + a
v1 <− v1 + a
GOTO 0
0
aa
a
584
Beispiel
Berechnung des Programms Beispiel-1.
0.
1.
2.
3.
4.
IF v0 = e GOTO 5
v0 <− v0 −
v1 <− v1 + a
v1 <− v1 + a
GOTO 0
1
aa
a
585
Beispiel
Berechnung des Programms Beispiel-1.
0.
1.
2.
3.
4.
IF v0 = e GOTO 5
v0 <− v0 −
v1 <− v1 + a
v1 <− v1 + a
GOTO 0
2
aa
586
Beispiel
Berechnung des Programms Beispiel-1.
0.
1.
2.
3.
4.
IF v0 = e GOTO 5
v0 <− v0 −
v1 <− v1 + a
v1 <− v1 + a
GOTO 0
3
aaa
587
Beispiel
Berechnung des Programms Beispiel-1.
0.
1.
2.
3.
4.
IF v0 = e GOTO 5
v0 <− v0 −
v1 <− v1 + a
v1 <− v1 + a
GOTO 0
4
aaaa
588
Beispiel
Berechnung des Programms Beispiel-1.
0.
1.
2.
3.
4.
IF v0 = e GOTO 5
v0 <− v0 −
v1 <− v1 + a
v1 <− v1 + a
GOTO 0
0
aaaa
589
Beispiel
Berechnung des Programms Beispiel-1.
0.
1.
2.
3.
4.
IF v0 = e GOTO 5
v0 <− v0 −
v1 <− v1 + a
v1 <− v1 + a
GOTO 0
5
aaaa
Hier hält die Berechnung an, weil das Programm keine Zeile 5 hat.
590
Semantik von GOTO-Programmen
(formal)
Definition 7.19
Sei A ein Alphabet.
Eine Konfiguration über A ist ein Paar (s, β), wobei s ∈ N und
β : Var → A∗ eine Belegung ist.
KonfA bezeichnet die Menge aller Konfigurationen über A.
591
Die Nachfolgerfunktion eines Programms
Definition 7.20
Sei P = (Z0 , . . . , Zr ) ein GOTO-Programm über A.
Die Nachfolgerfunktion von P ist die partielle Funktion NP von KonfA
nach KonfA , die folgendermaßen definiert ist: Sei (s, β) ∈ KonfA eine
Konfiguration.
I
I
I
Falls s > r , so ist NP (s, β) undefiniert.
Falls Zs = vi ← vi + a, so ist NP (s, β) = (s + 1, β 0 ), wobei
β(vj )a falls j = i,
0
β (vj ) =
β(vj )
sonst.
Falls Zs = vi ← vi −, so ist NP (s, β) = (s + 1, β 0 ), wobei
x
falls j = i und β(vi ) = xa für ein x ∈ A∗ , a ∈ A,
0
β (vj ) =
β(vj ) sonst.
(Fortsetzung auf der nächsten Folie)
592
I
Falls Zs = GOTO t, so ist NP (s, β) = (t, β).
I
Falls Zs = IF vi = ε GOTO t, so ist
(t, β)
falls β(vi ) = ε,
NP (s, β) =
(s + 1, β) sonst.
I
Falls Zs = IF vi ?a GOTO t, so ist
(t, β)
falls β(vi ) = xa für ein x ∈ A∗ ,
NP (s, β) =
(s + 1, β) sonst.
593
Berechnungen
Definition 7.21
Sei P = (Z0 , . . . , Zr ) ein GOTO-Programm über A.
(t)
1. Für t ≥ 0 sei die partielle Funktion NP von KonfA nach KonfA
rekursiv wie folgt definiert:
(0)
(t+1)
NP (s, β) := (s, β) und NP
(t)
(s, β) := NP (NP (s, β)).
2. Eine Anfangskonfiguration von P ist eine Konfiguration (0, β).
3. Eine Endkonfiguration von P ist eine Konfiguration (s, β) mit
s > r.
4. Die Berechnung von P bei Eingabe β ist die Folge
(0, β) = N (0) (0, β), N (1) (0, β), N (2) (0, β), . . .
von Konfigurationen.
5. P hält bei Eingabe β, wenn es ein t ≥ 0 gibt, so dass N (t) (0, β)
eine Endkonfiguration ist.
594
Belegungen auf Anfangsstücken von Var
Notation
Sei A ein Alphabet. Für k ∈ N und x0 , . . . , xk −1 ∈ A∗ bezeichnet
[x0 , . . . , xk −1 ]
die Belegung β : Var → A∗ mit
xi
β(vi ) =
ε
falls 0 ≤ i ≤ k − 1
sonst
595
Beispiel
Berechnung des Programms
Doppel
0. IF v0 = ε GOTO 5
1. v0 ← v0 −
2. v1 ← v1 + a
3. v1 ← v1 + a
4. GOTO 0
5. IF v1 = ε GOTO 9
6. v1 ← v1 −
7. v0 ← v0 + a
8. GOTO 5
Eingabe: β := [aa, ε]
Berechnung:
`
´
`
´
`
´
0, [aa, ε] → 1, [aa, ε] → 2, [a, ε]
`
´
`
´
`
´
→ 3, [a, a] → 4, [a, aa] → 0, [a, aa]
`
´
`
´
`
´
→ 1, [a, aa] → 2, [ε, aa] → 3, [ε, aaa]
`
´
`
´
`
´
→ 4, [ε, aaaa] → 0, [ε, aaaa] → 5, [ε, aaaa]
`
´
`
´
`
´
→ 6, [ε, aaaa] → 7, [ε, aaa] → 8, [a, aaa]
`
´
`
´
`
´
→ 5, [a, aaa] → 6, [a, aaa] → 7, [a, aa]
`
´
`
´
`
´
→ 8, [aa, aa] → 5, [aa, aa] → 6, [aa, aa]
`
´
`
´
`
´
→ 7, [aa, a] → 8, [aaa, a] → 5, [aaa, a]
´
`
´
`
´
`
→ 6, [aaa, a] → 7, [aaa, ε] → 8, [aaaa, ε]
`
´
`
´
→ 5, [aaaa, ε] → 9, [aaaa, ε]
596
Notation
Sei P = (Z0 , . . . , Zr ) ein GOTO-Programm über A und β : Var → A∗
eine Belegung.
I
Wir schreiben P β ↓, wenn P bei Eingabe β hält und P β ↑ sonst.
I
Wenn P β ↓, so schreiben wir
P β ↓ β 0,
I
wenn es ein s gibt, so dass (s, β 0 ) die (eindeutige)
Endkonfiguration der Berechnung von P bei Eingabe β ist.
Für y ∈ A∗ schreiben wir Pβ ↓ y , wenn es ein β 0 : Var → A∗ gibt,
so dass Pβ ↓ β 0 und β 0 (v0 ) = y .
597
G-Berechenbarkeit
Definition 7.22
Seien B, C Alphabete, k ≥ 1 und F eine partielle Funktion von (B ∗ )k
nach C ∗ .
Ein GOTO-Programm P über einem Alphabet A mit A ⊇ B ∪ C
berechnet F , wenn für alle (x0 , . . . , xk −1 ) ∈ (B ∗ )k und y ∈ C ∗ gilt:
F (x0 , . . . , xk −1 ) = y ⇐⇒ P[x0 , . . . , xk −1 ] ↓ y .
F ist G-berechenbar, wenn es ein GOTO-Programm gibt, das F
berechnet.
Beispiel 7.23
Die Funktion F : {a}∗ → {a}∗ mit F (x) = xx ist G-berechenbar.
598
Beispiel
Sei A = {a, b}. Für ein Wort x = a0 . . . ak −1 ∈ A∗ sei
x −1 := ak −1 . . . a0 .
Folgendes GOTO-Programm berechnet die Funktion F : A∗ → A∗ mit
F (x) = x −1
PROGRAMM Invers
0.
1.
2.
3.
4.
5.
6.
7.
IF v0 = ε GOTO 8
IF v0 ? b GOTO 5
v0 ← v0 −
v1 ← v1 + a
GOTO 0
v0 ← v0 −
v1 ← v1 + b
GOTO 0
8.
9.
10.
11.
12.
13.
14.
15.
IF v1 = ε GOTO 16
IF v1 ? b GOTO 13
v1 ← v1 −
v2 ← v2 + a
GOTO 8
v1 ← v1 −
v2 ← v2 + b
GOTO 8
16.
17.
18.
19.
20.
21.
22.
23.
IF v2 = ε GOTO 24
IF v2 ? b GOTO 21
v2 ← v2 −
v0 ← v0 + a
GOTO 16
v2 ← v2 −
v0 ← v0 + b
GOTO 16
599
G-Entscheidbarkeit
Definition 7.24
Seien B ein Alphabet, k ≥ 1 und R ⊆ (B ∗ )k .
Ein GOTO-Programm P über einem Alphabet A ⊇ B entscheidet R,
wenn für alle (x0 , . . . , xk −1 ) ∈ (B ∗ )k gilt:
(x0 , . . . , xk −1 ) ∈ R =⇒ P[x0 , . . . , xk −1 ] ↓ y für ein y ∈ A∗ \ {ε},
(x0 , . . . , xk −1 ) 6∈ R =⇒ P[x0 , . . . , xk −1 ] ↓ ε.
R ist G-entscheidbar, wenn es ein GOTO-Programm gibt, dass R
entscheidet.
600
Beispiel
Sei A = {a, b}. Ein Wort x ∈ A∗ ist ein Palindrom, wenn x = x −1 .
Folgendes G-Programm entscheidet die Menge
{x ∈ A∗ | x = x −1 }
der Palindrome.
601
PROGRAMM Palindrom
0.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
IF v0 = ε GOTO 10
IF v0 ? b GOTO 6
v0 ← v0 −
v1 ← v1 + a
v2 ← v2 + a
GOTO 0
v0 ← v0 −
v1 ← v1 + b
v2 ← v2 + b
GOTO 0
IF v2 = ε GOTO 18
IF v2 ? b GOTO 15
v2 ← v2 −
v0 ← v0 + a
GOTO 10
v2 ← v2 −
v0 ← v0 + b
GOTO 10
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
IF v0 = ε GOTO 31
IF v0 ? a GOTO 24
IF v1 ? a GOTO 28
v0 ← v0 −
v1 ← v1 −
GOTO 18
IF v1 ? b GOTO 28
v0 ← v0 −
v1 ← v1 −
GOTO 18
IF v0 = ε GOTO 32
v0 ← v0 −
GOTO 28
v0 ← v0 + a
602
G-Semi-Entscheidbarkeit
Definition 7.25
Seien B ein Alphabet, k ≥ 1 und R ⊆ (B ∗ )k .
Ein GOTO-Programm P über einem Alphabet A ⊇ B ist ein
Semi-Entscheidungsprogramm für R, wenn für alle
(x0 , . . . , xk −1 ) ∈ (B ∗ )k gilt:
(x0 , . . . , xk −1 ) ∈ R =⇒ P[x0 , . . . , xk −1 ] ↓,
(x0 , . . . , xk −1 ) 6∈ R =⇒ P[x0 , . . . , xk −1 ] ↑ .
R ist G-semi-entscheidbar, wenn es ein GOTO-Programm gibt, dass
ein Semi-Entscheidungsprogramm für R ist.
603
G-Aufzählbarkeit
I
I
Weil GOTO-Programme keinen Ausgabemechanismus haben,
lassen sich Aufzählungsalgorithmen (mit potentiell unendlich
vielen Ausgaben) nicht durch GOTO-Programme beschreiben.
Wir können aber unsere GOTO Sprache durch einen Befehl
PRINT vi
erweitern, der den Inhalt der Variablen vi ausgibt.
I
Dann läßt sich zeigen, dass die durch GOTO-Programme mit
PRINT-Befehl aufzählbaren Mengen gerade die
G-semi-entscheidbaren Mengen sind.
604
G-Berechenbarkeit und andere
Berechenbarkeitsbegriffe
Satz 7.26
Eine (partielle) Funktion ist genau dann G-berechenbar, wenn sie
berechenbar ist bzgl. irgendeiner der anderen Präzisierungen von
Algorithmen, die wir am Ende von § 7.2 genannt haben.
Entsprechendes gilt für G-entscheidbare und G-semi-entscheidbare
Mengen und Relationen.
(ohne Beweis)
Unter Verwendung der Church-Turingschen These können wir dann
schließen, dass alle mit unserem intuitiven Berechenbarkeitsbegriff
als entscheidbar oder aufzählbar erkannten Probleme und alle als
berechenbar erkannten Funktionen auch G-entscheidbar bzw.
G-aufzählbar bzw. G-berechenbar sind.
Zum Beispiel:
Satz 7.27
Pσ-Allg , das Allgemeingültigkeitsproblem für σ-Sätze, ist
G-semi-entscheidbar.
605
§ 7.4 Turingmaschinen
606
Eine Turingmaschine
beidseitig unendliches Band
a b a # a a0 0 1 a 12b # #
Schreib−/Lesekopf
endliche
Kontrolleinheit
607
Turingmaschinen
Definition 7.28
Eine Turingmaschine (kurz: TM) ist ein Tupel
M = (Z , A, , δ, z0 , E),
bestehend aus:
I
I
einer endlichen Zustandsmenge Z ,
einem endlichen Arbeitsalphabet A,
I
einem Blank ∈ A,
einer Übergangsfunktion δ : Z × A → Z × A × {L, N, R},
I
einem Anfangszustand z0 ∈ Z ,
I
einer Menge E ⊆ Z von Endzuständen.
I
608
Informelle Semantik
I
Zu Beginn der Berechnung steht auf dem Band die Eingabe, ein
endliches Wort aus (A \ {})∗ , auf beiden Seiten ergänzt um
unendlich viele Blanks. Die Maschine befindet sich im
Anfangszustand z0 . Der Schreib-/Lesekopf steht auf dem ersten
Symbol der Eingabe.
I
Die Maschine arbeitet schrittweise. Nehmen wir an, sie befindet
sich in einem Zustand z ∈ Z , und der Schreib-/Lesekopf liest das
Symbol a ∈ A. Das Verhalten der Maschine wird jetzt von der
Übergangsfunktion bestimmt, sei also
δ(z, a) = (z 0 , a 0 , r ).
Dann geht die Maschine in den Zustand z 0 über, der
Schreib-/Lesekopf überschreibt das a, auf dem er steht, durch
ein a 0 und
I
I
I
bewegt sich um ein Feld nach links, falls r = L,
bleibt wo er ist, falls r = N, oder
bewegt sich um ein Feld nach rechts, falls r = R.
609
Beispiel
Die folgende Maschine M interpretiert das Eingabewort als natürliche
Zahl in Binärdarstellung und addiert 1:
M = ({z0 , z1 , z2 , z3 }, {0, 1, }, , δ, z0 , {z3 }),
wobei δ folgendermaßen definiert ist:
(z, a)
(z0 , 0)
(z0 , 1)
(z0 , )
(z, a)
(z2 , 0)
(z2 , 1)
(z2 , )
δ(z, a)
(z0 , 0, R)
(z0 , 1, R)
(z1 , , L)
(z, a)
(z1 , 0)
(z1 , 1)
(z1 , )
δ(z, a)
(z2 , 1, R)
(z1 , 0, L)
(z2 , 1, R)
δ(z, a)
(z2 , 0, R)
(z2 , 1, R)
(z3 , , N).
(z, a)
(z3 , 0)
(z3 , 1)
(z3 , )
δ(z, a)
(z3 , 0, N)
(z3 , 1, N)
(z3 , , N).
610
Konfigurationen
Definition 7.29
Eine Konfiguration einer Turingmaschine
M = (Z , A, , δ, z0 , E) ist ein Tripel
(z, v , w) ∈ Z × A∗ × A∗ .
KonfM bezeichnet die Menge aller Konfigurationen der TM M.
Intuitive Bedeutung
Ist (z, v , w) eine Konfiguration, so ist
I
I
I
z der aktuelle Zustand und
. . . vw . . . die Beschriftung des Bandes.
Der Schreib-/Lesekopf befindet sich auf dem ersten Symbol von
w falls w 6= ε, bzw. auf dem ersten Blank rechts von v falls w = ε.
611
Die Nachfolgerfunktion einer Turingmaschine
Definition 7.30
Sei M = (Z , A, , δ, z0 , E) eine Turingmaschine. Die
Nachfolgerfunktion von M ist die Funktion NM : KonfM → KonfM , die
wie folgt definiert ist:
Sei (z, v , w) ∈ KonfM mit v = a1 . . . am und w = b1 . . . bn und
δ(z, b1 ) falls m ≥ 1,
0
(z , c, r ) :=
δ(z, ) sonst.
Sei

(a1 . . . am−1 , am cb2 . . . bn )



(ε, cb . . . b )
2
n
(v 0 , w 0 ) :=

.
.
.
a
,
cb
(a
1
m
2 . . . bn )



(a1 . . . am c, b2 . . . bn )
falls r
falls r
falls r
falls r
= L und m ≥ 1,
= L und m = 0,
= N,
= R.
Wir setzen
NM (z, v , w) := (z 0 , v 0 , w 0 ).
612
Berechnungen
Definition 7.31
Sei M = (Z , A, , δ, z0 , E) eine Turingmaschine.
(t)
1. Für t ≥ 0 sei die Funktion NM : KonfM → KonfM rekursiv wie folgt
definiert:
(0)
(t+1)
NM (z, v , w) := (z, v , w) und NM
(t)
(z, v , w) := NM (NM (z, v , w)).
2. Eine Anfangskonfiguration von M ist eine Konfiguration (z0 , ε, x)
für ein x ∈ (A \ {})∗ .
3. Eine Endkonfiguration von M ist eine Konfiguration (z, v , w) mit
z ∈ E.
4. Die Berechnung von M bei Eingabe x ∈ (A \ {})∗ ist die Folge
(0)
(1)
(2)
(z0 , ε, x) = NM (z0 , ε, x), NM (z0 , ε, x), NM (z0 , ε, x), . . .
von Konfigurationen.
5. M hält bei Eingabe x ∈ (A \ {})∗ , wenn es ein t ≥ 0 gibt, so
dass N (t) (z0 , ε, x) eine Endkonfiguration ist.
613
Notation
Sei M = (Z , A, , δ, z0 , E) eine Turingmaschine und x ∈ (A \ {})∗ .
eine Eingabe.
I
Wir schreiben M x ↓, wenn M bei Eingabe x hält und M x ↑ sonst.
I
Wenn M x ↓, so schreiben wir
M x ↓ y,
wenn die erste Endkonfiguration in der Berechnung von M bei
Eingabe x die Gestalt (z, . . . y , w) hat.
614
T-Berechenbarkeit
Definition 7.32
Seien B, C Alphabete und F eine partielle Funktion von B ∗ nach C ∗ .
Eine Turingmaschine M = (Z , A, , δ, z0 , E) mit A \ {} ⊇ B ∪ C
berechnet F , wenn für alle x ∈ B ∗ und y ∈ C ∗ gilt:
F (x) = y ⇐⇒ M x ↓ y .
F ist T-berechenbar, wenn es eine Turingmaschine gibt, die F
berechnet.
Die Begriffe der T-Entscheidbarkeit und T-Semi-Entscheidbarkeit
werden entsprechend definiert.
615
Beispiel
Folgende Turingmaschine berechnet die Funktion F : {a}∗ → {a}∗ mit
F (x) = xx:
M = ({z0 , z1 , . . . , z5 }, {a, ∗, }, , δ, z0 , {z5 }),
wobei δ definiert ist durch
(z, a)
(z0 , a)
(z0 , ∗)
(z0 , )
δ(z, a)
(z1 , ∗, L)
(z0 , ∗, R)
(z4 , , L)
(z, a)
(z2 , a)
(z2 , ∗)
(z2 , )
(z1 , a)
(z1 , ∗)
(z1 , )
(z1 , a, L)
(z1 , ∗, L)
(z2 , a, L)
(z3 , a)
(z3 , ∗)
(z3 , )
δ(z, a)
(z3 , a, R)
(z3 , a, R)
(z0 , ∗, R)
(z, a)
(z4 , a)
(z4 , ∗)
(z4 , )
δ(z, a)
(z5 , a, R)
(z4 , , L)
(z5 , a)
(z5 , ∗)
(z5 , )
Die fehlenden Einträge können beliebig gewählt werden.
616
Simulation von Turingmaschinen durch
GOTO-Programme
Lemma 7.33
Jede T-berechenbare partielle Funktion ist auch G-berechenbar.
617
Beweisidee für Lemma 7.33
Sei M = (Z , A, , δ, z0 , E) eine Turingmaschine. Wir geben ein
GOTO-Programm P über dem Alphabet A an, das M schrittweise
simuliert.
I
I
I
P hat zwei Variablen v0 , v1 , in denen die Bandbeschriftung
gespeichert wird.
Das Programm besteht aus einem Initialisierungsteil, einem
Kontrollteil, und einem Ausführungsteil, und einem Abschlussteil.
Der Initialisierungsteil wird zuerst ausgeführt, in ihm wird der
Inhalt der Variablen v0 (die Eingabe des Programmes) in
umgekehrter Reihenfolge nach v1 kopiert.
618
I
Der Kontrollteil besteht aus einer bedingten Sprunganweisung
für jedes Paar (z, a) ∈ Z × A, die den Kontrollfluss des
Programmes auf den Anfang eines Unterprogramms lenkt, das
dafür sorgt, dass der Übergang δ(z, a) korrekt umgesetzt wird.
Zusätzlich wird im Kontrollteil für jedes z noch eine weitere
Sprunganweisung für den Fall v1 = ε benötigt, die den
Kontrollfluß auf die gleiche Zeile lenkt wie die Sprunganweisung
für δ(z, ).
I
Der Ausführungsteil enthält all die Unterprogramme, die die
Übergänge umsetzen und danach den Kontrollfluss wieder auf
die Richtige Zeile im Kontrollteil lenken.
I
Im Abschlussteil wird schliesslich die korrekte Ausgabe in die
Variable v0 geschrieben. Dabei werden am linken Ende stehende
Blank-Symbole gelöscht. Wenn noch andere Blanksymbole
vorkommen, so ist die Ausgabe undefiniert, und das Programm
läuft in eine Endlosschleife.
619
Umsetzung der Beweisidee
Sei M = (Z , A, , δ, z0 , E), wobei A = {a1 , . . . , an } und a1 = .
Der Intialisierungsteil
Der Initialisierungsteil besteht aus den Zeilen:
0. IF v0 = ε GOTO s(z0 ) // Beginn des Kontrollteils für Zustand z0
1. IF v0 ?a1 GOTO n+1
2. IF v0 ?a2 GOTO n+3
..
.
n. IF v0 ?an GOTO 3n-1
n+1. v1 ← v1 + a1
n+2. GOTO 3n
n+3. v1 ← v1 + a2
n+4. GOTO 3n
..
.
3n-3. v1 ← v1 + an−1
3n-2. GOTO 3n
3n-1. v1 ← v1 + an
620
Umsetzung der Beweisidee (cont.)
3n. v0 ← v0 −
3n+1. GOTO 0
Der Kontrollteil: Der Kontrollteil enthält für jedes z ∈ Z \ E folgende (n + 1)
Zeilen:
s(z).
IF v1 = ε GOTO s(z, )
s(z)+1. IF v1 ?a1 GOTO s(z, a1 )
...
s(z)+n. IF v1 ?an GOTO s(z, an )
Für Endzustände z ∈ E sei s(z) = sA die erste Zeile des Abschlussteils.
Der Ausführungsteil: Der Ausführungsteil enthält für jedes z ∈ Z \ {E} und
jedes a ∈ A Zeilen s(z, a), . . . , s(z, a) + t(z, a). Diese Zeilen hängen
von δ(z, a) ab. Sei
(z 0 , a 0 , r ) := δ(z, a).
621
Umsetzung der Beweisidee (cont.)
1. Fall: r = R.
In diesem Fall muss das letzte Symbol a von v1 entfernt werden,
und a 0 muss an v0 angehängt werden. Anschließend springt das
Programm in Zeile s(z 0 ). Das kann mit folgenden Programmzeilen
erreicht werden:
s(z, a).
v1 ← v1 −
s(z, a)+1. v0 ← v0 + a 0
s(z, a)+2. GOTO s(z 0 )
Also ist t(z, a) = 2.
2. Fall: r = N.
In diesem Fall muss das letzte Symbol von v1 durch a 0
überschrieben werden. Anschließend springt das Programm in
Zeile s(z 0 ). Das kann mit folgenden Programmzeilen erreicht
werden:
s(z, a).
v1 ← v1 −
s(z, a)+1. v1 ← v1 + a 0
s(z, a)+2. GOTO s(z 0 )
622
Umsetzung der Beweisidee (cont.)
Also ist t(z, a) = 2.
3. Fall: r = L.
Dieser Fall ist komplizierter. Zunächst muss das letzte Symbol von
v1 durch a 0 überschrieben werden. Dann muss das letzte Symbol
von v0 an v1 angehängt werden, bzw. ein Blank, falls v0 = ε.
Anschließend springt das Programm in Zeile s(z 0 ). Das kann mit
folgenden Programmzeilen erreicht werden:
s(z, a).
v1 ← v1 −
s(z, a)+1. v1 ← v1 + a 0
s(z, a)+2. IF v0 = ε GOTO s(z, a)+n+3
// a1 = s(z, a)+3. IF v0 ?a1 GOTO s(z, a)+n+3
s(z, a)+4. IF v0 ?a2 GOTO s(z, a)+n+5
..
.
s(z, a)+n+2. IF v0 ?an GOTO s(z, a)+3n+1
s(z, a)+n+3. v1 ← v1 + a1
s(z, a)+n+4. GOTO s(z, a)+3n+2
s(z, a)+n+5. v1 ← v1 + a2
623
Umsetzung der Beweisidee (cont.)
s(z, a)+n+6. GOTO s(z, a)+3n+2
..
.
s(z, a)+3n+1. v1 ← v1 + an
s(z, a)+3n+2. v0 ← v0 −
s(z, a)+3n+3. GOTO s(z 0 )
Also ist t(z, a) = 3n + 3.
Abschlussteil: Zunächst wird der aktuelle Inhalt von v0 in umgekehrter
Reihenfolge nach v2 kopiert.
sA . IF v0 = ε GOTO sA +3n+2
sA +1. IF v0 ?a1 GOTO sA +n+1
sA +2. IF v0 ?a2 GOTO sA +n+3
..
.
sA +n. IF v0 ?an GOTO sA +3n-1
sA +n+1. v2 ← v2 + a1
sA +n+2. GOTO sA +3n
sA +n+3. v2 ← v2 + a2
624
Umsetzung der Beweisidee (cont.)
sA +n+4. GOTO sA +3n
..
.
sA +3n-3. v2 ← v2 + an−1
sA +3n-2. GOTO 3n
sA +3n-1. v2 ← v2 + an
sA +3n. v0 ← v0 −
sA +3n+1. GOTO sA
Anschließend werden alle Blanks am Anfang von v2 gelöscht:
sA +3n+2.
sA +3n+3.
sA +3n+4.
sA +3n+5.
IF v2 ?a1 GOTO sA +3n+4
GOTO sA +3n+6
v2 ← v2 −
GOTO sA +3n+2
Zuletzt wird der Inhalt von v2 nach v0 zurückkopiert. Stößt das
Programm dabei auf einen Blank, so läuft es in eine Endlosschleife.
sA +3n+6. IF v2 = ε GOTO sA +6n+6
sA +3n+7. IF v2 ?a1 GOTO sA +3n+7
// Endlosschleife bei Blank
625
Umsetzung der Beweisidee (cont.)
sA +3n+8. IF v2 ?a2 GOTO sA +4n+7
..
.
sA +4n+6. IF v2 ?an GOTO sA +6n+3
sA +4n+7. v0 ← v0 + a2
sA +4n+8. GOTO sA +6n+4
sA +4n+9. v0 ← v0 + a3
sA +4n+10. GOTO sA +6n+4
..
.
sA +6n+3. v0 ← v0 + an
sA +6n+4. v2 ← v2 −
sA +6n+5. GOTO sA +3n+6
Die Zeilennummern der einzelnen Programmteile werden natürlich so
gewählt, dass sie sich nicht überschneiden und dass zwischen ihnen keine
Lücken sind.
Per Induktion über die Länge der Berechnung der Turingmaschine lässt sich
jetzt relativ leicht zeigen, dass das Programm die Maschine korrekt simuliert.
Wir verzichten auf Details.
626
Simulation von GOTO-Programmen durch
Turingmaschinen
Lemma 7.34
Jede G-berechenbare partielle Funktion ist auch T-berechenbar.
627
Beweisidee für Lemma 7.34
Sei P ein GOTO-Programm über dem Alphabet A. Sei V die Menge
aller Variablen, die in P vorkommen. Wir geben eine Turingmaschine
M an, die P schrittweise simuliert.
I
Das Alphabet von M ist
A ∪ {, ∗} ∪ (A × V ),
wobei , ∗ 6∈ A. Wie üblich ist das Blank.
I
M arbeitet in drei Phasen, der Initialisierungsphase, der
Simulationsphase, und der Abschlussphase.
I
Während der Simulationsphase ist der nichtleere Teil des
Bandes von M ausschließlich mit Symbolen (a, v ) ∈ A × V oder
∗ beschriftet.
I
Der Sinn des ∗ Symbols ist es, die bei ‘−’ Anweisungen
entstehenden Lücken zu füllen.
628
Bandbeschriftung
Ist zu einem Zeitpunkt der Simulation der Wert einer Variablen V
unter der aktuellen Belegung a1 . . . an , so enthält das Band der
Maschine M die Symbole (a1 , v ), . . . , (an , v ) in dieser Reihenfolge
und keine anderen Symbole (a, v ). Allerdings können vor, zwischen,
und hinter den (ai , v ) noch beliebig viele andere Symbole (b, w) für
Variablen w 6= v oder ∗ vorkommen.
Beispiel
Sei V = {v0 , v1 , v2 } und seien zu irgendeinem Zeitpunkt während der
Simulation die Werte der Variablen unter der aktuellen Belegung β
β(v0 ) = ab,
β(v1 ) = bab,
β(v2 ) = b.
Dann sind zwei mögliche Bandbeschriftungen der Maschine M:
· · · (a, v0 )(b, v0 )(b, v1 )(a, v1 )(b, v1 )(b, v2 ) · · ·
· · · (b, v2 ) ∗
∗ (a, v0 )(b, v1 ) ∗ (b, v0 )(a, v1 )(b, v1 ) ∗ · · ·
629
Initialisierungsphase
In der Initialisierungsphase ersetzt die Maschine das Eingabewort
a1 . . . an
durch
(a1 , v0 ) . . . (an , v0 )
und bewegt anschließend den Schreib-/Lesekopf wieder ganz nach
links.
630
Simulationsphase
In jedem Simulationsschritt arbeitet die Maschine eine Zeile Z des
Programms ab. Für jede Zeile Z hat die Maschine einen eigenen
Satz von Zuständen z(Z , 1), . . . , z(Z , mZ ).
Zu Beginn ist die Maschine im Zustand z(Z , 1), und der
Schreib-/Lesekopf steht am linken Ende der Bandbeschriftung.
I Falls Z = GOTO s, so muss die Maschine nur geeignet den
Zustand wechseln.
Ansonsten kommt in der Zeile Z genau eine Variable v vor.
I
Falls Z = v ← v + a für ein a ∈ A, so bewegt die Maschine den
Schreib-/Lesekopf hinter das rechte Ende der Bandbeschriftung,
schreibt dort (a, v ) aufs Band, und bewegt den Kopf wieder ans
linke Ende der Bandbeschriftung.
I
Falls Z = v ← v − für ein a ∈ A, so bewegt die Maschine den
Schreib-/Lesekopf bis ans rechte Ende der Bandbeschriftung.
Dann bewegt sie den Kopf wieder zurück ans linke Ende. Dabei
ersetzt sie das erste Symbol der Gestalt (a, v ), auf das sie trifft,
durch ∗.
631
I
Falls Z = IF v = ε GOTO s, so liest die Maschine so lange das
Band, bis sie entweder auf ein Symbol (a, v ) trifft und weiß, dass
v unter der aktuellen Belegung nicht das leere Wort ist, oder bis
sie nach dem rechten Ende der Bandbeschriftung auf ein Blank
trifft und weiß, dass v unter der aktuellen Belegung das leere
Wort ist. Dann bewegt sie den Kopf wieder ans linke Ende der
Bandbeschriftung und wechselt den Zustand entsprechend.
I
Falls Z = IF v ?a GOTO s, so liest die Maschine das Band bis
zum rechten Ende und merkt sich dabei mit Hilfe ihres Zustands
das letzte Symbol a ∈ A, so dass (a, v ) auf dem Band steht
(wenn überhaupt ein Symbol der Gestalt (a, v ) vorkommt). Dann
bewegt sie den Kopf zurück ans linke Ende und wechselt
geeignet den Zustand.
632
Abschlussphase
In der Abschlussphase schreibt die Maschine den aktuellen Inhalt der
Variablen v0 aufs Band und bewegt den Kopf hinter das rechte Ende
dieser Beschriftung.
633
Der Äquivalenzsatz
Satz 7.35
Eine partielle Funktion ist genau dann G-berechenbar, wenn sie
T-berechenbar ist.
Korollar 7.36
Ein Problem ist genau dann G-entscheidbar (G-semi-entscheidbar),
wenn es T-entscheidbar (bzw. T-semi-entscheidbar) ist.
634
Mehrband-Turingmaschinen
I
I
Statt eines Bandes kann die Maschine mehrere Bänder als
Speicher verwenden, jedes mit einem eigenen
Schreib-/Lesekopf. Je eines der Bänder wird als Ein- bzw.
Ausgabeband festgelegt.
Es kann gezeigt werden, dass jede von einer Mehrband-TM
berechenbare Funktion auch von einer Einband-TM berechnet
werden kann, also T- und damit G-berechenbar ist.
635
Nichtdeterministische Turingmaschinen
(NTM)
I
I
I
Statt einer Übergangsfunktion hat eine NTM eine
Übergangsrelation. Dann kann eine Konfiguration mehrere
Nachfolgekonfigurationen oder auch gar keine
Nachfolgekonfiguration haben. Dadurch kann es mehrere
Berechnungen geben.
Zum Berechnen von Funktionen sind NTM nicht geeignet, wohl
aber für Entscheidungsprobleme: Eine NTM akzeptiert eine
Eingabe, wenn es mindestens eine akzeptierende Berechnung
gibt.
Es kann gezeigt werden, dass die Klasse der durch NTM
entscheidbaren Probleme gleich der durch normale,
deterministische“ TM entscheidbaren Probleme und damit
”
gleich der Klasse der G-entscheidbaren Probleme ist.
636
§ 7.5 Berechenbare Funktionen auf den
natürlichen Zahlen
637
Kodierung natürlicher Zahlen
Wir kodieren natürliche Zahlen unär als Wörter über dem Alphabet
{|}.
Wir definieren eine Kodierungsfunktion
h · i : N → {|}∗
durch h0i := ε
und hn + 1i := hni | für n ≥ 0.
638
Berechenbare Funktionen und
entscheidbare Relationen
Definition 7.37
Sei k ≥ 1.
1. Eine (partielle) Funktion f : Nk → N nennen wir G-berechenbar,
wenn die (partielle) Funktion F : ({|}∗ )k → {|}∗ mit
F (hn0 i, . . . , hnk −1 i) = hf (n0 , . . . , nk −1 )i
G-berechenbar ist.
2. Eine Relation r ⊆ Nk nennen wir G-entscheidbar (bzw.
G-semi-entscheidbar), wenn die Relation
R := {(hn0 i, . . . , hnk −1 i) | (n0 , . . . , nk −1 ) ∈ r }
G-entscheidbar (bzw. G-semi-entscheidbar) ist.
639
Beispiel: Addition
Folgendes GOTO-Programm berechnet die Additionsfunktion:
Plus
0. IF v1 = ε GOTO 4
1. v1 ← v1 −
2. v0 ← v0 + |
3. GOTO 0
640
Notation
Notation
In GOTO-Programmen über dem Alphabet {|} schreiben wir im
Folgenden für alle i ∈ N:
I
vi ← vi + 1 anstatt vi ← vi + |,
I
vi ← vi −1 anstatt vi ← vi −,
vi = 0 anstatt vi = ε
I
Beispielsweise sieht das Additionsprogramm von der letzten Folie
dann folgendermaßen aus:
Plus
0. IF v1 = 0 GOTO 4
1. v1 ← v1 −1
2. v0 ← v0 + 1
3. GOTO 0
641
Beispiel: Gerade Zahlen
Folgendes GOTO-Programm entscheidet die Menge der geraden
Zahlen:
Gerade
0. IF v0 = 0 GOTO 5
1. v0 ← v0 −1
2. IF v0 = 0 GOTO 6
3. v0 ← v0 −1
4. GOTO 0
5. v0 ← v0 + 1
642
Hintereinanderausführung von Programmen
Lemma 7.38
Seien P und P 0 GOTO-Programme. Dann gibt es ein
GOTO-Programm (P; P 0 ), so dass für alle Belegungen β, β 0 gilt:
(P; P 0 )β ↓ β 0 ⇐⇒ ex. Belegung β 00 , so dass
Pβ ↓ β 00 und P 0 β 00 ↓ β 0 .
643
Unterprogramme
Syntax von GOTO-Programm mit Unterprogrammen
Seien P1 , . . . , Pn GOTO-Programme.
Ein GOTO-Programm mit Unterprogrammen P1 , . . . , Pn ist ein
Programm, dass neben normalen Anweisungen auch noch
Anweisungen der Form
vi ← Pm (vj0 , . . . , vjk −1 )
für 1 ≤ m ≤ n und beliebige i, k , j0 , . . . , jk −1 ∈ N enthält.
644
Semantik von GOTO-Programm mit Unterprogrammen
Seien P1 , . . . , Pn GOTO-Programme und Q = (Z1 , . . . , Zr ) ein
GOTO-Programm mit Unterprogrammen P1 , . . . , Pn über dem
Alphabet A.
Wir definieren die Nachfolgerfunktion NQ von Q wie folgt: Sei
(s, β) ∈ KonfA .
I Falls s > r oder Zs eine normale GOTO-Anweisung ist, so sei
NQ (s, β) wie bei normalen GOTO-Programmen definiert.
I Falls Zs = vi ← Pm (vj , . . . , vj
), so sei
0
k −1
undefiniert falls Pm [β(vj0 ), . . . , β(vjk −1 )] ↑,
NQ (s, β) =
(s + 1, β 0 ) falls Pm [β(vj0 ), . . . , β(vjk −1 )] ↓,
wobei
y
falls ` = i und Pm [β(vj0 ), . . . , β(vjk −1 )] ↓ y ,
β 0 (v` ) =
β(v` ) sonst.
Mit Hilfe der Nachfolgerfunktion können wir jetzt die Semantik von Q
wie bei einem normalen GOTO-Programm definieren.
645
Lemma 7.39
Seien P1 , . . . , Pn GOTO-Programme und Q ein GOTO-Programm mit
Unterprogrammen P1 , . . . , Pn über dem Alphabet A.
Dann gibt es für alle k ≥ 1 ein GOTO-Programm Q 0 , so dass für alle
x0 , . . . , xk −1 , y ∈ A∗ gilt:
Q[x0 , . . . , xk −1 ] ↓ y ⇐⇒ Q 0 [x0 , . . . , xk −1 ] ↓ y .
Insbesondere ist also jede Funktion, die von einem GOTO-Programm
mit Unterprogrammen berechnet werden kann, auch
GOTO-berechenbar.
646
Beispiel: Multiplikation
Wir verwenden folgende Hilfsprogramme
Null
Id
0. IF v0 = 0 GOTO 3
0. GOTO 1
1. v0 ← v0 −1
2. GOTO 0
Folgendes Programm berechnet die Multiplikationsfunktion:
Mal
0. v2 ← Id(v0 )
1. v0 ← Null
2. IF v1 = 0 GOTO 6
3. v1 ← v1 −1
4. v0 ← Plus(v0 , v2 )
5. GOTO 2
647
Rekursion
Satz 7.40
Seien f : N → N, g : N3 → N G-berechenbare Funktionen. Sei
h : N2 → N definiert durch
h(x, 0) := f (x),
h(x, y + 1) := g(x, y + 1, h(x, y ))
(für x, y ∈ N).
Dann ist h G-berechenbar.
648
Beispiele
Folgende Funktionen sind G-berechenbar:
1. Die Potenzfunktion: f (x, y ) = x y
x −y
2. Die modifizierte Subtraktion: f (x, y ) =
0
falls x ≥ y
sonst.
3. Die Fakultätsfunktion: f (x) = x!
649
§ 7.6 Das Halteproblem für
GOTO-Programme
650
Vereinbarung
In diesem Paragraphen sei
A = {a0 , . . . , aq }
(für ein q ≥ 0) ein festes Alphabet.
OBdA sei
a0 = |.
Für n ∈ N ist dann hni = a0 . . . a0 ∈ A∗ .
| {z }
n mal
651
Kodierung von Wörtern
Sei B := {b0 , . . . , bp } ein beliebiges Alphabet.
Wir definieren eine Kodierungsfunktion
h · iB,A : B ∗ → A∗
wie folgt: Wir zählen B ∗ lexikographisch auf, also
ε, b0 , b1 , . . . , bp , b0 b0 , b0 b1 , . . . , bp bp , b0 b0 b0 , . . . .
Ist x ∈ B ∗ das n-te Wort in dieser Aufzählung, so setzen wir
hxiB,A := hni = | . . . | .
|{z}
n mal
Notation
Wir schreiben einfach hxi statt hxiB,A .
652
Kodierung von Programmen (Gödelisierung)
GOTO-Programme über dem Alphabet A lassen sich als Wörter über
dem Alphabet
B := A ∪ {0, . . . , 9} ∪ {A, B, . . . , Z}
∪ {v } ∪ {0 , . . . , 9 } ∪ {←, +, −, ε, =, ?, (, ), ‘ , ’, ‘
’}
auffassen.
Beispiel 7.41
Das Programm Beispiel-1 entspricht dem Wort
`
´
IF v0 = ε GOTO 5, v0 ← v0 −, v1 ← v1 + a, v1 ← v1 + a, GOTO 0
Den Code hPi = hPiB,A bezeichnen wir als die Gödelnummer von P.
653
Entscheidbarkeit der GOTO-Sprache
Lemma 7.42
Die Menge
{hPi | P GOTO-Programm über A}
ist entscheidbar.
654
Ein unentscheidbares Problem
Lemma 7.43
Das Problem
K := {hPi | P[hPi] ↓}
ist nicht G-entscheidbar.
655
Beweis von Lemma 7.43
Nehmen wir an, K ist G-entscheidbar, sagen wir, durch ein GOTO-Programm
PK .
Dann gilt für alle GOTO-Programme P:
PK [hPi] ↓ y für ein y 6= ε
PK [hPi] ↓ ε
⇐⇒ P[hPi] ↓,
⇐⇒ P[hPi] ↑ .
(?)
1. Schritt: Wir konstruieren ein GOTO-Programm P , so dass für alle x ∈ A∗ :
K
⇐⇒ P [x] ↑,
⇐⇒ P [x] ↓ .
K
(??)
K
PK [x] ↓ y für ein y 6= ε
PK [x] ↓ ε
656
Beweis von Lemma 7.43 (cont.)
Konstruktion: Wir definieren ein Programm P
folgt:
0. v0 ← PK (v0 )
1. IF v0 = ε GOTO 3
2. GOTO 2
Dann gilt für alle x ∈ A∗ :
0
mit Unterprogramm PK wie
K
⇐⇒ P 0 [x] ↑,
⇐⇒ P 0 [x] ↓ .
PK [x] ↓ y für ein y 6= ε
PK [x] ↓ ε
K
K
Sei P ein GOTO-Programm, so dass für alle x, y ∈ A∗ gilt:
K
P [x] ↓ y ⇐⇒ P 0 [x] ↓ y.
K
K
P erfüllt dann (??).
K
657
Beweis von Lemma 7.43 (cont.)
2. Schritt: Wir wenden P auf sich selbst an.
Nach (??) angewandt auf x := hPi und (?) gilt für alle GOTO-Programme P:
K
P [hPi] ↑ ⇐⇒ PK [hPi] ↓ y für ein y 6= ε ⇐⇒ P[hPi] ↓ .
K
Also mit P := P
K
P [hP i] ↑ ⇐⇒ P [hP i] ↓ .
K
K
K
K
Das ist ein Widerspruch.
658
Das Parametrisierungslemma
Lemma 7.44
Für alle GOTO-Programme P und alle x ∈ A∗ gibt es ein
GOTO-Programm Px , so dass für alle y ∈ A∗ gilt:
P[x] ↓ y ⇐⇒ Px [ε] ↓ y.
Ferner gibt es ein GOTO-Programm Q, so dass für alle
GOTO-Programme P und alle x ∈ A∗ gilt:
Q[hPi, x] ↓ hPx i.
659
Die Unentscheidbarkeit des Halteproblems
Satz 7.45
1. Das spezielle Halteproblem
Hε := {hPi | P[ε] ↓}
ist nicht G-entscheidbar.
2. Das allgemeine Halteproblem
H := {(hPi, x) | P[x] ↓}
ist nicht G-entscheidbar.
660
Beweis von Satz 7.45
(1) Nehmen wir an, Hε ist G-entscheidbar, sagen wir, durch ein
GOTO-Programm PHε .
Dann gilt für alle GOTO-Programme P:
PHε [hPi] ↓ y für ein y 6= ε
PHε [hPi] ↓ ε
⇐⇒ P[ε] ↓,
⇐⇒ P[ε] ↑ .
Sei Q das Programm aus dem Parametrisierungslemma, und sei R
folgendes Programm mit Unterprogrammen Q, PHε :
0. v0 ← Q(v0 , v0 )
1. v0 ← PHε (v0 )
661
Beweis von Satz 7.45 (cont.)
Dann gilt für alle GOTO-Programme P und alle y ∈ A∗
R[hPi] ↓ y ⇐⇒ PHε [hPhPi i] ↓ y,
wobei PhPi ein Programm ist mit
PhPi [ε] ↓ ⇐⇒ P[hPi] ↓ .
Also für alle GOTO-Programme P:
R[hPi] ↓ y für ein y 6= ε ⇐⇒ PHε [hPhPi i] ↓ y für ein y 6= ε
⇐⇒ PhPi [ε] ↓
⇐⇒ P[hPi] ↓
und
R[hPi] ↓ ε ⇐⇒ PHε [hPhPi i] ↓ ε
⇐⇒ PhPi [ε] ↑
⇐⇒ P[hPi] ↑
Also entscheidet R die Menge K . Nach Lemma 7.43 ist K aber nicht
G-entscheidbar; das ist ein Widerspruch.
662
Beweis von Satz 7.45 (cont.)
(2) Nehmen wir an, die Menge H ist G-entscheidbar, sagen wir, durch ein
GOTO-Programm PH .
Dann gilt für alle GOTO-Programme P und x ∈ A∗ :
PH [hPi, x] ↓ y für ein y 6= ε
PH [hPi, x] ↓ ε
⇐⇒ P[x] ↓,
⇐⇒ P[x] ↑ .
Weil [hPi, ε] = [hPi], folgt daraus für x := ε
PH [hPi] ↓ y für ein y 6= ε
PH [hPi] ↓ ε
⇐⇒ P[ε] ↓,
⇐⇒ P[ε] ↑ .
Also entscheidet PH auch Hε , ein Widerspruch.
663
Universelle Programme
Bislang ist bei unseren Registermaschinen das Programm fest
”
verdrahtet“ in dem Sinne, dass jede Maschine ihr eigenes festes
Programm hat. Eine universelle Maschine ist eine frei
”
programmierbare“ Registermaschine, die die Gödelnummer hPi
eines Programmes als Eingabe erwartet und dieses Programm dann
ausführt.
Satz 7.46
Es gibt ein GOTO-Programm PU über dem Alphabet A, so dass für
alle GOTO-Programme P über A und alle x, y ∈ A∗ gilt:
PU [hPi, x] ↓ y ⇐⇒ P[x] ↓ y .
664
Semi-Entscheidbarkeit des Halteproblems
Satz 7.47
Die Mengen H, Hε und K sind G-semi-entscheidbar.
Korollar 7.48
Die Mengen A∗ \ H, A∗ \ Hε und A∗ \ K sind nicht
G-semi-entscheidbar.
665
§ 7.7 Die Unentscheidbarkeit der Logik der
ersten Stufe
666
Alphabet und Symbolmenge
In diesem Paragraphen betrachten wir GOTO-Programme über dem
Alphabet A := {|}.
Wir verwenden wieder die (bijektive) Kodierungsfunktion
h · i : N → A∗ .
Sei
˙ ḟ , 0̇} ∪ {Q̇m | m ≥ 0},
σ := {≤,
wobei
˙ 2-stelliges Relationssymbol,
I ≤
I
ḟ 1-stelliges Funktionssymbol,
0̇ Konstantensymbol,
I
Q̇m (m + 3)-stelliges Relationssymbol (für m ≥ 0).
I
667
Reduktion des Halteproblems auf das
Allgemeingültigkeitsproblem
Lemma 7.49
Für jedes GOTO-Programm P über A gibt es einen σ-Satz ϕP ∈ Lσ ,
so dass
ϕP allgemeingültig ⇐⇒ P[ε] ↓ .
Ferner gibt es ein GOTO-Programm R über dem Alphabet ASCII, so
dass für alle GOTO-Programme P:
R[hPi] ↓ ϕP .
668
Beweis von Lemma 7.49
Wir zeigen nur, wie man zu einem GOTO-Programm P den Satz ϕP definiert.
Intuitiv wird klar sein, dass die Abbildung P 7→ ϕP berechenbar ist. Nach der
Church’schen These ist sie damit auch G-berechenbar.
Sei P = (Z0 , . . . , Zr ) ein GOTO-Programm über A.
1. Vorbereitende Definitionen.
Wir betrachten die Berechnung von P bei Eingabe [ε]:
(s0 , β0 ), (s1 , β1 ), . . . ,
wobei
(s0 , β0 ) := (0, [ε]) und (st+1 , βt+1 ) := NP (st , βt ) für t ≥ 0.
Falls (su , βu ) eine Endkonfiguration ist, so ist (st , βt ) für t > u undefiniert. Sei
T := {t ≥ 0 | (st , βt ) ist definiert}.
Dann ist
T = N ⇐⇒ P[ε] ↑ .
669
Beweis von Lemma 7.49 (cont.)
Sei m der höchste Variablenindex in P, d.h.,
m = max{i | vi kommt in P vor}.
Man beachte, dass für alle i > m und alle t ∈ T gilt
βt (vi ) = ε.
Für 0 ≤ i ≤ m und t ∈ T sei
bti := hβt (vi )i−1 ,
also bti ∈ N, so dass βt (vi ) = hbti i. Dann gilt
βt = [βt0 , . . . , βtm ].
Weil in jedem Schritt der Wert einer Variablen höchstens um | verlängert
werden kann (also die zugehörige Zahl um höchstens 1 erhöht), gilt für t ∈ T
und 0 ≤ i ≤ m:
bti ≤ t.
Schließlich sei rmax die größte Zeilennummer, die in P entweder als
Zeilennummer oder als Ziel einer Sprunganweisung vorkommt.
670
Beweis von Lemma 7.49 (cont.)
2. Definition der Struktur AP .
Wir definieren eine σ-Struktur AP wie folgt:
I
AP := T ∪ {0, . . . , rmax },
I
˙ AP ist die natürliche Ordnung auf AP ⊆ N.
≤
I
ḟ AP ist die Nachfolgerfunktion, d.h,
n + 1 falls n + 1 ∈ AP ,
AP
f (n) :=
n
sonst.
I
I
0̇AP := 0
˛
A
Q̇m P := (t, st , bt0 , . . . , btm ) ˛ t ∈ T }.
I
Qj
AP
= ∅ für alle j 6= m.
Die Struktur AP beschreibt also vollständig die Berechnung von P bei
Eingabe [ε].
671
Beweis von Lemma 7.49 (cont.)
3. Definition des Satzes ψP .
Wir definieren einen Satz
ψP := ψOrd ∧ ψQ ∧ ψAnfang ∧ ψZeile 0 ∧ . . . ∧ ψZeile r
wie folgt:
I
˙ Ordnung ist, ḟ die zugehörige Nachfolgerfunktion, und
ψOrd sagt, dass ≤
0̇ das kleinste Element:
˙ x
ψOrd := ∀x x ≤
`
´
˙ y ∧y≤
˙ z) → x ≤
˙ z
∧ ∀x∀y∀z (x ≤
`
´
.
˙ y ∧y≤
˙ x) → x =
∧ ∀x∀y (x ≤
y
˙ y ∨y≤
˙ x)
∧ ∀x∀y(x ≤
˙ ḟ (x)
∧ ∀x x ≤
`
´
.
˙ x
∧ ∀x ¬x = ḟ (x) ∨ ∀y y ≤
`
´
.
.
˙ y ∧y≤
˙ ḟ (x)) → (x =
∧ ∀x∀y (x ≤
y ∨ ḟ (x) = y)
(Reflexivität)
(Transitivität)
(Antisymmetrie)
(Konnexität)
(N1)
(N2)
(N3)
672
Beweis von Lemma 7.49 (cont.)
˙ x
∧ ∀x 0̇ ≤
(Null ist Min.)
(N1)–(N3) axiomatisieren die Nachfolgerfunktion. Damit die
Nachfolgerfunktion auch dann eine totale Funktion ist, wenn der Träger
.
der Struktur endlich ist, lassen wir ḟ (x) = x für das maximale Element x
zu.
Für jedes n ∈ N definieren wir induktiv einen σ-Term ṅ. 0̇ ist bereits definiert.
Für n ∈ N sei
˙ 1 := f (ṅ).
n+
Also
1̇ = f (0̇),
I
2̇ = f (f (0̇)),
...
ψQ setzt den Rahmen dafür, dass Qm die Folge der Konfigurationen
kodiert. ψQ ist die Konjunktion folgender Sätze:
673
Beweis von Lemma 7.49 (cont.)
I
Für jeden Zeitpunkt x enthält Q̇m nur eine Konfiguration.“
”
∀x∀z∀z 0 ∀y0 . . . ∀ym ∀y00 . . . ∀ym0
“`
´
Q̇m (x, z, y0 , . . . , ym ) ∧ Q̇m (x, z 0 y00 , . . . , ym0 )
m
^
´”
` .
.
→ z = z0 ∧
yi = yi 0
i=0
I
Wenn eine Konfiguration eine Zeilennummer ≤ r hat, so gibt es
”
eine Nachfolgekonfiguration.“
“`
´
˙ ṙ
∀x∀z∀y0 . . . ∀ym Q̇m (x, z, y0 , . . . , ym ) ∧ z ≤
”
`
.
→ ¬x = ḟ (x) ∧ ∃z 0 ∃y00 . . . ∃yk0 Q̇m (ḟ (x), z 0 , y00 , . . . , ym0 )
674
Beweis von Lemma 7.49 (cont.)
I
I
Wenn eine Konfiguration eine Zeilennummer > r hat, so gibt es
”
keine Konfigurationen zu späteren Zeitpunkten.“
“`
´
˙ ṙ
∀x∀z∀y0 . . . ∀ym Q̇m (x, z, y0 , . . . , ym ) ∧ ¬z ≤
”
`
.
˙ x 0 ∧ ¬x =
→ ∀x 0 (x ≤
x 0 ) → ∀z 0 ∀y00 . . . ∀ym0 ¬Q̇m (x 0 , z 0 , y00 , . . . , ym0 )
ψAnfang besagt, dass Q̇m zum Zeitpunkt 0 die Anfangskonfiguration
(s0 = 0, b0i = 0 für alle i) enthält:
ψAnfang := Q̇m (0̇, 0̇, 0̇, . . . , 0̇).
I
Für 0 ≤ s ≤ r sei ψZeile s in Abhängigkeit vom Befehl in Zeile s wie folgt
definiert:
I
Ist Zs = vi ← vi + 1, so ist
“
ψZeile s := ∀x∀y0 . . . ∀ym Q̇m (x, ṡ, y0 , . . . , ym )
”
˙ 1, y0 , . . . , yi−1 , ḟ (yi ), yi+1 , . . . , ym )
→ Q̇m (ḟ (x), s +
675
Beweis von Lemma 7.49 (cont.)
I
Ist Zs = vi ← vi −1, so ist
“
ψZeile s := ∀x∀y0 . . . ∀ym Q̇m (x, ṡ, y0 , . . . , ym )
`` .
´
˙ 1, y0 , . . . , ym )
→ yi = 0̇ ∧ Q̇m (ḟ (x), s +
`
.
.
∨ ¬yi = 0̇ ∧ ∃y(ḟ (y) = yi
´´”
˙ 1, y0 , . . . , yi−1 , y, yi+1 , . . . , ym ))
∧ Q̇m (ḟ (x), s +
.
I
Ist Zs = GOTO s 0 , so ist
“
ψZeile s := ∀x∀y0 . . . ∀ym Q̇m (x, ṡ, y0 , . . . , ym )
´
→ Q̇m (ḟ (x), s˙0 , y0 , . . . , ym )
676
Beweis von Lemma 7.49 (cont.)
I
I
Ist Zs = IF vi = ε GOTO s 0 , so ist
“
ψZeile s := ∀x∀y0 . . . ∀ym Q̇m (x, ṡ, y0 , . . . , ym )
`` .
´
→ yi = 0̇ ∧ Q̇m (ḟ (x), s˙0 , y0 , . . . , ym )
`
´´”
.
˙ 1, y0 , . . . , ym )
∨ ¬yi = 0̇ ∧ Q̇m (ḟ (x), s +
Ist Zs = IF vi ? | GOTO s 0 , so ist
“
ψZeile s := ∀x∀y0 . . . ∀ym Q̇m (x, ṡ, y0 , . . . , ym )
``
´
.
→ ¬yi = 0̇ ∧ Q̇m (ḟ (x), s˙0 , y0 , . . . , ym )
` .
´´”
˙ 1, y0 , . . . , ym )
∨ yi = 0̇ ∧ Q̇m (ḟ (x), s +
677
Beweis von Lemma 7.49 (cont.)
4. Bedeutung des Satzes ψP .
Es ist leicht, zu beweisen, dass
AP |= ψP .
(?)
Ferner kann man für jede σ-Struktur A mit A |= ψP per Induktion über t ≥ 0
zeigen:
A |= Q̇m (ṫ, ṡt , ḃt0 , . . . , ḃtm ).
(??)
5. Definition des Satzes ϕP .
Wir setzen
`
´
˙ ṙ ∧ ∃y0 . . . ∃ym Q̇m (x, z, y0 , . . . , ym ) .
ϕP := ψP → ∃x∃z ¬z ≤
Behauptung:
ϕP allgemeingültig ⇐⇒ P[ε] ↓ .
Beweis: =⇒“:
”
ϕP allgemeingültig =⇒ AP |= ϕP
678
Beweis von Lemma 7.49 (cont.)
´
`
˙ ṙ ∧ ∃y0 . . . ∃ym Q̇m (x, z, y0 , . . . , ym )
=⇒ AP |= ∃x∃z ¬z ≤
(?)
=⇒ ex. t ∈ T , s > r : βt = (s, bt0 , . . . , btm )
Def. AP
=⇒ P[ε] ↓ .
⇐=“: Es gelte P[ε] ↓. Dann gibt es ein t ∈ T , so dass st > r . Wähle so ein t.
”
Sei A σ-Struktur. Falls A 6|= ψP , so A |= ϕP . Nehmen wir also an, A |= ψP .
Wegen (??) gilt dann
A |= Q̇m (ṫ, ṡt , ḃt0 , . . . , ḃtm ).
Also
`
´
˙ ṙ ∧ ∃y0 . . . ∃ym Q̇m (x, z, y0 , . . . , ym )
A |= ∃x∃z ¬z ≤
√
und damit A |= ϕP .
679
Die Unentscheidbarkeit der Logik der
ersten Stufe
Satz 7.50
Pσ-Allg , das Allgemeingültigkeitsproblem für σ-Sätze, ist nicht
G-entscheidbar.
Korollar 7.51
Das Erfüllbarkeitsproblem für σ-Sätze ist nicht G-aufzählbar (und
damit auch nicht G-entscheidbar).
Bemerkung 7.52
Der Satz gilt nicht nur für unsere spezielle Symbolmenge σ, sondern
für alle Symbolmengen, die mindestens ein mindestens 2-stelliges
Funktions- oder Relationsymbol enthalten.
680
Beweis von Satz 7.50
Nehmen wir an, das Allgemeingültigkeitsproblem wäre entscheidbar, etwa
durch ein Programm PA .
Sei Q ein GOTO-Programm, dass die Menge
{hPi | P GOTO-Programm über A}
entscheidet und R ein GOTO-Programm, das die Abbildung hPi 7→ ϕP aus
Lemma 7.49 berechnet.
Dann entscheidet folgendes Programm (mit Unterprogrammen PA , Q, R, Null,
wobei Null ein GOTO-Programm ist, das die Funktion f : A∗ → A∗ mit
f (x) = ε für alle x ∈ A∗ berechnet) das spezielle Halteproblem Hε :
0. v1 ← Q(v0 )
1. IF v1 = ε GOTO 5
2. v0 ← R(v0 )
3. v0 ← PA (v0 )
4. GOTO 6
5. v0 ← Null
Das ist ein Widerspruch, weil Hε nach Satz 7.45 unentscheidbar ist.
681
Herunterladen