Introdução à Programação Lógica
MAC, Mat, EM (3\bo ano)

Exame de 1a Época - 1a Chamada

Data: 18 de Junho de 1997
Hora: 10:00

 
 
Dispõe de 3:00 horas para realizar este exame
 
Leia as questões com toda a atenção
e responda com calma e clareza em folha convencional

Questão 1

Para construir um Sistema de Informação para uma Unidade de Arqueologia, foram identificados as seguintes Entidades e Relações:
o Arqueólogo (descrito pelo código interno, nome e instituição onde trabalha) que fez numa Escavação (caracterizada por um identificador, local onde se situa e sector onde se está a escavar) e o Achado (descrito por um identificador, uma classe (tipo de objecto), o material e o estado de conservação) que é encontrado pelo Arqueólogo nessa Escavação.

Antes de se criar a Base de Dados Relacional, que servirá de suporte ao sistema informático final, está-se a pensar fazer um protótipo do sistema num ambiente de programação declarativo, lógico.

Responda, então, às alíneas seguintes:

a)
Escolha os predicados (indique o seu nome e todos os seus argumentos) que deve usar em Prolog para modelar as entidades e as relações entre elas (para concretizar a sua resposta, mostre como exemplo 1, ou 2, factos concretos para cada um desses predicados).
b)
De acordo com o modelo que escolheu acima, mostre como é que se podia determinar todos os Achados encontrados em qualquer Escavação da cidade de Braga .

%-------------------------

Questão 2

Suponha que possui uma Base de Conhecimento (BC) formada por factos correspondentes aos seguintes predicados

         %  pessoa(P) :- P 'e uma pessoa.
         %  jogo(J) :- J 'e um jogo.
         %  premio(P) :- P 'e um premio.
         %  pratica(S,J) :- O sujeito S (pessoa) joga J.
         %  monitor(S,J) :- O sujeito S (pessoa) ensina o jogo J.
         %  favorito(P,J) :- a pessoa P 'e um dos favoritos para ganhar o jogo J.
         %  ganha(S,J,P) :- P 'e o premio ganho pela pessoa S no jogo J.

escreva, então, as cláusulas convenientes para definir:

a)
um predicado valida/0 que percorre a BC e verifica se todos os factos relativos ao predicado ganha/3 estão semanticamente correctos, isto é, se S é uma pessoa, J é um jogo e P é um prémio.
b)
um predicado acresceFavorito(S,J) que acresenta à BC (no fim) um novo facto favorito/2 se e só se não existir ainda esse facto na BC (garante que não existirão repetições).
c)
um predicado jogador(S,J) que traduza a seguinte definição um indivíduo S é um jogador do jogo J se fôr um praticante dessa modalidade, se fôr um seu monitor, se fôr um favorito desse jogo, ou finalmente se já alguma vez tiver ganho um premio nesse jogo.
d)
um predicado palpitesCertos(J,LstPal) que construa uma lista LstPal com todos os jogadores de J que tinham sido indicados como favoritos e que efectivamente ganharam esse jogo.

%-------------------------

Questão 3

Analise atentamente a seguinte gramática escrita na notação lógica DCG

         frase     -->  exp, [';'].
         exp       -->  equac.
         exp       -->  interroga.
         equac     -->  expressao, ['='], expressao.
         interroga -->  ['?'], ['='], expressao.
         expressao -->  operando, resto.
         operando  -->  [num(N)].
         operando  -->  ['('], expressao, [')'].
         resto     -->  operador, expressao.
         resto     -->  [].
         operador  -->  ['+']  |  ['-']  |  ['/']  |  ['*'].

Responda, então, às alíneas seguintes:

a)
Diga qual a resposta de um Interpretador de Prolog (IP), à questão
         frase( [num(5),'+',num(3),'=',num(8),';'], [] ).
