Fundamentos de Visual Prolog Visual Prolog es orientado a objeto Para el curso de Sistemas Expertos usaremos el Prolog de la forma clsica usando el PIE (Prolog Interpretation Engine: Motor de Interpretacin de Prolog). Es el intrprete clsico de Prolog. Lo encontrar en la carpeta Ejemplos que se crea al instalarlo. Lgica de la Clusula Horn Visual Prolog se basa en la lgica de la clusula Horn. Es un sistema formal usado para razonar sobre objetos y las relaciones que tienen stos. Un ejemplo en lenguaje natural se expresa como: John es el padre de Bill. Se tienen 2 objetos (John y Bill) y una relacin, el saber que uno es el padre del otro. Formalizando esta oracin: padre(Bill,John). Lgica de la Clusula Horn Podemos decir que padre es un predicado (una relacin) que tiene 2 argumentos. El orden de los argumentos es determinado por el diseador de la formalizacin. Debe ser consistente. Ejms: vive_en(Pedro,Lima). esta_casado_con(Carlos,Claudia). Lgica de la Clusula Horn No hay lmite para el nmero de argumentos. Ejm: % tiene 1 argumento. es_soltero(Ricardo). % tiene 3 argumentos. especialista_en(Jeannet,Matemticas,Lgica). Estas especificaciones se denominan: hechos Un hecho consiste de un predicado, uno o ms argumentos entre parntesis separados por comas y terminados en un punto. Lgica de la Clusula Horn Un hecho describe una relacin esttica entre los objetos (argumentos). Las relaciones generales entre objetos (o grupos de objetos) se llaman reglas. Ejm: Persona3 es abuelo de Persona1, si Persona2 es padre de Persona1 y Persona3 es padre de Persona2. Formalizando: Regla abuelo. abuelo(Persona1, Persona3):- padre(Persona1, Persona2), padre(Persona2, Persona3). Lgica de la Clusula Horn En esta regla usamos: Los operadores lgicos SI (:-) tambin Y (,). Cada regla termina en un punto (.). La primera parte se denomina conclusin (antes del smbolo :-). Lo que sigue se denomina premisas formado por uno o ms hechos separados por comas y termina en punto (.). Note que abuelo comienza con minscula. Los argumentos deben empezar con mayscula. A estos argumentos denominamos variables. Lgica de la Clusula Horn Si en lgica escribimos: SI p Y q ENTONCES r. En Prolog es: r:- p, q. Cuando las premisas son verdaderas la conclusin tambin lo es. La forma general es: Conclusin:- premisa1, premisa2,premisaN. Lgica de la Clusula Horn Resulta difcil establecer al final quin es el abuelo. Vamos a usar nombres de variables en vez de Persona1, Persona2 y Persona3. Usted es libre de elegir los nombres de variables. Reformulando la regla abuelo: abuelo(Nieto, Abuelo):- padre(Nieto, Padre), padre(Padre, Abuelo). Lgica de la Clusula Horn En la regla usamos variables en vez de nombres de objetos. En Prolog los hechos y las reglas se llaman clusulas. Con hechos y reglas estamos listos para formular teoras. En general una teora es una coleccin de hechos y reglas; es decir es un sistema de clusulas. Lgica de la Clusula Horn Una pequea teora: padre(Bill,John). padre(Pam,Bill). padre(Sue,Jim). abuelo(Nieto, Abuelo):- padre(Nieto, Padre), padre(Padre, Abuelo). Con esta teora se puede contestar a las siguientes preguntas: Lgica de la Clusula Horn Jimes padre de Sue? Esta pregunta puede ser contestada observando los hechos. El tercer hecho reconoce que Jimes el padre de Sue, as que la respuesta es Si(True). John es padre de Sue? No hay un hecho que indique que John es el padre de Sue, as que la respuesta es No. Note sin embargo que hay un hecho que dice que Jimes el padre de Sue. Esto implica que John no puede ser el padre de Sue. La inteligencia de los seres humanos notara esto, pero no es la manera en que razon Prolog. En Prolog la respuesta es "no" porque no hay un hecho que indica que debe ser "s". Lgica de la Clusula Horn Quin es el padre de Pam? Esta pregunta puede ser contestada observando el segundo hecho. Dice que Bill es el padre de Pam. John es el padre de Ana? No hay hechos sobre Ana, no podemos contestar a esta pregunta. En Prolog asumimos que la respuesta es No", pues no podemos indicar que la respuesta es S". Lgica de la Clusula Horn John es el abuelo de Pam? Para contestar esta pregunta tenemos que usar la regla y los hechos. La regla nos dice que necesitamos encontrar dos hechos. El primero debe decir que alguien es el padre de Pam y el segundo hecho debe indicar que John es el padre del mismo. Repasando los hechos se observa que los hechos estn diciendo precisamente que tomamos a Bill para algo. En efecto s, John es el abuelo de Pam. Lgica de la Clusula Horn Las Preguntas y/o Metas En Prolog puede hacer estas preguntas al motor de inferencia. Tales preguntas se llaman metas. Las metas se pueden formalizar de la siguiente manera: La pregunta Jimes el padre de Sue?: ?-padre(Sue", "Jim"). La pregunta John es el padre de Sue?: ?-padre("Sue", "John"). La pregunta Cul es el nombre del padre de Pam?: ?-padre("Pam", X). La pregunta John es el padre de Ana?: ?-padre("Ana", "John"). La pregunta John es el abuelo de Pam? : ?-abuelo("Pam", "John"). Lgica de la Clusula Horn A todos, los hechos, reglas y metas se llama las clusulas Horn, por lo tanto el nombre de lgica de la clusula Horn. Algunas metas como la primera, segunda y ltima se responden con un simple SI o NO, porque est preguntando si un hecho es verdadero. Para otras metas como la tercera buscamos una solucin como X = "Bill". Algunas metas pueden incluso tener muchas soluciones. Por ejemplo: ?- padre(X, Y). Tiene tres soluciones (hay tres hechos que dan una solucin): X = "Bill", Y = "John". X = "Pam", Y = "Bill". X = "Sue", Y = "Jim". PIE: Motor de Inferencia de Prolog Ventana de dilogo Ventana del programa PIE: Motor de Inferencia de Prolog Antes de poder usar el programa, debe instalar y construir el PIE ejemplo. Si an no ha instalado los ejemplos, por favor hgalo ahora. Seleccione "instalar los ejemplos" en el men de inicio de Windows (ejemplos de Start/Visual Prolog/Install). Inicie Visual Prolog Busque el proyecto PIE en la carpeta Ejemplos que est instalada. Abra el proyecto PIE en el IDE y ejecute el programa. Puede ejecutar PIE como un proyecto normal. No tiene que cambiar nada, as que utilice solamente el IDE para ejecutar el programa. PIE: Motor de Inferencia de Prolog Para crear un programa, seleccione File/New de la barra de men. PIE abre una segunda ventana, la ventana del programa que usaremos para agregar el programa. Ahora hay dos ventanas abiertas, la ventana del programa y la ventana de dilogo. En la ventana del programa escribe los hechos y las reglas de su teora. La ventana de dilogo se usa para el dilogo con el motor de inferencia. Aqu escriba las metas para el programa, que son las preguntas que se contestarn. Tambin los mensajes de PIE aparecen en esta ventana. Es importante tener cuidado de cul ventana tiene el control (ventana activa). Para dar control a una ventana haga clic en su barra de ttulo. Agregue en la ventana del programa las clusulas padre y abuelo (que son los hechos y las reglas) que evaluamos anteriormente. Ventana del Programa Si todo va bien se mostrar una ventana como sta Hechos Regla PIE: Motor de Inferencia de Prolog Para que el motor de inferencia utilice stas clusulas y sta regla debemos cargarlo previamente. Mientras la ventana del programa est activa seleccione el men Engine/Reconsult o tambin puede pulsar la tecla F9. El procedimiento en general es: Crear o cargar un archivo en la ventana del programa con File/New o File/Consult Guarde esos archivos cuando sea necesario con File/Save Reconsltelo con el motor con Engine/Reconsult Agregue una meta en la ventana de dilogo y presione <enter> PIE: Motor de Inferencia de Prolog Una vez que "haya consultado" la teora, puede utilizarla para responder a metas. En una lnea en blanco en la ventana de dilogo digite una meta (sin ?- adelante). Vamos a hacer la pregunta quin es abuelo de quin. En Prolog esto se convierte en una meta con 2 variables. Queremos que el motor de inferencia encuentre los valores (nombres) para las variables. abuelo(X, Y). Note que abuelo est en minscula y las variables en mayscula "X" y "Y, no olvide terminarlo en punto. Ejecutando las metas Escribimos la meta como se observa en la figura: Para consultarlo site el cursor al final del prrafo y presione enter Meta Resultado Reglas para establecer las metas Puede utilizar cualquier predicado en el programa para formular una meta. En este caso puede utilizar "padre" o "abuelo". Con un predicado debe dar los argumentos apropiados. Eso significa el nmero correcto y el tipo correcto. En este caso el tipo es siempre cadena de caracteres, es difcil que se equivoque aqu. Un argumento puede incorporar el nombre de un objeto especfico o puede usar una variable. Los nombres de objetos especficos son "Sue", "Jim", "Bill", etc. Todas en cadena de caracteres. Cuando incorpora una meta, el motor de inferencia contestar s o no dependiendo de las reglas y de los hechos en su programa. Cuando incorpora una meta con variables el motor de inferencia intentar buscar los valores para las variables de modo que la meta iguale un hecho. Cuando tiene xito, mostrar los valores para las variables. La salida se entender mejor cuando use los nombres de variables que tengan sentido. Reglas para establecer las metas Puede usar nombres de objetos y variables en la misma meta. Por ejemplo padre("Sue", Padre). En este caso el motor de inferencia intenta otra vez encontrar un valor para la variable que empareje la meta con uno de los hechos. Una meta puede consistir en ms de un predicado. En ese caso tiene que utilizar los operadores lgicos "," para y o ";" para o. Un ejemplo es la meta padre("Sue", "Jim"),padre("Bill", "Juan"). Ejercicios Hagas las consultas respectivas de la regla del abuelo tratadas anteriormente al motor de inferencia del prolog. Establezca metas propias a la teora redactada.