programación lógica - uap.edu.pe · no tiene que cambiar nada, así que utilice solamente el ide...

26
Programación Lógica Ing. Iván Adrianzén Olano

Upload: hadat

Post on 14-Apr-2018

217 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Programación Lógica - uap.edu.pe · 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,

Programación Lógica

Ing. Iván Adrianzén Olano

Page 2: Programación Lógica - uap.edu.pe · 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,

Fundamentos de Visual Prolog Visual Prolog es orientado a objeto

Para el curso de Sistemas Expertos usaremos el Prologde la forma clásica usando el PIE (PrologInterpretation Engine: Motor de Interpretación de Prolog).

Es el intérprete clásico de Prolog.

Lo encontrará en la carpeta Ejemplos que se crea al instalarlo.

Page 3: Programación Lógica - uap.edu.pe · 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,

Lógica de la Cláusula Horn Visual Prolog se basa en la lógica de la cláusula 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 relación, el saber que uno es el padre del otro.

Formalizando esta oración:

padre(“Bill”,”John”).

Page 4: Programación Lógica - uap.edu.pe · 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,

Lógica de la Cláusula Horn Podemos decir que padre es un predicado (una

relación) que tiene 2 argumentos.

El orden de los argumentos es determinado por el diseñador de la formalización.

Debe ser consistente.

Ejms:

vive_en(“Pedro”,”Lima”).

esta_casado_con(“Carlos”,”Claudia”).

Page 5: Programación Lógica - uap.edu.pe · 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,

Lógica de la Cláusula Horn No hay límite para el número de argumentos.

Ejm:

% tiene 1 argumento.

es_soltero(“Ricardo”).

% tiene 3 argumentos.

especialista_en(“Jeannet”,”Matemáticas”,”Lógica”).

Estas especificaciones se denominan: hechos

Un hecho consiste de un predicado, uno o más argumentos entre paréntesis separados por comas y terminados en un punto.

Page 6: Programación Lógica - uap.edu.pe · 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,

Lógica de la Cláusula Horn Un hecho describe una relación estática 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).

Page 7: Programación Lógica - uap.edu.pe · 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,

Lógica de la Cláusula HornEn esta regla usamos:

Los operadores lógicos SI (“:-”) también Y (“,”).

Cada regla termina en un punto (.).

La primera parte se denomina conclusión (antes del símbolo “:-”).

Lo que sigue se denomina premisas formado por uno o más hechos separados por comas y termina en punto (.).

Note que “abuelo” comienza con minúscula.

Los argumentos deben empezar con mayúscula.

A estos argumentos denominamos variables.

Page 8: Programación Lógica - uap.edu.pe · 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,

Lógica de la Cláusula Horn Si en lógica escribimos: SI p Y q ENTONCES r.

En Prolog es: r:- p, q.

Cuando las premisas son verdaderas la conclusión también lo es.

La forma general es:

Conclusión:- premisa1, premisa2,…premisaN.

Page 9: Programación Lógica - uap.edu.pe · 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,

Lógica de la Cláusula Horn Resulta difícil establecer al final quién 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).

Page 10: Programación Lógica - uap.edu.pe · 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,

Lógica de la Cláusula Horn En la regla usamos variables en vez de nombres de

objetos.

En Prolog los hechos y las reglas se llaman cláusulas.

Con hechos y reglas estamos listos para formular teorías.

En general una teoría es una colección de hechos y reglas; es decir es un sistema de cláusulas.

Page 11: Programación Lógica - uap.edu.pe · 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,

Lógica de la Cláusula HornUna pequeña teoría:

padre(“Bill”,”John”).

padre(“Pam”,”Bill”).

padre(“Sue”,”Jim”).

abuelo(Nieto, Abuelo):-

padre(Nieto, Padre),

padre(Padre, Abuelo).

Con esta teoría se puede contestar a las siguientes preguntas:

Page 12: Programación Lógica - uap.edu.pe · 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,

Lógica de la Cláusula Horn ¿Jim es padre de Sue?

Esta pregunta puede ser contestada observando los hechos.El tercer hecho reconoce que Jim es 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 Jim es el padre de Sue. Esto implica que John no puede ser el padre de Sue. La inteligencia de los seres humanos notaría 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í".

Page 13: Programación Lógica - uap.edu.pe · 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,

Lógica de la Cláusula Horn ¿Quién 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í".

Page 14: Programación Lógica - uap.edu.pe · 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,

Lógica de la Cláusula 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 Pamy el segundo hecho debe indicar que John es el padre del mismo.

Repasando los hechos se observa que los hechos están diciendo precisamente que tomamos a Bill para algo. En efecto sí, John es el abuelo de Pam.

Page 15: Programación Lógica - uap.edu.pe · 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,

Lógica de la Cláusula HornLas 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 ¿Jim es el padre de Sue?:

?-padre(“Sue", "Jim"). La pregunta ¿John es el padre de Sue?:

?-padre("Sue", "John").

La pregunta ¿Cuál 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").

Page 16: Programación Lógica - uap.edu.pe · 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,

Lógica de la Cláusula Horn A todos, los hechos, reglas y metas se llama las cláusulas Horn,

por lo tanto el nombre de lógica de la cláusula 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 solución como X = "Bill". Algunas metas pueden incluso tener muchas soluciones. Por ejemplo:

?- padre(X, Y). Tiene tres soluciones (hay tres hechos que dan una solución):

X = "Bill", Y = "John".X = "Pam", Y = "Bill".X = "Sue", Y = "Jim".

Page 17: Programación Lógica - uap.edu.pe · 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,

PIE: Motor de Inferencia de Prolog

Ventana de diálogo

Ventana del programa

Page 18: Programación Lógica - uap.edu.pe · 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,

PIE: Motor de Inferencia de Prolog Antes de poder usar el programa, debe instalar y construir

el PIE ejemplo. Si aún no ha instalado los ejemplos, por favor hágalo 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.

Page 19: Programación Lógica - uap.edu.pe · 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,

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 diálogo.

En la ventana del programa escribe los hechos y las reglas de su teoría.

La ventana de diálogo se usa para el diálogo con el motor de inferencia. Aquí escriba las metas para el programa, que son las preguntas que se contestarán. También los mensajes de PIE aparecen en esta ventana.

Es importante tener cuidado de cuál ventana tiene el control (ventana activa). Para dar control a una ventana haga clic en su barra de título.

Agregue en la ventana del programa las cláusulas padre y abuelo (que son los hechos y las reglas) que evaluamos anteriormente.

Page 20: Programación Lógica - uap.edu.pe · 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,

Ventana del Programa

Si todo va bien se mostrará una ventana como ésta

Hechos

Regla

Page 21: Programación Lógica - uap.edu.pe · 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,

PIE: Motor de Inferencia de Prolog Para que el motor de inferencia utilice éstas cláusulas y

ésta regla debemos cargarlo previamente. Mientras la ventana del programa está activa seleccione el menú Engine/Reconsult o también 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

Reconsúltelo con el motor con Engine/Reconsult

Agregue una meta en la ventana de diálogo y presione <enter>

Page 22: Programación Lógica - uap.edu.pe · 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,

PIE: Motor de Inferencia de Prolog Una vez que "haya consultado" la teoría, puede utilizarla

para responder a metas.

En una línea en blanco en la ventana de diálogo digite una meta (sin ?- adelante).

Vamos a hacer la pregunta quién es abuelo de quién. 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 minúscula y las variables en mayúscula "X" y "Y“, no olvide terminarlo en punto.

Page 23: Programación Lógica - uap.edu.pe · 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,

Ejecutando las metas Escribimos la meta como se observa en la figura:

Para consultarlo sitúe el cursor al final del párrafo y presione enter

Meta

Resultado

Page 24: Programación Lógica - uap.edu.pe · 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,

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

número correcto y el tipo correcto. En este caso el tipo es siempre cadena de caracteres, es difícil que se equivoque aquí.

Un argumento puede incorporar el nombre de un objeto específico o puede usar una variable. Los nombres de objetos específicos 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.

Page 25: Programación Lógica - uap.edu.pe · 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,

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 más de un predicado. En ese caso tiene que utilizar los operadores lógicos "," para y o ";" para o. Un ejemplo es la meta

padre("Sue", "Jim"),padre("Bill", "Juan").

Page 26: Programación Lógica - uap.edu.pe · 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,

Ejercicios Hagas las consultas respectivas de la regla del abuelo

tratadas anteriormente al motor de inferencia del prolog.

Establezca metas propias a la teoría redactada.