public Set <NormalizedExpression <Variable> > Difference(SegmentLimit <Variable> right) { Contract.Requires(right != null); Contract.Ensures(Contract.Result <Set <NormalizedExpression <Variable> > >() != null); return(expressions.Difference(right.Expressions)); }
static public bool IsSubsetOf(SegmentLimit <Variable> left, SegmentLimit <Variable> right) { Contract.Requires(left != null); Contract.Requires(right != null); return(left.Expressions.IsSubset(right.Expressions)); }
static public bool HaveTheSameElements(SegmentLimit <Variable> left, SegmentLimit <Variable> right) { Contract.Requires(left != null); Contract.Requires(right != null); return(left.expressions.Equals(right.expressions)); }
public Set <NormalizedExpression <Variable> > Union(SegmentLimit <Variable> right) { Contract.Requires(right != null); Contract.Ensures(Contract.Result <Set <NormalizedExpression <Variable> > >() != null); return(this.expressions.Union(right.Expressions)); }
public SegmentLimit <Variable> Widening(SegmentLimit <Variable> other) { Contract.Requires(other != null); Contract.Ensures(Contract.Result <SegmentLimit <Variable> >() != null); // F: ... We assume finitely many expressions ... return(this.Join(other)); }
internal bool IsAtLeftOf(SegmentLimit <Variable> segmentLimit) { Contract.Requires(segmentLimit != null); int vThis, vSegmentLimit; if (this.TryFindConstant(out vThis) && segmentLimit.TryFindConstant(out vSegmentLimit)) { return(vThis < vSegmentLimit); } return(false); }
public bool IsSuccessorOf(SegmentLimit <Variable> segmentLimit) { Contract.Requires(segmentLimit != null); foreach (var limit in segmentLimit) { Contract.Assume(limit != null); if (this.Contains(limit.PlusOne())) { return(true); } } return(false); }
public SegmentLimit <Variable> Join(SegmentLimit <Variable> other) { Contract.Requires(other != null); Contract.Ensures(Contract.Result <SegmentLimit <Variable> >() != null); SegmentLimit <Variable> result; if (AbstractDomainsHelper.TryTrivialJoin(this, other, out result)) { return(result); } var set = expressions.Intersection(other.Expressions); var isconditional = this.IsConditional || other.IsConditional; return(new SegmentLimit <Variable>(set, isconditional)); }
public bool LessEqual(SegmentLimit <Variable> other) { Contract.Requires(other != null); if (this.IsBottom) { return(true); } if (other.IsBottom) { return(false); } return((!this.IsConditional || other.IsConditional) && expressions.IsSubset(other.Expressions)); }
public SegmentLimit(SegmentLimit <Variable> expressions, bool isConditional) : this(new Set <NormalizedExpression <Variable> >(expressions.Expressions), isConditional) // F: TODO : Share the set { Contract.Requires(expressions != null); }
public bool IsSubSetOf(SegmentLimit <Variable> right) { Contract.Requires(right != null); return(IsSubsetOf(this, right)); }