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); }
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); }
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)); }
Reduce(WeakUpperBoundsEqual <Variable, Expression> left, Pentagons <Variable, Expression> right) { return(this.Factory(left, right)); }