Require
Import
Lambda.TPOSR.Terms
.
Require
Import
Lambda.TPOSR.Reduction
.
Require
Import
Lambda.TPOSR.Conv
.
Require
Import
Lambda.TPOSR.LiftSubst
.
Require
Import
Lambda.TPOSR.Env
.
Require
Import
Lambda.TPOSR.Types
.
Require
Import
Lambda.TPOSR.PreCtxCoercion
.
Require
Import
Lambda.TPOSR.LeftReflexivity
.
Require
Import
Lambda.TPOSR.PreSubstitutionTPOSR
.
Require
Import
Lambda.TPOSR.RightReflexivity
.
Implicit
Types
i
k
m
n
p
: nat
.
Implicit
Type
s
: sort
.
Implicit
Types
A
B
M
N
T
t
u
v
: lterm
.
Implicit
Types
e
f
g
: lenv
.
Corollary
substitution_tposr_tposr_n
: ∀ g
d
d'
t
, g
|-- d
-> d'
: t
->
∀ e
u
v
U
, e
|-- u
-> v
: U
->
∀ f
n
, sub_in_lenv
d
t
n
e
f
-> trunc
_
n
f
g
->
f
|-- (lsubst_rec
d
u
n
) -> (lsubst_rec
d'
v
n
) : (lsubst_rec
d
U
n
).
Corollary
substitution_tposr_tposr_wf_n
: ∀ g
d
d'
t
, g
|-- d
-> d'
: t
->
∀ e
, tposr_wf
e
-> ∀ f
n
, sub_in_lenv
d
t
n
e
f
->
trunc
_
n
f
g
-> tposr_wf
f
.
Corollary
substitution_tposr_eq_n
: ∀ g
d
d'
t
, g
|-- d
-> d'
: t
->
∀ e
u
v
s
, e
|-- u
~= v
: s
->
∀ f
n
, sub_in_lenv
d
t
n
e
f
-> trunc
_
n
f
g
->
f
|-- (lsubst_rec
d
u
n
) ~= (lsubst_rec
d'
v
n
) : s
.
Corollary
substitution_tposr_coerce_n
: ∀ g
d
d'
t
, g
|-- d
-> d'
: t
->
∀ e
u
v
s
, e
|-- u
>-> v
: s
->
∀ f
n
, sub_in_lenv
d
t
n
e
f
-> trunc
_
n
f
g
->
f
|-- (lsubst_rec
d
u
n
) >-> (lsubst_rec
d'
v
n
) : s
.
Corollary
substitution_tposr_tposr
: ∀ e
t
u
v
U
, (t
:: e
) |-- u
-> v
: U
->
∀ d
d'
, e
|-- d
-> d'
: t
-> e
|-- (lsubst
d
u
) -> (lsubst
d'
v
) : (lsubst
d
U
).
Corollary
substitution_tposr_eq
:
∀ e
t
u
v
s
, t
:: e
|-- u
~= v
: s
->
∀ d
d'
, e
|-- d
-> d'
: t
->
e
|-- (lsubst
d
u
) ~= (lsubst
d'
v
) : s
.
Corollary
substitution_tposr_coerce
:
∀ e
t
u
v
s
, t
:: e
|-- u
>-> v
: s
->
∀ d
d'
, e
|-- d
-> d'
: t
->
e
|-- (lsubst
d
u
) >-> (lsubst
d'
v
) : s
.
Corollary
substitution_tposr_tposrp_aux
: ∀ G
u
v
U
, G
|-- u
-+> v
: U
-> ∀ t
e
, G
= (t
:: e
) ->
∀ d
d'
, e
|-- d
-> d'
: t
->
e
|-- (lsubst
d
u
) -+> (lsubst
d'
v
) : (lsubst
d
U
).
Corollary
substitution_tposr_tposrp
: ∀ t
e
u
v
U
, t
:: e
|-- u
-+> v
: U
->
∀ d
d'
, e
|-- d
-> d'
: t
->
e
|-- (lsubst
d
u
) -+> (lsubst
d'
v
) : (lsubst
d
U
).
Corollary
substitution_sorted_n
:
∀ g
d
d'
t
, g
|-- d
-> d'
: t
->
∀ e
u
v
s
, e
|-- u
-> v
: s
->
∀ f
n
, sub_in_lenv
d
t
n
e
f
-> trunc
_
n
f
g
->
f
|-- (lsubst_rec
d
u
n
) -> (lsubst_rec
d'
v
n
) : Srt_l
s
.
Corollary
substitution_sorted
: ∀ e
t
u
v
s
, (t
:: e
) |-- u
-> v
: Srt_l
s
->
∀ d
d'
, e
|-- d
-> d'
: t
-> e
|-- (lsubst
d
u
) -> (lsubst
d'
v
) : Srt_l
s
.
Hint
Resolve
substitution_tposr_tposr
substitution_tposr_coerce
substitution_tposr_eq
substitution_tposr_tposrp
: ecoc
.