1/* <module> mpred_stubs.
    2% Provides a prolog dabase in these predicates...
    3%
    4%  Manages the hybrid_tPredStubImpl/1 in various files
    5%  
    6%
    7% Logicmoo Project PrologMUD: A MUD server written in Prolog
    8% Maintainer: Douglas Miles
    9% Dec 13, 2035
   10%
   11*/
   12
   13
   14% File: /opt/PrologMUD/pack/logicmoo_base/prolog/logicmoo/mpred/mpred_stubs.pl
   15:- if(( ( \+ ((current_prolog_flag(logicmoo_include,Call),Call))) )).   16:- module(mpred_stubs_file_module,
   17          [ 
   18agenda_rescan_mpred_prop/0,
   19assert_mpred_t/1,
   20call_for_literal/3,
   21call_for_literal_db/3,
   22call_for_literal_db0/3,
   23call_for_literal_db2/3,
   24call_for_literal_ideep_ilc/1,
   25call_mpred_body/2,
   26call_mpred_body_ilc/2,
   27call_provided_mpred_storage_op/3,
   28call_rule_db/3,
   29call_wdmsg/2,
   30call_wdmsg/4,
   31constrain_args/1,
   32constrain_args/2,
   33create_stub_body/2,
   34create_stub_body/3,
   35cwdl/2,
   36erase_mpred_storage_op/1,
   37ensure_universal_stub_plus_mt_why/2,
   38first_mpred_prop/1,
   39get_cc/2,
   40hybrid_tPredStubImpl/1,
   41is_call_op/1,
   42is_mpred_change_op/1,
   43is_mpred_op/1,
   44is_non_call_op/1,
   45is_proc_only/1,
   46is_same_clauses/2,
   47is_same_clauses/3,
   48is_tCol/1,
   49last_arg_ground/1,
   50last_arg_ground/3,
   51make_builtin/1,
   52mpred_prop_ordered/2,
   53mpred_t_call_op/2,
   54mpred_t_mpred_storage_clauses_facts/3,
   55mpred_t_storage_op/2,
   56mud_call_store_op/2,
   57mustIsa/2,
   58must_op/2,
   59must_same_clauses/2,
   60no_rescans/0,
   61out_of_mpred_t/1,
   62provide_clauses_list/2,
   63really_add_mpred_storage_op/1,
   64registerCycPredMtWhy/1,
   65registerCycPredMtWhy_3/3,
   66registerCycPredMtWhy_3/4,
   67renumbervarZ/2,
   68tf_result/2,
   69test_call_cut/0,
   70wff_check_failed/3,
   71wff_check_mpred_t_throw/1,
   72mpred_stubs_file/0
   73          ]).   74
   75%:- include('mpred_header.pi').
   76
   77:- endif.   78
   79% XXXXXXXXXXXXXXXXXXXXXXXXXx
   80% XXXXXXXXXXXXXXXXXXXXXXXXXx
   81% XXXXXXXXXXXXXXXXXXXXXXXXXx
   82% XXXXXXXXXXXXXXXXXXXXXXXXXx
   83
   84
   85:- meta_predicate
   86
   87% mpred_stubs
   88call_mpred_body(*,0),
   89% mpred_stubs
   90call_mpred_body_ilc(*,0),
   91% mpred_stubs
   92cwdl(0,+),
   93% mpred_stubs
   94must_op(*,0),
   95% mpred_stubs
   96tf_result(0, -),
   97registerCycPredMtWhy(0),
   98call_provided_mpred_storage_op(*,0,*).   99
  100:- module_transparent
  101agenda_rescan_mpred_prop/0,
  102assert_mpred_t/1,
  103call_for_literal/3,
  104call_for_literal_db/3,
  105call_for_literal_db0/3,
  106call_for_literal_db2/3,
  107call_for_literal_ideep_ilc/1,
  108call_mpred_body/2,
  109call_mpred_body_ilc/2,
  110call_provided_mpred_storage_op/3,
  111call_rule_db/3,
  112call_wdmsg/2,
  113call_wdmsg/4,
  114constrain_args/1,
  115constrain_args/2,
  116create_stub_body/2,
  117create_stub_body/3,
  118cwdl/2,
  119erase_mpred_storage_op/1,
  120first_mpred_prop/1,
  121get_cc/2,
  122hybrid_tPredStubImpl/1,
  123is_call_op/1,
  124is_mpred_change_op/1,
  125is_mpred_op/1,
  126is_non_call_op/1,
  127is_proc_only/1,
  128is_same_clauses/2,
  129is_same_clauses/3,
  130is_tCol/1,
  131last_arg_ground/1,
  132last_arg_ground/3,
  133make_builtin/1,
  134mpred_prop_ordered/2,
  135mpred_t_call_op/2,
  136baseKB:mpred_provide_storage_op/2,
  137mpred_t_mpred_storage_clauses_facts/3,
  138mpred_t_storage_op/2,
  139mud_call_store_op/2,
  140mustIsa/2,
  141must_op/2,
  142must_same_clauses/2,
  143no_rescans/0,
  144out_of_mpred_t/1,
  145provide_clauses_list/2,
  146really_add_mpred_storage_op/1,
  147registerCycPredMtWhy/1,
  148registerCycPredMtWhy_3/3,
  149registerCycPredMtWhy_3/4,
  150renumbervarZ/2,
  151test_call_cut/0,
  152wff_check_failed/3,
  153wff_check_mpred_t_throw/1.  154
  155
  156:- set_how_virtualize_file(bodies).  157
  158%= 	 	 
 hybrid_tPredStubImpl(?VALUE1) is semidet
Hybrid True Structure Predicate Stub Implimentation.
  164hybrid_tPredStubImpl(prologHybrid).
  165hybrid_tPredStubImpl(prologPTTP).
  166hybrid_tPredStubImpl(prologDynamic).
  167hybrid_tPredStubImpl(prologBuiltin).
  168hybrid_tPredStubImpl(prologKIF).
  169hybrid_tPredStubImpl(prologEquality).
  170
  171
  172
  173%= 	 	 
 make_builtin(:TermF) is semidet
Make Builtin.
  179make_builtin(P):- 
  180 get_arity(P,F,A),
  181  show_failure(why,(atom(F),integer(A))),
  182  functor(B,F,A),
  183  (predicate_property(B,built_in) -> true ;
  184  (locally(set_prolog_flag(access_level,system),lock_predicate(F/A)),
  185  check_context_module,
  186    ain(mpred_prop(F,A,prologBuiltin)),ain(arity(F,A)))).
  187
  188
  189/*
  1901 = single value
  191
  192t = type transitve becoming more specific
  193T = type transitve becoming more general
  194tt = type transitve becoming more specific
  195TT = type transitve becoming more general
  196
  197i = instance (non col)
  198p3 = predciate arity
  199r3 = function arity
  200a = agent
  201v = value
  202o = object
  203l = literal
  204f = formula of formulas
  205 
  206
  207
  208
  209genls =  ct_cT
  210relationAllInstance = p2_ct_v
  211relationMostInstance = p2_ct_sv
  212relationMostExists = p2_ct_ct
  213isa X BinaryPredicate = isa_p2_c
  214isa BinaryPredicate Role = isa_p2_pc
  215isa 4 number =  isa_v_ft
  216implies P Q =  
  217
  218
  219
  220
  221
  222*/
  223% ================================================
  224% db_redir_op_if_needed/4
  225% ================================================
  226/* TODO RE-INCORPERATE
  227db_redir_op_if_needed(Op,C0,Prop,_ARGS):- glean_pred_props_maybe(C0),fail.
  228
  229% predProxyDatabase/1
  230db_redir_op_if_needed(Op,C0,Prop,_ARGS):- get_mpred_prop(Prop,predProxyDatabase(Other)),must(nonvar(Other)),!,call(Other,Op,C0).
  231
  232% predProxyAssert/1
  233db_redir_op_if_needed(change(assert,A),C0,Prop,_RGS):- get_mpred_prop(Prop,predProxyAssert(How)),must(nonvar(How)),!, once(ignore((call(How,C0), run_database_hooks(change(assert,A),C0)))).
  234
  235% predProxyRetract/1
  236db_redir_op_if_needed(change(retract,A),C0,Prop,_RGS):- get_mpred_prop(Prop,predProxyRetract(How)),must(nonvar(How)),!, once(ignore((call(How,C0), run_database_hooks(change( retract,A),C0)))).
  237
  238% predProxyQuery/1
  239db_redir_op_if_needed(query(Must,HLDS),C0,Prop,_RGS):- get_mpred_prop(Prop,predProxyQuery(How)),must(nonvar(How)),!, mpred_op(query(Must,HLDS),call(How,C0)).
  240
  241% plain props
  242db_redir_op_if_needed(Op,_C0,Prop,ARGS):- database_modify_units(Op,Unit).
  243
  244*/
  245
  246% ================================================================================
  247% INSTALL STORAGE STUBS
  248% ================================================================================
  249
  250
  251% :- meta_predicate baseKB:decl_database_hook(?,0).
  252%OLD baseKB:decl_database_hook(change(assert,_),local_q_mpred_isa(F,A,StubType)):- maybe_storage_stub(F,StubType).
  253
  254%OLD baseKB:decl_database_hook(change(assert,_),isa(F,StubType)):- maybe_storage_stub(F,StubType).
  255
  256%OLD baseKB:decl_database_hook(change(assert,_),arity_no_bc(F,StubType)):-  hybrid_tPredStubImpl(StubType),local_q_mpred_isa(F,A,StubType),must(ensure_universal_stub(F/A)).
  257
  258
  259
  260%= 	 	 
 create_stub_body(?Head, ?Stub) is semidet
Create Stub Body.
  266create_stub_body(Head,Stub):-create_stub_body(call(conjecture),Head,Stub).
  267% return fail to cut and fail
  268
  269%= 	 	 
 create_stub_body(?VALUE1, ?Head, ?Stub) is semidet
Create Stub Body.
  275create_stub_body(call(conjecture),Head,Stub):- Stub = (call_provided_mpred_storage_op(call(conjecture),Head,Then),
  276   ((Then=(!,Whatnot))->
  277     (!,Whatnot);
  278      Then)).
  279
  280
  281%= 	 	 
 erase_mpred_storage_op(?Head) is semidet
Erase Managed Predicate Storage Oper..
  287erase_mpred_storage_op(Head):-
  288   create_stub_body(_,Head,Stub),
  289   doall(retract((Head:- Stub))),
  290   foreach(clause(Head,Stub,Ref),erase_safe(clause(Head,Stub,Ref),Ref)).
  291
  292
  293%= 	 	 
 really_add_mpred_storage_op(?Head) is semidet
Really Add Managed Predicate Storage Oper..
  299really_add_mpred_storage_op(Head):-
  300   create_stub_body(call(conjecture),Head,Stub),
  301   asserta_if_new((Head:- Stub)).
  302
  303
  304
  305%= 	 	 
 renumbervarZ(?H, ?GGG) is semidet
Renumbervar Z.
  311renumbervarZ((H:-B),GGG):-is_true(B),!,copy_term(H,GG),unnumbervars(GG,GGG),numbervars(GGG,0,_).
  312renumbervarZ(H,GGG):-copy_term(H,GG),unnumbervars(GG,GGG),numbervars(GGG,0,_).
  313
  314%= 	 	 
 is_same_clauses(?Head, ?NEWHBLISTN, ?HBLISTN) is semidet
If Is A Same Clauses.
  320is_same_clauses(Head,NEWHBLISTN,HBLISTN):-
  321   must_maplist(renumbervarZ,HBLISTN,HBLIST),
  322   must_maplist(renumbervarZ,NEWHBLISTN,NEWHBLIST),
  323   sort(NEWHBLIST,NEWHBLISTS),
  324   sort(HBLIST,HBLISTS),
  325   length(NEWHBLIST,LN),
  326   length(HBLIST,LO),
  327   list_difference_eq(HBLIST,NEWHBLIST,MISSING),length(MISSING,LM),
  328   list_difference_eq(NEWHBLIST,HBLIST,EXTRA),length(EXTRA,LE),
  329   (NEWHBLIST=@=HBLIST -> true ;((NEWHBLISTS=@=HBLISTS;LM=0) -> wdmsg(trace_or_throw(must_same_clauses(Head,[extra(LE)|EXTRA],[missing(LM)|MISSING]))) ;  
  330     ((wdmsg((trace_or_throw(must_same_clauses(Head,[LO|HBLIST],[LN|NEWHBLIST],[extra(LE)|EXTRA],[missing(LM)|MISSING])))),!,fail)))).
  331
  332
  333%= 	 	 
 must_same_clauses(?Head, ?HBLISTN) is semidet
Must Be Successfull Same Clauses.
  339must_same_clauses(Head,HBLISTN):-
  340   provide_clauses_list(Head,NEWHBLISTN),
  341   must(is_same_clauses(Head,NEWHBLISTN,HBLISTN)).
  342
  343
  344%= 	 	 
 is_same_clauses(?Head, ?HBLISTN) is semidet
If Is A Same Clauses.
  350is_same_clauses(Head,HBLISTN):-
  351   provide_clauses_list(Head,NEWHBLISTN),
  352   must(is_same_clauses(Head,NEWHBLISTN,HBLISTN)).
  353
  354/*
  355
  356clause_u  checks using  TODO  clause_u(C).
  357call(conjecture)
  358call(once)  % TODO
  359change(assert,a) asserts first if =@= is not first
  360change(assert,z) asserts last if no =@=
  361change( retract,one)  using =
  362change( retract,all)  using =
  363
  364good_for_hybrid(H,F):- not(local_q_mpred_isa(F,A,_ANY_)),predicate_property(H,number_of_clauses(0)),predicate_property(H,dynamic).
  365ensure_exists(Head):-get_pifunctor3(Head,PHead,F),get_functor(Head,F,A),(predicate_property(PHead,dynamic)->true;(predicate_property(PHead,_)->dmsg(warn(static_pred,F/A));dynamic(F/A))).
  366
  367*/
  368
  369
  370% -- CODEBLOCK
  371
  372%= 	 	 
 is_tCol(?V) is semidet
If Is A True Structure Col.
  378is_tCol(V):-is_ftVar(V),!,fail.
  379is_tCol(tCol).
  380is_tCol(F):- local_q_mpred_isa(F,1,tCol);a(tCol,F);a(F,_).
  381
  382
  383local_q_mpred_isa(F,A,C):- call_u(mpred_prop(F,A,C)).
  384%= 	 	 
 is_proc_only(?V) is semidet
If Is A Proc.
  390is_proc_only(V):-is_ftVar(V),!,fail.
  391is_proc_only(F):- functor(P,F,1),predicate_property(P,_), \+ tCol(F).
  392
  393% -- CODEBLOCK
  394
  395%= 	 	 
 is_call_op(?Var) is semidet
If Is A Call Oper..
  401is_call_op(Var):-var(Var),!,trace_or_throw(var_is_call_op(Var)).
  402is_call_op(call(_)):-!.
  403is_call_op(query(_,_)):-!.
  404is_call_op(call).
  405
  406
  407%= 	 	 
 is_non_call_op(?Op) is semidet
If Is A Not Call Oper..
  413is_non_call_op(Op):-is_mpred_op(Op),not(is_call_op(Op)).
  414
  415% -- CODEBLOCK
  416
  417%= 	 	 
 is_mpred_change_op(:TermARG1) is semidet
If Is A Managed Predicate Change Oper..
  423is_mpred_change_op(change(_,_)).
  424
  425% -- CODEBLOCK
  426
  427%= 	 	 
 is_mpred_op(:TermOp) is semidet
If Is A Managed Predicate Oper..
  433is_mpred_op(Op):-is_mpred_change_op(Op).
  434is_mpred_op(call(_)).
  435is_mpred_op(query(_,_)).
  436is_mpred_op(clauses(_)).
  437
  438% -- CODEBLOCK
  439:- was_export(last_arg_ground/1).  440
  441%= 	 	 
 last_arg_ground(?HEAD) is semidet
Last Argument Ground.
  447last_arg_ground(HEAD):-compound(HEAD),functor(HEAD,F,A),last_arg_ground(F, A, HEAD),!.
  448
  449%= 	 	 
 last_arg_ground(?VALUE1, ?A, ?VALUE3) is semidet
Last Argument Ground.
  455last_arg_ground(mud_test,_,_).
  456last_arg_ground(_,A,_):-A>2,!.
  457last_arg_ground(_,A,HEAD):-arg(A,HEAD,Arg),!,ground(Arg).
  458
  459
  460
  461%= 	 	 
 call_provided_mpred_storage_op(?UPARAM1, :GoalH, ?UPARAM3) is semidet
Call Provided Managed Predicate Storage Oper..
  467call_provided_mpred_storage_op(call(_),H,true):-was_isa(H,I,C),!,isa_asserted(I,C).
  468call_provided_mpred_storage_op(Op,H,true):-!,no_repeats(loop_check(may_storage_op(Op,H),clause_u(H))).
  469
  470
  471
  472%= 	 	 
 test_call_cut is semidet
Test Call Cut.
  478test_call_cut:- X=!,dmsg(testing_call_cut),X.
  479test_call_cut:- throw(test_failed(testing_call_cut)).
  480% :-doall(test_call_cut).
  481
  482%change(X,B):-mpred_op(X,B),!.
  483%change(X,B,C):-mpred_op(change(X,B),C),!.
  484%retract(X,Y):-mpred_op(change(retract,X),Y),!.
  485
  486
  487
  488%= 	 	 
 must_op(?Op, :GoalH) is semidet
Must Be Successfull Oper..
  494must_op(Op,     H ):- (var(Op);var(H)),!,trace_or_throw(var_database_op0(Op,  H )).
  495must_op(Op,     H ):- once(fully_expand(Op,H,HH)),H\=@=HH,!,must_op(Op, HH).
  496must_op(change(assert,_),Call):-!,must(Call),!.
  497must_op(change( retract,_),Call):-!,must(Call),!.
  498must_op(clauses(_),Call):-!,loop_check(on_x_debug(Call)).
  499must_op(call(_),Call):-!,loop_check(on_x_debug(Call)).
  500must_op(_,Call):-!,loop_check(on_x_debug(Call)).
  501
  502
  503%= 	 	 
 call_wdmsg(?P, ?DB) is semidet
