Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación...

Preview:

Citation preview

Programación Declarativa 1

Programación LógicaCurso 2003-2004

Ingeniería Técnica en Informática de GestiónDepartamento de Lenguajes y

Ciencias de la ComputaciónUniversidad de Málaga

Programación Declarativa 2

Tema ITema I

Principios de la Programación LógicaPrincipios de la Programación Lógica

Programación Declarativa 3

Origen de la Programación Lógica

La lógica de predicados (L.P.) sirve para representar conocimiento.

La L.P. sirve para establecer problemas y representar la información 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 resolución, fácilmente automatizable.

Todas estas ideas se materializan en el lenguaje de programación Prolog (Programación en lógica) diseñado por A. Colmerauer como un demostrador automático de teoremas para cláusulas de Horn.

Programación Declarativa 4

Programa

Los programas se establecen como conjuntos de axiomas (base de conocimiento), expresados mediante cláusulas de Horn, para la definición de predicados entre objetos:

∀X1,...,Xn • (A∨ ¬B1 ∨... ∨ ¬Bk)o

∀X1,...,Xn • (A ⇐ B1 ∧... ∧ Bk)

y una cuestión:

∃X1,...,Xn • (B1 ∧... ∧ Bk)

que debe verificarse con ayuda de los axiomas.

Programación Declarativa 5

Cláusulas de Horn: notación de Kowalski

abuelo(A,N):- padre(A,P),padre(P,N).

padre(juan,ana).

:- abuelo(A,ana).

hecho (sólo cabeza)

regla

cuestión (sólo cuerpo)

cabeza cuello cuerpo

Programación Declarativa 6

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).

Programación Declarativa 7

Ejemplo 1 (reglas)

(Uso de variables lógicas para identificar parámetros 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).

Defínanse las relaciones: madre(Madre,Hijo)hija(Hija,Progenitor)abuelo(Abuelo,Nieto) hermanos(H1,H2)

Programación Declarativa 8

Ejemplo 1 (cuestiones)

Padre de Antonio::- padre(P,antonio).

Abuelo de Luís::- abuelo(A,luis).

Nietos de Andrés::- abuelo(andres,N).

Hermanos de José::- hermanos(jose,H).

Abuela de Luís::- padre(P,luis),procrean(H,M,P).:- madre(M,luis),procrean(H1,M1,M).

Programación Declarativa 9

Ejemplo 2 (Contrucción 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, María padece gripe y Carlos tiene intoxicación.

La fiebre y el cansancio son síntomas de la gripe, el cansancio también es síntoma de la hepatitis y la diarrea es síntoma de intoxicación.

La Aspirina suprime la fiebre y el Lomotil suprime la diarrea.”

Expresad este conocimiento mediante predicados, como una serie de hechos.

Programación Declarativa 10

Ejemplo 2 (continuación)

También sabemos que:

Un fármaco alivia una enfermedad si la enfermedad presenta un síntoma que pueda ser suprimido por el fármaco, y que

una persona debería tomar un fármaco si padece una enfermedad que se pueda ver aliviada por dicho fármaco.”

Expresad este conocimiento mediante predicados, como una serie de reglas.

Enunciad correctamente cuestiones para determinar:¿quién padece gripe?,¿qué padece Pedro?,¿qué síntomas tiene Pedro?,¿quién sufre cansancio?,¿hay algún fármaco que alivie a Pedro?,¿hay algún síntoma que presenten Juan y María?

Programación Declarativa 11

Cálculos: resolución SLD

Los cálculos resultan de las demostraciones de cuestiones a partir de una b.c., por aplicación del principio de resolución SLD.

La resolución SLD (Selective Linear for Definite Clauses) es un procedimiento sistemático de refutación que consiste en añadir la negación de la cuestión:

¬ ∃X1,...,Xn • (B1 ∧... ∧ Bk)o ∀X1,...,Xn • (¬B1 ∨... ∨ ¬Bk)

:- B1,...,Bk. (en notación de Kowalski)a las cláusulas de la b.c., formando el primer resolvente, para tratar de llegar a la cláusula vacía (siempre falsa) mediante una serie de pasos de resolución. (La negación de la cuestión en contradicción con la b.c. implicaque la cuestión es una consecuencia lógica de la b.c.)

Programación Declarativa 12

Paso de resolución (I)

Cada paso de resolución consiste en seleccionar:una relación Bi del resolvente, yuna cláusula 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 cláusula, se sustituye, en el resolvente, Bipor el cuerpo de la cláusula 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.

Programación Declarativa 13

Derivación y espacio de búsqueda

Los pasos de resolución se repiten hasta que se produce un fracaso o desaparecen todas las fórmulas del resolvente.

Cada secuencia de pasos de resolución que termina en un fracaso o en una cláusula vacía es una derivación (que falla o que tiene éxito).

Un programa lógico puede tener muchas derivaciones, incluso derivaciones infinitas.

El conjunto de todas las derivaciones de un programa constituye el espacio de búsqueda asociado al programa.

Programación Declarativa 14

Ejemplo 1 (derivación)

:- 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)

