Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

Σχετικά έγγραφα
PROLOG Εισαγωγή (PROgramming in LOGic)

ΕΠΛ 434: Λογικός Προγραμματισμός

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

Σημαντικότητα της σωστής αναπαράστασης

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Περιεχόμενα Πρόλογος 1. Εισαγωγή 2. Τα Βασικά Μέρη ενός Προγράμματος Prolog

ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ Γλώσσες & Τεχνικές 4 ο Εξάμηνο. - Ενότητα 2 - Δημοσθένης Σταμάτης Τμήμα Πληροφορικής

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

ΑΕΠΠ Ερωτήσεις θεωρίας

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

Υπολογιστική Λογική και Λογικός Προγραμματισμός

(Imperative Programming) Pascal, C, Ada, Pazcal. (Functional Programming) Prolog (Logic Programming) (object-oriented programming) Java, C#

Ρητή μετατροπή αριθμητικής τιμής σε άλλο τύπο. Τι θα τυπωθεί στον παρακάτω κώδικα;

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Υπολογιστική Λογική και Λογικός Προγραμματισμός

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

Υπολογιστικά & Διακριτά Μαθηματικά

Ευφυής Προγραμματισμός

Κεφάλαιο 1. Εισαγωγή

Πληροφορική 2. Γλώσσες Προγραμματισμού

2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ

Outline. 4 Object-Oriented Programming

Πρόβλημα 29 / σελίδα 28

Λογικός Προγραμματισμός

2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ

Πληρουορική Γ Γσμμασίοσ

Λογικός Προγραµµατισµός: Η Γλώσσα Prolog

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

Αλγόριθμοι Αναπαράσταση αλγορίθμων Η αναπαράσταση των αλγορίθμων μπορεί να πραγματοποιηθεί με:

ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ

Κεφάλαιο 7 ο Βασικές Έννοιες Προγραμματισμού (σελ )

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

Ανάλυση της Ορθότητας Προγραμμάτων (HR Κεφάλαιο 4)

4. Ο,τιδήποτε δεν ορίζεται με βάση τα (1) (3) δεν είναι προτασιακός τύπος.

HY Λογική Διδάσκων: Δ. Πλεξουσάκης Εαρινό Εξάμηνο. Φροντιστήριο 6

Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη.

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός

Προγραμματισμός Υπολογιστών & Εφαρμογές Python. Κ.Π. Γιαλούρης

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ )

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

Προγραμματισμός ΙI (Θ)

Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά.

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ PROLOG Ι. ΧΑΤΖΗΛΥΓΕΡΟΥ ΗΣ

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΜΑΪΟΥ

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

Εισαγωγή - Βασικές έννοιες. Ι.Ε.Κ ΓΛΥΦΑΔΑΣ Τεχνικός Τεχνολογίας Internet Αλγοριθμική Ι (Ε) Σχολ. Ετος A Εξάμηνο

επιµέλεια Θοδωρής Πιερράτος

Είδη εντολών. Απλές εντολές. Εντολές ελέγχου. Εκτελούν κάποια ενέργεια. Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές

Επικοινωνία:

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Διδάσκουσα Δρ Β.

3 Αλληλεπίδραση Αντικειμένων

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Προγραμματισμός Ι (ΗΥ120)

Εισαγωγή στην PHP. ΕΣΔ 516 Τεχνολογίες Διαδικτύου. Περιεχόμενα. Περιεχόμενα. ΕΣ 516: Τεχνολογίες ιαδικτύου. ΕΣ 516: Τεχνολογίες ιαδικτύου

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

Βασικά στοιχεία της Java

Τεχνητή Νοημοσύνη. 12η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2. Α1. Ο αλγόριθμος είναι απαραίτητος μόνο για την επίλυση προβλημάτων πληροφορικής

Δεδομένα, τελεστές, είσοδος/έξοδος

ΠΑΙΓΝΙΑ Παιχνίδια Γενική Θεώρηση μεγιστοποιήσει την πιθανότητά

Περιεχόμενα 1 Πρωτοβάθμια Λογική Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά και Πληροφορικής Μαθηματικά Πανεπιστήμιο ΙΙ Ιωαννίνων ) / 60

