public override IAbstractDomain Widening(IAbstractDomain prev) { var previous = (SimpleArrayAbstractDomain <Variable, Expression>)prev; var leftWidened = (INumericalAbstractDomain <Variable, Expression>) this.Left.Widening(previous.Left); var rightWidened = (SimpleArrayPropertiesAbstractDomain <Variable, Expression>) this.Right.Widening(previous.Right); var widened = new SimpleArrayAbstractDomain <Variable, Expression>(leftWidened, rightWidened); return((IAbstractDomain)widened); }
public SimpleArrayAbstractDomain <Variable, Expression> Join(SimpleArrayAbstractDomain <Variable, Expression> a, Set <Variable> keep) { SimpleArrayAbstractDomain <Variable, Expression> result; if (AbstractDomainsHelper.TryTrivialJoin(this, a, out result)) { return(result); } var joinLeftPart = (INumericalAbstractDomain <Variable, Expression>) this.Left.Join(a.Left); var joinRightPart = this.Right.Join(a.Right, keep); return((SimpleArrayAbstractDomain <Variable, Expression>) this.Reduce(joinLeftPart, joinRightPart)); }