public override FlatAbstractDomain <bool> VisitEqual(Expression left, Expression right, Expression original, FlatAbstractDomain <bool> data) { ExpressionType leftType = Decoder.TypeOf(left); ExpressionType rightType = Decoder.TypeOf(right); if (!leftType.IsFloatingPointType() && !rightType.IsFloatingPointType()) { if (left.Equals(right) && !Decoder.IsNaN(left) && !Decoder.IsNaN(right)) { return(CheckOutcome.True); } } evalConstant.Visit(left); Variable rightVar = Decoder.UnderlyingVariable(right); if (evalConstant.HasValue && Domain.ContainsKey(rightVar) && Domain[rightVar].IsNormal()) { if (Domain[rightVar].Contains(evalConstant.Result)) { return(CheckOutcome.False); } } evalConstant.Visit(right); Variable leftVar = Decoder.UnderlyingVariable(right); if (evalConstant.HasValue && Domain.ContainsKey(leftVar) && Domain[leftVar].IsNormal()) { if (Domain[leftVar].Contains(evalConstant.Result)) { return(CheckOutcome.False); } } return(CheckOutcome.Top); }