25
Programación Declarativa 1 Programación Lógica Curso 2003-2004 Ingeniería Técnica en Informática de Gestión Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga

Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

  • Upload
    haquynh

  • View
    235

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

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

Page 2: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

Programación Declarativa 2

Tema ITema I

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

Page 3: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

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.

Page 4: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

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.

Page 5: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

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

Page 6: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

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

Page 7: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

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)

Page 8: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

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

Page 9: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

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.

Page 10: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

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?

Page 11: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

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

Page 12: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

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.

Page 13: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

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.

Page 14: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

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)

Page 15: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

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

Page 16: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

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}

Page 17: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

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}

Page 18: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

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

Page 19: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

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

Page 20: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

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.

Page 21: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

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)

Page 22: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

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

Page 23: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

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.

Page 24: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

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

Page 25: Programación Lógica - lcc.uma.esjmmb/declarativa/ApuntesPL2004/ProgLogicaI.pdf · Programación Declarativa 3 Origen de la Programación Lógica 9La lógica de predicados (L.P.)

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