ejecución basada en consultaszacarias/fzf/ejerciciosprolog.pdf · razonamiento no monótono e....

21
Ejecución Basada en Consultas ?- consulta Var = Respuesta. El “.” representa fin de consulta El “;” representa busqueda de otra respuesta relacion(x1, x2, x3, …, xn):-premisa1(x1,x2),premisa2(x3,x4,x5). donde xi son términos x1, x2, x3, …, xn son argumentos de entrada y/o salida

Upload: others

Post on 02-May-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Ejecución Basada en Consultas

?- consulta

Var = Respuesta.

El “.” representa fin de consulta

El “;” representa busqueda de otra respuesta

relacion(x1, x2, x3, …, xn):-premisa1(x1,x2),premisa2(x3,x4,x5).

donde xi son términos

x1, x2, x3, …, xn son argumentos de entrada y/o salida

Relacion(Args-Entrada, Arg-Salida)

Ejemplo. Sea la relación primero

primero([X|_],X). La ejecución es

?- primero([a,b,c], X).

X = a

Obtener las respuestas

?- primero([X, b, c],a).

?- primero([X, Y], a).

?- primero(X, a).

?- primero([a, b, c], X).

X = a

?- primero([X, b, c], a).

X = a

?- primero([X, Y],a).

X = a

Y = Z

?- primero(X,a).

X = [a|Z]

¿Que nos da lo siguiente?:

?- primero(X, [a,b,c]). X = [[a, b, c] | Z]

En este caso el primer argumento representa el dato de entrada

[X | _]

Y el segundo argumento representa la salida o respuesta

primero([X|_],X).

El “.” finaliza la regla o hecho definido

Definir la relación resto(E, S) que se verifique si S es la lista obtenida a partir de la lista E, suprimiendo el primer elemento. Por ejemplo

resto([_|L], L).

?- resto([a|L], [b, c]).

L = [b, c]

?- resto(L, [b, c]).L = [X, b, c]

?- resto([a, b, c], L).

L = [b, c]

Obtener las respuestas a las siguientes

preguntas:

?- resto([a | L], [b, c]).

?- resto(L, [b, c]).

Solución de resto

Ejercicios PrologSea L = [hola, mundo, [thalia, [no]], [mia], ok]

Definir la expresiones siguientes:

1. Trae el elemento “no”

2. Trae el element [[[mia]]]

3. Trae la lista [[mia], [mia]]

4. Trae la lista [mia, mia]

5. Trae la lista [ok]

6. Trae element [hola]

trae_no([_,_,[_,[X]],_,_],X).

trae_mia([_,_,_,X,_],X).

trae_miamia([_,_,_,X,_],[X,X]).

trae_miamiasimple([_,_,_,[X],_],[X,X]).

trae_miamiasimple([_,_,_,[X],_],[X,X]).

trae_hola([X|_],[X]).

Definir la relación cons(X, L1, L2) que se verifique si L2 es la lista obtenida añadiéndole X a L1 como primer elemento. Por ejemplo,

cons(X, L, [X | L]).

?- cons(X, [b, c], [a, b, c]).X = a

?- cons(a, L, [a, b, c]).L = [b, c]

?- cons(a, [b, c], L).L = [a, b, c]

?- cons(X, [b, c], [a,b, c]).

?- cons(a, L, [a, b, c]).

?- cons(b, L, [a,b, c]).

?- cons(X, L, [a,b, c]).

Solución de cons

?- cons(b, L, [a, b, c]).No?- cons(X, L, [a, b, c]).X = aL = [b, c]

Definir la relación pertenece(X, L) que se verifique si X es un elemento de la lista L. Por ejemplo,

?- pertenece(b, [a, b , c], L).Yes

?- pertenece(d, [a, b , c], L).No

1. ¿Es c un elemento de [a, c, b, c]?

2. ¿Cuáles son los elementos de [a, b, a]?

3. ¿Cuáles son los elementos comunes de [a, b, c] y [d, c, b]?

Solución de pertenencia

pertenece(X, [X | _]).

pertenece(X, [_ | L]) :- pertenece(X,L).

Programación en Prolog

1. Definir la condición de paro

normalmente un número o bien Nil, dependiendo del algoritmo

2. Definición recursiva del problema

basada en como se procesen los datos contenidos en una lista

a. Representación de conocimiento

b. Algoritmos y complejidad en I.A.

c. Resolución de problemas declarative

d. Razonamiento no monótono

e. Agentes Inteligentes

f. Acertijos

AcertijosNotación de Edimburgo

En general, se requiere la base de conocimiento que permita lasolución de un acertijo constará de:

a) Un conjunto de hechos que permitan definir a los sujetos queintervienen.

b) Un conjunto de hechos y reglas para describir las pistas, indicios ycondiciones.

c) Una o más consultas, que permitan indagar a la base sobre todos oalgunos de los datos que completan la descripción de la situación.

Las Mujeres y sus Trabajos

Clara, Luisa, María y Ana son cuatro mujeres que aman sus trabajos. Ellastrabajan como diseñadora de moda, florista, jardinera y directora de orquesta.Cada mujer tiene un solo trabajo, y cada trabajo es ocupado por una sola mujer.Con las siguientes pistas, encontrar el trabajo realizado por cada mujer:

a) Clara es tremendamente alérgica a las plantas. b) Luisa y la florista comparten el departamento c) A María y Luisa les gusta solamente la música rock d) La jardinera, la diseñadora de modas y Ana no se conocen entre sí.

