Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Indice
1- Introduccin 2- Definicin de predicados y mecanismos operacionales 3- Usos procedimentales 4.1- El corte: 4.1- Porqu un predicado de corte? 4.2- Cmo opera el predicado de corte? 4.3- Funcin del predicado de corte 4.4- Cortes verdes y rojos 4.5- Ejemplos de particular inters 5- Ventajas del Prolog 6- Resumen del captulo
2
1- Introduccin
El objetivo de este tema NO es la enseanza de un lenguaje de programacin sino.... 1) Ilustrar el paradigma de computacin lgica 2) Mostrar cmo los lenguajes reales se apartan del ideal de la programacin lgica por motivos de eficiencia
Un algoritmo consta de una componente lgica o declarativa y una componente de control Un axioma puede interpretarse como la componente declarativa de un programa: - sus soluciones son las sustituciones bajo las que se satisface el axioma - su componente de control es un mtodo deductivo
5
En el paradigma de programacin lgica el programador declara un conjunto de axiomas y se despreocupa de la componente de control, que implementa un mtodo deductivo genrico: Las clusulas Horn son sistemas de axiomas donde es aplicable el potente mtodo de deduccin, consistente y completo, SLD El mtodo SLD es la base de la semntica operacional de loslenguajes lgicos y, en particular, del difundido lenguaje Prolog 6
El lenguaje Prolog es el primer y ms difundido lenguaje de programacin lgica. Un programa Prolog Declara conocimiento sobre un problema en trminos de clusulas de Horn Se ejecuta mediante un intrprete que deduce las soluciones aplicando el mtodo de resolucin SLD
Sugerencia:
Consulta documentacin adicional sobre la historia del lenguaje Prolog
7
Reflexiona sobre la definicin recursiva de predicados en Prolog 2) Las clusulas ms generales son recursivas: el predicado
definido (cabeza) aparece en la definicin (cuerpo)
R1: R2: R3: R5: R7: R9: q(X,Y):- p(X,Y). q(X,Y):- p(X,Z), q(Z,Y). p(B,A). R4: p(F,B). p(C,A). R6: p(H,G). p(D,B). R8: p(I,H). p(E,B). R10: p(J,H).
11
R1: conectado(Nodo1,Nodo2):-arco(Nodo1,Nodo2). R2: conectado(Nodo1,Nodo2):-arco(Nodo1,Enlace), conectado(Enlace,Nodo2). R3: arco(B,A). R4: arco(F,B). R5: arco(C,A). R6: arco(H,G). R7: arco(D,B). R8: arco(I,H). R9: arco(E,B). R10: arco(J,H).
12
Se denominan preguntas Prolog los objetivos sometidos a un intrprete Prolog con el fin de comprobar su satisfacibilidad y/o computar las correspondientes respuestas.
14
Un motor de inferencia Prolog computa respuestas aplicando resolucin SLD al sistema de clusulas contenido en su base de datos utilizando... como regla de computacin: la seleccin del literal situado ms a la izqd. en la clusula objetivo como regla de bsqueda: la seleccin de la clusula situada ms arriba en la lista de clusulas de cada procedimiento
15
Veamos cmo evala Prolog el objetivo: conectado( Y,b), conectado( b,Z) Recuerda el sistema de reglas Prolog...
R1: conectado(Nodo1,Nodo2):-arco(Nodo1,Nodo2). R2: conectado(Nodo1,Nodo2):-arco(Nodo1,Enlace), conectado(Enlace,Nodo2). R3: arco(B,A). R4: arco(F,B). R5: arco(C,A). R6: arco(H,G). R7: arco(D,B). R8: arco(I,H). R9: arco(E,B). R10: arco(J,H).
17
R1:conectado(Nodo1,Nodo2) :- arco(Nodo1,Nodo2).
18
Yd
conectado (b,Z)
19
b,Z)
b,Z) Y d
conectado (b,Z)
R1: conectado(Nodo1,Nodo2):- arco(Nodo1,Nodo2).
arco (b,Z)
20
b,Z)
b,Z) Y d
arco (b,Z)
R3: arco(b,a).
Za
21
b,Z)
b,Z) Y d
Solucin: Y = d Z = a
arco ( b,Z)
Z a
22
Prolog ha explorado slo la primera rama del rbol SLD... conectado(Y,b), conectado(b,Z)
(1) arco(Y,b), conectado(b,Z) (7) (6) Ye conectado (b,Z) (1) arco (b,Z) (3) Za (2) arco(b,X), conectado(X,Z) (3) Xa conectado (b,Z) (1) arco (b,Z) (3) FALLO Za Yf conectado (b,Z) (1) arco (b,Z) (3) Za FALLO
(5) Y d
FALLO
FALLO
FALLO
23
continuando con su estrategia de bsqueda, puede encontrar nuevas soluciones... conectado(Y,b), conectado(b,Z)
(1) arco(Y,b), conectado(b,Z) (7) (6) Ye conectado (b,Z) (1) arco (b,Z) (3) Za (2) arco(b,X), conectado(X,Z) (3) Xa conectado (b,Z) (1) arco (b,Z) (3) FALLO Za Yf conectado (b,Z) (1) arco (b,Z) (3) Za FALLO
(5) Yd
FALLO
FALLO
FALLO
24
(5) Yd
*arco(Y,b), conectado(b,Z)
(6) Ye
(7) Yf
FALLO
*conectado (b,Z)
(1) arco (b,Z) (3) Za (2) arco(b,X), conectado(X,Z) (3) Xa
*conectado (b,Z)
(1) arco (b,Z) (3) FALLO Za
*conectado (b,Z)
(1) arco (b,Z) (3) Za FALLO
*conectado(a,Z)
(1) arco (a,Z) (2) arco(a,P), conectado(P,Z)
FALLO
FALLO
25
* conectado ( b,Z)
* conectado ( b,Z)
* conectado ( b,Z)
* conectado( a,Z)
FALLO
FALLO
Soluciones:
FALLO FALLO
Y = d, Z = a Y = e, Z = a Y = f, Z = 26 a
27
conectado(P,Y),arco(P,Z), arco(X,Z)
Prolog no encuentra ninguna respuesta, quedndose colgado en la rama infinita del rbol SLD
28
Importante
1) Las estrategias de bsqueda en profundidad pueden conducir a
computaciones no terminantes incluso cuando existe una respuesta correcta (recordar)
3- Usos procedimentales
30
En contra de los supuestos de la programacin lgica, en Prolog es posible... Emular las construcciones iterativas de los lenguajes procedimentales
X is Y: X es una variable, Y es una expresin aritmtica, X unifica al resultado de Y
31
En contra de los supuestos de la programacin lgica, en Prolog es posible... Invocar predicados no-lgicos predefinidos de entrada/ salida y clculo aritmtico Alterar la estrategia de evaluacin mediante el uso del predicado de corte
32
4- El corte
33
34
Sugerencia:
Comprueba la INEFICIENCIA del predicado siguiendo el flujo de evaluacin del objetivo mezcla([1,3,5],[2,3],Ks)
36
37
!,
!,mezcla([X|Xs], !. !.
Ys, Zs).
38
A B1....Kk
!
Bk+i A:- B1....Kk,!,Bk+2 ,..., Bn
FALLO FALLOFALLO
39
cualesquiera clusulas alternativas para A unificables con G son ignoradas Las computaciones restantes en Bi, ik, se podan del rbol de bsqueda
2) si Bi falla para i>k+1, el retroceso opera slo hasta llegar al !. 3) si el retroceso alcanza al ! ste falla y la bsqueda procede
desde la ltima eleccin hecha antes de elegir a C para la reduccin de G.
Ejemplo: mezcla([1],[1,2],ZS)
40
41
Los cortes verdes podan ramas de computacin que no conducen a nuevas soluciones, proporcionando una solucin ms eficiente sin que su adicin / eliminacin altere el significado declarativo de los predicados
42
Los cortes rojos podan ramas de computacin que podran conducir a nuevas soluciones, de modo que su adicin / eliminacin altera el significado declarativo del predicado
43
R2: ordena(Xs,Xs):-
!.
45
Cuidado !!
El uso de cortes rojos es peligroso: Obliga a tener en cuenta el comportamiento operacional de Prolog Es propenso a error Permite escribir programas que resultan falsos ledos como programas lgicos: proporcionan conclusiones falsas, aunque se comportan correctamente porque Prolog no puede probarlas
46
48