Call Wdmsg.
  509call_wdmsg(P,DB):- t_l:noDBaseMODs(_),!,wdmsg(error(noDBaseMODs(P,DB))).
  510call_wdmsg(P,DB):- get_functor(DB,F,A), call_wdmsg(P,DB,F,A).
  511
  512
  513%= 	 	 
 call_wdmsg(?P, ?DB, ?VALUE3, ?A) is semidet
Call Wdmsg.
  519call_wdmsg(P,DB,t,_A):-!, append_term(P,DB,CALL),dmsg((CALL)),call_u(CALL).
  520call_wdmsg(P,MP,F,A):- local_q_mpred_isa(F,A,prologHybrid),must(A>1),into_functor_form(t,MP,DB),!, append_term(P,DB,CALL),dmsg(info(CALL)),!,call_u(CALL).
  521call_wdmsg(P,MP,F,A):-  
  522  (\+ local_q_mpred_isa(F,A,prologDynamic)), 
  523  (\+ local_q_mpred_isa(F,A,prologBuiltin)), 
  524  /* functor(FA,F,A), kb_shared(FA), */ into_functor_form(t,MP,DB),!, 
  525  append_term(P,DB,CALL),dmsg(info(CALL)),!,call_u(CALL).
  526call_wdmsg(P,DB,F,A):- append_term(P,DB,CALL),dmsg(info(CALL)),must(local_q_mpred_isa(F,A,prologDynamic);local_q_mpred_isa(F,A,prologBuiltin)),!,call_u(CALL).
  527%call_wdmsg(P,DB,S,_):-  dtrace((append_term(P,DB,CALL),dmsg((CALL)),call_u(CALL))).
  528
  529
  530% ================================================================================
  531% INSTALL MISSING STUBS
  532% ================================================================================
  533
  534%:-agenda_rescan_mpred_prop.
  535
  536% pass 2
  537
  538%= 	 	 
 no_rescans is semidet
No Rescans.
  544no_rescans.
  545
  546:- was_export(agenda_rescan_mpred_prop/0).  547
  548
  549%= 	 	 
 agenda_rescan_mpred_prop is semidet
Agenda Rescan Managed Predicate Props.
  555agenda_rescan_mpred_prop:- loop_check(rescan_mpred_prop_ilc,true).
  556
  557%= 
  558:- use_module(prolog_statistics:library(statistics)).  559% :- reconsult(library(statistics)).
  560%% rescan_mpred_prop_ilc is semidet.
  561%
  562% Rescan Managed Predicate Props Inside Of Loop Checking.
  563%
  564rescan_mpred_prop_ilc:-no_rescans,!.
  565rescan_mpred_prop_ilc:-rescan_duplicated_facts(user,local_q_mpred_isa(_,_)),fail.
  566rescan_mpred_prop_ilc:- prolog_statistics:time(forall(find_and_call(mpred_prop_ordered(Pred,Prop)),ain(local_q_mpred_isa(Pred,Prop)))),fail.
  567rescan_mpred_prop_ilc.
  568
  569
  570%= 	 	 
 first_mpred_prop(:TermARG1) is semidet
First Managed Predicate Props.
  576first_mpred_prop(meta_argtypes(_)).
  577
  578
  579%= 	 	 
 mpred_prop_ordered(?VALUE1, ?VALUE2) is semidet
Managed Predicate Prop Ordered.
  585mpred_prop_ordered(Pred,Prop):-first_mpred_prop(Prop),local_q_mpred_isa(Pred,_,Prop),\+ (local_q_mpred_isa(Pred,_,prologDynamic)).
  586mpred_prop_ordered(Pred,Prop):-local_q_mpred_isa(Pred,_,Prop),not(first_mpred_prop(Prop)),not(local_q_mpred_isa(Pred,_,prologDynamic)).
  587
  588
  589% ================================================================================
  590% GRABOUT STORAGE STUB CLAUSES
  591% ================================================================================
  592
  593%= 	 	 
 provide_clauses_list(?Head, ?HBLISTO) is semidet
Provide Clauses List.
  599provide_clauses_list(Head,HBLISTO):- get_pifunctor(Head,PHead),  
  600  findall((PHead :- B),
  601   no_repeats([PHead:B],((call_no_cuts(baseKB:mpred_provide_storage_clauses(PHead,B,Proof)),is_source_proof(Proof)))),
  602   HBLIST),
  603   create_stub_body(PHead,Stub),
  604   delete(HBLIST,Stub,HBLISTO),!.
  605
  606
  607
  608%= 	 	 
 get_cc(?PI, ?NC) is semidet
Get Cc.
  614get_cc(PI,NC):-provide_clauses_list(PI,HBLISTO),length(HBLISTO,NC).
  615
  616
  617% ==============================
  618% SETUP HYBRID HOOK
  619% ==============================
  620
  621%= 	 	 
 mpred_provide_setup(?Op, ?HeadIn, ?StubType, ?OUT) is semidet
Hook To [mpred_provide_setup/4] For Module Mpred_stubs. Managed Predicate Provide Setup.
  628baseKB:mpred_provide_setup(Op,HeadIn,StubType,OUT):- StubType \== prologDynamic,
  629 sanity(var(OUT)),
  630 must((StubType = prologHybrid)),
  631 OUT=defined(baseKB:mpred_provide_setup(Op,HeadIn,StubType)).
 tf_result(:Goal, +TF) is semidet
True/false Result.
  637tf_result(Call,TF):-(Call->TF=true;TF=fail).
  638
  639%= 	 	 
 assert_mpred_t(:TermDB) is semidet
Assert Managed Predicate True Stucture.
  645assert_mpred_t((G:-B)):-is_true(B),!,must(assert_mpred_t(G)).
  646assert_mpred_t(DB):-once(fully_expand(change(assert,ain),DB,MP)),DB\=@=MP,!,must(assert_mpred_t(MP)).
  647assert_mpred_t((G1,G2)):-!,assert_mpred_t(G1),assert_mpred_t(G2).
  648assert_mpred_t(G):-add_from_file(G).
  649
  650%:- was_export(portray_hb/2).
  651%portray_hb(H,B):- B==true, !, portray_one_line(H).
  652%portray_hb(H,B):- portray_one_line((H:-B)).
  653
  654
  655%= 	 	 
 hook_mpred_listing(?What) is semidet
