O átomo contido num nó não terminal de uma árvore de prova, é uma instância de
uma cabeça de cláusula. Excluindo a raiz, esse átomo é também uma instância de um
átomo do corpo de uma cláusula. A construção de uma árvore de prova, em grosso modo,
reduz-se à procura de instâncias comuns a dois átomos. É este facto que motiva as
considerações que se seguem. Para explicarmos o conceito de unificação, na sua forma
mais geral, e também para estarmos de acordo com a funcionalidade do Prolog,
vamos, antes de mais, generalizar o conceito de átomo. Tinhamos dito que um átomo
escreve-se com um símbolo de predicado e um número de termos igual à aridade do
símbolo do predicado em questão e que estes termos constituiam os chamados argumentos do
átomo. Vamos agora permitir (definição recursiva!) que os argumentos possam ser, eles
mesmo, átomos. Dois átomos atomo1 e atomo2 são unificáveis,
se existir uma substituição s tal que s(atomo1) = s(atomo2).
Nesse caso dizemos que s é um unificador de atomo1 e atomo2.
Por exemplo os átomos atomo1 = p(X,b) e atomo2
= p(a,Y) são unificáveis pelo unificador . Uma constante é apenas
unificável com ela própria e com uma variável. Intuitivamente, um unificador do atomo1
e do atomo2, é uma substituição que consegue ``instanciar''
suficientemente as variáveis de modo a satisfazer a equação atomo1 =
atomo2. Um unificador minimal, é um unificador que instancia o
menos possível as variáveis. Por exemplo os dois átomos atomo1 = p(X,Y)
e atomo2 = p(Y,X) são unificáveis por
, por
, por
, ...mas s1 e
s2 são os unificadores minimais. Formalmente, o unificador s é
minimal se, para todo o unificador s', existe uma substituição s'' tal que
(composição de substituições). Pode-se mostrar que se
existir um unificador entre dois átomos, então existe um unificador minimal. Também é
possível demonstrar que se X é uma variável e atomo um átomo, então
atomo e X são unificáveis se, e somente se, atomo não
contiver a variável X (quando a varável X não tem ocorrência
em atomo). Existe um algoritmo (algoritmo de Robinson) que, dados dois átomos,
calcula um unificador minimal, se os os dois átomos são unificáveis, ou então termina
com a indicação da impossibilidade de unificação. Seguem-se dois exemplos simples que
ilustram o método. Ajuda representar os átomos na forma de árvore. A ideia é tentar
construir o unificador por aproximações sucessivas, por composição de substituições.
Em cada etapa procuramos uma variável que é uma folha numa das árvores e tentamos
unificá-la com a sub-árvore correspondente na outra árvore. Nos esquemas que se seguem,
essas variáveis e essas sub-árvores são envoltas com uma curva fechada.
Primeiro Exemplo: atomo1 = p(X,Y),
Etapa
Etapa
Etapa
Conclusão: unificador minimal dado por
Segundo Exemplo:
Etapa
Etapa
Etapa
Conclusão: os átomos não são unificáveis (a constante a não unifica
com a constante b).
Dois átomos atomo1 e atomo2 são duas variantes,
se podermos passar de um ao outro por uma simples mudança do nome das variáveis (duas
variáveis distintas mudadas sempre por duas variáveis distintas). Por outro lado, atomo2
é uma renomeação do atomo1, em relação a um conjunto V1
de variáveis, se atomo2 é uma variante do atomo1 e
se atomo2 não contiver nenhuma variável em V1. As
nocões de unificação e de renomeação, definidas para átomos, estendem-se, da maneira
natural, para as cláusulas.