Αναφορά (1/2) Μπορούμε να ορίσουμε μια άλλη, ισοδύναμη αλλά ίσως πιο σύντομη, ονομασία για ποσότητα (μεταβλητή, σταθερή, συνάρτηση, κλπ.

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Θέματα Προγραμματισμού Η/Υ

ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Θεωρητικές Ασκήσεις. ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. 1 ο Μέρος

Τι είναι υποπρόγραμμα; Τμήμα προγράμματος το οποίο επιτελεί ένα αυτόνομο υπολογιστικό έργο (γράφεται χωριστά από το υπόλοιπο πρόγραμμα)

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

Πρόβλημα είναι μια κατάσταση η οποία χρήζει αντιμετώπισης, απαιτεί λύση, η δε λύση της δεν είναι γνωστή, ούτε προφανής.

ΗΥ Λογική. Διδάσκων: Δημήτρης Πλεξουσάκης Καθηγητής

Εισαγωγή στον Προγ/μό Υπολογιστών

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού

ΚΕΦΑΛΑΙΟ 7 ο. Έτσι ο προγραµµατισµός µε τη ΓΛΩΣΣΑ εστιάζεται στην ανάπτυξη του αλγορίθµου και τη µετατροπή του σε σωστό πρόγραµµα.

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

Αντικειμενοστρεφής Προγραμματισμός -Python. Κ.Π. Γιαλούρης

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

Βασικές Αρχές Προγραμματισμού

Διαδικασιακός Προγραμματισμός

Βασικά στοιχεία γλώσσας προγραμματισμού. Σπάχος Κυριάκος Καθηγητής Πληροφορικής ΠΕ19

Διδακτική της Πληροφορικής ΙΙ

Λογικός τύπος Τελεστές σύγκρισης Λογικοί τελεστές Εντολές επιλογής Εμβέλεια Μαθηματικές συναρτήσεις Μιγαδικός τύπος ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ

Γ τάξη Τεχνολογικής Κατεύθυνσης Ενιαίου Λυκείου ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. ΔΟΜΗ ΕΠΙΛΟΓΗΣ Διδάσκων: ΔΟΥΡΒΑΣ ΙΩΑΝΝΗΣ

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

Εισαγωγή στην PHP. ΕΣΔ 232 Διαχείριση Δεδομένων στη Κοινωνία της Πληροφορίας. Περιεχόμενα. Περιεχόμενα

(α) Ζητείται να αναπαρασταθεί η παραπάνω γνώση σε Prolog, ώστε να δημιουργηθεί αντίστοιχο πρόγραμμα.

Transcript:

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή raniah@hua.gr 1

Εισαγωγή Η PROLOG (PROgramming in LOGic) είναι μια συμβολική γλώσσα προγραμματισμού που βασίζεται στην κατηγορηματική λογική. Περιγράφεται η λογική του προς επίλυση προβλήματος, ο έλεγχος αφήνεται στο σύστημα. Η λογική είναι ένα σύνολο προτάσεων που περιγράφει τα δεδομένα του προβλήματος και τις σχέσεις που τα συνδέουν. Προτάσεις Horn (υποπερίπτωση προτάσεων Kowalski): λογικές ισοδυναμίες της μορφής q 1, q 2,, q n r Οι ατομικοί τύποι q j είναι σε σύζευξη Το r αποτελεί το συμπέρασμα της πρότασης, ενώ τα q j αποτελούν τις προϋποθέσεις της. 2

Γεγονότα και Κανόνες Δύο είδη προτάσεων σε ένα πρόγραμμα PROLOG: Γεγονότα (σχέσεις ανάμεσα σε αντικείμενα, δεδομένα του προβλήματος) flatmate(sheldon, leonard). Κανόνες (γενικότερες σχέσεις που ορίζονται με τη βοήθεια άλλων σχέσεων) friend(x,y) :- flatmate(x,y). friend(x,y) :- collegue(x,y), hangs_out(x,y). 3

Αλληλεπίδραση Διερμηνευόμενη (Interpreted) Backward chaining Ο χρήστης δίνει ερωτήσεις (queries) και το σύστημα μπορεί προσπαθεί να απαντήσει βάσει των γεγονότων και των κανόνων Απάντηση προγράμματος: true, false, ή αντικαταστάσεις μεταβλητών. Περισσότερες από μία απαντήσεις με το ; 4

Σύνταξη Ένα PROLOG πρόγραμμα είναι ένα σύνολο από Γεγονότα: Α. Κανόνες: A :- B 1, B 2,, B k, k>0 Ερωτήσεις:?- B 1, B 2,, B k, k>0 Α, Β i : ατομικοί τύποι της μορφής p(t 1, t 2,, t n ) όπου p κατηγόρημα και t i ορίσματα Τα ορίσματα είναι όροι: Σταθερές: άτομα (συμβολοσειρές), ή αριθμοί Μεταβλητές: ξεκινούν με κεφαλαίο ή με _ Σύνθετοι όροι της μορφής f(t 1, t 2,, t n ) όπου f συναρτησιακό σύμβολο και t i ορίσματα Κάθε πρόταση τελειώνει με τελεία. Α κεφαλή του κανόνα, Β i σώμα του κανόνα. :- έχει την έννοια του IF, τα κόμμα την έννοια του AND 5

Μεταβλητές Δεν αντιπροσωπεύουν θέσεις μνήμης, όπως στις κλασσικές γλώσσες προγραμματισμού, αλλά όρους οι οποίοι δεν είναι γνωστοί κατά τη στιγμή διατύπωσης της πρότασης. Δεν έχουν τύπο, μπορούν να παίρνουν διαφορετικού τύπου τιμές σε διαφορετικές κλήσεις της ίδιας πρότασης. Η εμβέλειά τους περιορίζεται στον κανόνα στον οποίον εμφανίζονται. 6

Διαδικαστική και Δηλωτική Σημασία Τα προγράμματα στην PROLOG μπορούν να γίνουν κατανοητά με δύο τρόπους: P :- Q, R Δηλωτικά (declaratively): Το P είναι αληθές εάν το Q και το R είναι αληθή Διαδικαστικά (procedurally): Για να αποδειχθεί ότι το P είναι αληθές πρέπει πρώτα να αποδειχθεί ότι το Q είναι αληθές και στη συνέχεια ότι και το R είναι αληθές. 7

Παράδειγμα composed(roger_waters, another_brick_in_the_wall). composed(david_gilmour, another_brick_in_the_wall). composed(roger_waters, hey_you). composed(syd_barrett, lucifer_sam). sang(david_gilmour, another_brick_in_the_wall). sang(roger_waters, hey_you). sang(david_gilmour, hey_you). sang(syd_barrett, lucifer_sam). belongs(pink_floyd, another_brick_in_the_wall). belongs(pink_floyd, hey_you). belongs(pink_floyd, lucifer_sam). created(x, Y) :- composed(x, Y). created(x, Y) :- sang(x, Y). band_member(band, X) :- composed(x, Y), belongs(band, Y). band_member(band, X) :- sang(x, Y), belongs(band, Y).?- consult( bands.pl ). 8

Παράδειγμα: Σύνθετοι όροι band_member(full_name(name(david), surname(gilmour)), band(pink_floyd), instrument(guitar)). band_member(full_name(name(steve), surname(harris)), band(iron_maiden), instrument(bass)). band_member(full_name(name(roger), surname(waters)), band(pink_floyd), instrument(bass)). band_member(full_name(name(alex), surname(turner)), band(arctic_monkeys), instrument(guitar)).?- band_member(full_name(name(_), surname(surname)), band(arctic_monkeys), instrument(guitar)).?- band_member(full_name(name(_), surname(surname)), band(_), instrument(bass)). 9

Παράδειγμα: Κατηγορήματα με τάξη μηδέν mg :- mgo, h2. h2o :- mgo, h2. co2 :- c, o2. h2co3 :- co2, h2o. mgo. h2. c. o2.?-h2co3. true. 10

Εκτέλεση προγράμματος Η εκτέλεση ενός προγράμματος στην PROLOG ξεκινάει με την ερώτηση του χρήστη, που μπορεί να αποτελείται από μία ή περισσότερες κλήσεις, και φτάνει σε λύση όταν έχουν εξαντληθεί όλες οι κλήσεις που αποτελούν την ερώτηση. Το αποτέλεσμα του προγράμματος είναι η απάντηση στην ερώτηση. Φόρτωση αρχείου: consult(file). Εμφάνιση τρέχοντος προγράμματος: listing. 11

Μηχανισμός ταυτοποίησης Μηχανισμός ταυτοποίησης (unification): καθιστά ταυτόσημες μια κλήση μιας ερώτησης και την κεφαλή μιας πρότασης του προγράμματος, με τις ελάχιστες απαραίτητες αναθέσεις τιμών σε μεταβλητές (πιο γενικός ταυτοποιητής mgu) Αν η κλήση ταυτοποιείται με γεγονός, απομακρύνεται από την ερώτηση. Αν η κλήση ταυτοποιείται με κανόνα, αντικαθίσταται στην ερώτηση από το σώμα του κανόνα. 12

Αλγόριθμος Ταυτοποίησης Μια μεταβλητή χωρίς τιμή ταυτοποιείται με οτιδήποτε (σταθερά, μεταβλητή ή σύνθετο όρο). Μια μεταβλητή χωρίς τιμή μπορεί να ταυτοποιηθεί με μια άλλη μεταβλητή χωρίς τιμή, αλλά από εκείνη τη στιγμή και μετά οι μεταβλητές ενοποιούνται και κάθε ανάθεση τιμής σε μία από αυτές έχει ως αποτέλεσμα την ανάθεση της ίδιας τιμής στην άλλη. Μια σταθερά ταυτοποιείται μόνο με τον εαυτό της. Ένας σύνθετος όρος ταυτοποιείται με έναν άλλον σύνθετο όρο μόνο εφόσον έχουν το ίδιο συναρτησιακό σύμβολο και τα αντίστοιχα ορίσματά τους μπορούν να ταυτοποιηθούν. 13

Οπισθοδρόμηση (backtracking) Αν στο πρόγραμμα υπάρχουν περισσότερες της μιας προτάσεις με τις οποίες ενοποιείται η κλήση της ερώτησης, τότε η κλήση ενοποιείται με την πρώτη κατά σειρά από αυτές. Σημείο οπισθοδρόμησης: εναλλακτικές απαντήσεις σε περίπτωση αποτυχίας εύρεσης λύσης ή σε περίπτωση απαίτησης επιπλέον λύσεων. Ο μηχανισμός οπισθοδρόμησης επιστρέφει στο σημείο ακυρώνοντας τα υπολογιστικά βήματα που έπονται και συνεχίζει από εκεί την εκτέλεση. 14

Παράδειγμα Δέντρο υπολογισμού greek(socrates). human(turing). human(socrates). fallible(x) :- human(x).?- fallible(y), greek(y).?- fallible(y), greek(y). {Y=X}?- human(y), greek(y). {Y=turing} {Y=socrates}?- greek(turing).?- greek(socrates). αποτυχία 15

family relations father(x,y) :- parent(x,y), man(x). mother(x,y) :- parent(x,y), woman(x). Κάποιο άτομο Χ είναι πατέρας (is_father/1) Ο Χ είναι αδερφός του (της) Υ. Ο Χ είναι παππούς του (της) Υ. Η Χ είναι θεία του (της) Υ 16

family relations father(x,y) :- parent(x,y), man(x). mother(x,y) :- parent(x,y), woman(x). is_father(x) :- father(x,_). brother(x,y) :- parent(z,x), parent(z,y), man(x), X\=Y. grandfather(x,y) :- father(x,z), parent(z,y). sister(x,y) :- parent(z,x), parent(z,y), woman(x), X\=Y. aunt(x,y) :- sister(x,z), parent(z,y). 17

Οδικό δίκτυο Thessaloniki Ioannina Larissa Lamia Patra Athina 18

Οδικό δίκτυο - δεδομένα road(thessaloniki,ioannina). road(thessaloniki,larissa). road(larissa,lamia). road(lamia,athina). road(athina,patra). road(lamia,patra). road(ioannina,patra). Ioannina Thessaloniki Larissa Lamia Patra Athina 19

Οδικό δίκτυο - ερωτήσεις Υπάρχει κάποια πόλη X που να έχει δρόμο προς μια πόλη Υ, η οποία έχει δρόμο προς την Χ; (αμφίδρομη σχέση)?-road(x,y), road(y,x). false. Υπάρχουν 2 πόλεις που έχουν δρόμο προς μία τρίτη πόλη;?-road(x,y), road(ζ,υ). true, BUT unexpexted asnwers! 20

Οδικό δίκτυο - κανόνες Αν μια πόλη Χ έχει δρόμο προς μια πόλη Υ, τότε και η πόλη Υ έχει δρόμο προς την Χ. road(x,y) :- road(y,x). Αν μια πόλη Χ έχει δρόμο προς μια πόλη Υ και η Υ έχει δρόμο προς μια Ζ, τότε και η Χ έχει δρόμο προς την Ζ. road(x,y), road(y,z) :- road(x,z). Αν δυο πόλεις Χ και Υ έχουν δρόμο προς μια πόλη Ζ, τότε έχουν και δρόμο μεταξύ τους. road(x,z), road(y,z) :- road(x,y). 21

students & classes student(nick,class(1)). student(jim,class(3)). student(susan,class(2)). student(sophie,class(5)). student(george,class(2)). student(helen,class(3)). is_taught(math,class(1)). is_taught(math,class(2)). is_taught(math,class(5)). is_taught(language,class(2)). is_taught(history,class(1)). is_taught(music,class(2)). is_taught(music,class(5)). likes(language,george). likes(math,sophie). likes(math,nick). likes(music,x) :- is_taught(music,class(t)), student(x,class(t)). friends(s1,s2) :- likes(subject,s1), likes(subject,s2). 22

students & classes Είναι η sophie μαθήτρια της 5 ης τάξης; Ποιοί είναι οι μαθητές της 2 ης τάξης; Διδάσκεται γλώσσα στην τάξη της susan; Σε ποιούς μαθητές αρέσει η μουσική; Ποιοί είναι οι φίλοι της sophie; Ποιοί είναι οι φίλοι των μαθητών που διδάσκονται μαθηματικά; 23

students & classes?- student(sophie,class(5)).?- student(s,class(2)).?- student(susan,t), is_taught(language,t).?- likes(music,s).?- friends(sophie,f).?- friends(m1,m2), is_taught(math,c), student(m1,c), M1\=M2. 24

Αναδρομή flight(athens, rome). flight(athens, london). flight(athens, paris). flight(rome, lisbon). flight(paris, brussels). flight(london, helsinki). connected_by_air(x,z) :- flight(x,z). connected_by_air(x,z) :- flight(x,y), flight(y,z). connected_by_air(x,z) :- flight(x,y1), flight(y1,y2), flight(y2,z). connected_by_air(x,z) :- flight(x,z). connected_by_air(x,z) :- flight(x,y), connected_by_air(y,z). 25

Αναδρομικές Δομές Δεδομένων (Λίστες) Οι σύνθετοι όροι χρησιμεύουν στην αναπαράσταση σύνθετων οντοτήτων ενός προβλήματος triangle(point(0,0), point(1,4), point(5,12)); Οι αναδρομικές δομές δεδομένων είναι σύνθετοι όροι οι οποίοι ορίζονται αναδρομικά εγκλείοντας όρους της ίδιας μορφής με τον εαυτό τους. Ειδική κατηγορία: λίστα Συναρτησιακό σύμβολο η τελεία. Τα ορίσματά της είναι οποιοιδήποτε όροι, ακόμα και λίστες Η κενή λίστα αναπαρίσταται ως [] Παράδειγμα λίστας με τρία στοιχεία:.(a,.(b,.(c, []))) Μπορεί επίσης να αναπαρασταθεί ως [a, b, c] 26

Λίστες Μια λίστα είτε είναι κενή [] αποτελείται από μια δομή με δύο όρους κεφαλή (head), που είναι το πρώτο στοιχείο της λίστας oυρά (tail), που είναι το υπόλοιπο τμήμα της λίστας Αναπαρίσταται ως [Η Τ] και αντιστοιχεί στον σύνθετο όρο.(η,τ) Η ουρά είναι πάντα μια λίστα. Η κεφαλή μπορεί να είναι οποιοσδήποτε απλός ή σύνθετος όρος, ή λίστα. Ο χειρισμός λιστών γίνεται συνήθως με αναδρομικούς κανόνες οι οποίοι επιτελούν κάποια λειτουργία στην κεφαλή της λίστας και στη συνέχεια καλούν τον εαυτό τους για την ουρά, ενώ συνήθως υπάρχει τερματικός κανόνας για την κενή λίστα. 27

Λίστες Μια λίστα μπορεί να αναπαρασταθεί σχηματικά σαν δένδρο με κόμβους το σύμβολο της λίστας και φύλλα τα στοιχεία της. π.χ. η λίστα [2, 4, 6, 8] μπορεί να αναπαρασταθεί σαν:. 2 4. 6.. 8 [] 28

lists Διαπίστωση εάν ένας όρος είναι λίστα is_list([]). is_list([head Tail]) :- is_list(tail). Έλεγχος αν ένα στοιχείο είναι μέλος μιας λίστας member(x, [X Y]). member(x, [Head Tail]) :- member(x, Tail). 29

Δέντρο υπολογισμού member?-member(b,[a,b,c,b,e]).?-member(b,[b,c,b,e]).?-member(b,[c,b,e]). member(x,[x Y]).?-member(b,[b,e]). member(x,[head Tail]) :- member(x, Tail).?-member(b,[e]).?-member(b,[]). fail 30

more lists Τελευταίο στοιχείο μιας λίστας last(h, [H]). last(s, [H T]) :- last(s,t). Συνένωση Λιστών append([],l,l). append([h L1],L2,[H L]) :- append(l1,l2,l). 31

even more lists Διαδοχικά στοιχεία λίστας consecutive(h1,h2,[h1,h2 T]). consecutive(h1,h2,[h T]) :- consecutive(h1,h2,t). Λίστα με στοιχεία λίστες (π.χ. αναπαράσταση πολυδιάστατων πινάκων) [[12,45,-3],[-7,6,23],[11,3,-9]] (αναπαράσταση και με κατηγόρημα t/3) 32

reverse list 1 ος τρόπος reverse([],[]). reverse([h T],RL) :- reverse(t,rt), append(rt,[h],rl). 2 ος τρόπος reverse(l,rl) :- rev(l,[],rl). rev([h T],S,RL) :- rev(t,[h S],RL). rev([],rl,rl). 33

initial part of a list 1 ος τρόπος initial([],l). initial([h T1],[H T2]) :- initial(t1,t2). 2 ος τρόπος initial(l1,l2) :- append(l1,l,l2). 34

final part of a list 1 ος τρόπος final(l,l). final(l1,[h L2]) :- final(l1,l2). 2 ος τρόπος final(l1,l2) :- append(l,l1,l2). 35

sublist 1 ος τρόπος sublist([],l). sublist([],l,0). sublist([h L1],[H L2]) :- sublist(l1,l2,0). sublist(l1,[h L2]) :- sublist(l1,l2). sublist([h L1],[H L2],0) :- sublist(l1,l2,0). 2 ος τρόπος sublist(sl,l) :- initial(sl,lt), append(l3,lt,l). 36

symmetrical list Ίδια είτε την διασχίσουμε από την αρχή προς το τέλος είτε από το τέλος προς την αρχή. symmetrical([x]). symmetrical([x,x]). symmetrical(s) :- append([x ST],[X],S), symmetrical(st). 37

same length in lists same_length([x],[y]). same_length([x T1],[Y T2]) :- same_length(t1,t2). 38

Ενσωματωμένα Κατηγορήματα Τα ενσωματωμένα κατηγορήματα προσθέτουν επιπλέον δυνατότητες στην γλώσσα και αφορούν μαθηματικές πράξεις και συναρτήσεις, είσοδο / έξοδο σε αρχεία και συσκευές, έλεγχο τύπου δεδομένων, διαχείριση λύσεων κτλ. Ενοποίηση και σύγκριση όρων: = και \= (συγκρίνει αν δύο όροι μπορούν να ταυτοποιηθούν) == και \== (συγκρίνει αν δύο όροι είναι ταυτόσημοι) π.χ. μεταβλητή και σταθερά: το = επιτυγχάνει, το == όχι. 39

Μαθηματικές διαδικασίες και συναρτήσεις sum(x,y,z), product(x,y,z), power(x,n,z) Διαφορά και πηλίκο με χρήση των παραπάνω αντίστροφα. Κατηγορήματα σύγκρισης <, > κτλ. (Ο τελεστής =< γράφεται ανάποδα) is: αποτιμάει αριθμητικές εκφράσεις και η τιμή τους ενοποιείται με κάποια μεταβλητή. Μπορούν να χρησιμοποιηθούν μεταβλητές οι οποίες έχουν πάρει προηγουμένως κάποια τιμή και οι τελεστές +,-,*,/,mod,^. double:- write('please input a number= '), read(x),nl, write('double is '), Y is 2*X, write(y),nl. 40

Παράδειγμα: Μαθηματικές διαδικασίες Fibonacci sequence: F 0 = 0, F 1 = 1, F n = F n-1 + F n-2 fib(0,0). fib(1,1). fib(n,r):- N >= 2, N1 is N-1, N2 is N-2, fib(n1,r1), fib(n2,r2), R is R1+R2. 41

list length length([],0). length([_ L],M) :- length(l,m1), M is M1 + 1. 42

n th element of a list nth(0,[x _],X). nth(n,[_ T],R):- M is N-1,nth(M,T,R). 43

Σύγκριση μαθηματικών όρων Κατηγορήματα σύγκρισης: =:= > < >= =< =\= Μέγιστο στοιχείο λίστας max([x], X). max([x Y],M) :- max(y,m1), max_two(x,m1,m). max_two(x,y,x) :- X > Y. max_two(x,y,y) :- X =< Y. 44

Ταυτοποίηση και σύγκριση = και \= συγκρίνουν αν δύο όροι μπορούν να ταυτοποιηθούν =:= και =\= συγκρίνουν αν δύο όροι είναι ταυτόσημοι π.χ. για μεταβλητή και σταθερά: το = επιτυγχάνει, το == όχι. parent(x,y) = parent(nick, maria) true parent(x,y) \= parent(nick, maria) false parent(x,jenny) \= parent(nick, maria) true 2+1 = 1+2 false 2+3 = 1+4 false 2+1 = 2+1 true 2+1 =:= 1+2 true 2+3 =:= 1+4 true 2+1 =:= 2+1 true 45

Διαδικασίες εισόδου / εξόδου Ανάγνωση όρων ή χαρακτήρων από το προκαθορισμένο κανάλι εισόδου (πληκτρολόγιο ή αρχείο) read(x) διαβάζει τον επόμενο όρο που εισάγεται (η τελεία δηλώνει το τέλος του όρου) Εκτύπωση στο προκαθορισμένο κανάλι εξόδου (οθόνη ή αρχείο) write(x) γράφει τον όρο Χ nl αλλάζει γραμμή Ανακατεύθυνση καναλιών με see, seen, tell, told κτλ. 46

Σύνθεση / διάσπαση σύνθετων όρων =.. (κατηγόρημα univ): πετυχαίνει όταν το πρώτο όρισμα είναι σύνθετος όρος και το δεύτερο λίστα Το πρώτο στοιχείο της λίστας είναι το συναρτησιακό σύμβολο του σύνθετου όρου και τα υπόλοιπα τα ορίσματά του.?- friend(sheldon, leonard) =.. List. List =.. [friend, sheldon, leonard] Το κατηγόρημα κάνει επίσης και σύνθεση όρων: P =.. [point, 2, 3]. P = point(2,3) 47

Έλεγχος τύπου δεδομένων Οι μεταβλητές στην PROLOG δεν έχουν τύπο. Μπορούν να ενοποιηθούν με οποιονδήποτε όρο. Παρέχεται σύνολο κατηγορημάτων για τον ορισμό και τον έλεγχο του τύπου των μεταβλητών var, novar, atom, integer κτλ. 48

Δυναμική τροποποίηση προγράμματος Τα γεγονότα και οι κανόνες ενός προγράμματος συνήθως φορτώνονται από ένα αρχείο και αποθηκεύονται στη μνήμη του συστήματος. Η PROLOG δίνει τη δυνατότητα τροποποίησης των περιεχομένων της μνήμης κατά τη διάρκεια εκτέλεσης του προγράμματος. asserta(x) προσθέτει στη μνήμη τον κανόνα ή γεγονός Χ πριν από τις υπάρχουσες προτάσεις με το ίδιο κατηγόρημα και ίσο αριθμό ορισμάτων assertz(x) προσθέτει τον κανόνα η γεγονός μετά τις υπάρχουσες προτάσεις retract(x) αφαιρεί από τη μνήμη τον κανόνα ή γεγονός Χ 49

Δυναμική τροποποίηση προγράμματος Παράδειγμα Στη μνήμη υπάρχει: friend(sheldon, leonard).?- friend(sheldon, X). X = leonard?- asserta(friend(sheldon, howard)). yes?- friend(sheldon, X). X = howard; X = leonard?- assertz(friend(sheldon, rajesh)). yes?- friend(sheldon, X). X = howard; X = leonard; X = rajesh 50

name(atom, CharCodes) Μετατρέπει ένα atom (που μπορεί να είναι και String), σε μια λίστα που περιέχει τους αντίστοιχους κωδικούς χαρακτήρων και αντίστροφα.?- name( test, X). X = [116, 101, 115, 116]. 51

Διαχείριση συνόλου λύσεων Ορισμένες φορές είναι χρήσιμο να βρεθούν όλες οι εναλλακτικές λύσεις σε μια κλήση και για να μπορούμε να τις επεξεργαστούμε όλες μαζί. Η PROLOG παρέχει τη δυνατότητα συλλογής των λύσεων bagof setof findall 52

Διαχείριση συνόλου λύσεων - Παράδειγμα H findall(var, Goal, List) πετυχαίνει όταν στην λίστα List ως στοιχεία υπάρχουν όλες οι εναλλακτικές τιμές που μπορεί να πάρει η μεταβλητή Var, έτσι ώστε ο στόχος Goal να αληθεύει. Αν υπάρχουν τα ακόλουθα γεγονότα wrote(jrr_tolkien, lord_of_the_rings). wrote(jrr_tolkien, hobbit). και εκτελεστεί η κλήση PROLOG?- findall(x, wrote(jrr_tolkien,x), List). List = [lord_of_the_rings,hobbit] δηλαδή η μεταβλητή List θα έχει σε λίστα όλα τα βιβλία του Tolkien. Η findall(x, wrote(writer,x), List). θα δώσει σε λίστα όλα τα βιβλία της βάσης γνώσης που έχουν γραφεί ποτέ από οποιονδήποτε Writer, ενώ η αντίστοιχη bagof θα τα χωρίσει ανά συγγραφέα. Η setof συμπεριφέρεται όπως η bagof αλλά αφαιρεί τα διπλότυπα. 53

Άρνηση ως αποτυχία (negation as failure) Διαφορά PROLOG από κατηγορηματική λογική: σημασία της άρνησης. Στην κατηγορηματική λογική μπορεί να υπάρξουν αρνητικά γεγονότα Στην PROLOG δε υπάρχει η δυνατότητα αναπαράστασης αρνητικής γνώσης Η ύπαρξη ενός γεγονότος δηλώνει την αλήθεια του, ενώ θεωρείται πως ό,τι δεν αναφέρεται ρητά στην μνήμη τότε δεν ισχύει (closed world assumption). Σύμφωνα με τα παραπάνω, οποιαδήποτε σχέση δεν μπορεί να αποδειχθεί από το σύστημα, θεωρείται ψευδής. Η υλοποίηση αυτή διαφέρει σαφώς από την έννοια της άρνησης στην κατηγορηματική λογική, ωστόσο απαλλάσσει τον προγραμματιστή από την υποχρέωση ορισμού όλης της αρνητικής πληροφορίας. 54

not - Παράδειγμα Το κατηγόρημα not δέχεται ως όρισμα μια οποιαδήποτε κλήση της PROLOG. Αν η κλήση μπορεί να αποδειχθεί, το κατηγόρημα αποτυγχάνει, αλλιώς πετυχαίνει.?- not(member(a,[a,b,c])). no?- not(member(d,[a,b,c])). yes 55

Παράδειγμα: Λογικά Κυκλώματα truth_value(0,0). truth_value(1,1). truth_value(and(x,y), 1) :- truth_value(x,1), truth_value(y,1). truth_value(and(x,y), 0) :- truth_value(x,0). truth_value(and(x,y), 0) :- truth_value(y,0). truth_value(or(x,y), 1) :- truth_value(x,1). truth_value(or(x,y), 1) :- truth_value(y,1). truth_value(or(x,y), 0) :- truth_value(x,0), truth_value(y,0). truth_value(not(x), 1) :- truth_value(x,0). truth_value(not(x), 0) :- truth_value(x,1). 56

Παράδειγμα: Λογικά Κυκλώματα Λογική Συνάρτηση Κυκλώματος: not(or(and(not(x),y),and(z,y))) Αναπαριστούμε το λογικό κύκλωμα με κατηγόρημα: circ(1, [X,Y,Z], not(or(and(not(x),y),and(z,y)))). Ορίζουμε τη σχέση: out(circ_code, Value_list, Output) :- circ(circ_code, Value_list, Log_function), truth_value(log_function, Output). Ερωτήσεις:?- out(1, [1,0,0], Output).?- out(1, [1,1,1], Output). 57

Παράδειγμα: Αναγραμματισμός start:- write('write a word='),read(x),nl, name(x,l),permut(l,r), name(cuv,r),write(cuv),tab(5),fail. add(x,l,[x L]). add(x,[l H],[L R]):- add(x,h,r). permut([],[]). permut([l H],R):- permut(h,r1),add(l,r1,r).?- start. Write a word= max. max amx axm mxa xma xam no 58

Ενδεικτική Βιβλιογραφία Ενότητα Π.1.1 του Παραρτήματος 1 του βιβλίου «Τεχνητή Νοημοσύνη», Ι. Βλαχάβας, Π. Κεφαλάς, Ν. Βασιλειάδης, Φ. Κόκκορας και Η. Σακελλαρίου. 59