Programación Declarativa 15

Ejemplo 3 (estructuras)

q(p(f(X),Z),h(X)):- r(Z).r(a).r(b).

:-q(p(X,b),Z).:-q(Z,f(a)).

Problemas en la identificación de una fórmula atómica y la cabecera de una cláusula:

Coincidencia de variablesGrado de instanciación

predicados

funciones

Programación Declarativa 16

Algoritmo de unificación (I)

Unificador de dos fórmulas atómicas A1 y A2:sustitución de variables θ = {X1/t1,...,Xn/tn} tal que

A1 θ = A2 θ

Composición de sustituciones θ τ : aplicación 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 composición θ τ de θ = {X/f(Y), Y/Z} y τ = {X/a, Y/b, Z/Y}

Programación Declarativa 17

Algoritmo de unificación (II)

Unificador más general (umg) de dos fórmulas atómicas A1 y A2:

Unificador tal que cualquier otro se puede expresar comocomposición de éste con alguna otra sustitución.

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}

Programación Declarativa 18

Algoritmo de unificación (III)VAR E,F:ForAtómica;

terminar, éxito: BOOLEAN;s, umg: Sustitución;

BEGINIF 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

ENDUNTIL terminar

ELSE éxito := FALSEEND

Programación Declarativa 19

Algoritmo de unificación (IV)

Ejercicios de unificación:

p(f(a), g(X)) p(Y, Y)p(a, X, h(g(Z))) p(Z, h(Y), h(Y))p(X, X) p(Y, f(Y))p(a, f(b)) p(a, X, b)p(a, f(b)) p(a, f(X,Y))

Programación Declarativa 20

Paso de resolución (II)

La presencia de variables repetidas en las fórmulas del resol-vente y en las cláusulas (fórmulas cuantificadas universalmente)y la aparición de estructuras obliga a detallar más cada paso deresolución para evitar errores:

1. Seleccionar una relación Bi del resolvente.2. Seleccionar una cláusula 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 unificación 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 cláusula unificable con Bi, el paso falla.

Programación Declarativa 21

Mecanización de la Resolución (I)

Puntos de indeterminación en los pasos de resolución:

Elección de una fórmula atómica del resolvente.

Elección de una cláusula de la b.c. correspondiente alpredicado de la fórmula atómica elegida.

Cada indeterminación se resuelve aplicando una regla:

Regla de selección de fórmulas o regla de cálculo(No afecta al cálculo de soluciones, sólo al número de pasos)

Regla de selección de cláusulas o regla de búsqueda(Puede afectar al cálculo de soluciones)

Programación Declarativa 22

Resolución: árboles de búsqueda

Fijada la regla de cálculo rc para la resolución SLD, las distintas derivaciones de un programa con una b.c. BC y una cuestión Q se pueden representar como ramas de un árbol con nodos etiquetados con resolventes, del siguiente modo:

la raíz se etiqueta con la cuestión Q;

de cada nodo etiquetado con un resolvente no vacío salen tantos descendientes como cláusulas unificables con la fórmula seleccionada por rc existan en BC;

cada eje corresponde a un paso de resolución aplicado al resolvente del nodo origen, con la fórmula seleccionada por rc, y una cláusula. (Se etiqueta con el umg correspondiente);

cada nodo, distinto de la raíz, se etiqueta con el resolvente que se obtiene al aplicar el paso de resolución correspondiente al eje que viene desde el nodo padre.

Las re

glas d

e búsq

ueda r

eprese

ntan d

istinta

s

formas

de rec

orrido

de los

árbol

es de

búsque

da

Programación Declarativa 23

Construcción de árboles de búsqueda

Rc1: primera fórmula atómica por la izquierda y siguientesRc2: primera fórmula atómica 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.

Programación Declarativa 24

Árbol de búsqueda con variables

p(X,Y):- q(X,Y). :- p(b,Z).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).

Programación Declarativa 25

Backtracking

Una vez automatizada la resolución con una regla de cálculo y una regla de búsqueda, cuando se aplique a un problema sólo se producirá una derivación: la correspondiente a la primera rama del árbol de búsqueda obtenido ordenando las ramas de acuerdo con la regla de búsqueda.

Si queremos producir todas las derivaciones posibles, habrá que complementar la resolución 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 búsqueda, se retrocede hasta el nodo más próximo que tenga alguna rama sin explorar deshaciendo las ligaduras establecidas a partir de dicho nodo.

Este retroceso lo realizan automáticamente los sistemas de P.L. después de una derivación fallida y también a petición del usuario después de una derivación con éxito para buscar más soluciones

Recommended