Sunteți pe pagina 1din 25

Programacin Lgica

Curso 2003-2004

Ingeniera Tcnica en Informtica de Gestin Departamento de Lenguajes y Ciencias de la Computacin Universidad de Mlaga

Programacin Declarativa

Tema I

Principios de la Programacin Lgica

Programacin Declarativa

Origen de la Programacin Lgica


La lgica de predicados (L.P.) sirve para representar conocimiento. La L.P. sirve para establecer problemas y representar la informacin necesaria para resolverlos de manera efectiva. La forma clausal de la L.P. Admite un sistema de inferencia consistente y completo con una sola regla: el principio de resolucin, fcilmente automatizable. Todas estas ideas se materializan en el lenguaje de programacin Prolog (Programacin en lgica) diseado por A. Colmerauer como un demostrador automtico de teoremas para clusulas de Horn.

Programacin Declarativa

Programa
Los programas se establecen como conjuntos de axiomas (base de conocimiento), expresados mediante clusulas de Horn, para la definicin de predicados entre objetos: X1,...,Xn (A B1 ... Bk) o X1,...,Xn (A B1 ... Bk) y una cuestin: X1,...,Xn (B1 ... Bk) que debe verificarse con ayuda de los axiomas.
Programacin Declarativa 4

Clusulas de Horn: notacin de Kowalski

abuelo(A,N):- padre(A,P),padre(P,N).
cabeza cuello cuerpo

regla

padre(juan,ana). :- abuelo(A,ana).

hecho (slo cabeza) cuestin (slo cuerpo)


Programacin Declarativa 5

Ejemplo 1 (hechos)
Base de conocimientos de relaciones familiares: % varon(V) % hembra(H) varon(antonio). hembra(ana). varon(luis). hembra(pepa). varon(jose). hembra(lola). varon(andres). hembra(maria). ... ... % procrean(Padre,Madre,Hijo/a) procrean(antonio,ana,jose). procrean(antonio,ana,luis). procrean(antonio,pepa,maria). procrean(andres,lola,antonio).
Programacin Declarativa 6

Ejemplo 1 (reglas)
(Uso de variables lgicas para identificar parmetros comunes) % padre(Padre,Hijo) padre(P,H):- procrean(P,M,H). % hijo(Hijo,Progenitor) hijo(H,P):- varon(H), procrean(P,M,H). hijo(H,M):- varon(H), procrean(P,M,H). Defnanse las relaciones: madre(Madre,Hijo) hija(Hija,Progenitor) abuelo(Abuelo,Nieto) hermanos(H1,H2)
Programacin Declarativa 7

Ejemplo 1 (cuestiones)
Padre de Antonio: :- padre(P,antonio). Abuelo de Lus: :- abuelo(A,luis). Nietos de Andrs: :- abuelo(andres,N). Hermanos de Jos: :- hermanos(jose,H). Abuela de Lus: :- padre(P,luis),procrean(H,M,P). :- madre(M,luis),procrean(H1,M1,M).
Programacin Declarativa 8

Ejemplo 2 (Contruccin de una b.c.)


Tenemos el siguiente conocimiento directo sobre un grupo de personas que padecen ciertas enfermedades:

Pedro padece gripe y hepatitis, Juan padece hepatitis, Mara padece gripe y Carlos tiene intoxicacin. La fiebre y el cansancio son sntomas de la gripe, el cansancio tambin es sntoma de la hepatitis y la diarrea es sntoma de intoxicacin. La Aspirina suprime la fiebre y el Lomotil suprime la diarrea.
Expresad este conocimiento mediante predicados, como una serie de hechos.
Programacin Declarativa 9

Ejemplo 2 (continuacin)
Tambin sabemos que:

Un frmaco alivia una enfermedad si la enfermedad presenta un sntoma que pueda ser suprimido por el frmaco, y que una persona debera tomar un frmaco si padece una enfermedad que se pueda ver aliviada por dicho frmaco.
Expresad este conocimiento mediante predicados, como una serie de reglas. Enunciad correctamente cuestiones para determinar: quin padece gripe?, qu padece Pedro?, qu sntomas tiene Pedro?, quin sufre cansancio?, hay algn frmaco que alivie a Pedro?, hay algn sntoma que presenten Juan y Mara?
Programacin Declarativa 10

Clculos: resolucin SLD


