Unification de termes
Syntaxe
Dans la théorie de l'unification, nous écrivons des termes. Ce sont soit :
- des variables (commençant par une majuscule comme
X
,Y
ouVar
); - des fonctions de la forme
f(t1, ..., tn)
oùf
est un symbole de fonction (commençant par une minuscule ou un chiffre) et les expressionst1
, ...,tn
sont d'autres termes.
Tous les identifiants (que cela soit pour les variables ou symboles de
fonction) peuvent contenir les symboles _
, ?
et terminer par une séquence
de symboles '
. Par exemple : x'
, X''
, X_1
.
Exemples de termes.
X
,f(X)
,h(a, X)
,parent(X)
,add(X, Y, Z)
.
On peut aussi omettre la virgule séparant les arguments d'une fonction étant
donné que leur absence de produit pas d'ambiguïté. On écrirait donc
h(a X)
à la place de h(a, X)
.
Principe
Dans la théorie de l'unification, on dit que deux termes sont unifiables
lorsqu'il existe une substitution des variables les rendant identiques.
Par exemple, f(X)
et f(h(Y))
sont unifiables avec la substitution
{X:=h(Y)}
remplaçant X
par h(Y)
.
Les substitutions qui nous intéressent sont celles qui sont les plus générales.
Nous aurions pu considérer la substitution {X:=h(c(a)); Y:=c(a)}
, tout aussi
valide mais inutilement précise.
Une autre façon de voir les choses est de voir cela comme brancher des termes ensemble pour vérifier s'ils sont compatibles se branchent correctement :
-
une variable
X
se branche avec tout ce qui ne contient pasX
comme sous-terme, sinon nous aurions une dépendance circulaire, comme entreX
etf(X)
; -
une fonction
f(t1, ..., tn)
est compatible avecf(u1, ..., un)
oùti
est compatible avecui
pour touti
. -
f(X)
etf(h(a))
sont compatibles avec{X:=h(a)}
; -
f(X)
etX
sont incompatibles; -
f(X)
etg(X)
sont incompatibles; -
f(h(X))
etf(h(a))
sont compatibles avec{X:=a}
.