private boolean applyRelationOnAddition(@NotNull RelationType type,
                                          @NotNull DfaVariableValue left,
                                          @NotNull LongRangeSet leftRange,
                                          @NotNull LongRangeSet rightRange,
                                          @NotNull DfaValue sum,
                                          @NotNull LongRangeType lrType) {
    if (!leftRange.additionMayOverflow(rightRange, lrType)) {
      // a-positiveNumber >= b => a > b
      if (rightRange.max() < 0 && RelationType.GE.isSubRelation(type)) {
        if (!applyLessThanRelation(sum, left)) return false;
      }
      // a+positiveNumber >= b => a > b
      if (rightRange.min() > 0 && RelationType.LE.isSubRelation(type)) {
        if (!applyLessThanRelation(left, sum)) return false;
      }
    }
    if (RelationType.EQ == type && !rightRange.contains(0)) {
      // a+nonZero == b => a != b
      if (!applyRelation(left, sum, true)) return false;
    }
    return true;
  }
private boolean applyRelationOnAddition(@NotNull RelationType type,
                                          @NotNull DfaVariableValue left,
                                          @NotNull LongRangeSet leftRange,
                                          @NotNull LongRangeSet rightRange,
                                          @NotNull DfaValue sum,
                                          @NotNull LongRangeType lrType)