4. Unification : une substitution cohérente
Unifier deux termes consiste à trouver des substitutions de variables qui les rendent identiques. Les symboles de fonction, les arités et les constantes doivent être compatibles. Une variable répétée désigne le même terme dans toutes ses occurrences. L’opération = de ces questions est une unification, sans évaluation arithmétique.
4.1. Première unification : propager une variable répétée
Code (prolog) · sélectionner pour copier
?- a(X, X) = a(t(a,u(b,c)), t(K,M)).
Les deux termes ont le même symbole extérieur a/2. Le premier argument impose X=t(a,u(b,c)). Comme le deuxième argument de gauche est aussi X, on doit ensuite unifier ce même terme avec t(K,M) : les symboles t/2 coïncident, puis les arguments donnent K=a et M=u(b,c).
Résultat officiel :
Code (text) · sélectionner pour copier
X = t(a,u(b,c))
K = a
M = u(b,c)
On ne peut pas choisir deux valeurs différentes pour X, une par argument. Les substitutions forment un ensemble cohérent appliqué à toute la question.
4.2. Deuxième unification : apparier les arguments
Code (prolog) · sélectionner pour copier
?- f(a, Z) = f(X, g(h(y))).
Le symbole f/2 est commun. Le premier argument donne X=a; le second donne Z=g(h(y)). Les symboles g, h et y restent des composants du terme : aucune opération n’a à être calculée.
4.3. Troisième unification : détecter une incompatibilité
Code (prolog) · sélectionner pour copier
?- g(x, h(y,59)) = g(X, X).
Le premier argument impose X=x. Le second demanderait alors x=h(y,59), impossible : x est un atome et h(y,59) un terme composé. Le résultat officiel est false. La présence d’une variable à droite ne rend pas l’unification toujours possible; ses occurrences répétées contraignent le résultat.