SlideShare una empresa de Scribd logo
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    q Axioma:  p Teorema: 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    q Axioma:  ¬q Teorema: ¬p Y - Introducción:  la fbf p  q puede ser inferida de las fbf p y q. Y- Eliminación:  la fbf p puede ser inferida de la fbf p  q. 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: a 1     a 2     ...    a n      b 1     b 2     ...    b m se puede transformar en :   ¬(¬ a 1     ¬ a 2     ...    ¬ a n  )     b 1     b 2     ...    b m   ¬ a 1     ¬ a 2     ...    ¬ a n     b 1     b 2     ...    b m
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.   a 1     a 2     ...    a n     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: 1.  Eliminar los símbolos de implicación   2.  Mover las negaciones hasta las fórmulas atómicas   3.  Renombrar variables 4.  Eliminar los cuantificadores existenciales. 5.  Desplazar los cuantificadores universales   6.  Convertir los operadores AND en los más externos 7.  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 universales 6. 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 Independiente: Explique y desarrolle:

Más contenido relacionado

DOCX
espacios vectoriales
PPTX
7 aproximacion de funciones
PDF
Electrostatica resueltos
PDF
Flujo eléctrico
PPT
Limites Racionales
PPT
Trabajo y Energia
PPTX
Derivadas Parciales
PDF
TRANSFORMADA INVERSA DE LAPLACE.pdf
espacios vectoriales
7 aproximacion de funciones
Electrostatica resueltos
Flujo eléctrico
Limites Racionales
Trabajo y Energia
Derivadas Parciales
TRANSFORMADA INVERSA DE LAPLACE.pdf

La actualidad más candente (20)

DOCX
CALORIMETRÍA
PPTX
Aplicaciones del cálculo a la ingeniería
PPT
Equilibrio del cuerpo rigido
DOCX
Circuitos Logicos
PPTX
Constante de integración
PPT
OPERACIONES LÓGICAS: Práctica
PDF
Herramientas informáticas para el ingeniero industrial
PDF
Ejercicios propuestos Electrostática
PPT
Mecanica
PDF
Series de fourier 22 Ejercicios Resueltos
PDF
Segunda ley de la termodinamica
PDF
Libro de fisica general volumen iii (electricidad y magnetismo) carlos jo o...
PPTX
Subespacio vectorial
PPTX
4- Cálculo en varias variables (para Matemáticas de Bioquímica)
PDF
Balance de energía. Sistemas abiertos, cerrados y en una superficie.pdf
PDF
Tabla laplace
PDF
Cap 1 logica
PPTX
MODELOS MATEMÁTICOS ÁLGEBRA LINEAL. Presentación diseñada por el MTRO. JAVIER...
PDF
Solucionario de ejercicios y problemas de ecuaciones diferenciales ordinarias...
PDF
Ejercicio 1 diagrama de flujo
CALORIMETRÍA
Aplicaciones del cálculo a la ingeniería
Equilibrio del cuerpo rigido
Circuitos Logicos
Constante de integración
OPERACIONES LÓGICAS: Práctica
Herramientas informáticas para el ingeniero industrial
Ejercicios propuestos Electrostática
Mecanica
Series de fourier 22 Ejercicios Resueltos
Segunda ley de la termodinamica
Libro de fisica general volumen iii (electricidad y magnetismo) carlos jo o...
Subespacio vectorial
4- Cálculo en varias variables (para Matemáticas de Bioquímica)
Balance de energía. Sistemas abiertos, cerrados y en una superficie.pdf
Tabla laplace
Cap 1 logica
MODELOS MATEMÁTICOS ÁLGEBRA LINEAL. Presentación diseñada por el MTRO. JAVIER...
Solucionario de ejercicios y problemas de ecuaciones diferenciales ordinarias...
Ejercicio 1 diagrama de flujo
Publicidad

Destacado (14)

PDF
LMF-T1: Sintaxis y semántica de la lógica proposicional
DOC
Logica
PPSX
PDF
DETALLES DE CONCRETO ARMADO
PPT
Logica matematica experiencia 2
PPT
La reducción al absurdo
DOC
PPT
Lenguajes de Programacion
PDF
Practicas prolog
PDF
Reglas y leyes lógica
PPTX
LOS HOMOPOLISACARIDOS Y HETEROPOLISACARIDOS
PPTX
Cálculo VLSM y subredes
PDF
Leyes De Lógica
LMF-T1: Sintaxis y semántica de la lógica proposicional
Logica
DETALLES DE CONCRETO ARMADO
Logica matematica experiencia 2
La reducción al absurdo
Lenguajes de Programacion
Practicas prolog
Reglas y leyes lógica
LOS HOMOPOLISACARIDOS Y HETEROPOLISACARIDOS
Cálculo VLSM y subredes
Leyes De Lógica
Publicidad

Similar a Fbf (20)

PPSX
Calculo de predicados
PDF
logica documento de respaldo en caso de formateo.pdf
PDF
logica documento de respaldo en caso de formateo.pdf
PDF
Lgica de predicados y sistemas formales
PDF
LOGICA
DOCX
Revista análisis numerico 1
PPTX
derivadas_2024_1. UN CAMINO PARA RECORDAR
PDF
LI2011-T7: Deducción natural en lógica de primer orden
PDF
Teoría de la Interpolación
PPTX
POLINOMIOS INTERPOLADORES
PDF
PPTX
Analisis numerico
PPTX
Polinomios interpolantes
PPT
Ecuaciones y sist de ecuaciones no lineales
PPTX
PDF
Es una función vital de los seres humanos y es fundamental para mantener la s...
PDF
220 derivadas parcialessegundaspolinomiostaylor
PPT
Deduccion predicados
DOCX
Teoría de Interpolación
Calculo de predicados
logica documento de respaldo en caso de formateo.pdf
logica documento de respaldo en caso de formateo.pdf
Lgica de predicados y sistemas formales
LOGICA
Revista análisis numerico 1
derivadas_2024_1. UN CAMINO PARA RECORDAR
LI2011-T7: Deducción natural en lógica de primer orden
Teoría de la Interpolación
POLINOMIOS INTERPOLADORES
Analisis numerico
Polinomios interpolantes
Ecuaciones y sist de ecuaciones no lineales
Es una función vital de los seres humanos y es fundamental para mantener la s...
220 derivadas parcialessegundaspolinomiostaylor
Deduccion predicados
Teoría de Interpolación

Más de Leonardo Bernal Zamora: Docente, Internauta y convencido de la educación para todos (20)

PPTX

Fbf

  • 1. Modificado y Adaptado por: LEONARDO BERNAL ZAMORA
  • 2. 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) ]
  • 3. 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  q Axioma: p Teorema: q
  • 4. 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  q Axioma: ¬q Teorema: ¬p Y - Introducción: la fbf p  q puede ser inferida de las fbf p y q. Y- Eliminación: la fbf p puede ser inferida de la fbf p  q. O - Introducción: la fbf p  q puede ser inferida de la fbf p o de la fbf q. Reglas de Inferencia:
  • 5. El Modus Ponens o razonamiento directo
  • 6. El Modus Tollens o razonamiento indirecto
  • 7.  
  • 8. 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.
  • 9. 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.
  • 10. 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))
  • 11. 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 ...
  • 12. 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.
  • 13. 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.
  • 14. 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: a 1  a 2  ...  a n  b 1  b 2  ...  b m se puede transformar en : ¬(¬ a 1  ¬ a 2  ...  ¬ a n )  b 1  b 2  ...  b m ¬ a 1  ¬ a 2  ...  ¬ a n  b 1  b 2  ...  b m
  • 15. 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. a 1  a 2  ...  a n  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.
  • 16. Programación Lógica 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 variables 4. Eliminar los cuantificadores existenciales. 5. Desplazar los cuantificadores universales 6. Convertir los operadores AND en los más externos 7. Eliminar los cuantificadores universales. 8. Eliminar los conectores conjuntivos (AND). 9. Renombrar las variables.
  • 17. 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)]}}
  • 18. 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)]}}
  • 19. 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)]}}
  • 20. 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.
  • 21. 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.
  • 22. 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:
  • 23. 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))]}
  • 24. 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))]
  • 25. 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))
  • 26. 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.
  • 27. 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))
  • 28. 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))
  • 29. 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
  • 30. 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))
  • 31. Programación Lógica Proceso de paso a cláusulas 5. Desplazar los cuantificadores universales 6. 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))
  • 32. 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))
  • 33. 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))
  • 34. 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))
  • 35. Actividad de trabajo Independiente: Explique y desarrolle: