Library Lambda.Russell.Thinning
Require
Import
Lambda.Terms
.
Require
Import
Lambda.Reduction
.
Require
Import
Lambda.LiftSubst
.
Require
Import
Lambda.Env
.
Require
Import
Lambda.Russell.Types
.
Require
Import
Lambda.Conv
.
Implicit
Types
i
k
m
n
p
: nat
.
Implicit
Type
s
: sort
.
Implicit
Types
A
B
M
N
T
t
u
v
: term
.
Implicit
Types
e
f
g
: env
.
Lemma
double_weak_weak
: ∀ A
,
(∀ e
t
T
, e
|-- t
: T
→
∀ n
f
, ins_in_env
A
n
e
f
→ wf
f
→
f
|-- (lift_rec
1 t
n
) : (lift_rec
1 T
n
)) ∧
(∀ e
T
U
s
, e
|-- T
>> U
: s
→
∀ n
f
, ins_in_env
A
n
e
f
→ wf
f
→
f
|-- (lift_rec
1 T
n
) >> (lift_rec
1 U
n
) : s
).
Theorem
thinning
:
∀ e
t
T
,
typ
e
t
T
→ ∀ A
, wf
(A
:: e
) → typ
(A
:: e
) (lift
1 t
) (lift
1 T
).
Theorem
thinning_coerce
:
∀ e
T
U
s
,
e
|-- T
>> U
: s
→
∀ A
, wf
(A
:: e
) → (A
:: e
) |-- (lift
1 T
) >> (lift
1 U
) : s
.
Lemma
thinning_n
:
∀ n
e
f
,
trunc
_
n
e
f
→
∀ t
T
, typ
f
t
T
→ wf
e
→ typ
e
(lift
n
t
) (lift
n
T
).
Lemma
thinning_n_coerce
: ∀ n
e
f
, trunc
_
n
e
f
→
∀ T
U
s
, f
|-- T
>> U
: s
→ wf
e
→ e
|-- (lift
n
T
) >> (lift
n
U
) : s
.
Lemma
wf_sort_lift
:
∀ n
e
t
, wf
e
→ item_lift
t
e
n
→ ∃ s
: sort
, typ
e
t
(Srt
s
).
Hint
Resolve
thinning_n
thinning_n_coerce
: coc
.