View
1.410
Download
0
Embed Size (px)
Citation preview
Modificado y Adaptado por: LEONARDO BERNAL ZAMORA
Programación Lógica
Forma normal de una fórmula
Una fórmula se dice que está en forma normal si todos los cuantificadores han sido desplazados al principio de la fórmula.
Algunas equivalencias útiles para alcanzar una forma normal
[ ( X) p(X) ] (X) [ p(X) ]
[ (X) p(X) ] ( X) [ p(X) ]
( X) [ p(X) q(X) ] [ (X) p(X) ] [ (X) q(X) ]
( X) [ p(X) q(X) ] [ ( X) p(X) ] [ ( X) q(X) ]
Reglas de Inferencia:
Especialización Universal: siempre es posible deducir la verificación de un caso concreto a partir de un cuantificador universal.
(X) p(X) p(a)
Sustitución: permite la sustitución de cualquier proposición en una fórmula por otra biequivalente.
Modus ponens: de una implicación de la verificación de la premisa se verifica la conclusión.
Axioma: p qAxioma: pTeorema: q
Programación Lógica
Modus tollens: de una implicación y de la no verificación del consecuente, se concluye la no verificación de la premisa.
Axioma: p qAxioma: ¬qTeorema: ¬p
Y - Introducción: la fbf pq puede ser inferida de las fbf p y q.
Y- Eliminación: la fbf p puede ser inferida de la fbf pq.
O - Introducción: la fbf p q puede ser inferida de la fbf p o de la fbf q.
Reglas de Inferencia:
El Modus Ponens o razonamiento directo
El Modus Tollens o razonamiento indirecto
Programación Lógica
Lógica de orden cero:
Los predicados carecen de términos y el cálculo de predicados se reduce al cálculo de proposiciones o proposicional.
Lógica de orden uno:
Los predicados poseen términos que pueden ser constantes, variables o función.
Lógica de orden superior:
Los predicados lógicos pueden ser en sí mismos variables.
Programación Lógica
Ejercicios. Expresar como fbf en lógica de predicados los siguientes hechos
A. Marco era un hombre.B. Marco era pompeyano (de Pompeya).C. Todos los pompeyanos eran romanos.D. César era un dirigente.E. Todos los romanos o bien eran leales a César o bien le odiaban.F. Todo el mundo es fiel a alguien. G. La gente sólo trata de asesinar a aquellos dirigentes a los que no son leales.H. Marco intentó asesinar a César.I. Algún romano odia a César.
Programación Lógica
A. hombre(marco)
B. pompeyano(marco)
C. (X)(pompeyano(X) romano(X))
D. dirigente(césar)
E. (X)(romano(X) leal(X,césar) odia(X,césar))
F. (X)(hombre(X) (Y) leal(X,Y)
G. (X)(Y) (hombre(X) dirigente(Y)
intenta_asesinar(X,Y) leal(X,Y))
H. intenta_asesinar(marco, césar)
I. (X) (romano(X) odia(X, césar))
Programación Lógica
Teorema + Axiomas (como fórmulas bien formadas, fbf)
Teorema + Axiomas (como cláusulas)
Método de resolución por refutación
Unificación
Demostración automática de teoremas
+
+
Lo que queremos hacer ...
Programación Lógica
IMPORTANTE:
La demostración automática de teoremas lógicos es un procedimiento que involucra una mera actividad sintáctica, o de relación entre símbolos, ignorándose completamente el contenido semántico que resulta de la interpretación de las fórmulas.
Programación Lógica
Fórmulas bien formadas (fbf)
Son aquellas que cumplen ciertos requisitos en su estructura y definen la sintaxis del cálculo de predicados
Una fórmula se dice bien formada si puede derivarse de alguna de las siguientes reglas de formación:
1. Cualquier fórmula atómica es una fbf.2. Si p y q son fbf, entonces también serán fbf las siguientes:
¬p, p q, p q, p q
3. Si X es una variable libre en la fbf p, entonces son fbf :(X) p(X), (X) p(X)
4. Cualquier fórmula que no pueda formarse a partir de estas reglas no es una fbf.
Programación Lógica
Cláusula
Es una fórmula que sólo contiene operadores disyuntivos y posiblemente negaciones sobre los átomos.
Este tipo de fórmulas pueden ser expresadas por una única implicación. Así la fórmula:
a1 a2 ... an b1 b2 ... bm
se puede transformar en :
¬(¬ a1 ¬ a2 ... ¬ an ) b1 b2 ... bm
¬ a1 ¬ a2 ... ¬ an b1 b2 ... bm
Programación Lógica
Cláusulas de Horn.
Una cláusula de Horn es una regla de inferencia lógica con una serie de premisas (cero, una o más), y un único consecuente. Las cláusulas de Horn son las instrucciones básicas del lenguaje de programación PROLOG, de paradigma declarativo.
La sintaxis de una cláusula de Horn en PROLOG tiene el siguiente aspecto:
hija (A, B) :- mujer (A), padre (B, A).
Aquellas cuyo consecuente tiene un único predicado.
a1 a2 ... an b
Ventajas de una representación basada en cláusulas de Horn
• La demostración de teoremas o resolución de un conjunto de cláusulas de Horn es más sencilla en general.
• Las cláusulas de Horn admiten una interpretación directa en términos de un lenguaje de programación, lo que no es posible con cláusulas generales.
Programación Lógica
Proceso de paso a cláusulas:Proceso de paso a cláusulas:
1. Eliminar los símbolos de implicación 2. Mover las negaciones hasta las fórmulas atómicas 3. Renombrar variables4. Eliminar los cuantificadores existenciales.5. Desplazar los cuantificadores universales 6. Convertir los operadores AND en los más externos7. Eliminar los cuantificadores universales.8. Eliminar los conectores conjuntivos (AND).9. Renombrar las variables.
Programación Lógica
Transformación a cláusulas
Para ilustrar el proceso paso a paso emplearemos la siguiente fómula compleja como ejemplo:
(X){p(X) {(Y)[p(Y) p(f(X,Y))] (Y)[q(X,Y) p(Y)]}}
1. Eliminar los símbolos de implicación, sustituyendo p q por p q.
Tras este primer paso, nuestra fómula se transforma en:
(X){p(X) {(Y)[ p(Y) p(f(X,Y))] (Y)[ q(X,Y) p(Y)]}}
Programación Lógica
2. Mover las negaciones hasta las fórmulas atómicas, para ello se emplean las leyes de Morgan y las transformaciones de cuantificadores existenciales y universales.
(p q) p q (p q) p q
[ ( X) p(X) ] (X) [ p(X) ]
[ (X) p(X) ] ( X) [ p(X) ]
Aplicándolo sobre el ejemplo:
(X){p(X) {(Y)[ p(Y) p(f(X,Y))] (Y)[ q(X,Y) p(Y)]}}
(X){ p(X) {(Y)[ p(Y) p(f(X,Y))] (Y)[q(X,Y) p(Y)]}}
Programación Lógica
3. Renombrar variables, en aquellos casos en los que varias variables se hayan nombrado de igual forma. En nuestro caso esto ocurre con la variable Y que renombramos como Z en su segunda ocurrencia.
Así nuestro ejemplo se transforma en:(X){ p(X) {(Y)[ p(Y) p(f(X,Y))] (Y)[q(X,Y) p(Y)]}}
(X){ p(X) {(Y)[ p(Y) p(f(X,Y))] (Z)[q(X,Z) p(Z)]}}
Programación Lógica
4. Eliminar los cuantificadores existenciales. Las variables cuantificadas por este tipo de cuantificadores serán sustituidas por un tipo de función comodín denominada función de Skolem (proceso de skolemización).
P.e. (Z) q(X,Z) se transforma en q(X, g(X))
en donde g(X) es la función de Skolem para este caso. Nótese que no sólo se eliminan los cuantificadores existenciales sino también las variables ligadas a los mismos.
La función de Skolem introducida debe ser nueva en el universo de discurso, y además deberá ser función de todas las variables cuantificadas universalmente cuyos ámbitos incluyan el ámbito del cuantificador existencial que se pretende eliminar.
Programación Lógica
Así nuestro ejemplo se transforma en:
(X){ p(X) {(Y)[ p(Y) p(f(X,Y))] (Z)[q(X,Z) p(Z)]}}
(X){ p(X) {(Y)[ p(Y) p(f(X,Y))] [q(X, g(X)) p(g(X))]}}
Si el cuantificador existencial no se encuentra en el ámbito de ningún cuantificador universal, se usará una función de Skolem sin argumentos. Como en el siguiente ejemplo:
(Z) q(Z) se transforma en q(a)
Donde el símbolo constante a referencia a la entidad que sabemos existe. Evidentemente a debe ser un símbolo que no haya sido empeado con anterioridad.
Programación Lógica
5. Desplazar los cuantificadores universales, de manera que queden al comienzo de la fórmula (prenex form). Estre proceso puede ser realizado por cuanto no existen ya variables distintas con el mismo nombre.(X){ p(X) {(Y)[ p(Y) p(f(X,Y))] [q(X, g(X)) p(g(X))]}}
(X) (Y){ p(X) { [ p(Y) p(f(X,Y))] [q(X, g(X)) p(g(X))]}}
6. Convertir los operadores conjuntivos (AND) en los más externos, para lo que se emplean las leyes distributivas. A la forma resultante se le denomina forma normal conjuntiva.
Este paso se ejecuta sobre el ejemplo en dos pasos:
Programación Lógica
Partiendo de la última expresión,
(X)(Y){ p(X) { [ p(Y) p(f(X,Y))] [q(X, g(X)) p(g(X))]}}
se aplica primero la ley distributiva:
(X)(Y){ { p(X) [ p(Y) p(f(X,Y))]} { p(X) [q(X, g(X)) p(g(X))]}}
Aplicando de nuevo la ley distributiva y la asociativa:
(X)(Y){ [ p(X) p(Y) p(f(X,Y))] [ p(X) q(X, g(X)) ]
[ p(X) p(g(X))]}
Programación Lógica
7. Eliminar los cuantificadores universales. Se trata de una eliminación convencional, no teórica, pues se asume que toda variable que aparezca está cuantificada universalmente. La función de Skolem adquiere sentido, dado que al no aparecer otras variables que las universales, pueden eliminarse sus cuantificadores por convenio. En nuestro ejemplo:
(X)(Y){ [ p(X) p(Y) p(f(X,Y))] [ p(X) q(X, g(X)) ]
[ p(X) p(g(X))]}
[ p(X) p(Y) p(f(X,Y))] [ p(X) q(X, g(X)) ] [ p(X) p(g(X))]
Programación Lógica
8. Eliminar los conectores conjuntivos (AND). Dado que la fómula se corresponde con una conjunción de subfómulas, éstas deberán verificarse por separado para que se verifique la fórmula principal.
Esto produce, en nuestro caso, el siguiente conjunto de fórmulas:
[ p(X) p(Y) p(f(X,Y))] [ p(X) q(X, g(X)) ] [ p(X) p(g(X))]
p(X) p(Y) p(f(X,Y)) p(X) q(X, g(X)) p(X) p(g(X))
Programación Lógica
9. Renombrar las variables. para que no aparezca la misma variable en dos cláusulas.
p(X) p(Y) p(f(X,Y)) p(X) q(X, g(X)) p(X) p(g(X))
p(X) p(Y) p(f(X,Y)) p(U) q(U, g(U)) p(W) p(g(W))
------ * * * ------
Mediante este proceso se termina en una representación en forma de cláusulas. Así de una una única fórmula pueden resultar varias cláusulas que son más modulares y de estructura más simple.
Programación Lógica
A. hombre(marco)
B. pompeyano(marco)
C. (X)(pompeyano(X) romano(X))
D. dirigente(césar)
E. (X)(romano(X) leal(X,césar) odia(X,césar))
F. (X)(hombre(X) (Y) leal(X,Y)
G. (X)(Y) (hombre(X) dirigente(Y)
intenta_asesinar(X,Y) leal(X,Y))
H. intenta_asesinar(marco, césar)
I. (X) (romano(X) odia(X, césar))
Programación Lógica
Proceso de paso a cláusulas
1. Eliminar los símbolos de implicación
A. hombre(marco)
B. pompeyano(marco)
C. (X)( pompeyano(X) romano(X))
D. dirigente(césar)
E. (X)( romano(X) leal(X,césar) odia(X,césar))
F. (X)( hombre(X) (Y) leal(X,Y)
G. (X){ (Y) (hombre(X) dirigente(Y) intenta_asesinar(X,Y)
leal(X,Y)) }
H. intenta_asesinar(marco, césar)
I. (X) (romano(X) odia(X, césar))
Programación Lógica
Proceso de paso a cláusulas
2. Mover las negaciones hasta las fórmulas atómicas
A. hombre(marco)
B. pompeyano(marco)
C. (X)( pompeyano(X) romano(X))
D. dirigente(césar)
E. (X)( romano(X) leal(X,césar) odia(X,césar))
F. (X)( hombre(X) (Y) leal(X,Y)
G. (X)(Y)
( hombre(X) dirigente(Y) intenta_asesinar(X,Y) leal(X,Y))
H. intenta_asesinar(marco, césar)
I. (X) (romano(X) odia(X, césar))
3.Renombrar las variables
Programación Lógica
Proceso de paso a cláusulas
4. Eliminar los cuantificadores existenciales
A. hombre(marco)
B. pompeyano(marco)
C. (X)( pompeyano(X) romano(X))
D. dirigente(césar)
E. (X)( romano(X) leal(X,césar) odia(X,césar))
F. (X)( hombre(X) leal(X, g(X))
G. (X)(Y)
( hombre(X) dirigente(Y) intenta_asesinar(X,Y) leal(X,Y))
H. intenta_asesinar(marco, césar)
I. romano(f) odia(f, césar))
Programación Lógica
Proceso de paso a cláusulas
5. Desplazar los cuantificadores universales6. Convertir los operadores AND en los más externos
A. hombre(marco)
B. pompeyano(marco)
C. (X)( pompeyano(X) romano(X))
D. dirigente(césar)
E. (X)( romano(X) leal(X,césar) odia(X,césar))
F. (X)( hombre(X) leal(X, g(X))
G. (X)(Y)
( hombre(X) dirigente(Y) intenta_asesinar(X,Y) leal(X,Y))
H. intenta_asesinar(marco, césar)
I. romano(f) odia(f, césar))
Programación Lógica
Proceso de paso a cláusulas
7. Eliminar los cuantificadores universales
A. hombre(marco)
B. pompeyano(marco)
C. pompeyano(X) romano(X)
D. dirigente(césar)
E. romano(X) leal(X,césar) odia(X,césar)
F. hombre(X) leal(X, g(X))
G. hombre(X) dirigente(Y) intenta_asesinar(X,Y) leal(X,Y)
H. intenta_asesinar(marco, césar)
I. romano(f) odia(f, césar))
Programación Lógica
Proceso de paso a cláusulas
8. Eliminar los conectores AND
A. hombre(marco)
B. pompeyano(marco)
C. pompeyano(X) romano(X)
D. dirigente(césar)
E. romano(X) leal(X,césar) odia(X,césar)
F. hombre(X) leal(X, g(X))
G. hombre(X) dirigente(Y) intenta_asesinar(X,Y) leal(X,Y)
H. intenta_asesinar(marco, césar)
I1. romano(f)
I2. odia(f, césar))
Programación Lógica
Proceso de paso a cláusulas
9. Renombrar las variables
A. hombre(marco)
B. pompeyano(marco)
C. pompeyano(X) romano(X)
D. dirigente(césar)
E. romano(Y) leal(Y,césar) odia(Y,césar)
F. hombre(Z) leal(Z, g(Z)
G. hombre(W) dirigente(K) intenta_asesinar(W,K) leal(W,K)
H. intenta_asesinar(marco, césar)
I1. romano(f)
I2. odia(f, césar))
Actividad de trabajo Actividad de trabajo Independiente:Independiente:
Explique y desarrolle: