Search in sources :

Example 1 with TaskBeliefOp

use of nars.derive.op.TaskBeliefOp in project narchy by automenta.

the class DeriveRuleProto method termIs.

private static void termIs(Set<PrediTerm<PreDerivation>> pres, Term taskPattern, Term beliefPattern, SortedSet<MatchConstraint> constraints, Term x, Op v) {
    constraints.add(OpIs.the(x, v));
    boolean isTask = taskPattern.equals(x);
    boolean isBelief = beliefPattern.equals(x);
    if (isTask || isBelief)
        pres.add(new TaskBeliefOp(v, isTask, isBelief));
    boolean inTask = (!isTask && taskPattern.containsRecursively(x));
    boolean inBelief = (!isBelief && beliefPattern.containsRecursively(x));
    if (inTask || inBelief) {
        pres.add(new TaskBeliefHasOrHasnt(v, isTask || inTask, isBelief || inBelief, true));
    }
}
Also used : TaskBeliefHasOrHasnt(nars.derive.op.TaskBeliefHasOrHasnt) TaskBeliefOp(nars.derive.op.TaskBeliefOp)

Example 2 with TaskBeliefOp

use of nars.derive.op.TaskBeliefOp in project narchy by automenta.

the class DeriveRuleProto method eventPrefilter.

static void eventPrefilter(Set<PrediTerm<PreDerivation>> pres, Term conj, Term taskPattern, Term beliefPattern) {
    // includesOp(pres, taskPattern, beliefPattern, conj, CONJ.bit, true, true);
    boolean isTask = taskPattern.equals(conj);
    boolean isBelief = beliefPattern.equals(conj);
    if (isTask || isBelief)
        pres.add(new TaskBeliefOp(CONJ, isTask, isBelief));
    boolean inTask = !isTask && taskPattern.containsRecursively(conj);
    boolean inBelief = !isBelief && beliefPattern.containsRecursively(conj);
    if (inTask || inBelief) {
        pres.add(new TaskBeliefHasOrHasnt(CONJ.bit, isTask || inTask, isBelief || inBelief, true));
    }
}
Also used : TaskBeliefHasOrHasnt(nars.derive.op.TaskBeliefHasOrHasnt) TaskBeliefOp(nars.derive.op.TaskBeliefOp)

Example 3 with TaskBeliefOp

use of nars.derive.op.TaskBeliefOp in project narchy by automenta.

the class Conclude method match.

