SS 2008 - Universität Würzburg

Transcription

SS 2008 - Universität Würzburg
Universität Würzburg
Würzburg, 11.07.2008
Institut für Informatik
Prof. Dr. Dietmar Seipel
Klausur zur Vorlesung und Übung
Deduktive Datenbanken (SS 2008)
Datum:
Zeit:
Freitag, 11.07.2008
1330 –1500 Uhr
Name:
Vorname:
Matrikelnummer:
Geburtsdatum:
Bitte beachten Sie folgendes:
(1) Geben Sie auf dem Deckblatt Ihren Namen, Ihren Vornamen, Ihre Matrikelnummer und Ihr Geburtsdatum an.
(2) Die Klausur besteht aus 6 Aufgaben. Es sind maximal 63 Punkte zu erreichen. Zum Bestehen der Klausur sind 25 Punkte hinreichend. Überprüfen
Sie bitte die Vollständigkeit des Ihnen vorliegenden Exemplars.
(3) Die Reihenfolge der Bearbeitung ist unerheblich. Teillösungen werden gewertet. Es wird nicht erwartet, daß alle Aufgaben bearbeitet werden.
(4) Es sind keine Hilfsmittel zugelassen.
Aufgabe
1
2
3
4
5
6
Gesamtpunktzahl
a
—
/5
/5
/3
/4
/3
b
—
/3
/5
/4
/4
/5
c
—
/2
—
/4
/6
—
Σ
/ 10
/ 10
/ 10
/ 11
/ 14
/8
/ 63
Universität Würzburg
Würzburg, 11.07.2008
Institut für Informatik
Prof. Dr. Dietmar Seipel
Klausur zur Vorlesung und Übung
Deduktive Datenbanken (SS 2008)
Aufgabe 1 (SLD–Resolution)
Gegeben ist das bekannte Logikprogramm zu Verwandtschaftsbeziehungen:
sibling(X , Y ) ← parent(X , Z ) ∧ parent(Y , Z ) ∧ X 6= Y,
cousin(X , Y ) ← parent(X , X ′ ) ∧ cousin(X ′ , Y ′ ) ∧ parent(Y , Y ′ ),
cousin(X , Y ) ← parent(X , X ′ ) ∧ sibling(X ′, Y ′ ) ∧ parent(Y , Y ′ ),
parent(a, b), parent(b, c), parent(d , e), parent(e, c).
Beantworten Sie durch SLD–Resolution die Anfrage:
?– cousin(a, Y ).
Geben Sie dazu einen vollständigen SLD–Widerlegungsbaum und die Substitutionen in den einzelnen Resolutionsschritten an.
Verwenden Sie, falls nötig, die aus der Vorlesung bekannte Selektionsfunktion sl
von Prolog.
(10 Punkte)
Aufgabe 2 (TP –Operator)
Betrachten Sie das folgende – im Vergleich zu Aufgabe 1 bei den Fakten etwas
erweiterte – Logikprogramm P zu Verwandtschaftsbeziehungen:
sibling(X , Y ) ← parent(X , Z ) ∧ parent(Y , Z ) ∧ X 6= Y,
cousin(X , Y ) ← parent(X , X ′ ) ∧ cousin(X ′ , Y ′ ) ∧ parent(Y , Y ′ ),
cousin(X , Y ) ← parent(X , X ′ ) ∧ sibling(X ′, Y ′ ) ∧ parent(Y , Y ′ ),
parent(a, b), parent(b, c), parent(d , e), parent(f , e), parent(e, c).
a) Berechnen Sie für P die ordinalen Potenzen TP ↑ n und den kleinsten
Fixpunkt TP ↑ ω.
b) Geben Sie das minimale Modell MP sowie ein weiteres Modell an.
c) Geben Sie MP,Q für die Anfrage Q =← cousin(a, Y ) an.
(5+3+2 Punkte)
Aufgabe 3 (Magic Sets–Methode)
Betrachten Sie folgendes Logikprogramm P :
sibling(X , Y ) ← parent(X , Z ) ∧ parent(Y , Z ) ∧ X 6= Y,
cousin(X , Y ) ← parent(X , X ′ ) ∧ cousin(Y ′ , X ′ ) ∧ parent(Y , Y ′ ),
cousin(X , Y ) ← parent(X , X ′ ) ∧ sibling(X ′, Y ′ ) ∧ parent(Y , Y ′ ),
parent(a, b), parent(b, c), parent(d , e), parent(e, c).
Hierbei sind parent und 6= extensionale Prädikate. Beachten Sie, daß – anders als
in den vorherigen Aufgaben – die erste Regel für cousin/2 nicht stabil ist.
a) Bestimmen Sie das augmentierte Programm Ad(P, Q) für die Anfrage
Q =← cousin <b,f > (a, Y ).
b) Führen Sie die Magic Sets–Transformation zu Ad(P, Q) durch.
(5+5 Punkte)
Aufgabe 4 (Stratifizierung und perfekte Modelle)
Gegeben sei das Logikprogramm
P = { flies(X ) ← bird (X ) ∧ not abnormal (X ),
abnormal (X ) ← penguin(X ),
bird (tweety), bird (toni ),
penguin(tweety) }.
a) Geben Sie den erweiterten Abhängigkeitsgraphen GPed und zwei Stratifizierungen mit minimaler Anzahl von Strata an. Begründen Sie die Minimalität
Ihrer Stratifizierungen.
b) Bestimmen Sie das perfekte Modell mit Hilfe einer stratifizierten Bottom–
Up–Auswertung.
c) Bestimmen Sie alle minimalen Modelle von P .
(3+4+4 Punkte)
Aufgabe 5 (Listen–Algorithmen in Prolog)
a) Implementieren Sie ein Prädikat reverse/2, das eine Liste umkehrt.
?- reverse([a,a,b,c], Y).
Y = [c,b,a,a]
Yes
b) Implementieren Sie ein Prädikat minimum/3, welches beim Aufrufmuster
minimum(+Xs, +Ys, -Zs) zu zwei gleichlangen Listen Xs und Ys von Zahlen eine Liste Zs berechnet, die an jeder Stelle von Zs das Minimum der
beiden Zahlen an den entsprechenden Stellen von Xs und Ys berechnet.
?- minimum([2,1,3], [1,4,2], Zs).
Zs = [1, 1, 2]
Yes
c) Implementieren Sie ein Prolog–Prädikat number of variables/2, welches beim Aufrufmuster number of variables(+Term, -Variables) die
Anzahl der in Term vorkommenden Variablen mit Wiederholungen berechnet. Dabei können Sie mit var(X) testen, ob X eine Variable ist.
(4+4+6 Punkte)
Aufgabe 6 (Verschiedenes)
a) Unifizieren Sie – falls möglich – die beiden Terme
– p(X, f (X, Y )) und p(f (a, b), Z) bzw.
– p(X, g(X, Y )) und p(h(Z), Z).
b) Transformieren Sie das folgende DataLog–Programm in die Relationenalgebra:
P = { p(X, Y ) ← q(X, Z) ∧ p(Z, Y ),
p(X, Y ) ← a(X, Y ),
q(X, Y ) ← b(X, Z) ∧ c(Y, Z) }.
(3+5 Punkte)