Você está na página 1de 24

DANIELLE OLIVEIRA NUNES - 30801

LUDIMILA JÁCOME MACHADO - 25868

Relatório 1
PROLOG

Itabira - MG
2019
DANIELLE OLIVEIRA NUNES - 30801
LUDIMILA JÁCOME MACHADO - 25868

Relatório 1
PROLOG

Universidade Federal de Itajubá – Campus Itabira


Professor Doutor Sandro Carvalho Izidoro
Inteligência Artificial

Itabira - MG
2019
”Cem vezes todos os dias lembro a mim mesmo que minha vida interior e exterior,
depende dos trabalhos de outros homens, vivos ou mortos, e que devo esforçar-me a fim
de devolver na mesma medida que recebi.”
(Albert Einstein)
LISTA DE ILUSTRAÇÕES

Figura 1 – Árvore genealógica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7


Figura 2 – Resultado para a regra do avô . . . . . . . . . . . . . . . . . . . . . . . 8
Figura 3 – Resultado para a regra do cônjuge . . . . . . . . . . . . . . . . . . . . 9
Figura 4 – Resultado para a regra do irmão ou irmã . . . . . . . . . . . . . . . . . 9
Figura 5 – Resultado para a regra da mãe . . . . . . . . . . . . . . . . . . . . . . 10
Figura 6 – Resultado para a regra do pai . . . . . . . . . . . . . . . . . . . . . . . 10
Figura 7 – Resultado para a regra do primo ou prima . . . . . . . . . . . . . . . . 10
Figura 8 – Resultado para a regra do tio ou tia . . . . . . . . . . . . . . . . . . . 11
Figura 9 – Resultado para a regra da avó . . . . . . . . . . . . . . . . . . . . . . . 11
Figura 10 – Tabela Verdade da proposição 3.1 . . . . . . . . . . . . . . . . . . . . . 15
Figura 11 – Tabela Verdade da proposição 3.2 . . . . . . . . . . . . . . . . . . . . . 16
Figura 12 – Tabela Verdade da proposição 3.3 . . . . . . . . . . . . . . . . . . . . . 16
Figura 13 – Teste feito para programa dado na questão 6 . . . . . . . . . . . . . . . 19
SUMÁRIO

1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

3 Resolução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.1 Exercício 01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.2 Exercício 02 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.3 Exercício 03 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.4 Exercício 04 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.5 Exercício 05 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.6 Exercício 06 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.7 Exercício 07 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

4 Considerações Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

5 Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5

1 INTRODUÇÃO

De acordo com CORTINO (2019), PROLOG é uma linguagem de programação


simples, embora poderosa, fundamentada na lógica simbólica. Foi desenvolvida na Uni-
versidade de Marselha, França, com o intuito de ser uma ferramenta prática para pro-
gramação em lógica. De forma semelhante a LISP, PROLOG é uma linguagem interativa
projetada primeiramente para processamento de dados simbólicos. Ambas as linguagens
são ferramentas para desenvolvimento de aplicações da área de Inteligência Artificial, es-
tando baseadas em sistemas matemáticos formais: PROLOG, baseada em um subconjunto
poderoso da lógica clássica, é usada para definição de relações. A linguagem PROLOG
é baseada em um provador de teoremas para cláusulas de Horn. A estratégia específica
utilizada é uma forma restrita de resolução linear de entrada.
PROLOG é uma linguagem de programação usada para solucionar problemas que
envolvem objetos e relações entre objetos. Programas em PROLOG consistem de:

∙ declaração de alguns fatos sobre objetos e seus relacionamentos;

∙ definição de regras sobre os objetos e seus relacionamentos;

∙ resposta a consultas sobre objetos e seus relacionamentos.

A programação em PROLOG permite ignorar a maioria dos detalhes referentes a


