Programación Lógica - Hoja 1 1. Convertir a forma normal clausal las siguientes fórmulas: (a) ∀X(p(X) → (∀Y (r(Y ) → m(Y, X))) ∨ (∀Y (r(Y ) → ¬m(Y, X)))) (b) ∀X∀Y (p(X, Y ) → q(X, Y )) (c) ∀X∀Y (¬q(X, Y ) → ¬p(X, Y )) (d) ∀X∀Y (p(X, Y ) → (q(X, Y ) → r(X, Y )) (e) ∀X(¬(X, 0) → (∃Y (e(Y, g(X)) ∧ ∀Z(e(Z, g(X)) → e(Y, Z))))) 2. Encuentra, si existe, el unificador más general del siguiente conjunto de cláusulas S = {p(f (x), y, u), p(f (y), x, z), p(f (s(u)), s(a), a)} mediante el algoritmo de unificación de Robinson. 3. Dadas las siguientes argumentaciones, se pide realizar para cada una: • Formalizar de la forma más escueta posible. • Pasar las fórmulas a forma normal clausal. • Definir el Universo de Herbrand, la Base de Herbrand y ver su tamaño. • Definir algún modelo de Herbrand para algunas de las clausulas. • Demostrar que la argumentación es correcta mediante resolución SLD si es posible. • Encontrar el mı́nimo conjunto contradictorio de claúsulas básicas que se necesita para demostrar la argumentación. (a) Los protozoos se dividen el pequeños, peludos y suaves. Los naturalistas desprovistos de microscopio solamente observan protozoos grandotes. Algunos naturalistas pobres observan protozoos ásperos. Ningún pobre está provisto de microscopio. LUEGO: No faltan naturalistas que observan protozoos peludos. (b) Todos los perros persiguen gatos. Algunos gatos persiguen perros. Un gato bien educado jamás persigue perros. A los perseguidores de gatos no les gustan los gatos mal educados. LUEGO: Algunos gatos no gustan a ningún perro. (c) Un matemático solo es genial si cuadra cı́rculos. Todos los cuadradores de cı́rculos son locos o tramposos. Una astróloga solo puede alcanzar fama seduciendo a algún matemático genial y cuerdo. LUEGO: Toda astróloga famosa seduce a algún tramposo. 4. Escribe un programa Prolog para evaluar expresiones aritmticas, donde las expresiones pueden ser de la forma: (a) const(n), con n un nmero entero, para representar una constante (b) sum(A, B) para representar la suma de dos expresiones A,B (c) prod(A, B) para representar el producto de dos expresiones A,B El programa debe constar de un predicado evalua para este fin. Ası́ un objetivo como evalua( sum(const(3), prod( const(4), suma(const(0), const(1)))), X). debe devolver como resultado X = 7. 5. Escribir un predicado Prolog para sumar números naturales representados mediante la notación de Peano. 6. Escribir un programa Prolog para multiplicar números naturales representados mediante la notación de Peano (idea: apoyarse en el predicado definido en el apartado anterior). 1