Prolog es un lenguaje de programación lógica basado en el Paradigma Lógico. Propone programar con lógica de predicados, la cual es similar a la lógica proposicional pero además tiene acceso a los elementos constitutivos de cada proposición, porque expresa cualidades y relaciones entre objetos.
Los objetos se denominan argumentos o términos del predicado.
amigo(matias, X) :- gusta(X, rock) % matias es amigo de los que les gusta el rock
gusta(diego, rock) % relación: a diego le gusta el rock
gusta(matias, julia) % relación: a matias le gusta juliaUnificación
La unificación soluciona cómo resolver dos predicados con el mismo símbolo predicativo pero distintos argumentos. Se hace mediante la sustitución: un conjunto de asignaciones del tipo X := t con una sola asignación a cada variable y que tiene alcance clausular.
Dada una sustitución y un predicado , la aplicación de a produce un nuevo predicado donde toda variable asignada en se cambia por su término correspondiente.
Dadas dos expresiones y , se llama unificador a una sustitución tal que , por lo que se vuelven expresiones idénticas. Por ejemplo, dados padre(Z, diego) y padre(jorge, diego), se ve que es unificador.
Supóngase , se dice que es más general que porque asigna menos variables.
Algoritmo de Unificación de Robinson
- Si y son unificables, y un MGU es , con .
- Si se busca el primer par de discordancia entre y .
- Si posee una variable y un término se continúa. Sino, y no son unificables.
- Si la variable de aparece en el término entonces no unifican. Sino, podemos continuar.
- Se construye un que vincule la variable con el término de . Usando esta nueva sustitución, se construyen y . Se hace y se vuelve al paso 1.
Sean un símbolo predicativo, sean y unificables con un MGU , y sean y cláusulas. Se define la regla de resolución .