7. Cálculo de predicados (CP) Es una extensión de la lógica proposicional, en que hay términos definidos como constantes o variables, y cuantificadores existenciales (∃) o universales (∀) que definen el alcance de las variables, y hay predicados que se aplican a los términos. El cálculo predicativo de primer orden (first order predicate calculus) es un lenguaje formal con el que se pueden expresar una gran cantidad de afirmaciones. Un lenguaje, como por ejemplo el cálculo predicativo, está definido por su sintaxis. Las expresiones correctas del CP se llaman Fórmulas Bien Formadas (FBF, o en inglés WFF, well-formed formulas). 7.1. Sintaxis y semántica de fórmulas atómicas Los componentes elementales de éste lenguaje son símbolos de: predicados, variables, funciones y constantes. Un símbolo predicativo se usa para representar una relación en un dominio, por medio de lo cual podemos crear Fórmulas Atómicas. Por ejemplo supongamos que queremos expresar el hecho de que alguien escribió algo. Podemos utilizar el símbolo predicativo ESCRIBIR para denotar la relación entre una persona que escribió y el objeto escrito. Podemos construir una simple fórmula atómica usando ESCRIBIR y dos términos denotando al escritor y al objeto escrito. Para representar por ejemplo “Voltaire escribió “Cándido””, podemos usar la simple fórmula atómica: ESCRIBIR(VOLTAIRE, CANDIDO) En esta fórmula atómica, VOLTAIRE y CANDIDO son símbolos constantes. En general las fórmulas atómicas se componen de símbolos, predicados y términos. Un símbolo constante es el tipo de término más sencillo, y se usa para representar objetos del dominio. Estos objetos pueden ser objetos materiales, personas, conceptos, o cualquier cosa que queremos nombrar. Los símbolos variables como x ó y también son términos, y permiten ser indefinido acerca de las referencias. Fórmulas que usan estos símbolos, como ESCRIBIR(x, y), serán revisados más adelante en el contexto de la cuantificación. También podemos componer términos de símbolos de funciones. Símbolos de funciones denotan funciones en el recorrido. Por ejemplo, el símbolo de función padre puede ser usado para mostrar el mapeo entre un individuo y su padre. Podemos utilizar la siguiente fórmula atómica para expresar la oración “la mamá de Juan está casada con el papá de Juan”: CASADOS(padre(JUAN), madre(JUAN)) Se utilizan mayúsculas para indicar símbolos predicativos (Ejs: ESCRIBIR, CASADOS) y constantes (CÁNDIDO, A1, B2). Se utilizan minúsculas para símbolos de funciones (por ejemplo: padre, madre) Para representar una oración del lenguaje corriente por una fórmula atómica, generalmente el predicado se identifica con el verbo de la fase, y los términos con el sujeto u objeto del verbo. Es común tener varias alternativas de representación de oración. Por Ejemplo, la oración “la casa es amarilla” se puede representar por un predicado de un término, como AMARILLO(CASA1), o de dos términos, como COLOR(CASA1, AMARILLO), o de tres términos, como en CARACTERISTICA(COLOR, CASA1, AMARILLO), etc. El diseñador de una representación elige el alfabeto de predicados y términos que usará, y define lo que significa cada uno de ellos. En control de procesos, a una función bien formada (fbf) se le puede dar una interpretación asignando una correspondencia entre los elementos del lenguaje y las relaciones, términos y funciones del dominio. Estas asignaciones definen la semántica del leguaje del cálculo predicativo. Una vez que se ha definido una interpretación para una fórmula atómica, podemos establecer si ella es verdadera o falsa. Por ejemplo: ESCRIBIR(VOLTAIRE, CÁNDIDO) es Verdadero ESCRIBIR(VOLTAIRE, AJEDREZ_COMPUTACIONAL) es Falso 7.2. Conectivos Las fórmulas atómicas pueden combinarse para construir fbfs más complejas usando conectivos tales como “∧”, “∨”, “⇒” y “~”. Por ejemplo: VIVIR(JUAN, CASA1) ∧ COLOR(CASA1, AMARILLO) Las fórmulas que se construyen conectando fórmulas mediante ∧'s se llaman Conjunciones. Toda conjunción de fbfs también es una fbf. Algo similar ocurre con ∨'s, las cuales se denominan Disyunciones. El conectivo "⇒" se usa para representar afirmaciones tipo "si-entonces". Por ejemplo, la oración "si el auto es de Juan, entonces es verde" se puede representar como: DUEÑO(JUAN, AUTO1) ⇒ COLOR(AUTO1, VERDE) ANTECEDENTE CONSECUENTE Nótese que esta implicación viola en ocasiones la noción corriente de implicancia ("de sentido común"), ya que si el antecedente es falso, la implicación siempre es verdadera. Por ejemplo, es verdadera la afirmación "si la luna está hecha de nata, entonces los elefantes pueden volar". El símbolo "~" indica la negación de una fórmula, cuyo resultado es una fbf. 7.3. Cuantificadores Los cuantificadores son elementos para definir el dominio de una función y/o de una fórmula atómica. Entre ellos, los más importantes, y los que veremos en este apunte, son “∀” llamado cuantificador universal, que indica “para todo”, y “ ∃ ” llamado cuantificador existencial, que indica “existe”. Si se coloca el cuantificador universal (∀x) delante de P(x), sólo será verdadera para una interpretación dada si el valor de P(x) es verdadero para todos los valores de x posibles del dominio. Si ponemos el cuantificador existencial ( ∃ x) delante de P(x), la fórmula será verdadera para una interpretación dada si hay al menos un elemento del dominio al que se pueda asignar x, en que la fórmula P(x) sea verdadera. Por ejemplo, la frase "todos los elefantes son grises" puede representarse como: (∀x)[ELEFANTE(x) ⇒ COLOR(x, GRIS)] Aquí se está cuantificando la implicación, y x es la variable cuantificada. El alcance ("scope") del cuantificador es la secuencia de fórmulas sobre la que se aplica. Otro ejemplo. "Hay alguien que escribió Ajedrez computacional", puede ser representada como: ( ∃ x)ESCRIBIR(x, AJEDREZ_COMPUTACIONAL) Cualquier expresión obtenida cuantificando una fbf sobre una variable, también es una fbf. Si una variable en una fbf es cuantificada, se dice que es una Variable Limitada (bound variable). Si no, se dice que es una variable libre (free variable). Las fbf que tienen todas las variables limitadas se denominan Oraciones (o Fórmula Bien Formada Cerrada). Nótese que si hay cuantificadores en una fbf, no será siempre posible encontrar su valor de verdad. Por ejemplo, en (∀x)P(x), si el dominio es infinito, no terminaríamos nunca el proceso de probar que la fbf es verdadera en todos los casos. Esta versión de CP se llama de primer orden porque no permite cuantificación sobre símbolos predicativos o de función. Así, fórmulas como (∀P)P(A) no son fbf en CP de primer orden. 7.4. Propiedades de FBF Usando las fórmulas sintácticas recién descritas informalmente, podemos construir fbf arbitrariamente complejos, como por ejemplo: 1. (∃x){(∀y )[( P( x, y ) ∧ Q( x, y )) ⇒ R( x) ]} 2. ~ (∀q){(∃x[P(x) ∨ R(q)]} Usamos los símbolos “[“, “{“ y “(“ para delimitar o agrupar los componentes de las fbfs, para "mejorar y simplificar su lectura" y eliminar cualquier ambigüedad. Algunos ejemplos que no son fbf son: 1. f [ P(A) ] 2. A∨ ~⇒ (∀ ~) Dada una interpretación, los valores de verdad de una fbf (excepto las reglas que contienen cuantificadores) pueden ser computadas con las reglas antes descritas. Cuando los valores de verdad se obtienen de esta forma, estamos usando un método de tablas de verdad. Por ejemplo, si X1 y X2 son 2 fbfs cualquiera, entonces los valores de verdad de las expresiones compuestas generadas con estas fbfs, están dados por la tabla de verdad (truth table) descrita en la Tabla 7.1. Si los valores de verdad de dos fbf son iguales (para todas las interpretaciones) se dice que son Equivalentes. Tabla 7.1. Tabla de verdad para funciones bien formadas. X1 V F V F X2 V V F F X1 ∨ X2 V V V F X1 ∧ X2 V F F F X1 ⇒ X2 V V F V ~X1 F V F V Usando la tabla de verdad mencionadas en la Tabla 7.1 podemos establecer las siguientes equivalencias: ~ (~ x1) ⇔ x1 x1 ∨ x 2 ⇔ ~ x1 ⇒ x 2 ~ ( x1 ∧ x 2) ⇔ ~ x1∨ ~ x 2 Leyes de De Morgan ~ ( x1 ∨ x 2) ⇔ ~ x1∧ ~ x 2 x1 ∧ (x2 ∨ x3) ⇔ (x1 ∧ x2) ∨ (x1 ∧ x3) Leyes distributivas x1 ∨ (x2 ∧ x3) ⇔ (x1 ∨ x2) ∧ (x1 ∨ x3) x1 ∧ x 2 ⇔ x 2 ∧ x1 Leyes conmutativas x1 ∨ x 2 ⇔ x 2 ∨ x1 (x1 ∧ x2) ∧ x3 ⇔ x1 ∧ (x2 ∧ x3) Leyes asociativas (x1 ∨ x2) ∨ x3 ⇔ x1 ∨ (x2 ∨ x3) x1 ⇒ x 2 ⇔ ~ x 2 ⇒~ x1 Ley " contrapositiva" En cuanto a cuantificadores podemos establecer las siguientes equivalencias: ~ (∃x) P( x) ⇔ (∀x ) [ ~ P ( x)] ~ (∀x ) P( x) ⇔ (∃x ) [ ~ P ( x)] (∀x) P( x) ⇔ (∀y ) P( y ) (*) (∃x ) P ( x ) ⇔ (∃y ) P ( y ) Las propiedades (*) muestran que las variables son arbitrarias y pueden ser reemplazadas por cualquier símbolo que no esté ya en la expresión. Otras propiedades relacionadas con cuantificadores: (∀x)[P( x) ∧ Q ( x)] ⇔ (∀x) P( x) ∧ (∀y )Q( y ) (∃x)[P ( x) ∨ Q ( x)] ⇔ (∃x) P( x) ∨ (∃y )Q ( y ) 7.5. Ejemplos Veamos algunos ejemplos que muestran la versatilidad del Cálculo Predicativo (C.P.) como un lenguaje útil para describir situaciones del lenguaje corriente: 1) "Cada ciudad tiene un perrero que ha sido mordido por todos los perros de la ciudad" (∀x ){CIUDAD (x ) ⇒ (∃y ){PERRERO ( x, y ) ∧ (∀z ){[PERRO (z ) ∧ VIVE _ EN (x, z )] ⇒ MORDIDO ( y, z )}}} 2) "Para todo conjunto x existe un conjunto y, tal que la cardinalidad de y es mayor que la cardinalidad de x". (∀x ){CONJ (x ) ⇒ (∃y )(∃u )(∃v)[CONJ ( y ) ∧ CARD ( x, u ) ∧ CARD ( y, v) ∧ MAY (v, u )]} 3) "Todos los bloques que están sobre bloques que han sido movidos, o que están pegados a bloques que han sido movidos, también han sido movidos". (∀x )(∀y){{BLOQ ( x) ∧ BLOQ ( y ) ∧ [SOBRE (x, y ) ∨ PEGAD ( x, y)] ∧ MOVIDO( y )} ⇒ MOVIDO( x)} 7.6. Reglas de Inferencia En C.P. existen reglas de inferencia que pueden aplicarse sobre ciertas "fórmulas bien formadas" (fbfs) y conjuntos de fbfs para producir nuevas fbfs. Una regla de inferencia importante es el Modus Ponens (W1 ⇒ W2). Otra regla es la Especificación Universal, que produce la fbf W(A) a partir de la fbf (∀x)W(x), en que A es una constante cualquiera. P.ej. usando las dos reglas de inferencia anteriores se obtiene la fbf W2(A), a partir de las fbfs (∀x)[ W1(x) ⇒ W2(x)] y W1(A). Las reglas de inferencia producen fbfs a partir de otras dadas. En C.P. estas fbfs se llaman Teoremas, y la secuencia de aplicación de reglas de inferencia en la derivación constituyen las Pruebas del Teorema. Es decir, algunas tareas de resolver problemas pueden visualizarse como la tarea de encontrar la prueba para un teorema. 7.7. Unificación Para probar teoremas que incluyen fórmulas cuantificadas, a menudo es necesario "asimilar" (Eng.: match) ciertas sub-expresiones. Usando el ejemplo anterior, para producir W2(A) a partir de las fbfs (∀x)[ W1(x) ⇒ W2(x)] y W1(A), es necesario encontrar la sustitución "A por x" que identifica a W1(A) con W1(x). Encontrar sustituciones de variables para igualar expresiones es un proceso muy importante en Inteligencia Artificial (IA), que se llama Unificación. Para describir este proceso, veamos primero mecanismos de Sustitución. Los términos de una expresión pueden ser símbolos de variables o constantes, o bien ser expresiones funcionales (consistentes en símbolos de funciones y términos). Así, una instancia de sustitución de una expresión se obtiene sustituyendo términos para variables en esa expresión. Por ejemplo, cuatro instancias de P[x, f(y),B] son: 1) P[z, f(w),B] 2) P[x, f(A),B] ← "variante alfabética" (simple sustitución de variables) 3) P[g(z), f(A),B] 4) P[C, f(A),B] ← "instancia concreta" (Eng.: ground instance) (ninguno de los términos contiene variables). Podemos representar las sustituciones por un conjunto de pares ordenados s = {t1/v1, t2/v2, ...., tn/vn}, en que ti/vi quiere decir que el término ti se reemplaza por la variable vi en toda la expresión. Una variable no puede ser reemplazada por un término que incluya la misma variable. Las sustituciones usadas anteriormente en P[x, f(y),B] son: 1) 2) 3) 4) s1 = {z/x, w/y} s2 = {A/y} s3 = {g(z)/x, A/y} s4 = {C/x, A/y} Para denotar una instancia de sustitución de una expresión E, usando una sustitución s, anotamos Es. De este modo en el primer caso de ejemplo anterior tenemos lo siguiente: 1) P[z, f(w),B] = P[x, f(y),B]s1. La composición de dos sustituciones s1 y s2 se denota s1s2, que es la sustitución obtenida aplicando s2 a los términos de s1 y agregando también los pares de s2 que contengan variables que no aparecen en s1. Ejemplo: {g(x,y)/z}{A/x, B/y, C/w, D/z} = {g(A, B)/z, A/x, B/y, C/w, D/z}. Se puede mostrar que aplicar sucesivamente s1 y s2 a una expresión L es lo mismo que aplicar s1s2 a L, es decir, (Ls1)s2 = L(s1s2). También puede mostrarse que la composición de sustituciones es asociativa, es decir: (s1s2)s3 = s1(s2s3). En general, las sustituciones no son conmutativas. Si una sustitución s se aplica a todos los elementos de un conjunto {Ei} de expresiones, el conjunto de instancias de sustitución lo denotamos por {Ei}s. Se dice que un conjunto de expresiones {Ei} es Unificable si existe una sustitución s tal que: E1s = E2s = E3s = .... En ese caso se dice que s es un unificador de {Ei} porque su aplicación reduce al conjunto a un sólo elemento (singleton). Por ejemplo, s = {A/x, B/y} unifica a: {P[x, f(y),B],P[x, f(B),B]} al obtener {P[A, f(B),B] }. Si bien s = {A/x, B/y} es un unificador del conjunto { P[x, f(y),B], P[x, f(B),B] }, en algún sentido no es el más sencillo. El Unificador Más General o Más Sencillo (UMG) (Eng.: most general unifier: mgu), g de {Ei}, es aquel que tiene la propiedad tal que si s es un unificador cualquiera de {Ei} que obtiene {Ei}s, entonces existe una sustitución s' tal que {Ei}s = {Ei}gs'. Más aún, la instancia común producida por un UMG es única excepto por variantes alfabéticas. Ejemplos de instancias de aplicación de UMG a conjuntos de literales que son unificables: CONJUNTOS DE LITERALES INSTANCIAS DE SUSTITUCIÓN POR umg {P(x), P(A)} {P[f(x), y, g(y)], P[f(x), z, g(x)]} {P[f(x, g(A,y)), g(A,y)], P[f(x,z), z]} P(A) P[f(x), x, g(x)] P[f(x, g(A,y)), g(A,y)] Típicamente la unificación se utiliza para descubrir si un literal puede asimilarse a otro. Este proceso se ha llamado a veces "pattern matching" (reconocimiento de patrones). Juega un rol importante en sistemas de IA. El proceso de unificación es más general que lo que se llama usualmente reconocimiento de patrones, puesto que se permite que aparezcan variables en ambas expresiones. 7.8. Validación Una fbf que es verdadera para todas las interpretaciones posibles se denomina Válida. Una fbf concreta y válida generalmente se llama Tautología. Así por ejemplo, usando una tabla de verdad se establece que la fbf P(A) ⇒ [P(A) v P(B)] tiene el valor de verdad V con cualquier interpretación, por lo tanto es válida. Las tablas de verdad siempre pueden ser usadas para determinar la validez de cualquier fbf que no contenga variables. Es un método exhaustivo: se prueba que tenga valor V para todos los valores posibles de las fórmulas atómicas que contenga la fbf. Si una fbf contiene cuantificadores, entonces no siempre se puede establecer si es válida. Se ha mostrado que es imposible encontrar un método general para establecer la validez de una expresión cuantificada, y por esta razón el C.P. se dice que es Indecidible (Eng.: undecidable). Sin embargo, sí pueden decidirse cierta clases de fórmulas que contienen cuantificadores; se habla de Subclases Decidibles. También se ha visto que si una fbf es válida, entonces existe un procedimiento para verificar la validez de esa fbf, en tanto que si se aplica el mismo procedimiento a fbfs que no son válidas se puede llegar a procesos interminables. Luego, se dice que el C.P. es Semi-decidible. Si una misma interpretación hace que cada fbf en un conjunto de fbfs tenga valor V, entonces decimos que esa interpretación satisface al conjunto de fbfs. Una fbf X es una Consecuencia Lógica (Eng.: logically follows) de un conjunto de fbfs S si todas las interpretaciones que satisfacen S también satisfacen X. Por ejemplo es fácil ver que la fbf (∀x)(∀y)[P(x) v Q(y)] es consecuencia lógica del conjunto {(∀x)(∀y)[P(x) v Q(y)], (∀z)[R(z) v Q(A)]}. También, la fbf P(A) es consecuencia lógica de (∀x) P(x). También ocurre que (∀x) Q(x) es consecuencia lógica del conjunto {(∀x)[~P(x) v Q(x)], (∀x) P(x)}. 7.9. Resolución La Resolución es una importante herramienta de inferencia que se puede aplicar a una clase de fbfs llamadas Cláusulas, que consistan en fórmulas atómicas, y negaciones de fórmulas atómicas, asociadas por “ ∨ ” (ORs) (Eng.: clause: wff consisting of a disjunction of literals). Con el objetivo que explicar de mejor manera el procedimiento de transformación utilizaremos un ejemplo para poder desarrollar las etapas que ella conlleva. Consideremos el siguiente ejemplo: (∀x ){P(x ) ⇒ {(∀y )[P(y ) ⇒ P(f (x, y ))]∧ ~ (∀y )[Q(x, y ) ⇒ P(y )]}}. El proceso de conversión consta de las etapas siguientes: 1) Eliminar “⇒” (sustituir por ~ ∨ ): (∀x ){~ P(x ) ∨ {(∀y )[~ P(y ) ∨ P(f (x, y ))]∧ ~ (∀y )[~ Q(x, y ) ∨ P(y )]}} 2) Reducir el alcance de “~”: Que aplique a no más de una fórmula atómica (hacer uso en forma reiterativa de las leyes de De Morgan y otras): (∀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 )]}} 3) Estandarización de Variables: Dentro del alcance de cada cuantificador, la variable cuantificada es arbitraria. Puede ser reemplazada por otra variable (no preexistente) dentro del alcance del cuantificador, sin cambiar el valor de verdad de la fbf. Es decir, se trata de renombrar las variables, para asegurar que cada cuantificador tenga una variable exclusiva. Así por ejemplo, podemos reemplazar la variable asociada a (∀x )[P(x ) ⇒ (∃y )Q(y )] . ∃ en (∀x )[P(x ) ⇒ (∃x )Q(x )] , por Estandarizar las variables en el ejemplo significa: (∀x ){~ P(x ) ∨ {(∀y )[~ P(y ) ∨ P(f (x, y ))] ∧ (∃w )[Q(x, w )∧ ~ P(w )]}}. 4) Eliminar “∃” (cuantificadores existenciales): Considere la fbf: (∀y) [(∃x) P(x,y)]. Puede leerse como “para todo y, existe un valor x (posiblemente dependiente de y) tal que P(x, y ) . Nótese que por estar el “∃” dentro del alcance de “∀”, existe la posibilidad que x dependa del valor de y. Si hacemos explícita esa dependencia, podemos establecer una función g(y) que mapea cada valor de y en un x “existente” (“∃”). Una función así definida se denomina Función de Skolem. Aplicando Skolem, reemplazamos el cuantificador existencial, y la expresión se convierte en (∀y) P[g(y),y].A esto se le suele llamar “eskolemizar”. Una regla general para eliminar cuantificadores existenciales de una fbf es reemplazar cada ocurrencia de la variable asociada a “∃” por una función Skolem, cuyos argumentos son todas aquellas variables cuantificadas en forma universal (∀) cuyo alcance incluya el alcance del “∃” que se quiera eliminar. Debe cuidarse que se usen símbolos nuevos para las funciones Skolem. Por ejemplo, en el caso: [(∀w )Q(w )] ⇒ (∀x ){(∀y ){(∃z )[P(x, y, z )] ⇒ (∀u )R (x, y, u, z )}} , podemos eliminar (∃z) y llegar a: [(∀w )Q(w )] ⇒ (∀x ){(∀y )[P(x, y, g(x, y )) ⇒ (∀u )R (x, y, u, g(x, y ))]} Si no hay variables que tengan cuantificadores universales dentro del alcance de “∃”, usamos una función Skolem sin argumentos (es decir, una constante). Así, (∃x )P(x ) queda como P(A), en que A se refiere a la entidad que sabemos existe (usar símbolo de constante nuevo). Siguiendo con el ejemplo que veníamos elaborando, queda: (∀x ){~ P(x ) ∨ {(∀y )[~ P(y ) ∨ P(f (x, y ))] ∧ [Q(x, g(x ))∧ ~ P(g(x ))]}} , , en donde g(x) es una función de Skolem. 5) Trasladar los “∀” (cuantificadores universales): Lo que se debe realizar es trasladar todos los cuantificadores universales al comienzo de la fbf, permitiendo que tengan el alcance sobre toda la fbf (a esta altura cada “∀” tiene su propia variable). Se dice que la fbf está en forma Prenex (inglés). Es decir, una serie de cuantificadores (prefijo, o prefix) seguido por una fórmula sin cuantificadores (llamada Matriz). En el ejemplo: (∀x )(∀y ){~ P(x ) ∨ {[~ P(y ) ∨ P(f (x, y ))] ∧ [Q(x, g(x ))∧ ~ P(g(x ))]}} 6) Poner la matriz de “forma conjuntiva normal”: Se debe reducir la fbf a una serie de expresiones unidas por “ ∧ ”. Ejemplos son: i) ii) iii) iv) [P(x ) ∨ Q(x )] ∧ [~ P(w )∨ ~ R (y)] ∧ Q(x, y) P (x ) ∨ Q (x , y ) P (x ) ∧ Q (x , y ) ~ R (y ) Para llegar a esta forma podemos utilizar las reglas distributivas, por ejemplo. En el ejemplo: (∀x )(∀y ){[~ P(x ) ∨ [~ P(y ) ∨ P(f (x, y ))]] ∧ [~ P(x ) ∨ [Q(x, g(x ))∧ ~ P(g(x ))]]}; (∀x )(∀y ){[~ P(x )∨ ~ P(y ) ∨ P(f (x, y ))] ∧ [~ P(x ) ∨ Q(x, g(x ))] ∧ [~ P(x )∨ ~ P(g(x ))]}. 7) Eliminar “∀”: Como todos los cuantificadores quedaron a la izquierda, el orden ya no importa. Además, en una fbf, las variables son finitas Se asume que todas las variables de la matriz están universalmente cuantificadas. 8) Eliminar “∧”: Reemplazamos (x1 ∧ x2) por el conjunto de fbfs {x1, x2}. Como resultado, obtenemos un conjunto de expresiones “cláusulas” (fórmulas atómicas, negadas o no, asociadas por “v”s). En el ejemplo obtendríamos el siguiente conjunto de fbfs: { P ( x )∨ P ( y ) ∨ P [ f ( x, y ) ] , P ( x ) ∨ Q [ x, g ( x ) ] , P ( x ) ∨ P( g ( x))} 9) Cambiar nombres de variables: Esta etapa se realiza para que no se repitan en las diferentes expresiones (Eng. standardizing the variables apart). De esta forma, reemplazando la variable x en cada una de las fbf del conjunto obtenido anteriormente por x1, x2 y x3 respectivamente, en el ejemplo que estamos desarrollando las fbfs quedan de la siguiente manera: • • • ~ P(x1)∨ ~ P(y ) ∨ P[f (x1, y )] ~ P (x 2 ) ∨ Q[x 2, g(x 2 )] ~ P(x3)∨ ~ P[g(x3)] Si se utiliza resolución como regla de inferencia en un sistema para demostrar teoremas, el conjunto de fbf que queremos usar para probarlo se convierte primero a expresiones de este tipo. 7.10. Resolución de cláusulas concretas (Eng.: ground clauses) Recordemos que una cláusula concreta es aquella que no tiene variables en el literal. En la Tabla 7.2 se muestran la resolución de distintas cláusulas parentales. Tabal 7.2. Cláusulas parentales y sus respectivas resoluciones. Cláusula Parental 1) P y ~P ∨ Q (es decir, P ⇒ Q ) 2) P ∨ Q y ~P ∨ Q Resolución Q Comentario Modus Ponens. La cláusula Q ∨ Q “colapsa” a Q. Esta resolución se llama fusión (merge). Aquí hay dos resoluciones 3) P ∨ Q y ~P ∨ ~Q Q ∨ ~Q y P ∨ ~P posibles, ambas tautologías. 4) ~P y P La “cláusula vacía” es NIL (conj. vacío, φ ) señal de una contradicción. 5) ~P ∨ Q (es decir P ⇒ Q ) ~P ∨ R (es decir P ⇒ R ) Encadenamiento. y ~Q ∨ R (es decir Q ⇒ R ) Q Para usar estas simples reglas cuando las cláusulas contienen variables hay que trabajar con las sustituciones adecuadas. 7.11. Ejemplo: “Puzzle del club alpino” Veamos un ejemplo de unificación y resolución, el llamado “Puzzle del Club Alpino” (de N. J. Nilsson, “Problem-Solving Methods in AI", McGraw-Hill, 1971), citado por Bonissone. El “Puzzle del Club Alpino” tiene el siguiente enunciado: “Antonio, Miguel y Juan pertenecen al Club Alpino. Todos los miembros del Club Alpino son esquiadores, escaladores o ambos. A ningún escalador le gusta la lluvia, y a todos los esquiadores les gusta la nieve. A Miguel le disgusta todo aquello que le gusta a Antonio, y le gusta todo lo que a Antonio le disgusta. A Antonio le gusta la lluvia y la nieve. ¿Existe algún miembro del Club Alpino que sea escalador pero no esquiador? ¿Quién?" La primera etapa para resolver el problema es definir un conjunto de predicados y constantes para reformular el puzzle. Las constantes son Antonio, Miguel, Juan, nieve, lluvia. Los predicados se definen así: G(x,w): A(x) : Q(x) : C(x) : A “x” le gusta “w” “x” pertenece al Club Alpino “x” es un esquiador “x” es un escalador El puzzle se reformula de la manera que se especifica en la Tabla 7.3. Tabla 7.3. Reformulación del problema del Puzzle del Club Alpino utilizando cláusulas entre los predicados. F1 : A(Antonio) ∧ A(Miguel) ∧ A(Juan) F2 : F3 : F4 : F5 : F6 : F7 : Q : : Antonio, Miguel y Juan pertenecen al Club Alpino. : Todos los miembros del Club son ∀x[A (x ) ⇒ (Q(x ) ∨ C(x ))] esquiadores o escaladores o ambos. : A ningún escalador le gusta la lluvia. ∀x[C(x ) ⇒~ G (x, lluvia )] : A todos los esquiadores les gusta la ∀x[Q(x ) ⇒ G (x , nieve )] nieve. : A Miguel le disgusta todo lo que le gusta ∀x[G (Antonio, x ) ⇒~ G (Miguel, x )] a Antonio : A Miguel le gusta todo lo que le disgusta ∀x[~ G (Antonio, x ) ⇒ G (Miguel, x )] a Antonio : G(Antonio, nieve) ∧ G(Antonio, A Antonio le gusta la lluvia y la nieve lluvia) : Pregunta: ¿Existe algún miembro del ∃w [A (w ) ∧ C(w )∧ ~ Q(w )] Club Alpino que sea escalador pero no esquiador? Apliquemos los pasos de resolución: 1) Eliminar “⇒”: Al eliminar la relación “⇒” obtenemos las relaciones que se muestran en la Tabla 7.4. Tabla 7.4. Relaciones obtenidas al eliminar la relación “⇒”. F2 : ∀x[~ A(x ) ∨ (Q(x ) ∨ C(x ))] F3 : ∀x[~ C(x )∨ ~ G (x, lluvia )] F4 : ∀x[~ Q(x ) ∨ G (x , nieve )] F5 : ∀x[~ G (Antonio, x )∨ ~ G (Miguel, x )] F6 : ∀x[G (Antonio, x ) ∨ G (Miguel, x )] 2) Reducir alcance de ~: No hay cambios. 3) Estandarización de variables: No hay cambios. 4) Eliminar “∃”: Tampoco se aplica, por el momento no consideramos Q. 5) Trasladar “∀” al comienzo: (en forma prenex): No hay cambios. 6) Convertir la matriz a su “forma conjuntiva normal” (una conjunción finita de disyunciones de predicados, con y sin negaciones): No hay cambios. 7) Eliminar “∀”. 8) Eliminar “∧”. Dadas todas las etapas mencionadas el conjunto de fbfs queda de la siguiente forma mostrada en la Tabla 7.5. Tabla 7.5. Relaciones obtenidas al eliminar la relación “∧”. C '4 : : : : C5' : C '6 C1 C2 C3 A(A) A(M) A(J) } de F1 : ~A(x) ∨ Q(x) ∨ C(x) ~C(x) ∨ ~G(x,lluvia) ~Q(x) ∨ G(x,nieve) de F4 C '7 : ~G(A,x) ∨ ~G(M,x) de F5 ' 8 : de F6 C9' : G(A,x) ∨ G(M,x) G(A,lluvia) C10 : G(A,nieve) C } de F2 de F3 de F7 9) Como última etapa, se cambian las variables, para que no se repitan en las expresiones. Así, las fórmulas se han transformado a su forma normal. 7.12. Árbol de refutación El árbol de refutación es una manera de resolver problemas planteados en formulación de fbfs, una vez que se esta se ha reducido a un conjunto de cláusulas. Este tipo de mecanismo de resolución de problemas es adecuado para probar la consistencia de un grupo de condicionantes, por ejemplo en tareas de verificación de programas. Por otra parte, la resolución no es adecuada para tareas interactivas, como por ejemplo aplicaciones de diagnóstico, en que el sistema trata de identificar el trozo de evidencia faltante que sea más relevante para completar el análisis. En general, en este tipo de resoluciones de problemas no se sigue ninguna estrategia para guiar la búsqueda de unificadores y resoluciones. Si faltase un eslabón en el “árbol de refutación”, sería difícil (para un sistema de razonamiento basado en resolución) identificar la información que falta para tratar de obtenerla de alguna forma. Por otro lado, no existe una manera clara de encontrar la solución. Mejor dicho, instintivamente se debe relacionar las fbfs obtenidas para poder tratar de encontrar una solución. Para poder dejar claro el mecanismo que se debe realizar, a continuación se muestra el análisis del árbol de refutación del ejemplo del “Puzzle del Club Alpino”. Antes que todo, antes de aplicar el principio de relación, negamos la pregunta Q y la agregamos como cláusula al conjunto de cláusulas normalizadas: ~ Q = ∀w [~ A(w )∨ ~ C(w ) ∨ Q(w )] . Así generamos el Árbol de Refutación (Eng.: refutation tree) la cual demuestra la existencia de una solución, partiendo de la negación de la ' ) al conjunto de cláusulas original, y pregunta Q, agregando esta negación ( C11 demostrando que el conjunto de cláusulas, aumentado ( C1 a C11 ) no puede ser satisfecho, es decir, aplicando unificación y resolución, se llega a un conjunto vacío. Figura 7.1. Árbol de Refutación para demostrar la solución del problema del Puzzle del Club Alpino. Observando la Figura 7.1 se prueba que la solución existe, en la cual se desarrolla el árbol de refutación mencionado anteriormente. Para obtener la solución, se crea una tautología tomando la pregunta original Q y su negación en disyunción, es decir C11 = Q∨ ~ Q . Esta tautología se agrega al conjunto de cláusulas C1 a C10 . Siguiendo los mismos pasos del “árbol de refutación”, produciría el “árbol de refutación modificado”, que dará la respuesta a la pregunta Q. La Figura 7.2 muestra el árbol de refutación desarrollado para obtener la solución. Figura 7.2. Árbol de refutación desarrollado para obtener la solución del problema del Puzzle del Club Alpino