protected final void retractResolver(ConstraintNetwork metaVar, ConstraintNetwork res) {
    this.logger.finest("Retracting resolver:");
    this.logger.finest("  MetaVariable: " + metaVar.toString());
    this.logger.finest("  MetaValue: " + res.toString());

    Constraint[] groundConstraints = res.getConstraints();
    HashMap<ConstraintSolver, Vector<Constraint>> solvers2constraints =
        new HashMap<ConstraintSolver, Vector<Constraint>>();
    for (Constraint c : groundConstraints) {
      if (!solvers2constraints.containsKey(c.getScope()[0].getConstraintSolver())) {
        Vector<Constraint> newVec = new Vector<Constraint>();
        solvers2constraints.put(c.getScope()[0].getConstraintSolver(), newVec);
      }
      solvers2constraints.get(c.getScope()[0].getConstraintSolver()).add(c);
    }
    for (ConstraintSolver cs : solvers2constraints.keySet()) {
      Constraint[] toAddOneSolver =
          solvers2constraints.get(cs).toArray(new Constraint[solvers2constraints.get(cs).size()]);
      cs.removeConstraints(toAddOneSolver);
    }

    this.retractResolverSub(metaVar, res);
    this.logger.finest("Done retracting resolver.");
  }