Ονομάζουμε ενοποιητή (unifier) δύο όρων μια αντικατάσταση που αν εφαρμοστεί επάνω τους, τους καθιστά όμοιους. Ο γενικότερος ταυτοποιητής ή, σύντομα, mgu , δύο όρων, είναι εκείνος ο ενοποιητής που μετατρέπει το κοινό στιγμιότυπο (instance) των δύο όρων, στη γενικότερή του μορφή. Θα λέμε ότι ο όρος t είναι κοινό στιγμιότυπο των όρων t1 και t2, αν υπάρχουν αντικαταστάσεις και τέτοιες, ώστε . 'Ενας όρος u είναι γενικότερος από έναν όρο t, αν ο t είναι ένα στιγμιότυπο του u αλλά ο u δεν είναι στιγμιότυπο του t.
Λέμε ότι ένας αλγόριθμος υπολογίζει τον mgu δύο όρων, αν τερματίζει επιτυχώς ή αναφέρει την αποτυχία στην αντίθετη περίπτωση. Ας είναι V μια μεταβλητή και T ένας όρος. Ονομάζουμε έλεγχο εμφάνισης (occurs check), τον έλεγχο για το εάν η μεταβλητή V περιέχεται στον όρο T. Στο σχ. 5.5α , συνοψίζονται οι κανόνες ενοποίησης.
Σχήμα 5.5α: Οι κανόνες ενοποίησης
Για παράδειγμα, ο mgu των επόμενων όρων δίνεται στο σχ. 5.5β .
Σχήμα 5.5β: Παραδείγματα ενοποίησης
'Οταν υλοποιούμε τον αλγόριθμο υλοποίησης για μια συγκεκριμένη γλώσσα λογικού προγραμματισμού, οι λογικές μεταβλητές αλλά και άλλοι όροι, αναπαριστάνονται από θέσεις μνήμης (memory cells). Μια δέσμευση μεταβλητής (variable binding) υλοποιείται αντιστοιχώντας στη θέση μνήμης της μεταβλητής μια αναφορά, η οποία περιέχει την αναπαράσταση του όρου με τον οποίο έχει δεσμευτεί η συγκεκριμένη μεταβλητή.
'Οπως αναφέρθηκε και προηγουμένως, η αποδεικτική διαδικασία που χρησιμοποιείται για τα οριστικά, κι επομένως για τα λογικά, προγράμματα, είναι η SLD- ανάλυση (ή, ακριβέστερα, η SLDNF- ανάλυση). Μια SLDNF- άρνηση (ή υπολογισμός) ενός λογικού προγράμματος, ξεκινά από κάποιον αρχικό στόχο (ή ερώτημα) G και προσπαθεί να βρει μια απόδειξη για το στόχο αυτό. 'Ενα στιγμιότυπο (instance) του ερωτήματος για το οποίο έχει βρεθεί μια απόδειξη, είναι μια υπολογισμένη απάντηση (ή λύση) στο ερώτημα.
Ας είναι ένα λογικό πρόγραμμα κι ένα αρχικό (πιθανώς συζευκτικό) ερώτημα G. Περιγράφουμε άτυπα, με χρήση της ορολογίας του λογικού προγραμματισμού, την SLD- ανάλυση για το .
'Ενας τρόπος για να βρούμε μια άρνηση, είναι το SLD- δέντρο. Αν θυμηθούμε την περιγραφή του, το SLD- δέντρο, ή απλά δέντρο αναζήτησης, ενός στόχου G ως προς το πρόγραμμα , είναι εκείνο το δέντρο στο οποίο
Το δέντρο αναζήτησης για το στο οποίο επιλέγεται πάντοτε ο αριστερότερος στόχος, φαίνεται στο σχ. 5.5γ .
Σχήμα 5.5γ: SLD- άρνηση με επιλογή του αριστερότερου στόχου
Για να βρούμε όλες τις πιθανές απαντήσεις σ' ένα στόχο G, πρέπει να ερευνήσουμε ολόκληρο το δέντρο (όλα τα κλαδιά). Μια μέθοδος είναι η σε πλάτος-πρώτα (breadth-first) αναζήτηση, να εξερευνήσουμε, δηλαδή, όλα τα πιθανά μονοπάτια παράλληλα (σχ. 5.5δ ). Η μέθοδος αυτή διασφαλίζει την εύρεση πιθανών πεπερασμένων κλαδιών επιτυχίας.
Σχήμα 5.5δ: Σε πλάτος-πρώτα αναζήτηση
Μια άλλη δυνατότητα που έχουμε είναι να εξερευνήσουμε το δέντρο αναζήτησης με χρήση της σε βάθος-πρώτα (depth-first) αναζήτησης (σχ. 5.5ε ). Αυτή η στρατηγική αναζήτησης δεν διασφαλίζει την εύρεση όλων των κλαδιών επιτυχίας, ακόμα κι αν υπάρχει ένα, αφού η αναζήτηση ενδέχεται να ``πέσει'' σ' ένα άπειρο μονοπάτι.
Σχήμα 5.5ε: Σε βάθος-πρώτα αναζήτηση
Συμπεραίνοντας, μπορούμε να πούμε ότι η σε πλάτος-πρώτα αναζήτηση είναι
μια πλήρης αποδεικτική διαδικασία, ενώ η σε βάθος-πρώτα δεν είναι. Ωστόσο,
για λόγους ευκολίας στην υλοποίηση, η γλώσσα λογικού προγραμματισμού Prolog
χρησιμοποιεί τη σε βάθος-πρώτα στρατηγική, η οποία έχει αποδειχτεί, στην
πράξη, επαρκής για αρκετές εφαρμογές. 'Αλλες γλώσσες λογικού προγραμματισμού
χρησιμοποιούν διαφορετικές μορφές ελέγχου, όπως π.χ. η LOGLISP (Robinson
και Sibert) η οποία εφαρμόζει σε πλάτος-πρώτα αναζήτηση στο δέντρο αναζήτησης,
η IC-Prolog (Clark και McCade) που χρησιμοποιεί συνεργασία ρουτινών (co-routining),
η MU-Prolog (Naish) που θέτει σε διαθεσιμότητα την εκτέλεση στόχων, κ.α.