ΕΠΛ 434: Λογικός Προγραμματισμός και Τεχνητή Νοημοσύνη Επισκ. Λέκτορας Λοΐζος Μιχαήλ Τμήμα Πληροφορικής ρ Πανεπιστήμιο Κύπρου (Χειμερινό Εξάμηνο 2008 2009)
Προγράμματα στην Prolog Αλγόριθμος = Λογική + Έλεγχος (Kowalski) as Λογικός Προγραμματισμός (Prolog, ): Έμφαση στη χρήση Λογικής (και χρήση γενικού Ελέγχου). Ένα πρόγραμμα Prolog αποτελείται από ένα σύνολο λογικών προτάσεων (clauses): Γεγονότα (facts). Κανόνες (rules).
Γεγονότα Είναι η απλούστερη μορφή πρότασης. Π.χ., father(zeus, ares), woman (hera). Αποτελούνται από ένα κατηγόρημα (predicate), και όρους (terms) οι οποίοι εμφανίζονται ως ορίσματα (arguments) των κατηγορημάτων. Π.χ., zeus είναι όρισμα του κατηγορήματος father. Το πλήθος των ορισμάτων ενός κατηγορήματος καλείται τάξη (arity) του κατηγορήματος. Ένα κατηγόρημα εκφράζει μία ιδιότητα ή σχέση που ισχύει ανάμεσα στα ορίσματά του.
Παράδειγμα Προβλήματος Zeus Hera Ares Aphrodite Cadmus Harmonia Semele Hercules
Παράδειγμα Προγράμματος father(zeus, ares). father(ares, harmonia). father(cadmus, semele). father(zeus, hercules). mother(hera, ares). mother(aphrodite, harmonia). mother(harmonia, semele). mother(semele, hercules). man(zeus). man(ares). man(cadmus). man(hercules). woman(hera). woman(aphrodite). woman(harmonia). woman(semele)
Παράδειγμα Ερωτήσεων? father(zeus, ares).? father(ares, harmonia), Yes.? father(x, harmonia). Yes. X = ares. No (more).? father(zeus, X). Yes. X = ares. Yes. X = hercules. No (more). woman(armonia). Yes.? mother(hera, X), man(y). Yes. X = ares, Y = zeus. Yes. X = ares, Y = ares. Yes. X = ares, Y = cadmus. Yes. X = ares, Y = hercules. No (more).? mother(hera, X), man(x). Yes. X = ares. No (more).
Κανόνες Ορίζουν σχέσεις μεταξύ κατηγορημάτων. Π.χ., daughter(x, Y) : father(y, X), woman(x). Αποτελούνται από την κεφαλή (head) και το σώμα (body). Στην κεφαλή εμφανίζεται πάντοτε ένα κατηγόρημα, ενώ στο σώμα 0, 1, ήπολλά πολλά. Π.χ., το father(y, X) είναι μέρος του σώματος. Ένας κανόνας εκφράζει μία λογική συνεπαγωγή τηςεξήςμορφής: α β και γ και... και ω.
Διαδικασίες Διαδικασία: Ένα σύνολο από προτάσεις οι οποίες ορίζουν ένα δεδομένο κατηγόρημα. Π.χ., parent(x, Y) : father(x, Y). parent(x, Y) : mother(x, Y). Είναι μία διαδικασία επαρκής για να ορίσουμε κάθε λογική σχέση μεταξύ κατηγορημάτων; Π.χ., α ((β and γ) xor (δ iff ε)) or ζ.
Κανόνες Χωρίς Σώμα likes(zeus, X) : true.? likes(cadmus, ares). No (more).? likes(zeus, ares). Yes.? likes(zeus, zeus). Yes.? likes(zeus, Y). Yes. Y = X. Ισοδύναμο πρόγραμμα: likes(zeus, X). Οι κανόνες χωρίς σώμα συμπεριφέρονται ως γενικευμένα γεγονότα, τα οποία ισχύουν για κάθε τιμή των μεταβλητών που έχουν ως ορίσματα.
Ερμηνεία Μεταβλητών Είναι τοπικές σε κάθε πρόταση/ερώτηση. Δεν έχουν τύπο. Κατά την εκτέλεση μπορούν να έχουν τιμή (instantiated) ήόχι(un instantiated) instantiated). Οι μεταβλητές ερμηνεύονται πάντοτε καθολικά στις προτάσεις/ερωτήσεις. Ηπρόταση/ερώτηση ισχύει για κάθε πιθανή τιμή της μεταβλητής. Π.χ.,? likes(zeus, lk Y). ; ; ; Υπάρχει οντότητα Υ για την οποία ισχύει το κατηγόρημα likes με πρώτο όρισμα το zeus;
Αναδρομικές Διαδικασίες Είναι δυνατόν ένας κανόνας να περιέχει στο σώμα του το κατηγόρημα το οποία ο ίδιος ο κανόνας προσπαθεί να ορίσει. Ασκήσεις: Να γραφεί πρόγραμμα το οποίο υπολογίζει το παραγοντικό ενός αριθμού n. αναπαριστά τις ακμές ενός μη κατευθυνόμενου γράφου και υπολογίζει εάν δύο κόμβοι είναι συνδεδεμένοι μέσω κάποιου μονοπατιού.
Είδη Όρων Απλός όρος: Είναι είτε ένα άτομο (atom), ένας αριθμός (number), ή μία μεταβλητή (variable). Π.χ., άτομο zeus, αριθμός 3.1415, μεταβλητή X. Σύνθετος όρος: Αποτελείται από κάποιους όρους στους οποίους δρα ένα συναρτησιακό (functor). Π.χ., sentence noun_phrase verb_phrase verb noun_phrase zeus likes semele
Συναρτησιακά Συντακτικά, τα συνταρτησιακά μοιάζουν με κατηγορήματα, αλλά σημασιολογικά διαφέρουν: Έχουν ορίσματα τα οποία είναι (σύνθετοι) όροι. Δεν έχουν τιμή αληθείας. Δεν «εκτελούνται». Μοιάζουν με συναρτήσεις: Αντιστοιχίζουν τα ορίσματά τους σε μία άλλη υποθετική οντότητα. sentence( noun_phrase(zeus), verb_phrase( verb(likes), noun_phrase(semele) ) )
Εφαρμογή σε Βάσεις Δεδομένων course( course_code(cs(100)), course_info( title( Computing Machinery and Intelligence ), credits(4), semester_offered(winter) ), professor_info( name( A. ), surname( Turing ), title( Professor ) ), teaching_info( teaching_days_time_rooms([ lesson(day( Monday ), from(1030), to(1159), room(123)), lesson(day( Thursday ) ), from(1030), to(1159), room(123)), ]), lab_days_time_rooms([]) ), other_info( obligatory(yes), prerequisites([math(001)]) ) ).? course(a, _B, _C, _D, other_info(obligatory(e), _F)).