Library Lambda.InvLiftSubst
Require
Import
Lambda.Utils
.
Require
Import
Lambda.Tactics
.
Require
Import
Lambda.Terms
.
Require
Import
Lambda.Reduction
.
Require
Import
Lambda.Conv
.
Require
Import
Lambda.Conv_Dec
.
Require
Import
Lambda.LiftSubst
.
Require
Import
Lambda.Env
.
Lemma
inv_lift_prod
: ∀ t
U
V
n
, lift
n
t
= Prod
U
V
→
∃ U'
, ∃ V'
, t
= Prod
U'
V'
∧ U
= (lift_rec
n
U'
0) ∧ V
= (lift_rec
n
V'
1).
Lemma
inv_lift_sum
: ∀ t
U
V
n
, lift
n
t
= Sum
U
V
→
∃ U'
, ∃ V'
, t
= Sum
U'
V'
∧ U
= (lift_rec
n
U'
0) ∧ V
= (lift_rec
n
V'
1).
Lemma
inv_lift_subset
: ∀ t
U
V
n
, lift
n
t
= Subset
U
V
→
∃ U'
, ∃ V'
, t
= Subset
U'
V'
∧ U
= (lift_rec
n
U'
0) ∧ V
= (lift_rec
n
V'
1).
Lemma
inv_lift_abs
: ∀ t
U
V
n
, lift
n
t
= Abs
U
V
→
∃ U'
, ∃ V'
, t
= Abs
U'
V'
∧ U
= (lift_rec
n
U'
0) ∧ V
= (lift_rec
n
V'
1).
Lemma
inv_lift_app
: ∀ t
U
V
n
, lift
n
t
= App
U
V
→
∃ U'
, ∃ V'
, t
= App
U'
V'
∧ U
= (lift_rec
n
U'
0) ∧ V
= (lift_rec
n
V'
0).
Lemma
inv_lift_pair
: ∀ t
U
V
W
n
, lift
n
t
= Pair
U
V
W
→
exists3
U'
V'
W'
, t
= Pair
U'
V'
W'
∧ U
= (lift_rec
n
U'
0) ∧ V
= (lift_rec
n
V'
0) ∧ W
= (lift_rec
n
W'
0).
Lemma
inv_lift_pi1
: ∀ t
U
n
, lift
n
t
= Pi1
U
→
∃ U'
, t
= Pi1
U'
∧ U
= (lift_rec
n
U'
0).
Lemma
inv_lift_pi2
: ∀ t
U
n
, lift
n
t
= Pi2
U
→
∃ U'
, t
= Pi2
U'
∧ U
= (lift_rec
n
U'
0).
Lemma
inv_lift_sort
: ∀ t
s
n
, lift
n
t
= Srt
s
→ t
= Srt
s
.
Lemma
inv_subst_sort
: ∀ t
t'
n
s
, subst_rec
t
t'
n
= Srt
s
→
t
= Srt
s
∨ t'
= Srt
s
.