Überblick über die Aussagenlogik, Teil 1 Nick Pahlevan [email protected] Frankfurt am Main April 2012 Dieser Vortrag wurde im Rahmen des Seminars Aktuelle Themen aus der Wissensverarbeitung [WV-BS] im Sommersemester 2012 an der Johann Wolfgang Goethe – Universität Frankfurt am Main von mir angefertigt und gehalten. 1 Inhaltsverzeichnis 1 Was ist Aussagenlogik? 2 Die Syntax der Aussagenlogik 3 Die Semantik der Aussagenlogik 4 Erfüllbarkeit, Widersprüchlichkeit und Tautologieeigenschaft von Aussagenlogischen Formeln 5 Aussagenlogische Umformungen und Vereinfachungen 6 Negationsnormalform 7 Zusammenfassung 8 Quellen 2 1 Was ist Aussagenlogik? Die Aussagenlogik hat ihre Ursprünge in der booleschen Algebra. Boole (1815-1864) führte eine Algebra ein, deren Objekte als Wahrheitswerte mit den Werten wahr oder falsch belegt wurden, um mittels logischen Verknüpfungen („und“, „oder“, und „nicht“) komplexe Gleichungssysteme zu lösen. Dieses Prinzip lässt sich auf Aussagen erweitern, welche im Rahmen der Aussagenlogik sprachliche Gebilde darstellen, die entweder wahr oder falsch sind und mittels Junktoren zu komplexeren Aussagen verknüpft werden können. Aussagen, welche nicht aus anderen Aussagen zusammengesetzt sind, werden atomare Aussagen genannt. Diese elementaren Aussagen werden durch Aussagenvariablen repräsentiert, deren Elemente zusammen mit den Wahrheitswerten als atomare Formeln bzw. Atome bezeichnet werden. Die atomaren Formeln gehören zur Menge der aussagenlogischen Formeln (kurz Formeln genannt), welche wir näher betrachten werden. Ziel dieses Vortrages ist es einen Überblick über diese und weitere wichtige Elemente der Aussagenlogik zu bieten, welche insbesondere beim maschinengestützten Beweisen eine wesentliche Rolle spielen. Dazu wird die funktionale Programmiersprache Ocaml (Objective CAML) herangezogen, ein Abkömmling der Sprache Edinburgh ML, welche eigens entwickelt wurde um Theorembeweiser zu schreiben. Der wesentliche Teil dieser Arbeit basiert auf den Ausarbeitungen von John Harrison [1]. Zusätzlich wurde zur Abdeckung der wesentlichen Definitionen das Vorlesungsskript von Nicole Schweikhardt herangezogen [2]. 2 Die Syntax der Aussagenlogik Ausdrücke der Aussagenlogik (aussagenlogische Formeln) werden formal durch die folgende Grammatik in BNF (Backus-Naur-Form) gebildet: Definition 2.1: Syntax einer aussagenlogischen Formel in EBNF A :: = X | (A ˄ A) | (A ˅ A) | (¬A) | (A ⇒ A) | (A ⇔ A) | ⊤ | ⊥ wobei X: Nichtterminal für aussagenlogische Variablen A : Nichtterminal für Aussagen ⊤ : logisches Wahr ⊥ : logisches Falsch ˄ : logisches und (Konjunktion) ˅ : logisches oder (Disjunktion) ¬ : Negation ⇒ : Implikation ⇔ : Biimplikation 3 Die erste Aufgabe ist es einen Datentypen in Ocaml zu definieren, der die abstrakte Syntax der Aussagenlogik darstellt. Dazu wird die rekursive Definition der aussagenlogischen Formel betrachtet und dem entsprechend ein Datentyp in Ocaml definiert (Abbildung 1). Diese rekursive Typdefinition beinhaltet als Datenkonstruktoren die Konstanten True und False, die atomaren Aussagen (Atom) vom Typ `a, die Junktoren (Not, And usw.) sowie zusätzlich Forall und Exists zur Darstellung von Formeln in der Prädikatenlogik. Interessant ist, dass der Typ `a von atomaren Aussagen zu einem Parameter der Definition des Typs von Formeln wird und somit als Typvariable fungiert (parametrische Polymorphie). Dies geschieht, um später wiederholten Aufwand bei der Logik erster Stufe zu vermeiden. Boole benutzte in seiner Algebra übliche arithmetische Symbole um logische Verknüpfungen darzustellen (z.b. „p+q“ für „p or q“). Um jedoch irreführende Schlüsse zu vermeiden (Regeln der arithmetischen Operationen gelten nicht immer für die logischen Verknüpfungen), werden wir darauf verzichten und die Standardsymbolik für Junktoren verwenden (Abbildung 2). Diese werden durch abstrakte Syntaxkonstrukte in unseren Ocaml Programmen repräsentiert (welche auch eine ASCII Annäherung unterstützen). Die Operatorrangfolge kann anhand der Position in der Tabelle abgelesen werden (die Negation hat die höchste Priorität, während die Biimplikation die niedrigste hat). Die binären Junktoren werden rechtsassoziativ ausgewertet. 4 Um diese Symbole in Programmen zu verarbeiten, ist eine automatische Parse- und Printfunktion für unsere aussagenlogischen Formeln von Nöten. Auch hier ist der Typ der atomaren Aussagen ein Parameter der Typdefinition. Bei der Typdefinition von parse_formula (Abbildung 3) fällt auf, dass direkt ein Paar von Atomparsern benutzt wird. Dies geschieht um später in der Logik erster Stufe mit speziellen Infix-Formeln wie x<y umgehen zu können. Neben der Parsefunktion ist die Printfunktion von großer Bedeutung. Die Funktion print_qformula gibt eine Formel mit Anführungszeichen aus. Ihr Typ erwartet einen primitiven Aussagenprinter und leitet daraus einen allgemeinen Printer für alle Formeltypen ab (Abbildung 4). Die Funktion print_propvar beschreibt eine einfache Funktion um Aussagenvariablen auszugeben, mittels let print_prop_formula... wird der Printer zusätzlich eingestellt und installiert (Abbildung 5). 5 Somit haben wir es geschafft, dass unsere aussagenlogischen Formeln automatisch geparst und ausgegeben werden (Abbildung 6). Bei längeren Formeln wird automatisch ein passender Zeilenumbruch eingefügt. Um mit aussagenlogischen Formeln in Ocaml besser umgehen zu können, gibt es desweiteren einige gebräuchliche Syntaxoperationen, deren Funktion wir kurz beschreiben (Abbildung 7). Möchte man eine bestimmte atomare Aussage innerhalb einer Formel durch eine andere Aussage ersetzen bietet sich die Erste der folgenden rekursiven Funktionen an (Abbildung 8). Onatoms f fm wendet die Funktion f auf alle Atome der Formel fm an. Mittels der zweiten Funktion lässt sich eine Binärfunktion über alle Atome einer Formel iteriereren . Die dritte Funktion liefert den Satz aller innerhalb einer Formel benutzten Atome. 6 3 Die Semantik der Aussagenlogik Die Bedeutung einer aussagenlogischen Formel nimmt immer einen der beiden Wahrheitswerte true oder false an. Darauf lässt sich jedoch nur schließen, wenn man genau über die Wahrheitswerte der atomaren Formeln innerhalb einer Formel bescheid weiß. Unter einer Belegung oder Bewertung einer atomaren Formel versteht man die Zuordnung eines Wahrheitswertes. Genauer handelt es sich um eine Abbildung der Menge von Atomen auf die Menge der Wahrheitswerte als Funktion von Variablen nach Formeln. Wenn wir in Ocaml eine Formel p sowie eine Belegung v gegeben haben, können wir auf den übergeordneten Wahrheitswert mittels folgender rekursiver Funktion schließen (Abbildung 9). Die logischen Verbindungen werden mittels dem in Ocaml eingebauten Typen bool realisiert. Die Wahrheitstabelle gibt an, welche Wahrheitswerte eine Formel in Abhängigkeit ihrer Subformeln annehmen kann (Abbildung 10). 7 Um für jede mögliche aussagenlogische Formel eine Wahrheitstabelle zu erhalten gehen wir wie folgt vor (Abbildung 11). Wir definieren eine Funktion onallvaluations welche überprüft, ob eine Funktion subfn den Wert true für alle möglichen Belegungen der Atome ats annimmt und eine bereits existierende Belegung v für alle anderen Atome benutzt. Durch sukzessive Modifizierung von v und Umstellung jedes Atoms zu true und false, werden rekursiv alle Belegungen durchsucht. Diese Funktion wird nun in der verwendet, welche Funktion print_truthtable eine Formel erwartet und die Wahrheitstabelle dafür ausgibt. Die Wahrheitstabelle hat 2n Einträge für Formeln mit n verschiedenen Atomen. 4 Erfüllbarkeit, Widersprüchlichkeit und Tautologieeigenschaft von Aussagenlogischen Formeln Definition 4.1: Erfüllbarkeitsbegriffe Sei p eine aussagenlogische Formel. Dann seien folgende Erfüllbarkeitsbegriffe vereinbart: p heißt erfüllbar : ⇔ Es gibt I mit I(p) = 1 p heißt falsifizierbar : ⇔ Es gibt I mit I(p) = 0 p heißt tautologisch (allgemeingültig) : ⇔ Für alle I gilt I(p) = 1 p heißt widerspruchsvoll (unerfüllbar) : ⇔ Für alle I gilt I(p) = 0 8 Eine Belegung v erfüllt eine Formel p, wenn eval p v den Wahrheitswert true ausgibt. Die folgende Funktion gibt an, ob eine Formel eine Tautologie ist, indem sie jede Belegung auf ihren Wahrheitswert (true) überprüft (Abbildung 12). Die Funktion bricht bei der ersten falschen Belegung mit dem Wert false ab, um nicht unnötig noch die anderen Belegungen zu überprüfen. Nach den obigen Definitionen wissen wir, dass jede Tautologie erfüllbar ist und eine Formel unerfüllbar ist wenn sie nicht erfüllbar ist. Genauso können wir darauf schließen, dass wenn eval (not p) v den Wahrheitswert false ausgibt, iff eval p v den Wahrheitswert true ausgeben muss. Also ist p eine Tautologie genau dann wenn not p nicht erfüllbar ist. Diese Beziehung machen wir uns zu Nutze, um unsere Erfüllbarkeits- und Unerfüllbarkeitsfunktionen mittels der Tautologieeigenschaft zu definieren (Abbildung 13). Manchmal möchten wir beweisen, dass bestimmte Ausdrücke ersetzt werden können, ohne dass sich die Erfüllbarkeit einer aussagenlogischen Formel ändert. Hierfür benutzen wir das Prinzip der Substitution. Allgemein bedeutet dies die Ersetzung eines Ausdrucks durch einen anderen. Eine Substitution auf eine Formel anzuwenden bedeutet aber vorallem, alle Vorkommen bestimmter Atome durch andere Formeln zu ersetzen. Werden in einer Tautologie für alle Aussagenvariablen Xi, i=1,2,..., alle Vorkommen von Xi jeweils durch die gleiche Formel Ψi ersetzt, so ist die entstehende Formel ebenfalls eine Tautologie. Wir definieren die Substitution in Ocaml wie folgt (Abbildung 14). 9 5 Aussagenlogische Umformungen und Vereinfachungen Wichtige Tautologien stellen die De Morgansche Regeln dar (Abbildung 15). So sieht man leicht, dass z.B. eine Aussage wie „Ich spreche nicht (Deutsch oder Englisch)“ dasselbe bedeutet wie „Ich spreche nicht Deutsch und ich spreche nicht Englisch“. Was jedoch ebenso auffällt ist, wie einfach eine Disjunktion durch eine Konjunktion ersetzt werden kann. Es gibt aber auch andere Möglichkeiten logische Verknüpfungen mittels anderen logischen Verknüpfungen auszudrücken. So kann man mittels folgenden Äquivalenzen eine äquivalente Formel bilden, welche nur die Junktoren und benutzt. Man nennt die Menge auch eine adäquate (ausreichende) Menge an Junktoren. Dies lässt jedoch nicht darauf schließen, dass irgendein einzelner Junktor ausreicht, um alle anderen Junktoren damit auszudrücken. Es gibt zwei Verknüpfungszeichen, die jeweils einzeln eine adäquate Menge von Verknüpfungszeichen darstellen. Diese sind NAND und NOR. So wie die Namen bereits verraten gilt für NAND: und für NOR gilt: . Die zugehörige Wahrheitstabelle sieht wie folgt aus (Abbildung 18): 10 Eine weitere häufig auftretende Eigenschaft von aussagenlogischen Formeln ist Dualität. Gegeben sei eine Formel, die nur die Junktoren , , ˄ und ˅ enthält. Unter dem Dual dieser Formel verstehen wir dann die Formel, die bei systematischer Vertauschung der Junktoren und der Wahrheitswerte ensteht. Dies wird in Ocaml wie folgt definiert und liefert dann für die Beispielformel <<p\/~p>>> die Formel <<p/\~p>> (Abbildung 18). Man kann leicht erkennen, dass dual(dual(p))= p ergeben muss. So kann man für die semantische Schlüsseleigenschaft von Dualität folgern: eval (dual p) v = not(eval p (not○v)) für jede Belegung v (wobei not○v = v‘ und v‘ gerade aus v ensteht, indem alle Belegungen negiert werden) . Das bedeutet, wenn p und q logisch äquivalent sind, gilt dies auch für dual p und dual q. Und wenn p eine Tautologie ist, dann genauso ¬(dual p). 11 6 Negationsnormalform Definition 6.1: Negationsnormalform (NNF) Eine Formel ist in Negationsnormalform (NNF), wenn in allen Unterformeln der Form ¬p die Formel p atomar ist (z.B. ¬A ˄ ¬B, aber nicht ¬(A ˄ B)) . Für viele Aufgaben ist es wichtig die aussagenlogischen Formeln so zu vereinfachen, dass unnötige Informationen aus den Formeln „verschwinden“. In der Algebra lässt sich zum Beispiel ein Ausdruck wie (x+y)(y-x)+y+x2 in die Normalform y2+y vereinfachen. Man sieht dann schnell, dass der Wert von x aus der ursprünglichen Formel eigentlich irrelevant ist. Genauso gibt es in der Aussagenlogik mehrere Möglichkeiten Formeln zu vereinfachen. Wenn die Wahrheitswerte true und false zusammen in einer Formel auftreten, gibt es immer die Möglichkeit mittels Tautologie auf eine einfachere Formel zurückzugreifen, z.B. . Diese und weitere Vereinfachungen werden wie folgt definiert und mittels einer buttom-up Rekursion implementiert (Abbildung 19). Wir bezeichnen atomare Formeln oder die Negation davon auch als Literale. Eine Formel ist in Negationsnormalform (NNF), wenn sie aus Literalen besteht, die nur durch die binären Junktoren ˅ und ˄ verbunden sind (und die Werte und und ) . Genauer enthalten diese Formeln die Junktoren nicht, und ¬ steht nur vor Atomen. Jede Formel lässt sich in eine logisch äquivalente Formel in NNF umwandeln. Dies geschieht mittels Anwendung der De Morganschen Regeln, die Regel der Doppelnegation, sowie weitere Tautologien. Dabei werden die Negationsoperator rekursiv Stufe für Stufe näher an die Atome gebracht, um die Form zu erfüllen (Abbildung 20). Um eine exponentielle Vergrößerung der Ausgabeformel in NNF zu verhindern (aus n Junktoren können im schlechtesten Fall 2n Junktoren in NNF werden), verwenden wir weiterhin den Biimplikationsoperator und die dazugehörige Tautologie . 12 . Wir bauen dann folgendermaßen die Vereinfachungen aus Abbildung 20 in unsere Funktion ein: let nenf fm = nenf(psimplify fm);;. 7 Zusammenfassung Nach einer allgemeineren Einführung die Aussagenlogik habe wir uns intensiver mit der Syntax und Semantik und insbesondere deren Implementierung in der funktionalen Programmiersprache Ocaml beschäftigt. Dabei haben wir die Parse- und Printfunktion näher durchleuchtet sowie nützliche Syntaxoperationen zum Umgang mit aussagenlogischen Formeln vorgestellt. Danach haben wir festgestellt, wie Wahrheitstabellen implementiert werden und auf das Problem der exponentiellen Vergrößerung hingewiesen. Daraufhin haben wir die Erfüllbarkeitsbegriffe definiert und jeweils an Beispielen vorgeführt. Wir haben gezeigt, dass aussagenlogische Formeln mittels den Prinzipien Substitution und Dualität vereinfacht werden können. Zusätzlich haben wir die de Morganschen Regeln kennengelernt, die die Grundlage für viele logische Umformungen darstellen. So verschiebt man mittels dieser Regeln bei der Negationsnormalform die Negationen nach innen und beseitigt dabei zugleich eventuell auftretende doppelte Negationen. Wir verbleiben mit einem gewecktem Interesse für erweiterte aussagenlogische Probleme und deren Lösung. 13 8 Quellen [1] John Harrison Propositional logic: The syntax of propositional logic, The semantics of propositional logic, Validity, satisfiability and tautology, The De Morgan laws, adequacy and duality, Simplification and negation normal form, Kapitel 2.1 bis einschließlich 2.5 aus Handbook of Practical Logic and Automated Reasoning, ISBN 9780521899574, Cambridge University Press, 2009 [2] Nicole Schweikardt Skript zur Vorlesung "Diskrete Modellierung", Goethe-Universität Frankfurt am Main, 2011. ku• k 14