Where are correct type relationships described in IFC2X3?

In IFC4, the EXPRESS definition gives definitions of correct type assignments, such as:

	CorrectTypeAssigned : (SIZEOF(IsTypedBy) = 0) OR 
  ('IFC4.IFCCOILTYPE' IN TYPEOF(SELF\IfcObject.IsTypedBy[1].RelatingType));

… however I could not find this for IFC2X3. Did I miss it?

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: