The solver's symbol simplification mechanism was not able to handle cases
when a symbol is simplified to a concrete integer. This patch adds the
capability.
E.g., in the attached lit test case, the original symbol is c + 1 and
it has a [0, 0] range associated with it. Then, a new condition c == 0
is assumed, so a new range constraint [0, 0] comes in for c and
simplification kicks in. c + 1 becomes 0 + 1, but the associated
range is [0, 0], so now we are able to realize the contradiction.
I'm confused about which comment corresponds to which function.
You should also signify the difference between the two APIs.
Shouldn't be one of them an implementation detail? If so, why do we have the same visibility?