0% encontró este documento útil (0 votos)
124 vistas7 páginas

Hechos y Reglas en Prolog para Sistemas Expertos

1) El documento describe hechos y reglas en Prolog, incluyendo la sintaxis de hechos, la estructura de reglas, y ejemplos de representar relaciones familiares y grados de parentesco como hechos y reglas. 2) También explica el uso de conectivas lógicas como conjunción y disyunción, y operadores aritméticos y relacionales predefinidos en Prolog. 3) Además, cubre reglas recursivas y cómo definir casos base y recursivos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
124 vistas7 páginas

Hechos y Reglas en Prolog para Sistemas Expertos

1) El documento describe hechos y reglas en Prolog, incluyendo la sintaxis de hechos, la estructura de reglas, y ejemplos de representar relaciones familiares y grados de parentesco como hechos y reglas. 2) También explica el uso de conectivas lógicas como conjunción y disyunción, y operadores aritméticos y relacionales predefinidos en Prolog. 3) Además, cubre reglas recursivas y cómo definir casos base y recursivos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Sistemas Expertos IS-443

Ingeniería de Sistemas Lab 02

CLAUSULAS DE PROLOG: HECHOS Y REGLAS


2
Laboratorio

HECHOS
Un hecho, en PROLOG, describe una propiedad o una relación entre objetos.
Ejemplo: el diamante es valioso
Hecho: valioso(diamante).
El programador debe definir la interpretación de los objetos y las relaciones entre ellos
Objetos: juan, libro
Relación: tiene(juan, libro)
El orden de la relación es importante

 En general, la sintaxis es relacion(objeto, objeto, ...).


 La relación se conoce como el predicado y los objetos como los argumentos.
 Los nombres de todos los predicados y argumentos deben de comenzar con una letra minúscula.
 Primero, se escribe el predicado. Los argumentos se escriben separándolos mediante comas y
encerrados entre paréntesis.
 Al final del hecho debe ir un punto.

Ejercicio 1: Representa los siguientes hechos en Prolog.


1. A Juan le gusta el dinero.
2. Juan es alto.
3. Juan viaja a Madrid en tren.
4. Juan come chocolate, queso y fruta.
5. España, Francia y Alemania son países
REGLAS
Establecen dependencias entre hechos
Estructura de una regla: Una regla consta de dos partes, una cabeza y un cuerpo. La cabeza y el
cuerpo están unidos mediante el símbolo : −
cabeza :- cuerpo.
El cuerpo puede estar formado por varios hechos.
cabeza :- hecho1, hecho2, ..., hechon.
La separación : − se lee ”si”.( la cabeza es verdad si el cuerpo es verdad.)
Nota: En la cabeza de una regla no puede haber más de un hecho.

Ejercicio 2: Representa las siguientes reglas en Prolog


1. A Juan le gusta todas las cosas que tiene Pedro.
2. Si alguien necesita dinero, Juan se lo regala

EJEMPLO
Tomando como referencia un árbol genealógico se pueden determinar hechos:
%Relaciones
progenitor(clara,jose). %Hecho 1
progenitor(tomas, jose). %Hecho 2
progenitor(tomas,isabel). %Hecho 3
progenitor(jose, ana). %Hecho 4
progenitor(jose, patricia). %Hecho 5
progenitor(patricia,jaime). %Hecho 6

UNSCH/cm Página 1 de 7
Sistemas Expertos IS-443
Ingeniería de Sistemas Lab 02

a. ¿clara es bisabuela de jaime?


?-progenitor(clara,X), progenitor(X,Y), progenitor(Y,jaime).
|
X=jose
Inicialmente analiza el primer objetivo ?-progenitor(clara,X) de la conjunción de objetivos, según el
árbol la variable X será instanciada a jose
?-progenitor(clara,X), progenitor(X,Y), progenitor(Y,jaime).
|
X=jose
?-progenitor(clara,jose), progenitor(jose,Y), progenitor(Y,jaime).
Y=ana *
Dentro de una misma pregunta (conjunción de objetivos), las variables con el mismo nombre se
refieren al mismo objeto, por tanto prolog seguirá comprobando
"progenitor(jose,Y), progenitor(Y,jaime)”. En la base de datos el primer hecho que coincide
para progenitor(jose,Y) es ana, por tanto se instanciará Y= ana y prolog hará una marca de posición
en este punto para ese objetivo.
Ahora se debe comprobar el tercer objetivo con Y=ana. Como en los hechos no existe
que progenitor(ana,jaime). Prolog señala el árbol (en este caso con * ). Y desintancia Y. Sigue
buscando en la base de datos el siguiente hecho para progenitor(jose,Y) desde el punto donde dejó
la marca por tanto Y se instancia a patricia. Ahora debe demostrar que progenitor(jose,patricia).
Como este hecho sí está en la base de datos, X=jose y Y=patricia es una solución a la conjunción
de objetivos y realiza una marca en el árbol (para nosotros $).
RESPONDER
1. Qué representa la consulta: ?-progenitor(jaime,X).
2. Qué representa la consulta: ?-progenitor(X,jaime).
3. Qué pretende buscar La consulta: ?- progenitor(tomas,X), progenitor(X,Y),
progenitor(Y,Z).

Con el árbol genealógico del punto anterior, definir las reglas para determinar la madre y el padre.
/* Equivale a:
Para todo X e Y, si X es mujer y X es el progenitor de Y, entonces X es la madre
de Y */
madre(X,Y):-
mujer(X),
progenitor(X,Y).

/* Equivale a: Para todo X e Y, si X es hombre y X es el progenitor de Y,


entonces X es el padre de Y */
padre(X,Y):-
hombre(X),
progenitor(X,Y).

%Hechos.
mujer(clara).
mujer(isabel).
mujer(ana).
mujer(patricia).
hombre(tomas).
hombre(jose).
hombre(jaime).

UNSCH/cm Página 2 de 7
Sistemas Expertos IS-443
Ingeniería de Sistemas Lab 02

?-madre(X,Y).
Las filas de la tabla de resultados son las relaciones que se forman según el árbol.

 clara es madre de jose


 patricia es madre de jaime

?-padre(X,Y).
Como se puede observar en la tabla anterior, se obtiene el resultado de todas las parejas que se
pueden formar entre padres e hijos según el árbol genealógico.

 tomas es padre de jose


 tomás es padre de isabel
 jose es padre de ana
 jose es padre de patricia

b. Defina las reglas para determinar los abuelos


% El abuelo se define como el progenitor de mi progenitor
abuelo(X,Y):- progenitor(X,Z), progenitor(Z,Y).

Ahora podemos calcular todos los posibles abuelos que se generan a partir del árbol genealógico.
?-abuelo(X,Y).
También se pueden hacer validaciones para verificar si X es abuelo de Y.
Se puede consultar cuál o cuáles son los abuelos de jaime.
Se puede averiguar de quién es abuelo josé.

REGLAS RECURSIVAS
Para hacer uso de reglas recursivas se debe considerar 2 casos:

 Caso básico: Define cuándo se detiene el cálculo.


 Caso recursivo: Suponiendo que ya se ha solucionado un caso más simple, cómo
descomponer el caso actual hasta llegar al caso básico.

Para ilustrar las reglas recursivas, se creará una regla que calcule los predecesores de una persona
según el árbol genealógico usado en el ejemplo.
%El caso base son los padres.
antepasado(X,Y):-
progenitor(X,Y).
%Véase la recursividad
antepasado(X,Y):-
progenitor(X,Z),
antepasado(Z,Y).

Calcularemos todas las posibles relaciones de antepasados que se encuentren en el árbol


?-antepasado(X,Y).
Ahora calcularemos todos los antepasados de Jaime
?-antepasado(X,jaime)

Ejercicio: Construya su árbol genealógico. Implemente las reglas que le permitan conocer los
grados de parentesco: tío, tía, hermano, hermana, primo, prima, sobrino, sobrina.
Agregue otros grados de parentesco que considere conveniente.

UNSCH/cm Página 3 de 7
Sistemas Expertos IS-443
Ingeniería de Sistemas Lab 02

CONECTIVAS LÓGICAS y OPERADORES


3
Laboratorio

