35
Modificado y Adaptado por: LEONARDO BERNAL ZAMORA

Fbf

Embed Size (px)

Citation preview

Page 1: Fbf

Modificado y Adaptado por: LEONARDO BERNAL ZAMORA

Page 2: Fbf

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) ]

Page 3: Fbf

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

Page 4: Fbf

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:

Page 5: Fbf

El Modus Ponens o razonamiento directo

Page 6: Fbf

El Modus Tollens o razonamiento indirecto

Page 7: Fbf
Page 8: Fbf

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.

Page 9: Fbf

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.

Page 10: Fbf

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))

Page 11: Fbf

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 ...

Page 12: Fbf

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.

Page 13: Fbf

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.

Page 14: 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

Page 15: Fbf

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.

Page 16: Fbf

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.

Page 17: Fbf

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)]}}

Page 18: Fbf

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)]}}

Page 19: Fbf

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)]}}

Page 20: Fbf

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.

Page 21: Fbf

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.

Page 22: Fbf

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:

Page 23: Fbf

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))]}

Page 24: Fbf

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))]

Page 25: Fbf

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))

Page 26: Fbf

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.

Page 27: Fbf

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))

Page 28: Fbf

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))

Page 29: Fbf

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

Page 30: Fbf

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))

Page 31: Fbf

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))

Page 32: Fbf

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))

Page 33: Fbf

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))

Page 34: Fbf

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))

Page 35: Fbf

Actividad de trabajo Actividad de trabajo Independiente:Independiente:

Explique y desarrolle: