Справочник Ada 2012
4.9.1 Статически соответствующие ограничения и подтипы
Статическая семантика
Ограничение статически соответствует другому ограничению, если:
- оба являются ограничениями нуля;
- оба статичны и имеют равные соответствующие границы или значения дискриминантов;
- оба являются нестатичными и получены от одного и того же этапа разработки ограничения указателя_подтипа или от одного и того же вычисления диапазона определения_подтипа_дискретного; или
- оба являются нестатичными и происходят от того же объявления_формального_типа.
Подтип статически соответствует другому подтипу того же типа, если у них статически соответствующие ограничения, все спецификации предикатов, применимые к ним, происходят из одних и тех же объявлений, и, для подтипов доступа, либо оба, либо ни один из них не исключают нуль. Два анонимных подтипа доступа к объекту статически соответствуют, если их назначенные подтипы статически соответствуют, и либо оба, либо ни один из них не исключают нуль, и либо оба, либо ни один из них не являются доступами к константе. Два анонимных подтипа доступа к подпрограмме статически соответствуют, если их назначенные профили соответствуют подтипам, и либо оба, либо ни один из них не исключают нуль.
Два диапазона одного и того же типа статически соответствуют, если оба получены от одного и того же вычисления диапазона, или если оба являются статическими и имеют равные соответствующие границы.
Ограничение статически совместимо со скалярным подтипом, если оно статически соответствует ограничению подтипа, или если оба статичны, а ограничение совместимо с подтипом. Ограничение статически совместимо с подтипом доступа или составным подтипом, если оно статически соответствует ограничению подтипа или если подтип не ограничен.
Два статически соответствующих подтипа статически совместимы друг с другом. Кроме того, подтип S1 статически совместим с подтипом S2, если:
- ограничение S1 статически совместимо с S2, и
- если S2 исключает нуль, то S1 также исключает нуль, и
- либо:
все спецификации предикатов, применимые к S2, применимы также к S1, или
оба подтипа статичны, каждое значение, удовлетворяющее предикатам S1, также удовлетворяет предикатам S2, и неверно, что оба типа имеют по крайней мере одну применимую спецификацию предиката, проверки предикатов включены (см. 11.4.2) для S2, и проверки предикатов не включены для S1.