alejandro guerra-hernandez´ - uv.mx · ta con un conjunto de instrucciones para compiladores de...

172
Alejandro Guerra-Hern´ andez Metodolog´ ıas de Programaci ´ on I Programaci´ on L ´ ogica 5 de noviembre de 2009 Departamento de Inteligencia Artificial Sebasti´ an Camacho No. 5, Xalapa, Ver., exico 91000

Upload: nguyennguyet

Post on 25-Sep-2018

212 views

Category:

Documents


0 download

TRANSCRIPT

Alejandro Guerra-Hernandez

Metodologıas de Programacion I

Programacion Logica

5 de noviembre de 2009

Departamento de Inteligencia ArtificialSebastian Camacho No. 5, Xalapa, Ver.,Mexico 91000

Indice general

1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1. Breve historia de la programacion logica. . . . . . . . . . . . . . . . . . . . . . . . 11.2. Una breve introduccion a Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.2.1. Hechos y relaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.2.2. Reglas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.2.3. Definicion de reglas recursivas . . . . . . . . . . . . . . . . . . . . . . . . . 11

1.3. ¿Como computa Prolog una solucion? . . . . . . . . . . . . . . . . . . . . . . . . . 131.4. Organizacion del curso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

Parte I Formalismos

2. Logica de Primer Orden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.2. Sistemas formales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.3. El lenguaje de la logica de primer orden . . . . . . . . . . . . . . . . . . . . . . . . 23

2.3.1. Sintaxis de la logica de primer orden . . . . . . . . . . . . . . . . . . . . 252.4. La semantica de la logica de primer orden . . . . . . . . . . . . . . . . . . . . . . 26

2.4.1. Teorıa de modelo de la logica de primer orden . . . . . . . . . . . . 272.5. Inferencia en la logica de primer orden . . . . . . . . . . . . . . . . . . . . . . . . . 292.6. Substituciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3. Clausulas y Programas Definitivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.1. Clausulas definitivas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.2. Programas definitivos y Metas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.3. El modelo mınimo de Herbrand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

3.3.1. Resultados concernientes a los modelos de Herbrand . . . . . . 393.3.2. Construccion del modelo mınimo de Herbrand . . . . . . . . . . . . 41

4. Principio de Resolucion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434.2. ¿Que es un procedimiento de prueba? . . . . . . . . . . . . . . . . . . . . . . . . . . 44

V

VI Indice general

4.3. Pruebas y programas logicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454.4. Substitucion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484.5. Unificacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504.6. Resolucion-SLD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

4.6.1. Propiedades de la resolucion-SLD . . . . . . . . . . . . . . . . . . . . . . 55

5. Negacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575.2. La complecion de un programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595.3. Resolucion SLDNF para programas definitivos . . . . . . . . . . . . . . . . . . 625.4. Programas Logicos Generales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655.5. Resolucion SLDNF para programas generales . . . . . . . . . . . . . . . . . . . 67

6. Corte y Aritmetica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716.1. Corte: podando el arbol-SLD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716.2. Aritmetica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

Parte II Prolog

7. Introduccion a Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

8. Estrategias basicas de resolucion de problemas . . . . . . . . . . . . . . . . . . . . 858.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858.2. Busqueda primero en profundidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878.3. Busqueda primero en amplitud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 898.4. Busqueda primero el mejor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

9. Sistemas Expertos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999.2. Caracterısticas de los SE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

9.2.1. Razonamiento basado en metas . . . . . . . . . . . . . . . . . . . . . . . . 1019.2.2. Incertidumbre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029.2.3. Razonamiento guiado por los datos . . . . . . . . . . . . . . . . . . . . . 102

9.3. Usando la maquina de inferencia de Prolog . . . . . . . . . . . . . . . . . . . . . 1039.3.1. Reglas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1039.3.2. Reglas para relaciones jerarquicas . . . . . . . . . . . . . . . . . . . . . . 1049.3.3. Reglas para otras relaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

9.4. Interfaz del usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1079.5. Un Shell simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

9.5.1. REPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1109.6. Encadenamiento hacıa atras con incertidumbre . . . . . . . . . . . . . . . . . . 111

9.6.1. Factores de certidumbre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1129.6.2. Factores de certidumbre a la MYCIN . . . . . . . . . . . . . . . . . . . 1149.6.3. Formato de las reglas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1159.6.4. La maquina de inferencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1169.6.5. Interfaz con el usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

Indice general VII

10. Arboles de Decision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12110.1. Representacion de los arboles de decision . . . . . . . . . . . . . . . . . . . . . . 12110.2. Problemas apropiados para la aplicacion de arboles de decision . . . . 12310.3. El algoritmo basico de aprendizaje de arboles de decision . . . . . . . . . 124

10.3.1. ¿Que atributo es el mejor clasificador? . . . . . . . . . . . . . . . . . . 12410.3.2. Entropıa y ganancia de informacion . . . . . . . . . . . . . . . . . . . . . 126

10.4. Espacio de hipotesis en el aprendizaje inductivo de arboles dedecision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

10.5. Sesgo inductivo en el aprendizaje de arboles de decision . . . . . . . . . . 12810.5.1. Sesgo por restriccion y sesgo por preferencia . . . . . . . . . . . . . 12910.5.2. ¿Porque preferir hipotesis mas compactas? . . . . . . . . . . . . . . . 129

10.6. Consideraciones sobre el aprendizaje inductivo de arboles dedecision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12910.6.1. Evitando un sobreajuste con los datos de entrenamiento . . . . 13010.6.2. Incorporando valores contınuos . . . . . . . . . . . . . . . . . . . . . . . . 13210.6.3. Medidas alternativas para la seleccion de atributos . . . . . . . . 133

10.7. Implementacion el Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13410.7.1. Atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13510.7.2. Distribucion de clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13610.7.3. El mejor atributo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13610.7.4. El arbol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13810.7.5. Imprimiendo el arbol construido. . . . . . . . . . . . . . . . . . . . . . . . 13910.7.6. Ejecutando todo el experimento . . . . . . . . . . . . . . . . . . . . . . . . 14010.7.7. Predicados auxiliares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

11. Planeacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14311.1. Acciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14311.2. Analisis medios-fines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14511.3. Metas protegidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14711.4. Aspectos procedimentales de la busqueda en amplitud . . . . . . . . . . . . 14911.5. Regresion de metas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15211.6. Combinando planeacion medios fines con primero el mejor . . . . . . . 15411.7. Variables y planes no lineales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

11.7.1. Acciones y metas no instanciadas . . . . . . . . . . . . . . . . . . . . . . . 15911.7.2. Planes no lineales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

Acronimos

⇒ Implicacion materialCWA Suposicion del mundo cerrado (Closed World Assumption).fbf Formula bien formada (wff - well formed formula).FOL Logica de primer orden (First-Order Logic).FOPC Calculo de predicados en primer orden (First-Order Predicate Calculus).IA Inteligencia Artificial.LFOL El lenguaje de la logica de primer orden.MGU Unificador mas general (Most General Unifier).NAF Negacion por fallo finito (Negation as Finite Failure).R Funcion de seleccion en la resolucion-SLD.ssi Si y solo si.WAM Maquina abstracta de Warren (Warren Abstract Machine).U Universo de discurso. En ciertas ocasiones se presentara como D (domi-

nio).

IX

Capıtulo 1Introduccion

Resumen El tema de este curso de metodologıas de programacion es la programa-cion logica. En este capıtulo se presenta un panorama general de este paradigma deprogramacion, con el objetivo de que ustedes puedan responder a ¿Porque y paraque es necesario estudiar a la programacion logica en un curso de su maestrıa enInteligencia Artificial (IA)? Para ello, se revisaran algunas notas historicas sobre losorigenes de la programacion logica y Prolog, su lenguaje de programacion mas co-nocido; se experimentara con el uso de Prolog; y se revisara brevemente cuales sonlos fundamentos teoricos del paradigma. Finalmente, el capıtulo ofrece la organiza-cion del material que revisaremos en el resto del curso.

1.1. Breve historia de la programacion logica.

La historia reciente, y a la francaise, de la programacion logica comienza enjulio de 1970 en Montreal, Canada, donde Alain Colmerauer, Philippe Roussel yRobert Pasero [4] trabajaban en un proyecto sobre traduccion automatica y procesa-miento del lenguaje natural. El sistema en cuestion incluıa analizadores sintacticosy generadores de frases para el frances. Un estudiante de Colmerauer, decidio tra-bajar sobre la demostracion automatica de teoremas, con base en el trabajo sobre elprincipio de resolucion de Alan Robinson [15]. La conjuncion de estos trabajos diocomo resultado una interfase entre el frances y las formulas logicas del demostradorde teoremas que permitıa interacciones como que se muestra en el cuadro 1.1.

Este sistema hacıa uso de constantes para designar elementos (Tom, Jerry, Max,Queso); para designar conjuntos (Gatos, Ratones, Ratones que comen queso, etc.);y relaciones binarias (Matar, Comer, Gustar, No gustar). Las constantes, junto conlos sımbolos funcionales T he, Subset, y True, especificaban un lenguaje de formu-las logicas. Mientras se seguıa trabajando en la demostracion de teoremas en estelenguaje, aparecio la referencia obligada al trabajo de Robert Kowalski [7] sobreel metodo conocido como resolucion-SL, que como veremos, es fundamental en ellenguaje Prolog.

1

2 1 Introduccion

Usuario > Los gatos matan ratones.Usuario > Tom es un gato al que no le gustan los ratones

que comen queso.Usuario > Jerry es un raton que come queso.Usuario > Max no es un gato.Usuario > ¿Que hace Tom?Computadora > A Tom no le gustan los ratones que comen

queso.Computadora > Tom mata ratones.Usuario > ¿Quien es un gato?Computadora > Tom.Usuario > ¿Que come Jerry?Computadora > Queso.Usuario > ¿Que come Tom?Computadora > Lo que comen los gatos a los que no les gustan

los ratones que comen queso.

Cuadro 1.1 Sistema de lenguaje natural de Alain Colmerauer et al. [4].

En realidad, la creacion de este paradigma de programacion tiene una larga his-toria mas universal, cuya mayor parte transcurre en los dominios de la logica ma-tematica y recientemente en el de las ciencias de la computacion. La programacionlogica se basa en la sintaxis de la logica de primer orden, originalmente propues-ta por Gottlob Frege en la segunda mitad del siglo XIX y modificada a su formaactual por Giuseppe Peano y Bertrand Russell. En la decada de los anos treinta,Kurt Goedel y Jacques Herbrand estudiaron la nocion de computabilidad basadaen derivaciones. Su trabajo puede verse como el origen de la “computacion comodeduccion”. Ademas, Herbrand discutio en su tesis doctoral un conjunto de reglaspara manipular ecuaciones algebraicas en terminos que pueden verse ahora como unbosquejo de la unificacion. Treinta anos mas tarde, Alan Robinson [15] publico suartıculo fundacional sobre la demostracion automatica. En este trabajo se introduceel principio de resolucion, la nocion de unificacion y un algoritmo de unificacion.Y es que, si bien el paradigma de la programacion logica tiene sus raıces en lademostracion automatica de teoremas, de donde tomo la nocion de deduccion, pre-senta una novedad importante: en el proceso de demostracion algunos valores serancomputados. Pero otro paso era necesario para vislumbrar como es posible computaren este marco.

En 1974, Robert Kowalski [6] introduce la nocion de programas logicos con unaforma restringida de resolucion. La sintaxis propuesta por Kowalski era mas res-tringida que la de Robinson, pero tenıa un efecto colateral sobre la forma de unasubstitucion satisfactoria. Esta substitucion puede verse como el resultado de unacomputacion, y en consecuencia, ciertas formulas logicas (clausulas de Horn) pue-den interpretarse como programas. El trabajo de Kowalski termino un debate deltodo relevante para nosotros: dadas las metas de la inteligencia artificial ¿El cono-cimiento debe representarse de forma declarativa o procedimental? Si la formadeclarativa era la adecuada, tal como defendıa John McCarthy [8], la realizacionde la inteligencia artificial pasaba por representar el conocimiento en calculo depredicados e implementar procedimientos de prueba eficientes sobre este lenguaje;

1.2 Una breve introduccion a Prolog 3

Si la forma procedimental era la adecuada, entonces tal realizacion pasaba por laimplementacion de procedimientos organizados como una sociedad de agentes quecompiten y cooperan, tal como lo resume Marvin Minsky [9]. Los programas logi-cos de Kowalski tienen evidentemente una interpretacion declarativa, pero tambienprocedimental.

Entre 1971 y 1973 Kowalski y Colmeraruer colaboraron intensamente, conclu-yendo con la creacion de Prolog en 1973. Prolog puede verse como la realizacionpractica del concepto de programa logico. Aunque sus inicios estuvieron enfocadosal procesamiento del lenguaje natural, pronto se encontro que Prolog podıa ser usadocomo un lenguaje de programacion de proposito general. Originalmente, Prolog fueimplementado por Philippe Roussel como un interprete escrito en Algol-W. Un pasoadelante fue logrado por David H. Warren [20] quien propuso en 1983 una maquinaabstracta, ahora conocida como WAM (Warren Abstract Machine). La WAM cuen-ta con un conjunto de instrucciones para compiladores de Prolog independientes dela maquina y se convirtio en el estandar para la implementacion de Prolog y otroslenguajes logicos de programacion.

De esta breve historia (para una version mas detallada ver J.A. Robinson [16])podemos extraer algunas consideraciones sobre este curso:

La programacion logica es una herramienta y un sujeto de estudio de la inteli-gencia artificial.La logica de primer orden es fundamental para entender este paradigma de pro-gramacion.La programacion logica es un paradigma de programacion, que difiere de otrosparadigmas, como la programacion imperativa (Algol, C, Pascal, etc.), la orien-tada a objetos (Simula, Smalltalk, Eiffel, C++, Java, etc.), o la funcional (ML,Haskell, Lisp, etc.).Prolog 6= programacion logica, pero es su realizacion practica mas usada en laactualidad.

1.2. Una breve introduccion a Prolog

Prolog es la realizacion mas utilizada del paradigma de programacion logica.Escribir un programa en Prolog tiene menos que ver con la tarea de especificar unalgoritmo, como es el caso de la programacion imperativa; y mas con la especifi-cacion de los objetos y las relaciones entre ellos, que ocurren en el contexto de unproblema. En particular, tiene que ver con la especificacion de las relaciones queconforman la solucion deseada del problema. Veamos un ejemplo basado en la ge-nealogıa de una familia [1].

4 1 Introduccion

1.2.1. Hechos y relaciones

La figura 1.1 muestra una relacion familiar, donde las flechas X → Y indicanque X es progenitor Y . El hecho de que Tom sea progenitor de Bob 1 se escribe enProlog: progenitor(tom,bob).

pam

bob

tom

liz

ann pat

jim

Figura 1.1 Una relacion familiar.

Hemos escogido progenitor como el nombre de una relacion que tiene a tomy bob como argumentos. Por razones que explicaremos mas adelante, escribimoslos nombres como tom con minuscula inicial. Para indicar que esta relacion tienedos argumentos escribimos progenitor/2 y decimos que progenitor tiene aridad 2.El arbol familiar completo puede definirse como un programa en Prolog:

1 progenitor(pam,bob).2 progenitor(tom,bob).3 progenitor(tom,liz).4 progenitor(bob,ann).5 progenitor(bob,pat).6 progenitor(pat,jim).

Este programa consta de seis clausulas. Cada una de estas clausulas declara unhecho sobre la relacion progenitor. Por ejemplo, progenitor(tom,bob) es uncaso particular de la relacion progenitor. Una relacion esta definida por el conjuntode todos sus casos.

Podemos editar un archivo con este programa Prolog y llamarlo clase01.pl.Para utilizar este programa es necesario invocar a Prolog, por ejemplo, si usamos

1 Decidı usar una familia gringa, porque nuestros bellos nombres como Marıa del Pilar, no cabenen un grafo facil de leer. Si usted quiere llamar a Tom, Pancho; eso, como veremos, no cambia ennada la historia que voy a contar (a condicion de que Pancho sea siempre Pancho).

1.2 Una breve introduccion a Prolog 5

SWI Prolog, en una terminal invocarıamos swipl (o pl en algunos sistemas ope-rativos):

> swiplWelcome to SWI-Prolog (Multi-threaded, 32 bits, Version 5.6.64)Copyright (c) 1990-2008 University of Amsterdam.SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is freesoftware, and you are welcome to redistribute it under certainconditions.Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

?-

El sımbolo ?- es el indicador de que Prolog espera una instruccion. Si tenemosun archivo llamado clase01.pl con el conjunto de casos que define la relacionprogenitor, podemos consultarla desde SWI Prolog:

?- [clase01].% clase01 compiled 0.00 sec, 168 bytesYes?-

Prolog responde que el programa clase01 ha sido compilado (¿Sabıan ustedesque el codigo de Prolog es compilado?) y espera una nueva instruccion. La instruc-cion puede ser la pregunta ¿Es progenitor Bob de Pat?

?- progenitor(bob,pat).Yes

a lo que Prolog respondera Yes, al encontrar que ese hecho se encuentra en nuestroprograma. Si preguntamos ¿Es Liz progenitora de Pat? obtendremos como respuestaNo, porque nuestro programa no menciona nada (¿Habıan escuchado el termino“supuesto del mundo cerrado”?) acerca de que Liz sea progenitora de Pat:

?- progenitor(liz,pat).No

Lo mismo sucede con la siguiente consulta, pues Ben no es siquiera un objetoconocido por nuestro programa, esto es, Ben no aparece en ninguna parte de nuestrocodigo:

?- progenitor(tom,ben).No

Una pregunta mas interesante sobre la relacion progenitor es ¿Quien es el proge-nitor de Liz? Lo cual puede preguntarse como:

?- progenitor(X,liz).X = tomYes

6 1 Introduccion

Prolog computa un valor para X tal que la relacion progenitor se cumple. Sipreguntamos por los hijos de Bob, tendremos varıas respuestas posibles. Para obte-nerlas todas, es necesario teclear ; y ←↩ o Enter despues de cada respuesta deProlog:

?- progenitor(bob,X).X = ann ;X = pat ;No

Prolog nos da las respuestas ann, pat y al no haber mas respuestas posibles,responde No.

Es posible plantear preguntas mas complicadas a nuestro programa, por ejemplo¿Quien es abuelo/a de Jim? Como nuestro programa no conoce directamente la rela-cion abuelo/2, esta pregunta debe descomponerse en dos preguntas como lo muestrala figura 1.2:

1. ¿Quien es el progenitor de Jim? Asumamos que es alguien Y .2. ¿Quien es el progenitor de Y? Asumamos que es alguien X .

X

Y

jim

progenitor

abuelo

progenitor

Figura 1.2 La relacion abuelo expresada como una composicion de dos relaciones progenitor.

La secuencia de preguntas en Prolog es como sigue:

?- progenitor(Y,jim), progenitor(X,Y).Y = patX = bobYes

Si invertimos el orden de las dos preguntas, el resultado sigue siendo el mismo:

?- progenitor(X,Y), progenitor(Y,jim).X = bobY = patYes

1.2 Una breve introduccion a Prolog 7

Podemos preguntar tambien ¿Quien es nieto de Tom?:

?- progenitor(tom,X), progenitor(X,Y).X = bobY = ann ;X = bobY = pat ;No

Otra pregunta interesante serıa ¿Tienen Ann y Pat progenitores en comun? Estopuede descomponerse nuevamente en dos preguntas:

1. ¿Quien es el progenitor X de Ann?2. ¿Es X (el mismo) progenitor de Pat?

?- progenitor(X,ann), progenitor(X,pat).X = bob ;No?-

Resumiendo:

Es sencillo definir en Prolog una relacion, como progenitor/2, especificando lasn-tuplas de objetos que satisfacen la relacion (n, conocido como aridad, es elnumero de argumentos de la relacion, para progenitor n = 2).El usuario puede plantear facilmente preguntas a Prolog sobre las relaciones de-finidas en un programa.Un programa Prolog consiste de clausulas. Cada clausula termina con un punto.Los argumentos de una relacion pueden ser: objetos concretos o constantes comotom y ann; objetos generales o variables como X e Y.Las preguntas planteadas a Prolog consisten en una o mas metas. Una secuenciade metas como progenitor(X,ann), progenitor(X,pat) significala conjuncion de las metas: X es progenitor de ann y X es progenitor de pat.La respuesta a una pregunta puede ser positiva o negativa, dependiendo de si lameta se puede satisfacer o no. En el caso de una respuesta positiva, se dice quela meta fue satisfecha y tuvo exito. En cualquier otro caso se dice que la meta nofue satisfecha y fallo.Si varias respuestas satisfacen una pregunta, Prolog encontrara tantas como elusuario quiera.

1.2.2. Reglas

Nuestro ejemplo puede extenderse en muchas formas interesantes. Definamoslas relaciones mu jer/1 y hombre/1, para poder expresarnos sobre el genero de losmiembros de nuestra familia ejemplar:

8 1 Introduccion

1 mujer(pam).2 mujer(liz).3 mujer(pat).4 mujer(ann).5 hombre(tom).6 hombre(bob).7 hombre(jim).

Las relaciones unarias (n = 1) se usan normalmente para expresar propiedades delos objetos. Las relaciones binarias (n = 2) definen relaciones entre pares de objetos.La clausula mujer(pam) establece que Pam es una mujer. La misma informacionpodrıa definirse como una relacion genero/2 como genero(pam,mujer).

Nuestra siguiente extension al programa sera definir la relacion vastago/2 comola inversa de la relacion progenitor/2. Para ello podemos definir explıcitamentelas tuplas que satisfacen esta relacion, por ejemplo: vastago(liz,tom, etc. Sinembargo, se puede obtener una definicion mas elegante si tomamos en cuenta que larelacion vastago/2 es la inversa de progenitor/2 y que progenitor/2 ya fue definida.La alternativa se basa en el siguiente enunciado logico: Para todo X y para todo Y ,Y es un vastago de X si existe un X que es progenitor de un Y . Esta formulaciones muy parecida al formalismo usado en Prolog. La clausula correspondiente es lasiguiente:

1 vastago(Y,X) :- progenitor(X,Y).

La clausula puede leerse tambien como: Si X es un progenitor de Y enton-ces Y es un vastago de X . A este tipo de clausulas se les conoce como reglas.Existe una diferencia fundamental entre los hechos y las reglas. Un hecho comoprogenitor(tom,liz) es algo que es siempre, incondicionalmente, verdade-ro. Las reglas especifican cosas que son ciertas si alguna condicion se satisface. Porello decimos que las reglas tienen:

Una parte condicional (el lado derecho de la regla o cuerpo de la regla).Una conclusion (el lado izquierdo de la regla o cabeza de la regla).

¿Que hace Prolog cuando se le plantea una meta como la siguiente?

?- vastago(liz,tom).

No existe ningun hecho sobre vastagos en nuestro programa, por lo tanto, launica alternativa es considerar la aplicacion de la regla sobre los vastagos. La reglaes general, en el sentido que es aplicable a cualquier objeto X e Y, por lo que puedeser aplicada a constantes como liz y tom. Para aplicar la regla a liz y a tom esnecesario substituir Y por liz y X por tom. Con tal substitucion, obtenemos uncaso especial de nuestra regla:

vastago(liz,tom) :- progenitor(tom,liz).

1.2 Una breve introduccion a Prolog 9

La parte condicional de la regla es ahora:

progenitor(tom,liz).

Ahora Prolog tratara de encontrar si esta condicion es verdadera, de forma que lameta inicial:

vastago(liz,tom).

ha sido substituida por una sub-meta progenitor(tom,liz). Esta nuevasub-meta puede satisfacerse facilmente a partir de los hechos conocidos por el pro-grama, lo cual significa que la conclusion de la regla tambien es verdadera, y Prologresponde con exito:

?- vastago(liz,tom).Yes

Especifiquemos ahora la relacion madre/2 a partir del siguiente enunciado logi-co: Para toda X e Y , X es madre de Y si X es progenitor de Y y X es mujer. Esto setraduce a Prolog como:

1 madre(X,Y) :- progenitor(X,Y), mujer(X).

La coma en el cuerpo de la regla, indica una conjuncion: ambas condicionesdeben ser verdaderas para que la conclusion lo sea.

Las relaciones abuela/2 y hermana/2 pueden definirse como:

1 abuela(X,Y) :- progenitor(X,Z), progenitor(Z,Y), mujer(X).2 hermana(X,Y) :- progenitor(Z,X), progenitor(Z,Y), mujer(X).

Observen, en el caso de hermana/2, la manera de especificar que X e Y tienen unmismo progenitor. La condicion de esta regla se lee: existe un Z que es progenitor deX y el mismo Z es progenitor de Y y X es mujer. Graficamente la relacion hermana/2se muestra en la figura 1.3. Ahora podemos preguntar:

?- hermana(ann,pat).Yes

Tras nuestra primer pregunta sobre esta relacion, podemos concluir que su defi-nicion es correcta, pero tiene un sutil error que se revela al preguntar:

?- hermana(X,pat).X = ann ;X = pat ;No

10 1 Introduccion

Z

X

progenitor

Y

progenitor

hermana

mujer

Figura 1.3 La relacion hermana.

¿Es correcto que Pat sea su propia hermana? Ese es el comportamiento que es-perabamos de la definicion de hermana/2, y se debe a que no hay nada que diga queX e Y deben ser ¡diferentes! Esto se puede corregir definiendo hermana como:

1 hermana(X,Y) :-2 progenitor(Z,X),3 progenitor(Z,Y),4 mujer(X),5 dif(X,Y).

De forma que:

?- hermana(X,pat).X = ann ;No

Resumiendo:

Los programas Prolog pueden extenderse facilmente agregando nuevas clausulas.Las clausulas en Prolog son de tres tipos: hechos, reglas y metas.Los hechos declaran cosas que son verdaderas siempre, incondicionalmente.Las reglas declaran cosas que son verdaderas dependiendo de ciertas condicio-nes.Por medio de las preguntas el usuario puede computar que cosas son verdaderas.Las clausulas de Prolog tienen cabeza y cuerpo. El cuerpo es una lista de metasseparadas por comas. Las comas implican conjuncion.Los hechos son clausulas con el cuerpo vacıo; las preguntas tienen la cabezavacıa; y las reglas tienen cabeza y cuerpo.En el curso de una computacion, las variables pueden ser substituidas por otrosobjetos.Las variables se asumen cuantificadas universalmente. La cuantificacion existen-cial solo es posible en las variables que aparecen en el cuerpo de una clausula. Por

1.2 Una breve introduccion a Prolog 11

ejemplo la clausula tiene hijo(X) :- progenitor(X,Y) puede leersecomo: Para todo X , X tiene un hijo si existe un Y y X es progenitor de Y .

1.2.3. Definicion de reglas recursivas

Agreguemos una relacion nueva a nuestro programa: la relacion ancestro/2. Estarelacion sera definida en terminos de la relacion progenitor/2. La definicion com-pleta puede expresarse por medio de dos reglas. La primera definiendo al ancestroinmediato (progenitor) y la segunda a los ancestros no inmediatos. Decimos que al-guien X es ancestro indirecto de alguien Z, si hay una cadena de progenitores desdeX hasta Z, como lo ilustra la figura 1.4. En nuestro ejemplo de la figura 1.1, Tom esancestro directo de Liz e indirecto de Pat.

X

Y

progenitorancestro

X

progenitor

progenitor

Y

progenitor

ancestro

Figura 1.4 La relacion ancestro en terminos de progenitor directo e indirecto.

La primera regla es muy sencilla y se expresa en Prolog como:

1 ancestro(X,Z) :- progenitor(X,Z).

La segunda regla es mas complicada porque las cadenas de progenitores presen-tan un problema: ¡no sabemos cuantas veces hay que aplicar la relacion progenitor!Un primer intento podrıa ser algo como:

1 ancestro(X,Z) :-2 progenitor(X,Z).3 ancestro(X,Z) :-4 progenitor(X,Y),

12 1 Introduccion

5 progenitor(Y,Z).6 ancestro(X,Z) :-7 progenitor(X,Y0),8 progenitor(Y0,Y1),9 progenitor(Y1,Z).

10 ...

Lo cual resulta en un programa largo y, peor aun, que solo funciona para unnumero limitado de ancestros, en el ejemplo: padres, abuelos y bisabuelos. Es decir,esta definicion de ancestro/2 es correcta pero incompleta.

Existe una formulacion elegante y completa de la relacion ancestro/2, comple-ta en el sentido que puede computar cualquier ancestro, independientemente de lalongitud de la cadena de progenitores que deba aplicarse. La idea central es definirancestro en terminos de si misma:

1 ancestro(X,Z) :-2 progenitor(X,Z).3

4 ancestro(X,Z) :-5 progenitor(X,Y),6 ancestro(Y,Z).

Ahora podemos preguntar ¿De quien es ancestro Pam?

?- ancestro(pam,X).X = bob ;X = ann ;X = pat ;X = jim ;No

O ¿Quienes son los ancestros de Jim?

?- ancestro(X,jim).X = pat ;X = pam ;X = tom ;X = bob ;No

Resumiendo:

Las reglas recursivas definen conceptos en terminos de ellos mismos.Estan definidas por al menos dos casos: uno terminal (no recursivo) y la llamadarecursiva.Una relacion recursiva define intenSionalmente un concepto.intenSional 6= intenCional.

1.3 ¿Como computa Prolog una solucion? 13

1.3. ¿Como computa Prolog una solucion?

Una pregunta a Prolog es siempre una secuencia de una o mas metas. Para res-ponder, Prolog trata de satisfacer estas metas. ¿Que significa satisfacer una meta?Satisfacer una meta implica demostrar que la meta es verdadera, asumiendo quelas relaciones en el programa logico son verdaderas. Satisfacer una meta significaentonces demostrar que la meta es una consecuencia logica de los hechos y reglasdefinidas en un programa. Si la pregunta contiene variables, Prolog necesita tambienencontrar cuales son los objetos particulares (que remplazaran a las variables) paralos cuales la meta se satisface. La asignacion de valores a variables es mostrada alusuario. Si Prolog no puede demostrar para alguna asignacion de valores a variables,que las metas siguen logicamente del programa, la respuesta a la pregunta sera No.

En terminos matematicos, la interpretacion de un programa en Prolog es comosigue: Prolog acepta hechos y reglas como un conjunto de axiomas, y el usuarioplantea preguntas como un teorema; entonces Prolog trata de probar este teorema,es decir, demostrar que el teorema se sigue logicamente de los axiomas.

Veamos un ejemplo clasico. Sean los axiomas:

Todos los hombres son falibles.Socrates es un hombre.

Un teorema que logicamente sigue de estos dos axiomas es:

Socrates es falible.

El primer axioma puede reescribirse como: Para toda X , si X es un hombre,entonces X es falible. El ejemplo puede entonces traducirse a Prolog como sigue:

1 falible(X) :- hombre(X).2 hombre(socrates).

y

?- falible(socrates)Yes

Un ejemplo mas complicado, tomado de la familia de la figura 1.1, es la meta: ?-ancestro(tom,pat). Sabemos que progenitor(bob,pat) es un hecho.Podemos derivar entonces que ancestro(bob,pat). Observen que este hechoderivado no puede ser encontrado explıcitamente en nuestro programa sobre la fa-milia, pero puede derivarse a partir de los hechos y reglas en el programa. Un pasoen la inferencia de este tipo, puede ser escrito como: progenitor(bob,pat)⇒ancestro(bob,pat).

El proceso completo de inferencia en dos pasos puede escribirse como:

14 1 Introduccion

progenitor(bob, pat)⇒ ancestro(bob, pat)progenitor(tom,bob)∧ancestro(bob, pat)⇒ ancestro(tom, pat)

A este tipo de secuencias se les conoce como secuencias de prueba ¿Como en-cuentra Prolog una secuencia de prueba?

Prolog encuentra la secuencia de prueba en orden inverso al que acabamos depresentar. En lugar de comenzar con los hechos simples especificados en el progra-ma, Prolog comienza con las metas y, usando reglas, substituye la meta actual porsub-metas, hasta que estas llegan a resolverse por hechos simples. Dada la pregunta:

?- ancestro(tom,pat).

Prolog tratara de satisfacer esta meta. Para ello, tratara de encontrar una clausulaen el programa, a partir de la cual la meta dada pueda seguirse logicamente. Obvia-mente, las unicas reglas acerca de la relacion ancestro/2 son:

1 ancestro(X,Z) :-2 progenitor(X,Z).3

4 ancestro(X,Z) :-5 progenitor(X,Y),6 ancestro(Y,Z).

Decimos que la cabeza de estas reglas coincide o corresponde (match) con lameta planteada. Las reglas representan formas alternativas en las que Prolog pue-de resolver la meta. Prolog intentara resolver la pregunta con la primer clausula queaparece en el programa (lıneas 1 y 2). Puesto que la meta es ancestro(tom,pat),las variables de la regla pueden ser substituidas conforme a X/tom y Z/pat. Lameta original ancestro(tom,pat), es entonces remplazada por la sub-metaprogenitor(tom,pat). El paso consistente en usar una regla para transformaruna meta en una sub-meta, se muestra graficamente en la figura 1.5.

ancestro(tom, pat)

progenitor(tom, pat)

ancestro(X,Z) :- progenitor(X,Z)

Figura 1.5 El primer paso de la ejecucion. La meta de arriba es verdadera si la meta de abajo esverdadera.

1.3 ¿Como computa Prolog una solucion? 15

Como no hay una clausula en el programa que coincida con la nueva sub-metaprogenitor(tom,pat), la sub-meta falla. Ahora Prolog vuelve atras (back-track) para evaluar de forma alternativa su meta original. Ahora intentara la segun-da clausula del programa (lıneas 4–6). Como antes, las variables de la meta tomanlos valores: X/tom y Z/pat. Pero Y no toma valor alguno aun. La meta es rem-plazada por las sub-metas: progenitor(tom,Y), ancestro(Y,pat). Laejecucion de este nuevo paso se muestra en la figura 1.6.

ancestro(tom,pat)

progenitor(tom,pat) progenitor(tom,Y)ancestro(Y,pat)

No

ancestro(X,Z) :- progenitor(Z,X) ancestro(X,Z) :- progenitor(X,Y), ancestro(Y,Z)

Figura 1.6 El segundo paso de la ejecucion. Dos sub-metas son generadas.

Enfrentado ahora el problema de resolver dos sub-metas, Prolog intentara satis-facer la primer sub-meta definida en el programa (¿Porque?). La primer sub-meta seresuelve facilmente pues coincide con uno de los hechos del programa. Esto obli-ga a que Y tome el valor de bob, de forma que la segunda sub-meta se vuelveancestro(bob,pat).

Para satisfacer esta sub-meta, Prolog usara nuevamente la primer clausula delprograma (lıneas 1 y 2). Como en este paso se hace una nueva llamada a esta re-gla, en realidad Prolog utiliza variables diferentes a la llamada del paso anterior,renombrando las variables como sigue:

1 ancestro(X’,Z’) :- progenitor(X’,Z’).

Lo cual conduce a la substitucion de variables: X’/bob y Z’/pat. La meta esremplazada por progenitor(bob,pat). Esta meta es satisfecha porque coin-cide con uno de los hechos del programa. Graficamente este proceso se muestra enla figura 1.7.

Con esta explicacion, estudien la siguiente sesion en Prolog:

?- trace.Yes[trace] ?- ancestro(tom,pat).

Call: (7) ancestro(tom, pat) ? creepCall: (8) progenitor(tom, pat) ? creepFail: (8) progenitor(tom, pat) ? creepRedo: (7) ancestro(tom, pat) ? creepCall: (8) progenitor(tom, _L345) ? creepExit: (8) progenitor(tom, bob) ? creepCall: (8) ancestro(bob, pat) ? creep

16 1 Introduccion

ancestro(tom,pat)

progenitor(tom,pat) progenitor(tom,Y)ancestro(Y,pat)

No

ancestro(X,Z) :- progenitor(Z,X) ancestro(X,Z) :- progenitor(X,Y), ancestro(Y,Z)

ancestro(bob,pat)

progenitor(bob,pat)

progenitor(tom,bob)Y = bob

ancestro(X,Z) :- progenitor(Z,X)

Yes

Figura 1.7 El segundo paso de la ejecucion. Dos sub-metas son generadas.

Call: (9) progenitor(bob, pat) ? creepExit: (9) progenitor(bob, pat) ? creepExit: (8) ancestro(bob, pat) ? creepExit: (7) ancestro(tom, pat) ? creep

Yes

1.4. Organizacion del curso

Durante el curso revisaremos tanto el fundamento teorico de la programacionlogica, como el uso de Prolog para resolver problemas propios de la inteligenciaartificial. La razon de esto debe ser evidente ya: estamos ante una herramienta que esa su vez sujeto de estudio de la IA. Este texto de apoyo esta dividido en dos partes:Fundamentos teoricos y Prolog; sin que esto implique que ambos aspectos seranrevisados estrictamente en este orden. Hay un tercer componente que se cubrira conlecturas complementarias y el desarrollo de un proyecto final: las aplicaciones de laprogramacion logica.

Con respecto a los fundamentos teoricos, iniciaremos con un recordatorio de lalogica de primer orden (capıtulo 2). Posteriormente revisaremos los conceptos declausula y programa definitivos (capıtulo 3) y el principio de resolucion (capıtulo4). Continuaremos con el concepto de negacion (capıtulo 5) y cerraremos la primera

1.4 Organizacion del curso 17

parte del curso con algunas consideraciones sobre el corte y la aritmetica (capıtulo6).

La segunda parte inicia con una introduccion menos breve sobre el lenguaje(capıtulo 7) y continua con una serie de aplicaciones de Prolog a problemas pro-pios de la IA: busquedas en espacios de soluciones (capıtulo 8), sistemas expertos(capıtulo 9), induccion de arboles de decision (capıtulo 10), y planeacion (capıtulo11).

De ser posible, concluiremos el curso con algunos aspectos de meta-programacion,programacion por restricciones y programacion de agentes.

Parte IFormalismos

Capıtulo 2Logica de Primer Orden

Resumen En terminos generales, la Programacion Logica concierne al uso de lalogica para representar y resolver problemas. Mas adelante precisaremos que, enrealidad, usaremos una logica restringida a clausulas de Horn y la resolucion comoregla de inferencia [11]. Por ahora, este capıtulo introduce los conceptos de la logicade primer orden necesarios para abordar los aspectos formales de la ProgramacionLogica. Para ello, se adopta un enfoque basado en sistemas formales, que nos per-mita describir el lenguaje, la teorıa del modelo y la teorıa de prueba de la logicade primer orden. Con este aparato, se introducen los conceptos de unificacion yresolucion como regla de inferencia.

2.1. Introduccion

Cuando describimos situaciones de nuestro interes, solemos hacer uso de enun-ciados declarativos. Decimos que estos enunciados son declarativos en el sentidolinguıstico del termino, esto es, se trata de expresiones del lenguaje natural que sono bien verdaderas, o bien falsas; en contraposicion a los enunciados imperativose interrogativos. La logica proposicional es declarativa en este sentido, las propo-siciones representan hechos que se dan o no en la realidad. La logica de primerorden tienen un compromiso ontologico mas fuerte [17], donde la realidad impli-ca ademas, objetos y relaciones entre ellos. Consideren los siguientes ejemplos deenunciado declarativo:

1. Julia es madre y Luis es hijo de Julia.2. Toda madre ama a sus hijos.

donde el enunciado (1) se refiere a los objetos de discurso Julia y Luis, usando pro-piedades de estos objetos, como ser madre; ası como relaciones entre estos, comohi jo. El enunciado (2) se refiere a relaciones que aplican a todas las madres, en tantoque objetos de discurso. A esto nos referimos cuando hablamos de representacion

21

22 2 Logica de Primer Orden

de un problema en el contexto de la Programacion Logica, a describir una situacionen terminos de objetos y relaciones entre ellos.

Si se aplican ciertas reglas de razonamiento a tales representaciones, es posibleobtener nuevas conclusiones. Esto concierne a la resolucion de problemas en Pro-gramacion Logica. Por ejemplo, conociendo (1) y (2) es posible inferir (vıa ModusPonens) que:

3. Julia ama a Luis.

La idea central de la programacion logica es describir los objetos que conformanun universo de discurso, personas en el ejemplo; ası como las relaciones entreellos, siguiendo con el ejemplo hi jo y madre; y computar tales descripciones paraobtener conclusiones como (3). Al describir el problema que queremos resolver,tambien podemos hacer uso de funciones, relaciones en las cuales solo hay un valordada una entrada. Por ejemplo, “madre de” puede representarse como una funcion(todo hijo tiene una sola madre), pero “hijo de” no. Esto se ilustra en la grafica 2.1.

juana

luismaria

pedro

madre demadre de

juana

luismaria

pedro

hijo dehijo de

Figura 2.1 La relacion madre de es una funcion; mientras que hijo de no lo es.

Como en todo sistema formal, es necesario especificar cuidadosamente la sin-taxis de tales enunciados declarativos, es decir, que expresiones pertenecen al len-guaje de la logica de primer orden, y cuales no; la semantica de estas expresiones,es decir que hace que una expresion sea verdadera o falsa; ası como las reglas derazonamiento que permiten concluir (3) a partir de (1) y (2). Tales cuestiones son eltema de estudio de la logica matematica.

Esta sesion del curso introduce los elementos de la logica de primer orden, nece-sarios para abordar la resolucion como regla de inferencia en logica de primer ordeny su uso en el lenguaje de programacion Prolog. El material aquı presentado esta ba-sado principalmente en los textos de Michael R. Genesereth y Nils J. Nilsson [5],capıtulo 2; y el de Ulf Nilsson y Jan Maluszynski [12], capıtulo 1. Una lectura com-plementaria a estos textos son los capıtulos 8 y 9 del texto de Stuart Russell y PeterNorvig [17].

2.3 El lenguaje de la logica de primer orden 23

2.2. Sistemas formales

La especificacion cuidadosa de la sintaxis y semantica de la logica de primerorden, se consigue definiendo a esta ultima como un sistema formal. Para ello, esnecesario considerar tres aspectos:

Languaje. Este elemento esta asociado a la sintaxis de la logica de primer ordeny de los programas logicos. El lenguaje de un sistema formal esta dado por unconjunto de sımbolos conocido como alfabeto y una serie de reglas de cons-truccion o sintacticas. Una expresion es cualquier secuencia de sımbolos perte-necientes al alfabeto (primarios). Cualquier expresion es, o no es, una formulabien formada (fbf). Las formulas bien formadas son las expresiones que puedenformarse con los sımbolos del alfabeto a partir de las reglas de construccion ypor tanto, pertenecen al languaje de la logica de primer orden.Teorıa de modelo. Este elemento esta asociado a la semantica de la logica deprimer orden. La teorıa del modelo establece la interpretacion de las fbfs en unsistema formal. Su funcion es relacionar las fbfs con alguna representacion sim-plificada de la realidad que nos interesa, para establecer cuando una fbf es falsa ycuando verdadera. Esta version de realidad corresponde a lo que informalmentellamamos “modelo”. Sin embargo, en logica, el significado de “modelo” esta ınti-mamente relacionado con el lenguaje del sistema formal: si la interpretacion Mhace que la fbf α1 sea verdadera, se dice que M es un modelo de α o que Msatisface α , y se escribe M |= α . Una fbf es valida si toda interpretacion es unmodelo para ella.Teorıa de prueba. Este elemento esta asociado con el razonamiento deductivo.La teorıa de la prueba tiene como objetivo hacer de cada enunciado matemati-co una formula demostrable y rigurosamente deducible. Para ello, la actividadmatematica deberıa quedar reducida a la manipulacion de sımbolos y sucesio-nes de sımbolos regulada por un conjunto de instrucciones dadas al respecto. Laconstruccion de tal teorıa implica, ademas del lenguaje del sistema formal, unsubconjunto de fbf que tendran el papel axiomas en el sistema, y un conjuntode reglas de inferencia que regulen diversas operaciones sobre los axiomas. Lasfbf obtenidas mediante la aplicacion sucesiva de las reglas de inferencia a partirde los axiomas se conocen como teoremas del sistema.

2.3. El lenguaje de la logica de primer orden

Basicamente, la logica de primer orden, tambien conocida como calculo de pre-dicados, introduce un conjunto de sımbolos que nos permiten expresarnos acerca

1 El sımbolo α se usa aquı como una variable meta-logica, es decir, una variable que tiene comoreferente el lenguaje del sistema formal mismo, y por lo tanto, no forma parte del lenguaje delsistema en si. Se usaran letras griegas como variables meta-logicas.

24 2 Logica de Primer Orden

de los objetos en un dominio de discurso dado. El conjunto de todos estos ob-jetos se conoce como universo de discurso (U ). Los miembros del universo dediscurso pueden ser objetos concretos, ej., un libro, un robot, etc; abstractos, ej.,numeros; e incluso, ficticios, ej., unicornios, etc. Un objeto es algo sobre lo cualqueremos expresarnos. Como ejemplo, consideren el multi citado mundo de losbloques [5] que se muestra en la figura 2.2. El universo de discurso para tal esce-nario es el conjunto que incluye los cinco bloques, la el brazo robotico y la mesa:{a,b,c,d,e,brazo,mesa}.

Mesa

B

A

C

D

E

Brazo robótico

Figura 2.2 El mundo de los bloques, usado para ejemplificar el calculo de predicados.

Una funcion es un tipo especial de relacion entre los objetos del dominio dediscurso. Este tipo de relaciones mapea un conjunto de objetos de entrada a unobjeto unico de salida. Por ejemplo, es posible definir la funcion parcial sombreroque mapea un bloque al bloque que se encuentra encima de el, si tal bloque existe.Las parejas correspondientes a esta funcion parcial, dado el escenario mostrado en lafigura 2.2 son: {(b,a),(c,d),(d,e)}. El conjunto de todas las funciones consideradasen la conceptualizacion del mundo se conoce como base funcional.

Un segundo tipo de relacion sobre los objetos del dominio de discurso son lospredicados. Diferentes predicados pueden definirse en el mundo de los bloques, ej.,el predicado sobre que se cumple para dos bloques, si y solo si el primero esta inme-diatamente encima del segundo. Para la escena mostrada en la figura 2.2, sobre/2 sedefine por los pares {(a,b),(d,c),(e,d)}. Otro predicado puede ser libre/1, que secumple para un bloque si y solo si este no tiene ningun bloque encima. Este predica-do tiene los siguientes elementos {a,e}. El conjunto de todos los predicados usadosen la conceptuacion se conoce como base relacional.

Para universos de discurso finitos, existe un lımite superior en el numero posiblede predicados n-arios que pueden ser definidos. Para un universo de discurso decardinalidad b (cardinalidad es el numero de elementos de un conjunto), existen bn

distintas n-tuplas. Cualquier predicado n-ario es un subconjunto de estas bn tuplas.Por lo tanto, un predicado n-ario debe corresponder a uno de maximo 2(bn) conjuntosposibles.

Ademas de las funciones y predicados, la flexibilidad de la logica de primerorden resulta del uso de variables y cuantificadores. Las variables, cuyos valores

2.3 El lenguaje de la logica de primer orden 25

son objetos del universo de discurso, se suelen representar por cualquier secuenciade caracteres que inicie con una mayuscula. El cuantificador “para todo” (∀) nospermite expresar hechos acerca de todos los objetos en el universo del discurso, sinnecesidad de enumerarlos. Por ejemplo, toda madre . . . El cuantificador “existe”(∃) nos permite expresar la existencia de un objeto en el universo de discurso concierta propiedad en partıcular, por ejemplo, ∃X libre(X)∧ enLaMesa(X) expresaque hay al menos un objeto que no tiene bloques sobre el y aue se encuentra sobrela mesa.

2.3.1. Sintaxis de la logica de primer orden

Los sımbolos primarios de la logica de primer orden se obtienen al considerar unconjunto numerable de variables, sımbolos de predicado y sımbolos de funciones.Se asume que los miembros del conjunto Var toman valores en el universo de dis-curso. Asociado a cada predicado y funcion, hay un numero natural conocido comosu aridad, que expresa su numero de argumentos. Los predicados de aridad 0 seasumen como variables proposicionales. Las funciones de aridad 0 se asumen comoconstantes. Considerando los operadores logicos y los cuantificadores, tenemos quelos sımbolos primarios o alfabeto del lenguaje de la logica de primer orden son losque se muestran en la tabla 2.1

Conjunto de constantes: ConstConjunto de variables: VarConjunto de predicados: PredConjunto de funciones: FuncOperadores monarios: ¬ (negacion)Operadores binarios: ∨ (disyuncion)Cuantificadores: ∀ (cuantificador universal)Parentesis: (, )

Cuadro 2.1 Alfabeto del lenguaje de la logica de primer orden.

El lenguaje del calculo de predicados LFOL se especifica recursivamente comosigue: Primero definimos un conjunto de terminos del lenguaje Term, como la unionde constantes y variables Const ∪ Var; ası como la aplicacion de las funciones enFunc a una secuencia de terminos, cuyo tamano queda determinado por la aridad dela funcion. Recuerden que las funciones de aridad cero representan constantes. Lassiguientes reglas sintacticas expresan que los terminos son fbf en el lenguaje:

Sintaxis 1 Si α ∈Const, entonces α ∈ Term

Sintaxis 2 Si α ∈Var, entonces α ∈ Term

Sintaxis 3 Si α/n ∈ Func, entonces α(φ1, . . . ,φn) ∈ Term ssi φi=1,...,n ∈ Term.

26 2 Logica de Primer Orden

Al igual que en el caso de las funciones, la sintaxis de los predicados involucra laaridad del predicado y que sus argumentos sean a su vez terminos. Recuerden quelos predicados de aridad cero se interpretan como variables proposicionales:

Sintaxis 4 Si α/n ∈ Pred, entonces α(φ1, . . . ,φn) ∈LFOL ssi φi=1,...,n ∈ Term.

La sintaxis de la negacion y la disyuncion se definen como:

Sintaxis 5 Si α ∈LFOL, entonces ¬α ∈LFOL

Sintaxis 6 Si α ∈LFOL y β ∈LFOL, entonces (α ∨β ) ∈LFOL

La sintaxis del cuantificador universal es como sigue:

Sintaxis 7 Si α ∈ LFOL y X ∈ Vars es una variable que ocurre en α , entonces∀X α ∈LFOL

Las definiciones de la conjuncion, la implicacion material, la equivalencia mate-rial, verdadero y falso, son como en la logica proposicional:

Definicion 1 (conjuncion) (α ∧β ) =de f ¬(¬α ∨¬β );

Definicion 2 (implicacion material) (α ⇒ β ) =de f (¬α ∨β );

Definicion 3 (equivalencia material) (α ≡ β ) =de f ((α ⇒ β )∧ (β ⇒ α));

Definicion 4 (falso) f =de f ¬α ∧α;

Definicion 5 (verdadero) t =de f ¬f

La definicion del cuantificador existencial es la siguiente:

Definicion 6 (cuantificador existencial) ∃X α =de f ¬(∀X ¬α)

Siendo estrictos, el cuantificador propiamente dicho, es el sımbolo de cuantifica-dor seguido de una variable, puesto que ∀X y ∀Y tienen significados diferentes. Enuna fbf de la forma ∀X α , se dice que la fbf α esta en el alcance del cuantificador∀X . En tal caso, se dice que la ocurrencia de X en α esta acotada, en caso contrariose dice que la ocurrencia de la variable es libre. Por ejemplo, en ∀X sobre(X ,Y )la variable X esta acotada, mientras que Y esta libre. Un termino sin variables seconoce como termino de base.

2.4. La semantica de la logica de primer orden

Antes de introducir las definiciones formales de la semantica de la logica de pri-mer orden, consideremos algunas expresiones posibles en esta logica, usando comoejemplo el mundo de los bloques (Figura 2.2). Si queremos expresar que al menosalgun bloque no tiene nada encima, podemos usar los predicados bloque/1 y libre/1en la siguiente expresion: ∃X bloque(X)∧ libre(X). Esta fbf expresa que existe un

2.4 La semantica de la logica de primer orden 27

X tal que X es un bloque y X esta libre (no tiene otro bloque encima). Observen quecuando usamos cuantificadores, siempre tenemos en mente el universo de discursoen cuestion o dominio. El dominio puede especificarse en termino de conjuntos.Luego, si el dominio D es el conjunto de constantes {a,b,c,d,e,brazo,mesa}, po-demos decir que B ⊂ D = {a,b,c,d,e} es el conjunto de bloques en D. Entonces,es posible plantear una expresion equivalente a ∃X bloque(X)∧ libre(X), usando lafbf ∀X libre(x), si especificamos que libre/1 tiene como dominio B.

Una interpretacion del predicado libre/1 es un subconjunto de B tal que si unbloque esta libre, pertenece a este subconjunto. Para un predicado de aridad dos,como sobre/2 cuyo dominio son los bloques B×B, podemos decir que su interpre-tacion es un subconjunto de B×B. En general, para un predicado de aridad n, suinterpretacion es un subconjunto en Dn.

2.4.1. Teorıa de modelo de la logica de primer orden

Para obtener un modelo para el lenguaje LFOL formamos el par M = 〈D,V 〉,donde D es el universo de discurso, ej. cualquier coleccion de objetos sobre la quequeremos expresarnos, y la interpretacion V es una funcion, tal que:

Para cualquier predicado α de aridad n, V (α) regresa las n-tuplas que correspon-den a la interpretacion del predicado. En el ejemplo, siguiendo nuevamente lafigura 2.2, consideren el predicado sobre/2. Su interpretacion es un subconjuntode D2 = D×D. Para la escena mostrada, V (sobre) = {(a,b),(e,d),(d,c)}.Para una constante, la funcion V regresa la misma constante, ej. V (a) = a.

Algunas veces la expresion V (α) se abrevia αV . Una posible interpretacion Vpara la escena del mundo de los bloques mostrada en al figura 2.2, es:

aV = a

bV = b

cV = c

dV = d

eV = e

sobreV = {(a,b),(e,d),(d,c)}enLaMesaV = {b,c}

libreV = {a,e}porEncimaV = {(a,b),(e,d),(e,c),(d,c)}

Todo esto puede especificarse formalmente con la siguiente definicion:

28 2 Logica de Primer Orden

Definicion 7 (Interpretacion) Una interpretacion V , con respecto a un dominio dediscurso D, es una funcion que satisface las siguientes propiedades: i) Si α ∈Const,Entonces V (α) = α; ii) Si α/n ∈ Pred, Entonces V (α)⊆ Dn.

Observen que las variables no estan incluidas en la interpretacion. Interpretar lasvariables de manera independiente a otros sımbolos en el lenguaje, es una practicaaceptada. Decimos que U es una asignacion de variables basada en el modeloM = 〈D,V 〉 si para todo α ∈ Var, U(α) ∈ Term. Por ejemplo, en el mundo de losbloques XU = a, es una asignacion de variables. Esta abreviatura a veces se expandecomo U = {X\a} y se conoce como substitucion.

Una interpretacion V y una asignacion de variables U pueden combinarse en unaasignacion conjunta TVU que aplica a los terminos de primer orden en general. Laasignacion de terminos T dadas la interpretacion V y la asignacion de variablesU , es un mapeo de terminos a objetos del universo de discurso que se define comosigue:

Semantica 1 Si α ∈Const, entonces TVU (α) = V (α).

Semantica 2 Si α ∈Var, entonces TVU (α) = U(α).

Semantica 3 Si α ∈ Term y es de la forma α(φ1, . . . ,φn); y V (α) = g; y TVU (φi) =xi, entonces TVU (α(φ1, . . . ,φn)) = g(x1, . . . ,xn).

El concepto de satisfaccion guarda una relacion importante con las interpre-taciones y las asignaciones. Por convencion, el hecho de que el enunciado α seasatisfecho bajo una interpretacion V y una asignacion U , se escribe:

|=V α[U ]

Entonces podemos escribir M |= VU (α) para expresar que α es verdadera enel modelo M = 〈D,V 〉 cuando las variables en α toman valores de acuerdo a laasignacion U . Por ejemplo, M |= VU (sobre(X ,b)) si X\a ∈U .

En realidad, la nocion de satisfaccion varıa dependiendo de la clase del enunciadoα . Ası tenemos que una interpretacion V y una asignacion de variables U satisfacenuna ecuacion, si y solo si la correspondiente asignacion de terminos TVU mapea losterminos igualados a un mismo objeto. Cuando este es el caso, los terminos se dicencorreferenciados:

Semantica 4 M |=V (α = β )[U ] ssi TVU (α) = TVU (β ).

Para el caso de un enunciado atomico que no sea una ecuacion, la satisfaccion secumple si y solo si la tupla formada por los objetos designados por los terminos enel enunciado, es un elemento de la relacion designada por la relacion constante:

Semantica 5 M |=V α(τ1, . . . ,τn)[U ] ssi (TVU (τ1), . . . ,TVU (τn)) ∈V (α) .

Consideren como ejemplo la interpretacion V definida para el mundo de los bo-ques. Puesto que la constante a designa al bloque a y la constante b al bloque b, y

2.5 Inferencia en la logica de primer orden 29

el par ordenado (a,b) es miembro del conjunto que interpreta la relacion sobre, en-tonces es el caso que |=V sobre(a,b)[U ], por lo cual podemos decir que sobre(a,b)es verdadera en esa intepretacion.

Evidentemente:

Semantica 6 M |=V ¬(α)[U ] ssi M 6|=V α[U ].

y:

Semantica 7 M |=V (α ∨β )[U ] ssi M |=V α[U ] o M |= β [U ].

Un enunciado cuantificado universalmente se satisface, si y solo si el enunciadobajo el alcance del cuantificador, se satisface para todas las asignaciones posibles dela variable cuantificada. Un enunciado cuantificado existencialmente se satisface,si y solo si el enunciado bajo el alcance del cuantificador es satisfecho por unaasignacion de variables.

Semantica 8 M |=V ∀X α[U ], ssi para toda β en el universo de discurso, es el casoque M |=V α[U ′], donde U ′(X) = β y U ′(γ) = U(γ) para toda γ 6= X.

Debido a la ultima condicion en esta regla, se dice que U ′ es una asignacion X-alternativa a U . La regla semantica tambien puede leerse como: M |=V ∀X α[U ] sipara toda asignacion de variables X-alternativa U ′, M |=V α[U ′].

Si una interpretacion V safisface a un enunciado α para toda asignacion de varia-bles, se dice que V es un modelo de α . Un enunciado se dice satisfacible si existealguna interpretacion y asignacion de variables que lo satisfaga. De otra forma, sedice que el enunciado es insatisfacible. Una fbf α es valida si y solo si se satisfaceen toda intepretacion y asignacion de variables. Las fbf validas lo son en virtud desu estructura logica, por lo que no proveen informacion acerca del dominio descrito.Por ejemplo p(X)∨¬p(X) es una fbf valida.

2.5. Inferencia en la logica de primer orden

Volvamos al ejemplo de la introduccion:

1. Toda madre ama a sus hijos.2. Julia es madre y Luis es hijo de Julia.

Conociendo (1) y (2) es posible concluir que:

3. Julia ama a Luis.

Podemos formalizar este ejemplo en Logica de Primer Orden como sigue:

1. ∀X ∀Y madre(X)∧hi jo de(Y,X)⇒ ama(X ,Y )2. madre( julia)∧hi jo de(luis, julia)

30 2 Logica de Primer Orden

3. ama( julia, luis)

Una vez que hemos formalizado nuestros enunciados, el proceso de inferenciapuede verse como un proceso de manipulacion de fbf, donde a partir de formulascomo (1) y (2), llamadas premisas, se produce la nueva fbf (3) llamada conclusion.Estas manipulaciones se pueden formalizar mediante reglas de inferencia. Entrelas reglas de inferencia de la logica de primer orden encontramos:

Modus Ponens. O regla de eliminacion de la implicacion. Esta regla dice quesiempre que las fbfs de la forma α y α ⇒ β pertenezcan a las premisas o seanconcluidas a partir de ellas, podemos inferir β :

α α ⇒ β

β(⇒ E)

Eliminacion de cuantificador universal. Esta regla expresa que siempre queuna fbf de la forma ∀Xα pertenezca a las premisas o sea concluida a partir deellas, una nueva fbf puede ser concluida al remplazar todas las ocurrencias libresde X en α por algun termino t que es libre con respecto a X (todas las variablesen t quedan libres al substituir X por t. La regla se presenta como sigue:

∀Xα(X)α(t)

(∀E)

Introduccion de conjuncion. Cuando las fbf α y β pertenezcan a las premisaso sean concluidas a partir de ellas, podemos inferir α ∧β :

α β

α ∧β(∧I)

La correctez de estas reglas puede ser demostrada directamente a partir de ladefinicion de la semantica de las fbf en LFOL. El uso de las reglas de inferenciapuede ilustrarse con el ejemplo formalizado. Las premisas son:

1. ∀X∀Y madre(X)∧hi jo de(Y,X)⇒ ama(X ,Y )2. madre( julia)∧hi jo de(luis, julia)

Al aplicar la eliminacion de cuantificador universal (∀E) a (1) obtenemos:

3. ∀Y (madre( julia)∧hi jo de(Y, julia)⇒ ama( julia,Y )

Al aplicar nuevamente (∀E) a (3) obtenemos:

4. madre( julia)∧hi jo de(luis, julia)⇒ ama( julia, luis)

Finalmente, al aplicar Modus Ponens a (2) y (4):

5. ama( julia, luis)

2.6 Substituciones 31

La conclusion (5) ha sido obtenida rigurosamente, aplicando las reglas de infe-rencia. Esto ilustra el concepto de derivacion. El hecho de que una formula α seaderivable a partir de un conjunto de formulas ∆ se escribe ∆ ` α . Si las reglas deinferencia son consistentes (sound), siempre que ∆ ` α entonces ∆ |= α . Esto es,si nuestra logica es consistente, cualquier fbf que puede ser derivada de otra fbf, estambien una consecuencia logica de esta ultima.

Definicion 8 (Consistencia y completitud) Un conjunto de reglas de inferencia sedice consistente si, para todo conjunto de fbf cerradas (sin ocurrencia de variableslibres) ∆ y cada fbf cerrada α , siempre que ∆ ` α se tiene que ∆ |= α . Las reglasde inferencia se dicen completas si ∆ ` α siempre que ∆ |= α .

2.6. Substituciones

Formalmente, como ya se menciono, una substitucion es un mapeo de las varia-bles del lenguaje a los terminos del mismo:

Definicion 9 (Substitucion) Una substitucion es un conjunto finito de pares de laforma {X1/t1, . . . ,Xn/tn} donde cada tn es un termino y cada Xn es una variable, talque Xi 6= ti y Xi 6= X j si i 6= j. La substitucion vacıa se denota por ε .

Asumamos que Dom({X1/t1, . . . ,Xn/tn}) denota al conjunto {X1, . . . ,Xn}, tam-bien conocido como dominio; y Range({X1/t1, . . . ,Xn/tn}) denota al conjunto{t1, . . . , tn}, tambien conocido como rango. Entonces la regla anterior expresa quelas variables en el dominio de una substitucion son unicas y no incluyen la substitu-cion de la variable por si misma.

La aplicacion Xθ de la substitucion θ a la variable X se define como:

Xθ ={

t Si X/t ∈ θ

X En otro caso

observen que para las variables no incluidas en Dom(θ), θ aparece como la funcionidentidad. Es importante extener el concepto de substitucion a las fbf:

Definicion 10 (Aplicacion) Sea θ una substitucion {X1/t1, . . . ,Xn/tn} y α una fbf.La aplicacion αθ es la fbf obtenida al remplazar simultaneamente ti por toda ocu-rrencia de Xi en α (1≤ i≤ n). αθ se conoce como un caso (instance) de α .

Ejemplos:

ama(X ,Y )∧madre(X){X/ julia,Y/luis}= ama( julia, luis)∧madre( julia)

p( f (X ,Z), f (Y,a)) {X/a,Y/Z,W/b}= p( f (a,Z), f (Z,a))

p(X ,Y ) {X/ f (Y ),Y/b}= p( f (Y ),b)

32 2 Logica de Primer Orden

Definicion 11 (Composicion) Sean θ y σ dos substituciones de la forma:

θ = {X1/s1, . . .Xm/sm}σ = {Y1/t1, . . .Yn/tn}

La composicion θσ se obtiene a partir del conjunto:

{X1/s1σ , . . .Xm/smσ ,Y1/t1, . . .Yn/tn}

de la manera siguiente: eliminar todas las Xi/siσ para las que Xi = siσ (1≤ i≤m)y eliminar tambien aquellas Yj/t j para las cuales Yj ∈ Dom(θ) (1≤ j ≤ n).

Por ejemplo:

{X/ f (Z),Y/W}{X/a,Z/a,W/Y}= {X/ f (a),Z/a,W/Y}

Definicion 12 (Substitucion idempotente) Una substitucion θ se dice idempoten-te si θ = θθ .

Se puede probar que una substitucion θ es idempotente si y solo si Dom(θ)∩Range(θ) = /0, es decir si el dominio y el rango de la substitucion son disjuntos.Otras propiedades de las substituciones son:

Definicion 13 (Propiedades de las substituciones) Sean θ ,α y β substituciones ysea F una fbf. Entonces:

E(θα) = (Eθ)α(θα)β = θ(αβ )εθ = θε = θ

Observen que, aunque las substituciones son asociativas, estas no son conmuta-tivas.

Las substituciones son importantes para definir una regla de inferencia de espe-cial relevancia para nosotros, conocida como la regla de resolucion. Con las defi-niciones introducidas en este capıtulo podemos abordar el tema de los programaslogicos definitivos.

Capıtulo 3Clausulas y Programas Definitivos

Resumen La idea central de la programacion logica es usar la computadora paraobtener conclusiones a partir de descripciones declarativas, como las introducidasen el capıtulo anterior. Estas descripciones, llamadas programas logicos, consistenen un conjunto finito de formulas bien formadas (fbfs) de la logica de primer or-den. La idea central tiene sus raıces en la demostracion automatica de teoremas,sin embargo, pasar de la demostracion automatica de teoremas experimental a laprogramacion logica aplicada, requiere mejoras con respecto a la eficiencia del sis-tema propuesto. Tales mejoras se logran imponiendo restricciones sobre las fbfs dellenguaje utilizado, de forma que podamos usar una poderosa regla de inferenciaconocida como principio de resolucion-SLD. Este capıtulo introduce el conceptode clausula y programa logico definitivos. Mas adelante se introducira el conceptomenos restrictivo de programas generales, pero el paso por los programas definiti-vos es necesario para comprender las bases teoricas de Prolog. El aparato tecnicoaquı presentado se basa principalmente en el texto de Nilsson et al. [12].

3.1. Clausulas definitivas

Consideremos una clase especial de enunciados declarativos del lenguaje natural,que utilizamos para describir hechos y reglas positivos. Un enunciado de este tipopuede especificar:

Que una relacion se mantiene entre elementos del universo de discurso (hechos).Que una relacion se mantiene entre elementos del universo de discurso, si otrasrelaciones se mantienen (reglas).

Consideren los siguientes enunciados en lenguaje natural:

1. Antonio es hijo de Juan.2. Ana es hija de Antonio.3. Juan es hijo de Marcos.

33

34 3 Clausulas y Programas Definitivos

4. Alicia es hija de Juan.5. El nieto de una persona es el hijo del hijo de esa persona.

Estos enunciados pueden formalizarse en dos pasos. Primero, procedemos conlas fbf atomicas que describen hechos:

1. hijo de(antonio, juan)2. hijo de(ana,antonio)3. hijo de(juan,marcos)4. hijo de(alicia,juan)

El ultimo enunciado puede aproximarse como: Para toda X e Y , X es nieto deY si existe alguna Z tal que Z es hijo de Y y X es hijo de Z. En logica de primerorden, esto se escribirıa (observen que la implicacion esta invertida (←) a la usanzade Prolog):

∀X∀Y (nieto de(X ,Y )←∃Z(hi jo de(Z,Y )∧hi jo de(X ,Z)))

Usando las equivalencias de la logica de primer orden (en particular α ⇒ β ≡¬α ∨ β ; y la equivalencia entre cuantificadores ∀Xα ≡ ¬∃X¬α), esta fbf puedeescribirse de diversas maneras:

∀X∀Y (nieto de(X ,Y )∨¬∃Z(hi jo de(Z,Y )∧hi jo de(X ,Z)))

∀X∀Y (nieto de(X ,Y )∨∀Z¬(hi jo de(Z,Y )∧hi jo de(X ,Z)))

∀X∀Y∀Z(nieto de(X ,Y )∨¬(hi jo de(Z,Y )∧hi jo de(X ,Z)))

∀X∀Y∀Z(nieto de(X ,Y )← (hi jo de(Z,Y )∧hi jo de(X ,Z)))

Observen que estas fbf estan cerradas (no contienen variables fuera del alcancede los cuantificadores) bajo el cuantificador universal. Ademas, la regla tiene lasiguiente estructura:

α0← α1∧·· ·∧αn (n≥ 0)

Los bloques de construccion αi de estas fbf, se conocen como literales.

Definicion 14 (Literal) Una literal es un atomo o la negacion de un atomo. Unaliteral positiva es un atomo. Una literal negativa es la negacion de un atomo.

Un ejemplo de literal positiva es hi jo de( juan,marcos). Un ejemplo de literalnegativa es ¬hi jo de( juan,alicia). Si p y q son predicados y f es un functor, en-tonces p(X ,alicia) y q(Y ) son literales positivas. ¬q(alicia, f (Y )) es una literalnegativa.

Definicion 15 (Clausula) Una clausula es una disyuncion finita de cero o mas li-terales.

3.2 Programas definitivos y Metas 35

Definicion 16 (Clausula definitiva) Una clausula se dice definitiva, si tiene exac-tamente una literal positiva.

α0∨¬α1∨·· ·∨¬αn (n≥ 0)

lo cual es equivalente a la forma general de fbf que nos interesaba:

α0← α1∧·· ·∧αn (n≥ 0)

Si n = 0 tenemos por definicion que la literal α0 sera una literal positiva, porlo que la clausula definitiva toma la forma de un hecho. El cuerpo vacıo puederepresentarse por el conectivo nulo �, que es verdadero en toda interpretacion (porsimetrıa tambien se asume un conectivo nulo 2, que es falso en toda interpretacion).Si n > 0 la clausula definitiva toma la forma de una regla, donde α0 se conoce comocabeza de la regla; y la conjuncion α1∧·· ·∧αn se conoce como cuerpo de la regla.

El ejemplo de la relacion nieto de/2 y la regla que lo define, muestra que lasclausulas definitivas usan una forma restringida de cuantificacion existencial, lasvariables que ocurren solo en el cuerpo de la clausula estan cuantificadas existen-cialmente en el cuerpo de la clausula (el mismo ejemplo muestra que esto equivalea que tales variables esten cuantificadas universalmente sobre toda la fbf).

3.2. Programas definitivos y Metas

La definicion de programa definitivo es ahora directa:

Definicion 17 (Programa definitivo) Un programa definitivo es un conjunto finitode clausulas definitivas.

Si una clausula tiene solo literales negativas, estamos hablando de una meta de-finitiva:

Definicion 18 (Meta definitiva) Una clausula sin literales positivas es una metadefinitiva.

← α1∧·· ·∧αn (n≥ 1)

Definicion 19 (Clausula de Horn) Una clausula de Horn es una clausula definitvao una meta definitiva.

Observen que a partir de estas definiciones, la clausula vacıa 2 1 es una metadefinitiva y, por lo tanto, una clausula de Horn.

Adoptar a las clausulas de Horn para abordar los programas y metas definitivos,constituye una restriccion. Por ejemplo, no podemos expresar p(a)∨ p(b). Esta per-dida en expresividad se ve compensada por la ganancia en tratabilidad. Debido asu estructura restringida, las clausulas de Horn son mas faciles de manipular que

1 En realidad, la clausula vacıa tiene la forma 2←� que equivale a 2.

36 3 Clausulas y Programas Definitivos

las clausulas generales. En particular, esto es cierto para la deduccion basada enresolucion-SLD, que resulta completa para las clausulas de Horn.

El significado logico de las metas puede explicarse haciendo referencia a la fbfequivalente cuantificada universalmente:

∀X1 . . .Xm¬(α1∧·· ·∧αn)

donde las Xi son todas variables que ocurren en la meta. Esto es equivalente a:

¬∃X1 . . .Xm(α1∧·· ·∧αn)

Esto puede verse como una pregunta existencial que el sistema tratara de negar,mediante la construccion de un contra ejemplo. Esto es, el sistema tratara de encon-trar terminos ti . . . tm tales que las fbf obtenidas a partir de α1∧·· ·∧αm al remplazarla variable Xi por ti (1 ≤ i ≤ m) son verdaderas en todo modelo del programa. Esdecir, el sistema construira una consecuencia logica del programa que es un caso dela conjuncion de todas las submetas de la meta.

Al dar una meta definitiva, el usuario selecciona un conjunto de conclusionesa ser construıdas. Este conjunto puede ser finito o infinito. El problema de comoconstruir tal conjunto lo veremos al tratar la resolucion SLD.

Ejemplo 1 Tomando en cuenta los hechos y reglas sobre una familia presentadosal principio de esta sesion, el usuario podrıa estar interesado en las siguientesconsultas (se muestra tambien la meta definitiva correspondiente):

Consulta Meta definitiva¿Es Ana hija de Antonio? ← hi jo(ana,antonio)¿Quien es nieto de Ana? ← nieto(X ,ana)¿De quien es nieto Antonio?← nieto(antonio,X)¿Quien es nieto de quien? ← nieto(X ,Y )

Las respuestas obtenidas serıan:

Puesto que la primer meta no contiene variables, la respuesta serıa Si (Yes).Puesto que el programa no contiene informacion sobre los nietos de Ana, larespueta a la segunda consulta es No (o ninguno).Puesto que Antonio es nieto de Marcos, la respuesta obtenida serıa X = marcos.La consulta final obtiene tres respuestas: X = antonio Y = alicia, X = alicia Y =marcos, X = ana Y = juan.

Es posible hacer consultas mas elaboradas como ¿Hay alguna persona cuyosnietos son Antonio y Alicia?

← nieto(antonio,X)∧nieto(alicia,X)

cuya respuesta esperada es X = marcos.

3.3 El modelo mınimo de Herbrand 37

3.3. El modelo mınimo de Herbrand

Los programas definitivos solo pueden expresar conocimiento positivo, tanto loshechos, como las reglas, nos dicen que elementos de una estructura estan en unarelacion, pero no nos dicen cuales no. Por lo tanto, al usar el lenguaje de los pro-gramas definitivos, no es posible construir descripciones contradictorias, es decir,conjuntos de fbf no satisfacibles. En otras palabras, todo programa definitivo tieneun modelo. Recordemos que una interpretacion que hace verdadera una fbf es sumodelo:

Definicion 20 (Modelo) Sea α una fbf y V una interpretacion. V es un modelo deα si |=V α .

Definicion 21 Sea ∆ un conjunto finito de fbf y V una interpretacion. V es un mo-delo de ∆ si |=V α para toda α ∈ ∆ .

Existe una clase interesante de interpretaciones, llamadas de Herbrand en honordel frances Jacques Herbrand. En esta seccion estudiaremos algunas propiedadesde los modelos de Herbrand que explican porque son utiles y necesarios en el con-texto de la programacion logica. Ademas, los modelos de Herbrand proveen unasemantica natural para los programas definitivos.

Comenzaremos definiendo el Universo y la Base de Herbrand:

Definicion 22 (Universo y Base de Herbrand) Sea L un alfabeto de primer ordenque contiene al menos un sımbolo de constante (|Const| ≥ 1). El Universo de Her-brand UL es el conjunto de todos los terminos formados con las constantes y func-tores de L. La Base de Herbrand BL es el conjunto de todos los atomos que puedenformarse con los predicados y los terminos en el Universo de Herbrand UL.

El universo y la base de Herbrand se definen normalmente para un programadado. En ese caso, se asume que el alfabeto L consiste exactamente de aquellossımbolos que aparecen en el programa. Se asume tambien que el programa tiene almenos una constante (de otra forma el dominio estarıa vacıo).

Ejemplo 2 Consideren el siguiente programa definitivo

∆ = {impar(s(0)), impar(s(s(X)))← impar(X)}

Si restringimos el lenguaje L a los sımbolos que aparecen en este programa defini-tivo, tenemos que el universo de Herbrand es:

UL = {0,s(0),s(s(0)),s(s(s(0))), . . .}

Puesto que el programa solo incluye al predicado impar, la base de Herbrandse define como:

BL = {impar(0), impar(s(0)), impar(s(s(0))), . . .}

38 3 Clausulas y Programas Definitivos

Ejemplo 3 Consideren este otro programa ∆ = {p(a),q(a, f (b),q(X ,X)← p(X)}.Sea L es lenguaje de primer orden dado por los sımbolos en ∆ . El Universo deHerbrand UL es el conjunto infinito:

UL = {a,b, f (a), f (b), f ( f (a)), f ( f (b)), . . .}

Y la base de Herbrand es:

BL = {p(a), p(b),q(a,b), p( f (a)), p( f (b)),q(a, f (a)),q(a, f (b)), . . .}

Lo que hace especial a una intrepretacion de Herbrand es que se toma el conjuntode todos los terminos sin variables (UL) como el dominio de la interpretacion. Elmapeo de los terminos a los elementos del dominio es tal que, cada termino sinvariables es mapeado al elementos correspondiente en el dominio. De forma quecada termino sin variables en el lenguaje, se refiere a si mismo en el dominio.

Definicion 23 (Interpretacion de Herbrand) Sea L un lenguaje de primer orden.V es una interpretacion de Herbrand de L si y solo si:

El dominio de V es UL.Para cada constance c ∈ L, V (c) = c.Para cada functor f /n ∈ L, se tiene un mapeo V ( f ) de Un

L a UL definido porV ( f )(t1, . . . , tn) = f (t1, . . . , tn).Para cada predicado p/n ∈ L, V (p)⊆Un

L .

La funcion J f mapea t1, . . . , tn al termino f (t1, . . . , tn) en el Universo de HerbrandUL.

Definicion 24 (modelo de Herbrand) Sea L un lenguaje de primer orden, ∆ unconjunto de fbf en L, y V una interpretacion de Herbrand de L. Si V es un modelode ∆ , se dice que es un modelo de Herbrand de ∆ .

Observen que una interpretacion de Herbrand V esta completamente especificadapor el conjunto de todas las α ∈ BL que son verdaderas bajo V . Podemos por lotanto representar cualquier interpretacion de Herbrand economicamente como unsubconjunto (denotado por tambien V ) de BL. En otras palabras, una interpretacionde Herbrand, es un subconjunto de la Base de Herbrand.

Ejemplo 4 Consideren el programa ∆ en el ejemplo 2. Una posible interpretacionde este programa es imparV = {〈s(0)〉,〈s(s(s(0)))〉}. Una intepretacion de Her-brand se puede especificar mediante una familia de tales relaciones (una por cadasımbolo de predicado).

Ejemplo 5 Consideren ahora algunas interpretaciones de Herbrand de ∆ tal y co-mo se definio en el ejemplo 3:

3.3 El modelo mınimo de Herbrand 39

V1 = {p(a), p(b),q(a,b,),q(b,b)}V2 = {p(a),q(a,a),q(a, f (b))}V3 = {p( f ( f (a))), p(b),q(a,a),q(a, f (b))}V4 = {p(a), p(b),q(a,a),q(b,b),q(a, f (b))}

V2 y V4 son modelos de Herbrand de ∆ = {p(a),q(a, f (b),q(X ,X)← p(X)}. V1y V3 no lo son.

3.3.1. Resultados concernientes a los modelos de Herbrand

Las interpretaciones y los modelos de Herbrand tienen dos propiedades atracti-vas. La primera es pragmatica: para poder determinar si una interpretacion de Her-brand V es un modelo de una fbf cuantificada universalmente ∀α , es suficiente ve-rificar si α es verdadera en V , para todas las asignaciones posibles de las variablesde α .

La segunda razon para considerar las interpretaciones de Herbrand es mas teori-ca. Para el lenguaje restringido de clausulas definitivas, si queremos verificar queuna fbf atomica α es consecuencia de un programa definitivo ∆ basta con verificarque todo modelo de Herbrand de ∆ es tambien un modelo de Herbrand de α .

Para entrar en detalles, es necesaria la siguiente proposicion:

Proposicion 1 Sea ∆ un conjunto de clausulas en un lenguaje de primer orden L.Entonces ∆ tiene un modelo, si y solo si ∆ tiene un modelo de Herbrand.

La prueba de esta proposicion es como sigue: Supongamos que ∆ tiene un mode-lo M. Si definimos una interpretacion V de Herbrand tal que V (α(t1, . . . , tn)) definesolo aquellas extensiones de α que son validas en M), tenemos que V es un modelode Herbrand de ∆ . Dicho de otra forma, un modelo de Herbrand, es un modelo.

Observen que esta proposicion es verdadera solo para conjuntos de clausulas.Por ejemplo, consideren a L como un lenguaje de primer orden formado por lossımbolos en ∆ = {∃X p(X),¬p(a)}. Claramente ∆ tiene un modelo, pero este noes un modelo de Herbrand. La razon es el dominio de la interpretacion. En unainterpretacion de Herbrand, el dominio es UL = {a}, y necesitamos dos constantesal menos en UL para construir un modelo de ∆ .

Hemos mencionado la importancia del concepto de implicacion logica (o con-secuencia logica). Es comun que a partir de un conjunto ∆ y una fbf γ , queremosencontrar si ∆ |= γ . Esto es cierto si cada modelo de ∆ es tambien un modelo de γ .Lo interesante viene ahora:

Proposicion 2 Sea ∆ un conjunto de fbf y α una fbf. Sea S = ∆ ∪{¬α}. Entonces∆ |= α si y solo si S no tiene modelo de Herbrand.

40 3 Clausulas y Programas Definitivos

La prueba de esta proposicion es como sigue: ∆ |= α si y solo si ∆ ∪{¬α} noes satisfacible. Esto es, si S es no satisfacible, lo cual es cierto solo si S no tienemodelos y por lo tanto, no tiene modelo de Herbrand.

Lo que esta proposicion nos dice es que si queremos probar que ∆ |= α , solodebemos considerar modelos de Herbrand de la forma S. Aunque el numero de in-terpretaciones de Herbrand es normalmente infinito, la tarea de investigar interpre-taciones de Herbrand es mas tratable que la de investigar cualquier interpretacionarbitraria, puesto que nos restringimos a un dominio unico definitivo por el Univer-so de Herbrand UL.

Observen que la base de Herbrand de un programa definitivo ∆ es siempre unmodelo de Herbrand del programa. Sin embargo, es un modelo nada interesante,esto es, cada predicado n-ario en el programa es interpretado como la relacion n-aria completa sobre el dominio de los terminos cerrados. ¿Que es lo que hace a unmodelo de programa interesante? En lo que sigue demostraremos la existencia deun modelo mınimo unico, llamado el modelo mınimo de Herbrand de un progra-ma definitivo. Luego mostraremos que este modelo contiene toda la informacionpositiva presente en el programa.

Los modelos de Herbrand de un programa definitivo son subconjuntos de su basede Herbrand. Por lo tanto, la inclusion en conjuntos establece un orden natural entales modelos. Para poder demostrar la existencia de modelos mınimos con respectoa la inclusion es suficiente demostrar que la interseccion de todos los modelos deHerbrand es tambien un modelo de Herbrand.

Teorema 1 (Interseccion de modelos) Sea M una familia no vacıa de modelos deHerbrand de un programa definitivo ∆ . Entonces la interseccion V =

⋂M es un

modelo de Herbrand de ∆ .

La demostracion es como sigue: Supongamos que V no es un modelo de ∆ . Porlo tanto existe una una clausula sin variables en ∆ , de la forma:

α0← α1, . . . ,αn (n≥ 0)

que no es verdera en V . Esto ımplica que V contiene a α1, . . .αn, pero no a α0.Luego, α1, . . . ,αn son miembros de toda interpretacion en la familia M. Mas impor-tante aun, debe existir un modelo Vi ∈M tal que α0 6∈ Vi, de forma que la clausulaα0← α1, . . . ,αn(n ≥ 0) no es verdadera en ese Vi. Por lo tanto Vi no es un modelodel programa ∆ , lo que contradice nuestro supuesto.

Al tomar la interseccion de todos los modelos de Herbrand (se sabe que todoprograma definitivo tiene un modelo de Herbrand BL) de un programa definitivo,obtenemos el modelo mınimo de Herbrand el programa.

Ejemplo 6 Sea ∆ el programa definitivo {masculino(adan), f emenino(eva)} consu interpretacion obvia. ∆ tiene los siguientes modelos de Herbrand:

{masculino(adan), f emenino(eva)}

{masculino(adan),masculino(eva), f emenino(eva)}

3.3 El modelo mınimo de Herbrand 41

{masculino(adan),masculino(eva), f emenino(adan)}

{masculino(adan),masculino(eva), f emenino(eva), f emenino(adan)}

No es complicado confirmar que la interseccion de estos modelos produce unmodelo de Herbrand. Sin embargo, todos los modelos salvo el primero, contienenatomos incompatibles con el significado esperado del programa. Observen tambienque la interseccion de todos los modelos nos lleva a un modelo que corresponde conel significado esperado.

Este ejemplo nos muestra la conexion entre los modelos mınimos de Herbrand yel modelo intentado de un programa definitivo. Este modelo es una abstraccion delmundo a ser descrita por el programa. El mundo puede ser mas rico que el modelomınimo de Herbrand. Por ejemplo hay mas f ememinos que eva. Sin embargo, aque-lla informacion que no se provea explıcitamente (hechos) o implıcitamente (reglas)no puede ser obtenida como respuesta a una meta. Las respuestas corresponden alas consecuencias logicas del programa.

Teorema 2 El modelo mınimo de Herbrand M∆ de un programa definitivo ∆ es elconjunto de todas las consecuencias logicas atomicas de base del programa. Estoes: M∆ = {α ∈ B∆ |∆ |= α}.

La prueba de este teorema pasa por demostrar que M∆ ⊇ {α ∈ BL|∆ |= α} y queM∆ ⊆ {α ∈ B∆ |∆ |= α}.

3.3.2. Construccion del modelo mınimo de Herbrand

La pregunta que emerge es ¿Como podemos construir el modelo mınimo de Her-brand? o ¿Como puede aproximarse sucesivamente por medio de la enumeracionde sus elementos? La respuesta a estas preguntas se da mediante una aproximacionde punto fijo (el punto fijo de una funcion f : D→ D es un elemento x ∈ D tal quef (x) = x) a la semantica de los programas definitivos.

Un programa definitivo esta compuesto de hechos y reglas. Es evidente que todoslos hechos deben incluirse en cualquier modelo de Herbrand. Si la interpretacion Vno incluye el hecho α del programa ∆ , entonces V no es un modelo de Herbrand de∆ .

Ahora consideremos una regla de la forma α0 ← α1, . . . ,αn(n > 0). La reglaespecifica que siempre que α1, . . . ,αn son verdaderas, tambien lo es α0. Esto es,tomando cualquier asignacion de valores θ que haga que la regla no tenga varia-bles sin valor (α0 ← α1, . . . ,αn)θ : Si la interpretacion V incluye a α1θ , . . .αnθ ,debera incluir tambien a α0θ para ser un modelo.

Consideren ahora el conjunto V1 de todos los hechos sin variables de el programa.Es posible utilizar cada regla para aumentar V1 con nuevos elementos que necesa-riamente pertenencen a todo modelo. De modo que se obtiene un nuevo conjuntoV2 que puede usarse para generar mas elementos que pertenecen a todo modelo.

42 3 Clausulas y Programas Definitivos

El proceso se repite mientras puedan generarse nuevos elementos. Los elementosagregados a Vi+1 son aquellos que se siguen inmediatamente de Vi.

La construccion ası obtenida puede formalizarse como la iteracion de una trans-formacion T∆ sobre las interpretaciones de Herbrand de un programa ∆ . La opera-cion se llama operador de consecuencia inmediata y se define como sigue:

Definicion 25 (Operador de consecuencia inmediata) Sea ground(∆) el conjun-to de todas las clausulas con valores asignados a todas sus variables en ∆ . T∆ esuna funcion sobre las interpretaciones de Herbrand de ∆ definida como sigue:

T∆ (V ) = {α0 | α0← α1, . . . ,αn ∈ ground(∆)∧{α1, . . . ,αn} ⊆V}

Para los programas definitivos, se puede mostrar que existe una interpretacionmınima V tal que T∆ (V ) = V y que V es identica al modelo mınimo de Herbrandde ∆ . Mas aun, el modelo mınimo de Herbrand es el limite de la creciente, posible-mente infinita, secuencia de iteraciones:

/0,T∆ ( /0),T∆ (T∆ ( /0)), . . .

Existe una notacion estandar para denotar a los miembros de esta secuencia deinterpretaciones construıdas a partir de ∆ :

T∆ ↑ 0 = /0T∆ ↑ (i+1) = T∆ (T∆ ↑ i)

T∆ ↑ n =∞⋃

i=0

T∆ ↑ i

Ejemplo 7 Tomando ∆ como el programa de impar (ej. 2, tenemos:

T∆ ↑ 0 = /0T∆ ↑ 1 = {impar(s(0))}T∆ ↑ 2 = {impar(s(0)), impar(s(s(s(0))))}

...

T∆ ↑ m = {impar(sn(0)) | n ∈ {1,3,5, . . .}}

Como mencionamos, el conjunto construıdo de esta manera es identico al modelomınimo de Herbrand de ∆ .

Teorema 3 Sea ∆ un programa definitivo y V∆ su modelo mınimo de Herbrand.Entonces:

V∆ es la interpretacion mınima de Herbrand tal que T∆ (V∆ ) = V∆ .V∆ = T∆ ↑ n.

Capıtulo 4Principio de Resolucion

Resumen Este capıtulo introduce el mecanismo de inferencia utilizado por la ma-yorıa de los sistemas de programacion logica. Si seguimos considerando Prolog des-de la perspectiva de los sistemas formales, hemos descrito ya su lenguaje y su teorıade modelo; ahora describiremos su teorıa de prueba. El mecanismo en cuestion esun caso particular de la regla de inferencia llamada principio de resolucion [15].La idea es acotar el uso de este principio a programas definitivos, dando lugar a laresolucion-SLD [7]. Este principio constituye el fundamento de la semantica opera-cional de los programas definitivos. La resolucion-SLD se demostrara correcta conrespecto a la teorıa del modelo descrita en la clase anterior.

4.1. Introduccion

La programacion logica concierne el uso de la logica (restringida a clausulas)para representar y resolver problemas. Este uso es ampliamente aceptado en Inteli-gencia Artificial (IA), donde la idea se resume como sigue: Un problema o sujetode investigacion puede describirse mediante un conjunto de formulas bien formadas(fbf), de preferencia en forma de clausulas. Si tal descripcion es lo suficientementeprecisa, la solucion al problema o la respuesta a la pregunta planteada en la investi-gacion, es una consecuencia logica del conjunto de fbf que describen el problema.Por lo tanto, encontrar que fbf φ son consecuencia logica de un conjunto de fbf ∆ ,es crucial para muchas areas de la IA, incluyendo la programacion logica. De formaque nos gustarıa tener un procedimiento, algorıtmico, que nos permita establecer si∆ |= φ es el caso, o no. Este es el tema del presente capıtulo: un metodo decidibleconocido como principio de resolucion [15].

En el caso de la logica proposicional, la implicacion logica es decidible, es decir,existe un algoritmo que puede resolver el problema (contestar si o no para cada casoparticular ∆ |= φ ). Si n es el numero de atomos distintos que ocurren en estas fbf,el numero de interpretaciones posibles es finito, de hecho es 2n. Un algoritmo para

43

44 4 Principio de Resolucion

computar ∆ |= φ simplemente busca si φ es verdadero en todos los modelos de ∆ .¿Que sucede en el contexto de la logica de primer orden?

La intuicion nos dice que el procedimiento de decision de la logica proposicionalno es adecuado en primer orden, pues en este caso podemos tener una cantidadinfinita de dominios e interpretaciones diferentes. Lo que es peor, el teorema deChurch [2, 19], muestra que la logica de primer orden es indecidible:

Teorema 4 (Church) El problema de si ∆ |= φ , cuando ∆ es un conjunto finitoarbitrario de fbf, y φ es una fbf arbitraria, es indecidible.

Observen que el problema es indecidible para conjuntos arbitrarios de fbf y parauna fbf φ arbitraria. No existe un algoritmo que en un numero finito de pasos, de larespuesta correcta a la pregunta ¿Es φ una consecuencia logica de ∆?

Existen, sin embargo, procedimientos conocidos como procedimientos de prue-ba que pueden ser de gran ayuda para computar este problema. La idea es quecuando es el caso que ∆ |= φ , existen procedimientos que pueden verificarlo enun numero finito de pasos. Por ello suele decirse que la logica de primer orden essemi-decidible. Aunque parecerıa trivial, siendo que ∆ |= φ , preguntar ¿∆ |= φ?, enrealidad tal trivialidad es aparente. Podemos hacer la pregunta al procedimiento sinque nosotros sepamos que ese es el caso, y obtendremos una respuesta en un numerofinito de pasos. Pero si es el caso que ∆ 6|= φ obtendremos la respuesta “no” (en elmejor de los casos) o el procedimiento no terminara nunca. Esto es infortunado y,peor aun, inevitable.

Esta sesion introduce el procedimiento de prueba utilizado ampliamente en laprogramacion logica: el principio de resolucion propuesto por J.A. Robinson [15]. Sibien este procedimiento esta orientado a un lenguaje mas expresivo que los progra-mas logicos definitivos, nosotros nos concentraremos en una version del principioque aplica a programas definidos y se conoce como resolucion-SLD [7] (resolucionlineal con funcion de seleccion para clausulas definitivas).

4.2. ¿Que es un procedimiento de prueba?

Hasta este momento, hemos abordado informalmente el concepto de procedi-miento de prueba como la manera de generar la prueba de que una fbf φ es conse-cuencia logica de un conjunto de fbf ∆ . Las fbf en ∆ se conocen como premisas yφ es la conclusion de la prueba.

La prueba suele consistir de un pequeno numero de transformaciones en los cua-les nuevas fbf son derivadas de las premisas y de fbf previamente derivadas. Derivaruna fbf implica construirla a partir de las premisas y otras fbf derivadas, siguien-do alguna regla de inferencia. Toda regla de inferencia formaliza alguna formanatural de razonamiento. Por ejemplo, el modus ponens es usado comunmente enmatematicas, su expresion es:

4.3 Pruebas y programas logicos 45

φ , φ → ψ

ψ

donde la lınea superior expresa las premisas y la lınea inferior la conclusion.Es posible ligar varias aplicaciones del modus ponens para construir una prueba.

Por ejemplo, si tenemos el programa logico ∆ = {p(a),q(b)← p(a),r(b)← q(b)}es posible derivar la fbf r(b) como sigue:

1. Derivar q(b) a partir de p(a) y q(b)← p(a).2. Derivar r(b) a partir de q(b) y r(b)← q(b).

La secuencia anterior es una prueba de que r(b) puede ser derivada de ∆ .Es evidente que si usamos modus ponens, la conclusion ψ es una consecuencia

logica de las premisas: {φ ,φ → ψ} |= ψ . A esta propiedad del modus ponens se leconoce como consistencia (soundness). En general un procedimiento de prueba esconsistente si todas las fbf ψ que pueden ser derivadas de algun conjunto de fbfs ∆

usando el procedimiento, son consecuencias logicas de ∆ . En otras palabras, un pro-cedimiento de prueba es consistente si y solo si solo permite derivar consecuenciaslogicas de las premisas.

Una segunda propiedad deseable de los procedimientos de prueba es su comple-tez. Un procedimiento de prueba es completo si toda fbf que es una consecuencialogica de las premisas ∆ , puede ser derivada usando el procedimiento en cuestion. Elmodus ponens por si mismo, no es completo. Por ejemplo, no existe secuencia algu-na de aplicaciones del modus ponens que deriven la fbf p(a) de ∆ = {p(a)∧ p(b)},cuando es evidente que ∆ |= p(a).

La regla φ

ψes completa, pero no valida. !Nos permite extraer cualquier conclu-

sion, a partir de cualquier premisa! Esto ejemplifica que obtener completitud essencillo, pero obtener completitud y correctez, no lo es.

4.3. Pruebas y programas logicos

Recordemos que los enunciados en los programas logicos tienen la estructurageneral de la implicacion logica:

α0← α1, . . . ,αn (n≥ 0)

donde α0, . . . ,αn son fbfs atomicas y α0 puede estar ausente (para representarclausulas meta). Consideren el siguiente programa definitivo ∆ que describe unmundo donde los padres de un recien nacido estan orgullosos, Juan es el padre deMarta y Marta es una recien nacida:

46 4 Principio de Resolucion

orgulloso(X)← padre(X ,Y ),recien nacido(Y ).padre(X ,Y )← papa(X ,Y ).padre(X ,Y )← mama(X ,Y ).

papa( juan,marta).recien nacido(marta).

Observen que el programa describe unicamente conocimiento positivo, es decir,no especifica quien no esta orgulloso. Tampoco que significa para alguien no serpadre.

Supongamos que deseamos contestar la pregunta ¿Quien esta orgulloso? Estapregunta concierne al mundo descrito por nuestro programa, esto es, concierne almodelo previsto para ∆ . La respuesta que esperamos es, por supuesto, juan. Ahora,recuerden que la logica de primer orden no nos permite expresar enunciados inte-rrogativos, por lo que nuestra pregunta debe formalizarse como una clausula meta(enunciado declarativo):

← orgulloso(Z).

que es una abreviatura de ∀Z¬orgulloso(Z) (una clausula definitiva sin cabeza), quea su vez es equivalente de:

¬∃Z orgulloso(Z).

cuya lectura es “Nadie esta orgulloso”, esto es, la respuesta negativa a la consultaoriginal – ¿Quien esta orgulloso? La meta ahora es probar que este enunciado esfalso en todo modelo del programa ∆ y en particular, es falso en el modelo previstopara ∆ , puesto que esto es una forma de probar que ∆ |= ∃Z orgulloso(Z). En ge-neral para todo conjunto de fbf cerradas ∆ y una fbf cerrada γ , tenemos que ∆ |= γ

si ∆ ∪{¬γ} es no satisfacerle (no tiene modelo).Por lo tanto, nuestro objetivo es encontrar una substitucion θ tal que el con-

junto ∆ ∪ {¬orgulloso(Z)θ} sea no satisfacerle, o de manera equivalente, ∆ |=∃Z orgulloso(Z)θ .

El punto inicial de nuestro razonamiento es asumir la meta G0 – Para cualquierZ, Z no esta orgulloso. La inspeccion del programa ∆ revela que una regla describeuna condicion para que alguien este orgulloso:

orgulloso(X)← padre(X ,Y ),recien nacido(Y ).

lo cual es logicamente equivalente a:

∀(¬orgulloso(X)⇒¬(padre(X ,Y )∧ recien nacido(Y )))

Al renombrar X por Z, eliminar el cuantificador universal y usar modus ponenscon respecto a G0, obtenemos:

4.3 Pruebas y programas logicos 47

¬(padre(Z,Y )∧ recien nacido(Y ))

o su equivalente:

← padre(Z,Y ),recien nacido(Y ).

al que identificaremos como G1. Un paso en nuestro razonamiento resulta en rem-plazar la meta G0 por la meta G1 que es verdadera en todo modelo ∆ ∪{G0}. Ahorasolo queda probar que ∆ ∪{G1} es no satisfacible. Observen que G1 es equivalentea la fbf:

∀Z∀Y (¬padre(Z,Y )∨¬recien nacido(Y ))

Por lo tanto, puede probarse que la meta G1 es no satisfacible para ∆ , si entodo modelo de ∆ hay una persona que es padre de un recien nacido. Entonces,verificamos primero si hay padres con estas condiciones. El programa contiene laclausula:

padre(X ,Y )← papa(X ,Y ).

que es equivalente a:

∀(¬padre(X ,Y )⇒¬papa(X ,Y ))

por lo que G1 se reduce a:

← papa(Z,Y ),recien nacido(Y ).

que identificaremos como G2. Se puede mostrar que no es posible satisfacer la nuevameta G2 con el programa ∆ , si en todo modelo de ∆ hay una persona que es papa deun recien nacido. El programa declara que juan es padre de marta:

papa( juan,marta).

ası que solo resta probar que “marta no es una recien nacida” no se puede satisfacerjunto con ∆ :

← recien nacido(marta).

pero el programa contiene el hecho:

recien nacido(marta).

equivalente a ¬recien nacido(marta)⇒ f lo que conduce a una refutacion.Este razonamiento puede resumirse de la siguiente manera: para probar la exis-

tencia de algo, suponer lo contrario y usar modus ponens y la regla de eliminaciondel cuantificador universal, para encontrar un contra ejemplo al supuesto.

Observen que la meta definitiva fue convertida en un conjunto de atomos a serprobados. Para ello, se selecciono una fbf atomica de la meta p(s1, . . . ,sn) y una

48 4 Principio de Resolucion

clausula de la forma p(t1, . . . , tn)← A1, . . .An para encontrar una instancia comun dep(s1, . . . ,sn) y p(t1, . . . , tn), es decir, una substitucion θ que hace que p(s1, . . . ,sn)θy p(t1, . . . , tn)θ sean identicos. Tal substitucion se conoce como unificador. La nue-va meta se construye remplazando el atomo seleccionado en la meta original, porlos atomos de la clausula seleccionada, aplicando θ a todos los atomos obtenidos deesta manera.

El paso de computacion basico de nuestro ejemplo, puede verse como una reglade inferencia puesto que transforma formulas logicas. Lo llamaremos principio deresolucion SLD para programas definitivos. Como mencionamos, el procedimientocombina modus ponens, eliminacion del cuantificador universal y en el paso finalun reductio ad absurdum.

Cada paso de razonamiento produce una substitucion, si se prueba en k pasos quela meta definida en cuestion no puede satisfacerse, probamos que:

← (A1, . . .Am)θ1 . . .θk

es una instancia que no puede satisfacerse. De manera equivalente, que:

∆ |= (A1∧·· ·∧Am)θ1 . . .θk

Observen que generalmente, la computacion de estos pasos de razonamiento noes determinista: cualquier atomo de la meta puede ser seleccionado y pueden habervarias clausulas del programa que unifiquen con el atomo seleccionado. Otra fuentede indeterminismo es la existencia de unificadores alternativos para dos atomos. Es-to sugiere que es posible construir muchas soluciones (algunas veces, una cantidadinfinita de ellas).

Por otra parte, es posible tambien que el atomo seleccionado no unifique conninguna clausula en el programa. Esto indica que no es posible construir un contraejemplo para la meta definida inicial. Finalmente, la computacion puede caer en unciclo y de esta manera no producir solucion alguna.

4.4. Substitucion

Una substitucion remplaza variables por terminos, por ejemplo, podemos rem-plazar la variable X por el termino f (a) en la clausula p(X)∨q(X), y ası obtener lanueva clausula p( f (a))∨q( f (a)). Si asumimos que las clausulas estan cuantificadasuniversalmente, decimos que esta substitucion hace a la clausula original, “menosgeneral”. Mientras que la clausula original dice que V (p(X)) = t y que V (q(X)) = tpara cualquier X en el dominio, la segunda clausula dice que esto solo es ciertocuando cuando V (X) = f (a). Observen que la segunda clausula es consecuencialogia de la primera: p(X)∨q(X) |= p( f (a))∨q( f (a))

Definicion 26 (Substitucion) Una substitucion θ es un conjunto finito de la forma:

{X1/t1, . . . ,Xn/tn}, (n≥ 0)

4.4 Substitucion 49

donde las Xi son variables, distintas entre si, y los ti son terminos. Decimos queti substituye a Xi. La forma Xi/ti se conoce como ligadura de Xi. La substitucion θ

se dice se dice de base (grounded) si cada termino ti es un termino base (no incluyevariables)..

La substitucion dada por el conjunto vacıo, se conoce como substitucion deidentidad o substitucion vacıa y se denota por ε . La restriccion de θ sobre unconjunto de variables Var es la substitucion {X/t ∈ θ | X ∈Var}.

Ejemplo 8 {Y/X ,X/g(X ,Y )} y {X/a,Y/ f (Z),Z/( f (a),X1/b} son substituciones.La restriccion de la segunda substitucion sobre {X ,Z} es {X/a,Z/ f (a)}.

Definicion 27 (Expresion) Una expresion es un termino, una literal, o una conjun-cion o disyuncion de literales. Una expresion simple es un termino o una literal.

Observen que una clausula es una expresion. Las substituciones pueden aplicarsea las expresiones, lo que significa que las variables en las expresiones seran rempla-zadas de acuerdo a la substitucion.

Definicion 28 Sea θ = {X1/t1, . . . ,Xn/tn} una substitucion y α una expresion. En-tonces αθ , la ocurrencia (instance) de α por θ , es la expresion obtenida al substi-tuir simultaneamente Xi por ti para 1 ≤ i ≤ n. Si αθ es una expresion de base, sedice que es una ocurrencia base y se dice que θ es una substitucion de base paraα . Si Σ = {α1, . . . ,αn} es un conjunto finito de expresiones, entonces Σθ denota{α1θ , . . . ,αnθ}.

Ejemplo 9 Sea α la expresion p(Y, f (X)) y sea θ la substitucion {X/a,Y/g(g(X))}.La ocurrencia de α por θ es αθ = p(g(g(X)), f (a). Observen que X e Y son si-multaneamente remplazados por sus respectivos terminos, lo que implica que X eng(g(X)) no es afectada por X/a.

Si α es una expresion cerrada que no es un termino, por ejemplo, una literal, ouna conjuncion o disyuncion de literales, y θ es una substitucion, lo siguiente secumple:

α |= αθ

por ejemplo: p(X)∨¬q(Y ) |= p(a)∨¬q(Y ) donde hemos usado la substitucion{X/a}.

Podemos aplicar una substitucion θ y luego aplicar una substitucion σ , a lo cualse llama composicion de las substituciones θ y σ . Si ese es el caso, primero seaplica θ y luego σ . Las composiciones pueden verse como mapeos del conjunto devariables en el lenguaje, al conjunto de terminos.

Definicion 29 (Composicion) Sean θ = {X1/s1, . . . ,Xm/sm} y σ = {Y1/t1, . . .Yn/tn}dos substituciones. Consideren la secuencia:

X1/(s1σ), . . . ,Xm/(smσ),Y1/t1, . . . ,Yn/tn

50 4 Principio de Resolucion

Si se borran de esta sencuencia las ligaduras Xi/siσ cuando Xi = siσ y cualquierligadura Yj/t j donde Yj ∈ {X1, . . . ,Xm}. La substitucion consistente en las ligadurasde la secuencia resultante es llamada composicion de θ y σ , se denota por θσ .

Ejemplo 10 Sea θ = {X/ f (Y ),Z/U} y σ = {Y/b,U/Z}. Construimos la secuen-cia de ligaduras X/( f (Y )σ),Z/(u)σ ,Y/b,U/Z lo cual es X/ f (b),Z/Z,Y/b,U/Z.Al borrar la ligadura Z/Z obtenemos la secuencia X/ f (b),Y/b,U/Z = θσ .

Definicion 30 (Ocurrencia) Sean θ y σ dos substituciones. Se dice que θ es unaocurrencia de σ , si existe una substitucion γ , tal que σγ = θ .

Ejemplo 11 La substitucion θ = {X/ f (b),Y/a} es una ocurrencia de la substitu-cion σ = {X/ f (X),Y/a}, puesto que σ{X/b}= θ .

Algunas propiedades sobre las substituciones incluyen:

Proposicion 3 Sea α una expresion, y sea θ , σ y γ substituciones. Las siguientesrelaciones se cumplen:

1. θ = θε = εθ

2. (αθ)σ = α(θσ)3. θσ)γ = θ(σγ)

4.5. Unificacion

Uno de los pasos principales en el ejemplo de la seccion 4.3, consistio en ha-cer que dos fbf atomicas se vuelvan sintacticamente equivalentes. Este proceso seconoce como unificacion y posee una solucion algorıtmica.

Definicion 31 (Unificador) Sean α y β terminos. Una substitucion θ tal que α yβ sean identicos (αθ = βθ ) es llamada unificador de α y β .

Ejemplo 12

uni f ica(conoce( juan,X),conoce( juan,maria)) = {X/maria}

uni f ica(conoce( juan,X),conoce(Y,Z)) = {Y/ juan,X/Z}

= {Y/ juan,X/Z,W/pedro}

= {Y/ juan,X/ juan,Z/ juan}

Definicion 32 (Generalidad entre substituciones) Una substitucion θ se dice masgeneral que una substitucion σ , si y solo si existe una substitucion γ tal que σ = θγ .

Definicion 33 (MGU) Un unificador θ se dice el unificador mas general (MGU)de dos terminos, si y solo si θ es mas general que cualquier otro unificador entreesos terminos.

4.5 Unificacion 51

Definicion 34 (Forma resuelta) Un conjunto de ecuaciones {X1 = t1, . . . ,Xn = tn}esta en forma resuelta, si y solo si X1, . . . ,Xn son variables distintas que no ocurrenen t1, . . . , tn.

Existe una relacion cercana entre un conjunto de ecuaciones en forma resuelta yel unificador mas general de ese conjunto: Sea {X1 = t1, . . . ,Xn = tn} un conjunto deecuaciones en forma resuelta. Entonces {X1/t1, . . . ,Xn/tn} es un MGU idempotentede la forma resuelta.

Definicion 35 (Equivalencia en conjuntos de ecuaciones) Dos conjuntos de ecua-ciones E1 y E2 se dicen equivalentes, si tienen el mismo conjunto de unificadores.

La definicion puede usarse como sigue: para computar el MGU de dos terminosα y β , primero intente transformar la ecuacion {α = β} en una forma resueltaequivalente. Si esto falla, entonces mgu(α,β ) = f allo. Sin embargo, si una formaresuelta {X1 = t1, . . . ,Xn = tn} existe, entonces mgu(α,β ) = {X1/t1, . . . ,Xn/tn}. Unalgoritmo para encontrar la forma resuelta de un conjunto de ecuaciones es comosigue:

Algoritmo 1 Unifica(E)1: function UNIFICA(E) . E es un conjunto de ecuaciones2: repeat3: (s = t)← seleccionar(E)4: if f (s1, . . . ,sn) = f (t1, . . . , tn) (n≥ 0) then5: remplazar (s = t) por s1 = t1, . . . ,sn = tn6: else if f (s1, . . . ,sm) = g(t1, . . . , tn) ( f /m 6= g/n) then7: return(fallo)8: else if X = X then9: remover la X = X

10: else if t = X then11: remplazar t = X por X = t12: else if X = t then13: if subtermino(X ,t) then14: return(fallo)15: else remplazar todo X por t16: end if17: end if18: until No hay accion posible para E19: end function

Ejemplo 13 El conjunto { f (X ,g(Y )) = f (g(Z),Z)} tiene una forma resuelta, pues-to que:

⇒{X = g(Z),g(Y ) = Z}

⇒ {X = g(Z),Z = g(Y )}

⇒ {X = g(g(Y )),Z = g(Y )}

52 4 Principio de Resolucion

Ejemplo 14 El conjunto { f (X ,g(X),b) = f (a,g(Z),Z)} no tiene forma resuelta,puesto que:

⇒{X = a,g(X) = g(Z),b = Z}

⇒ {X = a,g(a) = g(Z),b = Z}

⇒ {X = a,a = Z,b = Z}

⇒ {X = a,Z = a,b = Z}

⇒ {X = a,Z = a,b = a}

⇒ f allo

Ejemplo 15 El conjunto { f (X ,g(X)) = f (Z,Z)} no tiene forma resuelta, puestoque:

⇒{X = Z,g(X) = Z}

⇒ {X = Z,g(Z) = Z}

⇒ {X = Z,Z = g(Z)}

⇒ f allo

Este algoritmo termina y regresa una forma resuelta equivalente al conjuntode ecuaciones de su entrada; o bien regresa fallo si la forma resuelta no existe.Sin embargo, el computar subtermino(X , t) (verificacion de ocurrencia) hace queel algoritmo sea altamente ineficiente. Los sistemas Prolog resuelven este proble-ma haciendo caso omiso de la verificacion de ocurrencia. El standard ISO Prolog(1995) declara que el resultado de la unificacion es no decidible. Al eliminar la ve-rificacion de ocurrencia es posible que al intentar resolver X = f (X) obtengamosX = f ( f (X)) · · · = f ( f ( f . . .)). En la practica los sistemas Prolog no caen en esteciclo, pero realizan la siguiente substitucion {X/ f (∞)}. Si bien esto parece resolverel problema de eficiencia, generaliza el concepto de termino, substitucion y unifica-cion al caso del infinito, no considerado en la logica de primer orden, introduciendoa su vez inconsistencia.

4.6. Resolucion-SLD

El metodo de razonamiento descrito informalmente al inicio de esta sesion, puederesumirse con la siguiente regla de inferencia:

∀¬(α1∧·· ·∧αi−1∧αi∧αi+1∧·· ·∧αm) ∀(β0← β1∧·· ·∧βn)∀¬(α1∧·· ·∧αi−1∧β1∧·· ·∧βn∧αi+1∧·· ·∧αm)θ

o, de manera equivalente, usando la notacion de los programas definitivos:

4.6 Resolucion-SLD 53

← α1, . . . ,αi−1,αi,αi+1, . . . ,αm β0← β1, . . . ,βn

← (α1, . . . ,αi−1,β1, . . . ,βn, . . . ,αm)θ

donde:

1. α1, . . . ,αm son fbf atomicas.2. β0← β1, . . . ,βn es una clausula definitiva en el programa ∆ (n≥ 0).3. MGU(αi,β0) = θ .

La regla tiene dos premisas: una meta y una clausula definitivas. Observen quecada una de ellas esta cuantificada universalmente, por lo que el alcance de loscuantificadores es disjunto. Por otra parte, solo hay un cuantificador universal parala conclusion, por lo que se requiere que el conjunto de variables en las premisassea disjunto. Puesto que todas las variables en las premisas estan cuantificadas, essiempre posible renombrar las variables de la clausula definitiva para cumplir conesta condicion.

La meta definida puede incluir muchas fbf atomicas que unifican con la cabeza dealguna clausula en el programa. En este caso, es deseable contar con un mecanismodeterminista para seleccionar un atomo αi a unificar. Se asume una funcion queselecciona una submeta de la meta definida (funcion de seleccion).

La regla de inferencia presentada es la unica necesaria para procesar programasdefinitivos. Esta regla es una version de la regla de inferencia conocida como prin-cipio de resolucion, introducido por J.A. Robinson en 1965. El principio de resolu-cion aplica a clausulas. Puesto que las clausulas definitivas son mas restringidas quelas clausulas, la forma de resolucion presentada se conoce como resolucion-SLD(resolucion lineal para clausulas definitivas con funcion de seleccion).

El punto de partida de la aplicacion de esta regla de inferencia es una meta defi-nida G0:

← α1, . . . ,αm (m≥ 0)

De esta meta, una submeta αi sera seleccionada, de preferencia por una funcionde seleccion. Una nueva meta G1 se construye al seleccionar una clausula del pro-grama β0← β1, . . . ,βn (n ≥ 0) cuya cabeza β0 unifica con αi, resultando en θ1. G1tiene la forma:

← (α1, . . . ,αi−1,β1, . . . ,βn, . . . ,αm)θ1

Ahora es posible aplicar el principio de resolucion a G1 para obtener G2, y ası su-cesivamente. El proceso puede terminar o no. Hay dos situaciones donde no es po-sible obtener Gi+1 a partir de Gi:

1. cuando la submeta seleccionada no puede ser resuelta (no es unificable con lacabeza de una clausula del programa).

2. cuando Gi = 2 (meta vacıa = f).

Definicion 36 (Derivacion-SLD) Sea G0 una meta definitiva, ∆ un programa defi-nitivo y R una funcion de seleccion. Una derivacion SLD de G0 (usando ∆ y R) esuna secuencia finita o infinita de metas:

54 4 Principio de Resolucion

G0α0 G1 . . .Gn−1

αn−1 Gn

Para manejar de manera consistente el renombrado de variables, las variables enuna clausula αi seran renombradas poniendoles subındice i.

Cada derivacion SLD nos lleva a una secuencias de MGUs θ1, . . . ,θn. La com-posicion

θ =

{θ1θ2 . . .θn si n > 0ε si n = 0

de MGUs se conoce como la substitucion computada de la derivacion.

Ejemplo 16 Consideren la meta definida← orgulloso(Z) y el programa discutidoen la clase anterior.

G0 =← orgulloso(Z).

α0 = orgulloso(X0)← padre(X0,Y0),recien nacido(Y0).

La unificacion de orgulloso(Z) y orgulloso(X0) nos da el MGU θ1 = {X0/Z}.Asumamos que nuestra funcion de seleccion es tomar la submeta mas a la izquierda.El primer paso de la derivacion nos conduce a:

G1 =← padre(Z,Y0),recien nacido(Y0).

α1 = padre(X1,Y1)← papa(X1,Y1).

En el segundo paso de la resolucion el MGU θ2 = {X1/Z,Y1/Y0} es obtenido. Laderivacion continua como sigue:

G2 =← papa(Z,Y0),recien nacido(Y0).

α2 = papa( juan,marta).

G3 =← recien nacido(marta).

α3 = recien nacido(marta).

G4 = 2

la substitucion computada para esta derivacion es:

θ1θ2θ3θ4 = {X0/Z}{X1/Z,Y1/Y0}{Z/ juan,Y0/marta}ε

= {X0/ juan,X1/ juan,Y1/marta,Z/ juan,Y0/marta}

Las derivaciones SLD que terminan en la meta vacıa (2) son de especial impor-tancia pues corresponden a refutaciones a la meta inicial (y proveen las respuestas ala meta).

Definicion 37 (Refutacion SLD) Una derivacion SLD finita:

4.6 Resolucion-SLD 55

G0α0 G1 . . .Gn−1

αn−1 Gn

donde Gn = 2, se llama refutacion SLD de G0.

Definicion 38 (Derivacion fallida) Una derivacion de la meta definitiva G0 cuyoultimo elemento no es la meta vacıa y no puede resolverse con ninguna clausula delprograma, es llamada derivacion fallida.

Definicion 39 (Arbol-SLD) Sea ∆ un programa definitivo, G0 una meta definitiva,y R una funcion de seleccion. El arbol-SLD de G0 (usando ∆ y R) es un arboletiquetado, posiblemente infinito, que cumple las siguientes condiciones:

La raız del arbol esta etiquetada por G0.Si el arbol contiene un nodo etiquetado como Gi y existe una clausula renom-brada αi ∈ ∆ tal que Gi+1 es dervidada de Gi y αi via R, entonces el nodoetiquetado como Gi tiene un hijo etiquetado Gi+1 El arco que conecta ambosnodos esta etiquetado como αi.

Por ejemplo:← orgulloso(Z)

← padre(Z,Y0),recien nacido(Y0)

← papa(Z,Y0),recien nacido(Y0)

← recien nacido(marta)

2

← mama(Z,Y0),recien nacido(Y0)

4.6.1. Propiedades de la resolucion-SLD

Definicion 40 (Consistencia) Sea ∆ un programa definitivo, R una funcion de se-leccion, y θ una substitucion de respuesta computada a partir de ∆ y R para unameta← α1, . . . ,αm. Entonces ∀((α1 ∧ ·· · ∧αm)θ) es una consecuencia logica delprograma ∆ .

Definicion 41 (Complecion) Sea ∆ un programa definitivo, R una funcion de se-leccion y← α1, . . . ,αm una meta definitiva. Si ∆ |= ∀((α1 ∧ ·· · ∧αm)σ), entoncesexiste una refutacion de ← α1, . . . ,αm vıa R con una substitucion de respuestacomputada θ , tal que (α1∧·· ·∧αm)σ es un caso de (α1∧·· ·∧αm)θ .

Capıtulo 5Negacion

Resumen Si los programas definitivos representan unicamente conocimiento posi-tivo sobre un problema ¿Como es que se pueden computar consecuencias logicasnegativas? Este capıtulo introduce los conceptos de supuesto del mundo cerrado(CWA) y su forma mas relajada, conocida como negacion por fallo finito (NAF),para introducir el manejo de conocimiento negativo en los programas definitivos. Seintroducen tambien los conceptos de complecion de programa y resolucion-SLDNF.Finalmente abordaremos el concepto de programas generales y la resolucion paraeste tipo de programas.

5.1. Introduccion

Los programas definitivos expresan conocimiento positivo, en el sentido que loshechos y las reglas describen que ciertos objetos estan en cierta relacion con otros.Las relaciones se hacen explıcitas en el modelo mınimo de Herbrand – el conjuntode todas las consecuencias atomicas de base de un programa. Por ejemplo, conside-ren el siguiente programa ∆ :

sobre(X ,Y )← en(X ,Y ).sobre(X ,Y )← en(X ,Z),sobre(Z,Y ).

en(c,b).en(b,a).

El modelo mınimo de Herbrand para este programa es el siguiente:

{en(b,a),en(c,b),sobre(b,a),sobre(c,b),sobre(c,a)}

Observen que ni el programa, ni el modelo mınimo de Herbrand, incluyen in-formacion negativa del tipo: a no esta sobre b, o b no esta sobre c. Sin embargo,

57

58 5 Negacion

nosotros usamos informacion negativa implıcita en algunos casos. Por ejemplo, sicuando buscamos un boleto de autobus, nos encontramos con que no aparecen sa-lidas a Mexico a las 10:12 am, asumimos que tal salida no existe. La ausencia deinformacion se asume como evidencia de lo contrario. Esto es posible porque, comoen el caso de autobus, asumimos que toda la informacion disponible esta a nuestroalcance.

La idea anterior se puede formular con la suposicion del mundo cerrado(Closed-World Assumption) o CWA, una pseudo-regla de inferencia que expresa:

∆ 6` α

¬α(CWA)

Si una fbf atomica de base (sin variables) α , no puede derivarse del programa ∆

siguiendo las reglas de inferencia del sistema, entonces puede derivarse ¬α .En el caso de los sistemas correctos y completos, la condicion ∆ 6` α es equiva-

lente a ∆ 6|= α . Como este es el caso para la resolucion-SLD, la condicion puede serremplazada por α 6∈M∆ . Por ejemplo, la fbf sobre(b,c) no puede ser derivada por re-solucion-SLD a partir del programa ∆ (vean el arbol de derivacion en la figura 5.1).En realidad sobre(b,c) no puede ser derivada por ningun sistema correcto, puestoque no es una consecuencia logica de ∆ . Dada la completitud de la resolucion-SLD,se sigue que ∆ 6|= sobre(b,c) y usando la CWA inferimos que ¬sobre(b,c).

← sobre(b,c)

← en(b,c) ← en(b,Z0),sobre(Z0,c)

← sobre(a,c)

← en(a,c) ← en(a,Z2),sobre(Z2,c)

Figura 5.1 Arbol de derivacion-SLD fallido

En contra de lo que podrıa ser nuestra primera intuicion, existen problemas aso-ciados a la CWA. El principal tiene que ver con que la no-derivabilidad para losprogramas definitivos es no decidible en el caso general. Esto es, no es posible de-terminar si la pseudo-regla asociada al CWA aplica o no. Una version mas debil dela suposicion de mundo cerrado, se logra si asumimos que ¬α es derivable a partirdel programa ∆ si la meta← α tiene un arbol-SLD finito que falla. A esta regla sele conoce como negacion como falla (finita) (NAF).

Es necesario contrastar la NAF con la CWA, que tambien puede verse comouna negacion por falla, pero infinita. Para ilustrar la diferencia entre los dos enfo-

5.2 La complecion de un programa 59

ques extendamos el programa ∆ con la siguiente clausula evidentemente verdaderasobre(X ,Y )← sobre(X ,Y ).

El arbol-SLD de la meta← sobre(b,c) sigue sin contener refutaciones, pero aho-ra es infinito. Por lo tanto no podemos concluir que ¬sobre(b,c) usando NAF, perosi usando CWA.

Pero el problema mas serio con estos enfoques es que son incorrectos,¬sobre(b,c)no es una consecuencia logica del programa ∆ . En lo general, cualquier sistema quepermita inferir literales negativas a partir de un programa definitivo, es incorrec-to. La razon es que la base de Herbrand del programa B∆ , en el cual todas las fbfatomicas cerradas son verdaderas, es siempre un modelo de ∆ .

Existen dos aproximaciones a la solucion de estos problemas: ver los programascomo resumenes de programas mas extensos que validan las literales negativas; oredefinir la nocion de consecuencia logica de forma que solo algunos modelos delprograma (el mınimo de Herbrand, por ejemplo) sean tomados en cuenta. En amboscasos, el efecto es descartar algunos modelos del programa que no son interesantes.Primero justificaremos la regla NAF en terminos de la complecion de los programasdefinitivos y posteriormente, extenderemos el lenguaje de los programas definitivospara incluir en ellos literales negativas en la cabeza y cuerpo de las clausulas.

5.2. La complecion de un programa

La idea que presentaremos a continuacion se debe a K. Clark [3] y se basa en quecuando uno escribe un programa definitivo ∆ , en realidad quiere expresar algo masque su conjunto de clausulas definitivas. El programa deseado puede formalizarsecomo la complecion de ∆ . Consideren la siguiente definicion:

sobre(X ,Y )← en(X ,Y ).sobre(X ,Y )← en(X ,Z),sobre(Z,Y ).

Estas reglas especifican que un objeto esta sobre un segundo objeto, si el primerobjeto esta encima del segundo (1) o si el objeto esta sobre otro objeto que a su vezesta encima del segundo (2). Esto tambien puede escribirse como:

sobre(X ,Y )← en(X ,Y )∨ (en(X ,Z),sobre(Z,Y ))

Ahora, ¿Que sucede si remplazamos la implicacion por la equivalencia logica?

sobre(X ,Y )↔ en(X ,Y )∨ (en(X ,Z),sobre(Z,Y ))

Esta fbf expresa que X esta sobre Y si y solo si una de las condiciones es verda-dera. Esto es, si ninguna de las condiciones se cumple, ¡se sigue que X no esta sobreY ! Esta es la intuicion seguida para explicar la negacion como falla.

60 5 Negacion

Desafortunadamente, combinar clausulas definitivas como en el ejemplo anterior,solo es posible para clausulas con cabezas identicas. Por ejemplo:

en(c,b).en(b,a).

Por una simple transformacion, el programa puede ser escrito como:

en(X1,X2)← X1 = c,X2 = b

en(X1,X2)← X1 = b,X2 = a

Las clausulas pueden combinarse en una sola formula, donde la implicacion esremplazada por la equivalencia logica.

en(X1,X2)↔ (X1 = c,X2 = b)∨ (X1 = b,X2 = a)

La lectura logica de esta fbf es que X1 esta en X2 si y solo si X1 = c y X2 = b osi X1 = b y X2 = a. Esta transformacion se puede realizar sobre un programa logicodefinitivo ∆ y el resultado se conoce como complecion de ∆ .

Definicion 42 (Complecion) Sea ∆ un programa logico definitivo. La complecioncomp(∆) de ∆ es el conjunto de formulas obtenido a partir de las siguientes trestransformaciones:

1. Para cada sımbolo de predicado φ remplazar la clausula α de la forma:

φ(t1, . . . , tm)← α1, . . . ,αn (n≥ 0)

por la formula:

φ(X1, . . . ,Xm)←∃Y1, . . . ,Yi(X1 = t1, . . . ,Xm = tm,α1, . . . ,αn)

donde las Yi son todas variables en α y las Xi son variables unicas que no apa-recen en α .

2. Para cada sımbolo de predicado φ remplazar todas las fbf:

φ(X1, . . . ,Xm)← β1

...

φ(X1, . . . ,Xm)← β j

por la formula:

5.2 La complecion de un programa 61

∀X1, . . . ,Xm(φ(X1, . . . ,Xm)↔ β1∨, . . . ,∨β j si j > 0∀X1, . . . ,Xm(¬φ(X1, . . . ,Xm)) si j = 0

3. Finalmente el programa se extiende con los siguientes axiomas de igualdad libre,que definen las igualdades introducidas en el paso 1:

∀(X = X)∀(X = Y ⇒ Y = X)

∀(X = Y ∧Y = Z⇒ X = Z)∀(X1 = Y1∧·· ·∧Xn = Yn⇒ f (X1, . . . ,Xn) = f (Y1, . . . ,Yn))∀(X1 = Y1∧·· ·∧Xn = Yn⇒ (φ(X1, . . . ,Xn)⇒ φ(Y1, . . . ,Yn))∀( f (X1, . . . ,Xn) = f (Y1, . . . ,Yn)⇒ X1 = Y1∧·· ·∧Xn = Yn)

∀(¬ f (X1, . . . ,Xm) = g(Y1, . . . ,Yn))(Si f /m 6= g/n)∀(¬X = t)(Si X es un subtermino propio de t)

Estas definiciones garantizan que la igualdad (=) sea una relacion de equivalen-cia; que sea una relacion congruente; y que formalice la nocion de unificacion. Lasprimeros cinco definiciones se pueden abandonar si se especifica que = representala relacion de identidad .

Ejemplo 17 Consideremos la construccion de comp(∆) tal y como se definio ante-riormente. El primer paso produce:

sobre(X1,X2)← ∃X ,Y (X1 = X ,X2 = Y,en(X ,Y ))sobre(X1,X2)← ∃X ,Y,Z (X1 = X ,X2 = Y,en(Z,Y ),sobre(Z,Y ))

en(X1,X2)← (X1 = c,X2 = b)en(X1,X2)← (X1 = b,X2 = a)

dos pasos mas adelante obtenemos:

∀X1,X2(sobre(X1,X2 ↔ ∃X ,Y (. . .)∧∃X ,Y,Z(. . .))∀X1,X2(en(X1,X2)↔ (X1 = c,X2 = b)∧ (X1 = b,X1 = a))

y el programa se termina con las definiciones de igualdad como identidad y unifi-cacion.

La complecion comp(∆) de un programa definitivo ∆ preserva todas las literalespositivas modeladas por ∆ . Esto es, si ∆ |= α entonces comp(∆) |= α . Tampoco seagrega informacion positiva al completar el programa: Si comp(∆) |= α entonces∆ |= α . Por lo tanto, al completar el programa no agregamos informacion positivaal mismo, solo informacion negativa.

62 5 Negacion

Como sabemos, no es posible que una literal negativa pueda ser consecuencialogica de un programa definitivo. Pero al substituir las implicaciones en ∆ por equi-valencias en comp(∆) es posible inferir informacion negativa a partir del programacompletado. Esta es la justificacion de la regla NAF, cuyas propiedades de consis-tencia se deben a K. Clark [3]:

Teorema 5 (Consistencia de la NAF) Sea ∆ un programa definitivo y ← α unameta definitiva. Si ← α tiene un arbol-SLD finito fallido, entonces comp(∆) |=∀(¬α).

La consistencia se preserva aun si α no es de base. Por ejemplo, ← en(a,X)falla de manera finita y por lo tanto, se sigue que comp(∆) |= ∀(¬en(a,X)). Lacompletitud de la NAF tambien ha sido demostrada:

Teorema 6 (Completitud de la NAF) Sea ∆ un programa definitivo. Si comp(∆) |=∀(¬α) entonces existe un arbol finito fallido para la meta definitiva← α .

Observen que solo enuncia la existencia de un arbol-SLD finito fallido. Como seha mencionado, un arbol-SLD puede ser finito bajo ciertas reglas de computacione infinito bajo otras. En particular, el teorema de completitud no es valido paralas reglas de computacion de Prolog. La completitud funciona para una subclasede derivaciones-SLD conocidas como justas (fair), las cuales o bien son finitas ogarantizan que cada atomo en la derivacion (u ocurrencia de este), es seleccionadoeventualmente por las reglas de computacion. Un arbol-SLD es justo si todas susderivaciones son justas. La NAF es completa para arboles-SLD justos. Este tipode derivaciones se pueden implementar facilmente: selecciona la sub-meta mas ala izquierda y agrega nuevas submetas al final de esta (busqueda en amplitud). Sinembargo, pocos sistemas implementan tal estrategia por razones de eficiencia.

5.3. Resolucion SLDNF para programas definitivos

En el capıtulo 4 presentamos el metodo de resolucion-SLD, utilizado para probarsi una literal positiva cerrada es consencuencia logica de un programa. En la seccionanterior afirmamos que tambien las literales negadas pueden derivarse a partir de laterminacion de programas logicos definitivos. Combinando la resolucion SLD y lanegacion como fallo finito (NAF), es posible generalizar la nocion de meta definitivapara incluir literales positivas y negadas. Tales metas se conocen como generales.

Definicion 43 (Meta general) Una meta general tiene la forma:

← α1, . . .αn (n≥ 0)

donde cada αi es una literal positiva o negada.

La combinacion de la resolucion SLD y la NAF se llama resolucion SLDNF.

5.3 Resolucion SLDNF para programas definitivos 63

Definicion 44 (Resolucion SLDNF para programas definitivos) Sea ∆ un pro-grama definitivo, G0 una meta general y R una funcion de seleccion (tambien co-nocida como regla de computacion). Una derivacion SLDNF de G0 usando R, esuna secuencia finita o infinita de metas generales:

G0α0 G1 . . .Gn−1

αn−1 Gn

donde Giαi Gi+1 puede ocurrir si:

1. la literal R-seleccionada en Gi es positiva y Gi+1 se deriva de Gi y αi por unpaso de resolucion SLD;

2. la literal R-seleccionada en Gi es negativa (¬α) y la meta← α tiene un arbolSLD fallido y finito y Gi+1 se obtiene a partir de Gi eliminando ¬α (en cuyo casoαi, corresponde al marcador especial FF).

Cada paso en una derivacion SLDNF produce una substitucion, en el caso 1 unMGU y en el caso 2, la substitucion vacıa ε .

Entonces, una literal negativa ¬α es demostrada si←α tiene un arbol SLD finitoque falla. Por dualidad, ¬α falla de manera finita si α es demostrada. Ademas dela refutacion y de la derivacion infinita, existen dos clases de derivaciones SLDNFcompletas dada una funcion de seleccion:

1. Una derivacion se dice (finitamente) fallida si (i) la literal seleccionada es positi-va y no unifica con ninguna cabeza de las clausulas del programa, o (2) la literalseleccionada es negativa y tiene un fallo finito.

2. Una derivacion se dice plantada (stuck) si la sub-meta seleccionada es de laforma ¬α y← α tiene un fallo infinito.

Ejemplo 18 Considere el siguiente programa:

en(c,b)en(b,a)

La meta ← en(X ,Y ),¬en(Z,X) tiene una refutacion-SLDNF con la substitucioncomputada {X/c,Y/b}:

64 5 Negacion

G =← en(X ,Y ),¬en(Z,X).G0 =← en(X ,Y ).α0 = en(c,b).θ0 = {X/c,Y/b}

G1 = ¬en(Z,X)θ0 =← en(Z,c)α1 = FF

θ1 = ε

G2 = 2

θ = θ0θ1 = {X/c,Y/b}

En cambio, si la funcion de seleccion hubiera computado las clausulas de abajohacıa arriba α0 = en(b,a) la derivacion hubiera sido fallida (a ustedes probarlo).

Como es de esperarse, la resolucion-SLDNF es consistente, despues de todo, laresolucion-SLD y la NAF son consistentes.

Teorema 7 (Consistencia de la resolucion-SLDNF) Sea ∆ un programa definiti-vo y← α1, . . . ,αn una meta general. Si← α1, . . . ,αn tiene una refutacion SLDNFcon una substitucion computada θ , comp(∆) |= ∀(α1θ , . . . ,αnθ).

Sin embargo, la resolucion-SLDNF no es completa aunque pudieramos haberesperado lo contrario. La resolucion SLDNF no es completa a pesar de que la re-solucion-SLD y la NAF si lo son. Un simple contra ejemplo es ← ¬en(X ,Y ) quecorresponde a la consulta “¿Hay algunos bloques X e Y, tal que X no esta en Y?”Uno esperarıa varias respuestas a esta consulta, por ejemplo, el bloque a no esta en-cima de ningun bloque, etc.

Pero la derivacion SLDNF de←¬en(X ,Y ) falla porque la meta← en(X ,Y ) tieneexito (puede ser demostrada). El problema es que nuestra definicion de derivacionfallida es demasiado conservadora. El exito de ← en(X ,Y ) no significa necesaria-mente que no halla un bloque que no este en otro bloque, solo que existe al menosun bloque que no esta en otro.

El problema tiene su origen en que la NAF, en contraste con la resolucion SLD,es solo una prueba (test). Recuerden que dada la definicion de la resolucion SLDNFy la consistencia y completitud de la NAF, tenemos que ¬en(X ,Y ) tiene exito siy solo si (≡) en(X ,Y ) tiene asociado un arbol SLD fallido y finito; o si y solo sicomp(∆) |= ∀(¬en(X ,Y )). Por lo tanto, la meta general← en(X ,Y ) no debe leersecomo una consulta cuantificada existencialmente, sino como una prueba universal:“Para todo bloque X e Y, ¿No esta X en Y?”.

Esta ultima consulta tiene una respuesta negativa en el modelo deseado del pro-grama, puesto que el bloque b esta en el bloque a. El problema anterior se debe ala cuantificacion de las variables en la literal negativa. Si replanteamos la consulta

5.4 Programas Logicos Generales 65

anterior como ← ¬en(a,b) entonces la resolucion SLDNF alcanza una refutacionpuesto que← en(a,b) falla con una derivacion finita.

Algunas veces se asume que la funcion de seleccion R permite seleccionar unaliteral negativa ¬α si la literal α no tiene variables libres o si α tiene asociadauna substitucion computada vacıa. Estas funciones de seleccion se conocen comoseguras (safe).

5.4. Programas Logicos Generales

Con los desarrollos anteriores estamos en posicion de extender el lenguaje de losprogramas definitivos para incluir clausulas que contienen literales tanto positivascomo negativas en su cuerpo. Estas fbf se llaman clausulas generales y a los pro-gramas generales que ellas forman, se les conoce a veces como programas logicosnormales.

Definicion 45 (Clausula General) Una clausula general es una fbf de la formaA0← α1, . . . ,αn donde A0 es una fbf atomica y α1, . . . ,αn son literales (n≥ 0).

Definicion 46 (Programa General) Un programa logico general es un conjuntofinito de clausulas generales.

Ahora podemos extender nuestro programa del mundo de los bloques con lassiguientes relaciones:

base(X)← en(Y,X),en la mesa(X).en la mesa(X)← ¬no en la mesa(X).

no en la mesa(X)← en(X ,Y ).en(c,b).en(b,a).

La primer clausula especifica que un bloque es base si esta sobre la mesa y tieneotro bloque encima. La segunda clausula indica que cuando no es cierto que un blo-que no esta sobre la mesa, entonces esta sobre la mesa. La tercera clausula especificaque un bloque que esta sobre otro, no esta sobre la mesa.

Parece claro, pero la pregunta que deberıamos hacernos es que tipo de sistemade prueba queremos para los programas logicos generales y cuales seran las aproxi-maciones logicas a las sutilezas, algunas ya discutidas, introducidas por este tipo delenguajes.

Observen que aunque el lenguaje fue enriquecido, no es posible de cualquier for-ma que una literal negativa sea consecuencia logica de un programa dado. La razones la misma que para los programas definidos, la base de Herbrand de un programa∆ , B∆ es un modelo de ∆ en el que todas las literales negativas son falsas. Al igualque con los programas definidos, la pregunta es entonces como lograr inferencias

66 5 Negacion

negativas consistentes. Afortunadamente el concepto de complecion de programapuede aplicarse tambien a los programas logicos generales.

Ejemplo 19 La complecion de gana(X)←mueve(X ,Y ),¬gana(Y ) contiene la fbf:

∀X1(gana(X1)≡ ∃X ,Y (X1 = X ,mueve(X ,Y ),¬gana(Y )))

Desafortunadamente, la complecion de los programas normales puede ocasionarparadojas. Consideren la clausula general p←¬p, su complecion incluye p≡ ¬p.La inconsistencia del programa terminado se debe a que p/0 esta definida en termi-nos de su propio complemento.

Una estrategia de programacion para evitar este problema consiste en componerlos programas por capas o estratos, forzando al programador a referirse a las nega-ciones de una relacion hasta que esta ha sido totalmente definida. Se entiende quetal definicion se da en un estrato inferior a donde se presenta la negacion. En la de-finicion del programa estratificado usaremos ∆ p para referirnos al subconjunto declausulas en ∆ que tienen a p como cabeza.

Definicion 47 (Programa Estratificado) Un programa general ∆ se dice estratifi-cado si y solo si existe al menos una particion ∆1∪·· ·∪∆n de ∆ tal que :

1. Si p(. . .)← q(. . .), · · · ∈ ∆i entonces ∆ q ⊆ ∆1∪·· ·∪∆i;2. Si p(. . .)←¬q(. . .), · · · ∈ ∆i entonces ∆ q ⊆ ∆1∪·· ·∪∆i−1.

Por ejemplo, el siguiente programa esta estratificado:

∆2:

base(X)← en(Y,X),en la mesa(X).en la mesa(X)← ¬no en la mesa(X).

∆1:

no en la mesa(X)← en(X ,Y ).en(c,b).en(b,a).

La complecion de un programa estratificado es siempre correcta (Apt, Blair yWalker, 1988). Sin embargo, observen que determinar si un programa es estrati-ficado o no, es decidible; pero determinar si la complecion de un programa es ono decidible, es incorrecto. Por lo tanto, hay programas generales no estratificados,cuya terminacion es consistente.

5.5 Resolucion SLDNF para programas generales 67

5.5. Resolucion SLDNF para programas generales

Hemos revisado el caso de la resolucion-SLDNF entre programas definitivos ymetas generales. Informalmente podemos decir que la resolucion-SLDNF combinala resolucion SLD con los siguientes principios:

1. ¬α tiene exito si← α tiene un arbol-SLD finito que falla.2. ¬α falla finitamente si y solo si← α tiene una refutacion-SLD.

El paso de programas definitivos a programas generales, es complicado. Para pro-bar ¬α , debe de existir un arbol finito fallido para ← α . Tal arbol puede contenernuevas literales negativas, las cuales a su vez deben tener exito o fallar finitamente.Esto complica considerablemente la definicion de la resolucion-SLDNF para pro-gramas generales. Por ejemplo, es posible llegar a situaciones paradojicas cuandolos predicados estan definidos en terminos de sus propios complementos. Conside-ren el programa no estratificado:

α ←¬α

Dada la meta inicial← α , se puede construir una derivacion← α ←¬α . Laderivacion puede extenderse hasta una refutacion si←α falla finitamente. De mane-ra alternativa, si← α tiene una refutacion, entonces la derivacion falla. Helas! estoes imposible pues la meta← α no puede tener una refutacion y fallar finitamente almismo tiempo.

En lo que sigue, definiremos las nociones de derivacion-SLDNF y arbol-SLDNF,de manera similar a la derivacion-SLD y a los arboles-SLD. La idea se concretaen el concepto de bosque-SLDNF: un conjunto de arboles-SLDNF cuyos nodosesta etiquetados con metas generales.

Definicion 48 (Bosque SLDNF) Sea ∆ un programa general, G0 una meta gene-ral, y R una funcion de seleccion. El bosque SLDNF de G0 (usando ∆ y R) es elbosque mas pequeno, tal que:

1. G0 es la raız del arbol.2. Si G es un nodo en el bosque cuya literal seleccionada es positiva, entonces para

cada clausula α tal que G′ puede ser derivada de G y α (con MGU θ ), G tiene unhijo etiquetado G′. Si no existe tal clausula, entonces G tiene un hijo etiquetadoFF (falla finita);

3. Si G es un nodo del bosque cuya literal seleccionada es de la forma←¬α (G esde la forma← α1, . . . ,Li−1,αi,Li+1, . . . ,αn), entonces:

El bosque contiene un arbol cuyo nodo raız es← α .Si el arbol con raız←α tiene una hoja etiquetada como 2 con la substitucioncomputada vacıa ε , entonces G tiene un solo hijo etiquetado FF;Si el arbol con raız ← α es finito y tiene todas sus hojas etiquetadas FF,entonces G tiene un solo hijo etiquetado (con substitucion asociada vacıa ε)como← α1, · · ·Li−1,Li+1, . . . ,αn.

68 5 Negacion

Observen que la literal negativa seleccionada ¬α falla solo si ← α tiene unarefutacion con la substitucion computada vacıa ε . Como veremos mas adelante,esta condicion que no era necesaria cuando definimos la resolucion-SLDNF paraprogramas definitivos, es vital para la correctez de esta resolucion en los programasgenerales.

Los arboles del bosque-SLDNF son llamados arboles-SLDNF completos; y lasecuencia de todas las metas en una rama de un arbol-SLDNF con raız G es llamadaderivacion-SLDNF completa de G (bajo un programa ∆ y una funcion de seleccionR). El arbol etiquetado por G0 es llamado arbol principal. Un arbol con la raız← α

es llamado arbol subsidiario si ¬α es una literal seleccionada en el bosque (el arbolprincipal puede ser a su vez subsidiario).

Ejemplo 20 Consideren el siguiente programa general estratificado ∆ :

base(X)← en(Y,X),en la mesa(X).en la mesa(X)← ¬no en la mesa(X).

no en la mesa(X)← en(X ,Y ).encima(X ,Y )← en(X ,Y ).encima(X ,Y )← en(X ,Z),encima(Z,Y ).

en(c,b).en(b,a).

El bosque-SLDNF para la meta ← base(X) se muestra en la figura 5.2. Elarbol principal contiene una derivacion fallida y una refutacion con la substitucioncomputada {X/a}.

Las ramas de un arbol-SLDNF en un bosque-SLDNF representan todas lasderivaciones-SLDNF completas de su raız, con base en la funcion de seleccion dada.Hay cuatro clases de derivaciones-SLDNF completas:

1. derivaciones infinitas;2. derivaciones finitas fallidas (terminan en FF);3. refutaciones (terminan en 2); y4. derivaciones plantadas (si ninguno de los casos anteriores aplica).

Ejemplo 21 Consideren el siguiente programa:

termina(X)← ¬ciclo(X).ciclo(X)← ciclo(X).

El bosque-SLDNF para el ejemplo anterior se muestra en la figura 5.3. El bos-que incluye una derivacion plantada para termina(X) y una derivacion infinita paraciclo(X). Esto ilustra una de las razones por las cuales una derivacion se planta: unode sus arboles subsidiarios contiene solo derivaciones fallidas o infinitas.

5.5 Resolucion SLDNF para programas generales 69

base(X).

← en(Y0,X),en la mesa(X).

← en la mesa(b).

←¬no en la mesa(b).

FF

← en la mesa(a).

←¬en la mesa(a).

2

← no en la mesa(b).

← en(b,Y0).

2

← no en la mesa(a).

← en(a,Y0).

FF

Figura 5.2 Bosque-SLDNF para la meta← base(X).

← paro(X).

←¬ciclo(X).

← ciclo(X).

← ciclo(X).

Figura 5.3 Bosque-SLDNF para la meta← paro(X).

El siguiente programa tambien conduce a una derivacion plantada (ciclo en elcomputo de la negacion):

parado ja(X)← ¬ok(X).ok(X)← ¬parado ja(X).

Intenten construir el bosque-SLDNF de este programa y observaran tambien queen este caso, la arbol principal es a su vez un arbol subsidiario.

La ultima razon para que una derivacion quede plantada es ilustrada por el si-guiente programa:

70 5 Negacion

top(X)← ¬bloqueado(X).bloqueado(X)← en(Y,X).

en(a,b).

Es evidente que top(a) deberıa poder derivarse de este programa. Sin embargo, elarbol-SLDNF de la meta← top(X) no contiene refutaciones. De hecho, esta metase planta aun cuando ← bloqueado(X) tiene una refutacion. La razon de esto esque← bloqueado(X) no tiene ninguna derivacion que termine con una substitucioncomputada vacıa. A la meta ← ¬top(X), Prolog no responde b, sino que ¡todoslos bloques no estan en el tope de la pila! Esto se debe a la implementacion dela mayorıa de los Prolog. La definicion que dimos aquı de resolucion-SLDNF escorrecta.

Teorema 8 (Correctez de la resolucion-SLDNF) Sea ∆ un programa general y← α1, . . . ,αn una meta general. Entonces:

Si ← α1, . . . ,αn tiene una substitucion de respuesta computada θ , entoncescomp(∆) |= ∀(α1θ ∧·· ·∧αnθ).Si ← α1, . . . ,αn tiene un arbol-SLDNF finito que falla, entonces comp(∆) |=∀(¬(α1∧·· ·∧αn)).

La definicion de bosque-SLDNF no debe verse como una implementacion de laresolucion-SLDNF, solo representa el espacio ideal de computacion donde la co-rrectez puede ser garantizada.

Capıtulo 6Corte y Aritmetica

Resumen La computacion de un programa logico requiere la construccion y reco-rrido de un arbol-SLD. Esto no es necesariamente la forma mas eficiente de compu-tacion, por lo que en esta clase abordaremos dos extensiones de la programacionlogica, implementadas en ISO Prolog, para acelerar las computaciones realizadas:el corte y la aritmetica. Por simplicidad, la presentacion se basa en los programaslogicos definitivos, aunque los temas discutidos son aplicables a las derivaciones yarboles-SLDNF.

6.1. Corte: podando el arbol-SLD

El arbol-SLD de una meta definitiva puede tener muchas ramas que conducen alfallo de la meta y muy pocas, o una sola rama, que conducen al exito. Por ello, el pro-gramador podrıa querer incluir informacion de control en sus programas, para evitarque el interprete construya ramas fallidas. Observen que esta meta-informacion sebasa en la semantica operacional del programa, por lo que el programador debe sa-ber como se construyen y se recorren los arboles-SLD. El predicado !/0 denota laoperacion de corte, y puede utilizarse como una literal en las metas definitivas. Supresencia impide la construccion de ciertos sub-arboles.

Un interprete de Prolog recorre los nodos de un arbol-SLD primero en profun-didad. El orden de las ramas corresponde al orden textual de las clausulas en elprograma. Cuando una hoja es alcanzada, el proceso de backtracking es ejecutado.El proceso termina cuando no es posible hacer backtracking (todos los sub-arbolesde la raız del arbol han sido visitados).

Ejemplo 22 Asumamos el siguiente programa que define que el padre de una per-sona es su antecesor hombre:

71

72 6 Corte y Aritmetica

padre(X ,Y )← progenitor(X ,Y ),hombre(X).progenitor(ben jamin,antonio).

progenitor(maria,antonio).progenitor(samuel,ben jamin).

progenitor(alicia,ben jamin).hombre(ben jamin).

hombre(samuel).

El arbol-SLD de la meta← padre(X ,antonio) se muestra en la figura 6.1. Bajo lafuncion de seleccion implementada en Prolog, encontrara la solucion X/ben jamin.El intento por encontrar otra solucion con X/maria, mediante el backtracking, fa-llara puesto que maria no satisface el predicado hombre/1.

← padre(X ,antonio)

← progenitor(X ,antonio),hombre(X).

hombre(ben jamin).

2

← hombre(maria)

Figura 6.1 Arbol de derivacion-SLD para la meta← padre(X ,antonio)

Para detallar la semantica del corte, es necesario introducir algunos conceptosauxiliares. En un arbol-SLD, cada nodo ni corresponde a una meta Gi de una deri-vacion-SLD y tiene un atomo seleccionado asociado αi:

G0α0 G1 . . .Gn−1

αn−1 Gn

Asumamos que para cierto nodo nk, αk no es una sub-meta de la meta ini-cial. Entonces αk es un atomo βi del cuerpo de una clausula de la forma β0 ←β1, . . . ,βi, . . . ,βn cuya cabeza β0 unifica con la sub-meta seleccionada en algun no-do n0< j<k, es decir un nodo entre la raız del arbol y el nodo nk. El nodo n j se conocecomo el origen de αk y se denota como origen(αk).

El predicado de corte ! se procesa como un atomo ordinario situado en el cuer-po de una clausula. Sin embargo, cuando el corte es seleccionado para computar laresolucion, este tiene exito inmediatamente (con la substitucion vacıa ε como resul-tado). El nodo donde ! fue seleccionado es llamado el nodo de corte. Un nodo decorte puede ser visitado nuevamente durante el backtracking. En este caso, el cur-so normal del recorrido del arbol es alterado (por definicion el recorrido continua

6.1 Corte: podando el arbol-SLD 73

en el nodo superior a origen(!). Si el corte ocurre en la meta inicial, la ejecucionsimplemente termina.

Ejemplo 23 La formulacion del problema padre, nos dice que a lo mas existe unasolucion para nuestra meta. cuando la solucion se encuentra, la busqueda puededeternerse pues ninguna persona tiene mas de un padre. Para forzar esta situacion,el predicado de corte se agrega al final de padre/2:

padre(X ,Y )← progenitor(X ,Y ),hombre(X), !.

Observen que el programa modificado en el ejemplo anterior solo puede compu-tar un elemento de la relacion padre/2. El corte detendra la busqueda despues deencontrar la primer respuesta para la meta ← padre(X ,Y ). El origen del corte esla raız del arbol, por lo que la busqueda termina despues de hacer backtracking alnodo de corte. La otra rama del arbol no es recorrida. El arbol-SLD del programaque incluye el corte se muestra en la figura 6.2.

← padre(X ,antonio)

← progenitor(X ,antonio),hombre(X), !.

hombre(ben).

←!

2

Figura 6.2 Arbol de derivacion-SLD para la meta ← padre(X ,antonio) con las ramas fallidaspodadas.

Observen que la version modificada con el corte, no puede usarse para computarmas de un elemento de la relacion “es padre de”. El corte detendra la busquedadespues de encontrar la primer respuesta a la meta definitiva.

A partir de la definicion del corte, se sigue que los efectos del operador son:

1. Divide el cuerpo de la meta en dos partes, separando la ejecucion de la recon-sideracion – despues de exito de !/0 , no es posible hacer backtracking hacıalas literales a la izquierda del corte. Sin embargo, a la derecha del corte todofunciona de manera usual.

2. Poda las ramas sin explorar directamente bajo origen(!). En otras palabras, nohabra mas intentos de unificar la sub-meta seleccionada de origen(!) con el restode las clausulas del programa.

74 6 Corte y Aritmetica

El corte es controvertido. La intencion al introducir el corte, es poder controlar laejecucion de los programas, sin cambiar su significado logico. Por tanto, la lecturalogica del corte es “verdadero”. Operacionalmente, si el corte remueve solo ramasfallidas del arbol-SLD, no tiene influencia en el significado logico de un progra-ma. Pero el corte puede remover tambien ramas exitosas del arbol-SLD, atentandocontra la completitud de los programas definitivos, o la correctez de los programasgenerales.

Ejemplo 24 Es bien sabido que los padres de un recien nacido estan orgullosos.La proposicion puede representarse con la siguiente clausula definitiva:

orgulloso(X)← padre(X ,Y ),recienNacido(Y ).

consideren las siguiente clausulas adicionales:

padre(X ,Y )← progenitor(X ,Y ),hombre(X).progenitor( juan,maria).

progenitor( juan,cristina).hombre( juan).

recienNacido(cristina).

La respuesta a la meta ← orgulloso( juan) es “Si”, puesto que como describi-mos, juan es padre de cristina, que es un recien nacido. Ahora, si remplazamos laprimera clausula, con su version que utiliza corte:

padre(X ,Y )← progenitor(X ,Y ),hombre(X), !.

Y preguntamos nuevamente a Prolog, si

← orgulloso( juan).

la respuesta sera “No”. Esto se debe a que la primer hija de juan en el programaes maria. Una vez que esta respuesta se ha encontrado, no habra mas intentos desatisfacer la meta en origen(!). No se consideraran mas hijos de juan en la solucioncomputada.

El programa del ejemplo anterior se ha vuelto incompleto, algunas respuestas co-rrectas no pueden ser computadas. Mas grave aun es el caso de las metas generales,donde se puede llegar a resultados incorrectos, por ejemplo, ← ¬orgulloso( juan)tendrıa exito en la version de nuestro programa que utiliza corte.

Hasta ahora hemos distinguido dos usos del corte: eliminar ramas fallidas en elarbol-SLD; y podar ramas exitosas. Eliminar ramas fallidas se considera una practi-ca sin riesgo, porque no altera las respuestas producidas durante la ejecucion de unprograma. Tales cortes se conocen como cortes verdes. Sin embargo, este uso deloperador corte, esta ligado al uso particular de un programa. Como se ilustra en

6.1 Corte: podando el arbol-SLD 75

los ejemplos anteriores, para algunas metas, el operador solo eliminara ramas falli-das; pero para otras podara ramas exitosas. Cortar ramas exitosas se considera unapractica de riesgo. Por eso, tales cortes se conocen como cortes rojos.

Ejemplo 25 Consideremos un ejemplo de corte verde. Si en el ejemplo anterior ma-ria es una recien nacida, agregarıamos la clausula recienNacido(maria) a nuestroprograma. Entonces la meta ← orgulloso(X) nos dirıa que X/X/ juan esta orgu-lloso. Esto es, juan tiene una doble razon para estar orgulloso. Pero a nosotros nosbasta con saber solo una vez, que orgulloso esta juan. Para evitar que Prolog nosde la respuesta dos veces, definirıamos:

orgulloso(X)← padre(X ,Y ),recienNacido(Y ), !.

Ejemplo 26 Ahora consideren un ejemplo de corte rojo:

min(X ,Y,X)← X < Y, !.min(X ,Y,Y ).

Aparentemente nuestro programa es correcto. De hecho, el programa responderıade manera correcta a metas como←min(2,3,X) respondiendo que “Si” para X/2;y para ← min(3,2,X) responderıa que “Si” para X/2. Sin embargo el programano es correcto. Consideren la meta← min(2,3,3) y veran que Prolog responderıa“Si”. La razon de esto es que la segunda clausula dice: el menor de X e Y es siempreY . El corte esta eliminando algunas ramas fallidas, que serıan utiles en la definicionde min. La definicion correcta, usando corte, serıa:

min(X ,Y,X)← X < Y, !.min(X ,Y,Y )← X ≥ Y.

Un comentario final. El corte puede usarse para implementar la negacion en Pro-log. Consideren las siguientes clausulas donde f ail es un predicado de Prolog quecarece de definicion y no puede ser definido por el usuario:

not(estudiante(X))← estudiante(X), !, f ail.

not(estudiante(X).

Esta definicion descansa enteramente en la semantica operacional de Prolog. Es-to es, las sub-metas se deben resolver de izquierda a derecha, y las clausulas sebuscan en el orden en que aparecen en el texto del programa. Si queremos sabersi juan no es un estudiante, le meta a adoptar es← not(estudiante( juan)). Ahora,hay dos casos a considerar: Si la meta ← estudiante( juan) tiene exito, el opera-dor de corte eliminara la segunda clausula y la meta original fallara; Si la meta← not(estudiante( juan)) falla, la segunda clausula sera intentada en el backtra-cking y la meta negada tendra exito.

Podemos definir not/1 haciendo uso del meta-predicado estandar de Prologcall/1:

76 6 Corte y Aritmetica

not(X)← call(X), !, f ail.

not(X).

El argumento a call/1 debe ser un atomo de base, de otra forma, el computo producesubstituciones y la implementacion resulta logicamente incorrecta.

Usar cortes aleatoriamente, para intentar obtener respuestas correctas a un pro-blema, es una de las fuentes principales de errores entre los novatos de la programa-cion logica. Antes de intentar usar un corte, intenten escribir programas logicamentecorrectos.

6.2. Aritmetica

Hemos demostrado que los programas definitivos pueden describir cualquier re-lacion computable. Esto es, cualquier maquina de Turing puede codificarse comoun programa logico definitivo. Esto significa que, desde el punto de vista teorico, laprogramacion logica es tan expresiva como otros paradigmas de programacion. Laresolucion y la busqueda exhaustiva, proveen una herramienta universal de compu-tacion.

Desafortunadamente, desde el punto de vista practico, esta no es la mejor formade computar todo. Consideren las operaciones aritmeticas sobre los numeros na-turales. Existen implementaciones en hardware extremadamente eficientes de talesoperaciones. Ası que es deseable que Prolog tenga acceso a las operaciones del pro-cesador y su aritmetica de maquina. El problema es ¿Cuando es posible hacer cosasparecidas sin destruir la naturaleza declarativa de los programas logicos?

Observen primero que las operaciones como suma/2 y multiplicacion/2 puedendescribirse facilmente en un programa definitivo. Los numeros naturales puedendescribirse mediante terminos de base. Una forma estandar de hacer esto es utilizarla constante 0 para representar el cero, y el functor unario s/1 para representar elsucesor de un numero. Los numeros naturales consecutivos estan representados por:

0,s(0),s(s(0)), . . .

Las operaciones de adicion y multiplicacion son funciones binarias sobre losnumeros naturales. Los programas logicos proveen unicamente un formalismo pararepresentar relaciones. Sin embargo, una funcion binaria puede verse como una re-lacion ternaria consistente en todas las tripletas 〈X ,Y,Z〉 tal que Z es el resultado deaplicar la funcion a X e Y .

Ahora, es bien sabido que las operaciones de adicion y multiplicacion se carac-terizan por los axiomas de Peano:

6.2 Aritmetica 77

0+X = X

s(X)+Y = s(X +Y )0×X = 0

s(X)×Y = (X×Y )+Y

Estos axiomas relacionan argumentos y resultados de las operaciones. En formade programa logico definitivo, se formularıan como sigue:

suma(0,X ,X).suma(s(X),Y,s(Z))← suma(X ,Y,Z).

mult(0,X ,0).mult(s(X),Y,Z)← mult(X ,Y,W ),suma(W,Y,Z).

El programa puede usarse, por ejemplo, para sumar dos y tres:

← suma(s(s(0)),s(s(s(0))),X)

que darıa como resultado “si” para X/s(s(s(s(s(0))))). Un arbol de refutacion-SLDes construido para obtener este resultado.

El programa puede usarse tambien para computar resta y una forma limitadade division. Por ejemplo:← suma(X ,s(s(0)),s(s(s(0)))) representa la resta de tresmenos dos, dando como resultado “Si” para X = s(0).

Cuando comparamos estos ejemplos con la practica comun en programacion,resulta evidente que:

La representacion de los numeros naturales como terminos de base no es adecua-da para los humanos.Las computaciones de la aritmetica no hacen uso del hardware, por lo que resul-tan lentas: Sumar X e Y requiere X +1 llamada a suma.No es posible construir expresiones aritmeticas, puesto que suma/3 y mult/3representan relaciones.

El primer problema se puede resolver facilmente introduciendo arreglos sintacti-cos: sn(0) = n. Tambien se conocen tecnicas para compilar expresiones aritmeti-cas a codigo ensamblador. El principal problema es como incorporar expresionesaritmeticas sin destruir el significado declarativo de los programas.

Asumamos que las expresiones aritmeticas apareceran como terminos en losprogramas definitivos. Las respuestas de estos programas deberan tomar en con-sideracion la equivalente entre expresiones aritmeticas. Por ejemplo, consideren lasiguiente regla para computar impuestos: si el ingreso anual es mayor que 150000dolares, entonces el impuesto es 30%, en otro caso se cobrara el 25% del ingresomenos 30000 dolares.

78 6 Corte y Aritmetica

impuesto(Ingresos,0,5∗ Ingresos)← Ingresos > 150000.

impuesto(Ingresos,0,25∗ (Ingresos−30000))← Ingresos≤ 150000.

Por lo tanto, una persona que gana 130000 dolares deberıa obtener para la meta← impuesto(130000,25000) una respuesta de “Si”. Pero estas reglas no puedenusarse para encontrar una refutacion a la meta, ya que ninguna cabeza de reglaunifica con la sub-meta de la meta. La razon es que la unificacion estandar es muydebil, como para darse cuenta que 25000 y 0.25*(130000-30000) son equivalentes.Por lo tanto, la equivalencia debe describirse mediante axiomas de igualdad parala aritmetica, los cuales no han sido incluidos en el programa anterior.

De esta discusion se sigue que es necesaria una extension al concepto de pro-grama logico. Para nuestro ejemplo, el programa deberıa consistir de dos partes: unconjunto de clausulas definitivas P, y un conjunto de axiomas de igualdad E, descri-biendo la equivalencia entre los terminos. Este tipo de programas ha sido estudiadoen la literatura, donde el resultado mas importante es el concepto de unificacion ge-neralizada, asociada a una teorıa de igualdad E y llamada E-unificacion. Lo quesigue es una breve introduccion a este tema.

Una teorıa de igualdad en clausulas definitivas es un conjunto (posiblementeinfinito) de clausulas definitivas, donde cada atomo es de la forma s = t y s y t sonterminos. Algunas veces, la forma de las clausulas se restringe a hechos.

Un programa definitivo con igualdad es un par P,E donde P es un programadefinitivo, que no contiene ocurrencias del predicado = /2 y E es una teorıa deigualdad en clausulas definitivas.

Sea E una teorıa de igualdad en clausulas definitivas. Una substitucion θ es unE-unificador de los terminos s y t, si y solo si sθ = tθ es una consecuencia logicade E.

Ejemplo 27 Sea E una teorıa de igualdad que expresa las equivalencias propiasde las expresiones aritmeticas. Consideren las expresiones:

t1 := (2×X)+1t2 := Y +2

Por ejemplo, la substitucion θ = {Y/(2×X−1)} es un E-unificador de t1 y t2.

Ahora, para un programa dado P,E y una meta← α1, . . . ,αn la refutacion de lameta puede construirse de la misma manera que para los programas definitivos, conla diferencia de que utilizaremos E-unificacion, en lugar de la unificacion normal.

Encontrar E-unificadores puede verse como la resolucion de ecuaciones en unalgebra definida por los axiomas de igualdad. Se sabe que el problema de la E-unificacion es en general indecidible. Aun siendo decidible para alguna teorıa E,pueden existir muchas soluciones a una ecuacion dada. La situacion donde existeun unificador mas general, suele ser rara. Todo esto significa que, aun cuando esposible construir E-unificadores, una nueva fuente de indeterminismo se introducecon ellos.

6.2 Aritmetica 79

Asumamos ahora que una teorıa de igualdad E describe todas las funciones ex-ternas, incluidas las operaciones aritmeticas, usadas en un programa logico. Estosignifica que para cualquier par de terminos de base s y t, cuyos functores principa-les denoten funciones externas, la formula s = t es una consecuencia logica de E, siy solo si, la invocacion de s regresa el mismo resultado que la invocacion de t. Paraterminos base, la E-unificacion es decidible. Esto puede ser explotado de la siguientemanera: cuando una llamada a una funcion externa es encontrada como termino a E-unificar, es invocada y su forma reducida es unificada por el procedimiento normal.Observen que las funciones externas solo pueden ser invocadas sobre argumentos debase. Si algunas variables de la funcion externa no tienen valores, la llamada externaprovocara un error y no se encontrara un E-unificador.

Esta idea es incorporada en el ISO Prolog. Los enteros son representados pornumerales como 0, 1, 2006, etc. Tambien existe un soporte limitado para numerosreales como 3.14, 0.333, etc. Logicamente, los numerales son constantes. Un nume-ro limitado de functores con notacion infija estan predefinidos en Prolog: +, -, *, /(division en reales), // (division entera), mod, etc.

Dos predicados predefinidos se ocupan de la E-unificacion. El predicado =:= /2checa si dos terminos de base son E-unificables. Por ejemplo, la meta← 2∗3 =:=2+4 responde “Si” con la substitucion vacıa computada. Si los argumentos no sonterminos de base, Prolog aborta la ejecucion del programa con un mensaje de error.

El predicado is/2 unifica el primer argumento con la forma reducida del segun-do. Por ejemplo ← X is 2 + 2 responde “Si” con la substitucion {X/4}. El primerargumento puede no ser una variable, en lo que constituye un caso especial de laE-unificacion =:= /2. Por ejemplo, ← X + 1 is 2 + 3 falla aunque exista un E-unificador {X/4}.

Otros predicados estandar incluyen = \= /2 que checa cuando dos terminos noson E-unificables. El lenguaje tambien provee predicados para comparar numeros,como >,<,≤ y ≥.

Parte IIProlog

Capıtulo 7Introduccion a Prolog

Este capıtulo constituye una guıa rapida al lenguaje prolog.

83

Capıtulo 8Estrategias basicas de resolucion de problemas

Resumen En este capıtulo revisaremos los conceptos de espacio de soluciones ybusquedas en espacios de soluciones. Se revisara la representacion de estos espaciosen Prolog y se ejemplificara el uso de estrategias como las busquedas primero enprofundidad, primero en amplitud y guiadas por funciones de utilidad.

8.1. Introduccion

Esta sesion la dedicaremos a estudiar un esquema general de representacion deproblemas y sus soluciones, ampliamente utilizado en la Inteligencia Artificial. Con-sideremos el ejemplo mostrado en la figura 8.1. El problema a resolver consiste enencontrar un plan para colocar los cubos en una configuracion determinada, par-tiendo de una configuracion inicial. Solo un bloque puede moverse a la vez y lasacciones del brazo son del tipo “pon A en la mesa”, “pon B en C”, etc. Dos con-ceptos aparecen en esta descripcion: i) Situaciones o estados del problema; y ii)acciones, o movimientos legales, que transforman un estado del problema en otro.

B

A

C

B

A

C

?

Figura 8.1 Un problema de ordenamiento de bloques.

Estados y acciones configuran un grafo dirigido conocido como espacio de esta-dos (Fig. 8.2. El problema de encontar un plan para acomodar los cubos es equiva-lente a encontrar un camino en este grafo, entre un nodo representado el estado ini-

85

86 8 Estrategias basicas de resolucion de problemas

cial del problema y un nodo representando la solucion final, un nodo meta. ¿Comopodemos representar tal grafo en Prolog?

Figura 8.2 Espacio de estados para el problema de ordenamiento de bloques.

El espacio de estados sera representado por una relacion s(X ,Y ) que sera verda-dera si existe un movimiento valido en el espacio de estados del nodo X al nodoY . El nodo Y recibe el nombre de sucesor de X . Si existe un costo asociado a lasacciones esto puede representarse por un tercer argumento de s, s(X ,Y,Costo).

Esta relacion puede ser especificada extensionalmente por un conjunto de hechos.Sin embargo, para cualquier problema interesante, esto es irrealizable. La relacions es normalmente definida intensionalmente mediante un conjunto de reglas quecomputan el sucesor de un nodo dado.

Otro detalle importante tiene que ver con la representacion de los estados del pro-blema, los nodos. La representacion debe de ser compacta y permitir la computacioneficiente de los nodos sucesores; y posiblemente el costo asociado a las acciones.

Tomemos como ejemplo el mundo de los bloques. Cada estado del problemapuede ser representado por una lista pilas. Cada pila a su vez puede ser representadapor una lista de bloques. El tope de cada pila es el primer elemento de cada listade bloques. La pila vacıa esta representada por la lista vacıa. Ası, el estado inicialmostrado en la figura 8.1 es la lista: [[c,b,a],[],[]] (suponemos, que en lamesa solo hay espacio para 3 pilas de bloques).

Una meta es cualquier arreglo con los bloques en el orden deseado. Existen tressoluciones en este caso:

[[a,b,c],[],[]],[[],[a,b,c],[]] o[[],[],[a,b,c]].

La relacion sucesor puede programarse de acuerdo a la siguiente regla: elEstado2 es sucesor de Estado1 si hay dos pilas Pila1 y Pila2 en Estado1 y eltope de la pila Pila1 puede moverse a Pila2. Esto se traduce a Prolog como:

8.2 Busqueda primero en profundidad 87

1 s(Pilas, [Pila1, [Tope1|Pila2] | OtrasPilas ]) :-2 quitar([Tope1|Pila1], Pilas, Pilas1),3 quitar(Pila2, Pilas1, OtrasPilas).4

5 quitar(X, [X|Ys], Ys).6 quitar(X, [Y|Ys], [Y|Ys1]) :-7 quitar(X,Ys,Ys1).

La relacion s nos permite verificar si un nodo es sucesor de otro, por ejemplo:

1 ?- s([[b],[a,c],[]],[[],[b,a,c],[]]).2 Yes3 ?- s([[b],[a,c],[]],[[],[a,b,c],[]]).4 No

Para representar los estados meta usamos:

1 meta(Estado) :-2 member([a,b,c],Estado).

Un predicado solucion/2 se usa para plantear las metas, por ejemplo: solu-cion([[c,a,b],[],[]],Sol). La solucion sera encontrada buscando en el espacio de esta-dos del problema.

8.2. Busqueda primero en profundidad

Dada la formulacion de un problema en terminos de su espacio de estados, exis-ten diversas estrategias para encontrar un camino solucion. Dos estrategias basicason las busquedas primero en profundidad y primero en amplitud. En esta seccionimplementaremos la busqueda primero en profundidad.

Comenzaremos con una idea simple. Para encontrar un camino solucion Sol, deun nodo dado N a un nodo meta:

Si N es un nodo meta, entonces Sol = [N], oSi existe un nodo sucesor N1 tal que existe un camino Sol1 de N1 al nodo meta,entonces Sol = [N|Sol1].

Lo cual traduce a Prolog como:

1 solucion(N,[N]) :-2 meta(N).3

4 solucion(N, [N|Sol1]) :-5 s(N,N1),6 solucion(N1,Sol1).

88 8 Estrategias basicas de resolucion de problemas

De forma que para computar la solucion al problema de los bloques, preguntamosa Prolog:

?- solucion([[c,b,a],[],[]],Sol).Sol = [[[c, b, a], [], []],

[[b, a], [c], []],[[a], [b, c], []],[[], [a, b, c], []]]

Yes

La solucion se computa como sigue. En un principio, el estado inicial N =[[c,b,a][][]], por lo que el programa se pregunta si N es una meta. La clausula meta/1funciona verificando si la solucion [a,b,c] es miembro del estado N. Como esta metafalla, Prolog intentara satisfacer su meta inicial con la segunda clausula solucion/2.Esto implica generar un sucesor de N (llamada a s(N,N1)). Ası que se computaN1 = [[b,a], [c], []] y se verifica si esto es una solucion. Como la meta falla, se gene-ra un sucesor de N1 y ası hasta llegar a [[], [a,b,c], []].

Este proceso puede seguirse detalladamente utilizando el traceador grafico deSWI-Prolog. Para ello invoquen la meta guitracer. Al trazar una funcion veran unaventana como la mostrada en la figura 8.3. La ventana superior izquierda muestralas substituciones computadas, la derecha las pilas formadas, y la inferior muestrael codigo del programa que esta siendo trazado.

Figura 8.3 Traza grafica de SWI-Prolog.

8.3 Busqueda primero en amplitud 89

Una primera mejora a este algoritmo, consiste en evitar que los nodos visitadosvuelvan a ser expandidos, evitando ası caer en ciclos. La idea es llevar un registrode los nodos visitados. El resultado se da del nodo final hacıa el estado inicial:

1 solucion2(Nodo,Sol) :-2 primeroProfundidad([],Nodo,Sol).3

4 primeroProfundidad(Camino, Nodo, [Nodo|Camino]) :-5 meta(Nodo).6

7 primeroProfundidad(Camino, Nodo, Sol) :-8 s(Nodo,Nodo1),9 not(member(Nodo1, Camino)),

10 primeroProfunidad([Nodo|Camino],Nodo1,Sol).

Finalmente, para evitar caer en busquedas infinitas sobre ramas no ciclicas, esposible establecer un limite a la profunidad de la busqueda. Para ello definiremosprimeroProfundidad2/3, donde el tercer argumento es la profunidad maxima de labusqueda.

1 solucion3(Nodo,Sol,MaxProf) :-2 primeroProfundidad2(Nodo,Sol,MaxProf).3

4 primeroProfundidad2(Nodo,[Nodo],_) :-5 meta(Nodo).6

7 primeroProfundidad2(Nodo,[Nodo|Sol],MaxProf):-8 MaxProf > 0,9 s(Nodo,Nodo1),

10 Max1 is MaxProf-1,11 primeroProfundidad2(Nodo1,Sol,Max1).

8.3. Busqueda primero en amplitud

En contraste con la busqueda primero en profundidad, la estrategia de busquedaprimero en amplitud elige visitar primero los nodos que estan mas cercanos a la raız,por lo que el arbol de busqueda crece mas en amplitud, que en profundidad.

Esta estrategia de busqueda es mas complicada de programar. La razon de ello esque debemos mantener un conjunto de nodos candidatos alternativos, no unicamenteun nodo como lo hacıamos al buscar en profundidad. Ademas, debemos mantenerlos caminos, si queremos obtenerlos como parte de la solucion computada. De formaque:

?- primeroEnProfundidad(Caminos,Sol).

90 8 Estrategias basicas de resolucion de problemas

es verdadera, si y solo si algun camino miembro del conjunto de candidatosCaminos, puede extenderse hasta un nodo meta. Sol es el camino solucion.

El conjunto Caminos sera representado como listas de caminos, donde cada ca-mino se representara como una lista de nodos en el orden inverso en que fueronvisitados. Esto es, la cabeza de la lista que representa un camino tendra el ultimonodo generado; y el ultimo nodo en la lista sera el estado inicial de la busqueda. Aliniciar Caminos tiene un solo camino candidato: [[NodoInicial]].

El algoritmo de la busqueda primero en amplitud puede describirse como sigue,dado un conjunto de caminos candidatos:

Si el primer camino contiene un nodo meta como su cabeza, entonces esta es lasolucion al problema. De otra formaEliminar el primer camino del conjunto de caminos candidatos y generar el con-junto de todas las posibles extensiones de un paso de este camino. Agregar esteconjunto de extensiones al final del conjunto de candidatos. Ejecutar la busquedaprimero en amplitud en este nuevo conjunto de caminos candidatos.

Para generar las extensiones de un solo paso, dado un camino, podemos usar elpredicado predefinido bago f Veamos el programa:

1 %%% solucion(Inicio,Sol) Sol es un camino (en orden inverso)2 %%% de Inicio a una meta3

4 solucion(Inicio,Sol) :-5 primeroEnAmplitud([[Inicio]],Sol).6

7 %%% primeroEnAmplitud([Camino1,Camino2,...],Sol) Sol es una8 %%% extension hacıa la meta de alguno de los caminos9

10 primeroEnAmplitud([[Nodo|Camino]|_],[Nodo|Camino]) :-11 meta(Nodo).12

13 primeroEnAmplitud([Camino|Caminos],Sol) :-14 extender(Camino,NuevosCaminos),15 append(Caminos,NuevosCaminos,Caminos1),16 primeroEnAmplitud(Caminos1,Sol).17

18 extender([Nodo|Camino],NuevosCaminos) :-19 bagof([NuevoNodo,Nodo|Camino],20 (s(Nodo,NuevoNodo), not(member(NuevoNodo, [Nodo|

Camino]))),21 NuevosCaminos),22 !.23

24 %%% Si extender falla, Camino no tiene sucesores (lista vacıa)25

26 extender(Camino_,[]).

Si aplicamos este programa de busqueda al programa del mundo de los cubos,obtendremos:

8.3 Busqueda primero en amplitud 91

?- solucion([[c,b,a],[],[]],Sol).Sol = [[[], [a, b, c], []], [[a], [b, c], []],

[[b, a], [c], []], [[c, b, a], [], []]]Yes

Si queremos buscar en el espacio del grafo de la figura 8.4, codificamos los su-cesores y las metas como sigue:

1 s(a,b).2 s(a,c).3 s(b,d).4 s(b,e).5 s(d,h).6 s(e,i).7 s(e,j).8 s(c,f).9 s(c,g).

10 s(f,k).11

12 meta(j).13 meta(f).

f

kj

a

b c

d e g

h i

Figura 8.4 Grafico de un espacio de estados: las metas son f y j.

y buscamos las soluciones:

?- solucion(a,Sol).Sol = [f, c, a] ;Sol = [j, e, b, a] ;No

Observen que al realizarse la busqueda primero en amplitud, la primer solucionencontrada involucra la meta f mas cercana al nodo raız.

92 8 Estrategias basicas de resolucion de problemas

8.4. Busqueda primero el mejor

Un programa de busqueda primero el mejor, puede verse como una mejora a labusqueda primero en amplitud. El algoritmo de primero el mejor comienza tambiencon un nodo inicial y mantiene una lista de caminos candidato. La busqueda poramplitud siempre elige para expandir el camino candidato mas corto y la busquedaprimero el mejor afina esta estrategia.

Asumamos que una funcion costo es definida para los arcos de un espacio deestados de un problema. De forma que c(n,n′) es el costo de moverse de un nodo nal nodo n′ en el espacio de estados.

Sea el estimador heurıstico una funcion f tal que para cada nodo n en el espaciode estados, f (n) estima la “dificultad” de llegar a n. De acuerdo a esto, el nodomas promisorio sera aquel que minimice f . Usaremos aquı una forma especial de lafuncion f que nos llevara al bien documentado algoritmo A*. f (n) sera construidapara estimar el costo del mejor camino solucion entre un nodo inicial s y un nodometa, con la restriccion de que el camino pase por el nodo n. Supongamos que talcamino existe y que un nodo meta que minimiza su costo es t. Entonces el estimadode f (n) puede calcularse como la suma de dos terminos:

f (n) = g(n)+h(n)

donde g(n) es el estimado del costo de un camino optimo de s a n; y h(n) es elestimado del costo de un camino optimo de n a t (Fig. 8.5).

s

n

g(n)

n' n''

t

h(n)

Figura 8.5 Estimado heurıstico f (n) = g(n)+h(n).

Cuando un nodo n es encontrado en el proceso de busqueda, tenemos la siguientesituacion: un camino de s a n debio ser encontrado, y su costo puede computarse co-mo la suma del costo de cada arco en el camino. Este camino no es necesariamenteun camino optimo entre s y n (puede haber caminos mejores no cubiertos aun por labusqueda), pero su costo puede servir como un estimador g(n) del costo mınimo de

8.4 Busqueda primero el mejor 93

ir de s a n. El otro termino, h(n), es mas problematico, porque el espacio entre n y tno ha sido explorado aun, por lo que su valor es una verdadera adivinanza heurısti-ca, resuelta con base en el conocimiento general del algoritmo sobre la estructuraparticular del problema a resolver. Como h depende del dominio del problema, noexiste un metodo universal para su construccion. Asumamos por el momento queuna funcion h nos es dada y concentremonos en los detalles del programa primeroel mejor.

e

s

a

bc

f

d

g

t

2

2

3

3

2

2

52

2

7

4

2

3

44

5

Figura 8.6 Mapa entre ciudades, sus distancias por carretera, y sus distancias lıneales a la meta(cuadros).

Como ejemplo consideren el siguiente problema. Dado un mapa (Fig. 8.6), latarea es encontrar la ruta mas corta entre una ciudad inicial s y una ciudad meta t. Alestimar el costo del resto del camino de la ciudad X a la meta, usamos simplementela distancia lineal denotada por dist(X , t). Entonces:

f (X) = g(X)+h(X) = g(X)+dist(X , t)

En este ejemplo, podemos imaginar la busqueda de primero el mejor consistentede dos procesos, cada uno de ellos explorando uno de los dos caminos alternativos:el proceso 1 para el camino vıa a y el proceso 2 para el camino vıa e. En los pasosiniciales el proceso 1 esta mas activo porque los valores f en ese camino son masbajos que los del otro. En el momento en que el proceso 1 llega a c y el proceso 2sigue en e, la situacion cambia:

f (c) = g(c)+h(c) = 6+4 = 10

f (e) = g(e)+h(e) = 2+7 = 9

94 8 Estrategias basicas de resolucion de problemas

De forma que f (e) < f (c) y ahora el proceso 2 procede al nodo f y el proceso 1espera. Pero entonces:

f ( f ) = 7+4+11

f (c) = 10

f (c) < f ( f )

por lo que el proceso 2 es detenido y se le permite al proceso 1 continuar, pero solohasta el nodo d ya que f (d) = 12 > 11. El proceso 2 continua corriendo hasta llegara la meta t (Fig. 8.7).

s

e a

b

f

c

g d

t

f(a)=2+5=7

f(b)=4+4=8 f(e)=2+7=9

f(c)=6+4=10

f(f)=7+4=11

f(g)=9+2=11

f(t)=11+0=11

Figura 8.7 La busqueda en el mapa de las ciudades.

Este proceso de busqueda parte del nodo inicial (la ciudad s) y genera nuevosnodos sucesores, expandiendose siempre en la direccion mas promisora de acuerdoa los valores de la funcion f . Esto genera un arbol que crece hasta llegar a un nodometa. Este arbol sera representado en nuestro programa de busqueda primero elmejor por terminos de dos formas:

1. l(N,F/G) representa una hoja del arbol, donde N es un nodo en el espacio deestados, G es g(N) y F es f (N) = G+h(N).

2. t(N,F/G,Subs) representa un nodo interno del arbol, con una lista de subarbolesSubs no vacıos. F es el valor f actualizado de N. El valor para f del sucesor masprometedor de N. La lista Subs se ordena de acuerdo al valor creciente de losvalores para f de los subarboles.

8.4 Busqueda primero el mejor 95

Por ejemplo, consideren nuevamente la busqueda ilustrada en la figura 8.7. En elmomento en que el nodo s es expandido, el arbol de busqueda consta de tres nodos:el nodo s y sus hijos a y e. En nuestro programa, este arbol se representa como:

t(s,7/0,[l(a,7/2),l(e,9/2)]

El valor f para s es 7, esto es, el valor mas promisorio de los hijos de s (a). Elarbol crece expandiendo el nodo mas primisorio. El mas cercano competidor de aes e con un f valor de 9. Se permite que a crezca mientras su f valor no exceda 9.Por lo tanto los nodos b y c son generados, pero c tiene un f valor de 10, lo cualexcede el umbral de crecimiento fijado en 9. En ese momento no se permite que acrezca mas. En ese momento el arbol es:

t(s,9/0,[l(e,9/2),t(a,10/2,[t(b,10/4,[l(c,10/6)])])])

Observen que ahora el valor f del nodo a es 10, mientras que el del nodo e es9. Estos valores se actualizaron porque fueron generados los nodos b y c. Ahora elnodo sucesor mas promisorio de s es s es e con un valor f de 9.

La actualizacion de los f valores es necesaria para permitir al programa reco-nocer el subarbol mas promisorio en cada nivel del arbol de busqueda (esto es, elsubarbol que contiene la hoja mas promisoria). Esta modificacion de los estimadosde f , nos lleva a la generalizacion de la definicion de f que extiende su defincion denodos a arboles. Para una hoja n del arbol, mantenemos la definicion original:

f (n) = g(n)+h(n)

Para un subarbol T , cuya raız es n y tiene como subarboles S1,S2, . . . :

f (T ) = mıni

f (Si)

El programa que implementa la busqueda primero el mejor es como sigue. Pri-mero definimos una funcion interfaz, que encuentre la solucion Sol a partir de unestado inicial Inicio. Para ello solucion/2 llama a expandir/6:

1 solucion(Inicio,Sol) :-2 expandir([],l(Inicio,0/0),9999,_,si,Sol).

El predicado expandir/6 se encarga de hacer crecer el arbol de busqueda. Susargumentos incluyen:

El Camino recorrido, inicialmente vacıo;El Arbol actual de busqueda, inicialmente una hoja con el nodo Inicio y valor de0 para F y G;El Umbral o limite para la expansion del arbol ( f -valor maximo), para este ejem-plo 9999 es suficiente (ningun costo en el arbol sera mayor que este valor);

96 8 Estrategias basicas de resolucion de problemas

El Arbol1 expandido bajo el Umbral (en consecuencia el f -valor de este arboles mayor, al menos que se halla encontrado la solucion). Originalmente se pasauna variable anonima en la llamada;La bandera Solucionado que puede tomar los valores si, no, o nunca;y la solucion, si existe, al problema regresado en la variable Sol.

El crecimiento del arbol se programa por casos. El caso mas simple correspondea aquel donde arbol de busqueda es una hoja, y su Nodo es una meta del espaciode estados. En ese caso [Nodo|Camino] es la solucion Sol buscada. Observen labandera Solucionado = si.

1 expandir(Camino,l(Nodo,_),_,_,si,[Nodo|Camino]) :-2 meta(Nodo).

El segundo caso corresponde a un arbol de busqueda que es una hoja, cuyo Nodono es una meta del espacio de estados y tiene un f -valor menor (o igual) que elUmbral. Para ello se generan los arboles sucesores del arbol de busqueda actual(Arboles) usando el predicado listaSucc/3. El arbol debe expandir/6 o fallar conSolucionado = nunca.

1 expandir(Camino,l(Nodo,F/G),Umbral,Arbol1,Solucionado,Sol) :-2 F =< Umbral,3 (bagof(M/C, (s(Nodo,M,C), (not(member(M,P)))), Succ),4 !,5 listaSucc(G,Succ,Arboles),6 mejorF(Arboles,F1),7 expandir(Camino,t(N,F1/G,Arboles),8 Umbral,Arbol1,Solucionado,Sol)9 ;

10 Solucionado=nunca).

El tercer caso es parecido, pero el Nodo es interno.

1 expandir(Camino,t(Nodo,F/G,[Arbol|Arboles]),2 Umbral,Arbol1,Solucionado,Sol) :-3 F =< Umbral,4 mejorF(Arboles,MejorF),5 min(Umbral,MejorF,Umbral1),6 expandir([Nodo|Camino],Arbol,7 Umbral1,Arbol1,Solucionado1,Sol),8 continuar(Camino,t(Nodo,F/G,[Arbol1|Arboles]),9 Umbral,Arbol1,Solucionado1,Solucionado,Sol).

El caso cuatro cubre los puntos muertos, cuando no hay solucion al problema:

1 expandir(_,t(_,_,[]),_,_,nunca,_) :- !.

El caso cinco define la situacion cuando el f -valor es mayor que el Umbral y seinhibe el crecimiento del arbol:

8.4 Busqueda primero el mejor 97

1 expandir(_,Arbol,Umbral,Arbol,no,_):-2 f(Arbol,F),F>Umbral.

continuar/7 decide como procede la busqueda de acuerdo al arbol expandido. Siuna solucion Sol se ha encontrado, se regresa este valor. En cualquier otro caso, laexpansion continua dependiendo del valor de Solucionado (no o nunca).

1 continuar(_,_,_,_,si,si,Sol).2

3 continuar(Camino,t(Nodo,F/G,[Arbol1|Arboles]),4 Umbral,Arbol1,no,Solucionado,Sol) :-5 insert(Arbol1,Arboles,NodoArboles),6 mejorF(NodoArboles,MejorF),7 expandir(Camino,t(Nodo,F/G,NodoArboles),8 Umbral,Arbol1,Solucionado,Sol).9

10 continuar(Camino,t(N,F/G,[_|Arboles]),11 Umbral,Arbol1,nunca,Solucionado,Sol) :-12 mejorF(Arboles,MejorF),13 expandir(Camino,t(N,MejorF/G,Arboles),14 Umbral,Arbol1,Solucionado,Sol).

Las siguientes funciones son auxiliares:

1 listaSucc(_,[],[]).2

3 listaSucc(G0, [N/C|NCs], Arboles) :-4 G is G0+C,5 h(N,H),6 F is G+H,7 listaSucc(G0,NCs,Arboles1),8 inserta(l(N,F/G,Arboles1),Arboles).9

10 inserta(Arbol,Arboles,[Arbol|Arboles]) :-11 f(Arbol,F), mejorF(Arboles,F1),12 F =< F1, !.13

14 inserta(Arbol,[Arbol1|Arboles], [Arbol1|Arboles1]) :-15 inserta(Arbol,Arboles,Arboles1).16

17 f(l(_,F/_),F).18

19 f(t(_,F/_,_),F).20

21 mejorF([Arbol|_],F) :-22 f(Arbol,F).23

24 mejorF([],9999).25

26 min(X,Y,X) :-27 X =< Y, !.

98 8 Estrategias basicas de resolucion de problemas

28

29 min(_,Y,Y).

Capıtulo 9Sistemas Expertos

Resumen En este capıtulo abordaremos uno de los productos tıpicos de la Inte-ligencia Artificial: los Sistemas Expertos. Normalmente, usamos herramientas dedesarrollo conocidas con shells para construir este tipo de sistemas, pero si nece-sitamos configurar un shell para una aplicacion en particular, es necesario conocercomo es que un sistema experto se construye desde cero. El capıtulo constituye elsegundo ejemplo del uso de Prolog para resolver problemas tıpicos de la InteligenciaArtificial

9.1. Introduccion

Los sistemas expertos (SE) son aplicaciones de computo que involucran expe-riencia no algorıtmica, para resolver cierto tipo de problema. Por ejemplo, los siste-mas expertos se usan para el diagnostico al servicio de humanos y maquinas. ExistenSE que juegan ajedrez, que planean decisiones financieras, que configuran compu-tadoras, que supervisan sistemas de tiempo real, que deciden polıticas de seguros, yllevan a cabo demas tareas que requieren de experiencia humana.

Los SE incluyen componentes del sistema en sı e interfaces con individuos convarios roles. Esto se ilustra en la figura 9.1. Los componentes mas importantes son:

Base de conocimientos. La representacion declarativa de la experiencia, muchasveces en forma de reglas IF-THEN.Almacen de trabajo. Los datos especıficos al problema que se esta resolviendo.Maquina de inferencia. El codigo central del SE que deriva recomendaciones conbase en la base de conocimientos y los datos especıficos del problema.Interfaz del usuario. El codigo que controla el dialogo entre el usuario y el SE.

Para entender un SE es necesario entender tambien el rol de los usuarios queinteraccionan con el sistema:

Experto del Dominio. El o los individuos que son los expertos en resolver elproblema que el SE intentara resolver.

99

100 9 Sistemas Expertos

Experto enel Dominio

Ingeniero del Conocimieno

Usuario

Ingeniero en Sistemas

Interface conel Usuario

Máquina de Inferencia

Base deConocimiento

Almacén deTrabajo

Experiencia

Figura 9.1 Componentes de un sistema experto e interfases humanas

Ingeniero de Conocimiento. El individuo que codifica el conocimiento de losexpertos en forma declarativa, para que pueda ser usado por el SE.Usuario. El individuo que consultara el SE para obtener los consejos que espe-rarıa de un experto del dominio.

Muchos SE se producen en ambientes de desarrollo conocidos como shells. Unshell es un sistema que contiene la interfaz del usuario, un formato de conocimientodeclarativo para la base de conocimientos y una maquina de inferencia. El ingenierode conocimiento usa el shell para construir un SE que resuelve problemas en undominio particular.

Si el sistema se construye desde cero, o utilizando shells configurados para ciertotipo de aplicaciones, otro individuo entra en escena:

Ingeniero de Sistemas. La persona que construye la interfaz del usuario, disenael formato declarativo de la base de conocimientos, e implementa la maquina deinferencia ¿adivinan cual es su rol?

En realidad eso depende de la talla del proyecto: El ingeniero de conocimientoy el ingeniero del sistema, pueden ser la misma persona. El diseno del formatode la base de conocimientos y su codificacion estan ıntimamente relacionados. Alproceso de codificar el conocimiento de los expertos, se le conoce como ingenierıadel conocimiento. Siendo esta una tarea complicada, se espera el uso de los shellshaga posible la reutilizacion del conocimiento codificado. En estas sesiones nosconcentraremos en la programacion en Prolog de los SE al margen del uso de lasshells.

9.2 Caracterısticas de los SE 101

9.2. Caracterısticas de los SE

Los SE poseen las siguientes caracterısticas, en menor o mayor grado:

Razonamiento guiado por las metas y encadenamiento hacia atras. Una tecnicade inferencia que usa las reglas IF-THEN para descomponer las metas en sub-metas mas faciles de probar.Manejo de incertidumbre. La habilidad del SE para trabajar con reglas y datosque no son conocidos con precision.Razonamiento guiado por los datos y encadenamiento hacia adelante. Una tecni-ca de inferencia que usa las reglas IF-THEN para deducir soluciones a un pro-blema a partir de los datos iniciales disponibles.Representacion de datos. La forma en que los datos especıficos a un problemadado, son almacenados y accesados por el SE.Interfaz del usuario. La parte del SE que se usa para una interaccion mas amiga-ble con el usuario.Explicacion. La habilidad del SE para explicar sus procesos de razonamiento ysu uso en el computo de recomendaciones.

9.2.1. Razonamiento basado en metas

El encadenamiento hacia adelante, o razonamiento basado en metas, es una for-ma eficiente de resolver problemas que pueden ser modelados como casos de “se-leccion estructurada”; donde la meta del SE es elegir la mejor opcion de entre variasposibilidades enumeradas. Por ejemplo, los problemas de identificacion caen en estacategorıa. Los problemas de diagnostico tambien caben aquı, pues se trata de elegirel diagnostico adecuado.

El conocimiento se codifica en reglas que describen como es que cada caso po-sible podrıa ser seleccionado. La regla rompe el problema en sub-problemas. Porejemplo, las siguientes reglas formarıan parte de un SE para identificar aves:

1 IF2 familia es albatros AND3 color es blanco4 THEN5 ave es albatros laysan.6

7 IF8 familia es albatros AND9 color es negro

10 THEN11 ave es albatros de pies negros.

El sistema puede usar otras reglas para resolver las sub-metas planteadas por lasreglas de alto nivel, por ejemplo:

102 9 Sistemas Expertos

1 IF2 orden es tubonasales AND3 tamano es grande AND4 alas es grandes anguladas5 THEN6 familia es albatros.

9.2.2. Incertidumbre

Es muy comun en la resolucion de problemas de seleccion estructurada, que larespuesta final no es conocida con total certeza. Las reglas del experto pueden servagas, o el usuario puede estar inseguro sobre sus respuestas. Esto es facilmenteobservable en el diagnostico medico. Los SE normalmente usan valores numericospara representar certidumbre. Existen diveras maneras de definirlos y usarlos en elproceso de razonamiento.

9.2.3. Razonamiento guiado por los datos

Para muchos problemas no es posible enumerar las soluciones alternativas a laspreguntas planteadas con antelacion. Los problemas de configuracion caen en estacategorıa. El encadenamiento hacia adelante, o razonamiento guiado por los datos,usa reglas IF-THEN para explorar el estado actual en la solucion del problema ymoverse a estados mas cercanos a la solucion.

Un SE para acomodar el mobiliario puede tener reglas para la ubicacion de unmueble en particular. Una vez que un mueble ha sido colocado, se puede procedercon los demas. La regla para colocar la TV enfrente del sofa es como sigue:

1 IF2 no_colocada tv AND3 sofa en pared(X) AND4 pared(Y) opuesta a pared(X)5 THEN6 colocar tv en pared(Y).

Esta regla toma un estado del problema con la television no situada y regresa unestado nuevo, donde la television ya ha sido colocada. Puesto que la television yaha sido colocada en su lugar, esta regla no volvera a ser disparada por el SE. Otrasreglas seran usadas para colocar el resto de los muebles hasta terminar.

9.3 Usando la maquina de inferencia de Prolog 103

9.3. Usando la maquina de inferencia de Prolog

Como pueden haber adivinado, Prolog posee una maquina de inferencia por en-cadenamiento hacıa atras. Esta maquina puede usarse parcialmente para implemen-tar algunos SE. Las reglas de Prolog seran usadas para representar conocimientoy su maquina de inferencia sera usada para derivar conclusiones. Otras partes delsistema, como la interfaz con el usuario deberan escribirse usando Prolog.

Usaremos el problema de identificacion de aves norteamericanas para ilustrar laconstruccion de un SE con Prolog. La experticia del SE se basa en un subconjunto delas reglas reportadas en Birds of North America de Robbins, Bruum, Zim y Singer.Las reglas del SE estaran disenadas para ilustrar como se pueden representar variostipos de conocimiento, en vez de buscar una identificacion precisa de las aves.

9.3.1. Reglas

Las reglas de un SE normalmente toman el siguiente formato:

1 IF2 primera premisa AND3 segunda premisa AND4 ...5 THEN6 conclusion

La parte IF de la regla se conoce con el lado izquierdo de la regla (LHS), y la partedel THEN se conoce como el lado derecho de la regla (RHS). Esto es equivalente ala semantica de la regla Prolog:

1 conclusion :-2 primera premisa,3 segunda premisa,4 ...

Esto puede ser confuso pues la regla en prolog dice mas THEN-IF que IF-THEN.Retomemos los ejemplos anteriores, si queremos representar en Prolog la regla:

1 IF2 familia es albatros AND3 color es blanco4 THEN5 ave es albatros laysan

Tendrıamos que escribir:

104 9 Sistemas Expertos

1 ave(albatros_laysan) :-2 familia(albatros),3 color(blanco).

Las siguientes reglas distinguen entre dos tipos de albatros y cisne. Todas sonclausulas del predicado ave/1:

1 ave(albatros_laysan) :-2 familia(albatros),3 color(blanco).4 ave(albatros_patas_negras) :-5 familia(albatros),6 color(obscuro).7 ave(cisne_silbador) :-8 familia(cisne),9 voz(suave_musical).

10 ave(cisne_trompetero) :-11 famila(cisne),12 voz(alta_trompeta).

Para que estas reglas tengan exito al distinguir un ave, necesitamos almacenarhechos acerca del ave que deseamos identificar con el SE. Por ejemplo, si agregamosestos hechos al programa:

1 familia(albatros).2 color(obscuro).

Ahora podemos usar la pregunta siguiente:

1 ?- ave(X).2 X = albatros_patas_negras3 Yes

Observen que aun en esta etapa temprana tenemos un SE completo, donde laexperticia consiste en distinguir entre cuatro aves. La interfaz con el usuario es elREPL de Prolog y los datos de entrada se almacenan directamente en el programa.

9.3.2. Reglas para relaciones jerarquicas

El siguiente paso sera representar la naturaleza jerarquica del sistema de clasifi-cacion de un ave. Esto incluira reglas para identificar la familia y el orden del ave.Continuando con el albatros y el cisne, los predicados para orden/1 y f amilia/1son:

1 orden(nariz_tubular) :-2 fosas(externas_tubulares),

9.3 Usando la maquina de inferencia de Prolog 105

3 habitat(mar),4 pico(gancho).5 orden(acuatico) :-6 patas(membrana),7 pico(plano).8 familia(albatros) :-9 orden(nariz_tubular),

10 tamano(grande),11 alas(muy_largas).12 familia(cisne) :-13 orden(acuatico),14 cuello(largo),15 color(blanco),16 vuelo(pesado).

Ahora el SE puede identificar al albatros a partir de observaciones fundamentalessobre el ave. En la primer version, f amilia/0 fue implementada como un hecho.Ahora f amilia/1 es implementada como una regla. Los hechos del SE ahora reflejanmas datos primitivos:

1 fosas(externas_tubulares).2 habitat(mar).3 pico(gancho).4 tamano(grande).5 alas(muy_largas).6 color(obscuro).

La consulta siguiente reporta:

1 ?- ave(X).2 X = albatros_patas_negras3 Yes

9.3.3. Reglas para otras relaciones

El ganso canadiense puede usarse para agregar complejidad al sistema. Debido aque esta ave pasa los veranos en Canada y los inviernos en los Estados Unidos, suidentificacion se ve afectada por donde ha sido vista y en que estacion. Dos reglasseran necesarias para cubrir estas situaciones:

1 ave(ganso_canadiense) :-2 familia(ganso),3 estacion(invierno),4 pais(estados_unidos),5 cabeza(negra),6 pecho(blanco).

106 9 Sistemas Expertos

7 ave(ganso_canadiense) :-8 familia(ganso),9 estacion(verano),

10 pais(canada),11 cabeza(negra),12 pecho(blanco).

Estas metas pueden hacer referencia a otros predicados en una jerarquıa diferen-te:

1 pais(estados_unidos) :- region(oeste_medio).2 pais(estados_unidos) :- region(sur_oeste).3 pais(estados_unidos) :- region(nor_oeste).4 pais(estados_unidos) :- region(atlantico_medio).5 pais(canada) :- provincia(ontario).6 pais(canada) :- provincia(quebec).7

8 region(nueva_inglaterra) :-9 estado(X),

10 member(X,[massachusetts, vermont, connecticut, maine]).11

12 region(sur_oeste) :-13 estado(X),14 member(X,[florida, mississippi, alabama, nueva_orleans]).

Otras aves necesitaran de predicados multiples para ser identificada. Por ejemplo,el Mallard (Anas platyrhynchos), o pato comun del norte, macho tiene la cabezaverde con un anillo blanco; la hembra tiene la cabeza cafe moteada:

1 ave(mallard):-2 familia(pato),3 voz(graznido),4 cabeza(verde).5 ave(mallard) :-6 familia(pato),7 voz(graznido),8 cabeza(cafe_moteada).

Basicamente, cualquier situacion del libro de las aves norte americanas puedeser expresado facilmente en Prolog. Las reglas expresadas forman la base de cono-cimientos del SE. El unico punto debil del programa es su interfaz con el usuario,que requiere que los datos sean introducidos como hechos del programa.

9.4 Interfaz del usuario 107

9.4. Interfaz del usuario

El sistema puede mejorarse considerablemente si proveemos una interfaz parael usuario, que pregunte por la informacion cuando esto sea necesario, en lugar deforzar al usuario a introducirla como hechos del programa.

Antes de pensar en un predicado pregunta, es necesario entender la estructura delos datos que seran preguntados. Todos los datos, manejandos hasta ahora, han sidode la forma atributo–valor. Por ejemplo, los atributos del pato del norte Mallard, sonmostrados en la figura 9.1.

atributo valorfamilia patovoz graznidocabeza verde

Cuadro 9.1 Atributos valor para el mallard

Esta es una de las representaciones mas simples usadas en los SE, pero es su-ficiente para muchas aplicaciones. Existen representaciones mas expresivas, comolos tripletes objeto–atributo–valor, o las redes semanticas, o los marcos.

Como estamos programando en Prolog, la riqueza del lenguaje puede usarse di-rectamente en el SE. Por ejemplo, los pares atributo–valor han sido representadoscomo predicados unarios de la forma atributo(valor): familia(pato), voz(graznido),cabeza(verde). Pero en region/1 usamos la membresia en listas para su definicion.

Usaremos el predicado pregunta para determinar con ayuda del usuario, cuandoun par atributo–valor es verdadero. El SE debe modificarse para determinar queatributos son verificables por el usuario. Esto se logra con reglas para los atributosque llaman a pregunta:

1 come(X) :- pregunta(come,X).2 pies(X) :- pregunta(pies,X).3 alas(X) :- pregunta(alas,X).4 cuello(X) :- pregunta(cuello,X).5 color(X) :- pregunta(color,X).

Ahora, si el SE tiene como meta probar color(blanco), llamara a pregunta/2en lugar de consultar su base de conocimientos. Si pregunta(color,blanco) tieneexito, entonces color(blanco) tambien lo tiene. La version mas simple de preguntaes como sigue:

1 pregunta(Atrib,Val):-2 write(Atrib:Val),3 write(’? ’),4 read(si).

108 9 Sistemas Expertos

El predicado read/1 tendra exito solo si el usuario responde “si” y falla si elusuario responde cualquier otra cosa. Ahora el programa puede ser ejecutado sindatos de trabajo iniciales. La misma llamada a ave/1 inicia la consulta al SE.

1 ?- ave(X).2 fosas_nasales : externas tubulares ? si.3 habitat : mar ? si.4 pico : ganchudo ? si.5 tamano : grande ? si.6 alars : largas ? si.7 color : blanco ? si.8 X = albatros_laysan9 Yes.

El problema con este enfoque es que si el usuario responde “no” a la ultima pre-gunta, la regla para ave(albratros laysan) falla, llevandonos a un backtracking. Deesta manera el SE nos preguntarıa nuevamente informacion que ya sabe. De algunamanera deberıamos implementar un predicado pregunta que recuerde lo pregunta-do.

Definiremos un nuevo predicado conocido/3 que nos ayude a recordar las res-puestas del usuario. Las respuestas no se guardaran directamente en memoria, sinoque seran guardadas dinamicamente con asserta/1 cuando pregunta provea infor-macion nueva para el SE:

1 pregunta(A,V) :- conocido(si,A,V), !.2

3 pregunta(A,V) :- conocido(_,A,V), !, fail.4

5 pregunta(A,V) :-6 write(A:V),7 write’? : ’),8 read(Resp),9 asserta(conocido(Resp,A,V)),

10 Resp == si.

Tambien es posible utilizar menues contextuados para el caso de atributos multi-variados. La idea es que para atributos de un solo valor, la interfaz por el usuariopregunte una sola vez:

1 pregunta(A,V) :-2 not(multivariado(A)),3 conocido(si,A,V2),4 V \== V2,5 !,6 fail.

Una guıa sobre los valores validos para un atributo se implementa con el predi-cado menu pregunta que trabaja de manera analoga a pregunta:

9.5 Un Shell simple 109

1 tamano(X) :-2 menu_pregunta(tamano, X, [grande, mediano, pequeno]).3 color(X) :-4 menu_pregunta(color,X,[blanco,verde,cafe,negro]).

La definicion de menu pregunta/3 es:

1 menu_pregunta(A,V,MenuLista) :-2 write(’Cual es el valor para ’,3 write(A), write(’? ’), nl,4 write(MenuLista),nl,5 read(Resp),6 checar(Resp,A,V,MenuLista),7 asserta(conocido(si,A,X)),8 X == V.9

10 checar(X,A,V,MenuLista) :-11 member(X,MenuLista), !.12

13 checar(X,A,V,MenuLista) :-14 write(’Ese valor no es valido, intente nuevamente’), nl,15 menu_pregunta(A,V,MenuLista).

9.5. Un Shell simple

El ejemplo de identificacion de aves tiene dos partes: una base de conocimientos,que incluye la informacion especıfica sobre las aves; y los predicados para controlarla interfaz con el usuario. Al separar estas dos partes, podemos crear un shell de SE.Con ello podemos crear un nuevo SE que identifique, por ejemplo, peces y reutilizarla parte de control de la interfaz.

Un cambio mınimo es necesario para separar las dos partes de nuestro SE. Ne-cesitamos un predicado de alto nivel que inicie el proceso de identificacion. Puestoque no sabemos de antemano lo que el SE va a identificar, el shell buscara satisfa-cer un predicado llamado meta. Cada base de conocimiento debera tener definidometa/1, por ejemplo, para el caso de identificacion de aves tendrıamos:

1 meta(X) :- ave(X).

como primer predicado en la base de conocimientos aves.El shell tendra un predicado solucion/0 que llevara a cabo labores de manteni-

miento del SE, para luego resolver la meta/1:

1 solucion :-2 abolish(conocido,3),

110 9 Sistemas Expertos

3 define(conocido,3),4 meta(X),5 write(’La respuesta es: ’), write(X), nl.6

7 solucion :-8 write(’No se encontro una respuesta.’), nl.

El predicado Prolog abolish/2 se usa para eliminar los hechos definidos previa-mente con conocido/3, cada vez que una consulta se va a ejecutar. Esto permite alusuario ejecutar solucion multiples veces en una sola sesion. El predicado de f ine/2permite indicarle a Prolog que conocido estara definido en el SE, de forma que nocause error la primera utilizacion de este predicado. Este predicado puede variardependiendo de la version de Prolog utilizada.

De esta manera tenemos que el SE ha sido dividido en dos partes. Los predicadosen el shell son:

solucion,pregunta,menu pregunta,los predicados auxiliares de estos.

Los predicados en la base de conocimientos son:

meta,las reglas sobre el conocimiento del SE,las reglas sobre los atributos provistos por el usuario,las declaraciones de los atributos multi-variados.

Para usar este shell en Prolog, tanto el shell como la base de conocimientos debenser cargados:

1 ?- consult(shell).2 yes3 ?- consult(’aves.kb’).4 yes5 ?- solucion.6 fosas_nasales : externas_tubulares ? ...

9.5.1. REPL

El shell puede ser mejorado construyendo un ciclo de comandos read-eval-printloop. Para ello definiremos el predicado se:

1 se :-2 bienvenida,

9.6 Encadenamiento hacıa atras con incertidumbre 111

3 repeat,4 write(’> ’),5 read(X),6 do(X),7 X == quit.8

9 bienvenida :-10 write(’Este es el shell de su SE.’), nl,11 write(’Escriba: cargar, consultar, o salir en el promt.’), nl12

13 do(cargar) :-14 cargar_bd, !.15

16 do(consultar) :-17 solucion, !.18

19 do(salir).20

21 do(X) :-22 write(X),23 write(’ no es un comando valido.’), nl,24 fail.25

26 cargar_bd :-27 write(’Nombre del archivo: ’),28 read(F),29 reconsult(F).

La arquitectura obtenida de esta forma se muestra en la figura 9.2.

9.6. Encadenamiento hacıa atras con incertidumbre

Como hemos mencionado, el encadenamiento hacıa adelante resulta convenientecuando los problemas a resolver son del tipo seleccion estructurada, como en elejemplo de la clasificacion de aves. Sin embargo, en ademas de que hemos asumidoque la informacion completa esta disponible para resolver el problema, tambienhemos asumido que no hay incertidumbre, ni el los datos provistos por el usuario,ni en las reglas de los expertos. Por ejemplo, el albatros puede ser observado en labruma, con lo que serıa difıcil precisar si su color es blanco u obscuro. Es de esperarque un SE que maneje incertidumbre, pueda contender con este tipo de problemas.

Desarrollaremos un shell que permita manejar reglas con incertidumbre y enca-denamiento de ellas hacıa atras. Evidentemente, este SE tendra un formato de reglaspropio, diferente a las reglas de Prolog, y por lo tanto, una maquina de inferenciapropia.

112 9 Sistemas Expertos

Interfaz del Usuario

sepregunta

menu_pregunta

Máquina de inferencia

solucioncargar

Base de Conocimientos

metareglas

mulivaluadopreguntado

Memoria de trabajo

conocido

Figura 9.2 El shell del SE.

9.6.1. Factores de certidumbre

La forma mas comun de trabajar con la incertidumbre consiste en asignar un fac-tor de certidumbre a cada pieza de informacion en el SE. La maquina de inferenciadebera mantener los factores de incertidumbre conforme el proceso de inferencia selleve a cabo.

Por ejemplo, asumamos que los factores de certidumbre (precedidos por cf) sonenteros entre -100 (definitivamente falso) y +100 (definitivamente verdadero). La si-guiente base de conocimientos en formato del SE esta disenada para diagnosticar unauto que no enciende. Esto ilustra el comportamiento de los factores de certidumbre:

1 GOAL problema.2

3 RULE 14 IF not arranca AND5 bateria_mala6 THEN problema is bateria.7

8 RULE 29 IF luces_debiles

10 THEN bateria_mala cf 50.11

12 RULE 313 IF radio_debil

9.6 Encadenamiento hacıa atras con incertidumbre 113

14 THEN bateria_mala cf 50.15

16 RULE 417 IF arranca AND18 olor_gasolina19 THEN problema is fuga cf 80.20

21 RULE 522 IF arranca AND23 indicador_gasolina is vacio24 THEN problema is tanque_vacio cf 90.25

26 RULE 627 IF arranca AND28 indicador_gasolina is bajo29 THEN problema is tanque_vacio cf 30.30

31 ASK arranca32 MENU (si no)33 PROMPT ’Su motor arranca? ’.34

35 ASK luces_debiles36 MENU (si no)37 PROMPT ’Sus luces estan debiles? ’.38

39 ASK radio_debile40 MENU (si no)41 PROMPT ’Su radio esta debil? ’.42

43 ASK olor_gasolina44 MENU (si no)45 PROMPT ’Huele a gasolina?’.46

47 ASK indicador_gasolina48 MENU (vacio, medio, lleno)49 PROMPT ’Que indica al aguja de gasolina? ’.

Por el momento la inferencia usarıa encadenamiento hacıa atras, similar al queusa Prolog. La regla GOAL indica que el proceso buscara un valor para problema.La regla 1 causara que la sub-meta bateria mala sea procesada, etc. Observen quelas reglas especifican tambien factores de certidumbre. Las reglas 2 y 3 proveen evi-dencia de que la baterıa esta en mal estado, pero ninguna es conclusiva al respecto.

Un dialogo con este sistema serıa como sigue:

1 consultar, reiniciar, cargar, listar, trazar, como, salida2 : consultar3 Su motor arranca?4 : si5 Huele a gasolina?6 : si7 Que indica la aguja de la gasolina?8 : vacio

114 9 Sistemas Expertos

9 problema-tanque-vacio-cf-9010 problema-fuga-cf-8011 problema resuelto

Observen que a diferencia de Prolog, el sistema no se detiene al encontrar elprimer posible valor para problema. En este caso se computan todos los valoresrazonables para problema y se reporta el valor de certidumbre asociado a estassoluciones. Recordemos que estos factores de certidumbre no son probabilidades,solo ponderan de alguna manera las respuestas.

De igual manera, el usuario podrıa ofrecer factores de certidumbre sobre susrespuestas, por ejemplo:

1 : consultar2 ...3 Huele a gasolina?4 si cf 505 ...

Existen diversas maneras de capturar el concepto de factor de certidumbre, perotodas ellas deben de confrontar las mismas situaciones basicas:

Reglas cuyas conclusiones son inciertas,Reglas cuyas premisas son inciertas,Datos provistos por el usuario inciertos,Combinacion de premisas inciertas con conclusiones inciertas,Actualizar los factores de incertidumbre en los datos almacenados en el espaciode trabajo,Establecer un umbral sobre el cual las premisas se consideran conocidas.

9.6.2. Factores de certidumbre a la MYCIN

MYCIN, uno de los SE mas conocidos en IA, introduce factores de certidumbredisenados para producir resultados intuitivos desde la perspectiva de los expertos.Revisemos el uso de estos factores por casos. El mas simple, serıa aquel donde laspremisas son totalmente ciertas:

1 arranca cf 100.2 olor_gas cf 100.

disparan la regla 4 y por tanto, problema fuga cf 80 debera agregarse al al-macen de trabajo. Sin embargo, este es un caso poco probable. Normalmente noestamos totalmente seguros de las premisas de una regla y lo normal serıa tenerhechos como:

9.6 Encadenamiento hacıa atras con incertidumbre 115

1 arranca cf 80.2 olor_gas cf 50.

Cuando esto sucede, la incertidumbre en las premisas de la regla debe combinarsecon las de la conclusion de la misma de la siguiente manera:

CF = CFregla×mınCF premisa/100

Dado el ejemplo, la regla 4 se activarıa con un c f = 50 (el mınimo de las dospremisas) y dada la formula anterior, agregarıamos problema fuga cf 40 alalmacen de trabajo.

Para que una regla dispare, su factor de certidumbre debe superar un umbral quenormalmente se fija en 20. Ası que bajo la definicion anterior, la regla 4 dispararıa.Si tuviesemos olor gas cf 15, entonces la regla no dispararıa.

Ahora consideren el caso donde hay mas de una regla que da soporte a ciertaconclusion. En ese caso, cada una de las reglas que disparan contribuira al factor decertidumbre de la conclusion. Si una regla dispara y la conclusion ya se encontrabaen el almacen de trabajo, las siguientes reglas aplican:

CF(X ,Y ) = X +Y (100−X)/100. Ambos X ,Y > 0CF(X ,Y ) = X +Y/1−mın(|X |, |Y |). Uno de X ,Y < 0CF(X ,Y ) = −CF(−X ,−Y ). Ambos X ,Y < 0

Por ejemplo, si disparamos la regla 2 (luces debiles) con su premisa sin incerti-dumbre, tendrıamos que agregar al almacen de trabajo bateria mala cf 50.Luego si disparamos la regla 3 (radio debil), el factor de certidumbre de este hechodebe modificarse a bateria mala cf 75. Lo cual resulta intuitivo (hay masevidencia de que la baterıa tiene problemas). Lo que tambien resulta intuitivo es quenecesitamos programar nuestra propia maquina de inferencia.

9.6.3. Formato de las reglas

Como programaremos nuestra propia maquina de inferencia, podemos elegir laestructura de hechos y reglas. Las reglas tendran la estructura general:

regla(Nombre,Premisas,Conclusion).

El Nombre opera solo como un identificador de la regla. El lado izquierdo dela misma Premisas implica al lado derecho Conclusion (conclusion). Como usare-mos encadenamiento hacıa atras, cada regla sera usada para validar una pieza deinformacion, de manera el RHS contiene una meta con su factor de certidumbreasociado:

116 9 Sistemas Expertos

conclusion(Meta,CF).

mientras que las premisas toman la forma de una lista de metas:

premisas(ListaMetas).

Las metas seran representadas, para comenzar, como pares atributo–valor:

av(Atributo,Valor).

cuando Atributo y Valor son atomos, la estructura general de las reglas se vecomo:

1 regla(Nombre,2 premisas( [av(A1,V1), av(A2,V2), ... ] ),3 conclusion(av(Attr,Val), CF)).

Por ejemplo, la regla 5 quedarıa representada como:

1 regla(5,2 premisas([av(arranca,si), av(indicador_gasolina,vacio)]),3 conclusion(av(problema,fuga), 80)).

Estas reglas no son faciles de leer, pero tienen una estructura adecuada para serprocesadas por Prolog. Otras herramientas de Prolog como las gramaticas de clausu-la definitivas (DCG) o la definicion de operadores, puede ayudarnos a simplificaresta representacion.

9.6.4. La maquina de inferencia

Dado el formato de las reglas del SE deseamos que la inferencia tome en cuentalos siguientes aspectos:

Combine los factores de certidumbre como se indico anteriormente.Mantenga el espacio de trabajo con la informacion actualizada con las nuevasevidencias obtenidas.Encontrar toda la informacion acerca de un atributo en particular cuando se pre-gunte por el, y poner esa informacion en el espacio de trabajo.

Primero, los hechos seran almacenados en la memoria de trabajo de Prolog, conel siguiente formato:

1 hecho(av(A,V),CF).

9.6 Encadenamiento hacıa atras con incertidumbre 117

De forma que un predicado meta/2 harıa la llamada para resolver un problemadado en estos terminos. Por ejemplo, en el caso del arranque del auto, tendrıamoscomo meta:

1 ?- meta(av(problema,X),CF).

El predicado meta/2 debe de contender con tres casos:

El atributo–valor se conoce de antemano;Existen reglas para deducir el atributo–valor;Se debe preguntar al usuario.

El sistema puede disenarse para preguntar al usuario automaticamente por el va-lor de un atributo, ante la ausencia de reglas; o bien, se puede declarar que atributospueden ser preguntados al usuario. Este ultimo enfoque hace que el manejo de labase de conocimientos sea mas explıcito y provee mayor control sobre los dialogosusuario – SE. Podemos definir un predicado pregunta/2 para declarar el atributo apreguntar y la frase para ello:

1 pregunta(pais_residencia,’¿En que paıs vive? ’).

Veamos ahora los tres casos para meta/2. El primero de ellos ocurre cuando lainformacion ya esta en la memoria de trabajo:

1 meta(av(Atr,Val),CF) :-2 hecho( av(Atr,Val), CF),3 !.

El segundo caso se da cuando el valor del atributo no se encuentra en la memoriade trabajo, pero el es posible preguntar por ello al usuario:

1 meta(av(Atr,Val), CF) :-2 \+ hecho( av(Atr,_),_),3 pregunta(Atr,Msg),4 preguntar(Atr,Msg),5 !,6 meta(av(Atr,Val), CF).

Para ello, el predicado preguntar/2 interroga al usuario. El usuario responde conun valor para la atributo Atr y un factor de certidumbre asociado CF . El mensajeMsg da la informacion necesaria para guiar al usuario en estas consultas:

1 preguntar(Atr,Msg) :-2 write(Msg),3 read(Val),4 read(CF),5 asserta(fact(av(Atr,Val),CF)).

118 9 Sistemas Expertos

El tercer caso para meta/2 es cuando el valor del atributo es desconocido, perose puede deducir usando las reglas definidas en el sistema, en ese caso la llamadaes:

1 meta(Meta,CFactual) :-2 buscaReglas(Meta,CFactual).

Esta llamada hace uso de la maquina de inferencia que disenaremos para nuestroSE con incertidumbre. El factor de certidumbre se etiqueta como actual, porque esposible que cambie de valor al ir aplicando las reglas definidas en el sistema.

El predicado buscaReglas/2 se encarga de encontrar aquellas reglas cuya con-clusion unifica con la Meta en cuestion y de actualizar el factor de certidumbre conbase en las premisas de estas reglas. Si la Meta es un hecho conocido, no hay nadaque hacer, solo regresar true:

1 buscaReglas(Meta,CFactual) :-2 regla(N, premisas(ListaPremisas),3 conclusion(Meta,CF)),4 probar(ListaPremisas,Contador),5 ajustar(CF,Contador,NuevoCF),6 actualizar(Meta,NuevoCF,CFactual),7 CFactual == 100,8 !.9

10 buscaReglas(Meta,CF) :-11 hecho(Meta,CF).

Dada una lista de premisas pertenecientes a una regla encontrada para satisfacerla Meta del SE, es necesario que buscaReglas/2 las pruebe. Para ello definimosprobar/2:

1 probar(ListaPremisas, Contador) :-2 probAux(ListaPremisas, 100, Contador).3

4 probAux([],Contador,Contador).5 probAux([Premisa1|RestoPremisas],ContadorActual,Contador) :-6 meta(Premisa1,CF,Cont),7 Cont >= 20,8 probAux(RestoPremisas,Cont,Contador).

El ajuste de los factores de certidumbre se lleva a cabo de la siguiente manera:

1 ajustar(CF1, CF2, CF) :-2 X is CF1 * CF2 / 100,3 int_redondear(X,CF).4

5 int_redondear(X,I) :-6 X >= 0,7 I is integer(X + 0.5).

9.6 Encadenamiento hacıa atras con incertidumbre 119

8

9 int_redondear(X,I) :-10 X < 0,11 I is integer(X - 0.5).

La actualizacion de la memoria de trabajo se lleva a cabo de la siguiente manera:

1 actualizar(Meta,NuevoCF,CF) :-2 hecho(Meta,ViejoCF),3 combinar(NuevoCF,ViejoCF,CF),4 retract(hecho(Meta,ViejoCF)),5 asserta(hecho(Meta,CF)),6 !.7

8 actualizar(Meta,CF,CF) :-9 asserta(hecho(Meta,CF)).

10

11 combinar(CF1, CF2, CF) :-12 CF1 >= 0,13 CF2 >= 0,14 X is CF1 + CF2*(100 - CF1)/100,15 int_redondear(X,CF).16

17

18 combinar(CF1,CF2,CF) :-19 CF1 < 0,20 CF2 < 0,21 X is -( -CF1-CF2*(100+CF1)/100),22 int_redondear(X,CF).23

24 combinar(CF1,CF2,CF) :-25 (CF1 < 0 ; CF2 < 0),26 (CF1 > 0 ; CF2 > 0),27 abs_minimum(CF1,CF2,MCF),28 X is 100 * (CF1 + CF2) / (100 - MCF),29 int_redondear(X,CF).

9.6.5. Interfaz con el usuario

La interfaz con el usuario es muy parecida a la definida en la seccion anterior. Seincluyen predicados auxiliares necesarios en su definicion:

1 se :-2 repeat,3 write(’consultar, cargar, salir’), nl,4 write(’: ’),5 read_line(X),6 ejec(X),

120 9 Sistemas Expertos

7 X == salir.8

9 ejec(consultar) :-10 metas_principales,11 !.12

13 ejec(cargar) :-14 cargar_reglas,15 !.16

17 ejec(salir).18

19 %%% Auxiliares20

21 metas_principales :-22 meta_principal(Atr),23 principal(Atr),24 imprime_meta(Atr),25 fail.26 metas_principales.27

28 principal(Atr) :-29 meta(av(Atr,Val,CF)),30 !.31 principal(_) :- true.32

33 imprime_meta(Atr) :-34 nl,35 hecho(av(Atr,Val), CF),36 CF >= 20,37 salidap(av(Atr,Val),CF), nl38 fail.39 imprime_meta(Atr) :-40 write (’Meta: ’), write(Attr), write(’ solucionada.’),41 nl, nl.42

43 salidap(av(Atr,Val),CF) :-44 output(Atr,Val,ListaImprimir),45 write(Atr-’cf’-CF),46 imprimeLista(ListaImprimir), !.47 salidap(av(Atr,Val),CF) :-48 write(Atr-Val-’cf’-CF).49

50 imprimeLista([]).51 imprimeLista([X|Xs]) :-52 write(X),53 imprimeLista(Xs).

Capıtulo 10Arboles de Decision

Resumen En este capıtulo abordaremos la solucion de problemas en el contexto delaprendizaje automatico, ejemplificado con el algoritmo ID3 [13] (Inductive Dicoto-mizer). Este algoritmo induce arboles de decision a partir de ejemplos conformadoscomo un conjunto de pares atributo–valor, para predecir el valor de uno de los atri-butos, conocido como la clase. El aprendizaje de arboles de decision es una de lastecnicas de inferencia inductiva mas usadas. Se trata de un metodo para aproximarfunciones de valores discretos, capaz de expresar hipotesis disyuntivas y robustoal ruido en los ejemplos de entrenamiento. La descripcion que se presenta en estecapıtulo, cubre una familia de algoritmos para la induccion de arboles de decisionque incluyen ID3 y C4.5 [14]. Estos algoritmos llevan a cabo su busqueda de hipote-sis en un espacio completamente expresivo, evitando ası los problemas mencionadoscon respecto a espacios de hipotesis incompletos. Como veremso, el sesgo inductivoen este caso, consiste en la preferencia por arboles pequenos, sobre arboles grandes.Un arbol ası aprendido, puede representarse tambien como un conjunto de reglassi-entonces, mas faciles de entender para un usuario.

10.1. Representacion de los arboles de decision

La figura 10.1 muestra un arbol de decision tıpico. Cada nodo del arbol esta con-formado por un atributo y puede verse como la pregunta: ¿Que valor tiene esteatributo en el caso a clasificar? Las ramas que salen de los nodos, corresponden alos posibles valores del atributo correspondiente.

Un arbol de decision clasifica a un caso, filtrandolo de manera descendente, has-ta encontrar una hoja, que corresponde a la clasificacion buscada. Consideren elproceso de clasificacion del siguiente caso, que describe un dıa en partıcular:

〈 cielo = soleado, temperatura = caliente,humedad = alta,viento = f uerte 〉

121

122 10 Arboles de Decision

Cielo

Húmedad Vientosi

si

soleadonublado

lluvioso

no

alta normal

no si

fuerte débil

Atributo

Clase

Valor

Figura 10.1 Un ejemplo de arbol de decision para el concepto “buen dıa para jugar tenis”. Losnodos representan un atributo a ser verificado por el clasificador. Las ramas son los posiblesvalores para el atributo en cuestion. Los textos en cırculos, representan las clases consideradas,i.e., los valores posibles del atributo objetivo.

Como el atributo Cielo, tiene el valor soleado en el caso, este es filtrado hacıaabajo del arbol por la rama de la izquierda. Como el atributo Humedad, tiene elvalor alta, el ejemplo es filtrado nuevamente por rama de la izquierda, lo cual noslleva a la hoja que indica la clasificacion del caso: Buen dıa para jugar tenis = no.El Algoritmo 2, define computacionalmente esta idea.

Algoritmo 2 El algoritmo clasifica, para arboles de decision1: function CLASIFICA(Ej, Arbol)

Require: E j: un ejemplo a clasificar, Arbol: un arbol de decisionEnsure: Clase: la clase del ejemplo2: Clase← tomaValor(raiz(Arbol),E j);3: if hoja(raız(Arbol)) then4: return Clase5: else6: clasi f ica(E j,subArbol(Arbol,Clase));7: end if8: end function

La funcion toma-valor encuentra el valor de un atributo, en el caso que seesta clasificando. El predicado hoja es verdadero si su argumento es un nodo ter-minal del arbol y falso si se trata de un nodo interno. La funcion sub-arbol semueve por la rama del arbol que corresponde al valor del atributo probado en el ca-so. De esta forma, obtiene un sub-arbol. En nuestro ejemplo, a partir del nodo raızcielo, esta funcion obtiene el sub-arbol que resulta de moverse por la rama soleado,etc.

En general, un arbol de decision representa una disyuncion de conjunciones derestricciones en los posibles valores de los atributos de los casos. Cada rama que va

10.2 Problemas apropiados para la aplicacion de arboles de decision 123

de la raız del arbol a una hoja, representa una conjuncion de tales restricciones y elarbol mismo representa la disyuncion de esas conjunciones. Por ejemplo, el arbolde la figura 10.1, puede expresarse como sigue:

(cielo = soleado ∧ humedad = normal)∨ (cielo = nublado)∨ (cielo = lluvia ∧ viento = debil)

10.2. Problemas apropiados para la aplicacion de arboles dedecision

Aun cuando se han desarrollado diversos metodos para la induccion de arbolesde decision, y cada uno de ellos ofrece diferentes capacidades, en general estos al-goritmos son apropiados para solucionar problemas de aprendizaje conocidos comoproblemas de clasificacion. Estos problemas presentan las siguientes caracterısticas:

Ejemplos representados por pares atributo-valor. Los casos del problema estanrepresentados como un conjunto fijo de atributos, por ejemplo Cielo y sus valo-res, por ej. Soleado. El caso mas sencillo es cuando cada atributo toma valores deun pequeno conjunto discreto y cada valor es disjunto, por ejemplo {Soleado, Nu-blado, Lluvia}. Existen extensiones para trabajar con atributos de valores reales,por ejemplo, Temperatura expresado numericamente.La funcion objetivo tiene valores discretos. El arbol de decision de la Figura 10.1,asigna una clasificacion binaria, por ejemplo si o no a cada caso. Un arbol de de-cision puede ser extendido facilmente, para representar funciones objetivos conmas de dos valores posibles. Una extension menos simple consiste en conside-rar funciones objetivo de valores discretos, por ello la aplicacion del metodo endominios discretos es menos comun.Se necesitan descripciones disyuntivas. Como se menciono, los arboles de deci-sion representan naturalmente conceptos disyuntivos.Ruido en los ejemplos de entrenamiento. El metodo es robusto al ruido en losejemplos de entrenamiento, tanto errores de clasificacion, como errores en losvalores de los atributos.Valores faltantes en los ejemplos. El metodo puede usarse aun cuando algunosejemplos de entrenamiento tengan valores desconocidos para algunos atributos.Al igual que en el punto anterior, esto se debe a que el algoritmo computa es-tadısticas globales que minimizan el impacto del ruido o falta de informacion deun ejemplo.

124 10 Arboles de Decision

10.3. El algoritmo basico de aprendizaje de arboles de decision

La mayorıa de los algoritmos para inferir arboles de decision son variaciones deun algoritmo basico que emplea una busqueda descendente (top-down) y egoısta(greedy) en el espacio de posibles arboles de decision. La presentacion de estosalgoritmos se centra en ID3 y C4.5.

El algoritmo basico ID3, construye el arbol de decision de manera descendente,comenzando por preguntarse: Que atributo deberıa ser colocado en la raız del arbol?Para responder esta pregunta, cada atributo es evaulado usando un test estadısticopara determinar que tan bien clasifica el solo los ejemplos de entrenamiento. El me-jor atributo es seleccionado y colocado en la raız del arbol. Una rama y su nodocorrespondiente es entonces creada para cada valor posible del atributo en cuestion.Los ejemplos de entrenamiento son repartidos en los nodos descendentes de acuer-do al valor que tengan para el atributo de la raız. El proceso entonces se repite conlos ejemplos ya distribuidos, para seleccionar un atributo que sera colocado en cadauno de los nodos generados. Generalmente, el algoritmo se detiene si los ejemplosde entrenamiento comparten el mismo valor para el atributo que esta siendo proba-do. Sin embargo, otros criterios para finalizar la busqueda son posibles: i) Coverturamınima, el numero de ejemplos cubiertos por cada nodo esta por abajo de ciertoumbral; ii) Pruebas de significancia estadıstica usando χ2 para probar si las distri-buciones de las clases en los sub-arboles difiere significativamente. Aunque, comoveremos, la poda del arbol se prefiere a las pruebas de significancia. Este algoritmolleva a cabo una busqueda egoısta de un arbol de decision aceptable, sin reconside-rar nunca las elecciones pasadas (backtracking). Una version simplificada de el semuestra en el Algoritmo 3.

10.3.1. ¿Que atributo es el mejor clasificador?

La decision central de ID3 consiste en seleccionar que atributo colocara en cadanodo del arbol de decision. En el algoritmo presentado, esta opcion la lleva a cabola funcion mejor-particion, que toma como argumentos un conjunto de ejem-plos de entrenamiento y un conjunto de atributos, regresando la particion inducidapor el atributo, que solo, clasifica mejor los ejemplos de entrenamiento. Considerelos ejemplos de entrenamiento del cuadro 10.1 para el concepto objetivo: buen dıapara jugar tenis? El encabezado del cuadro indica los atributos usados para describirestos ejemplos, siendo jugar-tenis? el atributo objetivo.

Si queremos particionar este conjunto de ejemplos con respecto al atributo tem-peratura, obtendrıamos:

?- partition(temperatura, Ejemplos).Ejemplos= [[temperatura [frio 5 6 7 9]

[caliente 1 2 3 13][templado 4 8 10 11 12 14]]

10.3 El algoritmo basico de aprendizaje de arboles de decision 125

Algoritmo 3 El algoritmo ID31: function ID3(Ejs, Atbs, Clase)2: Arbol← /0;De f ault← claseMayoria(E js);3: if E js = /0 then4: return De f ault;5: else if mismoValor(E js,Clase) then6: return Arbol← tomaValor( f irst(E js).Clase);7: else if Atbs = /0 then8: return Arbol← valorMasComun(E js,Clase);9: else

10: Me jorParticion←Me jorParticion(E js,Atbs);11: Me jorAtributo← f irst(Me jorParticion);12: Arbol←Me jorAtributo;13: for all ParticionE js ∈ rest(Me jorParticion) do14: ValoAtributo← f irst(ParticionE js);15: SubE js← rest(ParticionE js);16: agregarRama(Arbol,alorAtributo, ID3(SubE js,{Atbs \

Me jorAtributo},Clase));17: end for18: return Arbol19: end if20: end function

Dıa Cielo Temperatura Humedad Viento Jugar-tenis?1 soleado calor alta debil no2 soleado calor alta fuerte no3 nublado calor alta debil si4 lluvia templado alta debil si5 lluvia frıo normal debil si6 lluvia frıo normal fuerte no7 nublado frıo normal fuerte si8 soleado templado alta debil no9 soleado frıo normal debil si10 lluvia templado normal debil si11 soleado templado normal fuerte si12 nublado templado alta fuerte si13 nublado calor normal debil si14 lluvia templado alta fuerte no

Cuadro 10.1 Conjunto de ejemplos de entrenamiento para el concepto objetivo jugar-tenis? enID3, por Tom M. Mitchel [10].

Lo que significa que el atributo temperatura tiene tres valores diferentes en elconjunto de entrenamiento: frıo, caliente, y templado. Los casos d5, d6, d7, y d9,tienen como valor del atributo temperatura= frıo. La funcion mejor-particion en-cuentra el atributo que mejor separa los ejemplos de entrenamiento de acuerdo alatributo objetivo. En que consiste una buena medida cuantitativa de la bondad de unatributo? Definiremos una propiedad estadıstica llamada ganancia de informacion.

126 10 Arboles de Decision

10.3.2. Entropıa y ganancia de informacion

Una manera de cuantificar la bondad de un atributo en este contexto, consiste enconsiderar la cantidad de informacion que proveera este atributo, tal y como estoes definido en teorıa de informacion por Claude E. Shannon [18]. Un bit de infor-macion es suficiente para determinar el valor de un atributo booleano, por ejemplo,si/no, verdader/falso, 1/0, etc., sobre el cual no sabemos nada. En general, si losposibles valores del atributo vi, ocurren con probabilidades P(vi), entonces en con-tenido de informacion, o entropia, E de la respuesta actuale esta dado por:

E(P(vi), . . . ,P(vn)) =n

∑i=1−P(vi) log2 P(vi)

Consideren nuevamente el caso booleano, aplicando esta ecuacion a un voladocon una moneda confiable, tenemos que la probabilidad de obtener aguila o sol esde 1/2 para cada una:

E(12,

12) =−1

2log2

12− 1

2log2

12

= 1

Ejecutar el volado nos provee 1 bit de informacion, de hecho, nos provee la clasi-ficacion del experimento: si fue aguila o sol. Si los volados los ejecutamos con unamoneda cargada que da 99% de las veces sol, entonces E(1/100,99/100) = 0,08bits de informacion, menos que en el caso de la moneda justa, porque ahora tene-mos mas evidencia sobre el posible resultado del experimento. Si la probabilidad deque el volado de sol es del 100%, entonces E(0,1) = 0 bits de informacion, ejecu-tar el volado no provee informacion alguna. La grafica de la funcion de entropıa semuestra en la figura 10.2.

Figura 10.2 Grafica de la funcion entropia para clasificaciones booleanas.

Consideren nuevamente los ejemplos de entrenamiento del cuadro 10.1. De 14ejemplos, 9 son positivos (si es un buen dıa para jugar tenis) y 5 son negativos. Laentropia de este conjunto de entrenamiento es:

E(9

14,

514

) = 0,940

10.4 Espacio de hipotesis en el aprendizaje inductivo de arboles de decision 127

Si todos los ejemplos son positivos o negativos, por ejemplo, pertencen todos ala misma clase, la entropia sera 0. Una posible interpretacion de esto, es considerarla entropia como una medida de ruido o desorden en los ejemplos. Definimos la ga-nancia de informacion (GI) como la reduccion de la entropıa causada por particionarun conjunto de entrenamiento S, con respecto a un atributo A:

Ganancia(S,A) = E(S)−∑v∈A

|Sv||S|

E(Sv)

Observen que el segundo termino de Ganancia, es la entropıa con respecto alatributo A. Al utilizar esta medida en ID3, sobre los ejemplos del cuadro 10.1, obte-nemos:

Ganancia de informacion del atributo CIELO : 0.24674976Ganancia de informacion del atributo TEMPERATURA : 0.029222548Ganancia de informacion del atributo HUMEDAD : 0.15183544Ganancia de informacion del atributo VIENTO : 0.048126936Maxima ganancia de informacion: 0.24674976Particion:[cielo [soleado 1 2 8 9 11] [nublado 3 7 12 13][lluvia 4 5 6 10 14]]

Esto indica que el atributo con mayor ganancia de informacion fue cielo, deahı que esta parte del algoritmo genera la particion de los ejemplos de entrena-miento con respecto a este atributo. Si particionamos recursivamente los ejemplosque tienen el atributo cielo = soleado, obtendrıamos:

Ganancia de informacion del atributo TEMPERATURA : 0.5709506Ganancia de informacion del atributo HUMEDAD : 0.9709506Ganancia de informacion del atributo VIENTO : 0.01997304Maxima ganancia de informacion: 0.9709506Particion:[humedad [normal 11 9] [alta 8 2 1]]

Lo cual indica que en el nodo debajo de soleado deberıamos incluir el atributohumedad. Todos los ejemplos con humedad = normal, tienen valor si para el con-cepto objetivo. De la misma forma, todos los ejemplos con valor humedad = alta,tiene valor no para el concepto objetivo. Ası que ambas ramas descendiendo de no-do humedad, llevaran a clases terminales de nuestro problema de aprendizaje. Elalgoritmo terminara por construir el arbol de la figura 10.1.

10.4. Espacio de hipotesis en el aprendizaje inductivo dearboles de decision

Como los otros metodos de aprendizaje, ID3 puede concebirse como un procesode busqueda en un espacio de hipotesis, para encontrar aquella hipotesis que seajusta mejor a los datos de entrenamiento. El espacio de hipotesis explorado porID3 es el espacio de todos los arboles de decision posibles. El algoritmo lleva a

128 10 Arboles de Decision

cabo una busqueda de lo simple a lo complejo, comenzando por el arbol vacıo, paraconsiderar cada vez hipotesis mas complejas. La medida ganancia de informacionguıa esta busqueda de ascenso de colina (hill-climbing), como ejemplificamos en laseccion anterior.

Considerando ID3 en terminos de su espacio y estrategias de busqueda, es posibleanalizar sus capacidades y limitaciones:

El espacio de hipotesis de ID3 es completo con respecto a las funciones de valoresdiscretos que pueden definirse a partir de los atributos considerados. De maneraque no existe el riesgo que la funcion objetivo no se encuentre en el espacio dehipotesis.ID3 mantiene solo una hipotesis mientras explora el espacio de hipotesis posi-bles. Esto contrasta, por ejemplo, con el algoritmo eliminacion de candidatos,que mantiene el conjunto de todas las hipotesis consistentes con el conjunto deentrenamiento. Es por ello que ID3 es incapaz de determinar cuantos arboles dedecision diferentes son consistentes con los datos.El algoritmo basico ID3 no ejecuta vuelta atras (backtracking) en su busqueda.Una vez que el algoritmo selecciona un atributo, nunca reconsiderara esta elec-cion. Por lo tanto, es suceptible a los mismos riesgos que los algoritmos estiloascenso de colina, por ejemplo, caer maximos o mınimos locales. Como vere-mos, la vuelta atras puede implementarse con alguna tecnica de poda.ID3 utiliza todos los ejemplos de entrenamiento en cada paso de su busquedaguiada por el estadıstico ganancia de informacion. Esto contrasta con los meto-dos que usan los ejemplos incrementalmente, por ejemplo encuentra-S o elimi-nacion de candidatos. Una ventaja de usar propiedades estadısticas de todos losejemplos es que la busqueda es menos sensible al ruido en los datos.

10.5. Sesgo inductivo en el aprendizaje de arboles de decision

Recuerden que el sesgo inductivo es el conjunto de afirmaciones que, junto conlos datos de entrenamiento, justifican deductivamente la clasificacion realizada porun sistema de aprendizaje inductivo sobre casos futuros. Dado un conjunto de en-trenamiento, por lo general hay muchos arboles de decision consistentes con este.Describir el sesgo inductivo de ID3 equivale a explicar porque este algoritmo pre-fiere ciertos arboles a otros, que arbol eligira.

Puesto que ID3 encontrara el primer arbol consistente con el conjunto de entrena-miento, producto de una busqueda de ascenso de colina, de lo simple a lo complejo,el algoritmo tiene preferencia por: i) arboles pequenos sobre arboles grandes, queindican que la busqueda termino en proximidad a la raız del arbol; y ii) debido asu caracter egoista, arboles que colocan atributos mas informativos cerca de la raızdel arbol. Sin embargo, observen que este sesgo es aproximado. Un algoritmo quetuviera un sesgo identico al descrito aquı, tendrıa que realizar una busqueda prime-ro en amplitud y preferir los arboles de menor profundidad. ID3 busca primero enprofundidad.

10.6 Consideraciones sobre el aprendizaje inductivo de arboles de decision 129

10.5.1. Sesgo por restriccion y sesgo por preferencia

Existe una diferencia interesante entre los sesgos que exhiben ID3 y el algo-ritmo eliminacion de candidatos, discutido en la sesion anterior. El sesgo de ID3es producto de su estrategia de busqueda, mientras que el sesgo de eliminacion decandidatos es resultado de la definicion del espacio de busqueda. Por lo tanto, elsesgo de ID3 es exhibe una preferencia por ciertas hipotesis, sobre otras, por ejem-plo, hipotesis compactas. Este tipo de sesgo, que no impone restricciones sobrelas hipotesis que seran eventualmente consideradas, recibe el nombre de sesgo porpreferencia. Por otra parte, el sesgo de eliminacion de candidatos que restringe elconjunto de hipotesis a considerar, recibe el nombre de sesgo por restriccion o sesgodel lenguaje.

En general, es preferible trabajar con un sesgo por preferencia, puesto que estepermite al sistema de aprendizaje explorar un espacio de hipotesis completo, ase-gurando que la representacion del concepto objetivo se encuentra ahı. Considerenque es posible trabajar con ambos sesgos a la ves, por ejemplo, el sistema aprendizde damas chinas de la sesion de introduccion, introduce un sesgo por restriccionescuando se decide que la hipotesis tiene la forma de una combinacion lineal de losatributos del tablero, y un sesgo por preferencia cuando se introduce la busquedaordenada por mınimos cuadrados (LMS) en el espacio de posibles parametros wi.

10.5.2. ¿Porque preferir hipotesis mas compactas?

Es el sesgo inductivo de ID3, preferir las hipotesis mas compactas, lo suficiente-mente robusto para generalizar mas alla de los datos observados? Este es un debateno resuelto iniciado por William de Occam1 circa 1320. Un argumento intuitivoes que existen mucho menos hipotesis compactas que extensas, por lo que es masdifıcil que una hipotesis compacta coincida accidentalmente con los datos obser-vados. En cambio, hay muchas hipotesis extensas que se puede, ajustar a los datosde entrenamiento, pero fallaran al generalizar. Aunque este argumento no es deltodo convincente, dejaremos la discusion sobre la navaja de Occam para la sesiondestinada a aprendizaje Bayesiano.

10.6. Consideraciones sobre el aprendizaje inductivo de arbolesde decision

Algunas consideraciones sobre la aplicacion practica del algoritmo basico de ID3presentado aquı, incluyen: mecanismos para determinar que tanto debe crecer el

1 El enunciado exacto de la navaja de Occam es: Non sunt multiplicanda entia prater necessitatem(las entidades no deben multiplicarse mas alla de lo necesario).

130 10 Arboles de Decision

arbol en profundidad; para procesar atributos con valores contınuos; para procesarejemplos de entrenamiento con valores faltantes; para introducir costos diferentesasociados a los atributos; ası como para determinar una buena metrica de seleccionde los atributos y mejorar la eficiencia computacional del algoritmo. Cabe mencio-nar que, muchos de estos aspectos han sido incorporados en el sistema C4.5 [14].

10.6.1. Evitando un sobreajuste con los datos de entrenamiento

El algoritmo basico de ID3 crece cada rama del arbol en profundidad hasta quelogra clasificar perfectamente los ejemplos de entrenamiento. Esta estrategia es ra-zonable, pero puede introducir dificultades si los datos de entrenamiento presentanruido, o cuando el conjunto de entrenamiento es demasiado pequeno, como paraofrecer un muestreo significativo del concepto objetivo. En estos casos, ID3 pue-de producir arboles que se sobreajustan a los datos de entrenamiento. Formalmentedefinimos el sobreajuste como:

Definition 10.1. Dado un espacio de hipotesis H, se dice que una hipotsis h ∈ Hesta sobreajustada a los ejemplos de entrenamiento, si existe una hipotesis alterna-tiva h′ ∈ H, tal que h′ tiene un error de clasificacion mas pequeno que h sobre ladistribucion completa de los casos del problema.

Es comun observar que a medida que el tamano del arbol crece, en termino delnumero de nodos usado2, su precision sobre el conjunto de entrenamiento mejoramonotonicamente, pero, sobre el conjunto de prueba primero crece y luego decae.

Como es esto posible que un arbol h que tiene mayor precision que h′ sobre elconjunto de entrenamiento, luego tenga un desempeno menor sobre el conjunto deprueba? Una situacion en la que esto ocurre es cuando el conjunto de entremien-to contiene ruido, por ejemplo, elementos mal clasificados. Consideren agregar elsiguiente caso mal clasificado (clasificado como jugar-tenis? = no) al conjunto deentrenamiento del cuadro 10.1:

〈 cielo = soleado, temperatura = caliente,humedad = normal,viento = f uerte 〉

Al ejecutar ID3 sobre el nuevo conjunto de entrenamiento, este construira unarbol mas complejo. En partıcular, el ejemplo con ruido sera filtrado junto con losejemplos d9 y d11 (cielo = soleado y humedad = normal), que son ejemplos positi-vos. Dado que el nuevo ejemplo es negativo, ID3 buscara refinar el arbol a partir delnodo humedad, agregando un atributo mas al arbol. Este nuevo arbol h′ tiene ma-yor precision sobre los ejemplos de entrenamiento que h, puesto que se ha ajustadoal ejemplo con ruido. Pero h tendra mejor desempeno al clasificar nuevos casos,tomados de una misma distribucion que los ejemplos de entrenamiento.

2 Obseven que esto refleja el numero de atributos usado en la hipotesis, esto es, arboles mas grandesimponen mas restricciones.

10.6 Consideraciones sobre el aprendizaje inductivo de arboles de decision 131

Existe la posibilidad de sobreajuste, aun cuando el conjunto de entrenamientoeste libre de ruido, por ejemplo, si el conjunto de entrenamiento tiene pocos ele-mentos. En conjuntos de entrenamiento pequenos es facil encontrar regularidadesaccidentales en donde un atributo puede particionar muy bien los ejemplos dados,aunque no este relacionado con el concepto objetivo.

Puesto que el sobreajuste puede reducir la precision de un arbol inducido porID3 entre un 10 a 25%, diferentes enfoques han sido propuestos para evitar estefenomeno. Los enfoques pueden agruparse en dos clases:

Enfoques que detienen el crecimiento del arbol anticipadamente, antes de quealcance un punto donde clasifique perfectamente los ejemplos de entrenamiento.Enfoques en donde se deja crecer el arbol para despues podarlo.

Aunque el primer enfoque parezca mas directo, la poda posterior del arbol hademostrado tener mas exito en la practica. Esto se debe a la dificultad de estimaren que momento debe detenerse el crecimiento del arbol. Independientemente delenfoque usado, una pregunta interesante es: ¿Cual es el tamano correcto de un arbol?Algunos enfoques para responder a esta pregunta incluyen:

Usar un conjunto de ejemplos, diferentes de los usados en el entrenamiento, paraevaluar la utilidad de eliminar nodos del arbol.Usar los ejemplos disponibles para el entrenamiento, pero aplicando una pruebapara estimar cuando agregar o eliminar un nodo, podrıa producir una mejora alclasificar nuevos casos, por ejemplo, usar el test χ2 para evaluar si al expandir unnodo, el cambio mejorara la clasificacion sobre los ejemplos de entrenamiento, osobre toda la distribucion.Usar explıcitamente una medida de complejidad para codificar los ejemplos deentrenamiento y el arbol de decision, deteniendo el crecimiento cuando el ta-mano codificado sea minimizado. Por ejemplo, el principio de descripcion mıni-ma (MDL).

10.6.1.1. Reduciendo el error por poda

¿Como podemos usar un conjunto de ejemplos de validacion para prevenir elsobre ajuste? Un enfoque llamado reduced-error pruning [?], consiste en considerarcada nodo del arbol como candidato a ser podado. La poda consiste en eliminar todoel subarbol que tiene como raız el nodo en cuestion, convirtiendolo ası en una hoja,cuya clase corresponde a valor mas comun de los casos asociados a ese nodo.

Un nodo solo es eliminado si el arbol podado que resulta de ello, no presentaun desempeno peor que el arbol original sobre el conjunto de validacion. El efectode esto, es que los nodos que se han colocado en el arbol por coincidencias fortui-tas en los datos del entrenamiento, generalmente son eliminados debido a que lascoincidencias suelen no estar presentes en el conjunto de validacion.

Este metodo es unicamente efectivo si contamos con suficientes ejemplos, de talforma que el conjunto de entrenamiento y el conjunto de validacion sean significati-vos estadısticamente. De otra forma, tomar ejemplos para el conjunto de validacion

132 10 Arboles de Decision

reduce aun mas el tamano del conjunto de entrenamiento, aumentando ası la posibi-lidad de sobre ajuste.

10.6.1.2. Poda de reglas

En la practica, un metodo exitoso para encontrar el arbol de mayor precision seconoce como rule post-prunning [14] y esta incorporado en el sistema C4.5 de RossQuinlan. El procedimiento es el siguiente:

1. Inducir el arbol de decision permitiendo sobre ajuste, por ejemplo, con nuestroalgoritmo basico ID3.

2. Convertir el arbol aprendido en un conjunto de reglas equivalente, esto es, unaconjuncion por cada rama del arbol que va de la raız a una hoja.

3. Podar (generalizar) cada regla, eliminando las precondiciones que resulten enuna mejora de la precision estimada.

4. Ordenar las reglas por su precision estimada, y aplicarlas en ese orden al clasificarnuevos casos.

Cabe mencionar que el metodo aplicado por C4.5 no es estadısticamente valido,aunque ha demostrado ser una heurıstica util. En la sesion de evaluacion de hipote-sis, estudiamos tecnicas estadısticamente robustas para estimar medias e intervalosde confianza. Lo relevante aquı es que la conversion del arbol en reglas ayuda a dis-tinguir los diferentes contextos en los que un atributo participa en la clasificacion, esdecir, reglas diferentes; elimina la diferencia entre nodos ubicados cerca de la raız yaquellos ubicados cerca de las hojas; y aumenta la facilidad de comprehension porparte del usuario.

10.6.2. Incorporando valores contınuos

En el algoritmo basico de ID3 tanto el concepto objetivo, como los atributosusados para describir los casos, deben tener valores discretos. La segunda restric-cion puede ser eliminada facilmente, permitiendo el uso de atributos con valorescontınuos. Esto se logra definiendo dinamicamente nuevos atributos discretos queparticionan los atributos de valores contınuos, en intervalos discretos. Para un atri-buto contınuo A, el algoritmo puede crear dinamicamente un atributo discreto Ac quees verdadero si A > c y falso en cualquier otro caso. La unica consideracion es comoseleccionar el mejor valor para el umbral c. Supongan que el atributo temperaturatoma valores discretos y que su relacion con el concepto objetivo es la siguiente:

temperatura 40 48 60 72 80 90jugar-tenis? No No Si Si Si No

Que valor booleano basado en un umbral debemos definir para el atributo tem-peratura? Obviamente, necesitamos un umbral c, tal que este produzca la mayor

10.6 Consideraciones sobre el aprendizaje inductivo de arboles de decision 133

ganancia de informacion posible. Es posible generar candidatos a umbral, ordenan-do los ejemplos de acuerdo a su valor en el atributo temperatura e identificandoejemplos adyacentes que difieren en el valor de su atributo objetivo. Se puede de-mostrar que los umbrales c que maximiza la ganancia de informacion, se encuentranen estos sitios. Para el ejemplo presentado, dos umbrales pueden localizarse en lospuntos (48+60)/2 y (80+90/2). La ganancia de informacion puede entonces cal-cularse para los atributos temperatura>54 y temperatura>85. El atributo con mayorganancia de informacion, en este caso el primero, puede ser usado entonces paracompetir con otros atributos en la construccion del arbol de decision. Por supues-to, es posible tambien mantener ambos atributos dinamicamente creados, usandomultiples intervalos [?].

10.6.3. Medidas alternativas para la seleccion de atributos

Existe un sesgo natural en la medida de ganancia de informacion, el cual favoreceatributos con muchos valores, sobre aquellos que tienen poco valores. Por ejemplo,un atributo fecha, tendrıa mayor ganancia de informacion que cualquiera de los atri-butos en nuestro ejemplo. Esto se debe a que este atributo predice perfectamenteel valor del atributo objetivo. El problema es que este atributo tiene tantos valoresdistintos que tiende a separar perfectamente los ejemplos de entrenamiento en pe-quenos subconjuntos, que se ajustan al concepto buscado. Por esto, el atributo fechatiene una ganancia de informacion elevada, a pesar de ser un predictor pobre.

Una solucion a este problema es usar una metrica alternativa a la ganancia de in-formacion. Quinlan [?], propone una medida alternativa que ha sido usada con exito,gain ratio. Esta metrica penaliza atributos como fecha incorporando un termino co-nocido como split information, que es sensible a que tan amplia y uniforme es laparticion que un atributo induce en los datos:

splitIn f ormation(S,A) =−c

∑i=1

|Si||S|

log2|Si||S|

Observen que este termino es la entropia de S con respecto al atributo A. Lamedida gain radio esta definida como:

gainRatio(S,A) =gain(S,A)

splitIn f ormatio(S,A)

Un problema practico con este enfoque es que el denominador de esta medidapuede ser 0 o muy pequeno, si |Si| ≈ |S|, lo cual hace que la medida sea indefinidapara atributos que tienen casi el mismo valor para todos los ejemplos.

134 10 Arboles de Decision

10.7. Implementacion el Prolog

Los ejemplos de entrenamiento se definiran mediante el predicado example/3cuyos argumentos son el numero de ejemplo, el valor para la clase, y los pares atri-buto valor. Para el ejemplo de jugar tenis, el conjunto de entrenamiento incluira lassiguientes lıneas:

1 ejemplo(1,no,[dia=soleado,temperatura=calor,humedad=alta,viento=debil]).2 ejemplo(2,no,[dia=soleado,temperatura=calor,humedad=alta,viento=fuerte]).3 ejemplo(3,si,[dia=nublado,temperatura=calor,humedad=alta,viento=debil]).4 ejemplo(4,si,[dia=lluvia,temperatura=templado,humedad=alta,viento=debil]).5 ejemplo(5,si,[dia=lluvia,temperatura=frio,humedad=normal,viento=debil]).6 ejemplo(6,no,[dia=lluvia,temperatura=frio,humedad=normal,viento=fuerte]).7 ejemplo(7,si,[dia=nublado,temperatura=frio,humedad=normal,viento=fuerte]).8 ejemplo(8,no,[dia=soleado,temperatura=templado,humedad=alta,viento=fuerte]).9 ejemplo(9,si,[dia=soleado,temperatura=frio,humedad=normal,viento=debil]).

10 ejemplo(10,si,[dia=lluvia,temperatura=templado,humedad=normal,viento=debil]).11 ejemplo(11,si,[dia=soleado,temperatura=nublado,humedad=normal,viento=fuerte]).12 ejemplo(12,si,[dia=nublado,temperatura=templado,humedad=alta,viento=fuerte]).13 ejemplo(13,si,[dia=nublado,temperatura=calor,humeda=normal,viento=debil]).14 ejemplo(14,no,[dia=lluvia,temperatura=templado,humedad=alta,viento=fuerte]).

El arbol se representara mediante el predicado nodo/3 cuyo primer elementopuede ser el identificador de un ejemplo, o la constante ho ja para indicar que hemosencontrado el valor de la clase. El segundo argumento de nodo es el test que se aplicapara llegar a el. El tercer argumento es el padre del nodo en cuestion. Por ejemplo:

1 nodo(13,(dia=lluvia),raiz).

indica que al ejemplo 13 se llega desde el nodo raiz si el atributo dia tiene comovalor lluvia.

La llamada principal al algoritmo es id3/1 cuyo argumento es el mınimo numerode casos que debe cubrir una hoja del arbol:

1 id3 :- id3(1). % Umbral = 1, por default.2

3 id3(Umbral) :-4 retractall(nodo(_,_,_)),5 findall(N,ejemplo(N,_,_),E),6 ejemplo(_,_,L), !,7 atributos(L,A),8 idt(E,raiz,A,Umbral), !.

Con la llamada a id3 se borran los nodos construidos anteriormente y se cons-truye una nueva lista de ejemplos E. Posteriormente se obtiene la lista de atributosusados en los ejemplos A. El corte es para construir la lista de atributos solo con unejemplo (evita el reconsiderar con los demas ejemplos). Y se llama a idt/4 cuyosargumentos son la lista de ejemplos E, el identificador raiz para el nodo raız delarbol, la lista de atributos A y el Umbral que por defecto es igual a 1.

10.7 Implementacion el Prolog 135

En la construccion del arbol hay varios casos que cubrir. Comencemos por loscasos terminales. Hay dos casos terminales a considerar, el primero es cuando elnumero de ejemplos disponibles es menor que el Umbral en ese caso se guardaun nodo ho ja con la distribucion de la clase para los ejemplos como contenido. Elotro caso terminal es cuando todos los ejemplos pertenecen a la misma clase. Enese caso la distribucion de la clase para los ejemplos tomara la forma [C] dondeC = Clase/NumE js. Estos dos casos corresponde a:

1 idt(E,Padre,_,Umbral) :-2 length(E,Lon),3 Lon=<Umbral,4 distr(E, Distr),5 assertz(nodo(hoja,Distr,Padre)), !.6

7 idt(E,Padre,_,_) :-8 distr(E, [C]),9 assertz(nodo(hoja,[C],Padre)).

Si no estamos en el caso terminal, es necesario elegir el mejor atributo y parti-cionar los ejemplos de acuerdo a los valores para el atributo seleccionado:

1 idt(Es,Padre,As,Umbral) :-2 elige_atributo(Es,As,A,Valores,Resto), !,3 particion(Valores,A,Es,Padre,Resto,Umbral).

Si esto no es posible, es que los datos son inconsistentes:

1 idt(E,Padre,_,_) :- !,2 nodo(Padre,Test,_),3 write(’Datos inconsistentes: no es posible construir4 particion de ’),5 write(E), write(’ en el nodo ’), writeln(Test).

10.7.1. Atributos

Veamos ahora en detalle estos procedimientos. El siguiente procedimiento extraelos atributos de un ejemplo:

1 atributos([],[]) :- !.2 atributos([A=_|T],[A|W]) :-3 atributos(T,W).

De forma que, para el caso de jugar tenis, los atributos se pueden obtener con lasiguiente llamada:

136 10 Arboles de Decision

1 ?- ejemplo(_,_,L), !, atributos(L,A).2 L = [dia=soleado, temperatura=calor, humedad=alta, viento=debil],3 A = [dia, temperatura, humedad, viento].

10.7.2. Distribucion de clases

¿Cual es la distribucion inicial de la clase para los ejemplos de jugar tenis? Estolo podemos consultar con:

1 ?- findall(E,ejemplo(E,_,_),Ejs), distr(Ejs,Dist).2 Ejs = [1, 2, 3, 4, 5, 6, 7, 8, 9|...],3 Dist = [no/5, si/9].

lo que indica que tenemos 5 ejemplos de la clase no y 9 de la clase si. Los ejemplos1,2,6 y 8 son todos miembros de la clase no, por lo que:

1 ?- distr([1,2,6,8],Dist).2 Dist = [no/4].

La implementacion de distr/2 es la siguiente:

1 distr(S,Dist) :-2 setof(C,XˆLˆ(member(X,S),ejemplo(X,C,L)),Cs),3 cuentac(Cs,S,Dist).4

5 cuentac([],_,[]) :- !.6

7 cuentac([C|L],E,[C/N|T]) :-8 findall(X,(member(X,E),ejemplo(X,C,_)),W),9 length(W,N), !,

10 cuentac(L,E,T).

10.7.3. El mejor atributo

El mejor atributo es el que maximiza la ganancia de informacion Gain con res-pecto a los ejemplos Es y atributos As disponibles. El predicado elige atributo/4computa los valores posibles para el atributo seleccionado y lo elimina de la lista deatributos disponibles para construir el arbol:

1 elige_atributo(Es,As,A,Valores,Resto) :-2 length(Es,LonEs),

10.7 Implementacion el Prolog 137

3 contenido_informacion(Es,LonEs,I), !,4 findall((A-Valores)/Gain,5 (member(A,As),6 valores(Es,A,[],Valores),7 separa_en_subconjs(Valores,Es,A,Ess),8 informacion_residual(Ess,LonEs,R),9 Gain is I - R),

10 All),11 maximo(All,(A-Valores)/_),12 eliminar(A,As,Resto), !.13

14 separa_en_subconjs([],_,_,[]) :- !.15 separa_en_subconjs([V|Vs],Es,A,[Ei|Resto]) :-16 subconj(Es,A=V,Ei), !,17 separa_en_subconjs(Vs,Es,A,Resto).18

19 informacion_residual([],_,0) :- !.20 informacion_residual([Ei|Es],Lon,Res) :-21 length(Ei,LonEi),22 contenido_informacion(Ei,LonEi,I), !,23 informacion_residual(Es,Lon,R),24 Res is R + I*LonEi/Lon.25

26 contenido_informacion(Es,Lon,I) :-27 setof(C,EˆLˆ(member(E,Es),ejemplo(E,C,L)),Classes), !,28 suma_terms(Classes,Es,Lon,I).29

30 suma_terms([],_,_,0) :- !.31 suma_terms([C|Cs],Es,Lon,Info) :-32 findall(E,(member(E,Es),ejemplo(E,C,_)),InC),33 length(InC,N),34 suma_terms(Cs,Es,Lon,I),35 Info is I - (N/Lon)*(log(N/Lon)/log(2)).36

37 valores([],_,Valores,Valores) :- !.38 valores([E|Es],A,Vs,Valores) :-39 ejemplo(E,_,L),40 member(A=V,L), !,41 (member(V,Vs), !, valores(Es,A,Vs,Valores);42 valores(Es,A,[V|Vs],Valores)43 ).44

45 subconj([],_,[]) :- !.46 subconj([E|Es],A,[E|W]) :-47 ejemplo(E,_,L),48 member(A,L), !,49 subconj(Es,A,W).50 subconj([_|Es],A,W) :- subconj(Es,A,W).

Por ejemplo, la siguiente meta computa el mejor atributo (dia), dados los ejem-plos E y atributos conocidos:

138 10 Arboles de Decision

?- findall(N,ejemplo(N,_,_),E), elige_atributo(E,[dia,temperatura,humedad,viento],A,V,R).

E = [1, 2, 3, 4, 5, 6, 7, 8, 9|...],A = dia,V = [lluvia, nublado, soleado],R = [temperatura, humedad, viento].

Como vimos en la primera parte de este capıtulo, para computar la ganancia deinformacion necesitamos computar el contenido informacional de todos los ejem-plos:

?- findall(N,ejemplo(N,_,_),E), length(E,L), contenido_informacion(E,L,I).E = [1, 2, 3, 4, 5, 6, 7, 8, 9|...],L = 14,I = 0.940286.

Y por cada atributo, computar la informacion residual para restarsela al contenidoinformacional, y ası obtener las ganancias de informacion:

?- findall(N,ejemplo(N,_,_),E),findall((A-Valores)/Gain,

(member(A,[dia,temperatura,humedad,viento]),valores(E,A,[],Valores),separa_en_subconjs(Valores,E,A,Ess),informacion_residual(Ess,14,R),Gain is 0.940286 - R),

All).E = [1, 2, 3, 4, 5, 6, 7, 8, 9|...],All = [ (dia-[lluvia, nublado, soleado])/0.24675,

(temperatura-[nublado, frio, templado, calor])/0.0760099,(viento-[fuerte, debil])/0.151836 ].

Solo resta obtener el atributo de All con la maxima ganancia de informacion yeliminarlo de la lista de atributos disponibles regresada en Resto. La induccion delarbol de decision es un proceso recursivo. Los valores del atributo elegido inducenuna particion sobre los ejemplos. Esto se logra con el predicado particion/6.

1 particion([],_,_,_,_,_) :- !.2 particion([V|Vs],A,Es,Padre,Resto,Umbral) :-3 subconj(Es,A=V,Ei), !,4 genera_nodo_id(Nodo),5 assertz(nodo(Nodo,A=V,Padre)),6 idt(Ei,Nodo,Resto,Umbral), !,7 particion(Vs,A,Es,Padre,Resto,Umbral).

10.7.4. El arbol

El arbol se guarda en la memoria de trabajo como un conjunto de nodos con laforma nodo(Identi f icador,Atributo−Valor,NodoPadre). Se pueden recuperar conla siguiente meta:

10.7 Implementacion el Prolog 139

?- nodo(I,AV,P).I = 1,AV = (dia=lluvia),P = raiz ;I = 2,AV = (viento=fuerte),P = 1 ;I = hoja,AV = [no/2],P = 2 ;I = 3,AV = (viento=debil),P = 1 ;I = hoja,AV = [si/3],P = 3 ;I = 4,AV = (dia=nublado),P = raiz ;I = hoja,AV = [si/4],P = 4 ;I = 5,AV = (dia=soleado),P = raiz ;I = 6,AV = (humedad=normal),P = 5 ;I = hoja,AV = [si/2],P = 6 ;I = 7,AV = (humedad=alta),P = 5 ;I = hoja,AV = [no/3],P = 7.

10.7.5. Imprimiendo el arbol construido.

Para imprimir el arbol construido de una manera legible definimos:

1 imprime_arbol :-2 imprime_arbol(raiz,0).3

4 imprime_arbol(Padre,_) :-5 nodo(hoja,Class,Padre), !,6 write(’ => ’),write(Class).7 imprime_arbol(Padre,Pos) :-8 findall(Son,nodo(Son,_,Padre),L),9 Pos1 is Pos+2,

10 imprime_lista(L,Pos1).11

12 imprime_lista([],_) :- !.13

14 imprime_lista([N|T],Pos) :-

140 10 Arboles de Decision

15 node(N,Test,_),16 nl, tab(Pos), write(Test),17 imprime_arbol(N,Pos),18 imprime_lista(T,Pos).

10.7.6. Ejecutando todo el experimento

Ası la sesion para construir el arbol de decision para jugar tenis es (con id3.plya cargado en Prolog):

?- [test3].% test3 compiled 0.00 sec, 3,896 bytestrue.

?- id3.true.

?- imprime_arbol.

dia=lluviaviento=fuerte => [no/2]viento=debil => [si/3]

dia=nublado => [si/4]dia=soleado

humedad=normal => [si/2]humedad=alta => [no/3]

true.

10.7.7. Predicados auxiliares

Algunos predicados auxiliares incluyen:

1 genera_nodo_id(M) :-2 retract(id(N)),3 M is N+1,4 assert(id(M)), !.5

6 genera_nodo_id(1) :-7 assert(id(1)).8

9 eliminar(X,[X|T],T) :- !.10

11 eliminar(X,[Y|T],[Y|Z]) :-12 eliminar(X,T,Z).13

14 subconjunto([],_) :- !.15

16 subconjunto([X|T],L) :-

10.7 Implementacion el Prolog 141

17 member(X,L), !,18 subconjunto(T,L).19

20 maximo([X],X) :- !.21 maximo([X/M|T],Y/N) :-22 maximo(T,Z/K),23 (M>K,Y/N=X/M ; Y/N=Z/K), !.

Capıtulo 11Planeacion

Resumen La planeacion es un tema de interes tradicional en Inteligencia Artificial,que involucra razonar acerca de los efectos de las acciones y la secuencia en queestas se aplican para lograr un efecto acumulativo dado. En esta sesion desarrolla-remos planificadores simples para ilustrar los principios de la planeacion.

11.1. Acciones

Cada accion posible es definida en terminos de su condicion y sus efectos, es-pecıficamente:

Condicion. La condicion que debe satisfacerse para la accion pueda ejecutarse.Agregar. Es una lista de cambios que se espera ocurran despues de ejecutarse laaccion.Quitar. Es una lista de observaciones que se espera dejen de ser verdaderas des-pues de ejecutarse la accion.

Las condiciones, pueden definirse por un procedimiento

1 cond(Acc,Cond).

Los efectos de una accion pueden definirse de manera similar, por dos procedi-mientos:

1 add(Acc,ListaAdd).2 del(Acc,ListaDel).

donde ListaAdd y ListaDel corresponden a las listas definidas para agregar y borrar.Asumamos que vamos a realizar la planeacion en el dominio del mundo de los

bloques. Ası que la unica accion posible sera:

143

144 11 Planeacion

1 mover(Bloque,De,A).

La definicion completa de esta accion es como sigue:

1 precond( mover( Bloque, De, A),2 [ despejado( Bloque), despejado( A),3 en( Bloque, De)] ) :-4 bloque( Bloque),5 objeto( A),6 A \== Bloque,7 objeto( De),8 De \== A,9 Bloque \== De.

10

11 agregar( mover(X,De,A), [ en(X,A), despejado(De)]).12

13 borrar( mover(X,De,A), [ en(X,De), despejado(A)]).

De manera que para poder mover un bloque Bloque de la posicion De a la posi-cion A, es necesario que el bloque Bloque y la posicion A esten despejados, lo mismoque el bloque Bloque este en la posicion De. El resto del procedimiento cond/2 es-tablece restricciones extras: que Bloque sea un bloque, y A y De sean objetos en eluniverso de discurso; que A sea diferente de Bloque (no mover el bloque sobre simismo); que se debe mover el bloque a una nueva posicion (A es diferente de De);y no mover el bloque de sı mismo (Bloque es diferente de De). Las definiciones deadd/2 y del/2 completan la especificacion de mover/3.

Las siguientes definiciones especifican un escenario en el mundo de los bloques:

1 objeto( X) :-2 lugar( X)3 ;4 bloque( X).5

6 bloque( a).7 bloque( b).8 bloque( c).9

10 lugar( 1).11 lugar( 2).12 lugar( 3).13 lugar( 4).14

15 estado1( [ despejado(2), despejado(4), despejado(b),16 despejado(c), en(a,1), en(b,3), en(c,a) ] ).17

18 metas1([en(a, b)]).

11.2 Analisis medios-fines 145

Tal definicion de las acciones, establece tambien el espacio de planes posibles,por lo que se le conoce como espacio de planeacion. Las metas del planeador sedefinen en terminos de una lista de observaciones que se deben cumplir.

Ahora veremos como a partir de esta representacion, es posible derivar los planesmediante un procedimiento conocido como analisis medios-fines.

11.2. Analisis medios-fines

Consideremos que el mundo de los bloques se encuentra en el estado inicialespecificado anteriormente (estado1). Sea la meta del planeador en(a,b). El trabajodel planeador consiste en encontrar una secuencia de acciones que satisfagan estameta. Un planeador tıpico razonarıa de la siguiente forma:

1. Encontrar una accion que satisfaga en(a,b). Al buscar en la relacion add, en-contramos que tal accion es de la forma mover(a,De,b) a partir de cualquierDe. Tal accion debera formar parte de nuestro plan, pero no podemos ejecutarlainmediatamente dado nuestro estado inicial.

2. Hacer posible la accion mover(a,De,b). Al buscar en la relacion cond encontra-mos que la condicion para ejecutar esta accion es:

1 [ despejado(a), despejado(b), en(a,De) ]

en el estado inicial tenemos que despe jado(b) y que en(a,De) para De/1; perono que despe jado(a), ası que el planeador se concentra en esta formula como sunueva meta.

3. Volvemos a buscar en la relacion add para encontrar una accion que satisfagadespe jado(a). Tal accion tiene la forma mover(Bloque,a,A). La condicion paraejecutar esta accion es:

1 [despejado(Bloque), despeado(A), en(Bloque,a) ]

la cual se satisface en nuestro estado inicial para Boque/c y A/2. De forma quemover(c,a,2) puede ejecutarse en el estado inicial, modificando el estado delproblema de la siguiente manera:

Eliminar del estado inicial las relaciones que la accion borra.Incluir las relaciones que la accion agrega al estado inicial del problema.

esto produce la lista:

1 [ despejado(a), despejado(b), despejado(c), despejado(4),2 en(a,1), en(b,3), en(c,2) ]

4. Ahora podemos ejecutar la accion mover(a,1,b), con lo que la meta plantada sesatisface. El plan encontrado es:

146 11 Planeacion

1 [ mover(c,a,2), mover(a,1,b) ]

Este estilo de razonamiento se conoce como analisis medios-fines. Observen queel ejemplo planteado el plan se encontro directamente, sin necesidad de reconside-rar. Esto ilustra como el proceso de razonar sobre el efecto de las acciones y las me-tas guıan la planeacion en una direccion adecuada. Desafortunadamente, no siemprese puede evitar reconsiderar. De hecho, la explosion combinatoria y la busqueda sontıpicas en la planeacion.

El principio de planeacion por analisis medios-fines se ilustra en la figura 11.1.Puede plantearse como sigue: Para resolver una lista de metas Metas en un estadoEstado, que lleven a un estado Estado final, hacer:

Si todas las Metas son verdaderas en Estado, entonces Estado final = Estado. Encualquier otro caso:

1. Seleccionar una Meta no solucionada en Metas.2. Encontrar una Accion que agregue Meta al estado actual.3. Hacer posible Accion resolviendo Condicion para obtener el estado inter 1.4. Aplicar la Accion en el estado inter 1 para obtener el estado inter 2 donde Meta

se cumple.5. Resolver Metas en el estado inter 2 para llegar a Estado final.

Estado Estadointer 1

Estadointer 2

Estadofinal

Condición Meta Metas

prePlan Acción postPlan

Figura 11.1 Analisis medios-fines

El codigo del planeador medios fines es como sigue:

1 plan( Estado, Metas, [], Estado) :-2 satisfecho( Estado, Metas).3

4 plan( Estado, Metas, Plan, EstadoFinal) :-5 append( PrePlan, [Accion | PostPlan], Plan),6 seleccionar( Estado, Metas, Meta),7 lograr( Accion, Meta),8 precond( Accion, Condicion),9 plan( Estado, Condicion, PrePlan, EstadoInter1),

10 aplicar( EstadoInter1, Accion, EstadoInter2),11 plan( EstadoInter2, Metas, PostPlan, EstadoFinal).12

11.3 Metas protegidas 147

13 satisfecho( _, []).14

15 satisfecho( Estado, [Meta | Metas]) :-16 member( Meta, Estado),17 satisfecho( Estado, Metas).18

19 seleccionar( Estado, Metas, Meta) :-20 member( Meta, Metas),21 not(member( Meta, Estado)).22

23 lograr( Accion, Meta) :-24 agregar( Accion, Metas),25 member( Meta, Metas).26

27 aplicar( Estado, Accion, NewEstado) :-28 borrar( Accion, ListaBorrar),29 borrar_todos( Estado, ListaBorrar, Estado1), !,30 agregar( Accion, ListaAgregar),31 append( ListaAgregar, Estado1, NewEstado).32

33 borrar_todos( [], _, []).34

35 borrar_todos( [X | L1], L2, Diff) :-36 member( X, L2), !,37 borrar_todos( L1, L2, Diff).38

39 borrar_todos( [X | L1], L2, [X | Diff]) :-40 borrar_todos( L1, L2, Diff).

Para invocar al planeador, ejecutamos en Prolog la siguiente meta:

1 ?- estado1(E), metas1(M), plan(E,M,P,Efinal).2 E = [despejado(2), despejado(4), despejado(b),3 despejado(c), en(a, 1), en(b, 3), en(c, a)],4 M = [en(a, b)],5 P = [mover(c, a, 2), mover(a, 1, b)],6 Efinal = [en(a, b), despejado(1), en(c, 2), despejado(a),7 despejado(4), despejado(c), en(b, 3)]

11.3. Metas protegidas

Consideren ahora la siguiente llamada a plan/4:

1 ?- estado1(E), plan(E,[en(a,b),en(b,c)],Plan,_).2 E = [despejado(2), despejado(4), despejado(b),3 despejado(c), en(a, 1), en(b, 3), en(c, a)],4 Plan = [mover(b, 3, c),5 mover(b, c, 3),

148 11 Planeacion

6 mover(c, a, 2),7 mover(a, 1, b),8 mover(a, b, 1),9 mover(b, 3, c),

10 mover(a, 1, b)]

Aunque el plan resultante cumple con su cometido, no es precisamente elegante.De hecho, existe un plan de tres movimientos para lograr las metas de este caso! Estose debe a que el mundo de los bloques es mas complejo de lo que parece, debido ala combinatoria. En este problema, el planeador tiene acceso a mas opciones entrediferentes acciones que tienen sentido bajo el analisis medios-fines. Mas opciones,significa mayor complejidad combinatoria.

Regresemos al ejemplo, lo que sucede es que el planeador persigue diferentesmetas en diferentes etapas de la construccion del plan. Por ejemplo:

mover(b,3,c) satisfacer en(b,c)mover(b,c,3) satisfacer clear(c) y ejecutar siguiente accionmover(c,a,2) satisfacer clear(a) y mover(a,1,b)mover(a,1,b) satisfacer on(a,b)mover(a,b,1) satisfacer clear(b) y mover(b,3,c)mover(b,3,c) satisfacer en(b,c) otra vezmover(a,1,b) satisfacer en(a,b) otra vez

Lo que esta tabla muestra es que a veces el planeador destruye metas que ya habıasatisfecho. El planeador logra facilmente satisfacer una de las dos metas planteadas,en(b,c) pero la destruye al buscar como satisfacer la otra meta en(a,b). Lo peores que esta forma desorganizada de seleccionar las metas, puede incluso llevar alfracaso en la busqueda del plan, como en el siguiente ejemplo:

1 ?- estado1(E), plan(E,[despejado(2), despejado(3)], Plan, _).2 ERROR: Out of local stack

Hagan un trace de esta corrida, para saber porque la meta falla.Una idea evidente para evitar este comportamiento en nuestro planeador, es man-

tener una lista de metas protegidas, de forma que las acciones que destruyen estasmetas no puedan ser seleccionadas. De forma que el planeador medios-fines conmetas protegidas se define como:

1 plan_metas_protegidas(EstadoInicial,Metas,Plan,EstadoFinal):-2 plan_mp(EstadoInicial,Metas,[],Plan,EstadoFinal).3

4 plan_mp(Estado,Metas,_,[],Estado) :-5 satisfecho(Estado,Metas).6

7 plan_mp(Estado,Metas,Protegido,Plan,EstadoFinal) :-8 append( PrePlan, [Accion | PostPlan], Plan),9 seleccionar( Estado, Metas, Meta),

10 lograr( Accion, Meta),

11.4 Aspectos procedimentales de la busqueda en amplitud 149

11 precond( Accion, Condicion),12 preservar(Accion,Protegido),13 plan_mp( Estado, Condicion, Protegido, PrePlan,14 EstadoInter1),15 aplicar( EstadoInter1, Accion, EstadoInter2),16 plan_mp( EstadoInter2, Metas, [Meta|Protegido],17 PostPlan, EstadoFinal).18

19 preservar(Accion,Metas) :-20 borrar(Accion,ListaBorrar),21 not( (member(Meta,ListaBorrar),22 member(Meta,Metas))).

De forma que si ejecutamos la consulta:

1 ?- estado1(E), plan_metas_protegidas(E,[despejado(2),2 despejado(3)], P, _).3 E = [despejado(2), despejado(4), despejado(b),4 despejado(c), en(a, 1), en(b, 3), en(c, a)],5 P = [mover(b, 3, 2), mover(b, 2, 4)]

obtenemos una solucion, aunque sigue sin ser la mejor. Un solo movimiento mover(b,2,4)era necesario para cumplir con las metas planeadas.

Los planes innecesariamente largos son resultado de la estrategia de busquedausada por nuestro planeador.

11.4. Aspectos procedimentales de la busqueda en amplitud

Los planeadores implementados usan esencialmente una estrategia de busquedaprimero en profundidad, pero no por completo. Para poder estudiar lo que esta pa-sando, debemos poner atencion al orden en que se generan los planes candidatos.La meta

1 append(PrePlan, [Accion|PostPlan], Plan)

es central en este aspecto. La variable Plan no esta instanciada cuando esta meta esalcanzada. El predicado append/3 genera al reconsiderar, candidatos alternativospara PrePlan en el siguiente orden:

1 PrePlan = [];2 PrePlan = [_];3 PrePlan = [_,_];4 PrePlan = [_,_,_];5 ...

150 11 Planeacion

Candidatos cortos para PrePlan son los primeros. PrePlan establece una con-dicion para Accion. Esto permite encontrar una accion cuya condicion puede sa-tisfacerse por un plan tan corto como sea posible (simulando busqueda primero enamplitud). Por otra parte, la lista candidato para PostPlan esta totalmente no ins-tanciada, y por tanto su longitud es ilimitada. Por tanto, la estrategia de busquedaresultante es globalmente primero en profundidad, y localmente primero en ampli-tud. Con respecto al encadenamiento hacıa adelante de las acciones que se agreganal plan emergente, se trata de una busqueda primero en profundidad. Cada accion esvalidada por un PrePlan, este plan es por otra parte, buscado primero en amplitud.

Una forma de minimizar la longitud de los planes es forzar al planeador, en suparte de busqueda en amplitud, de forma que los planes cortos sean consideradosantes que los largos. Podemos imponer esta estrategia embebiendo nuestro plani-ficador en un procedimiento que genere planes candidatos ordenados por tamanocreciente. Por ejemplo:

1 plan_primero_amplitud(Estado, Metas, Plan, EstadoFinal) :-2 candidato(Plan),3 plan(Estado,Metas,Plan,EstadoFinal).4

5

6 candidato([]).7

8 candidato([Primero|Resto]) :-9 candidato(Resto).

El mismo efecto puede lograrse de manera mas elegante, insertando el generadorde planes directamente en el procedimiento plan/4 de forma que:

1 plan_metas_protegidas_amplitud(EstadoInicial,Metas,Plan,2 EstadoFinal):-3 plan_mp_amplitud(EstadoInicial,Metas,[],Plan,4 EstadoFinal).5

6 plan_mp_amplitud(Estado,Metas,_,[],Estado) :-7 satisfecho(Estado,Metas).8

9 plan_mp_amplitud(Estado,Metas,Protegido,Plan,EstadoFinal) :-10 append(Plan,_,_),11 append( PrePlan, [Accion | PostPlan], Plan),12 seleccionar( Estado, Metas, Meta),13 lograr( Accion, Meta),14 precond( Accion, Condicion),15 preservar(Accion,Protegido),16 plan_mp_amplitud( Estado, Condicion, Protegido, PrePlan,17 EstadoInter1),18 aplicar( EstadoInter1, Accion, EstadoInter2),19 plan_mp_amplitud( EstadoInter2, Metas, [Meta|Protegido],20 PostPlan, EstadoFinal).

11.4 Aspectos procedimentales de la busqueda en amplitud 151

Y por tanto podemos volver a computar la meta original, encontrando esta vez elplan mas corto:

1 ?- estado1(E),2 plan_metas_protegidas_amplitud(E,[despejado(2),3 despejado(3)], Plan,_).4 E = [despejado(2), despejado(4), despejado(b),5 despejado(c), en(a, 1), en(b, 3), en(c, a)],6 Plan = [mover(b, 3, 4)]

Este resultado es optimo, sin embargo la meta:

1 ?- estado1(E),2 plan_metas_protegidas_amplitud(E,[en(a,b), en(b,c)], Plan, _).3 E = [despejado(2), despejado(4), despejado(b),4 despejado(c), en(a, 1), en(b, 3), en(c, a)],5 Plan = [mover(c, a, 2),6 mover(b, 3, a),7 mover(b, a, c),8 mover(a, 1, b)]

sigue siendo problematica. Este resultado se obtiene con y sin proteccion de me-tas siguiendo la estrategia primero en amplitud. El segundo movimiento del planparece superfluo y aparentemente no tiene sentido. Investiguemos porque se le in-cluye en el plan y porque aun en el caso de la busqueda primero en amplitud, el planresultante esta lejos del optimo.

Dos preguntas son interesantes en este problema: ¿Que razones encuentra el pla-neador para construir este curioso plan? y ¿Por que el planeador no encuentra el planoptimo e incluye la accion mover(b,3,a)? Atendamos la primer pregunta. La ultimaaccion mover(a,1,b) atiende la meta en(a,b). Los tres primeros movimientos estanal servicio de cumplir las condiciones de esta accion, en particular la condiciondespe jado(a). El tercer movimiento despeja a y una condicion de este movimientoes en(b,a). Esto se cumple gracias al curioso segundo movimiento mover(b,3,a).Esto ilustra la clase de exoticos planes que pueden emerger durante un razonamientomedios-fines.

Con respecto a la segunda pregunta, ¿Por que despues de mover(c,a,2), el pla-neador no considera inmediatamente mover(b,3,c), lo que conduce a un plan opti-mo? La razon es que el planeador estaba trabajando en la meta en(a,b) todo eltiempo. La accion que nos interesa es totalmente superflua para esta meta, y por lotanto no es considerada. La cuarta accion logra en(a,b) y por pura suerte en(b,c)!Este ultimo resultado no es una decision planeada de nuestro sistema.

De lo anterior se sigue, que el procedimiento medios-fines, tal y como lo he-mos implementado es incompleto, no sugiere todas las acciones relevantes para elproceso de planificacion. Esto se debe a la localidad con que se computan las so-luciones. Solo se sugeriran acciones relevantes para la meta actual del sistema. Lasolucion al problema esta en este enunciado: se debe permitir la interaccion entremetas en el proceso de planificacion. Antes de pasar al siguiente tema, consideren

152 11 Planeacion

que al introducir la estrategia primero en amplitud para buscar planes mas cortos,hemos elevando considerablemente el tiempo de computacion necesario para hallaruna solucion.

11.5. Regresion de metas

Supongan que estamos interesados en una lista de metas Metas que se cumplenen cierto estado E. Sea el estado anterior a E, E0 y la accion ejecutada en E0, A.¿Que metas Metas0 tienen que cumplirse en E0 para que Metas se cumpla en E?

Metas0 debe tener las siguientes propiedades:

1. La accion A debe ser posible en E0, por lo que Metas0 debe implicar la condicionpara A.

2. Para cada meta M en Metas, se cumple que:

la accion A agrega M; oM ∈Metas0 y A no borra M.

El computo para determinar Metas0 a partir de Metas y la accion A se conocecomo regresion de metas. Por supuesto, solo estamos interesados en aquellas accio-nes que agregan alguna meta M a Metas. Las relaciones entre varios conjuntos demetas y condiciones se ilustra en la figura 11.2

Figura 11.2 Relaciones entre conjuntos de condiciones en la regresion de metas vıa la accion A. Elarea sombreada representa las metas Metas0 resultado de la regresion. Observen que la interseccionentre Metas y la lista borrar de A debe ser vacıa.

El mecanismo de regresion de metas puede usarse como planeador de la siguientemanera. Para satisfacer una lista de metas Metas a partir de un estado EstadoInicial,hacer: Si Metas se cumple en EstadoInicial, entonces el plan vacıo es suficiente; encualquier otro caso, seleccionar una meta M ∈ Metas y una accion A que agregue

11.5 Regresion de metas 153

M; entonces computar la regresion de Metas vıa A obteniendo ası NuevasMetas ybuscar un plan para satisfacer NuevasMetas desde EstadoInicial.

El procedimiento puede mejorarse si observamos que algunas combinaciones demetas son imposibles. Por ejemplo en(a,b) y despe jado(b) no pueden satisfacerseal mismo tiempo. Esto se puede formular vıa la relacion:

1 imposible(Meta,Metas).

que indica que la Meta es imposible en combinacion con las Metas. Para el caso delmundo de los bloques la incompatibilidad entre las metas se define como:

1 imposible(en(X,X),_).2

3 imposible(en(X,Y), Metas) :-4 member(despejado(Y),Metas)5 ;6 member(en(X,Y1),Metas), Y1 \== Y7 ;8 member(en(X1,Y),Metas) X1 \== X.9

10 imposible(despejado(X),Metas) :-11 member(en(_,X),Metas).

El resto del planeador es como sigue:

1 plan(Estado, Metas, []) :-2 satisfecho(Estado, Metas).3

4 plan(Estado, Metas, Plan) :-5 append( PrePlan, [Accion], Plan),6 seleccionar( Estado, Metas, Meta),7 lograr(Accion, Meta),8 precond(Accion, Condicion),9 preservar(Accion, Metas),

10 regresion(Metas, Accion, MetasReg),11 plan(Estado, MetasReg, PrePlan).12

13 satisfecho(Estado, Metas) :-14 borrar_todos(Metas,Estado,[]).15

16 seleccionar(_, Metas, Meta) :-17 member( Meta, Metas).18

19 lograr( Accion, Meta) :-20 agregar( Accion, Metas),21 member( Meta, Metas).22

23 borrar_todos( [], _, []).24

25 borrar_todos( [X | L1], L2, Diff) :-26 member( X, L2), !,

154 11 Planeacion

27 borrar_todos( L1, L2, Diff).28

29 borrar_todos( [X | L1], L2, [X | Diff]) :-30 borrar_todos( L1, L2, Diff).31

32 preservar(Accion,Metas) :-33 borrar(Accion,ListaBorrar),34 not( (member(Meta,ListaBorrar),35 member(Meta,Metas))).36

37 regresion(Metas, Accion, MetasReg) :-38 agregar(Accion, NuevasRels),39 borrar_todos(Metas, NuevasRels, RestoMetas),40 precond(Accion, Condicion),41 agregarNuevo(Condicion,RestoMetas,MetasReg).42

43 agregarNuevo([],L,L).44

45 agregarNuevo([Meta|_],Metas,_) :-46 imposible(Meta,Metas),47 !,48 fail.49

50 agregarNuevo([X|L1],L2,L3) :-51 member(X,L2), !,52 agregarNuevo(L1,L2,L3).53

54 agregarNuevo([X|L1],L2,[X|L3]) :-55 agregarNuevo(L1,L2,L3).

Ahora es posible encontrar el plan optimo de tres movimientos para el problemadel mundo de los bloques:

1 ?- estado1(E), plan(E,[en(a,b),en(b,c)],P).2 E = [despejado(2), despejado(4), despejado(b),3 despejado(c), en(a, 1), en(b, 3), en(c, a)],4 P = [mover(c, a, 2), mover(b, 3, c), mover(a, 1, b)]

11.6. Combinando planeacion medios fines con primero elmejor

Los planeadores construidos hasta ahora hacen uso de estrategias de busquedabasicas: primero en profundidad, o primero en amplitud, o una combinacion de am-bas. Estas estrategias son totalmente desinformadas, en el sentido que no puedenusar informacion del dominio del problema para guiar su seleccion entre alternati-vas posibles. En consecuencia, estos planeadores son sumamente ineficientes, salvoen casos muy especiales. Existen diversas maneras de introducir una guıa heurıstica,

11.6 Combinando planeacion medios fines con primero el mejor 155

basada en el dominio del problema, en nuestros planeadores. Algunos lugares dondeesto puede hacerse son:

En la relacion seleccionar(Estado,Metas,Meta) que decide el orden en que lasmetas seran procesadas. Por ejemplo, una guıa en el mundo de los bloques es quelas torres deben estar bien cimentadas, de forma que la relacion en/2 mas arribade la torre, deberıa resolverse al ultimo (o primero en el planeador por regresion,que soluciona el plan en orden inverso). Otra guıa es que las metas que ya secumplen en el medio ambiente, deberıan postergarse.En la relacion lograr(Accion,Meta) que decide que accion alternativa sera inten-tada para lograr una meta dada. Observen que nuestro planeador tambien generaalternativas al procesar precond/2. Por ejemplo, algunas acciones son “mejo-res” porque satisfacen mas de una meta simultaneamente. Tambien, con base enla experiencia, podemos saber que cierta condicion es mas facil de satisfacer queotras.Decisiones acerca de que conjunto de regresion de metas debe considerarse acontinuacion. Por ejemplo, seguir trabajando en el que parezca mas facil de re-solver, buscando ası el plan mas corto.

Esta ultima idea muestra como podemos imponer una estrategia primero el mejoren nuestro planeador. Esto implica computar un estimado heurıstico de la dificultadde conjuntos de regresion de metas alternativos, para expandir el mas promisorio.

Recuerden que para usar este tipo de estrategia es necesario especificar:

1. Una relacion s/3 entre nodos del espacio de busqueda: s(Nodo1,Nodo2,Costo).2. Los nodos meta en el espacio: meta(Nodo).3. Una funcion heurıstica de la forma h(Nodo,Hestimado).4. El nodo inicial de la busqueda.

Una forma de definir estos requisitos es asumir que los conjuntos de regresionde metas son nodos en el espacio de busqueda. Esto es, en el espacio de busquedahara una liga entre Metas1 y Metas2 si existe una accion A tal que:

1. A agrega alguna meta ∈Metas1.2. A no destruye ninguna meta ∈Metas13. Metas2 es el resultado de la regresion de Metas1 a traves de A, tal y como defi-

nimos en nuestro planeador anterior: regresion(Metas1,A,Metas2).

Por simplicidad, asumiremos que todas las acciones tienen el mismo costo, y enconsecuencia asignaremos Costo = 1 en todas las ligas del espacio de busqueda. Porlo que la relacion s/3 se define como:

1 s(Metas1,Metas2) :-2 member(Meta,Metas1),3 lograr(Accion,Meta),4 precond(Accion,Cond),5 preservar(Accion,Metas1),6 regresion(Metas1,Accion,Metas2).

156 11 Planeacion

Cualquier conjunto de metas que sea verdadero en la situacion inicial de un plan,es un nodo meta en el espacio de busqueda. El nodo inicial de la busqueda es la listade metas que el plan debe lograr.

Aunque la representacion anterior tiene todos los elementos requeridos, tiene unpequeno defecto. Esto se debe a que nuestra busqueda primero el mejor encuentraun camino solucion como una secuencia de estados y no incluye acciones entre losestados. Por ejemplo, la secuencia de estados (listas de metas) para logra en(a,b) enel estado inicial que hemos estado usando es:

1 [ [despejado(c), despejado(2), en(c,a), despejado(b), en(a,1)]2 [despejado(a), despejado(b), en(a,1)]3 [en(a,b)] ]

El primer estado es verdadero por la situacion inicial, el segundo es resultado dela accion mover(c,a,2) y el tercero es resultado de la accion mover(a,1,b).

Observen que la busqueda primero el mejor regresa el camino solucion en elorden inverso. En nuestro caso es una ventaja, porque los planes son construidos enla regresion hacıa atras, ası que al final obtendremos la secuencia de acciones enel orden correcto. Sin embargo, es raro no tener mencion explıcita a las accionesen el plan, aunque puedan reconstruirse de las diferencias entre listas de metas.Podemos incluir las acciones en el camino solucion facilmente, basta con agregara cada estado la accion que se sigue de el. De forma que los nodos del espacio debusqueda tendran la forma:

1 Metas -> Accion

Su implementacion detallada es la siguiente:

1 :- op(300,xfy, ->).2

3 s(Metas -> AccSiguiente,MetasNuevas -> Accion, 1) :-4 member(Meta,Metas),5 lograr(Accion,Meta),6 precond(Accion,Cond),7 preservar(Accion,Metas),8 regresion(Metas,Accion,MetasNuevas).9

10 meta(Metas -> Accion) :-11 inicio(Estado),12 satisfecho(Estado,Metas).13

14 h(Metas -> Accion,H) :-15 inicio(Estado),16 borrar_todos(Metas,Estado,Insatisfecho),17 length(Instatisfecho,H).18

19 inicio([en(a,1),en(b,3),en(c,a),despejado(b),despejado(c),20 despejado(2),despejado(4)]).

11.6 Combinando planeacion medios fines con primero el mejor 157

Ahora podemos usar nuestro viejo buscador primero el mejor:

1 primeroMejor(Inicio,Solucion) :-2 expandir([],hoja(Inicio,0/0),9999,_,si,Solucion).3

4

5 %%% expandir(Camino,Arbol,Umbral,Arbol1,Solucionado,Solucion)6 %%% Camino es el recorrido entre Inicio y el nodo en Arbol7 %%% Arbol1 es Arbol expandido bajo el Umbral8 %%% Si la meta se encuentra, Solucion guarda el camino

solucion9 %%% y Solucionado = si

10

11 % Caso 1: la hoja con Nodo es una meta, construye una solucion12

13 expandir(Camino,hoja(Nodo,_),_,_,si,[Nodo|Camino]) :-14 meta(Nodo).15

16 % Caso 2: una hoja con f-valor menor o igual al Umbral17 % Generar succesores de Nodo y expandirlos bajo el Umbral18

19 expandir(Camino,hoja(Nodo,F/G),Umbral,Arbol1,Solucionado,Sol) :-20 F =< Umbral,21 (bagof( M/C,(s(Nodo,M,C),not(member(M,Camino))),Succ),22 !, % Nodo tiene sucesores23 listaSuccs(G,Succ,As), % Encontras subarboles As24 mejorF(As,F1), % f-value of best successor25 expandir(Camino,arbol(Nodo,F1/G,As),Umbral,Arbol1,26 Solucionado,Sol)27 ;28 Solucionado = nunca % Nodo no tiene sucesores29 ).30

31 % Caso 3: Nodo interno con f-valor menor al Umbral32 % Expandir el subarbol mas promisorio con cuyo33 % resultado, continuar/7 decidira como proceder34

35 expandir(Camino,arbol(Nodo,F/G,[A|As]),Umbral,Arbol1,36 Solucionado,Sol) :-37 F =< Umbral,38 mejorF(As,MejorF), min(Umbral,MejorF,Umbral1),39 expandir([Nodo|Camino],A,Umbral1,A1,Solucionado1,Sol),40 continuar(Camino,arbol(Nodo,F/G,[A1|As]),Umbral,Arbol1,41 Solucionado1,Solucionado,Sol).42

43 % Caso 4: Nodo interno con subarboles vacıo44 % Punto muerto, el problema nunca sera resuelto45

46 expandir(_,arbol(_,_,[]),_,_,nunca,_) :- !.47

48 % Caso 5: f-valor mayor que el Umbral49 % Arbol no debe crecer50

158 11 Planeacion

51 expandir(_,Arbol,Umbral,Arbol,no,_) :-52 f(Arbol,F), F > Umbral.53

54 %%% continuar(Camino,Arbol,Umbral,NuevoArbol,SubarbolSolucionado,55 %%% ArbolSolucionado,Solucion)56

57 % Caso 1: el subartol y el arbol estan solucionados58 % la solucion esta en Sol59

60 continuar(_,_,_,_,si,si,Sol).61

62 continuar(Camino,arbol(Nodo,F/G,[A1|As]),Umbral,Arbol1,no,63 Solucionado,Sol) :-64 insertarArbol(A1,As,NAs),65 mejorF(NAs,F1),66 expandir(Camino,arbol(Nodo,F1/G,NAs),Umbral,Arbol1,67 Solucionado,Sol).68

69 continuar(Camino,arbol(Nodo,F/G,[_|As]),Umbral,Arbol1,nunca,70 Solucionado,Sol) :-71 mejorF(As,F1),72 expandir(Camino,arbol(Nodo,F1/G,As),Umbral,Arbol1,73 Solucionado,Sol).74

75 %%% listaSuccs(G0,[Nodo1/Costo1, ...], [hoja(MejorNodo,MejorF/G),...])

76 %%% hace una lista de arboles sucesores ordendados por F-valor77

78 listaSuccs(_,[],[]).79

80 listaSuccs(G0,[Nodo/C|NCs],As) :-81 G is G0 + C,82 h(Nodo,H), % Heuristic term h(N)83 F is G + H,84 listaSuccs(G0,NCs,As1),85 insertarArbol(hoja(Nodo,F/G),As1,As).86

87 %%% Inserta A en una lista de arboles As preservando el orden porf-valor

88

89 insertarArbol(A,As,[A|As]) :-90 f(A,F), mejorF(As,F1),91 F =< F1, !.92

93 insertarArbol(A,[A1|As], [A1|As1]) :-94 insertarArbol(A,As,As1).95

96

97 %%% Extraer f-valores98

99 f(hoja(_,F/_),F). % f-valor de una hoja100 f(arbol(_,F/_,_),F). % f-valor de un arbol101

102 mejorF([A|_],F) :- f( A, F).

11.7 Variables y planes no lineales 159

103 mejorF([], 9999).104

105 min(X,Y,X) :- X =< Y, !.106 min(_,Y,Y).

De forma que podemos procesar el plan con la siguiente llamada:

1 ?- primeroMejor([en(a,b), en(b,c)] -> stop, Plan).2 Plan = [[despejado(2), en(c, a), despejado(c), en(b, 3),3 despejado(b), en(a, 1)]->mover(c, a, 2),4 [despejado(c), en(b, 3), despejado(a), despejado(b),5 en(a, 1)]->mover(b, 3, c),6 [despejado(a), despejado(b), en(a, 1), en(b, c)]7 ->mover(a, 1, b),8 [en(a, b), en(b, c)]->stop]

La accion nula stop es necesaria pues todos los nodos deben incluir una accion.Aunque la heurıstica usada es simple, el programa debe ser mas rapido que las ver-siones anteriores. Eso si, el precio a pagar es una mayor utilizacion de la memoria,debido a que debemos mantener el conjunto de alternativas competitivas.

11.7. Variables y planes no lineales

A manera de comentario final, consideraremos dos casos que pueden mejorar laeficiencia de los planificadores construidos en esta sesion. El primer caso consisteen permitir que las acciones y las metas contengan variables no instanciadas; elsegundo caso es considerar que los planes no son lineales.

11.7.1. Acciones y metas no instanciadas

Las variables que ocurren en nuestros planeadores estan siempre instanciadas.Esto se logra, por ejemplo en la relacion precond/2 cuyo cuerpo incluye la metablock(Block) entre otras. Este tipo de meta hace que Block siempre este instanciada.Esto puede llevar a la generacion de numerosos movimientos alternativos irrelevan-tes. Por ejemplo, cuando al planeador se le plantea como meta despe jar(a), esteutiliza lograr/2 para generar movimientos que satisfagan despe jado(a):

1 mover(De,a,A)

Entonces se computan las condiciones necesarias para ejecutar esta accion:

1 precond(mover(De,a,A)),Cond)

160 11 Planeacion

Lo cual fuerza, al reconsiderar, varias instanciaciones alternativas para De y A:

1 mover(b,a,1)2 mover(b,a,2)3 mover(b,a,3)4 mover(b,a,4)5 mover(b,a,c)6 mover(b,a,1)7 mover(b,a,2)

Para hacer mas eficiente este paso del planeador, es posible permitir variables noinstanciadas en las metas. Para el ejemplo del mundo de los bloques, las condicionesde mover serıan definidas como:

1 precond(mover(Bloque,De,A),2 [despejado(Bloque),despejado(A),en(Bloque,De)]).

Si reconsideramos con esta nueva definicion la situacion inicial, la lista de con-diciones computadas serıa:

1 [despejado(Bloque),despejado(A),en(Bloque,a)]

Observen que esta lista de metas puede ser satisfecha inmediatamente en la si-tuacion inicial de nuestro ejemplo si Bloque/c y A/2. Esta mejora en eficiencia selogra postergando la decision de como instanciar las variables, al momento en queya se cuenta con mas informacion para ello.

Este ejemplo ilustra el poder de la representacion con variables, pero el precio apagar es una mayor complejidad. Para empezar, nuestro intento por definir precondpara mover/3 es erroneo, pues permite movimientos como mover(c,a,c), que dacomo resultado que !el bloque c este en el bloque c! Esto podrıa arreglarse si espe-cificaramos que De y A deben ser diferentes:

1 precond(mover(Bloque,De,A),2 [despejado(Bloque),despejado(A),en(Bloque,De),3 diferente(Bloque,A), diferente(De,A),4 diferente(Bloque,De)]).

donde di f erente/2 significa que los dos argumentos no denotan al mismo objetoProlog. Una condicion como estas, no depende del estado del problema, de formaque no puede volverse verdadero mediante accion alguna, pero debe verificarse eva-luando el predicado correspondiente. Una manera de manejar estas cuasi-metas esagregar al predicado satis f echo/2 la siguiente clausula:

1 satisfecho(Estado,[Meta|Metas]) :-2 satisface(Meta),3 satisfecho(Estado,Metas).

11.7 Variables y planes no lineales 161

De forma que debemos definir tambien:

1 satisface(diferente(X,Y))

Tal relacion tiene exito si X y Y no se corresponden. Si X y Y son lo mismo,la condicion es falsa. Este caso deberıa tratarse con imposible, pues la condiciondebera seguir siendo falsa, sin importar las acciones que seran adoptadas en el plan.En otro caso, estamos ante falta de informacion y satis f ace se deberıa postergar.

11.7.2. Planes no lineales

Un problema con nuestro planeador es que considera todos los posibles ordenesde las acciones, aun cuando las acciones son completamente independientes. Con-sideren el problema ilustrado en la figura 11.3, donde la meta es construir dos pilasde bloques que estan de antemano bien separados. Las dos pilas puede construirseindependientemente con los siguientes planes:

1 Plan1 = [mover(b,a,c), mover(a,1,b)]2 Plan2 = [mover(e,d,f), mover(d,8,e)]

El punto importante aquı es que estos planes no interaccionan entre ellos, deforma que el orden de las acciones solo es relevante dentro de cada plan. Tampocoimporta si se ejecuta primero Plan1 o Plan2 y es incluso posible ejecutarlos demanera alternada, por ejemplo:

1 [mover(b,a,c), mover(e,d,f), mover(d,8,e), mover(a,1,b)]

Sin embargo, nuestro planeador considerara las 24 permutaciones posibles delas cuatro acciones, aunque existan solo 4 alternativas: 2 permutaciones para ca-da uno de los planes. El problema se debe a que el planeador insiste en el ordentotal de las acciones en el plan. Una mejora se lograrıa si, en los casos donde elorden no es importante, la precedencia entre las acciones se mantiene indefinida.Entonces nuestros planes seran conjuntos de acciones parcialmente ordenadas. Losplaneadores que aceptan este tipo de representacion se conocen como planeadoresno lineales.

Consideremos nuevamente el ejemplo de la figura 11.3. Analizando las metasen(a,b) y en(b,c) el planeador no lineal concluye que las siguientes dos accionesson necesarias en el plan:

1 M1 = mover(a,X,b)2 M2 = mover(b,Y,c)

162 11 Planeacion

b

a c

e

f d

1 2 3 4 5 6 7 8

b

a

c

e

f

d

1 2 3 4 5 6 7 8

Figura 11.3 Una tarea de planeacion con dos planes independientes

No hay otra forma de resolver ambas metas, pero el orden de estas acciones esaun indeterminado. Ahora consideren las condiciones de ambas acciones. La condi-cion de mover(a,X ,b) incluye depe jado(a), la cual no se satisface en la situacioninicial, por lo que necesitamos una accion de la forma:

1 M3 = mover(Bloque,a,A).

que precede a M1. Ahora tenemos una restriccion en el orden de las acciones:

1 antes(M3,M1)

Ahora revisamos si M3 y M1 pueden ser el mismo movimiento. Como este noes el caso, el plan tendra que incluir tres movimientos. Ahora el planeador debepreguntarse si hay una permutacion de [M1,M2,M3] tal que M3 preceda a M1, talque la permutacion es ejecutable en el estado inicial del problema y las metas secumplen en el estado resultante. Dadas las restricciones de orden anteriores trespermutaciones de seis, cumplen con los requisitos:

1 [M3,M1,M2]2 [M3,M2,M1]3 [M2,M3,M1]

Y de estas permutaciones, solo la del medio cumple con el requisito de ser ejecu-table bajo la sustitucion Bloque/c,A/2,X/1,Y/3. Como se puede intuir, la comple-jidad computacional no puede ser evitada del todo por un planeador no lineal, peropuede ser aliviada considerablemente.

Referencias 163

Referencias

1. I. Bratko. Prolog programming for Artificial Intelligence. Addison-Wesley, 3rd edition, 2001.2. Alonzo Church. A note on the entscheidungsproblem. Journal of Symbolic Logic, 1:40–41,

1936.3. K. Clark. Negations as failure. In H. Gallaire and J. Minker, editors, Logic and Databases,

pages 293–322. Plenum Press, New York, USA, 1978.4. A. Colmerauer and P. Roussel. The birth of Prolog. In T. H. Bergin and R. G. Gibson, editors,

History of Programming Languages, chapter The birth of Prolog, pages 331–367. ACM Press/ Addison-Wesley, 1996.

5. M.R. Genesereth and N.J. Nilsson. Logical Foundations for Artificial Intelligence. MorganKauffman Publishers, Inc., Palo Alto, CA., USA, 1987.

6. R. A. Kowalski. Predicate logic as a programming language. In J. L. Rosenfeld, editor,Information Processing, pages 569–574. North-Holland, 1974.

7. Robert A. Kowalski and Donald Kuehner. Linear resolution with selection function. ArtificialIntelligence, 2(3/4):227–260, 1971.

8. J. McCarthy. Programs with common sense. In Proceedings of the Symposium on the Mecha-nization of Thought Processes, Teddington, England, 1958.

9. M. Minsky. The Society of Mind. Simon and Schuster, New York, NJ., USA, 1986.10. T.M. Mitchell. Machine Learning. Computer Science Series. McGraw-Hill International

Editions, Singapore, 1997.11. Shan-Hwei Nenhuys-Chen and Ronald de Wolf. Foundations of Inductive Logic Program-

ming, volume 1228 of Lecture Notes in Artificial Intelligence. Springer-Verlag, Berlin Heidel-berg, 1997.

12. Ulf Nilsson and Jan Maluszynski. Logic, Programming and Prolog. John Wiley & Sons Ltd,2nd edition, 2000.

13. J. R. Quinlan. Induction of decision trees. Machine Learning, 1:81–106, 1986.14. J.R. Quinlan. C4.5: Programs for Machine Learning. Morgan Kaufmann, San Mateo, CA.,

USA, 1993.15. J. A. Robinson. A machine-oriented logic based on the resolution principle. Journal of the

ACM, 12(1):23–41, 1965.16. J. A. Robinson. Logic and logic programming. Communications of the ACM, 35(3):40–65,

1992.17. Stuart J. Russell and Peter Norvig. Artificial Intelligence, a modern approach. Prentice Hall,

New Jersey, USA, 2nd edition, 2003.18. C. Shannon and W. Weaver. The mathematical theory of communication. The Bell System

Technical Journal, 27:623–656, July, October 1948.19. Alan M. Turing. On the computable numbers, with applications to the entscheidungsproblem.

In Proceedints of the London Mathematical Society, volume 42 of series 2, pages 230–265,1936.

20. D. H. D. Warren. An abstract Prolog instruction set. Technical Report 309, SRI, 1983.