tema ii el lenguaje lógico prologjmmb/declarativa/apuntespl2004/proglogicaii.pdfprogramación...

42
Programación Declarativa 1 Tema II Tema II El Lenguaje Lógico PROLOG El Lenguaje Lógico PROLOG

Upload: others

Post on 07-May-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 1

Tema IITema II

El Lenguaje Lógico PROLOGEl Lenguaje Lógico PROLOG

Page 2: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 2

Prolog

El paso del modelo teórico de programación lógica a un lenguaje práctico requiere:

La mecanización del método de resolución SLD(reglas de cálculo y de búsqueda y backtracking)

Un tratamiento predefinido para las expresiones aritméticas.(predicados aritméticos extralógicos)

La incorporación de facilidades para la entrada y salida de datos (predicados extralógicos de E/S)

Prolog utiliza la regla de cálculo primero por la izquierda y aplica elorden textual como regla de búsqueda, incorpora backtracking y dispone de predicados extralógicos para cálculos aritméricos y para la gestión de la entrada y salida de datos.

Page 3: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 3

Programación lógica y bases de datos relacionalesLa P. L. se puede utilizar para la representación/interrogación de bases de datos relacionales.

Base de datos relacional: dominios D1, ..., Dn relaciones R ⊆ Di1 × ... × Dip

Dominios en P. L.:predicados monariosestructuras

Relaciones en P. L.: predicadosextensionales (mediante hechos)intensionales (mediante reglas)

Page 4: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 4

Dominios (I)

o Predicados monariosvaron(antonio). hembra(ana).varon(luis). hembra(pepa).varon(jose). hembra(lola).varon(andres). hembra(maria).... ...

o Estructurasnacimiento(juan,fecha(2,nov,1993))....aniversario(P,dia(D,M)):-

nacimiento(N,fecha(D,M,_)).o Combinación de ambas formas (dominios recursivos)

natural(0).natural(s(N)):- natural(N).

Page 5: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 5

Dominios (II)

Los predicados sobre dominios se pueden utilizar:

Para comprobar la pertenencia de un objeto a un dominio::-varon(luis).:-varon(lola)....

Para generar valores del dominio::-varon(X). :-natural(X).X = antonio X = 0X = luis X = s(0)X = jose X = s(s(0))X = andres X = s(s(s(0)))

X = s(s(s(s(0))))...

Page 6: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 6

Relaciones (def. extensional)

Relaciones familiares:% procrean ⊆ Varon × Hembra × Persona

procrean(antonio,ana,jose).procrean(antonio,ana,luis).procrean(antonio,pepa,maria).procrean(andres,lola,antonio)....Agenda:

% anivesario ⊆ Persona × Fechaaniversario(antonio,dia(3,feb)).aniversario(lola,dia(24,nov))....

Page 7: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 7

Relaciones (def. intensional)

% padre ⊆ Varon × Persona padre(P,H):- procrean(P,M,H).

% hijo ⊆ Varon × Persona hijo(H,P):- varon(H),

procrean(P,M,H).hijo(H,M):- varon(H),

procrean(P,M,H).% abuelo ⊆ Varon × Persona

abuelo(A,N):- procrean(A,M,P),procrean(P,M1,N).

abuelo(A,N):- procrean(A,M,M1),procrean(P,M1,N).

Page 8: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 8

Formas de interrogación

:- procrean(antonio,ana,H).:- procrean(antonio,_,H).:- procrean(P,M,maria).

:- aniversario(antonio,D).:- aniversario(P,dia(3,abril)).- aniversario(P,dia(_,abril)).

:- abuelo(andres,N).:- abuelo(A,maria).

Page 9: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 9

Aspectos de la programación PROLOG que se deben controlar

Page 10: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 10

Orden de las reglas

Afecta al orden de las ramas en el árbol de búsqueda.Repercute en:

El orden en que se generan las soluciones.hijo(H,M):- varon(H), procrean(P,M,H).hijo(H,P):- varon(H), procrean(P,M,H). :-hijo(luis,X).

Posibilidad de alcanzar algunas soluciones (ramas infinitas)

antepasado(A,D):- progenitor(A,D). :- antepasado(A,maria).antepasado(A,D):- antepasado(A,P), progenitor(P,D).

antepasado(A,D):- antepasado(A,P), progenitor(P,D).antepasado(A,D):- progenitor(A,D). :- antepasado(A,maria).

Page 11: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 11

Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I)Afecta al número de ramas y a la longitud de las ramas del árbolde búsqueda.Repercute en:

El orden en que se generan las soluciones.El número de cálculos que se deben realizar.La terminación de los cálculos.

hijo(H,P):- procrean(P,M,H), varon(H). :-hijo(H,antonio).hijo(H,M):- procrean(P,M,H),varon(H).

