Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Βάσεις Γνώσεων Σχεσιακή άλγεβρα, κατηγοριοποίηση και αποτίμηση προγραμμάτων στην Datalog Πάνος Βασιλειάδης Μάιος 2003

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Βάσεις Γνώσεων Σχεσιακή άλγεβρα, κατηγοριοποίηση και αποτίμηση προγραμμάτων στην Datalog Πάνος Βασιλειάδης Μάιος 2003"— Μεταγράφημα παρουσίασης:

1 Βάσεις Γνώσεων Σχεσιακή άλγεβρα, κατηγοριοποίηση και αποτίμηση προγραμμάτων στην Datalog Πάνος Βασιλειάδης Μάιος 2003

2 2 Περιεχόμενα Built-ins Σχεσιακή άλγεβρα και Datalog Απλοϊκή αποτίμηση (Naïve evaluation) Κατηγοριοποίηση των προγραμμάτων Datalog Ημι-απλοϊκή αποτίμηση (Semi-naïve evaluation)

3 3 Built-in Predicates Μπορούμε να επεκτείνουμε τη Datalog με ενσωματωμένα predicates του τύπου: >, <, , , =,  Για παράδειγμα, brother(X,Y):- parent(X,Z),parent(Y,Z),X  Y

4 4 Built-in Predicates Τα built-in predicates μπορούν να θεωρηθούν: Τμήματα της EDB, που δεν είναι αποθηκευμένα με τον κλασσικό τρόπο στη ΒΔ Predicates που γράφονται με infix notation --ήτοι, αντί για  (Χ,Υ) γράφουμε Χ  Υ Το πρόβλημα με τα built-in predicates είναι ότι υπονοούν άπειρες σχέσεις. Αυτό έχει ως αποτέλεσμα ότι κάποια queries μπορεί να έχουν μη πεπερασμένο αποτέλεσμα

5 5 Built-in Predicates simpleCitizen(X):- president(Y),X  Y Στο παράδειγμα, έστω ότι το president  EDB. H παραγωγή των facts που ανήκουν στην simpleCitizen, παράγει άπειρα facts (υποθέτωντας ότι το domain των strings είναι άπειρο) Κατά συνέπεια πρέπει να βρούμε μηχανισμούς για να αποτρέπουμε τέτοια φαινόμενα. Ασφάλεια (safety) είναι η ιδιότητα ενός προγράμματος να παράγει πεπερασμένα facts.

6 6 Ασφάλεια για Built-in Predicates Αρκεί κάθε μεταβλητή που εμφανίζεται σε ένα built-in predicate στο body ενός κανόνα 1.Είτε να εμφανίζεται σε ένα «κανονικό» predicate στο body του κανόνα, 2.Είτε να σχετίζεται μέσω ισότητας με μια μεταβλητή που πληροί την παραπάνω ιδιότητα (1), 3.Είτε να ισούται με μια σταθερή τιμή r(X,V) :- p(a,X),q(Z,T),T=4,X=Z,V=X Οι μεταβλητές αυτές ονομάζονται limited

7 7 Ασφαλείς κανόνες simpleCitizen(X):- president(Y),citizen(X),X  Y simpleCitizen(X):- president(Y),citizen(X),X=Z, Y=V, Z  V Υπάρχουν και επεκτάσεις με αριθμητικά built-ins και τους ίδιους κανόνες ασφάλειας, π.χ., Y=V+Ζ Υπάρχει και μια επέκταση των κανόνων ασφάλειας: εκτός από ισότητα, αρκεί και διάστημα τιμών, π.χ., 4  Υ, Υ  8

8 8 Datalog και Σχεσιακή Άλγεβρα Μπορούμε να δείξουμε την ισοδυναμία Datalog και ενός υποσυνόλου της σχεσιακής άλγεβρας Θα δείξουμε πώς μια έκφραση σε σχεσιακή άλγεβρα μεταφράζεται σε Datalog … και το αντίστροφο...

9 9 Σχεσιακή Άλγεβρα -> Datalog Ε=Ε1  Ε2. Αν θεωρήσουμε ότι τα Ε, Ε1 και Ε2 έχουν arity n, μπορούμε να γράψουμε απλά: e(X 1,…,X n ):- e 1 (X 1,…,X n ) e(X 1,…,X n ):- e 2 (X 1,…,X n ) Ε=Ε1  Ε2. Αν θεωρήσουμε ότι τα Ε, Ε1 και Ε2 έχουν arity n+m, n, m, αντίστοιχα, μπορούμε να γράψουμε: e(X 1,…,X n+m ):- e 1 (X 1,…,X n ),e 2 (X n+1,…,X n+m )

