Académique Documents
Professionnel Documents
Culture Documents
Para resolver el problema anterior con Prolog vamos a considerar las siguientes cuestiones:
1. cmo se representan en Prolog las reglas,
2. cmo se representan en Prolog los hechos,
3. cmo se representan en Prolog las bases de conocimientos,
4. cmo se inicia una sesin Prolog,
5. cmo se carga en Prolog la base de conocimiento,
6 . cmo se representa en Prolog el objetivo a demostrar,
Para representar una regla, se empieza por elegir los smbolos para los tomos que aparecen
en la regla. Para la regla 1, podemos elegir los smbolos es_ungulado, tien e_rayas_n egras y
es_cebra. La regla 1 puede representarse como
Si es_ungulado y tiene_rayas_n egras entonces es_cebra
Usando las conectivas lgicas la expresin anterior se escribe mediante la frmula
es_ungulado A tien e_rayas_n egras >es_cebra
donde A representa la conjuncin y el condicional. La frmula anterior se representa en Prolog,
mediante la clusula
e s _c eb r a
es_ungulado, t i e n e _ r a y a s _ n e g r a s .
Se puede observar que la transformacin ha consistido en invertir el sentido de la escritura y
sustituir las conectivas por
(condicional inversa) y , (conjuncin). El tomo a la izquierda de
: - se llama la cabeza y los tomos a la derecha se llama el cuerpo de la regla.
Para representar los hechos basta elegir los smbolos de los tomos. Por ejemplo, el hecho 2
se representa en Prolog por
tien e _ ra y a s_ n e g ra s.
es decir, el smbolo del tomo terminado en un punto. Los hechos pueden verse como clusulas
con el cuerpo vaco.
Para representar la base de conocimiento en Prolog, se escribe en un fichero (por ejemplo,
an im ales. p l) cada una de las reglas y los hechos 1.
e s _c eb r a
es_ungulado, t i e n e _ r a y a s _ n e g r a s .
es_ungulado
rumia, es_mamfero.
es_ungulado
es_mamfero, t i e n e _ p e z u a s .
es_mamfero.
tiene_pezuas.
tiene_rayas_negras.
1 Regla
l Regla
1 Regla
l Hecho
% Hecho 2
l Hecho 3
Al lado de cada regla y de cada hecho se ha escrito un comentario (desde % hasta el final de la
lnea).
Para iniciar una sesin de Prolog (con SWI Prolog) se usa la orden p l . La base de conocimiento
se carga en la sesin Prolog escribiendo el nombre entre corchetes y terminado en un punto. La
pregunta se plantea escribiendo el tomo y un punto.
Welcome to SWI-Prolog (M ult i-t hr ead ed , Versin 5 . 6 . 1 8 )
Copyright (c) 1990-2006 U n iv e r s it y of Amsterdam.
?- [anim ales].
Yes
? - e s_ ceb ra .
Yes
Exito
Podemos observar que el rbol tiene dos ramas: una rama de fallo (su hoja es no vaca y su
primer tomo no coincide con la cabeza de ninguna regla) y una rama de xito (su hoja es vaca).
A partir de la rama de xito podemos extraer la demostracin (por resolucin SLD) que se
muestra en la Figura 2 (pgina 8 ).
es cebra.
es_cebra
es_ungulado,
tiene_rayas_negras.
es_ungulado,
tiene_rayas_negras.
es_ungulado :es_mamifero,
tiene_pezuas.
es_mamifero,
tiene_pezuas,
tiene_rayas_negras.
es mamfero.
tiene_pezuas,
tiene_rayas_negras.
tiene_pezuas
:- tiene_rayas_negras.
^tiene_rayas_negras,
L
Figura 2: Demostracin SLD del problema de los animales
Leda en sentido contrario, y con notacin lgica, se obtiene la siguiente demostracin por
deduccin natural
1
2
3
4
5
6
7
8
9
5
Regla 1
Regla 2
Regla 3
Hecho 1
Hecho 2
Hecho 3
Ia 4 y 6
E_ 3 y 7
Ia 8 y 6
E_ 1 y 9
divide(2,X ), divide(3,X ).
1 Hecho
l Hecho
l Hecho
l Hecho
l Hecho
% Regla
Usando la base de conocimiento podemos determinar los nmeros divisibles por 6 como se
muestra a continuacin
?- div id e(6,X ).
X = 6 ;
X = 12 ;
No
Despus de obtener la primera respuesta se determina otra pulsando punto y coma. Cuando se
intenta buscar otra responde No que significa que no hay ms respuestas.
El rbol de deduccin correspondiente a la sesin anterior se muestra en la Figura 3 (pgina
10). Podemos observar en el rbol dos ramas de xito y una de fallo. Adems, el paso entre obje
tivos se ha ampliado: no se exige que el primer objetivo sea igual que la cabeza de una clusula,
sino que sea unificable (es decir, que exista una sustitucin que los haga iguales); por ejemplo, en
el segundo paso el objetivo divide ( 2, X) se unifica con el hecho divide ( 2 , 6 ) mediante la sustitu
cin de X por 6 (representada por {X/6}). Componiendo las sustituciones usadas en una rama de
xito se obtiene la respuesta.
R e s p u e s t a X=6
R e s p u e s t a X=12
suma(X,Y,Z).
1 R1
1 R2
Vamos a usar el programa para responder a distintas siguientes cuestiones y explicar cmo
se obtienen las respuestas.
La primera cuestin consiste en calcular la suma d e s ( 0 ) y s ( s ( 0 ) ) . L a forma de plantear la
cuestin en Prolog y la respuesta obtenida es
? - s u ma ( s ( 0 ) , s ( s ( 0 ) ) ,X) .
X = s(s(s(0)))
Yes
El rbol de deduccin se muestra en la Figura 4 (11). Del rbol vamos a comentar la separa-
Resp.: X = XO = s(zi)
= s(s(s(0)))
s u m a ( X 3 ,s ( s (0 )), 0 )
Fallo
No
=
=
=
=
s( 0)
s (0) ;
s(s(0))
0 ;
1+x = y
x+y= 1
En este caso basta plantear una pregunta compuesta
? - suma(s( 0 ) , X , Y ) , suma (X, Y,s( 0))
X=s(s(0))
Y=0
Figura 6 : rbol SLD del problema de la descomposicin en suma dos elementos
X = 0
Y = s (0) ;
No
El rbol de deduccin correspondiente se muestra en la Figura 7. En este ejemplo se observa que
el unificador del primer objetivo y la cabeza de la clusula se le aplica a los restantes objetivos: en
el primer paso se ha sustituido la variable YO del segundo objetivo por s ( Z l ) .