%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% PROG. LOGICA, CONHECIMENTO E RACIOCINIO - MIEB/4

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% SEMANA 02: 24.SET.2012 - 28.SET.2012

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Base de Conhecimento com informacao genealogica.

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Extensao do predicado filho: Filho,Pai -> {V,F}

filho(joao,jose).
filho(jose,manuel).
filho(carlos,jose).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Extensao do predicado pai: Pai,Filho -> {V,F}

pai(P,F) :-
	filho(F,P).

pai(paulo,filipe).
pai(paulo, maria).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Extensao do predicado avo: Avo,Neto -> {V,F}

avo(A,N) :-
	neto(N,A).

avo(antonio,nadia).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Extensao do predicado neto: Neto,Avo -> {V,F}

neto(nadia,antonio).
%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Extensao do predicado bisavo: Bisavo,Bisneto -> {V,F}

bisavo(B,I) :-
    bisneto(I,B).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Extensao do predicado genero: Genero,Individuo -> {V,F}
% [Incluir justificacao de criacao de predicados]

genero(G,I) :-
	individuo(I,G).

genero(masculino,joao).
genero(masculino,joao).
genero(feminino,maria).
genero(feminino,joana).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Extensao do predicado individuo P é pai do individuo F se existir uma prova de que F seja filho de P: Pai,Filho -> {V,F}

pai(P,F) :- 
	filho(F,P).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Extensao do predicado individuo A e avo de N se existir um individuo X de quem N seja filho e de quem A seja pai

avo(A,N) :-
	pai(A,X),
	filho(N,X).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Extensão do predicado individuo N é neto do individuo A se existir prova de que A seja avo de N: N,A -> {V,F}

neto(N,A) :-
	avo(A,N).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
%XI
% Extensao do predicado pessoa X descende de pessoa Y: X,Y -> {V,F}
% [Descendencia directa // Descendencia indirecta]

descendente(X,Y) :-
	filho(X,Y).

descendente(X,Y) :-
	filho(X,Z),
	descendente(Z,Y).	

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
%XV
% Extensão do predicado grau de descendencia entre duas pessoas, X e Y: X,Y -> {V,F}

grau(X,Y,N) :-
	filho(X,Z),
	grau(Z,Y,G),
	N is G+1.
%--------------------------------- - - - - - - - - - -  -  -  -  -   -
%XVI
%Extensao do predicado individuo A e avo de N, utilizando o predicado grau de
    descendencia entre dois individuos: A,N -> {V,F}

seravo(A,N) :-
    grau(N,A,G),
    G=2.
%--------------------------------- - - - - - - - - - -  -  -  -  -   -
%XVII
%Extensao do predicado individuo X serbisavo de Y: X,Y-> {V,F}

serbisavo(X,Y) :-
    grau(Y,X,G),
    G=3.
%--------------------------------- - - - - - - - - - -  -  -  -  -   -
%XVIII
%Extensao do predicado individuo X sertrisavo de Y: X,Y-> {V,F}

sertrisavo(X,Y) :-
    grau(Y,X,G),
    G=4.
%--------------------------------- - - - - - - - - - -  -  -  -  -   -
%XIX
%Extensao do predicado individuo X sertetraneto de Y: X,Y-> {V,F}

sertetravo(X,Y) :-
    grau(Y,X,G),
    G=5.