26.2. Определения 303
Существует, на самом деле, два различных разумных способа определить отношение наследования
в F
<:
. Они отличаются формулировкой правила для сравнения ограниченных кванторов (S-All): есть
версия, которая легче описывается формально, но менее гибкая, так называемое ядерное правило, и
более выразительное, но вызывающее технические трудности полное правило наследования. В следую-
щих разделах мы подробно описываем обе версии, сначала вводя ядерный вариант, а затем, в §26.2.5,
полный вариант. Когда нам нужно точно указывать, о каком варианте идет речь, мы будем называть
версии исчисления соответственно ядерная F
<:
и полная F
<:
. Имя F
<:
без прилагательных относится к
обеим системам.
На Рис. 26.1 приведено полное определение ядерной F
<:
; отличия от предыдущих систем выделены.
26.2.1. Ограниченная и неограниченная квантификация
Одна деталь, которая немедленно видна при взгляде на это определение — синтаксис F
<:
разрешает
только ограниченную квантификацию: обычная, неограниченная квантификация Системы F исчезла.
Причина состоит в том, что она не нужна: ограниченный квантор, чье ограничение равно Top, охватыва-
ет все подтипы Top — а значит, все типы вообще. Таким образом, мы восстанавливаем неограниченную
квантификацию в виде скоращения:
X.T
def
X<:Top.T
Это сокращение часто используется в тексте.
26.2.2. Области видимости
Важная техническая подробность, неочевидная из Рис. 26.1, касается областей видимости типовых
переменных. Очевидно, что всякий раз, когда мы упоминаем утверждение типизации вида Γ t : T,
мы хотим, чтобы свободные типовые переменные, встречающиеся в t и T, были определены в Γ. Однако
что происходит со свободными типовыми переменными, входящими в типы внутри Γ? В частности,
какие из следующих контекстов должны считаться правильно образованными с точки зрения областей
видимости?
Γ
1
X<:Top, y:X Nat
Γ
2
y:X Nat, X<:Top
Γ
3
X<:{a:Nat,b:X}
Γ
4
X<:{a:Nat,b:Y}, Y<:{c:Bool,d:X}
Γ
1
, несомненно, образован правильно: он вводит типовую переемнную X, а затем термовую переменную
y, в чьем типе упоминается X. Терм, который может привести к такому контексту в процессе проверки
типов, будет иметь вид λX<:Top. λy:X Nat. t. Ясно, что переменная X в типе y связана вышележащей
λ. С другой стороны, по тем же причинам Γ
2
должен быть неверным, поскольку в термах, которые
могли бы привести к такому контексту — скажем, λy:X Nat. λX<:Top. t, — неясно, какова ожидаемая
область видимости X.
Γ
3
— более интересный случай. Можно доказывать, что он правилен и возникает в термах вроде
λX<:{a:Nat,b:X}. t, где второе вхождение X связанное. Для этого только требуется считать областью
видимости X участок кода, включающий его собственную верхнюю границу (а также, как обычно,
все, что стоит справа от связывания). Разновидность ограниченной квантификации, принимающая это
уточнение, называется F-ограниченная квантификация (Canning, Cook, Hill, Olthoff and Mitchell 1989b).
F-ограниченная квантификация часто упоминается в дискуссиях о типах в объектно-ориентированном
программировании, и использовалась в проекте языка GJ (Bracha, Odersky, Stoutamire and Wadler
1998). Однако теория этого вычисления несколько сложнее, чем в обыкновенной F
<:
(Ghelli 1997; Baldan,
Ghelli and Rafaet`a 1999), и становится по-настоящему интересной только когда в систему включаются
рекурсивные типы (ни один нерекурсивный тип X не может удовлетворять условию X<:{a:Nat,b:X}).
Контексты еще более общего вида, вроде Γ
4
, где позволяется взаимная рекурсия между типовы-
ми переменными через их верхние границы, тоже существуют. В таких исчислениях каждому новому
связыванию переменной, как правило, разрешается вводить произвольное множество неравенств, на-
лагающих ограничения как на новую переменную, так и на уже существующие.
В этой книге мы больше не будем рассматривать F-связанную квантификацию, и будем считать, что
Γ
2
, Γ
3
и Γ
4
все образованы неверно. Выражаясь более формально, мы будем требовать, чтобы каждый
rev. 104