Άσκηση: Αρχή απόφασης και Prolog

Δίνονται τα γεγονότα:

Α. Όλα τα γερμανικά αυτοκίνητα είναι σύγχρονα και ανθεκτικά.

Β. Τα Opel Omega και Mercedes 200 είναι οικογεινειακά αυτοκίνητα.

Γ. Το Opel Calibra είναι σπορ αυτοκίνητο.

Δ. Ο Γιώργος προτιμά τα σύγχρονα, ανθεκτικά και σπορ αυτοκίνητα.

Ζητούνται:

Ι. Να απαντήσετε στο ερώτημα (με την αρχή της απόφασης) «Ποιο αυτοκίνητο προτιμά ο Γιώργος ;».

ΙΙ. Να δοθεί μια υλοποίηση της λύσης σε Prolog.

Σημείωση: Συμπληρώστε τη βάση γνώσης όπου χρειάζεται.

Λύση

Πρώτα από όλα θα συμπληρώσουμε τη βάση γνώσης με τους εξής κανόνες (ευκόλως εννοούμενους για τα ανθρώπινα δεδομένα, απαραίτητους όμως για τις μηχανές).

Ε. Τα Opel Omega, Opel Calibra και Mercedes 200 είναι γερμανικά.

Ζ. Εάν ένα αυτοκίνητο είναι οικογενειακό τότε δεν είναι σπορ και αντιστρόφως.

Ι. Το πρώτο πράγμα που πρέπει να κάνουμε για να εφαρμόσουμε την αρχή της απόφασης είναι να φέρουμε τους κανόνες σε διαζευκτική μορφή. Έτσι παίρνουμε:

1. ~γερμανικό(x) ?σύγχρονο(x)

2. ~γερμανικό(x) ?ανθεκτικό(x)

3. οικογενειακό(Opel Omega)

4. οικογενειακό(Mercedes 200)

5. σπορ(Opel Calibra)

6. γερμανικό(Opel Omega)

7. γερμανικό(Mercedes 200)

8. γερμανικό(Opel Calibra)

9. ~σύγχρονο(x) ?~ανθεκτικό(x) ?~σπορ(x) ?γιώργος_προτιμά(x)

10. ~οικογενειακό(x) ?~σπορ(x)

Προκειμένου να δούμε την προτίμηση του Γιώργου, εισάγουμε μια – μια τις ακόλουθες προτάσεις: γιώργος_προτιμά(Opel Omega), ~γιώργος_προτιμά(Opel Omega), γιώργος_προτιμά(Mercedes 200), ~γιώργος_προτιμά(Mercedes 200), γιώργος_προτιμά(Opel Calibra), ~γιώργος_προτιμά(Opel Calibra). Όταν επεξεργαζόμενοι κάποια από αυτές τις προτάσεις με τη βάση των κανόνων 1-10, προκύψει αντίφαση τότε σημαίνει ότι ισχύει το αντίθετο της προτάσεως αυτής.

Για παράδειγμα εισάγουμε την πρόταση:

11. ~γιώργος_προτιμά(Opel Calibra)

Με εφαρμογή της αρχής της απόφασης στις 11, 9 και σύγχρονη ενοποίηση x=Opel Calibra, παίρνουμε:

12. ~σύγχρονο(Opel Calibra) ?~ανθεκτικό(Opel Calibra) ?~σπορ(Opel Calibra)

Κατόπιν, αρχή απόφασης στις 12, 1 οπότε:

13. ~γερμανικό(Opel Calibra) ?~ανθεκτικό(Opel Calibra) ?~σπορ(Opel Calibra)

και αρχή απόφασης στις 13, 2:

14. ~γερμανικό(Opel Calibra) ?~γερμανικό(Opel Calibra) ?~σπορ(Opel Calibra)

που απλοποιείται στην:

14. ~γερμανικό(Opel Calibra) ?~σπορ(Opel Calibra)

