public override IntervalEnvironment <Variable, Expression> TestNotEqual(Expression e1, Expression e2)
        {
            bool isBottomLT, isBottomGT;
            List <Pair <Variable, Interval> > constraintsLT, constraintsGT;

            IntervalInference.InferConstraints_NotEq(e1, e2, this.ExpressionManager.Decoder, this,
                                                     out constraintsLT, out constraintsGT, out isBottomLT, out isBottomGT);

            if (isBottomLT)
            {
                // Bottom join Bottom = Bottom
                if (isBottomGT)
                {
                    return(this.Bottom);
                }
                this.TestTrueListOfFacts(constraintsGT);
            }
            else if (isBottomGT)
            {
                this.TestTrueListOfFacts(constraintsLT);
            }
            else
            {
                var join = JoinConstraints(constraintsLT, constraintsGT);

                this.TestTrueListOfFacts(join);
            }

            return(this);
        }