code: public boolean notSoftSubtype(Type t, Type s) {
          if (t == s) return false;
          if (t.hasTag(TYPEVAR)) {
              TypeVar tv = (TypeVar) t;
              return !isCastable(tv.bound,
                                 relaxBound(s),
                                 noWarnings);
          }
          if (!s.hasTag(WILDCARD))
              s = cvarUpperBound(s);
  
          return !isSubtype(t, relaxBound(s));
      }
docs: This relation answers the question: is impossible that
  something of type `t' can be a subtype of `s'? This is
  different from the question "is `t' not a subtype of `s'?"
  when type variables are involved: Integer is not a subtype of T
  where {@code <T extends Number>} but it is not true that Integer cannot
  possibly be a subtype of T.