Los clculos resultan de las demostraciones de cuestiones a partir de una b.c., por aplicacin del principio de resolucin SLD. La resolucin SLD (Selective Linear for Definite Clauses) es un procedimiento sistemtico de refutacin que consiste en aadir la negacin de la cuestin: X1,...,Xn (B1 ... Bk) o X1,...,Xn (B1 ... Bk) :- B1,...,Bk. (en notacin de Kowalski) a las clusulas de la b.c., formando el primer resolvente, para tratar de llegar a la clusula vaca (siempre falsa) mediante una serie de pasos de resolucin. (La negacin de la cuestin en contradiccin con la b.c. implica que la cuestin es una consecuencia lgica de la b.c.)
Programacin Declarativa 11

Paso de resolucin (I)


Cada paso de resolucin consiste en seleccionar: una relacin Bi del resolvente, y una clusula C de la b.c. correspondiente al mismo predicado cuya cabeza se pueda hacer coincidir con Bi, posiblemente dando valores a algunas variables. Si se encuentra tal clusula, se sustituye, en el resolvente, Bi por el cuerpo de la clusula C y se aplican las sustituciones de variables que hayan sido necesarias en el punto anterior para obtener un nuevo resolvente. Si no se encuentra, el paso falla.

Programacin Declarativa

12

Derivacin y espacio de bsqueda


Los pasos de resolucin se repiten hasta que se produce un fracaso o desaparecen todas las frmulas del resolvente. Cada secuencia de pasos de resolucin que termina en un fracaso o en una clusula vaca es una derivacin (que falla o que tiene xito). Un programa lgico puede tener muchas derivaciones, incluso derivaciones infinitas. El conjunto de todas las derivaciones de un programa constituye el espacio de bsqueda asociado al programa.
Programacin Declarativa 13

Ejemplo 1 (derivacin)
:- padre(P,luis),procrean(H,M,P). :- procrean(P,M1,luis),procrean(H,M,P). {P/antonio, M1/ana} :- procrean(H,M,antonio). {H/andres, M/lola}

(xito)

Programacin Declarativa

14

Ejemplo 3 (estructuras)
predicados q(p(f(X),Z),h(X)):- r(Z). r(a). r(b). funciones :-q(p(X,b),Z). :-q(Z,f(a)). Problemas en la identificacin de una frmula atmica y la cabecera de una clusula: Coincidencia de variables Grado de instanciacin
Programacin Declarativa 15

Algoritmo de unificacin (I)


Unificador de dos frmulas atmicas A1 y A2: sustitucin de variables = {X1/t1,...,Xn/tn} tal que A1 = A2 Composicin de sustituciones : aplicacin de seguida de = {V1/t1,...,Vp/tp} = {U1/s1,...,Uq/sq} Se obtiene a partir de {V1/t1 ,..., Vp/tp , U1/s1,...,Uq/sq} eliminando las ligaduras Vi/ti tales que Vi = ti y Ui/si para variables Ui que coincidan con alguna Vj Ejercicio: Calcular la composicin de = {X/f(Y), Y/Z} y = {X/a, Y/b, Z/Y}
Programacin Declarativa 16

Algoritmo de unificacin (II)


Unificador ms general (umg) de dos frmulas atmicas A1 y A2: Unificador tal que cualquier otro se puede expresar como composicin de ste con alguna otra sustitucin. En general puede no ser nico. Ejemplo: A1 = p(f(X),Z) A2 = p(f(Y),V) umg(A1,A2) son = {X/Y, Z/V} y = {Y/X, Z/V} pues = {X/Y} y = {Y/X}

Programacin Declarativa

17

Algoritmo de unificacin (III)


VAR E,F:ForAtmica; terminar, xito: BOOLEAN; s, umg: Sustitucin;

BEGIN IF predicadoDe(E) = predicadoDe(F) THEN s:={}; terminar:=FALSE; REPEAT IF E.s = F.s THEN umg:=s; xito:=TRUE; terminar:=TRUE ELSE pParDiscordancia(E.s,F.s,t1,t2); IF esVar(t1) AND noContenido(t1,t2) THEN s:=s.{t1/t2} ELSIF esVar(t2) AND noContenido(t2,t1) THEN s:=s.{t2/t1} ELSE xito:=FALSE; terminar:=TRUE END END UNTIL terminar ELSE xito := FALSE END
Programacin Declarativa 18

