Reduce(IntervalEnvironment < Rational, Expression> left, WeakUpperBounds <Expression, Rational> right) { ALog.BeginReduce("IntervalsWithSymbolicUpperBounds"); foreach (Expression x in left.Keys) { foreach (Expression y in left.Keys) { if (x.Equals(y)) { continue; } FlatAbstractDomain <bool> b = left.CheckIfLessThan(x, y); if (b.IsTop || b.IsBottom) { continue; } if (b.BoxedElement == true) { ALog.Message("Adding " + ExpressionPrinter <Expression> .ToString(x, this.decoder) + " < " + ExpressionPrinter <Expression> .ToString(y, this.decoder) + " as " + left.BoundsFor(x) + " < " + left.BoundsFor(y)); right.TestTrueLessThan(x, y); // Add the constraint x < y } } } ALog.EndReduce(); return(this.Factory(left, right)); }