@Override
  public AbstractState getVariableReducedState(
      AbstractState pExpandedState, Block pContext, CFANode pLocation) {

    PredicateAbstractState predicateElement = (PredicateAbstractState) pExpandedState;

    if (!predicateElement.isAbstractionState()) {
      return predicateElement;
    }

    AbstractionFormula oldAbstraction = predicateElement.getAbstractionFormula();

    Region oldRegion = oldAbstraction.asRegion();

    Collection<AbstractionPredicate> predicates = pamgr.extractPredicates(oldRegion);
    Collection<AbstractionPredicate> removePredicates =
        cpa.getRelevantPredicatesComputer().getIrrelevantPredicates(pContext, predicates);

    PathFormula pathFormula = predicateElement.getPathFormula();

    assert bfmgr.isTrue(pathFormula.getFormula());

    AbstractionFormula newAbstraction =
        pamgr.reduce(oldAbstraction, removePredicates, pathFormula.getSsa());

    PersistentMap<CFANode, Integer> abstractionLocations =
        predicateElement.getAbstractionLocationsOnPath().empty();

    return PredicateAbstractState.mkAbstractionState(
        pathFormula, newAbstraction, abstractionLocations);
  }