antepasado(A,D):- progenitor(A,D). :- antepasado(A,maria).antepasado(A,D):- progenitor(P,D), antepasado(A,P).

Page 12: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 12

Orden de las fórmulas atómicas en el cuerpo de las cláusulas (II)Los diferentes órdenes de las llamadas a predicados en los cuerpos de las cláusulas representan diferentes formas de buscar soluciones.Afecta al uso de los predicados:

abuelo/a(A,N):- progenitor(A,P), progenitor(P,N).

:-abuelo/a(+,?).

abuelo/a(A,N):- progenitor(P,N), progenitor(A,P).

:-abuelo/a(?,+).

Page 13: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 13

Solapamientos

La posibilidad de aplicar dos reglas a un mismo conjunto de valores repercute en la aparición de soluciones repetidas que afectan a la eficiencia de los cálculos

minimo(X,Y,X):- menorigual(X,Y).minimo(X,Y,Y):- menorigual(Y,X).

:- minimo(3,3,M).

Page 14: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 14

Aplicación al diseño de programas

En los cuerpos de las cláusulas se debe:

Comenzar con fórmulas atómicas que reduzcan el espacio de búsqueda.

Proteger las llamadas recursivas.

Evitar solapamientos

Page 15: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 15

Definición de relaciones conpropiedades particulares

Page 16: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 16

Relaciones reflexivas

Definición: clausura reflexiva de una relación no reflexiva

Sin restricción de tipo:r(a,b)....r(X,X).

Con restricción de tipo:r(a,b)....r(X,X):- t(X).

Ejemplo:mismaEdad(juan,antonio)....mismaEdad(P,P):- persona(P).

Page 17: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 17

Relaciones simétricas

Definición: Clausura simétrica de una relación asimétrica

Divergente:r(a,b)....r(X,Y):- r(Y,X).:-r(a,X).

Convergente:r’(a,b)....r(X,Y):- r’(X,Y).r(X,Y):- r’(Y,X).:-r(a,X).

Ejemplo: Grafo no orientadoarco(a,b). eje(X,Y):-arco(X,Y).... eje(X,Y):-arco(Y,X).

Page 18: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 18

Relaciones transitivas

Definición: Clausura transitiva de una relación intransitiva

Divergente:r(a,b)....r(X,Y):- r(X,Z),

r(Z,Y).:-r(a,X).

Convergente:r’(a,b)....r(X,Y):- r’(X,Y).r(X,Y):- r’(X,Z),

r(Z,Y).:-r(a,X).

Ejemplo: Camino en un grafo orientado

Page 19: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 19

Relaciones de preorden

Clausura reflexiva y transitiva de una relación intransitiva

r’(a,b)....r(X,X).r(X,Y):- r’(X,Z),r(Z,Y).

Ejemplo: relación de conexión en un grafo orientado

Page 20: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 20

Relaciones de equivalencia

Clausura reflexiva y transitiva de la clausura simétrica de una relación asimétrica

r’’(a,b)....r’(X,Y):- r’’(X,Y).r’(X,Y):- r’’(Y,X).r(X,X).r(X,Y):- r’(X,Z),r(Z,Y).

Ejemplo: relación de conexión en un grafo no orientado

Page 21: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 21

Álgebra de relaciones

Page 22: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 22

Unión

Page 23: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 23

Intersección

Page 24: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 24

Producto cartesiano

Page 25: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 25

Diferencia

Page 26: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 26

Proyección

Page 27: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 27

Selección

Page 28: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 28

Programación recursiva:Aritmética del número natural

Page 29: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 29

Dominio de los números naturales

Definición recursiva del dominio:nat = 0 | s(nat)

Representación de los números:0, s(0), s(s(0)), s(s(s(0))), ..., s(...n...(0)...), ...

Definición del dominio mediante predicado:nat(0).nat(s(N)):- nat(N).

Usos del predicado::-nat(s(s(s(0)))). :-nat(s(s(a))).:-nat(N).

Page 30: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 30

Ejercicios

1) Definir el dominio de los números pares: % par(N)

2) Definir el dominio de los números impares: % impar(N)

Page 31: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 31

Suma de números naturales

Definición recursiva: X+0 = XX+s(Y) = s(X+Y)

% suma(X,Y,X+Y)suma(X,0,X):- nat(X).suma(X,s(Y),s(Z)):- suma(X,Y,Z).

Usos del predicado suma: (+,+,-) (-,+,+) (+,-,+) (-,-,+)Para sumar: :-suma(s(s(0)),s(0),X).Para restar: :-suma(X,s(0),s(s(0))).Para descomponer: :-suma(X,Y,s(s(0))).

Page 32: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 32

Suma: flujo de datos

suma(X,0,X):- nat(X). %(+,+,-)suma(X,s(Y),s(Z)):- suma(X,Y,Z).

suma(X,0,X):- nat(X). %(-,+,+)