como um programa é executado. A linguagem PROLOG foi projetada de forma a permitir
que o utilizador forneça comandos sobre alguma coisa que seja logicamente verdadeira de
modo que o interpretador PROLOG possa tirar conclusões; não requer que se especifique
como um programa deve ser executado, mas que se especifique com o que as soluções de
um problema se parecem. PROLOG provêm de PROgramação em LÓGica. Em lógica,
define-se, a grosso modo, um teorema e se pesquisa fatos e regras para verificar a vali-
dade do teorema. De forma análoga à lógica, PROLOG é usado para expressar fatos e
relacionamentos entre esses fatos, e para inferir soluções para problema.
6

2 OBJETIVOS

O objetivo deste trabalho é desenvolver rotinas através da linguagem PROLOG,


com o intuito de imersão nos conteúdos estudados e ambientação na plataforma de pro-
gramação, a fim de que os discentes possam descobrir as aplicações disponíveis no mesmo.
7

3 RESOLUÇÃO

3.1 Exercício 01
Implementar um progama em PROLOG para a árvore genealógica. Implementar
regras para pai, mãe, avô, avó, irmão, irmã, primo, prima, tio e tia.
SOLUÇÃÕ DO EXERCÍCIO 01:
A figura 1 mostra a árvore genealógica que foi criada para resolução do problema.

Figura 1 – Árvore genealógica

Fonte:Autoria Própria

homem(joao).
homem(joaquim).
homem(pedro).
homem(jose).
homem(vitor).
mulher(amanda).
mulher(maria).
mulher(bruna).
mulher(alice) .
mulher(luzia).
mulher(ana).
genitor(joao, pedro).
genitor(joao, maria).
Capítulo 3. Resolução 8

genitor(amanda, pedro).
genitor(amanda, maria).
genitor(pedro, jose ) .
genitor(pedro, vitor ) .
genitor( luzia , jose ) .
genitor( luzia , vitor ) .
genitor(joaquim, bruna).
genitor( alice , bruna).
genitor(joaquim, augusto).
genitor( alice , augusto).
genitor(augusto, caio) .
genitor( isa , caio) .
genitor( vitor ,ana).
genitor(bruna,ana).

avoh(X,Z):− pai(X,Y), genitor(Y,Z).


conjuge(X,Y):−genitor(X,Z),genitor(Y,Z), X \= Y.
irmao(X,Y):−pai(Z,X) , pai(Z,Y), X \= Y.
mae(X,Y):− mulher(X), genitor(X,Y)
pai(X,Y):− homem(X), genitor(X,Y).
primo(X,Y) :−genitor(Z,X),genitor(M,Y),irmao(Z,M), X \= Y.
tioa(X,Y):−genitor(M,X),genitor(M,Z),genitor(Z,Y), X \= Y.
avom(X,Z):− mae(X,Y), genitor(Y,Z).

Para mostrar o funcionamento das regras criadas, foi realizdo um texto no SWI
Prolog Online e os resultados são mostrados nas oito figuras a seguir.

Figura 2 – Resultado para a regra do avô

Fonte:Autoria Própria

A figura 2 foi um exemplo que mostrou quem é o avô de Caio. Assim como feito
Capítulo 3. Resolução 9

com o Caio, poderia ser feito com Ana, José ou Vitor. Bem como procurado de quem
"fulano"é avô a partir de: avoh(joaquim,X). Neste caso, a resposta seria Caio.

Figura 3 – Resultado para a regra do cônjuge

Fonte:Autoria Própria

A figura 3 foi um exemplo que mostrou quem é o conjuge de Isa. Outros exemplos
também podem ser testados. Bem como procurado de quem "fulano"é cônjuge montando
a mesma estrutura do caso no avô, conforme explicado para a figura 2.

Figura 4 – Resultado para a regra do irmão ou irmã

Fonte:Autoria Própria

A figura 4 foi um exemplo que mostrou quem é o/a irmão/ã de Pedro. Outros
exemplos também podem ser testados.
A figura 5 foi um exemplo que mostrou quem é mãe de Bruna. Outros exemplos
também podem ser testados.
A figura 6 foi um exemplo que mostrou quem é o filho de João. Neste caso, a
estrutura que foi utilizada para fazer o teste foi diferente dos exemplos anteriores. E
obteve-se duas soluções para este caso. Neste caso, também pode-se testar o código com
outras pessoas.
Capítulo 3. Resolução 10

Figura 5 – Resultado para a regra da mãe

Fonte:Autoria Própria

Figura 6 – Resultado para a regra do pai

Fonte:Autoria Própria

Figura 7 – Resultado para a regra do primo ou prima

Fonte:Autoria Própria

A figura 7 foi um exemplo que mostrou quem é primo de Ana. Para este tipo de
relacionamento familiar, especificamente nesta família fictícia, nao tem outro exemplo a ser
Capítulo 3. Resolução 11

dado, pois são os únicos primos. Somente podemos modificar o teste para: primo(caio,X).

Figura 8 – Resultado para a regra do tio ou tia

Fonte:Autoria Própria

A figura 8 foi um exemplo que mostrou quem é tio ou tia de Ana. Outros exemplos
também podem ser testados.

Figura 9 – Resultado para a regra da avó

Fonte:Autoria Própria

A figura 9 foi um exemplo que mostrou quem é o neto de Amanda. Este caso, foi o
mesmo da 6, quando fala-se de estrutura do teste realizado. Neste caso, também pode-se
testar o código com outras pessoas.
Capítulo 3. Resolução 12

3.2 Exercício 02
Considere uma base de fatos em Prolog para registrar relacionamentos afetivos
envolvendo o sexo, o gosto por filmes e o gosto por faixa etária do parceiro. A partir dessa
base, inclua mais fatos e implemente as seguintes regras:

(a) afinidade_filme(X,Y) % Seleciona pessoas com o mesmo gosto de filme.

(b) casal(X,Y) % Seleciona casais (sexos diferentes).

(c) casal_afinidade_filme(X,Y) % Seleciona casais com o mesmo gosto de filme.

(d) casal_afinidade_idade(X,Y) % Seleciona casais cujos gostos de faixa etárias sejam


atendidos.

(e) casal_total(X,Y) % Seleciona casais com afinidade em filme e faixa etária.


Capítulo 3. Resolução 13

SOLUÇÃÕ DO EXERCÍCIO 02:

%Dados
homem(pedro).
homem(marcos).
homem(ze).
homem(matheus).
homem(samuel).

mulher(maria).
mulher(joana).
mulher(danielle) .
mulher(carla).

idade(carla ,27) .
idade( danielle ,23) .
idade(ze,30) .
idade(maria,40).
idade(marcos,20).
idade(pedro,25).
idade(samuel,22).
idade(joana,28).
idade(matheus,26).

gosta(carla ,aventura).
gosta(ze,aventura).
gosta(matheus,comedia).
gosta( danielle ,romance).
gosta( danielle ,comedia).
gosta(matheus,terror).
gosta(maria,comedia).
gosta(joana,romance).
gosta(marcos,terror) .
gosta(samuel,comedia).
gosta(marcos,romance).
gosta(pedro,romance).
gosta(maria,romance).

escuta(maria,sertanejo) .
escuta(marcos,rock).
Capítulo 3. Resolução 14

escuta(matheus,pop).
escuta( danielle , sertanejo) .
escuta( danielle ,pop).
escuta(matheus,sertanejo).
escuta(carla ,rock).
escuta(pedro,jazz) .
escuta(pedro,pop).
escuta(samuel,pop).
escuta(samuel,rock).
escuta(joana,sertanejo) .
escuta(ze,rock).
escuta(marcos,sertanejo).
escuta(joana,pop).
escuta(carla , jazz) .

opcao(ze,26,30). % significa que o z gostaria de se relacionar com pessoas entre 26


a 30 anos
opcao(marcos,18,30).
opcao(maria,25,55).
opcao(danielle ,18,35) .
opcao(matheus,18,30).
opcao(pedro,20,35).
opcao(joana,25,35).
opcao(carla,18,40) .
opcao(samuel,18,27).

