22.3. Типизация на основе ограничений 253
для некоторых S, X и C.
Идея отношения типизации с ограничениями в том, что мы можем проверить, типизируем ли терм
t в контексте Γ, следующим образом: сначала собираем ограничения C, которые нужно удовлетворить,
чтобы t имел тип, и одновременно получаем тип S, содержащий переменные из C, и характеризующий
возможные типы t с точностью до этих переменных. Затем, чтобы найти решения для t, мы просто
ищем подстановки σ, удовлетворяющие ограничениям C (т. е., превращающие все уравнения из C в
тривиальные равенства); для каждой такой σ, тип σS есть возможный тип t. Если мы обнаружим,
что нет подстановок, удовлетворяющих ограничениям C, значит, t невозможно конкретизировать так,
чтобы он стал типизируемым.
Например, множество ограничений, порождаемых алгоритмом для терма t λx:X Y. x 0, равно
Nat Z X Y , а связанный с этим множеством тип результата (X Y) Z. Подстановка σ X
Nat, Y Bool превращает уравнение Nat Z X Y в равенство, и, таким образом, мы видим, что
σ((X Y) Z), т. е., (Nat Bool) Bool, является возможным типом для t.
Эта идея формально выражена в следующем определении:
Определение 22.3.4 Допустим, Γ t : S C. Решением для Γ, t, S, C называется пара σ, T , такая,
что σ удовлетворяет ограничениям C, а σS T.
Алгоритмическая задача поиска подстановок, унифицирующих данный набор ограничений C, будет
рассмотрена в следующем разделе. Однако сначала требуется проверить, что наш алгоритм типизации
с ограничениями дожным образом соответствует изначальному декларативному отношению типизации.
При данных контексте Γ и терме t у нас есть два способа охарактеризовать возможные способы
конкретизации типовых переменных в Γ и t, дающие в результате корректную типизацию:
1. Декларативный как множество всех решений для Γ, t в смысле Определения 22.2.1; либо
2. Алгоритмический через отношение типизации с ограничениями — нужно найти S и C, такие,
что Γ t : S C, а затем взять множество решений Γ, t, S, C .
Мы доказываем эквивалентность этих характеризаций в два шага. Сначала мы показываем, что
всякое решение Γ, t, S, C является также решением Γ, t (Теорема 22.3.5). Затем мы показываем,
что всякое решение для Γ, t можно расширить до решения Γ, t, S, C путем присваивания значений
типовым переменным, введенным в процессе порождения ограничений.
Теорема 22.3.5 Корректность типизиации с ограничениями : Предположим, Γ t : S C.
Если σ, T является решением Γ, t, S, C , то оно также является решением Γ, t .
Для этого направления рассуждений множества новых переменных X несущественны, и их мож-
но опустить.
Доказательство: Индукция по данному нам выводу типизации с ограничениями Γ t : S C. Рас-
сматриваем варианты последнего примененного правила.
Вариант CT-Var: t x x:S Γ C
Дано, что σ, T является решением Γ, t, S, C ; поскольку C пусто, это просто означает, что σS T.
Но тогда по правилу T-Var мы немендленно получаем σΓ x : T, как и требуется.
Вариант CT-Abs: t λx:T
1
.t
2
S T
1
S
2
Γ, x:T
1
t
2
: S
2
C
Дано, что σ, T является решением для Γ, t, S, C , т. е., σ унифицирует C, а T σS
σT
1
σS
2
. Так что σ, σS
2
является решением Γ, x:T
1
, t
2
, S
2
, C . Согласно предположению ин-
дукции, σ, σS
2
— решение Γ, x:T
1
, t
2
, т. е., σΓ, x:σT
1
σt
2
: σS
2
. По правилу T-Abs, σΓ
λx:σT
1
.σt
2
: σT
1
σS
2
σ T
1
S
2
T, как нам и требуется.
Вариант CT-App: t t
1
t
2
S X
Γ t
1
: S
1
C
1
Γ t
2
: S
2
C
2
C C
1
C
2
S
1
S
2
X
По определению, σ унифицирует C
1
и C
2
, и σS
1
σ S
2
X . Таким образом, σ, σS
1
и σ, σS
2
явля-
ются решениями для Γ, t
1
, S
1
, C
1
и Γ, t
2
, S
2
, C
2
. Отсюда по предположению индукции имеем σΓ
σt
1
: σS
1
и σΓ σt
2
: σS
2
. Однако, поскольку σS
1
σS
2
σX, мы получаем σΓ σt
1
: σS
2
σX
и, по правилу T-App, σΓ σ t
1
t
2
: σX T.
Остальные варианты:
Аналогично.
rev. 104