10 10 Σχεσιακή Άλγεβρα -> Datalog Ε=π i1,i2,…,ik (Ε1). Αν θεωρήσουμε ότι το Ε1 έχει arity n, μπορούμε να γράψουμε : e(X i1,…,X iκ ):- e 1 (X 1,…,X n ) Ε=σ F (Ε1). Αν υποθέσουμε ότι η F είναι της μορφής XθY, όπου τα Χ και Υ είναι terms (variables ή constants), και θ κάποιο built-in, μπορούμε να γράψουμε: e(X 1,…,X n ):- e 1 (X 1,…,X n ), XθY (προφανώς, ο κανόνας πρέπει να είναι ασφαλής)

11 11 Παράδειγμα Έστω η έκφραση: canBuy(PID,ItemID) = likes(PID,ItemID) – [broken(ItemID)  π PID (likes(PID,ItemID))] το π PID (likes(PID,ItemID)) δίνει l1(P) :- likes(P,I) το broken(ItemID)  π PID (likes(PID,ItemID)) δίνει lb(P,I) :- b(I),l1 (P) Για την πλήρη έκφραση έχω: canBuy(P,I) :- likes(P,I),  lb(P,I) Προσοχή: η δοθείσα αλγεβρική έκφραση τελικά υπολογίζεται από ένα πρόγραμμα Datalog με τα τρία αυτά rules που συντάξαμε.

12 12 Datalog -> Σχεσιακή Άλγεβρα Κάθε clause στην Datalog μπορεί να μεταφρασθεί σε μια πρόταση σε σχεσιακή άλγεβρα Έστω μια Datalog clause C p(α 1,…,α n ):- q 1 (β 1,…,β k ),…,q m (β s,…,β h ) Θα δούμε ότι μπορεί να μετατραπεί σε μια έκφραση της μορφής Expr(Q 1,…,Q m )  P Με Q i (κεφαλαία γράμματα) αναφερόμαστε στον πίνακα που αντιστοιχεί στο predicate q i.

13 13 Αλγόριθμος Datalog2RA(C) INPUT: a clause C LHS :- RHS of the form p(α 1,…,α n ):- q 1 (β 1,…,β k ),…,q m (β s,…,β h ) OUTPUT: μια έκφραση Expr(Q 1,…,Q m ) με τους πίνακες που αντιστοιχούν στα predicates του clause BEGIN εφάρμοσε τον κανόνα R1 στο C END R1(C) BEGIN 1. Για κάθε σταθερή τιμή α στο head, φτιάξε μια dummy μεταβλητή Χ, βάλτη στη θέση της α, και πρόσθεσε eq(X,α) στο body ; 2. RETURN π pos(1),…,pos(n) R2(RHS) END R2(C) BEGIN 1. Για κάθε σταθερή τιμή α στο body, στη θέση $i πρόσθεσε μια επιλογή σ $i=α αντικαθιστώντας το α με μια dummy μεταβλητή 2. Για κάθε μεταβλητή Y που συναντάται 2 φορές στο body, στις θέσεις $i,$j πρόσθεσε μια επιλογή σ $i=$j αντικαθιστώντας το Y σε μία εκ των δύο θέσεων, με μια dummy μεταβλητή Χ ; 3. Μετέτρεψε τον κανόνα σε  i=1..m Q i ; 4. Σπρώξε τα EQ στις επιλογές όπου γίνεται; 5. Γράψε την έκφραση ως Expr(Q 1,…,Q m )  P END

14 14 Παράδειγμα p(X,X,Z) :- s(X,Y), r(Y,a,Z) R1: π $1,$1,$5 R2[s(X,Y), r(Y,a,Z)] $1 $2 $3 $4 $5 R2: π $1,$1,$5 σ $4=α  $2=$3 R2[s(Ν1,Ν2),r(Y,Ν4,Z) ] R2: π $1,$1,$5 σ $4=α  $2=$3 (S  R) R2: π $1,$1,$5 σ $4=α R2[S  $2=$1 R] π $1,$1,$5 σ $4=α (S  $2=$1 R)  P

15 15 Παράδειγμα p(b,X,Z) :- s(X,Y), r(Y,a,Z) R1: p(N,X,Z) :- s(X,Y), r(Y,a,Z),eq(N,b) R1: π $6,$1,$5 R2[s(X,Y), r(Y,a,Z),eq(N,b)] R2:π $6,$1,$5 σ $4=α  $2=$3 R2[s(Ν1,Ν2),r(Y,Ν4,Z),eq(N,b) ] R2: π $6,$1,$5 σ $4=α  $2=$3 (S  R  EQ ) R2: π ’b’,$1,$5 σ $4=α R2[S  $2=$1 R] π ’b’,$1,$5 σ $4=α (S  $2=$1 R)  P

16 16 Datalog -> Σχεσιακή Άλγεβρα Στο τέλος, όλες οι εκφράσεις που αφορούν το ίδιο predicate P Expr i (Q 1,…,Q m )  P ενσωματώνονται σε μία αλγεβρική έκφραση P = Expr 1 (Q 1,…,Q m )  …  Expr s (Q 1,…,Q m ) Η εν λόγω έκφραση λέει ότι το σύνολο των facts του P που μας αφορούν είναι ακριβώς και μόνο εκείνα που παράγονται από το πρόγραμμά μας.

17 17 Datalog -> Σχεσιακή Άλγεβρα Παρατηρήστε επίσης ότι ΔΕΝ χρησιμοποιήσαμε τον αλγεβρικό τελεστή αφαίρεσης για να περιγράψουμε το τυχαίο πρόγραμμα Datalog. Η σχεσιακή άλγεβρα χωρίς αφαίρεση ονομάζεται positive relational algebra -- RA + και αποδεικνύεται ότι είναι ισοδύναμη με την Datalog χωρίς αναδρομή και χωρίς άρνηση

18 18 Datalog & Σχεσιακή Άλγεβρα Ε=Ε1-Ε2. Όταν θα εισάγουμε την άρνηση στην Datalog θα μπορούμε να γράψουμε: e(X 1,…,X n ):- e 1 (X 1,…,X n ),  e 2 (X 1,…,X n )

19 19 Μέθοδοι Αποτίμησης Απλοϊκή (Naïve) Ημι-απλοϊκή (Semi-Naïve) Ερώτηση – Υποερώτηση (Query-Subquery) Μαγικά Σύνολα (Magic Sets)

20 20 Naïve Evaluation Strategy Η απλοϊκή μέθοδος είναι μια bottom-up παραλλαγή του υποδειγματικού τρόπου παραγωγής που εξετάσαμε την προηγούμενη φορά Υπάρχουν δύο βαριάντες, η Jacobi και η Gauss- Seidel Για επανάληψη δίνουμε και τον γενικό αλγόριθμο bottom-up υπολογισμού, που είχαμε πει...

21 21 Αλγόριθμος Infer(S) INPUT: ένα πεπερασμένο σύνολο S από rules και ground facts OUTPUT: όλα τα ground facts που παράγονται από την εφαρμογή του EP, ήτοι, το cons(S) [ΠΡΟΣΟΧΗ: όχι σε ένα βήμα, αλλά όλα] BEGIN old  {} ; new  S ; WHILE new  old DO { old  new ; new  new  INFER1(new); } RETURN all ground facts of new END

22 22 Αλγόριθμος Jacobi(S) INPUT: ένα πεπερασμένο σύνολο S από rules και ground facts (EDB) OUTPUT: όλα τα ground facts που αντιστοιχούν στα predicates του S R 1,…,R n BEGIN FOR i := 1 TO n DO R i ={}; DO{ cond  true; FOR i := 1 TO n DO Rold i =R i ; FOR i := 1 TO n DO{ R i = evaluate R i over [Rold 1,…, Rold n ] IF Rold i !=R i THEN cond  false } } WHILE cond != true; FOR i := 1 TO n DO RETURN(R i ); END

23 23 Αλγόριθμος Jacobi(S) Ο αλγόριθμος κάθε φορά έχει μια κατάσταση, η οποία αποτελείται από τις εγγραφές που υπολογίσαμε για κάθε R i Σε κάθε iteration, έστω k, του αλγόριθμου (μέσα στο DO..WHILE) οι νέες τιμές για το predicate R i προκύπτουν από το πρόγραμμα, το EDB και τις τιμές των όλων των R j στο προηγούμενο iteration (για j από 1 ως n), τις οποίες και έχουμε κρατήσει στα Rold j Ο αλγόριθμος σταματά όταν Rold i = R i (ήτοι, δεν παρήχθησαν νέα facts) για όλα τα R i

24 24 1o Παράδειγμα R1: anc(X,Y) :- par(X,Y) R2: anc(X,Y) :- anc(X,Z),par(Z,Y) EDB par(δευκαλίων,έλλην) par(έλλην,ξούθος) par(έλλην,δώρος) par(ξούθος,αχαιός) par(έλλην,αίολος) par(ξούθος,ίων)

25 25 1o Παράδειγμα 1ο iteration (Anc 1 είναι το R i = ότι έχουμε στην ΕDB) Anc 1 = { (δευκαλίων,έλλην), (έλλην,αίολος), (έλλην,δώρος), (έλλην,ξούθος), (ξούθος,αχαιός), (ξούθος,ίων)} 2ο iteration (Rold i = Anc 1 και παράγουμε …) Anc 2 = Anc 1  {(δευκαλίων,αίολος), (δευκαλίων,δώρος), (δευκαλίων,ξούθος), (έλλην,αχαιός),(έλλην,ίων)} 3ο iteration Anc 3 = Anc 2  {(δευκαλίων,αχαιός), (δευκαλίων,ίων)} 4ο iteration (όπου σταματάμε) Anc 4 = Anc 3

26 26 2o Παράδειγμα (Same Generation “Cousins”) R1: sgc(X,Y) :- eq(X,Y) R2: sgc(X,Y) :- par(X,X 1 ),sgc(X 1,Y 1 ),par(Y,Y 1 ) G1: ? – sgc(δώρος,Χ) EDB: par και eq eq(α,β) έχει το ρόλο της ισότητας, π.χ., eq(ίων,ίων) έλλην δώρος αίολος ξούθος θυία ίων αχαιός μακεδνός δευκαλίων

27 27 2o Παράδειγμα (Same Generation “Cousins”) Πρώτα θα υπολογίσουμε όλα τα παραγόμενα facts από το παραπάνω πρόγραμμα Μετά θα απαντήσουμε και τον goal που ρωτάει για τους συγγενείς ίδιας γενιάς του Δώρου

28 28 2o Παράδειγμα 1ο iteration (Sgc 1 είναι το R i = ότι έχουμε στην ΕDB) Sgc 1 = { (δευκαλίων, δευκαλίων), (έλλην, έλλην), …, (ίων,ίων)} G1 = {} 2ο iteration (Rold i = Sgc 1 και παράγουμε αδέρφια) Sgc 2 = Sgc 1  {(θυία,έλλην), (έλλην, θυία),(δώρος,αίολος), (αίολος,δώρος),(δώρος,ξούθος), (ξούθος,δώρος),(αίολος,ξούθος), (ξούθος,αίολος),(αχαιός,ίων),(ίων,αχαιός)} G1 = {} Ήδη παρατηρούμε (α) τις διπλοεγγραφές και (β) ότι ενώ ήδη θα μπορούσαμε να έχουμε απαντήσεις στην ερώτησή μας, πρέπει να περιμένουμε να τρέξουν όλοι οι κανόνες

29 29 2o Παράδειγμα 3ο iteration (Rold i = Sgc 2 και παράγουμε ξαδέρφια) Sgc 3 = Sgc 2  {(δώρος,μακεδνός), (μακεδνός,δώρος), (μακεδνός,ξούθος), (ξούθος,μακεδνός),(αίολος,μακεδνός), (μακεδνός,αίολος)} G1 = {} 4ο iteration (σταματάμε) Sgc 4 = Sgc 3 G1 = {ότι κάνει unify με το sgc(δώρος,Χ)} = {(δώρος,δώρος), (δώρος,αίολος), (δώρος,ξούθος), (δώρος,μακεδνός)}

30 30 Αλγόριθμος Gauss-Seidel(S) INPUT: ένα πεπερασμένο σύνολο S από rules και ground facts (EDB) OUTPUT: όλα τα ground facts που αντιστοιχούν στα predicates του S R 1,…,R n BEGIN FOR i := 1 TO n DO R i ={}; DO{ cond  true; FOR i := 1 TO n DO{ Rold i =R i ; R i = evaluate R i over [R 1,…, R i-1, Rold i …, Rold n ] IF Rold i !=R i THEN cond  false } } WHILE cond != true; FOR i := 1 TO n DO RETURN(R i ); END

31 31 Αλγόριθμος Gauss-Seidel(S) Λίγο πιο έξυπνος από τον Jacobi. Σε κάθε iteration, έστω k, του αλγόριθμου (μέσα στο DO..WHILE) οι νέες τιμές για το predicate R i προκύπτουν από το πρόγραμμα, το EDB και τις νέες τιμές των R j που υπολογίσαμε στο τρέχον iteration (για j από 1 ως i-1), τις οποίες και έχουμε κρατήσει στα R j τις τιμές των R j στο προηγούμενο iteration (για j από i ως n), τις οποίες και έχουμε κρατήσει στα Rold j Ο αλγόριθμος σταματά όταν Rold i = R i (ήτοι, δεν παρήχθησαν νέα facts) για όλα τα R i

32 32 Κατηγοριοποίηση των κανόνων Datalog Έστω ένα πρόγραμμα Datalog P όπου ο κάθε κανόνας είναι της μορφής : p(α 1,…,α n ):- q 1 (β 1,…,β k ),…,q m (β s,…,β h ) Έστω X P =(p 1,…,p r ) το σύνολο των IDB predicates του P. Θα δώσουμε χαρακτηρισμούς για τα διάφορα predicates, κανόνες και το πρόγραμμα, οι οποίοι είναι απαραίτητοι στη συνέχεια.

33 33 Γράφος εξάρτησης Ο γράφος εξάρτησης (dependency graph) του P είναι ένα κατευθυνόμενος γράφος G P = του οποίου Οι κόμβοι N είναι τα predicates του IDB, ήτοι p i  X P Μια ακμή e  E ορίζεται ως εξής: e=, τ.ώ., p j εμφανίζεται στο body ενός από τους rules που ορίζουν το p i ( η ακμή έχει φορά head -> body )

34 34 Παράδειγμα Έστω το παρακάτω παράδειγμα, όπου τα p i ανήκουν στο IDB και τα c i ανήκουν στο EDB. p1(X,Y) :- c1(X,Y) p1(X,Y) :- p1(X,Z),p3(Z,Y) p1(X,Y) :- p2(X,Y) p2(X,Y) :- c3(X,Y) p2(X,Y) :- p1(X,Z),p3(Z,Y) p3(X,Y) :- c4(X,Y) p3(X,Y) :- p3(X,Z),c2(Z,Y)

35 35 Παράδειγμα Οι κόμβοι ανήκουν ΜΟΝΟ στο IDB και οι ακμές κατευθύνονται από το head προς το body. p1(X,Y) :- c1(X,Y) p1(X,Y) :- p1(X,Z),p3(Z,Y) p1(X,Y) :- p2(X,Y) p2(X,Y) :- c3(X,Y) p2(X,Y) :- p1(X,Z),p3(Z,Y) p3(X,Y) :- c4(X,Y) p3(X,Y) :- p3(X,Z),c2(Z,Y) p1p1 p3p2

36 36 Παράδειγμα – Elmasri & Navathe Στο βιβλίο, οι κόμβοι ανήκουν ΚΑΙ στο ΕDB. Ο γράφος αλλάζει, αλλά όχι ουσιαστικά. p1(X,Y) :- c1(X,Y) p1(X,Y) :- p1(X,Z),p3(Z,Y) p1(X,Y) :- p2(X,Y) p2(X,Y) :- c3(X,Y) p2(X,Y) :- p1(X,Z),p3(Z,Y) p3(X,Y) :- c4(X,Y) p3(X,Y) :- p3(X,Z),c2(Z,Y) p1p1 p3p2 c1c1 c2 c3 c4

37 37 Αναδρομικοί κανόνες Ένας κανόνας p(α 1,…,α n ):- q 1 (β 1,…,β k ),…,q m (β s,…,β h ) είναι αναδρομικός (recursive) αν έστω και ένα από τα q i είναι το p. Π.χ., O anc(X,Y) :- anc(X,Z),par(Z,Y) είναι αναδρομικός, ενώ ο aunt(X,Z):- par(X,Y),sister(Y,Z) δεν είναι.

38 38 Αναδρομικό πρόγραμμα Ένα πρόγραμμα είναι αναδρομικό αν ο γράφος εξάρτησης περιέχει έστω και ένα κύκλο Προφανώς, αν έστω και ένας από τους κανόνες είναι αναδρομικός, έχω αυτόματα κύκλο. Μπορώ κάλλιστα, όμως, να έχω μη αναδρομικούς κανόνες και αναδρομικό πρόγραμμα

39 39 Οι κόμβοι p,r,w αντιστοιχούν σε predicates του IDB -- οι υπόλοιποι σε predicates του EDB. p(X,Y) :- r(X,Z),t(X,X) p(X,Y) :- w(X,Y) r(X,Y) :- t(X,Y) r(X,Y) :- s(W,X),p(W,Y) w(X,Y) :- s(W,X),t(Z,Y) Παράδειγμα p wr

40 40 Αναδρομικά predicates Ένα predicate είναι αναδρομικό αν ο κόμβος που το αναπαριστά περιέχεται έστω και σε ένα κύκλο Δύο predicates είναι αμοιβαία αναδρομικά (mutually recursive) αν οι κόμβοι που τα αναπαριστούν περιέχονται στον ίδιο κύκλο Π.χ., στο προηγούμενο παράδειγμα, τα p και r είναι αμοιβαία αναδρομικά, ενώ το w δεν είναι αναδρομικό

41 41 Γραμμικοί κανόνες Ένας κανόνας p(α 1,…,α n ):- q 1 (β 1,…,β k ),…,q m (β s,…,β h ) είναι γραμμικός (linear) σε σχέση με το q i αν υπάρχει το πολύ μία εμφάνιση του q i στο body. Π.χ., O anc(X,Y) :- anc(X,Z),par(Z,Y) είναι γραμμικός σε σχέση με το anc, ενώ ο anc(X,Z):- anc(X,Y),anc(Y,Z) δεν είναι.

42 42 Γραμμικοί κανόνες Ένας κανόνας p(α 1,…,α n ):- q 1 (β 1,…,β k ),…,q m (β s,…,β h ) είναι γραμμικός (linear) αν υπάρχει το πολύ ένα q i στο body που να είναι αμοιβαία αναδρομικό με το p. Δεν απαγορεύεται το p να είναι αμοιβαία αναδρομικό με τον εαυτό του (ήτοι, το p να εμφανίζεται και στο body).

43 43 Γραμμικοί κανόνες Κάποιοι κανόνες μπορεί να είναι και γραμμικοί και αναδρομικοί Π.χ., O anc(X,Y) :- anc(X,Z),par(Z,Y) είναι γραμμικός σε σχέση με το anc, αλλά και αναδρομικός ο anc(X,Z):- anc(X,Y),anc(Y,Z) είναι εμφανώς αναδρομικός, αλλά δεν είναι γραμμικός.

44 44 Γραμμικά προγράμματα Ένα πρόγραμμα είναι γραμμικό αν όλοι του οι κανόνες είναι γραμμικοί

45 45 Παράδειγμα Έστω το παρακάτω παράδειγμα, όπου τα p i ανήκουν στο IDB και τα c i ανήκουν στο EDB. p1(X,Y) :- c1(X,Y) p1(X,Y) :- p1(X,Z),p3(Z,Y) p1(X,Y) :- p2(X,Y) p2(X,Y) :- c3(X,Y) p2(X,Y) :- p1(X,Z),p3(Z,Y) p3(X,Y) :- p1(X,Y) p3(X,Y) :- p3(X,Z),c2(Z,Y)

46 46 Παράδειγμα – dependency graph Οι κόμβοι ανήκουν ΜΟΝΟ στο IDB και οι ακμές κατευθύνονται από το head προς το body. p1(X,Y) :- c1(X,Y) p1(X,Y) :- p1(X,Z),p3(Z,Y) p1(X,Y) :- p2(X,Y) p2(X,Y) :- c3(X,Y) p2(X,Y) :- p1(X,Z),p3(Z,Y) p3(X,Y) :- p1(X,Y) p3(X,Y) :- p3(X,Z),c2(Z,Y) p1p1 p3p2

47 47 Παράδειγμα – παρατηρήσεις Οι p1,p2,p3 είναι αμοιβαία αναδρομικοί: ανήκουν στον κύκλο p2- >p3->p1->p2 Όντες αμοιβαία αναδρομικοί είναι και αναδρομικοί, προφανώς. Όλοι οι κανόνες είναι γραμμικοί για κάθε predicate ξεχωριστά (κάθε predicate εμφανίζεται το πολύ μία φορά ανά κανόνα) 1. p1(X,Y) :- c1(X,Y) 2. p1(X,Y) :- p1(X,Z),p3(Z,Y) 3. p1(X,Y) :- p2(X,Y) 4. p2(X,Y) :- c3(X,Y) 5. p2(X,Y) :- p1(X,Z),p3(Z,Y) 6. p3(X,Y) :- p1(X,Y) 7. p3(X,Y) :- p3(X,Z),c2(Z,Y) p1p1 p3p2

48 48 Παράδειγμα – παρατηρήσεις Ο κανόνας 2 ΔΕΝ είναι γραμμικός: και το p1 και το p3 είναι αμοιβαία αναδρομικά με το p1 του head Ο κανόνας 5 ΔΕΝ είναι γραμμικός: και το p1 και το p3 είναι αμοιβαία αναδρομικά με το p2 του head Κατά συνέπεια, το πρόγραμμα ΔΕΝ είναι γραμμικό 1. p1(X,Y) :- c1(X,Y) 2. p1(X,Y) :- p1(X,Z),p3(Z,Y) 3. p1(X,Y) :- p2(X,Y) 4. p2(X,Y) :- c3(X,Y) 5. p2(X,Y) :- p1(X,Z),p3(Z,Y) 6. p3(X,Y) :- p1(X,Y) 7. p3(X,Y) :- p3(X,Z),c2(Z,Y) p1p1 p3p2

49 49 Ημι-απλοϊκή μέθοδος αποτίμησης Η ημι-απλοϊκή (semi-naïve) μέθοδος είναι μια bottom-up παραλλαγή του naïve τρόπου παραγωγής, με σκοπό να αποφύγει την επανάληψη της παραγωγής των ίδιων facts περισσότερες από μία φορές. Θυμηθείτε λίγο την εκτέλεση της Jacobi μεθόδου...

50 50 Ημι-απλοϊκή μέθοδος αποτίμησης 1ο iteration (Anc 1 είναι το R i = ότι έχουμε στην ΕDB) Anc 1 = { (δευκαλίων,έλλην), (έλλην,αίολος), (έλλην,δώρος), (έλλην,ξούθος), (ξούθος,αχαιός), (ξούθος,ίων)} 2ο iteration (Rold i = Anc 1 και παράγουμε...) Anc 2 = Anc 1  {(δευκαλίων,αίολος), (δευκαλίων,δώρος), (δευκαλίων,ξούθος), (έλλην,αχαιός),(έλλην,ίων)} 3ο iteration Anc 3 = Anc 2  {(δευκαλίων,αχαιός), (δευκαλίων,ίων)} R1: anc(X,Y) :- par(X,Y) R2: anc(X,Y) :- anc(X,Z),par(Z,Y) EDB par(δευκαλίων,έλλην) par(έλλην,ξούθος) par(έλλην,δώρος) par(ξούθος,αχαιός) par(έλλην,αίολος) par(ξούθος,ίων)

51 51 Ημι-απλοϊκή μέθοδος αποτίμησης Το πρόβλημα με την Jacobi, και γενικά, με την απλοϊκή μέθοδο αποτίμησης, είναι ότι κάθε φορά τρέχει πάνω σε όλα τα αποτελέσματα του προηγούμενου iteration Π.χ., το 3ο iteration του προηγούμενου παραδείγματος, θα ξανατρέξει πάνω σε όλα τα αποτελέσματα του Anc 2. Μπορούμε όμως και καλύτερα...

52 52 Μαθηματική γραμμικότητα Αν ένας κανόνας είναι γραμμικός, αποδεικνύεται ότι η αποτίμησή του πάνω στην ένωση δύο predicates ισούται με την ένωση των ξεχωριστών αποτιμήσεων. E[R1  R2]= E[R1]  E[R2]

53 53 Διαφορικά Το διαφορικό του R i στην k-στη iteration ορίζεται ως Δ i,k = R i,k - R i,k-1 Τότε R i,k = R i,k-1  Δ i,k Οπότε R i,k+1 = Ε[R i,k ] = Ε[R i,k-1 ]  Ε[Δ i,k ] => R i,k+1 = R i,k  Ε[Δ i,k ]

54 54 Ημι-απλοϊκή μέθοδος αποτίμησης Με άλλα λόγια, αν R i,k+1 = R i,k  Ε[Δ i,k ] για να αποτιμήσουμε το R i,k+1, αρκεί να αποτιμήσουμε το Ε[Δ i,k ], μιας και το R i,k το έχουμε ήδη υπολογίσει στο προηγούμενο iteration και είναι ήδη γνωστό! Ο αλγόριθμος Jacobi παραλλάσσεται ως κάτωθι

55 55 Αλγόριθμος SemiNaïve (S) INPUT: ένα πεπερασμένο σύνολο S από γραμμικούς rules και ground facts (EDB) OUTPUT: όλα τα ground facts που αντιστοιχούν στα predicates του S R 1,…,R n BEGIN FOR i := 1 TO n DO D i ={}; FOR i := 1 TO n DO R i ={}; DO{ cond  true; FOR i := 1 TO n DO{ D i = evaluate R i over [D 1,…, D n ] – R i R i = D i  R i IF D i !={} THEN cond  false } } WHILE cond != true; FOR i := 1 TO n DO RETURN(R i ); END

