1%:- module(system_common,[]).
    2:- set_module(class(development)).    3:- '$set_source_module'(baseKB).    4:- use_module(library(pfc_lib)).    5:- mpred_unload_file.    6:- ensure_abox(baseKB).    7:- set_fileAssertMt(baseKB).    8% ensure this file does not get unloaded with mpred_reset
    9:- prolog_load_context(file,F), ain(mpred_unload_option(F,never)).

system_common

% ============================================= % File 'system_common.pfc' % Purpose: Agent Reactivity for SWI-Prolog % Maintainer: Douglas Miles % Contact: $Author: dmiles $@users.sourceforge.net ; % Version: 'interface' 1.0.0 % Revision: $Revision: 1.9 $ % Revised At: $Date: 2002/06/27 14:13:20 $ % ============================================= % % PFC is a language extension for prolog.. there is so much that can be done in this language extension to Prolog % % % props(Obj,[height(ObjHt)]) == t(height,Obj,ObjHt) == rdf(Obj,height,ObjHt) == t(height(Obj,ObjHt)). % pain(Obj,[height(ObjHt)]) == prop_set(height,Obj,ObjHt,...) == ain(height(Obj,ObjHt)) % [pdel/pclr](Obj,[height(ObjHt)]) == [del/clr](height,Obj,ObjHt) == [del/clr]svo(Obj,height,ObjHt) == [del/clr](height(Obj,ObjHt)) % keraseall(AnyTerm). % % ANTECEEDANT CONSEQUENT % % P = test nesc true assert(P),retract(~P) , enable(P). % ~ P = test nesc false assert(~P),retract(P), disable(P) % % ~ ~(P) = test possible (via not impossible) retract( ~(P)), enable(P). % \+ ~(P) = test impossiblity is unknown retract( ~(P)) % ~ \+(P) = same as P same as P % \+(P) = test naf(P) retract(P) % % Dec 13, 2035 % Douglas Miles */

   45% :- require('system_base.pfc').
   46:- system:op(1199,fx,('==>')).   47:- system:op(1190,xfx,('::::')).   48:- system:op(1180,xfx,('==>')).   49:- system:op(1170,xfx,('<==>')).   50:- system:op(1160,xfx,('<-')).   51
   52:- system:op(1150,xfx,('=>')).   53:- system:op(1140,xfx,('<=')).   54:- system:op(1130,xfx,('<=>')).   55
   56
   57:-  system:op(600,yfx,('&')).   58:-  system:op(600,yfx,('v')).   59:-  system:op(350,xfx,('xor')).   60:-  system:op(300,fx,('~')).   61:-  system:op(300,fx,('-')).   62
   63% :- autoload.
   64:- mpred_unload_file.   65:- style_check(-discontiguous).   66
   67:- kb_shared(startup_option/2).   68
   69:- meta_predicate(without_depth_limit(0)).   70without_depth_limit(G):- call_with_depth_limit(G,72057594037927935,Result),sanity(Result\==depth_limit_exceeded).
   71
   72/*
   73without_depth_limit(G):-
   74   ('$depth_limit'(72057594037927935,Was,_), 
   75    (Was == -1 -> call(G);  % Not inside cwdl
   76    (Was > 72000000000000000 -> call(G);  % We left Depth limit slightly messed
   77      call_cleanup(G,'$depth_limit'(Was,_,_))))).
   78*/
   79
   80
   81%:- use_module(library(rtrace)).
   82:- mpred_unload_file.   83:- begin_pfc.   84% :- '$set_source_module'(baseKB).
   85% :- prolog_load_context(module,Mod),sanity(Mod==baseKB),writeq(prolog_load_context(module,Mod)),nl.
   86
   87:- ensure_abox(baseKB).   88
   89
   90
   91
   92completelyAssertedCollection(tInferInstanceFromArgType).
   93completelyAssertedCollection(ttNotTemporalType).
 prologNegByFailure(?VALUE1) is semidet
Prolog Negated By Failure.
  101prologNegByFailure(prologNegByFailure).
  102prologNegByFailure(quotedIsa/3).
  103~prologNegByFailure(isa/2).
  104
  105% :- listing( ~ / 1).
  106
  107
  108/*
  109==>(someTimesBuggy2ndOrder,
  110((someTimesBuggy2ndOrder,genlPreds(C1,C2),arity(C1,2)) ==>
  111  {P1 =.. [C1,X,Y],
  112    P2 =.. [C2,X,Y]},
  113  clif(P1 => P2))).
  114
  115someTimesBuggy2ndOrder ==>
  116((genlPreds(C1,C2),arity(C1,3)) ==>
  117  {P1 =.. [C1,X,Y,Z],
  118    P2 =.. [C2,X,Y,Z]},
  119  clif(P1 => P2)).
  120
  121*/
  122% tSet(C)/(atom(C),TCI=..[C,I]) ==> (arity(C,1),mpred_univ(C,I,TCI), ... )
  123
  124
  125% :- prolog.
  126% tPred
  127
  128
  129==> completelyAssertedCollection(isEach(tCol,tPred,pfcControlled)).
  130
  131ttRelationType(C)==>completelyAssertedCollection(C).
  132
  133% ~genls(meta_argtypes,ftSpec).
  134
  135:- dynamic(baseKB:mudWielding/2).  136
  137prologMultiValued(P)==> \+ prologSingleValued(P).
  138prologSingleValued(P)==> \+ prologMultiValued(P).
  139
  140~(ttExpressionType(prologEquality)).
  141ttRelationType(prologEquality).
  142prologEquality(mudEquals/2).
  143prologEquality(('=')/2).
  144prologEquality(('==')/2).
  145
  146arity(',',2).
  147
  148:- nortrace.  149
  150
  151~(isa((','), prologEquality)).
  152
  153==>tSet(isEach(tCol,tPred,pfcControlled)).
  154
  155rtArgsVerbatum(meta_argtypes).
  156rtArgsVerbatum(functorIsMacro).
  157rtArgsVerbatum(functorDeclares).
  158
  159pfcControlled(genlPreds).
  160pfcControlled(isa).
  161pfcControlled(argIsa).
  162
  163
  164%tCol(X) ==> isa(X,tCol).
  165%tCol(X) ==> ruleRewrite(t(X,I),isa(I,X)).
  166
  167==>( specialized_conflict_tests ==> (( ~tCol(T),tCol(T)) ==> conflict(~tCol(T)))).
  168
  169%typeProps(tCoffeeCup,[mudColor(vBlack),mudColor(isEach(vBrown,vBlack)),mudSize(vSmall),mudShape(vCuplike),mudMaterial(vGlass),mudTexture(vSmooth)]).
  170%props(iCoffeeCup7,[mudColor(vBlack),mudColor(isEach(vBrown,vBlack)),mudSize(vSmall),mudShape(vCuplike),mudMaterial(vGlass),mudTexture(vSmooth)]).
  171
  172:- sanity(get_lang(pfc)).  173
  174% tCol(C)/(\+ never_isa_syntax(C))==>{decl_as_isa(C)}.
  175
  176%underkill - Though it is making bad things happen 
  177ttExpressionType(C)==> \+ completelyAssertedCollection(C).
  178
  179   % :- mpred_trace_exec.
  180  ==> prologHybrid(isLoaded(tMicrotheory),pfcControlled).
  181  tSet(isLoaded).
  182  :- mpred_notrace_exec.  183
  184==> prologHybrid(isLoadedType(ttModuleType),pfcControlled).
  185
  186
  187:- kb_shared((onSpawn)/1).
 onSpawn(:TermA) is semidet
