Εργαστήριο μαθήματος «Τεχνολογία Γνώσης» Σαντιπαντάκης Γιώργος
Περιεχόμενα • Σύντομη εισαγωγή στη Prolog • Βασικές αρχές προγραμματισμού σε Prolog • Σταθερές, μεταβλητές και λογικοί τελεστές • Γεγονότα και κανόνες
Εισαγωγή στη Prolog • Κατηγορηματική Λογική Πρώτης Τάξης Κάθε άνθρωπος είναι θνητός Ο Σωκράτης είναι άνθρωπος Ο Σωκράτης είναι θνητός Η γλώσσα προγραμματισμού PROLOG (PROgramming in LOGic) ακολουθεί μεθόδους της λογικής για την αναπαράσταση γνώσης και την επίλυση προβλημάτων, χρησιμοποιώντας για τον προγραμματισμό την απλή λογική. Ο προτασιακός λογισμός και ειδικότερα ένα υποσύνολό του οι προτάσεις Horn, αποτελούν τη βάση ανάπτυξης της PROLOG.
Εισαγωγή στη Prolog • Ο προγραμματισμός σε PROLOG διαφέρει από τις υπόλοιπες γλώσσες προγραμματισμού – δεν περιγράφουμε κάποιο αλγόριθμο (μια σειρά από διαδοχικά βήματα που επιλύουν κάποιο πρόβλημα) – Περιγράφουμε το ίδιο το πρόβλημα (τις σχέσεις που ισχύουν και τα δεδομένα) – Η εκτέλεση του προγράμματος διερευνά το αληθές των σχέσεων και την επίλυση του προβλήματος
Βασικές αρχές • Για την επίλυση ενός προβλήματος με τη βοήθεια ενός προγράμματος Prolog, θα πρέπει: – Να διατυπώσουμε τα γεγονότα που αφορούν τα αντικείμενα και τις σχέσεις τους – Να ορίσουμε κανόνες που διέπουν τα αντικείμενα και τις σχέσεις τους – Να διατυπώσουμε τα ερωτήματα που πρέπει να απαντηθούν από τη Prolog
Σταθερές (constants ή atoms) • Για τη Prolog, σταθερά θεωρείται κάθε αλφαριθμητικό που ξεκινά με μικρό γράμμα – my_computer – student001 – john (κλπ) • Κάθε αριθμός – 5, -10, , κλπ • Κάθε αλφαριθμητικό ανάμεσα σε «’»: – ‘Test’ – ‘hello world’
Μεταβλητές • Κάθε λέξη που ξεκινά με κεφαλαίο γράμμα, ή υπογράμμιση (underscore) – Person, – Student – X1 – _a001 (κλπ) • Οι μεταβλητές που ξεκινούν με υπογράμμιση λέγονται και «ανώνυμες μεταβλητές»
Λογικοί τελεστές • Για την κωδικοποίηση ενός προβλήματος λογικής, είναι απαραίτητοι οι λογικοί τελεστές: – «και» (and), συμβολίζεται στη Prolog «,» – «ή» (or), συμβολίζεται στη Prolog «;» – «άρνηση» (not), συμβολίζεται στη Prolog «\+»
Σύνθετα Αντικείμενα • περιγράφουν γεγονότα, π.χ. – father(john, helen). – part_of(greece, europe). – student(kostas). – fact001(event002, position(12,15)). – date(thursday,8,november,2012). • Η δήλωση κάθε γεγονότος ολοκληρώνεται με «.» father(john, helen). όνομα (functor) ορίσματα (arguments)
Κανόνες • Οι λογικοί τελεστές χρησιμοποιούνται για τη σύνθεση κανόνων. Η γενική μορφή είναι: – H :- P 1, P 2 ; P 3,…, P n • Το σύμβολο «:-» χωρίζει τον κανόνα σε δύο μέρη: – τη κεφαλή (head) – το σώμα (body) • Η κεφαλή ενός κανόνα είναι αληθής, αν αποδεικνύεται ότι το σώμα είναι αληθές • Ένας κανόνας χωρίς κεφαλή, – :- P 1, P 2 ; P 3,…, P n • έχει την έννοια της «άμεσα εκτελέσιμης εντολής», δηλαδή θα εκτελεστεί κατά την ανάγνωση του προγράμματος από τη Prolog
Παράδειγμα • Γεγονότα: – mother(maria,john). – father(kostas,john). • Κανόνας: – pair(X,Y) :- mother(X,Z),father(Y,Z). • Ερωτήματα: – pair(maria,kostas)? pair(W,kostas)? pair(maria,Y)? – pair(kostas,maria)?
Παραδείγματα • Γεγονότα: – mother(maria,john). – father(kostas,john). • Κανόνας: – pair(X,Y) :- mother(X,Z),father(Y,Z) ; mother(Y,Z),father(X,Z). • Ερωτήματα: – pair(kostas,maria)?
Παραδείγματα • Γεγονότα: – mother(maria,john). – father(kostas,john). – mother(sue,kostas). – father(peter,kostas). • Κανόνας: – parent(X,Y) :- mother(X,Y) ; father(X,Y). – ancestor(X,Y) :- parent(X,Y). – ancestor(X,Y):-parent(X,Z),parent(Z,Y). • Ερωτήματα: – ancestor(X,kostas)? ancestor(sue,X)?
Ταίριασμα • Το ταίριασμα είναι μια ένα-προς-ένα αντιστοίχιση δύο όρων (π.χ. του όρου της ερώτησης και του γεγονότος) • Για να αντιστοιχισθούν δύο όροι, πρέπει: – να έχουν το ίδιο όνομα functor – και το ίδιο arity (πλήθος ορισμάτων). • Αυτό θα πρέπει να συμβαίνει και για κάθε ένα από τα oρίσματά τoυς.
Παραδείγματα • Γεγονός: – now(date(thursday,8,november,2012),time(20,15,00)). • Ερώτημα: – ?- now(Date,time(Hour,Minute,Second)). Date=date(thursday,8,november,2012) Hour=20 Minute=15 Second=00
Παραδείγματα • Γεγονός: – now(date(thursday,8,november,2012),time(20,15,00)). • Ερωτήματα: – ?- now(date(Day,8,november,2012),time(20,Min,Sec)). Day=thursday Min=15 Sec=00 – ?-now(date(Day,8,november,2012),time(Hour)). ??? – ?-now(date(Day,8,november,2012),time(Hour,_,_)). ???
Παραδείγματα • Γεγονότα: – value(5). – value(4+2). • Ερωτήματα: – ?-value(X). X=5 X=4+2(οι πράξεις δεν γίνονται μόνες τους!) – ?-value(3+X). No – ?-value(4+X). X=2 – ?-value(3+2). No