boolean (@NotNull DfaValue value, @NotNull DfType type) { EqClass eqClass = getEqClass(value); if (eqClass == null) return true; if (type.fromRelation(RelationType.GT) == DfType.TOP && type.fromRelation(RelationType.LT) == DfType.TOP) return true; DistinctPairSet distinctPairs = myDistinctClasses; myDistinctClasses = new DistinctPairSet(this); try { for (DistinctPairSet.DistinctPair pair : distinctPairs) { if (pair.isOrdered()) { if (pair.getFirst() == eqClass) { DfaVariableValue var = Objects.requireNonNull(pair.getSecond().getCanonicalVariable()); if (!meetDfType(var, getDfType(var).meetRelation(RelationType.GT, type))) return false; } else if (pair.getSecond() == eqClass) { DfaVariableValue var = Objects.requireNonNull(pair.getFirst().getCanonicalVariable()); if (!meetDfType(var, getDfType(var).meetRelation(RelationType.LT, type))) return false; } } } } finally { myDistinctClasses = distinctPairs; } return true; }