425
26.3.5. Решение:
SBool = X. T <: X. F <: X. T ->F ->X;
STrue = X. T <: X. F <: X. T ->F ->T;
SF alse = X . T <: X. F <: X. T ->F -> F ;
tru = λX . λT <: X. λF <: X . λt:T . λf :F . t ;
tru : STrue
fls = λX . λT <: X. λF <: X . λt:T . λf :F . f ;
fls : SFa lse
notft = λb : S False . λX. λT <: X . λF <: X. λt: T . λf:F . b [ X][ F ][ T ] f t ;
notft : SFa lse -> STrue
nottf = λb : STrue . λX . λT <: X. λF <: X . λt:T. λf : F. b[X ][ F ][ T] f t ;
notft : STrue -> S False
26.4.3. Решение: В вариантах с абстракцией и абстракцией типа в частях (1) и (2), а также в варианте
с квантором в частях (3) и (4).
26.4.5. Решение: В части (1) проводится индукция по деревьям вывода наследования. Все вариан-
ты получаются либо непосредственно (S-Refl, S-Top), либо несложным применением предположения
индукции (S-Trans, S-Arrow, S-All), за исключением S-TVar, где дела обстоят более интересно.
Предположим, последнее правило при выводе Γ, X<:Q, ∆ S <: T — экземпляр правила S-TVar, т. е.,
S представляет соой некую переменную Y, а T является верхней границей для этой переменной в кон-
тексте. Нужно рассмотреть два случая. Если X и Y — различные переменные, то предположение Y<:T
имеется также в контексте Γ, X<:P, ∆, и тогда результат следует непосредственно. Если же X Y, то
T Q; чтобы завершить доказательство, мы должны показать, что Γ, X<:P, ∆ X <: Q. По правилу
S-TVar имеем Γ, X<:P, ∆ X <: P. Более того, по предположению, Γ P <: Q, и по лемме об ослаб-
лении (26.4.2, Γ, X<:P, ∆ P <: Q. Склеивание двух этих выводов через S-Trans дает нам требуемый
результат.
Часть (2) представляет собой несложную индукцию по деревьям вывода типов, с использованием
части (1) для предпосылки о наследовании в варианте с применением типа.
26.4.11. Решение: Все доказательства представляют собой прямолинейные индукции по деревьям вы-
вода наследования. Мы приводим только первое из них, рассматривая варианты последнего правила
в выводе. Варианты S-Refl и S-Top следуют непосредственно. S-TVar возникнуть не может (ле-
вая сторона заключения S-TVar всегда переменная, а не функциональный тип); точно так же невоз-
можно правило S-All. Если последнее правило — экземпляр S-Arrow, поддеревья дают требуемые
результаты. Наконец, предположим, что последнее правило — экземпляр S-Trans — т. е., мы имеем
Γ S
1
S
2
<: U и Γ U <: T для некоторого U. По предположению индукции, либо U равен Top (тогда
T тоже равен Top по пункту (4) данного упражнения, и требуемый результат получен), либо U имеет
вид U
1
U
2
, причем Γ U
1
<: S
1
и Γ S
2
<: U
2
. Во втором случае мы применяем предположение
индукции ко второму подвыводу исходного S-Trans и получаем, что либо S Top (и все доказано),
либо T имеет вид T
1
T
2
, причем Γ T
1
<: U
1
и Γ U
2
<: T
2
. Два применения транзитивности дают
нам Γ T
1
<: S
1
и S
2
<: T
2
, откуда требуемый результат следует по правилу S-Arrow.
26.5.1. Решение:
Γ S
1
<: T
1
Γ, X<:S
1
S
2
: T
2
Γ { X<:S
1
,S
2
} <: { X<:T
1
,T
2
}
S-Some
26.5.2. Решение: Без наследования имеется всего четыре типа:
{* Nat , {a =5 , b =7}} as { X , {a: Nat ,b : Nat }};
{* Nat , {a =5 , b =7}} as { X , {a:X ,b: Nat }};
{* Nat , {a =5 , b =7}} as { X , {a: Nat ,b : X }};
{* Nat , {a =5 , b =7}} as { X , {a:X ,b:X }};
rev. 104