Sie sind auf Seite 1von 49

Lgica Algunos conceptos sobre Prolog versin 1.

0
Pgina 1 de 49
UBA Facultad de Ciencias Econmicas
Lgica
Algunos conceptos sobre Prolog

Autor:
Carlos Lombardi carlombardi@gmail.com
ndice
Algunos conceptos sobre Prolog....................................................................................................................................... 1
ndice ................................................................................................................................................................................ 1
Captulo 1 Lgica para sistemas ................................................................................................................................ 3
Sistemas de informacin........................................................................................................................................... 3
Razonamiento, informacin, inferencia ................................................................................................................. 4
Lgica de predicados de primer orden................................................................................................................... 6
Y si la inferencia no se puede hacer?................................................................................................................ 8
Objetos genricos distintas visiones de una misma entidad....................................................................... 8
En resumen................................................................................................................................................................. 9
Captulo 2 El mundo de Prolog .............................................................................................................................. 10
El lenguaje Prolog.................................................................................................................................................... 10
tomos y nombres ............................................................................................................................................. 10
Ausencia de cdigo............................................................................................................................................. 11
Molculas y variables .......................................................................................................................................... 11
Limitaciones......................................................................................................................................................... 13
Programa Prolog ...................................................................................................................................................... 15
Apuntar a los objetivos ...................................................................................................................................... 16
La concesionaria en Prolog ............................................................................................................................... 16
Qu se describe en un programa ...................................................................................................................... 18
Consultas e intrprete Prolog................................................................................................................................. 20
Necesidad de respetar las decisiones sobre predicados y constantes ......................................................... 21
Consultas existenciales ....................................................................................................................................... 22
Las respuestas son siempre constantes............................................................................................................ 24
Distintas consultas con el mismo predicado inversibilidad...................................................................... 25
Variables cuantificadas existencialmente.............................................................................................................. 26
Algunos existenciales menos visibles............................................................................................................... 28
Desigualdades ........................................................................................................................................................... 28
Captulo 3 Algunos ejemplos................................................................................................................................... 30
Gustos literarios ....................................................................................................................................................... 30
Empezar por las consultas................................................................................................................................. 30
Representamos condiciones para gustar ......................................................................................................... 31
Algunos errores comunes .................................................................................................................................. 32
El resto de los enunciados................................................................................................................................. 33
Conclusiones........................................................................................................................................................ 34
Punto b. ................................................................................................................................................................ 35
El programa entero............................................................................................................................................. 36
Animales en movimiento........................................................................................................................................ 37
Anlisis de la consulta ........................................................................................................................................ 37
Dos enunciados complicados ........................................................................................................................... 38
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 2 de 49
Captulo 4 Negacin.................................................................................................................................................. 40
Sintaxis....................................................................................................................................................................... 40
Comportamiento negacin por falla.................................................................................................................. 40
Consultas con variables...................................................................................................................................... 41
Uso en clusulas ....................................................................................................................................................... 42
Alcance ................................................................................................................................................................. 43
Comentario final caractersticas no deductivas................................................................................................. 44
Anexo 1 sintaxis de Prolog ...................................................................................................................................... 45
Estructura del programa ......................................................................................................................................... 45
Nombres.................................................................................................................................................................... 45
Conectivas ................................................................................................................................................................. 45
Cuantificacin de las variables ............................................................................................................................... 46
Otros smbolos......................................................................................................................................................... 46
Comentarios.............................................................................................................................................................. 47
Anexo 2 operacin del SWI Prolog........................................................................................................................ 48
Instalacin................................................................................................................................................................. 48
Funcionamiento ....................................................................................................................................................... 48

Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 3 de 49
Captulo 1 Lgica para sistemas
Sistemas de informacin
Como profesionales de sistemas, vamos a participar en la concepcin, definicin, desarrollo y mantenimiento
de sistemas de informacin.
Pensemos un poco, entonces, en qu es un sistema de informacin visto (un poco) "desde adentro", o sea,
desde la perspectiva de los que participan en su construccin.

Un sistema de informacin trata informacin: la adquiere u obtiene de alguna forma, la manipula, y a partir
de ella obtiene ciertos resultados, que son los resultados del sistema.
Aqu la palabra "informacin" lleva el sentido de lo que se define como "Informacin pragmtica" en el
apunte sobre Diferentes sentidos del concepto de informacin; la informacin puede ser organizada y
manipulada de formas muy distintas en distintos sistemas.
En muchos sistemas, aunque no en todos, la informacin adquirida se registra en alguna forma explcita y bien
definida, y los procesos de manipulacin actan sobre esta representacin.


Un ejemplo sencillo de sistema de informacin son las marcas que hace un preso de los das que lleva
encerrado.
El preso, cuando sabe que empez otro da, registra esta informacin en la pared con una codificacin bien
conocida. El proceso de manipulacin consiste en contar las marcas, y el resultado es saber cuntos das faltan
para su liberacin.

Otro ejemplo, ms clsico, es el sistema de liquidacin de sueldos de una empresa.
1. El sistema obtiene la informacin a partir de la carga que hacen operadores sobre los eventos que le
interesan al sistema: incorporaciones de empleados, vacaciones y licencias, recategorizaciones, etc..
A esto podra sumarse la obtencin de informacin en forma automtica (p.ej. las horas trabajadas
por cada empleado pueden ser informadas por la mquina donde fichan), y por interaccin con otros
sistemas (p.ej. la ANSES publica un Web Service al que se pueden consultar las modificaciones en los
descuentos de ley).
2. Toda la informacin adquirida es registrada, tpicamente en una base de datos.
3. Los distintos procesos de manipulacin consultan la informacin representada para obtener los
resultados esperados, p.ej. la impresin de recibos y libros legales, reportes sobre sueldos a pagar, etc..

Un ejemplo bastante distinto consiste en considerar al cerebro humano como un sistema de informacin;
adquiere informacin a travs de sus sentidos y su medio cultural, la manipula por intermedio de la interaccin
neuronal, y obtiene los resultados que necesita para llevar adelante su vida. En este caso la representacin de la
informacin no es explcita, est imbricada dentro del mismo cerebro.

Los tres ejemplos mencionados tienen caractersticas muy distintas entre s.
En general, hay muchos posibles "puntos de partida" a partir de los cuales se pueden construir sistemas.
En los ejemplos tenemos: pared y piedra para marcar, computadora y base de datos, neuronas e impulsos
elctricos.

En este apunte estaremos interesados en los sistemas cuya representacin de la informacin es explcita y est
dada en la forma de proposiciones o enunciados; es lo que en el apunte sobre Diferentes sentidos del
concepto de informacin se define como informacin proposicional.
Cualquier combinacin entre una forma de representar informacin ms mecanismos para manipular la
informacin representada, puede servir como base para construir sistemas de este tipo.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 4 de 49
Si quiero que el "agente manipulador" sea una computadora, tanto el formato en el que se representa la
informacin como las formas de manipularla tienen que poder ser implementados en software.
En particular, esto impone (en principio) una restriccin de formalidad: debe haber reglas bien definidas que
gobiernen la representacin y la manipulacin; respectivamente son las reglas de formacin (gobiernan la
representacin) y reglas de transformacin o inferencia (que gobiernan la manipulacin).

Queda claro que el cerebro, entendido fsicamente, queda fuera de los sistemas que vamos a estudiar, porque
no se maneja con lo que llamamos informacin proposicional.
Razonamiento, informacin, inferencia
Con el objetivo de construir sistemas de informacin en mente, revisemos conceptos que aparecieron en la
cursada.

Buena parte del contenido de la materia puede estructurarse a partir del concepto razonamiento. Recordamos
que

Cada enunciado es exactamente una unidad de informacin, aquello que enuncia un enunciado es
informacin
1
. Veamos algunos ejemplos de enunciados:
1. Scrates es mortal.
2. Todos los hombres son mortales.
3. Ana y Luisa son amigas.
4. Todos los amigos de Ana conocen a Toms.
5. Lucas obtuvo un 5 en el 1er parcial, y un 7 en el 2do.
6. Para aprobar, hay que obtener al menos 4 en cada parcial.
7. Petrobrs es una empresa petrolera que cotiza en la Bolsa de Buenos Aires.
8. El patrimonio neto de Petrobrs es de 2150 millones de euros.
9. Las empresas cuyo patrimonio neto excede los 1000 millones de euros se consideran grandes.
10. Las acciones de las empresas petroleras grandes tienen tendencia al alza.
11. Cualquier auto que tenga ABS y aire acondicionado le puede interesar a Mirna.
12. El auto del Sr. Gmez tiene ABS, levantavidrios elctrico y estreo con MP3.
13. El auto del Sr. Galndez tiene aire acondicionado, cierre centralizado y ABS.

La informacin incluida en cada uno de estos enunciados puede ser de inters para distintos sistemas.

Tal vez eso no es tan evidente intuitivamente para los enunciados 1 a 4, no es informacin que manejen los
sistemas que habitualmente asociamos a la idea de "sistema de informacin".

Para el resto de los enunciados s podemos imaginar sistemas en donde son pertinentes:
enunciados 5 y 6 son ejemplos tpicos de informacin que maneja un sistema de administracin de
una unidad educativa.
enunciados 7 al 10: pueden aparecer en un sistema de administracin de carteras burstiles.
enunciados 11 al 13: pueden aparecer en el sistema que manejan los vendedores de una
concesionaria de autos.


1
en el apunte sobre Diferentes sentidos del concepto de informacin se indica explcitamente que
"Las unidades de informacin que se toman en consideracin son proposiciones o enunciados de algn lenguaje (ya sea una lengua
histrica o un lenguaje formal)"
un razonamiento es un conjunto de enunciados, de los cuales a uno lo
destacamos y lo llamamos conclusin; el resto son las premisas.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 5 de 49
Es posible que la representacin de estos enunciados en un sistema difiera de cmo los estamos expresando,
p.ej. en el enunciado 11 Mirna podr estar representada por su nmero de cliente, y en el 12 el auto del Sr.
Gmez por su patente.
Eso no quita que la informacin representada es la que estamos describiendo, independientemente de las
decisiones sobre cmo elegimos representarla.

Pasemos ahora al concepto de inferencia.
Este concepto se refiere, en general, a los distintos aspectos de la relacin entre las premisas y la conclusin de
un razonamiento.
Ahora bien, si queremos usar este concepto como base para construir sistemas de informacin, nos interesar
la forma que tome el "agente manipulador" que produce los resultados (que sern las conclusiones) a partir de
la informacin con que contamos (que sern las premisas). Por lo tanto

P.ej. a partir de los enunciados 11 a 13 podemos concluir que a Mirna le puede interesar el auto del Sr.
Galndez, pero no el del Sr. Gmez; el proceso que lleva a obtener esa conclusin, y por lo tanto a armar un
razonamiento (uniendo la conclusin obtenida a las premisas de la que se parti) es lo que entenderemos
como proceso de inferencia en el contexto de este apunte.

Otra vez, nos referimos al apunte sobre Diferentes sentidos del concepto de informacin, que termina as:
La inferencia lgica, en general, puede ver como una manera de procesar informacin proposicional. El
input est constituido por lo que se llaman premisas (de un razonamiento) y el output es su conclusin.
Ntese que este sentido de informacin puede verse como un caso especial de que se adopta en el
mbito de sistemas de informacin.


Retomemos ahora el objetivo de construir sistemas de informacin, tomando como ejemplo a la concesionaria
de autos que quiere un sistema que ayude a los vendedores a encontrar autos adecuados para sus clientes a
partir de las preferencias de cada cliente.

El resultado que esperamos del sistema es que nos diga qu autos conviene ofrecerle a un determinado cliente.
La informacin que debemos manejar, tomando un contexto muy simplificado, es la referente a gustos de
cada cliente y caractersticas de cada auto
2
.

Entonces, usando los conceptos de razonamiento y proceso de inferencia, podemos concebir este sistema de
informacin.
La informacin es la que expresan los enunciados, que van a ser de la forma de los enunciados 11 a 13; vamos
a usar esta informacin como premisas.
La forma de manejar la informacin ser generar inferencias sobre los enunciados, para obtener conclusiones.
P.ej. a partir de los enunciados de ejemplo, puedo obtener estas conclusiones
a. conviene recomendarle a Mirna el auto del Sr. Galndez.
b. no conviene recomendarle a Mirna el auto del Sr. Gmez.
Estos enunciados de la forma "conviene recomendarle al cliente X el auto Y" o "no conviene recomendarle al
cliente X el auto Y" sern los resultados del sistema.
Son resultados tiles, que le sirven a los vendedores en el trato con sus clientes.


2
En un anlisis ms detallado, podramos incluir el precio que cada cliente est dispuesto a pagar, las condiciones de pago
que se pueden armar, los gustos de las personas por franja etaria u otras caractersticas generales, etc..
en este apunte, nos interesarn los procesos de inferencia, entendiendo
como proceso de inferencia cualquier proceso por el cual se obtiene una
conclusin a partir de un conjunto de premisas.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 6 de 49
Hasta aqu, podemos imaginar un "sistema manual" armado as:
para cada auto se arma una ficha con sus caractersticas
cuando llega un cliente, el vendedor que lo atiende le pregunta qu auto quiere;
para saber qu autos se le pueden recomendar, el vendedor se comunica con una oficina de
recomendaciones donde estn las fichas, le cuenta qu est buscando el cliente, y el empleado de la
oficina de recomendaciones le dice qu autos conviene ofrecerle.

Observamos que la oficina de recomendaciones no necesita conocer a los clientes ni a los autos directamente,
puede obtener sus resultados usando slo la informacin que tiene representada,.las fichas para los autos, lo
que le cuenta el vendedor para los clientes.
Notamos tambin que la informacin que incluimos es la que resulta pertinente para el sistema, p.ej. de cada
auto no registramos el peso del eje delantero, y de los clientes no nos importa el color de pelo.
La informacin que elegimos incluir en un sistema es la que necesitamos para obtener los resultados buscados;
el recorte de la informacin a incluir en un sistema es un factor crtico para su construccin.

Aunque no estamos usando computadoras, tenemos todos los elementos de un sistema de informacin del
estilo deseado: informacin representada explcitamente (fichas ms indicaciones de los vendedores), manejo
de la informacin representada (las inferencias que hace la oficina de recomendaciones), resultados concretos
(qu autos pueden o no recomendarse).


Resumiendo, si tomamos
representacin de la informacin: mediante enunciados.
manipulacin: proceso de inferencia que nos permite armar razonamientos.
resultados del sistema: conclusiones de los razonamientos construidos.
entonces a partir de estos conceptos podemos armar sistemas de informacin.

Para que este sistema pueda ser implementado en una computadora no nos sirven el castellano en el que se
escriben las fichas, ni la inferencia intuitiva del empleado de la oficina de recomendaciones. Necesitamos
1. un formalismo de representacin de informacin
2. una descripcin formal de cmo realizar inferencias.

Este es el rol de la
Lgica de predicados de primer orden
La lgica de predicados de primer orden nos provee con los dos elementos que necesitamos
a. un lenguaje formal, con reglas bien definidas, en el que puede describir la informacin; o sea, las
premisas y las posibles conclusiones de los razonamientos.
b. sistemas de inferencia deductiva (p.ej. el sistema de deduccin natural) que define reglas que nos
permiten saber, en algunos casos, si un razonamiento es correcto o no, o sea, si es correcto obtener
una determinada conclusin a partir de un conjunto de premisas.

Entonces, usando la lgica de predicados de primer orden, podemos construir sistemas de informacin
basados en los conceptos de razonamiento e inferencia.

Hagmoslo para la agencia de autos; transcribamos los tres enunciados que tomaremos como premisas.
1. El auto del Sr. Gmez tiene ABS, levantavidrios elctrico y estreo con MP3.
2. El auto del Sr. Galndez tiene aire acondicionado, cierre centralizado y ABS.
3. Cualquier auto que tenga ABS y aire acondicionado le puede interesar a Mirna.

Necesitamos hacer varias cosas.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 7 de 49

Primero, elegir un cdigo para los predicados y constantes de individuo que aparecen. Elijamos este:
a Mirna b auto del Sr. Gmez
c auto del Sr. Galndez d ABS
e levantavidrios elctrico f estreo con MP3
g cierre centralizado h aire acondicionado
Pxy a x le puede interesar el auto y Qxy el auto x tiene el accesorio y
Ahora podemos escribir las premisas
El auto del Sr. Gmez tiene ABS, levantavidrios elctrico y estreo con MP3.
1 (Qbd Qbe) Qbf
El auto del Sr. Galndez tiene aire acondicionado, cierre centralizado y ABS.
2 (Qch Qcg) Qcd
Cualquier auto que tenga ABS y aire acondicionado le puede interesar a Mirna
3
.
3 x ((Qxd Qxh) Pax)

Si queremos saber si a Mirna le puede interesar el auto del Sr. Galndez, analizaremos la correccin del
razonamiento que tenga las tres frmulas anteriores como premisas, y esta conclusin
Pac

Este razonamiento es correcto, vemoslo usando deduccin natural
4 Qcd 2, E
5 Qch Qcg 2, E
6 Qch 5, E
7 Qcd Qch 4, 6, I
8 (Qcd Qch) Pac 3, E
9 Pac 8, 7, MP

Entonces, si al sistema le pregunto si a Mirna le puede interesar el auto del Sr. Galndez, va a responder que s.

Ya tenemos una forma de interaccin, o de uso, de un sistema de informacin basado en lgica.
Observamos que la interaccin con este sistema consiste en hacerle preguntas, a las que responde por "s" o
por "no"
4
.
Ya sabemos cundo responde que s: cuando el razonamiento cuyas premisas son la informacin representada
y la conclusin es la pregunta es correcto; visto de otra forma, cuando el sistema puede inferir la pregunta a
partir de la informacin que tiene.
En el ejemplo: el sistema "sabe" (o sea, maneja conocimiento) sobre los gustos de Mirna y las caractersticas de
los autos. Le pregunto si a Mirna le puede interesar el auto del Sr. Galndez; como puede inferirlo, responde
que "s".

3
Este enunciado podra haber sido descripto de otra forma por la persona que nos indica cmo funciona la
concesionaria; p.ej. "Mirna lo que busca en un auto es ABS y aire"; a partir de la forma en que los expertos del dominio
nos dscriben la informacin, debemos elegir cmo representarla.
Cuando formalizamos informacin para un sistema, debemos elegir representaciones que sean adecuadas a los objetivos
del sistema; en este caso, obtener las conclusiones que buscamos.
Este fenmeno se repite, no slo en el mbito de la programacin basada en lgica (que es el tema de este apunte), sino
en los sistemas de informacin basados en computadoras en general. Encontrar representaciones adecuadas es un
aspecto crtico en el xito de un sistema.

4
En rigor, nos gustara algo ms poderoso: poder preguntarle al sistema p.ej. qu autos le pueden interesar a Mirna, en
lugar de preguntar uno por uno. Usando Prolog s podemos hacer eso, como lo veremos ms adelante.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 8 de 49
Y si la inferencia no se puede hacer?
Pasemos al auto del Sr. Gmez; la conclusin para este caso es
Pab
A partir de las premisas, no puedo demostrar esta conclusin, ni tampoco la contraria
Pab

Qu debera decir el sistema en este caso?
El criterio generalmente asumido en los sistemas de informacin basados en estas ideas es que:

Por lo tanto, la respuesta del sistema para el auto del Sr. Gmez ser "no", lo que se corresponde con lo
esperable intuitivamente.
Ms adelante volveremos a este tema.
Objetos genricos distintas visiones de una misma entidad
Al plantear el cdigo que usamos para el sistema de la concesionaria, hay algo respecto de la eleccin de las
constantes que puede resultar extrao. Se supone que las constantes de individuo se corresponden con,
exactamente, individuos.
Las constantes que representan a Mirna y a cada auto son claras en este sentido, tengo una constante y un
objeto concreto que es representado por la constante.

Tomemos ahora la constante d qu es "ABS"?
Claramente no se refiere al ABS de un auto en particular, p.ej. al del Sr. Gmez. Observemos que en los
tomos que enuncian "el auto del Sr. Gmez tiene ABS" y "el auto del Sr. Galndez tiene ABS" estamos
representando el "ABS" con la misma constante, que es d.

Podramos haber elegido representar "ser ABS" con un predicado R, entonces el enunciado "el auto del Sr.
Gmez tiene ABS" se representara as
x (Qbx Rx) (1)
o sea "existe un accesorio tal que el auto del Sr. Gmez lo tiene y que es ABS".
Si hubiramos representado todos los accesorios de esta forma, entonces el enunciado sobre los gustos de
Mirna quedara as (S : ser aire acondicionado):
x ((y z (Qxy Qxz Ry Sz)) Pax)
Para modelar el mismo problema, tengo que recurrir a una representacin ms compleja. Adems, como
veremos, en el lenguaje Prolog no podemos escribir una frmula como (1).

Desde otro punto de vista, analicemos qu entidades manejan las personas que trabajan en la seccin de
ventas de la concesionaria, p.ej. los vendedores.
Si un vendedor sabe que un auto tiene ABS, lo ms probable es que no est pensando en el objeto fsico ABS
del auto. Si dos autos tienen ABS, en la visin del vendedor a los dos autos "les pasa lo mismo" que es tener
ABS, y esta informacin es relevante para el objetivo del sistema. Los objetos fsicos que son el sistema de
ABS de cada auto no son de inters para este sistema.

Si por otro lado le preguntamos a un vendedor "qu accesorios tiene el auto del Sr. Gmez?" la respuesta
ser "ABS, levantavidrios y estreo con MP3" (veremos ms adelante que s podemos hacer una consulta de
esta forma en Prolog)
Entonces, para el vendedor existe algo que se llama ABS, pero que no es un objeto fsico, es algo que
llamaremos "objeto genrico".
si el sistema no puede inferir lo que se pregunta a partir de la informacin
que maneja, entonces responde "no".
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 9 de 49

Podemos hacer una analoga con los componentes de un plato, p.ej. tanto la salsa bolognesa como una
empanada llevan carne picada. Est claro que no estamos hablando de una porcin determinada de carne
picada, sino de un objeto genrico, el mismo que me permite preguntarle a alguien "tens carne picada?".

Respecto de los objetivos del sistema, los equipos individuales de ABS no son relevantes; en el dominio que
manejan las personas que obtienen los resultados que se le pedirn al sistema no aparecen estas entidades. Si
tomamos "ABS" como un objeto genrico, este s es relevante para el sistema; por lo tanto, es el que amerita
estar representado con una constante de individuo.

En conclusin: la constante d est representando al objeto genrico ABS, al accesorio ABS, que s es,
conceptualmente, el mismo para todos los autos que tienen ABS.
Al elegir qu entidades denotar con constantes en un sistema, debo analizar, a partir de los resultados que
deben obtenerse, en qu casos es pertinente referirnos a objetos individuales (como Mirna o el auto del Sr.
Gmez en el ejemplo) y en qu casos es conveniente referirnos a objetos genricos (como ABS o
levantavidrios).

Est claro que si construyramos un sistema para el taller de la concesionaria, sera ms probable que los
objetos fsicos ABS s tuvieran relevancia, y por lo tanto ameritaran ser representados individualmente.
Qu se representa y cmo va en funcin de los resultados esperados del sistema y de qu visin estn
atrapando; la visin de un auto que tiene un vendedor es distinta a la que tiene un mecnico.
En resumen
Veamos cmo qued configurado nuestro sistema de informacin:
informacin representada: enunciados expresados en frmulas del lenguaje de predicados.
manejo de la informacin: ante una consulta, expresada tambin como una frmula, tomar la
informacin representada como premisas, la consulta como conclusin, y usar un sistema de
deduccin para elucidar si puede demostrarse la correccin del razonamiento construido.
resultados: ante cada consulta, se responde "s" si de pudo demostrar que el razonamiento
construido es correcto, y "no" en caso contrario.

Tomando el ejemplo clsico de la mortalidad de Scrates, un sistema de informacin basado en lgica: tendr
como informacin representada "Scrates es hombre" y "todos los hombres son mortales", y ante la consulta
"Scrates es mortal" responder que s.

Estas ideas (representacin en un lenguaje formal, usar procesos de inferencia como manipulacin, interaccin
mediante consultas) son la base de sistemas de informacin que realmente se usan, p.ej. los llamados "sistemas
expertos".


En el curso vamos a ver un ejemplo muy sencillo, que es la construccin de pequeos sistemas (p.ej. alguno
anlogo al de Scrates) usando un lenguaje de programacin llamado Prolog.

El Prolog es una herramienta que permite construir sistemas que responden a las ideas que presentamos en
este captulo, porque
acepta informacin representada en un lenguaje que es una variacin restringida del lenguaje de
predicados.
acepta consultas representadas por frmulas en el mismo lenguaje.
intenta demostrar la correccin del razonamiento, y responde por "s" o por "no" ante cada consulta
segn el criterio recin indicado.

Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 10 de 49
Captulo 2 El mundo de Prolog
Aunque no conocemos los detalles acerca de cmo es Prolog, ya sabemos varias cosas de l.

En primer lugar su objetivo: ser una herramienta que nos permita construir sistemas de informacin basados
en los conceptos de razonamiento e inferencia.

Tambin algunas caractersticas:
La informacin se describe en un lenguaje que tiene relacin con el de la lgica de predicados de
primer orden.
La forma de obtener resultados es mediante consultas; una consulta es una frmula expresada en el
mismo lenguaje en el que se describe la informacin.
Usa algn sistema de deduccin para saber si el razonamiento cuyas premisas son las informacin
descripta, y la conclusin es la consulta, es correcto.

Veamos ahora al Prolog un poco ms en detalle.
El lenguaje Prolog
tomos y nombres
Comencemos con el lenguaje. Dijimos que es una variacin restringida del lenguaje del clculo de
predicados.
Vamos a ver la sintaxis de Prolog a partir de ejemplos; una descripcin ms ordenada aparece en el anexo 1.

Por qu variacin? Porque la sintaxis es distinta. Hay muchas diferencias:
Los smbolos de predicado, variable y constante de individuo, en realidad no son smbolos sino que
son secuencias de smbolos, o sea, pueden tener varias letras.
P.ej. si quiero representar el predicado mondico "ser un gato", puedo asignarle a ese predicado la
secuencia de letras gato, en lugar de tener que designar una letra predicativa.
Lo mismo pasa con constantes de individuo y con variables.
A la secuencia de smbolos que denota un predicado la llamaremos el nombre del predicado, y
anlogamente para constantes de individuo y variables.
La palabra "nombre" se usa extensamente en sistemas para referirnos a la palabra que denota una
unidad de un lenguaje de programacin: nombres de funcin, de procedimiento, de mdulo, etc..
Para distinguir qu nombra cada nombre, en Prolog:
los nombres de predicado empiezan con minscula.
los nombres de variable empiezan con mayscula.
los nombres de constante de individuo empiezan con minscula.
Un tomo tiene esta forma
predicado(argumento-1, ..., argumento-n)
en lugar de la forma que tiene en lgica
Pa
1
...a
n
La traduccin de una frmula a Prolog se llama clusula. Todas las clusulas tienen que terminar
con punto (si no "no anda").

Con estas reglas ya podemos escribir clusulas (equivalente a frmulas) atmicas en Prolog.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 11 de 49
P.ej. tenemos que decir que Fritz es un gato. En lgica podemos expresarlo as:
Pa
(con el cdigo: Px : x es un gato, a : Fritz). En Prolog podemos escribirlo de esta forma:
gato(fritz).
(observar el punto al final de la clusula).
Otro ejemplo: si queremos expresar que Ana y Marcos son amigos mediante un predicado didico, en Prolog
puede quedarnos, p.ej., as:
amigos(ana,marcos).
en lugar de
Qbc
(el cdigo para este caso es Qxy : x e y son amigos, b : Ana, c : Marcos).
La coma adentro de los parntesis separa entre argumentos para predicados polidicos.
Los nombres fritz, ana y marcos estn en minsculas, porque denotan constantes de individuo.
Ausencia de cdigo
La caracterstica de que los nombres puedan tener muchas letras es muy til, porque elimina la necesidad de
tener un cdigo separado de las clusulas.
En la clusula
gato(fritz).
no hace falta cdigo, se entiende que el predicado mondico gato(X) representa "X es un gato" y que la
constante fritz representa al gato llamado Fritz.
Para que no haga falta cdigo, tenemos que elegir los nombres de predicados y constantes de forma tal de que
se lean, que leyendo las clusulas pueda entender qu informacin estn representando sin necesidad de un
cdigo separado.
En general, elegir buenos nombres es muy importante en la construccin de sistemas de informacin, vamos a
practicar esta habilidad en el curso.
Molculas y variables
Hablemos ahora de los temas que nos quedan: frmulas moleculares y variables.

Representemos en Prolog el enunciado "todos los gatos son mamferos", para introducir el condicional y el
cuantificador universal. En Prolog este enunciado se escribe as
mamifero(X):- gato(X).
en lgica de predicados de primer orden sera (Px : x es gato, Rx : x es mamifero)
x Px Rx
El smbolo :- es un condicional "al revs", o sea, el consecuente se pone a la izquierda, el antecedente se
pone a la derecha.
En el enunciado clsico "todos los hombres son mortales" el antecedente es ser hombre, el consecuente es ser
mortal. En Prolog queda as:
mortal(X):- hombre(X).

Las clusulas moleculares pueden leerse de izquierda a derecha usando la palabra si para el smbolo :- ; as, la
primer clusula puede leerse de la siguiente forma
"para todo X, X es mamfero si X es gato"
o ms resumido
"mamfero si gato"
OJO que esto es distinto a decir
"si es mamfero, es gato"
dicho as, est implcito el "entonces", es equivalente a
"si es mamfero entonces es gato"
que no es lo que dice la clusula.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 12 de 49

Antes de seguir, tres apuntes sobre la clusula
mamifero(X):- gato(X).

1. Cmo "sabe" Prolog que el argumento es una variable?
Porque empieza con mayscula. P.ej. en esta clusula
mamifero(x):- gato(x).
el argumento es la constante de individuo x, no una variable.
Recordemos que en Prolog no hay nombres que sean slo para constante y nombres que sean slo para
variable; el criterio para diferenciar constantes de variables es si empiezan en minscula o en mayscula.

2. dnde dice "para todo", cmo sabe que la variable est cuantificada universalmente?
Todas las variables en Prolog estn cuantificadas; el cuantificador est implcito, no se escribe. Para todas
las variables se asume un cuantificador universal, salvo dos casos que veremos ms adelante.

3. sobre el nombre de predicado gato
Un detalle adicional sobre la clusula sobre gatos y mamferos: para decir "X es gato" elegimos gato
como nombre de predicado.
Adems de ser conveniente por la comprensin, es necesario si a partir de esta clusula ms la que ya
tenamos
gato(fritz).
queremos que Prolog pueda inferir que Fritz es mamfero, y por lo tanto responda "s" a la consulta
correspondiente.
En general al representar informacin en Prolog debemos ser coherentes con los nombres que elegimos;
si para representar al mismo concepto (predicado o constante) no usamos siempre el mismo nombre, no
obtendremos los resultados esperados.
Volveremos sobre este tema ms adelante.

Sigamos con el anlisis de las clusulas moleculares en Prolog.
Toda clusula molecular bien formada tiene que tener exactamente una aparicin del smbolo :- , o sea que
si en una clusula no tiene :- entonces tiene que ser atmica
en ninguna clusula puede aparecer el :- ms de una vez.

Adems del :- las nicas conectiva que incluye Prolog son conjuncin y negacin
El tratamiento de la negacin en Prolog tiene caractersticas bastante particulares, que describiremos en un
captulo dedicado. Veamos ahora la conjuncin.
La conjuncin que se escribe con una coma. Ahora bien, la conjuncin solamente puede ir en a la derecha del
:- o sea en el antecedente.
P.ej. una posible clusula para representar "los gatos cazan ratones" es
caza(X,Y):- gato(X), raton(Y).
en donde las dos variables estn cuantificadas universalmente; en lgica sera
x y ((Px Qy) Rxy)
(Px : x es gato; Qx : x es ratn; Rxy : x caza a y)

Resumiendo: toda frmula molecular va a tener esta forma
consecuente :- antecedente.
donde en el consecuente va a aparecer un nico tomo, y en el antecedente pueden aparecer varios separados
por coma que significa conjuncin.

En Prolog se bautizaron las partes de una clusula molecular
al consecuente se lo llama cabeza
al smbolo :- se lo llama cuello
al antecedente se lo llama cuerpo
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 13 de 49
O sea que las clusulas moleculares tienen una cabeza y un cuerpo, separados por el cuello. La cabeza tiene un
solo tomo, el cuerpo puede tener varios.
P.ej. en la clusula
caza(X,Y):- gato(X), raton(Y).
la cabeza es caza(X,Y) y el cuerpo es gato(X), raton(Y).

Las nicas conectivas que hay son el cuello, la coma, y la negacin que la vamos a ver ms adelante.

Las que siguen son clusulas mal formadas:
mamifero(X) :- felino(X) :- gato(X).
porque ninguna clusula puede tener ms de un :-.
gato(fritz), raton(jerry).
porque toda clusula molecular debe tener un :-.
mamifero(X), come(X,Y) :- gato(X), raton(Y).
porque la coma slo puede ir en el cuerpo; la coma que est mal es la de la cabeza.
caza(X,Y):- gato(X), raton(Y)
porque le falta el punto del final ( no olvidarlo !!).
Limitaciones
Con esto vimos casi toda la sintaxis de Prolog que vamos a usar, y ya vimos por qu lo de variacin.

Tambin queda claro por qu restringida; hay restricciones en dos aspectos.
1. conectivas, slo tenemos un equivalente del condicional y la conjuncin, y adems con limitaciones de
uso
2. cuantificadores, est restringido qu cuantificador se corresponde con cada variable y no puedo
cambiarlo.

Hay muchas frmulas que pueden escribirse en lgica de predicados de primer orden, y que no pueden
traducirse a una clusula Prolog.
En algunos casos, podremos esquivar la limitacin traduciendo una frmula en varias clusulas; en otros casos
esto no es posible.

Veamos algunos casos de frmulas no traducibles directamente
5
:
1. Pa Ta
2. Pa Qa
3. x ((Px Qx) Rx)
4. x (Px (Sx Rx))
5. x (Px (Sx Rx))
6. x Px
Un posible cdigo comn a estas frmulas es este:
a Fritz Px x es mamfero
Qx x es reptil Rx x tiene piel
Sx x tiene dientes Tx x es adulto

Analicemos para cada una si podemos traducirla en Prolog usando muchas clusulas


5
recordemos que dejamos el tratamiento de la negacin para un captulo posterior
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 14 de 49
1 - Pa Ta
Este caso es sencillo: separamos en dos clusulas
mamifero(fritz).
adulto(fritz).
Si analizamos las reglas de introduccin y eliminacin de la conjuncin en el sistema de deduccin
natural, obtenemos inmediatamente que en un conjunto de premisas es equivalente tener la premisa
Pa Ta
(las dos juntas) a tener las dos premisas
Pa
Ta
(las dos separadas).
Esto se generaliza para conjunciones mltiples, o sea frmulas de la forma
(((f
1
f
2
) f
3
) f
4
) ...
que pueden expresarse en Prolog usando tantas clusulas como elementos de la conjuncin.

2 - Pa Qa
En este caso, no hay traduccin a Prolog. Podemos armar una clusula similar a partir de la frmula
lgicamente equivalente
Pa Qa
pero por las caractersticas de la negacin de Prolog (que veremos ms adelante) el uso de una frmula de
este estilo para obtener resultados es muy limitada; y en general diremos que no podemos expresar en
Prolog frmulas cuya conectiva principal es una disyuncin.

3 - x ((Px Qx) Rx)
Si fuera conjuncin en lugar de disyuncin en el antecedente se podra traducir inmediatamente.
Cuando tengo disyuncin en el antecedente, a partir de esta ley lgica
((a b) c) ((a c) (b c))
puedo obtener que la frmula es equivalente a la que sigue
x ((Px Rx) (Qx Rx))
y distribuyendo el cuantificador (que puede hacerse sin problemas en este caso) nos queda
x (Px Rx) x (Qx Rx)
Usando lo que ya vimos para el caso 1 (partir en clusulas las frmulas cuya conectiva principal es una
conjuncin), esto se puede traducir a Prolog en dos clusulas; en el ejemplo son
tienePiel(X):- mamifero(X).
tienePiel(X):- reptil(X).
(recordemos el cdigo P : mamfero, Q reptil, R tiene piel)
Observemos que el antecedente va a la derecha, mientras que el consecuente va a la izquierda.

4 - x (Px (Sx Rx))
Este tipo de frmulas no se puede traducir a clusulas Prolog; la disyuncin del consecuente no se puede
separar, y recordemos que en la cabeza de una clusula puede ir un solo tomo.

5 - x (Px (Sx Rx))
Esta frmula no se puede traducir directamente, porque habra que poner varios tomos en la cabeza de
la clusula correspondiente; en el ejemplo sera
tieneDientes(X), tienePiel(X):- mamifero(X).
(recordemos P : mamfero; S : tiene dientes ; R : tiene piel)
que es una clusula mal formada.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 15 de 49
Al igual que en el caso 3, hay una ley lgica que nos ayuda a descomponer la frmula; en este caso es
(a (b c)) ((a b) (a c))
Usando esta ley, puedo transformar la frmula en cuestin en
x ((Px Sx) (Px Rx))
y distribuyendo el cuantificador (que puede hacerse sin problemas en este caso) nos queda
x (Px Sx) x (Px Rx)
en el ejemplo, en Prolog queda
tieneDientes(X):- mamifero(X).
tienePiel(X):- mamifero(X).

6 - x Px
Esta frmula no tiene traduccin a Prolog
6
; en general va a pasar eso con las frmulas en los que el
cuantificador principal sea un existencial.
Por lo tanto, no podemos escribir en Prolog frmulas que enuncien la existencia de un ente con ciertas
caractersticas sin denotarlo; p.ej. no podemos escribir "el auto del Sr. Gmez tiene un equipo de ABS"
sin nombrarlo.
Esta es una de las motivaciones para la aparicin de constantes que denotan "objetos genricos", tal cual
lo indicado en el captulo 1. En lugar de expresar "el auto del Sr. Gmez tiene un equipo de ABS" se
establece el "objeto genrico" equipo de ABS, y se relaciona a cada auto con las constantes que
representan sus accesorios.
Programa Prolog
Ahora que aprendimos la sintaxis, veamos cmo usar el lenguaje Prolog para construir sistemas de
informacin de la forma planteada en el primer captulo.
En el lenguaje Prolog vamos a escribir, tanto la informacin disponible, que son las premisas, como las
consultas que querramos hacer, que son las posibles conclusiones.

Al conjunto de premisas que forman la informacin relevante para un sistema lo vamos a llamar programa
Prolog; dicho de otra forma

o sea, para cada sistema que construyamos en este curso habr un programa Prolog que describe la
informacin que necesita analizarse para producir los resultados esperados.

En los sistemas de informacin construidos usando Prolog, el programa es la informacin representada.
Cada pregunta que se le haga al Prolog se har a partir de un programa, y


A partir del mismo programa hay varias preguntas que querremos que responda, o sea, conclusiones que se
puede querer testear si pueden o no inferirse del programa.

6
de acuerdo a lo que vemos en este curso; hay una herramienta que provee Prolog llamada variable annima con la que se
pueden expresar existenciales en algunos casos. El estudio de la variable annima excede los contenidos de este curso.
ante cada pregunta, el Prolog responder "s" si puede inferir la pregunta a
partir del programa, y "no" en caso contrario.
un programa Prolog es un conjunto de clusulas que describe la
informacin relevante para un sistema de informacin.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 16 de 49
Retomando el sistema de recomendaciones para la concesionaria de autos, vemos que hay dos consultas
posibles:
le puede interesar a Mirna el auto del Sr. Gmez?
le puede interesar a Mirna el auto del Sr. Galndez?

Para nosotros, construir un sistema consistir en escribir el programa que describe la informacin relevante, y
probar si se pueden obtener los resultados esperados.
Apuntar a los objetivos
Cuando se plantea la construccin de un sistema de informacin (en general, no slo para los que estudiamos
en este curso) se tienen ciertos objetivos, y el sistema construido debe satisfacer esos objetivos.
Si un sistema no responde a lo que se espera de l, no es til, sin importar las caractersticas positivas que
pueda tener (facilidad de uso, robustez, costo, etc.).

Para los sistemas de informacin basados en lgica, los objetivos son los tipos de pregunta que quiero poder
hacer a partir del programa, y qu respuesta espero en distintos casos, que pueden establecerse como casos de
prueba.
Vemoslo con un ejemplo: en el sistema de recomendaciones de la concesionaria, el objetivo es poder
preguntar qu autos pueden recomendarse a qu clientes, y los casos de prueba podran ser las preguntas
respecto de Mirna.

Los objetivos de cada sistema influyen en qu informacin voy a incluir en el programa, y posiblemente
tambin en la forma que tenga de representarla; en particular, qu predicados elijo, qu aridad tiene cada
predicado, cules van a ser las constantes que voy a usar.
Puede haber varias formas en principio correctas de describir cierta informacin usando el lenguaje Prolog; si
una permite hacer a partir del programa construido las consultas que se plantean como objetivo mientras que
otra no, entonces el primer programa es adecuado para el sistema que estoy construyendo, mientras que el
segundo no.

Resumiendo:

La concesionaria en Prolog
Lleg el momento de armar nuestro primer programa Prolog; vamos a describir la informacin relevante para
el sistema de recomendaciones, y testearlo.
Mientras se va armando el programa voy a describir algunas cuestiones que conviene tener en cuenta.

El objetivo del sistema es poder preguntar, dados una persona y un auto, si a la persona se le puede
recomendar o no el auto.

Recapitulemos la informacin introducida antes, y su representacin en lgica.
El auto del Sr. Gmez tiene ABS, levantavidrios elctrico y estreo con MP3.
(Qbd Qbe) Qbf
El auto del Sr. Galndez tiene aire acondicionado, cierre centralizado y ABS.
(Qch Qcg) Qcd
para que un programa Prolog sea adecuado, no alcanza con que describa la
informacin en forma correcta, tambin debe servir para hacer las inferencias que
se esperan del sistema para el cual se construye.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 17 de 49
Mirna est buscando un auto que tenga ABS y aire acondicionado.
x ((Qxd Qxh) Pax)
Agreguemos un poco ms de informacin, sin traducirla a lgica:
Tanto Juana como Lola est buscando un auto con MP3 y aire acondicionado.
Pedro est buscando un auto con ABS.
Todos los jvenes buscan autos con MP3 y levantavidrios elctrico.
Lucas y Francisco son jvenes.

Empecemos por el primer enunciado; vimos que debemos "partirlo" en tres clusulas, nos queda
accesorio(autoGomez, abs).
accesorio(autoGomez, levantavidrios).
accesorio(autoGomez, mp3).
(antes de seguir, ver la relacin entre estas tres clusulas y la frmula expresada en lgica de predicados de
primer orden)
Tuvimos que elegir un nombre para el auto del Sr. Gmez, que es la constante autoGomez
7
.

Describamos anlogamente al auto del Sr. Galndez
accesorio(autoGalindez, aire).
accesorio(autoGalindez, cierre).
accesorio(autoGalindez, abs).
Para describir a los accesorios de ambos autos usamos el mismo predicado, accesorio.
Al describir los accesorios del auto del Sr. Gmez, eleg describir los accesorios de un auto mediante el
predicado accesorio, que tiene aridad 2; el primer argumento es el auto, el segundo es el accesorio.
Una vez hecha esta eleccin, debo ser coherente con ella; si usara otro nombre de predicado para los
accesorios del segundo auto, no podra armar un programa que responda correctamente.
Anlogamente, eleg el nombre abs para describir al accesorio ABS; esta eleccin tambin debe ser coherente.
Esta coherencia ya se ve en la representacin en lgica: en las dos frmulas se us el mismo smbolo de
predicado (Q) para la relacin entre cada auto y sus accesorios; y la misma constante (d) para representar al
ABS.

Vamos ahora a la frmula que describe los gustos de Mirna
puedeInteresar(mirna,X):- accesorio(X,abs), accesorio(X,aire).
observamos que el consecuente es la cabeza, y el antecedente es el cuerpo. En este caso la traduccin pudo ser
directa, porque el Prolog soporta conjuncin en el antecedente.

Describamos los gustos de Juana y Lola. Pasado a "castellano regimentado", el enunciado quedara as:
si X tiene aire acondicionado y MP3, entonces X le puede interesar a Juana y a Lola
tenemos una conjuncin en el consecuente; se corresponde con el caso 5 del estudio de las limitaciones del
lenguaje Prolog; la frmula esta estructura
x ((Axa Axm) (Ijx Ilx))
(A : tiene accesorio ; I : puede interesar ; a : aire acondicionado ; m : MP3 ; j : Juana ; l : Lola).
En Prolog nos queda:
puedeInteresar(juana,X):- accesorio(X,aire), accesorio(X,mp3).
puedeInteresar(lola,X):- accesorio(X,aire), accesorio(X,mp3).
(antes de seguir, entender la relacin entre estas dos clusulas y el enunciado expresado en "castellano
regimentado", traducir a lgica de predicados de primer orden si es necesario. Si no se entiende esta relacin,
va a ser complicado entender lo que sigue en el apunte).

Sigue la afirmacin sobre el gusto de Pedro, que se traduce fcilmente:
puedeInteresar(pedro,X):- accesorio(X,abs).

7
repaso: autoGomez es una constante aunque tiene una mayscula en el medio, para decidir se toma la primer letra que
es minscula
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 18 de 49

Pasemos ahora al enunciado sobre los gustos de los jvenes. Pasado a "castellano regimentado" queda
si
la persona X es joven y el auto Y tiene MP3 y levantavidrios,
entonces
a X le puede interesar Y.
el objetivo del programa es poder hacer preguntas sobre personas individuales, p.ej. Lucas o Mirna; no sobre
"los jvenes" indistintamente. Entonces, ser joven en este programa es una caracterstica de las personas. Si
tengo un enunciado de la forma "a los jvenes " lo deber traducir como "si X es joven entonces "; y en
el cuerpo de la clusula aparecer el tomo joven(X).
La clusula en Prolog queda
puedeInteresar(X,Y):-
joven(X), accesorio(Y,mp3), accesorio(Y,levantavidrios).

Finalmente, describamos las caractersticas de Lucas y Francisco.
joven(lucas).
joven(francisco).

excelente, terminamos con el programa. Ahora, responde al objetivo para el cual se construy? Veamos
parece que s, porque a partir del programa y haciendo preguntas con el predicado puedeInteresar,
Prolog podr indicarnos si a una persona (puntual) puedo o no recomendarle un auto.
Por ejemplo, si viene Lucas puedo preguntar
puedeInteresar(lucas, autoGomez).
puedeInteresar(lucas, autoGimenez).
A la primer pregunta debera responder que s, mientras que a la segunda debera respondr que no.
Efectivamente, ese va a ser el comportamiento de Prolog "cargado" con este programa, como veremos ms
adelante al analizar cmo se hacen las consultas y cmo responde Prolog.
Qu se describe en un programa
Resumamos el programa construido en el pargrafo anterior:

accesorio(autoGomez, abs).
accesorio(autoGomez, levantavidrios).
accesorio(autoGomez, mp3).
accesorio(autoGalindez, aire).
accesorio(autoGalindez, cierre).
accesorio(autoGalindez, abs).

puedeInteresar(mirna,X):- accesorio(X,abs), accesorio(X,aire).
puedeInteresar(juana,X):- accesorio(X,aire), accesorio(X,mp3).
puedeInteresar(lola,X):- accesorio(X,aire), accesorio(X,mp3).
puedeInteresar(pedro,X):- accesorio(X,abs).
puedeInteresar(X,Y):-
joven(X), accesorio(Y,mp3), accesorio(Y,levantavidrios).

joven(lucas).
joven(francisco).

Para llegar a este programa tomamos varias decisiones sobre cmo representar la informacin, vemoslas con
algo de detalle.

Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 19 de 49
1.
elegimos qu constantes de individuo necesitamos incluir en el programa.
Los entes que identificamos mediante constantes de individuo son:
los autos; tenemos una constante para cada auto que est en venta.
los posibles compradores.
los accesorios de cada auto.
La decisin podra haber sido distinta, p.ej. no haber definido constantes para los accesorios, y en cambio
haber definido un predicado para cada uno; p.ej. en lugar de las constantes abs y aire, predicados
tieneAbs y tieneAire. La primer clusula hubiera quedado as
tieneAbs(autoGomez).
y la clusula sobre los gustos de Mirna tendra esta forma
puedeInteresar(mirna,X):- tieneAbs(X), tieneAire(X).

Al elegir las constantes, es importante tener claro si en cada caso nos conviene trabajar con objetos especficos
u objetos genricos; ver la seccin al respecto en el captulo 1.
En este caso, los autos y los posibles compradores sern representados individualmente, mientras que para los
accesorios elegimos representarlos en forma genrica, con una constante para cada accesorio, y no p.ej. una
para el ABS del auto del Sr. Gmez y otra distinta para el auto del Sr. Galndez.

2.
elegimos qu predicados usar para la descripcin.
Los predicados que elegimos son
accesorio, que relaciona cada auto con los accesorios que tiene.
puedeInteresar, que relaciona los posibles compradores con los autos.
joven, que indica cules de los posibles compradores son jvenes.

Est claro que las decisiones sobre predicados y constantes estn muy relacionadas: el cambio en decisin
sobre constantes para los accesorios hace aparecer nuevos predicados.

3.
decidimos qu informacin incluir en el programa, lo que da lugar a qu clusulas lo van a formar.
Lo que debemos incluir en el programa para poder obtener los resultados esperados es:
los accesorios que tiene cada auto.
lo que est buscando cada posible comprador.
para que tenga sentido la condicin sobre los gustos de los jvenes, hay que incluir la informacin
sobre quines de los posibles compradores son jvenes.
Al escribir las clusulas que describen la informacin que se decidi incluir en el programa, hay que respetar
las decisiones tomadas sobre predicados y constantes, y ser coherente con ello. P.ej. en todas las clusulas que
hacen referencia a accesorios, usamos el predicado accesorio; no usamos p.ej. en algunas accesorio y
en otras otro predicado tieneAccesorio.
Lo mismo para las constantes, al aire acondicionado lo llamamos siempre aire; no a veces aire y otras
aireAcondicionado.

Observamos tambin que las decisiones sobre constantes y predicados de un lado, y sobre informacin a
incluir del otro, son en cierta medida independientes: los predicados y las constantes nos indican cmo
representar informacin, pero no qu informacin representar.
P.ej. estas clusulas
accesorio(autoGomez, abs).
tieneAbs(autoGomez).
describen la misma informacin, que el auto del Sr. Gmez tiene ABS.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 20 de 49
Consultas e intrprete Prolog
Sigamos con el ejemplo del sistema para recomendaciones en la concesionaria de autos.
En la seccin anterior construimos, usando el lenguaje Prolog, un sistema con el objetivo de poder preguntarle
qu autos, entre los que estn en venta, pueden interesarle a qu clientes.

Cmo hacemos estas preguntas; dicho de otra forma, cmo hacemos "andar" un programa Prolog?

Aqu interviene un nuevo elemento, que es el intrprete Prolog.

Un intrprete es un programa al que, a la vez, se le puede "cargar" o incorporar un programa Prolog.

Una vez "cargado" el programa, se pueden escribir consultas en el intrprete, escritas tambin en lenguaje
Prolog, usando los mismos predicados y constantes usados en el programa.
El intrprete responder "Yes" o "No", segn si puede inferir (usando un sistema de deduccin anlogo
aunque de distintas caractersticas- que el sistema de deduccin natural) la consulta tomando como premisas
las clusulas que componen el programa cargado.

De esta forma, el intrprete es el "agente manipulador" del que hablamos en el captulo 1: ante una consulta,
manipula la informacin relevante, y entrega la respuesta que es el resultado que obtenemos del sistema.

Hay varios intrpretes Prolog, para el curso elegimos uno llamado SWI Prolog. Incluimos los detalles sobre
cmo usar este intrprete en un anexo de este apunte.

Volviendo al ejemplo, supongamos que cargamos el programa que construimos en la seccin anterior, y
queremos conocer los gustos de Lucas. Podemos escribir la consulta
?- puedeInteresar(lucas, autoGomez).
obteniendo como respuesta "Yes", y tambin
?- puedeInteresar(lucas, autoGimenez).
obteniendo como respuesta "No".
(los smbolos ?- los pone el SWI, es la indicacin para escribir una consulta)

De esta forma, verificamos que el sistema que construimos cumple con sus requisitos, al menos en el caso de
prueba que elegimos.

Tal como vimos en el captulo 1, en cualquier caso en el que Prolog no pueda deducir la consulta tomando el
programa cargado como conjunto de premisas, va a sancionar "No" como respuesta.
Esta caracterstica tiene "nombre propio":

La hiptesis de universo cerrado aparece descripta tanto en literatura sobre programacin basada en lgica,
como en trabajos sobre lgica, p.ej. puede verse el artculo de R. Reiter, "A Logic for Default Reasoning"
(Artificial Intelligence Nro. 13, 1980, North-Holland), pgina 84.
hiptesis de universo cerrado:
para cada relacin que no es indicada explcitamente ni puede deducirse a partir del
programa cargado, el Prolog asume que no se verifica; dicho de otra forma, para
Prolog el "universo" a partir del cual arma razonamientos se limita a lo indicado
explcitamente en el programa cargado.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 21 de 49
Necesidad de respetar las decisiones sobre predicados y constantes
La deduccin que hace el Prolog y que lo lleva a responder "Yes" a la consulta
?- puedeInteresar(lucas, autoGomez).
puede ser reconstruida mediante deduccin natural. Para eso, debemos traducir las clusulas relevantes y la
consulta a lgica:
accesorio(autoGomez,levantavidrios). Qbe
accesorio(autoGomez,mp3). Qbf
puedeInteresar(X,Y):-
joven(X), accesorio(Y,mp3),
accesorio(Y,levantavidrios).
x y ((Rx (Qyf Qye)) Pxy)
joven(lucas). Ri
puedeInteresar(lucas, autoGomez). Pib

El cdigo que usamos es:
b auto del Sr. Gmez e levantavidrios elctrico
f estreo con MP3 i Lucas
Pxy a x le puede interesar el auto y Qxy el auto x tiene el accesorio y
Rx x es joven

Esta es una posible deduccin de la consulta Pib a partir de las premisas
1 Qbe premisa
2 Qbf premisa
3
Qbf Qbe 2, 1, I
4 Ri premisa
5
Ri (Qbf Qbe) 4, 3, I
6
x y ((Rx (Qyf Qye)) Pxy)
premisa
7
(Ri (Qbf Qbe)) Pib 6, E dos veces
8 Pib 7, 5, MP

ahora bien, cul hubiera sido el caso si en lugar de
accesorio(autoGomez,mp3).
hubiramos incluido esta clusula
tieneAccesorio(autoGomez,mp3).
en el programa (o sea, el conjunto de premisas descripto en lenguaje Prolog), dejando el resto del programa
como est (o sea, usando el predicado accesorio en todas las clusulas excepto esta)?
accesorio y tieneAccesorio son predicados distintos; en la traduccin a lgica nos quedara
tieneAccesorio(autoGomez,mp3). Sbf
donde S es la letra para el nuevo predicado.

Cambiando la premisa, el razonamiento con conclusin Pib no es posible, pues a partir de
(Ri (Qbf Qbe)) Pib
Ri (Sbf Qbe)
no podemos aplicar Modus Ponens.
Por lo tanto, si hacemos la consulta
?- puedeInteresar(lucas, autoGomez).
a partir del programa modificado, la respuesta que obtendremos ser No.

Anlogamente, si en esta clusula hubiramos elegido el nombre estereoMp3 para denotar al accesorio que
en el resto del programa llamamos mp3, entonces la clusula nos hubiera quedado
accesorio(autoGomez,estereoMp3). Qbj
donde j es la letra para la nueva constante; estereoMp3 y mp3 son para Prolog dos constantes distintas, tan
distintas como las que en lgica llamamos f y j.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 22 de 49

Con este cambio el razonamiento que llega a Pib no es posible, ahora tenemos
(Ri (Qbf Qbe)) Pib
Ri (Qbj Qbe)
y tampoco podemos usar Modus Ponens. En Prolog la respuesta a la consulta sera No.

El problema en ambos casos es usar, en distintas clusulas del mismo programa, distintos nombres para el
mismo concepto, sea predicado o constante de individuo.
En cualquier consulta que necesitara, para el razonamiento correspondiente, usar clusulas donde el mismo
concepto est con distintos nombres, Prolog no podr armar las deducciones esperadas, y por lo tanto
responder No a consultas a las que esperamos que responda Yes.
Esto es as aunque la diferencia en el nombre sea mnima; p.ej. en un programa que habla de caractersticas de
distintas personas, los nombres de predicado
celoso y celosa
son dos nombres distintos, como P y Q en lgica.

Prolog (como la mayor parte de las herramientas informticas) no lee ni conoce nuestras intenciones, conoce
el programa que le cargamos y usa solamente ese programa para hacer las deducciones que le pedimos al
consultar.
Consultas existenciales
Volvamos al programa completo; agregamos una numeracin de las clusulas para referirnos a ellas ms abajo,
esta numeracin no forma parte de Prolog.

1 accesorio(autoGomez, abs).
2 accesorio(autoGomez, levantavidrios).
3 accesorio(autoGomez, mp3).
4 accesorio(autoGalindez, aire).
5 accesorio(autoGalindez, cierre).
6 accesorio(autoGalindez, abs).
7 puedeInteresar(mirna,X):- accesorio(X,abs), accesorio(X,aire).
8 puedeInteresar(juana,X):- accesorio(X,aire), accesorio(X,mp3).
9 puedeInteresar(lola,X):- accesorio(X,aire), accesorio(X,mp3).
10 puedeInteresar(pedro,X):- accesorio(X,abs).
11 puedeInteresar(X,Y):-
joven(X), accesorio(Y,mp3), accesorio(Y,levantavidrios).
12 joven(lucas).
13 joven(francisco).

Ya sabemos que si hacemos las consultas
?- puedeInteresar(pedro,autoGomez).
?- puedeInteresar(pedro,autoGalindez).
vamos a obtener Yes en ambos casos.

Ahora queremos, no preguntarle a Prolog si un determinado auto le puede interesar a Pedro, sino qu autos
pueden interesarle a Pedro.
Esta consulta puede hacerse as:
?- puedeInteresar(pedro,X).
y las respuestas que obtendremos son:
X = autoGomez
X = autoGalindez
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 23 de 49

