lemma cpms_inv_sort1 (n) (h) (G) (L): ∀X2,s. ⦃G, L⦄ ⊢ ⋆s ➡*[n, h] X2 → X2 = ⋆(((next h)^n) s).
#n #h #G #L #X2 #s #H @(cpms_ind_dx … H) -X2 //
#n1 #n2 #X #X2 #_ #IH #HX2 destruct
-elim (cpm_inv_sort1 … HX2) -HX2 * // #H1 #H2 destruct
-/2 width=3 by refl, trans_eq/
+elim (cpm_inv_sort1 … HX2) -HX2 #H #_ destruct //
qed-.
(* Basic properties *********************************************************)
/3 width=3 by cpms_step_sn, cpm_cpms, cpm_appl/
qed.
-(* Basic_2A1: uses: cprs_zeta *)
lemma cpms_zeta (n) (h) (G) (L):
- ∀T2,T. ⬆*[1] T2 ≘ T →
- ∀V,T1. ⦃G, L.ⓓV⦄ ⊢ T1 ➡*[n, h] T → ⦃G, L⦄ ⊢ +ⓓV.T1 ➡*[n, h] T2.
+ ∀T1,T. ⬆*[1] T ≘ T1 →
+ ∀V,T2. ⦃G, L⦄ ⊢ T ➡*[n, h] T2 → ⦃G, L⦄ ⊢ +ⓓV.T1 ➡*[n, h] T2.
+#n #h #G #L #T1 #T #HT1 #V #T2 #H @(cpms_ind_dx … H) -T2
+/3 width=3 by cpms_step_dx, cpm_cpms, cpm_zeta/
+qed.
+
+(* Basic_2A1: uses: cprs_zeta *)
+lemma cpms_zeta_dx (n) (h) (G) (L):
+ ∀T2,T. ⬆*[1] T2 ≘ T →
+ ∀V,T1. ⦃G, L.ⓓV⦄ ⊢ T1 ➡*[n, h] T → ⦃G, L⦄ ⊢ +ⓓV.T1 ➡*[n, h] T2.
#n #h #G #L #T2 #T #HT2 #V #T1 #H @(cpms_ind_sn … H) -T1
/3 width=3 by cpms_step_sn, cpm_cpms, cpm_bind, cpm_zeta/
qed.
/3 width=3 by cpxs_strap1, cpx_pair_sn/
qed.
-lemma cpxs_zeta: ∀h,G,L,V,T1,T,T2. ⬆*[1] T2 ≘ T →
- ⦃G, L.ⓓV⦄ ⊢ T1 ⬈*[h] T → ⦃G, L⦄ ⊢ +ⓓV.T1 ⬈*[h] T2.
-#h #G #L #V #T1 #T #T2 #HT2 #H @(cpxs_ind_dx … H) -T1
+lemma cpxs_zeta (h) (G) (L) (V):
+ ∀T1,T. ⬆*[1] T ≘ T1 →
+ ∀T2. ⦃G, L⦄ ⊢ T ⬈*[h] T2 → ⦃G, L⦄ ⊢ +ⓓV.T1 ⬈*[h] T2.
+#h #G #L #V #T1 #T #HT1 #T2 #H @(cpxs_ind … H) -T2
+/3 width=3 by cpxs_strap1, cpx_cpxs, cpx_zeta/
+qed.
+
+(* Basic_2A1: was: cpxs_zeta *)
+lemma cpxs_zeta_dx (h) (G) (L) (V):
+ ∀T2,T. ⬆*[1] T2 ≘ T →
+ ∀T1. ⦃G, L.ⓓV⦄ ⊢ T1 ⬈*[h] T → ⦃G, L⦄ ⊢ +ⓓV.T1 ⬈*[h] T2.
+#h #G #L #V #T2 #T #HT2 #T1 #H @(cpxs_ind_dx … H) -T1
/3 width=3 by cpxs_strap2, cpx_cpxs, cpx_bind, cpx_zeta/
qed.
elim (cpxs_inv_appl1 … H) -H *
[ -HV12 #V0 #T0 #_ #_ #H destruct /2 width=1 by theq_pair, or_introl/
| #q #W #T0 #HT0 #HU
- elim (cpxs_inv_abbr1 … HT0) -HT0 *
+ elim (cpxs_inv_abbr1_dx … HT0) -HT0 *
[ #V3 #T3 #_ #_ #H destruct
| #X #HT2 #H #H0 destruct
elim (lifts_inv_bind1 … H) -H #W2 #T2 #HW2 #HT02 #H destruct
]
| #q #V3 #V4 #V0 #T0 #HV13 #HV34 #HT0 #HU
@or_intror @(cpxs_trans … HU) -U (**) (* explicit constructor *)
- elim (cpxs_inv_abbr1 … HT0) -HT0 *
+ elim (cpxs_inv_abbr1_dx … HT0) -HT0 *
[ #V5 #T5 #HV5 #HT5 #H destruct
/6 width=9 by cpxs_lifts_bi, drops_refl, drops_drop, cpxs_flat, cpxs_bind/
| #X #HT1 #H #H0 destruct
elim (theq_inv_pair1 … HT0) #V1 #T1 #H destruct
| @or_intror -V1b (**) (* explicit constructor *)
@(cpxs_trans … HU) -U
- elim (cpxs_inv_abbr1 … HT0) -HT0 *
+ elim (cpxs_inv_abbr1_dx … HT0) -HT0 *
[ -HV12a #V1 #T1 #_ #_ #H destruct
| -V1b #X #HT1 #H #H0 destruct
elim (lifts_inv_bind1 … H) -H #W1 #T1 #HW01 #HT01 #H destruct
elim (theq_inv_pair1 … HT0) #V1 #T1 #H destruct
| @or_intror -V1b -V1b (**) (* explicit constructor *)
@(cpxs_trans … HU) -U
- elim (cpxs_inv_abbr1 … HT0) -HT0 *
+ elim (cpxs_inv_abbr1_dx … HT0) -HT0 *
[ #V1 #T1 #HV1 #HT1 #H destruct
lapply (cpxs_lifts_bi … HV10a (Ⓣ) … (L.ⓓV) … HV12a … HV0a) -V1a -V0a /3 width=1 by drops_refl, drops_drop/ #HV2a
@(cpxs_trans … (ⓓ{p}V.ⓐV2a.T1)) /3 width=1 by cpxs_bind, cpxs_pair_sn, cpxs_flat_dx, cpxs_bind_dx/
| /4 width=5 by csx_cpx_trans, csx_lpx_conf, lpx_pair/
| -IHV /4 width=3 by csx_cpx_trans, cpx_cpxs, cpx_pair_sn/
]
-| -IHV -IHT -H2
- /4 width=7 by csx_cpx_trans, csx_inv_lifts, drops_drop, drops_refl/
+| #U #HUT #HUX #_ -p
+ /5 width=7 by csx_cpx_trans, csx_inv_lifts, drops_drop, drops_refl/
]
qed.
/3 width=6 by tdeq_inv_lifts_bi, tdeq_pair/
| -V1 @(IHVT … H0 … HV04) -o -V0 /4 width=1 by cpx_cpxs, cpx_flat, cpx_bind/
]
- | -H -IHVT #T0 #HLT0 #HT0 #H0 destruct
- lapply (csx_cpx_trans … HVT (ⓐV2.T0) ?) /2 width=1 by cpx_flat/ -T #HVT0
- lapply (csx_inv_lifts … HVT0 (Ⓣ) … L ???) -HVT0
- /3 width=5 by csx_cpx_trans, cpx_pair_sn, drops_refl, drops_drop, lifts_flat/
+ | #T0 #HT0 #HLT0 #H0 destruct -H -IHVT
+ lapply (csx_inv_lifts … HVT (Ⓣ) … L ???) -HVT
+ [5:|*: /3 width=4 by drops_refl, drops_drop, lifts_flat/ ] -V2 -T #HVT
+ /3 width=5 by csx_cpx_trans, cpx_flat/
]
| -HV -HV12 -HVT -IHVT -H #b #V0 #W0 #W1 #T0 #T1 #_ #_ #_ #H destruct
| -IHVT -H #b #V0 #V3 #W0 #W1 #T0 #T1 #HLV10 #HV03 #HLW01 #HLT01 #H1 #H2 destruct
(* Basic_1: was pr3_gen_abbr *)
(* Basic_2A1: includes: cprs_inv_abbr1 *)
-lemma cpms_inv_abbr_sn (n) (h) (G) (L):
- ∀p,V1,T1,X2. ⦃G, L⦄ ⊢ ⓓ{p}V1.T1 ➡*[n, h] X2 →
- ∨∨ ∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ➡*[h] V2 & ⦃G, L.ⓓV1⦄ ⊢ T1 ➡*[n, h] T2 & X2 = ⓓ{p}V2.T2
- | ∃∃T2. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡*[n ,h] T2 & ⬆*[1] X2 ≘ T2 & p = Ⓣ.
+lemma cpms_inv_abbr_sn_dx (n) (h) (G) (L):
+ ∀p,V1,T1,X2. ⦃G, L⦄ ⊢ ⓓ{p}V1.T1 ➡*[n, h] X2 →
+ ∨∨ ∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ➡*[h] V2 & ⦃G, L.ⓓV1⦄ ⊢ T1 ➡*[n, h] T2 & X2 = ⓓ{p}V2.T2
+ | ∃∃T2. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡*[n ,h] T2 & ⬆*[1] X2 ≘ T2 & p = Ⓣ.
#n #h #G #L #p #V1 #T1 #X2 #H
@(cpms_ind_dx … H) -X2 -n /3 width=5 by ex3_2_intro, or_introl/
#n1 #n2 #X #X2 #_ * *
elim (cpm_inv_abbr1 … HX2) -HX2 *
[ #V2 #T2 #HV2 #HT2 #H destruct
/6 width=7 by lprs_cpm_trans, lprs_pair, cprs_step_dx, cpms_trans, ex3_2_intro, or_introl/
- | #T2 #HT2 #HXT2 #Hp
- /6 width=7 by lprs_cpm_trans, lprs_pair, cpms_trans, ex3_intro, or_intror/
+ | #T2 #HT2 #HTX2 #Hp -V
+ elim (cpm_lifts_sn … HTX2 (Ⓣ) … (L.ⓓV1) … HT2) -T2 [| /3 width=3 by drops_refl, drops_drop/ ] #X #HX2 #HTX
+ /4 width=3 by cpms_step_dx, ex3_intro, or_intror/
]
| #T #HT1 #HXT #Hp #HX2
elim (cpm_lifts_sn … HX2 (Ⓣ) … (L.ⓓV1) … HXT) -X
∀p1,p2,V1,W2,T1,T2. ⦃G, L⦄ ⊢ ⓓ{p1}V1.T1 ➡*[n, h] ⓛ{p2}W2.T2 →
∃∃T. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡*[n, h] T & ⬆*[1] ⓛ{p2}W2.T2 ≘ T & p1 = Ⓣ.
#n #h #G #L #p1 #p2 #V1 #W2 #T1 #T2 #H
-elim (cpms_inv_abbr_sn … H) -H *
+elim (cpms_inv_abbr_sn_dx … H) -H *
[ #V #T #_ #_ #H destruct
| /2 width=3 by ex3_intro/
]
/3 width=5 by lpxs_pair, cpxs_trans, cpxs_strap1, ex3_2_intro/
qed-.
-lemma cpxs_inv_abbr1 (h) (G): ∀p,L,V1,T1,U2. ⦃G, L⦄ ⊢ ⓓ{p}V1.T1 ⬈*[h] U2 →
- ∨∨ ∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ⬈*[h] V2 & ⦃G, L.ⓓV1⦄ ⊢ T1 ⬈*[h] T2 &
- U2 = ⓓ{p}V2.T2
- | ∃∃T2. ⦃G, L.ⓓV1⦄ ⊢ T1 ⬈*[h] T2 & ⬆*[1] U2 ≘ T2 & p = Ⓣ.
-#h #G #p #L #V1 #T1 #U2 #H @(cpxs_ind … H) -U2 /3 width=5 by ex3_2_intro, or_introl/
+(* Basic_2A1: was: cpxs_inv_abbr1 *)
+lemma cpxs_inv_abbr1_dx (h) (p) (G) (L):
+ ∀V1,T1,U2. ⦃G, L⦄ ⊢ ⓓ{p}V1.T1 ⬈*[h] U2 →
+ ∨∨ ∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ⬈*[h] V2 & ⦃G, L.ⓓV1⦄ ⊢ T1 ⬈*[h] T2 &
+ U2 = ⓓ{p}V2.T2
+ | ∃∃T2. ⦃G, L.ⓓV1⦄ ⊢ T1 ⬈*[h] T2 & ⬆*[1] U2 ≘ T2 & p = Ⓣ.
+#h #p #G #L #V1 #T1 #U2 #H
+@(cpxs_ind … H) -U2 /3 width=5 by ex3_2_intro, or_introl/
#U0 #U2 #_ #HU02 * *
[ #V0 #T0 #HV10 #HT10 #H destruct
elim (cpx_inv_abbr1 … HU02) -HU02 *
[ #V2 #T2 #HV02 #HT02 #H destruct
lapply (lpxs_cpx_trans … HT02 (L.ⓓV1) ?)
/4 width=5 by lpxs_pair, cpxs_trans, cpxs_strap1, ex3_2_intro, or_introl/
- | #T2 #HT02 #HUT2
- lapply (lpxs_cpx_trans … HT02 (L.ⓓV1) ?) -HT02
- /4 width=3 by lpxs_pair, cpxs_trans, ex3_intro, or_intror/
+ | #T2 #HT20 #HTU2 #Hp -V0
+ elim (cpx_lifts_sn … HTU2 (Ⓣ) … (L.ⓓV1) … HT20) -T2 [| /3 width=3 by drops_refl, drops_drop/ ] #U0 #HU20 #HTU0
+ /4 width=3 by cpxs_strap1, ex3_intro, or_intror/
]
| #U1 #HTU1 #HU01 #Hp
- elim (cpx_lifts_sn … HU02 (Ⓣ) … (L.ⓓV1) … HU01) -U0 /3 width=3 by drops_refl, drops_drop/ #U #HU2 #HU1
+ elim (cpx_lifts_sn … HU02 (Ⓣ) … (L.ⓓV1) … HU01) -U0 [| /3 width=3 by drops_refl, drops_drop/ ] #U #HU2 #HU1
/4 width=3 by cpxs_strap1, ex3_intro, or_intror/
]
qed-.
/4 width=2 by lsubsx_pair, rdsx_bind_void/
| #I0 #G #L0 #V1 #V2 #T1 #T2 #_ #_ #IHV12 #IHT12 #f #L #HL0 #HL
elim (rdsx_inv_flat … HL) -HL /3 width=2 by rdsx_flat/
-| #G #L0 #V #U1 #U2 #T2 #_ #HTU2 #IHU12 #f #L #HL0 #HL
+| #G #L0 #V #U1 #T1 #T2 #HTU1 #_ #IHT12 #f #L #HL0 #HL
elim (rdsx_inv_bind … HL) -HL #HV #HU1
- /4 width=8 by lsubsx_pair, rdsx_inv_lifts, drops_refl, drops_drop/
+ /5 width=8 by rdsx_inv_lifts, drops_refl, drops_drop/
| #G #L0 #V #T1 #T2 #_ #IHT12 #f #L #HL0 #HL
elim (rdsx_inv_flat … HL) -HL /2 width=2 by/
| #G #L0 #V1 #V2 #T #_ #IHV12 #f #L #HL0 #HL
#h * /2 width=2 by cpx_flat, cpx_bind/
qed.
+lemma cpg_cpx (h) (Rt) (c) (G) (L):
+ ∀T1,T2. ⦃G,L⦄ ⊢ T1 ⬈[Rt,c,h] T2 → ⦃G,L⦄ ⊢ T1 ⬈[h] T2.
+#h #Rt #c #G #L #T1 #T2 #H elim H -c -G -L -T1 -T2
+/2 width=3 by cpx_theta, cpx_beta, cpx_ee, cpx_eps, cpx_zeta, cpx_flat, cpx_bind, cpx_lref, cpx_delta/
+qed.
+
(* Basic inversion lemmas ***************************************************)
lemma cpx_inv_atom1: ∀h,J,G,L,T2. ⦃G, L⦄ ⊢ ⓪{J} ⬈[h] T2 →