Documentos de Académico
Documentos de Profesional
Documentos de Cultura
La Programación Lógica tiene sus orígenes más cercanos en los trabajos de prueba
automática de teoremas de los años sesenta. J. A. Robinson propone en 1965 una regla de
inferencia a la que llama resolución, mediante la cual la demostración de un teorema puede
ser llevada a cabo de manera automática.
La resolución es una regla que se aplica sobre cierto tipo de fórmulas del Cálculo de
Predicados de Primer Orden, llamadas cláusulas y la demostración de teoremas bajo esta
regla de inferencia se lleva a cabo por reducción al absurdo.
Otros trabajos importantes de esa época que influyeron en la programación lógica, fueron
los de Loveland , Kowalski y Green. Este último, por ejemplo, diseña un probador de
teoremas que extrae de la prueba, el valor de las variables para las cuales el teorema es
válido.
Estos mecanismos de prueba fueron trabajados con mucho entusiasmo durante una época,
pero, por su ineficiencia, fueron relegados hasta el nacimiento de Prolog, que surge en 1971
en la Universidad de Marsella, Francia, en el seno de un grupo de investigación en el
campo de la Inteligencia Artificial Colmerauer 73.
La Lógica de Primer Orden, es uno de los formalismos más utilizados para representar
conocimiento en IA. La Lógica cuenta con un lenguaje formal mediante el cual es posible
representar fórmulas llamadas axiomas, que permiten describir fragmentos del
conocimiento y, además consta de un conjunto de reglas de inferencia que aplicadas a los
axiomas, permiten derivar nuevo conocimiento.
Tal como en Lógica Proposicional (LP), nos interesa encontrar un algoritmo implementable
que permita hacer demostraciones de teoremas de primer orden en forma automática.
y la clausula
S(y) ∨ ¬P(u)
Observemos que:
Dado que la primera fórmula se cumple para todo x, podríamos inferir que,particular, se
cumple para un objeto cualquiera C.
y la cláusula
S(y) ∨ ¬P©
Dada tal sustitución, podemos utilizar la regla de resolución que ya conocemos y generar la
siguiente cláusula:
S(y) ∨ Q(y, z) ∨ R(C, ƒ(w))
¿Por qué?
Formalmente, una sustitución es una función parcialmente definida θ: Var → T(S), donde
T(S) es el conjunto de términos de un conjunto de símbolos S.
Una sustitución que hace que dos fórmulas atómicas se hagan iguales se conoce como
unificador.
Ejemplo:
El sentido de igualdad (≡) usado aquí es meramente sintáctico y quiere decir que las
expresiones son iguales caracter a caracter.
Si θ es unificador, se usa
{E1,E2, . . . ,En}θ
Dos literales que unifican, pueden ser hechos unificar por muchas sustituciones.
En nuestro ejemplo anterior, todas las siguientes sustituciones son unificadores de L1 y L2:
θ1 = {x/ƒ(A), y/g(u), z/A}
θ2 = {x/ƒ(z), y/g(u)}
De todos los unificadores posibles siempre existe al menos uno que es el menos restrictivo,
en el sentido que es el que menos restringe futuras unificaciones.
_______________________________________
Hasta el momento, tenemos un método de resolución sirve para fórmulas de primer orden
cuantificadas universalmente.
La respuesta está en transformar una fórmula con cuantificadores varios a una que sólo
tenga cuantificadores universales.
Las lineas 1–7 contienen clausulas no satisfasible. Esto esta mostrado en las lineas 8–15 las
cuales son una refutación por el procedimiento de resolución. Cada linea contiene el
resolvente, el MGU y el numero de las clausulas padre
1. ¬p(x)∨q(x)∨q(x)∨r(x,ƒ(x))
2. ¬p(x)∨q(x)∨q(x)∨s(ƒ(x))
3. t(a)
4. p(a)
5. ¬r(a,y)∨t(y)
6. ¬t(x)∨¬q(x)
7. ¬t(x)∨¬s(x)
8. ¬q(a) x←a 3,6
9. q(a)∨s(ƒ(a)) x←a 2,4
10. s(ƒ(a)) 8,9
11. q(a)∨r(a,ƒ(a)) x←a 1,4
12. r(a,ƒ(a)) 8,11
13. t(ƒ(a)) y←ƒ(a) 5,12
14. ¬s(ƒ(a)) x← 7,13
15. ◊ 10,14