1. CONECTIVAS LÓGICAS
Las conectivas que se utilizan en la Lógica de Primer Orden son: conjunción, disyunción, negación e
implicación.
La conjunción, “y”, la representaremos poniendo una coma entre los objetivos “,” y consiste en
objetivos separados que Prolog debe satisfacer, uno después de otro:
X , Y
Cuando se le da a Prolog una secuencia de objetivos separados por comas, intentará satisfacerlos por
orden, buscando objetivos coincidentes en la Base de Datos.
Para que se satisfaga la secuencia se tendrán que satisfacer todos los objetivos.

La disyunción, “o”, tendrá éxito si se cumple alguno de los objetivos que la componen. Se utiliza un
punto y coma “;” colocado entre los objetivos:
X ; Y
La disyunción lógica también la podemos representar mediante un conjunto de sentencias alternativas,
es decir, poniendo cada miembro de la disyunción en una cláusula aparte.

La negación lógica no puede ser representada explícitamente en Prolog, sino que se representa
implícitamente por la falta de aserción : “no”, tendrá éxito si el objetivo X fracasa. No es una
verdadera negación, en el sentido de la Lógica, sino una negación “por fallo”. La representamos con
el predicado predefinido not o con \+:
not(X)
\+ X

2. OPERADORES
En Prolog están predefinidos los operadores aritméticos y relacionales típicos, con la precedencia
habitual entre ellos:

Para poder leer expresiones que contengan operadores necesitamos conocer los siguientes atributos:
* POSICIÓN: Prefijo: el operador va delante de sus argumentos.
Infijo: el operador se escribe entre los argumentos.
Postfijo: el operador se escribe detrás de sus argumentos.
* PRECEDENCIA: Nos indica el orden en que se realizan las operaciones. El operador más
prioritario tendrá una precedencia 1 y el menos, 1201 (depende de la implementación).
*ASOCIATIVIDAD: Sirve para quitar la ambigüedad en las expresiones en las que hay dos
operadores, uno a cada lado del argumento, que tienen la misma precedencia.

UNSCH/cm Página 4 de 7
Sistemas Expertos IS-443
Ingeniería de Sistemas Lab 02

Para la posición-asociatividad utilizamos átomos especiales del tipo:


xfx xfy yfy yfx xf yf fx fy
que nos ayudan a ver el uso del posible operador, representando f al operador, x un argumento
indicando que cualquier operador del argumento debe tener una clase de precedencia estrictamente
menor que este operador, e y un argumento indicando que puede contener operadores de la misma
clase de precedencia o menor.
El operador - declarado como yfx determina que la expresión a - b - c sea interpretada como (a - b) -
c, y no como a - (b - c) ya que la x tras la f exige que el argumento que va tras el primer - contenga un
operador de precedencia estrictamente menor
Al trabajar con expresiones aritméticas y relacionales, los argumentos de estas estructuras deben ser
constantes numéricas o variables instanciadas a constantes numéricas.

2.1 El predicado igual: El predicado igual está predefinido. Cuando se intenta satisfacer X = Y,
Prolog intenta hacer coincidir X e Y, y el objetivo se satisface si ambas coinciden.

/* Programa 2.1 El predicado igual */


%Predicado igualar
asigno_valor(juan)
igualar(X,Y):-X=Y.

?- igualar(X, pedro).
X = pedro

En otros lenguajes de programación la variable siempre tiene que estar a la izquierda del signo igual.
En Prolog no es necesario.

?- igualar(rosa,Y).
Y = rosa.

Las reglas para decidir si X e Y son iguales son las siguientes:

UNSCH/cm Página 5 de 7
Sistemas Expertos IS-443
Ingeniería de Sistemas Lab 02

• Si X e Y están instanciadas al mismo término.


• Si X es una variable no instanciada y si Y está instanciada a cualquier término, entonces X e Y son
iguales. Además, X quedará instanciada a lo que valga Y.
?- asigno_valor(X),igualar(X,Y).
X = Y, Y = juan.
• Si las dos variables no están instanciadas el objetivo se satisface, y las dos variables quedan
compartidas. En este caso, en el momento que una de ellas quede instanciada a un término cualquiera,
la otra queda automáticamente instanciada al mismo término.
?- igualar(X,Y),asigno_valor(X).
X = Y, Y = juan.
Nota: Recordar que una variable solo puede tener un valor durante la ejecución de un objetivo.
?- igualar(X,juan),igualar(X,pedro).
false.

