Interpreter für aussagenlogische Terme

Werbung
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
Herunterladen