Automatische Deduktion, SS 2014, vom 04.04.2014 Automatische Deduktion Teil 1 : Deduktionssysteme: Grundlagen Sommersemester 2014 Professor Dr. Manfred Schmidt-Schauß Fachbereich Informatik und Mathematik J.W.Goethe-Universität Frankfurt 1 Automatische Deduktion, SS 2014, vom 04.04.2014 2 Inhaltsverzeichnis 1 Einführung und Überblick: Grundlagen und Anwendungen von Automatischen Deduktionssystemen 1.1 Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Vorbemerkung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Begriffe und Teilgebiete aus der Automatischen Deduktion . . . . 1.3.1 Beweiserbau . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.2 Gleichheitsbehandlung . . . . . . . . . . . . . . . . . . . . 1.3.3 Termersetzungssysteme . . . . . . . . . . . . . . . . . . . 1.3.4 Unifikation . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.5 Logiken und (interaktive) Beweiser höherer Ordnung . . . 1.3.6 Nichtmonotone Logiken . . . . . . . . . . . . . . . . . . . 1.3.7 Logische Methoden wissensbasierter Systeme . . . . . . . 1.3.8 Modallogik . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.9 Deduktive Programmsynthese . . . . . . . . . . . . . . . . 1.3.10 Logisches Programmieren . . . . . . . . . . . . . . . . . . 1.3.11 Anwendungen Automatischer Deduktionssysteme . . . . . 1.3.12 Wichtigste Methoden . . . . . . . . . . . . . . . . . . . . 1.4 Einige computergeführte Beweise . . . . . . . . . . . . . . . . . . 1.5 Das Problem der Robbins Algebren . . . . . . . . . . . . . . . . . 1.6 Methodenwahl: menschliche oder maschinelle? . . . . . . . . . . . 1.7 Einführende Beispiele . . . . . . . . . . . . . . . . . . . . . . . . 1.8 Motivationsbeispiele . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 8 9 9 9 9 9 9 10 10 10 10 10 10 11 11 13 14 14 15 2 Aussagenlogik (propositional calculus) 19 2.1 Folgerungsbegriffe . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.2 Tautologien und einige einfache Verfahren . . . . . . . . . . . . . 23 2.3 Normalformen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.4 Schnelle CNF (Tseitin-Kodierung) . . . . . . . . . . . . . . . . . 27 2.5 SAT - Problem und Hornklauseln in Aussagenlogik . . . . . . . . 30 2.6 Resolution für Aussagenlogik . . . . . . . . . . . . . . . . . . . . 34 2.7 Davis-Putnam-Logemann-Loveland-Verfahren . . . . . . . . . . . 37 2.8 Davis-Putnam-Logemann-Loveland Verfahren mit Backjumping . 45 2.8.1 Restart, Regeln zum Lernen und Vergessen . . . . . . . . 49 2.9 Tableaukalkül für Aussagenlogik . . . . . . . . . . . . . . . . . . 50 2.9.1 Tableau-Kalkül für Aussagenlogik . . . . . . . . . . . . . 51 2.10 Entscheidungsprozeduren für quantifizierte Boolesche Formeln . . 59 2.10.1 Formeln in Klauselform . . . . . . . . . . . . . . . . . . . 62 2.11 Ein DPLL-ähnliches Entscheidungsverfahren für PränexKlauselmengen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 2.11.1 Optimierungen: . . . . . . . . . . . . . . . . . . . . . . . . 66 2.12 Internet Referenzen (unvollständig, bitte selbst googlen) . . . . . 67 2.13 Internationale Standardisierung der Formel-Eingaben . . . . . . . 68 3 Automatische Deduktion, SS 2014, vom 04.04.2014 3 Überblick über den Aufbau und Funktionsweise eines Automatischen Deduktionssystems am Beispiel eines Resolutionsbeweisers 3.0.1 Logik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.0.2 Kalkül . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.0.3 Logische Zustandsübergangssysteme . . . . . . . . . . . . 3.0.4 Steuerung . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.0.5 Verwendung, Dialogverhalten . . . . . . . . . . . . . . . . 69 69 72 74 75 76 4 Prädikatenlogik (P L1 ) und Resolution 4.1 Syntax der Prädikatenlogik erster Stufe . . . . . . . . . . 4.2 Semantik von P L1 (nach Tarski) . . . . . . . . . . . . . . 4.2.1 Berechenbarkeitseigenschaften der Prädikatenlogik 4.3 Normalformen von P L1 -Formeln . . . . . . . . . . . . . . 77 77 81 90 90 . . . . . . . . . . . . . . . . 5 Resolution und Unifikation 5.1 Grundresolution: Resolution ohne Unifikation . . . . . . . . . . . 5.1.1 Resolution im allgemeinen Fall . . . . . . . . . . . . . . . 5.2 Unifikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Komplexität des Unifikationsalgorithmus . . . . . . . . . . . . . . 5.3.1 Ein effizienterer Unifikationsalgorithmus nach Martelli und Montanari . . . . . . . . . . . . . . . . . . . . . . . . 5.4 Der allgemeine Resolutionskalkül . . . . . . . . . . . . . . . . . . 5.5 Schritte zum Vollständigkeitsbeweis der allgemeinen Resolution . 5.6 Ein Beispiel für Resolutionsbeweise: Hilbertkalkül . . . . . . . . . 5.7 Löschregeln: Subsumtion, Tautologie und Isoliertheit . . . . . . . 96 96 97 102 105 6 Einschränkung und Varianten der Resolution 6.1 Set-of-Support . . . . . . . . . . . . . . . . . . 6.2 UR-Resolution . . . . . . . . . . . . . . . . . . 6.3 Hyperresolution . . . . . . . . . . . . . . . . . . 6.4 Input-Resolution und Unäre Resolution . . . . 6.5 Eingabe-Resolution . . . . . . . . . . . . . . . . 6.6 Lineare Resolution . . . . . . . . . . . . . . . . 6.7 SL-Resolution . . . . . . . . . . . . . . . . . . . 6.8 SL-Resolution für Horn Klauseln . . . . . . . . 118 118 118 122 122 123 124 125 125 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 108 108 111 112 7 Tableau Kalkül für P L1 127 7.1 Tableau mit Grundtermen . . . . . . . . . . . . . . . . . . . . . . 127 7.2 Tableau mit freien Variablen . . . . . . . . . . . . . . . . . . . . 129 8 DPLL mit Theorien: SMT: Satisfiability 8.1 Algorithmus zu SMT . . . . . . . . . . . 8.2 Direkte SMT-Prozeduren . . . . . . . . 8.3 Indirekte SMT-Prozeduren . . . . . . . 8.4 Die Regeln der DPLL(T)-Prozedur . . . modulo Theories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 134 135 136 136 Automatische Deduktion, SS 2014, vom 04.04.2014 4 9 Grammatik-basierte Kompression von Termen und zugehörige Algorithmen 139 9.1 Lempel-Ziv Kompression . . . . . . . . . . . . . . . . . . . . . . . 139 9.2 Straight Line Programs (SLP) und Singleton Context Free Grammars (SCFG) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 9.3 Ein Verfahren zur Erzeugung einer SLP aus einer LZ77Kompression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 9.4 Schnelle Algorithmen auf den SLP . . . . . . . . . . . . . . . . . 143 9.5 Kompression von Termen . . . . . . . . . . . . . . . . . . . . . . 145 9.5.1 Algorithmen auf STG-komprimierten Termen . . . . . . . 146 9.5.2 Gleichheitstest . . . . . . . . . . . . . . . . . . . . . . . . 148 9.5.3 Matching und Unifikation von komprimierten Termen . . 148 9.5.3.1 Finden der Position einer Variablen: . . . . . . . 149 9.5.3.2 Finden bzw. Erzeugen eines Nichtterminals der Position einer Variablen: . . . . . . . . . . . . . 150 9.5.3.3 Matching . . . . . . . . . . . . . . . . . . . . . . 151 9.5.3.4 Anmerkungen . . . . . . . . . . . . . . . . . . . 151 9.5.4 Unifikation unter Kompression . . . . . . . . . . . . . . . 152 10 Automatische induktive Beweise und ein System dazu: VeriFun153 10.1 Zur Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 10.1.1 Auswertung von Ausdrücken . . . . . . . . . . . . . . . . 155 10.1.2 Boolesche Ausdrücke und Auswertungen . . . . . . . . . . 156 10.2 Syntax und Semantik der logischen Formeln . . . . . . . . . . . . 157 10.2.1 Allgemeine Formeln . . . . . . . . . . . . . . . . . . . . . 158 10.3 Beweise mit vollständiger Induktion . . . . . . . . . . . . . . . . 159 10.4 Beispiel: Kommutativität der Peano-Addition . . . . . . . . . . . 159 10.4.1 Beobachtungen aus dem Beweis . . . . . . . . . . . . . . . 161 10.5 Terminierung von Funktionen . . . . . . . . . . . . . . . . . . . . 161 10.6 Listen-Beispiele in VeriFun . . . . . . . . . . . . . . . . . . . . . 162 10.6.1 Listen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 1 1.1 Einführung und Überblick: Grundlagen und Anwendungen von Automatischen Deduktionssystemen Literatur Folgende Bücher und Handbuchartikel können als Grundlage für ein vertieftes Studium dienen: [And86, And02, BN98, Duf91, Bib83, Bib92, BS98, BB87, RB79] [Bun83, CL73, EFT86, Gal86, GN87, HK89, Kel03], [RS98, Kow79, Lov87, Pau94, SA94, WOLB84, BS94, BS99] [KK06] Automatische Deduktion, SS 2014, vom 04.04.2014 5 Für spezielle Themenbereiche können auch folgende Bücher verwendet werden: [Ede92, FLTZ93, Tha88, Smu71] Literatur [And81] P. Andrews. Theorem proving via general matings. 28(2):193–214, 1981. J. ACM, [And86] Peter B. Andrews. An Introduction to mathematical logic and type theory: to truth through proof. Academic Press, 1986. [And02] Peter B. Andrews. An Introduction to mathematical logic and type theory: to truth through proof. Number 27 in Applied Logic Series. Kluwer ademic Press, 2002. [BB87] K.-H. Bläsisus and H.-J. Bürckert. Deduktionssysteme - Automatisierung des logischen Denkens. Oldenbourg Verlag, 1987. [Bib83] W. Bibel. Automated Theorem Proving. Vieweg, Braunschweig, 1983. [Bib92] W. Bibel. Deduktion, Automatisierung der Logik. Oldenbourg, 1992. [BN98] Franz Baader and Tobias Nipkow. Term Rewriting and All That. Cambridge University Press, 1998. [BS94] Franz Baader and Jörg H. Siekmann. Unification theory. In Handbook of Logic in Artificial Intelligence and Logic Programming, volume 2. Oxford Science Publications, 1994. [BS98] Wolfgang Bibel and Peter H. Schmitt, editors. Automated Deduction - A Basis for Applications, volume I – III. Kluwer Academic Publishers, 1998. [BS99] Franz Baader and Wayne Snyder. Unification theory. In Handbook of Automated Reasoning. Elsevier Science Publishers, 1999. to appear. [Bun83] A. Bundy. The Computer Modelling of Mathematical Reasoning. Academic Press, London, 1983. [CL73] Chin-Liang Chang and Richard Char-Tung Lee. Symbolic Logic and Mechanical Theorem Proving. Academic Press, New York, 1973. [Duf91] David A. Duffy. Principles of Automated Theorem Proving. John Wiley & Sons, 1991. [Ede92] Elmar Eder. Relative Complexities of First order Calculi. Vieweg, Braunschweig, 1992. Automatische Deduktion, SS 2014, vom 04.04.2014 6 [EFT86] H.-D. Ebbinghaus, J. Flum, and W. Thomas. Einführung in die mathematische Logik. Wissenschaftliche Buchgesellschaft Darmstadt, 1986. [Fit90] Melvin Fitting. First-Order Logic and Automated Theorem Proving. Springer, 1990. [FLTZ93] C. Fermüller, A. Leitsch, T. Tammet, and N. Zamov. Resolution methods for the decision problem, volume 679 of LNCS. SpringerVerlag, 1993. [Gal86] Jean H. Gallier. Logic for Computer Science: Foundations of Automatic Theorem Proving. Harper & Row Publishers, New York, 1986. [GGSS08] Adrià Gascón, Guillem Godoy, and Manfred Schmidt-Schauß. Context matching for compressed terms. In 23rd Annual IEEE Symposium on Logic in Computer Science (LICS 2008), pages 93–102. IEEE Computer Society, June 2008. [GGSS11] Adria Gascón, Guillem Godoy, and Manfred Schmidt-Schauß. Unification and matching on compressed terms. ACM Trans. Comput. Log., 12(4):26:1–26:37, 2011. [GN87] Michael R. Genesereth and Nils J. Nilsson. Logical Foundations of Artificial Intelligence. Morgan Kaufmann Publishers, 1987. [Göd31] K Gödel. Über formal unentscheidbare Sätze der Principia Mathematica und verwandter Systeme I. Mh. Math. Phys., 38:173–198, 1931. [Hak85] A. Haken. The intractability of resolution. Theoretical Computer Science, 39:297–308, 1985. [HK89] Dieter Hofbauer and Ralf-Detlef Kutsche. Grundlagen des maschinellen Beweisens. Vieweg, 1989. [Kel03] John Kelly. Logik im Klartext. Prentice Hall; Pearson Studium, 2003. [KK71] R. Kowalski and D. Kuehner. Linear resolution with selection function. Artificial Intelligence, 2:227–260, 1971. [KK06] Martin Kreuzer and Stefan Khling. Logik in der Informatik. Pearson Studium, 2006. [Kow79] R. Kowalski. Logic for Problem Solving. North Holland, Amsterdam, 1979. Automatische Deduktion, SS 2014, vom 04.04.2014 7 [Lov87] Donald W. Loveland. Automated Theorem Proving: A Logical Basis, volume 6 of Fundamental Studies in Computer Science. NorthHolland, 1987. [MM82] A. Martelli and U. Montanari. An efficient unification algorithm. ACM transaction on Programming Languages and Systems, 4(2):258–282, 1982. [Nil80] N. Nilsson. Principles of Artificial Intelligence. Tioga, Palo Alto, CA, 1980. [NOT06a] Robert Nieuwenhuis, Albert Oliveras, and Cesare Tinelli. Solving sat and sat modulo theories: From an abstract davis–putnam– logemann–loveland procedure to dpll(). J. ACM, 53(6):937–977, 2006. [NOT06b] Robert Nieuwenhuis, Albert Oliveras, and Cesare Tinelli. Solving SAT and SAT Modulo Theories: From an abstract Davis–Putnam– Logemann–Loveland procedure to DPLL(T). J.ACM, 53(6):937– 977, 2006. [Pau94] Larry C. Paulson. Isabelle: a Generic Theorem prover. SpringerVerlag, 1994. [Pla94] Wojciech Plandowski. Testing equivalence of morphisms in contextfree languages. In ESA 94, volume 855 of Lecture Notes in Computer Science, pages 460–470, 1994. [PM68] M. Paterson and M.Wegman. Linear unification. Journal of Computer and System Science, 16(2):158–167, 1968. [RB79] J S. Moore R. Boyer. A Computational Logic, volume 29. Academic Press, London, 1979. [Rob65] J. A. Robinson. A machine-oriented logic based on the resolution principle. Journal of the ACM, 12:23–41, 1965. [RS98] C. Rollinger and Peter H. Schmitt. Künstliche Intelligenz: Themenheft Deduktion und Anwendung, 1998. in german. [SA94] Rolf Socher-Ambrosius. Deduktionssysteme. Wissenschaftsverlag, 1994. in german. [Smu71] Raymond M. Smullyan. First-Order Logic. Springer, 1971. [ST12] Uwe Schöning and Jacobo Torán. Das Erfüllbarkeitsproblem SAT. lehmanns media, 2012. [Sti86] Mark E. Stickel. A prolog technology theorem prover: implementation by an extended prolog compiler. In Proc. of 8th Int. Conf. on Automated Deduction, number 230 in Lecture Notes in Computer Science, pages 573–587. Springer-Verlag, 1986. BI- Automatische Deduktion, SS 2014, vom 04.04.2014 8 [Tar53] A. Tarski. Der Wahrheitsbegriff in den formalisierten Sprachen. Studia Philospohica I. 1953. [Tha88] André Thayse, editor. From Standard Logic to Logic Programming. John Wiley & Sons, 1988. [WOLB84] L. Wos, R. Overbeek, E. Lusk, and J. Boyle. Automated Reasoning – Introduction and Applications. Prentice-Hall, Englewood Cliffs, NJ, 1984. 1.2 Vorbemerkung Als Motivation und erste Information zu Automatischen Deduktionssystemen (ATP) und einem Wettbewerb sei auf die Web-Seite http://www.cs.miami.edu/ tptp/CASC/ verwiesen. Die interessantesten und erfolgreichsten Resultate von Automatischen Deduktionssystemen wurden erzielt in den Bereichen: Mathematik, Automatische Software Generierung, Software Verifikation, und Hardware-Verifikation. Mathematik: Robbins Algebra Problem (s.u.); Quasi-Gruppen Identitäten; Geometrie-Beweise. Software Generierung: Scheduling algorithmen; Programme aus Spezifikationen; AMPHION (gesponsert von der NASA), Wiederverwendung und zuverlässige Komponenten. Software Verifikation Z.B.: (SVRC) an der University of Queensland Karlsruhe Interactive Verifier (KIV) PVS-System Model-Checker. Hardware Verifikation: Verifikation von Implementierungen von IEEEGleitkomma- Standards, Addierer, Multiplizierer, Mikroprozessoren (AMD5K86, FM9001). Spezialisierte Software-Werkzeuge. Das Gebiet der Automatischen Deduktionssysteme ist jünger im Vergleich zum Gebiet der Logik. Insbesondere bedeutet dies, dass Notationen und Begriffe sich z.T. nur im Englischen mit einer festen Bedeutung etabliert haben. Benutzt man Lehrbücher oder weiterführende Literatur (Handbücher, Artikel), so wird man mit verschiedenen Notationen und verschiedenen Namen für gleiche Begriffe konfrontiert. So werden manche englischen Begriffe auf verschiedene Weise ins deutsche übersetzt. Glücklicherweise sind die Begriffsbildungen diesselben, so dass beim Literaturstudium nach etwas Einarbeitung keine wesentlichen Schwierigkeiten auftauchen. Automatische Deduktion, SS 2014, vom 04.04.2014 1.3 9 Begriffe und Teilgebiete aus der Automatischen Deduktion Im folgenden eine Liste von Teilgebieten und Anwendungsgebieten. 1.3.1 Beweiserbau Die Softwaretechnik der Automatischen Deduktionssysteme. Hier werden Fragen zur Softwaretechnik von Deduktionssystemen, effizienten Implementierungen, Datenstrukturen, Heuristiken untersucht. Ebenso Fragen der Benutzung: interaktiv, vollautomatisch, halbautomatisch, verifizierend, Erzeugung von lesbaren Beweisen. 1.3.2 Gleichheitsbehandlung Theorie und Verfahren zur Behandlung der Gleichheitsaxiomen, Simplifikationen und operationalen Semantiken. Für Herleitung reichen naive Suchstrategien oft nicht aus. 1.3.3 Termersetzungssysteme Themengebiet sind gerichtete Gleichungen, deren Benutzung als Transformationssystem oder zum Entscheiden des Wortproblems. Das kann man auch als Untergebiet der Gleichheitsbehandlung ansehen. 1.3.4 Unifikation Zentrale Fragestellung ist, ob zwei vorgegebene Strukturen mit offenen Stellen (Variablen) gleichgemacht werden können. Die Unifikationstheorie liefert spezielle Algorithmen und das theoretische Rüstzeug für die Untersuchung solcher Probleme. Diese spezielle Fragestellung tritt verbreiteter auf, als man annimmt: Gemeinsamen Instanzen von Pattern, Lösungen von Gleichungen, Logiken erster Ordnung, Typcheck in Programmiersprachen, Gleichungstheorien, LambdaKalkül. 1.3.5 Logiken und (interaktive) Beweiser höherer Ordnung Aus dem ersten Beweissystem dieser Art: LCF, ist die Programmiersprache ML hervorgegangen. Der Beweiser HOL ist eines der Nachfolgesysteme. Hierzu zählt auch Isabelle: mit einer eigenen Logik; eigenem Beweis-system und der Programmiersprache Standard ML. Charakteristisch ist die interaktive Vorgehensweise: Ein Mensch steuert das Vorgehen des Beweisers durch vielfältige Angaben: Lemmas, Strategien usw. Die zugrundeliegende Logik garantiert aber, dass es nach Abschluss des Beweises keine formalen Fehler gibt. Diese Systeme werden auch im Sinne eines Beweisprüfers verwendet. Nachteilig ist die Dauer einer Sitzung zu einem Beweis (kann Tage/Wochen/ Monate sein). Automatische Deduktion, SS 2014, vom 04.04.2014 1.3.6 10 Nichtmonotone Logiken Eine Logik heißt monoton, wenn durch die Hinzunahme neuer Annahmen nicht weniger folgt als ohne diese Annahmen: Φ |= T H impliziert Φ ∪ Ξ |= T H. Die klassischerweise untersuchten Logiken sind monoton, viele Herleitungsprobleme der Künstlichen Intelligenz jedoch nicht. 1.3.7 Logische Methoden wissensbasierter Systeme Die wichtigsten Probleme sind die Entwicklung von Inferenzmethoden für wissensbasierte Systeme und die Mechanisierung nichtklassischer Logiken. 1.3.8 Modallogik Dies sind Gegenstand älterer logische/philosophische Untersuchungen. Erst durch den Versuch, geeignete Formulierungssprachen zur computergerechten Eingabe von verschiedenen Problemen zu finden, wurden diese Logiken wiederbelebt und für die Computerverarbeitung entdeckt. 1.3.9 Deduktive Programmsynthese Idee: Mit Hilfe deduktiver Verfahren ein Programm automatisch zu synthetisieren. Z.B.: In der konstruktiven Logik höherer Ordnung entsprechen Existenzbeweise einem ablauffähigen Programm. 1.3.10 Logisches Programmieren Die Prädikatenlogik, insbesondere das Fragment der Hornklauseln, wird als (Grundlage einer) Programmiersprache (Prolog) aufgefasst. Implementierungen, Erweiterungen (Negation, Constraints, ..), werden untersucht. 1.3.11 Anwendungen Automatischer Deduktionssysteme • logische Programmiersprachen, Constraints + logische Programmiersprachen. • deduktive Datenbanken • Planen, Plangenerierung in Systemen der KI. • Diagnose. • Nachweis der Korrektheit von Hard- oder Software: – Programmverifikation – Programmanalyse – Automatische Programm Generierung – Untersuchung von Sicherheitsprotokollen Automatische Deduktion, SS 2014, vom 04.04.2014 11 • Inferenzkomponenten für wissensbasierte Systeme • Wissensrepräsentationformalismen 1.3.12 Wichtigste Methoden Resolution Tableaukalküle Gleichheit Termersetzung, Paramodulation, Superposition Modelchecking 1.4 Einige computergeführte Beweise Einige lange Zeit offene Problemen, die mit Computerhilfe gelöst wurden, (allerdings nicht mit allgemeinen automatischen Deduktionssystemen), sind: • Der Vierfarbensatz: jede ebene Landkarte läßt sich mit vier Farben färben. Die Lösungsmethode war ein spezielles Programm, das einige tausend Konfigurationen zu untersuchen hatte. • Nichtexistenz einer endlichen projektiven Ebene der Ordnung 10. Hintergrund ist die Axiomatisierung der projektiven Ebenen: 1. Durch je zwei Punkte geht genau eine Gerade. 2. Je zwei Geraden schneiden sich in einem Punkt. 3. Es gibt 4 verschiedene Punkte von denen keine drei kollinear sind. Stichwortartig einige Eigenschaften: Ordnung sei n; n + 1 ist dann die Anzahl der Punkte auf einer Geraden = Anzahl der Geraden durch einen Punkt. Alle Geraden haben gleich viele Punkte (n + 1). Durch alle Punkte gehen gleich viele Geraden (n + 1). Anzahl aller Punkte = Anzahl aller Geraden = n2 +n+1. Man kennt zu jeder Primzahlpotenz pn (mindestens) eine projektive Ebene dieser Ordnung. Aber: Man weiß nicht, ob es eine endliche projektive Ebene zu einer Ordnung gibt, die keine Primzahlpotenz ist. Die kleinste Ordnung für die dies lange Zeit unbekannt war, ist 10. Die nächste offene Ordnung ist 12. • Die Kepler-Vermutung zur dichtesten Kugelpackung im Raum“: Diese ” Vermutung ist (war) bereits über dreihundert Jahre alt. Sie besteht darin, dass die dichteste Kugelpackung im Raum diejenige ist, die man durch Probieren sofort findet: Nämlich die Art der Stapelung von Melonen oder von Kanonenkugeln, die zu einer Pyramide führt: In der ersten Ebene sind die Kugeln wabenförmig Automatische Deduktion, SS 2014, vom 04.04.2014 12 aneinandergelegt. Die nächste Ebene sieht genauso aus, nur leicht versetzt, so dass die Kugeln der zweiten Ebene in die Täler der ersten Ebene fallen, usw. In diesem Fall werden √π18 ∼ 0, 74048 des Raumes von Kugeln gefüllt. Der mathematische Fallstrick ist offenbar, dass die lokale Minimierung des Volumens, das von einer Kugel und den (maximal) 12 umgebenden Kugeln benötigt wird, eine scheinbar bessere Packung ergibt; allerdings lässt sich diese nicht fortsetzen. Interessanterweise ist sogar der Beweis der (scheinbar offensichtlichen) Vermutung, dass man keine 13 Kugeln um eine Zentralkugel gruppieren kann, so dass alle 13 die Zentralkugel berühren, noch nicht so alt, obwohl bereits z.B Newton sich daran versucht hat. (Erster korrekter Beweis geführt von K. Schütte und B.L. van der Waerden 1953.) Die Kepler-Vermutung wurde gelöst von Tom Hales und seinem Doktoranden Sam Ferguson (University of Michigan). Die Lösung erforderte umfangreiche mathematische Vorarbeit, bis man das Problem darauf reduziert hatte, Kugelhaufen mit 53 Kugeln zu untersuchen. Hiervon gibt es ca. 5000 Typen, die alle untersucht werden müssen. Dies wurde mit Hilfe eines Computers durchgeführt. Die Akzeptanz der Lösung des Kepler-Problems bereitete und bereitet immer noch Probleme, da es sich um eine Kombination von mathematischem Argumentieren und mit Programmen durchgeführte Suchen und langwierigen Prüfungen handelt. Die mathematische Argumentation ist nachvollziehbar, aber die Korrektheit und das Ergebnis der Computerprogramme nicht (in sinnvoller Zeit); jedenfalls nicht so dass es den Erfordernissen eines Mathematischen Journals entspricht. Tom Hales hat daraufhin eine Initiative gestartet: das Flyspeck-Projekt, das eine formale Verifikation seines Beweises zum Ziel hat, so dass das Programmieren und der Programmablauf keine Löcher“hat. Kurz zusammengefasst sind ” die meisten Teil-Probleme Constraintprobleme über reellen Variablen: Ungleichungssysteme zu reellen Variablen. Diese Systeme beschreiben mögliche Lagen von Kugeln im Raum, wobei die Mittelpunkte der Kugeln den reellen Variablen entsprechen. Allerdings sind es offenbar viele verschiedene Klassen von solchen Problemen. Soweit es aus der Projektbeschreibung hervorgeht, sollen beim Flyspeck-Projekt auch automatische Deduktionssysteme eingesetzt werden: HOL Light. Beim Vierfarbensatz und beim Kepler-Problem ist die Methode analog zu einem Logik-Crunching, nach einer erheblichen mathematischen Vorarbeit; beim projektiven-Ebenen-Problem-10 ist es geordnetes, optimiertes Durchprobieren von sehr vielen Möglichkeiten bei der Suche nach einem Modell. Automatische Deduktionssysteme, die allgemeiner konstruiert sind, haben auch schon Spitzenleistungen erzielt: z.B. Lösung des sogenannten Problems der Robbins-Algebren: Automatische Deduktion, SS 2014, vom 04.04.2014 1.5 13 Das Problem der Robbins Algebren Das Robbins Problem sind alle Robbins-Algebren auch Boolesche Alge” bren?“ wurde von William McCune, Automated Deduction Group, Mathematics and Computer Science Division, Argonne National Laboratory gelöst und zwar mit Hilfe des automatischen Beweisers EQP für Gleichungstheorien. Die Lösung ist: Jede Robbins-Algebra ist eine Boolesche Algebra. Zunächst: Eine Boolesche Algebra hat zwei zweistellige, kommutative, assoziative Operatoren und, oder, einen einstelligen Operator not, Konstanten 0,1, so dass folgendes gilt: die De-Morganschen Gesetze, Distributivität, not ist ein Komplementoperator: x und (not x) = 0, x oder (not x) = 1, not(not x) = x. Etwas Geschichte: Im Jahre 1933 gab E. V. Huntington die folgende (alternative) Axiomatisierung einer Booleschen Algebra: x+y =y+x (x + y) + z = x + (y + z) n(n(x) + y) + n(n(x) + n(y)) = x [kommutativ] [assoziativ] [Huntington Gleichung] In dieser Axiomatisierung kann man und mittels oder und not definieren, und nachweisen, dass alle Axiome einer Booleschen Algebra dafür gelten. Danach vermutete Robbins, dass man das letzte Axiom durch eine anderes ersetzen kann: n(n(x + y) + n(x + n(y))) = x [Robbins equation] Robbins und Huntington konnten keinen Beweis finden, später arbeitete Tarski mit Studenten an diesem Problem, ebenfalls ohne Erfolg. Die Algebren mit den Axiomen Kommutativität, Assoziativität und Robbins Axiom wurden bekannt als Robbins Algebren. Man sieht leicht, dass Boolesche Algebren auch Robbins Algebren sind; die interessante offene Frage war die Umkehrung. Seit 1979 arbeitete daran: Steve Winker, Larry Wos mit dem Beweiser Ot” ter“ Die Methode war schrittweise immer stärkere Bedingungen (d.h. zusätzliche Axiome) zu finden, unter denen eine Robbins Algebra auf jeden Fall auch eine Boolesche Algebra ist. Hierbei wurden die Beweise vollautomatisch gesucht. Winker fand viele solche Bedingungen und bewies dies unter Benutzung von Otter : U.a.: ∀x : n(n(x)) = x ∃0 : ∀x : x + 0 = x ∀x : x + x = x ∃C : ∃D : C + D = C ∃C : ∃D : n(C + D) = n(C) [erste Winker-Bedingung, 1992] [zweite Winker-Bedingung,1996] Automatische Deduktion, SS 2014, vom 04.04.2014 14 Der automatische Beweis der Lösung des Robbins Problem wurde am 10 Oktober 1996 mittels EQP geführt. EQP benutzt assoziative-kommutative Unifikation und kann nur Gleichheitslogik. Die Gleichungen n(n(n(y) + x) + n(x + y)) = x n(x + y) 6= n(x) [Robbins Axiom] [Negation von Winker-2] wurden von EQP zum Widerspruch geführt. Die Suche dauerte 8 Tage. Ein Problem war die Prüfung des von EQP gefundenen Beweises. Hierzu musste mittels Otter ein (maschinen-)lesbarer Beweis erzeugt werden, der dann wieder von einem anderen Beweisprüfprogramm nochmal geprüft wurde. Für weitere Informationen, siehe die zugehörigen Web-Seiten: http://www-unix.mcs.anl.gov/~mccune/papers/robbins/ lemmas.html http://www.cs.unm.edu/~mccune/eqp/ und http://www.cs.unm.edu/~mccune/otter/ 1.6 Methodenwahl: menschliche oder maschinelle? Was wird erfolgreicher sein? • Die Nachahmung der menschlichen Vorgehensweise, oder • Die (intelligente) brute-force (numbercrunching)-Methode Die bisherige Erfahrung zeigt, dass der Einsatz von Computern erfolgreicher ist, wenn man nicht das menschliche Problemlösungsverhalten nachahmt, sondern die zweite Variante, die (intelligente) brute-force Methode verwendet. Z. B. sind die Erfolge der Schachprogrammierung eher auf solche Methoden als auf rational planende und nachdenkende Methoden zurückzuführen. Genauso verhält es sich z.B. mit der Lösung des Robbins-Algebra-Problems. Wobei man hier einwenden könnte, dass ohne einen Menschen, der das System EQP intelligent einsetzt, der Beweis nicht gefunden worden wäre. Es gibt einen Zweig des Automated Reasoning“, der gute Gründe dafür anführt, ” dass eine Analogie zum menschlichen Planen notwendig sei; allerdings sind die großen Erfolge hier bisher ausgeblieben. 1.7 Einführende Beispiele Aussagen über die reale Welt oder über fiktive oder abstrakte Welten sind manchmal nicht unabhängig voneinander, sondern es kann der Fall sein, dass eine Aussage aus einer oder mehreren anderen Aussage folgt. Zum Beispiel würde man bei den Aussagen Jede Katze isst Fische“ ” Garfield ist eine Katze“ ” Garfield isst Fische“ ” Automatische Deduktion, SS 2014, vom 04.04.2014 15 sicherlich zustimmen, dass die dritte Aussage aus den beiden anderen folgt. Wann immer man annimmt, dass die ersten beiden Aussagen wahr sind, muss man notwendigerweise auch annehmen, dass die dritte Aussage wahr ist. Das gleiche gilt für folgende Aussagen Alle Menschen sind sterblich“ ” Sokrates ist ein Mensch“ ” Sokrates ist sterblich“. ” Wieder gilt, dass die dritte Aussage aus den ersten beiden folgt. Das interessante dabei ist, dass der Grund weshalb die dritte Aussage aus den beiden anderen folgt offensichtlich in beiden Fällen derselbe ist. Es hängt gar nicht davon ab, ob wir über Fische essende Katzen oder sterbliche Menschen oder über irgendwelche unbekannten Objekte mit unbekannten Eigenschaften sprechen: Alle X haben die Eigenschaft E“ ” A ist ein X“ ” A hat die Eigenschaft E“ ” Offensichtlich folgt die dritte Aussage aus den beiden anderen. Die Beobachtung, dass die folgt aus“- Beziehung zwischen verschiedenen Aussagen gar nicht not” wendigerweise aus deren Bedeutung definiert werden muss, sondern nur aus deren syntaktischer Form geht zurück auf Aristoteles und andere antike griechische Philosophen. Die verblüffende Konsequenz ist, dass eine an und für sich semantische, d.h. von der Bedeutung her, definierte Beziehung, syntaktisch, d.h. über rein mechanische Symbolmanipulation, realisiert werden kann. In diesem Fall kann der Test auf die Folgerungsbeziehung zwischen Aussagen auch Computerprogrammen übertragen werden. Programme mit diesen Fähigkeiten heißen Deduktionssysteme. Unter einem Deduktionssystem kann man daher ganz allgemein ein programmierbares Verfahren verstehen, das aus vorhandenen Daten Schlussfolgerungen zieht und damit neue Daten ableitet. Welche Art von Schlussfolgerungen gemeint ist, illustriert Modus Ponens“, eine typische Regel, ” der auch die beiden obigen Beispiele zum Teil zugrundeliegen, und die schon auf Aristoteles zurückgeht. Fakt 1: Fakt 2: Schlussfolgerung: P Aus P folgt Q Q (P und Q sind beliebige Aussagen.) Die Mechanismen, die einen Rechner zu solchen Ableitungen befähigen, sind im Prinzip sehr ähnlich zu denen, die ihn zum Rechnen mit Zahlen befähigen. Die Fakten müssen als Datenobjekte repräsentiert und die Schlussfolgerungen als Operationen auf diesen Datenobjekten programmiert werden. 1.8 Motivationsbeispiele Um einen allerersten Eindruck von der Arbeitsweise eines Deduktionssystems zu bekommen, sollen zwei Beispiele zu deren Anwendung vorgestellt werden. Das Automatische Deduktion, SS 2014, vom 04.04.2014 16 erste ist ist das Sokrates-Beispiel, und das zweite ist ein logisches Rätsel. Die beiden Beispiele sollen nur einen ungefähren Eindruck geben und demonstrieren, dass man offensichtlich nicht nur Fische fressende Garfields oder sterbliche Philosophen, sondern wirklich nichttriviale logische Zusammenhänge mit automatisierbaren Methoden behandeln kann. Beispiel 1.1 Wir wollen beweisen: Aus ” Alle Menschen sind sterblich“ Sokrates ist ein Mensch“ ” folgt ” Sokrates ist sterblich“. Zunächst benötigt man eine formale Sprache, in der man diesen Sachverhalt ausdrücken kann. Dafür bietet sich in diesem Fall die Prädikatenlogik an. Das ist die formale Sprache, in der die meisten mathematischen Zusammenhänge einfach aufgeschrieben werden können, und die daher den meisten Lesern sowieso mehr oder weniger vertraut sein sollte. Da es in diesem Beispiel um zwei Eigenschaften geht, führen wir Mensch und sterblich als Prädikatensymbole ein. Sokrates ist ein Konstantensymbol in der Sprache. Die drei Aussagen sind dann: 1.) 2.) 3.) ∀x : Mensch(x) =⇒ sterblich(x) Mensch(Sokrates) sterblich(Sokrates) Der herzuleitende Aussage wird jetzt, um einen Beweis durch Widerspruch zu demonstrieren, verneint. Damit hat man eine Menge von Aussagen, auf die man das mechanische Verfahren der Resolution anwenden kann. Das Ziel ist es einen Widerspruch herzuleiten. Hat man dies erreicht, dann kann man sagen, dass die verneinte Aussage aus den anderen folgt. 1.) 2.) 3.) ∀x : Mensch(x) =⇒ sterblich(x) Mensch(Sokrates) ¬sterblich(Sokrates) Zunächst muss man die Formeln noch etwas abändern: 1.) 2.) 3.) ∀x : ¬Mensch(x) ∨ sterblich(x) Mensch(Sokrates) ¬sterblich(Sokrates) Das mechanische Verfahren der Resolution erlaubt es jetzt, aus 1) und 3) durch instanziieren von x mit Sokrates die Formel ¬Mensch(Sokrates) . 17 Automatische Deduktion, SS 2014, vom 04.04.2014 herzuleiten. Diese Formel und die zweite erlauben es jetzt, den endgültigen Widerspruch direkt zu erkennen. Beispiel 1.2 Wise Men Puzzle Es war einmal ein König, der hatte drei weise Männer. Eines Tages beschloss er, herauszufinden, wer von den dreien der weiseste ist. Er stellt sie einander gegenüber, macht jedem von ihnen einen weißen oder schwarzen Punkt auf die Stirn und sagt ihnen, dass mindestens einer der Punkte weiß ist. Nach einer Weile, in der niemand was sagte, fragte er den ersten, ob er die Farbe seines Punktes wüsste. Der verneinte. Dann fragte er den zweiten. Der verneinte ebenfalls. Daraufhin sagte der dritte prompt, dass sein Punkt weiß ist. Woher wusste der das? Zweite Frage: wie is die Verteilung der Farben? Es gibt eine leichte Variante dieses Rätsels, bei dem der König mehrfach alle gleichzeitig fragt, und zweimal keine Antwort bekommt, aber beim dritten Mal bekommt er Antworten. Welche? Zur Lösung dieses Rätsels ist es notwendig, Schlüsse über den Wissensstand der Beteiligten zu ziehen. Zur Formulierung dieses Rätsels, wenn man eine explizite Darstellung des Wissensstands jedes Beteiligten haben will und automatisch Schlüsse ziehen will, ist die prädikatenlogische Sprache daher nicht sehr gut geeignet. Einfacher wird es, wenn man die logische Sprache um neue Operatoren erweitert, mit denen man ausdrücken kann, dass jemand eine bestimmte Sache weiß oder nicht weiß. Damit macht man aus der Prädikatenlogik eine sogenannte epistemische Logik. Dies führt zur sogenannten Modallogik und deren Varianten. Es gibt Methoden, die Aussagen dieser Logik wieder in Prädikatenlogik übersetzen. Wenn man den Wissenstand der Beteiligten nicht explizit modelliert, und sich die Fälle anschaut, kann man wie folgt argumentieren: Es gibt nur 7 Fälle: Fall → ↓Nr. des Weisen 1. 2. 3. 1 2 3 4 5 6 7 W W W W W S W S W W S S S W W S W S S S W Der Fall SSS ist explizit ausgeschlossen, deshalb sind es 7. Im Fall 4 würde der erste Weise sofort erkennen, dass er W haben muss. In Fall 6 würde der zweite Weise sofort erkennen, dass er W haben muss. Bleibt Fall 2: In diesem Fall würde der zweite aus dem Nichtwissen des ersten schließen, dass er W haben muss. Also bleiben nur die Fälle, in denen der dritte Weise ein W auf der Stirn hat. Automatische Deduktion, SS 2014, vom 04.04.2014 18 Bei der ersten Art der Fragerunde können die Fälle 3 und 5 vorkommen. In der zweiten Variante des Rätsels kann man die Fälle 4 und 6 ausschließen nachdem keiner auf die erste Frage eine Antwort wusste. Nachdem keiner auf die zweite Frage eine Antwort wusste, kann es nur noch der Fall 1 sein, und alle Weisen antworten gleichzeitig mit W. Automatische Deduktion, SS 2014, vom 04.04.2014 2 19 Aussagenlogik (propositional calculus) Die Aussagenlogik ist in vielen anderen Logiken enthalten; sie hat einfache verstehbare Inferenzmethoden, man kann einfache Beispiele modellhaft in der Aussagenlogik betrachten. Bei der Verallgemeinerung auf Prädikatenlogik und andere Logiken startet man meist auf der Basis der Aussagenlogik. Dieses Kapitel geht detailliert auf Aussagenlogik, Kalküle und Eigenschaften ein. Ziel ist jeweils, vereinfachte Varianten von allgemeinen Verfahren zum Schlussfolgern zu verstehen, damit man einen Einblick in die Wirkungsweise von Inferenzverfahren für Prädikatenlogik und andere Logiken gewinnt. Es soll auch auf Methoden für schnelle und effiziente Verfahren für die Aussagenlogik eingegangen werden. Wir werden nicht auf die Verarbeitung Boolescher Funktionen eingehen und auch nicht auf BDDs und ihre Varianten. Diese haben effiziente Darstellungen und Algorithmen für eine Klasse von Formen, sind aber nicht so gut geeignet, allgemeinere Logiken und Erweiterungen wie Prädikatenlogik und Modallogik verständlich zu machen. Ein Buch zur Aussagenlogik ist z.B. [ST12] Definition 2.1 Syntax Die Syntax ist gegeben durch die Grammatik: A ::= X | (A ∧ A) | (A ∨ A) | (¬ A) | (A =⇒ A) | (A ⇔ A) | 0 | 1 Hierbei ist X ein Nichtterminal für aussagenlogische Variablen und A ein Nichtterminal für Aussagen. Die Konstanten 0, 1 entsprechen falsch bzw. wahr. Üblicherweise werden bei der Notation von Aussagen Klammern weggelassen. wobei man die Klammerung aus den Prioritäten der Operatoren wieder rekonstruieren kann: Die Prioritätsreihenfolge ist: ¬, ∧, ∨, =⇒ , ⇐⇒ . Die Zeichen ∧, ∨, ¬, =⇒ , ⇔ nennt man Junktoren. Aussagen der Form 0, 1 oder x nennen wir Atome. Literale sind entweder Atome oder Aussagen der Form ¬A, wobei A ein Atom ist. A ∧ B: A ∨ B: A =⇒ B: A ⇔ B: ¬A: A A Konjunktion (Verundung). Disjunktion (Veroderung). Implikation . Äquivalenz. negierte Formel. Atom, falls A eine Variable ist. Literal, falls A Atom oder negiertes Atom. Wir lassen auch teilweise eine erweiterte Syntax zu, bei der auch noch andere Operatoren zulässig sind wie: NOR, XOR, NAND. Dies erweitert nicht die Fähigkeit zum Hinschreiben von logischen Ausdrücken, denn man kann diese Operatoren simulieren. Auch könnte man 0, 1 weglassen, wie wir noch sehen werden, denn man kann 1 als Abkürzung von A ∨ ¬A, und 0 als Abkürzung von A ∧ ¬A auffassen. 20 Automatische Deduktion, SS 2014, vom 04.04.2014 Definition 2.2 Semantik Zunächst definiert man für jede Operation ¬, ∧, ∨, =⇒ , ⇔ Funktionen {0, 1} → {0, 1} bzw. {0, 1}2 → {0, 1}. Die Funktion f¬ ist definiert als f¬ (0) = 1, f¬ (1) = 0. Ebenso definiert man f0 := 0, f1 := 1. Die anderen Funktionen fop sind definiert gemäß folgender Tabelle. 1 1 0 0 1 0 1 0 ∧ 1 0 0 0 ∨ 1 1 1 0 =⇒ 1 0 1 1 ⇐ 1 1 0 1 N OR 0 0 0 1 N AN D 0 1 1 1 ⇔ 1 0 0 1 XOR 0 1 1 0 Der Einfachheit halber werden oft die syntaktischen Symbole auch als Funktionen gedeutet. Definition 2.3 Eine Interpretation I ist eine Funktion: I : {aussagenlogische Variablen} → {0, 1}. Eine Interpretation I definiert für jede Aussage einen Wahrheitswert, wenn man sie auf Aussagen fortsetzt: • I(0) := 0, I(1) := 1 • I(¬A) := f¬ (I(A)) • I(A op B) := fop (I(A), I(B)), wobei op ∈ {∧, ∨, =⇒ , ⇔ . . .} Wenn für eine Aussage F und eine Interpretation I gilt: I(F ) = 1, dann schreiben wir auch: I |= F . Sprechweisen: I ist ein Modell für F , F gilt in I, I macht F wahr. Definition 2.4 Sei A ein Aussage. • A ist eine Tautologie (Satz, allgemeingültig) gdw. für alle Interpretationen I gilt: I |= A. • A ist ein Widerspruch (widersprüchlich, unerfüllbar) gdw. für alle Interpretationen I gilt: I(A) = 0. • A ist erfüllbar (konsistent) gdw. es eine Interpretationen I gibt mit: I |= A. • ein Modell für eine Formel A ist eine Interpretation I mit I(A) = 1. Man kann jede Aussage in den n Variablen X1 , . . . , Xn auch als eine Funktion mit den n Argumenten X1 , . . . , Xn auffassen. Dies entspricht dann Booleschen Funktionen. Beispiel 2.5 • X ∨ ¬X ist eine Tautologie. • (X =⇒ Y ) =⇒ ((Y =⇒ Z) =⇒ (X =⇒ Z)) ist eine Tautologie. Automatische Deduktion, SS 2014, vom 04.04.2014 21 • X ∧ ¬X ist ein Widerspruch. • X ∨ Y ist erfüllbar. • I mit I(X) = 1, I(Y ) = 0 ist ein Modell für X ∧ ¬Y Beispiel 2.6 Bauernregeln: • Abendrot Schlechtwetterbot’“ kann man übersetzen in ” Abendrot =⇒ Schlechtes Wetter. Diese Aussage ist weder Tautologie noch Widerspruch, aber erfüllbar. • Wenn der Hahn kräht auf dem Mist, ändert sich das Wetter oder es bleibt ” wie es ist. “ kann man übersetzen in Hahn kraeht auf Mist =⇒ (Wetteraenderung ∨ ¬Wetteraenderung). Man sieht, dass das eine Tautologie ist. Die tautologischen Aussagen sind in Bezug auf die Wirklichkeit ohne Inhalt. Erst wenn man sie verwendet zum Finden von Folgerungen ergibt sich etwas neues. Satz 2.7 • Es ist entscheidbar, ob eine Aussage eine Tautologie (Widerspruch, erfüllbar) ist. • Die Frage Ist A erfüllbar?“ ist N P-vollständig. ” • Die Frage Ist A Tautologie (Widerspruch)? “ ist co-N P-vollständig. ” Das einfachste und bekannteste Verfahren zur Entscheidbarkeit ist das der Wahrheitstafeln. Es werden einfache alle Interpretation ausprobiert. Zur Erläuterung: N P-vollständig bedeutet, dass jedes Problem der Problemklasse mit einem nicht-deterministischen Verfahren in polynomieller Zeit gelöst werden kann, und dass es keine bessere obere Schranke gibt. Eine Problemklasse ist co-N P-vollständig, wenn die Problemklasse die aus den Negationen gebildet wird, N P-vollständig ist. Sequentielle Algorithmen zur Lösung haben für beide Problemklassen nur Exponential-Zeit Algorithmen. Genaugenommen ist es ein offenes Problem der theoretischen Informatik, ob es nicht bessere sequentielle Algorithmen gibt. Die Klasse der N P-vollständigen Probleme ist vom praktischen Standpunkt aus leichter als co-N P-vollständig: Für N P-vollständige Probleme kann man mit Glück (d.h. Raten) oft schnell eine Lösung finden. Z.B. eine Interpretation einer Formel. Für co-N P-vollständige Probleme muss man i.a. viele Möglichkeiten testen: Z.B. muss man i.a. alle Interpretation einer Formel ausprobieren. Automatische Deduktion, SS 2014, vom 04.04.2014 2.1 22 Folgerungsbegriffe Man muss zwei verschiedene Begriffe der Folgerungen für Logiken unterscheiden: • semantische Folgerung • syntaktische Folgerung (Herleitung, Ableitung) mittels einer prozeduralen Vorschrift. Dies ist meist ein nicht-deterministischer Algorithmus (Kalkül), der auf Formeln oder auf erweiterten Datenstrukturen operiert. Das Ziel ist i.a. die Erkennung von Tautologien (oder Folgerungsbeziehungen). In der Aussagenlogik fallen viele Begriffe zusammen, die in anderen Logiken verschieden sind. Trotzdem wollen wir die Begriffe hier unterscheiden. Definition 2.8 Sei F eine Menge von (aussagenlogischen) Formeln und G eine weitere Formel. Wir sagen G folgt semantisch aus F gdw. Für alle Interpretationen I gilt: wenn für alle Formeln F ∈ F die Auswertung I(F ) = 1 ergibt, dann auch I(G) = 1. Die semantische Folgerung notieren wir auch als F |= G Es gilt Aussage 2.9 Wenn ein Fi ein Widerspruch ist, dann kann man alles folgern: Es gilt dann für jede Formel G: F1 , . . . , Fn |= G. Wenn ein Fi eine Tautologie ist, dann kann man dies in den Voraussetzungen weglassen: Es gilt dann für alle Formeln G: F1 , . . . , Fn |= G ist dasselbe wie F1 , . . . , Fi−1 , Fi+1 , . . . , Fn |= G In der Aussagenlogik gibt es eine starke Verbindung von semantischer Folgerung mit Tautologien: Es gilt: Satz 2.10 (Deduktionstheorem) {F1 , . . . , Fn } |= G gdw. F1 ∧ . . . ∧ Fn =⇒ G ist Tautologie. Zwei Aussagen F, G nennen wir äquivalent (F ∼ G), gdw. wenn F ⇐⇒ G eine Tautologie ist. Beachte, dass F und G genau dann äquivalent sind, wenn für alle Interpretationen I: I |= F gdw. I |= G gilt. Es ist auch zu beachten, dass z.B. X ∧ Y nicht zu X 0 ∧ Y 0 äquivalent ist. D.h. bei diesen Beziehungen spielen die Variablennamen eine wichtige Rolle. Definition 2.11 Gegeben sei ein (nicht-deterministischer) Algorithmus A (ein Kalkül), der aus einer Menge von Formeln H eine neue Formel H berechnet, Man sagt auch, dass H syntaktisch aus H folgt (bezeichnet mit H `A H oder auch H →A H). • Der Algorithmus A ist korrekt (sound), gdw. H →A H impliziert H |= H Automatische Deduktion, SS 2014, vom 04.04.2014 23 • Der Algorithmus A ist vollständig (complete), gdw. H |= H impliziert, dass H `A H Aus obigen Betrachtungen folgt, dass es in der Aussagenlogik für die Zwecke der Herleitung im Prinzip genügt, einen Algorithmus zu haben, der Aussagen auf Tautologieeigenschaft prüft. Gegeben {F1 , . . . , Fn }, zähle alle Formeln F auf, prüfe, ob F1 ∧ . . . ∧ Fn =⇒ F eine Tautologie ist, und gebe F aus, wenn die Antwort ja ist. Das funktioniert, ist aber nicht sehr effizient, wegen der Aufzählung aller Formeln. Außerdem kann man immer eine unendliche Menge von Aussagen folgern, da alle Tautologien immer dabei sind. Es gibt verschiedene Methoden, aussagenlogische Tautologien (oder auch erfüllbare Aussagen) algorithmisch zu erkennen: Z.B. BDDs (binary decision diagrams) : eine Methode, Aussagen als Boolesche Funktionen anzusehen und möglichst kompakt zu repräsentieren; Genetische Algorithmen zur Erkennung erfüllbarer Formeln; Suchverfahren die mit statischer Suche und etwas Zufall und Bewertungsfunktionen operieren; Davis-Putnam Verfahren: Fallunterscheidung mit Simplifikationen (siehe unten 2.7); Tableaukalkül, der Formeln syntaktisch analysiert (analytic tableau) (siehe 2.9). 2.2 Tautologien und einige einfache Verfahren Wir wollen im folgenden Variablen in Aussagen nicht nur durch die Wahrheitswerte 0, 1 ersetzen, sondern auch durch Aussagen. Wir schreiben dann A[B/x], wenn in der Aussage A die Aussagenvariable x durch die Aussage B ersetzt wird. In Erweiterung dieser Notation schreiben wir auch: A[B1 /x1 , . . . , Bn /xn ], wenn mehrere Aussagevariablen ersetzt werden sollen. Diese Einsetzung passiert gleichzeitig, so dass dies kompatibel zur Eigenschaft der Komposition von Funktionen ist: Wenn A n-stellige Funktion in den Aussagevariablen ist, dann ist A[B1 /x1 , . . . , Bn /xn ] die gleiche Funktion wie A ◦ (B1 , . . . , Bn ). Satz 2.12 Gilt A1 ∼ A2 und sind B1 , . . . , Bn weitere Aussagen, dann gilt auch A1 [B1 /x1 , . . . , Bn /xn ] ∼ A2 [B1 /x1 , . . . , Bn /xn ]. Beweis. Man muss zeigen, dass alle Zeilen der Wahrheitstafeln für die neuen Ausdrücke gleich sind. Seien y1 , . . . , ym die Variablen. Den Wert einer Zeile kann man berechnen, indem man zunächst die Wahrheitswerte für Bi berechnet und dann in der Wahrheitstabelle von Ai nachschaut. Offenbar erhält man für beide Ausdrücke jeweils denselben Wahrheitswert. 2 Satz 2.13 Sind A, B äquivalente Aussagen, und F eine weitere Aussage, dann sind F [A] und F [B] ebenfalls äquivalent. 1 1 Hierbei ist F [B] die Aussage, die dadurch entsteht, dass in F die Subaussage A durch B ersetzt wird. Automatische Deduktion, SS 2014, vom 04.04.2014 24 Die Junktoren ∧ und ∨ sind kommutativ, assoziativ, und idempotent, d.h. es gilt: F ∧G ⇐⇒ G∧F F ∧F ⇐⇒ F F ∧ (G ∧ H) ⇐⇒ (F ∧ G) ∧ H F ∨G ⇐⇒ G∨F F ∨ (G ∨ H) ⇐⇒ (F ∨ G) ∨ H F ∨F ⇐⇒ F Weiterhin gibt es für Aussagen noch Rechenregeln und Gesetze, die wir im folgenden auflisten wollen. Alle lassen sich mit Hilfe der Wahrheitstafeln beweisen, allerdings erweist sich das bei steigender Variablenanzahl als mühevoll, denn die Anzahl der Überprüfungen ist 2n , wenn n die Anzahl der Aussagenvariablen ist. Die Frage nach dem maximal nötigen Aufwand (in Abhängigkeit von der Größe der Aussagen) für die Bestimmung, ob eine Aussage erfüllbar ist, ist ein berühmtes offenes Problem der (theoretischen) Informatik, das SAT ∈ P-Problem, dessen Lösung weitreichende Konsequenzen hätte, z.B. würde P = N P daraus folgen. Im Moment geht man davon aus, dass dies nicht gilt. Lemma 2.14 (Äquivalenzen:) ¬(¬A)) (A =⇒ B) (A ⇐⇒ B) ¬(A ∧ B) ¬(A ∨ B) A ∧ (B ∨ C) A ∨ (B ∧ C) (A =⇒ B) A ∨ (A ∧ B) A ∧ (A ∨ B) ⇐⇒ ⇐⇒ ⇐⇒ ⇐⇒ ⇐⇒ ⇐⇒ ⇐⇒ ⇐⇒ ⇐⇒ ⇐⇒ A (¬A ∨ B) ((A =⇒ B) ∧ (B =⇒ A)) ¬A ∨ ¬B (DeMorgansche Gesetze) ¬A ∧ ¬B (A ∧ B) ∨ (A ∧ C) Distributivität (A ∨ B) ∧ (A ∨ C) Distributivität (¬B =⇒ ¬A) Kontraposition A Absorption A Absorption Diese Regeln sind nach Satz 2.12 nicht nur verwendbar, wenn A; B; C Aussagevariablen sind, sondern auch, wenn A, B, C für Aussagen stehen. 2.3 Normalformen Für Aussagen der Aussagenlogik gibt es verschiedene Normalformen. U.a. die disjunktive Normalform (DNF) und die konjunktive Normalform (CNF): Die letzte nennt man auch Klauselnormalform. Hierbei ist eine Klausel eine Formel der Form L1 ∨. . . Ln , wobei Li Literale sind, und Literale sind Variablen oder negierte Variablen. • disjunktive Normalform (DNF). Die Aussage ist eine Disjunktion von Konjunktionen von Literalen. D.h. von der Form (L1,1 ∧ . . . ∧ L1,n1 ) ∨ . . . ∨ (Lm,1 ∧ . . . ∧ Lm,nm ) wobei Li,j Literale sind. Automatische Deduktion, SS 2014, vom 04.04.2014 25 • konjunktive Normalform (CNF). Die Aussage ist eine Konjunktion von Disjunktionen von Literalen. D.h. von der Form (L1,1 ∨ . . . ∨ L1,n1 ) ∧ . . . ∧ (Lm,1 ∨ . . . ∨ Lm,nm ) wobei Li,j Literale sind. Die Klauselnormalform wird oft als Menge von Mengen notiert und auch behandelt. Dies ist gerechtfertigt, da sowohl ∧ als auch ∨ assoziativ, kommutativ und idempotent sind, so dass Vertauschungen und ein Weglassen der Klammern erlaubt ist. Wichtig ist die Idempotenz, die z.B. erlaubt, eine Klausel {A, B, A, C} als unmittelbar äquivalent zur Klausel {A, B, C} zu betrachten. Eine Klausel mit einem Literal bezeichnet man auch als 1-Klausel. Eine Klausel (in Mengenschreibweise) ohne Literale wird als leere Klausel bezeichnet. Diese ist äquivalent zu 0, dem Widerspruch. Definition 2.15 Eine Hornklausel ist eine Klausel mit maximal einem positiven Literal. Eine Hornklauselmenge ist eine Klauselmenge die nur aus Hornklauseln besteht. Lemma 2.16 Eine Klausel C ist eine Tautologie genau dann wenn es eine Variable A gibt, so dass sowohl A als auch ¬A in der Klausel vorkommen Beweis. Übungsaufgabe. Es gilt: Lemma 2.17 Zu jeder Aussage kann man eine äquivalente CNF finden und ebenso eine äquivalente DNF. Allerdings nicht in eindeutiger Weise. Lemma 2.18 • Eine Aussage in CNF kann man in Zeit O(n ∗ log(n)) auf TautologieEigenschaft testen. • Eine Aussage in DNF kann man in Zeit O(n ∗ log(n)) auf Unerfüllbarkeit testen. Beweis. Eine CNF C1 ∧. . .∧Cn ist eine Tautologie, gdw für alle Interpretationen I diese Formel stets wahr ist. D.h. alle Ci müssen ebenfalls Tautologien sein. Das geht nur, wenn jedes Ci ein Paar von Literalen der Form A, ¬A enthält. Das gleiche gilt in dualer Weise für eine DNF, wenn man dualisiert, d.h. wenn man ersetzt: ∧ ↔ ∨, 0 ↔ 1, CNF ↔ DNF, Tautologie ↔ Widerspruch. 2 Der duale Test: CNF auf Unerfüllbarkeit bzw. DNF auf Allgemeingültigkeit ist die eigentliche harte Nuss. Dualitätsprinzip Man stellt fest, dass in der Aussagenlogik (auch in der Prädikatenlogik) Definition, Lemmas, Methoden, Kalküle, Algorithmen stets eine duale Variante haben. Die Dualität ist wie im Beweis oben: durch Vertauschung zu sehen: ∧ ↔ ∨, 26 Automatische Deduktion, SS 2014, vom 04.04.2014 0 ↔ 1, CNF ↔ DNF, Tautologie ↔ Widerspruch, Test auf Allgemeingültigkeit ↔ Test auf Unerfüllbarkeit. D.h. auch, dass die Wahl zwischen Beweissystemen, die auf Allgemeingültigkeit testen und solchen, die auf Unerfüllbarkeit testen, eine Geschmacksfrage ist und keine prinzipielle Frage. Lemma 2.19 Sei F eine Formel. Dann ist F allgemeingültig gdw. ¬F ein Widerspruch ist Bemerkung 2.20 Aus Lemma 2.18 kann man Schlussfolgerungen ziehen über die zu erwartende Komplexität eines Algorithmus, der eine Formel (unter Äquivalenzerhaltung) in eine DNF (CNF) transformiert. Wenn dieser Algorithmus polynomiell wäre, dann könnte man einen polynomiellen Tautologietest durchführen: Zuerst überführe eine Formel in CNF und dann prüfe, ob diese CNF eine Tautologie ist. Dies wäre ein polynomieller Algorithmus für ein co-N P-vollständiges Problem. Allerdings sehen wir später, dass die DNF (CNF-)Transformation selbst nicht der Engpass ist, wenn man nur verlangt, dass die Allgemeingültigkeit (Unerfüllbarkeit) in eine Richtung erhalten bleibt. Definition 2.21 Transformation in Klauselnormalform Folgende Prozedur wandelt jede aussagenlogische Formel in konjunktive Normalform (CNF, Klauselnormalform) um: 1. Elimination von ⇔ und =⇒ : F ⇔ G → (F =⇒ G) ∧ (G =⇒ F ) und F =⇒ G → ¬F ∨ G 2. Negation ganz nach innen schieben: ¬¬F ¬(F ∧ G) ¬(F ∨ G) → → → F ¬F ∨ ¬G ¬F ∧ ¬G 3. Distributivität (und Assoziativität, Kommutativität) iterativ anwenden, um ∧ nach außen zu schieben ( Ausmultiplikation“). F ∨ (G ∧ H) → ” (F ∨ G) ∧ (F ∨ H) (Das duale Distributivgesetz würde eine disjunktive Normalform ergeben.) Das Resultat dieser Prozedur ist eine Konjunktion von Disjunktionen (Klauseln) von Literalen: (L1,1 ∨ . . . ∨ L1,n1 ) ∧ (L2,1 ∨ . . . ∨ L2,n2 ) ∧ ... ∧ (Lk,1 ∨ . . . ∨ Lk,nk ) Automatische Deduktion, SS 2014, vom 04.04.2014 27 oder in (Multi-)Mengenschreibweise: {{L1,1 , . . . , L1,n1 }, {L2,1 , . . . , L2,n2 }, ... {Lk,1 , . . . , Lk,nk }} Die so hergestellte CNF ist eine Formel, die äquivalent zur eingegebenen Formel ist. Dieser CNF-Algorithmus ist im schlechtesten Fall exponentiell, d.h. die Anzahl der Literale in der Klauselform wächst exponentiell mit der Größe der Ausgangsformel. Es gibt zwei Schritte, die zum exponentiellem Anwachsen der Formel führen können, • die Elimination von ⇔: Betrachte die Formel (A1 ⇔ A2 ) ⇔ (A3 ⇔ A4 ) und die Verallgemeinerung. • Ausmultiplikation mittels Distributivgesetz: (A1 ∧ . . . ∧ An ) ∨ B2 ∨ . . . ∨ Bm → ((A1 ∨ B2 ) ∧ . . . ∧ (An ∨ B2 )) ∨ B3 . . . ∨ Bn Dies verdoppelt B2 und führt zum Iterieren des Verdoppelns, wenn Bi selbst wieder zusammengesetzte Aussagen sind. Beispiel 2.22 ((A ∧ B) =⇒ C) =⇒ C 2.4 → ¬(¬(A ∧ B) ∨ C) ∨ C → (A ∧ B) ∧ ¬C) ∨ C → (A ∨ C) ∧ (B ∨ C) ∧ (¬C ∨ C) Schnelle CNF (Tseitin-Kodierung) Wir geben einen Algorithmus an (Tseitin-Kodierung), der eine aussagenlogische Formel F in polynomieller Zeit in eine CNF FCN F umwandelt, wobei die Formel F erfüllbar ist gdw. FCN F erfüllbar ist (Erfüllbarkeits-Erhaltung). Es ist hierbei nicht gefordert, dass F und FCN F äquivalent als Formeln sind! Beachte, dass bei diesem Verfahren die Anzahl der Variablen erhöht wird. Der Trick ist: komplexe Subformeln iterativ durch neue Variablen abzukürzen. Sei F [G] eine Formel mit der Subformel G. Dann erzeuge daraus (A ⇐⇒ G) ∧ F [A], wobei A eine neue aussagenlogische Variable ist. Lemma 2.23 F [G] ist erfüllbar gdw. (G ⇐⇒ A) ∧ F [A] erfüllbar ist. Hierbei muss A eine Variable sein, die nicht in F [G] vorkommt. Automatische Deduktion, SS 2014, vom 04.04.2014 28 Beweis. “⇒“ Sei F [G] erfüllbar und sei I eine beliebige Interpretation mit I(F[G]) = 1. Erweitere I zu I 0 , so dass I 0 (A) := I(G). Werte die Formel (G ⇐⇒ A) ∧ F [A] unter I 0 aus: Es gilt I 0 (G ⇐⇒ A) = 1 und I 0 (F [G]) = I 0 (F [A]) = 1. “⇐“ Sei I(G ⇐⇒ A) ∧ F [A]) = 1 für eine Interpretation I. Dann ist I(G) = I(A) und I(F [A]) = 1. Damit muss auch I(F [G]) = 1 sein. 2 Zunächst benötigen wir den Begriffe Tiefe einer Aussage und Sub-Tiefe einer Subformel in einer Aussage (betrachtet als Syntaxbäume). Beachte hierbei aber, dass es jetzt auf die genaue syntaktische Form ankommt: Es muss voll geklammert sein. Man kann es auch für eine flachgeklopfte Form definieren, allerdings braucht man dann eine andere Syntaxdefinition usw. Definition 2.24 Die Tiefe einer Formel ist die maximale Länge eines Pfades im Syntaxbaum. Die Sub-Tiefe einer Subformel in einer Aussage definiert man entsprechend dem Aufbau der Syntax: Zunächst hat jede Formel F eine Sub-Tiefe 0 in sich selbst. Sei H eine Subformel von F der Sub-Tiefe n. Dann definieren wir für Subformeln von F wie folgt: • Wenn H ≡ ¬G, dann hat G die Sub-Tiefe n + 1 in F . • Wenn H ≡ (G1 op G2 ), dann sind G1 , G2 Subformeln mit Sub-Tiefe n + 1 in F , wobei op einer der Junktoren ∨, ∧, =⇒ , ⇐⇒ sein kann. Definition 2.25 Schneller CNF-Algorithmus Wenn eine Formel bereits in der Form H1 ∧ . . . ∧ Hn ist, und Hj eine Tiefe ≥ 4 hat, dann ersetze Hj folgendermaßen: Ersetze alle Subformeln G1 , . . . , Gm von Hj mit Sub-Tiefe 3 in Hj durch neue Variablen Ai (ersetze Gi nur wenn es kein Atom ist): D.h. Ersetze Hj = Hj0 [G1 , . . . , Gm ] durch (G1 ⇐⇒ A1 ) ∧ . . . ∧ (Gm ⇐⇒ Am ) ∧ Hj0 [A1 , . . . , Am ] in der Formel H1 ∧ . . . ∧ Hn . Iteriere diesen Schritt, bis er nicht mehr durchführbar ist. Danach wandle die verbliebenen Formeln mit Tiefe ≤ 3 in CNF um. Die Begründung der verbesserten Komplexität ist folgendermaßen: Aus einer Formel F der Tiefe n entsteht im ersten Schritt eine Formel der Tiefe höchstens 3 und weitere Konjunktionsglieder der Form G ⇐⇒ A (mit kleinerer Tiefe als F ). D.h. nur in G kann wieder ersetzt werden. D.h. die Anzahl der neu hinzugefügten Formeln ist kleiner als die Anzahl aller Subformeln der ursprünglichen Formel F . Den Aufwand zur Umformung der kleinen Formeln kann man als konstant ansehen. Da die Größe der Formel F gerade die Anzahl der Subformeln ist, ist die Anzahl der durchzuführenden Schritte linear. Je nach Datenstruktur (zur Vermeidung von Suche) kann man den Algorithmus linear formulieren und implementieren. Dual dazu ist wieder die schnelle Herstellung einer DNF, die allerdings mit einer anderen Transformation: F [G] −→ (G ⇐⇒ A) =⇒ F [A] gemacht werden muss und bei der die Tautologie-Eigenschaft erhalten bleibt. Automatische Deduktion, SS 2014, vom 04.04.2014 29 Beachte, dass man Disjunktionen und Konjunktionen auch als Liste verarbeiten kann, aber zur schnellen CNF-Herstellung muss man eine obere Schranke der Länge festsetzen, sonst ergibt sich wieder das Problem einer exponentiell großen CNF. Beispiel 2.26 Wandle eine DNF in eine CNF auf diese Art und Weise um unter Erhaltung der Erfüllbarkeit. Sei (D11 ∧ D12 ) ∨ . . . ∨ (Dn1 ∧ Dn2 ) die DNF. Wenn man das Verfahren leicht abwandelt, damit man besser sieht, was passiert: ersetzt man die Formeln (Di1 ∧ Di2 ) durch neue Variablen Ai und erhält am Ende: (A1 ∨ . . . ∨ An ) ∧ (¬A1 ∨ D11 ) ∧ (¬A1 ∨ D12 ) ∧ (¬D11 ∨ ¬D12 ∨ A1 ) ∧ . . .. Diese Formel hat 8n Literale. Beispiel 2.27 Wandle die Formel (((((X ⇐⇒ Y ) ⇐⇒ Y ) ⇐⇒ Y ) ⇐⇒ Y ) ⇐⇒ X) um. Das ergibt: (A ⇐⇒ ((X ⇐⇒ Y ) ⇐⇒ Y )) =⇒ ((((A ⇐⇒ Y ) ⇐⇒ Y ) ⇐⇒ X) Danach kann man diese Formel dann auf übliche Weise in CNF (oder DNF) umwandeln. Aussage 2.28 Wenn aus einer Formel F mittels des Algorithmus in Definition 2.25 eine Formel (bzw. eine CNF) F 0 produziert wird, dann gilt folgendes: 1. F ist erfüllbar gdw. F 0 ist erfüllbar. 2. F ist Widerspruch gdw. F 0 ein Widerspruch ist. 3. Wenn F eine Tautologie ist, dann ist F 0 erfüllbar. 4. F 0 =⇒ F ist eine Tautologie. 5. F 0 ist i.a. keine Tautologie. Ebenso ist F =⇒ F 0 i.a. keine Tautologie. Beweis. 1. Hierzu zeigt man dass für jeden Ersetzungsschritt diese Eigenschaft gilt. 2. Das folgt aus dem ersten 3. Wenn F eine Tautologie ist dann ist F erfüllbar, und wegen der Aussagen vorher, ist dann F 0 erfüllbar. 4. F 0 =⇒ F ist eine Tautologie: Sei I ein Modell von F 0 . Dann sind alle Definitionsgleichung erfüllt und man mann damit zeigen, dass die Interpretation I auch ein Modell von F ist. Automatische Deduktion, SS 2014, vom 04.04.2014 30 5. F 0 ist i.a. keine Tautologie, denn z.B. X ∨ ¬X wandelt man um in Y ∧ Y ⇐⇒ (X ∨ ¬X), aber die Interpretation die Y falsch macht, ist kein Modell. Das gleiche Beispiel zeigt, dass F =⇒ F 0 keine Tautologie ist, da für die Interpretation I gilt: I |= F aber I 6|= F 0 , also ist I(F =⇒ F 0 ) = 0. Bemerkung 2.29 Ein Implementierung eines Algorithmus, der Formeln in Klauselmengen verwandelt, kann z.B. auf der www-Seite http: // www. spass-prover. org/ contact. html gefunden werden. Das Programm heißt FLOTTER. Es benötigt einen gewissen Vorspann: Symbole, . . . ; es verlangt eine standardisierte Syntax und erzeugt dann als Ausgabe-Datei eine Klauselmenge. Diese kann dann in einen weiteren Beweiser (SPASS) eingegeben werden. Allerdings hat FLOTTER einen aussagenlogischen Check als Teilsystem eingebaut, so dass sich aussagenlogische Formeln sofort damit entscheiden lassen. Dieses System gibt im erfüllbaren Fall ein Modell aus. Mittlerweile gibt es auch verschiedene Portierungen. 2.5 SAT - Problem und Hornklauseln in Aussagenlogik Die Frage ob eine aussagenlogische Klauselmenge erfüllbar ist, ist auch als SATProblem bekannt (siehe z.B. das Buch von Schöning und Torán). Dieses Problem ist NP-vollständig. Es gibt Spezialisierung wir zB k − SAT : Das ist die gleiche Frage, wobei man sich auf Klauseln der Länge genau k einschränkt. Für k = 2 ist es in polynomieller Zeit entscheidbar (s.u.) und für k ≥ 3 wieder NP-vollständig. Mittlerweile gibt es viele Forschergruppen, die sich nur um das SAT-Problem und möglichst schnelle Algorithmen auch für sehr große Eingaben kümmern. Interessant ist ein Satz der aufgrund der reinen Anzahlen von Klauseln bereits Erfüllbarkeit zeigt. Satz 2.30 Wenn für ein k ≥ 2 die Klauselmenge S zu k-SAT gehört (d.h. alle Klauseln haben Länge k, und es sind h < 2k Klauseln, dann ist S erfüllbar. Beweis. Wenn die Anzahl der aussagenlogischen n ist (es gilt ja n ≥ k), dann gibt es 2n mögliche Interpretationen. Ein Klausel der Länge k hat 2n−k nicht erfüllende (d.h. widerlegende) Interpretationen. Betrachtet man die gesamte Klauselmenge, so kann man alle widerlegenden Interpretationen finden, indem man die Menge der Interpretationen nimmt, die mindestens eine Klausel widerlegen. Das sind maximal h ∗ 2n−k < 2n , also gibt es mindestens eine Interpretation, die S erfüllt. 2 Das zeigt, dass man in Beispiele, bei denen man k aussagenlogischen Variablen hat, und nur Klauselmengen mit k-Klauseln, die Erfüllbarkeit durch Zählen entscheiden kann. Denn nur die Klauselmenge, die alle Klauseln enthält, ist unerfüllbar; während alle kleineren Klauselmengen erfüllbar sind. Für Literale a schreiben a für das Literal das aus ¬a durch evtl. Elimination von doppelten Negationszeichen entsteht. Automatische Deduktion, SS 2014, vom 04.04.2014 31 Satz 2.31 2-SAT ist in polynomieller Zeit entscheidbar. Ein erfüllende Interpretation kann man in polynomieller Zeit konstruieren. Beweis. Man kann das mittels Vollständigkeit der aussagenlogischen Resolution und Sättigung zeigen. Ein anderer Beweis (siehe [ST12]) geht direkt: Sei C eine Menge von 2-Klauseln. Seien V := {x1 , . . . , xn } die aussagenlogischen Variablen in C. Konstruiere einen gerichteten Graphen G der als Knoten alle 2n Literale zu V hat: V 0 := {x1 , . . . , xn , ¬x1 , . . . , ¬xn }. Zu v1 , v2 ∈ V gibt es genau dann eine Kante v1 → v2 , wenn ¬v1 ∨ v2 eine Klausel in C ist (nach Elimination einer Doppelnegation). D.h. Jede Klausel erzeugt maximal 2 Kanten. Der Graph hat folgende Eigenschaft: wenn es für verschiedene Literale a, b einen Weg von a nach b gibt, dann auch einen von b nach a: Das folgt, da es für die Klauseln und Kanten gilt. Behauptung ist jetzt: C ist erfüllbar gdw. es kein x gibt, so dass G einen Weg von x nach ¬x und gleichzeitig einen von ¬x nach x enthält. Sei C erfüllbar, z.B. mit Interpretation I. Dann kann mal alle Kanten und auch alle Wege wie Implikationen interpretieren. Wenn es ein x gibt mit Weg nach ¬x, dann kann nur I(x) = 0 sein, und einen Weg von ¬x nach x kann es dann nicht geben. Entsprechend, wenn es einen Weg von ¬x nach x gibt. Wenn die Wegebedingung für G gilt, dann ist C erfüllbar: Dazu konstruiere eine Interpretation I: Zuerst betrachte die Variablen x für die es einen Weg von x nach ¬x gibt oder einen Weg von ¬x nach x. Wenn es einen Weg von x nach ¬x gibt, dann definiere I(x) := 0. Wenn es einen Weg von ¬x nach x gibt, dann definiere I(x) = 1. Danach lege die Interpretation fest für alle von a ∈ {x, ¬x} aus erreichbaren Literale falls I(a) = 1. Hierbei kann es keinen Konflikt geben: Angenommen von a aus ist sowohl b als auch b erreichbar und I(a) = 1 ist festgelegt. Dann gibt es auch einen Weg von b nach a, was aber nur möglich ist, wenn I(a) = 0 wäre. Ist eine Variable y nicht erreichbar von den bereits I-festgelegten Variablen, dann lege I(y) = 1 fest, und definiere auch alle von y aus erreichbaren Literale + a als I(a) = 1. Hierbei kann es kein b mit y − → b geben, bei dem bereits I(b) = 0 festgelegt wurde, denn es gibt einen Weg von b nach y, der dann schon I(y) = 0 festgelegt hätte. Also kann man die Interpretation festlegen, so dass alle Kanten Implikationen entsprechen unter I. Dann sind auch alle Klauseln von I erfüllt: Eine Klausel a ∨ b erzeugt ja eine Kante a → b. Wenn I(b) = 1 ist die Klausel offenbar erfüllt. Wenn I(b) = 0 ist, dann kann man aus der Kante b → a schließen, dass I(a) = 1 ist, also dass I(a) = 0 sein und die Klausel wird auch von I erfüllt. Die Konstruktionen und die Wege-Suche sind in polynomieller Zeit machbar. 2 Definition 2.32 Eine Klauselmenge ist Horn, bzw eine Hornklauselmenge, wenn es in jeder Klausel maximal ein positives Literal gibt. Eine Klauselmenge C ist renamable Horn, wenn es eine Umbenennung σ gibt, die für eine Untermenge V der Variablen und mit σ := {x 7→ x; x 7→ x | x ∈ V }, so dass σ(C) eine Hornklauselmenge ist. Automatische Deduktion, SS 2014, vom 04.04.2014 32 Es kann in einer Hornklauselmenge positive 1-Klauseln geben: diese nennt man Fakten. Aussage 2.33 Erfüllbarkeit von Hornklauselmengen ist polynomiell entscheidbar. Auch die erfüllende Interpretation kann in polynomieller Zeit konstruiert werden. Beweis. Sei C die Klauselmenge. Wenn es keine Fakten (positive 1-Klauseln) gibt, dann ist die Menge erfüllbar: man definiert alle Variablen als falsch. Wenn es eine positive Unit x gibt, dann definiert man die als wahr, und erzeugt eine Klauselmenge, aus der alle Klauseln, die x positiv enthalten, eliminiert sind und alle negativen Vorkommen von x aus Klauseln gelöscht sind. Es resultiert eine Hornklauselmenge C 0 und diese ist erfüllbar gdw. C erfüllbar ist und auch kleiner. Insgesamt ist das Verfahren polynomiell durchführbar. Bemerkung 2.34 Erfüllbarkeit von Hornklauselmengen kann man in Zeit O(n2 log n) testen, wobei n die Größe der eingegebenen Klauselmenge ist. Es geht sogar O(n log n) mit guten Datenstrukturen: Dazu erst alle Klauseln in einen Suchbaum einfügen. Dabei alle Unit Klauseln in einer Liste merken. Pro Klausel die Größe speichern und die vorkommenden Variablen als Suchbaum. Dann die Liste abarbeiten: 1. Für jede unit x in der Unit-Liste: In alle Klauseln K gehen die x enthalten: (a) Wenn x positiv in K, dann K löschen. (b) Wenn x negativ in K, dann x aus K löschen und Variable-Suchbaum von K anpassen. (c) Wenn der Suchbaum nur noch eine Variablen enthält, dann die Klausel in die Unit-Liste. 2. Wenn es eine leere Klausel gibt (entstanden aus eine nur negativen Klausel), dann unerfüllbar; Sonst: Klauselmenge erfüllbar. Satz 2.35 Eine Klauselmenge C kann in polynomieller Zeit daraufhin überprüft werden, ob sie renamble Horn ist, und auch das Renaming kann in polynomieller Zeit berechnet werden. Beweis. Sei C die gegebene Klauselmenge. Konstruiere eine 2-Klauselmenge C2 : diese enthält alle Klauseln a ∨ b, wenn a 6= b in einer Klausel von C vorkommen. D.h. es gehen nur Klauseln aus C mit mindestens 2 Literalen hier ein. Die Idee ist, dass C2 erzwingt, dass die negierten Literale der umbenannten Hornformel als wahr interpretiert werden. Es gilt: C ist renamable Horn gdw. C2 erfüllbar: Wenn C renamable Horn, dann gibt es eine Menge von Variablen V und eine Ersetzung σ so dass σ(C) eine Hornklauselmenge ist. Eine erfüllende Interpretation nach der Umbenennung ergibt sich, wenn alle Variablen mit 0 interpretiert Automatische Deduktion, SS 2014, vom 04.04.2014 33 werden. In dem Fall wird nach der Umbenennung in den Klauseln maximal ein Literal mit 0 interpretiert. ändert man die Interpretation jetzt so ab, dass I(x) = 1, wenn x ∈ V und I(x) = 0, wenn x 6∈ V , dann wird in jeder ursprünglichen Klausel maximal ein Literal mit 0 interpretiert. Für Klauseln u ∨ v in C2 mit u 6= v muss somit eines mit 1 interpretiert werden und deshalb ist C2 erfüllbar. Wenn C2 erfüllbar ist, dann kann man mit analogen Argumenten zeigen, dass C eine Hornklauselmenge ist: Sei I die erfüllende Interpretation von C2 . Dann sieht man, dass in jeder Klauseln von C maximal ein Literal mit 0 interpretiert wird. Jetzt können wir eine Substitution σ angeben: σ benennt die mit 0 interpretierten Literal so um, dass diese positive Variablen sind. Literale, die von I mit 1 bewertet sind, werden so umbenannt, dass diese negative Literale sind. Jetzt muss man nur noch einsehen, dass dabei kein Konflikt entsteht: Der einzige mögliche Konflikt sind zwei verschiedene Literale, die mit 0 bewertet sind, und die in einer einzigen Klausel vorkommen. Das war aber schon ausgeschlossen. Satz 2.36 Eine Klauselmenge C, die keine 1-Klauseln hat, kann in polynomieller Zeit daraufhin überprüft werden, ob sie renamble Horn ist, und auch das Renaming kann in polynomieller Zeit berechnet werden. Beweis. Sei C die gegebene Klauselmenge (ohne 1-Klauseln). Konstruiere eine 2-Klauselmenge C2 : diese enthält alle Klauseln a ∨ b, wenn a 6= b in einer Klausel von C vorkommen. D.h. es gehen nur Klauseln aus C mit mindestens 2 Literalen hier ein. Die Idee ist, dass C2 erzwingt, dass die negierten Literale der umbenannten Hornformel als wahr interpretiert werden. Es gilt: C ist renamable Horn gdw. C2 erfüllbar: Wenn C renamable Horn, dann gibt es eine Menge von Variablen V und eine Ersetzung σ so dass σ(C) eine Hornklauselmenge ist. Eine erfüllende Interpretation nach der Umbenennung ergibt sich, wenn alle Variablen mit 0 interpretiert werden. Das geht, da alle Klauseln mindestens 2 Literale enthalten. In dem Fall wird nach der Umbenennung in den Klauseln maximal ein Literal mit 0 interpretiert. Ändert man die Interpretation jetzt so ab, dass I(x) = 1, wenn x ∈ V und I(x) = 0, wenn x 6∈ V , dann wird in jeder ursprünglichen Klausel maximal ein Literal mit 0 interpretiert. Für Klauseln u ∨ v in C2 mit u 6= v muss somit eines mit 1 interpretiert werden und deshalb ist C2 erfüllbar. Wenn C2 erfüllbar ist, dann kann man mit analogen Argumenten zeigen, dass C eine Hornklauselmenge ist: Sei I die erfüllende Interpretation von C2 . Dann sieht man, dass in jeder Klauseln von C maximal ein Literal mit 0 interpretiert wird. Jetzt können wir eine Substitution σ angeben: σ benennt die mit 0 interpretierten Literal so um, dass diese positive Variablen sind. Literale, die von I mit 1 bewertet sind, werden so umbenannt, dass diese negative Literale sind. Jetzt muss man nur noch einsehen, dass dabei kein Konflikt entsteht: Der einzige mögliche Konflikt sind zwei verschiedene Literale, die mit 0 bewertet sind, und die in einer einzigen Klausel vorkommen. Das war aber schon ausgeschlossen. 1-Klauseln in einer Klauselmenge C sind kein Problem beim Schließen, bei der Suche nach einem Widerspruch oder bei der Suche nach einer erfüllenden Belegung, da man damit unit-propagation die Klauselmenge verkleinern kann. 34 Automatische Deduktion, SS 2014, vom 04.04.2014 2.6 Resolution für Aussagenlogik Das Resolutionsverfahren dient zum Erkennen von Widersprüchen, wobei statt des Tests auf Allgemeingültigkeit einer Formel F die Formel ¬F in eine Klauselform umgewandelt wird und diese dann auf Unerfüllbarkeit getestet wird. Eine Begründung für die Korrektheit wurde bereits gegeben. Eine erweiterte liefert das folgende Lemma zum Beweis durch Widerspruch: Lemma 2.37 Eine Formel A1 ∧ . . . ∧ An A1 ∧ . . . ∧ An ∧ ¬F widersprüchlich ist. =⇒ F ist allgemeingültig gdw. Beweis. Übungsaufgabe 2 Die semantische Entsprechung ist: Lemma 2.38 {A1 , . . . , An } |= F gdw. es keine Interpretation I gibt, so dass I |= {A1 , . . . , An , ¬F } Die Resolution ist eine Regel, die auf einer Klauselmenge operiert und mit der man aus zwei Klauseln der Klauselmenge eine weitere herleiten und diese dann zur Klauselmenge hinzufügen kann. Resolution: A ∨B1 ∨ . . . ∨ Bn ¬A ∨C1 ∨ . . . ∨ Cm B1 ∨ . . . ∨ Bn ∨ C1 ∨ . . . ∨ Cm Man nennt die ersten beiden Klauseln auch Elternklauseln und die neu hergeleitete Klausel Resolvente. Auf der Ebene der Klauselmengen sieht das Verfahren so aus: C → C ∪ {R} wobei R eine Resolvente ist, die aus zwei Klauseln von C berechnet worden ist. Man nimmt der Einfachheit halber an, dass Klauseln Mengen sind; d.h. es kommen keine Literale doppelt vor. Außerdem nimmt man auch noch an, dass die Konjunktion der Klauseln eine Menge ist, d.h. nur neue Klauseln, die nicht bereits vorhanden sind, können hinzugefügt werden. Wird die leere Klausel hergeleitet, ist das Verfahren beendet, denn ein Widerspruch wurde hergeleitet. Eingesetzt wird die Resolution zur Erkennung unerfüllbarer Klauselmengen. Es werden solange Resolventen hergeleitet, bis entweder die leere Klausel hinzugefügt wurde oder keine neue Resolvente mehr herleitbar ist. Dies geschieht meist in der Form, dass man Axiome (als Konjunktion) eingibt und ebenso eine negierte Folgerung, so dass die Unerfüllbarkeit bedeutet, dass man einen Widerspruch hergeleitet hat. Wenn man keine neuen Klauseln mehr herleiten kann, oder wenn besonders kurze (aussagekräftige) Klauseln hergeleitet werden, kann man diese als echte Folgerungen aus den eingegebenen Formeln ansehen, und evtl. ein Modell konstruieren. Allerdings ist das bei obiger Widerspruchsvorgehensweise nicht unbedingt ein Modell der Axiome, da die negiert eingegebene Folgerung dazu beigetragen haben kann. Automatische Deduktion, SS 2014, vom 04.04.2014 35 Lemma 2.39 Wenn C → C 0 mit Resolution, dann ist C äquivalent zu C 0 . Beweis. Wir zeigen den nichttrivialen Teil: Sei I eine Interpretation, die sowohl A ∨ B1 ∨ . . . ∨ Bn und ¬A ∨ C1 ∨ . . . ∨ Cm wahrmacht. Wenn I(A) = 1, dann gibt es ein Cj , so dass I(Cj ) = 1. Damit ist auch die Resolvente unter I wahr. Analog für den Fall I(A) = 0. 2 Aussage 2.40 Die Resolution auf einer aussagenlogischen Klauselmenge terminiert, wenn man einen Resolutionsschritt nur ausführen darf, wenn sich die Klauselmenge vergrößert. Beweis. Es gibt nur endlich viele Klauseln, da Resolution keine neuen Variablen einführt. 2 Übungsaufgabe 2.41 Gebe ein Beispiel an, so dass R sich aus C1 , C2 mit Resolution herleiten lässt, aber C1 ∧ C2 ⇐⇒ R ist falsch Da Resolution die Äquivalenz der Klauselmenge als Formel erhält, kann man diese auch verwenden, um ein Modell zu erzeugen, bzw. ein Modell einzuschränken. Leider ist diese Methode nicht immer erfolgreich: Zum Beispiel betrachte man die Klauselmenge {{A, B}, {¬A, ¬B}}. Resolution ergibt: {{A, B}, {A, ¬A}, {B, ¬B}, {¬A, ¬B}} D.h. es wurden zwei tautologische Klauseln hinzugefügt. Ein Modell lässt sich direkt nicht ablesen. Zum Generieren von Modellen ist die Davis-PutnamLogemann-Loveland-Prozedur (siehe 2.7) oder ein Tableaukalkül (siehe 2.9) geeigneter . Was jetzt noch fehlt, ist ein Nachweis der naheliegenden Vermutung, dass die Resolution für alle unerfüllbaren Klauselmengen die leere Klausel auch findet. Satz 2.42 Für eine unerfüllbare Klauselmenge findet Resolution nach endlich vielen Schritten die leere Klausel. Beweis. Dazu genügt es anzunehmen, dass eine unerfüllbare Klauselmenge C existiert, die keine Herleitung der leeren Klausel mit Resolution erlaubt. Wir können annehmen, dass es eine kleinste Klauselmenge gibt bzgl. des Maßes lxn(C) = Anzahl der Literale − Anzahl der Klauseln (Anzahl der überschüssigen Literale). Im Basisfall (d.h. lxn(C) = 0) gibt es nur noch 1-Klauseln. Damit diese Klauselmenge unerfüllbar ist, muss es eine Variable A geben, so dass sowohl {A} als auch {¬A} als Klausel vorkommt. Dann ist aber noch eine Resolution möglich, die die leere Klausel herleitet. Sei also lxn(C) > 0. Dann betrachte eine Klausel K ∈ C, die mehr als ein Literal hat. Ersetzt man K durch K 0 , wobei ein Literal gestrichen ist, d.h. K = K 0 ∪{L}, so erhält man ebenfalls eine unerfüllbare Klauselmenge C 0 : Wäre C 0 erfüllbar mit der Interpretation I, dann auch I |= C. Da lxc(C 0 ) < lxc(C), gibt es Automatische Deduktion, SS 2014, vom 04.04.2014 36 für C 0 eine Herleitung der leeren Klausel. Wenn diese Herleitung K 0 nicht (als Elternklausel) benötigt, dann kann man diese Herleitung bereits in C machen, also benötigt diese Herleitung die Klausel K. Übersetzt man diese Herleitung der leeren Klausel in eine Herleitung unter Benutzung von K, so erhält man eine Herleitung der 1-Klausel {L}. Betrachtet man jetzt noch die Klauselmenge C 00 , die aus C entsteht, wenn man K durch {L} ersetzt, so sieht man wie oben: C 00 ist unerfüllbar und lxc(C 00 ) < lxc(C). Damit existiert eine Herleitung der leeren Klausel in C 00 . Zusammengesetzt erhält man eine Herleitung der leeren Klausel in C. 2 Beweis. Alternativer Beweis mit Induktion nach der Größe der Klauselmenge: Sei C eine unerfüllbare Klauselmenge. Wähle ein existierende Variable A und zerlege die Klauselmenge in drei Unterklauselmengen: C = CA ∪C¬A ∪C∅ , wobei CA alle Klauseln von C enthält, die A positiv enthalten, CA alle Klauseln die ¬A enthalten und C∅ die Klauseln die weder A noch ¬A enthalten. Dann gibt es keine Interpretation I mit I(A) = 0, die CA ∪ C∅ erfüllt und keine Interpretation I mit I(A) = 1, die C¬A ∪ C∅ , also sind folgende Klauselmengen 0 0 genau die CA -Klauseln enthält, wobei A ∪ C∅ wobei CA unerfüllbar: C1 = CA 0 0 genau die C¬A -Klauseln enthält, gestrichen wurde; C2 = C¬A ∪ C∅ wobei C¬A wobei ¬A gestrichen wurde. Resolution findet die leere Klausel, sowohl für C1 als auch für C2 . Wenn C∅ unerfüllbar, dann kann Resolution bereits hier die leere Klausel herleiten. Wenn C∅ erfüllbar, dann benutzt die Resolutionsherlei0 . Diese kann man erweitern tung der leeren Klausel in C1 eine Klausel aus CA und erhält eine Resolutionsherleitung von {A} aus CA ∪ C∅ . Analog eine Resolutionsherleitung von {¬A} aus C¬A ∪ C∅ . Danach kann man einen weiteren Resolutionsschritt machen und aus {A} und {¬A} die leere Klausel herleiten. Satz 2.43 Resolution erkennt unerfüllbare Klauselmengen. Was wir hier nicht mehr durchführen wollen, sondern auf die Behandlung der allgemeinen Resolution verschieben, ist die Verwendung von Redundanzkriterien. Z.B. Löschung von Tautologien, unnötigen Klauseln usw. Die Komplexität im schlimmsten Fall wurde von A. Haken [Hak85] (siehe auch [Ede92] nach unten abgeschätzt: Es gibt eine Folge von Formeln (die sogenannten Taubenschlag-formeln (pigeon hole formula, Schubfach-formeln), für die gilt, dass die kürzeste Herleitung der leeren Klausel mit Resolution eine exponentielle Länge (in der Größe der Formel) hat. Betrachtet man das ganze Verfahren zur Prüfung der Allgemeingültigkeit einer aussagenlogischen Formel, so kann man eine CNF in linearer Zeit herstellen, aber ein Resolutionsbeweis ist im schlimmsten Fall exponentiell lang, d.h. wird im schlimmsten Fall auch exponentiell lange dauern. Beachte, dass es formale Beweisverfahren gibt, die polynomiell lange Beweise für die Schubfachformeln haben. Es ist theoretisch offen, ob es ein Beweisverfahren gibt, das für alle Aussagen polynomiell lange Beweise hat: Dies ist äquivalent zum offenen Problem N P = co-N P. Automatische Deduktion, SS 2014, vom 04.04.2014 2.7 37 Davis-Putnam-Logemann-Loveland-Verfahren Die Prozedur von Davis, Putnam, Logemann und Loveland zum Entscheiden der Erfüllbarkeit (und Unerfüllbarkeit) von aussagenlogische Klauselmengen beruht auf Fallunterscheidung und Ausnutzen und Propagieren der Information. Wenn man die Vollständigkeit des Resolutionskalküls für Prädikatenlogik inklusive einiger Redundanzregeln voraussetzt, (Subsumtionsregel, Isolationsregel), kann man die Korrektheit leicht begründen. Definition 2.44 Resolutionsverfahren für Aussagenlogik (Davis-Putnam Prozedur) Sei C eine aussagenlogische Klauselmenge. Dann wird die Davis-PutnamLoveland-Logemann- Entscheidungsprozedur DP folgendermaßen (rekursiv) definiert: Es ist ein Algorithmus, der eine Klauselmenge als Eingabe hat, und genau dann true als Ausgabe hat, wenn die Klauselmenge unerfüllbar ist. Als Vorverarbeitungsschritt können wir annehmen, dass keine Tautologien in der Klauselmenge enthalten sind. D.h. es gibt keine Klausel, die gleichzeitig P und ¬P für eine Variable P enthält. 1. (a) Wenn die leere Klausel in C ist: RETURN true. (b) Wenn C die leere Klauselmenge ist: RETURN false. 2. wenn es in C eine 1-Klausel {P } (bzw. {¬P }) gibt, wobei P eine Variable ist, dann verändere C wie folgt: (a) Lösche alle Klauseln in denen P (bzw. ¬P ) als Literal vorkommt. (b) Lösche alle Vorkommen des Literals ¬P (bzw. P ) in anderen Klauseln. Die resultierende Klauselmenge sei C 0 . RETURN DP (C 0 ) 3. Wenn es isolierte Literale 2 gibt, wende die Löschregel für isolierte Literale an. D.h. lösche die Klauseln, in denen isolierte Literale vorkommen. Die resultierende Klauselmenge sei C 0 . RETURN DP (C 0 ) 4. Wenn keiner der obigen Fälle zutrifft, dann wähle eine noch in C vorkommende aussagenlogische Variable P aus. RETURN DP (C ∪ {{P }}) ∧ DP (C ∪ {{¬P }}) Dies ist ein vollständiges, korrektes Entscheidungsverfahren für die (Un-)Erfüllbarkeit von aussagenlogischen Klauselmengen. Punkt 2a) entspricht der Subsumtion, Punkt 2b) ist Resolution mit anschließender Subsumtion. Punkt 3) ist der Spezialfall der isolierten Literale und 4) ) ist eine Fallunterscheidung, ob P wahr oder falsch ist. Diese DP-Prozedur ist im allgemeinen sehr viel besser als eine vollständige Fallunterscheidung über alle möglichen Variablenbelegungen, 2 P ist isoliert, wenn ¬P nicht mehr vorkommt, entsprechend ¬P ist isoliert, wenn P nicht mehr vorkommt Automatische Deduktion, SS 2014, vom 04.04.2014 38 d.h. besser als die Erstellung einer Wahrheitstafel. Die DP-Prozedur braucht im schlimmsten Fall exponentiell viel Zeit, was nicht weiter verwundern kann, denn der Algorithmus löst ein co-N P-vollständiges Problem und als Unterproblem auch SAT, das Erfüllbarkeitsproblem für aussagenlogische Klauselmengen, das N P-vollständig ist. Der DP-Algorithmus ist erstaunlich schnell, wenn man bei Punkt 4) noch darauf achtet, dass man Literale auswählt, die in möglichst kurzen Klauseln vorkommen. Dies erhöht nämlich die Wahrscheinlichkeit, dass nach wenigen Schritten große Anteile der Klauselmenge gelöscht werden. Der DP-Algorithmus kann leicht so erweitert werden, dass im Falle der Erfüllbarkeit der Klauselmenge auch ein Modell berechnet wird. Der Algorithmus arbeitet depth-first mit backtracking. Wenn die Antwort erfüllbar“ ist, kann ” man durch Rückverfolgung der folgenden Annahmen ein Modell bestimmen: 1. Isolierte Literale werden als wahr angenommen. 2. Literale in 1-Klauseln werden ebenfalls als wahr angenommen. Beispiel 2.45 Betrachte folgende Klauselmenge, wobei jede Zeile einer Klausel entspricht. P, Q ¬P, Q R P, ¬Q, R ¬P, ¬Q, R P, Q, ¬R ¬P, Q, ¬R P, ¬Q, ¬R ¬P, ¬Q, ¬R Fall 1: Addiere die Klausel {P }. Das ergibt nach einigen Schritten: Q, R ¬Q, R Q, ¬R ¬Q, ¬R Fall 1.1: Addiere {Q}: ergibt die leere Klausel. Fall 1.2: Addiere {¬Q}: ergibt die leere Klausel. Fall 2: Addiere die Klausel {¬P }. Das ergibt nach einigen Schritten: Q ¬Q R Q ¬R ¬Q ¬R Weitere Schritte für Q ergeben R ¬R Automatische Deduktion, SS 2014, vom 04.04.2014 39 Auch dies ergibt sofort die leere Klausel. Damit hat die DP-Prozedur die eingegebene Klauselmenge als unerfüllbar erkannt. Beispiel 2.46 Wir nehmen uns ein Rätsel von Raymond Smullyan vor: Die Frage nach dem Pfefferdieb. Es gibt drei Verdächtige: Den Hutmacher, den Schnapphasen und die (Hasel)Maus. Folgendes ist bekannt: • Genau einer von ihnen ist der Dieb. • Unschuldige sagen immer die Wahrheit • Schnapphase: der Hutmacher ist unschuldig. • Hutmacher: die Hasel-Maus ist unschuldig Kodierung: H, S, M sind Variablen für Hutmacher, Schnapphase, Maus und bedeuten jeweils ist schuldig“. Man kodiert das in Aussagenlogik und fragt nach ” einem Modell. • H ∨S∨M • H =⇒ ¬(S ∨ M ) • S =⇒ ¬(H ∨ M ) • M =⇒ ¬(H ∨ S) • ¬S =⇒ ¬H • ¬H =⇒ ¬M Dies ergibt eine Klauselmenge (doppelte sind schon eliminiert): 1. H, S, M 2. ¬H, ¬S 3. ¬H, ¬M 4. ¬S, ¬M 5. S, ¬H 6. H, ¬M Wir können verschiedene Verfahren zur Lösung verwenden. 1. Resolution ergibt: 2 + 5 : ¬H, 3 + 6 : ¬M . Diese beiden 1-Klauseln mit 1 resolviert ergibt: S. Nach Prüfung, ob {¬H, ¬M, S} ein Modell ergibt, können wir sagen, dass der Schnapphase schuldig ist. Automatische Deduktion, SS 2014, vom 04.04.2014 40 2. Davis Putnam: Wir verfolgen nur einen Pfad im Suchraum: Fall 1: S = 0. Die 5-te Klausel ergibt dann ¬H. Danach die 6te Klausel ¬M . Zusammen mit (den Resten von) Klausel 1 ergibt dies ein Widerspruch. Fall 2: S = 1. Dann bleibt von der vierten Klausel nur ¬M übrig, und von der zweiten Klausel nur ¬H. Diese ergibt somit das gleiche Modell. Beispiel 2.47 Eine Logelei aus der Zeit“: ” Abianer sagen die Wahrheit, Bebianer lügen. Es gibt folgende Aussagen: 1. Knasi: Knisi ist Abianer. 2. Knesi: Wenn Knösi Bebianer, dann ist auch Knusi ein Abianer. 3. Knisi: Wenn Knusi Abianer, dann ist Knesi Bebianer. 4. Knosi: Knesi und Knüsi sind beide Abianer. 5. Knusi: Wenn Knüsi Abianer ist, dann ist auch Knisi Abianer. 6. Knösi: Entweder ist Knasi oder Knisi Abianer. 7. Knüsi: Knosi ist Abianer. Eine offensichtliche Kodierung ergibt A <=> I E <=> (-OE => U) I <=> (U => -E) O <=> (E /\ UE) U <=> (UE => I) OE <=> (A XOR I) UE <=> O Die Eingabe in den Davis-Putnam-Algorithmus ergibt: abianer1Expr = "((A <=> I) /\ (E <=> (-OE => U)) /\ (I <=> (U => -E)) /\ (O <=> (E /\ UE)) /\ (U <=> (UE => I)) /\ (OE <=> -(A <=> I)) /\ (UE <=> O))" Resultat: "Modell: -OE, -O, -UE, E, U, -I, -A" Damit sind Knesi und Knusi Abianer, die anderen sind Bebianer. Beispiel 2.48 Ein weiteres Rätsel von Raymond Smullyan: Hier geht es um den Diebstahl von Salz. Die Verdächtigen sind: Lakai mit dem Froschgesicht, Lakai mit dem Fischgesicht, Herzbube. Die Aussagen und die bekannten Tatsachen sind: • Frosch: der Fisch wars Automatische Deduktion, SS 2014, vom 04.04.2014 41 • Fisch: ich wars nicht • Herzbube: ich wars • Genau einer ist der Dieb • höchstens einer hat gelogen Man sieht, dass es nicht nur um die Lösung des Rätsels selbst geht, sondern auch um etwas Übung und Geschick, das Rätsel so zu formalisieren, dass es von einem Computer gelöst werden kann. Man muss sich auch davon überzeugen, dass die Formulierung dem gestellten Problem entspricht. Wir wollen Aussagenlogik verwenden. Wir verwenden Variablen mit folgenden Namen und Bedeutung: FRW FIW HBW FID FRD HBD Frosch sagt die Wahrheit Fisch sagt die Wahrheit Herzbube sagt die Wahrheit der Fisch ist der Dieb der Frosch ist der Dieb der Herzbube ist der Dieb Die Formulierung ist: höchstens ¬F RW ¬F IW ¬HBW einer =⇒ =⇒ =⇒ sagt die Wahrheit: F IW ∧ HBW F RW ∧ HBW F RW ∧ HIW genau einer ist der Dieb: F ID ∨ F RD ∨ HBD F ID =⇒ ¬F RD ∧ ¬HBD F RD =⇒ ¬F ID ∧ ¬HBD HBD =⇒ ¬F ID ∧ ¬F RD Die Aussagen: F RW =⇒ F IW =⇒ HBW =⇒ F ID ¬F ID HBD Eingabe in den DP-Algorithmus: dp "((-FRW => FIW /\ HBW) /\ (-FIW => FRW /\\ HBW) /\ (-HBW => FRW /\ HIW) /\ (FID => -FRD /\ -HBD) /\ (FRD => -FID /\ -HBD) /\ (HBD => -FID /\ -FRD) /\ (FRW => FID) /\ (FIW => -FID) /\ (HBW => HBD))" Automatische Deduktion, SS 2014, vom 04.04.2014 42 Die berechnete Lösung ist: HBD, −F ID, HBW, F IW, −F RW, −F RD D.h FRW ist falsch, d.h. der Fisch hat gelogen und der Herzbube war der Dieb. Beispiel 2.49 Anwendung auf ein Suchproblem: das n-Damen Problem. Es sollen Königinnen auf einem quadratischen Schachbrett der Seitenlänge n so platziert werden, dass diese sich nicht schlagen können. damit die Formulierung einfacher wird, erwarten wir, dass sich in jeder Zeile und Spalte eine Königin befindet. Ein Programm zum Erzeugen der Klauselmenge erzeugt im Fall n = 4: [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [1, 5, 9, 13], [2, 6, 10, 14], [3, 7, 11, 15], [4, 8, 12, 16], [-1, -5], [-1, -9], [-1, -13], [-1, -2], [-1, -6], [-1, -3], [-1, -11], [-1, -4], [-1, -16], [-5, -9], [-5, -13], [-5, -2], [-5, -6], [-5, -10], [-5, -7], [-5, -15], [-5, -8], [-9, -13], [-9, -6], [-9, -10], [-9, -14], [-9, -3], [-9, -11], [-9, -12], [-13, -10], [-13, -14], [-13, -7], [-13, -15], [-13, -4], [-13, -16], [-2, -6], [-2, -10], [-2, -14],[-2, -3], [-2, -7], [-2, -4], [-2, -12], [-6, -10], [-6, -14], [-6, -3], [-6, -7], [-6, -11], [-6, -8], [-6, -16], [-10, -14], [-10, -7], [-10, -11], [-10, -15],[-10, -4], [-10, -12], [-14, -11], [-14, -15], [-14, -8], [-14, -16], [-3, -7], [-3, -11], [-3, -15], [-3, -4], [-3, -8], [-7, -11], [-7, -15], [-7, -4], [-7,-8], [-7, -12], [-11, -15], [-11, -8], [-11, -12], [-11, -16], [-15, -12], [-15, -16], [-4, -8], [-4, -12], [-4, -16], [-8, -12], [-8, -16], [-12, -16]] Das Ergebnis der DP-Prozedur sind zwei Interpretationen: > davisPutnamAlle (generate_nqueens 4) [[-4, -8, -15, 5, -13, 14, -6, -2, 12, -9, -1, 3, -16, -10, -7, -11], [-4, 2, 8, -6, -1, 9, -12, -14, -13, -5, 15, -3, -16, -10, -7, -11]] Die entsprechen den zwei möglichen Platzierungen im Fall n = 4. Der Aufruf dpqueens 8 ergibt nach kurzer Zeit: - - D - - - - - - - - - - D - D - - - - - - - - - - - - D - - - - D - - D - - - - - - - - - D - - - - - - - - D - - Automatische Deduktion, SS 2014, vom 04.04.2014 43 Beispiel 2.50 Das n-Damen Problem gibt es noch in weiteren Varianten: Die Torus-Variante: In dem Fall setzt sich die Bedrohung über der Rand an der Seite und oben und unten fort. Die die Bedrohung entlang Diagonallinien des 8 × 8 Feldes ist so dass die Dame in der ersten Zeile im unteren Beispiel die Dame in der vierten Zeile bedroht, wenn man die Diagonale nach links unten verfolgt. - - D - - - - - - - - - - D - D - - - - - - - - - - - - D - - - - D - - D - - - - - - - - - D - - - - - - - - D - Recherche im Internet ergibt (z.B Polya hat sich schon damit beschäftigt): es gibt offenbar Lösungen, wenn n teilerfremd zu 6 ist und n ≥ 5. D.h. für n = 5, 7, 11, 13, 17, .. gibt es Lösungen, für n = 4, 6, 8, 9, 10, 12, 14, 15, 16, . . . gibt es keine Lösungen. Eine Lösung (Aufruf: dpqueenscyl 5) ist: D - - - - - D - - - - - D - D - - - - - D Für n = 11 werden 4 Lösungen ermittelt und für n = 13 werden 174 Lösungen ermittelt (allerdings nach einer Symmetrieoptimierung). Eine generische Lösung ist (Nr 33.): D - - - - - - - - - - - - - D - - - - - - - - - - - - - D - - - - - - - - - - - - - D - - - - - - - - - - - - - D - - - - - - - - - - - - - D - - - - - - - - - - - - - D - D - - - - - - - - - - - - - D - - - - - - - - - - - - - D - - - - - - - - - - - - - D - - - - - - - - - - - - - D - - - - - - - - - - - - - D Aus diesen Beispielen kann man sich auch eine Serie von erfüllbaren und unerfüllbaren Klauselmengen generieren, die man für Testzwecke verwenden kann. Beispiel 2.51 Sudoku: Lösen mittels DP-Algorithmus Sudoku-Rätsel setze ich mal als bekannt voraus: Es ist ein 9 × 9 Feld, unterteilt in 9 3 × 3 Quadrate: In jeder Zeile, Spalte und in jedem 3 × 3-Quadrat muss jede Zahl zwischen 1 und 9 genau einmal vorkommen. Einige Zahlen sind vorgegeben. Automatische Deduktion, SS 2014, vom 04.04.2014 44 Es gibt eine Beispiel-Implementierung, die auf dem DP-Algorithmus basiert und folgende Sequenz von Operationen ausführt: • Texteingabe: die Aufgabe, d.h. die bereits bekannten Zahlen. • Parser: Texteingabe wird überführt in eine Klauselmenge aus Units. die logischen Variablen Xi,j,k beschreiben ob auf Feld mit Koordinate i, j die Zahl k steht oder nicht. • Generator: Klauselmenge, die alle Bedingungen beschreibt. (Theorie) Zum Beispiel muss genau eine der Variable x1,1,1 , . . . x1,1,9 wahr sein und die anderen falsch. • DP-Lauf mit der Klauseleingabe • Aus der ausgegebenen Interpretation wird eine textuelle Lösung berechnet. sudokuex20100419 = ["3--5-4--1", "-1-----7-", "--9-1-5--", "4--3-9--7", "--3---9--", "1--8-7--6", "--5-6-2--", "-8-----4-", "2--4-5--9"] > length (sudokucnf sudokuex20100419) 12016 > sudokuexam20100419loesung > sudokuexam20100419trace > sudokuexam20100419loesung > sudokuexam20100419loesung 326574891 514698372 879213564 468329157 753146928 192857436 945761283 681932745 237485619 = sudokul sudokuex20100419 45 Automatische Deduktion, SS 2014, vom 04.04.2014 Diese Implementierung ist nur ein Demonstrator, der zeigen soll, dass und wie man mit Logik auch solche Puzzles lösen kann. die Rechenzeit ist im Sekundenbereich, kann aber auch recht lange werden, wenn es sich um ein schweres Problem handelt. Zum Vergleich:es gibt spezialisierte Algorithmen zB im Internet, die alle Sudoku-Fragen im Milli-Sekunden berechnen. 2.8 Davis-Putnam-Logemann-Loveland Backjumping Verfahren mit Die DPLL-Implementierungen sind aktuell die schnellsten implementierten Algorithmen um aussagenlogische Klauselmenge auf Erfüllbarkeit zu testen (SATSolver). Ein wichtiger Trick bzw eine wichtige Verbesserung besteht darin, das Backtracking zu verbessern, das in der obigen Implementierung durch die Rekursion festgelegt war. Wir geben die wesentlichen Ideen und die Motivation und Begründungen dieser Optimierungen der DPLL-Methode an (siehe [NOT06b]). Dazu benutzen wir die Schreibweise aus [NOT06b]. Die DPLL-Prozedur hat als Zustandsdarstellung M || F , wobei M die aktuelle Belegung von aussagenlogischen Variablen darstellt durch eine Folge von Literalen. Hierbei werden die Literale, für die Fallunterscheidung gemacht werden muss, mit d gekennzeichnet: decision literals“. F ist eine Formel, i.a. die Klau” selmenge, die während der (einfachen) Prozedur nicht verändert wird. l wird als undefiniert in M bezeichnet, wenn l durch M nicht festgelegt wird, d.h. weder l noch ¬l in M vorkommen. Die DPLL-Prozedur ist beendet wenn folgendes gilt, wobei es zwei Möglichkeiten gibt: • Wenn für alle Klauseln C aus F gilt: M |= C, und wenn keine Regel mehr anwendbar ist. Dann hat die DPLL Prozedur ein Modell M für F gefunden. • Wenn Fail anwendbar ist. In dem Fall sind alle Möglichkeiten erschöpft, M besteht nur noch aus Literalen ohne Alternative, und man findet trotzdem eine Klausel C mit M |= ¬C. Die Ausgabe der DPLL-Prozedur ist dann, dass F widersprüchlich ist. Die DPLL-Prozedur hat 5 Regeln: 46 Automatische Deduktion, SS 2014, vom 04.04.2014 UnitPropagate : M || F, C ∨ l =⇒ M l || F, C ∨ l M |= ¬C l ist nicht definiert in M PureLiteral : M || F =⇒ M l || F l kommt in einer Klausel von F vor ¬l kommt in F nicht vor l ist nicht definiert in M M ld || F l oder ¬l kommt in einer Klausel von F vor l ist nicht definiert in M Decide : M || F =⇒ Fail : M || F, C =⇒ M |= ¬C M enthält keine d-Literale M ld N |= ¬C N enthält keine d-Literale Fail Backtrack : d M l N || F, C =⇒ M ¬l || F, C Dieses Verfahren entspricht dem rekursiven Verfahren, das schon behandelt wurde, auch wenn es anders notiert ist. Kurze Kommentare zu den Regeln, auch um die Notation zu vertiefen: UnitPropagate Wenn es eine Klausel C ∨ l gibt, so dass M |= ¬C, d.h. C ist falsch, dann muss l wahr sein. Also kann man l zu M hinzunehmen. PureLiteral Wenn l vorkommt, aber ¬l nicht, dann kann man l als wahr annehmen, da es im Fall der Erfüllbarkeit auch ein Modell gibt, das auch l wahr macht. Ein Unterschied zur Prozedur DP oben ist, dass in DPLL die PureLiteralRegel sich auf globale Vorkommen von l, ¬l bezieht, während DP sich die puren Literale nach Wegstreichen von Klauseln anschaut, und deshalb diese Regel besser einsetzt. Decide: Fallunterscheidung zur Belegung von l (die Fallunterscheidung ist hier nicht explizit in den Regeln enthalten). Normalerweise wird Decide nur angewendet, wenn keine andere Regel anwendbar ist. Fail: Wenn eine Klausel falsch wird unter der aktuellen Belegung, aber es keine Möglichkeit gibt, zurückzusetzen, dann ist die Klauselmenge unerfüllbar. Wenn M kein d-Literal enthält, dann folgen alle Literale in M aus F . Backtrack: Alle Literale in N sind Folgerungen aus M ld , also kann man bis zum letzten d-Literal zurückgehen, und sich dort anders entscheiden. Die Klausel C, die falsch ist unter M , wird auch Konflikt-Klausel genannt Ein besseres Backtracking ist möglich, wenn man genauer verfolgt, was als Ursache für die Konflikt-Klausel in Frage kommt. Hier muss man auch rückwärts die Effekte von UnitPropagate beachten. 47 Automatische Deduktion, SS 2014, vom 04.04.2014 Betrachte folgendes Beispiel aus [NOT06b] zum besseren Backtracking. Beispiel 2.52 In diesem Beispiel werden die negativen Literale durch eine Oberlinie markiert. ∅ 1d 1d 2 d d 1 23 1d 23d 4 1d 23d 45d 1d 23d 45d 6 d 1d 23d 45 || || || || || || || || 1 ∨ 2, 1 ∨ 2, 1 ∨ 2, 1 ∨ 2, 1 ∨ 2, 1 ∨ 2, 1 ∨ 2, 1 ∨ 2, 3 ∨ 4, 3 ∨ 4, 3 ∨ 4, 3 ∨ 4, 3 ∨ 4, 3 ∨ 4, 3 ∨ 4, 3 ∨ 4, 5 ∨ 6, 5 ∨ 6, 5 ∨ 6, 5 ∨ 6, 5 ∨ 6, 5 ∨ 6, 5 ∨ 6, 5 ∨ 6, 6∨5∨2 6∨5∨2 6∨5∨2 6∨5∨2 6∨5∨2 6∨5∨2 6∨5∨2 6∨5∨2 =⇒ =⇒ =⇒ =⇒ =⇒ =⇒ =⇒ =⇒ Decide UnitPropagate Decide UnitPropagate Decide UnitPropagate Backtrack Die Konflikt-Klausel ist 6 ∨ 5 ∨ 2. Man sieht, dass dies eine logische Konsequenz der Entscheidung 1d ist, aber nicht aus 3d folgt. Auch kann man erkennen (auch algorithmisch), dass 1d mit 5d unvereinbar ist. Also kann man die Klausel 1 ∨ 5 herleiten und zum Backtracking verwenden. D.h. eigentlich könnte man mit Backjump so fortsetzen: 3d kann übersprungen werden und 5 kann ohne Alternative benutzt werden. 1d 23d 45d 6 1d 25 || || 1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2 1 ∨ 2, 3 ∨ 4, 5 ∨ 6, 6 ∨ 5 ∨ 2 =⇒ Backjump Die DPLL-Prozedur mit Backjump besteht aus den 4 DPLL-Regeln, und statt der Backtrack-Regel aus der Backjump-Regel: Backjump : M ld N || F, C =⇒ M l0 || F, C M ld N |= ¬C Es gibt eine Klausel C 0 ∨ l0 mit F, C |= C 0 ∨ l0 und M |= ¬C 0 l0 ist nicht definiert in M 0 l oder ¬l0 kommen in F oder in M ld N vor Hierbei ist C die Konfliktklausel und C 0 ∨ l0 die Backjump-Klausel. Im obigen Beispiel ist C = 6 ∨ 5 ∨ 2, C 0 = 1 und l0 = 5. Beachte, dass die Klausel C 0 ∨ l0 i.a. nicht in F vorkommt, sondern erst erzeugt werden muss. Zu dieser Berechnung gibt es in der Literatur und in den implementierten SAT-Beweisern verschiedene Möglichkeiten und Strategien; eine ist oben im Beispiel angedeutet. Oft wird die Klausel C 0 ∨l0 auch als Lemma, oder als gelernte Klausel bezeichnet Es wird oft der Konfliktgraph zur partiellen Interpretation und zu M mitgeführt. Der Konfliktgraph am Beispiel oben: 48 Automatische Deduktion, SS 2014, vom 04.04.2014 1 2 3 4 5 -6 Wid Konflikt Ein leicht komplexeres Beispiel, bei dem der Konflikt nicht direkt am d-Literal auftritt: • F enthält: {9, 6, 7, 8}, {8, 7, 5}, {6, 8, 4}, {4, 1}, {4, 5, 2}, {5, 7, 3}, {1, 2, 3} • M ist von der Form: . . . 6 . . . 7 9d 8 5 4 1 2 3 49 Automatische Deduktion, SS 2014, vom 04.04.2014 6 9d 2 -8 -1 2 -5 -7 -3 Zum Fortschritt bzw der Ordnung die die Terminierung der DPLL-Prozedur bestimmt: Diese wird alleine bestimmt durch die partielle Interpretation M , inklusive der dMarkierungen, da der Zustand M || C nur durch Unterschiede von M bestimmt wird. M 0 ld . . . > M 0 l0 . . . wenn l0 kein d-Literal (d.h. kein Fallunterscheidungs-Literal) ist. Damit kann man l0 aus den d-Literalen von M 0 (und aus C) herleiten: ohne Fallunterscheidung. Die normale DPLL-Prozedur verkleinert die obige Ordnung in jedem Schritt. Da die Ordnung fundiert ist – es gibt nur endlich viele Literale – terminiert das Verfahren. 2.8.1 Restart, Regeln zum Lernen und Vergessen Eine weitere Möglichkeiten zum Verbessern der DPLL-Prozedur ist das (gelegentliche) Restarten der DPLL-Prozedur: Restart : M || F =⇒ ∅ || F, F 0 F |= F 0 F 0 ermittelt aus M und F Damit kann man die ganze Prozedur mit einer erweiterten Klauselmenge nochmal starten, wobei man Klauseln hinzunimmt, die aus dem abgebrochenen DPLL-Lauf als Folgerungen aus F implizit berechnet wurde. Diese sollen möglichst klein sein. Meist wird Restart statt eines Backjumps gemacht, allerdings so gesteuert, dass das teurere Restarten eher selten passiert. Im allgemeinen werden mittels Statistiken und Strategien diese neuen Klauseln bestimmt, und auch evtl. wieder eliminiert, wenn diese (lt. Ablaufstatistik) keinen Nutzen bringen. Lernen und Vergessen in der DPLL-Prozedur wird zwar sehr stark von heuristischen Parametern, Statistiken usw. bestimmt, aber die allgemeinen Regeln kann man leicht so formulieren: 50 Automatische Deduktion, SS 2014, vom 04.04.2014 Learn : M || F =⇒ M || F, C Forget : M || F, C =⇒ M || F Jedes Atom aus C kommt inF oder M vor F |= C wenn F |= C Diese Regeln zum Lernen und Vergessen sind Inverse voneinander und können somit unendliche Abläufe von Lernen und Vergessen erzeugen. Dies wird durch Strategien in den Implementierungen verhindert. 2.9 Tableaukalkül für Aussagenlogik Im folgenden betrachten wir einen Kalkül, der in verschiedenen Formen und Ausprägungen viele Einsatzbereiche hat: u.a Aussagenlogik, Prädikatenlogik, Modallogik, mehrwertige Logik, und Programmanalysen. Ein Tableau ist i.a. eine baumförmig organisierte Datenstruktur, die mit (beliebigen) Formeln markiert ist, und die mit geeigneten Regeln aufgebaut wird. Die Formel an der Wurzel ist bewiesen (ein Tautologie), wenn das Tableau (der Baum) bestimmte Bedingungen erfüllt. Wir betrachten hier eine Variante des sogenannten analytischen Tableau-kalküls, der eine komplexe Formel Schritt für Schritt vereinfacht und am Ende Literale an den Blättern hat. Die zu überprüfende Bedingung betrifft jeweils die Formeln auf den Pfaden. Grundbegriffe für den aussagenlogischen Tableaukalkül sind: • α-Formeln (konjunktive Formeln) und • β-Formeln (disjunktive Formeln) Beachte, dass die Negationszeichen nicht nach innen gezogen sind. Die direkten Unterformeln der α-Formeln sind: α X ∧Y ¬(X ∨ Y ) ¬(X =⇒ Y ) (X ⇐⇒ Y ) α1 X ¬X X X =⇒ Y α2 Y ¬Y ¬Y Y =⇒ X Die direkten Unterformeln der β-Formeln sind: β X ∨Y ¬(X ∧ Y ) X =⇒ Y ¬(X ⇐⇒ Y ) β1 X ¬X ¬X ¬(X =⇒ Y ) β2 Y ¬Y Y ¬(Y =⇒ X) Es gilt: α ist äquivalent zu (α1 ∧ α2 ), und β ist äquivalent zu (β1 ∨ β2 ). 51 Automatische Deduktion, SS 2014, vom 04.04.2014 2.9.1 Tableau-Kalkül für Aussagenlogik Direktes Ziel des Tableau-Kalkül ist der Nachweis der Inkonsistenz einer Aussage. Will man beweisen, dass eine Aussage A eine Tautologie ist, dann wendet man den Tableaukalkül auf ¬A an. Damit kann man auch zeigen, dass eine Aussage B aus einer Menge von Aussagen A1 , . . . , An folgt: nämlich durch den Nachweis, dass A1 ∧ . . . ∧ An =⇒ B eine Tautologie ist. Definition 2.53 Ein (aussagenlogisches) Tableau ist ein markierter Baum, wobei die Knoten mit aussagenlogischen Formeln markiert sind. Die Wurzel ist mit der Eingabeformel markiert. • Ein Pfad ist geschlossen, wenn 0 oder ¬1 vorkommt, oder eine Formel X existiert, so dass auch ¬X auf diesem Pfad ist. • Ein Pfad ist (atomar) geschlossen, wenn 0 oder ¬1 vorkommt, oder ein Atom A existiert, so dass auch ¬A auf diesem Pfad ist. Ein Tableau ist (atomar) geschlossen, wenn alle Pfade (atomar) geschlossen sind. Man kann die Regeln ansehen als Tableau-Aufbauregeln oder als Transformationsregeln auf Tableaus. Wir werden die Sichtweise der Tableau-Aufbauregeln verfolgen, denn dann gibt es keinen Unterschied zwischen der Situation beim Aufbau und der Situation des fertigen (geschlossenen) Tableaus. Im Falle von Transformationsregeln könnte es sein, dass das fertige Tableau keine Überprüfung der Aufbauregeln zulässt. Definition 2.54 Der Tableaukalkül T KA hat als Eingabe eine Formel F . Initial wird ein Tableau mit einem Knoten und der Formel F erzeugt. Danach werden ausgehend vom initialen Tableau weitere Tableaus erzeugt mit folgenden Expansionsregeln: ¬¬X X α α1 α2 β β1 | β2 ¬0 1 ¬1 0 Diese Regeln sind wie folgt zu verstehen: Sei θ ein Pfad im Tableau T , und die obere Formel Fo eine Markierung eines Knotens auf diesem Pfad, dann erweitere das Tableau durch Verlängern des Pfades θ (d.h. Anhängen an das Blatt des Pfades) um einen mit der unteren Formel Fu markierten Knoten. Stehen unten zwei oder mehrere durch | getrennte Formeln, dann sollen entsprechend viele Blätter als Töchter angehängt werden,mit der jeweiligen Formel markiert. Danach verzweigt der Pfad θ am alten Blatt zu mehreren Pfaden. Stehen zwei oder mehr Formeln untereinander, dann sollen in Folge an den Pfad θ zwei oder mehrere Blätter (mit den jeweiligen Formeln markiert) angehängt werden. Z.B.: Wenn eine α-Formel zu expandieren ist, erweitere den Pfad erst um α1 , dann um α2 . Wenn eine β-Formel zu expandieren ist, erweitere den Pfad, so Automatische Deduktion, SS 2014, vom 04.04.2014 52 dass zwei neue Pfade entstehen: hänge an das Blatt des Pfades zwei markierte Knoten als Töchter an, eine mit β1 eine mit β2 markiert. Als Einschränkung wird verwendet, dass jede Formel auf jedem Pfad nur einmal analysiert (bzw. expandiert) wird. Ein Formel F ist als Tautologie bewiesen, wenn aus dem Tableau mit der initialen Formel ¬F ein geschlossenes Tableau erzeugt worden ist. Im allgemeinen wird man die Formel direkt am Blatt markieren. Allerdings kommt es auch vor, dass eine Formel, die nicht das Blatt ist, expandiert wird. Diese Regeln sind nicht-deterministisch, d.h. es gibt keine genaue Angabe, welche Formel zu expandieren ist. Diese Formulierung ist gewählt, um eine möglichst große Freiheit bei der Anwendung zu haben, mit der Garantie, dass die Anwendung korrekt bleibt. Allerdings sollte man in einer effizienten Implementierung zunächst die besten Schritte machen: D.h. möglichst wenig verzweigen. Dies wird durch Bevorzugung der α-Regeln erreicht. Außerdem sollte man Formeln nicht zweimal auf dem gleichen Pfad expandieren. Beispiel 2.55 Wir zeigen ein (das) Tableau für X ∧ ¬X: X ∧ ¬X | X | ¬X Beispiel 2.56 Ein Tableau für ¬(X ∧ Y =⇒ X): ¬(X ∧ Y =⇒ X) | X ∧Y | ¬X | X | Y Beide Tableaus sind geschlossen. Zur Optimierung der Analyse von Aussagen der Form A ⇔ B gibt es eine bessere Alternative: Erfinde neue Tableau-Expansionsregeln A⇔B A ¬A B ¬B 53 Automatische Deduktion, SS 2014, vom 04.04.2014 ¬(A ⇔ B) A ¬A ¬B B Beispiel 2.57 ¬((P ⇐⇒ Q) ⇐⇒ (Q ⇐⇒ P )) VVVV i VVVV iiii i i VVVV i iii VVVV i i i V iii ¬(P ⇐⇒ Q) (P ⇐⇒ Q) ¬(Q ⇐⇒ P ) r rrr r r rr rrr P ¬P ¬Q P {{ {{ { { {{ ¬Q hh hhhh h h h hhhh hhhh hhhh Q ⇐⇒ P Q Q ¬Q P ¬P Q ... ... ... ¬P Übungsaufgabe 2.58 Gebe die Tableauregeln für XOR an. Beachte: A XOR B ist äquivalent zu ¬(A ⇔ B). Hat man die Aufgabe zu zeigen, dass B aus A1 , . . . , An folgt, so kann man daraus sofort ein Tableau machen: A1 | ... | An | ¬B Beispiel 2.59 Zeige, dass P =⇒ (Q =⇒ P ) eine Tautologie ist: 54 Automatische Deduktion, SS 2014, vom 04.04.2014 ¬(P =⇒ (Q =⇒ P )) P ¬(Q =⇒ P ) Q ¬(P ) Das Tableau ist geschlossen, da P und ¬P auf dem einen Pfad liegen. Beispiel 2.60 Zum Nachweis der Tautologieeigenschaft von ((P =⇒ Q) ∧ (Q =⇒ R)) =⇒ (P =⇒ R): starten wir mit ¬(((P =⇒ Q) ∧ (Q =⇒ R)) =⇒ (P =⇒ R)). (P =⇒ Q) (Q =⇒ R) ¬(P =⇒ R) P ¬R L LL nnn n LL n n LL n nn LL n n LL n n n ¬P t Q III tt II t t II tt II t t II t t ¬Q R geschlossen geschlossen geschlossen Automatische Deduktion, SS 2014, vom 04.04.2014 55 Der Nachweis der algorithmischen Korrektheit des Tableaukalküls für Aussagenlogik besteht aus zwei Teilen: 1. Korrektheit (Soundness): Der Kalkül erzeugt geschlossene Tableaus nur für unerfüllbare Formeln. 2. Vollständigkeit (completeness): Für jede unerfüllbare Formel kann der Tableaukalkül ein geschlossenes Tableau erzeugen. Im folgenden verwenden wir Korrektheit“ im Sinne der Soundness. ” Definition 2.61 Ein Pfad eines Tableaus ist erfüllbar, wenn die Konjunktion aller Formeln auf dem Pfad erfüllbar ist. Ein Tableau ist erfüllbar, wenn es einen Pfad gibt, der erfüllbar ist. Beachte: Wenn eine Menge von Formeln 0 oder ¬1 enthält, dann ist sie nicht erfüllbar. Ein geschlossenes Tableau ist nicht erfüllbar. Lemma 2.62 Für die Tableau-Expansionsregeln gilt: Wenn T zu T 0 expandiert wird, dann ist T erfüllbar gdw. T 0 erfüllbar. Beweis. =⇒ “: Es genügt, sich einen erfüllbaren Pfad θ anzuschauen, und eine ” Interpretation I der aussagenlogischen Variablen zu wählen, die alle Formeln des Pfades wahr macht und alle Fälle der Expansionsregeln durchzugehen. • Wenn ¬¬X in θ, dann ist I(¬¬X) = 1 wahr, also auch I(X) = 1 • Wenn für die α-Formel X ∧ Y gilt, dass I(X ∧ Y ) = 1, dann auch I(X) = I(Y ) = 1. • Wenn für die β-Formel X ∨ Y gilt dass I(X ∨ Y ) = 1, dann gilt I(X) = 1 oder I(Y ) = 1. Somit ist einer der Pfade, die θ fortsetzen, erfüllbar, entweder der mit dem Blatt X, oder der mit dem Blatt Y . • Analog für die anderen α und β-Formeln. ⇐“: Wenn ein Pfad in T 0 erfüllbar ist, dann ist auch der verkürzte Pfad in T , ” der den Pfad T 0 erzeugt hat, erfüllbar. 2 Korollar 2.63 Der Tableaukalkül T KA ist sound. Beweis. Gegeben eine Formel F , die kein Widerspruch ist. Dann ist F erfüllbar. Der Tableaukalkül startet mit F , also ist das initiale Tableau erfüllbar, also auch alle daraus erzeugten nach Lemma 2.62, insbesondere kann kein geschlossenes Tableau erzeugt werden. 2 Die Vollständigkeit kann im Fall der Aussagenlogik auf relativ einfache Weise gezeigt werden, allerdings ist diese Beweismethode nicht auf allgemeinere Logiken übertragbar. Zwischenziel: Zeige die Terminierung des Tableaukalküls für Aussagenlogik. Automatische Deduktion, SS 2014, vom 04.04.2014 56 Bemerkung 2.64 Zu Ordnungen Ein fundierte (well-founded) Ordnung ist eine partielle Ordnung ≥ auf einer Menge M , so dass es keine unendlich absteigenden Ketten a1 > a2 > . . . in M gibt. Es gilt: Die lexikographische Kombination von fundierten Ordnungen ist wieder fundierte Ordnung. D.h. Seien (M1 , ≥1 ) und (M2 , ≥2 ) fundierte Ordnungen. Dann ist M1 × M2 mit der Ordnung (m1 , m2 ) >12 (m01 , m02 ) gdw. m1 >1 m01 oder (m1 =1 m01 und m2 >2 m02 ) fundiert. Eine weitere nützliche Konstruktion von fundierten Ordnungen gibt es mittels Multimengen, sogenannte Multimengenordnungen: Sei (M, >) eine Menge mit fundierter Ordnung, dann kann man auf Multimengen (Mengen bei denen mehrfaches Vorkommen von Elementen erlaubt ist) über M : d.h. auf Mult(M ) eine Ordnung erklären: Seien A und B Multimengen über M , dann definiert man A >> B, wenn es weitere Multimengen X 6= ∅ und Y gibt, so dass B = (A \ X) ∪ Y und es zu jedem Element von Y ein echt größeres Element in X gibt. Es gilt: Die Multimengenordnung >> ist eine partielle Ordnung. Sie ist fundiert, gdw. > fundiert ist. Z. B Nimmt man die natürlichen Zahlen mit der >-Ordnung, dann gilt in Mult(N): {3, 3, 2, 1} >> {3, 2, 2, 2}, denn {3, 2, 2, 2} = {3, 3, 2, 1} \ {3, 1} ∪ {2, 2, 2}. Lemma 2.65 Der Tableaukalkül für Aussagenlogik terminiert, wenn man jede Formel auf jedem Pfad höchstens einmal expandiert. Beweis. Wir konstruieren ein fundiertes Maß für die Größe eines Tableaus als Multimenge, so dass jede Expansionsregel dieses Maß verkleinert. Beachte, dass eine Formel die als Markierung eines Knotens auftritt, möglicherweise mehrfach expandiert werden muss, da die Formel auf mehreren Pfade sein kann. 1. Die Größe einer Formel sei eine gewichtete Anzahl der Zeichen: Das Zeichen ⇐⇒ wird doppelt gezählt, Klammern werden nicht gezählt, alle anderen Zeichen einfach. 2. Die Größe eines Pfades θ wird gemessen durch die Multimenge der Größen der Formeln an seinen Knoten, wobei der Expansions-status der Formel für diesen Pfad θ noch berücksichtigt werden muss: Eine Formel wird nur dann in das Maß des Pfades θ aufgenommen, wenn sie auf diesem Pfad noch nicht expandiert worden ist. 3. Die Größe des Tableaus ist die Multimenge der Größe aller nicht geschlossenen Pfade. Betrachte typische Fälle der Expansionsregeln: Automatische Deduktion, SS 2014, vom 04.04.2014 57 • ¬¬X → X macht einen Pfad kleiner, unabhängig von der Art der Formel X, da danach ¬¬X in diesem Pfad schon expandiert wurde. D.h. im Maß des Pfades wird die Größe von ¬¬X durch die Größe von X ersetzt. • X ∧ Y wird durch X, Y ersetzt. D.h. gr(X) + gr(Y ) + 1 wird im Maß des Pfades durch {gr(X), gr(Y )} ersetzt. Analog für die anderen α-Formeln. • X ∨ Y wird durch X | Y ersetzt. D.h. es werden zwei Pfade erzeugt. D.h ein Pfad θ wird durch zwei andere θ1 , θ2 ersetzt. Im Maß wirkt sich das wie folgt aus: Da gr(X ∨ Y ) > gr(X), gr(Y ) für alle Formeln X, Y . Dadurch wird gr(θ) >> gr(θ1 ) und gr(θ) >> gr(θ2 ). Damit wird die Multimenge aller Pfade kleiner. • X ⇐⇒ Y wird durch X =⇒ Y und Y =⇒ X ersetzt (nichtoptimierte Variante). Da gr(X ⇐⇒ Y ) − 1 = gr(X =⇒ Y ), kann man die gleiche Argumentation wie oben anwenden. • Andere Fälle analog. Das zugehörige Maß für das Tableau ist fundiert, also terminiert das Verfahren. 2 Definition 2.66 Eine (aussagenlogische) Hintikka-Menge ist eine Menge H von aussagenlogischen Formeln, für die folgendes gilt: 1. Es kann nicht gleichzeitig A ∈ H und ¬A ∈ H für ein Atom A gelten. 2. 0 6∈ H, ¬1 6∈ H 3. ¬¬X ∈ H =⇒ X ∈ H 4. α ∈ H =⇒ α1 ∈ H und α2 ∈ H 5. β ∈ H impliziert β1 ∈ H oder β2 ∈ H D.h. eine Hintikka-Menge ist abgeschlossen gegen bestimmte Formen der Zerlegung der Formeln. Lemma 2.67 bar. (Hintikka) Jede aussagenlogische Hintikka-Menge ist erfüll- Beweis. Wir zeigen, dass es eine Interpretation gibt, so dass jede Formel in H den Wert 1 erhält. Wenn eine Variable A ∈ H, so definiere I(A) := 1, wenn ¬A ∈ H, dann definiere I(A) := 0, wenn weder A noch ¬A in H, dann definiere I(A) beliebig, z.B. I(A) := 1. Induktion über die Termstruktur zeigt jetzt, dass für alle Formeln F ∈ H, I(F ) = 1 gilt. 2 Automatische Deduktion, SS 2014, vom 04.04.2014 58 Aussage 2.68 Sei T ein Tableau, auf das keine Expansionsregeln mehr angewendet werden können. Dann ist jeder Pfad entweder geschlossen oder entspricht einer aussagenlogischen Hintikka-Menge (d.h. die Menge der Aussagen auf dem Pfad ist erfüllbar). Beweis. Wenn ein nicht geschlossener Pfad existiert, dann zeigen die Expansionsregeln, dass dieser Pfad dann eine Hintikka-Menge ist. Hierbei genügt entsprechend der oben angegebenen Steuerung, dass jede Formel nur einmal pro Pfad expandiert wird. 2 Satz 2.69 Der Tableaukalkül für Aussagenlogik terminiert, ist korrekt und vollständig. Beweis. Wir haben schon die Korrektheit und Terminierung gezeigt. Wir betrachten den Fall, dass eine unerfüllbare Formel eingegeben wird. Wenn ein Pfad existiert, der nicht geschlossen ist, so ist die Menge seiner Markierungen eine Hintikka-Menge nach Aussage 2.68, also erfüllbar nach Lemma 2.67, und somit auch die eingegebene Formel, was der Voraussetzung widerspricht. Also ist jeder Pfad geschlossen. 2 Aussage 2.70 Der Tableaukalkül konstruiert für erfüllbare Formeln ein Modell. An jedem Pfad, der nicht geschlossen ist aber auch nicht weiter expandierbar ist, kann man ein Modell ablesen. Begründung. Da erfüllbare Tableaus solange expandiert werden, bis alle Pfade entweder geschlossen sind oder eine Hintikka-Menge darstellen, erhält man zumindest einen Pfad mit einer Hintikka-Menge, wenn man das Tableauverfahren startet mit einer erfüllbaren Formel an der Wurzel. Dies ergibt ein Modell für einen Pfad. Beachtet man, dass im Beweis oben für erfüllbare Tableaus T , die zu T 0 expandiert werden, die Interpretation erhalten bleibt, kann man schließen, dass die in diesem Pfad enthaltenen Atome ein Modell der Formel an der Wurzel definieren. Automatische Deduktion, SS 2014, vom 04.04.2014 2.10 59 Entscheidungsprozeduren für quantifizierte Boolesche Formeln Quantifizierte Boolesche Formeln (QBF) sind Boolesche Formeln, bei denen Quantoren erlaubt sind. Die Syntax ist: Q := 0|1 |P ( Boolesche Variable) | (Q1 ∧ Q2 ) | (Q1 ∨ Q2 ) | (¬ Q) | ∀P.Q | ∃P.Q Man kann auch weitere Junktoren zulassen, aber diese sind redundant, da sie sich durch die Junktoren ∧, ∨, ¬ definieren lassen. Die Quantifizierung ist nur über die zwei Wahrheitswerte. Für geschlossenen QBFs ist die Gültigkeit einer Formel definiert. Diese kann nur 0 oder 1 sein. Man kann auch für offene QBFs entsprechende Begriffe wir Erfüllbarkeit und Tautologie definieren. Diese sind aber direkt äquivalent zur Frage der Gültigkeit einer entsprechenden geschlossenen QBF. Es ist bekannt, dass die Gültigkeit von QBFs PSPACE-vollständig ist. Auch die Komplexitätsklassen der polynomiellen Komplexitätshierarchie sind einfach mit QBF zu erklären: Die Klassen Σpn und Πpi sind definiert als: • N P : Klasse der Probleme, die nichtdeterministisch in polynomieller Zeit entschieden werden können. • coN P : Klasse der Probleme, deren Negation (Komplemente) nichtdeterministisch in polynomieller Zeit entschieden werden kann. • Σp1 := N P , Πp1 := coN P • Σpi+1 Klasse der Probleme, die n.d. in polynomieller Zeit entschieden werden können, wobei ein Orakel aus Πpi verwendet werden darf. • Πpi+1 Klasse der Probleme, deren Negation n.d. in polynomieller Zeit entschieden werden kann wobei ein Orakel in Σpi verwendet werden darf. • P H Vereinigung aller Πpi = Vereinigung aller Σpi • Es gilt: P H ⊆ PSPACE Die Klassen Σpn und Πpi haben die folgenden QBFs als vollständige Problemmengen, wobei zu Πpi die Menge (∀+ ∃+)∗ .F gehört und zu Σpn : die Menge (∃+ ∃+)n .F mit maximal n − 1 Quantorenwechseln. Das Interesse an der Implementierung von Entscheidungsalgorithmen für QBFs kommt daher, dass man dadurch Implementierungen für eine ganze Klasse von Problemen behandeln kann. Wenn man eine effiziente“ Implementierung hat, ” hat man damit auch ein effizientes Entscheidungsverfahren für alle PSPACEvollständigen Probleme, wobei man vorher noch das Problem entsprechend übersetzen müsste. Natürlich sind alle bekannten Entscheidungsalgorithmen exponentiell, aber die Hoffnung ist, dass man durch geeignete Optimierungen der Automatische Deduktion, SS 2014, vom 04.04.2014 60 Implementierung doch einen großen Anteil der praktisch relevanten Probleme effizient entscheiden kann. Beispiel 2.71 Aussagenlogische Formeln kann man als QBFs ansehen, wobei man je nach Fragestellung (Erfüllbarkeit bzw Unerfüllbarkeit) andere Quantoren wählt. 1. Erfüllbarkeit einer aussagenlogischen Formel F ist das gleiche wie Gültigkeit der QBF ∃p1 , . . . , pn .F , wobei pi die aussagenlogischen Variablen in F sind. 2. Die Tautologie-Eigenschaft einer aussagenlogischen Formel F ist das gleiche wie Gültigkeit der QBF ∀p1 , . . . , pn .F , wobei pi die aussagenlogischen Variablen in F sind. Man kann QBFs in Normalform bringen, z.B. in Pränex-Form. In dieser Form sind alle Quantoren im Präfix der Formel, der Rumpf ist dann eine aussagenlogische Formel. Eine weitergehende Normalform ist eine Pränex-Klausel-Form, in der die Formel im Rumpf eine Konjunktion von Klauseln ist. Oder auch in die Negations-Normalform (alle Negationszeichen sind vor Variablen). Folgendes Verfahren kann man dazu verwenden: • Alle gebundenen Variablen müssen verschieden sein. Wenn nicht, unter Beachtung der Bindungsbereiche umbenennen mit neuen Variablen-Namen. Diese Umbenennung muss auch gemacht werden, wenn Formeln kopiert werden, z.B. bei der Elimination von Äquivalenzen. 1. 2. 3. 4. Implikationen ersetzen durch A =⇒ B → ¬A ∨ B; und Äquivalenzen ersetzen durch: A ⇐⇒ B → A =⇒ B ∧ B =⇒ A. Negationen nach innen schieben, u.a. mit ¬(∀X.P ) → (∃X.¬P ) und ¬(∃X.P ) → (∀X.¬P ) Quantoren nach außen schieben, wobei F ∨ ∀X.P → ∀X.F ∨ P (mit evtl. Umbenennungen) das gleiche auch für die anderen Kombinationen von Quantoren und Junktoren und ∧, ∨ Die Verwendung von Abkürzungen wie in der schnellen CNF. hierbei ist die Transformation im bereits quantorfreien Rumpf: F [G] ; ∃X.F [X] ∧ (X ⇐⇒ G). Aussage 2.72 Man kann eine QBF F , die keine Äquivalenzen enthält, in Zeit O(n ∗ log(n)) in eine äquivalente Pränexform umwandeln. Beweis. Zunächst kann man Negationen nach innen und Quantoren nach außen schieben, ohne die Formel zu vergrößern. Die Umwandlung des quantorenfreien Rumpfs in eine CNF ist wie bei der schnellen CNF; hierbei können weitere Ex-Quantoren hinzugefügt werden. Automatische Deduktion, SS 2014, vom 04.04.2014 61 QBFs mit Äquivalenzen sind immer noch in PSPACE, da man die Gültigkeit der Formel durch ein top-down Verfahren (semantischer Baum) ermitteln kann, das nur linear viel Platz benötigt. Wenn man diese in in eine Pränexform umwandelt, kann die Formel exponentiell groß werden durch die Verdopplung der Unterformeln bei der Ersetzung der Äquivalenzen. Bei Übersetzungen von QBFs in aussagenlogische Formeln (ohne Quantoren) muss man immer von einem (worst-case) exponentiellen Zeitbedarf ausgehen, manchmal sogar von (worst-case) exponentiellem Platzbedarf, d.h. die erzeugte Formel ist exponentiell groß, da Erfüllbarkeit von aussagenlogischen Formeln NP-vollständig ist bzw. Unerfüllbarkeit co-NP-vollständig. Eine einfache, aber nicht effiziente Möglichkeit, die Gültigkeit einer QBFs zu prüfen, die man auch als Definition der Gültigkeit ansehen kann, ist folgende Transformation: 1. ∀P.F → F [1/P ] ∧ F [0/P ] 2. ∃P.F → F [1/P ] ∨ F [0/P ] Die erhaltene Formel ist eine variablenfreie (geschlossene) aussagenlogische Formel, die man nur vereinfachen muss, bis sich 0 oder 1 ergibt. Der Nachteil dieser Methode ist, dass sie i.a. exponentiell große Formeln erzeugt bzw. exponentiell viele Fallunterscheidungen erfordert. Eine geschickte Simplifikation kann in linearem Platz durchgeführt werden, aber in evtl. exponentieller Zeit. Hier ist zu beachten, dass alle geschlossenen QBFs entweder 0 oder 1 ergeben, d.h. entweder Tautologien oder Widersprüche sind (im Sinne der QBFs). Das gilt in der Prädikatenlogik nicht mehr. Beispiel 2.73 Betrachte ∀x∃y.x ⇐⇒ y. Die Methode oben ergibt: (∃y.1 ⇐⇒ y) ∧ (∃y.0 ⇐⇒ y). Danach ergibt sich: ((1 ⇐⇒ 1) ∨ (1 ⇐⇒ 0)) ∧ ((0 ⇐⇒ 1) ∨ (0 ⇐⇒ 0)) Man sieht, dass sich wie erwartet, 1 als Resultat ergibt. Eine andere, direkte Übersetzung nach Aussagenlogik, die QBFs in aussagenlogische Formeln übersetzen kann, erlaubt die Verwendung der aussagenlogischen DPLL-Prozedur: Die neu eingeführten Variablen werden als existenzquantifiziert angesehen. Die QBF Formel wird, nach Elimination der Äquivalenzen und Implikationen, zunächst in Negations-Normalform überführt, d.h. alle Negationszeichen nach innen geschoben. Danach wird von oben die Formel transformiert: Sei ψ die Transformation • ψ(∀X.Q) := ψ(Q ∧ Q̄) • ψ(∃X.Q) := ψ(Q). wobei Q̄ die Formel Q[¬X/X] ist. Automatische Deduktion, SS 2014, vom 04.04.2014 62 • ψ(F1 ⊗ F2 ) := ψ(F1 ) ⊗ ψ(F2 ) wobei ⊗ ∈ {∨, ∧}. Die Übersetzung erhält die Erfüllbarkeit, wenn man die auch auf offene QBFs anwendet. D.h. eine QB-Formel F in NNF ist gültig, gdw. die Formel ψ(F ) erfüllbar ist. Beweis. Induktion nach Tiefe der Quantoren, und dann nach Größe der Formeln. Sei I eine Interpretation mit I(F ) = 1. Wenn F = F1 ∨ F2 , dann I(F1 ) = 1 oder I(F2 ) = 1, und Induktion reicht aus, entsprechend F = F1 ∧ F2 . Wenn F keine Quantoren enthält, dann gibt es nichts zu zeigen. Wenn F = ∀X : F 0 , dann ist I(F 0 [1/X]) = 1 und I(F 0 [0/X]) = 1. Für jede Interpretation I 0 , die I auch auf X ausdehnt, ist dann auch I 0 (F 0 ∧F 0 [¬X/X]) = 1, unabhängig vom Wert von I 0 (X). Genauso für F = ∃X.F 0 . Umgekehrt geht es analog. Wir schauen mal den Fall F = ∀X : F 0 genauer an. Sei I eine erfüllende Interpretation von F 0 ∧F 0 [¬X/X], d.h. I(F 0 ∧F 0 [¬X/X]) = 1. Dann ist I(F 0 [1/X]) = 1 als auch I(F 0 [0/X]) = 1. Deshalb gilt auch I(∀X : F 0 ) = 1. Die Übersetzung ergibt eine Formel, die lineare Größe in der Anzahl der Existenzquantoren, aber exponentielle Größe in der Anzahl der All-Quantoren hat. Bei der Übersetzung und nachfolgender Umwandlung in Klauselform geht die Quantor-Struktur verloren, so dass man die Optimierungen, die die Quantoren erlauben, verliert. 2.10.1 Formeln in Klauselform Man kann eine QBF auch (effizient) in eine Klauselform bringen, d.h. sie besteht dann aus einem Quantorenpräfix und einer Klauselmenge (auch Matrix genannt). Wir nehmen an, dass Simplifikationen ¬0 → 1 und ¬1 → 0 gemacht wurden. Die effiziente Transformation besteht einfach darin, dass man die Ersetzung P.F [G] → P.∃X.((X ⇐⇒ G) ∧ F [X]) macht. Man kann auch die Variante P.F [G] → P.∀X.((X ⇐⇒ G) =⇒ F [X]) verwenden. Interessanterweise kann man jetzt die Problematik der Klauselmengentransformation in der Aussagenlogik eher verstehen: Sei jetzt F eine aussagenlogische Formel, d.h. existenzquantifizierte Formel. • Bei der Erfüllbarkeit gibt es kein Problem, wenn man die erste Variante verwendet, da man nur eine existenzquantifizierte Variable hinzufügt. • Bei der Tautologie-Eigenschaft gibt es kein Problem, wenn man die zweite Variante verwendet, da man dann eine allquantifizierte Formel hat, und allquantifizierte Variablen hinzufügt. Automatische Deduktion, SS 2014, vom 04.04.2014 63 • Allerdings ist die Äquivalenz der Formeln vorher und nachher i.a. falsch. 2.11 Ein DPLL-ähnliches Entscheidungsverfahren Pränex-Klauselmengen für Wir betrachten in diesem Unterabschnitt ein DPLL-analoges Entscheidungsverfahren für Klauselmengen mit Quantoren-Präfix, Das Ziel ist es, zu zeigen, dass die eingegebene Formel falsch ist. Dies Asymmetrie kommt daher, dass der Formelrumpf, die sogenannte Matrix, eine Klauselmenge ist, und somit besser für Widersprüchlichkeit geeignet ist. Allerdings ist dies nur für die Regel der isoloierten Literale wichtig. Hierbei kann man Klauseln innerhalb der Klauselmenge schon vorher klassifizieren: 1. Eine Klausel ist PK-wahr, wenn sie ein Literal 1 enthält, oder eine Variable sowohl positiv als auch negativ. 2. Eine Klausel ist PK-falsch, wenn 1 nicht gilt und wenn die Klausel keine existenziell quantifizierte Variable enthält. Z.B. eine Klausel mit nur allquantifizierten Variablen ist falsch, wenn sie keine Tautologie ist. 3. Andere Klauseln nennt man PK-offen. Dies Klassifikation wird im Entscheidungsverfahren verwendet, nachdem Fallunterscheidungen für die Belegung von Variablen gemacht wurde und meist auch nachdem eine Simplifikation durchgeführt wurde, die die Konstanten eliminiert. Als Beispiel die QBF ∀x.∃y.x ∧ (¬x ∨ y). Hier kann man den Term x als Klausel ansehen, die nach Definition als PK-falsch klassifiziert wird. Wenn man als sicher annimmt, dass PK-falsche Formeln falsch sind, dann ist die gesamte Formel auch falsch. Lemma 2.74 • Wenn eine QBF F in Pränexform eine PK-wahre Klausel enthält, dann kann diese Klausel gestrichen werden (durch 1 ersetzt werden), was eine Formel F 0 ergibt, unter Erhaltung der Gültigkeit der Formel, d.h. F gültig gdw F 0 gültig. • Wenn eine QBF F in Pränexform eine PK-falsche Klausel enthält, dann ist F nicht gültig. Beweis. Die erste Aussage ist ganz einfach zu zeigen und gilt ja bereits in Aussagenlogik ohne Quantoren. Die zweite Aussage kann man folgendermaßen begründen: Wenn x1 , . . . , xn die Variablen der PK-falschen Klausel sind, dann mache die n Ersetzung ∀xi .Fi → Fi [0/xi ] ∧ Fi [1/xi ]. Hierbei sind die xi all-quantifiziert und erscheinen in dieser Reihenfolge, und man kann annehmen, dass zuerst xn , dann xn−1 usw. ersetzt wird. Nach jeder Ersetzung kann man die Formel wieder in PK-Form bringen durch P.∀xn .P 0 .K → P.P 0 .K[1/xn ]∧P 0 .K[0/xn ], und dann durch Umbenennen und verschieben in P.P 0 .P 00 K[1/xn ] ∧ K 00 [0/xn ]. Hierbei ist K[1/xn ] ∧ K 00 [0/xn ] 64 Automatische Deduktion, SS 2014, vom 04.04.2014 wieder eine Klauselmenge. Macht man das für alle x1 , . . . , xn , dann ergibt sich Pn .Kn und es wird in einer der Kopien von K die PK-falsche Klausel nach einer Ersetzung sich zu 0 simplifizieren lassen, da ja alle Möglichkeiten vorkommen. Damit wird die gesamte Klauselmenge Kn falsch und somit auch die Formel. Beispiel 2.75 Betrachte die Formel ∃x1 ∀x2 ∃x3 ∃x4 .((¬x1 ∨ x2 ∨ ¬x3 ) ∧ (x3 ∨ ¬x4 ) ∧ (x3 ∨ x4 ) ∧ (x1 ∨ ¬x2 ∨ ¬x3 )) {z } | {z } | {z } | {z } | c1 c2 c3 c4 Diese Formel ist nicht gültig. Um das nachzuweisen kann man einen semantischen Baum für diese Formel erstellen. Die Blätter sind jeweils die falschen Klauseln unter der Belegung. Die Doppelkanten sollen konjunktiv verknüpfte Alternativen andeuten. ·@ {{ @@@ ¬x1 { @@ { @@ {{ {{ x1 · ~~~~ ~ ~ ~~ x2 ~~~~ ~~~~ · · ¬x2 ~~ ~~ ¬x3 ~ ~ ~~ c1 ·? ??? ¬x4 ?? ?? x4 c2 c3 x3 · @@@ @@@ @@@@¬x2 x2 @@@@ @@ · · ~ x3 ~~ ~ ¬x3 ~~ ~~ c4 ·? ??? ¬x4 ?? ?? x4 c2 c3 Die zwei offenen Knoten brauchen nicht weiter expandiert zu werden, da sich jeweils im anderen Ast schon ein False“ ergeben hat. Insgesamt ist die Formel ” dann ein Widerspruch. Die Entscheidungsprozedur für Pränex-Klauselformen die analog zu DPLL ist, muss sich nach dem Quantorenpräfix richten. Sie arbeitet von oben nach unten und macht Fallunterscheidungen: Es wird immer eine quantifizierten Variable mit 0 oder 1 belegt, je nach Quantor müssen dann beide Fälle wahr sein (∀) oder ein Fall (∃). Es wird jeweils die Klauselmenge untersucht, ob schon erkennbar ist ob diese immer wahr ist, oder immer falsch. Optimierungen werden später betrachtet. Folgende semantische-Baum Prozedur ist die einfachste Variante: Definition 2.76 Entscheidungsprozedur semantischer Baum, wobei man genau genommen nur nach der Gültigkeit der Formel fragt. Knoten sind mit Formeln markiert. Man kann Knoten nach UND- bzw. ODER-Knoten klassifizieren, je nachdem ob die Variable All- oder Ex-quantifiziert ist: • An der Wurzel steht die eingegebene Formel. Automatische Deduktion, SS 2014, vom 04.04.2014 65 • An jedem Knoten wird die erste Variable des Quantorenpräfix untersucht: – Wenn es eine All-quantifizierte Variable x ist, dann ist es ein UNDKnoten. Die beiden Töchterknoten sind jeweils die vereinfachten Formeln: einmal ist 1 für x eingesetzt, beim anderen Knoten 0 für x. – Wenn es eine Ex-quantifizierte Variable x ist, dann ist es ein ODERKnoten. Die beiden Töchterknoten sind jeweils die vereinfachten Formeln: einmal ist 1 für x eingesetzt, beim anderen Knoten 0 für x. • ein Knoten wird als Blatt angesehen, wenn sich die Klauselmenge bereits zu 1 oder 0 auswerten lässt, entsprechend der Definition von PK-wahren und PK-falschen Klauseln: Wenn eine PK-falsche Klausel dabei ist, dann 0, wenn alle Klauseln PK-wahr sind, dann 1. • Wenn der Baum aufgebaut ist, erhält man entsprechend der UND, bzw ODER-Auswertung einen Booleschen Wert an der Wurzel. Dieser ist das Ergebnis. 2 Man kann die Auswahl der Variablen, nach der Fallunterscheidung gemacht wird, noch etwas variieren und einschränken: wenn die ersten k Variablen alle gleichartig quantifiziert sind, dann kann man sich eine Variable aussuchen. Bei ∀ muss man beide untersuchen und bei ∃ kann man mittels eine Strategie raten. Wenn man allerdings Gültigkeit und ungültigkeit der Formel als Frage stellt, dann sind die beiden Quantoren gleichwertig. Bemerkung 2.77 Man kann auch nach der Ungültigkeit der Formel fragen. Das macht keinen Unterschied bei geschlossenen Formeln. Die UND und ODERKnoten sollte man dann dual interpretieren. Einen Unterschied gibt es bei Optimierungen wie isolierte Literale (s.u.), da man dann eine Wahl hat und die Optimierung abhängt von der ursprünglichen Frage. Der Nichtdeterminismus der Prozedur hat zwei Quellen: • Welche Variable wird zur Fallunterscheidung verwendet? • Welcher Fall wird zuerst untersucht pro Variable? Beispiel 2.78 Nochmal die Formel ∀x.∃y.x ⇐⇒ y: (mit einer Nicht-Klauselmenge, aber das geht auch) ∀x∃y.x ⇐⇒ NN y ii i i NNNN i ii NNNN iiii i i i N iii ∃y.0 ⇐⇒K y ∃y.1 ⇐⇒K y KK KK s oo KK KK ss ooo o KK KK ss o s o KK KK s o s oo s 1 ⇐⇒ 0 1 ⇐⇒ 1 0 ⇐⇒ 1 0 ⇐⇒ 0 Man sieht: der Wert an der Wurzel ist 1. Automatische Deduktion, SS 2014, vom 04.04.2014 2.11.1 66 Optimierungen: Eine einfache Optimierung durch Vermeiden von Fallunterscheidungen ist: • Wenn an einem Knoten eine der Top-Variablen (alle gleichartig quantifiziert) nicht in der Klauselmenge enthalten ist, dann kann man die Variable einfach (für den Unterbaum) aus dem Präfix streichen. Eine gute Entscheidungsprozedur benötigt noch mindestens zwei Regeln: Unit-Propagation Eine Klausel c ist eine PK-Unit, gdw. sie genau ein existenzielles Literal hat (x oder ¬x), keine Konstanten enthält und alle anderen (universellen) Literale der Klausel haben eine Variable y, die rechts von x im Quantorenpräfix steht. Die Aktion ist: Betrachte nur den Fall F [1/x], wenn x das Literal ist und F [0/x], wenn ¬x das Literal ist. Diese Aktion kann auch durchgeführt werden, wenn die existenzquantifizierte Variable nicht die aktuelle Top-Variable ist. Isoliertes Literal Ein Literal in einer Klauselmenge ist PK-isoliert (PK-pur), wenn das Komplement nicht in der Klauselmenge vorkommt. Hier nehmen wir an, dass die Frage ist ob die Gesamtformel F = 1 ist. Die Aktion ist folgende: Sei x die Variable im isolierten Literal. 1. Wenn x Ex-quantifiziert ist, dann betrachte nur einen Tochterknoten mit F [1/x], wenn x das Literal ist und F [0/x], wenn ¬x das Literal ist. 2. Wenn x All-quantifiziert ist, dann betrachte nur einen Tochterknoten mit F [0/x], wenn x das Literal ist und F [1/x], wenn ¬x das Literal ist. Auch diese Aktion kann durchgeführt werden, wenn x nicht die Topvariable ist. Das Verfahren, das man erhält, ist das Davis-Putnam-Loveland-Logemann (DPLL-) Verfahren für QBF. Die prototypische Implementierung zur Vorlesung hat nur die Unit-Propagation, aber noch nicht die Regel zu PK-isolierten Literal eingebaut. Bemerkung 2.79 Dependency-directed Backtracking und RelevanzMengen Eine einfache Idee, die Entscheidungsprozedur mittels semantischem Baum weiter zu verbessern sind dynamische Relevanz-Mengen: Hierbei wird angenommen, dass die QBF in einer Pränexform vorliegt und die Formel eine Klauselmenge ist. Die Transformation kann man schnell durchführen wie bei der schnellen Automatische Deduktion, SS 2014, vom 04.04.2014 67 CNF-Erzeugung, wobei die neuen Variablen existenzquantifiziert sind. Grob die Idee: Wenn man an einem Knoten verzweigt für eine existenzquantifizierte Variable x; und im linken Zweig (x = 0) findet man eine Klausel, die unabhängig von x immer falsch ist, dann ist diese Klausel auch im rechten Zweig (x = 1) falsch und man kann sofort backtracken. Dies kann man implementieren durch einen Markierungsalgorithmus, der einen Relevanzmarker für Ex-Variablen verwaltet: 1. Bei Verzweigung an einer Ex-Variablen: markiere diese als irrelevant. 2. Wenn an einem Knoten eine falsche Klausel entdeckt wird, dann wird am Knoten ein backtracking gemacht; gleichzeitig werden all Ex-Variablen dieser Klausel als relevant markiert. 3. Kommt man (von links) beim backtracking an einen Knoten N , der an einer Ex-Variablen y verzweigt, und y ist (noch) als irrelevant markiert, dann kann man den rechten Zweig überspringen. Dies kann man weiter verfeinern durch Verwaltung von Relevanzmengen. 2.12 Internet Referenzen (unvollständig, bitte selbst googlen) http://www2.tcs.ifi.lmu.de/ letz/TU/semprop/ http://users.ics.aalto.fi/rintanen/jussi/publications.html 68 Automatische Deduktion, SS 2014, vom 04.04.2014 2.13 Internationale Eingaben Standardisierung der Formel- Für SAT-Klauselmengen gibt es eine Standardform der Eingaben, damit alle SAT-Solver die gleichen Benchmarks benutzen können und Beispiele leicht austauschen können: DIMACS-Format: Die Klauselmenge wird zeilenweise eingegeben, pro Zeile eine Klausel, Literale sind positive oder negative ganze Zahlen. Der Vorspann des Files kann Kommentarzeilen enthalten, die mit “c “ beginnen müssen. Danach kommt eine Zeile der Form p cnf 123 456 wobei 123 die genaue Anzahl der Variablen der Klausel ist und 456 die genaue Anzahl der Klauseln. Danach kommt pro Zeile eine Klausel, wobei als Stoppzeichen noch eine 0 folgen muss, z.B.: 1 -3 5 0 QDIMACS-Format: Das Format für quantifizerte Boolesche Formel in Pränex-Klauselform ist sehr ähnlich, enthält aber noch den Quantorprefix vor den Klauseln, nach der “p cnf” Zeile: Die Zeile sehen so aus: e 2 3 5 0 wenn die Variablen 2,3,5 existenzquantifiziert sind. a 4 6 0 wenn 4, 6 allquantifiziert sind. Die Quantoren müssen abwechselnd geschrieben werden und die letzte Quantorzeile muss eine e-Zeile sein. Tautologische Klauseln oder Klauseln, die zweimal dieselbe Variable enthalten, sind nicht zulässig. Zum Beispiel die Pränex-Klauselform ∀x∃y : x ∧ (¬x ∨ y) ∧ y, wenn man die Nummerierung x als 1 und y als 2 gewählt hat: p cnf 2 3 a 1 0 e 2 0 1 0 -1 2 0 2 0 Automatische Deduktion, SS 2014, vom 04.04.2014 3 69 Überblick über den Aufbau und Funktionsweise eines Automatischen Deduktionssystems am Beispiel eines Resolutionsbeweisers Ein implementiertes Automatisches Deduktionssystem (auf der Basis der Resolution) hat im wesentlichen vier Komponenten – Logik, Kalkül, logisches Zustandsübergangssystem und Steuerung. Im folgenden sollen die Ideen informell skizziert werden. Später werden diese in Definitionen präzisiert. 3.0.1 Logik Eine Komponente eines Deduktionssystems wird durch eine Logik gebildet, die mit der Festlegung der Syntax einer formalen Sprache und deren Semantik die zulässige Struktur und die Bedeutung von Aussagen vorgibt. Aussagen entsprechen Formeln der Logik. Die gewählte Logik bestimmt ganz konkret, welche Arten von Aussagen erlaubt und welche verboten sind. Beispielsweise kann sie festlegen, dass eine Quantifizierung Für alle Zahlen gilt . . .“ erlaubt, eine ” Quantifizierung Für alle Funktionen über natürlichen Zahlen gilt . . .“ da” gegen verboten sein soll. Die Definition einer Bedeutung (Semantik) für die Formeln liefert darüberhinaus eine Beziehung zwischen Aussagen, die als aus ” A folgt B“ gedeutet werden kann. Damit ist ein semantischer Folgerungsbegriff etabliert, der zunächst jedoch in keiner Weise hilft, für gegebene A und B algorithmisch zu bestimmen, ob B wirklich aus A folgt. Wie in den Motivationsbeispielen schon angedeutet wurde, gibt es jedoch nicht die eine Logik, sondern ähnlich wie bei Programmiersprachen gibt es eine ganze Hierarchie von Logiken mit vielen unterschiedlichen Varianten und Erweiterungen nach verschiedenen Richtungen. Jede von ihnen formalisiert ganz bestimmte Grundkonzepte, auch wiederum ähnlich wie in Programmiersprachen. Genauso wie man sich für normale Anwendungen eine möglichst gut geeignete Programmiersprache aussucht, muss man für konkrete deduktive Anwendungen eine adäquate Logik auswählen. Für einfache Puzzles kann die Aussagenlogik ausreichen, während für kompliziertere Anwendungen und Beispiele (wise-man puzzle) eine MultiModallogik gut geeignet ist. Eng mit der Auswahl der Logik verknüpft ist die Frage der Formulierung eines Problems, d.h. wie formuliere ich das Problem in ” der jeweiligen Logik am besten?“. Z. B. hätte man das wise-man puzzle auch rein in Prädikatenlogik formulieren können. Offensichtlich ist diese Formulierung schwieriger. Damit stellt sich auch die Frage; ist das Problem überhaupt ” richtig formuliert ?“, also nach der Korrektheit“ der Formulierung. ” Die elementarste Logik ist die Aussagenlogik. Sie formalisiert die Grundkonzepte wahr und falsch und führt darauf die Booleschen Verknüpfungen ¬, ∧, ∨, =⇒ , ⇔, . . . ein. In Aussagenlogik kann man z.B. es-regnet =⇒ Straße-wird” nass“ hinschreiben, aber nicht über irgendwelche Mengen quantifizieren. Das Problem, herauszufinden, ob eine Aussage aus einer anderen folgt ist in Aussagenlogik entscheidbar. Das gilt jedoch nicht mehr in der etwas komplizierten Logik, der Gleichungslogik. Automatische Deduktion, SS 2014, vom 04.04.2014 70 Neben Quantifizierungen über Mengen führt Gleichungslogik das Konzept der Funktion ein. Man kann dann z.B. hinschreiben: ∀x, y : x + 0 = x ∧ x + s(y) = s(x + y) Die Formel beschreibt die Addition auf natürlichen Zahlen wobei s(x) als x+1 zu interpretieren ist. Man muss aber beachten, dass s eine syntaktische Repräsentation der +1-Funktion ist, und nicht die Funktion selbst. Betrachtet man die tatsächlichen Zahlen als Abkürzungen für entsprechend viele Verschachtelungen der Funktion s, dann kann man mit Hilfe dieser Axiome schon richtig rechnen. Zum Beispiel ergibt sich: 3 + 2 = s(s(s(0))) + s(s(0)) = s(3 + s(0)) = s(s(3 + 0)) = s(s(3)) = 5 Gleichungslogik ist aber wiederum nur ein Spezialfall von Prädikatenlogik, wo neben der ganz speziellen Relation der Gleichheit ganz allgemeine Relationen als neues Konzept hinzukommen. Hier kann man dann beispielsweise formulieren: ∀x, y : Katze(x) ∧ Vogel(y) =⇒ Mag(x, y) Katze(Garfield) ∧ Vogel(Tweety) Katze“ und Vogel“ bezeichnen einstellige Relationen, die auf ein Objekt zu” ” treffen können oder nicht. Mag“ bezeichnet eine zweistellige Relation. In der ” Prädikatenlogik gibt es Relationen mit beliebiger Stelligkeit. Eine weitere Logik ist zum Beispiel die Modallogik, die man zur (automatischen) Lösung des Wise Men Puzzles benutzen kann. Das Grundkonzept, das bei den Modallogiken hinzukommt, ist das der Zustände – manchmal auch Welten genannt – und der Zustandsübergänge. Wie beim Wise Men Puzzle macht es offensichtlich Sinn, nicht nur über eine Welt zu reden, in der eine Aussage einen bestimmten Wahrheitswert hat, sondern es kann notwendig sein, gleichzeitig über viele verschieden hypothetische Welten und deren Beziehungen zueinander zu reden. Genau das ist mit Modaloperatoren in sehr eleganter Weise möglich. Beim wise-man-puzzle kann man sich vorstellen, dass jeder ein eigene Menge von gültigen Aussagen haben kann. Von Logikern und Philosophen wurden noch eine Unzahl anderer Logiken und deren Beziehungen zueinander untersucht. Für eine konkrete Anwendung ist die Situation daher wie bei der Wahl einer geeigneten Programmiersprache. Die beste ist die, die das, was in der Anwendung vorkommt möglichst einfach und elegant zu formulieren erlaubt, und für die es einen möglichst guten Compiler oder Interpretierer gibt. Die Formalismen, die man braucht, um eine Logik zu beschreiben und zu untersuchen sind zunächst eine Beschreibung der Syntax, d.h. der Grammatik der Sprache und eine Beschreibung der Bedeutung der syntaktischen Elemente, d.h. der Semantik. Der Semantikformalismus, der uns hier interessiert, geht zurück auf Alfred Tarski und wird deshalb auch TarskiSemantik genannt. Die Idee ist, eine Abbildung der syntaktischen Elemente auf mathematische Objekte anzugeben, und diese Abbildung zu benutzen, um dann Terme auf Objekte einer bestimmten Menge, der. sogenannten Trägermenge oder auch Universum genannt, abzubilden, und Formeln zu wahr oder falsch Automatische Deduktion, SS 2014, vom 04.04.2014 71 zu evaluieren. Eine solche Abbildung heißt auch Interpretation. Typischerweise bildet man in diesem Formalismus Konstanten- und Variablensymbole auf Elemente der Trägermenge, Funktionssymbole auf Funktionen und Prädikatensymbole auf Relationen ab. Eine solche Abbildung, die eine Formel wahr macht heißt Modell der Formel. Zum Beispiel kann man für die Formel Katze(Garf ield) ∧ V ogel(T weety) als Trägermenge tatsächlich die Menge aller Katzen und Vögel nehmen. Das Prädikatensymbol Katze“ wird auf die Relation Katze abgebildet, d.h. ” Katze(x) trifft zu wenn x wirklich eine Katze ist. Entsprechend machen wir das mit dem Symbol Vogel“. Wenn jetzt die Konstantensymbole Garfield“ und ” ” Tweety“ tatsächlich auf eine Katze bzw. Vogel abgebildet werden, dann ist die ” Formel wahr und wir haben damit ein Modell der Formel. Wenn wir stattdessen das Symbol Garfield“ auf einen Vogel abbilden, dann ist die Formel falsch und ” die Interpretation ist kein Modell. Genausogut können wir auch als Trägermenge die natürlichen Zahlen nehmen und das Prädikatensymbol Katze“ auf die ” Relation gerade und das Prädikatensymbol Vogel“ auf die Relation ungerade ” abbilden. Wenn jetzt z.B. Garfield“ auf die 0 und Tweety“ auf die 1 abgebil” ” det wird haben wir wieder ein Modell der Formel. Man bezeichnet eine Formel als allgemeingültig oder als Tautologie wenn sie unter allen Interpretationen wahr ist. Typische Tautologien sind P ∨ ¬P“, aber auch Formeln wie Eukli” ” dische Geometrieaxiome =⇒ Satz des Pythagoras“. Formeln, die unter keiner Interpretation wahr sind heißen unerfüllbar oder widersprüchlich. Typische Widersprüche sind P ∧ ¬P“, aber auch Formeln wie ¬ (Euklidische Geometrie” ” axiome =⇒ Satz des Pythagoras)“. Formeln, die weder allgemeingültig noch widersprüchlich sind, die man also je nach Interpretation wahr oder falsch machen kann, heißen erfüllbar. Die obige Formel Katze(Garf ield)∧V ogel(T weety) ist von diesem Typ. Die Tarski Semantik erlaubt die Definition eines semantischen Folgerungsbegriffs: F |= G (G folgt aus F ) falls G in allen Modellen von F gilt. Das heißt, wie immer auch die Symbole, die in F vorkommen interpretiert werden, falls F unter dieser Interpretation wahr ist, muss auch G unter dieser Interpretation wahr sein. Dieser semantische Folgerungsbegriff definiert präzise, was Folgerung“ heißen soll. Da die Anzahl der möglichen Interpretationen meist ” unendlich ist, gibt sie aber keinen Hinweis, wie man die Folgerungsbeziehung für zwei konkrete Formeln F und G auch tatsächlich überprüfen kann (das ist Sache der zweiten Stufe eines Deduktionssystems, des Kalküls). Spezielle Fragestellungen, die man auf der Ebene der Logiken noch untersucht, sind z.B. die Beziehung zwischen semantischer Folgerung und syntaktischer Implikation, d.h. die Frage, ob das sogenannte Deduktionstheorem gilt: F |= G gdw. F =⇒ G allgemeingültig. In Prädikatenlogik gilt es, in anderen Logiken nicht unbedingt. Eine andere Fragestellung ist mehr anwendungsorientiert, nämlich die Frage nach der Existenz von Übersetzern, die Formeln einer Logik in eine andere übersetzen. Analog wie bei der Entwicklung einer Programmiersprache ein Compiler die Ausführung von Automatische Deduktion, SS 2014, vom 04.04.2014 72 Programmen erheblich beschleunigen kann, kann ein Übersetzer zwischen Logiken den Test der Folgerungsbeziehung erheblich erleichtern. Beispiele für solche Übersetzer sind die Transformation von epistemischer Logik in Prädikatenlogik, die bei der Lösung des Wise Men Puzzles benutzt werden kann. Ein weiteres Beispiel ist die Transformation in Klauselnormalform. Klauselnormalform ist eine echte Unterklasse der Prädikatenlogik, so dass man diese Transformation auch als Übersetzung in eine andere Logik sehen kann. 3.0.2 Kalkül Der in der Logik definierte semantische Folgerungsbegriff hilft meist nicht, für gegebene A und B algorithmisch zu bestimmen, ob B wirklich aus A folgt. Dies ist Aufgabe des Kalküls, der zweiten Komponente eines Deduktionssystems. Ein Kalkül definiert syntaktische Ableitungen als Manipulationen auf den (syntaktisch gegebenen) Formeln. Damit kann aus einer Formel A durch reine Symbolmanipulation eine Formel B gewonnen werden, wobei die Bedeutung der in A und B vorkommenden Symbole überhaupt keine Rolle spielt. Ein syntaktisch aus A abgeleitetes B soll aber trotzdem semantisch folgen und umgekehrt. Ein korrekter Kalkül stellt daher nur solche Ableitungsoperationen zur Verfügung, die garantieren, dass alles syntaktisch Ableitbare auch semantisch folgt. Wenn umgekehrt alles, was semantisch folgt, auch syntaktisch ableitbar ist, ist der Kalkül vollständig. Es gibt auch Kalküle, die statt auf Formeln auf anderen Datenstrukturen operieren, z.B. auf Folgen von Formeln (Sequenzenkalkül), Mengen von Formeln, oder auf einem Graph, der u.a. mit Formeln markiert ist. Nach dem Unvollständigkeitssatz von Kurt Gödel [Göd31] sind vollständige Kalküle ab einer gewissen Ausdrucksstärke der Logiken jedoch nicht möglich. Dazu gehört die sogenannte Prädikatenlogik zweiter Stufe, in der neben Quantifizierungen über Mengen auch Quantifizierungen über Funktionen über den Mengen erlaubt sind. Hierzu zählt auch die Logik, die die Theorie der natürlichen Zahlen beschreibt, d.h. alle Formeln die genau für die natürlichen Zahlen gelten. In diesen Logiken gibt es Aussagen, die über den semantischen Folgerungsbegriff aus anderen folgen, was aber mit keinem Kalkül, der nur mit Symbolmanipulation arbeitet, nachgewiesen werden kann. F1 , . . . , Fn Meist werden Ableitungsregeln folgendermaßen geschrieben: . Das F soll bedeuten, wenn F1 , . . . , Fn schon abgeleitete Formeln sind, dann ist es auch erlaubt, die Formel F abzuleiten. Eine typische Ableitungsregel dieser Art ist die Instanziierungsregel: ∀x : F [x] F [t/x] Dabei ist F [x] eine Formel, in der die Variable x vorkommt und F [t/x] ist eine Variante von F , bei der alle Vorkommnisse von x durch den Term t ersetzt worden sind (t ist beliebig). Die Regel besagt, dass eine Aussage, die für alles gilt (∀x) auch für jedes spezielle Objekt gilt. Zweimal angewendet lässt sich damit zum Beispiel aus ∀x, y : Katze(x) ∧ V ogel(y) =⇒ M ag(x, y) Automatische Deduktion, SS 2014, vom 04.04.2014 73 ableiten: Katze(Garf ield) ∧ V ogel(T weety) =⇒ M ag(Garf ield, T weety) Eine weitere Regel dieser Art ist die Modus Ponens Regel, die schon auf die griechischen Philosophen zurückgeht: A =⇒ B A B Sie drückt folgendes aus: wenn es gilt, dass aus der Aussage A die Aussage B folgt und wenn weiterhin bekannt ist, dass die Aussage A tatsächlich wahr ist, dann darf man annehmen, dass auch die Aussage B wahr ist. Beide Regeln, die Instanziierungsregel als auch die Modus Ponens Regel eignen sich als reine Zeichenkettenmanipulationen und lassen sich daher problemlos auf einem Rechner ausführen. Typische Fragestellungen auf der Kalkülebene sind folgende: Korrektheit eines gegebenen Kalküls: Folgt alles abgeleitete auch semantisch? Vollständigkeit eines gegebenen Kalküls: Lässt sich alles semantisch folgerbare auch ableiten? Für die Praxis hat sich gezeigt, dass die Vollständigkeit so wie oben definiert an den Kalkül leicht angepasst werden muss. Was man z.B. bei Resolutionsbeweisern wirklich braucht ist die Widerlegungsvollständigkeit: Wenn aus einer Aussage F eine Aussage G semantisch folgt, ist dann ein Widerlegungsbeweis für F ∧ ¬G möglich? Resolution ist z.B. ein Kalkül, der nicht vollständig , aber widerlegungsvollständig ist. Beispielsweise folgt aus A die Aussage A ∨ B. Sie ist aber nicht mit Resolution ableitbar. Jedoch ist A ∧ ¬(A ∨ B)(= A ∧ ¬A ∧ ¬B) mit Resolution widerlegbar. Eine weiteres Problem im Bereich der Kalküle ist die Frage nach der Effizienz eines Kalküls. Dabei betrachtet man meist zwei Effizienzkriterien, i) die Verzweigungsrate im Suchraum und die ii) Länge der Beweise. Die Regeln eines Kalküls sind im allgemeinen an vielen verschiedenen Stellen einer Formelmenge anwendbar. Nicht alles, was damit abgeleitet wird, ist jedoch für den gesuchten Beweis brauchbar. Daher definieren die Regeln eines Kalküls einen Suchraum, der durch irgendein Suchverfahren abgesucht werden muss. Je größer die Verzweigungsrate, d.h. je mehr Stellen es in der aktuellen Formelmenge gibt, auf die die Kalkülregeln anwendbar sind, desto aufwendiger ist meist die Suche. Die Verzweigungsrate ist jedoch kein generelles Kriterium. Ist die Verzweigungsrate niedrig, liegt aber dafür der gesuchte Beweis sehr tief im Suchraum, dann ist auch nicht viel gewonnen. Was man braucht ist einerseits eine möglichst kleine Verzweigungsrate und andererseits Kalkülregeln, die einen Beweis mit möglichst wenig Schritten finden, und diese Schritte sollen mit möglichst wenig Aufwand berechenbar sein. Die Kunst des Kalkülentwerfens besteht darin, solche Kalküle zu entwickeln, die einen guten Kompromiss zwischen allen drei Faktoren bilden. Automatische Deduktion, SS 2014, vom 04.04.2014 74 Die rein syntaktisch arbeitenden Kalküle wie Resolution, die nichts von der Bedeutung der Symbole, die sie manipulieren wissen, sind zwar im Prinzip ausreichend. Für viele häufig vorkommende Konstrukte kennt man jedoch Algorithmen und Kalküle, die spezielle Probleme erheblich schneller und besser lösen als die universell anwendbaren Kalküle. Niemand würde zum Beispiel auf die Idee kommen, die Gleichung 3 + 4 = x mit einem universellen Kalkül wie Resolution zu lösen. Das rechnet man einfach aus. Daher besteht ein weiterer Zweig der Kalkülentwicklung darin, Algorithmen für wichtige Spezialfälle zu integrieren, bzw. erst überhaupt zu entwickeln. Als ein Rahmenkonzept dafür hat sich die von Mark Stickel vorgeschlagene Theorieresolution [Sti86] als sehr nützlich gezeigt. Die Idee dabei ist, einen Resolutionsschritt nicht mehr über die syntaktische Komplementarität – gleiches Prädikatensymbol und Argumente, verschiedenes Vorzeichen – sondern über semantische Widersprüchlichkeit der Resolutionsliterale zu steuern. Diese semantische Widersprüchlichkeit kann von einem speziellen Algorithmus, der über die Bedeutung der vorkommenden Symbole etwas weiß, getestet werden. Beispielsweise kann man damit folgern: a<b∨P a>b∨Q P ∨Q eben weil a < b und a > b unter der üblichen Bedeutung von < und > widersprüchlich sind. Ein Teil des Skripts ist solchen Spezialverfahren gewidmet. 3.0.3 Logische Zustandsübergangssysteme Die dritte Komponente eines Deduktionssystems, das logische Zustandsübergangssystems, das zur Organisation der Suche nach dem richtigen und besten nächsten Herleitungsschritt dient, ist verantwortlich für die Darstellung von Formeln oder Formelmengen, deren Beziehungen zueinander und von den jeweiligen Zuständen der Ableitungsketten. Ein logisches Zustandsübergangssysteme besteht aus einer Menge S von Zuständen und einer binären Relation →, der Übergangsrelation. Jeder Zustand ist dabei die Repräsentation einer Formelmenge, im einfachsten Fall lediglich die Menge selbst. In ausgefeilteren Systemen enthalten die Zustände aber noch mehr Komponenten, Information über die Geschichte der Ableitung, Repräsentationen der von dem aktuellen Zustand aus machbaren Ableitungen zusammen mit strategischer und heuristischer Information über den Nutzen des jeweiligen Schritts usw. Die Übergangsrelation S → S 0 für Zustände S und S 0 ergibt sich F1 , . . . , F n aus dem Kalkül zunächst mal ganz einfach folgendermaßen: Wenn F eine Kalkülregel ist und F1 , . . . , Fn im Zustand S repräsentiert ist dann ist S 0 eine Repräsentation für F ∪ {F }, wobei F die in S repräsentierte Formelmenge ist. Auf dieser Ebene werden oft zusätzliche Operationen eingeführt, etwa das Löschen von redundanten Aussagen, so dass im Kalkül noch mögliche Ableitungen nun nicht mehr möglich – und hoffentlich auch nicht mehr nötig – sind. Die Automatische Deduktion, SS 2014, vom 04.04.2014 75 Übergangsrelation → enthält daher nicht nur Ableitungsschritte, sondern auch Reduktionsschritte, die die Formelmenge von unnützem Ballast befreien sollen. Für jedes logische Zustandsübergangssystem sind drei Eigenschaften von Interesse: Korrektheit, Vollständigkeit und Konfluenz. Durch neue Regeln, mit denen Formeln oder Teile davon gelöscht werden, wird die Korrektheit und Vollständigkeit des zugrundeliegenden Kalküls beeinflusst. Für jede solche Regel muss man neu beweisen, dass man damit keine falschen Beweise erzeugt (Korrektheit), und dass man mögliche Beweise auch finden kann (Vollständigkeit). Die letzte Eigenschaften der Konfluenz ist für die Implementierung eines Deduktionssystems wichtig. Konfluenz bedeutet, dass wenn man von einem Zustand S aus zwei Nachfolgezustände S1 und S2 erreichen kann, dann gibt es für S1 und S2 einen gemeinsamen Nachfolgezustand S 0 . Ist ein System konfluent, dann kann man es sich bei der Suche leisten, zunächst mal in die falsche Richtung zu suchen. Wenn vom Ausgangszustand (S) überhaupt ein Weg zu einem Beweis (S 0 ) existiert, dann existiert er auch von jedem weiteren Zustand (S1 oder S2 ) aus. Das heißt, bei der Suche gibt es keine Sackgassen; man braucht nie mehr zu früheren Zuständen zurückzukehren (kein Backtracking). Das entspricht auch der Intuition für Beweissuchen: Eine Aussage, die man einmal abgeleitet hat, mag zwar nutzlos für den aktuellen Beweis sein, es sollte aber nicht nötig sein, deren Ableitung selbst ungeschehen zu machen. Vollständigkeit des Deduktionsprozesses bedeutet, dass man unabhängig von den ausgeführten Transformationen vom aktuellen Zustand aus den Beweis noch finden kann. Hat man sehr starke Reduktions- oder Steuerungsregeln, so kann das Zustandsübergangssystem des Deduktionssystems die Eigenschaft der Konfluenz verlieren. In diesem Fall bedeutet Vollständigkeit des Deduktionssystems, dass man nach der Ausführung gewisser Transformationen den Beweis nur noch dadurch findet, dass man zurücksetzt in einen vorangegangenen Zustand und eine andere Alternative wählt. 3.0.4 Steuerung Die vierte Komponente eines Deduktionssystems, die Steuerung, enthält schließlich die Strategien und Heuristiken, mit denen unter den möglichen Ableitungsschritten die jeweils sinnvollen ausgewählt werden. Hier steckt die eigentliche Intelligenz“ des Systems. Die Idee dabei ist, gute“ Schritte zu bevorzugen ” ” und schlechte“ Schritte zu vermeiden. Man unterscheidet Restriktionsstrategi” en und Ordnungsstrategien. Restriktionsstrategien schränken den Suchraum weiter ein, in dem sie bestimmte Ableitungen einfach generell verbieten. Zum Beispiel verbietet die Set of ” Support“-Strategie bei Widerlegungsbeweisen Ableitungen zwischen Axiomen untereinander. Die Idee dabei ist, dass bei Ableitungen zwischen Axiomen allein garantiert kein Widerspruch zu finden ist. Da Restriktionsstrategien bestimmte Ableitungen prinzipiell verbieten, muss man jeweils nachweisen, dass im verbleibenden Suchraum immer noch ein Beweis zu finden ist (Vollständigkeit). Automatische Deduktion, SS 2014, vom 04.04.2014 76 Ordnungsstrategien sortieren die möglichen Ableitungen nach bestimmten Kriterien, z.B. könnte man Ableitungen, die kleine Formeln erzeugen, bevorzugen. Der Zweck der Ordnungsstrategien ist, die Suche selbst geschickt zu organisieren und natürlich die Suche zu terminieren, d.h. wenn es einen Beweis gibt, dessen Auffindung mit endlich vielen Schritten zu garantieren (Terminierung). 3.0.5 Verwendung, Dialogverhalten Ein wichtiger praktischer Aspekt ist die Art der Verwendung des Systems, bzw. die Art der Unterstützung die ein Deduktionssystem bietet: Vollautomatisch Das Deduktionssystem hat als Eingabe die Axiome und die nach zuweisende Schlußfolgerungen, und als Ausgabe nur Erfolg/Misserfolg und eine Begründung (Beweis). Dies ist die Idealvorstellung eines Automatischen Deduktionssystems. Pragmatische System beschränken sich auf eine (einfache) Auswahl) von Eingaben, z.B. einfache Verifikationsbedingungen. Im allgemeinen haben die Automatischen Deduktionssystems eine Menge von Parametern, die vor dem Lauf eingestellt werden müssen. So dass z.B. die Arbeit mit dem System Otter darin bestehen kann, in vielen Läufen, die richtigen Parameter bzw. Heuristiken einzustellen, so dass es am Ende doch eher interaktiv wirkt. Es gibt Varianten dieser Systeme, die während der Suche interaktive Hilfestellung erlauben. Halbautomatisch Bestimmte Systeme für Logiken höherer Ordnung (Typenlogik) führen einen Dialog mit dem Benutzer. Einfache Folgerungen werden automatisch durchgeführt, für andere wird von Benutzer erwartet, die Zwischenziele (Lemmas) zu formulieren und Beweistaktiken zu programmieren. Der geführte Beweis ist im Erfolgsfall korrekt, allerdings kann ein solcher Dialog einige Wochen dauern. Z.B. ist mit dieser Methode der Nachweis der Korrektheit eines Tokenizers von T. Nipkow (TU München) durchgeführt worden Beweisprüfung Diesen Systemen muss die komplette Axiomatisierung und der Beweis vorgelegt werden. Dies kann selbst für einfache Dinge sehr mühsam sein, da der Detaillierungsgrad sehr hoch gewählt ist: Jeder (formale) Schritt des Beweises muss formal korrekt vorliegen. Automatische Deduktion, SS 2014, vom 04.04.2014 4 77 Prädikatenlogik (P L1 ) und Resolution Prädikatenlogik (PL) ist eine ausdrucksstarke Logik, die im Prinzip für sehr viele Anwendungen ausreicht. Man unterscheidet verschiedene Stufen der Prädikatenlogik. Prädikatenlogik 0.Stufe (P L0 ) ist die Aussagenlogik. Sie erlaubt keine Quantifikationen. Prädikatenlogik erster Stufe (P L1 ) dagegen erlaubt schon Quantifikationen über die Elemente einer Trägermenge. Prädikatenlogik 2.Stufe (P L2 ) erlaubt darüberhinaus noch unabhängig Quantifikationen über die Funktionen und Relationen über dieser Trägermenge. Man kann also z.B. in P L2 hinschreiben ∀x : ∃f : ∀P : P (f (x, f ))“, was in P L1 nicht geht. Prädikatenlogik noch ” höherer Stufe erlaubt Quantifizierungen über die Funktionen und Relationen über der Funktions- und Relationsmenge usw. siehe [And02, EFT86]. Aus praktischer Sicht gibt es viele Zusammenhänge, die sich in anderen Logiken wesentlich eleganter und einfacher formulieren lassen als in P Ln . Kurt Gödel hat gezeigt, dass es im Gegensatz zu P L1 für P Ln , n ≥ 2, keinen vollständigen Kalkül mehr geben kann [Göd31]. D.h. es gibt Aussagen in P L2 , die in allen Interpretationen gültig sind, was aber mit keinem durch Symbolmanipulation arbeitenden Verfahren mehr nachgewiesen werden kann. Das heißt nicht, dass man für P L2 keine Deduktionssysteme entwickeln kann – sie können eben nur nicht alle gültigen Theoreme beweisen; aber das können heutige Deduktionssysteme für P L1 auf heutigen Computern auch nur theoretisch. Deduktionssysteme für P L2 sind aber um einiges komplizierter als solche für P L1 [And81, RB79]. Wir werden in der Vorlesung auch Kalküle für Logiken höherer Ordnung betrachten, falls die Zeit ausreicht. 4.1 Syntax der Prädikatenlogik erster Stufe P L1 ist zunächst mal eine formale Sprache, deren Syntax sich durch eine entsprechende Grammatik angeben lässt. Im Gegensatz zu vielen Programmiersprachen z.B. ist die Grammatik von P L1 aber extrem einfach. Wie für die meisten Logiken besteht die Syntaxbeschreibung aus den drei Komponenten: • Signatur • Bildungsregeln für Terme • Bildungsregeln für Formeln Die Signatur gibt das Alphabet an, aus dem die zusammengesetzten Objekte bestehen. Man unterscheidet Funktions- und Prädikatensymbole. Neben diesen Symbolen gibt es noch unendliche viele Variablensymbole, die nicht zur Signatur gerechnet werden. In einer Formel ∀x : ∃y : P (x, f (y))“ sind x und y ” Variablensymbole, f ist ein einstelliges Funktionssymbol und P ein zweistelliges Prädikatensymbol. Die logischen Junktoren und Quantoren sind fest und zählen daher nicht zu der Signatur. Aus den Variablen- und Funktionssymbolen lassen sich Terme aufbauen (f (y) ist zum Beispiel ein Term) und damit und mit den Automatische Deduktion, SS 2014, vom 04.04.2014 78 Prädikatensymbolen Atome, Literale und Formeln. Der Unterschied zwischen Termen und Formeln ist in erster Linie semantischer Natur. Terme bezeichnen Objekte einer Trägermenge und Formeln bezeichnen Wahrheitswerte. Die formale Definition ist: Definition 4.1 (Syntax von P L1 ) Signatur : Σ = (F, P) , wobei • F ist die Menge der Funktionssymbole • P ist die Menge der Prädikatensymbole Diese Mengen sind disjunkt. Daneben braucht man noch die Menge V der Variablensymbole (abzählbar unendlich viele). Diese Menge ist ebenfalls disjunkt zu F und P. Jedem Funktions- und Prädikatensymbol f ∈ Σ ist eindeutig eine Stelligkeit zugeordnet Stelligkeit : arity(f ) ≥ 0. Funktionssymbole mit der Stelligkeit 0 bezeichnet man auch als Konstantensymbole. {f ∈ F | arity(f ) = 0} = Konstantensymbole. Es muss mindestens ein Konstantensymbol in F vorhanden sein! Terme Die Menge der Terme T (Σ, V ) über der Signatur Σ = (F, P) und den Variablen V wird induktiv als die kleinste Menge definiert, die folgendes erfüllt: • V ⊆ T (Σ, V ) • falls f ∈ F, arity(f ) = n, t1 , . . . tn ∈ T (Σ, V ) dann f (t1 , . . . tn ) ∈ T (Σ, V ). Hierbei ist f (t1 , . . . tn ) zu lesen als Zeichenkette bzw. als ein Baum. Um Subterme zu addressieren, benutzt man Positionen in Termen. Das sind Strings von positiven ganzen Zahlen, so dass man mit t|p den Unterterm von t an der Position p berechnen kann: • t|ε = t • f (t1 , . . . , tn )i.p = (ti )|p . Formeln Die Menge der Formeln FΣ über der Signatur Σ = (F, P) und den Variablen V wird induktiv als die kleinste Menge definiert, die folgendes erfüllt: • falls P ∈ P, arity(P ) = n, t1 , . . . , tn ∈ TΣ dann P (t1 , . . . tn ) ∈ FΣ (Atom) . Auch hier ist P (t1 , . . . tn ) als Zeichenkette zu lesen. • falls F, G ∈ FΣ , x ∈ V , dann auch: (¬F ), (F ∨ G), (F ∧ G), (F =⇒ G), (F ⇔ G), (∀x : F ) und (∃x : F ) ∈ FΣ . Automatische Deduktion, SS 2014, vom 04.04.2014 79 Wir machen bei den Schreibweisen einige Vereinfachungen: Geschachtelte gleiche Quantoren schreiben wir als Quantor über mehreren Variablen: ∀x; ∀y : F wird als ∀x, y : F geschrieben. In Formeln werden zum Teil Klammern weggelassen, wenn die Eindeutigkeit gewährleistet bleibt, mit den üblichen Prioritätsregeln. Weiterhin erlauben wir auch als Formelkonstanten die Formeln false und true. Beispiel 4.2 Signatur Σ := ({a, b, f, g}, {P, Q, R}) mit arity(a) = arity(b) = arity(P ) = 0, arity(f ) = arity(Q) = 1 arity(g) = arity(R) = 2. V = {x, y, z, . . .} TΣ = f (a), f (b), f (x), . . . g(a, a), g(a, b), g(a, f (a)), . . . f (f (a)), f (f (b)), . . . f (g(a, a)), . . . g(f (f (a)), a), . . . ... FΣ = {P, Q(a), Q(b), Q(x), . . . , R(a, a), . . . R(a, b), . . . ¬P, ¬Q(a), . . . P ∧ Q(a), P ∧ ¬Q(a), . . . P ∨ Q(a), P ∨ ¬Q(a), . . . P =⇒ Q(a), P ⇔ ¬Q(a), . . . ∀x : Q(x), . . . ∃x : R(x, y) =⇒ Q(x), . . . Mit der Forderung, dass mindestens ein Konstantensymbol vorhanden sein muss, ist implizit verbunden, dass die Trägermengen, über die in einer jeweiligen Interpretation quantifiziert wird, nicht leer sein kann – es muss mindestens ein Element vorhanden sein, auf das dieses Konstantensymbol abgebildet wird. Damit verhindert man, dass Quantifizierungen der Art ∀x : (P ∧ ¬P )“ wahr ” gemacht werden können; indem die Menge, über die quantifiziert wird, leer ist. Einige der logischen Verknüpfungen, wie z.B. =⇒ und ⇔ sind redundant. Sie können durch die anderen dargestellt werden. Bei der Herstellung der Klauselnormalform (Abschnitt 4.3) werden sie dann auch konsequenterweise wieder eliminiert. Nichtsdestotrotz erleichtern sie die Lesbarkeit von Formeln beträchtlich und sind daher mit eingeführt worden. Definition 4.3 Konventionen: • Da 0-stellige Funktionssymbole als Konstantensymbole dienen3 , schreibt man im allgemeinen nicht a()“ sondern einfach nur a ” • Variablen sind genau einem Quantor zugeordnet Insbesondere gelten ähnlich wie in den meisten Programmiersprachen die schon gewohnten Bereichsregeln (lexical scoping) für Variable. D. h. Formeln der Art ∀x : ∃x : P (x) haben nicht die vermutete Bedeutung, nämlich dass für alle x das gleiche x existiert, sondern x ist gebunden in ∃x : P (x) und dass äußere x in alle ∀x : kann das innere x nicht beeinflussen. D.h. die Formel ∀x : ∃x : P (x) ist zu ∃x : P (x) äquivalent. Da man unendlich viele Variablensymbole zur Verfügung hat, kann man in jedem Fall für jeden Quantor ein anderes Variablensymbol wählen. 3 Indem man Konstantensymbole nicht extra ausweist, spart man sich in vielen Fallunterscheidungen eben diesen speziellen Fall. Automatische Deduktion, SS 2014, vom 04.04.2014 80 • Meist haben die logischen Verknüpfungssymbole die Bindungsordnung =⇒ , ⇔, ∧, ∨, ¬ , d.h. =⇒ bindet am schwächsten und ¬ am stärksten. Danach gilt eine Formel ¬A ∧ B ∨ C =⇒ D ⇔ E ∧ F als folgendermaßen strukturiert: ((¬A) ∧ (B ∨ C)) =⇒ (D ⇔ (E ∧ F )). Quantoren binden, soweit die quantifizierte Variable vorkommt. D.h. ∀x : P (x) ∧ Q steht für (∀x : P (x)) ∧ Q während ∀x : P (x) ∧ R(x) für (∀x : (P (x) ∧ R(x))) steht. Um Zweifel auszuschließen, werden aber meist die Klammern explizit angegeben. • Im folgenden wird die allgemein übliche Konvention für die Benutzung des Alphabets verwendet: Buchstaben am Ende des Alphabets, d.h. u, v, w, x, y, z bezeichnen Variablensymbole. Buchstaben am Anfang des Alphabets, d.h. a, b, c, d, e bezeichnen Konstantensymbole. Die Buchstaben f, g, h werden für Funktionssymbole benutzt. Die großen Buchstaben P, Q, R, T werden für Prädikatensymbole benutzt. Die Syntax der Terme und Formeln wurde induktiv definiert: Aus den einfachen Objekten, Variable im Fall von Termen und Atome im Fall von Formeln wurden mit Hilfe von Konstruktionsvorschriften die komplexeren Objekte aufgebaut. Damit hat man eine Datenstruktur, die eine Syntaxbaum hat, der mit verschiedenen Konstruktoren aufgebaut wurde. Definitionen, Algorithmen, Argumentation und Beweise müssen nun jeweils rekursiv (induktiv) gemacht werden, wobei man stets Fallunterscheidung und Induktion über die Struktur der Formeln und Terme machen muss Folgende Definition (der freien Variablen) demonstriert eine Anwendung des rekursiven Definitionsschemas für Terme und Formeln. Eine Variable wird als frei bezeichnet wenn sie sich nicht im Bindungsbereich (Skopus) eines Quantors befindet. Definition 4.4 (Freie Variablen für Terme und Formeln) Die Operation FV(.) sammelt alle nicht durch Quantoren gebundenen Variablensymbole in Termen und Formeln auf. Definition von FV für Terme: t falls t eine Variable ist (Basisfall) FV(t) = FV(t1 ) ∪ . . . ∪ FV(tn ) falls t = f (t1 , . . . tn ) (Rekursionsfall) Definition von FV für Formeln: Basisfall: H = P (t1 , . . . tn ) ist ein Atom, dann: FV(H) = FV(t1 ) ∪ . . . ∪ FV(tn ) (FV ist für Terme schon definiert.) Rekursionsfälle: Fallunterscheidung nach der Struktur von H: Fall: H = ¬F dann FV(H) := FV(F ) Fall: H = F ∨ G dann FV(H) = FV(F ) ∪ FV(G) Fall: H = F ∧ G dann FV(H) = FV(F ) ∪ FV(G) Fall: H = F =⇒ G dann FV(H) = FV(F ) ∪ FV(G) Fall: H = F ⇔ G dann FV(H) = FV(F ) ∪ FV(G) Fall: H = ∀x : F dann FV(H) = FV(F ) \ {x} Fall: H = ∃x : F dann FV(H) = FV(F ) \ {x} Automatische Deduktion, SS 2014, vom 04.04.2014 Beispiel 4.5 81 Unten sind x, y, z Variablensymbole • FV(x) = FV(f (x)) = FV(g(x, g(x, a))) = {x} • FV(P (x) ∧ Q(y)) = {x, y} • FV(∃x : R(x, y)) = {y}. Zum Schluss des Abschnitts über die Syntax von P L1 werden noch einige Sprechweisen und Begriffe, die z.T. auch schon benutzt wurden, eingeführt. Da sie sehr häufig gebraucht werden, muss man sie sich unbedingt einprägen. Definition 4.6 Einige übliche Sprechweisen: Atom: Eine Formel der Art P (t1 , . . . tn ) wobei P ein Prädikatensymbol und t1 , . . . , tn Terme sind heißt Atom. Literal: Ein Atom oder ein negiertes Atom heißt Literal. (Beispiele: P (a) und ¬P (a)) Grundterm: Ein Term t ohne Variablensymbole, d.h. FV(t) = ∅, heißt Grundterm (engl. ground term). Grundatom: Ein Atom F ohne Variablensymbole, d.h. FV(F ) = ∅, heißt Grundatom. geschlossene Formel: Eine Formel F ohne freie Variablensymbole, d.h. FV(F ) = ∅ heißt geschlossen. Klausel Formel mit einem Quantorpräfix nur aus Allquantoren besteht . d.h F = ∀n .F 0 und F 0 ist eine Disjunktionen von Literalen. Beispiel 4.7 Für eine geschlossene Formel: ∀x : ∃y : P (x, y). Nicht geschlossen ist: ∃y : P (x, y), da FV(∃y : P (x, y)) = {y}) . 4.2 Semantik von P L1 (nach Tarski) Durch die formale Definition der Syntax von P L1 ist man jetzt zwar in der Lage, Aussagen als Formeln hinzuschreiben und zu überprüfen ob das was man hingeschrieben hat auch syntaktisch in Ordnung (wohlgeformt) ist. Man kann jetzt auch Operationen zur Manipulation von Termen und Formeln definieren. Was diese Formeln, die ja bisher nur reine Zeichenketten sind, und die Operationen, die nur Zeichenketten manipulieren, aber bedeuten sollen ist bisher nur intuitiv angedeutet worden. Um aber eine Zeichenkettenmanipulation als korrekte Ableitungsregel zu interpretieren braucht man einen Formalismus, der Termen und Formeln Bedeutung zuordnet, so dass man damit eine semantische Folgerungsbeziehung definieren kann. Dies ist eine Verallgemeinerung der entsprechenden Konzepte in der Aussagenlogik. Es gibt auch eine Analogie zu Programmiersprachen. Die reine Syntaxdefinition in einer Backus-Naur Form zum Beispiel hilft zu entscheiden, ob ein gegebenes Programm syntaktisch korrekt ist. Um aber einen Interpretierer oder Compiler Automatische Deduktion, SS 2014, vom 04.04.2014 82 für die Sprache zu schreiben und insbesondere, um dessen Korrektheit nachzuweisen, muss man sagen, was die Konstrukte, die in der Sprache auftreten, bedeuten sollen, d.h. man braucht eine formale Semantik. Dafür gibt es verschiedene Möglichkeiten. Die abstrakteste ist wohl die denotationale Semantik, bei der die Programmiersprachenkonstrukte im wesentlichen auf Mengenoperationen abgebildet werden. Diese Operationen sind dann einfach und übersichtlich zu erklären. Hiermit hat man eine Möglichkeit, die Ausführung von Programmkonstruktionen zu definieren bzw. zu überprüfen. Um die Semantik einer Logik zu definieren gibt es ebenfalls verschiedene Möglichkeiten. Eine operationale Methode der Definition einer Logik ist ein sogenannter Hilbertkalkül. Dabei gibt man zunächst einen Satz von Formeln oder Formelschemata an, die man apriori als gültige Aussagen (Axiome) ansehen will (z.B. P =⇒ P ). Weiterhin braucht man einen Satz von (syntaktischen) Ableitungsregeln, die aus den Axiomen neue Formeln generieren, welche man dann ebenfalls als gültige Formeln annimmt. Man muss nur aufpassen, dass diese Ableitungsregeln nicht gleichzeitig eine Formel und deren Negation generieren (Korrektheit). Ein solcher Hilbertkalkül charakterisiert eine Logik zwar genau, ist aber i.a. zu indirekt. Eine Charakterisierung durch einen Hilbertkalkül eignet sich nicht, um andere, für die Automatisierung besser geeignete Kalküle, zu entwickeln. Eine sehr natürliche Möglichkeit (die denotationale Semantik“ von P L1 ), die ” Semantik einer Logik und insbesondere von P L1 anzugeben ist von Alfred Tarski entwickelt worden [Tar53]. Die Grundidee dabei ist, eine Abbildung der syntaktischen Objekte auf mathematische Objekte (Mengen, Funktionen, Relationen etc.) anzugeben, so dass man unter dieser Abbildung Formeln zu Wahrheitswerten evaluieren kann. Gesucht sind daher: • geeignete mathematische Objekte • eine geeignete Abbildungsvorschrift, wobei die Abbildung in drei Schritten definiert wird: 1. Abbildung der Signatur (für P L1 auf Funktionen und Relationen) 2. Abbildung der Terme auf Elemente einer Grundmenge Trägermenge, Universum) 3. Abbildung der Formeln auf Wahrheitswerte. Für P L1 wird diese Abbildung dann so aufgebaut, dass man zunächst eine Menge definiert, in die die Terme abgebildet werden sollen; Trägermenge, Domain oder Universum genannt. Funktionssymbole werden auf Funktionen über dieser Menge und Prädikatensymbole auf Relationen über dieser Menge abgebildet. Damit ist die Grundstruktur festgelegt. Die Abbildung von Termen und Formeln ergibt sich jetzt ganz natürlich aus ihrer syntaktischen Struktur. Ein Term f (a, b) zum Beispiel bezeichnet gerade eine Funktionsanwendung: Die dem Symbol f zugeordnete Funktion wird auf die den Konstantensymbolen a und b zugeordneten Werte angewendet. Dem Term selbst wird gerade das Ergebnis 83 Automatische Deduktion, SS 2014, vom 04.04.2014 dieser Funktionsanwendung zugeordnet. Wenn z.B. f die arithmetische Funktion + zugeordnet wird und a und b die Zahlen 3 und 4, dann wird damit automatisch dem Term f (a, b) der Wert 7 zugeordnet. Mit Hilfe der Abbildung von Prädikatensymbolen auf Relationen lassen sich Atome auf Wahrheitswerte abbilden. Wenn z.B. das Prädikatensymbol P auf die arithmetische <-Relation abgebildet werden und wie oben die Konstantensymbole a und b auf die Zahlen 3 und 4, dann ist P (a, b) wahr, da ja 3 < 4 wahr ist. Wenn man dagegen a und b umgekehrt auf 4 und 3 abbildet, dann ist P (a, b) falsch. Ausgehend von dieser Grundvorschrift für Atome lassen sich dann zusammengesetzte Formeln aus den Werten für ihre Komponenten und der Bedeutung des obersten logischen Symbols auswerten. Wenn z.B. die Formel F zu falsch ausgewertet wird, dann wird ¬F zu wahr ausgewertet usw. Man beachte, dass die syntaktischen Objekte, wie z.B. der Term f (a, b), nichts weiter sind als Zeichenketten. In einem Computer werden sie als Bitfolgen repräsentiert, die für den Computer keinerlei Bedeutung haben. Im Gegensatz dazu ist mit + wirklich die arithmetische Additionsfunktion gemeint. Wenn man auf Papier einen Unterschied machen will zwischen der Darstellung von f als Funktionssymbol und z.B. + als Funktion, dann muss man zunächst Konventionen zur Schreibweise einführen, um Datenstrukturobjekte und mathematische Dinge auseinander zu halten. Es sind aber völlig unterschiedliche Dinge damit gemeint. In rein mathematischen Texten sind mit den Zeichen, die auf dem Papier innerhalb von Formeln erscheinen im allgemeinen die semantischen Objekte, d.h. die Funktionen usw. gemeint. In logischen Texten wie auch in diesem Skript sind es dagegen die syntaktischen Objekte, um die es primär geht. Die Idee für die Semantik von P L1 ist offensichtlich sehr einfach und natürlich. Der Formalismus ist umfangreich aber einfach und gibt ganz genau die oben geschilderten Prinzipien wieder. Für eine Signatur Σ = (F, P), die nach Definition 4.1 aus Funktions- und Prädikatensymbolen besteht, definiert man zunächst Σ-Algebren 4 bestehend aus einer Trägermenge und einer geeigneten Anzahl von Funktionen geeigneter Stelligkeit. Für jedes in F vorkommende Funktionssymbol mit Stelligkeit n braucht man genau eine n-stellige Funktion. Um auch die Prädikatensymbole zu interpretieren, werden die Σ-Algebren zu Σ-Strukturen erweitert, die für jedes in Σ vorkommende Prädikatensymbol eine passende Relation enthalten. (Den Unterschied zwischen Σ-Algebren und Σ-Strukturen macht man deshalb, weil Σ-Algebren zur Interpretation von Termen und auch für Gleichheitslogiken und für die Unifikation ausreichen, während man für Formeln Σ-Strukturen braucht.) Schematisch sieht die Abbildung der Signatur dann so aus: Σ-Struktur: Σ-Algebra : { Funktionssymbole Prädikatensymbole → Funktionen → Relationen Definition 4.8 Σ-Algebra, Σ-Struktur) Sei Σ = (F, P) eine Signatur. A = (DA , FA ) heißt eine Σ-Algebra gdw. 4 Das Σ in Σ-Algebra bezieht sich auf die Signatur Σ: Für jede Signatur Σ gibt es eine Klasse von Σ-Algebren Automatische Deduktion, SS 2014, vom 04.04.2014 84 • DA ist eine nichtleere Menge (die Trägermenge von A) • FA enthält für jedes Funktionssymbol in F eine passende totale Funktion , d.h. FA = {fA ∈ (DA )n → DA | f ∈ F, arity(f ) = n}. S = (DS , FS , PS ) heißt eine Σ-Struktur gdw. • (DS , FS ) ist eine Σ-Algebra und • PS enthält für jedes Prädikatensymbol in P mit Stelligkeit ≥ 1 eine passende Relation, d.h. PS = {PS ⊆ (DA )n | P ∈ P, arity(P ) = n}. • Jedes Prädikatensymbol der Stelligkeit 0 wird auf 0 oder 1 abgebildet. Die konstanten Formel werden abgebildet wie folgt: true auf 1 und false auf 0. Die zugeordneten Funktionen, Prädikate, Wahrheitswerte zu einem Symbol R werden i.a. mit einem Index S gekennzeichnet. Z.B. f → fS . Für eine Σ-Algebra oder Σ-Struktur S soll in Zukunft mit DS deren Trägermenge bezeichnet werden. Beispiel 4.9 Σ-Algebren und Σ-Strukturen Sei Σ = ({o, s}, {L}) mit arity(o) = 0, arity(s) = 1, arity(L) = 2. Σ-Algebra A1 = (N, {0, inc} wobei N = natürliche Zahlen, inc(x) := x + 1, Hierbei wird o der Konstanten 0 zugeordnet und s der FUnktion inc. Die Relationn wird nicht interpretiert. Σ-Struktur S1 = (N, {0, inc}, {<}) wobei (N = natürliche Zahlen, inc(x) := x + 1) und das Prädikatensymbol L wird als < interpretiert. Σ-Struktur S2 = ({M o, Di, M i, Do, F r, Sa}, {M o, morgen}, {vor}) wobei morgen(M o) = Di, morgen(Di) = M i, . . . und M o vor Di, Di vor M i,. . . , Sa vor So, aber nicht M o vor M i usw. (d.h. vor ist nicht transitiv.) Die Trägermenge in S1 sind die natürlichen Zahlen, dem Konstantensymbol o entspricht die Zahl 0, dem Funktionssymbol s entspricht die Funktion inc und dem Prädikatensymbol L entspricht die <-Relation. Die Trägermenge in S2 sind die Wochentage, dem Konstantensymbol o entspricht der Montag, dem Funktionssymbol s entspricht die Funktion morgen und dem Prädikatensymbol L entspricht die vor-Relation. Wenn man sagt, für die Signatur Σ hat man die Σ-Algebra A, dann ist ganz genau festgelegt, wie die Funktionssymbole von Σ in A interpretiert werden – und wenn man sagt, man hat eine Σ-Struktur A, dann ist genau festgelegt, wie die Funktionssymbole und die Prädikatensymbole von Σ in A interpretiert werden. Die Interpretation der Variablensymbole ist jedoch vorläufig noch offen. Auch ist noch nicht gesagt, wie die Abbildung der Terme formal definiert wird. Man Automatische Deduktion, SS 2014, vom 04.04.2014 85 will ja nicht irgendeine Abbildung, sondern eine, die zur Struktur der Terme passt. Die eleganteste Formulierung dieser Abbildung, die auch für viele spätere Zwecke die richtige Begriffsbildung zur Verfügung stellt, geht von der Beobachtung aus, dass man für eine Signatur Σ aus der Menge der Terme T (Σ, V ) selbst zusammen mit einer Menge von Termkonstruktorfunktionen“ eine Σ-Algebra ” erhält. Diese Termkonstruktorfunktionen nehmen n Terme t1 , . . . , tn und bauen daraus einen neuen Term f (t1 , . . . , tn ) auf. Diese Termalgebra ist das geeignete Objekt, um eine Abbildung von Termen auf eine Σ-Algebra sauber zu definieren. Definition 4.10 (Termalgebra) Für eine Signatur Σ = (F, P) und eine Menge von Variablen V sei T (Σ, V ) die Menge der Terme über der Signatur Σ und den Variablen V . Sei FT die Menge der Funktionen {fΣ | f ∈ F, arity(f ) = n, fΣ (t1 , . . . , tn ) := f (t1 , . . . , tn )}). Dann nennt man (T (Σ, V ), FT ) die Termalgebra über der Signatur Σ. Beachte, dass bei fΣ (t1 , . . . , tn ) die Klammern die n Argumente einklammern, auf die die Funktion fΣ angewendet wird, während f (t1 , . . . , tn ) ein Datenstrukturobjekt ist, d.h. ein Term in T (Σ, V ). Aussage 4.11 (T (Σ, V ), FT ) ist eine Σ-Algebra . Beweis. Da mindestens ein Konstantensymbol in der Signatur vorhanden ist, ist die Trägermenge T (Σ, V ) nicht leer. Für jede Funktion fΣ ∈ T (Σ, V ) gilt offensichtlich, dass die Stelligkeit passt und dass fΣ Terme auf Terme abbildet. Damit sind die Bedingungen der Definition 4.8 erfüllt. 2 Termmengen lassen sich somit als Σ-Algebren interpretieren. Worauf es dabei ankommt ist, dass die Abbildung von Elementen der Trägermenge und den Funktionen und Relationen in bestimmter Weise verträglich sind. Was bisher noch fehlt, ist die Interpretation von Variablensymbolen. Definition 4.12 Interpretation Gegeben sei eine Signatur Σ = (F, P) und eine Menge von Variablen V . Eine Interpretation I = (S, IV ) besteht aus einer Σ-Struktur S und einer Variablenbelegung IV . Die Variablenbelegung ist eine Abbildung IV : V → DS , die jedem Variablensymbol einen Wert in der Trägermenge von S zuordnet. Diese Interpretation wird verträglich erweitert auf Terme5 : IV (t) falls t eine Variable ist Ih (t) = fS (Ih (t1 ), . . . , Ih (tn )) falls t = f (t1 , . . . tn ) Im Folgenden schreiben wir der Einfachheit halber I statt Ih . Eine Interpretation wie sie in 4.12 definiert wurde, enthält alle Informationen, um den in einer Signatur vorkommenden Symbolen eine Bedeutung zuzuordnen. Die Belegung von Funktions- und Prädikatensymbolen wurde getrennt von 5 Man kann das auch als Homomorphismus von Algebren und Strukturen definieren. 86 Automatische Deduktion, SS 2014, vom 04.04.2014 der Belegung von Variablensymbolen definiert, weil die Belegung von Variablensymbolen mit Werten aus der Trägermenge einer Σ-Algebra erst geschieht, wenn quantifizierte Formeln zu Wahrheitswerten ausgewertet werden, wobei die Belegung der Variablen noch variiert wird. Für eine Formel ∀x : P (x)“ zum ” Beispiel wird die Belegung des Prädikatensymbols P“ durch eine Σ-Struktur fi” xiert, während das Symbol x mit allen Werten der Trägermenge der Σ-Struktur belegt werden muss, um herauszufinden, ob P (x) für alle x gilt. Nachdem jetzt geklärt ist, wie man Terme evaluiert, wird im nächsten Schritt festgelegt, wie man Formeln auf Wahrheitswerte abbildet. Für atomare Formeln, d.h. Formeln der Art P (t1 , . . . , tn ) funktioniert das einfach so, dass man zunächst die Terme t1 , . . . , tn auf Elemente Ih (t1 ), . . . , Ih (tn ) der Trägermenge der Σ-Struktur abbildet und dann prüft, ob diese Elemente in der dem Prädikatensymbol zugeordneten Relation liegen. Wenn ja, ist das Atom wahr, wenn nicht, dann ist das Atom falsch. Für die zusammengesetzten Formeln wird die Abbildung auf Wahrheitswerte entsprechend der intuitiven Bedeutung der logischen Verknüpfungen und Quantoren definiert. (Dies ist die Stelle wo die Bedeutung der logischen Symbole präzisiert wird.) Für eine gegebene Interpretation I definieren wir eine weitere Interpretation I[a/x], mit gleicher Σ-Struktur und mit I[a/x](x) := a und I[a/x](y) := I(y) falls y 6= x. Definition 4.13 Auswertung von Formeln: Sei I = (S, IV ) eine Interpretation. Basisfälle: Fall: H = P (t1 , . . . tn ) falls (I(t1 ), . . . , I(tn )) ∈ PS 6 , falls (I(t1 ), . . . , I(tn )) 6∈ PS , Fall H = P Rekursionsfälle: Fall: H = false Fall: H = true Fall: H = ¬F Fall: H = F ∨ G Fall: H = F ∧ G, Fall: H = F =⇒ G Fall: H = F ⇔ G Fall: H = ∀x : F Fall: H = ∃x : F dann dann dann dann dann dann dann dann dann I(H) = 0 I(H) = 1 I(H) = 1 I(H) = 1 I(H) = 1 I(H) = 1 I(H) = 1 I(H) = 1 I(H) = 1 falls falls falls falls falls falls falls dann I(H) := 1. dann I(H) := 0. I(P ) := PS . I(F ) = 0 I(F ) = 1 oder I(G) = 1 I(F ) = 1 und I(G) = 1 I(F ) = 0 oder I(G) = 1 I(F ) = 1 gdw. I(G) = 1 für alle a ∈ DS : I[a/x](F ) = 1 für ein a ∈ DS : I[a/x](F ) = 1 Diese Definition erlaubt es, für eine Formel und eine Interpretation I zu bestimmen, ob die Formel in dieser Interpretation wahr oder falsch ist. Im nächsten Schritt lassen sich dann die Formeln danach klassifizieren, ob sie in allen Interpretationen wahr werden (Tautologien), in irgendeiner Interpretation wahr werden (erfüllbare Formeln), in irgendeiner Interpretation falsch werden (falsifizierbare Formeln) oder in allen Interpretationen falsch werden (unerfüllbare oder widersprüchliche Formeln). 6P S ist die in S dem Symbol P zugeordnete Relation Automatische Deduktion, SS 2014, vom 04.04.2014 87 Definition 4.14 (Modelle, Tautologien etc.) Eine Interpretation I, die eine Formel F wahr macht (erfüllt) heißt Modell von F . Man sagt auch: F gilt in I (F ist wahr in I, I erfüllt F ). Bezeichnung: I |= F . Eine Formel F heißt: allgemeingültig (Tautologie, Satz) wenn sie von allen Interpretationen erfüllt wird erfüllbar wenn sie von einer Interpretation erfüllt wird, d.h. wenn es ein Modell gibt unerfüllbar (widersprüchlich) wenn sie von keiner Interpretation erfüllt wird. falsifizierbar wenn sie in einer Interpretation falsch wird. Es gibt dabei folgende Zusammenhänge: • Eine Formel F ist allgemeingültig gdw. ¬F unerfüllbar • Falls F weder allgemeingültig noch Widerspruch, dann gilt: F ist erfüllbar und ¬F ist erfüllbar Die Menge der unerfüllbaren und die Menge der allgemeingültigen Formeln sind disjunkt. Formeln die weder unerfüllbar noch allgemeingültig sind sind gleichzeitig erfüllbar und falsifizierbar. Beispiel 4.15 allgemeingültig: unerfüllbar erfüllbar, falsifizierbar: Für den letzten Fall geben die sie falsifiziert: P ∨ ¬P P ∧ ¬P ∀x.P (x) wir Interpretation an, die die Formel erfüllt und eine 1. Als Menge wählen wir {0, 1}, als Interpretation für P ebenfalls die Menge {0, 1}. Dann ergibt eine Interpretation I bzgl. dieser Struktur S2 : I(∀x.P (x)) gdw 0 ∈ PS2 und 1 ∈ PS1 . D.h. I(∀x.P (x)) = 1. 2. Als Menge wählen wir {0, 1}, als Interpretation für P die Menge {0}. Dann ergibt eine Interpretation I bzgl. dieser Struktur S2 : I(∀x.P (x)) gdw 0 ∈ PS2 und 1 ∈ PS1 . D.h. I(∀x.P (x)) = 0. Als weiteren, einfachen Testfall untersuchen wir Klauseln. Beispiel 4.16 Wann ist die Klausel {P (s), ¬P (t)} eine Tautologie? Zunächst ist einfach zu sehen, dass {P (s), ¬P (s)} eine Tautologie ist: Für jede Interpretation I gilt, dass I(P (s)) gerade der negierte Wahrheitswert von I(¬P (s)) ist. Automatische Deduktion, SS 2014, vom 04.04.2014 88 Angenommen, s 6= t. Vermutung: dann ist es keine Tautologie. Um dies nachzuweisen, muss man eine Interpretation finden, die diese Klausel falsch macht. Zuerst definieren wir eine Trägermenge und eine Σ-Algebra. Man startet mit einer Menge A0 , die mindestens soviele Elemente enthält, wie die Terme s, t Konstanten und Variablen enthalten. Also A0 := {a1 , . . . , an , cx1 , . . . cxm }, wobei ai die Konstanten in s, t sind und xi die Variablen. Danach definiert man alle Funktionen so, die in s, t vorkommen, so dass keinerlei Beziehungen gelten. D.h. man kann genau alle Terme nehmen, die sich aus den A0 als Konstanten und den Funktionssymbolen aufbauen lassen. D.h. es ist die Termmenge einer Termalgebra über einer erweiterten Signatur Σ0 . Danach wählt man als Interpretation I(ai ) := ai , I(xi ) = cxi , fS = f . Beachte, dass der Quantorpräfix nur aus Allquantoren besteht. Damit gilt nun: I(S) 6= I(t). Da man die einstellige Relation (die Menge), die P zugeordnet wird, frei wählen kann, kann man dies so machen, dass I(s) 6∈ PS und I(t) ∈ PS . Damit wird aber die Klausel falsch unter dieser Interpretation. D.h. es kann keine Tautologie sein. Analog kann man diese Argumentation für Klauseln mit mehrstelligen Prädikaten verwenden. Übungsaufgabe 4.17 Jede Klausel die mehr als ein Literal enthält ist erfüllbar. Wie nehmen an, dass die Formeln true, f alse nicht in Klauseln verwendet werden. Mit der Einführung des Begriffs eines Modell (und einer Interpretation) sind alle Voraussetzungen gegeben, um – in Verallgemeinerung der Begriffe für Aussagenlogik – eine semantische Folgerungsbeziehung |= zwischen zwei Formeln zu definieren: Definition 4.18 (Semantische Folgerung) F |= G gdw. G gilt (ist wahr) in allen Modellen von F . Diese Definition ist zwar sehr intuitiv, da es aber i.a. unendlich viele Modelle für eine Formel gibt, ist sie jedoch in keiner Weise geeignet, um für zwei konkrete Formeln F und G zu testen, ob G aus F semantisch folgt. Die semantische Folgerungsbeziehung dient aber als Referenz; jedes konkrete, d.h. programmierbare Testverfahren muss sich daran messen, ob und wie genau es diese Beziehung zwischen zwei Formeln realisiert. Bemerkung 4.19 Man muss sich folgendes klar machen: Bezüglich einer gegebenen Σ-Struktur ist eine gegebene geschlossene Formel F entweder wahr oder falsch. Das heißt aber noch nicht, dass entweder F oder ¬F eine Tautologie ist, denn dieser Begriff ist definiert über alle Σ-Strukturen. Bemerkung 4.20 Das Beispiel der natürlichen Zahlen und der darin geltenden Sätze ist nicht vollständig mit P L1 zu erfassen. Der Grund ist, dass man nur von einer einzigen festen Σ-Struktur ausgeht (die natürlichen Zahlen) und dann nach der Gültigkeit von Sätzen fragt. Automatische Deduktion, SS 2014, vom 04.04.2014 89 Versucht man die natürlichen Zahlen in P L1 zu erfassen, so stellt sich heraus, dass man mit endlich vielen Axiomen nicht auskommt. Es ist sogar so, dass die Menge der Axiome nicht rekursiv aufzählbar ist. Beispiel 4.21 Ein Beispiel für eine in P L1 modellierbare Theorie sind die Gruppen. Man benötigt nur endlich viele Axiome. Und man kann dann danach fragen, welche Sätze in allen Gruppen gelten. Ein erster Schritt zur Mechanisierung der Folgerungsbeziehung liefert das sogenannte Deduktionstheorem, welches die semantische Folgerungsbeziehung in Beziehung setzt mit dem syntaktischen Implikationszeichen. Dieses Theorem erlaubt die Rückführung der semantischen Folgerung auf einen Tautologietest. Satz 4.22 Deduktionstheorem Für alle Formeln F und G gilt: F |= G gdw. F =⇒ G ist allgemeingültig (Tautologie). Beweis. =⇒ “Es gelte F |= G. Sei I eine beliebige Interpretation. Wenn F in I ” wahr ist, dann ist auch G wahr, nach Annahme. Damit ist aber auch die Formel F =⇒ G in I wahr. Wenn F in I falsch ist, dann ist die Formel F =⇒ G in I wahr. Also gilt F =⇒ G in allen Interpretationen I, d.h. F =⇒ G ist allgemeingültig. ⇐“Annahme ist jetzt: F =⇒ G ist allgemeingültig. Sei I eine beliebige ” Interpretation. Wenn I die Formel F erfüllt, dann gilt das auch für G, da F =⇒ G ist allgemeingültig ist. Da die Interpretation beliebig gewählt war, gilt somit F |= G 2 Bemerkung 4.23 Will man wissen, ob eine Formel F aus einer Menge von Axiomen A1 , . . . , An folgt, so kann man dies zunächst auf die äquivalente Frage zurückführen, ob F aus der Konjunktion der Axiome A1 ∧ . . . ∧ An folgt und dann auf die äquivalente Frage, ob die Implikation (A1 ∧ . . . ∧ An ) =⇒ F eine Tautologie ist. Das Deduktionstheorem gilt in anderen Logiken i.a. nicht mehr. Das kann daran liegen, dass die semantische Folgerungsbeziehung dort anders definiert ist oder auch, dass die Implikation selbst anders definiert ist. Die Implikation, so wie sie in P L1 definiert ist, hat nämlich den paradoxen Effekt, dass aus etwas Falschem alles folgt, d.h. die Formel f alse =⇒ F ist eine Tautologie. Versucht man, diesen Effekt durch eine geänderte Definition für =⇒ zu vermeiden, dann muss das Deduktionstheorem nicht mehr unbedingt gelten. Da F eine Tautologie ist genau dann wenn ¬F unerfüllbar ist, folgt unmittelbar: F |= G gdw. ¬(F =⇒ G) ist unerfüllbar (widersprüchlich) gdw. F ∧ ¬G ist unerfüllbar. Automatische Deduktion, SS 2014, vom 04.04.2014 90 Das bedeutet, dass man in P L1 den Test der semantischen Folgerungsbeziehung weiter zurückführen kann auf einen Unerfüllbarkeitstest. Genau dieses Verfahren ist die häufig verwendete Methode des Beweis durch Widerspruch: Um zu zeigen, dass aus Axiomen ein Theorem folgt, zeigt man, dass die Axiome zusammen mit dem negierten Theorem einen Widerspruch ergeben. 4.2.1 Berechenbarkeitseigenschaften der Prädikatenlogik Es gilt die Unentscheidbarkeit der Prädikatenlogik: Satz 4.24 Es ist unentscheidbar, ob eine geschlossene Formel ein Satz der Prädikatenlogik ist. Einen Beweis geben wir nicht. Der Beweis besteht darin, ein Verfahren anzugeben, das jeder Turingmaschine M eine prädikatenlogische Formel zuordnet, die genau dann ein Satz ist, wenn diese Turingmaschine auf dem leeren Band terminiert. Hierbei nimmt man TM, die nur mit einem Endzustand terminieren können. Da das Halteproblem für Turingmaschinen unentscheidbar ist, hat man damit einen Beweis für den Satz. Satz 4.25 Die Menge der Sätze der Prädikatenlogik ist rekursiv aufzählbar. Die Begründung ist analog. Als Schlussfolgerung kann man sagen, dass es kein Deduktionssystem gibt (Algorithmus), das bei eingegebener Formel nach endlicher Zeit entscheiden kann, ob die Formel ein Satz ist oder nicht. Allerdings gibt es einen Algorithmus, der für jede Formel, die ein Satz ist, auch terminiert und diese als Satz erkennt. Über das theoretische Verhalten eines automatischen Deduktionssystems kann man daher folgendes sagen: Es kann terminieren und antworten: ist oder ist kein Satz. Wenn das System sehr lange läuft, kann das zwei Ursachen haben: Der Satz ist zu schwer zu zeigen (zu erkennen) oder die eingegebene Formel ist kein Satz und das System kann auch dies nicht erkennen. Die Einordnung der sogenannten quantifizierten Booleschen Formeln – Quantoren über null-stellige Prädikate sind erlaubt, aber keine Funktionssymbole, und keine mehrstelligen Prädikate – ist in P L1 nicht möglich. Diese QBF sind ein Fragment“ von P L2 . Es ist bekannt (aus Info-3+4), dass die Eigenschaft ” Tautologie“ für QBF entscheidbar ist (PSPACE-vollständig). ” 4.3 Normalformen von P L1 -Formeln Ziel diese Abschnitts ist es, einen Algorithmus zu entwickeln, der beliebige Formeln in eine Klauselnormalform (conjunctive normal form, CNF), d.h. eine Konjunktion (∧) von Disjunktionen (∨ ) von Literalen, transformiert. Diese Klauselnormalform ist nur ganz außen“ allquantifiziert, es gibt keine inneren ” Quantoren. Folgendes Lemma erlaubt die Transformation von Formeln, wobei die Regeln in Tautologien entsprechen, aber als Transformationen benutzt werden. Diese sind Erweiterungen der Tautologien der Aussagenlogik. 91 Automatische Deduktion, SS 2014, vom 04.04.2014 Lemma 4.26 Elementare Rechenregeln (F ⇐⇒ G) (F =⇒ G) ¬¬F ¬(F ∧ G) ¬(F ∨ G) ¬∀x : F ¬∃x : F (∀x : F ) ∧ G (∀x : F ) ∨ G (∃x : F ) ∧ G (∃x : F ) ∨ G ∀x : F ∧ ∀x : G ∃x : F ∨ ∃x : G F ∨ (G ∧ H) F ∧ (G ∨ H) ⇐⇒ ⇐⇒ ⇔ ⇔ ⇔ ⇔ ⇔ ⇔ ⇔ ⇔ ⇔ ⇔ ⇔ ⇔ ⇔ (F =⇒ G) ∧ (G =⇒ F ) (¬F ∨ G) F ¬F ∨ ¬G ¬F ∧ ¬G ∃x : ¬F ∀x : ¬F ∀x : (F ∧ G) ∀x : (F ∨ G) ∃x : (F ∧ G) ∃x : (F ∨ G) ∀x : (F ∧ G) ∃x : (F ∨ G) (F ∨ G) ∧ (F ∨ H) (F ∧ G) ∨ (F ∧ H) (erlaubt Elimination von ⇐⇒ ) (erlaubt Elimination von =⇒ ) falls falls falls falls x x x x nicht nicht nicht nicht frei frei frei frei in in in in G G G G (Distributivität) (Distributivität) Beweis. Wir beweisen beispielhaft den Fall: ¬∀x : F ⇔ ∃x : ¬F =⇒ Sei I eine Interpretation, die ¬∀x : F erfüllt. ” ” d.h. ∀x : F gilt nicht in I (4.13 ). ; D.h.: es gilt nicht: für alle a aus der Trägermenge von I: I[a/x] erfüllt F . ; Somit gibt es ein a aus der Trägermenge von I, so dass F nicht in I[a/x] gilt. ; Es gibt ein a aus der Trägermenge von I, so dass I[a/x] die Formel ¬F erfüllt (4.13, Fall ¬ ) ; I erfüllt damit ∃x : ¬F . (4.13, Fall ∃ ) ⇐“ Sei I eine Interpretation, die ∃x : ¬F erfüllt. Die obige Folgerungskette ” kann auch rückwärts durchlaufen werden. 2 Bemerkung 4.27 Mithilfe der obigen Tautologien kann man die sogenannte Pränexform und auch die Negations-normalform einer Formel herstellen. Die Pränex-form ist dadurch gekennzeichnet, dass in der Formel zuerst alle Quantoren kommen (Quantorpräfix), und dann eine quantorenfreie Formel. Die Negations-normalform ist dadurch gekennzeichnet, dass alle Negationszeichen nur vor Atomen vorkommen und dass die Junktoren =⇒ , ⇐⇒ eliminiert sind. Zur Umwandlung einer Formel in Pränexform braucht man nur die Äquivalenzen zu verwenden, die Quantoren nach außen schieben. Hierzu müssen alle gebundenen Variablen verschiedene Namen haben. Die Äquivalenzen, die es erlauben, Subformeln unter Quantoren ∀x. zu schieben, falls diese die Subformel die Variable x nicht enthält, spielen eine wichtige Rolle. Automatische Deduktion, SS 2014, vom 04.04.2014 92 Die Negationsnormalform wird erreicht, indem man zunächst =⇒ , ⇐⇒ eliminiert und dann alle Äquivalenzen nutzt, um Negationszeichen nach innen zu schieben. Die Elimination von Existenzquantoren ist die sogenannte Skolemisierung (Nach Thoralf Skolem). Idee: Ersetze in ∃x : P (x) das x, das existiert“ durch ein Konstantensymbol ” a, d.h. ∃x : P (x) → P (a) Ersetze in ∀x1 . . . xn : ∃y : P (x1 , . . . , xn , y) das y durch eine Funktion von x1 , . . . , xn , d.h. ∀x1 . . . xn : ∃y : P (x1 , . . . , xn , y) → ∀x1 . . . xn : P (x1 , . . . , xn , f (x1 , . . . , xn )). Im nächsten Theorem sei G[x1 , . . . , xn , y] eine beliebige Formel, die die Variablensymbole x1 , . . . , xn , y frei enthält und G[x1 , . . . , xn , t] eine Variante von F , in der alle Vorkommnisse von y durch t ersetzt sind. Satz 4.28 Skolemisierung Eine Formel F = ∀x1 . . . xn : ∃y : G[x1 , . . . , xn , y] ist (un-)erfüllbar gdw. F 0 = ∀x1 . . . xn : G[x1 , . . . , xn , f (x1 , . . . , xn )] (un-)erfüllbar ist, wobei f ein n-stelliges Funktionssymbol ist, das nicht in G vorkommt. Beweis. Wir zeigen die Erfüllbarkeitsäquivalenz. Die Unerfüllbarkeitsäquivalenz ergibt sich dann automatisch. =⇒ “Sei I1 = (A1 , IV ) eine Σ1 -Interpretation mit I1 |= F , wobei Σ1 die ” Signatur für F ist. Für Σ2 = Σ1 plus zusätzliches n-stelliges Funktionssymbol f konstruieren wir ein Σ2 -Modell I2 für F 0 folgendermaßen: I2 = (A2 , IV ) mit A2 := A1 plus eine neue n-stellige Funktion fA2 , wobei fA2 wie folgt arbeitet: für alle a1 , . . . , an aus der Trägermenge von A2 : fA2 (a1 , . . . , an ) := c, so dass I1 [a1 /x1 , . . . , an /xn , c/y] |= G[x1 , . . . , xn , y] Da I1 ein Modell für F ist, existiert so ein c immer. ; I2 [a1 /x1 , . . . , an /xn ] |= G[x1 , . . . , xn , f (x1 , . . . , xn )] ; I2 |= ∀x1 , . . . , xn : G[x1 , . . . , xn , f (x1 , . . . , xn )] ; F 0 ist erfüllbar. Die ⇐“ Richtung ist trivial. 2 ” Beispiel 4.29 Skolemisierung ∃x : P (x) → P (a) ∀x : ∃y : Q(f (y, y), x, y) → ∀x, y : ∃z : x + z = y → ∀x : Q(f (g(x), g(x)), x, g(x)) ∀x, y : x + (y − x) = y. Beispiel 4.30 Skolemisierung erhält i.a. nicht die Allgemeingültigkeit (Falsifizierbarkeit): Automatische Deduktion, SS 2014, vom 04.04.2014 93 ∀x : P (x) ∨ ¬∀x : P (x) ist eine Tautologie ∀x : P (x) ∨ ∃x : ¬P (x) ist äquivalent zu ∀x : P (x) ∨ ¬P (a) nach Skolemisierung. Eine Interpretation, die die skolemisierte Formel falsifiziert kann man konstruieren wie folgt: Die Trägermenge ist {a, b}. Es gelte P (a) und ¬P (b). Die Formel ist aber noch erfüllbar. Beachte, dass es dual dazu auch eine Form der Skolemisierung gibt, bei der die allquantifizierten Variablen skolemisiert werden. Dies wird verwendet, wenn man statt auf Widersprüchlichkeit die Formeln auf Allgemeingültigkeit testet. Im Beweis ersetzt man dann die Begriff erfüllbar durch falsifizierbar und unerfüllbar durch allgemeingültig. Skolemisierung ist eine Operation, die nicht lokal innerhalb von Formeln verwendet werden darf, sondern nur global, d.h. wenn die ganze Formel eine bestimmte Form hat. Zudem bleibt bei dieser Operation nur die Unerfüllbarkeit der ganzen Klausel erhalten. Satz 4.31 Allgemeinere Skolemisierung Sei F eine geschlossene Formel, G eine existentiell quantifizierte Unterformel in F an einer Position p, Weiterhin sei G nur unter All-quantoren, Konjunktionen, und Disjunktionen. Die All-quantoren über G binden die Variablen x1 , . . . , xn . D.h. F ist von der Form F [∃y : G0 [x1 , . . . , xn , y]]. Dann ist F [G] (un-)erfüllbar gdw. F [G0 [x1 , . . . , xn , f (x1 , . . . , xn )]] (un-)erfüllbar ist, wobei f ein n-stelliges Funktionssymbol ist, das nicht in G vorkommt. Definition 4.32 Transformation in Klauselnormalform unter Erhaltung der Unerfüllbarkeit. Folgende Prozedur wandelt jede prädikatenlogische Formel in Klauselform (CNF) um: 1. Elimination von ⇔ und =⇒ : F ⇔ G → F =⇒ G ∧ G =⇒ F und F =⇒ G → ¬F ∨ G (siehe Lemma 4.26). Die Optimierung durch Abkürzen wie n der Aussagenlogik (schnelle CNF) kann auch hier verwendet werden. Die Verallgemeinerung auf Prädikatenlogik erfodert Abkürzungen der Form P (x1 , . . . , xn ) für (Sub-)Formeln F mit den freien Variablen x1 , . . . , xn . 2. Negation ganz nach innen schieben: ¬¬F ¬(F ∧ G) ¬(F ∨ G) ¬∀x : F ¬∃x : F → F → ¬F ∨ ¬G → ¬F ∧ ¬G → ∃x : ¬F → ∀x : ¬F 94 Automatische Deduktion, SS 2014, vom 04.04.2014 3. Skopus von Quantoren minimieren, d.h. Quantoren so weit wie möglich nach innen schieben ∀x : (F ∀x : (F ∃x : (F ∃x : (F ∀x : (F ∃x : (F ∧ G) ∨ G) ∧ G) ∨ G) ∧ G) ∨ G) → → → → → → (∀x : F ) ∧ G (∀x : F ) ∨ G (∃x : F ) ∧ G (∃x : F ) ∨ G ∀x : F ∧ ∀x : G ∃x : F ∨ ∃x : G falls falls falls falls x x x x nicht nicht nicht nicht frei frei frei frei in in in in G G G G Diese Operationen sind optional und können die Stelligkeit der Skolemfunktionen minimieren. Es können aber auch mehr Skolemfunktionen entstehen. 4. Alle gebundenen Variablen sind systematisch umzubenennen, um Namenskonflikte aufzulösen. 5. Existenzquantoren werden durch Skolemisierung eliminiert 6. Allquantoren löschen (alle Variablen werden als allquantifiziert angenommen). 7. Distributivität (und Assoziativität, Kommutativität) iterativ anwenden, um ∧ nach außen zu schieben ( Ausmultiplikation“). F ∨ (G ∧ H) → ” (F ∨ G) ∧ (F ∨ H) (Das duale Distributivgesetz würde eine disjunktive Normalform ergeben.) Hier ist eine Optimierung sinnvoll, die mittels Abkürzungen unnötiges Kopieren von großen Formeln vermeidet. 8. Allquantoren an die Klauseln schieben, und danach gebundenen Variablen umbenennen, damit alle Klauseln variablendisjunkt werden. Das Resultat dieser Prozedur ist eine Konjunktion von Disjunktionen (Klauseln) von Literalen: (L1,1 ∨ . . . ∨ L1,n1 ) ∧ (L2,1 ∨ . . . ∨ L2,n2 ) ∧ ... ∧ (Lk,1 ∨ . . . ∨ L1,nk ) oder in (Multi-)Mengenschreibweise: {{(L1,1 , . . . , L1,n1 }, {L2,1 , . . . , L2,n2 }, ... {Lk,1 , . . . , L1,nk }} Bemerkung 4.33 Der CNF-algorithmus (4.32) ist im schlechtesten Fall exponentiell, d.h. die Anzahl der Literale in der Klauselform wächst exponentiell mit der Schachtelungstiefe der Ausgangsformel (siehe 2.4). Automatische Deduktion, SS 2014, vom 04.04.2014 95 Analog zu 2.4 und kann man den Algorithmus optimieren, so dass nur ein lineares Anwachsen der Formel erfolgt. Damit gibt es eine zweite Quelle, die die Formeln nicht-äquivalent macht, und nur die Erfüllbarkeit erhält: Abkürzungen und Skolemisierung. Beispiel 4.34 A1: Dieb(Anton) ∨ Dieb(Ede) ∨ Dieb(Karl) A2: Dieb(Anton) =⇒ (Dieb(Ede) ∨ Dieb(Karl)) A3: Dieb(Karl) =⇒ (Dieb(Ede) ∨ Dieb(Anton)) A4: Dieb(Ede) =⇒ (¬ Dieb(Anton) ∧¬ Dieb(Karl)) A5: ¬ Dieb(Anton) ∨¬ Dieb(Karl) Klauselform: A1: Dieb(Anton), Dieb(Ede), Dieb(Karl) A2: ¬ Dieb(Anton), Dieb(Ede), Dieb(Karl) A3: ¬ Dieb(Karl), Dieb(Ede), Dieb(Anton) A4a: ¬ Dieb(Ede), ¬ Dieb(Anton) A4b: ¬ Dieb(Ede), ¬ Dieb(Karl) A5: ¬ Dieb(Anton),¬ Dieb(Karl) Beispiel 4.35 verschiedene Typen von Normalformen: Original Formel: ∀ε : (ε > 0 =⇒ ∃δ : (δ > 0 ∧ ∀x, y : (|x − y| < δ =⇒ |g(x) − g(y)| < ε))) Negations Normalform : (Alle Negationen innen; =⇒ , ⇐⇒ eliminiert) ∀ε : (¬ε > 0 ∨ ∃δ : (δ > 0 ∧ ∀x, y : (¬|x − y| < δ ∨ |g(x) − g(y)| < ε))) Pränex Form : (Alle Quantoren außen) ∀ε : ∃δ : ∀x, y : ε > 0 =⇒ δ > 0 ∧ (|x − y| < δ =⇒ |g(x) − g(y)| < ε) Skolemisierte Pränex Form : ε > 0 =⇒ fδ (ε) > 0 ∧ (|x − y| < fδ (ε) =⇒ |g(x) − g(y)| < ε) Disjunktive Normalform : (¬ε > 0) ∨ (fδ (ε) > 0 ∧ ¬|x − y| < fδ (ε)) ∨ (fδ (ε) > 0 ∧ |g(x) − g(y)| < ε) Konjunktive Normalform : (¬ε > 0 ∨ fδ (ε) > 0) ∧ (¬ε > 0 ∨ ¬|x − y| < fδ (ε) ∨ |g(x) − g(y)| < ε) Klauselform : {{¬ε > 0, fδ (ε) > 0}, {¬ε > 0, ¬|x − y| < fδ (ε), |g(x) − g(y)| < ε}}. Automatische Deduktion, SS 2014, vom 04.04.2014 5 96 Resolution und Unifikation Ein Kalkül soll die semantische Folgerungsbeziehung durch syntaktische Manipulation nachbilden, d.h. genau dann wenn F |= G, soll es möglich sein, entweder G aus F durch syntaktische Manipulation abzuleiten (F ` G, positiver Beweis) oder F ∧ ¬G durch syntaktische Manipulation zu widerlegen (F ∧ ¬G ` f alse, Widerlegungsbeweis). Für jeden Kalkül muss die Korrektheit gezeigt werden, d.h. wann immer F ` G, dann F |= G. Die Vollständigkeit, d.h. wann immer F |= G, dann F ` G ist nicht notwendig. Was möglichst gelten sollte (aber bei manchen Logiken nicht möglich ist), ist die Widerlegungsvollständigkeit, d.h. wann immer F |= G dann F ∧ ¬G ` f alse. Für P L1 gibt es eine ganze Reihe unterschiedlicher Kalküle. Ein wichtiger und gut automatisierbarer ist der 1963 von John Alan Robinson entwickelte Resolutionskalkül [Rob65]. Er arbeitet in erster Linie auf Klauseln. 5.1 Grundresolution: Resolution ohne Unifikation Im folgenden schreiben wir Klauseln teilweise als Folge von Literalen: L1 , . . . Ln und behandeln diese als wären es Multimengen. (teilweise auch als Mengen). Definition 5.1 Resolution im Fall direkt komplementärer Resolutionsliterale. Elternklausel 1: L, K1 , . . . , Km Elternklausel 2: ¬L, N1 , . . . , Nn Resolvente: K1 , . . . , Km , N1 , . . . , Nn Hierbei kann es passieren, dass die Resolvente keine Literale mehr enthält. Diese Klausel nennt man die leere Klausel; Bezeichnung: 2. Sie wird als falsch“ in” terpretiert und stellt i.a. den gesuchten Widerspruch dar. Beispiel 3.2.14 weiter fortgesetzt: Beispiel 5.2 siehe Beispiel 4.34 A1: Dieb(Anton), Dieb(Ede), Dieb(Karl) A2: ¬ Dieb(Anton), Dieb(Ede), Dieb(Karl) A3: ¬ Dieb(Karl), Dieb(Ede), Dieb(Anton) A4a: ¬ Dieb(Ede), ¬ Dieb(Anton) A4b: ¬ Dieb(Ede), ¬ Dieb(Karl) A5: ¬ Dieb(Anton),¬ Dieb(Karl) Resolutionsableitung: A2,2 & A4a,1 R1,2 & A5,2 R2 & A3,3 R3,2 & A4b,1 R4 & A1,3 R5,1 & R2 Also, Ede wars. ` ` ` ` ` ` R1: R2: R3: R4: R5: R6: ¬ Dieb(Anton), Dieb(Karl) ¬ Dieb(Anton) ¬ Dieb(Karl), Dieb(Ede) ¬ Dieb(Karl) Dieb(Anton), Dieb(Ede) Dieb(Ede) Automatische Deduktion, SS 2014, vom 04.04.2014 97 Aussage 5.3 Die Grund-Resolution ist korrekt: C1 C2 R := L, K1 , . . . , Km :=: ¬L, N1 , . . . , Nn = K1 , . . . , Km , N1 , . . . , Nn Dann gilt C1 ∧ C2 |= R. Beweis. Wir müssen zeigen: Jede Interpretation, die die beiden Elternklauseln wahr macht, macht auch die Resolvente wahr. Das geht durch einfache Fallunterscheidung: Falls L wahr ist, muss ¬L falsch sein. Da C2 wahr ist, muss ein Ni wahr sein. Da dieses Literal in R vorkommt, ist auch R (als Disjunktion betrachtet) wahr. Falls L falsch ist, muss ein Kj wahr sein. Da das ebenfalls in der Resolvente vorkommt, ist R auch in diesem Fall wahr. 2 Bemerkung 5.4 Im Sinne der Herleitbarkeit ist Resolution unvollständig: Nicht jede Formel, die semantisch folgt, lässt sich durch Anwenden der Resolution ableiten: Denn P |= P ∨ Q. aber auf P alleine kann man keine Resolution anwenden. Für den eingeschränkten Fall, dass die Klauselmenge keine Variablen enthält (Grundfall) können wir schon die Widerlegungsvollständigkeit der Resolution beweisen. Satz 5.5 (Widerlegungsvollständigkeit der Grundresolution) Jede endliche unerfüllbare Grundklauselmenge lässt sich durch Resolution widerlegen. Beweis. siehe Beweis von Satz 2.43 2 5.1.1 Resolution im allgemeinen Fall Für den allgemeinen Fall, wenn in den Literalen auch Variablen vorkommen, benötigt man eine zusätzliche Operation, um potentielle Resolutionspartner, d.h. Literale mit gleichem Prädikat und verschiedenem Vorzeichen durch Einsetzung von Termen für Variablen komplementär gleich zu machen. Dazu führen wir zunächst das Konzept der Substitution ein. Definition 5.6 (Substitution) Eine Substitution σ ist eine Abbildung, die Terme auf Terme abbildet und die nur endlich viele Variablen verändert. Zusätzlich gilt: σ(f (t1 , . . . , tn )) = f (σ(t1 ), . . . , σ(tn )). D.h. die Substitution σ kann man sehen als gleichzeitige Ersetzung der Variablen x durch den Term σ(x). Substitutionen werden meist geschrieben wie eine Menge von Variable - Term Paaren: {x1 7→ t1 , . . . , xn 7→ t1 } Mit Hilfe der rekursiven Definition: 98 Automatische Deduktion, SS 2014, vom 04.04.2014 σ(t) := ti f (σ(t1 ), . . . , σ(tn )) falls t ≡ xi und σ(xi ) = ti falls t ≡ f (t1 , . . . tn )) lassen sich solche Mengen von Variable - Term Paaren korrekt als (mit Datenstruktur verträgliche) Abbildung auf beliebigen Termen definieren. Entsprechend kann man die Anwendung von Substitutionen auf Literale und Klauseln definieren. Beispiel 5.7 σ = {x 7→ a} σ = {x 7→ g(x)} σ = {x 7→ y, y 7→ a} σ = {x 7→ y, y 7→ x} σ(x) = a, σ(f (x, x)) = f (a, a) σ(x) = g(x), σ(f (x, x)) = f (g(x), g(x)), σ(σ(x)) = g(g(x)) σ(x) = y, σ(σ(x)) = a, σ(f (x, y)) = f (y, a) σ(x) = y, σ(f (x, y)) = f (y, x) Definition 5.8 Für eine Substitution σ = {x1 7→ t1 , . . . , xn 7→ tn } heißt dom(σ) := {x1 , . . . , xn } cod(σ) := {t1 , . . . , tn } die Domain die Codomain Substitutionen σ mit σ(σ(t)) = σ(t) für alle Terme t heißen idempotent. Die Komposition στ von Substitutionen σ und τ ist definiert als: στ (t) := σ(τ (t)). Gleichheit (modulo einer Menge von Variablen W ) zwischen Substitutionen σ und τ wird folgendermaßen definiert: σ = τ [W ] gdw. σx = τ x für alle x ∈ W . Eine Instanziierungrelation ≤ [W ] zwischen Substitutionen σ und τ (für eine Menge von Variablen W ) ist folgendermaßen definiert: σ ≤ τ [W ] gdw. es existiert eine Substitution λ mit λσ = τ [W ]. Zwei Substitutionen σ und τ sind äquivalent, d.h. σ ≈ t[W ] gdw. σ ≤ τ [W ] und τ ≤ σ[W ] gilt.Ist W die Menge aller Variablen, so kann man W weglassen. Bemerkung 5.9 Die Relationen ≤ [W ] ist reflexiv und transitiv, aber nicht antisymmetrisch. D.h. es ist eine Präordnung. Die Relation ≈ [W ] ist eine Äquivalenzrelation. Eine Substitution ist genau dann idempotent wenn die Variablen der Domain nicht in der Codomain vorkommen. Beispiel 5.10 Komposition: • {x 7→ a}{y 7→ b} = {x 7→ a, y 7→ b} • {y 7→ b}{x 7→ f (y)} = {x 7→ f (b), y 7→ b} • {x 7→ b}{x 7→ a} = {x 7→ a} Instanziierungsrelation: Automatische Deduktion, SS 2014, vom 04.04.2014 99 • {x 7→ y} ≤ {x 7→ a}[x] • {x 7→ y} ≤ {x 7→ a}[x, y] gilt nicht ! • {x 7→ y} ≤ {x 7→ a, y 7→ a} • {x 7→ f (x)} ≤ {x 7→ f (a)} Äquivalenz: {x 7→ y, y 7→ x} ≈ Id (Id ist die identische Substitution) Für die Äquivalenz von Substitutionen gilt: σ ≈ τ [W ] gdw. σ = ρτ [W ] für eine Variablenpermutation ρ. Eine Variablenpermutation ρ ist eine Substitution, die Variablen permutiert, d.h. Dom(ρ) = Cod(ρ) und ρ bildet Variablen auf Variablen ab. (Beweis Übungsaufgabe) Definition 5.11 (Resolution mit Unifikation) Elternklausel 1: Elternklausel 2: Resolvente: L, K1 , . . . , Km σ ist eine Substitution (Unifikator) ¬L0 , N1 , . . . , Nn σ(L) = σ(L0 ) σ(K1 , . . . , Km , N1 , . . . , Nn ) Die Operation auf einer Klauselmenge, die eine Klausel C auswählt, auf diese eine Substitution σ anwendet und σ(C) zur Klauselmenge hinzufügt, ist korrekt. Damit ist auch die allgemeine Resolution als Folge von Variableneinsetzung und Resolution korrekt. Beispiel 5.12 Dieses Beispiel (Eine Variante der Russelschen Antinomie) zeigt, dass noch eine Erweiterung der Resolution, die Faktorisierung, notwendig ist. Die Aussage ist: Der Friseur rasiert alle, die sich nicht selbst rasieren: ∀x : ¬rasiert(x, x) ⇐⇒ rasiert(F riseur, x) rasiert(x, x), rasiert(F riseur, x) σ = {x 7→ F riseur, y 7→ F riseur} ¬rasiert(F riseur, y), ¬rasiert(y, y) rasiert(F riseur, F riseur), ¬rasiert(F riseur, F riseur) Die Klauseln sind widersprüchlich, was aber ohne eine Verschmelzung der Literale mittels Resolution nicht ableitbar ist. Man kann aus den Klauseln rasiert(x, x), rasiert(F riseur, x) ¬rasiert(F riseur, y), ¬rasiert(y, y) folgende gesättigte Klauselmenge mit Resolution herleiten: rasiert(x, x), rasiert(F riseur, x) ¬rasiert(F riseur, y), ¬rasiert(y, y) rasiert(F riseur, F riseur), ¬rasiert(F riseur, F riseur) rasiert(x, x), ¬rasiert(x, x) 100 Automatische Deduktion, SS 2014, vom 04.04.2014 In der folgenden Herleitung werden die Variablen mit Friseur“instanziiert, und ” dann die Literale verschmolzen. rasiert(x, x), rasiert(F riseur, x) ` ¬rasiert(F riseur, y), ¬rasiert(y, y) ` rasiert(F riseur, F riseur) ¬rasiert(F riseur, F riseur) Danach ist es möglich, diese beiden Literale durch Resolution zur leeren Klausel abzuleiten. Definition 5.13 (Faktorisierung) Elternklausel: Faktor: L, L0 , K1 , . . . , Km σ(L, K1 , . . . , Km ) σ(L) = σ(L0 ) Damit besteht der Resolutionskalkül jetzt aus Resolution und Faktorisierung. Definition 5.14 Der Resolutionskalkül transformiert Klauselmengen S wie folgt: 1. S → S ∪ {R}, wobei R eine Resolvente von zwei (nicht notwendig verschiedenen) Klauseln aus S ist. 2. S → S ∪ {F }, wobei F ein Faktor einer Klausel aus S ist. Der Resolutionskalkül terminiert mit Erfolg, wenn die leere Klausel abgeleitet wurde, d.h. wenn 2 ∈ S. Bei Klauselmengen nehmen wir wie üblich an, dass die Klauseln variablendisjunkt sind. Beispiel 5.15 Wir wollen die Transitivität der Teilmengenrelation mit Resolution beweisen. Wir starten mit der Definition von ⊆ unter Benutzung von ∈: ∀x, y : x ⊆ y ⇔ ∀w : w ∈ x =⇒ w ∈ y Das zu beweisende Theorem ist: ∀x, y, z : x ⊆ y ∧ y ⊆ z =⇒ x ⊆ z Umwandlung in Klauselform ergibt: H1: ¬x ⊆ y, ¬w ∈ x, w ∈ y ( =⇒ Teil der Definition) H2: x ⊆ y, f (x, y) ∈ x (zwei ⇐ Teile der Definition, H3: x ⊆ y, ¬f (x, y) ∈ y f ist die Skolem Funktion für w) C1: a ⊆ b (drei Teile der negierten Behauptung, C2: b ⊆ c a, b, c sind Skolem Konstanten für x, y, z) C3: ¬a ⊆ c Resolutionswiderlegung: 101 Automatische Deduktion, SS 2014, vom 04.04.2014 H1,1 & C1, H1,1 & C2, H2,2 & R1,1, H3,2 & R2,2, R3,2 & R4,2, R5 & (Faktorisierung) R6 & C3 {x 7→ a, y 7→ b} {x 7→ b, y 7→ c} {x 7→ a, w 7→ f (a, y)} {y 7→ c, w 7→ f (x, c)} {x 7→ a, y 7→ c} ` ` ` ` ` ` ` R1: R2: R3: R4: R5: R6: R7: ¬w ∈ a, w ∈ b ¬w ∈ b, w ∈ c a ⊆ y, f (a, y) ∈ b x ⊆ c, ¬f (x, c) ∈ b a ⊆ c, a ⊆ c a⊆c 2 Automatische Deduktion, SS 2014, vom 04.04.2014 5.2 102 Unifikation Die Resolutions- und Faktorisierungsregel verwenden Substitutionen (Unifikatoren), die zwei Atome syntaktisch gleich machen. Meist will man jedoch nicht irgendeinen Unifikator, sondern einen möglichst allgemeinen. Was das bedeutet, zeigen die folgenden Beispiele: Beispiel 5.16 Unifikatoren und allgemeinste Unifikatoren. P (x), Q(x) ¬P (y), R(y) σ = {x → 7 a, y 7→ a} Q(a), R(a) σ ist ein Unifikator P (x), Q(x) ¬P (y), R(y) Q(y), R(y) σ = {x 7→ y} σ ist ein allgemeinster Unifikator Fragen: • Was heißt allgemeinster“ Unifikator? ” • Wieviele gibt es davon? (σ 0 = {y 7→ x} im obigen Beispiel ist offensichtlich auch einer.) • Wie berechnet man sie? Ein allgemeinster Unifikator (von zwei Atomen) kann man intuitiv dadurch erklären, dass es eine Substitution ist, die zwei Terme oder Atome gleich macht, und möglichst wenig instanziiert. Optimal ist es dann, wenn alle Unifikatoren durch weitere Einsetzung in den allgemeinsten Unifikator erzeugt werden können. Definition 5.17 Unifikatoren und allgemeinste Unifikatoren. Seien s und t die zu unifizierenden Terme (Atome) und W := FV(s, t). Eine Substitution σ heißt Unifikator (von s, t), wenn σ(s) = σ(t). Die Menge aller Unifikatoren bezeichnet man auch mit U (s, t), Eine Substitution σ heißt allgemeinster Unifikator für zwei Terme s und t wenn σ ein Unifikator ist (Korrektheit) für alle Unifikatoren τ gilt σ ≤ τ [W ] (Vollständigkeit) Der allgemeinste Unifikator ist i.a. nur eindeutig bis auf ≡ [W ]: Beispiel 5.18 Es gibt (mindestens) zwei allgemeinste Unifikatoren für x und y: {x 7→ y}, {y 7→ x}, die sich aber nur durch Variablenumbenennung unterscheiden. Die Beispiele legen die Vermutung nahe, dass es bis auf Variablenumbenennung immer einen allgemeinsten Unifikator gibt. Wir geben den Unifikationsalgorithmus in Form eines Regelpaketes an, das auf Mengen von Gleichungen operiert. Automatische Deduktion, SS 2014, vom 04.04.2014 103 Definition 5.19 Unifikationsalgorithmus U 1: Eingabe: zwei Terme oder Atome s und t: Ausgabe: nicht unifizierbar“ oder einen allgemeinsten Unifikator: ” Zustände: auf denen der Algorithmus operiert: Eine Menge Γ von Gleichungen. ? Initialzustand: Γ0 = {s = t}. Unifikationsregeln: ? f (s1 , . . . , sn ) = f (t1 , . . . , tn ), Γ ? (Dekomposition) ? s1 = t1 , . . . , sn = tn , Γ ? x = x, Γ Γ ? x = t, Γ ? x = t, {x 7→ t}Γ (Tautologie) x ∈ FV(Γ), x 6= t, x 6∈ FV(t) (Anwendung) ? t = x, Γ ? t 6∈ V (Orientierung) x = t, Γ Abbruchbedingungen: ? f (. . .) = g(. . .), Γ F ail ? x = t, Γ F ail wenn f 6= g wenn x ∈ FV(t), und t 6= x (Clash) (occurs check Fehler) Steuerung: Starte mit Γ = Γ0 , und transformiere Γ solange durch (nichtdeterministische) Anwendung der Regeln, bis entweder eine Abbruchbedingung erfüllt ist oder keine Regel mehr anwendbar ist. Falls eine Abbruchbedingung erfüllt ist, terminiere mit nicht unifizierbar“. Falls keine Regel mehr anwendbar ist, hat die ” ? ? Gleichungsmenge die Form {x1 = t1 , . . . , xk = tk }, wobei keine der Variablen xi in einem tj vorkommt; d.h. sie ist in gelöster Form. Das Resultat ist dann {x1 7→ t1 , . . . , xk 7→ tk }. (siehe Lemma 5.22). Beispiel 5.20 Unifikation von zwei Termen durch Anwendung der obigen Regeln: 104 Automatische Deduktion, SS 2014, vom 04.04.2014 ? → → → → → → → → {k(f (x, g(a, y)), g(x, h(y))) = k(f (h(y), g(y, a)), g(z, z))} ? ? {f (x, g(a, y)) = f (h(y), g(y, a)), g(x, h(y)) = g(z, z)} ? ? {x = h(y), g(a, y) = g(y, a), g(x, h(y)) = g(z, z)} ? ? ? ? {x = h(y), a = y, y = a, g(x, h(y)) = g(z, z)} ? ? ? {x = h(y), y = a, g(x, h(y)) = g(z, z)} ? ? ? {x = h(a), y = a, g(x, h(a)) = g(z, z)} ? ? ? ? {x = h(a), y = a, x = z, h(a) = z} ? ? ? ? {x = h(a), y = a, x = z, z = h(a)} ? ? ? {x = h(a), y = a, z = h(a)} (Dekomposition) (Dekomposition) (Dekomposition) (Orientierung) (Anwendung, y) (Dekomposition) (Orientierung) (Anwendung) Unifizierte Terme: k(f (h(a), g(a, a)), g(h(a), h(a))). Satz 5.21 Der Unifikationsalgorithmus U1 terminiert, ist korrekt und vollständig. Beweis. Seien s und t die zu unifizierenden Terme. Sei W := FV(s, t). Korrektheit: Wir müssen zeigen, dass die berechnete Substitution auch wirklich ein Unifikator für die beiden Eingabeterme ist. Die Idee dazu ist folgende: Man zeige, dass für jede Transformationsregel gilt: wenn die Gleichungsmenge Γ0 nach einer Regelanwendung unifizierbar ist, dann ist auch die entsprechende Menge vor der Regelanwendung unifizierbar. Per Induktion nach der Anzahl der Regelanwendungen ergibt sich dann: Wenn die Lösungsgleichungsmenge unifizierbar ist, dann sind auch die Ausgangsterme unifizierbar. Man muss jetzt jede Unifikationsregel daraufhin untersuchen. Wir machen das am Beispiel der Dekompositionsregel: ? ? Angenommen, Γ0 = {s1 = t1 , . . . , sn = tn } ∪ Γ ist unifizierbar, d.h. es ? ? existiert eine Substitution τ ∈ U ({s1 = t1 , . . . sn = tn } ∪ Γ). Dann gilt ? selbstverständlich τ f (s1 , . . . , sn ) = τ f (t1 , . . . , tn ), d.h. das Gleichungssystem vorher ist unifizierbar. Für die anderen Regeln ist die Argumentation analog. Terminierung Um zu zeigen, dass der Unifikationsalgorithmus immer terminiert, müssen wir ein (fundiertes) Maß für Gleichungssysteme finden, das nach jeder Regelanwendung kleiner wird. Ein Maß ist das Tupel (Anzahl der ungelösten Variablen, Anzahl der Symbole, Anzahl der falsch orientierten Gleichungen) mit lexikographischer Ordnung. (Eine Variable x heißt ? gelöst wenn sie nur noch in der Gleichung x = t, aber x nicht in t vorkommt.). Dieses Maß wird nach jeder Regelanwendung kleiner: Wenn die Dekomposition oder Tautologieregel feuert, wird die Anzahl der Symbole kleiner, wenn die Anwendungsregel feuert, wird die Anzahl der ungelösten Automatische Deduktion, SS 2014, vom 04.04.2014 105 Variablen kleiner, und die Orientierungsregel verkleinert die dritte Komponente und lässt die anderen fest. Vollständigkeit: Wir zeigen, dass alle Regeln die Menge der Unifikatoren nicht verändert. Da die Korrektheit schon gezeigt ist, d.h. die Menge vergrößert sich nicht, müssen wir jetzt nur noch zeigen, dass die Menge der Unifikatoren sich nicht verkleinert. Sei τ eine Substitution mit τ ∈ U (Γ) und sei Γ → Γ0 transformiert worden. Wenn die entsprechende Regel die Dekomposition, Tautologie oder die Orientierung war, dann sieht man leicht ein, dass τ ∈ U (Γ0 ). Betrachtung wir die Regel (Anwendung). Dann gilt τ x = τ t. Hieraus folgt, dass τ = τ {x 7→ t} ist, denn für x gilt: τ (x) = τ (t) und τ {x 7→ t}(x) = τ (t). Für andere Variablen y 6= x gilt offenbar τ {x 7→ t}(y) = τ (y). Folglich gilt auch hier τ ∈ U (Γ0 ). 2 Lemma 5.22 Der Unifikationsalgorithmus U1 terminiert entweder mit einem Unifikator in gelöster Form, oder er bricht ab mit nicht unifizierbar“. ” Beweis. nach 5.21 terminiert U1 immer. Es gibt folgende Möglichkeiten: entweder bricht er ab mit nicht unifizierbar“ oder es ist keine Regel mehr anwendbar. ” ? Wenn keine Regel mehr anwendbar ist, dann gibt es nur noch Gleichungen x = t, Dekomposition ist nicht mehr anwendbar, die Gleichungen sind richtig orientiert und x kommt nur einmal in Γ vor, insbesondere nicht in t. 2 ? ? Lemma 5.23 Sei Γ = {x1 = t1 , . . . , xk = tk } ein Gleichungssystem in gelöster Form. Dann ist σ := {x1 7→ t1 , . . . , xk 7→ tk } ein allgemeinster Unifikator. Beweis. Offenbar ist σ ein Unifikator. Zum Nachweis der Allgemeinstheit sei τ ein Unifikator von Γ. Dann gilt τ σ = τ : τ σxi = τ ti = τ xi für i = 1, . . . , n und für eine Variable x 6∈ {x1 , . . . , xn } gilt τ σx = τ x. Also ist σ allgemeiner als τ . 2 Satz 5.24 Für jedes unifizierbare Gleichungssystem Γ gibt es bis auf Umbenennung von Variablen genau einen allgemeinsten Unifikator und U1 berechnet einen solchen. 5.3 Komplexität des Unifikationsalgorithmus Aussage 5.25 Der Unifikationsalgorithmus U1 hat exponentielle Laufzeit in der Anzahl der Symbole der zu unifizierenden Terme: Beispiel 5.26 Zu unifizieren sei: ? f (x2 , x3 , x4 , . . . , xn ) = f (g(x1 , x1 ), g(x2 , x2 ), g(x3 , x3 ), . . . , g(xn−1 , xn−1 )) Der Unifikationsalgorithmus arbeitet dann folgendermaßen: Automatische Deduktion, SS 2014, vom 04.04.2014 106 ? f (x2 , x3 , x4 , . . . , xn ) = f (g(x1 , x1 ), g(x2 , x2 ), g(x3 , x3 ), . . . , g(xn − 1, xn − 1)) ? ? ? ? → x2 = g(x1 , x1 ), x3 = g(x2 , x2 ), x4 = g(x3 , x3 ), . . . , xn = g(xn−1 , xn−1 ) (Dekomposition) ? ? ? → x2 = g(x1 , x1 ), x3 = g(g(x1 , x1 ), g(x1 , x1 )), . . . , xn = g(xn−1 , xn−1 ) (Anwendung, x2 ) ? ? → x2 = g(x1 , x1 ), x3 = g(g(x1 , x1 ), g(x1 , x1 )), ? ? x4 = g(g(g(x1 , x1 ), g(x1 , x1 )), g(g(x1 , x1 ), g(x1 , x1 ))), . . . , xn = g(xn−1 , xn−1 ) (Anwendung, x3 ) Da die Terme exponentiell anwachsen, benötigt man in diesem Beispiel exponentiell viel Platz. Eine Verbesserung ist die Verwendung von Sharing, d.h.gerichteten Graphen statt Bäumen). Danach wird der Platzbedarf stark verbessert (linear), allerdings benötigt der (naive) occurs-check exponentiellen Aufwand. Auch diesen kann man verbessern durch Verwendung von optimierten Graph-algorithmen, so dass man nach Optimierung einen im schlimmsten Fall quadratischen Algorithmus erhält. Es gibt jedoch Unifikationsalgorithmen, die durch geschickte Repräsentation der Terme eine lineare Komplexität haben [PM68]. Allerdings sind für praktische Zwecke die Varianten des Algorithmus von Martelli und Montanari geeigneter [MM82]. 5.3.1 Ein effizienterer Unifikationsalgorithmus nach Martelli und Montanari ? Er basiert auf Multigleichungen, die mehrere Gleichungen bedeuten, z.B. s1 = ? ? ? s2 = s3 entspricht den zwei Gleichungen s1 = s2 und s2 = s3 . Außerdem werden nur spezielle flache Terme in Multigleichungen aufgenommen, d.h nur solche mit ? Tiefe 1 und die als Unterterme nur Variablen haben. Z.B. wird f (g(x), y) = z ? ? als f (x0 , y) = z, x0 = g(x) behandelt. Nach einer Vorbereitung, das Flachmachen (Flattening), das in linearer Zeit durchgeführt werden kann, startet der Unifikationsalgorithmus mit einer Multi-Menge von Multigleichungen, die nur flache Terme enthalten. Die interne Darstellung der Multimengen ist meist eine Liste, kann aber bei großen auch eine Map sein. Der Algorithmus operiert auf einem Paar: der Multimenge der gelösten und der Mutimenge der ungelösten Gleichungen, bezeichnet mit Γs , Γu , eobei die Multimenge der gelösten am Anfang leer ist. Es werden folgende Regeln angewendet: 107 Automatische Deduktion, SS 2014, vom 04.04.2014 ? (Merge) ? Γs ; Γu ∪ {x = M1 } ∪ {x = M2 } ? ? (solved) (single) ? Γs ; Γu ∪ {x = M1 = M2 } ? Γs ; Γu ∪ {x = s = M } ? wenn x ∈ / Var (Γu , s, M ) ? Γs ∪ {x = s}; Γu ∪ {s = M } Γs ; Γu ∪ {s} Γs ; Γu ? (decompose) ? Γs ; Γu ∪ {f (x1 , . . . , xn ) = f (y1 , . . . , yn ) = M } ? ? ? Γs ; Γu ∪ {f (y1 , . . . , yn ) = M } ∪ {x1 = y1 } ∪ . . . ∪ {xn = yn } Die neu eingeführten Variablen repräsentieren Knoten in einem gerichteten Graphen, und optimieren dadurch das Sharing. Die einzigen Objekte, die kopiert werden, sind flache Terme, was in konstanter Zeit passieren kann und somit keine exponentielle Vergrößerung der Terme bzw. der Gleichungsmenge bewirkt. Die Erkennung, dass die Menge nicht unifizierbar ist, erfolgt durch zwei Regeln: ? (Clash) ? Γs ; Γu ∪ {f (. . .) = g(. . .) = M } Nicht unifizierbar ? (cycle) ? Es gibt eine Folge x1 = s1 , . . . xn = sn von Gleichungen in Γu ∪ Γs , so dass x1 ∈ Var (sn ) und xi ∈ Var (si−1 ), i = 2, . . . , n und mindestens ein si ist keine Variable Nicht unifizierbar Argumentation zur Komplexität: Wir betrachten dabei nur den ungelösten Teil. (decompose) vermindert die Anzahl der Vorkommen der Funktionssymbole, und erhöht die Anzahl der Vorkommen von Variablen maximal um die (maximale) Stelligkeit von Funktionssymbolen. die anderen Regeln verkleinern jeweils die Anzahl der Terme im ungelösten Teil. Da man die Datenstrukturen verwalten muss, ergibt sich noch ein logarithmischer Faktor in der Komplexität. Die cycleRegel kann in linearer durchgeführt werden analog zum topologischen Sortieren. Wenn man die Lösung bereitstellen will, muss man darauf achten, dass Γs nicht die Substitution selbst darstellt, sondern noch nicht voll eingesetzt ist: Z.B. ? ? könnte es {x = f (y, y), y = g(z)} sein. Beim vollen Einsetzen kann sich wieder eine exponentiell große Substitution ergeben, so dass man entweder DAGs nehmen muss, oder bei der iterierte Form der Einsetzungen bleiben muss. Wir schauen uns an, wie der Algorithmus das exponentielle Wachstum im obigen Beispiel verhindert. Beispiel 5.27 Gleichungen: ? f (x2 , x3 , x4 , . . . , xn ) = f (g(x1 , x1 ), g(x2 , x2 ), g(x3 , x3 ), . . . , g(xn−1 , xn−1 )) Automatische Deduktion, SS 2014, vom 04.04.2014 Nach dem Flachmachen sind die Gleichungen: ? ? f (x2 , x3 , x4 , . . . , xn ) = f (y1 , . . . , yn−1 ), y1 = g(x1 , x1 ), . . . , yn−1 g(xn−1 , xn−1 )). Der Multigleichungsalgorithmus macht daraus in einigen Schritten: ? ? ? ? x2 = y1 , . . . , xn = yn−1 , y1 = g(x1 , x1 ), . . . yn−1 = g(xn−1 , xn−1 )). ? ? ? ? ? ? x2 = y1 = g(x1 , x1 ), x3 = y2 = g(x2 , x2 ), . . . xn = yn−1 = g(xn−1 , xn−1 )). 108 ? = Wenn wir nur die Variablen xi betrachten, die im Originalproblem vorkommen, dann erhalten wir als Darstellung des Unifikators (Diese wird teilweise auch Dreiecks-Darstellung genannt) xn xn−1 ... x2 7→ 7→ ... 7→ g(xn−1 , xn−1 ) g(xn−2 , xn−2 ) ... g(x1 , x1 ) Das zeigt deutlich die Struktur der Lösung und warum die eingesetzte Lösung exponentiell groß wird ohne Sharing. Man kann den Algorithmus auch noch abwandeln druch eine Regel, die Variablen durch Variablen ersetzen kann. 5.4 Der allgemeine Resolutionskalkül Wir können nun zusammenfassend sagen, wie der Resolutionskalkül auf Klauselmengen arbeitet: Definition 5.28 Der Resolutionskalkül ist ein Kalkül, der Klauselmengen in Klauselmengen transformiert mit den zwei folgenden Regeln: 1. Sei C eine Menge von Klauseln. Sei R eine Resolvente von zwei (nicht notwendig verschiedenen) Klauseln in CS, wobei der zugehörige Unifikator ein allgemeinster ist. Dann bilde C 0 := C ∪ {R} 2. Sei C eine Menge von Klauseln. Sei F ein Faktor einer der Klauseln in CS, wobei der zugehörige Unifikator ein allgemeinster ist. Dann bilde C 0 := C ∪ {F } 5.5 Schritte zum Vollständigkeitsbeweis der allgemeinen Resolution Definition 5.29 Herbrand Interpretation: Sei C eine Klauselmenge über der Signatur Σ und V die Menge der Variablen. Eine Herbrand Interpretation ist eine Interpretation (IV , T (Σ, ∅), P ) wobei • T (Σ, ∅) die Grundtermalgebra ist (ohne Variablensymbole) (auch Herbrand Universum genannt) und Automatische Deduktion, SS 2014, vom 04.04.2014 109 • IV eine Variablenbelegung in T (Σ, ∅), d.h. eine Abbildung auf Grundterme • P für jedes Prädikatensymbol eine Relation auf Grundtermen festlegt. (Für jedes Prädikatensymbol kann man die Relation dadurch festlegen, dass man eine Menge von Atomen angibt, die als wahr in der Interpretation angenommen werden sollen.) Bemerkung: Für eine feste Klauselmenge unterscheiden sich die HerbrandInterpretationen nur durch die Interpretation der Variablen und Prädikatensymbole. Satz 5.30 (Herbrand Theorem) Für eine unerfüllbare Menge C von Klauseln gibt es eine endliche unerfüllbare Menge von Grundinstanzen Beweis. 1.) Die Menge Cgr aller Grundinstanzen von C ist unerfüllbar: Wir nehmen an, dass die Menge Cgr aller Grundinstanzen von C erfüllbar ist, von einer Interpretation I. Wir konstruieren eine Herbrandinterpretation IH für Cgr wie folgt: In jeder Grundklausel wird mindestens ein Literal von I wahr gemacht. All diese Literale zusammen ergeben dann genau eine (Herbrand) Interpretation der Prädikatensymbole, die in C vorkommen. Um zum Widerspruch zu kommen, müssen wir jetzt zeigen, dass diese Herbrandinterpretation auch die ursprüngliche Klauselmenge C erfüllt. Das heißt, für jede Klausel D und für jede Belegung der Variablen x1 , . . . , xn in der Klausel mit Grundtermen muss gelten, dass IH [t1 /x1 , . . . , tn /xn ] |= D. Es ist jedoch {x1 7→ t1 , . . . , xn 7→ tn }C gerade eine der Grundklauseln, die von IH erfüllt wird. Da bei Herbrand-Interpretationen Variablenbelegungen dasselbe sind wie Substitutionen, gilt: IH [t1 /x1 , . . . , tn /xn ] |= C. Also wird die Klauselmenge C von IH erfüllt, und das ist der gesuchte Widerspruch. 2.) Es gibt eine endliche unerfüllbare Teilmenge von Cgr : Annahme: jede endliche Teilmenge von Cgr ist erfüllbar. Wir konstruieren damit eine Interpretation von von Cgr . Sei A1 , A2 , . . . eine Aufzählung der Atome einer Herbrandbasis (alle Grundatome). S Sei B := Bn wobei Bn := {B | B : {A1 , A2 , . . . , An } → {0, 1}}. Das ist die Menge aller möglichen (Teil-) Belegungen von Atomen. Dies ergibt einen Baum mit den Belegungen als Knoten; von B nach B 0 geht genau dann eine gerichtete Kante, wenn B ∈ Bn , B 0 ∈ Bn+1 und B und B 0 auf {A1 , A2 , . . . , An } übereinstimmen. Ein Knoten B ∈ Bn in diesem Baum heißt abgeschlossen, wenn es eine Klausel in Cgr gibt, so dass alle in Cgr vorkommenden Atome in {A1 , A2 , . . . , An } sind und B diese Klausel zu falsch evaluiert. Offenbar ist auch jeder Nachfolgeknoten eines abgeschlossenen Knotens wieder abgeschlossen. Für jedes n gibt es einen nicht abgeschlossenen Knoten in Bn , denn anderenfalls gibt es für jeden Knoten in Bn eine Klausel in Cgr , die zu falsch evaluiert wird. Dies sind endlich viele Klauseln, deren Konjunktion könnte dann von keiner Interpretation erfüllt werden, was ein Widerspruch zur obigen Annahme ist. Der Teilbaum der nicht abgeschlossenen Knoten ist ein unendlicher Baum mit endlicher Verzweigungsrate. Nach König’s Lemma gibt es einen unendlichen Pfad 110 Automatische Deduktion, SS 2014, vom 04.04.2014 in diesem Baum. Dieser unendliche Pfad stellt gerade eine Interpretation von Cgr dar. Dies ist ein Widerspruch zur Annahme, dass Cgr unerfüllbar ist. Damit haben wir gezeigt, dass es eine endliche unerfüllbare Teilmenge von Cgr gibt. 2 Das hier nicht bewiesene Kompaktheitstheorem für P L1 sagt aus, dass jede unerfüllbare unendliche Menge von Aussagen eine endliche, unerfüllbare Teilmenge hat. Unter Ausnutzung dieses Satzes kann man im zweiten Teil des obigen Beweises sofort schließen, dass es eine unerfüllbare endliche Teilmenge von Cgr geben muss. Das Herbrand Theorem können wir jetzt für folgende Argumentation benutzen: Für eine unerfüllbare Klauselmenge gibt es offensichtlich eine endliche Menge von Grundinstanzen, so dass diese Grundklauselmenge unerfüllbar ist. Diese Grundklauselmenge können wir durch Resolution ohne Unifikation widerlegen, das sagte gerade das Theorem 5.5. Was wir jetzt noch brauchen ist die Möglichkeit, diese Widerlegung auf der variablenfreien Ebene zu einer Widerlegung auf der Ebene der Originalklauseln zu liften“, d.h. wir müssen zeigen, dass es für ” jeden Grundresolutionsschritt eine entsprechende allgemeine Resolution gibt, so dass die Grundresolvente eine Instanz der allgemeinen Resolvente ist. Das leistet das sogenannte Lifting Lemma Lemma 5.31 Lifting Lemma Seien C und D zwei beliebige Klauseln ohne gemeinsame Variablen, Cgr und Dgr zwei Grundinstanzen davon. Für jede Resolvente Rgr zwischen Cgr und Dgr gibt es eine entsprechende Resolvente R von (evtl. iterierten) Faktoren (siehe Definition. 5.13) von C und D, so dass Rgr eine Grundinstanz von R ist. Beweis. siehe einschlägige Literatur. 2 Satz 5.32 Vollständigkeit der Resolution und Faktorisierung mit allgemeinsten Unifikatoren: Für jede unerfüllbare Klauselmenge gibt es einen Widerlegungsbeweis mittels Resolution und Faktorisierung. Beweis. Wir sammeln einfach alle bisherigen Ergebnisse auf: Nach dem Herbrand Theorem (5.30) gibt es eine endliche unerfüllbare Grundklauselmenge, für die man nach Theorem 5.5 eine Resolutionswiderlegung findet. Durch Induktion nach der Anzahl der Grundresolutionen bekommt man jetzt mittels des Lifting Lemmas, dass es für jede dieser Grundresolutionen eine entsprechende Sequenz von Faktorisierungen und Resolution mit allgemeinsten Unifikatoren gibt, so dass die Resolvente allgemeiner ist als die Grundresolvente. Für die allerletzte Grundresolvente, die leere Klausel, ist die einzige allgemeinere Klausel ebenfalls die leere Klausel. Daher wird auf der allgemeineren Ebene ebenfalls die leere Klausel produziert. 2 Resolution * 2 allgemein C1 C2 Herbrand Theorem Instanz C1,gr Grund-Resolution Lifting C2,gr * 2 Grund Automatische Deduktion, SS 2014, vom 04.04.2014 5.6 111 Ein Beispiel für Resolutionsbeweise: Hilbertkalkül Der Hilbertkalküle gibt es für viele Logikvarianten. Die Idee ist stets, eine Menge von Axiomen: die als bereits wahr angenommenen Theoreme der Logik, und als einzige Schlussregel den Modus ponens zu nehmen. Die Menge der herleitbaren Formeln sind dann die Sätze der entsprechenden Hilbertlogik. Diese Kalküle bieten eine rein operationale Definition von Logik(en), die keine Semantik erfordert. Wir formulieren in P L1 Aussagen über eine andere Logik, nennen wir sie MINI. Dies ist eine Implementierung einer Variante des Hilbertkalküls für Aussagenlogik. Die Syntax dieser Logik MINI lasse nur nullstellige Prädikatensymbole und einen Implikationsjunktor IMP zu. Wir betrachten einen Kalkül für MINI mit zwei logischen Axiomen: X IMP (Y IMP X) (X IMP (Y IMP Z)) IMP ((X IMP Y ) IMP (X IMP Z)) und der einzigen Schlussregel Modus Ponens X, (X IMP Y ) Y D.h. der Kalkül arbeitet auf Mengen von Formeln, und fügt entsprechend der Schlussregel Modus ponens neue Formeln hinzu. Allerdings ist diese Schlussregel mit Instanziierung verbunden, so dass diese korrekter lauten sollte: X1 , (X2 IMP Y ) σ(Y ) σ ist allgemeinster Unifikator von X1 , X2 Dabei stehen X1 , X2 , Y, Z jeweils für beliebige MINI-Formeln. Wir wollen zeigen, dass im MINI-Kalkül die Formel (X IMP X) für beliebige MINI-Formeln X aus den Axiomen ableitbar ist. Um die Aussagen über MINI in P L1 zu formulieren, benutzen wir ein P L1 -Prädikatensymbol ableitbar und kodieren den Junktor als ein P L1 Funktionssymbol imp“ (in Präfixschreibweise). Dadurch werden MINI-Formeln ” als P L1 -Terme dargestellt. Der MINI-Kalkül lässt sich dann folgendermaßen durch P L1 -Formeln beschreiben: F1: ∀x, y : ableitbar(imp(x, imp(y, x))) F2: ∀x, y, z : ableitbar(imp(imp(x, imp(y, z)), imp(imp(x, y), imp(x, z)))) F3: ∀x, y : ableitbar(x) ∧ ableitbar(imp(x, y)) =⇒ ableitbar(y) Wir wollen zeigen, dass daraus folgende Formel folgt: B : ∀x : ableitbar(imp(x, x)) Die Klauselform von F 1 ∧ F 2 ∧ F 3 ∧ ¬B ist eine Menge von vier Klauseln, wobei die Variable in ¬B durch eine nullstellige Skolemfunktion, also eine Skolemkonstante c ersetzt ist: Automatische Deduktion, SS 2014, vom 04.04.2014 C1 = C2 = C3 = B = 112 ableitbar(imp(x1 , imp(y1 , x1 ))) ableitbar(imp(imp(x2 , imp(y2 , z2 )), imp(imp(x2 , y2 ), imp(x2 , z2 )))) ¬ableitbar(x3 ), ¬ableitbar(imp(x3 , y3 )), ableitbar(y3 ) ¬ableitbar(imp(c, c)) Im folgenden bezeichne C, n das n-te Literal einer Klausel C, das Kürzel C, n+D, m ` R steht für eine Anwendung der Resolutionsregel mit den entsprechenden Resolutionsliteralen der Elternklauseln C und D und der Resolvente R. Die Variablen jeder Resolvente werden systematisch umbenannt, um Namenskonflikte zu vermeiden.Wir führen folgende Resolutionsableitung durch: C1 + C3, 1{x3 7→ imp(x1 , imp(y1 , x1 ))} ` R10 = ¬ableitbar(imp(imp(x1 , imp(y1, x1 )), y3 )), ableitbar(y3) → R1 = ¬ableitbar(imp(imp(x4 , imp(y4 , x4 )), z4 )), ableitbar(z4) C2 + R1, 1{z4 7→ imp(imp(x4 , y4 ), imp(x4 , x4 )), x2 7→ x4 , y2 7→ y4 , z2 7→ x4 } ` R20 = ableitbar(imp(imp(x4 , y4 ), imp(x4 , x4 ))) → R2 = ableitbar(imp(imp(x5 , y5 ), imp(x5 , x5 ))) R2 + C3, 2{x3 7→ imp(x5 , y5 ), y3 7→ imp(x5 , x5 )} ` R30 = ¬ableitbar(imp(x5 , y5 )), ableitbar(imp(x5 , x5 )) → R3 = ¬ableitbar(imp(x6 , y6 )), ableitbar(imp(x6 , x6 )) C1 + R3, 1{x6 7→ x1 , y6 7→ imp(y1 , x1 )} ` R40 = ableitbar(imp(x1 , x1 )) → R4 = ableitbar(imp(x7 , x7 )) B + R4 ` R5 = 2 5.7 Löschregeln: Subsumtion, Tautologie und Isoliertheit Wenn man einen automatischen Beweiser, der nur mit Resolution und Faktorisierung arbeitet, beobachtet, dann wird man sehr schnell zwei Arten von Redundanzen feststellen: Der Beweiser wird Tautologien ableiten, d.h. Klauseln, die ein Literal positiv und negativ enthalten, z.B. {P, ¬P, . . .}. Diese Klauseln sind in allen Interpretationen wahr und können daher zur Suche des Widerspruchs (leere Klausel) nicht beitragen. Man sollte entweder ihre Entstehung verhindern oder sie wenigstens sofort löschen. Weiterhin wird der Beweiser Klauseln ableiten, die Spezialisierungen von schon vorhandenen Klauseln sind. Z.B. wenn schon {P (x), Q} vorhanden ist, dann ist {P (a), Q} aber auch {P (y), Q, R}, eine Spezialisierung. Alles was man mit diesen (subsumierten) Klauseln machen kann, kann man genausogut oder besser mit der allgemeineren Klausel machen. Daher sollte man subsumierte Klauseln sofort löschen. Es kann auch passieren, dass eine neue abgeleitete Klausel allgemeiner ist als schon vorhandene Klauseln (die neue subsumiert die alte). Pragmatisch gesehen, muss man auch verhindern, dass bereits hergeleitete und hinzugefügte Resolventen (Faktoren) noch einmal hinzugefügt werden. D.h. eine Buchführung kann sinnvoll sein. Automatische Deduktion, SS 2014, vom 04.04.2014 113 Im folgenden wollen wir uns die drei wichtigsten Löschregeln und deren Wirkungsweise anschauen und deren Vollständigkeit im Zusammenhang mit der Resolution zeigen. Definition 5.33 Isoliertes Literal Sei C eine Klauselmenge, D eine Klausel in C und L ein Literal In D. L heißt isoliert, wenn es keine Klausel D0 6= D mit einem Literal L0 in C gibt, so dass L und L0 verschiedenes Vorzeichen haben und L und L0 unifizierbar sind. Die entsprechende Reduktionsregel ist: Definition 5.34 ISOL: Löschregel für isolierte Literale Wenn D eine Klausel aus C ist mit einem isolierten Literal, dann lösche die Klausel D aus C. Der Test, ob ein Literal in einer Klauselmenge isoliert ist, kann in Zeit O(n3 log(n)) durchgeführt werden. Dass diese Regel korrekt ist, kann man mit folgender prozeduralen Argumentation einsehen: Eine Klausel D, die ein isoliertes Literal enthält, kann niemals in einer Resolutionsableitung der leeren Klausel vorkommen, denn dieses Literal kann mittels Resolution nicht mehr entfernt werden und ist deshalb in allen nachfolgenden Resolventen enthalten. Dies gilt auch für eine eventuelle spätere Resolution mit einer Kopie von D. Also kann ein Resolutionsbeweis in der restlichen Klauselmenge gefunden werden. Somit gilt: Satz 5.35 Die Löschregel für isolierte Literale kann zum Resolutionskalkül hinzugenommen werden, ohne die Widerlegungsvollständigkeit zu verlieren. Die Löschregel für isolierte Literale gehört gewissermaßen zur Grundausstattung von Deduktionssystemen auf der Basis von Resolution. Sie kann mögliche Eingabefehler finden und kann Resolventen mit isolierten Literalen wieder entfernen. Der Suchraum wird im allgemeinen jedoch nicht kleiner, denn die Eingabeformeln enthalten normalerweise keine isolierten Literale. Das Löschen von Resolventen mit isolierten Literalen ist noch nicht ausreichend. Denn ein nachfolgender Resolutionsschritt könnte genau denselben Resolutionsschritt noch einmal machen. Das Klauselgraphverfahren z.B.hat diese Schwächen nicht. Beispiel 5.36 Betrachte die Klauselmenge C1 : C2 : C3 : C4 : P (a) P (b) ¬Q(b) ¬P (x), Q(x) Diese Klauselmenge ist unerfüllbar. Am Anfang gibt es keine isolierten Literale. Resolviert man C1 + C4 so erhält man die Resolvente {Q(a)}. Das einzige Literal ist isoliert. Somit kann diese Resolvente gleich wieder gelöscht werden. D.h. dieser Versuch war eine Sackgasse in der Suche. Automatische Deduktion, SS 2014, vom 04.04.2014 114 Eine weitere mögliche Redundanz ist die Subsumtion Definition 5.37 Seien D und E Klauseln. Wir sagen dass D die Klausel E subsumiert, wenn es eine Substitution σ gibt, so dass σ(D) ⊆ E D subsumiert E wenn D eine Teilmenge von E ist oder allgemeiner als eine Teilmenge von E ist. Zum Beispiel {P (x)} subsumiert {P (a), P (b), Q(y)}. Dass eine Klausel E, die von D subsumiert wird, redundant ist, kann man sich folgendermaßen klarmachen: Wenn eine Resolutionsableitung der leeren Klausel irgendwann E benutzt, dann müssen in nachfolgenden Resolutionsschritten die überflüssigen“ Literale wie” der wegresolviert werden. Hätte man statt dessen D benutzt, wären diese extra Schritte überflüssig. Die entsprechende Reduktionsregel ist: Definition 5.38 SUBS: Löschregel für subsumierte Klauseln Wenn D und E Klauseln aus C sind, D subsumiert E und E hat nicht weniger Literale als D, dann lösche die Klausel E aus C . Beispiel 5.39 • P subsumiert {P, S}. • {Q(x), R(x)} subsumiert {R(a), S, Q(a)} • {E(a, x), E(x, a)} subsumiert {E(a, a)} D.h eine Klausel subsumiert einen ihren Faktoren. In diesem Fall wird nicht gelöscht. • {¬P (x), P (f (x))} impliziert {¬P (x), P (f (f (x))} aber subsumiert nicht. Die Subsumtionslöschregel unterscheidet man manchmal noch nach Vorwärtsund Rückwärtsanwendung. Vorwärtsanwendung bedeutet, dass man gerade neu erzeugte Klauseln, die subsumiert werden, löscht. Rückwärtsanwendung bedeutet, dass man alte Klauseln löscht, die von gerade erzeugten Klausel subsumiert werden. Die Bedingung, dass D nicht weniger Literale als C haben muss, verhindert, dass Elternklauseln ihre Faktoren subsumieren. Die Einschränkung auf das syntaktische Kriterium θ(C) ⊆ D für Subsumtion ist zunächst mal pragmatischer Natur. Es ist nämlich so, dass man die allgemeine Implikation, C =⇒ D, nicht immer entscheiden kann. Selbst wenn man es entscheiden könnte, wäre es nicht immer geschickt, solche Klauseln zu löschen. Z.B. folgt die Klausel {¬P (x), P (f (f (f (f (f (x))))))} aus der Klausel {¬P (x), P f (x))}. Um eine Widerlegung mit den beiden unären Klauseln P (a) und ¬P (f (f (f (f (f (a)))))) zu finden, benötigt man mit der ersten Klausel gerade zwei Resolutionsschritte, während man mit der zweiten Klausel 6 Resolutionsschritte benötigt. Würde man die implizierte Klausel löschen, würde der Beweis also viel länger werden. Ein praktisches Problem bei der Löschung subsumierter Klauseln ist, dass der Test, ob eine Klausel C eine andere subsumiert, N P-vollständig ist. Die Komplexität steckt in den Permutationen der Literale beim Subsumtionstest. In der Automatische Deduktion, SS 2014, vom 04.04.2014 115 Praxis macht das keine Schwierigkeiten, da man entweder die Länge der Klauseln für die Subsumtion testet, beschränken kann, oder den Subsumtionstest unvollständig ausführet, indem man nicht alle möglichen Permutationen von Literalen mit gleichem Prädikat ausprobiert. Um zu zeigen, dass man gefahrlos subsumierte Klauseln löschen kann, d.h. dass man Subsumtion zu einem Resolutionsbeweiser hinzufügen kann ohne dass die Widerlegungsvollständigkeit verlorengeht, zeigen wir zunächst ein Lemma. Lemma 5.40 Seien D, E Klauseln in der Klauselmenge C, so dass D die Klausel E subsumiert. Dann wird jede Resolvente und jeder Faktor von E von einer Klausel subsumiert, die ableitbar ist, ohne E zu verwenden, wobei statt E die Klausel D oder Faktoren von D verwendet werden. Beweis. Faktoren von E werden offensichtlich von D subsumiert. Seien E = {K} ∪ ER und F = {M } ∪ FR , wobei K und M komplementäre Literale sind und sei R := τ ER ∪ τ FR die Resolvente. Sei σ(D) ⊆ E. 1. σ(D) ⊆ ER . Dann ist τ σ(D) ⊆ FR , d.h. D subsumiert die Resolvente R. 2. D = {L} ∪ DR , σDR ⊆ ER und σ(L) = K Die Resolvente von D mit F auf den Literalen L, M und dem allgemeinsten Unifikator µ ist dann µDR ∪ µFR . Sei τ 0 die Substitution, die auf E wie τ σ wirkt und auf F wie τ . Diese Definition ist möglich durch Abänderung auf Variablen, da wir stets annehmen, dass verschiedene Klauseln variablendisjunkt sind. Da µ allgemeinst ist, gibt es eine Substitution λ mit λµ = τ 0 . Dann ist λµDR ∪ λµFR = τ σDR ∪ τ FR ⊆ τ ER ∪ τ FR . Also wird die Resolvente Rvon E und F subsumiert von einer Resolvente von D und F . 3. σDR ⊆ E aber nicht σDR ⊆ ER . 0 und σLi = σL = K. Mit einer ArguDann ist DR = {L1 , . . . , Lm } ∪ DR mentation ähnlich zu der in Fall 1 sieht man, dass es einen Faktor D0 von D gibt, der L und alle Li verschmilzt und immer noch E subsumiert. Auf diesen kann dann Fall 1 angewendet werden. 2 Satz 5.41 Der Resolutionskalkül zusammen mit der Löschung subsumierter Klauseln ist widerlegungsvollständig. Beweis. Induktion nach der Länge einer Resolutionsableitung mit Lemma 5.40 als Induktionsschritt und der Tatsache, dass die einzige Klausel, die die leere Klausel subsumiert, selbst nur die leere Klausel sein kann, liefert die Behauptung. 2 Definition 5.42 Sei D eine Klausel. Wir sagen dass D eine Tautologie ist, wenn D in allen Interpretationen wahr ist. Automatische Deduktion, SS 2014, vom 04.04.2014 116 Beispiele für Tautologien sind {P a, ¬P a}, {Qa, P (f (x)), ¬P (f (x), Qb} oder {P x, ¬P x}. Keine Tautologien sind {P x, ¬P f (y)} und {¬P (x, y), P (y, x)}. Ein syntaktisches Kriterium zur Erkennung von tautologischen Klauseln ist der Test, ob zwei komplementäre Literale L, L0 enthalten sind mit gleichen Atomen. (siehe Beispiel 4.16). Dieser Test ist für die ganze Klauselmenge nach einer groben Abschätzung in Zeit O(n3 ) durchführbar. Eine genauere Analyse zeigt, dass der Test auch schon O(n2 ) durchführbar: Nimmt man das erste Literal L einer Klausel C und prft ob diese nochmal in C vorkommt, so braucht man fr jedes andere Literal L0 : maximal c|L0 | Zeit. Summiert man, dann ist das maximal c|C|. Das muss man fr jedes Literal machen, also maximal c|C|2 . Fr alle Klauseln summiert, ergibt das cΣ|Ci |2 , was kleiner als c|CS| ist. Hierbei ist jeweils die Gesamtgröße der Klauseln bzw. Klauselmenge gemeint. Also O(n2 ). Die entsprechende Reduktionsregel ist: Definition 5.43 TAUT: Löschregel für tautologische Klauseln Wenn D eine tautologische Klausel aus der Klauselmenge C ist, dann lösche die Klausel D aus C. Da tautologische Klauseln in allen Interpretationen wahr sind, ist die Löschung von Tautologien unerheblich für die Unerfüllbarkeit. Satz 5.44 Die Löschregel für tautologische Klauseln ist widerlegungsvollständig. Beweis. Hierzu zeigt man, dass ein Beweis, der eine tautologische Klausel benutzt, verkürzt werden kann: Sei C = C1 ∨ L ∨ ¬L eine tautologische Klausel, die im Beweis benutzt wird. Sei D = D1 ∨ L0 die Klausel, mit der als nächstes resolviert wird. Wir können annehmen, dass L0 und ¬L komplementär sind mit allgemeinstem Unifikator σ. Das Resultat ist σ(C1 ∨ L ∨ D1 ). Diese Resolvente wird von D subsumiert. Mit Lemma 5.40 können wir den Resolutionsbeweis verkürzen, indem D statt dieser Resolvente genommen wird. Mit Induktion können so alle Tautologien aus einer Resolutionsherleitung der leeren Klausel eliminiert werden. 2 Es gilt: Satz 5.45 Der Resolutionskalkül zusammen mit Löschung subsumierter Klauseln, Löschung von Klauseln mit isolierten Literalen und Löschung von Tautologien ist widerlegungsvollständig. Die Löschung von subsumierten Klauseln kann sehr zur Verkleinerung von Suchräumen beitragen. Umgekehrt kann das Abschalten der Subsumtionsregel einen Beweis dadurch praktisch unmöglich machen, dass mehr als 99% aller abgeleiteten Resolventen subsumierte Klauseln sind. Es gibt noch verschiedene destruktive Operationen auf der Menge der Klauseln, die als Zusammensetzung von Resolution, Faktorisierung und Subsumtion verstanden werden können. Zum Beispiel gibt es den Fall, dass ein Faktor eine Elternklausel subsumiert, wie in {P (x, x), P (x, y)}. Faktorisierung zu {P (x, x)} und anschließende Subsumtionslöschung kann man dann sehen als Ersetzen der ursprünglichen Klausel Automatische Deduktion, SS 2014, vom 04.04.2014 117 durch den Faktor. Diese Operation wird auch Subsumtionsresolution genannt. Die Prozedur von Davis und Putnam (siehe Abschnitt 2.7) zum Entscheiden der Unerfüllbarkeit von aussagenlogische Klauselmengen kann man jetzt leicht aus Resolution, Subsumtionsregel, Isolationsregel und Fallunterscheidung zusammenbauen. Automatische Deduktion, SS 2014, vom 04.04.2014 6 118 Einschränkung und Varianten der Resolution Der Resolutionskalkül hat durch die Verwendung allgemeinster Unifikatoren den Vorteil, dass die Verzweigungsrate im Suchraum endlich ist, d.h. für jede Klauselmenge gibt es nur endlich viele, und i.a. nicht allzu viele Möglichkeiten, Resolventen abzuleiten. Um einen wirklich guten Resolutionsbeweiser zu implmentieren und dann bereitszustellen, muss man noch viel mehr Redundanzen eliminieren und Strategien hinzufügen, die alle syntaktischen und semantischen Hilfestellungen ausnutzen. 6.1 Set-of-Support Die am meisten benutzte und oft sehr wirkungsvolle Restriktionsstrategie ist Set-of-Support. Dazu teilt man die Klauselmenge auf in die Klauseln, die aus den Voraussetzungen entstanden sind, und die Klauseln, die von der negierten Behauptung stammen. Man geht davon aus, dass die Voraussetzungen nicht selbst bereits widersprüchlich sind und deshalb ein Widerspruch nur unter Beteiligung der Behauptung erzielt werden kann. Die Restriktion verbietet deshalb die Erzeugung von Resolventen zwischen zwei Voraussetzungs-Klauseln. Wenn im Beispiel {P, Q}, {¬P, Q}, {P, ¬Q}, {¬P, ¬Q} die Klausel {P, Q} als Set-of-Support definiert ist, dann darf man nicht innerhalb der restlichen Klauselmenge resolvieren. Im allgemeinen hat man die Axiome A1 , . . . An und einen Satz der Form B1 ∧ . . . ∧ Bn =⇒ F . Wenn Bi , F Literale sind, dann ist in der Klauselform nur ¬F im set-of-support. Die Resolution mit SOS kann also nur damit anfangen zu schließen. Die Einschränkung ist am Anfang einer Beweissuche mittels Resolution sehr wirksam. Allerdings vergrößert sich die SOS-Menge nach einigen Resolutionsschritten, so dass die Wirkung nachläßt. Etwas allgemeiner kann man die Klauselmenge, gegeben eine Struktur S in die Menge der Klauseln aufteilen, die von S erfüllt werden, und das Komplement. Ein Widerspruch kann nicht entstehen, wenn zwischen in S gültigen Klauseln resolviert wird. 6.2 UR-Resolution Bei der UR-Resolution (englisch: unit resulting resolution) wird jeweils eine Klausel mit n + 1 Literalen, der sogenannte Nukleus“, simultan mit n unären ” Klauseln resolviert, so dass eine neue unäre Klausel entsteht. Seien beispielsweise folgende Klauseln gegeben: C1 C2 C3 {¬P (x, y), ¬P (y, z), P (x, z)} {P (a, b)} {P (b, c)} Damit sind u.a. folgende Resolutionsschritte möglich: 119 Automatische Deduktion, SS 2014, vom 04.04.2014 C1, 1 + C2 R1, 1 + C3 ` ` R1 = {¬P (b, z), P (a, z)} R2 = {P (a, c)} Die zweite Resolvente entsteht aber auch mit einer anderen Ableitung, die sich nur durch eine unwesentliche Vertauschung der Reihenfolge der Schritte von der ersten unterscheidet: C1, 2 + C3 R1, 1 + C2 {R10 = ¬P (x, b), P (x, c)} R2 = {P (a, c)} ` ` L1 resolvierbar simultaner Unifikator σ resolvierbar Die UR-Resolution faßt die beiden Schritte so zusammen, dass R2 unmittelbar abgeleitet wird und die Reihenfolge der Schritte keine Rolle mehr spielt. Das allgemeine Schema für UR-Resolution sieht in graphischer Darstellung folgendermaßen aus: Unit ... K1 Kn Klauseln ... Ln Ln+1 Nukleus Ln+1 URResolvente Diese Darstellung verdeutlicht, dass die unären Klauseln in der Ausgangssituation gleichberechtigt sind, und dass daher die Reihenfolge, in der sie bearbeitet werden, keine Auswirkung auf das endgültige Resultat haben sollte. Der gemeinsame Unifikator wird berechnet, indem man durch Aneinanderhängen der Termlisten der unären Klauseln und der Termlisten der Partnerliterale im Nukleus zwei große Termlisten bildet und diese ganz normal unifiziert. Im Transitivitätsbeispiel von oben sind die beiden Termlisten (x, y, y, z) und (a, b, b, c). Deren Unifikator ist {x 7→ a, y 7→ b, z 7→ c}. Es gibt allerdings auch effizientere Methoden. Die Wirkung der UR-Resolution ist nicht nur, dass von der Reihenfolge der n unären Resolutionsschritte abstrahiert wird. Obendrein werden die als Zwischenergebnisse anfallenden n − 1 Klauseln gar nicht erzeugt, im obigen Beispiel würden also R1 oder R10 nicht in die Klauselmenge eingefügt. Da es dafür zunächst keinen Grund gibt, jedenfalls nicht mit irgendeiner gängigen Reduktionsregel, entspricht die UR-Resolution genaugenommen sogar einer ganz neuen Schlussregel, für die wieder dieselben Eigenschaften gezeigt werden müssen wie für die Resolutionsregel. 120 Automatische Deduktion, SS 2014, vom 04.04.2014 Die UR-Resolution ist korrekt, da sie immer das gleiche Ergebnis liefert wie eine entsprechende Folge von normalen Resolutionen. Sie ist nicht widerlegungsvollständig wie die folgende unerfüllbare Klauselmenge zeigt: {{P, Q}, {P, ¬Q}, {¬P, ¬Q}, {¬P, ¬Q}} Diese Klauselmenge enthält überhaupt keine unären Klauseln und kann damit nicht mit UR-Resolution widerlegt werden. Für eine eingeschränkte Klasse von Klauseln ist sie jedoch widerlegungsvollständig, und zwar für die sogenannten unär widerlegbare Klauselmengen. Diese Klauselmengen kann man widerlegen, indem man die Resolution dahingehend einschränkt, dass man fordert, dass eine der beteiligten Elternklauseln immer eine unäre Klausel ist, d.h. aus einem Literal besteht. Es gibt (bis jetzt) keine geeignete syntaktische Charakterisierung dieser Eigenschaft. Eine wichtige Unterklasse der unär widerlegbaren Klauselmengen sind Mengen von Hornklauseln, die in dieser Vorlesung noch behandelt werden. Erinnerung: Eine Hornklausel ist eine Klausel mit maximal einem positiven Literal. Eine Hornklauselmenge ist eine Klauselmenge die nur aus Hornklauseln besteht. Beispiel 6.1 UR-Resolution zur Aktionsplanung Typische Blockswelt“: ” initial state B A 1 goal state 2 1 A B 2 Gesucht ist eine Aktionsfolge, die den initialen Zustand in den Zielzustand transformiert. Axiomatisierung des Problems: Es wird verwendet: • at(z, x, l): im Zustand z ist Block x auf Position l. • on(z, x, y): im Zustand z ist Block x auf Block y. • cl(z, x): im Zustand z ist Block x frei. • M (x, l): Block x geht nach Position l. • n(x, y): Zustand nach Aktion y vom Zustand x aus. • Konstanten: S: Startzustand, A, B: Bausteine. Automatische Deduktion, SS 2014, vom 04.04.2014 121 Allgemeine Regel: C1 : 1 6= 2 Ausgangszustand: C2 : at(S, A, 1) C3 : at(S, B, 1) C4 : cl(S, B) C5 : on(S, B, A) Axiomatisierung der Aktion M (x, l) : C6 : ∀s, x, l : (cl(s, x) =⇒ at(n(s, M (x, l)), x, l)) C7 : ∀s, x, y, l1 , l2 : (on(s, x, y) ∧ at(s, x, l1 ) ∧ l1 6= l2 =⇒ cl(n(s, M (x, l2 )), y)) C8 : ∀s, x, y, l(at(s, x, l) =⇒ at(n(s, M (y, l)), x, l)) Ziel: ∃z(at(z, A, 2) ∧ at(z, B, 2)) Klauselform: C1 : C2 : C3 : C4 : C5 : C6 : C7 : C8 : Z: 1 6= 2 at(S, A, 1) at(S, B, 1) cl(S, B) on(S, B, A) ¬cl(s, x), at(n(s, M (x, l)), x, l) ¬on(s, x, y), ¬at(s, x, l1), l1 = l2, cl(n(s, M (x, l)), y) ¬at(s, x, l), at(n(s, M (y, l)), x, l) ¬at(z, A, 2), ¬at(z, B, 2) UR-Resolutionsfolge: C6 + C4 ` C7 + C5, C2, C1 ` C6 + R2 ` C8 + R1 ` Z + R3, R4 ` R1 : at(n(S, M (B, l)), B, l) {s 7→ S, x 7→ B} R2 : cl(n(S, M (B, 2)), A) {s 7→ S, x 7→ B, y 7→ A, l1 7→ 1, l2 7→ 2} R3 : at(n(n(S, M (B, 2)), M (A, l)), A, l) {s 7→ n(S, M (B, 2)), x 7→ B} R4 : at(n(n(S, M (B, l)), M (y, l)), B, l) {s 7→ n(S, M (B, l)), x 7→ B} R5 : 2 {l 7→ 2, z 7→ n(n(S, M (B, 2)), M (A, 2))} Die gesuchte Aktionsfolge ist also M (B, 2)M (A, 2). 122 Automatische Deduktion, SS 2014, vom 04.04.2014 6.3 Hyperresolution Die Hyperresolution kann man als Verallgemeinerung der UR-Resolution ansehen. Sie wurde ebenfalls von John Alan Robinson entworfen und wird durch folgendes Schema beschrieben: R1 −K1 . . . Rn −Kn Elektronen simultaner Unifikator σ +L1 . . . σ( R1 . . . +Ln −Ln+1 ... Rn −Ln+1 . . . −Ln+m −Ln+m ) Nukleus HyperResolvente Als Nukleus“ dient eine Klausel, die mindestens ein positives Literal enthält. ” Solche Klauseln gibt es in unerfüllbaren Klauselmengen immer. Für jedes positive Literal des Nukleus benötigt man ein sogenanntes Elektron“, eine Klausel ” mit nur negativen Literalen. Rein negative Klauseln kommen in unerfüllbaren Klauselmengen ebenfalls immer vor. Der Nukleus wird wieder simultan mit allen Elektronen resolviert, wodurch eine rein negative Klausel entsteht, die wiederum als Elektron im nächsten Hyperresolutionsschritt dienen kann. Die rein negativen Klauseln übernehmen hier also die gleiche Rolle wie die unären Klauseln in der UR-Resolution. Dual zu dieser sogenannten negativen Hyperresolution definiert man die positive Hyperresolution, bei der die Vorzeichen der Literale in Nukleus und Elektronen gerade vertauscht sind. Da im Normalfall eine negierte Behauptung nur negative Literale enthält und damit als Elektron für negative Hyperresolution verwendbar ist, eignet sich diese für Rückwärtsschließen von der Behauptung in Richtung Voraussetzungen, während positive Hyperresolution gerade umgekehrt von den Voraussetzungen in Richtung auf die Behauptung arbeiten kann. Beide Varianten der Hyperresolution (mit eingebauter Faktorisierung) sind widerlegungsvollständig für beliebige Klauselmengen. 6.4 Input-Resolution und Unäre Resolution Unäre Resolution (englisch unit resolution) verbietet die Erzeugung von Resolventen zwischen zwei Elternklauseln, wenn beide mehr als ein Literal enthalten. Positiv formuliert muss also jede Resolvente mindestens eine unäre Elternklausel besitzen. Faktorisierung ist ebenfalls erlaubt. Diese Restriktion schränkt die möglichen Nachfolgezustände einer Klauselmenge stark ein, führt außerdem stets zu Resolventen mit weniger Literalen als sie die längere Elternklausel besitzt. Sie ist die Basisvariante zur UR-Resolution. Beispiel 6.2 ( Unäre Resolution) Wir widerlegen die Klauselmenge {{P (a)}, {¬P (x), P (f (x))}, {¬P (f (f (f (f (a)))))}}, 123 Automatische Deduktion, SS 2014, vom 04.04.2014 einmal mit unärer Resolution und dann ohne eine feste Strategie. Zur Darstellung benutzen wir einen sogenannten Widerlegungsbaum, bei dem jeder Knoten genau die beiden Elternklauseln als Vorgänger hat. Die Wurzel (diesmal wirklich unten) ist die leere Klausel. Widerlegungsbäume mit unärer Resolution P (a) ¬P (x); P (f (x)) hh q hhhh qqzz thhhh qqqqzzz P (f (a)) qq zz qqq zzz q q xqq zzz P (f (f (a))) zzz zz }zz P (f (f (f (a)))) P (f (f (f (f (a)))) mit allgemeiner Resolution ¬P (x); P (f (x)) ggggg gs gggg ¬P (x); P (f (f (x)) ¬P (x); P (f (x) ¬P (x); P (f (f (x)) ggggg gs gggg gg P (a) ggggg g g g g gs gg ¬P (x); P (f (f (f (f (x)))) ¬P (f (f (f (f (a)))) P (f (f (f (f (a)))) ¬P (f (f (f (f (a)))) f fffff fs fffffff 2 ggggg sggggggg 2 Wie man sieht, ist die unäre Widerlegung länger als die uneingeschränkte. Man kann das Beispiel leicht erweitern, so dass man sieht, dass die unäre Widerlegung exponentiell länger ist. Das bedeutet aber nicht, dass der Suchraum auch exponentiell größer ist, im Gegenteil: meist ist der Suchraum erheblich viel kleiner. Die unäre Resolution ist im allgemeinen nicht widerlegungsvollständig, das heißt, die leere Klausel ist mit dieser Strategie nicht von allen unerfüllbaren Klauselmengen aus ableitbar. Immerhin ist die Widerlegungsvollständigkeit für eine wichtige Klasse von Klauselmengen gewährleistet, die die Klasse der Hornklauselmengen umfaßt und die man mangels einer syntaktischen Charakterisierung die unär widerlegbare Klasse nennt. 6.5 Eingabe-Resolution Für die Klasse der unär widerlegbaren Klauselmengen ist auch eine andere wichtige Restriktionsstrategie widerlegungsvollständig, die Eingaberesolution (englisch input resolution). Diese verbietet die Erzeugung von Resolventen, deren Elternklauseln beide Resolventen sind. Positiv formuliert muss also jede Resolvente wenigstens eine Elternklausel aus der initialen Klauselmenge besitzen. Der wesentliche Vorteil dieser Restriktion besteht daran, dass von allen möglichen Resolutionsschritten ein Resolutionsliteral a priori bekannt ist. Faktorisierung ist ebenfalls erlaubt. Insbesondere treten damit nur Unifikationen zwischen jeweils einem beliebigen und einem a priori bekannten Term auf, so dass man für jeden dieser bekannten Terme aus den initialen Klauseln einen speziellen 124 Automatische Deduktion, SS 2014, vom 04.04.2014 Unifikationsalgorithmus kompilieren“ kann. Dieser ist in der Regel wesentlich ” effizienter als einer, der zwei beliebige Terme unifizieren können muss. Es gilt: Eine Klauselmenge ist genau dann mit unärer Resolution widerlegbar, wenn sie mit Inputresolution widerlegbar ist. In diesem Sinne sind beide Strategien gleichwertig. 6.6 Lineare Resolution Es gibt eine Reihe von Restriktionsstrategien, die die Grundidee der Eingaberesolution möglichst weitgehend erhalten wollen, aber widerlegungsvollständig für beliebige Klauselmengen sind. Die meisten basieren auf der linearen Resolution. Man arbeitet immer mit einer aktuellen Klausel, der Zentralklausel. Resolution mit Eingabe-Klauseln ist erlaubt, ebenso Faktorisierung, wobei diese auch implizit sein kann. Außerdem werden Resolutionsschritte zwischen zwei Resolventen in den Fällen zugelassen, in denen eine ein Vorgänger“ der anderen ist. ” Beispiel 6.3 Lineare Resolution Wir widerlegen die Klauselmenge {P, Q}, {¬P, Q}, {P, ¬Q}, {¬P, ¬Q}, einmal mit linearer Resolution und einmal mit allgemeiner Resolution: lineare Resolution allgemeine Resolution mit Vorgängerschritt ¬QP ¬P Q P ¬Q¬P Q ¬P PQ P Q= == ¬QP }} } ~} P QQQ QQQ QQQ ( ¬P QD DDD " 2 l ¬P lll l l lu ll ¬P ¬Q w w w {w 2 Beispiel 6.4 Folgendes Beispiel zeigt, dass man Faktorisierung braucht. Die Klauselmenge sei {{P (x), P (y)}, {¬P (x), ¬P (y)}}. Lineare Resolution ohne Faktorisierung ergibt immer eine Zentralklausel der Länge zwei, wobei auch keine automatische Verschmelzung auftritt. Durch Verschärfungen dieser Bedingung sowie durch Beschränkungen für die als Resolutionsliterale zulässigen Literale einer Klausel ergeben sich verschiedene Varianten der linearen Resolution, zum Beispiel die sogenannte SL-Resolution . Automatische Deduktion, SS 2014, vom 04.04.2014 6.7 125 SL-Resolution SL-Resolution ist eine Restriktionsstrategie, die i.a. gekoppelt ist mit einer Ordnungsstrategie [KK71]. Die Bedeutung der SL-Resolution liegt darin, dass sie eine prozedurale goal/subgoal“ Sichtweise der Resolution erlaubt. SL-Resolution ” ist die Strategie, die der logischen Programmiersprache PROLOG zugrundeliegt. Im folgenden wird die SL-Resolution für Horn Klauseln behandelt. Im Falle der Hornklauselmengen ist die Faktorisierung nicht notwendig. 6.8 SL-Resolution für Horn Klauseln Angenommen, wir haben eine Menge von initialen Horn Klauseln und eine Ziel” klausel“, d.h. ein negiertes Theorem ohne Kopfliteral. Beginnend mit der Zielklausel als Zentralklausel“ wählt SL-Resolution in jedem Schritt die letzte Re” solvente als neue Zentralklausel und bestimmt die zulässigen Resolutionsschritte wie folgt: Wenn die aktuelle Zentralklausel C = C1 ∨ C2 ist, wobei C2 der Block von Literalen ist, der von der letzten Seitenklausel“ abstammt, wird aus C2 ” ein Literal L ausgewählt und dafür eine Resolvente mit einer passenden Klausel aus der initialen Klauselmenge generiert. Daher resolviert SL-Resolution nur zwischen der letzten Resolvente und den Eingabeklauseln. Darüberhinaus werden diejenigen Literale zuerst wegresolviert, die als letzte in die Klausel hinein kamen. Die Auswahl des Literals in der Zentralklausel durch eine Selektionsfunktion ist deterministisch. Dem liegt die Erkenntnis zugrunde, dass die Reihenfolge, in der man Literale einer Klausel wegresolviert“ unerheblich ist – wenn ” es in einer Reihenfolge nicht geht, geht es auch in keiner anderen. Die Auswahl des Resolutionspartners ist dagegen nichtdeterministisch: eine erfolgreiche Resolutionskette ist ausreichend. Beispiel 6.5 SL-Resolution mit Horn Klauseln Klausel Notation: Prolog Notation: C1: A(x, y) ⇐ P (x, y) A(x, y) ∨ ¬P (x, y) C2: A(x, z) ⇐ P (x, y) ∧ A(y, z) A(x, z) ∨ ¬P (x, y) ∨ ¬A(y, z) C3: P (a, b) C4: P (b, c) C5: P (c, d) Theorem: ∃v : A(a, v) ∧ P (v, d)? Negiertes Theorem: ¬A(a, v) ∨ ¬P (v, d) In den beiden folgenden Bildern wird der Suchraum für dieses Beispiel und für zwei verschiedene Selektionsfunktionen dargestellt. Die Selektionsfunktionen sind: 1. Das am stärksten instanziierte Literal zuerst 2. Das am wenigsten instanziierte Literal zuerst. Die zuletzt eingeführten Literale, die zuerst wegresolviert werden, sind unterstrichen. Da SL-Resolution einen normalen Suchbaum generiert, können die normalen Suchalgorithmen angewendet werden [Nil80]. Zum Beispiel Tiefensuche, 126 Automatische Deduktion, SS 2014, vom 04.04.2014 wie sie in Prolog angewendet wird, hat den Vorteil, dass nur ein Ast zu einer Zeit entwickelt wird. Backtracking zu früheren Zuständen kann leicht durch Stacks implementiert werden. Tiefensuche ist jedoch nicht vollständig wenn der Suchraum unendliche Äste enthält. Bei Breitensuche und bei heuristischer Suche muss man dagegen alle offenen Knoten abspeichern, was sehr aufwendig sein kann. Am meisten instanziierte Literale zuerst: ¬A(a, v); ¬P (v, d) i iiii iiiC1 i i i i ¬P (a, v); ¬P (v, d) v7→b;C3 ¬P (b, d) C2 ¬P (a, y); ¬A(y, v); ¬P (v, d) y7→b;C3 ¬A(b, v); ¬P (v, d) C1 Fehler ¬P (b, v)¬P (v, d) v7→c;C4 ¬P (c, d) C5 Erfolg WWWWW C2 WWWWW WWWW ¬P (b, y 0 ); ¬A(y 0 , v); ¬P (v, d) y 0 7→c;C4 ¬A(c, v); ¬P (v, d) C1 TTTT C2 TTTT TTTT T ¬P (c, v); ¬P (v, d) v7→d;C5 ¬P (d, d) Fehler Rekursion 127 Automatische Deduktion, SS 2014, vom 04.04.2014 Am wenigsten instanziierte Literale zuerst: ¬A(a, v); ¬P (v, d) i iiii iiiC1 i i i i ¬P (a, v); ¬P (v, d) v7→b;C3 ¬P (b, d) Fehler C2 ¬P (a, y); ¬A(y, v); ¬P (v, d) C1 UUUU UUC2 UUUU U ¬P (y, v); ¬P (a, y); ¬P (v, d) 0 0 ¬P ); ¬A(y v); ¬P(y, (a,yy), ¬P (v,,d) KKKTTTT SSS ∞ SSS KKK TTTTT y7→a,v7→b C3 SSS TTTT KKK SSS TTTC5 SS KKC4 TTTT · ¬P (a, a)¬P (b, d)y7→b,v7→cKKK y7→c,v7T TTTT →d KKK TTTT KKK TTTT K T ¬P (a, b); ¬P (c, d) Fehler ¬P (a, c); ¬P (d, d) C3 ¬P (c, d) Fehler C5 Erfolg 7 Tableau Kalkül für P L1 Den aussagenlogischen Tableaukalkül kann man auf PL1 erweitern (siehe [Fit90]). Zu den α (konjunktiven) und β-Formeln (disjunktiven) kommen noch die Quantorformeltypen γ und δ. Bei den α- und β-Formeltypen brauchte man eine Definition der direkten Unterformeln α1 , α2 (bzw. β1 , β2 ). Bei quantifizierten Formeln benötigt man Instanzen der Formeln. All-quantor γ γ(t) ∀x : Φ Φ[t/x] ¬∃x : Φ ¬Φ[t/x] 7.1 Ex-quantor δ δ(t) ∃x : Φ Φ[t/x] ¬∀x : Φ ¬Φ[t/x] Tableau mit Grundtermen Zunächst eine Variante des Tableaukalküls, der mit Grundtermen arbeitet. Im Laufe eines Beweises ist es bei dieser Variante notwendig, neue Konstanten einzuführen. Diese werden auch Parameter genannt. Mindestens eine Konstante wird immer automatisch erzeugt, da wir annehmen, dass Domains nichtleer sind. Die Tableau-Erweiterungsregeln, die für die Prädikatenlogik erster Stufe notwendig werden, sind: 128 Automatische Deduktion, SS 2014, vom 04.04.2014 γ γ(t) δ δ(a) t ist geschlossener Term der Parameter enthalten kann a ist ein neuer Parameter Die Eingabe und die Schließungsregeln sind wie beim aussagenlogischen Tableau. D.h. ein Tableau ist geschlossen, wenn jeder Pfad geschlossen ist, und dies wiederum heißt, dass in jedem Pfad ein Paar direkt komplementärer Literale vorkommt Beispiel 7.1 Im folgenden ein Tableaubeweis der Formel ∀x : (P (x) ∨ Q(x)) =⇒ (∃x : P (x) ∨ ∀x : Q(x)) Auch hier wird, wie beim aussagenlogischen Tableau, mit der Negation der Formel gestartet. ¬ ∀x : (P (x) ∨ Q(x)) =⇒ (∃x : P (x) ∨ ∀x : Q(x)) ∀x : (P (x) ∨ Q(x)) ¬(∃x : P (x) ∨ ∀x : Q(x)) ¬(∃x : P (x)) ¬(∀x : Q(x)) ¬Q(c) ¬P (c) P (c) ∨ Q(c) P (c) | Q(c) δ-Expansion γ-Expansion mit t = c γ-Expansion mit t = c β-Expansion Diese Beweisprozedur terminiert i.a. nicht, im Gegensatz zum aussagenlogischen Tableau, da man für die γ-Formeln beliebige Terme einsetzen kann, und es auch nicht ausreicht, sich auf eine endliche Menge zu beschränken. In dieser Form entspricht der Tableaukalkül der Resolution ohne Unifikation, aber mit Raten von Klauselinstanzen. Beim Tableaukalkül bleibt die Struktur der Formeln erhalten, so dass man ohne Normalform und (zunächst) ohne Skolemisierung auskommt. Aussage 7.2 Das Grund-Tableau-Verfahren für PL1 ist widerlegungsvollständig. Im Falle, dass es nicht terminiert, wird in mindestens einem Pfad ein Modell generiert, sofern Fairnessbedingungen erfüllt sind: Jede Formel muss in jedem Pfad und mit jeder Regel (insbesondere jede γ-Instanz) expandiert werden. Beweis. siehe [Fit90] 2 Die Eigenschaft, dass im Falle der Erfüllbarkeit ein Modell erzeugt wird, ist ein Vorteil gegenüber resolutionsbasierten Methoden. Allerdings ist dies eher theoretisch zu sehen, denn i.a. ist der Pfad dann unendlich lang. 129 Automatische Deduktion, SS 2014, vom 04.04.2014 Eine einfache Heuristik zum Expandieren des Tableaus ist: zuerst α-Regeln, dann β-Regeln, dann δ-Regeln und dann erst die γ-Regeln. Es ist auch erlaubt, Mehrfachexpansion von Formeln auf dem gleichen Pfad zu verhindern. Es ist möglicherweise ausreichend, die δ-Regel pro Formel und Pfad nur einmal zu verwenden. Allerdings gibt es dann immer noch eine Quelle der Nichtterminierung: Jede γ-Formel muss im Prinzip mit jedem Parameter einmal instanziiert werden. Dies kann darauf hinauslaufen, dass man immer mehr Parameter erzeugen muss: Nach Erzeugung eines neuen Parameters d muss eine Formel oben im Tableau unten neu angehängt werden; Diese ergibt nach einigen Schritten eine neue δ-Formel, die einen neuen Parameter erzeugt, usw. 7.2 Tableau mit freien Variablen Um den ausufernden Nichtdeterminismus der γ-Regel zu verhindern, kann man Unifikation ausnutzen, muss dazu aber die Datenstruktur des Tableaus leicht verändern, und freie Variablen zulassen. Gleichzeitig werden statt Parametern Skolemterme bei der Expansion verwendet: γ γ(x) δ δ(f (x1 , . . . , xn )) x ist neue freie Variable f neue Skolemfunktion und x1 , . . . , x n sind alle bisher in diesem Pfad benutzten freien Variablen Definition 7.3 (Instanziierungsregel) Ein Tableau darf verändert werden, indem man eine Substitution σ auf das ganze Tableau anwendet. Hierbei muss die Substitution frei für das Tableau sein. D.h. es werden nur die freien Variablen ersetzt, und die eingesetzten Terme dürfen keine Variablen enthalten, die in den Bindungsbereich eines Quantors geraten (von einem Quantor eingefangen werden). Die Schlussregel ist auch hier, dass nach der Instanziierung alle Pfade ein Paar komplementärer Literale enthalten müssen. Z.B. ist die Substitution {x 7→ f (y)} nicht frei für die Formel ∀y : P (x, f (x), a, z), da das y in f (y) nach der Einsetzung gebunden wäre. Die Instanziierungsregel und die Schlussregel kann man ersetzen durch eine mit Unifikation kombinierte Schlussregel: Definition 7.4 Das Tableau ist geschlossen, wenn es eine Substitution σ gibt (frei für das Tableau), die das Tableau nach Instanziierung im herkömmlichen Sinne schließt. 130 Automatische Deduktion, SS 2014, vom 04.04.2014 D.h. statt einer Instanziierung macht man einen Unifikationsversuch, der einen Unifikator berechnet, der nach Anwendung alle Pfade gleichzeitig schließt. Dafür muss der Unifikationsalgorithmus geeignete Kandidatenliterale verwenden, und diese unifizieren. D.h. hier ist doch noch ein Nichtdeterminismus verborgen, da man auf sehr viele Weisen solche Kandidaten auswählen kann. Beispiel 7.5 Im folgenden ein Tableaubeweis mit freien Variablen für die gleiche Formel wie in Beispiel 7.1 ∀x : (P (x) ∨ Q(x)) =⇒ (∃x : P (x) ∨ ∀x : Q(x)) ¬ ∀x : (P (x) ∨ Q(x)) =⇒ (∃x : P (x) ∨ ∀x : Q(x)) ∀x : (P (x) ∨ Q(x)) ¬(∃x : P (x) ∨ ∀x : Q(x)) ¬(∃x : P (x)) ¬(∀x : Q(x)) ¬Q(a) ¬P (y1 ) P (y2 ) ∨ Q(y2 ) P (y2 ) | Q(y2 ) Geschlossen mit σ = {y1 7→ a, y2 7→ a} δ-Expansion γ-Expansion mit y1 γ-Expansion mit y2 β-Expansion Folgendes Beispiel zeigt, wie ein Modell erzeugt wird: Beispiel 7.6 Betrachte die Formel (∃x : P (x)) =⇒ (∀x : P (x)). Diese ist keine Satz. Versucht man einen Tableaubeweis, so erhält man ein Gegenbeispiel (bzw. ein Modell für die Negation). ¬(∃x : P (x)) =⇒ (∀x : P (x)) ∃x : P (x) ¬(∀x : P (x) P (a) ¬P (b) Das erzeugte Modell hat zwei Elemente: a, b. Die Struktur ist {P (a), ¬P (b)}, und in dieser Struktur ist die obige Formel falsch. Beispiel 7.7 Beweis der Formel (∃w : ∀x : R(x, w, f (x, w))) =⇒ (∃w : ∀x : ∃y : R(x, w, y)) Automatische Deduktion, SS 2014, vom 04.04.2014 (1) (2) (3) (4) (5) (6) (7) (8) 131 ¬ (∃w : ∀x : R(x, w, f (x, w))) =⇒ (∃w : ∀x : ∃y : R(x, w, y)) ∃w : ∀x : R(x, w, f (x, w)) ¬(∃w : ∀x : ∃y : R(x, w, y)) ∀x : R(x, a, f (x, a)) aus (2) mit δ ¬(∀x : ∃y : R(x, v1 , y)) aus (3) mit γ ¬(∃y : R(g(v1 ), v1 , y)) aus (3) mit δ R(v2 , a, f (v2 , a)) aus (4) mit γ ¬(R(g(v1 ), v1 , v3 )) aus (6) mit γ geschlossen mit Unifikator σ = {v1 7→ a, v2 7→ g(a), v3 7→ f (g(a), a)} Die Frage nach der Terminierung und der Anzahl der notwendigen Kopien wird durch folgendes Beispiel illustriert: Beispiel 7.8 Widerlege die Formelmenge {{P (a) ∨ P (b)}, {∀x : ¬P (x)}}. (1) P (a) ∨ P (b) (2) ∀x : ¬P (x) (3) ¬P (y) (4) P (a) | P (b) Dieses Tableau lässt sich nicht schließen, da a 6= b. Erst mit einer weiteren γ-Expansion der Formel ∀x : ¬P (x) auf dem rechten Pfad ist das Tableau geschlossen. Eine Umstellung der Expansionen zeigt aber, dass man in diesem Fall mit einer Expansion pro Pfad auskommt. Vermutlich gilt somit, dass eine γ-Formel, die keine inneren Disjunktionen enthält, nur einmal pro Pfad expandiert werden muss. Beispiel 7.9 Widerlege die Formelmenge {{P (a)}, {¬P (f (f (a)))}, {∀x : P (x) =⇒ P (f (x))}} 132 Automatische Deduktion, SS 2014, vom 04.04.2014 (1) P (a) (2) ¬P (f (f (a))) (3) ∀x : P (x) =⇒ P (f (x)) (4) (5) (6) (7) P (y1 ) =⇒ P (f (y1 )) lll lll l l ll lll ¬P (y1 ) P (f (y1 )) aus (3) P (y2 ) =⇒ P (f (y2 )) aus (3) RRR RRR RRR RRR RR ¬P (y2 ) P (f (y2 )) Das Tableau ist geschlossen mit {y1 7→ a, y2 7→ f (a)}. Man sieht, dass es nicht möglich ist, das Tableau vorher zu schließen bzw. mit nur einer Kopie der Formel ∀x : P (x) =⇒ P (f (x)) pro Pfad. Eine Erweiterung dieses Beispiels zeigt auch, dass man die Anzahl der notwendigen γ-Expansionen pro Pfad im Prinzip nicht begrenzen kann. Aufgrund der Unentscheidbarkeit kann man durch keinen Trick die Tableau-methode in ein Entscheidungsverfahren verwandeln. D.h. es gibt immer eine Regel, die für das Nichtterminieren verantwortlich ist. Die Anzahl der δ-Expansionen kann man auf eine pro Formel und Pfad beschränken. Beschränkt man die Anzahl der erlaubten Kopien pro Formel und Pfad willkürlich von vorneherein durch die sogenannte Q-Tiefe“, dann termi” niert das Verfahren. Die Terminierung kann man wie im aussagenlogischen Fall begründen, wobei man das verwendete Maß leicht variieren muss: • Basis ist das Paar (Anzahl der Quantoren, Größe der Formel). • Pro Pfad die Multimenge der obigen Paare, wobei man für jede Formel mit Quantoren das Paar sooft in die Multimenge einfügt, wie man die Formel noch expandieren kann: (Q-Tiefe − wie oft γ-expandiert). Für α, β, δ-Formeln ist diese Zahl jeweils 1. • Multimenge der Maße aller Pfade. Automatische Deduktion, SS 2014, vom 04.04.2014 133 Unter Beschränkung der Q-Tiefe ist das Verfahren nicht mehr vollständig. Allerdings wird es wieder vollständig, wenn man das Verfahren mehrfach ablaufen lässt mit jeweils größerer Q-Tiefe. Dies ergibt dann ein Semientscheidungsverfahren. Automatische Deduktion, SS 2014, vom 04.04.2014 8 134 DPLL mit Theorien: SMT: Satisfiability modulo Theories SMT- Beweiser (Satisfiability Modulo Theories) sind Erweiterungen der DPLLProzedur für Aussagenlogik, die i.a. die gegebene Klauselmenge in zwei Teile zerlegen: F ∪ T , so dass DPLL auf F arbeitet, und es einen Algorithmus (Solver für T ) bereits gibt, der von der DPLL-Prozedur ab und zu befragt wird, und dann mit den Antworten des T -Solvers weiter fortfährt. I.a. ist die Theorie T und der Solver speziell, so dass man hier effizientere Antworten für den T -Anteil implementieren kann. Dieser Anteil kann auch eine nicht-Aussagenlogik sein, z.B. Prädikatenlogik erster Stufe, so dass man hier eine Kombination von Prozeduren und Logiken hat. 8.1 Algorithmus zu SMT Im folgenden gehen wir davon aus, dass die Formeln der Prädikatenlogik erster Stufe entsprechen, wobei das Gleichheitssymbol ebenfalls erlaubt ist. Wenn das Gleichheitssymbol vorkommt, dann gelten automatisch die Axiome Reflexivität ∀x.x = x Symmetrie ∀x, y.x = y =⇒ y = x Transitivität ∀x, y, z.x = y ∧ y = z =⇒ x = z Kongruenz Für alle in der Signatur vorkommenden Funktionssymbole f (mit Stelligkeit n) das Axiom: ∀x1 , . . . , xn , y1 , . . . , yn : x1 = y1 ∧ . . . ∧ xn = yn =⇒ f (x1 , . . . , xn ) = f (y1 , . . . , yn ). und für alle in der Signatur vorkommenden Prädikatensymbole P (mit Stelligkeit n) das Axiom: ∀x1 , . . . , xn , y1 , . . . , yn : x1 = y1 ∧ . . . ∧ xn = yn ∧ P (x1 , . . . , xn ) =⇒ P (y1 , . . . , yn ). Diese Theorie wird auch EUF (equality with uninterpreted function symbols) genannt. Zuerst einige Definitionen: • Eine Theorie T ist eine Menge von geschlossenen PL1-Formeln. Der deduktive Abschluss von T sind die geschlossenen Formeln F mit T |= F . Normalerweise nimmt man an, dass T konsistent ist, d.h. T 6|= false. • Eine Formel F ist T -erfüllbar, gdw. F ∧T erfüllbar (konsistent) ist im Sinne der PL1. Ansonsten sagt man, dass F T -unerfüllbar ist. Zur Erinnerung: G ist erfüllbar, gdw. wenn es eine Belegung der freien Variablen in G, und eine Interpretation der Symbole in G gibt, so dass G wahr wird. (Hier Automatische Deduktion, SS 2014, vom 04.04.2014 135 wird angenommen, dass es eine endliche Axiomatisierung gibt, bzw. dass T endlich ist.) • Eine partielle Interpretation ist eine Menge M aus geschlossenen Literalen. Hier spricht man ebenfalls von T -konsistent und meint damit die T -Konsistenz der Konjunktion der Literale aus M . • Eine partielle Interpretation M , die T -konsistent ist, ist ein T -Modell einer Formel F , wenn M |= F gilt. D.h. wenn F eine (aussagenlogische) Folgerung aus M ist. • F |=T G gilt gdw. F ∧ ¬G T -unerfüllbar ist. • Zwei Formeln F, G sind T -äquivalent, gdw. F |=T G und G |=T F gilt. • Ein T -Satz (oder T -Lemma, T -Tautologie) ist eine Formel F , für die ∅ |=T F gilt. Das ist das gleiche wie: ¬F ist T -unerfüllbar, bzw. ¬F ∧ T ist unerfüllbar. Das SMT-Problem für eine Theorie T ist die Aufgabe, gegeben eine Formel F , herauszufinden, ob F T -erfüllbar ist bzw. ob F ein T -Modell hat. Eine Annahme, die hierbei gemacht wird, ist folgende: nur Grund-Mengen M werden betrachtet; und nur solche Theorien T , für die die Erfüllbarkeit von endlichen Mengen M von Grundliteralen entscheidbar ist. Jeder Algorithmus, der diese Aufgabe löst, heißt ein T -Solver. 8.2 Direkte SMT-Prozeduren Man kann diese in direkte (eager) und indirekte (lazy) Varianten unterteilen. Die direkte Variante der SMT-Prozeduren geht im wesentlichen so vor, dass die eingegebene Formel F direkt in eine aussagenlogische Formel τ (F ) übersetzt wird, wobei die Theorie in der Übersetzungsmethode implementiert ist. Hierbei muss die Erfüllbarkeit erhalten bleiben. Diese Formel τ (F ) wird dann mit der DPLL-Prozedur gelöst. Vorteil der direkten Methode: Diese kann sofort von verbesserten SAT-Solvern profitieren. Nachteile: Man muss sich sehr diffizile Übersetzungstechniken ausdenken, die normalerweise auch sehr problemspezifisch sind, d.h. nur für eine eng begrenzte Klasse von Formeln bzw. Problemstellungen funktioniert. Außerdem muss man sicherstellen, dass die Übersetzung selbst korrekt ist. Beispiel 8.1 Ein einfaches Beispiel (siehe im Aussagenlogischen Kapitel 2) ist das n-Damen Problem oder der aussagenlogische Sudoku-Löser. Deren Funktionsweise beruht auf einer Spezialübersetzung, die das Problem in eine aussagenlogische Klauselmenge übersetzt. Statt z.B. ∀x, y, z.x 6= y =⇒ Dame(x, z) ⇐⇒ ¬Dame(y, z) die Menge der Grundinstanzen für die Werte x, y, z, in{1, . . . , n} wobei im Standardfall n = 8. 136 Automatische Deduktion, SS 2014, vom 04.04.2014 Dieser Fall ist eine Spezialfall der Methode, aus den Klauseln bzw. Formeln alle notwendigen Instanzen zu bilden (wenn klar ist, dass es nur endlich viele sind) und dann die Grundklauseln aussagenlogisch zu behandeln. Bemerkung 8.2 Historisch gesehen, waren die ersten logischen Beweissysteme alle von dieser direkten (eager) Art: Eine prädikatenlogische Formel (meist Axiome und die Negation eines zu zeigenden Theorems) wurden systematisch instanziiert, d.h. in Grundklauseln übersetzt, und dann mit der DP-Prozedur auf Widersprüchlichkeit geprüft. Die Grundlage war das Herbrand-Theorem, das garantiert, dass man nur endlich viele Grundinstanzen erzeugen muss, wenn es überhaupt einen Nachweis gibt. Allerdings weiß man vorher nicht, wieviele grundinstanzen, und ob das Theorem gilt. Die Unentscheidbarkeit impliziert, dass man a-priori keine obere Schranke für Tiefe der Formeln, Anzahl o.ä. angeben kann. Diese Verfahren waren hochgradig ineffizient, da man (in der Tiefe der Terme) exponentiell viele Instanzen erzeugen musste, von denen mehr als 99% sinnlos waren. Diese Beweismethode wurde dann (ca 1965) abgelöst von Resolution mit Unifikation, die die unnötige Instanzenbildung vermeidet. Durch die seit dieser Zeit sehr viel schnelleren Rechner und durch Fortschritte bei den SAT-Verfahren ist das alte Verfahren wieder (in einigen Anwendungsbereichen) interessant geworden. Aber die Ineffizienzen sind natürlich noch genauso. Das indirekte Verfahren s.u. vermeidet einige dieser Ineffizienzen. 8.3 Indirekte SMT-Prozeduren Im Folgenden soll die indirekte Methode, die den Weg über eine DPLL(T)Variante geht, genauer beschrieben werden, da diese viel flexibler auf neue Theorien reagiert und gemeinsame Techniken schon in der DPLL(X)-Methode implementieren kann. Beispiel 8.3 Ein Beispiel mit Gleichungen. D.h. T sei die Theorie der Gleichungen, siehe oben. Ungleichungen s 6= t sind eine Abkürzung für ¬(s = t). Betrachte die Literale: b = c, f (b) = c, a 6= g(b), g(f (c)) = a Wenn M (in M || F ) diese vier Literale enthält, dann findet der T -Solver heraus, dass M T -unerfüllbar ist, denn b = c, f (b) = c, g(f (c)) = a |= a = g(b) (Das zugehörige Theorie-Verfahren ist das sogenannte congruence-closureVerfahren.) Damit muss die zugehörige SMT-Prozedur zurücksetzen. 8.4 Die Regeln der DPLL(T)-Prozedur Die Erweiterungen zur aussagenlogischen DPLL-Prozedur sind: Es sind Grundliterale statt aussagenlogischer Variablen zulässig. Diese kann man Automatische Deduktion, SS 2014, vom 04.04.2014 137 sehen als (kompliziert aufgebaute) Namen von aussagenlogischen Variablen. Die Regeln Decide, Fail, Restart, UnitPropagate sind unverändert. Folgende Regeln sind die an die Theorie T angepassten: Bei der Backjump-Regel ist der einzige Unterschied zur aussagenlogischen Variante, dass F, C |= C 0 ∨ l0 durch F, C |=T C 0 ∨ l0 ersetzt wurde. T-Backjump : M ld N || F, C =⇒ M l0 || F, C M ld N |= ¬C Es gibt eine Klausel C 0 ∨ l0 mit F, C |=T C 0 ∨ l0 und M |= ¬C 0 l0 ist nicht definiert in M 0 l oder ¬l0 kommen in F oder in M ld N vor T-Learn : M || F =⇒ M || F, C T-Forget : M || F, C =⇒ M || F Jedes Atom aus C kommt in F oder M vor F |=T C wenn F |=T C Ein gute Erklärung zum Vorgehen bei der Restart- Regel ist: Wenn man einen Zustand M || F erreicht hat, so dass M alle Literale von F definiert, und alle Klauseln in F wahr macht, dann gibt es folgende Möglichkeiten: • M ist T -erfüllbar. In dem Falle hat man ein T -Modell gefunden. Um das einzusehen, muss man noch argumentieren (siehe [NOT06a]). • M ist T -unerfüllbar. In dem Fall kann man eine möglichst kleine Menge von Literalen {l1 , . . . , ln } ⊆ M finden, so dass ∅ |= ¬l1 ∨ . . . ∨ ¬ln . Diese Klausel kann man dann mittels T-Learn zu F hinzufügen und das DPLLVerfahren neu starten mittels Restart. Eine weitere Regel, die in einigen Implementierungen verwendet wird, und die die gegebene Theorie ausnutzt, ist die TheoryPropagate-Regel TheoryPropagate : M || F =⇒ M l || F M |=T l l oder ¬l kommt in F vor l ist nicht definiert in M Beispiel 8.4 Ein Beispiel zum Zusammenspiel der Regeln zu einer Theorie T : hier ist es die Gleichheitstheorie (EUF). Sei die Klauselmenge F gegeben. so dass mindestens folgende Klauseln in F sind: (1) (2) (3) a=b ∨ g(a) 6= g(b) h(a) = h(c) ∨ p g(a) = g(b) ∨ ¬p Automatische Deduktion, SS 2014, vom 04.04.2014 138 Der Zustand der DPLL-Prozedur sei nach einigen Schritten von der Form M, c = b, f (a) 6= f (b) || F , wobei die weiteren Schritte der Prozedur sind: Schritt Neues Literal in M Grund Decide h(a) 6= h(c) TheoryPropagate a 6= b da h(a) 6= h(c) ∧ c = b |=T a 6= b UnitPropagate g(a) 6= g(b) da a 6= b und wegen Klausel (1) p da h(a) 6= h(c) und wegen Klausel (2) UnitPropagate 0 Der resultierende Zustand M ist: M, c = b, f (a) 6= f (b), h(a) 6= h(c), a 6= b, g(a) 6= g(b), p || F , In diesem Zustand ist die Klausel (3) ein Konflikt. Eine Backjump-Klausel C 0 ∨ l0 , die man erzeugen kann, ist c 6= b ∨ h(a) = h(c). Hierbei ist C 0 = {c 6= b} inkonsistent mit M 0 , und l0 ist h(a) = h(c). Neuer Zustand: M, c = b, f (a) 6= f (b), h(a) = h(c) || F Um die Backjump-Regel genauso verwenden zu können wie im Theorie-freien Fall, muss der T -Solver auch Rechtfertigungen liefern, in dem Sinne, welche Implikationskette von Literalen und Klauseln (auch modulo T ) zum Widerspruch bzw. zum Konflikt geführt hat. 139 Automatische Deduktion, SS 2014, vom 13.06.2014 9 Grammatik-basierte Kompression von Termen und zugehörige Algorithmen Wir betrachten die Methode der Kompression von Termen und als Spezialfall die Kompression von Strings wobei wir die Sichtweise der grammatikbasierten Kompression verwenden. Die Kompressionsmethode auf Strings, die weitverbreitet ist, ist die LempelZiv Kompression. Es gibt Varianten, des Verfahrens bzw der Datenstruktur. Eine Variante liegt dem GIF-Format zugrunde. Um Kompression auf Termen zu verstehen, betrachten wir zuerst die String Kompression. Die Variante Lempel-Ziv-(77) arbeitet auf Strings wie folgt: 9.1 Lempel-Ziv Kompression Die LZ 77 Kompression versucht bereits gelesene Teilfolgen der Eingabe bei wiederholtem Auftreten durch eine Referenz auf die ursprüngliche Teilfolge zu ersetzen. Sei t0 . . . tn der Eingabestring, wobei die Eingabe t0 . . . ti schon verarbeitet sei, d.h. der Algorithmus muss noch den Rest-String ti+1 . . . tn komprimieren. Der Algorithmus geht nun wie folgt vor: Sei ti+1 . . . tm der längste Präfix von ti+1 . . . tn , der bereits als Substring in t0 . . . ti vorkommt. Nehmen wir an, dies sei der String tk . . . tk+m−(i+1) (wobei tp = tq für alle (p, q) ∈ {(i + 1, k), (i + 2, k + 1), . . . , (m, k + m − (i − 1))}). Dann ersetzt der Algorithmus den Präfix ti+1 . . . tm durch das Paar aus Zahlen (k, m − (i + 1)), d.h. er merkt sich statt des Teilstrings ti+1 . . . tm die Referenz auf die schon bekannte Eingabe, wobei das Paar die Anfangsposition und die Länge enthält. Danach fährt er mit der Resteingabe tm+1 . . . tn fort. Für den Fall, dass der Präfix ti+1 . . . tm leer ist (also ein Präfix der Eingabe nicht bereits zu finden ist), speichert der Algorithmus das Symbol ti+1 ab und fährt mit der Resteingabe ti+2 . . . tn fort. Wir betrachten als Beispiel den Text "aabaaabaababaaababbbaabbbbccaaa": Verarbeitete Eingabe a aa aab aabaa aabaaabaa aabaaabaaba aabaaabaababaaaba aabaaabaababaaabab aabaaabaababaaababb aabaaabaababaaababbbaab aabaaabaababaaababbbaabbbb aabaaabaababaaababbbaabbbbc aabaaabaababaaababbbaabbbbcc aabaaabaababaaababbbaabbbbccaaa Resteingabe aabaaabaababaaababbbaabbbbccaaa abaaabaababaaababbbaabbbbccaaa baaabaababaaababbbaabbbbccaaa aaabaababaaababbbaabbbbccaaa abaababaaababbbaabbbbccaaa babaaababbbaabbbbccaaa baaababbbaabbbbccaaa bbbaabbbbccaaa bbaabbbbccaaa baabbbbccaaa bbbccaaa ccaaa caaa aaa Der komprimierte Text lautet somit Ausgabe Erkannter Präfix a (0,1) b (0,2) (1,4) (2,2) (2,6) (2,1) (2,1) (6,4) (17,3) c (26,1) (3,3) ε a ε aa abaa ba baaaba b b baab bbb ε c aaa Automatische Deduktion, SS 2014, vom 13.06.2014 140 a(0,1)b(0,2)(1,4)(2,2)(2,6)(2,1)(2,1)(6,4)(17,3)c(26,1)(3,3). Teilstrings der Länge 1 wurden hierbei auch durch Stringreferenzen dargestellt, was sich jedoch im Grunde nicht lohnt, da das Zeichen vermutlich weniger Platz als die Angabe der beiden Zahlen benötigt. D.h. eine bessere Kodierung wäre vermutlich aab(0,2)(1,4)(2,2)(2,6)bb(6,4)(17,3)cc(3,3). Die Dekomprimierung baut den Text von links nach rechts wieder auf, wobei die bereits erstellte Ausgabe als Suchraum für die noch zu erstellende Ausgabe dient: Komprimierter Reststring aab(0,2)(1,4)(2,2)(2,6)bb(6,4)(17,3)cc(3,3) ab(0,2)(1,4)(2,2)(2,6)bb(6,4)(17,3)cc(3,3) b(0,2)(1,4)(2,2)(2,6)bb(6,4)(17,3)cc(3,3) (0,2)(1,4)(2,2)(2,6)bb(6,4)(17,3)cc(3,3) (1,4)(2,2)(2,6)bb(6,4)(17,3)cc(3,3) (2,2)(2,6)bb(6,4)(17,3)cc(3,3) (2,6)bb(6,4)(17,3)cc(3,3) bb(6,4)(17,3)cc(3,3) b(6,4)(17,3)cc(3,3) (6,4)(17,3)cc(3,3) (17,3)cc(3,3) cc(3,3) c(3,3) (3,3) ε Ausgabe ε a aa aab aabaa aabaaabaa aabaaabaaba aabaaabaababaaaba aabaaabaababaaabab aabaaabaababaaababb aabaaabaababaaababbbaab aabaaabaababaaababbbaabbbb aabaaabaababaaababbbaabbbbc aabaaabaababaaababbbaabbbbcc aabaaabaababaaababbbaabbbbccaaa Es gibt andere Varianten der Kompression, die schneller den Eingabestring verarbeiten, wobei Einschränkungen bei der Suche des Präfixes des Reststrings in bereits verarbeiteten String gemacht werden, zB LZ 78 und LZW. Ein Vorteil von LZ77 ist, dass eine exponentielle Kompressionsrate möglich ist, während bei LZ78 und LZW die Kompression maximal einen quadratischen Kompressionsfaktor hat. Das kann man auch als Generierungsfaktor sehen: LZ77-Daten können exponentiell große Strings erzeugen. LZW-Kompression Nochmal genauer: Das Vorgehen ist folgendermaßen • Es wird ein Wörterbuch angelegt. Das kann man modellieren als Abbildung Ai → string i , i = 1, . . . , n, wobei Ai ein Abkürzungssymbol für den String string i ist. • Genauer: das Dictionary hat auch Querverweise: eigentlich sehen die Einträge so aus: Ai → Aj b, i, j = 1, . . . , n, i > j. • Alle Einzelsymbole betrachtet man am Anfang der Kompression als bereits im Dictionary. • Wenn das Dictionary teilweise aufgebaut ist und r der Reststring ist, der noch zu komprimieren ist, dann wird nach dem größten Anfangs-string von r gesucht, der bereits abgekürzt ist. Wenn das Aj ist, und r = val (Aj )br0 (b ein Symbol, r0 der Reststring), dann wird ein neuer Eintrag An → Aj b erzeugt und dann mit r0 weiter komprimiert. Automatische Deduktion, SS 2014, vom 13.06.2014 141 Eigenschaften: • Das Symbol An kann maximal einen String der p Länge n+1 repräsentieren, also kann man die Eingabe maximal auf O( (|r|)) komprimieren. • Das Verfahren komprimiert aber schneller, da die Suche nach einem passenden Anfangs-Dictionary-Eintrag schneller geht durch geeignete Datenstrukturen. • Das LZ77-Verfahren muss ja im ganzen Anfangsstring nach einem Unterstring suchen. Aber auch das kann man so organisieren, dass es effizient geht, aber es ist doch langsamer als die anderen Verfahren. 9.2 Straight Line Programs (SLP) und Singleton Context Free Grammars (SCFG) Die Kompression mittels LZ77 ist äquivalent zu einer Darstellung des Strings mit einer (kleinen) kontextfreien Grammatik, die pro Nichtterminal genau eine Produktion hat und die keine rekursiven Nichtterminale hat; die rechten Seiten können Aj Ak sein. LZW ist etwas eingeschränkter bei den rechten Seiten: nur rechte Seiten der Form Aj b, Definition 9.1 Sei Σ ein Alphabet. Ein straight line program (SLP) G ist eine kontextfreie Grammatik zu Σ, die zyklenfrei ist, und bei der zu jedem Nichtterminal A genau eine Produktion mit linker Seite A vorhanden ist. Die Produktionen sind nur von der Form: • A → a wobei a ∈ Σ. • A → A1 A2 wobei A, A1 , A2 Nichtterminale Gegeben ein Nichtterminal A, dann bezeichnet val (A) den von A erzeugten String über Σ. Mit val (G) bezeichnet man den vom Startsymbol erzeugten String. Auch hier gibt es Varianten, die weitere Produktionenformate erlauben wie A → A0 , oder A → A1 . . . An . Eine Singleton Context Free Grammars (SCFG) ist nur leicht verschieden von einer SLP: in SCFGs verzichtet man auf ein Startsymbol und betrachtet alle Nichtterminale als Kompressionen eines Strings. 9.3 Ein Verfahren zur Erzeugung einer SLP aus einer LZ77-Kompression Gegeben sei eine Ausgabe des LZ77 Algorithmus (Darstellung wie oben), d.h. ein komprimierter String bestehend aus Zeichen und Referenzen. Wir beschreiben ein Verfahren, das aus dem komprimierten String eine SCFG generiert. Automatische Deduktion, SS 2014, vom 13.06.2014 142 Sei w ein (durch eine Grammatik generiertes) Wort. Wir schreiben w[i] für das Symbol an Position i (Positionen beginnen mit der 0). Bezeichne v ein Symbol, so kann man formal definieren: w[0] = w[i] = v, wenn w = vw0 oder w = v w0 [i − 1], falls i > 0 und w = vw0 Analog schreiben wir w[i, j] für den Substring w[i]w[i + 1] . . . w[j]. Für SCFGs benutzen wir die folgenden Notationen: Für ein Nichtterminal A bezeichne wA das durch A erzeugte (unkomprimierte) Wort. Mit wl(A) bezeichnen wir die Wortlänge von wA . Sei S das Startsymbol der SCFG. Sei xs der LZ77-String. Starte mit der Grammatik G ::= {Aa → a | für alle Zeichen a in xs} ∪ {S → } Das Startsymbol sei S und bezeichne das leere Wort. Berechne nun rekursiv mit GenGrammar eine Grammatik G0 , deren Startsymbol den dekomprimierten String zu xs erzeugt, der Aufruf ist GenGrammar(S, G, ys). GenGrammar(S, G, ys) GenGrammar(S, G, ys) = (S, G), falls ys der leere String ist = GenGrammar(S 0 , G0 , ys0 ) falls ys = a ys0 wobei a ein Zeichen ist, und G0 := G ∪ {S 0 → S Aa } S 0 ein neues Nichtterminal GenGrammar(S, G, ys) = GenGrammar(S 0 , G00 , ys0 ) falls ys = (i, j)ys0 , wobei (A, G0 ) := SubString(i, j, S, G) G00 := G0 ∪ {S 0 → S A} S 0 ein neues Nichtterminal Es fehlt noch die Funktion SubString. Diese erhält neben der Grammatik und dem Startsymbol der Grammatik zwei Zahlen i und j. Die Aufgabe der Funktion ist dabei, die Grammatik umzustrukturieren und ein Nichtterminal A für diese modifizierte Grammatik zu liefern, so dass wA = wS [i]wS [i + 1] . . . wS [i + j − 1] gilt. D.h. das Nichtterminal A erzeugt den j-Zeichen langen Substring von wS beginnend ab Position i. Automatische Deduktion, SS 2014, vom 13.06.2014 SubString(i, j, A, G) 143 = (A, G) falls i = 0 und j = 1 und A → a ∈ G = (A, G) falls i = 0 und wl(A) = j = SubString(i − wl(B), j, C, G) falls wl(B) ≤ i und A → B C ∈ G = SubString(i, j, B, G) falls wl(B) ≥ i + j, und A → B C ∈ G = (A3 , G3 ) falls wl(B) > i und wl(B) < i + j, und A → B C ∈ G (A1 , G1 ) := SubString(i, wl(B) − i, B, G) (A2 , G2 ) := SubString(0, j − (wl(B) − i), C, G1 ) G3 := G2 ∪ {A3 → A1 A2 } A3 neues Nichtterminal Kurze Erläuterung der vier Fälle: 1. Der erste Fall ist der Basisfall, da ein Terminal durch A erzeugt wird, i und j müssen dann genau passen, andernfalls ist irgendwas falsch in der Grammatik, (d.h. i und j haben nicht zur Grammatik gepasst). 2. A erzeugt gerade den gesuchten Substring (eigentlich könnte man Fall 1 und 2 zusammenfassen, da 1 nur ein Spezialfall von 2 ist) 3. A erzeugt wA = wB wC und der gesuchte Substring liegt komplett in wC 4. A erzeugt wA = wB wC und der gesuchte Substring liegt komplett in wB 5. A erzeugt wA = wB wC und der gesuchte Substring liegt in wB und wC : Der Präfix des gesuchten Substring ist ein Suffix von wB und der Suffix des gesuchten Strings ist ein Präfix von wC . Nun muss man zunächst Nichtterminale zu den Teilstrings (am Ende von wB und am Anfang von wC ) rekursiv berechnen, anschließend erzeugt man ein neues Nichtterminal das gerade die beiden Substrings aneinander hängt Anmerkung: Immer wenn die Grammatik modifiziert wird (neue Nichtterminale erzeugt werden), müssen für die neuen Nichtterminale auch die Wortlängen berechnet und gespeichert werden. 9.4 Schnelle Algorithmen auf den SLP Da wir die LZ 77 Variante der Kompression betrachten und damit die SLPs (und SCFGs), kann eine LZ77-Kodierung bzw eine SLP G der Größe n einen String der Länge 2n erzeugen. Damit sind folgende Fragestellungen nach einem schnellen (d.h. polynomiellen) Algorithmus nichttrivial: 1. Gegeben zwei Nichtterminale A1 , A2 in einem SLP. Ist val (A1 ) = val (A2 )? Automatische Deduktion, SS 2014, vom 13.06.2014 144 2. Gegeben zwei Nichtterminale A1 , A2 in einem SLP. Kommt val (A1 ) als Substring von val (A2 ) vor? Gemeint ist hier die Existenz eines Algorithmus, der in polynomieller Zeit in der Größe des SLP läuft. Die erste Frage wurde von Plandowski [Pla94] positiv beantwortet: Es gibt einen solchen Algorithmus, der top-down die Definitionen der beiden Nichtterminale vergleicht. Damit der Algorithmus nur polynomielle Zeit benötigt, muss man ausnutzen, dass man bei dieser Expansion oft sehr ähnliche Fragen stellt und dann Periodizitäten in den Strings erkennen kann, die dazu führen, dass man redundante Subfragen eliminieren kann. (der vollständige Algorithmus ist in der Dissertation von Plandowski beschrieben) Die zweite Frage ist die sogenannte Matching-Frage. Auch diese ist in polynomieller Zeit entscheidbar. Es ist sogar so, dass man eine (komprimierte) Darstellung aller Positionen eines solchen Matchings in polynomieller Zeit ausrechnen kann. Bemerkung 9.2 Hier ein Skizze zum Plandowski-Algorithmus: • Zuerst überzeugt man sich davon, dass Längen von val (A) zu jedem Nichtterminal A einer SLP schnell berechnet werden können. Genauso Positionen usw. • Plandowskis Algorithmus startet mit A =? B als Frage und zerlegt die Nichtterminale sukzessiv, so dass man während des Ablaufs des Algorithmus eine Menge solcher Gleichungsvarianten betrachtet: Genauer: man hat zwei Arten von Gleichungen, sogenannte Tripel. 1. A startet in B an Position n und ist echt enthalten. (Substring) 2. A startet in B an Position n und geht über das Ende von B hinaus. (Präfix) zB A =? B: wenn A → A1 A2 und B → B1 B2 , dann hängt es von den jeweiligen Längen ab, welche Tripel daraus gemacht werden. z.B. wenn val (A1 ) kürzer ist als val (B1 ): in(A1 , B1 , p1 ) und in(B2 , A2 , p2 ). Der Algorithmus erkennt Gleichungen als gelöst, wenn der zu vergleichende Substring die Länge 1 hat, andere Tripel werden weiter zerlegt. Leider kann die Menge der Tripel exponentiell groß werden. Deshalb hat der Algorithmus noch eine weitere Komponente: • Redundanzelimination: Wenn eine Menge von Tripeln ein redundantes Tripel enthält, dann wird das redundante eliminiert. Das passiert, wenn zu zwei Nichtterminalen A, B mehrere Tripel vorhanden sind: zB in(A, B, p1 ), in(A, B, p2 ), . . .. Wenn es ausreichend viele gibt, dann kann man eine Periodizität nachweisen, aus der sich die Redundanz dann berechnen lässt. Automatische Deduktion, SS 2014, vom 13.06.2014 145 • Das führt insgesamt zu einer maximal polynomiell großen Liste, die man mit der richtigen Strategie der Expansion auch in polynomieller Zeit komplett abarbeiten kann: Man muss es top-down in der Grammatik machen. • Als Komplexität findet man O(n4 ) Angaben in der Literatur. Bemerkung 9.3 Es gibt andere Algorithmen-Varianten (Lifshits) die mit Tabellen arbeiten und gleich das allgemeinere Problem des Matching lösen, und die eine bessere worst-case Komplexität haben: O(n3 ): Diese bauen Tabellen von Vorkommen auf, die ebenfalls Periodizitäten ausnutzen. Es gibt auch weitere Fragestellungen, von denen man zeigen kann, dass diese in PTIME berechnet werden können, aber auch einige Fragestellungen, die eine höhere Komplexität als PTIME haben. Ein Beispiel ist das sogenannt Shuffle von zwei Strings: Shuffle von a1 a2 . . . an und b1 , b2 . . . bn ist der String a1 b1 a2 b2 . . . an bn . Frage ist, ob man aus einer SLPKompression von a1 a2 . . . an und von b1 , b2 . . . bn eine polynomiell große SLPKompression des shuffles berechnen kann. Dies ist negativ beantwortet worden: geht nicht immer! 9.5 Kompression von Termen Da Terme auch Bäume (ranked trees) sind, braucht man eine Baumgrammatik um diese zu komprimieren. Eine erste Form der Term-Kompression ist die Verwendung gemeinsamer Unterterme (Sharing): Z.B. der volle binäre Term (Baum) t mit einem zweistelligen Symbol f und einer Konstanten a kann dargestellt werden als: t = f (tn , tn ), tn = f (tn−1 , tn−1 ), . . . t1 = f (t0 , t0 ), t0 = a. Dieser Term, bzw. Baum hat 2n Blätter und 2 ∗ 2n − 1 Knoten. Allgemeiner will man auch Teile von Bäumen wiederverwenden: Zum Beispiel der Term g(g(g(. . . a))) kann durch Verwendung von Teilbäumen komprimiert dargestellt werden: n g 2 (a) kann man als C1 = g([.]), C2 = C1 C1 , . . . Cn = Cn−1 Cn−1 , t = Cn [a] darstellen. Hierbei sind die Ci Terme, die an einer Stelle ein Loch für weitere Einsetzungen haben: sogenannte Term-Kontexte. Nimmt man die Ci als Abkürzung, dann hat man einen Term der Tiefe 2n mit einer komprimierten Darstellung der Größe n. Man kann auch partielle Terme verwenden, die mehrere Löcher haben. Allerdings verwenden wir hier eine Grammatikform, die nur einfache Kontexte verwendet. Ein Mechanismus, der beide Formen der Kompression mischt, sind STGs (singleton tree grammars:) Eine STG ist analog zu einer kontextfreien Grammatik; eigentlich eine kontextfreie Baumgrammatik. Definition 9.4 Eine STG (singleton tree grammar) über einer Signatur von Funktionssymbolen Σ hat mehrere Komponenten: 1. Eine Menge von Term-Nichtterminalen (0-stellig). Notation A, A1 , A2 , . . . 146 Automatische Deduktion, SS 2014, vom 13.06.2014 2. Eine Menge von Kontext-Nichtterminalen (ein-stellig), Notation : C, C1 , C2 , . . . 3. Eine Menge von Produktionen wobei folgende Formen erlaubt sind: (a) A → f (A1 , . . . , An ) wenn f n-stellig ist. (b) A → C[A1 ] (c) C → [·] (der leere Kontext). (d) C → f (A1 , . . . , Ai−1 , [·], Ai+1 , . . . , An ) (e) C → C1 C2 Die Grammatik hat für jedes Nichtterminal genau eine Produktion, und sie darf nicht rekursiv sein. Zu einem Nichtterminal A ist der erzeugte Term val (A) derjenige Term über Σ, der durch iterierte Einsetzung von linken Seiten von Regeln durch deren rechte Seite entsteht. Es gibt auch leicht erweiterte Grammatiken, die weitere Produktionsformate erlauben, wie C → C 0 , A → A0 , Cf (A1 , . . . , Ai−1 , C 0 , Ai+1 , . . . , An ), oder auch solche, bei denen rechte Seiten von Produktionen ganze Terme sein dürfen, wobei auch Nichtterminale vorkommen können. Wenn man keine Kontext-Nichtterminale erlaubt, dann erhält man den Spezialfall eines gerichteten azyklischen Graphen (DAG). Die Nichtterminale entsprechen den Knoten eines gerichteten Graphen. Z.B. der untere gerichtete Graph kann mit einer Grammatik dargestellt werden: Dag-Termdarstellung Grammatik, graphisch Grammatik-Produktionen f " | f " # f a { | A2 | f " 9.5.1 A1 A3 A4 # a A1 A2 A3 A4 A5 → → → → → f (A2 , A2 ) f (A3 , A3 ) f (A4 , A4 ) f (A5 , A5 ) a { Algorithmen auf STG-komprimierten Termen Da man mit den komprimierten Termen in Deduktionssystemen umgehen können muss, braucht man handhabbare Algorithmen, d.h. zumindest worstcase polynomielle. Automatische Deduktion, SS 2014, vom 13.06.2014 147 Erste einfache Algorithmen sind die Berechnung der Tiefe und Größe von Termen anhand der gegebenen Grammatik. Da beides exponentiell groß werden kann in der Größe der Grammatik, darf der Algorithmus nicht einfach die Termstruktur entlanglaufen. Richtig ist, die Struktur der Grammatik zu benutzen im Stile des dynamic programming: Die Berechnung der Tiefe z.B. führt man durch, indem man eine Tabelle berechnet, die jedem Term-Nichtterminal die Tiefe des dargestellten Terms bzw jedem Kontext-Nichtterminal zwei Zahlen zuordnet: die Tiefe ohne das Loch; und die Tiefe des Lochs. Dann berechnet man: 1. A → A1 A2 : Tiefe(A) = max(Tiefe(A1 ), Tiefe(A2 )). 2. A → a: Tiefe(A) = 0 3. A → f (A1 , . . . , An ): Tiefe(A) = 1 + maxi (Tiefe(Ai )). 4. A → C[A1 ]: Tiefe(A) = max(Tiefe(C), LochTiefe(C) + Tiefe(A0 )). 5. C := [·]: Tiefe(C) = LochTiefe(C) = 0. 6. C → f (A1 , . . . , Ai−1 , [·], Ai+1 , . . . , An ): Tiefe(C) = maxi (1 + Tiefe(Ai )), LochTiefe(C) = 1. 7. C → C1 C2 : Tiefe(C) = max(Tiefe(C1 ), Tiefe(CA2 )); LochTiefe(C) = LochTiefe(C1 ) + LochTiefe(C2 ). Als Zusammenfassung: Bemerkung 9.5 Einige einfache Tatsachen und Beobachtungen sind: • Mit einer Dag-Grammatik kann man exponentielle Kompressionsraten erzielen. Aber die Tiefe eines Terms bleibt erhalten. • Mit einer STG kann man exponentielle Kompressionsraten erzielen: das gilt ja schon bei Dags. Aber auch die Tiefe kann mit exponentieller Rate komprimiert werden. • Aber es ist klar, dass es auch unkomprimierbare bzw. fast nicht komprimierbare Terme gibt, sowohl bzgl. DAGs, als auch STGs. • Die Größe und Tiefe von STG-dargestellten Termen lässt sich in Zeit O(n) berechnen (n ist die Größe der STG). • Die Menge der Symbole bzw. Variablen eines STG-dargestellten Terms ist in Zeit O(n) zu berechnen. Es gilt auch, dass es nur maximal n Symbole bzw verschiedene Variablen in einem STG-dargestellten Term gibt. Allerdings kann es exponentiell viele Positionen in einem STG-dargestellten Term geben: genauer bis zu k |G| , wobei k die maximale Stelligkeit der vorkommenden Funktionssymbole ist. Automatische Deduktion, SS 2014, vom 13.06.2014 9.5.2 148 Gleichheitstest Gegeben zwei Nichtterminale einer STG. Dann kann der Gleichheitstest in polynomieller Zeit in der Größe der Grammatik durchgeführt werden. Dies ist eine Anwendung des Plandowski-Algorithmus auf die aus dem Term erzeugte SLP(s), die die Preorder-Durchläufe (von links nach rechts) der zu vergleichenden Terme repräsentieren. 9.5.3 Matching und Unifikation von komprimierten Termen Beide Algorithmen (Matching und Unifikation) können in polynomieller Zeit auf komprimierten Termen durchgeführt werden. Der Algorithmus selbst ist nicht so schwer zu durchschauen, allerdings ist der Beweis der Polynomialität etwas komplexer. Für das Skript beschränken wir uns auf Techniken die im Algorithmus verwendet werden. Matching: Das ist folgendes Problem: Gegeben zwei Terme als Term-Nichtterminale A, B einer STG, wobei A auch Variablen enthält. Finde eine Substitution σ, so dass σ(val (A)) = val (B). Das bedeutet, dass auch Variablen in der Grammatik erlaubt sein müssen. Zum Beispiel der Term t = g(g(. . . g(x) . . .)) mit Tiefe 32 kann komprimiert dargestellt werden als: C1 C2 C3 C4 C5 C6 A1 S := := := := := := := := g([]) C1 C1 C2 C2 C3 C3 C4 C4 C5 C5 x C6 (A1 ) Der Match-Algorithmus zu A, B besteht aus drei Komponenten: 1. Finden der Instanziierung einer Variablen: Dazu muss man die Position einer Variablen in val (A) finden: Da die Position exponentiell groß sein kann als String, muss man die Position komprimiert darstellen: als SLP. Man berechnet also in der STG eine Position einer Variablen (sagen wir mal x), und berechnet direkt eine SLP für diese Position. Gibt es diese Position nicht, dann gibt es keinen Match. Zweiter Schritt ist die Ermittlung des gematchten Unterterms von val (B). Dazu verwendet man die SLP der Position von x und ermittelt einen Unterterm von val (B). Dazu muss man aber i.a. ein neues Nichtterminal (und evtl. weitere) berechnen, die diesen Unterm in der STG darstellen. Automatische Deduktion, SS 2014, vom 13.06.2014 149 2. Instanziierung durch Erweiterung der Grammatik: Angenommen man hat eine Instanziierung x 7→ B1 berechnet, dann kann man val ({x 7→ val (B1 )}t) dadurch darstellen, dass man die Grammatik abändert: man macht x zum Term-Nichtterminal mit der Produktion x → B1 . Evtl. muss man die Schritte 1 und 2 mehrfach durchführen. I.a. so oft, wie es Variablen in val (A) gibt. 3. Der letzte Schritt des Matching-Algorithmus ist eine Anwendung des Gleichheitstests von Plandowski: Einfach die Termgleichheit von val G0 (A) und val (B) testen, wobei G0 die STG nach den Instanziierungen ist. Wir beschreiben die Einzelheiten des Algorithmus: Hier ist immer gemeint: Algorithmen die in polynomieller Zeit ablaufen, und auch im Falle, dass mehrere solche Teilalgorithmen laufen, dass deren Gesamtablauf ebenfalls in polynomieller Zeit abläuft. Das erfordert etwas Vorsicht und natürlich einen Beweis, der aber nur angedeutet wird in einigen Fällen. 9.5.3.1 Finden der Position einer Variablen: 1. Für eine fixierte Variable x berechne eine Tabelle zur STG, die zu jedem Nichtterminal D einen Booleschen Wert enthält, der sagt, ob x in val (D) enthalten ist oder nicht. 2. Berechne eine SLP GA , die für jedes Kontext-Nichtterminal C ein Nichtterminal AC enthält, so dass val (CA ) die Position des Lochs von val (C) ist: (a) Wenn C ::= [·] die Produktion für C ist, dann ist die Produktion AC ::= ε. (b) Wenn C ::= f (A1 , . . . , [·]k , . . .]) die Produktion für C ist, dann ist die Produktion AC ::= k. (c) Wenn C ::= C1 C2 die Produktion für C ist, dann ist die Produktion AC ::= AC1 AC2 . 3. Jetzt berechne ein Nichtterminal für eine Position P von x in val (S): (a) Wenn A ::= f (A1 , . . . , An ) die Produktion für A ist, und x kommt in val (Ak ) vor, dann ist die Produktion PA ::= kPAk . (b) Wenn A ::= C[A1 ] die Produktion für A ist, und x kommt in val (A1 ) vor, dann ist die Produktion PA ::= AC PA1 ; wenn x in C vorkommt und das wird bevorzugt, dann PA ::= PC . (c) Wenn C ::= f (A1 , . . . , [·]k , . . .]) die Produktion für C ist, und x kommt in val (Aj ) vor mit j 6= k, dann ist die Produktion PC ::= jPAj . Automatische Deduktion, SS 2014, vom 13.06.2014 150 (d) Wenn C ::= C1 C2 die Produktion für C ist, und x kommt in C1 vor, dann ist die Produktion PC ::= PC1 . Anderenfalls, wenn x in C2 vorkommt , dann ist die Produktion PC ::= AC1 PC2 . (e) Wenn de Produktion A ::= x ist, dann ist die Produktion PA ::= ε. 9.5.3.2 Finden bzw. Erzeugen eines Nichtterminals der Position einer Variablen: Das Problem hier ist, dass man unter der Position i.a. kein zugeordnetes Nichtterminal finden kann, sondern dass eine gegebene Position auf einen Sub-Term zeigt, der c0 [val (A)] ist, wobei c0 ein Suffix eines Kontexts val (C) ist. Es kann natürlich auch gar keine solche Position geben. Aufgabe: Gegeben ist eine SLP mit Startsymbol P für die Position und eine STG für den Targetbaum mit Start-Nichtterminal T . Ausgabe: Eine Erweiterung von GT so dass es ein Nichtterminal A gibt, so dass val (T ) an der Position val (P ) den Unterterm val (A) hat. Notation: val (T )|val(P ) = val (A). Als Unteraufgaben dazu braucht man (Polynomialzeit-Algorithmen): 1. gegeben eine SLP mit Nichtterminal P und eine Zahl n, berechne den Präfix der Länge n (als Nichtterminal) bzw den Suffix ab Position n, ebenfalls als Nichtterminal. 2. gegeben eine SLP und zwei Nichtterminale P1 , P2 ; berechne den längsten gemeinsamen Präfix von val (P1 ), val (P2 ) als Nichtterminal. Ebenso berechne die verbleibenden Suffixe, ebenfalls als Nichtterminale. Der Positionsfinder Algorithmus: 1. Wenn val (P ) = ε, dann ist ein Nichtterminal gefunden worden. 2. Wenn A ::= f (A1 , . . . , An ) die Produktion ist: Wenn val (P ) als erstes Symbol k hat mit 1 ≤ k ≤ n, dann berechne Nichtterminal P1 mit k · val (P1 ) = val (P ), und mache weiter mit P1 und Ak . Wenn k > n, dann Abbruch: kein Match. 3. Wenn A ::= C[A1 ] die Produktion ist: • Wenn val (P ) echter Präfix der Lochposition ist: Dann ist eine Position gefunden, allerdings muss der passende Präfixkontext noch als Kontext-Nichtterminal konstruiert werden, und dann als letztes das Nichtterminal zum Subterm. • Wenn die Lochposition AC Präfix von val (P ) ist: Dann berechne P1 als Suffix von P so dass val (AC )val (P1 ) = val (P ) und mache weiter mit P1 und A1 . • Wenn weder val (P ) Präfix der Lochposition AC ist, noch umgekehrt, dann kann man den gemeinsamen Präfix P1 und den passenden Suffix P2 von P berechnen; ebenso k und P3 mit val (P2 ) = k · val (P3 ). weiterhin den Kontext C1 an der Position val (P1 ) von val (C). Wenn Automatische Deduktion, SS 2014, vom 13.06.2014 151 C1 = f (A1 , . . . , An ), dann startet die Lochposition nicht mit k. Mache weiter mit P3 und Ak . 4. Resultat: eine erweiterte SLP und ein Nichtterminal R 5. Die Grammatik wird jetzt um die Instanziierung erweitert: x ::= R wird hinzugefügt, und somit val (S) abgeändert. 9.5.3.3 Matching Der Matching- Algorithmus, der ein σ finden soll mit σ(val (A)) = val (B) führt die Suche nach der Position einer Variablen in val (A) und die Suche nach dem zugeordneten Term in val (B) und die Abänderung der Grammatiken solange durch, bis alle Variablen in val (A) instanziiert sind. Als letzte Operation testet der Algorithmus die Gleichheit von val (A) und val (B) mittels des Plandowski- bzw Lifshits-Algorithmus. 9.5.3.4 Anmerkungen Bemerkung 9.6 Das Verfahren vermeidet alle expliziten Expansionen oder Komplett-Durchläufe über den Term. Das reicht als Argument noch nicht aus, um zu schließen, dass der Algorithmus polynomiell ist. Hierzu ist es notwendig, die Iterationen und das mögliche Größenwachstum der Grammatik und SLPs zu analysieren. Man kann noch ausnutzen, dass man die Erweiterungen pro Variable getrennt voneinander machen kann. Die genaue Analyse wurde in den Artikeln [GGSS08, GGSS11] durchgeführt, die zeigen, dass es wirklich nur polynomielle Zeit benötigt. Beispiel 9.7 Ein einfaches Beispiel ist f 24 (x) gegen f 32 (a) zu matchen. Position von x ist eine SLP: C1 C2 C3 C4 C5 C6 A1 T := := := := := := := := g([]) C1 C1 C2 C2 C3 C3 C4 C4 C5 C5 a C6 (A1 ) C7 S ::= C4 C5 ::= C7 (x) Automatische Deduktion, SS 2014, vom 13.06.2014 P1 P2 P3 P4 P5 P := := := := := ::= 152 1 P 1 P1 P 2 P2 P 3 P3 P 4 P4 P 4 P5 Die Konstruktion des Subterms von val (T ) an der Stelle val (P ) startet mit P, T . Man sieht, bzw. man kann mittels Plandowskis Algorithmus ermitteln: val (P ) ist ein Präfix der Lochposition von val (C7 ). Jetzt muss man unter Benutzung der Algorithmen den Suffix von val (C7 ) konstruieren. Nach zwei Schritten sieht der Algorithmus dass C4 das richtige Nichtterminal ist und konstruiert das Nichtterminal R mit Produktion R ::= C4 [a]. Der nächste Schritt ist eine Erweiterung G0 der STG: um x ::= R. Danach kann man S (bzgl. der neuen STG G0 gemeint) und T mit dem Plandowski-Algorithmus vergleichen. 9.5.4 Unifikation unter Kompression Der Unifikations-Algorithmus ist sehr ähnlich zum Matching-Algorithmus. Ein Unterschied ist, dass natürlich beide Terme Variablen enthalten können. Dadurch wird es nötig, manchmal die Seiten zu wechseln und rechts und links nach Variablenpositionen zu schauen. Ein weiterer Unterschied ist, dass jetzt occurs-check Fehler auftreten können: man muss beim Instanziierungsschritt x ::= A prüfen, ob val (A) die Variable x enthält. Der Beweis der Polynomialität wird komplizierter, da die Instanziierungen sequentiell gemacht werden müssen (im Gegensatz zum Match-Algorithmus). Man muss noch nachweisen, dass die Größe der erweiterten Grammatik nicht zu schnell wächst, was ebenfalls in den Artikeln [GGSS08, GGSS11] nachgewiesen wurde. Automatische Deduktion, SS 2014, vom 13.06.2014 10 153 Automatische induktive Beweise und ein System dazu: VeriFun Ein implementiertes System, das für die Vorlesung interessant ist, ist VeriFun, von der Arbeitsgruppe von Prof. Dr. Christoph Walther an der TU Darmstadt entwickelt http://www.inferenzsysteme.informatik.tu-darmstadt. de/verifun/ Dieser Beweiser ist teilautomatisch, erlaubt auch Interaktionen und beweist Sätze über Eigenschaften von Funktionen einer strikten funktionalen Programmiersprache. Z.B. kann man damit die Peano-Kodierung der natürlichen Zahlen leicht definieren und dann Sätze über natürliche Zahlen beweisen. Die wesentliche Beweistechnik von VeriFun sind induktive Beweise. Zum Beispiel der Nachweis von Aussagen über alle natürlichen Zahlen, oder über andere induktiv definierte Datenstrukturen wie endliche Listen oder endliche Bäume. Ein praktischer Vorteil dieses Beweisers ist, dass er portabel ist und einen leichten Einstieg für Anfänger erlaubt, so dass man nach kurzer Zeit in der Lage ist, bereits einfache Induktionsbeweise anzustoßen, die erfolgreich abgeschlossen werden, wobei man allmählich von wenig Interaktion zu mehr und mehr Interaktion geleitet wird. Zu beachten ist, dass die freie Version von VeriFun eine abgespeckte Version einer ausdrucks- und leistungsstärkeren internen und experimentellen Variante ist 10.1 Zur Syntax Es gibt zwei Ebenen der Syntax: die funktionale Programmiersprache, die es erlaubt, Funktionen zu definieren und die logische, die es erlaubt Formeln und Aussagen zum Verhalten der Funktionen zu formulieren. Als Basis braucht man einfach getypte7 Terme: Diese kann man sehen als markierte, geordnete Bäume mit weiteren Beschränkungen und Eigenschaften. 1. Es gibt eine Menge von atomaren Typen. Das sind einfach nur Namen. 2. Es gibt eine Menge von Funktionssymbolen. Jedes Funktionssymbol hat genau einen Typ der Form T1 × . . . × Tn → Tn+1 , wobei Ti atomare Typen sind. D.h. es sind Funktionen mit einem Typ erster Ordnung. In Haskell würde man schreiben: T1 → . . . → Tn → Tn+1 . 3. es gibt zu jedem atomaren Typen T unendliche viele Variablen zu diesem Typ. 4. Ein Term ist induktiv definiert und kann sein: • eine Variable. Der Typ des Terms ist der Typ der Variablen. 7 VeriFun erlaubt auch polymorphe parametrisierte Typen Automatische Deduktion, SS 2014, vom 13.06.2014 154 • f (t1 , . . . , tn ), wenn t1 , . . . , tn Terme sind mit den Typen t1 :: T1 , . . . , tn : .Tn , und f : T1 × . . . × Tn → Tn+1 , dann ist f (t1 , . . . , tn ) : Tn+1 ein Term (vom Typ Tn+1 ). Beachte, dass Terme atomare Typen haben8 . Außerdem sind Typen höherer Ordnung nur sehr eingeschränkt erlaubt. Es gibt z.B. nur Funktionen erster Ordnung. Der Typ bool ist vordefiniert mit false, true; aber er spielt eine Sonderrolle, da er nicht der Termebene, sondern der logischen Ebene zugerechnet wird. Datenstrukturen erklärt man dadurch, dass man Funktionssymbole unterscheidet in: • Konstruktoren • definierte Funktionen (VeriFun-Sprechweise: Funktionen) Zu jedem Konstruktor f : T1 × . . . × Tn → Tn+1 gibt es automatisch n Selektorfunktionen (Selektoren) self,i :: Tn+1 → Ti , die aus einem Wert der Form f (t1 , . . . , tn ), die i-te Komponente extrahieren. D.h. self,i (f (t1 , . . . , tn )) wertet aus zu (reduziert zu) ti . Beachte, dass es Konstruktorkonstanten gibt. Definition 10.1 Ein Wert ist ein Grundterm, der nur aus Konstruktoren besteht. Beispiel 10.2 Zahlen definiert man so: Es gibt einen Typ nat. Es gibt zwei Konstruktoren 0 :: nat und succ :: nat → nat. Die Selektorfunktion zu succ ist pred. Dann sind alle variablenfreien Terme (auch Grundterme genannt) genau die Werte, die zu nat gehören: 0, succ(0), succ(succ(0)), succ(succ(succ(0))), . . . , die man dann auch als die Zahlen 0,1,2,3,. . . interpretiert. Definierte Funktionen sind dann z.B. die Funktion inc, die Zahlen um 1 erhöht, oder dec, die Zahlen um 1 erniedrigt. Diese definiert man in einer (strikten) funktionalen Sprache. Z.B. definiert man inc folgendermaßen: inc :: nat → nat inc (x) = succ(x) Um dec zu definieren, braucht man bereits eine Selektorfunktion, die i.a. pred genannt wird: dec :: nat → nat dec x = pred(x), oder alternativ: dec x = if x = 0 then undefined else pred(x) Die Syntax der Funktionen, neben der Typdeklaration und dem Kopf dec x, erlaubt im Rumpf der Funktionen noch folgende Konstrukte: 8 VeriFun erlaubt auch parametrischen Polymorphismus. Dann sind auch parametrisierte Typen möglich Automatische Deduktion, SS 2014, vom 13.06.2014 155 Vergleiche: s = t Fallunterscheidung: if x = 0 then undefined else pred(x). Hier sind die üblichen Typbedingungen zu beachten: s = t darf nur für Terme s, t mit gleichem Typ verwendet werden und ergibt true oder false. Die Ausgänge der Fallunterscheidung müssen vom gleichen Typ sein. Wir benutzen eine Konstante undefined, die alle Typen hat, die aber kein Konstruktor ist, also auch nicht in Werten enthalten sein kann. Diese repräsentiert alle Grund-Ausdrücke, die nicht zu einem Wert ausgewertet werden können. In der Syntax von VeriFun gibt es ebenfalls ein Zeichen (?) für diese Klasse der Ausdrücke. Die verwendete Syntax von VeriFun benutzt einen UNICODE (nicht-ASCII)Zeichensatz, der in der Oberfläche zu finden ist, der aber hier nicht exakt wiedergegeben ist. Die benutzerdefinierte Additions-Funktion + ist unten dargestellt, vor- und hochgestelltes + bedeutet succ, vor- und hochgestelltes − bedeutet pred9 ; die Schreibweise ?0(x) entspricht genau der Frage x = 0. function [infixr,20] +(x : N, y : N) : N <= if ?0(x) then y else + (− (x) + y) end_if 10.1.1 Auswertung von Ausdrücken Auswertung von Grund-Ausdrücken ist strikt, d.h. ein Ausdruck f (t1 , . . . , tn ) wertet folgendermaßen aus, wobei wir annehmen, dass es sich um GrundAusdrücke handelt. Folgende Fälle können auftreten: 1. Die Auswertung ist erfolgreich beendet, wenn f (t1 , . . . , tn ) ein Wert ist, d.h. nur aus Konstruktoren besteht. 2. Ist der Ausdruck kein Wert, dann werden zuerst die ti von links nach rechts ausgewertet. Ist eines der ti undefiniert, dann ist auch f (t1 , . . . , tn ) undefiniert. 3. Sind alle ti ausgewertet (d.h. Werte), ist f eine definierte Funktion, r der Rumpf von f und x1 , . . . , xn die Argumentvariablen, dann wird r[t1 /x1 , . . . , tn /xn ] ausgewertet, und der entsprechende Wert zurückgegeben. 4. Das Konstrukt if-then-else wird nicht-strikt ausgewertet: Ein Ausdruck if b then s else t wird so ausgewertet, dass zuerst b ausgewertet wird. 9 + und − können auch als succ und pred im VeriFun-Editor eingegeben werden. Automatische Deduktion, SS 2014, vom 13.06.2014 156 Ist das Ergebnis definiert, dann wird bei true als Ergebnis s ausgewertet und der entsprechende Wert zurückgegeben, und bei false wird t ausgewertet und zurückgegeben. Ist das Ergebnis von b undefiniert, dann ist das Ergebnis des gesamten if b then s else t ebenfalls undefiniert. 5. Eine Gleichheit s = t wird ausgewertet, indem zunächst s, dann t ausgewertet wird. Ist mindestens eines der Resultate undefiniert, dann ist das Ergebnis undefiniert. Sind beide Resultate definiert, dann wird true ausgegeben, wenn die Terme als Werte gleich sind, ansonsten wird false zurückgegeben. Terminierung einer Funktion f bedeutet, dass für alle Werte t1 , . . . , tn als Argumente, die vom Typ her erlaubt sind, die Funktionsanwendung f (t1 , . . . , tn ), entsprechend obiger call-by-value-Strategie, einen Wert (d.h. einen Grundterm, bestehend nur aus Konstruktoren) ergeben. Es kann passieren, dass die Auswertung für bestimmte erlaubte Argumente nicht terminiert. In diesem Fall kann man undefiniert als Ergebnis ansehen. Das ist semantisch korrekt, kann aber natürlich nicht immer berechnet werden. In VeriFun wird die globale Terminierung jeder Funktion in einer ersten Stufe der Eingabe verifiziert. Somit sind Funktionen, die in Termen verwendbar sind, alle schon auf Terminierung getestet. Funktionen werden in VeriFun nur dann aktiviert, wenn diese für alle Eingaben terminieren. Dazu gibt es einen Modul, der Terminierung von Funktionen nachweist und der nichtterminierende Funktionen nicht akzeptiert, bzw. als nicht freigegeben“ markiert. ” VeriFun behandelt auch Funktionen mit undefinierten Ergebnissen, erwartet aber vom Benutzer, dass diese selbst dafür sorgen, dass undefiniert nicht im Endergebnis erscheint. 10.1.2 Boolesche Ausdrücke und Auswertungen Diese werden von VeriFun NICHT als Terme sondern als Teil der logischen Ebene behandelt. Dies wirkt sich folgendermaßen aus: • true, false sind KEINE Konstruktoren, sondern logische Konstanten, können also nicht innerhalb eines Wertes verwendet werden. • Funktionen haben keine bool-Argumente. • Funktionen, die auf bool abbilden, sind damit als definierte Prädikate zu sehen. • Das Konstrukt if-then-else ist somit keine Funktion, sondern ein logischer Operator, der zudem nicht-strikt ist. • In VeriFun werden alle logischen Junktoren mittels if-then-else dargestellt. Das ist unproblematisch, aber manchmal wenig intuitiv: Z.B. muss (if (not b) then s else t) als (if b then t else s) dargestellt werden. Eine Bedingung mit logischem oder zB (if (b1 ∨ b2 ) then s else t) muss als (if b1 then s else (if b2 then s else t)) geschrieben werden. Automatische Deduktion, SS 2014, vom 13.06.2014 157 Der Vorteil dieser Sichtweise ist, neben der Effizienz, dass man mit dem gleichen Mechanismus, mit dem man Funktionen definiert, auch Prädikate (d.h. bool-wertige Funktionen“) definieren kann, und somit den Typcheck und den ” Auswertungsmechanismus für beides verwenden kann. 10.2 Syntax und Semantik der logischen Formeln Folgende Formeln sind in VeriFun zulässig. Syntax: Es ist ein Präfix von All-Quantoren erlaubt, deren Variablen typisiert sind, und die als Rumpf eine quantorenfreie Formel hat, d.h. die vom Typ bool ist: ∀x1 : T1 , . . . , xn : Tn .F Die Formeln F sind Vergleiche: s = t, oder if-then-else-Ausdrücke. Kompliziertere logische Formeln kann man, wie oben bereits angemerkt, immer mit diesen Konstrukten ausdrücken. Formeln sind geschlossen, wenn alle freien Variablen in F , in einem Allquantor gebunden sind. Jeder Grundterm t ist entweder undefined oder gleich zu einem Wert w. Es gilt: t = w für einen Wert w, genau dann wenn t zu w auswertet. D.h. auch dass es unentscheidbar ist, ob ein Term zu einem Wert auswertet bzw undefined ist, aber die Berechnung des Wertes w, falls es ihn gibt ist in der Klasse rekursiv aufzählbar“. ” Semantik: Eine Formel ∀x1 : T1 , . . . , xn : Tn .F ist wahr (oder eine Tautologie, wenn für alle Werte ti : Ti gilt: F [t1 /x1 , . . . , tn /xn ] ergibt true. Hierbei werden Grundterme entsprechend der obigen Eigenschaft mit ihrem Wert identifiziert bzw als undefined behandelt. Die Logik und Semantik kann auf verschiedene Weise aufgebaut werden: 1. dreiwertig mit undefined als drittem Wert. Das hat den Nachteil, dass viele bekannte logische Umformungen von Formeln nicht mehr gelten, sondern nur noch solche (es sind weniger), die bzgl. der dreiwertigen Logik die Semantik erhalten. 2. Das Symbol undefinedT steht für einen unbekannten Wert des Typs T (der aber terminiert). In der Logik hat das dann den Effekt, dass Formeln mit einem undefinedT für alle möglichen Werte vom Typ T die Bedingung, damit diese Formel eine Tautologie ist, auch fordert, dass alle Werte die man für das undefinedT einsetzen kann, die Formel auch erfüllen. Zudem kann es mehrere verschiedene Konstanten undefinedT geben. Das ist die Logik und Semantik, die die Verifun-Gruppe favorisiert. Leider sind die Konsequenzen dieser Logik in Grenzfällen problematisch. Z.B. 2−3 = 3−4 ist Tautologie, aber nicht 2 − 3 = 3 − 5. Eine merkwürdige Tautologie in dieser Logik ist: tail(nil) = tail(tail(nil)) ⇒ tail(nil) = nil. Automatische Deduktion, SS 2014, vom 13.06.2014 158 3. Eine andere gute Möglichkeit (zur Veröffentlichung akzeptiert) ist: eine Logik zugrunde zu legen, die auf der Semantik der funktionalen Sprache aufbaut, und Nichtterminierung zulässt. Standardmäßig kann man dann undefined und Nichtterminierung gleichsetzen. Diese Logik erlaubt dann auch die normalen Tautologien der Prädikatenlogik. Dann gilt z.B. dass 2 − 3 = 3 − 4 und 2 − 3 = 3 − 5 Tautologien sind, da sowohl 2 − 3, 3 − 4, 3 − 5 im Typ nat undefininert sind, also ⊥ sind. Die Formel tail(nil) = tail(tail(nil)) ⇒ tail(nil) = nil ist dann keine Tautologie mehr. Die Logik selbst erlaubt auch weitere Quantifizierungen, allerdings ist die oben angegebene Klasse genau die Klasse der Formeln, die VeriFun als Eingabe akzeptiert. Die anderen Formeln werden nicht akzeptiert bzw. sind nicht eingebbar. 10.2.1 Allgemeine Formeln Diese gehen über VeriFun hinaus und sind dort nicht direkt eingebbar. Man kann analog zur Prädikatenlogik beliebig aus Existenz- und All-Quantoren zusammenbauen. Eine Formel ist eine Tautologie, wenn diese stets als true interpretiert wird. Die Wahl der Logik beeinflusst im wesentlichen, wann einen Gleichung gilt und wann nicht. Beispiel 10.3 In der Verifun-eigenen Semantik gilt: ∀x : nat∃y : nat : x + succ(0) = y ist eine Tautologie. Aber, da Gleichungen der Form undefined = s in der Verifun-eigenen Semantik stets undefined ergeben: ∃x : nat : pred(0) = x ergibt stets undefiniert. Das gleiche gilt für: ¬(∃x : nat : pred(0) = x). Somit kann man diese Formel nicht nachweisen. In der Verifun-Semantik gibt es somit geschlossene Formeln F , für die F ∨ ¬F keine Tautologie ist, im Gegensatz zur Prädikatenlogik. Nimmt man die Variante 3 der Semantik, dann ist ¬(∃x : nat : pred(0) = x) eine Tautologie, da für alle echten Werte v stets undefined 6= v gilt. Das Beispiel zeigt, dass Verifun bzgl der Verifun-eigenen Semantik Formelumformungen beachten muss, dass nicht alle Tautologien der Prädikatenlogik gelten und somit nicht alle Umformungen der Prädikatenlogik verwendbar sind. Wenn man aber gezeigt hat, dass eine Formel (oder eine entsprechend Subformel) nicht undefiniert ist, dann kann man die prädikatenlogische Umformungen anwenden. Wenn man in VeriFun trotzdem eine Existenzaussage beweisen will, dann muss man das auf Umwegen machen: Will man z.B. ∀y : ∃x.f (x) = s beweisen, so muss man dazu die Funktion (sagen wir mal g) definieren, die das x berechnet und dann die Formel ∀y.f (g(y)) = s[g(y)/x] beweisen. Automatische Deduktion, SS 2014, vom 13.06.2014 10.3 159 Beweise mit vollständiger Induktion Die Beweistechnik der Induktion basiert auf der induktiven Definition der Werte. Es wird somit i.a. eine Induktion nach der Struktur der Terme durchgeführt. Es gibt natürlich weitere Induktionsschemata, die aber alle auf einer fundierten Ordnung (well-founded order) beruhen müssen. Bei natürlichen Zahlen ist die >-Ordnung fundiert: es gibt keine unendlichen absteigenden Folgen von natürlichen Zahlen. Die Peano-Kodierung erlaubt gleichzeitig eine Induktion nach der Struktur der Terme, da z.B. 3 > 2 in Termen sich darstellt als succ(succ(succ(0))) > succ(succ(0)), d.h. die Ordnung auf Zahlen entspricht der Ordnung nach der Größe der Terme. Das Beweis-Prinzip der vollständigen Induktion kann man so beschreiben: Gegeben eine Menge M mit fundierter Ordnung <. Um eine Aussage A für alle Elemente m ∈ M zu zeigen, sind folgende Beweisschritte erforderlich: 1. Induktionsbasis: Zeige A(m) für alle <-minimalen Elemente m von M : 2. Induktionsschritt: Für festes aber beliebiges m ∈ M : Zeige A(m), wobei die Annahmen A(m0 ) für alle m0 < m verwendet werden dürfen. Diese nennt man dann Induktionshypothesen. Geht dieser Schritt für alle m, dann hat man ∀m ∈ M : A(m) gezeigt. Bei Zahlen verwendet man teilweise ein etwas einfacheres Induktionsschema: Induktionsbasis und Schritt von n auf n + 1: A(n) wird als Induktionshypothese verwendet, aus dem man dann A(n + 1) erschließen muss. 10.4 Beispiel: Kommutativität der Peano-Addition Wie oben bereits erwähnt, ist die Addition über Peanozahlen in VeriFun folgendermaßen definiert function [infixr,20] +(x : N, y : N) : N <= if ?0(x) then y else + (− (x) + y) end_if Die Behauptung, dass + kommutativ ist, entspricht dem Satz: ∀x : nat, y : nat . x + y = y + x D.h. für alle Werte s, t vom Typ nat : s + t = t + s. Wir geben den induktiven Beweis an. Bei diesem genügt es, für x die fundierte Ordnung < zu verwenden: Die Induktion ist nach der Struktur der Terme und x, y sind die Induktionsparameter. Es ist dazu wichtig zu wissen, wie alle Werte vom Typ nat aussehen: Die sind aufgebaut aus 0, oder succ(r), wobei r ein Wert vom Typ nat ist. Automatische Deduktion, SS 2014, vom 13.06.2014 160 Die Additionsdefinition auf Werten von Typ nat unter Benutzung von succ ist: 0+x succ(x) + y := x := succ(x + y) 1. Induktionsbasis: Für x = 0 und Werte y : nat gilt: 0 + y = y = y + 0 Zum Nachweis braucht man eine extra Induktion zum Nachweis von: ∀y : nat.y + 0 = y. (a) Induktionsbasis: y = 0: Nachrechnen unter Benutzung der Definition der Addition ergibt: (0 + y)[0/y] = 0, ebenso ist (y + 0)[0/y] = 0. (b) Induktionsschritt: y = succ(y 0 ): (0 + y)[succ(y 0 )/y] = (0 + succ(y 0 )) = succ(y 0 ). Die Berechnung der linken Seite ergibt: (y + 0)[succ(y 0 )/y] = (succ(y 0 ) + 0) = succ(y 0 + 0), wobei der letzte Schritt die Definition der Addition ist. Jetzt kann man die Induktionshypothese für y 0 anwenden: das ergibt succ(y 0 + 0) = succ(y 0 ). Die rechte Seite ist genau y[succ(y 0 )/y] = succ(y 0 ). Somit sind rechte und linke Seite gleich. Vollständige Induktion ergibt die Behauptung ∀y : nat.y + 0 = y. Da 0 + y = y wegen der Definition der Addition, hat man die Induktionsbasis für die Kommutativität von + gezeigt. 2. Induktionsschritt: Auch beim Induktionsschritt kommt man nicht direkt zum Ziel. Man muss erst (wieder induktiv) zeigen: ∀x : nat, y : nat . x + succ(y) = succ(x + y). Wieder mit Induktion: (a) Basis: Linke Seite: x + succ(y)[0/x] = 0 + succ(y) = succ(y). Rechte Seite: succ(x + y)[0/x] = succ(0 + y) = succ(y). (b) Induktionsschritt: Linke Seite: (x + succ(y))[succ(x0 )/x] = succ(x0 ) + succ(y) = succ(x0 + succ(y)). Anwendung der Induktionshypothese wg x0 < x ist erlaubt und ergibt: = succ(succ(x0 + y)). Rechte Seite: succ(x + y)[succ(x0 )/x] = succ(succ(x0 ) + y) = succ(succ(x0 + y)). Der letzte Schritt ist erlaubt wegen der Auswertung der Addition. Jetzt kann man die Kommutativität der Addition nachweisen, indem man den Induktionsschritt durchführt: x = succ(x0 ). Die rechte Seite der Gleichung ergibt: (x + y)[succ(x0 )/x] = (succ(x0 ) + y) = succ(x0 + y). Die linke Seite ergibt: (y + x)[succ(x0 )/x] = (y + succ(x0 )) = succ(x0 + y), wobei die letzte Gleichung aus der Zwischenbehauptung folgt. Damit sind alle Teile des vollständigen Induktionsbeweises gezeigt und es gilt: ∀x : nat, y : nat . x + y = y + x Automatische Deduktion, SS 2014, vom 13.06.2014 10.4.1 161 Beobachtungen aus dem Beweis • Es ist wichtig zu wissen, wie sich die Werte eines Typs konstruieren lassen. Das muss vorher festgelegt sein und darf sich nicht durch zusätzliche Definitionen ändern. D.h. nach der Festlegung des Typs nat darf man nicht nachträglich noch Konstruktoren dieses Typs einführen. VeriFun verlangt dementsprechend, dass neue Typen und deren Konstruktoren gemeinsam festgelegt werden und danach nicht änderbar sind. • Die Induktion erfordert manchmal Zwischeninduktionen, die ihrerseits wieder Induktionsbeweise sind. Dies wird in VeriFun durchgeführt, indem der Benutzer diese Zwischenziele als Lemmas formulieren muss, und für diese einen eigenen automatischen Induktionsbeweis anstoßen muss. • Es ist wichtig zu wissen, welche Variablen die Induktionsvariablen sind: Diese wird teilweise automatisch ausprobiert. • VeriFun in der einfachen Variante hat als Beweiseinheit einen Induktionsbeweiser, und kann aber die Gleichungsumformungen unter Ausnutzung der Induktionshypothese, vorher bewiesener Lemmas und der Funktionsdefinitionen durchführen. 10.5 Terminierung von Funktionen Terminierung einer Funktion f bedeutet, dass f (s1 , . . . , sn ) für alle Werte si mit einem Wert terminiert, wobei die Wertargumente si vom Typ her zulässig sein müssen. Es ist klar, dass das nicht für alle Ausdrücke gefordert werden kann, da z.B. ein Ausdruck selbst schon eine nichtterminierende Berechnung anstoßen kann. In vielen Fällen kann VeriFun die Terminierung aufgrund einfacher Kriterien automatisch erkennen, da man schnell testen kann, ob die rekursiven Aufrufe mit kleineren Argumenten gemacht werden. Normalerweise muss man die richtige Argumentstelle finden, die kleiner wird, oder eine lexikographische Ordnung verwenden: Beispiel 10.4 Die Additionsfunktion hat die zwei Möglichkeiten: • 0 + v → v. Hier kann man annehmen, dass v schon ein Zahlenwert ist. Dann terminiert dieser Fall offenbar immer erfolgreich. • succ(v) + w → succ(v + w) Auch hier kann man annehmen, dass v, w bereits Zahlenwerte sind. Der Aufruf (v +w) findet statt mit einem kleineren v, da ja der Konstruktor succ einmal entfernt wurde. Also terminiert die Additionsfunktion. Man sieht auch, dass dieser Nachweis ebenfalls eine vollständige Induktion ist, wobei die Ordnung die Größe der Werte als Terme ist. Automatische Deduktion, SS 2014, vom 13.06.2014 162 Beispiel 10.5 Wir betrachten die Ackermannfunktion in einer Variante mit zwei Argumenten. Das Beispiel zeigt, dass man Terminierung zeigen kann, auch wenn ein Argument kleiner und das andere größer wird im rekursiven Aufruf. Die Notation ist in Regelform geschrieben. Die Haskell-Definition ist zuerst angegeben. ack ack ack ack 0 1 x x y 0 0 y = = | | 1 2 x >= 2 = x+2 x > 0 && y > 0 = ack (ack (x-1) y) (y-1) Jetzt die VeriFun-kompatible Regelform: ack ack ack ack 0y 10 (succ(succ(x))) 0 (succ(x)) (succ(y)) → → → → 1 2 succ(succ(succ(succ(x))))) ack (ack x (succ(y))) y Hier sieht man, dass die lexikographische Ordnung auf den Argumenten x, y jeweils kleiner wird bei jedem rekursiven Aufruf, wobei man (|y|, |x|) nehmen muss: In den ersten drei Fällen terminiert ack erfolgreich. Das zweite Argument wird kleiner im äußeren rekursiven Aufrufen ack (ack x succ(y)) y, da y kleiner als succ(y) ist und beides Werte sind. Der Wert des ersten Arguments spielt keine Rolle. Der innere rekursive Aufruf wird ebenfalls kleiner: das zweite Argument succ(y) ist genauso groß wie beim eigentlichen Aufruf von ack, aber das erste Argument wird echt kleiner, da |succ(x)| > |x|, und x ein Wert ist. In ähnlicher Weise kann man das für die Listenfunktionen unten nachweisen. Bei der Terminierung der Reversefunktion muss man die Terminierung der Appendfunktion benutzen. Bei der iterativen Reversefunktion geht der Nachweis direkt (Übungsaufgabe?) 10.6 Listen-Beispiele in VeriFun Bevor wir uns Listen anschauen, vorher noch eine Erweiterung der Semantik auf polymorphe Typen. Damit die Semantik unter polymorpher Typisierung problemlos wie im einfach getypten funktioniert, muss folgende wichtige Eigenschaft erfüllt sein: Zu jedem Grundtyp τ gibt es einen Wert v : τ . Das ist in Haskell falsch, und ohne weitere Bedingungen an Datentypdefinitionen wäre es in VeriFun ebenfalls falsch: data T0 = Cons0 T0 data T1 = Cons1 T2 data T2 = Cons2 T1 Automatische Deduktion, SS 2014, vom 13.06.2014 163 Syntaktisch kann man die Bedingung erfüllen, wenn: • für jeden Datentyp ein Konstruktor existiert, (z.B. nullstellig), der sich in den Argumenttypen nicht auf den Typ selbst bezieht (irreflexive). • Polymorphe Typen nur auf der Basis der bereits vorhandenen Typen definiert werden können (und des aktuell zu definierenden Typs). 10.6.1 Listen Folgende VeriFun-Definition erklärt den Typ list (mit Parameter) und die die Listen-Konstruktoren Nil und Cons, wobei diese als Nil (bzw. als das Sonderzeichen ∅ in der VeriFun-Oberfläche) und als Infix-Konstruktor ::“ geschrieben ” werden. Die Selektoren zu :: sind hd und tl. structure list[@a] <= ∅, [infixr,100] ::(hd : @a, tl : list[@a]) Die Append-Funktion <> ist definiert durch: function [infixr,20] <>(k : list[@a], l : list[@a]) : list[@a] <= if ?∅(k) then l else hd(k) :: (tl(k) <> l) end_if Die Reverse-Funktion rev ist definiert durch: function rev(k : list[@a]) : list[@a] <= if ?∅(k) then ∅ else rev(tl(k)) <> hd(k) :: ∅ end_if Damit kann man die Datenstruktur Liste aufbauen und bereits Lemmas nachweisen. Ein interessantes Lemma ist die Assoziativität von Append <> (für endliche Listen): ∀x : list[@a], y : list[@a], z : list[@a] . (x <> (y <> z)) = ((x <> y) <> z) Der Induktionsbeweis dazu, mit x als Induktionsvariable: 1. Induktionsbasis. x = N il: Einfache Rechnung ergibt, dass linke und rechte Seite der Gleichung gleich sind. Automatische Deduktion, SS 2014, vom 13.06.2014 164 2. Induktionsschritt. x = a :: x0 : Linke Seite: ((a :: x0 ) <> (y <> z)) reduziert zu (a :: (x0 <> (y <> z))) Rechte Seite (((a :: x0 ) <> y) <> z) reduziert zu ((a :: (x0 <> y)) <> z), und dies zu a :: ((x0 <> y) <> z). Jetzt kann man die Induktionshypothese anwenden und erhält daraus (a :: (x0 <> (y <> z))). Der Beweis ist genau der Datenstruktur und der Funktionsdefinition angepasst. Man sieht, dass man den Typ der Datenstruktur Liste analysieren muss, um zu erkennen, dass man x = a :: x0 als Induktionsschritt verwenden muss. Ebenso muss der Induktionsbeweiser erkennen (bzw. raten), dass x die richtige Induktionsvariable ist. Der Beweis zu ∀x : list[@a], y : list[@a], z : list[@a] . (x <> (y <> z)) = ((x <> y) <> z) wurde durchgeführt, ohne auf Elemente vom Typ @a Bezug zu nehmen, deshalb ist der Beweis auch noch gültig, wenn neue Datenstrukturen hinzugefügt werden. Die semantische Definition zur Formel benutzt allerdings verschiedene Mengen von Werten, wenn man neue Datentypen definiert. Man kann jetzt mit den gleichen Methoden auch die folgenden Sätze beweisen: ∀x : list[@a], y : list[@a] . rev (x <> y) = rev (y) <> rev (x) ∀x : list[@a] . rev (rev (x)) = x