Resolución, reglas y metas en Prolog
Pregunta central
¿Por qué Prolog puede ejecutar una regla reemplazando una meta por las premisas de esa regla, y cómo se relaciona este procedimiento con una demostración por refutación mediante resolución?
Idea principal
Un programa lógico describe conocimiento mediante hechos y reglas. Una consulta se convierte en una lista de metas pendientes. Prolog intenta demostrarla seleccionando una meta, unificándola con la cabeza de una regla y sustituyéndola por el cuerpo de esa regla. Este paso operacional no es un truco del lenguaje: es una instancia de la regla lógica de resolución aplicada a cláusulas de Horn.
La búsqueda termina de dos maneras:
- Éxito: ya no quedan metas; aparece la meta vacía, equivalente a la cláusula vacía en la refutación.
- Fallo de una rama: ninguna cláusula del programa puede resolver la meta seleccionada; Prolog retrocede para intentar otra regla.
1. Notación mínima
Átomos, literales y cláusulas
Un átomo es una expresión como o . Un literal es un átomo o su negación. Una cláusula es una disyunción de literales:
Esta cláusula tiene una lectura equivalente como implicación:
y como regla de Prolog:
t(X) :- s(X).En general, la regla
abrevia
y en forma clausal se escribe
La cabeza es y el cuerpo contiene . Una regla de esta forma es una cláusula definida: contiene exactamente un literal positivo.
Metas
La consulta conjunta
?- a1, a2, ..., an.se representa como la cláusula objetivo
equivalente a
La flecha hacia la izquierda puede leerse como: «todavía falta demostrar estas metas».
Dos objetos que no deben confundirse
El programa contiene cláusulas definidas (hechos y reglas). La consulta produce una cláusula objetivo, sin literales positivos. La ejecución conecta ambos objetos mediante resolución.
2. Regla general de resolución
Si dos cláusulas contienen literales complementarios que pueden unificarse, esos literales se eliminan y el unificador se aplica a todo lo restante. Sean
y sea un unificador de y . Entonces:
El resultado se llama resolvente. En lógica proposicional los literales complementarios deben coincidir exactamente; en primer orden basta con que exista una sustitución que los vuelva iguales.
Unificación rápida
y unifican con . En cambio, y no unifican si y son constantes distintas.
3. De una regla y una meta al siguiente objetivo
Supongamos que el programa contiene una regla cuya cabeza puede unificarse con la meta seleccionada :
y que el objetivo actual es
Primero se renombran las variables de la regla si hace falta, para que sean independientes de las del objetivo. Después se calcula
donde UMG significa unificador más general. El siguiente objetivo es:
Es decir: se elimina la meta resuelta y, en su lugar, se insertan las premisas que todavía deben demostrarse.
Por qué esta sustitución es resolución
La regla equivale a:
y el objetivo equivale a:
Al resolver con se cancelan esos dos literales. Queda:
que, regresando a notación de metas, es justamente el objetivo enmarcado arriba.
Caso de un hecho
Un hecho puede verse como . Al resolverlo, se reemplaza por un cuerpo vacío. Si era la última meta, obtenemos la meta vacía y la consulta tiene éxito.
4. Ejemplo de resolución general por refutación
Sea
Queremos probar:
La prueba por refutación agrega la negación de la conclusión, , y busca derivar :
Una derivación posible es:
Como es inconsistente, concluimos:
Refutación frente a esquema de búsqueda
Una refutación muestra una secuencia que sí alcanza . El esquema de búsqueda contiene también las elecciones alternativas que el algoritmo pudo haber intentado. Por eso el segundo suele ser mucho más ancho que la prueba final.
5. El mismo mecanismo restringido a Prolog
Considérese el programa clausal:
Su escritura como programa es:
t(X) :- s(X).
r(X) :- t(X).
r(X) :- q(X).
s(X).La consulta es:
?- r(X).La cláusula objetivo inicial es , o de forma disyuntiva, . Si elegimos la regla , la derivación SLD es:
Interpretación paso a paso:
- Para demostrar basta demostrar .
- Para demostrar basta demostrar .
- es un hecho; no deja submeta pendiente.
- La lista de metas queda vacía y la consulta tiene éxito.
La otra regla para produciría la meta . Como el programa no contiene un hecho ni una regla cuya cabeza sea , esa rama falla. El retroceso permite regresar y probar la alternativa basada en .
El orden sí importa operacionalmente
Lógicamente, reordenar cláusulas no cambia el conjunto de consecuencias. En Prolog habitual, sin embargo, se selecciona la meta más a la izquierda y se prueban las cláusulas en el orden del programa mediante búsqueda en profundidad. Un orden desafortunado puede hacer la ejecución lenta o incluso no terminante.
6. Explorador paso a paso
El recurso permite alternar entre la refutación general y la derivación SLD. En ambos casos se elimina un par de literales complementarios; la diferencia es que SLD mantiene una meta central y siempre resuelve contra una cláusula del programa, lo que reduce drásticamente el espacio de búsqueda.
7. Resolución general vs. resolución SLD
| Aspecto | Resolución general | Resolución SLD / Prolog |
|---|---|---|
| Cláusulas permitidas | Cláusulas arbitrarias | Cláusulas definidas + una meta |
| Elección | Puede resolver diversos pares de cláusulas | Resuelve una meta con una regla del programa |
| Forma de la derivación | Árbol o grafo amplio | Derivación lineal por rama |
| Dirección intuitiva | Buscar una contradicción | Reducir metas a submetas |
| Éxito | Se deriva | La lista de metas queda vacía |
| Alternativas | Muchas combinaciones posibles | Se exploran mediante retroceso |
La «L» de SLD significa lineal: cada nuevo resolvente se obtiene del objetivo anterior y una cláusula del programa. La «S» recuerda que existe una regla de selección para escoger cuál meta resolver. La «D» alude a cláusulas definidas.
8. Errores frecuentes
- Agregar la conclusión en vez de negarla. En refutación se trabaja con .
- Confundir conjunción de metas con disyunción clausal. representa , no .
- Olvidar aplicar el unificador al resto. La sustitución afecta todo el resolvente, no solo el par eliminado.
- No renombrar variables entre cláusulas. Dos variables con el mismo nombre en reglas distintas no tienen por qué ser la misma variable.
- Confundir falla de una rama con falsedad lógica. Una elección puede fallar aunque otra rama sí demuestre la consulta.
- Creer que una búsqueda que no termina equivale a falso. Prolog puede quedarse atrapado en una rama infinita antes de alcanzar una alternativa exitosa.
9. Comprobación rápida
¿Qué meta queda al resolver con el hecho ?
La primera meta unifica con el hecho mediante . Queda .
¿Qué significa obtener en una refutación?
Que el conjunto formado por el programa y la negación de la consulta es insatisfactible; por tanto, la consulta se sigue lógicamente del programa.
¿Por qué la búsqueda de Prolog es más estrecha que el esquema de resolución general?
Porque solo resuelve el objetivo actual contra cláusulas definidas del programa y selecciona una meta concreta; no combina libremente cualquier par de cláusulas derivadas.
Resumen después de clase
Una regla de Prolog es la cláusula de Horn . Una consulta es una cláusula objetivo formada por las negaciones de las metas pendientes. Resolver la cabeza contra una meta seleccionada elimina esa meta y agrega el cuerpo de la regla, aplicando el unificador más general. La resolución SLD restringe la resolución general para producir derivaciones lineales guiadas por metas; Prolog añade una estrategia concreta de selección, orden y retroceso.