h f f g g g f e d
y y apVQ4r111VrYa'aYaSV2w`'w`¥a!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§¥§'§8¤0§¤¥&r8¥&48§¤¤!§pGF¤bi!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&bi¤P¤¥¥&¤¥¥§0§§&¥¤$©¥G4UQ4e©S¤¥2d8$T&¤¢ D 6 B D 6 5 ¦ c # ¦ " 9 ) ( 9 % ¦ 9 B ¨ ¦ £ £ 0§4¤S¤§©¥¥WV'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&¤3¤4!&¤¤`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¥¤¥¥¤¤!¤!¥0§0§&¤3¤4!&0§08¥0!4&&$©¥321&0§§'&$©¥!©¥¥©§¥¤¢
Ciao Prolog:
Bibliograf´a y enlaces ı
´ ´ Programacion Logica ´ ´ Programacion Logica
Transparencias, tarjeta de referencia de Emacs, etc.:
Enlaces
´ Bratko, I. “Prolog Programming for Artificial Intelligence” (Segunda edici on) Addison-Wesley Ltd. 1990.
´ Sterling, L. y Shapiro, E. “The Art of Prolog” (Segunda edici on) MIT Press, 1994.
Repositorios, bibliograf´a, compiladores, etc.: ı
Jesus Correas Fern´ ´ andez jcorreas@fi.upm.es Despacho D-2205 Departamento de Inteligencia Artificial Facultad de Inform´ atica ´ Universidad Politecnica de Madrid 28660-Boadilla del Monte, Madrid 17 de julio de 2002
´ ´ Programacion Logica Prolog
PROLOG PROLOG 1
¡ ¡
¡
INTRODUCCION ´ ´ Logica y Computacion
programming logic algorithms verification logic programming constraints logic and AI knowledge representation logic of programming
declarative programming
Logic of Computation program verification proving properties
Computational Logic direct use of logic as a programming tool
´ ´ Programacion Logica
PROLOG
3
´ Uso de la logica (I)
?
´ ´ Uso convencional de los ordenadores – No es f acil determinar la correcci on de los programas
PROLOG
´ ´ Programacion Logica
´ Uso de la logica (II)
Logic
? YES / NO
´ ´ ´ Vision tradicional de la logica: nos permite razonar sobre la correcci on de los programas
PROLOG
´ ´ Programacion Logica
5
´ Uso de la logica (III)
But, it would be interesting to also improve:
Logic
? YES / NO
´ La logica nos permite representar problemas ´ Pero tambien resolverlos!
´ ´ Programacion Logica
PROLOG
´ Aproximaciones a la computacion
´ Aproximacion imperativa
Lenguaje natural ´ En principio es la aproximaci on ideal, pero:
´ ´ ´ La logica: utilizada tradicionalmente por fil osofos y matematicos para representar y formalizar los razonamientos
´ ´ Programacion Logica
´ ´ Ejemplo de logica simbolica
´ ´ Se puede representar mediante l ogica simbolica como:
´ Elementos fundamentales de la l ogica:
´ Sintacticos: conectivas, cuantificadores, constantes, variables, s´mbolos de ı ´ funcion, s´mbolos de predicado ı ´ ´ Axiomaticos: axiomas, reglas de inferencia, demostraci on ´ Semanticos
´ ´ Programacion Logica
ff PQr Cp a U v©utsqXiW
¨ (' ¡ ¦ ¦ ' 54 0)!&©#8!7¥( 6¥¡ 2 3
permite deducir que:
6B¢A@©#8!7¥( 6¥¡ 2 ¡ $ 9 ¦ ¦ ' 54 3 ¦ ¨ (' ¡ $ ¡ ¦ ¦ ¡ ¦ ¡¨ ¦ ¡ £ ¡ !10)!&%#"! ¢§©§¥¤¢
´ ´ Ejemplo clasico de logica:
D §!C bD C p w
f cp C a U Qr Cp a U Xi6b Xt!iX`W F D p fXi6b X1#biyx!C cp C a U Q c a Y W U S F w h f PQ c a Y W U SQ P H F D @ge6db`XVTR¥IGEC
Basada en secuencias de instrucciones a ejecutar ´ Especificacion “bottom-up” a partir de una arquitectura particular No adecuada para problemas complejos, como los de IA
es prolijo es ambiguo depende del contexto
PROLOG
7
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
´ Algoritmo = logica + control [Kowalski, 1979]
PROLOG
´ ´ Programacion Logica
´ ´ Breve historia de la programacion logica
´ Decada de 1960
Greene: problem solving. ´ Robinson: resolucion lineal.
´ 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 eficiente (WAM)
´ Decadas 1980 y 1990
´ ´ ´ ´ 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
h
¥ ¤ ¡ ¡ ¦££¢
9
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
´ ´ Caracter´sticas de la Programacion Logica ı
Elementos clave
Aplicaciones fundamentales
´ ´ Programacion Logica
´ ´ Unificacion 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
('#%Y &¦ ¤$¨©¦#¤¦ ¡1pFYQ41 g f y ¤ ¦"! Y ¦ ¤ ¢ ¥
¡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
2 G1 H) # % X # 5 % ( 1@9!I0¤&&' 1 2 H1 F) # % X # 5 % ( @ D3A"E0¤&&'¦ $¨ 2 81 B) # % X # 5 % ( 1@9"E0¤&&'¦ 1 2 B1 5) # % X # 5 % ( @ D'C7A0¤&&'¦ $¨
Ejemplo introductorio (I)
Relaciones familiares
VfedIRP Y Q $c V q d QXph rgP ai TRS T gS yy yy yy vg IVuIs P Qt T gS
Ejemplo introductorio (II)
2 G1 F) # % X 6 B # " I @9"A4¤&§'¥8( 2 81 5) # % X 6 B # " I @9764¤&§'¥8(
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 % ( 13§4#!'87 0§¥¤&'¦
´ ´ Programacion Logica ´ ´ Programacion Logica
´ Calculo del factorial de un numero: ´
´ Como se puede representar
?
PROLOG PROLOG 13
2 F) ( 5 % ( 1'A4¤¥§§B 1 2 F) B ( 9 C 4(A4'SY!(
@ $¨
2 F) 6 9 £ # 6 % X B ( 9 C (E0&§'8¤48§§'SY!( 2 81 5) # % X 6 B # " I 'C7A0§¥¥4!(
...
2 A 5 5 ( I) 6 9 £ # 6 % X B ( 9 C (§'e4§§48'8§§4PY!( 6 5 D # C) 5 6 B 6 2 ¤'e!&¥§ 2 6 5 % # 13¤¥§4¦
@ ¨
©©© p I)D p © Xp )D p Q ¨ f ©©©
i"§i hR" g ¨ ¤ ¦ ¤
e ¤ r x aaf¡F¤0 w¤1
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 1Q40Q4u¥1QR1rDQpah
¤
g pFYi
Hechos y reglas
´ Terminos
´ ´ Programacion Logica
Variables: Cadenas de caracteres que empiezan con mayuscula (o ), pueden ´ ı incluir y d´gitos:
¤ 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
El numero de argumentos de una estructura es su ´
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 ´ ´ d´gitos. Tambien pueden ir entre comillas: ı
“
Los hechos dicen cosas que son ciertas.
Numeros: ´
” representa la implicaci´ logica, y las comas la conjunci´ on ´ on:
p UYaaa S p P e 9pc 8bbbY Wp VUqih
h¤e WTWc 89bbbY WW VU¥P Tf UYaaa SW g
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§¥¤&'¦ ¨
1 C(" ) #%X#5%( "8487 4¤&§4¦
´ ´ Programacion Logica
.
son ciertos
PROLOG PROLOG 15
¡
¡
´ Clausulas, predicados, programas y consultas
´ Todas las clausulas cuya cabeza tienen el mismo s´mbolo de predicado y aridad ı forman un . ´ Las clausulas en un mismo predicado proporcionan diferentes alternativas:
se puede leer como: “para probar , hay que probar
, o probar
Ejemplo:
V2'FE)©¤(¥7'"I0"¥8X¥¥4¢ 42(A)D('S9Y!( $¨ (E4§§'8'8§§4PY!( 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'8§§4PY!( 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'8§§4PY!(
´ ´ Programacion Logica
´ Unificacion
´ ´ Unificar dos expresiones (por ejemplo t erminos) es buscar una sustituci on para ´ las variables que hace que las expresiones sean id enticas. Ejemplo:
¢ ¢ ¨ § ¥ ¤h £ ¦¦ ¢ £
Imposible (1) Imposible (1) Imposible (2)
´ 1. Terminos con diferente nombre y/o aridad no se pueden unificar. 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 crear´a un t ermino infinito ı test de ocurrencia (occurs check).
´ ´ Programacion Logica
¦y
¥ ©h £ ¦ ¢ £
h ¢¡! !
e ¤ x f$¨ `
¨4#b ¤ b ¨ ¨4#e4 y $¨ x ¥ ¨ ¤ pwYw g h $¨ x ¥ ¤
¨ ¨ e 4#4
f g g VQ
¨ ¨ y 4#P¥h ¤ ¥
¨4¨#yP¥h ¤ f g VYF
¨
f g g VYF
¤ ¥
¥
h ! ¡!
Una
´ ´ es una asignacion de terminos a variables.
2 F1 C ( " ) # % X 6 B # " I (C!'87 0§¥¥4!(
2 A) "B )) 69 £ # 6 %XB ( 9 C ¥¤3¤HD¥&'8'!¤§§4Pr8(
Una Ejemplos:
¦ £ h £¦ 8©
¡¢£ ! ¥ ¦ ¢ ¦ $
)
¢ ¢
!
Un
es un conjunto de definiciones de predicado.
´ es una pregunta que se realiza sobre un programa l ogico.
&Ya a a p (bbbY W &
Yaaa c P 9bbbY W P
! ! £ "d ¡¢ ©£
P
¦ i £h i ¡ §"8¢A¢!
aa bba &Ya a a & $ " p (bbbY W '%#P Yaaa P $" c P 4bbbY W "%#P
Reglas y hechos se denominan
.
, o ...”
PROLOG
17
PROLOG
f
4d£¥1 4i¥ £ h Fp0
f
Qr0 h ¤ sw'e r ¤ sw'e r r sw'e
¤¢ ¡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"E0§¥¥4!( 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#%§¥¤¥§'¦ ¨ 'C7A0§¥¥4!( 5 X # 5 % ( @ 2 81 5) # % X 6 B # " I (!p¤% 1 '§4$4¤&¤¥§4 2%9s( (95( ) #%X#5%( 12 4§3Y1 §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 w¤Yw1pi
p©¦ y a¤ §a
¨
¨"0d¥P¤ £ ¤ Rw'8 r e
´ ´ Rol de la Unificacion en la ejecucion
´ Tambien nos permite acceder a datos: Dado el programa:
¨ ¨ ¦ ¢ ¢ f g r 4@4D£¤ YF¥!¤
¦
¨!p©§¤ ¨ ¤ £¤ p©§ w¤1! 'w ¦ ¦ x x g y F¤a1P¤ iYw'i ¤ ¥ y f VY41FV f 1Y4YFV3
Ejemplos de consultas
´ ´ Programacion Logica
´ ´ Programacion Logica
... PROLOG puede responder a consultas como:
Dado el programa...
La consulta: proporciona en la variable
´ El de un parametro depende de la forma en que se unifican los argumentos al llamar a un predicado. ´ Ejemplo: Considerese frente a
´ ´ Se utiliza la unificacion para devolver valores al final de la ejecuci on de un predicado.
´ ´ Se utiliza la unificacion para pasar parametros en llamadas a definiciones de predicados.
el d´a l´mite para la entrega de matr´cula. ı ı ı
PROLOG PROLOG 19
¢
¦ i ¢q¦
)
Arbol de busqueda ´
1@GC1 H )4¤%&#¤¥§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
´ ´ Un interprete esquematico de PROLOG (I)
¥
Todas las respuestas (soluciones) posibles a la consulta.
: Lista de objetivos a demostrar. ´ : sustitucion a aplicar a la consulta.
´ ´ 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
´ (De quien es Juan abuelo?)
abuelo_de(juan,X)
C6, {X’=juan, Y=X}
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
.
´ ´ Un interprete esquematico de PROLOG (II)
1. Inicializar la lista de objetivos a demostrar con la consulta . ´ 2. Mientras no este vac´o, hacer: ı 2.1. Tomar un literal de ´ 2.2. Tomar una clausula (renombrando sus variables) del ): programa (hecho o regla, tal que y unifican con el unificador . ´ Si no hay tal clausula, terminar con FALLO. ˜ 2.3. Eliminar de y anadir (al principio de) . 2.4. Aplicar a y a . 3. Si (lista de objetivos) es vac´a devolver y terminar (la consulta ha tenido ı EXITO), en otro caso terminar con FALLO. ´ Los pasos 2.1 y 2.2 no est an completamente determinados. En PROLOG son, ´ respectivamente, el primer literal y la primera cl ausula. En otros sistemas puede ser distinto.
Cuando en una rama hay un FALLO, el sistema hace backtracking e intenta otra ´ clausula en 2.2
PROLOG
´ ´ Programacion Logica
El primer programa Prolog
0. Crear un nuevo directorio
2. Entrar en el directorio 3. Crear el fichero
¥ h @ ¦&g § § ©¨¦% ¥ ¥ h @ ¦&g
:
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%F§4¢ ( B 6 6 5 £ C 9 ¥ @ ©P0#¤g ¥ h @ ¦&g
´ ´ Programacion Logica
6 5 £ C 9 ¥ ©¤S0"Q'C B
1 6%C" 42 !0§8
( B 6 A ( B ¦ 9 @ ¥0¢©) ¥'3¥4% $¨
4. Introducir el programa:
£
©65£¤CS0©&§¤0!&4¤!$¨ 9 ¥ D 6 B 6 5 ¦ @ 6 5 " D 6 B 6 5 ¦ @ 6 5 " ¡ 8¥0!&403¤¨
6 5 £ C 9 ¥ B ¦ ( B 6 ¢ § § ©P0pbF§4U©¨§g ¥ ) @
£
1. Entrar en el sistema: Menu Inicio ´
Programas
Emacs
) D ©©©
) 0
@ 4F
%
' (&
) D ©©©
4 531 2
D 6 B 6 5 ¦ @ 6 5 " ¡ ¥¤¤8¥§4¤!¢¨
)
%
&
' 6&
%
%
%
B ¦ ( B 6 pbF¥'¢
©
&
&
%
%
B
6
¥ @ $g
¥ h @ ¦&g
( B 6 §4¢
23
PROLOG
¨ ¤ ¡V4Tp£¡Q41Ywx $¨ !¤ ¥¡Qg g ¢ e f ¤
@ ¨
2 ( 7 6 V3¥¥¤
12 ¥¤ 1 'P 4&&r¥0¥¥'¢ ( 7 6 ( ¢ ) ( % 5 # 9 " ¤ 9 X ( 7 6 2 ¥¤ D30! 1 80e1 X D'&( 4¤&&r¥0¥¥'¢ ( 7 6 1 2 ( ¢ % 9 6 s ) B 6 I 5 ) ( % 5 # 9 " ¤ 9 X ( 7 6 12 ¥¤ 1 ¥S4&&r¥0¥¥'¢ ( 7 6 ¤ u ) ( % 5 # 9 " ¤ 9 X ( 7 6 2 ¥¤D2 21 ¥u 1 X D'&( 4¤&&r¥0¥¥'¢ ( 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!¤¤$0¥¤¢D'&( 4¤&&r¥0¥¥'¢
@ ¨ 2 ¤ 9 ( ¦1 X X ¤ 9 ( ¦) B 6 I 5 ¤ 9 ( 3¥¤¤©D2 H1 21 ¨00§4'§( ) ¥¤¤5
¨ ¨ f D"0Qa£ ¤
4afa£ ¤¡§ 1fw'gr8¤$¨"0QfQ£ ¤¥4QfQ§¤ ¡Vw'Y!¤ ¡Vw'Y £ f g f g ¨ ¢ f y r f g "ga¦§¤ £¡ ¤ Q1¥w4rFb¡Vw'Y f r ¤ e p©b¡a4¤ '©¦ F¤a1 x
¨
¨ #¤ Rp1F¥1r4iY rf g r h
¨ f g ¨ 4¤ ¡i¥wa #4¤
,
y r g as'wYF
¨ rRw'e ¤ 'wYi g ¨!Fp0 ¤ h ¨ r e #¤ sw'!
1'9!I0§§'!08( 2 G1 H) 6 % ( ( ¦ # £ C 1 H1 F) 5 6 £9 C# D 6 5 @ D2 A"E!&0!r8¤&0¦ ¨ 2 G1 F) 5 6 £ 9 C # D 6 5 @ 1'9"E!&0!r8¤&0¦ ¨ @¨ @ ¨
´ Programacion Recursiva
A partir del ejemplo de relaciones familiares:
1(!p&% !&4§4$4¤§¥¤¥§4 2%9s( 1 (95( ) #%X#5%( ( 9 5 ( 1 C ( " ) # % X # 5 % ( 2 &'&'#!'!7 4¤§¥¤¥§4¦
2 G1 F) # % X # 5 % ( 1@9"E0¤&&' 2 G1 F) # % X # 5 % ( 1@9"E0¤&&'¦ f y r ©VYrw's
B # " D 9 12 4§3Y1 §4$4¤&¤¥§4¦ 6 5 % # ¦) # % X # 5 % ( 6 5 % # ¦ 1 C ( " ) # % X # 5 % ( 2 ¤¥§'8'!7 4¤&¤¥§4¦
Datos Estructurados
fYrw's y r fYrw's y r f y r Yrw's
2'9"A4¤&§'8¤¤!( G1 F) 6 % ( ( ¦ # £ C 2 G1 F) 6 % ( ( ¦ # £ C '9"A4¤&§'8¤¤!( 2'9"A) G1 F 2 G1 F '9"A)
5§¤!r80¤¤¦ 6 £ 9 C # D 6 5 5 6 £ 9 C # D 6 5 §¤!r80¤¤¦
´ ´ Programacion Logica ´ ´ Programacion Logica
´ Ejercicio: ¿Que devuelve en
´ Ejemplos de programaci on con estructuras de datos:
´ Ejemplos de terminos compuestos:
´ El nombre de un termino compuesto se llama functor
´ Las estructuras de datos se crean usando t erminos compuestos.
Ejercicio: Definir
Dado este programa, PROLOG puede responder a consultas del tipo:
´ Se puede definir la relaci on
Consulta
Respuesta Y = pedro; Y = maria; Y = miguel; Y = david X = pedro; X = juan no
la consulta
como:
,
PROLOG PROLOG
?
25
´ Programacion Recursiva: Listas (I)
´ 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:
´ El punto no se usa normalmente: el t ermino .(X,Y) se representa por [X Y] (X es la cabeza, Y es la cola)
´ ´ Programacion Logica
´ Programacion Recursiva: Listas (II)
Ejercicio:
¨ ¤ h aYVwr0
Dado el programa:
Obtener el resultado de las siguientes consultas:
Predicado equivalente a
:
´ (unificaci on). Ejemplos:
´ ´ Programacion Logica
¨ #4¤
h aYVwr0
objeto formal .(a,[ ]) .(a,.(b,[ ])) .(a,.(b,.(c,[ ]))) .(a,X) .(a,.(b,X))
sintax. cons [a [ ]] [a [b [ ]]] [a [b [c [ ]]]] [a X] [a [b X]]
sintax. elemento [a] [a,b] [a,b,c] [a X] [a,b X]
PROLOG
¨ x x " "¤ 9" ¨" £ ¤ SC¤ S" x x ¨ x x 7 ¢SC¤ S" ¨ x x " ¡S "¤ C ¤ S"
¥Xx ¤ 8¤ x ¢Sx Sx ¡S x " ¤ Sx
aYVwr0 h aYVwr0 h aYVwr0 h h aYVwr0
Un s´mbolo de constante: la lista vacia denotada [ ] ı Una estructura de aridad 2: tradicionalmente el nombre de la estructura es el punto “.”
27
PROLOG
¨ #4¤ ¨ x r "" ¤ S"¤ ¤ ¥a¥FV0
2 © 1(
1 I 1
(§ $1
© § $
¥ © 1 ( § I !e F 1 F) % C# ¦ ¦ ¥ "E!0!'¥8( @ ¦¤
2 13H
1 © § 7$1
© I
1
6 'C ¥ © 1 1 ( § #I !eH ¥ ¦¤ (§ % C # ¦ ¦ $¨) 0!'¥8( @
¨ ¤ r 0a¢¤ wf¡ ¥QsFV4
¨ y ¤ ¨ #¤ 0YaiD¤ $#¤ wVQ $#¤ w1a d ¤ ¨ d g
¥
2 @G
1 !( )
# ¤¤A © X 1 # X ( § '&H7H1 $"G %¥ © # X ( § $H1 $"G ¥ © ( § $"G ¥ ¦¤ 5 # I # §484 @
¥ ¥ ¦¤
2 © (
1 I 1 (§ 1 F #!$7A)
¥ I ¥ ( 5 # I # §484 @
# ¤¤A
2 © 1 I (§ 1 I 5 # I # 1HU1 $!#$) §4!' @
¨ F4¤
g F00w
¨ g #4¤ ¥Q04w ¨ x g ` " w ¤ X"¤ ¥Q04w ¨ " ¤ "¤ ¥Q04w x g
:
´ Programacion Recursiva: Listas (III)
Pertenencia de un elemento a una lista:
Usos de
Ver si un elemento est´ en una lista: a
¥ ¦¤
´ Programacion Recursiva: Listas (IV)
6 4C
F F F
´ ´ Programacion Logica
´ Ejercicio: Cual es el resultado de
g raa£ Vg
6 'C
Encontrar diferencias entre listas:
´ Concatenacion de listas:
¨ £¤ 4¤ ¥QsFV4 r ¨"¥a¡¤ xy¤¡w¤ ¤ $ Q¥F4 x r ¨ w ¡w¤ 9$ Q¥F4 ¤ x r
:
´ ´ Programacion Logica
Ejercicio: Definir
Usos de
Ejercicio: Definir
Buscar una lista que contiene un elemento:
Buscar un elemento en una lista:
Concatenar dos listas:
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 unifica 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: Definir , : es la longitud de la lista ; ´ del arbol .
:
es el numero de nodos ´
´ ´ Programacion Logica
¨
¢ Yi¤YF
¤ ¥&
¤ T ¨
Y
´ Predicados aritmeticos predefinidos:
¤ ¤
f aVYwr
´ ´ Ejemplos de terminos aritmeticos:
¨ ¦ r ¦ ¦ r & ¤ ¦ r ¦ # ¦ & ur & Y
¨ uVFsw ¤ rf
¡ © ¡ ¤ ¨ § ¡ £ ¡ ¦ ¡ ¥ ¤ ¡£ ¡ ¢
u
¦
¦
¡
Y
F
¨ & ¥!
¨ £¤ 4¤
"¤ ¨
¨ p#
¢ w¤Yw
¡
& !A
Y
x y h r YasY
& !E
´ resultan ser t erminos
¡ ¨
iY¤
PROLOG
31
es
PROLOG
Operador de Poda: Corte (Cut)
´ 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 unific 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
Operador de Poda: Ejemplo
¥ $(A4B @¨ 2 F) ¥¥¥1'E" $'C7A"¦ 2 F) @¨ 2 G1 F) 1 2 F) ¥¥1 ¡D'E!5 $'C7A"¦ @¨ 2 G1 F) 2 F) 1'E4B $'C7A"¦ @¨ 2 G1 F) @$) 5 2I 2 ( ) 5 @$© 2 I) ) 2 ( ©
´ ´ 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
s(A),p(B,C) A/a p(B,C)
A/b p(B,C)
l(B)
r(B),!,.... B/a !,..... B/b !,....
m(B)
l(B) B/a !,...
r(B),!,.... B/b !,....
m(B)
PROLOG
Operador de Poda: Tipos de corte (I)
Cortes Blancos: no descartan soluciones:
¡¤
´ 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
Operador de Poda: Tipos de corte (II)
Cortes Rojos: descartan soluciones incorrectas de acuerdo con el significado intencional de programa.
Y¡¤
´ Los cortes rojos afectan la completitud, y no se puede confiar en la interpretaci on ´ declarativa del programa para razonar sobre su correcci on: evitarlos siempre que sea posible.
Ejercicio: Definir , que compruebe si forma que proporcione un solo resultado.
´ ´ est a en el arbol , de
´ ´ Programacion Logica
Ejercicio: Modificar
´ para que solamente d e un resultado.
¨
¤
¢£Fx¤QgYF04F Y§
¤ Y¡$¨
¤g ¤ ¥YV¢ "r Q©F¥ ¨ g ¢ g g ¥Y11¢ "4VY ¨ ¤g ¤ ¥YV¢ "r Q©F¥ g ¢
¨ ¢ x f g #4¤ £F¤©1w'r ¨ #4¤ aa1¥'wrw y r g
¨"¥ ¤ "¤ £aFQF44w x ¢ x g ¨ "¥ ¤ "¤ £aFQF44w x ¢ x 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
¨ ¥Q¤01rDQ4Y r f g h y
¥
&
&
¦§9
§
1 D2 &
@¨ 2 $1(¤1
¤14'E) !¥¤'&8¥B F £ 9 B X ¢ £ D C # ¤ © 4F r¨!8¥4§¥¤8§B F§ ) £ 9 B X ¢ £ D C # E1 § ) £ 9 B X ¢ £ D C # 12 27© ¨!8¥4§¥¤8§B
F1 12 4X@
&
¢)"¥"C!X'¢&£D¤C!#¥B 1© @ ¦§9 1 ¥!E ¤ @¨ 2 X§ 1 ) " C X ¢ £ D C # $© 4F $!7£"¥84§¥¤8§B 2 § 1 ) " C X ¢ £ D C # 1© !!E "¥84§¥¤8§B
&
F1 ) " C X ¢ £ D C # 12 'C7£"¥84§¥¤!¥B
V2( ¤144FA)!£8§9¤BX'¢§£¥¤!¥B D§'E!&08'C D C # 1 2 F) 5 ( s C 6 @¨ 2 1 F) ¢ £ D C # $¡04A7§¥¤8§B 5 # D # £ C 1 2 F 5 ( §¤&0P9 D§4A) §0s @¨ 2 1 F) ¢ £ D C # $¡04A7§¥¤8§B
1 2 4¢)
V11 ¨ RQ4dRY $b¥ y r y r f ¤ ¨ D5 ¨ RQ4dRY y r r f y VV ¨ Q¤411h $b¥ r f g ¤ ¨ D5 ¨ Q¤411h r f g fQy¤idFr¥4dy ¨ YQ£ rRwr$¨b¥ g f ¤ D5 ¨ YQ£ Rwr g r f YV1 ¨ ¥rQ£ ¤$¨! ¥ g D5 fQiQr¥'dy y d ¨ ¥ ¤$¨ YQ£ D5 g ¨ ¥rQ£ g
´ Predicados meta-logicos (II)
´ Predicados meta-logicos (I)
´ ´ ´ Estan fuera del ambito de la logica de primer orden.
´ : tiene exito si
´ ´ Programacion Logica
Ejercicio: Definir variables).
¨ ¨ ©¤
f h f g Y0a1©1w'r
&
´ ´ Programacion Logica
Ejercicio: Definir , 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 flexibilidad a programas que utilizan algunos predicados determinados ´ (por ejemplo, los predicados aritm eticos)
´ : tiene exito si
´ : tiene exito si
´ : tiene exito si
es una variable libre.
no incluye variables.
no es una variable libre.
´ es una constante (numero o atomo). ´
´ : X es una lista de t erminos ground (sin
PROLOG PROLOG 37
Meta-predicados: Orden superior (I)
´ convierte un termino
´ ´ Se usan para meta-programaci on: interpretes y shells.
´ Permite programacion de orden superior
´ Ejemplo: Negacion por fallo
rQ !Q'ids1¥pwr ¨ y rf ¤ yf ¤ ¤ ¨ y rf ¤ ¨ y rf ¤ yf ' $!Q'ids1¥¡V1r !Q'ids1¥pwr
Existen otros predicados de orden superior (
,...)
´ ´ Programacion Logica
Meta-predicados: Orden superior (II)
´ se suele utilizar conjuntamente con los predicados de manipulaci on de estructuras: : ´ es un termino compuesto cuyo nombre es ´ del termino es .
a¢ g V g Y1
es .
´ : El argumento de la posici on
Ejercicio: Definir 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: Definir 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
¤41!¥'FVYi ¨ r xf e g g ¨ f e y r y 71!¥VQY4 ¨ s1QY0 $4¨ ¥'FVYi pwr ¨ 1¥1Qr4 Y'wVri¤ y r y ¤ ¨ g g y f y r y g g r
¨
g Y1
r YV1aw
¨ ¢ g g 0aa£¤ '¨ ¤ 11¡ 4w 44 ¤ 43§¤ x ¢ ¢ ¦ ¨ ¥ g ¤ `"¤ ¨ ¤ ¡1pFYQ41! ¤ ¤ x g f y
¨ ¢¤ y 0aa£4Yw ¤
y 4YF
Es util pero peligrosa: ´
g 11¡ 4w
¨
¨ ¤ ¨¤ h g 4©$ Y ¨ ¤ ¤ ¨ g f y r 4©¥YQ0d¤p
4w
¨ ¡VVY ¨ ¡VVY
en una consulta (objetivo), y lo ejecuta.
PROLOG
39
y cuya aridad
de aridad 2 ), y .
PROLOG
´ ´ Modificacion Dinamica de Programas (I)
¤ ¦ x f Va"F¤YaVw
PROLOG 41
´ Caracter´stica potente: permite realizar la modificaci on de los programas en ı ´ tiempo de ejecucion.
A veces es util, pero en la mayor´a de los casos es un error usarlos: ´ ı
Debe utilizarse de manera cuidadosa y local.
´ ´ ´ La asercion y eliminacion se pueden justificar l ogicamente:
Otro uso permitido: simular variables globales.
Comportamientos/requisitos para asertar/eliminar predicados difieren entre las implementaciones Prolog.
´ ´ Programacion Logica
´ ´ Modificacion Dinamica de Programas (II)
Ejemplo: Un contador
´ ´ Programacion Logica
4¨©§sr§YYrV ¨ ¦ y rf y g ¨ g f y rf ` ©¦ YYasY ¤ ¦$¨4¨ sr§YYrV y r f y g ¤ ¦ ¦ Y ¤$D¨©¦ yrsY&41r1g ¨ f y g y ` ¨ YYasY g f y r f
¤ ¦ y g y ¤ ¦ y g 7Q41r1g "aYr ¦ y rf "QRY
¡
r YT0w¢
Programas dif´ciles 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
´ ´ Modificacion Dinamica de Programas (III)
Ejercicio: Definir un predicado que lea de un archivo F un diccionario, formado por hechos de la forma: leer de un archivo, debe utilizarse la siguiente estructura:
¨$0V1r¡ rY g y f ¤ $01Vr ¢ $Qp1Y Y ¨ g y f y g ¤ g g r $¨ 0111yr¡¤ r113¤ u ¥Q4f ¨ "u YFY g Y
´ Para leer un termino de un stream, debe utilizarse
.
Ejercicio: Definir un predicado que busque la palabra P en el diccionario leido con el predicado anterior, y proporcione en S el significado. Ejercicio: Definir un predicado significados de la palabra P.
que devuelva en L todos los
´ ´ Programacion Logica
¨
f r h g y 1YYYF4T¤F¡¤ 1QVQ¡0Yw f g YYrw1a
¨ ¨¤ ©¥¡¥Y1Vg
y a0a
g g h f g raYi011ra
¨ f f y 7 ¤ ¡$Yap
¨ g u$YwY0VY
F(V
¨ ¤ g 7¡¡¥YrVdV
g YrVdV
. Para
PROLOG