Theoretische Informatik: Logik WS 2012/2013 Blatt 2 bis Montag, den 19.11.2012, 1415 Uhr, im Kasten neben den Postfächern (bei Raum 0409, Fachschaft) Es ist grundsätzlich erwünscht, dass die Übungsaufgaben in Gruppen (ca. 3-4 Studenten) bearbeitet werden, jedoch soll jeder seine Lösung selbst aufschreiben. Bitte schreiben Sie auf jedes Blatt Ihrer Lösung Ihren Namen, Ihre Matrikelnummer, Ihre Übungsgruppe und die Namen Ihrer Kommilitonen, welche an den Lösungen mitgearbeitet haben. Geben Sie bitte alle in einem Team erstellten Lösungen zusammengeheftet und die Lösungen nach Aufgaben getrennt ab. Abgabe: AUFGABE 1. Entscheiden Sie mittels Resolution, ob die Klauselmenge K1 und mittels des DPLL-Algorithmus, ob die Klauselmenge K2 erfüllbar sind. a) K1 = {{¬A, ¬C}, {A, ¬B}, {¬C}, {A, B, C}, {C, ¬A}} b) K2 = {{¬E, ¬C}, {¬B, C}, {¬C, E, F }, {¬E, ¬F }, {A, B, C, F }, {E, ¬F }} AUFGABE 2. Das n-Damen-Problem ist das folgende: Gegeben ist ein n ≥ 1. Auf ein Schachbrett der Größe n × n sollen n Schachfiguren vom Typ “Dame” platziert werden, so dass sich davon keine zwei gegenseitig nach den Regeln des Schachspiels schlagen können. Eine Dame kann beliebig weit in horizontaler, vertikaler oder diagonaler Richtung schlagen. a) Schreiben Sie in Java ein Programm, welches eine natürliche Zahl n in der Kommandozeile erwartet und mithilfe des SAT-Solvers SAT4J eine Lösung des n-Damen-Problems für dieses n berechnet. Der Aufruf für n = 8 z.B. soll folgendermaßen erfolgen. > java -cp org.sat4j.core.jar:. NQueens 8 Ihr Programm soll daraufhin eine mögliche Belegung des Schachbretts ausgeben, falls solch eine existiert. Gestalten Sie die Ausgabe so, dass mit menschlichem Blick leicht erkennbar ist, ob es sich um eine korrekte Lösung des n-Damen-Problems handelt, z.B. wie in dem Beispielprogramm in der Vorlesung gezeigt. b) Erweitern Sie Ihr Programm so, dass es bei Eingabe des Kommandozeilenparameters “all”, also z.B. bei > java -cp org.sat4j.core.jar:. NQueens 8 all alle möglichen Lösungen für das n-Damen-Problem mithilfe des SAT-Solvers SAT4J findet. Lassen Sie Ihr Programm am Ende auch ausgeben, wieviele Lösungen es gefunden hat. Im obigen Beispiel sollte Ihr Programm also 92 verschiedene Lösungen finden. Hinweis: Sie können die Methoden addClause und isSatisfiable in beliebiger Reihenfolge verwenden. Überlegen Sie sich, wie sich dies sinnvoll einsetzen lässt, um alle Lösungen zu berechnen. c) Erweitern Sie Ihr Programm so, dass es bei Eingabe des Kommandozeilenparameters “nosym”, also z.B. bei > java -cp org.sat4j.core.jar:. NQueens 8 nosym alle bis auf Spiegelungen und Drehungen verschiedenen Lösungen findet. In diesem Beispiel sollte Ihr Programm dann 12 Lösungen ausgeben. Überlegen Sie sich dazu, wie man nach Berechnung einer Lösung mithilfe des SAT-Solvers gleich ausschließen kann, dass danach nochmal eine Lösung berechnet wird, die aus der durch Drehen oder Spiegeln hervorgeht. Lassen Sie auch hier Ihr Programm am Ende die Anzahl der gefundenen Lösungen ausgeben. Hinweis: Für diese Aufgabe genügt es, ein Programm pro Gruppe abzugeben. Laden Sie bitte ihr Programm in Moodle, Kurs “Theoretische Informatik: Logik ”, hoch. AUFGABE 3. Sei ΦM,k die Formelmenge aus Präsenzaufgabe 2. Was kann man über die Erfüllbarkeit dieser Formelmenge Aussagen unter der Annahme, dass es für jedes n möglich ist, nur die Prozesse 1, . . . , n auf die k Prozessoren zu verteilen. Hinweis: Benutzen Sie für die Antwort den Kompaktheitssatz. Die folgenden Aufgaben sind nicht abzugeben. Mögliche Lösungen werden im Rahmen der Übung in Kleinstgruppen besprochen. Befassen Sie sich daher vorher mit den Aufgaben, um Lösungsansätze konstruktiv diskutieren zu können. PRÄSENZAUFGABE 1. Geben Sie jeweils an, ob die folgenden Aussagen richtig oder falsch sind und begründen Sie Ihre Antwort kurz in wenigen Sätzen. Widerlegen Sie falsche Aussagen durch Gegenbeispiele, und belegen Sie richtige Aussagen durch eine korrekte Argumentation. (a) Es gibt aussagenlogische Formeln ϕ und ψ, so dass ϕ erfüllbar ist, ψ unerfüllbar ist und ϕ → ψ allgemeingültig ist. (b) Es gibt aussagenlogische Formeln ϕ und ψ, so dass ϕ und ψ unerfüllbar sind und ϕ → ψ allgemeingültig ist. (c) Seien ϕ und ψ beliebige, aussagenlogische Formeln. Es gilt immer einer von drei Fällen: (1) ϕ → ψ ist allgemeingültig; (2) ψ → ϕ ist allgemeingültig; (3) ϕ ∧ ψ ist unerfüllbar. (d) Es gibt erfüllbare Formelmengen Φ und Ψ, so dass Φ ∪ Ψ unerfüllbar ist. (e) Angenommen, ϕ ≡SAT ψ und ϕ ist unerfüllbar. Dann gilt auch ϕ ≡ ψ. PRÄSENZAUFGABE 2. Man stelle sich folgendes Problem vor. Ein Computer soll gleichzeitig unendlich viele Prozesse verarbeiten. Dafür stehen aber nur endliche viele Prozessoren zur Verfügung, von denen jeder einzelne beliebig viele Prozesse parallel verarbeiten kann. Nun ist es leider so, dass sich einige Prozesse nicht mit gewissen anderen Prozessen ein und den selben Prozessor teilen können. Gesucht wird also eine Aufteilung der Prozesse auf die Prozessoren. Formal handelt es sich also um folgendes Problem. Zur Vereinfachung setzen wir die Prozesse mit natürlichen Zahlen gleich. Gegeben sind eine Anzahl k ≥ 1 an Prozessoren sowie eine Menge M von zwei-elementigen Teilmengen der natürlichen Zahlen. Diese repräsentieren diejenigen Paare von Prozessen, die nicht auf ein und demselben Prozessor laufen können. Gesucht ist eine Funktion f : N → {1, . . . , k}, so dass für alle {i, j} ∈ M gilt: f (i) 6= f (j). a) Sei M = {{1, 2}, {1, 3}, {2, 3}, {3, 4}, {3, 5}, {4, 5}}. Geben Sie die kleinste Anzahl k an Prozessoren an, die benötigt wird, um die Prozesse unter Beachtung der Menge M zu verarbeiten. Hinweis: Es empfiehlt sich, die Prozesse als Knoten eines ungerichteten Graphen und die Relation M als Kanten darin zu modellieren. Die Aufteilung auf die Prozessoren kann man dann als Färbung der Knoten des Graphen ansehen, so dass zwei durch eine Kante verbundene Knoten nicht dieselbe Farbe (also denselben Prozessor) erhalten dürfen. Ziel ist es im folgenden, das oben genannte Problem in Aussagenlogik zu modellieren. Dazu verwenden wir aussagenlogische Variablen Tij für i ≥ 1 und 1 ≤ j ≤ k, die intuitiv ausdrücken sollen, dass der Prozess i mit dem j-ten Prozessor verarbeitet wird. b) Geben Sie eine Formel ϕ!i an, die ausdrückt, dass der Prozess i auf genau einem der k Prozessoren läuft. c) Geben Sie eine Formel ϕ# i,j für i < j an, die ausdrückt, dass die Prozesse i und j auf dem selben der k Prozessoren verarbeitet wird. d) Modellieren Sie nun eine Formelmenge ΦM,k die besagt, dass sich unendlich viele Prozesse auf die k Prozessoren unter Berücksichtigung von M verteilen lassen.