Hook To [hook_mpred_listing/1] For Module Mpred_stubs. Hook Managed Predicate Listing.
  662baseKB:hook_mpred_listing(Match):- fail,
  663 (( 
  664  dif:dif(Proof,prologRef(_)),
  665  no_repeats([H,B],((baseKB:mpred_provide_storage_clauses(H,B,Proof)),
  666                Proof\=prologRef(_))),term_matches_hb(Match,H,B),portray_hb(Proof:H,B))),fail.
  667
  668      
  669
  670%= 	 	 
 clause_u(?H, ?B, ?What) is semidet
Hook To [mpred_provide_storage_clauses/3] For Module Mpred_stubs. Managed Predicate Provide Storage Clauses.
  677:- multifile(baseKB:mpred_provide_storage_clauses/3).  678baseKB:mpred_provide_storage_clauses(H,B,Proof):-mpred_t_mpred_storage_clauses_facts(H,B,Proof).
  679
  680
  681%= 	 	 
 mpred_t_mpred_storage_clauses_facts(?VALUE1, ?VALUE2, ?VALUE3) is semidet
Managed Predicate True Structure Managed Predicate Storage Clauses Facts.
  687mpred_t_mpred_storage_clauses_facts(H,true,t(H)):-is_list(H),!,length(H,A),A>2,loop_check(call_u(t(H))).
  688mpred_t_mpred_storage_clauses_facts(H,true,t(H)):-compound(H),!,current_predicate(into_plist_arities/4),functor(H,_,A),A>1,loop_check(call_u(t(H))).
  689% mpred_t_mpred_storage_clauses_facts(H,B,W):-mpred_t_mpred_storage_clauses_rules(H,B,W),H\=isa(_,_).
  690
  691% TODO USE PFC FOR FOREWARD RULES
  692% TODO USE PTTP FOR BACKARDS RULES
  693% mpred_t_mpred_storage_clauses_rules(H,B,ruleForward(B,H)):-ruleForward(B,H).
  694% mpred_t_mpred_storage_clauses_rules(H,B,ruleBackward(H,B)):-ruleBackward(H,B).
  695% mpred_t_mpred_storage_clauses_rules(H,B,'<=>'):-'<=>'(HH,B),each_subterm(HH,SubTerm),compound(SubTerm),SubTerm = H.
  696% mpred_t_mpred_storage_clauses_rules(H,B,'<=>'):-'<=>'(B,HH),each_subterm(HH,SubTerm),compound(SubTerm),SubTerm = H.
  697
  698
  699
  700%= 	 	 
 mpred_provide_storage_op(:TermOp, ?G) is semidet
Hook To [mpred_provide_storage_op/2] For Module Mpred_stubs. Managed Predicate Provide Storage Oper..
  707baseKB:mpred_provide_storage_op(Op,HB):-
  708  must(baseKB:is_mpred_op(Op)),
  709  (quietly(baseKB:remodulize(Op,HB,HeadBody)),get_functor(HeadBody,F),
  710    once(F==t; baseKB:a(prologHybrid,F)),   
  711    locally_tl(already_in_file_term_expansion,mpred_t_storage_op(Op,HeadBody))).
  712
  713% ====================================================
  714% mpred_t_storage_op/2
  715% ====================================================
  716% HOOK Simplification
  717
  718%= 	 	 
 mpred_t_storage_op(?Op, :TermH) is semidet
Managed Predicate True Structure Storage Oper..
  724mpred_t_storage_op(Op,(Head:-Body)):- is_true(Body),!,mpred_t_storage_op(Op,Head).
  725
  726
  727mpred_t_storage_op(Op,H):- baseKB:pfcManageHybrids,!,baseKB:mpred_provide_storage_op(Op,H).
  728
  729mpred_t_storage_op(Op,(:-(Body))):-!,loop_check(mpred_op(Op,(:-(Body))),true),!.
  730
  731% HOOK for ISA alt-forms
  732mpred_t_storage_op(_,isa(_,_)):- !,fail. % <- keeps u out of isa hybrids hairs
  733mpred_t_storage_op(Op,X):- was_isa(X,I,C),!,mpred_op(Op,isa(I,C)).
  734
  735% HOOK MOST ALL CALLS
  736mpred_t_storage_op(Op,HeadBodyI):- quietly(((expand_term(HeadBodyI,HeadBodyM)),HeadBodyI\=@=HeadBodyM)),!,mpred_t_storage_op(Op,HeadBodyM).
  737mpred_t_storage_op(Op,X):- not(is_non_call_op(Op)),!,mpred_t_call_op(Op,X).
  738
  739% RULE HOOK (for prolog special wrapper body stubs)
  740mpred_t_storage_op(Op,(Head:-Body)):-
  741 reduce_mpred_op(Op,Op2),
  742  special_wrapper_body(Body,direct_to_prolog),!,
  743  wdmsg(direct_to_prolog_special_wrapper_body(Op2,Head,Body)),
  744   (mud_call_store_op(Op2,(Head:-Body))).  
  745
  746% OLD RULE HOOK (but we are using it in parallel)
  747mpred_t_storage_op(Op,(Head:-Body)):- \+ if_defined(use_kif(Head,Body)),
  748  wdmsg(saved_clause_in_hybridRule(Op,Head,Body)),!,
  749      (mud_call_store_op(Op,ruleBackward(Head,Body))).  
  750
  751% PTTP RULE HOOK   
  752mpred_t_storage_op(Op,(Head:-Body)):- 
  753   if_defined(use_kif(Head,Body)),
  754   reduce_mpred_op(Op,Op2), 
  755   CALL0 = (call(Op2,ruleBackward(Head,Body))), % remember outside of KIF just in case
  756   must(((CALL0,if_defined(mpred_t_tell_kif(Op2,(Head:-Body)))))),!.
  757
  758% KIF RULE HOOK   
  759mpred_t_storage_op(Op,RULE):- if_defined(is_kif_clause(RULE)),!,
  760  reduce_mpred_op(Op,Op2),
  761  if_defined(mpred_t_tell_kif(Op2,RULE)),!.
  762
  763% REOP HOOK mpred_t_storage_op(Op1,HeadBody):- reduce_mpred_op(Op1,Op2), Op1\==Op2, mpred_t_storage_op(Op2,HeadBody).
  764% FACT:-true HOOK   
  765
  766% FACT DB HOOK
  767mpred_t_storage_op(Op,HeadBody):-
  768    into_functor_form(t,HeadBody,DB),
  769     % wff_check_mpred_t_throw(DB),
  770     must((mud_call_store_op(Op,DB),sanity(show_call(why,DB)))),!.
  771
  772
  773%= 	 	 
 mud_call_store_op(?Op, :TermOPRAND) is semidet
