public override FlatAbstractDomain <bool> IsNotZero(DisInterval intv)
        {
            Contract.Assume(intv != null); // F: just lazy

            if (intv.IsSingleton && intv.LowerBound.IsZero)
            {
                return(CheckOutcome.False);
            }

            if (intv.Meet(this.IntervalZero).IsBottom)
            {
                return(CheckOutcome.True);
            }

            return(CheckOutcome.Top);
        }
예제 #2
0
        public NonRelationalValueAbstraction <Variable, Expression> Meet(NonRelationalValueAbstraction <Variable, Expression> other)
        {
            Contract.Requires(other != null);
            Contract.Ensures(Contract.Result <NonRelationalValueAbstraction <Variable, Expression> >() != null);

            NonRelationalValueAbstraction <Variable, Expression> result;

            if (AbstractDomainsHelper.TryTrivialMeet(this, other, out result))
            {
                return(result);
            }

            var intv = disInterval.Meet(other.Interval);

            Contract.Assert(other.symbolicConditions != null);
            var symbolicConditions = this.symbolicConditions.Meet(other.symbolicConditions);

            Contract.Assert(other.weaklyRelationalDomains != null);
            Contract.Assume(weaklyRelationalDomains.Length == other.weaklyRelationalDomains.Length);

            var newWeaklyDomains = ParallelOperation(weaklyRelationalDomains, other.weaklyRelationalDomains, (x, y) => x.Meet(y));

            return(new NonRelationalValueAbstraction <Variable, Expression>(intv, symbolicConditions, newWeaklyDomains));
        }