Kann jemand von euch in Prolog programmieren?

Schäfchen

Copilotin
Huhu,

ich muß bis 27.11. was in Prolog implementieren und brauch noch ein paar Ideenanstöße bzw. Ratschläge. Hat jemand sowas auf Lager?

fragt
Andrea
 

Kathi

Dino
Hallo Andrea,

ich bin zwar schon eine ganze Weile raus, aber vielleicht kann ich dir ja helfen oder habe zumindest Möglichkeiten dir Hilfe zu besorgen. Schreibst du mir, was du brauchst?

Liebe Gruß
 

Schäfchen

Copilotin
Mischa, damit krieg ich aber keine Prüfungszulassung ...

Kathi, ich schik dir das mal per Mail. Ich kriegs aus *.pdf hier nicht reinkopiert.
 

Pilot

Bruchpilot
Hallo Kathi,

ich kann aber aus dem PDF kopieren und so hier der wesentliche Teil der Aufgabe. Andrea will aber keine fertige Loesung, sondern eher Loesungsansaetze und Hilfestellung.

Ach ja - ich hab ProLOG auch noch nie gemacht.

Dieses ¨Ubungsblatt beschreibt die erste Praktikumsaufgabe. Sie sollen dabei den Davis-
Putnam-Logemann-Loveland–Algorithmus (DPLL) zur Berechnung der Modelle aussagenlogischer
Formeln in konjunktiver Normalform (engl. Conjunctive Normal Form; CNF)
in PROLOG implementieren.
Folgende Begriffe spielen im Kontext dieser Aufgabe wichtige Rollen:
Aussagenlogische Variable: Eine aussagenlogische Variable kann mit den Werten true
und false belegt werden.
Literal: F¨ur eine aussagenlogische Variable X sind X und ¬X Literale. Das positive
Literal X ist in einer Interpretation I wahr, wenn X in I den Wert true hat. Analog
ist das negative Literal ¬X in I wahr, wenn X in I den Wert false hat.
Klausel: Eine Klausel ist eine Disjunktion von Literalen. Wir repr¨asentieren eine Klausel
C = l1 _ . . . _ ln durch die Menge {l1, . . . , ln} der in C enthaltenen Literale.
Konjunktive Normalform (CNF): Eine aussagenlogische Formel ist in konjunktiver
Normalform, wenn F eine Konjunktion von Klauseln ist. Wir repr¨asentieren eine
aussagenlogische Formel F = C1 ^ . . . ^ Cm in CNF durch die Menge {C1, . . . ,Cm} der in F enthaltenen Klauseln.
Partielle Interpretation: Eine partielle Interpretation I ist eine Menge von Literalen.
Eine aussagenlogische Variable X hat in I den Wert true (false), wenn X 2 I
(¬X 2 I). Eine partielle Interpretation ist bzgl. einer aussagenlogischen Formel F
total, wenn jede in F vorkommende Variable belegt ist.
Modell: Eine totale Interpretation I einer aussagenlogischen Formel F ist ein Modell
von F, wenn F bzgl. I wahr ist. F¨ur aussagenlogische Formeln F = {C1, . . . ,Cm} in CNF heißt das: In jeder Klausel Ci = {l1, . . . , ln} 2 F gibt es ein Literal lj 2 Ci,
sodass lj 2 I.
Nachfolgend geben wir DPLL als Entscheidungsalgorithmus f¨ur aussagenlogische Erf¨ullbarkeit
an. Die Eingaben des Algorithmus sind eine partielle Interpretation I, repr¨asentiert
als Menge von Literalen, sowie eine aussagenlogische Formel F in CNF, repr¨asentiert als
Menge von Klauseln.
Die Grundidee von DPLL ist wie folgt:
1. L¨osche alle in I falschen Literale aus den Klauseln von F.
2. Sollte eine Klausel leer werden, gebe false zur¨uck.
3. F¨uge Literale, die in Klauseln der L¨ange 1 vorkommen, zu I hinzu.
4. Wenn I total ist, gebe true zur¨uck.
5. Ansonsten w¨ahle eine unbelegte Variable X aus F und belege X nacheinander mit
true und false. Wenn entweder I [ {X} oder I [ {¬X} zu einem Modell von F
erweitert werden kann, gebe true zur¨uck, sonst false.
Die obigen Schritte 1–3 werden Unit-Propagation genannt. DPLL basiert auf deterministischer
Inferenz, Unit-Propagation, und nicht-deterministischer Suche (Schritt 5):
DPLL(I, F)
UnitPropagation(I, F)
if ; 2 F then return false
if there is a variable X in F such that neither X nor ¬X is in I then
if DPLL(I [ {X}, F) then return true
else return DPLL(I [ {¬X}, F)
else return true
UnitPropagation(I, F)
do
F0 F
for every clause C 2 F do
C0 C \ ({X | ¬X 2 I} [ {¬X | X 2 I})
F (F \ {C}) [ {C0}
if |C0| = 1 then I I [ {C0}
end for
while F 6= F0
Ihre Aufgabe besteht im Folgenden darin, DPLL in PROLOG zu implementieren. Auf
derWebseite zu den ¨Ubungen finden sie als Grundger¨ust die Datei dpll.pl. In dieser Datei
werden Eingabe- und Ausgabeformate sowie einige richtig zu beantwortende Testanfragen
vorgegeben. Anstelle eines Entscheidungsalgorithmus wird DPLL dabei so aufgefasst, dass
die Modelle einer aussagenlogischen Formel F in CNF berechnet werden.

Gruss,
Ingo
 
Oben