2006 Int Prolog

10
El sistema deductivo de Prolog En esta sección vamos a presentar el procedimiento básico de deducción de Prolog: la re- solución SLD. La presentación la haremos ampliando sucesivamente la potencia expresiva del lenguaje considerado. Deducción Prolog en lógica proposicional En esta sección vamos a estudiar el sistema deductivo de Prolog en el caso de la lógica pro- posicional. Vamos a desarrollar el estudio mediante el siguiente ejemplo. Ejemplo 2.1 [Problema de clasificación de animales] Disponemos de una base de conocimiento com- puesta de reglas sobre clasificación de animales y hechos sobre características de un animal. Regla 1: Si un animal es ungulado y tiene rayas negras, entonces es una cebra.

description

W

Transcript of 2006 Int Prolog

  • El sistema deductivo de PrologEn esta seccin vamos a presentar el procedimiento bsico de deduccin de Prolog: la re

    solucin SLD. La presentacin la haremos ampliando sucesivamente la potencia expresiva del lenguaje considerado.

    Deduccin Prolog en lgica proposicional

    En esta seccin vamos a estudiar el sistema deductivo de Prolog en el caso de la lgica proposicional. Vamos a desarrollar el estudio mediante el siguiente ejemplo.

    Ejemplo 2.1 [Problema de clasificacin de animales] Disponemos de una base de conocimiento compuesta de reglas sobre clasificacin de animales y hechos sobre caractersticas de un animal.

    Regla 1: Si un animal es ungulado y tiene rayas negras, entonces es una cebra.

  • Regla 2: Si un animal rumia y es mamfero, entonces es ungulado.

    Regla 3: Si un animal es mamfero y tiene pezuas, entonces es ungulado.

    Hecho 1: El animal es mamfero.

    Hecho 2: El animal tiene pezuas.

    Hecho 3: El animal tiene rayas negras.

    Demostrar a partir de la base de conocimientos que el animal es una cebra.

    Demostracin: Una forma de demostrarlo es razonando hacia atrs. El problema inicial consiste en demostrar que el animal es una cebra. Por la regla 1, el problema se reduce a demostrar que el animal es ungulado y tiene rayas negras. Por la regla 3, el problema se reduce a demostrar que el animal es mamfero, tiene pezuas y tiene rayas negras. Por el hecho 1, el problema se reduce a demostrar que el animal tiene pezuas y tiene rayas negras. Por el hecho 2, el problema se reduce a demostrar que el animal tiene rayas negras. Que es cierto por el hecho 3.

    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,

    7. cmo se interpreta la respuesta de Prolog,

    8 . cmo ha realizado Prolog la bsqueda de la demostracin,

    9. cul es la demostracin obtenida y

    10 . cmo se corresponde dicha demostracin con la anteriormente presentada.

    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, tiene_rayas_negras y es_cebra. La regla 1 puede representarse como

    Si es_ungulado y tiene_rayas_negras entonces es_cebra Usando las conectivas lgicas la expresin anterior se escribe mediante la frmula

    es_ungulado A tiene_rayas_negras >es_cebra donde A representa la conjuncin y el condicional. La frmula anterior se representa en Prolog, mediante la clusula

    es_cebra es_ungulado, t i en e _ ra y a s_ n e g ra 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

    tiene_rayas_negras.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, anim ales. pl) cada una de las reglas y los hechos 1.

    es_cebra es_ungulado, t i e n e _ray as_n e g ras . 1 Reglaes_ungulado rumia, es_mamfero. l Reglaes_ungulado es_mamfero, t iene_pezuas. 1 Reglaes_mamfero. l Hechotiene_pezuas. % Hecho 2t ien e _ ra y a s_ n e g ra s . 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 (Mult i-threaded, Versin 5 .6 .1 8 )Copyright (c) 1990-2006 Univers ity of Amsterdam.

    ? - [an im ales ] .Yes

    ? - es_cebra.Yes

    La respuesta Yes significa que ha demostrado que el animal es una cebra.Podemos ver cmo Prolog ha obtenido la demostracin mediante el rbol de deduccin en la

    Figura 1.La bsqueda de la prueba es una bsqueda en profundidad en un espacio de estados, donde

    cada estado es una pila de problemas por resolver. En nuestro ejemplo, el estado inicial consta de un nico problema (es_cebra). Buscamos en la base de hechos una clusula cuya cabeza coincida con el primer problema de la pila, encontrando slo la regla 1. Sustituimos el problema por el cuerpo de la regla, dando lugar a la pila es_ungulado, tiene_rayas_negras. Para el primer problema tenemos dos reglas cuyas cabezas coinciden (las reglas 2 y 3). Consideramos en primer lugar la regla 2, produciendo la pila de problemas rumia, esjmamfero, tiene_rayas_negras. El primer problema no coincide con la cabeza de ninguna clusula. Se produce un fallo y se reconsidera la eleccin anterior. Consideramos ahora la clusula 3, produciendo la pila de problemas es_mamif e r o , t iene_pezuas , t i en e _ray as_n e g ras . Cada uno de los problemas restantes coincide con uno de los hechos, con lo que obtenemos una solucin del problema inicial.

    1En SWI Prolog, para que no d error en los predicados no definidos, hay que aadirle al fichero con la base de conocimiento la lnea

    set_proIog_flag(unknown,fail).

  • ExitoFigura 1: rbol de deduccin del problema de los animales

  • 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_ungulado, tiene_rayas_negras.

    es_mamifero, tiene_pezuas, tiene_rayas_negras.

    es_cebraes_ungulado, tiene_rayas_negras.

    es_ungulado :- es_mamifero, tiene_pezuas.

    es mamfero.

    tiene_pezuas, tiene_rayas_negras.

    tiene_pezuas

    :- tiene_rayas_negras.

    L^tiene_rayas_negras,

    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 es_ung'iilado A tiene_rayas_negras > es_cebra Regla 12 rumia A es_mamfero >es_ungulado Regla 23 es_mamfero A tien e ..pezuas >es_ungulado Regla 34 es_mamfero Hecho 15 tiene_pezuas Hecho 26 tiene_rayas_negras Hecho 37 es_mamfero A tien e ..pezuas Ia 4 y 68 es_ungulado E _ 3 y 79 es_ungulado A tiene_rayas_negras Ia 8 y 65 es_cebra E _ 1 y 9

    Deduccin Prolog en lgica relacional

    En esta seccin vamos a ampliar la presentacin del sistema deductivo de Prolog a la lgica relacional (con variables, cuantificadores, constantes y smbolos de relacin). A lo largo de la seccin se mostrar el uso de la unificacin.

  • La presentacin se basar en la siguiente base de conocimientos:

    Hechos:

    6 y 12 son divisibles por 2 y por 3.

    4 es divisible por 2.

    Regla: Los nmeros divisibles por 2 y por 3 son divisibles por 6 .

    Para representar la base de conocimiento usaremos las constantes 2, 3, 6 y 12 y el predicado binario divide (X, Y) que se verifica si X divide a Y. Los hechos se representan mediante 4 clusulas unitarias. La regla, se puede expresar como para todo X: si X es divisible por 2 y X es divisible por 3, entonces X es divisible por 6. La representacin lgica de la regla es

    (VX)[divide(2,X) A divide(3,X) > divide(6,X )] y su representacin Prolog es

    divide(6 ,X ) d iv id e ( 2 ,X ) , d iv id e (3 ,X ) . en la que observamos que aparece la variable X (en Prolog se consideran variables las palabras que empiezan por mayscula) y que est universalmente cuantificada de manera implcita. La representacin en Prolog de la base de conocimientos es

    d i v i d e ( 2 , 6 ) . 1 Hechod i v i d e ( 2 , 4 ) . l Hechod i v i d e ( 2 , 12). l Hechod i v i d e ( 3 , 6 ) . l Hechod i v i d e ( 3 , 12). l Hechodiv ide(6 ,X ) d iv id e ( 2 ,X ) , d iv id e (3 ,X ) . % Regla

    Usando la base de conocimiento podemos determinar los nmeros divisibles por 6 como se muestra a continuacin

    ? - d i v i d 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 objetivos 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 sustitucin 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

    Figura 3: rbol SLD del problema de divisibilidad

    Deduccin Prolog en lgica funcional

    En esta seccin volvemos a ampliar la presentacin del sistema deductivo de Prolog al caso de la lgica funcional (con smbolos de funcin). Adems, presentaremos el primer ejemplo de definicin recursiva y detallaremos el clculo de unificadores.

    Los nmeros naturales se pueden representar mediante una constante 0 y un smbolo de funcin unitaria s que representan el cero y el sucesor respectivamente. De esta forma, 0, s ( 0 ) ,s (s ( 0 ) ) , __ representan a los nmeros naturales 0 , 1 , 2 , . . . . Vamos a definir la relacin suma(X, Y, Z)que se verifica si Z es la suma de los nmeros naturales X e Y con la anterior notacin. La definicin, por recursin en el primer argumento, se basa en las identidades

    0 + Y = Y s(X) + Y = s(X+Y)

    que se traduce en las frmulas

    (VY) [suma(0, Y, Y)](VX, Y, Z)[sum a(X, Y, Z) sum a(s(X), Y,s(Z))]

    y stas en el programa Prolog

    suma( 0 , Y , Y ) . 1 R1suma(s(X), Y , s ( Z ) ) suma(X,Y,Z). 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

    ? - suma(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)))

    Figura 4: rbol SLD del problema de la suma

    cin de variables, las unificaciones y el clculo de la respuesta. Para evitar conflicto con las variables, se cambia de nombre aadiendo el ndice 0 a las del objetivo inicial y para las clusulas del programa se aade como ndice el nivel del rbol. El nodo inicial slo tiene un sucesor con la regla 2, porque es la cabeza de la nica regla con la que unifica; efectivamente el tomo suma(s(0) , s ( s ( 0 ) ) ,X0) no es unificable con suma(0,Yl,Y1) porque los primeros argumentos son tomos sin variables distintos y s es unificable con suma(s (XI) , Y l , s ( Z l ) ) mediante la sustitucin {Xl/0, Yl/s ( s ( 0 ) ) , XO/s (Zl )> que aplicada a ambos tomos da el tomo suma(s( 0 ) , s (s ( 0 ) ) , s ( Z l ) ). Lo mismo sucede con el segundo nodo. Finalmente, la respuesta se calcula componiendo las sustituciones realizadas en la rama de xito a las variables iniciales: X se sustituye inicialmente por XO, en el primer paso se sustituye XO por s (Zl) y en el segundo se sustituye Zl por s (s (0) ) con lo que el valor por el que sustituye X es s (s (s ( 0 ) ) ) .

    La segunda cuestin es cmo calcular la resta d e s ( s ( s ( 0 ) ) ) y s ( s ( 0 ) ) . Para ello no es necesario hacer un nuevo programa, basta con observar que X = a b ^ X + a = b y plantear la pregunta

    ? - su m a(X ,s (s (0 ) ) , s ( s ( s ( 0 ) ) ) ) .X = s (0) ;No

    El rbol de deduccin correspondiente se muestra en la Figura 5 en el que se observa que al intentar obtener una segunda respuesta se produce una rama de fallo, ya que el ltimo objetivo de la segunda rama no es unificable con la cabeza de la primera clusula (porque el segundo y tercer argumentos del objetivo son trminos sin variables distintos) ni con la de la segunda (porque los terceros argumentos son trminos sin variables distintos).

    La tercera cuestin es descomponer el nmero 2 en suma de dos nmeros naturales; es decir resolver la ecuacin X + Y = 2. Tampoco para este problema se necesita un nuevo programa, basta realizar la siguiente consulta

    ? - su m a(X ,Y ,s ( s (0 ) )) .X = 0Y = s (s (0 ) ) ;

  • suma(X3 ,s ( s (0 )),0 ) Fallo

    Figura 5: rbol SLD del problema de la resta

    X = s(0)Y = s (0) ;X = s ( s ( 0 ) )Y = 0 ;No

    con la que se obtienen las tres soluciones 2 = 0 + 2 = l + l = 2 + 0. El rbol de deduccin correspondiente se muestra en la Figura 6 . Vamos a comentar la unificacin de la primera resolucin. Los tomos a unificar son

    t\ = suma(X0,Y0, s ( s ( 0 ) ) ) y 2 = suma(0,Y1 ,Y1).Para unificar los primeros argumentos necesitamos la sustitucin

  • X=s(s(0))Y=0

    Figura 6 : rbol SLD del problema de la descomposicin en suma dos elementos

    X = 0Y = 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 ) .