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); }
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)); }