362 31.2. Определения
абстрактный, не делая никаких предположений о его подтипах и надтипах. Эта последняя формули-
ровка немедленно приводит к следующему правилу:
Γ, X S <: T
Γ λX.S <: λX.T
S-Abs
Обратным образом, если F и G являются операторами над типами и F <: G, то F U <: G U.
Γ F <: G
Γ F U <: G U
S-App
Заметим, что это правило срабатывает только в том случае, когда F и G применяются к одному и тому
же аргументу U. Если нам известно, что F поточечно является подтипом G, это ничего нам не говорит
о том, как эти два типа поведут себя, будучи применены к различным аргументам. (В 31.4) упомянуты
некоторые более сложные варианты F
ω
<:
, где этот случай принимается во внимание.)
Еще одно дополнительное правило возникает из значения, которое мы приписываем отношению
эквивалентности типов. Если S T, то S и T содержат одни и те же элементы. Однако ясно, что типы,
содержащие одни и те же элементы, являются подтипами друг друга. Отсюда происходит еще одно
правило наследования, где эквивалентность определений служит как базовый случай.
Γ S :: K Γ T :: K S T
Γ S <: T
S-Eq
После того, как наследование поднято от вида * на вид * *, можно таким же образом распространить
его и на более сложные виды. Например, если P и Q являются операторами над типами вида * * *,
то мы говорим, что P <: Q в том случае, если для любого U применение P U является подтипом Q U в
рамках вида * *.
Это определение имеет полезный побочный эффект: для высших видов отношения наследования
обладают максимальными элементами. Если мы скажем, что Top[*] Top, и определим (максимальные
элементы высших видов)
Top[K
1
K
2
]
def
λX::K
1
.Top[K
2
]
то с помощью несложной индукции можно показать, что Γ S <: Top[K] (при условии, что S имеет
вид K). В правилах следующего раздела мы используем этот эффект.
Переход от обыкновенных ограниченных кванторов к ограниченным кванторам высших порядков
не представляет труда. F
ω
<:
наследует от F
<:
ограниченные кванторы вида X<:T
1
.T
2
. Обобщение этой
конструкции на высшие порядки (то есть, на квантификацию по операторам над типами) не требует
никаких изменений в синтаксисе: мы просто говорим, что T
1
может быть любым выражением типа,
включая операторы. Неограниченные кванторы высших порядков, которые мы наследуем из F
ω
, можно
рассматривать как сокращения для ограниченных кванторов с максимальным ограничением — т. е.,
мы считаем, что X::K
1
.T
2
— сокращенная запись для X<:Top[K
1
].T
2
.
Наконец, F
ω
<:
наследует от F
ω
вопрос, использовать ли более доступный вычислительно ядерный
вариант или более выразительно мощный полный вариант для правила S-All. Мы здесь выбираем
ядерный вариант; полный вариант тоже имеет смысл с семантической точки зрения, однако его метатео-
ретические свойства (даже те, которые, по аналогии с полной F
<:
, как кажется, должны выполняться)
пока не установлены.
31.2. Определения
Правила, определяющие F
ω
<:
, приведены на Рис. 31.1. В определении имеется техническая деталь:
несмотря на то, что в системе есть две разновидности связывания для переменных типа (X::K в опе-
раторах типа и X<:T в кванторах), только одна из них — вторая, — может встречаться в контекстах.
Когда мы переводим связывание X::K с правой стороны знака штопора налево, в правилах K-Abs и
S-Abs, мы заменяем его на X<:Top[K].
Еще одна тонкая деталь состоит в том, что в F
ω
<:
исчезают правила S-Refl из F
<:
и T-Eq из F
ω
. Все
экземпляры старого S-Refl непосредственно следуют из S-Eq и Q-Refl, а правило T-Eq выводится
из T-Sub и S-Eq.
Упражнение 31.2.1 : Если мы определим Id λX.X и
Γ B<Top, A<:B, F<:Id
rev. 104