Вы находитесь на странице: 1из 172

Alejandro Guerra-Hern andez

Metodologas de Programaci on I
Programaci on L ogica
5 de noviembre de 2009
Departamento de Inteligencia Articial
Sebasti an Camacho No. 5, Xalapa, Ver.,
M exico 91000

Indice general
1. Introducci on. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1. Breve historia de la programaci on l ogica. . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Una breve introducci on a Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.1. Hechos y relaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.2. Reglas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.3. Denici on de reglas recursivas . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3. C omo computa Prolog una soluci on? . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.4. Organizaci on del curso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Parte I Formalismos
2. L ogica de Primer Orden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.1. Introducci on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2. Sistemas formales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.3. El lenguaje de la l ogica de primer orden. . . . . . . . . . . . . . . . . . . . . . . . 23
2.3.1. Sintaxis de la l ogica de primer orden . . . . . . . . . . . . . . . . . . . . 25
2.4. La sem antica de la l ogica de primer orden . . . . . . . . . . . . . . . . . . . . . . 26
2.4.1. Teora de modelo de la l ogica de primer orden . . . . . . . . . . . . 27
2.5. Inferencia en la l ogica de primer orden. . . . . . . . . . . . . . . . . . . . . . . . . 29
2.6. Substituciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3. Cl ausulas y Programas Denitivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.1. Cl ausulas denitivas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2. Programas denitivos y Metas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.3. El modelo mnimo de Herbrand. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.3.1. Resultados concernientes a los modelos de Herbrand . . . . . . 39
3.3.2. Construcci on del modelo mnimo de Herbrand. . . . . . . . . . . . 41
4. Principio de Resoluci on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.1. Introducci on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.2. Qu e es un procedimiento de prueba? . . . . . . . . . . . . . . . . . . . . . . . . . . 44
V
VI

