% brief overview of input and output predicates used: % % input: % ctx(ContextID) % ctxrule(ContexID,CRuleID) % ctxrulehead(CRuleID,Atom) % ctxrulebody(CRuleID,Atom,PosNeg) % brule(ContextID,BRuleID) % brulehead(BRuleID,Atom) % brulebody(BRuleID,ContextID,Atom,PosNeg) % % output: % in(ContextID,Atom) %%%%%%%%%%%%%%%%%%%%%%%%%%%% % context meta interpreter % %%%%%%%%%%%%%%%%%%%%%%%%%%%% % basic context rule meta interpreter ctxruleblock(CRuleID) :- ctxrule(Context,CRuleID), ctxrulebody(CRuleID,Atom,pos), not in(Context,Atom). ctxruleblock(CRuleID) :- ctxrule(Context,CRuleID), ctxrulebody(CRuleID,Atom,neg), in(Context,Atom). % enforce constraints ctxrulehashead(CRuleID) :- ctxrulehead(CRuleID,Fv1). :- ctxrule(Fv1,CRuleID), not ctxruleblock(CRuleID), not ctxrulehashead(CRuleID). % execute regular rules in(Context,Atom) :- ctxrule(Context,CRuleID), ctxrulehead(CRuleID,Atom), not ctxruleblock(CRuleID). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % equilibrium meta interpreter % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % guess output projected equilibrium eqin(Context,Atom) | eqout(Context,Atom) :- brulebody(BRuleID,Context,Atom,Fv1). % evaluate bridge rules bruleblock(BRuleID) :- brule(Fv1,BRuleID), brulebody(BRuleID,ContextID,Atom,pos), not eqin(ContextID,Atom). bruleblock(BRuleID) :- brule(Fv1,BRuleID), brulebody(BRuleID,ContextID,Atom,neg), eqin(ContextID,Atom). in(Context,Atom) :- brule(Context,BRuleID), brulehead(BRuleID,Atom), not bruleblock(BRuleID). % enforce that output of context is equal to guess (but do not found it) :- eqout(Context,Atom), in(Context,Atom). :- eqin(Context,Atom), not in(Context,Atom).