code: public BDD bdd(final VariableOrdering variableOrdering) {
          final int varNum = this.variables().size();
          final BDDFactory factory = new BDDFactory(varNum * 30, varNum * 20, this.factory());
          if (variableOrdering == null) {
              factory.setNumberOfVars(varNum);
          } else {
              try {
                  final VariableOrderingProvider provider = variableOrdering.provider().newInstance();
                  factory.setVariableOrder(provider.getOrder(this));
              } catch (final InstantiationException | IllegalAccessException e) {
                  throw new IllegalStateException("Could not generate the BDD variable ordering provider", e);
              }
          }
          return factory.build(this);
      }
docs: Generates a BDD from this formula with a given variable ordering.  This is done by generating a new BDD factory,
  generating the variable order for this formula, and building a new BDD.  If more sophisticated operations should
  be performed on the BDD or more than one formula should be constructed on the BDD, an own instance of
  {@link BDDFactory} should be created and used.
  @param variableOrdering the variable ordering
  @return the BDD for this formula with the given ordering