Εισαγωγή (Φεβρουάριος 2007)

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

Το άρθρο είναι μία εκλαϊκευση βασικών αρχών που δεν άλλαξαν καθόλου τις
τελευταίες δύο δεκαετίες. Εκείνο που άλλαξε, είναι μόνο η πολύ πρόσφατη αναζωπύρωση ενδιαφέροντος γύρω από αυτά τα θέματα, που παραμένουν πολύ επίκαιρα σήμερα. Ακόμη περισσότερο επίκαιρα... λόγω των εξελίξεων στο "Semantic Web" - της επόμενης γενιάς του σημερινού Διαδικτύου, που για πρώτη φορά αναγκάζεται να εφαρμόσει πρακτικά τις θεωρητικές αρχές που εξηγεί με απλά λόγια... αυτό το άρθρο. Δεν επαρκεί (φυσικά) για να κατανοήσετε πλήρως το θέμα του, αλλά (σαν πρώτο βήμα) προφέρει τις πιό βασικές αρχές με απλά λόγια.

Ο φοιτητής του "Ανοιχτού Πανεπιστημίου" κ. Νίκος Καστελλάνος με... ανακάλυψε  πρόσφατα μέσω μηχανών αναζήτησης και ζήτησε την άδεια να συμπεριλάβει αυτό το άρθρο (όπως και τα υπόλοιπα της ίδια σειράς) στα κείμενα που δημοσιεύονται στο φόρουμ του "Ανοιχτού Πανεπιστημίου". Έδωσα ολόψυχα αυτή την άδεια! Χαίρομαι που αυτή η πολύ παλιά δουλειά δεν πήγε τελικά καθόλου χαμένη, ούτε τότε (όταν ήταν "κύριο θέμα" εκείνου του περιοδικού), ούτε και σήμερα (το 2007).

Γ.Α.Σ.

Μερικά links σε παρεμφερείς πρόσφατες εργασίες:

(άρθρο στο περιοδικό "PC Master", Τεύχος 5, Ιανουάριος 1990)

