I think, you are right. It wouldn’t even be possible in IFC2x3 - at least not easily or in a nice way, because the inverse IfcObject.IsTypedBy is new in IFC4. Before, there was only the inverse IsDefinedBy and it covered references to the supertype level, that is all IfcRelDefines subtypes, not just IfcRelDefinesByType. Now, in IFC4, we have separate inverses IsDefinedBy, IsTypedBy, IsDeclaredBy.
Cheers, because I couldn’t find where this was defined anywhere (as in, not just EXPRESS, but even informally), I made a series of assumptions and generated this - I hope it’s useful to other implementors: