Examen de LOGICA COMPUTACIONAL Código:20360

Anuncio
Examen de LOGICA COMPUTACIONAL
Código:20360
Primera Convocatoria: 10/02/2004
Nombre:......................................................................
DNI:.................................Grupo:.....................................
En cada pregunta sólo se admite una respuesta. Las respuestas incorrectas no descuentan.
Cada problema vale 2 puntos y cada pregunta del test de teorı́a vale 0.5 puntos.
1)
2)
3)
4)
5)
6)
7)
8)
Ex.
a
a
a
a
a
a
a
a
Teorı́a
b c
b c
b c
b c
b c
b c
b c
b c
Ex. Prácticas
d
d
d
d
d
d
d
d
1)
2)
3)
4)
5)
1
a
a
a
a
a
b
b
b
b
b
c
c
c
c
c
d
d
d
d
d
TEST DE TEORÍA
1. Dado el enunciado: ”No todos los cuervos son negros”, en CP1 la(s) formalización(es)
será(n):
a) ¬∀x(cuervo(x) ∧ negro(x)).
b) ¬∃x(cuervo(x) → negro(x)).
c) ∀x(cuervo(x) ∧ ¬negro(x)).
d) ∀x(cuervo(x) → negro(x)).
2. Dado el siguiente problema: ”La gente alta o rubia son buenos deportistas. Mario es alto
pero no es rubio. Joan es rubio.”
a) El programa en Prolog serı́a:
deportista(X):-alto(X).
deportista(X):-rubio(X).
alto(mario), not(rubio(mario)).
rubio(joan).
b) El programa en Prolog serı́a:
deportista(X):-alto(X),rubio(X).
alto(mario), not(rubio(mario)).
rubio(joan).
d) El programa en Prolog serı́a:
deportista(X):-alto(X), rubio(X).
alto(mario).
not(rubio(mario)).
rubio(joan).
d) Ninguno de los anteriores.
3. Dada una pregunta y un programa en Prolog, el árbol SLD de derivación:
a) está completo cuando se encuentre la primera respuesta.
b) sirve para obtener la(s) respuesta(s) de la pregunta en Prolog pero no nos permite
saber si existen derivaciones (bucles) infinitos.
c) contiene como nodos los resolventes/las preguntas por resolver.
d) Ninguno de los anteriores.
4. Dado el programa en Prolog:
member(X,[Y|L]):-member(X,L).
member(X,[X|_]):-!.
y dada la pregunta:
2
?-member(X,[a,b,c]).
a)
b)
c)
d)
tiene una única respuesta X=a.
tiene tres respuestas X=a, X=b, X=c.
no tiene respuestas,
entra en un bucle infinito.
5. La fórmula de CP1 : ¬∀xA(x) ∧ ∃xB(x) en forma normal d’Skolem podrı́a ser:
a)
b)
c)
d)
¬A(a) ∧ B(b).
¬A(a) ∧ B(a).
a) y b).
a) y b) són falsas.
6. a) El que optimiza el tiempo y la memoria de la ejecución del programa en Prolog pero
no hace perder respuestas es el cut rojo.
b) El que optimiza el tiempo y la memoria de la ejecución del programa en Prolog pero
no hace perder respuestas es el cut verde.
c) Si queremos construir un predicado que tenga una única respuesta utilizarı́a un cut
verde.
d) Ninguno de los anteriores.
7. Las estrategias de resolución sirven para:
a)
b)
c)
d)
asegurar que la demostración del problema tenga respuesta.
optimizar el cálculo de resolventes y por lo tanto reducir el tiempo de demostración.
reescribir el problema de CP0 en Prolog.
Ninguno de los anteriores.
8. Una de las diferencias entre CP0 y CP1 es que:
a) CP0 no contiene funciones mientras CP1 sı́.
b) CP1 permite definir relaciones entre objetos y caracterı́sticas de los objetos en forma
de predicados y CP0 no.
c) CP1 permite cuantificar las variables de forma existencial o universal y CP0 no
d) Todas las anteriores.
PROBLEMA 1
Encontrar el modelo del siguiente problema formalizándolo en CP0 . Obtener la respuesta de
forma semántica (usando la tabla de verdad):
Conforme al Argumento de Simulación de Bostrom, por lo menos una de las siguientes
proposiciones es cierta: a) Las especies humanas es muy probable que acaben extinguidas antes
de alcanzar el estado posthumano, b) es improbable que alguna civilización posthumana hará
correr un numero significativo de simulaciones de antepasados, c) seguro que estamos viviendo
en una simulación por computador. Conforme al Argumento de Simulación de Doomsday, las
siguientes dos proposiciones son ciertas: a) seguro que las especies humanas no llegarán a ser
extinguidas antes de alcanzar el estado posthumano, b) seguro que no vivimos en una simulación
por computador. Suponiendo que los dos argumentos son ciertos, podemos concluir algo?!
3
PROBLEMA 2
Formalizar en CP1 y encontrar la respuesta al problema siguiente:
Pere es primo de José. Antonio es hermano de José. Todos los
primos son parientes. Todos los hermanos son parientes. Quién es
pariente de José?!
PROBLEMA 3
Tenemos un estanque bastante grande con dos orillas prominentes. En el estanque viven n ranas
”oscuras” y n ranas ”claras”. En un momento dado las ranas oscuras están en la orilla izquierda
del estanque y las claras en la derecha. De repente todas las ranas oscuras quieren ir a la orilla
opuesta del estanque y, a su vez, todas las ranas claras también quieren ir a su orilla opuesta.
Sin embargo, para ir de orilla a orilla las ranas han de cruzar el estanque a través de un camino
de 2n + 1 hojas que están sobre el agua. Ası́ las ranas oscuras empiezan a ocupar las hojas por
el lado de la izquierda y las claras por el de la derecha, de forma que quedan situadas como se
indica en el estado INICIAL de la figura 1. En esa misma figura se muestra el estado FINAL al
que quieren llegar las ranas. En todo momento, es decir, en cualquier estado entre el INICIAL
y el FINAL, hay exactamente una hoja libre.
Un problema añadido es que las hojas a duras penas se aguantan en la posición en que
se encuentran. Ası́ las ranas han de seguir unas restricciones concretas a la hora de moverse
(saltar):
R1. Para no tener que girar el cuerpo encima de las hojas todas las ranas se limitan a saltar
hacia adelante, nunca hacia atrás. Eso quiere decir que en nuestro caso las ranas oscuras
siempre van a saltar de izquierda a derecha y las claras de derecha a izquierda.
R2. Además de ser siempre hacia adelante, los saltos pueden ser ”SIMPLES” o ”POR ENCIMA”
(ver figura 1). En el salto SIMPLE una rana pasa de la hoja en la que está a la siguiente,
la cual debı́a estar vacı́a. En el salto POR ENCIMA una rana de un tipo salta por encima
de una rana de otro tipo para pasar a una hoja que debı́a estar vacı́a. Hacemos notar que
la rana por encima de la cual se salta está en la hoja siguiente a la rana saltante, y ésta
cae solo dos hojas más allá de su hoja de partida. Insistimos en que una rana de un tipo
no puede saltar por encima de una rana del mismo tipo. Estos saltos aseguran que en
cualquier hoja como mucho habrá una rana.
Se pide realizar en ProLog un programa que les diga a las ranas como ir de una orilla a la
otra cumpliendo las restricciones establecidas para los saltos. Para ello dividimos el problema
en dos apartados:
A. Implementar el predicado
saltoRana(TripletaEntrada,TripletaSalida),
donde TripletaEntrada es una variable instanciada con una lista en el momento de hacer
la llamada al predicado. Esta lista es de la forma [X,Y,Z] (tres elementos) y uno de estos
elementos será la constante ”h” (hoja) y los otros dos tendrán el valor ”o” (rana oscura)
o el valor ”c” (rana clara). El predicado tiene que devolver en TripletaSalida una lista,
también de la forma [A,B,C], resultado de realizar un salto de rana correcto (restricciones
R1 y R2) a partir de [X,Y,Z]. A continuación se muestran algunos ejemplos de ejecución:
4
Figure 1: Estados INICIAL y FINAL de la posición de las ranas, saltos permitidos (SIMPLE y POR
ENCIMA) y ejemplos de saltos incorrectos.
?- saltoRana([h,c,c],TS).
TS=[c,h,c];
no
?- saltoRana([o,h,c],TS).
TS=[o,c,h];
TS=[h,o,c];
no
?- saltoRana([o,c,h],TS).
TS=[h,c,o];
no
B. Implementar el predicado
cambiarOrilla(PosInicial,PosFinal,SecuenciaPosiciones),
donde PosInicial y PosFinal están instanciadas con dos listas en el momento de la
llamada al predicado. PosInicial codifica el estado de partida (INICIAL), que en el caso
de la figura 1 es [o,o,o,o,h,c,c,c,c], y PosFinal codifica el estado FINAL, que en
el ejemplo de la misma figura es [c,c,c,c,h,o,o,o,o]. Nótese que estas listas tienen
2n + 1 elementos. El elemento i-ésimo nos indica el estado de la i-ésima hoja (o: hay una
rana oscura, c: hay una rana clara, h: la hoja está vacı́a). Ası́ simpre hay n sı́mbolos
o, n sı́mbolos c, y 1 sı́mbolo h. Dicha n es desconocida, de forma que el predicado ha
de funcionar para cualquiera. Cuando este predicado acabe, SecuenciaPosiciones será
una lista de estados: su primer elemento será el estado INICIAL y el último el estado
FINAL, los elementos intermedios son los estados intermedios, donde para ir de un estado
al siguiente en la lista se ha de dar un salto correcto de rana. Nótese que como los estados
son listas, la variable SecuenciaPosiciones quedará instanciada con una lista de listas.
A continuación se muestran algunos ejemplos de ejecución:
?- cambiarOrilla([o,o,h,c,c],[c,c,h,o,o],SP).
5
SP=[[o,o,h,c,c],
[o,h,o,c,c],
[o,c,o,h,c],
[o,c,o,c,h],
[o,c,h,c,o],
[h,c,o,c,o],
[c,h,o,c,o],
[c,c,o,h,o],
[c,c,h,o,o]];
... (más soluciones) ...
?-cambiarOrilla([o,o,o,o,h,c,c,c,c],[c,c,c,c,h,o,o,o,o],SP).
SP=[[o,o,o,o,h,c,c,c,c],
[o,o,o,h,o,c,c,c,c],
... (más estados intermedios) ...,
[c,c,c,c,o,h,o,o,o],
[c,c,c,c,h,o,o,o,o]];
... (más soluciones) ...
Comentarios a tener en cuenta.
1. Insistimos en que el número de ranas de cada clase, n, es arbitrario y desconocido. Pero
en todo momento podemos asumir que las ranas oscuras siempre saltan de izquierda a
derecha y las claras de derecha a izquierda. Ası́ mismo también se suponen siempre 2n + 1
hojas.
2. Aunque para facilitar la descripción de los saltos hemos hablado de saltos SIMPLES y saltos
POR ENCIMA, el predicado saltoRana no necesita hacer esta distinción internamente.
3. No es necesario utilizar predicados como member, append, etc., es decir los predicados a
desarrollar son autocontenidos. Sin embargo, para facilitar la codificación del predicado
cambiarOrilla, podéis suponer implementados los predicados siguientes:
(a) extraerTripleta(PosRanas,Tripleta), donde PosRanas está instanciado con una
lista de las ya mencionadas que codifica el estado de todas las hojas. En Tripleta
el predicado devuelve una lista tipo [X,Y,Z] que corresponde a cualquier sublista de
PosRanas que contenga el valor h. Se entiende que X,Y, y Z son elementos consecutivos
en PosRanas (uno de ellos es la h). Ası́ este predicado como mucho tiene 3 soluciones.
A continuación se muestran ejemplos de ejecución:
?- extraerTripleta([o,o,o,o,h,c,c,c,c],T).
T=[o,o,h];
T=[o,h,c];
T=[h,c,c];
no
?- extraerTripleta([h,c,o,c,o,c,o,c,o],T).
T=[h,c,o];
no
(b) reemplazarTripleta(PosRanas,TripletaABuscar,TripletaNueva,PosRanasNueva),
donde PosRanas tiene el mismo significado que en el caso anterior, y TripletaABuscar
y TripletaNueva son listas de tres elementos que se le pasan al predicado. Este predicado devuelve en PosRanasNueva el resultado de buscar la sublista TripletaABuscar
6
en PosRanas y sustituirla por TripletaNueva. Si TripletaABuscar no es sublista
de PosRanas la llamada acaba en falso. A continuación se muestran ejemplos de
ejecución:
?-reemplazarTripleta([o,o,o,o,h,c,c,c,c],[o,o,h],[1,1,1],PRN).
PRN=[o,o,1,1,1,c,c,c,c];
no
?-reemplazarTripleta([o,o,o,o,h,c,c,c,c],[2,2,2],[1,1,1],PRN).
no
Además, para realizar el predicado cambiarOrilla podéis llamar al predicado saltoRana
independientemente de que lo hayáis codificado correctamente o no.
4. Se pueden utilizar las siguientes abreviaciones:
sR:=saltoRana
cO:=cambiarOrilla
eT:=extraerTripleta
rT:=reemplazarTripleta
5. Finalmente, comentar que el código total entre los dos predicados a implementar es de
unas 12 lı́neas. Ah! y no se necesitan listas auxiliares.
TEST DE PRÁCTICAS
Todas las preguntas de este test se enmarcan en el contexto de la práctica de ProLog realizada
a lo largo de las tres últimas sesiones de prácticas.
1. Recordemos el predicado
lateralesComplementarios(Lateral1,Lateral2,NivelDeComplementariedad).
Señalar cual de las afirmaciones siguientes es la correcta:
a) El NivelDeComplementariedad tiene que ser total si los laterales 1 y 2 provienen de
caras que hemos de encajar verticalmente y parcial si vienen de caras que hemos de
encajar horizontalmente.
b) El NivelDeComplementariedad tiene que ser total si los laterales 1 y 2 provienen de
caras que hemos de encajar horizontalmente y parcial si vienen de caras que hemos
de encajar verticalmente.
c) Da igual que el valor sea total o parcial siempre que se utilize el mismo para el caso
de caras verticales y horizontales.
d) Ninguna de las anteriores.
2. Recordemos el predicado posicionarCara(Cara,CaraPosicionada). Señalar cual de las
afirmaciones siguientes es la correcta suponiendo que pedimos a ProLog todas las soluciones
posibles de este predicado:
a) Siempre devuelve 8 soluciones.
b) Siempre devuelve 4 soluciones.
c) Dependiendo del perfil de los laterales de la cara de entrada (”las listas de ceros y
unos”) el número de soluciones varı́a.
7
d) Ninguna de las anteriores.
3. Recordemos que los huecos de los laterales de las caras los codificamos con el sı́mbolo ”0”.
Supongamos que queremos cambiar el ”0” por otro sı́mbolo, por ejemplo, una ”a”. Señalar
cual de las afirmaciones siguientes es la correcta:
a)
b)
c)
d)
Tendrı́amos que recodificar predicados como el lateralesComplementarios.
Lo único que tenemos que hacer es sustituir hueco(0) por hueco(a).
No se puede calcular el impacto.
Ninguna de las anteriores.
4. Sea el código ProLog siguiente:
p(cara(_,lados(_,_,A,_)),
cara(_,lados(_,_,B,_)),
cara(_,lados(_,_,C,_)),
cara(_,lados(_,_,D,_)),
Cara,CaraEncajada):q(A,B,C,D,X,Y,Z,T),
r(X,Y,Z,T,Cara,CaraEncajada).
Señalar cual de las afirmaciones siguientes es la cierta:
a) Si q equivale al predicado combinarEsquinas y r equivale al predicado encajarCaraHorizontal
entonces p equivale al predicado encajarBase.
b) Si q equivale al predicado encajarCaraHorizontal y r equivale al predicado combinarEsquinas
entonces p equivale al predicado encajarBase.
c) Si q equivale al predicado combinarEsquinas y r equivale al predicado encajarCaraHorizontal
entonces p equivale al predicado encajarTapa.
d) Si q equivale al predicado encajarCaraHorizontal y r equivale al predicado combinarEsquinas
entonces p equivale al predicado encajarTapa.
5. Sea el código ProLog siguiente:
p(cara(_,lados(A,_,_,_)),
cara(_,lados(B,_,_,_)),
cara(_,lados(C,_,_,_)),
cara(_,lados(D,_,_,_)),
Cara,CaraEncajada):q(A,B,C,D,X,Y,Z,T),
r(X,Y,Z,T,Cara,CaraEncajada).
Señalar cual de las afirmaciones siguientes es la cierta:
a) Si q equivale al predicado combinarEsquinas y r equivale al predicado encajarCaraHorizontal
entonces p equivale al predicado encajarBase.
b) Si q equivale al predicado encajarCaraHorizontal y r equivale al predicado combinarEsquinas
entonces p equivale al predicado encajarBase.
c) Si q equivale al predicado combinarEsquinas y r equivale al predicado encajarCaraHorizontal
entonces p equivale al predicado encajarTapa.
d) Si q equivale al predicado encajarCaraHorizontal y r equivale al predicado combinarEsquinas
entonces p equivale al predicado encajarTapa.
8
Soluciones de los test
1)
2)
3)
4)
5)
6)
7)
8)
Ex.
X
a
a
a
X
a
a
a
Teorı́a
b c
b c
b X
X c
b c
X c
X c
b c
Ex. Prácticas
d
X
d
d
d
d
d
X
1)
2)
3)
4)
5)
a
X
a
X
a
X
b
X
b
b
c
c
c
c
X
d
d
d
d
d
Solución del Problema 1
Supongamos que tenemos las siguientes formalizaciones:
a) -> Las especies humanas es muy probable que acaben extinguidas antes de alcanzar el
estado posthumano,
b) -> Alguna civilización posthumana hará correr un numero significativo de simulaciones
de antepasados,
c) -> Estamos viviendo en una simulación por computador.
Conforme el Argumento de Simulación de Bostrom, a ∨ ¬b ∨ c
Conforme el Argumento de Simulación de Doomsday: ¬a ∧ ¬c
a) seguro que las especies humanas no llegarán a ser extinguidas antes de alcanzar el estado
posthumano,
b) seguro que no vivimos en una simulación por computador.
1)
2)
3)
4)
5)
6)
7)
8)
a
1
0
0
1
1
0
1
0
b
0
1
0
1
0
1
1
0
c
0
0
1
0
1
1
1
0
Bostrom
1
0
1
1
1
1
1
1
Doomsday
0
1
0
0
0
0
0
1
los dos argumentos
0
0
0
0
0
0
0
1
Por lo tanto, las especies humanas no acabarán extinguidas antes de alcanzar el estado
posthumano, ninguna civilización posthumana hará correr un numero significativo de simulaciones de antepasados, ni estamos viviendo en una simulación por computador.
Solución del Problema 2
a) Formalización:
Supongamos que:
p es una constante que denomina pere
j es una constante que denomina josé
a es una constante que denomina antonio
9
c(x,y) es un predicado que denomina: x es primo a y, donde x e y son variables,
h(x,y) es un predicado que denomina: x es hermano a y
p(x,y) es un predicado que denomina: x es pariente a y
El problema se formaliza de la manera siguiente:
c(p, j)
h(a, j)
∀x∀y(c(x, y) → p(x, y))
∀x∀y(h(x, y) → p(x, y)))
—————————
∃rp(r, j) donde r es una variable.
b) Supongamos que la deducción es incorrecta. Por lo tanto existe una interpretación para
cual la conclusión p(r, j) es falsa. Obtendremos:
c(p, j) ∧ h(a, j) ∧ ∀x∀y(c(x, y) → p(x, y)) ∧ ∀x∀y(h(x, y) → p(x, y)) ∧ ¬∃rp(r, j)
Eliminamos la implicación:
c(p, j) ∧ h(a, j) ∧ ∀x∀y(¬c(x, y) ∨ p(x, y)) ∧ ∀x∀y(¬h(x, y) ∨ p(x, y)) ∧ ¬∃rp(r, j)
Movemos la negación hacia los predicados:
c(p, j) ∧ h(a, j) ∧ ∀x∀y(¬c(x, y) ∨ p(x, y)) ∧ ∀x∀y(¬h(x, y) ∨ p(x, y)) ∧ ∀r¬p(r, j)
Renombramos las variables con la sustitución s = {x|z, y|t} para evitar las coincidencias de
nombres:
c(p, j) ∧ h(a, j) ∧ ∀x∀y(¬c(x, y) ∨ p(x, y)) ∧ ∀z∀t(¬h(z, t) ∨ p(z, t)) ∧ ∀r¬p(r, j)
Sacamos adelante los cuantificadores:
∀x(c(p, j) ∧ h(a, j) ∧ ∀y(¬c(x, y) ∨ p(x, y)) ∧ ∀z∀t(¬h(z, t) ∨ p(z, t)) ∧ ∀r¬p(r, j)) ⇔
∀x∀y(c(p, j) ∧ h(a, j) ∧ (¬c(x, y) ∨ p(x, y)) ∧ ∀z∀t(¬h(z, t) ∨ p(z, t)) ∧ ∀r¬p(r, j)) ⇔
∀x∀y∀z∀t(c(p, j) ∧ h(a, j) ∧ (¬c(x, y) ∨ p(x, y)) ∧ (¬h(z, t) ∨ p(z, t)) ∧ ∀r¬p(r, j)) ⇔
∀x∀y∀z∀t∀r(c(p, j) ∧ h(a, j) ∧ (¬c(x, y) ∨ p(x, y)) ∧ (¬h(z, t) ∨ p(z, t)) ∧ ¬p(r, j))
Skolemización:
c(p, j) ∧ h(a, j) ∧ ((¬c(x, y) ∨ p(x, y))) ∧ ((¬h(z, t) ∨ p(z, t))) ∧ ¬p(r, j))
La fórmula clausal será:
{(c(p, j)}{h(a, j)}{(¬c(x, y) ∨ p(x, y))}{(¬h(z, t) ∨ p(z, t))}{¬p(r, j)}
Finalmente la resolución la encontramos en la figura 2.
Figure 2: Resolución final del problema2.
10
Solución del Problema 3
saltoRana([h,c,X],[c,h,X]).
saltoRana([h,o,c],[c,o,h]).
saltoRana([X,h,c],[X,c,h]).
saltoRana([o,h,X],[h,o,X]).
saltoRana([o,c,h],[h,c,o]).
saltoRana([X,o,h],[X,h,o]).
cambiarOrilla(ListaFinalDeRanas,ListaFinalDeRanas,[ListaFinalDeRanas]).
cambiarOrilla(ListaActualDeRanas,ListaFinalDeRanas,
[ListaActualDeRanas|RestoListasDeRanas]):extraerTripleta(ListaActualDeRanas,Tripleta),
saltoRana(Tripleta,TripletaSalto),
reemplazarTripleta(ListaActualDeRanas,Tripleta,TripletaSalto,ListaNuevaDeRanas),
cambiarOrilla(ListaNuevaDeRanas,ListaFinalDeRanas,RestoListasDeRanas).
11
Descargar