private @Nullable Constrained withNotInstanceofValue(Exact type) {
      if (myNotInstanceOf.contains(type)) return this;

      for (Exact dfaTypeValue : myInstanceOf) {
        if (type.isAssignableFrom(dfaTypeValue)) return null;
      }

      Set<Exact> newNotInstanceof = new HashSet<>(myNotInstanceOf);
      for (Exact alreadyNotInstanceof : myNotInstanceOf) {
        if (alreadyNotInstanceof.isAssignableFrom(type)) {
          return this;
        }
        if (type.isAssignableFrom(alreadyNotInstanceof)) {
          newNotInstanceof.remove(alreadyNotInstanceof);
        }
      }
      newNotInstanceof.add(type);

      return new Constrained(myInstanceOf, newNotInstanceof);
    }
private @Nullable Constrained withNotInstanceofValue(Exact type)