Search in sources :

Example 21 with Conjunction

use of nars.language.Conjunction in project opennars by opennars.

the class StructuralRules method transformProductImage.

/* -------------------- products and images transform -------------------- */
/**
 * Equivalent transformation between products and images {<(*, S, M) --> P>,
 * S@(*, S, M)} |- <S --> (/, P, _, M)> {<S --> (/, P, _, M)>, P@(/, P, _,
 * M)} |- <(*, S, M) --> P> {<S --> (/, P, _, M)>, M@(/, P, _, M)} |- <M -->
 * (/, P, S, _)>
 *
 * @param inh An Inheritance statement
 * @param oldContent The whole content
 * @param indices The indices of the TaskLink
 * @param task The task
 * @param memory Reference to the memory
 */
static void transformProductImage(Inheritance inh, CompoundTerm oldContent, short[] indices, DerivationContext nal) {
    final Memory memory = nal.mem();
    Term subject = inh.getSubject();
    Term predicate = inh.getPredicate();
    short index = indices[indices.length - 1];
    short side = indices[indices.length - 2];
    if (inh.equals(oldContent)) {
        if (subject instanceof CompoundTerm) {
            transformSubjectPI(index, (CompoundTerm) subject, predicate, nal);
        }
        if (predicate instanceof CompoundTerm) {
            transformPredicatePI(index, subject, (CompoundTerm) predicate, nal);
        }
        return;
    }
    Term compT = inh.term[side];
    if (!(compT instanceof CompoundTerm))
        return;
    CompoundTerm comp = (CompoundTerm) compT;
    if (comp instanceof Product) {
        if (side == 0) {
            subject = comp.term[index];
            predicate = ImageExt.make((Product) comp, inh.getPredicate(), index);
        } else {
            subject = ImageInt.make((Product) comp, inh.getSubject(), index);
            predicate = comp.term[index];
        }
    } else if ((comp instanceof ImageExt) && (side == 1)) {
        if (index == ((ImageExt) comp).relationIndex) {
            subject = Product.make(comp, inh.getSubject(), index);
            predicate = comp.term[index];
        } else {
            subject = comp.term[index];
            predicate = ImageExt.make((ImageExt) comp, inh.getSubject(), index);
        }
    } else if ((comp instanceof ImageInt) && (side == 0)) {
        if (index == ((ImageInt) comp).relationIndex) {
            subject = comp.term[index];
            predicate = Product.make(comp, inh.getPredicate(), index);
        } else {
            subject = ImageInt.make((ImageInt) comp, inh.getPredicate(), index);
            predicate = comp.term[index];
        }
    } else {
        return;
    }
    CompoundTerm newInh = null;
    if (predicate.equals(Term.SEQ_SPATIAL)) {
        newInh = (CompoundTerm) Conjunction.make(((CompoundTerm) subject).term, TemporalRules.ORDER_FORWARD, true);
    } else if (predicate.equals(Term.SEQ_TEMPORAL)) {
        newInh = (CompoundTerm) Conjunction.make(((CompoundTerm) subject).term, TemporalRules.ORDER_FORWARD, false);
    } else {
        newInh = Inheritance.make(subject, predicate);
    }
    if (newInh == null)
        return;
    CompoundTerm content = null;
    if (indices.length == 2) {
        content = newInh;
    } else if ((oldContent instanceof Statement) && (indices[0] == 1)) {
        content = Statement.make((Statement) oldContent, oldContent.term[0], newInh, oldContent.getTemporalOrder());
    } else {
        Term[] componentList;
        Term condition = oldContent.term[0];
        if (((oldContent instanceof Implication) || (oldContent instanceof Equivalence)) && (condition instanceof Conjunction)) {
            componentList = ((CompoundTerm) condition).cloneTerms();
            componentList[indices[1]] = newInh;
            Term newCond = Terms.term((CompoundTerm) condition, componentList);
            content = Statement.make((Statement) oldContent, newCond, ((Statement) oldContent).getPredicate(), oldContent.getTemporalOrder());
        } else {
            componentList = oldContent.cloneTerms();
            componentList[indices[0]] = newInh;
            if (oldContent instanceof Conjunction) {
                Term newContent = Terms.term(oldContent, componentList);
                if (!(newContent instanceof CompoundTerm))
                    return;
                content = (CompoundTerm) newContent;
            } else if ((oldContent instanceof Implication) || (oldContent instanceof Equivalence)) {
                content = Statement.make((Statement) oldContent, componentList[0], componentList[1], oldContent.getTemporalOrder());
            }
        }
    }
    if (content == null)
        return;
    Sentence sentence = nal.getCurrentTask().sentence;
    TruthValue truth = sentence.truth;
    BudgetValue budget;
    if (sentence.isQuestion() || sentence.isQuest()) {
        budget = BudgetFunctions.compoundBackward(content, nal);
    } else {
        budget = BudgetFunctions.compoundForward(truth, content, nal);
    }
    nal.singlePremiseTask(content, truth, budget);
}
Also used : CompoundTerm(nars.language.CompoundTerm) BudgetValue(nars.entity.BudgetValue) Memory(nars.storage.Memory) Statement(nars.language.Statement) Product(nars.language.Product) ImageInt(nars.language.ImageInt) CompoundTerm(nars.language.CompoundTerm) Term(nars.language.Term) Implication(nars.language.Implication) Equivalence(nars.language.Equivalence) TruthValue(nars.entity.TruthValue) Conjunction(nars.language.Conjunction) ImageExt(nars.language.ImageExt) Sentence(nars.entity.Sentence)