(a)
afinfilme (X,Y):−
gosta(X,F),gosta(Y,F),
X \== Y.

(b)
casal(X,Y):−
(homem(X),mulher(Y));
(mulher(X),homem(Y)).

(c)
casalafinfilme (X,Y):−
casal(X,Y),afinfilme(X,Y).
Capítulo 3. Resolução 15

(d)
afinidade(X,Y):−
opcao(X,L,M),idade(Y,K),K>=L,K=<M, X \== Y,casal(X,Y).

(e)
afintotal (X,Y):− casalafinfilme(X,Y),afinidade(X,Y), X \== Y..

(f) outros fatos:

afinmusica(X,Y):−
escuta(X,M),escuta(Y,M), X \== Y.

casalmusica(X,Y):− casal(X,Y),afinmusica(X,Y).

casalmusicaidade(X,Y):−
casal(X,Y),casalmusica(X,Y).

3.3 Exercício 03
Construa a tabela da verdade para a seguinte proposição:

𝐸 = (𝑝 ∨ (∼ 𝑝 ∨ 𝑞))∧ ∼ (𝑞∧ ∼ 𝑟) (3.1)

SOLUÇÃÕ DO EXERCÍCIO 03:


A figura 10 mostra a tabela verdade da proposição 3.1.

Figura 10 – Tabela Verdade da proposição 3.1

Fonte:Autoria Própria

3.4 Exercício 04
Mostre se as expressões E1 e E2 são equivalentes logicamente:
Capítulo 3. Resolução 16

𝐸1 = (𝑠 → (𝑝∧ ∼ 𝑟)) ∧ ((𝑝 → (𝑟 ∨ 𝑞)) ∧ 𝑠) (3.2)

𝐸2 = (𝑝 ∧ 𝑞∧ ∼ 𝑟 ∧ 𝑠)∨ ∼ (𝑝 ∨ 𝑠) (3.3)

SOLUÇÃÕ DO EXERCÍCIO 04:


A figura 11 mostra a tabela verdade da proposição 3.2.

Figura 11 – Tabela Verdade da proposição 3.2

Fonte:Autoria Própria

A figura 12 mostra a tabela verdade da proposição 3.3.

Figura 12 – Tabela Verdade da proposição 3.3

Fonte:Autoria Própria
Capítulo 3. Resolução 17

Comparando a tabela verdade das preposições 3.2 e 3.3 pedidas, pode-se concluir
que essas não são preposições equivalentes.

3.5 Exercício 05
Suponha a seguinte base de fatos:

tran(eins ,one).
tran(zwei,two).
tran(drei ,three) .
tran(vier , four) .
tran(fuenf , five ) .
tran(sechs , six ) .
tran(sieben,seven).
tran(acht, eight) .
tran(neun,nine).
tran(zehn,ten).
tran(um,un).
tran(dois ,deux).
tran( tres , trois ) .
tran(quatro,quatre).
tran(cinco,cinq) .
tran( seis , six ) .
tran(sete ,sept) .
tran(oito , huit) .
tran(nove,neuf).
tran(dez,dix) .

Escreva um predicado para traduzir palavras entre os idiomas (Alemão/Inglês


– Português/Francês). Por exemplo, listtran([eins,neun,zwei],X), deve responder X =
[one,nine,two]. O predicado deve funcionar em ambas direções. Assim, listtran(X,[one,seven,six,two]),
daria como resposta X = [eins,sieben,sechs,zwei]
SOLUÇÃÕ DO EXERCÍCIO 05:

listtran ([],[]) .
listtran ([ A|B],[C|D]):−listtran(B,D),tran(A,C).
Capítulo 3. Resolução 18

3.6 Exercício 06
Observe o programa e responda:

xxxx(X):− nnnn(X,N), mod(N,2) =:= 0. nnnn([ ],0). nnnn([_|Y], N):− nnnn(Y, N1), N
is N1+1.

