@Override public Collection<LassoUnderConstruction> process(final LassoUnderConstruction lasso) throws TermException { final MapEliminator elim = new MapEliminator( mServices, mManagedScript, mSymbolTable, mReplacementVarFactory, Arrays.asList(lasso.getStem(), lasso.getLoop()), mSettings); final EqualityAnalysisResult equalityAnalysisStem = new EqualityAnalysisResult(elim.getDoubletons()); final EqualitySupportingInvariantAnalysis esia = new EqualitySupportingInvariantAnalysis( elim.getDoubletons(), mSymbolTable, mManagedScript.getScript(), mOriginalStem, mOriginalLoop, mModifiableGlobalsAtHonda); final EqualityAnalysisResult equalityAnalysisLoop = esia.getEqualityAnalysisResult(); mArrayIndexSupportingInvariants.addAll( equalityAnalysisLoop.constructListOfEqualities(mManagedScript.getScript())); mArrayIndexSupportingInvariants.addAll( equalityAnalysisLoop.constructListOfNotEquals(mManagedScript.getScript())); final TransFormulaLR newStem = elim.getRewrittenTransFormula(lasso.getStem(), equalityAnalysisStem, equalityAnalysisLoop); final TransFormulaLR newLoop = elim.getRewrittenTransFormula(lasso.getLoop(), equalityAnalysisLoop, equalityAnalysisLoop); final LassoUnderConstruction newLasso = new LassoUnderConstruction(newStem, newLoop); assert RewriteArrays2.checkStemImplication( mServices, mServices.getLoggingService().getLogger(Activator.s_PLUGIN_ID), lasso, newLasso, mSymbolTable, mManagedScript) : "result of RewriteArrays too strong"; return Collections.singleton(newLasso); }