Indice general
4.3. Pruebas y programas l ogicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.4. Substituci on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.5. Unicaci on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.6. Resoluci on-SLD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.6.1. Propiedades de la resoluci on-SLD . . . . . . . . . . . . . . . . . . . . . . 55
5. Negaci on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.1. Introducci on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.2. La compleci on de un programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.3. Resoluci on SLDNF para programas denitivos . . . . . . . . . . . . . . . . . . 62
5.4. Programas L ogicos Generales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.5. Resoluci on SLDNF para programas generales . . . . . . . . . . . . . . . . . . . 67
6. Corte y Aritm etica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
6.1. Corte: podando el arbol-SLD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
6.2. Aritm etica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Parte II Prolog
7. Introducci on a Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
8. Estrategias b asicas de resoluci on de problemas . . . . . . . . . . . . . . . . . . . . 85
8.1. Introducci on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
8.2. B usqueda primero en profundidad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
8.3. B usqueda primero en amplitud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
8.4. B usqueda primero el mejor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
9. Sistemas Expertos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
9.1. Introducci on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
9.2. Caractersticas de los SE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
9.2.1. Razonamiento basado en metas . . . . . . . . . . . . . . . . . . . . . . . . 101
9.2.2. Incertidumbre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
9.2.3. Razonamiento guiado por los datos . . . . . . . . . . . . . . . . . . . . . 102
9.3. Usando la m aquina de inferencia de Prolog . . . . . . . . . . . . . . . . . . . . . 103
9.3.1. Reglas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
9.3.2. Reglas para relaciones jer arquicas . . . . . . . . . . . . . . . . . . . . . . 104
9.3.3. Reglas para otras relaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
9.4. Interfaz del usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
9.5. Un Shell simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
9.5.1. REPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
9.6. Encadenamiento haca atr as con incertidumbre . . . . . . . . . . . . . . . . . . 111
9.6.1. Factores de certidumbre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
9.6.2. Factores de certidumbre ` a la MYCIN . . . . . . . . . . . . . . . . . . . 114
9.6.3. Formato de las reglas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
9.6.4. La m aquina de inferencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
9.6.5. Interfaz con el usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

Indice general VII


10. Arboles de Decisi on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
10.1. Representaci on de los arboles de decisi on . . . . . . . . . . . . . . . . . . . . . . 121
10.2. Problemas apropiados para la aplicaci on de arboles de decisi on . . . . 123
10.3. El algoritmo b asico de aprendizaje de arboles de decisi on . . . . . . . . . 124
10.3.1. Qu e atributo es el mejor clasicador? . . . . . . . . . . . . . . . . . . 124
10.3.2. Entropa y ganancia de informaci on . . . . . . . . . . . . . . . . . . . . . 126
10.4. Espacio de hip otesis en el aprendizaje inductivo de arboles de
decisi on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
10.5. Sesgo inductivo en el aprendizaje de arboles de decisi on . . . . . . . . . . 128
10.5.1. Sesgo por restricci on y sesgo por preferencia . . . . . . . . . . . . . 129
10.5.2. Porqu e preferir hip otesis m as compactas? . . . . . . . . . . . . . . . 129
10.6. Consideraciones sobre el aprendizaje inductivo de arboles de
decisi on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
10.6.1. Evitando un sobreajuste con los datos de entrenamiento . . . . 130
10.6.2. Incorporando valores contnuos . . . . . . . . . . . . . . . . . . . . . . . . 132
10.6.3. Medidas alternativas para la selecci on de atributos . . . . . . . . 133
10.7. Implementaci on el Prolog. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
10.7.1. Atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
10.7.2. Distribuci on de clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
10.7.3. El mejor atributo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
10.7.4. El arbol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
10.7.5. Imprimiendo el arbol construido. . . . . . . . . . . . . . . . . . . . . . . . 139
10.7.6. Ejecutando todo el experimento . . . . . . . . . . . . . . . . . . . . . . . . 140
10.7.7. Predicados auxiliares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
11. Planeaci on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
11.1. Acciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
11.2. An alisis medios-nes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
11.3. Metas protegidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
11.4. Aspectos procedimentales de la b usqueda en amplitud . . . . . . . . . . . . 149
11.5. Regresi on de metas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
11.6. Combinando planeaci on medios nes con primero el mejor . . . . . . . 154
11.7. Variables y planes no lineales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
11.7.1. Acciones y metas no instanciadas . . . . . . . . . . . . . . . . . . . . . . . 159
11.7.2. Planes no lineales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Acr onimos
Implicaci on material
CWA Suposici on del mundo cerrado (Closed World Assumption).
fbf F ormula bien formada (wff - well formed formula).
FOL L ogica de primer orden (First-Order Logic).
FOPC C alculo de predicados en primer orden (First-Order Predicate Calculus).
IA Inteligencia Articial.
L
FOL
El lenguaje de la l ogica de primer orden.
MGU Unicador m as general (Most General Unier).
NAF Negaci on por fallo nito (Negation as Finite Failure).
R Funci on de selecci on en la resoluci on-SLD.
ssi Si y s olo si.
WAM M aquina abstracta de Warren (Warren Abstract Machine).
U Universo de discurso. En ciertas ocasiones se presentar a como D (domi-
nio).
IX
Captulo 1
Introducci on
Resumen El tema de este curso de metodologas de programaci on es la programa-
ci on l ogica. En este captulo se presenta un panorama general de este paradigma de
programaci on, con el objetivo de que ustedes puedan responder a Porqu e y para
qu e es necesario estudiar a la programaci on l ogica en un curso de su maestra en
Inteligencia Articial (IA)? Para ello, se revisar an algunas notas hist oricas sobre los
origenes de la programaci on l ogica y Prolog, su lenguaje de programaci on m as co-
nocido; se experimentar a con el uso de Prolog; y se revisar a brevemente cuales son
los fundamentos te oricos del paradigma. Finalmente, el captulo ofrece la organiza-
ci on del material que revisaremos en el resto del curso.
1.1. Breve historia de la programaci on l ogica.
La historia reciente, y ` a la francaise, de la programaci on l ogica comienza en
julio de 1970 en Montreal, Canad a, donde Alain Colmerauer, Philippe Roussel y
Robert Pasero [4] trabajaban en un proyecto sobre traducci on autom atica y procesa-
miento del lenguaje natural. El sistema en cuesti on inclua analizadores sint acticos
y generadores de frases para el franc es. Un estudiante de Colmerauer, decidi o tra-
bajar sobre la demostraci on autom atica de teoremas, con base en el trabajo sobre el
principio de resoluci on de Alan Robinson [15]. La conjunci on de estos trabajos dio
como resultado una interfase entre el franc es y las f ormulas l ogicas del demostrador
de teoremas que permita interacciones como que se muestra en el cuadro 1.1.
Este sistema haca 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 con
los smbolos funcionales The, Subset, y True, especicaban un lenguaje de f ormu-
las l ogicas. Mientras se segua trabajando en la demostraci on de teoremas en este
lenguaje, apareci o la referencia obligada al trabajo de Robert Kowalski [7] sobre
el m etodo conocido como resoluci on-SL, que como veremos, es fundamental en el
lenguaje Prolog.
1
2 1 Introducci on
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 creaci on de este paradigma de programaci on tiene una larga his-
toria m as universal, cuya mayor parte transcurre en los dominios de la l ogica ma-
tem atica y recientemente en el de las ciencias de la computaci on. La programaci on
l ogica se basa en la sintaxis de la l ogica de primer orden, originalmente propues-
ta por Gottlob Frege en la segunda mitad del siglo XIX y modicada a su forma
actual por Giuseppe Peano y Bertrand Russell. En la d ecada de los a nos treinta,
Kurt G oedel y Jacques Herbrand estudiaron la noci on de computabilidad basada
en derivaciones. Su trabajo puede verse como el origen de la computaci on como
deducci on. Adem as, Herbrand discuti o en su tesis doctoral un conjunto de reglas
para manipular ecuaciones algebraicas en t erminos que pueden verse ahora como un
bosquejo de la unicaci on. Treinta a nos m as tarde, Alan Robinson [15] public o su
artculo fundacional sobre la demostraci on autom atica. En este trabajo se introduce
el principio de resoluci on, la noci on de unicaci on y un algoritmo de unicaci on.
Y es que, si bien el paradigma de la programaci on l ogica tiene sus races en la
demostraci on autom atica de teoremas, de donde tom o la noci on de deducci on, pre-
senta una novedad importante: en el proceso de demostraci on algunos valores ser an
computados. Pero otro paso era necesario para vislumbrar como es posible computar
en este marco.
En 1974, Robert Kowalski [6] introduce la noci on de programas l ogicos con una
forma restringida de resoluci on. La sintaxis propuesta por Kowalski era m as res-
tringida que la de Robinson, pero tena un efecto colateral sobre la forma de una
substituci on satisfactoria. Esta substituci on puede verse como el resultado de una
computaci on, y en consecuencia, ciertas f ormulas l ogicas (cl ausulas de Horn) pue-
den interpretarse como programas. El trabajo de Kowalski termino un debate del
todo relevante para nosotros: dadas las metas de la inteligencia articial El cono-
cimiento debe representarse de forma declarativa o procedimental? Si la forma
declarativa era la adecuada, tal como defenda John McCarthy [8], la realizaci on
de la inteligencia articial pasaba por representar el conocimiento en c alculo de
predicados e implementar procedimientos de prueba ecientes sobre este lenguaje;
1.2 Una breve introducci on a Prolog 3
Si la forma procedimental era la adecuada, entonces tal realizaci on pasaba por la
implementaci on de procedimientos organizados como una sociedad de agentes que
compiten y cooperan, tal como lo resume Marvin Minsky [9]. Los programas l ogi-
cos de Kowalski tienen evidentemente una interpretaci on declarativa, pero tambi en
procedimental.
Entre 1971 y 1973 Kowalski y Colmeraruer colaboraron intensamente, conclu-
yendo con la creaci on de Prolog en 1973. Prolog puede verse como la realizaci on
pr actica del concepto de programa l ogico. Aunque sus inicios estuvieron enfocados
al procesamiento del lenguaje natural, pronto se encontr o que Prolog poda ser usado
como un lenguaje de programaci on de prop osito general. Originalmente, Prolog fue
implementado por Philippe Roussel como un int erprete escrito en Algol-W. Un paso
adelante fue logrado por David H. Warren [20] qui en propuso en 1983 una m aquina
abstracta, ahora conocida como WAM (Warren Abstract Machine). La WAM cuen-
ta con un conjunto de instrucciones para compiladores de Prolog independientes de
la m aquina y se convirti o en el est andar para la implementaci on de Prolog y otros
lenguajes l ogicos de programaci on.
De esta breve historia (para una versi on m as detallada ver J.A. Robinson [16])
podemos extraer algunas consideraciones sobre este curso:
La programaci on l ogica es una herramienta y un sujeto de estudio de la inteli-
gencia articial.
La l ogica de primer orden es fundamental para entender este paradigma de pro-
gramaci on.
La programaci on l ogica es un paradigma de programaci on, que diere de otros
paradigmas, como la programaci on imperativa (Algol, C, Pascal, etc.), la orien-
tada a objetos (Simula, Smalltalk, Eiffel, C++, Java, etc.), o la funcional (ML,
Haskell, Lisp, etc.).
Prolog ,= programaci on l ogica, pero es su realizaci on pr actica m as usada en la
actualidad.
1.2. Una breve introducci on a Prolog
Prolog es la realizaci on m as utilizada del paradigma de programaci on l ogica.
Escribir un programa en Prolog tiene menos que ver con la tarea de especicar un
algoritmo, como es el caso de la programaci on imperativa; y m as con la especi-
caci on de los objetos y las relaciones entre ellos, que ocurren en el contexto de un
problema. En particular, tiene que ver con la especicaci on de las relaciones que
conforman la soluci on deseada del problema. Veamos un ejemplo basado en la ge-
nealoga de una familia [1].
4 1 Introducci on
1.2.1. Hechos y relaciones
La gura 1.1 muestra una relaci on familiar, donde las echas X Y indican
que X es progenitor Y. El hecho de que Tom sea progenitor de Bob
1
se escribe en
Prolog: progenitor(tom,bob).
pam
bob
tom
liz
ann pat
jim
Figura 1.1 Una relaci on familiar.
Hemos escogido progenitor como el nombre de una relaci on que tiene a tom
y bob como argumentos. Por razones que explicaremos m as adelante, escribimos
los nombres como tom con min uscula inicial. Para indicar que esta relaci on tiene
dos argumentos escribimos progenitor/2 y decimos que progenitor tiene aridad 2.
El arbol familiar completo puede denirse 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 cl ausulas. Cada una de estas cl ausulas declara un
hecho sobre la relaci on progenitor. Por ejemplo, progenitor(tom,bob) es un
caso particular de la relaci on progenitor. Una relaci on est a denida por el conjunto
de 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 Mara del Pilar, no caben
en un grafo f acil de leer. Si usted quiere llamar a Tom, Pancho; eso, como veremos, no cambia en
nada la historia que voy a contar (a condici on de que Pancho sea siempre Pancho).
1.2 Una breve introducci on a Prolog 5
SWI Prolog, en una terminal invocaramos swipl ( o pl en algunos sistemas ope-
rativos):
> swipl
Welcome 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 free
software, and you are welcome to redistribute it under certain
conditions.
Please visit http://www.swi-prolog.org for details.
For help, use ?- help(Topic). or ?- apropos(Word).
?-
El smbolo ?- es el indicador de que Prolog espera una instrucci on. Si tenemos
un archivo llamado clase01.pl con el conjunto de casos que dene la relaci on
progenitor, podemos consultarla desde SWI Prolog:
?- [clase01].
% clase01 compiled 0.00 sec, 168 bytes
Yes
?-
Prolog responde que el programa clase01 ha sido compilado (Saban ustedes
que el c odigo de Prolog es compilado?) y espera una nueva instrucci on. La instruc-
ci on puede ser la pregunta Es progenitor Bob de Pat?
?- progenitor(bob,pat).
Yes
a lo que Prolog responder a Yes, al encontrar que ese hecho se encuentra en nuestro
programa. Si preguntamos Es Liz progenitora de Pat? obtendremos como respuesta
No, porque nuestro programa no menciona nada (Haban 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 objeto
conocido por nuestro programa, esto es, Ben no aparece en ninguna parte de nuestro
c odigo:
?- progenitor(tom,ben).
No
Una pregunta m as interesante sobre la relaci on progenitor es Qui en es el proge-
nitor de Liz? Lo cual puede preguntarse como:
?- progenitor(X,liz).
X = tom
Yes
6 1 Introducci on
Prolog computa un valor para X tal que la relaci on progenitor se cumple. Si
preguntamos por los hijos de Bob, tendremos varas respuestas posibles. Para obte-
nerlas todas, es necesario teclear ; y o Enter despu es de cada respuesta de
Prolog:
?- progenitor(bob,X).
X = ann ;
X = pat ;
No
Prolog nos da las respuestas ann, pat y al no haber m as respuestas posibles,
responde No.
Es posible plantear preguntas m as complicadas a nuestro programa, por ejemplo
Qui en es abuelo/a de Jim? Como nuestro programa no conoce directamente la rela-
ci on abuelo/2, esta pregunta debe descomponerse en dos preguntas como lo muestra
la gura 1.2:
1. Qui en es el progenitor de Jim? Asumamos que es algui en Y.
2. Qui en es el progenitor de Y? Asumamos que es algui en X.
X
Y
jim
progenitor
abuelo
progenitor
Figura 1.2 La relaci on abuelo expresada como una composici on de dos relaciones progenitor.
La secuencia de preguntas en Prolog es como sigue:
?- progenitor(Y,jim), progenitor(X,Y).
Y = pat
X = bob
Yes
Si invertimos el orden de las dos preguntas, el resultado sigue siendo el mismo:
?- progenitor(X,Y), progenitor(Y,jim).
X = bob
Y = pat
Yes
1.2 Una breve introducci on a Prolog 7
Podemos preguntar tambi en Quien es nieto de Tom?:
?- progenitor(tom,X), progenitor(X,Y).
X = bob
Y = ann ;
X = bob
Y = pat ;
No
Otra pregunta interesante sera Tienen Ann y Pat progenitores en com un? Esto
puede descomponerse nuevamente en dos preguntas:
1. Qui en 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 denir en Prolog una relaci on, como progenitor/2, especicando las
n-tuplas de objetos que satisfacen la relaci on (n, conocido como aridad, es el
n umero de argumentos de la relaci on, para progenitor n = 2).
El usuario puede plantear f acilmente preguntas a Prolog sobre las relaciones de-
nidas en un programa.
Un programa Prolog consiste de cl ausulas. Cada cl ausula termina con un punto.
Los argumentos de una relaci on pueden ser: objetos concretos o constantes como
tom y ann; objetos generales o variables como X e Y.
Las preguntas planteadas a Prolog consisten en una o m as metas. Una secuencia
de metas como progenitor(X,ann), progenitor(X,pat) signica
la conjunci on 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 la
meta se puede satisfacer o no. En el caso de una respuesta positiva, se dice que
la meta fue satisfecha y tuvo exito. En cualquier otro caso se dice que la meta no
fue satisfecha y fall o.
Si varias respuestas satisfacen una pregunta, Prolog encontrar a tantas como el
usuario quiera.
1.2.2. Reglas
Nuestro ejemplo puede extenderse en muchas formas interesantes. Denamos
las relaciones mu jer/1 y hombre/1, para poder expresarnos sobre el genero de los
miembros de nuestra familia ejemplar:
8 1 Introducci on
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 de
los objetos. Las relaciones binarias (n =2) denen relaciones entre pares de objetos.
La cl ausula mujer(pam) establece que Pam es una mujer. La misma informaci on
podra denirse como una relaci on genero/2 como genero(pam,mujer).
Nuestra siguiente extensi on al programa ser a denir la relaci on vastago/2 como
la inversa de la relaci on progenitor/2. Para ello podemos denir explcitamente
las tuplas que satisfacen esta relaci on, por ejemplo: vastago(liz,tom, etc. Sin
embargo, se puede obtener una denici on m as elegante si tomamos en cuenta que la
relaci on vastago/2 es la inversa de progenitor/2 y que progenitor/2 ya fue denida.
La alternativa se basa en el siguiente enunciado l ogico: Para todo X y para todo Y,
Y es un v astago de X si existe un X que es progenitor de un Y. Esta formulaci on
es muy parecida al formalismo usado en Prolog. La cl ausula correspondiente es la
siguiente:
1 vastago(Y,X) :- progenitor(X,Y).
La cl ausula puede leerse tambi en como: Si X es un progenitor de Y enton-
ces Y es un v astago de X. A este tipo de cl ausulas se les conoce como reglas.
Existe una diferencia fundamental entre los hechos y las reglas. Un hecho como
progenitor(tom,liz) es algo que es siempre, incondicionalmente, verdade-
ro. Las reglas especican cosas que son ciertas si alguna condici on se satisface. Por
ello decimos que las reglas tienen:
Una parte condicional (el lado derecho de la regla o cuerpo de la regla).
Una conclusi on (el lado izquierdo de la regla o cabeza de la regla).
Qu e hace Prolog cuando se le plantea una meta como la siguiente?
?- vastago(liz,tom).
No existe ning un hecho sobre v astagos en nuestro programa, por lo tanto, la
unica alternativa es considerar la aplicaci on de la regla sobre los v astagos. La regla
es general, en el sentido que es aplicable a cualquier objeto X e Y, por lo que puede
ser aplicada a constantes como liz y tom. Para aplicar la regla a liz y a tom es
necesario substituir Y por liz y X por tom. Con tal substituci on, obtenemos un
caso especial de nuestra regla:
vastago(liz,tom) :- progenitor(tom,liz).
1.2 Una breve introducci on a Prolog 9
La parte condicional de la regla es ahora:
progenitor(tom,liz).
Ahora Prolog tratar a de encontrar si esta condici on es verdadera, de forma que la
meta inicial:
vastago(liz,tom).
ha sido substituida por una sub-meta progenitor(tom,liz). Esta nueva
sub-meta puede satisfacerse f acilmente a partir de los hechos conocidos por el pro-
grama, lo cual signica que la conclusi on de la regla tambi en es verdadera, y Prolog
responde con exito:
?- vastago(liz,tom).
Yes
Especiquemos ahora la relaci on madre/2 a partir del siguiente enunciado l ogi-
co: Para toda X e Y, X es madre de Y si X es progenitor de Y y X es mujer. Esto se
traduce a Prolog como:
1 madre(X,Y) :- progenitor(X,Y), mujer(X).
La coma en el cuerpo de la regla, indica una conjunci on: ambas condiciones
deben ser verdaderas para que la conclusi on lo sea.
Las relaciones abuela/2 y hermana/2 pueden denirse 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 especicar que X e Y tienen un
mismo progenitor. La condici on de esta regla se lee: existe un Z que es progenitor de
X y el mismo Z es progenitor de Y y X es mujer. Gr acamente la relaci on hermana/2
se muestra en la gura 1.3. Ahora podemos preguntar:
?- hermana(ann,pat).
Yes
Tras nuestra primer pregunta sobre esta relaci on, podemos concluir que su de-
nici on es correcta, pero tiene un sutil error que se revela al preguntar:
?- hermana(X,pat).
X = ann ;
X = pat ;
No
10 1 Introducci on
Z
X
progenitor
Y
progenitor
hermana
mujer
Figura 1.3 La relaci on hermana.
Es correcto que Pat sea su propia hermana? Ese es el comportamiento que es-
per abamos de la denici on de hermana/2, y se debe a que no hay nada que diga que
X e Y deben ser diferentes! Esto se puede corregir deniendo 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 f acilmente agregando nuevas cl ausulas.
Las cl ausulas 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 qu e cosas son verdaderas.
Las cl ausulas de Prolog tienen cabeza y cuerpo. El cuerpo es una lista de metas
separadas por comas. Las comas implican conjunci on.
Los hechos son cl ausulas con el cuerpo vaco; las preguntas tienen la cabeza
vaca; y las reglas tienen cabeza y cuerpo.
En el curso de una computaci on, las variables pueden ser substituidas por otros
objetos.
Las variables se asumen cuanticadas universalmente. La cuanticaci on existen-
cial s olo es posible en las variables que aparecen en el cuerpo de una cl ausula. Por
1.2 Una breve introducci on a Prolog 11
ejemplo la cl ausula tiene hijo(X) :- progenitor(X,Y) puede leerse
como: Para todo X, X tiene un hijo si existe un Y y X es progenitor de Y.
1.2.3. Denici on de reglas recursivas
Agreguemos una relaci on nueva a nuestro programa: la relaci on ancestro/2. Esta
relaci on ser a denida en t erminos de la relaci on progenitor/2. La denici on com-
pleta puede expresarse por medio de dos reglas. La primera deniendo al ancestro
inmediato (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 desde
X hasta Z, como lo ilustra la gura 1.4. En nuestro ejemplo de la gura 1.1, Tom es
ancestro directo de Liz e indirecto de Pat.
X
Y
progenitor
ancestro


X
progenitor
progenitor
Y
progenitor
ancestro
Figura 1.4 La relaci on ancestro en t erminos 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 m as complicada porque las cadenas de progenitores presen-
tan un problema: no sabemos cuantas veces hay que aplicar la relaci on progenitor!
Un primer intento podra ser algo como:
1 ancestro(X,Z) :-
2 progenitor(X,Z).
3 ancestro(X,Z) :-
4 progenitor(X,Y),
12 1 Introducci on
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 a un, que s olo funciona para un
n umero limitado de ancestros, en el ejemplo: padres, abuelos y bisabuelos. Es decir,
esta denici on de ancestro/2 es correcta pero incompleta.
Existe una formulaci on elegante y completa de la relaci on ancestro/2, comple-
ta en el sentido que puede computar cualquier ancestro, independientemente de la
longitud de la cadena de progenitores que deba aplicarse. La idea central es denir
ancestro en t erminos 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 denen conceptos en t erminos de ellos mismos.
Est an denidas por al menos dos casos: uno terminal (no recursivo) y la llamada
recursiva.
Una relaci on recursiva dene intenSionalmente un concepto.
intenSional ,= intenCional.
1.3 C omo computa Prolog una soluci on? 13
1.3. C omo computa Prolog una soluci on?
Una pregunta a Prolog es siempre una secuencia de una o m as metas. Para res-
ponder, Prolog trata de satisfacer estas metas. Qu e signica satisfacer una meta?
Satisfacer una meta implica demostrar que la meta es verdadera, asumiendo que
las relaciones en el programa l ogico son verdaderas. Satisfacer una meta signica
entonces demostrar que la meta es una consecuencia l ogica de los hechos y reglas
denidas en un programa. Si la pregunta contiene variables, Prolog necesita tambi en
encontrar cuales son los objetos particulares (que remplazaran a las variables) para
los cuales la meta se satisface. La asignaci on de valores a variables es mostrada al
usuario. Si Prolog no puede demostrar para alguna asignaci on de valores a variables,
que las metas siguen l ogicamente del programa, la respuesta a la pregunta ser a No.
En t erminos matem aticos, la interpretaci on de un programa en Prolog es como
sigue: Prolog acepta hechos y reglas como un conjunto de axiomas, y el usuario
plantea preguntas como un teorema; entonces Prolog trata de probar este teorema,
es decir, demostrar que el teorema se sigue l ogicamente de los axiomas.
Veamos un ejemplo cl asico. Sean los axiomas:
Todos los hombres son falibles.
Socrates es un hombre.
Un teorema que l ogicamente 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 m as complicado, tomado de la familia de la gura 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 hecho
derivado no puede ser encontrado explcitamente en nuestro programa sobre la fa-
milia, pero puede derivarse a partir de los hechos y reglas en el programa. Un paso
en 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 Introducci on
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 C omo en-
cuentra Prolog una secuencia de prueba?
Prolog encuentra la secuencia de prueba en orden inverso al que acabamos de
presentar. En lugar de comenzar con los hechos simples especicados en el progra-
ma, Prolog comienza con las metas y, usando reglas, substituye la meta actual por
sub-metas, hasta que estas llegan a resolverse por hechos simples. Dada la pregunta:
?- ancestro(tom,pat).
Prolog tratar a de satisfacer esta meta. Para ello, tratar a de encontrar una cl ausula
en el programa, a partir de la cual la meta dada pueda seguirse l ogicamente. Obvia-
mente, las unicas reglas acerca de la relaci on 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 la
meta planteada. Las reglas representan formas alternativas en las que Prolog pue-
de resolver la meta. Prolog intentar a resolver la pregunta con la primer cl ausula que
aparece en el programa (lneas 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. La
meta original ancestro(tom,pat), es entonces remplazada por la sub-meta
progenitor(tom,pat). El paso consistente en usar una regla para transformar
una meta en una sub-meta, se muestra gr acamente en la gura 1.5.
ancestro(tom, pat)
progenitor(tom, pat)
ancestro(X,Z) :- progenitor(X,Z)
Figura 1.5 El primer paso de la ejecuci on. La meta de arriba es verdadera si la meta de abajo es
verdadera.
1.3 C omo computa Prolog una soluci on? 15
Como no hay una cl ausula en el programa que coincida con la nueva sub-meta
progenitor(tom,pat), la sub-meta falla. Ahora Prolog vuelve atr as (back-
track) para evaluar de forma alternativa su meta original. Ahora intentar a la segun-
da cl ausula del programa (lneas 46). Como antes, las variables de la meta toman
los valores: X/tom y Z/pat. Pero Y no toma valor alguno a un. La meta es rem-
plazada por las sub-metas: progenitor(tom,Y), ancestro(Y,pat). La
ejecuci on de este nuevo paso se muestra en la gura 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 ejecuci on. Dos sub-metas son generadas.
Enfrentado ahora el problema de resolver dos sub-metas, Prolog intentar a satis-
facer la primer sub-meta denida en el programa (Porqu e?). La primer sub-meta se
resuelve f acilmente 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 vuelve
ancestro(bob,pat).
Para satisfacer est a sub-meta, Prolog usar a nuevamente la primer cl ausula del
programa (lneas 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 substituci on de variables: X/bob y Z/pat. La meta es
remplazada por progenitor(bob,pat). Esta meta es satisfecha porque coin-
cide con uno de los hechos del programa. Gr acamente este proceso se muestra en
la gura 1.7.
Con esta explicaci on, estudien la siguiente sesi on en Prolog:
?- trace.
Yes
[trace] ?- ancestro(tom,pat).
Call: (7) ancestro(tom, pat) ? creep
Call: (8) progenitor(tom, pat) ? creep
Fail: (8) progenitor(tom, pat) ? creep
Redo: (7) ancestro(tom, pat) ? creep
Call: (8) progenitor(tom, _L345) ? creep
Exit: (8) progenitor(tom, bob) ? creep
Call: (8) ancestro(bob, pat) ? creep
16 1 Introducci on
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 ejecuci on. Dos sub-metas son generadas.
Call: (9) progenitor(bob, pat) ? creep
Exit: (9) progenitor(bob, pat) ? creep
Exit: (8) ancestro(bob, pat) ? creep
Exit: (7) ancestro(tom, pat) ? creep
Yes
1.4. Organizaci on del curso
Durante el curso revisaremos tanto el fundamento te orico de la programaci on
l ogica, como el uso de Prolog para resolver problemas propios de la inteligencia
articial. La raz on de esto debe ser evidente ya: estamos ante una herramienta que es
a su vez sujeto de estudio de la IA. Este texto de apoyo esta dividido en dos partes:
Fundamentos te oricos y Prolog; sin que esto implique que ambos aspectos ser an
revisados estrictamente en este orden. Hay un tercer componente que se cubrir a con
lecturas complementarias y el desarrollo de un proyecto nal: las aplicaciones de la
programaci on l ogica.
Con respecto a los fundamentos te oricos, iniciaremos con un recordatorio de la
l ogica de primer orden (captulo 2). Posteriormente revisaremos los conceptos de
cl ausula y programa denitivos (captulo 3) y el principio de resoluci on (captulo
4). Continuaremos con el concepto de negaci on (captulo 5) y cerraremos la primera
1.4 Organizaci on del curso 17
parte del curso con algunas consideraciones sobre el corte y la aritm etica (captulo
6).
La segunda parte inicia con una introducci on menos breve sobre el lenguaje
(captulo 7) y continua con una serie de aplicaciones de Prolog a problemas pro-
pios de la IA: b usquedas en espacios de soluciones (captulo 8), sistemas expertos
(captulo 9), inducci on de arboles de decisi on (captulo 10), y planeaci on (captulo
11).
De ser posible, concluiremos el curso con algunos aspectos de meta-programaci on,
programaci on por restricciones y programaci on de agentes.
Parte I
Formalismos
Captulo 2
L ogica de Primer Orden
Resumen En t erminos generales, la Programaci on L ogica concierne al uso de la
l ogica para representar y resolver problemas. M as adelante precisaremos que, en
realidad, usaremos una l ogica restringida a cl ausulas de Horn y la resoluci on como
regla de inferencia [11]. Por ahora, este captulo introduce los conceptos de la l ogica
de primer orden necesarios para abordar los aspectos formales de la Programaci on
L ogica. Para ello, se adopta un enfoque basado en sistemas formales, que nos per-
mita describir el lenguaje, la teora del modelo y la teora de prueba de la l ogica
de primer orden. Con este aparato, se introducen los conceptos de unicaci on y
resoluci on como regla de inferencia.
2.1. Introducci on
Cuando describimos situaciones de nuestro inter es, solemos hacer uso de enun-
ciados declarativos. Decimos que estos enunciados son declarativos en el sentido
ling ustico del t ermino, esto es, se trata de expresiones del lenguaje natural que son
o bien verdaderas, o bien falsas; en contraposici on a los enunciados imperativos
e interrogativos. La l ogica proposicional es declarativa en este sentido, las propo-
siciones representan hechos que se dan o no en la realidad. La l ogica de primer
orden tienen un compromiso ont ologico m as fuerte [17], donde la realidad impli-
ca adem as, objetos y relaciones entre ellos. Consideren los siguientes ejemplos de
enunciado declarativo:
1. Julia es madre y Luis es hijo de Julia.
2. Toda madre ama a sus hijos.
donde el enunciado (1) se reere a los objetos de discurso Julia y Luis, usando pro-
piedades de estos objetos, como ser madre; as como relaciones entre estos, como
hi jo. El enunciado (2) se reere a relaciones que aplican a todas las madres, en tanto
que objetos de discurso. A esto nos referimos cuando hablamos de representaci on
21
22 2 L ogica de Primer Orden
de un problema en el contexto de la Programaci on L ogica, a describir una situaci on
en t erminos de objetos y relaciones entre ellos.
Si se aplican ciertas reglas de razonamiento a tales representaciones, es posible
obtener nuevas conclusiones. Esto concierne a la resoluci on de problemas en Pro-
gramaci on L ogica. Por ejemplo, conociendo (1) y (2) es posible inferir (va Modus
Ponens) que:
3. Julia ama a Luis.
La idea central de la programaci on l ogica es describir los objetos que conforman
un universo de discurso, personas en el ejemplo; as como las relaciones entre
ellos, siguiendo con el ejemplo hi jo y madre; y computar tales descripciones para
obtener conclusiones como (3). Al describir el problema que queremos resolver,
tambi en podemos hacer uso de funciones, relaciones en las cuales s olo hay un valor
dada una entrada. Por ejemplo, madre de puede representarse como una funci on
(todo hijo tiene una sola madre), pero hijo de no. Esto se ilustra en la gr aca 2.1.
juana
luis
maria
pedro
madre de
madre de
juana
luis
maria
pedro
hijo de
hijo de
Figura 2.1 La relaci on madre de es una funci on; mientras que hijo de no lo es.
Como en todo sistema formal, es necesario especicar cuidadosamente la sin-
taxis de tales enunciados declarativos, es decir, que expresiones pertenecen al len-
guaje de la l ogica de primer orden, y cuales no; la sem antica de estas expresiones,
es decir qu e hace que una expresi on sea verdadera o falsa; as como las reglas de
razonamiento que permiten concluir (3) a partir de (1) y (2). Tales cuestiones son el
tema de estudio de la l ogica matem atica.
Esta sesi on del curso introduce los elementos de la l ogica de primer orden, nece-
sarios para abordar la resoluci on como regla de inferencia en l ogica de primer orden
y su uso en el lenguaje de programaci on Prolog. El material aqu presentado est a ba-
sado principalmente en los textos de Michael R. Genesereth y Nils J. Nilsson [5],
captulo 2; y el de Ulf Nilsson y Jan Maluszy nski [12], captulo 1. Una lectura com-
plementaria a estos textos son los captulos 8 y 9 del texto de Stuart Russell y Peter
Norvig [17].
2.3 El lenguaje de la l ogica de primer orden 23
2.2. Sistemas formales
La especicaci on cuidadosa de la sintaxis y sem antica de la l ogica de primer
orden, se consigue deniendo a esta ultima como un sistema formal. Para ello, es
necesario considerar tres aspectos:
Languaje. Este elemento est a asociado a la sintaxis de la l ogica de primer orden
y de los programas l ogicos. El lenguaje de un sistema formal est a dado por un
conjunto de smbolos conocido como alfabeto y una serie de reglas de cons-
trucci on o sint acticas. Una expresi on es cualquier secuencia de smbolos perte-
necientes al alfabeto (primarios). Cualquier expresi on es, o no es, una f ormula
bien formada (fbf). Las f ormulas bien formadas son las expresiones que pueden
formarse con los smbolos del alfabeto a partir de las reglas de construcci on y
por tanto, pertenecen al languaje de la l ogica de primer orden.
Teora de modelo. Este elemento est a asociado a la sem antica de la l ogica de
primer orden. La teora del modelo establece la interpretaci on de las fbfs en un
sistema formal. Su funci on es relacionar las fbfs con alguna representaci on sim-
plicada de la realidad que nos interesa, para establecer cuando una fbf es falsa y
cuando verdadera. Esta versi on de realidad corresponde a lo que informalmente
llamamos modelo. Sin embargo, en l ogica, el signicado de modelo est a nti-
mamente relacionado con el lenguaje del sistema formal: si la interpretaci on M
hace que la fbf
1
sea verdadera, se dice que M es un modelo de o que M
satisface , y se escribe M [= . Una fbf es v alida si toda interpretaci on es un
modelo para ella.
Teora de prueba. Este elemento est a asociado con el razonamiento deductivo.
La teora de la prueba tiene como objetivo hacer de cada enunciado matem ati-
co una f ormula demostrable y rigurosamente deducible. Para ello, la actividad
matem atica debera quedar reducida a la manipulaci on de smbolos y sucesio-
nes de smbolos regulada por un conjunto de instrucciones dadas al respecto. La
construcci on de tal teora implica, adem as del lenguaje del sistema formal, un
subconjunto de fbf que tendr an el papel axiomas en el sistema, y un conjunto
de reglas de inferencia que regulen diversas operaciones sobre los axiomas. Las
fbf obtenidas mediante la aplicaci on sucesiva de las reglas de inferencia a partir
de los axiomas se conocen como teoremas del sistema.
2.3. El lenguaje de la l ogica de primer orden
B asicamente, la l ogica de primer orden, tambi en conocida como c alculo de pre-
dicados, introduce un conjunto de smbolos que nos permiten expresarnos acerca
1
El smbolo se usa aqu como una variable meta-l ogica, es decir, una variable que tiene como
referente el lenguaje del sistema formal mismo, y por lo tanto, no forma parte del lenguaje del
sistema en si. Se usaran letras griegas como variables meta-l ogicas.
24 2 L ogica 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 de
discurso pueden ser objetos concretos, ej., un libro, un robot, etc; abstractos, ej.,
n umeros; e incluso, cticios, ej., unicornios, etc. Un objeto es algo sobre lo cual
queremos expresarnos. Como ejemplo, consideren el multi citado mundo de los
bloques [5] que se muestra en la gura 2.2. El universo de discurso para tal esce-
nario es el conjunto que incluye los cinco bloques, la el brazo rob otico y la mesa:
a, b, c, d, e, brazo, mesa.
Mesa
B
A
C
D
E
Brazo robtico
Figura 2.2 El mundo de los bloques, usado para ejemplicar el c alculo de predicados.
Una funci on es un tipo especial de relaci on entre los objetos del dominio de
discurso. Este tipo de relaciones mapea un conjunto de objetos de entrada a un
objeto unico de salida. Por ejemplo, es posible denir la funci on parcial sombrero
que mapea un bloque al bloque que se encuentra encima de el, si tal bloque existe.
Las parejas correspondientes a esta funci on parcial, dado el escenario mostrado en la
gura 2.2 son: (b, a), (c, d), (d, e). El conjunto de todas las funciones consideradas
en la conceptualizaci on del mundo se conoce como base funcional.
Un segundo tipo de relaci on sobre los objetos del dominio de discurso son los
predicados. Diferentes predicados pueden denirse en el mundo de los bloques, ej.,
el predicado sobre que se cumple para dos bloques, si y s olo si el primero est a inme-
diatamente encima del segundo. Para la escena mostrada en la gura 2.2, sobre/2 se
dene por los pares (a, b), (d, c), (e, d). Otro predicado puede ser libre/1, que se
cumple para un bloque si y s olo si este no tiene ning un bloque encima. Este predica-
do tiene los siguientes elementos a, e. El conjunto de todos los predicados usados
en la conceptuaci on se conoce como base relacional.
Para universos de discurso nitos, existe un lmite superior en el n umero posible
de predicados n-arios que pueden ser denidos. Para un universo de discurso de
cardinalidad b (cardinalidad es el n umero de elementos de un conjunto), existen b
n
distintas n-tuplas. Cualquier predicado n-ario es un subconjunto de estas b
n
tuplas.
Por lo tanto, un predicado n-ario debe corresponder a uno de m aximo 2
(b
n
)
conjuntos
posibles.
Adem as de las funciones y predicados, la exibilidad de la l ogica de primer
orden resulta del uso de variables y cuanticadores. Las variables, cuyos valores
2.3 El lenguaje de la l ogica de primer orden 25
son objetos del universo de discurso, se suelen representar por cualquier secuencia
de caracteres que inicie con una may uscula. El cuanticador para todo () nos
permite expresar hechos acerca de todos los objetos en el universo del discurso, sin
necesidad de enumerarlos. Por ejemplo, toda madre . . . El cuanticador existe
() nos permite expresar la existencia de un objeto en el universo de discurso con
cierta propiedad en partcular, por ejemplo, X libre(X) enLaMesa(X) expresa
que hay al menos un objeto que no tiene bloques sobre el y aue se encuentra sobre
la mesa.
2.3.1. Sintaxis de la l ogica de primer orden
Los smbolos primarios de la l ogica de primer orden se obtienen al considerar un
conjunto numerable de variables, smbolos de predicado y smbolos de funciones.
Se asume que los miembros del conjunto Var toman valores en el universo de dis-
curso. Asociado a cada predicado y funci on, hay un n umero natural conocido como
su aridad, que expresa su n umero de argumentos. Los predicados de aridad 0 se
asumen como variables proposicionales. Las funciones de aridad 0 se asumen como
constantes. Considerando los operadores l ogicos y los cuanticadores, tenemos que
los smbolos primarios o alfabeto del lenguaje de la l ogica de primer orden son los
que se muestran en la tabla 2.1
Conjunto de constantes: Const
Conjunto de variables: Var
Conjunto de predicados: Pred
Conjunto de funciones: Func
Operadores monarios: (negaci on)
Operadores binarios: (disyunci on)
Cuanticadores: (cuanticador universal)
Par entesis: (, )
Cuadro 2.1 Alfabeto del lenguaje de la l ogica de primer orden.
El lenguaje del c alculo de predicados L
FOL
se especica recursivamente como
sigue: Primero denimos un conjunto de t erminos del lenguaje Term, como la uni on
de constantes y variables Const Var; as como la aplicaci on de las funciones en
Func a una secuencia de t erminos, cuyo tama no queda determinado por la aridad de
la funci on. Recuerden que las funciones de aridad cero representan constantes. Las
siguientes reglas sint acticas expresan que los t erminos 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 L ogica de Primer Orden
Al igual que en el caso de las funciones, la sintaxis de los predicados involucra la
aridad del predicado y que sus argumentos sean a su vez t erminos. Recuerden que
los predicados de aridad cero se interpretan como variables proposicionales:
Sintaxis 4 Si /n Pred, entonces (
1
, . . . ,
n
) L
FOL
ssi
i=1,...,n
Term.
La sintaxis de la negaci on y la disyunci on se denen como:
Sintaxis 5 Si L
FOL
, entonces L
FOL
Sintaxis 6 Si L
FOL
y L
FOL
, entonces ( ) L
FOL
La sintaxis del cuanticador universal es como sigue:
Sintaxis 7 Si L
FOL
y X Vars es una variable que ocurre en , entonces
X L
FOL
Las deniciones de la conjunci on, la implicaci on material, la equivalencia mate-
rial, verdadero y falso, son como en la l ogica proposicional:
Denici on 1 (conjunci on) ( ) =
de f
( );
Denici on 2 (implicaci on material) ( ) =
de f
( );
Denici on 3 (equivalencia material) ( ) =
de f
(( ) ( ));
Denici on 4 (falso) f =
de f
;
Denici on 5 (verdadero) t =
de f
f
La denici on del cuanticador existencial es la siguiente:
Denici on 6 (cuanticador existencial) X =
de f
(X )
Siendo estrictos, el cuanticador propiamente dicho, es el smbolo de cuantica-
dor seguido de una variable, puesto que X y Y tienen signicados diferentes. En
una fbf de la forma X , se dice que la fbf est a en el alcance del cuanticador
X. En tal caso, se dice que la ocurrencia de X en est a acotada, en caso contrario
se dice que la ocurrencia de la variable es libre. Por ejemplo, en X sobre(X,Y)
la variable X est a acotada, mientras que Y est a libre. Un t ermino sin variables se
conoce como t ermino de base.
2.4. La sem antica de la l ogica de primer orden
Antes de introducir las deniciones formales de la sem antica de la l ogica de pri-
mer orden, consideremos algunas expresiones posibles en est a l ogica, usando como
ejemplo el mundo de los bloques (Figura 2.2). Si queremos expresar que al menos
alg un bloque no tiene nada encima, podemos usar los predicados bloque/1 y libre/1
en la siguiente expresi on: X bloque(X) libre(X). Esta fbf expresa que existe un
2.4 La sem antica de la l ogica de primer orden 27
X tal que X es un bloque y X est a libre (no tiene otro bloque encima). Observen que
cuando usamos cuanticadores, siempre tenemos en mente el universo de discurso
en cuesti on o dominio. El dominio puede especicarse en t ermino 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 expresi on equivalente a X bloque(X) libre(X), usando la
fbf X libre(x), si especicamos que libre/1 tiene como dominio B.
Una interpretaci on del predicado libre/1 es un subconjunto de B tal que si un
bloque est a libre, pertenece a este subconjunto. Para un predicado de aridad dos,
como sobre/2 cuyo dominio son los bloques BB, podemos decir que su interpre-
taci on es un subconjunto de BB. En general, para un predicado de aridad n, su
interpretaci on es un subconjunto en D
n
.
2.4.1. Teora de modelo de la l ogica de primer orden
Para obtener un modelo para el lenguaje L
FOL
formamos el par M = D,V),
donde D es el universo de discurso, ej. cualquier colecci on de objetos sobre la que
queremos expresarnos, y la interpretaci on V es una funci on, tal que:
Para cualquier predicado de aridad n, V() regresa las n-tuplas que correspon-
den a la interpretaci on del predicado. En el ejemplo, siguiendo nuevamente la
gura 2.2, consideren el predicado sobre/2. Su interpretaci on es un subconjunto
de D
2
= DD. Para la escena mostrada, V(sobre) =(a, b), (e, d), (d, c).
Para una constante, la funci on V regresa la misma constante, ej. V(a) = a.
Algunas veces la expresi on V() se abrevia
V
. Una posible interpretaci on V
para la escena del mundo de los bloques mostrada en al gura 2.2, es:
a
V
= a
b
V
= b
c
V
= c
d
V
= d
e
V
= e
sobre
V
= (a, b), (e, d), (d, c)
enLaMesa
V
= b, c
libre
V
= a, e
porEncima
V
= (a, b), (e, d), (e, c), (d, c)
Todo esto puede especicarse formalmente con la siguiente denici on:
28 2 L ogica de Primer Orden
Denici on 7 (Interpretaci on) Una interpretaci on V, con respecto a un dominio de
discurso D, es una funci on que satisface las siguientes propiedades: i) Si Const,
Entonces V() = ; ii) Si /n Pred, Entonces V() D
n
.
Observen que las variables no est an incluidas en la interpretaci on. Interpretar las
variables de manera independiente a otros smbolos en el lenguaje, es una pr actica
aceptada. Decimos que U es una asignaci on de variables basada en el modelo
M = D,V) si para todo Var, U() Term. Por ejemplo, en el mundo de los
bloques X
U
=a, es una asignaci on de variables. Esta abreviatura a veces se expande
como U =Xa y se conoce como substituci on.
Una interpretaci on V y una asignaci on de variables U pueden combinarse en una
asignaci on conjunta T
VU
que aplica a los t erminos de primer orden en general. La
asignaci on de t erminos T dadas la interpretaci on V y la asignaci on de variables
U, es un mapeo de t erminos a objetos del universo de discurso que se dene como
sigue:
Sem antica 1 Si Const, entonces T
VU
() =V().
Sem antica 2 Si Var, entonces T
VU
() =U().
Sem antica 3 Si Term y es de la forma (
1
, . . . ,
n
); y V() = g; y T
VU
(
i
) =
x
i
, entonces T
VU
((
1
, . . . ,
n
)) = g(x
1
, . . . , x
n
).
El concepto de satisfacci on guarda una relaci on importante con las interpre-
taciones y las asignaciones. Por convenci on, el hecho de que el enunciado sea
satisfecho bajo una interpretaci on V y una asignaci on U, se escribe:
[=
V
[U]
Entonces podemos escribir M [= V
U
() para expresar que es verdadera en
el modelo M = D,V) cuando las variables en toman valores de acuerdo a la
asignaci on U. Por ejemplo, M [=V
U
(sobre(X, b)) si Xa U.
En realidad, la noci on de satisfacci on vara dependiendo de la clase del enunciado
. As tenemos que una interpretaci on V y una asignaci on de variables U satisfacen
una ecuaci on, si y s olo si la correspondiente asignaci on de t erminos T
VU
mapea los
t erminos igualados a un mismo objeto. Cuando este es el caso, los t erminos se dicen
correferenciados:
Sem antica 4 M [=
V
( = )[U] ssi T
VU
() = T
VU
().
Para el caso de un enunciado at omico que no sea una ecuaci on, la satisfacci on se
cumple si y s olo si la tupla formada por los objetos designados por los t erminos en
el enunciado, es un elemento de la relaci on designada por la relaci on constante:
Sem antica 5 M [=
V
(
1
, . . . ,
n
)[U] ssi (T
VU
(
1
), . . . , T
VU
(
n
)) V() .
Consideren como ejemplo la interpretaci on V denida 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 l ogica de primer orden 29
el par ordenado (a, b) es miembro del conjunto que interpreta la relaci on 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 intepretaci on.
Evidentemente:
Sem antica 6 M [=
V
()[U] ssi M ,[=
V
[U].
y:
Sem antica 7 M [=
V
( )[U] ssi M [=
V
[U] o M [= [U].
Un enunciado cuanticado universalmente se satisface, si y s olo si el enunciado
bajo el alcance del cuanticador, se satisface para todas las asignaciones posibles de
la variable cuanticada. Un enunciado cuanticado existencialmente se satisface,
si y s olo si el enunciado bajo el alcance del cuanticador es satisfecho por una
asignaci on de variables.
Sem antica 8 M[=
V
X [U], ssi para toda en el universo de discurso, es el caso
que M [=
V
[U
/
], donde U
/
(X) = y U
/
() =U() para toda ,= X.
Debido a la ultima condici on en esta regla, se dice que U
/
es una asignaci on X-
alternativa a U. La regla sem antica tambi en puede leerse como: M [=
V
X [U] si
para toda asignaci on de variables X-alternativa U
/
, M [=
V
[U
/
].
Si una interpretaci on V sasface a un enunciado para toda asignaci on de varia-
bles, se dice que V es un modelo de . Un enunciado se dice satisfacible si existe
alguna interpretaci on y asignaci on de variables que lo satisfaga. De otra forma, se
dice que el enunciado es insatisfacible. Una fbf es v alida si y s olo si se satisface
en toda intepretaci on y asignaci on de variables. Las fbf v alidas lo son en virtud de
su estructura l ogica, por lo que no proveen informaci on acerca del dominio descrito.
Por ejemplo p(X) p(X) es una fbf v alida.
2.5. Inferencia en la l ogica de primer orden
Volvamos al ejemplo de la introducci on:
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 L ogica 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 L ogica de Primer Orden
3. ama( julia, luis)
Una vez que hemos formalizado nuestros enunciados, el proceso de inferencia
puede verse como un proceso de manipulaci on de fbf, donde a partir de formulas
como (1) y (2), llamadas premisas, se produce la nueva fbf (3) llamada conclusi on.
Estas manipulaciones se pueden formalizar mediante reglas de inferencia. Entre
las reglas de inferencia de la l ogica de primer orden encontramos:
Modus Ponens. O regla de eliminaci on de la implicaci on. Esta regla dice que
siempre que las fbfs de la forma y pertenezcan a las premisas o sean
concluidas a partir de ellas, podemos inferir :

(E)
Eliminaci on de cuanticador universal. Esta regla expresa que siempre que
una fbf de la forma X pertenezca a las premisas o sea concluida a partir de
ellas, una nueva fbf puede ser concluida al remplazar todas las ocurrencias libres
de X en por alg un t ermino t que es libre con respecto a X (todas las variables
en t quedan libres al substituir X por t. La regla se presenta como sigue:
X(X)
(t)
(E)
Introducci on de conjunci on. Cuando las fbf y pertenezcan a las premisas
o sean concluidas a partir de ellas, podemos inferir :


(I)
La correctez de estas reglas puede ser demostrada directamente a partir de la
denici on de la sem antica de las fbf en L
FOL
. El uso de las reglas de inferencia
puede ilustrarse con el ejemplo formalizado. Las premisas son:
1. XYmadre(X) hi jo de(Y, X) ama(X,Y)
2. madre( julia) hi jo de(luis, julia)
Al aplicar la eliminaci on de cuanticador 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 conclusi on (5) ha sido obtenida rigurosamente, aplicando las reglas de infe-
rencia. Esto ilustra el concepto de derivaci on. El hecho de que una formula sea
derivable a partir de un conjunto de f ormulas se escribe . Si las reglas de
inferencia son consistentes (sound), siempre que entonces [= . Esto es,
si nuestra l ogica es consistente, cualquier fbf que puede ser derivada de otra fbf, es
tambien una consecuencia l ogica de esta ultima.
Denici on 8 (Consistencia y completitud) Un conjunto de reglas de inferencia se
dice consistente si, para todo conjunto de fbf cerradas (sin ocurrencia de variables
libres) y cada fbf cerrada , siempre que se tiene que [= . Las reglas
de inferencia se dicen completas si siempre que [= .
2.6. Substituciones
Formalmente, como ya se mencion o, una substituci on es un mapeo de las varia-
bles del lenguaje a los t erminos del mismo:
Denici on 9 (Substituci on) Una substituci on es un conjunto nito de pares de la
forma X
1
/t
1
, . . . , X
n
/t
n
donde cada t
n
es un t ermino y cada X
n
es una variable, tal
que X
i
,=t
i
y X
i
,= X
j
si i ,= j. La substituci on vaca se denota por .
Asumamos que Dom(X
1
/t
1
, . . . , X
n
/t
n
) denota al conjunto X
1
, . . . , X
n
, tam-
bi en conocido como dominio; y Range(X
1
/t
1
, . . . , X
n
/t
n
) denota al conjunto
t
1
, . . . , t
n
, tambi en conocido como rango. Entonces la regla anterior expresa que
las variables en el dominio de una substituci on son unicas y no incluyen la substitu-
ci on de la variable por si misma.
La aplicaci on X de la substituci on a la variable X se dene como:
X =

t Si X/t
X En otro caso
observen que para las variables no incluidas en Dom(), aparece como la funci on
identidad. Es importante extener el concepto de substituci on a las fbf:
Denici on 10 (Aplicaci on) Sea una substituci on X
1
/t
1
, . . . , X
n
/t
n
y una fbf.
La aplicaci on es la fbf obtenida al remplazar simult aneamente t
i
por toda ocu-
rrencia de X
i
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 L ogica de Primer Orden
Denici on 11 (Composici on) Sean y dos substituciones de la forma:
=X
1
/s
1
, . . . X
m
/s
m
=Y
1
/t
1
, . . .Y
n
/t
n

La composici on se obtiene a partir del conjunto:


X
1
/s
1
, . . . X
m
/s
m
,Y
1
/t
1
, . . .Y
n
/t
n

de la manera siguiente: eliminar todas las X


i
/s
i
para las que X
i
= s
i
(1 i m)
y eliminar tambi en aquellas Y
j
/t
j
para las cuales Y
j
Dom() (1 j n).
Por ejemplo:
X/ f (Z),Y/WX/a, Z/a,W/Y =X/ f (a), Z/a,W/Y
Denici on 12 (Substituci on idempotente) Una substituci on se dice idempoten-
te si = .
Se puede probar que una substituci on es idempotente si y s olo si Dom()
Range() = / 0, es decir si el dominio y el rango de la substituci on son disjuntos.
Otras propiedades de las substituciones son:
Denici on 13 (Propiedades de las substituciones) Sean , y substituciones y
sea F una fbf. Entonces:
E() = (E)
() = ()
= =
Observen que, aunque las substituciones son asociativas, estas no son conmuta-
tivas.
Las substituciones son importantes para denir una regla de inferencia de espe-
cial relevancia para nosotros, conocida como la regla de resoluci on. Con las de-
niciones introducidas en este captulo podemos abordar el tema de los programas
l ogicos denitivos.
Captulo 3
Cl ausulas y Programas Denitivos
Resumen La idea central de la programaci on l ogica es usar la computadora para
obtener conclusiones a partir de descripciones declarativas, como las introducidas
en el captulo anterior. Estas descripciones, llamadas programas l ogicos, consisten
en un conjunto nito de f ormulas bien formadas (fbfs) de la l ogica de primer or-
den. La idea central tiene sus races en la demostraci on autom atica de teoremas,
sin embargo, pasar de la demostraci on autom atica de teoremas experimental a la
programaci on l ogica aplicada, requiere mejoras con respecto a la eciencia del sis-
tema propuesto. Tales mejoras se logran imponiendo restricciones sobre las fbfs del
lenguaje utilizado, de forma que podamos usar una poderosa regla de inferencia
conocida como principio de resoluci on-SLD. Este captulo introduce el concepto
de cl ausula y programa l ogico denitivos. M as adelante se introducir a el concepto
menos restrictivo de programas generales, pero el paso por los programas deniti-
vos es necesario para comprender las bases te oricas de Prolog. El aparato t ecnico
aqu presentado se basa principalmente en el texto de Nilsson et al. [12].
3.1. Cl ausulas denitivas
Consideremos una clase especial de enunciados declarativos del lenguaje natural,
que utilizamos para describir hechos y reglas positivos. Un enunciado de este tipo
puede especicar:
Que una relaci on se mantiene entre elementos del universo de discurso (hechos).
Que una relaci on se mantiene entre elementos del universo de discurso, si otras
relaciones 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 Cl ausulas y Programas Denitivos
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 con
las fbf at omicas 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 de
Y si existe alguna Z tal que Z es hijo de Y y X es hijo de Z. En l ogica de primer
orden, esto se escribira (observen que la implicaci on est a invertida () a la usanza
de Prolog):
XY(nieto de(X,Y) Z(hi jo de(Z,Y) hi jo de(X, Z)))
Usando las equivalencias de la l ogica de primer orden (en particular
; y la equivalencia entre cuanticadores X X), esta fbf puede
escribirse de diversas maneras:
XY(nieto de(X,Y) Z(hi jo de(Z,Y) hi jo de(X, Z)))
XY(nieto de(X,Y) Z(hi jo de(Z,Y) hi jo de(X, Z)))
XYZ(nieto de(X,Y) (hi jo de(Z,Y) hi jo de(X, Z)))
XYZ(nieto de(X,Y) (hi jo de(Z,Y) hi jo de(X, Z)))
Observen que estas fbf est an cerradas (no contienen variables fuera del alcance
de los cuanticadores) bajo el cuanticador universal. Adem as, la regla tiene la
siguiente estructura:

0

1

n
(n 0)
Los bloques de construcci on
i
de estas fbf, se conocen como literales.
Denici on 14 (Literal) Una literal es un atomo o la negaci on de un atomo. Una
literal positiva es un atomo. Una literal negativa es la negaci on de un atomo.
Un ejemplo de literal positiva es hi jo de( juan, marcos). Un ejemplo de literal
negativa 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 literal
negativa.
Denici on 15 (Cl ausula) Una cl ausula es una disyunci on nita de cero o m as li-
terales.
3.2 Programas denitivos y Metas 35
Denici on 16 (Cl ausula denitiva) Una cl ausula se dice denitiva, si tiene exac-
tamente una literal positiva.

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 denici on que la literal
0
ser a una literal positiva, por
lo que la cl ausula denitiva toma la forma de un hecho. El cuerpo vaco puede
representarse por el conectivo nulo , que es verdadero en toda interpretaci on (por
simetra tambi en se asume un conectivo nulo 2, que es falso en toda interpretaci on).
Si n >0 la cl ausula denitiva toma la forma de una regla, donde
0
se conoce como
cabeza de la regla; y la conjunci on
1

n
se conoce como cuerpo de la regla.
El ejemplo de la relaci on nieto de/2 y la regla que lo dene, muestra que las
cl ausulas denitivas usan una forma restringida de cuanticaci on existencial, las
variables que ocurren s olo en el cuerpo de la cl ausula est an cuanticadas existen-
cialmente en el cuerpo de la cl ausula (el mismo ejemplo muestra que esto equivale
a que tales variables est en cuanticadas universalmente sobre toda la fbf).
3.2. Programas denitivos y Metas
La denici on de programa denitivo es ahora directa:
Denici on 17 (Programa denitivo) Un programa denitivo es un conjunto nito
de cl ausulas denitivas.
Si una cl ausula tiene s olo literales negativas, estamos hablando de una meta de-
nitiva:
Denici on 18 (Meta denitiva) Una cl ausula sin literales positivas es una meta
denitiva.

1

n
(n 1)
Denici on 19 (Cl ausula de Horn) Una cl ausula de Horn es una cl ausula denitva
o una meta denitiva.
Observen que a partir de estas deniciones, la cl ausula vaca 2
1
es una meta
denitiva y, por lo tanto, una cl ausula de Horn.
Adoptar a las cl ausulas de Horn para abordar los programas y metas denitivos,
constituye una restricci on. Por ejemplo, no podemos expresar p(a)p(b). Esta per-
dida en expresividad se ve compensada por la ganancia en tratabilidad. Debido a
su estructura restringida, las cl ausulas de Horn son m as f aciles de manipular que
1
En realidad, la cl ausula vaca tiene la forma 2 que equivale a 2.
36 3 Cl ausulas y Programas Denitivos
las cl ausulas generales. En particular, esto es cierto para la deducci on basada en
resoluci on-SLD, que resulta completa para las cl ausulas de Horn.
El signicado l ogico de las metas puede explicarse haci endo referencia a la fbf
equivalente cuanticada universalmente:
X
1
. . . X
m
(
1

n
)
donde las X
i
son todas variables que ocurren en la meta. Esto es equivalente a:
X
1
. . . X
m
(
1

n
)
Esto puede verse como una pregunta existencial que el sistema tratar a de negar,
mediante la construcci on de un contra ejemplo. Esto es, el sistema tratar a de encon-
trar t erminos t
i
. . . t
m
tales que las fbf obtenidas a partir de
1

m
al remplazar
la variable X
i
por t
i
(1 i m) son verdaderas en todo modelo del programa. Es
decir, el sistema construir a una consecuencia l ogica del programa que es un caso de
la conjunci on de todas las submetas de la meta.
Al dar una meta denitiva, el usuario selecciona un conjunto de conclusiones
a ser construdas. Este conjunto puede ser nito o innito. El problema de como
construir tal conjunto lo veremos al tratar la resoluci on SLD.
Ejemplo 1 Tomando en cuenta los hechos y reglas sobre una familia presentados
al principio de esta sesi on, el usuario podra estar interesado en las siguientes
consultas (se muestra tambi en la meta denitiva correspondiente):
Consulta Meta denitiva
Es Ana hija de Antonio? hi jo(ana, antonio)
Qui en es nieto de Ana? nieto(X, ana)
De qui en es nieto Antonio? nieto(antonio, X)
Qui en es nieto de qui en? nieto(X,Y)
Las respuestas obtenidas seran:
Puesto que la primer meta no contiene variables, la respuesta sera Si (Yes).
Puesto que el programa no contiene informaci on sobre los nietos de Ana, la
respueta a la segunda consulta es No (o ninguno).
Puesto que Antonio es nieto de Marcos, la respuesta obtenida sera X = marcos.
La consulta nal obtiene tres respuestas: X =antonio Y =alicia, X =alicia Y =
marcos, X = ana Y = juan.
Es posible hacer consultas m as elaboradas como Hay alguna persona cuyos
nietos son Antonio y Alicia?
nieto(antonio, X) nieto(alicia, X)
cuya respuesta esperada es X = marcos.
3.3 El modelo mnimo de Herbrand 37
3.3. El modelo mnimo de Herbrand
Los programas denitivos solo pueden expresar conocimiento positivo, tanto los
hechos, como las reglas, nos dicen que elementos de una estructura est an en una
relaci on, pero no nos dicen cuales no. Por lo tanto, al usar el lenguaje de los pro-
gramas denitivos, no es posible construir descripciones contradictorias, es decir,
conjuntos de fbf no satisfacibles. En otras palabras, todo programa denitivo tiene
un modelo. Recordemos que una interpretaci on que hace verdadera una fbf es su
modelo:
Denici on 20 (Modelo) Sea una fbf y V una interpretaci on. V es un modelo de
si [=
V
.
Denici on 21 Sea un conjunto nito de fbf y V una interpretaci on. V es un mo-
delo de si [=
V
para toda .
Existe una clase interesante de interpretaciones, llamadas de Herbrand en honor
del franc es Jacques Herbrand. En esta secci on estudiaremos algunas propiedades
de los modelos de Herbrand que explican porque son utiles y necesarios en el con-
texto de la programaci on l ogica. Adem as, los modelos de Herbrand proveen una
sem antica natural para los programas denitivos.
Comenzaremos deniendo el Universo y la Base de Herbrand:
Denici on 22 (Universo y Base de Herbrand) Sea L un alfabeto de primer orden
que contiene al menos un smbolo de constante ([Const[ 1). El Universo de Her-
brand U
L
es el conjunto de todos los t erminos formados con las constantes y func-
tores de L. La Base de Herbrand B
L
es el conjunto de todos los atomos que pueden
formarse con los predicados y los t erminos en el Universo de Herbrand U
L
.
El universo y la base de Herbrand se denen normalmente para un programa
dado. En ese caso, se asume que el alfabeto L consiste exactamente de aquellos
smbolos que aparecen en el programa. Se asume tambi en que el programa tiene al
menos una constante (de otra forma el dominio estara vaco).
Ejemplo 2 Consideren el siguiente programa denitivo
=impar(s(0)), impar(s(s(X))) impar(X)
Si restringimos el lenguaje L a los smbolos que aparecen en este programa deni-
tivo, tenemos que el universo de Herbrand es:
U
L
=0, s(0), s(s(0)), s(s(s(0))), . . .
Puesto que el programa s olo incluye al predicado impar, la base de Herbrand
se dene como:
B
L
=impar(0), impar(s(0)), impar(s(s(0))), . . .
38 3 Cl ausulas y Programas Denitivos
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 smbolos en . El Universo de
Herbrand U
L
es el conjunto innito:
U
L
=a, b, f (a), f (b), f ( f (a)), f ( f (b)), . . .
Y la base de Herbrand es:
B
L
=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 intrepretaci on de Herbrand es que se toma el conjunto
de todos los t erminos sin variables (U
L
) como el dominio de la interpretaci on. El
mapeo de los t erminos a los elementos del dominio es tal que, cada t ermino sin
variables es mapeado al elementos correspondiente en el dominio. De forma que
cada t ermino sin variables en el lenguaje, se reere a si mismo en el dominio.
Denici on 23 (Interpretaci on de Herbrand) Sea L un lenguaje de primer orden.
V es una interpretaci on de Herbrand de L si y s olo si:
El dominio de V es U
L
.
Para cada constance c L, V(c) = c.
Para cada functor f /n L, se tiene un mapeo V( f ) de U
n
L
a U
L
denido por
V( f )(t
1
, . . . , t
n
) = f (t
1
, . . . , t
n
).
Para cada predicado p/n L, V(p) U
n
L
.
La funci on J
f
mapea t
1
, . . . , t
n
al t ermino f (t
1
, . . . , t
n
) en el Universo de Herbrand
U
L
.
Denici on 24 (modelo de Herbrand) Sea L un lenguaje de primer orden, un
conjunto de fbf en L, y V una interpretaci on de Herbrand de L. Si V es un modelo
de , se dice que es un modelo de Herbrand de .
Observen que una interpretaci on de Herbrand V est a completamente especicada
por el conjunto de todas las B
L
que son verdaderas bajo V. Podemos por lo
tanto representar cualquier interpretaci on de Herbrand economicamente como un
subconjunto (denotado por tambi en V) de B
L
. En otras palabras, una interpretaci on
de Herbrand, es un subconjunto de la Base de Herbrand.
Ejemplo 4 Consideren el programa en el ejemplo 2. Una posible interpretaci on
de este programa es impar
V
= s(0)), s(s(s(0)))). Una intepretaci on de Her-
brand se puede especicar mediante una familia de tales relaciones (una por cada
smbolo de predicado).
Ejemplo 5 Consideren ahora algunas interpretaciones de Herbrand de tal y co-
mo se denio en el ejemplo 3:
3.3 El modelo mnimo de Herbrand 39
V
1
= p(a), p(b), q(a, b, ), q(b, b)
V
2
= p(a), q(a, a), q(a, f (b))
V
3
= p( f ( f (a))), p(b), q(a, a), q(a, f (b))
V
4
= p(a), p(b), q(a, a), q(b, b), q(a, f (b))
V
2
y V
4
son modelos de Herbrand de =p(a), q(a, f (b), q(X, X) p(X). V
1
y V
3
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 pragm atica: para poder determinar si una interpretaci on de Her-
brand V es un modelo de una fbf cuanticada universalmente , es suciente ve-
ricar si es verdadera en V, para todas las asignaciones posibles de las variables
de .
La segunda raz on para considerar las interpretaciones de Herbrand es m as te ori-
ca. Para el lenguaje restringido de cl ausulas denitivas, si queremos vericar que
una fbf at omica es consecuencia de un programa denitivo basta con vericar
que todo modelo de Herbrand de es tambi en un modelo de Herbrand de .
Para entrar en detalles, es necesaria la siguiente proposici on:
Proposici on 1 Sea un conjunto de cl ausulas en un lenguaje de primer orden L.
Entonces tiene un modelo, si y s olo si tiene un modelo de Herbrand.
La prueba de esta proposici on es como sigue: Supongamos que tiene un mode-
lo M. Si denimos una interpretaci on V de Herbrand tal que V((t
1
, . . . , t
n
)) dene
s olo aquellas extensiones de que son v alidas en M), tenemos que V es un modelo
de Herbrand de . Dicho de otra forma, un modelo de Herbrand, es un modelo.
Observen que esta proposici on es verdadera s olo para conjuntos de cl ausulas.
Por ejemplo, consideren a L como un lenguaje de primer orden formado por los
smbolos en = Xp(X), p(a). Claramente tiene un modelo, pero este no
es un modelo de Herbrand. La raz on es el dominio de la interpretaci on. En una
interpretaci on de Herbrand, el dominio es U
L
= a, y necesitamos dos constantes
al menos en U
L
para construir un modelo de .
Hemos mencionado la importancia del concepto de implicaci on l ogica (o con-
secuencia l ogica). Es com un que a partir de un conjunto y una fbf , queremos
encontrar si [= . Esto es cierto si cada modelo de es tambi en un modelo de .
Lo interesante viene ahora:
Proposici on 2 Sea un conjunto de fbf y una fbf. Sea S = . Entonces
[= si y s olo si S no tiene modelo de Herbrand.
40 3 Cl ausulas y Programas Denitivos
La prueba de esta proposici on es como sigue: [= si y s olo si no
es satisfacible. Esto es, si S es no satisfacible, lo cual es cierto s olo si S no tiene
modelos y por lo tanto, no tiene modelo de Herbrand.
Lo que esta proposici on nos dice es que si queremos probar que [= , s olo
debemos considerar modelos de Herbrand de la forma S. Aunque el n umero de in-
terpretaciones de Herbrand es normalmente innito, la tarea de investigar interpre-
taciones de Herbrand es m as tratable que la de investigar cualquier interpretaci on
arbitraria, puesto que nos restringimos a un dominio unico denitivo por el Univer-
so de Herbrand U
L
.
Observen que la base de Herbrand de un programa denitivo es siempre un
modelo de Herbrand del programa. Sin embargo, es un modelo nada interesante,
esto es, cada predicado n-ario en el programa es interpretado como la relaci on n-
aria completa sobre el dominio de los terminos cerrados. Qu e es lo que hace a un
modelo de programa interesante? En lo que sigue demostraremos la existencia de
un modelo mnimo unico, llamado el modelo mnimo de Herbrand de un progra-
ma denitivo. Luego mostraremos que este modelo contiene toda la informaci on
positiva presente en el programa.
Los modelos de Herbrand de un programa denitivo son subconjuntos de su base
de Herbrand. Por lo tanto, la inclusi on en conjuntos establece un orden natural en
tales modelos. Para poder demostrar la existencia de modelos mnimos con respecto
a la inclusi on es suciente demostrar que la intersecci on de todos los modelos de
Herbrand es tambi en un modelo de Herbrand.
Teorema 1 (Intersecci on de modelos) Sea M una familia no vaca de modelos de
Herbrand de un programa denitivo . Entonces la intersecci on V =

M es un
modelo de Herbrand de .
La demostraci on es como sigue: Supongamos que V no es un modelo de . Por
lo tanto existe una una cl ausula 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 interpretaci on en la familia M. M as impor-
tante a un, debe existir un modelo V
i
M tal que
0
,V
i
, de forma que la cl ausula

0

1
, . . . ,
n
(n 0) no es verdadera en ese V
i
. Por lo tanto V
i
no es un modelo
del programa , lo que contradice nuestro supuesto.
Al tomar la intersecci on de todos los modelos de Herbrand (se sabe que todo
programa denitivo tiene un modelo de Herbrand B
L
) de un programa denitivo,
obtenemos el modelo mnimo de Herbrand el programa.
Ejemplo 6 Sea el programa denitivo masculino(adan), f emenino(eva) con
su interpretaci on obvia. tiene los siguientes modelos de Herbrand:
masculino(adan), f emenino(eva)
masculino(adan), masculino(eva), f emenino(eva)
3.3 El modelo mnimo de Herbrand 41
masculino(adan), masculino(eva), f emenino(adan)
masculino(adan), masculino(eva), f emenino(eva), f emenino(adan)
No es complicado conrmar que la intersecci on de estos modelos produce un
modelo de Herbrand. Sin embargo, todos los modelos salvo el primero, contienen
atomos incompatibles con el signicado esperado del programa. Observen tambi en
que la intersecci on de todos los modelos nos lleva a un modelo que corresponde con
el signicado esperado.
Este ejemplo nos muestra la conexi on entre los modelos mnimos de Herbrand y
el modelo intentado de un programa denitivo. Este modelo es una abstracci on del
mundo a ser descrita por el programa. El mundo puede ser m as rico que el modelo
mnimo de Herbrand. Por ejemplo hay m as f ememinos que eva. Sin embargo, aque-
lla informaci on que no se provea explcitamente (hechos) o implcitamente (reglas)
no puede ser obtenida como respuesta a una meta. Las respuestas corresponden a
las consecuencias l ogicas del programa.
Teorema 2 El modelo mnimo de Herbrand M

de un programa denitivo es el
conjunto de todas las consecuencias l ogicas at omicas de base del programa. Esto
es: M

= B

[ [= .
La prueba de este teorema pasa por demostrar que M

B
L
[ [= y que
M

[ [= .
3.3.2. Construcci on del modelo mnimo de Herbrand
La pregunta que emerge es C omo podemos construir el modelo mnimo de Her-
brand? o C omo puede aproximarse sucesivamente por medio de la enumeraci on
de sus elementos? La respuesta a estas preguntas se da mediante una aproximaci on
de punto jo (el punto jo de una funci on f : D D es un elemento x D tal que
f (x) = x) a la sem antica de los programas denitivos.
Un programa denitivo est a compuesto de hechos y reglas. Es evidente que todos
los hechos deben incluirse en cualquier modelo de Herbrand. Si la interpretaci on V
no 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 regla
especica que siempre que
1
, . . . ,
n
son verdaderas, tambi en 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 interpretaci on V incluye a
1
, . . .
n
,
deber a incluir tambi en a
0
para ser un modelo.
Consideren ahora el conjunto V
1
de todos los hechos sin variables de el programa.
Es posible utilizar cada regla para aumentar V
1
con nuevos elementos que necesa-
riamente pertenencen a todo modelo. De modo que se obtiene un nuevo conjunto
V
2
que puede usarse para generar m as elementos que pertenecen a todo modelo.
42 3 Cl ausulas y Programas Denitivos
El proceso se repite mientras puedan generarse nuevos elementos. Los elementos
agregados a V
i+1
son aquellos que se siguen inmediatamente de V
i
.
La construcci on as obtenida puede formalizarse como la iteraci on de una trans-
formaci on T

sobre las interpretaciones de Herbrand de un programa . La opera-


ci on se llama operador de consecuencia inmediata y se dene como sigue:
Denici on 25 (Operador de consecuencia inmediata) Sea ground() el conjun-
to de todas las cl ausulas con valores asignados a todas sus variables en . T

es
una funci on sobre las interpretaciones de Herbrand de denida como sigue:
T

(V) =
0
[
0

1
, . . . ,
n
ground()
1
, . . . ,
n
V
Para los programas denitivos, se puede mostrar que existe una interpretaci on
mnima V tal que T

(V) = V y que V es identica al modelo mnimo de Herbrand


de . M as a un, el modelo mnimo de Herbrand es el limite de la creciente, posible-
mente innita, secuencia de iteraciones:
/ 0, T

(/ 0), T

(T

(/ 0)), . . .
Existe una notaci on est andar para denotar a los miembros de esta secuencia de
interpretaciones construdas a partir de :
T

0 = / 0
T

(i +1) = T

(T

i)
T

n =

i=0
T

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

0 = / 0
T

1 = impar(s(0))
T

2 = impar(s(0)), impar(s(s(s(0))))
.
.
.
T

m = impar(s
n
(0)) [ n 1, 3, 5, . . .
Como mencionamos, el conjunto construdo de esta manera es identico al modelo
mnimo de Herbrand de .
Teorema 3 Sea un programa denitivo y V

su modelo mnimo de Herbrand.


Entonces:
V

es la interpretaci on mnima de Herbrand tal que T

(V

) =V

.
V

= T

n.
Captulo 4
Principio de Resoluci on
Resumen Este captulo introduce el mecanismo de inferencia utilizado por la ma-
yora de los sistemas de programaci on l ogica. Si seguimos considerando Prolog des-
de la perspectiva de los sistemas formales, hemos descrito ya su lenguaje y su teora
de modelo; ahora describiremos su teora de prueba. El mecanismo en cuesti on es
un caso particular de la regla de inferencia llamada principio de resoluci on [15].
La idea es acotar el uso de este principio a programas denitivos, dando lugar a la
resoluci on-SLD [7]. Este principio constituye el fundamento de la sem antica opera-
cional de los programas denitivos. La resoluci on-SLD se demostrar a correcta con
respecto a la teora del modelo descrita en la clase anterior.
4.1. Introducci on
La programaci on l ogica concierne el uso de la l ogica (restringida a cl ausulas)
para representar y resolver problemas. Este uso es ampliamente aceptado en Inteli-
gencia Articial (IA), donde la idea se resume como sigue: Un problema o sujeto
de investigaci on puede describirse mediante un conjunto de f ormulas bien formadas
(fbf), de preferencia en forma de cl ausulas. Si tal descripci on es lo sucientemente
precisa, la soluci on al problema o la respuesta a la pregunta planteada en la investi-
gaci on, es una consecuencia l ogica del conjunto de fbf que describen el problema.
Por lo tanto, encontrar que fbf son consecuencia l ogica de un conjunto de fbf ,
es crucial para muchas areas de la IA, incluyendo la programaci on l ogica. De forma
que nos gustara tener un procedimiento, algortmico, que nos permita establecer si
[= es el caso, o no. Este es el tema del presente captulo: un m etodo decidible
conocido como principio de resoluci on [15].
En el caso de la l ogica proposicional, la implicaci on l ogica es decidible, es decir,
existe un algoritmo que puede resolver el problema (contestar si o no para cada caso
particular [= ). Si n es el n umero de atomos distintos que ocurren en estas fbf,
el n umero de interpretaciones posibles es nito, de hecho es 2
n
. Un algoritmo para
43
44 4 Principio de Resoluci on
computar [= simplemente busca si es verdadero en todos los modelos de .
Qu e sucede en el contexto de la l ogica de primer orden?
La intuici on nos dice que el procedimiento de decisi on de la l ogica proposicional
no es adecuado en primer orden, pues en este caso podemos tener una cantidad
innita de dominios e interpretaciones diferentes. Lo que es peor, el teorema de
Church [2, 19], muestra que la l ogica de primer orden es indecidible:
Teorema 4 (Church) El problema de si [= , cuando es un conjunto nito
arbitrario de fbf, y es una fbf arbitraria, es indecidible.
Observen que el problema es indecidible para conjuntos arbitrarios de fbf y para
una fbf arbitraria. No existe un algoritmo que en un n umero nito de pasos, de la
respuesta correcta a la pregunta Es una consecuencia l ogica de ?
Existen, sin embargo, procedimientos conocidos como procedimientos de prue-
ba que pueden ser de gran ayuda para computar este problema. La idea es que
cuando es el caso que [= , existen procedimientos que pueden vericarlo en
un n umero nito de pasos. Por ello suele decirse que la l ogica de primer orden es
semi-decidible. Aunque parecera trivial, siendo que [=, preguntar [=?, en
realidad tal trivialidad es aparente. Podemos hacer la pregunta al procedimiento sin
que nosotros sepamos que ese es el caso, y obtendremos una respuesta en un n umero
nito de pasos. Pero si es el caso que ,[= obtendremos la respuesta no (en el
mejor de los casos) o el procedimiento no terminar a nunca. Esto es infortunado y,
peor a un, inevitable.
Esta sesi on introduce el procedimiento de prueba utilizado ampliamente en la
programaci on l ogica: el principio de resoluci on propuesto por J.A. Robinson [15]. Si
bien este procedimiento est a orientado a un lenguaje m as expresivo que los progra-
mas l ogicos denitivos, nosotros nos concentraremos en una versi on del principio
que aplica a programas denidos y se conoce como resoluci on-SLD [7] (resoluci on
lineal con funci on de selecci on para cl ausulas denitivas).
4.2. Qu e 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 l ogica de un conjunto de fbf . Las fbf en se conocen como premisas y
es la conclusi on de la prueba.
La prueba suele consistir de un peque no n umero de transformaciones en los cua-
les nuevas fbf son derivadas de las premisas y de fbf previamente derivadas. Derivar
una fbf implica construirla a partir de las premisas y otras fbf derivadas, siguien-
do alguna regla de inferencia. Toda regla de inferencia formaliza alguna forma
natural de razonamiento. Por ejemplo, el modus ponens es usado com unmente en
matem aticas, su expresi on es:
4.3 Pruebas y programas l ogicos 45
,

donde la lnea superior expresa las premisas y la lnea inferior la conclusi on.
Es posible ligar varias aplicaciones del modus ponens para construir una prueba.
Por ejemplo, si tenemos el programa l ogico =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 conclusi on es una consecuencia
l ogica de las premisas: , [= . A esta propiedad del modus ponens se le
conoce como consistencia (soundness). En general un procedimiento de prueba es
consistente si todas las fbf que pueden ser derivadas de alg un conjunto de fbfs
usando el procedimiento, son consecuencias l ogicas de . En otras palabras, un pro-
cedimiento de prueba es consistente si y s olo si s olo permite derivar consecuencias
l ogicas 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 consecuencia
l ogica de las premisas , puede ser derivada usando el procedimiento en cuesti on. El
modus 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 v alida. !Nos permite extraer cualquier conclu-


si on, a partir de cualquier premisa! Esto ejemplica que obtener completitud es
sencillo, pero obtener completitud y correctez, no lo es.
4.3. Pruebas y programas l ogicos
Recordemos que los enunciados en los programas l ogicos tienen la estructura
general de la implicaci on l ogica:

0

1
, . . . ,
n
(n 0)
donde
0
, . . . ,
n
son fbfs at omicas y
0
puede estar ausente (para representar
cl ausulas meta). Consideren el siguiente programa denitivo que describe un
mundo donde los padres de un reci en nacido est an orgullosos, Juan es el padre de
Marta y Marta es una reci en nacida:
46 4 Principio de Resoluci on
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 especica qui en no est a orgulloso. Tampoco que signica para alguien no ser
padre.
Supongamos que deseamos contestar la pregunta Qui en est a orgulloso? Esta
pregunta concierne al mundo descrito por nuestro programa, esto es, concierne al
modelo previsto para . La respuesta que esperamos es, por supuesto, juan. Ahora,
recuerden que la l ogica de primer orden no nos permite expresar enunciados inte-
rrogativos, por lo que nuestra pregunta debe formalizarse como una cl ausula meta
(enunciado declarativo):
orgulloso(Z).
que es una abreviatura de Zorgulloso(Z) (una cl ausula denitiva sin cabeza), que
a su vez es equivalente de:
Z orgulloso(Z).
cuya lectura es Nadie est a orgulloso, esto es, la respuesta negativa a la consulta
original Qui en est a orgulloso? La meta ahora es probar que este enunciado es
falso en todo modelo del programa y en particular, es falso en el modelo previsto
para , 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 substituci on 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 G
0
Para cualquier
Z, Z no est a orgulloso. La inspecci on del programa revela que una regla describe
una condici on para que alguien est e orgulloso:
orgulloso(X) padre(X,Y), recien nacido(Y).
lo cual es l ogicamente equivalente a:
(orgulloso(X) (padre(X,Y) recien nacido(Y)))
Al renombrar X por Z, eliminar el cuanticador universal y usar modus ponens
con respecto a G
0
, obtenemos:
4.3 Pruebas y programas l ogicos 47
(padre(Z,Y) recien nacido(Y))
o su equivalente:
padre(Z,Y), recien nacido(Y).
al que identicaremos como G
1
. Un paso en nuestro razonamiento resulta en rem-
plazar la meta G
0
por la meta G
1
que es verdadera en todo modelo G
0
. Ahora
solo queda probar que G
1
es no satisfacible. Observen que G
1
es equivalente
a la fbf:
ZY(padre(Z,Y) recien nacido(Y))
Por lo tanto, puede probarse que la meta G
1
es no satisfacible para , si en
todo modelo de hay una persona que es padre de un reci en nacido. Entonces,
vericamos primero si hay padres con estas condiciones. El programa contiene la
cl ausula:
padre(X,Y) papa(X,Y).
que es equivalente a:
(padre(X,Y) papa(X,Y))
por lo que G
1
se reduce a:
papa(Z,Y), recien nacido(Y).
que identicaremos como G
2
. Se puede mostrar que no es posible satisfacer la nueva
meta G
2
con el programa , si en todo modelo de hay una persona que es pap a de
un reci en nacido. El programa declara que juan es padre de marta:
papa( juan, marta).
as que s olo resta probar que marta no es una reci en nacida no se puede satisfacer
junto con :
recien nacido(marta).
pero el programa contiene el hecho:
recien nacido(marta).
equivalente a recien nacido(marta) f lo que conduce a una refutaci on.
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 eliminaci on
del cuanticador universal, para encontrar un contra ejemplo al supuesto.
Observen que la meta denitiva fue convertida en un conjunto de atomos a ser
probados. Para ello, se seleccion o una fbf at omica de la meta p(s
1
, . . . , s
n
) y una
48 4 Principio de Resoluci on
cl ausula de la forma p(t
1
, . . . , t
n
) A
1
, . . . A
n
para encontrar una instancia com un de
p(s
1
, . . . , s
n
) y p(t
1
, . . . , t
n
), es decir, una substituci on que hace que p(s
1
, . . . , s
n
)
y p(t
1
, . . . , t
n
) sean id enticos. Tal substituci on se conoce como unicador. La nue-
va meta se construye remplazando el atomo seleccionado en la meta original, por
los atomos de la cl ausula seleccionada, aplicando a todos los atomos obtenidos de
esta manera.
El paso de computaci on b asico de nuestro ejemplo, puede verse como una regla
de inferencia puesto que transforma f ormulas l ogicas. Lo llamaremos principio de
resoluci on SLD para programas denitivos. Como mencionamos, el procedimiento
combina modus ponens, eliminaci on del cuanticador universal y en el paso nal
un reductio ad absurdum.
Cada paso de razonamiento produce una substituci on, si se prueba en k pasos que
la meta denida en cuesti on no puede satisfacerse, probamos que:
(A
1
, . . . A
m
)
1
. . .
k
es una instancia que no puede satisfacerse. De manera equivalente, que:
[= (A
1
A
m
)
1
. . .
k
Observen que generalmente, la computaci on de estos pasos de razonamiento no
es determinista: cualquier atomo de la meta puede ser seleccionado y pueden haber
varias cl ausulas del programa que uniquen con el atomo seleccionado. Otra fuente
de indeterminismo es la existencia de unicadores alternativos para dos atomos. Es-
to sugiere que es posible construir muchas soluciones (algunas veces, una cantidad
innita de ellas).
Por otra parte, es posible tambi en que el atomo seleccionado no unique con
ninguna cl ausula en el programa. Esto indica que no es posible construir un contra
ejemplo para la meta denida inicial. Finalmente, la computaci on puede caer en un
ciclo y de esta manera no producir soluci on alguna.
4.4. Substituci on
Una substituci on remplaza variables por t erminos, por ejemplo, podemos rem-
plazar la variable X por el t ermino f (a) en la cl ausula p(X) q(X), y as obtener la
nueva cl ausula p( f (a))q( f (a)). Si asumimos que las cl ausulas est an cuanticadas
universalmente, decimos que est a substituci on hace a la cl ausula original, menos
general. Mientras que la cl ausula original dice que V(p(X)) = t y que V(q(X)) = t
para cualquier X en el dominio, la segunda cl ausula dice que esto s olo es cierto
cuando cuando V(X) = f (a). Observen que la segunda cl ausula es consecuencia
l ogia de la primera: p(X) q(X) [= p( f (a)) q( f (a))
Denici on 26 (Substituci on) Una substituci on es un conjunto nito de la forma:
X
1
/t
1
, . . . , X
n
/t
n
, (n 0)
4.4 Substituci on 49
donde las X
i
son variables, distintas entre si, y los t
i
son t erminos. Decimos que
t
i
substituye a X
i
. La forma X
i
/t
i
se conoce como ligadura de X
i
. La substituci on
se dice se dice de base (grounded) si cada t ermino t
i
es un t ermino base (no incluye
variables)..
La substituci on dada por el conjunto vaco, se conoce como substituci on de
identidad o substituci on vaca y se denota por . La restricci on de sobre un
conjunto 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), X
1
/b son substituciones.
La restricci on de la segunda substituci on sobre X, Z es X/a, Z/ f (a).
Denici on 27 (Expresi on) Una expresi on es un t ermino, una literal, o una conjun-
ci on o disyunci on de literales. Una expresi on simple es un t ermino o una literal.
Observen que una cl ausula es una expresi on. Las substituciones pueden aplicarse
a las expresiones, lo que signica que las variables en las expresiones ser an rempla-
zadas de acuerdo a la substituci on.
Denici on 28 Sea =X
1
/t
1
, . . . , X
n
/t
n
una substituci on y una expresi on. En-
tonces , la ocurrencia (instance) de por , es la expresi on obtenida al substi-
tuir simult aneamente X
i
por t
i
para 1 i n. Si es una expresi on de base, se
dice que es una ocurrencia base y se dice que es una substituci on de base para
. Si =
1
, . . . ,
n
es un conjunto nito de expresiones, entonces denota

1
, . . . ,
n
.
Ejemplo 9 Sea la expresi on p(Y, f (X)) y sea la substituci on X/a,Y/g(g(X)).
La ocurrencia de por es = p(g(g(X)), f (a). Observen que X e Y son si-
mult aneamente remplazados por sus respectivos t erminos, lo que implica que X en
g(g(X)) no es afectada por X/a.
Si es una expresi on cerrada que no es un t ermino, por ejemplo, una literal, o
una conjunci on o disyunci on de literales, y es una substituci on, lo siguiente se
cumple:
[=
por ejemplo: p(X) q(Y) [= p(a) q(Y) donde hemos usado la substituci on
X/a.
Podemos aplicar una substituci on y luego aplicar una substituci on , a lo cual
se llama composici on de las substituciones y . Si ese es el caso, primero se
aplica y luego . Las composiciones pueden verse como mapeos del conjunto de
variables en el lenguaje, al conjunto de t erminos.
Denici on 29 (Composici on) Sean =X
1
/s
1
, . . . , X
m
/s
m
y =Y
1
/t
1
, . . .Y
n
/t
n

dos substituciones. Consideren la secuencia:


X
1
/(s
1
), . . . , X
m
/(s
m
),Y
1
/t
1
, . . . ,Y
n
/t
n
50 4 Principio de Resoluci on
Si se borran de esta sencuencia las ligaduras X
i
/s
i
cuando X
i
=s
i
y cualquier
ligadura Y
j
/t
j
donde Y
j
X
1
, . . . , X
m
. La substituci on consistente en las ligaduras
de la secuencia resultante es llamada composici on 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 = .
Denici on 30 (Ocurrencia) Sean y dos substituciones. Se dice que es una
ocurrencia de , si existe una substituci on , tal que = .
Ejemplo 11 La substituci on = X/ f (b),Y/a es una ocurrencia de la substitu-
ci on =X/f (X),Y/a, puesto que X/b = .
Algunas propiedades sobre las substituciones incluyen:
Proposici on 3 Sea una expresi on, y sea , y substituciones. Las siguientes
relaciones se cumplen:
1. = =
2. () = ()
3. ) = ()
4.5. Unicaci on
Uno de los pasos principales en el ejemplo de la secci on 4.3, consisti o en ha-
cer que dos fbf at omicas se vuelvan sint acticamente equivalentes. Este proceso se
conoce como unicaci on y posee una soluci on algortmica.
Denici on 31 (Unicador) Sean y t erminos. Una substituci on tal que y
sean id enticos ( = ) es llamada unicador 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
Denici on 32 (Generalidad entre substituciones) Una substituci on se dice m as
general que una substituci on , si y s olo si existe una substituci on tal que =.
Denici on 33 (MGU) Un unicador se dice el unicador m as general (MGU)
de dos t erminos, si y s olo si es m as general que cualquier otro unicador entre
esos t erminos.
4.5 Unicaci on 51
Denici on 34 (Forma resuelta) Un conjunto de ecuaciones X
1
=t
1
, . . . , X
n
=t
n

est a en forma resuelta, si y s olo si X


1
, . . . , X
n
son variables distintas que no ocurren
en t
1
, . . . , t
n
.
Existe una relaci on cercana entre un conjunto de ecuaciones en forma resuelta y
el unicador m as general de ese conjunto: Sea X
1
=t
1
, . . . , X
n
=t
n
un conjunto de
ecuaciones en forma resuelta. Entonces X
1
/t
1
, . . . , X
n
/t
n
es un MGU idempotente
de la forma resuelta.
Denici on 35 (Equivalencia en conjuntos de ecuaciones) Dos conjuntos de ecua-
ciones E
1
y E
2
se dicen equivalentes, si tienen el mismo conjunto de unicadores.
La denici on puede usarse como sigue: para computar el MGU de dos t erminos
y , primero intente transformar la ecuaci on = en una forma resuelta
equivalente. Si esto falla, entonces mgu(, ) = f allo. Sin embargo, si una forma
resuelta X
1
=t
1
, . . . , X
n
=t
n
existe, entonces mgu(, ) =X
1
/t
1
, . . . , X
n
/t
n
. Un
algoritmo para encontrar la forma resuelta de un conjunto de ecuaciones es como
sigue:
Algoritmo 1 Unica(E)
1: function UNIFICA(E) E es un conjunto de ecuaciones
2: repeat
3: (s =t) seleccionar(E)
4: if f (s
1
, . . . , s
n
) = f (t
1
, . . . , t
n
) (n 0) then
5: remplazar (s =t) por s
1
=t
1
, . . . , s
n
=t
n
6: else if f (s
1
, . . . , s
m
) = g(t
1
, . . . , t
n
) ( f /m ,= g/n) then
7: return(fallo)
8: else if X = X then
9: remover la X = X
10: else if t = X then
11: remplazar t = X por X =t
12: else if X =t then
13: if subtermino(X,t) then
14: return(fallo)
15: else remplazar todo X por t
16: end if
17: end if
18: until No hay accion posible para E
19: 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 Resoluci on
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, puesto
que:
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 conjunto
de ecuaciones de su entrada; o bien regresa fallo si la forma resuelta no existe.
Sin embargo, el computar subtermino(X, t) (vericaci on de ocurrencia) hace que
el algoritmo sea altamente ineciente. Los sistemas Prolog resuelven este proble-
ma haci endo caso omiso de la vericaci on de ocurrencia. El standard ISO Prolog
(1995) declara que el resultado de la unicaci on es no decidible. Al eliminar la ve-
ricaci on de ocurrencia es posible que al intentar resolver X = f (X) obtengamos
X = f ( f (X)) = f ( f ( f . . . )). En la practica los sistemas Prolog no caen en este
ciclo, pero realizan la siguiente substituci on X/f (). Si bien esto parece resolver
el problema de eciencia, generaliza el concepto de t ermino, substituci on y unica-
ci on al caso del innito, no considerado en la l ogica de primer orden, introduci endo
a su vez inconsistencia.
4.6. Resoluci on-SLD
El m etodo de razonamiento descrito informalmente al inicio de esta sesi on, puede
resumirse con la siguiente regla de inferencia:
(
1

i1

i+1

m
) (
0

1

n
)
(
1

i1

1

n

i+1

m
)
o, de manera equivalente, usando la notaci on de los programas denitivos:
4.6 Resoluci on-SLD 53

1
, . . . ,
i1
,
i
,
i+1
, . . . ,
m

0

1
, . . . ,
n
(
1
, . . . ,
i1
,
1
, . . . ,
n
, . . . ,
m
)
donde:
1.
1
, . . . ,
m
son fbf at omicas.
2.
0

1
, . . . ,
n
es una cl ausula denitiva en el programa (n 0).
3. MGU(
i
,
0
) = .
La regla tiene dos premisas: una meta y una cl ausula denitivas. Observen que
cada una de ellas est a cuanticada universalmente, por lo que el alcance de los
cuanticadores es disjunto. Por otra parte, solo hay un cuanticador universal para
la conclusi on, por lo que se requiere que el conjunto de variables en las premisas
sea disjunto. Puesto que todas las variables en las premisas est an cuanticadas, es
siempre posible renombrar las variables de la cl ausula denitiva para cumplir con
esta condici on.
La meta denida puede incluir muchas fbf at omicas que unican con la cabeza de
alguna cl ausula en el programa. En este caso, es deseable contar con un mecanismo
determinista para seleccionar un atomo
i
a unicar. Se asume una funci on que
selecciona una submeta de la meta denida (funci on de selecci on).
La regla de inferencia presentada es la unica necesaria para procesar programas
denitivos. Esta regla es una versi on de la regla de inferencia conocida como prin-
cipio de resoluci on, introducido por J.A. Robinson en 1965. El principio de resolu-
ci on aplica a cl ausulas. Puesto que las cl ausulas denitivas son m as restringidas que
las cl ausulas, la forma de resoluci on presentada se conoce como resoluci on-SLD
(resoluci on lineal para cl ausulas denitivas con funci on de selecci on).
El punto de partida de la aplicaci on de esta regla de inferencia es una meta de-
nida G
0
:

1
, . . . ,
m
(m 0)
De esta meta, una submeta
i
ser a seleccionada, de preferencia por una funci on
de selecci on. Una nueva meta G
1
se construye al seleccionar una cl ausula del pro-
grama
0

1
, . . . ,
n
(n 0) cuya cabeza
0
unica con
i
, resultando en
1
. G
1
tiene la forma:
(
1
, . . . ,
i1
,
1
, . . . ,
n
, . . . ,
m
)
1
Ahora es posible aplicar el principio de resoluci on a G
1
para obtener G
2
, y as su-
cesivamente. El proceso puede terminar o no. Hay dos situaciones donde no es po-
sible obtener G
i+1
a partir de G
i
:
1. cuando la submeta seleccionada no puede ser resuelta (no es unicable con la
cabeza de una cl ausula del programa).
2. cuando G
i
=2 (meta vaca = f).
Denici on 36 (Derivaci on-SLD) Sea G
0
una meta denitiva, un programa de-
nitivo y R una funci on de selecci on. Una derivaci on SLD de G
0
(usando y R) es
una secuencia nita o innita de metas:
54 4 Principio de Resoluci on
G
0

0
G
1
. . . G
n1

n1
G
n
Para manejar de manera consistente el renombrado de variables, las variables en
una cl ausula
i
ser an renombradas poni endoles subndice i.
Cada derivaci on SLD nos lleva a una secuencias de MGUs
1
, . . . ,
n
. La com-
posici on
=

2
. . .
n
si n > 0
si n = 0
de MGUs se conoce como la substituci on computada de la derivaci on.
Ejemplo 16 Consideren la meta denida orgulloso(Z) y el programa discutido
en la clase anterior.
G
0
=orgulloso(Z).

0
= orgulloso(X
0
) padre(X
0
,Y
0
), recien nacido(Y
0
).
La unicaci on de orgulloso(Z) y orgulloso(X
0
) nos da el MGU
1
= X
0
/Z.
Asumamos que nuestra funci on de selecci on es tomar la submeta m as a la izquierda.
El primer paso de la derivaci on nos conduce a:
G
1
= padre(Z,Y
0
), recien nacido(Y
0
).

1
= padre(X
1
,Y
1
) papa(X
1
,Y
1
).
En el segundo paso de la resoluci on el MGU
2
=X
1
/Z,Y
1
/Y
0
es obtenido. La
derivaci on continua como sigue:
G
2
= papa(Z,Y
0
), recien nacido(Y
0
).

2
= papa( juan, marta).
G
3
=recien nacido(marta).

3
= recien nacido(marta).
G
4
=2
la substituci on computada para esta derivaci on es:

4
=X
0
/ZX
1
/Z,Y
1
/Y
0
Z/ juan,Y
0
/marta
=X
0
/ juan, X
1
/juan,Y
1
/marta, Z/juan,Y
0
/marta
Las derivaciones SLD que terminan en la meta vaca (2) son de especial impor-
tancia pues corresponden a refutaciones a la meta inicial (y proveen las respuestas a
la meta).
Denici on 37 (Refutaci on SLD) Una derivaci on SLD nita:
4.6 Resoluci on-SLD 55
G
0

0
G
1
. . . G
n1

n1
G
n
donde G
n
=2, se llama refutaci on SLD de G
0
.
Denici on 38 (Derivaci on fallida) Una derivaci on de la meta denitiva G
0
cuyo
ultimo elemento no es la meta vaca y no puede resolverse con ninguna cl ausula del
programa, es llamada derivaci on fallida.
Denici on 39 (Arbol-SLD) Sea un programa denitivo, G
0
una meta denitiva,
y R una funci on de selecci on. El arbol-SLD de G
0
(usando y R) es un arbol
etiquetado, posiblemente innito, que cumple las siguientes condiciones:
La raz del arbol est a etiquetada por G
0
.
Si el arbol contiene un nodo etiquetado como G
i
y existe una cl ausula renom-
brada
i
tal que G
i+1
es dervidada de G
i
y
i
via R, entonces el nodo
etiquetado como G
i
tiene un hijo etiquetado G
i+1
El arco que conecta ambos
nodos est a etiquetado como
i
.
Por ejemplo:
orgulloso(Z)
padre(Z,Y
0
), recien nacido(Y
0
)
papa(Z,Y
0
), recien nacido(Y
0
)
recien nacido(marta)
2
mama(Z,Y
0
), recien nacido(Y
0
)
4.6.1. Propiedades de la resoluci on-SLD
Denici on 40 (Consistencia) Sea un programa denitivo, R una funci on de se-
lecci on, y una substituci on de respuesta computada a partir de y R para una
meta
1
, . . . ,
m
. Entonces ((
1

m
)) es una consecuencia l ogica del
programa .
Denici on 41 (Compleci on) Sea un programa denitivo, R una funci on de se-
lecci on y
1
, . . . ,
m
una meta denitiva. Si [= ((
1

m
)), entonces
existe una refutaci on de
1
, . . . ,
m
va R con una substituci on de respuesta
computada , tal que (
1

m
) es un caso de (
1

m
).
Captulo 5
Negaci on
Resumen Si los programas denitivos representan unicamente conocimiento posi-
tivo sobre un problema C omo es que se pueden computar consecuencias l ogicas
negativas? Este captulo introduce los conceptos de supuesto del mundo cerrado
(CWA) y su forma m as relajada, conocida como negaci on por fallo nito (NAF),
para introducir el manejo de conocimiento negativo en los programas denitivos. Se
introducen tambi en los conceptos de compleci on de programa y resoluci on-SLDNF.
Finalmente abordaremos el concepto de programas generales y la resoluci on para
este tipo de programas.
5.1. Introducci on
Los programas denitivos expresan conocimiento positivo, en el sentido que los
hechos y las reglas describen que ciertos objetos est an en cierta relaci on con otros.
Las relaciones se hacen explcitas en el modelo mnimo de Herbrand el conjunto
de todas las consecuencias at omicas 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 mnimo 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 mnimo de Herbrand, incluyen in-
formaci on negativa del tipo: a no est a sobre b, o b no est a sobre c. Sin embargo,
57
58 5 Negaci on
nosotros usamos informaci on negativa implcita en algunos casos. Por ejemplo, si
cuando buscamos un boleto de autob us, nos encontramos con que no aparecen sa-
lidas a M exico a las 10:12 am, asumimos que tal salida no existe. La ausencia de
informaci on se asume como evidencia de lo contrario. Esto es posible porque, como
en el caso de autob us, asumimos que toda la informaci on disponible est a a nuestro
alcance.
La idea anterior se puede formular con la suposici on del mundo cerrado
(Closed-World Assumption) o CWA, una pseudo-regla de inferencia que expresa:
,

(CWA)
Si una fbf at omica 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 condici on , es equiva-
lente a ,[=. Como este es el caso para la resoluci on-SLD, la condici on puede ser
remplazada por ,M

. Por ejemplo, la fbf sobre(b, c) no puede ser derivada por re-


soluci on-SLD a partir del programa (vean el arbol de derivaci on en la gura 5.1).
En realidad sobre(b, c) no puede ser derivada por ning un sistema correcto, puesto
que no es una consecuencia l ogica de . Dada la completitud de la resoluci on-SLD,
se sigue que ,[= sobre(b, c) y usando la CWA inferimos que sobre(b, c).
sobre(b, c)
en(b, c) en(b, Z
0
), sobre(Z
0
, c)
sobre(a, c)
en(a, c) en(a, Z
2
), sobre(Z
2
, c)
Figura 5.1

Arbol de derivaci on-SLD fallido
En contra de lo que podra ser nuestra primera intuici on, existen problemas aso-
ciados a la CWA. El principal tiene que ver con que la no-derivabilidad para los
programas denitivos 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 versi on m as d ebil de
la suposici on de mundo cerrado, se logra si asumimos que es derivable a partir
del programa si la meta tiene un arbol-SLD nito que falla. A esta regla se
le conoce como negaci on como falla (nita) (NAF).
Es necesario contrastar la NAF con la CWA, que tambi en puede verse como
una negaci on por falla, pero innita. Para ilustrar la diferencia entre los dos enfo-
5.2 La compleci on de un programa 59
ques extendamos el programa con la siguiente cl ausula evidentemente verdadera
sobre(X,Y) sobre(X,Y).
El arbol-SLD de la meta sobre(b, c) sigue sin contener refutaciones, pero aho-
ra es innito. Por lo tanto no podemos concluir que sobre(b, c) usando NAF, pero
si usando CWA.
Pero el problema m as serio con estos enfoques es que son incorrectos, sobre(b, c)
no es una consecuencia l ogica del programa . En lo general, cualquier sistema que
permita inferir literales negativas a partir de un programa denitivo, es incorrec-
to. La raz on es que la base de Herbrand del programa B

, en el cual todas las fbf


at omicas cerradas son verdaderas, es siempre un modelo de .
Existen dos aproximaciones a la soluci on de estos problemas: ver los programas
como res umenes de programas m as extensos que validan las literales negativas; o
redenir la noci on de consecuencia l ogica de forma que s olo algunos modelos del
programa (el mnimo de Herbrand, por ejemplo) sean tomados en cuenta. En ambos
casos, el efecto es descartar algunos modelos del programa que no son interesantes.
Primero justicaremos la regla NAF en t erminos de la compleci on de los programas
denitivos y posteriormente, extenderemos el lenguaje de los programas denitivos
para incluir en ellos literales negativas en la cabeza y cuerpo de las cl ausulas.
5.2. La compleci on de un programa
La idea que presentaremos a continuaci on se debe a K. Clark [3] y se basa en que
cuando uno escribe un programa denitivo , en realidad quiere expresar algo m as
que su conjunto de cl ausulas denitivas. El programa deseado puede formalizarse
como la compleci on de . Consideren la siguiente denici on:
sobre(X,Y) en(X,Y).
sobre(X,Y) en(X, Z), sobre(Z,Y).
Estas reglas especican que un objeto est a sobre un segundo objeto, si el primer
objeto est a encima del segundo (1) o si el objeto est a sobre otro objeto que a su vez
est a encima del segundo (2). Esto tambi en puede escribirse como:
sobre(X,Y) en(X,Y) (en(X, Z), sobre(Z,Y))
Ahora, Qu e sucede si remplazamos la implicaci on por la equivalencia l ogica?
sobre(X,Y) en(X,Y) (en(X, Z), sobre(Z,Y))
Est a fbf expresa que X est a sobre Y si y s olo si una de las condiciones es verda-
dera. Esto es, si ninguna de las condiciones se cumple, se sigue que X no est a sobre
Y! Esta es la intuici on seguida para explicar la negaci on como falla.
60 5 Negaci on
Desafortunadamente, combinar cl ausulas denitivas como en el ejemplo anterior,
s olo es posible para cl ausulas con cabezas id enticas. Por ejemplo:
en(c, b).
en(b, a).
Por una simple transformaci on, el programa puede ser escrito como:
en(X
1
, X
2
) X
1
= c, X
2
= b
en(X
1
, X
2
) X
1
= b, X
2
= a
Las cl ausulas pueden combinarse en una sola f ormula, donde la implicaci on es
remplazada por la equivalencia l ogica.
en(X
1
, X
2
) (X
1
= c, X
2
= b) (X
1
= b, X
2
= a)
La lectura l ogica de esta fbf es que X
1
est a en X
2
si y s olo si X
1
= c y X
2
= b o
si X
1
= b y X
2
= a. Esta transformaci on se puede realizar sobre un programa l ogico
denitivo y el resultado se conoce como compleci on de .
Denici on 42 (Compleci on) Sea un programa l ogico denitivo. La compleci on
comp() de es el conjunto de f ormulas obtenido a partir de las siguientes tres
transformaciones:
1. Para cada smbolo de predicado remplazar la cl ausula de la forma:
(t
1
, . . . , t
m
)
1
, . . . ,
n
(n 0)
por la f ormula:
(X
1
, . . . , X
m
) Y
1
, . . . ,Y
i
(X
1
=t
1
, . . . , X
m
=t
m
,
1
, . . . ,
n
)
donde las Y
i
son todas variables en y las X
i
son variables unicas que no apa-
recen en .
2. Para cada smbolo de predicado remplazar todas las fbf:
(X
1
, . . . , X
m
)
1
.
.
.
(X
1
, . . . , X
m
)
j
por la f ormula:
5.2 La compleci on de un programa 61
X
1
, . . . , X
m
((X
1
, . . . , X
m
)
1
, . . . ,
j
si j > 0
X
1
, . . . , X
m
((X
1
, . . . , X
m
)) si j = 0
3. Finalmente el programa se extiende con los siguientes axiomas de igualdad libre,
que denen las igualdades introducidas en el paso 1:
(X = X)
(X =Y Y = X)
(X =Y Y = Z X = Z)
(X
1
=Y
1
X
n
=Y
n
f (X
1
, . . . , X
n
) = f (Y
1
, . . . ,Y
n
))
(X
1
=Y
1
X
n
=Y
n
((X
1
, . . . , X
n
) (Y
1
, . . . ,Y
n
))
( f (X
1
, . . . , X
n
) = f (Y
1
, . . . ,Y
n
) X
1
=Y
1
X
n
=Y
n
)
(f (X
1
, . . . , X
m
) = g(Y
1
, . . . ,Y
n
))(Si f /m ,= g/n)
(X =t)(Si X es un subtermino propio de t)
Estas deniciones garantizan que la igualdad (=) sea una relaci on de equivalen-
cia; que sea una relaci on congruente; y que formalice la noci on de unicaci on. Las
primeros cinco deniciones se pueden abandonar si se especica que = representa
la relaci on de identidad .
Ejemplo 17 Consideremos la construcci on de comp() tal y como se deni o ante-
riormente. El primer paso produce:
sobre(X
1
, X
2
) X,Y (X
1
= X, X
2
=Y, en(X,Y))
sobre(X
1
, X
2
) X,Y, Z (X
1
= X, X
2
=Y, en(Z,Y), sobre(Z,Y))
en(X
1
, X
2
) (X
1
= c, X
2
= b)
en(X
1
, X
2
) (X
1
= b, X
2
= a)
dos pasos m as adelante obtenemos:
X
1
, X
2
(sobre(X
1
, X
2
X,Y(. . . ) X,Y, Z(. . . ))
X
1
, X
2
(en(X
1
, X
2
) (X
1
= c, X
2
= b) (X
1
= b, X
1
= a))
y el programa se termina con las deniciones de igualdad como identidad y uni-
caci on.
La compleci on comp() de un programa denitivo preserva todas las literales
positivas modeladas por . Esto es, si [= entonces comp() [= . Tampoco se
agrega informaci on positiva al completar el programa: Si comp() [= entonces
[= . Por lo tanto, al completar el programa no agregamos informaci on positiva
al mismo, solo informaci on negativa.
62 5 Negaci on
Como sabemos, no es posible que una literal negativa pueda ser consecuencia
l ogica de un programa denitivo. Pero al substituir las implicaciones en por equi-
valencias en comp() es posible inferir informaci on negativa a partir del programa
completado. Esta es la justicaci on de la regla NAF, cuyas propiedades de consis-
tencia se deben a K. Clark [3]:
Teorema 5 (Consistencia de la NAF) Sea un programa denitivo y una
meta denitiva. Si tiene un arbol-SLD nito fallido, entonces comp() [=
().
La consistencia se preserva a un si no es de base. Por ejemplo, en(a, X)
falla de manera nita y por lo tanto, se sigue que comp() [= (en(a, X)). La
completitud de la NAF tambi en ha sido demostrada:
Teorema 6 (Completitud de la NAF) Sea un programa denitivo. Si comp() [=
() entonces existe un arbol nito fallido para la meta denitiva .
Observen que solo enuncia la existencia de un arbol-SLD nito fallido. Como se
ha mencionado, un arbol-SLD puede ser nito bajo ciertas reglas de computaci on
e innito bajo otras. En particular, el teorema de completitud no es v alido para
las reglas de computaci on de Prolog. La completitud funciona para una subclase
de derivaciones-SLD conocidas como justas (fair), las cuales o bien son nitas o
garantizan que cada atomo en la derivaci on (u ocurrencia de este), es seleccionado
eventualmente por las reglas de computaci on. Un arbol-SLD es justo si todas sus
derivaciones son justas. La NAF es completa para arboles-SLD justos. Este tipo
de derivaciones se pueden implementar f acilmente: selecciona la sub-meta m as a
la izquierda y agrega nuevas submetas al nal de esta (b usqueda en amplitud). Sin
embargo, pocos sistemas implementan tal estrategia por razones de eciencia.
5.3. Resoluci on SLDNF para programas denitivos
En el captulo 4 presentamos el m etodo de resoluci on-SLD, utilizado para probar
si una literal positiva cerrada es consencuencia l ogica de un programa. En la secci on
anterior armamos que tambi en las literales negadas pueden derivarse a partir de la
terminaci on de programas l ogicos denitivos. Combinando la resoluci on SLD y la
negaci on como fallo nito (NAF), es posible generalizar la noci on de meta denitiva
para incluir literales positivas y negadas. Tales metas se conocen como generales.
Denici on 43 (Meta general) Una meta general tiene la forma:

1
, . . .
n
(n 0)
donde cada
i
es una literal positiva o negada.
La combinaci on de la resoluci on SLD y la NAF se llama resoluci on SLDNF.
5.3 Resoluci on SLDNF para programas denitivos 63
Denici on 44 (Resoluci on SLDNF para programas denitivos) Sea un pro-
grama denitivo, G
0
una meta general y R una funci on de selecci on (tambi en co-
nocida como regla de computaci on). Una derivaci on SLDNF de G
0
usando R, es
una secuencia nita o innita de metas generales:
G
0

0
G
1
. . . G
n1

n1
G
n
donde G
i

i
G
i+1
puede ocurrir si:
1. la literal R-seleccionada en G
i
es positiva y G
i+1
se deriva de G
i
y
i
por un
paso de resoluci on SLD;
2. la literal R-seleccionada en G
i
es negativa () y la meta tiene un arbol
SLD fallido y nito y G
i+1
se obtiene a partir de G
i
eliminando (en cuyo caso

i
, corresponde al marcador especial FF).
Cada paso en una derivaci on SLDNF produce una substituci on, en el caso 1 un
MGU y en el caso 2, la substituci on vaca .
Entonces, una literal negativa es demostrada si tiene un arbol SLD nito
que falla. Por dualidad, falla de manera nita si es demostrada. Adem as de
la refutaci on y de la derivaci on innita, existen dos clases de derivaciones SLDNF
completas dada una funci on de selecci on:
1. Una derivaci on se dice (nitamente) fallida si (i) la literal seleccionada es positi-
va y no unica con ninguna cabeza de las cl ausulas del programa, o (2) la literal
seleccionada es negativa y tiene un fallo nito.
2. Una derivaci on se dice plantada (stuck) si la sub-meta seleccionada es de la
forma y tiene un fallo innito.
Ejemplo 18 Considere el siguiente programa:
en(c, b)
en(b, a)
La meta en(X,Y), en(Z, X) tiene una refutaci on-SLDNF con la substituci on
computada X/c,Y/b:
64 5 Negaci on
G = en(X,Y), en(Z, X).
G
0
= en(X,Y).

0
= en(c, b).

0
= X/c,Y/b
G
1
= en(Z, X)
0
= en(Z, c)

1
= FF

1
=
G
2
= 2
=
0

1
= X/c,Y/b
En cambio, si la funci on de selecci on hubiera computado las cl ausulas de abajo
haca arriba
0
= en(b, a) la derivaci on hubiera sido fallida (a ustedes probarlo).
Como es de esperarse, la resoluci on-SLDNF es consistente, despu es de todo, la
resoluci on-SLD y la NAF son consistentes.
Teorema 7 (Consistencia de la resoluci on-SLDNF) Sea un programa deniti-
vo y
1
, . . . ,
n
una meta general. Si
1
, . . . ,
n
tiene una refutaci on SLDNF
con una substituci on computada , comp() [=(
1
, . . . ,
n
).
Sin embargo, la resoluci on-SLDNF no es completa aunque pudi eramos haber
esperado lo contrario. La resoluci on SLDNF no es completa a pesar de que la re-
soluci on-SLD y la NAF si lo son. Un simple contra ejemplo es en(X,Y) que
corresponde a la consulta Hay algunos bloques X e Y, tal que X no est a en Y?
Uno esperara varias respuestas a esta consulta, por ejemplo, el bloque a no est a en-
cima de ning un bloque, etc.
Pero la derivaci on SLDNF de en(X,Y) falla porque la meta en(X,Y) tiene
exito (puede ser demostrada). El problema es que nuestra denici on de derivaci on
fallida es demasiado conservadora. El exito de en(X,Y) no signica necesaria-
mente que no halla un bloque que no est e en otro bloque, s olo que existe al menos
un bloque que no est a en otro.
El problema tiene su origen en que la NAF, en contraste con la resoluci on SLD,
es s olo una prueba (test). Recuerden que dada la denici on de la resoluci on SLDNF
y la consistencia y completitud de la NAF, tenemos que en(X,Y) tiene exito si
y s olo si () en(X,Y) tiene asociado un arbol SLD fallido y nito; o si y s olo si
comp() [=(en(X,Y)). Por lo tanto, la meta general en(X,Y) no debe leerse
como una consulta cuanticada existencialmente, sino como una prueba universal:
Para todo bloque X e Y, No est a X en Y?.
Esta ultima consulta tiene una respuesta negativa en el modelo deseado del pro-
grama, puesto que el bloque b est a en el bloque a. El problema anterior se debe a
la cuanticaci on de las variables en la literal negativa. Si replanteamos la consulta
5.4 Programas L ogicos Generales 65
anterior como en(a, b) entonces la resoluci on SLDNF alcanza una refutaci on
puesto que en(a, b) falla con una derivaci on nita.
Algunas veces se asume que la funci on de selecci on R permite seleccionar una
literal negativa si la literal no tiene variables libres o si tiene asociada
una substituci on computada vaca. Estas funciones de selecci on se conocen como
seguras (safe).
5.4. Programas L ogicos Generales
Con los desarrollos anteriores estamos en posici on de extender el lenguaje de los
programas denitivos para incluir cl ausulas que contienen literales tanto positivas
como negativas en su cuerpo. Estas fbf se llaman cl ausulas generales y a los pro-
gramas generales que ellas forman, se les conoce a veces como programas l ogicos
normales.
Denici on 45 (Cl ausula General) Una cl ausula general es una fbf de la forma
A
0

1
, . . . ,
n
donde A
0
es una fbf at omica y
1
, . . . ,
n
son literales (n 0).
Denici on 46 (Programa General) Un programa l ogico general es un conjunto
nito de cl ausulas generales.
Ahora podemos extender nuestro programa del mundo de los bloques con las
siguientes 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 cl ausula especica que un bloque es base si est a sobre la mesa y tiene
otro bloque encima. La segunda cl ausula indica que cuando no es cierto que un blo-
que no est a sobre la mesa, entonces est a sobre la mesa. La tercera cl ausula especica
que un bloque que est a sobre otro, no est a sobre la mesa.
Parece claro, pero la pregunta que deberamos hacernos es qu e tipo de sistema
de prueba queremos para los programas l ogicos generales y cuales ser an las aproxi-
maciones l ogicas a las sutilezas, algunas ya discutidas, introducidas por este tipo de
lenguajes.
Observen que aunque el lenguaje fue enriquecido, no es posible de cualquier for-
ma que una literal negativa sea consecuencia l ogica de un programa dado. La raz on
es la misma que para los programas denidos, la base de Herbrand de un programa
, B

es un modelo de en el que todas las literales negativas son falsas. Al igual


que con los programas denidos, la pregunta es entonces como lograr inferencias
66 5 Negaci on
negativas consistentes. Afortunadamente el concepto de compleci on de programa
puede aplicarse tambi en a los programas l ogicos generales.
Ejemplo 19 La compleci on de gana(X) mueve(X,Y), gana(Y) contiene la fbf:
X
1
(gana(X
1
) X,Y(X
1
= X, mueve(X,Y), gana(Y)))
Desafortunadamente, la compleci on de los programas normales puede ocasionar
paradojas. Consideren la cl ausula general p p, su compleci on incluye p p.
La inconsistencia del programa terminado se debe a que p/0 est a denida en t ermi-
nos de su propio complemento.
Una estrategia de programaci on para evitar este problema consiste en componer
los programas por capas o estratos, forzando al programador a referirse a las nega-
ciones de una relaci on hasta que esta ha sido totalmente denida. Se entiende que
tal denici on se da en un estrato inferior a donde se presenta la negaci on. En la de-
nici on del programa estraticado usaremos
p
para referirnos al subconjunto de
cl ausulas en que tienen a p como cabeza.
Denici on 47 (Programa Estraticado) Un programa general se dice estrati-
cado si y s olo si existe al menos una partici on
1

n
de tal que :
1. Si p(. . . ) q(. . . ),
i
entonces
q

1

i
;
2. Si p(. . . ) q(. . . ),
i
entonces
q

1

i1
.
Por ejemplo, el siguiente programa est a estraticado:

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 compleci on de un programa estraticado es siempre correcta (Apt, Blair y
Walker, 1988). Sin embargo, observen que determinar si un programa es estrati-
cado o no, es decidible; pero determinar si la compleci on de un programa es o
no decidible, es incorrecto. Por lo tanto, hay programas generales no estraticados,
cuya terminaci on es consistente.
5.5 Resoluci on SLDNF para programas generales 67
5.5. Resoluci on SLDNF para programas generales
Hemos revisado el caso de la resoluci on-SLDNF entre programas denitivos y
metas generales. Informalmente podemos decir que la resoluci on-SLDNF combina
la resoluci on SLD con los siguientes principios:
1. tiene exito si tiene un arbol-SLD nito que falla.
2. falla nitamente si y s olo si tiene una refutaci on-SLD.
El paso de programas denitivos a programas generales, es complicado. Para pro-
bar , debe de existir un arbol nito fallido para . Tal arbol puede contener
nuevas literales negativas, las cuales a su vez deben tener exito o fallar nitamente.
Esto complica considerablemente la denici on de la resoluci on-SLDNF para pro-
gramas generales. Por ejemplo, es posible llegar a situaciones parad ojicas cuando
los predicados est an denidos en t erminos de sus propios complementos. Conside-
ren el programa no estraticado:

Dada la meta inicial , se puede construir una derivaci on . La
derivaci on puede extenderse hasta una refutaci on si falla nitamente. De mane-
ra alternativa, si tiene una refutaci on, entonces la derivaci on falla. Helas! esto
es imposible pues la meta no puede tener una refutaci on y fallar nitamente al
mismo tiempo.
En lo que sigue, deniremos las nociones de derivaci on-SLDNF y arbol-SLDNF,
de manera similar a la derivaci on-SLD y a los arboles-SLD. La idea se concreta
en el concepto de bosque-SLDNF: un conjunto de arboles-SLDNF cuyos nodos
est a etiquetados con metas generales.
Denici on 48 (Bosque SLDNF) Sea un programa general, G
0
una meta gene-
ral, y R una funci on de selecci on. El bosque SLDNF de G
0
(usando y R) es el
bosque m as peque no, tal que:
1. G
0
es la raz del arbol.
2. Si G es un nodo en el bosque cuya literal seleccionada es positiva, entonces para
cada cl ausula tal que G
/
puede ser derivada de G y (con MGU), G tiene un
hijo etiquetado G
/
. Si no existe tal cl ausula, entonces G tiene un hijo etiquetado
FF (falla nita);
3. Si G es un nodo del bosque cuya literal seleccionada es de la forma (G es
de la forma
1
, . . . , L
i1
,
i
, L
i+1
, . . . ,
n
), entonces:
El bosque contiene un arbol cuyo nodo raz es .
Si el arbol con raz tiene una hoja etiquetada como 2con la substituci on
computada vaca , entonces G tiene un s olo hijo etiquetado FF;
Si el arbol con raz es nito y tiene todas sus hojas etiquetadas FF,
entonces G tiene un s olo hijo etiquetado (con substituci on asociada vaca )
como
1
, L
i1
, L
i+1
, . . . ,
n
.
68 5 Negaci on
Observen que la literal negativa seleccionada falla s olo si tiene una
refutaci on con la substituci on computada vaca . Como veremos m as adelante,
esta condici on que no era necesaria cuando denimos la resoluci on-SLDNF para
programas denitivos, es vital para la correctez de esta resoluci on en los programas
generales.
Los arboles del bosque-SLDNF son llamados arboles-SLDNF completos; y la
secuencia de todas las metas en una rama de un arbol-SLDNF con raz G es llamada
derivaci on-SLDNF completa de G (bajo un programa y una funci on de selecci on
R). El arbol etiquetado por G
0
es llamado arbol principal. Un arbol con la raz
es llamado arbol subsidiario si es una literal seleccionada en el bosque (el arbol
principal puede ser a su vez subsidiario).
Ejemplo 20 Consideren el siguiente programa general estraticado :
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 gura 5.2. El
arbol principal contiene una derivaci on fallida y una refutaci on con la substituci on
computada X/a.
Las ramas de un arbol-SLDNF en un bosque-SLDNF representan todas las
derivaciones-SLDNF completas de su raz, con base en la funci on de selecci on dada.
Hay cuatro clases de derivaciones-SLDNF completas:
1. derivaciones innitas;
2. derivaciones nitas fallidas (terminan en FF);
3. refutaciones (terminan en 2); y
4. 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 gura 5.3. El bos-
que incluye una derivaci on plantada para termina(X) y una derivaci on innita para
ciclo(X). Esto ilustra una de las razones por las cuales una derivaci on se planta: uno
de sus arboles subsidiarios contiene s olo derivaciones fallidas o innitas.
5.5 Resoluci on SLDNF para programas generales 69
base(X).
en(Y
0
, 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,Y
0
).
2
no en la mesa(a).
en(a,Y
0
).
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 tambi en conduce a una derivaci on plantada (ciclo en el
c omputo de la negaci on):
paradoja(X) ok(X).
ok(X) paradoja(X).
Intenten construir el bosque-SLDNF de este programa y observaran tambi en que
en este caso, la arbol principal es a su vez un arbol subsidiario.
La ultima raz on para que una derivaci on quede plantada es ilustrada por el si-
guiente programa:
70 5 Negaci on
top(X) bloqueado(X).
bloqueado(X) en(Y, X).
en(a, b).
Es evidente que top(a) debera poder derivarse de este programa. Sin embargo, el
arbol-SLDNF de la meta top(X) no contiene refutaciones. De hecho, esta meta
se planta a un cuando bloqueado(X) tiene una refutaci on. La raz on de esto es
que bloqueado(X) no tiene ninguna derivaci on que termine con una substituci on
computada vaca. A la meta top(X), Prolog no responde b, sino que todos
los bloques no est an en el tope de la pila! Esto se debe a la implementaci on de
la mayora de los Prolog. La denici on que dimos aqu de resoluci on-SLDNF es
correcta.
Teorema 8 (Correctez de la resoluci on-SLDNF) Sea un programa general y

1
, . . . ,
n
una meta general. Entonces:
Si
1
, . . . ,
n
tiene una substituci on de respuesta computada , entonces
comp() [=(
1

n
).
Si
1
, . . . ,
n
tiene un arbol-SLDNF nito que falla, entonces comp() [=
((
1

n
)).
La denici on de bosque-SLDNF no debe verse como una implementaci on de la
resoluci on-SLDNF, s olo representa el espacio ideal de computaci on donde la co-
rrectez puede ser garantizada.
Captulo 6
Corte y Aritm etica
Resumen La computaci on de un programa l ogico requiere la construcci on y reco-
rrido de un arbol-SLD. Esto no es necesariamente la forma m as eciente de compu-
taci on, por lo que en esta clase abordaremos dos extensiones de la programaci on
l ogica, implementadas en ISO Prolog, para acelerar las computaciones realizadas:
el corte y la aritm etica. Por simplicidad, la presentaci on se basa en los programas
l ogicos denitivos, aunque los temas discutidos son aplicables a las derivaciones y
arboles-SLDNF.
6.1. Corte: podando el arbol-SLD
El arbol-SLD de una meta denitiva puede tener muchas ramas que conducen al
fallo de la meta y muy pocas, o una sola rama, que conducen al exito. Por ello, el pro-
gramador podra querer incluir informaci on de control en sus programas, para evitar
que el int erprete construya ramas fallidas. Observen que esta meta-informaci on se
basa en la sem antica operacional del programa, por lo que el programador debe sa-
ber como se construyen y se recorren los arboles-SLD. El predicado !/0 denota la
operaci on de corte, y puede utilizarse como una literal en las metas denitivas. Su
presencia impide la construcci on de ciertos sub-arboles.
Un int erprete de Prolog recorre los nodos de un arbol-SLD primero en profun-
didad. El orden de las ramas corresponde al orden textual de las cl ausulas en el
programa. Cuando una hoja es alcanzada, el proceso de backtracking es ejecutado.
El proceso termina cuando no es posible hacer backtracking (todos los sub-arboles
de la raz del arbol han sido visitados).
Ejemplo 22 Asumamos el siguiente programa que dene que el padre de una per-
sona es su antecesor hombre:
71
72 6 Corte y Aritm etica
padre(X,Y) progenitor(X,Y), hombre(X).
progenitor(ben jamin, antonio).
progenitor(maria, antonio).
progenitor(samuel, benjamin).
progenitor(alicia, benjamin).
hombre(benjamin).
hombre(samuel).
El arbol-SLD de la meta padre(X, antonio) se muestra en la gura 6.1. Bajo la
funci on de selecci on implementada en Prolog, encontrar a la soluci on X/benjamin.
El intento por encontrar otra soluci on con X/maria, mediante el backtracking, fa-
llar a 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 derivaci on-SLD para la meta padre(X, antonio)
Para detallar la sem antica del corte, es necesario introducir algunos conceptos
auxiliares. En un arbol-SLD, cada nodo n
i
corresponde a una meta G
i
de una deri-
vaci on-SLD y tiene un atomo seleccionado asociado
i
:
G
0

0
G
1
. . . G
n1

n1
G
n
Asumamos que para cierto nodo n
k
,
k
no es una sub-meta de la meta ini-
cial. Entonces
k
es un atomo
i
del cuerpo de una cl ausula de la forma
0

1
, . . . ,
i
, . . . ,
n
cuya cabeza
0
unica con la sub-meta seleccionada en alg un no-
do n
0<j<k
, es decir un nodo entre la raz del arbol y el nodo n
k
. El nodo n
j
se conoce
como 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 cl ausula. Sin embargo, cuando el corte es seleccionado para computar la
resoluci on, este tiene exito inmediatamente (con la substituci on vaca como resul-
tado). El nodo donde ! fue seleccionado es llamado el nodo de corte. Un nodo de
corte puede ser visitado nuevamente durante el backtracking. En este caso, el cur-
so normal del recorrido del arbol es alterado (por denici on 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 ejecuci on
simplemente termina.
Ejemplo 23 La formulaci on del problema padre, nos dice que a lo m as existe una
soluci on para nuestra meta. cuando la soluci on se encuentra, la b usqueda puede
deternerse pues ninguna persona tiene m as de un padre. Para forzar esta situaci on,
el predicado de corte se agrega al nal de padre/2:
padre(X,Y) progenitor(X,Y), hombre(X), !.
Observen que el programa modicado en el ejemplo anterior s olo puede compu-
tar un elemento de la relaci on padre/2. El corte detendr a la b usqueda despu es de
encontrar la primer respuesta para la meta padre(X,Y). El origen del corte es
la raz del arbol, por lo que la b usqueda termina despu es de hacer backtracking al
nodo de corte. La otra rama del arbol no es recorrida. El arbol-SLD del programa
que incluye el corte se muestra en la gura 6.2.
padre(X, antonio)
progenitor(X, antonio), hombre(X), !.
hombre(ben).
!
2
Figura 6.2 Arbol de derivaci on-SLD para la meta padre(X, antonio) con las ramas fallidas
podadas.
Observen que la versi on modicada con el corte, no puede usarse para computar
m as de un elemento de la relaci on es padre de. El corte detendr a la b usqueda
despu es de encontrar la primer respuesta a la meta denitiva.
A partir de la denici on del corte, se sigue que los efectos del operador son:
1. Divide el cuerpo de la meta en dos partes, separando la ejecuci on de la recon-
sideraci on despu es de exito de !/0 , no es posible hacer backtracking haca
las literales a la izquierda del corte. Sin embargo, a la derecha del corte todo
funciona de manera usual.
2. Poda las ramas sin explorar directamente bajo origen(!). En otras palabras, no
habr a m as intentos de unicar la sub-meta seleccionada de origen(!) con el resto
de las cl ausulas del programa.
74 6 Corte y Aritm etica
El corte es controvertido. La intenci on al introducir el corte, es poder controlar la
ejecuci on de los programas, sin cambiar su signicado l ogico. Por tanto, la lectura
l ogica del corte es verdadero. Operacionalmente, si el corte remueve s olo ramas
fallidas del arbol-SLD, no tiene inuencia en el signicado l ogico de un progra-
ma. Pero el corte puede remover tambi en ramas exitosas del arbol-SLD, atentando
contra la completitud de los programas denitivos, o la correctez de los programas
generales.
Ejemplo 24 Es bien sabido que los padres de un reci en nacido est an orgullosos.
La proposici on puede representarse con la siguiente cl ausula denitiva:
orgulloso(X) padre(X,Y), recienNacido(Y).
consideren las siguiente cl ausulas 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 reci en nacido. Ahora, si remplazamos la
primera cl ausula, con su versi on que utiliza corte:
padre(X,Y) progenitor(X,Y), hombre(X), !.
Y preguntamos nuevamente a Prolog, si
orgulloso( juan).
la respuesta ser a No. Esto se debe a que la primer hija de juan en el programa
es maria. Una vez que esta respuesta se ha encontrado, no habr a m as intentos de
satisfacer la meta en origen(!). No se considerar an m as hijos de juan en la soluci on
computada.
El programa del ejemplo anterior se ha vuelto incompleto, algunas respuestas co-
rrectas no pueden ser computadas. M as grave a un es el caso de las metas generales,
donde se puede llegar a resultados incorrectos, por ejemplo, orgulloso( juan)
tendra exito en la versi on de nuestro programa que utiliza corte.
Hasta ahora hemos distinguido dos usos del corte: eliminar ramas fallidas en el
arbol-SLD; y podar ramas exitosas. Eliminar ramas fallidas se considera una pr acti-
ca sin riesgo, porque no altera las respuestas producidas durante la ejecuci on de un
programa. Tales cortes se conocen como cortes verdes. Sin embargo, este uso del
operador 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 eliminar a ramas falli-
das; pero para otras podar a ramas exitosas. Cortar ramas exitosas se considera una
pr actica 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 reci en nacida, agregaramos la cl ausula recienNacido(maria) a nuestro
programa. Entonces la meta orgulloso(X) nos dira que X/X/ juan est a orgu-
lloso. Esto es, juan tiene una doble raz on para estar orgulloso. Pero a nosotros nos
basta con saber s olo una vez, que orgulloso est a juan. Para evitar que Prolog nos
de la respuesta dos veces, deniramos:
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 respondera
de manera correcta a metas como min(2, 3, X) respondiendo que Si para X/2;
y para min(3, 2, X) respondera que Si para X/2. Sin embargo el programa
no es correcto. Consideren la meta min(2, 3, 3) y ver an que Prolog respondera
Si. La raz on de esto es que la segunda cl ausula dice: el menor de X e Y es siempre
Y. El corte est a eliminando algunas ramas fallidas, que seran utiles en la denici on
de min. La denici on correcta, usando corte, sera:
min(X,Y, X) X <Y, !.
min(X,Y,Y) X Y.
Un comentario nal. El corte puede usarse para implementar la negaci on en Pro-
log. Consideren las siguientes cl ausulas donde f ail es un predicado de Prolog que
carece de denici on y no puede ser denido por el usuario:
not(estudiante(X)) estudiante(X), !, f ail.
not(estudiante(X).
Esta denici on descansa enteramente en la semantica operacional de Prolog. Es-
to es, las sub-metas se deben resolver de izquierda a derecha, y las cl ausulas se
buscan en el orden en que aparecen en el texto del programa. Si queremos saber
si 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 eliminar a la segunda cl ausula y la meta original fallar a; Si la meta
not(estudiante( juan)) falla, la segunda cl ausula ser a intentada en el backtra-
cking y la meta negada tendr a exito.
Podemos denir not/1 haciendo uso del meta-predicado est andar de Prolog
call/1:
76 6 Corte y Aritm etica
not(X) call(X), !, f ail.
not(X).
El argumento a call/1 debe ser un atomo de base, de otra forma, el c omputo produce
substituciones y la implementaci on resulta l ogicamente 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-
ci on l ogica. Antes de intentar usar un corte, intenten escribir programas l ogicamente
correctos.
6.2. Aritm etica
Hemos demostrado que los programas denitivos pueden describir cualquier re-
laci on computable. Esto es, cualquier m aquina de Turing puede codicarse como
un programa l ogico denitivo. Esto signica que, desde el punto de vista te orico, la
programaci on l ogica es tan expresiva como otros paradigmas de programaci on. La
resoluci on y la b usqueda exhaustiva, proveen una herramienta universal de compu-
taci on.
Desafortunadamente, desde el punto de vista pr actico, esta no es la mejor forma
de computar todo. Consideren las operaciones aritm eticas sobre los n umeros na-
turales. Existen implementaciones en hardware extremadamente ecientes de tales
operaciones. As que es deseable que Prolog tenga acceso a las operaciones del pro-
cesador y su aritm etica de m aquina. El problema es Cuando es posible hacer cosas
parecidas sin destruir la naturaleza declarativa de los programas l ogicos?
Observen primero que las operaciones como suma/2 y multiplicacion/2 pueden
describirse f acilmente en un programa denitivo. Los n umeros naturales pueden
describirse mediante t erminos de base. Una forma est andar de hacer esto es utilizar
la constante 0 para representar el cero, y el functor unario s/1 para representar el
sucesor de un n umero. Los n umeros naturales consecutivos est an representados por:
0, s(0), s(s(0)), . . .
Las operaciones de adici on y multiplicaci on son funciones binarias sobre los
n umeros naturales. Los programas l ogicos proveen unicamente un formalismo para
representar relaciones. Sin embargo, una funci on binaria puede verse como una re-
laci on ternaria consistente en todas las tripletas X,Y, Z) tal que Z es el resultado de
aplicar la funci on a X e Y.
Ahora, es bien sabido que las operaciones de adici on y multiplicaci on se carac-
terizan por los axiomas de Peano:
6.2 Aritm etica 77
0+X = X
s(X) +Y = s(X +Y)
0X = 0
s(X) Y = (X Y) +Y
Estos axiomas relacionan argumentos y resultados de las operaciones. En forma
de programa l ogico denitivo, se formularan 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 dara como resultado si para X/s(s(s(s(s(0))))). Un arbol de refutaci on-SLD
es construido para obtener este resultado.
El programa puede usarse tambi en para computar resta y una forma limitada
de divisi on. Por ejemplo: suma(X, s(s(0)), s(s(s(0)))) representa la resta de tres
menos dos, dando como resultado Si para X = s(0).
Cuando comparamos estos ejemplos con la pr actica com un en programaci on,
resulta evidente que:
La representaci on de los n umeros naturales como t erminos de base no es adecua-
da para los humanos.
Las computaciones de la aritm etica 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 aritm eticas, puesto que suma/3 y mult/3
representan relaciones.
El primer problema se puede resolver f acilmente introduciendo arreglos sint acti-
cos: s
n
(0) = n. Tambi en se conocen t ecnicas para compilar expresiones aritm eti-
cas a c odigo ensamblador. El principal problema es c omo incorporar expresiones
aritm eticas sin destruir el signicado declarativo de los programas.
Asumamos que las expresiones aritm eticas aparecer an como t erminos en los
programas denitivos. Las respuestas de estos programas deber an tomar en con-
sideraci on la equivalente entre expresiones aritm eticas. Por ejemplo, consideren la
siguiente regla para computar impuestos: si el ingreso anual es mayor que 150000
dolares, entonces el impuesto es 30%, en otro caso se cobrar a el 25% del ingreso
menos 30000 dolares.
78 6 Corte y Aritm etica
impuesto(Ingresos, 0,5Ingresos) Ingresos > 150000.
impuesto(Ingresos, 0,25(Ingresos 30000)) Ingresos 150000.
Por lo tanto, una persona que gana 130000 dolares debera obtener para la meta
impuesto(130000, 25000) una respuesta de Si. Pero estas reglas no pueden
usarse para encontrar una refutaci on a la meta, ya que ninguna cabeza de regla
unica con la sub-meta de la meta. La raz on es que la unicaci on est andar es muy
d ebil, como para darse cuenta que 25000 y 0.25*(130000-30000) son equivalentes.
Por lo tanto, la equivalencia debe describirse mediante axiomas de igualdad para
la aritm etica, los cuales no han sido incluidos en el programa anterior.
De esta discusi on se sigue que es necesaria una extensi on al concepto de pro-
grama l ogico. Para nuestro ejemplo, el programa debera consistir de dos partes: un
conjunto de cl ausulas denitivas P, y un conjunto de axiomas de igualdad E, descri-
biendo la equivalencia entre los t erminos. Este tipo de programas ha sido estudiado
en la literatura, donde el resultado m as importante es el concepto de unicaci on ge-
neralizada, asociada a una teora de igualdad E y llamada E-unicaci on. Lo que
sigue es una breve introducci on a este tema.
Una teora de igualdad en cl ausulas denitivas es un conjunto (posiblemente
innito) de cl ausulas denitivas, donde cada atomo es de la forma s = t y s y t son
t erminos. Algunas veces, la forma de las cl ausulas se restringe a hechos.
Un programa denitivo con igualdad es un par P, E donde P es un programa
denitivo, que no contiene ocurrencias del predicado = /2 y E es una teora de
igualdad en cl ausulas denitivas.
Sea E una teora de igualdad en cl ausulas denitivas. Una substituci on es un
E-unicador de los t erminos s y t, si y s olo si s = t es una consecuencia l ogica
de E.
Ejemplo 27 Sea E una teora de igualdad que expresa las equivalencias propias
de las expresiones aritm eticas. Consideren las expresiones:
t
1
:= (2X) +1
t
2
:= Y +2
Por ejemplo, la substituci on =Y/(2X 1) es un E-unicador de t
1
y t
2
.
Ahora, para un programa dado P, E y una meta
1
, . . . ,
n
la refutaci on de la
meta puede construirse de la misma manera que para los programas denitivos, con
la diferencia de que utilizaremos E-unicaci on, en lugar de la unicaci on normal.
Encontrar E-unicadores puede verse como la resoluci on de ecuaciones en un
algebra denida por los axiomas de igualdad. Se sabe que el problema de la E-
unicaci on es en general indecidible. A un siendo decidible para alguna teora E,
pueden existir muchas soluciones a una ecuaci on dada. La situaci on donde existe
un unicador m as general, suele ser rara. Todo esto signica que, a un cuando es
posible construir E-unicadores, una nueva fuente de indeterminismo se introduce
con ellos.
6.2 Aritm etica 79
Asumamos ahora que una teora de igualdad E describe todas las funciones ex-
ternas, incluidas las operaciones aritm eticas, usadas en un programa l ogico. Esto
signica que para cualquier par de t erminos de base s y t, cuyos functores principa-
les denoten funciones externas, la f ormula s =t es una consecuencia l ogica de E, si
y s olo si, la invocaci on de s regresa el mismo resultado que la invocaci on de t. Para
t erminos base, la E-unicaci on es decidible. Esto puede ser explotado de la siguiente
manera: cuando una llamada a una funci on externa es encontrada como t ermino a E-
unicar, es invocada y su forma reducida es unicada por el procedimiento normal.
Observen que las funciones externas s olo pueden ser invocadas sobre argumentos de
base. Si algunas variables de la funci on externa no tienen valores, la llamada externa
provocar a un error y no se encontrar a un E-unicador.
Esta idea es incorporada en el ISO Prolog. Los enteros son representados por
numerales como 0, 1, 2006, etc. Tambi en existe un soporte limitado para n umeros
reales como 3.14, 0.333, etc. L ogicamente, los numerales son constantes. Un n ume-
ro limitado de functores con notaci on inja est an predenidos en Prolog: +, -, *, /
(divisi on en reales), // (divisi on entera), mod, etc.
Dos predicados predenidos se ocupan de la E-unicaci on. El predicado =:= /2
checa si dos t erminos de base son E-unicables. Por ejemplo, la meta 23 =:=
2+4 responde Si con la substituci on vaca computada. Si los argumentos no son
t erminos de base, Prolog aborta la ejecuci on del programa con un mensaje de error.
El predicado is/2 unica el primer argumento con la forma reducida del segun-
do. Por ejemplo X is 2 +2 responde Si con la substituci on X/4. El primer
argumento puede no ser una variable, en lo que constituye un caso especial de la
E-unicaci on =:= /2. Por ejemplo, X +1 is 2 +3 falla aunque exista un E-
unicador X/4.
Otros predicados est andar incluyen = = /2 que checa cuando dos t erminos no
son E-unicables. El lenguaje tambi en provee predicados para comparar n umeros,
como >,<, y .
Parte II
Prolog
Captulo 7
Introducci on a Prolog
Este captulo constituye una gua r apida al lenguaje prolog.
83
Captulo 8
Estrategias b asicas de resoluci on de problemas
Resumen En este captulo revisaremos los conceptos de espacio de soluciones y
b usquedas en espacios de soluciones. Se revisara la representaci on de estos espacios
en Prolog y se ejemplicar a el uso de estrategias como las b usquedas primero en
profundidad, primero en amplitud y guiadas por funciones de utilidad.
8.1. Introducci on
Esta sesi on la dedicaremos a estudiar un esquema general de representaci on de
problemas y sus soluciones, ampliamente utilizado en la Inteligencia Articial. Con-
sideremos el ejemplo mostrado en la gura 8.1. El problema a resolver consiste en
encontrar un plan para colocar los cubos en una conguraci on determinada, par-
tiendo de una conguraci on inicial. S olo un bloque puede moverse a la vez y las
acciones del brazo son del tipo pon A en la mesa, pon B en C, etc. Dos con-
ceptos aparecen en esta descripci on: 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 conguran 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 b asicas de resoluci on de problemas
cial del problema y un nodo representando la soluci on nal, un nodo meta. C omo
podemos representar tal grafo en Prolog?
Figura 8.2 Espacio de estados para el problema de ordenamiento de bloques.
El espacio de estados ser a representado por una relaci on s(X,Y) que ser a verda-
dera si existe un movimiento v alido en el espacio de estados del nodo X al nodo
Y. El nodo Y recibe el nombre de sucesor de X. Si existe un costo asociado a las
acciones esto puede representarse por un tercer argumento de s, s(X,Y,Costo).
Esta relaci on puede ser especicada extensionalmente por un conjunto de hechos.
Sin embargo, para cualquier problema interesante, esto es irrealizable. La relaci on
s es normalmente denida intensionalmente mediante un conjunto de reglas que
computan el sucesor de un nodo dado.
Otro detalle importante tiene que ver con la representaci on de los estados del pro-
blema, los nodos. La representaci on debe de ser compacta y permitir la computaci on
eciente de los nodos sucesores; y posiblemente el costo asociado a las acciones.
Tomemos como ejemplo el mundo de los bloques. Cada estado del problema
puede ser representado por una lista pilas. Cada pila a su vez puede ser representada
por una lista de bloques. El tope de cada pila es el primer elemento de cada lista
de bloques. La pila vaca est a representada por la lista vaca. As, el estado inicial
mostrado en la gura 8.1 es la lista: [[c,b,a],[],[]] (suponemos, que en la
mesa s olo hay espacio para 3 pilas de bloques).
Una meta es cualquier arreglo con los bloques en el orden deseado. Existen tres
soluciones en este caso:
[[a,b,c],[],[]],
[[],[a,b,c],[]] o
[[],[],[a,b,c]].
La relaci on sucesor puede programarse de acuerdo a la siguiente regla: el
Estado2 es sucesor de Estado1 si hay dos pilas Pila1 y Pila2 en Estado1 y el
tope de la pila Pila1 puede moverse a Pila2. Esto se traduce a Prolog como:
8.2 B usqueda 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 relaci on s nos permite vericar si un nodo es sucesor de otro, por ejemplo:
1 ?- s([[b],[a,c],[]],[[],[b,a,c],[]]).
2 Yes
3 ?- 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 soluci on ser a encontrada buscando en el espacio de esta-
dos del problema.
8.2. B usqueda primero en profundidad
Dada la formulaci on de un problema en t erminos de su espacio de estados, exis-
ten diversas estrategias para encontrar un camino soluci on. Dos estrategias b asica
son las b usquedas primero en profundidad y primero en amplitud. En esta secci on
implementaremos la b usqueda primero en profundidad.
Comenzaremos con una idea simple. Para encontrar un camino soluci on Sol, de
un nodo dado N a un nodo meta:
Si N es un nodo meta, entonces Sol = [N], o
Si 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 b asicas de resoluci on de problemas
De forma que para computar la soluci on al problema de los bloques, preguntamos
a Prolog:
?- solucion([[c,b,a],[],[]],Sol).
Sol = [[[c, b, a], [], []],
[[b, a], [c], []],
[[a], [b, c], []],
[[], [a, b, c], []]]
Yes
La soluci on 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 cl ausula meta/1
funciona vericando si la soluci on [a, b, c] es miembro del estado N. Como esta meta
falla, Prolog intentar a satisfacer su meta inicial con la segunda cl ausula solucion/2.
Esto implica generar un sucesor de N (llamada a s(N, N1)). As que se computa
N1 = [[b, a], [c], []] y se verica si esto es una soluci on. 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 gr aco de
SWI-Prolog. Para ello invoquen la meta guitracer. Al trazar una funci on ver an una
ventana como la mostrada en la gura 8.3. La ventana superior izquierda muestra
las substituciones computadas, la derecha las pilas formadas, y la inferior muestra
el c odigo del programa que est a siendo trazado.
Figura 8.3 Traza gr aca de SWI-Prolog.
8.3 B usqueda primero en amplitud 89
Una primera mejora a este algoritmo, consiste en evitar que los nodos visitados
vuelvan a ser expandidos, evitando as caer en ciclos. La idea es llevar un registro
de los nodos visitados. El resultado se da del nodo nal haca 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 b usquedas innitas sobre ramas no ciclicas, es
posible establecer un limite a la profunidad de la b usqueda. Para ello deniremos
primeroProfundidad2/3, donde el tercer argumento es la profunidad m axima de la
b usqueda.
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. B usqueda primero en amplitud
En contraste con la b usqueda primero en profundidad, la estrategia de b usqueda
primero en amplitud elige visitar primero los nodos que est an m as cercanos a la raz,
por lo que el arbol de b usqueda crece m as en amplitud, que en profundidad.
Esta estrategia de b usqueda es m as complicada de programar. La raz on de ello es
que debemos mantener un conjunto de nodos candidatos alternativos, no unicamente
un nodo como lo hacamos al buscar en profundidad. Adem as, debemos mantener
los caminos, si queremos obtenerlos como parte de la soluci on computada. De forma
que:
?- primeroEnProfundidad(Caminos,Sol).
90 8 Estrategias b asicas de resoluci on de problemas
es verdadera, si y s olo si alg un camino miembro del conjunto de candidatos
Caminos, puede extenderse hasta un nodo meta. Sol es el camino soluci on.
El conjunto Caminos ser a representado como listas de caminos, donde cada ca-
mino se representar a como una lista de nodos en el orden inverso en que fueron
visitados. Esto es, la cabeza de la lista que representa un camino tendr a el ultimo
nodo generado; y el ultimo nodo en la lista ser a el estado inicial de la b usqueda. Al
iniciar Caminos tiene un s olo camino candidato: [[NodoInicial]].
El algoritmo de la b usqueda 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 la
soluci on al problema. De otra forma
Eliminar 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 este
conjunto de extensiones al nal del conjunto de candidatos. Ejecutar la b usqueda
primero en amplitud en este nuevo conjunto de caminos candidatos.
Para generar las extensiones de un s olo paso, dado un camino, podemos usar el
predicado predenido bago f Veamos el programa:
1 %%% solucion(Inicio,Sol) Sol es un camino (en orden inverso)
2 %%% de Inicio a una meta
3
4 solucion(Inicio,Sol) :-
5 primeroEnAmplitud([[Inicio]],Sol).
6
7 %%% primeroEnAmplitud([Camino1,Camino2,...],Sol) Sol es una
8 %%% extension haca la meta de alguno de los caminos
9
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 vaca)
25
26 extender(Camino_,[]).
Si aplicamos este programa de b usqueda al programa del mundo de los cubos,
obtendremos:
8.3 B usqueda 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 gr afo de la gura 8.4, codicamos 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
k j
a
b c
d e g
h i
Figura 8.4 Gr aco 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 b usqueda primero en amplitud, la primer soluci on
encontrada involucra la meta f m as cercana al nodo raz.
92 8 Estrategias b asicas de resoluci on de problemas
8.4. B usqueda primero el mejor
Un programa de b usqueda primero el mejor, puede verse como una mejora a la
b usqueda primero en amplitud. El algoritmo de primero el mejor comienza tambi en
con un nodo inicial y mantiene una lista de caminos candidato. La b usqueda por
amplitud siempre elige para expandir el camino candidato m as corto y la b usqueda
primero el mejor ana esta estrategia.
Asumamos que una funci on costo es denida para los arcos de un espacio de
estados de un problema. De forma que c(n, n
/
) es el costo de moverse de un nodo n
al nodo n
/
en el espacio de estados.
Sea el estimador heurstico una funci on f tal que para cada nodo n en el espacio
de estados, f (n) estima la dicultad de llegar a n. De acuerdo a esto, el nodo
m as promisorio ser a aquel que minimice f . Usaremos aqu una forma especial de la
funci on f que nos llevar a al bien documentado algoritmo A*. f (n) ser a construida
para estimar el costo del mejor camino soluci on entre un nodo inicial s y un nodo
meta, con la restricci on de que el camino pase por el nodo n. Supongamos que tal
camino existe y que un nodo meta que minimiza su costo es t. Entonces el estimado
de f (n) puede calcularse como la suma de dos t erminos:
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 el
estimado 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 heurstico f (n) = g(n) +h(n).
Cuando un nodo n es encontrado en el proceso de b usqueda, tenemos la siguiente
situaci on: un camino de s a n debi o ser encontrado, y su costo puede computarse co-
mo la suma del costo de cada arco en el camino. Este camino no es necesariamente
un camino optimo entre s y n (puede haber caminos mejores no cubiertos a un por la
b usqueda), pero su costo puede servir como un estimador g(n) del costo mnimo de
8.4 B usqueda primero el mejor 93
ir de s a n. El otro t ermino, h(n), es m as problem atico, porque el espacio entre n y t
no ha sido explorado a un, por lo que su valor es una verdadera adivinanza heursti-
ca, resuelta con base en el conocimiento general del algoritmo sobre la estructura
particular del problema a resolver. Como h depende del dominio del problema, no
existe un m etodo universal para su construcci on. Asumamos por el momento que
una funci on h nos es dada y concentr emonos en los detalles del programa primero
el mejor.
e
s
a
b
c
f
d
g
t
2
2
3
3
2
2
5
2
2
7
4
2
3
4
4
5
Figura 8.6 Mapa entre ciudades, sus distancias por carretera, y sus distancias lneales a la meta
(cuadros).
Como ejemplo consideren el siguiente problema. Dado un mapa (Fig. 8.6), la
tarea es encontrar la ruta m as corta entre una ciudad inicial s y una ciudad meta t. Al
estimar el costo del resto del camino de la ciudad X a la meta, usamos simplemente
la 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 b usqueda de primero el mejor consistente
de dos procesos, cada uno de ellos explorando uno de los dos caminos alternativos:
el proceso 1 para el camino va a y el proceso 2 para el camino va e. En los pasos
iniciales el proceso 1 est a m as activo porque los valores f en ese camino son m as
bajos que los del otro. En el momento en que el proceso 1 llega a c y el proceso 2
sigue en e, la situaci on cambia:
f (c) = g(c) +h(c) = 6+4 = 10
f (e) = g(e) +h(e) = 2+7 = 9
94 8 Estrategias b asicas de resoluci on de problemas
De forma que f (e) < f (c) y ahora el proceso 2 procede al nodo f y el proceso 1
espera. 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 s olo
hasta el nodo d ya que f (d) = 12 > 11. El proceso 2 continua corri endo hasta llegar
a 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 b usqueda en el mapa de las ciudades.
Este proceso de b usqueda parte del nodo inicial (la ciudad s) y genera nuevos
nodos sucesores, expandiendose siempre en la direcci on m as promisora de acuerdo
a los valores de la funci on f . Esto genera un arbol que crece hasta llegar a un nodo
meta. Este arbol ser a representado en nuestro programa de b usqueda primero el
mejor por t erminos de dos formas:
1. l(N, F/G) representa una hoja del arbol, donde N es un nodo en el espacio de
estados, 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 sub arboles
Subs no vacos. F es el valor f actualizado de N. El valor para f del sucesor m as
prometedor de N. La lista Subs se ordena de acuerdo al valor creciente de los
valores para f de los sub arboles.
8.4 B usqueda primero el mejor 95
Por ejemplo, consideren nuevamente la b usqueda ilustrada en la gura 8.7. En el
momento en que el nodo s es expandido, el arbol de b usqueda 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 m as promisorio de los hijos de s (a). El
arbol crece expandiendo el nodo m as primisorio. El m as cercano competidor de a
es 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 cual
excede el umbral de crecimiento jado en 9. En ese momento no se permite que a
crezca m as. 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 es
9. Estos valores se actualizaron porque fueron generados los nodos b y c. Ahora el
nodo sucesor m as promisorio de s es s es e con un valor f de 9.
La actualizaci on de los f valores es necesaria para permitir al programa reco-
nocer el sub arbol m as promisorio en cada nivel del arbol de b usqueda (esto es, el
sub arbol que contiene la hoja m as promisoria). Esta modicaci on de los estimados
de f , nos lleva a la generalizaci on de la denici on de f que extiende su denci on de
nodos a arboles. Para una hoja n del arbol, mantenemos la denici on original:
f (n) = g(n) +h(n)
Para un sub arbol T, cuya raz es n y tiene como sub arboles S
1
, S
2
, . . . :
f (T) = mn
i
f (S
i
)
El programa que implementa la b usqueda primero el mejor es como sigue. Pri-
mero denimos una funci on interfaz, que encuentre la soluci on Sol a partir de un
estado 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 b usqueda. Sus
argumentos incluyen:
El Camino recorrido, inicialmente vaco;
El Arbol actual de b usqueda, inicialmente una hoja con el nodo Inicio y valor de
0 para F y G;
El Umbral o limite para la expansi on del arbol ( f -valor m aximo), para este ejem-
plo 9999 es suciente (ning un costo en el arbol ser a mayor que este valor);
96 8 Estrategias b asicas de resoluci on de problemas
El Arbol1 expandido bajo el Umbral (en consecuencia el f -valor de este arbol
es mayor, al menos que se halla encontrado la soluci on). Originalmente se pasa
una variable an onima en la llamada;
La bandera Solucionado que puede tomar los valores si, no, o nunca;
y la soluci on, si existe, al problema regresado en la variable Sol.
El crecimiento del arbol se programa por casos. El caso m as simple corresponde
a aquel donde arbol de b usqueda es una hoja, y su Nodo es una meta del espacio
de estados. En ese caso [Nodo[Camino] es la soluci on Sol buscada. Observen la
bandera Solucionado = si.
1 expandir(Camino,l(Nodo,_),_,_,si,[Nodo|Camino]) :-
2 meta(Nodo).
El segundo caso corresponde a un arbol de b usqueda que es una hoja, cuyo Nodo
no es una meta del espacio de estados y tiene un f -valor menor (o igual) que el
Umbral. Para ello se generan los arboles sucesores del arbol de b usqueda actual
(Arboles) usando el predicado listaSucc/3. El arbol debe expandir/6 o fallar con
Solucionado = 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 soluci on al problema:
1 expandir(_,t(_,_,[]),_,_,nunca,_) :- !.
El caso cinco dene la situaci on cuando el f -valor es mayor que el Umbral y se
inhibe el crecimiento del arbol:
8.4 B usqueda primero el mejor 97
1 expandir(_,Arbol,Umbral,Arbol,no,_):-
2 f(Arbol,F),F>Umbral.
continuar/7 decide como procede la b usqueda de acuerdo al arbol expandido. Si
una soluci on Sol se ha encontrado, se regresa este valor. En cualquier otro caso, la
expansi on 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 b asicas de resoluci on de problemas
28
29 min(_,Y,Y).
Captulo 9
Sistemas Expertos
Resumen En este captulo abordaremos uno de los productos tpicos de la Inte-
ligencia Articial: los Sistemas Expertos. Normalmente, usamos herramientas de
desarrollo conocidas con shells para construir este tipo de sistemas, pero si nece-
sitamos congurar un shell para una aplicaci on en particular, es necesario conocer
como es que un sistema experto se construye desde cero. El captulo constituye el
segundo ejemplo del uso de Prolog para resolver problemas tpicos de la Inteligencia
Articial
9.1. Introducci on
Los sistemas expertos (SE) son aplicaciones de c omputo que involucran expe-
riencia no algortmica, para resolver cierto tipo de problema. Por ejemplo, los siste-
mas expertos se usan para el diagn ostico al servicio de humanos y m aquinas. Existen
SE que juegan ajedrez, que planean decisiones nancieras, que conguran compu-
tadoras, que supervisan sistemas de tiempo real, que deciden polticas de seguros, y
llevan a cabo dem as tareas que requieren de experiencia humana.
Los SE incluyen componentes del sistema en s e interfaces con individuos con
varios roles. Esto se ilustra en la gura 9.1. Los componentes m as importantes son:
Base de conocimientos. La representaci on declarativa de la experiencia, muchas
veces en forma de reglas IF-THEN.
Almac en de trabajo. Los datos especcos al problema que se est a resolviendo.
M aquina de inferencia. El c odigo central del SE que deriva recomendaciones con
base en la base de conocimientos y los datos especcos del problema.
Interfaz del usuario. El c odigo que controla el di alogo entre el usuario y el SE.
Para entender un SE es necesario entender tambi en el rol de los usuarios que
interaccionan con el sistema:
Experto del Dominio. El o los individuos que son los expertos en resolver el
problema que el SE intentar a resolver.
99
100 9 Sistemas Expertos
Experto en
el Dominio
Ingeniero del
Conocimieno
Usuario
Ingeniero en
Sistemas
Interface con
el Usuario
Mquina de
Inferencia
Base de
Conocimiento
Almacn de
Trabajo
Experiencia
Figura 9.1 Componentes de un sistema experto e interfases humanas
Ingeniero de Conocimiento. El individuo que codica el conocimiento de los
expertos en forma declarativa, para que pueda ser usado por el SE.
Usuario. El individuo que consultar a el SE para obtener los consejos que espe-
rara de un experto del dominio.
Muchos SE se producen en ambientes de desarrollo conocidos como shells. Un
shell es un sistema que contiene la interfaz del usuario, un formato de conocimiento
declarativo para la base de conocimientos y una m aquina de inferencia. El ingeniero
de conocimiento usa el shell para construir un SE que resuelve problemas en un
dominio particular.
Si el sistema se construye desde cero, o utilizando shells congurados para cierto
tipo de aplicaciones, otro individuo entra en escena:
Ingeniero de Sistemas. La persona que construye la interfaz del usuario, dise na
el formato declarativo de la base de conocimientos, e implementa la m aquina de
inferencia adivinan cual es su rol?
En realidad eso depende de la talla del proyecto: El ingeniero de conocimiento
y el ingeniero del sistema, pueden ser la misma persona. El dise no del formato
de la base de conocimientos y su codicaci on est an ntimamente relacionados. Al
proceso de codicar el conocimiento de los expertos, se le conoce como ingeniera
del conocimiento. Siendo esta una tarea complicada, se espera el uso de los shells
haga posible la reutilizaci on del conocimiento codicado. En estas sesiones nos
concentraremos en la programaci on en Prolog de los SE al margen del uso de las
shells.
9.2 Caractersticas de los SE 101
9.2. Caractersticas de los SE
Los SE poseen las siguientes caractersticas, en menor o mayor grado:
Razonamiento guiado por las metas y encadenamiento hacia atr as. Una t ecnica
de inferencia que usa las reglas IF-THEN para descomponer las metas en sub-
metas m as f aciles de probar.
Manejo de incertidumbre. La habilidad del SE para trabajar con reglas y datos
que no son conocidos con precisi on.
Razonamiento guiado por los datos y encadenamiento hacia adelante. Una t ecni-
ca de inferencia que usa las reglas IF-THEN para deducir soluciones a un pro-
blema a partir de los datos iniciales disponibles.
Representaci on de datos. La forma en que los datos especcos a un problema
dado, son almacenados y accesados por el SE.
Interfaz del usuario. La parte del SE que se usa para una interacci on m as amiga-
ble con el usuario.
Explicaci on. La habilidad del SE para explicar sus procesos de razonamiento y
su uso en el c omputo de recomendaciones.
9.2.1. Razonamiento basado en metas
El encadenamiento hacia adelante, o razonamiento basado en metas, es una for-
ma eciente de resolver problemas que pueden ser modelados como casos de se-
lecci on estructurada; donde la meta del SE es elegir la mejor opci on de entre varias
posibilidades enumeradas. Por ejemplo, los problemas de identicaci on caen en esta
categora. Los problemas de diagn ostico tambien caben aqu, pues se trata de elegir
el diagn ostico adecuado.
El conocimiento se codica en reglas que describen como es que cada caso po-
sible podra ser seleccionado. La regla rompe el problema en sub-problemas. Por
ejemplo, las siguientes reglas formaran parte de un SE para identicar aves:
1 IF
2 familia es albatros AND
3 color es blanco
4 THEN
5 ave es albatros laysan.
6
7 IF
8 familia es albatros AND
9 color es negro
10 THEN
11 ave es albatros de pies negros.
El sistema puede usar otras reglas para resolver las sub-metas planteadas por las
reglas de alto nivel, por ejemplo:
102 9 Sistemas Expertos
1 IF
2 orden es tubonasales AND
3 tamano es grande AND
4 alas es grandes anguladas
5 THEN
6 familia es albatros.
9.2.2. Incertidumbre
Es muy com un en la resoluci on de problemas de selecci on estructurada, que la
respuesta nal no es conocida con total certeza. Las reglas del experto pueden ser
vagas, o el usuario puede estar inseguro sobre sus respuestas. Esto es f acilmente
observable en el diagn ostico m edico. Los SE normalmente usan valores num ericos
para representar certidumbre. Existen diveras maneras de denirlos y usarlos en el
proceso de razonamiento.
9.2.3. Razonamiento guiado por los datos
Para muchos problemas no es posible enumerar las soluciones alternativas a las
preguntas planteadas con antelaci on. Los problemas de conguraci on caen en esta
categora. El encadenamiento hacia adelante, o razonamiento guiado por los datos,
usa reglas IF-THEN para explorar el estado actual en la soluci on del problema y
moverse a estados m as cercanos a la soluci on.
Un SE para acomodar el mobiliario puede tener reglas para la ubicaci on de un
mueble en particular. Una vez que un mueble ha sido colocado, se puede proceder
con los dem as. La regla para colocar la TV enfrente del sof a es como sigue:
1 IF
2 no_colocada tv AND
3 sofa en pared(X) AND
4 pared(Y) opuesta a pared(X)
5 THEN
6 colocar tv en pared(Y).
Esta regla toma un estado del problema con la televisi on no situada y regresa un
estado nuevo, donde la televisi on ya ha sido colocada. Puesto que la televisi on ya
ha sido colocada en su lugar, esta regla no volver a a ser disparada por el SE. Otras
reglas ser an usadas para colocar el resto de los muebles hasta terminar.
9.3 Usando la m aquina de inferencia de Prolog 103
9.3. Usando la m aquina de inferencia de Prolog
Como pueden haber adivinado, Prolog posee una m aquina de inferencia por en-
cadenamiento haca atr as. Esta m aquina puede usarse parcialmente para implemen-
tar algunos SE. Las reglas de Prolog ser an usadas para representar conocimiento
y su m aquina de inferencia ser a usada para derivar conclusiones. Otras partes del
sistema, como la interfaz con el usuario deber an escribirse usando Prolog.
Usaremos el problema de identicaci on de aves norteamericanas para ilustrar la
construcci on de un SE con Prolog. La experticia del SE se basa en un subconjunto de
las reglas reportadas en Birds of North America de Robbins, Bruum, Zim y Singer.
Las reglas del SE estar an dise nadas para ilustrar como se pueden representar varios
tipos de conocimiento, en vez de buscar una identicaci on precisa de las aves.
9.3.1. Reglas
Las reglas de un SE normalmente toman el siguiente formato:
1 IF
2 primera premisa AND
3 segunda premisa AND
4 ...
5 THEN
6 conclusion
La parte IF de la regla se conoce con el lado izquierdo de la regla (LHS), y la parte
del THEN se conoce como el lado derecho de la regla (RHS). Esto es equivalente a
la semantica de la regla Prolog:
1 conclusion :-
2 primera premisa,
3 segunda premisa,
4 ...
Esto puede ser confuso pu es la regla en prolog dice m as THEN-IF que IF-THEN.
Retomemos los ejemplos anteriores, si queremos representar en Prolog la regla:
1 IF
2 familia es albatros AND
3 color es blanco
4 THEN
5 ave es albatros laysan
Tendramos 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 son
cl ausulas 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 almacenar
hechos acerca del ave que deseamos identicar con el SE. Por ejemplo, si agregamos
estos hechos al programa:
1 familia(albatros).
2 color(obscuro).
Ahora podemos usar la pregunta siguiente:
1 ?- ave(X).
2 X = albatros_patas_negras
3 Yes
Observen que a un en esta etapa temprana tenemos un SE completo, donde la
experticia consiste en distinguir entre cuatro aves. La interfaz con el usuario es el
REPL de Prolog y los datos de entrada se almacenan directamente en el programa.
9.3.2. Reglas para relaciones jer arquicas
El siguiente paso ser a representar la naturaleza jer arquica del sistema de clasi-
caci on de un ave. Esto incluir a reglas para identicar la familia y el orden del ave.
Continuando con el albatros y el cisne, los predicados para orden/1 y f amilia/1
son:
1 orden(nariz_tubular) :-
2 fosas(externas_tubulares),
9.3 Usando la m aquina 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 identicar al albatros a partir de observaciones fundamentales
sobre el ave. En la primer versi on, f amilia/0 fue implementada como un hecho.
Ahora f amilia/1 es implementada como una regla. Los hechos del SE ahora reejan
m as 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_negras
3 Yes
9.3.3. Reglas para otras relaciones
El ganso canadiense puede usarse para agregar complejidad al sistema. Debido a
que esta ave pasa los veranos en Canad a y los inviernos en los Estados Unidos, su
identicaci on se ve afectada por donde ha sido vista y en que estaci on. Dos reglas
ser an 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 jerarqua 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 necesitar an de predicados m ultiples para ser identicada. Por ejemplo,
el Mallard (Anas platyrhynchos), o pato com un del norte, macho tiene la cabeza
verde con un anillo blanco; la hembra tiene la cabeza caf e 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 situaci on del libro de las aves norte americanas puede
ser expresado f acilmente en Prolog. Las reglas expresadas forman la base de cono-
cimientos del SE. El unico punto d ebil 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 para
el usuario, que pregunte por la informaci on cuando esto sea necesario, en lugar de
forzar al usuario a introducirla como hechos del programa.
Antes de pensar en un predicado pregunta, es necesario entender la estructura de
los datos que ser an preguntados. Todos los datos, manejandos hasta ahora, han sido
de la forma atributovalor. Por ejemplo, los atributos del pato del norte Mallard, son
mostrados en la gura 9.1.
atributo valor
familia pato
voz graznido
cabeza verde
Cuadro 9.1 Atributos valor para el mallard
Esta es una de las representaciones m as simples usadas en los SE, pero es su-
ciente para muchas aplicaciones. Existen representaciones m as expresivas, como
los tripletes objetoatributovalor, o las redes sem anticas, o los marcos.
Como estamos programando en Prolog, la riqueza del lenguaje puede usarse di-
rectamente en el SE. Por ejemplo, los pares atributovalor han sido representados
como predicados unarios de la forma atributo(valor): familia(pato), voz(graznido),
cabeza(verde). Pero en region/1 usamos la membresia en listas para su denici on.
Usaremos el predicado pregunta para determinar con ayuda del usuario, cuando
un par atributovalor es verdadero. El SE debe modicarse para determinar que
atributos son vericables por el usuario. Esto se logra con reglas para los atributos
que 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), llamar a a pregunta/2
en lugar de consultar su base de conocimientos. Si pregunta(color, blanco) tiene
exito, entonces color(blanco) tambi en lo tiene. La versi on m as simple de pregunta
es como sigue:
1 pregunta(Atrib,Val):-
2 write(Atrib:Val),
3 write(? ),
4 read(si).
108 9 Sistemas Expertos
El predicado read/1 tendr a exito s olo si el usuario responde si y falla si el
usuario responde cualquier otra cosa. Ahora el programa puede ser ejecutado sin
datos 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_laysan
9 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. De
esta manera el SE nos preguntara nuevamente informaci on que ya sabe. De alguna
manera deberamos implementar un predicado pregunta que recuerde lo pregunta-
do.
Deniremos un nuevo predicado conocido/3 que nos ayude a recordar las res-
puestas del usuario. Las respuestas no se guardar an directamente en memoria, sino
que ser an guardadas din amicamente con asserta/1 cuando pregunta provea infor-
maci on 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.
Tambi en 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 usuario
pregunte una sola vez:
1 pregunta(A,V) :-
2 not(multivariado(A)),
3 conocido(si,A,V2),
4 V \== V2,
5 !,
6 fail.
Una gua sobre los valores v alidos para un atributo se implementa con el predi-
cado menu pregunta que trabaja de manera an aloga 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 denici on 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 identicaci on de aves tiene dos partes: una base de conocimientos,
que incluye la informaci on especca sobre las aves; y los predicados para controlar
la interfaz con el usuario. Al separar estas dos partes, podemos crear un shell de SE.
Con ello podemos crear un nuevo SE que identique, por ejemplo, peces y reutilizar
la parte de control de la interfaz.
Un cambio mnimo es necesario para separar las dos partes de nuestro SE. Ne-
cesitamos un predicado de alto nivel que inicie el proceso de identicaci on. Puesto
que no sabemos de antemano lo que el SE va a identicar, el shell buscar a satisfa-
cer un predicado llamado meta. Cada base de conocimiento deber a tener denido
meta/1, por ejemplo, para el caso de identicaci on de aves tendramos:
1 meta(X) :- ave(X).
como primer predicado en la base de conocimientos aves.
El shell tendr a un predicado solucion/0 que llevar a 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 denidos previa-
mente con conocido/3, cada vez que una consulta se va a ejecutar. Esto permite al
usuario ejecutar solucion multiples veces en una sola sesi on. El predicado de f ine/2
permite indicarle a Prolog que conocido estar a denido en el SE, de forma que no
cause error la primera utilizaci on de este predicado. Este predicado puede variar
dependiendo de la versi on de Prolog utilizada.
De esta manera tenemos que el SE ha sido dividido en dos partes. Los predicados
en 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 deben
ser cargados:
1 ?- consult(shell).
2 yes
3 ?- consult(aves.kb).
4 yes
5 ?- solucion.
6 fosas_nasales : externas_tubulares ? ...
9.5.1. REPL
El shell puede ser mejorado construyendo un ciclo de comandos read-eval-print
loop. Para ello deniremos el predicado se:
1 se :-
2 bienvenida,
9.6 Encadenamiento haca atr as 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.), nl
12
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 gura 9.2.
9.6. Encadenamiento haca atr as con incertidumbre
Como hemos mencionado, el encadenamiento haca adelante resulta conveniente
cuando los problemas a resolver son del tipo selecci on estructurada, como en el
ejemplo de la clasicaci on de aves. Sin embargo, en adem as de que hemos asumido
que la informaci on completa est a disponible para resolver el problema, tambi en
hemos 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 la
bruma, con lo que sera difcil precisar si su color es blanco u obscuro. Es de esperar
que 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 haca atr as. Evidentemente, este SE tendr a un formato de reglas
propio, diferente a las reglas de Prolog, y por lo tanto, una m aquina de inferencia
propia.
112 9 Sistemas Expertos
Interfaz del Usuario
se
pregunta
menu_pregunta
Mquina de inferencia
solucion
cargar
Base de Conocimientos
meta
reglas
mulivaluado
preguntado
Memoria de trabajo
conocido
Figura 9.2 El shell del SE.
9.6.1. Factores de certidumbre
La forma m as com un de trabajar con la incertidumbre consiste en asignar un fac-
tor de certidumbre a cada pieza de informaci on en el SE. La m aquina de inferencia
deber a mantener los factores de incertidumbre conforme el proceso de inferencia se
lleve a cabo.
Por ejemplo, asumamos que los factores de certidumbre (precedidos por cf) son
enteros entre -100 (denitivamente falso) y +100 (denitivamente verdadero). La si-
guiente base de conocimientos en formato del SE est a dise nada para diagnosticar un
auto que no enciende. Esto ilustra el comportamiento de los factores de certidumbre:
1 GOAL problema.
2
3 RULE 1
4 IF not arranca AND
5 bateria_mala
6 THEN problema is bateria.
7
8 RULE 2
9 IF luces_debiles
10 THEN bateria_mala cf 50.
11
12 RULE 3
13 IF radio_debil
9.6 Encadenamiento haca atr as con incertidumbre 113
14 THEN bateria_mala cf 50.
15
16 RULE 4
17 IF arranca AND
18 olor_gasolina
19 THEN problema is fuga cf 80.
20
21 RULE 5
22 IF arranca AND
23 indicador_gasolina is vacio
24 THEN problema is tanque_vacio cf 90.
25
26 RULE 6
27 IF arranca AND
28 indicador_gasolina is bajo
29 THEN problema is tanque_vacio cf 30.
30
31 ASK arranca
32 MENU (si no)
33 PROMPT Su motor arranca? .
34
35 ASK luces_debiles
36 MENU (si no)
37 PROMPT Sus luces estan debiles? .
38
39 ASK radio_debile
40 MENU (si no)
41 PROMPT Su radio esta debil? .
42
43 ASK olor_gasolina
44 MENU (si no)
45 PROMPT Huele a gasolina?.
46
47 ASK indicador_gasolina
48 MENU (vacio, medio, lleno)
49 PROMPT Que indica al aguja de gasolina? .
Por el momento la inferencia usara encadenamiento haca atr as, similar al que
usa Prolog. La regla GOAL indica que el proceso buscar a un valor para problema.
La regla 1 causar a que la sub-meta bateria mala sea procesada, etc. Observen que
las reglas especican tambi en factores de certidumbre. Las reglas 2 y 3 proveen evi-
dencia de que la batera est a en mal estado, pero ninguna es conclusiva al respecto.
Un di alogo con este sistema sera como sigue:
1 consultar, reiniciar, cargar, listar, trazar, como, salida
2 : consultar
3 Su motor arranca?
4 : si
5 Huele a gasolina?
6 : si
7 Que indica la aguja de la gasolina?
8 : vacio
114 9 Sistemas Expertos
9 problema-tanque-vacio-cf-90
10 problema-fuga-cf-80
11 problema resuelto
Observen que a diferencia de Prolog, el sistema no se detiene al encontrar el
primer posible valor para problema. En este caso se computan todos los valores
razonables para problema y se reporta el valor de certidumbre asociado a estas
soluciones. Recordemos que estos factores de certidumbre no son probabilidades,
solo ponderan de alguna manera las respuestas.
De igual manera, el usuario podra ofrecer factores de certidumbre sobre sus
respuestas, por ejemplo:
1 : consultar
2 ...
3 Huele a gasolina?
4 si cf 50
5 ...
Existen diversas maneras de capturar el concepto de factor de certidumbre, pero
todas ellas deben de confrontar las mismas situaciones b asicas:
Reglas cuyas conclusiones son inciertas,
Reglas cuyas premisas son inciertas,
Datos provistos por el usuario inciertos,
Combinaci on de premisas inciertas con conclusiones inciertas,
Actualizar los factores de incertidumbre en los datos almacenados en el espacio
de 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 m as conocidos en IA, introduce factores de certidumbre
dise nados para producir resultados intuitivos desde la perspectiva de los expertos.
Revisemos el uso de estos factores por casos. El m as simple, sera aquel donde las
premisas son totalmente ciertas:
1 arranca cf 100.
2 olor_gas cf 100.
disparan la regla 4 y por tanto, problema fuga cf 80 deber a agregarse al al-
mac en de trabajo. Sin embargo, este es un caso poco probable. Normalmente no
estamos totalmente seguros de las premisas de una regla y lo normal sera tener
hechos como:
9.6 Encadenamiento haca atr as con incertidumbre 115
1 arranca cf 80.
2 olor_gas cf 50.
Cuando esto sucede, la incertidumbre en las premisas de la regla debe combinarse
con las de la conclusi on de la misma de la siguiente manera:
CF =CFreglamnCFpremisa/100
Dado el ejemplo, la regla 4 se activara con un c f = 50 (el mnimo de las dos
premisas) y dada la f ormula anterior, agregaramos problema fuga cf 40 al
almac en de trabajo.
Para que una regla dispare, su factor de certidumbre debe superar un umbral que
normalmente se ja en 20. As que bajo la denici on anterior, la regla 4 disparara.
Si tuvi esemos olor gas cf 15, entonces la regla no disparara.
Ahora consideren el caso donde hay m as de una regla que da soporte a cierta
conclusi on. En ese caso, cada una de las reglas que disparan contribuir a al factor de
certidumbre de la conclusi on. Si una regla dispara y la conclusi on ya se encontraba
en el almac en de trabajo, las siguientes reglas aplican:
CF(X,Y) = X +Y(100X)/100. Ambos X,Y > 0
CF(X,Y) = X +Y/1mn([X[, [Y[). Uno de X,Y < 0
CF(X,Y) = CF(X, Y). Ambos X,Y < 0
Por ejemplo, si disparamos la regla 2 (luces d ebiles) con su premisa sin incerti-
dumbre, tendramos que agregar al almac en de trabajo bateria mala cf 50.
Luego si disparamos la regla 3 (radio d ebil), el factor de certidumbre de este hecho
debe modicarse a bateria mala cf 75. Lo cual resulta intuitivo (hay m as
evidencia de que la batera tiene problemas). Lo que tambi en resulta intuitivo es que
necesitamos programar nuestra propia m aquina de inferencia.
9.6.3. Formato de las reglas
Como programaremos nuestra propia m aquina de inferencia, podemos elegir la
estructura de hechos y reglas. Las reglas tendr an la estructura general:
regla(Nombre, Premisas,Conclusion).
El Nombre opera solo como un identicador de la regla. El lado izquierdo de
la misma Premisas implica al lado derecho Conclusion (conclusi on). Como usare-
mos encadenamiento haca atr as, cada regla ser a usada para validar una pieza de
informaci on, de manera el RHS contiene una meta con su factor de certidumbre
asociado:
116 9 Sistemas Expertos
conclusion(Meta,CF).
mientras que las premisas toman la forma de una lista de metas:
premisas(ListaMetas).
Las metas ser an representadas, para comenzar, como pares atributovalor:
av(Atributo,Valor).
cuando Atributo y Valor son atomos, la estructura general de las reglas se ve
como:
1 regla(Nombre,
2 premisas( [av(A1,V1), av(A2,V2), ... ] ),
3 conclusion(av(Attr,Val), CF)).
Por ejemplo, la regla 5 quedara representada como:
1 regla(5,
2 premisas([av(arranca,si), av(indicador_gasolina,vacio)]),
3 conclusion(av(problema,fuga), 80)).
Estas reglas no son f aciles de leer, pero tienen una estructura adecuada para ser
procesadas por Prolog. Otras herramientas de Prolog como las gram aticas de cl ausu-
la denitivas (DCG) o la denici on de operadores, puede ayudarnos a simplicar
esta representaci on.
9.6.4. La m aquina de inferencia
Dado el formato de las reglas del SE deseamos que la inferencia tome en cuenta
los siguientes aspectos:
Combine los factores de certidumbre como se indico anteriormente.
Mantenga el espacio de trabajo con la informaci on actualizada con las nuevas
evidencias obtenidas.
Encontrar toda la informaci on acerca de un atributo en particular cuando se pre-
gunte por el, y poner esa informaci on en el espacio de trabajo.
Primero, los hechos ser an almacenados en la memoria de trabajo de Prolog, con
el siguiente formato:
1 hecho(av(A,V),CF).
9.6 Encadenamiento haca atr as con incertidumbre 117
De forma que un predicado meta/2 hara la llamada para resolver un problema
dado en estos t erminos. Por ejemplo, en el caso del arranque del auto, tendramos
como meta:
1 ?- meta(av(problema,X),CF).
El predicado meta/2 debe de contender con tres casos:
El atributovalor se conoce de antemano;
Existen reglas para deducir el atributovalor;
Se debe preguntar al usuario.
El sistema puede dise narse para preguntar al usuario autom aticamente por el va-
lor de un atributo, ante la ausencia de reglas; o bien, se puede declarar que atributos
pueden ser preguntados al usuario. Este ultimo enfoque hace que el manejo de la
base de conocimientos sea m as explcito y provee mayor control sobre los di alogos
usuario SE. Podemos denir un predicado pregunta/2 para declarar el atributo a
preguntar y la frase para ello:
1 pregunta(pais_residencia,En que pas vive? ).
Veamos ahora los tres casos para meta/2. El primero de ellos ocurre cuando la
informaci on ya est a 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 memoria
de 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 con
un valor para la atributo Atr y un factor de certidumbre asociado CF. El mensaje
Msg da la informaci on 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, pero
se puede deducir usando las reglas denidas en el sistema, en ese caso la llamada
es:
1 meta(Meta,CFactual) :-
2 buscaReglas(Meta,CFactual).
Esta llamada hace uso de la m aquina de inferencia que dise naremos para nuestro
SE con incertidumbre. El factor de certidumbre se etiqueta como actual, porque es
posible que cambie de valor al ir aplicando las reglas denidas en el sistema.
El predicado buscaReglas/2 se encarga de encontrar aquellas reglas cuya con-
clusi on unica con la Meta en cuesti on y de actualizar el factor de certidumbre con
base en las premisas de estas reglas. Si la Meta es un hecho conocido, no hay nada
que hacer, s olo 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 satisfacer
la Meta del SE, es necesario que buscaReglas/2 las pruebe. Para ello denimos
probar/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 haca atr as con incertidumbre 119
8
9 int_redondear(X,I) :-
10 X < 0,
11 I is integer(X - 0.5).
La actualizaci on 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 denida en la secci on anterior. Se
incluyen predicados auxiliares necesarios en su denici on:
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 %%% Auxiliares
20
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), nl
38 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).
Captulo 10
Arboles de Decisi on
Resumen En este captulo abordaremos la soluci on de problemas en el contexto del
aprendizaje autom atico, ejemplicado con el algoritmo ID3 [13] (Inductive Dicoto-
mizer). Este algoritmo induce arboles de decisi on a partir de ejemplos conformados
como un conjunto de pares atributovalor, para predecir el valor de uno de los atri-
butos, conocido como la clase. El aprendizaje de arboles de decisi on es una de las
t ecnicas de inferencia inductiva m as usadas. Se trata de un m etodo para aproximar
funciones de valores discretos, capaz de expresar hip otesis disyuntivas y robusto
al ruido en los ejemplos de entrenamiento. La descripci on que se presenta en este
captulo, cubre una familia de algoritmos para la inducci on de arboles de decisi on
que incluyen ID3 y C4.5 [14]. Estos algoritmos llevan a cabo su b usqueda de hip ote-
sis en un espacio completamente expresivo, evitando as los problemas mencionados
con respecto a espacios de hip otesis incompletos. Como veremso, el sesgo inductivo
en este caso, consiste en la preferencia por arboles peque nos, sobre arboles grandes.
Un arbol as aprendido, puede representarse tambi en como un conjunto de reglas
si-entonces, m as f aciles de entender para un usuario.
10.1. Representaci on de los arboles de decisi on
La gura 10.1 muestra un arbol de decisi on tpico. Cada nodo del arbol est a con-
formado por un atributo y puede verse como la pregunta: Qu e valor tiene este
atributo en el caso a clasicar? Las ramas que salen de los nodos, corresponden a
los posibles valores del atributo correspondiente.
Un arbol de decisi on clasica a un caso, ltrandolo de manera descendente, has-
ta encontrar una hoja, que corresponde a la clasicaci on buscada. Consideren el
proceso de clasicaci on del siguiente caso, que describe un da en partcular:
cielo = soleado, temperatura = caliente, humedad = alta, viento = f uerte )
121
122 10 Arboles de Decisi on
Cielo
Hmedad Viento si
si
soleado
nublado
lluvioso
no
alta normal
no si
fuerte dbil
Atributo
Clase
Valor
Figura 10.1 Un ejemplo de arbol de decisi on para el concepto buen da para jugar tenis. Los
nodos representan un atributo a ser vericado por el clasicador. Las ramas son los posibles
valores para el atributo en cuesti on. Los textos en crculos, 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 ltrado haca
abajo del arbol por la rama de la izquierda. Como el atributo Humedad, tiene el
valor alta, el ejemplo es ltrado nuevamente por rama de la izquierda, lo cual nos
lleva a la hoja que indica la clasicaci on del caso: Buen da para jugar tenis = no.
El Algoritmo 2, dene computacionalmente esta idea.
Algoritmo 2 El algoritmo clasica, para arboles de decisi on
1: function CLASIFICA(Ej, Arbol)
Require: E j: un ejemplo a clasicar, Arbol: un arbol de decisi on
Ensure: Clase: la clase del ejemplo
2: Clase tomaValor(raiz(Arbol), E j);
3: if hoja(raz(Arbol)) then
4: return Clase
5: else
6: clasi f ica(E j, subArbol(Arbol,Clase));
7: end if
8: end function
La funci on toma-valor encuentra el valor de un atributo, en el caso que se
est a clasicando. 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 funci on sub-arbol se
mueve 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 raz
cielo, esta funci on obtiene el sub- arbol que resulta de moverse por la rama soleado,
etc.
En general, un arbol de decisi on representa una disyunci on de conjunciones de
restricciones en los posibles valores de los atributos de los casos. Cada rama que va
10.2 Problemas apropiados para la aplicaci on de arboles de decisi on 123
de la raz del arbol a una hoja, representa una conjunci on de tales restricciones y el
arbol mismo representa la disyunci on de esas conjunciones. Por ejemplo, el arbol
de la gura 10.1, puede expresarse como sigue:
(cielo = soleado humedad = normal)
(cielo = nublado)
(cielo = lluvia viento = d ebil)
10.2. Problemas apropiados para la aplicaci on de arboles de
decisi on
Aun cuando se han desarrollado diversos m etodos para la inducci on de arboles
de decisi on, y cada uno de ellos ofrece diferentes capacidades, en general estos al-
goritmos son apropiados para solucionar problemas de aprendizaje conocidos como
problemas de clasicaci on. Estos problemas presentan las siguientes caractersticas:
Ejemplos representados por pares atributo-valor. Los casos del problema est an
representados como un conjunto jo de atributos, por ejemplo Cielo y sus valo-
res, por ej. Soleado. El caso m as sencillo es cuando cada atributo toma valores de
un peque no 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 num ericamente.
La funci on objetivo tiene valores discretos. El arbol de decisi on de la Figura 10.1,
asigna una clasicaci on binaria, por ejemplo si o no a cada caso. Un arbol de de-
cisi on puede ser extendido f acilmente, para representar funciones objetivos con
m as de dos valores posibles. Una extensi on menos simple consiste en conside-
rar funciones objetivo de valores discretos, por ello la aplicaci on del m etodo en
dominios discretos es menos com un.
Se necesitan descripciones disyuntivas. Como se mencion o, los arboles de deci-
si on representan naturalmente conceptos disyuntivos.
Ruido en los ejemplos de entrenamiento. El m etodo es robusto al ruido en los
ejemplos de entrenamiento, tanto errores de clasicaci on, como errores en los
valores de los atributos.
Valores faltantes en los ejemplos. El m etodo puede usarse a un cuando algunos
ejemplos de entrenamiento tengan valores desconocidos para algunos atributos.
Al igual que en el punto anterior, esto se debe a que el algoritmo computa es-
tadsticas globales que minimizan el impacto del ruido o falta de informaci on de
un ejemplo.
124 10 Arboles de Decisi on
10.3. El algoritmo b asico de aprendizaje de arboles de decisi on
La mayora de los algoritmos para inferir arboles de decisi on son variaciones de
un algoritmo b asico que emplea una b usqueda descendente (top-down) y egosta
(greedy) en el espacio de posibles arboles de decisi on. La presentaci on de estos
algoritmos se centra en ID3 y C4.5.
El algoritmo b asico ID3, construye el arbol de decisi on de manera descendente,
comenzando por preguntarse: Qu e atributo debera ser colocado en la raz del arbol?
Para responder esta pregunta, cada atributo es evaulado usando un test estadstico
para determinar que tan bien clasica el solo los ejemplos de entrenamiento. El me-
jor atributo es seleccionado y colocado en la raz del arbol. Una rama y su nodo
correspondiente es entonces creada para cada valor posible del atributo en cuesti on.
Los ejemplos de entrenamiento son repartidos en los nodos descendentes de acuer-
do al valor que tengan para el atributo de la raz. El proceso entonces se repite con
los ejemplos ya distribuidos, para seleccionar un atributo que ser a colocado en cada
uno de los nodos generados. Generalmente, el algoritmo se detiene si los ejemplos
de entrenamiento comparten el mismo valor para el atributo que est a siendo proba-
do. Sin embargo, otros criterios para nalizar la b usqueda son posibles: i) Covertura
mnima, el n umero de ejemplos cubiertos por cada nodo est a por abajo de cierto
umbral; ii) Pruebas de signicancia estadstica usando
2
para probar si las distri-
buciones de las clases en los sub- arboles diere signicativamente. Aunque, como
veremos, la poda del arbol se preere a las pruebas de signicancia. Este algoritmo
lleva a cabo una b usqueda egosta de un arbol de decisi on aceptable, sin reconside-
rar nunca las elecciones pasadas (backtracking). Una versi on simplicada de el se
muestra en el Algoritmo 3.
10.3.1. Qu e atributo es el mejor clasicador?
La decisi on central de ID3 consiste en seleccionar qu e atributo colocar a en cada
nodo del arbol de decisi on. En el algoritmo presentado, esta opci on la lleva a cabo
la funci on mejor-particion, que toma como argumentos un conjunto de ejem-
plos de entrenamiento y un conjunto de atributos, regresando la partici on inducida
por el atributo, que s olo, clasica mejor los ejemplos de entrenamiento. Considere
los ejemplos de entrenamiento del cuadro 10.1 para el concepto objetivo: buen da
para jugar tenis? El encabezado del cuadro indica los atributos usados para describir
estos ejemplos, siendo jugar-tenis? el atributo objetivo.
Si queremos particionar este conjunto de ejemplos con respecto al atributo tem-
peratura, obtendramos:
?- 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 b asico de aprendizaje de arboles de decisi on 125
Algoritmo 3 El algoritmo ID3
1: function ID3(Ejs, Atbs, Clase)
2: Arbol / 0; De f ault claseMayoria(E js);
3: if E js = / 0 then
4: return De f ault;
5: else if mismoValor(E js,Clase) then
6: return Arbol tomaValor( f irst(E js).Clase);
7: else if Atbs = / 0 then
8: 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) do
14: ValoAtributo f irst(ParticionE js);
15: SubE js rest(ParticionE js);
16: agregarRama(Arbol, alorAtributo, ID3(SubE js, Atbs
Me jorAtributo,Clase));
17: end for
18: return Arbol
19: end if
20: end function
Da Cielo Temperatura Humedad Viento Jugar-tenis?
1 soleado calor alta d ebil no
2 soleado calor alta fuerte no
3 nublado calor alta d ebil si
4 lluvia templado alta d ebil si
5 lluvia fro normal d ebil si
6 lluvia fro normal fuerte no
7 nublado fro normal fuerte si
8 soleado templado alta d ebil no
9 soleado fro normal d ebil si
10 lluvia templado normal d ebil si
11 soleado templado normal fuerte si
12 nublado templado alta fuerte si
13 nublado calor normal d ebil si
14 lluvia templado alta fuerte no
Cuadro 10.1 Conjunto de ejemplos de entrenamiento para el concepto objetivo jugar-tenis? en
ID3, por Tom M. Mitchel [10].
Lo que signica que el atributo temperatura tiene tres valores diferentes en el
conjunto de entrenamiento: fro, caliente, y templado. Los casos d5, d6, d7, y d9,
tienen como valor del atributo temperatura= fro. La funci on mejor-partici on en-
cuentra el atributo que mejor separa los ejemplos de entrenamiento de acuerdo al
atributo objetivo. En qu e consiste una buena medida cuantitativa de la bondad de un
atributo? Deniremos una propiedad estadstica llamada ganancia de informaci on.
126 10 Arboles de Decisi on
10.3.2. Entropa y ganancia de informaci on
Una manera de cuanticar la bondad de un atributo en este contexto, consiste en
considerar la cantidad de informaci on que proveer a este atributo, tal y como esto
es denido en teora de informaci on por Claude E. Shannon [18]. Un bit de infor-
maci on es suciente 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 los
posibles valores del atributo v
i
, ocurren con probabilidades P(v
i
), entonces en con-
tenido de informaci on, o entropia, E de la respuesta actuale est a dado por:
E(P(v
i
), . . . , P(v
n
)) =
n

i=1
P(v
i
) log
2
P(v
i
)
Consideren nuevamente el caso booleano, aplicando esta ecuaci on a un volado
con una moneda conable, tenemos que la probabilidad de obtener aguila o sol es
de 1/2 para cada una:
E(
1
2
,
1
2
) =
1
2
log
2
1
2

1
2
log
2
1
2
= 1
Ejecutar el volado nos provee 1 bit de informaci on, de hecho, nos provee la clasi-
caci on del experimento: si fue aguila o sol. Si los volados los ejecutamos con una
moneda cargada que da 99% de las veces sol, entonces E(1/100, 99/100) = 0,08
bits de informaci on, menos que en el caso de la moneda justa, porque ahora tene-
mos m as evidencia sobre el posible resultado del experimento. Si la probabilidad de
que el volado de sol es del 100%, entonces E(0, 1) = 0 bits de informaci on, ejecu-
tar el volado no provee informaci on alguna. La gr aca de la funci on de entropa se
muestra en la gura 10.2.
Figura 10.2 Gr aca de la funci on entropia para clasicaciones booleanas.
Consideren nuevamente los ejemplos de entrenamiento del cuadro 10.1. De 14
ejemplos, 9 son positivos (si es un buen da para jugar tenis) y 5 son negativos. La
entropia de este conjunto de entrenamiento es:
E(
9
14
,
5
14
) = 0,940
10.4 Espacio de hip otesis en el aprendizaje inductivo de arboles de decisi on 127
Si todos los ejemplos son positivos o negativos, por ejemplo, pertencen todos a
la misma clase, la entropia ser a 0. Una posible interpretaci on de esto, es considerar
la entropia como una medida de ruido o desorden en los ejemplos. Denimos la ga-
nancia de informaci on (GI) como la reducci on de la entropa causada por particionar
un conjunto de entrenamiento S, con respecto a un atributo A:
Ganancia(S, A) = E(S)

vA
[S
v
[
[S[
E(S
v
)
Observen que el segundo t ermino de Ganancia, es la entropa con respecto al
atributo A. Al utilizar esta medida en ID3, sobre los ejemplos del cuadro 10.1, obte-
nemos:
Ganancia de informacion del atributo CIELO : 0.24674976
Ganancia de informacion del atributo TEMPERATURA : 0.029222548
Ganancia de informacion del atributo HUMEDAD : 0.15183544
Ganancia de informacion del atributo VIENTO : 0.048126936
Maxima ganancia de informacion: 0.24674976
Particion:
[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 informaci on fue cielo, de
ah que esta parte del algoritmo genera la partici on de los ejemplos de entrena-
miento con respecto a este atributo. Si particionamos recursivamente los ejemplos
que tienen el atributo cielo = soleado, obtendramos:
Ganancia de informacion del atributo TEMPERATURA : 0.5709506
Ganancia de informacion del atributo HUMEDAD : 0.9709506
Ganancia de informacion del atributo VIENTO : 0.01997304
Maxima ganancia de informacion: 0.9709506
Particion:
[humedad [normal 11 9] [alta 8 2 1]]
Lo cual indica que en el nodo debajo de soleado deberamos incluir el atributo
humedad. 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, llevar an a clases terminales de nuestro problema de aprendizaje. El
algoritmo terminar a por construir el arbol de la gura 10.1.
10.4. Espacio de hip otesis en el aprendizaje inductivo de
arboles de decisi on
Como los otros m etodos de aprendizaje, ID3 puede concebirse como un proceso
de b usqueda en un espacio de hip otesis, para encontrar aquella hip otesis que se
ajusta mejor a los datos de entrenamiento. El espacio de hip otesis explorado por
ID3 es el espacio de todos los arboles de decisi on posibles. El algoritmo lleva a
128 10 Arboles de Decisi on
cabo una b usqueda de lo simple a lo complejo, comenzando por el arbol vaco, para
considerar cada vez hip otesis m as complejas. La medida ganancia de informaci on
gua esta b usqueda de ascenso de colina (hill-climbing), como ejemplicamos en la
secci on anterior.
Considerando ID3 en t erminos de su espacio y estrategias de b usqueda, es posible
analizar sus capacidades y limitaciones:
El espacio de hip otesis de ID3 es completo con respecto a las funciones de valores
discretos que pueden denirse a partir de los atributos considerados. De manera
que no existe el riesgo que la funci on objetivo no se encuentre en el espacio de
hip otesis.
ID3 mantiene s olo una hip otesis mientras explora el espacio de hip otesis posi-
bles. Esto contrasta, por ejemplo, con el algoritmo eliminaci on de candidatos,
que mantiene el conjunto de todas las hip otesis consistentes con el conjunto de
entrenamiento. Es por ello que ID3 es incapaz de determinar cuantos arboles de
decisi on diferentes son consistentes con los datos.
El algoritmo b asico ID3 no ejecuta vuelta atr as (backtracking) en su b usqueda.
Una vez que el algoritmo selecciona un atributo, nunca reconsiderar a esta elec-
ci on. Por lo tanto, es suceptible a los mismos riesgos que los algoritmos estilo
ascenso de colina, por ejemplo, caer m aximos o mnimos locales. Como vere-
mos, la vuelta atr as puede implementarse con alguna t ecnica de poda.
ID3 utiliza todos los ejemplos de entrenamiento en cada paso de su b usqueda
guiada por el estadstico ganancia de informaci on. Esto contrasta con los m eto-
dos que usan los ejemplos incrementalmente, por ejemplo encuentra-S o elimi-
naci on de candidatos. Una ventaja de usar propiedades estadsticas de todos los
ejemplos es que la b usqueda es menos sensible al ruido en los datos.
10.5. Sesgo inductivo en el aprendizaje de arboles de decisi on
Recuerden que el sesgo inductivo es el conjunto de armaciones que, junto con
los datos de entrenamiento, justican deductivamente la clasicaci on realizada por
un sistema de aprendizaje inductivo sobre casos futuros. Dado un conjunto de en-
trenamiento, por lo general hay muchos arboles de decisi on consistentes con este.
Describir el sesgo inductivo de ID3 equivale a explicar porqu e este algoritmo pre-
ere ciertos arboles a otros, qu e arbol eligir a.
Puesto que ID3 encontrar a el primer arbol consistente con el conjunto de entrena-
miento, producto de una b usqueda de ascenso de colina, de lo simple a lo complejo,
el algoritmo tiene preferencia por: i) arboles peque nos sobre arboles grandes, que
indican que la b usqueda termino en proximidad a la raz del arbol; y ii) debido a
su caracter egoista, arboles que colocan atributos m as informativos cerca de la raz
del arbol. Sin embargo, observen que este sesgo es aproximado. Un algoritmo que
tuviera un sesgo id entico al descrito aqu, tendra que realizar una b usqueda prime-
ro en amplitud y preferir los arboles de menor profundidad. ID3 busca primero en
profundidad.
10.6 Consideraciones sobre el aprendizaje inductivo de arboles de decisi on 129
10.5.1. Sesgo por restricci on y sesgo por preferencia
Existe una diferencia interesante entre los sesgos que exhiben ID3 y el algo-
ritmo eliminaci on de candidatos, discutido en la sesi on anterior. El sesgo de ID3
es producto de su estrat egia de b usqueda, mientras que el sesgo de eliminaci on de
candidatos es resultado de la denici on del espacio de b usqueda. Por lo tanto, el
sesgo de ID3 es exhibe una preferencia por ciertas hip otesis, sobre otras, por ejem-
plo, hip otesis compactas. Este tipo de sesgo, que no impone restricciones sobre
las hip otesis que ser an eventualmente consideradas, recibe el nombre de sesgo por
preferencia. Por otra parte, el sesgo de eliminaci on de candidatos que restringe el
conjunto de hip otesis a considerar, recibe el nombre de sesgo por restricci on o sesgo
del lenguaje.
En general, es preferible trabajar con un sesgo por preferencia, puesto que este
permite al sistema de aprendizaje explorar un espacio de hip otesis completo, ase-
gurando que la representaci on del concepto objetivo se encuentra ah. Consideren
que es posible trabajar con ambos sesgos a la ves, por ejemplo, el sistema aprendiz
de damas chinas de la sesi on de introducci on, introduce un sesgo por restricciones
cuando se decide que la hip otesis tiene la forma de una combinaci on lineal de los
atributos del tablero, y un sesgo por preferencia cuando se introduce la b usqueda
ordenada por mnimos cuadrados (LMS) en el espacio de posibles par ametros w
i
.
10.5.2. Porqu e preferir hip otesis m as compactas?
Es el sesgo inductivo de ID3, preferir las hip otesis m as compactas, lo suciente-
mente robusto para generalizar m as all a de los datos observados? Este es un debate
no resuelto iniciado por William de Occam
1
circa 1320. Un argumento intuitivo
es que existen mucho menos hip otesis compactas que extensas, por lo que es m as
difcil que una hip otesis compacta coincida accidentalmente con los datos obser-
vados. En cambio, hay muchas hip otesis extensas que se puede, ajustar a los datos
de entrenamiento, pero fallar an al generalizar. Aunque este argumento no es del
todo convincente, dejaremos la discusi on sobre la navaja de Occam para la sesi on
destinada a aprendizaje Bayesiano.
10.6. Consideraciones sobre el aprendizaje inductivo de arboles
de decisi on
Algunas consideraciones sobre la aplicaci on pr actica del algoritmo b asico de ID3
presentado 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 m as all a de lo necesario).
130 10 Arboles de Decisi on
arbol en profundidad; para procesar atributos con valores contnuos; para procesar
ejemplos de entrenamiento con valores faltantes; para introducir costos diferentes
asociados a los atributos; as como para determinar una buena m etrica de selecci on
de los atributos y mejorar la eciencia 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 b asico de ID3 crece cada rama del arbol en profundidad hasta que
logra clasicar perfectamente los ejemplos de entrenamiento. Esta estrategia es ra-
zonable, pero puede introducir dicultades si los datos de entrenamiento presentan
ruido, o cuando el conjunto de entrenamiento es demasiado peque no, como para
ofrecer un muestreo signicativo del concepto objetivo. En estos casos, ID3 pue-
de producir arboles que se sobreajustan a los datos de entrenamiento. Formalmente
denimos el sobreajuste como:
Denition 10.1. Dado un espacio de hip otesis H, se dice que una hip otsis h H
est a sobreajustada a los ejemplos de entrenamiento, si existe una hip otesis alterna-
tiva h
/
H, tal que h
/
tiene un error de clasicaci on m as peque no que h sobre la
distribuci on completa de los casos del problema.
Es com un observar que a medida que el tama no del arbol crece, en t ermino del
n umero de nodos usado
2
, su precisi on sobre el conjunto de entrenamiento mejora
monotonicamente, pero, sobre el conjunto de prueba primero crece y luego decae.
Como es esto posible que un arbol h que tiene mayor precisi on que h
/
sobre el
conjunto de entrenamiento, luego tenga un desempe no menor sobre el conjunto de
prueba? Una situaci on en la que esto ocurre es cuando el conjunto de entremien-
to contiene ruido, por ejemplo, elementos mal clasicados. Consideren agregar el
siguiente caso mal clasicado (clasicado como jugar-tenis? = no) al conjunto de
entrenamiento del cuadro 10.1:
cielo = soleado, temperatura = caliente, humedad = normal, viento = f uerte )
Al ejecutar ID3 sobre el nuevo conjunto de entrenamiento, este construir a un
arbol m as complejo. En partcular, el ejemplo con ruido ser a ltrado junto con los
ejemplos d9 y d11 (cielo = soleado y humedad = normal), que son ejemplos positi-
vos. Dado que el nuevo ejemplo es negativo, ID3 buscar a renar el arbol a partir del
nodo humedad, agregando un atributo m as al arbol. Este nuevo arbol h
/
tiene ma-
yor precisi on sobre los ejemplos de entrenamiento que h, puesto que se ha ajustado
al ejemplo con ruido. Pero h tendr a mejor desempe no al clasicar nuevos casos,
tomados de una misma distribuci on que los ejemplos de entrenamiento.
2
Obseven que esto reeja el n umero de atributos usado en la hip otesis, esto es, arboles m as grandes
imponen m as restricciones.
10.6 Consideraciones sobre el aprendizaje inductivo de arboles de decisi on 131
Existe la posibilidad de sobreajuste, a un cuando el conjunto de entrenamiento
est e libre de ruido, por ejemplo, si el conjunto de entrenamiento tiene pocos ele-
mentos. En conjuntos de entrenamiento peque nos es f acil encontrar regularidades
accidentales en donde un atributo puede particionar muy bien los ejemplos dados,
aunque no est e relacionado con el concepto objetivo.
Puesto que el sobreajuste puede reducir la precisi on de un arbol inducido por
ID3 entre un 10 a 25%, diferentes enfoques han sido propuestos para evitar este
fen omeno. Los enfoques pueden agruparse en dos clases:
Enfoques que detienen el crecimiento del arbol anticipadamente, antes de que
alcance un punto donde clasique perfectamente los ejemplos de entrenamiento.
Enfoques en donde se deja crecer el arbol para despu es podarlo.
Aunque el primer enfoque parezca m as directo, la poda posterior del arbol ha
demostrado tener m as exito en la pr actica. Esto se debe a la dicultad de estimar
en que momento debe detenerse el crecimiento del arbol. Independientemente del
enfoque usado, una pregunta interesante es: Cual es el tama no correcto de un arbol?
Algunos enfoques para responder a esta pregunta incluyen:
Usar un conjunto de ejemplos, diferentes de los usados en el entrenamiento, para
evaluar la utilidad de eliminar nodos del arbol.
Usar los ejemplos disponibles para el entrenamiento, pero aplicando una prueba
para estimar cuando agregar o eliminar un nodo, podra producir una mejora al
clasicar nuevos casos, por ejemplo, usar el test
2
para evaluar si al expandir un
nodo, el cambio mejorar a la clasicaci on sobre los ejemplos de entrenamiento, o
sobre toda la distribuci on.
Usar explcitamente una medida de complejidad para codicar los ejemplos de
entrenamiento y el arbol de decisi on, deteni endo el crecimiento cuando el ta-
ma no codicado sea minimizado. Por ejemplo, el principio de descripci on mni-
ma (MDL).
10.6.1.1. Reduciendo el error por poda
Como podemos usar un conjunto de ejemplos de validaci on para prevenir el
sobre ajuste? Un enfoque llamado reduced-error pruning [?], consiste en considerar
cada nodo del arbol como candidato a ser podado. La poda consiste en eliminar todo
el sub arbol que tiene como raz el nodo en cuesti on, convirti endolo as en una hoja,
cuya clase corresponde a valor m as com un de los casos asociados a ese nodo.
Un nodo solo es eliminado si el arbol podado que resulta de ello, no presenta
un desempe no peor que el arbol original sobre el conjunto de validaci on. El efecto
de 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 las
coincidencias suelen no estar presentes en el conjunto de validaci on.
Este m etodo es unicamente efectivo si contamos con sucientes ejemplos, de tal
forma que el conjunto de entrenamiento y el conjunto de validaci on sean signicati-
vos estadsticamente. De otra forma, tomar ejemplos para el conjunto de validaci on
132 10 Arboles de Decisi on
reduce a un m as el taman o del conjunto de entrenamiento, aumentando as la posibi-
lidad de sobre ajuste.
10.6.1.2. Poda de reglas
En la pr actica, un m etodo exitoso para encontrar el arbol de mayor precisi on se
conoce como rule post-prunning [14] y est a incorporado en el sistema C4.5 de Ross
Quinlan. El procedimiento es el siguiente:
1. Inducir el arbol de decisi on permitiendo sobre ajuste, por ejemplo, con nuestro
algoritmo b asico ID3.
2. Convertir el arbol aprendido en un conjunto de reglas equivalente, esto es, una
conjunci on por cada rama del arbol que va de la raz a una hoja.
3. Podar (generalizar) cada regla, eliminando las precondiciones que resulten en
una mejora de la precisi on estimada.
4. Ordenar las reglas por su precisi on estimada, y aplicarlas en ese orden al clasicar
nuevos casos.
Cabe mencionar que el m etodo aplicado por C4.5 no es estadsticamente valido,
aunque ha demostrado ser una heurstica util. En la sesi on de evaluaci on de hip ote-
sis, estudiamos t ecnicas estadsticamente robustas para estimar medias e intervalos
de conanza. Lo relevante aqu es que la conversi on del arbol en reglas ayuda a dis-
tinguir los diferentes contextos en los que un atributo participa en la clasicaci on, es
decir, reglas diferentes; elimina la diferencia entre nodos ubicados cerca de la raz y
aquellos ubicados cerca de las hojas; y aumenta la f acilidad de comprehensi on por
parte del usuario.
10.6.2. Incorporando valores contnuos
En el algoritmo b asico de ID3 tanto el concepto objetivo, como los atributos
usados para describir los casos, deben tener valores discretos. La segunda restric-
ci on puede ser eliminada f acilmente, permitiendo el uso de atributos con valores
contnuos. Esto se logra deni endo din amicamente nuevos atributos discretos que
particionan los atributos de valores contnuos, en intervalos discretos. Para un atri-
buto contnuo A, el algoritmo puede crear din amicamente un atributo discreto A
c
que
es verdadero si A >c y falso en cualquier otro caso. La unica consideraci on es como
seleccionar el mejor valor para el umbral c. Supongan que el atributo temperatura
toma valores discretos y que su relaci on con el concepto objetivo es la siguiente:
temperatura 40 48 60 72 80 90
jugar-tenis? No No Si Si Si No
Qu e valor booleano basado en un umbral debemos denir 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 decisi on 133
ganancia de informaci on posible. Es posible generar candidatos a umbral, ordenan-
do los ejemplos de acuerdo a su valor en el atributo temperatura e identicando
ejemplos adyacentes que dieren en el valor de su atributo objetivo. Se puede de-
mostrar que los umbrales c que m aximiza la ganancia de informaci on, se encuentran
en estos sitios. Para el ejemplo presentado, dos umbrales pueden localizarse en los
puntos (48+60)/2 y (80+90/2). La ganancia de informaci on puede entonces cal-
cularse para los atributos temperatura
>54
y temperatura
>85
. El atributo con mayor
ganancia de informaci on, en este caso el primero, puede ser usado entonces para
competir con otros atributos en la construcci on del arbol de decisi on. Por supues-
to, es posible tambi en mantener ambos atributos din amicamente creados, usando
multiples intervalos [?].
10.6.3. Medidas alternativas para la selecci on de atributos
Existe un sesgo natural en la medida de ganancia de informaci on, el cual favorece
atributos con muchos valores, sobre aquellos que tienen poco valores. Por ejemplo,
un atributo fecha, tendra mayor ganancia de informaci on que cualquiera de los atri-
butos en nuestro ejemplo. Esto se debe a que este atributo predice perfectamente
el valor del atributo objetivo. El problema es que este atributo tiene tantos valores
distintos que tiende a separar perfectamente los ejemplos de entrenamiento en pe-
que nos subconjuntos, que se ajustan al concepto buscado. Por esto, el atributo fecha
tiene una ganancia de informaci on elevada, a pesar de ser un predictor pobre.
Una soluci on a este problema es usar una m etrica alternativa a la ganancia de in-
formaci on. Quinlan [?], propone una medida alternativa que ha sido usada con exito,
gain ratio. Esta m etrica penaliza atributos como fecha incorporando un t ermino co-
nocido como split information, que es sensible a qu e tan amplia y uniforme es la
partici on que un atributo induce en los datos:
splitIn f ormation(S, A) =
c

i=1
[Si[
[S[
log
2
[Si[
[S[
Observen que este t ermino es la entropia de S con respecto al atributo A. La
medida gain radio est a denida como:
gainRatio(S, A) =
gain(S, A)
splitInf ormatio(S, A)
Un problema pr actico con este enfoque es que el denominador de esta medida
puede ser 0 o muy peque no, si [Si[ [S[, lo cual hace que la medida sea indenida
para atributos que tienen casi el mismo valor para todos los ejemplos.
134 10 Arboles de Decisi on
10.7. Implementaci on el Prolog
Los ejemplos de entrenamiento se denir an mediante el predicado example/3
cuyos argumentos son el n umero de ejemplo, el valor para la clase, y los pares atri-
buto valor. Para el ejemplo de jugar tenis, el conjunto de entrenamiento incluir a las
siguientes lneas:
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 representar a mediante el predicado nodo/3 cuyo primer elemento
puede ser el identicador de un ejemplo, o la constante hoja para indicar que hemos
encontrado el valor de la clase. El segundo argumento de nodo es el test que se aplica
para llegar a el. El tercer argumento es el padre del nodo en cuesti on. Por ejemplo:
1 nodo(13,(dia=lluvia),raiz).
indica que al ejemplo 13 se llega desde el nodo raiz si el atributo dia tiene como
valor lluvia.
La llamada principal al algoritmo es id3/1 cuyo argumento es el mnimo n umero
de 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 atributos
usados en los ejemplos A. El corte es para construir la lista de atributos solo con un
ejemplo (evita el reconsiderar con los dem as ejemplos). Y se llama a idt/4 cuyos
argumentos son la lista de ejemplos E, el identicador raiz para el nodo raz del
arbol, la lista de atributos A y el Umbral que por defecto es igual a 1.
10.7 Implementaci on el Prolog 135
En la construcci on del arbol hay varios casos que cubrir. Comencemos por los
casos terminales. Hay dos casos terminales a considerar, el primero es cuando el
n umero de ejemplos disponibles es menor que el Umbral en ese caso se guarda
un nodo ho ja con la distribuci on de la clase para los ejemplos como contenido. El
otro caso terminal es cuando todos los ejemplos pertenecen a la misma clase. En
ese caso la distribuci on de la clase para los ejemplos tomara la forma [C] donde
C =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 construir
4 particion de ),
5 write(E), write( en el nodo ), writeln(Test).
10.7.1. Atributos
Veamos ahora en detalle estos procedimientos. El siguiente procedimiento extrae
los 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 la
siguiente llamada:
136 10 Arboles de Decisi on
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. Distribuci on de clases
Cual es la distribuci on inicial de la clase para los ejemplos de jugar tenis? Esto
lo 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 ejemplos
1,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 implementaci on de distr/2 es la siguiente:
1 distr(S,Dist) :-
2 setof(C,XL(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 informaci on Gain con res-
pecto a los ejemplos Es y atributos As disponibles. El predicado elige atributo/4
computa los valores posibles para el atributo seleccionado y lo elimina de la lista de
atributos disponibles para construir el arbol:
1 elige_atributo(Es,As,A,Valores,Resto) :-
2 length(Es,LonEs),
10.7 Implementaci on 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,EL(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 Decisi on
?- 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 captulo, para computar la ganancia de
informaci on 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.
Ypor cada atributo, computar la informaci on residual para restarsela al contenido
informacional, y as obtener las ganancias de informaci on:
?- 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 m axima ganancia de informaci on y
eliminarlo de la lista de atributos disponibles regresada en Resto. La inducci on del
arbol de decisi on es un proceso recursivo. Los valores del atributo elegido inducen
una partici on 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 la
forma nodo(Identi f icador, AtributoValor, NodoPadre). Se pueden recuperar con
la siguiente meta:
10.7 Implementaci on 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 denimos:
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 Decisi on
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 sesi on para construir el arbol de decisi on para jugar tenis es (con id3.pl
ya cargado en Prolog):
?- [test3].
% test3 compiled 0.00 sec, 3,896 bytes
true.
?- id3.
true.
?- imprime_arbol.
dia=lluvia
viento=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 Implementaci on 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), !.
Captulo 11
Planeaci on
Resumen La planeaci on es un tema de inter es tradicional en Inteligencia Articial,
que involucra razonar acerca de los efectos de las acciones y la secuencia en que
estas se aplican para lograr un efecto acumulativo dado. En esta sesi on desarrolla-
remos planicadores simples para ilustrar los principios de la planeaci on.
11.1. Acciones
Cada acci on posible es denida en t erminos de su condici on y sus efectos, es-
peccamente:
Condici on. La condici on que debe satisfacerse para la acci on pueda ejecutarse.
Agregar. Es una lista de cambios que se espera ocurran despu es de ejecutarse la
acci on.
Quitar. Es una lista de observaciones que se espera dejen de ser verdaderas des-
pu es de ejecutarse la acci on.
Las condiciones, pueden denirse por un procedimiento
1 cond(Acc,Cond).
Los efectos de una acci on pueden denirse de manera similar, por dos procedi-
mientos:
1 add(Acc,ListaAdd).
2 del(Acc,ListaDel).
donde ListaAdd y ListaDel corresponden a las listas denidas para agregar y borrar.
Asumamos que vamos a realizar la planeaci on en el dominio del mundo de los
bloques. As que la unica acci on posible ser a:
143
144 11 Planeaci on
1 mover(Bloque,De,A).
La denici on completa de esta acci on 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 posici on De a la posi-
ci on A, es necesario que el bloque Bloque y la posici on A est en despejados, lo mismo
que el bloque Bloque est e en la posici on De. El resto del procedimiento cond/2 es-
tablece restricciones extras: que Bloque sea un bloque, y A y De sean objetos en el
universo de discurso; que A sea diferente de Bloque (no mover el bloque sobre si
mismo); que se debe mover el bloque a una nueva posici on (A es diferente de De);
y no mover el bloque de s mismo (Bloque es diferente de De). Las deniciones de
add/2 y del/2 completan la especicaci on de mover/3.
Las siguientes deniciones especican 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 An alisis medios-nes 145
Tal denici on de las acciones, establece tambi en el espacio de planes posibles,
por lo que se le conoce como espacio de planeaci on. Las metas del planeador se
denen en t erminos de una lista de observaciones que se deben cumplir.
Ahora veremos como a partir de esta representaci on, es posible derivar los planes
mediante un procedimiento conocido como an alisis medios-nes.
11.2. An alisis medios-nes
Consideremos que el mundo de los bloques se encuentra en el estado inicial
especicado anteriormente (estado1). Sea la meta del planeador en(a, b). El trabajo
del planeador consiste en encontrar una secuencia de acciones que satisfagan esta
meta. Un planeador tpico razonara de la siguiente forma:
1. Encontrar una acci on que satisfaga en(a, b). Al buscar en la relaci on add, en-
contramos que tal acci on es de la forma mover(a, De, b) a partir de cualquier
De. Tal acci on deber a formar parte de nuestro plan, pero no podemos ejecutarla
inmediatamente dado nuestro estado inicial.
2. Hacer posible la acci on mover(a, De, b). Al buscar en la relaci on cond encontra-
mos que la condici on para ejecutar esta acci on 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; pero
no que despe jado(a), as que el planeador se concentra en esta f ormula como su
nueva meta.
3. Volvemos a buscar en la relaci on add para encontrar una acci on que satisfaga
despe jado(a). Tal acci on tiene la forma mover(Bloque, a, A). La condici on para
ejecutar esta acci on 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 que
mover(c, a, 2) puede ejecutarse en el estado inicial, modicando el estado del
problema de la siguiente manera:
Eliminar del estado inicial las relaciones que la acci on borra.
Incluir las relaciones que la acci on 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 acci on mover(a, 1, b), con lo que la meta plantada se
satisface. El plan encontrado es:
146 11 Planeaci on
1 [ mover(c,a,2), mover(a,1,b) ]
Este estilo de razonamiento se conoce como an alisis medios-nes. Observen que
el ejemplo planteado el plan se encontr o directamente, sin necesidad de reconside-
rar. Esto ilustra como el proceso de razonar sobre el efecto de las acciones y las me-
tas guan la planeaci on en una direcci on adecuada. Desafortunadamente, no siempre
se puede evitar reconsiderar. De hecho, la explosi on combinatoria y la b usqueda son
tpicas en la planeaci on.
El principio de planeaci on por an alisis medios-nes se ilustra en la gura 11.1.
Puede plantearse como sigue: Para resolver una lista de metas Metas en un estado
Estado, que lleven a un estado Estado nal, hacer:
Si todas las Metas son verdaderas en Estado, entonces Estado nal = Estado. En
cualquier otro caso:
1. Seleccionar una Meta no solucionada en Metas.
2. Encontrar una Acci on que agregue Meta al estado actual.
3. Hacer posible Acci on resolviendo Condici on para obtener el estado inter 1.
4. Aplicar la Acci on 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 nal.
Estado
Estado
inter 1
Estado
inter 2
Estado
nal
Condicin Meta Metas
prePlan Accin postPlan
Figura 11.1 An alisis medios-nes
El c odigo del planeador medios nes 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 Planeaci on
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! Esto
se debe a que el mundo de los bloques es m as complejo de lo que parece, debido a
la combinatoria. En este problema, el planeador tiene acceso a m as opciones entre
diferentes acciones que tienen sentido bajo el an alisis medios-nes. M as opciones,
signica mayor complejidad combinatoria.
Regresemos al ejemplo, lo que sucede es que el planeador persigue diferentes
metas en diferentes etapas de la construcci on del plan. Por ejemplo:
mover(b, 3, c) satisfacer en(b, c)
mover(b, c, 3) satisfacer clear(c) y ejecutar siguiente acci on
mover(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 vez
mover(a, 1, b) satisfacer en(a, b) otra vez
Lo que esta tabla muestra es que a veces el planeador destruye metas que ya haba
satisfecho. El planeador logra f acilmente satisfacer una de las dos metas planteadas,
en(b, c) pero la destruye al buscar como satisfacer la otra meta en(a, b). Lo peor
es que est a forma desorganizada de seleccionar las metas, puede incluso llevar al
fracaso en la b usqueda 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 estas
metas no puedan ser seleccionadas. De forma que el planeador medios-nes con
metas protegidas se dene 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 b usqueda 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 soluci on, aunque sigue sin ser la mejor. Un s olo movimiento mover(b, 2, 4)
era necesario para cumplir con las metas planeadas.
Los planes innecesariamente largos son resultado de la estrategia de b usqueda
usada por nuestro planeador.
11.4. Aspectos procedimentales de la b usqueda en amplitud
Los planeadores implementados usan esencialmente una estrategia de b usqueda
primero en profundidad, pero no por completo. Para poder estudiar lo que est a pa-
sando, debemos poner atenci on 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 est a instanciada cuando esta meta es
alcanzada. El predicado append/3 genera al reconsiderar, candidatos alternativos
para PrePlan en el siguiente orden:
1 PrePlan = [];
2 PrePlan = [_];
3 PrePlan = [_,_];
4 PrePlan = [_,_,_];
5 ...
150 11 Planeaci on
Candidatos cortos para PrePlan son los primeros. PrePlan establece una con-
dici on para Accion. Esto permite encontrar una acci on cuya condici on puede sa-
tisfacerse por un plan tan corto como sea posible (simulando b usqueda primero en
amplitud). Por otra parte, la lista candidato para PostPlan est a totalmente no ins-
tanciada, y por tanto su longitud es ilimitada. Por tanto, la estrategia de b usqueda
resultante es globalmente primero en profundidad, y localmente primero en ampli-
tud. Con respecto al encadenamiento haca adelante de las acciones que se agregan
al plan emergente, se trata de una b usqueda primero en profundidad. Cada acci on es
validada 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 su
parte de b usqueda en amplitud, de forma que los planes cortos sean considerados
antes que los largos. Podemos imponer esta estrategia embebiendo nuestro plani-
cador en un procedimiento que genere planes candidatos ordenados por tama no
creciente. 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 m as elegante, insertando el generador
de 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 b usqueda en amplitud 151
Y por tanto podemos volver a computar la meta original, encontrando esta vez el
plan m as 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 problem atica. Este resultado se obtiene con y sin protecci on de me-
tas siguiendo la estrategia primero en amplitud. El segundo movimiento del plan
parece superuo y aparentemente no tiene sentido. Investiguemos porque se le in-
cluye en el plan y porque a un en el caso de la b usqueda primero en amplitud, el plan
resultante est a lejos del optimo.
Dos preguntas son interesantes en este problema: Qu e razones encuentra el pla-
neador para construir este curioso plan? y Por qu e el planeador no encuentra el plan
optimo e incluye la acci on mover(b, 3, a)? Atendamos la primer pregunta. La ultima
acci on mover(a, 1, b) atiende la meta en(a, b). Los tres primeros movimientos est an
al servicio de cumplir las condiciones de esta acci on, en particular la condici on
despe jado(a). El tercer movimiento despeja a y una condici on de este movimiento
es en(b, a). Esto se cumple gracias al curioso segundo movimiento mover(b, 3, a).
Esto ilustra la clase de ex oticos planes que pueden emerger durante un razonamiento
medios-nes.
Con respecto a la segunda pregunta, Por qu e despu es de mover(c, a, 2), el pla-
neador no considera inmediatamente mover(b, 3, c), lo que conduce a un plan opti-
mo? La raz on es que el planeador estaba trabajando en la meta en(a, b) todo el
tiempo. La acci on que nos interesa es totalmente superua para esta meta, y por lo
tanto no es considerada. La cuarta acci on logra en(a, b) y por pura suerte en(b, c)!
Este ultimo resultado no es una decisi on planeada de nuestro sistema.
De lo anterior se sigue, que el procedimiento medios-nes, tal y como lo he-
mos implementado es incompleto, no sugiere todas las acciones relevantes para el
proceso de planicaci on. Esto se debe a la localidad con que se computan las so-
luciones. Solo se sugerir an acciones relevantes para la meta actual del sistema. La
soluci on al problema est a en este enunciado: se debe permitir la interacci on entre
metas en el proceso de planicaci on. Antes de pasar al siguiente tema, consideren
152 11 Planeaci on
que al introducir la estrategia primero en amplitud para buscar planes m as cortos,
hemos elevando considerablemente el tiempo de computaci on necesario para hallar
una soluci on.
11.5. Regresi on de metas
Supongan que estamos interesados en una lista de metas Metas que se cumplen
en cierto estado E. Sea el estado anterior a E, E
0
y la acci on ejecutada en E
0
, A.
Qu e metas Metas
0
tienen que cumplirse en E
0
para que Metas se cumpla en E?
Metas
0
debe tener las siguientes propiedades:
1. La acci on A debe ser posible en E
0
, por lo que Metas
0
debe implicar la condici on
para A.
2. Para cada meta M en Metas, se cumple que:
la acci on A agrega M; o
M Metas
0
y A no borra M.
El c omputo para determinar Metas
0
a partir de Metas y la acci on A se conoce
como regresi on de metas. Por supuesto, s olo estamos interesados en aquellas accio-
nes que agregan alguna meta M a Metas. Las relaciones entre varios conjuntos de
metas y condiciones se ilustra en la gura 11.2
Figura 11.2 Relaciones entre conjuntos de condiciones en la regresi on de metas va la acci on A. El
area sombreada representa las metas Metas
0
resultado de la regresi on. Observen que la intersecci on
entre Metas y la lista borrar de A debe ser vaca.
El mecanismo de regresi on de metas puede usarse como planeador de la siguiente
manera. Para satisfacer una lista de metas Metas a partir de un estado EstadoInicial,
hacer: Si Metas se cumple en EstadoInicial, entonces el plan vaco es suciente; en
cualquier otro caso, seleccionar una meta M Metas y una acci on A que agregue
11.5 Regresi on de metas 153
M; entonces computar la regresi on de Metas va A obteniendo as NuevasMetas y
buscar un plan para satisfacer NuevasMetas desde EstadoInicial.
El procedimiento puede mejorarse si observamos que algunas combinaciones de
metas son imposibles. Por ejemplo en(a, b) y despe jado(b) no pueden satisfacerse
al mismo tiempo. Esto se puede formular va la relaci on:
1 imposible(Meta,Metas).
que indica que la Meta es imposible en combinaci on con las Metas. Para el caso del
mundo de los bloques la incompatibilidad entre las metas se dene 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 \== Y
7 ;
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 Planeaci on
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 problema
del 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 planeaci on medios nes con primero el
mejor
Los planeadores construidos hasta ahora hacen uso de estrategias de b usqueda
b asicas: primero en profundidad, o primero en amplitud, o una combinaci on de am-
bas. Estas estrategias son totalmente desinformadas, en el sentido que no pueden
usar informaci on del dominio del problema para guiar su selecci on entre alternati-
vas posibles. En consecuencia, estos planeadores son sumamente inecientes, salvo
en casos muy especiales. Existen diversas maneras de introducir una gua heurstica,
11.6 Combinando planeaci on medios nes con primero el mejor 155
basada en el dominio del problema, en nuestros planeadores. Algunos lugares donde
esto puede hacerse son:
En la relaci on seleccionar(Estado, Metas, Meta) que decide el orden en que las
metas ser an procesadas. Por ejemplo, una gua en el mundo de los bloques es que
las torres deben estar bien cimentadas, de forma que la relaci on en/2 m as arriba
de la torre, debera resolverse al ultimo (o primero en el planeador por regresi on,
que soluciona el plan en orden inverso). Otra gua es que las metas que ya se
cumplen en el medio ambiente, deberan postergarse.
En la relaci on lograr(Accion, Meta) que decide que acci on alternativa ser a inten-
tada para lograr una meta dada. Observen que nuestro planeador tambi en genera
alternativas al procesar precond/2. Por ejemplo, algunas acciones son mejo-
res porque satisfacen m as de una meta simult aneamente. Tambi en, con base en
la experiencia, podemos saber que cierta condici on es m as f acil de satisfacer que
otras.
Decisiones acerca de qu e conjunto de regresi on de metas debe considerarse a
continuaci on. Por ejemplo, seguir trabajando en el que parezca m as f acil de re-
solver, buscando as el plan m as corto.
Esta ultima idea muestra como podemos imponer una estrategia primero el mejor
en nuestro planeador. Esto implica computar un estimado heurstico de la dicultad
de conjuntos de regresi on de metas alternativos, para expandir el m as promisorio.
Recuerden que para usar este tipo de estrategia es necesario especicar:
1. Una relaci on s/3 entre nodos del espacio de b usqueda: s(Nodo
1
, Nodo
2
,Costo).
2. Los nodos meta en el espacio: meta(Nodo).
3. Una funci on heurstica de la forma h(Nodo, Hestimado).
4. El nodo inicial de la b usqueda.
Una forma de denir estos requisitos es asumir que los conjuntos de regresi on
de metas son nodos en el espacio de b usqueda. Esto es, en el espacio de b usqueda
har a una liga entre Metas
1
y Metas
2
si existe una acci on A tal que:
1. A agrega alguna meta Metas
1
.
2. A no destruye ninguna meta Metas
1
3. Metas
2
es el resultado de la regresi on de Metas
1
a trav es de A, tal y como de-
nimos en nuestro planeador anterior: regresion(Metas
1
, A, Metas
2
).
Por simplicidad, asumiremos que todas las acciones tienen el mismo costo, y en
consecuencia asignaremos Costo =1 en todas las ligas del espacio de b usqueda. Por
lo que la relaci on s/3 se dene 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 Planeaci on
Cualquier conjunto de metas que sea verdadero en la situaci on inicial de un plan,
es un nodo meta en el espacio de b usqueda. El nodo inicial de la b usqueda es la lista
de metas que el plan debe lograr.
Aunque la representaci on anterior tiene todos los elementos requeridos, tiene un
peque no defecto. Esto se debe a que nuestra b usqueda primero el mejor encuentra
un camino soluci on como una secuencia de estados y no incluye acciones entre los
estados. Por ejemplo, la secuencia de estados (listas de metas) para logra en(a, b) en
el 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 situaci on inicial, el segundo es resultado de
la acci on mover(c, a, 2) y el tercero es resultado de la acci on mover(a, 1, b).
Observen que la b usqueda primero el mejor regresa el camino soluci on en el
orden inverso. En nuestro caso es una ventaja, porque los planes son construidos en
la regresi on haca atr as, as que al nal obtendremos la secuencia de acciones en
el orden correcto. Sin embargo, es raro no tener menci on explcita a las acciones
en el plan, aunque puedan reconstruirse de las diferencias entre listas de metas.
Podemos incluir las acciones en el camino soluci on f acilmente, basta con agregar
a cada estado la acci on que se sigue de el. De forma que los nodos del espacio de
b usqueda tendr an la forma:
1 Metas -> Accion
Su implementaci on 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 planeaci on medios nes 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 Arbol
7 %%% Arbol1 es Arbol expandido bajo el Umbral
8 %%% Si la meta se encuentra, Solucion guarda el camino
solucion
9 %%% y Solucionado = si
10
11 % Caso 1: la hoja con Nodo es una meta, construye una solucion
12
13 expandir(Camino,hoja(Nodo,_),_,_,si,[Nodo|Camino]) :-
14 meta(Nodo).
15
16 % Caso 2: una hoja con f-valor menor o igual al Umbral
17 % Generar succesores de Nodo y expandirlos bajo el Umbral
18
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 sucesores
23 listaSuccs(G,Succ,As), % Encontras subarboles As
24 mejorF(As,F1), % f-value of best successor
25 expandir(Camino,arbol(Nodo,F1/G,As),Umbral,Arbol1,
26 Solucionado,Sol)
27 ;
28 Solucionado = nunca % Nodo no tiene sucesores
29 ).
30
31 % Caso 3: Nodo interno con f-valor menor al Umbral
32 % Expandir el subarbol mas promisorio con cuyo
33 % resultado, continuar/7 decidira como proceder
34
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 vaco
44 % Punto muerto, el problema nunca sera resuelto
45
46 expandir(_,arbol(_,_,[]),_,_,nunca,_) :- !.
47
48 % Caso 5: f-valor mayor que el Umbral
49 % Arbol no debe crecer
50
158 11 Planeaci on
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 solucionados
58 % la solucion esta en Sol
59
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-valor
77
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 por
f-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-valores
98
99 f(hoja(_,F/_),F). % f-valor de una hoja
100 f(arbol(_,F/_,_),F). % f-valor de un arbol
101
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 acci on nula stop es necesaria pues todos los nodos deben incluir una acci on.
Aunque la heurstica usada es simple, el programa debe ser m as r apido que las ver-
siones anteriores. Eso si, el precio a pagar es una mayor utilizaci on de la memoria,
debido a que debemos mantener el conjunto de alternativas competitivas.
11.7. Variables y planes no lineales
A manera de comentario nal, consideraremos dos casos que pueden mejorar la
eciencia de los planicadores construidos en esta sesi on. El primer caso consiste
en permitir que las acciones y las metas contengan variables no instanciadas; el
segundo caso es considerar que los planes no son lineales.
11.7.1. Acciones y metas no instanciadas
Las variables que ocurren en nuestros planeadores est an siempre instanciadas.
Esto se logra, por ejemplo en la relaci on precond/2 cuyo cuerpo incluye la meta
block(Block) entre otras. Este tipo de meta hace que Block siempre est e instanciada.
Esto puede llevar a la generaci on de numerosos movimientos alternativos irrelevan-
tes. Por ejemplo, cuando al planeador se le plantea como meta despe jar(a), este
utiliza lograr/2 para generar movimientos que satisfagan despe jado(a):
1 mover(De,a,A)
Entonces se computan las condiciones necesarias para ejecutar esta acci on:
1 precond(mover(De,a,A)),Cond)
160 11 Planeaci on
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 m as eciente este paso del planeador, es posible permitir variables no
instanciadas en las metas. Para el ejemplo del mundo de los bloques, las condiciones
de mover seran denidas como:
1 precond(mover(Bloque,De,A),
2 [despejado(Bloque),despejado(A),en(Bloque,De)]).
Si reconsideramos con esta nueva denici on la situaci on inicial, la lista de con-
diciones computadas sera:
1 [despejado(Bloque),despejado(A),en(Bloque,a)]
Observen que esta lista de metas puede ser satisfecha inmediatamente en la si-
tuaci on inicial de nuestro ejemplo si Bloque/c y A/2. Esta mejora en eciencia se
logra postergando la decisi on de c omo instanciar las variables, al momento en que
ya se cuenta con m as informaci on para ello.
Este ejemplo ilustra el poder de la representaci on con variables, pero el precio a
pagar es una mayor complejidad. Para empezar, nuestro intento por denir precond
para mover/3 es err oneo, pues permite movimientos como mover(c, a, c), que da
como resultado que !el bloque c est e en el bloque c! Esto podra arreglarse si espe-
cic aramos 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 signica que los dos argumentos no denotan al mismo objeto
Prolog. Una condici on como estas, no depende del estado del problema, de forma
que no puede volverse verdadero mediante acci on alguna, pero debe vericarse eva-
luando el predicado correspondiente. Una manera de manejar estas cuasi-metas es
agregar al predicado satis f echo/2 la siguiente cl ausula:
1 satisfecho(Estado,[Meta|Metas]) :-
2 satisface(Meta),
3 satisfecho(Estado,Metas).
11.7 Variables y planes no lineales 161
De forma que debemos denir tambi en:
1 satisface(diferente(X,Y))
Tal relaci on tiene exito si X y Y no se corresponden. Si X y Y son lo mismo,
la condici on es falsa. Este caso debera tratarse con imposible, pues la condici on
deber a seguir siendo falsa, sin importar las acciones que ser an adoptadas en el plan.
En otro caso, estamos ante falta de informaci on y satis f ace se debera postergar.
11.7.2. Planes no lineales
Un problema con nuestro planeador es que considera todos los posibles ordenes
de las acciones, a un cuando las acciones son completamente independientes. Con-
sideren el problema ilustrado en la gura 11.3, donde la meta es construir dos pilas
de bloques que est an de antemano bien separados. Las dos pilas puede construirse
independientemente 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, de
forma que el orden de las acciones s olo es relevante dentro de cada plan. Tampoco
importa si se ejecuta primero Plan1 o Plan2 y es incluso posible ejecutarlos de
manera alternada, por ejemplo:
1 [mover(b,a,c), mover(e,d,f), mover(d,8,e), mover(a,1,b)]
Sin embargo, nuestro planeador considerar a las 24 permutaciones posibles de
las 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 orden
total de las acciones en el plan. Una mejora se lograra si, en los casos donde el
orden no es importante, la precedencia entre las acciones se mantiene indenida.
Entonces nuestros planes ser an conjuntos de acciones parcialmente ordenadas. Los
planeadores que aceptan este tipo de representaci on se conocen como planeadores
no lineales.
Consideremos nuevamente el ejemplo de la gura 11.3. Analizando las metas
en(a, b) y en(b, c) el planeador no lineal concluye que las siguientes dos acciones
son necesarias en el plan:
1 M1 = mover(a,X,b)
2 M2 = mover(b,Y,c)
162 11 Planeaci on
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 planeaci on con dos planes independientes
No hay otra forma de resolver ambas metas, pero el orden de estas acciones es
a un indeterminado. Ahora consideren las condiciones de ambas acciones. La condi-
ci on de mover(a, X, b) incluye depe jado(a), la cual no se satisface en la situaci on
inicial, por lo que necesitamos una acci on de la forma:
1 M3 = mover(Bloque,a,A).
que precede a M1. Ahora tenemos una restricci on en el orden de las acciones:
1 antes(M3,M1)
Ahora revisamos si M3 y M1 pueden ser el mismo movimiento. Como este no
es el caso, el plan tendr a que incluir tres movimientos. Ahora el planeador debe
preguntarse si hay una permutaci on de [M1, M2, M3] tal que M3 preceda a M1, tal
que la permutaci on es ejecutable en el estado inicial del problema y las metas se
cumplen en el estado resultante. Dadas las restricciones de orden anteriores tres
permutaciones 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 sustituci on 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, pero
puede ser aliviada considerablemente.
Referencias 163
Referencias
1. I. Bratko. Prolog programming for Articial Intelligence. Addison-Wesley, 3rd edition, 2001.
2. Alonzo Church. A note on the entscheidungsproblem. Journal of Symbolic Logic, 1:4041,
1936.
3. K. Clark. Negations as failure. In H. Gallaire and J. Minker, editors, Logic and Databases,
pages 293322. 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 331367. ACM Press
/ Addison-Wesley, 1996.
5. M.R. Genesereth and N.J. Nilsson. Logical Foundations for Articial Intelligence. Morgan
Kauffman 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 569574. North-Holland, 1974.
7. Robert A. Kowalski and Donald Kuehner. Linear resolution with selection function. Articial
Intelligence, 2(3/4):227260, 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 Articial 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:81106, 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):2341, 1965.
16. J. A. Robinson. Logic and logic programming. Communications of the ACM, 35(3):4065,
1992.
17. Stuart J. Russell and Peter Norvig. Articial 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:623656, 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 230265,
1936.
20. D. H. D. Warren. An abstract Prolog instruction set. Technical Report 309, SRI, 1983.

Вам также может понравиться