Prolog

July 16, 2017 | Author: Alejandra Martinez Mendez | Category: First Order Logic, Model Theory, Programming Language, Truth, Logic
Share Embed Donate


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

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF