boolean (@NotNull DfaValue left, @NotNull DfaValue right) { return StreamEx.of(left, right).flatCollection(val -> val.getDfType().getDerivedVariables()) .allMatch(field -> { DfaValue leftValue = field.createValue(myFactory, left); DfaValue rightValue = field.createValue(myFactory, right); DfType result = getDfType(leftValue).meet(getDfType(rightValue)); if (!result.hasNonStandardEquivalence() && !applyRelation(leftValue, rightValue, false)) { return false; } return meetDfType(leftValue, result) && meetDfType(rightValue, result); }); }