Κατόπιν, εφαρμόζουμε αρχή της απόφασης στις 14, 5:

15. ~γερμανικό(Opel Calibra)

και 15, 8:

16. ?

Δηλαδή, φθάσαμε σε αντίφαση και επομένως ισχύει η άρνηση της αρχικής μας πρότασης (11), άρα συμπεραίνουμε: γιώργος_προτιμά(Opel Calibra). Εάν είχαμε εισάγει την πρόταση: γιώργος_προτιμά(Opel Calibra) στην αρχική βάση, τότε θα φθάναμε σε ένα σημείο που δεν θα μπορούσαν να παραχθούν άλλα γεγονότα ούτε και θα ξεπέφταμε σε καμιά αντίφαση. Στην περίπτωση αυτή δεν θα οδηγούμασταν σε κανένα συμπέρασμα.

Σε μια άλλη περίπτωση εισάγουμε τη σχέση:

17. ~γιώργος_προτιμά(Mercedes 200).

Τότε με αρχή απόφασης στις 17, 9 και ενοποίηση x=Mercedes 200, θα πάρουμε:

18. ~σύγχρονο(Mercedes 200) ?~ανθεκτικό(Mercedes 200) ?~σπορ(Mercedes 200)

Εφαρμόζουμε αρχή απόφασης στις 18, 1:

19. ~γερμανικό(Mercedes 200) ?~ανθεκτικό(Mercedes 200) ?~σπορ(Mercedes 200)

και 19, 2:

20. ~γερμανικό(Mercedes 200) ?~σπορ(Mercedes 200)

Κατόπιν αρχή απόφασης στις 20, 7:

21. ~σπορ(Mercedes 200)

Εδώ πλέον δεν μπορούμε να προχωρήσουμε άλλο (δεν παράγονται άλλα δεδομένα ούτε και φθάνουμε σε αντίφαση). Επομένως δεν γνωρίζουμε τίποτα για το αν ο γιώργος προτιμά τo Mercedes 200. Το μόνο σίγουρο λοιπόν είναι ότι: γιώργος_προτιμά(Opel Calibra). Γιατί δεν καταλήγουμε κάπου για το Opel Omega και Mercedes 200, ευθύνεται η πρόταση Δ. Εάν ήταν διατυπωμένη ως εξής:

Δ΄: Ο Γιώργος προτιμά ΜΟΝΟ τα σύγχρονα, ανθεκτικά και σπορ αυτοκίνητα.

Τότε θα παίρναμε τις επιπλέον προτάσεις:

. ~γιώργος_προτιμά(x) ?σύγχρονο(x)

. ~γιώργος_προτιμά(x) ?ανθεκτικό(x)

. ~γιώργος_προτιμά(x) ?σπορ(x)

Τότε, θα καταλήγαμε στις επιπλέον προτάσεις: ~γιώργος_προτιμά(Opel Omega), ~γιώργος_προτιμά(Mercedes 200).

II. Το πρόγραμμα Prolog είναι το ακόλουθο:

σύγχρονο(X) :- γερμανικό(X).

ανθεκτικό(X) :- γερμανικό(X).

οικογενειακό(opel-omega).

οικογενειακό(mercedes-200).

σπορ(opel-calibra).

γερμανικό(opel-omega).

γερμανικό(mercedes-200).

γερμανικό(opel-calibra).

γιώργος_προτιμά(X) :- σύγχρονο(X), ανθεκτικό(X), σπορ(X).

οικογενειακό(X) :- σπορ(X), !, fail.

σπορ(X) :- οικογενειακό(X), !, fail.

Οι δύο τελευταίοι κανόνες ουσιαστικά υλοποιούν μια άρνηση κλειστού τύπου. Δηλαδή εάν ένα αυτοκίνητο δεν ευρίσκεται σαν σπορ, τότε είναι αναγκαστικά οικογενειακό και αντίστροφα.
 

Λύση - Επιμέλεια : Γιάννης Πανταζόπουλος