Prolog
Short Description
Download Prolog...
Description
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Programación Lógica en Prolog Lenguajes de Programación
René Mac Kinney Romero UAM - Iztapalapa
13 de Febrero de 2012
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Historia Filosofía Modelo
Resumen Prolog
Sintaxis de Prolog
Estructuras de datos y tipos
Uso
Problemas
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Historia Filosofía Modelo
Resumen Prolog Historia Filosofía Modelo
Sintaxis de Prolog
Estructuras de datos y tipos
Uso
Problemas LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Historia Filosofía Modelo
Prolog
Programmation Loguique Desarrollado en los 70's como una alternativa a la programación tradicional. Se basa en el principio de Resolución de Robinson (1954).
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Historia Filosofía Modelo
Resumen Prolog Historia Filosofía Modelo
Sintaxis de Prolog
Estructuras de datos y tipos
Uso
Problemas LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Historia Filosofía Modelo
I Se programa basándose en relaciones y deducción. I Se describen las cosas utilizando lógica de primer orden. I Utiliza dos elementos fundamentales I I
Unicación Resolución
Ejemplo Lógica de primer orden. I Socrates es hombre. I Todos los hombres son mortales.
∴
Socrates es mortal.
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Proceso deductivo
Historia Filosofía Modelo
Modus ponens P P
→Q
Q Para nuestro ejemplo anterior. Si tenemos como conocimiento:
hombre(socrates) ∀x hombre(x )
→ mortal(x )
podremos deducir
mortal(socrates)
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Historia Filosofía Modelo
Unicación de Variables Dar valores a variables cuanticadas (∀x , ∃x ), estos valores se asignan solo una vez. Si se desea saber si a partir del conocimiento que tenemos la relación
mortal(socrates) es verdad
mortal(socrates)
pregunta en particular acerca de Socrates unicando las variables
hombre(socrates) → mortal(socrates) ∴ Socrates solo es mortal si es hombre. LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Principio de resolución
Historia Filosofía Modelo
Modus Tollens ¬Q P →Q ¬P
q(x) p(x) → q(x) p(x) ∴
Se asume falso es verdadero p(x) debería ser falso pero es verdadero
Lo que asumimos es falso, por lo que
LP 13I - René Mac Kinney Romero
q(x)
es verdadero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Historia Filosofía Modelo
Para el ejemplo tendremos que una vez hecha la unicación
mortal(socrates) hombre(socrates) → mortal(socrates) hombre(socrates)
Lo asumimos falso Es verdadero Debe ser falso Pero es verdad.
∴ mortal(socrates)
es verdadero
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Historia Filosofía Modelo
Ejemplo Abuelo
papa(x , z ), papa(z , y ) → abuelo(x , y ) papa(r,e). papa(e,j). papa(m,ma). papa(c,e). mama(r,m).
x es el abuelo de y si x es el papa de z y z el papa de y
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Historia Filosofía Modelo
Ejemplo ¾Es verdad que
abuelo(r,j)?
abuelo(r,j) papa(r,z ), papa(z ,j) → abuelo (r,j) papa(e,j) ∴ abuelo(r,j)
Asumimos falso Verdadero para que sea cierto z
= e.
Falso Pero es verdadero es verdadero
falta: papa(x , z ), mama(z , y )
→
LP 13I - René Mac Kinney Romero
abuelo(x , y ).
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Historia Filosofía Modelo
Resumen Prolog Historia Filosofía Modelo
Sintaxis de Prolog
Estructuras de datos y tipos
Uso
Problemas LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Historia Filosofía Modelo
Modelo
Un modelo es un esquema teórico, generalmente en forma matemática, de un sistema o de una realidad compleja, que se elabora para facilitar su comprensión y el estudio de su 1
comportamiento
1
Real Academia de la Lengua Española LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Historia Filosofía Modelo
Modelo en Prolog
Un modelo expresado en lógica de primer orden que representa un sistema complejo. Prolog no conoce el modelo, solo es capaz de decidir que cosas se derivan lógicamente de él.
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Elementos del lenguaje Predicados y Clausulas
Resumen Prolog
Sintaxis de Prolog
Estructuras de datos y tipos
Uso
Problemas
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Elementos del lenguaje Predicados y Clausulas
Resumen Prolog
Sintaxis de Prolog Elementos del lenguaje Predicados y Clausulas
Estructuras de datos y tipos
Uso
Problemas
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Elementos del lenguaje Predicados y Clausulas
Átomos Cadenas de caracteres empezando con minúscula que representan constantes. Variables Cadenas de caracteres empezando por una mayúscula. Functores Para combinar átomos y variables. En un objeto simple se tienen los functores como funciones. Todos los objetos estructurados en Prolog son términos.
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Elementos del lenguaje Predicados y Clausulas
Ejemplo Átomos y variables. Átomo: tom m234_as ha_ZAZ Variable: Tom X Y743Z
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Elementos del lenguaje Predicados y Clausulas
Ejemplo Functores. fecha
fecha(19,mayo,2003) minúsculas y parámetros según aridad
arbol
arbol(a, nil,nil)
h
h(a,b,c)
p
q(p(2,3),5)
p
q(p(a,b),c)
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Elementos del lenguaje Predicados y Clausulas
Ejemplo Términos. as x p(x,y) fecha(D,M,A)
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Elementos del lenguaje Predicados y Clausulas
Resumen Prolog
Sintaxis de Prolog Elementos del lenguaje Predicados y Clausulas
Estructuras de datos y tipos
Uso
Problemas
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Elementos del lenguaje Predicados y Clausulas
Prolog maneja relaciones entre términos. A estas relaciones también se les llama predicados (funciones booleanas). Cada relación se dene por el nombre de la relación y la aridad (el número de) términos con los que se da. Al escribir una relación se escribe un axioma (una relación que es verdad). parent(tom,pam). parent(pam,bob).
Ejemplo Axiomas para peano. par(cero). par(s(s(cero))).
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Elementos del lenguaje Predicados y Clausulas
Un programa de Prolog consiste en cláusulas (implicaciones entre los predicados) y axiomas. Cada cláusula tiene una cabeza y un
cuerpo. Estas cláusulas son de Horn por lo que solo hay un implicando.
∀X , Y • padre (X , Z ) ∧ padre (Z , Y ) → abuelo (X , Y ) En Prolog se escribe abuelo(X , Y )
|
{z
implicando cabeza
}
← si :-
padre (X , Z ), padre (Z , Y )
|
{z
conjunción predicados
}
cuerpo
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Elementos del lenguaje Predicados y Clausulas
Ejemplo Mas de peano. s(x , 0, x ). s(x ,y ,z )
→
s(x ,s(y ),s(z )).
par(cero). par(x )
→
par(s(s(x )))
par(s(s(cero))). par(s(s(s(cero)))). falso, pero si en nuestro modelo verdadero, todos pares excepto s(0).
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Elementos del lenguaje Predicados y Clausulas
La cabeza siempre tiene un predicado y el cuerpo tiene cero o más predicados separados por comas (que signica el conectivo lógico
∧
y), cuando el cuerpo tiene cero predicados tenemos un hecho (un axioma, algo que es verdad siempre). La cláusula comúnmente se lee Cabeza si Cuerpo
Ejemplo Algunas clausulas padre
(tom, bob) | {z }
se asume tom es papa de bob
átomos
abuelo(X,Y) :- padre(X,Z),padre(Z,Y)
X es abuelo de Y si X papa de Z y
Z papa de Y
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Elementos del lenguaje Predicados y Clausulas
Modus operandi A Prolog se le hacen preguntas, a las que se les llama metas. Con base a las cláusulas que tenga Prolog tratará de encontrar una derivación para la meta y responderá si cuando la encuentra. Las metas pueden contener uno o mas predicados. Por ejemplo la meta
padre (X , ana), padre (X , paty ) se lee como: Encontrar X en la relación padre tal que padre(X ,ana) y
padre(X ,paty) son verdaderos (es decir, que tienen el mismo papá) X = tom
⇔
padre(tom,ana) padre(tom,paty)
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Elementos del lenguaje Predicados y Clausulas
Programa en Prolog Un programa en Prolog es una serie de cláusulas de la forma:
cabeza1
← cuerpo1
cabeza2
← cuerpo2
. . . hecho1
←
hecho2
←
. . .
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Elementos del lenguaje Predicados y Clausulas
Ejemplo Familia Buendía
padre(nicanor,rebeca). madre(rebeca_montiel,rebeca). padre(jose_arcadio_buendia,jose_arcadio). madre(ursula,jose_arcadio). padre(jose_arcadio,arcadio). abuelo(X,Y):-padre(X,Z),padre(Y,Z).
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Elementos del lenguaje Predicados y Clausulas
Disyunción implícita Las clausulas abuelo(X ,Y ) abuelo(X ,Y)
← papa (X ,Z ), papa(Z ,Y ) ← papa (X ,Z ), mama(Z ,Y )
equivalen a: abuelo(X ,Y )
←
papa(X ,Z ),(papa(Z ,Y );mama(Z ,Y ))
Implícitamente se tiene la conjunción o (∨) entre las cláusulas en un programa, para ponerlo explícitamente se utiliza el símbolo ;. Se puede utilizar también en las preguntas:
papa(X , Y ); mama(X , Y )
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Listas Tipos
Resumen Prolog
Sintaxis de Prolog
Estructuras de datos y tipos
Uso
Problemas
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Listas Tipos
Resumen Prolog
Sintaxis de Prolog
Estructuras de datos y tipos Listas Tipos
Uso
Problemas
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Listas Tipos
Listas La única estructura de datos denida en Prolog es la lista. La lista se denota como:
[1, 2, 3]
lista con elementos 1, 2y 3.
Además se puede utilizar la notación:
[ |{z} 1 | [2, 3]] | {z } cabeza
resto
teniendo
[1|[2|[3|[]]]] Ambas notaciones son azúcar sintáctico para el functor ., el cual representa el constructor de una lista, por ejemplo:
[1, 2, 3] ⇒ .(1, [2, 3]) ⇒ (.(1, .(2, [3]))) ⇒ .(1, .(2, .(3, []))) LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Listas Tipos
Resumen Prolog
Sintaxis de Prolog
Estructuras de datos y tipos Listas Tipos
Uso
Problemas
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Listas Tipos
Tipos
En Prolog no hay tipos [1,hola,es,3,*] es válida. El único concepto que se maneja es el de símbolo el cual puede
mostrarse de varias formas. Cadena
Lista de números
hola
[104,11,108,97]
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Apareamiento
Listas Tipos
matching
Prolog utiliza un mecanismo de apareamiento para responder a las preguntas. Así, dados:
l([1,2,3]). l([1,4,5]). l([1,6,9]). La pregunta
? l([1,X|Xs]) responderá
X=2; X=4; X=6; LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Resumen Prolog
Sintaxis de Prolog
Estructuras de datos y tipos
Uso
Problemas
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
¾Para qué sirve Prolog?
I Razonamiento con símbolos. I Encuentra todas las soluciones. I Mecanismo de backtrack interconstruido. I Es declarativo.
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
¾Qué problemas puedo resolver con Prolog?
I IA. I I
Búsquedas. Razonamiento.
I Problemas difíciles (NP) I I I
Agente Viajero. Clan máximo. Juegos.
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Metro
Resumen Prolog
Sintaxis de Prolog
Estructuras de datos y tipos
Uso
Problemas
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Metro
Resumen Prolog
Sintaxis de Prolog
Estructuras de datos y tipos
Uso
Problemas Metro
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Metro
Lineas del Metro Lo más importante es encontrar una representación en Prolog que nos permita resolver el problema.
Ejemplo linea(N,Ls):Relación entre el número de línea y las estaciones que la conforman.
linea(1,[pantitlan,zaragoza,...]) linea(2,[tasqueña,general_anaya,ermita,...]) linea(3,[indios_verdes,deportivo_18,potrero,...]) . . .
linea(b,[buenavista,guerrero,...])
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Metro
Pertenencia de una estación a una linea member(X,[X|Xs]). member(X,[Y|Xs]):- member(X,Xs). Figura: Denición del predicado
member en Prolog.
El predicado member permite conocer los miembros de una lista, entonces le podemos hacer las siguientes preguntas a Prolog.
> member(ermita,[ermita,...]) Yes > linea(N,L), member(uami,L) N=8 L=[garibaldi,...] LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Metro
La importancia del orden en Prolog
Si pensamos en Prolog como un motor de búsqueda, el orden en que se hacen las preguntas es muy importante.
> member(la_raza,L),linea(3,L) ¾Cuál puede ser la diferencia?
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Metro
En Prolog las preguntas se evalúan de izquierda a derecha y se trata de responderlas con las clausulas empezando por la de mas arriba. Si con ella no es posible contestar la pregunta se ve la siguiente y así sucesivamente, es decir se evalúan clausulas de arriba a abajo.
p(X ) p(X )
← ←
q(X ),r(X ),s(X )
Primero trata esta
t(X ).
luego esta
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Metro
Clausulas como metas
Para quitar variables que no nos interesan creamos predicados.
en_linea_3(X) {z } | Predicado
:-
linea(3,L), member(X,L). | {z }
LP 13I - René Mac Kinney Romero
Pregunta a Prolog
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Metro
Estaciones en la misma linea
en_linea(N,X):- linea(N,L), member(X,L) misma(X,Y):- en_linea(L1,X), en_linea (L1,Y). Figura: Para saber si
X y Y en la misma linea.
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Variables
Metro
no importa
Cuando el valor de una variable no es importante es posible utilizar variables anónimas.
Ejemplo Transbordos Suponga tiene el predicado
transbordos(A, B , X )
que nos dice si
entre la linea A y la linea B existe un transbordo X . Sería posible escribir un predicado que nos diga si X es un transbordo como
transbordos(X) :- transbordos(_,_,X).
donde
transbordos(
_
, _, X ).
|{z}
la variable no importa
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
Prolog Sintaxis de Prolog Estructuras de datos y tipos Uso Problemas
Metro
Note que ambos predicados tienen el mismo nombre ya que es 2
posible
tener un mismo predicado con distintos parámetros o
aridad.
Esto resulta muy confuso en un principio por lo que se desaconseja esta práctica 2
LP 13I - René Mac Kinney Romero
Programación Lógica en Prolog
View more...
Comments