public static void match(final DeriveRuleProto rule, List<PrediTerm<PreDerivation>> pre, List<PrediTerm<Derivation>> post, PatternIndex index, NAR nar) {
    Term pattern = rule.conclusion().sub(0);
    // TODO may interfere with constraints, functors, etc or other features, ie.
    // if the pattern is a product for example?
    // pattern = pattern.replace(ta, Derivation._taskTerm);
    // determine if any cases where a shortcut like this can work (ie. no constraints, not a product etc)
    // //substitute compound occurrences of the exact task and belief terms with the short-cut
    // Term ta = rule.getTask();
    // if (!ta.op().var) {
    // if (pattern.equals(ta))
    // pattern = Derivation.TaskTerm;
    // }
    // Term tb = rule.getBelief();
    // if (!tb.op().var) {
    // //pattern = pattern.replace(tb, Derivation._beliefTerm);
    // if (pattern.equals(tb))
    // pattern = Derivation.BeliefTerm;
    // }
    // HACK unwrap varIntro so we can apply it at the end of the derivation process, not before like other functors
    boolean introVars1;
    Pair<Termed, Term> outerFunctor = Op.functor(pattern, (i) -> i.equals(VAR_INTRO) ? VAR_INTRO : null);
    if (outerFunctor != null) {
        introVars1 = true;
        pattern = outerFunctor.getTwo().sub(0);
    } else {
        introVars1 = false;
    }
    pattern = index.get(pattern, true).term();
    Taskify taskify = new Taskify(nar.newCause((s) -> new RuleCause(rule, s)));
    PrediTerm<Derivation> conc = AndCondition.the(new Termify($.func("derive", pattern), pattern, rule), introVars1 ? AndCondition.the(introVars, taskify) : taskify);
    final Term taskPattern = rule.getTask();
    final Term beliefPattern = rule.getBelief();
    Op to = taskPattern.op();
    boolean taskIsPatVar = to == Op.VAR_PATTERN;
    Op bo = beliefPattern.op();
    boolean belIsPatVar = bo == Op.VAR_PATTERN;
    if (!taskIsPatVar) {
        pre.add(new TaskBeliefOp(to, true, false));
        pre.addAll(SubTermStructure.get(0, taskPattern.structure()));
    }
    if (!belIsPatVar) {
        if (to == bo) {
            pre.add(new AbstractPatternOp.TaskBeliefOpEqual());
        } else {
            pre.add(new TaskBeliefOp(bo, false, true));
            pre.addAll(SubTermStructure.get(1, beliefPattern.structure()));
        }
    }
    if (taskPattern.equals(beliefPattern)) {
        post.add(new UnifyTerm.UnifySubtermThenConclude(0, taskPattern, conc));
    }
    if (taskFirst(taskPattern, beliefPattern)) {
        // task first
        post.add(new UnifyTerm.UnifySubterm(0, taskPattern));
        post.add(new UnifyTerm.UnifySubtermThenConclude(1, beliefPattern, conc));
    } else {
        // belief first
        post.add(new UnifyTerm.UnifySubterm(1, beliefPattern));
        post.add(new UnifyTerm.UnifySubtermThenConclude(0, taskPattern, conc));
    }
// Term beliefPattern = pattern.term(1);
// if (Global.DEBUG) {
// if (beliefPattern.structure() == 0) {
// if nothing else in the rule involves this term
// which will be a singular VAR_PATTERN variable
// then allow null
// if (beliefPattern.op() != Op.VAR_PATTERN)
// throw new RuntimeException("not what was expected");
// }
// }
/*System.out.println( Long.toBinaryString(
                        pStructure) + " " + pattern
        );*/
}
Also used : DepIndepVarIntroduction(nars.op.DepIndepVarIntroduction) PrediTerm(nars.term.pred.PrediTerm) AbstractPatternOp(nars.derive.op.AbstractPatternOp) nars.$(nars.$) DeriveRuleSource(nars.derive.rule.DeriveRuleSource) AndCondition(nars.term.pred.AndCondition) UnifyTerm(nars.derive.op.UnifyTerm) AbstractPred(nars.term.pred.AbstractPred) Nullable(org.jetbrains.annotations.Nullable) VAR_INTRO(nars.derive.Conclude.IntroVars.VAR_INTRO) Task(nars.Task) List(java.util.List) TaskBeliefOp(nars.derive.op.TaskBeliefOp) NAR(nars.NAR) Op(nars.Op) DeriveRuleProto(nars.derive.rule.DeriveRuleProto) PatternIndex(nars.index.term.PatternIndex) Map(java.util.Map) SubTermStructure(nars.derive.op.SubTermStructure) Termed(nars.term.Termed) Cause(nars.control.Cause) Pair(org.eclipse.collections.api.tuple.Pair) Term(nars.term.Term) AbstractPatternOp(nars.derive.op.AbstractPatternOp) TaskBeliefOp(nars.derive.op.TaskBeliefOp) Op(nars.Op) TaskBeliefOp(nars.derive.op.TaskBeliefOp) AbstractPatternOp(nars.derive.op.AbstractPatternOp) UnifyTerm(nars.derive.op.UnifyTerm) PrediTerm(nars.term.pred.PrediTerm) UnifyTerm(nars.derive.op.UnifyTerm) Term(nars.term.Term) Termed(nars.term.Termed)

Aggregations

TaskBeliefOp (nars.derive.op.TaskBeliefOp)3 TaskBeliefHasOrHasnt (nars.derive.op.TaskBeliefHasOrHasnt)2 List (java.util.List)1 Map (java.util.Map)1 nars.$ (nars.$)1 NAR (nars.NAR)1 Op (nars.Op)1 Task (nars.Task)1 Cause (nars.control.Cause)1 VAR_INTRO (nars.derive.Conclude.IntroVars.VAR_INTRO)1 AbstractPatternOp (nars.derive.op.AbstractPatternOp)1 SubTermStructure (nars.derive.op.SubTermStructure)1 UnifyTerm (nars.derive.op.UnifyTerm)1 DeriveRuleProto (nars.derive.rule.DeriveRuleProto)1 DeriveRuleSource (nars.derive.rule.DeriveRuleSource)1 PatternIndex (nars.index.term.PatternIndex)1 DepIndepVarIntroduction (nars.op.DepIndepVarIntroduction)1 Term (nars.term.Term)1 Termed (nars.term.Termed)1 AbstractPred (nars.term.pred.AbstractPred)1