2.2 Aritmética en Prolog. Expresiones como N = N1 − 2 indican relaciones entre objetos. El valor de
una expresión puede ser calculada si todas las variables están instanciadas en el momento de la
evaluación. Si N no está instanciada el predicado igual se cumple y vincula a N el valor de la
expresión de N1−2; N1 debe estar siempre instanciada ya que es parte de una expresión a evaluar.

operar(N):-
Resultado = 10+N,
Suma is 10+N,
write(Resultado),nl,
write(Suma).
.
2.3 Operadores de comparación: Prolog cuenta con una serie de predicados para comparar
expresiones:
< Menor que, > Mayor que, = Igual que, =< Menor o igual que, >= Mayor o igual que, <> No igual a.
Dado que estos operadores de comparación son predicados, se puede pensar que es posible escribir un
hecho en Prolog de la forma 2 > 3. Un hecho como este, está perfectamente construido en Prolog. Sin
embargo, Prolog no permite añadir más hechos a predicados que están predefinidos. Esto evita la
posibilidad de que se pueda cambiar de forma imprevisible el significado de los predicados.

Ejercicio1: Programa que muestra el Resultado del semestre para un alumno, en función al
promedio obtenido y a las reglas propuestas por la Universidad

% Directiva de la universidad
nota(0,7,desaprobado).
nota(8,10,aplazado).
nota(11,20,aprobado).

%Datos de los alumnos


prom_alumno(pedro,12).
prom_alumno(rosa,03).
%Regla
resultado(Alumno,Mensaje):-
prom_alumno(Alumno,Promedio),nota(Min,Max,Mensaje),Min=<Promedio,Promedio<Max.
?- resultado(rosa,Cual).
Cual = desaprobado

UNSCH/cm Página 6 de 7
Sistemas Expertos IS-443
Ingeniería de Sistemas Lab 02

Ejercicio2: Según la Escala Saffir-Simpson es posible determinar la categoría a la que pertenece un


huracán, teniendo en cuenta la velocidad de los vientos.

Categoría de los Huracanes


Categorías Escala Saffir-Simpson
Categoría 1 Vientos entre 118 y 153 Kilómetros por hora
Categoría 2 Vientos entre 154 y 177 Kilómetros por hora
Categoría 3 Vientos entre 178 y 209 Kilómetros por hora
Categoría 4 Vientos entre 210 y 250 Kilómetros por hora.
Categoría 5 Vientos de más de 250 Kilómetros por hora

Escriba un programa que determine a la Categoría que pertenece un huracán teniendo en cuenta la
velocidad de sus vientos

Ejercicio3: Escriba una base de conocimientos que incorpore el predicado le_gusta(X,Y), que indica
que a X le gusta Y, escriba los objetivos que habría que definir en Prolog para contestar las siguientes
preguntas:
- ¿Le gusta algo a Juan?
- ¿Le gustan a Juan las almendras?
- ¿Qué es lo que le gusta a Juan?
Escriba una regla que permita determinar el regalo perfecto para alguien, según aquello que más le
gusta: regalo_perfecto(X,Y)

Ejercicio4: Sea: Diagnóstico de enfermedades


enfermo_de(manuel,gripe).
tiene_sintoma(alicia,cansancio).
sintoma_de(fiebre,gripe).
sintoma_de(tos,gripe).
sintoma_de(cansancio,anemia).
elimina(vitaminas,cansancio).
elimina(aspirinas,fiebre).
elimina(jarabe,tos).
recetar_a(X,Y):-enfermo_de(Y,A),alivia(X,A).
alivia(X,Y):-elimina(X,A),sintoma_de(A,Y).

enfermo_de(X,Y):-tiene_sintoma(X,Z),sintoma_de(Z,Y).

Analice la Base de Conocimientos y responda:


- Cuál es la receta para Manuel?
- Con qué se elimina el cansancio?
- Qué se busca eliminar con las aspirinas?
- De qué está enferma Alicia?
- Cuáles son los síntomas de la gripe?

ADICIONAL: Agregue mayor información a la Base de conocimientos y haga las consultas


correspondientes

UNSCH/cm Página 7 de 7

También podría gustarte