1 / 60

Βάσεις Γνώσεων

Βάσεις Γνώσεων. Σχεσιακή άλγεβρα , κατηγοριοποίηση και αποτίμηση προγραμμάτων στην Datalog Πάνος Βασιλειάδης pvassil@cs.uoi.gr Μάιος 200 3. www.cs.uoi.gr/~pvassil/courses/knowledge_bases/. Περιεχόμενα. Built-ins Σχεσιακή άλγεβρα και Datalog

Download Presentation

Βάσεις Γνώσεων

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ΒάσειςΓνώσεων Σχεσιακή άλγεβρα, κατηγοριοποίηση και αποτίμηση προγραμμάτων στην Datalog Πάνος Βασιλειάδης pvassil@cs.uoi.gr Μάιος2003 www.cs.uoi.gr/~pvassil/courses/knowledge_bases/

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

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

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

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

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

  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. Datalog και Σχεσιακή Άλγεβρα • Μπορούμε να δείξουμε την ισοδυναμία Datalog και ενός υποσυνόλου της σχεσιακής άλγεβρας • Θα δείξουμε πώς μια έκφραση σε σχεσιακή άλγεβρα μεταφράζεται σε Datalog • … και το αντίστροφο...

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

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

  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. Datalog -> Σχεσιακή Άλγεβρα • Κάθε clause στην Datalog μπορεί να μεταφρασθεί σε μια πρόταση σε σχεσιακή άλγεβρα • Έστω μια Datalog clauseC p(α1,…,αn):- q1(β1,…,βk),…,qm(βs,…,βh) • Θα δούμε ότι μπορεί να μετατραπεί σε μια έκφραση της μορφής Expr(Q1,…,Qm)  P • Με Qi (κεφαλαία γράμματα) αναφερόμαστε στον πίνακα που αντιστοιχεί στο predicate qi.

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

  14. Παράδειγμα p(X,X,Z) :- s(X,Y), r(Y,a,Z) R1:π$1,$1,$5R2[s(X,Y), r(Y,a,Z)] $1$2 $3 $4 $5 R2: π$1,$1,$5σ$4=α$2=$3R2[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. Παράδειγμα 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,$5R2[s(X,Y), r(Y,a,Z) ,eq(N,b)] R2:π$6,$1,$5σ$4=α$2=$3R2[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. Datalog -> Σχεσιακή Άλγεβρα • Στο τέλος, όλες οι εκφράσεις που αφορούν το ίδιο predicate P Expri(Q1,…,Qm)  P ενσωματώνονται σε μία αλγεβρική έκφραση P = Expr1(Q1,…,Qm)…Exprs(Q1,…,Qm) • Η εν λόγω έκφραση λέει ότι το σύνολο των facts του P που μας αφορούν είναι ακριβώς και μόνο εκείνα που παράγονται από το πρόγραμμά μας.

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

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

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

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

  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. Αλγόριθμος Jacobi(S) INPUT: ένα πεπερασμένο σύνολο S από rules και ground facts (EDB) OUTPUT: όλα τα ground facts που αντιστοιχούν στα predicates του SR1,…,Rn BEGIN FOR i := 1 TO n DO Ri={}; DO{ cond  true; FOR i := 1 TO n DO Roldi=Ri; FOR i := 1 TO n DO{ Ri = evaluate Ri over [Rold1,…, Roldn] IF Roldi!=Ri THEN cond  false } } WHILE cond != true; FOR i := 1 TO n DO RETURN(Ri); END

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

  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. 1o Παράδειγμα • 1ο iteration (Anc1είναι το Ri = ότι έχουμε στην ΕDB) • Anc1 = { (δευκαλίων,έλλην), (έλλην,αίολος), (έλλην,δώρος), (έλλην,ξούθος),(ξούθος,αχαιός), (ξούθος,ίων)} • 2ο iteration (Roldi = Anc1και παράγουμε …) • Anc2 = Anc1{(δευκαλίων,αίολος), (δευκαλίων,δώρος), (δευκαλίων,ξούθος), (έλλην,αχαιός),(έλλην,ίων)} • 3ο iteration • Anc3 =Anc2{(δευκαλίων,αχαιός), (δευκαλίων,ίων)} • 4ο iteration(όπου σταματάμε) • Anc4 =Anc3

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

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

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

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

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

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

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

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

  34. Παράδειγμα • Έστω το παρακάτω παράδειγμα, όπου τα piανήκουν στο IDBκαι τα ciανήκουν στο 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. Παράδειγμα • Οι κόμβοι ανήκουν ΜΟΝΟ στο 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) p1 p2 p3

  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) p1 c1 p2 p3 c2 c4 c3

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

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

  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 r w

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

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

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

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

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

  45. Παράδειγμα • Έστω το παρακάτω παράδειγμα, όπου τα piανήκουν στο IDBκαι τα ciανήκουν στο 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. Παράδειγμα – 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) p1 p2 p3

  47. Παράδειγμα – παρατηρήσεις • Οι p1,p2,p3 είναι αμοιβαία αναδρομικοί: ανήκουν στον κύκλο p2->p3->p1->p2 • Όντες αμοιβαία αναδρομικοί είναι και αναδρομικοί, προφανώς. • Όλοι οι κανόνες είναι γραμμικοί για κάθε predicate ξεχωριστά (κάθε predicate εμφανίζεται το πολύ μία φορά ανά κανόνα) • 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) p1 p2 p3

  48. Παράδειγμα – παρατηρήσεις • Ο κανόνας 2 ΔΕΝ είναι γραμμικός: και το p1και το p3είναι αμοιβαία αναδρομικά με το p1του head • Ο κανόνας 5 ΔΕΝ είναι γραμμικός: και το p1και το p3είναι αμοιβαία αναδρομικά με το p2του head • Κατά συνέπεια, το πρόγραμμα ΔΕΝ είναι γραμμικό • 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) p1 p2 p3

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

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

More Related