56 56 Παράδειγμα (Same Generation “Cousins”) R1: sgc(X,Y) :- eq(X,Y) R2: sgc(X,Y) :- par(X,X 1 ),sgc(X 1,Y 1 ),par(Y,Y 1 ) G1: ? – sgc(δώρος,Χ) EDB: par και eq eq(α,β) έχει το ρόλο της ισότητας, π.χ., eq(ίων,ίων) έλλην δώρος αίολος ξούθος θυία μακεδνός δευκαλίων

57 57 Παράδειγμα Αρχικά sgc 0 ={}, Δ 0 ={}, 1ο iteration (ότι έχει το eq) Δ 1 = { (δκ,δκ), (ε,ε), (θ,θ), (μ,μ), (δ,δ), (ξ,ξ), (α,α)} sgc 1 = Sgc 0  Δ 1 = { (δκ,δκ), (ε,ε), (θ,θ), (μ,μ), (δ,δ), (ξ,ξ), (α,α)} 2ο iteration (αδέρφια) Δ 2 = {(δκ,δκ), (ε,ε), (θ,θ), (μ,μ), (δ,δ), (ξ,ξ), (α,α), (θ,ε), (ε, θ),(δ,α), (α,δ),(δ,ξ), (ξ,δ),(α,ξ), (ξ,α)} - Δ 1 = {(θ,ε), (ε, θ),(δ,α), (α,δ),(δ,ξ), (ξ,δ),(α,ξ), (ξ,α)} sgc 2 = sgc 1  Δ 1 = {(δκ,δκ), (ε,ε), (θ,θ), (μ,μ), (δ,δ), (ξ,ξ), (α,α), (θ,ε), (ε, θ),(δ,α), (α,δ),(δ,ξ), (ξ,δ),(α,ξ), (ξ,α)}

58 58 Παράδειγμα Μέχρι στιγμής, ότι κάναμε και στη Jacobi κάνουμε και εδώ Στη συνέχεια, το σκηνικό θα αλλάξει: ήδη, αντί για να πάμε να υπολογίσουμε πάνω στο sgc 2, θα υπολογίσουμε πάνω στο Δ 2. Εφόσον έχουμε μέθοδο bottom-up, αφού υπολογίσουμε τα πάντα, θα απαντήσουμε και τον goal που ρωτάει για τους συγγενείς ίδιας γενιάς του Δώρου

59 59 Παράδειγμα 3ο iteration (ξαδέρφια) Δ 3 = {(δκ,δκ), (ε,ε), (θ,θ), (μ,μ), (δ,δ), (ξ,ξ), (α,α), (θ,ε), (ε, θ),(δ,α), (α,δ),(δ,ξ), (ξ,δ),(α,ξ), (ξ,α), (δ,μ), (μ,δ), (μ,ξ), (ξ,μ),(α,μ), (μ,α)} – Δ 2 = {(δ,μ), (μ,δ), (μ,ξ), (ξ,μ),(α,μ), (μ,α)} sgc 3 = sgc 2  Δ 2 = {(δκ,δκ), (ε,ε), (θ,θ), (μ,μ), (δ,δ), (ξ,ξ), (α,α), (θ,ε), (ε, θ),(δ,α), (α,δ),(δ,ξ), (ξ,δ),(α,ξ), (ξ,α), (δ,μ), (μ,δ), (μ,ξ), (ξ,μ),(α,μ), (μ,α)} 4ο iteration (σταματάμε) Δ 4 = Δ 3 Sgc 4 = Sgc 3 G1 = {ότι κάνει unify με το sgc(δ,Χ)} = {(δ,δ), (δ,α), (δ,ξ), (δ,μ)}

60 60 Ημι-απλοϊκή μέθοδος αποτίμησης Αποτιμώντας πάνω στο διαφορικό της κάθε σχέσης, τελικά κατορθώνουμε να επιταχύνουμε τη διαδικασία, καθώς οι παραγωγές γίνονται μόνο με βάση τα νέα facts


Κατέβασμα ppt "Βάσεις Γνώσεων Σχεσιακή άλγεβρα, κατηγοριοποίηση και αποτίμηση προγραμμάτων στην Datalog Πάνος Βασιλειάδης Μάιος 2003"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google