Skript

Werbung
Perlen der Informatik
Stefan Hoch, Lars Hupel, Jan-Christian Hütter,
Michael Kerscher, Philipp Meyer, Tobias Nipkow,
Patricia Rachinger, Johannes Reifferscheid, Wolfgang Riedl,
Till Rohrmann, Adrian Rumpold, Paul Stursberg,
Stephan Wolf, Jens Wolter
Inhaltsverzeichnis
1 Mathematische Grundlagen
2
2 Berechenbarkeit
2.1 Algorithmen und berechenbare Funktionen
2.2 Universelle Programme . . . . . . . . . . .
2.3 Aufzählbarkeit . . . . . . . . . . . . . . . .
2.4 Turingmaschinen . . . . . . . . . . . . . .
2.5 Registermaschinen . . . . . . . . . . . . .
2.6 Textersetzungssysteme . . . . . . . . . . .
2.7 Termersetzungssysteme . . . . . . . . . . .
2.8 Hilberts 10. Problem . . . . . . . . . . . .
2.9 Nichtdeterminismus . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
6
7
9
10
12
14
16
20
3 Komplexität
21
3.1 Komplexitätsmaße . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2 Die Komplexitätsklassen P und NP . . . . . . . . . . . . . . . 22
4 Prolog - Programmieren in Logik
4.1 Einführung und Beispiele . . . . . . . . .
4.2 Syntax und Semantik von reinem Prolog
4.3 Unifikation I . . . . . . . . . . . . . . . .
4.4 Ein Prolog Interpreter . . . . . . . . . .
4.5 Unifikation II . . . . . . . . . . . . . . .
4.6 Fixpunkte und ihre Anwendung . . . . .
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
25
25
27
27
28
29
31
1 MATHEMATISCHE GRUNDLAGEN
1
2
Mathematische Grundlagen
Sind A und B Mengen, dann ist A → B die Menge der Funktionen von A
nach B. Eine Funktion f : A → B (f ∈ A → B) ist eine Menge von Paaren
(a, b) mit a ∈ A und b ∈ B, so dass (a, b) ∈ f und (a, b0 ) ∈ f die Identität
b = b0 impliziert.
Definition 1 f ist injektiv :⇔
∀a, a0 . f (a) = f (a0 ) ⇒ a = a0
f ist surjektiv :⇔
∀b ∈ B∃a ∈ A. (a, b) ∈ f
f ist bijektiv :⇔
f injektiv ∧ f surjektiv
Definition 2 Definitionsbereich bzw. Domäne von f :
dom(f ) := {a | ∃b ∈ B. f (a) = b}
Falls f (a) nicht definiert ist, kann man auch f (a) = ⊥ schreiben.
Definition 3 f heißt total :⇔
dom(f ) = A
f heißt partiell :⇔
dom(f ) ⊂ A
Definition 4 Eine Menge M heißt abzählbar, wenn es eine totale, injektive
Funktion von M nach N gibt.
Fakt 1
(a) Jede endliche Menge ist abzählbar.
(b) Jede Teilmenge einer abzählbaren Menge ist abzählbar.
Definition 5 M ist abzählbar unendlich, wenn es eine totale Bijektion zwischen M und N gibt.
Fakt 2
(a) N ist abzählbar unendlich.
2 BERECHENBARKEIT
3
(b) Die Menge der geraden Zahlen ist abzählbar unendlich.
Lemma 1
(a) N × N ist abzählbar unendlich.
(b) Q ist abzählbar unendlich.
Theorem 1 (Cantor) R ist nicht abzählbar unendlich.
Definition 6 Ist Σ eine Menge, so ist Σ∗ die Menge der endlichen Sequenzen
(oder Listen oder Folgen) über Σ. Die leere Sequenz bezeichnen wir mit ε.
Beispiel Falls Σ = {a, b}, dann Σ∗ = {ε, a, b, aa, ab, ba, bb, aaa, . . .}.
Terminologie Σ ist das Alphabet, Σ∗ ist die Menge der Wörter über Σ.
Mit Σn bezeichnen wir die Menge der Wörter der Länge n.
Lemma 2 Ist Σ endlich, so ist Σ∗ abzählbar unendlich.
Beweis Durch systematisches Aufzählen von ganz Σ∗ .
², a1 , . . . , an , a1 a1 , a1 a2 , . . . , an an , . . .
| {z } |
{z
}
Σ
Σ2
Dies liefert die gesuchte totale und injektive Abbildung von Σ∗ nach N.
2
Berechenbarkeit
2.1
Algorithmen und berechenbare Funktionen
Eine beliebte informelle Definition von Algorithmus:
Ein Algorithmus ist eine endliche Beschreibung eines Verfahrens,
in der jeder Schritt effektiv, d. h. mit den gegebenen Mitteln in
endlicher Zeit ausführbar ist.
Beispiele:
• Java-Programme
• Manche Kochrezepte
• “Wenn in der Dezimaldarstellung von π die Folge 0123456789 vorkommt, dann gib 1 aus, sonst 0” ist kein Algorithmus.
2 BERECHENBARKEIT
4
Wir nehmen im folgenden an, dass Algorithmen endliche Texte sind, genauer gesagt Elemente von Σ∗ für ein geeignetes endliches Σ. Weiterhin beschränken wir uns auf Algorithmen, die (potenziell partielle) Funktionen von
N nach N berechnen.
Definition 7 Ein Algorithmus A berechnet f : N → N, wenn für alle n ∈ N
gilt:
(a) Falls A mit Eingabe n Ausgabe m liefert, dann gilt f (n) = m.
(b) Falls A mit Eingabe n nicht terminiert, dann gilt f (n) = ⊥.
Man muss hier zwei Ebenen unterscheiden:
Algorithmus = Syntax = endlicher Text
Funktionen = Semantik = (meist unendliche) Menge von Paaren
Definition 8 Eine Funktion f ist berechenbar, wenn es einen Algorithmus
gibt, der f berechnet.
Theorem 2 Es gibt nicht-berechenbare Funktionen.
Beweis Da Algorithmen Texte über einem endlichen Alphabet sind, ist die
Menge der Algorithmen abzählbar unendlich. Daher können wir die Algorithmen (analog zu Σ∗ ) durchnummerieren: A0 , A1 , . . . . Jeder Algorithmus
berechnet eine bestimmte Funktion, die wir alle in einer unendlichen Tabelle
anordnen können:
0 1 2 ···
A0 5 42 ⊥ · · ·
A1 1 1 1 · · ·
A2 ⊥ ⊥ 3 · · ·
..
.. .. .. . .
.
.
. . .
{z
}
|
berechenbare Funktionen
Daraus konstruieren wir wie folgt eine nicht-berechenbaren Funktion. Sei
F (p, n) die von Ap berechnete Funktion, angewandt auf n. Dann wird die
Funktion “Diagonale + 1”
(
F (n, n) + 1 falls F (n, n) 6= ⊥
f (n) =
1
sonst
durch keinen Algorithmus berechnet: f unterscheidet sich für jedes n von der
von An berechnete Funktion an der Stelle n.
Notation Ω ist die total undefinierte Funktion.
2 BERECHENBARKEIT
5
Im Folgenden fixieren wir irgendeine Programmiersprache, ohne diese genauer zu beschreiben. Allerdings nehmen wir an, dass Programme, Eingaben
und Ausgaben natürliche Zahlen sind. Diese Annahme ist zulässig, da Texte
und natürliche Zahlen ebenso als Bitsequenzen dargestellt werden können.
Die erste präzise Beschreibung einer Kodierung von Formeln (statt Programmen) in Zahlen erfolgte durch Kurt Gödel (1906-1978). Ihm zu Ehren
wird dies als Gödelisierung bezeichnet.
Definition 9 Für p ∈ N ist ϕp die vom Programm p berechnete Funktion.
Theorem 3 (Spezielles Halteproblem) Die Funktion
(
1 falls ϕn (n) 6= ⊥
T (n) =
0 sonst
ist nicht berechenbar.
Beweis Indirekt. Sei T berechenbar. Dann ist auch T 0 berechenbar:
(
1 falls T (n) = 0
T 0 (n) =
⊥ sonst
Das heißt, es gibt ein Programm p mit ϕp = T 0 . Damit ergibt sich folgender
Widerspruch:
T 0 (p) 6= ⊥
⇔
Def T 0
T (p) = 0
⇔
Def T
ϕp (p) = ⊥
⇔
T 0 (p) = ⊥
Die Intuition hinter diesem Beweis ist wieder ein Diagonalschluss. Gegeben
die Tabelle aller berechenbaren Funktionen
0 1 2
ϕ0 ⊥ 3 5
ϕ1 2 7 ⊥
ϕ2 ⊥ ⊥ ⊥
..
.
...
...
...
...
kann man sofort eine Funktion angeben, die nicht in der Tabelle enthalten
ist:
(
1 falls ϕn (n) = ⊥
T 0 (n) =
⊥ sonst
Daher kann auch T nicht berechenbar sein, da sonst T 0 berechenbar (und
somit in der Tabelle enthalten) wäre.
2 BERECHENBARKEIT
6
Definition 10 Eine Menge M ist entscheidbar wenn ihre charakteristische
Funktion
(
1 falls x ∈ M
χM (x) =
0 sonst
berechenbar ist.
Korollar 1 {p | p ∈ dom(ϕp )} ist nicht entscheidbar, da T die charakteristische Funktion dieser Menge ist.
Eine alternative Sprechweise lautet: Es ist (für beliebige p) unentscheidbar,
ob p ∈ dom(ϕp ).
Fakt 3 Für p ≤ 42 ist entscheidbar, ob ϕp (p) = ⊥.
Denn der folgende Algorithmus berechnet die dazu gehörige characteristische
Funktion:
if p > 42 then 0
else Schaue in endlicher Tabelle T [p] nach
Hierbei ist T eine Tabelle, die die Zahlen zwischen 0 und 42 auf 0 oder
1 abbildet, und zwar genau so, dass T [p] = 1 ⇔ ϕp (p) 6= ⊥. Eine solche
Tabelle existiert, auch wenn wir nicht wissen, wie wir sie berechnen sollen.
Nach dem gleichen Muster zeigt man:
Fakt 4 Jede endliche Menge ist entscheidbar.
Korollar 2 (Allgemeines Halteproblem) Es ist für beliebige p, n unentscheidbar, ob ϕp (n) = ⊥.
Lemma 3 ϕp (0) = ⊥ ist unentscheidbar.
2.2
Universelle Programme
Ein Interpreter, auch universelles Programm genannt, nimmt als Eingabe
ein Programm p und eine Eingabe n und berechnet daraus ϕp (n). Dieses
universelle Programm wird mit U bezeichnet.
Theorem 4 (Satz von Rice) Sei F eine Menge berechenbarer Funktionen
mit ∅ =
6 F 6= Menge aller berechenbaren Funktionen. Dann ist für ein beliebiges p unentscheidbar, ob ϕp ∈ F .
Beweis Fallunterscheidung:
2 BERECHENBARKEIT
7
(a) Ω 6∈ F : Sei f ∈ F und kf ∈ N so dass ϕkf = f .
Wir beschreiben einen Algorithmus g, der ein n ∈ N auf einen Algorithmus abbildet:
Nimm Eingabe n und liefere als Ausgabe folgenden Algorithmus:
“Nimm Eingabe n. Führe U (n, n) aus. Führe kf mit Eingabe m aus.”
Damit gilt
ϕg(n)
(
f falls ϕn (n) 6= ⊥
=
Ω sonst
und, weil f 6= Ω, folgt
ϕn (n) 6= ⊥
⇔
ϕg(n) = f
⇔
ϕg(n) ∈ F
Damit haben wir das Problem ϕn (n) 6= ⊥ auf das Problem ϕg(n) ∈
F reduziert. Das heißt, wir könnten ϕn (n) 6= ⊥ entscheiden, falls wir
ϕg(n) ∈ F entscheiden könnten. Damit ist auch ϕp ∈ F für beliebiges p
unentscheidbar.
(b) analog
Korollar 3 Für einen beliebigen Algorithmus ist es unentscheidbar, ob er
. . . überall terminiert (F = {f | ∀n.f (n) 6= ⊥}).
. . . irgendwo terminiert (F = {f | ∃n.f (n) 6= ⊥}).
. . . bei Eingabe 42 Ausgabe 17 liefert.
. . . immer die gleiche Ausgabe liefert.
Ist f : M → N eine totale berechenbare Funktion mit m ∈ M ⇔ f (m) ∈ N ,
so ist M auf N reduzierbar und wir schreiben M ≤ N .
Fakt 5 Ist M ≤ N und ist M unentscheidbar so ist auch N unentscheidbar
2.3
Aufzählbarkeit
Definition 11 M ist semientscheidbar gdw es eine berechenbare Funktion
f gibt, so dass m ∈ M ⇔ f (m) 6= ⊥.
Ist A ein Algorithmus der f berechnet, so sagt man A akzeptiert M .
Definition 12 M ist rekursiv aufzählbar (engl. r.e. = rekursively enumerable) gdw M = ∅ oder es eine berechenbare, totale und surjektive Funktion
f : N → M gibt, d.h. M = {f (0), f (1), . . .}.
2 BERECHENBARKEIT
8
Theorem 5 M ist semientscheidbar gdw M rekursiv aufzählbar ist.
Beweis (⇐) Ist M = ∅, dann ist M semientscheidbar durch Ω. Ist M 6= ∅,
dann gibt es eine totale berechenbare surjektive Funktion f : N → M . Dann
akzeptiert der folgende Algorithmus M :
g(m) = Berechne f (0), f (1), . . . , bis m gefunden wird.
Theorem 6 Die Menge M = {p | ϕp ist total} ist nicht rekursiv aufzählbar.
Beweis (indirekt) Sei M rekursiv aufzählbar. Da M 6= ∅, gibt es eine totale,
berechenbare und surjektive Funktion f : N → M . Dann können wir die
Menge der totalen Funktionen wie folgt in eine Tabelle schreiben:
ϕf (0)
ϕf (1)
ϕf (2)
..
.
0
2
2
8
1
3
7
2
2
5
6
1
...
...
...
...
Für den Diagonalschluss definieren wir die Funktion d(n) = ϕf (n) (n) + 1,
die total und berechenbar ist (z.b. durch U (f (n), n) + 1). Daher ms̈ste es
i ∈ N geben mit ϕf (i) = d. Damit folgt der Widerspruch ϕf (i) (i) = d(i) =
ϕf (i) (i) + 1.
Lemma 4 Die Menge T1 = {p | ϕp 6= Ω}, der an mindestens einer Stelle
terminierenden Programme, ist rekursiv aufzählbar.
Beweis Mit beschränktem Parallelismus, der sequentiell simulierbar ist. Das
folgende Programm akzeptiert die Menge T1 :
g(p)
=
Starte nacheinander U (p, 0), U (p, 1), U (p, 2), . . .;
sobald einer dieser Berechnungen terminiert terminiere.
Aber T1 ist nicht entscheidbar (Satz von Rice). Damit kann T1 = {p |
ϕp = Ω} nicht rekursiv aufzählbar sein. Denn:
Lemma 1 Sind M und M rekursiv aufzählbar, so ist M entscheidbar.
Beweis Denn man kann m ∈ M wie folgt entscheiden: Zähle M und M
parallel auf. Falls m in der Ausfzählung von M auftaucht, so weiss man
m ∈ M . Ansonsten muss m in der Ausfzählung von M auftauchen und man
weiss m ∈
/ M.
2 BERECHENBARKEIT
9
Abbildung 1: Turingmaschine
2.4
Turingmaschinen
Schematisch kann man sich die Turingmaschine (TM) wie in Bild 11 vorstellen.
Eine TM wird über einem endliche Alphabet Σ und einer endliche Zusantsmenge Q definiert. Das Programm der TM ist eine (evtl. partielle) Funktion δ : Q × Σ → Q × Σ × {L, R}.
Ein Programmschritt wird folgt ausgeführt: Ist die Turingmaschine im
Zustand q ∈ Q und liest der Kopf a ∈ Σ und gilt δ(q, a) = (q 0 , a0 , L/R), dann
ist der Folgezustand q 0 , a wird durch a0 überschrieben und der Kopf bewegt
sich ein Feld nach links (L) oder rechts (R). Bewegt sich der Kopf über das
augenblickliche Ende des Bandes hinaus, wird automatisch ein neues Feld
mit Beschriftung 2 ∈ Σ angefügt.
Zu Beginn befindet sich die Turingmaschine in einem fixen Zustand q0 ∈
Q (Startzustand) und der Kopf liest das erste Zeichen der Eingabe. Es werden
Programmschritte ausgeführt bis δ(q, a) = ⊥. Die Ausgabe ist der Bandinhalt
bei Termination.
Definition 13 Eine Funktion f : Σ∗ → Σ∗ ist Turingberechenbar genau
dann wenn es eine Turingmaschine gibt, die bei Eingabe w ∈ Σ∗ mit Ausgabe
f (w) terminiert, falls f (w) 6= ⊥, und nicht terminiert, falls f (w) = ⊥
Beispiel eines binären Inkrementierers Sei Σ = {0, 1, 2}. Die niederwertigste Stelle der zu inkrementierenden Zahl sei ganz links. Beispiele:
• 101 → 011
1
Quelle: http://upload.wikimedia.org/wikipedia/commons/0/07/Turingmaschine.png
2 BERECHENBARKEIT
10
• 01 → 11
Programm δ:
(q0 , 0) → (e, 1, R/L)
(q0 , 1) → (q0 , 0, R)
(q0 , 2) → (e, 1, R/L)
1/0,R
q0
/1,R
0/1,R
e
Abbildung 2: Diagramm der Beispielturingmaschine
Terminologie: Ein Tripel (linke Bandhälfte, Zustand, rechte Bandhälfte)
nennt man eine Konfiguration einer Turingmaschine.
Beispielablauf:
(², q0 , 01) → (1, e, 1)
(², q0 , 11) → (0, q0 , 1) → (00, q0 , 2) → (001, e, 2)
Church’sche These Church und Turing formulierten 1936–1937 die folgende These, die als Church’sche oder Church-Turing These bezeichnet wird:
Die Turingberechenbaren Funktionen sind genau die im intuitiven
Sinne berechenbaren Funktionen.
Diese ist nicht beweisbar, da der intuitive Berechenbarkeitsbegriff nicht formal ist. Für einen fixen Berechenbarkeitsbegriff hingegen ist die Äquivalenz
beweisbar, z.B., dass die Klasse der Turingberechenbaren und Java-berechenbaren Funktionen identisch ist. Unterschiede zwischen verschiedenen Berechenbarkeitsbegriffen liegen in der Effizienz der Ausführung und der Effizienz
in der Programmierung.
2.5
Registermaschinen
Eine Registermaschine hat endlich viele Register R0 , R1 , ..., wobei jedes Register eine natürliche Zahl enthält. Ein Programm ist eine endliche Folge von
Instruktionen. Mögliche Instruktionen:
2 BERECHENBARKEIT
INC Ri
DEC Ri
GOTO n
IF Ri = 0 GOTO n
HALT
11
Erhöhe Ri um 1
Erniedrige Ri um 1 falls Ri > 0
fahre mit Instruktion n fort
fahre mit Instruktion n fort, falls Ri = 0,
ansonsten mit der nächsten
Programmausführung hält an
Beispielprogramme
Ri := 0
IF Ri = 0 GOTO 4
DEC Ri
GOTO 1
Ri := k
Ri := 0
INC Ri (k mal)
Ri := Rj
(Rj := 0)
Ri := 0
IF Rj = 0 GOTO 6
INC Ri
DEC Rj
GOTO 2
Ri := Rj + Rk Ri := Rj
(Rj , Rk := 0) IF Rk = 0 GOTO 6
INC Ri
DEC Rk
GOTO 2
Auf ähnliche Weise lassen sich ∗, DIV und M OD umsetzen.
Definition 14 Eine Funktion f : N → N ist registermaschinenberechenbar
genau dann, wenn es ein Registermaschinenprogramm gibt, das, wenn zu
Beginn R0 = m und R1 = R2 = . . . = 0 ist, mit R0 = f (m) terminiert, falls
f (m) 6= ⊥ und nicht terminiert, falls f (m) = ⊥.
Theorem 7 Jede Turingberechenbare Funktion ist registermaschinenberechenbar und umgekehrt.
Beweis
(a) Repräsentiere R0 , . . . , Rn auf dem Band in unärer Notation (Abb. 3).
(b) Repräsentiere den “Programmzähler” durch Zustände q1 , . . . , qk wobei
k die Länge des Registermaschinenprogramms ist.
2 BERECHENBARKEIT
12
# I I I I ... I #
m mal falls R0 = m
R1
...
Abbildung 3: Die Register einer Registermaschine auf einem Turingband
(c) Simuliere INC und DEC durch Turingmaschinenprogramme
(d) Gesamtprogramm: Starte immer mit Kopf ganz links. Falls der Zustand
qj (1 ≤ j ≤ k) ist und die Registermaschineninstruktion das Register
Ri manipuliert, bewege den Kopf zur Kodierung von Ri und führe Instruktion j aus. Zuletzt bewege den Kopf ganz nach links und beginne
den nächsten Zyklus.
2.6
Textersetzungssysteme
Programme sind endliche Mengen von Regeln der Form w1 → w2 mit w1 , w2 ∈
Σ∗ . Jedes solches Ersetzungssystem R definiert eine Reduktionsrelation →R
auf Σ∗ wie folgt:
w →R w0 ⇔ ∃(l → r) ∈ R, u, v ∈ Σ∗ . ulv = w ∧ urv = w0
Wir sagen w reduziert auf w0 . Für R = {ab → ba} gilt beispielsweise
aabb →R abab →R baab →R baba →R bbaa
Notation Falls x0 →R x1 →R . . . →R xn , dann schreibt man x0 →∗R xn .
Gibt es kein y mit x →R y, so ist y in Normalform (bezüglich →R ).
Die Programmausführung besteht darin, die Eingabe so lange zu reduzieren, bis eine Normalform erreicht ist. Um eine Funktion zu berechnen, muss
man →R einschränken. Beispielsweise, indem immer so weit links wie möglich
und mit der ersten möglichen Regel in R reduziert wird (wenn man R als
Liste betrachtet).
Beispiel (Test auf Palindrom) Idee: Wir reduzieren das Wort um jeweils
gleiche Start- und Endzeichen, z.B.: 2010102 →∗ 21012 →∗ 202 →∗ 1.
Ziel soll folgendes Verhalten sein:
(
1
falls w Palindrom
2w2 →∗
6= 1 sonst
2 BERECHENBARKEIT
13
Unser Alphabet besteht aus 0, 1, der Start- und Endmarkierung 2 und den
beiden Hilfszeichen R0 und R1 :
Σ = {0, 1, 2, R0 , R1 }
Die Regelmenge R lautet dann wie folgt:
Basisfälle:
22 → 1
202 → 1
212 → 1
Suche starten:
200
201
210
211
→
→
→
→
Suchen:
Löschen:
2R0 0
2R0 1
2R1 0
2R1 1
R0 00
R0 01
R0 10
R0 11
→
→
→
→
0R0 0
0R0 1
1R0 0
1R0 1
R1 00
R1 01
R1 10
R1 11
→
→
→
→
0R1 0
0R1 1
1R1 0
1R1 1
R0 02 → 2
R1 12 → 2
Zwei beispielhafte Ausführungen:
2012 →R 2R0 12
21012 →R 2R1 012 →R 20R1 12 →R 202 →R 1
Lemma 5 Jede Turingmaschine kann durch ein Textersetzungssystem simuliert werden.
Beweis ObdA nehme wir an dass Σ ∩ Q = ∅. Kodiere die TuringmaschinenKonfiguration (u, q, v) eindeutig als Wort uqv, mit u, v ∈ Σ∗ , q ∈ Q. Für jede
Transition δ(q, a) = (q 0 , a0 , d) füge die folgenden Regeln zu R hinzu:
2 BERECHENBARKEIT
14
(a) d = R: qa → a0 q 0
q2 → a0 q 0 2
falls a 6= 2
falls a = 2
(b) d = L: bqa → q 0 ba0
q2 → q 0 2a0
für alle b ∈ Σ \ {2} falls a 6= 2
falls a = 2
Lemma 6 Jedes Textersetzungssystem kann durch eine Turingmaschine simuliert werden. (ohne Beweis, da dieser recht langwierig ist)
Theorem 8 (Matiyasevich 1996) Für Textersetzungssysteme mit 3 oder
mehr Regeln ist Termination im Allgemeinen unentscheidbar.
Es ist noch offen, ob die Termination bei Textersetzungssystemen mit einer
oder zwei Regeln entscheidbar ist.
2.7
Termersetzungssysteme
Termersetzungssysteme liefern Regeln zur Berechnung auf strukturierten Termen, wie etwa plus(s(0), s(0)).
Sei Σ eine Menge von Funktionssymbolen (wir nennen Σ dann eine Signatur ). Jedes f ∈ Σ hat eine Stelligkeit nf ∈ N.
Definition 15 Die Menge T (Σ) der Terme über Σ ist induktiv definiert:
Falls f ∈ Σ und t1 , . . . , tnf ∈ T (Σ), dann auch f (t1 , . . . , tnf ) ∈ T (Σ).
Notation Wir schreiben bei nullstelligen Funktionssymbolen c statt c().
Beispiel Es sei Σ = {0, s, +} mit n0 = 0, ns = 1, n+ = 2. Dann ist
T (Σ) = {0, s(0), +(0, 0), +(0, s(0)), . . .}.
Fakt 6 T (Σ) ist abzählbar unendlich, falls Σ endlich ist, weil Terme als
Wörter über dem Alphabet Σ erweitert mit “(”, “)” und “,” darstellbar sind.
Im Gegensatz zu dieser linearen Auffassung wählen wir jedoch als geeignetere Repräsentation der Struktur von Termen die Darstellung in Form von
Bäumen, beispielsweise:
+
+
s
0
0
0
0
s
0
Symbolische Informationen sind meist als Terme beziehungsweise Bäume
darstellbar. Zwei typische Beispiele:
2 BERECHENBARKEIT
15
(a) Logische Formeln: 0 < x ⇒ 0 < x + x in Baumdarstellung:
⇒
<
<
0 x 0
+
x
x
(b) Programme: while (x < 0) {x = x - 1} in Baumdarstellung:
while
<
x
=
0 x
x
1
Es gibt auch spezielle Dateiformate zur Darstellung von Bäumen in ASCII,
wie beispielweise XML.
Sei V eine Menge nullstelliger Symbole, genannt Variablen, die disjunkt
von Σ ist. Als Konvention gilt meistens: x, y, z ∈ V . Für t ∈ T (Σ ∪ V ) sei
V ar(t) die Menge der Variablen in t. Eine Termersetzungsregel ist ein Paar
l → r mit l, r ∈ T (Σ ∪ V ) und V ar(l) ⊇ V ar(r). Ein Termersetzungssystem
(kurz TRS für “Term Rewriting System”) ist eine (endliche) Menge von
Termersetzungsregeln.
Beispiel (Addition) Das folgende System addiert Zahlen in unärer Darstellung, d.h. von der Form s(s(...(0))):
R = {+(0, y) → y, +(s(x), y) → +(s(x, y))}
m
n
m+n
Dann gilt: +(sm (0), sn (0)) →m
(0).
R s (+(0, s (0)) →R s
Eine Substitution ist eine Abbildung von Variablen auf Terme.
Definition 16 s →R t gilt genau dann wenn s einen Teilterm u hat (s =
C[u] wobei C ein Kontext, d. h. Term mit Loch ist), es eine Regel (l → r) ∈ R
und eine Substitution σ gibt, so dasss σ(l) = u und t = C[σ(r)].
2 BERECHENBARKEIT
16
Beispielsweise gilt s(+(0, s(0))) →R s(s(0)) mit s = s(+(0, s(0))), l = +(0, x),
r = x, σ = {x 7→ s(0)}, C = s(2) und t = s(s(0)).
Ein weiteres Beispiel für Termersetzung ist die Multiplikation:
∗(s(x), y) → +(∗(x, y), y),
∗(0, y) → 0
Analog zu früheren Definition kann man auch die TRS-Berechenbarkeit
von Funktionen auf Termen definieren und dann beweisen:
Theorem 9 Eine Funktion ist Turingberechenbar genau dann, wenn sie TRSberechenbar ist.
Theorem 10 Jede Turingmaschine kann durch eine Termersetzungsregel simuliert werden.
Korollar 4 Das Halteproblem ist schon für Termersetzungssysteme mit einer Regel unentscheidbar.
Fazit: Berechenbarkeit braucht
(a) unbeschränkten Speicher
(b) Fallunterscheidung
(c) Iteration oder Rekursion
2.8
Hilberts 10. Problem
Eine diophantische Gleichung ist von der Form p(x1 , . . . , xn ) = 0, wobei p
ein Polynom in den Variablen x1 , . . . , xn mit Koeffizienten in Z ist.
Beispiel
3x2 y 2 z + 7xz − 9z 3 u + 49 = 0
2 BERECHENBARKEIT
17
Hilberts 10. Problem (David Hilbert 1901): Entwickle eine Methode,
um in endlich vielen Schritten festzustellen, ob ein diophantische Gleichung
eine Lösung in Z hat.
Theorem 11 (Matiyasevich, 1970) Die Lösbarkeit von diophantischen Gleichungen in Z ist unentscheidbar.
Lemma 7 Ob ein System diophantischer Gleichungen eine Lösung in N hat
(1), ist reduzierbar auf das Problem, ob eine diophantische Gleichung eine
Lösung in Z hat. (2)
Wir zeigen die Unlösbarkeit von (1). Damit ist auch (2) unlösbar. Wir zeigen
die Unlösbarkeit von (1), indem wir das Halteproblem von Registermaschinen
auf (1) reduzieren.
Gegeben sei ein Registermaschinenprogramm mit der Instruktionssequenz
A1 , . . . , Am und den Registern R1 , . . . , Rk . Wir konstruieren ein System erweiterter diophantischer Gleichungen, so dass das Programm gestartet mit
R1 = . . . = Rk = 0 genau dann terminiert, wenn das System eine Lösung in
N hat.
Die Grundidee ist, dass eine Nullstelle die Folge der Inhalte der Register im Laufe einer terminierenden Berechnung kodiert. Die Gleichungen beschreiben das Verhalten der Registermaschine.
Eine endliche Folge von ZahP
len (n0 , . . . , ns ) wird kodiert als si=0 ni B i . Damit die Kodierung injektiv ist,
muss gelten, dass B > ni für alle i.
Ohne Einschränkung dürfen wir für das Programm annehmen:
• Alle Sprungziele liegen zwischen 1 und m.
• Am = HALT und Ai 6= HALT für i < m.
• Wenn das Programm terminiert, sind alle Ri = 0.
• DEC Ri kommt nur zur Ausführung, wenn Ri > 0
Jedes Programm kann (in berechenbarer Weise) in ein Programm transformiert werden, das diese Annahmen erfüllt.
Die wichtigsten Variablen:
• B
Basis
• S
Anzahl der Schritte bis Termination
• Wj (j = 1, . . . , k) Die Kodierung der Folge der Inhalte von Rj zu den
Zeitpunkten 0, . . . , S
2 BERECHENBARKEIT
18
• Ni (i = 1, . . . , m) Die Kodierung der Sequenz (a0 , . . . , aS ) mit al ∈
{0, 1} und al = 1 genau dann wenn die Instruktion Ai zum Zeitpunkt
l ausgeführt wird.
Beispiel: Sei B = 10 und S = 5 und R1 durchläuft die Werte 0, 1, 2, 1, 1, 0.
Dann gilt W1 = 011210. Instruktion A1 wird in Schritt 0 und 3 ausgeführt.
Dann gilt N1 kodiert 1, 0, 0, 1, 0, 0, das heißt N1 = 1001.
Die Gleichungen: Zusätzlich zu +, ·, = erlauben wir:
(a) Exponentation: ab
(b) Dominanz: a E b genau dann wenn alle Bits in der Binärdarstellung
von a ≤ die korrespondierenden Bits in der Binärdarstellung von b sind.
Wir beweisen hier nicht:
(a) E ist definierbar durch diophantische Gleichungen mit Exponentation
(siehe z.B. Schöning).
(b) Lösbarkeit von diophantischen Gleichungen mit Exponentation ist reduzierbar auf Lösbarkeit von diophantischen Gleichungen (Matiyasevich 1970).
Wir erlauben auch a > b. Dies kürzt ab (∃n.)a = b + n + 1.
Gleichungen für B:
• B > 2S
• B = 2c
• B>m
• B>k
Randbedingungen für Wj und Ni :
• Ni besteht nur aus 0 und 1. Dies kann man informell beschreiben
durch P
“Ni E 111 . . . 1(S-mal)”. Die rechte Seite kann man zwar als
S
i
T =
i=0 B definieren, aber dies liegt ausserhalb unserer Sprache
von Gleichungen. Folgende Beschreibung ist äquivalent und in unserer
Sprache erlaubt: Ni E T und 1 + (B − 1)T = B S+1 .
• In jedem Schritt wird genau eine Instruktion ausgeführt: N1 + . . . +
Nm = T
2 BERECHENBARKEIT
19
• Startbedingung für Ni : 1 E N1
• Endbedingung für Ni : B S E Nm
• Startbedingung für Wj : Wj E B S+1 −B. Die Zahl B S+1 −B sieht zur BaP
sis B so aus: “(B −1)(B −1) . . . (B −1)0”. (Beweis: Si=1 (B − 1) · B i =
PS
P
P
PS
i+1
i
i−1
i
S+1
− B i = S+1
= S+1
−B)
i=1 B
i=2 B − B
i=2 B −
i=1 Bi = B
S+1
Das heisst, Wj E B
− B sagt lediglich, dass der Anfangswert 0 ist.
Gleichungen für Instruktionen:
• Ai = GOTO j: B · Ni E Nj . Damit kodiert man, dass wenn Ni zum
Zeitpunkt k 1 ist, dann Nj zum Zeitpunkt k + 1 auch 1 ist.
• Ai = INC/DEC Rj : Der Sprung zur Folgeinstruktion ist wie bei GOTO
kodiert: B · Ni E Ni+1 . Zusätzlich wir der Effekt aller Instruktionen
INC/DEC Rj wie folgt beschrieben:
X
X
Wj = B(Wj +
Ni −
Ni )
I∈I
i∈D
wobei I = {1 ≤ i ≤ m | Ai = INC Rj } und D = {1 ≤ i ≤ m | Ai =
DEC Rj }. Das folgende Beispiel macht diese Bedingung plausibel:
WjP=
0122110
+ Pi∈I Ni 0000101
− i∈D Ni 0110000
0012211
• Ai = IF Rj = 0 GOTO l:
B · Ni E Ni+1 + Nl
B · Ni E Ni+1 + B · T − 2 · Wj
Theorem 12 1 Das Halteproblem für Registermaschinen ist reduzierbar auf
die Lösbarkeit eines Systems diophantischer Gleichungen mit E und Exponentation.
Beweis: Registermaschinen-Programm hält genau dann wenn daraus erzeugtes Gleichungssystem eine Lösung in N hat.
Theorem 13 Das Halteproblem für Registermaschinen ist reduzierbar auf
die Lösung einer diophantischen Gleichung.
Korollar 5 Die Lösbarkeit einer diophantischen Gleichung ist unentscheidbar.
2 BERECHENBARKEIT
20
Theorem 14 Jedes Polynom hat eine Nullstelle in C.
Theorem 15 (Sturm) Es ist entscheidbar, ob ein Polynom eine reelle Nullstelle hat.
Theorem 16 (Tarski) Es ist entscheidbar, ob eine Formel über 0, 1, +, −,
·, =, <, ∧, ∨, ¬, ∃, ∀ in R wahr ist.
2.9
Nichtdeterminismus
Eine nichtdeterministische Turingmaschine ist definiert wie eine deterministische Turingmaschine aber mit δ : Q × Σ → 2Q×Σ×{L,R} .
In jedem Schritt wird nichtdeterministisch ein Element von δ(q, a) ausgewählt. Im Allgemeinen bilden die möglichen Berechnungsfolgen einer nichtdeterministischen Maschine einen Baum, in dem jeder Pfad eine Berechnungsfolge darstellt.
Abbildung 4: Berechnungsbaum
Eine nichtdeterministische Turingmaschine verfügt zusätzlich über eine
Menge von Endzuständen: F ⊆ Q. Ein Wort w ∈ Σ∗ wird von einer nichtdeterministischen Turingmaschine M akzeptiert, genau dann wenn es bei
Eingabe w eine Berechnung gibt, die in einen Zustand in F führt.
Beispiel Eingabe sei eine logische Formel F (x1 , . . . , xn ) über ∧, ∨, ¬ und
x1 , . . . , xn . Es soll entschieden werden, ob F erfüllbar ist, d.h. ob es v1 , . . . , vn ∈
{0, 1} gibt mit F (v1 , . . . , vn ) = 1. Folgendes nichtdeterministische Programm
leistet dies:
for i := 1 to n do { setze vi auf 0 oder 1}
if F (v1 , ..., vn ) = 1 then Ja“ (gehe in einen Endzustand)
”
else Nein“ (gehe nicht in einen Endzustand)
”
F ist erfüllbar, genau dann wenn F von obigem Programm akzeptiert wird.
Wir nennen dies Programm im Folgenden E und betrachten es als eine nichtdeterministische Turingmaschine.
3 KOMPLEXITÄT
21
Theorem 17 Eine Sprache wird von einer nichtdeterministischen Turingmaschine akzeptiert, genau dann wenn sie von einer deterministischen Turingmaschine akzeptiert wird.
Beweis
• ⇐ klar, da eine deterministische Turingmaschine ein Spezialfall von
einer nichtdeterministischen Turingmaschine ist.
• ⇒ Die deterministische Turingmaschine simuliert die nichtdeterministische Turingmaschine, in dem sie den Berechnungsbaum der nichtdeterministischen Turingmaschine mit Breitensuche durchsucht.
Hat jeder Knoten im Berechnungsbaum der nichtdeterministische Turingmaschine 2 Nachfolger und der Pfad zum Endzustand hat die Länge n, dann
berechnet Breitensuche ≈ 2n Knoten.
Theorem 18 Ein vollständiger Binärbaum der Höhe n hat 2n+1 −1 Knoten.
3
Komplexität
Komplexität wird gemessen als Funktion der Größe der Eingabe, dabei wird
n implizit als die Größe der Eingabe interpretiert.
3.1
Komplexitätsmaße
Notation O(f (n)) = {g | ∃c > 0.∃n0 .∀n ≥ n0 . g(n) ≤ c ∗ f (n)}.
O(f (n)) ist die Menge der Funktionen, die asymptotisch höchstens so stark
wie f wachsen.
Terminologie
• O(1) konstant
• O(n) linear
• O(n2 ) quadratisch
• O(nk ) polynomiell
• O(2n ) exponentiell
3 KOMPLEXITÄT
22
Definition 17 Sei M eine möglicherweise nichtdeterministische Turingmaschine. Dann ist L(M ) = die Menge der von M akzeptierten Wörter.
So ist beispielsweise L(E) (s.o.) die Menge der erfüllbaren Formeln.
Definition 18 TIME(f (n)) ist die Menge der Sprachen, die von einer deterministischen Turingmaschine in der Zeit f (n) akzeptiert werden:
TIME(f (n)) = {A | ∃ TM M. L(M ) = A ∧ ∀w ∈ Σ∗ . timeM (w) ≤ f (|w|)}
Dabei ist timeM (w) die Anzahl der Schritte von M bei Eingabe w (nur
definiert falls M terminiert!)
Beispielsweise gilt: Menge aller Palindrome ∈ TIME(c ∗ n2 ) für ein geeignetes
c.
Definition 19 NTIME(f (n)) ist die Menge der Sprachen, die von einer
nichtdeterministischen Turingmaschine in der Zeit f (n) akzeptiert werden:
NTIME(f (n)) =
{A | ∃ ND TM M. L(M ) = A ∧ ∀w ∈ Σ∗ . ntimeM (m) ≤ f (|w|)}

Minimale Anzahl von Schritten einer falls w ∈ L(M )
ntimeM (w) = akz. Berechnung für Eingabe w

0
sonst
Definition 20 SAT ist die Menge der erfüllbaren logischen Formeln über
∧, ∨, ¬.
Aus Programm E ergibt sich, dass SAT ∈ NTIME(d ∗ n) (für ein geeignetes
d).
3.2
Die Komplexitätsklassen P und NP
S
• P =
TIME(p(n))
p(n) Polynom
• NP =
S
NTIME(p(n))
p(n) Polynom
P gilt als effizient berechenbar“.
”
Fakt 7 SAT ∈ NP
Große offene Frage: Ist SAT ∈ P ?
3 KOMPLEXITÄT
23
Definition 21 Eine Menge A ⊆ Σ∗ ist polynomiell reduzierbar auf B ⊆ Γ∗
genau dann, wenn es eine totale in polynomieller Zeit berechenbare Funktion
f : Σ∗ → Γ∗ gibt mit w ∈ A ⇔ f (w) ∈ B. Dann schreiben wir A ≤p B.
Definition 22 Eine Sprache A ist NP-hart genau dann, wenn für alle L ∈
NP gilt L ≤p A.
Definition 23 Eine Sprache A ist NP-vollständig genau dann, wenn A NP hart ist und A ∈ NP.
Theorem 19 SAT ist NP-vollständig.
Beweis Es ist SAT ∈ N P , daher bleibt noch zu zeigen: SAT ist NP -hart.
Sei L ∈ N P . Wir zeigen L ≤p SAT. Da L ∈ NP gibt es eine nichtdeterministische Turingmaschine M und ein Polynom p(n) so dass es für alle w ∈ L
eine akzeptierende Berechnung von M mit Eingabe w der Länge ≤ p(|w|)
gibt. Gegeben die Eingabe w = x0 . . . xn ∈ Σ∗ ⊇ L konstruieren wir in polynomieller Zeit eine Formel F mit w ∈ L ⇔ F ∈ SAT. Die Turingmaschine
habe die Komponenten Q = {q1 , . . . , qk } und Σ = {a1 , . . . , ak } und δ.
Boolesche Variablen:
zt,q (t = 0, . . . , p(n), q ∈ Q)
post,i (t = 0, . . . , p(n), i = −p(n), . . . , p(n))
bandt,i,a (t = 0, . . . , p(n), i = −p(n), . . . , p(n), a ∈ Σ)
Intention:
zt,q = 1 ⇔ nach t Schritten ist M im Zustand q.
post,i = 1 ⇔ nach t Schritten zeigt Kopf auf Feld i.
bandt,i,a = 1 ⇔ nach t Schritten ist Feld i mit a beschriftet.
Formel: F = R ∧ A ∧ U1 ∧ U2 ∧ E.
Hilfskonstruktion: G(v1 , . . . , vr ) = 1 ⇔ es gibt genau ein vi mit vi = 1.
Randbedingung: Nur ein Zustand, Bandinhalt, Position zu jedem Zeitpunkt:
Ã
!
p(n)
^ G(zt,q1 , . . . , zt,qk ) ∧ G(post,−p(n) , . . . , post,p(n) ) ∧
Vp(n)
R=
i=−p(n) G(bandt,i,a1 , . . . , bandt,i,al )
t=0
3 KOMPLEXITÄT
24
Anfangsbedingung:
A = z0,q0 ∧ pos0,1 ∧
n
V
p(n)
V
band0,j,xj ∧
j=1
band0,j,2 ∧
j=n+t
−p(n)
V
band0,j,2
j=0
Übergangsbedingung:
Ã
U1 =
^
t,q,i,a
zt,q ∧ posW
t,i ∧ bandt,i,a
⇒
(zt+1,q0 ∧ post+1,i+d(m) ∧ bandt+1,i,a0 )
!
(q 0 ,a0 ,m)∈δ(q,a)
Um zu vermeiden, dass M zu früh hält, erlauben wir Stotterschritte: Erweitere δ auf Q × Σ → 2Q×Σ×{L,R,N } und füge, für alle q ∈ Q, a ∈ Σ, (q, a, N ) zu
δ(q, a) hinzu. Dadurch wird L(M ) und NTIMEM nicht verändert. Definiere
d(L) = −1, d(R) = 1, d(N ) = 0.
^
U2 =
((¬post,i ∧ bandt,i,a ) ⇒ bandt+1,i,a )
t,i,a
Endbedinung:
E=
_
Zp(n),q
q∈FM
Es sollte nun gelten: Jede erfüllende Belegung der Formel F beschreibt
eine mögliche akzeptierende Berechnungsfolge von M mit Eingabe w und
jede akzeptierende Berechung der Länge ≤ p(n) korrespondiert zu einer
erfüllenden Belegung. Kurz: w ∈ L(M ) ⇔ F ∈ SAT.
Viele kombinatorische Probleme sind NP -vollständig. Beispiele sind:
• Travelling Salesman
• Rucksack-Problem: Gegeben a1 , . . . , an ∈ N und Kapazität m ∈ N, gibt
es {i1 , . . . , ik } ⊆ {1, . . . , n} mit ai1 + . . . + aik = m?
Definition 24 (Moderne Definition von NP) Es gilt A ∈ NP genau
dann, wenn es eine Zertifikatmenge Z ∗ und eine deterministische Turingmaschine M gibt, so dass
(a) w ∈ A ⇔ ∃u ∈ Z ∗ : (w, u) wird von M akzeptiert, und
(b) die Laufzeit von M mit Eingabe (w, u) ist polynomiell in |w|.
4 PROLOG - PROGRAMMIEREN IN LOGIK
4
4.1
25
Prolog - Programmieren in Logik
Einführung und Beispiele
Ein Prolog-Programm besteht aus einer Datenbank mit Fakten und Schlussregeln.
Beispiel (Verwandtschaftsbeziehungen)
Fakten:
vater(peter, hans).
vater(peter, klaus).
vater(peter, anne).
vater(herti, aldi).
mutter(anna, anne).
mutter(anna, hans).
mutter(anna, aldi).
mutter(berta, klaus).
Schlussregeln:
paar(M, V ) ← mutter(M, K) ∧ vater(V, K)
Systemdialog:
Anfrage: paar(anna, peter)
Antwort: Ja
paar(peter, klaus)
Nein
paar(anna, M )
M = peter ∨
M = herti
Beispielsuche:
Ziel: paar(anna, M ) ←
mutter(anna, K) ∧ vater(M, K) ←
1. K = anne ∧
vater(M , anne) ←
1. M = peter
keine Alternative - Backtracking
2. K = hans ∧
vater(M , hans) ←
1. M = peter
keine Alternative - Backtracking
3. K = aldi ∧
vater(M , aldi) ←
1. M = herti
keine Alternative - Backtracking
keine Alternative - Backtracking
(Restziel)
(Lösung)
(Lösung)
4 PROLOG - PROGRAMMIEREN IN LOGIK
26
Weitere mögliche Regeln:
elter(E, K) ← vater(E, K) ∨ mutter(E, K)
grossmutter(G, K) ← mutter(G, E) ∧ elter(E, K)
wobei sich erstere auch ohne ∨ durch zwei Regeln ausdrücken lässt:
elter(E, K) ← vater(E, K)
elter(E, K) ← mutter(E, K)
Beispiel (Arithmetik)
Statt x + y = z schreibe add(x, y, z).
Definition von Addition auf 0 und s:
add(0, N, N )
add(s(M ), N, s(Z)) ← add(M, N, Z)
Dabei sind 0 und s Funktionszeichen und add Prädikats- oder Relationszeichen.
Allgemein kann man eine funktionale Beschreibung, z.B. ein Termersetzungssystem, wie folgt in eine relationale, Prolog-artige Darstelung übersetzen: Ersetze n-stellige Funktionszeichen (der definierten Funktionen) durch
n + 1-stellige Relationszeichen. Klopfe geschachtelte Terme flach durch Einführung neuer Variablen.
Analog kann man Multiplikation definieren:
mult(0, N, 0)
mult(s(M ), N, P ) ← mult(M, N, Z) ∧ add(N, Z, P )
Eine Beispielanfrage:
add(s(s(0)), X, Y ) ←
1. M = s(0) ∧ N = X ∧ Y = s(Z)
add(s(0), X, Z)
1. M 0 = 0 ∧ N 0 = X ∧ Z = s(Z 0 )
add(0, X, Z 0 )
1. X = Z 0
Das heißt, die (einzige) Antwort zur Anfrage add(s(s(0)), X, Y ) ist X =
Z 0 ∧ Y = s(s(Z 0 ))), oder einfach Y = s(s(X)). Vergleichen Sie dies mit der
Auswertung der Anfragen add(X, 0, Y ) und add(X, X, X)!
Fakt 8 Es ist im Allgemeinen nicht entscheidbar, ob eine Prolog-Anfrage
eine Lösung hat, denn die Lösbarkeit einer diophantischen Gleichung kann
mit Hilfe von add und mult als Prolog-Anfrage kodiert werden.
4 PROLOG - PROGRAMMIEREN IN LOGIK
4.2
27
Syntax und Semantik von reinem Prolog
Ein Prolog-Programm ist eine Menge von Horn-Klauseln A ← A1 ∧ . . . ∧ An ,
wobei A der Kopf und A1 ∧ . . . ∧ An der Körper ist. Dabei sind die Ai
und A von der Form p(t1 , . . . , tn ), wobei p ein Prädikatensymbol ist und
t1 , . . . , tn ∈ T (Σ ∪ V ).
Konkrete Syntax: :- statt ← und , statt ∧.
Variablen beginnen mit Großbuchstaben.
Die Semantik eines Programms P ist induktiv definiert als die Menge
der aus P herleitbaren Aussagen, d.h. die Menge der Aussagen, die sich mit
folgender Regel herleiten lassen:
σ(A1 )
. . . σ(An )
σ(A)
falls A ← A1 ∧ . . . ∧ An ∈ P
Die horizontale Linie ist eine Implikation und besagt: Falls σ(A1 ), . . . , σ(An )
herleitbar sind, so ist auch σ(A) herleitbar.
Um die Abhängigkeit von P zu betonen schreibt man P ` A, sprich: Aus
”
P ist A herleitbar“.
Beispiel
add(0, 0, 0)
mult(0, s(0), 0) add(s(0), 0, s(0)
mult(s(0), s(0), s(0))
4.3
Unifikation I
Eine Substitution σ = {X1 7→ t1 , . . . , Xn 7→ tn } ist eine Abbildung von
Variablen auf Terme mit σ(Xi ) = ti und σ(Y ) = Y für Y ∈
/ {X1 , . . . , Xn }.
Substitutionen werden kanonisch auf Terme erweitert:
σ(f (u1 , . . . , uk )) = f (σ(u1 ), . . . , σ(uk ))
Damit sind Substitutionen Funktionen von Termen nach Termen und damit
komponierbar:
(σ2 ◦ σ1 )(t) = σ2 (σ1 (t))
Achtung: Nicht jede Funktion von Termen nach Termen ist eine Substitution!
?
Ein Unifikator von s = t (manchmal s = t) ist eine Substitution σ mit
σ(s) = σ(t).
4 PROLOG - PROGRAMMIEREN IN LOGIK
28
Beispiele
• X = a hat genau einen Unifikator {X 7→ a}.
• X = g(Y ) hat folgende Unifikatoren: {X 7→ g(Y )}, {X 7→ g(a), Y 7→
a}, {X 7→ g(Z), Y 7→ Z}, ...
Dabei ist {X 7→ g(Y )} der allgemeinste Unifikator (mgu).
• f (X) = g(Y ) hat keinen Unifikator.
• X = g(X) hat keinen Unifikator.
Theorem 20 Hat s = t einen Unifikator, dann hat s = t auch einen allgemeinen Unifikator.
4.4
Ein Prolog Interpreter
Idee: Berechnung aller Lösungen durch Transformation von Listen von Zielen:
[A] → [A1 , . . . , An ] → . . . → []
Definition 25 Sei P ein Prolog-Programm. Die mit Substitutionen beschrifσ
tete Relation →P auf Listen von Aussagen ist wie folgt definiert:
σ
[B1 , . . . , Bm ] →P σ[A1 , . . . , An , B2 , . . . , Bm ]
falls m ≥ 1, A ← A1 ∧ . . . ∧ An ist die Umbenennung einer Klausel aus P
mit neuen Variablen, und σ ist mgu von A = B1 .
Beispiel
σ
σ
1
2
[add(s(0), M, N )] −→
→
P [add(0, M, Z0 )] −
P []
wobei σ1 := {X 7→ 0, Y0 7→ M, N 7→ s(Z0 )} und σ2 := {Y1 7→ M, Z0 7→ M }.
Die Lösung σ2 ◦ σ1 ist korrekt bezüglich der Semantik da
P ` (σ2 ◦ σ1 )(add(s(0), M, N ))
{z
}
|
add(s(0),M,s(M ))
σ
Beachte: Die Relation →P spannt einen Berechnungsbaum auf:
[A]
[B] [] ...
[]
Jeder Pfad, der mit [] endet, ist eine Lösung im Sinne der Semantik, d.h.
der Interpreter ist korrekt bzgl. der Semantik:
4 PROLOG - PROGRAMMIEREN IN LOGIK
σ
29
σ
n
Lemma 8 (Korrektheit) Falls [A] →1 P . . . →
P [], so P ` σn (. . . σ1 (A) . . .).
Theorem 21 (Vollständigkeit) Falls P ` σ(A), dann gibt es eine Folge
σ
σn
[A] →1 P . . . →
P [] und eine Substitution δ mit δ(σn (. . . σ1 (A) . . .)) = σ(A).
4.5
Unifikation II
Definition 26 Eine Substition σ ist allgmeiner als σ 0 (Notation: σ 0 & σ)
genau dann wenn es eine Substitution δ gibt mit σ 0 := δ ◦ σ.
Die Notation σ 0 ∼ σ bedeutet σ 0 & σ und σ 0 . σ.
Beispiel
• Sei σ = {x 7→ f (y)} und σ 0 = {x 7→ f (a), y 7→ a}.
Dann gilt: σ . σ 0 weil σ 0 = {y 7→ a} ◦ σ.
Aber es gilt nicht σ . {x 7→ f (a)}.
• Es gilt {x 7→ y} . {y 7→ x} . {x 7→ y} denn {y 7→ x} = {y 7→
x} ◦ {x 7→ y}.
Daher ist . nur transitiv und reflexiv, aber nicht antisymetrisch. D.h. . ist
eine Quasiordnung.
Lemma 9 σ ∼ σ 0 genau dann, wenn es eine Umbenennung δ gibt (d.h. δ
bildet Variable auf Variable ab und ist injektiv) mit σ = δ ◦ σ 0 .
Definition 27 Ein Unifikationsproblem ist eine Menge zu lösender Gleichungen S = {s1 = t1 , . . . , sn = tn }. Ein Unifikator ist eine Substitution
σ mit σ(si ) = σ(ti ), i = 1 . . . n. U (S) ist die Menge aller Unifikatoren von s.
Eine Substitution σ ist allgemeinster Unifikator (mgu2 ) von S genau dann
wenn σ ∈ U (S) und für alle σ 0 ∈ U (S) gilt σ . σ 0 .
Beispiel S = {x = y} hat mgu σ = {x 7→ y}: σ ∈ U (S) ist klar; σ ist mgu,
denn für σ 0 ∈ U (S) gilt σ . σ 0 , denn σ 0 = σ 0 ◦σ denn σ 0 (σ(x)) = σ 0 (y) = σ 0 (x)
und σ 0 (σ(z)) = σ 0 (z) für z 6= x. Natürlich ist auch {y 7→ x} mgu, aber nicht
{x 7→ z, y 7→ z}.
Definition 28 σ ist idempotent genau dann wenn σ ◦ σ = σ.
Lemma 10 σ ist idempotent genau dann wenn es kein x, y gibt mit σ(x) 6=
x, σ(y) 6= y, x ∈ V ar(σ(y)).
2
most generified unificator
4 PROLOG - PROGRAMMIEREN IN LOGIK
30
Beispielsweise sind weder {x 7→ a, y 7→ f (x)} noch {x 7→ f (x)} idempotent.
Definition 29 S = {x1 = t1 , . . . , xn = tn } ist gelöst genau dann, wenn
xi 6= xj für i 6= j und xi ∈
/ V ar(tj ).
→
−
Lemma 11 Ist S gelöst, so ist S := {x1 7→ t1 , . . . , sn = tn } ein idempotenter mgu von S.
Unifikation durch Transformation:
Delete: {t = t} ] S → S
Decompose: {f (s1 , . . . , sn ) = f (t1 , . . . , tn )} ] S → {s1 = t1 , . . . , sn = tn } ∪ S
Orient: {t = x} ] S → {x = t} ∪ S falls t ∈
/ V ar(S)
Eliminate: {x = t} ] S → {x = t} ∪ {x 7→ t}(S) falls x ∈ V ar(S) − V ar(t)
Beispiel
{x = f (a), g(x, x) = g(x, y)}
{x = f (a), x = x, x = y}
{x = f (a), x = y}
{x = f (a), f (a) = y}
{x = f (a), y = f (a)}
Decompose
→
→
Eliminate
→
Orient
→
Delete
Lemma 12 Wenn S → T dann U(S) = U(T).
Der Unifikationsalgorithmus:
Unify(S)
= { while ∃T. S → T do S := T ;
→
−
if S gelöst then return S else fail }
Korollar 6 (Korrektheit) Liefert Unify(S) eine Substitution σ, dann ist
σ ein idempotenter mgu von S.
Definition 30 Für zwei Relationen (A, >A ) und (B, >B ) ist das lexikographische Produkt (A × B) definiert durch:
(a, b) >A×B (a0 , b0 ) ⇔ a >A a0 ∨ (a = a0 ∧ b >B b0 ).
Lemma 13 Terminieren >A und >B , so terminiert auch >A×B
Termination von Unify kann mit folgendem Maß (n1 , n2 , n3 ) bewiesen
werden.
• n1 = Anzahl ungelöster Variablen (x ist in S ungelöst genau dann,
wenn x = t ∈ S, x ∈
/ V ar(t), x ∈
/ V ar(S − {x = t}))
4 PROLOG - PROGRAMMIEREN IN LOGIK
• n2 = Größe von S:
s.
P
s=t∈S
31
|s| + |t| wobei |s| = Anzahl der Knoten von
• n3 = Anzahl der Gleichungen t = x ∈ S mit t ∈
/ V ar.
Lemma 14 (n1 , n2 , n3 ) wird in jedem →-Schritt kleiner.
Beweis
Delete
Decompose
Orient
Eleminate
n1
≥
≥
≥
>
n2
>
>
=
n3
>
Lemma 15 Es gilt:
(a) U (x = t) = ∅ falls x ∈ V ar(t) und x 6= t.
(b) U (f (. . .) = g(. . .)) = ∅ falls f 6= g.
Lemma 16 Ist T in Normalform bezüglich → aber nicht gelöst, dann gilt
U (T ) = ∅.
Beweis Aus den Annahmen folgt, dass T eine der beiden Gleichungen aus
Lemma 15 enthalten muss. Daher ist U (T ) = ∅.
Korollar 7 (Vollständigkeit) Falls Unify(S) = fail, so gilt U (S) = ∅.
Korollar 8 Hat S eine Lösung, so hat S einen idempotenten mgu.
4.6
Fixpunkte und ihre Anwendung
Ein Fixpunkt einer Funktion f ist ein x mit f (x) = x. Eine Funktion auf
Mengen heißt monoton, falls A ⊆ B ⇒ f (A) ⊆ f (B). Ein Präfixpunkt einer
Funktion f auf Mengen ist ein A mit f (A) ⊆ A.
A
A
Theorem 22 (Knaster, Tarski) Sei
T f : 2 → 2 monoton. Dann hat f
einen kleinsten Fixpunkt lfp(f ) = {M ⊆ A | f (M ) ⊆ M }, der zugleich
auch kleinster Präfixpunkt von f ist.
Beweis Sei P := {M
T ⊆ A | f (M ) ⊆ M } die Menge der Präfixpunkte. Wir
zeigen zuerst, dass P ein Fixpunkt ist:
T
T
(a) Wir zeigen: f ( P ) ⊆ P .
T
T
Für alle M ∈ P giltT P ⊆ M undTdamit fT( P ) ⊆ f (M ) ⊆ M . Nach
der Definition von gilt somit f ( P ) ⊆ P .
4 PROLOG - PROGRAMMIEREN IN LOGIK
32
T
T
(b) Wir zeigen P ⊆ f ( P ):
T
T
T
T
f ( P ) ⊆ P ⇒ f (f ( P )) ⊆ f ( P )
T
T
T
⇒ f ( P ) ∈ P ⇒ P ⊆ f ( P ).
Für jeden Fixpunkt M gilt M ∈ P und daher
kleinste Fixpunkt.
T
P ⊆ M . Also ist
T
P der
Es gilt sogar:
Theorem 23 (Tarski) Die Menge der Fixpunkte einer monotonen Funktion
auf einem vollständigen Verband bildet einen vollständigen Verband.
Als erste Anwendung des Fixpunktsatzes betrachten wir Modelle von Prolog. Gegeben ist eine Menge von Funktionssymbolen Σ, Prädikatsymbolen ∆
und Variablen V . P sei ein Prolog-Programm über Σ, ∆, V .
T := {p(t1 , . . . , tn )|p ∈ ∆, ti ∈ T (Σ ∪ V )}
P̂ (M ) = {σ(A)|∃A ← A1 ∧ . . . ∧ An ∈ P, σ(A1 ), . . . , σ(An ) ∈ M }
Beispiel 1
P
P̂ (∅)
P̂ (P̂ (∅))
P̂ n+1 (∅)
=
=
=
=
{e(0)., e(s(s(X))) ← e(X).}
{e(0)}
{e(0), e(s(s(0)))}
{e(0), . . . , e(s2n (0))}
Definition 31 M ⊆ T ist ein Term-Modell von P , falls M unter P̂ abgeschlossen ist, also P̂ (M ) ⊆ M , d.h. M ist Präfixpunkt von P̂ .
Bemerkung: ∅ ist Term-Modell von P , falls P keine Fakten enthält.
Term-Modelle von obigem P :
1.
2.
{e(s2i (0)) | i ∈ N}
{e(si (0)) | i ∈ N}
Theorem 24 Jedes reine Prolog-Programm hat ein kleinstes Term-Modell.
Beweis P̂ ist monoton. Daher hat P̂ einen kleinsten Fixpunkt und kleinsten
Präfixpunkt, also ein kleinstes Term-Modell.
4 PROLOG - PROGRAMMIEREN IN LOGIK
33
Bemerkung: Dies gilt im allgemeinen nicht: Die Formel p(a) ∨ p(b) hat zwei
minimale Termmodelle: {p(a)} und {p(b)}.
Als zweite Anwendung des Fixpunktsatzes zeigen wir:
Theorem 25 (Cantor-Schröder-Bernstein) Sind f : A → B und g : B → A
totale Injektionen, so existiert auch eine Bijektion zwischen A und B.
Beweis Zuerst zeigen wir, dass man A und B wie folgt partitionieren kann:
H(M ) := A \ g(B \ f (M ))
Jeder Fixpunkt von H ist eine passende Partitionierung. H ist monoton (folgt
aus Totalität und Injektivität). Damit hat H einen Fixpunkt.
Also existiert folgende Bijektion h : A → B:
½
f (a)
falls a ∈ A0
h(a) =
−1
g (a) sonst
Herunterladen