Sunteți pe pagina 1din 3

LISTA DE EXERCCIOS no8 PROLOG

conectivo
implicao
negao
conjuno
disjuno

conectivo na lgica dos predicados


(genitor(x,y) homem(x)) pai(x,y)
(homem(samuel))
(genitor(x,y) homem(x)) pai(x,y)
((pai(y,x) (mae(y,x)) homem(x)) filho(x,y)

conectivo em PROLOG
pai(X,Y) :- genitor(X,Y), homem(X).
not(homem(samuel)).
pai(X,Y) :- genitor(X,Y), homem(X).
filho(X,Y) :- pai(Y,X), homem(X).
filho(X,Y) :- mae(Y,X), homem(X).

ou
filho(X,Y) :- (pai(Y,X); mae(Y,X)),
homem(X).

bi-implicao

no existe um operador especfico

OBJETIVOS:
usar PROLOG para realizar provas sobre relaes de parentesco representadas e j formalizadas na questo 5 (5.1
a 5.3) da lista de exerccios n7;
usar PROLOG para definir regras recursivas sobre relaes de parentesco representadas e j formalizadas na
questo 5.4 da lista de exerccios n7.
ATIVIDADE 1: definir sexo das pessoas
passo 1: obtenha no AVA (ava.furb.br/unidade 04) a base de fatos e regras sobre relaes de parentesco
(familia.pl).
passo 2: carregue a base no SWI-PROLOG.
passo 3: execute as consultas:
a) para saber se Pedro homem, basta fazer a consulta:
?- homem(pedro).
true

A resposta ser true, pois no conjunto universo existe um homem chamado Pedro. Isto , na base de fatos
e regras existe um fato homem(pedro).
b) para saber se existe pelo menos um homem, basta fazer a consulta:
?- homem(X).
X = pedro <pressione ENTER>

A resposta ser pedro, pois na base de fatos e regras o primeiro fato correspondente ao predicado
homem(x) homem(pedro).
c) para saber quais so os homens do conjunto universo, basta fazer a consulta:
?- homem(X).
X = pedro <pressione ;>
X = fbio <pressione ;>
X = jean

d) qual o resultado das seguintes consultas:


consulta
?- not(homem(fbio)).

resultados

o que significa?

?- homem(joo).
?- not(homem(joo)).
?- homem(paula).
?- mulher(paula).
?- homem(X), write(X), fail.
?- homem(X), write(X), nl, fail.
?- homem(fbio,X).

e) escreva consultas para:


o que?
saber se existe pelo menos uma mulher
saber quais so as mulheres do conjunto universo

consulta

passo 4: edite o arquivo familia.pl e inclua os demais fatos correspondentes aos predicados homem(x) e mulher(x),
conforme formalizao da questo 5.1 da lista de exerccios n7. Cada vez que a base de dados for alterada,
necessrio carreg-la novamente.
ATIVIDADE 2: definir relao genitor(X,Y)
passo 1: execute as consultas:
a) para saber se Pedro genitor de Fbio, basta fazer a consulta:
?- genitor(pedro,fbio).
true

A resposta ser true, pois no conjunto universo Pedro genitor de Fbio. Isto , na base de fatos e regras
existe um fato genitor(pedro, fbio)
b) para saber quem so os genitores de Fbio, basta fazer a consulta:
?- genitor(P,fbio), genitor(M,fbio).

Pode-se obter como resposta P=M. Ento, deve-se reescrever a consulta da seguinte forma:
?- genitor(P,fbio), genitor(M,fbio), P\=M.

onde \= significa diferente.


c) qual o resultado das seguintes consultas:
consulta
?- genitor(X,fbio).

resultados

o que significa?

?- genitor(fbio,X).
?- genitor(pedro,X), genitor(X,jean).
?- genitor(paula,X), genitor(X,Y),
genitor(Y,cludia).
?- genitor(P,jean), genitor(M,jean),
homem(P), mulher(M).

d) escreva consultas para:


o que?

consulta

saber se Paula tem pelo menos um filho(a)


saber quais so os filhos(as) de Paula
saber a me Tatiana
saber a irm de Fbio
saber o pai de Jean e de Tatiana

passo 2: edite o arquivo familia.pl e inclua os demais fatos para genitor(X,Y), conforme formalizao da questo 5.2
da lista de exerccios n7. Cada vez que a base de dados for alterada, necessrio carreg-la novamente.
ATIVIDADE 3: definir regras
Para estabelecer a relao x pai de y, pode-se incluir uma regra na base de dados. Assim, a frmula da lgica de
predicados (x)((y)((genitor(x,y) homem(x)) pai(x, y))) equivalente seguinte regra PROLOG pai(X,Y) :genitor(X,Y), homem(X).

passo 1: a) qual o resultado das seguintes consultas:


consulta
?- pai(mrio,fbio).

resultados

o que significa?

?- pai(mrio,sara).

b) escreva consultas para:


o que?
saber quais so os filhos(as) de Mrio
saber quais so os pares (pai, filho(a)) da base de dados

passo 2: edite o arquivo familia.pl e inclua a regra abaixo:


me(X,Y):- genitor(X,Y), mulher(X).
me(X):- me(X,Y).

consulta

Qual o resultado da seguinte consulta:


consulta
?- me(marina).

resultados

o que significa?

?- me(joana).

passo 3: edite o arquivo familia.pl e inclua regras para as frmulas conforme formalizao da questo 5.3 da lista de
exerccios n7. Cada vez que a base de dados for alterada, necessrio carreg-la novamente.
passo 4: verifique se as frmulas esto corretas, testando-as.

ATIVIDADE 4: definir regras recursivas para as relaes de parentesco representadas na questo 5.4 da lista de
exerccios n7.
passo 1: edite o arquivo familia.pl e inclua as regras abaixo:
antepassado(X,Y):- genitor(X,Y).
antepassado(X,Y):- genitor(X,Z), antepassado(Z,Y).

A primeira regra define a relao antepassado direto, isto , para algum X, existe um Y, tal que se X for genitor
de Y, ento X antepassado de Y. J a segunda regra define a relao de antepassado indireto, isto , para
algum X, existe algum Y e existe algum Z, tal que se X for genitor de Z e Z for antepassado de Y, ento X
antepassado de Y.
passo 2: qual o resultado das seguintes consultas:
consulta
?- antepassado(mrio,jos).

resultados

o que significa?

?- antepassado(mrio,gabriel).
?- antepassado(mrio,cludia).
?- antepassado(mrio,patrcia).

passo 3: escreva consulta para:


o que?

consulta

saber quais so os antepassados de Cludia


saber quais so os descendentes de Mrio

passo 4: edite o arquivo familia.pl e inclua regras para definir a relao descendente(X,Y) x descendente de y,
usando a regra antepassado(X,Y) j definida. Cada vez que a base de dados for alterada, necessrio carreg-la
novamente.
passo 5: verifique se as regras esto corretas, testando-as.
passo 6: edite o arquivo familia.pl e inclua regras para definir a relao descendente(X,Y) x descendente de y,
sem usar a regra antepassado(X,Y) j definida. Cada vez que a base de dados for alterada, necessrio carreg-la
novamente.
passo 7: verifique se as regras esto corretas, testando-as.