b)
Dê 1 exemplo de uma frase válida da linguagem definida pela DCG acima.
c)
Modifique a gramática supra de modo a permitir que cada frase tenha mais do que uma equação ou interrogação (mais do que uma exp).

%-------------------------

Questão 4

Observe com cuidado a seguinte Base de Factos

         % exerceProfRisco(S,P)  :-  a pessoa S exerce a profissao P que
         %                           'e de alto risco.
         exerceProfRisco(ana,professor) .   exerceProfRisco(rui,professor) .
         exerceProfRisco(to,metalurgico) .  exerceProfRisco(xico,bombeiro) .
         exerceProfRisco(marta,bombeiro) .  exerceProfRisco(hugo,fuzileiro) .
         % fumaMuito(P)  :- a pessoa P fuma muitos cigarros por dia.
         fumaMuito(sofia) .                 fumaMuito(rui) .
         fumaMuito(ze) .                    fumaMuito(mariana) .
         fumaMuito(pedro) .
         % dorme(S,H)  :- a pessoa S dorme em media H horas por noite.
         dorme(tita,7) .                    dorme(pedro,5) .
         dorme(joao,4) .                    dorme(ze,5) .
         dorme(sofia,6) .                   dorme(mariana,8) .
         % cardiaco(P) :- a pessoa P sofre de doenca do coracao.
         cardiaco(nuno) .
         cardiaco(necas) .
         cardiaco(andre) .

e o seguinte programa Prolog

         morreCedo(P) :-  exerceProfRisco(P,_).
         morreCedo(P) :-  fumaMuito(P),  dormePouco(P).
         morreCedo(P) :-  cardiaco(P).

         dormePouco(P) :-  dorme(P,H),  H < 6.

Responda, então, às alíneas seguintes:

a)
Usando a Árvore de Prova, diga qual a resposta de um Interpretador de Prolog (IP), à questão
         morreCedo( pedro ).
b)
Usando a Árvore de Procura, mostre todas as respostas que um Interpretador de Prolog (IP), daria à questão
         dormePouco( QUEM ).
c)
Usando a Árvore de Procura, mostre que um Interpretador de Prolog (IP), teria de fazer backtracking (automático) para responder afirmativamente, "yes", à questão
         morreCedo( nuno ).
d)
Como interpretaria o facto dum IP responder negativamente, "no", à questão
         morreCedo( joana ).

%-------------------------

Questão 5

Numa empresa fabricante de equipamento eléctrico para cozinhas, encontram-se as seguintes proposições sobre a constituição de um fogão:

Responda, então, às alíneas seguintes:

a)
Recorrendo apenas aos predicados parte-de e feito-em (note que uma palavra diferente não corresponde necessariamente a um predicado ou argumento distinto), escreva um conjunto de cláusulas Prolog que descrevam precisamente o conhecimento contido nas frases acima.
b)
Tomando em consideração a Base de Conhecimento criada na alínea anterior, diga como procederia, face a um Interpretador de Prolog, para obter resposta para às seguintes questões:
c)
Tomando em consideração a Base de Conhecimento criada na alínea a), escreva um predicado que permita determinar todos os objectos que fazem parte do fogão.

%-------------------------

Questão 6

Escreva em Prolog cláusulas adequadas (podendo recorrer, se necessário a predicados pré-definidos) para definir:

a)
O predicado diferenca(L1,L2,R) que será verdadeiro quando R fôr uma lista que resulta de se retirar de L1 os elementos que pertencem a L2. Por exemplo:
         ?- diferenca([a,b,c,d],[d,b,e,f],X).
         X = [a,c]
b)
O predicado pertence2(E1,E2,L) que deverá resultar verdadeiro quando E1 e E2 forem ambos elementos da lista L, com E1 precedendo E2. Exemplo:
         ?- pertence2(b,d,[a,b,c,d,e]).
         yes
         ?- pertence2(d,b,[a,b,c,d,e]).
         no

%-------------------------