Lehrstuhl für Softwaretechnik und Programmiersprachen Professor Dr. Michael Leuschel Einführung in die logische Programmierung - WS 2012/2013 Übungsblatt 5 Bei Fragen bezüglich der Übungen melden Sie sich bitte bei Sven Hager ([email protected]) Information Auf der Webseite der Veranstaltung können Sie sich Testfälle für die untenstehenden Aufgaben herunterladen. Noch eine Information Es ist durchaus NICHT verboten und sogar sinnvoll, sich eigene Testfälle zu überlegen. Aufgabe 1 - Interpreter für aussagenlogische Terme In dieser Aufgabe soll es darum gehen, elementare boolesche Logik in Prolog abzubilden. Es soll ∧ t = True ∧ f = False gelten. Weiterhin werden in dieser Aufgabe Konjunktionen, Disjunktionen und Negationen wie folgt betrachtet: ∧ and(X1 , X2 ) = X1 ∧ X2 ∧ or(X1 , X2 ) = X1 ∨ X2 ∧ not(X) = ¬X a) Eine WFF sei in dieser Aufgabe eine logische Formel, die sich aus den atomaren Symbolen t und f sowie den obigen Junktoren zusammensetzt. Schreiben Sie ein Prädikat wff(Formula), welches überprüft, ob Formula eine WFF ist. b) Implementieren Sie die Prädikate true(X) und false(X), welche boolesche Formeln der obigen Form auswerten können. Achten Sie darauf, dass Ihre Prädikate auch korrekte Belegungen für gegebene Formeln finden können. Beispiel: 1 2 ? - false ( or (X , Y )). X = Y, Y = f 1 Aufgabe 2 - Identifizieren und Simplifizieren von aussagenlogischen Termen In dieser Aufgabe geht es um das Erkennen und Manipulieren von aussagenlogischen Termen. Im folgenden sollen Prolog Atome atomare Aussagen in Aussagenlogik repräsentieren. Zum Beispiel soll der aussagenlogische Term a ∧ b ∨ c die Prolog-Darstellung or(and(a, b), c) haben. Implementieren Sie die folgenden Prädikate: a) is atomic expr(Term), welches erkennt, ob Term eine atomare logische Aussage ist b) is literal(Term), welches erkennt, ob Term ein Literal ist c) simplify expr(Term, Simplified), welches einen aussagenlogischen Term Term zu einem neuen aussagenlogischen Term Simplified vereinfacht. Nützliche Vereinfachungen sind 1. das Entfernen doppelter Negationen, d.h. ¬¬A = A 2. die De Morgan’schen Regeln, d.h. (a) ¬(A ∧ B) = ¬A ∨ ¬B (b) ¬(A ∨ B) = ¬A ∧ ¬B d) is clause(Term), welches testet, ob Term eine Klausel ist e) is horn clause(Term), welches testet, ob Term eine Horn-Klausel ist Aufgabe 3 - SLD-Bäume Betrachten Sie das folgende Prolog-Programm und zeichnen Sie die SLD-Bäume für die angebenen Anfragen. 1 a :a. 2 3 4 b :c, d. 5 6 b :e, f. 7 8 9 10 c. e. 11 12 13 f :c. 2 a) Anfrage: ?- b. b) Anfrage: ?- a. 3