UBA Facultad de Ciencias Económicas Lógica Algunos conceptos sobre Prolog

Documentos relacionados
MLM Matemática Discreta

UNIDAD I: LÓGICA PROPOSICIONAL

Para representar los conjuntos, los elementos y la relación de pertenencia, mediante símbolos, tendremos en cuenta las siguientes convenciones:

PROLOG Inteligencia Artificial Universidad de Talca, II Semestre Jorge Pérez R.

UNIDAD 1. LOS NÚMEROS ENTEROS.

Capítulo VI. Diagramas de Entidad Relación

Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología

Diferenciabilidad. Definición 1 (Función diferenciable). Cálculo. Segundo parcial. Curso

Ingeniería del Software I Clase de Testing Funcional 2do. Cuatrimestre de 2007

Aproximación local. Plano tangente. Derivadas parciales.

Datos del autor. Nombres y apellido: Germán Andrés Paz. Lugar de nacimiento: Rosario (Código Postal 2000), Santa Fe, Argentina

3.1 INGENIERIA DE SOFTWARE ORIENTADO A OBJETOS OOSE (IVAR JACOBSON)

5.1. Organizar los roles

Tema 2. Espacios Vectoriales Introducción

TABLA DE DECISION. Consideremos la siguiente tabla, expresada en forma genérica, como ejemplo y establezcamos la manera en que debe leerse.

REDES DE ÁREA LOCAL. APLICACIONES Y SERVICIOS EN WINDOWS

Selección de los puntos de montaje

Redes de área local: Aplicaciones y servicios WINDOWS

Resumen. Funcionamiento. Advertencia

Lección 24: Lenguaje algebraico y sustituciones

Apuntes de Matemática Discreta 1. Conjuntos y Subconjuntos

GUÍA TÉCNICA PARA LA DEFINICIÓN DE COMPROMISOS DE CALIDAD Y SUS INDICADORES

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL

La ventana de Microsoft Excel

Adaptación al NPGC. Introducción. NPGC.doc. Qué cambios hay en el NPGC? Telf.: Fax.:

MÓDULO 2. LEYES FINANCIERAS DE CAPITALIZACIÓN Y DESCUENTO SIMPLE

Transcripción completa de la Lección 2 (Pinyin).

Creación y administración de grupos de dominio

Procesos Críticos en el Desarrollo de Software

2.3 El Mundo de Tarski.

CURSO TECNOLOGÍA TECNOLOGÍA 4º ESO TEMA 5: Lógica binaria. Tecnología 4º ESO Tema 5: Lógica binaria Página 1

QUÉ SIGNIFICA CREER?

Apuntes de Matemática Discreta 9. Funciones

Ingeniería en Informática

Programa para el Mejoramiento de la Enseñanza de la Matemática en ANEP Proyecto: Análisis, Reflexión y Producción. Fracciones

Cómo ayudar a nuestros hijos e hijas en las tareas escolares si no sabemos euskera?

Las Relaciones Públicas en el Marketing social

Biografía lingüística

Cómo ayudarles con las tareas escolares si no sabemos euskera?

Ejercicio de estadística para 3º de la ESO

Indicadores para la generación de conocimiento acerca de la evaluación de la calidad de las instituciones educativas

Universidad Católica del Maule. Fundamentos de Computación Especificación de tipos de datos ESPECIFICACIÓN ALGEBRAICA DE TIPOS DE DATOS

IIC Matemática Discreta

ANÁLISIS DE DATOS NO NUMERICOS

Indicaciones específicas para los análisis estadísticos.

Sistema de Gestión Portuaria Sistema de Gestión Portuaria Uso General del Sistema

Problemas fáciles y problemas difíciles. Cuando a los niños les planteamos problemas de suma y resta, Laura dejó sin resolver el siguiente problema:

Fundamentos de Investigación de Operaciones Investigación de Operaciones 1

Metodología Orientada a Objetos Clave Maestría en Sistemas Computacionales

Nota 2. Luis Sierra. Marzo del 2010

QUÉ ES LA RENTABILIDAD Y CÓMO MEDIRLA. La rentabilidad mide la eficiencia con la cual una empresa utiliza sus recursos financieros.

Manual para la utilización de PrestaShop

José M. Castillo. Teología popular. La buena noticia de Jesús. Desclée De Brouwer

Programa diseñado y creado por Art-Tronic Promotora Audiovisual, S.L.

1.1. Introducción y conceptos básicos

5. Composer: Publicar sus páginas en la web

ESTUDIAR MATEMATICA EN CASA

Generación de funciones lógicas mediante decodificadores binarios con salidas activas a nivel alto

Ecuaciones de primer grado con dos incógnitas

Colegio Alexander von Humboldt - Lima. Tema: La enseñanza de la matemática está en un proceso de cambio

GUÍA PARA LA FORMULACIÓN PROYECTOS

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)

Eduardo Kido 26-Mayo-2004 ANÁLISIS DE DATOS

Estas visiones de la información, denominadas vistas, se pueden identificar de varias formas.

AGREGAR UN EQUIPO A UNA RED Y COMPARTIR ARCHIVOS CON WINDOWS 7

El control de la tesorería consiste en gestionar desde la aplicación los cobros y pagos generados a partir de las facturas de venta y de compra.

2.2. LA COMPRA. TOMA DE DECISIONES DEL CLIENTE.

Unidad 1. Fundamentos en Gestión de Riesgos

Análisis de los datos

15 CORREO WEB CORREO WEB

La explicación la haré con un ejemplo de cobro por $ más el I.V.A. $16.00

CAPITULO V. SIMULACION DEL SISTEMA 5.1 DISEÑO DEL MODELO

Cómo creo las bandejas del Registro de Entrada /Salida y de Gestión de Expedientes?

Índice Introducción Números Polinomios Funciones y su Representación. Curso 0: Matemáticas y sus Aplicaciones Tema 1. Números, Polinomios y Funciones

Curso Excel Básico - Intermedio

6 M. C. J. A G U S T I N F L O R E S A V I L A

Informàtica i Comunicacions Plaça Prnt. Tarradellas, FIGUERES (Girona) Tel Fax

TPVFÁCIL. Caja Real. Definiciones.

Resortes y fuerzas. Analiza la siguiente situación. Ley de Hooke. 2do Medio > Física Ley de Hooke. Qué aprenderé?

Profr. Efraín Soto Apolinar. La función lineal. y = a 0 + a 1 x. y = m x + b

Curso Completo de Electrónica Digital

MANUAL DE AYUDA MODULO TALLAS Y COLORES

Santiago, 11 de Noviembre de 2015

Módulo 9 Sistema matemático y operaciones binarias

La suma y la resta. Introducción. Capítulo

LÓGICA JURÍDICA. Idea preliminar Cap. I. Nicolás Mejía Gómez -Universidad Libre Facultad de derecho

Cómo sistematizar una experiencia?

Bases de datos en Excel

Figure 7-1: Phase A: Architecture Vision

Capítulo 1: Fundamentos: Lógica y Demostraciones Clase 1: Lógica Proposicional

MÓDULO 3 HERRAMIENTAS EN LA NUBE: ANFIX

Licencia. Todos los derechos reservados. Este reporte puede ser distribuido libremente pero queda

Contenidos. INFORME ENCUESTA TELEFÓNICA. Curso

E 1 E 2 E 2 E 3 E 4 E 5 2E 4

Aplicaciones lineales continuas

Técnicas de valor presente para calcular el valor en uso

Sistemas de numeración

Guía de uso del Cloud Datacenter de acens

OPERACIONES ELEMENTALES CON VECTORES

Transcripción:

UBA Facultad de Ciencias Económicas Lógica Algunos conceptos sobre Prolog Autor: Carlos Lombardi carlombardi@gmail.com Índice Algunos conceptos sobre Prolog... 1 Índice... 1 Capítulo 1 Lógica para sistemas... 3 Sistemas de información... 3 Razonamiento, información, inferencia... 4 Lógica de predicados de primer orden... 6 Y si la inferencia no se puede hacer?... 8 Objetos genéricos distintas visiones de una misma entidad... 8 En resumen... 9 Capítulo 2 El mundo de Prolog...10 El lenguaje Prolog...10 Átomos y nombres...10 Ausencia de código...11 Moléculas 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 intérprete 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 Capítulo 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 Análisis de la consulta...37 Dos enunciados complicados...38 Página 1 de 49

Capítulo 4 Negación...40 Sintaxis...40 Comportamiento negación por falla...40 Consultas con variables...41 Uso en cláusulas...42 Alcance...43 Comentario final características no deductivas...44 Anexo 1 sintaxis de Prolog...45 Estructura del programa...45 Nombres...45 Conectivas...45 Cuantificación de las variables...46 Otros símbolos...46 Comentarios...47 Anexo 2 operación del SWI Prolog...48 Instalación...48 Funcionamiento...48 Página 2 de 49

Capítulo 1 Lógica para sistemas Sistemas de información Como profesionales de sistemas, vamos a participar en la concepción, definición, desarrollo y mantenimiento de sistemas de información. Pensemos un poco, entonces, en qué es un sistema de información visto (un poco) "desde adentro", o sea, desde la perspectiva de los que participan en su construcción. Un sistema de información trata información: 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 "información" lleva el sentido de lo que se define como "Información pragmática" en el apunte sobre Diferentes sentidos del concepto de información; la información puede ser organizada y manipulada de formas muy distintas en distintos sistemas. En muchos sistemas, aunque no en todos, la información adquirida se registra en alguna forma explícita y bien definida, y los procesos de manipulación actúan sobre esta representación. Un ejemplo sencillo de sistema de información son las marcas que hace un preso de los días que lleva encerrado. El preso, cuando sabe que empezó otro día, registra esta información en la pared con una codificación bien conocida. El proceso de manipulación consiste en contar las marcas, y el resultado es saber cuántos días faltan para su liberación. Otro ejemplo, más clásico, es el sistema de liquidación de sueldos de una empresa. 1. El sistema obtiene la información 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 podría sumarse la obtención de información en forma automática (p.ej. las horas trabajadas por cada empleado pueden ser informadas por la máquina donde fichan), y por interacción 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 información adquirida es registrada, típicamente en una base de datos. 3. Los distintos procesos de manipulación consultan la información representada para obtener los resultados esperados, p.ej. la impresión 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 información; adquiere información a través de sus sentidos y su medio cultural, la manipula por intermedio de la interacción neuronal, y obtiene los resultados que necesita para llevar adelante su vida. En este caso la representación de la información no es explícita, está imbricada dentro del mismo cerebro. Los tres ejemplos mencionados tienen características 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 eléctricos. En este apunte estaremos interesados en los sistemas cuya representación de la información es explícita y está dada en la forma de proposiciones o enunciados; es lo que en el apunte sobre Diferentes sentidos del concepto de información se define como información proposicional. Cualquier combinación entre una forma de representar información más mecanismos para manipular la información representada, puede servir como base para construir sistemas de este tipo. Página 3 de 49

Si quiero que el "agente manipulador" sea una computadora, tanto el formato en el que se representa la información como las formas de manipularla tienen que poder ser implementados en software. En particular, esto impone (en principio) una restricción de formalidad: debe haber reglas bien definidas que gobiernen la representación y la manipulación; respectivamente son las reglas de formación (gobiernan la representación) y reglas de transformación o inferencia (que gobiernan la manipulación). Queda claro que el cerebro, entendido físicamente, queda fuera de los sistemas que vamos a estudiar, porque no se maneja con lo que llamamos información proposicional. Razonamiento, información, inferencia Con el objetivo de construir sistemas de información 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 un razonamiento es un conjunto de enunciados, de los cuales a uno lo destacamos y lo llamamos conclusión; el resto son las premisas. Cada enunciado es exactamente una unidad de información, aquello que enuncia un enunciado es información 1. Veamos algunos ejemplos de enunciados: 1. Sócrates es mortal. 2. Todos los hombres son mortales. 3. Ana y Luisa son amigas. 4. Todos los amigos de Ana conocen a Tomás. 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. Petrobrás es una empresa petrolera que cotiza en la Bolsa de Buenos Aires. 8. El patrimonio neto de Petrobrás 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. Gómez tiene ABS, levantavidrios eléctrico y estéreo con MP3. 13. El auto del Sr. Galíndez tiene aire acondicionado, cierre centralizado y ABS. La información incluida en cada uno de estos enunciados puede ser de interés para distintos sistemas. Tal vez eso no es tan evidente intuitivamente para los enunciados 1 a 4, no es información que manejen los sistemas que habitualmente asociamos a la idea de "sistema de información". Para el resto de los enunciados sí podemos imaginar sistemas en donde son pertinentes: enunciados 5 y 6 son ejemplos típicos de información que maneja un sistema de administración de una unidad educativa. enunciados 7 al 10: pueden aparecer en un sistema de administración de carteras bursátiles. 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 información se indica explícitamente que "Las unidades de información que se toman en consideración son proposiciones o enunciados de algún lenguaje (ya sea una lengua histórica o un lenguaje formal)" Página 4 de 49

Es posible que la representación de estos enunciados en un sistema difiera de cómo los estamos expresando, p.ej. en el enunciado 11 Mirna podrá estar representada por su número de cliente, y en el 12 el auto del Sr. Gómez por su patente. Eso no quita que la información representada es la que estamos describiendo, independientemente de las decisiones sobre cómo elegimos representarla. Pasemos ahora al concepto de inferencia. Este concepto se refiere, en general, a los distintos aspectos de la relación entre las premisas y la conclusión de un razonamiento. Ahora bien, si queremos usar este concepto como base para construir sistemas de información, nos interesará la forma que tome el "agente manipulador" que produce los resultados (que serán las conclusiones) a partir de la información con que contamos (que serán las premisas). Por lo tanto en este apunte, nos interesarán los procesos de inferencia, entendiendo como proceso de inferencia cualquier proceso por el cual se obtiene una conclusión a partir de un conjunto de premisas. P.ej. a partir de los enunciados 11 a 13 podemos concluir que a Mirna le puede interesar el auto del Sr. Galíndez, pero no el del Sr. Gómez; el proceso que lleva a obtener esa conclusión, y por lo tanto a armar un razonamiento (uniendo la conclusión 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 información, que termina así: La inferencia lógica, en general, puede ver como una manera de procesar información proposicional. El input está constituido por lo que se llaman premisas (de un razonamiento) y el output es su conclusión. Nótese que este sentido de información puede verse como un caso especial de que se adopta en el ámbito de sistemas de información. Retomemos ahora el objetivo de construir sistemas de información, 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 información que debemos manejar, tomando un contexto muy simplificado, es la referente a gustos de cada cliente y características de cada auto 2. Entonces, usando los conceptos de razonamiento y proceso de inferencia, podemos concebir este sistema de información. La información es la que expresan los enunciados, que van a ser de la forma de los enunciados 11 a 13; vamos a usar esta información como premisas. La forma de manejar la información 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. Galíndez. b. no conviene recomendarle a Mirna el auto del Sr. Gómez. Estos enunciados de la forma "conviene recomendarle al cliente X el auto Y" o "no conviene recomendarle al cliente X el auto Y" serán los resultados del sistema. Son resultados útiles, que le sirven a los vendedores en el trato con sus clientes. 2 En un análisis más detallado, podríamos 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 características generales, etc.. Página 5 de 49

Hasta aquí, podemos imaginar un "sistema manual" armado así: para cada auto se arma una ficha con sus características 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 están 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 sólo la información que tiene representada,.las fichas para los autos, lo que le cuenta el vendedor para los clientes. Notamos también que la información 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 información que elegimos incluir en un sistema es la que necesitamos para obtener los resultados buscados; el recorte de la información a incluir en un sistema es un factor crítico para su construcción. Aunque no estamos usando computadoras, tenemos todos los elementos de un sistema de información del estilo deseado: información representada explícitamente (fichas más indicaciones de los vendedores), manejo de la información representada (las inferencias que hace la oficina de recomendaciones), resultados concretos (qué autos pueden o no recomendarse). Resumiendo, si tomamos representación de la información: mediante enunciados. manipulación: 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 información. 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 representación de información 2. una descripción formal de cómo realizar inferencias. Este es el rol de la Lógica de predicados de primer orden La lógica 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 información; o sea, las premisas y las posibles conclusiones de los razonamientos. b. sistemas de inferencia deductiva (p.ej. el sistema de deducción 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 conclusión a partir de un conjunto de premisas. Entonces, usando la lógica de predicados de primer orden, podemos construir sistemas de información basados en los conceptos de razonamiento e inferencia. Hagámoslo para la agencia de autos; transcribamos los tres enunciados que tomaremos como premisas. 1. El auto del Sr. Gómez tiene ABS, levantavidrios eléctrico y estéreo con MP3. 2. El auto del Sr. Galíndez 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. Página 6 de 49

Primero, elegir un código para los predicados y constantes de individuo que aparecen. Elijamos este: a Mirna b auto del Sr. Gómez c auto del Sr. Galíndez d ABS e levantavidrios eléctrico f estéreo 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. Gómez tiene ABS, levantavidrios eléctrico y estéreo con MP3. 1 (Qbd Qbe) Qbf El auto del Sr. Galíndez 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. Galíndez, analizaremos la corrección del razonamiento que tenga las tres fórmulas anteriores como premisas, y esta conclusión Pac Este razonamiento es correcto, veámoslo usando deducción 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. Galíndez, va a responder que sí. Ya tenemos una forma de interacción, o de uso, de un sistema de información basado en lógica. Observamos que la interacción con este sistema consiste en hacerle preguntas, a las que responde por "sí" o por "no" 4. Ya sabemos cuándo responde que sí: cuando el razonamiento cuyas premisas son la información representada y la conclusión es la pregunta es correcto; visto de otra forma, cuando el sistema puede inferir la pregunta a partir de la información que tiene. En el ejemplo: el sistema "sabe" (o sea, maneja conocimiento) sobre los gustos de Mirna y las características de los autos. Le pregunto si a Mirna le puede interesar el auto del Sr. Galíndez; como puede inferirlo, responde que "sí". 3 Este enunciado podría haber sido descripto de otra forma por la persona que nos indica cómo 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 información, debemos elegir cómo representarla. Cuando formalizamos información para un sistema, debemos elegir representaciones que sean adecuadas a los objetivos del sistema; en este caso, obtener las conclusiones que buscamos. Este fenómeno se repite, no sólo en el ámbito de la programación basada en lógica (que es el tema de este apunte), sino en los sistemas de información basados en computadoras en general. Encontrar representaciones adecuadas es un aspecto crítico en el éxito de un sistema. 4 En rigor, nos gustaría algo más 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 más adelante. Página 7 de 49

Y si la inferencia no se puede hacer? Pasemos al auto del Sr. Gómez; la conclusión para este caso es Pab A partir de las premisas, no puedo demostrar esta conclusión, ni tampoco la contraria Pab Qué debería decir el sistema en este caso? El criterio generalmente asumido en los sistemas de información basados en estas ideas es que: si el sistema no puede inferir lo que se pregunta a partir de la información que maneja, entonces responde "no". Por lo tanto, la respuesta del sistema para el auto del Sr. Gómez será "no", lo que se corresponde con lo esperable intuitivamente. Más adelante volveremos a este tema. Objetos genéricos distintas visiones de una misma entidad Al plantear el código que usamos para el sistema de la concesionaria, hay algo respecto de la elección de las constantes que puede resultar extraño. 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. Gómez. Observemos que en los átomos que enuncian "el auto del Sr. Gómez tiene ABS" y "el auto del Sr. Galíndez tiene ABS" estamos representando el "ABS" con la misma constante, que es d. Podríamos haber elegido representar "ser ABS" con un predicado R, entonces el enunciado "el auto del Sr. Gómez tiene ABS" se representaría así x (Qbx Rx) (1) o sea "existe un accesorio tal que el auto del Sr. Gómez lo tiene y que es ABS". Si hubiéramos representado todos los accesorios de esta forma, entonces el enunciado sobre los gustos de Mirna quedaría así (S : ser aire acondicionado): x (( y z (Qxy Qxz Ry Sz)) Pax) Para modelar el mismo problema, tengo que recurrir a una representación más compleja. Además, como veremos, en el lenguaje Prolog no podemos escribir una fórmula como (1). Desde otro punto de vista, analicemos qué entidades manejan las personas que trabajan en la sección de ventas de la concesionaria, p.ej. los vendedores. Si un vendedor sabe que un auto tiene ABS, lo más probable es que no esté pensando en el objeto físico ABS del auto. Si dos autos tienen ABS, en la visión del vendedor a los dos autos "les pasa lo mismo" que es tener ABS, y esta información es relevante para el objetivo del sistema. Los objetos físicos que son el sistema de ABS de cada auto no son de interés para este sistema. Si por otro lado le preguntamos a un vendedor " qué accesorios tiene el auto del Sr. Gómez?" la respuesta será "ABS, levantavidrios y estéreo con MP3" (veremos más 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 físico, es algo que llamaremos "objeto genérico". Página 8 de 49

Podemos hacer una analogía 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 porción determinada de carne picada, sino de un objeto genérico, el mismo que me permite preguntarle a alguien " tenés 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 pedirán al sistema no aparecen estas entidades. Si tomamos "ABS" como un objeto genérico, este sí es relevante para el sistema; por lo tanto, es el que amerita estar representado con una constante de individuo. En conclusión: la constante d está representando al objeto genérico 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. Gómez en el ejemplo) y en qué casos es conveniente referirnos a objetos genéricos (como ABS o levantavidrios). Está claro que si construyéramos un sistema para el taller de la concesionaria, sería más probable que los objetos físicos ABS sí tuvieran relevancia, y por lo tanto ameritaran ser representados individualmente. Qué se representa y cómo va en función de los resultados esperados del sistema y de qué visión están atrapando; la visión de un auto que tiene un vendedor es distinta a la que tiene un mecánico. En resumen Veamos cómo quedó configurado nuestro sistema de información: información representada: enunciados expresados en fórmulas del lenguaje de predicados. manejo de la información: ante una consulta, expresada también como una fórmula, tomar la información representada como premisas, la consulta como conclusión, y usar un sistema de deducción para elucidar si puede demostrarse la corrección 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 clásico de la mortalidad de Sócrates, un sistema de información basado en lógica: tendrá como información representada "Sócrates es hombre" y "todos los hombres son mortales", y ante la consulta "Sócrates es mortal" responderá que sí. Estas ideas (representación en un lenguaje formal, usar procesos de inferencia como manipulación, interacción mediante consultas) son la base de sistemas de información que realmente se usan, p.ej. los llamados "sistemas expertos". En el curso vamos a ver un ejemplo muy sencillo, que es la construcción de pequeños sistemas (p.ej. alguno análogo al de Sócrates) usando un lenguaje de programación llamado Prolog. El Prolog es una herramienta que permite construir sistemas que responden a las ideas que presentamos en este capítulo, porque acepta información representada en un lenguaje que es una variación restringida del lenguaje de predicados. acepta consultas representadas por fórmulas en el mismo lenguaje. intenta demostrar la corrección del razonamiento, y responde por "sí" o por "no" ante cada consulta según el criterio recién indicado. Página 9 de 49

Capítulo 2 El mundo de Prolog Aunque no conocemos los detalles acerca de cómo es Prolog, ya sabemos varias cosas de él. En primer lugar su objetivo: ser una herramienta que nos permita construir sistemas de información basados en los conceptos de razonamiento e inferencia. También algunas características: La información se describe en un lenguaje que tiene relación con el de la lógica de predicados de primer orden. La forma de obtener resultados es mediante consultas; una consulta es una fórmula expresada en el mismo lenguaje en el que se describe la información. Usa algún sistema de deducción para saber si el razonamiento cuyas premisas son las información descripta, y la conclusión es la consulta, es correcto. Veamos ahora al Prolog un poco más en detalle. El lenguaje Prolog Átomos y nombres Comencemos con el lenguaje. Dijimos que es una variación restringida del lenguaje del cálculo de predicados. Vamos a ver la sintaxis de Prolog a partir de ejemplos; una descripción más ordenada aparece en el anexo 1. Por qué variación? Porque la sintaxis es distinta. Hay muchas diferencias: Los símbolos de predicado, variable y constante de individuo, en realidad no son símbolos sino que son secuencias de símbolos, o sea, pueden tener varias letras. P.ej. si quiero representar el predicado monádico "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 símbolos que denota un predicado la llamaremos el nombre del predicado, y análogamente 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 programación: nombres de función, de procedimiento, de módulo, etc.. Para distinguir qué nombra cada nombre, en Prolog: los nombres de predicado empiezan con minúscula. los nombres de variable empiezan con mayúscula. los nombres de constante de individuo empiezan con minúscula. Un átomo tiene esta forma predicado(argumento-1,..., argumento-n) en lugar de la forma que tiene en lógica Pa 1...a n La traducción de una fórmula a Prolog se llama cláusula. Todas las cláusulas tienen que terminar con punto (si no "no anda"). Con estas reglas ya podemos escribir cláusulas (equivalente a fórmulas) atómicas en Prolog. Página 10 de 49

P.ej. tenemos que decir que Fritz es un gato. En lógica podemos expresarlo así: Pa (con el código: Px : x es un gato, a : Fritz). En Prolog podemos escribirlo de esta forma: gato(fritz). (observar el punto al final de la cláusula). Otro ejemplo: si queremos expresar que Ana y Marcos son amigos mediante un predicado diádico, en Prolog puede quedarnos, p.ej., así: amigos(ana,marcos). en lugar de Qbc (el código para este caso es Qxy : x e y son amigos, b : Ana, c : Marcos). La coma adentro de los paréntesis separa entre argumentos para predicados poliádicos. Los nombres fritz, ana y marcos están en minúsculas, porque denotan constantes de individuo. Ausencia de código La característica de que los nombres puedan tener muchas letras es muy útil, porque elimina la necesidad de tener un código separado de las cláusulas. En la cláusula gato(fritz). no hace falta código, se entiende que el predicado monádico gato(x) representa "X es un gato" y que la constante fritz representa al gato llamado Fritz. Para que no haga falta código, tenemos que elegir los nombres de predicados y constantes de forma tal de que se lean, que leyendo las cláusulas pueda entender qué información están representando sin necesidad de un código separado. En general, elegir buenos nombres es muy importante en la construcción de sistemas de información, vamos a practicar esta habilidad en el curso. Moléculas y variables Hablemos ahora de los temas que nos quedan: fórmulas moleculares y variables. Representemos en Prolog el enunciado "todos los gatos son mamíferos", para introducir el condicional y el cuantificador universal. En Prolog este enunciado se escribe así mamifero(x):- gato(x). en lógica de predicados de primer orden sería (Px : x es gato, Rx : x es mamifero) x Px Rx El símbolo :- es un condicional "al revés", o sea, el consecuente se pone a la izquierda, el antecedente se pone a la derecha. En el enunciado clásico "todos los hombres son mortales" el antecedente es ser hombre, el consecuente es ser mortal. En Prolog queda así: mortal(x):- hombre(x). Las cláusulas moleculares pueden leerse de izquierda a derecha usando la palabra si para el símbolo :- ; así, la primer cláusula puede leerse de la siguiente forma "para todo X, X es mamífero si X es gato" o más resumido "mamífero si gato" OJO que esto es distinto a decir "si es mamífero, es gato" dicho así, está implícito el "entonces", es equivalente a "si es mamífero entonces es gato" que no es lo que dice la cláusula. Página 11 de 49

Antes de seguir, tres apuntes sobre la cláusula mamifero(x):- gato(x). 1. Cómo "sabe" Prolog que el argumento es una variable? Porque empieza con mayúscula. P.ej. en esta cláusula mamifero(x):- gato(x). el argumento es la constante de individuo x, no una variable. Recordemos que en Prolog no hay nombres que sean sólo para constante y nombres que sean sólo para variable; el criterio para diferenciar constantes de variables es si empiezan en minúscula o en mayúscula. 2. dónde dice "para todo", cómo sabe que la variable está cuantificada universalmente? Todas las variables en Prolog están cuantificadas; el cuantificador está implícito, no se escribe. Para todas las variables se asume un cuantificador universal, salvo dos casos que veremos más adelante. 3. sobre el nombre de predicado gato Un detalle adicional sobre la cláusula sobre gatos y mamíferos: para decir "X es gato" elegimos gato como nombre de predicado. Además de ser conveniente por la comprensión, es necesario si a partir de esta cláusula más la que ya teníamos gato(fritz). queremos que Prolog pueda inferir que Fritz es mamífero, y por lo tanto responda "sí" a la consulta correspondiente. En general al representar información 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 más adelante. Sigamos con el análisis de las cláusulas moleculares en Prolog. Toda cláusula molecular bien formada tiene que tener exactamente una aparición del símbolo :-, o sea que si en una cláusula no tiene :- entonces tiene que ser atómica en ninguna cláusula puede aparecer el :- más de una vez. Además del :- las únicas conectiva que incluye Prolog son conjunción y negación El tratamiento de la negación en Prolog tiene características bastante particulares, que describiremos en un capítulo dedicado. Veamos ahora la conjunción. La conjunción que se escribe con una coma. Ahora bien, la conjunción solamente puede ir en a la derecha del :- o sea en el antecedente. P.ej. una posible cláusula para representar "los gatos cazan ratones" es caza(x,y):- gato(x), raton(y). en donde las dos variables están cuantificadas universalmente; en lógica sería x y ((Px Qy) Rxy) (Px : x es gato; Qx : x es ratón; Rxy : x caza a y) Resumiendo: toda fórmula 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 conjunción. En Prolog se bautizaron las partes de una cláusula molecular al consecuente se lo llama cabeza al símbolo :- se lo llama cuello al antecedente se lo llama cuerpo Página 12 de 49

O sea que las cláusulas 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 cláusula 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 negación que la vamos a ver más adelante. Las que siguen son cláusulas mal formadas: mamifero(x) :- felino(x) :- gato(x). porque ninguna cláusula puede tener más de un :-. gato(fritz), raton(jerry). porque toda cláusula molecular debe tener un :-. mamifero(x), come(x,y) :- gato(x), raton(y). porque la coma sólo 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 variación. También queda claro por qué restringida; hay restricciones en dos aspectos. 1. conectivas, sólo tenemos un equivalente del condicional y la conjunción, y además con limitaciones de uso 2. cuantificadores, está restringido qué cuantificador se corresponde con cada variable y no puedo cambiarlo. Hay muchas fórmulas que pueden escribirse en lógica de predicados de primer orden, y que no pueden traducirse a una cláusula Prolog. En algunos casos, podremos esquivar la limitación traduciendo una fórmula en varias cláusulas; en otros casos esto no es posible. Veamos algunos casos de fórmulas 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 código común a estas fórmulas es este: a Fritz Px x es mamífero 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 cláusulas 5 recordemos que dejamos el tratamiento de la negación para un capítulo posterior Página 13 de 49

1 - Pa Ta Este caso es sencillo: separamos en dos cláusulas mamifero(fritz). adulto(fritz). Si analizamos las reglas de introducción y eliminación de la conjunción en el sistema de deducción 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 múltiples, o sea fórmulas de la forma (((f 1 f 2 ) f 3 ) f 4 )... que pueden expresarse en Prolog usando tantas cláusulas como elementos de la conjunción. 2 - Pa Qa En este caso, no hay traducción a Prolog. Podemos armar una cláusula similar a partir de la fórmula lógicamente equivalente Pa Qa pero por las características de la negación de Prolog (que veremos más adelante) el uso de una fórmula de este estilo para obtener resultados es muy limitada; y en general diremos que no podemos expresar en Prolog fórmulas cuya conectiva principal es una disyunción. 3 - x ((Px Qx) Rx) Si fuera conjunción en lugar de disyunción en el antecedente se podría traducir inmediatamente. Cuando tengo disyunción en el antecedente, a partir de esta ley lógica ((a b) c) ((a c) (b c)) puedo obtener que la fórmula 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 cláusulas las fórmulas cuya conectiva principal es una conjunción), esto se puede traducir a Prolog en dos cláusulas; en el ejemplo son tienepiel(x):- mamifero(x). tienepiel(x):- reptil(x). (recordemos el código P : mamífero, 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 fórmulas no se puede traducir a cláusulas Prolog; la disyunción del consecuente no se puede separar, y recordemos que en la cabeza de una cláusula puede ir un solo átomo. 5 - x (Px (Sx Rx)) Esta fórmula no se puede traducir directamente, porque habría que poner varios átomos en la cabeza de la cláusula correspondiente; en el ejemplo sería tienedientes(x), tienepiel(x):- mamifero(x). (recordemos P : mamífero; S : tiene dientes ; R : tiene piel) que es una cláusula mal formada. Página 14 de 49

Al igual que en el caso 3, hay una ley lógica que nos ayuda a descomponer la fórmula; en este caso es (a (b c)) ((a b) (a c)) Usando esta ley, puedo transformar la fórmula en cuestión 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 fórmula no tiene traducción a Prolog 6 ; en general va a pasar eso con las fórmulas en los que el cuantificador principal sea un existencial. Por lo tanto, no podemos escribir en Prolog fórmulas que enuncien la existencia de un ente con ciertas características sin denotarlo; p.ej. no podemos escribir "el auto del Sr. Gómez tiene un equipo de ABS" sin nombrarlo. Esta es una de las motivaciones para la aparición de constantes que denotan "objetos genéricos", tal cual lo indicado en el capítulo 1. En lugar de expresar "el auto del Sr. Gómez tiene un equipo de ABS" se establece el "objeto genérico" equipo de ABS, y se relaciona a cada auto con las constantes que representan sus accesorios. Programa Prolog Ahora que aprendimos la sintaxis, veamos cómo usar el lenguaje Prolog para construir sistemas de información de la forma planteada en el primer capítulo. En el lenguaje Prolog vamos a escribir, tanto la información disponible, que son las premisas, como las consultas que querramos hacer, que son las posibles conclusiones. Al conjunto de premisas que forman la información relevante para un sistema lo vamos a llamar programa Prolog; dicho de otra forma un programa Prolog es un conjunto de cláusulas que describe la información relevante para un sistema de información. o sea, para cada sistema que construyamos en este curso habrá un programa Prolog que describe la información que necesita analizarse para producir los resultados esperados. En los sistemas de información construidos usando Prolog, el programa es la información representada. Cada pregunta que se le haga al Prolog se hará a partir de un programa, y ante cada pregunta, el Prolog responderá "sí" si puede inferir la pregunta a partir del programa, y "no" en caso contrario. 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 anónima con la que se pueden expresar existenciales en algunos casos. El estudio de la variable anónima excede los contenidos de este curso. Página 15 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. Gómez? le puede interesar a Mirna el auto del Sr. Galíndez? Para nosotros, construir un sistema consistirá en escribir el programa que describe la información relevante, y probar si se pueden obtener los resultados esperados. Apuntar a los objetivos Cuando se plantea la construcción de un sistema de información (en general, no sólo 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 características positivas que pueda tener (facilidad de uso, robustez, costo, etc.). Para los sistemas de información basados en lógica, 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. Veámoslo 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 podrían ser las preguntas respecto de Mirna. Los objetivos de cada sistema influyen en qué información voy a incluir en el programa, y posiblemente también en la forma que tenga de representarla; en particular, qué predicados elijo, qué aridad tiene cada predicado, cuáles van a ser las constantes que voy a usar. Puede haber varias formas en principio correctas de describir cierta información 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: para que un programa Prolog sea adecuado, no alcanza con que describa la información en forma correcta, también debe servir para hacer las inferencias que se esperan del sistema para el cual se construye. La concesionaria en Prolog Llegó el momento de armar nuestro primer programa Prolog; vamos a describir la información 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 información introducida antes, y su representación en lógica. El auto del Sr. Gómez tiene ABS, levantavidrios eléctrico y estéreo con MP3. (Qbd Qbe) Qbf El auto del Sr. Galíndez tiene aire acondicionado, cierre centralizado y ABS. (Qch Qcg) Qcd Página 16 de 49

Mirna está buscando un auto que tenga ABS y aire acondicionado. x ((Qxd Qxh) Pax) Agreguemos un poco más de información, sin traducirla a lógica: Tanto Juana como Lola está buscando un auto con MP3 y aire acondicionado. Pedro está buscando un auto con ABS. Todos los jóvenes buscan autos con MP3 y levantavidrios eléctrico. Lucas y Francisco son jóvenes. Empecemos por el primer enunciado; vimos que debemos "partirlo" en tres cláusulas, nos queda accesorio(autogomez, abs). accesorio(autogomez, levantavidrios). accesorio(autogomez, mp3). (antes de seguir, ver la relación entre estas tres cláusulas y la fórmula expresada en lógica de predicados de primer orden) Tuvimos que elegir un nombre para el auto del Sr. Gómez, que es la constante autogomez 7. Describamos análogamente al auto del Sr. Galíndez 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. Gómez, 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 elección, debo ser coherente con ella; si usara otro nombre de predicado para los accesorios del segundo auto, no podría armar un programa que responda correctamente. Análogamente, elegí el nombre abs para describir al accesorio ABS; esta elección también debe ser coherente. Esta coherencia ya se ve en la representación en lógica: en las dos fórmulas se usó el mismo símbolo de predicado (Q) para la relación entre cada auto y sus accesorios; y la misma constante (d) para representar al ABS. Vamos ahora a la fórmula 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 traducción pudo ser directa, porque el Prolog soporta conjunción en el antecedente. Describamos los gustos de Juana y Lola. Pasado a "castellano regimentado", el enunciado quedaría así: si X tiene aire acondicionado y MP3, entonces X le puede interesar a Juana y a Lola tenemos una conjunción en el consecuente; se corresponde con el caso 5 del estudio de las limitaciones del lenguaje Prolog; la fórmula 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 relación entre estas dos cláusulas y el enunciado expresado en "castellano regimentado", traducir a lógica de predicados de primer orden si es necesario. Si no se entiende esta relación, va a ser complicado entender lo que sigue en el apunte). Sigue la afirmación sobre el gusto de Pedro, que se traduce fácilmente: puedeinteresar(pedro,x):- accesorio(x,abs). 7 repaso: autogomez es una constante aunque tiene una mayúscula en el medio, para decidir se toma la primer letra que es minúscula Página 17 de 49

Pasemos ahora al enunciado sobre los gustos de los jóvenes. 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 jóvenes" indistintamente. Entonces, ser joven en este programa es una característica de las personas. Si tengo un enunciado de la forma "a los jóvenes " lo deberé traducir como "si X es joven entonces "; y en el cuerpo de la cláusula aparecerá el átomo joven(x). La cláusula en Prolog queda puedeinteresar(x,y):- joven(x), accesorio(y,mp3), accesorio(y,levantavidrios). Finalmente, describamos las características 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 debería responder que sí, mientras que a la segunda debería respondr que no. Efectivamente, ese va a ser el comportamiento de Prolog "cargado" con este programa, como veremos más adelante al analizar cómo se hacen las consultas y cómo responde Prolog. Qué se describe en un programa Resumamos el programa construido en el parágrafo 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 cómo representar la información, veámoslas con algo de detalle. Página 18 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 decisión podría 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 cláusula hubiera quedado así tieneabs(autogomez). y la cláusula sobre los gustos de Mirna tendría 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 específicos u objetos genéricos; ver la sección al respecto en el capítulo 1. En este caso, los autos y los posibles compradores serán representados individualmente, mientras que para los accesorios elegimos representarlos en forma genérica, con una constante para cada accesorio, y no p.ej. una para el ABS del auto del Sr. Gómez y otra distinta para el auto del Sr. Galíndez. 2. elegimos qué predicados usar para la descripción. 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 cuáles de los posibles compradores son jóvenes. Está claro que las decisiones sobre predicados y constantes están muy relacionadas: el cambio en decisión sobre constantes para los accesorios hace aparecer nuevos predicados. 3. decidimos qué información incluir en el programa, lo que da lugar a qué cláusulas 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 condición sobre los gustos de los jóvenes, hay que incluir la información sobre quiénes de los posibles compradores son jóvenes. Al escribir las cláusulas que describen la información 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 cláusulas 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 también que las decisiones sobre constantes y predicados de un lado, y sobre información a incluir del otro, son en cierta medida independientes: los predicados y las constantes nos indican cómo representar información, pero no qué información representar. P.ej. estas cláusulas accesorio(autogomez, abs). tieneabs(autogomez). describen la misma información, que el auto del Sr. Gómez tiene ABS. Página 19 de 49

Consultas e intérprete Prolog Lógica Algunos conceptos sobre Prolog versión 1.0 Sigamos con el ejemplo del sistema para recomendaciones en la concesionaria de autos. En la sección anterior construimos, usando el lenguaje Prolog, un sistema con el objetivo de poder preguntarle qué autos, entre los que están en venta, pueden interesarle a qué clientes. Cómo hacemos estas preguntas; dicho de otra forma, cómo hacemos "andar" un programa Prolog? Aquí interviene un nuevo elemento, que es el intérprete Prolog. Un intérprete 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 intérprete, escritas también en lenguaje Prolog, usando los mismos predicados y constantes usados en el programa. El intérprete responderá "Yes" o "No", según si puede inferir (usando un sistema de deducción análogo aunque de distintas características- que el sistema de deducción natural) la consulta tomando como premisas las cláusulas que componen el programa cargado. De esta forma, el intérprete es el "agente manipulador" del que hablamos en el capítulo 1: ante una consulta, manipula la información relevante, y entrega la respuesta que es el resultado que obtenemos del sistema. Hay varios intérpretes Prolog, para el curso elegimos uno llamado SWI Prolog. Incluimos los detalles sobre cómo usar este intérprete en un anexo de este apunte. Volviendo al ejemplo, supongamos que cargamos el programa que construimos en la sección anterior, y queremos conocer los gustos de Lucas. Podemos escribir la consulta?- puedeinteresar(lucas, autogomez). obteniendo como respuesta "Yes", y también?- puedeinteresar(lucas, autogimenez). obteniendo como respuesta "No". (los símbolos?- los pone el SWI, es la indicación 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 capítulo 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 característica tiene "nombre propio": hipótesis de universo cerrado: para cada relación que no es indicada explícitamente 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 explícitamente en el programa cargado. La hipótesis de universo cerrado aparece descripta tanto en literatura sobre programación basada en lógica, como en trabajos sobre lógica, p.ej. puede verse el artículo de R. Reiter, "A Logic for Default Reasoning" (Artificial Intelligence Nro. 13, 1980, North-Holland), página 84. Página 20 de 49