suma(X,s(Y),s(Z)):- suma(X,Y,Z).

suma(X,0,X):- nat(X). %(-,-,+)

suma(X,s(Y),s(Z)):- suma(X,Y,Z).

Page 33: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 33

Producto de números naturales

Definición recursiva: X*0 = 0X*s(Y) = X*Y + X

% producto(X,Y,X*Y)producto(X,0,0):- nat(X).producto(X,s(Y),Z):- producto(X,Y,P),suma(P,X,Z).

Usos del predicado producto: (+,+,-) (+,-,-) (-,+,-)

Para multiplicar: :- producto(s(s(0)),s(s(0)),P).Para generar múltiplos: :- producto(s(s(0)),Y,P).

:- producto(X,s(s(0)),P).

Page 34: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 34

Ejercicios (Definir y estudiar comportamientos)

1) Predicado para descomponer un número N en suma de dos números pares, cuando sea posible.

2) Predicado para calcular potencias:% N^0 = 1, para N>0% 0^N = 0, para N>0% N^(M+1) = (N^M) * N, para N>0

3) Predicado para calcular factoriales:% 0! = 1% (N+1)! = N! * (N+1)

4) Predicado para generar números de Fibonacci:% f(0) = 1% f(1) = 1% f(N+2) = f(N) + f(N+1)

Page 35: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 35

Ordenación de números naturales(Definir y estudiar comportamientos)% 0 ≤ Y% s(X) ≤ s(Y) X ≤ Y

% 0 < s(Y)% s(X) < s(Y) X < Y

% min(X,Y) = X si X ≤ Y% min(X,Y) = Y si Y< X

% generador acotado de números:% entre(I,J) = K si I ≤ K ≤ J

Page 36: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 36

Cociente de números naturales(Definir y estudiar comportamientos)% Dd = Ds*C + R% Dd/Ds = 0 si Dd < Ds y 0 < Ds% Dd/Ds = s((Dd-Ds)/Ds) si Dd ≥ Ds y 0 < Ds

% Cociente de una división entera% Resto de una división entera% Cociente y resto de una división entera

% Máximo común divisor:% mcd(X,X) = X, si 0 < X% mcd(X,Y) = mcd(X-Y,Y), si 0 < Y < X% mcd(X,Y) = mcd(X,Y-X), si 0 < X < Y

Page 37: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 37

Estrategias de diseño recursivo de predicados

Page 38: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 38

Composición de sustituciones vs. acumulador

suma(N,0,N):- nat(N).suma(N,s(M),s(Z)):- suma(N,M,Z).

:-suma(s(0),s(s(s(0))),Z). Z = s(Z1):-suma(s(0),s(s(0)),Z1). Z1 = s(Z2):-suma(s(0),s(0),Z2). Z2 = s(Z3):-suma(s(0),0,Z3). Z3 = s(0):-nat(s(0))....

Recursión

Cálculo de la solución

Page 39: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 39

Cálculo con acumulador

suma(N,0,N):- nat(N).suma(N,s(M),Z):- suma(s(N),M,Z).

:-suma(s(0),s(s(s(0))),Z).:-suma(s(s(0)),s(s(0)),Z).:-suma(s(s(s(0))),s(0),Z):-suma(s(s(s(s(0)))),0,Z). Z = s(s(s(s(0)))):-nat(s(s(s(s(0)))))....

Recursión

Page 40: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 40

Cálculo descendente vs. ascendente

fac(0,1).fac(s(N),F):- fac(N,F1),

producto(s(N),F1,F).

:-fac(s(s(0)),F).:-fac(s(0),F1),producto(s(s(0)),F1,F).:-fac(0,F2),producto(s(0),F2,F1),producto(s(s(0)),F1,F).:-producto(s(0),s(0),F1),producto(s(s(0)),F1,F).:-producto(s(s(0)),s(0),F).

F = s(s(0))

Page 41: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 41

Cálculo ascendente (con acumuladores)

fac(N,F):-fac(N,s(0),F).fac(0,F,F).fac(s(N),A,F):- producto(s(N),A,A1),fac(N,A1,F).

:-fac(s(s(0)),F).:-fac(s(s(0)),s(0),F).:-producto(s(s(0)),s(0),A1),fac(s(0),A1,F).:-fac(s(0),s(s(0)),F).:-producto(s(0),s(s(0)),A2),fac(0,A2,F).:-fac(0,s(s(0)),F).

F = s(s(0))

Page 42: Tema II El Lenguaje Lógico PROLOGjmmb/declarativa/ApuntesPL2004/ProgLogicaII.pdfProgramación Declarativa 11 Orden de las fórmulas atómicas en el cuerpo de las cláusulas (I) Afecta

Programación Declarativa 42

Ejercicios

Definición del producto con acumulador.

Definición de los números de Fibonacci con cálculodescendente y con cálculo ascendente