Example 22 with Conjunction

use of nars.language.Conjunction in project opennars by opennars.

the class SyllogisticRules method abdIndCom.

/**
 * {<M ==> S>, <M ==> P>} |- {<S ==> P>, <P ==> S>, <S <=> P>}
 *
 * @param term1 Subject of the first new task
 * @param term2 Predicate of the first new task
 * @param sentence1 The first premise
 * @param sentence2 The second premise
 * @param figure Locations of the shared term in premises --- can be
 * removed?
 * @param nal Reference to the memory
 */
static void abdIndCom(Term term1, Term term2, final Sentence sentence1, final Sentence sentence2, final int figure, final DerivationContext nal) {
    if (Statement.invalidStatement(term1, term2) || Statement.invalidPair(term1, term2)) {
        return;
    }
    int order1 = sentence1.term.getTemporalOrder();
    int order2 = sentence2.term.getTemporalOrder();
    int order = abdIndComOrder(order1, order2);
    Statement taskContent = (Statement) sentence1.term;
    TruthValue truth1 = null;
    TruthValue truth2 = null;
    TruthValue truth3 = null;
    BudgetValue budget1, budget2, budget3;
    TruthValue value1 = sentence1.truth;
    TruthValue value2 = sentence2.truth;
    if (sentence1.isQuestion()) {
        budget1 = BudgetFunctions.backward(value2, nal);
        budget2 = BudgetFunctions.backwardWeak(value2, nal);
        budget3 = BudgetFunctions.backward(value2, nal);
    } else if (sentence1.isQuest()) {
        budget1 = BudgetFunctions.backwardWeak(value2, nal);
        budget2 = BudgetFunctions.backward(value2, nal);
        budget3 = BudgetFunctions.backwardWeak(value2, nal);
    } else {
        if (sentence1.isGoal()) {
            // P --> S
            truth1 = TruthFunctions.desireStrong(value1, value2);
            // S --> P
            truth2 = TruthFunctions.desireWeak(value2, value1);
            // S <-> P
            truth3 = TruthFunctions.desireStrong(value1, value2);
        } else {
            // isJudgment
            // P --> S
            truth1 = TruthFunctions.abduction(value1, value2);
            // S --> P
            truth2 = TruthFunctions.abduction(value2, value1);
            // S <-> P
            truth3 = TruthFunctions.comparison(value1, value2);
        }
        budget1 = BudgetFunctions.forward(truth1, nal);
        budget2 = BudgetFunctions.forward(truth2, nal);
        budget3 = BudgetFunctions.forward(truth3, nal);
    }
    long delta2 = 0;
    while ((term2 instanceof Conjunction) && (((CompoundTerm) term2).term[0] instanceof Interval)) {
        Interval interval = (Interval) ((CompoundTerm) term2).term[0];
        delta2 += interval.time;
        term2 = ((CompoundTerm) term2).setComponent(0, null, nal.mem());
    }
    long delta1 = 0;
    while ((term1 instanceof Conjunction) && (((CompoundTerm) term1).term[0] instanceof Interval)) {
        Interval interval = (Interval) ((CompoundTerm) term1).term[0];
        delta1 += interval.time;
        term1 = ((CompoundTerm) term1).setComponent(0, null, nal.mem());
    }
    if (order != ORDER_INVALID) {
        nal.getTheNewStamp().setOccurrenceTime(delta1);
        nal.doublePremiseTask(Statement.make(taskContent, term1, term2, order), truth1, budget1, false, false);
        nal.getTheNewStamp().setOccurrenceTime(delta2);
        nal.doublePremiseTask(Statement.make(taskContent, term2, term1, reverseOrder(order)), truth2, budget2, false, false);
        nal.getTheNewStamp().setOccurrenceTime(delta1);
        nal.doublePremiseTask(Statement.makeSym(taskContent, term1, term2, order), truth3, budget3, false, false);
    }
    if (Parameters.BREAK_NAL_HOL_BOUNDARY && order1 == order2 && taskContent.isHigherOrderStatement() && sentence2.term.isHigherOrderStatement()) {
        /*  if(truth1!=null) 
                truth1=truth1.clone();
            if(truth2!=null) 
                truth2=truth2.clone();*/
        if (truth3 != null)
            truth3 = truth3.clone();
        /* nal.doublePremiseTask(
                Statement.make(NativeOperator.INHERITANCE, term1, term2), 
                    truth1, budget1.clone(),false, false);
            nal.doublePremiseTask(
                Statement.make(NativeOperator.INHERITANCE, term2, term1), 
                    truth2, budget2.clone(),false, false);*/
        nal.doublePremiseTask(Statement.make(NativeOperator.SIMILARITY, term1, term2, TemporalRules.ORDER_NONE), truth3, budget3.clone(), false, false);
    }
}
Also used : BudgetValue(nars.entity.BudgetValue) CompoundTerm(nars.language.CompoundTerm) Statement(nars.language.Statement) TruthValue(nars.entity.TruthValue) Conjunction(nars.language.Conjunction) Interval(nars.language.Interval)

Aggregations

Conjunction (nars.language.Conjunction)22 Term (nars.language.Term)20 BudgetValue (nars.entity.BudgetValue)18 TruthValue (nars.entity.TruthValue)18 CompoundTerm (nars.language.CompoundTerm)18 Sentence (nars.entity.Sentence)11 Task (nars.entity.Task)11 Statement (nars.language.Statement)9 Interval (nars.language.Interval)8 Implication (nars.language.Implication)7 Inheritance (nars.language.Inheritance)6 TruthFunctions.reduceConjunction (nars.inference.TruthFunctions.reduceConjunction)4 ArrayList (java.util.ArrayList)3 Concept (nars.entity.Concept)3 Stamp (nars.entity.Stamp)3 Disjunction (nars.language.Disjunction)3 Product (nars.language.Product)3 Variable (nars.language.Variable)3 HashMap (java.util.HashMap)2 TruthFunctions.reduceDisjunction (nars.inference.TruthFunctions.reduceDisjunction)2