Converts a Pyomo logical constraint to CNF form.
Note: the atoms AtMostExpression, AtLeastExpression, and
ExactlyExpression require special treatment if they are not the root
node, or if their children are not atoms, e.g.
atmost(2, Y1, Y1 | Y2, Y2, Y3)
As a result, the model may need to be augmented with
additional boolean indicator variables and logical propositions.
This function will raise ValueError if a BooleanVarList is
not provided on which to store the augmented variables,
and augmented variables are needed.
- This function will return a list of CNF logical constraints, including:
CNF of original statement, including possible substitutions
Additional CNF statements (for enforcing equivalence to augmented variables)
- In addition, the function will have side effects:
-