Professional Documents
Culture Documents
VV'PYx
B % ( 6 B C 6 % D 6 B 6 5 v @ u t f # 7 6 5 B C ( s " A 9 '&bw'80&r8&48!pGFbi!rb1r3Hd8$T&
Prolog de libre distribucion, para WINDOWS 95, NT, etc. y MS-DOS):
6 ( 9 q B h # % C 9 6 ( 9 g # 5 ( ) 6 f # " 9 ) ( 9 % 9 B p&biP&0&$G4UQ4eS2d8$T& D 6 B D 6 5 c # " 9 ) ( 9 % 9 B 04SWV'UQ4UTS B # 9 5 6 9 6 # 5 X D C 9 ( 5 D 6 5 X 9 D 6 B # " 9 ) ( 9 % 9 B 'ba&4&34!&`Y!8!&'WV'UQ4UTS D 6 5 @ 9 D 6 B R " ( " I ) ( 0!4&GQ$PH$ B E D 6 B 6 5 D C ( B 9 ( A 5 6 9 6 # 5 @ 9 ( # 7 6 5 " % # " ) ( " % # " '&GF!!00&34!&0080!4&&$321&0'&$!
Ciao Prolog:
Bibliografa y enlaces
Enlaces
Bratko, I. Prolog Programming for Articial Intelligence (Segunda edici on) Addison-Wesley Ltd. 1990.
Sterling, L. y Shapiro, E. The Art of Prolog (Segunda edici on) MIT Press, 1994.
Jesus Correas Fern andez jcorreas@.upm.es Despacho D-2205 Departamento de Inteligencia Articial Facultad de Inform atica Universidad Politecnica de Madrid 28660-Boadilla del Monte, Madrid 17 de julio de 2002
PROLOG PROLOG 1
declarative programming
Programacion Logica
PROLOG
Programacion Logica
Logic
? YES / NO
Vision tradicional de la logica: nos permite razonar sobre la correcci on de los programas
PROLOG
Programacion Logica
Logic
? YES / NO
Programacion Logica
PROLOG
Aproximaciones a la computacion
Aproximacion imperativa
La logica: utilizada tradicionalmente por l osofos y matematicos para representar y formalizar los razonamientos
Programacion Logica
Sintacticos: conectivas, cuanticadores, constantes, variables, smbolos de funcion, smbolos de predicado Axiomaticos: axiomas, reglas de inferencia, demostraci on Semanticos
Programacion Logica
ff PQr Cp a U vutsqXiW
Basada en secuencias de instrucciones a ejecutar Especicacion bottom-up a partir de una arquitectura particular No adecuada para problemas complejos, como los de IA
PROLOG
PROLOG
De la Representacion a la Computacion
La solucion anterior es buena para la representaci on del problema Si tuvieramos un procedimiento de deducci on efectivo una nueva vision de la resolucion de problemas y la computaci on [Greene]:
programar una sola vez el procedimiento de deducci on encontrar una representaci on adecuada del problema para obtener soluciones: formular preguntas y dejar que el procedimiento de deduccion haga el resto
Representation Problem
Questions
Deduction system
Answers / Results
Programacion Logica
Decada de 1970
Kowalski: interpretaci on procedural de clausulas de Horn: Colmerauer: Prolog (Programmation et Logique). D.H.D. Warren: Prolog compiler (hecho en Prolog). Muy eciente (WAM)
Investigacion en paradigmas y tecnicas de implementaci on avanzadas: Japon (Quinta Generacion), US (MCC), Europa (ECRC, proyectos ESPRIT). Implementaciones comerciales Sistemas de programaci on logica paralelos y concurrentes. CLP: Programacion logica de restricciones ISO Prolog standard.
PROLOG
Programacion Logica
Desarrollos actuales
Muchos sistemas CLP comerciales Extensiones: orden superior, inclusi on de paradigma de programaci on funcional, etcetera Compiladores optimizantes, paralelismo autom atico. Sistemas distribuidos. Dialectos orientados a objetos.
Programacion Logica
PROLOG
11
Aplicaciones fundamentales
Programacion Logica
Unicacion de terminos Mecanismo de inferencia autom atica Recursion como estructura de control b asica Vision logica de la computacion
Bases de datos Representacion del conocimiento Lenguaje natural Metaprogramacion En general, busqueda en un espacio de soluciones
PROLOG
1pFYQ41 g f y g f y 1pFYQ41
11YDF
ba`XRP Y W Q 4U V T RS
x i t Q bw$ CuIgc P Y T gS
Relaciones familiares
2 % 9 s ( % 1 ( 9 5 ( ) # % X # 5 % ( 1(8'&0&4'e0&' 2'&!r 0'e0&' B # " D 9 1 6 5 % # ) # % X # 5 % ( 13'4#!'87 0&' 2(95( 1 C(" ) #%X#5%( 2 6 5 % # 1 C ( " ) # % X # 5 % ( 134#!'87 0&'
PROLOG PROLOG 13
2 F) ( 5 % ( 1'A4B 1 2 F) B ( 9 C 4(A4'SY!(
@ $
@
i"i hR" g
e r x aafF0 w1
d 1QR1r7wVr1" rC r g h r g e r
, , ,
!` 0` `
f 1Fx
t f h t x t f y D1a'Qb 9yDwQ'V
y
g f vt r g h f y 1Q40Q4u1QR1rDQpah
g pFYi
Hechos y reglas
Terminos
Programacion Logica
Variables: Cadenas de caracteres que empiezan con mayuscula (o ), pueden incluir y dgitos:
sw4e r
Un donde
Las
I $ B p 17531 986420 HE2 5 G ) ('F &ED20 % ) ('& # % f B B p DB eQ BC f D D Q @ # D $ p D p D p bD AF f p 7p Q ! "
es una expresion de la forma: es el nombre de un predicado y son de la forma: son nombres de predicado y los
Donde los
Estructuras: un nombre de estructura (como una constante) seguido de un numero determinado de t erminos entre parentesis:
Constantes:
Cadenas de caracteres que empiezan con minuscula, pueden incluir dgitos. Tambien pueden ir entre comillas:
Numeros:
eQcUYaaaYW SQ `d8bbb`XVUTRP
Ejemplos:
Hechos
es cierto
son terminos.
son terminos.
Reglas
2 81 B) # % X # 5 % ( 1'C"E0&' 1 2 B1 5) # % X # 5 % ( @ D(X7A0&'
Programacion Logica
son ciertos
PROLOG PROLOG 15
Todas las clausulas cuya cabeza tienen el mismo smbolo de predicado y aridad forman un . Las clausulas en un mismo predicado proporcionan diferentes alternativas:
, o probar
Ejemplo:
V2'FE)(7'"I0"8X4 42(A)D('S9Y!( $ (E4'8'84PY!( 5 I # ( 1 F B C @ 2 F) 6 9 # 6 % X B ( 9 C F ( 5 % 12'E)0(B 14(FADB'S9YC!( $ (E4'8'84PY!( 2 ) ( @ 2 F) 6 9 # 6 % X B ( 9 C 2 A 5 5 ( I) 6 9 # 6 % X B ( 9 C 1(&4e4'8'84PY!(
Programacion Logica
Unicacion
Unicar dos expresiones (por ejemplo t erminos) es buscar una sustituci on para las variables que hace que las expresiones sean id enticas. Ejemplo:
h
1. Terminos con diferente nombre y/o aridad no se pueden unicar. Solamente se pueden dar valores a las variables. 2. Una variable no se puede ligar a un t ermino que contiene esa variable, porque esto creara un t ermino innito test de ocurrencia (occurs check).
Programacion Logica
y
h
h ! !
e x f$ `
e 4#4
f g g VQ
y 4#Ph
4#yPh f g VYF
f g g VYF
h ! !
Una
Una Ejemplos:
h 8
! $
Un
Yaaa c P 9bbbY W P
! ! "d
i h i "8A!
aa bba &Ya a a & $ " p (bbbY W '%#P Yaaa P $" c P 4bbbY W "%#P
, o ...
PROLOG
17
PROLOG
f
A ! !!
sw48 1r4QV r e f #f 1r4QV f !Qrh0 1r4QV f f wr "4d rsF'8 VY01Yw e g a VYF sF'e8 VY01Yw f g r g !
@G9!HI0#X5&('142 617FA0#' 'C"E04!( 2 1 ) % # % H ) % X # 5 % ( @ 2 G1 F) # % X 6 B # " I 8 B # X 5 ( 1 2@91"E)0%#%&'42(BX1 6)0#%' 'C7A04!( 5 X # 5 % ( @ 2 81 5) # % X 6 B # " I (!p% 1 '4$4&4 2%9s( (95( ) #%X#5%( 12 43Y1 4$4&4 B # " D 9 6 5 % # ) # % X # 5 % ( 2 &4'8'!7 4&4 ( 9 5 ( 1 C ( " ) # % X # 5 % ( 6 5 % # 1 C ( " ) # % X # 5 % ( 2 '8'!7 4&4
' pw
$"
g y wYw1pi
p y a a
"0dP Rw'8 r e
f g r 4@4D YF!
Ejemplos de consultas
Programacion Logica
Programacion Logica
Dado el programa...
El de un parametro depende de la forma en que se unican los argumentos al llamar a un predicado. Ejemplo: Considerese frente a
PROLOG PROLOG 19
i q
Arbol de busqueda
1@GC1 H )4% 1D3HA"FE0#&&' @9"A4&'8( 2 # X 5 % ( 2 1 ) % X # 5 % ( @ 2 G1 F) # % X 6 B # " I 8 ) % # 5 % 12@C17BA4#&X(4 D2'C17A)0#%&&' @9764&'8( 1 B 5 X # 5 % ( @ 2 81 5) # % X 6 B # " I 1(8'&0&4'e0&' 2%9s(% 1 (95( ) #%X#5%( 2'&!r 0'e0&' B # " D 9 1 6 5 % # ) # % X # 5 % ( 13'&'#!'87 0&' 2(95( 1 C(" ) #%X#5%( 2 6 5 % # 1 C ( " ) # % X # 5 % ( 13&'#!'87 0&'
C1, {K=pedro}
padre_de(pedro,X)
C3, {X=miguel}
EXITO X = miguel
Programacion Logica
Programacion Logica
PROLOG
Una respuesta es del tipo , donde es una sustituci on que hace que sea cierto (es decir es una consecuencia l ogica del programa). FALLO, si no es posible inferir ninguna respuesta (soluci on).
$ # ! "
Un programa logico
5 6 sw'! r e
f 1YDF
F F d w F V
4 g 3 g 1 2g ) 0g ( g & 'g
C5,{L=juan, M=X}
padre_de(juan,K),padre_de(K,X)
C2, {K=maria}
padre_de(juan,Z),madre_de(Z,X)
C1, {Z=pedro} C2, {Z=maria}
padre_de(maria,X)
madre_de(pedro,X)
madre_de(maria,X)
C4, {X=david}
EXITO X = david
PROLOG
21
y una consulta
Cuando en una rama hay un FALLO, el sistema hace backtracking e intenta otra clausula en 2.2
PROLOG
Programacion Logica
5. Salvar el programa: 6. Cargar el programa en el int erprete de Prolog: 7. Cambiar de buffer : 8. Realizar una consulta:
6 5 C 9 P0%F4 ( B 6 6 5 C 9 @ P0#g h @ &g
Programacion Logica
6 5 C 9 S0"Q'C B
1 6%C" 42 !08
( B 6 A ( B 9 @ 0) '34% $
4. Introducir el programa:
6 5 C 9 B ( B 6 P0pbF4Ug ) @
Programas
Emacs
) D
) 0
@ 4F
' (&
) D
4 531 2
D 6 B 6 5 @ 6 5 " 84!
&
' 6&
B ( B 6 pbF'
&
&
@ $g
h @ &g
( B 6 4
23
PROLOG
V4TpQ41Ywx $ ! Qg g e f
@
2 ( 7 6 V3
12 1 'P 4&&r0' ( 7 6 ( ) ( % 5 # 9 " 9 X ( 7 6 2 D30! 1 80e1 X D'&( 4&&r0' ( 7 6 1 2 ( % 9 6 s ) B 6 I 5 ) ( % 5 # 9 " 9 X ( 7 6 12 1 S4&&r0' ( 7 6 u ) ( % 5 # 9 " 9 X ( 7 6 2 D2 21 u 1 X D'&( 4&&r0' ( 7 6 1 X ) B6I5 ) (%5#9"9X(76 1 2 % 9 6 s1 % 9 6 s1 ( 7 6 ) B 6 I 5 ) ( % 5 # 9 " 9 X ( 7 6 4!0U7!$0D'&( 4&&r0'
@ 2 9 ( 1 X X 9 ( ) B 6 I 5 9 ( 3D2 H1 21 004'( ) 5
f D"0Qa
4afa 1fw'gr8$"0QfQ 4QfQ Vw'Y! Vw'Y f g f g f y r f g "ga Q1w4rFbVw'Y f r e pba4 ' Fa1 x
# Rp1F1r4iY rf g r h
f g 4 iwa #4
,
y r g as'wYF
Programacion Recursiva
Datos Estructurados
Ejercicio: Denir
Consulta
la consulta
como:
PROLOG PROLOG
?
25
Las listas son un caso particular de t erminos compuestos. Estructura binaria: el primer argumento es un elemento y el segundo argumento es el resto de la lista. Para representar esto necesitamos:
Programacion Logica
Dado el programa:
Predicado equivalente a
Programacion Logica
#4
h aYVwr0
Xx 8 x Sx Sx S x " Sx
Un smbolo de constante: la lista vacia denotada [ ] Una estructura de aridad 2: tradicionalmente el nombre de la estructura es el punto .
27
PROLOG
1 I 1
( $1
$
1 ( I !e F 1 F) % C# "E!0!'8( @
2 13H
1 7$1
I
r 0a wf QsFV4
2 @G
1 !( )
2 (
1 I 1 ( 1 F #!$7A)
I ( 5 # I # 484 @
# A
F4
g F00w
Usos de
6 4C
F F F
Programacion Logica
g raa Vg
6 'C
Encontrar diferencias entre listas:
Concatenacion de listas:
Programacion Logica
Ejercicio: Denir
Usos de
Ejercicio: Denir
PROLOG PROLOG 29
Aritmetica (I)
Enfoque practico: interfaz con las capacidades aritm eticas de la maquina. Las operaciones aritm eticas no son muy generales ni declarativas. Interfaz: evaluador de t erminos aritmeticos.
, correcta si cuando se evalua , y aritmeticos, en otro caso, se produce un error. , incorrecta (error).
Los usuales (igual), (distinto), , , , Los argumentos de los predicados anteriores deben ser t erminos aritmeticos (en otro caso se produce un error). : se evalua el termino aritmetico y el resultado se unica con el termino . Ejemplos: qu e diferencia hay entre las siguientes consultas?:
Programacion Logica
Aritmetica (II)
Ejemplos: Supongamos que una variable libre (sin ligar): No fallan: e est an ligados a y respectivamente, y
Fallan:
Producen error:
Ejemplo de programa aritm etico: Ejercicio: Denir , : es la longitud de la lista ; del arbol .
es el numero de nodos
Programacion Logica
YiYF
&
T
f aVYwr
uVFsw rf
& !
4
"
p#
wYw
& !A
Y
x y h r YasY
& !E
iY
PROLOG
31
es
PROLOG
Mecanismo para controlar la ejecuci on. Evita el backtracking en el punto en el que se introduce. Un corte obliga a Prolog a quedarse con todas las elecciones hechas desde que una consulta (padre) se unic o por primera vez con la cabeza de la cl ausula en la que se encuentra el corte, e ignorar las dem as. Por tanto, se podan:
pero no afecta la busqueda en las consultas que est an despues del corte.
Programacion Logica
Programacion Logica
Todas las clausulas que se encuentran a continuaci on. Todas las soluciones alternativas de la conjunci on de consultas que hay antes del corte en el cuerpo de la cl ausula.
PROLOG
33
A/b p(B,C)
l(B)
m(B)
m(B)
PROLOG
No afectan ni a la completitud ni correcci on: se pueden usar libremente. Cortes Verdes: descartan soluciones correctas que no se necesitan:
"0 1F'"sp1Va10w g f e g y r f g g $"4d YY1"sp1Va10w rf g
Afectan completitud pero no correcci on. Necesarios en muchas situaciones. Usar con precaucion.
Programacion Logica
Los cortes rojos afectan la completitud, y no se puede conar en la interpretaci on declarativa del programa para razonar sobre su correcci on: evitarlos siempre que sea posible.
est a en el arbol , de
Programacion Logica
Ejercicio: Modicar
FxQgYF04F Y
Y$
x f g #4 F1w'r #4 aa1'wrw y r g
74 s'VaV4w g rf g g 74 s'VaV4w rf g
` #44 ` 4
#4 d d
d i i d
i i
PROLOG
35
PROLOG
Q01rDQ4Y r f g h y
&
&
9
1 D2 &
@ 2 $1(1
F1 12 4X@
&
&
F1 ) " C X D C # 12 'C7"84!B
1 2 4)
V11 RQ4dRY $b y r y r f D5 RQ4dRY y r r f y VV Q411h $b r f g D5 Q411h r f g fQyidFr4dy YQ rRwr$b g f D5 YQ Rwr g r f YV1 rQ $! g D5 fQiQr'dy y d $ YQ D5 g rQ g
: tiene exito si
Programacion Logica
f h f g Y0a11w'r
&
Programacion Logica
Ejercicio: Denir , que liga todas las variables libres de nodos o subarboles del arbol X al termino T (dejando un arbol bien formado).
Ejemplo:
Usos:
controlar el orden de los objetivos, dar exibilidad a programas que utilizan algunos predicados determinados (por ejemplo, los predicados aritm eticos)
: tiene exito si
: tiene exito si
: tiene exito si
no incluye variables.
PROLOG PROLOG 37
,...)
Programacion Logica
es .
: El argumento de la posici on
Ejercicio: Denir que aplique el predicado a cada uno de los elementos de (en el primer argumento de devuelva los resultados (el segundo argumento de ) en la lista Ejemplo: la consulta: debe devolver en
la lista
.
g Y1
Ejercicio: Denir que aplique el predicado de aridad 2 a cada uno de los subterminos de (en el primer argumento), y devuelva los . resultados (el tercer argumento) en el t ermino
aa g 'Y
Programacion Logica
g Y1
r YV1aw
y 0aa4Yw
y 4YF
g 11 4w
h g 4$ Y g f y r 4YQ0dp
4w
VVY VVY
PROLOG
39
y cuya aridad
de aridad 2 ), y .
PROLOG
Programacion Logica
Ejemplo: Un contador
Programacion Logica
r YT0w
Programas difciles de leer, entender, y depurar. Los programas dinamicos suelen ser mas lentos.
Asercion de clausulas que son consecuencia l ogica del programa (lemas). Eliminacion de clausulas que son logicamente redundantes.
PROLOG
42
Ejercicio: Denir un predicado que busque la palabra P en el diccionario leido con el predicado anterior, y proporcione en S el signicado. Ejercicio: Denir un predicado signicados de la palabra P.
Programacion Logica
Y1Vg
y a0a
g g h f g raYi011ra
f f y 7 $Yap
g u$YwY0VY
F(V
g 7YrVdV
g YrVdV
. Para
PROLOG