public override IntervalEnvironmentBase <TVar, TExpr, TInterval, Rational> AssumeNotEqualToZero
            (TExpr e,
            IntervalEnvironmentBase
            <
                TVar
                ,
                TExpr
                ,
                TInterval
                ,
                Rational
            >
            env)
        {
            var variable = env.Decoder.UnderlyingVariable(e);

            var intv = env.Eval(e);

            TInterval refinement;

            if (intv.LowerBound.IsZero)
            {
                refinement = env.Context.For(1L, intv.UpperBound);
            }
            else if (intv.UpperBound.IsZero)
            {
                refinement = env.Context.For(intv.LowerBound, -1L);
            }
            else
            {
                refinement = env.Context.TopValue;
            }

            return(env.With(variable, intv.Meet(refinement)));
        }
        public override IntervalEnvironmentBase <TVar, TExpr, TInterval, Rational> AssumeLessEqualThan
        (
            TInterval intv, TVar right, IntervalEnvironmentBase <TVar, TExpr, TInterval, Rational> env)
        {
            TInterval refined;

            if (
                !IntervalInference.ConstraintsFor.TryRefineLessEqualThan
                <IntervalEnvironmentBase <TVar, TExpr, TInterval, Rational>, TVar, TExpr, TInterval>
                    (intv, right, env, out refined))
            {
                return(env);
            }

            return(env.With(right, refined));
        }