private VariableTrackingPrecision mergeValuePrecisionsForSubgraph( final ARGState pRefinementRoot, final ARGReachedSet pReached) { // get all unique precisions from the subtree Set<VariableTrackingPrecision> uniquePrecisions = Sets.newIdentityHashSet(); for (ARGState descendant : getNonCoveredStatesInSubgraph(pRefinementRoot)) { uniquePrecisions.add(extractValuePrecision(pReached, descendant)); } // join all unique precisions into a single precision VariableTrackingPrecision mergedPrecision = Iterables.getLast(uniquePrecisions); for (VariableTrackingPrecision precision : uniquePrecisions) { mergedPrecision = mergedPrecision.join(precision); } return mergedPrecision; }
private VariableTrackingPrecision mergeAllValuePrecisionsFromSubgraph( ARGState refinementRoot, UnmodifiableReachedSet reached) { VariableTrackingPrecision rootPrecision = Precisions.extractPrecisionByType( reached.getPrecision(refinementRoot), VariableTrackingPrecision.class); // find all distinct precisions to merge them Set<Precision> precisions = Sets.newIdentityHashSet(); for (ARGState state : refinementRoot.getSubgraph()) { if (!state.isCovered()) { // covered states are not in reached set precisions.add(reached.getPrecision(state)); } } for (Precision prec : precisions) { rootPrecision = rootPrecision.join( Precisions.extractPrecisionByType(prec, VariableTrackingPrecision.class)); } return rootPrecision; }