Algoritmo de unificacin (IV)


Ejercicios de unificacin: p(f(a), g(X)) p(a, X, h(g(Z))) p(X, X) p(a, f(b)) p(a, f(b)) p(Y, Y) p(Z, h(Y), h(Y)) p(Y, f(Y)) p(a, X, b) p(a, f(X,Y))

Programacin Declarativa

19

Paso de resolucin (II)


La presencia de variables repetidas en las frmulas del resolvente y en las clusulas (frmulas cuantificadas universalmente) y la aparicin de estructuras obliga a detallar ms cada paso de resolucin para evitar errores: 1. Seleccionar una relacin Bi del resolvente. 2. Seleccionar una clusula C de la b.c. correspondiente al mismo predicado definido en Bi. 3. Redenominar las variables de C, para que no coincidan con las variables que aparecen en el resolvente. 4. Unificar Bi con la cabecera de C redenominada. 5. Si la unificacin tiene xito, con umg , sustituir Bi en el resolvente por el cuerpo de C redenominada y aplicar para obtener un nuevo resolvente. 6. Si no se encuentra ninguna clusula unificable con Bi, el paso falla. Programacin Declarativa 20

Mecanizacin de la Resolucin (I)


Puntos de indeterminacin en los pasos de resolucin: Eleccin de una frmula atmica del resolvente. Eleccin de una clusula de la b.c. correspondiente al predicado de la frmula atmica elegida.

Cada indeterminacin se resuelve aplicando una regla: Regla de seleccin de frmulas o regla de clculo (No afecta al clculo de soluciones, slo al nmero de pasos) Regla de seleccin de clusulas o regla de bsqueda (Puede afectar al clculo de soluciones)
Programacin Declarativa 21

Resolucin: rboles de bsqueda


Fijada la regla de clculo rc para la resolucin SLD, las distintas derivaciones de un programa con una b.c. BC y una cuestin Q se pueden representar como ramas de un rbol con nodos s ta etiquetados con resolventes, del siguiente modo:eda t i n qu dis bs la raz se etiqueta con la cuestin Q;n e a nt s d e de cada nodo etiquetado cones bolresolvente no vaco salen un e r ep r unificables con la frmula r tantos descendientes comoaclusulas s ed e o seleccionada por rc existan en lBC; u sq o d b r cada eje correspondeida un paso de resolucin aplicado al de cor resolvente del lnodo e as r origen, con la frmula seleccionada por rc, y g una clusula. e detiqueta con el umg correspondiente); r (Se e s s La rma cada nodo, distinto de la raz, se etiqueta con el resolvente fo que se obtiene al aplicar el paso de resolucin correspondiente al eje que viene desde el nodo padre.
Programacin Declarativa 22

Construccin de rboles de bsqueda


Rc1: primera frmula atmica por la izquierda y siguientes Rc2: primera frmula atmica por la derecha y siguientes Programa1: a:- b,c,d. a:- e,f. a:- f. b:- f. e. f. :- a,e. Programa2: a:- b,c,d. a:- e,f. a:- f,a. b:- f. e. f. :- a,e.

Programacin Declarativa

23

rbol de bsqueda con variables


p(X,Y):- q(X,Y). p(X,Y):- q(a,X). q(a,a). q(X,a):- r(Y),s(X,Y). q(X,Y):- r(X),p(X,Y). s(b,b). s(b,X):- r(X). r(b). r(a). :- p(b,Z).

Programacin Declarativa

24

Backtracking
Una vez automatizada la resolucin con una regla de clculo y una regla de bsqueda, cuando se aplique a un problema slo se producir una derivacin: la correspondiente a la primera rama del rbol de bsqueda obtenido ordenando las ramas de acuerdo con la regla de bsqueda. Si queremos producir todas las derivaciones posibles, habr que complementar la resolucin con una mecanismo que permita recorrer, en orden, todas las ramas del rbol. Normalmente se utiliza el siguiente mecanismo de backtracking: Cuando se alcanza un nodo terminal del rbol de bsqueda, se retrocede hasta el nodo ms prximo que tenga alguna rama sin explorar deshaciendo las ligaduras establecidas a partir de dicho nodo. Este retroceso lo realizan automticamente los sistemas de P.L. despus de una derivacin fallida y tambin a peticin del usuario despus de una derivacin con xito para buscar ms soluciones
Programacin Declarativa 25