Prolog reconoci que esta no es una consulta "de Yes o No" sino una consulta donde debe otorgar respuestas
porque en la consulta aparece una variable; lo que responde son las constantes que, puestas en lugar de la
variable, pueden deducirse de las premisas.
Observemos que cada respuesta es una constante que aparece en el programa (Prolog no puede "inventar"
constantes, es parte de su hiptesis de universo cerrado).

Resumiendo, en Prolog distinguimos entre dos clases de consultas
consultas individuales: no aparecen variables, nicas respuestas posibles Yes o No.
consultas existanciales: s aparecen variables, responde con constantes.


Entendamos ahora "cmo hace" Prolog para poder responder a las consultas existenciales.

Las variables que aparecen en una consulta se suponen cuantificadas existencialmente; esta es una de las dos
excepciones a la regla que dice que todas las variables que aparecen en Prolog se suponen cuantificadas
universalmente. Entonces, la consulta
?- puedeInteresar(pedro,X).
puede traducirse como
x Pjx

Para las deducciones en lgica, tomemos este cdigo
j Pedro b auto del Sr. Gmez
c auto del Sr. Galndez d ABS
Pxy a x le puede interesar el auto y Qxy el auto x tiene el accesorio y

Usando deduccin natural, podemos construir dos deducciones distintas para esta conclusin
1 Qbd premisa, clusula 1
2
x (Qxd Pjx)
premisa, clusula 10
3
Qbd Pjb 2, E
4 Pjb 3, 1, MP
5
x Pjx 4, I

1 Qcd premisa, clusula 6
2
x (Qxd Pjx)
premisa, clusula 10
3
Qcd Pjc 2, E
4 Pjc 3, 1, MP
5
x Pjx 4, I

Observemos que en las dos deducciones el existencial se introduce en el ltimo paso.

Las deducciones que hace Prolog a partir de una consulta existencial pueden asimilarse a deducciones del
sistema de deduccin natural en el cual el ltimo paso consisten en la introduccin del existencial para la
variable que aparece en la consulta.
Entonces en la lnea anterior de la deduccin, aparece una constante, que ser reemplazada por el existencial.
La respuesta que brinda el Prolog es esa constante.
Prolog puede entregar varias respuestas porque busca todas las deducciones que tengan como conclusin la
consulta, para cada deduccin que puede armar responde con la constante correspondiente.

Vemoslo en el ejemplo, hay dos deducciones posibles de x Pjx a partir de la informacin incluida en el
programa. Las constantes que desaparecen en la ltima lnea de las deducciones son b y c respectivamente,
que se corresponden con las respuestas que brinda Prolog, autoGomez y autoGalindez.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 24 de 49


Ahora que entendemos mejor qu es una consulta existencial, podemos definir los dos tipos de consulta:

Las respuestas son siempre constantes
Destacamos otra vez que

Por lo tanto, si se requiere que el sistema que estamos construyendo entregue una determinada respuesta a una
consulta, esa respuesta debe estar modelada en el programa como una constante; de otra forma, Prolog no
puede darla como respuesta.
Esto puede tener influencia en la seleccin de constantes y predicados a utilizar en el programa.

Por ejemplo, una consulta que puede hacerse a partir del programa de la concesionaria es qu accesorios tiene
el auto del Sr. Gmez; la consulta es
?- accesorio(autoGomez,X).
En este caso las deducciones son triviales, y las respuestas son:
X = abs
X = levantavidrios
X = mp3

En lugar de representar la informacin sobre accesorios de cada auto con un nico predicado y usando
constantes para cada accesorio, podramos haber definido un predicado para cada accesorio, p.ej.
1 tieneAbs(autoGomez).
2 tieneLevantavidrios(autoGomez).
...
7 puedeInteresar(mirna,X):- tieneAbs(X), tieneAire(X).
...

Los dos programas son descripciones correctas de la informacin que debemos representar.
Ahora, si la consulta sobre los accesorios de un auto es uno de los requisitos del sistema, el segundo programa
es incorrecto, porque no hay forma de preguntar qu accesorios tiene (p.ej.) el auto del Sr. Gmez.
Cmo darnos cuenta que esta consulta no puede hacerse? Porque una de las respuestas que esperamos de la
consulta (independientemente de cmo la formulemos) es una constante que represente el accesorio ABS, y
todas las respuestas que entrega Prolog ante una consulta existencial son
constantes que aparecen en el programa.
consultas existenciales:
son aquellas en las que aparece, al menos, una variable.
Las variables se asumen cuantificadas existencialmente.
Ante una consulta existencial, el intrprete Prolog responde con una o ms
constantes, una para cada deduccin que puede hacer para la consulta usando
como ltima regla la introduccin del existencial; cada respuesta es la constante
que reemplaza por la variable en cada deduccin que puede armar.
consultas individuales:
son aquellas en las que no aparece ninguna variable.
Ante una consulta individual, las nicas respuestas posibles del intrprete Prolog
son Yes o No.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 25 de 49
no hay tal constante en el programa, tenemos el predicado que representa "tener ABS", pero no la constante
que representa al ABS, y por lo tanto no podremos hacer ninguna consulta de la cual una de las respuestas que
esperamos sea "ABS".

Observamos que en este caso nos estamos aprovechando de la representacin mediante constantes que
denotan"objetos genricos" de los accesorios de cada auto; la respuesta a la pregunta sobre qu accesorios
tiene un auto est dada en trminos de estos objetos (p.ej. si pregunto por los autos del Sr. Gmez y del Sr.
Galndez, en ambos casos una de las respuestas ser abs, que es la misma constante) y por lo tanto deben
estar denotados por constantes en el programa.

Distintas consultas con el mismo predicado inversibilidad
Volvamos a las consultas sobre el predicado puedeInteresar. Anteriormente lo usamos para averiguar
qu autos le pueden interesar a Pedro:
?- puedeInteresar(pedro,X).

Ahora bien, tambin podemos consultar, usando el mismo predicado, a quines les puede interesar el auto del
Sr. Gmez:
?- puedeInteresar(X,autoGomez).
En este caso, las respuestas que obtendremos son
X = pedro
X = lucas
X = francisco

Y tambin puedo consultas por todos los pares (persona, auto) que estn relacionados mediante este
predicado:
?- puedeInteresar(X,Y).
Estas son algunas de las respuestas
X = mirna
Y = autoGalindez

X = pedro
Y = autoGomez

X = pedro
Y = autoGalindez

X = lucas
Y = autoGomez

Finalmente, puedo hacer con este predicado consultas individuales
?- puedeInteresar(mirna,autoGomez).
en este caso la respuesta que obtendr ser Yes.

En principio, para cada predicado que aparece en el programa, puedo hacer consultas donde en cada
argumento puedo poner o bien una constante (en ese caso Prolog la toma como "fija") o bien una variable (en
este caso Prolog la toma cuantificada existencialmente, y busca las constantes que puede reemplazar por esa
variable).

Esta caracterstica de poder ubicar en cada argumento, o bien algo fijo o bien algo variable esperando
respuestas, tiene "nombre propio" en la terminologa de programacin: se la llama inversibilidad y es una
caracterstica positiva de la programacin basada en lgica.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 26 de 49

Existen excepciones a la inversibilidad, si aparecen sern mencionadas explcitamente en lo que sigue del
apunte.


Finalmente, observemos que las deducciones que hace Prolog a partir de la misma consulta existencial pueden
ser distintas entre s, no slo en las constantes sino tambin en la forma de la demostracin.

Veamos cmo llega a las respuestas pedro y lucas a partir de la consulta
?- puedeInteresar(X,autoGomez).

El cdigo que necesitamos es
j Pedro b auto del Sr. Gmez
i Lucas d ABS
e levantavidrios elctrico f estreo con MP3
Pxy a x le puede interesar el auto y Qxy el auto x tiene el accesorio y
Rx x es joven

La consulta se traduce como
x Pxb

Y las deducciones son
1 Qbd premisa, clusula 1
2
x (Qxd Pjx)
premisa, clusula 10
3
Qbd Pjb 2, E
4 Pjb 3, 1, MP
5
x Pxb 4, I respuesta pedro

1 Qbe premisa, clusula 2
2 Qbf premisa, clusula 3
3
Qbf Qbe 2, 1, I
4 Ri premisa, clusula 12
5
Ri (Qbf Qbe) 4, 3, I
6
x y ((Rx (Qyf Qye)) Pxy)
premisa, clusula 11
7
(Ri (Qbf Qbe)) Pib 6, E dos veces
8 Pib 7, 5, MP
9
x Pxb 8, I respuesta lucas
Variables cuantificadas existencialmente
Ya dijimos que en Prolog
1. todas las variables que aparecen estn cuantificadas,
2. el cuantificador est implcito,
3. en principio el cuantificador que corresponde a cada variable es universal, y
4. hay dos excepciones, o sea casos en los que el cuantificador implcito es existencial.
5. una de las excepciones son las consultas: las variables que aparecen en una consulta se asumen
cuantificadas existencialmente.

Veamos ahora la segunda excepcin, a partir de un ejemplo sencillo. A partir del conocimiento de qu
productos necesitan distintas empresas, queremos un sistema que nos diga qu empresas pueden asociarse
para la compra de productos.
Definimos que dos empresas pueden asociarse si hay algn producto que necesiten las dos.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 27 de 49

Escribamos informacin que podramos tener, en Prolog y el correlato en lgica
necesita(colorin,anilina). Pae
necesita(dekor,papel). Pbf
necesita(dekor,anilina). Pbe
necesita(rex,hilo). Pcg
necesita(rex,papel). Pcf

A partir de esta informacin, definamos ahora la relacin de "pueden asociarse", como una relacin didica
entre las empresas.

Vamos a tener un predicado puedenAsociarse didico, y (al menos) una clusula que lo define. La
definicin nos dice que dadas dos empresas cualesquiera, si se cumple una determinada condicin entonces
podemos decir que las empresas pueden asociarse; esto corresponde a una clusula con esta forma
puedenAsociarse(X,Y):- /* ... condiciones ... */.
(repaso: que puedan asociarse es el consecuente, entonces forma la cabeza de la clusula)

cules son las condiciones? que haya un producto que les interese a las dos. Qu producto? No importa,
pero s tiene que ser el mismo para las dos.
Esto lo indicamos con una variable nueva, que no aparece en la cabeza. La clusula queda as:
puedenAsociarse(X,Y):- necesita(X,Z), necesita(Y,Z).

Para entender esta clusula, pensmoslo en lgica. En la definicin aparecen las palabras "si hay algn
producto que ", ese "algn producto" ser reflejado por un existencial.
Pasando la definicin a "castellano regimentado" quedara as:
para cualesquiera empresas X e Y, si existe algn producto Z tal que tanto X como Y necesiten Z,
entonces podemos decir que X e Y pueden asociarse.
En lgica queda
x y ((z (Pxz Pyz)) Qxy)
donde Q es el predicado que en Prolog llamamos puedeAsociarse.

El cuantificador que lleva implcita la "nueva" variable Z es existencial, y abarca el antecedente, o sea, el
cuerpo de la clusula; observar los parntesis en la frmula para ver el alcance del existencial.

Ahora s podemos enunciar todas las reglas para entender el

cuantificador implcito para una variable.
en las clusulas del programa
1. si la variable aparece en la cabeza de la clusula, entonces es universal y
afecta a toda la clusula, incluyendo las apariciones de la misma variable en
el cuerpo de la clusula
2. si la variable aparece solamente en el cuerpo (o sea, no aparece en la
cabeza), es existencial y afecta solamente al cuerpo.
en las consultas
todas las variables que aparecen en una consulta tienen implicito un
cuantificador existencial.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 28 de 49
Algunos existenciales menos visibles
Pensemos ahora en un programa que analiza relaciones de parentesco en una familia; se indican explcitamente
la relacin padre-hijo y queremos definir otras relaciones (abuelo, to, hermano, etc.) a partir de esta.

La informacin sobre padres e hijos va a tener esta forma
padre(ana,lucas).
padre(ana,horacio).
padre(lucas,miriam).
padre(lucas,juana).

Queremos definir el predicado abuelo; p.ej., para la familia definida tenemos que Ana es la abuela de
Miriam, entonces si consultamos
?- abuelo(ana, miriam).
queremos que nos responda Yes.

Cmo se dice la condicin de ser abuelo, o sea ser "el padre del padre", en lgica? Podemos afirmar que X es
el abuelo de Y si si qu?
Para que se d la relacin de abuelo tiene que intervenir una tercer persona, que es "el del medio", o sea, hijo
de X y padre de Y.
Esta "tercer persona" va a aparecer en la definicin, como una variable cuantificada existencialmente: debe
existir un Z tal que Z es hijo de X y padre de Y.
En Prolog queda as:
abuelo(X,Y):- padre(X,Z), padre(Z,Y).

Un caso anlogo son relaciones en cuya definicin en castellano aparecen las palabras "el mismo" o "la
misma". P.ej. si decimos que
dos personas son consideradas vecinas si viven en el mismo barrio
y ya tenemos un predicado vive que relaciona cada persona con el barrio donde vive, entonces el predicado
vecinos puede definirse como sigue:
vecinos(X,Y):- vive(X,Z), vive(Y,Z).
Desigualdades
Volvamos al ejemplo de los vecinos, en donde llegamos a esta clusula
vecinos(X,Y):- vive(X,Z), vive(Y,Z).

Si agregamos la siguiente informacin
vive(ana,burzaco).
vive(pedro,lanus).
vive(juan,lanus).
vive(nora,burzaco).
y hacemos la consulta
?- vecinos(nora,X).
las respuestas que obtendremos sern
X = ana
X = nora

Prolog nos indica que Nora es vecina de s misma. Para ver por qu, hagamos una demostracin al estilo
deduccin natural pero usando la sintaxis de Prolog

1 vive(nora,burzaco) premisa, clusula 5
2 vive(nora,burzaco) premisa, clusula 5
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 29 de 49
3
vive(nora,burzaco) vive(nora,burzaco) 1, 2, I
4
Z (vive(nora,Z) vive(nora,Z)) 3, I
5 vecinos(X,Y):- vive(X,Z), vive(Y,Z) premisa, clusula 1
6 vecinos(nora,nora):-
vive(nora,Z), vive(nora,Z)
5, E dos veces
7 vecinos(nora,nora) 6, 4, MP
8
X vecinos(nora,X) 7, I respuesta nora

Qu podemos hacer si no queremos que Prolog sancione que una persona es vecina de s misma? Debemos
pedir, en la clusula que define el predicado vecinos, que X e Y no sean la misma constante, usando la idea de
la lgica con identidad.
El smbolo para "distintos" es \= , la clusula queda as
vecinos(X,Y):- vive(X,Z), vive(Y,Z), X \= Y.
y si con la clusula cambiada pregunto por los vecinos de Nora, efectivamente la nica respuesta que voy a
obtener es
X = ana

Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 30 de 49
Captulo 3 Algunos ejemplos
En este captulo desarrollaremos dos ejercicios, con la intencin de mostrar cmo se pueden poner en prctica
las ideas que describimos en el captulo anterior para poder llegar a programas Prolog que describan la
informacin incluida en un enunciado, y a partir de los cuales se puedan hacer las inferencias que se piden.
Gustos literarios
Se nos presenta el siguiente enunciado:

a.
Construir un programa Prolog que pueda responder consultas acerca de los gustos literarios de distintos
grupos de personsas, a partir de la siguiente informacin
1. A los abogados les gustan las novelas largas.
2. Tanto a los ingenieros como a los mdicos les gustan las novelas.
3. A las mujeres les gustan todos los libros largos.
4. A los contadores varones les gustan tanto los libros de cuentos como los libros de poemas.
5. Hayde es una mujer que es abogada y tambin ingeniera.
6. Tania es una mujer mdica.
7. Livio es un varn contador a quien le gusta "Rayuela".
8. Pedro es un abogado varn a quien le gustan los libros de cuentos.
9. "Rayuela" y "Karamazov" son novelas largas.
10. "Octaedro" es un libro de cuentos corto.
11. "Inventario" es un libro de poemas largo.
12. "Leones" es una novela corta.

El programa debe ser capaz de responder, p.ej., estas consultas
a. qu libros le gustan a Livio? (respuestas "Octaedro", "Inventario" y "Rayuela")
b. a quines les gusta "Leones"? (respuestas "Hayde" y "Tania")
c. qu libros cortos tiene registrado el programa? (respuestas "Octaedro" y "Leones")
Indicar cmo se hara cada una de estas tres consultas.

b.
agregar al programa la posibilidad de responder consultas acerca de qu libros son valiosos.
Se considera que un libro es valioso si le gusta a, al menos, dos personas distintas.
Empezar por las consultas
Comencemos con el punto a.

Una buena forma de arrancar es pensando en las consultas que se piden, que forman los requerimientos del
programa que tenemos que construir.
Arrancar as nos ayudar a que la representacin de la informacin que elijamos en el programa sea adecuada
respecto del objetivo que se nos plantea.

Una consulta que hay que soportar es qu libros le gustan a una determinada persona. En el enunciado se
pone a Livio como ejemplo, pero est claro que se debe poder hacer la pregunta para cualquier otra persona
que se menciona.
Es claramente inconveniente tener que definir un predicado distinto para cada persona; entonces, tendremos
un nico predicado, y la persona por la que preguntamos ser un argumento.
Pongamos un nombre para este predicado: leGusta.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 31 de 49
Ser la persona el nico argumento, nos sirve un predicado mondico? Veamos: si el predicado fuera
mondico, la consulta sobre los libros que le gustan a Livio sera
?- leGusta(livio).
Esta es una consulta individual (no aparece ninguna variable), entonces las nicas respuestas posibles sern
Yes o No.
Esto no nos sirve, necesitamos que una de las respuestas sea octaedro. Por lo tanto, el predicado ser
didico: relaciona personas con libros.
La consulta a la que nuestro programa debe responder es, entonces
?- leGusta(livio,L).
y una de las respuestas que debe otorgar es
L = octaedro.

Con esto ya tomamos varias decisiones
vamos a representar a cada persona con una constante.
vamos a representar a cada libro con una constante.
vamos a tener un predicado didico leGusta que relaciona personas con libros, en ese orden.
Al armar el programa, debemos ser coherentes con las decisiones que tomamos.

Pasemos a la segunda consulta: qu predicado usar para consultar a quines les gusta un libro? Otra vez,
necesitamos un predicado didico que refleje la relacin de que a una persona le gusta un libro; es el mismo
predicado leGusta, que puede usado de distintas formas gracias a la caracterstica de inversibilidad.
La consulta ser, en este caso
?- leGusta(P,leones).
y una de las respuestas que debe otorgar es
P = haydee.

La tercera consulta requiere de un predicado que identifique aquellos libros que son cortos, o sea, es una
propiedad de los libros, que puede ser representada por un predicado mondico.
Bauticemos a este predicado: se llamar libroCorto.
Entonces la consulta ser
?- libroCorto(L).
y una de las respuestas que debe otorgar es
L = octaedro.
Representamos condiciones para gustar
Con estas guas, comencemos a representar la informacin incluida en el enunciado. Lo primero que
encontramos es:
A los abogados les gustan las novelas largas.
Hay que decidir: una clusula o varias, atmicas o moleculares?
Veamos si lo decimos en "castellano regimentado" nos queda
si P es abogado e L es una novela larga, entonces a P le gusta L
donde el predicado didico "le gusta" es el leGusta que necesitamos. Esto es una implicacin, que puede
escribirse en una sola clusula:
leGusta(P,L):- abogado(P), novelaLarga(L).
ahora respecto de novelaLarga tenemos un problema, ms adelante se nos habla de novelas por un lado
(enunciado 2) y de libros largos por el otro (enunciado 3).
Si represento el hecho de que un libro es una novela larga con un nico predicado, voy a tener problemas.

Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 32 de 49
Para verlo, sigamos con estos enunciados
A las mujeres les gustan todos los libros largos (enunciado 3).
"Rayuela" y "Karamazov" son novelas largas (enunciado 9).

pasamos el enunciado 3 a castellano regimentado:
si P es mujer y L es una novela, entonces a P le gusta L.
en Prolog puede ser
leGusta(P,L):- mujer(P), libroLargo(L).
(respetamos la convencin sobre leGusta, y elegimos el nombre de predicado libroLargo para que sea anlogo
a libroCorto que ya elegimos).

el enunciado 9 nos habla de dos libros, es una conjuncin entre lo que se afirma de cada una; como vimos en
el apartado sobre limitaciones de Prolog, hay que definir clusulas separadas para cada libro.
Quedmonos entonces con "Rayuela", hay que decir que es una novela larga. Qu predicado usar?
Si usamos novelaLarga, o sea, agregamos esta clusula
novelaLarga(rayuela).
el Prolog no va a poder llegar a la conclusin de que, p.ej., a Tania le gusta Rayuela de acuerdo al enunciado 3,
porque no se cumple la condicin libroLargo(rayuela), aun
Si slo decimos de Rayuela que es un libro largo, entonces en ningn lugar dice que es una novela, y por lo
tanto Prolog no podr deducir, mediante el enunciado 4, que p.ej. a un mdico le gusta Rayuela.

En consecuencia, las condiciones de ser novela y de ser un libro largo deben ser tratadas en forma
independiente, hay que decir dos cosas de Rayuela: que es una novela, y que es un libro largo. Otra vez
tenemos una conjuncin de tomos, que expresaremos usando varias clusulas
novela(rayuela).
libroLargo(rayuela).
As las cosas, no tenemos el predicado novelaLarga que usamos en el enunciado 1, y por lo tanto tenemos que
cambiar la clusula correspondiente, para pedir en las condiciones que por un lado el libro sea una novela, y
por otro que sea largo. Queda
leGusta(P,L):- abogado(P), novela(L), libroLargo(L).
Algunos errores comunes
Transcribamos el programa entero que tenemos hasta ahora, habiendo representado la informacin de los
enunciados 1, 3 y 9.
leGusta(P,L):- abogado(P), novela(L), libroLargo(L).
leGusta(P,L):- mujer(P), libroLargo(L).
novela(rayuela).
libroLargo(rayuela).
novela(karamazov).
libroLargo(karamazov).

Veamos algunas alternativas incorrectas para representar la misma informacin.
1.
leGusta(P,libroLargo):- mujer(P).
para el enunciado 3. Indicamos dos formas de darnos cuenta de que esta clusula es incorrecta
si hago una consulta para el predicado leGusta, no voy a obtener (p.ej.) la respuesta rayuela
que es lo que pide el enunciado, sino la respuesta libroLargo.
En este caso no debemos trabajar con un objeto genrico que represente a los libros largos, sino con
los libros individuales; lo que determina esto es el nivel de las consultas que se nos pide resolver.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 33 de 49
una misma cadena de smbolos no puede usarse como nombre de predicado en una clusula y como
nombre de constante en otra; o sea, si en el mismo programa pongo estas tres clusulas
libroLargo(karamazov).
mujer(haydee).
leGusta(P,libroLargo):- mujer(P).
Prolog no va a llegar a la conclusin de que a Hayde le gusta "Karamazov".

2.
la clusula
rayuela(novela).
es incorrecta; el predicado debe ir afuera de los parntesis, y la constante adentro.

3.
representar que a las mujeres les gustan los libros largos con dos clusulas de esta forma
leGusta(P,L):- mujer(P).
leGusta(P,L):- libroLargo(L).
es incorrecto, porque el enunciado tiene una conjuncin de condiciones: P debe ser mujer y L debe ser un
libro largo, las dos cosas deben pasar "al mismo tiempo".
Estas dos clusulas representan una disyuncin de condiciones: con que alguna de las dos condiciones se
cumpla, alcanza para afirmar que a una cierta persona le gusta un libro.

4.
en la clusula
novela(Rayuela).
el nombre Rayuela es un nombre de variable, porque empieza con una mayscula. Todo lo que represente
constantes de individuo debe empezar con minscula, aunque sea un nombre propio (persona, libro, empresa,
pas, etc.).
El resto de los enunciados
Con los tres enunciados que representamos, tenemos bastante claro un panorama que nos gua en la
representacin del resto: tenemos que ser coherentes con las decisiones que tomamos.

Tanto a los ingenieros como a los mdicos les gustan las novelas (enunciado 2).
aqu tenemos una implicacin
si [P es ingeniero o mdico] y L es una novela entonces a P le gusta L
con una disyuncin en el antecedente.
Es importante distinguir, si tenemos varias condiciones, si entre ellas se da una conjuncin o una
disyuncin; esto nos determina si usaremos una o varias clusulas. En este caso son varias:
leGusta(P,L):- ingeniero(P), novela(L).
leGusta(P,L):- medico(P), novela(L).
para llegar a estas clusulas, distribuimos la conjuncin con "L es una novela" en la disyuncin.

A los contadores varones les gustan tanto los libros de cuentos como los libros de poemas (enunciado 4).
esta es otra implicacin respecto de gustos, tambin con una disyuncin en el antecedente
si [L es de cuentos o L es de poemas] y P es un contador varn, entonces a P le gusta L
aunque no es necesario, separamos las condiciones de contador y varn, para ser coherentes con la
aparicin de un predicado por profesin (ingeniero, medico) y uno por gnero (mujer).
Nos queda
leGusta(P,L):- contador(P), varon(P), libroCuentos(L).
leGusta(P,L):- contador(P), varon(P), libroPoemas(L).

Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 34 de 49
Hayde es una mujer que es abogada y tambin ingeniera (enunciado 5).
Cuntas cosas estamos diciendo de Hayde? Tres, es una conjuncin de tomos, sern tres clusulas
atmicas separadas:
mujer(haydee).
abogado(haydee).
ingeniero(haydee).
Obsrvese que usamos p.ej. el predicado abogado y no abogada, esto para ser coherentes con lo que
elegimos para el enunciado 1.

Tania es una mujer mdica (enunciado 6).
Anlogo al anterior:
mujer(tania).
medico(tania).

Livio es un varn contador a quien le gusta "Rayuela" (enunciado 7).
Una de las cosas que decimos de Livio es que le gusta un libro, en la clusula correspondiente debe usarse
el predicado leGusta que elegimos al principio para representar esta relacin:
varon(livio).
contador(livio).
leGusta(livio, rayuela).

Pedro es un abogado varn a quien le gustan los libros de cuentos (enunciado 8).
Una de las cosas que decimos de Livio es que le gustan todos los libros de cuentos, esto es una
implicacin (si L es un libro de cuentos entonces a Livio le gusta L).
Por lo tanto, usaremos dos clusulas atmicas y otra molecular:
abogado(pedro).
varon(pedro).
leGusta(pedro, L):- libroCuentos(L).

"Octaedro" es un libro de cuentos corto (enunciado 10).
Siendo coherentes con los predicados que elegimos para representar libros, aqu estamos diciendo dos
cosas de Octaedro: que es de cuentos, y que es corto:
libroCuentos(octaedro).
libroCorto(octaedro).
El nombre libroCorto fue elegido al principio, cuando estudiamos las consultas que debemos soportar.

"Inventario" es un libro de poemas largo (enunciado 11).
"Leones" es una novela corta (enunciado 12).
Anlogos al anterior:
libroPoemas(inventario).
libroLargo(inventario).
novela(leones).
libroCorto(leones).
Conclusiones
Repasemos algunas ideas que nos ayudaron en la resolucin del tem a:
empezar por las consultas, definir para cada una qu predicado usar, darle un nombre al predicado,
definir su aridad, y el orden de sus argumentos si tuviera ms de uno.
elegir qu vamos a representar mediante constantes de individuo, definiendo el "nivel" de las
constantes, en el sentido de elegir entre objetos ms genricos o ms especficos. Esta decisin est
guiada, en principio, por las consultas a las que debe responder el programa.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 35 de 49
cuando una decisin que tomamos en un momento (enunciado 1, predicado novelaLarga) nos
complica en un punto posterior (enunciado 3), analizamos el programa en su conjunto, cambiamos
la decisin (separar en predicados novela y libroLargo) y cambiamos lo ya escrito para ser
coherentes con el cambio decidido.
al representar un enunciado, buscar otros que ayuden a "cerrar" las decisiones de representacin,
p.ej., los enunciados 3 y 9 ayudan a "cerrar" la descripcin de cada libro que tenemos que decidir
para el enunciado 1.
siempre somos coherentes con las decisiones ya tomadas. Como ya dijimos, si detectamos la
necesidad de un cambio, si hace falta modificamos lo ya resuelto para que el programa nos quede un
todo coherente.
Punto b.
Transcribimos el enunciado de este tem
agregar al programa la posibilidad de responder consultas acerca de qu libros son valiosos.
Se considera que un libro es valioso si le gusta a, al menos, dos personas distintas.

Otra vez, empezamos con la consulta: ser valioso es una propiedad de un libro, entonces la consulta ser por
un predicado mondico, p.ej.
?- valioso(L).

Y lo que indica el enunciado es la condicin que permite afirmar que un libro es valioso, tendremos una o
varias (segn aparezcan conjunciones o disyunciones) clusula/s de esta forma
valioso(L):- condiciones
La condicin es que L le guste a, al menos, dos personas distintas.
Quines son estas personas? Cualesquiera a quienes les guste L, la nica condicin adicional es que no sean la
misma.
Esto toma, en lgica de predicados de primer orden, la forma de un existencial:
si
existen dos personas distintas P1 y P2 tales que a ambas les gusta L
entonces
L es valioso
Entre las condiciones hay conjuncin: a P1 le tiene que gustar L y adems a P2 le tiene que gustar L y adems
P1 y P2 no pueden ser la misma persona. En Prolog queda:
valioso(L):- leGusta(P1,L), leGusta(P2,L), P1 \= P2.

Para entender por qu hay que agregar explcitamente P1 \= P2, observar que a partir de la nica premisa
Pa
puede obtenerse la conclusin
x y (Px Py)
eliminando los dos existenciales usando la misma constante. En cambio, la conclusin
x y ((Px Py) (x y))
no puede obtenerse, porque si reemplazamos tanto x como y por la constante a, no se cumple la condicin
(x y)
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 36 de 49
El programa entero
Luego de representar todo el enunciado, nos queda este programa:
% --- enunciado 1
leGusta(P,L):- abogado(P), novela(L), libroLargo(L).

% --- enunciado 2
leGusta(P,L):- ingeniero(P), novela(L).
leGusta(P,L):- medico(P), novela(L).

% --- enunciado 3
leGusta(P,L):- mujer(P), libroLargo(L).

% --- enunciado 4
leGusta(P,L):- contador(P), varon(P), libroCuentos(L).
leGusta(P,L):- contador(P), varon(P), libroPoemas(L).

% --- enunciado 5
mujer(haydee).
abogado(haydee).
ingeniero(haydee).

% --- enunciado 6
mujer(tania).
medico(tania).

% --- enunciado 7
varon(livio).
contador(livio).
leGusta(livio, rayuela).

% --- enunciado 8
abogado(pedro).
varon(pedro).
leGusta(pedro, L):- libroCuentos(L).

% --- enunciado 9
novela(rayuela).
libroLargo(rayuela).
novela(karamazov).
libroLargo(karamazov).

% --- enunciados 10, 11 y 12
libroCuentos(octaedro).
libroCorto(octaedro).
libroPoemas(inventario).
libroLargo(inventario).
novela(leones).
libroCorto(leones).

% --- punto b.
valioso(L):- leGusta(P1,L), leGusta(P2,L), P1 \= P2.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 37 de 49
Animales en movimiento
Pasemos ahora a este problema

Escribir un programa Prolog que pueda responder consultas sobre qu tipos de movimiento puede hacer un
determinado animal.
Tener en cuenta que :
las aves pueden volar (no tener en cuenta las excepciones).
los mamferos pueden caminar.
los felinos son mamferos que, adems, pueden correr.
los peces y los delfines pueden nadar.
los gatos son felinos.
los canarios son aves.
los perros son mamferos.
los peces espada son peces.
e incluir a los siguientes animales como ejemplo :
tweety es un canario.
michifuz es un gato.
fido es un perro.
flipper es un delfn.
cuchi es un pez espada.

El programa debe ser capaz de responder, p.ej., a esta consulta
qu tipos de movimiento puede hacer michifuz?
otorgando las respuestas "caminar" y "correr".
Anlisis de la consulta
Otra vez, empecemos por la consulta. Las consultas se hacen sobre animales individuales; por lo tanto,
tendremos una constante de individuo para cada animal (tweety, michifuz, fido, etc.) incluido en el enunciado.

Pensemos en tweety. Si llegamos a un programa al que le podamos preguntar
?- vuela(tweety).
no estamos cumpliendo con los objetivos que nos plantea el enunciado. Debemos poder preguntar qu tipos
de movimiento puede hacer tweety? y que nos responda "volar".
Si "volar" es una posible respuesta a una consulta, entonces debe ser representada mediante una constante de
individuo. Necesitamos constantes de individuo que representen los tipos de movimiento (el volar, el correr, el
caminar, etc.).
No hablaremos de volar, correr, caminar, como propiedades distintas, sino de una relacin entre animales y
tipos de movimiento. Debe ser la misma, para que al preguntar por michifuz obtengamos las dos respuestas
ante la misma consulta.
El predicado es didico, llammoslo movimientoPosible. La consulta queda
?- movimientoPosible(tweety,X).
y la nica respuesta en este caso ser
X = volar

Representemos ahora el primer enunciado
las aves pueden volar
la estructura es sencilla, en castellano regimentado queda
si X es un ave entonces X vuela
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 38 de 49
Ahora bien, para ser coherente con lo que decidimos recin, debemos representar el consecuente usando el
predicado movimientoPosible y la constante volar. Nos queda
movimientoPosible(X, volar):- ave(X).

Para dejarlo bien claro: cmo podemos decir informalmente qu informacin estamos representando en la
clusula
movimientoPosible(X, volar):- ave(X).
?
Lo que estamos diciendo es que las aves vuelan.
Y en esta otra clusula?
vuela(X):- ave(X).
decimos lo mismo!
Entonces qu diferencia hay? Qu constantes de individuo y qu predicados usamos.
La seleccin de las constantes es lo que hace que la primer clusula sea adecuada para los objetivos que se nos
plantean en el problema, mientras que la segunda no.
Con la primer forma de representar (la que usa el predicado movimientoPosible) podemos expresar la
consulta que se nos pide: qu movimientos puede hacer un animal (p.ej. Tweety). Con la segunda no. Por eso
la primera "est bien" y la segunda no, el "est bien" es en relacin al problema que tenemos entre
manos.

En general, cuando evalo una forma de representar informacin para ser usada en un sistema de
informacin, la evaluacin debe basarse en los objetivos del sistema; dado un conjunto de informacin, una
representacin puede ser adecuada para un sistema mientras que para otro no.
Dos enunciados complicados
A partir de estas decisiones la representacin del resto de los enunciados debera poder hacerse en forma
sencilla, salvo en dos casos donde tendremos que usar las transformaciones de frmulas que analizamos en el
pargrafo sobre limitaciones de Prolog.

Una es
los felinos son mamferos que, adems, pueden correr.
este enunciado afirma dos cosas de los felinos: que son mamferos, y que corren; el "pueden correr" se aplica a
los felinos.
Estas son algunas cosas que el enunciado no dice
los mamferos pueden correr
un animal que es felino y adems mamfero puede correr
tanto los felinos como los mamferos pueden correr

Con esto en claro, podemos armar la frase en "castellano regimentado"
si X es felino entonces [X es mamfero y X corre]
Tenemos una conjuncin en el consecuente, esto implica dos clusulas:
mamifero(X):- felino(X).
movimientoPosible(X,correr):- felino(X).

Planteemos algunas alternativas incorrectas:
1.
mamifero(felino).
movimientoPosible(X,correr):- felino(X).
hay dos formas de darnos cuenta que esto es incorrecto
felino aparece como constante en una clusula y como predicado en la otra.
la frase "los felinos son mamferos" es una implicacin; casi siempre las implicaciones se representan
mediante clusulas moleculares.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 39 de 49

2.
mamifero(felino).
movimientoPosible(felino,correr).
aqu no estoy siendo coherente con la decisin de representar los animales como constantes, y las especies
como propiedades de los animales.
Si hago esto cmo representar que los gatos son felinos y que michifuz es un gato?
Si elegimos estas clusulas
gato(felino).
gato(michifuz).
claramente Prolog no va a poder deducir
movimiento(michifuz,correr)


El otro enunciado es
los peces y los delfines pueden nadar.
una representacin apresurada en Prolog es
movimientoPosible(X,nadar):- pez(X), delfin(X).
pero esta clusula no dice lo mismo que el enunciado en castellano. Por qu? Porque para llegar a la
conclusin de que X nada, le estamos pidiendo que sea al mismo tiempo pez y adems delfn.
Una traduccin a "castellano regimentado" ayudar a aclarar la situacin. La clusula Prolog que escribimos
puede interpretarse como
si [X es pez y X es delfn] entonces X nada
mientras lo que dice la oracin en castellano es otra cosa:
si [X es pez o X es delfn] entonces X nada
Muchas veces un "y" en castellano est denotando una disyuncin, no una conjuncin.

De acuerdo a lo que vimos en el pargrafo sobre limitaciones, caso 3, esto se traduce en dos clusulas de esta
forma:
movimientoPosible(X,nadar):- pez(X).
movimientoPosible(X,nadar):- delfin(X).

Dejamos el resto del problema para que lo resuelva el lector, probndolo en el ambiente SWI Prolog.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 40 de 49
Captulo 4 Negacin
El lenguaje Prolog incluye un operador que refleja en forma aproximada la idea de negacin.

La diferencia entre el comportamiento de este operador y lo que uno espera intuitivamente de un operador de
negacin est relacionada con la caracterstica de universo cerrado que mencionamos en el captulo 2.

En este captulo presentaremos la sintaxis del operador de negacin de Prolog, su comportamiento, el
concepto relacionado de negacin por falla, e indicaciones sobre cmo utilizarlo en un programa.
Sintaxis
El operador de negacin de Prolog se llama not. Lo que quiere negarse se pone entre parntesis, p.ej.
not(puedeInteresar(mirna,autoGomez))

Este operador puede aparecer en consultas y en el cuerpo de las clusulas; no puede aparecer en la cabeza de
una clusula ni en una clusula atmica.
As, las siguientes son clusulas mal formadas
not(leGusta(luciana,X)):- reptil(X).
not(leGusta(luciana,jazmin)).
mientras que la siguiente
leGusta(luciana,X):- animal(X), not(reptil(X)).
est bien formada, y expresa que a Luciana le gustan todos los animales excepto los reptiles.

El operador se puede aplicar a varios tomos a la vez, separndolos con coma; lo que se est negando es la
conjuncin. P.ej. si quiero indicar en un programa Prolog que a Sara le gusta cualquier animal que no un reptil
carnvoro, puedo hacerlo as:
leGusta(sara,X):- animal(X), not(reptil(X),carnivoro(X)).
lo que se corresponde aproximadamente con una frmula de esta forma
x ((Ax (Rx Cx)) Gsx)
(Ax : animal, Rx : reptil, Cx: carnvoro, Gxy: a x le gusta y, s: Sara).

Tambin puedo hacer estas consultas
?- not(leGusta(sara,tweety)).
?- not(leGusta(sara,tweety), leGusta(sara,malacara)).
en el segundo caso, estoy preguntando si a Sara no le gustan ni Tweety ni Malacara.
Comportamiento negacin por falla
Comencemos recordando la hiptesis de universo cerrado: Prolog asume que se verifica nicamente lo que se
expresa en el programa, y las respuestas que brinda se basan en esta suposicin.

Pensemos en constantes que no aparecen en el programa. Supongamos este programa:
canario(tweety).
canario(piopio).
perro(diogenes).
ave(X):- canario(X).
Si a partir de este programa hago la consulta
?- ave(condorito).
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 41 de 49
la respuesta va a ser "No"; como condorito no est mencionado en el programa, no puede verificar que tenga
ninguna propiedad.

El sentido de la negacin en Prolog es negar el resultado de la consulta. Si se consulta sobre una negacin, la
respuesta ser "Yes" si la respuesta sobre lo que se est negando hubiera sido "No", y viceversa.

Si a partir del programa anterior hacemos la consulta
?- not(ave(condorito)).
la respuesta que obtendremos ser "Yes", porque la respuesta a la consulta sobre ave(condorito), que es
lo que estamos negando, hubiera sido "No" como vimos anteriormente.

Si hacemos la consulta
?- not(ave(tweety)).
la respuesta que obtendremos ser "No", porque la respuesta a la consulta sobre ave(tweety) hubiera
sido "Yes".

Visto de otra forma, cuando Prolog debe resolver una negacin, intenta resolver lo que se est negando; si
puede resolverlo, entonces la respuesta para la negacin ser "No"; mientras que si la resolucin de lo que se
est negando falla dicha respuesta ser "Yes".
Obsrvese que no est traduciendo la consulta en una frmula con el operador de negacin e intentando
deducirla de acuerdo a lo que analizamos en el cap. 2, la deduccin se hace sobre la frmula sin negacin, y lo
que se "niega" es el resultado que se obtiene, esta negacin queda fuera de la deduccin, es ad-hoc del
mecanismo de respuesta de consultas de Prolog.
A partir de esta explicacin, se conoce el comportamiento de Prolog respecto de la negacin como negacin
por falla. As, se subraya que el tratamiento de la negacin no es deductivo.

Volviendo al ejemplo, no puede asegurarse a partir de la informacin incluida en el programa que Condorito
no vuela.
Lo que ocurre es que ante la consulta sobre si Condorito vuela la respuesta que brinda Prolog es "No" por la
hiptesis de universo cerrado; y debido a la negacin por falla, si se pregunta por la negacin de algo a lo que
se responde que "No" la respuesta va a ser "Yes".
Consultas con variables
Cuando en una consulta aparecen variables en una frmula negada, el comportamiento de Prolog tiene
caractersticas especiales. A menos que la variable aparezca a la izquierda de la frmula negada, entonces no
brinda la lista de constantes que satisfacen la consulta.

Para verlo con un ejemplo, pensemos en esta consulta
?- not(ave(X)).
hecha a partir del programa que bosquejamos recin.

La respuesta a esta consulta va a ser "No"; no va a responder con una lista de constantes como se indic en el
cap. 2 para las consultas existenciales. Analicemos por qu otorga esta respuesta.

Siguiendo el principio de la negacin por falla, debera responder con todas las constantes para las que no se
satisface la consulta
?- ave(X).
para lo cual debera intentar la consulta para cada posible constante, lo que representa una cantidad
indeterminada de constantes. Prolog no puede manejar esta situacin.
Por lo tanto, si ante la consulta sobre lo que se est negando se obtiene al menos una respuesta, entonces la
respuesta a la consulta sobre la negacin ser "No".

Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 42 de 49
Ahora agreguemos algunas clusulas adicionales al programa que bosquejamos recin:
fuerte(tweety).
fuerte(diogenes).
bichoRaro(X):- ave(X), perro(X).
y hagamos estas consultas
?- ave(X), not(fuerte(X)).
?- not(bichoRaro(X)).

En la primera, la variable que aparece en la frmula negada aparece tambin en un tomo no negado a la
izquierda. En este caso, la consulta s obtiene una lista de constantes.
Explicar esto con precisin implicara conocer el motor de inferencia de Prolog en una extensin mayor a la
que deseamos en este apunte. No podemos explicarlo desde la lgica porque como vimos el tratamiento de la
negacin en Prolog es no deductivo.
Indiquemos intuitivamente que la aparicin de la variable a la izquierda de la parte negada "salva" a Prolog de
hacer una cantidad indeterminada de deducciones, porque la constante que justifica la aparicin del existencial
aparece antes de que Prolog se aboque a analizar la negacin, que por lo tanto se hace sobre la constante que
ser cuantificada existencialmente.
O sea, en la deduccin va a aparecer algo como (A: ave, p: piopio, F: fuerte).
Ap
ante lo cual alcanza con intentar resolver
Fp
y llegar a la conclusin de que no se puede, llegando as a
Ap ""Fp
donde las comillas en la negacin indican la caracterstica no deductiva de la inferencia de la negacin.

