Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        static public bool IsSubsetOf(SegmentLimit <Variable> left, SegmentLimit <Variable> right)
        {
            Contract.Requires(left != null);
            Contract.Requires(right != null);

            return(left.Expressions.IsSubset(right.Expressions));
        }
Ejemplo n.º 3
0
        static public bool HaveTheSameElements(SegmentLimit <Variable> left, SegmentLimit <Variable> right)
        {
            Contract.Requires(left != null);
            Contract.Requires(right != null);

            return(left.expressions.Equals(right.expressions));
        }
Ejemplo n.º 4
0
        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));
        }
Ejemplo n.º 5
0
        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));
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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));
        }
Ejemplo n.º 9
0
        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));
        }
Ejemplo n.º 10
0
 public SegmentLimit(SegmentLimit <Variable> expressions, bool isConditional)
     : this(new Set <NormalizedExpression <Variable> >(expressions.Expressions), isConditional) // F: TODO : Share the set
 {
     Contract.Requires(expressions != null);
 }
Ejemplo n.º 11
0
        public bool IsSubSetOf(SegmentLimit <Variable> right)
        {
            Contract.Requires(right != null);

            return(IsSubsetOf(this, right));
        }