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