@Override
 public void evaluate(KnowledgeHelper arg0, WorkingMemory arg1) throws Exception {
   InternalFactHandle a1f = arg0.getTuple().get(0);
   AbstractParameter a1 = (AbstractParameter) arg1.getObject(a1f);
   String a1Id = a1.getId();
   InternalFactHandle a2f = arg0.getTuple().get(1);
   AbstractParameter a2 = (AbstractParameter) arg1.getObject(a2f);
   Sequence<AbstractParameter> s = new Sequence<>(a1Id, 2);
   s.add(a1);
   s.add(a2);
   Segment<AbstractParameter> segment = new Segment<>(s);
   JBossRulesDerivedLocalUniqueIdValuesProvider provider =
       new JBossRulesDerivedLocalUniqueIdValuesProvider(arg1, a1Id);
   UniqueIdFactory factory = new ProviderBasedUniqueIdFactory(provider);
   AbstractParameter result = new AbstractParameter(a1Id, factory.getInstance());
   result.setSourceSystem(SourceSystem.DERIVED);
   result.setInterval(segment.getInterval());
   result.setValue(a1.getValue());
   result.setCreateDate(new Date());
   Logger logger = ProtempaUtil.logger();
   if (logger.isLoggable(Level.FINEST)) {
     logger.log(Level.FINEST, "Created {0} from {1} and {2}", new Object[] {result, a1, a2});
   }
   arg1.retract(a1f);
   arg1.retract(a2f);
   arg1.insert(result);
   // There should not be any forward derivations yet.
   // List<Proposition> a1PropForward =
   // this.derivationsBuilder.propositionRetractedForward(a1);
   List<Proposition> a1PropBackward = this.derivationsBuilder.propositionRetractedBackward(a1);
   // There should not be any forward derivations yet.
   // List<Proposition> a2PropForward =
   // this.derivationsBuilder.propositionRetractedForward(a2);
   List<Proposition> a2PropBackward = this.derivationsBuilder.propositionRetractedBackward(a2);
   for (Proposition prop : a1PropBackward) {
     this.derivationsBuilder.propositionReplaceForward(prop, a1, result);
     this.derivationsBuilder.propositionAssertedBackward(prop, result);
   }
   for (Proposition prop : a2PropBackward) {
     this.derivationsBuilder.propositionReplaceForward(prop, a2, result);
     this.derivationsBuilder.propositionAssertedBackward(prop, result);
   }
   logger.log(Level.FINER, "Asserted derived proposition {0}", result);
 }