Whenever Spawn.
  195:- kb_shared((onSpawn)/1).  196
  197rtArgsVerbatum(onSpawn).
  198
  199onSpawn(When==>State)/nonvar(State) ==> ( When ==> onSpawn(State)).
  200onSpawn(State)/mpred_literal(State) ==> {doSpawn(State)}.
  201
  202
  203%:-ain(((ttModuleType(ModType),isa(Thing,ModType),isLoaded(Thing), \+ ttExpressionType(ModType) ==> isLoadedType(ModType)))).
  204%==>(((onSpawn(Idea)==> ((isLoadedType(tSourceData),isRuntime) ==> {ain_expanded(Idea,())})))).
  205
  206onStart(Idea)/definitional(Idea) ==> Idea.
  207
  208((onStart(Idea)/ ( \+ definitional(Idea))) ==> 
  209  (isRuntime ==> {get_startup_uu(UU),ain_expanded(Idea,UU)})).
  210
  211==>pfcControlled(prologArity(tRelation,ftInt)).
  212==>pfcControlled(isa(ftTerm,tCol)).
  213
  214tSet(tSet).
  215tSet(tCol).
  216tFixedArityRelation(tSet).
  217tFixedArityRelation(tCol).
  218ttRelationType(prologHybrid).
  219
  220:- check_clause_counts.  221
  222%:- rtrace,trace.
  223%:- notrace, nortrace.
  224
  225
  226
  227prologHybrid(mudToCyc(ftTerm,ftTerm)).
  228
  229:- sanity(arity(mudToCyc,2)).  230
  231% col_as_isa(X)==>tFixedArityRelation(X),arity(X,1).
  232col_as_unary(X)==>tFixedArityRelation(X),arity(X,1).
  233
  234:- kb_shared(ttExpressionType/1).  235
  236tSet(ttExpressionType).
  237tSet(completelyAssertedCollection).
  238
  239ttExpressionType(C) ==> ( \+ completelyAssertedCollection(C), \+ tSet(C), ~ tSet(C), tCol(C)).
  240
  241
  242:- sanity(get_lang(pfc)).  243%WEIRD ~(tCol(C))/completelyAssertedCollection(C)==> \+ completelyAssertedCollection(C).
  244% EASIER
  245% ~tCol(C) ==> ~completelyAssertedCollection(C).
  246% (tCol(C),\+ ttExpressionType(C)) ==> tSet(C).
  247% ((tCol(P), \+ ttExpressionType(P)) <==> tSet(P)).
  248
  249/*
  250
  251@TODO BASE DOES THIS
  252
  253tSet(C) ==>
  254({((
  255  % 
  256  % dynamic(C/1),
  257  % wdmsg(c_tSet(C)),  
  258  %call((shouldnt_be_set(C) -> (show_failure(mpred_why(tSet(C))),
  259  %   show_failure(mpred_why(tCol(C))),break) ; true)),
  260  must(atom(C)),
  261  %\+ ttExpressionType(C),
  262  ( \+ is_static_predicate(C/1)),
  263  functor(Head,C,1),
  264  call(BHead=baseKB:Head),
  265  ( \+(predicate_property(BHead,_))-> kb_shared(C/1); true),
  266  baseKB:export(baseKB:C/1),
  267  %mpred_type_isa:import(baseKB:C/1),
  268  nop(predicate_property(BHead,dynamic)->true;show_pred_info(BHead))))},
  269  functorDeclares(C),
  270  pfcControlled(C),
  271  \+ ttExpressionType(C),
  272  tCol(C),
  273  arity(C,1)).
  274*/
  275
  276
  277/*
  278tSet(C)==>
  279 ( {atom(C), functor(Head,C,1), call(BHead=baseKB:Head),
  280   ( \+(predicate_property(BHead,_))-> kb_shared(C/1); true),
  281    nop(predicate_property(BHead,dynamic)->true;show_pred_info(BHead))},
  282   functorDeclares(C),
  283   pfcControlled(C),
  284   arity(C,1)).
  285*/
  286
  287
  288/*
  289tSet(C)/(atom(C),TCI=..[C,I]) ==> (arity(C,1),
  290 % mpred_univ(C,I,TCI),
  291 {call_u((decl_type(C), 
  292  ignore((
  293   \+ is_static_predicate(C/1),
  294   kb_shared(C/1),
  295   \+ completelyAssertedCollection(C),
  296   call_u(ain((
  297   ((TCI :- 
  298    ((cwc, call_u((
  299      predicate_property(TCI,number_of_rules(1)),
  300    lazy(( \+ call_u(~(TCI)))),
  301    isa_backchaing(I,C))))))))))))))}).
  302
  303
  304*/
  305/*
  306ttExpressionType(P) ==> 
  307 {get_functor(P,F), functor(Head,F,1), call(BHead=baseKB:Head),
  308  call((\+ predicate_property(BHead,defined) -> kb_shared(F/1); true)),
  309  call((predicate_property(BHead,dynamic)->(ain(Head==>{ignore(retract(Head))}));show_pred_info(BHead)))},
  310  ~functorIsMacro(F),
  311  ~functorDeclares(F),
  312  ~tSet(F),
  313  notAssertibleCollection(F),
  314  tCol(F),
  315  completelyDecidableCollection(F),
  316  arity(F,1).
  317*/
  318
  319% % :- mpred_trace_exec.
  320
  321tSet(tKnownID).
  322% :- xlisting(tKnownID).
  323%?- isa(tKnownID,W).
  324%:- break.
  325
  326:- mpred_notrace_exec.  327
  328% (tInferInstanceFromArgType(Col),tCol(Col)/i_name('',Col,ColName),tPred(Prop)/i_name('',Prop,PropName),{ColName=PropName}==> tInferInstanceFromArgType(Prop)).
  329
  330% (tInferInstanceFromArgType(Prop),tPred(Prop),arity(Prop,N)/(N>1) ==> ({i_name('vt',Prop,FinalType)},tCol(FinalType),tInferInstanceFromArgType(FinalType),argIsa(Prop,N,FinalType))).
  331
  332prologSideEffects(write/1).
  333prologSideEffects(resolveConflict/1).
  334
  335
  336
  337/*
  338((hybrid_support(F,A)/(is_ftNameArity(F,A), \+ prologDynamic(F),\+ is_static_predicate(F/A))) ==>
  339  ({    
  340    functor(G,F,A),
  341     (var(M)->must(defaultAssertMt(M));true),
  342     (var(M)->ignore(( current_predicate(F,M:G), \+ predicate_property(M:G,imported_from(_))));true),
  343     (var(M)->predicate_property(M:G,exported);true),
  344     % must(rebuild_pred_into(G,G,ain,[+dynamic,+multifile,+discontiguous])),         
  345     % (predicate_property(M:G,dynamic)->true;must(convert_to_dynamic(M,F,A))),
  346     kb_shared(M:F/A),
  347     show_failure(hybrid_support, \+ is_static_predicate(F/A))}),
  348     prologHybrid(F),
  349    arity(F,A)).
  350*/
  351
  352
  353arity(functorIsMacro,1).
  354
  355functorIsMacro(functorIsMacro).
  356ttRelationType(X)==>functorDeclares(X).
  357% tCol(X)==>functorDeclares(X).
  358% functorDeclares(X)==>tCol(X).
  359% functorIsMacro(X)==>functorDeclares(X).
  360functorIsMacro(pddlSomethingIsa/2).
  361tPred(pddlSomethingIsa(ftTerm,ftListFn(tCol))).
  362
  363/*
  364prologBuiltin(A) :- cwc,head_to_functor_name(A, B),prologBuiltin(B).
  365prologBuiltin(P) :- cwc,is_ftCompound(P),!,get_functor(P,F,A),functor(C,F,A),(predicate_property(C,built_in)). % predicate_property(P,static)).
  366ttRelationType(PT)==> {atom(PT),H=..[PT,I]}, (H:-cwc,head_to_functor_name(I,F),call_u(call(PT,F))).
  367*/
  368
  369
  370tCol(iExplorer4)==>{trace_or_throw(never_tCol(iExplorer4))}.
  371
  372==> isa(pddlSomethingIsa/2, prologHybrid).
  373
  374arity(argIsa,3).
  375
  376
  377% prologHybrid(F/A)/(atom(F),number(A)) ==> arity(F,A),{must(dynamic_safe(F/A))}.
  378
  379%:-mpred_trace_exec.
  380
  381% Functions
  382hardCodedExpansion ==> ((tFunction(ArgTypes)/is_declarations(ArgTypes)) ==> meta_argtypes(ArgTypes),{get_functor(ArgTypes,F)}, tFunction(F)).
  383% FormatTypes
  384hardCodedExpansion ==> (ttExpressionType(ArgTypes)/is_declarations(ArgTypes) ==> meta_argtypes(ArgTypes)).
  385
  386argIsa(completeExtentAsserted,1,tPred).
  387
  388((meta_argtypes(ArgTypes)/sanity(is_ftCompound(ArgTypes))) ==> 
  389   ({get_functor(ArgTypes,F,A),A>1},arity(F,A),{arg(N,ArgTypes,Type)},argIsa(F,N,Type))).
  390
  391
  392meta_argtypes(argIsa(tRelation,ftInt,tCol)).
  393
  394:- mpred_run.  395:- mpred_notrace_exec.  396
  397/* 
  398
  399@ TODO BASE DOES THIS
  400tSet(rtNotForUnboundPredicates).
  401ttRelationType(rtNotForUnboundPredicates).
  402
  403functorIsMacro(tCol).
  404
  405
  406tCol(tCol).
  407tCol(tSet).
  408
  409rtArgsVerbatum(meta_argtypes).
  410rtArgsVerbatum(functorIsMacro).
  411rtArgsVerbatum(functorDeclares).
  412tCol(prologMultiValued).
  413tCol(prologSingleValued).
  414tCol(tFunction).
  415tCol(tInferInstanceFromArgType).
  416tCol(tPred).
  417tCol(tRelation).
  418tCol(ttSpatialType).
  419ttTypeType(ttTypeType).
  420ttTypeType(C)==>tSet(C).
  421ttTypeType(ttAgentType).
  422*/
  423
  424:- sanity(tSet(ttAgentType)).  425
  426tCol(tWorld).
  427completelyAssertedCollection(tInferInstanceFromArgType).
  428completelyAssertedCollection(ttNotTemporalType).
  429
  430
  431/* 
  432
  433@ TODO BASE DOES THIS
  434
  435completelyAssertedCollection(prologSingleValued).
  436completelyAssertedCollection(tCol).
  437completelyAssertedCollection(ttExpressionType).
  438completelyAssertedCollection(ttValueType).
  439completelyAssertedCollection(ttTemporalType).
  440completelyAssertedCollection(tRelation).
  441completelyAssertedCollection(tPred).
  442
  443% completelyAssertedCollection(C)==>completeExtentAsserted(C).
  444
  445% :- throw(this_file).disjointWith(Sub, Super) ==> disjointWith( Super, Sub).
  446
  447ttRelationType(rtSymmetricBinaryPredicate).
  448
  449
  450
  451tSet(rtNotForUnboundPredicates).
  452
  453*/
  454
  455completelyAssertedCollection(completeExtentAsserted).
  456completeExtentAsserted(completelyAssertedCollection).
  457completelyAssertedCollection(completelyAssertedCollection).
  458completeExtentAsserted(functorDeclares).
  459completeExtentAsserted(completeExtentAsserted).
  460arity(completeExtentAsserted,1).
  461
  462% tSet(completeExtentAsserted).
  463argIsa(completeExtentAsserted,1,tPred).
  464meta_argtypes(genlPreds(tPred,tPred)).
  465:- must_det(argIsa(genlPreds,2,_)).  466completeExtentAsserted(defnSufficient).
  467
  468
  469:- kb_shared(ttNotTemporalType/1).  470ttNotTemporalType(ftInt).
  471%ttNotTemporalType(ftTerm).
  472ttNotTemporalType(tCol).
  473ttNotTemporalType(ttExpressionType).
  474ttNotTemporalType(ttValueType).
  475
  476==>ttNotTemporalType(tCol).
  477ttNotTemporalType(T)==>tCol(T).
  478==>ttTemporalType(tTemporalThing).
  479ttTemporalType(T)==>tCol(T).
  480
  481arity(argQuoted,1).
  482
  483
  484
  485
  486
  487
  488
  489(ttExpressionType(FT),{is_ftCompound(FT)})==>meta_argtypes(FT).
  490
  491tSet(vtDirection).
  492
  493:- sanity(get_lang(pfc)).  494
  495disjointWith(tPred,tFunction).
  496
  497disjointWith(ttTemporalType,ttAbstractType).
  498
  499
  500prologSideEffects(P)==>rtNotForUnboundPredicates(P).
  501
  502isa(tRelation,ttAbstractType).
  503
  504
  505
  506
  507:- if(baseKB:startup_option(datalog,sanity);baseKB:startup_option(clif,sanity)).  508
  509:- reconsult(pack(logicmoo_base/t/examples/pfc/'neg_sanity.pfc')).  510
  511
  512:- endif. % load_time_sanity
  513
  514
  515%P/(is_ftNonvar(P),get_functor(P,F)),afterAdding(F,Do)/is_ftNonvar(Do)==>{call(Do,P)}.
  516%~P/(is_ftNonvar(P),get_functor(P,F)),afterRemoving(F,Do)/is_ftNonvar(Do)==>{call(Do,P)}.
  517
  518
  519
  520
  521%:-rtrace.
  522% (tCol(Inst), {isa_from_morphology(Inst,Type)}) ==> (isa(Inst,Type)).
  523
  524% HOW TO MAKE THIS FAST?  isa(Inst,Type) <= {isa_from_morphology(Inst,Type)}.
  525
  526%((disjointWith(P1,P2) , genls(C1,P1), {dif:dif(C1,P1)}) ==>    disjointWith(C1,P2)).
  527% (disjointWith(C1,P2) <= (genls(C1,P1), {dif:dif(C1,P1)}, disjointWith(P1,P2))).
  528
  529tSet(completelyAssertedCollection).
  530rtArgsVerbatum(completeIsaAsserted).
  531% BAD genls(completeIsaAsserted,tTemporalThing).
  532%assumed genls(A,B)==>(arity(A,1),arity(B,1)).
  533%assumed genls(completelyAssertedCollection,tCol).
  534/*
  535completelyAssertedCollection(completelyAssertedCollection).
  536completelyAssertedCollection(tPred).
  537completelyAssertedCollection(tRelation).
  538completelyAssertedCollection(ttExpressionType).
  539completelyAssertedCollection(tCol).
  540completelyAssertedCollection(functorIsMacro).
  541% completelyAssertedCollection(functorDeclares).
  542completelyAssertedCollection(ttRelationType).
  543completelyAssertedCollection(completelyAssertedCollection).
  544*/
  545% dividesBetween(S,C1,C2) ==> (disjointWith(C1,C2) , genls(C1,S) ,genls(C2,S)).
  546
  547% disjointWith(P1,P2) ==> ((~(isa(C,P1))) <==> isa(C,P2)).
  548
  549% isa(Col1, ttObjectType) ==> ~(isa(Col1, ttExpressionType)).
  550
  551
  552% tCol(ArgsIsa):-ttRelationType(ArgsIsa).
  553% TODO decide if OK
  554%tCol(F):-t(functorDeclares,F).
  555tSet(ttExpressionType).
  556
  557
  558
  559%assumed genls(ttSpatialType,ttTemporalType).
  560%assumed genls(tSpatialThing,tTemporalThing).
  561
  562
  563
  564
  565% remove conflicts early 
  566% (~(P)/mpred_non_neg_literal(P) ==> ( {mpred_remove(P)}, (\+P ))).
  567
  568==>tCol(rtAvoidForwardChain, comment("rtAvoidForwardChain means that backchain is required for subclasses 
  569     to gain membership TODO: Give example "
  570     )).
  571
  572tCol('tThing').
  573arity('tThing',1).
  574% genls(ttExpressionType,rtAvoidForwardChain).
  575isa('tThing',rtAvoidForwardChain).
  576
  577
  578%isa('CycLTerm',rtAvoidForwardChain).
  579prologHybrid(quotedIsa(ftTerm,ttExpressionType)).
  580
  581:- kb_shared(quotedIsa/2).  582
  583isa_or_type(X,Y):- cwc, quotedIsa(X,Y).
  584isa_or_type(X,Y):- cwc, isa(X,Y).
  585
  586/*
  587  ftSpec
  588  tCol
  589 ttFormatType | tCol
  590*/
  591:- kb_shared(mainClass/2).  592
  593mainClass(I,C)==>isa(I,C).
  594
  595not_isa(I,C):- cwc, mainClass(I,MC),disjointWith(MC,DC),genls(C,DC).
  596
  597% isa(I,C):- cwc, is_ftNonvar(C),ttExpressionType(C),!,quotedIsa(I,C).
  598%isa(I,C):- cwc, tCol(C),(ttExpressionType(C)*->quotedIsa(I,C);loop_check(isa_backchaing(I,C))).
  599%isa(I,C):- cwc, tSet(C),(ttExpressionType(C)*->quotedIsa(I,C)).
  600% isa(I,C):- cwc, when(?=(I,C),\+ clause_b(isa(I,C))), (loop_check(visit_pred(I,C))*->true;loop_check(no_repeats(isa_backchaing(I,C)))).
  601%isa(I,C):- cwc, loop_check(visit_pred(I,C)).
  602%isa(I,C):- cwc, loop_check(visit_isa(I,C)).
  603
  604isa([tIndividual(tSack)],C):-C==ftListFn(ftAskable),!.
  605isa(iExplorer2,C):- C==rtArgsVerbatum,!,fail.
  606:- asserta((isa(I,C):- ground(I:C),not_isa(I,C),!,fail)).  607% isa(I,C):- cwc, no_repeats(loop_check(isa_backchaing(I,C))).
  608% isa(_,C):- nonvar(C),\+ tSet(C),!,fail.
  609
  610quotedIsa(_,C):- nonvar(C), tSet(C),!,fail.
  611quotedIsa(I,C):- cwc, loop_check(term_is_ft(I,C)).
  612
  613dif_in_arg(P,N,Q):- cwc, ground(P),P=..[F|ARGS],arg(N,P,B),Q=..[F|ARGS],nb_setarg(N,Q,A),dif(A,B).
  614
  615tSet(ttSpatialType).
  616tSet(tSpatialThing).
  617completelyAssertedCollection(tCol).
  618
  619
  620
  621:- kb_shared(isa/2).  622
  623% ttRelationType(Prop)==>tCol(Prop).
  624
  625:- forall(between(1,12,N),kb_shared(proven_holds_t/N)).  626:- forall(between(1,12,N),kb_shared(proven_not_holds_t/N)).  627:- forall(between(1,12,N),kb_shared(proven_poss_t/N)).  628:- forall(between(1,12,N),kb_shared(proven_not_poss_t/N)).  629
  630%:-baseKB:agenda_slow_op_enqueue(ain(((arity(Pred,2),argIsa(Pred,1,Col)/(is_ftNonvar(Pred),Col\=ftTerm,tCol(Col)), \+prologSideEffects(Pred), t(Pred,Arg,_)/is_ftNonvar(Arg)) ==> t(Col,Arg)))).
  631%:-baseKB:agenda_slow_op_enqueue(ain(((arity(Pred,2),argIsa(Pred,2,Col)/(is_ftNonvar(Pred),Col\=ftTerm,tCol(Col)), \+prologSideEffects(Pred), t(Pred,_,Arg)/is_ftNonvar(Arg)) ==> t(Col,Arg)))).
  632%:-add_slow(((arity(Pred,2),argIsa(Pred,2,Col)/(is_ftNonvar(Pred),Col\=ftTerm,tCol(Col)),t(Pred,_,Arg)/is_ftNonvar(Arg)) ==> t(Col,Arg))).
  633
  634%(((P/(has_functor(P),get_functor(P,F,A),A\=2,\+prologSideEffects(F),mpred_literal(P)) ==> {baseKB:agenda_slow_op_enqueue(deduceEachArgType(P))}))).
  635
  636% :-rtrace.
  637     
  638
  639%:- ensure_loaded('system_domains.pfc').
  640
  641
  642/*
  643:- ain(((vtActionTemplate(ArgTypes)/is_declarations(ArgTypes) ==> vtActionTemplate(ArgTypes)))).
  644:- ain(((baseKB:action_info(ArgTypes,_)/is_declarations(ArgTypes) ==> vtActionTemplate(ArgTypes)))).
  645:- ain(((functorIsMacro(Compound)/compound_functor(Compound,F)) ==> functorDeclares(F))).
  646hardCodedExpansion ==> ((ttExpressionType(FT)/is_declarations(FT))==>meta_argtypes(FT)).
  647
  648
  649*/
  650
  651disjointWith(tCol,tIndividual).
  652% :- noguitracer.
  653%:- rtrace.
  654/*
  655codeTooSlow ==>
  656((  arity(F,A)/(atom(F),\+ is_sentence_functor(F),number(A),A>1,A<10,functor(P,F,A),\+ rtLogicalConnective(F)), 
  657  \+ meta_argtypes_guessed(P),   
  658   (argIsa(F,A,NOTFT)/NOTFT\==ftTerm),
  659   (argIsa(F,1,NOTFT2)/NOTFT2\==ftTerm),
  660 {generateArgVars(P, argIsa(F), '='(_))}
  661==> meta_argtypes_guessed(P))).
  662*/
  663meta_argtypes_guessed(P)==>meta_argtypes(P).
  664   
  665:- if(baseKB:startup_option(datalog,sanity);baseKB:startup_option(clif,sanity)).  666
  667
  668% :- if_startup_script(locally_tl(pfcExpansion,ensure_loaded(mpred_i_mpred_mpred_testing))).
  669
  670% :-asserta(baseKB:isa_pred_now_locked).
  671
  672
  673% :-loadTinyAssertions1.
  674
  675%:-prolog_repl.
  676%:-showTinyAssertions.
  677%:-prolog_repl.
  678%:-loadTinyAssertions2.
  679
  680
  681:- endif.  682
  683:- meta_predicate(~(0)).  684:- kb_shared(~(0)).  685
  686% pddlObjects(Type,EList)==>  isa(isEach(EList),Type).
  687% pddlSorts(Type,EList)==> genls(isEach(EList),Type).
  688
  689
  690:- kb_shared(argIsa/3).  691
  692
  693/*
  694prologBuiltin(col_arity/2).
  695col_arity(Spec,A):-arity(Spec,A),!.
  696col_arity(Spec,A):-atom(Spec),!,A=1.
  697col_arity(Spec,A):-compound(Spec),functor(Spec,_,A).
  698isa(Spec,tCol)/col_arity(Spec,A) ==> arity(Spec,A).
  699*/
  700
  701% :-ain((mpred_isa(I,C)==>{ain((isa(I,tPred),mpred_isa(I,C),props(I,[C])))})).
  702% :-ain((t(C,I)==>{ /* retract(hasInstance_dyn(C,I)), */ ain((isa(I,C))) , ain((props(I,C)))})).
  703
  704
  705% :-include('mpred_header.pi').
  706tSet(tPred).
  707
  708:- sanity(assert_argIsa(tPred,1,tPred)).  709:- sanity(ain(argIsa(tPred,1,tPred))).  710
  711
  712/*
  713% reflexive equality
  714equal(A,B) ==> equal(B,A).
  715equal(A,B),{ \+ (A=B}),equal(B,C),{ \+ (A=C)} ==> equal(A,C).
  716
  717notequal(A,B) ==> notequal(B,A).
  718equal(A,C),notequal(A,B) ==> notequal(C,B).
  719*/
  720
  721:- dynamic(either/2).  722% is this how to define constraints?
  723% either(P,Q) ==> (~(P) ==> Q), (~(Q) ==> P).
  724(either(P,Q) ==> ((~(P) <==> Q), (~(Q) <==> P))).
  725% ((P,Q ==> false) ==> (P ==> ~(Q)), (Q ==> ~(P))).
  726
  727
  728:-  /**/ export(member/2).  729:-  /**/ export(arg/3).  730%:-  /**/ export(call_u/1).
  731% prologDynamic(cycAssert/2).
  732:-  /**/ export(integer/1).  733% :-  /**/ export(makeConstant/1).
  734% :-  /**/ export(naf/1).
  735:-  /**/ export(number/1).  736:-  /**/ export(string/1).  737:-  /**/ export(var/1).  738
  739
  740
  741tSet(completeExtentAsserted).
  742tSet(ttExpressionType).
  743
  744rtArgsVerbatum(functorIsMacro).
  745rtArgsVerbatum(functorDeclares).
  746
  747%((prologHybrid(C),{get_functor(C,F,A),C\=F}) ==> arity(F,A)).
  748==>prologHybrid(typeProps/2).
  749
  750==>typeProps(Type,List)/(member(isa(Super),List),nonvar(Super))==>genls(Type,Super).
  751
  752arity(typeProps,2).
  753
  754% :- decl_mpred_pfc ~/1.
  755
  756
  757:- ignore(show_failure(why,arity(typeProps,2))).  758:- sanity(call_u(arity(typeProps,2))).  759
  760% ==> (==>(argIsa(isEach(tPred,prologMultiValued,prologOrdered,prologNegByFailure,meta_argtypes,prologHybrid,prologPTTP,prologDynamic,functorIsMacro,prologListValued,prologSingleValued),2,ftListFn(ftVoprop)))).
  761% :- ain_expanded(==>(isa(isEach(prologMultiValued,prologOrdered,prologNegByFailure,meta_argtypes,prologPTTP,prologHybrid,predCanHaveSingletons,prologDynamic,prologBuiltin,functorIsMacro,prologListValued,prologSingleValued),functorDeclares))).
  762% ==>(genls(isEach(prologMultiValued,prologOrdered,prologNegByFailure,prologHybrid,prologPTTP,prologDynamic,prologBuiltin,prologKIF,functorIsMacro,prologListValued,prologSingleValued),tPred)).
  763:- assert_hasInstance(tCol,tCol).  764:- file_begin(pfc).  765
  766 
  767% FIXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxx
  768% FIXX 
  769==> prologHybrid(isEach( tCol/1, disjointWith/2, genls/2,genlPreds/2, meta_argtypes/1)).
  770% FIXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxx
  771
  772% FIXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxx
  773% FIXX 
  774==> prologHybrid(isEach( ttNotTemporalType/1,ttTemporalType/1 )).
  775% TODO FIX 
  776% :- decl_mpred(tDeleted(ftID),[prologIsFlag]).
  777prologIsFlag(tDeleted(ftID)).
  778% FIXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxx
  779
  780==>prologHybrid(genlInverse/2).
  781==>prologHybrid(genlPreds/2).
  782==>prologHybrid(argIsa/3).
  783==>prologHybrid(predProxyAssert,2).
  784==>prologHybrid(predProxyQuery, 2).
  785==>prologHybrid(predProxyRetract, 2).
  786
  787%assumed prologHybrid(disjointWith/2).
  788==>prologHybrid(instTypeProps/3).
  789==>prologHybrid(predTypeMax/3).
  790==>prologHybrid(resultIsa/2).
  791%assumed prologHybrid(isa/2).
  792==>prologDynamic(arg/3).
  793~tSet(meta_argtypes).
  794tSet(tInferInstanceFromArgType).
  795% tCol(tPathway).
  796%assumed genls(tFunction,tRelation).
  797
  798tSet(ttValueType).
  799
  800ttExpressionType(ftString).
  801ttExpressionType(ftVar).
  802
  803
  804ttExpressionType(ftCallable).
  805ttExpressionType(ftPercent).
  806
  807
  808:- dynamic(vtColor/1).  809% :- rtrace, visible(-all),visible(+exception).
  810isa(vRed,vtColor).
  811
  812completelyAssertedCollection(vtValue).
  813
  814
  815isa(vtColor,ttValueType).
  816
  817isa(X,ttValueType) ==> genls(X,vtValue).
  818isa(X,ttValueType) ==> completelyAssertedCollection(X).
  819
  820isa(vtValue,ttValueType).
  821
  822
  823% :- sanity((vtColor(vRed))).
  824
  825
  826%argIsa(Prop,N,Type) :- cwc,number(N),loop_check(argIsa_known(Prop,N,Type)),must(ground(argIsa(Prop,N,Type))).
  827%argIsa(Prop,N,Type) <- {cwc,number(N),argIsa_known(Prop,N,Type),must(ground(argIsa(Prop,N,Type)))}.
  828
  829ttExpressionType(Type) ==> (argIsa(Prop,N,Type),{number(N)} ==> argQuotedIsa(Prop,N,Type)).
  830
  831:- discontiguous(prologSingleValued/1).  832
  833
  834:- do_gc.  835
  836:- kb_shared(mudLabelTypeProps/3).  837%:- listing(ttRelationType).
  838% :- rtrace.
  839% :- forall((ttRelationType(F),functorDeclares(F)),ain(genls(F,tPred))).
  840:- nortrace.  841% :-  /**/ export(mtForPred/2).
  842
  843/*
  844:- rtrace.
  845:- debug,dtrace,(kb_shared((argIsa/3, formatted_resultIsa/2, localityOfObject/2, subFormat/2, 
  846    isa/2,  genls/2, pddlSomethingIsa/2, ttSpatialType/1, 
  847    resultIsa/2, subFormat/2, tCol/1, tRegion/1, completelyAssertedCollection/1, 
  848    ttExpressionType/1, typeProps/2))).
  849
  850:- prolog. 
  851*/
  852/*
  853:- kb_shared((argIsa/3, formatted_resultIsa/2, localityOfObject/2, subFormat/2, 
  854    isa/2,  genls/2, pddlSomethingIsa/2, 
  855    resultIsa/2, subFormat/2, tCol/1, tRegion/1, completelyAssertedCollection/1, 
  856    ttExpressionType/1, typeProps/2)).
  857*/
  858/* FIX
  859==>
  860*/
  861prologHybrid(isEach(argIsa/3, formatted_resultIsa/2, localityOfObject/2, subFormat/2, isa/2, 
  862   genls/2, pddlSomethingIsa/2, resultIsa/2, subFormat/2, tCol/1, tRegion/1, 
  863   completelyAssertedCollection/1, ttExpressionType/1, typeProps/2)).
  864
  865
  866:- ain(isa(ttExpressionType,ttAbstractType)).  867:- discontiguous(subFormat/2).  868:- kb_shared(tChannel/1).  869
  870% ain((I/(mpred_literal(I),fully_expand(_,I,O),I \=@=O )==> ({format('~q~n',[fully_expand(I->O)])},O))).
  871
  872/* subFormat(ftDeplictsFn(tCol),ftSpec). */
  873/* subFormat(ftDeplictsFn(meta_argtypes),ftSpec). */
  874subFormat(ftVoprop,ftSpec).
  875
  876%==> tFunction(opQuote(isEach(ftRest(ftTerm)))).
  877==> tFunction(isRandom(tSet)).
  878==> tFunction(isAnd(ftListFn(ftSpec))).
  879==> tFunction(isMost(ftListFn(ftSpec))).
  880==> tFunction(isOneOf(ftListFn(ftSpec))).
  881==> tFunction(isNot(ftSpec)).
  882==> tFunction(isOptional(ftSpec,ftTerm)).
  883==> tFunction(isOptionalStr(ftString)).
  884==> tFunction(exactStr(ftString)).
  885
  886resultIsa(ftDeplictsFn,ftSpec).
  887
  888==> prologHybrid(quotedDefnIff/2).
  889
  890
  891isa(argIsa,prologHybrid).
  892isa(determinerString/2, prologMultiValued).
  893isa(quotedDefnIff, completeExtentAsserted).
  894isa(ftInt,ttExpressionType).
  895isa(ftNumber,ttExpressionType).
  896isa(ftString,ttExpressionType).
  897isa(isInstFn,tFunction).
  898isa(isKappaFn,tFunction).
  899isa(prologMultiValued, tCol).
  900arity(ftListFn,1).
  901arity(isLikeFn,2).
  902arity(ftDeplictsFn,1).
  903
  904arity(tFunction,1).
  905==> tFunction(ftDiceFn(ftInt,ftInt,ftInt)).
  906==> tFunction(ftListFn(tCol)).
  907==> tFunction(ftDeplictsFn).
  908
  909completelyAssertedCollection(rtAvoidForwardChain).
  910completelyAssertedCollection('SententialOperator').
  911
  912
  913tSet(rtAvoidForwardChain).
  914tSet('SententialOperator').
  915%TODO rtAvoidForwardChain('$VAR'('FUNC')).
  916
  917cycBetween(A,B,N):-
  918  (number(A) -> 
  919     ((number(B);number(N)),system_between(A,B,N));
  920     ((number(B),number(N))->system_between(A,B,N))).
  921
  922
  923
  924:- multifile(equals/2).  925:- dynamic(equals/2).  926:- export(equals/2).  927arity(equals,2).
  928equals(X,Y):-equals_call(X,Y).
  929:- must((arity_no_bc(equals,_))).  930
  931arity(termOfUnit,2).
  932arity(trueSentence,1).
  933arity(evaluate,2).
  934arity(different,2).
  935:- forall(system_between(1,11,A),kb_shared(holds/A)).  936
  937
  938==>rtAvoidForwardChain(isEach(equals,different,evaluate,trueSentence,'TINYKB-ASSERTION',termOfUnit)).
  939
  940/*
  941:- must((arity_no_bc(holds,_))).
  942arity('FunctionToArg',2). 
  943arity('TINYKB-ASSERTION',5).
  944arity('TINYKB-ASSERTION',6).
  945arity(holds,2).
  946==>rtAvoidForwardChain(isEach('FunctionToArg',hold)).
  947*/
  948
  949genls('rtSententialRelation','rtSententialOperator').
  950genls('rtSententialOperator',rtAvoidForwardChain).
  951genls('rtVariableArityRelation',rtAvoidForwardChain).
  952genls('rtCommutativeRelation',rtAvoidForwardChain).
  953genls('tFunction',rtAvoidForwardChain).
  954genls('rtEvaluatableRelation',rtAvoidForwardChain).
  955
  956tSet('rtCommutativeRelation').
  957tSet('rtEvaluatableRelation').
  958tSet('rtSententialRelation').
  959tSet('rtVariableArityRelation').
  960
  961
  962rtArgsVerbatum(completeIsaAsserted).
  963%completelyAssertedCollection(Ext):- fwc, arg(_,vv(tCol,vtDirection,ttExpressionType,tRegion,ftString, genlPreds),Ext).
  964completeExtentAsserted(formatted_resultIsa).
  965completeExtentAsserted(quotedDefnIff).
  966completelyAssertedCollection(completelyAssertedCollection).
  967
  968ttExpressionType(ftVar).
  969ttExpressionType(ftVoprop).
  970
  971
  972ttStringType('CharacterString').
  973ttStringType('SubLString').
  974ttStringType('ControlCharacterFreeString').
  975ttStringType('SubLListOfStrings').
  976% ttStringType(['ListOfTypeFn', X]):-atom(X),ttStringType(X).
  977
  978
  979% resultIsa(F,C)==>(ftSpec(C),'tFunction'(F)).
  980% ( meta_argtypes(FT)/dif(FT,COL), genls(FT, COL),tCol(COL),{\+ (isa(COL,ttExpressionType))}) ==> formatted_resultIsa(FT,COL).
  981
  982%:- mpred_trace.
  983%:- pfcWatch.
  984%:- mpred_warn.
  985% next_test :- sleep(1),pfcReset.
  986
  987
  988% :- kb_shared((disjointWith/2,genls/2)).
  989
  990prologHybrid(argIsa(tRelation,ftInt,tCol)).
  991prologHybrid(formatted_resultIsa(ttExpressionType,tCol)).
  992
  993:- sanity(argIsa(genlPreds,2,_)).  994
  995tCol(vtVerb).
  996:- sanity(tCol(vtVerb)).  997:- sanity(isa(vtVerb,tCol)).  998:- sanity(t(tCol,vtVerb)).  999
 1000
 1001
 1002prologHybrid(quotedDefnIff(ttExpressionType,ftTerm)).
 1003prologHybrid(defnNecessary(ttExpressionType,ftTerm)).
 1004prologHybrid(quotedDefnIff(ttExpressionType,ftTerm)).
 1005
 1006
 1007tFuncton(isLikeFn(tPred,tCol)).
 1008tRelation('==>'(ftAskable,ftAssertable)).
 1009prologHybrid(subFormat(ttExpressionType,ttExpressionType)).
 1010prologMultiValued(comment(ftTerm,ftString)).
 1011prologMultiValued(genlInverse(tPred,tPred)).
 1012prologMultiValued(genlPreds(tPred,tPred)).
 1013prologMultiValued(predProxyAssert(prologMultiValued,ftTerm)).
 1014prologMultiValued(predProxyQuery(prologMultiValued,ftTerm)).
 1015
 1016genlInverse(P1,P2) ==> ( t(P1,A,B) ==> t(P2,B,A)).
 1017
 1018/*
 1019(((P/(has_functor(P),get_functor(P,F,A),A>1,ground(P), \+ (arg(_,P,E),(number(E);is_list(E))), mpred_literal_nonvar(P), \+ prologSideEffects(F)) 
 1020  ==> {wdmsg(P),deduceEachArgType(P)}))).
 1021*/
 1022
 1023:- if(true). 1024==> prologHybrid(instTypeProps(ftID,tCol,ftRest(ftVoprop))).
 1025==> functorIsMacro(macroSomethingDescription(ftTerm,ftListFn(ftString))).
 1026==> functorIsMacro(pddlObjects(tCol,ftListFn(ftID))).
 1027==> functorIsMacro(pddlDescription(ftID,ftListFn(ftString))).
 1028==> functorIsMacro(pddlPredicates(ftListFn(ftVoprop))).
 1029==> functorIsMacro(pddlSorts(tCol,ftListFn(tCol))).
 1030==> functorIsMacro(pddlTypes(ftListFn(tCol))).
 1031:- endif. 1032
 1033
 1034% prologMultiValued('<==>'(ftTerm,ftTerm)).
 1035prologMultiValued('<-'(ftAssertable,ftAskable)).
 1036prologMultiValued('==>'(ftAskable,ftAssertable)).
 1037prologNegByFailure(predArgMulti(prologMultiValued,ftInt)).
 1038prologNegByFailure(tDeleted(ftID)).
 1039
 1040%= 	 	 
 prologSingleValued(?ARG1, ?ARG2) is semidet
