private BDD visitBinary(
        BooleanFormula pOperand1, BooleanFormula pOperand2, BDDFactory.BDDOp operator) {

      BDD operand1 = convert(pOperand1);
      BDD operand2 = convert(pOperand2);

      // optimization: applyWith() destroys arg0 and arg1,
      // but this is ok, because we would free them otherwise anyway
      return operand1.applyWith(operand2, operator);
    }
    private BDD visitMulti(BDDFactory.BDDOp operator, List<BooleanFormula> pOperands) {
      checkArgument(pOperands.size() >= 2);

      BDD result = convert(pOperands.get(0));
      for (int i = 1; i < pOperands.size(); i++) {
        // optimization: applyWith() destroys arg0 and arg1,
        // but this is ok, because we would free them otherwise anyway
        result = result.applyWith(convert(pOperands.get(i)), operator);
      }

      return result;
    }