%= save compiled clauses using forward chaining storage (by default)
%= we are using forward chaining just so any logical errors, performance and program bugs manefest
%= immediately
:- use_module(library(pfc)).
:- set_clause_compile(fwc).
%= Dont Trace execution
make_ex_some(Var,Statement,AltStatement):-
copy_term(Var+Statement,AltVar+AltStatement),
AltVar = ex(Var,Statement).
( (ex_some(Var,Statement)/
make_ex_some(Var,Statement,AltStatement))
==> (\+ Statement ==> AltStatement)).
:- mpred_trace_exec.
person(C) ==> ex_some(P,bio_father(C,P)).
person(C) ==> ex_some(P,bio_mother(C,P)).
person(joe).
male(P) ==> ~female(P).
female(P) ==> ~male(P).
bio_mother(C,P) <==> (bio_parent(C,P) , female(P)).
bio_father(C,P) <==> (bio_parent(C,P) , male(P)).
bio_mother(douglas,eileen).
pos_neg_proofs(P) :- mpred_why(P), mpred_why(~P).
person(douglas).
pos_neg_proofs(bio_mother(douglas, eileen)),
pos_neg_proofs(bio_parent(douglas, eileen)),
pos_neg_proofs(bio_father(douglas, eileen)),
pos_neg_proofs(bio_mother(douglas, _)),
pos_neg_proofs(bio_parent(douglas, _)),
pos_neg_proofs(bio_father(douglas, _)),
pos_neg_proofs(bio_parent(joe, _)),
pos_neg_proofs(bio_father(joe, _)),
pos_neg_proofs(bio_mother(joe, _)).