Application Call Storage Oper..
  779mud_call_store_op(Op,(H:-B)):- is_true(B),!,mud_call_store_op(Op,H).
  780mud_call_store_op(Op,t('$si$':'$was_imported_kb_content$', _, OPRAND)):-!,loop_check(mpred_op(Op,OPRAND),true).
  781mud_call_store_op(Op,OPRAND):- show_success(why,wff_check_failed(Op,OPRAND,_WHY)),!.
  782mud_call_store_op(Op,OPRAND):- reduce_mpred_op(Op,Op2),show_call(why,call(Op2,OPRAND)).
  783
  784
  785%= 	 	 
 wff_check_failed(?VALUE1, ?DB, ?WHY) is semidet
Well-formed Formula Check Failed.
  791wff_check_failed(_,DB,WHY):- DB =  t('$si$':'$was_imported_kb_content$', WHY, _Assert).
  792
  793%= 	 	 
 wff_check_mpred_t_throw(?DB) is semidet
Well-formed Formula Check Managed Predicate True Structure Throw.
  799wff_check_mpred_t_throw(DB):- wff_check_failed(_,DB,WHY),trace_or_throw(crazy_mpred_t_was_imported_kb_content(WHY,DB)).
  800wff_check_mpred_t_throw(_).
  801
  802% ====================================================
  803% mpred_t_call_op/2
  804% ====================================================
  805% ISA CALL
  806
  807%= 	 	 
 mpred_t_call_op(?Op, ?X) is semidet
Managed Predicate True Structure Call Oper..
  813mpred_t_call_op(_,isa(_,_)):- !,fail.
  814mpred_t_call_op(Op,X):- was_isa(X,I,C),!,mpred_op(Op,isa(I,C)).
  815
  816% FACT CALL HOOK
  817mpred_t_call_op(_,FACT):- get_functor(FACT, F,A), !,
  818     lc_tcall(call_for_literal(F,A,FACT)),!.
  819
  820
  821
  822% ====================================================
  823% call_for_literal/3
  824% ====================================================
 call_for_literal(?VALUE1, ?VALUE2, ?HEAD) is semidet
Call For Literal.
  831:- meta_predicate call_for_literal(?,1,*).  832call_for_literal(_,_,HEAD):- if_defined(use_kif(HEAD,true)),!,call_u(kif_ask(HEAD)).
  833call_for_literal(_,_,HEAD):- call_u(use_ideep_swi),!, call_for_literal_ideep_ilc(HEAD),!,loop_check_term(cwdl(CALL,7),HEAD,(CALL)).
  834call_for_literal(F,A,HEAD):- call_for_literal_db(F,A,HEAD).
  835
  836
  837%= 	 	 
 call_for_literal_db(?F, ?A, ?HEAD) is semidet
Call For Literal Database.
  843:- meta_predicate call_for_literal_db(?,1,*).  844call_for_literal_db(F,A,HEAD):- P=F, HEAD=..[P|ARGS],
  845   ((lmcache:after_mpred_load)->kb_shared(F/A);true),
  846   constrain_args(P,ARGS),call_for_literal_db0(F,A,HEAD),constrain_args(P,ARGS).
  847
  848
  849
  850%= 	 	 
 cwdl(:GoalCALL, +DEEP7) is semidet
Cwdl.
  856cwdl(CALL,DEEP7):- call_with_depth_limit(CALL,DEEP7,Result),
  857   ( Result == depth_limit_exceeded -> (!,fail) ; true).
  858
  859
  860%= 	 	 
 call_for_literal_ideep_ilc(?HEAD) is semidet
Call For Literal Ideep Inside Of Loop Checking.
  866call_for_literal_ideep_ilc(HEAD):- get_functor(HEAD,F,A),call_for_literal_db(F,A,HEAD).
  867
  868
  869%= 	 	 
 call_for_literal_db0(?F, ?A, ?HEAD) is semidet
Call For Literal Database Primary Helper.
  875call_for_literal_db0(F,A,HEAD):-no_repeats(HEAD,call_for_literal_db2(F,A,HEAD)).
  876
  877:- style_check(-singleton).  878
  879%= 	 	 
 call_for_literal_db2(?VALUE1, ?VALUE2, ?HEAD) is semidet
Call For Literal Database Extended Helper.
  885call_for_literal_db2(_,_,HEAD):- clause_u(HEAD).
  886call_for_literal_db2(F,_,   _):- (a(completelyAssertedCollection,F);a(completeExtentAsserted,F)),!,fail.
  887call_for_literal_db2(F,A,HEAD):- loop_check(call_rule_db(F,A,HEAD)).
  888call_for_literal_db2(F,A,HEAD):- \+ call_u(use_kif(HEAD,true)),HEAD=..[P1,A1,A2],dif(P2,P1),loop_check_term(clause_u(genlPreds(P2,P1)),gp(P1),fail),
  889   call_u(t(P2,A1,A2)).
  890
  891
  892
  893%= 	 	 
 out_of_mpred_t(?VALUE1) is semidet
Out Of Managed Predicate True Stucture.
  899out_of_mpred_t(HEAD):-clause_safe(HEAD,true)*->true;show_success(why,call_u(fact_always_true(HEAD))).
  900
  901
  902
  903%= 	 	 
 call_rule_db(?F, ?A, ?HEAD) is semidet
Call Rule Database.
  909call_rule_db(F,_A,_HEAD):- a(completelyAssertedCollection,F),!,fail.
  910call_rule_db(_F,_A,HEAD):- if_defined(use_kif(HEAD,_)),!,call_u(kif_ask(HEAD)).
  911call_rule_db(_F,_A,HEAD):- ruleBackward(HEAD,BODY,_Why),call_mpred_body(HEAD,BODY).
  912
  913:- style_check(+singleton).  914:- style_check(-singleton).  915
  916
  917%= 	 	 
 call_mpred_body(?HEAD, :GoalBODY) is semidet
Call Managed Predicate Body.
  923call_mpred_body(_,true):-!.
  924call_mpred_body(HEAD,and(A,B)):- !,call_mpred_body(HEAD,A),!,call_mpred_body(HEAD,B).
  925call_mpred_body(HEAD,(A,B)):- !,call_mpred_body(HEAD,A),call_mpred_body(HEAD,B).
  926call_mpred_body(HEAD,BODY):- no_repeats(loop_check_term(call_mpred_body_ilc(HEAD,BODY),body_of(HEAD),(nop(dmsg(failure(call_mpred_body_ilc(HEAD,BODY)))),!,fail))).
  927
  928
  929%= 	 	 
 call_mpred_body_ilc(?HEAD, :GoalBODY) is semidet
Call Managed Predicate Body Inside Of Loop Checking.
  935call_mpred_body_ilc(_HEAD,BODY):- on_x_debug(BODY).
  936
  937
  938
  939%= 	 	 
 mustIsa(?VALUE1, ?VALUE2) is semidet
Must Be Successfull (isa/2).
  945mustIsa(I,C):-nonvar(I),!,call_u(isa(I,C)),!.
  946mustIsa(I,C):-when(nonvar(I),call_u(isa(I,C))).
  947
  948
  949%= 	 	 
 constrain_args(?HEAD) is semidet
Constrain Arguments.
  955constrain_args(_):-!.
  956constrain_args(HEAD):-HEAD=..[P|ARGS],constrain_args(P,ARGS).
  957
  958
  959%= 	 	 
 constrain_args(?P, ?AR) is semidet
Constrain Arguments.
  965constrain_args(_,_):-!.
  966constrain_args(_P,[AR,GS]):-!,dif(AR,GS).
  967constrain_args(_,[_P,AR,GS]):-!,dif(AR,GS).
  968constrain_args(A,B):- if_defined(constrain_args_pttp(A,B),fail).
  969
  970
  971% call_body_req(HEAD):- functor(HEAD,F,A),HEAD_T=..[F|ARGS],HEAD_T=..[t,F|ARGS],hook_body_req(HEAD,HEAD_T).
  972
  973/*
  974
  975% ========================================================================================
  976% BODY StubType
  977% ========================================================================================
  978
  979body_req_isa(I,C):-isa_backchaing(I,C).
  980
  981body_call_cyckb(HEAD_T):- if_defined(t_l:el_holds_DISABLED_KB), HEAD_T =.. [t|PLIST], baseKB:use_cyc_database,!, no_repeats(if_defined(kbp_t(PLIST))).
  982
  983% =====================================
  984% = body_req
  985% =====================================
  986body_req(HEAD,HEAD_T):- (hook_body_req(HEAD,HEAD_T)).
  987
  988:- was_export(body_req_normal/4).
  989%hook_body_req(HEAD,HEAD_T):- local_q_mpred_isa(F,A,prologPTTP),!,dmsg(warn(hook_body_req(HEAD,HEAD_T))),fail.
  990%hook_body_req(HEAD,HEAD_T):- local_q_mpred_isa(F,A,prologDynamic),!,dmsg(warn(hook_body_req(HEAD,HEAD_T))),fail.
  991hook_body_req(_,_,isa(I,C),_):- !, body_req_isa(I,C).
  992hook_body_req(_,_,_,t(C,I)):- !, body_req_isa(I,C).
  993hook_body_req(_,_,_,t(C,I)):- !, body_req_isa(I,C).
  994hook_body_req(_,_,_ ,HEAD_T):- t_l:useOnlyExternalDBs,!, body_call_cyckb(HEAD_T).
  995% loop checking is not usefull (why the cut was added)
  996hook_body_req(HEAD,HEAD_T):-  no_repeats(body_req_normal(HEAD,HEAD_T)).
  997
  998
  999:- was_export(body_req_normal/4).
 1000body_req_normal(HEAD,HEAD_T):- not(ground(HEAD)),!,no_repeats(HEAD_T,body_req_1(HEAD,HEAD_T)).
 1001body_req_normal(HEAD,HEAD_T):- body_req_1(HEAD,HEAD_T),!. 
 1002
 1003:- was_export(body_req_1/4).
 1004body_req_1(HEAD,HEAD_T):- get_functor(HEAD,F), local_q_mpred_isa(F,A,lc_tcall),!, lc_tcall(body_req_2(HEAD,HEAD_T)).
 1005body_req_1(HEAD,HEAD_T):- body_req_2(HEAD,HEAD_T).
 1006
 1007body_req_2(HEAD,  _):-   get_functor(HEAD,F), local_q_mpred_isa(F,A,external(Module)),!,call(Module:HEAD).
 1008body_req_2(HEAD,HEAD_T):- body_req_with_rules(HEAD,HEAD_T).
 1009
 1010body_req_with_rules(HEAD,HEAD_T):-body_req_no_rules(HEAD,HEAD_T).
 1011body_req_with_rules(HEAD,HEAD_T):-body_req_only_rules(HEAD,HEAD_T).
 1012
 1013body_req_no_rules(HEAD, _):-     clause(HEAD,  true).
 1014body_req_no_rules(_,_,_  , HEAD_T):- clause(HEAD_T,true).
 1015body_req_no_rules(F,_,_,HEAD_T):- body_req_plus_cyc(F,_,_,HEAD_T).
 1016
 1017body_req_only_rules(HEAD, _):-  ruleBackward(HEAD,BODY),call_mpred_body(HEAD,BODY).
 1018body_req_only_rules(_,_,_,t(F,Obj,LValue)):-  choose_val(F,Obj,LValue).
 1019
 1020body_req_plus_cyc(F,_,_,HEAD_T):-  local_q_mpred_isa(F,A,cycPlus2(_)),t_l:useOnlyExternalDBs,!,locally(baseKB:use_cyc_database,body_call_cyckb(HEAD_T)).
 1021
 1022*/
 1023
 1024/*
 1025foo_b(b1).
 1026foo_b(b2):-!.
 1027foo_b(b3):-!.
 1028
 1029:- must_det((findall(R,call_no_cuts(foo_b(R)),List),length(List,3))).
 1030*/
 1031
 1032
 1033%OLD baseKB:decl_database_hook(AR,C):-smart_decl_database(AR,C).
 1034
 1035/*
 1036smart_decl_database(AR,svo(S,V,O)):- !,dbase2pred2svo(DBASE,PRED,svo(S,V,O)),!,smart_db_op(AR,DBASE,PRED,svo(S,V,O)).
 1037smart_decl_database(AR,DBASE):- functor_catch(DBASE,t,_),!,dbase2pred2svo(DBASE,PRED,SVO),!,smart_db_op(AR,DBASE,PRED,SVO).
 1038smart_decl_database(AR,PRED):- dbase2pred2svo(DBASE,PRED,SVO),!,smart_db_op(AR,DBASE,PRED,SVO).
 1039
 1040smart_db_op(change( retract,AR),A,B,C):- retract_ar_fact(AR,A), retract_ar_fact(AR,B),  retract_ar_fact(AR,C).
 1041
 1042retract_ar_fact(all,What):- predicate_property(What,dynamic), !, doall((retract_ar_fact(one,What),fail)).
 1043retract_ar_fact(all,What):- not(predicate_property(What,_)),!.
 1044retract_ar_fact(all,What):- copy_term(What,WO),ignore(once(WO)),must_det(What=@=WO).
 1045
 1046retract_ar_fact(one,What):- predicate_property(What,dynamic),!, clause(What,true),retract(What:-true).
 1047retract_ar_fact(one,What):- predicate_property(What,_),!, clause_safe(What,true),!.
 1048retract_ar_fact(one,What):- dmsg(mssing(retract_ar_fact(one,What))).
 1049
 1050
 1051make_functorskel(_,_,_):-!. % currently ununused
 1052make_functorskel(F,_,_):- fskel(F,_,_,_,_,_,_),!.
 1053make_functorskel(F,N,_):- arity_no_bc(F,N),make_functorskel(F,N,SKEL),asserta(SKEL),!.
 1054make_functorskel(F,N,_):- ignore(arity_no_bc(F,A)),dmsg(todo(trace_or_throw(illegal_make_functorskel(F,N,A)))).
 1055
 1056dbase2pred2svo(DBASE,PRED,svo(A,F,RGS)):-fskel(F,DBASE,PRED,A,RGS,_,_),!.
 1057dbase2pred2svo(DBASE,PRED,svo(A,F,RGS)):-compound(PRED),functor(PRED,F,N),make_functorskel(F,N),!,fskel(F,DBASE,PRED,A,RGS,_,_),!.
 1058dbase2pred2svo(DBASE,PRED,svo(A,F,RGS)):-compound(DBASE),!,arg(1,DBASE,F),must_det(arity_no_bc(F,N)),make_functorskel(F,N),!,fskel(F,DBASE,PRED,A,RGS,_,_),!.
 1059dbase2pred2svo(DBASE,PRED,svo(A,F,RGS)):-nonvar(F),must(arity_no_bc(F,N)),make_functorskel(F,N),!,fskel(F,DBASE,PRED,A,RGS,_,_),!.
 1060*/
 1061
 1062:- was_export(registerCycPredMtWhy/1). 1063
 1064
 1065
 1066%= 	 	 
 registerCycPredMtWhy_3(?CM, ?M, ?PI, :TermF) is semidet
