1/* 
    2% =============================================
    3% File 'mpred_builtin.pfc'
    4% Purpose: Agent Reactivity for SWI-Prolog
    5% Maintainer: Douglas Miles
    6% Contact: $Author: dmiles $@users.sourceforge.net ;
    7% Version: 'interface' 1.0.0
    8% Revision: $Revision: 1.9 $
    9% Revised At: $Date: 2002/06/27 14:13:20 $
   10% =============================================
   11%
   12%  PFC is a language extension for prolog.. there is so much that can be done in this language extension to Prolog
   13%
   14%
   15% props(Obj,[height(ObjHt)]) == t(height,Obj,ObjHt) == rdf(Obj,height,ObjHt) == t(height(Obj,ObjHt)).
   16% padd(Obj,[height(ObjHt)]) == prop_set(height,Obj,ObjHt,...) == ain(height(Obj,ObjHt))
   17% [pdel/pclr](Obj,[height(ObjHt)]) == [del/clr](height,Obj,ObjHt) == [del/clr]svo(Obj,height,ObjHt) == [del/clr](height(Obj,ObjHt))
   18% keraseall(AnyTerm).
   19%
   20%                      ANTECEEDANT                                   CONSEQUENT
   21%
   22%         P =         test nesc true                         assert(P),retract(~P) , enable(P).
   23%       ~ P =         test nesc false                        assert(~P),retract(P), disable(P)
   24%
   25%   ~ ~(P) =         test possible (via not impossible)      retract( ~(P)), enable(P).
   26%  \+ ~(P) =         test impossiblity is unknown            retract( ~(P))
   27%   ~ \+(P) =        same as P                               same as P
   28%     \+(P) =        test naf(P)                             retract(P)
   29%
   30% Dec 13, 2035
   31% Douglas Miles
   32*/
   33
   34
   35:- sanity(is_pfc_file).   36
   37
   38:- mpred_unload_file.   39
   40:- file_begin(pfc).   41
   42:- sanity(is_pfc_file).   43
   44:- set_fileAssertMt(baseKB).   45% ensure this file does not get unloaded with mpred_reset
   46:- prolog_load_context(file,F), ain(mpred_unload_option(F,never)).   47
   48meta_argtypes(mdefault(ftAssertable)).
   49
   50% BWD chaining
   51mdefault((Q <- P))/mpred_literal(Q) ==> (Q <-(P, \+ ~(Q))).
   52
   53% FWD chaining
   54mdefault(P==>Q)/nonvar(Q) ==> (((P ==> mdefault(Q)))).
   55
   56% NEG chaining
   57mdefault(~Q)/mpred_positive_fact(Q)  ==>  (( \+ Q ) ==> ~ Q ).
   58
   59
   60% POS chaining 1 (Neg Trigger)
   61mdefault(Q)/(mpred_positive_fact(Q),if_missing_mask(Q,R,Test)) ==> (  ( ( \+R /(ground(R),Test), (\+ ~Q )) ==> Q )).
   62
   63% POS chaining 2 (Pos Trigger)
   64mdefault(Q)/(mpred_positive_fact(Q),if_missing_mask(Q,R,Test)) ==> ( ((R/(ground(R), Test, \+(R=Q))) ==> (\+ Q))).
   65
   66
   67% mdefault(Q) ==> if_missing(Q,Q).
   68%(mdefault(P=>Q)/(mpred_literal_nv(Q),if_missing_mask(Q,R,Test)))  ==> ((P, \+ R/Test) => Q).
   69%(mdefault(P=>Q)/nonvar(Q)) ==> (P => mdefault(Q)).
   70
   71%:- listing(baseKB:mdefault/1).
   72%:- listing(( (==>) /2)).
   73
   74:- if(baseKB:startup_option(datalog,sanity);baseKB:startup_option(clif,sanity)).   75
   76% :- reconsult(pack(logicmoo_base/t/examples/pfc/'sanity_birdt.pfc')).
   77
   78:- endif.