prolog programming in logic alain colmerauer, universidad de marsella, 1972 inteligencia artificial,...

25
Prolog • PROgramming in LOGic • Alain Colmerauer, Universidad de Marsella, 1972 • Inteligencia artificial, proyecto quinta generación • ISO-Prolog • Basado en lógica formal, demostrador de teoremas lógicos • Programación declarativa

Upload: roberta-mato

Post on 11-Apr-2015

112 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica

Prolog

• PROgramming in LOGic• Alain Colmerauer, Universidad de Marsella, 1972• Inteligencia artificial, proyecto quinta generación• ISO-Prolog• Basado en lógica formal, demostrador de

teoremas lógicos• Programación declarativa

Page 2: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica

Hechos

• le_gusta_a(juan,maria).

• Comienzan con minúsculas

• Relación, objetos entre paréntesis separados por comas

• Punto al final

• El orden de los argumentos es relevante

• Terminología: argumentos, predicado

Page 3: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica

Hechos

• valioso(oro).

• hembra(ana).

• tiene(juan,oro).

• padre(juan,maria).

• da(juan,libro,maria).

Page 4: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica

Preguntas

• ?- tiene(maria,libro).

• Responde sí o no.

• no, no es lo mismo que falso, es que no se puede probar

Page 5: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica

Preguntas

• le_gusta_a(jose,pescado).

• le_gusta_a(jose,maria).

• le_gusta_a(maria,libro).

• le_gusta_a(juan,libro).

Page 6: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica

Preguntas

• ?- le gusta_a(jose,dinero).• no• ?- le gusta_a(maria,jose).• no• ?- le gusta_a(maria,libro).• yes• ?- presidente(juan,francia).• no

Page 7: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica

Variables

• Es pesado preguntar ¿le gustan a juan los libros? ¿le gusta a Juan María?

• Es más sensato pedir a prolog que nos diga qué le gusta a Juan.

• Esto en prolog es como preguntar ¿le gusta a Juan X?

• ?- le_gusta_a(juan,X)• Un variable puede estar instanciada o no

instanciada

Page 8: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica

Variables

• Comienzan por mayúscula

• La búsqueda en los hechos se realiza en el orden en que se introdujeron, las variables se van instanciando y se marcan las posiciones

• Por defecto una búsqueda (return), pero se pueden forzar más (; y return) siguiendo por donde se quedó.

Page 9: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica

Conjunciones

• ej: ¿se gustan juan y maria?

• ?- le_gusta_a(juan,maria), le_gusta_a(maria,juan).

• Se separan por comas, que se leen como “y”.

• Intenta satisfacer los objetivos por orden

• Las conjunciones y las variables se pueden conjugar para hacer preguntas más interesantes.

Page 10: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica

Conjunciones

• ej: ¿hay algo que le guste tanto a juan como a maria?

• ?- le_gusta_a(juan,X), le_gusta_a(maria,X).

• Cada objetivo guarda su propia marca de posición

• Reevaluación (backtracking).

si una variable se instancia, se instanciará en todos los lugares de la pregunta en los que aparezca la variable.

Page 11: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica

Reglas

• Regla frente a lista de hechos• Reglas para expresar definiciones• ej: X es un pájaro si:

X es un animal, y

X tiene plumas• X es hermana de Y si:

X es hembra, y

X e Y tienen los mismos padres

Page 12: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica

Reglas

• Una variable representa el mismo objeto siempre que aparece en una regla

• Una regla es una afirmación general sobre objetos y sus relaciones

• En prolog una regla se compone de una cabeza y un cuerpo unidos mediante “:-“, que se pronuncia “si”

Page 13: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica

Reglas

• La cabeza describe qué hecho es el que la regla intenta definir

• El cuerpo describe la conjunción de objetivos que deben satisfacerse, uno tras otro, para que la cabeza sea cierta

• ej: le_gusta_a(juan,X):- le_gusta_a(X,vino).

• ej: le_gusta_a(juan,X):- le_gusta_a(X,vino), le_gusta_a(X,comida).

Page 14: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica

Reglas

• ej: le_gusta_a(juan,X):- hembra(X), le_gusta_a(X,vino).

• Siempre que una variable X se instancia a algún objeto, todas las X se instancian dentro del ámbito de X.

• Para un determinado uso de una regla el ámbito de X es toda la regla, incluyendo la cabeza, y hasta el punto final de la regla

Page 15: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica

Reglas

varon(albert).

varon(edward).

hembra(alice).

hembra(victoria).

padres(edward,victoria,albert).

padres(alice,victoria,albert).

Page 16: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica

Reglas

hermana_de(X,Y):-

hembra(X),

padres(X,M,P),

padres(Y,M,P).• Un predicado estará definido por una mezcla

de hechos y de reglas. A unos y otras se las denomina como cláusulas de un predicado

Page 17: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica

Reglas

• ladron(juan).

• le_gusta_a(maria,comida).

• le_gusta_a(maria,vino).

• le_gusta_a(juan,X):- le_gusta_a(X,vino).

• puede_robar(X,Y):- ladron(X), le_gusta_a(X,Y).

Page 18: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica

Estructuras

• Functor y componentes

• ej: tiene(juan, libro ( cumbres_borrascosas, autor (emily,bronte))).

• Pueden participar en el proceso de pregunta-respuesta con variables

• ej: tiene(juan,libro(X,autor(Y,bronte))).

• Todos los elementos de prolog están formados por constantes, variables y estructuras

Page 19: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica

Operadores

• 3+4 <=> +(3,4)

• x+y*z <=> +(x,*(y,z))

• El resultado de las operaciones aritméticas se asigna con “is”

ej Y is X + Y.

• Igualdad X = Y, prolog intenta hacer coincidir X e Y.

• X \= Y, X < Y, X > Y, ...

Page 20: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica

Coincidencia (matching)

• Una variable sin instanciar coincide con cualquier objeto

• Un entero o un átomo sólo coindicidirá con él mismo

• Una estructura conincidirá con otra con el mismo functor y número de argumentos, debiendo coincidir todos los argumentos correspondientes.

Page 21: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica

Estructuras de datos: árboles

• padres(carlos,isabel,felipe).

• frase ( nombre (juan), sintagma_verbal (verbo(come), nombre (pan))).

Page 22: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica

Estructuras de datos: listas

• Secuencia ordenada de elementos

• Los elementos de una lista pueden ser cualquier término (constantes, variables, estructuras) incluyendo otras listas.

• [] lista vacía

• [los, hombres, [van, a, pescar]]

• [a,V1,b,[X,Y]]

Page 23: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica

Estructuras de datos: listas

• Las variables de una lista se tratan como si estuvieran en cualquier otra estructura

• Cabeza: primer elemento de la lista

• Cola: lista que contiene todos los elementos menos el primero

• lista: [a,b,c]

cabeza: a

cola: [b,c]

Page 24: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica

Estructuras de datos: listas

• Notación [X|Y],

lista con cabeza X y cola Y. Esto instanciará X a la cabeza de la lista e Y a la cola.

• miembro(X, [X|_]).

miembro(X, [_|Y]):- miembro(X,Y).

?- miembro(d, [a,b,c,d,e,f,g]).

yes

• Variable anónima “_”,

Page 25: Prolog PROgramming in LOGic Alain Colmerauer, Universidad de Marsella, 1972 Inteligencia artificial, proyecto quinta generación ISO-Prolog Basado en lógica