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)