Prolog Single Valued.
 1046prologSingleValued(predInstMax(ftID,prologSingleValued,ftInt),prologHybrid).
 1047prologSingleValued(predTypeMax(prologSingleValued,tCol,ftInt),prologHybrid).
 1048resultIsa(txtFormatFn,ftText).
 1049%'<==>'(prologMultiValued(CallSig,[predProxyAssert(aina),predProxyRetract(del),predProxyQuery(call)]),prologDynamic(CallSig)).
 1050%'<==>'(prologMultiValued(CallSig,[predProxyAssert(pttp_tell),predProxyRetract(pttp_retract),predProxyQuery(pttp_ask)]),prologPTTP(CallSig)).
 1051subFormat(ftAtom,ftTerm).
 1052subFormat(ftCallable,ftProlog).
 1053resultIsa(ftDiceFn,ftInt).
 1054% subFormat(ftID,ftTerm).
 1055subFormat(ftInt,ftNumber).
 1056subFormat(ftInteger,ftNumber). 
 1057subFormat(ftNumber,ftPercent).
 1058subFormat(ftPercent,ftNumber).
 1059subFormat(ftString,ftTerm). %  "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-"
 1060subFormat(ftString,ftText). %  "hello world" 
 1061subFormat(ftTerm,ftProlog).
 1062subFormat(ftText,ftTerm). % s("hello","world").
 1063subFormat(ftVar,ftProlog).
 1064==> subFormat(ftVoprop,ftRest(ftVoprop)).
 1065subFormat(ftVoprop,ftTerm).
 1066
 1067%ttExpressionType(C) ==> {cls,wdmsg(ttExpressionTypeB1(C)),dumpST,wdmsg(ttExpressionTypeC1(C)),break}.
 1068%ttExpressionType(C) ==> {wdmsg(ttExpressionType3(C))}.
 1069subFormat(_,COL)/(atom(COL))==>ttExpressionType(COL).
 1070%:- break.
 1071subFormat(COL,_)/(atom(COL))==>ttExpressionType(COL).
 1072%:- break.
 1073% tCol(W)==>{quietly(guess_supertypes(W))}.
 1074
 1075%:- cls.
 1076%:- mpred_trace_exec.
 1077%:- break.
 1078
 1079
 1080:- sanity(ttRelationType(prologMultiValued)). 1081
 1082
 1083tSet(tNewlyCreated).
 1084
 1085:- dynamic(tNewlyCreated/1). 1086tNewlyCreated(W)==>{guess_types(W)}.
 1087
 1088
 1089:-kb_shared(rtUnaryPredicate/1). 1090:-kb_shared(ttSpatialType/1). 1091
 1092ttUnverifiableType(ftID).
 1093% ttUnverifiableType(ftListFn(ftTerm)).
 1094% ttUnverifiableType(ftListFn).
 1095% ttUnverifiableType(ftDiceFn(ftInt,ftInt,ftInt)).
 1096
 1097ttUnverifiableType(ftDice).
 1098ttUnverifiableType(ftString).
 1099ttUnverifiableType(ftTerm).
 1100ttUnverifiableType(ftText).
 1101ttUnverifiableType(ftVoprop).
 1102
 1103ttUnverifiableType(tCol).
 1104ttUnverifiableType(tFunction).
 1105ttUnverifiableType(tPred).
 1106ttUnverifiableType(ttExpressionType).
 1107ttUnverifiableType(vtDirection).
 1108
 1109
 1110%ttRelationType(ArgsIsa)==>tPred(ArgsIsa).
 1111%TODO isa(_,ArgsIsa)==>tCol(ArgsIsa).
 1112
 1113:- set_prolog_flag(report_error,true),set_prolog_flag(debug_on_error,true),set_prolog_flag(debug, true). 1114
 1115
 1116/*
 1117disjointWith(A,B):- A=B,!,fail.
 1118disjointWith(A,B):- disjointWithT(A,B).
 1119disjointWith(A,B):- disjointWithT(AS,BS),transitive_subclass_or_same(A,AS),transitive_subclass_or_same(B,BS).
 1120disjointWith(A,B):- once((type_isa(A,AT),type_isa(B,BT))),AT \= BT.
 1121disjointWith(Sub, Super) ==> disjointWith( Super, Sub).
 1122*/
 1123
 1124
 1125disjointWith(ttTemporalType,ttAbstractType).
 1126
 1127prologHybrid(dividesBetween(tCol,tCol,tCol)).
 1128
 1129quotedDefnIff(X,_)==>ttExpressionType(X).
 1130
 1131
 1132quotedDefnIff(ftInt,integer).
 1133quotedDefnIff(ftFloat,float).
 1134quotedDefnIff(ftAtom,atom).
 1135quotedDefnIff(ftString,is_ftString2).
 1136% ftString(X):- cwc, is_ftString2(X).
 1137quotedDefnIff(ftSimpleString,string).
 1138quotedDefnIff(ftCallable,is_callable).
 1139quotedDefnIff(ftCompound,is_ftCompound).
 1140quotedDefnIff(ftGround,ground).
 1141quotedDefnIff(ftID,is_id).
 1142quotedDefnIff(ftTerm,is_ftNonvar).
 1143quotedDefnIff(ftVar,is_ftVar).
 1144quotedDefnIff(ftNonvar,is_ftNonvar).
 1145quotedDefnIff(ftNumber,number).
 1146quotedDefnIff(ftList,is_list).
 1147% quotedDefnIff(ftRest,is_rest).
 1148quotedDefnIff(ftBoolean,is_boolean).
 1149quotedDefnIff(ftText,is_ftText).
 1150
 1151==> ((
 1152 (quotedDefnIff(ftRest(Type),is_rest_of(Type)):- cwc, is_ftNonvar(Type)),
 1153 (quotedDefnIff(ftListFn(Type),is_list_of(Type)):- cwc, is_ftNonvar(Type)),
 1154 (quotedDefnIff(ftCodeIs(SomeCode),SomeCode):- cwc, is_ftNonvar(SomeCode)))).
 1155% :- listing(quotedDefnIff).
 1156
 1157:- kb_global(baseKB:ftText/1). 1158
 1159((ttExpressionType(FT)/(append_term(FT,Arg,Head),
 1160  (predicate_property(Head,undefined);predicate_property(Head,number_of_clauses(0)))
 1161    )) ==> 
 1162    ({OO = (Head:- !, term_is_ft(Arg,FT))},OO)).
 1163
 1164% tCol(Type),(rtBinaryPredicate(Pred)/(functor(G,Pred,2),G=..[Pred,isInstFn(Type),Value])), G ==> relationMostInstance(Pred,Type,Value).
 1165
 1166
 1167%((genlPreds(Col1,Col2),(arity(Col1,1);arity(Col2,1)))==>genls(Col1,Col2)).
 1168%((genls(Col1,Col2),(tPred(Col1);tPred(Col2)))==>genlPreds(Col1,Col2)).
 1169
 1170tSet(rtBinaryPredicate).
 1171ttRelationType(rtBinaryPredicate).
 1172
 1173
 1174% (arity(Pred,2),tPred(Pred)) <==> isa(Pred,rtBinaryPredicate).
 1175
 1176ttRelationType('rtUnaryPredicate').
 1177
 1178isa(arity,rtBinaryPredicate).
 1179
 1180
 1181
 1182specialFunctor('\\+').
 1183specialFunctor('/').
 1184
 1185
 1186:- if(baseKB:startup_option(datalog,sanity);baseKB:startup_option(clif,sanity)). 1187/*
 1188:- sanity((expand_props(_,==>props(iCrackers666,[mudColor(vTan),isa(tBread),mudShape(isEach(vCircular,vFlat)),mudSize(vSmall),mudTexture(isEach(vDry,vCoarse))]),O),ain(mdefault(O)))).
 1189
 1190:- sanity((fully_expand(_,props(iCrackers666,[mudColor(vTan),isa(tBread),mudShape(isEach(vCircular,vFlat)),mudSize(vSmall),mudTexture(isEach(vDry,vCoarse))]),O),mpred_why(mdefault(O)))).
 1191*/
 1192:- endif. 1193
 1194arity(Pred,2),tPred(Pred) <==> rtBinaryPredicate(Pred).
 1195
 1196% if arity is ever greater than 1 it can never become 1
 1197% arity(F,A)/(number(A),A>1) ==> ~(arity(F,1)).
 1198
 1199completelyAssertedCollection(rtBinaryPredicate).
 1200
 1201
 1202% TODO ADD THIS 
 1203%(tCol(Super),completelyAssertedCollection(Super),genls(Sub, Super), isa(I,Sub), {ground(I:Sub:Super),\==(Sub, Super)}) ==> isa(I,Super).
 1204
 1205 % :- mpred_trace_exec.
 1206
 1207/*
 1208
 1209(implies 
 1210    (and 
 1211      (isa ?PRED ReflexiveBinaryPredicate) 
 1212      (arg1Isa ?PRED ?CONSTRAINT1) 
 1213      (isa ?OBJ1 ?CONSTRAINT1) 
 1214      (equals ?OBJ1 ?OBJ2)) 
 1215    (?PRED ?OBJ1 ?OBJ2))
 1216
 1217*/
 1218% ((genlPreds(equals,P),argIsa(P,1,Col)) ==>  (t(P,A,B):- (nonvar(A),A==B,isa(A,Col)))).
 1219% genlPreds(equals,genls).
 1220:- mpred_notrace_exec. 1221rtReflexiveBinaryPredicate(TB)==>genlPreds(equals,TB).
 1222
 1223% (isa(TypeType,ttTypeType) , isa(Inst,TypeType), genls(SubInst,Inst)) ==> isa(SubInst,TypeType).
 1224
 1225ttExpressionType(ftAction).
 1226{type_prefix(_Prefix,Type),atom(Type),atom_concat(ft,_,Type)}==>ttExpressionType(Type).
 1227{type_suffix(_Suffix,Type),atom(Type),atom_concat(ft,_,Type)}==>ttExpressionType(Type).
 1228
 1229
 1230{type_prefix(_Prefix,Type)}==>tCol(Type).
 1231{type_suffix(_Suffix,Type)}==>tCol(Type).
 1232
 1233((tCol(C)/( \+ ttExpressionType(C))) ==> tSet(C)).
 1234
 1235
 1236
 1237tSet(tPred).
 1238prologHybrid(isa/2).
 1239
 1240%mpred_online:semweb_startup:- with_no_term_expansions(if_file_exists(use_module(logicmoo(dbase/mpred_i_rdf_store)))).
 1241
 1242% :- with_no_term_expansions(if_file_exists(use_module(logicmoo(mobs/planner/mpred_i_hyhtn)))).
 1243tSet(prologIsFlag).
 1244tSet(prologDynamic).
 1245prologHybrid(formatted_resultIsa/2).
 1246
 1247:- sanity(argIsa(genlPreds,2,_)). 1248:- sanity(tCol(vtVerb)). 1249:- sanity(t(tCol,vtVerb)). 1250:- sanity(isa(vtVerb,tCol)). 1251
 1252
 1253ttAgentType(mobPhilosopher).
 1254
 1255:- sanity(genls(mobPhilosopher,tAgent)). 1256
 1257
 1258%:- mpred_trace_all.
 1259isa(iPlato7,mobPhilosopher).
 1260
 1261:-must(isa(iPlato7,mobPhilosopher)). 1262
 1263:- if((current_prolog_flag(runtime_debug,D),D>2)). 1264:- mpred_test(\+ isa(iPlato7,ftAtom)). 1265
 1266%:- mpred_test(\+ quotedIsa(iPlato7,mobPhilosopher)).
 1267%:- sanity(mpred_test(~quotedIsa(iPlato7,mobPhilosopher))).
 1268:- sanity(mpred_test(quotedIsa(iPlato7,ftAtom))). 1269:- mpred_notrace_all. 1270:- endif. 1271
 1272tCol(ttAbstractType).
 1273
 1274
 1275
 1276% :- listing(disjointWith/2).
 1277
 1278genlsFwd(tItem,'tArtifact').
 1279genlsFwd(tRegion,'tPlace').
 1280
 1281:- set_prolog_flag(do_renames,restore). 1282
 1283meta_argtypes(knows(tAgent,ftAskable)).
 1284meta_argtypes(beliefs(tAgent,ftAskable)).
 1285meta_argtypes(loves(tAgent,tTemporalThing))