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
.