La Sostenibilidad Corporativa. Administración Ambiental
Inferencia en Lógica de Primer Orden
1. INFERENCIA EN LÓGICA
DE PRIMER ORDEN
I.A., RUSSEL Y NORVIG, CAPÍTULO 9
PÁGINAS 309-362(337-390 PDF)
2. Lógica proposicional vs. Lógica de primer
orden
La inferencia de primer orden se puede hacer convirtiendo la
base de conocimiento a lógica proposicional y utilizando la
inferencia proposicional.
Comenzamos con algunas reglas de inferencia sencillas que se
pueden aplicar a las sentencias con cuantificadores para
obtener sus sentencias equivalentes, sin cuantificar.
3. Reglas de inferencia para cuantificadores
Suponga que nuestra base de conocimiento contiene el axioma popular que
afirma que los reyes que son codiciosos también son malvados.
∀𝑥𝑅𝑒𝑦 𝑥 ^𝐶𝑜𝑑𝑖𝑐𝑖𝑜𝑠𝑜(𝑥) → 𝑀𝑎𝑙𝑣𝑎𝑑𝑜(𝑥)
Se pueden inferir las siguientes sentencias:
Rey(Juan) ^ Codicioso(Juan) Malvado(Juan)
Rey(Ricardo) ^ Codicioso(Ricardo) Malvado(Ricardo)
Rey(Padre(Juan)) ^ Codicioso(Padre(Juan)) Malvado(Padre(Juan))
4. Regla de la Especificación Universal (EU)
La regla de la Especificación Universal (EU para abreviar) dice que podemos inferir
cualquier sentencia obtenida por sustitución de la variable por un término base (un
término sin variables)
Vamos a denotar el resultado de aplicar una sustitución Ɵ a una sentencia α mediante
Sust (Ɵ , α). Entonces la regla se escribe:
∀v α______
SUST({v/g}, α)
Reglasdeinferenciaparacuantificadores
Para cualquier variable v y término base g
6. Regla de la Especificación Existencial(EE)
La correspondiente regla de Especificación Existencial para el cuantificador existencial
es ligeramente más complicada. Para cualquier sentencia α, variable v, y símbolo
de constante k que no aparezca en ninguna otra parte de la base de conocimiento,
Ǝv α______
SUST({v/k}, α)
Reglasdeinferenciaparacuantificadores
Para cualquier variable v y símbolo
constante k
7. Regla de la Especificación Existencial(EE)
De la sentencia Ǝ𝑥 𝐶𝑜𝑟𝑜𝑛𝑎(𝑥) ^ 𝑆𝑜𝑏𝑟𝑒𝐶𝑎𝑏𝑒𝑧𝑎(𝑥, 𝐽𝑢𝑎𝑛)
Podemos inferir 𝐶𝑜𝑟𝑜𝑛𝑎(𝐶1) ^ 𝑆𝑜𝑏𝑟𝑒𝐶𝑎𝑏𝑒𝑧𝑎(𝐶1, 𝐽𝑢𝑎𝑛)
Mientras que 𝐶1 no aparezca en ningún otro sitio de la BC.
Básicamente, la sentencia existencial nos dice que hay algún objeto que
satisface una condición, y el proceso de especificación tan sólo le da un
nombre a dicho objeto (𝐶1).
Naturalmente, ese nombre no puede pertenecer a otro objeto
previamente.
Reglasdeinferenciaparacuantificadores
8. Regla de la Especificación Existencial(EE)
Supongamos que descubrimos que hay un número que es
un poco mayor que 2,71828 y que satisface la ecuación
𝑑 𝑥 𝑦
𝑑𝑦
= 𝑥 𝑦
para x.
Le podemos dar a dicho número un nombre, como 𝒆, pero sería un
error darle el nombre de un objeto ya existente, como 𝝅.
En lógica, a este nuevo nombre se le denomina constante de Skolem*.
Reglasdeinferenciaparacuantificadores
*La Especificación Existencial es un caso especial del proceso más
general llamado skolemización, que trataremos más adelante
9. • La Especificación Universal se puede aplicar muchas veces para producir muchas
consecuencias diferentes, la Especificación Existencial sólo se puede aplicar una vez, y
entonces se puede descartar la sentencia cuantificada existencialmente.
• Por ejemplo:, una vez que hemos añadido la sentencia 𝑀𝑎𝑡𝑎(𝐴𝑠𝑒𝑠𝑖𝑛𝑜, 𝑉í𝑐𝑡𝑖𝑚𝑎), ya
no necesitamos más la sentencia Ǝ𝑥𝑀𝑎𝑡𝑎(𝑥, 𝑉í𝑐𝑡𝑖𝑚𝑎).
Regla de la Especificación Existencial(EE)
Reglasdeinferenciaparacuantificadores
10. Reducción a la inferencia proposicional
Ya que podemos inferir sentencias no cuantificadas a partir de
sentencias cuantificadas, podemos reducir la inferencia de
primer orden a la inferencia proposicional.
Como una sentencia cuantificada existencialmente se puede
sustituir por una especificación, una sentencia cuantificada
existencialmente se puede sustituir por el conjunto de todas las
especificaciones posibles.
12. Reducciónalainferenciaproposicional
Entonces aplicamos la EU a la primera sentencia, utilizando todas
las sustituciones de términos base posibles, tomadas del
vocabulario de la base de conocimiento, en este caso {x/Juan} y
{x/Ricardo}. Obtenemos:
𝑅𝑒𝑦(𝐽𝑢𝑎𝑛) ^ 𝐶𝑜𝑑𝑖𝑐𝑖𝑜𝑠𝑜(𝐽𝑢𝑎𝑛) 𝑀𝑎𝑙𝑣𝑎𝑑𝑜(𝐽𝑢𝑎𝑛),
𝑅𝑒𝑦(𝑅𝑖𝑐𝑎𝑟𝑑𝑜) ^ 𝐶𝑜𝑑𝑖𝑐𝑖𝑜𝑠𝑜(𝑅𝑖𝑐𝑎𝑟𝑑𝑜) 𝑀𝑎𝑙𝑣𝑎𝑑𝑜 (𝑅𝑖𝑐𝑎𝑟𝑑𝑜)
Ahora, la BC es esencialmente proposicional, si vemos las
sentencias atómicas base (𝑅𝑒𝑦(𝐽𝑢𝑎𝑛), 𝑐𝑜𝑑𝑖𝑐𝑖𝑜𝑠𝑜(𝐽𝑢𝑎𝑛), etc.)
como símbolos proposicionales.
13. Una regla de inferencia de primer orden
Supongamos que en vez de Codicioso[Juan), sabemos que todo el mundo es codicioso: :
∀𝑦 𝐶𝑜𝑑𝑖𝑐𝑖𝑜𝑠𝑜 𝑦
Podemos concluir Malvado(Juan) por que sabemos que Juan es un rey y que Juan es
codicioso al igual que todo el mundo.
Necesitamos encontrar una sustitución para las variables en la sentencia de implicación y
las variables de las sentencias que se deben emparejar.
En este caso, aplicando la sustitución {x/Juan, y/Juan} a las premisas de implicación Rey(x) y
codicioso(x) y a las sentencias de la BC Rey(Juan) y Codicioso(y) las hará idénticas.
De este modo podemos inferir la conclusión de una implicación
14. Unaregladeinferenciadeprimerorden
Este proceso de inferencia se puede plasmar mediante una única regla de inferencia a la
que llamamos MODUS PONENS GENERALIZADO*.
Para las sentencias atómicas p y q donde hay una sustitución Ɵ tal que
SUST(Ɵ, P’i)=SUST (Ɵ,Pi) para todo i
En nuestro ejemplo:
*El MODUS PONENS GENERALIZADO ERIGE AL MODUS PONENS PROPOSICIONAL A LA LÓGICA DE PRIMER ORDEN.
15. UNIFICACIÓN
Es el proceso por el cual las reglas de inferencia elevadas encuentran las
sustituciones que hacen que expresiones lógicas diferentes se hagan idénticas.
Es el componente clave de todos los algoritmos de inferencia en lógica de primer
orden.
El algoritmo UNIFICA toma dos sentencias y devuelve un unificador para ellas, si éste
existe:
𝑈𝑁𝐼𝐹𝐼𝐶𝐴 𝑝, 𝑞 = Ɵ 𝑑𝑜𝑛𝑑𝑒 𝑆𝑈𝑆𝑇 Ɵ, 𝑝 = 𝑆𝑈𝑆𝑇 Ɵ, 𝑞
Ejemplo: supongamos que tenemos una petición 𝐶𝑜𝑛𝑜𝑐𝑒(𝐽𝑢𝑎𝑛, 𝑥): ¿a quién conoce
Juan?
Debemos encontrar todas las sentencias de la BC que se unifiquen con
𝐶𝑜𝑛𝑜𝑐𝑒(𝐽𝑢𝑎𝑛, 𝑥)
16. UNIFICACIÓN
Estas son los resultados de la unificación con 4 sentencias que podrían estar
en la BC:
La última unificación falla por que x no puede tomar los valores
𝐽𝑢𝑎𝑛 𝑦 𝐸𝑙𝑖𝑠𝑎𝑏𝑒𝑡 al mismo tiempo. Este problema se presenta cuando las dos
sentencias tienen que usar el mismo nombre de variable, 𝑥.
Si renombramos la x de Conoce(𝑥, 𝐸𝑙𝑖𝑠𝑎𝑏𝑒𝑡) por otro nombre de variable la
unificación* tendrá éxito:
*Investigar Unificador más General (UMG)
17. ALMACENAMIENTO Y RECUPERACIÓN
Recordemos las funciones 𝐷𝐸𝐶𝐼𝑅 𝑦 𝑃𝑅𝐸𝐺𝑈𝑁𝑇𝐴𝑅, utilizadas para informar a
o interrogar la BC.
Por debajo de estas están las funciones primitivas 𝐴𝐿𝑀𝐴𝐶𝐸𝑁𝐴𝑅 𝑦 𝐵𝑈𝑆𝐶𝐴𝑅.
𝐴𝐿𝑀𝐴𝐶𝐸𝑁𝐴𝑅(𝑠) guarda una sentencia s en la base de conocimiento,
𝐵𝑈𝑆𝐶𝐴𝑅(𝑞) devuelve todos los unificadores que unifican la petición q con
alguna sentencia de la BC.
La forma más fácil, pero ineficiente* de implementar
𝐴𝐿𝑀𝐴𝐶𝐸𝑁𝐴𝑅 𝑦 𝐵𝑈𝑆𝐶𝐴𝑅 consiste en mantener todos los hechos en la BC
mediante una lista larga:
Dada una petición 𝑞, se llama a 𝑈𝑁𝐼𝐹𝐼𝐶𝐴(𝑞, 𝑠) con cada
sentencia s de la lista.
*Investigar mecanismos para realizar la búsqueda de forma más eficiente
(página 316-318 del libro)
18. ENCADENAMIENTO HACIA ADELANTE
• Anteriormente se vio un algoritmo de encadenamiento hacia adelante para
cláusulas positivas proposicionales.
• La idea era comenzar a partir de las sentencias atómicas de la BC y aplicar el
𝑀𝑂𝐷𝑈𝑆 𝑃𝑂𝑁𝐸𝑁𝑆 hacia adelante, añadiendo las sentencias atómicas nuevas
hasta que no se puedan realizar más inferencias.
• Las cláusulas positivas como 𝑆𝑖𝑡𝑢𝑎𝑐𝑖ó𝑛 → 𝑅𝑒𝑠𝑝𝑢𝑒𝑠𝑡𝑎 son útiles para sistemas
que realizan inferencias en respuesta a información nueva que se ha recibido.
• Vale la pena intentar construir una BC tan sólo con cláusulas positivas de manera
que se evite el coste de aplicar la resolución.
19. CLÁUSULASPOSITIVAS DE PRIMER ORDEN
Son disyunciones de literales en los cuales sólo uno es positivo.
Ejemplos:
Al contrario que los literales proposicionales, los literales de primer orden pueden
contener variables, en cuyo caso se asume que están cuantificadas universalmente.
Son una forma normal muy adecuada para utilizar el MODUS PONENS GENERALIZADO.
No todas las BC se pueden convertir a un conjunto de cláusulas positivas, pero si se
pueden transformar.
20. CLÁUSULASPOSITIVAS DE PRIMER ORDEN
Considere el siguiente problema:
Demostraremos que West es un Criminal.
Primero, representaremos estos hechos como cláusulas positivas de primer orden.
“Nono … tiene algunos misiles”: Ǝ𝑥 𝑇𝑖𝑒𝑛𝑒 (𝑁𝑜𝑛𝑜, 𝑥) ^ (𝑀𝑖𝑠𝑖𝑙(𝑥)
Se transforma en dos cláusulas positivas mediante la eliminación del Existencial, introduciendo la constante
M1:
𝑇𝑖𝑒𝑛𝑒 (𝑁𝑜𝑛𝑜, 𝑀1)
𝑀𝑖𝑠𝑖𝑙 (𝑀1) 9.4
22. ALGORITMO SENCILLO DE ENCADENAMIENTO HACIA ADELANTE
• Comenzando con hechos conocidos, el proceso dispara todas las reglas cuyas premisas se
satisfacen, añadiendo sus conclusiones al conjunto de hechos conocidos.
• El proceso se repite hasta que la petición es respondida o no se puede añadir más
hechos
24. ALGORITMO SENCILLO DE ENCADENAMIENTO HACIA ADELANTE
Hechos iniciales
Primera Iteración
Segunda Iteración
25. EMPAREJAMIENTO DE REGLAS CON LOS HECHOSCONOCIDOS
Suponga que queremos aplicar la regla:
𝑀𝑖𝑠𝑖𝑙(𝑥) −> 𝐴𝑟𝑚𝑎(𝑥)
Necesitamos encontrar todos los hechos que se unifican con 𝑀𝑖𝑠𝑖𝑙(𝑥).
En una BC indexada de forma adecuada, esto se puede realizar en tiempo
constante por cada hecho.
Ahora considere una regla como:
𝑀𝑖𝑠𝑖𝑙(𝑥) ^𝑇𝑖𝑒𝑛𝑒(𝑁𝑜𝑛𝑜, 𝑥) −> 𝑉𝑒𝑛𝑑𝑒(𝑊𝑒𝑠𝑡, 𝑥, 𝑁𝑜𝑛𝑜)
Podemos encontrar todos los objetos que tiene Nono en un tiempo constante
por objeto: por cada objeto podríamos comprobar si es un misil.
26. EMPAREJAMIENTO DE REGLAS CON LOS HECHOSCONOCIDOS
• Si la base de conocimiento tiene muchos objetos en posesión de Nono y
unos pocos misiles, sería mejor encontrar todos los misiles primero y
entonces comprobar si son de Nono.
• Este es el problema de la ordenación de conjuntores: encontrar una
ordenación para resolver los conjuntores de las premisas de una regla de
tal manera que el coste se minimice.
• La heurística de la variable más restringida que se usa para PSR sugeriría
ordenar primero los misiles si hay menos misiles que objetos.
27. EMPAREJAMIENTO DE REGLAS CON LOS HECHOSCONOCIDOS
Podemos ver cada conjuntor como una restricción sobre las variables que contiene, por
ejemplo, Misil(x) es una restricción unitaria sobre la variable x.
Ampliando esta idea, podemos expresar cada PSR de dominio finito como una única cláusula
positiva junto a algunos hechos base asociados a ella
28. ENCADENAMIENTO HACIA ATRÁS
Estos algoritmos trabajan hacia atrás desde el objetivo, encadenando a través de las
reglas hasta encontrar los hechos conocidos que soportan la demostración.
29. ENCADENAMIENTO HACIA ATRÁS
El algoritmo se invoca con una lista de objetivos que contiene un solo elemento, la petición
original, y devuelve el conjunto de todas las sustituciones que satisfacen la petición.
La lista de objetivos se puede ver como una «pila» a la espera de ser procesada; si todos tos
objetivos se pueden satisfacer, entonces la rama actual de la demostración tiene éxito.
30. PROGRAMACIÓN LÓGICA
• La programación lógica es una tecnología que está bastante relacionada con
abarcar el ideal declarativo:
• “Los sistemas se construirían expresando el conocimiento en un lenguaje
formal y los problemas se resolverían ejecutando procesos de inferencia
sobre dicho conocimiento”.
• Prolog es, de lejos, el lenguaje de programación lógica más extensamente
utilizado.
• Los programas en Prolog son conjuntos de cláusulas positivas escritas en una
notación algo diferente a la estándar de la lógica de primer orden.
• Prolog utiliza las letras mayúsculas en las variables y las minúsculas en las
constantes.
31. PROGRAMACIÓN LÓGICA
es_un_pais(paraguay). %Paraguay es un país
es_un_pais(argentina).
es_un_pais(brasil).
es_un_pais(bolivia).
es_un_pais(chile).
es_un_pais(perú).
es_un_pais(china).
false.
es_un_pais(X), write(X), nl, fail.
paraguay
argentina
brasil
bolivia
chile
perú
false. Fuente: Gustavo DeJean.
https://goo.gl/orpZDb
Es una
implementación
en open source
del lenguaje de
programación
Prolog.
Su autor
principal es Jan
Wielemaker (VU
University
Amsterdam).
En desarrollo
ininterrumpido
desde 1987.
limita_con(paraguay, brasil).%Paraguay limita con Brasil
limita_con(paraguay, argentina).
limita_con(paraguay, bolivia).
limita_con(paraguay, X).
Limita_con(X, Y).
limita_con(X, Y), write(X), write(' '), write(Y), nl, fail
limitrofes(paraguay, Brasil).
limitrofes(X,Y):- limita_con(X,Y).
limitrofes(X,Y):- limita_con(Y,X).
32. PROGRAMACIÓN LÓGICA
• Las cláusulas están escritas con la cabeza precediendo al cuerpo,
• “:-” se utiliza para las implicaciones a la izquierda, las comas separan los
literales del cuerpo y el punto indica el final de la sentencia.
Criminal(X) :- americano(X), arma(Y), vende(X,Y,Z), hostil (Z)
•
Como ejemplo, aquí tenemos un programa en Prolog para unir (X,Y,Z), que
tiene éxito si la lista Z es el resultado de unir las listas X y Y:
Unir([ ], Y, Y)
Unir ([A|X], Y, [A|Z]) :- unir (X, Y, Z)
33. PROGRAMACIÓN LÓGICA
Unir([ ], Y, Y)
Unir ([A|X], Y, [A|Z]) :- unir (X, Y, Z)
unir una lista vacía a una lista Y genera la misma lista Y
[A | Z ] es el resultado de unir [A | X] a Y, dado que z es
el resultado de unir x a Y.
Otro ejemplo: unir (A, B, [1, 2])
Obtenemos las soluciones hacia atrás:
A=[ ] B=[1, 2]
A=[1] B=[2]
A=[1, 2] B=[ ]
La ejecución de los programas en Prolog se hace mediante el encadenamiento
hacia atrás en primero en profundidad, donde las cláusulas se van intentando
en el orden en el que se han escrito en la BC.
34. RESOLUCIÓN
• Anteriormente vimos que la resolución proposicional es un procedimiento de
inferencia mediante refutación que es completo para la lógica proposicional.
• Veremos cómo ampliar la resolución a la lógica de primer orden
Formas normales conjuntivas(FNC) en lógica de primer orden
• Una conjunción de cláusulas, donde cada cláusula es una disyunción de literales
• Cada sentencia en lógica de primer orden se puede convertir a una sentencia en
FNC que es equivalente inferencialmente.
• La sentencia en FNC será insatisfacible sólo cuando la sentencia original lo sea
35. CONVERSIÓN A FNC
Mostraremos el procedimiento transformando la sentencia
“Todo el mundo que ama a los animales es amado por alguien”
• Eliminación de las implicaciones:
• Anidar las ¬:
La sentencia ahora se lee «Hay algún animal que x no ama, o (si éste no es el caso) alguien
ama a x»
36. CONVERSIÓN A FNC
• Estandarizar las variables: para las sentencias que utilizan el mismo nombre de variable
dos veces, se cambia una de las dos variables.
• Skolemnizar: la Skolemización es el proceso de borrar los cuantificadores existenciales
mediante su eliminación
• Eliminar los cuantificadores universales y distribuir la conjunción respecto a la negación:
Afortunadamente, las personas rara vez necesitan ver las sentencias en FNC
37. • El uso de la unificación para obtener las sustituciones adecuadas de las variables elimina el paso de instanciación en
las demostraciones de primer orden, haciendo que el proceso sea mucho más eficiente.
• Una versión elevada del Modus Ponens utiliza la unificación para proporcionar una regla de inferencia natural y
potente, el Modus Ponens Generalizado. Los algoritmos de encadenamiento hacia delante y de encadenamiento
hacia atrás aplican esta regla a conjuntos de cláusulas positivas.
• El encadenamiento hacia delante se utiliza en las bases de datos deductivas, donde se puede combinar con las
operaciones de las bases de datos relaciónales. También se utiliza en los sistemas de producción, que pueden hacer
actualizaciones eficientes en conjuntos de reglas muy grandes.
• El encadenamiento hacia delante es completo en los programas Datalog y corre en tiempo polinómico.
• El encadenamiento hacia atrás se utiliza en los sistemas de programación lógica como el Prolog, que emplea una
sofisticada tecnología de compilación para proporcionar una inferencia muy rápida.
• El encadenamiento hacia atrás sufre de inferencias redundantes y bucles infinitos; esto se puede aliviar mediante la
memorización.
• La regla de inferencia de la resolución generalizada proporciona un sistema de demostración completo en lógica de
primer orden, utilizando bases de conocimiento en forma normal conjuntiva.
RESUMEN*
*(páginas 352-353(380-381)