Свойство соответствия является антисимметричным, т. Е. Если A → B и B → A , то A = B .Таким образом, два типа равны, если они соответствуют друг другу:
a_type.conforms_to (l_rel.item.secondary_type) and
l_rel.item.secondary_type.conforms_to (a_type)
(Хотя conforms_to
сравнивает типы объектов, а не сами объекты, приведенное выше выражение все еще в порядке, поскольку из-за правил соответствия A = B тогда и только тогда, когда TYPE [A] = TYPE [B] , когда A и B сами являются типами.)
Если один из типов прикреплен, а другой является съемным, вы все равно можете сравнить их как равные.В этом случае можно использовать следующий код:
is_conforming (a_type, l_rel.item.secondary_type) and
is_conforming (l_rel.item.secondary_type, a_type)
, где предикат сравнения игнорирует метку вложения:
is_conforming (t1, t2: TYPE [detachable ANY]): BOOLEAN
do
Result :=
({REFLECTOR}.type_of_type ({REFLECTOR}.detachable_type (t1.type_id))).conforms_to
({REFLECTOR}.type_of_type ({REFLECTOR}.detachable_type (t2.type_id)))
end