Programación Lógica y FuncionalUNIDAD 4 Fundamentos de la programación lógica 4.1. Repaso de la lógica de primer orden. 4.2. Unificación y resolución. 4.3. Cláusulas de Horn. Resolución SLD. 4.4. Programación lógica con cláusulas de Horn. 4.5. Semántica de los programas lógicos. 4.6. Representación clausada del conocimiento. 4.7. Consulta de una base de cláusulas 4.8. Espacios de búsqueda. 4.9. Programación lógica con números, listas y árboles. 4.10. Control de búsqueda en programas lógicos 4.11. Manipulación de términos. Predicados metalógicos. Fundamentos de la programación lógica Pág. 1 Puede servir para hacer política ("Mi padre fue conservador. Se dice que los predicados se evalúan a cierto o falso. pero sospecho que el suyo fue asaltador de caminos. o Se lee "logaritmo neperiano de 2" y "esposa de Pepe". porque esa persona no acepta alguna suposición implítica en la pregunta: "¿Cuándo mató a su madre?" "¡Pero si mamá vive!" "¡Responda la pregunta!". implemente es la forma correcta de decir que algo se contradice a sí mismo: El caballo de Santiago es blanco y negro. FUNCION. pero no son razonamientos válidos en lógica. Por ejemplo: "x > 2". La palabra no tienen ninguna connotación insultante. "esposa (Pepe)" se evalúa a Maruja. ese razonamiento no es válido como razonamiento lógico. Capcioso. Un tipo de función.. Una cosa que se evalúa de algún modo. Falacia. o Si la esposa de Pepe es Maruja. Una falacia es un error lógico en un razonamiento. Cuando un razonamiento contiene una falacia. osea una "frase" que puede ser cierta o falsa. Repaso de la lógica de primer orden. lo que en lenguaje normal decimos "ser" verdadero o falso. "Pepe lleva un sombrero". que se evalúa a cierto o falso. Más sobre falacias en el excelente artículo de la Red Atea sobre lógica y falacias (o en cualquier buen manual de lógica). Pág. Indica las preguntas que la persona que debe responderlas no puede responder. y por tanto yo lo soy.. Una contradicción. PREDICADO. Por ejemplo: "logaritmo (2)" o "esposa (Pepe)".1.Programación Lógica y Funcional 4. Otra palabra que no pretende ser insultante."). 2 . Hay menos y más de dos manzanas en el cesto. podemos combinar ambas clausulas y obtener: invierno verano invierno frio Ahora podemos hacer una simplificación. El Método de Resolución es un intento de mecanizar el proceso de deducción natural de forma eficiente. en una cláusula en forma positiva y en la Pág. dos cláusulas llamadas cláusulas padres y producimos una nueva cláusula que se ha inferido (deducido). primaria y lineal.Programación Lógica y Funcional Fundamentos de la programación lógica 4. unitaria. Unificación y resolución. 3 . supongamos que tenemos las clausulas siguientes (ambas verdaderas): invierno verano (es invierno o es verano) invierno frio (hace frio o no es invierno) Aplicando resolución. de ellas. Para probar una sentencia basta con demostrar que su negación nos lleva a una contradicción con las sentencias conocidas (es insatisfactible). EJEMPLO Por ejemplo. es decir lo que se intenta es encontrar contradicciones.2. ALGORITMO DE RESOLUCION Existen distintas Estrategias de Resolución: sistemática. El procedimiento de resolución consiste en un proceso iterativo en el cual comparamos (resolvemos). ya que (invierno invierno) es una tautología. con lo que nos queda: verano frio (es verano o hace frio) La resolución opera tomando dos cláusulas tales que cada una contenga un mismo literal. con conjunto soporte. Las demostraciones se consiguen utilizando el método refutativo (reducción al absurdo). Si es así. El resolvente se obtiene combinando todos los literales de las cláusulas padres y eliminando aquellos que se cancelan. 4. ALGORITMO DE UNIFICACION Podemos definir la Unificación como un procedimiento de emparejamiento que compara dos literales y descubre si existe un conjunto de sustituciones que los haga idénticos. continuamos con el siguiente. La única condición que debe reunir esta sustitución es que ha de aplicarse a todo el literal.. Para conseguir que cada argumento de un literal sea coincidente con su homólogo en el otro literal. si no es que no son unificables. debemos buscar una sustitución que nos permita emparejarlos. z) P (z. z) La sustitución resultante es la composición de las sustituciones: s = { z/y . 3. es decir. Si el predicado concuerda. En primer lugar se comprueba si los predicados coinciden. Ejemplo Se unificara P(x. y así hasta completar todos los argumentos. z) Segunda sustitución: (z/y) Resultado: P(z. ALGORITMO 1.. y) P(y. que la sustitución afecta a todo el literal. y no sólo al argumento en cuestión. seguimos adelante.Programación Lógica y Funcional otra en forma negativa. x) con P(y. Si el primero de ellos coincide en ambos literales. 2. z): Primera sustitución: (y/x) Resultado: P(y. comenzamos a comparar los argumentos. 4 . y/x} Pág. el primero en señalar la importancia de estas cláusulas en 1951. Pág. 5 ... Una cláusula de Horn con exactamente un literal positivo es una cláusula "definite". Hay dos tipos: Las cláusulas determinadas (definite clauses). que representan «hechos». pk q) Caso particular son las no tienen más que ese literal positivo. Los objetivos determinados (definite goals).. en álgebra universal las cláusulas "definites" resultan como cuasi-identidades. es decir. ¬pk q) (p1 p2 . una fórmula lógica es una cláusula de Horn si es una cláusula (disyunción de literales) con.3.. pk) RESOLUCION SLD La resolución general es un mecanismo muy potente de demostración pero tiene un alto grado de indeterminismo: en la selección de las clausulas con las que hacer resolución y en la selección de los literales a utilizar en la resolución.Programación Lógica y Funcional Fundamentos de la programación lógica 4. Se llaman así por el lógico Alfred Horn. Resolución SLD. especialmente en programación lógica. EJEMPLOS Se llaman cláusulas de Horn aquellas que tienen como máximo un literal positivo.. En lógica proposicional. un literal positivo. conocimiento factual. o «cláusulas de Horn con cabeza» son las que sólo tienen un literal positivo: (¬p1 ¬p2 . como máximo. ¬pk) ¬(p1 p2 . Cláusulas de Horn. Una cláusula de Horn sin ningún literal positivo es a veces llamada cláusula objetivo (goal) o consulta (query). o «cláusulas de Horn sin cabeza» son las que no tienen ningún literal positivo: (¬p1 ¬p2 .... Así pues la definición de un predicado en general tendrá el aspecto: Pág. REGLAS Un hecho es una regla con cuerpo vacío un objetivo es una regla con cabeza vacía y el éxito es una regla con cabeza y cuerpo vacíos. relaciones elementales entre estos objetos las reglas expresan relaciones condicionales entre los objetos. EJEMPLO Un predicado p queda definido por el conjunto de cláusulas (hechos y reglas) cuyas cabezas tienen ese símbolo de predicado. 6 .Programación Lógica y Funcional Los hechos y las reglas se denominan clausulas definidas: Los hechos representan “hechos acerca de los objetos” (de nuestro universo de discurso). dependencias. En las cláusulas de Horn se trabaja con secuencias de literales en vez de conjuntos Esto implica dos cosas: los literales pueden aparecer repetidos en el cuerpo hay un orden en los literales del cuerpo. P11(x) Tipo II: una implicación (llamada regla) cuyo antecedente consiste de una conjunción de literales positivos y el consecuente es sólo un literal positivo: L1^L2…^Ln-1 Ln donde las L son literales positivos.Programación Lógica y Funcional Fundamentos de la programación lógica 4.-Ln-1 vLn . Ln} Y es equivalente a: L1. Programación lógica con cláusulas de Horn.-Ln-1.Ln-1 Ln (las comas son conjunciones) Pág. El lenguaje de programación Prolog. 7 . La aplicación de refutación por resolución en cláusulas de Horn es un mecanismo ampliamente utilizado. se escribe así: -L1v-L2v….…. siendo las L literales. Lo cual pude notarse como conjunto: {-L1. Una cláusula de Horn notada como disyunción finita de literales.4.-L2. se basa en este tipo de cláusulas y los programas implementados en él se denominan programas lógicos definidos. L2…Ln La notación utilizando implicación es la preferida para escribir cláusulas de Horn y resulta equivalente a la notación utilizando la disyunción de literales. Tenemos tres tipos de cláusulas de Horn Tipo I: un átomo simple (hecho) ej.….Ln-1 Ln . Tipo III: Un conjunto de literales negados..….L2. que puede notarse como una implicación sin consecuente L1.L2. Muchas veces se nota: L1. 5.vAn v-B1 v…. etc. se conoce como semántica al estudio del significado de los signos lingüísticos y de sus combinaciones. por otra parte. Se trata de aquello perteneciente o relativo a la significación de las palabras.^Bn A1.v-Bn equivale a B1^. Pág. los predicados y las reglas. 8 . La equivalencia es directa. por otra parte. los predicados y las reglas.v…v An Fundamentos de la programación lógica 4. Semántica de los programas lógicos. cuantificados.). Por extensión. Para esto estudia los signos (paréntesis. Semántica proviene de un vocablo griego que puede traducirse como “significativo”. se encarga del análisis de los problemas lógicos de significación. La semántica lógica.). las variables y constantes.Programación Lógica y Funcional EJEMPLO En general cualquier cláusula puede escribirse como implicación. Para esto estudia los signos (paréntesis. las variables y constantes. etc. si tenemos una cláusula de la forma A1 v…. La semántica lógica. CARACTERISTICAS • Una tarea de la semántica es investigar las CONDICIONES DE VERDAD de los enunciados • La semántica formal se ocupa únicamente de los aspectos formales o estructurales de las condiciones de verdad • Un enunciado complejo será verdadero o falso en función de la forma en que estén dispuestos los enunciados simples que lo componen • Esta forma viene dada por la disposición de las conectivas dentro del enunciado. dando lugar a lo que se conoce como forma normal conjuntiva. se encarga del análisis de los problemas lógicos de significación. cuantificados... Alternativas para capturar la semántica de los programas lógicos. • Semántica Operacional • Semántica Declarativa • Semántica de Punto Fijo Pág.Programación Lógica y Funcional Ejemplo La semántica operacional de los programas lógicos está basada en el método de resolución de Robinson. restringe en algunos casos la aplicabilidad de la Programación en Lógica. 9 . aplicado a cláusulas de Horn. a pesar de las ventajas teóricas y prácticas que trae consigo. Esto supone una limitación tanto sintáctica como semántica que. para representaciones compuestas por objetos explícitos y de afirmaciones sobre ellos. 10 . y en particular. Pág. Desplazar las disyunciones hacia el interior de la sentencia (sobre las conjunciones y cuantificadores) hasta quedar conectando únicamente literales.Programación Lógica y Funcional Fundamentos de la programación lógica 4. Desplazar Disyunciones: para desplazar las disyunciones al interior de las sentencias de tal forma que conecten literales (átomos o átomos negados) Eliminación de cuantificadores existenciales: La eliminación de un cuantificador existencial introduce una sentencia que no es equivalente. que implica la sentencia original pero no es implicada por esta.6. Representación clausada del conocimiento. Representar el conocimiento en una forma explícita como esta permite a los ordenadores sacar conclusiones de conocimiento previamente almacenado. El pasaje a forma clausal se puede realizar aplicando cinco reglas: Eliminar implicaciones. disyunciones y cuantificadores) hasta quedar delante de fórmulas atómicas. desplazar negaciones hacia interior de la sentencia (sobre las conjunciones. Representación del conocimiento es un término comúnmente usado para referirse a representaciones pensadas para el procesamiento por ordenadores modernos. • Rápidos y computables: Se puede almacenar y recuperar la información con rapidez. y se pueden crear mediante un procedimiento ya existente.Programación Lógica y Funcional Expresar las disyunciones como cláusulas (en forma norma conjuntiva). • Completa y concisa: Están representados con eficacia todos los objetos y relaciones. clausulaN Las cláusulas son términos (como todo en Prolog) con el siguiente formato: Pág. maría).. 11 .. Una secuencia de cláusulas que definen un predicado se denomina procedimiento.7. Consulta de una base de cláusulas Las cláusulas contienen la especificación o implementación del conjunto de hechos y reglas que componen el programa. • Partes de una representación: • Parte léxica: Determina qué símbolos están permitidos en el vocabulario de la representación. clausula1 Clausula2 . Dicha sección se encabeza con la palabra CLAUSES Una cláusula puede ser: Un hecho: por ejemplo padre (Juan. CARACTERISTICAS • Los objetos y las relaciones importantes deben aparecer explícitamente y de forma conjunta • Las restricciones inherentes al problema se muestran pero no los detalles irrelevantes. Fundamentos de la programación lógica 4. • La representación debe ser transparente: se entiende lo que se dice. Programación Lógica y Funcional cabeza :. Cada punto en el espacio de búsqueda representa una posible solución. Recuerde que el ámbito de visibilidad de las variables es una única cláusula..ojetivo1.8. Pág.. ojetivoN. Cuando se resuelve un problema. 12 . Cada posible solución se le puede asociar un fitness o un valor que indicará cómo de buena es la solución para el problema. Todo gira en torno al operador ":-". Las soluciones que encuentran estos tipos de búsqueda suelen ser buenas soluciones. Fundamentos de la programación lógica 4. Es decir. Algunos de estos métodos son los algoritmos de escalada. pero no necesariamente obtienen la mejor solución. ojetivo2. p (X. Espacios de búsqueda. todas las cláusulas de un mismo predicado tienen en la cabeza un término con el mismo functor y aridad. El cuerpo no es más que el conjunto de condiciones que deben cumplirse (tener éxito) para que el predicado tenga éxito si lo invocamos con un objetivo que unifique con la cabeza. Al conjunto de todas las posibles soluciones a un problema concreto se llama espacio de búsqueda. pero no siempre encuentran la óptima. Un algoritmo genético (AG) devolverá la mejor solución de entre todas las posibles que tenga en un momento dado. Existen muchos métodos que se usan para buscar una solución válida. Por ejemplo.. 12) podría ser la cabeza de una cláusula del predicado p/2. aunque los argumentos pueden ser distintos. Lo que aparece a la izquierda se denomina cabeza y la secuencia de objetivos que aparece a la derecha se denomina cuerpo. entonces son variables diferentes pero con el mismo nombre. se busca la mejor solución entre un conjunto de posibles soluciones. búsqueda a ciegas y los algoritmos genéticos. backtracking o vuelta atrás. Si una misma variable aparece en dos cláusulas diferentes. La cabeza es un término simple. . etiquetada con la cuestión Q o primer resolvente.Y is X+1. se tiene el predicado is. los distintos cálculos posibles para un programa constituido por una cuestión Q y una base de conocimiento P se pueden representar gráficamente mediante un árbol de búsqueda caracterizado por: su raíz. Y): .Y = X+1.9. En el caso de los algoritmos de búsqueda.Programación Lógica y Funcional En optimización. Numéricos En PROLOG los objetos numéricos pueden corresponder a tipos integer o float de C. además para cada nodo etiquetado con un resolvente no vacío. espacio de búsqueda se refiere al dominio de la función a ser optimizada. Pág. los nodos etiquetados con resolventes vacíos no tienen descendientes. se refiere al conjunto de todas las posibles soluciones candidatas a un problema. Xmasuno (X. Fijada una regla de cálculo. Las distintas reglas de búsqueda representan distintas formas de recorrido de los árboles de búsqueda. que se comporta como una asignación en un lenguaje imperativo. Para realizar operaciones numéricas. listas y árboles. existirán tantos descendientes como cláusulas con cabecera coincidente con A existan en el procedimiento de definición del correspondiente predicado. Así. Fundamentos de la programación lógica 4. 13 . y los demás nodos etiquetados con los resolventes producidos por pasos de resolución. que manejan espacios discretos. si A es la fórmula que selecciona la regla de cálculo. EJEMPLO si definimos: Masuno(X. el objetivo X is <expresión> será verdadero cuando X unifique con el resultado numérico de evaluar <expresión>. Y): . Programación lógica con números. . Es en cierto sentido un predicado impuro (ajeno a la lógica) pero es un predicado muy útil.10. Fundamentos de la programación lógica 4. . casi fundamental para el programador de programación lógica.Programación Lógica y Funcional Observaremos el siguiente comportamiento: ?. ¿Cómo opera el corte? Cuando se resuelve un objetivo p con una clausula de la forma: Pág.5) No Lista Este algoritmo es my ineficiente en el peor caso tendrá que generar las N! permutaciones para una lista de largo N. . . Se representan utilizando términos compuestos f(t1.5). Yes ?.xmasuno(4. 14 . tn) (para los naturales ya hemos utilizado una estructura de datos s(_)). . Control de búsqueda en programas lógicos El predicado ! (leído corte) proporciona control sobre el mecanismo de backtracking de programación lógica: siempre tiene éxito pero tiene el efecto lateral de podar todas las elecciones alternativas en el nodo correspondiente en el árbol de búsqueda. Este es un predicado meta-lógico o extra-lógico: es un predicado que afecta al comportamiento operacional de programación lógica.masuno (. . El operador \==/ es la negación del operador anterior y se satisface cuando sus operandos son términos literalmente diferentes: ?. rm Programación lógica intenta resolver los objetivosq1. incLst2( [ X| Xs] .X = Y. la diferencia con = es que == no fuerza unificación.integer( X) . Manipulación de términos. [ X| Ys] ) : . …. f(X) \== f (Y). Predicados metalógicos El primer mecanismo es el = que usamos para unificar términos. [ Y| Ys] ) : . ….11. qn !. Ys) . No ?.incLst2( Xs. El operador ==/2 y se satisface cuando sus dos operando son términos literalmente iguales. EJEMPLO El corte en ejemplos (I) En la página ?? definíamos un predicado para incrementar en 1 los enteros de una lista (dejando intactos los no enteros): incLst2( [ ] . No Pág. qn normalmente (haciendo backtraking sobre cada uno de ellos si es necesario).f(X) == f (Y). ! . 15 . …. Y is X+1. Fundamentos de la programación lógica 4. incLst2( Xs. incLst2( [ X| Xs] . r1.q1.Programación Lógica y Funcional P: . Ys) . [ ] ) . call (Menor). fail. ejemplo: Masuno (X. ordC ([Y|L].Programación Lógica y Funcional Existen operadores para el chequeo de tipos de términos. Pág. ordC ([X. 16 . Criterio). Criterio) : Menor =._). Y | L]. Write(‘primer argumento no instanciado!!’). X. se pueden usar para manejo de errores. !.. el predicado var/1 se satisface cuando su argumento es una variable no unificada. El siguiente predicado determina si cierta lista esta ordenada según algún criterio que no se conoce a priori: ordC ([_]. Y].var (X). write (‘ERROR:’). [Criterio. nonvar/1 es su negación. La construcción sirve para pasar nombres de predicados como argumentos.Y) :.