(a) O que o programa faz?

(b) Faça a simulação e apresente o resultado para a seguinte consulta: xxxx ([5,3,7,9]).

SOLUÇÃÕ DO EXERCÍCIO 06:

(a) O programa verifica se o tamanho da lista passada é par. por exemplo, se a lista
for composta por 4 elementos retorna TRUE, se for composta por 3 valores, retorna
FALSE.

(b) Para xxxx ([5,3,7,9]).


Retorna TRUE, uma vez que a lista é composta por 4 elementos, ou seja, um número
par de elementos, como pode ser visto na figura 13.
Capítulo 3. Resolução 19

Figura 13 – Teste feito para programa dado na questão 6

Fonte:Autoria Própria

3.7 Exercício 07
Considere a seguinte base de fatos exemplo:

aluno(joao, estruturas1) .
aluno(maria, estruturas1) .
aluno(joel , estruturas1) .
aluno(creusa, estruturas1) .
aluno(joao, so) .
aluno(maria, so).\
aluno(creusa, so) .
aluno(creusa, cn).
aluno(iara , cn).
aluno(cesar, cn).
aluno(iara , estruturas2) .
Capítulo 3. Resolução 20

aluno(paulo, estruturas2) .
aluno(marta, estruturas2).
aluno(josimar, so) .
frequenta(joao, unifei ) .
frequenta(maria, unifei ) .
frequenta( joel , unifei ) .
frequenta(creusa, unifei ) .
frequenta(creusa, ufmg).
frequenta(iara , ufmg).
frequenta(cesar , ufmg).
frequenta(iara , unifal ) .
frequenta(paulo, unifal ) .
frequenta(marta, unifal ) .
frequenta(josimar, unifei ) .
professor (sandro, estruturas1) .
professor ( juliano , so) .
professor ( gisele , cn).
professor ( luiz , estruturas2) .
funcionario(sandro, unifei ) .
funcionario( juliano , unifei ) .
funcionario( gisele , ufmg).
funcionario( luiz , unifal ) .

Escreva as seguintes regras em PROLOG:

(a) Quem são os alunos do professor X?

(b) Quem são as pessoas da universidade Y? (alunos ou docentes)

(c) Quem é colega de quem? Se aluno: é colega se for colega de disciplina ou colega de
curso ou colega de universidade. Se professor: se for professor da mesma universi-
dade.

SOLUÇÃÕ DO EXERCÍCIO 07:

(a)
discente(A,P):−
professor (P,D),
aluno(A,D).
Capítulo 3. Resolução 21

(b)
pessoas(P,Y):−
funcionario(P,Y);frequenta(P,Y).

(c)
colega(C,P):−
funcionario(C,U),funcionario(P,U),
(funcionario(C,U) \== funcionario(P,U));
aluno(C,D),aluno(P,D),
(aluno(C,D) \== aluno(C,D));
frequenta(C,W),frequenta(P,W),
(frequenta(C,W) \== frequenta(P,W)).
22

4 CONSIDERAÇÕES FINAIS

Através dos programas desenvolvidos foi possível ambientar-nos melhor à lingua-


gem Prolog, permitindo contato direto com diferentes funcionalidades e recursos do pro-
grama, desenvolvendo sentenças condicionais como o caso dos tios, avós e primos no
exercício 01, assim como no exercício 02 e 07, enquanto que no exercício 05 foram de-
senvolvidas sentenças recursivas que demonstram a lógica backtracking automático do
Prolog. Por fim, os discentes obtiveram êxito no desenvolvimento dos exercícios propostos
e aprenderam as implementações básicas em Prolog.
23

5 REFERÊNCIAS

1. CORTINO, Sandra. LINGUAGEM PROLOG. Disponível em:


<http://gersonc.anahy.org/graduacao/paradigmas/prologsan.pdf>. Acesso em: 28
ago. 2019.

Você também pode gostar