Integer domains allow more propagation.
An important point to note here is that (as in mathematics) IC treats
integers as a strict subset of the reals, and as such the integer
domain 0 .. 100
contains significantly fewer values than the
real domain 0.0 .. 100.0
. With this in mind, IC attempts to
infer integrality where possible (e.g. the sum of two integer variables
is constrained to be integer), however integer domains (where
applicable) should be used in user code.
The difference becomes apparent when dealing with strict inequalities, for example.
[eclipse 4]: reals([X]), X $> 5.
X = X{5.0 .. 1.0Inf}
Delayed goals:
ic : (X{5.0 .. 1.0Inf} > 5)
Yes (0.00s cpu)
Note that the lower bound of X is still five despite the fact that X
has been constrained to be strictly greater than five. Further note
the presence of a delayed goal which will fail should X be constrained
to be exactly five.
[eclipse 5]: integers([X]), X $> 5.
X = X{6 .. 1.0Inf}
Yes (0.00s cpu)
In this example since X is known to be integral, the lower bound of X
can be set to 6, as there are no integers between five and six.