Esempio n. 1
0
 public PentagonsPlus(
     WeakUpperBoundsEqual <Variable, Expression> left, Pentagons <Variable, Expression> right,
     ExpressionManagerWithEncoder <Variable, Expression> expManager)
     : base(left, right, expManager)
 {
     Contract.Requires(left != null);
     Contract.Requires(right != null);
     Contract.Requires(expManager != null);
 }
Esempio n. 2
0
        private Pentagons <Variable, Expression> HelperForTestTrueNotEqual(Expression e1, Expression e2, Pentagons <Variable, Expression> newRight)
        {
            Contract.Requires(newRight != null);
            Contract.Ensures(Contract.Result <Pentagons <Variable, Expression> >() != null);

            var decoder = this.ExpressionManager.Decoder;

            // Get rid of the conversion operators
            e1 = decoder.Stripped(e1);
            e2 = decoder.Stripped(e2);

            var e1Var = decoder.UnderlyingVariable(e1);
            var e2Var = decoder.UnderlyingVariable(e2);

            SetOfConstraints <Variable> upperBounds;

            if (this.Left.TryGetValue(e1Var, out upperBounds))
            {
                if (upperBounds.IsNormal() && upperBounds.Contains(e2Var))
                { // if "e1 <= e2" then "e2 < e1"
                    newRight = newRight.TestTrueLessThan(e1, e2);
                }
            }

            if (this.Left.TryGetValue(e2Var, out upperBounds))
            {
                if (upperBounds.IsNormal() && upperBounds.Contains(e1Var))
                { // if "e2 <= e1" then "e2 < e1"
                    newRight = newRight.TestTrueLessThan(e2, e1);
                }
            }

            return(newRight);
        }
Esempio n. 3
0
        Factory(WeakUpperBoundsEqual <Variable, Expression> left, Pentagons <Variable, Expression> right)
        {
            Contract.Ensures(Contract.Result <ReducedCartesianAbstractDomain <WeakUpperBoundsEqual <Variable, Expression>, Pentagons <Variable, Expression> > >() != null);

            return(new PentagonsPlus <Variable, Expression>(left, right, this.ExpressionManager));
        }
Esempio n. 4
0
 Reduce(WeakUpperBoundsEqual <Variable, Expression> left, Pentagons <Variable, Expression> right)
 {
     return(this.Factory(left, right));
 }