Library Lambda.CCSum.Thinning
Require
Import
Lambda.Terms
.
Require
Import
Lambda.Reduction
.
Require
Import
Lambda.LiftSubst
.
Require
Import
Lambda.CCSum.Types
.
Require
Import
Lambda.CCSum.Inversion
.
Implicit
Types
i
k
m
n
p
: nat
.
Implicit
Type
s
: sort
.
Implicit
Types
A
B
M
N
T
t
u
v
: term
.
Inductive
ins_in_env
A
: nat
→ env
→ env
→ Prop
:=
| ins_O
: ∀ e
, ins_in_env
A
0 e
(A
:: e
)
| ins_S
:
∀ n
e
f
t
,
ins_in_env
A
n
e
f
→
ins_in_env
A
(S
n
) (t
:: e
) (lift_rec
1 t
n
:: f
).
Hint
Resolve
ins_O
ins_S
: coc
.
Lemma
ins_item_ge
:
∀ A
n
e
f
,
ins_in_env
A
n
e
f
→
∀ v
: nat
, n
≤ v
→ ∀ t
, item
_
t
e
v
→ item
_
t
f
(S
v
).
Lemma
ins_item_lt
:
∀ A
n
e
f
,
ins_in_env
A
n
e
f
→
∀ v
: nat
,
n
> v
→ ∀ t
, item_lift
t
e
v
→ item_lift
(lift_rec
1 t
n
) f
v
.
Lemma
typ_weak_weak
:
∀ A
e
t
T
,
typ
e
t
T
→
∀ n
f
,
ins_in_env
A
n
e
f
→ wf
f
→ typ
f
(lift_rec
1 t
n
) (lift_rec
1 T
n
).
Theorem
thinning
:
∀ e
t
T
,
typ
e
t
T
→ ∀ A
, wf
(A
:: e
) → typ
(A
:: e
) (lift
1 t
) (lift
1 T
).
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
).