(252–0007–00, Informatik, 1. Semester)

Werbung
Logik
(252–0007–00, Informatik, 1. Semester)
Prof. Dr. Robert Stärk
Institut für Theoretische Informatik
ETH Zentrum
CH–8092 Zürich
Büro: CLV C4 (Clausiusstr. 47)
Email: [email protected]
http://www.inf.ethz.ch/~staerk/
Wintersemester 2004/2005
(Version mit ∀∃ Paragraphen vom 1. Dezember 2004)
2
Inhaltsverzeichnis
1 Aussagenlogik
1.1 Aussagen und Formeln . . .
1.2 Syntax der Aussagenlogik .
1.3 Semantik der Aussagenlogik
1.4 Formale Beweise . . . . . .
1.5 Boolesche Funktionen . . . .
1.6 Normalformen . . . . . . . .
1.7 Resolution . . . . . . . . . .
1.8 Die Davis-Putnam Prozedur
1.9 Anwendungen . . . . . . . .
1.10 Boolesche Algebren . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
11
14
16
21
41
47
52
62
65
68
2 Prädikatenlogik
2.1 Prädikate und Quantoren . . . . .
2.2 Syntax der Prädikatenlogik . . . . .
2.3 Semantik der Prädikatenlogik . . .
2.4 Formale Beweise . . . . . . . . . .
2.5 Vollständigkeit der Prädikatenlogik
2.6 Peano-Arithmetik . . . . . . . . . .
2.7 Abstrakte Datentypen . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
81
81
89
92
106
117
124
131
3 Logikprogrammierung
3.1 Datalog . . . . . . . . . . . . . . . . .
3.2 Unifikation . . . . . . . . . . . . . . . .
3.3 SLD-Resolution . . . . . . . . . . . . .
3.4 Prolog . . . . . . . . . . . . . . . . . .
3.5 Unentscheidbarkeit der Prädikatenlogik
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
137
140
149
154
161
177
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
A Mengentheoretische Notationen
189
3
4
INHALTSVERZEICHNIS
Literaturverzeichnis
[1] K. R. Apt. From Logic Programming to Prolog. International Series in Computer
Science. Prentice Hall, 1996.
http://vig.prenhall.com/catalog/academic/product?ISBN=013230368X
[Eine Einführung in die Logikprogrammierung und deren Anwendung auf Prolog.]
[2] J. Barwise and J. Etchemendy. Language Proof and Logic. CSLI Publications, 2000.
ISBN 1-889119-08-3.
http://www-csli.stanford.edu/hp/LPL.html.
[Eine Einführung in die Prädikatenlogik für Studenten der Philosophie, Informatik
und Mathematik. Mit der Lernsoftware Tarski’s World, Fitch, Boole. Das Buch ist
auch für das Gymnasium geeignet.]
[3] D. van Dalen. Logic and Structure. . Springer-Verlag, 3rd edition, 1994.
http://www.springer.de/cgi-bin/search_book.pl?isbn=3-540-57839-0
[Eine Einführung in die Logik und deren Anwendungen in der Mathematik.]
[4] H.-D. Ebbinghaus, J. Flum, and W. Thomas. Einführung in die mathematische Logik.
Spektrum Akademischer Verlag, 4. Auflage, 1996.
http://www.elsevier-deutschland.de/artikel/674423.
[Eine Einführung in die Prädikatenlogik und Modelltheorie.]
[5] H.-D. Ebbinghaus, J. Flum, and W. Thomas. Mathematical Logic. Springer-Verlag, 2
edition, 1996.
http://www.springer.de/cgi-bin/search_book.pl?isbn=0-387-94258-0.
[Die englische Version von [4].]
[6] D. Maier and D. S. Warren. Computing with Logic — Logic Programming with Prolog.
The Benjamin/Cummings Publishing Company Inc., Menlo Park, California, 1988.
[Eine Einführung in Prolog Interpreter und Compiler.]
[7] U. Schönig. Logik für Informatiker. Spektrum Akademischer Verlag, 5. Auflage, 2000.
http://www.elsevier-deutschland.de/artikel/674875.
[Die klassische Einführung in die Logik für Informatikstudenten. Das Buch ist leider
zu sehr auf die Resolution fixiert.]
5
6
LITERATURVERZEICHNIS
Was ist Logik?
Es scheint, dass die Menschen alle ähnliche Denkmuster benutzen, wenn sie argumentieren,
ob eine Behauptung aus Annahmen folgt oder nicht. Diese Denkmuster werden in der
Logik mathematisch analysiert. In der Logik geht es also nicht alleine darum, ob eine
Aussage wahr oder falsch ist, sondern um die Frage, welche Schlüsse man aus Annahmen
ziehen kann. Die Logik beschäftigt sich mit den folgenden Fragen:
Was folgt aus gegebenen Voraussetzungen?
Wie kann man beweisen, dass eine Behauptung aus Voraussetzungen folgt?
Was ist ein Beweis?
Was sind Schlussregeln?
Wie kann man zeigen, dass eine Behauptung nicht aus Annahmen folgt?
Was ist ein Gegenbeispiel?
Was ist ein Modell einer Theorie?
Wann ist eine Theorie widerspruchsfrei?
Diese Fragen tauchen nicht nur in der Mathematik und der Philosophie auf sondern überall
dort, wo Menschen rational denken. Beispiele:
Ein Verteidiger versucht zu beweisen, dass die Schuld des Angeklagten (Behauptung)
nicht aus der Anklage (Voraussetzungen) folgt. Wie beweist er das?
Eine Spezifikation eines Systems kann von einem Programmierer nicht implementiert
werden, wenn sie widersprüchlich ist. Warum nicht?
Zur Beantwortung der Fragen haben die Logiker im Verlaufe der Zeit eine spezielle Sprache entwickelt, die Sprache der Prädikatenlogik. Die Prädikatenlogik ist eine künstliche
Sprache ähnlich wie eine Programmiersprache. Die Sprache der Prädikatenlogik ist vom
Wortschatz und der Grammatik her minimal und trotzdem mächtig genug um die ganze
Mathematik zu erfassen. Anders als bei natürlichen Sprachen wie Deutsch oder Englisch
gibt es in der Prädikatenlogik keine Mehrdeutigkeiten. Die Bedeutung von Sätzen in der
Prädikatenlogik ist eindeutig festgelegt. Es gibt keine Unklarheiten. Darum eignet sich
die Prädikatenlogik sehr gut zur Beschreibung und Spezifikation von Hard- und Software.
7
8
WAS IST LOGIK?
Die Schlussregeln der Prädikatenlogik sind so gemacht, dass Beweise in der Prädikatenlogik mechanisch von einem Computerprogramm auf Korrektheit überprüft werden können.
Solche formalen Methoden werden immer öfter auch in der Informatik eingesetzt, da die
Hard- und Softwaresysteme immer komplizierter werden und die Menschen allmählich die
Übersicht verlieren (e.g. Model Checking, Bytecode Verification, Proof-Carrying Code).
Ziele der Vorlesung
Die Logik hat sehr viele Bezüge zur Informatik. Darum ist es gerechtfertigt, dass gleich
zu Beginn des Informatikstudiums die Grundbegriffe der Logik erklärt werden und das
Handwerk der Logik, wie etwa die Umformung von Booleschen Ausdrücken, ausführlich
geübt wird. Weiter soll auch die Fähigkeit erlernt werden, natürlichsprachliche Aussagen
in logische Formeln zu übersetzen und umgekehrt logische Formeln zu lesen und daraus
die richtigen Schlüsse zu ziehen.
Paragraphen, die mit diesen zwei Symbolen beginnen und in einer kleineren Schrift
∀∃ Alle
gedruckt sind, sollten erst beim zweiten Durchgang durch das Skriptum (nach dem
2. Vordiplom) gelesen werden. Solche Paragraphen gehören nicht zum Prüfungsstoff für das
1. Vordiplom. Die Paragraphen enthalten zusätzliche Erklärungen, historische Bemerkungen,
weiterführende Theorie und Beweise von Sätzen. Die fakultativen Beweise und Sätze sind alle
mit ∀∃ markiert. Auch wenn die Paragraphen nicht zum eigentlichen Stoff der Vorlesung gehören,
können sie trotzdem etwas zum Verständnis der Vorlesung beitragen.
und Digitaltechnik. Die Aussagenlogik (eine Teilsprache der Prädikatenlo∀∃ Logik
gik) befasst sich mit den Wahrheitswerten “wahr” und “falsch”. Diese Wahrheitswerte
können identifiziert werden mit den digitalen Werten 1 (Strom) und 0 (kein Strom). Es gibt
darum einen starken Bezug zwischen der Aussagenlogik und digitalen Schaltkreisen. Stichworte
dazu sind: Darstellung von Boolesche Funktionen, Normalformen, Vereinfachung von Booleschen
Ausdrücken.
und Komplexitätstheorie. Eines der bekanntesten offenen Probleme der theo∀∃ Logik
retischen Informatik ist die Frage, ob die Komplexitätsklassen P und NP verschieden
sind. Das erste sogenannte NP-vollständige Problem, das S. Cook (1971) entdeckt hat, ist das
SAT-Problem, die Frage, ob eine Formel der Aussagenlogik erfüllbar ist. Später sind viele Probleme der Informatik als NP-vollständig erkannt worden (e.g. Traveling Salesman Problem). Die
Frage P = NP kann man aequivalent so stellen: Gibt es einen Algorithmus, der in polynomialer
Zeit (in Bezug auf die Länge der Eingabe) entscheidet, ob eine aussagenlogische Formel erfüllbar
ist?
Ein anderes ungelöstes Problem der theoretischen Informatik ist die Frage, ob die Komplexitätsklasse NP gleich co-NP ist. Das klassische Beispiel eines co-NP vollständiges Problemes ist
das TAUT-Problem, die Frage, ob eine aussagenlogische Formel allgemeingültig ist. Die Klasse NP wäre gleich der Klasse co-NP, falls es ein Beweissystem für die Aussagenlogik gäbe, in
dem allgemeingültige Formeln kurze (polynomial beschränkte) Beweise hätten. Es gibt also auch
einen Zusammenhang zwischen der Komplexitätstheorie und der Frage nach der Länge von Beweisen.
Logik und Berechnungstheorie. Eines der grossen Probleme zu Beginn des 20. Jahr∀∃ hunderts
war das sogenannte Entscheidungsproblem, die Frage, ob es ein mechnisches
Verfahren gibt, das entscheidet, ob ein Satz der Prädikatenlogik allgemeingültig ist. Das Entscheidungsproblem wurde 1936 von A. Church negativ beantwortet. Auch wenn die Antwort
WAS IST LOGIK?
9
negativ war, hat der Begriff der Berechenbarkeit, der zur Beantwortung des Problems notwendig
ist, bis heute seine Gültigkeit bewahrt (Church’sche These). Man kann also sagen, dass eine Fragestellung aus der Logik zur Klärung des Begriffs der Berechenbarkeit in der Informatik geführt
hat.
und Datenbanken. Die wohl wichtigste Anwendung der Prädikatenlogik in
∀∃ Logik
der Informatik sind die relationalen Datenbanken. Relationale Datenbanken sind nichts
anderes als endliche relationale Strukturen der Prädikatenlogik. Eine Datenbankabfrage kann
übersetzt werden in eine prädikatenlogische Formel. Falls die Datenbankabfrage keine Variablen
enthält, führt sie zum Problem, ob eine Formel wahr ist in einer Struktur. Falls die Frage Variablen enthält, führt die Abfrage zur Suche nach allen Belegungen, welche die Formel erfüllen.
Viele Konzepte im Bereich der relationalen Datenbanken haben ihr Analogon in der Prädikatenlogik (e.g. Integrity Constraints, Consistency). Mit Hilfe von Methoden aus der Logik wurde
ausserdem gezeigt, dass mit erststufige Abfragen alleine nicht alle Information aus Datenbanken
herausgeholt werden kann. Allgemein kann man sagen, dass relationale Datenbanken wohl nicht
so erfolgreich gewesen wären und immer noch sind, wenn sie nicht einfache, klare, mathematische
Grundlagen hätten, die zu einem grossen Teil auf der Prädikatenlogik beruhen.
und Programmverifikation. Das erste formale Verifikationssystem in der In∀∃ Logik
formatik war die Hoare Logik eingeführt von T. Hoare (1969). Das System von Hoare
besteht aus einer kleinen Anzahl Schlussregeln zur Herleitung von partiellen Korrektheitsaussagen von imperativen While-Programmen mit Hilfe von sogenannten Invarianten. Die vollständige
formale Verifikation von Programmen mit der Methode von Hoare (oder einer Erweiterung, der
dynamischen Logik ) hat sich aber in der Informatik als nicht durchführbar erwiesen. Das liegt
nicht allein an der Logik sondern auch an der Tatsache, dass imperative Programmiersprache sehr maschinennah sind und eine Verifikation wohl erst ab einer höheren Abstraktionsstufe
machbar ist.
Logik als Spezifikationssprache. Es scheint, dass die Prädikatenlogik in der Infor∀∃ matik
immer wieder neu erfunden wird. Zum Beispiel sind semantischen Netze in der
künstlichen Intelligenz (Minsky 1975) nichts anderes als eine graphische Darstellung von Formeln der Prädikatenlogik. Die objekt-orientierte Programmierung mit der Klassenhierarchie und
der Vererbung beruht stark auf Prinzipien der semantischen Netze.
Logik als Programmiersprache. In der Logikprogrammierung werden Hornformeln,
∀∃ ein
Fragment der Prädikatenlogik, als Programme betrachtet werden. Die Suche nach
einem Beweis einer Formel gilt als Berechnung. Oft ist die Suche zielgerichtet. Vom Ziel wird
rückwärts mit Hilfe von Back-Tracking nach einem Beweis gesucht. Die Unifikation von Termen
ist der Motor der Suche. Ein Beispiel einer Logikprogrammiersprache ist Prolog.
Logik und Programmsynthese. Bei der Programmsynthese werden Typen als For∀∃ meln
und Beweise als Programme aufgefasst (Formula-as-Types Interpretation). Aus
einem konstruktiven Beweis einer Formel ∀x ∃y A(x, y) kann im Prinzip ein Programm π extrahiert werden, das die Spezifikation ∀x A(x, π(x)) erfüllt und somit automatisch korrekt ist.
Die Extraktion des Programmes kann automatisiert werden und man spricht darum von Programmsynthese. Das Problem ist, dass die Komplexität des extrahierten Programms vom Beweis
abhängt und nicht vorausgesagt werden kann. Das allgemeine Prinzip, dass ein Algorithmus nicht
direkt beschrieben wird, sondern implizit durch einen mathematischen Beweis mitgeteilt wird,
ist aber weit verbreitet. Weiter ist die Idee, dass Formeln als Typen von Programmen aufgefasst
werden können, ein wichtiger Bestandteil der funktionalen Programmierung.
10
WAS IST LOGIK?
Kapitel 1
Aussagenlogik
1.1
Aussagen und Formeln
In der klassischen Aussagenlogik geht man aus von einer Menge von Aussagenvariablen
p0, p1, p2, . . .
Aussagenvariablen stehen für nicht weiter spezifizierte Aussagen, die wahr oder falsch sein
können. Beispiele von solchen Aussagen aus dem Alltag sind:
“Der Schnee ist schwarz”
“Die Strasse ist nass”
Aussagen aus dem Bereich der Mathematik sind:
“2 < 3”
“2 + 3 = 5”
“3 ist eine Primzahl”
“15 ist durch 3 und 5 teilbar”
Beispiele aus der Geometrie sind:
“Der Punkt (2, 5) liegt auf der Geraden g”
“Die Geraden g1 und g2 schneiden sich”
Beispiele von Aussagen in der Informatik sind:
“Der Array a hat die Länge 50”
“Der Array a ist aufsteigend geordnet”
“Die Datenbank d enthält keinen Kunden mit Namen Bill Gates”
11
12
KAPITEL 1. AUSSAGENLOGIK
Aus den Aussagenvariablen werden mit Hilfe von logischen Verknüpfungen (genannt Junktoren) kompliziertere Aussagen (genannt Formeln) aufgebaut. Die logischen Verknüpfungen haben folgende Bedeutungen:
¬ . . . . . . . “nicht” . . . . . . . . . . . . . . . . . . Negation
∧ . . . . . . . “und” . . . . . . . . . . . . . . . . . . . Konjunktion
∨ . . . . . . . “oder” . . . . . . . . . . . . . . . . . . . Disjunktion
→ . . . . . . . “wenn — so” . . . . . . . . . . . . Implikation
↔ . . . . . . . “genau dann wenn” . . . . . . Aequivalenz
Nebst den logischen Verknüpfungen gibt es logische Symbole für die Wahrheit und den
Widerspruch:
> . . . . . . . “wahr” . . . . . . . . . . . . . . . . . . Wahrheit
⊥ . . . . . . . “falsch” . . . . . . . . . . . . . . . . . . Widerspruch
Im folgenden bezeichnen wir Aussagenvariablen mit p, q, r und Formeln mit grossen
Buchstaben A, B, C und F .
1.1.1
Die Negation
Die Formel ¬A (lies “nicht A” oder auch “es ist nicht der Fall, dass A gilt”) bezeichnet
die Negation (das Gegenteil) von A. Wenn A eine richtige Aussage ist, dann ist ¬A eine
falsche Aussage; ist A eine falsche Aussage, so ist ¬A eine richtige Aussage.
1.1.2
Die Konjunktion
Die Formel A ∧ B (lies “A und B”) bezeichnet die Konjunktion der beiden Aussagen
A und B. Die Formel A ∧ B ist dann und nur dann richtig, wenn A und B beide richtig
sind.
1.1.3
Die Disjunktion
Die Formel A ∨ B (lies “A oder B”) bezeichnet die Disjunktion von A und B. Die Formel
A ∨ B ist dann und nur dann richtig, wenn mindestens eine der beiden Aussagen A und B
richtig ist. Insbesondere ist A∨B richtig, wenn beide Aussagen A und B richtig sind. Man
spricht auch vom inklusiven Oder im Gegensatz zum exklusiven Oder. Das exklusive Oder
(“entweder A oder B aber nicht beide”) kann man umschreiben durch (A ∨ B) ∧ ¬(A ∧ B).
1.1.4
Die Implikation
Die Formel A → B (lies “wenn A, so B”, “falls A, dann B” oder auch “aus A folgt B”)
bezeichnet die Implikation von A und B. Die Formel A → B ist richtig, wenn A falsch
oder B richtig ist. Die Formel A → B ist falsch, wenn A richtig und B falsch ist.
1.1. AUSSAGEN UND FORMELN
1.1.5
13
Die Aequivalenz
Die Formel A ↔ B (lies “A genau dann, wenn B”, “A dann und nur dann, wenn B”
oder auch “A ist aequivalent zu B”) bezeichnet die Aequivalenz von A und B. Die Formel
A ↔ B ist dann und nur dann richtig, wenn A und B denselben Wahrheitswert haben,
d.h. wenn A und B beide richtig oder beide falsch sind.
1.1.6
Die Wahrheit
Die Formel > (lies “wahr” oder “verum”) ist immer wahr.
1.1.7
Der Widerpruch
Die Formel ⊥ (lies “falsch” oder “falsum”) ist immer falsch. Die Formel ⊥ bezeichnet
die widersprüchliche Aussage.
1.1.8
Andere Junktoren
Viele andere umgangssprachliche Verknüpfungen von Aussagen kann man leicht in die
Sprache der Aussagenlogik übersetzen. Beispiele:
“weder A noch B”
wird übersetzt mit ¬(A ∨ B)
“A ist eine notwendige Bedingung für B”
wird übersetzt mit B → A
“A ist eine hinreichende Bedingung für B” wird übersetzt mit A → B
“A gilt nur, falls B”
wird übersetzt mit A → B
“A gilt, ausser wenn B gilt” (A unless B)
wird übersetzt mit ¬B → A
Gewisse Nuancen der natürlichen Sprache gehen bei der Übersetzung allerdings verloren.
1.1.9
Beispiele
Die Variablen p0, p1, p2, p3 sollen für die folgenden Aussagen stehen:
p0 für “der Schnee ist weiss”
p2 für “7 ist eine Primzahl”
p1 für “der Schnee ist schwarz”
p3 für “9 ist eine Primzahl”
Richtige Aussagen sind:
¬p1
p0 ∧ p2
¬p3
p0 ∨ p3
p1 → p3
p0 ↔ p2
p1 ∨ p2
p0 → p2
p1 ↔ p3
p0 ∨ p2
p1 → p2
p1 ∨ p3
p0 → p3
Falsche Aussagen sind:
¬p0
p1 ∧ p2
¬p2
p0 ∧ p3
p1 ∧ p3
p0 ↔ p3
p1 ↔ p2
14
KAPITEL 1. AUSSAGENLOGIK
In den Beispielen sehen wir, dass eine Formel nicht zugleich richtig und falsch sein kann.
1.1.10
Aussagen und Mengen
Es gibt eine Analogie zwischen Aussagen und Mengen. Die Konjunktion von Aussagen
entspricht dem Durchschnitt von Mengen, die Disjunktion der Vereinigung von Mengen
und die Negation der Mengendifferenz.
p∧q
1.1.11
p∨q
p ∧ ¬q
¬p ∧ q
Die Bedeutung der Implikation
Nehmen wir an, dass der Chef zu einem Mitarbeiter sagt: “Wenn Sie das Projekt zeitgerecht abschliessen, bekommen Sie eine Lohnerhöhung.” Falls der Mitarbeiter zeitgerecht
abschliesst und eine Lohnerhöhung bekommt, hat der Chef die Wahrheit gesagt. Dies ist
der Fall “wahr → wahr”. Under welchen Bedingungen würde man sagen, dass der Chef
gelogen hat? Ganz klar, wenn der Mitarbeiter das Projekt zur Zeit abschliesst, aber keine
Lohnerhöhung bekommt. Das ist der Fall “wahr → falsch”. Was kann man sagen, wenn
der Mitarbeiter das Projetk zu spät abschliesst? Entweder bekommt er die Lohnerhöhung
(falsch → true) oder er bekommt keine Lohnerhöhung (falsch → falsch). In keinem der
beiden Fälle, kann man sagen, dass der Chef gelogen hat.
1.2
Syntax der Aussagenlogik
Formeln sind zunächst nur Strings, d.h. Zeichenketten aufgebaut aus gewissen Symbolen.
Die folgende Grammatik beschreibt die exakte Syntax von Formeln. Die Symbole auf den
linken Seiten der Gleichungen heissen Nicht-Terminalsymbole. Die Symbole, die in Hochkommas eingeschlossen sind, heissen Terminalsymbole. Die Grammatik ist so zu verstehen,
dass ein Nicht-Terminalsymbol durch eine der mit einem vertikalen Strich getrennten Alternativen auf der rechten Seite der Gleichung ersetzt werden darf. Die Terminalsymbole
bleiben, wie sie sind. Dabei steht {. . .} für beliebig viele (auch Null) Wiederholungen der
Symbole innerhalb der geschweiften Klammern.
Formula
= Proposition | ‘>’ | ‘⊥’ | ‘(’ ‘¬’ Formula ‘)’ |
‘(’ Formula Operator Formula ‘)’
Operator
= ‘∧’ | ‘∨’ | ‘→’ | ‘↔’
Proposition = ‘p’ Digit {Digit}
Digit
= ‘0’ | ‘1’ | ‘2’ | ‘3’ | ‘4’ | ‘5’ | ‘6’ | ‘7’ | ‘8’ | ‘9’
Beispiele von Formeln sind:
p17 (p0 → (p1 ∨ p0)) (p2 ∧ (¬p2)) ((p0 ∧ (p1 ∨ (¬p5))) → p11)
1.2. SYNTAX DER AUSSAGENLOGIK
15
Um Klammern zu sparen machen wir folgende Konventionen:
Das äusserste Paar von Klammern wird weggelassen.
Die Bindungsstärke der Junktoren nimmt ab in der folgenden Reihenfolge:
[bindet stark] ¬
∧
∨
→ ↔
[bindet schwach]
Ein Junktor mit niedriger Bindungsstärke hat kleinere Präzedenz.
Die Konjunktion (∧) und die Disjunktion (∨) sind linksgeklammert, die Implikation
(→) ist rechtsgeklammert.
Die nachstehenden Formeln werden daher wie folgt geklammert:
¬A ∧ B
ist (¬A) ∧ B
und nicht ¬(A ∧ B),
A∧B∨C
ist (A ∧ B) ∨ C
und nicht A ∧ (B ∨ C),
A ∧ B → C ∨ D ist (A ∧ B) → (C ∨ D),
A∧B∧C
ist (A ∧ B) ∧ C,
A∨B∨C
ist (A ∨ B) ∨ C,
A→B→C
ist A → (B → C)
¬¬A
ist ¬(¬A).
und nicht (A → B) → C,
Bezüglich der Bindungsstärken gilt die folgende Analogie zur Algebra: Die Disjunktion (∨)
entspricht der Addition (+) und die Konjunktion (∧) entspricht der Multiplikation (∗).
A∨B∧C
entspricht x + y ∗ z,
(A ∨ B) ∧ C entspricht (x + y) ∗ z.
So wie in der Algebra die Multiplikation stärker bindet als die Addition, bindet in der
Logik die Konjunktion stärker als die Disjunktion.
1.2.1
Andere Notationen
Die Symbole für die logischen Verknüpfungen sind nicht einheitlich. Insbesondere verwenden Programmiersprachen eigene Notationen, da die Symbole ¬, ∧, ∨ auf den meisten
Tastaturen nicht vorkommen.
¬p
p∧q
p∨q
>
⊥
p ∧ (¬q ∨ r)
Logik (Variante) ∼ p
p&q
p∨q
T
F
p & (∼ q ∨ r)
C
!p
p && q
p || q
1
0
p && (! q || r)
Pascal, Eiffel
not p
p and q
p or q
true false p and (not q or r)
Scheme (Lisp)
(not p) (and p q) (or p q) #t
Poln. Notation
Np
Kpq
Apq
KpANqr
Umgekehrt Poln. p N
pqK
pqA
pqNrAK
Logik
#f
(and p (or (not q) r))
Eine Implikation A → B wird manchmal auch als A ⊃ B oder A ⇒ B geschrieben und
eine Aequivalenz A ↔ B als A ≡ B oder A ⇔ B.
16
1.2.2
KAPITEL 1. AUSSAGENLOGIK
Parsen von Formeln
Die polnische Notation kommt ohne Klammern aus. Trotzdem sind die Formeln immer
noch eindeutig lesbar, d.h. sie können in eindeutiger Weise in einen Baum umgewandelt
werden. Zum Beispiel sieht die Formel p ∧ (¬q ∨ r) in der Kolonne ganz rechts als Baum
so aus:
∧
.
&
∨
p
.
&
¬
r
↓
q
Die Umwandlung einer Formel in einen Baum nennt man Parsen der Formel. In den
Anfängen der Logik wurde dem Parsen von Formeln eine gewisse Bedeutung zugeschrieben
und die Lehrbücher enthielten zu dem Thema eigene Kapitel. In der Informatik ist das
Parsen inzwischen eine Kleinigkeit geworden (siehe Vorlesung “Compilerbau”) und darum
gehen wir hier nicht genauer darauf ein.
1.2.3
Die Länge von Formeln
Unter der Länge einer Formel verstehen wir die Anzahl logischer Symbole und Aussagenvariablen, die in der Formel vorkommen. Diese Zahl entspricht genau der Anzahl Knoten
im Parsebaum für die Formel. Die Länge einer Formel kann man so definieren:
|p| := |>| := |⊥| := 1
|¬A| := |A| + 1
|A ∧ B| := |A ∨ B| := |A → B| := |A ↔ B| := |A| + |B| + 1
Beispiel: |p ∧ (¬q ∨ r)| = 6.
1.3
1.3.1
Semantik der Aussagenlogik
Wahrheitswerte
In der klassischen Logik gibt es zwei Wahrheitswerte 1 (wahr) und 0 (falsch). Die Menge
mit den zwei Elementen 1 und 0 bezeichnen wir mit B, also B = {1, 0}. Die logischen
Verknüpfungen ¬, ∧, ∨, →, ↔ können als Operationen auf der Menge B aufgefasst werden.
Sie haben die folgenden Verknüpfungstafeln:
¬
∧ 1 0
∨ 1 0
→ 1 0
↔ 1 0
1 0
1 1 0
1 1 1
1
1 0
1
1 0
0 1
0 0 0
0 1 0
0
1 1
0
0 1
1.3. SEMANTIK DER AUSSAGENLOGIK
17
Später weder wir sehen, dass im Prinzip die beiden Operatoren ¬ und ∧ (bzw. ¬ und ∨)
genügen um alle möglichen logischen Verknüpfungen zu definieren.
1.3.2
Wahrheitsdefinition
Eine Formel der Aussagenlogik ist nicht einfach wahr oder falsch. Ihr Wahrheitswert hängt
davon ab, ob die Aussagenvariablen, die in der Formel vorkommen, wahr oder falsch sind.
Das ist ähnlich wie in der Algebra. Der Ausdruck (x + y) ∗ z hat keinen Wert. Erst wenn
wir z.B. x gleich 2, y gleich 3 und z gleich 4 setzen, wird der Ausdruck zu (2 + 3) ∗ 4 und
hat den Wert 20.
Der Wahrheitswert einer Formel hängt ab von der Belegung der Aussagenvariablen
mit Wahrheitswerten. Eine Belegung α ist eine Funktion von {p0, p1, p2, . . .} nach B. Sie
ordnet jeder Aussagenvariablen p einen Wahrheitswert α(p) ∈ B zu.
Definition 1.3.3 Zu einer Belegung α und einer Formel A definiert man einen Wahrheitswert [[A]]α ∈ B mit Induktion nach der Länge von A:
[[p]]α
:= α(p)
[[>]]α
:= 1
[[⊥]]α
:= 0
1,
:=
0,
1,
:=
0,
1,
:=
0,
1,
:=
0,
1,
:=
0,
[[¬A]]α
[[A ∧ B]]α
[[A ∨ B]]α
[[A → B]]α
[[A ↔ B]]α
falls [[A]]α = 0;
sonst.
falls [[A]]α = 1 und [[B]]α = 1;
sonst.
falls [[A]]α = 1 oder [[B]]α = 1;
sonst.
falls [[A]]α = 0 oder [[B]]α = 1;
sonst.
falls [[A]]α = [[B]]α ;
sonst.
Was bedeutet ‘mit Induktion nach der Länge von A’ ?—Das heisst, dass als Verankerung der Wahrheitswert für Aussagenvariablen und die Konstanten > und ⊥ direkt
definiert wird. Im Induktionsschritt wird der Wahrheitswert für zusammengesetzte Formeln definiert unter der Annahme, dass der Wahrheitswert für Teilformeln mit kleinerer
Länge bereits bekannt ist.
Es ist leicht zu sehen, dass der Wahrheitswert einer Formel nur von der Belegung der in
der Formel tatsächlich vorkommenden Aussagenvariablen abhängt. Mit anderen Worten,
falls α und β zwei Belegungen sind, so dass α(p) = β(p) für alle Aussagenvariablen p, die
in A vorkommen, dann gilt [[A]]α = [[A]]β .
1.3.4
Erfüllbar, allgemeingültig, logische Konsequenz
Nun können wir die wichtigen logischen Begriffe erfüllbar, allgemeingültig, logisch aequivalent und logische Konsequenz definieren. Mit grossen griechischen Buchstaben Φ, Ψ
18
KAPITEL 1. AUSSAGENLOGIK
bezeichnen wir Mengen von Formeln, also Φ = {A1 , A2 , . . .}. Die Mengen können endlich
oder unendlich sein.
Definition 1.3.5 (Erfüllbarkeit, Allgemeingültigkeit, logische Konsequenz)
(1) Eine Formel A heisst erfüllbar, falls es eine Belegung α gibt mit [[A]]α = 1.
(2) Eine Formel A heisst allgemeingültig (geschrieben |= A), falls für alle Belegungen α
gilt [[A]]α = 1. Allgemeingültig Formeln werden auch Tautologien genannt.
(3) Zwei Formeln A und B sind logisch aequivalent, falls für alle Belegungen α gilt
[[A]]α = [[B]]α .
(4) Eine Formel A ist eine logische Konsequenz einer Menge Φ (geschrieben Φ |= A),
falls für alle Belegungen α gilt: Falls [[B]]α = 1 für alle B ∈ Φ, dann ist [[A]]α = 1.
Man sagt auch, dass A logisch folgt aus Φ.
(5) Eine Formelmenge Ψ folgt logisch aus Φ (geschieben Φ |= Ψ), falls für alle Formeln A
aus Ψ gilt Φ |= A.
Eine Formel A ist erfüllbar, wenn es möglich ist, sie wahr zu machen. Eine Formel A
ist allgemeingültig, wenn sie immer wahr ist unabhängig davon, wie man die Aussagenvariablen belegt. Eine Formel A ist allgemeingültig genau dann, wenn die Negation ¬A
nicht erfüllbar ist. Zwei Formeln A und B sind logisch aequivalent genau dann, wenn die
Formel A ↔ B eine Tautologie ist. Eine Formel A folgt logisch aus aus einer Menge Φ
von Annahmen, wenn sie wahr ist in jeder Situation, wo alle Annahmen in Φ wahr sind.
Falls Φ endlich ist, etwa Φ = {B1 , . . . , Bn }, dann folgt A logisch aus Φ genau dann, wenn
die Formel (B1 ∧ . . . ∧ Bn ) → A eine Tautologie ist, d.h.
{B1 , . . . , Bn } |= A genau dann, wenn
1.3.6
|= (B1 ∧ . . . ∧ Bn ) → A
Wahrheitstafeln
Um nachzuprüfen, ob eine Formel allgemeingültig ist, kann man Wahrheitstafeln aufstellen. Eine Wahrheitstafel für eine Formel enthält für jede Aussagenvariable, die in der
Formel vorkommt, eine Kolonne. Weiter enthält die Wahrheitstafel Kolonnen für die Teilformeln der Formel und ganz recht eine Kolonne für die Formel selbst. In den Kolonnen
für die Aussagenvariablen werden alle möglichen Kombinationen von Wahrheitswerten
eingetragen. Falls die Formel n Aussagenvariablen hat, dann besteht die Wahrheitstafel
aus 2n Zeilen. Eine Formel ist erfüllbar genau dann, wenn es mindestens eine Zeile gibt,
in der die Formel den Wahrheitswert 1 bekommt. Eine Formel ist allgemeingültig, wenn
sie in allen Zeilen der Tafel den Wahrheitswert 1 erhält.
Beispiel 1.3.7 Die Formel p → p ist allgemeingültig. Die folgende Wahrheitstafel gibt
für jeden Wert von p den Wert 1:
p p→p
1
1
0
1
1.3. SEMANTIK DER AUSSAGENLOGIK
19
Beispiel 1.3.8 Die Formel (p ∧ q) → (¬p → q) ist allgemeingültig:
p q p ∧ q ¬p ¬p → q (p ∧ q) → (¬p → q)
1 1
1
0
1
1
1 0
0
0
1
1
0 1
0
1
1
1
0 0
0
1
0
1
Beispiel 1.3.9 Die Formel (p → q) ∨ ¬p ist nicht allgemeingültig:
p q p → q ¬p (p → q) ∨ ¬p
1 1
1
0
1
1 0
0
0
0
0 1
1
1
1
0 0
1
1
1
Da die Kolonne ganz rechts einen Eintrag 0 enthält, ist keine Allgemeingültigkeit vorhanden. Die Formel ist jedoch erfüllbar.
Beispiel 1.3.10 Die Formel ¬(p ∧ q) ist logisch aequivalent zu ¬p ∨ ¬q:
p q p ∧ q ¬p ¬q ¬(p ∧ q) ¬p ∨ ¬q
1 1
1
0
0
0
0
1 0
0
0
1
1
1
0 1
0
1
0
1
1
0 0
0
1
1
1
1
Da die beiden Kolonnen ganz rechts identisch sind, sind die Formeln logisch aequivalent.
Beispiel 1.3.11 Die drei Formeln p → q, ¬p ∨ q, ¬(p ∧ ¬q) sind logisch aequivalent:
p q ¬p ¬q p ∧ ¬q p → q ¬p ∨ q ¬(p ∧ ¬q)
1 1
0
0
0
1
1
1
1 0
0
1
1
0
0
0
0 1
1
0
0
1
1
1
0 0
1
1
0
1
1
1
Die drei letzten Kolonnen ganz rechts in ther Wahrheitstafel sind identisch. Darum sind
die Formeln logisch aequivalent.
Um zu zeigen, dass eine Formel aus Annahmen logisch folgt, können ebenfalls Wahrheitstafeln verwendet werden. Dazu muss man überprüfen, dass in allen Zeilen, wo alle
Annahmen den Wert 1 haben, die Formel ebenfalls den Wert 1 bekommt.
20
KAPITEL 1. AUSSAGENLOGIK
Beispiel 1.3.12 Wir wollen zeigen, dass die Formel p → r aus den beiden Formeln p → q
und q → r logisch folgt:
p → q, q → r |= p → r
Dazu stellen wir die Wahrheitstafel auf, die in diesem Fall 8 Zeilen enthält:
p q r p→q q→r p→r
⇐=
beide Annahmen wahr
⇐=
beide Annahmen wahr
1
⇐=
beide Annahmen wahr
1
⇐=
beide Annahmen wahr
1 1 1
1
1
1
1 1 0
1
0
0
1 0 1
0
1
1
1 0 0
0
1
0
0 1 1
1
1
1
0 1 0
1
0
1
0 0 1
1
1
0 0 0
1
1
Die vier Zeilen, in denen beide Annahmen p → q und q → r den Wert 1 haben, sind mit
einem Pfeil markiert. In den vier Zeilen hat auch die Formel p → r den Wert 1. Also folgt
sie logisch aus den beiden Annahmen.
Wahrheitstafeln werden in der Praxis selten benutzt, da sie sehr schnell viel zu gross
werden. Wenn eine Formel 200 Aussagenvariablen enthält, dann hat die dazugehörende
Wahrheitstafel 2200 Zeilen und kann nicht mehr in vernünftiger Zeit systematisch durchlaufen werden.
1.3.13
Syntax vs. Semantik
Was ist der Unterschied zwischen Syntax und Semantik?—Die Syntax befasst sich nur
mit der äusserlichen Darstellung von Formeln (wieviele Klammern sind notwendig, etc.),
während die Semantik die Bedeutung von Formeln festlegt. Betrachten wir die beiden
Formeln (p ∧ q) ∧ r und p ∧ (q ∧ r). Diese zwei Formeln sind syntaktisch verschieden. Sie
haben unterschiedliche Parsebäume:
∧
.
&
∧
.
p
∧
.
r
&
∧
p
&
.
q
q
&
r
Die zwei Formeln sind aber logisch aequivalent. Für jede Belegung von p, q und r mit
Wahrheitswerten erhalten sie denselben Wert:
|= (p ∧ q) ∧ r ↔ p ∧ (q ∧ r)
Mit anderen Worten, die zwei Formeln sind syntaktisch verschieden, aber semantisch
gleich.
1.4. FORMALE BEWEISE
1.4
21
Formale Beweise
Wenn man in der Praxis zeigen will, dass eine Formel aus Annahmen folgt, dann tut man
das mit einem Beweis. Ein Beweis besteht aus einer Folge von kleinen Schritten, welche
die Behauptung aus den Voraussetzungen herleiten. In der Logik gibt es viele verschiedene
Beweissysteme (Logikkalküle). Wir stellen das Beweissystem des natürlichen Schliessens
vor. Der Name “natürliches Schliessen” kommt daher, dass die Beweise in dem System
sehr nahe kommen zu den Beweisen, wie sie die Mathematiker tatsächlich führen. Die
Beweise in dem System des natürlichen Schliessens sind aber trotzdem formale Beweise,
da sie genau festgelegten Regeln gehorchen müssen.
Was ist der Unterschied zwischen einem formalen und einem informalen Beweis? —
Nur die Sprache. Ein informaler Beweis ist aufgeschrieben in natürlicher Sprache. Er kann
aber genauso korrekt und scharfsinnig sein, wie ein formaler Beweis. Ein informaler Beweis
kann leichter anderen Menschen mitgeteilt werden. Ein formaler Beweis kann mechanisch
von einem Computer überprüft werden. Informale Beweise enthalten of implizite Annahmen, die nicht erwähnt werden, während in formalen Beweisen alle Annahmen explizit
vorhanden sein müssen.
Das System des natürlichen Schliessens ist sehr praktisch, wenn man tatsächlich selbst
formale Beweise in dem System machen will. Das System des natürlichen Schliessens ist
nicht unbedingt geeignet für theoretische Untersuchungen über Beweise und Beweisbarkeit, wie sie etwa im Bereich der Grundlagen der Mathematik gemacht werden. Darum
werden dort oft andere Logikkaküle verwendet. Es ist aber meistens möglich die formalen
Beweise von einem System in ein anderes zu übersetzen, so wie man im Prinzip jedes
Programm in jede beliebige Programmiersprache übersetzen könnte.
1.4.1
Beispiel eines informalen Beweises
Wir wollen den folgenden Satz beweisen:
Satz. Wenn x < y und y ≤ z, dann ist x < z.
Beweis. Nehmen wir an, dass x < y und y ≤ z. Dann ist y < z oder y = z. Falls y < z,
dann ist x < z. Falls y = z ist, dann ist x < z. Also ist in beiden Fällen x < z. 2
Ist das wirklich ein Beweis? Was sind x, y und z? Ganze Zahlen? Reelle Zahlen? Strings?
Was bedeutet x < y und x ≤ y für Strings? Die lexikographische Ordnung? Wie werden
Umlaute behandelt beim Vergleich von Strings? — Wir sehen, dass der Beweis gar nicht
so klar ist. Schreiben wir ihn darum nochmals ein wenig ausführlicher hin um zu sehen,
welche Eigenschaften von < und ≤ benutzt werden.
Satz. Es gilt: x < y ∧ y ≤ z → x < z.
Beweis. Nehmen wir an, dass x < y und y ≤ z. Dann ist y < z oder y = z.
Dabei haben wir benutzt, dass y ≤ z aequivalent ist zu y < z ∨ y = z.
Nun machen wir eine Fallunterscheidung.
Fall 1: Es ist y < z: Wir benutzen, dass x < y ∧ y < z → x < z, und erhalten x < z.
Fall 2: Es ist y = z: Wir benutzen, dass x < y ∧ y = z → x < z, und erhalten x < z.
Also ist in beiden Fällen x < z und wir haben gezeigt, dass x < y ∧ y ≤ z → x < z. 2
22
KAPITEL 1. AUSSAGENLOGIK
Die Eigenschaften von < und ≤, die wir in dem Beweis benutzt haben, sind also:
y ≤ z ↔ (y < z ∨ y = z)
(x < y ∧ y < z) → x < z
(x < y ∧ y = z) → x < z
Der Rest des Beweises besteht aus Schlussregeln der Aussagenlogik.
1.4.2
Beispiel eines formalen Beweises
Nun beweisen wir denselben Satz ganz formal. Dabei benutzen wir Abkürzungen:
x < y∧y ≤ z → x < z
| {z } | {z }
| {z }
p
q
r
Für die Annahmen schreiben wir:
y ≤ z ↔ (y < z ∨ y = z )
| {z }
| {z } | {z }
q
s
t
(x < y ∧ y < z ) → x < z
| {z }
| {z } | {z }
p
s
r
(x < y ∧ y = z ) → x < z
| {z } | {z }
| {z }
p
r
t
Wir beweisen also die Formel p ∧ q → r aus den folgenden drei Annahmen:
A1. q → s ∨ t
A2. p ∧ s → r
A3. p ∧ t → r
Eine formale Herleitung der Formel p ∧ q → r sieht wie folgt aus:
1: assume p ∧ q.
2:
p.
3:
q.
4:
q → s ∨ t.
5:
s ∨ t.
6:
case s.
7:
p ∧ s.
8:
p ∧ s → r.
9:
hence r.
10:
case t.
11:
p ∧ t.
12:
p ∧ t → r.
13:
hence r.
14: therefore r.
[(∧ e) mit 1]
[(∧ e) mit 1]
[Annahme A1]
[MP mit 3 und 4]
[(∧ i) mit 2 und 6]
[Annahme A2]
[MP mit 7 und 8]
[(∧ i) mit 2 und 10]
[Annahme A3]
[MP mit 11 und 12]
[(∨ e) mit 5, 9 und 13]
1.4. FORMALE BEWEISE
23
Der Unterschied zwischen einem informalen und einem formalen Beweis ist ähnlich wie
der Unterschied zwischen einem Algorithmus und einem Programm.
1.4.3
Proof Assistant
Ein speziell für diese Vorlesung entwickelter Proof Assistant ist auf dem WWW verfügbar:
http://www.inf.ethz.ch/~staerk/prop/
Der Proof Assistant kann automatisch nach formalen Herleitungen im System des natürlichen Schliessens suchen und auch gegebene Herleitungen auf deren Korrektheit hin überprüfen (siehe Abb. 1.1).
1.4.4
Herleitungen im System des natürlichen Schliessens
Eine formale Herleitung im System des natürlichen Schliessens besteht aus einer Folge von
einzelnen Herleitungsschritten. Ein Herleitungsschritt ist entweder einfach nur eine Formel
oder besteht aus der Einführung einer neuen Annahme (mit dem Schlüsselwort ‘assume’)
gefolgt von einer Herleitung und abgeschlossen mit einer Formel (mit dem Schlüsselwort
‘therefore’). Formale Herleitungen und Herleitungsschritte werden durch die folgende
Grammatik erzeugt:
Derivation = {Step}
Step
= Formula ‘.’ | ‘assume’ Formula ‘.’ Derivation ‘therefore’ Formula ‘.’
Wir bezeichnen formale Herleitungen mit d, d1 , d2 und Herleitungsschritte mit s, s1 , s2 .
Jeder Herleitungsschritt beweist genau eine Formel, die von diesem Punkt an in der Herleitung beliebig oft benutzt werden darf.
1.4.5
Einfache Herleitungsschritte
Ein einfacher Herleitungsschritt, der nur aus einer einzigen Formel A besteht, beweist
die Formel A. Die Formel A muss aus den bereits hergeleiteten Formeln und den offenen
Annahmen mit einer Schlussregel (Tabelle 1.1) ableitbar oder darin enthalten sein.
1.4.6
Bedingte Herleitungsschritte
Ein bedingter Herleitungsschritt, der unter einer zusätzlichen Annahme A die Formel B
herleitet, beweist die Formel A → B.


assume A.


beweist die Formel A → B.
d


therefore B. 
Die Annahme A darf nur in der Herleitung d benutzt werden. Ausserhalb des Beweisschrittes ist sie nicht mehr verfügbar. Man sagt das die Annahme A beim therefore
geschlossen wird. Die Formel B muss aus den bereits hergeleiteten Formeln und den zur
Zeit offenen Annahmen (inklusive A) mit einer Schlussregel (Tabelle 1.1) ableitbar oder
darin enthalten sein.
24
KAPITEL 1. AUSSAGENLOGIK
Abbildung 1.1: Ein Proof Assistant für das natürliche Schliessen.
1.4. FORMALE BEWEISE
25
A B
(∧ i)
A∧B
A∧B
(∧ e)
A
A∧B
(∧ e)
B
A A→B
(MP)
B
A
(∨ i)
A∨B
B
(∨ i)
A∨B
A∨B
A↔B
(↔ e)
A→B
A↔B
(↔ e)
B→A
A→B B→A
(↔ i)
A↔B
A→⊥
(¬ i)
¬A
A ¬A
(¬ e)
B
⊥
(EFQ)
A
A→C
C
B→C
A ∨ ¬A
(∨ e)
>
(> i)
(TND)
Tabelle 1.1: Regeln des natürlichen Schliessens
1.4.7
Schlussregeln im System des natürlichen Schliessens
In der Tabelle 1.1 sind die Schlussregeln des natürlichen Schliessens aufgeführt.
Eine Schlussregel hat die folgende Gestalt:
A1
···
B
An
(Name)
Die Formeln A1 , . . . , An sind die Prämissen der Regel und die Formel B heisst Konklusion
der Regel.
Es ist möglich, dass eine Regel keine Prämissen hat, d.h. es ist erlaubt, dass n = 0. In
diesem Fall spricht man von einem Axiom.
Die Bedeutung der Regel ist: “Von A1 , . . . , An kann man auf B schliessen.”
Bei den Namen der Regeln in Tabelle 1.1 steht i für Introduction (Einführung) und e für
Elimination (Beseitigung).
Die Regel ∧ i ist die Einführungsregel für die Konjunktion. Sie bedeutet: Wenn man
A und B hat, dann kann man A ∧ B einführen.
Die beiden Regeln ∧ e beseitigen die Konjunktion. Sie sagen, dass man von A ∧B sowohl
auf A als auch auf B schliessen kann.
Die Regel MP sagt, dass die Implikation die Wahrheit erhält (modus ponens). Von den
beiden Prämissen A und A → B kann man auf B schliessen.
Die beiden Regeln ∨ i erlauben es, die Disjunktion A ∨ B einzuführen, wenn man bereits
eine der beiden Disjunkte A oder B hat.
Die Regel ∨ e ist das Prinzip der Fallunterscheidung: Wenn man A ∨ B hat und wenn
die Formel C sowohl aus A als auch aus B folgt, dann kann man C einführen.
26
KAPITEL 1. AUSSAGENLOGIK
Bei einer Fallunterscheidung benutzen wir oft die folgende Schreibweise:



case A. 



assume A.
steht für
d
d






therefore C.
hence C.
Die beiden Regeln ↔ e erlauben es, eine Aequivalenz zu eliminieren. Von A ↔ B kann
man sowohl auf A → B als auch auf B → A schliessen.
Mit der Regel ↔ i kann man eine Aequivalenz A ↔ B aus den beiden Implikationen
A → B und B → A einführen.
Die Regel > i ist ein Axiom. Es sagt, dass die Konstante > immer eingeführt werden
kann ohne irgend eine Prämisse.
Die Regel ¬ i ist das Prinzip des Beweises durch Widerspruch (reductio ad absurdum).
Wenn man die Annahme A zu einem Widerspruch führen kann (zu ⊥), dann gilt ¬A.
Die Regel ¬ e sagt, wie es zu einem Widerspruch kommen kann. Wenn man sowohl
eine Formel A als auch deren Negation ¬A hergeleitet hat, kann man auf jede beliebig
Formel B schliessen (insbesondere auch auf ⊥).
Die Regel EFQ sagt, dass aus einem Widerspruch alles herleitbar ist (ex falso quodlibet).
Wenn man ⊥ hergeleitet hat, dann kann man auf eine beliebige Formel A schliessen.
Die Regel TND ist ein Axiom. Es besagt, dass immer A oder ¬A gilt. Dies ist das Prinzip
des ausgeschlossenen Dritten (tertium non datur ).
Beispiel 1.4.8 Als erstes Beispiel betrachten wir eine Herleitung der Kommutativität
der Konjunktion. Wir möchten die folgende Formel formal beweisen:
p∧q →q∧p
In der folgenden Herleitung numerieren wir die Zeilen und geben rechts den Namen der
Schlussregel zusammen mit den Nummern der Prämmissen an.
1:
2:
3:
4:
assume p ∧ q.
p.
q.
therefore q ∧ p.
[(∧ e) mit 1]
[(∧ e) mit 1]
[(∧ i) mit 3 und 2]
Beispiel 1.4.9 Als weiteres Beispiel betrachten wir den sogenannten Kettenschluss, dessen Korrektheit wir in Beispiel 1.3.12 schon mit einer Wahrheitstafel gezeigt haben. Wir
beweisen die folgende Formel:
(p → q) ∧ (q → r) → (p → r)
Wieder numerieren wir die Zeilen und rechtfertigen die einzelnen Schritte.
1.4. FORMALE BEWEISE
1:
2:
3:
4:
5:
6:
7:
27
assume (p → q) ∧ (q → r).
assume p.
p → q.
q.
q → r.
therefore r.
therefore p → r.
[(∧ e) mit
[MP mit 2 und
[(∧ e) mit
[MP mit 4 und
1]
3]
1]
5]
Beispiel 1.4.10 Ein etwas komplizierteres Beispiel ist eine formale Herleitung des Prinzips der Kontraposition:
(p → q) → (¬q → ¬p).
1:
2:
3:
4:
5:
6:
7:
assume p → q.
assume ¬q.
assume p.
q.
therefore ⊥.
therefore ¬p.
therefore ¬q → ¬p.
[MP mit 3 und 1]
[(¬ e) mit 4 und 2]
[(¬ i) mit 5]
Zum besseren Verständnis fügen wir zusätzlich in die Herleitung noch die am Ende der
Zeile verfügbaren Formeln ein und erhalten die folgende Herleitung:
1:
2:
3:
4:
5:
6:
7:
assume p → q.
assume ¬q.
assume p.
q.
therefore ⊥.
therefore ¬p.
therefore ¬q → ¬p.
{p → q}
{p → q, ¬q}
{p → q, ¬q, p}
{p → q, ¬q, p, q}
{p → q, ¬q, p → ⊥}
{p → q, ¬q → ¬p}
{(p → q) → (¬q → ¬p)}
[MP mit 3 und 1]
[(¬ e) mit 4 und 2]
[(¬ i) mit 5]
Die Formelmengen sind optional. Man darf sie weglassen, da sie aus dem Kontext eindeutig
rekonstruiert werden können.
Beispiel 1.4.11 Auch die Umkehrung der Kontraposition ist beweisbar:
(¬q → ¬p) → (p → q)
Hier ist eine formale Herleitung:
1: assume ¬q → ¬p.
2:
assume p.
3:
q ∨ ¬q.
4:
case q.
5:
hence q.
6:
case ¬q.
7:
¬p.
8:
hence q.
9:
therefore q.
10: therefore p → q.
[TND]
[MP mit 6 und 1]
[(¬ e) mit 2 und 7]
[(∨ e) mit 3, 5 und 8]
28
KAPITEL 1. AUSSAGENLOGIK
In dieser Herleitung wird das Prinzip des ausgeschlossenen Drittens (TND) q ∨ ¬q verwendet. Dann wird eine Fallunterscheidung nach q und ¬q gemacht. In beiden Fällen wird
auf q geschlossen.
Beispiel 1.4.12 Die folgende Herleitung ist nicht korrekt. Sie versucht die Formel p ∧ q
aus (q ∧ p) ∨ (p ∧ r) herzuleiten.
1:
2:
3:
4:
5:
6:
7:
8:
9:
assume (q ∧ p) ∨ (p ∧ r).
case q ∧ p.
q.
p.
hence p ∧ q.
case p ∧ r.
p.
hence p ∧ q.
therefore p ∧ q.
[(∧ e) mit 2]
[(∧ e) mit 2]
[(∧ i) mit 4 und 3]
[(∧ e) mit 6]
[(∧ i) mit 7 und 3]
[(∨ e) mit 1, 5 und 8]
Das Problem ist die Zeile 8. Dort wird die Formel p ∧ q eingeführt aus den Zeilen 7 und 3.
Die Formel q in Zeile 3 darf aber im Herleitungsschritt 6–8 nicht mehr benutzt werden,
da sie im Herleitungsschritt 2–5 unter einer anderen Annahme hergeleitet wurde.
1.4.13
Beweisbarkeit im System des natürlichen Schliessens
Im Folgenden präzisieren wir, was genau eine korrekte Herleitung ist. Dazu brauchen wir
den Begriff, dass eine Formel unmittelbar aus einer Formelmenge herleitbar ist.
Definition 1.4.14 Wir sagen, dass eine Formel A unmittelbar aus der Formelmenge Φ
herleitbar ist (geschrieben Φ 1N A), falls A bereits zu Φ gehört oder, falls es in Tabelle 1.1
eine Regel gibt, deren Prämissen alle in Φ vorkommen und deren Konklusion gleich A ist.
Beispiel 1.4.15 Sei Φ die Formelmenge {p, p ∨ q, p → r, q → r}. Dann sind unter
anderem die folgenden Formeln unmittelbar aus Φ herleitbar.
Φ
1N
q ∨ ¬q
Φ
1N
p∨q
Φ
1N
r
[MP, {p, p → r} ⊆ Φ]
Φ
1N
r
[(∨ e), {p ∨ q, p → r, q → r} ⊆ Φ]
[TND]
[(p ∨ q) ∈ Φ]
Dieses Beispiel zeigt auch, dass eine Formel auf verschiedene Arten aus der Menge Φ
unmittelbar hergeleitet werden kann.
In einer Herleitung gibt es an jedem Punkt eine eindeutig bestimmte Menge von zur Zeit
verfügbaren Formeln. Zu Beginn einer Herleitung ist diese Menge leer. Jeder Beweisschritt
fügt genau eine neue Formel hinzu.
1.4. FORMALE BEWEISE
29
Nehmen wir an, dass wir mitten in einer Herleitung sind, und dass Φ die Menge der
verfügbaren Formeln ist.
Eine Herleitung muss die folgenden Bedingungen erfüllen:
(1) Ein einfacher Herleitungsschritt besteht aus einer Formel A. Falls A unmittelbar aus Φ
herleitbar ist, dann hat man nach dem Beweisschritt zusätzlich zu Φ die Formel A zur
Verfügung. Im Bild:
/* Φ mit Φ 1N A */
A.
/* Φ ∪ {A} */
(2) Ein bedingter Herleitungsschritt beweist eine Formel A → B. Zunächst wird Φ erweitert um die Formel A. Am Ende der Herleitung d muss man eine Formelmenge Ψ haben,
aus der die Formel B unmittelbar herleitbar ist. Im Bild:
/* Φ */
assume A.
/* Φ ∪ {A} */
d
/* Ψ mit Ψ
1N
B */
therefore B.
/* Φ ∪ {A → B} */
Am Schluss hat man zusätzlich zu Φ die Formel A → B zur Verfügung. Die Formelmenge Ψ kann nicht weiter benutzt werden. Sie dient nur zur Herleitung von B.
Nun können wir die wichtigen Begriffe beweisbar aus globalen Annahmen und beweisbar
definieren.
Definition 1.4.16 (Beweisbarkeit im System des natürlichen Schliessens)
(1) Wir sagen, dass eine Formel A aus einer Menge Φ von globalen Annahmen beweisbar
ist (geschrieben Φ N A), falls es eine formale Herleitung d gibt, die aus Φ die
Formelmenge Ψ herleitet und A ein Element von Ψ ist.
(2) Wir sagen, dass A beweisbar ist (geschrieben
beweisbar ist.
N
A), falls A ohne globale Annahmen
Eine Herleitung einer Formel A aus einer Formelmenge Φ kann man im Bild so darstellen:
/* Φ */
d
/* Ψ mit A ∈ Ψ */
Die Menge Φ der globalen Annahmen kann auch unendlich sein. Da die Herleitung d aber
endlich ist, werden nur endliche viele globalen Annahmen aus Φ wirklich benutzt.
30
KAPITEL 1. AUSSAGENLOGIK
Oft lassen wir die Mengenklammern weg und schreiben
A1 , . . . , A n
N
B
anstelle von {A1 , . . . , An }
N
B.
Es ist leicht zu sehen, dass eine Formel B aus den globalen Annahmen A1 , . . . , An beweisbar ist genau dann, wenn die Formel A1 ∧ . . . ∧ An → B (ohne globale Annahmen)
beweisbar ist. Diese Eigenschaft ist unter dem Namen Deduktionstheorem bekannt.
Satz 1.4.17 (Deduktionstheorem)
Es gilt A1 , . . . , An N B genau dann, wenn
N
A1 ∧ . . . ∧ An → B.
Für andere Logikkalküle ist das Deduktionstheorem nicht so offensichtlich wie für das
System des natürlichen Schliessens.
Beispiel 1.4.18 Die folgenden Formeln sind ohne das Axiom (TND) beweisbar:
(1)
N
(A ∧ A) ↔ A.
(2)
N
(A ∧ B) ↔ (B ∧ A).
(3)
N
(A ∧ (B ∧ C)) ↔ ((A ∧ B) ∧ C).
(4)
N
(A ∨ A) ↔ A.
(5)
N
(A ∨ B) ↔ (B ∨ A).
(6)
N
(A ∨ (B ∨ C)) ↔ ((A ∨ B) ∨ C).
(7)
N
(A ∧ (B ∨ C)) ↔ ((A ∧ B) ∨ (A ∧ C)).
[∧ ist distributiv über ∨]
(8)
N
(A ∨ (B ∧ C)) ↔ ((A ∨ B) ∧ (A ∨ C)).
[∨ ist distributiv über ∧]
(9)
N
(A ↔ B) ↔ ((A → B) ∧ (B → A)).
(10)
N
¬(A ∨ B) ↔ (¬A ∧ ¬B).
(11)
N
((A ∧ B) → C) ↔ (A → (B → C)).
(12)
N
((A ∨ B) → C) ↔ ((A → C) ∧ (B → C)).
(13)
N
A → ¬¬A.
[∧ ist idempotent]
[∧ ist kommutativ]
[∧ ist assoziativ]
[∨ ist idempotent]
[∨ ist kommutativ]
[∨ ist assoziativ]
[Definierbarkeit von ↔]
[DeMorgan Gesetz für ∨]
[doppelte Negation]
Siehe: http://www.inf.ethz.ch/~staerk/prop/examples2.html
Beispiel 1.4.19 Für die folgenden Formeln braucht man das Axiom (TND):
(1)
N
¬(A ∧ B) ↔ (¬A ∨ ¬B).
(2)
N
(A → B) ↔ (¬A ∨ B).
(3)
N
¬(A → B) ↔ (A ∧ ¬B).
[DeMorgan Gesetz für ∧]
[Definierbarkeit von →]
[Negation von →]
1.4. FORMALE BEWEISE
31
(4)
N
¬¬A → A.
(5)
N
((A → B) → A) → A.
(6)
N
(A → (B ∨ C)) → ((A → B) ∨ (A → C)).
(7)
N
(((A → C) → C) → ((B → C) → C)) → (((A → B) → C) → C).
(8)
N
(A → B) ∨ (B → A).
[Stabilität]
[Gesetz von Peirce]
Siehe: http://www.inf.ethz.ch/~staerk/prop/examples3.html
Die Einführungsregel für die Negation (¬ i) in Tabelle 1.1 ist redundant, weil wir das
∀∃ Prinzip
des ausgeschlossenen Dritten (TND) haben. Hier ist eine schematische Herleitung von ¬A aus A → ⊥, in der die Regel (¬ i) nicht benutzt wird.
1:
2:
3:
4:
5:
6:
7:
8:
assume A → ⊥.
A ∨ ¬A.
case A.
⊥.
hence ¬A.
case ¬A.
hence ¬A.
therefore ¬A.
[TND]
[MP mit 3 und 1]
[EFQ mit 4]
[(∨ e) mit 2, 5 und 7]
Wir haben die Regel (¬ i) trotzdem hinzugenommen zur Tabelle 1.1, da sie intuitionistisch
korrekt ist, während die Regel (TND) von den Intuitionisten abgelehnt wird.
Regel (EFQ) in Tabelle 1.1 ist ableitbar mit Hilfe der anderen Schlussregeln. Hier
∀∃ istDieeine
schematische Herleitung von A aus ⊥, in der die Regel (EFQ) nicht benutzt
wird.
1:
2:
3:
4:
5:
6:
7:
8:
assume ⊥.
assume B.
therefore ⊥.
¬B.
assume ¬B.
therefore ⊥.
¬¬B.
therefore A.
[1]
[(¬ i) mit 3]
[1]
[(¬ i) mit 6]
[(¬ e) mit 4 und 7]
In dieser Herleitung haben wir benutzt, dass man mit Hilfe der Eliminationsregel der Negation
(¬ e) von ¬B und ¬¬B auf ein beliebiges A schliessen kann (und nicht nur auf ⊥).
lehnen die Intuitionisten (auch Konstruktivisten genannt) das Prinzip des aus∀∃ Warum
geschlossenen Drittens (TND) ab?—Weil man damit Existenzbeweise führen kann, ohne
dass man aus dem Beweis eine Methode erhält, wie man die Elemente, deren Existenz man bewiesen hat, tatsächlich konstruiert. Beweise, in denen man A ∨ ¬A benutzt, können manchmal
nicht konstruktiv sein. Als Beispiel betrachten wir einen Beweis der folgenden Aussage:
Satz 1.4.20 Es gibt irrationale Zahlen a und b, so dass ab rational ist.
32
KAPITEL 1. AUSSAGENLOGIK
√ √2
Beweis. Betrachten wir die Zahl 2 .
√ √2
Fall 1: 2 ist rational.
√
√
In diesem Fall setzen wir a := 2 und b := 2 und haben zwei irrationale Zahlen a und b, so
dass ab rational
ist.
√ √2
Fall 2: 2 ist irrational.
√ √2
√
In diesem Fall setzen wir a := 2 und b := 2 und erhalten
√ √2 √2 √ √2·√2 √ 2
a =( 2 ) = 2
= 2 = 2.
b
Also haben wir auch in dem 2. Fall zwei irrationale Zahlen a und b, so dass ab rational ist. 2
Obwohl wir in dem Satz die Existenz von zwei Zahlen a und b bewiesen haben, können wir aus
dem Beweis des Satzes keine Beispiele von solchen Zahlen extrahieren. Der Grund
ist, dass wir
√ √2
in dem Beweis das Prinzip des ausgeschlossenen Dritten für die Aussage “ 2 ist rational”
benutzt haben.
√ √2
Bemerkung: Die Zahl 2 ist irrational. Diese Tatsache wurde sogar konstruktiv bewiesen.
In der linearen Logik werden andere Prinzipien der klassischen Logik in Frage gestellt.
∀∃ Betrachten
wir den folgenden Schluss, der korrekt ist in der klassischen Aussagenlogik:
p→q
p→r
p→q∧r
Wenn wir die Aussagen p, q und r geeignet interpretieren, erhalten wir die folgende Instanz des
Schlusses:
1 Dollar → 1 Coke
1 Dollar → 1 Sprite
1 Dollar → 1 Coke ∧ 1 Sprite
Wenn man diesen Schluss liest als “Mit 1 Dollar kann man 1 Coke kaufen und mit 1 Dollar
kann man 1 Sprite kaufen, also kann man mit 1 Dollar 1 Coke und 1 Sprite kaufen”, dann ist er
sicher nicht korrekt. Diese Beobachtung hat dazu geführt, dass in der lineare Logik eine Anahme
(in unserem Fall: 1 Dollar) nur einmal benutzt werden darf und nicht beliebig oft (oder sogar
überhaupt nicht) wie in der klassischen Logik. Dadurch sind Formeln wie A → A ∧ A oder
A ∧ A → A in der linearen Logik nicht mehr beweisbar. Die lineare Logik unterscheidet zudem
zwischen additiver und multiplikativer Konjunktion bzw. Disjunktion.
1.4.21
Korrektheit und Vollständigkeit des natürlichen Schliessens
Das System des natürlichen Schliessens ist korrekt in dem Sinne, dass man nur allgemeingültige Formeln herleiten kann. Dies kann man wie folgt einsehen.
Die Axiome und Regeln des natürlichen Schliessen in Tabelle 1.1 sind logisch korrekt. In
jeder Regel ist die Konklusion eine logische Konsequenz der Annahmen. Wenn wir eine
Belegung der Aussagenvariablen mit Wahrheitswerten haben, die alle Prämissen einer
Regel wahr macht, dann ist auch die Konklusion der Regel unter der Belegung wahr.
Als Beispiel betrachten wir die Regel (∨ e):
A∨B
A→C
C
B→C
1.4. FORMALE BEWEISE
33
Sei α eine Belegung, so dass
[[A ∨ B]]α = 1,
[[A → C]]α = 1,
[[B → C]]α = 1.
Da [[A ∨ B]]α = 1, ist [[A]]α = 1 oder [[B]]α = 1.
Falls [[A]]α = 1, dann ist [[C]]α = 1, da [[A → C]]α = 1.
Falls [[B]]α = 1, dann ist [[C]]α = 1, da [[B → C]]α = 1.
Somit ist in beiden Fällen [[C]]α = 1.
Da α beliebig war, gilt:
{A ∨ B, A → C, B → C} |= C.
Die Korrektheit der anderen Regeln in Tabelle 1.1 zeigt man auf dieselbe Art und Weise.
In einer korrekten Herleitung gilt nun die folgende Invariante:
Falls eine Belegung α alle vor einem Herleitungsschritt s offenen Annahmen
wahr macht, dann ist auch die Formel, die durch den Herleitungsschritt s
eingeführt wird, wahr unter α.
Also ist das System des natürlichen Schliessens korrekt. Falls eine Formel A aus einer
Menge Φ von globalen Annahmen beweisbar ist, dann ist A eine logische Konsequenz
von Φ.
Satz 1.4.22 (Korrektheit des natürlichen Schliessens)
Falls Φ N A, dann Φ |= A.
Als Spezialfall des Korrektheitssatzes erhalten wir, dass im System des natürlichen Schliessens nur allgemeingültige Formeln herleitbar sind. Wenn eine Formel ohne zusätzliche
globale Annahmen beweisbar ist, dann ist sie eine Tautologie.
Korollar 1.4.23 Falls
N
A, dann |= A.
Die Umkehrung des Korrektheitssatzes wird Vollständigkeit genannt. Es geht um die
folgende Frage: Ist das System des natürlichen Schliessens vollständig in dem Sinne, dass
es genug Axiome und Schlussregeln enthält um jede Tautologie herzuleiten?
Anders ausgedrückt: Wenn eine Formel unter allen Belegungen der Aussagenvariablen mit
Wahrheitswerten immer denn Wert 1 erhält, ist dann die Formel auch formal beweisbar?
Die Anwtort ist “Ja, das System des natürlichen Schliessens ist vollständig.” Falls eine
Formel A eine logische Konsequenz einer Menge Φ von Annahmen ist, dann ist A auch
aus Φ beweisbar.
Satz 1.4.24 (Vollständigkeit des natürlichen Schliessens)
Falls Φ |= A, dann Φ N A.
Insbesondere sind alle Tautologien beweisbar.
Korollar 1.4.25 Falls |= A, dann
N
A.
Den Nachweis für die Korrektheit und die Vollständigkeit erbringen wir in den folgenden
zwei (fakultativen) Abschnitten.
34
KAPITEL 1. AUSSAGENLOGIK
1.4.26
Nachweis der Korrektheit des natürlichen Schliessens
folgenden Paragraphen beweisen wir die Korrektheit des natürlichen Schlies∀∃ Insensdenmathematisch
exakt. Dazu stellen wir Herleitungen und Herleitungsschritte etwas
anders dar:
wird dargestellt durch hs1 , hs2 , . . . , hsn , hi . . .ii


assume A.


wird dargestellt durch hA, d, Bi
d



therefore B.
s1 s2 . . . sn
Herleitungen und Herleitungsschritte können mit Hilfe der folgenden Regeln erzeugt werden.
Die leere Herleitung hi ist eine Herleitung.
Falls s ein Herleitungsschritt und d eine Herleitung ist, dann ist hs, di eine Herleitung.
Eine Formel A ist ein Herleitungsschritt.
Falls A und B Formeln sind und d eine Herleitung, dann ist hA, d, Bi ein Herleitungsschritt.
Alle Beweise über Herleitungen und Herleitungsschritte werden mit Induktion nach der Erzeugung gemäss diesen Regeln gehen.
Ψ’ mit der Bedeutung: Die Herleitung d
definieren zunächst eine Relation ‘d : Φ
∀∃ istWirkorrekt
und beweist unter den Annahmen Φ die Formelmenge Ψ. Als Hilfsrelation
N
benötigen wir die Relation ‘s : Φ N A’ mit der Bedeutung: Der Herleitungsschritt s ist korrekt
und beweist unter den Annahmen Φ die Formel A.
∀∃ Definition 1.4.27 Die Relationen d : Φ
Länge von d bzw. s definiert.
Es gilt hi : Φ
N
Falls s : Φ
N
A und d : Φ ∪ {A}
Falls Φ
A, dann gilt A : Φ
1N
N
Ψ und s : Φ
N
A sind mit Induktion nach der
Φ.
Falls d : Φ ∪ {A}
N
Ψ und Ψ
N
1N
N
Ψ, dann gilt hs, di : Φ
N
Ψ.
A.
B, dann gilt hA, d, Bi : Φ
N
A → B.
∀∃ Definition 1.4.28 Eine Formel A ist beweisbar aus Φ (geschrieben Φ
Herleitung d gibt mit d : Φ N Ψ und A ∈ Ψ.
N
A), falls es eine
Relationen d : Φ
Ψ und s : Φ
A benutzen wir nun, um zu zeigen, dass das
∀∃ Die
System des natürlichen Schliessens korrekt ist. Wir zeigen, wenn eine Herleitung d aus
N
N
einer Formelmenge Φ die Formelmenge Ψ herleitet, dann folgt Ψ logisch aus Φ. Für den Beweis
braucht man auch ein enstprechende Aussage für Herleitungsschritte. Falls der Herleitungsschritt s aus der Formelmenge Φ die Formel A herleitet, dann ist A eine logische Konsequenz
von Φ.
∀∃ Lemma 1.4.29 (Korrektheit von Herleitungen und Herleitungsschritten)
(a) Falls d : Φ
N
Ψ, dann gilt Φ |= Ψ.
(b) Falls s : Φ
N
A, dann gilt Φ |= A.
1.4. FORMALE BEWEISE
35
∀∃ Beweis. Die Behauptungen (a) und (b) werden simultan mit Induktion nach der Länge
von d bzw. s bewiesen.
Fall 1: Wir haben hi : Φ
Dann gilt Φ |= Φ.
N
Φ.
Fall 2: Wir haben s : Φ N A, d : Φ ∪ {A} N Ψ und hs, di : Φ N Ψ.
Mit der I.V. für s und d erhalten wir Φ |= A und Φ ∪ {A} |= Ψ. Daraus folgt Φ |= Ψ.
Fall 3: Wir haben Φ 1N A und A : Φ N A.
Da die Regeln des natürlichen Schliessens korrekt sind, folgt Φ |= A.
Fall 4: Wir haben d : Φ ∪ {A} N Ψ, Ψ 1N B und hA, d, Bi : Φ N A → B.
Aus der I.V. für d folgt, dass Φ ∪ {A} |= Ψ und, da Ψ |= B, gilt Φ ∪ {A} |= B.
Sei α eine Belegung, die alle Formeln aus Φ wahr macht.
Falls [[A]]α = 0, dann ist [[A → B]]α = 1.
Falls [[A]]α = 1, dann ist [[B]]α = 1, da Φ ∪ {A} |= B. Somit ist [[A → B]]α = 1.
Da α beliebig war, gilt Φ |= A → B. 2
Der Korrektheitssatz 1.4.22 und Korollar 1.4.23 folgen unmittelbar aus dem Lemma.
1.4.30
Nachweis der Vollständigkeit des natürlichen Schliessens
die Vollständikeit müssen wir zeigen, dass alle allgemeingültigen Formeln im Sy∀∃ Für
stem des natürlichen Schliessens herleitbar sind. Dazu benötigen wir einige elementare
Eigenschaften von Herleitungen. Das folgende Lemma sagt, dass Herleitungen korrekt bleiben,
wenn man zusätzliche Annahmen hinzunimmt und dadurch die Herleitung abschwächt. Eine
entsprechende Aussage gilt auch für Herleitungsschritte.
∀∃ Lemma 1.4.31 (Abschwächung)
(a) Falls d : Φ
N
Ψ, dann d : Φ ∪ Φ0
N
Ψ ∪ Φ0 .
(b) Falls s : Φ
N
A, dann s : Φ ∪ Φ0
N
A.
∀∃ Beweis. Die Behauptungen (a) und (b) werden simultan mit Induktion nach der Länge
von d bzw. s bewiesen.
Fall 1: Wir haben hi : Φ N Φ.
Dann gilt auch hi : Φ ∪ Φ0 N Φ ∪ Φ0 .
Fall 2: Wir haben s : Φ N A, d : Φ ∪ {A} N Ψ und hs, di : Φ N Ψ.
Mit der I.V. für s und d erhalten wir s : Φ ∪ Φ0 N A und d : Φ ∪ {A} ∪ Φ0
Also gilt nach Definition hs, di : Φ ∪ Φ0 N Ψ ∪ Φ0 .
Fall 3: Wir haben Φ 1N A und A : Φ N A.
Dann gilt auch Φ ∪ Φ0 1N A und somit A : Φ ∪ Φ0
N
A.
Fall 4: Wir haben d : Φ ∪ {A} N Ψ, Ψ 1N B und hA, d, Bi : Φ N A → B.
Aus der I.V. für d folgt, dass d : Φ ∪ Φ0 ∪ {A} N Ψ ∪ Φ0 .
Da Ψ ∪ Φ0 1N B, gilt nach Definition hA, d, Bi : Φ ∪ Φ0 N A → B. 2
N
Ψ ∪ Φ0 .
36
KAPITEL 1. AUSSAGENLOGIK
∀∃ Korollar 1.4.32 (Abschwächung)
Falls Φ N A, dann Φ ∪ Φ0 N A.
∀∃ Beweis. Sei Φ N A. Nach Definition gibt es eine Herleitung d und eine Formelmenge Ψ, so
dass d : Φ N Ψ und A ∈ Ψ.
Mit Lemma 1.4.31 folgt, dass d : Φ ∪ Φ0 N Ψ ∪ Φ0 . Somit gilt Φ ∪ Φ0 N A. 2
muss man aus gegebenen Herleitungen neue Herleitungen konstruieren. Der ein∀∃ Oft
fachste Fall ist, dass man eine Herleitung d an eine Herleitung d hinten anfügt. Die
2
1
Verkettung d1 ∗ d2 von zwei Herleitungen d1 und d2 ist wie folgt definiert:
hi ∗ d := d,
hs, d1 i ∗ d2 := hs, d1 ∗ d2 i.
Es ist nicht notwendigerweise der Fall, dass die Verkettung von zwei korrekten Herleitungen
wiederum korrekt ist, z.B. wenn die beiden Herleitungen verschiedene Mengen von Annahmen
benutzen. Das folgende Lemma sagt, dass man zwei korrekte Herleitungen d1 und d2 zu einer
korrekten Herleitung d1 ∗ d2 verketten kann, falls d1 eine Formelmenge Ψ einführt und d2 korrekt
ist unter den Annahmen Ψ.
∀∃ Lemma 1.4.33 (Transitivität)
Falls d1 : Φ1 N Φ2 und d2 : Φ2 N Φ3 , dann gilt d1 ∗ d2 : Φ1
N
∀∃ Beweis. Mit Induktion nach der Länge von d1 . Sei d1 : Φ1
Fall 1: d1 = hi.
Dann ist Φ1 = Φ2 und d1 ∗ d2 = d2 . Somit gilt d2 : Φ1
Fall 2: d1 = hs, di.
Dann gibt es eine Formel A, so dass s : Φ1
Mit der I.V. erhalten wir d ∗ d2 : Φ1 ∪ {A}
Nach Definition gilt hs, d ∗ d2 i : Φ1 N Φ3 .
Da d1 ∗ d2 = hs, d ∗ d2 i, sind wir fertig. 2
N
N
N
Φ3 .
N
Φ2 und d2 : Φ2
N
Φ3 .
Φ3 .
A und d : Φ1 ∪ {A}
Φ3 .
N
Φ2 .
Falls die Herleitungen d1 und d2 dieselben Annahmen benötigen, dann können sie zu einer
korrekten Herleitung d1 ∗ d2 verkettet werden.
∀∃ Lemma 1.4.34 (Vereinigung)
Falls d1 : Φ N Ψ1 und d2 : Φ N Ψ2 , dann gilt d1 ∗ d2 : Φ
N
Ψ1 ∪ Ψ2 .
∀∃ Beweis. Da d1 : Φ N Ψ1 ist Φ ⊆ Ψ1 .
Aus Lemma 1.4.31 (Abschwächung) folgt, dass d2 : Ψ1 N Ψ1 ∪ Ψ2 .
Aus Lemma 1.4.33 (Transitivität) folgt nun, dass d1 ∗ d2 : Φ N Ψ1 ∪ Ψ2 . 2
folgende Lemma sagt, dass wenn man eine Formel sowohl aus den Annahmen Φ ∪
∀∃ Das
{A} als auch aus den Annahmen Φ ∪ {¬A} herleiten kann, dann kann man sie bereits
aus den Annahmen Φ alleine herleiten. Dies entspricht dem Prinzip der Fallunterscheidung nach
A und ¬A. Dem Beweis des Lemmas kann man entnehmen, wie man aus einer Herleitung d1
von B aus Φ ∪ {A} und einer Herleitung d2 von B aus Φ ∪ {¬A} eine Herleitung d von B aus Φ
bekommt. In der neuen Herleitung braucht man sowohl das Prinzip des ausgeschlossenen Dritten
(TND) als auch das Prinzip der Fallunterscheidung (∨ e).
1.4. FORMALE BEWEISE
37
∀∃ Lemma 1.4.35 (Tertium non datur)
Falls Φ ∪ {A} N B und Φ ∪ {¬A} N B, dann gilt Φ
∀∃ Beweis. Sei d1 : Φ ∪ {A}
N
N
Ψ1 und d2 : Φ ∪ {¬A}
B.
N
Ψ2 mit B ∈ Ψ1 ∩ Ψ2 .
Sei d die folgende Herleitung:
1:
A ∨ ¬A.
2:
case A.
3:
d1 .
4:
hence B.
5:
case ¬A.
6:
[TND]
d2 .
7:
hence B.
8:
B.
[(∨ e) mit 1, 4 und 7]
Dann gibt es eine Formelmenge Ψ mit d : Φ
N
Ψ und B ∈ Ψ.
(Ψ = Φ ∪ {A ∨ ¬A, A → B, ¬A → B, B}.)
Also gilt Φ
N
B. 2
Schnittlemma werden Formeln herausgeschnitten. Wenn die n Formeln
∀∃ ABeim, . . .folgenden
, A alle aus den Annahmen Φ herleitbar sind und die Formel B ihrerseits aus
1
n
den Annahmen A1 , . . . , An herleitbar ist, dann kann man A1 , . . . , An herausschneiden und B
aus Φ herleiten. Dem Beweis des Lemmas kann man entnehmen, dass man dazu einfach die
gegebenen Herleitungen anneinanderfügen muss.
∀∃ Lemma 1.4.36 (Schnitt)
Falls Φ N Ai für i = 1, . . . , n und {A1 , . . . , An }
∀∃ Beweis. Sei Φ
N
N
B, dann gilt Φ
Ai für i = 1, . . . , n und {A1 , . . . , An }
N
N
B.
B.
Nach Definition gibt es Herleitungen di und Formelmengen Ψi , so dass di : Φ
für i = 1, . . . , n.
N
Weiter gibt es eine Herleitung d und eine Formelmenge Ψ mit d : {A1 , . . . , An }
Nach Lemma 1.4.34 (Vereinigung) gilt d1 ∗ . . . ∗ dn : Φ
N
N
Ψ und B ∈ Ψ.
Ψ ∪ Ψ1 ∪ . . . ∪ Ψn .
Aus Lemma 1.4.33 (Transitivität) folgt nun, dass d1 ∗ . . . ∗ dn ∗ d : Φ
N
N
Ψ1 ∪ . . . ∪ Ψn .
Mit Lemma 1.4.31 (Abschwächung) folgt, dass d : Ψ1 ∪ . . . ∪ Ψn
Da B ∈ Ψ, gilt nach Definition, Φ
Ψi und Ai ∈ Ψi
N
Ψ ∪ Ψ1 ∪ . . . ∪ Ψn .
B. 2
haben gesehen, dass sich der Wahrheitswert einer Konjunktion A ∧ B aus den
∀∃ Wir
Wahrheitswerten der beiden Konjunkte A and B berechnen lässt nach folgenden Regeln:
(a) Falls A wahr ist und B wahr ist, dann ist A ∧ B wahr; (b) falls A falsch ist, dann ist A ∧ B
falsch; (c) falls B falsch ist, dann ist A ∧ B falsch. Diese drei Regeln widerspiegeln sich in dem
folgenden Lemma:
∀∃ Lemma 1.4.37 (Konjunktion)
38
KAPITEL 1. AUSSAGENLOGIK
(a) A, B
N
A∧B
(b) ¬A
N
¬(A ∧ B)
(c) ¬B
N
¬(A ∧ B)
∀∃ Beweis. Behauptung (a) folgt mit der Regel (∧ i). Hier ist eine formale Herleitung für (b):
1:
{¬A}.
2:
assume A ∧ B.
3:
[Globale Annahme]
A.
[(∧ e) mit 2]
4:
therefore ⊥.
5:
¬(A ∧ B).
[(¬ e) mit 1 und 3]
[(¬ i) mit 4]
Behauptung (c) wird wie (b) gezeigt. 2
Wahrheitswert einer Disjunktion A ∨ B ergibt sich aus den Wahrheitswerten der
∀∃ Der
beiden Disjunkte A and B nach folgenden Regeln: (a) Falls A wahr ist, dann ist A ∨ B
wahr; (b) falls B wahr ist, dann ist A ∨ B wahr; (c) falls A und B beide falsch sind, dann ist
A ∨ B falsch. Diese drei Regeln sind enthalten in dem folgenden Lemma.
∀∃ Lemma 1.4.38 (Disjunktion)
(a) A
N
A∨B
(b) B
N
A∨B
(c) ¬A, ¬B
N
¬(A ∨ B)
∀∃ Beweis. Die Behauptungen (a) und (b) folgen mit den Regeln (∨ i). Hier ist eine formale
Herleitung für (c):
1:
{¬A, ¬B}.
2:
assume A ∨ B.
3:
case A.
4:
hence ¬(A ∨ B).
5:
case B.
6:
hence ¬(A ∨ B).
7:
therefore ¬(A ∨ B).
[Globale Annahmen]
[(¬ e) mit 3 und 1]
[(¬ e) mit 5 und 1]
[(∨ e) mit 2, 4 und 6]
2
Der Wahrheitswert einer Implikation A → B ergibt sich aus den Wahrheitswerten der
∀∃ beiden
Teilformeln A and B nach folgenden Regeln: (a) Falls A falsch ist, dann ist
A → B wahr; (b) falls B wahr ist, dann ist A → B wahr; (c) falls A wahr und B falsch it, dann
ist A → B falsch. Diese drei Regeln sind enthalten in dem folgenden Lemma.
∀∃ Lemma 1.4.39 (Implikation)
1.4. FORMALE BEWEISE
(a) ¬A
(b) B
N
N
39
A→B
A→B
(c) A, ¬B
N
¬(A → B)
∀∃ Beweis. Eine Herleitung für Behauptung (a):
1:
{¬A}.
2:
assume A.
3:
therefore B.
[Globale Annahme]
[(¬ e) mit 2 und 1]
Eine Herleitung für Behauptung (b):
1:
{B}.
2:
assume A.
3:
therefore B.
[Globale Annahme]
Eine Herleitung für Behauptung (c):
1:
{A, ¬B}.
2:
assume A → B.
3:
[Globale Annahmen]
B.
[MP mit 1 und 2]
4:
therefore ⊥.
5:
¬(A → B).
[(¬ e) mit 3 und 1]
[(¬ i) mit 4]
2
Aequivalenz A ↔ B kann aufgespalten werden in die zwei Implikationen A → B
∀∃ Eine
und B → A. (a) Falls A → B und B → A wahr sind, dann ist A ↔ B wahr; (b) falls
A → B falsch ist, dann ist A ↔ B falsch; (c) falls B → A falsch ist, dann ist A ↔ B falsch.
∀∃ Lemma 1.4.40 (Aequivalenz)
(a) A → B, B → A
N
A↔B
(b) ¬(A → B)
N
¬(A ↔ B)
(c) ¬(B → A)
N
¬(A ↔ B)
∀∃ Beweis. Die Behauptung (a) folgt mit der Regel (↔ i).
Eine Herleitung für Behauptung (b):
1:
{¬(A → B)}.
2:
assume A ↔ B.
3:
A → B.
4:
therefore ⊥.
5:
¬(A ↔ B).
[Globale Annahme]
[(↔ e) mit 2]
[(¬ e) mit 1 und 3]
[(¬ i) mit 4]
40
KAPITEL 1. AUSSAGENLOGIK
Die Behauptung (c) geht analog zu (b). 2
vorangehenden drei Lemmata kann man verallgemeinern auf beliebige Formeln.
∀∃ Die
Dazu definieren wir für eine Belegung α und eine Aussagenvariable p eine Formel p
α
wie folgt:
α
p :=
p,
falls α(p) = 1;
¬p, falls α(p) = 0.
Die Berechnung des Wahrheitswertes einer Formel aus der Belegung der Aussagenvariablen kann
man mit formalen Herleitungen simulieren.
∀∃ Lemma 1.4.41 Sei α eine Belegung und F eine Formel, deren Aussagenvariablen enthalten
sind in der Liste p1 , . . . , pn .
(a) Falls [[F ]]α = 1, dann gilt {pα1 , . . . , pαn }
N
F.
(b) Falls [[F ]]α = 0, dann gilt {pα1 , . . . , pαn }
N
¬F .
∀∃ Beweis. (a) und (b) werden simultan mit Induktion nach der Länge der Formel F bewiesen.
Sei Φ die Formelmenge {pα1 , . . . , pαn }.
Fall 1: F ist eine Aussagenvariable pi .
(a) Falls [[pi ]]α = 1, dann ist pαi = pi und wir haben Φ
pi .
N
(b) Falls [[pi ]]α = 0, dann ist pαi = ¬pi und wir haben Φ
N
¬pi .
Fall 2: F ist die Konstante >.
Dann ist [[>]]α = 1 und mit dem Axiom (> i) erhalten wir Φ
N
>.
Fall 3: F ist die Konstante ⊥.
Dann ist [[⊥]]α = 0. Aus ⊥ → ⊥ kann man mit (¬ i) auf ¬⊥ schliessen. Also haben wir Φ
N
¬⊥.
Fall 4: F hat die Gestalt ¬A.
(a) Falls [[¬A]]α = 1, dann ist [[A]]α = 0 und mit der I.V. folgt, dass Φ
N
¬A.
(b) Falls [[¬A]]α = 0, dann ist [[A]]α = 1 und mit der I.V. folgt, dass Φ
N
A.
Da A
N
¬¬A (Beispiel 1.4.18), erhalten wir mit einem Schnitt (Lemma 1.4.36) Φ
N
¬¬A.
Fall 5: F hat die Gestalt A ∧ B.
(a) Falls [[A ∧ B]]α = 1, dann ist [[A]]α = 1 und [[B]]α = 1. Mit der I.V. erhalten wir Φ
Φ N B.
Da A, B
N
A ∧ B (Lemma 1.4.37), folgt mit einem Schnitt, dass Φ
N
N
A und
A ∧ B.
(b) Falls [[A ∧ B]]α = 0, dann ist [[A]]α = 0 oder [[B]]α = 0.
Falls [[A]]α = 0, dann erhalten wir mit der I.V., dass Φ
Nach Lemma 1.4.37 gilt ¬A
N
N
¬A.
¬(A ∧ B). Mit einem Schnitt erhalten wir Φ
Falls [[B]]α = 0, dann erhalten wir mit der I.V., dass Φ
Nach Lemma 1.4.37 gilt ¬B
N
N
Dieser Fall geht wie Fall 5. Wir benötigen Lemma 1.4.38.
¬(A ∧ B).
N
¬(A ∧ B).
¬B.
¬(A ∧ B). Mit einem Schnitt erhalten wir Φ
Fall 6: F hat die Gestalt A ∨ B.
N
1.5. BOOLESCHE FUNKTIONEN
41
Fall 7: F hat die Gestalt A → B.
Dieser Fall geht ebenfalls wie Fall 5. Man benutzt Lemma 1.4.39.
Fall 8: F hat die Gestalt A ↔ B.
Dieser Fall benutzt Fall 7 und Lemma 1.4.40. 2
∀∃ Satz 1.4.42 (Vollständigkeit des Systems des natürlichen Schliessens)
Falls |= A, dann gilt N A.
∀∃ Beweis. Sei A eine allgemeingültige Formel mit Aussagenvariablen p1 , . . . , pn .
Dann ist [[A]]α = 1 für jede Belegung α und es gilt {pα1 , . . . , pαn }
N
A nach Lemma 1.4.41.
Wir zeigen die folgende Aussage (∗) für j = n, n − 1, . . . , 0:
(∗) Falls Li ∈ {pi , ¬pi } für i = 1, . . . , j, dann gilt {L1 , . . . , Lj }
N
A.
Die Aussage (∗) gilt für j = n (Lemma 1.4.41).
Nehmen wir an, dass j < n und dass (∗) für j + 1 gilt. Wir wollen zeigen dass (∗) für j gilt.
Nach Voraussetzung gilt {L1 , . . . , Lj } ∪ {pj+1 }
N
A und {L1 , . . . , Lj } ∪ {¬pj+1 }
Mit Lemma 1.4.35 (Tertium non datur) folgt, dass {L1 , . . . , Lj }
Für j = 0 schliesslich sagt (∗), dass ∅
Schliessens herleitbar. 2
1.5
N
N
N
A.
A. Somit haben wir (∗) für j.
A. Somit ist die Formel A im System des natürlichen
Boolesche Funktionen
Die Wahrheitswerte 1 (wahr) und 0 (falsch) werden in der Elektrotechnik als “Strom” und
“kein Strom” interpretiert. Funktionen, die aus Eingabewerten 0 und 1 einen Ausgabewert
0 oder 1 berechnen, nennt man Boolesche Funktionen. Boolesche Funktionen spielen eine
wichtige Rolle in der Digitaltechnik.
Eine Boolesche Funktion ist eine Funktion f : Bn → B.
Eine Boolesche Funktion kann als Blackbox aufgefasst werden, die zu den Eingabewerten
x1 , . . . , xn eine Ausgabe f (x1 , . . . , xn ) liefert.
[Eingabe]
x1
x2
..
.
-
xn
-
Black
Box
- f (x1 , x2 , . . . , xn )
[Ausgabe]
Die Blackbox kann z.B. ein digitaler Schaltkreis sein.
Eine Boolesche Funktion mit einer Ausgabe kann als Tabelle dargestellt werden. Die ersten
n Kolonnen enthalten alle 2n möglichen Kombinationen für die Eingabewerte x1 , . . . , xn .
In der Kolonne ganz rechts wird der Ausgabewert eingetragen.
42
KAPITEL 1. AUSSAGENLOGIK
Als Beispiel betrachten wir die folgende Boolesche Funktion f mit drei Argumenten:
x1 x2 x3 f (x1 , x2 , x3 )
1
1
1
1
1
1
0
1
1
0
1
0
1
0
0
0
0
1
1
1
0
1
0
0
0
0
1
1
0
0
0
0
[Input/Output-Tabelle von f ]
Diese Tabelle erinnert an eine Wahrheitstabelle. Es stellt sich also die Frage, ob es eine
aussagenlogische Formel gibt, deren Wahrheitstafel genau dieser Tabelle entspricht. Dazu
gehen wir wie folgt vor:
Schritt 1: Wir betrachten alle Zeilen der Tabelle, in denen die Funktion f den Ausgabewert 1 hat.
Schritt 2: Wir nehmen drei Aussagenvariablen p1 , p2 , p3 und ordnen diesen Zeilen Konjunktionen zu:
x1 x2 x3 Konjunktion
1
1
1
p1 ∧ p2 ∧ p3
1
1
0
p1 ∧ p2 ∧ ¬p3
0
1
1
¬p1 ∧ p2 ∧ p3
0
0
1
¬p1 ∧ ¬p2 ∧ p3
[Zeilen mit Ausgabe 1]
Falls xi gleich 1 ist, nehmen wir pi . Falls xi gleich 0 ist, nehmen wir ¬pi .
Schritt 3: Schliesslich bilden wir die Disjunktion über die vier Konjunktionen und erhalten
die folgende Formel F :
F := (p1 ∧ p2 ∧ p3 ) ∨ (p1 ∧ p2 ∧ ¬p3 ) ∨ (¬p1 ∧ p2 ∧ p3 ) ∨ (¬p1 ∧ ¬p2 ∧ p3 )
1.5. BOOLESCHE FUNKTIONEN
43
Die Wahrheitstafel der Formel F ist identisch mit der Tabelle der Funktion f :
p1 p2 p3 F
1
1
1
1
1
1
0
1
1
0
1
0
1
0
0
0
0
1
1
1
0
1
0
0
0
0
1
1
0
0
0
0
[Wahrheitstafel für die Formel F ]
Dass die Formel F die Funktion f darstellt, kann man auch einsehen ohne die Wahrheitstafel hinzuschreiben. Betrachten wir die Formel F :
(p1 ∧ p2 ∧ p3 ) ∨ (p1 ∧ p2 ∧ ¬p3 ) ∨ (¬p1 ∧ p2 ∧ p3 ) ∨ (¬p1 ∧ ¬p2 ∧ p3 )
{z
} |
{z
} |
{z
} |
{z
}
|
D1
D2
D3
D4
Die Formel F erhält den Wert 1 genau dann, wenn mindestens eine der vier Disjunkte D1 ,
D2 , D3 , D4 den Wert 1 bekommt. Ein solches Di ist eine Konjunktion L1 ∧ L2 ∧ L3 und
erhält den Wert 1 genau dann, wenn alle drei Konjunkte L1 , L2 , L3 den Wert 1 bekommen,
und das ist genau dann der Fall, wenn die Konjunktion einer Zeile der Tabelle entspricht,
in der die Funktion f den Wert 1 hat.
Man kann auch anders vorgehen.
Schritt 1: Wir betrachten alle Zeilen der Tabelle, in denen die Funktion f den Ausgabewert 0 hat.
Schritt 2: Diesen Zeilen ordnen wir die folgenden Disjunktionen zu:
x1 x2 x3 Disjunktion
1
0
1
¬p1 ∨ p2 ∨ ¬p3
1
0
0
¬p1 ∨ p2 ∨ p3
0
1
0
p1 ∨ ¬p2 ∨ p3
0
0
0
p1 ∨ p2 ∨ p3
[Zeilen mit Ausgabe 0]
Falls xi gleich 1 ist, nehmen wir ¬pi . Falls xi gleich 0 ist, nehmen wir pi .
Schritt 3: Schliesslich bilden wir die Konjunktion der vier Disjunktionen und erhalten die
folgende Formel G:
G := (¬p1 ∨ p2 ∨ ¬p3 ) ∧ (¬p1 ∨ p2 ∨ p3 ) ∧ (p1 ∨ ¬p2 ∨ p3 ) ∧ (p1 ∨ p2 ∨ p3 )
|
{z
} |
{z
} |
{z
} |
{z
}
C1
C2
C3
C4
44
KAPITEL 1. AUSSAGENLOGIK
Die Formel G stellt ebenfalls die Funktion f dar. Die Formel G erhält den Wert 0 genau
dann, wenn mindestens eine der vier Konjunkte C1 , C2 , C3 , C4 den den Wert 0 bekommt.
Ein solches Ci ist eine Disjunktion L1 ∨ L2 ∨ L3 und erhält den Wert 0 genau dann, wenn
alle drei Disjunkte L1 , L2 , L3 den Wert 0 haben, und dies ist genau dann der Fall, wenn
sie einer Zeile der Tabelle entspricht, in der die Funktion f den Wert 0 hat. Also stellt
die Formel G ebenfalls die Funktion f dar und ist somit logisch aequivalent zu F .
Die Formel F ist eine Disjunktion von Konjunktionen. Man sagt, dass F in disjunktiver
Normalform ist. Die Formel G dagegen, ist ein Konjunktion von Disjunktionen. Man sagt,
dass G in konjunktiver Normalform ist.
Beide Formeln stellen dieselbe Funktion dar. Die Funktion f lässt sich aber auch durch
einfachere Formeln darstellen, z.B. durch
(p1 ∧ p2 ) ∨ (¬p1 ∧ p3 ).
Diese Formel nennt man auch Boolesches Konditional und schreibt sie als
if p1 then p2 else p3 .
Betrachten wir nochmals die Input/Output-Tabelle der Funktion f . Wir sehen, dass wenn
x1 = 1 ist, der Ausgabewert von f genau der Eingabewert x2 ist. Wenn x1 = 0 ist, dann
ist der Ausgabewert von f der Eingabewert x3 .
Die obige Konstruktion der Formeln F und G aus f kann man ganz allgemein für beliebige
Boolesche Funktionen durchführen. Da A ∧ B logisch aequivalent ist zu ¬(¬A ∨ ¬B),
genügen im Prinzip die Operatoren ¬ und ∨ zur Konstruktion der Formeln. Es gilt der
folgende Satz:
Satz 1.5.1 (Funktionale Vollständigkeit der Aussagenlogik)
Jede Boolesche Funktion ist darstellbar durch eine aussagenlogische Formel, in der nur
die Operatoren ¬ und ∨ vorkommen.
Man sagt auch, dass die Operatoren ¬ und ∨ funktional vollständig sind. Genau so sind
auch die Operatoren ¬ und ∧, oder auch die Operatoren ¬ und → funktional vollständig.
Die folgende Tabelle enthält die 16 möglichen Booleschen Funktionen f0 , f1 , . . . , f15 mit
zwei Argumenten:
p
q
f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f15
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
0
1
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
1
0
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
1
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
1.5. BOOLESCHE FUNKTIONEN
45
Die 16 Funktionen können wie folgt durch logische Formeln dargestellt werden:
f0 = ⊥
f8 = ¬(p ∨ q) = ¬p ∧ ¬q
f1 = p ∧ q
f9 = p ↔ q = (p ∧ q) ∨ (¬p ∧ ¬q)
f2 = p ∧ ¬q = ¬(p → q)
f10 = ¬q
f3 = p
f11 = q → p = ¬q ∨ p
f4 = ¬p ∧ q = ¬(q → p)
f12 = ¬p
f5 = q
f13 = p → q = ¬p ∨ q
f6 = ¬(p ↔ q) = (p ∨ q) ∧ ¬(p ∧ q)
f14 = ¬(p ∧ q) = ¬p ∨ ¬q
f7 = p ∨ q
f15 = >
Die Funktion f6 ist das exklusive Oder von p und q (XOR).
Die Funktion f14 ist das NAND (not and ). Die Verknüpfung NAND ist wie folgt definiert:
(p NAND q) := ¬(p ∧ q)
Im Prinzip genügt das NAND. Die Negation und die Disjunktion können nämlich wie folgt
geschrieben werden:
¬p = ¬(p ∧ p) = p NAND p
p ∨ q = ¬(¬p ∧ ¬q) = (p NAND p) NAND (q NAND q)
Also können alle Booleschen Funktionen durch einen Ausdruck, in dem nur der Operator
NAND vorkommt, dargestellt werden.
Bemerkung zur Komplexität. Wenn wir die Ausdrücke für die Negation und die Dis∀∃ Eine
junktion betrachten, erscheint es, als ob es zu einer exponentiellen Aufblähung kommt,
da auf der rechten Seite sowohl das p als auch das q je zweimal vorkommen. Dies muss nicht
sein, wenn wir auch die Konstante > zulassen. Die Konstante > kann zum Beispiel so dargestellt
werden (wobei r eine fest gewählte Aussagenvariable ist):
> = r ∨ ¬r = ¬(r ∧ ¬r) = r NAND (r NAND r)
Dann erhalten wir:
¬p = ¬(p ∧ >) = p NAND >
p ∨ q = ¬(¬p ∧ ¬q) = (p NAND >) NAND (q NAND >)
Nun kommen die Variablen p und q auf der rechten Seite nur noch je einmal vor.
Warum sind die Operatoren ↔ und ¬ nicht funktional vollständig? Betrachten wir
∀∃ zuerst
die Gesetze der logischen Aequivalenz:
(1) ((A ↔ B) ↔ C) ↔ (A ↔ (B ↔ C))
(2) (A ↔ B) ↔ (B ↔ A)
(3) (A ↔ A) ↔ >
[↔ ist assoziativ]
[↔ ist kommutativ]
46
KAPITEL 1. AUSSAGENLOGIK
(4) (A ↔ ¬A) ↔ ⊥
(5) (A ↔ >) ↔ A
(6) (A ↔ ⊥) ↔ ¬A
(7) ¬(A ↔ B) ↔ (¬A ↔ B)
Mit Hilfer dieser allgemeingültigen Gesetze sieht man leicht, dass jede Formel aufgebaut aus den
Aussagenvariablen p und q mit ↔ und ¬ logisch aequivalent ist zu einer der folgenden Formeln:
>, ⊥, p, q, ¬p, ¬q, p ↔ q, ¬(p ↔ q)
Also kann man mit ↔ und ¬ nur 8 der möglichen 16 zweistelligen Booleschen Funktionen
darstellen. Dieselben Funktion kann man mit XOR und ¬ darstellen.
zeigen, dass eine Booleschen Funktion monoton ist genau dann, wenn sie mit >,
∀∃ Wir
⊥, ∧ und ∨ dargestellt werden kann.
∀∃ Definition 1.5.2 Eine Boolesche Funktion f : Bn → B ist monoton, falls für alle x1 , . . . , xn
und y1 , . . . , yn gilt: Falls x1 ≤ y1 , . . . , xn ≤ yn , dann ist f (x1 , . . . , xn ) ≤ f (y1 , . . . , yn ).
Dabei bezeichnet ≤ die natürliche Ordnung auf der Menge {0, 1} mit 0 ≤ 0, 0 ≤ 1 und 1 ≤ 1.
∀∃ Satz 1.5.3 (Darstellung der monotonen Booleschen Funktionen) Eine Boolesche
Funktion ist monoton genau dann, wenn sie durch eine Formel mit >, ⊥, ∧ und ∨ dargestellt
werden kann.
∀∃ Beweis. Dass eine Formel, in der nur Aussagenvariablen und >, ⊥, ∧ und ∨ vorkommen,
eine monotone Funktion darstellt, ist leicht zu sehen.
Für die umgekehrte Richtung zeigen wir mit Induktion nach n: Falls f : Bn → B eine n-stellige
Boolesche Funktion ist, dann ist f durch eine Formel mit p1 , . . . , pn ,>, ⊥, ∧ und ∨ darstellbar.
Induktionsverankerung n = 0: Dann ist f entweder die Konstante 0 oder die Konstante 1, also
durch ⊥ oder > darstellbar.
Induktionsschrit n → n + 1: Sei f : Bn+1 → B eine (n + 1)-stellige Funktion. Wir betrachten die
beiden n-stelligen Funktionen g0 : Bn → B und g1 : Bn → B definiert durch
g0 (x1 , . . . , xn ) = f (x1 , . . . , xn , 0)
und g1 (x1 , . . . , xn ) = f (x1 , . . . , xn , 1).
Da f monoton ist, sind auch g0 und g1 monoton. Mit der Induktionsvoraussetzung erhalten wir
Formeln A und B mit p1 , . . . , pn , >, ⊥, ∧ und ∨, die g0 und g1 darstellen. Betrachten wir die
folgende Formel:
C = A ∨ (B ∧ pn+1 )
Wir behaupten, dass C die Funktion f darstellt. Seien x1 , . . . , xn+1 ∈ B und sei α die entsprechende Belegung mit
1, falls xi = 1;
α(pi ) =
0, falls xi = 0.
Fall 1, xn+1 = 0: Dann ist f (x1 , . . . , xn , xn+1 ) = g0 (x1 , . . . , xn ).
Fall 1.1, g0 (x1 , . . . , xn ) = 0: Dann ist [[A]]α = 0 und, da α(pn+1 ) = 0, auch [[A ∨ (B ∧ pn+1 )]]α = 0.
1.6. NORMALFORMEN
47
Fall 1.2, g0 (x1 , . . . , xn ) = 1: Dann ist [[A]]α = 1 und somit auch [[A ∨ (B ∧ pn+1 )]]α = 1.
Fall 2, xn+1 = 1: Dann ist f (x1 , . . . , xn , xn+1 ) = g1 (x1 , . . . , xn ).
Fall 2.1, g1 (x1 , . . . , xn ) = 0: Dann ist [[B]]α = 0. Wegen der Monotonie der Funktion f ist auch
g0 (x1 , . . . , xn ) = 0 sein. Sonst hätten wir nämlich
1 = g0 (x1 , . . . , xn ) = f (x1 , . . . , xn , 0) ≤ f (x1 , . . . , xn , 1) = g1 (x1 , . . . , xn ) = 0,
was nicht möglich ist. Also ist auch [[A]]α = 0 und somit [[A ∨ (B ∧ pn+1 )]]α = 0.
Fall 2.2, g1 (x1 , . . . , xn ) = 1: Dann ist [[B]]α = 1 und somit [[A ∨ (B ∧ pn+1 )]]α = 1. 2
1.6
Normalformen
Im letzten Abschnitt haben wir an einem Beispiel gezeigt, wie man aus der Input/OutputTabelle einer Booleschen Funktion eine Formel in disjunktiver Normal und eine Formel in
konjunktiver Normalform konstruieren kann. Dieselbe Methode kann man auch benutzen,
um aus der Wahrheitstafel einer beliebigen aussagenlogischen Formel logisch aequivalente
konjunktive und disjunktive Normalformen zu bekommen.
Der Umweg über die Wahrheitstafel ist aber nicht zwingend. Man kann Normalformen
auch direkt mit Hilfe von Ersetzungen berechnen. Ähnlich wie man in der Algebra in einem
Ausdruck einen Teilausdruck durch etwas Gleiches ersetzten darf und das Resultat zu dem
ursprünglichen Ausdruck immer noch gleich ist, so darf man in der Logik in einer Formel
eine Teilformel durch eine logisch aequivalente Formel ersetzen und das Resultat bleibt
logisch aequivalent zur ursprünglichen Formel. In der Algebra darf man z.B. den Ausdruck
x2 + 2xy + y 2 , wo immer er auftritt, durch (x + y)2 ersetzen, da die beiden Ausdrücke
gleich sind. In der Logik darf man z.B. die Teilformel p → q durch ¬p ∨ q ersetzen, da
p → q logisch aequivalent ist zu ¬p ∨ q:
r ∨ (p → q)
| {z }
Teilformel
wird zu r ∨ (¬p ∨ q)
| {z }
ersetzt
Mit der Schreibweise F [A] deutet man an, dass in der Formel F die Formel A an einer
bestimmten Stelle als Teilformel vorkommt. Wenn man das Vorkommen von A durch eine
Formel B ersetzt, schreibt man für das Resultat der Ersetzung F [B]. Wenn die Formeln
A und B logisch aequivalent sind, dann sind auch F [A] und F [B] logisch aequivalent.
Dieses Prinzip wird auch Aequivalenztheorem oder Ersetzungstheorem genannt.
Satz 1.6.1 (Aequivalenztheorem, Ersetzungstheorem)
Falls A und B logisch aequivalente Formeln sind, dann sind auch F [A] und F [B] logisch
aequivalent.
Man kann sogar immer beweisen, dass unter der Annahme, dass A und B aequivalent
sind, auch F [A] und F [B] aequivalent sind.
Satz 1.6.2 Es gilt A ↔ B
N
F [A] ↔ F [B].
Das Ersetzungsprinzip wird nun benutzt um verschiedene Normalformen zu berechnen.
48
KAPITEL 1. AUSSAGENLOGIK
1.6.3
Die Negationsnormalform (NNF)
Die Negationsnormalform einer Formel erhält man, indem man zuerst alle Aequivalenzen (↔) und Implikationen (→) in der Formel eliminiert und dann die Negation (¬) nach
innen zieht.
Schritt 1: Elimination der Aequivalenz.
A↔B
wird überall ersetzt durch (A → B) ∧ (B → A)
Schritt 2: Elimination der Implikation.
A→B
wird überall ersetzt durch ¬A ∨ B
Schritt 3: Hineinziehen der Negation (solange es geht).
¬¬A
wird ersetzt durch A
[Gesetz der doppelten Negation]
¬(A ∧ B) wird ersetzt durch ¬A ∨ ¬B
[Gesetz von DeMorgan]
¬(A ∨ B) wird ersetzt durch ¬A ∧ ¬B
[Gesetz von DeMorgan]
In Schritt 1 könnte man genau so gut A ↔ B durch (A ∧ B) ∨ (¬A ∧ ¬B) ersetzten. Nach
der Anwendung der Schritte 1 und 2 enthält die Formel keine Aequivalenzen (↔) und
keine Implikationen (→) mehr.
Die Ersetzungen im Schritt 3 werden solange gemacht, bis es nicht mehr geht. Wenn keine
Ersetzung mehr gemacht werden kann, dann kommt die Negation (¬) in der Formel nur
noch unmittelbar vor Aussagenvariablen vor. (Käme sie vor einer Negation, Konjunktion
oder Disjunktion vor, könnte man eine der drei Ersetzungsregeln von Schritt 3 anwenden.)
Am Schluss erhält man eine Formel, die aus aussagenlogischen Variablen (p) und negierten
aussagenlogischen Variablen (¬p) aufgebaut ist mit den beiden Operatoren ∧ und ∨. Eine
solche Formel, sagt man, ist in Negationsnormalform. Aussagenvariablen und negierte
Aussagenvariablen nennt man auch Literale.
Beispiel 1.6.4 Wir berechnen eine Negationsnormalform von ¬((p ∨ q) ∧ (r → s)).
¬((p ∨ q) ∧ (r → s))
=⇒ ¬((p ∨ q) ∧ (¬r ∨ s))
[Elimination von →]
=⇒ ¬(p ∨ q) ∨ ¬(¬r ∨ s)
[DeMorgan]
=⇒ (¬p ∧ ¬q) ∨ ¬(¬r ∨ s)
[DeMorgan]
=⇒ (¬p ∧ ¬q) ∨ (¬¬r ∧ ¬s)
[DeMorgan]
=⇒ (¬p ∧ ¬q) ∨ (r ∧ ¬s)
[Doppelte Negation]
Die Negationsnormalform einer Formel ist nicht eindeutig. Zum Beispiel sind die beiden
Formeln (¬p ∨ q) ∧ (¬q ∨ p) und (p ∧ q) ∨ (¬p ∧ ¬q) beide in Negationsnormalform und
logisch aequivalent zu p ↔ q.
1.6. NORMALFORMEN
1.6.5
49
Weitere Vereinfachungen
Oft kann man eine Formel noch weiter vereinfachen, indem man die Assoziativität, Kommutativität und Idempotenz der Konjunktion und der Disjunktion benutzt.
A ∧ (B ∧ C) ist aequivalent zu (A ∧ B) ∧ C
[Assoziativität von ∧]
A ∨ (B ∨ C) ist aequivalent zu (A ∨ B) ∨ C
[Assoziativität von ∨]
A∧B
ist aequivalent zu B ∧ A
[Kommutativität von ∧]
A∨B
ist aequivalent zu B ∨ A
[Kommutativität von ∨]
A∧A
ist aequivalent zu A
[Idempotenz von ∧]
A∨A
ist aequivalent zu A
[Idempotenz von ∨]
Die Konstanten > und ⊥ können auch zur Vereinfachung benutzt werden:
A ∧ ¬A ist aequivalent zu ⊥
A ∨ ¬A ist aequivalent zu >
1.6.6
A∧⊥
ist aequivalent zu ⊥
A∧>
ist aequivalent zu A
A∨⊥
ist aequivalent zu A
A∨>
ist aequivalent zu >
Operatoren für endliche Konjunktionen und Disjunktionen
Da die Konjunktion und die Disjunktion assoziativ ist, spielt die Klammerung keine Rolle,
und man benutzt die folgenden Schreibweisen für endliche Konjunktionen und Disjunktionen:
n
^
^
Ai
steht für A1 ∧ . . . ∧ An
und
n
_
_
i=1
Ai
steht für A1 ∨ . . . ∨ An
i=1
Der Operator
P
zeichen .
VV
n
^
^
entspricht dem Produktzeichen
Ai
n
Y
entspricht
i=1
Für die Operatoren
tion wie folgt:
xi
i=1
VV
und
WW
und
Q
n
_
_
und der Operator
Ai
entspricht
i=1
W
W
n
X
dem Summen-
xi
i=1
definiert man die leere Konjunktion und die leere Disjunk-
^
^
Ai := >
i∈∅
_
_
Ai := ⊥
i∈∅
Dies ist in Analogie zur Mathematik, wo das leere Produkt gleich 1 und die leere Summe
gleich 0 ist:
Y
X
xi = 1
xi = 0
i∈∅
i∈∅
50
KAPITEL 1. AUSSAGENLOGIK
1.6.7
Das Distributivgesetz
In der Algebra gilt das Distributivgesetz:
x ∗ (y + z) = (x ∗ y) + (x ∗ z)
In der Logik gilt das entsprechende Gesetz für die Konjunktion und die Disjunktion:
A ∧ (B ∨ C) ist aequivalent zu (A ∧ B) ∨ (A ∧ C)
In der Logik ist aber auch die Disjunktion distributiv über der Konjunktion:
A ∨ (B ∧ C) ist aequivalent zu (A ∨ B) ∧ (A ∨ C)
In der Algebra gilt das entsprechende nicht:
x + (y ∗ z) 6= (x + y) ∗ (x + z)
In der Algebra wird das Distributivgesetz benutzt um einen Ausdruck als Summe von
Produkten darzustellen. Beispiel:
(a + b) ∗ (c + d) = ac + ad + bc + bd
In der Logik werden die Distributivgesetze benutzt um Formeln in konjunktive und disjunktive Normalformen zu bringen.
1.6.8
Die konjunktive Normalform (KNF)
Eine Formel ist in konjunktiver Normalform, falls sie eine Konjunktion von (einer oder
mehreren) Disjunktionen von (einem oder mehreren) Literalen ist.
Eine Formel kann man in konjunktive Normalform bringen, indem man sie zuerst in eine
logisch aequivalente Formel in Negationsnormalform umwandelt und dann die folgenden
Ersetzungen macht, solange es möglich ist:
A ∨ (B ∧ C) wird ersetzt durch (A ∨ B) ∧ (A ∨ C)
(B ∧ C) ∨ A wird ersetzt durch (B ∨ A) ∧ (C ∨ A)
Eine Formel in konjunktiver Normalform hat immer die folgende Gestalt:
k(i)
m _
_
^
^
Li,j
i=1 j=1
In der Schreibweise mit Punkten:
(L1,1 ∨ . . . ∨ L1,k(1) ) ∧ . . . ∧ (Lm,1 ∨ . . . ∨ Lm,k(m) )
Beispiel 1.6.9 Wir berechnen eine konjunktive Normalform von ¬((p ∨ q) ∧ (r → s)).
¬((p ∨ q) ∧ (r → s))
=⇒ (¬p ∧ ¬q) ∨ (r ∧ ¬s)
[Negationsnormalform]
=⇒ ((¬p ∧ ¬q) ∨ r) ∧ ((¬p ∧ ¬q) ∨ ¬s)
[Distributivgesetz]
=⇒ (¬p ∨ r) ∧ (¬q ∨ r) ∧ ((¬p ∧ ¬q) ∨ ¬s)
[Distributivgesetz]
=⇒ (¬p ∨ r) ∧ (¬q ∨ r) ∧ (¬p ∨ ¬s) ∧ (¬q ∨ ¬s)
[Distributivgesetz]
1.6. NORMALFORMEN
1.6.10
51
Die disjunktive Normalform (DNF)
Eine Formel ist in disjunktiver Normalform, falls sie eine Disjunktion von (einer oder
mehreren) Konjunktionen von (einem oder mehreren) Literalen ist.
Eine Formel kann man in disjunktive Normalform bringen, indem man sie zuerst in eine
logisch aequivalente Formel in Negationsnormalform umwandelt und dann die folgenden
Ersetzungen macht, solange es möglich ist:
A ∧ (B ∨ C) wird ersetzt durch (A ∧ B) ∨ (A ∧ C)
(B ∨ C) ∧ A wird ersetzt durch (B ∧ A) ∨ (C ∧ A)
Eine Formel in disjunktiver Normalform hat immer die folgende Gestalt:
k(i)
m ^
_
_
^
Li,j
i=1 j=1
In der Schreibweise mit Punkten:
(L1,1 ∧ . . . ∧ L1,k(1) ) ∨ . . . ∨ (Lm,1 ∧ . . . ∧ Lm,k(m) )
Die Berechnung einer konjunktiven oder disjunktiven Normalform kann zu einer exponentiellen Explosion führen, vor allem, wenn man z.B. mit einer konjunktiven Normalform
startet und daraus eine disjunktive Normalform berechnen möchte (siehe Taubenprinzip).
Beispiel 1.6.11 Wir berechnen eine disjunktive Normalform von ¬((p ∨ q) → (¬r ∧ s)).
¬((p ∨ q) → (¬r ∧ s))
=⇒ ¬(¬(p ∨ q) ∨ (¬r ∧ s))
[Elimination von →]
=⇒ ¬¬(p ∨ q) ∧ ¬(¬r ∧ s)
[DeMorgan]
=⇒ (p ∨ q) ∧ ¬(¬r ∧ s)
[Doppelte Negation]
=⇒ (p ∨ q) ∧ (¬¬r ∨ ¬s)
[DeMorgan]
=⇒ (p ∨ q) ∧ (r ∨ ¬s)
[Doppelte Negation]
=⇒ ((p ∨ q) ∧ r) ∨ ((p ∨ q) ∧ ¬s)
[Distributivität]
=⇒ (p ∧ r) ∨ (q ∧ r) ∨ ((p ∨ q) ∧ ¬s)
[Distributivität]
=⇒ (p ∧ r) ∨ (q ∧ r) ∨ (p ∧ ¬s) ∨ (q ∧ ¬s)
[Distributivität]
Bemerkung zur Komplexität der Umwandlung in Normalformen: Bei der Berech∀∃ Eine
nung von konjunktiven oder disjunktiven Normalformen kann es im schlimmsten Fall
zu einer exponentiellen Aufblähung kommen. Betrachten wir die folgende Formel:
A = (p1 ∨ q1 ) ∧ (p2 ∨ q2 ) ∧ . . . ∧ (pn ∨ qn )
Die Formel A hat die Länge 4n − 1. Um die disjunktive Normalform von A zu berechenen,
müssen wir “ausmultiplizieren” und erhalten schliesslich die folgende Formel:
_
_
B=
{L1 ∧ . . . ∧ Ln | Li = pi oder Li = qi für i = 1, . . . , n}
52
KAPITEL 1. AUSSAGENLOGIK
Die Formel B ist eine grosse Disjunktion von Konjunktionen. In jeder Konjunktion kommt
entweder pi oder qi positiv vor. Da es 2n Möglichkeiten gibt, ist die Länge von B grösser als 2n .
Die Formel B ist in disjunktiver Normalform und logisch aequivalent zu A.
Weiter kann man leicht sehen, dass in jeder disjunktiven Normalform, die logisch aequivalent
ist zu A, die 2n Konjunktionen vorkommen müssen. Sei F eine zu A aequivalente Formel in
disjunktiver Normalform,
_
_
F =
Kj ,
j∈J
wobei Kj eine Konjunktion von Literalen ist für jedes j ∈ J. Betrachten wir ein Disjunkt
L1 ∧ . . . ∧ Ln von B (mit Li = pi oder Li = qi für i = 1, . . . , n). Sei
qi , falls Li = pi ,
∗
Li =
pi , falls Li = qi .
Wir möchten zeigen, dass es ein j ∈ J gibt, so dass in Kj die Variablen L1 , . . . , Ln positiv und
die Variablen L∗1 , . . . , L∗n nicht positiv vorkommen. Sei α die Belegung mit
1, falls Li = pi ,
1, falls Li = qi ,
α(qi ) =
α(pi ) =
0, falls Li = qi ,
0, falls Li = pi .
Dann ist [[A]]α = 1. Da F aequivalent ist zu A, muss auch [[F ]]α = 1 sein und somit gibt es
ein j ∈ J mit [[Kj ]]α = 1. Wir behaupten, dass in Kj die Variablen L1 , . . . , Ln positiv und
die Variablen L∗1 , . . . , L∗n nicht positiv vorkommen. Sei 1 ≤ i ≤ n. Betrachten wir den Fall,
wo Li = pi . (Der Fall, dass pi = qi , geht analog.) Die Variable qi kann nicht positiv in Kj
vorkommen, da α(qi ) = 0. Nehmen wir an, dass pi auch nicht positiv in Kj vorkommt. Sei β
wie α ausser, dass β(pi ) = 0. Dann ist [[Kj ]]β = 1, aber [[pi ∨ qi ]] = 0. Dies ist aber nicht möglich,
da F logisch aequivalent zu A ist. Also muss pi in Kj positiv vorkommen. Insgesamt sehen wir,
dass J mindestens 2n Elemente enthält.
Wenn man die Formeln A und B beide negiert und die Negation nach innen schiebt, erhält
man ein Beispiel für die Komplexität der konjunktiven Normalform.
1.7
Resolution
Das Resolutionsprinzip wurde von J. A. Robinson 1965 eingeführt. Es eignet sich besonders gut für das automatische Beweisen, da es nur aus einer einzigen Regel besteht. Viele
automatische Theorembeweiser basieren auf dem Resolutionsprinzip. Wir behandeln hier
nur den aussagenlogischen Teil.
Resolution ist eine Widerlegungsprozedur. Es wird getestet, ob eine Formelmenge Φ unerfüllbar ist. Dies ist keine prinzipielle Einschränkung, da folgendes gilt:
Φ |= A ⇐⇒ Φ ∪ {¬A} ist unerfüllbar.
Um zu schauen, ob eine Formel A aus einer Formelmenge Φ folgt, kann man die Negation
von A zu Φ hinzunehmen und die erweiterte Formelmenge auf Erfüllbarkeit testen.
Das Resolutionsverfahren arbeitet mit Formeln in konjunktiver Normalform. Die konjunktiven Normalformen werden als Mengen von Klauseln geschrieben werden. Was sind
Klauseln?
1.7. RESOLUTION
1.7.1
53
Literale und Klauseln
Ein Literal ist eine Aussagenvariable p oder deren Negation ¬p.
Das Komplement L eines Literals L ist definiert durch
¬p, falls L = p;
L :=
p,
falls L = (¬p).
Ein Literal p heisst positives Literal; ein Literal ¬p heisst negatives Literal.
Eine Klausel C ist eine endliche Menge von Literalen {L1 , . . . , Ln }.
Die leere Klausel wird mit 2 bezeichnet.
Der Wahrheitswert einer Klausel C ist definiert durch
1, falls es ein Literal L ∈ C gibt mit [[L]]α = 1;
[[C]]α :=
0, sonst.
Eine Klausel {L1 , . . . , Ln } entspricht also der Disjunktion L1 ∨ . . . ∨ Ln .
Die leere Klausel ist immer falsch, d.h. [[2]]α = 0.
Eine Klausel C heisst Tautologie, falls es ein Literal L ∈ C gibt, so dass auch L in C ist.
Mit anderen Worten, eine Klausel ist eine Tautologie, falls sie zwei komplementäre Literale
enthält.
Eine Klauselmenge S ist eine (möglicherweise unendliche) Menge von Klauseln.
Für eine Klauselmenge S und eine Belegung α definieren wir
1, falls [[C]]α = 1 für alle C ∈ S;
[[S]]α :=
0, sonst.
Eine Klauselmenge S heisst erfüllbar, falls es eine Belegung α gibt, so dass [[S]]α = 1. Eine
Klauselmenge heisst unerfüllbar sonst.
Eine Klauselmenge ist also erfüllbar, falls es eine Belegung gibt, die in jeder Klausel
mindestens ein Literal wahr macht.
Beispiel 1.7.2 Die Klauselmenge S = {{p, r}, {q, ¬r}, {¬q}, {¬p, t}, {¬s}, {s, ¬t}} ist
unerfüllbar. Die Klauselmenge S entspricht der folgenden konjunktiven Normalform:
(p ∨ r) ∧ (q ∨ ¬r) ∧ ¬q ∧ (¬p ∨ t) ∧ ¬s ∧ (s ∨ ¬t)
Definition 1.7.3 Wir sagen, das die Klausel C eine logische Konsequenz ist der Klauselmenge S (geschrieben S |= C), falls [[C]]α = 1 für alle Belegungen α, die alle Klauseln
aus S wahr machen.
Als Spezialfall gilt für die leere Klausel, dass S |= 2 genau dann, wenn S unerfüllbar ist.
Bemerkung 1.7.4 Eine Klausel C ist eine Tautologie dann und nur dann, wenn [[C]]α = 1
für alle Belegungen α. Enthält nämlich C keine komplementären Literale, kann man leicht
eine Belegung α finden, die alle Literale von C falsch macht. Man setzt einfach α(p) := 0,
falls p positiv in C vorkommt, und α(p) := 1, falls p negativ in C vorkommt.
54
KAPITEL 1. AUSSAGENLOGIK
1.7.5
Resolutionsregel und Resolutionsbeweis
Das Resolutionsverfahren besteht aus einer einzigen Regel, der Resolutionsregel:
C
D
falls L ∈ C und L ∈ D.
(C \ {L}) ∪ (D \ {L})
Die Konklusion der Regel heisst Resolvente von C und D.
Eine Resolvente von zwei Klauseln C und D erhält man wie folgt:
Schritt 1: Man wählt ein Literal L aus C, dessen Komplement L in D vorkommt.
Schritt 2: Man streicht L in C und L in D.
Schritt 3: Man vereinigt die verbleibenden Literale.
Beispiel 1.7.6 Die Klausel {p, ¬r, s, t} ist eine Resolvente von {p, q, ¬r} und {p, ¬q, s, t}.
Definition 1.7.7 (Resolutionsbeweis, widerlegbare Klauselmenge)
(1) Ein Resolutionsbeweis einer Klausel C aus einer Klauselmenge S ist eine endliche
Folge von Klauseln hD1 , . . . , Dn i, so dass Dn = C und für alle k ∈ [1, n] eine der
beiden folgenden Aussagen zutrifft:
(a) Dk ∈ S oder
(b) es gibt i < k und j < k, so dass Dk eine Resolvente von Di und Dj ist.
(2) Wir sagen, dass die Klausel C mit Resolution aus der Klauselmenge S beweisbar ist
(geschrieben S R C), falls es einen Resolutionsbeweis von C aus S gibt.
(3) Wir sagen, dass die Klauselmenge S widerlegbar ist, falls die leere Klausel aus S mit
Resolution beweisbar ist (S R 2).
Beispiel 1.7.8 Hier ist ein Resolutionsbeweis von 2 aus der Klauselmenge
S = {{p, r}, {q, ¬r}, {¬q}, {¬p, t}, {¬s}, {s, ¬t}}.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
{p, r}
{q, ¬r}
{p, q}
{¬q}
{p}
{¬p, t}
{s, ¬t}
{¬p, s}
{¬s}
{¬p}
2
[Element von S]
[Element von S]
[Resolvente von 1 und 2]
[Element von S]
[Resolvente von 3 und 4]
[Element von S]
[Element von S]
[Resolvente von 6 und 7]
[Element von S]
[Resolvente von 8 und 9]
[Resolvente von 5 und 10]
1.7. RESOLUTION
1.7.9
55
Korrektheit der Resolution
Die Resolution ist korrekt im selben Sinne wie die Herleitungen des natürlichen Schliessens
korrekt sind (Satz 1.4.22). Falls eine Klausel C aus einer Klauselmenge S herleitbar ist,
dann ist die Klausel C eine logische Konsequenz aus S. Es genügt zu zeigen, dass die
Resolutionsregel korrekt ist.
Seien C und D zwei Klauseln mit [[C]]α = 1 und [[D]]α = 1.
Nehmen wir an, dass L ∈ C und L ∈ D.
Wir behaupten, dass [[(C \ {L}) ∪ (D \ {L})]]α = 1.
Da [[C]]α = 1, gibt es ein Literal M ∈ C mit [[M ]]α = 1.
Falls M verschieden ist von L sind wir fertig, da M ∈ (C \ {L}). Sonst ist M = L.
Da [[D]]α = 1, gibt es ein Literal N ∈ D mit [[N ]]α = 1.
Falls N verschieden ist von L sind wir fertig, da N ∈ (D \ {L}). Sonst ist N = L.
Dies ist aber nicht möglich, da sonst [[L]]α = [[M ]]α = 1 = [[N ]]α = [[L]]α .
Also gilt für die Resolvente von C und D, dass [[(C \ {L}) ∪ (D \ {L})]]α = 1.
Satz 1.7.10 (Korrektheit der Resolution)
Falls S R C, dann gilt S |= C.
Als Spezialfall des Korrektheitssatzes erhalten wir, dass eine Klauselmenge S unerfüllbar
ist, falls sie widerlegbar ist, d.h. falls die leere Klausel 2 aus S mit Resolution herleitbar
ist.
Korollar 1.7.11 Falls S widerlegbar ist, dann ist S unerfüllbar.
1.7.12
Vollständigkeit der Resolution
Die Umkehrung des Korrektheitssatzes gilt nicht in der strengen Form. Falls S |= C, dann
muss es nicht unbedingt einen Resolutionsbeweis von C aus S geben.
Beispiel 1.7.13 Betrachten wir die Klausel {p, ¬p}. Diese Klausel ist immer wahr unter
allen Belegungen, da immer entweder p oder ¬p wahr ist. Also ist {p, ¬p} eine logische Konsequenz jeder Klauselmenge, insbesondere auch der leeren Menge ∅. Die Klausel
{p, ¬p} ist jedoch nicht mittels Resolution aus ∅ herleitbar und auch keine Teilklausel von
{p, ¬p}.
Es zeigt sich aber, dass eine schwächere Form der Vollständigkeit gilt. Falls S |= C, dann
ist C eine Tautologie (enthält zwei komplementäre Literale) oder es gibt eine Teilklausel D
von C, die aus S mir Resolution herleitbar ist.
Satz 1.7.14 (Vollständigkeit der Resolution)
Falls S |= C, dann ist C eine Tautologie oder es gibt eine Teilklausel D ⊆ C, so dass
S R D.
56
KAPITEL 1. AUSSAGENLOGIK
Insbesondere folgt aus dem Vollständigkeitssatz, dass eine unerfüllbare Klauselmenge widerlegbar ist.
Korollar 1.7.15 Falls S unerfüllbar ist, dann ist S widerlegbar.
Beweis. Nehmen wir an, dass S unerfüllbar ist.
Dann gilt S |= 2.
Aus dem Vollständigkeitssatz für die Resolution folgt, dass es eine Teilklausel D ⊆ 2 gibt,
so dass S R D.
Da D ⊆ 2 ist die Klausel D leer, also gilt S R 2 und S ist widerlegbar. 2
Beweis von Satz 1.7.14 geht indirekt. Man nimmt an, dass die Klausel C keine
∀∃ Der
Tautologie ist und keine Teilklausel enthält, die aus der Klauselmenge S mit Resolution
herleitbar ist. Dann konstruiert man eine Belegung α, die alle Klauseln aus S wahr macht, aber
die Klausel C falsch macht. Zur Konstruktion von α benötigt man das folgende Lemma:
∀∃ Lemma 1.7.16 Seien C, D0 , D1 Klauseln, p eine Aussagenvariable und S eine Klauselmenge, so dass gilt
D0 ⊆ C ∪ {p},
D1 ⊆ C ∪ {¬p},
Dann gibt es eine Teilklausel D2 ⊆ C, so dass S
R
S
R
D0 ,
S
R
D1 .
D2 .
∀∃ Beweis. Falls p ∈
/ D0 , dann ist D0 ⊆ C und wir sind fertig.
Falls (¬p) ∈
/ D1 , dann ist D1 ⊆ C und wir sind ebenfalls fertig.
Wir können also annehmen, dass p ∈ D0 und (¬p) ∈ D1 .
Sei D2 := (D0 \ {p}) ∪ (D1 \ {¬p}).
Dann gilt D2 ⊆ C und, da D2 eine Resolvente von D0 und D1 ist, auch S
R
D2 . 2
∀∃ Beweis. (Satz 1.7.14) Wir zeigen die Kontraposition. Nehmen wir an, dass C eine Klausel
ist, die keine Tautologie ist, und dass es keine Teilklausel D ⊆ C gibt, so dass S R D.
Wir werden eine Belegung α konstruieren, die alle Klauseln aus S wahr macht, aber nicht C.
Sei p0 , p1 , . . . eine Aufzählung aller Aussagenvariablen, die nicht in C vorkommen.
Wir konstruieren rekursiv eine zunehmende Folge von Klauseln (Dn )n∈N durch
D0
Dn+1
D∞
:= C,
Dn ∪ {pn },
falls es keine Klausel D ⊆ Dn ∪ {pn } gibt mit S
:=
Dn ∪ {¬pn }, sonst.
S
:=
n∈N Dn .
Aus dem vorangehenden Lemma folgt, dass für alle n ∈ N gilt:
(∗) Es gibt keine Klausel D ⊆ Dn mit S
R
D.
Da die Klausel C keine Tautologie ist, gilt für alle Aussagenvariablen p:
R
D;
1.7. RESOLUTION
57
(∗∗) Entweder ist p ∈ D∞ oder (¬p) ∈ D∞ , aber nicht {p, ¬p} ⊆ D∞ .
Wir definieren eine Belegung α durch
α(p) :=
1, falls (¬p) ∈ D∞ ;
0, falls p ∈ D∞ .
Dann gilt für alle Literale L: [[L]]α = 0 genau dann, wenn L ∈ D∞ .
Da C ⊆ D∞ , ist [[C]]α = 0.
Sei D eine Klausel aus S. Wir zeigen, dass [[D]]α = 1.
Wäre [[D]]α = 0, d.h. [[L]]α = 0 für alle L ∈ D, dann gäbe es ein n ∈ N, so dass D ⊆ Dn . Dies
widerspräche aber der Eigenschaft (∗). 2
Folgerung aus der Vollständigkeit der Resolution erhält man den sogenannten Kom∀∃ Als
paktheitssatz der Aussagenlogik (der auch für die Prädikatenlogik gilt). Falls jede endliche Teilmenge einer (unendlichen) Klauselmenge S erfüllbar ist, dann ist auch S erfüllbar.
∀∃ Korollar 1.7.17 (Kompaktheit)
Falls jede endliche Teilmenge einer Klauselmenge S erfüllbar ist, dann ist auch S erfüllbar.
∀∃ Beweis. Wir zeigen die Kontraposition: Wenn S unerfüllbar ist, dann gibt es eine endliche
Teilmenge S0 von S, die unerfüllbar ist.
Nehmen wir an, dass S unerfüllbar ist. Aus der Vollständigkeit der Resolution (Korollar 1.7.15)
folgt, dass S widerlegbar ist. Das heisst, es gibt einen Resolutionsbeweis der leeren Klausel 2
aus S.
Da der Resolutionsbeweis endlich ist, werden nur endlich viele Klauseln aus S benutzt. Also gibt
es eine endliche Teilmenge S0 ⊆ S, so dass S0 R 2.
Aus der Korrektheit der Resolution (Korollar 1.7.11) folgt, dass S0 unerfüllbar ist. 2
1.7.18
Ein einfacher Algorithmus für die Resolution
Das Hauptproblem bei der Resolution ist, dass zu viele Klauseln erzeugt werden. Darum
wurden Verfeinerungen der Resolution entwickelt, die den Suchraum einschränken. Wir
sagen, dass eine Klausel C von der Klausel D subsumiert wird, falls D ⊆ C. Die folgenden
beiden Vereinfachungen kann man immer in Resolutionsbeweisen machen:
(1) Man darf Tautologien streichen.
(2) Man darf eine Klausel, die von einer früher bereits erzeugten Klausel subsumiert
wird, streichen.
Diese beiden Vereinfachungen ändern nichts an der Erfüllbarkeit einer Klauselmenge S,
da für beliebige Klauseln C ∈ S gilt:
(1) Falls C eine Tautologie ist, so ist S logisch aequivalent zu S \ {C}.
(2) Falls C von einer Klausel aus S (verschieden von C) subsumiert wird, dann ist S
logisch aequivalent zu S \ {C}.
58
KAPITEL 1. AUSSAGENLOGIK
Solange die Klauselmenge S nicht leer ist, mache die folgenden Schritte:
R1. Wähle eine Klausel C aus S und bewege sie von S nach U .
R2. Bestimme alle Resolventen von C und Klauseln in U und füge die Resolventen
zu S hinzu.
R3. Falls eine Resolvente eine Tautologie ist, streiche sie (tautology deletion).
R4. Falls eine Resolvente von einer Klausel in S oder U subsumiert wird, streiche
die Resolvente (forward subsumption).
R5. Falls eine Klausel in S oder U von einer Resolvente subsumiert wird, streiche
die Klausel (back subsumption).
Abbildung 1.2: Ein einfacher Algorithmus für die Resolution.
Also darf man Tautologien und subsumierte Klauseln in Resolutionsbeweisen streichen
und verliert damit die Vollständigkeit nicht.
Ein einfacher Algorithmus für die Resolution ist in Abb. 1.2 angegeben.1 Er entscheidet, ob die leere Klausel 2 aus einer Klauselmenge S mit Resolution herleitbar ist. Dazu
benutzt er eine weitere Klauselmenge U (used clauses), die zu Beginn leer ist. Zur Laufzeit
gelten die folgenden Invarianten:
I1. Falls D eine Resolvente von zwei Klauseln aus U ist, dann ist D eine Tautologie
oder D wird von einer Klausel in S ∪ U subsumiert.
I2. Jede Klausel der ursprünglichen Menge wird von einer Klausel in S ∪ U subsumiert.
I3. Die Klauselmenge S ∪ U ist logisch aequivalent zur ursprünglichen Klauselmenge.
Die Invariante I1 wird jeweils im Schritt R1 verletzt und anschliessend im Schritt R2
wieder erzwungen. Sonst bleiben alle drei Invarianten immer erhalten. Am Schluss, wenn
die Klauselmenge S leer ist, erhalten wir:
Falls eine Klausel C aus der ursprünglichen Menge logisch folgt, dann ist C eine
Tautologie oder wird von einer Klausel in U subsumiert.
Falls die ursprüngliche Klauselmenge unerfüllbar ist, dann ist die leere Klausel in U .
Warum? Wenn eine Klausel C aus der ursprünglichen Klauselmenge logisch folgt und C
keine Tautologie ist, dann gibt es wegen der Vollständigkeit der Resolution (Satz 1.7.14)
eine Teilklausel D ⊆ C, die aus der ursprünglichen Menge mit Resolution herleitbar ist.
Mit Hilfe der Invarianten I1 und I2 sieht man leicht, dass jede Klausel in dem Resolutionsbeweis von D von einer Klausel aus U subsumiert wird. Also wird auch C von einer
Klausel aus U subsumiert.
1
Dieser Algorithmus wird von Otter benutzt (http://www-unix.mcs.anl.gov/AR/otter/).
1.7. RESOLUTION
59
Als Beispiel starten wir mit der folgenden Klauselmenge:
Klauselmenge S Klauselmenge U
1: {p, ¬q, ¬r}
(leer)
2: {¬p}
3: {p, ¬q, r}
4: {p, q}
5: {¬p, r}
Die Klauselmenge U ist zu Beginn leer. Wie wählen die Klausel 1 und bewegen sie von S
nach U . Da mit einer Klausel noch keine Resolventen gebildet werden können, wählen wir
die Klausel 2 und bewegen sie ebenfalls von S nach U .
Klauselmenge S Klauselmenge U
3: {p, ¬q, r}
1: {p, ¬q, ¬r}
4: {p, q}
2: {¬p}
5: {¬p, r}
Nun resolvieren wir die Klauseln 1 und 2 und fügen die Resolvente {¬q, ¬r} zu S hinzu.
Die Klausel 1 wird von der Resolvente 6 subsumiert und darum streichen wir Klausel 1.
Klauselmenge S Klauselmenge U
3: {p, ¬q, r}
2: {¬p}
4: {p, q}
5: {¬p, r}
6: {¬q, ¬r}
Im nächsten Durchlauf wählen wir die Klausel 3 und verschieben sie von S nach U .
Klauselmenge S Klauselmenge U
4: {p, q}
2: {¬p}
5: {¬p, r}
3: {p, ¬q, r}
6: {¬q, ¬r}
Die Resolvente {¬q, r} der Klauseln 2 und 3 fügen wir zu S hinzu. Die Klausel 3 wird
von der Resolvente 7 subsumiert und darum streichen wir Klausel 3.
Klauselmenge S Klauselmenge U
4: {p, q}
5: {¬p, r}
6: {¬q, ¬r}
7: {¬q, r}
2: {¬p}
60
KAPITEL 1. AUSSAGENLOGIK
Nun wählen wir die Klausel 4 und bewegen sie von S nach U .
Klauselmenge S Klauselmenge U
5: {¬p, r}
2: {¬p}
6: {¬q, ¬r}
4: {p, q}
7: {¬q, r}
Die Resolvente {q} der Klauseln 2 und 4 fügen wir zu S hinzu. Die Klausel 4 wird von
der Resolvente 8 subsumiert und darum streichen wir Klausel 4.
Klauselmenge S Klauselmenge U
5: {¬p, r}
2: {¬p}
6: {¬q, ¬r}
7: {¬q, r}
8: {q}
Nachdem wir die Klausel 5 von S nach U bewegen, können wir keine neuen Resolventen
bilden. Darum bewegen wir auch die Klausel 6 auch von S nach U .
Klauselmenge S Klauselmenge U
7: {¬q, r}
2: {¬p}
8: {q}
5: {¬p, r}
6: {¬q, ¬r}
Die Resolvente {¬p, ¬q} der Klauseln 5 und 6 wird von der Klausel 2 subsumiert und
darum nicht zu S hinzugefügt. Dafür bewegen wir die Klausel 7 von S nach U .
Klauselmenge S Klauselmenge U
8: {q}
2: {¬p}
5: {¬p, r}
6: {¬q, ¬r}
7: {¬q, r}
Die Resolvente der Klauseln 6 und 7 ist {¬q}. Die Klauseln 6 und 7 werden von der
Resolvente 9 subsumiert und darum gestrichen.
Klauselmenge S Klauselmenge U
8: {q}
2: {¬p}
9: {¬q}
5: {¬p, r}
Schliesslich bewegen wir die Klauseln 8 und 9 von S nach U und erhalten die leere Klausel
als Resolvente von 8 und 9. Also ist die ursprüngliche Klauselmenge S unerfüllbar.
1.7. RESOLUTION
61
Resolutionsverfahren kann man benutzen um zu testen, ob eine Formel allgemein∀∃ Das
gültig ist, indem man die Formel in eine geeignete Klauselmenge übersetzt. Im Abschnitt 1.6 haben wir gesehen, wie man eine aussagenlogische Formel in eine aequivalente konjunktive Normalform umformen kann. Eine Formel in konjunktiver Normalform kann man als
Klauselmenge auffassen. Die einzelnen Konjunkte (bestehend aus Disjunktionen von Literalen)
können als Klauseln aufgefasst werden. Die Umformung in konjunktive Normalform kann aber
zu einer exponentiellen Explosion führen. Darum geben wir im Beweis des folgenden Satzes ein
effizientes Verfahren an zur Übersetzung einer Formel in eine Klauselmenge. Die resultierende
Klauselmenge ist allerdings nicht aequivalent zur Formel, sondern erhält nur die Erfüllbarkeit,
da sie zusätzliche Aussagenvariablen benutzt, die nicht in der Formel vorkommen. Man beachte,
dass in der resultierenden Klauselmenge nur Klauseln mit höchstens drei Literalen vorkommen.
∀∃ Satz 1.7.19 (Effiziente Übersetzung von Formeln in Klauselmengen)
Zu jeder Formel A kann man in linearer Zeit eine Klauselmenge SA konstruieren mit der Eigenschaft, dass SA erfüllbar ist genau dann, wenn A erfüllbar ist.
∀∃ Beweis. Für jede Teilformel B von A, die keine Aussagenvariable ist, sei qB eine neue
Aussagenvariable, die in A nicht vorkommt. Für eine Aussagenvariable p von A sei qp gleich p.
Die Klauselmenge SA definieren wir wie folgt. Sie besteht aus der Klausel {qA } und für jede
Teilformel B von A aus den folgenden Klauseln (rechts steht in eckigen Klammern die intendierte
Bedeutung der Klauseln):
Für B = (¬E): {qE , q¬E }, {¬qE , ¬q¬E }.
[q¬E ↔ ¬qE ]
Für B = (E ∧ F ): {¬qE , ¬qF , qE∧F }, {¬qE∧F , qE }, {¬qE∧F , qF }.
[qE∧F ↔ (qE ∧ qF )]
Für B = (E ∨ F ): {¬qE , qE∨F }, {¬qF , qE∨F }, {¬qE∨F , qE , qF }.
[qE∨F ↔ (qE ∨ qF )]
Für B = (E → F ): {qE , qE→F }, {¬qF , qE→F }, {¬qE→F , ¬qE , qF }.
[qE→F ↔ (qE → qF )]
Für B = (E ↔ F ): {¬qE↔F , ¬qE , qE }, {¬qE↔F , ¬qF , qE },
[qE↔F ↔ (qE ↔ qF )]
{¬qE , ¬qF , qE↔F }, {qE , qF , qE↔F }.
Wir zeigen, dass SA erfüllbar ist genau dann, wenn A erfüllbar ist.
(a) Nehmen wir an, dass die Klauselmenge SA erfüllbar ist.
Sei α eine Belegung mit [[SA ]]α = 1.
Dann sieht man leicht, dass für Teilformeln B von A gilt [[B]]α = α(qB ).
Da die Klausel {qA } zu SA gehört, ist α(qA ) = 1 und somit [[A]]α = 1. Also ist A erfüllbar.
(b) Nehmen wir an, dass die Formel A erfüllbar ist.
Sei α eine Belegung mit [[A]]α = 1.
Sei β die Belegung mit
β(qB ) := [[B]]α
für alle Teilformeln B von A.
Es ist leicht zu sehen, dass β alle Klauseln von SA wahr macht.
Also ist [[SA ]]β = 1 und SA ist erfüllbar. 2
Problem, ob eine Klauselmenge S allgemeingültig ist, d.h. ob [[S]] = 1 für alle
∀∃ Das
Belegungen α, ist trivial: Eine Klauselmenge ist allgemeingültig genau dann, wenn sie
α
nur Tautologien enthält. Man muss also nur nachschauen, ob es für jede Klausel C ∈ S eine
Aussagenvariable p gibt, so dass sowohl p ∈ C als auch (¬p) ∈ C.
62
KAPITEL 1. AUSSAGENLOGIK
Das Resolutionsverfahren ist exponentiell im schlimmsten Fall. Es gibt Beispiele von un∀∃ erfüllbaren
Klauselmengen, deren kürzeste Resolutionswiderlegungen exponentiell viele
Klauseln verlangen (gemessen in der Grösse der Klauselmenge dargestellt als String). Die Klauselmengen, welche das Taubenprinzip ausdrücken verhalten sich so. Das Taubenprinzip sagt:
Wenn man n + 1 Tauben in n Schachteln verteilt, dann gibt es mindestens eine Schachtel, in
der es mindestens zwei Tauben hat. Dieses kombinatorische Prinzip kann man in die Aussagenlogik übersetzen. Sei pij eine Aussagenvariable, die ausdrückt, dass die i-te Taube in der
j-ten Schachtel ist. Dann lässt sich die Negation des Taubenprinzips durch die folgende Formel
beschreiben:
In jeder Schachtel ist
Jede Taube ist
Keine Taube ist
höchstens eine Taube
in einer Schachtel
in zwei Schachteln
z ^
}|
{ z ^
}|
{
^ }|_
_ { z ^
^
^
pij ∧
(¬pij ∨ ¬pik ) ∧
(¬pik ∨ ¬pjk )
1≤i≤n+1 1≤j≤n
1≤i≤n+1
1≤j<k≤n
1≤i<j≤n+1
1≤k≤n
Diese Formel ist unerfüllbar. Die Formel ist bereits in konjunktiver Normalform und kann somit
als Menge von Klauseln verstanden werden. Eine Herleitung der leeren Klausel mittels Resolution
erfordert aber exponentiell viele Klauseln (A. Haken, 1985).
1.8
Die Davis-Putnam Prozedur
Bereits 1960 haben M. Davis und H. Putnam eine Prozedur vorgeschlagen, um eine Klauselmenge auf Erfüllbarkeit zu testen. Eine Variante dieser Prozedur (1962 eingeführt von
M. Davis, G. Logemann und D. Loveland) gilt heute noch als eine der effizientesten Algorithmen für den Test auf Erfüllbarkeit von Klauselmengen.
Die Eingabe für den Algorithmus von Davis und Putnam ist eine Klauselmenge S.
Die Ausgabe besteht aus allen Belegungen α, die alle Klauseln aus S wahr machen. Wenn
keine Belegung gefunden wird, ist S unerfüllbar.
Während der Berechnung wird die Klauselmenge S verändert.
Der rekursive Algorithmus ist in Abb. 1.3 beschrieben.
Die Klauseln, die während der Berechnung entstehen, sind immer Teilmengen von Klauseln der ursprünglichen Klauselmenge S.
Die Klauseln, die gelöscht werden, sind jeweils wahr unter der bisher berechneten Belegung α und müssen darum nicht mehr weiter betrachtet werden.
Wenn in einem Ast der Berechnung eine Klauselmenge mit der leeren Klausel 2 erreicht
wird, dann kann die bisher berechnete Belegung α die Klauselmenge nicht erfüllen und
man muss den Ast nicht weiterverfolgen. In diesem Falle geht man zurück und versucht
die nächste Möglichkeit, die noch verbleibt.
Den Berechnungsbaum für die Davis-Putnam Prozedur kann man direkt beschreiben.
Für eine Klauselmenge S und ein Literal L definieren wir:
S L := {C \ {L} | C ∈ S, L ∈
/ C}.
Die Klauselmenge S L erhält man aus S, indem man
1.8. DIE DAVIS-PUTNAM PROZEDUR
63
(D1) Falls die Klauselmenge S leer ist, gib die erfüllende Belegung α aus.
(D2) Sonst wähle eine noch nicht belegte Aussagenvariable p von S.
(D3) Ergänze die Belegung α durch α(p) := 1.
Entferne alle Klauseln von S mit positivem Vorkommen von p.
Streiche in den verbleibenden Klauseln alle negativen Vorkommen von p.
(D4) Falls keine der Klauseln leer wird, gehe rekursiv zu (D1).
(D5) Mache die Änderungen von (D3) rückgängig und setze α(p) := 0.
Entferne alle Klauseln von S mit negativem Vorkommen von p.
Streiche in den verbleibenden Klauseln alle positiven Vorkommen von p.
(D6) Falls keine der Klauseln leer wird, gehe rekursiv zu (D1).
Abbildung 1.3: Die Davis-Putnam Prozedur.
alle Klauseln von S, in denen das Literal L vorkommt, entfernt,
in den verbleibenden Klauseln das Komplement L streicht.
Der allgemeine Schritt in dem Berechnungsbaum sieht so aus:
S
α(p) := 1
Sp
.
&
α(p) := 0
S ¬p
Im linken Ast wird die Klauselmenge S durch S p ersetzt, im rechten Ast durch S ¬p .
Zur Illustration der Davis-Putnam Prozedur betrachten wir zuerst eine Klauselmenge, die
nicht erfüllbar ist. Sei S die folgende Menge von Klauseln:
{{p, ¬q, ¬r}, {¬p}, {p, ¬q, r}, {p, q}, {¬p, r}}
Wenn wir die Aussagenvariablen in der alphabetischen Reihenfolge wählen, sieht der Be-
64
KAPITEL 1. AUSSAGENLOGIK
rechungsbaum der Davis-Putnam Prozedur wie folgt aus:
{{p, ¬q, ¬r}, {¬p}, {p, ¬q, r}, {p, q}, {¬p, r}}
@
α(p) := 1
α(p) := 0
@
@
R
@
{2, {r}}
{{¬q, ¬r}, {¬q, r}, {q}}
@
@
α(q) := 1
α(q) := 0
@
R
@
{{¬r}, {r}}
{2}
@
α(r) := 1
@
α(r) := 0
@
R
@
{2}
{2}
Da alle Äste in eine Klauselmenge enden, welche die leere Klausel 2 enthält, wird keine
erfüllende Belegung gefunden und somit ist die Klauselmenge S nicht erfüllbar.
Als zweites Beispiel betrachten wir eine erfüllbare Klauselmenge. Sei S die folgende Menge
von Klauseln:
{{p, ¬q, r}, {¬p}, {p, q, ¬r}, {p, q}}
Dann erhalten wir den folgenden Berechnungsbaum:
{{p, ¬q, r}, {¬p}, {p, q, ¬r}, {p, q}}
@
α(p) := 1
α(p) := 0
@
@
R
@
{2}
{{¬q, r}, {q, ¬r}, {q}}
@
@
α(q) := 1
α(q) := 0
@
R
@
{{¬r}, 2}
{{r}}
@
α(r) := 1
{}
@
α(r) := 0
@
R
@
{2}
In diesem Baum endet ein Ast in die leere Klauselmenge { } und wir sehen, wenn wir
entlang diesem Ast gehen, dass die Belegung α(p) = 0, α(q) = 1, α(r) = 1 die Klauselmenge S erfüllt. Sie ist die einzige erfüllende Belegung.
Die Effizienz der Davis-Putnam Prozedur beruht darauf, dass in vielen Fällen nicht der
ganze Berechnungsbaum mit 2n Knoten durchlaufen werden muss. Oft erreicht man auf
1.9. ANWENDUNGEN
65
einem Ast schon sehr schnell eine leere Klausel und kann den ganzen Teilbaum wegschneiden.
Die Davis-Putnam Prozedur kann wie folgt optimiert werden:
Falls in der Klauselmenge S eine Klausel {p} (bzw. {¬p}) vorkommt, dann muss
α(p) gleich 1 (bzw. gleich 0) sein.
Falls die Aussagenvariable p in den Klauseln von S nur positiv (bzw. negativ) vorkommt, dann kann man α(p) gleich 1 (bzw. gleich 0) setzen.
Die zweite Optimierung ist nur zulässig, wenn es alleine um die Frage geht, ob eine
Klauselmenge erfüllbar ist oder nicht. Es kann sein, dass bei der zweiten Optimierung
erfüllenden Belegungen verloren gehen.
1.9
Anwendungen
Die Beispiele in diesem Abschnitt stammen aus Unterlagen von Prof. Armin Biere, ETH
Zürich.
1.9.1
Equivalence Checking von if-then-else Ketten
Wir betrachten einen Compiler, der if-then-else Ketten optimiert.
original C Code
optimierter C Code
if (!a && !b) h();
else if (!a) g();
else f();
if (a) f();
else if (b) g();
else h();
⇓
⇑
if (!a) {
if (!b) h();
else g();
} else f();
=⇒
if (a) f();
else {
if (!b) h();
else g();
}
Wie kann man überprüfen, dass die beiden Versionen des C-Programms aequivalent sind?
(1) Wir ersetzen die Prozeduren durch neue, unabhängige Aussagenvariablen.
original :=
optimized :=
if ¬a ∧ ¬b then h
if a then f
else if ¬a then g
else if b then g
else f
else h
66
KAPITEL 1. AUSSAGENLOGIK
(2) Wir übersetzen die if-then-else Ketten in aussagenlogische Formeln.
compile(if A then π1 else π2 ) = (A ∧ compile(π1 )) ∨ (¬A ∧ compile(π2 ))
(3) Wir überprüfen die Aequivalenz der Formeln:
compile(original) ↔ compile(optimized)
Wenn die beiden Formeln logisch aequivalent sind, dann verhalten sich die beiden Programme gleich.
compile(original)
= compile(if ¬a ∧ ¬b then h else if ¬a then g else f )
= (¬a ∧ ¬b ∧ h) ∨ (¬(¬a ∧ ¬b) ∧ compile(if ¬a then g else f ))
= (¬a ∧ ¬b ∧ h) ∨ (¬(¬a ∧ ¬b) ∧ ((¬a ∧ g) ∨ (¬¬a ∧ f )))
compile(optimized) = compile(if a then f else if b then g else h)
= (a ∧ f ) ∨ (¬a ∧ compile(if b then g else h))
= (a ∧ f ) ∨ (¬a ∧ ((b ∧ g) ∨ (¬b ∧ h)))
Dass die beiden Formeln logisch aequivalent sind, sieht man wie folgt:
(¬a ∧ ¬b ∧ h) ∨ (¬(¬a ∧ ¬b) ∧ ((¬a ∧ g) ∨ (¬¬a ∧ f ))) ↔
(¬a ∧ ¬b ∧ h) ∨ ((a ∨ b) ∧ ((¬a ∧ g) ∨ (a ∧ f ))) ↔
(¬a ∧ ¬b ∧ h) ∨ ((a ∨ b) ∧ (¬a ∧ g)) ∨ ((a ∨ b) ∧ (a ∧ f )) ↔
(¬a ∧ ¬b ∧ h) ∨ (¬a ∧ b ∧ g) ∨ (a ∧ f ) ∨ (a ∧ f ∧ b) ↔
(¬a ∧ ¬b ∧ h) ∨ (¬a ∧ b ∧ g)) ∨ (a ∧ f ) ↔
(a ∧ f ) ∨ (¬a ∧ ((b ∧ g) ∨ (¬b ∧ h)))
den allgemeinen Fall unterteilen wir die Menge der Aussagenvariablen in zwei dis∀∃ Für
junkte Teilmengen, die Menge der Testvariablen und die Menge der Programmvariablen.
In den Tests der if-then-else Anweisungen dürfen nur Testvariablen vorkommen. If-then-else Ketten werden durch die folgende Grammatik erzeugt:
Statement = ProgramVariable | ‘if’ Formula ‘then’ Statement ‘else’ Statement
If-then-else Ketten (Statement) bezeichnen wir mit π und Programmvariablen mit q. Die Übersetzung ist gegeben durch die folgenden Gleichungen:
compile(q) = q
compile(if A then π1 else π2 ) = (A ∧ compile(π1 )) ∨ (¬A ∧ compile(π2 ))
Die Auswertung einer if-then-else Kette unter einer Belegung α ist definiert durch:
eval(q, α) = q
eval(if A then π1 else π2 , α) =
eval(π1 , α), falls [[A]]α = 1;
eval(π2 , α), falls [[A]]α = 0
1.9. ANWENDUNGEN
67
∀∃ Definition 1.9.2 Zwei if-then-else Ketten π und π 0 werden als aequivalent betrachtet (geschrieben: π ≡ π 0 ), falls eval(π, α) = eval(π 0 , α) für alle Belegungen α.
Das folgende Lemma sagt, dass der Wahrheitswert eines übersetzten Programms unter
∀∃ einer
Belegung gleich dem Wahrheitswert des Resultats der Auswertung des Programms
unter der Belegung ist.
∀∃ Lemma 1.9.3 Es gilt [[compile(π)]]α = α(eval(π, α)).
∀∃ Beweis. Mit Induktion nach der Länge von π.
Induktionsverankerung: π ist die Programmvariable q. Dann haben wir:
[[compile(q)]]α = [[q]]α = α(q) = α(eval(q, α))
Induktionsschritt: π = if A then π1 else π2 .
Aus der Induktionsvoraussetzung folgt, dass die Behauptung auf π1 und π2 zutrifft.
Fall 1: [[A]]α = 1. Dann erhalten wir:
[[compile(π)]]α = [[compile(if A then π1 else π2 )]]α
= [[(A ∧ compile(π1 )) ∨ (¬A ∧ compile(π2 ))]]α
= [[compile(π1 )]]α
(da [[A]]α = 1)
= α(eval(π1 , α))
= α(eval(if A then π1 else π2 , α))
= α(eval(π, α))
Fall 2: [[A]]α = 0. Ähnlich wie Fall 1. 2
Lemma benutzen wir um zu zeigen, dass aequivalente Programme aequivalente
∀∃ Das
Übersetzungen haben.
∀∃ Satz 1.9.4 Falls π ≡ π 0 , dann sind compile(π) und compile(π 0 ) logisch aequivalent.
∀∃ Beweis. Nehmen wir an, dass π ≡ π 0 . Sei α eine Belegung. Dann erhalten wir:
[[compile(π)]]α = α(eval(π, α)) = α(eval(π 0 , α)) = [[compile(π 0 )]]α
Da α beliebig ist, folgt die Aeuqivalenz von compile(π) und compile(π 0 ). 2
die Umkehrung benötigen wir die Tatsache, dass die Auswertung eines Programms
∀∃ Für
nur von der Belegung der Variablen in den Tests abhängt und unabhängig ist von den
Wahrheitswerten der Programmvariablen.
∀∃ Satz 1.9.5 Falls compile(π) und compile(π 0 ) logisch aequivalent sind, dann ist π ≡ π 0 .
68
KAPITEL 1. AUSSAGENLOGIK
∀∃ Beweis. Nehmen wir an, dass compile(π) und compile(π 0 ) logisch aequivalent sind. Sei α
eine Belegung und sei q = eval(π, α).
Wir müssen zeigen, dass auch gilt eval(π 0 , α) = q.
Sei β die Belegung mit
β(p) =
α(p),
falls p eine Testvariable ist oder p = q;
¬α(q), sonst.
Dann ist auch eval(π, β) = q und wir erhalten:
β(eval(π 0 , β)) = [[compile(π 0 )]]β = [[compile(π)]]β = β(eval(π, β)) = β(q) = α(q)
Da eval(π 0 , β) eine Programmvariable ist, folgt eval(π 0 , β) = q und somit auch eval(π 0 , α) = q. 2
1.9.6
Aequivalenz von Schaltkreisen
Die Frage, ob die folgenden beiden Schaltkreise aequivalent sind,
b
a
c
a
b
c
reduziert sich auf die Frage, ob die entsprechenden Formeln der Aussagenlogik logisch
aequivalent sind:
b ∨ (a ∧ c) ↔ (a ∨ b) ∧ (b ∨ c)
1.10
Boolesche Algebren
Boolesche Algebren bilden eine Verallgemeinerung der Aussagenlogik. In einer Booleschen
Algebra werden die logischen Verknüpfungen als Rechenoperationen aufgefasst. Anstelle
von ∧, ∨, ¬, ⊥, > werden die Rechenoperationen ∗, +, 0 , 0, 1 benutzt. Der Bereich der
Rechenoperationen beschränkt sich aber nicht nur auf die beiden Wahrheitswerte 0 und 1
sondern kann auch Mengen oder andere Objekte umfassen. Der Bereich der Rechenoperationen wird bewusst abstrakt gelassen. Nur die Gesetze, welche die Rechenoperationen
erfüllen müssen, sind wichtig. Das entspricht dem Prinzip des Information Hiding, welches bei den abstrakten Datentypen und in der objekt-orientierten Programmierung eine
wichtige Rolle spielt.
1.10.1
Das Konzept der algebraischen Struktur
Das Prinzip des Information Hiding ist in der Mathematik unter dem Namen algebraische Struktur bekannt. In einer algebraischen Struktur gibt es eine abstrakte Menge von
Objekten zusammen mit Operationen auf den Objekten. Die Namen der Operationen,
die Anzahl Argumente der Operationen und die Gesetze, welche die Operationen erfüllen
müssen, sind festgelegt. Die Menge der Objekte ist abstrakt. Erst in konkreten Beispielen
1.10. BOOLESCHE ALGEBREN
69
wird die Menge der Objekte genau beschrieben und die Wirkung der Operationen auf
den Objekten genau festgelegt. Boolesche Algebren sind ein Beispiel für das Konzept der
algebraischen Struktur. Andere Beispiele von algebraischen Strukturen aus der Mathematik sind Gruppen, Ringe, Körper, Verbände, Vektorräume (siehe Vorlesung Algebra). Das
Konzept der Struktur spielt auch eine wichtige Rolle im Kapitel 2 (Prädikatenlogik).
1.10.2
Boolesche Algebren
Boolesche Algebren sind Strukturen mit einer Multiplikation (∗), einer Addition (+),
einem Komplement (0 ) und zwei Konstanten 0 und 1, in denen im wesentlichen die Gesetze
der Logik gelten.
Definition 1.10.3 Eine Boolesche Algebra ist eine Struktur hA, ∗, +,0 , 0, 1i, wobei
A eine nicht-leere Menge ist (das Universum der Booleschen Algebra),
∗ und + zweistellige Operationen auf A sind (Funktionen von A × A nach A),
0
eine einstellige Operationen auf A ist (eine Funktion von A nach A),
0 und 1 zwei ausgezeichnete Elemente von A sind
und die folgenden Axiome gelten für alle x, y, z ∈ A:
B1. x ∗ y = y ∗ x und x + y = y + x
[Kommutativität]
B2. x ∗ (y ∗ z) = (x ∗ y) ∗ z und x + (y + z) = (x + y) + z
B3. x ∗ (x + y) = x und x + (x ∗ y) = x
[Assoziativität]
[Verschmelzungsregeln]
B4. x ∗ (y + z) = (x ∗ y) + (x ∗ z) und x + (y ∗ z) = (x + y) ∗ (x + z)
B5. x ∗ x0 = 0 und x + x0 = 1
[Distributivität]
[Komplement]
Die Menge A nennt man auch das Universum der Booleschen Algebra.
1.10.4
Beispiel: Die 0-1-Algebra
Das einfachste Beispiel ist die 0-1-Algebra hB, ∧, ∨, ¬, 0, 1i. Das Universum dieser Algebra ist die Menge B = {0, 1} bestehend aus den beiden Wahrheitswerten 0 und 1. Die
Multiplikation (∗) ist die Konjunktion (∧), die Addition (+) ist die Disjunktion (∨),
das Komplement (0 ) ist die Negation (¬). Die Axiome B1–B5 lauten mit den logischen
Symbolen:
B1. x ∧ y = y ∧ x und x ∨ y = y ∨ x
[Kommutativität]
B2. x ∧ (y ∧ z) = (x ∧ y) ∧ z und x ∨ (y ∨ z) = (x ∨ y) ∨ z
B3. x ∧ (x ∨ y) = x und x ∨ (x ∧ y) = x
[Assoziativität]
[Verschmelzungsregeln]
B4. x ∧ (y ∨ z) = (x ∧ y) ∨ (x ∧ z) und x ∨ (y ∧ z) = (x ∨ y) ∧ (x ∨ z) [Distributivität]
B5. x ∧ ¬x = 0 und x ∨ ¬x = 1
Diese Gleichungen gelten für beliebige Wahrheitswerte x, y, z ∈ B.
[Komplement]
70
1.10.5
KAPITEL 1. AUSSAGENLOGIK
Beispiel: Die Potenzmenge als Boolesche Algebra
Sei M eine Menge. Wir betrachten die Algebra hP(M ), ∩, ∪, , ∅, M i, wobei P(M ) die
Potenzmenge von M ist (die Menge der Teilmengen von M ) und für X, Y ⊆ M
X ∩Y
= {a | a ∈ X und a ∈ Y }
[Durchschnitt von X und Y ]
X ∪Y
= {a | a ∈ X oder a ∈ Y }
[Vereinigung von X und Y ]
X
= {a ∈ M | a ∈
/ X}
[Komplement von X bez. M ]
Dies ist auch eine Boolesche Algebra. Die Elemente des Universums sind die Teilmengen
von M . Die Multiplikation (∗) ist der Durchschnitt (∩), die Addition (+) ist die Vereinigung (∪), das Komplement (0 ) ist das mengentheoretische Komplement ( ), die Null (0)
ist die leere Menge (∅), die Eins (1) ist die volle Menge (M ). Die Axiome B1–B5 lauten
mit den Mengenoperationen:
B1. X ∩ Y = Y ∩ X und X ∪ Y = Y ∪ X
[Kommutativität]
B2. X ∩ (Y ∩ Z) = (X ∩ Y ) ∩ Z und X ∪ (Y ∪ Z) = (X ∪ Y ) ∪ Z
B3. X ∩ (X ∪ Y ) = X und X ∪ (X ∩ Y ) = X
[Assoziativität]
[Verschmelzungsregeln]
B4. X ∩(Y ∪Z) = (X ∩Y )∪(X ∩Z) und X ∪(Y ∩Z) = (X ∪Y )∩(X ∪Z) [Distributivität]
B5. X ∩ X = ∅ und X ∪ X = M
[Komplement]
Diese Gleichungen gelten für beliebige Teilmengen X, Y, Z ⊆ M .
1.10.6
Das Extensionalitätsprinzip für Mengen
Wie zeigt man, dass zwei Mengen gleich sind?
Man benutzt das Extensionalitätsprinzip, das sagt, dass zwei Mengen gleich sind genau
dann, wenn sie dieselben Elemente enthalten.
X = Y genau dann, wenn X ⊆ Y und Y ⊆ X.
Ein Beweis, dass zwei Mengen X und Y gleich sind, umfasst die folgenden Schritte:
Schritt 1: Jedes Element von X ist auch ein Element von Y .
Schritt 2: Jedes Element von Y ist auch ein Element von X.
Als Beispiel zeigen wir die Distributivität X ∩ (Y ∪ Z) = (X ∩ Y ) ∪ (X ∩ Z).
Schritt 1: Zuerst zeigen wir, dass X ∩ (Y ∪ Z) ⊆ (X ∩ Y ) ∪ (X ∩ Z):
Sei a ein Element in X ∩ (Y ∪ Z). Dann ist a in X und in Y ∪ Z. Da a in Y ∪ Z ist, ist a
in Y oder in Z. Falls a in Y ist, dann ist a in X ∩ Y und somit auch in (X ∩ Y ) ∪ (X ∩ Z).
Falls a in Z ist, dann ist a in X ∩ Z und somit auch in (X ∩ Y ) ∪ (X ∩ Z). Also ist a in
beiden Fällen auch in (X ∩ Y ) ∪ (X ∩ Z).
Schritt 2: Dann zeigen wir, dass (X ∩ Y ) ∪ (X ∩ Z) ⊆ X ∩ (Y ∪ Z):
1.10. BOOLESCHE ALGEBREN
71
Sei umgekehrt a ein Element von (X ∩ Y ) ∪ (X ∩ Z). Dann ist a in X ∩ Y oder in X ∩ Z.
Falls a in X ∩ Y ist, dann ist a sowohl in X als auch in Y . Also ist a in Y ∪ Z und somit
in X ∩ (Y ∪ Z). Falls a in X ∩ Z ist, dann ist a in X und in Z. Also ist a in Y ∪ Z und
somit auch in X ∩ (Y ∪ Z). In beiden Fällen ist a ein Element von X ∩ (Y ∪ Z).
Also enthalten X ∩ (Y ∪ Z) und (X ∩ Y ) ∪ (X ∩ Z) dieselben Elemente und sind darum
gleich. Somit gilt das Distributivgesetz.
1.10.7
Elementare Theorie der Booleschen Algebren
Aus den Axiomen B1–B5 für Boolesche Algebren folgen weitere Rechengesetze wie etwa das Gesetz der doppelten Negation oder die DeMorgan’schen Gesetze. Die folgenden
Rechengesetze gelten in jeder Booleschen Algebren.
Satz 1.10.8 In jeder Booleschen Algebra gelten die folgenden Gesetze:
(1) x ∗ x = x und x + x = x
[Idempotenz]
(2) x ∗ 0 = 0 und x + 0 = x
[Null]
(3) x ∗ 1 = x und x + 1 = 1
[Eins]
(4) 00 = 1 und 10 = 0
[Null ist Komplement von Eins]
(5) x00 = x
[Gesetz der doppelten Negation]
(6) (x ∗ y)0 = x0 + y 0 und (x + y)0 = x0 ∗ y 0
[Gesetze von DeMorgan]
Da die Gesetze in jeder Booleschen Algebra gelten, sagt man, dass sie aus den Axiomen
B1–B5 logisch folgen.
Beispiel 1.10.9 Mit Booleschen Ausdrücken kann man rechnen wie mit mathematischen
Ausdrücken:
x ∗ (x ∗ y 0 )0 = x ∗ (x0 + y 00 )
= x ∗ (x0 + y)
[DeMorgan]
[Doppelte Negation]
0
= (x ∗ x ) + (x ∗ y) [Distributivität]
= 0 + (x ∗ y)
[Axiom B5]
= x∗y
[Null als Neutralelement]
Die einzelnen Rechenschritte sind ähnlich wie die Ersetzungsschritte im Abschnitt 1.6
(Normalformen).
Die Frage ist nun, welche anderen Gesetze folgen sonst noch aus den Axiomen B1–B5 für
Boolesche Algebren?
Die Antwort ist einfach: Genau die logisch allgemeingültigen Gesetze.
Es gilt der folgende Satz:
72
KAPITEL 1. AUSSAGENLOGIK
Satz 1.10.10 (Gleichungen in Booleschen Algebren)
Eine Gleichung zwischen zwei Ausdrücken gilt in jeder Booleschen Algebra genau dann,
wenn sie in der 0-1-Algebra gilt.
Man kann darum sagen, dass die Axiome B1–B5 der Booleschen Algebren eine algebraische
Charakterisierung der Aussagenlogik sind.
Inbesondere gilt eine Gleichung zwischen zwei Mengenausdrücken genau dann, wenn die
entsprechenden Formeln der Aussagenlogik logisch aequivalent sind.
Beispiel 1.10.11 In der Aussagenlogik gilt die folgende logische Aequivalenz:
¬(A ∧ ¬B) ↔ ¬A ∨ B
Also gilt wegen Satz 1.10.10 für Mengen die folgende Gleichung:
X ∩Y =X ∪Y
Die 0-1-Algebra ist ein Spezialfall einer Potenzmengenalgebra. Die 0-1-Algebra hat dieselbe Struktur wie die Potenzmengenalgebra P({1}), wenn man den Wahrheitswert 1 mit
der Menge {1} und den Wahrheitswert 0 mit der leeren Menge ∅ identifiziert. Wir erhalten
dieselben Verknüpfungstafeln wie in Abschnitt 1.3.1.
∩
{1}
∅
∅
{1}
{1} ∅
{1} {1} ∅
∅
∅
∅
∪
{1}
∅
{1} {1} {1}
∅
{1}
∅
Diese Beobachtung kann auf beliebige endliche Boolesche Algebren verallgemeinert werden.
Satz 1.10.12 (Darstellung von endlichen Booleschen Algebren)
Jede endliche Boolesche Algebra ist isomorph zu einer Potenzmengenalgebra.
Für unendliche Boolesche Algebren gilt der Darstellungssatz von Stone. Jede unendliche
Boolesche Algebra ist isomorph zu einer sogenannten Mengenalgebra (einer Teilalgebra
einer Potenzmengenalgebra). In den folgenden (fakultativen) Paragraphen beweisen wir
diese Sätze.
Verband ist eine Strukutur hA, ∗, +i, welche die Axiome B1–B3 (Kommutativität,
∀∃ Ein
Assoziativität und Verschmelzungsregeln) erfüllt. Die Idee ist, dass die Multiplikation (∗) als Infimum (grösste untere Schranke) und die Addition (+) als Supremum (kleinste
obere Schranke) zu verstehen ist. Dazu wird auf der Menge A eine Ordnungsrelation ≤ definiert.
∀∃ Definition 1.10.13 In einem Verband ist ‘≤’ definiert durch x ≤ y :⇐⇒ x ∗ y = x.
Man könnte genau so gut verlangen, dass x + y = y, da die beiden Bedingungen aequivalent
sind.
1.10. BOOLESCHE ALGEBREN
73
∀∃ Lemma 1.10.14 In einem Verband gilt x ∗ y = x genau dann, wenn x + y = y.
∀∃ Beweis. Sei x ∗ y = x. Dann ist x + y = (x ∗ y) + y = y + (y ∗ x) = y.
Sei x + y = y. Dann ist x ∗ y = x ∗ (x + y) = x. 2
Die Multiplikation und die Addition eines Verbandes sind idempotent.
∀∃ Lemma 1.10.15 In einem Verband gilt x ∗ x = x und x + x = x.
∀∃ Beweis. Es gilt x ∗ x = x ∗ (x + (x ∗ x)) = x und x + x = x + (x ∗ (x + x)) = x. 2
Relation ≤ in einem Verband ist eine partielle Ordnung. Sie ist reflexiv, transitiv
∀∃ Die
und antisymmetrisch.
∀∃ Lemma 1.10.16 In einem Verband gilt:
(a) x ≤ x.
[Reflexivität]
(b) Falls x ≤ y und y ≤ z, dann ist x ≤ z.
[Transitivität]
(c) Falls x ≤ y und y ≤ x, dann ist x = y.
[Antisymmetrie]
∀∃ Beweis. (a) Es gilt x ∗ x = x. Also ist x ≤ x.
(b) Sei x ∗ y = x und y ∗ z = y. Dann ist x ∗ z = (x ∗ y) ∗ z = x ∗ (y ∗ z) = x ∗ y = x.
(c) Sei x ∗ y = x und y ∗ x = y. Dann ist x = x ∗ y = y ∗ x = y. 2
In einem Verband ist die Multiplikation (∗) die grösste untere Schranke (Infimum) und
∀∃ die
Addition (+) die kleinste obere Schranke (Supremum) bezüglich der Ordnung ≤.
∀∃ Lemma 1.10.17 In einem Verband gilt:
(a) x ∗ y ≤ x und x ∗ y ≤ y.
[Die Multiplikation ist eine untere Schranke]
(b) Falls z ≤ x und z ≤ y, dann ist z ≤ x ∗ y.
(c) x ≤ x + y und y ≤ x + y.
[Sie ist die grösste untere Schranke]
[Die Addition ist eine obere Schranke]
(d) Falls x ≤ z und y ≤ z, dann ist x + y ≤ z.
[Sie ist die kleinste obere Schranke]
∀∃ Beweis. (a) Es gilt (x ∗ y) ∗ x = (x ∗ x) ∗ y = x ∗ y. Also ist x ∗ y ≤ x.
Weiter gilt (x ∗ y) ∗ y = x ∗ (y ∗ y) = x ∗ y. Also ist x ∗ y ≤ y.
(b) Sei z ∗ x = z und z ∗ y = z. Dann ist z ∗ (x ∗ y) = (z ∗ x) ∗ y = z ∗ y = z. 2
einer Booleschen Algebra fordert man mit dem Axiom B4, dass sowohl die Multi∀∃ Inplikation
distributiv ist über der Addition als auch die Addition distributiv über der
Multiplikation. Das eine ergibt sich aber aus dem anderen.
∀∃ Lemma 1.10.18 In einem Verband sind die folgenden beiden Aussagen aequivalent:
74
KAPITEL 1. AUSSAGENLOGIK
(a) Für alle x, y, z gilt x ∗ (y + z) = (x ∗ y) + (x ∗ z).
(b) Für alle x, y, z gilt x + (y ∗ z) = (x + y) ∗ (x + z).
∀∃ Beweis. Nehmen wir an, dass (a) gilt. Dann ist (x+y)∗(x+z) = (x∗(x+z))+(y ∗(x+z)) =
x + (y ∗ (x + z)) = x + ((y ∗ x) + (y ∗ z)) = (x + (y ∗ x)) + (y ∗ z)) = x + (y ∗ z). Also gilt auch (b).
Die Rückrichtung wird dual dazu gezeigt. 2
Einen Verband, der die Distributivgesetze B4 erfüllt, nennt man einen distributiven Verband.
Boolesche Algebra ist ein distributiver Verband, der zusätzlich zur Multiplikation
∀∃ Eine
und Addition eine Komplementoperation und zwei Konstanten 0 und 1 besitzt, die das
Axiom B5 erfüllen. Es zeigt sich, dass 0 das kleinste Elemen und 1 das grösste Element bezüglich
der Ordnung ≤ sind.
∀∃ Lemma 1.10.19 In einer Booleschen Algebra gilt:
(a) x ∗ 0 = 0 und x + 0 = x, also 0 ≤ x.
[0 ist kleinstes Element]
(b) x ∗ 1 = x und x + 1 = 1, also x ≤ 1.
[1 ist grösstest Element]
∀∃ Beweis. (a) x ∗ 0 = x ∗ (x ∗ x0 ) = (x ∗ x) ∗ x0 = x ∗ x0 = 0.
(b) x ∗ 1 = x ∗ (x + x0 ) = x. 2
Das Komplement in einer Booleschen Algebra erfüllt das Gesetz der doppelten Negation
∀∃ sowie
die DeMorgan’schen Gesetze. Um diese Gesetze aus B1–B5 herzuleiten ist das
folgende Lemma hilfreich. Es sagt, dass wenn das Infimum von zwei Elementen gleich 0 ist und
das Supremum gleich 1, dann sind die Elemente komplementär zueinander.
∀∃ Lemma 1.10.20 In einer Booleschen Algebra gilt:
Falls x ∗ y = 0 und x + y = 1, dann ist y = x0 .
∀∃ Beweis. Sei x ∗ y = 0 und x + y = 1.
Dann gilt y = y ∗ 1 = y ∗ (x + x0 ) = (y ∗ x) + (y ∗ x0 ) = 0 + (y ∗ x0 ) = y ∗ x0 . Also ist y ≤ x0 .
Dual dazu folgt, dass x0 ≤ y. Also ist y = x0 . 2
∀∃ Lemma 1.10.21 In einer Booleschen Algebra gilt:
(a) x00 = x
(b) 00 = 1 und 10 = 0
(c) (x ∗ y)0 = x0 + y 0 und (x + y)0 = x0 ∗ y 0
(d) Falls x ≤ y, dann ist y 0 ≤ x0 .
(e) Es ist x ≤ y genau dann, wenn x ∗ y 0 = 0.
[Gesetz der doppelten Negation]
[0 und 1 sind komplementär]
[Gesetze von DeMorgan]
[Kontraposition]
1.10. BOOLESCHE ALGEBREN
75
∀∃ Beweis. (a) Es ist x0 ∗ x = 0 und x0 + x = 1 (Axiom B5).
Also folgt mit Lemma 1.10.20, dass x = x00 .
(b) Es ist 0 ∗ 1 = 0 und 0 + 1 = 1 (Lemma 1.10.19). Also folgt mit Lemma 1.10.20, dass 1 = 00 .
(c) Es gilt (x0 + y 0 ) ∗ (x ∗ y) = (x0 ∗ x ∗ y) + (y 0 ∗ x ∗ y) = 0 + 0 = 0.
Weiter gilt (x0 + y 0 ) + (x ∗ y) = (x0 + y 0 + x) ∗ (x0 + y 0 + y) = 1 ∗ 1 = 1.
Also folgt mit Lemma 1.10.20, dass (x ∗ y)0 = x0 + y 0 .
(d) Sei x ≤ y. Dann ist x ∗ y = x (Def. 1.10.13).
Also gilt x0 = (x ∗ y)0 = x0 + y 0 (DeMorgan). Aus Lemma 1.10.14 folgt, dass y 0 ≤ x0 .
(e) Sei x ≤ y. Dann ist x ∗ y = x (Def. 1.10.13).
Also ist x ∗ y 0 = (x ∗ y) ∗ y 0 = x ∗ (y ∗ y 0 ) = x ∗ 0 = 0.
Sei x ∗ y 0 = 0. Dann ist x ∗ y = (x ∗ y) + 0 = (x ∗ y) + (x ∗ y 0 ) = x ∗ (y + y 0 ) = x ∗ 1 = x.
Also ist x ≤ y. 2
Funktion f von einer Booleschen Algebra A in eine Boolesche Algebra B ist ein
∀∃ Eine
Homomorphismus, falls sie die Operationen und Konstanten einer Booleschen Algebra
erhält.
Definition 1.10.22 Ein Homomorphismus von einer Booleschen Algebra A in eine Boolesche
Algebra B ist eine Funktion f : A → B mit den folgenden Eigenschaften für alle x, y ∈ A:
f (x ∗ y) = f (x) ∗ f (y)
f (x + y) = f (x) + f (y)
f (0) = 0 und f (1) = 1
Falls die Funktion f bijektiv ist, dann nennt man f einen Isomorphismus und sagt, dass A und B
isomorph sind.
Die Erhaltung des Komplements ist nicht eingeschlossen in der Definition von Homomorphismus,
da sie aus den anderen Bedingungen folgt.
∀∃ Lemma 1.10.23 Für einen Homomorphismus f von einer Booleschen Algebra A in eine
Boolesche Algebra B gilt f (x0 ) = f (x)0 für alle x ∈ A.
∀∃ Beweis. Es ist f (x) ∗ f (x0 ) = f (x ∗ x0 ) = f (0) = 0 und f (x) + f (x0 ) = f (x + x0 ) = f (1) = 1.
Also folgt mit Lemma 1.10.20, dass f (x0 ) = f (x)0 . 2
Die minimalen Elemente (verschieden von 0) einer Booleschen Algebra werden Atome
∀∃ genannnt.
Sie spielen eine wichtige Rolle bei der Darstellung von endlichen Booleschen
Algebren. In einer Mengenalgebra sind die Atome die Mengen mit genau einem Element.
Definition 1.10.24 Eine Element a einer Booleschen Algebra heisst Atom, falls a 6= 0 und für
alle x ≤ a entweder x = 0 oder x = a ist. Die Menge aller Atome einer Booleschen Algebra A
bezeichnen wir mit At(A).
Atome können auf verschiedene Arten charakterisiert werden.
76
KAPITEL 1. AUSSAGENLOGIK
∀∃ Lemma 1.10.25 In einer Booleschen Algebra sind die folgenden Aussagen aequivalent für
ein Element a:
(a) a ist ein Atom.
(b) a 6= 0 und für alle x ist a ≤ x oder a ≤ x0 .
(c) a 6= 0 und für alle x und y gilt, falls a ≤ x + y, dann ist a ≤ x oder a ≤ y.
∀∃ Beweis. Aus (a) folgt (b): Sei a 6= 0 und x ein beliebiges Element.
Mit Lemma 1.10.17 folgt, dass a ∗ x ≤ a.
Da a ein Atom ist, ist a ∗ x = 0 oder a ∗ x = a.
Falls a ∗ x = 0, dann ist a ≤ x0 (Lemma 1.10.21 (e)).
Falls a ∗ x = a, dann ist a ≤ x (Def. 1.10.13).
Aus (b) folgt (c): Sei a 6= 0 und a ≤ x + y.
Falls a ≤ x oder a ≤ y, ist die Behauptung (c) gezeigt.
Sonst folgt aus (b), dass a ≤ x0 und a ≤ y 0 .
Mit Lemma 1.10.21 (e) ergibt sich, dass a ∗ x = 0 und a ∗ y = 0.
Also ist a = a ∗ (x + y) = (a ∗ x) + (a ∗ y) = 0 + 0 = 0. Widerspruch.
Aus (c) folgt (a): Sei a 6= 0 und x ≤ a.
Es gilt a ≤ 1 und somit a ≤ x + x0 . Aus (c) folgt, dass a ≤ x oder a ≤ x0 .
Falls a ≤ x, dann ist x = a.
Falls a ≤ x0 , dann ist x = a ∗ x = (a ∗ x0 ) ∗ x = 0.
Also ist a ein Atom. 2
können wir zeigen, dass jede endliche Boolesche Algebra isomorph ist zu einer
∀∃ Nun
Potenzmengenalgebra. Dazu benötigen wir ein Lemma, das sagt, dass es in endlichen
Boolesche Algebren zu jedem Element kleinere Atome gibt.
∀∃ Lemma 1.10.26 In einer endlichen Booleschen Algebra gibt es zu jedem Element x 6= 0
mindestens ein Atom a ≤ x.
∀∃ Beweis. Sei x 6= 0. Falls x nicht bereits selbst ein Atom ist, dann gibt es ein y ≤ x derart,
dass y 6= x und y 6= 0. Falls y ein Atom ist, ist der Beweis fertig, sonst gibt es ein z ≤ y derart,
dass z 6= y und z 6= 0, usw. Da die Boolesche Algebra endlich ist, muss dieser Prozess irgendwann
mit einem Atom a ≤ x stoppen. 2
∀∃ Satz 1.10.27 (Darstellungssatz für endliche Boolesche Algebren)
Sei A eine endliche Boolesche Algebra und f die Abbildung von A in die Potenzmenge der
Menge der Atome von A definiert durch f (x) = {a ≤ x | a ist ein Atom von A}. Dann ist f ein
Isomorphismus und A ist somit isomorph zu P(At(A)).
1.10. BOOLESCHE ALGEBREN
77
∀∃ Beweis. (a) f (x ∗ y) = f (x) ∩ f (y): Da x ∗ y die grösste untere Schranke von x und y ist,
gilt a ≤ x ∗ y dann und nur dann, wenn a ≤ x und a ≤ y. Also ist a ∈ f (x ∗ y) genau dann,
wenn a ∈ f (x) ∩ f (y).
(b) f (x + y) = f (x) ∪ f (y): Sei a ∈ f (x + y). Dann ist a ein Atom mit a ≤ x + y.
Aus Lemma 1.10.25 (b) folgt, dass a ≤ x oder a ≤ y. Also ist a ∈ f (x) ∪ f (y).
Falls a ∈ f (x) ∪ f (y), dann ist a ≤ x oder a ≤ y.
In beiden Fällen ist a ≤ x + y und somit a ∈ f (x + y).
(c) f (0) = ∅: Dies gilt, da Atome verschieden von 0 sind.
(d) f (1) = At(A): Dies gilt, da 1 das grösste Element von A ist.
(e) f ist injektiv: Sei x 6= y. Dann ist x 6≤ y oder y 6≤ x. Nehmen wir an, dass x 6≤ y.
Dann ist x ∗ y 0 6= 0 (Lemma 1.10.21 (e)). Also gibt es ein Atom a ≤ x ∗ y 0 (Lemma 1.10.26). Für
dieses Atom a gilt a ≤ x, aber a 6≤ y. Also ist a ∈ f (x), aber a ∈
/ f (y) und somit f (x) 6= f (y).
(f) f ist surjektiv: Sei {a1 , . . . , an } eine Menge von Atomen von A.
Wir behaupten, dass f (a1 + . . . + an ) = {a1 , . . . , an }.
Sei b ∈ f (a1 + . . . + an ). Dann ist b ein Atom mit b ≤ a1 + . . . + an .
Aus Lemma 1.10.25 (b) folgt, dass es ein i gibt, so dass b = ai . Also ist b ∈ {a1 , . . . , an }.
Falls umgekehrt b ∈ {a1 , . . . , an }, dann ist b ≤ a1 + . . . + an und somit b ∈ f (a1 + . . . + an ). 2
gibt unendliche Boolesche Algebren, die nicht isomorph sind zu einer Potenzmen∀∃ Esgenalgebra.
Betrachten wir die Menge A aller Teilmengen von N, die endlich oder coendlich sind:
A := {X ⊆ N | X oder N \ X ist endlich}
Es ist leicht zu sehen, dass A abgeschlossen ist unter Durchschnitt, Vereinigung und Komplement
und dass A sowohl die leere Menge ∅ als auch die ganze Menge N enthält. Also ist A eine
Boolesche Algebra. Die Menge A enthält abzählbar unendlich viele Elemente. Es gibt aber keine
Potenzmenge mit abzählbar unendlich vielen Elementen. Also kann A nicht isomorph zu einer
Potenzmengenalgebra sein.
die Darstellung von (unendlichen) Booleschen Algebren spielt der Begriff des Filters
∀∃ Für
eine zentrale Rolle. Eine Filter ist eine nicht-leere Menge von Elementen verschieden
von 0, die nach oben abgeschlossen ist (bez. ≤) und abeschlossen ist unter grössten unteren
Schranken (∗).
Definition 1.10.28 Eine Teilmenge F einer Booleschen Algebra A heisst Filter, falls die folgenden Bedingungen erfüllt sind:
1 ∈ F.
0∈
/ F.
Falls x ∈ F , y ∈ A und x ≤ y, dann ist y ∈ F .
Falls x ∈ F und y ∈ F , dann ist x ∗ y ∈ F .
Beispiel: Wenn x 6= 0, dann ist die Menge {y ∈ A | x ≤ y} ein Filter.
∀∃
Ein Ultrafilter ist ein Filter, der für jedes Element x ∈ A entweder x oder x0 enthält.
(Ein Filter F kann nicht sowohl x als auch x0 enthalten, da sonst 0 = x ∗ x0 ∈ F .)
78
KAPITEL 1. AUSSAGENLOGIK
Definition 1.10.29 Ein Filter F von A heisst Ultrafilter, falls für jedes Element x ∈ A entweder
x ∈ F oder x0 ∈ F .
Ultrafilter können auch anders charakterisiert werden. Beispielsweise sind Ultrafilter genau die
maximalen Filter.
∀∃ Lemma 1.10.30 Die folgenden Aussagen sind aequivalent für einen Filter F einer Booleschen Algebra A:
(a) F ist ein Ultrafilter.
(b) Für alle x, y ∈ A gilt, falls x + y ∈ F , dann ist x ∈ F oder y ∈ F .
(c) Für alle Filter G von A gilt, falls F ⊆ G, dann ist F = G.
∀∃ Beweis. Aus (a) folgt (b): Sei x + y ∈ F . Nehmen wir an, dass x ∈
/ F und y ∈
/ F . Dann ist
x0 ∈ F und y 0 ∈ F und also auch (x + y) ∗ x0 ∗ y 0 ∈ F . Da (x + y) ∗ x0 ∗ y 0 = (x + y) ∗ (x + y)0 = 0,
wäre 0 ∈ F . Also muss x ∈ F oder y ∈ F sein.
Aus (b) folgt (a): F ist ein Filter, darum ist 1 ∈ F . Also ist x + x0 ∈ F . Mit (b) folgt, dass x ∈ F
oder x0 ∈ F .
Aus (a) folgt (c): Sei F ⊆ G, aber F 6= G. Dann gibt es ein x ∈ G, so dass x ∈
/ F . Also ist x0 ∈ F
0
und x ∈ G. Widerspruch.
Aus (c) folgt (a): Nehmen wir an, dass x0 ∈
/ F . Wir zeigen, dass x ∈ F . Dazu definieren wir
G := {z ∈ A | es gibt ein y ∈ F mit x ∗ y ≤ z} und behaupten, dass G ein Filter ist.
Zuerst zeigen wir, dass 0 ∈
/ G. Nehmen wir an, dass 0 ∈ G. Dann gäbe es ein y ∈ F , so dass
x ∗ y ≤ 0. Das heisst, dass x ∗ y = 0 und somit y ≤ x0 (Lemma 1.10.21 (e)). Also wäre x0 ∈ F .
Widerspruch.
Da x ∗ 1 ≤ 1, ist 1 ∈ G.
Dass G nach oben abgeschlossen ist bez. ≤, ist offensichtlich.
Sei z1 ∈ G und z2 ∈ G. Dann gibt es y1 ∈ F und y2 ∈ F mit x ∗ y1 ≤ z1 und x ∗ y2 ≤ z2 . Also
ist x ∗ (y1 ∗ y2 ) ≤ z1 ∗ z2 und z1 ∗ z2 ∈ F .
Also ist G ein Filter.
Für ein y ∈ F ist x ∗ y ≤ y. Also ist F ⊆ G.
Da 1 ∈ F und x ∗ 1 ≤ x, ist x ∈ G.
Aus (c) folgt, dass F = G und somit ist x ∈ F . 2
Darstellungssatz für (beliebige) Boolesche Algebren sagt, dass jede Boolesche Alge∀∃ Der
bra isomorph ist zu einer Mengenalgebra. Eine Mengenalgebra ist eine Teilalgebra einer
Potenzmengenalgebra (eine Menge von Mengen abgeschlossen unter Durchschnitt, Vereinigung
und Komplement, welche die leere Menge und die ganze Menge enthält). Für den Darstellungssatz benötigen wir das folgende Lemma, das sagt, dass jeder Filter zu einem Ultrafilter erweitert
werden kann. Der Beweis benutzt das Zornsche Lemma.
∀∃ Lemma 1.10.31 Zu jedem Filter F gibt es einen Ultrafilter G mit F ⊆ G.
1.10. BOOLESCHE ALGEBREN
79
∀∃ Beweis. Sei F ein Filter. Wir betrachten die Menge aller Filter G mit F ⊆ G. Diese
Menge ist partiell geordnet durch ⊆. Weiter besitzt jede Kette (total geordnete Teilmenge) eine
obere Schranke (nämlich ihre Vereinigung). Also gibt es nach dem Zornschen Lemma maximale
Elemente. Gemäss Lemma 1.10.30 sind die maximalen Elemente Ultrafilter. 2
∀∃ Satz 1.10.32 (Darstellungsatz für Boolesche Algebren, Satz von Stone)
Sei A eine Boolesche Algebra und f die Funktion, die jedem x ∈ A die Menge der Ultrafilter F von A mit x ∈ F zuordnet. Dann ist f ein injektiver Homomorphismus von A in die
Potenzmengenalgebra über der Menge der Ultrafilter von A und A ist somit isomorph zu einer
Mengenalgebra.
∀∃ Beweis. (a) f (x ∗ y) = f (x) ∩ f (y):
Für einen Filter F gilt x ∗ y ∈ F genau dann, wenn x ∈ F und y ∈ F .
Also ist F ∈ f (x ∗ y) genau dann, wenn F ∈ f (x) ∩ f (y).
(b) f (x + y) = f (x) ∪ f (y):
Sei F ∈ f (x + y). Dann ist F ein Ultrafilter mit x + y ∈ F . Aus Lemma 1.10.30 (b) folgt, dass
x ∈ F oder y ∈ F . Also ist F ∈ f (x) ∪ f (y).
Falls F ∈ f (x) ∪ f (y), dann ist x ∈ F oder y ∈ F . In beiden Fällen ist x + y ∈ F , also ist
F ∈ f (x + y).
(c) f (0) = ∅: Dies gilt, da Filter die 0 nicht enthalten.
(d) f (1) = {F | F Ultrafilter von A}: Dies gilt, da jeder Filter die 1 enthält.
(d) f ist injektiv: Sei x 6= y. Dann ist x 6≤ y oder y 6≤ x. Nehmen wir an, dass x 6≤ y.
Dann ist x ∗ y 0 6= 0 (Lemma1.10.21 (e)).
Sei F der Filter {z ∈ A | x ∗ y 0 ≤ z} und G ein Ultrafilter mit F ⊆ G (Lemma 1.10.31).
Dann ist x ∈ G, y 0 ∈ G und y ∈
/ G.
Also ist G ∈ f (x), aber G ∈
/ f (y) und somit f (x) 6= f (y). 2
Gleichungen gelten in allen Booleschen Algebren? Es sind genau die Tautologien
∀∃ Welche
der Aussagenlogik, also die Gleichungen, die in der 0-1-Algebra gelten. Dieser Satz
kann auf verschiedene Arten bewiesen werden. Zum Beispiel benutzt man den Satz von Stone
(Satz 1.10.32) und zeigt, dass wenn eine Gleichung in einer Mengenalgebra nicht gilt, dass sie
dann auch nicht in der 0-1-Algebra nicht gilt. Eine andere Möglichkeit ergibt sich mit dem
Vollständigkeitssatz der Aussagenlogik (Satz 1.4.42). Man zeigt, dass wenn eine Formel in der
Aussagenlogik beweisbar ist, dann ist in jeder Booleschen Algebra die Formel (aufgefasst als
Boolescher Ausdruck) gleich 1.
∀∃ Satz 1.10.33 (Gleichungen in Booleschen Algebren)
Eine Gleichung zwischen zwei Ausdrücken gilt in allen Booleschen Algebren genau dann, wenn
sie in der 0-1-Algebra gilt.
∀∃ Beweis. Falls eine Gleichung in allen Booleschen Algebren gilt, dann gilt sie sicher auch in
der 0-1-Algebra. Die umgekehrte Richtung zeigen wir auf zwei verschiedene Arten.
Variante 1: Seien s und t zwei Boolesche Ausdrücke, die nicht gleich sind in allen Booleschen
Algebren. Nach Satz 1.10.32 gibt es insbesondere eine Mengenalgebra A, so dass s verschieden
80
KAPITEL 1. AUSSAGENLOGIK
A
ist von t für eine Belegung α der Variablen mit Elementen aus A. Also ist [[s]]A
α 6= [[t]]α und
A
A
die Mengen [[s]]α und [[t]]α enthalten nicht dieselben Elemente. Wir können annehmen, dass
es ein Element x0 ∈ A gibt, derart dass x0 ∈ [[s]]A
/ [[t]]A
α aber x0 ∈
α . Nun definieren wir einen
Homomorphismus f : A → B mit
1, falls x0 ∈ X;
f (X) :=
0, sonst.
Unter diesem Homomorphismus bekommt s den Wert 1 in B und t den Wert 0. Also gilt die
Gleichung s = t nicht in der 0-1-Algebra.
Variante 2: Man beweist zuerst die folgenden beiden Aussagen mit Induktion nach der Länge
der Herleitung d bzw. des Herleitungsschrittes s (unter der Annahme, dass Φ endlich ist):
(a) Falls d: Φ
N
Ψ, dann gilt in jeder Booleschen Algebra
V
Φ ≤ A für jede Formel A ∈ Ψ.
(b) Falls s: Φ
N
A, dann gilt in jeder Booleschen Algebra
V
Φ ≤ A.
Die Implikation x → y wird dabei als x0 + y und die Aequivalenz x ↔ y als (x0 + y) ∗ (y 0 + x)
interpretiert. Man benutzt unter anderem, dass aus x ∗ y ≤ z folgt, dass x ≤ (y 0 + z).
Nehmen wir nun an, dass die Gleichung s = t in der 0-1-Algera gilt. Aus der Vollständigkeit des
Systems des natürlichen Schliessens (Satz 1.4.42) folgt, dass die Formel s ↔ t herleitbar ist. Es
gilt also s N t und t N s. Somit gilt in jeder Booleschen Algebra s ≤ t und t ≤ s, also s = t. 2
∀∃
Boolesche Algebren können auch als Ringe aufgefasst werden. Falls hA, ∗, +,0 , 0, 1i eine
Boolesche Algebra ist, dann definiert man:
x ⊕ y := (x ∗ y 0 ) + (x0 ∗ y)
[Symmetrische Differenz]
x ⊗ y := x ∗ y
Dann ist hA, ⊗, ⊕, 0, 1i ein sogenannter Boolescher Ring (ein Ring mit x ⊗ x = x).
Falls umgekehrt hA, ⊗, ⊕, 0, 1i ein Boolescher Ring ist, dann definiert man:
x∗y
:= x ⊗ y
x + y := x ⊕ y ⊕ (x ⊗ y)
x0
:= 1 x
Dann ist hA, ∗, +,0 , 0, 1i eine Boolesche Algebra. (In einem Booleschen Ring ist x ⊕ x = 0 und
x ⊗ y = y ⊗ x, d.h. er ist kommutativ.)
Kapitel 2
Prädikatenlogik
2.1
Prädikate und Quantoren
In der Prädikatenlogik spricht man darüber, ob Prädikate (Eigenschaften) auf Objekte
zutreffen oder nicht und, ob Objekte gleich sind oder nicht. Daneben gibt es Funktionen
auf dem Universum, die Objekten andere Objekte zuordnen. Welche Prädikate genau zur
Verfügung stehen, was der Bereich der Objekte ist und welche Funktionen angewandt
werden können, wird im voraus genau festgelegt und hängt vom Kontext ab. Weiter gibt
es Variablen, die beliebige Objekte des Universums bezeichnen, und Quantoren, die es
erlauben, Aussagen wie “für alle x gilt . . . ” und “es gibt ein x mit . . . ” zu machen.
Die Aussagen aus Abschnitt 1.1 können wie folgt in die Prädikatenlogik übersetzt werden:
“Der Schnee ist schwarz”. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Farbe(Schnee) ≈ schwarz
“Die Strasse ist nass” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zustand(Strasse) ≈ nass
Die Aussagen aus dem Bereich der Mathematik werden wie folgt übersetzt:
“2 < 3” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 < 3
“2 + 3 = 5” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 + 3 ≈ 5
“3 ist eine Primzahl” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Prim(3)
“15 ist durch 3 und 5 teilbar” . . . . . . . . . . . . . . . . . . . . . . . . . teilt(3, 15) ∧ teilt(5, 15)
Die Beispiele aus der Geometrie sind in der Prädikatenlogik:
“Der Punkt (2, 5) liegt auf der Geraden g” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (2, 5) ∈ g
“Die Geraden g1 und g2 schneiden sich” . . . . . . . . . . . . . . . . . . . . . . . ∃p (p ∈ g1 ∧ p ∈ g2 )
Beispiele von Aussagen in der Informatik sind:
“Der Array a hat die Länge 50”. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Length(a) ≈ 50
“Der Array a ist aufsteigend geordnet” . . . . ∀i (i + 1 < Length(a) → a[i] ≤ a[i + 1])
81
82
KAPITEL 2. PRÄDIKATENLOGIK
Aus den Variablen und Konstanten werden mit Hilfe der Funktionen die Terme der Prädikatenlogik aufgebaut. Die atomaren Formeln der Prädikatenlogik sind entweder Gleichungen zwischen Termen oder Prädikate angewandt auf Terme. Aus den atomaren Formeln
werden mit Hilfe der aussagenlogischen Junktoren und den Quantoren die Formeln aufgebaut. Die Quantoren haben die folgende Bedeutung:
∀x . . . . . . “für alle x gilt” . . . . . . . . . Allquantor
∃x . . . . . . “es gibt ein x mit”. . . . . . Existenzquantor
Bevor wir die genaue Syntax der Prädikatenlogik angeben, wollen wir die Bestandteile
der Formeln der Prädikatenlogik genauer betrachten.
2.1.1
Variablen
Die Variablen x, y, z bezeichnen beliebige Objekte des gegebenen Universums. Das Universum kann zum Beispiel aus den natürlichen Zahlen (N) bestehen oder aus den Punkten
und Geraden der ebenen Geometrie oder aus allen möglichen Werten eines Datentyps einer Programmiersprache (z.B. int). Im Allgemeinen kann ein Universum eine beliebige
nicht-leere Menge sein.
2.1.2
Konstanten
Die Konstanten c, d bezeichnen feste Elemente des Universums. Zum Beispiel bezeichnet
die Konstante 0 die Zahl Null und die Konstante 1 die Zahl Eins.
2.1.3
Funktionen
Funktionen f , g operieren auf dem Universum. Aus den Variablen und den Konstanten
werden mit den Funktionen die Terme der Prädikatenlogik aufgebaut. Terme werden
ausgewertet zu Objekten des Universums. Beispiel: Die Addition ist eine Funktion von
N × N nach N. Der Term x ∗ (y + 1) hat den Wert 15, wenn die Variable x mit 3 und
y mit 4 belegt wird.
2.1.4
Gleichungen
Eine Gleichung s ≈ t bedeutet, dass die beiden Terme s und t denselben Wert haben im
Universum. Ob eine Gleichung zutrifft oder nicht, hängt ab von der Belegung der Variablen, die in der Gleichung vorkommen. Zum Beispiel ist die Gleichung x∗(y+1) ≈ (x∗y)+x
immer wahr im Universum N. Wir benutzen das Symbol ‘≈’ als formales Gleichheitssymbol in den Formeln der Prädikatenlogik. Das Symbol ‘=’ benutzen wir, wenn wir über die
Prädikatenlogik sprechen. Damit halten wir die beiden Ebenen auseinander.
2.1.5
Prädikate
Mit der Formel R(t1 , . . . , tn ) drückt man aus, dass das Prädikat R auf die Objekte
t1 , . . . , tn zutrifft (oder dass t1 , . . . , tn in Relation R stehen).
2.1. PRÄDIKATE UND QUANTOREN
2.1.6
83
Der Allquantor
Die Formel ∀x A ist wahr, wenn die Formel A wahr ist für jedes x aus dem gegebenen
Universum. Die Formel ∀x A ist falsch, wenn es ein Objekt x gibt, so dass A falsch ist.
2.1.7
Der Existenzquantor
Die Formel ∃x A ist wahr, wenn die Formel A wahr ist für mindestens ein x aus dem
gegebenen Universum. Die Formel ∃x A ist falsch, wenn A falsch ist für jedes x aus dem
Universum.
Beispiel 2.1.8 (Sind Software-Ingenieure wirklich Igenieure?)
Betrachten wir die folgenden zwei Sätze:
Ingenieure benutzen Mathematik.
Software-Ingenieure benuzten keine Mathematik.
Nehmen wir an, dass beide Sätze wahr sind. Welche Schlüsse kann man ziehen?
Software-Ingenieure sind keine Ingenieure?
[Ja]
Nicht alle Software-Ingenieure sind Ingenieure?
[Nein]
Es gibt keine Software-Ingenieure?
[Nein]
Die beiden Annahmen können folgendermassen in die Prädikatenlogik übersetzt werden:
∀x (Engineer(x) → Uses(x, Mathematics))
∀x (SoftwareEngineer(x) → ¬Uses(x, Mathematics))
Die möglichen Konsequenzen lauten so:
∀x (SoftwareEngineer(x) → ¬Engineer(x))
¬∀x (SoftwareEngineer(x) → Engineer(x))
¬∃x (SoftwareEngineer(x))
Das Prädikat Engineer(x) soll zutreffen, falls x ein Ingenieur ist. Davon unabhängig
soll das Prädikat SoftwareEngineer(x) bedeuten, dass x ein Software-Ingenieur ist. Das
Prädikat Uses(x, y) soll heissen “x benutzt y”. Ob eine Schlussfolgerung zulässig ist,
hängt nicht von der speziellen Bedeutung der Wörter “Ingenieur”, “Software-Ingenieur”,
“benutzt” ab. Einzig die Struktur der Sätze bestimmt, welche Schlussfolgerungen erlaubt
sind. Die folgende Formel der Prädikatenlogik ist wahr, unabhängig davon, wie man die
Prädikate interpretiert und unabhängig vom Bereich, über den die Variablen laufen:
∀x (E(x) → U(x, M)) ∧ ∀x (S(x) → ¬U(x, M)) → ∀x (S(x) → ¬E(x))
84
KAPITEL 2. PRÄDIKATENLOGIK
Die folgenden zwei Formeln dagegen sind nicht immer wahr:
∀x (E(x) → U(x, M)) ∧ ∀x (S(x) → ¬U(x, M)) → ¬∀x (S(x) → E(x))
∀x (E(x) → U(x, M)) ∧ ∀x (S(x) → ¬U(x, M)) → ¬∃x S(x)
Zu jeder der beiden Formeln kann man ein Gegenbeispiel angeben, in dem die Prädikate so
interpretiert werden, dass die beiden Annahmen jeweils wahr sind, die Konklusion jedoch
falsch wird. Die folgende Formel dagegen ist wahr:
∀x (E(x) → U(x, M)) ∧ ∀x (S(x) → ¬U(x, M)) → ¬∀x (S(x) → E(x)) ∨ ¬∃x S(x)
Die Disjunktion der beiden Konklusionen folgt aus den beiden Annahmen.
Beispiel 2.1.9 (Sind Enteneier auch Vogeleier?)
Gegeben seien die folgenden Prädikate:
Ente(x) . . . . . . . x ist eine Ente
Vogel(x). . . . . . x ist ein Vogel
Ei(x, y) . . . . . . . x ist ein Ei von y
Mit Hilfe der Prädikate können verschiedene Aussagen gemacht werden:
Jede Ente ist ein Vogel . . . . . . ∀x (Ente(x) → Vogel(x))
x ist ein Entenei . . . . . . . . . . . . ∃y (Ei(x, y) ∧ Ente(y))
x ist ein Vogelei . . . . . . . . . . . . ∃y (Ei(x, y) ∧ Vogel(y))
Die Frage, ob jedes Entenei auch ein Vogelei ist, kann wie folgt ausgedrückt werden:
∀x (∃y (Ei(x, y) ∧ Ente(y)) → ∃z (Ei(x, z) ∧ Vogel(z)))
Diese Formel folgt logisch aus der Annahme, dass jede Ente ein Vogel ist. Die folgende
Formel ist nämlich immer wahr:
∀x (Ente(x) → Vogel(x)) → ∀x (∃y (Ei(x, y) ∧ Ente(y)) → ∃z (Ei(x, z) ∧ Vogel(z)))
Für die Wahrheit der Formel spielt die Interpretation der Prädikate keine Rolle. Die
Prädikate können auch anders gelesen werden:
BMW(x) . . . . . . . . x ist ein BMW
Auto(x).. . . . . . x ist ein Auto
Rad(x, y). . . . . . x ist ein Rad von y
Dann ist die folgende Formel auch wahr:
∀x (BMW(x) → Auto(x)) → ∀x (∃y (Rad(x, y) ∧ BMW(y)) → ∃z (Rad(x, z) ∧ Auto(z)))
Die Formel sagt, dass jedes Rad eines BMW ein Autorad ist unter der Annahme, dass
jeder BMW ein Auto ist. (Siehe Fortsetzung in Beispiel 2.4.5.)
2.1. PRÄDIKATE UND QUANTOREN
85
Beispiel 2.1.10 (Zahlentheorie) Sei das Universum die Menge der natürlichen Zahlen. Die Variablen x, y, z sollen über 0, 1, 2, . . . etc. laufen. Gegeben seien die folgenden
Prädikate:
Prim(x) . . . . . . . . . x ist eine Primzahl
teilt(x, y). . . . . . x ist ein Teiler von y
ggt(x, y, z). . . . . . der grösste gemeinsame Teiler von x und y ist z
Das Prädikat teilt(x, y) kann so definiert werden:
teilt(x, y) ↔ ∃z (x ∗ z ≈ y)
Das Prädikat Prim(x) lässt sich so schreiben:
Prim(x) ↔ ¬(x ≈ 1) ∧ ∀y (teilt(y, x) → y ≈ 1 ∨ y ≈ x)
Mit der folgenden Formel sagen wir: Wenn eine Primzahl x ein Produkt y ∗ z teilt, dann
teilt x mindestens einen der beiden Faktoren y oder z.
∀x∀y∀z (Prim(x) ∧ teilt(x, y ∗ z) → teilt(x, y) ∨ teilt(x, z))
Die Vermutung, dass es unendlich viele Primzahlzwillinge gibt, lässt sich so ausdrücken:
∀x∃y (x < y ∧ Prim(y) ∧ Prim(y + 2))
Das Prädikat ggt(x, y, z) kann so definiert werden:
∀x∀y∀z (ggt(x, y, z) ↔ teilt(z, x) ∧ teilt(z, y)∧
∀u (teilt(u, x) ∧ teilt(u, y) → teilt(u, z)))
In diesem Beispiel sehen wir, dass sich viele mathematische Aussagen sehr leicht in der
Prädikatenlogik schreiben lassen. (Siehe dazu auch Abschnitt 2.6).
Beispiel 2.1.11 (Block World) In Abb. 2.1 ist eine kleine Welt mit geometrischen
Objekten dargestellt. Es gibt Dreiecke, Quadrate und Fünfecke. Für jeden Typ gibt es
ein Prädikat:
Triangle(x). . . . . . x ist ein Dreieck
Square(x) . . . . . . . . x ist ein Quadrat
Pentagon(x). . . . . . x ist ein Fünfeck
Gewisse Objekte haben einen Namen. In der Block World von von Abb. 2.1 gilt:
Triangle(a) Triangle(b) Square(c) Square(d) Pentagon(e) Square(f)
Jedes Objekt hat eine Grösse. Es kann klein, mittel oder gross sein. Die Grösse der Objekte
wird mit den folgenden Prädikaten beschrieben:
Small(x) . . . . . . . x ist klein
Medium(x). . . . . . x ist mittel
Large(x) . . . . . . . x ist gross
86
KAPITEL 2. PRÄDIKATENLOGIK
c
e
d
b
a
f
Abbildung 2.1: Block World.
Für die Grösse der Objekte in der Block World von Abb. 2.1 gilt:
Medium(a) Medium(b) Large(c) Medium(d) Large(e) Small(f)
Dass es in der Block World von Abb. 2.1 ein mittelgrosses Fünfeck gibt, lässt sich so
ausdrücken:
∃x (Pentagon(x) ∧ Medium(x))
Dass es genau ein kleines Dreieck gibt, lässt sich so ausdrücken:
∃x (Triangle(x) ∧ Small(x) ∧ ∀y (Triangle(y) ∧ Small(y) → y ≈ x))
Um die Grösse der Objekte zu vergleichen, werden die folgenden Prädikate benötigt:
SameSize(x, y). . . . . . x und y haben dieselbe Grösse
Smaller(x, y) . . . . . . . x ist kleiner als y
In der Block World von Abb. 2.1 gilt unter anderem:
SameSize(a, b) SameSize(a, d) SameSize(c, e) Smaller(f, a) Smaller(a, e)
Das Prädikat SameSize ist eine sogenannte Aequivalenzrelation. Es hat die folgenden
Eigenschaften in jeder Block World:
∀x (SameSize(x, x))
[reflexiv]
2.1. PRÄDIKATE UND QUANTOREN
∀x∀y (SameSize(x, y) → SameSize(y, x))
87
[symmetrisch]
∀x∀y∀z (SameSize(x, y) ∧ SameSize(y, z) → SameSize(x, z))
[transitiv]
Das Prädikat Smaller ist eine totale Ordnung. Es hat die folgenden Eigenschaften:
∀x ¬Smaller(x, x)
[irreflexiv]
∀x∀y∀z (Smaller(x, y) ∧ Smaller(y, z) → Smaller(x, z))
[transitiv]
∀x∀y (Smaller(x, y) ∨ SameSize(x, y) ∨ Smaller(y, x))
[total]
Dass es in der Block World von Abb. 2.1 zwei Fünfecke von gleicher Grösse gibt, lässt
sich so ausdrücken:
∃x∃y (Pentagon(x) ∧ Pentagon(y) ∧ ¬(x ≈ y) ∧ SameSize(x, y))
Um Aussagen über die Anordnung der Objekte zu machen werden die folgenden Prädikate
benötigt:
SameRow(x, y) . . . . . . . . x und y sind in derselben Zeile
SameCol(x, y) . . . . . . . . x und y sind in derselben Kolonne
LeftOf(x, y) . . . . . . . . . x ist näher der linken Seite als y
Between(x, y, z). . . . . . x ist zwischen y und z in einer Zeile, Kolonne oder Diagonalen
In der Block World von Abb. 2.1 gilt unter anderem:
SameRow(c, e) SameCol(a, d) LeftOf(f, a) LeftOf(c, b) Between(d, a, c)
Die beiden Prädikate SameRow und SameCol sind Aequivalenzrelationen (reflexiv, symmetrisch, transitiv). Das Prädikat LeftOf ist eine totale Ordnung (irreflexiv, transitive,
total). Die Totalitätsaussage lautet:
∀x∀y (LeftOf(x, y) ∨ SameCol(x, y) ∨ LeftOf(y, x))
Das Prädikat Between hat die folgende Eigenschaft:
∀x∀y∀z (Between(x, y, z) → Between(x, z, y))
Dass es in einer Block World auf jedem Feld höchstens ein Objekt geben kann, lässt sich
so ausdrücken:
∀x∀y (SameRow(x, y) ∧ SameCol(x, y) → x ≈ y)
Dass es in der Block World von Abb. 2.1 zwischen den beiden Dreiecken a und b ein
Fünfeck gibt, lässt sich so beschreiben:
∃x (Pentagon(x) ∧ Between(x, a, b))
88
KAPITEL 2. PRÄDIKATENLOGIK
Abbildung 2.2: Tarki’s World als Java-Applet.
2.2. SYNTAX DER PRÄDIKATENLOGIK
89
Dass es in der Block World von Abb. 2.1 zwischen den beiden Dreiecken a und b nur
Fünfecke gibt, lässt sich so beschreiben:
∀x (Between(x, a, b) → Pentagon(x))
Dass in der Block World von Abb. 2.1 alle Quadrate links von allen Fünfecken sind, lässt
sich so ausdrücken:
∀x∀y(Square(x) ∧ Pentagon(y) → LeftOf(x, y))
Die Lernsoftware Tarski’s World von Barwise und Etchemendy [2] behandelt die Block
World sehr ausführlich. Eine für diese Vorlesung entwickelte Implementation von Tarski’s
World als Java-Applet ist auf dem WWW verfügbar:
http://www.inf.ethz.ch/~staerk/tarski/
Das Java-Applet besteht aus einem Editor für Block-Welten und einem Evaluator für
prädikatenlogisch Formeln (siehe Abb. 2.2).
2.2
Syntax der Prädikatenlogik
Terme und Formeln der Prädikatenlogik werden durch die folgende Grammatik erzeugt:
Term
= Variable | Constant | Function ‘(’ TermList ‘)’
TermList
= Term { ‘,’ Term }
Formula
= ‘>’ | ‘⊥’ | Relation ‘(’ TermList ‘)’ | ‘(’ Term ‘≈’ Term ‘)’ |
‘(’ ‘¬’ Formula ‘)’ | ‘(’ Formula Operator Formula ‘)’ |
Quantifier Variable Formula
Operator
= ‘∧’ | ‘∨’ | ‘→’ | ‘↔’
Quantifier = ‘∀’ | ‘∃’
Variable
= ‘x’ Digit {Digit}
Constant
= Identifier
Function
= Identifier
Relation
= Identifier
Beispiele von Termen sind:
x1
x101
sin(x0)
add(x2, x3)
push(add(x2, 1), x3)
Beispiele von Formeln sind:
less(zero, x3)
(sin(x2) ≈ x3)
∀x1 (¬(x1 ≈ zero) → ∃x2 (succ(x2) ≈ x1))
Die folgenden Mitteilungszeichen werden benutzt:
90
KAPITEL 2. PRÄDIKATENLOGIK
x, y, z . . . . . . . . . . . . . . . . . . . . für Variablen;
P, Q, R . . . . . . . . . . . . . . . . . . für Relationssymbole (Prädikate);
f, g . . . . . . . . . . . . . . . . . . . . . . für Funktionssymbole;
c . . . . . . . . . . . . . . . . . . . . . . . . . für Konstanten;
r, s, t . . . . . . . . . . . . . . . . . . . . . für Terme;
A, B, C . . . . . . . . . . . . . . . . . . für Formeln;
Γ, Φ, Ψ . . . . . . . . . . . . . . . . . . . für Mengen von Formeln.
2.2.1
Schreibweisen und Abkürzungen
Die Quantoren binden stärker als alle aussagenlogischen Operatoren.
∃x Q(x) ∧ R(x) ist (∃x Q(x)) ∧ R(x) und nicht ∃x (Q(x) ∧ R(x))
Prädikate und Funktionen werden oft infix geschrieben. Beispiele:
x<y
steht für <(x, y)
x∈y
steht für ∈(x, y)
x+y
steht für +(x, y)
Eine Folge von gleichen Quantoren wird oft zusammengefasst:
∀x, y, z R(x, y, z) steht für ∀x∀y∀z R(x, y, z)
Negierte Gleichungen werden mit 6≈ geschrieben:
x 6≈ y
2.2.2
steht für ¬(x ≈ y)
Andere Notationen für Quantoren
In älteren Büchern über Logik werden auch die folgenden Notationen für die Quantoren
verwendet:
V
∀x A (∀x)A (x)A
x A Πx A
W
∃x A (∃x)A (Ex)A
x A Σx A
2.2.3
Freie und gebundene Variablen
In einer Formel ∀x A (bzw. ∃x A) nennt man die Teilformel A den Bereich (engl. Scope)
des Quantors ∀x (bzw. ∃x). Man sagt, dass der Quantor die Variable x in A bindet. Ein
Vorkommen von x ist gebunden genau dann, wenn es im Bereich eines Quantors ∀x oder
∃x liegt.
Beispiel 2.2.4 In der folgenden Formel sind die Bereiche der Quantoren markiert:
Bereich von ∀y
z
}|
{
∃x (P (x) ∧ ∀y (Q(x, y) → f (x) ≈ y))
|
{z
}
Bereich von ∃x
2.2. SYNTAX DER PRÄDIKATENLOGIK
91
Definition 2.2.5 Ein Vorkommen einer Variablen x in einer Formel A heisst gebunden,
falls das Vorkommen in einer Teilformel der Gestalt ∀x B oder ∃x B liegt, sonst heisst das
Vorkommen frei.
Beispiel 2.2.6 In den folgenden Formeln sind die freien Vorkommen von Variablen unterstrichen:
∀x R(x, y, z)
∃y Q(y) ∨ ∀x R(x, y)
x ≈ f (y) ∧ ∀x R(y, z)
Definition 2.2.7 Die Menge aller Variablen, die frei vorkommen in A, wird mit FV(A)
bezeichnet.
Definition 2.2.8 Eine Formel A wird Satz genannt, falls sie keine freie Variablen enthält.
Sätze nennt man auch geschlossene Formeln.
Die Menge der freien Variablen von Termen und Formeln erhält man wie folgt:
FV(x) = {x}
FV(c) = ∅
FV(f (t1 , . . . , tn )) = FV(t1 ) ∪ . . . ∪ FV(tn )
FV(R(t1 , . . . , tn )) = FV(t1 ) ∪ . . . ∪ FV(tn )
FV(s ≈ t) = FV(s) ∪ FV(t)
FV(¬A) = FV(A)
FV(A ∗ B) = FV(A) ∪ FV(B) für ∗ ∈ {∧, ∨, →, ↔}
FV(∀x A) = FV(∃x A) = FV(A) \ {x}
Die durch ∀ und ∃ gebundenen Variablen muss man als Links auffassen. Zum Beispiel
kann man sich die Formel ∀x∃y∀z (R(x, y) ∧ Q(y, z)) so vorstellen:
∀ ∃ ∀ (R(2, 2) ∧ Q(2, 2))
??
?
6
Die Formel ∀y∃z (R(x, z) ∧ Q(y, z)) kann mit Hilfe von Links so dargestellt werden:
∀ ∃ (R(x, 2) ∧ Q(2, 2))
?
6
6
Die Namen der gebundenen Variablen spielen gar keine Rolle. Darum werden Formeln,
die gleich sind bis auf die Namen der gebundenen Variablen, identifiziert. Zum Beispiel
wird die Formel ∀x∃y∀z (R(x, y) ∧ Q(y, z)) identifiziert mit ∀z∃x∀y (R(z, x) ∧ Q(x, y)).
92
KAPITEL 2. PRÄDIKATENLOGIK
Beispiel 2.2.9 Hier sind einige Beispiele von Formeln, die identifiziert werden:
∀xR(x, y) wird identifiziert mit ∀zR(z, y)
∀x(∃xR(x) → Q(x)) wird identifiziert mit ∀x(∃zR(z) → Q(x))
∃y∃z (R(x, z) ∧ Q(y, z)) wird identifiziert mit ∃z∃y (R(x, y) ∧ Q(z, y))
Hier sind Beispiele von Formeln, die nicht identifiziert werden:
∀xR(x, y) ist verschieden von ∀yR(y, y)
∀x(∃xR(x) → Q(x)) ist verschieden von ∀x(∃zR(z) → Q(z))
∃y∃z (R(x, z) ∧ Q(y, z)) ist verschieden von ∃x∃y (R(z, y) ∧ Q(x, y))
Die letzten beiden Formeln werden nicht identifiziert, da links die Variable x frei vorkommt
und rechts an derselben Stelle die Variable z steht. Die Bedeutung der freien Variablen
hängt vom Kontext ab und darum können die Formeln nicht identifiziert werden.
2.2.10
Substitution von Termen für Variablen
Mit A xt bezeichnet man die Formel, die man aus A erhält, wenn man alle freien Vorkommen der Variablen x durch den Term t ersetzt und dabei gebundene Variablen umbenennt,
falls es zu einer Kollision kommt.
Beim Substituieren von t für x muss man aufpassen, dass keine Variablen von t in den
Bereich eines Quantors kommen. Beispiel:
= ∀z R(f (y), z)
(∀y R(x, y)) f (y)
x
(∀y R(x, y)) f (y)
6= ∀y R(f (y), y)
x
Andere gebräuchliche Notationen für A xt sind A[t/x], A[x := t], Ax [t].
2.3
Semantik der Prädikatenlogik
Eine Sprache L der Prädikatenlogik ist gegeben durch ein Paar hR, F i bestehend aus
zwei abzählbaren Mengen von Symbolen. Die Elemente von R werden Relationssymbole
genannt; die Elemente von F heissen Funktionssymbole. Ein Symbol besteht aus einem
String s und einer Stelligkeit n (geschrieben s/n). Beispiele von Symbolen sind:
member/2
append/3
nil/0
cons/2
+/2
∗/2
</2
Die Stelligkeit gibt an, wieviele Argumente das Symbol benötigt. Die nullstelligen Funktionssymbole werden auch Konstanten genannt. Die Relationssymbole werden auch Prädikate genannt. Die Symbolmengen R oder F können leer sein. Die folgende Tabelle enthält
2.3. SEMANTIK DER PRÄDIKATENLOGIK
93
einige Sprachen, die in der mathematischen Logik oft benutzt werden:
R
Name
F
Arithmetik
Lar
</2 0/0, 1/0, +/2, ∗/2
Mengenlehre
Lset
∈/2
Ordnungen
Lord
≤/2
Gruppentheorie
Lgr
Boolesche Algebra Lbool
1/0, ∗/2
0/0, 1/0, 0 /1, +/2, ∗/2
In einer Formel zur Sprache L dürfen nur Funktionssymbole und Relationssymbole von L
benutzt werden. Wenn der Term f (t1 , . . . , tn ) benutzt wird, dann muss f /n zu F gehören.
Wenn R(t1 , . . . , tn ) in einer Formel vorkommt, dann muss R/n in R sein.
Formeln sind zunächst nur Zeichenreihen, denen keine Bedeutung zukommt. Dies ändert
sich, wenn man für die Variablen ein Universum festlegt und die Relationssymbole als
Relationen sowie die Funktionssymbole als Funktionen auf dem Universum interpretiert.
Dazu benötigt man den Begriff der Struktur. In einer Struktur mit Universum M wird ein
n-stelliges Relationssymbol als n-stellige Relation über M interpretiert; eine Konstante
wird als Element von M interpretiert; ein n-stelliges Funktionssymbol wird als n-stellige
Funktion von M n nach M interpretiert.
Definition 2.3.1 (Struktur) Eine Struktur für die Sprache L ist ein Paar M = hM, Ii,
wobei M eine nicht-leere Menge ist und I eine Funktion ist, die jedem Symbol von L
eine Interpretation zuordnet derart, dass gilt:
Falls R/n ∈ R, dann ist I(R/n) ⊆ M n .
Falls c/0 ∈ F , dann ist I(c/0) ∈ M .
Falls f /n ∈ F mit n > 0, dann ist I(f /n): M n → M .
Die Menge M wird Universum von M genannt und oft mit |M| bezeichnet. Die Interpretationen I(R/n), I(c/0), I(f /n) werden oft als RM , cM und f M geschrieben.
Beispiel 2.3.2 (Struktur der natürlichen Zahlen)
Eine Struktur für die Sprache Lar ist N = hN, Ii, wobei
I(</2)
:= {hm, ni ∈ N × N | m < n}
(Kleiner Relation)
I(0/0)
:= 0
(Null)
I(1/0)
:= 1
(Eins)
I(+/2)(m, n) := m + n
I(∗/2)(m, n)
:= m ∗ n
(Addition)
(Multiplikation)
Die Struktur N heisst Struktur der natürlichen Zahlen. Das Universum der Struktur besteht aus den natürlichen Zahlen 0, 1, 2, . . . etc. Das Relationssymbol </2 wird als die
94
KAPITEL 2. PRÄDIKATENLOGIK
Kleiner-Relation interpretiert. Die beiden Funktionssymbole +/2 und ∗/2 werden als die
übliche Addition und Multiplikation von natürlichen Zahlen interpretiert. Die beiden Konstanten 0 und 1 werden als die beiden Zahlen Null und Eins interpretiert. (Siehe dazu
auch Abschnitt 2.6).
Beispiel 2.3.3 (Graphen als Strukturen) Jeder gerichtete Graph kann als Struktur
für die Sprache Lord dienen. Sei hV, Ei ein gerichteter Graph, wobei V die Menge der
Knoten (Vertices) und E die Menge der Kanten (Edges) ist, d.h. E ⊆ V × V . Falls
hi, ji ∈ E, dann gibt es einen Pfeil vom Knoten i zum Knoten j. Beispiel:
1 s
6
2 s
I
@
@
s
@s 4
3
I
@
@
@s
E = {h2, 1i, h3, 2i, h4, 2i, h5, 3i, h5, 4i}
5
Zum Graphen hV, Ei lässt sich eine Struktur G = hV, Ii definieren durch I(≤/2) := E.
Somit gilt i ≤ j in der Struktur G genau dann, wenn es im Graphen eine Kante von
i nach j gibt. (Siehe Fortsetzung in den Beispielen 2.3.17 und 2.3.18).
Beispiel 2.3.4 (Boolesche Algebren) Zwei Strukturen für die Sprache Lbool :
Sei A = hB, Ii, wobei B = {0, 1} und
I(0/0)
:= 0
(Null)
I(1/0)
:= 1
(Eins)
I(0 /1)(a)
:= 1 − a
(Logisches Komplement)
I(+/2)(a, b) := max(a, b)
(Logisches Oder)
I(∗/2)(a, b)
(Logisches Und)
:= min(a, b)
Sei B = hP(N), Ji, wobei P(N) die Potenzmenge von N ist und
J(0/0)
:= ∅
(Leere Menge)
J(1/0)
:= N
(Volle Menge)
J(0 /1)(X)
:= N \ X
(Menge aller n ∈ N mit n ∈
/ X)
J(+/2)(X, Y ) := X ∪ Y
(Menge aller n ∈ N mit n ∈ X oder n ∈ Y )
:= X ∩ Y
(Menge aller n ∈ N mit n ∈ X und n ∈ Y )
J(∗/2)(X, Y )
Die Strukturen A und B sind Boolesche Algebren. Sie sind bereits in Beispiel 1.10.4
und 1.10.5 auf andere Weise eingeführt worden.
2.3. SEMANTIK DER PRÄDIKATENLOGIK
95
Terme und Formeln werden in Strukturen ausgewertet bezüglich einer Variablenbelegung.
Eine Variablenbelegung ordnet jeder Variablen ein Element des Universums der Struktur
zu. Eine Variablenbelegung kann aufgefasst werden als eine Umgebung (Environment).
Definition 2.3.5 (Variablenbelegung) Sei M eine Struktur für L . Eine Variablenbelegung in M ist eine Funktion α, die jeder Variablen x einen Wert α(x) ∈ |M| zuordnet.
Wir schreiben α[x 7→ v] für die Variablenbelegung, die übereinstimmt mit α, ausser dass
sie der Variablen x den Wert v ∈ |M| zuordnet. (Der Wert von x wird überschrieben
mit v.) Es gilt:
v,
falls x = y;
α[x 7→ v](y) =
α(y), falls x 6= y.
Definition 2.3.6 (Interpretation der Terme) Sei M = hM, Ii eine Struktur für L
und sei α eine Variablenbelegung in M. Mit Induktion nach der Länge eines Terms t
von L definiert man einen Wert [[t]]M
α ∈ M wie folgt:
[[x]]M
α := α(x),
[[c]]M
α := I(c/0),
M
M
[[f (t1 , . . . , tn )]]M
α := I(f /n)([[t1 ]]α , . . . , [[tn ]]α ).
Der Wert von t hängt nur von der Belegung der in t vorkommenden Variablen ab.
Beispiel 2.3.7 Betrachten wir die Struktur N der natürlichen Zahlen. Sei α eine Variablenbelegung in N mit α(x) = 2, α(y) = 3 und α(z) = 5. Dann ist [[(x + y) ∗ z]]N
α = 25.
Wir schreiben auch:
[[(x + y) ∗ z]]N
{x7→2,y7→3,z7→5} = 25
Beispiel 2.3.8 Betrachten wir die Struktur A für Lbool aus Beispiel 2.3.4. Sei α eine
Variablenbelegung mit α(x) = 0, α(y) = 1 und α(z) = 1. Dann gilt:
[[(x + y) ∗ z]]Aα = 1.
Beispiel 2.3.9 Betrachten wir die Struktur B für Lbool aus Beispiel 2.3.4. Sei β eine
Variablenbelegung mit β(x) = {2, 3, 5}, β(y) = {2, 7} und β(z) = {3, 7, 11}. Dann gilt:
[[(x + y) ∗ z]]B
β = {3, 7}.
In diesem Fall ist der Wert des Terms eine Menge von natürlichen Zahlen.
Definition 2.3.10 (Interpretation der Formeln) Sei M = hM, Ii eine Struktur für
die Sprache L . Für Formeln A und Variablenbelegungen α definiert man einen Wahrheitswert [[A]]M
α ∈ {1, 0} mit Induktion nach der Länge von A gemäss Abb. 2.3. Für die
M
Booleschen Konstanten definiert man [[>]]M
α := 1 und [[⊥]]α := 0.
Der Wahrheitswert einer Formel in einer Struktur hängt nur ab von der Belegung der
Variablen, die in der Formel tatsächlich frei vorkommen.
96
KAPITEL 2. PRÄDIKATENLOGIK
[[R(t1 , . . . , tn )]]M
α
[[s ≈
t]]M
α
[[¬A]]M
α
[[A ∧
B]]M
α
[[A ∨ B]]M
α
[[A →
B]]M
α
[[A ↔
B]]M
α
[[∀x A]]M
α
[[∃x A]]M
α
M
1, falls h[[t1 ]]M
α , . . . , [[tn ]]α i ∈ I(R/n);
0, sonst.
M
1, falls [[s]]M
α = [[t]]α ;
0, sonst.
1, falls [[A]]M
α = 0;
0, sonst.
M
1, falls [[A]]M
α = 1 und [[B]]α = 1;
0, sonst.
M
1, falls [[A]]M
α = 1 oder [[B]]α = 1;
0, sonst.
M
1, falls [[A]]M
α = 0 oder [[B]]α = 1;
0, sonst.
M
1, falls [[A]]M
α = [[B]]α ;
0, sonst.
1, falls für jedes v ∈ M gilt [[A]]M
α[x7→v] = 1;
0, sonst.
1, falls es mindestens ein v ∈ M gibt mit [[A]]M
α[x7→v] = 1;
0, sonst.
:=
:=
:=
:=
:=
:=
:=
:=
:=
Abbildung 2.3: Interpretation der Formeln.
2.3. SEMANTIK DER PRÄDIKATENLOGIK
97
Beispiel 2.3.11 Betrachten wir eine Sprache L mit einem zweistelligen Relationssymbol E. Sei G = hM, Ii die folgende Struktur für L :
1 s
6
2 s
M = {1, 2, 3, 4, 5}
I
@
@
s
@s 4
3
I
@
@
@s
I(E/2) = {h2, 1i, h3, 2i, h4, 2i, h5, 3i, h5, 4i}
5
Betrachten wir die folgende Formel der Sprache L :
∃y∃z (y 6= z ∧ E(y, x) ∧ E(z, x))
In dieser Formel kommt nur die Variable x frei vor. Also hängt der Wahrheitswert der
Formel in der Struktur G nur von der Belegung der Variablen x ab. Wenn wir x mit 2
belegen, wir die Formel wahr. Es gilt:
[[∃y∃z (y 6≈ z ∧ E(y, x) ∧ E(z, x))]]G
{x7→2} = 1
Der Grund ist, dass wir y mit 3 und z mit 4 belegen können, so dass gilt:
[[y 6≈ z ∧ E(y, x) ∧ E(z, x))]]G
{x7→2,y7→3,z7→4} = 1
Wenn wir die Variable x mit 1 belegen, dann ist die Formel falsch in G:
[[∃y∃z (y 6≈ z ∧ E(y, x) ∧ E(z, x))]]G
{x7→1} = 0
Der Grund ist, dass für alle v ∈ M und w ∈ M gilt:
[[y 6≈ z ∧ E(y, x) ∧ E(z, x))]]G
{x7→1,y7→v,z7→w} = 0
Das Überschreiben von Variablen in der Belegung kommt vor, wenn wir z.B. die Formel
E(x, y) ∧ ∃x E(y, x) in G auswerten unter der Belegung {x 7→ 5, y 7→ 3}. Dann gilt:
[[E(x, y) ∧ ∃x E(y, x)]]G
{x7→5,y7→3} = 1
Der Grund ist, dass
G
[[E(x, y)]]G
{x7→5,y7→3} = 1 und [[∃x E(y, x)]]{x7→5,y7→3} = 1.
Bei der Auswertung der zweiten Formel ∃x E(y, x) können wir in der Umgebung die
Variable x mit 2 überschreiben, und erhalten:
[[E(y, x)]]G
{x7→2,y7→3} = 1
Für das Überschreiben der Umgebung gilt {x 7→ 5, y 7→ 3}[x 7→ 2] = {x 7→ 2, y 7→ 3}.
98
KAPITEL 2. PRÄDIKATENLOGIK
Lemma 2.3.12 (Koinzidenz) Falls zwei Variablenbelegungen α und β auf den freien
M
Variablen von A übereinstimmen, dann ist [[A]]M
α = [[A]]β .
Beweis. Mit Induktion nach der Länge von A. Zuerst zeigt man mit Induktion nach der
M
Länge eines Terms t: Falls α(x) = β(x) für alle x ∈ FV(t), dann ist [[t]]M
α = [[t]]β . 2
Das folgende Lemma sagt, dass es auf dasselbe herauskommt, ob man zuerst einen Term
für eine Variable in einer Formel substitutiert und dann den Wahrheitswert der Formel
bestimmt, oder ob man zuerst den Wert des Termes berechnet und dann den Wahrheitswert der ursprünglichen Formel bestimmt, wobei die Variable, für die man substituiert,
mit dem Wert des Termes belegt wird.
Lemma 2.3.13 (Substitution)
t M
M
Sei a = [[t]]M
α und β = α[x 7→ a]. Dann ist [[A x ]]α = [[A]]β .
Beweis. Mit Induktion nach der Länge von A. Zuerst zeigt man Induktion nach der Länge
M
eines Terms s, dass [[s xt ]]M
α = [[s]]β . 2
N
Beispiel 2.3.14 Sei α(y) = 1. Dann gilt: [[(x < 3) y+1
]]N = [[y + 1 < 3]]N
α = [[x < 3]]α[x7→2]
x α
Definition 2.3.15 (Modell, Folgerung, Allgemeingültigkeit, Erfüllbarkeit)
Sei A eine Formel und Φ eine Menge von Formeln von L .
Eine Struktur M für L wird Modell von A unter der Variablenbelegung α genannt
(geschrieben M |= A [α]), falls [[A]]M
α = 1.
Eine Struktur M für L wird Modell von Φ unter der Variablenbelegung α genannt
(geschrieben M |= Φ [α]), falls M |= A [α] für alle A ∈ Φ.
Die Formel A folgt aus Φ (geschrieben Φ |= A), falls für alle Strukturen M für L
und alle Variablenbelegungen α in M gilt: Falls M |= Φ [α], dann M |= A [α].
Die Formelmenge Ψ folgt aus Φ (geschrieben Φ |= Ψ), falls für jede Formel B ∈ Ψ
gilt Φ |= B.
Die Formel A heisst allgemeingültig (geschrieben |= A), falls ∅ |= A.
Die Formelmenge Φ heisst erfüllbar, falls es eine Struktur M für L und eine Variablenbelegungen α in M gibt derart, dass M |= Φ [α].
Wenn die Menge Φ nur aus Sätzen besteht (ohne freie Variablen), dann spielt die Variablenbelegung α keine Rolle und man sagt einfach, dass M ein Modell von Φ ist (geschrieben
M |= Φ).
Beispiel 2.3.16 Die Formel ∃x (x ≈ x) ist allgemeingültig, da das Universum einer
Struktur niemals leer ist. Für jede Struktur M gilt M |= ∃x (x ≈ x).
2.3. SEMANTIK DER PRÄDIKATENLOGIK
99
Beispiel 2.3.17 (Partielle Ordnungen) Eine Struktur für die Sprache Lord heisst partielle Ordnung, falls sie ein Modell der folgenden Formeln ist:
∀x (x ≤ x)
[Reflexivität]
∀x, y (x ≤ y ∧ y ≤ x → x ≈ y)
[Antisymmetrie]
∀x, y, z (x ≤ y ∧ y ≤ z → x ≤ z)
[Transitivität]
Die Formel ∀x, y (x ≤ y ∨ y ≤ x) folgt nicht daraus. Ein Gegenbeispiel ist der folgende
gerichtete Graph:
s
j
@
I
@
js
@
s
Sei G die zu dem Graph gehörende Struktur für die Sprache Lord (cf. Beispiel 2.3.3).
Dann ist G ein Modell der Axiome einer partiellen Ordnung. Es gilt:
G |= ∀x (x ≤ x)
G |= ∀x, y (x ≤ y ∧ y ≤ x → x ≈ y)
G |= ∀x, y, z (x ≤ y ∧ y ≤ z → x ≤ z)
Die Struktur G ist aber nicht ein Modell des Totalitätsaxiomes.
G 6|= ∀x, y (x ≤ y ∨ y ≤ x)
Das Beispiel zeigt, dass man mit einem Gegenbeispiel zeigen kann, dass eine Behauptung
nicht aus den Annahmen folgt. Ein Gegenbeispiel ist ein Modell der Annahmen, in dem
die Behauptung nicht gilt.
Beispiel 2.3.18 (Graphen) Eine Struktur G = hM, Ii mit Universum M für eine Sprache L mit einem zweistelligen Relationssymbol E kann als gerichteter Graph aufgefasst
werden. Da I(E/2) ⊆ M × M , entspricht die Interpretation von E der Kantenrelation.
Der Graph G ist ungerichtet, falls er ein Modell der folgenden Formel ist:
∀x, y (E(x, y) → E(y, x))
Der Graph G ist vollständig (eine Clique), falls jeder Knoten mit jedem Knoten durch eine
Kante verbunden ist. Diese Eigenschaft wird durch die folgende Formel charakterisiert:
∀x, y E(x, y)
Dass ein Graph Durchmesser ≤ 2 hat, lässt sich wie folgt ausdrücken:
∀x, y (x ≈ y ∨ E(x, y) ∨ ∃z (E(x, z) ∧ E(z, y))
Endliche gerichtete und ungerichtete Graphen werden in der Informatik häufig benutzt.
100
KAPITEL 2. PRÄDIKATENLOGIK
Beispiel 2.3.19 (Boolesche Algebren) Die Strukturen A und B für Lbool aus 2.3.4
sind Modelle der folgenden Formeln:
∀x, y, z ((x ∗ y) ∗ z ≈ x ∗ (y ∗ z))
∀x, y, z ((x + y) + z ≈ x + (y + z))
∀x, y (x ∗ y ≈ y ∗ x)
∀x, y (x + y ≈ y + x)
∀x, y (x ∗ (x + y) ≈ x)
∀x, y (x + (x ∗ y) ≈ x)
∀x, y, z (x ∗ (y + z) ≈ (x ∗ y) + (x ∗ z))
∀x, y, z (x + (y ∗ z) ≈ (x + y) ∗ (x + z))
∀x (x ∗ x0 ≈ 0)
∀x (x + x0 ≈ 1)
Diese Formeln bilden die Axiome einer Booleschen Algebra. Die Gesetze von DeMorgan
folgen aus den Axiomen (siehe Abschnitt 1.10):
∀x, y ((x ∗ y)0 ≈ (x0 + y 0 ))
∀x, y ((x + y)0 ≈ (x0 ∗ y 0 ))
Beispiel 2.3.20 (Gruppen) Eine Gruppe ist eine Struktur für Lgr , die ein Modell ist
der folgenden Formeln:
∀x (x ∗ 1 ≈ x)
[Die Eins ist rechtsneutral]
∀x ∀y ∀z (x ∗ (y ∗ z) ≈ (x ∗ y) ∗ z)
[Die Multiplikation ist assoziativ]
∀x ∃y (x ∗ y ≈ 1)
[Es gibt Rechtsinverse]
Diese Formeln bilden die Gruppenaxiome. Die folgenden Formeln folgen aus den Gruppenaxiomen:
∀x, y (x ∗ y ≈ 1 → y ∗ x ≈ 1)
[Rechtsinverse sind Linksinverse]
∀x (1 ∗ x ≈ x)
[Die Eins ist linksneutral]
∀x, y, z (x ∗ y ≈ 1 ∧ x ∗ z ≈ 1 → y ≈ z)
[Inverse sind eindeutig]
Siehe dazu auch die formalen Beweise in den Beispielen 2.4.11–2.4.13.
2.3.21
Anzahlaussagen
Mit dem Existenzquantor (∃) drückt man aus, dass es mindestens ein Element gibt. Will
man sagen, dass es höchstens ein Element gibt, oder dass es genau ein Element gibt, so
kann man das wie folgt in der Prädikatenlogik umschreiben:
es gibt mindestens ein x mit P . . . . . . ∃x P (x)
es gibt höchstens ein x mit P . . . . . . . ∀x∀y (P (x) ∧ P (y) → x ≈ y)
es gibt genau ein x mit P . . . . . . . . . . . ∃x (P (x) ∧ ∀y (P (y) → x ≈ y))
Für die letzte Formel ist die Abkürzung ∃!x P (x) gebräuchlich. Man definiert:
∃!x P (x) := ∃x (P (x) ∧ ∀y (P (y) → x ≈ y))
Andere Quantoren wie “für viele x”, “für fast alle x”, “für manche x”, “für einige x” oder
“für wenige x” gibt es nicht in der Prädikatenlogik, da diese Quantoren keine exakten
Definitionen haben.
2.3. SEMANTIK DER PRÄDIKATENLOGIK
2.3.22
101
Beschränkte Quantoren
Oft ist das Universum einer Struktur unterteilt in kleine Teiluniversen. Die Teiluniversen
können durch einstellige Prädikate modelliert werden. Die Quantoren lassen sich leicht
einschränken auf die Teiluniversen, ohne dass die Prädikatenlogik eigens erweitert werden
muss. Nehmen wir an, dass das Universum ein Teiluniversum P enthält. Beschränkte
Quantifikation über die Elemente von P kann man wie folgt ausdrücken:
für alle x aus P gilt Q . . . . . . . ∀x (P (x) → Q(x))
es gibt ein x in P mit Q. . . . . . ∃x (P (x) ∧ Q(x))
Beispiel: Das Universum N der natürlichen Zahlen enthält als Teiluniversum die Menge
der Primzahlen. Aussagen über Primzahlen lassen sich wie folgt umschreiben:
für alle Primzahlen x gilt Q(x). .. . . . . . ∀x (Prim(x) → Q(x))
es gibt eine Primzahl x mit Q(x). . . . . . ∃x (Prim(x) ∧ Q(x))
2.3.23
Quantorenregeln
Für Quantoren gelten bestimmte Gesetze. Wir fassen die wichtigsten Regeln zusammen.
Negation von Quantoren:
¬∀x P (x) ↔ ∃x ¬P (x)
¬∃x P (x) ↔ ∀x ¬P (x)
Negation von beschränkten Quantoren:
¬∀x (P (x) → Q(x)) ↔ ∃x (P (x) ∧ ¬Q(x))
¬∃x (P (x) ∧ Q(x)) ↔ ∀x (P (x) → ¬Q(x))
Vertauschung von Quantoren der gleichen Art:
∀x∀y R(x, y) ↔ ∀y∀x R(x, y)
∃x∃y R(x, y) ↔ ∃y∃x R(x, y)
Hineinziehen von Quantoren:
∀x (P (x) ∧ Q(x)) ↔ ∀x P (x) ∧ ∀x Q(x)
∃x (P (x) ∨ Q(x)) ↔ ∃x P (x) ∨ ∃x Q(x)
Nullquantifikation:
∀x A ↔ A
∃x A ↔ A






∀x (A ∨ P (x)) ↔ A ∨ ∀x P (x) 




∃x (A ∧ P (x)) ↔ A ∧ ∃x P (x)
falls x ∈
/ FV(A)
102
KAPITEL 2. PRÄDIKATENLOGIK
In den folgenden Gesetzen gilt nur die angegebene Richtung. Die Rückrichtungen sind
nicht allgemeingültig.
∀x P (x) → ∃x P (x)
∃x∀y R(x, y) → ∀y∃x R(x, y)
∀x P (x) ∨ ∀x Q(x) → ∀x (P (x) ∨ Q(x))
∃x (P (x) ∧ Q(x)) → ∃x P (x) ∧ ∃x Q(x)
Andere Gesetze lassen sich aus den angegebenen Regeln für die Quantoren plus den Gesetzen der Aussagenlogik herleiten. Beispiel:

∀x (P (x) → A) ↔ ∀x (¬P (x) ∨ A) 



↔ ∀x ¬P (x) ∨ A 
falls x ∈
/ FV(A)
↔ ¬∃x P (x) ∨ A 




↔ ∃x P (x) → A
2.3.24
Isomorphe Strukturen
Die interne Darstellung und die Anordnung der Objekte im Universum einer Struktur
spielt keine Rolle. Der Wahrheitswert einer Formel hängt davon nicht ab, da es für eine
Formel gar keine Möglichkeit gibt, die interne Darstellung oder die Anordnung der Objekte
abzufragen (Information Hiding). Einzig die Relationen zwischen den Objekten und die
Funktionen auf den Objekten sind für Formeln verfügbar. Man sagt, dass zwei Strukturen
isomorph sind, falls sie gleich sind bis auf die interne Darstellung und die Anordnung der
Objekte im Universum.
Als Beispiel betrachten wir in Abb. 2.4 ein 3 × 3 Schachbrett mit zwei weissen und
zwei schwarzen Springern. Das Problem besteht darin, die beiden weissen Springer mit
den beiden schwarzen Springern zu vertauschen, wobei die Springer nur die erlaubten
Züge auf dem Brett machen dürfen. Es ist klar, dass das Feld in der Mitte des Brettes
mit einem Springer nicht erreicht werden kann, und darum beachten wir es nicht weiter.
In Abb. 2.4 ist auf der rechten Seite das Problem als (ungerichteter) Graph G = hV, Ei
dargestellt. Die Menge der Knoten ist V = {1, 2, . . . , 8}. Die Menge der Kanten ist
E = { h1, 5i, h1, 7i, h2, 6i, h2, 8i, h3, 4i, h3, 7i, h4, 3i, h4, 8i,
h5, 1i, h5, 6i, h6, 2i, h6, 5i, h7, 1i, h7, 3i, h8, 2i, h8, 4i }.
Jede Kante entspricht einem Springerzug. Die Darstellung des Problems als Graph hilft
noch wenig zur Lösung. Wenn wir jedoch die Knoten des Graphen anders anordnen, erhalten wir den Graphen in Abb. 2.5. Der Graph in Abb. 2.5 hat dieselbe Menge von Knoten
und dieselbe Kantenmenge. Er ist isomorph zum Graphen in Abb. 2.4. Der Unterschied
ist, dass man im Graphen in Abb. 2.5 die Lösung des Problems sofort sieht. Um die beiden weissen und schwarzen Springer zu vertauschen muss man sie einfach abwechselnd im
Uhrzeigersinn fortbewegen, bis sie an den richigen Plätzen sind.
2.3. SEMANTIK DER PRÄDIKATENLOGIK
103
1
2
3
5
4
6
7
8
Abbildung 2.4: Wie vertauscht man die weissen und schwarzen Springer?
1
7
5
3
6
4
2
8
Abbildung 2.5: Eine isomorphe Struktur.
104
KAPITEL 2. PRÄDIKATENLOGIK
injektiv
surjektiv
bijektiv
Abbildung 2.6: Eigenschaften von Funktionen.
Wir sehen, dass der isomorphe Graph genau dieselbe Struktur hat, was die Springerzüge anbelangt. Für Menschen ist die Lösung des Problems im isomorphen Graphen
sehr leicht zu finden, während sie im ursprünglichen Graphen nicht so offensichtlich ist.
Wir wollen nun den Begriff des Isomorphismus exakt definieren. Dazu benötigen wir
den Begriff der Bijektion.
Eine Funktion π: A → B heisst injektiv, falls für alle a, b ∈ A gilt:
Wenn π(a) = π(b), dann ist a = b.
Eine Funktion π: A → B heisst surjektiv, falls es für jedes b ∈ B ein a ∈ A gibt mit
π(a) = b.
Eine Funktion π: A → B heisst bijektiv, falls π injektiv und surjektiv ist.
Siehe Abb. 2.6.
Ein Isomorphismus zwischen zwei Strukturen ist eine Funktion, die das Universum
der einen Struktur bijektiv auf das Universum der anderen Struktur abbildet und die
Interpretation der Relationssymbole und Funktionssymbole dabei erhält.
Definition 2.3.25 (Isomorphismus) Seien A = hA, Ii und B = hB, Ji zwei Strukturen
für die Sprache L . Eine Funktion π: A → B heisst Isomorphismus von A nach B, falls π
die folgenden Bedingungen erfüllt:
π ist eine bijektive Funktion von A nach B.
Für alle R/n aus R und alle a1 , . . . , an ∈ A gilt:
ha1 , . . . , an i ∈ I(R/n) genau dann, wenn hπ(a1 ), . . . , π(an )i ∈ J(R/n).
Für alle c/0 aus F gilt π(I(c/0)) = J(c/0).
Für alle f /n aus F mit n > 0 und alle a1 , . . . , an ∈ A gilt:
π(I(f /n)(a1 , . . . , an )) = J(f /n)(π(a1 ), . . . , π(an )).
2.3. SEMANTIK DER PRÄDIKATENLOGIK
105
Definition 2.3.26 (Isomorphe Strukturen) Zwei Strukturen A und B heissen isomorph (geschrieben A ∼
= B), falls es einen Isomorphismus von A nach B gibt.
Es ist offensichtlich, dass die Relation ∼
= eine Aequivalenzrelation ist. Es gilt:
A∼
= A.
[Reflexivität]
Falls A ∼
= B, dann ist B ∼
= A.
[Symmetrie]
Falls A ∼
= B und B ∼
= C, dann ist A ∼
= C.
[Transitivität]
In isomorphen Strukturen gelten dieselben Sätze (geschlossene Formeln).
Definition 2.3.27 (Elementar aequivalente Strukturen) Zwei Strukturen A und B
heissen elementar aequivalent, falls in ihnen dieselben Sätze (geschlossenen Formeln) der
Prädikatenlogik gelten.
Satz 2.3.28 Isomorphe Strukturen sind elementar aequivalent.
∀∃ Beweis. Sei π ein Isomorphismus von A nach B.
Für eine Variablenbelegung α bezeichnen wir mit π ◦ α die Komposition von π und α.
Es gilt also (π ◦ α)(x) = π(α(x)) für alle Variablen x.
Die Komposition π ◦ α ist eine Variablenbelegung in B.
Mit Induktion nach der Länge eines Terms t zeigt man:
B
π([[t]]A
α ) = [[t]]π◦α
(Wenn man den Term t in der Struktur A unter der Belegung α auswertet und das Resultat
mit dem Isomorphismus π nach B abbildet, dann erhält man den Wert von t in B unter der
Belegung π ◦ α.)
Dann zeigt man mit Induktion nach der Länge eine Formel A:
B
[[A]]A
α = [[A]]π◦α
(Der Wahrheitswert einer Formel A in der Struktur A unter der Belegung α ist derselbe, wie
der Wahrheitswert von A in der Struktur B unter der Belegung π ◦ α.)
Da der Wahrheitswerte von Sätzen (geschlossenen Formeln) nicht von der Variablenbelegung
abhängt, folgt, dass in A und B dieselben Sätze gelten. Also sind A und B elementar aequivalent.
2
Die Rückrichtung gilt im Allgemeinen nicht. Es gibt elementar aequivalente Strukturen,
die nicht isomorph sind.
Beispiel 2.3.29 Sei L eine Sprache mit einem zweistelligen Relationssymbol P . Betrachten wir die folgenden zwei Strukturen für L :
A = hZ, Ii
mit I(P/2) = {hx, yi ∈ Z × Z | |x − y| = 1}
B = hZ, Ii mit I(P/2) = {hx, yi ∈ Z × Z | |x − y| = 2}
106
KAPITEL 2. PRÄDIKATENLOGIK
−4 −3 −2 −1
0
1
2
3
4
Dann sind A und B elementar aequivalent, aber nicht isomorph.
Die Rückrichtung gilt jedoch für endliche Strukturen, da man jede endliche Struktur durch
eine prädikatenlogische Formel bis auf Isomporhie charakterisieren kann.
Beispiel 2.3.30 Beispiel: Die Struktur für das Schachproblem in Abb. 2.4 kann man
durch die folgende Formel charakterisieren:
y ≈ xi ∧

 1≤i<j≤8
1≤i≤8

 ∀u∀v (E(u, v) ↔



(u ≈ x1 ∧ v ≈ x5 ) ∨ (u ≈ x1 ∧ v


(u ≈ x2 ∧ v ≈ x6 ) ∨ (u ≈ x2 ∧ v



(u ≈ x3 ∧ v ≈ x4 ) ∨ (u ≈ x3 ∧ v
∃x1 ∃x2 ∃x3 ∃x4 ∃x5 ∃x6 ∃x7 ∃x8 

(u ≈ x4 ∧ v ≈ x3 ) ∨ (u ≈ x4 ∧ v



(u ≈ x5 ∧ v ≈ x1 ) ∨ (u ≈ x5 ∧ v



(u ≈ x6 ∧ v ≈ x2 ) ∨ (u ≈ x6 ∧ v


(u ≈ x7 ∧ v ≈ x1 ) ∨ (u ≈ x7 ∧ v

(u ≈ x8 ∧ v ≈ x2 ) ∨ (u ≈ x8 ∧ v























2.4
V
V
xi 6≈ xj ∧ ∀y
W
W
≈ x7 ) ∨
≈ x8 ) ∨
≈ x7 ) ∨
≈ x8 ) ∨
≈ x6 ) ∨
≈ x5 ) ∨
≈ x3 ) ∨
≈ x4 ))
Formale Beweise
Das System des natürlichen Schliessens kann von der Aussagenlogik auf die Prädikatenlogik erweitert werden. Dazu brauche es eine neue Art von Herleitungsschritten zur
Instanzierung von Existenzquantoren. Die erweitertet Grammatik für Herleitungen und
Herleitungsschritte ist:
Derivation = {Step}
Step
= Formula ‘.’ |
‘assume’ Formula ‘.’ Derivation ‘therefore’ Formula ‘.’ |
‘let’ Variable ‘with’ Formula ‘.’ Derivation ‘therefore’ Formula ‘.’
Einfache Herleitungsschritte und bedingte Herleitungsschritte haben dieselbe Bedeutung
wie in der Aussagenlogik (Abschnitt 1.4).
2.4. FORMALE BEWEISE
∀x A
(∀ e)
A xt
107
A
(∀ i) falls die Variable x nicht geschützt ist
∀x A
A xt
(∃ i)
∃x A
t≈t
(ID)
s ≈ t A xs
(SUB)
A xt
Tabelle 2.1: Regeln des natürlichen Schliessens (Fortsetzung von Tabelle 1.1).
2.4.1
Herleitungsschritte mit Instanzierung von Existenzquantoren
Wenn man eine Existenzausage ∃x A hergeleitet hat, nimmt man ein beliebiges y und
leitet unter der zusätzlichen Annahme A xy eine Formel B her, in der die Variable y nicht
mehr frei vorkommt.
∃x A.

let y with A xy . 


beweist die Formel B.
d



therefore B.
B.
Die Annahme A xy darf nur in der Herleitung d benutzt werden. Ausserhalb des Beweisschrittes ist sie nicht mehr verfügbar. Die Annahme A xy wird beim therefore geschlossen.
Die Formel B muss aus den bereits hergeleiteten Formeln und den zur Zeit offenen Annahmen (inklusive A xy ) mit einer Schlussregel ableitbar oder darin enthalten sein.
2.4.2
Schlussregeln für Quantoren und Gleichungen
Die Tabelle 2.1 enthält die zusätzlichen Schlussregeln für die Quantoren und die Gleichungen, die zu den Schlussregeln der Aussagenlogik in Tabelle 1.1 hinzugenommen werden
müssen.
Mit der Regel ∀ e kann man einen Allquantor beseitigen und die quantifizierte Variable
durch einen beliebigen Term instanzieren. Wenn man die Formel ∀x A hergeleitet hat,
dann darf man die freien Vorkommen der Variablen x in A durch einen beliebigen Term t
ersetzen und auf die Formel A xt schliessen. Beispiel:
∀x (Square(x) → Medium(x))
Square(a) → Medium(a)
Mit der Regel ∀ i kann man einen neuen Allquantor einführen. Wenn man die Formel A
hergeleitet hat für ein beliebiges x, dann darf man auf ∀x A schliessen. Von der Variablen x
wird verlangt, dass sie nicht frei in einer offenen Annahme vorkommt (da x sonst nicht
108
KAPITEL 2. PRÄDIKATENLOGIK
beliebig wäre). Beispiel:
Triangle(x) → LeftOf(x, y)
∀x (Triangle(x) → LeftOf(x, y))
Die Regel ∃ i ist die Einführungsregel für den Existenzquantor. Wenn man die Formel
A xt hergeleitet hat, dann ist der Term t ein Beispiel für ein x, so dass A gilt. Also gibt es
ein x mit A und man kann auf ∃x A schliessen. Beispiel:
b 6≈ y ∧ Pentagon(b) ∧ SameCol(b, y)
∃x (x 6≈ y ∧ Pentagon(x) ∧ SameCol(x, y))
Das Axiom ID sagt, dass jeder Term zu sich selbst gleich ist. Es gilt immer t ≈ t.
Die Substitutionsregel SUB erlaubt es, in einer Formel gewisse Vorkommen von Termen
durch gleiche Terme zu ersetzen. Wenn man die Gleichung s ≈ t hergeleitet hat, dann
darf man Vorkommen des Terms s durch den Term t ersetzten. Dass heisst, dass man von
s ≈ t und A xs auf A xt schliessen kann. Beispiel:
a≈y
Triangle(a) ∧ Smaller(a, z)
Triangle(y) ∧ Smaller(y, z)
Mit Hilfe des Identitätsaxiomes und der Substitutionsregel können Eigenschaften der
Gleichheit wie etwa Symmetrie und Transitivität hergeleitet werden (siehe Abschnitt
2.4.10).
2.4.3
Geschützte Variablen und Variablenbedingungen
Die freien Variablen einer Annahme gelten als geschützt im Bereich der Annahme und
dürfen dort nicht mit der Regel (∀ i) quantifiziert werden.


assume A.


Die freien Variablen von A sind geschützt in d.
d



therefore B.
Zudem darf in einem Herleitungsschritt zur Instanzierung eines Existenzquantors, die
Variable, deren Existenz man annimmt, nicht geschützt sein.

let x with A. 

 Die Variable x darf nicht geschützt sein.
d
Die freien Variablen von A sind geschützt in d.


therefore B.  Die Variable x darf nicht frei in B vorkommen.
Zudem muss die Formel ∃x A (oder eine Variante davon, in der die gebundene Variable x
umbenannt ist) bereits hergeleitet worden sein.
2.4. FORMALE BEWEISE
109
Beispiel 2.4.4 Als einfaches Beispiel für die Einführungs- und Beseitigungsregeln des
Allquantors beweisen wir das folgende Quantorengesetz:
∀x (R(x) ∧ Q(x)) ↔ ∀x R(x) ∧ ∀x Q(x)
Zuerst beweisen wir die eine Richtung:
1:
2:
3:
4:
5:
6:
7:
assume ∀x (R(x) ∧ Q(x)).
R(x) ∧ Q(x).
R(x).
∀x R(x).
Q(x).
∀x Q(x).
therefore ∀x R(x) ∧ ∀x Q(x).
[(∀ e) mit
[(∧ e) mit
[(∀ i) mit
[(∧ e) mit
[(∀ i) mit
[(∧ i) mit 4 und
1]
2]
3]
2]
5]
6]
[(∧ e) mit
[(∀ e) mit
[(∧ e) mit
[(∀ e) mit
[(∧ i) mit 3 und
[(∀ i) mit
1]
2]
1]
4]
5]
6]
Dann beweisen wir die Rückrichtung:
1:
2:
3:
4:
5:
6:
7:
assume ∀x R(x) ∧ ∀x Q(x).
∀x R(x).
R(x).
∀x Q(x).
Q(x).
R(x) ∧ Q(x).
therefore ∀x (R(x) ∧ Q(x)).
Beispiel 2.4.5 (Sind Enteneier auch Vogeleier?) Wir wollen beweisen, dass Enteneier auch Vogeleier sind. Dazu benutzen die Sprache aus Beispiel 2.1.9 mit den folgenden
Prädikaten:
Ente(x) bedeutet “x ist eine Ente”
Vogel(x) bedeutet “x ist ein Vogel”
Ei(x, y)
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
bedeutet “x ist ein Ei von y”
∀x (Ente(x) → Vogel(x)).
assume ∃y (Ei(x, y) ∧ Ente(y)).
let y with Ei(x, y) ∧ Ente(y).
Ente(y).
Ente(y) → Vogel(y).
Vogel(y).
Ei(x, y).
Ei(x, y) ∧ Vogel(y).
therefore ∃y (Ei(x, y) ∧ Vogel(y)).
therefore ∃y (Ei(x, y) ∧ Vogel(y)).
∀x (∃y (Ei(x, y) ∧ Ente(y)) → ∃y (Ei(x, y) ∧ Vogel(y))).
[Annahme]
[(∃ e) mit
[(∧ e) mit
[(∀ e) mit
[MP mit 4 und
[(∧ e) mit
[(∧ i) mit 6 und
[(∃ i) mit
2]
3]
1]
5]
3]
7]
8]
[9]
[(∀ i) mit 2–10]
Beispiel 2.4.6 Als weiteres Beispiel betrachten wir das Hereinziehen eines Allquantors
in eine Implikation. Wir beweisen die folgende Formel:
∀x (R(x) → Q(y)) → (∃x R(x) → Q(y))
110
1:
2:
3:
4:
5:
6:
7:
KAPITEL 2. PRÄDIKATENLOGIK
assume ∀x (R(x) → Q(y)).
assume ∃x R(x).
let x with R(x).
R(x) → Q(y).
therefore Q(y).
therefore Q(y).
therefore ∃x R(x) → Q(y).
[(∃ e) mit 2]
[(∀ e) mit 1]
[MP mit 3 und 4]
[5]
[2–6]
Beispiel 2.4.7 Auch die Umkehrung ist beweisebar. Allerdings braucht man dazu TND:
(∃x R(x) → Q(y)) → ∀x (R(x) → Q(y))
1: assume ∃x R(x) → Q(y).
2:
∃x R(x) ∨ ¬∃x R(x).
3:
case ∃x R(x).
4:
assume R(x).
5:
therefore Q(y).
6:
hence ∀x (R(x) → Q(y)).
7:
case ¬∃x R(x).
8:
assume R(x).
9:
∃x R(x).
10:
therefore Q(y).
11:
hence ∀x (R(x) → Q(y)).
12: therefore ∀x (R(x) → Q(y)).
[TND]
[MP mit 3 und 1 ]
[(∀ i) mit 5]
[(∃ i) mit 8]
[(¬ e) mit 9 und 7]
[(∀ i) mit 10]
[(∨ e) mit 2, 6 und 11]
Beispiel 2.4.8 Oft macht man eine Fallunterscheidung nach den beiden Fällen ∀x R(x)
und ∃x ¬R(x). Darum leiten wir die folgende Formel her:
∀x R(x) ∨ ∃x ¬R(x)
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
∃x ¬R(x) ∨ ¬∃x ¬R(x).
case ∃x ¬R(x).
hence ∀x R(x) ∨ ∃x ¬R(x).
case ¬∃x ¬R(x).
R(x) ∨ ¬R(x).
case R(x).
hence R(x).
case ¬R(x).
∃x ¬R(x).
hence R(x).
R(x).
∀x R(x).
hence ∀x R(x) ∨ ∃x ¬R(x).
∀x R(x) ∨ ∃x ¬R(x).
[TND]
[(∨ i) mit 2]
[TND]
[(∃ i) mit 8]
[(¬ e) mit 9 und 4]
[(∨ e) mit 5, 7 und 10]
[(∀ i) mit 11]
[(∨ i) mit 12]
[(∨ e) mit 1, 3 und 13]
In dieser Herleitung muss man beachten, dass der (∀ i)-Schluss in Zeile 12 erlaubt ist, da
die Variable x an dieser Stelle in der Herleitung nicht geschützt ist.
2.4. FORMALE BEWEISE
111
Beispiel 2.4.9 (Russell’s Paradoxon) Ein berühmtes Paradoxon aus der Mengenlehre
sagt, dass es die Menge aller x mit x ∈
/ x nicht gibt. Der Ausdruck {x | x ∈
/ x} macht also
keinen Sinn. In der Sprache Lset lautet die Aussage wie folgt:
¬∃x∀y (y ∈ x ↔ y ∈
/ y)
Dabei schreiben wir s ∈
/ t als Abkürzung für ¬(s ∈ t). Die Formel ist in der reinen
Prädikatenlogik (ohne Axiome für Mengen) herleitbar:
1: assume ∃x∀y (y ∈ x ↔ y ∈
/ y).
2:
let x with ∀y (y ∈ x ↔ y ∈
/ y).
3:
x∈x↔x∈
/ x.
4:
x∈x∨x∈
/ x.
5:
case x ∈ x.
6:
x∈x→x∈
/ x.
7:
x∈
/ x.
8:
hence ⊥.
9:
case x ∈
/ x.
10:
x∈
/ x → x ∈ x.
11:
x ∈ x.
12:
hence ⊥.
13:
therefore ⊥.
14: therefore ⊥.
15: ¬∃x∀y (y ∈ x ↔ y ∈
/ y).
2.4.10
[(∃ e) mit 1]
[(∀ e) mit 2]
[TND]
[(↔ e) mit 3]
[MP mit 5 und 6]
[(¬ e) mit 5 und 7]
[(↔ e) mit 3]
[MP mit 9 und 10]
[(¬ e) mit 9 und 11]
[(∨ e) mit 4, 8 und 12]
[(¬ i) mit 14]
Eigenschaften der Gleichheit
Für die Gleichheit gibt es in Tabelle 2.1 das Identitätsaxiom t ≈ t und die Substitutionsregel (SUB). Anstelle von (ID) und (SUB) könnte man genau so gut die folgenden
Gleichheitsaxiome hinzunehmen:
E1. ∀x (x ≈ x)
E2. ∀x, y (x ≈ y → y ≈ x)
E3. ∀x, y, z (x ≈ y ∧ y ≈ z → x ≈ z)
[Reflexivität]
[Symmetrie]
[Transitivität]
E4. ∀x1 , . . . , xn , y1 , . . . , yn (x1 ≈ y1 ∧ . . . ∧ xn ≈ yn → f (x1 , . . . , xn ) ≈ f (y1 , . . . , yn ))
E5. ∀x1 , . . . , xn , y1 , . . . , yn (x1 ≈ y1 ∧ . . . ∧ xn ≈ yn ∧ R(x1 , . . . , xn ) → R(y1 , . . . , yn ))
Die Gleichheitsaxiome E1–E5 sind mit (ID) und (SUB) herleitbar. Die Substitutionsregel
sagt:
x≈y
A ux
A uy
Wenn wir für A die Gleichung u ≈ x nehmen, erhalten wir:
x≈y
x≈x
y≈x
Also können wir die Symmetrie E2 wie folgt herleiten:
112
1:
2:
3:
KAPITEL 2. PRÄDIKATENLOGIK
assume x ≈ y.
x ≈ x.
therefore y ≈ x.
[Axiom (ID)]
[(SUB) mit 1 und 2]
Auch die Transitivität E3 lässt sich herleiten:
1:
2:
3:
4:
assume x ≈ y ∧ y ≈ z.
x ≈ y.
y ≈ z.
therefore x ≈ z.
[(∧ e) mit 1]
[(∧ e) mit 1]
[(SUB) mi 2 und 3]
Die Axiome E4 und E5 kann man ähnlich herleiten.
Umgekehrt kann mit Hilfe der Axiome E1–E5 die Substitutionsregel (SUB) abgeleitet
werden. Zuerst zeigt man mit Induktion nach der Länge eines Terms r, dass die folgende
Formel herleitbar ist:
s ≈ t → r xs ≈ r xt
Dann zeigt man mit Induktion nach der Länge einer Formel A, dass die folgende Eigenschaft herleitbar ist:
s ≈ t → (A xs ↔ A xt )
Also sind die Gleichheitsaxiome E1–E5 aequivalent zum Identitätsaxiom (ID) und der
Substitutionsregel (SUB).
Die Schlussregeln für die Gleichheit werden sehr liberal benutzt. Oft schreibt man eine
Folge von Gleichungen hin, zum Beispiel
t1 ≈ t2 ≈ t3 ≈ t4
als Abkürzung für
t1 ≈ t2 ∧ t2 ≈ t3 ∧ t3 ≈ t4 .
In den folgenden Beispielen sind wir liberal und lassen unwichtige Herleitungsschritte weg.
Beispiel 2.4.11 (Gruppentheorie: Rechtsinverse sind Linksinverse) Wir zeigen,
wie man aus den Gruppenaxiomen die Formel x ∗ y ≈ 1 → y ∗ x ≈ 1 herleiten kann
(cf. Beispiel 2.3.20).
1:
2:
3:
4:
5:
6:
7:
assume x ∗ y ≈ 1.
∃z (y ∗ z ≈ 1).
let z with y ∗ z ≈ 1.
y ∗ x ≈ (y ∗ x) ∗ 1 ≈ y ∗ (x ∗ 1) ≈ y ∗ (x ∗ (y ∗ z)) ≈
y ∗ ((x ∗ y) ∗ z) ≈ y ∗ (1 ∗ z) ≈ (y ∗ 1) ∗ z ≈ y ∗ z ≈ 1.
therefore y ∗ x ≈ 1.
therefore y ∗ x ≈ 1.
[Gruppenaxiom]
Diese formale Herleitung kommt sehr nahe einem Beweis, wie ihn Mathematiker führen.
Beispiel 2.4.12 (Gruppentheorie: Die Eins ist linksneutral) Wir zeigen, wie man
aus den Gruppenaxiomen die Formel ∀x (1 ∗ x ≈ x) herleiten kann.
2.4. FORMALE BEWEISE
1:
2:
3:
4:
5:
6:
113
∃y (x ∗ y ≈ 1).
let y with x ∗ y ≈ 1.
y ∗ x ≈ 1.
1 ∗ x ≈ (x ∗ y) ∗ x ≈ x ∗ (y ∗ x) ≈ x ∗ 1 ≈ x.
therefore 1 ∗ x ≈ x.
∀x (1 ∗ x ≈ x).
[Gruppenaxiom]
[Beispiel 2.4.11]
Beispiel 2.4.13 (Gruppentheorie: Inverse sind eindeutig) Wir zeigen, wie man aus
den Gruppenaxiomen die Formel x ∗ y ≈ 1 ∧ x ∗ z ≈ 1 → y ≈ z herleiten kann.
1:
2:
3:
4:
5:
assume x ∗ y ≈ 1 ∧ x ∗ z ≈ 1.
y ∗ x ≈ 1.
1 ∗ z ≈ z.
y ≈ y ∗ 1 ≈ y ∗ (x ∗ z) ≈ (y ∗ x) ∗ z ≈ 1 ∗ z ≈ z.
therefore y ≈ z.
2.4.14
[Beispiel 2.4.11]
[Beispiel 2.4.12]
Korrektheit des Systems des natürlichen Schliessens
Die Variablenbedingung bei der Regel (∀ i) darf nicht weggelassen werden. Sonst könnte
man Formeln herleiten, die nicht allgemeingültig sind. Betrachten wir die folgende (nicht
korrekte) Herleitung der (nicht allgemeingültigen) Formel ∃x R(x) → ∀x R(x):
1:
2:
3:
4:
5:
assume ∃x R(x).
let x with R(x).
∀x R(x).
therefore ∀x R(x).
therefore ∀x R(x).
Der (∀ i)-Schluss in Zeile 3 ist nicht erlaubt, da die Variable x an dieser Stelle geschützt
ist (sie kommt frei in der Annahme in Zeile 2 vor).
Wir erweitern den Begriff der unmittelbaren Herleitbarkeit aus Definition 1.4.14 auf die
Prädikatenlogik und berücksichtigen nun auch die geschützten Variablen.
Definition 2.4.15 Wir sagen, dass eine Formel A unmittelbar aus der Formelmenge Φ
V
und den geschützten Variablen V herleitbar ist (geschrieben Φ 1N
A), falls A bereits
zu Φ gehört oder, falls es in Tabelle 1.1 oder Tabelle 2.1 eine Regel gibt, deren Prämissen
alle in Φ vorkommen und deren Konklusion gleich A ist. Dabei wird bei der Regel (∀ i)
verlangt, dass die freie Variable x nicht in der Menge V ist.
In einer Herleitung gibt es an jeder Stelle eine Menge Φ von bereits hergeleiteten Formeln
und eine Menge V von geschützten Variablen. Die Bedingungen an Φ und V lauten wie
folgt für die verschiedenen Herleitungsschritte.
Einfacher Herleitungsschritt:
/* Φ und V mit Φ
V
1N
A.
/* Φ ∪ {A} und V */
A */
114
KAPITEL 2. PRÄDIKATENLOGIK
Bedingter Herleitungsschritt:
/* Φ und V */
assume A.
/* Φ ∪ {A} und V ∪ FV(A) */
d
/* Ψ und W mit Ψ
W
1N
B */
therefore B.
/* Φ ∪ {A → B} und V */
Herleitungsschritt mit Instanzierung eines Existenzquantors:
/* Φ und V mit (∃x A) ∈ Φ und x ∈
/ V */
let x with A.
/* Φ ∪ {A} und V ∪ FV(A) */
d
/* Ψ und W mit Ψ
W
1N
B und x ∈
/ FV(B) */
therefore B.
/* Φ ∪ {B} und V */
Der Beweisbarkeitsbegriff aus Def. 1.4.16 wird ebenfalls auf die Prädikatenlogik erweitert.
Neu ist, dass in einer Herleitung einer Formel A aus einer Menge Φ von globalen Annahmen
die freien Variablen von Φ als geschützt gelten.
Definition 2.4.16 Wir sagen, dass eine Formel A aus einer Formelmenge Φ beweisbar
ist (geschrieben Φ N A), falls es eine Herleitung d gibt, die aus den Annahmen in Φ die
Formelmenge Ψ herleitet und A ein Element von Ψ ist, wobei die freien Variablen der
Formeln von Φ in d als geschützt gelten. Im Bild:
/* Φ und V mit FV(Φ) ⊆ V */
d
/* Ψ und V mit A ∈ Ψ */
Die Formelmenge Φ kann auch unendlich sein.
Das System des natürlichen Schliessens für die Prädiaktenlogik ist korrekt in dem Sinne,
dass beweisbare Formeln aus den globalen Annahmen logisch folgen. Der Korrektheitssatz
lautet genau gleich wie bei der Aussagenlogik (Satz 1.4.22) mit dem Unterschied, dass sich
die Notation Φ N A auf die Beweisbarkeit in der Prädikatenlogik (Def. 2.4.16) und Φ |= A
sich auf den Folgerungsbegriff mit Strukturen (Def. 2.3.15) bezieht.
Satz 2.4.17 (Korrektheit des natürlichen Schliessens)
Falls Φ N A, dann Φ |= A.
2.4. FORMALE BEWEISE
115
folgenden Paragraphen beweisen wir die Korrektheit des natürlichen Schliessens
∀∃ Infürden
die Prädikatenlogik (ähnlich wie für die Aussagenlogik im Abschnitt 1.4.26). Dazu
stellen wir den Herleitungsschritt für die Instanzierung eines Existenzquantors etwas anders dar:

let x with A. 


wird dargestellt durch hx, A, d, Bi.
d


therefore B. 
Die Schreibweise für die anderen Herleitungsschritte wird übernommen von Abschnitt 1.4.26.
Wir definieren die Relation d : Φ VN Ψ mit der Bedeutung: Die Herleitung d ist korrekt
und beweist unter den Annahmen Φ und den geschützten Variablen V die Formelmenge Ψ. Als Hilfsrelation benötigen wir die Relation s : Φ VN A mit der Bedeutung: Der Herleitungsschritt s ist korrekt und beweist unter den Annahmen Φ und den geschützten Variablen V
die Formel A.
∀∃
∀∃ Definition 2.4.18 Die Relationen d : Φ
Länge von d bzw. s definiert.
Es gilt hi : Φ VN Φ.
Falls s : Φ
Falls Φ
V
1N
V
N
A und d : Φ ∪ {A}
A, dann gilt A : Φ
V
N
V
N
V
N
Ψ und s : Φ
V
N
A sind mit Induktion nach der
Ψ, dann gilt hs, di : Φ
V
N
Ψ.
A.
Falls W = V ∪ FV(A), d : Φ ∪ {A}
W
N
Ψ und Ψ
W
1N
B, dann gilt hA, d, Bi : Φ
Falls x ∈
/ V , (∃x A) ∈ Φ, W = V ∪ FV(A), d : Φ ∪ {A}
dann gilt hx, A, d, Bi : Φ VN B.
W
N
Ψ, Ψ
W
1N
V
N
A → B.
B und x ∈
/ FV(B),
∀∃ Definition 2.4.19 Eine Formel A ist beweisbar aus Φ (geschrieben Φ N A), falls es eine
Herleitung d gibt mit d : Φ VN Ψ und A ∈ Ψ, wobei V die Menge aller Variablen ist, die in
Formeln von Φ frei vorkommen.
zeigen wir die Korrektheit der unmittelbaren Herleitbarkeit. Man würde erwar∀∃ Zuerst
ten, dass wenn eine Formel A unmittelbar aus einer Formelmenge Φ herleitbar ist, dass
dann A semantisch aus Φ folgt. Dies ist beinahe richtig ausser für die Einführungsregel für den
Allquantor (∀ i). Bei dieser Regel spielt auch die Menge der geschützten Variablen eine Rolle
und darum muss das folgende Lemma etwas allgemeiner formuliert werden.
∀∃ Lemma 2.4.20 (Korrektheit der unmittelbaren Herleitbarkeit)
V
Falls Φ 1N
A und Γ ein Formelmenge ist derart, dass FV(Γ) ⊆ V und Γ |= Φ, dann gilt Γ |= A.
∀∃ Beweis. Kritisch ist nur die Einführungsregel für den Allquantor (∀ i).
Nehmen wir an, dass A = ∀x B, B ∈ Φ und x ∈
/ V.
Da Γ |= Φ, gilt Γ |= B. Wir müssen zeigen, dass Γ |= ∀x B.
Dazu nehmen wir eine Struktur M und eine Variablenbelegung α mit M |= Γ [α].
Wir müssen zeigen, dass [[∀x B]]M
α = 1.
Sei darum v ein beliebiges Element aus dem Universum von M.
Da x ∈
/ V und FV(Γ) ⊆ V , kommt x in den Formeln von Γ nicht frei vor.
Mit dem Koinzidenzlemma 2.3.12 folgt, dass M |= Γ [α[x 7→ v]]. Da Γ |= B, ist [[B]]M
α[x7→v] = 1.
Da v beliebig ist, folgt [[∀x B]]M
α = 1 und die Behauptung ist gezeigt. 2
116
KAPITEL 2. PRÄDIKATENLOGIK
Die Relationen d : Φ VN Ψ und s : Φ VN A benutzen wir ähnlich wie in Abschnitt 1.4.26
um zu zeigen, dass das System des natürlichen Schliessens korrekt ist. Die Aussagen
des folgenden Lemmas sind aber ein wenig komplizierter als die entsprechenden Aussagen von
Lemma 1.4.29. Wir zeigen, wenn eine Herleitung d aus einer Formelmenge Φ und den geschützten
Variablen V die Formelmenge Ψ herleitet und wenn Γ eine Menge von Formeln ist, die nur freie
Variablen von V enthält, derart dass die Annahmen Φ semantisch aus Γ folgen, dann folgt auch
Ψ semantisch aus Γ.
∀∃
∀∃ Lemma 2.4.21 (Korrektheit von Herleitungen und Herleitungsschritten)
(a) Falls d : Φ
V
N
Ψ, FV(Γ) ⊆ V und Γ |= Φ, dann gilt Γ |= Ψ.
(b) Falls s : Φ
V
N
A, FV(Γ) ⊆ V und Γ |= Φ, dann gilt Γ |= A.
∀∃ Beweis. Die Behauptungen (a) und (b) werden simultan mit Induktion nach der Länge
von d bzw. s bewiesen. Sei Γ eine Menge von Formeln mit FV(Γ) ⊆ V und Γ |= Φ.
Fall 1: Wir haben hi : Φ
Dann gilt Γ |= Φ.
V
N
Φ.
Fall 2: Wir haben s : Φ VN A, d : Φ ∪ {A} VN Ψ und hs, di : Φ VN Ψ.
Mit der I.V. für s erhalten wir Γ |= A und somit Γ |= Φ ∪ {A}.
Mit der I.V. für d erhalten wir Γ |= Ψ.
V
Fall 3: Wir haben Φ 1N
A und A : Φ
Aus Lemma 2.4.20 folgt, dass Γ |= A.
V
N
A.
W
Fall 4: Wir haben W = V ∪ FV(A), d : Φ ∪ {A} W
N Ψ, Ψ 1N B und hA, d, Bi : Φ
Aus der I.V. für d folgt, dass Γ ∪ {A} |= Ψ.
W
Da Ψ 1N
B, folgt aus Lemma 2.4.20, dass Γ ∪ {A} |= B. Also gilt Γ |= A → B.
V
N
A → B.
W
Fall 5: Wir haben x ∈
/ V , (∃x A) ∈ Φ, W = V ∪ FV(A), d : Φ ∪ {A} W
/ FV(B)
N Ψ, Ψ 1N B, x ∈
V
und hx, A, d, Bi : Φ N B.
Da Γ |= Φ und (∃x A) ∈ Φ, gilt Γ |= ∃x A.
Wie im Fall 4 folgt aus der I.V. für d, dass Γ ∪ {A} |= Ψ.
W
Da Ψ 1N
B, folgt aus Lemma 2.4.20, dass Γ ∪ {A} |= B.
Mir müssen zeigen, dass Γ |= B.
Dazu nehmen wir eine Struktur M und eine Variablenbelegung α mit M |= Γ [α].
Da Γ |= ∃x A, gilt [[∃x A]]M
α = 1.
Also gibt es ein Element v im Universum von M mit [[A]]M
α[x7→v] = 1.
Da x ∈
/ V und FV(Γ) ⊆ V , folgt aus dem Koinzidenzlemma 2.3.12, dass M |= Γ [α[x 7→ v]].
Da Γ ∪ {A} |= B, folgt [[B]]M
α[x7→v] = 1.
Da x ∈
/ FV(B), folgt nochmals mit dem Koinzidenzlemma 2.3.12, dass [[B]]M
α = 1. 2
∀∃ Beweis. (Satz 2.4.17) Nehmen wir an, dass Φ N A. Dann gibt es nach Def. 2.4.19 eine
Herleitung d mit d : Φ VN A und A ∈ Ψ, wobei V = FV(Φ). Da Φ |= Φ, folgt aus Lemma 2.4.21,
dass Φ |= Ψ und somit gilt Φ |= A. 2
2.5. VOLLSTÄNDIGKEIT DER PRÄDIKATENLOGIK
117
semantische Folgerungsbegriff Φ |= A wird nicht immer genau gleich definiert.
∀∃ Der
Manchmal werden die freien Variablen von Φ implizit durch Allquantoren (∀) gebunden,
so dass z.B. R(x) |= ∀x R(x) gilt. Der einzige Vorteil davon ist, dass man bei den Axiomen einer
Theorie die Allquantoren nicht hinschreiben muss. Wir verzichten auf diese “Vereinfachung” und
schreiben die Allquantoren immer explizit hin. Wir möchten, dass für eine Herleitung
assume A.
d
therefore B.
gilt, dass A |= B und umgekehrt.
2.5
Vollständigkeit der Prädikatenlogik
Das System des natürlichen Schliessens für die Prädikatenlogik ist vollständig. Es enthält
genug Axiome und Schlussregeln, so dass es für eine Formel A, die logisch aus einer
(möglicherweise unendlichen) Menge Φ von Annahmen folgt, auch eine formale Herleitung von A aus den globalen Annahmen Φ gibt. Zusammen mit dem Korrektheitssatz
(Satz 2.4.17) baut der Vollständigkeitssatz eine Brücke zwischen Syntax und Semantik.
Er zeigt, dass der rein syntaktisch definierte formale Herleitungsbegriff N aequivalent ist
zum semantischen Folgerungsbegriff |=.
Satz 2.5.1 (Vollständigkeit des natürlichen Schliessens)
Falls Φ |= A, dann Φ N A.
Der Vollständigkeitssatz wird indirekt bewiesen. Man nimmt an, dass die Formel A nicht
aus den Annahmen Φ beweisbar ist und konstruiert ein Modell von Φ, in dem die Formel A nicht wahr ist. Da die Sprache L nach Voraussetzung nur aus zwei abzählbaren
Symbolmengen R und F besteht, ist das Modell, das man im Beweis erhält, abzählbar
und zwar ist das Universum des Modells endlich oder abzählbar unendlich.
beweisen den Vollständigkeitssatz, indem wir zeigen, dass eine widerspruchsfreie
∀∃ Wir
Formelmenge erfüllbar ist und ein abzählbares Modell besitzt. Dazu müssen wir zuerst
die Begriffe “widerspruchsfrei” und “widerspruchsvoll” definieren. Wir nehmen an, dass eine
Sprache L gegeben ist und dass sich im folgenden alle Formeln und Strukturen immer auf die
Sprache L beziehen.
∀∃ Definition 2.5.2 (Widerspruchsvoll, widerspruchsfrei)
Sei Φ eine Formelmenge.
Φ ist widerspruchsvoll, falls es eine Formel A gibt, so dass Φ
N
A und Φ
N
¬A.
Φ ist widerspruchsfrei, falls Φ nicht widerspruchsvoll ist.
Widerspruchsfreie Mengen werden auch konsistent genannt. Widerspruchsvolle Mengen nennt
man inkonsistent.
Formelmengen lassen sich auf verschiedene Arten charakterisieren.
∀∃ Widerspruchsvolle
Zum Beispiel ist eine Formelmenge widerspruchsvoll genau dann, wenn jede Formel aus
ihr herleitbar ist. Eine durch eine widerspruchsvolle Formelmenge definierte Theorie ist somit
nutzlos. Darum ist man immer bestrebt, widerspruchsfreie Theorien zu haben.
118
KAPITEL 2. PRÄDIKATENLOGIK
∀∃ Lemma 2.5.3 Sei Φ eine Formelmenge. Dann sind die folgenden Aussagen aequivalent:
(1) Φ ist widerspruchsvoll.
(2) Φ
N
⊥.
(3) Für alle Formeln A gilt Φ
N
A.
∀∃ Beweis. (1) =⇒ (2): Sei Φ widerspruchsvoll. Dann gibt es eine Formel A mit Φ N A und
Φ N ¬A. Mit der Schlussregel (¬ e) aus Tabelle 1.1 erhält man eine formale Herleitung von ⊥
aus Φ. Also gilt Φ N ⊥.
(2) =⇒ (3): Falls Φ N ⊥, dann erhält man mit der Schlussregel (EFQ) aus Tabelle 1.1 sofort
Herleitungen von beliebigen Formeln aus Φ.
(3) =⇒ (1): Falls alle Formeln aus Φ herleitbar sind, dann gilt insbesondere auch Φ
und Φ N ¬(x ≈ x). Also ist Φ widerspruchsvoll. 2
N
x≈x
eine Formelmenge erfüllbar ist (also ein Modell besitzt), dann ist sie widerspruchs∀∃ Wenn
frei. Die umgekehrte Aussage gilt auch, ist jedoch viel schwieriger zu beweisen.
∀∃ Lemma 2.5.4 Falls eine Formelmenge Φ erfüllbar ist, dann ist sie widerspruchsfrei.
∀∃ Beweis. Nehmen wir an, dass Φ erfüllbar ist. Dann gibt es eine Struktur M und eine
Variablenbelegung α so, dass M |= Φ [α]. Falls Φ widerspruchsvoll wäre, dann gäbe es eine
Formel A mit Φ N A und Φ N ¬A. Da das System des natürlichen Schliessens korrekt ist
(Satz 2.4.17), würde folgen, dass M |= A [α] und M |= ¬A [α]. Das kann nicht sein. Also ist Φ
widerspruchsfrei. 2
wollen nun zeigen, dass eine widerspruchsfreie Formelmenge erfüllbar ist. Dies kann
∀∃ Wir
mit der Methode von Henkin gezeigt werden. Dazu erweitern wir die widerspruchsfreie
Menge zuerst zu einer maximal widerspruchsfreien Formelmenge.
∀∃ Definition 2.5.5 (Maximal widerspruchsfrei)
Eine Formelmenge Φ ist maximal widerspruchsfrei, falls sie die folgenden Bedingungen erfüllt:
Φ ist widerspruchsfrei.
Für alle Formeln A gilt: Falls Φ ∪ {A} widerspruchsfrei ist, dann ist A ∈ Φ.
Zu einer maximal widerspruchsfreien Formelmenge kann man also keine weitere Formel hinzunehmen, ohne dass sie widerspruchsvoll wird.
Maximal widerspruchsfreie Formelmenge Φ ist vollständig in dem Sinne, dass für
∀∃ Eine
jede Formel A entweder A oder ¬A zu Φ gehört. Weiter ist eine maximal widerspruchsfreie Formelmenge Φ deduktiv abgeschlossen. Falls eine Formel A aus Φ herleitbar ist, dann
gehört A zu Φ.
∀∃ Lemma 2.5.6 Sei Φ eine maximal widerspruchsfreie Formelmenge. Dann gilt:
(1) Für alle Formeln A ist entweder A ∈ Φ oder (¬A) ∈ Φ.
(2) Falls Φ
N
A, dann ist A ∈ Φ.
2.5. VOLLSTÄNDIGKEIT DER PRÄDIKATENLOGIK
119
∀∃ Beweis. (1) Nehmen wir an, dass A ∈
/ Φ und (¬A) ∈
/ Φ. Da Φ maximal widerspruchsfrei ist,
sind Φ ∪ {A} und Φ ∪ {¬A} widerspruchsvoll, d.h. es gilt Φ ∪ {A} N ⊥ und Φ ∪ {¬A} N ⊥.
Aus Lemma 1.4.35 folgt, dass Φ N ⊥. Dies kann aber nicht sein, da Φ widerspruchsfrei ist.
/ Φ, dann folgt aus (1), dass (¬A) ∈ Φ, und Φ wäre
(2) Nehmen wir an, dass Φ N A. Falls A ∈
widerspruchsvoll. Also ist A ∈ Φ. 2
Idee der Konstruktion von Henkin ist, dass man eine widerspruchsfreie Formelmenge
∀∃ Die
zuerst erweitert zu einer maximal widerspruchsfreien Formelmenge. Aus der maximal
widerspruchsfreien Formelmenge erhält man dann ein Modell, indem man alles, was in der Menge
ist, als wahr definiert. Das folgende Lemma zeigt, dass die Semantik der Aussagenlogik auf diese
Weise erhalten bleibt. Man kann eine maximal widerspruchsfreie Formelmenge als Menge von
wahren Formeln verstehen.
∀∃ Lemma 2.5.7 Sei Φ eine maximal widerspruchsfreie Formelmenge. Dann gilt:
(1) > ∈ Φ, ⊥ ∈
/ Φ,
(2) (¬A) ∈ Φ genau dann, wenn A ∈
/ Φ,
(3) (A ∧ B) ∈ Φ genau dann, wenn A ∈ Φ und B ∈ Φ,
(4) (A ∨ B) ∈ Φ genau dann, wenn A ∈ Φ oder B ∈ Φ,
(5) (A → B) ∈ Φ genau dann, wenn A ∈
/ Φ oder B ∈ Φ,
(6) (A ↔ B) ∈ Φ genau dann, wenn (A → B) ∈ Φ und (B → A) ∈ Φ.
∀∃ Beweis. Um die Eigenschaften von Φ zu zeigen, benötigt man Lemma 2.5.6 und die Schlussregeln für die Aussagenlogik in Tabelle 1.1. 2
die Erweiterung auf die Quantoren benötigt man eine zusätzliche Eigenschaft. Eine
∀∃ Für
Formelmenge Φ muss auch noch sogenannte Zeugen enthalten. Das bedeutet, dass es
für existentielle Formeln ∃x A in Φ einen Zeugen (einen Term) t gibt, so dass A xt ebenfalls zu Φ
gehört.
∀∃ Definition 2.5.8 (Zeugen) Eine Formelmenge Φ enthält Zeugen, falls es zu jeder Formel
(∃x A) ∈ Φ eine Variable y gibt, so dass A xy ∈ Φ.
Die Zeugen werden auch Henkin-Konstanten genannt. Da die Sprache L bei uns abzählbar ist,
können wir Variablen benutzen und müssen keine neuen Konstanten einführen.
widerspruchsfreie Formelmenge kann zu einer maximal widerspruchsfreien Formel∀∃ Jede
menge, die Zeugen enthält, erweitert werden.
∀∃ Lemma 2.5.9 Sei Φ eine widerspruchsfreie Formelmenge mit der Eigenschaft, dass es unendlich viele Variablen gibt, die nicht frei in Φ vorkommen. Dann kann Φ zu einer maximal
widerspruchsfreien Formelmenge Ψ, die Zeugen enthält, erweitert werden.
120
KAPITEL 2. PRÄDIKATENLOGIK
∀∃ Beweis. Da die Sprache L nur abzählbar viele Relations- und Funktionssymbole enthält,
gibt es nur abzählbar viele Formeln von L . Sei F0 , F1 , F2 , . . . eine Aufzählung aller Formeln
von L . Wir definieren eine Folge Ψ0 , Ψ1 , . . . von Formelmengen. Wir setzen Ψ0 := Φ und
definieren Ψn+1 wie folgt:
Ψn+1


Φn ∪ {Fn },







:=
Φn ∪ {Fn , A xy },








Φn ∪ {¬Fn },
falls Φn ∪ {Fn } widerspruchsfrei ist und
Fn nicht mit ∃ beginnt;
falls Φn ∪ {Fn } widerspruchsfrei ist, Fn = ∃x A und
y nicht frei in Ψn oder Fn vorkommt;
sonst.
Dann sieht man leicht, dass jedes Ψn widerspruchsfrei ist. Sei Ψ :=
widerspruchsfreie Erweiterung von Φ, die Zeugen enthält. 2
S
n∈N Ψn .
Dann ist Ψ eine
der Konstruktion von Henkin wird aus einer maximal widerspruchsfreien Formel∀∃ Bei
menge, die Zeugen enthält, eine Struktur konstruiert, welche ein Modell der Formelmenge ist. Das Universum der Struktur besteht aus den Termen der Sprache L . Das folgende
Lemma zeigt, dass die Semantik der Quantoren auf diese Weise erhalten bleibt.
∀∃ Lemma 2.5.10 Sei Φ eine maximal widerspruchsfreie Formelmenge, die Zeugen enthält.
Dann gilt:
(1) (∃x A) ∈ Φ genau dann, wenn es einen Term t gibt, so dass A xt ∈ Φ.
(2) (∀x A) ∈ Φ genau dann, wenn für jeden Term t gilt, dass A xt ∈ Φ.
∀∃ Beweis. (1) Sei (∃x A) ∈ Φ. Da die Formelmenge Φ Zeugen enthält, gibt es eine Variable y,
so dass A xy ∈ Φ.
Für die Rückrichtung nehmen wir an, dass A xt in Φ ist. Mit Einführungsregel (∃ i) für den
Existenzquantor (Tabelle 2.1) erhalten wir eine Herleitung von ∃x A aus Φ. Da Φ deduktiv
abgeschlossen ist (Lemma 2.5.6), gehört die Formel ∃x A zu Φ.
(2) Sei ∀x A in Φ. Sei t ein Term. Mit der Eliminationsregel (∀ e) für den Allquantor (Tabelle 2.1)
erhalten wir eine Herleitung von A xt aus Φ. Da Φ deduktiv abgeschlossen ist (Lemma 2.5.6),
gehört die Formel A xt zu Φ.
Für die Rückrichtung nehmen wir an, dass für jeden Term t die Formel A xt in Φ ist. Dann gehen
wir indirekt vor. Nehmen wir an, dass ∀x A nicht in Φ ist. Aus Lemma 2.5.6 folgt, dass dann
die Formel ¬∀x A zu Φ gehört. Da ∃x ¬A aus ¬∀x A beweisbar ist (siehe Beispiel 2.4.8) und Φ
deduktiv abgeschlossen ist, gehört ∃x ¬A zu Φ. Da Φ Zeugen enthält, gibt es eine Variable y, so
dass (¬A xy ) ∈ Φ. Da nach Annahme die Formel A xy in Φ ist, wäre Φ widerspruchsvoll. Also ist
∀x A in Φ. 2
kommen wir zur eigentlichen Konstruktion von Henkin. Die einzige Schwierigkeit,
∀∃ Nun
die noch verbleibt zur Definition des Modells aus einer maximal widerspruchsfreien Formelmenge Φ, ist die Behandlung der Gleichheit. Terme, die in Φ gleich sind, müssen identifiziert
werden.
2.5. VOLLSTÄNDIGKEIT DER PRÄDIKATENLOGIK
121
∀∃ Lemma 2.5.11 (Henkin)
Sei Φ eine maximal widerspruchsfreie Formelmenge, die Zeugen enthält. Dann ist Φ erfüllbar.
∀∃ Beweis. Wir konstruieren eine Struktur M = hM, Ii für L und eine Variablenbelegung ε
so, dass M |= Φ [ε].
Zuerst definieren wir eine Relation ∼Φ auf der Menge der Terme zur Sprache L durch:
s ∼Φ t :⇐⇒ (s ≈ t) ∈ Φ
Da Φ deduktiv abgeschlossen ist (Lemma 2.5.6), folgt aus den Überlegungen zur Gleichheit in
Abschnitt 2.4.10, dass die Relation ∼Φ eine Aequivalenzrelation ist. Sie ist reflexiv, symmetrisch
und transitiv.
Zu einem Term t bezeichnen wir mit [t]Φ die Aequivalenzklasse von Termen, zu der t gehört,
d.h. [t]Φ = {s | s ein Term von L und t ∼Φ s}.
Das Universum M der Struktur M sei die Menge der Aequivalenzklassen [t]Φ . Ein Objekt im
Universum M ist also eine Aequivalenzklasse von Termen.
Die Interpretation I der Funktionssymbole ist so definiert, dass
I(f /n)([t1 ]Φ , . . . , [tn ]Φ ) = [f (t1 , . . . , tn )]Φ
Dies ist möglich, da die Gleichheit die Eigenschaft E4 hat (siehe Abschnitt 2.4.10).
Die Interpretation I der Relationssymbole ist definiert durch:
I(R/n) := { h[t1 ]Φ , . . . , [tn ]Φ i | R(t1 , . . . , tn ) ∈ Φ }
Die Motivation für diese Definition ist, dass alles, was in Φ ist, wahr werden soll.
Sei ε die Variablenbelegung, die jeder Variablen x die Aequivalenzklasse von x zuordnet. Es gilt
also ε(x) = [x]Φ für alle Variablen x.
Nun zeigt man mit Induktion nach der Länge eines Terms t, dass der Wert von t in der Struktur M unter der Variablenbelegung ε einfach die Aequivalenzklasse von t ist, d.h. [[t]]M
ε = [t]Φ .
Darauf zeigt man mit Induktion nach der Länge einer Formel F , dass F in der Struktur M unter
der Variablenbelegung ε wahr ist genau dann, wenn F ein Element von Φ ist. Es gilt
F ∈Φ
genau dann, wenn
[[F ]]M
ε = 1.
Im Wesentlichen benutzt man dazu die Eigenschaften von Φ aus Lemma 2.5.7 und 2.5.10. Wir
betrachten nur die wichtigsten Fälle:
Fall 1: F = (s ≈ t).
M
M
Sei (s ≈ t) ∈ Φ. Dann ist s ∼Φ t und es gilt [[s]]M
ε = [s]Φ = [t]Φ = [[t]]ε . Also ist [[s ≈ t]]ε = 1.
M
M
Sei umgekehrt [[s ≈ t]]M
ε = 1. Dann ist [s]Φ = [[s]]ε = [[t]]ε = [t]Φ .
Also ist s ∼Φ t und (s ≈ t) ∈ Φ.
Fall 2: F = R(t1 , . . . , tn ).
Sei R(t1 , . . . , tn ) ∈ Φ. Dann ist h[t1 ]Φ , . . . , [tn ]Φ i ∈ I(R/n) und somit [[R(t1 , . . . , tn )]]M
ε = 1.
Sei umgekehrt [[R(t1 , . . . , tn )]]M
ε = 1. Dann ist h[t1 ]Φ , . . . , [tn ]Φ i ∈ I(R/n).
Es gibt Terme s1 , . . . , sn so, dass ti ∼Φ si für i = 1, . . . , n und R(s1 , . . . , sn ) ∈ Φ.
Da Φ deduktiv abgeschlossen ist, folgt mit E5 aus Abschnitt 2.4.10, dass R(t1 , . . . , tn ) ∈ Φ.
122
KAPITEL 2. PRÄDIKATENLOGIK
Fall 3: F = ∃x A.
Sei (∃x A) ∈ Φ. Da die Formelmenge Φ Zeugen enthält, gibt es eine Variable y, so dass A xy ∈ Φ.
Mit der Induktionsvoraussetzung für A xy erhält man, dass [[A xy ]]M
ε = 1.
y M
M
Das Substitutionslemma 2.3.13 sagt, dass [[A x ]]ε = [[A]]ε[x7→[y]Φ ] . Also ist [[∃x A]]M
ε = 1.
M
Sei umgekehrt [[∃x A]]M
ε = 1. Dann gibt es einen Term t so, dass [[A]]ε[x7→[t]Φ ] = 1.
t M
Das Substitutionslemma 2.3.13 sagt, dass [[A]]M
ε[x7→[t]Φ ] = [[A x ]]ε .
Mit der Induktionsvoraussetzung für A xt folgt, dass A xt ∈ Φ.
Aus Lemma 2.5.10 folgt, dass (∃x A) ∈ Φ.
Fall 4: F = ∀x A.
Geht ähnlich wie Fall 3 (mit Substitutionslemma 2.3.13 und Lemma 2.5.10). 2
folgenden Satz legen wir Wert darauf, dass die Formelmenge Φ abzählbar ist. Dies
∀∃ Im
ist eigentlich automatisch der Fall, da eine Sprache L bei uns nur abzählbar viele
Relations- und Funktionssymbole enthält und man somit nur abzählbar viele Formeln bilden
kann.
∀∃ Satz 2.5.12 Eine abzählbare, widerspruchsfreie Formelmenge besitzt ein abzählbares Modell.
∀∃ Beweis. Wir können annehmen, dass es unendliche viele Variablen gibt, die nicht frei in
der Formelmenge vorkommen. Sonst ersetzen wir einfach jede Variable xi durch x2i. Das ändert
an der Erfüllbarkeit nichts. Dann wird die Formelmenge mit Lemma 2.5.9 zu einer maximal
widerspruchsfreien Formelmenge, die Zeugen enthält, erweitert. Daraufhin wendet man Lemma 2.5.11 an. Das Modell, das im Beweis von Lemma 2.5.11 konstruiert wird, ist abzählbar, da
die Sprache L abzählbar ist und es somit nur abzählbar viele Terme von L gibt. 2
wichtigste Konsequenz von Satz 2.5.12 ist die Vollständigkeit des Systems des
∀∃ Die
natürlichen Schliessens für die Prädikatenlogik (Satz 2.5.1).
∀∃ Beweis. (Satz 2.5.1) Der Beweis geht indirekt. Nehmen wir an, dass die Formel A nicht
aus der Formelmenge Φ herleitbar ist, d.h. Φ 6 N A. Dann ist die Formelmenge Φ ∪ {¬A} widerspruchsfrei. Wäre sie widerspruchsvoll, dann könnte man ⊥ herleiten. Es gäbe eine Herleitung d
mit d: Φ ∪ {¬A} N ⊥. Die folgende Herleitung wäre dann ein Beweis von A aus Φ:
1:
2:
3:
4:
5:
6:
7:
8:
A ∨ ¬A.
case A.
hence A.
case ¬A.
d.
⊥.
hence A.
A.
[TND]
[EFQ mit 6]
[(∨ e) mit 1, 3 und 7]
Da Φ ∪ {¬A} widerspruchsfrei ist, ist die Formelmenge nach Satz 2.5.12 erfüllbar.
Es gibt also eine Struktur M und eine Variablenbelegung α, so dass M |= Φ [α] und M 6|= A [α].
Also kann A nicht logisch aus Φ folgen, d.h. Φ 6|= A. 2
2.5. VOLLSTÄNDIGKEIT DER PRÄDIKATENLOGIK
123
Eine weitere Konsequenz von Satz 2.5.12 ist, dass eine erfüllbare Formelmenge immer
∀∃ auch
ein abzählbares Modell besitzt. Das bedeutet, dass man sich bei der Definition
von |= in Def. 2.3.15 auf abzählbare Strukturen beschränken könnte.
∀∃ Satz 2.5.13 (Löwenheim-Skolem)
Falls eine abzählbare Formelmenge Φ ein Modell besitzt, dann besitzt Φ auch ein abzählbares
Modell.
∀∃ Beweis. Wenn Φ erfüllbar ist, dann ist Φ widerspruchsfrei (Lemma 2.5.4). Mit der Methode
von Henkin in Satz 2.5.12 erhalten wir ein abzählbares Modell von Φ. 2
Schliesslich folgt aus Satz 2.5.12 auch der sogenannte Kompaktheitssatz oder Endlich∀∃ keitssatz
für die Prädikatenlogik.
∀∃ Satz 2.5.14 (Kompaktheitssatz)
Falls jede endliche Teilmenge einer Formelmenge Φ erfüllbar ist, dann ist die ganze Menge Φ
erfüllbar.
∀∃ Beweis. Der Beweis geht indirekt. Nehmen wir an, dass Φ nicht erfüllbar ist. Dann folgt
aus Satz 2.5.12, dass Φ widerspruchsvoll ist, d.h. Φ N ⊥. Da die Herleitung von ⊥ aus Φ
endlich ist, werden in ihr nur endlich viele Annahmen von Φ benutzt. Also gibt es eine endliche
Teilmenge Φ0 ⊆ Φ, so dass ⊥ bereits aus Φ0 herleitbar ist, d.h. Φ0 N ⊥. Das heisst, dass Φ0
widerspruchsvoll ist. Wegen Lemma 2.5.4 ist Φ0 nicht erfüllbar. 2
124
KAPITEL 2. PRÄDIKATENLOGIK
2.6
Peano-Arithmetik und die Grenzen der formalen Methode
In diesem Abschnitt geht es um die Grenzen der formalen Methode. Wir zeigen, wie
Peano die natürlichen Zahlen axiomatisiert hat, und gehen auf die fundamentalen Sätze
von Gödel ein.
Zuerst stellen wir uns die Frage: Was sind eigentlich die natürlichen Zahlen?
Antwort 1: Die natürlichen Zahlen sind die Strichzahlen.
|
||
|||
||||
|||||
||||||
|||||||
etc.
Bei der Addition von zwei Strichzahlen schreibt man einfach die zweite Zahl unmittelbar
hinter der ersten Zahl hin.
||| + |||| = |||||||
Bei der Multiplikation ersetzt man jeden Strich in der ersten Zahl durch eine Kopie der
zweiten Zahl.
||||| ∗ ||| = |||||||||||||||
Bei der Kleiner-Relation streicht man simultan je einen Strich in beiden Zahlen. Diejenige
Zahl die zuerst leer wird ist kleiner.
||||||||||||||||| < |||||||||||||||||||||||
Die meisten Menschen können Strichzahlen nur etwa bis zur Zahl Sieben erfassen.
Antwort 2: Die natürlichen Zahlen sind die Binärzahlen.
0
1
1 0
1 1
1 0 0
1 0 1
1 1 0
1 1 1
1 0 0 0
etc.
Die Addition von zwei Binärzahlen geht wie in einem Computer. Man schreibt die Zahlen
untereinander hin und beginnt beim kleinsten Bit (ganz rechts). Man zählt jeweils die
beiden Bits, die übereinanderstehen zusammen und berücksichtigt auch einen allfälligen
Übertrag (Carry Bit).
1 1 1 0 0 1
+ 1 0 0 1 1 1 0
1 0 0 0 0 1 1 1
Die Multiplikation kann man mit Hilfe der Addition machen, indem man die zweite Zahl
suksessive nach links schiebt und jeweils zu dem Zwischenresultat hinzuaddiert, falls in
der ersten Zahl an der entsprechenden Stelle eine Eins steht (shift and add ).
1 0 1 ∗ 1 1 = 1 1 1 1
Die Kleiner-Relation kann auf die Subtraktion zurückgeführt werden.
1 0 0 0 1 < 1 0 1 1 1
Die Details werden in der Vorlesung Digitaltechnik behandelt.
2.6. PEANO-ARITHMETIK
125
Antwort 3: Die natürlichen Zahlen sind die Dezimalzahlen.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 etc.
Die Addition von Dezimalzahlen wird den Menschen in der Schule beigebracht.
23 + 19 = 42
Die Multiplikation von Dezimalzahlen ebenfalls.
17 ∗ 23 = 391
Die Kleiner-Relation beruht auf der Ordnung der natürlichen Zahlen. Die Kinder lernen
diese Ordnung, wenn sie zu zählen beginnen.
17 < 23
Die meisten Menschen denken bei Dezimalzahlen and Geldbeträge oder Ranglisten.
Antwort 4: Die natürlichen Zahlen sind die mengentheoretischen Zahlen.
∅
{∅}
{∅, {∅}}
{∅, {∅}, {∅, {∅}}}
etc.
In der Mengenlehre wird eine natürliche Zahl als die Menge aller Zahlen, die echt kleiner
sind, aufgefasst. Der Nachfolger einer Zahl ist so definiert:
n + 1 := n ∪ {n}
Somit ergibt sich:
0=∅
3 = {0, 1, 2}
1 = {0}
4 = {0, 1, 2, 3}
2 = {0, 1}
5 = {0, 1, 2, 3, 4}
Die Kleiner-Relation wird besonders einfach. Eine Zahl m ist kleiner als n genau dann,
wenn m ein Element von n ist.
m < n gdw. m ∈ n
Die anderen Rechenoperationen sind etwas aufwendiger.
2.6.1
Axiome für die natürlichen Zahlen
Was ist gemeinsam an den Strichzahlen, Binärzahlen, Dezimalzahlen und den mengentheoretischen Zahlen? Die Zahlen kann man immer zusammenfassen zu einer Menge N.
Die Menge N hat die folgenden Eigenschaften:
Es gibt Zahlen 0 und 1 in N.
126
KAPITEL 2. PRÄDIKATENLOGIK
Es gibt eine Addition (+) auf N mit den folgenden Eigenschaften:
m+0=m
m + (n + 1) = (m + n) + 1
Es gibt eine Multiplikation (∗) auf N mit den folgenden Eigenschaften:
m∗0=0
m ∗ (n + 1) = (m ∗ n) + m
Es gibt eine Ordnungsrelation (<) auf N mit den folgenden Eigenschaften:
n 6< 0
m<n+1
⇐⇒
m = n oder m < n
Für N gilt das Prinzip der vollständigen Induktion:
Sei X ⊆ N eine Menge von Zahlen mit den folgenden Eigenschaften:
(a) 0 ∈ X.
(b) Für alle n ∈ N gilt: Falls n ∈ X, dann ist n + 1 ∈ X.
Dann ist X = N.
Das Prinzip der vollständigen Induktion drückt die Tatsache aus, dass man jede natürliche Zahl von der Zahl 0 aus erreicht, indem man genügend oft die Zahl 1 hinzuaddiert.
Genauer: Wenn eine Teilmenge von N die Zahl 0 enthält und abgeschlossen ist unter
Nachfolgern, dann enthält sie alle natürlichen Zahlen.
In der Praxis benutzt man das Prinzip der vollständigen Induktion so:
Wir möchten zeigen, dass alle natürlichen Zahlen n eine Eigenschaft ϕ(n) besitzen.
Dazu betrachten wir die Menge aller n ∈ N mit der Eigenschaft ϕ(n) und nennen diese
Menge X, also X = {n ∈ N | ϕ(n)}.
Als Induktionsverankerung, zeigen wir dass ϕ(0) zutrifft und damit 0 ∈ X ist.
Im Induktionsschritt von n nach n + 1, nehmen wir an, dass n ∈ X ist, also ϕ(n) gilt.
Dann zeigen wir, dass auch ϕ(n + 1) zutrifft und somit n + 1 ∈ X ist.
Aus der Induktionsverankerung und dem Induktionsschritt können wir dann schliessen,
dass X gleich der Menge N ist und somit alle Zahlen n die Eigenschaft ϕ(n) besitzen.
2.6.2
Die Axiome von Peano
In Abb. 2.7 sind diese Konzepte axiomatisiert in der Sprache Lar der Arithmetik mit
den Symbolen 0, 1, +, ∗, <. Eine ähnliche Axiomatisierung der natürlichen Zahlen wurde
zum ersten Mal von G. Peano (1858–1932) aufgestellt und darum spricht man von der
Peano-Arithmetik (PA).
2.6. PEANO-ARITHMETIK
127
A1. ∀x (x + 0 ≈ x)
A2. ∀x∀y (x + (y + 1) ≈ (x + y) + 1)
A3. ∀x (x ∗ 0 ≈ 0)
A4. ∀x∀y (x ∗ (y + 1) ≈ (x ∗ y) + x)
A5. ∀x ¬(x < 0)
A6. ∀x∀y (x < y + 1 ↔ (x ≈ y ∨ x < y))
A7. A x0 ∧ ∀x (A → A x+1
) → ∀x A
x
für beliebige Formeln A von Lar
Abbildung 2.7: Die Axiome der Peano-Arithmetik (PA).
Die Axiome A1–A6 beschreiben die Eigenschaften der Addition, Multiplikation und der
Ordnungsrelation. Das Axiom A7 ist das Schema der vollständigen Induktion. Das Schema
ist so zu verstehen, dass man für jede Formel A der Sprache Lar ein Axiom hinzunimmt.
Das Schema A7 steht also für eine ganze Sammlung von Axiomen. Die Formel A x0 in A7
ist die Induktionsverankerung und die Formel ∀x (A → A x+1
) der Induktionsschritt von
x
x nach x + 1.
Wir schreiben PA ` F , wenn die Formel F in der Peano-Arithmetik beweisbar ist.
Alle wichtigen Eigenschaften der Addition, Multiplikation und der Ordnungsrelation sind
aus den Peano-Axiomen beweisbar. Hier ist eine Liste von solchen Eigenschaften:
(1) PA ` (x + y) + z ≈ x + (y + z)
(2) PA ` 0 + x ≈ x
[Induktion nach z]
[Induktion nach x]
(3) PA ` (x + 1) + y ≈ x + (y + 1)
[Induktion nach y]
(4) PA ` x + y ≈ y + x
[Induktion nach y]
(5) PA ` x ∗ (y + z) ≈ (x ∗ y) + (x ∗ z)
[Induktion nach z]
(6) PA ` (x ∗ y) ∗ z ≈ x ∗ (y ∗ z)
[Induktion nach z]
(7) PA ` 0 ∗ x ≈ 0
[Induktion nach x]
(8) PA ` (x ∗ y) + y ≈ (x + 1) ∗ y
[Induktion nach y]
(9) PA ` x ∗ y ≈ y ∗ x
[Induktion nach y]
(10) PA ` x ∗ 1 ≈ x
[Folgt aus A3, A4, 2]
(11) PA ` x + 1 6≈ 0
[Folgt aus A5 und A6]
128
KAPITEL 2. PRÄDIKATENLOGIK
(12) PA ` x < y ∧ y < z + 1 → x < z
(13) PA ` x < y ∧ y < z → x < z
(14) PA ` ¬(x < x)
[Induktion nach z]
[Folgt aus 12 mit A6]
[Induktion nach x]
(15) PA ` 0 < x + 1
[Induktion nach x]
(16) PA ` x < y → x + 1 < y + 1
[Induktion nach y]
(17) PA ` x < y ∨ x ≈ y ∨ y < x
[Induktion nach x]
(18) PA ` y < z → x + y < x + z
[Induktion nach z]
(19) PA ` y < z ∧ x 6≈ 0 → x ∗ y < x ∗ z
[Induktion nach z]
(20) PA ` x + 1 ≈ y + 1 → x ≈ y
[Folgt aus 14, 16, 17]
In der Peano-Arithmetik kann man nicht nur über die Addition (+), Multiplikation (∗)
und die Ordnungsrelation (<) sprechen sondern auch über Teilbarkeit, Primzahlen und
andere Eigenschaften von Zahlen (siehe Beispiel 2.1.10).
Das formale System PA ist eine Axiomatisierung der Arithmetik in der Prädikatenlogik
∀∃ erster
Stufe. Das heisst, dass die Quantoren ∀x und ∃x nur über natürliche Zahlen laufen
und nicht über höherstufige Objekte wie Teilmengen von N oder Funktionen von N nach N. Im
Induktionsschema A7 in Abb. 2.7 werden nur Teilmengen von N berücksichtigt, die man durch
prädikatenlogische Formeln in der Sprache Lar mit 0, 1, +, ∗, < definieren kann. Solche Mengen
nennt man arithmetische Mengen. Da es nur abzählbar unendlich viele Formeln der Sprache Lar
gibt, gibt es auch nur abzählbar unendlich viele arithmetische Mengen und somit ist nicht jede
Teilmenge von N arithmetisch.
hat die Menge N der natürlichen Zahlen durch Axiome für Null und die Nach∀∃ Peano
folgerfunktion s(x) = x + 1 wie folgt charakterisiert:
P1. 0 ∈ N
[Null ist eine natürliche Zahl]
P2. ∀x (x ∈ N → s(x) ∈ N ) [Der Nachfolger einer natürlichen Zahl ist eine natürliche Zahl]
P3. ∀R (0 ∈ R ∧ ∀x (x ∈ R → s(x) ∈ R) → N ⊆ R)
[Induktionsaxiom]
P4. ∀x ∈ N ∀y ∈ N (s(x) ≈ s(y) → x ≈ y)
[Die Nachfolgerfunktion ist injektiv]
P5. ∀x ∈ N (s(x) 6≈ 0)
[Der Nachfolger einer natürlichen Zahl ist verschieden von Null]
Man kann zeigen, dass durch die Axiome P1–P5 die Menge N zusammen mit 0 und s bis auf
Isomorphie eindeutig bestimmt ist. Das Induktionsaxiom P3 ist aber eine Formel der Prädikatenlogik zweiter Stufe, da der Quantor ∀R sich auf alle Teilmengen des Universums bezieht und
nicht auf die Elemente des Universums wie der Quantor ∀x.
2.6.3
Die Unvollständigkeitssätze von Gödel
Die Struktur N aus Beispiel 2.3.2 ist ein Modell der Peano-Axiome (N |= PA). Man
nennt N das Standardmodell der Peano-Arithmetik. Falls ein Satz F beweisbar ist in PA,
dann ist F wahr im Standardmodell N:
Falls PA ` F, dann N |= F
2.6. PEANO-ARITHMETIK
129
Es drängen sich die folgenden Fragen auf:
Frage 1: Ist jeder wahre Satz von N in der Peano-Arithmetik beweisbar?
?
{F | N |= F } = {F | PA ` F }
Frage 2: Kann man mit finitären Methoden zeigen, dass in der Peano-Arithmetik kein
Widerspruch herleitbar ist?
Wie zeigt man, dass PA 6` 0 ≈ 1?
Beide Fragen wurden von Kurt Gödel im Jahr 1931 negativ beantwortet.
Satz 2.6.4 (1. Unvollständigkeitssatz von Gödel)
Es gibt ein Satz F der Sprache Lar , so dass, falls PA widerspruchsfrei ist, in PA weder
F noch ¬F beweisbar sind.
Der erste Unvollständigkeitssatz sagt, dass es Sätze gibt, die im Standardmodell N wahr
sind, aber nicht aus den Peano-Axiomen mit dem Schema der vollständigken Induktion beweisbar sind. Gödel hat sogar eine Konstruktion angegeben, wie man einen wahren Satz F
konstrieren kann, so dass F in PA nicht beweisbar ist. Seine Konstruktion kann man auch
auf Erweiterung von PA anwenden und darum ist der erste Unvollständigkeitssatz sehr
allgemein. Er zeigt die Grenzen der Formalisierbarkeit auf. In moderner Terminologie
kann man ihn so formulieren:
Zu jedem formalen Beweissystem, das die Peano-Axiome umfasst, kann man
ein Computerprogramm angeben, dass immer terminiert, dessen Terminierung
in dem formalen System aber nicht bewiesen werden kann.
Man kann auch zeigen, dass es kein Computerprogramm gibt, dass alle wahren Sätze
von N aufzählt. Dies ist nicht einmal möglich unter der Annahme, dass das Computerprogramm beliebig viel Speicherplatz und Rechenzeit zur Verfügung hätte.
Satz 2.6.5 (2. Unvollständigkeitssatz von Gödel)
Falls PA widerspruchsfrei ist, dann ist die Widerspruchsfreiheit von PA in PA nicht beweisbar.
Der zweite Unvollständigkeitssatz sagt, dass man die Mathematik nicht auf solide Grundlagen stellen kann. Sobald ein formales System die Peano-Arithmetik umfasst, kann man
dessen Widerspruchsfreiheit nicht mehr in dem System selbst beweisen. Es ist darum
nicht möglich ein Axiomensystem für die Mathematik aufzustellen und dann von aussen
mit finitären Mitteln, die von allen Mathematikern akzeptiert werden, zu zeigen, dass die
Axiome widerspruchsfrei sind (und somit Sinn machen).
Der erste Schritt im Beweis der Unvollständigkeitssätze von Gödel besteht darin, dass
man sich überlegt, dass man in der Peano-Arithemtik nicht nur über natürliche Zahlen
sondern auch über Formeln, Beweise, und Computerprogramme sprechen kann. Dazu muss
130
KAPITEL 2. PRÄDIKATENLOGIK
man Formeln, Beweise und Computerprogramme als natürliche Zahlen kodieren. Zunächst
ordnet man einer natürlichen Zahl n ∈ N einen Term der Sprache Lar zu:
n := 1| + 1 +{z· · · + 1}
n mal
Solche Terme heissen Ziffern (Numerals). Dann zeigt man das folgende Lemma:
Lemma 2.6.6 Für jedes Computerprogram π: N → N gibt es eine Formel Fπ (x, y) der
Sprache Lar mit den folgenden Eigenschaften:
(1) Für alle m, n ∈ N, falls π(m) = n, dann PA ` Fπ (m, n)
(2) PA ` ∀x∀y∀z (Fπ (x, y) ∧ Fπ (x, z) → y ≈ z)
Die Formel Fπ (x, y) bedeutet: Das Programm π terminiert bei der Eingabe x und berechnet die Ausgabe y. Die Eigenschaft 1 sagt: Wenn das Programm π auf die Eingabe m
terminiert und die Zahl n ausgibt, dann ist diese Tatsache in PA beweisbar. Die Eigenschaft 2 sagt: In PA kann man beweisen, dass es zu jeder Eingabe zum Programm π
höchstens eine Ausgabe gibt.
Die moderne Formulierung des ersten Unvollständigkeitssatzes lautet dann so:
Satz 2.6.7 Es gibt ein Computerprogramm π: N → N, das für jede Eingabe terminiert,
so dass aber PA 6` ∀x∃y Fπ (x, y).
Es gibt also terminierende Computerprogramme, von denen man in PA nicht beweisen
kann, dass sie terminieren.
Um Programme in PA durch Formeln darzustellen, muss man Programme als natürliche
Zahlen kodieren. Für ein Programm π bezeichnet man mit pπq die Gödelnummer (der
Code) von π. Also pπq ∈ N. Eine mögliche Kodierung geht wie folgt:
Schreibe π in einem Editor hin.
Betrachte das File als (riesige) Binärzahl.
Somit kann jedes Programm π als natürliche Zahl pπq aufgefasst werden. Auf dieselbe Art kann man einer Formel F eine Gödelnummer pFq und einer Herleitung d eine
Gödelnummer pdq zuordnen. Dann konstruiert man eine Formel BewPA (x, y) in der Sprache Lar mit der Bedeutung:
Die Zahl x codiert einen PA-Beweis einer Formel mit Code y.
Insbesondere muss für Herleitungen d und Formeln F gelten:
Falls d eine PA-Herleitung von F ist, dann gilt PA ` BewPA (pdq, pFq).
Falls d nicht eine PA-Herleitung von F ist, dann gilt PA ` ¬BewPA (pdq, pFq).
Dann definiert man ConPA := ¬∃xBewPA (x, p0 ≈ 1q).
Der zweite Unvollständigkeitssatz lautet dann: PA 6` ConPA .
Der Beweis ist aufwendig und erfordert viel Geduld. Man macht ihn üblicherweise nicht
für PA direkt sondern für eine Variante, die sogenannte primitiv rekursive Arithmetik
(PRA).
2.7. ABSTRAKTE DATENTYPEN
2.7
131
Abstrakte Datentypen
Wir können die Axiome der Peano-Arithemtik in Abb. 2.7 auffassen als Axiomatisierung
des Datentyps der natürlichen Zahlen. Andere Datentypen kann man ähnlich axiomatisieren. Als Beispiel betrachten wir den Datentyp der linearen Listen.
Zuerst stellen wir uns die Frage: Was sind lineare Listen?
Antwort 1: Listen sind endliche Pointer-Ketten.
Jedes Element der Liste hat ein Datenfeld und ein Pointerfeld, das auf das nächste Element
der Liste zeigt.
a
b
c
d
nil
Die leere Liste wird durch den Pointer nil dargestellt.
Wenn wir ein neues Element x vorne an die Liste anhängen wollen, dann müssen wir eine
neue Zelle für x erzeugen und in das Pointerfeld einen Pointer auf den Rest der Liste
hineinsetzen.
a
x
b
c
d
nil
Bei der Konkatenation (Append ) von zwei Listen wird in das Pointerfeld des letzten Elementes der ersten Liste ein Pointer auf das erste Element der zweiten Liste hineingesetzt.
a
b
nil
.
c
d
nil
=
a
b
c
d
nil
Die einzelnen Zellen der ersten Liste müssen allenfalls kopiert werden, damit die erste
Liste nicht verloren geht. Zwei verschiedene Listen können ein gemeinsames Endstück
haben.
Antwort 2: Listen sind endliche Folgen.
Eine endliche Folge ist eine Abbildung α: {0, 1, . . . , n − 1} → X. Dabei ist α(0) das erste
Element der Folge, α(1) das zweite Element, usw. Die Länge der Folge ist n und wird mit
|α| bezeichnet. Die Konkatenation von zwei Folgen α und β ist wie folgt definiert:
α(i),
falls i < |α|;
(α · β)(i) =
β(i − |α|), falls |α| ≤ i.
Die Länge von α · β ist gleich der Summe der Längen von α und β, d.h. |α · β| = |α| + |β|.
Beispiel:
{0 7→ a, 1 7→ b, 2 7→ c} · {0 7→ d, 1 7→ e} = {0 7→ a, 1 7→ b, 2 7→ c, 3 7→ d, 4 7→ e}
132
2.7.1
KAPITEL 2. PRÄDIKATENLOGIK
Axiome für lineare Listen
Was ist gemeinsam an den verketteten Pointerlisten und den endlichen Folgen?
Es gibt eine leere Liste nil.
Zu einer Liste ` kann man vorne ein Element x hinzufügen und erhält eine neue
Liste cons(x, `), die nicht leer ist.
Aus einer nicht-leeren Liste ` erhält man mit head(`) das erste Element der Liste
und mit tail(`) den Rest der Liste. Es gilt
head(cons(x, `)) = x
tail(cons(x, `)) = `
Es gibt eine Konkatenation (·) auf den Listen mit den folgenden Eigenschaften:
nil · ` = `
cons(x, `1 ) · `2 = cons(x, `1 · `2 )
Es gilt das folgende Induktionsprinzip für Listen:
Sei X eine Menge von Listen mit den folgenden Eigenschaften:
(a) nil ∈ X.
(b) Für alle x und ` gilt: Falls ` ∈ X, dann ist cons(x, `) ∈ X.
Dann ist X die Menge aller Listen.
Die Konstante nil und die Funktion cons nennt man Konstruktoren, da sie zum Konstruieren von Listen benutzt werden. Die Funktionen head und tail nennt man Selektoren, da
sie zum Selektieren von Komponenten einer Liste benutzt werden. Die Konkatenationsfunktion ist rekursiv definiert nach dem Aufbau der ersten Liste. Es gibt einen Basisfall
für die leere Liste und einen Fall für eine zusammengesetzte Liste. Mit dem Induktionsprinzip will man ausdrücken, dass man jede Liste aus der leeren Liste erhalten kann indem
man suksessive vorne neue Elemente anhängt.
Zur Axiomatisierung der Liste benötigen wir zwei einstellige Prädikate Item und List
mit der folgenden intendierten Bedeutung:
Item(x)
⇐⇒
x is ein Element
List(`)
⇐⇒
` ist eine Liste
Wir benutzen die folgenden Abkürzungen:
∀xItem A steht für ∀x (Item(x) → A)
∃xItem A steht für ∃x (Item(x) ∧ A)
∀`List A
steht für ∀` (List(`) → A)
∃`List A
steht für ∃` (List(`) ∧ A)
2.7. ABSTRAKTE DATENTYPEN
133
Wir lesen die Abkürzungen wie folgt:
∀xItem A wird gelesen als “für alle x vom Typ Item gilt A”
∃xItem A wird gelesen als “es gibt ein x vom Typ Item mit A”
∀`List A
wird gelesen als “für alle ` vom Typ List gilt A”
∃`List A
wird gelesen als “es gibt ein ` vom Typ List mit A”
Weiter benutzen wir die folgenden Abkürzungen:
x ∈ Item steht für Item(x)
` ∈ List
steht für List(`)
Dann betrachten wir die folgenden Axiome für Listen:
L1. nil ∈ List
(“Der leere Liste ist ein Liste.”)
L2. ∀xItem ∀`List (cons(x, `) ∈ List)
(“Wenn man ein Element an eine Liste vorne anfügt, bleibt das Resultat ein Liste.”)
L3. ∀`List (` 6≈ nil → head(`) ∈ Item ∧ tail(`) ∈ List)
(“Das erste Element einer nicht-leeren Liste ist ein Item. Wenn man das erste Element von einer nicht-leeren Liste entfernt, bleibt der Rest ein Liste.”)
L4. ∀xItem ∀`List (cons(x, `) 6≈ nil)
(“Wenn man ein Element an eine Liste vorne anfügt, ist das Resultat nicht-leer.”)
L5. ∀xItem ∀`List (head(cons(x, `)) ≈ x)
(“Wenn man ein Element x an eine Liste vorne anfügt, dann ist x das erste Element.”)
L6. ∀xItem ∀`List (tail(cons(x, `)) ≈ `)
(“Wenn man ein Element an eine Liste ` vorne anfügt und wieder entfernt, erhält
man die ursprüngliche Liste `.”)
L7. ∀`List (nil · ` ≈ `)
(“Wenn man die leere Liste mit einer Liste ` konkateniert, erhält man `.”)
L8. ∀xItem ∀`List
∀`List
(cons(x, `1 ) · `2 ≈ cons(x, `1 · `2 ))
1
2
(“Wenn man eine Liste mit Kopf x und Rest `1 konkatenieren will mit einer Liste `2 ,
dann soll man zuerst den Rest `1 mit `2 konkatenieren und dann x vorne als erstes
Element anfügen.”)
Die Axiome L2–L4 werden manchmal auch so geschrieben:
L2. cons: Item × List → List
L3. head: {` ∈ List | ` 6≈ nil} → Item
134
KAPITEL 2. PRÄDIKATENLOGIK
L4. tail: {` ∈ List | ` 6≈ nil} → List
Diese Schreibweisen muss man als Abkürzungen für die zugrunde liegenden Formeln der
Prädikatenlogik verstehen.
Schliesslich nehmen wir das folgende Induktionsprinzip für beliebige Formeln A hinzu:
∧ ∀xItem ∀`List (A → A cons(x,`)
) → ∀`List A
L9. A nil
`
`
(“Wenn eine Aussage A auf die leere Liste zutrifft und wenn man unter der Annahme, dass A auf die Liste ` zutrifft, zeigen kann, dass A auch auf cons(x, `) zutrifft,
dann gilt die Aussage A für beliebige Listen `.”)
Es gilt die folgende Analogie zum Induktionsschema für die natürlichen Zahlen:
Verankerung Induktionsschritt
A x0
)
∀x (A → A x+1
x
A nil
`
∀xItem ∀`List (A → A cons(x,`)
)
`
In der Peano-Arithmetik zeigt man bei der Induktionsverankerung die Aussage für die
Zahl 0. Bei den Listen zeigt man die Aussage zuerst für die leere Liste nil. Im Induktionsschritt zeigt man in der Peano-Arithmetik wie man von x nach x + 1 kommt. Bei den
Listen zeigt man, wie man die Aussage von ` auf cons(x, `) übertragen kann.
Beispiel 2.7.2 Als Beispiel für die Anwendung des Induktionsschemas zeigen wir, wie
man aus den Axiomen L1–L8 mit Induktion die folgende Formel herleitet:
∀`List (` · nil ≈ `)
Sei A die Formel ` · nil ≈ `. Wir wollen das Induktionsschema L9 für A benutzen.
Induktionsverankerung:
Die Formel A nil
lautet nil · nil ≈ nil. Diese Eigenschaft gilt wegen Axiom L7.
`
Induktionsschritt:
Die Formel A → A cons(x,`)
lautet ` · nil ≈ ` → cons(x, `) · nil ≈ cons(x, `).
`
Die Formel ` · nil ≈ ` ist die Induktionsvoraussetzung.
Die Formel cons(x, `) · nil ≈ cons(x, `) ist die Induktionsbehauptung.
Wir leiten nun die Induktionsbehauptung aus der Induktionsvoraussetzuing her:
1:
2:
3:
assume ` · nil ≈ `.
cons(x, `) · nil ≈ cons(x, ` · nil) ≈ cons(x, `).
therefore cons(x, `) · nil ≈ cons(x, `).
Also bekommen wir mit dem Induktionsschema L9, ∀`List A, was genau die Formel ist,
die wir herleiten wollten.
2.7. ABSTRAKTE DATENTYPEN
135
Beispiel 2.7.3 Als weiteres Beispiel wollen wir die Assoziativität der Konkatenation von
Listen beweisen:
∀`List
∀`List
∀`List
((`1 · `2 ) · `3 ≈ `1 · (`2 · `3 ))
1
2
3
Sei A die Formel (` · `2 ) · `3 ≈ ` · (`2 · `3 ). Wir nehmen an, dass `2 und `3 Listen sind, also
`2 ∈ List und `3 ∈ List.
Induktionsverankerung:
lautet (nil · `2 ) · `3 ≈ nil · (`2 · `3 ).
Die Formel A nil
`
Diese Gleichung folgt aus Axiom L7:
(nil · `2 ) · `3 ≈ `2 · `3 ≈ nil · (`2 · `3 )
Induktionsschritt:
Die Formel A → A cons(x,`)
lautet:
`
(` · `2 ) · `3 ≈ ` · (`2 · `3 ) → (cons(x, `) · `2 ) · `3 ≈ cons(x, `) · (`2 · `3 )
Diese Formel beweisen wir wie folgt:
1:
2:
3:
4:
assume (` · `2 ) · `3 ≈ ` · (`2 · `3 ).
(cons(x, `) · `2 ) · `3 ≈ cons(x, ` · `2 ) · `3 ≈
cons(x, (` · `2 ) · `3 ) ≈ cons(x, ` · (`2 · `3 )) ≈ cons(x, `) · (`2 · `3 ).
therefore (cons(x, `) · `2 ) · `3 ≈ cons(x, `) · (`2 · `3 ).
Das Induktionsschema L9 ergibt ∀`List A. Da wir unter der Annahme, dass `2 ∈ List und
A. Das ist genau, was wir
∀`List
`3 ∈ List gearbeitet haben, bekommen wir ∀`List ∀`List
3
2
zeigen wollten.
136
KAPITEL 2. PRÄDIKATENLOGIK
Kapitel 3
Logikprogrammierung
In traditionellen, imperativen Programmiersprachen besteht ein Programm aus einer Folge von Befehlen, welche genau vorschreiben, wie man aus den Eingabedaten in einzelnen
Schritten die Ausgabe berechnet. In der Logikprogrammierung dagegen besteht ein Programm aus einer Menge von Fakten und Regeln. Die Fakten und Regeln beschreiben
die Beziehungen (Relationen) zwischen den Daten. Ein Logikprogramm kann als logische Theorie aufgefasst werden. Das System versucht Antworten auf Fragen (Queries)
zu berechnen. Die Antworten sind logische Konsequenzen der Fakten und Regeln. Ein
Logikprogramm hat somit sowohl eine prozedurale als auch eine logische Bedeutung. Auf
eine einfache Formel gebracht bedeutet Logikprogrammierung:
Programm
=
Formel der Prädikatenlogik
Berechnung
=
Beweissuche
Die bekannteste Logikprogrammiersprache ist Prolog. Prolog ist fundamental verschieden von klassischen, imperativen Programmiersprachen. Prolog ist ideal für die Suche
nach Lösungen mit Back-Tracking. Falls der Lösungsraum eines Problems endlich ist und
die einzelnen Bedingungen an die Lösungen mittels Matching spezifiziert werden können,
dann ist Prolog die richtige Wahl. Als Beispiel führen wir das bekannte “Zebra” Puzzle
an (siehe Abb. 3.1).
In dem Puzzle geht es darum, fünf Häuser in einer Strasse richtig zu platzieren. Jedes
Haus hat eine Farbe und wird von einer Person bewohnt, welche sich ein Haustier hält, eine
bestimmte Getränkesorte trinkt und eine Zigarettenmarke raucht. Die Bedingungen an
die Lösung sind in natürlicher Sprache formuliert und können direkt in Prolog übertragen
werden (siehe Abb. 3.2). Die Lösung erhält man in weniger als einer Sekunde mit der
folgenden Frage:
?- loesung(X).
X = [[norweger,gelb,katze,wasser,chesterfield],
[russe,blau,pferd,tee,players],
[englaender,rot,bienen,wodka,reval],
[japaner,gruen,zebra,bier,camel],
[spanier,weiss,hund,whisky,zigarren]]
137
138
KAPITEL 3. LOGIKPROGRAMMIERUNG
In einer Strasse stehen nebeneinander fünf Häuser. Die Bewohner kommen aus fünf
verschiedenen Ländern, sie rauchen, trinken und halten sich ein Haustier:
(1) Der Engländer wohnt in dem roten Haus.
(2) Der Spanier hat einen Hund.
(3) Im grünen Haus wird Bier getrunken.
(4) Der Russe trinkt Tee.
(5) Gleich links neben dem weissen Haus steht das grüne Haus.
(6) Der Mann, der “Reval” raucht, züchtet Bienen.
(7) Zigaretten der Marke “Chesterfield” raucht man im gelben Haus.
(8) In dem Haus in der Mitte wird Wodka getrunken.
(9) Der Norweger wohnt im ersten Haus.
(10) Der Mann, der “Players” raucht, ist der Nachbar des Herrn mit der Katze.
(11) Übrigens: “Chesterfield” werden im Haus neben dem geraucht, in dem das Pferd
gehalten wird.
(12) Der Hausherr, der Zigarren raucht, trinkt Whisky.
(13) Der Japaner raucht nur “Camel”.
(14) Das Haus des Norwegers steht, um es noch zu erwähnen, neben dem blauen
Haus.
Und nun die Fragen: Wer trinkt Wasser? Vor allem aber: Wem gehört das Zebra?
Abbildung 3.1: Das Zebra Puzzle.
139
loesung(X) :strasse(X),
a1(X), a2(X),
a8(X), a9(X),
b1(X), b2(X).
a3(X), a4(X), a5(X), a6(X), a7(X),
a10(X), a11(X), a12(X), a13(X), a14(X),
strasse([[_,_,_,_,_],
[_,_,_,_,_],
[_,_,_,_,_],
[_,_,_,_,_],
[_,_,_,_,_]]).
a1(X) :- member([englaender,rot|_],X).
a2(X) :- member([spanier,_,hund|_],X).
a3(X) :- member([_,gruen,_,bier|_],X).
a4(X) :- member([russe,_,_,tee|_],X).
a5(X) :- linksvon([_,gruen|_],[_,weiss|_],X).
a6(X) :- member([_,_,bienen,_,reval],X).
a7(X) :- member([_,gelb,_,_,chesterfield],X).
a8([_,_,[_,_,_,wodka|_]|_]).
a9([[norweger|_]|_]).
a10(X) :- nachbar([_,_,_,_,players],[_,_,katze|_],X).
a11(X) :- nachbar([_,_,_,_,chesterfield],[_,_,pferd|_],X).
a12(X) :- member([_,_,_,whisky,zigarren],X).
a13(X) :- member([japaner,_,_,_,camel],X).
a14(X) :- nachbar([norweger|_],[_,blau|_],X).
b1(X) :- member([_,_,zebra|_],X).
b2(X) :- member([_,_,_,wasser|_],X).
member(X,[X|_]).
member(X,[_|L]) :- member(X,L).
linksvon(X,Y,[X,Y|_]).
linksvon(X,Y,[_|L]) :- linksvon(X,Y,L).
nachbar(X,Y,L) :- linksvon(X,Y,L).
nachbar(X,Y,L) :- linksvon(Y,X,L).
Abbildung 3.2: Die Lösung in Prolog.
140
KAPITEL 3. LOGIKPROGRAMMIERUNG
Wenn man den Prolog Interpreter mittels dem Semikolon nach weiteren Lösungen fragt,
erhält man die Antwort ‘no’. Das Puzzle hat somit genau eine Lösung.
3.1
Datalog
Datalog ist eine Teilsprache von Prolog, in der es nur Konstanten und Variablen gibt und
keine zusammengesetzten Terme wie etwa Listen. Es besteht ein Zusammenhang zwischen
Datalog und relationalen Datenbanken. Ein Datalog-Programm ist durch die folgende
Grammatik gegeben (dabei steht {. . .} für beliebig viele (auch Null) Wiederholungen der
Symbole innerhalb der geschweiften Klammern):
Program
= {Clause}
Clause
= Fact | Rule
Fact
= Atom ‘.’
Rule
= Atom ‘:-’ AtomList ‘.’
AtomList = Atom {‘,’ Atom}
Goal
= ‘?-’ AtomList ‘.’
Atom
= Predicate ‘(’ TermList ‘)’
TermList = Term {‘,’ Term}
Term
= Variable | Constant
Ein Datalog-Programm besteht aus einer endlichen Folge von Klauseln. Eine Klausel ist
ein Faktum oder eine Regel. Ein Faktum hat die folgende Form:
A.
Die Bedeutung ist: “A ist wahr.” Eine Regel hat die folgende Form:
A :- B1 , . . . , Bn .
Die Bedeutung ist: “Falls B1 und . . . und Bn wahr sind, so ist A wahr.” Das Atom A
ist der Kopf der Klausel und B1 , . . . , Bn ist der Rumpf der Klausel. Man kann Fakten
auffassen als Regeln mit leerem Rumpf. Das Symbol ‘:-’ wird gelesen als “falls”. Ein Ziel
hat die folgende Form:
?- B1 , . . . , Bn .
Die Bedeutung ist: “Sind B1 und . . . und Bn wahr?” Ein Atom hat die folgende Gestalt:
R(t1 , . . . , tn )
Dabei ist R ein Prädikatssymbol und sind t1 , . . . , tn Terme. Die Bedeutung ist: “Das
Prädikat R trifft zu auf t1 , . . . , tn .” Beispiel eines Datalog-Programms:
r(c0,c1).
r(c1,c2).
q(X,Y) :- r(X,Y).
q(X,Z) :- r(X,Y), r(Y,Z).
3.1. DATALOG
141
Die Bedeutung der letzten Klausel ist:
∀x ∀y ∀z (r(x, y) ∧ r(y, z) → q(x, z))
Logisch aequivalent dazu ist:
∀x ∀z (∃y (r(x, y) ∧ r(y, z)) → q(x, z))
Ein Term ist eine Variable oder eine Konstante. Eine Variable beginnt mit einem Grossbuchstaben, während Konstanten und Prädikate mit einem Kleinbuchstaben beginnen.
Variable
= UpperCaseLetter {AlphaNumericLetter}
UpperCaseLetter
= ‘A’ | ‘B’ | · · · | ‘Z’ | ‘ ’
LowerCaseLetter
= ‘a’ | ‘b’ | · · · | ‘z’
Digit
= ‘0’ | ‘1’ | · · · | ‘9’
AlphaNumericLetter = UpperCaseLetter | LowerCaseLetter | Digit
Beispiele von Variablen sind:
X
Y
X
L1
L2
Head
Last Name
Die Variable ‘ ’ heisst anonyme Variable. Verschiedene Vorkommen der anonymen Variable in einer Klausel werden als verschiedene Variablen betrachtet. Falls eine Variable
nur einmal in einer Klausel vorkommt, dann nennt man sie eine Einervariable (Singleton
Variable). Falls eine Einervariable nicht anonym ist, dann erzeugen die meisten Compiler eine Fehlermeldung. Prädikate und Konstanten müssen mit einem Kleinbuchstaben
beginnen:
Predicate
= Name
Constant
= Name | Integer | FloatNumber
Name
= Identifier | SingleQuotedName
Identifier
= LowerCaseLetter {AlphaNumericLetter}
SingleQuotedName = ‘’’ {CharacterNotSingleQuote} ‘’’
Integer und Fliesskommazahlen haben die übliche Syntax. Eine beliebige Folge von Zeichen kann in einfache Hochkommas eingeschlossen werden und gilt dann als Name. Beispiele von solchen Namen sind:
’Robert F. Stärk’
’test.pl’
Die Hochkommas werden nach dem Parsen entfernt. Der Backslash ‘\’ hat eine spezielle
Bedeutung in solchen Namen. Kommentare haben die folgende Form:
/* This is a comment on several
lines (not nested) */
% This is a single line comment.
Datalog-Programme werden üblicherweise in Files mit dem Suffix ‘.pl’ geschrieben.
142
KAPITEL 3. LOGIKPROGRAMMIERUNG
Takes
Teaches
Professor
Course
Student
Course
Grade
B. Meyer
Programmierung
S. Nanchen Programmierung 5.5
R. Stärk
Logik
S. Nanchen Logik
G. Mislin
Analysis I
N. Fruja
Programmierung 4.5
E. Trubowitz
Analysis I
N. Fruja
Logik
5.0
M. Gutknecht
Lineare Algebra
N. Fruja
Analysis I
6.0
W. Gander
Lineare Algebra
M. Schweizer
Wahrscheinlichkeit
4.5
Abbildung 3.3: Zwei Relationen einer relationalen Datenbank.
3.1.1
Datalog und relationale Datenbanken
Das Wort “Data” in Datalog kommt vom Zusammenhang zu Abfragesprachen für relationale Datenbanken. In einer relationalen Datenbank werden die Daten in Tabellen
(auch Relationen genannt) abgespeichert. Abb. 3.3 enthält zwei Relationen. Die erste mit
dem Namen Teaches gibt die Vorlesungen an, die ein Professor hält. Die zweite mit dem
Namen Takes gibt die Vorlesungen an, die ein Student besucht hat, und die Note der
Prüfung. Die Überschriften in den Kolonnen (Professor, Course, . . . ) sind die Attribute
der Relation. Eine einzelne Zeile in einer Tabelle nennt man Tupel. Eine Relation besteht
also aus einer Menge von Tupeln. Die Reihenfolge der Tupel ist unwichtig.
Die Tupel einer Relation kann man auch durch eine Menge von Datalog-Fakten darstellen. Der Name einer Relation wird als Prädikatssymbol gebraucht. Die Namen der
Kolonnen (die Attribute) gehen verloren. Entscheidend ist alleine noch die Position eines
Terms in einem Prädikat. Die Relationen Teaches und Takes aus Abb. 3.3 könnnen wie
folgt in Datalog geschrieben werden:
teaches(’B.
teaches(’R.
teaches(’G.
teaches(’E.
teaches(’M.
teaches(’W.
teaches(’M.
takes(’S.
takes(’S.
takes(’N.
takes(’N.
takes(’N.
Meyer’, ’Programmierung’).
Staerk’, ’Logik’).
Mislin’, ’Analysis I’).
Trubowitz’, ’Analysis I’).
Gutknecht’, ’Lineare Algebra’).
Gander’, ’Lineare Algebra’).
Schweizer’, ’Wahrscheinlichkeit’).
Nanchen’, ’Programmierung’, 5.5).
Nanchen’, ’Logik’, 4.5).
Fruja’, ’Programmierung’, 4.5).
Fruja’, ’Logik’, 5.0).
Fruja’, ’Analysis I’, 6.0).
3.1. DATALOG
143
Die Strings müssen in Hochkommas eingeschlossen werden, damit sie als Konstanten und
nicht als Variablen aufgefasst werden.
Nehmen wir an, dass die Fakten in einem File ‘data.pl’ stehen. Das File wird wie folgt
in Prolog eingelesen:
unix> gprolog
GNU Prolog 1.2.1
?- consult(’data.pl’).
Eine andere Methode zum Einlesen geht so:
unix> gprolog
GNU Prolog 1.2.1
?- [data].
Danach können wir Fragen stellen. Zunächst fragen wir nach den Vorlesungen, die von
’R. Staerk’ gehalten werden. Mit dem Semikolon ‘;’ erhalten wir weitere Lösungen oder
die Antwort ‘no’, wenn es keine Lösungen mehr gibt.
?- teaches(’R. Staerk’, X).
X = ’Logik’ ;
no
Dann fragen wir nach den Vorlesungen, die ’N. Fruja’ besucht hat:
?- takes(’N. Fruja’, X, Y).
X = ’Programmierung’
Y = 4.5 ;
X = ’Logik’
Y = 5.0 ;
X = ’Analysis I’
Y = 6.0 ;
no
Wenn man nur an den Vorlesungen interessiert ist und nicht an den Noten, benutzt man
einfach die anonyme Variable:
?- takes(’N. Fruja’, X, _).
X = ’Programmierung’ ;
X = ’Logik’ ;
144
KAPITEL 3. LOGIKPROGRAMMIERUNG
X = ’Analysis I’ ;
no
Die beiden Relationen können auch kombiniert werden. Um die Studenten mit den Professoren zu verbinden, stellen wir die folgende Frage:
?- teaches(Professor, Course), takes(Student, Course, Grade).
Course = ’Programmierung’
Grade = 5.5
Professor = ’B. Meyer’
Student = ’S. Nanchen’ ;
Course = ’Programmierung’
Grade = 4.5
Professor = ’B. Meyer’
Student = ’N. Fruja’ ;
Course = ’Logik’
Grade = 4.5
Professor = ’R. Staerk’
Student = ’S. Nanchen’ ;
Course = ’Logik’
Grade = 5.0
Professor = ’R. Staerk’
Student = ’N. Fruja’ ;
Course = ’Analysis I’
Grade = 6.0
Professor = ’G. Mislin’
Student = ’N. Fruja’ ;
Course = ’Analysis I’
Grade = 6.0
Professor = ’E. Trubowitz’
Student = ’N. Fruja’ ;
no
Bei den relationalen Datenbanken spricht man vom Natural Join von Relationen (geschrieben: Teaches ./ Takes). Es werden alle Tupel der beiden Relationen, die auf gemeinsamen
Attributen übereinstimmen, kombiniert.
In Datalog kann der Join von zwei Relationen durch eine Regel ausgedrückt werden:
3.1. DATALOG
145
join(Professor, Course, Student, Grade) :teaches(Professor, Course),
takes(Student, Course, Grade).
Mit der folgenden Regel definieren wir die Studenten eines Professors:
student_of(Professor, Student) :teaches(Professor, Course),
takes(Student, Course, _).
Wir fügen die Regel zum Datalog-Programm ‘data.pl’ hinzu und fragen:
?- student_of(’R. Staerk’, X).
X = ’S. Nanchen’ ;
X = ’N. Fruja’ ;
no
Mit einem weiteren Prädikat definieren wir, was es heisst, dass ein Student eine Prüfung
zu einer Vorlesung bestanden hat:
passes(Student, Course) :takes(Student, Course, Grade),
4.0 =< Grade.
Dabei benutzen wir das eingebaute Kleiner-Oder-Gleich-Prädikat ‘=<’.
?- passes(X, ’Programmierung’).
X = ’S. Nanchen’ ;
X = ’N. Fruja’ ;
no
Die Beispiele zeigen, dass Datalog als Abfragesprache für relationale Datenbanken benutzt
werden kann.
3.1.2
Der transitive Abschluss einer Relation in Datalog
Betrachten wir den gerichteten azyklischen Graphen in Abb. 3.4. In Datalog kann der
Graph durch die folgenden Fakten dargestellt werden:
arrow(1,2).
arrow(1,3).
arrow(2,4).
arrow(2,5).
arrow(3,4).
arrow(4,7).
arrow(5,6).
arrow(6,7).
146
KAPITEL 3. LOGIKPROGRAMMIERUNG
1
3
2
5
4
6
7
Abbildung 3.4: Ein gerichteter azyklischer Graph.
Die folgenden zwei Regeln definieren den transitiven Abschluss (Transitive Closure) des
Graphen:
tc(X,Y) :- arrow(X,Y).
tc(X,Z) :- arrow(X,Y), tc(Y,Z).
Das Prädikat tc(x, y) bedeutet, dass es eine endliche (nicht leere) Folge von Pfeilen vom
Knoten x zum Knoten y gibt. Die erste Regel sagt:
Falls es einen Pfeil von x nach y gibt, dann gibt es eine Folge von Pfeilen von x
nach y.
Die zweite Regel in der Definition ist rekursiv. Sie sagt:
Falls es einen Knoten y gibt, so dass es einen Pfeil von x nach y gibt und
eine Folge von Pfeilen von y nach z, dann gibt es eine Folge von Pfeilen von x
nach z.
Wir können nun fragen, ob der Knoten 6 vom Knoten 3 aus erreichbar ist:
?- tc(3,6).
no
Die Antwort ist ‘nein’. Auf die Frage, ob der Knoten 7 vom Knoten 3 aus erreichbar ist,
erhalten wir die Antwort ‘ja’.
?- tc(3,7).
yes
Mit der folgenden Frage erhalten wir alle Knoten, die vom Knoten 5 aus erreichbar sind:
3.1. DATALOG
147
?- tc(5,X).
X = 6 ;
X = 7 ;
no
Mit der folgenden Frage erhalten wir alle Knoten, von denen aus der Knoten 5 erreichbar
ist:
?- tc(X,5).
X = 2 ;
X = 1 ;
no
Mit der folgenden Frage können wir den ganzen transitiven Abschluss des Graphen aufzählen:
?- tc(X,Y).
X = 1, Y = 2 ;
X = 1, Y = 3 ;
X = 2, Y = 4 ;
X = 2, Y = 5 ;
X = 3, Y = 4 ;
X = 4, Y = 7 ;
X = 5, Y = 6 ;
X = 6, Y = 7 ;
X = 1, Y = 4 ;
X = 1, Y = 5 ;
X = 1, Y = 7 ;
X = 1, Y = 6 ;
148
KAPITEL 3. LOGIKPROGRAMMIERUNG
X = 1, Y = 7 ;
X = 1, Y = 4 ;
X = 1, Y = 7 ;
X = 2, Y = 7 ;
X = 2, Y = 6 ;
X = 2, Y = 7 ;
X = 3, Y = 7 ;
X = 5, Y = 7 ;
no
Die Reihenfolge der beiden Klauseln in der Definition des transitiven Abschlusses spielt
eine Rolle. Auch die Reihenfolge der beiden Atome in der zweiten Regel ist wichtig.
Hier sind noch weitere Definitionen des transitiven Abschlusses, die von der deklarativen
Bedeutung her alle gleichwertig sind. Prozedural gesehen sind die Prädikate aber nicht
aequivalent:
tc2(X,Y) :- arrow(X,Y).
tc2(X,Z) :- tc2(X,Y), arrow(Y,Z).
tc3(X,Z) :- arrow(X,Y), tc3(Y,Z).
tc3(X,Y) :- arrow(X,Y).
tc4(X,Z) :- tc4(X,Y), arrow(Y,Z).
tc4(X,Y) :- arrow(X,Y).
Der Grund ist, dass Datalog (aufgefasst als Teilsprache von Prolog) bei der Suche nach
Lösungen die einzelnen Klauseln des Programms immer in der Reihenfolge versucht, wie
sie im Programm hingeschrieben sind. Die folgende Suchstrategie wird angewandt:
Ein Ziel wird von links nach rechts abgearbeitet.
Das Atom ganz links wird zuerst gewählt.
Die Klauseln im Programm werden der Reihe nach versucht.
Falls der Kopf der Klausel auf das Atom passt, wird das Atom durch den Rumpf
der Klausel ersetzt.
Falls der Rumpf der Klausel leer ist (bei einem Faktum), wird das Atom gestrichen.
3.2. UNIFIKATION
149
Falls keine Klausel auf das Atom passt, kommt es zum Back-Tracking. Die nächste
Möglichkeit, die noch verbleibt, wird versucht.
Falls das Ziel leer wird, kann die gefundene Lösung ausgegeben werden.
Falls keine weiteren Möglichkeiten mehr übrigbleiben, dann gibt es keine Lösungen
mehr und die Antwort ‘no’ wird ausgegeben.
Bei rekursiv definierten Prädikaten kann es vorkommen, dass eine Frage nicht terminiert:
?- tc2(3,6).
Fatal Error: local stack overflow
Aus Erfahrung kann man sagen:
Die Reihenfolge der Klauseln in einem Programm ist wichtig für die Reihenfolge der
Lösungen.
Die Reihenfolge der Atome im Rumpf der Klauseln ist wichtig für die Termination
der Abfragen.
Beispiel: Das Prädikat tc3 erhält man durch Vertauschung der beiden Klauseln von tc.
Das Prädikat tc3 terminiert bei allen Abfragen, die wir oben mit dem Prätikat tc durchgeführt haben. Die Reihenfolg der Antworten jedoch ist anders.
Im Folgenden wollen wir den Suchmechanismus von Datalog genauer untersuchen.
3.2
Unifikation
Wir behandeln bereits den allgemeinen Fall, wo auch Terme mit Funktionen zugelassen
sind und nicht nur Variablen und Konstanten.
Term
= Variable | Constant | Function ‘(’ TermList ‘)’
TermList = Term {‘,’ Term}
Function = Name
Unter Unifikation versteht man das syntaktische Lösen von Gleichungen zwischen Termen. Zwei Terme sind unifizierbar, falls es möglich ist, sie durch Substitution von Termen
für Variablen gleich zu machen. Ein Spezialfall der Unifikation ist das Matching. Die
Unifikation ist der Motor der Logikprogrammierung. Unifikation wird benutzt um Parameter zu übergeben, um neue Daten zu konstruieren und um Komponenten von Daten
zu selektieren.
Definition 3.2.1 (Substitution) Eine Substitution ist eine Funktion σ von der Menge
der Variablen in die Menge der Terme mit der Einschränkung, dass nur endlich viele
Variablen nicht auf sich selbst abgebildet werden, d.h. der Träger spt(σ) := {x | σ(x) 6= x}
muss endlich sein.
150
KAPITEL 3. LOGIKPROGRAMMIERUNG
Substitutionen werden mit kleinen griechischen Buchstaben θ, ρ, σ, τ bezeichnet.
Im Speziellen bezeichnet ε die Identitätssubstitution mit spt(ε) = ∅.
Falls spt(σ) = {x1 , . . . , xn } und ti = σ(xi ) für i ∈ [1, n], dann schreibt man σ oft so:
t1 · · · tn
x1 · · · xn
oder {t1 /x1 , . . . , tn /xn }.
Die Ausdrücke ti /xi werden Bindungen genannt und es gilt ti 6= xi . Zwei Substitutionen
σ und τ sind gleich genau dann, wenn sie dieselbe Menge von Bindungen haben.
Definition 3.2.2 (Anwendung, Instanz) Sei t ein Term und σ eine Substitution.
Dann bezeichnet tσ den Term, den man erhält, wenn man in t simultan die Variablen x
durch σ(x) ersetzt. Es gilt:
xσ = σ(x)
cσ = c
f (t1 , . . . , tn )σ = f (t1 σ, . . . , tn σ)
Der Term tσ wird eine Instanz von t genannt. Man sagt auch, dass σ angewandt wird
auf t.
Beispiel 3.2.3 f (x, y){g(y)/x, c/y} = f (g(y), c).
Definition 3.2.4 (Komposition von Substitutionen) Die Komposition στ von zwei
Substitutionen σ und τ ist die Funktion x 7→ σ(x)τ .
Es gilt x(στ ) = (xσ)τ für alle Variablen x. Der Träger von στ ist endlich, da er enthalten
ist in spt(σ) ∪ spt(τ ).
Beispiel 3.2.5 {f (y)/x, g(z)/y}{c/x, x/y, h(x)/z} = {f (x)/x, g(h(x))/y, h(x)/z}.
Nun zeigen wir, dass es dasselbe ist, ob man die Komposition στ auf einen Term t anwendet oder zuerst die Substitution σ und danach die Substitution τ . Daraus folgt, dass
die Komposition von Substitutionen assoziativ ist und ε das Neutralelement ist.
Lemma 3.2.6 Seien ρ, σ und τ Substitutionen. Dann gilt:
(a) (tσ)τ = t(στ ) für alle Terme t.
(b) (ρσ)τ = ρ(στ ).
(c) εσ = σε = σ.
3.2. UNIFIKATION
151
Beweis. (a) Der Beweis ist mit Induktion nach dem Aufbau des Termes t.
Fall 1: t = x.
Es gilt (xσ)τ = x(στ ) nach der Definition von στ .
Fall 2: t = c.
(cσ)τ = c = c(στ ).
Fall 3: t = f (s1 , . . . , sn ).
Nach der Induktionsvoraussetzung gilt (si σ)τ = si (στ ) für alle i ∈ [1, n]. Daraus ergibt
sich:
(tσ)τ =
=
=
=
=
(f (s1 , . . . , sn )σ)τ
f (s1 σ, . . . , sn σ)τ
f ((s1 σ)τ, . . . , (sn σ)τ )
f (s1 (στ ), . . . , sn (στ ))
f (s1 , . . . , sn )(στ ) = t(στ ).
(b) Sei x eine Variable. Dann gilt unter Benützung von (a):
(a)
x((ρσ)τ ) = (x(ρσ))τ = ((xρ)σ)τ = (xρ)(στ ) = x(ρ(στ )).
Da x beliebig war, folgt (ρσ)τ = ρ(στ ).
(c) ist klar. 2
Da die Komposition von Substitutionen assoziativ ist, werden wir im folgenden für die
Komposition (θ1 θ2 ) · · · θn einfach θ1 θ2 · · · θn schreiben.
Definition 3.2.7 (Unifikator) Eine Substitution θ heisst Unifikator von s und t, falls
sθ = tθ. Zwei Terme s und t heissen unifizierbar, falls sie einen Unifikator besitzen.
Beispiel 3.2.8 Die Substitution {g(c)/x, c/y, c/z} ist ein Unifikator von f (x, x) und
f (g(y), g(z)).
Definition 3.2.9 (Allgemeinster Unifikator) Eine Substitution θ heisst allgemeinster
Unifikator von s und t, falls die folgenden zwei Bedingungen erfüllt sind:
Die Substitution θ ist ein Unifikator von s und t.
Für jeden Unifikator σ von s und t gibt es eine Substitution τ , so dass θτ = σ.
Beispiel 3.2.10 Die Substitution {g(y)/x, y/z} ist ein allgemeinster Unifikator der Terme f (x, x) und f (g(y), g(z)). Es gilt {g(y)/x, y/z}{c/y} = {g(c)/x, c/y, c/z}.
Der Unifikationsalgorithmus von J. A. Robinson (1965) entscheidet, ob zwei Terme
unifizierbar sind. Falls sie unifizierbar sind, berechnet er einen allgemeinsten Unifikator.
Es gilt folgendes:
152
KAPITEL 3. LOGIKPROGRAMMIERUNG
Es ist entscheidbar, ob zwei Terme unifizierbar sind.
Falls zwei Terme einen Unifikator besitzen, dann haben sie auch einen allgemeinsten
Unifikator.
Man kann allgemeinste Unifikatoren berechnen.
Unifikationsalgorithmus
Eingabe: Zwei Terme s und t.
U1: Setze θ0 := ε und k := 0. Gehe zu U2.
U2: Falls sθk = tθk , dann stoppe mit Resultat θk . Sonst gehe zu U3.
U3: Gehe von links her durch sθk und tθk . Seien a und b die Teilterme, die an der
ersten Position stehen, wo sich sθk und tθk unterscheiden.
Falls b eine Variable ist und a keine, dann vertausche a und b.
Falls a eine Variable ist und a nicht in b vorkommt, dann setze θk+1 := θk {b/a},
addiere 1 zu k und gehe zu U2.
Sonst stoppe mit Antwort “nein”.
Das Resultat des Unifikationsalgorithmus ist entweder eine Substitution oder die Meldung “nein”.
Beispiel 3.2.11 Sei s := f (x, x) und t := f (g(y), g(z)). Dann erhalten wir:
sθk
tθk
a b
θk+1
f (g(y), g(z)) x g(y) {g(y)/x}
k = 0 f (x, x)
k = 1 f (g(y), g(y)) f (g(y), g(z)) y z
{g(y)/x}{z/y} = {g(z)/x, z/y}
k = 2 f (g(z), g(z)) f (g(z), g(z))
Die Terme s und t sind also unifizierbar und Satz 3.2.14 sagt, dass {g(z)/x, z/y} ein
allgemeinster Unifikator ist.
Beispiel 3.2.12 Sei s := f (x, h(y)) und t := f (g(y), x). Dann erhalten wir:
sθk
k = 0 f (x, h(y))
tθk
a
b
θk+1
f (g(y), x)
x
g(y) {g(y)/x}
k = 1 f (g(y), h(y)) f (g(y), g(y)) h(y) g(y)
Der Unifikationsalgorithmus stoppt mit der Antwort “nein”, da die beiden Funktionen
g und h verschieden sind. Satz 3.2.14 sagt, dass die beiden Terme nicht unifizierbar sind.
3.2. UNIFIKATION
153
Beispiel 3.2.13 Sei s := f (x, y) und t := f (g(y), g(x)). Dann erhalten wir:
sθk
k = 0 f (x, y)
tθk
a b
θk+1
f (g(y), g(x))
x g(y)
{g(y)/x}
k = 1 f (g(y), y) f (g(y), g(g(y))) y g(g(y))
Der Unifikationsalgorithmus stoppt mit der Antwort “nein”, da die Variable y im Term
g(g(y)) vorkommt. Der folgende Satz sagt, dass die beiden Terme nicht unifizierbar sind.
Satz 3.2.14 (Korrektheit des Unifikationsalgorithmus)
(a) Der Unifikationsalgorithmus terminiert immer.
(b) Falls s und t unifizierbar sind, dann berechnet der Unifikationsalgorithmus einen
allgemeinsten Unifikator von s und t.
(c) Falls s und t nicht unifizierbar sind, dann berechnet der Unifikationsalgorithmus die
Antwort “nein”.
Beweis. (a) Sei Vk die Menge der Variablen, die in sθk oder tθk vorkommen.
Falls der Algorithmus U3 durchläuft, dann ist Vk+1 eine echte Teilmenge von Vk , da im
Schritt U3 eine Variable eliminiert wird.
Also kann der Schritt U3 nur endlich viele Male durchlaufen werden.
(b) Wir zeigen zuerst die folgende Eigenschaft:
(∗) Falls σ ein Unifikator von s und t ist, dann gilt:
(i) Der Algorithmus stoppt nicht in U3 mit Antwort “nein”.
(ii) In U2 gilt jeweils θk σ = σ.
Da θ0 = ε, gilt θ0 σ = σ.
Nehmen wir an, wir sind bei U2 und haben θk σ = σ.
Falls sθk = tθk , so stoppt der Algorithmus in U2.
Falls sθk 6= tθk , so geht der Algorithmus zu U3.
Seien a und b die Differenzterme von sθk und tθk .
Wir haben sθk σ = sσ = tσ = tθk σ. Daraus folgt, dass aσ = bσ.
Fall 1: a ist eine Variable.
Da aσ = bσ und a 6= b, kann a nicht in b vorkommen.
Damit ist θk+1 = θk {b/a} und der Algorithmus stoppt nicht in U3 mit “nein”.
Da aσ = bσ, gilt {b/a}σ = σ.
Daraus folgt, dass θk+1 σ = (θk {b/a})σ = θk ({b/a}σ) = θk σ = σ.
Fall 2: b ist eine Variable.
Dieser Fall geht wie der erste Fall. Die Rollen von a und b sind vertauscht.
154
KAPITEL 3. LOGIKPROGRAMMIERUNG
Fall 3: Weder a noch b ist eine Variable:
Da aσ = bσ, müssen a und b mit demselben Symbol beginnen. Dies widerspricht aber der
Definition von a und b, da a und b die ersten Teilterme sind, an denen sich sθk und tθk
unterscheiden, wenn man von links her durchgeht.
Also tritt dieser Fall gar nicht ein. Somit ist (∗) bewiesen.
Seien nun s und t unifizierbar. Aus (a) und (∗) folgt, dass der Algorithmus nach k Schritten
in U2 terminiert. Das Resultat θk ist ein Unifikator von s und t.
Sei σ ein weiterer Unifikator von s und t. Aus (∗) folgt, dass θk σ = σ. Somit ist θk ein
allgemeinster Unifikator.
(c) Seien s und t nicht unifizierbar. Aus (a) folgt, dass der Algorithmus terminiert. Er
kann aber nicht in U2 terminieren, da sonst s und t unifizierbar wären. Also terminiert
er in U3 mit Antwort “nein”. 2
Definition 3.2.15 (MGU) Falls zwei Terme s und t unifizierbar sind, dann bezeichnen
wir mit mgu(s, t) den vom Unifikationsalgorithmus berechneten allgemeinsten Unifikator
von s und t (most general unifier ).
Für Atome A und B definieren wir die Begriffe, σ ist ein Unifikator von A und B, A und B
sind unifizierbar und σ = mgu(A, B) wie die entsprechenden Begriffe für Terme. Beispielsweise ist σ ein Unifikator von A und B, falls Aσ = Bσ.
lässt im Schritt U3 den sogenannten Occurs Check weg. Prolog überprüft nicht,
∀∃ Prolog
ob die Variable a in b vorkommt. Dadurch wird der Prolog-Unifikationsalgorithmus
inkorrekt. Die Terme x und f (x), zum Beispiel, werden in Prolog unifiziert, obwohl sie nicht
unifizierbar sind. Es ist Aufgabe des Benutzers sicherzustellen, dass so ein Fall nie eintritt. ISO
Standard Prolog hat ein zweistelliges Prädikat unify with occurs check/2, das den Occurs
Check durchführt. Des weiteren kann das Weglassen des Occurs Check in Prolog dazu führen,
dass die Unifikation nicht mehr terminiert. Die folgende Frage führt zu unerwarteten Ergebnissen
in manchen Implementationen von Prolog (Stack Overflow, Segmentation Fault):
?- X = f(X,X), Y = f(Y,Y), X = Y.
Der Grund ist, dass ohne den Occurs Check im Speicher zyklische Terme entstehen.
3.3
SLD-Resolution
SLD-Resolution ist das Verfahren, das benutzt wird um Antworten auf Ziele zu berechnen. Die Antworten sind korrekt in dem Sinne, dass sie logisch aus dem Programm folgen. Umgekehrt kann jede korrekte Antwort, die aus dem Programm logisch folgt, auch
mit SLD-Resolution berechnet werden. SLD-Resolution steht für Linear Resolution for
Definite Clauses with Selection Function.
Wir benutzen die folgenden Mitteilungszeichen:
3.3. SLD-RESOLUTION
155
A, B, C . . . . . . . . . . . . . . . . . . für Atome;
Γ, ∆, Λ, Π . . . . . . . . . . . . . . . . für Ziele (endliche Folgen von Atomen);
θ, ρ, σ, τ, . . . . . . . . . . . . . . . . . für Substitutionen;
K . . . . . . . . . . . . . . . . . . . . . . . für Klauseln (Fakten oder Regeln);
P . . . . . . . . . . . . . . . . . . . . . . . . für Logikprogramme (endliche Mengen von Klauseln).
Fakten werden im Folgenden aufgefasst als Regeln mit leerem Rumpf. Klauseln werden
als Implikationen interpretiert. Falls K die Klausel A :- B1 , . . . , Bm ist und {x1 , . . . , xn }
die Menge der Variablen, die in K vorkommen, dann bezeichnen wir mit K die folgende
Formel:
∀x1 . . . ∀xn (B1 ∧ . . . ∧ Bm → A)
Beispiel 3.3.1 Sei K die folgende Klausel:
tc(x, z) :- arrow(x, y), tc(y, z).
Dann ist K die folgende Formel:
∀x ∀y ∀z (arrow(x, y) ∧ tc(y, z) → tc(x, z))
Diese Formel ist logisch aequivalent zu:
∀x ∀z (∃y (arrow(x, y) ∧ tc(y, z)) → tc(x, z))
An diesem Beispiel sieht man, dass Variablen, die nur im Rumpf einer Klausel aber nicht
im Kopf vorkommen, als existentiell quantifiziert aufzufassen sind.
Definition 3.3.2 (Variante) Eine Variante einer Klausel ist eine Kopie der Klausel mit
neuen Variablen.
Die einfachste Methode zur Erzeugung von Varianten ist die Variablen der Klausel mit
einem Index zu versehen. Beispiel:
tc(x17 , z17 ) :- arrow(x17 , y17 ), tc(y17 , z17 ).
Der Index wird erhöht jedesmal, wenn eine neue Variante gebraucht wird. Damit wird
sichergestellt, dass die Variablen wirklich neu sind und sonst nirgends vorkommen.
Definition 3.3.3 (Logikprogramm) Ein Logikprogramm P ist eine endliche Menge
von Klauseln. Mit P bezeichnen wir die Theorie {K | K ∈ P }.
Logikprogramme, wie wir sie hier definiert haben, werden oft auch definite Logikprogramme oder definite Hornklausel Programme genannt, da in den Rümpfen der Klauseln nur
Folgen von Atomen zugelassen sind und keine Negation.
Definition 3.3.4 (Ziel) Ein Ziel ist eine endliche Folge von Atomen:
A1 , . . . , A n
Das leere Ziel (die leere Folge) wird mit 2 bezeichnet.
156
KAPITEL 3. LOGIKPROGRAMMIERUNG
Da der Rumpf einer Klausel ein Ziel ist, können Klauseln in der allgemeinen Form als
A :- Γ geschrieben werden.
Ziele werden als V
Konjunktionen
interpretiert. Falls Γ das Ziel A1 , . . . , An ist, dann beV
zeichnen wir mit
Γ die folgende Formel:
A1 ∧ . . . ∧ A n
Für das leere Ziel 2 ist
VV
2 die Konstante >.
Definition 3.3.5 (SLD-Herleitung) Eine partielle SLD-Herleitung eines Zieles Γ aus
einem Programm P besteht aus
einer Folge Γ0 , Γ1 , . . . , Γn von Zielen,
einer Folge K1 , . . . , Kn von Varianten von Klauseln aus P ,
einer Folge θ1 , . . . , θn von Substitutionen,
so dass Γ0 = Γ und für alle i < n gilt:
Γi ist von der Form (∆i , Ai , Λi ),
Ki+1 ist von der Form Bi+1 :- Πi+1 ,
Ki+1 hat keine Variablen gemeinsam mit Γi oder Γ0 θ1 · · · θi ,
θi+1 = mgu(Ai , Bi+1 ),
Γi+1 = (∆i , Πi+1 , Λi )θi+1 .
Die folgenden Begriffe werden verwendet:
Die Zahl n + 1 wird die Länge der Herleitung genannt.
Falls Γn das leere Ziel 2 ist, spricht man von einer erfolgreichen SLD-Herleitung
von Γ bez. P und nennt die Substitution θ1 · · · θn eingeschränkt auf die Variablen
von Γ die berechnete Antwort für Γ.
Der Übergang von Γi zu Γi+1 wird Resolutionsschritt genannt.
Die Klausel Ki heisst i-te Inputklausel und das Atom Ai das ausgewählte Atom.
Das Ziel Γi+1 ist eine Resolvente von Γi und Ki+1 .
Was geschieht in einem Resolutionsschritt von Γi nach Γi+1 ?
Zuerst wird im Ziel Γi ein Atom Ai ausgewählt.
Danach wird eine Klausel aus P gewählt und geeignet umbenannt.
3.3. SLD-RESOLUTION
157
Falls der Kopf der Klausel mit dem ausgewählten Atom Ai unifizierbar ist, wird Ai
durch den Rumpf der Klausel ersetzt und der allgemeinste Unifikator wird auf das
neue Ziel angewandt.
In einem Bild sieht das folgendermassen aus:
Γ0
K1 , θ 1
↓
.
Γ1
K2 , θ 2
↓
.
..
.
Γ2
..
.
Γn−1
↓
Kn , θ n
.
Γn
Bei einer erfolgreichen SLD-Herleitung ist das letzte Ziel Γn das leere Ziel 2. Das bedeutet,
dass in diesem Falle das Ziel Γn−1 aus nur einem einzigen Atom besteht und dass die letzte
Inputklausel Kn ein Faktum ist, d.h. einen leeren Rumpf besitzt.
Definition 3.3.6 (Auswahlregel) Eine Auswahlregel ist eine Funktion R, die zu einer
gegebenen partiellen SLD-Herleitung hΓ0 , Γ1 , . . . , Γi i ein Atom in Γi auswählt, sofern Γi
nicht das leere Ziel ist.
Definition 3.3.7 Wir nennen hΓ0 , Γ1 , . . . , Γn i, hK1 , . . . , Kn i, hθ1 , . . . , θn i eine SLD-Herleitung gemäss R, falls es eine partielle SLD-Herleitung ist, in der die Atome gemäss der
Auswahlregel R ausgewählt werden.
Die Auswahlregel von Prolog wählt immer das Atom ganz links in einem Ziel. Die Auswahlregel von Prolog hängt also nicht von der ganzen bisherigen SLD-Herleitung ab sondern nur von dem aktuellen Ziel.
Die SLD-Resolution ist korrekt und vollständig. Korrektheit bedeutet, dass alles, was mit
SLD-Resolution berechnet wird, auch logisch aus dem Programm folgt.
Satz 3.3.8 (Korrektheit der SLD-Resolution)
V
V
Falls θ eine mit SLD-Resolution berechnete Antwort ist für Γ aus P , dann gilt P |=
Γθ.
Vollständigkeit bedeutet, dass alle Antworten, die logisch aus dem Programm folgen, auch
mit SLD-Resolution berechnet werden können. Da bei der SLD-Resolution allgemeinste
Unifikatoren benutzt werden, sind die berechneten Antworten allgmeiner als die logisch
korrekten Antworten. Dies muss bei der Formulierung des Vollständigkeitssatzes berücksichtigt werden.
158
KAPITEL 3. LOGIKPROGRAMMIERUNG
Satz 3.3.9 (Vollständigkeit der SLD-Resolution)
V
V
Γσ, so gibt es eine erfolgreiche SLD-Herleitung
Sei R eine Auswahlregel. Falls P |=
von Γ aus P gemäss R mit einer berechneten Antwort θ, so dass Γθ allgemeiner ist als
Γσ. Das heisst, es gibt eine Substitution τ mit Γθτ = Γσ.
Der Satz sagt, dass für die Vollständigkeit die Auswahl der Atome in den Zielen beliebig ist. Zum Beispiel kann man immer das Atom ganz links wählen, wie das Prolog
tut, und der Vollständigkeitssatz bleibt erhalten. Prolog verwendet aber zudem eine feste
Auswahlstrategie für die Klauseln in einem Programm. Prolog wählt die Inputklauseln
in derselben Reihenfolge, wie sie im Programm stehen. Dadurch geht die Vollständigkeit
leider verloren, bzw. gilt nur für terminierende Ziele.
Dies ist nicht im Widerspruch zu dem obigen Vollständigkeitssatz. Der Satz besagt ja
nur, dass es eine erfolgreiche SLD-Herleitung gemäss der Prolog Auswahlregel gibt, nicht
aber dass Prolog diese Herleitung auch wirklich findet. Zur Illustration betrachten wir das
Programm P mit den folgenden zwei Klauseln:
r(c) :- r(c).
r(c).
Dann ist r(c) eine logische Konsequenz von P , d.h. P |= r(c), aber das Ziel r(c) terminiert
nicht in Prolog, da Prolog nur die erste Klausel anwendet und gar nie zur zweiten Klausel
kommt.
Frage ist nun, ob es vielleicht eine andere Axiomatisierung von Logikprogrammen
∀∃ Die
gibt, die korrekt und auch vollständig ist für die Prolog Suchstrategie. — Es zeigt sich
aus der folgenden Überlegung, dass dies unmöglich ist für beliebige Ziele und beliegige Programme. Aus der Korrektheit und der Vollständigkeit folgt nämlich die folgende Lifting-Eigenschaft:
Falls das Ziel Γσ die berechnete Antwort ε hat, dann gib es eine berechnete Antwort θ für das
uninstanzierte Ziel Γ und eine Substitution τ , so dass Γθτ = Γσ. Diese Lifting-Eigenschaft geht
aber bei der Suchstrategie von Prolog verloren. Betrachten wir das folgende Programm:
r(d) :- r(d).
r(c).
Sei Γ = r(X) und σ = {c/X}. Dann ist Γσ = r(c) und das Ziel r(c) hat in Prolog die Antwort ε
(yes). Das uninstanzierte Ziel r(X) jedoch hat keine Antwort unter der Prolog-Suchstrategie.
Die Lifting-Eigenschaft gilt also nicht für Prolog und es ist daher unmöglich einen Korrektheitsund einen Vollständigkeitssatz für Prolog zu beweisen.
Programme, die für beliebige Anordnungen der Klauseln terminieren,
∀∃ Terminierende
haben die Lifting-Eigenschaft auch für die Prolog Suchstrategie. Wenn man aber den
Prolog Cut ‘!’ zulässt, der Teile des Suchbaums wegschneidet, dann geht die Lifting-Eigenschaft
selbst für terminierende Ziele verloren. Betrachten wir dazu das folgende Programm:
r(d) :- !.
r(c).
Sei wiederum Γ = r(X) und σ = {c/X}. Dann ist Γσ = r(c) und das Ziel r(c) hat in Prolog die
Antwort ε (yes). Das uninstanzierte Ziel r(X) hat jedoch nur eine Antwort {d/X}. Die anderen
Antworten werden durch ‘!’ weggeschnitten. Somit hat das Ziel r(X) die Lifting-Eigenschaft
nicht.
3.3. SLD-RESOLUTION
3.3.10
159
Korrektheit und Vollständigkeit der SLD-Resolution
In den folgenden optionalen Paragraphen erbringen wir den Nachweis der Korrektheit und
der Vollständigkeit der SLD-Resolution.
Korrektheit der SLD-Resolution folgt unmittelbar aus dem folgenden Lemma. Es
∀∃ Die
sagt, dass die einzelnen Resolutionsschritte korrekt sind.
∀∃ Lemma 3.3.11 Sei Γ0 , Γ1 , . . . , Γn eine partielle SLD-Herleitung aus P mit allgemeinsten
Unifikatoren θ1 , . . . , θn . Dann gilt
P |=
∀∃ Beweis. Wir zeigen, dass P |=
^
^
VV
Γn →
Γi+1 →
^
^
Γ0 θ1 · · · θn .
VV
Γi θi+1 für alle i < n.
VV
Sei M eine Struktur, so dass M |= P und M |=
Γi+1 [α].
Wir können annehmen, dass
Γi = (∆i , Ai , Λi ),
Bi+1 :- Πi+1 eine Variante einer Klausel aus P ist,
Γi+1 = (∆i , Πi+1 , Λi )θi+1 , und
θi+1 = mgu(Ai , Bi+1 ).
VV
Aus den Annahmen folgt, dass M |=
∆i θi+1 [α], M |= Πi+1 θi+1 [α], M |= Λi θi+1 [α].
VV
Da P |=
Πi+1 θi+1 → Bi+1 θi+1 , erhalten wir M |= Bi+1 θi+1 [α].
Da Ai θi+1 = Bi+1 θi+1 , folgt M |= Ai θi+1 [α].
VV
Also haben wir M |=
Γi θi+1 [α]. 2
∀∃ Beweis. (Satz 3.3.8, Korrektheit der SLD-Resolution) Sei θ eine berechnete Antwort für Γ
aus P . Das heisst, es gibt eine erfolgreiche SLD-Herleitung Γ0 , Γ1 , . . . , Γn von Γ aus P mit
allgemeinsten Unifikatoren θ1 , . . . , θn so, dass Γθ = Γ0 θ1 · · · θn .
VV
VV
Aus dem vorangehenden Lemma folgt, dass P |=
Γn →
Γ0 θ1 · · · θn .
VV
VV
Weil Γn = 2, ist
Γn die Konstante > und es gilt P |=
Γθ. 2
die Vollständigkeit der SLD-Resolution brauchen wir den Begriff des Implikations∀∃ Für
baumes.
∀∃ Definition 3.3.12 (Implikationsbaum) Ein Implikationsbaum für A aus P ist ein endlicher Baum T von Atomen mit folgenden Eigenschaften:
Die Wurzel von T ist das Atom A.
Für jeden Knoten B von T gilt: Es gibt eine Instanz B :- C1 , . . . , Cn einer Klausel aus P ,
so dass die Kinder von B genau die Atome C1 , . . . , Cn sind.
Die Anzahl Knoten von T heisst der Rang von T .
160
KAPITEL 3. LOGIKPROGRAMMIERUNG
In der zweiten Bedingung der Definition ist auch der Fall n = 0 eingeschlossen. In diesem Fall ist
der Knoten B Instanz eines Faktums aus P und hat keine Kinder. Er ist ein Blatt des Baumes.
zeigen wir, dass jedes Atom, das logisch aus einem Programm folgt, einen Implika∀∃ Nun
tionsbaum besitzt. Die Umkehrung gilt auch: Falls ein Atom A einen Implikationsbaum
aus P besitzt, dann folgt A logisch aus dem Programm P . Im Beweis der Vollständigkeitssatzes
benötigen wir jedoch nur die Richtung, die im Lemma bewiesen wird.
∀∃ Lemma 3.3.13 Falls P |= A, dann hat A einen Implikationsbaum aus P .
∀∃ Beweis. Wir definieren ein Termmodell M = hM, Ii von P .
Sei M die Menge aller Terme (mit Variablen).
Für ein n-stelliges Funktionssymbol f und Terme t1 , . . . , tn ∈ M sei
I(f )(t1 , . . . , tn ) := f (t1 , . . . , tn ).
Für ein n-stelliges Relationssymbol R und Terme t1 , . . . , tn ∈ M sei
ht1 , . . . , tn i ∈ I(R) :⇐⇒ R(t1 , . . . , tn ) hat einen Implikationsbaum aus P .
Sei α eine Variablenbelegung in M und sei σ die Substitution {α(x1 )/x1 , . . . , α(xn )/xn }.
Mit Induktion nach dem Aufbau eines Termes t zeigt man folgendes:
Falls FV(t) ⊆ {x1 , . . . , xn }, so gilt [[t]]M
α = tσ.
Für ein Atom A mit FV(A) ⊆ {x1 , . . . , xn } hat man dann:
M |= A [α] ⇐⇒ Aσ hat einen Implikationsbaum aus P .
(∗)
Sei nun B :- C1 , . . . , Ck eine Klausel aus P mit Variablen in {x1 , . . . , xn }.
Wir müssen zeigen, dass M |= C1 ∧ . . . ∧ Ck → B [α].
Daher nehmen wir an, dass M |= C1 ∧ . . . ∧ Ck [α]. Mit (∗) folgt, dass jedes Cj σ einen Implikationsbaum hat. Also besitzt auch Bσ einen Implikationsbaum und es gilt M |= B [α].
Da α beliebig war, gilt M |= ∀x1 . . . ∀xn (C1 ∧ . . . ∧ Ck → B) und somit M |= P .
Sei nun A ein Atom, das eine logische Konsequenz ist von P , d.h. P |= A. Dann gilt M |= A [ι],
wobei ι die triviale Variablenzuweisung ist mit ι(x) = x für alle Variablen x.
Aus (∗) folgt, dass A einen Implikationsbaum aus P besitzt. 2
Die Vollständigkeit der SLD-Resolution inklusive der Unabhängigkeit der Auswahlregel
∀∃ kann
nun direkt bewiesen werden.
∀∃ Beweis. (Satz 3.3.9, Vollstängigkeit der SLD-Resolution) Nehmen wir an, dass P |=
VV
Γσ.
Mit Lemma 3.3.13 folgt, dass Aσ einen Implikationsbaum aus P besitzt für jedes Atom A aus Γ.
Sei n die Summe der Anzahl Knoten in den Implikationsbäumen.
Wir konstruieren mit Induktion nach i ≤ n eine partielle SLD-Herleitung Γ0 , Γ1 , . . . , Γi gemäss R
mit allgemeinsten Unifikatoren θ1 , . . . , θi und eine Folge von Substitutionen σ0 , σ1 , . . . , σi , so dass
gilt:
(a) Γ0 θ1 · · · θi σi = Γ0 σ,
3.4. PROLOG
161
(b) Jedes Atom in Γi σi besitzt einen Implikationsbaum, so dass die Summe der Anzahl Knoten
der Implikationsbäume gleich n − i ist.
Für i = 0 setzen wir Γ0 := Γ und σ0 := σ.
Sei nun 0 < i < n. Als Induktionsvoraussetzung nehmen wir an, dass die Folgen bereits bis i
konstruiert sind und die beiden Bedingungen (a) und (b) gelten.
Das Ziel Γi ist nicht leer. Sei A das Atom, das von der Auswahlregel R in Γi ausgewählt wird,
d.h., das Ziel Γi ist von der Gestalt ∆, A, Λ.
Mit der Induktionsvoraussetzung (b) für Γi σi folgt, dass das Atom Aσi einen Implikationsbaum
besitzt.
Es gibt also eine Klausel B :- Π aus P und eine Substitution τ , so dass Aσi = Bτ und die
Atome im Ziel ∆σi , Πτ, Λσi Implikationsbäume mit totaler Anzahl Knoten n − (i + 1) besitzen.
Sei B 0 :- Π0 eine Variante von B :- Π, die keine Variablen gemeinsam hat mit Γi oder Γ0 θ1 · · · θi .
Dann gibt es eine Substitution η mit B 0 η = B und Π0 η = Π.
Sei ρ := σi (FV(Γi ) ∪ FV(Γ0 θ1 · · · θi )) ∪ ητ FV(B 0 :- Π0 ).
Die Substitution ρ verhält sich auf Γi und Γ0 θ1 · · · θi wie σi und auf B 0 :- Π0 wie ητ .
Wir erhalten Aρ = Aσi = Bτ = (B 0 η)τ = B 0 ρ und somit ist ρ ein Unifikator von A und B 0 .
Sei θi+1 := mgu(A, B 0 ). Dann gibt es eine Substitution σi+1 mit θi+1 σi+1 = ρ.
Das nächste Ziel in der SLD-Herleitung ist Γi+1 := (∆, Π0 , Λ)θi+1 .
Es gilt Π0 θi+1 σi+1 = Π0 ρ = Π0 ητ = Πτ .
Weiter ist (∆, Λ, Γ0 θ1 · · · θi )θi+1 σi+1 = (∆, Λ, Γ0 θ1 · · · θi )ρ = (∆, Λ, Γ0 θ1 · · · θi )σi .
Also ist Γ0 θ1 · · · θi+1 σi+1 = Γ0 θ1 · · · θi σi = Γσ und Γi+1 σi+1 = ∆σi , Πτ, Λσi .
Damit haben wir die Herleitung um einen Schritt verlängert, so dass (a) und (b) für i + 1 gelten.
Schliesslich muss Γn das leere Ziel sein und wir haben eine erfolgreiche SLD-Herleitung konstruiert, so dass Γθ1 · · · θn σn+1 = Γσ. 2
3.4
Prolog
In diesem Abschnitt zeigen wir an Hand von Beispielen, wie sich die Programmierung in
Prolog von der Programmierung in imperativen Sprachen unterscheidet. Die wichtigsten
Unterschiede sind:
In Prolog wird deklarativ programmiert. Es wird beschrieben, was gelten soll und
nicht vorgeschrieben, wie etwas berechnet werden soll.
In Prolog gibt es nur einen Datentyp, die endlichen, nicht veränderbaren Bäume.
Bäume werden durch Terme kodiert.
In Prolog gibt es keine Zuweisung. Wenn ein Term (Baum) konstruiert worden ist,
kann er nicht mehr abgeändert werden.
In Prolog werden Prädikate und keine Funktionen definiert.
Input und Output von Prädiakten kann vertauscht werden (nicht immer).
In Prolog gibt es keine Iteration (For-, While-, Repeat-Schleifen).
Prädikate werden in Prolog rekursiv definiert.
162
KAPITEL 3. LOGIKPROGRAMMIERUNG
3.4.1
Syntax der Listen
In Prolog gibt es ein spezielles 2-stelliges Funktionssymbol ’.’ und eine spezielle Konstante [ ]. Der Term ’.’(s, t) stellt eine Liste mit Kopf s und Rest t dar. Der Term s
ist das erste Element der Liste und der Term t ist die Liste der restlichen Elemente. Die
Konstante [ ] stellt die leere Liste dar. Eine lineare Liste mit den Elementen a1 , a2 , . . . , an
wird durch den folgenden Term dargestellt:
’.’(a1 , ’.’(a2 , . . . , ’.’(an , [ ]) . . .))
Weil Listen so oft gebraucht werden, haben sie eine spezielle Syntax.
[s|t] steht für ’.’(s, t),
[s1 , s2 , . . . , sn ] steht für ’.’(s1 , ’.’(s2 , . . . , ’.’(sn , [ ]) . . .)).
[s1 , s2 , . . . , sn |t] steht für ’.’(s1 , ’.’(s2 , . . . , ’.’(sn , t) . . .)).
Die Liste [e, t, h] sieht als endlicher Baum wie folgt aus:
’.’
.
&
e
’.’
.
&
t
’.’
.
h
&
[]
Listen sind nichts anderes als spezielle Terme. Mit dem eingebauten Prädikat display/1
kann die Termdarstellung von Listen ausgegeben werden:
?- display([e,t,h]).
’.’(e,’.’(t,’.’(h,[])))
?- display([[e,t]|[h]]).
’.’(’.’(e,’.’(t,[])),’.’(h,[]))
Mit der Unifikation kann auf einzelne Elemente einer Liste zugegriffen werden:
?- [X|L] = [e,t,h].
X = e
L = [t,h]
In diesem Beispiel wird die Variable X an das erste Element e der Liste gebunden. Die
Variable L wird an die Restliste [t,h] gebunden.
3.4. PROLOG
3.4.2
163
Interne Darstellung der Terme im Speicher
Im Speicher eines Computers werden Terme mit Hilfe von Tagbits dargestellt. Nehmen
wir an, dass der Speicher aus Zellen mem[0], . . . , mem[MAX] besteht und dass einzelne Zellen
die Form hTAG, ii haben, wobei TAG in {FUN, LST, CON, REF} ist. Die Tags haben die
folgende Bedeutung:
FUN markiert eine Funktion
LST markiert eine Liste
CON markiert eine Konstante
REF markiert eine Referenz
Beispiel: Die Zelle hFUN, 100i stellt im folgenden Speicher den Term f (g(c), [g(c), d]) dar:
mem[100] = hf, 2i
mem[105] = hREF, 109i
mem[101] = hFUN, 103i
mem[106] = hLST, 107i
mem[102] = hLST, 105i
mem[107] = hCON, di
mem[103] = hg, 1i
mem[108] = hCON, []i
mem[104] = hCON, ci
mem[109] = hFUN, 103i
Die beiden Vorkommen des Teilterms g(c) werden im Speicher durch eine einizge Kopie
dargestellt, nämlich durch hFUN, 103i (sharing).
Allgemein können wir definieren, was es bedeutet, dass eine Zelle hTAG, ii einen Term t
darstellt:
hFUN, ii stellt den Term f (t1 , . . . , tn ) dar, falls
mem[i + 0] = hf, ni,
mem[i + 1] den Term t1 darstellt,
..
.
mem[i + n] den Term tn darstellt.
hLST, ii stellt den Term [s|t] dar, falls
mem[i + 0] den Term s darstellt,
mem[i + 1] den Term t darstellt.
hCON, ci stellt die Konstante c dar.
hREF, ii stellt den Term t dar, falls mem[i] den Term t darstellt.
Wenn es Zyklen im Speicher gibt, z.B. mem[i] = hLST, ji und mem[j] = hREF, ii, dann kann
man nicht mehr sagen, welche Terme dargestellt werden.
164
KAPITEL 3. LOGIKPROGRAMMIERUNG
3.4.3
Das Prädikat append/3
Eine n-stellige Funktion wird in Prolog durch ein (n + 1)-stelliges Prädikat implementiert,
das den Graphen der Funktion darstellt. Als Beispiel betrachten wir das Zusammenfügen
von Listen. Diese Funktion wird in Prolog durch ein dreistelliges Prädikat implementiert:
append([],L,L).
append([X|L1],L2,[X|L3]) :- append(L1,L2,L3).
Die Bedeutung von append(L1, L2, L3) ist:
Wenn man die Liste L2 hinten an die Liste L1 anhängt, erhält man als Resultat
die Liste L3.
Im Bild lässt sich das so darstellen:
L1
|
L2
{z
L3
}
Das Prädikat append/3 wird wie folgt benutzt:
?- append([1,2,3],[4,5],L).
L = [1,2,3,4,5]
?- append([a,b],[b,a],L).
L = [a,b,b,a]
Die Konkatenation der Listen [1,2,3] und [4,5] ist die Liste [1,2,3,4,5].
In Prolog gibt es keine Iteration. Es gibt weder For-, noch While-, noch Repeat-Schlaufen.
Anstelle von Iteration muss man Rekursion benutzen. Die Prädikate werden rekursiv definiert (sie rufen sich selbst auf). Gute Prolog-Compiler ersetzen die Rekursion automatisch
durch Iteration (Tail Recursion Optimization). Auch das Prädikat append/3 ist rekursiv
definiert. Die erste Klausel ist für die leere Liste. Sie sagt:
Die Konkatenation der leeren Liste [ ] mit einer beliebigen Liste L ist gleich
der Liste L.
Die zweite Klausel behandelt den Fall einer zusammengesetzten Liste. Sie sagt:
Die Konkatenation einer zusammengesetzten Liste [X|L1] mit einer Liste L2 ist
gleich [X|L3], falls die Konkatenation von L1 und L2 gleich L3 ist.
In Bildern bedeutet die zweite Klausel:
Falls
X
·
L1
L1
·
L2
L2
=
L3
= X
L3
, dann ist
3.4. PROLOG
165
Im Unterschied zu anderen Programmiersprachen gibt es in Prolog partielle Datenstrukturen. Der Term [1,2|L] bezeichnet zum Beispiel eine partielle Liste mit den ersten beiden
Elementen 1 und 2 und dem unbestimmten Rest L. Während der Berechnung kann dann
der Rest L weiter instanziert werden, so dass die Liste vollständig wird. Wenn wir beim
Aufruf von append/3 das zweite Argument unbestimmt lassen, erhalten wir als Resultat
eine partielle Liste:
?- append([1,2,3],L1,L2).
L2 = [1,2,3|L1]
Wir können sogar als erstes Argument nur das Skelett einer Liste angeben:
?- append([X,Y,Z],L1,L2).
L2 = [X,Y,Z|L1]
Manchmal kann man in Prolog sogar Input und Output vertauschen. Wir haben bis jetzt
die ersten beiden Argumente von append/3 immer als Input-Argumente und das dritte
Argument als Output-Argument betrachtet. Das kann man auch umkehren. Wir können
das dritte Argument als Input benutzen und erhalten dann in den ersten beiden Argumenten den Output. Auf diese Weise kann man eine Liste in zwei Teillisten zerlegen. Mit
Back-Tracking (erzwungen durch das Semikolon) erhält man alle möglichen Kombinationen:
?- append(L1,L2,[e,t,h]).
L1 = []
L2 = [e,t,h] ;
L1 = [e]
L2 = [t,h] ;
L1 = [e,t]
L2 = [h] ;
L1 = [e,t,h]
L2 = [] ;
no
Die Vertauschung von Input und Output funktioniert nicht immer. Es kann vorkommen,
dass Prolog in einen unendlichen Ast fällt und nicht terminiert. Beispiel:
?- append(L,[1,2],L).
Fatal Error: global stack overflow
166
KAPITEL 3. LOGIKPROGRAMMIERUNG
Die Frage ist nun, wann terminiert append/3 und wann nicht? Um die Frage zu beantworten, müssen wir zuerst etwas über Typen sagen. Prolog ist eine ungetypte Programmiersprache. Wir können zum Beispiel append/3 mit der Zahl 4 oder der Konstanten prolog
als zweites Argument aufrufen und erhalten immer noch eine Antwort:
?- append([1,2,3],4,L).
L = [1,2,3|4]
?- append([hello,world],prolog,L).
L = [hello,world|prolog]
Auch wenn Prolog ungetypt ist, sind die Typen implizit in den Programmen vorhanden.
Wir können zum Beispiel den Typ der Listen durch ein einstelliges Prädikat definieren:
list([]).
list([_|L]) :- list(L).
Eine Liste ist dann jeder Term t, auf den die Frage list(t) die Antwort ‘yes’ liefert.
Beispiele:
[]
[1]
[1,2,3,4]
[X,Y,Z]
Die Eigenschaften von append/3 in Prolog sind dann:
Falls t1 eine Liste ist, dann terminiert append(t1 , t2 , t3 ).
Falls t3 eine Liste ist, dann terminiert append(t1 , t2 , t3 ).
Man spricht auch von den verschiedenen Modes des Prädikates. Die Modes für append/3
sind demnach append(in, in, out) und append(out, out, in). Daneben gibt es noch den
Mode append(in, in, in).
3.4.4
Die Prädikate suffix/2 und prefix/2
Das Prädikat append/3 kann benutzt werden um andere Prädikate zu definieren:
suffix(L1,L2) :- append(_,L1,L2).
prefix(L1,L2) :- append(L1,_,L2).
Das Prädikat suffix(L1, L2) testet, ob die Liste L1 ein Suffix von L2 ist:
L2
}|
z
{
L1
Das Prädikat prefix(L1, L2) testet, ob die Liste L1 ein Anfangsstück von L2 ist:
L2
}|
z
L1
Beispiele für suffix/2 und prefix/2:
{
3.4. PROLOG
167
?- suffix([3,4],[1,2,3,4]).
yes
?- prefix([1,2],[1,2,3,4]).
yes
Die Modes für suffix/2 sind suffix(in, in) und suffix(out, in).
3.4.5
Das Prädikat sublist0/2
Das folgende Beispiel soll zeigen, dass man in Prolog nicht prozedural denken sollte sondern deklarativ. Wie kann man entscheiden, ob eine Liste L1 eine zusammenhängende
Teilliste von L2 ist?
L2
}|
{
z
L1
Dies ist genau dann der Fall, wenn die Liste L2 ein Suffix L3 besitzt, so dass L1 ein Präfix
von L3 ist.
L2
}|
{
z
L1
|
{z
L3
}
In Prolog schreibt man das so:
sublist0(L1,L2) :suffix(L3,L2),
prefix(L1,L3).
Die Modes für sublist0/2 sind sublist0(in, in) und sublist0(out, in). Beispiele:
?- sublist0([2,3],[1,2,3,4]).
yes
?- sublist0([2,1],[1,2,3]).
no
Prolog erzeugt manchmal redundante Lösungen. Im folgenden Beispiel wird die leere Liste
mehrmals gefunden:
?- sublist0(L,[1,2]).
L = [] ;
168
KAPITEL 3. LOGIKPROGRAMMIERUNG
L = [1] ;
L = [1,2] ;
L = [] ;
L = [2] ;
L = [] ;
no
Um die reduntanten Lösungen zu vermeiden, definieren wir ein neues Prädikat:
sublist1([],_).
sublist1([X|L1],L2) :suffix([X|L3],L2),
prefix(L1,L3).
Dann erhalten wir:
?- sublist1(L,[1,2]).
L = [] ;
L = [1] ;
L = [1,2] ;
L = [2] ;
no
Die leere Liste wird nun nur noch einmal gefunden.
3.4.6
Das Prädikat member/2
Das Prädikat member(X, L) testet, ob das Element X in der Liste L vorkommt:
X
|
Es ist so definiert:
member(X,[X|_]).
member(X,[_|L]) :- member(X,L).
Beispiele:
{z
L
}
3.4. PROLOG
169
?- member(2,[1,2,3]).
yes
?- member(5,[1,2,3]).
no
Die Modes von member/2 sind member(in, in) und member(out, in). Das erste Argument
von member/2 kann auch als Output verwendet werden. Beispiel:
?- member(X,[1,2,3]).
X = 1 ;
X = 2 ;
X = 3 ;
no
Auf diese Weise ist es möglich, alle Elemente einer Liste der Reihe nach durchzugehen.
3.4.7
Das Prädikat select/3
Das Prädikat select(X, L1, L2) entfernt ein Vorkommen von X aus der Liste L1. Das
Resultat ist die Liste L2:
select(X,[X|L],L).
select(X,[Y|L1],[Y|L2]) :- select(X,L1,L2).
Das Prädikat kann benutzt werden um das erste Vorkommen eines Elementes in einer
Liste zu streichen. Beispiel:
?- select(2,[1,2,3],L).
L = [1,3]
Das erste Argument von select/3 kann auch als Output-Argument verwendet werden.
Beispiel:
?- select(X,[e,t,h],L).
L = [t,h],
X = e ;
L = [e,h],
X = t ;
170
KAPITEL 3. LOGIKPROGRAMMIERUNG
L = [e,t],
X = h ;
no
Der Mode von select/3 ist select(out, in, out).
3.4.8
Das Prädikat delete/3
Um alle Vorkommen eines Elementes in einer Liste zu streichen, benutzt man das Prädikat
delete/3. Die Bedeutung von delete(L1, X, L2) ist, dass in der Liste L1 alle Vorkommen
von X gelöscht werden und das Resultat die Liste L3 ist.
delete([],_,[]).
delete([Y|L1],X,L2) :(
X = Y ->
delete(L1,X,L2)
;
L2 = [Y|L3],
delete(L1,X,L3)
).
Der Mode für delete/3 ist delete(in, in, out). Beispiel:
?- delete([a,b,c,b,d],b,L).
L = [a,c,d]
In der Definition von delete/3 wird das If-Then-Else Konstrukt von Prolog benutzt, das
wir im folgenden Abschnitt behandeln.
3.4.9
Deklarative Konstrukte in Prolog
In dem Fragment von Prolog, das wir bisher betrachtet haben, kann man zwar im Prinzip alles, was überhaupt berechenbar ist, hinschreiben. Für praktische Anwendungen von
Prolog braucht man jedoch weitere Programmkonstrukte. Man unterscheidet zwischen
Programmkonstrukten, die eine deklarative Bedeutung haben, und solchen, die absolut prozedural sind und keine logische Bedeutung haben. Wir betrachten zunächst die
Konstrukte von Prolog, die eine gewisse deklarative Bedeutung haben. Wir ändern die
Grammatik für Regeln und Ziele wie folgt:
Rule = Atom ‘:-’ Goal ‘.’
Goal = ‘true’ | ‘fail’ | Atom | Term ‘=’ Term | Goal ‘,’ Goal |
Goal ‘;’ Goal | ‘\+’ Goal | Goal ‘->’ Goal ‘;’ Goal
Der Rumpf eine Klausel kann nun ein beliebiges strukturiertes Ziel sein. Die Operatoren
in den Zielen haben die folgende Bedeutung:
3.4. PROLOG
171
= . . . . . . . “gleich” . . . . . . . . . . . . . . . . . . Unifikation
, . . . . . . . . “und” . . . . . . . . . . . . . . . . . . . Konjunktion
; . . . . . . . . “oder” . . . . . . . . . . . . . . . . . . . Disjunktion
\+ . . . . . . . “nicht” . . . . . . . . . . . . . . . . . . Negation
-> ; . . . . . “if-then-else” . . . . . . . . . . . . Konditional
Bezüglich der Bindungsstärken der Operatoren in den Zielen werden die folgenden Konventionen gemacht:
Konjunktionen und Disjunktionen werden rechtsgeklammert:
G0 , G1 , G2 ≡ G0 , (G1 , G2 )
G0 ; G1 ; G2 ≡ G0 ; (G1 ; G2 )
Die Konjunktion bindet stärker als die Disjunktion:
G0 , G1 ; G2 ≡ (G0 , G1 ) ; G2
Der Konditionaloperator wird ebenfalls rechtsgeklammert:
G0 -> H1 ; G1 -> H2 ; H3 ≡ G0 -> H1 ; (G1 -> H2 ; H3 )
Eine Kaskade von If-Then-Else wird in Prolog oft so


(
G0 ->






H1




;
G1 ->
hat die Bedeutung

H2





;
H3





)
geschrieben:


if G0 then






H1



 else if G then
1

H2





else





H3
Die Ziele haben die folgende Bedeutung:
Das Ziel true ist immer wahr.
Das Ziel fail scheitert immer und führt automatisch zu Back-Tracking.
Beim Ziel R(t1 , . . . , tn ) wird unterschieden, ob das Prädikat R benutzerdefiniert oder
built-in ist. Falls das Prädikat R benutzerdefiniert ist, wird versucht, das Atom mit dem
Kopf der ersten Klausel für R zu unifizieren. Falls das möglich ist, wird das Atom durch
den Körper der Klausel ersetzt. Andernfalls wird die nächste Klausel versucht. Wenn
es keine passende Klausel mehr gibt, kommt es zu Back-Tracking. Falls das Prädikat R
built-in ist, wird es direkt ausgeführt.
172
KAPITEL 3. LOGIKPROGRAMMIERUNG
Eine Gleichung s = t wird mit Unifikation gelöst. Falls die beiden Terme nicht unifizierbar sind, kommt es zu Back-Tracking.
Das Ziel G , H wird von links nach rechts gelöst. Zuerst wird G gelöst und danach H.
Um ein Ziel G ; H zu lösen, muss das Ziel G oder das Ziel H gelöst werden.
Beim Ziel \+ G wird zuerst versucht, das unnegierte Ziel G zu lösen. Falls G scheitert,
dann gelingt \+ G. Falls G gelingt, dann scheitert \+ G. Man spricht von Negation-asFailure. Der Operator \+ ist verschieden von der klassischen Negation. Für die klassische
Negation gilt das tertium non datur, A ∨ ¬A. Für den Operator \+ gilt das Gesetz nicht.
Es kann vorkommen, dass weder G noch \+ G gelingt, wenn das Ziel G nicht terminiert.
Das Ziel G -> H1 ; H2 ist das If-Then-Else von Prolog. Das Ziel G ist der Test. Falls das
Ziel G gelingt, dann wird das Ziel H1 ausgeführt, sonst das Ziel H2 . Nur die erste Lösung
von G wird zu H1 weiterpropagiert. Die weiteren Lösungen von G werden weggeschnitten.
Die Negation \+ G ist dasselbe wie G -> fail ; true.
Als Beispiel für die Semantik der strukturierten Ziele betrachten wir ein Programm mit
den folgenden zwei Fakten:
r(0).
r(1).
Die folgenden Abfragen verdeutlichen den Unterschied zwischen Komma (Konjunktion)
und Semikolon (Disjunktion).
?- r(0), r(1).
yes
?- r(2), r(1).
no
?- r(2) ; r(1).
yes
Der Negation-as-Failure Operator \+ verhält sich in diesem Beispiel wie die klassische
Negation.
?- \+ r(2).
yes
?- \+ r(1).
no
3.4. PROLOG
173
Die folgenden Abfragen verdeutlichen, dass der If-Then-Else Operator mögliche Lösungen
wegschneidet.
?- (r(X) -> X = 0; true).
X = 0
yes
?- (r(X) -> X = 1; true).
no
Obwohl das Faktum r(1) im Programm enthalten ist, wird bei Konditional nur die erste
Lösung X = 0 betrachtet.
Durch das Wegschneiden eines Teils des Suchbaumes beim If-Then-Else geht die deklarative Semantik von Prolog verloren. Betrachten wir das folgende Programm:
q(X) :- (X = 0 -> fail; true).
Wenn wir nach einem X mit der Eigenschaft q(X) fragen, bekommen wir die Antwort ‘no’.
?- q(X).
no
Das heisst, dass es kein X mit der Eigenschaft q(X) gibt. Das stimmt aber nicht. Es gibt
unendlich viele X, so dass q(X) zutrifft:
?- q(1).
yes
?- q(2).
yes
?- q(3).
yes
Wo bleibt da die Logik?
3.4.10
Beispiel: Das Erfüllbarkeitsproblem der Aussagenlogik in Prolog
Wenn ein Algorithmus kein Back-Tracking verwendet, gibt es eigenlich keinen Grund, ihn
in Prolog zu implementieren. Prolog ist optimiert für Back-Tracking und Matching. Als
174
KAPITEL 3. LOGIKPROGRAMMIERUNG
typisches Beispiel für einen Algorithmus, der Back-Tracking und Matching verwendet, betrachten wir einen simplen Algorithmus für das Erfüllbarkeitsproblem der Aussagenlogik.
Wir wollen ein Prädikat satisfiable/1 schreiben, das testet, ob eine Formel erfüllbar
ist.
Aussagenlogische Formeln stellen wir in Prolog als geschlossene Terme dar. Dabei benutzen wir die Möglichkeit von Prolog, neue Infix- und Präfix-Operatoren zu definieren.
:::::-
op(960,yfx,<=>).
op(950,xfy,=>).
op(940,yfx,\/).
op(930,yfx,/\).
op(900,fy,~).
Eine Operatordeklaration hat in Prolog die folgende Form:
:- op(Precedence, Type, Symbol).
Ein Ausdruck, der mit ‘:-’ beginnt, ist eine sogenannte Direktive.
Die Präzedenz eines Operators ist eine natürliche Zahl im Bereich [1, 1200]. Je grösser die
Präzendenz eines Operators ist, desto schwächer bindet der Operator.
Der Typ eines Operators kann sein:
fx fy
| {z }
prefix
xfy yfx xfx
|
{z
}
infix
xf yf
| {z }
postfix
Der Buchstabe ‘f’ im Typ zeigt an, ob der Operator infix, präfix oder postfix ist.
Der Buchstabe ‘x’ steht für ein Argument mit Präzedenz kleiner als die Präzedenz des
Operators, während der Buchstabe ‘y’ für ein Argument mit Präzedenz kleiner oder gleich
der Präzedenz des Operators steht.
Das heisst, dass aufgrund der obigen Operatordeklarationen die Implikation ‘=>’ rechtsgeklammert ist, während die Konjunktion ‘/\’ linksgeklammert wird:
A => B => C
wird geparst als
A => (B => C)
A /\ B /\ C
wird geparst als
(A /\ B) /\ C
Operatoren werden als normale Funktionssymbole geparst:
A => B
wird geparst als
=>(A,B)
A /\ B
wird geparst als
/\(A,B)
~ A
wird geparst als
~(A)
Mit dem Prädikat formula/1 definieren wir den Typ der Formeln:
3.4. PROLOG
formula(A)
formula(~ A)
formula(A /\ B)
formula(A \/ B)
formula(A => B)
formula(A <=> B)
175
::::::-
atomic(A).
formula(A).
formula(A),
formula(A),
formula(A),
formula(A),
formula(B).
formula(B).
formula(B).
formula(B).
Beispiele von Formeln sind:
?- formula((p => q) <=> (~ q => ~ p)).
yes
?- formula(p /\ (q \/ r) <=> (p /\ q) \/ (p /\ r)).
yes
Ein Belegung stellen wir durch eine Liste von Aussagenvariablen und negierten Aussagenvariablen dar. Beispiel:
[p, ~q, r]
Diese Liste entspricht einer Belegung α mit α(p) = 1, α(q) = 0, α(r) = 1.
Nun definieren wir ein Prädikat true(A, I1, I2), das versucht, die partielle Belegung I1
so zu einer Belegung I2 zu verlängern, dass die Formel A wahr wird.
true(A,I1,I2) :atomic(A),
(
member(A,I1) ->
I2 = I1
;
member(~ A,I1) ->
fail
;
I2 = [A|I1]
).
true(~ A,I1,I2)
:- false(A,I1,I2).
true(A /\ B,I1,I3) :- true(A,I1,I2), true(B,I2,I3).
true(A \/ _,I1,I2) :- true(A,I1,I2).
true(_ \/ B,I1,I2) :- true(B,I1,I2).
true(A => _,I1,I2) :- false(A,I1,I2).
true(_ => B,I1,I2) :- true(B,I1,I2).
true(A <=> B,I1,I3) :- true(A,I1,I2), true(B,I2,I3).
true(A <=> B,I1,I3) :- false(A,I1,I2), false(B,I2,I3).
Dual dazu definieren wir ein Prädikat false(A, I1, I2), das versucht, die partielle Belegung I1 so zu einer Belegung I2 zu verlängern, dass die Formel A falsch wird.
176
KAPITEL 3. LOGIKPROGRAMMIERUNG
false(A,I1,I2) :atomic(A),
(
member(~ A,I1) ->
I2 = I1
;
member(A,I1) ->
fail
;
I2 = [~ A|I1]
).
false(~ A,I1,I2)
:- true(A,I1,I2).
false(A /\ _,I1,I2) :- false(A,I1,I2).
false(_ /\ B,I1,I2) :- false(B,I1,I2).
false(A \/ B,I1,I3) :- false(A,I1,I2), false(B,I2,I3).
false(A => B,I1,I3) :- true(A,I1,I2), false(B,I2,I3).
false(A <=> B,I1,I3) :- true(A,I1,I2), false(B,I2,I3).
false(A <=> B,I1,I3) :- false(A,I1,I2), true(B,I2,I3).
Dann definieren wir Prädikate für Erfüllbarkeit und Allgemeingültigkeit:
satisfiable(A) :- true(A,[tt, ~ff],_).
valid(A) :- \+ satisfiable(~ A).
false(A,I) :- false(A,[tt, ~ff],I).
Das Prädikat satisfiable(A) testet, ob die Formel A erfüllbar ist:
?- satisfiable((p => q) \/ ~p).
yes
?- satisfiable((p => q) /\ p /\ ~q).
no
Das Prädikat valid(A) testet, ob die Formel A allgemeingültig ist:
?- valid((p => q) \/ ~p).
no
?- valid((p => q) <=> (~q => ~p)).
yes
Mit dem Prädikat false(A, I) kann man nach einer Belegung I suchen, welche die Formel A
falsch macht:
3.5. UNENTSCHEIDBARKEIT DER PRÄDIKATENLOGIK
177
?- false((p => q) \/ ~p,I).
I = [~q,p,tt,~ff]
Die beiden Konstanten tt und ff werden dabei als > und ⊥ aufgefasst.
3.5
Unentscheidbarkeit der Prädikatenlogik
Aus dem Korrektheitssatz (Satz 2.4.17) und dem Vollständigkeitssatz (Satz 2.5.1) der
Prädikatenlogik folgt, dass eine Formel A der Prädikatenlogik allgemeingültig ist genau
dann, wenn sie im System des natürlichen Schliessens herleitbar ist:
|= A genau dann, wenn
N
A
Daraus ergibt sich ein Verfahren, wie man mechanisch alle allgmeingültigen Formeln der
Prädikatenlogik aufzählen kann.
Man konstruiert einfach systematisch alle möglichen Herleitungen im System des
natürlichen Schliessens und gibt jeweils die Formel, die von der Herleitung bewiesen wird,
aus. Aus dem Korrektheitssatz der Prädikatenlogik (Satz 2.4.17) folgt, dass auf diese Weise nur allgemeingültige Formeln aufgezählt werden, also Formeln, die wahr sind in allen
Strukturen. Aus dem Vollständigkeitssatz der Prädikatenlogik (Satz 2.5.1) folgt, dass jede
allgemeingültige Formel einmal an die Reihe kommt. Das Verfahren ist aber eher theoretisch, da es nicht klar ist, ob es in absehbarer Zeit überhaupt eine interessante Formel
liefert.
Die Frage ist nun, ob es ein mechanisches Verfahren gibt, das von einer gegebenen
Formel der Prädikatenlogik entscheidet, ob sie allgemeingülig ist oder nicht. Mit anderen
Worten: Gibt es ein Computerprogram, das als Eingabe einen String nimmt, den String
als Formel parst, und dann entscheidet, ob die Formel allgemeingültig ist? Das Computerprogramm darf nicht bei gewissen Eingaben unendlich lang laufen, sondern muss immer
irgendwann mit einer Antwort stoppen.
Leider (oder vielleicht zum Glück) gibt es kein solches Programm. Nicht einmal unter
der Annahme, dass ein Computerprogramm beliebig viel Speicherplatz und Rechenzeit
zur Verfügung hätte, lässt sich das Entscheidungsproblem für die Prädikatenlogik lösen.
Dieses negative Resultat wurde erstmals 1936 von A. Church gezeigt.
Wir benutzen den Korrektheitssatz 3.3.8 und den Vollständigkeitssatz 3.3.9 der SLDResolution um das Problem, ob ein geschlossenes Atom A eine erfolgreiche SLD-Herleitung
aus einem Logikprogramm P hat, auf das Entscheidungsproblem der Prädikatenlogik
zurückzuführen. Dann führen wir das sogenannte Halteproblem von Computerprogrammen auf das SLD-Problem zurück, indem wir zeigen, dass man im Prinzip für jede Programmiersprache einen Interpreter als reines (definites) Logikprogramm schreiben kann.
Da das Halteproblem unentscheidbar ist, folgt aus den Reduktionen, dass auch die Prädikatenlogik unentscheidbar ist.
Was ist ein Problem?—Ein Problem ist eine Menge U von Zeichenketten (Strings) über
einem gegeben Alphabet. Beispiel: Die Menge aller Zeichenketten, die allgemeingültige
Formeln der Prädikatenlogik darstellen, bildet ein Problem.
178
KAPITEL 3. LOGIKPROGRAMMIERUNG
Was heisst es, ein Problem auf ein anderes zurückzuführen?—Ein Problem U wird
zurückgeführt auf ein Problem V , wenn es eine effizient berechenbare Funktion f auf der
Menge der Strings gibt, so dass für alle Strings s gilt:
s∈U
⇐⇒
f (s) ∈ V
Hätte man ein Entscheidungsverfahren für V , dann könnte man auch U entscheiden. Zu
einem gegebenen String s müsste man einfach zuerst den String f (s) berechnen und dann
testen, ob f (s) zu V gehört.
3.5.1
Rückführung der SLD-Resolution auf die Prädikatenlogik
Sei P ein Logikprogramm und A ein geschlossenes Atom. Erinnern wir uns daran, dass
ein Logikprogramm P eine endliche Menge von Klauseln ist und dass wir mit P die
Formelmenge {K | K ∈ P } bezeichnen. Dabei erhält man die Formel K aus der Klausel K,
indem man alle Variablen von K allquantifiziert und die Klausel von rechts nach links
liest (Rumpf impliziert Kopf).
Da das Atom A geschlossen ist und keine Variablen enthält, folgt mit dem Korrektheitssatz (Satz 3.3.8) und dem Vollständigkeitssatz (Satz 3.3.9) der SLD-Resolution, dass die
folgenden drei Aussagen aequivalent sind:
A1. Die Formel
VV
P → A ist allgemeingültig.
A2. P |= A
A3. Das Atom A hat eine erfolgreiche SLD-Herleitung aus P .
Das bedeutet: Wenn wir ein Entscheidungsverfahren für die Prädikatenlogik hätten, dann
könnten wir auch entscheiden, ob ein geschlossenes Atom A eine
V
V SLD-Herleitung aus
P → A konstruieren
einem Logikprogramm P hat. Wir müssten einfach die Formel
und darauf das Entscheidungsverfahren für die Prädikatenlogik anwenden.
3.5.2
Das Halteproblem in Eiffel
Wir fassen ein Eiffel-Programm als riesengrosser String auf. Ein solcher String kann selber wieder ein Eingabewert von Programmen sein. Deshalb könnte man versuchen, ein
Programm zu schreiben, das entscheidet, ob eine Prozedur eines Programmes auf eine
Eingabe hält oder nicht. Wir zeigen, dass dies nicht möglich ist.
Betrachten wir das Eiffel-Programm in Abb. 3.5. Jemand hat versucht eine Funktion
halt(src, proc, in) zu schreiben, die entscheidet, ob die Prozedur mit Namen proc im
Programm src (gegeben als String) auf die Eingabe in (ebenfalls ein String) hält. Nehmen
wir an, dass die Prozedur halt korrekt ist im folgenden Sinn:
H1. Falls halt(src, proc, in) terminiert mit Rückgabewert true, dann terminiert die
Prozedur mit Namen proc im Programm src auf die Eingabe in.
3.5. UNENTSCHEIDBARKEIT DER PRÄDIKATENLOGIK
179
class
HALTING_PROBLEM
feature
-- returns ‘true’, if the method ‘proc’ in the program ‘src’
-- terminates on input ‘in’. Returns ‘false’ otherwise.
halt(src, proc, in: STRING): BOOLEAN is
do
-- body of halt
end
-- other procedures of the class
end -- class HALTING_PROBLEM
Abbildung 3.5: Das Halteproblem in Eiffel.
H2. Falls halt(src, proc, in) terminiert mit Rückgabewert false, dann loopt die Prozedur mit Namen proc im Programm src auf die Eingabe in (d.h. sie terminiert
nicht).
Wir werden nun zeigen, wie man unter diesen Annahmen ein Programm src mit einer
Prozedur proc und eine Eingabe in konstruieren kann, so dass Halt(src, proc, in) nicht
terminiert. Das bedeutet, dass die Prozedur halt nicht auf alle Eingaben terminiert. Also
ist das Halteproblem für Eiffel in Eiffel nicht entscheidbar.
Um die Eingabewerte zu konstruieren, auf denen halt nicht terminiert, erweitern
wir das Programm um eine Prozedur diagonal in Abb. 3.6. Man beachte, dass es nicht
unnatürlich ist, ein Programm auf sich selbst anzuwenden. Viele Compiler sind imstande,
sich selbst zu compilieren. Dabei wird der Compiler selbst als Input für den Compiler
benutzt.
Sei d das erweiterte Programm von Abb. 3.6 aufgefasst als String. Wir behaupten,
dass der folgende Prozeduraufruf nicht terminiert:
halt(d, "diagonal", d)
Würde der Aufruf terminieren, dann hätten wir die folgenden zwei Fälle:
Fall 1: Der Aufruf halt(d, "diagonal", d) terminiert mit Rückgabewert true.
Nach Annahme H1 folgt daraus, dass die Prozedur diagonal im Programm d auf die
Eingabe d terminert. Das kann nur sein, wenn die Variable stop beim Aufruf von halt
den Wert false erhält. Widerspruch.
Fall 2: Der Aufruf halt(d, "diagonal", d) terminiert mit Rückgabewert false.
Nach Annahme H2 folgt daraus, dass die Prozedur diagonal im Programm d auf die
180
KAPITEL 3. LOGIKPROGRAMMIERUNG
class
HALTING_PROBLEM
feature
-- other procedures of the class
diagonal(in: STRING) is
local
stop: BOOLEAN
do
stop := halt(in, "diagonal", in)
-- if stop is true, then loop forever ...
from
-- nothing to do
until
not stop
loop
-- just loop
end
end
end -- class HALTING_PROBLEM
Abbildung 3.6: Der Diagonalisierungstrick.
Eingabe d loopt (also nicht terminiert). Das kann nur sein, wenn die Variable stop beim
Aufruf von halt den Wert true erhält. Widerspruch.
Also terminiert der Aufruf halt(d, "diagonal", d) nicht und die Funktion halt ist nicht
total.
kann einwenden, dass ein Computer nur endlich viel Speicher hat (Hauptspeicher
∀∃ Man
plus Diskplatz). Darum kann ein Computerprogramm nur endlich viele Zustände annehmen. Man könnte also im Prinzip alle möglichen Zustände des Computers als Knoten in einem
riesigen Graph auffassen und jeweils einen Pfeil von einem Zustand zu einem anderen Zustand
eintragen, falls es einen Rechenschritt im Programm gibt, der den einen Zustand in den anderen
überführt. Um zu testen, ob das Proramm terminiert, müsste man nur überprüfen, ob der Graph
keine Zyklen enthält. Also könnte man im Prinzip entscheiden, ob ein Programm terminiert. Das
Diagonalisierungsargument zeigt aber, dass so ein Programm, das den Zustandsgraphen erzeugt
und auf Zyklen hin überprüft, entweder nicht im Speicher des Computers Platz hätte oder zur
Laufzeit den ganzen Speicher aufbrauchen würde.
3.5. UNENTSCHEIDBARKEIT DER PRÄDIKATENLOGIK
3.5.3
181
Interpreter für Programmiersprachen als Logikprogramme
Das Halteproblem ist ein Grundphänomen der Informatik, das die Grenzen der prinzipiellen Berechenbarkeit aufzeigt. Die Unmöglichkeit, in Eiffel eine Prozedur halt zu schreiben,
ist nicht eine Schwäche von Eiffel, sondern das Phänomen tritt bei allen Programmiersprachen auf, die genügend stark sind.
Wir benutzen das Halteproblem nun um zu zeigen, dass die Prädikatenlogik unentscheidbar ist. Wir nehmen eine imperative Programmiersprache L, die genügend stark ist,
und schreiben einen Interpreter für die Sprache als Logikprogramm. Unser Ziel ist also
ein Logikprogramm P mit einem Prädikat halt/2, so dass gilt:
A4. Das Atom halt(π, i) hat eine erfolgreiche SLD-Herleitung aus P genau dann, wenn
das Programm π von L auf die Eingabe i hält.
Zusammen mit den Eigenschaften A1–A3 haben wir damit das Halteproblem für die
Programmiersprache L auf das Allgemeingültigkeitsproblem der Prädikatenlogik zurückgeführt. Wir haben eine effektive Methode, wie wir aus einem Programm π der Programmiersprache L und einer Eingabe i eine Formel Fπ,i der Prädikatenlogik konstruieren
können, so dass die Formel allgemeingültig ist genau dann, wenn das Programm π auf die
Eingabe i terminiert:
|= Fπ,i
⇐⇒
π terminiert auf Eingabe i
Da die Programmiersprache L genügend stark ist, kann man die Formel Fπ,i aus π und i
sogar mit einem Programm von L berechnen. Da das Halteproblem für die Programmiersprache L unentscheidbar ist, kann das Allgemeingültikeitsproblem der Prädikatenlogik
nicht in L entschieden werden. Die Prädikatenlogik ist also unentscheidbar.
Es bleibt zu zeigen, dass man in reinem Prolog einen Interpreter für eine genügend
starke Programmiersprache wie Eiffel schreiben kann. Wir tun das nicht für Eiffel selbst,
sondern für ein kleines Fragment einer imperativen Programmierprache. In der Vorlesung
Theoretische Informatik wird gezeigt werden, dass dieses Fragment genügend stark ist,
um jede Funktion, die überhaupt mit einem Computerprogramm berechnet werden kann,
zu berechnen. Wir betrachten die folgende Mini-Programmiersprache:
Statement
= Variable ‘:=’ Expression | Statement ‘;’ Statement |
‘IF’ Expression ‘THEN’ Statement ‘ELSE’ Statement ‘END’ |
‘WHILE’ Expression ‘DO’ Statement ‘END’
Expression = Variable | Constant | ‘(’ Expression Operator Expression ‘)’
Operator
= ‘+’ | ‘-’ | ‘*’ | ‘/’ | ‘=’ | ‘<’
In der Mini-Programmiersprache gibt es nur einen Datentyp, den Typ Bitstring. Ein
Bitstring ist eine (beliebig lange) Liste von 0 und 1. Bitstrings werden aufgefasst als
Binärzahlen von beliebiger Präzision. Die Operationen ‘+’, ‘-’, ‘*’, ‘/’, ‘=’, ‘<’ erhalten
dadurch ihre natürliche Interpretation (Addition, Subtraktion, Multiplikation, Division,
Gleichheit, Kleiner).
182
KAPITEL 3. LOGIKPROGRAMMIERUNG
Die Anweisungen der Programmiersprache haben die übliche Bedeutung:
Anweisung
Bedeutung
x := e
Weise der Variablen x den Wert von e zu.
s1 ; s2
Führe zuerst s1 aus, dann s2 .
IF e THEN s1 ELSE s2 END Falls e wahr ist, dann führe s1 aus, sonst s2 .
WHILE e DO s END
Solange e wahr ist, führe s aus.
Dabei fassen wir den leeren Bitstring als Booleschen Wert FALSE auf und jeden nicht-leeren
Bistring als Booleschen Wert TRUE.
Ein Programm π in der Programmiersprache besteht aus einer einzigen Anweisung s.
Wenn wir das Programm π auf eine Eingabe i laufen lassen, dann weisen wir die Eingabe i
zuerst der speziellen Variable ‘in’ zu und führen dann die Anweisung s aus. Die anderen
Variablen werden automatisch mit dem leeren Bitstring initialisiert. Falls die Ausführung
der Anweisung s terminiert, dann ist die Ausgabe des Programms der Wert der Variablen
‘out’ am Ende der Berechnung.
In Prolog stellen wir die Konstrukte der Programmiersprache als Terme dar:
Programkonstrukt
Prolog Term
x
var(x)
c
quote(c)
e1 op e2
exp(e1 , op, e2 )
x := e
assign(x, e)
s1 ; s2
seq(s1 , s2 )
IF e THEN s1 ELSE s2 END if(e, s1 , s2 )
WHILE e DO s END
while(e, s)
Bitstrings werden als 0-1-Listen dargestellt. Die Liste [b0 , b1 , . . . , bn−1 ] stellt die Zahl
b0 20 + b1 21 + · · · + bn−1 2n−1
dar. Beispiel: Die Liste [0, 1] stellt die Zahl 2 dar; die Liste [1, 0, 1, 1] stellt die Zahl 13
dar. Bitstrings nennen wir auch Werte.
value([]).
value([B|V]) :- bit(B), value(V).
Die Konstanten 0 und 1 stellten die Bits dar.
bit(0).
bit(1).
Der Zustand eines Programms ist gegeben durch eine Umgebung (Environment). In einer
Umgebung werden die Variablen des Programms an Werte gebunden. Eine Umgebung ist
eine Liste von Bindungen:
3.5. UNENTSCHEIDBARKEIT DER PRÄDIKATENLOGIK
183
environment([]).
environment([B|Env]) :- binding(B), environment(Env).
Eine Bindung ist ein Paar bestehend aus einer Variablen und einem Wert:
binding(bind(X,V)) :- variable(X), value(V).
Wir nehmen an, dass die Namen der Variablen ebenfalls Bitstrings sind:
variable(X) :- value(X).
Die Ausdrücke der Programmiersprache werden in einer Umgebung ausgewertet. Das
Prädikat eval(E, Env, V) wertet den Ausdruck E in der Umgebung Env zum Wert V aus:
eval(var(X),Env,V) :get(X,Env,V).
eval(quote(V),_,V).
eval(exp(E1,Op,E2),Env,V3) :eval(E1,Env,V1),
eval(E2,Env,V2),
apply(Op,V1,V2,V3).
Die Werte der Variablen in einem Ausdruck sind durch die Umgebung bestimmt. Das
Prädikat get(X, Env, V) gibt den Wert V der Variablen X in der Umgebung Env zurück. Falls
die Variable X in der Umgebung Env nicht definiert ist, wird der Wert [] zurückgegeben:
get(X,[bind(X,V)|_],V).
get(X,[bind(Y,_)|Env],V) :different(X,Y),
get(X,Env,V).
get(_,[],[]).
Das Prädikat set(X, Env1, V, Env2) ändert den Wert der Variablen X in der Umgebung Env1
zu V. Falls die Variable X noch keinen Wert in Env1 hat, wird eine neue Bindung hinzugefügt:
set(X,[bind(X,_)|Env],V,[bind(X,V)|Env]).
set(X,[bind(Y,V1)|Env1],V,[bind(Y,V1)|Env2]) :different(X,Y),
set(X,Env1,V,Env2).
set(X,[],V,[bind(X,V)]).
Das Prädikat apply(Op, V1, V2, V3) wendet den Operator Op auf die beiden Argumente
V1 und V2 an und berechnet das Resultat V3:
apply(+,V1,V2,V3)
apply(-,V1,V2,V3)
apply(*,V1,V2,V3)
apply(/,V1,V2,V3)
apply(=,V1,V2,V3)
apply(<,V1,V2,V3)
::::::-
add(V1,V2,V3).
sub(V1,V2,V3).
mul(V1,V2,V3).
div(V1,V2,V3).
equal(V1,V2,V3).
less(V1,V2,V3).
184
KAPITEL 3. LOGIKPROGRAMMIERUNG
Durch die Ausführung einer Anweisung verändert sich die Umgebung eines Programms.
Das Prädikat exec(S, In, Out) bedeutet, dass die Anweisung S terminiert und durch die
Ausführung von S die Umgebung In in die Umgebung Out übergeht.
Bei einer Zuweisung assign(X, E) wird zuerst der Ausdruck E in der Umgebung In zu
einem Wert V ausgewertet und dann wird der Wert der Variablen X in der Umgebung In
abgeändert zu V:
exec(assign(X,E),In,Out) :eval(E,In,V),
set(X,In,V,Out).
Bei der sequenziellen Komposition seq(S1, S2) wird zuerst die Anweisung S1 in der Umgebung In ausgeführt. Dies ergibt eine neue Umgebung Env, in der dann die zweite Anweisung S2 ausgeführt wird.
exec(seq(S1,S2),In,Out) :exec(S1,In,Env),
exec(S2,Env,Out).
Bei der bedingten Anweisung if(E, S1, S2) wird zuerst der Testausdruck E in der Umgebung In zu einem Wert V ausgewertet. Falls der Wert V wahr ist, wird die Anweisung S1
ausgeführt, sonst die Anweisung S2:
exec(if(E,S1,S2),In,Out) :eval(E,In,V),
branch(V,S1,S2,In,Out).
branch(V,S1,_,In,Out) :true(V), exec(S1,In,Out).
branch(V,_,S2,In,Out) :false(V), exec(S2,In,Out).
Bei der Anweisung while(E, S) wird der Testausdruck E in der Umgebung In zu einem
Wert V ausgewertet. Falls der Wert V wahr ist, dann wird die Anweisung S einmal ausgeführt. Die Umgebung In geht dabei über in die Umgebung Env. In der neuen Umgebung Env wird die ganze Anweisung while(E, S) nochmals ausgeführt. Falls der Wert V
des Testausdrucks E falsch ist, dann wird die Anweisung S nicht ausgeführt und die Umgebung In bleibt unverändert:
exec(while(E,S),In,Out) :eval(E,In,V),
loop(V,E,S,In,Out).
loop(V,_,_,In,In) :false(V).
loop(V,E,S,In,Out) :true(V),
exec(S,In,Env),
exec(while(E,S),Env,Out).
3.5. UNENTSCHEIDBARKEIT DER PRÄDIKATENLOGIK
185
Die Idee bei der Ausführung einer While-Schleife ist, dass die folgenden zwei Anweisungen
denselben Effekt haben:


IF e THEN



 s;
WHILE e DO s END ist dasselbe wie

WHILE e DO s END




END
Die leere Liste wird als Wert FALSE interpretiert und nicht-leere Listen als Wert TRUE:
true([_|_]).
false([]).
Verschiedene Hilfsprädikate werden benötigt. Das Prädikat different(V1, V2) testet, ob
die beiden Bitstrings V1 und V2 verschieden sind:
different([],[_|_]).
different([_|_],[]).
different([X|_],[Y|_]) :- diff(X,Y).
different([X|V1],[X|V2]) :- different(V1,V2).
Das Bit 0 ist verschieden vom Bit 1:
diff(0,1).
diff(1,0).
Das Prädikat add(V1, V2, V3) gilt, falls V1 + V2 = V3.
add([],V,V).
add([X|V],[],[X|V]).
add([0|V1],[0|V2],[0|V3])
add([0|V1],[1|V2],[1|V3])
add([1|V1],[0|V2],[1|V3])
add([1|V1],[1|V2],[0|V3])
::::-
add(V1,V2,V3).
add(V1,V2,V3).
add(V1,V2,V3).
addc(V1,V2,V3).
Das Prädikat addc(V1, V2, V3) gilt, falls V1 + V2 + 1 = V3.
addc([],V1,V2) :- succ(V1,V2).
addc([X|V1],[],V2) :- succ([X|V1],V2).
addc([0|V1],[0|V2],[1|V3]) :- add(V1,V2,V3).
addc([0|V1],[1|V2],[0|V3]) :- addc(V1,V2,V3).
addc([1|V1],[0|V2],[0|V3]) :- addc(V1,V2,V3).
addc([1|V1],[1|V2],[1|V3]) :- addc(V1,V2,V3).
Das Prädikate succ(V1, V2) gilt, falls V1 + 1 = V2.
succ([],[1]).
succ([0,X|V],[1,X|V]).
succ([1|V1],[0|V2]) :- succ(V1,V2).
186
KAPITEL 3. LOGIKPROGRAMMIERUNG
Die Subtraktion wird auf die Addition zurückgeführt.
sub(V1,V2,V3) :- add(V2,V3,V1).
Die Kleiner-Relation wird ebenfalls auf die Addition zurückgeführt.
less(V1,V2,[1]) :- succ(V1,V3), add(V3,_,V2).
less(V1,V2,[]) :- add(V2,_,V1).
Das Prädikat mul(V1, V2, V3) gilt, falls V1 ∗ V2 = V3.
mul([],_,[]).
mul([0|V1],V2,[0|V3]) :mul(V1,V2,V3).
mul([1|V1],V2,V4) :mul(V1,V2,V3),
add(V2,[0|V3],V4).
Eine Anweisung S hält auf die Eingabe V, falls die Ausführung von S in der Anfangsumgebung, wo die Variable [0] gebunden wird an den Eingabewert V, terminiert und
irgendeine Endumgebung liefert:
halt(S,V) :- exec(S,[bind([0],V)],_).
Sei nun s eine Anweisung und v eine Eingabe, beide dargestellt durch geschlossene PrologTerme. Dann hat das Atom halt(s, v) eine erfolgreiche SLD-Herleitung genau dann, wenn
das Programm s auf die Eingabe v hält. Die folgenden Aussagen sind aequivalent:
VV
A1. Die Formel
P → halt(s, v) ist allgemeingültig.
A2. P |= halt(s, v)
A3. Das Atom halt(s, v) hat eine erfolgreiche SLD-Herleitung aus P .
A4. Das Programm s hält auf die Eingabe v.
Da das Halteproblem unentscheidbar ist, folgt daraus, dass die Prädikatenlogik unentscheidbar ist.
Rekursionstheoretiker könnte man diesen Abschnitt wie folgt erklären: Wir haben
∀∃ Einem
gezeigt, dass jedes rekursiv aufzählbare Prädikat durch reine Hornklauseln definierbar
ist. Also ist die Prädikatenlogik untentscheidbar. Ein Rekursionstheoretiker würde sich sogar
mit den Strichzahlen (siehe Abschnitt 2.6) begnügen und sie so definieren:
nat(0).
nat(s(V)) :- nat(V).
Die Definitionen der arithmetischen Grundoperationen sind dann viel einfacher als im Falle der
Binärzahlen:
3.5. UNENTSCHEIDBARKEIT DER PRÄDIKATENLOGIK
add(0,V,V).
add(s(V1),V2,s(V3)) :- add(V1,V2,V3).
sub(V1,V2,V3) :- add(V2,V3,V1).
less(0,_).
less(s(V1),s(V2)) :- less(V1,V2).
mul(0,_,0).
mul(s(V1),V2,V3) :- mul(V1,V2,V4), add(V2,V4,V3).
different(0,s(_)).
different(s(_),0).
different(s(V1),s(V2)) :- different(V1,V2).
187
188
KAPITEL 3. LOGIKPROGRAMMIERUNG
Anhang A
Mengentheoretische Notationen
Mengen
Mengen kann man sich als Listen vorstellen, bei denen es nicht auf die Anzahl und die
Reihenfolge der Elemente ankommt. Mengen können aber auch unendlich viele Elemente
enthalten.
Elementbeziehung
Wir schreiben a ∈ X für “a ist in X” oder “a ist ein Element der Menge X.”
Wir schreiben a ∈
/ X für “a ist nicht ein Element von X.”
Leere Menge
Die leere Menge wird mit ∅ bezeichnet.
Die leere Menge hat keine Elemente und darum gilt für jedes a, dass a ∈
/ ∅.
Aufzählung
Die Menge, die genau aus den Elementen a1 , . . . , an besteht, wird mit {a1 , . . . , an } bezeichnet.
Es gilt gilt b ∈ {a1 , . . . , an } genau dann, wenn b = a1 oder . . . oder b = an .
Einermengen
Als Spezialfall haben wir, dass {a} die Menge ist, die genau aus dem Element a besteht.
Es gilt b ∈ {a} genau dann, wenn b = a.
Teilmengenbeziehung
Die Menge X ist eine Teilmenge von Y genau dann, wenn jedes Element von X auch
zu Y gehört.
Wir schreiben X ⊆ Y , falls X eine Teilmenge von Y ist.
189
190
ANHANG A. MENGENTHEORETISCHE NOTATIONEN
Wir schreiben X 6⊆ Y , falls X nicht Teilmenge von Y ist.
Beispiel: {1, 3} ⊆ {1, 2, 3, 5}, {1, 4} 6⊆ {1, 2, 3, 5}.
Extensionalitätsprinzip
Zwei Mengen X und Y sind gleich genau dann, wenn sie dieselben Elemente enthalten.
Es ist also X = Y genau dann, wenn X ⊆ Y und Y ⊆ X.
Beispiel: {2, 3, 1, 1} = {1, 2, 3}, {1, 2} =
6 {1}.
Durchschnitt
Mit X ∩ Y wird der Durchschnitt von X und Y bezeichnet.
Es gilt a ∈ X ∩ Y genau dann, wenn a ∈ X und a ∈ Y .
Beispiel: {1, 3, 5} ∩ {2, 3, 5, 7} = {3, 5}.
Vereinigung
Mit X ∪ Y wird die Vereinigung von X und Y bezeichnet.
Es gilt a ∈ X ∪ Y genau dann, wenn a ∈ X oder a ∈ Y .
Beispiel: {1, 3, 5} ∪ {2, 3, 5, 7} = {1, 2, 3, 5, 7}.
Mengendifferenz
Mit X \ Y wird die Differenz von X und Y bezeichnet.
Es gilt a ∈ X \ Y genau dann, wenn a ∈ X und a ∈
/ Y.
Beispiel: {1, 3, 5} \ {2, 3, 5, 7} = {1}.
Aussonderung
Mit {a ∈ X | ϕ(a)} wird die Menge aller Elemente a aus X, welche die Eigenschaft ϕ(a)
haben, bezeichnet.
Es gilt b ∈ {a ∈ X | ϕ(a)} genau dann, wenn b ∈ X und ϕ(b) zutrifft.
Beispiel: {n ∈ N | n ist gerade} ist die Menge aller geraden, natürlichen Zahlen.
Potenzmenge
Die Potenzmenge von X ist die Menge aller Teilmengen von X.
Die Potenzmenge von X wird mit P(X) bezeichnet.
Es ist Y ∈ P(X) genau dann, wenn Y ⊆ X.
Beispiel: P({0, 1}) = {∅, {0}, {1}, {0, 1}}
191
Geordnetes Paar
Mit ha, bi wird das geordnete Paar von a und b bezeichnet.
Es gilt ha1 , b1 i = ha2 , b2 i genau dann, wenn a1 = a2 und b1 = b2 .
Man kann das Paar ha, bi definieren als die Menge {{a}, {a, b}}.
Kartesisches Produkt
Mit X × Y wird das kartesische Produkt von X und Y bezeichnet.
Es ist die Menge aller Paare ha, bi mit a ∈ X und b ∈ Y .
Beispiel: {1, 2, 3} × {4, 5} = {h1, 4i, h1, 5i, h2, 4i, h2, 5i, h3, 4i, h3, 5i}.
Relationen
Eine zweistellige Relation R auf X ist eine Teilmenge von X × X.
Falls ha, bi ∈ R, dann sagen wir “a ist in Relation R zu b”.
Funktionen
Eine Funktion von X nach Y ist eine Teilmenge von X × Y , mit den folgenden beiden
Eigenschaften:
(1) Für alle a ∈ X und b, c ∈ Y gilt: Falls ha, bi ∈ f und ha, ci ∈ f , dann ist b = c.
(2) Für alle a ∈ X gibt es ein b ∈ Y so, dass ha, bi ∈ f .
Für a aus X bezeichnet man mit f (a) das eindeutig bestimmte b aus Y mit ha, bi ∈ f .
Es gilt f (a) = b genau dann, wenn ha, bi ∈ f .
Wir schreiben f : X → Y , falls f eine Funktion von X nach Y ist.
Eine endliche Funktion f hat immer die Gestalt
{ha1 , b1 i, . . . , han , bn i},
wobei a1 , . . . , an paarweise verschieden sind.
Mit dom(f ) wird der Definitionsbereich von f und mit ran(f ) der Wertebereich von f
bezeichnet.
Es gilt a ∈ dom(f ) genau dann, wenn es ein b gibt mit ha, bi ∈ f .
Es gilt b ∈ ran(f ) genau dann, wenn es ein a gibt mit ha, bi ∈ f .
Für eine Funkion f gilt immer f : dom(f ) → ran(f ).
192
ANHANG A. MENGENTHEORETISCHE NOTATIONEN
n-Tupel und n-faches kartesisches Produkt
Ein n-Tupel auf einer Menge X ist eine Funktion f : {1, . . . , n} → X.
Ein n-Tupel f wird oft als hx1 , . . . , xn i geschrieben, wobei xi = f (i).
Die Menge aller n-Tupel auf X wird mit X n bezeichnet. Es gilt:
X n = {f | f : {1, . . . , n} → X} = {hy1 , . . . , yn i | yi ∈ X für i = 1, . . . , n}
Man kann X n auch auffassen als n-faches kartesisches Produkt von X mit sich selbst:
Xn = X
. . × X}
| × .{z
n mal
Herunterladen