Руководство по Ada (Ada 2022)
4.9.1 Статически совпадающие ограничения и подтипы
Статическая семантика
Ограничение статически совпадает с другим ограничением, если:
- оба являются нулевыми ограничениями;
- оба статические и имеют равные соответствующие границы или значения дискриминантов;
- оба нестатистические и получены из одной и той же обработки ограничения указания_подтипа или из одного и того же вычисления диапазона определения_подтипа_дискретного; или
- оба нестатистические и получены из одного и того же объявления_типа_формального.
Аспекты Глобальный или Глобальный'Класс (см. 6.1.2) двух сущностей статически совпадают, если оба состоят из одного определения_аспекта_глобального, где каждый представляет собой зарезервированное слово null, или каждый имеет вид «режим_глобальный обозначение_глобальное» с каждым режимом_глобальный являющимся той же последовательностью зарезервированных слов и каждым обозначением_глобальным являющимся тем же зарезервированным словом, или каждый являющийся именем_глобальным, которое статически называет ту же сущность.
Подтип статически совпадает с другим подтипом того же типа, если у них есть статически совпадающие ограничения, все спецификации предикатов, которые к ним применяются, происходят из одних и тех же объявлений, аспекты Неблокирующие имеют одинаковое значение, глобальные аспекты статически совпадают, Object_Size (см. 13.3) был задан с несоответствующим значением для обоих или ни для одного, и несоответствующие значения, если таковые имеются, одинаковы, и, для подтипов доступа, либо оба, либо ни один не исключают null. Два анонимных подтипа доступа к объекту статически совпадают, если их указанные подтипы статически совпадают, и либо оба, либо ни один не исключают null, и либо оба, либо ни один не являются доступом к константе. Два анонимных подтипа доступа к подпрограмме статически совпадают, если их указанные профили соответствуют подтипам, и либо оба, либо ни один не исключают null.
Два диапазона одного и того же типа статически совпадают, если оба получены из одного и того же вычисления диапазона, или если оба статические и имеют равные соответствующие границы.
Ограничение статически совместимо со скалярным подтипом, если оно статически совпадает с ограничением подтипа, или если оба статические и ограничение совместимо с подтипом. Ограничение статически совместимо с подтипом доступа или составным подтипом, если оно статически совпадает с ограничением подтипа или если подтип не ограничен.
Два статически совпадающих подтипа статически совместимы друг с другом. Кроме того, подтип S1 статически совместим с подтипом S2, если:
- ограничение S1 статически совместимо с S2, и
- если S2 исключает null, то также и S1, и
- либо:
все спецификации предикатов, которые применяются к S2, также применяются к S1, или
оба подтипа статические, каждое значение, удовлетворяющее предикатам S1, также удовлетворяет предикатам S2, и неверно, что оба типа имеют по крайней мере одну применимую спецификацию предиката, проверки предикатов включены (см. 11.4.2) для S2, и проверки предикатов не включены для S1.