ΤΕΧΝΗΤΗ ΕΥΦΥΙΑ,
ΦΥΣΙΚΗ ΓΛΩΣΣΑ,
& ΚΟΙΝΗ ΛΟΓΙΚΗ
-μία Πρακτική Εισαγωγή
τού Γιώργου Α. Στάθη


  • (1) Τί ΣΗΜΑΙΝΕΙ (σήμερα) "Τεχνητή Ευφυία";
  • (2) Μερικές Ματιές στήν Ιστορία (τής Τεχνητής Ευφυίας)
  • (3) Τό... παρανοϊκό "κριτήριο TURING", καί η... Αντιστροφή του!
  • (4) "Μύηση-Αστραπή" στή γλώσσα PROLOG
  • (5) Στήν PROLOG, "αληθινό" είναι ο,τι δηλώσεις! 
  • (6) Δύο όπλα τής PROLOG: O μίτος τής Αριάδνης, κι ένα... ψαλίδι! 
  • (7) Μερικά Συμπεράσματα


  • (1) Τί ΣΗΜΑΙΝΕΙ (σήμερα) "Τεχνητή Ευφυία";

    Η "Τεχνητή Ευφυία" είναι ένας γενικός όρος, πού αναφέρεται σ'ένα τεράστιο φάσμα εφαρμογών (από "νευρωνικά δίκτυα" μέχρι "Εμπειρογνώμονα Συστήματα"). Ο κοινός παρονομαστής τους είναι (όπως ξέρετε) μιά συγγένεια μέ τήν (ανθρώπινη) ευφυία, πού περιλαμβάνει τή χρήση "Λογικών κανόνων" (γιά τήν εξαγωγή συμπερασμάτων), τήν αναγνώριση φωνής ή εικόνας, τό "έξυπνο" παίξιμο παιχνιδιών, κ.ο.κ.

    Οπως συμβαίνει σέ τέτοιες περιπτώσεις, δέν υπάρχει κάποιος εντελώς σαφής καί "καθολικά αποδεκτός" ορισμός. Κι αυτό ενισχύεται απ'τό ότι η "Τεχνητή Ευφυία" είχε (ανέκαθεν) δύο βασικές σχολές: Τή "Σκληροπυρηνική Σχολή", ("Hard Artificial Intelligence"), καί τήν (ας πούμε) "μετριοπαθή σχολή" (Soft  A.I.). Οι πρώτοι πιστεύουν πως η ίδια η ΣΥΝΕΙΔΗΤΟΤΗΤΑ μπορεί νά ΕΞΗΓΗΘΕΙ μέ ΜΗΧΑΝΙΚΟ ΤΡΟΠΟ, κι επομένως μιά μέρα οι "μηχανές" θά γίνουν αληθινά Συνειδητές, όχι μόνο "τεχνητά έξυπνες", ενώ οι δεύτεροι θεωρούν πώς η Συνείδηση ΔΕΝ είναι ένα απλό μηχανιστικό φαινόμενο, άρα οποιοδήποτε πρόγραμμα, ή μηχάνημα, μέ "Τεχνητή Ευφυία", παρόλες τίς πειστικές "εξυπνάδες" του, δέν θάχει καμμιά "Συνειδητότητα".

    Ας σημειωθεί ότι στήν ελληνική γλώσσα, η λέξη "Ευφυία" ΔΕΝ έχει ακριβώς τό ίδιο νόημα μέ τή λέξη "Νοημοσύνη". Ετσι (στα ελληνικά) ο όρος "Τεχνητή Νοημοσύνη", εκφράζει έμμεσα τούς "σκληροπυρηνικούς", πού πιστεύουν ότι ένα τεχνητά ευφυές πρόγραμμα ή μηχάνημα, μπορεί νά είναι όχι μόνο "ευφυές", αλλά καί "Νοήμον" - δηλαδή... "Συνειδητό Ον"! (ΕΝΩ: "Ευφυές" ΔΕΝ σημαίνει απαραίτητα ΚΑΙ "νοήμον"!)

    Τώρα... Ποιά "Σχολή" έχει "δίκηο";

    Ο γράφων συμφωνεί μέ τή δεύτερη, τή "μετριοπαθή σχολή". (Γι αυτό καί ΔΕΝ θά συναντήσετε τόν όρο "Τεχνητή Νοημοσύνη" πουθενά αλλού μέσα σ'αυτό τό άρθρο!). Αλλά... μήν ανησυχείτε! Δέν θά εντρυφήσουμε άλλο σέ τέτοια κάπως "μεταφυσικά" ερωτήματα (Τουλάχιστον μέσα σ'αυτές τίς σελίδες)...

    Το πρώτο Ελληνικό παιγνίδι (για Η/Υ), Ο "Κόμπος-1" (1984) χρησιμοποιούσε περίπου... 1100 εντολές BASIC για να κάνει "Τεχνητά Ευφυείς" διαλόγους με το χρήστη. Ομως για τα σημερινά δεδομένα δεν θα μπορούσε να θεωρηθεί "Τεχνητά Ευφυής". Και οι 1100 εντολές BASIC δεν ήταν παρά το αντίστοιχο μερικών δεκάδων εντολών σε γλώσσα PROLOG.


    (2) Μερικές Ματιές στήν Ιστορία (τής Τεχνητής Ευφυίας)
     
       Είναι πιθανό νά ξέρετε ήδη, ένα απ'τα πρώτα προγραμματα Τεχνητής Ευφυίας, τήν περίφημη "ΕΛΙΖΑ" (τού Weisenbaum), πού κυκλοφόρησε μάλιστα καί στή χώρα μας.  Η ΕΛΙΖΑ ήταν μία... "ψυχοθεραπεύτρια". Λειτουργούσε σάν ανθρώπινος(;) ψυχοθεραπευτής (τής "Ροτζεριανής Σχολής")... δηλαδή κάπως έτσι:
     
      ΕΛΙΖΑ:   - Για πέστε μου τό πρόβλημα σας.

      ΧΡΗΣΤΗΣ: - Αντιπαθώ τούς ψυχολόγους πού κανουν τόν εξυπνο!

      ΕΛΙΖΑ:   - Γιατί αντιπαθείτε τούς ψυχολόγους πού κάνουν τόν εξυπνο;
     
      ΧΡΗΣΤΗΣ: - Mιλάνε όλοι τους σαν εσένα!
     
      ΕΛΙΖΑ:   - Tί σάς κάνει να νομίζετε πως μιλούν όλοι τους σάν εμένα;
     
      ΧΡΗΣΤΗΣ: - Μα ο,τι κι αν σου πω, αρχίζεις να με ρωτας "γιατί τό νομίζω"!

      ΕΛΙΖΑ:   - Tι σας κάνει να νομίζετε πως ο,τι κι αν μού πείτε,
                       αρχίζεις να μέ ρωτας "γιατί το νομίζω";      (σ.σ. -BUG!)

      ΧΡΗΣΤΗΣ: - Πάρτα βρέ ΕΛΙΖΑ καί κάντα κορνίζα!

      ΕΛΙΖΑ:   - Καταλαβαίνω. Γιά πέστε μου περισσότερα γιά τό πρόβλημά σας...

     ........................................................................

    Από τέτοιους διαλόγους, καταλαβαίνετε ΕΣute;ΕΙΣ τό πρόβλημα τής ΕΛΙΖΑΣ: ΔΕΝ "καταλάβαινε" απολύτως τίποτα! Απλώς έβρισκε μέσα στίς προτάσεις τού χρήστη ορισμένες "φράσεις-κλειδιά", ενεργοποιώντας "γραμματικές συνθέσεις σχολίων", σάν αυτά πού διαβάσατε. Η μόνη "ευφυία" τής ΕΛΙΖΑΣ βρισκόταν στή γραμματική επεξεργασία -τών απαντήσεών της! (Ενώ μιά "γεννήτρια ψευδο-τυχαίων επιλογών" ...έσπαζε(;) κάπως τή μονοτονία!).

    Ο Weisenbaum έγραψε τήν ΕΛΙΖΑ γιά νά σατιρίσει τόν... μηχανιστικό τρόπο λειτουργίας, τόσο τών (Ροτζεριανών) ψυχολόγων, όσο καί τών δήθεν "εξυπνων" προγραμμάτων, τής εποχής του.    (Τόν έπιασε κρύος ιδρώτας όταν... έμαθε πως ορισμένα ψυχιατρεία άρχισαν νά εξοπλίζονται μέ "βελτιωμένες εκδοχές" τού προγράμματός του, γιά εφαρμογές... σοβαρής ψυχοθεραπείας! - Αλλά αυτό είναι μία ΑΛΛΗ ιστορία...). Υπάρχει τώρα, μία ολόκληρη ανεκδοτολογία εκείνης τής
    "πρωτοποριακής" εποχής, όπως τό εξής περιστατικό:

    Στή δεκαετία του εξήντα, "εμπειρογνώμονες Τεχνητής Ευφυίας" τού Αμερικανικού στρατού έφτιαξαν τό πρώτο "Στρατηγικό Εμπειρογνώμον Σύστημα", πού μάλιστα ήταν εξωπλισμένο μέ "ανάλυση φυσικής γλώσσας", καί κάλεσαν ένα στρατηγό σέ επίσημη πρεμιέρα τού Συστήματος, νά "παίξει" μαζύ του. Οπότε:...
     
       ΣΤΡΑΤΗΓΟΣ:  - Ποιές μονάδες πεζοναυτών σταθμεύουν στή Νότια Αλάσκα;

       ΣΥΣΤΗΜΑ:  (Μετά από 1 λεπτό σιγής):    - YES.

       ΣΤΡΑΤΗΓΟΣ:  - Τί στό διάολο εννοείς μέ "YES";

       ΣΥΣΤΗΜΑ:  (Μετά από κάμποσα λεπτά σιγής):     - YES SIR!


    (3) Τό... παρανοϊκό "κριτήριο TURING", καί η... Αντιστροφή του!

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

    - Ας υποθέσουμε ότι υπάρχει κάποια γραμμή επικοινωνίας μεταξύ δύο τερματικών, καί στό ένα απ'αυτά κάθεται ένας άνθρωπος, ενώ στό άλλο βρίσκεται κάτι "ΑΓΝΩΣΤΟ". Αν ο άνθρωπος, έχοντας λάβει υπ'όψη ΟΛΕΣ τίς ΣΥΖΗΤΗΣΕΙΣ πού κάνει (μέσω τού τερματικού), ΔΕΝ ΜΠΟΡΕΙ ν'αποφασίσει άν μιλάει (τόσην ώρα!) μέ έναν ΑΝΘΡΩΠΟ, ή μέ κάποια ΜΗΧΑΝΗ, τότε η "άγνωστη οντότητα" στήν άλλη άκρη τής γραμμής, διαθέτει "ΤΕΧΝΗΤΗ ΕΥΦΥΙΑ".

    Η ΕΛΙΖΑ δέν κατόρθωσε νά περάσει τό "τέστ τού Turing". Αλλά υπήρξαν άλλα... πονήματα πού όχι μόνο πέρασαν μ'επιτυχία τό τέστ, ξεγέλασαν καί τούς "ειδικούς"- πού όταν έμαθαν πώς μιλούσαν μέ μηχανή κι όχι μέ άνθρωπο, έμειναν έκθαμβοι!

    Παράδειγμα: ο "PARRY". Αντίθετα μέ τήν ΕΛΙΖΑ, ο PARRY δέν "έκανε τό γιατρό". Εκανε τόν... τρελλό, καί... στρατεύθηκε στήν έρευνα γιά τή μελέτη τής τρέλλας! Αντί νά πάρει... τρελλόχαρτο, πήρε "άριστα" στό τέστ τού Turing, κι εντυπωσίασε πολλούς -εξαπατημένους απ'αυτόν- ψυχιάτρους. Ο δημιουργός του PARRY, ήταν ένας ψυχίατρος πού έγραφε προγράμματα σάν... χόμπυ. Ομως, αντίθετα μέ τόν πατέρα τής ΕΛΙΖΑΣ (πού θεωρούσε τούς "κατασκευαστές ευφυών μηχανών"... επικίνδυνους τρελλούς!), πίστευε πώς η τρέλλα (καί η Συνειδητότητα εν γένει!) θά μπορούσε νά εξηγηθεί ΜΗΧΑΝΙΣΤΙΚΑ. Εξού κι ο PARRY: Ο πρώτος "τεχνητά-ευφυής παρανοϊκός"!

    Τώρα, βέβαια, ΠΟΥ ξέρετε αν ΑΥΤΑ πού διαβάζετε ΤΩΡΑ, τά έγραψε... άνθρωπος, και όχι..."ρομπότ"; Νά μιά... παρανοϊκή ερώτηση! Ε, λοιπόν... ιδού μιά απάντηση:
     

    To ΑΝΤΕΣΤΡΑΜΜΕΝΟ ΚΡΙΤΗΡΙΟ TURING:
    "Αν ένας άνθρωπος, επικοινωνεί μέ κάποιον ΑΛΛΟΝ, γιά τόν οποίο ΔΕΝ μπορεί ν'αποφασίσει, από τά λεγόμενά-του καί μόνο, άν είναι άνθρωπος ή μηχανή, ΤΟΤΕ ο "ΑΛΛΟΣ" έχει ΜΟΝΟ Τεχνητή Ευφυία: Δηλαδή ΔΕΝ μπορούμε νά ξέρουμε σίγουρα, άν πρόκειται γιά άνθρωπο, ή γιά... Τεχνητά Ευφυές ΡΟΜΠΟΤ!"
    Αυτό είναι τό "Αντεστραμμένο Κριτήριο Turing". Ενδέχεται νά αποκτήσει μιά... απροσδόκητη πρακτική χρησιμότητα, γύρω στά μέσα τού επόμενου αιώνα, εποχή πού ακόμη κι οι λόγοι τών πολιτικών, θά φτιάχνονται από κομπιούτερ! Πρός τό παρόν, έχει μόνο μεταφορική (καί... παρανοϊκή) αξία. (Πρωτο-εμφανίστηκε τό 1984 [3]).
     


    (4) "Μύηση-Αστραπή" στή γλώσσα PROLOG

    Πιθανώτατα υπάρχουν πολύ λίγοι κάτοχοι υπολογιστή στή χώρα μας, πού νά μήν έχουν ακούσει γιά τήν ύπαρξη τής γλώσσας PROLOG. Δυστυχώς όμως στην Ελλάδα δέν έχει ακόμη διαδοθεί ο προγραμματισμός σ'αυτή τή γλώσσα, παρόλο πού κυκλοφόρησαν ήδη δύο εκδόσεις τής Turbo-Prolog (1990), καί (τουλάχιστον) μία φτηνή "Public Domain PROLOG". (καί μία εντελώς "ελληνική" PROLOG, πού έφτιαξε ο γράφων).

    Τό όνομα τής PROLOG είναι πάντρεμα τών λέξεων "PROgramming in LOGic", πού σημαίνει βέβαια "Προγραμματισμός μέσω τής Λογικής".

    H PROLOG είναι... δίκοπο μαχαίρι: Οι αρχές τής λειτουργίας της είναι σχετικά απλές. (Θά τίς παρουσιάσουμε σέ περίπου... 1 σελίδα!). Ο προγραμματισμός της, όμως, δέν είναι εξίσου απλός: Δυσχεραίνεται τόσο από "διαδικαστικές συνήθειες" τής σκέψης τών προγραμματιστών, όσο καί από ορισμένες ιδιομορφίες τής PROLOG...

    Τό ΚΥΡΙΟ ΟΦΕΛΟΣ, από τόν προγραμματισμό σέ PROLOG, είναι η γρήγορη, "κομψή" επίλυση προβλημάτων, πού απαιτούν πολλαπλάσια προσπάθεια σέ άλλες γλώσσες, όπου
    απαιτούν πολύ πιό "μπλεγμένα", μακροσκελή καί δυσνόητα προγράμματα.
     

    ΒΑΣΙΚΗ ΑΡΧΗ τής PROLOG είναι μία πολύ "κομψή"... Φιλοσοφική Διαπίστωση:

    - Οπως στή σύγχρονη Φυσική, τό φώς είναι ταυτόχρονα ΚΑΙ σωματίδιο, ΚΑΙ κύμα, έτσι κι οι προτάσεις τής Λογικής... είναι ταυτόχρονα ΚΑΙ ΠΕΡΙΓΡΑΦΕΣ τού Κόσμου, ΚΑΙ ΔΙΑΔΙΚΑΣΙΕΣ (-"Προγραμματισμού").

    Τί εννοούμε όταν λέμε πώς ένα "γεγονός" είναι "αληθινό"; Η λέξη γεγονός (πού προέρχεται από τό ρήμα "γίγνεσθαι"), σημαίνει "κάτι πού έχει (ήδη) γίνει". Ενα "γεγονός" δέν μπορεί νά θεωρηθεί αληθινό,  άν δέν έχει "γίνει ΗΔΗ".

    >   Ετσι,  στήν περίπτωση ενός προγράμματος, "γίνεται αληθινό"  όταν:
    >   είτε "ΜΠΟΡΕΙ νά εκτελεστεί", είτε "έχει ΗΔΗ εκτελεστεί", μέ "επιτυχία"!

    | ΣΗΜΕΙΩΣΗ: Αυτή η απλή αλλά ιδιοφυής σύλληψη, ανήκει στόν Alain Colmerauer,
    | πού εφεύρε τήν PROLOG, στή Μασσαλία, πρίν 17 χρόνια περίπου. Ομως, στή δική
    | μας γλώσσα (τά ελληνικά)  η λέξη "γεγονός" περιέχει ΗΔΗ, αυτή τήν ιδέα!...
    | ...κάτι πού ΔΕΝ ισχύει σέ πολλές άλλες (ανθρώπινες) γλώσσες!

    Αντί λοιπόν νά δίνουμε στόν υπολογιστή εντολές πού πρέπει νά "εκτελεστούν", θά μπορούσαμε νά κάνουμε "δηλώσεις" ή "περιγραφές" (προβλημάτων) πού θέλουμε νά "γίνουν αληθινές" (ή τουλάχιστον νά "ερευνηθεί η αλήθειά τους"). Αυτό λέγεται "ΔΗΛΩΤΙΚΟΣ Προγραμματισμός" (declarational programming). Ιδανικά, ΔΕΝ θά πρέπει (μ'αυτή τή νοοτροπία) νά... γράφουμε  κάν  προγράμματα! - Θά γράφουμε απλώς ..."περιγραφές προβλημάτων", καί τή λύση τους θά τή βρίσκει ο υπολογιστής !!

    Η PROLOG είναι μία "δηλωτική" γλώσσα προγραμματισμού, πού όμως περιλαμβάνει, (όπως πιθανόν νά έχετε ακούσει), ΚΑΙ αρκετά "διαδικαστικά" στοιχεία. Πώς λειτουργεί λοιπόν η PROLOG; -Ακόμη κι άν ξέρετε ήδη, μπορεί νά βρείτε ενδιαφέρουσα τήν εξής "οπτική":
     
    H PROLOG παίρνει τίς δικές μας "περιγραφές" ή "δηλώσεις", καί ψάχνει νά βρεί άν "ΓΙΝΟΝΤΑΙ ΑΛΗΘΙΝΕΣ", μέσω (οποιουδήποτε) "ταιριάσματος τών μεταβλητών τους". Αυτό τό "ταίριασμα μεταβλητών" ονομάζεται "Ενοποίηση".  Είναι κάτι εξαιρετικά απλό, πού τό χρησιμοποιούμε ΗΔΗ, εμείς οι άνθρωποι, σέ καθημερινές σκέψεις μας.

    - ΠΑΡΑΔΕΙΓΜΑ: Ας πάρουμε ένα... κομμάτι "αγόρευσης αστυνομικού επιθεωρητή":

    |    "Ο άνθρωπος πού φορούσε μαύρο γιλέκο, καί έκανε παρέα στό θύμα τήν ημέρα
    | τού φόνου, (πρέπει νά) ήταν ο δολοφόνος. Ο μπάτλερ του φορούσε άσπρο γιλέκο,
    | καί η γυναίκα του (θύματος) φορούσε κόκκινο ταγιέρ. Ο Ντίλιγκερ έκανε παρέα
    | στό θύμα τήν ημέρα εκείνη, καί φορούσε μαύρο γιλέκο...
    |    ΑΡΑ... ΠΟΙΟΣ ήταν ο δολοφόνος, κυρίες καί κύριοι; - Σάς ερωτώ !"

    Μέ τήν "κοινή λογική", τό ΣΥΜΠΕΡΑΣΜΑ ότι "ο Ντίλιγκερ είναι ο δολοφόνος", είναι εύκολο. Ομως, όπως συχνά συμβαίνει σ'εμάς τούς ανθρώπους, δέν προσέχουμε καί πολύ τίς ΔΙΚΕΣ ΜΑΣ μεθόδους "κοινής λογικής" πού (ασυναίσθητα) ακολουθούμε.

    Ε, λοιπόν, τό νά μάθει κανείς PROLOG, σημαίνει νά αναπτύξει μία ΣΥΝΕΙΔΗΤΗ ΕΠΙΓΝΩΣΗ τών διαδικασιών τής "κοινής λογικής", πού έχουμε μάθει από παιδιά, αλλά... σπάνια θυμόμαστε ότι τίς χρησιμοποιούμε!

    |  ΣΗΜΕΙΩΣΗ (γιά... κουλτουριάρηδες): Δικαιώνεται κάποιος φιλόσοφος, ο George
    | Spencer Brown, πού είπε ότι "η Λογική καί τά Μαθηματικά, μοιάζουν μέ τήν...
    | Ψυχανάλυση, αφού κάνουν τίς ασυνείδητες διαδικασίες του Νού συνειδητές! [4].

    Κάθε "στοιχειώδες πρόγραμμα" PROLOG, έχει λοιπόν τή μορφή μίας "δήλωσης", τού στύλ...

    |  ΣΥΜΠΕΡΑΣΜΑ_ΑΛΗΘΙΝΟ(X,Ψ,...) αν:
    |      ΣΥΝΘΗΚΗ_1(...) και
    |      ΣΥΝΘΗΚΗ_2(...) και
    |      ΣΥΝΘΗΚΗ_3(...) και...
    |      .........
    |   ...ΣΥΝΘΗΚΗ_N.

    ...όπου τό "Συμπέρασμα" ΠΡΟΗΓΕΙΤΑΙ (σάν "επικεφαλίδα") τών "Συνθηκών", πού ΠΡΕΠΕΙ νά ΙΚΑΝΟΠΟΙΗΘΟΥΝ, έτσι ώστε τό Συμπέρασμα νά "αποδειχθεί" ΑΛΗΘΙΝΟ.

    * Σημειώστε ότι κάθε "Συνθήκη" είναι ΕΠΙΚΕΦΑΛΙΔΑ κάποιου ΑΛΛΟΥ "προγράμματος", τό οποίο "αποδεικνύεται ΑΛΗΘΙΝΟ", καί ούτω καθ'εξής...

    * Σημειώστε ακόμη ότι στήν PROLOG, ξεκινώντας από τό ΣΥΜΠΕΡΑΣΜΑ, ερευνάμε τίς
    ΣΥΝΘΗΚΕΣ μία-πρός-μία, πού ΑΝ (αυτές) ισχύουν, ΤΟΤΕ-καί-μόνον-τότε ισχύει τό ΣΥΜΠΕΡΑΣΜΑ.

       Ας ξαναγυρίσουμε όμως στό αστυνομικό μας πρόβλημα...

    Ο λόγος πού βρήκαμε τή "λύση" του τόσο εύκολα, είναι διότι τό μυαλό μας "ταίριαξε" τούς "αγνώστους" (ή τίς "μεταβλητές") τού προβλήματος, καί (στή) συνέχεια χρησιμοποίησε τά δεδομένα σάν "συνταγή" ή "κανόνα" γιά τήν εύρεση τού δολοφόνου. - Οσοι από σάς ξέρετε Συμβολική Λογική, θά μπορούσατε νά γράψετε μία "Συμβολική περιγραφή" τών δεδομένων. Δέν θά πρέπει νά διαφέρουν καί πολύ από ένα "πρόγραμμα" σέ γλώσσα PROLOG... κι άς μήν ξέρετε καθόλου PROLOG !

    Δηλαδή... σέ PROLOG, η "περιγραφή τού φόνου" αντιστοιχεί στό "πρόγραμμα":

    |   είναι_δολοφόνος(?ΑΛΦΑ)  άν:
    |           είναι_ανθρωπος(?ΑΛΦΑ)  καί
    |           φορούσε(?ΑΛΦΑ,"μαύρο γιλέκο") καί
    |           ημέρα(?ΠΟΙΑ,"τού φόνου") καί
    |           εκανε_παρέα_στό_θύμα(?ΑΛΦΑ,τήν_ημέρα(?ΠΟΙΑ)).
    |
    |   είναι_ανθρωπος("ο Ντίλιγκερ").
    |
    |   φορούσε("ο Ντίλιγκερ","μαύρο γιλέκο").
    |   φορούσε("ο θαλαμηπόλος","ασπρο γιλέκο").
    |   φορούσε("η γυναίκα τού θύματος","κόκκινο ταγιέρ").
    |
    |   ημέρα("23 Ιουνίου","τού φόνου").
    |
    |   έκανε_παρέα_στό_θύμα("ο Ντίlig;λιγκερ",τήν_ημέρα("23 Ιουνίου")).

    Οι "μεταβλητές", δηλαδή οι "άγνωστες" παράμετροι αυτής τής περιγραφής, πού είναι γραμμένες μέ κεφαλαία καί αρχίζουν από ερωτηματικό (?), είναι:

      - ο δολοφόνος ( = ?ΑΛΦΑ ),
      - η ημέρα τού φόνου ( = ?ΠΟΙΑ ).

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


    (5) Στήν PROLOG, "αληθινό" είναι ο,τι δηλώσεις !

    Ποιά είναι ΑΚΡΙΒΩΣ η ΔΙΑΦΟΡΑ τής PROLOG από ΑΛΛΕΣ γλώσσες (πού ξέρετε);

    Σέ μία κλασσική, "διαδικαστική" γλώσσα προγραμματισμού (BASIC, PASCAL, καί  Σία), κάθε "υπορουτίνα" ή "διαδικασία" έχει μιάν επικεφαλίδα/όνομα, καί ένα  "σώμα εντολών", πού καλούνται διαδοχικά μόλις καλεστεί η επικεφαλίδα τους:

       PROCEDURE βρές_ένοχο(X,Ψ,Ω)
       BEGIN
            κανε_τεστ(X,Ω);
            ανακρινε(Ψ);
            έλεγξε_συνθήκη(Χ,Ψ,"αλφα")
       END

       Αυτή η δομή "μοιάζει" μέ τήν εξής δομή PROLOG:

       βρές_ενοχο(X,Y,Z) αν:
            κανε_τεστ(X,Z) και
            ανακρινε(Y) και
            ελεγξε_συνθηκη(Y,Z,"αλφαacute;").

       ...Μέ τήν εξής ΘΕΜΕΛΙΑΚΗ ΔΙΑΦΟΡΑ:

    - Στήν PROLOG, ποτέ, μά ποτέ, δέν... ΕΚΤΕΛΟΥΜΕ τούς "υπόπτους"! Τούς...  ψάχνουμε έναν-έναν, καί MΟΝΟ ΑΝ ικανοποιηθούν οι συνθήκες καί τά τέστ πού  ορίζει ο... Νόμος ( = οι "κανόνες" μας), ΤΟΤΕ θάχουμε βρεί τούς... ενόχους!

    (όπου: ΥΠΟΠΤΑ είναι τά... διαδικαστικά προγράμματα, κι ΕΝΟΧΕΣ είναι οι  διαδικασίες πού "αποδεικνύονται αληθινές" - γιά τούς λάτρεις τού χιούμορ!).

    Ετσι: Oι "διαδικασίες" τής PROLOG, πού στήν πραγματικότητα ΔΕΝ μοιάζουν  τόσο πολύ μέ "διαδικασίες", αλλά μέ προτάσεις τής Λογικής (CLAUSES), είναι  (π.χ.) :  "φορούσε(Χ,Ψ)", "ημέρα(Α,Β)", "ειναι_ενοχος(Χ) άν ...", κ.ο.κ.

    Ενώ: Οταν ένα "συμπέρασμα" είναι ΑΛΗΘΙΝΟ, χωρίς (ν'απαιτούνται) ιδιαίτερες  συνθήκες γι'αυτό, θεωρείται "ισχύον γεγονός" ("fact"), καί γράφεται έτσι:

       ημέρα("23 Ιουνίου","τού φόνου").
     

    *  Δύο τελευταίες διευκρινήσεις :

    1) - Ακριβώς όπως ένας καλός ντετέκτιβ ψάχνει ΟΛΕΣ τίς περιπτώσεις ενόχων γιά  κάποιο έγκλημα, καί δέν δέχεται ότι μόνο ο πρώτος ύποπτος είναι ο δολοφόνος,  ΕΤΣΙ καί η PROLOG, δέν... ησυχάζει άν δέν ερευνήσει ΟΛΕΣ τίς περιπτώσεις πιθανών "λύσεων" σέ ένα πρόβλημα. Αυτό σημαίνει επίσης, ότι κάνει ΟΛΑ τά "πιθανά ταιριάσματα μεταβλητών" ('η "ενοποιήσεις"), κατά τή διάρκεια αυτής τής εξαντλητικής διαδικασίας. Μόνο άν χρησιμοποιήσουμε μία ειδική εντολή (τό "cut", πού  γράφεται σάν ένα θαυμαστικό, "!"), η διαδικασία εξαντλητικής αναζήτησης σταματάει στήν πρώτη (ή τήν "τρέχουσα") Λύση...

    2) - Ακριβώς όπως υπάρχουν πολλοί τρόποι νά απαριθμήσουμε ένα σύνολο "πιθανών δολοφόνων", υπάρχουν καί πολλοί τρόποι νά ερευνηθούν οι πιθανές λύσεις σέ ένα  "πρόγραμμα" PROLOG. Γιά λόγους απλότητας, όμως, σχεδόν όλες οι διάλεκτοι τής  PROLOG σήμερα, ακολουθούν μία "κατά σειράν" αναζήτηση λύσεων, από πάνω πρός τά  κάτω (ένα "in-order search"). Ετσι, π.χ., τό πρόγραμμα:

        δωσε_τρια αν:
          γραψε("1 ") και
          γραψε("2 ") και
          γραψε("3 ").

    ...πού "τρέχει" μόλις γράψουμε τήν εντολή "δωσε_τρια", θά δώσει τή λύση  "1 2 3 ", καί όχι (π.χ.) τή λύση "2 3 1 ". Η σύμβαση τής "από-πάνω-πρός-τά-κάτω-επίλυσης" μάς εξασφαλίζει λοιπόν τή σιγουριά, ότι η σειρά εκτέλεσης / επίλυσης ενός προβλήματος θά είναι γνωστή εκ τών προτέρων. (Αν καί μία  εναλλακτική σειρά επίλυσης θάταν εξίσου ΛΟΓΙΚΑ σωστή).



    (6) Δύο "Οπλα" τής PROLOG: O μίτος τής Αριάδνης, κι ένα... ψαλίδι !

    Εφόσον στήν PROLOG, αναζητούνται (σέ κάθε πρόβλημα) ΟΛΕΣ οι πιθανές λύσεις του, απαραίτητος είναι ένας μηχανισμός "συστηματικής αναζήτησης", πού όχι μόνο θά ενεργοποιεί "σέ σειρά", ο,τι συναντάει στό δρόμο του, αλλά θά μπορεί καί νά "επανεξετάζει εναλλακτικούς δρόμους επίλυσης", όταν ο παρών δρόμος επίλυσης έχει αποδειχτεί ανώφελος -"φρακαρισμένος σέ αδιέξοδο"! (Στήν PROLOG δέν υπάχουν "ψέματα", παρά μόνο ΑΓΝΩΣΤΑ γεγονότα, ή ΑΔΙΕΞΟΔΑ στήν απόδειξη γεγονότων).

    Χμ... Ξέρετε τό "μίτο τής Αριάδνης"; Αν ξάχνετε γιά τήν έξοδο μέσα σέ κάποιο λαβύρινθο, ένας "μίτος Αριάδνης" είναι ό,τι πρέπει!

    ΔΗΛΑΔΗ: Μόλις βρεθείτε μία "διασταύρωση", όπου ΠΡΕΠΕΙ νά διαλέξετε ανάμεσα σέ 2, 3 ή "μ" δρόμους, (άν είσασταν "εκτελεστής PROLOG"), θά κάνετε τό εξής:

    ΣΤΡΑΤΗΓΙΚΗ έρευνας ΛΑΒΥΡΙΝΘΟΥ:
     
      "Ακολουθώ τόν πρώτο δρόμο μπροστά μου, (απο αριστερά πρός δεξιά), κρατώντας τό νήμα τής Αριάδνης, καί έχοντας αφήσει ένα "σημάδι" στήν είσοδο τού δρόμου, τόν οποίο ετοιμάζομαι νά ακολουθήσω... ...Ετσι, ΑΝ χαθώ (συναντήσω "τοίχο" κλπ.), θά χρησιμοποιήσω τό νήμα τής Αριάδνης, γιά νά ξαναγυρίσω ακριβώς στήν είσοδο αυτού τού δρόμου, εκεί όπου άφησα ένα (επιπλέον) "σημάδι". Μαζεύω τότε τό σημάδι, τό βάζω στήν είσοδο τού ΑΜΕΣΩΣ ΕΠΟΜΕΝΟΥ διαθέσιμου δρόμου (απο αριστερά πρός δεξιά), καί συνεχίζω τήν αναζήτηση ακολουθώντας αυτό τόν νέο δρόμο..."

    Αυτή η περιγραφή "στρατηγικής λαβυρίνθου" είναι στήν πραγματικότητα ακριβώς ό,τι κάνει κι η PROLOG, στή "λυσσαλέα αναζήτηση λύσεων" (όπως χαρακτηριστικά τήν ονομάζει τό εγχειρίδιο τής Τurbo Prolog). Είναι ένας ΑΛΓΟΡΙΘΜΟΣ, πού ΔΕΝ ΣΤΑΜΑΤΑΕΙ ΠΟΤΕ (παρά μόνο οταν βρεί "εξόδους"), καί πού τό όνομά του στήν... "πιάτσα" τής Επιστήμης Υπολογιστών είναι : "in-order-αναζήτηση".  (Καί εναλλακτικά, "depth-first-search").

    ΩΣΤΕ λοιπόν...

    Στήν PROLOG, τόσο τά "συμπεράσματα", όσο κι οι "προϋποθέσεις", λειτουργούν μέ τόν εξής "σχιζοφρενικό" τρόπο:

    - EITE σάν "κύματα (λογικών "συνεπαγωγών"/"συνειρμών") EITE σάν "σωματίδια" ("προγραμματιστικών διαδικασιών").

    Ο αλγόριθμος αυτός είναι εξαιρετικά "όμορφος", κι άν... ήταν μόνο αυτός, ο προγραμματισμός σέ PROLOG θάταν σκέτη απόλαυση ! Αλλά υπάρχει κι ένα "άλλο όπλο" τής PROLOG, ένα φτηνό "κόλπο", πού εφευρέθηκε γιά νά "κόψει καί νά ράψει" τή γλώσσα αυτή στά μέτρα τής... διαδικαστικής φιλοσοφίας προγραμματισμού, πού (όσο υπάρχουν προγραμματιστές!) είναι δυστυχώς, μερικές φορές, αναπόφευκτη! :

    -Πρόκειται απλούστατα γιά ένα... ΨΑΛΙΔΙ !

    Στά αγγλικά ονομάζεται "cut" καί η λειτουργία του είναι νά ΚΟBΕΙ τό "νήμα τής Αριάδνης" -που κάνει ΚΑΘΕ ΑΝΑΖΗΤΗΣΗ ΜΕΣΑ στό "ΛΑΒΥΡΙΝΘΟ" ΑΝΤΙΣΤΡΕΨΙΜΗ ! Σύμβολό του είναι τό θαυμαστικό [ ! ].

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

    Ο γράφων συμπαθεί τήν ιδέα τής κατάργησης τού ψαλιδιού, αλλά τό χρησιμοποιεί πολύ συχνά, γιατί νά κόβει όχι ζωτικά νήματα, αλλά διάφορα... ζιζάνια. Πάντως, μία ωραία πρωία, ΔΕΝ θά χρειάζεται πιά ψαλίδι γιά τά ζιζάνια, παρά μόνο αυτόματο... ξερίζωμά τους μέσα από τόν ίδιο τόν... compiler !
     



    (7) Μερικά Συμπεράσματα

    Σήμερα πού η Τεχνητή Ευφυία έχει αρχίσει νά  εμφανίζεται καί εμπορικά,  μέ τή μορφή "Εμπειρογνωμόνων Συστημάτων",  ένας πιό πρακτικός ορισμός της,  πού τά τελευταία χρόνια έχει γίνει κι επικρατέστερος, είναι η "Μηχανική τής Γνώσης" (Knowledge Engineering).  Κι εκείνο πού έχει αρχίσει νά διαφαίνεται, είναι ότι η Τεχνητή Ευφυία, δέν είναι τόσο η κατασκευή "τεχνητά ευφυών μηχανών",  όσο η ΕΞΥΠΝΗ ΔΙΑΧΕΙΡΙΣΗ ΔΕΔΟΜΕΝΩΝ (πού συνήθως -σήμερα- αφορά κυρίως τό λογισμικό / software, μερικές φορές σέ συνδυασμό μέ κάποιο ειδικό hardware, αλλά ποτέ ΜΟΝΟ του τό hardware...). Ετσι, η Παλιά Φρουρά τών επίδοξων "κατασκευαστών Φράνκενστάϊν", αντικαταστάθηκε από "Νέες Φουρνιές" εκπαιδευμένων "Μηχανικών Γνώσης" μέ πολύ πιό πρακτικούς στόχους καί πολύ συγκεκριμμένη τεχνογνωσία. Εξάλλου, αποδείχτηκε ότι οι "τεχνητά ευφυείς στρατηγικές" γιά τήν επεξεργασία δεδομένων
    (όπως μέσω τής γλώσσας PROLOG), έχουν μία πολύ γενικευμένη  θεωρητική (Λογική) υποδομή, έτσι ώστε σήμερα η Πληροφορική ΟΛΟΚΛΗΡΗ, τείνει νά μετατραπεί  σέ ένα μικρό παρακλάδι, ένα ΥΠΟΣΥΝΟΛΟ τής γενικευμένης "Μηχανικής τής Γνώσης", (μιάς νέας επιστήμης, πού δυστυχώς παραμένει άγνωστη στή χώρα μας. (Πρός τό παρόν -1990-...)

    Από εκεί καί πέρα... ας μήν πολυλογούμε. ΚΑΝΕΙΣ (μά κανείς!) δέν έμαθε ποτέ PROLOG χωρίς πρακτική εξάσκηση. Οσα είπαμε μέχρι τώρα είναι μία (σχεδόν πλήρης) εξιστόρηση της λειτουργίας τής PROLOG, αλλά ΟΧΙ μία εξιστόρηση πού επαρκεί γιά νά γράψετε καί δικά σας προγράμματα.

    [...]

    (τέλος άρθρου)