/** * After a path was strengthened, we need to take care of the coverage relation. We also remove * the infeasible part from the ARG, and re-establish the coverage invariant (i.e., that states on * the path are either covered or cannot be covered). */ @Override protected void finishRefinementOfPath( ARGState infeasiblePartOfART, List<ARGState> changedElements, ARGReachedSet pReached, boolean pRepeatedCounterexample) throws CPAException, InterruptedException { checkState(lastAbstraction != null); lastAbstraction = null; stats.argUpdate.start(); for (ARGState w : changedElements) { pReached.removeCoverageOf(w); } pReached.removeInfeasiblePartofARG(infeasiblePartOfART); stats.argUpdate.stop(); // optimization: instead of closing all ancestors of v, // close only those that were strengthened during refine stats.coverTime.start(); try { for (ARGState w : changedElements) { if (pReached.tryToCover(w)) { break; // all further elements are covered anyway } } } finally { stats.coverTime.stop(); } }