En la segunda consulta, ante la consulta
?- bichoRaro(X).
no se obtiene ninguna respuesta. Lamentablemente Prolog no sigue la intuicin de dar "Yes" como respuesta a
la consulta sobre la negacin, sino que entrega una respuesta bastante crptica que tiene esta forma:
X = _G273
Otra vez, dar cuenta de este comportamiento implica conocer el motor de inferencia de Prolog con cierto
detalle.

Como regla general, evitaremos en el curso las consultas que incluyan negacin de una frmula donde
aparezcan variables, a menos que las variables sean "salvadas" mediante la aparicin en partes no negadas a la
izquierda de la parte negada.
Uso en clusulas
La regla recin expresada vale tambin para la aparicin de la negacin en el cuerpo de una clusula (ya vimos
que no puede aparecer en la cabeza ni tampoco en clusulas atmicas).

Esto se debe a que las consultas en cuya resolucin intervenga una clusula que incluya una negacin se
resolvern parcialmente en forma no deductiva, anlogamente a las consultas sobre negaciones.
Desde el punto de vista estrictamente lgico, en la mayor parte de los casos la aparicin de una variable en una
negacin indica una condicin demasiado genrica, debindose acotar el alcance de aquello que se est
negando.

toda variable que aparezca en una frmula negada dentro del cuerpo de una
clusula molecular debe ser "salvada" mediante la aparicin en un tomo no
negado en el mismo cuerpo, a la izquierda de la parte negada.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 43 de 49
Vemoslo con un ejemplo muy sencillo. Consideremos el programa que consta de estas dos clusulas:
bueno(X):- not(malo(X)).
malo(pepe).

Qu estamos indicando con esta clusula? Que de toda cosa de la cual no podamos demostrar que sea mala
(recordemos la negacin por falla) podemos afirmar que es buena.
Si ahora hacemos las consultas
?- bueno(alfaCentauro).
?- bueno(X).
vamos a obtener, respectivamente, las respuestas "Yes" y "No". Esto puede explicarse extendiendo los
comentarios de la seccin anterior a las inferencias donde intervienen clusulas donde se usa la negacin.
En la segunda consulta, para obtener una constante a que satisfaga la propiedad bueno, debe intentar la
consulta sobre la propiedad malo y fallar, para llegar a
""Ma
y a partir de esto llegar por eliminacin del universal, modus ponens e introduccin del existencial a
x Ba
entregando a como respuesta. Esta generacin de una constante que no satisface la propiedad malo no es
posible en Prolog, de acuerdo a lo que estudiamos en la seccin anterior.

Agreguemos ahora estas clusulas
interesante(X):- bueno(X), sagaz(X).
sagaz(pedro).
sagaz(ernesto).
sagaz(pepe).
La respuesta ante estas consultas
?- interesante(pedro).
?- interesante(X).
va a ser, respectivamente, "Yes" y (sorpresa!) "No".
El "No" en el segundo caso proviene de la imposibilidad de obtener una constante que satisfaga la propiedad
bueno, como vimos recin.

Vemos que desde el punto de vista pragmtico, la introduccin de la negacin en el cuerpo de una clusula
puede traer problemas, en particular para consultas existenciales.
Alcance
Analicemos ahora desde el punto de vista lgico la clusula
bueno(X):- not(malo(X)).
Qu estamos indicando con esta clusula? Que de toda cosa de la cual no podamos demostrar que sea mala,
eso incluye todo-todo: los nmeros, las estrellas, las hojas de los rboles todo.
Es extrao que querramos hacer una afirmacin tan genrica; en la mayor parte de los casos, cuando decimos
"todo lo que no es es " estamos pensando en ciertos entes, aunque no lo afirmemos explcitamente. Esta
afirmacin tiene un alcance acotado de cierta forma.
En este ejemplo, es probable que nos estemos refiriendo a personas: cualquier persona de la que no puedo
demostrar que sea mala la considerar buena. El alcance de la afirmacin son las personas.
En Prolog, esto lo debemos indicar explcitamente:
bueno(X):- persona(X), not(malo(X)).
debiendo definir el predicado persona, en este caso lo hacemos por extensin indicando las personas acerca de
las que nos interesa obtener respuestas
persona(pedro).
persona(pepe).
persona(ernesto).
persona(juana).
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 44 de 49

Ahora s podemos hacer la consulta
?- interesante(X).
obteniendo las respuestas esperables intuitivamente
X = pedro
X = ernesto

Volviendo al anlisis tcnico, la variable X que aparece en la parte negada de la clusula fue "salvada" al
aparecer a la izquierda en una parte no negada. Queda claro que si hubiramos escrito
bueno(X):- not(malo(X)), persona(X).
no habramos obtenido el resultado deseado.

En resumen, analizamos la necesidad de salvar las variables que aparecen en una negacin, tanto desde el
punto de vista pragmtico como desde el punto de vista lgico.
Comentario final caractersticas no deductivas
Terminemos este captulo mencionando que el problema de tener que definir el alcance al que se refiere una
variable que aparece en una clusula no se da solamente con la negacin, sino tambin con otras caractersticas
de Prolog que no vemos en el curso, entre ellas aritmtica y manejo de conjuntos.
En todos los casos las soluciones pasan por dar un alcance explcito a la variable, lo que se puede describir
como generacin de alcance o de dominio.

En todos los casos los problemas estn relacionados con caractersticas no deductivas del motor de inferencia
de Prolog.
Se utiliza la lgica de predicados de primer orden que se estudi en el curso y la inferencia deductiva son una
parte del mecanismo de resolucin de consultas de Prolog, donde se combinan con otros mecanismos.
Esto es comn a las herramientas informticas basadas en lgica: usan un determinado sistema lgico, en
combinacin con otras caractersticas que les permiten ofrecer capacidades adicionales (p.ej. indicar la cantidad
de individuos que satisfacen una consulta, relacionando las distintas deducciones que arm), y/o paliar algunas
limitaciones de implementar la deduccin en un programa de computadora.



Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 45 de 49
Anexo 1 sintaxis de Prolog
Estructura del programa
Un programa Prolog est compuesto por clusulas; cada clusula incluye uno o ms tomos.
Las clusulas que incluyen un solo tomo se dicen atmicas; las que incluyen ms de un tomo se dicen
moleculares.
Todas las clusulas deben terminar, para considerarse bien formadas, con un punto.

Los tomos tienen esta forma
pred(arg1,...,argn) si el predicado es polidico
pred(arg) si el predicado es mondico

Cada argumento es, o bien una constante de individuo, o bien una variable.
Nombres
Los nombres de predicados, constantes de individuo y variables pueden tener muchas letras, no se limitan a
una sola letra como en lgica de predicados de primer orden.
Todos los nombres tienen que empezar con una letra (minscula o mayscula segn el tipo de nombre, ver
abajo), y despus pueden tener letras cualesquiera, dgitos o el smbolo _ (guin bajo). No se puede usar
ningn otro caracter, ni espacios, en los nombres.

Los nombres de predicado deben empezar en minscula.
Para diferenciar entre argumentos constantes y variables, Prolog entiende que los nombres de constante de
individuo son los que empiezan en minscula, y los nombres de variable son los que empiezan en mayscula.
Para decidir, se toma slo la primer letra. P.ej. en
p(alFA, BEta, GammA, dELTA, Epsilon).
alFA y dELTA son constantes (empiezan con una minscula), mientras que BEta, GammA y Epsilon son
variables (porque empiezan con una mayscula).
Conectivas
Las nicas conectivas que incluye el Prolog son :- y , (coma).

Toda clusula molecular debe llevar una conectiva :- , que es un condicional "al revs", o sea que lo que est
a la izquierda es el consecuente, y lo que est a la derecha es el antecedente.
Por ejemplo en la clusula
vuela(X):- condor(X).
vuela(X) es el consecuente, y condor(X) es el antecedente.
En una clusula no puede aparecer el smbolo :- ms de una vez.
En Prolog, al consecuente se lo llama cabeza, y al antecedente se lo llama cuerpo; al smbolo :- se lo llama
cuello.

La coma representa la conjuncin, y solamente puede aparecer en el cuerpo. P.ej.
come(X, gusanos):- condor(X), adulto(X).
el antecedente es "X es cndor y X es adulto".

Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 46 de 49
Las siguientes clusulas no estn bien formadas
condor(pehuenque), condor(manquehue)
porque toda clusula molecular debe tener un :-.
vuela(X):- ave(X):- condor(X).
porque ninguna clusula puede tener ms de un :-.
vuela(X), silba(X) :- ave(X).
porque la coma slo puede ir en el cuerpo.
vuela(X):- condor(X)
porque le falta el punto del final.

Las clusulas que siguen s estn bien formadas
vuela(X):- condor(X).
come(X, gusanos):- condor(X), adulto(X).
condor(pehuenque).
condor(manquehue).
Las primeras dos son moleculares, las otras dos son atmicas.
Cuantificacin de las variables
Todas las variables que aparecen en una clusula estn cuantificadas. Los cuantificadores no se escriben, estn
implcitos.
Para cada clusula, Prolog asume un cuantificador para cada variable, segn las reglas que se indican a
continuacin.

En una clusula molecular:
si la variable aparece en la cabeza, entonces se asume que tiene un cuantificador universal que abarca
a toda la clusula.
si, por el contrario, la variable aparece solamente en el cuerpo, entonces se asume que tiene un
cuantificador existencial que abarca a la cabeza, o sea al antecedente.

En una clusula atmica, todas las variables se asumen cuantificadas universalmente.

En las consultas, todas las variables se asumen cuantificadas existencialmente.

Por razones que tienen que ver con los tipos de consultas que puede responder Prolog, es raro que sea til una
clusula atmica en la que aparezcan variables; y tambin por lo general las variables que aparecen en la cabeza
de una clusula molecular, tambin van a aparecer en el cuerpo.

P.ej. en esta clusula
puedenComerciar(X,Y):- quiereComprar(X,Z), quiereVender(Y,Z).
las variables X e Y estn cuantificadas universalmente (aparecen en la cabeza), mientras que la variable Z est
cuantificada existencialmente (aparece solamente en el cuerpo).
La traduccin a lgica de predicados de esta clusula sera as:
x y ( (z (Pxz Qyz)) Rxy )
(Pxy : x quiere comprar y; Qxy : x quiere vender y; Rxy : x e y pueden comerciar)
Otros smbolos
\= : predicado que denota desigualdad, p.ej. en
vecinos(X,Y):- vive(X,Z), vive(Y,Z), X \= Y.
estoy indicando que una persona no se considera vecina de s misma.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 47 de 49
Comentarios
Se pueden incluir en un programa lo que se llama "comentarios", o sea texto que no ser interpretado por el
Prolog, se deja solamente para que lo lean los que tienen que revisar, usar o modificar el programa.

Hay dos formas de indicar que un texto es comentario:
1. si se pone un smbolo de porcentaje %, de ah hasta el final de la lnea es comentario
2. todo texto que est encerrado entre /* y */ es comentario, no importa que est en varias lneas

Aqu va un ejemplo con un comentario de cada tipo; coloreamos los comentarios en verde.
/* en esta parte definimos
los intereses de cada posible cliente */
puedeInteresar(mirna,X):- accesorio(X,abs), accesorio(X,aire).
puedeInteresar(pedro,X):- accesorio(X,abs). % abs y nada ms
puedeInteresar(juana,X):- accesorio(X,aire), accesorio(X,mp3).
puedeInteresar(lola,X):- accesorio(X,aire), accesorio(X,mp3).

Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 48 de 49
Anexo 2 operacin del SWI Prolog
Instalacin
Bajarse el instalador as:
1. entrar a http://www.swi-prolog.org/
2. elegir "Downloads" en el men de la izquierda.
3. en la pgina que aparece, elegir "Some popular old versions".
4. en la pgina que aparece, elegir la versin 5.2.13 para Windows (la de 3445716 bytes).
5. el link es un .exe, que se va a grabar en su disco rgido.
Lo que se estn bajando es el. w32pl5213.exe, que es el programa instalador.

Para instalar el programa, alcanza con ejecutar el instalador, no hacen falta ms pasos.

El SWI Prolog es un programa de uso gratuito, por lo tanto no hay problemas de distribucin ni de
licenciamiento para usos no-comerciales. Los detalles de la licencia estn en http://www.swi-prolog.org/, bajo
"License".

Este instalador es para Windows 2000/XP/NT. Para versiones anteriores de Windows, Linux, etc.., por favor
consultar en http://www.swi-prolog.org/, bajo "Downloads".
Funcionamiento
Para escribir los programas Prolog, usar un editor de texto, p.ej. el Notepad.

El procedimiento para poder usar el SWI Prolog es el siguiente
1. Se escribe el programa y se guarda como un archivo,
2. se le indica al SWI Prolog que "cargue" el programa a partir del archivo.
3. se hacen consultas en la ventana del SWI Prolog.
No hay forma de "escribir el programa directamente en el SWI".

Aconsejamos guardar los programas en un directorio creado al efecto, y que la extensin de los archivos sea
.pl. Por ejemplo: c:\programasProlog\concesionaria.pl.

Una vez escrito y grabado un programa, hay varias formas de "cargar" un programa en SWI Prolog,
mencionamos dos:
hacer doble click al archivo .pl en el administrador de archivos o similar (p.ej. windows commander),
abre el SWI Prolog y carga el programa.
abrir el SWI, y despus acceder a la opcin de men File -> Consult.

Si hay errores en el programa, aparecen en la ventana de SWI indicando la lnea de cada error. Tambin
pueden aparecer warnings, esos no importan. Si hay errores (mensajes que empiezan con la palabra ERROR:)
el programa no se carga, hay que: corregir los errores, volver a intentar cargarlo, ya sea cerrando el SWI y
volviendo a hacer doble click en el archivo .pl, o bien repitiendo la accin File -> Consult.

Una vez que se carg el programa correctamente, las consultas se hacen escribindolas en la ventana del SWI,
al lado del prompt ?- . Recordar que las consultas tambin tienen que terminar con punto.

Para consultas existenciales, el SWI muestra la primer respuesta. Si quiero ms, pulso ; (punto y coma), si no,
pulso Enter.
Lgica Algunos conceptos sobre Prolog versin 1.0
Pgina 49 de 49
Si pulso ; y responde No es porque no encontr ms respuestas a la consulta.

Mientras hago consultas en la ventana del SWI, puedo mantener el archivo .pl abierto en el editor.
Ahora bien, si se hacen cambios en el programa (agregar/quitar/modificar clusulas) y se sobre-escribe el
archivo .pl, el SWI Prolog no carga las modificaciones automticamente.
Para que las modificaciones se activen, luego de grabar el archivo modificado, poner
?- make.
(no olvidar el punto!) en la ventana del SWI; esto hace que el SWI levante de nuevo el programa a partir del
archivo .pl.

Si quiero cambiar de .pl, tengo que hacer File -> Consult, o bien cerrar el SWI y hacer doble click en el otro
archivo. No vemos en la materia cmo tener ms de un .pl cargado al mismo tiempo.

Das könnte Ihnen auch gefallen