210 likes | 388 Views
Υπολογιστικό Μοντέλο Λογικού Προγραμματισμού. Υπολογιστικό Μοντέλο Λογικού Προγραμματισμού. Δέντρο Υπολογισμού Ταυτοποίηση ( unification) Ορισμός: Μια κοινή περίπτωση δυο όρων t1 και t2 είναι ένας όρος t τ.ω. υπάρχουν αντικαταστάσεις θ1 και θ2 τ.ω.: t = t1 θ1 και t = t2 θ2
E N D
Υπολογιστικό Μοντέλο Λογικού Προγραμματισμού
Υπολογιστικό Μοντέλο Λογικού Προγραμματισμού • Δέντρο Υπολογισμού • Ταυτοποίηση (unification) • Ορισμός: Μια κοινή περίπτωση δυο όρων t1 και t2 είναι ένας όρος t τ.ω. υπάρχουν αντικαταστάσεις θ1 και θ2 τ.ω.: t = t1θ1και t = t2θ2 Αντικατάσταση θ: Συνάρτηση από μεταβλητές σε όρους θ={Χ1/t1, …, Xn/tn} τ.ω. 1) X1,…, Xn διαφορετικές 2) Xi ≠ ti για κάθε i=1,…n • Παράδειγμα 1: t1 = f (charles, X), t2 = f (Υ, harry) t = f (charles, harry) θ1 = {Χ/harry} θ2 = {Y/charles}
Υπολογιστικό Μοντέλο Λογικού Προγραμματισμού • Επεκτείνουμε τον ορισμό (και άλλους πιο κάτω) σε ατομικούς τύπους • Παράδειγμα 2: t1 = append ([1,2], List, [X, 2, Y]) t2 = append ([Z,2], L, [1, U, 3]) κ.π: t = append ([1,2], List, [1, 2, 3]) θ1 = {Χ/1, Υ/3} θ2 = {Ζ/1, L/List, U/2} ή t = append ([1,2], [U/W], [1, 2, 3]) ή t = append ([1,2], [3/W], [1, 2, 3]) ή t = append ([1,2], [3], [1, 2, 3]) … • Ορισμός:Δυο όροι είναι ταυτόσημοι ανν έχουν κοινή περίπτωση. Μια αντικατάσταση που κάνει δυο όρους τους ίδιους λέγεται ταυτοποιητής, • π.χ. Παρ. 2: Θ = {L/List, Z/1, X/1, U/2, Y/3}
Υπολογιστικό Μοντέλο Λογικού Προγραμματισμού • Ορισμός: Ένας όρος t1 είναι πιο γενικός από κάποιο άλλο όρο t2 ανν t2 είναι περίπτωση του t1 αλλά ο t1 δεν είναι περίπτωση του t2, δηλ. Υπάρχει Θ τ.ω. T2 = t1Θ αλλά δεν υπάρχει Θ΄ τ.ω. T1=t2Θ΄ • Παράδειγμα 3: t1 = likes (mary, X) είναι πιο γενικός από t2 = likes (mary, john) … Είναι πιο γενικός και από t3 = likes (ann, john);; • Ορισμός: Ο πιο γενικός ταυτοποιητής (m.g.u) δυο όρων είναι ο ταυτοποιητής τ.ω. η αντίστοιχη κοινή περίπτωση είναι η πιο γενική περίπτωση. • Παράδειγμα 4: t1 = likes (Χ, Υ) και t2 = likes (mary, Z)=> m.g.u.(t1, t2) = {X/mary. Y/Z} Ειδικός ταυτοποιητής: Θ = {Χ/mary, Y/bob, Z/bob} κτλ. Πρόταση: Αν δυο όροι είναι ταυτόσημοι τότε υπάρχει μοναδικός m.g.u. – “modulo” αλλαγή μεταβλητών.
Αλγόριθμος Ταυτοποίησης • Pre:Δύο όροι τ1, τ2 • Post:Ο πιο γενικός ταυτοποιητής (mgu), Θ, των τ1, τ2 ή “failure”. • Θ = {} Στοίβα = {τ1 = τ2} Failure = false While Στοίβα not empty και no failure do pop x = y από τη Στοίβα case 1. x και y είναι η ίδια σταθερά η μεταβλητή: continue 2. x είναι μεταβλητή που δεν εμφανίζεται στο y: add x=y στο Θ και substitutey for x στη Στοίβα 3. y είναι μεταβλητή που δεν εμφανίζεται στο x: add y=x στο Θ και substitutex for y στη Στοίβα 4. x είναι f (τ1, ..., τn) και y είναι f (τ1, ..., τ n) για κάποιο σύμβολο f και n>0:push τi = τi, i=1, …, n on Στοίβα 5. otherwise: failure = true If Failure then output “failure” else output Θ.
Παράδειγμα ταυτοποίησης • t1 = append ([1, 2], List, [X, 2, Y]) και t2 = append ([Z, 2], L, [Z, 2, 3]) • Αρχικά, Στοίβα = {append ([1,2], List, [X, 2, Y]) = append ([Z,2], L, [Z, 2, 3])} Case 4: add στη Στοίβα [1, 2] = [Ζ, 2] List = L [X, 2, Y] = [Z, 2, 3] • pop [1, 2] = [Z, 2] από τη Στοίβα Case 4: add στη Στοίβα 1 = Z 2 = 2 • pop 1 = Z Case 3: add Z = 1 στο Θ substitute όλες τις εμφανίσεις του Ζ στη στοίβα με 1. ([Χ, 2, Υ] = [Ζ, 2, 3] => [Χ, 2, Υ] = [1, 2, 3]) • pop 2 = 2 Case 1: continue
Παράδειγμα ταυτοποίησης • Η Στοίβα τώρα είναι: {List = L, [X, 2, Y] = [1, 2, 3]} • pop List = L Case 2 ή case 3. Έστω case 3: add L = List στο Θ and substitute … • pop [X, 2, Y] = [1, 2, 3] Case 4: add στη Στοίβα X = 1 2 = 2 Υ = 3 • pop X = 1 Case 2: add X = 1 στο Θ and substitute … • pop 2 = 2 Case 1: continue • pop Y = 3 Case 2: add Y = 3 στο Θ • Αποτέλεσμα: Θ = {Ζ = 1, L = List, X = 1, Y = 3}
Υπολογισμός Λογικών Προγραμμάτων • Ο υπολογισμός γίνεται με συνδυασμό: • Ταυτοποίησης – unification • Επίλυσης – resolution • Παράδειγμα p (X) :- q (X) q (X) :- r (X) q (b) :- r (b) q (a) :- s (X) ? p(a), r (X) - Ταυτοποίηση με κεφαλή κανόνα - Επίλυση Χ΄= a ? q (a) , r (Χ) X΄΄= a id ? r (a) , r (Χ) ? s (Y) , r (Χ)
Επίλυση (Resolution) ΑνΒ ┐Β Α Α1ν...νΑn B1ν...νBm Α1ν…νΑi-1 νΑi+1ν...νΑnνΒ1ν...Βj-1νBj+1ν...νΒm Bj≡┐Ai • Ορισμός (Επίλυση στο Λ.Π.) Έστω Q μια ερώτηση και C ένας κανόνας στο πρόγραμμα: • Q: ? G1, …, Gn (┐G1 ν,..., ν ┐Gn) • C: A:-B1,…, Bm (A ν┐Β1ν,... ,ν┐Βm ) • H επίλυση της Q με τον κανόνα C ορίζεται ανν υπάρχει Giτ.ω. Giκαι Α είναι ταυτόσημοι (Η Q επιλύεται με τον κανόνα C στο Gi ). • H επίλυση της Q με το C στο Giείναι η ερώτηση ?[G1, …, Gi-1, B1, …, Bm, Gi+1, …, Gn] Θ όπου Θ είναι ο πιο γενικός ταυτοποιητής (m.g.u) του Giκαι Α. • Αν m=0 και n=1 (δηλ. G1 και Α) τότε η επίλυση είναι η κενή ερώτηση
Παραδείγματα 1) Q: ? p(a), q(b) C1:q(c)r(c) C2:q(b)r(x) C3:q(X)r(X) • Q δεν επιλύεται με τον C1 στο q(b) • Q επιλύεται με το C2στο q(b): ?p(a), r(X) • Q επιλύεται με το C3 στο q(b): ?[p(a), r(X)] (X/b) δηλ. ?p(a), q(b) 2) Q: ?p(X) C: p(a) • H επίλυση είναι η κενή ερώτηση: 3) Q: ?p(a) C: p(f(X):-q(a) • Δεν επιλύεται 4) Q: ?p(X), r (X) C: p(f(a):-q(a) • Η επίλυση της Q με του C στο p(X): ?[q(a), r(X)] (X/f(a)) ?q(a), r(f(a))
Γενικές Προδιαγραφές Λογικών Προγραμμάτων • Δεδ. Εισόδου:P – Λογικό Πρόγραμμα Q – Ερώτηση • Δεδ. Εξόδου:No ή (Yes με Θ) Post-conditions:- Αν P ЭQ τότε i) Yes και ii) P QΘ - Αν P ЭQ τότε No
Αλγόριθμος (SLD proof procedure) • Ένας υπολογισμός (derivation) της Q στο πρόγραμμα P είναι μια σειρά από ερωτήσεις (στόχους – goals): Qo, Q1, …, Qi,… τ.ω. • Qo ≡ Q • Για κάθε i ≥ 1, Qi+1 δημιουργείται από την Qi επιλέγοντας κάποιο στόχο G από την Qi και Qi+1 είναι η επίλυση της Qi με κάποιο κανόνα C του προγράμματος P στο G: • Αν Qn, n>0 είναι η κενή ερώτηση, τότε τερματίζουμε με επιτυχία: YES • Αν ο επιλεγόμενος στόχος G δεν ταυτοποιείται με κανένα κανόνα του P: NO.
Δέντρο Υπολογισμού – Χώρος Αναζήτησης Ορισμός • Έστω P πρόγραμμα, Q ερώτηση και R κανόνας επιλογής ατομικού στόχου. Ο χώρος όλων των δυνατών υπολογισμών της Q λέγεται ο χώρος αναζήτησης της Q στο πρόγραμμα P με κανόνα επιλογής R. • Ο χώρος αναζήτησης αποτελεί ένα AND-OR δέντρο που λέγεται δέντρο υπολογισμού (επόμενη διαφάνεια).
Δέντρο Υπολογισμού OR AND AND AND OR AND OR AND AND
Δέντρο Υπολογισμού • Στρατηγικές Αναζήτησης στο δέντρο υπολογισμού • Depth first – κατά βάθος • Breadth first – κατά πλάτος • α*
An Interpreter for Logic Programs(βλ. SLD αλγόριθμο) • Input: A logic program P, a query Q • Output: Qθ (answer substitution) if Q is provable from P, failure otherwise • Algorithm: • Initialize the “resolvent” R to be {Q} • While R is nonempty do: • Choose a literal A from R • Choose a (renamed) clause A’ B1, …, Bn from P • Unify A and A’ with unifier θ (if no clause can be found s.t. A and A’ unify, exit with failure) • Remove A from R, add B1, …, Bn to R • Apply θ to R and Q • If R is empty, output Q, else output failure
Δέντρο Υπολογισμού- Παράδειγμα • ? member (a, X), append ([a], [b], X) Κανόνας επιλογής: Άκρο δεξιό ?member (a, X), append ([a], [b], X) X=[a/Xs] ?member (a, Xs), append ([ ], [b], Xs) Xs=[b] ?member (a, [a,b]) ?member (a, [b]) Yes X= [a,b] ?member (a, [])
Δέντρο Υπολογισμού- Παράδειγμα • Κανόνας επιλογής: Άκρο αριστερό ?member (a, X), append ([a], [b], X) X=[Y/Ys] X=[a/Xs] ?append ([a], [b], [a|Xs]) ?member (a, Y5), append ([a], [b], [Y/Ys]) Ys=[a/Zs] ?append ([], [b], [Xs]) ?append ([a], [b], [Y, a|Zs]) Xs=[b] ?append ([], [b], [a|Zs]) . . . Yes X= [a,b]
An Interpreter for Logic Programs(βλ. SLD αλγόριθμο) • Steps 2.1 and 2.2 are nondeterministic • A given logic programming system fixes this by providing two additional rules: • Computation rule: “which literal (2.1)” • Search rule: “which clause (2.2)” • Choosing a different clause (step 2.2) can lead to different solutions (finding solutions in a different order). • Several alternatives may have to be tried before obtaining one (or all) solutions.
Prolog • Υπάρχουν δύο επιλογές στη γενική διαδικασία εκτέλεσης λογικών προγραμμάτων: • Επιλογή ατομικού στόχου στην ερώτηση • Επιλογή κανόνα από το πρόγραμμα • Σε ένα πραγματικό μεταφραστή αυτές οι δύο επιλογές είναι συγκεκριμένες. Συνήθως στην Prolog: • Άκρως αριστερό • Με τη σειρά που έχουν γραφτεί στο πρόγραμμα
Prolog • Η πρώτη επιλογή ορίζει το χώρο αναζήτησης.Δεν επηρεάζει την ύπαρξη λύσης ή όχι για την ερώτηση • π.χ. P: p:-p,q • Η δεύτερη επιλογή (του κανόνα από P) ορίζει τον τρόπο αναζήτησης στο δέντρο υπολογισμού. Μια επιλογή μπορεί να μη βρει λύσεις! π.χ. P: p:-p,q p. ?p ?p | | ?p, q ?p, q | | ?p,q ■ | fail .