%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% PROG. LOGICA, CONHECIMENTO E RACIOCINIO - MIEB/4

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% SEMANA 06: 20.OUT.2014 - 24.OUT.2014

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Programacao em logica estendida

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% SICStus PROLOG: Declaracoes iniciais

:- set_prolog_flag( discontiguous_warnings,off ).
:- set_prolog_flag( single_var_warnings,off ).
:- set_prolog_flag( unknown,fail ).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% SICStus PROLOG: definicoes iniciais

:- dynamic '-'/1.
:- dynamic mamifero/1.
:- dynamic morcego/1.

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Extensao do meta-predicado demo: Questao,Resposta -> {V,F}

demo( Questao,verdadeiro ) :-
    Questao.
demo( Questao,falso ) :-
    -Questao.
demo( Questao,desconhecido ) :-
    nao( Questao ),
    nao( -Questao ).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Extensao do meta-predicado nao: Questao -> {V,F}

nao( Questao ) :-
    Questao, !, fail.
nao( Questao ).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
%Se a entidade X é uma ave então a característica do voo está presente nessa entidade;

voo( X ) :- ave( X ), nao(excepcao(voo(X))).
voo( X ) :- excepcao(-voo(X)).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
%Se X é um mamífero então a característica do voo não está presente em X;

-voo(X) :- mamifero( X ), nao(excepcao(-voo(X))).
-voo(X) :- excepcao( voo(X) ).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
%O Tweety não voa;
-voo( tweety ).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
%O Pitiguí é uma ave;

ave( pitigui ).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
%Os canários são aves;

ave( X ) :- canario( X ).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
%Os periquitos são aves;

ave( X ) :- periquito( X ).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
%O Piupiu é um canário;

canario( piupiu ).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
%O Silvestre é um mamífero;

mamifero( silvestre ).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
%Os cães são mamíferos;

mamifero( X ) :- cao( X ). 

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
%Os gatos são mamíferos;

mamifero( X ) :- gato( X ).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% O Boby é um cão;

cao( boby ).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% As avestruzes são aves;

ave( X ) :- avestruz( X ).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Os pinguins são aves;

ave( X ) :- pinguim( X ).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% A Trux é uma avestruz;

avestruz( trux ).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% O Pingú é um pinguim;

pinguim( pingu ).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Os morcegos são mamíferos;

mamifero( X ) :- morcego( X ).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% O Bateméne é um morcego.

morcego( batemene ).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Extensao do predicado excepcao(voo(X)): entidade(X) -> {V,F,D}

excepcao(voo(X)):- avestruz(X).
excepcao(voo(X)):- pinguim(X).
excepcao(-voo(X)):- morcego(X).