(* Forward lemmas with sort-irrelevant outer equivalence for terms **********)
lemma cpxs_fwd_sort (h) (G) (L):
- â\88\80X2,s1. â¦\83G,Lâ¦\84 ⊢ ⋆s1 ⬈*[h] X2 → ⋆s1 ⩳ X2.
+ â\88\80X2,s1. â\9dªG,Lâ\9d« ⊢ ⋆s1 ⬈*[h] X2 → ⋆s1 ⩳ X2.
#h #G #L #X2 #s1 #H
elim (cpxs_inv_sort1 … H) -H #s2 #H destruct //
qed-.
(* Note: probably this is an inversion lemma *)
(* Basic_2A1: was: cpxs_fwd_delta *)
lemma cpxs_fwd_delta_drops (h) (I) (G) (L) (K):
- ∀V1,i. ⇩*[i] L ≘ K.ⓑ{I}V1 →
+ ∀V1,i. ⇩*[i] L ≘ K.ⓑ[I]V1 →
∀V2. ⇧*[↑i] V1 ≘ V2 →
- â\88\80X2. â¦\83G,Lâ¦\84 ⊢ #i ⬈*[h] X2 →
- â\88¨â\88¨ #i ⩳ X2 | â¦\83G,Lâ¦\84 ⊢ V2 ⬈*[h] X2.
+ â\88\80X2. â\9dªG,Lâ\9d« ⊢ #i ⬈*[h] X2 →
+ â\88¨â\88¨ #i ⩳ X2 | â\9dªG,Lâ\9d« ⊢ V2 ⬈*[h] X2.
#h #I #G #L #K #V1 #i #HLK #V2 #HV12 #X2 #H
elim (cpxs_inv_lref1_drops … H) -H /2 width=1 by or_introl/
* #I0 #K0 #V0 #U0 #HLK0 #HVU0 #HU0
(* Basic_1: was just: pr3_iso_beta *)
lemma cpxs_fwd_beta (h) (p) (G) (L):
- â\88\80V,W,T,X2. â¦\83G,Lâ¦\84 â\8a¢ â\93\90V.â\93\9b{p}W.T ⬈*[h] X2 →
- ∨∨ ⓐV.ⓛ{p}W.T ⩳ X2 | ⦃G,L⦄ ⊢ ⓓ{p}ⓝW.V.T ⬈*[h] X2.
+ â\88\80V,W,T,X2. â\9dªG,Lâ\9d« â\8a¢ â\93\90V.â\93\9b[p]W.T ⬈*[h] X2 →
+ ∨∨ ⓐV.ⓛ[p]W.T ⩳ X2 | ❪G,L❫ ⊢ ⓓ[p]ⓝW.V.T ⬈*[h] X2.
#h #p #G #L #V #W #T #X2 #H elim (cpxs_inv_appl1 … H) -H *
[ #V0 #T0 #_ #_ #H destruct /2 width=1 by teqo_pair, or_introl/
| #b #W0 #T0 #HT0 #HU
qed-.
lemma cpxs_fwd_theta (h) (p) (G) (L):
- â\88\80V1,V,T,X2. â¦\83G,Lâ¦\84 â\8a¢ â\93\90V1.â\93\93{p}V.T ⬈*[h] X2 →
+ â\88\80V1,V,T,X2. â\9dªG,Lâ\9d« â\8a¢ â\93\90V1.â\93\93[p]V.T ⬈*[h] X2 →
∀V2. ⇧*[1] V1 ≘ V2 →
- ∨∨ ⓐV1.ⓓ{p}V.T ⩳ X2 | ⦃G,L⦄ ⊢ ⓓ{p}V.ⓐV2.T ⬈*[h] X2.
+ ∨∨ ⓐV1.ⓓ[p]V.T ⩳ X2 | ❪G,L❫ ⊢ ⓓ[p]V.ⓐV2.T ⬈*[h] X2.
#h #p #G #L #V1 #V #T #X2 #H #V2 #HV12
elim (cpxs_inv_appl1 … H) -H *
[ -HV12 #V0 #T0 #_ #_ #H destruct /2 width=1 by teqo_pair, or_introl/
| #X #HT2 #H #H0 destruct
elim (lifts_inv_bind1 … H) -H #W2 #T2 #HW2 #HT02 #H destruct
@or_intror @(cpxs_trans … HU) -X2 (**) (* explicit constructor *)
- @(cpxs_trans … (+ⓓV.ⓐV2.ⓛ{q}W2.T2)) [ /3 width=1 by cpxs_flat_dx, cpxs_bind_dx/ ] -T
- @(cpxs_strap2 … (ⓐV1.ⓛ{q}W.T0)) [2: /2 width=1 by cpxs_beta_dx/ ]
+ @(cpxs_trans … (+ⓓV.ⓐV2.ⓛ[q]W2.T2)) [ /3 width=1 by cpxs_flat_dx, cpxs_bind_dx/ ] -T
+ @(cpxs_strap2 … (ⓐV1.ⓛ[q]W.T0)) [2: /2 width=1 by cpxs_beta_dx/ ]
/4 width=7 by cpx_zeta, lifts_bind, lifts_flat/
]
| #q #V3 #V4 #V0 #T0 #HV13 #HV34 #HT0 #HU
| #X #HT1 #H #H0 destruct
elim (lifts_inv_bind1 … H) -H #V5 #T5 #HV05 #HT05 #H destruct
lapply (cpxs_lifts_bi … HV13 (Ⓣ) … (L.ⓓV0) … HV12 … HV34) -V3 /3 width=1 by drops_refl, drops_drop/ #HV24
- @(cpxs_trans … (+ⓓV.ⓐV2.ⓓ{q}V5.T5)) [ /3 width=1 by cpxs_flat_dx, cpxs_bind_dx/ ] -T
- @(cpxs_strap2 … (ⓐV1.ⓓ{q}V0.T0)) [ /4 width=7 by cpx_zeta, lifts_bind, lifts_flat/ ] -V -V5 -T5
- @(cpxs_strap2 … (ⓓ{q}V0.ⓐV2.T0)) /3 width=3 by cpxs_pair_sn, cpxs_bind_dx, cpx_theta/
+ @(cpxs_trans … (+ⓓV.ⓐV2.ⓓ[q]V5.T5)) [ /3 width=1 by cpxs_flat_dx, cpxs_bind_dx/ ] -T
+ @(cpxs_strap2 … (ⓐV1.ⓓ[q]V0.T0)) [ /4 width=7 by cpx_zeta, lifts_bind, lifts_flat/ ] -V -V5 -T5
+ @(cpxs_strap2 … (ⓓ[q]V0.ⓐV2.T0)) /3 width=3 by cpxs_pair_sn, cpxs_bind_dx, cpx_theta/
]
]
qed-.
lemma cpxs_fwd_cast (h) (G) (L):
- â\88\80W,T,X2. â¦\83G,Lâ¦\84 ⊢ ⓝW.T ⬈*[h] X2 →
- â\88¨â\88¨ â\93\9dW. T ⩳ X2 | â¦\83G,Lâ¦\84 â\8a¢ T â¬\88*[h] X2 | â¦\83G,Lâ¦\84 ⊢ W ⬈*[h] X2.
+ â\88\80W,T,X2. â\9dªG,Lâ\9d« ⊢ ⓝW.T ⬈*[h] X2 →
+ â\88¨â\88¨ â\93\9dW. T ⩳ X2 | â\9dªG,Lâ\9d« â\8a¢ T â¬\88*[h] X2 | â\9dªG,Lâ\9d« ⊢ W ⬈*[h] X2.
#h #G #L #W #T #X2 #H
elim (cpxs_inv_cast1 … H) -H /2 width=1 by or3_intro1, or3_intro2/ *
#W0 #T0 #_ #_ #H destruct /2 width=1 by teqo_pair, or3_intro0/
qed-.
lemma cpxs_fwd_cnx (h) (G) (L):
- â\88\80T1. â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83T1â¦\84 →
- â\88\80X2. â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] X2 → T1 ⩳ X2.
+ â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªT1â\9d« →
+ â\88\80X2. â\9dªG,Lâ\9d« ⊢ T1 ⬈*[h] X2 → T1 ⩳ X2.
/3 width=5 by cpxs_inv_cnx1, teqx_teqo/ qed-.