diff --git a/nars_core/nars/inference/CompositionalRules.java b/nars_core/nars/inference/CompositionalRules.java index c5d1e7a1258279ca11e967387932039d1ff99dcc..75e39f10e8a68c24186aaf7af0f763866562cc67 100644 --- a/nars_core/nars/inference/CompositionalRules.java +++ b/nars_core/nars/inference/CompositionalRules.java @@ -26,6 +26,7 @@ import nars.entity.BudgetValue; import nars.entity.Concept; import nars.control.DerivationContext; import nars.entity.Sentence; +import nars.entity.Stamp; import nars.entity.Task; import nars.entity.TruthValue; import static nars.inference.TruthFunctions.comparison; @@ -191,6 +192,14 @@ public final class CompositionalRules { if (term2 == null) { return; } + + long delta = 0; + if ((term2 instanceof Conjunction) && (((CompoundTerm) term2).term[0] instanceof Interval)) { + Interval interval = (Interval) ((CompoundTerm) term2).term[0]; + delta = interval.getTime(nal.memory); + term2 = ((CompoundTerm)term2).setComponent(0, null, nal.mem()); + } + Task task = nal.getCurrentTask(); Sentence sentence = task.sentence; Sentence belief = nal.getCurrentBelief(); @@ -264,6 +273,14 @@ public final class CompositionalRules { } if (truth != null) { BudgetValue budget = BudgetFunctions.compoundForward(truth, content, nal); + if (delta != 0) { + long baseTime = task.sentence.getOccurenceTime(); + if (baseTime != Stamp.ETERNAL) { + baseTime += delta; + nal.getTheNewStamp().setOccurrenceTime(baseTime); + } + } + nal.doublePremiseTask(content, truth, budget, false, true); //(allow overlap), a form of detachment } } diff --git a/nars_core/nars/inference/SyllogisticRules.java b/nars_core/nars/inference/SyllogisticRules.java index f948b25458b17911a9a9eae348815e49158a30ea..240e08e0eff2928294c68992133a78e73d7c6400 100644 --- a/nars_core/nars/inference/SyllogisticRules.java +++ b/nars_core/nars/inference/SyllogisticRules.java @@ -397,15 +397,13 @@ public final class SyllogisticRules { return; int order = statement.getTemporalOrder(); - boolean shiftedTimeForward = false; - if ((order != ORDER_NONE) && (order!=ORDER_INVALID) && (!taskSentence.isGoal()) && (!taskSentence.isQuest())) { - long baseTime = subSentence.getOccurenceTime(); - if (baseTime == Stamp.ETERNAL) { + if ((order != ORDER_NONE) && (order!=ORDER_INVALID)) { + long baseTime = subSentence.getOccurenceTime(); + if (baseTime == Stamp.ETERNAL) { // =/> always should produce events baseTime = nal.getTime(); } long inc = order * nal.mem().param.duration.get(); long time = (side == 0) ? baseTime+inc : baseTime-inc; - shiftedTimeForward = (side == 0); nal.getTheNewStamp().setOccurrenceTime(time); } @@ -588,16 +586,11 @@ public final class SyllogisticRules { } if (delta != 0) { - long baseTime = (belief.term instanceof Implication) ? - taskSentence.getOccurenceTime() : belief.getOccurenceTime(); - if (baseTime == Stamp.ETERNAL) { - baseTime = nal.getTime(); - } - if(premise1.getTemporalOrder()==TemporalRules.ORDER_CONCURRENT) { - return; //https://groups.google.com/forum/#!topic/open-nars/ZfCM416Dx1M - Interval Simplification + long baseTime = taskSentence.getOccurenceTime(); + if (baseTime != Stamp.ETERNAL) { + baseTime += delta; + nal.getTheNewStamp().setOccurrenceTime(baseTime); } - baseTime += delta; - nal.getTheNewStamp().setOccurrenceTime(baseTime); } TruthValue truth1 = taskSentence.truth; diff --git a/nars_core/nars/language/Conjunction.java b/nars_core/nars/language/Conjunction.java index f2df71dbe88dc16be67bd57318af145bf49eab70..c4a834893de0ee3d1fd0006b87d0d49f9e47f46f 100644 --- a/nars_core/nars/language/Conjunction.java +++ b/nars_core/nars/language/Conjunction.java @@ -37,17 +37,6 @@ public class Conjunction extends CompoundTerm { public final int temporalOrder; public final boolean isSpatial; - public static Term[] removeFirstInterval(Term[] arg) { - if(arg[0] instanceof Interval) { - Term[] argNew = new Term[arg.length - 1]; - for(int i=1;i<arg.length;i++) { - argNew[i - 1] = arg[i]; - } - return argNew; - } - return arg; - } - /** * Constructor with partial values, called by make * @@ -230,7 +219,8 @@ public class Conjunction extends CompoundTerm { } // special case: single component if (temporalOrder == TemporalRules.ORDER_FORWARD) { - Term[] newArgList = removeFirstInterval(spatial ? argList : flatten(argList, temporalOrder, spatial)); + Term[] newArgList = spatial ? argList : flatten(argList, temporalOrder, spatial); + if(newArgList.length == 1) { return newArgList[0]; }