/**
  * Compute a compound state representing possible results of multiplying the given factor compound
  * states. This method provides a much weaker implementation of compound state addition than
  * {@link CompoundInterval#multiply(CompoundInterval)} and will thus usually return a much larger
  * result range.
  *
  * @param a the first factor.
  * @param b the second factor.
  * @return a state representing possible results of multiplying the given factor compound states.
  */
 private CompoundInterval weakMultiply(CompoundInterval a, CompoundInterval b) {
   if (a.isSingleton() && a.containsZero()) {
     return a;
   }
   if (b.isSingleton() && b.containsZero()) {
     return b;
   }
   if (a.isSingleton() && a.contains(1)) {
     return b;
   }
   if (b.isSingleton() && b.contains(1)) {
     return a;
   }
   return abstractionOf(a.multiply(b));
 }