An inference about the range of a variable is available from an IF...THEN...ELSE statement, where the same variable appears in both the THEN and the ELSE clause. For example
IF A < B
THEN X < 5
ELSE X = 10
If we recognise the same numeric variable has been used in both the THEN and ELSE clause to give it alternative ranges, we can construct the appropriate range for the variable, and turn it on when the statement is true. Thus we have
X = -Infinity<->5,10
when we know the statement is true, but before we know the values of A and B. There are usually many such conditional statements, and making use of their range reductions will speed up solving considerably. The method probably nests very well, but for the moment we have only implemented the detection immediately from an IF...THEN/ELSE pair. There is the possibility that an Unknowable from the test means that the statement should not be used. We assume the UKE will control the statement, not the test.
What happens if X turns out to be 8 before the IF...THEN... statement itself becomes True? ORION propagates a False up its logical control.
Showing the connection to the environment,
The statement structure is shown within the dotted box, the additional structure outside the line supporting the additional inference. The additional structure is complicated by the need to allow for ranges flowing from less than operators. The NUMOR operator combines values into a range, while TUKE transmits a TRUE, while changing FALSE to UKE (so the operators it controls don't reverse the ranges they output).