En la sección anterior se ha hecho hincapié en el proceso de la demostración, y para ello no se han considerado las variables que pueden aparecer en los predicados, tal como lo expresa la sintaxis de los programas en lógica.
Se asume que las variables de una cláusula están cuantificadas universalmente, y tienen como alcance a la propia cláusula.
En estos casos el procedimiento de demostración es similar a lo ya visto, salvo que es necesario contemplar la presencia de variables. La resolución se realizará sólo cuando es posible encontrar una instanciación de las variables que hacen iguales los predicados a anular.
Por ejemplo, sea el programa siguiente:
PADRE ( jorge, diego ) <- . (1) HERMANO ( ricardo, jorge ) <- . (2) TIO(X, Y) <- PADRE(Z, Y), HERMANO(X, Z). (3)
La tercera cláusula, como se ha dicho, está cuantificada universalmente para las variables X, Y y Z.
Si se considera la invocación:
<- TIO ( W, diego ). (4)
La demostración se realiza de la forma siguiente:
TIO(X, diego) <- PADRE(Z, diego), HERMANO(X, Z) (5)
<- PADRE(Z, diego), HERMANO(X, Z) (6)
PADRE(jorge, diego), HERMANO(X, jorge) (7)
HERMANO(X, jorge) (8)
[ ]
Los pasos 1) a 5) constituyen la demostración de la fórmula (4). Resulta claro que al escribir dicha fórmula el usuario no estaba directamente interesado en una prueba, sino que más bien quería conocer quién es TIO de diego. La variable W original fue cambiada por X en el paso 1), y esa variable fue instanciada en el paso 5) para completar la prueba. El valor que le fue asignado, es decir, ricardo, es la respuesta que da el sistema, y que corresponde al interés inicial del usuario.
El problema que se plantea para la regla de resolución es entonces cómo resolver dos predicados que tengan el mismo símbolo predicativo, pero que sus argumentos no coinciden.
El mecanismo que va a permitir resolver dicho problema es el llamado de unificación.