Las Mujeres y sus Trabajos … 1

Para comenzar es necesario identificar cuales son los sujetos que participan en el

problema, en este caso son mujeres y ocupaciones. Esto se describe con los

siguientes hechos:

mujer(clara).

mujer(luisa).

mujer(maria).

mujer(ana).

ocupacion(diseñadora).

ocupacion(florista).

ocupacion(jardinera).

ocupacion(directora_de_orquesta).

Las Mujeres y sus Trabajos … 2

A continuación es necesario comenzar a analizar cada una de las pistasmencionadas en el planteo del problema, con el objetivo de expresarlas enforma de hechos o reglas. Puede observarse que en todos los casos se trata deeliminaciones, por lo tanto se introduce un predicado no_es, el cuál esverdadero cuando su primer sujeto es una mujer que no tiene la ocupaciónindicada por el segundo sujeto.

La pista a)Sugiere que Clara no puede tener un trabajo relacionado

con plantas ya que es alérgica a ellas, por lo tanto se puedeninferir los siguientes hechos:

no_es(clara, florista).no_es(clara, jardinera).

1)

Las Mujeres y sus Trabajos … 3

La pista b)Si Luisa y la florista comparten el departamento, como dice la pista (b), no

pueden ser la misma persona, de lo que se deduce:

la pista c)permite obtener los siguientes hechos::

no_es(luisa, florista).

no_es(luisa, directora_de_orquesta).no_es(maria, directora_de_orquesta).

es decir, ni Luisa ni María pueden ser directoras de orquesta ya que a ellas

únicamente les gusta la música de rock.

2)

Dos hechos más se obtienen de la última pista al suponer que si Ana noconoce a la jardinera ni a la diseñadora de modas ella no puede tenertales ocupaciones:

no_es(ana, jardinera).

no_es(ana, diseñadora).

Los hechos obtenidos de las pistas a) y c) surgieron, en realidad, de haber

hecho inferencias previas, es decir de relacionar lo que dice el enunciado

con algo que era conocido de antemano. Con un nivel de complejidad un

poco mayor, se puede lograr que estas inferencias se hagan

automáticamente en el momento de la consulta. Para el primer caso por

ejemplo, todo lo que dice la pista a) es que Clara es alérgica a las plantas,

lo cual es directamente representable en Prolog de la siguiente manera:

pero hay datos que se usaron implícitamente para obtener los hechos

indicados en 4) y es que tanto la ocupación de jardinera como la de florista

están relacionadas con las plantas:

y además una mujer no puede tener una ocupación que esté relacionada

con algo a lo que es alérgica:

alergica(clara, plantas).3)

relacionado(jardinera, plantas).

relacionado(florista, plantas).4)

no_es(Mujer, Ocupacion) :- alergica(Mujer, X),

relacionado(Ocupacion, X).

5)

De manera que 1) puede ser reemplazado por 3), 4) y 5), obteniendo los

mismos resultados. Sin embargo, la segunda opción es preferible por sobre

la primera ya que representa con mayor fidelidad la información implícita

en la pista a).

En el mismo sentido la pista c) da cuenta que Luisa y María sólo escuchan música de rock, es decir:

solo_escucha(luisa, rock).

solo_escucha(maria, rock).6)

dicho estilo musical es incompatible con la profesión de directora de

orquesta:

incompatibles(directora_de_orquesta, rock). 7)

y, por otro lado, una mujer que sólo escucha determinada música no

puede tener una ocupación que sea incompatible con dicha música:

no_es(Mujer, Ocupacion) :- solo_escucha(Mujer,X),

incompatibles(Ocupacion,X).8)

Una forma más deseable de representar la pista c) se obtiene entonces al

reemplazar 2) por 6), 7) y 8).

Una pista más sutil dentro del enunciado del problema indicaba quecada mujer tiene un solo trabajo, y cada trabajo es ocupado por unasola mujer por lo que las cuatro mujeres elegidas y las cuatroocupaciones deben ser diferentes entre sí. Para garantizar estaunicidad se usa el predicado, un predicado llamado no_repetido queserá verdadero cuando sus cuatro sujetos sean distintos:

no_repetido(A, B, C, D) :- not(A == B),

not(A == C),

not(A == D),

not(B == C),

not(B == D),

not(C == D).

Tarea: Sobre líquidos venenosos

El Sr. Olvido, el químico, tiene seis frascos llenos de líquidos coloreados.

Hay uno de cada color: rojo, anaranjado, amarillo, verde, azul y violeta.

El señor Olvido sabe que algunos de esos líquidos son tóxicos, pero no

recuerda cuales...

Sin embargo, sí recuerda algunos datos. En cada uno de los siguientes

pares de frascos hay uno con veneno y otro no:

a) los frascos violeta y azul

b) los frascos rojo y amarillo

c) los frascos azul y anaranjado

El Sr. Olvido recuerda también que en estos otros pares de frascos

hay uno sin veneno:

d) el violeta y el amarillo

e) el rojo y el anaranjado

f) el verde y el azul

¡Ah! Casi lo olvido, añade el Sr. Olvido, el líquido del frasco rojo no

es venenoso.

¿Qué frascos tienen veneno?

URLs de documentos interesantes para aprender PROLOG

http://www.cs.us.es/~jalonso/pub/2006-ej_prog_declarativa.pdf

http://sedici.unlp.edu.ar/bitstream/handle/10915/24833/Documento_completo.pdf?sequence=1