Register Cyc Predicate User Microtheory Generation Of Proof Helper Number 3..
 1072registerCycPredMtWhy_3(_CM,M,PI,F/A2):-
 1073  registerCycPredMtWhy_3(M,PI,F/A2).
 1074
 1075
 1076%= 	 	 
 registerCycPredMtWhy_3(?M, ?PI, :TermF) is semidet
Register Cyc Predicate User Microtheory Generation Of Proof Helper Number 3..
 1082registerCycPredMtWhy_3(M,_PI,F/A2):- 
 1083  ignore((A2==3,assertz_if_new(is_never_type(F)))),
 1084  A is A2 - 2, % decl_mpred_mfa(M,F,A),
 1085  ain(mpred_prop(F,A,cycPlus2)).
 1086
 1087
 1088
 1089%= 	 	 
 registerCycPredMtWhy(:GoalP) is semidet
Register Cyc Predicate User Microtheory Generation Of Proof.
 1095registerCycPredMtWhy(P):-!,baseKB:with_pi(P,baseKB:registerCycPredMtWhy_3).
 1096
 1097
 1098
 1099%= 	 	 
 ensure_universal_stub_plus(?F, ?AMinus2) is semidet
Ensure Universal Stub Plus Presently Unused.
 1105ensure_universal_stub_plus(F,AMinus2):-
 1106  kb_shared(F/AMinus2).
 1107% ensure_universal_stub_plus(F,AMinus2):- /*decl_mpred(F,arity(F,AMinus2)), */ decl_mpred_mfa(user,F,AMinus2).
 1108   
 1109
 1110%= 	 	 
 ensure_universal_stub_plus_mt_why(?F, ?A2) is semidet
Ensure Universal Stub Plus User Microtheory Generation Of Proof.
 1116ensure_universal_stub_plus_mt_why(F,A2):- once(( AMinus2 is A2 -2, ensure_universal_stub_plus(F,AMinus2))),fail.
 1117
 1118%ensure_universal_stub_plus_mt_why(F,A2):- cannot_override(F,A2,Why),!,dmsg(cannot_override_plus_2(F,A2,Why)).
 1119
 1120ensure_universal_stub_plus_mt_why(F,A2):- 
 1121   export(F/A2),
 1122   functor(HEAD,F,A2),
 1123   HEAD=..[F|ARGS],
 1124   append(ARGSMinus2,[_,_],ARGS),
 1125   HEADMinus2=..[F|ARGSMinus2],
 1126   AMinus2 is A2 -2,
 1127   assert_if_new((HEAD:-HEADMinus2)),!,
 1128  % compile_predicates([HEAD]),
 1129   defaultAssertMt(M),
 1130   kb_shared(M:F/AMinus2).
 1131
 1132
 1133:- fixup_exports. 1134
 1135mpred_stubs_file