%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% PROG. LOGICA, CONHECIMENTO E RACIOCINIO - MIEB/4

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% SEMANA 11: 26.NOV.2012 - 30.NOV.2012

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% 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

:- op( 800,fx,se ).
:- op( 800,fx,facto ).
:- op( 700,xfx,entao ).
:- op( 300,xfy,ou ).
:- op( 200,xfy,e ).
:- dynamic facto/1.

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Base de Conhecimento com informacao genealogica.

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Extensao do predicado facto: PREDICADO -> { V,F }

facto filho( joao,jose ).
facto filho( jose,manuel ).
facto filho( carlos,jose ).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Construcao de Regras de Producao: se CONDICAO entao CONCLUSAO

se filho( FILHO,PAI )
   entao pai( PAI,FILHO ).

se filho( NETO,X ) e filho( X,AVO )
   entao avo( AVO,NETO ).

se avo( AVO,NETO )
    entao neto( NETO,AVO ).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Extensao do meta-predicado demo: QUESTAO -> { V,F }
% Versao "Backward Chaining"

demo( QUESTAO ) :-
    facto QUESTAO.
demo( QUESTAO ) :-
    se CONDICAO entao QUESTAO,
    demo( CONDICAO ).
demo( QUESTAO1 e QUESTAO2 ) :-
    demo(QUESTAO1), demo(QUESTAO2).

%--------------------------------- - - - - - - - - - -  -  -  -  -   -
% Extensao do meta-predicado nao: QUESTAO -> { V,F }

nao( QUESTAO ) :-
    QUESTAO, !, fail.
nao( QUESTAO ).
