Paradigmas de Lenguajes de Programación 1er Cuatrimestre de 2009 Práctica No 4 - Resolución en Lógica de Primer Orden En esta guı́a, salvo que se haga referencia a SLD, la palabra resolución denota el método de resolución general. Resolución en Lógica Proposicional Ejercicio 1 F Convertir a Forma Normal Conjuntiva las siguientes fórmulas proposicionales: i. p → p ii. (p ∧ q) → p iii. ¬(p ∧ q) → (¬p ∨ ¬q) iv. (p ∨ (¬p → q)) → (p ∨ q) v. (p ∨ q) → p vi. (p ∧ q) ∨ (p ∧ r) Ejercicio 2 F i. Determinar si las fórmulas del ejercicio anterior son tautologı́as utilizando el método de resolución para la lógica proposicional. ii. ¿Se deduce (p ∧ q) de (¬p → q) ∧ (p → q) ∧ (¬p → ¬q)? Contestar utilizando el método de resolución para la lógica proposicional. Ejercicio 3 Considerando las propisiciones “mundo”, “finito”, “limitado”, “chico”, “con miedo”, “arruga”, “humano” y “pañuelo”, expresar adecuadamente en lógica proposicional, y luego en forma normal conjuntiva, lo siguiente: i. El mundo es finito e ilimitado, o limitado. ii. Lo finito, es chico. iii. Lo limitado, es chico. iv. El mundo anda con miedo. v. Quien anda con miedo, arruga. vi. El que arruga es humano o un pañuelo. vii. El mundo es inhumano. Aplicando resolución, concluir que: i. el mundo es chico ii. el mundo es un pañuelo Página 1 de 6 Paradigmas de Lenguajes de Programación 1er Cuatrimestre de 2009 Resolución en Lógica de Primer Orden Ejercicio 4 Convertir a Forma Normal Negada (NNF) las siguiente fórmulas de primer orden: i. ∀x.∀y.(¬Q(x, y) → ¬P (x, y)) ii. ∀x.∀y.((P (x, y) ∧ Q(x, y)) → R(x, y)) iii. ∀x.∃y.(P (x, y) → Q(x, y)) Ejercicio 5 F Convertir a Forma Normal de Skolem y luego a Forma Clausal las siguientes fórmulas de primer orden: i. ∃x.∃y.x < y ii. ∀x.∃y.x < y iii. ∀x.(¬P (x) ∨ ∃y.(P (y) ∧ Q(y))) iv. ∃x.∀y.(P (x, y) ∧ Q(x) ∧ ¬R(y)) v. ∀x.(P (x) ∧ ∃y.(Q(y) ∨ ∀z.∃w.(P (z) ∧ ¬Q(w)))) Ejercicio 6 Escribir en lógica de primer orden y luego convertir a Forma Clausal los siguientes enunciados expresados en lenguaje natural: i. Todo conjunto no vacı́o de números naturales tiene un elemento mı́nimo. Utilizar los siguientes predicados: N (x) para expresar que x es un número natural, C(x) para x es conjunto, x ∈ y para x pertenece a y y x ≤ y para x menor o igual a y. ii. Un dragón es feliz si todas sus crı́as pueden volar. Los dragones verdes pueden volar. Un dragón es verde si al menos uno de sus progenitores es verde, y es rosa en cualquier otro caso. Utilizar los siguientes predicados: D(x) para expresar que x es un dragón, P (x, y) para x es el progenitor de y, F (x) para x es feliz, V (x) para indicar que x puede volar, V E(x) para x es verde y R(x) para x es rosa. Ejercicio 7 Convertir las siguientes fórmula a forma prenexa sin pasar a NNF y utilizando las equivalencias adicionales a aquéllas vistas en clase: i. ¬(∃x)A ⇐⇒ (∀x)¬A ii. ¬(∀x)A ⇐⇒ (∃x)¬A iii. [¬(∃x)(∀y)P (x, y) ∨ (∀x)Q(x)] ∧ [¬(∀x)A ∨ (∀x)B(x)] iv. ¬(∃x)(∃y)[¬P (x, y) ∨ (∀x)(∀y)P (x, y)] v. (∀x)[¬(∀y)[((∀z)P (x, y, z) ∧ ¬(∃w)Q(x, y, w)) ∨ R(x)] ∨ S(x)] Página 2 de 6 Paradigmas de Lenguajes de Programación 1er Cuatrimestre de 2009 Ejercicio 8 F La computadora de la policı́a registró que el Sr. Smullyan no pagó una multa. Cuando el Sr. Smullyan pagó la multa, la computadora grabó este hecho pero, como el programa tenı́a errores, no borró el hecho que expresaba que no habı́a pagado la multa. A partir de la información almacenada en la computadora, mostrar utilizando resolución que el presidente es un espı́a. Utilizar los siguientes predicados y constantes: P agó(x) para expresar que x pagó su multa, Espı́a(x) para x es un espı́a, smullyan para el Sr. Smullyan y presidente para el presidente. Ejercicio 9 F Determinar para cada uno de los siguientes pares de términos de primer orden si son unificables o no. En cada caso justificar su respuesta exhibiendo una secuencia exitosa o fallida (según el caso) del algoritmo de MartelliMontanari. Asimismo, en caso de que los términos sean unificables indicar el mgu (“most general unifier”). Notación: x, y, z variables; a, b, c constantes; f, g sı́mbolos de función. i. f (x, x, y) y f (a, b, z) ii. f (x) y y iii. f (g(c, y), x)) y f (z, g(z, a)) iv. f (a) y g(y) v. f (x) y x vi. g(x, y) y g(f (y), f (x)) Ejercicio 10 Ejemplos para unificación y resolución. i. La relación entre términos unifica con, ¿es reflexiva? ¿Es simétrica? ¿Es transitiva? ii. ¿Existe algún término t tal que todo término s unifique con él? iii. ¿Cómo aplicarı́a el algoritmo de unificación visto, al problema de determinar si dado un conjunto finito de términos existe un unificador común a todos? iv. Mostrar una cláusula que arroje un resolvente entre ella y ella misma. v. Mostrar dos cláusulas, cada una con no más de dos predicados, que arrojen tres o más resolventes distintos entre ambas. Página 3 de 6 Paradigmas de Lenguajes de Programación 1er Cuatrimestre de 2009 Ejercicio 11 F Determinar si las siguientes fórmulas son lógicamente válidas usando resolución. i. ∃x∀yR(x, y) → ∀y∃xR(x, y) ii. ∀x∃yR(x, y) → ∃y∀xR(x, y) iii. ∃x[P (x) → ∀xP (x)] iv. ∃x[P (x) ∨ P (y)] → [∃xP (x) ∨ ∃xQ(x)] v. ∃x[P (x) ∧ P (y)] → [∃xP (x) ∧ ∃xQ(x)] vi. [∃xP (x) ∧ ∀xQ(x)] → ∃x[P (x) ∧ Q(x)] vii. ∀x∃y∀z∃w[P (x, y) ∨ ¬P (w, z)] viii. ∀x.∀y.∀z.((¬P (f (c)) ∨ ¬P (y) ∨ Q(y)) ∧ P (f (z)) ∧ (¬P (f (f (x))) ∨ ¬Q(f (x)))) Ejercicio 12 Aplicaciones del método de resolución. i. Expresar en forma clausal la regla del modus ponens y mostrar que es válida, usando resolución. ii. Lo mismo para la regla del modus tollens. iii. Lo mismo para la regla de especialización: de ∀xP (x) concluir P (t) cualquiera sea el término t. Ejercicio 13 Cualquiera que sepa leer no es analfabeto. Los delfines son analfabetos. Algunos delfines son inteligentes. Demostrar utilizando resolución que hay quienes son inteligentes pero analfabetos. Utilizar los siguientes predicados: L(x) para expresar que x sabe leer, A(x) para x es analfabeto, D(x) para x es delfı́n e I(x) para x es inteligente. Ejercicio 14 F Dadas las siguientes cláusulas: {P (x), ¬P (x), Q(a)} {P (x), ¬Q(y), ¬R(x, y)} {¬P (x, x, z), ¬Q(x, y), ¬Q(y, z)} {M (1, 2, x)} i. ¿Cuáles son cláusulas de Horn? ii. Indicar qué cláusulas de Horn son hechos y qué cláusulas de Horn son goals. iii. Dar, para cada cláusula, la fórmula de primer orden que le corresponde. Página 4 de 6 Paradigmas de Lenguajes de Programación 1er Cuatrimestre de 2009 Ejercicio 15 F Dadas las siguientes fórmulas en lógica de primer orden: ∀x.(S(x) → ∃y.(T (y) ∧ E(x, y))) ∀x.(W (x) → S(x)) W (a) ∧ D(a) ∀z.(T (z) ∧ ∃y.(D(y) ∧ E(y, z) → M (z))) Determinar si la siguiente fórmula es consecuencia del conjunto anterior utilizando resolución SLD: ∃z.(T (z) ∧ M (z)) Ejercicio 16 F Cualquier robot que puede resolver un problema lógico es inteligente. Todos los robots japoneses pueden resolver todos los problemas lógicos. Existe al menos un problema lógico. Alan es un robot japonés. ¿Quién es inteligente? Encontrarlo utilizando resolución SLD. Utilizar los siguientes predicados y constantes: R(x) para expresar que x es un robot, Res(x, y) para x puede resolver y, P L(x) para x es un problema lógico, I(x) para x es inteligente, J(x) para x es japonés y la constante alan para Alan. Ejercicio 17 F Sean las siguientes cláusulas (en forma clausal), donde suma y par son predicados, suc es una función y cero una constante: 1. {¬suma(x, y, z), suma(x, suc(y), suc(z))} 3. {¬suma(x, x, y), par(y)} 2. {suma(x, cero, x)} Demostrar utilizando resolución que suponiendo (1), (2), (3) se puede probar par(suc(suc(cero))). Si es posible, aplicar resolución SLD, y sino utilizar resolución general. Mostrar en cada aplicación de la regla de resolución la sustitución utilizada. Ejercicio 18 i. Pasar las siguientes fórmulas en lógica de primer orden a forma clausal. a) ∀c(V (c) ∨ ∃e(P (e, c))) b) ¬∃c(V (c) ∧ ∃e(P (e, c))) c) ∀e∀c(P (e, I(c)) ⇔ P (e, c)) ii. A partir de las cláusulas definidas en el punto anterior, ¿puede demostrarse ∀c(V (I(c)) ⇒ V (c)) usando resolución SLD? Si se puede, hacerlo. Si no, demostrarlo usando el método de resolución general. Ejercicio 19 F Dadas las siguientes afirmaciones: Toda persona tiene un contacto en Facebook: ∀x ∃y esContacto(x, y) 1. {esContacto(x, f(x))} Si una persona es contacto de otra, la otra es contacto de la una: ∀x ∀y (esContacto(x, y) → esContacto(y, x)) 2. {¬esContacto(x, y), esContacto(y, x)} Página 5 de 6 Paradigmas de Lenguajes de Programación 1er Cuatrimestre de 2009 i. La siguiente es una demostración de que toda persona es contacto de sı́ misma, es decir, de que ∀x esContacto(x, x) Negando la conclusión: ¬∀x esContacto(x, x) Forma normal negada: ∃x ¬esContacto(x, x) Skolemizando y en forma clausal: 3. {¬esContacto(c, c)} De 1 y 3, con σ = {x ← c, f(x) ← c}: 4. 2 ¿Es correcta? Si no lo es, indicar el o los errores. ii. La siguiente es una demostración de que toda persona es contacto de alguien, es decir, de que ∀y ∃x esContacto(x, y) Negando la conclusión: ¬∀y ∃x esContacto(x, y) Forma normal negada: ∃y ∀x ¬esContacto(x, y) Skolemizando y en forma clausal: 3. {¬esContacto(x, d)} De 2 y 3, con σ = {x ← d, y ← d}: 4. ¬esContacto(d, d) De 1 y 4, con σ = {d ← x, d ← f(x)}: 5. 2 ¿Es correcta? Si no lo es, indicar el o los errores. iii. ¿Puede deducirse de las dos premisas que toda persona es contacto de alguien? En caso afirmativo dar una demostración (puede usarse la del ı́tem anterior), y en caso contrario explicar por qué. Ejercicio 20 F Dadas las siguientes definiciones de Descendiente y Abuelo a partir de la relación Progenitor: ∀x ∀y (Progenitor(x, y) ⇒ Descendiente(y, x)) ∀x ∀y ∀z (Descendiente(x, y) ∧ Descendiente(y, z) ⇒ Descendiente(x, z)) ∀x ∀y (Abuelo(x, y) ⇒ ∃z (Progenitor(x, z) ∧ Progenitor(z, y))) demostrar usando resolución general que los nietos son descendientes; es decir, que ∀x ∀y (Abuelo(x, y) ⇒ Descendiente(y, x)) Ayuda: tratar de aplicar el método a ciegas puede traer problemas. Conviene tener en mente lo que se quiere demostrar. Página 6 de 6