(* Basic inversion properties ***********************************************)
lemma cpr_inv_Delta1_body_sn (h) (G) (L) (s):
- ∀X. ❪G,L.ⓛ⋆s❫ ⊢ ⓐ#O.#O ➡[h] X → ⓐ#O.#O = X.
+ ∀X. ❪G,L.ⓛ⋆s❫ ⊢ ⓐ#O.#O ➡[h,0] X → ⓐ#O.#O = X.
#h #G #L #s #X #H
lapply (cpm_inv_appl1 … H) -H * *
[ #W2 #T2 #HW2 #HT2 #H destruct
qed-.
lemma cpr_inv_Delta_sn (h) (G) (L) (s):
- ∀X. ❪G,L❫ ⊢ Delta s ➡[h] X → Delta s = X.
+ ∀X. ❪G,L❫ ⊢ Delta s ➡[h,0] X → Delta s = X.
#h #G #L #s #X #H
elim (cpm_inv_abst1 … H) -H #X1 #X2 #H1 #H2 #H destruct
lapply (cpr_inv_sort1 … H1) -H1 #H destruct
(* Main properties **********************************************************)
-theorem cpr_Omega_12 (h) (G) (L) (s): ❪G,L❫ ⊢ Omega1 s ➡[h] Omega2 s.
+theorem cpr_Omega_12 (h) (G) (L) (s): ❪G,L❫ ⊢ Omega1 s ➡[h,0] Omega2 s.
/2 width=1 by cpm_beta/ qed.
-theorem cpr_Omega_23 (h) (G) (L) (s): ❪G,L❫ ⊢ Omega2 s ➡[h] Omega3 s.
+theorem cpr_Omega_23 (h) (G) (L) (s): ❪G,L❫ ⊢ Omega2 s ➡[h,0] Omega3 s.
/5 width=3 by cpm_eps, cpm_appl, cpm_bind, cpm_delta, Delta_lifts/ qed.
-theorem cpr_Omega_31 (h) (G) (L) (s): ❪G,L❫ ⊢ Omega3 s ➡[h] Omega1 s.
+theorem cpr_Omega_31 (h) (G) (L) (s): ❪G,L❫ ⊢ Omega3 s ➡[h,0] Omega1 s.
/4 width=3 by cpm_zeta, Delta_lifts, lifts_flat/ qed.
(* Main inversion properties ************************************************)
theorem cpr_inv_Omega1_sn (h) (G) (L) (s):
- ∀X. ❪G,L❫ ⊢ Omega1 s ➡[h] X →
+ ∀X. ❪G,L❫ ⊢ Omega1 s ➡[h,0] X →
∨∨ Omega1 s = X | Omega2 s = X.
#h #G #L #s #X #H elim (cpm_inv_appl1 … H) -H *
[ #W2 #T2 #HW2 #HT2 #H destruct
]
qed-.
-theorem cpr_Omega_21_false (h) (G) (L) (s): ❪G,L❫ ⊢ Omega2 s ➡[h] Omega1 s → ⊥.
+theorem cpr_Omega_21_false (h) (G) (L) (s): ❪G,L❫ ⊢ Omega2 s ➡[h,0] Omega1 s → ⊥.
#h #G #L #s #H elim (cpm_inv_bind1 … H) -H *
[ #W #T #_ #_ whd in ⊢ (??%?→?); #H destruct
| #X #H #_ #_ #_
⇧*[f] (ApplDelta s0 s) ≘ (ApplDelta s0 s).
/5 width=1 by lifts_sort, lifts_lref, lifts_bind, lifts_flat/ qed.
-lemma cpr_ApplOmega_12 (h) (G) (L) (s0) (s): ❪G,L❫ ⊢ ApplOmega1 s0 s ➡[h] ApplOmega2 s0 s.
+lemma cpr_ApplOmega_12 (h) (G) (L) (s0) (s): ❪G,L❫ ⊢ ApplOmega1 s0 s ➡[h,0] ApplOmega2 s0 s.
/2 width=1 by cpm_beta/ qed.
-lemma cpr_ApplOmega_23 (h) (G) (L) (s0) (s): ❪G,L❫ ⊢ ApplOmega2 s0 s ➡[h] ApplOmega3 s0 s.
+lemma cpr_ApplOmega_23 (h) (G) (L) (s0) (s): ❪G,L❫ ⊢ ApplOmega2 s0 s ➡[h,0] ApplOmega3 s0 s.
/6 width=3 by cpm_eps, cpm_appl, cpm_bind, cpm_delta, ApplDelta_lifts/ qed.
-lemma cpr_ApplOmega_34 (h) (G) (L) (s0) (s): ❪G,L❫ ⊢ ApplOmega3 s0 s ➡[h] ApplOmega4 s0 s.
+lemma cpr_ApplOmega_34 (h) (G) (L) (s0) (s): ❪G,L❫ ⊢ ApplOmega3 s0 s ➡[h,0] ApplOmega4 s0 s.
/4 width=3 by cpm_zeta, ApplDelta_lifts, lifts_sort, lifts_flat/ qed.
lemma cpxs_ApplOmega_14 (h) (G) (L) (s0) (s): ❪G,L❫ ⊢ ApplOmega1 s0 s ⬈*[h] ApplOmega4 s0 s.
(* Properties with relocation ***********************************************)
-lemma mf_delta_drops (h) (G): ∀K,V1,V2. ❪G,K❫ ⊢ V1 ➡[h] V2 →
+lemma mf_delta_drops (h) (G): ∀K,V1,V2. ❪G,K❫ ⊢ V1 ➡[h,0] V2 →
∀T,L,i. ⇩[i] L ≘ K.ⓓV1 →
- ∀gv,lv. ❪G,L❫ ⊢ ●[gv,⇡[i←#i]lv]T ➡[h] ●[gv,⇡[i←↑[↑i]V2]lv]T.
+ ∀gv,lv. ❪G,L❫ ⊢ ●[gv,⇡[i←#i]lv]T ➡[h,0] ●[gv,⇡[i←↑[↑i]V2]lv]T.
#h #G #K #V1 #V2 #HV #T elim T -T * //
[ #i #L #j #HKL #gv #lv
>mf_lref >mf_lref
(* Forward lemmas with context-sensitive parallel reduction for terms *******)
lemma cpr_fwd_deq (h) (M): is_model M → is_extensional M →
- ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡[h] T2 → ❪G,L❫ ⊢ T1 ≗{M} T2.
+ ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡[h,0] T2 → ❪G,L❫ ⊢ T1 ≗{M} T2.
#h #M #H1M #H2M #G #L #T1 #T2 #H @(cpr_ind … H) -G -L -T1 -T2
[ /2 width=2 by deq_refl/
| #G #K #V1 #V2 #W2 #_ #IH #HVW2 #gv #v #H
| cnv_lref: ∀I,G,K,i. cnv h a G K (#i) → cnv h a G (K.ⓘ[I]) (#↑i)
| cnv_bind: ∀p,I,G,L,V,T. cnv h a G L V → cnv h a G (L.ⓑ[I]V) T → cnv h a G L (ⓑ[p,I]V.T)
| cnv_appl: ∀n,p,G,L,V,W0,T,U0. ad a n → cnv h a G L V → cnv h a G L T →
- ❪G,L❫ ⊢ V ➡*[1,h] W0 → ❪G,L❫ ⊢ T ➡*[n,h] ⓛ[p]W0.U0 → cnv h a G L (ⓐV.T)
+ ❪G,L❫ ⊢ V ➡*[h,1] W0 → ❪G,L❫ ⊢ T ➡*[h,n] ⓛ[p]W0.U0 → cnv h a G L (ⓐV.T)
| cnv_cast: ∀G,L,U,T,U0. cnv h a G L U → cnv h a G L T →
- ❪G,L❫ ⊢ U ➡*[h] U0 → ❪G,L❫ ⊢ T ➡*[1,h] U0 → cnv h a G L (ⓝU.T)
+ ❪G,L❫ ⊢ U ➡*[h,0] U0 → ❪G,L❫ ⊢ T ➡*[h,1] U0 → cnv h a G L (ⓝU.T)
.
interpretation "context-sensitive native validity (term)"
fact cnv_inv_appl_aux (h) (a):
∀G,L,X. ❪G,L❫ ⊢ X ![h,a] → ∀V,T. X = ⓐV.T →
∃∃n,p,W0,U0. ad a n & ❪G,L❫ ⊢ V ![h,a] & ❪G,L❫ ⊢ T ![h,a] &
- ❪G,L❫ ⊢ V ➡*[1,h] W0 & ❪G,L❫ ⊢ T ➡*[n,h] ⓛ[p]W0.U0.
+ ❪G,L❫ ⊢ V ➡*[h,1] W0 & ❪G,L❫ ⊢ T ➡*[h,n] ⓛ[p]W0.U0.
#h #a #G #L #X * -L -X
[ #G #L #s #X1 #X2 #H destruct
| #I #G #K #V #_ #X1 #X2 #H destruct
lemma cnv_inv_appl (h) (a):
∀G,L,V,T. ❪G,L❫ ⊢ ⓐV.T ![h,a] →
∃∃n,p,W0,U0. ad a n & ❪G,L❫ ⊢ V ![h,a] & ❪G,L❫ ⊢ T ![h,a] &
- ❪G,L❫ ⊢ V ➡*[1,h] W0 & ❪G,L❫ ⊢ T ➡*[n,h] ⓛ[p]W0.U0.
+ ❪G,L❫ ⊢ V ➡*[h,1] W0 & ❪G,L❫ ⊢ T ➡*[h,n] ⓛ[p]W0.U0.
/2 width=3 by cnv_inv_appl_aux/ qed-.
fact cnv_inv_cast_aux (h) (a):
∀G,L,X. ❪G,L❫ ⊢ X ![h,a] → ∀U,T. X = ⓝU.T →
∃∃U0. ❪G,L❫ ⊢ U ![h,a] & ❪G,L❫ ⊢ T ![h,a] &
- ❪G,L❫ ⊢ U ➡*[h] U0 & ❪G,L❫ ⊢ T ➡*[1,h] U0.
+ ❪G,L❫ ⊢ U ➡*[h,0] U0 & ❪G,L❫ ⊢ T ➡*[h,1] U0.
#h #a #G #L #X * -G -L -X
[ #G #L #s #X1 #X2 #H destruct
| #I #G #K #V #_ #X1 #X2 #H destruct
lemma cnv_inv_cast (h) (a):
∀G,L,U,T. ❪G,L❫ ⊢ ⓝU.T ![h,a] →
∃∃U0. ❪G,L❫ ⊢ U ![h,a] & ❪G,L❫ ⊢ T ![h,a] &
- ❪G,L❫ ⊢ U ➡*[h] U0 & ❪G,L❫ ⊢ T ➡*[1,h] U0.
+ ❪G,L❫ ⊢ U ➡*[h,0] U0 & ❪G,L❫ ⊢ T ➡*[h,1] U0.
/2 width=3 by cnv_inv_cast_aux/ qed-.
(* Basic forward lemmas *****************************************************)
(* Forward lemmas on atomic arity assignment for terms **********************)
(* Basic_2A1: uses: snv_fwd_aaa *)
-lemma cnv_fwd_aaa (h) (a): ∀G,L,T. ❪G,L❫ ⊢ T ![h,a] → ∃A. ❪G,L❫ ⊢ T ⁝ A.
+lemma cnv_fwd_aaa (h) (a):
+ ∀G,L,T. ❪G,L❫ ⊢ T ![h,a] → ∃A. ❪G,L❫ ⊢ T ⁝ A.
#h #a #G #L #T #H elim H -G -L -T
[ /2 width=2 by aaa_sort, ex_intro/
| #I #G #L #V #_ * /3 width=2 by aaa_zero, ex_intro/
(* Forward lemmas with t_bound rt_transition for terms **********************)
lemma cnv_fwd_cpm_SO (h) (a) (G) (L):
- ∀T. ❪G,L❫ ⊢ T ![h,a] → ∃U. ❪G,L❫ ⊢ T ➡[1,h] U.
+ ∀T. ❪G,L❫ ⊢ T ![h,a] → ∃U. ❪G,L❫ ⊢ T ➡[h,1] U.
#h #a #G #L #T #H
elim (cnv_fwd_aaa … H) -H #A #HA
/2 width=2 by aaa_cpm_SO/
(* Forward lemmas with t_bound rt_computation for terms *********************)
lemma cnv_fwd_cpms_total (h) (a) (n) (G) (L):
- ∀T. ❪G,L❫ ⊢ T ![h,a] → ∃U. ❪G,L❫ ⊢ T ➡*[n,h] U.
+ ∀T. ❪G,L❫ ⊢ T ![h,a] → ∃U. ❪G,L❫ ⊢ T ➡*[h,n] U.
#h #a #n #G #L #T #H
elim (cnv_fwd_aaa … H) -H #A #HA
/2 width=2 by cpms_total_aaa/
lemma cnv_fwd_cpms_abst_dx_le (h) (a) (G) (L) (W) (p):
∀T. ❪G,L❫ ⊢ T ![h,a] →
- ∀n1,U1. ❪G,L❫ ⊢ T ➡*[n1,h] ⓛ[p]W.U1 → ∀n2. n1 ≤ n2 →
- ∃∃U2. ❪G,L❫ ⊢ T ➡*[n2,h] ⓛ[p]W.U2 & ❪G,L.ⓛW❫ ⊢ U1 ➡*[n2-n1,h] U2.
+ ∀n1,U1. ❪G,L❫ ⊢ T ➡*[h,n1] ⓛ[p]W.U1 → ∀n2. n1 ≤ n2 →
+ ∃∃U2. ❪G,L❫ ⊢ T ➡*[h,n2] ⓛ[p]W.U2 & ❪G,L.ⓛW❫ ⊢ U1 ➡*[h,n2-n1] U2.
#h #a #G #L #W #p #T #H
elim (cnv_fwd_aaa … H) -H #A #HA
/2 width=2 by cpms_abst_dx_le_aaa/
lemma cnv_appl_ge (h) (a) (n1) (p) (G) (L):
∀n2. n1 ≤ n2 → ad a n2 →
∀V. ❪G,L❫ ⊢ V ![h,a] → ∀T. ❪G,L❫ ⊢ T ![h,a] →
- ∀X. ❪G,L❫ ⊢ V ➡*[1,h] X → ∀W. ❪G,L❫ ⊢ W ➡*[h] X →
- ∀U. ❪G,L❫ ⊢ T ➡*[n1,h] ⓛ[p]W.U → ❪G,L❫ ⊢ ⓐV.T ![h,a].
+ ∀X. ❪G,L❫ ⊢ V ➡*[h,1] X → ∀W. ❪G,L❫ ⊢ W ➡*[h,0] X →
+ ∀U. ❪G,L❫ ⊢ T ➡*[h,n1] ⓛ[p]W.U → ❪G,L❫ ⊢ ⓐV.T ![h,a].
#h #a #n1 #p #G #L #n2 #Hn12 #Ha #V #HV #T #HT #X #HVX #W #HW #X #HTX
elim (cnv_fwd_cpms_abst_dx_le … HT … HTX … Hn12) #U #HTU #_ -n1
/4 width=11 by cnv_appl, cpms_bind, cpms_cprs_trans/
∀n. ad a n →
∀V. ❪G,L❫ ⊢ V ![h,a] → ∀T. ❪G,L❫ ⊢ T ![h,a] →
∀W. ❪G,L❫ ⊢ V ⬌*[h,1,0] W →
- ∀p,U. ❪G,L❫ ⊢ T ➡*[n,h] ⓛ[p]W.U → ❪G,L❫ ⊢ ⓐV.T ![h,a].
+ ∀p,U. ❪G,L❫ ⊢ T ➡*[h,n] ⓛ[p]W.U → ❪G,L❫ ⊢ ⓐV.T ![h,a].
#h #a #G #L #n #Hn #V #HV #T #HT #W *
/4 width=11 by cnv_appl, cpms_cprs_trans, cpms_bind/
qed.
lemma cnv_inv_appl_cpes (h) (a) (G) (L):
∀V,T. ❪G,L❫ ⊢ ⓐV.T ![h,a] →
∃∃n,p,W,U. ad a n & ❪G,L❫ ⊢ V ![h,a] & ❪G,L❫ ⊢ T ![h,a] &
- ❪G,L❫ ⊢ V ⬌*[h,1,0] W & ❪G,L❫ ⊢ T ➡*[n,h] ⓛ[p]W.U.
+ ❪G,L❫ ⊢ V ⬌*[h,1,0] W & ❪G,L❫ ⊢ T ➡*[h,n] ⓛ[p]W.U.
#h #a #G #L #V #T #H
elim (cnv_inv_appl … H) -H #n #p #W #U #Hn #HV #HT #HVW #HTU
/3 width=7 by cpms_div, ex5_4_intro/
Q G L V →Q G (L.ⓑ[I]V) T →Q G L (ⓑ[p,I]V.T)
) →
(∀n,p,G,L,V,W,T,U. ad a n → ❪G,L❫ ⊢ V![h,a] → ❪G,L❫ ⊢ T![h,a] →
- ❪G,L❫ ⊢ V ⬌*[h,1,0]W → ❪G,L❫ ⊢ T ➡*[n,h] ⓛ[p]W.U →
+ ❪G,L❫ ⊢ V ⬌*[h,1,0]W → ❪G,L❫ ⊢ T ➡*[h,n] ⓛ[p]W.U →
Q G L V → Q G L T → Q G L (ⓐV.T)
) →
(∀G,L,U,T. ❪G,L❫⊢ U![h,a] → ❪G,L❫ ⊢ T![h,a] → ❪G,L❫ ⊢ U ⬌*[h,0,1] T →
(* Sub diamond propery with t-bound rt-transition for terms *****************)
fact cnv_cpm_conf_lpr_atom_atom_aux (h) (G) (L1) (L2) (I):
- ∃∃T. ❪G,L1❫ ⊢ ⓪[I] ➡*[0,h] T & ❪G,L2❫ ⊢ ⓪[I] ➡*[O,h] T.
+ ∃∃T. ❪G,L1❫ ⊢ ⓪[I] ➡*[h,0] T & ❪G,L2❫ ⊢ ⓪[I] ➡*[h,0] T.
/2 width=3 by ex2_intro/ qed-.
fact cnv_cpm_conf_lpr_atom_ess_aux (h) (G) (L1) (L2) (s):
- ∃∃T. ❪G,L1❫ ⊢ ⋆s ➡*[1,h] T & ❪G,L2❫ ⊢ ⋆(⫯[h]s) ➡*[h] T.
+ ∃∃T. ❪G,L1❫ ⊢ ⋆s ➡*[h,1] T & ❪G,L2❫ ⊢ ⋆(⫯[h]s) ➡*[h,0] T.
/3 width=3 by cpm_cpms, ex2_intro/ qed-.
fact cnv_cpm_conf_lpr_atom_delta_aux (h) (a) (G) (L) (i):
(∀G0,L0,T0. ❪G,L,#i❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
❪G,L❫⊢#i![h,a] →
∀K,V. ⇩[i]L ≘ K.ⓓV →
- ∀n,XV. ❪G,K❫ ⊢ V ➡[n,h] XV →
+ ∀n,XV. ❪G,K❫ ⊢ V ➡[h,n] XV →
∀X. ⇧[↑i]XV ≘ X →
- ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G,L1❫ ⊢ #i ➡*[n,h] T & ❪G,L2❫ ⊢ X ➡*[h] T.
+ ∀L1. ❪G,L❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G,L1❫ ⊢ #i ➡*[h,n] T & ❪G,L2❫ ⊢ X ➡*[h,0] T.
#h #a #G #L #i #IH #HT #K #V #HLK #n #XV #HVX #X #HXV #L1 #HL1 #L2 #HL2
lapply (cnv_inv_lref_pair … HT … HLK) -HT #HV
elim (lpr_drops_conf … HLK … HL1) -HL1 // #Y1 #H1 #HLK1
(∀G0,L0,T0. ❪G,L,#i❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
❪G,L❫⊢#i![h,a] →
∀K,W. ⇩[i]L ≘ K.ⓛW →
- ∀n,XW. ❪G,K❫ ⊢ W ➡[n,h] XW →
+ ∀n,XW. ❪G,K❫ ⊢ W ➡[h,n] XW →
∀X. ⇧[↑i]XW ≘ X →
- ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G,L1❫ ⊢ #i ➡*[↑n,h] T & ❪G,L2❫ ⊢ X ➡*[h] T.
+ ∀L1. ❪G,L❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G,L1❫ ⊢ #i ➡*[h,↑n] T & ❪G,L2❫ ⊢ X ➡*[h,0] T.
#h #a #G #L #i #IH #HT #K #W #HLK #n #XW #HWX #X #HXW #L1 #HL1 #L2 #HL2
lapply (cnv_inv_lref_pair … HT … HLK) -HT #HW
elim (lpr_drops_conf … HLK … HL1) -HL1 // #Y1 #H1 #HLK1
(∀G0,L0,T0. ❪G,L,#i❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
❪G,L❫⊢#i![h,a] →
∀K1,V1. ⇩[i]L ≘ K1.ⓑ[I]V1 → ∀K2,V2. ⇩[i]L ≘ K2.ⓑ[I]V2 →
- ∀n1,XV1. ❪G,K1❫ ⊢ V1 ➡[n1,h] XV1 → ∀n2,XV2. ❪G,K2❫ ⊢ V2 ➡[n2,h] XV2 →
+ ∀n1,XV1. ❪G,K1❫ ⊢ V1 ➡[h,n1] XV1 → ∀n2,XV2. ❪G,K2❫ ⊢ V2 ➡[h,n2] XV2 →
∀X1. ⇧[↑i]XV1 ≘ X1 → ∀X2. ⇧[↑i]XV2 ≘ X2 →
- ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G,L1❫ ⊢ X1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ X2 ➡*[n1-n2,h] T.
+ ∀L1. ❪G,L❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G,L1❫ ⊢ X1 ➡*[h,n2-n1] T & ❪G,L2❫ ⊢ X2 ➡*[h,n1-n2] T.
#h #a #I #G #L #i #IH #HT
#K #V #HLK #Y #X #HLY #n1 #XV1 #HVX1 #n2 #XV2 #HVX2 #X1 #HXV1 #X2 #HXV2
#L1 #HL1 #L2 #HL2
fact cnv_cpm_conf_lpr_bind_bind_aux (h) (a) (p) (I) (G) (L) (V) (T):
(∀G0,L0,T0. ❪G,L,ⓑ[p,I]V.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
❪G,L❫ ⊢ ⓑ[p,I]V.T ![h,a] →
- ∀V1. ❪G,L❫ ⊢ V ➡[h] V1 → ∀V2. ❪G,L❫ ⊢ V ➡[h] V2 →
- ∀n1,T1. ❪G,L.ⓑ[I]V❫ ⊢ T ➡[n1,h] T1 → ∀n2,T2. ❪G,L.ⓑ[I]V❫ ⊢ T ➡[n2,h] T2 →
- ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G,L1❫ ⊢ ⓑ[p,I]V1.T1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ ⓑ[p,I]V2.T2 ➡*[n1-n2,h] T.
+ ∀V1. ❪G,L❫ ⊢ V ➡[h,0] V1 → ∀V2. ❪G,L❫ ⊢ V ➡[h,0] V2 →
+ ∀n1,T1. ❪G,L.ⓑ[I]V❫ ⊢ T ➡[h,n1] T1 → ∀n2,T2. ❪G,L.ⓑ[I]V❫ ⊢ T ➡[h,n2] T2 →
+ ∀L1. ❪G,L❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G,L1❫ ⊢ ⓑ[p,I]V1.T1 ➡*[h,n2-n1] T & ❪G,L2❫ ⊢ ⓑ[p,I]V2.T2 ➡*[h,n1-n2] T.
#h #a #p #I #G0 #L0 #V0 #T0 #IH #H0
#V1 #HV01 #V2 #HV02 #n1 #T1 #HT01 #n2 #T2 #HT02
#L1 #HL01 #L2 #HL02
fact cnv_cpm_conf_lpr_bind_zeta_aux (h) (a) (G) (L) (V) (T):
(∀G0,L0,T0. ❪G,L,+ⓓV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
❪G,L❫ ⊢ +ⓓV.T ![h,a] →
- ∀V1. ❪G,L❫ ⊢V ➡[h] V1 → ∀n1,T1. ❪G,L.ⓓV❫ ⊢ T ➡[n1,h] T1 →
- ∀T2. ⇧[1]T2 ≘ T → ∀n2,XT2. ❪G,L❫ ⊢ T2 ➡[n2,h] XT2 →
- ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G,L1❫ ⊢ +ⓓV1.T1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ XT2 ➡*[n1-n2,h] T.
+ ∀V1. ❪G,L❫ ⊢V ➡[h,0] V1 → ∀n1,T1. ❪G,L.ⓓV❫ ⊢ T ➡[h,n1] T1 →
+ ∀T2. ⇧[1]T2 ≘ T → ∀n2,XT2. ❪G,L❫ ⊢ T2 ➡[h,n2] XT2 →
+ ∀L1. ❪G,L❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G,L1❫ ⊢ +ⓓV1.T1 ➡*[h,n2-n1] T & ❪G,L2❫ ⊢ XT2 ➡*[h,n1-n2] T.
#h #a #G0 #L0 #V0 #T0 #IH #H0
#V1 #HV01 #n1 #T1 #HT01 #T2 #HT20 #n2 #XT2 #HXT2
#L1 #HL01 #L2 #HL02
(∀G0,L0,T0. ❪G,L,+ⓓV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
❪G,L❫ ⊢ +ⓓV.T ![h,a] →
∀T1. ⇧[1]T1 ≘ T → ∀T2. ⇧[1]T2 ≘ T →
- ∀n1,XT1. ❪G,L❫ ⊢ T1 ➡[n1,h] XT1 → ∀n2,XT2. ❪G,L❫ ⊢ T2 ➡[n2,h] XT2 →
- ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G,L1❫ ⊢ XT1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ XT2 ➡*[n1-n2,h] T.
+ ∀n1,XT1. ❪G,L❫ ⊢ T1 ➡[h,n1] XT1 → ∀n2,XT2. ❪G,L❫ ⊢ T2 ➡[h,n2] XT2 →
+ ∀L1. ❪G,L❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G,L1❫ ⊢ XT1 ➡*[h,n2-n1] T & ❪G,L2❫ ⊢ XT2 ➡*[h,n1-n2] T.
#h #a #G0 #L0 #V0 #T0 #IH #H0
#T1 #HT10 #T2 #HT20 #n1 #XT1 #HXT1 #n2 #XT2 #HXT2
#L1 #HL01 #L2 #HL02
fact cnv_cpm_conf_lpr_appl_appl_aux (h) (a) (G) (L) (V) (T):
(∀G0,L0,T0. ❪G,L,ⓐV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
❪G,L❫ ⊢ ⓐV.T ![h,a] →
- ∀V1. ❪G,L❫ ⊢ V ➡[h] V1 → ∀V2. ❪G,L❫ ⊢ V ➡[h] V2 →
- ∀n1,T1. ❪G,L❫ ⊢ T ➡[n1,h] T1 → ∀n2,T2. ❪G,L❫ ⊢ T ➡[n2,h] T2 →
- ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G,L1❫ ⊢ ⓐV1.T1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ ⓐV2.T2 ➡*[n1-n2,h] T.
+ ∀V1. ❪G,L❫ ⊢ V ➡[h,0] V1 → ∀V2. ❪G,L❫ ⊢ V ➡[h,0] V2 →
+ ∀n1,T1. ❪G,L❫ ⊢ T ➡[h,n1] T1 → ∀n2,T2. ❪G,L❫ ⊢ T ➡[h,n2] T2 →
+ ∀L1. ❪G,L❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G,L1❫ ⊢ ⓐV1.T1 ➡*[h,n2-n1] T & ❪G,L2❫ ⊢ ⓐV2.T2 ➡*[h,n1-n2] T.
#h #a #G0 #L0 #V0 #T0 #IH #H0
#V1 #HV01 #V2 #HV02 #n1 #T1 #HT01 #n2 #T2 #HT02
#L1 #HL01 #L2 #HL02
fact cnv_cpm_conf_lpr_appl_beta_aux (h) (a) (p) (G) (L) (V) (W) (T):
(∀G0,L0,T0. ❪G,L,ⓐV.ⓛ[p]W.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
❪G,L❫ ⊢ ⓐV.ⓛ[p]W.T ![h,a] →
- ∀V1. ❪G,L❫ ⊢ V ➡[h] V1 → ∀V2. ❪G,L❫ ⊢ V ➡[h] V2 →
- ∀W2. ❪G,L❫ ⊢ W ➡[h] W2 →
- ∀n1,T1. ❪G,L❫ ⊢ ⓛ[p]W.T ➡[n1,h] T1 → ∀n2,T2. ❪G,L.ⓛW❫ ⊢ T ➡[n2,h] T2 →
- ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G,L1❫ ⊢ ⓐV1.T1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ ⓓ[p]ⓝW2.V2.T2 ➡*[n1-n2,h] T.
+ ∀V1. ❪G,L❫ ⊢ V ➡[h,0] V1 → ∀V2. ❪G,L❫ ⊢ V ➡[h,0] V2 →
+ ∀W2. ❪G,L❫ ⊢ W ➡[h,0] W2 →
+ ∀n1,T1. ❪G,L❫ ⊢ ⓛ[p]W.T ➡[h,n1] T1 → ∀n2,T2. ❪G,L.ⓛW❫ ⊢ T ➡[h,n2] T2 →
+ ∀L1. ❪G,L❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G,L1❫ ⊢ ⓐV1.T1 ➡*[h,n2-n1] T & ❪G,L2❫ ⊢ ⓓ[p]ⓝW2.V2.T2 ➡*[h,n1-n2] T.
#h #a #p #G0 #L0 #V0 #W0 #T0 #IH #H0
#V1 #HV01 #V2 #HV02 #W2 #HW02 #n1 #X #HX #n2 #T2 #HT02
#L1 #HL01 #L2 #HL02
fact cnv_cpm_conf_lpr_appl_theta_aux (h) (a) (p) (G) (L) (V) (W) (T):
(∀G0,L0,T0. ❪G,L,ⓐV.ⓓ[p]W.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
❪G,L❫ ⊢ ⓐV.ⓓ[p]W.T ![h,a] →
- ∀V1. ❪G,L❫ ⊢ V ➡[h] V1 → ∀V2. ❪G,L❫ ⊢ V ➡[h] V2 →
- ∀W2. ❪G,L❫ ⊢ W ➡[h] W2 →
- ∀n1,T1. ❪G,L❫ ⊢ ⓓ[p]W.T ➡[n1,h] T1 → ∀n2,T2. ❪G,L.ⓓW❫ ⊢ T ➡[n2,h] T2 →
+ ∀V1. ❪G,L❫ ⊢ V ➡[h,0] V1 → ∀V2. ❪G,L❫ ⊢ V ➡[h,0] V2 →
+ ∀W2. ❪G,L❫ ⊢ W ➡[h,0] W2 →
+ ∀n1,T1. ❪G,L❫ ⊢ ⓓ[p]W.T ➡[h,n1] T1 → ∀n2,T2. ❪G,L.ⓓW❫ ⊢ T ➡[h,n2] T2 →
∀U2. ⇧[1]V2 ≘ U2 →
- ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G,L1❫ ⊢ ⓐV1.T1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ ⓓ[p]W2.ⓐU2.T2 ➡*[n1-n2,h] T.
+ ∀L1. ❪G,L❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G,L1❫ ⊢ ⓐV1.T1 ➡*[h,n2-n1] T & ❪G,L2❫ ⊢ ⓓ[p]W2.ⓐU2.T2 ➡*[h,n1-n2] T.
#h #a #p #G0 #L0 #V0 #W0 #T0 #IH #H0
#V1 #HV01 #V2 #HV02 #W2 #HW02 #n1 #X #HX #n2 #T2 #HT02 #U2 #HVU2
#L1 #HL01 #L2 #HL02
fact cnv_cpm_conf_lpr_beta_beta_aux (h) (a) (p) (G) (L) (V) (W) (T):
(∀G0,L0,T0. ❪G,L,ⓐV.ⓛ[p]W.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
❪G,L❫ ⊢ ⓐV.ⓛ[p]W.T ![h,a] →
- ∀V1. ❪G,L❫ ⊢ V ➡[h] V1 → ∀V2. ❪G,L❫ ⊢ V ➡[h] V2 →
- ∀W1. ❪G,L❫ ⊢ W ➡[h] W1 → ∀W2. ❪G,L❫ ⊢ W ➡[h] W2 →
- ∀n1,T1. ❪G,L.ⓛW❫ ⊢ T ➡[n1,h] T1 → ∀n2,T2. ❪G,L.ⓛW❫ ⊢ T ➡[n2,h] T2 →
- ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G,L1❫ ⊢ ⓓ[p]ⓝW1.V1.T1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ ⓓ[p]ⓝW2.V2.T2 ➡*[n1-n2,h] T.
+ ∀V1. ❪G,L❫ ⊢ V ➡[h,0] V1 → ∀V2. ❪G,L❫ ⊢ V ➡[h,0] V2 →
+ ∀W1. ❪G,L❫ ⊢ W ➡[h,0] W1 → ∀W2. ❪G,L❫ ⊢ W ➡[h,0] W2 →
+ ∀n1,T1. ❪G,L.ⓛW❫ ⊢ T ➡[h,n1] T1 → ∀n2,T2. ❪G,L.ⓛW❫ ⊢ T ➡[h,n2] T2 →
+ ∀L1. ❪G,L❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G,L1❫ ⊢ ⓓ[p]ⓝW1.V1.T1 ➡*[h,n2-n1] T & ❪G,L2❫ ⊢ ⓓ[p]ⓝW2.V2.T2 ➡*[h,n1-n2] T.
#h #a #p #G0 #L0 #V0 #W0 #T0 #IH #H0
#V1 #HV01 #V2 #HV02 #W1 #HW01 #W2 #HW02 #n1 #T1 #HT01 #n2 #T2 #HT02
#L1 #HL01 #L2 #HL02
fact cnv_cpm_conf_lpr_theta_theta_aux (h) (a) (p) (G) (L) (V) (W) (T):
(∀G0,L0,T0. ❪G,L,ⓐV.ⓓ[p]W.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
❪G,L❫ ⊢ ⓐV.ⓓ[p]W.T ![h,a] →
- ∀V1. ❪G,L❫ ⊢ V ➡[h] V1 → ∀V2. ❪G,L❫ ⊢ V ➡[h] V2 →
- ∀W1. ❪G,L❫ ⊢ W ➡[h] W1 → ∀W2. ❪G,L❫ ⊢ W ➡[h] W2 →
- ∀n1,T1. ❪G,L.ⓓW❫ ⊢ T ➡[n1,h] T1 → ∀n2,T2. ❪G,L.ⓓW❫ ⊢ T ➡[n2,h] T2 →
+ ∀V1. ❪G,L❫ ⊢ V ➡[h,0] V1 → ∀V2. ❪G,L❫ ⊢ V ➡[h,0] V2 →
+ ∀W1. ❪G,L❫ ⊢ W ➡[h,0] W1 → ∀W2. ❪G,L❫ ⊢ W ➡[h,0] W2 →
+ ∀n1,T1. ❪G,L.ⓓW❫ ⊢ T ➡[h,n1] T1 → ∀n2,T2. ❪G,L.ⓓW❫ ⊢ T ➡[h,n2] T2 →
∀U1. ⇧[1]V1 ≘ U1 → ∀U2. ⇧[1]V2 ≘ U2 →
- ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G,L1❫ ⊢ ⓓ[p]W1.ⓐU1.T1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ ⓓ[p]W2.ⓐU2.T2 ➡*[n1-n2,h] T.
+ ∀L1. ❪G,L❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G,L1❫ ⊢ ⓓ[p]W1.ⓐU1.T1 ➡*[h,n2-n1] T & ❪G,L2❫ ⊢ ⓓ[p]W2.ⓐU2.T2 ➡*[h,n1-n2] T.
#h #a #p #G0 #L0 #V0 #W0 #T0 #IH #H0
#V1 #HV01 #V2 #HV02 #W1 #HW01 #W2 #HW02 #n1 #T1 #HT01 #n2 #T2 #HT02 #U1 #HVU1 #U2 #HVU2
#L1 #HL01 #L2 #HL02
fact cnv_cpm_conf_lpr_cast_cast_aux (h) (a) (G) (L) (V) (T):
(∀G0,L0,T0. ❪G,L,ⓝV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
❪G,L❫ ⊢ ⓝV.T ![h,a] →
- ∀n1,V1. ❪G,L❫ ⊢ V ➡[n1,h] V1 → ∀n2,V2. ❪G,L❫ ⊢ V ➡[n2,h] V2 →
- ∀T1. ❪G,L❫ ⊢ T ➡[n1,h] T1 → ∀T2. ❪G,L❫ ⊢ T ➡[n2,h] T2 →
- ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G,L1❫ ⊢ ⓝV1.T1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ ⓝV2.T2 ➡*[n1-n2,h] T.
+ ∀n1,V1. ❪G,L❫ ⊢ V ➡[h,n1] V1 → ∀n2,V2. ❪G,L❫ ⊢ V ➡[h,n2] V2 →
+ ∀T1. ❪G,L❫ ⊢ T ➡[h,n1] T1 → ∀T2. ❪G,L❫ ⊢ T ➡[h,n2] T2 →
+ ∀L1. ❪G,L❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G,L1❫ ⊢ ⓝV1.T1 ➡*[h,n2-n1] T & ❪G,L2❫ ⊢ ⓝV2.T2 ➡*[h,n1-n2] T.
#h #a #G0 #L0 #V0 #T0 #IH #H0
#n1 #V1 #HV01 #n2 #V2 #HV02 #T1 #HT01 #T2 #HT02
#L1 #HL01 #L2 #HL02
fact cnv_cpm_conf_lpr_cast_epsilon_aux (h) (a) (G) (L) (V) (T):
(∀G0,L0,T0. ❪G,L,ⓝV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
❪G,L❫ ⊢ ⓝV.T ![h,a] →
- ∀n1,V1. ❪G,L❫ ⊢ V ➡[n1,h] V1 →
- ∀T1. ❪G,L❫ ⊢ T ➡[n1,h] T1 → ∀n2,T2. ❪G,L❫ ⊢ T ➡[n2,h] T2 →
- ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G,L1❫ ⊢ ⓝV1.T1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ T2 ➡*[n1-n2,h] T.
+ ∀n1,V1. ❪G,L❫ ⊢ V ➡[h,n1] V1 →
+ ∀T1. ❪G,L❫ ⊢ T ➡[h,n1] T1 → ∀n2,T2. ❪G,L❫ ⊢ T ➡[h,n2] T2 →
+ ∀L1. ❪G,L❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G,L1❫ ⊢ ⓝV1.T1 ➡*[h,n2-n1] T & ❪G,L2❫ ⊢ T2 ➡*[h,n1-n2] T.
#h #a #G0 #L0 #V0 #T0 #IH #H0
#n1 #V1 #HV01 #T1 #HT01 #n2 #T2 #HT02
#L1 #HL01 #L2 #HL02
(∀G0,L0,T0. ❪G,L,ⓝV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) →
(∀G0,L0,T0. ❪G,L,ⓝV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
❪G,L❫ ⊢ ⓝV.T ![h,a] →
- ∀n1,V1. ❪G,L❫ ⊢ V ➡[n1,h] V1 → ∀n2,V2. ❪G,L❫ ⊢ V ➡[n2,h] V2 →
- ∀T1. ❪G,L❫ ⊢ T ➡[n1,h] T1 →
- ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G,L1❫ ⊢ ⓝV1.T1 ➡*[↑n2-n1,h] T & ❪G,L2❫ ⊢ V2 ➡*[n1-↑n2,h] T.
+ ∀n1,V1. ❪G,L❫ ⊢ V ➡[h,n1] V1 → ∀n2,V2. ❪G,L❫ ⊢ V ➡[h,n2] V2 →
+ ∀T1. ❪G,L❫ ⊢ T ➡[h,n1] T1 →
+ ∀L1. ❪G,L❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G,L1❫ ⊢ ⓝV1.T1 ➡*[h,↑n2-n1] T & ❪G,L2❫ ⊢ V2 ➡*[h,n1-↑n2] T.
#h #a #G0 #L0 #V0 #T0 #IH2 #IH1 #H0
#n1 #V1 #HV01 #n2 #V2 #HV02 #T1 #HT01
#L1 #HL01 #L2 #HL02 -HV01
fact cnv_cpm_conf_lpr_epsilon_epsilon_aux (h) (a) (G) (L) (V) (T):
(∀G0,L0,T0. ❪G,L,ⓝV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
❪G,L❫ ⊢ ⓝV.T ![h,a] →
- ∀n1,T1. ❪G,L❫ ⊢ T ➡[n1,h] T1 → ∀n2,T2. ❪G,L❫ ⊢ T ➡[n2,h] T2 →
- ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G,L1❫ ⊢ T1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ T2 ➡*[n1-n2,h] T.
+ ∀n1,T1. ❪G,L❫ ⊢ T ➡[h,n1] T1 → ∀n2,T2. ❪G,L❫ ⊢ T ➡[h,n2] T2 →
+ ∀L1. ❪G,L❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G,L1❫ ⊢ T1 ➡*[h,n2-n1] T & ❪G,L2❫ ⊢ T2 ➡*[h,n1-n2] T.
#h #a #G0 #L0 #V0 #T0 #IH #H0
#n1 #T1 #HT01 #n2 #T2 #HT02
#L1 #HL01 #L2 #HL02
(∀G0,L0,T0. ❪G,L,ⓝV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) →
(∀G0,L0,T0. ❪G,L,ⓝV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
❪G,L❫ ⊢ ⓝV.T ![h,a] →
- ∀n1,T1. ❪G,L❫ ⊢ T ➡[n1,h] T1 → ∀n2,V2. ❪G,L❫ ⊢ V ➡[n2,h] V2 →
- ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G,L1❫ ⊢ T1 ➡*[↑n2-n1,h] T & ❪G,L2❫ ⊢ V2 ➡*[n1-↑n2,h] T.
+ ∀n1,T1. ❪G,L❫ ⊢ T ➡[h,n1] T1 → ∀n2,V2. ❪G,L❫ ⊢ V ➡[h,n2] V2 →
+ ∀L1. ❪G,L❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G,L1❫ ⊢ T1 ➡*[h,↑n2-n1] T & ❪G,L2❫ ⊢ V2 ➡*[h,n1-↑n2] T.
#h #a #G0 #L0 #V0 #T0 #IH2 #IH1 #H0
#n1 #T1 #HT01 #n2 #V2 #HV02
#L1 #HL01 #L2 #HL02
fact cnv_cpm_conf_lpr_ee_ee_aux (h) (a) (G) (L) (V) (T):
(∀G0,L0,T0. ❪G,L,ⓝV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
❪G,L❫ ⊢ ⓝV.T ![h,a] →
- ∀n1,V1. ❪G,L❫ ⊢ V ➡[n1,h] V1 → ∀n2,V2. ❪G,L❫ ⊢ V ➡[n2,h] V2 →
- ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G,L1❫ ⊢ V1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ V2 ➡*[n1-n2,h] T.
+ ∀n1,V1. ❪G,L❫ ⊢ V ➡[h,n1] V1 → ∀n2,V2. ❪G,L❫ ⊢ V ➡[h,n2] V2 →
+ ∀L1. ❪G,L❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G,L1❫ ⊢ V1 ➡*[h,n2-n1] T & ❪G,L2❫ ⊢ V2 ➡*[h,n1-n2] T.
#h #a #G0 #L0 #V0 #T0 #IH #H0
#n1 #V1 #HV01 #n2 #V2 #HV02
#L1 #HL01 #L2 #HL02
(* Inversion lemmas with restricted rt-transition for terms *****************)
lemma cnv_cpr_teqx_fwd_refl (h) (a) (G) (L):
- ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[h] T2 → T1 ≛ T2 → ❪G,L❫ ⊢ T1 ![h,a] → T1 = T2.
+ ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[h,0] T2 → T1 ≛ T2 → ❪G,L❫ ⊢ T1 ![h,a] → T1 = T2.
#h #a #G #L #T1 #T2 #H @(cpr_ind … H) -G -L -T1 -T2
[ //
| #G #K #V1 #V2 #X2 #_ #_ #_ #H1 #_ -a -G -K -V1 -V2
lemma cpm_teqx_inv_bind_sn (h) (a) (n) (p) (I) (G) (L):
∀V,T1. ❪G,L❫ ⊢ ⓑ[p,I]V.T1 ![h,a] →
- ∀X. ❪G,L❫ ⊢ ⓑ[p,I]V.T1 ➡[n,h] X → ⓑ[p,I]V.T1 ≛ X →
- ∃∃T2. ❪G,L❫ ⊢ V ![h,a] & ❪G,L.ⓑ[I]V❫ ⊢ T1 ![h,a] & ❪G,L.ⓑ[I]V❫ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓑ[p,I]V.T2.
+ ∀X. ❪G,L❫ ⊢ ⓑ[p,I]V.T1 ➡[h,n] X → ⓑ[p,I]V.T1 ≛ X →
+ ∃∃T2. ❪G,L❫ ⊢ V ![h,a] & ❪G,L.ⓑ[I]V❫ ⊢ T1 ![h,a] & ❪G,L.ⓑ[I]V❫ ⊢ T1 ➡[h,n] T2 & T1 ≛ T2 & X = ⓑ[p,I]V.T2.
#h #a #n #p #I #G #L #V #T1 #H0 #X #H1 #H2
elim (cpm_inv_bind1 … H1) -H1 *
[ #XV #T2 #HXV #HT12 #H destruct
lemma cpm_teqx_inv_appl_sn (h) (a) (n) (G) (L):
∀V,T1. ❪G,L❫ ⊢ ⓐV.T1 ![h,a] →
- ∀X. ❪G,L❫ ⊢ ⓐV.T1 ➡[n,h] X → ⓐV.T1 ≛ X →
- ∃∃m,q,W,U1,T2. ad a m & ❪G,L❫ ⊢ V ![h,a] & ❪G,L❫ ⊢ V ➡*[1,h] W & ❪G,L❫ ⊢ T1 ➡*[m,h] ⓛ[q]W.U1
- & ❪G,L❫⊢ T1 ![h,a] & ❪G,L❫ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓐV.T2.
+ ∀X. ❪G,L❫ ⊢ ⓐV.T1 ➡[h,n] X → ⓐV.T1 ≛ X →
+ ∃∃m,q,W,U1,T2. ad a m & ❪G,L❫ ⊢ V ![h,a] & ❪G,L❫ ⊢ V ➡*[h,1] W & ❪G,L❫ ⊢ T1 ➡*[h,m] ⓛ[q]W.U1
+ & ❪G,L❫⊢ T1 ![h,a] & ❪G,L❫ ⊢ T1 ➡[h,n] T2 & T1 ≛ T2 & X = ⓐV.T2.
#h #a #n #G #L #V #T1 #H0 #X #H1 #H2
elim (cpm_inv_appl1 … H1) -H1 *
[ #XV #T2 #HXV #HT12 #H destruct
lemma cpm_teqx_inv_cast_sn (h) (a) (n) (G) (L):
∀U1,T1. ❪G,L❫ ⊢ ⓝU1.T1 ![h,a] →
- ∀X. ❪G,L❫ ⊢ ⓝU1.T1 ➡[n,h] X → ⓝU1.T1 ≛ X →
- ∃∃U0,U2,T2. ❪G,L❫ ⊢ U1 ➡*[h] U0 & ❪G,L❫ ⊢ T1 ➡*[1,h] U0
- & ❪G,L❫ ⊢ U1 ![h,a] & ❪G,L❫ ⊢ U1 ➡[n,h] U2 & U1 ≛ U2
- & ❪G,L❫ ⊢ T1 ![h,a] & ❪G,L❫ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓝU2.T2.
+ ∀X. ❪G,L❫ ⊢ ⓝU1.T1 ➡[h,n] X → ⓝU1.T1 ≛ X →
+ ∃∃U0,U2,T2. ❪G,L❫ ⊢ U1 ➡*[h,0] U0 & ❪G,L❫ ⊢ T1 ➡*[h,1] U0
+ & ❪G,L❫ ⊢ U1 ![h,a] & ❪G,L❫ ⊢ U1 ➡[h,n] U2 & U1 ≛ U2
+ & ❪G,L❫ ⊢ T1 ![h,a] & ❪G,L❫ ⊢ T1 ➡[h,n] T2 & T1 ≛ T2 & X = ⓝU2.T2.
#h #a #n #G #L #U1 #T1 #H0 #X #H1 #H2
elim (cpm_inv_cast1 … H1) -H1 [ * || * ]
[ #U2 #T2 #HU12 #HT12 #H destruct
lemma cpm_teqx_inv_bind_dx (h) (a) (n) (p) (I) (G) (L):
∀X. ❪G,L❫ ⊢ X ![h,a] →
- ∀V,T2. ❪G,L❫ ⊢ X ➡[n,h] ⓑ[p,I]V.T2 → X ≛ ⓑ[p,I]V.T2 →
- ∃∃T1. ❪G,L❫ ⊢ V ![h,a] & ❪G,L.ⓑ[I]V❫ ⊢ T1 ![h,a] & ❪G,L.ⓑ[I]V❫ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓑ[p,I]V.T1.
+ ∀V,T2. ❪G,L❫ ⊢ X ➡[h,n] ⓑ[p,I]V.T2 → X ≛ ⓑ[p,I]V.T2 →
+ ∃∃T1. ❪G,L❫ ⊢ V ![h,a] & ❪G,L.ⓑ[I]V❫ ⊢ T1 ![h,a] & ❪G,L.ⓑ[I]V❫ ⊢ T1 ➡[h,n] T2 & T1 ≛ T2 & X = ⓑ[p,I]V.T1.
#h #a #n #p #I #G #L #X #H0 #V #T2 #H1 #H2
elim (teqx_inv_pair2 … H2) #V0 #T1 #_ #_ #H destruct
elim (cpm_teqx_inv_bind_sn … H0 … H1 H2) -H0 -H1 -H2 #T0 #HV #HT1 #H1T12 #H2T12 #H destruct
(∀I,L. n = 0 → Q L (⓪[I]) (⓪[I])) →
(∀L,s. n = 1 → Q L (⋆s) (⋆(⫯[h]s))) →
(∀p,I,L,V,T1. ❪G,L❫⊢ V![h,a] → ❪G,L.ⓑ[I]V❫⊢T1![h,a] →
- ∀T2. ❪G,L.ⓑ[I]V❫ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 →
+ ∀T2. ❪G,L.ⓑ[I]V❫ ⊢ T1 ➡[h,n] T2 → T1 ≛ T2 →
Q (L.ⓑ[I]V) T1 T2 → Q L (ⓑ[p,I]V.T1) (ⓑ[p,I]V.T2)
) →
(∀m. ad a m →
- ∀L,V. ❪G,L❫ ⊢ V ![h,a] → ∀W. ❪G,L❫ ⊢ V ➡*[1,h] W →
- ∀p,T1,U1. ❪G,L❫ ⊢ T1 ➡*[m,h] ⓛ[p]W.U1 → ❪G,L❫⊢ T1 ![h,a] →
- ∀T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 →
+ ∀L,V. ❪G,L❫ ⊢ V ![h,a] → ∀W. ❪G,L❫ ⊢ V ➡*[h,1] W →
+ ∀p,T1,U1. ❪G,L❫ ⊢ T1 ➡*[h,m] ⓛ[p]W.U1 → ❪G,L❫⊢ T1 ![h,a] →
+ ∀T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → T1 ≛ T2 →
Q L T1 T2 → Q L (ⓐV.T1) (ⓐV.T2)
) →
- (∀L,U0,U1,T1. ❪G,L❫ ⊢ U1 ➡*[h] U0 → ❪G,L❫ ⊢ T1 ➡*[1,h] U0 →
- ∀U2. ❪G,L❫ ⊢ U1 ![h,a] → ❪G,L❫ ⊢ U1 ➡[n,h] U2 → U1 ≛ U2 →
- ∀T2. ❪G,L❫ ⊢ T1 ![h,a] → ❪G,L❫ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 →
+ (∀L,U0,U1,T1. ❪G,L❫ ⊢ U1 ➡*[h,0] U0 → ❪G,L❫ ⊢ T1 ➡*[h,1] U0 →
+ ∀U2. ❪G,L❫ ⊢ U1 ![h,a] → ❪G,L❫ ⊢ U1 ➡[h,n] U2 → U1 ≛ U2 →
+ ∀T2. ❪G,L❫ ⊢ T1 ![h,a] → ❪G,L❫ ⊢ T1 ➡[h,n] T2 → T1 ≛ T2 →
Q L U1 U2 → Q L T1 T2 → Q L (ⓝU1.T1) (ⓝU2.T2)
) →
∀L,T1. ❪G,L❫ ⊢ T1 ![h,a] →
- ∀T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → Q L T1 T2.
+ ∀T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → T1 ≛ T2 → Q L T1 T2.
#h #a #n #G #Q #IH1 #IH2 #IH3 #IH4 #IH5 #L #T1
@(insert_eq_0 … G) #F
@(fqup_wf_ind_eq (Ⓣ) … F L T1) -L -T1 -F
lemma cpm_teqx_free (h) (a) (n) (G) (L):
∀T1. ❪G,L❫ ⊢ T1 ![h,a] →
- ∀T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 →
- ∀F,K. ❪F,K❫ ⊢ T1 ➡[n,h] T2.
+ ∀T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → T1 ≛ T2 →
+ ∀F,K. ❪F,K❫ ⊢ T1 ➡[h,n] T2.
#h #a #n #G #L #T1 #H0 #T2 #H1 #H2
@(cpm_teqx_ind … H0 … H1 H2) -L -T1 -T2
[ #I #L #H #F #K destruct //
lemma cpm_teqx_inv_bind_sn_void (h) (a) (n) (p) (I) (G) (L):
∀V,T1. ❪G,L❫ ⊢ ⓑ[p,I]V.T1 ![h,a] →
- ∀X. ❪G,L❫ ⊢ ⓑ[p,I]V.T1 ➡[n,h] X → ⓑ[p,I]V.T1 ≛ X →
- ∃∃T2. ❪G,L❫ ⊢ V ![h,a] & ❪G,L.ⓑ[I]V❫ ⊢ T1 ![h,a] & ❪G,L.ⓧ❫ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓑ[p,I]V.T2.
+ ∀X. ❪G,L❫ ⊢ ⓑ[p,I]V.T1 ➡[h,n] X → ⓑ[p,I]V.T1 ≛ X →
+ ∃∃T2. ❪G,L❫ ⊢ V ![h,a] & ❪G,L.ⓑ[I]V❫ ⊢ T1 ![h,a] & ❪G,L.ⓧ❫ ⊢ T1 ➡[h,n] T2 & T1 ≛ T2 & X = ⓑ[p,I]V.T2.
#h #a #n #p #I #G #L #V #T1 #H0 #X #H1 #H2
elim (cpm_teqx_inv_bind_sn … H0 … H1 H2) -H0 -H1 -H2 #T2 #HV #HT1 #H1T12 #H2T12 #H
/3 width=5 by ex5_intro, cpm_teqx_free/
definition IH_cnv_cpm_teqx_conf_lpr (h) (a): relation3 genv lenv term ≝
λG,L0,T0. ❪G,L0❫ ⊢ T0 ![h,a] →
- ∀n1,T1. ❪G,L0❫ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 →
- ∀n2,T2. ❪G,L0❫ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 →
- ∀L1. ❪G,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G,L1❫ ⊢ T1 ➡[n2-n1,h] T & T1 ≛ T & ❪G,L2❫ ⊢ T2 ➡[n1-n2,h] T & T2 ≛ T.
+ ∀n1,T1. ❪G,L0❫ ⊢ T0 ➡[h,n1] T1 → T0 ≛ T1 →
+ ∀n2,T2. ❪G,L0❫ ⊢ T0 ➡[h,n2] T2 → T0 ≛ T2 →
+ ∀L1. ❪G,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G,L1❫ ⊢ T1 ➡[h,n2-n1] T & T1 ≛ T & ❪G,L2❫ ⊢ T2 ➡[h,n1-n2] T & T2 ≛ T.
(* Diamond propery with restricted rt-transition for terms ******************)
fact cnv_cpm_teqx_conf_lpr_atom_atom_aux (h) (G0) (L1) (L2) (I):
- ∃∃T. ❪G0,L1❫ ⊢ ⓪[I] ➡[h] T & ⓪[I] ≛ T & ❪G0,L2❫ ⊢ ⓪[I] ➡[h] T & ⓪[I] ≛ T.
+ ∃∃T. ❪G0,L1❫ ⊢ ⓪[I] ➡[h,0] T & ⓪[I] ≛ T & ❪G0,L2❫ ⊢ ⓪[I] ➡[h,0] T & ⓪[I] ≛ T.
#h #G0 #L1 #L2 #I
/2 width=5 by ex4_intro/
qed-.
fact cnv_cpm_teqx_conf_lpr_atom_ess_aux (h) (G0) (L1) (L2) (s):
- ∃∃T. ❪G0,L1❫ ⊢ ⋆s ➡[1,h] T & ⋆s ≛ T & ❪G0,L2❫ ⊢ ⋆(⫯[h]s) ➡[h] T & ⋆(⫯[h]s) ≛ T.
+ ∃∃T. ❪G0,L1❫ ⊢ ⋆s ➡[h,1] T & ⋆s ≛ T & ❪G0,L2❫ ⊢ ⋆(⫯[h]s) ➡[h,0] T & ⋆(⫯[h]s) ≛ T.
#h #G0 #L1 #L2 #s
/3 width=5 by teqx_sort, ex4_intro/
qed-.
fact cnv_cpm_teqx_conf_lpr_bind_bind_aux (h) (a) (p) (I) (G0) (L0) (V0) (T0):
(∀G,L,T. ❪G0,L0,ⓑ[p,I]V0.T0❫ ⬂+ ❪G,L,T❫ → IH_cnv_cpm_teqx_conf_lpr h a G L T) →
❪G0,L0❫ ⊢ ⓑ[p,I]V0.T0 ![h,a] →
- ∀n1,T1. ❪G0,L0.ⓑ[I]V0❫ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 →
- ∀n2,T2. ❪G0,L0.ⓑ[I]V0❫ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 →
- ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G0,L1❫ ⊢ ⓑ[p,I]V0.T1 ➡[n2-n1,h] T & ⓑ[p,I]V0.T1 ≛ T & ❪G0,L2❫ ⊢ ⓑ[p,I]V0.T2 ➡[n1-n2,h] T & ⓑ[p,I]V0.T2 ≛ T.
+ ∀n1,T1. ❪G0,L0.ⓑ[I]V0❫ ⊢ T0 ➡[h,n1] T1 → T0 ≛ T1 →
+ ∀n2,T2. ❪G0,L0.ⓑ[I]V0❫ ⊢ T0 ➡[h,n2] T2 → T0 ≛ T2 →
+ ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G0,L1❫ ⊢ ⓑ[p,I]V0.T1 ➡[h,n2-n1] T & ⓑ[p,I]V0.T1 ≛ T & ❪G0,L2❫ ⊢ ⓑ[p,I]V0.T2 ➡[h,n1-n2] T & ⓑ[p,I]V0.T2 ≛ T.
#h #a #p #I #G0 #L0 #V0 #T0 #IH #H0
#n1 #T1 #H1T01 #H2T01 #n2 #T2 #H1T02 #H2T02
#L1 #HL01 #L2 #HL02
fact cnv_cpm_teqx_conf_lpr_appl_appl_aux (h) (a) (G0) (L0) (V0) (T0):
(∀G,L,T. ❪G0,L0,ⓐV0.T0❫ ⬂+ ❪G,L,T❫ → IH_cnv_cpm_teqx_conf_lpr h a G L T) →
❪G0,L0❫ ⊢ ⓐV0.T0 ![h,a] →
- ∀n1,T1. ❪G0,L0❫ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 →
- ∀n2,T2. ❪G0,L0❫ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 →
- ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G0,L1❫ ⊢ ⓐV0.T1 ➡[n2-n1,h] T & ⓐV0.T1 ≛ T & ❪G0,L2❫ ⊢ ⓐV0.T2 ➡[n1-n2,h] T & ⓐV0.T2 ≛ T.
+ ∀n1,T1. ❪G0,L0❫ ⊢ T0 ➡[h,n1] T1 → T0 ≛ T1 →
+ ∀n2,T2. ❪G0,L0❫ ⊢ T0 ➡[h,n2] T2 → T0 ≛ T2 →
+ ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G0,L1❫ ⊢ ⓐV0.T1 ➡[h,n2-n1] T & ⓐV0.T1 ≛ T & ❪G0,L2❫ ⊢ ⓐV0.T2 ➡[h,n1-n2] T & ⓐV0.T2 ≛ T.
#h #a #G0 #L0 #V0 #T0 #IH #H0
#n1 #T1 #H1T01 #H2T01 #n2 #T2 #H1T02 #H2T02
#L1 #HL01 #L2 #HL02
fact cnv_cpm_teqx_conf_lpr_cast_cast_aux (h) (a) (G0) (L0) (V0) (T0):
(∀G,L,T. ❪G0,L0,ⓝV0.T0❫ ⬂+ ❪G,L,T❫ → IH_cnv_cpm_teqx_conf_lpr h a G L T) →
❪G0,L0❫ ⊢ ⓝV0.T0 ![h,a] →
- ∀n1,V1. ❪G0,L0❫ ⊢ V0 ➡[n1,h] V1 → V0 ≛ V1 →
- ∀n2,V2. ❪G0,L0❫ ⊢ V0 ➡[n2,h] V2 → V0 ≛ V2 →
- ∀T1. ❪G0,L0❫ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 →
- ∀T2. ❪G0,L0❫ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 →
- ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G0,L1❫ ⊢ ⓝV1.T1 ➡[n2-n1,h] T & ⓝV1.T1 ≛ T & ❪G0,L2❫ ⊢ ⓝV2.T2 ➡[n1-n2,h] T & ⓝV2.T2 ≛ T.
+ ∀n1,V1. ❪G0,L0❫ ⊢ V0 ➡[h,n1] V1 → V0 ≛ V1 →
+ ∀n2,V2. ❪G0,L0❫ ⊢ V0 ➡[h,n2] V2 → V0 ≛ V2 →
+ ∀T1. ❪G0,L0❫ ⊢ T0 ➡[h,n1] T1 → T0 ≛ T1 →
+ ∀T2. ❪G0,L0❫ ⊢ T0 ➡[h,n2] T2 → T0 ≛ T2 →
+ ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G0,L1❫ ⊢ ⓝV1.T1 ➡[h,n2-n1] T & ⓝV1.T1 ≛ T & ❪G0,L2❫ ⊢ ⓝV2.T2 ➡[h,n1-n2] T & ⓝV2.T2 ≛ T.
#h #a #G0 #L0 #V0 #T0 #IH #H0
#n1 #V1 #H1V01 #H2V01 #n2 #V2 #H1V02 #H2V02 #T1 #H1T01 #H2T01 #T2 #H1T02 #H2T02
#L1 #HL01 #L2 #HL02
definition IH_cnv_cpm_teqx_cpm_trans (h) (a): relation3 genv lenv term ≝
λG,L,T1. ❪G,L❫ ⊢ T1 ![h,a] →
- ∀n1,T. ❪G,L❫ ⊢ T1 ➡[n1,h] T → T1 ≛ T →
- ∀n2,T2. ❪G,L❫ ⊢ T ➡[n2,h] T2 →
- ∃∃T0. ❪G,L❫ ⊢ T1 ➡[n2,h] T0 & ❪G,L❫ ⊢ T0 ➡[n1,h] T2 & T0 ≛ T2.
+ ∀n1,T. ❪G,L❫ ⊢ T1 ➡[h,n1] T → T1 ≛ T →
+ ∀n2,T2. ❪G,L❫ ⊢ T ➡[h,n2] T2 →
+ ∃∃T0. ❪G,L❫ ⊢ T1 ➡[h,n2] T0 & ❪G,L❫ ⊢ T0 ➡[h,n1] T2 & T0 ≛ T2.
(* Transitive properties restricted rt-transition for terms *****************)
lemma cnv_cpmre_trans (h) (a) (n) (G) (L):
∀T1. ❪G,L❫ ⊢ T1 ![h,a] →
- ∀T2. ❪G,L❫ ⊢ T1 ➡*[h,n] 𝐍❪T2❫ → ❪G,L❫ ⊢ T2 ![h,a].
+ ∀T2. ❪G,L❫ ⊢ T1 ➡*𝐍[h,n] T2 → ❪G,L❫ ⊢ T2 ![h,a].
#h #a #n #G #L #T1 #HT1 #T2 * #HT12 #_
/2 width=4 by cnv_cpms_trans/
qed-.
lemma cnv_cpmre_cpms_conf (h) (a) (n) (G) (L):
- ∀T. ❪G,L❫ ⊢ T ![h,a] → ∀T1. ❪G,L❫ ⊢ T ➡*[n,h] T1 →
- ∀T2. ❪G,L❫ ⊢ T ➡*[h,n] 𝐍❪T2❫ → ❪G,L❫ ⊢ T1 ➡*[h] 𝐍❪T2❫.
+ ∀T. ❪G,L❫ ⊢ T ![h,a] → ∀T1. ❪G,L❫ ⊢ T ➡*[h,n] T1 →
+ ∀T2. ❪G,L❫ ⊢ T ➡*𝐍[h,n] T2 → ❪G,L❫ ⊢ T1 ➡*𝐍[h,0] T2.
#h #a #n #G #L #T0 #HT0 #T1 #HT01 #T2 * #HT02 #HT2
elim (cnv_cpms_conf … HT0 … HT01 … HT02) -T0 <minus_n_n #T0 #HT10 #HT20
lapply (cprs_inv_cnr_sn … HT20 HT2) -HT20 #H destruct
(* Main properties with evaluation for t-bound rt-transition on terms *****)
theorem cnv_cpmre_mono (h) (a) (n) (G) (L):
- ∀T. ❪G,L❫ ⊢ T ![h,a] → ∀T1. ❪G,L❫ ⊢ T ➡*[h,n] 𝐍❪T1❫ →
- ∀T2. ❪G,L❫ ⊢ T ➡*[h,n] 𝐍❪T2❫ → T1 = T2.
+ ∀T. ❪G,L❫ ⊢ T ![h,a] → ∀T1. ❪G,L❫ ⊢ T ➡*𝐍[h,n] T1 →
+ ∀T2. ❪G,L❫ ⊢ T ➡*𝐍[h,n] T2 → T1 = T2.
#h #a #n #G #L #T0 #HT0 #T1 * #HT01 #HT1 #T2 * #HT02 #HT2
elim (cnv_cpms_conf … HT0 … HT01 … HT02) -T0 <minus_n_n #T0 #HT10 #HT20
/3 width=7 by cprs_inv_cnr_sn, canc_dx_eq/
(∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) →
(∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) →
❪G0,L0❫ ⊢ T0 ![h,a] →
- ∀n1,T1. ❪G0,L0❫ ⊢ T0 ➡*[n1,h] T1 → T0 ≛ T1 →
- ∀n2,T2. ❪G0,L0❫ ⊢ T0 ➡*[n2,h] T2 → T0 ≛ T2 →
- ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G0,L1❫ ⊢ T1 ➡*[n2-n1,h] T & ❪G0,L2❫ ⊢ T2 ➡*[n1-n2,h] T.
+ ∀n1,T1. ❪G0,L0❫ ⊢ T0 ➡*[h,n1] T1 → T0 ≛ T1 →
+ ∀n2,T2. ❪G0,L0❫ ⊢ T0 ➡*[h,n2] T2 → T0 ≛ T2 →
+ ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G0,L1❫ ⊢ T1 ➡*[h,n2-n1] T & ❪G0,L2❫ ⊢ T2 ➡*[h,n1-n2] T.
#h #a #G #L0 #T0 #IH2 #IH1 #HT0
#n1 #T1 #H1T01 #H2T01 #n2 #T2 #H1T02 #H2T02
#L1 #HL01 #L2 #HL02
(∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) →
(∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) →
❪G0,L0❫ ⊢ T0 ![h,a] →
- ∀X2. ❪G0,L0❫ ⊢ T0 ➡[m21,h] X2 → (T0 ≛ X2 → ⊥) → ∀T2. ❪G0,L0❫ ⊢ X2 ➡*[m22,h] T2 →
- ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G0,L1❫ ⊢ T0 ➡*[m21+m22,h] T& ❪G0,L2❫ ⊢ T2 ➡*[h] T.
+ ∀X2. ❪G0,L0❫ ⊢ T0 ➡[h,m21] X2 → (T0 ≛ X2 → ⊥) → ∀T2. ❪G0,L0❫ ⊢ X2 ➡*[h,m22] T2 →
+ ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G0,L1❫ ⊢ T0 ➡*[h,m21+m22] T& ❪G0,L2❫ ⊢ T2 ➡*[h,0] T.
#h #a #G0 #L0 #T0 #m21 #m22 #IH2 #IH1 #H0
#X2 #HX02 #HnX02 #T2 #HXT2
#L1 #HL01 #L2 #HL02
(∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) →
(∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) →
❪G0,L0❫ ⊢ T0 ![h,a] →
- ∀X1. ❪G0,L0❫ ⊢ T0 ➡[m11,h] X1 → T0 ≛ X1 → ∀T1. ❪G0,L0❫ ⊢ X1 ➡*[m12,h] T1 → X1 ≛ T1 →
- ∀X2. ❪G0,L0❫ ⊢ T0 ➡[m21,h] X2 → (T0 ≛ X2 → ⊥) → ∀T2. ❪G0,L0❫ ⊢ X2 ➡*[m22,h] T2 →
- ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 →
+ ∀X1. ❪G0,L0❫ ⊢ T0 ➡[h,m11] X1 → T0 ≛ X1 → ∀T1. ❪G0,L0❫ ⊢ X1 ➡*[h,m12] T1 → X1 ≛ T1 →
+ ∀X2. ❪G0,L0❫ ⊢ T0 ➡[h,m21] X2 → (T0 ≛ X2 → ⊥) → ∀T2. ❪G0,L0❫ ⊢ X2 ➡*[h,m22] T2 →
+ ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 →
((∀G,L,T. ❪G0,L0,X1❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) →
(∀G,L,T. ❪G0,L0,X1❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) →
∀m21,m22.
- ∀X2. ❪G0,L0❫ ⊢ X1 ➡[m21,h] X2 → (X1 ≛ X2 → ⊥) →
- ∀T2. ❪G0,L0❫ ⊢ X2 ➡*[m22,h] T2 →
- ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G0,L1❫ ⊢ T1 ➡*[m21+m22-m12,h] T & ❪G0,L2❫ ⊢ T2 ➡*[m12-(m21+m22),h]T
+ ∀X2. ❪G0,L0❫ ⊢ X1 ➡[h,m21] X2 → (X1 ≛ X2 → ⊥) →
+ ∀T2. ❪G0,L0❫ ⊢ X2 ➡*[h,m22] T2 →
+ ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G0,L1❫ ⊢ T1 ➡*[h,m21+m22-m12] T & ❪G0,L2❫ ⊢ T2 ➡*[h,m12-(m21+m22)]T
) →
- ∃∃T. ❪G0,L1❫ ⊢ T1 ➡*[m21+m22-(m11+m12),h] T & ❪G0,L2❫ ⊢ T2 ➡*[m11+m12-(m21+m22),h] T.
+ ∃∃T. ❪G0,L1❫ ⊢ T1 ➡*[h,m21+m22-(m11+m12)] T & ❪G0,L2❫ ⊢ T2 ➡*[h,m11+m12-(m21+m22)] T.
#h #a #G0 #L0 #T0 #m11 #m12 #m21 #m22 #IH2 #IH1 #HT0
#X1 #H1X01 #H2X01 #T1 #H1XT1 #H2XT1 #X2 #H1X02 #H2X02 #T2 #HXT2
#L1 #HL01 #L2 #HL02 #IH
(∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) →
(∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) →
❪G0,L0❫ ⊢ T0 ![h,a] →
- ∀T1. ❪G0,L0❫ ⊢ T0 ➡*[n1,h] T1 → T0 ≛ T1 →
- ∀X2. ❪G0,L0❫ ⊢ T0 ➡[m21,h] X2 → (T0 ≛ X2 → ⊥) → ∀T2. ❪G0,L0❫ ⊢ X2 ➡*[m22,h] T2 →
- ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G0,L1❫ ⊢ T1 ➡*[m21+m22-n1,h] T & ❪G0,L2❫ ⊢ T2 ➡*[n1-(m21+m22),h] T.
+ ∀T1. ❪G0,L0❫ ⊢ T0 ➡*[h,n1] T1 → T0 ≛ T1 →
+ ∀X2. ❪G0,L0❫ ⊢ T0 ➡[h,m21] X2 → (T0 ≛ X2 → ⊥) → ∀T2. ❪G0,L0❫ ⊢ X2 ➡*[h,m22] T2 →
+ ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G0,L1❫ ⊢ T1 ➡*[h,m21+m22-n1] T & ❪G0,L2❫ ⊢ T2 ➡*[h,n1-(m21+m22)] T.
#h #a #G0 #L0 #T0 #n1 #m21 #m22 #IH2 #IH1 #HT0
#T1 #H1T01 #H2T01
generalize in match m22; generalize in match m21; -m21 -m22
(∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) →
(∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) →
❪G0,L0❫ ⊢ T0 ![h,a] →
- ∀X1. ❪G0,L0❫ ⊢ T0 ➡[m11,h] X1 → (T0 ≛ X1 → ⊥) → ∀T1. ❪G0,L0❫ ⊢ X1 ➡*[m12,h] T1 →
- ∀X2. ❪G0,L0❫ ⊢ T0 ➡[m21,h] X2 → (T0 ≛ X2 → ⊥) → ∀T2. ❪G0,L0❫ ⊢ X2 ➡*[m22,h] T2 →
- ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G0,L1❫ ⊢ T1 ➡*[m21+m22-(m11+m12),h] T & ❪G0,L2❫ ⊢ T2 ➡*[m11+m12-(m21+m22),h] T.
+ ∀X1. ❪G0,L0❫ ⊢ T0 ➡[h,m11] X1 → (T0 ≛ X1 → ⊥) → ∀T1. ❪G0,L0❫ ⊢ X1 ➡*[h,m12] T1 →
+ ∀X2. ❪G0,L0❫ ⊢ T0 ➡[h,m21] X2 → (T0 ≛ X2 → ⊥) → ∀T2. ❪G0,L0❫ ⊢ X2 ➡*[h,m22] T2 →
+ ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G0,L1❫ ⊢ T1 ➡*[h,m21+m22-(m11+m12)] T & ❪G0,L2❫ ⊢ T2 ➡*[h,m11+m12-(m21+m22)] T.
#h #a #G0 #L0 #T0 #m11 #m12 #m21 #m22 #IH2 #IH1 #H0
#X1 #HX01 #HnX01 #T1 #HXT1 #X2 #HX02 #HnX02 #T2 #HXT2
#L1 #HL01 #L2 #HL02
(* Properties with restricted rt-computation for terms **********************)
fact cpms_tneqx_fwd_step_sn_aux (h) (a) (n) (G) (L) (T1):
- ∀T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → ❪G,L❫ ⊢ T1 ![h,a] → (T1 ≛ T2 → ⊥) →
+ ∀T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → ❪G,L❫ ⊢ T1 ![h,a] → (T1 ≛ T2 → ⊥) →
(∀G0,L0,T0. ❪G,L,T1❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
(∀G0,L0,T0. ❪G,L,T1❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) →
- ∃∃n1,n2,T0. ❪G,L❫ ⊢ T1 ➡[n1,h] T0 & T1 ≛ T0 → ⊥ & ❪G,L❫ ⊢ T0 ➡*[n2,h] T2 & n1+n2 = n.
+ ∃∃n1,n2,T0. ❪G,L❫ ⊢ T1 ➡[h,n1] T0 & T1 ≛ T0 → ⊥ & ❪G,L❫ ⊢ T0 ➡*[h,n2] T2 & n1+n2 = n.
#h #a #n #G #L #T1 #T2 #H
@(cpms_ind_sn … H) -n -T1
[ #_ #H2T2 elim H2T2 -H2T2 //
fact cpms_teqx_ind_sn (h) (a) (G) (L) (T2) (Q:relation2 …):
(❪G,L❫ ⊢ T2 ![h,a] → Q 0 T2) →
- (∀n1,n2,T1,T. ❪G,L❫ ⊢ T1 ➡[n1,h] T → ❪G,L❫ ⊢ T1 ![h,a] → T1 ≛ T → ❪G,L❫ ⊢ T ➡*[n2,h] T2 → ❪G,L❫ ⊢ T ![h,a] → T ≛ T2 → Q n2 T → Q (n1+n2) T1) →
- ∀n,T1. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → ❪G,L❫ ⊢ T1 ![h,a] → T1 ≛ T2 →
+ (∀n1,n2,T1,T. ❪G,L❫ ⊢ T1 ➡[h,n1] T → ❪G,L❫ ⊢ T1 ![h,a] → T1 ≛ T → ❪G,L❫ ⊢ T ➡*[h,n2] T2 → ❪G,L❫ ⊢ T ![h,a] → T ≛ T2 → Q n2 T → Q (n1+n2) T1) →
+ ∀n,T1. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → ❪G,L❫ ⊢ T1 ![h,a] → T1 ≛ T2 →
(∀G0,L0,T0. ❪G,L,T1❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
(∀G0,L0,T0. ❪G,L,T1❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) →
Q n T1.
fact cnv_cpms_teqx_strip_lpr_aux (h) (a) (G0) (L0) (T0):
(∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) →
(∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) →
- ∀n1,T1. ❪G0,L0❫ ⊢ T0 ➡*[n1,h] T1 → ❪G0,L0❫ ⊢ T0 ![h,a] → T0 ≛ T1 →
- ∀n2,T2. ❪G0,L0❫ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 →
- ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G0,L1❫ ⊢ T1 ➡[n2-n1,h] T & T1 ≛ T & ❪G0,L2❫ ⊢ T2 ➡*[n1-n2,h] T & T2 ≛ T.
+ ∀n1,T1. ❪G0,L0❫ ⊢ T0 ➡*[h,n1] T1 → ❪G0,L0❫ ⊢ T0 ![h,a] → T0 ≛ T1 →
+ ∀n2,T2. ❪G0,L0❫ ⊢ T0 ➡[h,n2] T2 → T0 ≛ T2 →
+ ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G0,L1❫ ⊢ T1 ➡[h,n2-n1] T & T1 ≛ T & ❪G0,L2❫ ⊢ T2 ➡*[h,n1-n2] T & T2 ≛ T.
#h #a #G #L0 #T0 #IH2 #IH1 #n1 #T1 #H1T01 #H0T0 #H2T01
@(cpms_teqx_ind_sn … H1T01 H0T0 H2T01 IH1 IH2) -n1 -T0
[ #H0T1 #n2 #T2 #H1T12 #H2T12 #L1 #HL01 #L2 #HL02
fact cnv_cpms_teqx_conf_lpr_aux (h) (a) (G0) (L0) (T0):
(∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) →
(∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) →
- ∀n1,T1. ❪G0,L0❫ ⊢ T0 ➡*[n1,h] T1 → ❪G0,L0❫ ⊢ T0 ![h,a] → T0 ≛ T1 →
- ∀n2,T2. ❪G0,L0❫ ⊢ T0 ➡*[n2,h] T2 → T0 ≛ T2 →
- ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G0,L1❫ ⊢ T1 ➡*[n2-n1,h] T & T1 ≛ T & ❪G0,L2❫ ⊢ T2 ➡*[n1-n2,h] T & T2 ≛ T.
+ ∀n1,T1. ❪G0,L0❫ ⊢ T0 ➡*[h,n1] T1 → ❪G0,L0❫ ⊢ T0 ![h,a] → T0 ≛ T1 →
+ ∀n2,T2. ❪G0,L0❫ ⊢ T0 ➡*[h,n2] T2 → T0 ≛ T2 →
+ ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G0,L1❫ ⊢ T1 ➡*[h,n2-n1] T & T1 ≛ T & ❪G0,L2❫ ⊢ T2 ➡*[h,n1-n2] T & T2 ≛ T.
#h #a #G #L0 #T0 #IH2 #IH1 #n1 #T1 #H1T01 #H0T0 #H2T01
generalize in match IH1; generalize in match IH2;
@(cpms_teqx_ind_sn … H1T01 H0T0 H2T01 IH1 IH2) -n1 -T0
lemma cpts_cpms_conf_eq (h) (n) (a) (G) (L):
∀T0. ❪G,L❫ ⊢ T0 ![h,a] → ∀T1. ❪G,L❫ ⊢ T0 ⬆*[h,n] T1 →
- ∀T2. ❪G,L❫ ⊢ T0 ➡*[n,h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
+ ∀T2. ❪G,L❫ ⊢ T0 ➡*[h,n] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
#h #a #n #G #L #T0 #HT0 #T1 #HT01 #T2 #HT02
/3 width=6 by cpts_fwd_cpms, cnv_cpms_conf_eq/
qed-.
lemma cnv_inv_appl_cpts (h) (a) (nv) (nt) (p) (G) (L):
∀V1. ❪G,L❫ ⊢ V1 ![h,a] → ∀V2. ❪G,L❫ ⊢ V1 ⬆*[h,nv] V2 →
∀T1. ❪G,L❫ ⊢ T1 ![h,a] → ∀T2. ❪G,L❫ ⊢ T1 ⬆*[h,nt] T2 →
- ∀V0. ❪G,L❫ ⊢ V1 ➡*[nv,h] V0 → ∀T0. ❪G,L❫ ⊢ T1 ➡*[nt,h] ⓛ[p]V0.T0 →
- ∃∃W0,U0. ❪G,L❫ ⊢ V2 ➡*[h] W0 & ❪G,L❫ ⊢ T2 ➡*[h] ⓛ[p]W0.U0.
+ ∀V0. ❪G,L❫ ⊢ V1 ➡*[h,nv] V0 → ∀T0. ❪G,L❫ ⊢ T1 ➡*[h,nt] ⓛ[p]V0.T0 →
+ ∃∃W0,U0. ❪G,L❫ ⊢ V2 ➡*[h,0] W0 & ❪G,L❫ ⊢ T2 ➡*[h,0] ⓛ[p]W0.U0.
#h #a #nv #nt #p #G #L #V1 #HV1 #V2 #HV12 #T1 #HT1 #T2 #HT12 #V0 #HV20 #T0 #HT20
lapply (cpts_cpms_conf_eq … HV1 … HV12 … HV20) -nv -V1 #HV20
lapply (cpts_cpms_conf_eq … HT1 … HT12 … HT20) -nt -T1 #HT20
lemma cnv_appl_cpts (h) (a) (nv) (nt) (p) (G) (L):
∀V1. ❪G,L❫ ⊢ V1 ![h,a] → ∀V2. ❪G,L❫ ⊢ V1 ⬆*[h,nv] V2 →
∀T1. ❪G,L❫ ⊢ T1 ![h,a] → ∀T2. ❪G,L❫ ⊢ T1 ⬆*[h,nt] T2 →
- ∀V0. ❪G,L❫ ⊢ V2 ➡*[h] V0 → ∀T0. ❪G,L❫ ⊢ T2 ➡*[h] ⓛ[p]V0.T0 →
- ∃∃W0,U0. ❪G,L❫ ⊢ V1 ➡*[nv,h] W0 & ❪G,L❫ ⊢ T1 ➡*[nt,h] ⓛ[p]W0.U0.
+ ∀V0. ❪G,L❫ ⊢ V2 ➡*[h,0] V0 → ∀T0. ❪G,L❫ ⊢ T2 ➡*[h,0] ⓛ[p]V0.T0 →
+ ∃∃W0,U0. ❪G,L❫ ⊢ V1 ➡*[h,nv] W0 & ❪G,L❫ ⊢ T1 ➡*[h,nt] ⓛ[p]W0.U0.
#h #a #nv #nt #p #G #L #V1 #HV1 #V2 #HV12 #T1 #HT1 #T2 #HT12 #V0 #HV20 #T0 #HT20
/3 width=6 by cpts_cprs_trans, ex2_2_intro/
qed-.
lemma cnv_cpms_conf (h) (a) (G) (L):
∀T0. ❪G,L❫ ⊢ T0 ![h,a] →
- ∀n1,T1. ❪G,L❫ ⊢ T0 ➡*[n1,h] T1 → ∀n2,T2. ❪G,L❫ ⊢ T0 ➡*[n2,h] T2 →
- ∃∃T. ❪G,L❫ ⊢ T1 ➡*[n2-n1,h] T & ❪G,L❫ ⊢ T2 ➡*[n1-n2,h] T.
+ ∀n1,T1. ❪G,L❫ ⊢ T0 ➡*[h,n1] T1 → ∀n2,T2. ❪G,L❫ ⊢ T0 ➡*[h,n2] T2 →
+ ∃∃T. ❪G,L❫ ⊢ T1 ➡*[h,n2-n1] T & ❪G,L❫ ⊢ T2 ➡*[h,n1-n2] T.
/2 width=8 by cnv_cpms_conf_lpr/ qed-.
(* Basic_2A1: uses: snv_cprs_lpr *)
lemma cnv_cpm_trans (h) (a) (G) (L):
∀T1. ❪G,L❫ ⊢ T1 ![h,a] →
- ∀n,T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 → ❪G,L❫ ⊢ T2 ![h,a].
+ ∀n,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → ❪G,L❫ ⊢ T2 ![h,a].
/2 width=6 by cnv_cpm_trans_lpr/ qed-.
(* Note: this is the preservation property *)
lemma cnv_cpms_trans (h) (a) (G) (L):
∀T1. ❪G,L❫ ⊢ T1 ![h,a] →
- ∀n,T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → ❪G,L❫ ⊢ T2 ![h,a].
+ ∀n,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → ❪G,L❫ ⊢ T2 ![h,a].
/2 width=6 by cnv_cpms_trans_lpr/ qed-.
lemma cnv_lpr_trans (h) (a) (G):
- ∀L1,T. ❪G,L1❫ ⊢ T ![h,a] → ∀L2. ❪G,L1❫ ⊢ ➡[h] L2 → ❪G,L2❫ ⊢ T ![h,a].
+ ∀L1,T. ❪G,L1❫ ⊢ T ![h,a] → ∀L2. ❪G,L1❫ ⊢ ➡[h,0] L2 → ❪G,L2❫ ⊢ T ![h,a].
/2 width=6 by cnv_cpm_trans_lpr/ qed-.
lemma cnv_lprs_trans (h) (a) (G):
- ∀L1,T. ❪G,L1❫ ⊢ T ![h,a] → ∀L2. ❪G,L1❫ ⊢ ➡*[h] L2 → ❪G,L2❫ ⊢ T ![h,a].
+ ∀L1,T. ❪G,L1❫ ⊢ T ![h,a] → ∀L2. ❪G,L1❫ ⊢ ➡*[h,0] L2 → ❪G,L2❫ ⊢ T ![h,a].
#h #a #G #L1 #T #HT #L2 #H
@(lprs_ind_dx … H) -L2 /2 width=3 by cnv_lpr_trans/
qed-.
lemma cnv_cpms_conf_eq (h) (a) (n) (G) (L):
∀T. ❪G,L❫ ⊢ T ![h,a] →
- ∀T1. ❪G,L❫ ⊢ T ➡*[n,h] T1 → ∀T2. ❪G,L❫ ⊢ T ➡*[n,h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
+ ∀T1. ❪G,L❫ ⊢ T ➡*[h,n] T1 → ∀T2. ❪G,L❫ ⊢ T ➡*[h,n] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
#h #a #n #G #L #T #HT #T1 #HT1 #T2 #HT2
elim (cnv_cpms_conf … HT … HT1 … HT2) -T <minus_n_n #T #HT1 #HT2
/2 width=3 by cprs_div/
qed-.
lemma cnv_cpms_fwd_appl_sn_decompose (h) (a) (G) (L):
- ∀V,T. ❪G,L❫ ⊢ ⓐV.T ![h,a] → ∀n,X. ❪G,L❫ ⊢ ⓐV.T ➡*[n,h] X →
- ∃∃U. ❪G,L❫ ⊢ T ![h,a] & ❪G,L❫ ⊢ T ➡*[n,h] U & ❪G,L❫ ⊢ ⓐV.U ⬌*[h] X.
+ ∀V,T. ❪G,L❫ ⊢ ⓐV.T ![h,a] → ∀n,X. ❪G,L❫ ⊢ ⓐV.T ➡*[h,n] X →
+ ∃∃U. ❪G,L❫ ⊢ T ![h,a] & ❪G,L❫ ⊢ T ➡*[h,n] U & ❪G,L❫ ⊢ ⓐV.U ⬌*[h] X.
#h #a #G #L #V #T #H0 #n #X #HX
elim (cnv_inv_appl … H0) #m #p #W #U #_ #_ #HT #_ #_ -m -p -W -U
elim (cnv_fwd_cpms_total h … n … HT) #U #HTU
definition IH_cnv_cpm_trans_lpr (h) (a): relation3 genv lenv term ≝
λG,L1,T1. ❪G,L1❫ ⊢ T1 ![h,a] →
- ∀n,T2. ❪G,L1❫ ⊢ T1 ➡[n,h] T2 →
- ∀L2. ❪G,L1❫ ⊢ ➡[h] L2 → ❪G,L2❫ ⊢ T2 ![h,a].
+ ∀n,T2. ❪G,L1❫ ⊢ T1 ➡[h,n] T2 →
+ ∀L2. ❪G,L1❫ ⊢ ➡[h,0] L2 → ❪G,L2❫ ⊢ T2 ![h,a].
definition IH_cnv_cpms_trans_lpr (h) (a): relation3 genv lenv term ≝
λG,L1,T1. ❪G,L1❫ ⊢ T1 ![h,a] →
- ∀n,T2. ❪G,L1❫ ⊢ T1 ➡*[n,h] T2 →
- ∀L2. ❪G,L1❫ ⊢ ➡[h] L2 → ❪G,L2❫ ⊢ T2 ![h,a].
+ ∀n,T2. ❪G,L1❫ ⊢ T1 ➡*[h,n] T2 →
+ ∀L2. ❪G,L1❫ ⊢ ➡[h,0] L2 → ❪G,L2❫ ⊢ T2 ![h,a].
definition IH_cnv_cpm_conf_lpr (h) (a): relation3 genv lenv term ≝
λG,L0,T0. ❪G,L0❫ ⊢ T0 ![h,a] →
- ∀n1,T1. ❪G,L0❫ ⊢ T0 ➡[n1,h] T1 → ∀n2,T2. ❪G,L0❫ ⊢ T0 ➡[n2,h] T2 →
- ∀L1. ❪G,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G,L1❫ ⊢ T1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ T2 ➡*[n1-n2,h] T.
+ ∀n1,T1. ❪G,L0❫ ⊢ T0 ➡[h,n1] T1 → ∀n2,T2. ❪G,L0❫ ⊢ T0 ➡[h,n2] T2 →
+ ∀L1. ❪G,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G,L1❫ ⊢ T1 ➡*[h,n2-n1] T & ❪G,L2❫ ⊢ T2 ➡*[h,n1-n2] T.
definition IH_cnv_cpms_strip_lpr (h) (a): relation3 genv lenv term ≝
λG,L0,T0. ❪G,L0❫ ⊢ T0 ![h,a] →
- ∀n1,T1. ❪G,L0❫ ⊢ T0 ➡*[n1,h] T1 → ∀n2,T2. ❪G,L0❫ ⊢ T0 ➡[n2,h] T2 →
- ∀L1. ❪G,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G,L1❫ ⊢ T1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ T2 ➡*[n1-n2,h] T.
+ ∀n1,T1. ❪G,L0❫ ⊢ T0 ➡*[h,n1] T1 → ∀n2,T2. ❪G,L0❫ ⊢ T0 ➡[h,n2] T2 →
+ ∀L1. ❪G,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G,L1❫ ⊢ T1 ➡*[h,n2-n1] T & ❪G,L2❫ ⊢ T2 ➡*[h,n1-n2] T.
definition IH_cnv_cpms_conf_lpr (h) (a): relation3 genv lenv term ≝
λG,L0,T0. ❪G,L0❫ ⊢ T0 ![h,a] →
- ∀n1,T1. ❪G,L0❫ ⊢ T0 ➡*[n1,h] T1 → ∀n2,T2. ❪G,L0❫ ⊢ T0 ➡*[n2,h] T2 →
- ∀L1. ❪G,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G,L1❫ ⊢ T1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ T2 ➡*[n1-n2,h] T.
+ ∀n1,T1. ❪G,L0❫ ⊢ T0 ➡*[h,n1] T1 → ∀n2,T2. ❪G,L0❫ ⊢ T0 ➡*[h,n2] T2 →
+ ∀L1. ❪G,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G,L1❫ ⊢ T1 ➡*[h,n2-n1] T & ❪G,L2❫ ⊢ T2 ➡*[h,n1-n2] T.
(* Auxiliary properties for preservation ************************************)
(* Properties based on preservation *****************************************)
lemma cnv_cpms_nta (h) (a) (G) (L):
- ∀T. ❪G,L❫ ⊢ T ![h,a] → ∀U.❪G,L❫ ⊢ T ➡*[1,h] U → ❪G,L❫ ⊢ T :[h,a] U.
+ ∀T. ❪G,L❫ ⊢ T ![h,a] → ∀U.❪G,L❫ ⊢ T ➡*[h,1] U → ❪G,L❫ ⊢ T :[h,a] U.
/3 width=4 by cnv_cast, cnv_cpms_trans/ qed.
lemma cnv_nta_sn (h) (a) (G) (L):
(* Basic_1: uses: ty3_sred_wcpr0_pr0 *)
lemma nta_cpr_conf_lpr (h) (a) (G):
- ∀L1,T1,U. ❪G,L1❫ ⊢ T1 :[h,a] U → ∀T2. ❪G,L1❫ ⊢ T1 ➡[h] T2 →
- ∀L2. ❪G,L1❫ ⊢ ➡[h] L2 → ❪G,L2❫ ⊢ T2 :[h,a] U.
+ ∀L1,T1,U. ❪G,L1❫ ⊢ T1 :[h,a] U → ∀T2. ❪G,L1❫ ⊢ T1 ➡[h,0] T2 →
+ ∀L2. ❪G,L1❫ ⊢ ➡[h,0] L2 → ❪G,L2❫ ⊢ T2 :[h,a] U.
#h #a #G #L1 #T1 #U #H #T2 #HT12 #L2 #HL12
/3 width=6 by cnv_cpm_trans_lpr, cpm_cast/
qed-.
(* Basic_1: uses: ty3_sred_pr2 ty3_sred_pr0 *)
lemma nta_cpr_conf (h) (a) (G) (L):
∀T1,U. ❪G,L❫ ⊢ T1 :[h,a] U →
- ∀T2. ❪G,L❫ ⊢ T1 ➡[h] T2 → ❪G,L❫ ⊢ T2 :[h,a] U.
+ ∀T2. ❪G,L❫ ⊢ T1 ➡[h,0] T2 → ❪G,L❫ ⊢ T2 :[h,a] U.
#h #a #G #L #T1 #U #H #T2 #HT12
/3 width=6 by cnv_cpm_trans, cpm_cast/
qed-.
(* Basic_1: uses: ty3_sred_pr3 ty3_sred_pr1 *)
lemma nta_cprs_conf (h) (a) (G) (L):
∀T1,U. ❪G,L❫ ⊢ T1 :[h,a] U →
- ∀T2. ❪G,L❫ ⊢ T1 ➡*[h] T2 → ❪G,L❫ ⊢ T2 :[h,a] U.
+ ∀T2. ❪G,L❫ ⊢ T1 ➡*[h,0] T2 → ❪G,L❫ ⊢ T2 :[h,a] U.
#h #a #G #L #T1 #U #H #T2 #HT12
/3 width=6 by cnv_cpms_trans, cpms_cast/
qed-.
(* Basic_1: uses: ty3_cred_pr2 *)
lemma nta_lpr_conf (h) (a) (G):
∀L1,T,U. ❪G,L1❫ ⊢ T :[h,a] U →
- ∀L2. ❪G,L1❫ ⊢ ➡[h] L2 → ❪G,L2❫ ⊢ T :[h,a] U.
+ ∀L2. ❪G,L1❫ ⊢ ➡[h,0] L2 → ❪G,L2❫ ⊢ T :[h,a] U.
#h #a #G #L1 #T #U #HTU #L2 #HL12
/2 width=3 by cnv_lpr_trans/
qed-.
(* Basic_1: uses: ty3_cred_pr3 *)
lemma nta_lprs_conf (h) (a) (G):
∀L1,T,U. ❪G,L1❫ ⊢ T :[h,a] U →
- ∀L2. ❪G,L1❫ ⊢ ➡*[h] L2 → ❪G,L2❫ ⊢ T :[h,a] U.
+ ∀L2. ❪G,L1❫ ⊢ ➡*[h,0] L2 → ❪G,L2❫ ⊢ T :[h,a] U.
#h #a #G #L1 #T #U #HTU #L2 #HL12
/2 width=3 by cnv_lprs_trans/
qed-.
qed-.
(* Basic_1: uses: ty3_gen_lift *)
-(* Note: "❪G, L❫ ⊢ U2 ⬌*[h] X2" can be "❪G, L❫ ⊢ X2 ➡*[h] U2" *)
+(* Note: "❪G, L❫ ⊢ U2 ⬌*[h] X2" can be "❪G, L❫ ⊢ X2 ➡*[h,0] U2" *)
lemma nta_inv_lifts_sn (h) (a) (G):
∀L,T2,X2. ❪G,L❫ ⊢ T2 :[h,a] X2 →
∀b,f,K. ⇩*[b,f] L ≘ K → ∀T1. ⇧*[f] T1 ≘ T2 →
(* Basic_1: uses: ty3_tred *)
lemma nta_cprs_trans (h) (a) (G) (L):
- ∀T,U1. ❪G,L❫ ⊢ T :[h,a] U1 → ∀U2. ❪G,L❫ ⊢ U1 ➡*[h] U2 → ❪G,L❫ ⊢ T :[h,a] U2.
+ ∀T,U1. ❪G,L❫ ⊢ T :[h,a] U1 → ∀U2. ❪G,L❫ ⊢ U1 ➡*[h,0] U2 → ❪G,L❫ ⊢ T :[h,a] U2.
#h #a #G #L #T #U1 #H #U2 #HU12
/4 width=4 by nta_conv_cnv, nta_fwd_cnv_dx, cnv_cpms_trans, cpcs_cprs_dx/
qed-.
(* Basic_1: uses: ty3_sred_back *)
lemma cprs_nta_trans (h) (a) (G) (L):
- ∀T1,U0. ❪G,L❫ ⊢ T1 :[h,a] U0 → ∀T2. ❪G,L❫ ⊢ T1 ➡*[h] T2 →
+ ∀T1,U0. ❪G,L❫ ⊢ T1 :[h,a] U0 → ∀T2. ❪G,L❫ ⊢ T1 ➡*[h,0] T2 →
∀U. ❪G,L❫ ⊢ T2 :[h,a] U → ❪G,L❫ ⊢ T1 :[h,a] U.
#h #a #G #L #T1 #U0 #HT1 #T2 #HT12 #U #H
lapply (nta_cprs_conf … HT1 … HT12) -HT12 #HT2
qed-.
lemma cprs_nta_trans_cnv (h) (a) (G) (L):
- ∀T1. ❪G,L❫ ⊢ T1 ![h,a] → ∀T2. ❪G,L❫ ⊢ T1 ➡*[h] T2 →
+ ∀T1. ❪G,L❫ ⊢ T1 ![h,a] → ∀T2. ❪G,L❫ ⊢ T1 ➡*[h,0] T2 →
∀U. ❪G,L❫ ⊢ T2 :[h,a] U → ❪G,L❫ ⊢ T1 :[h,a] U.
#h #a #G #L #T1 #HT1 #T2 #HT12 #U #H
elim (cnv_nta_sn … HT1) -HT1 #U0 #HT1
(* ITERATED NATIVE TYPE ASSIGNMENT FOR TERMS ********************************)
definition ntas (h) (a) (n) (G) (L): relation term ≝ λT,U.
- ∃∃U0. ❪G,L❫ ⊢ U ![h,a] & ❪G,L❫ ⊢ T ![h,a] & ❪G,L❫ ⊢ U ➡*[h] U0 & ❪G,L❫ ⊢ T ➡*[n,h] U0.
+ ∃∃U0. ❪G,L❫ ⊢ U ![h,a] & ❪G,L❫ ⊢ T ![h,a] & ❪G,L❫ ⊢ U ➡*[h,0] U0 & ❪G,L❫ ⊢ T ➡*[h,n] U0.
interpretation "iterated native type assignment (term)"
'ColonStar h a n G L T U = (ntas h a n G L T U).
lemma ntas_intro (h) (a) (n) (G) (L):
∀U. ❪G,L❫ ⊢ U ![h,a] → ∀T. ❪G,L❫ ⊢ T ![h,a] →
- ∀U0. ❪G,L❫ ⊢ U ➡*[h] U0 → ❪G,L❫ ⊢ T ➡*[n,h] U0 → ❪G,L❫ ⊢ T :*[h,a,n] U.
+ ∀U0. ❪G,L❫ ⊢ U ➡*[h,0] U0 → ❪G,L❫ ⊢ T ➡*[h,n] U0 → ❪G,L❫ ⊢ T :*[h,a,n] U.
/2 width=3 by ex4_intro/ qed.
lemma ntas_refl (h) (a) (G) (L):
(* Properties based on preservation *****************************************)
lemma cnv_cpms_ntas (h) (a) (G) (L):
- ∀T. ❪G,L❫ ⊢ T ![h,a] → ∀n,U.❪G,L❫ ⊢ T ➡*[n,h] U → ❪G,L❫ ⊢ T :*[h,a,n] U.
+ ∀T. ❪G,L❫ ⊢ T ![h,a] → ∀n,U.❪G,L❫ ⊢ T ➡*[h,n] U → ❪G,L❫ ⊢ T :*[h,a,n] U.
/3 width=4 by ntas_intro, cnv_cpms_trans/ qed.
(* Inversion lemmas based on preservation ***********************************)
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The HELM team. *)
-(* ||A|| http://helm.cs.unibo.it *)
-(* \ / *)
-(* \ / This file is distributed under the terms of the *)
-(* v GNU General Public License Version 2 *)
-(* *)
-(**************************************************************************)
-
-(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-
-notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ➡[ break term 46 h ] break term 46 T2 )"
- non associative with precedence 45
- for @{ 'PRed $h $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ➡[ break term 46 n, break term 46 h ] break term 46 T2 )"
+notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ➡[ break term 46 h, break term 46 n ] break term 46 T2 )"
non associative with precedence 45
- for @{ 'PRed $n $h $G $L $T1 $T2 }.
+ for @{ 'PRed $h $n $G $L $T1 $T2 }.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The HELM team. *)
-(* ||A|| http://helm.cs.unibo.it *)
-(* \ / *)
-(* \ / This file is distributed under the terms of the *)
-(* v GNU General Public License Version 2 *)
-(* *)
-(**************************************************************************)
-
-(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-
-notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ➡*[ break term 46 h ] 𝐍❪ break term 46 T2 ❫ )"
- non associative with precedence 45
- for @{ 'PRedEval $h $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ➡*[ break term 46 h, break term 46 n ] 𝐍❪ break term 46 T2 ❫ )"
+notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ➡*𝐍[ break term 46 h, break term 46 n ] break term 46 T2 )"
non associative with precedence 45
for @{ 'PRedEval $h $n $G $L $T1 $T2 }.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The HELM team. *)
-(* ||A|| http://helm.cs.unibo.it *)
-(* \ / *)
-(* \ / This file is distributed under the terms of the *)
-(* v GNU General Public License Version 2 *)
-(* *)
-(**************************************************************************)
-
-(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-
-notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ ➡[ break term 46 h ] 𝐍❪ break term 46 T ❫ )"
- non associative with precedence 45
- for @{ 'PRedNormal $h $G $L $T }.
--- /dev/null
+(**************************************************************************)
+(* ___ *)
+(* ||M|| *)
+(* ||A|| A project by Andrea Asperti *)
+(* ||T|| *)
+(* ||I|| Developers: *)
+(* ||T|| The HELM team. *)
+(* ||A|| http://helm.cs.unibo.it *)
+(* \ / *)
+(* \ / This file is distributed under the terms of the *)
+(* v GNU General Public License Version 2 *)
+(* *)
+(**************************************************************************)
+
+(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
+
+notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ ➡𝐍[ break term 46 h, break term 46 n ] break term 46 T )"
+ non associative with precedence 45
+ for @{ 'PRedNormal $h $n $G $L $T }.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The HELM team. *)
-(* ||A|| http://helm.cs.unibo.it *)
-(* \ / *)
-(* \ / This file is distributed under the terms of the *)
-(* v GNU General Public License Version 2 *)
-(* *)
-(**************************************************************************)
-
-(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-
-notation "hvbox( ❪ term 46 G, break term 46 L1 ❫ ⊢ ➡[ break term 46 h ] break term 46 L2 )"
- non associative with precedence 45
- for @{ 'PRedSn $h $G $L1 $L2 }.
--- /dev/null
+(**************************************************************************)
+(* ___ *)
+(* ||M|| *)
+(* ||A|| A project by Andrea Asperti *)
+(* ||T|| *)
+(* ||I|| Developers: *)
+(* ||T|| The HELM team. *)
+(* ||A|| http://helm.cs.unibo.it *)
+(* \ / *)
+(* \ / This file is distributed under the terms of the *)
+(* v GNU General Public License Version 2 *)
+(* *)
+(**************************************************************************)
+
+(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
+
+notation "hvbox( ❪ term 46 G, break term 46 L1 ❫ ⊢ ➡[ break term 46 h, break term 46 n ] break term 46 L2 )"
+ non associative with precedence 45
+ for @{ 'PRedSn $h $n $G $L1 $L2 }.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The HELM team. *)
-(* ||A|| http://helm.cs.unibo.it *)
-(* \ / *)
-(* \ / This file is distributed under the terms of the *)
-(* v GNU General Public License Version 2 *)
-(* *)
-(**************************************************************************)
-
-(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-
-notation "hvbox( ❪ term 46 G, break term 46 L1 ❫ ⊢ ➡*[ break term 46 h ] break term 46 L2 )"
- non associative with precedence 45
- for @{ 'PRedSnStar $h $G $L1 $L2 }.
--- /dev/null
+(**************************************************************************)
+(* ___ *)
+(* ||M|| *)
+(* ||A|| A project by Andrea Asperti *)
+(* ||T|| *)
+(* ||I|| Developers: *)
+(* ||T|| The HELM team. *)
+(* ||A|| http://helm.cs.unibo.it *)
+(* \ / *)
+(* \ / This file is distributed under the terms of the *)
+(* v GNU General Public License Version 2 *)
+(* *)
+(**************************************************************************)
+
+(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
+
+notation "hvbox( ❪ term 46 G, break term 46 L1 ❫ ⊢ ➡*[ break term 46 h, break term 46 n ] break term 46 L2 )"
+ non associative with precedence 45
+ for @{ 'PRedSnStar $h $n $G $L1 $L2 }.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The HELM team. *)
-(* ||A|| http://helm.cs.unibo.it *)
-(* \ / *)
-(* \ / This file is distributed under the terms of the *)
-(* v GNU General Public License Version 2 *)
-(* *)
-(**************************************************************************)
-
-(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-
-notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ➡*[ break term 46 h ] break term 46 T2 )"
- non associative with precedence 45
- for @{ 'PRedStar $h $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ➡*[ break term 46 n, break term 46 h ] break term 46 T2 )"
+notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ➡*[ break term 46 h, break term 46 n ] break term 46 T2 )"
non associative with precedence 45
- for @{ 'PRedStar $n $h $G $L $T1 $T2 }.
+ for @{ 'PRedStar $h $n $G $L $T1 $T2 }.
(* NORMAL TERMS FOR T-UNUNBOUND WHD RT-TRANSITION ***************************)
definition cnuw (h) (G) (L): predicate term ≝
- λT1. ∀n,T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → T1 ≅ T2.
+ λT1. ∀n,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → T1 ≅ T2.
interpretation
"normality for t-unbound weak head context-sensitive parallel rt-transition (term)"
lemma cnuw_cpms_trans (h) (n) (G) (L):
∀T1. ❪G,L❫ ⊢ ➡𝐍𝐖*[h] T1 →
- ∀T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → ❪G,L❫ ⊢ ➡𝐍𝐖*[h] T2.
+ ∀T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → ❪G,L❫ ⊢ ➡𝐍𝐖*[h] T2.
#h #n1 #G #L #T1 #HT1 #T2 #HT12 #n2 #T3 #HT23
/4 width=5 by cpms_trans, tweq_canc_sn/
qed-.
lemma cnuw_dec_ex (h) (G) (L):
∀T1. ∨∨ ❪G,L❫ ⊢ ➡𝐍𝐖*[h] T1
- | ∃∃n,T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 & (T1 ≅ T2 → ⊥).
+ | ∃∃n,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 & (T1 ≅ T2 → ⊥).
#h #G #L #T1 elim T1 -T1 *
[ #s /3 width=5 by cnuw_sort, or_introl/
| #i elim (drops_F_uni L i)
(* EVALUATION FOR T-BOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION ON TERMS *)
-(* Basic_2A1: uses: cprre *)
+(* Basic_2A1: uses: cpre *)
definition cpmre (h) (n) (G) (L): relation2 term term ≝
- λT1,T2. ∧∧ ❪G,L❫ ⊢ T1 ➡*[n,h] T2 & ❪G,L❫ ⊢ ➡[h] 𝐍❪T2❫.
+ λT1,T2. ∧∧ ❪G,L❫ ⊢ T1 ➡*[h,n] T2 & ❪G,L❫ ⊢ ➡𝐍[h,0] T2.
interpretation "evaluation for t-bound context-sensitive parallel rt-transition (term)"
'PRedEval h n G L T1 T2 = (cpmre h n G L T1 T2).
(* Basic properties *********************************************************)
lemma cpmre_intro (h) (n) (G) (L):
- ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → ❪G,L❫ ⊢ ➡[h] 𝐍❪T2❫ → ❪G,L❫⊢T1➡*[h,n]𝐍❪T2❫.
+ ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → ❪G,L❫ ⊢ ➡𝐍[h,0] T2 → ❪G,L❫ ⊢ T1 ➡*𝐍[h,n] T2.
/2 width=1 by conj/ qed.
(* Basic forward lemmas *****************************************************)
lemma cpmre_fwd_cpms (h) (n) (G) (L):
- ∀T1,T2. ❪G,L❫⊢T1➡*[h,n]𝐍❪T2❫ → ❪G,L❫ ⊢ T1 ➡*[n,h] T2.
+ ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*𝐍[h,n] T2 → ❪G,L❫ ⊢ T1 ➡*[h,n] T2.
#h #n #G #L #T1 #T2 * //
qed-.
(* Properties with atomic atomic arity assignment on terms ******************)
lemma cpmre_total_aaa (h) (n) (A) (G) (L):
- ∀T1. ❪G,L❫ ⊢ T1 ⁝ A → ∃T2. ❪G,L❫ ⊢ T1 ➡*[h,n] 𝐍❪T2❫.
+ ∀T1. ❪G,L❫ ⊢ T1 ⁝ A → ∃T2. ❪G,L❫ ⊢ T1 ➡*𝐍[h,n] T2.
#h #n #A #G #L #T1 #HT1
elim (cpms_total_aaa h … n … HT1) #T0 #HT10
elim (cprre_total_csx h G L T0)
include "ground_2/lib/ltc.ma".
include "basic_2/notation/relations/predstar_6.ma".
-include "basic_2/notation/relations/predstar_5.ma".
include "basic_2/rt_transition/cpm.ma".
(* T-BOUND CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS **************)
(* Basic_2A1: uses: scpds *)
definition cpms (h) (G) (L): relation3 nat term term ≝
- ltc … plus … (cpm h G L).
+ ltc … plus … (cpm h G L).
interpretation
"t-bound context-sensitive parallel rt-computarion (term)"
- 'PRedStar n h G L T1 T2 = (cpms h G L n T1 T2).
-
-interpretation
- "context-sensitive parallel r-computation (term)"
- 'PRedStar h G L T1 T2 = (cpms h G L O T1 T2).
+ 'PRedStar h n G L T1 T2 = (cpms h G L n T1 T2).
(* Basic eliminators ********************************************************)
lemma cpms_ind_sn (h) (G) (L) (T2) (Q:relation2 …):
- Q 0 T2 →
- (∀n1,n2,T1,T. ❪G,L❫ ⊢ T1 ➡[n1,h] T → ❪G,L❫ ⊢ T ➡*[n2,h] T2 → Q n2 T → Q (n1+n2) T1) →
- ∀n,T1. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → Q n T1.
+ Q 0 T2 →
+ (∀n1,n2,T1,T. ❪G,L❫ ⊢ T1 ➡[h,n1] T → ❪G,L❫ ⊢ T ➡*[h,n2] T2 → Q n2 T → Q (n1+n2) T1) →
+ ∀n,T1. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → Q n T1.
#h #G #L #T2 #Q @ltc_ind_sn_refl //
qed-.
lemma cpms_ind_dx (h) (G) (L) (T1) (Q:relation2 …):
- Q 0 T1 →
- (∀n1,n2,T,T2. ❪G,L❫ ⊢ T1 ➡*[n1,h] T → Q n1 T → ❪G,L❫ ⊢ T ➡[n2,h] T2 → Q (n1+n2) T2) →
- ∀n,T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → Q n T2.
+ Q 0 T1 →
+ (∀n1,n2,T,T2. ❪G,L❫ ⊢ T1 ➡*[h,n1] T → Q n1 T → ❪G,L❫ ⊢ T ➡[h,n2] T2 → Q (n1+n2) T2) →
+ ∀n,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → Q n T2.
#h #G #L #T1 #Q @ltc_ind_dx_refl //
qed-.
(* Basic_1: includes: pr1_pr0 *)
(* Basic_1: uses: pr3_pr2 *)
(* Basic_2A1: includes: cpr_cprs *)
-lemma cpm_cpms (h) (G) (L): ∀n,T1,T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 → ❪G,L❫ ⊢ T1 ➡*[n,h] T2.
+lemma cpm_cpms (h) (G) (L):
+ ∀n,T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → ❪G,L❫ ⊢ T1 ➡*[h,n] T2.
/2 width=1 by ltc_rc/ qed.
-lemma cpms_step_sn (h) (G) (L): ∀n1,T1,T. ❪G,L❫ ⊢ T1 ➡[n1,h] T →
- ∀n2,T2. ❪G,L❫ ⊢ T ➡*[n2,h] T2 → ❪G,L❫ ⊢ T1 ➡*[n1+n2,h] T2.
+lemma cpms_step_sn (h) (G) (L):
+ ∀n1,T1,T. ❪G,L❫ ⊢ T1 ➡[h,n1] T →
+ ∀n2,T2. ❪G,L❫ ⊢ T ➡*[h,n2] T2 → ❪G,L❫ ⊢ T1 ➡*[h,n1+n2] T2.
/2 width=3 by ltc_sn/ qed-.
-lemma cpms_step_dx (h) (G) (L): ∀n1,T1,T. ❪G,L❫ ⊢ T1 ➡*[n1,h] T →
- ∀n2,T2. ❪G,L❫ ⊢ T ➡[n2,h] T2 → ❪G,L❫ ⊢ T1 ➡*[n1+n2,h] T2.
+lemma cpms_step_dx (h) (G) (L):
+ ∀n1,T1,T. ❪G,L❫ ⊢ T1 ➡*[h,n1] T →
+ ∀n2,T2. ❪G,L❫ ⊢ T ➡[h,n2] T2 → ❪G,L❫ ⊢ T1 ➡*[h,n1+n2] T2.
/2 width=3 by ltc_dx/ qed-.
(* Basic_2A1: uses: cprs_bind_dx *)
-lemma cpms_bind_dx (n) (h) (G) (L):
- ∀V1,V2. ❪G,L❫ ⊢ V1 ➡[h] V2 →
- ∀I,T1,T2. ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡*[n,h] T2 →
- ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡*[n,h] ⓑ[p,I]V2.T2.
-#n #h #G #L #V1 #V2 #HV12 #I #T1 #T2 #H #a @(cpms_ind_sn … H) -T1
+lemma cpms_bind_dx (h) (n) (G) (L):
+ ∀V1,V2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 →
+ ∀I,T1,T2. ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡*[h,n] T2 →
+ ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡*[h,n] ⓑ[p,I]V2.T2.
+#h #n #G #L #V1 #V2 #HV12 #I #T1 #T2 #H #a @(cpms_ind_sn … H) -T1
/3 width=3 by cpms_step_sn, cpm_cpms, cpm_bind/ qed.
-lemma cpms_appl_dx (n) (h) (G) (L):
- ∀V1,V2. ❪G,L❫ ⊢ V1 ➡[h] V2 →
- ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 →
- ❪G,L❫ ⊢ ⓐV1.T1 ➡*[n,h] ⓐV2.T2.
-#n #h #G #L #V1 #V2 #HV12 #T1 #T2 #H @(cpms_ind_sn … H) -T1
+lemma cpms_appl_dx (h) (n) (G) (L):
+ ∀V1,V2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 →
+ ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 →
+ ❪G,L❫ ⊢ ⓐV1.T1 ➡*[h,n] ⓐV2.T2.
+#h #n #G #L #V1 #V2 #HV12 #T1 #T2 #H @(cpms_ind_sn … H) -T1
/3 width=3 by cpms_step_sn, cpm_cpms, cpm_appl/
qed.
-lemma cpms_zeta (n) (h) (G) (L):
- ∀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
+lemma cpms_zeta (h) (n) (G) (L):
+ ∀T1,T. ⇧[1] T ≘ T1 →
+ ∀V,T2. ❪G,L❫ ⊢ T ➡*[h,n] T2 → ❪G,L❫ ⊢ +ⓓV.T1 ➡*[h,n] T2.
+#h #n #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
+lemma cpms_zeta_dx (h) (n) (G) (L):
+ ∀T2,T. ⇧[1] T2 ≘ T →
+ ∀V,T1. ❪G,L.ⓓV❫ ⊢ T1 ➡*[h,n] T → ❪G,L❫ ⊢ +ⓓV.T1 ➡*[h,n] T2.
+#h #n #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.
(* Basic_2A1: uses: cprs_eps *)
-lemma cpms_eps (n) (h) (G) (L):
- ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 →
- ∀V. ❪G,L❫ ⊢ ⓝV.T1 ➡*[n,h] T2.
-#n #h #G #L #T1 #T2 #H @(cpms_ind_sn … H) -T1
+lemma cpms_eps (h) (n) (G) (L):
+ ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 →
+ ∀V. ❪G,L❫ ⊢ ⓝV.T1 ➡*[h,n] T2.
+#h #n #G #L #T1 #T2 #H @(cpms_ind_sn … H) -T1
/3 width=3 by cpms_step_sn, cpm_cpms, cpm_eps/
qed.
-lemma cpms_ee (n) (h) (G) (L):
- ∀U1,U2. ❪G,L❫ ⊢ U1 ➡*[n,h] U2 →
- ∀T. ❪G,L❫ ⊢ ⓝU1.T ➡*[↑n,h] U2.
-#n #h #G #L #U1 #U2 #H @(cpms_ind_sn … H) -U1 -n
+lemma cpms_ee (h) (n) (G) (L):
+ ∀U1,U2. ❪G,L❫ ⊢ U1 ➡*[h,n] U2 →
+ ∀T. ❪G,L❫ ⊢ ⓝU1.T ➡*[h,↑n] U2.
+#h #n #G #L #U1 #U2 #H @(cpms_ind_sn … H) -U1 -n
[ /3 width=1 by cpm_cpms, cpm_ee/
| #n1 #n2 #U1 #U #HU1 #HU2 #_ #T >plus_S1
/3 width=3 by cpms_step_sn, cpm_ee/
qed.
(* Basic_2A1: uses: cprs_beta_dx *)
-lemma cpms_beta_dx (n) (h) (G) (L):
- ∀V1,V2. ❪G,L❫ ⊢ V1 ➡[h] V2 →
- ∀W1,W2. ❪G,L❫ ⊢ W1 ➡[h] W2 →
- ∀T1,T2. ❪G,L.ⓛW1❫ ⊢ T1 ➡*[n,h] T2 →
- ∀p. ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ➡*[n,h] ⓓ[p]ⓝW2.V2.T2.
-#n #h #G #L #V1 #V2 #HV12 #W1 #W2 #HW12 #T1 #T2 #H @(cpms_ind_dx … H) -T2
+lemma cpms_beta_dx (h) (n) (G) (L):
+ ∀V1,V2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 →
+ ∀W1,W2. ❪G,L❫ ⊢ W1 ➡[h,0] W2 →
+ ∀T1,T2. ❪G,L.ⓛW1❫ ⊢ T1 ➡*[h,n] T2 →
+ ∀p. ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ➡*[h,n] ⓓ[p]ⓝW2.V2.T2.
+#h #n #G #L #V1 #V2 #HV12 #W1 #W2 #HW12 #T1 #T2 #H @(cpms_ind_dx … H) -T2
/4 width=7 by cpms_step_dx, cpm_cpms, cpms_bind_dx, cpms_appl_dx, cpm_beta/
qed.
(* Basic_2A1: uses: cprs_theta_dx *)
-lemma cpms_theta_dx (n) (h) (G) (L):
- ∀V1,V. ❪G,L❫ ⊢ V1 ➡[h] V →
- ∀V2. ⇧[1] V ≘ V2 →
- ∀W1,W2. ❪G,L❫ ⊢ W1 ➡[h] W2 →
- ∀T1,T2. ❪G,L.ⓓW1❫ ⊢ T1 ➡*[n,h] T2 →
- ∀p. ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ➡*[n,h] ⓓ[p]W2.ⓐV2.T2.
-#n #h #G #L #V1 #V #HV1 #V2 #HV2 #W1 #W2 #HW12 #T1 #T2 #H @(cpms_ind_dx … H) -T2
+lemma cpms_theta_dx (h) (n) (G) (L):
+ ∀V1,V. ❪G,L❫ ⊢ V1 ➡[h,0] V →
+ ∀V2. ⇧[1] V ≘ V2 →
+ ∀W1,W2. ❪G,L❫ ⊢ W1 ➡[h,0] W2 →
+ ∀T1,T2. ❪G,L.ⓓW1❫ ⊢ T1 ➡*[h,n] T2 →
+ ∀p. ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ➡*[h,n] ⓓ[p]W2.ⓐV2.T2.
+#h #n #G #L #V1 #V #HV1 #V2 #HV2 #W1 #W2 #HW12 #T1 #T2 #H @(cpms_ind_dx … H) -T2
/4 width=9 by cpms_step_dx, cpm_cpms, cpms_bind_dx, cpms_appl_dx, cpm_theta/
qed.
(* Basic properties with r-transition ***************************************)
(* Basic_1: was: pr3_refl *)
-lemma cprs_refl: ∀h,G,L. reflexive … (cpms h G L 0).
+lemma cprs_refl (h) (G) (L):
+ reflexive … (cpms h G L 0).
/2 width=1 by cpm_cpms/ qed.
(* Advanced properties ******************************************************)
-lemma cpms_sort (h) (G) (L) (n):
- ∀s. ❪G,L❫ ⊢ ⋆s ➡*[n,h] ⋆((next h)^n s).
+lemma cpms_sort (h) (G) (L):
+ ∀n,s. ❪G,L❫ ⊢ ⋆s ➡*[h,n] ⋆((next h)^n s).
#h #G #L #n elim n -n [ // ]
#n #IH #s <plus_SO_dx
/3 width=3 by cpms_step_dx, cpm_sort/
(* Basic inversion lemmas ***************************************************)
-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 //
+lemma cpms_inv_sort1 (h) (n) (G) (L):
+ ∀X2,s. ❪G,L❫ ⊢ ⋆s ➡*[h,n] X2 → X2 = ⋆(((next h)^n) s).
+#h #n #G #L #X2 #s #H @(cpms_ind_dx … H) -X2 //
#n1 #n2 #X #X2 #_ #IH #HX2 destruct
elim (cpm_inv_sort1 … HX2) -HX2 #H #_ destruct //
qed-.
-lemma cpms_inv_lref1_ctop (n) (h) (G):
- ∀X2,i. ❪G,⋆❫ ⊢ #i ➡*[n,h] X2 → ∧∧ X2 = #i & n = 0.
-#n #h #G #X2 #i #H @(cpms_ind_dx … H) -X2
+lemma cpms_inv_lref1_ctop (h) (n) (G):
+ ∀X2,i. ❪G,⋆❫ ⊢ #i ➡*[h,n] X2 → ∧∧ X2 = #i & n = 0.
+#h #n #G #X2 #i #H @(cpms_ind_dx … H) -X2
[ /2 width=1 by conj/
| #n1 #n2 #X #X2 #_ * #HX #Hn1 #HX2 destruct
elim (cpm_inv_lref1_ctop … HX2) -HX2 #H1 #H2 destruct
]
qed-.
-lemma cpms_inv_zero1_unit (n) (h) (I) (K) (G):
- ∀X2. ❪G,K.ⓤ[I]❫ ⊢ #0 ➡*[n,h] X2 → ∧∧ X2 = #0 & n = 0.
-#n #h #I #G #K #X2 #H @(cpms_ind_dx … H) -X2
+lemma cpms_inv_zero1_unit (h) (n) (I) (K) (G):
+ ∀X2. ❪G,K.ⓤ[I]❫ ⊢ #0 ➡*[h,n] X2 → ∧∧ X2 = #0 & n = 0.
+#h #n #I #G #K #X2 #H @(cpms_ind_dx … H) -X2
[ /2 width=1 by conj/
| #n1 #n2 #X #X2 #_ * #HX #Hn1 #HX2 destruct
elim (cpm_inv_zero1_unit … HX2) -HX2 #H1 #H2 destruct
]
qed-.
-lemma cpms_inv_gref1 (n) (h) (G) (L):
- ∀X2,l. ❪G,L❫ ⊢ §l ➡*[n,h] X2 → ∧∧ X2 = §l & n = 0.
-#n #h #G #L #X2 #l #H @(cpms_ind_dx … H) -X2
+lemma cpms_inv_gref1 (h) (n) (G) (L):
+ ∀X2,l. ❪G,L❫ ⊢ §l ➡*[h,n] X2 → ∧∧ X2 = §l & n = 0.
+#h #n #G #L #X2 #l #H @(cpms_ind_dx … H) -X2
[ /2 width=1 by conj/
| #n1 #n2 #X #X2 #_ * #HX #Hn1 #HX2 destruct
elim (cpm_inv_gref1 … HX2) -HX2 #H1 #H2 destruct
qed-.
lemma cpms_inv_cast1 (h) (n) (G) (L):
- ∀W1,T1,X2. ❪G,L❫ ⊢ ⓝW1.T1 ➡*[n,h] X2 →
- ∨∨ ∃∃W2,T2. ❪G,L❫ ⊢ W1 ➡*[n,h] W2 & ❪G,L❫ ⊢ T1 ➡*[n,h] T2 & X2 = ⓝW2.T2
- | ❪G,L❫ ⊢ T1 ➡*[n,h] X2
- | ∃∃m. ❪G,L❫ ⊢ W1 ➡*[m,h] X2 & n = ↑m.
+ ∀W1,T1,X2. ❪G,L❫ ⊢ ⓝW1.T1 ➡*[h,n] X2 →
+ ∨∨ ∃∃W2,T2. ❪G,L❫ ⊢ W1 ➡*[h,n] W2 & ❪G,L❫ ⊢ T1 ➡*[h,n] T2 & X2 = ⓝW2.T2
+ | ❪G,L❫ ⊢ T1 ➡*[h,n] X2
+ | ∃∃m. ❪G,L❫ ⊢ W1 ➡*[h,m] X2 & n = ↑m.
#h #n #G #L #W1 #T1 #X2 #H @(cpms_ind_dx … H) -n -X2
[ /3 width=5 by or3_intro0, ex3_2_intro/
| #n1 #n2 #X #X2 #_ * [ * || * ]
/3 width=5 by cpms_fwd_cpxs, cpxs_aaa_conf/ qed-.
lemma cpms_total_aaa (h) (G) (L) (n) (A):
- ∀T. ❪G,L❫ ⊢ T ⁝ A → ∃U. ❪G,L❫ ⊢ T ➡*[n,h] U.
+ ∀T. ❪G,L❫ ⊢ T ⁝ A → ∃U. ❪G,L❫ ⊢ T ➡*[h,n] U.
#h #G #L #n elim n -n
[ /2 width=3 by ex_intro/
| #n #IH #A #T1 #HT1 <plus_SO_dx
lemma cpms_abst_dx_le_aaa (h) (G) (L) (T) (W) (p):
∀A. ❪G,L❫ ⊢ T ⁝ A →
- ∀n1,U1. ❪G,L❫ ⊢ T ➡*[n1,h] ⓛ[p]W.U1 → ∀n2. n1 ≤ n2 →
- ∃∃U2. ❪G,L❫ ⊢ T ➡*[n2,h] ⓛ[p]W.U2 & ❪G,L.ⓛW❫ ⊢ U1 ➡*[n2-n1,h] U2.
+ ∀n1,U1. ❪G,L❫ ⊢ T ➡*[h,n1] ⓛ[p]W.U1 → ∀n2. n1 ≤ n2 →
+ ∃∃U2. ❪G,L❫ ⊢ T ➡*[h,n2] ⓛ[p]W.U2 & ❪G,L.ⓛW❫ ⊢ U1 ➡*[h,n2-n1] U2.
#h #G #L #T #W #p #A #HA #n1 #U1 #HTU1 #n2 #Hn12
lapply (cpms_aaa_conf … HA … HTU1) -HA #HA
elim (cpms_total_aaa h … (n2-n1) … HA) -HA #X #H
(* Main properties **********************************************************)
(* Basic_2A1: includes: cprs_bind *)
-theorem cpms_bind (n) (h) (G) (L):
- ∀I,V1,T1,T2. ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡*[n,h] T2 →
- ∀V2. ❪G,L❫ ⊢ V1 ➡*[h] V2 →
- ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡*[n,h] ⓑ[p,I]V2.T2.
-#n #h #G #L #I #V1 #T1 #T2 #HT12 #V2 #H @(cprs_ind_dx … H) -V2
+theorem cpms_bind (h) (n) (G) (L):
+ ∀I,V1,T1,T2. ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡*[h,n] T2 →
+ ∀V2. ❪G,L❫ ⊢ V1 ➡*[h,0] V2 →
+ ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡*[h,n] ⓑ[p,I]V2.T2.
+#h #n #G #L #I #V1 #T1 #T2 #HT12 #V2 #H @(cprs_ind_dx … H) -V2
[ /2 width=1 by cpms_bind_dx/
| #V #V2 #_ #HV2 #IH #p >(plus_n_O … n) -HT12
/3 width=3 by cpr_pair_sn, cpms_step_dx/
]
qed.
-theorem cpms_appl (n) (h) (G) (L):
- ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 →
- ∀V1,V2. ❪G,L❫ ⊢ V1 ➡*[h] V2 →
- ❪G,L❫ ⊢ ⓐV1.T1 ➡*[n,h] ⓐV2.T2.
-#n #h #G #L #T1 #T2 #HT12 #V1 #V2 #H @(cprs_ind_dx … H) -V2
+theorem cpms_appl (h) (n) (G) (L):
+ ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 →
+ ∀V1,V2. ❪G,L❫ ⊢ V1 ➡*[h,0] V2 →
+ ❪G,L❫ ⊢ ⓐV1.T1 ➡*[h,n] ⓐV2.T2.
+#h #n #G #L #T1 #T2 #HT12 #V1 #V2 #H @(cprs_ind_dx … H) -V2
[ /2 width=1 by cpms_appl_dx/
| #V #V2 #_ #HV2 #IH >(plus_n_O … n) -HT12
/3 width=3 by cpr_pair_sn, cpms_step_dx/
qed.
(* Basic_2A1: includes: cprs_beta_rc *)
-theorem cpms_beta_rc (n) (h) (G) (L):
- ∀V1,V2. ❪G,L❫ ⊢ V1 ➡[h] V2 →
- ∀W1,T1,T2. ❪G,L.ⓛW1❫ ⊢ T1 ➡*[n,h] T2 →
- ∀W2. ❪G,L❫ ⊢ W1 ➡*[h] W2 →
- ∀p. ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ➡*[n,h] ⓓ[p]ⓝW2.V2.T2.
-#n #h #G #L #V1 #V2 #HV12 #W1 #T1 #T2 #HT12 #W2 #H @(cprs_ind_dx … H) -W2
+theorem cpms_beta_rc (h) (n) (G) (L):
+ ∀V1,V2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 →
+ ∀W1,T1,T2. ❪G,L.ⓛW1❫ ⊢ T1 ➡*[h,n] T2 →
+ ∀W2. ❪G,L❫ ⊢ W1 ➡*[h,0] W2 →
+ ∀p. ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ➡*[h,n] ⓓ[p]ⓝW2.V2.T2.
+#h #n #G #L #V1 #V2 #HV12 #W1 #T1 #T2 #HT12 #W2 #H @(cprs_ind_dx … H) -W2
[ /2 width=1 by cpms_beta_dx/
| #W #W2 #_ #HW2 #IH #p >(plus_n_O … n) -HT12
/4 width=3 by cpr_pair_sn, cpms_step_dx/
qed.
(* Basic_2A1: includes: cprs_beta *)
-theorem cpms_beta (n) (h) (G) (L):
- ∀W1,T1,T2. ❪G,L.ⓛW1❫ ⊢ T1 ➡*[n,h] T2 →
- ∀W2. ❪G,L❫ ⊢ W1 ➡*[h] W2 →
- ∀V1,V2. ❪G,L❫ ⊢ V1 ➡*[h] V2 →
- ∀p. ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ➡*[n,h] ⓓ[p]ⓝW2.V2.T2.
-#n #h #G #L #W1 #T1 #T2 #HT12 #W2 #HW12 #V1 #V2 #H @(cprs_ind_dx … H) -V2
+theorem cpms_beta (h) (n) (G) (L):
+ ∀W1,T1,T2. ❪G,L.ⓛW1❫ ⊢ T1 ➡*[h,n] T2 →
+ ∀W2. ❪G,L❫ ⊢ W1 ➡*[h,0] W2 →
+ ∀V1,V2. ❪G,L❫ ⊢ V1 ➡*[h,0] V2 →
+ ∀p. ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ➡*[h,n] ⓓ[p]ⓝW2.V2.T2.
+#h #n #G #L #W1 #T1 #T2 #HT12 #W2 #HW12 #V1 #V2 #H @(cprs_ind_dx … H) -V2
[ /2 width=1 by cpms_beta_rc/
| #V #V2 #_ #HV2 #IH #p >(plus_n_O … n) -HT12
/4 width=5 by cpms_step_dx, cpr_pair_sn, cpm_cast/
qed.
(* Basic_2A1: includes: cprs_theta_rc *)
-theorem cpms_theta_rc (n) (h) (G) (L):
- ∀V1,V. ❪G,L❫ ⊢ V1 ➡[h] V → ∀V2. ⇧[1] V ≘ V2 →
- ∀W1,T1,T2. ❪G,L.ⓓW1❫ ⊢ T1 ➡*[n,h] T2 →
- ∀W2. ❪G,L❫ ⊢ W1 ➡*[h] W2 →
- ∀p. ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ➡*[n,h] ⓓ[p]W2.ⓐV2.T2.
-#n #h #G #L #V1 #V #HV1 #V2 #HV2 #W1 #T1 #T2 #HT12 #W2 #H @(cprs_ind_dx … H) -W2
+theorem cpms_theta_rc (h) (n) (G) (L):
+ ∀V1,V. ❪G,L❫ ⊢ V1 ➡[h,0] V → ∀V2. ⇧[1] V ≘ V2 →
+ ∀W1,T1,T2. ❪G,L.ⓓW1❫ ⊢ T1 ➡*[h,n] T2 →
+ ∀W2. ❪G,L❫ ⊢ W1 ➡*[h,0] W2 →
+ ∀p. ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ➡*[h,n] ⓓ[p]W2.ⓐV2.T2.
+#h #n #G #L #V1 #V #HV1 #V2 #HV2 #W1 #T1 #T2 #HT12 #W2 #H @(cprs_ind_dx … H) -W2
[ /2 width=3 by cpms_theta_dx/
| #W #W2 #_ #HW2 #IH #p >(plus_n_O … n) -HT12
/3 width=3 by cpr_pair_sn, cpms_step_dx/
qed.
(* Basic_2A1: includes: cprs_theta *)
-theorem cpms_theta (n) (h) (G) (L):
- ∀V,V2. ⇧[1] V ≘ V2 → ∀W1,W2. ❪G,L❫ ⊢ W1 ➡*[h] W2 →
- ∀T1,T2. ❪G,L.ⓓW1❫ ⊢ T1 ➡*[n,h] T2 →
- ∀V1. ❪G,L❫ ⊢ V1 ➡*[h] V →
- ∀p. ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ➡*[n,h] ⓓ[p]W2.ⓐV2.T2.
-#n #h #G #L #V #V2 #HV2 #W1 #W2 #HW12 #T1 #T2 #HT12 #V1 #H @(cprs_ind_sn … H) -V1
+theorem cpms_theta (h) (n) (G) (L):
+ ∀V,V2. ⇧[1] V ≘ V2 → ∀W1,W2. ❪G,L❫ ⊢ W1 ➡*[h,0] W2 →
+ ∀T1,T2. ❪G,L.ⓓW1❫ ⊢ T1 ➡*[h,n] T2 →
+ ∀V1. ❪G,L❫ ⊢ V1 ➡*[h,0] V →
+ ∀p. ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ➡*[h,n] ⓓ[p]W2.ⓐV2.T2.
+#h #n #G #L #V #V2 #HV2 #W1 #W2 #HW12 #T1 #T2 #HT12 #V1 #H @(cprs_ind_sn … H) -V1
[ /2 width=3 by cpms_theta_rc/
| #V1 #V0 #HV10 #_ #IH #p >(plus_O_n … n) -HT12
/3 width=3 by cpr_pair_sn, cpms_step_sn/
(* Basic_2A1: uses: lstas_scpds_trans scpds_strap2 *)
theorem cpms_trans (h) (G) (L):
- ∀n1,T1,T. ❪G,L❫ ⊢ T1 ➡*[n1,h] T →
- ∀n2,T2. ❪G,L❫ ⊢ T ➡*[n2,h] T2 → ❪G,L❫ ⊢ T1 ➡*[n1+n2,h] T2.
+ ∀n1,T1,T. ❪G,L❫ ⊢ T1 ➡*[h,n1] T →
+ ∀n2,T2. ❪G,L❫ ⊢ T ➡*[h,n2] T2 → ❪G,L❫ ⊢ T1 ➡*[h,n1+n2] T2.
/2 width=3 by ltc_trans/ qed-.
(* Basic_2A1: uses: scpds_cprs_trans *)
-theorem cpms_cprs_trans (n) (h) (G) (L):
- ∀T1,T. ❪G,L❫ ⊢ T1 ➡*[n,h] T →
- ∀T2. ❪G,L❫ ⊢ T ➡*[h] T2 → ❪G,L❫ ⊢ T1 ➡*[n,h] T2.
-#n #h #G #L #T1 #T #HT1 #T2 #HT2 >(plus_n_O … n)
+theorem cpms_cprs_trans (h) (n) (G) (L):
+ ∀T1,T. ❪G,L❫ ⊢ T1 ➡*[h,n] T →
+ ∀T2. ❪G,L❫ ⊢ T ➡*[h,0] T2 → ❪G,L❫ ⊢ T1 ➡*[h,n] T2.
+#h #n #G #L #T1 #T #HT1 #T2 #HT2 >(plus_n_O … n)
/2 width=3 by cpms_trans/ qed-.
(* Advanced inversion lemmas ************************************************)
-lemma cpms_inv_appl_sn (n) (h) (G) (L):
- ∀V1,T1,X2. ❪G,L❫ ⊢ ⓐV1.T1 ➡*[n,h] X2 →
- ∨∨ ∃∃V2,T2.
- ❪G,L❫ ⊢ V1 ➡*[h] V2 & ❪G,L❫ ⊢ T1 ➡*[n,h] T2 &
- X2 = ⓐV2.T2
- | ∃∃n1,n2,p,W,T.
- ❪G,L❫ ⊢ T1 ➡*[n1,h] ⓛ[p]W.T & ❪G,L❫ ⊢ ⓓ[p]ⓝW.V1.T ➡*[n2,h] X2 &
- n1 + n2 = n
- | ∃∃n1,n2,p,V0,V2,V,T.
- ❪G,L❫ ⊢ V1 ➡*[h] V0 & ⇧[1] V0 ≘ V2 &
- ❪G,L❫ ⊢ T1 ➡*[n1,h] ⓓ[p]V.T & ❪G,L❫ ⊢ ⓓ[p]V.ⓐV2.T ➡*[n2,h] X2 &
- n1 + n2 = n.
-#n #h #G #L #V1 #T1 #U2 #H
+lemma cpms_inv_appl_sn (h) (n) (G) (L):
+ ∀V1,T1,X2. ❪G,L❫ ⊢ ⓐV1.T1 ➡*[h,n] X2 →
+ ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡*[h,0] V2 & ❪G,L❫ ⊢ T1 ➡*[h,n] T2 & X2 = ⓐV2.T2
+ | ∃∃n1,n2,p,W,T. ❪G,L❫ ⊢ T1 ➡*[h,n1] ⓛ[p]W.T & ❪G,L❫ ⊢ ⓓ[p]ⓝW.V1.T ➡*[h,n2] X2 & n1 + n2 = n
+ | ∃∃n1,n2,p,V0,V2,V,T. ❪G,L❫ ⊢ V1 ➡*[h,0] V0 & ⇧[1] V0 ≘ V2 & ❪G,L❫ ⊢ T1 ➡*[h,n1] ⓓ[p]V.T & ❪G,L❫ ⊢ ⓓ[p]V.ⓐV2.T ➡*[h,n2] X2 & n1 + n2 = n.
+#h #n #G #L #V1 #T1 #U2 #H
@(cpms_ind_dx … H) -U2 /3 width=5 by or3_intro0, ex3_2_intro/
#n1 #n2 #U #U2 #_ * *
[ #V0 #T0 #HV10 #HT10 #H #HU2 destruct
]
qed-.
-lemma cpms_inv_plus (h) (G) (L): ∀n1,n2,T1,T2. ❪G,L❫ ⊢ T1 ➡*[n1+n2,h] T2 →
- ∃∃T. ❪G,L❫ ⊢ T1 ➡*[n1,h] T & ❪G,L❫ ⊢ T ➡*[n2,h] T2.
+lemma cpms_inv_plus (h) (G) (L):
+ ∀n1,n2,T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,n1+n2] T2 →
+ ∃∃T. ❪G,L❫ ⊢ T1 ➡*[h,n1] T & ❪G,L❫ ⊢ T ➡*[h,n2] T2.
#h #G #L #n1 elim n1 -n1 /2 width=3 by ex2_intro/
#n1 #IH #n2 #T1 #T2 <plus_S1 #H
elim (cpms_inv_succ_sn … H) -H #T0 #HT10 #HT02
(* Advanced main properties *************************************************)
-theorem cpms_cast (n) (h) (G) (L):
- ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 →
- ∀U1,U2. ❪G,L❫ ⊢ U1 ➡*[n,h] U2 →
- ❪G,L❫ ⊢ ⓝU1.T1 ➡*[n,h] ⓝU2.T2.
-#n #h #G #L #T1 #T2 #H @(cpms_ind_sn … H) -T1 -n
+theorem cpms_cast (h) (n) (G) (L):
+ ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 →
+ ∀U1,U2. ❪G,L❫ ⊢ U1 ➡*[h,n] U2 →
+ ❪G,L❫ ⊢ ⓝU1.T1 ➡*[h,n] ⓝU2.T2.
+#h #n #G #L #T1 #T2 #H @(cpms_ind_sn … H) -T1 -n
[ /3 width=3 by cpms_cast_sn/
| #n1 #n2 #T1 #T #HT1 #_ #IH #U1 #U2 #H
elim (cpms_inv_plus … H) -H #U #HU1 #HU2
qed.
theorem cpms_trans_swap (h) (G) (L) (T1):
- ∀n1,T. ❪G,L❫ ⊢ T1 ➡*[n1,h] T → ∀n2,T2. ❪G,L❫ ⊢ T ➡*[n2,h] T2 →
- ∃∃T0. ❪G,L❫ ⊢ T1 ➡*[n2,h] T0 & ❪G,L❫ ⊢ T0 ➡*[n1,h] T2.
+ ∀n1,T. ❪G,L❫ ⊢ T1 ➡*[h,n1] T → ∀n2,T2. ❪G,L❫ ⊢ T ➡*[h,n2] T2 →
+ ∃∃T0. ❪G,L❫ ⊢ T1 ➡*[h,n2] T0 & ❪G,L❫ ⊢ T0 ➡*[h,n1] T2.
#h #G #L #T1 #n1 #T #HT1 #n2 #T2 #HT2
lapply (cpms_trans … HT1 … HT2) -T <commutative_plus #HT12
/2 width=1 by cpms_inv_plus/
(* Forward lemmas with unbound context-sensitive rt-computation for terms ***)
(* Basic_2A1: includes: scpds_fwd_cpxs cprs_cpxs *)
-lemma cpms_fwd_cpxs (n) (h): ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → ❪G,L❫ ⊢ T1 ⬈*[h] T2.
-#n #h #G #L #T1 #T2 #H @(cpms_ind_dx … H) -T2
+lemma cpms_fwd_cpxs (h) (n): ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → ❪G,L❫ ⊢ T1 ⬈*[h] T2.
+#h #n #G #L #T1 #T2 #H @(cpms_ind_dx … H) -T2
/3 width=4 by cpxs_strap1, cpm_fwd_cpx/
qed-.
(* Properties with generic slicing for local environments *******************)
-lemma cpms_lifts_sn: ∀n,h,G. d_liftable2_sn … lifts (λL. cpms h G L n).
+lemma cpms_lifts_sn: ∀h,n,G. d_liftable2_sn … lifts (λL. cpms h G L n).
/3 width=6 by d2_liftable_sn_ltc, cpm_lifts_sn/ qed-.
(* Basic_2A1: uses: scpds_lift *)
(* Basic_2A1: includes: cprs_lift *)
(* Basic_1: includes: pr3_lift *)
-lemma cpms_lifts_bi: ∀n,h,G. d_liftable2_bi … lifts (λL. cpms h G L n).
-#n #h #G @d_liftable2_sn_bi
+lemma cpms_lifts_bi: ∀h,n,G. d_liftable2_bi … lifts (λL. cpms h G L n).
+#h #n #G @d_liftable2_sn_bi
/2 width=6 by cpms_lifts_sn, lifts_mono/
qed-.
(* Basic_2A1: uses: scpds_inv_lift1 *)
(* Basic_2A1: includes: cprs_inv_lift1 *)
(* Basic_1: includes: pr3_gen_lift *)
-lemma cpms_inv_lifts_sn: ∀n,h,G. d_deliftable2_sn … lifts (λL. cpms h G L n).
+lemma cpms_inv_lifts_sn: ∀h,n,G. d_deliftable2_sn … lifts (λL. cpms h G L n).
/3 width=6 by d2_deliftable_sn_ltc, cpm_inv_lifts_sn/ qed-.
-lemma cpms_inv_lifts_bi: ∀n,h,G. d_deliftable2_bi … lifts (λL. cpms h G L n).
-#n #h #G @d_deliftable2_sn_bi
+lemma cpms_inv_lifts_bi: ∀h,n,G. d_deliftable2_bi … lifts (λL. cpms h G L n).
+#h #n #G @d_deliftable2_sn_bi
/2 width=6 by cpms_inv_lifts_sn, lifts_inj/
qed-.
(* Advanced properties ******************************************************)
-lemma cpms_delta (n) (h) (G): ∀K,V1,V2. ❪G,K❫ ⊢ V1 ➡*[n,h] V2 →
- ∀W2. ⇧[1] V2 ≘ W2 → ❪G,K.ⓓV1❫ ⊢ #0 ➡*[n,h] W2.
-#n #h #G #K #V1 #V2 #H @(cpms_ind_dx … H) -V2
+lemma cpms_delta (h) (n) (G): ∀K,V1,V2. ❪G,K❫ ⊢ V1 ➡*[h,n] V2 →
+ ∀W2. ⇧[1] V2 ≘ W2 → ❪G,K.ⓓV1❫ ⊢ #0 ➡*[h,n] W2.
+#h #n #G #K #V1 #V2 #H @(cpms_ind_dx … H) -V2
[ /3 width=3 by cpm_cpms, cpm_delta/
| #n1 #n2 #V #V2 #_ #IH #HV2 #W2 #HVW2
elim (lifts_total V (𝐔❨1❩)) #W #HVW
]
qed.
-lemma cpms_ell (n) (h) (G): ∀K,V1,V2. ❪G,K❫ ⊢ V1 ➡*[n,h] V2 →
- ∀W2. ⇧[1] V2 ≘ W2 → ❪G,K.ⓛV1❫ ⊢ #0 ➡*[↑n,h] W2.
-#n #h #G #K #V1 #V2 #H @(cpms_ind_dx … H) -V2
+lemma cpms_ell (h) (n) (G): ∀K,V1,V2. ❪G,K❫ ⊢ V1 ➡*[h,n] V2 →
+ ∀W2. ⇧[1] V2 ≘ W2 → ❪G,K.ⓛV1❫ ⊢ #0 ➡*[h,↑n] W2.
+#h #n #G #K #V1 #V2 #H @(cpms_ind_dx … H) -V2
[ /3 width=3 by cpm_cpms, cpm_ell/
| #n1 #n2 #V #V2 #_ #IH #HV2 #W2 #HVW2
elim (lifts_total V (𝐔❨1❩)) #W #HVW >plus_S1
]
qed.
-lemma cpms_lref (n) (h) (I) (G): ∀K,T,i. ❪G,K❫ ⊢ #i ➡*[n,h] T →
- ∀U. ⇧[1] T ≘ U → ❪G,K.ⓘ[I]❫ ⊢ #↑i ➡*[n,h] U.
-#n #h #I #G #K #T #i #H @(cpms_ind_dx … H) -T
+lemma cpms_lref (h) (n) (I) (G): ∀K,T,i. ❪G,K❫ ⊢ #i ➡*[h,n] T →
+ ∀U. ⇧[1] T ≘ U → ❪G,K.ⓘ[I]❫ ⊢ #↑i ➡*[h,n] U.
+#h #n #I #G #K #T #i #H @(cpms_ind_dx … H) -T
[ /3 width=3 by cpm_cpms, cpm_lref/
| #n1 #n2 #T #T2 #_ #IH #HT2 #U2 #HTU2
elim (lifts_total T (𝐔❨1❩)) #U #TU
]
qed.
-lemma cpms_cast_sn (n) (h) (G) (L):
- ∀U1,U2. ❪G,L❫ ⊢ U1 ➡*[n,h] U2 →
- ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 →
- ❪G,L❫ ⊢ ⓝU1.T1 ➡*[n,h] ⓝU2.T2.
-#n #h #G #L #U1 #U2 #H @(cpms_ind_sn … H) -U1 -n
+lemma cpms_cast_sn (h) (n) (G) (L):
+ ∀U1,U2. ❪G,L❫ ⊢ U1 ➡*[h,n] U2 →
+ ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 →
+ ❪G,L❫ ⊢ ⓝU1.T1 ➡*[h,n] ⓝU2.T2.
+#h #n #G #L #U1 #U2 #H @(cpms_ind_sn … H) -U1 -n
[ /3 width=3 by cpm_cpms, cpm_cast/
| #n1 #n2 #U1 #U #HU1 #_ #IH #T1 #T2 #H
elim (cpm_fwd_plus … H) -H #T #HT1 #HT2
(* Note: apparently this was missing in basic_1 *)
(* Basic_2A1: uses: cprs_delta *)
-lemma cpms_delta_drops (n) (h) (G):
+lemma cpms_delta_drops (h) (n) (G):
∀L,K,V,i. ⇩[i] L ≘ K.ⓓV →
- ∀V2. ❪G,K❫ ⊢ V ➡*[n,h] V2 →
- ∀W2. ⇧[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ➡*[n,h] W2.
-#n #h #G #L #K #V #i #HLK #V2 #H @(cpms_ind_dx … H) -V2
+ ∀V2. ❪G,K❫ ⊢ V ➡*[h,n] V2 →
+ ∀W2. ⇧[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ➡*[h,n] W2.
+#h #n #G #L #K #V #i #HLK #V2 #H @(cpms_ind_dx … H) -V2
[ /3 width=6 by cpm_cpms, cpm_delta_drops/
| #n1 #n2 #V1 #V2 #_ #IH #HV12 #W2 #HVW2
lapply (drops_isuni_fwd_drop2 … HLK) -HLK // #HLK
]
qed.
-lemma cpms_ell_drops (n) (h) (G):
+lemma cpms_ell_drops (h) (n) (G):
∀L,K,W,i. ⇩[i] L ≘ K.ⓛW →
- ∀W2. ❪G,K❫ ⊢ W ➡*[n,h] W2 →
- ∀V2. ⇧[↑i] W2 ≘ V2 → ❪G,L❫ ⊢ #i ➡*[↑n,h] V2.
-#n #h #G #L #K #W #i #HLK #W2 #H @(cpms_ind_dx … H) -W2
+ ∀W2. ❪G,K❫ ⊢ W ➡*[h,n] W2 →
+ ∀V2. ⇧[↑i] W2 ≘ V2 → ❪G,L❫ ⊢ #i ➡*[h,↑n] V2.
+#h #n #G #L #K #W #i #HLK #W2 #H @(cpms_ind_dx … H) -W2
[ /3 width=6 by cpm_cpms, cpm_ell_drops/
| #n1 #n2 #W1 #W2 #_ #IH #HW12 #V2 #HWV2
lapply (drops_isuni_fwd_drop2 … HLK) -HLK // #HLK
(* Advanced inversion lemmas ************************************************)
-lemma cpms_inv_lref1_drops (n) (h) (G):
- ∀L,T2,i. ❪G,L❫ ⊢ #i ➡*[n,h] T2 →
+lemma cpms_inv_lref1_drops (h) (n) (G):
+ ∀L,T2,i. ❪G,L❫ ⊢ #i ➡*[h,n] T2 →
∨∨ ∧∧ T2 = #i & n = 0
- | ∃∃K,V,V2. ⇩[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ➡*[n,h] V2 &
+ | ∃∃K,V,V2. ⇩[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ➡*[h,n] V2 &
⇧[↑i] V2 ≘ T2
- | ∃∃m,K,V,V2. ⇩[i] L ≘ K.ⓛV & ❪G,K❫ ⊢ V ➡*[m,h] V2 &
+ | ∃∃m,K,V,V2. ⇩[i] L ≘ K.ⓛV & ❪G,K❫ ⊢ V ➡*[h,m] V2 &
⇧[↑i] V2 ≘ T2 & n = ↑m.
-#n #h #G #L #T2 #i #H @(cpms_ind_dx … H) -T2
+#h #n #G #L #T2 #i #H @(cpms_ind_dx … H) -T2
[ /3 width=1 by or3_intro0, conj/
| #n1 #n2 #T #T2 #_ #IH #HT2 cases IH -IH *
[ #H1 #H2 destruct
]
qed-.
-lemma cpms_inv_delta_sn (n) (h) (G) (K) (V):
- ∀T2. ❪G,K.ⓓV❫ ⊢ #0 ➡*[n,h] T2 →
+lemma cpms_inv_delta_sn (h) (n) (G) (K) (V):
+ ∀T2. ❪G,K.ⓓV❫ ⊢ #0 ➡*[h,n] T2 →
∨∨ ∧∧ T2 = #0 & n = 0
- | ∃∃V2. ❪G,K❫ ⊢ V ➡*[n,h] V2 & ⇧[1] V2 ≘ T2.
-#n #h #G #K #V #T2 #H
+ | ∃∃V2. ❪G,K❫ ⊢ V ➡*[h,n] V2 & ⇧[1] V2 ≘ T2.
+#h #n #G #K #V #T2 #H
elim (cpms_inv_lref1_drops … H) -H *
[ /3 width=1 by or_introl, conj/
| #Y #X #V2 #H #HV2 #HVT2
]
qed-.
-lemma cpms_inv_ell_sn (n) (h) (G) (K) (V):
- ∀T2. ❪G,K.ⓛV❫ ⊢ #0 ➡*[n,h] T2 →
+lemma cpms_inv_ell_sn (h) (n) (G) (K) (V):
+ ∀T2. ❪G,K.ⓛV❫ ⊢ #0 ➡*[h,n] T2 →
∨∨ ∧∧ T2 = #0 & n = 0
- | ∃∃m,V2. ❪G,K❫ ⊢ V ➡*[m,h] V2 & ⇧[1] V2 ≘ T2 & n = ↑m.
-#n #h #G #K #V #T2 #H
+ | ∃∃m,V2. ❪G,K❫ ⊢ V ➡*[h,m] V2 & ⇧[1] V2 ≘ T2 & n = ↑m.
+#h #n #G #K #V #T2 #H
elim (cpms_inv_lref1_drops … H) -H *
[ /3 width=1 by or_introl, conj/
| #Y #X #V2 #H #HV2 #HVT2
]
qed-.
-lemma cpms_inv_lref_sn (n) (h) (G) (I) (K):
- ∀U2,i. ❪G,K.ⓘ[I]❫ ⊢ #↑i ➡*[n,h] U2 →
+lemma cpms_inv_lref_sn (h) (n) (G) (I) (K):
+ ∀U2,i. ❪G,K.ⓘ[I]❫ ⊢ #↑i ➡*[h,n] U2 →
∨∨ ∧∧ U2 = #↑i & n = 0
- | ∃∃T2. ❪G,K❫ ⊢ #i ➡*[n,h] T2 & ⇧[1] T2 ≘ U2.
-#n #h #G #I #K #U2 #i #H
+ | ∃∃T2. ❪G,K❫ ⊢ #i ➡*[h,n] T2 & ⇧[1] T2 ≘ U2.
+#h #n #G #I #K #U2 #i #H
elim (cpms_inv_lref1_drops … H) -H *
[ /3 width=1 by or_introl, conj/
| #L #V #V2 #H #HV2 #HVU2
]
qed-.
-fact cpms_inv_succ_sn (n) (h) (G) (L):
- ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[↑n,h] T2 →
- ∃∃T. ❪G,L❫ ⊢ T1 ➡*[1,h] T & ❪G,L❫ ⊢ T ➡*[n,h] T2.
-#n #h #G #L #T1 #T2
+fact cpms_inv_succ_sn (h) (n) (G) (L):
+ ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,↑n] T2 →
+ ∃∃T. ❪G,L❫ ⊢ T1 ➡*[h,1] T & ❪G,L❫ ⊢ T ➡*[h,n] T2.
+#h #n #G #L #T1 #T2
@(insert_eq_0 … (↑n)) #m #H
@(cpms_ind_sn … H) -T1 -m
[ #H destruct
(* Forward lemmas with proper parallel rst-computation for closures *********)
lemma cpms_tneqx_fwd_fpbg (h) (n):
- ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 →
+ ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 →
(T1 ≛ T2 → ⊥) → ❪G,L,T1❫ >[h] ❪G,L,T2❫.
/3 width=2 by cpms_fwd_cpxs, cpxs_tneqx_fpbg/ qed-.
lemma fpbg_cpms_trans (h) (n):
∀G1,G2,L1,L2,T1,T. ❪G1,L1,T1❫ >[h] ❪G2,L2,T❫ →
- ∀T2. ❪G2,L2❫ ⊢ T ➡*[n,h] T2 → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫.
+ ∀T2. ❪G2,L2❫ ⊢ T ➡*[h,n] T2 → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫.
/3 width=5 by fpbg_fpbs_trans, cpms_fwd_fpbs/ qed-.
lemma cpms_fpbg_trans (h) (n):
- ∀G1,L1,T1,T. ❪G1,L1❫ ⊢ T1 ➡*[n,h] T →
+ ∀G1,L1,T1,T. ❪G1,L1❫ ⊢ T1 ➡*[h,n] T →
∀G2,L2,T2. ❪G1,L1,T❫ >[h] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫.
/3 width=5 by fpbs_fpbg_trans, cpms_fwd_fpbs/ qed-.
lemma fqup_cpms_fwd_fpbg (h):
∀G1,G2,L1,L2,T1,T. ❪G1,L1,T1❫ ⬂+ ❪G2,L2,T❫ →
- ∀n,T2. ❪G2,L2❫ ⊢ T ➡*[n,h] T2 → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫.
+ ∀n,T2. ❪G2,L2❫ ⊢ T ➡*[h,n] T2 → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫.
/3 width=5 by cpms_fwd_fpbs, fqup_fpbg, fpbg_fpbs_trans/ qed-.
lemma cpm_tneqx_cpm_cpms_teqx_sym_fwd_fpbg (h) (G) (L) (T1):
- ∀n1,T. ❪G,L❫ ⊢ T1 ➡[n1,h] T → (T1 ≛ T → ⊥) →
- ∀n2,T2. ❪G,L❫⊢ T ➡*[n2,h] T2 → T1 ≛ T2 → ❪G,L,T1❫ >[h] ❪G,L,T1❫.
+ ∀n1,T. ❪G,L❫ ⊢ T1 ➡[h,n1] T → (T1 ≛ T → ⊥) →
+ ∀n2,T2. ❪G,L❫⊢ T ➡*[h,n2] T2 → T1 ≛ T2 → ❪G,L,T1❫ >[h] ❪G,L,T1❫.
#h #G #L #T1 #n1 #T #H1T1 #H2T1 #n2 #T2 #H1T2 #H2T12
/4 width=7 by cpms_fwd_fpbs, cpm_fpb, fpbs_teqx_trans, teqx_sym, ex2_3_intro/
qed-.
(* Forward lemmas with parallel rst-computation for closures ****************)
(* Basic_2A1: uses: cprs_fpbs *)
-lemma cpms_fwd_fpbs (n) (h):
- ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → ❪G,L,T1❫ ≥[h] ❪G,L,T2❫.
+lemma cpms_fwd_fpbs (h) (n):
+ ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → ❪G,L,T1❫ ≥[h] ❪G,L,T2❫.
/3 width=2 by cpms_fwd_cpxs, cpxs_fpbs/ qed-.
(* Properties with parallel rt-transition for full local environments *******)
-lemma lpr_cpm_trans (n) (h) (G):
- ∀L2,T1,T2. ❪G,L2❫ ⊢ T1 ➡[n,h] T2 →
- ∀L1. ❪G,L1❫ ⊢ ➡[h] L2 → ❪G,L1❫ ⊢ T1 ➡*[n,h] T2.
-#n #h #G #L2 #T1 #T2 #H @(cpm_ind … H) -n -G -L2 -T1 -T2
+lemma lpr_cpm_trans (h) (n) (G):
+ ∀L2,T1,T2. ❪G,L2❫ ⊢ T1 ➡[h,n] T2 →
+ ∀L1. ❪G,L1❫ ⊢ ➡[h,0] L2 → ❪G,L1❫ ⊢ T1 ➡*[h,n] T2.
+#h #n #G #L2 #T1 #T2 #H @(cpm_ind … H) -n -G -L2 -T1 -T2
[ /2 width=3 by/
| /3 width=2 by cpm_cpms/
| #n #G #K2 #V2 #V4 #W4 #_ #IH #HVW4 #L1 #H
]
qed-.
-lemma lpr_cpms_trans (n) (h) (G):
- ∀L1,L2. ❪G,L1❫ ⊢ ➡[h] L2 →
- ∀T1,T2. ❪G,L2❫ ⊢ T1 ➡*[n,h] T2 → ❪G,L1❫ ⊢ T1 ➡*[n,h] T2.
-#n #h #G #L1 #L2 #HL12 #T1 #T2 #H @(cpms_ind_sn … H) -n -T1
+lemma lpr_cpms_trans (h) (n) (G):
+ ∀L1,L2. ❪G,L1❫ ⊢ ➡[h,0] L2 →
+ ∀T1,T2. ❪G,L2❫ ⊢ T1 ➡*[h,n] T2 → ❪G,L1❫ ⊢ T1 ➡*[h,n] T2.
+#h #n #G #L1 #L2 #HL12 #T1 #T2 #H @(cpms_ind_sn … H) -n -T1
/3 width=3 by lpr_cpm_trans, cpms_trans/
qed-.
(* Advanced properties ******************************************************)
(* Basic_2A1: includes cpr_bind2 *)
-lemma cpm_bind2 (n) (h) (G) (L):
- ∀V1,V2. ❪G,L❫ ⊢ V1 ➡[h] V2 →
- ∀I,T1,T2. ❪G,L.ⓑ[I]V2❫ ⊢ T1 ➡[n,h] T2 →
- ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡*[n,h] ⓑ[p,I]V2.T2.
+lemma cpm_bind2 (h) (n) (G) (L):
+ ∀V1,V2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 →
+ ∀I,T1,T2. ❪G,L.ⓑ[I]V2❫ ⊢ T1 ➡[h,n] T2 →
+ ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡*[h,n] ⓑ[p,I]V2.T2.
/4 width=5 by lpr_cpm_trans, cpms_bind_dx, lpr_pair/ qed.
(* Basic_2A1: includes cprs_bind2_dx *)
-lemma cpms_bind2_dx (n) (h) (G) (L):
- ∀V1,V2. ❪G,L❫ ⊢ V1 ➡[h] V2 →
- ∀I,T1,T2. ❪G,L.ⓑ[I]V2❫ ⊢ T1 ➡*[n,h] T2 →
- ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡*[n,h] ⓑ[p,I]V2.T2.
+lemma cpms_bind2_dx (h) (n) (G) (L):
+ ∀V1,V2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 →
+ ∀I,T1,T2. ❪G,L.ⓑ[I]V2❫ ⊢ T1 ➡*[h,n] T2 →
+ ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡*[h,n] ⓑ[p,I]V2.T2.
/4 width=5 by lpr_cpms_trans, cpms_bind_dx, lpr_pair/ qed.
(* Properties with restricted refinement for local environments *************)
(* Basic_2A1: uses: lsubr_cprs_trans *)
-lemma lsubr_cpms_trans (n) (h): ∀G. lsub_trans … (λL. cpms h G L n) lsubr.
+lemma lsubr_cpms_trans (h) (n): ∀G. lsub_trans … (λL. cpms h G L n) lsubr.
/3 width=5 by lsubr_cpm_trans, ltc_lsub_trans/
qed-.
(* Properties with sort-irrelevant equivalence for local environments *******)
lemma cpms_reqx_conf_sn (h) (n) (G) (L1) (L2):
- ∀T1,T2. ❪G,L1❫ ⊢ T1 ➡*[n,h] T2 →
+ ∀T1,T2. ❪G,L1❫ ⊢ T1 ➡*[h,n] T2 →
L1 ≛[T1] L2 → L1 ≛[T2] L2.
/3 width=5 by cpms_fwd_cpxs, cpxs_reqx_conf_sn/ qed-.
lemma cpms_reqx_conf_dx (h) (n) (G) (L1) (L2):
- ∀T1,T2. ❪G,L2❫ ⊢ T1 ➡*[n,h] T2 →
+ ∀T1,T2. ❪G,L2❫ ⊢ T1 ➡*[h,n] T2 →
L1 ≛[T1] L2 → L1 ≛[T2] L2.
/3 width=5 by cpms_fwd_cpxs, cpxs_reqx_conf_dx/ qed-.
(* T-UNBOUND WHD EVALUATION FOR T-BOUND RT-TRANSITION ON TERMS **************)
definition cpmuwe (h) (n) (G) (L): relation2 term term ≝
- λT1,T2. ∧∧ ❪G,L❫ ⊢ T1 ➡*[n,h] T2 & ❪G,L❫ ⊢ ➡𝐍𝐖*[h] T2.
+ λT1,T2. ∧∧ ❪G,L❫ ⊢ T1 ➡*[h,n] T2 & ❪G,L❫ ⊢ ➡𝐍𝐖*[h] T2.
interpretation "t-unbound whd evaluation for t-bound context-sensitive parallel rt-transition (term)"
'PRedEvalWStar h n G L T1 T2 = (cpmuwe h n G L T1 T2).
(* Basic properties *********************************************************)
lemma cpmuwe_intro (h) (n) (G) (L):
- ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → ❪G,L❫ ⊢ ➡𝐍𝐖*[h] T2 → ❪G,L❫ ⊢ T1 ➡*𝐍𝐖*[h,n] T2.
+ ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → ❪G,L❫ ⊢ ➡𝐍𝐖*[h] T2 → ❪G,L❫ ⊢ T1 ➡*𝐍𝐖*[h,n] T2.
/2 width=1 by conj/ qed.
(* Advanced properties ******************************************************)
lemma cpmuwe_sort (h) (n) (G) (L) (T):
- ∀s. ❪G,L❫ ⊢ T ➡*[n,h] ⋆s → ❪G,L❫ ⊢ T ➡*𝐍𝐖*[h,n] ⋆s.
+ ∀s. ❪G,L❫ ⊢ T ➡*[h,n] ⋆s → ❪G,L❫ ⊢ T ➡*𝐍𝐖*[h,n] ⋆s.
/3 width=5 by cnuw_sort, cpmuwe_intro/ qed.
lemma cpmuwe_ctop (h) (n) (G) (T):
- ∀i. ❪G,⋆❫ ⊢ T ➡*[n,h] #i → ❪G,⋆❫ ⊢ T ➡*𝐍𝐖*[h,n] #i.
+ ∀i. ❪G,⋆❫ ⊢ T ➡*[h,n] #i → ❪G,⋆❫ ⊢ T ➡*𝐍𝐖*[h,n] #i.
/3 width=5 by cnuw_ctop, cpmuwe_intro/ qed.
lemma cpmuwe_zero_unit (h) (n) (G) (L) (T):
- ∀I. ❪G,L.ⓤ[I]❫ ⊢ T ➡*[n,h] #0 → ❪G,L.ⓤ[I]❫ ⊢ T ➡*𝐍𝐖*[h,n] #0.
+ ∀I. ❪G,L.ⓤ[I]❫ ⊢ T ➡*[h,n] #0 → ❪G,L.ⓤ[I]❫ ⊢ T ➡*𝐍𝐖*[h,n] #0.
/3 width=6 by cnuw_zero_unit, cpmuwe_intro/ qed.
lemma cpmuwe_gref (h) (n) (G) (L) (T):
- ∀l. ❪G,L❫ ⊢ T ➡*[n,h] §l → ❪G,L❫ ⊢ T ➡*𝐍𝐖*[h,n] §l.
+ ∀l. ❪G,L❫ ⊢ T ➡*[h,n] §l → ❪G,L❫ ⊢ T ➡*𝐍𝐖*[h,n] §l.
/3 width=5 by cnuw_gref, cpmuwe_intro/ qed.
(* Basic forward lemmas *****************************************************)
lemma cpmuwe_fwd_cpms (h) (n) (G) (L):
- ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*𝐍𝐖*[h,n] T2 → ❪G,L❫ ⊢ T1 ➡*[n,h] T2.
+ ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*𝐍𝐖*[h,n] T2 → ❪G,L❫ ⊢ T1 ➡*[h,n] T2.
#h #n #G #L #T1 #T2 * #HT12 #_ //
qed-.
(* Advanced properties ******************************************************)
lemma cpmuwe_abbr_neg (h) (n) (G) (L) (T):
- ∀V,U. ❪G,L❫ ⊢ T ➡*[n,h] -ⓓV.U → ❪G,L❫ ⊢ T ➡*𝐍𝐖*[h,n] -ⓓV.U.
+ ∀V,U. ❪G,L❫ ⊢ T ➡*[h,n] -ⓓV.U → ❪G,L❫ ⊢ T ➡*𝐍𝐖*[h,n] -ⓓV.U.
/3 width=5 by cnuw_abbr_neg, cpmuwe_intro/ qed.
lemma cpmuwe_abst (h) (n) (p) (G) (L) (T):
- ∀W,U. ❪G,L❫ ⊢ T ➡*[n,h] ⓛ[p]W.U → ❪G,L❫ ⊢ T ➡*𝐍𝐖*[h,n] ⓛ[p]W.U.
+ ∀W,U. ❪G,L❫ ⊢ T ➡*[h,n] ⓛ[p]W.U → ❪G,L❫ ⊢ T ➡*𝐍𝐖*[h,n] ⓛ[p]W.U.
/3 width=5 by cnuw_abst, cpmuwe_intro/ qed.
(* *)
(**************************************************************************)
-include "basic_2/notation/relations/predeval_5.ma".
include "basic_2/rt_computation/cpmre.ma".
include "basic_2/rt_computation/cprs.ma".
(* EVALUATION FOR CONTEXT-SENSITIVE PARALLEL R-TRANSITION ON TERMS ***********)
-
-(* Basic_2A1: was: cpre *)
-interpretation "evaluation for context-sensitive parallel r-transition (term)"
- 'PRedEval h G L T1 T2 = (cpmre h O G L T1 T2).
(* Properties with t-bound rt-computarion on terms **************************)
lemma cpms_cprre_trans (h) (n) (G) (L):
- ∀T1,T0. ❪G,L❫ ⊢T1 ➡*[n,h] T0 →
- ∀T2. ❪G,L❫ ⊢ T0 ➡*[h] 𝐍❪T2❫ → ❪G,L❫ ⊢ T1 ➡*[h,n] 𝐍❪T2❫.
+ ∀T1,T0. ❪G,L❫ ⊢T1 ➡*[h,n] T0 →
+ ∀T2. ❪G,L❫ ⊢ T0 ➡*𝐍[h,0] T2 → ❪G,L❫ ⊢ T1 ➡*𝐍[h,n] T2.
#h #n #G #L #T1 #T0 #HT10 #T2 * #HT02 #HT2
/3 width=3 by cpms_cprs_trans, cpmre_intro/
qed-.
(* Properties with context-sensitive parallel r-computation for terms ******)
lemma cprre_cprs_conf (h) (G) (L) (T):
- ∀T1. ❪G,L❫ ⊢ T ➡*[h] T1 → ∀T2. ❪G,L❫ ⊢ T ➡*[h] 𝐍❪T2❫ → ❪G,L❫ ⊢ T1 ➡*[h] 𝐍❪T2❫.
+ ∀T1. ❪G,L❫ ⊢ T ➡*[h,0] T1 →
+ ∀T2. ❪G,L❫ ⊢ T ➡*𝐍[h,0] T2 → ❪G,L❫ ⊢ T1 ➡*𝐍[h,0] T2.
#h #G #L #T0 #T1 #HT01 #T2 * #HT02 #HT2
elim (cprs_conf … HT01 … HT02) -T0 #T0 #HT10 #HT20
lapply (cprs_inv_cnr_sn … HT20 HT2) -HT20 #H destruct
(* Basic_1: was: nf2_pr3_confluence *)
(* Basic_2A1: was: cpre_mono *)
theorem cprre_mono (h) (G) (L) (T):
- ∀T1. ❪G,L❫ ⊢ T ➡*[h] 𝐍❪T1❫ → ∀T2. ❪G,L❫ ⊢ T ➡*[h] 𝐍❪T2❫ → T1 = T2.
+ ∀T1. ❪G,L❫ ⊢ T ➡*𝐍[h,0] T1 → ∀T2. ❪G,L❫ ⊢ T ➡*𝐍[h,0] T2 → T1 = T2.
#h #G #L #T0 #T1 * #HT01 #HT1 #T2 * #HT02 #HT2
elim (cprs_conf … HT01 … HT02) -T0 #T0 #HT10 #HT20
>(cprs_inv_cnr_sn … HT10 HT1) -T1
(* Basic_1: was just: nf2_sn3 *)
(* Basic_2A1: was: csx_cpre *)
lemma cprre_total_csx (h) (G) (L):
- ∀T1. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T1❫ → ∃T2. ❪G,L❫ ⊢ T1 ➡*[h] 𝐍❪T2❫.
+ ∀T1. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T1❫ → ∃T2. ❪G,L❫ ⊢ T1 ➡*𝐍[h,0] T2.
#h #G #L #T1 #H
@(csx_ind … H) -T1 #T1 #_ #IHT1
elim (cnr_dec_teqx h G L T1) [ /3 width=3 by ex_intro, cpmre_intro/ ] *
(* Basic_2A1: was: cprs_ind_dx *)
lemma cprs_ind_sn (h) (G) (L) (T2) (Q:predicate …):
Q T2 →
- (∀T1,T. ❪G,L❫ ⊢ T1 ➡[h] T → ❪G,L❫ ⊢ T ➡*[h] T2 → Q T → Q T1) →
- ∀T1. ❪G,L❫ ⊢ T1 ➡*[h] T2 → Q T1.
+ (∀T1,T. ❪G,L❫ ⊢ T1 ➡[h,0] T → ❪G,L❫ ⊢ T ➡*[h,0] T2 → Q T → Q T1) →
+ ∀T1. ❪G,L❫ ⊢ T1 ➡*[h,0] T2 → Q T1.
#h #G #L #T2 #Q #IH1 #IH2 #T1
@(insert_eq_0 … 0) #n #H
@(cpms_ind_sn … H) -n -T1 //
(* Basic_2A1: was: cprs_ind *)
lemma cprs_ind_dx (h) (G) (L) (T1) (Q:predicate …):
Q T1 →
- (∀T,T2. ❪G,L❫ ⊢ T1 ➡*[h] T → ❪G,L❫ ⊢ T ➡[h] T2 → Q T → Q T2) →
- ∀T2. ❪G,L❫ ⊢ T1 ➡*[h] T2 → Q T2.
+ (∀T,T2. ❪G,L❫ ⊢ T1 ➡*[h,0] T → ❪G,L❫ ⊢ T ➡[h,0] T2 → Q T → Q T2) →
+ ∀T2. ❪G,L❫ ⊢ T1 ➡*[h,0] T2 → Q T2.
#h #G #L #T1 #Q #IH1 #IH2 #T2
@(insert_eq_0 … 0) #n #H
@(cpms_ind_dx … H) -n -T2 //
(* Basic_1: was: pr3_step *)
(* Basic_2A1: was: cprs_strap2 *)
lemma cprs_step_sn (h) (G) (L):
- ∀T1,T. ❪G,L❫ ⊢ T1 ➡[h] T →
- ∀T2. ❪G,L❫ ⊢ T ➡*[h] T2 → ❪G,L❫ ⊢ T1 ➡*[h] T2.
+ ∀T1,T. ❪G,L❫ ⊢ T1 ➡[h,0] T →
+ ∀T2. ❪G,L❫ ⊢ T ➡*[h,0] T2 → ❪G,L❫ ⊢ T1 ➡*[h,0] T2.
/2 width=3 by cpms_step_sn/ qed-.
(* Basic_2A1: was: cprs_strap1 *)
lemma cprs_step_dx (h) (G) (L):
- ∀T1,T. ❪G,L❫ ⊢ T1 ➡*[h] T →
- ∀T2. ❪G,L❫ ⊢ T ➡[h] T2 → ❪G,L❫ ⊢ T1 ➡*[h] T2.
+ ∀T1,T. ❪G,L❫ ⊢ T1 ➡*[h,0] T →
+ ∀T2. ❪G,L❫ ⊢ T ➡[h,0] T2 → ❪G,L❫ ⊢ T1 ➡*[h,0] T2.
/2 width=3 by cpms_step_dx/ qed-.
(* Basic_1: was only: pr3_thin_dx *)
lemma cprs_flat_dx (h) (I) (G) (L):
- ∀V1,V2. ❪G,L❫ ⊢ V1 ➡[h] V2 →
- ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[h] T2 →
- ❪G,L❫ ⊢ ⓕ[I]V1.T1 ➡*[h] ⓕ[I]V2.T2.
+ ∀V1,V2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 →
+ ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,0] T2 →
+ ❪G,L❫ ⊢ ⓕ[I]V1.T1 ➡*[h,0] ⓕ[I]V2.T2.
#h #I #G #L #V1 #V2 #HV12 #T1 #T2 #H @(cprs_ind_sn … H) -T1
/3 width=3 by cprs_step_sn, cpm_cpms, cpr_flat/
qed.
lemma cprs_flat_sn (h) (I) (G) (L):
- ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[h] T2 → ∀V1,V2. ❪G,L❫ ⊢ V1 ➡*[h] V2 →
- ❪G,L❫ ⊢ ⓕ[I] V1. T1 ➡*[h] ⓕ[I] V2. T2.
+ ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[h,0] T2 → ∀V1,V2. ❪G,L❫ ⊢ V1 ➡*[h,0] V2 →
+ ❪G,L❫ ⊢ ⓕ[I] V1. T1 ➡*[h,0] ⓕ[I] V2. T2.
#h #I #G #L #T1 #T2 #HT12 #V1 #V2 #H @(cprs_ind_sn … H) -V1
/3 width=3 by cprs_step_sn, cpm_cpms, cpr_flat/
qed.
(* Basic inversion lemmas ***************************************************)
(* Basic_1: was: pr3_gen_sort *)
-lemma cprs_inv_sort1 (h) (G) (L): ∀X2,s. ❪G,L❫ ⊢ ⋆s ➡*[h] X2 → X2 = ⋆s.
+lemma cprs_inv_sort1 (h) (G) (L): ∀X2,s. ❪G,L❫ ⊢ ⋆s ➡*[h,0] X2 → X2 = ⋆s.
/2 width=4 by cpms_inv_sort1/ qed-.
(* Basic_1: was: pr3_gen_cast *)
-lemma cprs_inv_cast1 (h) (G) (L): ∀W1,T1,X2. ❪G,L❫ ⊢ ⓝW1.T1 ➡*[h] X2 →
- ∨∨ ∃∃W2,T2. ❪G,L❫ ⊢ W1 ➡*[h] W2 & ❪G,L❫ ⊢ T1 ➡*[h] T2 & X2 = ⓝW2.T2
- | ❪G,L❫ ⊢ T1 ➡*[h] X2.
+lemma cprs_inv_cast1 (h) (G) (L): ∀W1,T1,X2. ❪G,L❫ ⊢ ⓝW1.T1 ➡*[h,0] X2 →
+ ∨∨ ∃∃W2,T2. ❪G,L❫ ⊢ W1 ➡*[h,0] W2 & ❪G,L❫ ⊢ T1 ➡*[h,0] T2 & X2 = ⓝW2.T2
+ | ❪G,L❫ ⊢ T1 ➡*[h,0] X2.
#h #G #L #W1 #T1 #X2 #H
elim (cpms_inv_cast1 … H) -H
[ /2 width=1 by or_introl/
(* Basic_1: was: nf2_pr3_unfold *)
(* Basic_2A1: was: cprs_inv_cnr1 *)
lemma cprs_inv_cnr_sn (h) (G) (L):
- ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[h] T2 → ❪G,L❫ ⊢ ➡[h] 𝐍❪T1❫ → T1 = T2.
+ ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,0] T2 → ❪G,L❫ ⊢ ➡𝐍[h,0] T1 → T1 = T2.
#h #G #L #T1 #T2 #H @(cprs_ind_sn … H) -T1 //
#T1 #T0 #HT10 #_ #IH #HT1
lapply (HT1 … HT10) -HT10 #H destruct /2 width=1 by/
(* Basic_1: was: pr3_flat *)
theorem cprs_flat (h) (G) (L):
- ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[h] T2 →
- ∀V1,V2. ❪G,L❫ ⊢ V1 ➡*[h] V2 →
- ∀I. ❪G,L❫ ⊢ ⓕ[I]V1.T1 ➡*[h] ⓕ[I]V2.T2.
+ ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,0] T2 →
+ ∀V1,V2. ❪G,L❫ ⊢ V1 ➡*[h,0] V2 →
+ ∀I. ❪G,L❫ ⊢ ⓕ[I]V1.T1 ➡*[h,0] ⓕ[I]V2.T2.
#h #G #L #T1 #T2 #HT12 #V1 #V2 #H @(cprs_ind_dx … H) -V2
[ /2 width=3 by cprs_flat_dx/
| /3 width=3 by cpr_pair_sn, cprs_step_dx/
(* Basic_1: was pr3_gen_appl *)
(* Basic_2A1: was: cprs_inv_appl1 *)
lemma cprs_inv_appl_sn (h) (G) (L):
- ∀V1,T1,X2. ❪G,L❫ ⊢ ⓐV1.T1 ➡*[h] X2 →
- ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡*[h] V2 &
- ❪G,L❫ ⊢ T1 ➡*[h] T2 &
+ ∀V1,T1,X2. ❪G,L❫ ⊢ ⓐV1.T1 ➡*[h,0] X2 →
+ ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡*[h,0] V2 &
+ ❪G,L❫ ⊢ T1 ➡*[h,0] T2 &
X2 = ⓐV2. T2
- | ∃∃p,W,T. ❪G,L❫ ⊢ T1 ➡*[h] ⓛ[p]W.T &
- ❪G,L❫ ⊢ ⓓ[p]ⓝW.V1.T ➡*[h] X2
- | ∃∃p,V0,V2,V,T. ❪G,L❫ ⊢ V1 ➡*[h] V0 & ⇧[1] V0 ≘ V2 &
- ❪G,L❫ ⊢ T1 ➡*[h] ⓓ[p]V.T &
- ❪G,L❫ ⊢ ⓓ[p]V.ⓐV2.T ➡*[h] X2.
+ | ∃∃p,W,T. ❪G,L❫ ⊢ T1 ➡*[h,0] ⓛ[p]W.T &
+ ❪G,L❫ ⊢ ⓓ[p]ⓝW.V1.T ➡*[h,0] X2
+ | ∃∃p,V0,V2,V,T. ❪G,L❫ ⊢ V1 ➡*[h,0] V0 & ⇧[1] V0 ≘ V2 &
+ ❪G,L❫ ⊢ T1 ➡*[h,0] ⓓ[p]V.T &
+ ❪G,L❫ ⊢ ⓓ[p]V.ⓐV2.T ➡*[h,0] X2.
#h #G #L #V1 #T1 #X2 #H elim (cpms_inv_appl_sn … H) -H *
[ /3 width=5 by or3_intro0, ex3_2_intro/
| #n1 #n2 #p #V2 #T2 #HT12 #HTX2 #H
(* Basic_1: was: pr3_gen_lref *)
(* Basic_2A1: was: cprs_inv_lref1 *)
-lemma cprs_inv_lref1_drops (h) (G): ∀L,T2,i. ❪G,L❫ ⊢ #i ➡*[h] T2 →
+lemma cprs_inv_lref1_drops (h) (G): ∀L,T2,i. ❪G,L❫ ⊢ #i ➡*[h,0] T2 →
∨∨ T2 = #i
- | ∃∃K,V1,T1. ⇩[i] L ≘ K.ⓓV1 & ❪G,K❫ ⊢ V1 ➡*[h] T1 &
+ | ∃∃K,V1,T1. ⇩[i] L ≘ K.ⓓV1 & ❪G,K❫ ⊢ V1 ➡*[h,0] T1 &
⇧[↑i] T1 ≘ T2.
#h #G #L #T2 #i #H elim (cpms_inv_lref1_drops … H) -H *
[ /2 width=1 by or_introl/
(* CONTEXT-SENSITIVE PARALLEL R-COMPUTATION FOR BINDERS *********************)
-definition cprs_ext (h) (G): relation3 lenv bind bind ≝
- cext2 (λL. cpms h G L 0).
+definition cprs_ext (h) (n) (G): relation3 lenv bind bind ≝
+ cext2 (λL. cpms h G L n).
interpretation
"context-sensitive parallel r-computation (binder)"
- 'PRedStar h G L I1 I2 = (cprs_ext h G L I1 I2).
+ 'PRedStar h n G L I1 I2 = (cprs_ext h n G L I1 I2).
(* Basic_1: uses: pr3_pr2_pr2_t *)
(* Basic_1: includes: pr3_pr0_pr2_t *)
-lemma lpr_cpr_trans (h) (G): s_r_transitive … (λL. cpm h G L 0) (λ_. lpr h G).
+lemma lpr_cpr_trans (h) (G):
+ s_r_transitive … (λL. cpm h G L 0) (λ_. lpr h 0 G).
/3 width=4 by cprs_inv_CTC, lpr_cpm_trans, ltc_inv_CTC/
qed-.
(* Basic_1: uses: pr3_pr2_pr3_t pr3_wcpr0_t *)
-lemma lpr_cprs_trans (h) (G): s_rs_transitive … (λL. cpm h G L 0) (λ_. lpr h G).
+lemma lpr_cprs_trans (h) (G):
+ s_rs_transitive … (λL. cpm h G L 0) (λ_. lpr h 0 G).
#h #G @s_r_trans_CTC1 /2 width=3 by lpr_cpr_trans/ (**) (* full auto fails *)
qed-.
lemma cprs_lpr_conf_dx (h) (G):
- ∀L0,T0,T1. ❪G,L0❫ ⊢ T0 ➡*[h] T1 → ∀L1. ❪G,L0❫ ⊢ ➡[h] L1 →
- ∃∃T. ❪G,L1❫ ⊢ T1 ➡*[h] T & ❪G,L1❫ ⊢ T0 ➡*[h] T.
+ ∀L0,T0,T1. ❪G,L0❫ ⊢ T0 ➡*[h,0] T1 → ∀L1. ❪G,L0❫ ⊢ ➡[h,0] L1 →
+ ∃∃T. ❪G,L1❫ ⊢ T1 ➡*[h,0] T & ❪G,L1❫ ⊢ T0 ➡*[h,0] T.
#h #G #L0 #T0 #T1 #H
@(cprs_ind_dx … H) -T1 /2 width=3 by ex2_intro/
#T #T1 #_ #HT1 #IHT0 #L1 #HL01
qed-.
lemma cprs_lpr_conf_sn (h) (G):
- ∀L0,T0,T1. ❪G,L0❫ ⊢ T0 ➡*[h] T1 →
- ∀L1. ❪G,L0❫ ⊢ ➡[h] L1 →
- ∃∃T. ❪G,L0❫ ⊢ T1 ➡*[h] T & ❪G,L1❫ ⊢ T0 ➡*[h] T.
+ ∀L0,T0,T1. ❪G,L0❫ ⊢ T0 ➡*[h,0] T1 →
+ ∀L1. ❪G,L0❫ ⊢ ➡[h,0] L1 →
+ ∃∃T. ❪G,L0❫ ⊢ T1 ➡*[h,0] T & ❪G,L1❫ ⊢ T0 ➡*[h,0] T.
#h #G #L0 #T0 #T1 #HT01 #L1 #HL01
elim (cprs_lpr_conf_dx … HT01 … HL01) -HT01 #T #HT1 #HT0
/3 width=3 by lpr_cpms_trans, ex2_intro/
(* Properties with sort-irrelevant whd equivalence on terms *****************)
lemma cprs_abbr_pos_twneq (h) (G) (L) (V) (T1):
- ∃∃T2. ❪G,L❫ ⊢ +ⓓV.T1 ➡*[h] T2 & (+ⓓV.T1 ≅ T2 → ⊥).
+ ∃∃T2. ❪G,L❫ ⊢ +ⓓV.T1 ➡*[h,0] T2 & (+ⓓV.T1 ≅ T2 → ⊥).
#h #G #L #V #U1
elim (cpr_subst h G (L.ⓓV) U1 … 0) [|*: /2 width=4 by drops_refl/ ] #U2 #T2 #HU12 #HTU2
elim (tweq_dec U1 U2) [ #HpU12 | -HTU2 #HnU12 ]
(* Forward lemmas with t-bound rt-computation for terms *********************)
lemma cpts_fwd_cpms (h) (n) (G) (L):
- ∀T1,T2. ❪G,L❫ ⊢ T1 ⬆*[h,n] T2 → ❪G,L❫ ⊢ T1 ➡*[n,h] T2.
+ ∀T1,T2. ❪G,L❫ ⊢ T1 ⬆*[h,n] T2 → ❪G,L❫ ⊢ T1 ➡*[h,n] T2.
#h #n #G #L #T1 #T2 #H
@(cpts_ind_dx … H) -n -T2 [ // ]
#n1 #n2 #T #T2 #_ #IH #HT2
lemma cpts_cprs_trans (h) (n) (G) (L) (T):
∀T1. ❪G,L❫ ⊢ T1 ⬆*[h,n] T →
- ∀T2. ❪G,L❫ ⊢ T ➡*[h] T2 → ❪G,L❫ ⊢ T1 ➡*[n,h] T2.
+ ∀T2. ❪G,L❫ ⊢ T ➡*[h,0] T2 → ❪G,L❫ ⊢ T1 ➡*[h,n] T2.
#h #n #G #L #T #T1 #HT1 #T2 #HT2
/3 width=3 by cpts_fwd_cpms, cpms_cprs_trans/ qed-.
(* PROPER PARALLEL RST-COMPUTATION FOR CLOSURES *****************************)
definition fpbg: ∀h. tri_relation genv lenv term ≝
- λh,G1,L1,T1,G2,L2,T2.
- ∃∃G,L,T. ❪G1,L1,T1❫ ≻[h] ❪G,L,T❫ & ❪G,L,T❫ ≥[h] ❪G2,L2,T2❫.
+ λh,G1,L1,T1,G2,L2,T2.
+ ∃∃G,L,T. ❪G1,L1,T1❫ ≻[h] ❪G,L,T❫ & ❪G,L,T❫ ≥[h] ❪G2,L2,T2❫.
interpretation "proper parallel rst-computation (closure)"
'PRedSubTyStarProper h G1 L1 T1 G2 L2 T2 = (fpbg h G1 L1 T1 G2 L2 T2).
(* Basic properties *********************************************************)
-lemma fpb_fpbg: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫ →
- ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫.
+lemma fpb_fpbg: ∀h,G1,G2,L1,L2,T1,T2.
+ ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫.
/2 width=5 by ex2_3_intro/ qed.
lemma fpbg_fpbq_trans: ∀h,G1,G,G2,L1,L,L2,T1,T,T2.
- ❪G1,L1,T1❫ >[h] ❪G,L,T❫ → ❪G,L,T❫ ≽[h] ❪G2,L2,T2❫ →
- ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫.
+ ❪G1,L1,T1❫ >[h] ❪G,L,T❫ → ❪G,L,T❫ ≽[h] ❪G2,L2,T2❫ →
+ ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫.
#h #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 *
/3 width=9 by fpbs_strap1, ex2_3_intro/
qed-.
lemma fpbg_fqu_trans (h): ∀G1,G,G2,L1,L,L2,T1,T,T2.
- ❪G1,L1,T1❫ >[h] ❪G,L,T❫ → ❪G,L,T❫ ⬂ ❪G2,L2,T2❫ →
- ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫.
+ ❪G1,L1,T1❫ >[h] ❪G,L,T❫ → ❪G,L,T❫ ⬂ ❪G2,L2,T2❫ →
+ ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫.
#h #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2
/4 width=5 by fpbg_fpbq_trans, fpbq_fquq, fqu_fquq/
qed-.
(* Note: this is used in the closure proof *)
-lemma fpbg_fpbs_trans: ∀h,G,G2,L,L2,T,T2. ❪G,L,T❫ ≥[h] ❪G2,L2,T2❫ →
- ∀G1,L1,T1. ❪G1,L1,T1❫ >[h] ❪G,L,T❫ → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫.
+lemma fpbg_fpbs_trans: ∀h,G,G2,L,L2,T,T2.
+ ❪G,L,T❫ ≥[h] ❪G2,L2,T2❫ →
+ ∀G1,L1,T1. ❪G1,L1,T1❫ >[h] ❪G,L,T❫ → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫.
#h #G #G2 #L #L2 #T #T2 #H @(fpbs_ind_dx … H) -G -L -T /3 width=5 by fpbg_fpbq_trans/
qed-.
(* Basic_2A1: uses: fpbg_fleq_trans *)
-lemma fpbg_feqx_trans: ∀h,G1,G,L1,L,T1,T. ❪G1,L1,T1❫ >[h] ❪G,L,T❫ →
- ∀G2,L2,T2. ❪G,L,T❫ ≛ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫.
+lemma fpbg_feqx_trans: ∀h,G1,G,L1,L,T1,T.
+ ❪G1,L1,T1❫ >[h] ❪G,L,T❫ →
+ ∀G2,L2,T2. ❪G,L,T❫ ≛ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫.
/3 width=5 by fpbg_fpbq_trans, fpbq_feqx/ qed-.
(* Properties with t-bound rt-transition for terms **************************)
lemma cpm_tneqx_cpm_fpbg (h) (G) (L):
- ∀n1,T1,T. ❪G,L❫ ⊢ T1 ➡[n1,h] T → (T1 ≛ T → ⊥) →
- ∀n2,T2. ❪G,L❫ ⊢ T ➡[n2,h] T2 → ❪G,L,T1❫ >[h] ❪G,L,T2❫.
+ ∀n1,T1,T. ❪G,L❫ ⊢ T1 ➡[h,n1] T → (T1 ≛ T → ⊥) →
+ ∀n2,T2. ❪G,L❫ ⊢ T ➡[h,n2] T2 → ❪G,L,T1❫ >[h] ❪G,L,T2❫.
/4 width=5 by fpbq_fpbs, cpm_fpbq, cpm_fpb, ex2_3_intro/ qed.
(* *)
(**************************************************************************)
-include "basic_2/notation/relations/predsnstar_4.ma".
+include "basic_2/notation/relations/predsnstar_5.ma".
include "static_2/relocation/lex.ma".
include "basic_2/rt_computation/cprs_ext.ma".
(* PARALLEL R-COMPUTATION FOR FULL LOCAL ENVIRONMENTS ***********************)
-definition lprs (h) (G): relation lenv ≝
- lex (λL.cpms h G L 0).
+definition lprs (h) (n) (G): relation lenv ≝
+ lex (λL.cpms h G L n).
interpretation
"parallel r-computation on all entries (local environment)"
- 'PRedSnStar h G L1 L2 = (lprs h G L1 L2).
+ 'PRedSnStar h n G L1 L2 = (lprs h n G L1 L2).
(* Basic properties *********************************************************)
(* Basic_2A1: uses: lprs_pair_refl *)
-lemma lprs_bind_refl_dx (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h] L2 →
- ∀I. ❪G,L1.ⓘ[I]❫ ⊢ ➡*[h] L2.ⓘ[I].
+lemma lprs_bind_refl_dx (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h,0] L2 →
+ ∀I. ❪G,L1.ⓘ[I]❫ ⊢ ➡*[h,0] L2.ⓘ[I].
/2 width=1 by lex_bind_refl_dx/ qed.
-lemma lprs_pair (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h] L2 →
- ∀V1,V2. ❪G,L1❫ ⊢ V1 ➡*[h] V2 →
- ∀I. ❪G,L1.ⓑ[I]V1❫ ⊢ ➡*[h] L2.ⓑ[I]V2.
+lemma lprs_pair (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h,0] L2 →
+ ∀V1,V2. ❪G,L1❫ ⊢ V1 ➡*[h,0] V2 →
+ ∀I. ❪G,L1.ⓑ[I]V1❫ ⊢ ➡*[h,0] L2.ⓑ[I]V2.
/2 width=1 by lex_pair/ qed.
-lemma lprs_refl (h) (G): ∀L. ❪G,L❫ ⊢ ➡*[h] L.
+lemma lprs_refl (h) (G): ∀L. ❪G,L❫ ⊢ ➡*[h,0] L.
/2 width=1 by lex_refl/ qed.
(* Basic inversion lemmas ***************************************************)
(* Basic_2A1: uses: lprs_inv_atom1 *)
-lemma lprs_inv_atom_sn (h) (G): ∀L2. ❪G,⋆❫ ⊢ ➡*[h] L2 → L2 = ⋆.
+lemma lprs_inv_atom_sn (h) (G): ∀L2. ❪G,⋆❫ ⊢ ➡*[h,0] L2 → L2 = ⋆.
/2 width=2 by lex_inv_atom_sn/ qed-.
(* Basic_2A1: was: lprs_inv_pair1 *)
lemma lprs_inv_pair_sn (h) (G):
- ∀I,K1,L2,V1. ❪G,K1.ⓑ[I]V1❫ ⊢ ➡*[h] L2 →
- ∃∃K2,V2. ❪G,K1❫ ⊢ ➡*[h] K2 & ❪G,K1❫ ⊢ V1 ➡*[h] V2 & L2 = K2.ⓑ[I]V2.
+ ∀I,K1,L2,V1. ❪G,K1.ⓑ[I]V1❫ ⊢ ➡*[h,0] L2 →
+ ∃∃K2,V2. ❪G,K1❫ ⊢ ➡*[h,0] K2 & ❪G,K1❫ ⊢ V1 ➡*[h,0] V2 & L2 = K2.ⓑ[I]V2.
/2 width=1 by lex_inv_pair_sn/ qed-.
(* Basic_2A1: uses: lprs_inv_atom2 *)
-lemma lprs_inv_atom_dx (h) (G): ∀L1. ❪G,L1❫ ⊢ ➡*[h] ⋆ → L1 = ⋆.
+lemma lprs_inv_atom_dx (h) (G): ∀L1. ❪G,L1❫ ⊢ ➡*[h,0] ⋆ → L1 = ⋆.
/2 width=2 by lex_inv_atom_dx/ qed-.
(* Basic_2A1: was: lprs_inv_pair2 *)
lemma lprs_inv_pair_dx (h) (G):
- ∀I,L1,K2,V2. ❪G,L1❫ ⊢ ➡*[h] K2.ⓑ[I]V2 →
- ∃∃K1,V1. ❪G,K1❫ ⊢ ➡*[h] K2 & ❪G,K1❫ ⊢ V1 ➡*[h] V2 & L1 = K1.ⓑ[I]V1.
+ ∀I,L1,K2,V2. ❪G,L1❫ ⊢ ➡*[h,0] K2.ⓑ[I]V2 →
+ ∃∃K1,V1. ❪G,K1❫ ⊢ ➡*[h,0] K2 & ❪G,K1❫ ⊢ V1 ➡*[h,0] V2 & L1 = K1.ⓑ[I]V1.
/2 width=1 by lex_inv_pair_dx/ qed-.
(* Basic eliminators ********************************************************)
lemma lprs_ind (h) (G): ∀Q:relation lenv.
Q (⋆) (⋆) → (
∀I,K1,K2.
- ❪G,K1❫ ⊢ ➡*[h] K2 →
+ ❪G,K1❫ ⊢ ➡*[h,0] K2 →
Q K1 K2 → Q (K1.ⓘ[I]) (K2.ⓘ[I])
) → (
∀I,K1,K2,V1,V2.
- ❪G,K1❫ ⊢ ➡*[h] K2 → ❪G,K1❫ ⊢ V1 ➡*[h] V2 →
+ ❪G,K1❫ ⊢ ➡*[h,0] K2 → ❪G,K1❫ ⊢ V1 ➡*[h,0] V2 →
Q K1 K2 → Q (K1.ⓑ[I]V1) (K2.ⓑ[I]V2)
) →
- ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h] L2 → Q L1 L2.
+ ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h,0] L2 → Q L1 L2.
/3 width=4 by lex_ind/ qed-.
(* Properties with atomic arity assignment for terms ************************)
-lemma lprs_aaa_conf (h) (G) (T): Conf3 … (λL. aaa G L T) (lprs h G).
+lemma lprs_aaa_conf (h) (G) (T):
+ Conf3 … (λL. aaa G L T) (lprs h 0 G).
/3 width=5 by lprs_fwd_lpxs, lpxs_aaa_conf/ qed-.
(* Properties with t-bound context-sensitive rt-computarion for terms *******)
-lemma lprs_cpms_trans (n) (h) (G):
- ∀L2,T1,T2. ❪G,L2❫ ⊢ T1 ➡*[n,h] T2 →
- ∀L1. ❪G,L1❫ ⊢ ➡*[h] L2 → ❪G,L1❫ ⊢ T1 ➡*[n,h] T2.
-#n #h #G #L2 #T1 #T2 #HT12 #L1 #H
-@(lprs_ind_sn … H) -L1 /2 width=3 by lpr_cpms_trans/
+lemma lprs_cpms_trans (h) (n) (G) (T1:term) (T2:term):
+ ∀L2. ❪G,L2❫ ⊢ T1 ➡*[h,n] T2 →
+ ∀L1. ❪G,L1❫ ⊢ ➡*[h,0] L2 → ❪G,L1❫ ⊢ T1 ➡*[h,n] T2.
+#h #n #G #T1 #T2 #L2 #HT12 #L1 #H
+@(lprs_ind_sn … H) -L1
+/2 width=3 by lpr_cpms_trans/
qed-.
-lemma lprs_cpm_trans (n) (h) (G):
- ∀L2,T1,T2. ❪G,L2❫ ⊢ T1 ➡[n,h] T2 →
- ∀L1. ❪G,L1❫ ⊢ ➡*[h] L2 → ❪G,L1❫ ⊢ T1 ➡*[n,h] T2.
+lemma lprs_cpm_trans (h) (n) (G) (T1:term) (T2:term):
+ ∀L2. ❪G,L2❫ ⊢ T1 ➡[h,n] T2 →
+ ∀L1. ❪G,L1❫ ⊢ ➡*[h,0] L2 → ❪G,L1❫ ⊢ T1 ➡*[h,n] T2.
/3 width=3 by lprs_cpms_trans, cpm_cpms/ qed-.
(* Basic_2A1: includes cprs_bind2 *)
-lemma cpms_bind_dx (n) (h) (G) (L):
- ∀V1,V2. ❪G,L❫ ⊢ V1 ➡*[h] V2 →
- ∀I,T1,T2. ❪G,L.ⓑ[I]V2❫ ⊢ T1 ➡*[n,h] T2 →
- ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡*[n,h] ⓑ[p,I]V2.T2.
+lemma cpms_bind_dx (h) (n) (G) (L):
+ ∀V1,V2. ❪G,L❫ ⊢ V1 ➡*[h,0] V2 →
+ ∀I,T1,T2. ❪G,L.ⓑ[I]V2❫ ⊢ T1 ➡*[h,n] T2 →
+ ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡*[h,n] ⓑ[p,I]V2.T2.
/4 width=5 by lprs_cpms_trans, lprs_pair, cpms_bind/ qed.
(* Inversion lemmas with t-bound context-sensitive rt-computarion for terms *)
(* Basic_1: was: pr3_gen_abst *)
(* Basic_2A1: includes: cprs_inv_abst1 *)
(* Basic_2A1: uses: scpds_inv_abst1 *)
-lemma cpms_inv_abst_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.
-#n #h #G #L #p #V1 #T1 #X2 #H
+lemma cpms_inv_abst_sn (h) (n) (G) (L):
+ ∀p,V1,T1,X2. ❪G,L❫ ⊢ ⓛ[p]V1.T1 ➡*[h,n] X2 →
+ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡*[h,0] V2 & ❪G,L.ⓛV1❫ ⊢ T1 ➡*[h,n] T2 & X2 = ⓛ[p]V2.T2.
+#h #n #G #L #p #V1 #T1 #X2 #H
@(cpms_ind_dx … H) -X2 /2 width=5 by ex3_2_intro/
#n1 #n2 #X #X2 #_ * #V #T #HV1 #HT1 #H1 #H2 destruct
elim (cpm_inv_abst1 … H2) -H2 #V2 #T2 #HV2 #HT2 #H2 destruct
qed-.
lemma cpms_inv_abst_sn_cprs (h) (n) (p) (G) (L) (W):
- ∀T,X. ❪G,L❫ ⊢ ⓛ[p]W.T ➡*[n,h] X →
- ∃∃U. ❪G,L.ⓛW❫⊢ T ➡*[n,h] U & ❪G,L❫ ⊢ ⓛ[p]W.U ➡*[h] X.
+ ∀T,X. ❪G,L❫ ⊢ ⓛ[p]W.T ➡*[h,n] X →
+ ∃∃U. ❪G,L.ⓛW❫⊢ T ➡*[h,n] U & ❪G,L❫ ⊢ ⓛ[p]W.U ➡*[h,0] X.
#h #n #p #G #L #W #T #X #H
elim (cpms_inv_abst_sn … H) -H #W0 #U #HW0 #HTU #H destruct
@(ex2_intro … HTU) /2 width=1 by cpms_bind/
qed-.
(* Basic_2A1: includes: cprs_inv_abst *)
-lemma cpms_inv_abst_bi (n) (h) (p1) (p2) (G) (L):
- ∀W1,W2,T1,T2. ❪G,L❫ ⊢ ⓛ[p1]W1.T1 ➡*[n,h] ⓛ[p2]W2.T2 →
- ∧∧ p1 = p2 & ❪G,L❫ ⊢ W1 ➡*[h] W2 & ❪G,L.ⓛW1❫ ⊢ T1 ➡*[n,h] T2.
-#n #h #p1 #p2 #G #L #W1 #W2 #T1 #T2 #H
+lemma cpms_inv_abst_bi (h) (n) (p1) (p2) (G) (L):
+ ∀W1,W2,T1,T2. ❪G,L❫ ⊢ ⓛ[p1]W1.T1 ➡*[h,n] ⓛ[p2]W2.T2 →
+ ∧∧ p1 = p2 & ❪G,L❫ ⊢ W1 ➡*[h,0] W2 & ❪G,L.ⓛW1❫ ⊢ T1 ➡*[h,n] T2.
+#h #n #p1 #p2 #G #L #W1 #W2 #T1 #T2 #H
elim (cpms_inv_abst_sn … H) -H #W #T #HW1 #HT1 #H destruct
/2 width=1 by and3_intro/
qed-.
(* Basic_1: was pr3_gen_abbr *)
(* Basic_2A1: includes: cprs_inv_abbr1 *)
-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
+lemma cpms_inv_abbr_sn_dx (h) (n) (G) (L):
+ ∀p,V1,T1,X2. ❪G,L❫ ⊢ ⓓ[p]V1.T1 ➡*[h,n] X2 →
+ ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡*[h,0] V2 & ❪G,L.ⓓV1❫ ⊢ T1 ➡*[h,n] T2 & X2 = ⓓ[p]V2.T2
+ | ∃∃T2. ❪G,L.ⓓV1❫ ⊢ T1 ➡*[h,n] T2 & ⇧[1] X2 ≘ T2 & p = Ⓣ.
+#h #n #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 #_ * *
[ #V #T #HV1 #HT1 #H #HX2 destruct
qed-.
(* Basic_2A1: uses: scpds_inv_abbr_abst *)
-lemma cpms_inv_abbr_abst (n) (h) (G) (L):
- ∀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
+lemma cpms_inv_abbr_abst (h) (n) (G) (L):
+ ∀p1,p2,V1,W2,T1,T2. ❪G,L❫ ⊢ ⓓ[p1]V1.T1 ➡*[h,n] ⓛ[p2]W2.T2 →
+ ∃∃T. ❪G,L.ⓓV1❫ ⊢ T1 ➡*[h,n] T & ⇧[1] ⓛ[p2]W2.T2 ≘ T & p1 = Ⓣ.
+#h #n #G #L #p1 #p2 #V1 #W2 #T1 #T2 #H
elim (cpms_inv_abbr_sn_dx … H) -H *
[ #V #T #_ #_ #H destruct
| /2 width=3 by ex3_intro/
(* Advanced properties ******************************************************)
(* Basic_2A1: was: lprs_pair2 *)
-lemma lprs_pair_dx (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h] L2 →
- ∀V1,V2. ❪G,L2❫ ⊢ V1 ➡*[h] V2 →
- ∀I. ❪G,L1.ⓑ[I]V1❫ ⊢ ➡*[h] L2.ⓑ[I]V2.
+lemma lprs_pair_dx (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h,0] L2 →
+ ∀V1,V2. ❪G,L2❫ ⊢ V1 ➡*[h,0] V2 →
+ ∀I. ❪G,L1.ⓑ[I]V1❫ ⊢ ➡*[h,0] L2.ⓑ[I]V2.
/3 width=3 by lprs_pair, lprs_cpms_trans/ qed.
(* Properties on context-sensitive parallel r-computation for terms *********)
-lemma lprs_cprs_conf_dx (h) (G): ∀L0.∀T0,T1:term. ❪G,L0❫ ⊢ T0 ➡*[h] T1 →
- ∀L1. ❪G,L0❫ ⊢ ➡*[h] L1 →
- ∃∃T. ❪G,L1❫ ⊢ T1 ➡*[h] T & ❪G,L1❫ ⊢ T0 ➡*[h] T.
+lemma lprs_cprs_conf_dx (h) (G): ∀L0.∀T0,T1:term. ❪G,L0❫ ⊢ T0 ➡*[h,0] T1 →
+ ∀L1. ❪G,L0❫ ⊢ ➡*[h,0] L1 →
+ ∃∃T. ❪G,L1❫ ⊢ T1 ➡*[h,0] T & ❪G,L1❫ ⊢ T0 ➡*[h,0] T.
#h #G #L0 #T0 #T1 #HT01 #L1 #H
@(lprs_ind_dx … H) -L1 /2 width=3 by ex2_intro/
#L #L1 #_ #HL1 * #T #HT1 #HT0 -L0
/3 width=5 by cprs_trans, ex2_intro/
qed-.
-lemma lprs_cpr_conf_dx (h) (G): ∀L0. ∀T0,T1:term. ❪G,L0❫ ⊢ T0 ➡[h] T1 →
- ∀L1. ❪G,L0❫ ⊢ ➡*[h] L1 →
- ∃∃T. ❪G,L1❫ ⊢ T1 ➡*[h] T & ❪G,L1❫ ⊢ T0 ➡*[h] T.
+lemma lprs_cpr_conf_dx (h) (G): ∀L0. ∀T0,T1:term. ❪G,L0❫ ⊢ T0 ➡[h,0] T1 →
+ ∀L1. ❪G,L0❫ ⊢ ➡*[h,0] L1 →
+ ∃∃T. ❪G,L1❫ ⊢ T1 ➡*[h,0] T & ❪G,L1❫ ⊢ T0 ➡*[h,0] T.
/3 width=3 by lprs_cprs_conf_dx, cpm_cpms/ qed-.
(* Note: this can be proved on its own using lprs_ind_sn *)
-lemma lprs_cprs_conf_sn (h) (G): ∀L0. ∀T0,T1:term. ❪G,L0❫ ⊢ T0 ➡*[h] T1 →
- ∀L1. ❪G,L0❫ ⊢ ➡*[h] L1 →
- ∃∃T. ❪G,L0❫ ⊢ T1 ➡*[h] T & ❪G,L1❫ ⊢ T0 ➡*[h] T.
+lemma lprs_cprs_conf_sn (h) (G): ∀L0. ∀T0,T1:term. ❪G,L0❫ ⊢ T0 ➡*[h,0] T1 →
+ ∀L1. ❪G,L0❫ ⊢ ➡*[h,0] L1 →
+ ∃∃T. ❪G,L0❫ ⊢ T1 ➡*[h,0] T & ❪G,L1❫ ⊢ T0 ➡*[h,0] T.
#h #G #L0 #T0 #T1 #HT01 #L1 #HL01
elim (lprs_cprs_conf_dx … HT01 … HL01) -HT01
/3 width=3 by lprs_cpms_trans, ex2_intro/
qed-.
-lemma lprs_cpr_conf_sn (h) (G): ∀L0. ∀T0,T1:term. ❪G,L0❫ ⊢ T0 ➡[h] T1 →
- ∀L1. ❪G,L0❫ ⊢ ➡*[h] L1 →
- ∃∃T. ❪G,L0❫ ⊢ T1 ➡*[h] T & ❪G,L1❫ ⊢ T0 ➡*[h] T.
+lemma lprs_cpr_conf_sn (h) (G): ∀L0. ∀T0,T1:term. ❪G,L0❫ ⊢ T0 ➡[h,0] T1 →
+ ∀L1. ❪G,L0❫ ⊢ ➡*[h,0] L1 →
+ ∃∃T. ❪G,L0❫ ⊢ T1 ➡*[h,0] T & ❪G,L1❫ ⊢ T0 ➡*[h,0] T.
/3 width=3 by lprs_cprs_conf_sn, cpm_cpms/ qed-.
(* Properties with contextual transitive closure ****************************)
lemma lprs_CTC (h) (G):
- ∀L1,L2. L1⪤[CTC … (λL. cpm h G L 0)] L2 → ❪G,L1❫⊢ ➡*[h] L2.
+ ∀L1,L2. L1⪤[CTC … (λL. cpm h G L 0)] L2 → ❪G,L1❫⊢ ➡*[h,0] L2.
/3 width=3 by cprs_CTC, lex_co/ qed.
(* Inversion lemmas with contextual transitive closure **********************)
lemma lprs_inv_CTC (h) (G):
- ∀L1,L2. ❪G,L1❫⊢ ➡*[h] L2 → L1⪤[CTC … (λL. cpm h G L 0)] L2.
+ ∀L1,L2. ❪G,L1❫⊢ ➡*[h,0] L2 → L1⪤[CTC … (λL. cpm h G L 0)] L2.
/3 width=3 by cprs_inv_CTC, lex_co/ qed-.
(* Forward lemmas with length for local environments ************************)
-lemma lprs_fwd_length (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h] L2 → |L1| = |L2|.
+lemma lprs_fwd_length (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h,0] L2 → |L1| = |L2|.
/2 width=2 by lex_fwd_length/ qed-.
(* Eliminators with r-transition for full local environments ****************)
(* Basic_2A1: was: lprs_ind_dx *)
-lemma lprs_ind_sn (h) (G) (L2): ∀Q:predicate lenv. Q L2 →
- (∀L1,L. ❪G,L1❫ ⊢ ➡[h] L → ❪G,L❫ ⊢ ➡*[h] L2 → Q L → Q L1) →
- ∀L1. ❪G,L1❫ ⊢ ➡*[h] L2 → Q L1.
+lemma lprs_ind_sn (h) (G) (L2):
+ ∀Q:predicate lenv. Q L2 →
+ (∀L1,L. ❪G,L1❫ ⊢ ➡[h,0] L → ❪G,L❫ ⊢ ➡*[h,0] L2 → Q L → Q L1) →
+ ∀L1. ❪G,L1❫ ⊢ ➡*[h,0] L2 → Q L1.
/4 width=8 by lprs_inv_CTC, lprs_CTC, lpr_cprs_trans, cpr_refl, lex_CTC_ind_sn/ qed-.
(* Basic_2A1: was: lprs_ind *)
-lemma lprs_ind_dx (h) (G) (L1): ∀Q:predicate lenv. Q L1 →
- (∀L,L2. ❪G,L1❫ ⊢ ➡*[h] L → ❪G,L❫ ⊢ ➡[h] L2 → Q L → Q L2) →
- ∀L2. ❪G,L1❫ ⊢ ➡*[h] L2 → Q L2.
+lemma lprs_ind_dx (h) (G) (L1):
+ ∀Q:predicate lenv. Q L1 →
+ (∀L,L2. ❪G,L1❫ ⊢ ➡*[h,0] L → ❪G,L❫ ⊢ ➡[h,0] L2 → Q L → Q L2) →
+ ∀L2. ❪G,L1❫ ⊢ ➡*[h,0] L2 → Q L2.
/4 width=8 by lprs_inv_CTC, lprs_CTC, lpr_cprs_trans, cpr_refl, lex_CTC_ind_dx/ qed-.
(* Properties with unbound rt-transition for full local environments ********)
-lemma lpr_lprs (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h] L2 → ❪G,L1❫ ⊢ ➡*[h] L2.
+lemma lpr_lprs (h) (G):
+ ∀L1,L2. ❪G,L1❫ ⊢ ➡[h,0] L2 → ❪G,L1❫ ⊢ ➡*[h,0] L2.
/4 width=3 by lprs_CTC, lpr_cprs_trans, lex_CTC_inj/ qed.
(* Basic_2A1: was: lprs_strap2 *)
-lemma lprs_step_sn (h) (G): ∀L1,L. ❪G,L1❫ ⊢ ➡[h] L →
- ∀L2.❪G,L❫ ⊢ ➡*[h] L2 → ❪G,L1❫ ⊢ ➡*[h] L2.
+lemma lprs_step_sn (h) (G):
+ ∀L1,L. ❪G,L1❫ ⊢ ➡[h,0] L →
+ ∀L2.❪G,L❫ ⊢ ➡*[h,0] L2 → ❪G,L1❫ ⊢ ➡*[h,0] L2.
/4 width=3 by lprs_inv_CTC, lprs_CTC, lpr_cprs_trans, lex_CTC_step_sn/ qed-.
(* Basic_2A1: was: lpxs_strap1 *)
-lemma lprs_step_dx (h) (G): ∀L1,L. ❪G,L1❫ ⊢ ➡*[h] L →
- ∀L2. ❪G,L❫ ⊢ ➡[h] L2 → ❪G,L1❫ ⊢ ➡*[h] L2.
+lemma lprs_step_dx (h) (G):
+ ∀L1,L. ❪G,L1❫ ⊢ ➡*[h,0] L →
+ ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 → ❪G,L1❫ ⊢ ➡*[h,0] L2.
/4 width=3 by lprs_inv_CTC, lprs_CTC, lpr_cprs_trans, lex_CTC_step_dx/ qed-.
-lemma lprs_strip (h) (G): confluent2 … (lprs h G) (lpr h G).
+lemma lprs_strip (h) (G):
+ confluent2 … (lprs h 0 G) (lpr h 0 G).
#h #G #L0 #L1 #HL01 #L2 #HL02
elim (TC_strip1 … L1 ?? HL02) -HL02
[ /3 width=3 by lprs_TC, ex2_intro/ | skip
(* Main properties **********************************************************)
-theorem lprs_trans (h) (G): Transitive … (lprs h G).
+theorem lprs_trans (h) (G): Transitive … (lprs h 0 G).
/4 width=5 by lprs_cpms_trans, cprs_trans, lex_trans/ qed-.
-theorem lprs_conf (h) (G): confluent2 … (lprs h G) (lprs h G).
+theorem lprs_conf (h) (G): confluent2 … (lprs h 0 G) (lprs h 0 G).
#h #G #L0 #L1 #HL01 #L2 #HL02
elim (TC_confluent2 … L0 L1 … L2)
[ /3 width=3 by lprs_TC, ex2_intro/ |5,6: skip
(* Basic_2A1: was: lprs_lpxs *)
(* Note: original proof uses lpr_fwd_lpx and monotonic_TC *)
-lemma lprs_fwd_lpxs (h) (G) : ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h] L2 → ❪G,L1❫ ⊢ ⬈*[h] L2.
+lemma lprs_fwd_lpxs (h) (G) : ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h,0] L2 → ❪G,L1❫ ⊢ ⬈*[h] L2.
/3 width=3 by cpms_fwd_cpxs, lex_co/ qed-.
(* Properties with transitive closure ***************************************)
lemma lprs_TC (h) (G):
- ∀L1,L2. TC … (lex (λL.cpm h G L 0)) L1 L2 → ❪G,L1❫⊢ ➡*[h] L2.
+ ∀L1,L2. TC … (lex (λL.cpm h G L 0)) L1 L2 → ❪G,L1❫⊢ ➡*[h,0] L2.
/4 width=3 by lprs_CTC, lex_CTC, lpr_cprs_trans/ qed.
(* Inversion lemmas with transitive closure *********************************)
lemma lprs_inv_TC (h) (G):
- ∀L1,L2. ❪G,L1❫⊢ ➡*[h] L2 → TC … (lex (λL.cpm h G L 0)) L1 L2.
+ ∀L1,L2. ❪G,L1❫⊢ ➡*[h,0] L2 → TC … (lex (λL.cpm h G L 0)) L1 L2.
/3 width=3 by lprs_inv_CTC, lex_inv_CTC/ qed-.
(* CONTEXT-SENSITIVE PARALLEL R-CONVERSION FOR TERMS ************************)
definition cpc: sh → relation4 genv lenv term term ≝
- λh,G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡[h] T2 ∨ ❪G,L❫ ⊢ T2 ➡[h] T1.
+ λh,G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡[h,0] T2 ∨ ❪G,L❫ ⊢ T2 ➡[h,0] T1.
interpretation
"context-sensitive parallel r-conversion (term)"
(* Basic forward lemmas *****************************************************)
lemma cpc_fwd_cpr: ∀h,G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬌[h] T2 →
- ∃∃T. ❪G,L❫ ⊢ T1 ➡[h] T & ❪G,L❫ ⊢ T2 ➡[h] T.
+ ∃∃T. ❪G,L❫ ⊢ T1 ➡[h,0] T & ❪G,L❫ ⊢ T2 ➡[h,0] T.
#h #G #L #T1 #T2 * /2 width=3 by ex2_intro/
qed-.
qed-.
(* Basic_1: was: pc3_pr2_r *)
-lemma cpr_cpcs_dx (h) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
+lemma cpr_cpcs_dx (h) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[h,0] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
/3 width=1 by cpc_cpcs, or_introl/ qed.
(* Basic_1: was: pc3_pr2_x *)
-lemma cpr_cpcs_sn (h) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T2 ➡[h] T1 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
+lemma cpr_cpcs_sn (h) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T2 ➡[h,0] T1 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
/3 width=1 by cpc_cpcs, or_intror/ qed.
(* Basic_1: was: pc3_pr2_u *)
(* Basic_2A1: was: cpcs_cpr_strap2 *)
-lemma cpcs_cpr_step_sn (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ➡[h] T → ∀T2. ❪G,L❫ ⊢ T ⬌*[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
+lemma cpcs_cpr_step_sn (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ➡[h,0] T → ∀T2. ❪G,L❫ ⊢ T ⬌*[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
/3 width=3 by cpcs_step_sn, or_introl/ qed-.
(* Basic_2A1: was: cpcs_cpr_strap1 *)
lemma cpcs_cpr_step_dx (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ⬌*[h] T →
- ∀T2. ❪G,L❫ ⊢ T ➡[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
+ ∀T2. ❪G,L❫ ⊢ T ➡[h,0] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
/3 width=3 by cpcs_step_dx, or_introl/ qed-.
lemma cpcs_cpr_div (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ⬌*[h] T →
- ∀T2. ❪G,L❫ ⊢ T2 ➡[h] T → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
+ ∀T2. ❪G,L❫ ⊢ T2 ➡[h,0] T → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
/3 width=3 by cpcs_step_dx, or_intror/ qed-.
-lemma cpr_div (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ➡[h] T →
- ∀T2. ❪G,L❫ ⊢ T2 ➡[h] T → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
+lemma cpr_div (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ➡[h,0] T →
+ ∀T2. ❪G,L❫ ⊢ T2 ➡[h,0] T → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
/3 width=3 by cpr_cpcs_dx, cpcs_step_dx, or_intror/ qed-.
(* Basic_1: was: pc3_pr2_u2 *)
-lemma cpcs_cpr_conf (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T ➡[h] T1 →
+lemma cpcs_cpr_conf (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T ➡[h,0] T1 →
∀T2. ❪G,L❫ ⊢ T ⬌*[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
/3 width=3 by cpcs_step_sn, or_intror/ qed-.
(* Advanced properties with r-transition for full local environments ********)
(* Basic_1: was: pc3_wcpr0 *)
-lemma lpr_cpcs_conf (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h] L2 →
+lemma lpr_cpcs_conf (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h,0] L2 →
∀T1,T2. ❪G,L1❫ ⊢ T1 ⬌*[h] T2 → ❪G,L2❫ ⊢ T1 ⬌*[h] T2.
#h #G #L1 #L2 #HL12 #T1 #T2 #H elim (cpcs_inv_cprs … H) -H
/3 width=5 by cpcs_canc_dx, lpr_cprs_conf/
(* Inversion lemmas with context sensitive r-computation on terms ***********)
lemma cpcs_inv_cprs (h) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T1 ⬌*[h] T2 →
- ∃∃T. ❪G,L❫ ⊢ T1 ➡*[h] T & ❪G,L❫ ⊢ T2 ➡*[h] T.
+ ∃∃T. ❪G,L❫ ⊢ T1 ➡*[h,0] T & ❪G,L❫ ⊢ T2 ➡*[h,0] T.
#h #G #L #T1 #T2 #H @(cpcs_ind_dx … H) -T2
[ /3 width=3 by ex2_intro/
| #T #T2 #_ #HT2 * #T0 #HT10 elim HT2 -HT2 #HT2 #HT0
(* Basic_2A1: was: cpcs_inv_abst1 *)
lemma cpcs_inv_abst_sn (h) (G) (L):
∀p,W1,T1,X. ❪G,L❫ ⊢ ⓛ[p]W1.T1 ⬌*[h] X →
- ∃∃W2,T2. ❪G,L❫ ⊢ X ➡*[h] ⓛ[p]W2.T2 & ❪G,L❫ ⊢ ⓛ[p]W1.T1 ➡*[h] ⓛ[p]W2.T2.
+ ∃∃W2,T2. ❪G,L❫ ⊢ X ➡*[h,0] ⓛ[p]W2.T2 & ❪G,L❫ ⊢ ⓛ[p]W1.T1 ➡*[h,0] ⓛ[p]W2.T2.
#h #G #L #p #W1 #T1 #T #H
elim (cpcs_inv_cprs … H) -H #X #H1 #H2
elim (cpms_inv_abst_sn … H1) -H1 #W2 #T2 #HW12 #HT12 #H destruct
(* Basic_2A1: was: cpcs_inv_abst2 *)
lemma cpcs_inv_abst_dx (h) (G) (L):
∀p,W1,T1,X. ❪G,L❫ ⊢ X ⬌*[h] ⓛ[p]W1.T1 →
- ∃∃W2,T2. ❪G,L❫ ⊢ X ➡*[h] ⓛ[p]W2.T2 & ❪G,L❫ ⊢ ⓛ[p]W1.T1 ➡*[h] ⓛ[p]W2.T2.
+ ∃∃W2,T2. ❪G,L❫ ⊢ X ➡*[h,0] ⓛ[p]W2.T2 & ❪G,L❫ ⊢ ⓛ[p]W1.T1 ➡*[h,0] ⓛ[p]W2.T2.
/3 width=1 by cpcs_inv_abst_sn, cpcs_sym/ qed-.
(* Basic_1: was: pc3_gen_sort_abst *)
(* Properties with context sensitive r-computation on terms *****************)
(* Basic_1: was: pc3_pr3_r *)
-lemma cpcs_cprs_dx (h) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
+lemma cpcs_cprs_dx (h) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,0] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
#h #G #L #T1 #T2 #H @(cprs_ind_dx … H) -T2
/3 width=3 by cpcs_cpr_step_dx, cpcs_step_dx, cpc_cpcs/
qed.
(* Basic_1: was: pc3_pr3_x *)
-lemma cpcs_cprs_sn (h) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T2 ➡*[h] T1 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
+lemma cpcs_cprs_sn (h) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T2 ➡*[h,0] T1 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
#h #G #L #T1 #T2 #H @(cprs_ind_sn … H) -T2
/3 width=3 by cpcs_cpr_div, cpcs_step_sn, cpcs_cprs_dx/
qed.
(* Basic_2A1: was: cpcs_cprs_strap1 *)
lemma cpcs_cprs_step_dx (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ⬌*[h] T →
- ∀T2. ❪G,L❫ ⊢ T ➡*[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
+ ∀T2. ❪G,L❫ ⊢ T ➡*[h,0] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
#h #G #L #T1 #T #HT1 #T2 #H @(cprs_ind_dx … H) -T2 /2 width=3 by cpcs_cpr_step_dx/
qed-.
(* Basic_2A1: was: cpcs_cprs_strap2 *)
-lemma cpcs_cprs_step_sn (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ➡*[h] T →
+lemma cpcs_cprs_step_sn (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ➡*[h,0] T →
∀T2. ❪G,L❫ ⊢ T ⬌*[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
#h #G #L #T1 #T #H #T2 #HT2 @(cprs_ind_sn … H) -T1 /2 width=3 by cpcs_cpr_step_sn/
qed-.
lemma cpcs_cprs_div (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ⬌*[h] T →
- ∀T2. ❪G,L❫ ⊢ T2 ➡*[h] T → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
+ ∀T2. ❪G,L❫ ⊢ T2 ➡*[h,0] T → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
#h #G #L #T1 #T #HT1 #T2 #H @(cprs_ind_sn … H) -T2 /2 width=3 by cpcs_cpr_div/
qed-.
(* Basic_1: was: pc3_pr3_conf *)
-lemma cpcs_cprs_conf (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T ➡*[h] T1 →
+lemma cpcs_cprs_conf (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T ➡*[h,0] T1 →
∀T2. ❪G,L❫ ⊢ T ⬌*[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
#h #G #L #T1 #T #H #T2 #HT2 @(cprs_ind_dx … H) -T1 /2 width=3 by cpcs_cpr_conf/
qed-.
(* Basic_1: was: pc3_pr3_t *)
(* Basic_1: note: pc3_pr3_t should be renamed *)
-lemma cprs_div (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ➡*[h] T →
- ∀T2. ❪G,L❫ ⊢ T2 ➡*[h] T → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
+lemma cprs_div (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ➡*[h,0] T →
+ ∀T2. ❪G,L❫ ⊢ T2 ➡*[h,0] T → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
#h #G #L #T1 #T #HT1 #T2 #H @(cprs_ind_sn … H) -T2
/2 width=3 by cpcs_cpr_div, cpcs_cprs_dx/
qed.
-lemma cprs_cpr_div (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ➡*[h] T →
- ∀T2. ❪G,L❫ ⊢ T2 ➡[h] T → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
+lemma cprs_cpr_div (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ➡*[h,0] T →
+ ∀T2. ❪G,L❫ ⊢ T2 ➡[h,0] T → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
/3 width=5 by cpm_cpms, cprs_div/ qed-.
-lemma cpr_cprs_div (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ➡[h] T →
- ∀T2. ❪G,L❫ ⊢ T2 ➡*[h] T → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
+lemma cpr_cprs_div (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ➡[h,0] T →
+ ∀T2. ❪G,L❫ ⊢ T2 ➡*[h,0] T → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
/3 width=3 by cpm_cpms, cprs_div/ qed-.
-lemma cpr_cprs_conf_cpcs (h) (G) (L): ∀T,T1. ❪G,L❫ ⊢ T ➡*[h] T1 →
- ∀T2. ❪G,L❫ ⊢ T ➡[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
+lemma cpr_cprs_conf_cpcs (h) (G) (L): ∀T,T1. ❪G,L❫ ⊢ T ➡*[h,0] T1 →
+ ∀T2. ❪G,L❫ ⊢ T ➡[h,0] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
#h #G #L #T #T1 #HT1 #T2 #HT2 elim (cprs_strip … HT1 … HT2) -HT1 -HT2
/2 width=3 by cpr_cprs_div/
qed-.
-lemma cprs_cpr_conf_cpcs (h) (G) (L): ∀T,T1. ❪G,L❫ ⊢ T ➡*[h] T1 →
- ∀T2. ❪G,L❫ ⊢ T ➡[h] T2 → ❪G,L❫ ⊢ T2 ⬌*[h] T1.
+lemma cprs_cpr_conf_cpcs (h) (G) (L): ∀T,T1. ❪G,L❫ ⊢ T ➡*[h,0] T1 →
+ ∀T2. ❪G,L❫ ⊢ T ➡[h,0] T2 → ❪G,L❫ ⊢ T2 ⬌*[h] T1.
#h #G #L #T #T1 #HT1 #T2 #HT2 elim (cprs_strip … HT1 … HT2) -HT1 -HT2
/2 width=3 by cprs_cpr_div/
qed-.
-lemma cprs_conf_cpcs (h) (G) (L): ∀T,T1. ❪G,L❫ ⊢ T ➡*[h] T1 →
- ∀T2. ❪G,L❫ ⊢ T ➡*[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
+lemma cprs_conf_cpcs (h) (G) (L): ∀T,T1. ❪G,L❫ ⊢ T ➡*[h,0] T1 →
+ ∀T2. ❪G,L❫ ⊢ T ➡*[h,0] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2.
#h #G #L #T #T1 #HT1 #T2 #HT2 elim (cprs_conf … HT1 … HT2) -HT1 -HT2
/2 width=3 by cprs_div/
qed-.
/3 width=5 by cprs_flat, cprs_div/
qed.
-lemma cpcs_flat_dx_cpr_rev (h) (G) (L): ∀V1,V2. ❪G,L❫ ⊢ V2 ➡[h] V1 →
+lemma cpcs_flat_dx_cpr_rev (h) (G) (L): ∀V1,V2. ❪G,L❫ ⊢ V2 ➡[h,0] V1 →
∀T1,T2. ❪G,L❫ ⊢ T1 ⬌*[h] T2 →
∀I. ❪G,L❫ ⊢ ⓕ[I]V1.T1 ⬌*[h] ⓕ[I]V2.T2.
/3 width=1 by cpr_cpcs_sn, cpcs_flat/ qed.
(* Properties with parallel r-computation for full local environments *******)
-lemma lpr_cpcs_trans (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h] L2 →
+lemma lpr_cpcs_trans (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h,0] L2 →
∀T1,T2. ❪G,L2❫ ⊢ T1 ⬌*[h] T2 → ❪G,L1❫ ⊢ T1 ⬌*[h] T2.
#h #G #L1 #L2 #HL12 #T1 #T2 #H elim (cpcs_inv_cprs … H) -H
/4 width=5 by cprs_div, lpr_cpms_trans/
qed-.
-lemma lprs_cpcs_trans (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h] L2 →
+lemma lprs_cpcs_trans (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h,0] L2 →
∀T1,T2. ❪G,L2❫ ⊢ T1 ⬌*[h] T2 → ❪G,L1❫ ⊢ T1 ⬌*[h] T2.
#h #G #L1 #L2 #HL12 #T1 #T2 #H elim (cpcs_inv_cprs … H) -H
/4 width=5 by cprs_div, lprs_cpms_trans/
qed-.
-lemma lprs_cprs_conf (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h] L2 →
- ∀T1,T2. ❪G,L1❫ ⊢ T1 ➡*[h] T2 → ❪G,L2❫ ⊢ T1 ⬌*[h] T2.
+lemma lprs_cprs_conf (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h,0] L2 →
+ ∀T1,T2. ❪G,L1❫ ⊢ T1 ➡*[h,0] T2 → ❪G,L2❫ ⊢ T1 ⬌*[h] T2.
#h #G #L1 #L2 #HL12 #T1 #T2 #HT12 elim (lprs_cprs_conf_dx … HT12 … HL12) -L1
/2 width=3 by cprs_div/
qed-.
(* Basic_1: was: pc3_wcpr0_t *)
(* Basic_1: note: pc3_wcpr0_t should be renamed *)
(* Note: alternative proof /3 width=5 by lprs_cprs_conf, lpr_lprs/ *)
-lemma lpr_cprs_conf (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h] L2 →
- ∀T1,T2. ❪G,L1❫ ⊢ T1 ➡*[h] T2 → ❪G,L2❫ ⊢ T1 ⬌*[h] T2.
+lemma lpr_cprs_conf (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h,0] L2 →
+ ∀T1,T2. ❪G,L1❫ ⊢ T1 ➡*[h,0] T2 → ❪G,L2❫ ⊢ T1 ⬌*[h] T2.
#h #G #L1 #L2 #HL12 #T1 #T2 #HT12 elim (cprs_lpr_conf_dx … HT12 … HL12) -L1
/2 width=3 by cprs_div/
qed-.
(* Basic_1: was only: pc3_pr0_pr2_t *)
(* Basic_1: note: pc3_pr0_pr2_t should be renamed *)
-lemma lpr_cpr_conf (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h] L2 →
- ∀T1,T2. ❪G,L1❫ ⊢ T1 ➡[h] T2 → ❪G,L2❫ ⊢ T1 ⬌*[h] T2.
+lemma lpr_cpr_conf (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h,0] L2 →
+ ∀T1,T2. ❪G,L1❫ ⊢ T1 ➡[h,0] T2 → ❪G,L2❫ ⊢ T1 ⬌*[h] T2.
/3 width=5 by lpr_cprs_conf, cpm_cpms/ qed-.
(* Advanced inversion lemmas ************************************************)
(* Basic_2A1: uses: scpes *)
definition cpes (h) (n1) (n2): relation4 genv lenv term term ≝
λG,L,T1,T2.
- ∃∃T. ❪G,L❫ ⊢ T1 ➡*[n1,h] T & ❪G,L❫ ⊢ T2 ➡*[n2,h] T.
+ ∃∃T. ❪G,L❫ ⊢ T1 ➡*[h,n1] T & ❪G,L❫ ⊢ T2 ➡*[h,n2] T.
interpretation "t-bound context-sensitive parallel rt-equivalence (term)"
'PConvStar h n1 n2 G L T1 T2 = (cpes h n1 n2 G L T1 T2).
(* Basic_2A1: uses: scpds_div *)
lemma cpms_div (h) (n1) (n2):
- ∀G,L,T1,T. ❪G,L❫ ⊢ T1 ➡*[n1,h] T →
- ∀T2. ❪G,L❫ ⊢ T2 ➡*[n2,h] T → ❪G,L❫ ⊢ T1 ⬌*[h,n1,n2] T2.
+ ∀G,L,T1,T. ❪G,L❫ ⊢ T1 ➡*[h,n1] T →
+ ∀T2. ❪G,L❫ ⊢ T2 ➡*[h,n2] T → ❪G,L❫ ⊢ T1 ⬌*[h,n1,n2] T2.
/2 width=3 by ex2_intro/ qed.
lemma cpes_refl (h): ∀G,L. reflexive … (cpes h 0 0 G L).
lemma cpes_cprs_trans (h) (n) (G) (L) (T0):
∀T1. ❪G,L❫ ⊢ T1 ⬌*[h,n,0] T0 →
- ∀T2. ❪G,L❫ ⊢ T0 ➡*[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h,n,0] T2.
+ ∀T2. ❪G,L❫ ⊢ T0 ➡*[h,0] T2 → ❪G,L❫ ⊢ T1 ⬌*[h,n,0] T2.
#h #n #G #L #T0 #T1 * #T #HT1 #HT0 #T2 #HT02
elim (cprs_conf … HT0 … HT02) -T0 #T0 #HT0 #HT20
/3 width=3 by cpms_div, cpms_cprs_trans/
lemma cpes_cpms_div (h) (n) (n1) (n2) (G) (L) (T0):
∀T1. ❪G,L❫ ⊢ T1 ⬌*[h,n,n1] T0 →
- ∀T2. ❪G,L❫ ⊢ T2 ➡*[n2,h] T0 → ❪G,L❫ ⊢ T1 ⬌*[h,n,n2+n1] T2.
+ ∀T2. ❪G,L❫ ⊢ T2 ➡*[h,n2] T0 → ❪G,L❫ ⊢ T1 ⬌*[h,n,n2+n1] T2.
#h #n #n1 #n2 #G #L #T0 #T1 * #T #HT1 #HT0 #T2 #HT20
lapply (cpms_trans … HT20 … HT0) -T0 #HT2
/2 width=3 by cpms_div/
(* *)
(**************************************************************************)
-include "basic_2/notation/relations/prednormal_4.ma".
+include "basic_2/notation/relations/prednormal_5.ma".
include "basic_2/rt_transition/cpr.ma".
(* NORMAL TERMS FOR CONTEXT-SENSITIVE R-TRANSITION **************************)
-definition cnr (h) (G) (L): predicate term ≝ NF … (cpm h G L 0) (eq …).
+definition cnr (h) (n) (G) (L): predicate term ≝
+ NF … (cpm h G L n) (eq …).
interpretation
"normality for context-sensitive r-transition (term)"
- 'PRedNormal h G L T = (cnr h G L T).
+ 'PRedNormal h n G L T = (cnr h n G L T).
(* Basic inversion lemmas ***************************************************)
lemma cnr_inv_abst (h) (p) (G) (L):
- ∀V,T. ❪G,L❫ ⊢ ➡[h] 𝐍❪ⓛ[p]V.T❫ → ∧∧ ❪G,L❫ ⊢ ➡[h] 𝐍❪V❫ & ❪G,L.ⓛV❫ ⊢ ➡[h] 𝐍❪T❫.
+ ∀V,T. ❪G,L❫ ⊢ ➡𝐍[h,0] ⓛ[p]V.T →
+ ∧∧ ❪G,L❫ ⊢ ➡𝐍[h,0] V & ❪G,L.ⓛV❫ ⊢ ➡𝐍[h,0] T.
#h #p #G #L #V1 #T1 #HVT1 @conj
[ #V2 #HV2 lapply (HVT1 (ⓛ[p]V2.T1) ?) -HVT1 /2 width=2 by cpr_pair_sn/ -HV2 #H destruct //
| #T2 #HT2 lapply (HVT1 (ⓛ[p]V1.T2) ?) -HVT1 /2 width=2 by cpm_bind/ -HT2 #H destruct //
(* Basic_2A1: was: cnr_inv_abbr *)
lemma cnr_inv_abbr_neg (h) (G) (L):
- ∀V,T. ❪G,L❫ ⊢ ➡[h] 𝐍❪-ⓓV.T❫ → ∧∧ ❪G,L❫ ⊢ ➡[h] 𝐍❪V❫ & ❪G,L.ⓓV❫ ⊢ ➡[h] 𝐍❪T❫.
+ ∀V,T. ❪G,L❫ ⊢ ➡𝐍[h,0] -ⓓV.T →
+ ∧∧ ❪G,L❫ ⊢ ➡𝐍[h,0] V & ❪G,L.ⓓV❫ ⊢ ➡𝐍[h,0] T.
#h #G #L #V1 #T1 #HVT1 @conj
[ #V2 #HV2 lapply (HVT1 (-ⓓV2.T1) ?) -HVT1 /2 width=2 by cpr_pair_sn/ -HV2 #H destruct //
| #T2 #HT2 lapply (HVT1 (-ⓓV1.T2) ?) -HVT1 /2 width=2 by cpm_bind/ -HT2 #H destruct //
qed-.
(* Basic_2A1: was: cnr_inv_eps *)
-lemma cnr_inv_cast (h) (G) (L): ∀V,T. ❪G,L❫ ⊢ ➡[h] 𝐍❪ⓝV.T❫ → ⊥.
+lemma cnr_inv_cast (h) (G) (L):
+ ∀V,T. ❪G,L❫ ⊢ ➡𝐍[h,0] ⓝV.T → ⊥.
#h #G #L #V #T #H lapply (H T ?) -H
/2 width=4 by cpm_eps, discr_tpair_xy_y/
qed-.
(* Basic properties *********************************************************)
(* Basic_1: was: nf2_sort *)
-lemma cnr_sort (h) (G) (L): ∀s. ❪G,L❫ ⊢ ➡[h] 𝐍❪⋆s❫.
+lemma cnr_sort (h) (G) (L):
+ ∀s. ❪G,L❫ ⊢ ➡𝐍[h,0] ⋆s.
#h #G #L #s #X #H
>(cpr_inv_sort1 … H) //
qed.
-lemma cnr_gref (h) (G) (L): ∀l. ❪G,L❫ ⊢ ➡[h] 𝐍❪§l❫.
+lemma cnr_gref (h) (G) (L):
+ ∀l. ❪G,L❫ ⊢ ➡𝐍[h,0] §l.
#h #G #L #l #X #H
>(cpr_inv_gref1 … H) //
qed.
(* Basic_1: was: nf2_abst *)
lemma cnr_abst (h) (p) (G) (L):
- ∀W,T. ❪G,L❫ ⊢ ➡[h] 𝐍❪W❫ → ❪G,L.ⓛW❫ ⊢ ➡[h] 𝐍❪T❫ → ❪G,L❫ ⊢ ➡[h] 𝐍❪ⓛ[p]W.T❫.
+ ∀W,T. ❪G,L❫ ⊢ ➡𝐍[h,0] W → ❪G,L.ⓛW❫ ⊢ ➡𝐍[h,0] T → ❪G,L❫ ⊢ ➡𝐍[h,0] ⓛ[p]W.T.
#h #p #G #L #W #T #HW #HT #X #H
elim (cpm_inv_abst1 … H) -H #W0 #T0 #HW0 #HT0 #H destruct
<(HW … HW0) -W0 <(HT … HT0) -T0 //
qed.
lemma cnr_abbr_neg (h) (G) (L):
- ∀V,T. ❪G,L❫ ⊢ ➡[h] 𝐍❪V❫ → ❪G,L.ⓓV❫ ⊢ ➡[h] 𝐍❪T❫ → ❪G,L❫ ⊢ ➡[h] 𝐍❪-ⓓV.T❫.
+ ∀V,T. ❪G,L❫ ⊢ ➡𝐍[h,0] V → ❪G,L.ⓓV❫ ⊢ ➡𝐍[h,0] T → ❪G,L❫ ⊢ ➡𝐍[h,0] -ⓓV.T.
#h #G #L #V #T #HV #HT #X #H
elim (cpm_inv_abbr1 … H) -H *
[ #V0 #T0 #HV0 #HT0 #H destruct
(* Basic_1: was only: nf2_csort_lref *)
lemma cnr_lref_atom (h) (b) (G) (L):
- ∀i. ⇩*[b,𝐔❨i❩] L ≘ ⋆ → ❪G,L❫ ⊢ ➡[h] 𝐍❪#i❫.
+ ∀i. ⇩*[b,𝐔❨i❩] L ≘ ⋆ → ❪G,L❫ ⊢ ➡𝐍[h,0] #i.
#h #b #G #L #i #Hi #X #H
elim (cpr_inv_lref1_drops … H) -H // * #K #V1 #V2 #HLK
lapply (drops_gen b … HLK) -HLK #HLK
(* Basic_1: was: nf2_lref_abst *)
lemma cnr_lref_abst (h) (G) (L):
- ∀K,V,i. ⇩[i] L ≘ K.ⓛV → ❪G,L❫ ⊢ ➡[h] 𝐍❪#i❫.
+ ∀K,V,i. ⇩[i] L ≘ K.ⓛV → ❪G,L❫ ⊢ ➡𝐍[h,0] #i.
#h #G #L #K #V #i #HLK #X #H
elim (cpr_inv_lref1_drops … H) -H // *
#K0 #V1 #V2 #HLK0 #_ #_
qed.
lemma cnr_lref_unit (h) (I) (G) (L):
- ∀K,i. ⇩[i] L ≘ K.ⓤ[I] → ❪G,L❫ ⊢ ➡[h] 𝐍❪#i❫.
+ ∀K,i. ⇩[i] L ≘ K.ⓤ[I] → ❪G,L❫ ⊢ ➡𝐍[h,0] #i.
#h #I #G #L #K #i #HLK #X #H
elim (cpr_inv_lref1_drops … H) -H // *
#K0 #V1 #V2 #HLK0 #_ #_
(* Basic_1: was: nf2_lift *)
(* Basic_2A1: uses: cnr_lift *)
-lemma cnr_lifts (h) (G): d_liftable1 … (cnr h G).
+lemma cnr_lifts (h) (G): d_liftable1 … (cnr h 0 G).
#h #G #K #T #HT #b #f #L #HLK #U #HTU #U0 #H
elim (cpm_inv_lifts_sn … H … HLK … HTU) -b -L #T0 #HTU0 #HT0
lapply (HT … HT0) -G -K #H destruct /2 width=4 by lifts_mono/
(* Basic_2A1: was: cnr_inv_delta *)
lemma cnr_inv_lref_abbr (h) (G) (L):
- ∀K,V,i. ⇩[i] L ≘ K.ⓓV → ❪G,L❫ ⊢ ➡[h] 𝐍❪#i❫ → ⊥.
+ ∀K,V,i. ⇩[i] L ≘ K.ⓓV → ❪G,L❫ ⊢ ➡𝐍[h,0] #i → ⊥.
#h #G #L #K #V #i #HLK #H
elim (lifts_total V 𝐔❨↑i❩) #W #HVW
lapply (H W ?) -H [ /3 width=6 by cpm_delta_drops/ ] -HLK #H destruct
(* Note: this was missing in Basic_1 *)
(* Basic_2A1: uses: cnr_inv_lift *)
-lemma cnr_inv_lifts (h) (G): d_deliftable1 … (cnr h G).
+lemma cnr_inv_lifts (h) (G): d_deliftable1 … (cnr h 0 G).
#h #G #L #U #HU #b #f #K #HLK #T #HTU #T0 #H
elim (cpm_lifts_sn … H … HLK … HTU) -b -K #U0 #HTU0 #HU0
lapply (HU … HU0) -G -L #H destruct /2 width=4 by lifts_inj/
(* Inversion lemmas with simple terms ***************************************)
lemma cnr_inv_appl (h) (G) (L):
- ∀V,T. ❪G,L❫ ⊢ ➡[h] 𝐍❪ⓐV.T❫ → ∧∧ ❪G,L❫ ⊢ ➡[h] 𝐍❪V❫ & ❪G,L❫ ⊢ ➡[h] 𝐍❪T❫ & 𝐒❪T❫.
+ ∀V,T. ❪G,L❫ ⊢ ➡𝐍[h,0] ⓐV.T →
+ ∧∧ ❪G,L❫ ⊢ ➡𝐍[h,0] V & ❪G,L❫ ⊢ ➡𝐍[h,0] T & 𝐒❪T❫.
#h #G #L #V1 #T1 #HVT1 @and3_intro
[ #V2 #HV2 lapply (HVT1 (ⓐV2.T1) ?) -HVT1 /2 width=1 by cpr_pair_sn/ -HV2 #H destruct //
| #T2 #HT2 lapply (HVT1 (ⓐV1.T2) ?) -HVT1 /2 width=1 by cpr_flat/ -HT2 #H destruct //
(* Basic_1: was only: nf2_appl_lref *)
lemma cnr_appl_simple (h) (G) (L):
- ∀V,T. ❪G,L❫ ⊢ ➡[h] 𝐍❪V❫ → ❪G,L❫ ⊢ ➡[h] 𝐍❪T❫ → 𝐒❪T❫ → ❪G,L❫ ⊢ ➡[h] 𝐍❪ⓐV.T❫.
+ ∀V,T. ❪G,L❫ ⊢ ➡𝐍[h,0] V → ❪G,L❫ ⊢ ➡𝐍[h,0] T → 𝐒❪T❫ → ❪G,L❫ ⊢ ➡𝐍[h,0] ⓐV.T.
#h #G #L #V #T #HV #HT #HS #X #H
elim (cpm_inv_appl1_simple … H) -H // #V0 #T0 #HV0 #HT0 #H destruct
<(HV … HV0) -V0 <(HT … HT0) -T0 //
(* Basic_1: was: nf2_dec *)
(* Basic_2A1: uses: cnr_dec *)
lemma cnr_dec_teqx (h) (G) (L):
- ∀T1. ∨∨ ❪G,L❫ ⊢ ➡[h] 𝐍❪T1❫
- | ∃∃T2. ❪G,L❫ ⊢ T1 ➡[h] T2 & (T1 ≛ T2 → ⊥).
+ ∀T1. ∨∨ ❪G,L❫ ⊢ ➡𝐍[h,0] T1
+ | ∃∃T2. ❪G,L❫ ⊢ T1 ➡[h,0] T2 & (T1 ≛ T2 → ⊥).
#h #G #L #T1
@(fqup_wf_ind_eq (Ⓣ) … G L T1) -G -L -T1 #G0 #L0 #T0 #IH #G #L * *
[ #s #HG #HL #HT destruct -IH
include "ground_2/steps/rtc_isrt_plus.ma".
include "ground_2/steps/rtc_isrt_max_shift.ma".
include "basic_2/notation/relations/pred_6.ma".
-include "basic_2/notation/relations/pred_5.ma".
include "basic_2/rt_transition/cpg.ma".
(* T-BOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS ***************)
(* Basic_2A1: includes: cpr *)
definition cpm (h) (G) (L) (n): relation2 term term ≝
- λT1,T2. ∃∃c. 𝐑𝐓❪n,c❫ & ❪G,L❫ ⊢ T1 ⬈[eq_t,c,h] T2.
+ λT1,T2. ∃∃c. 𝐑𝐓❪n,c❫ & ❪G,L❫ ⊢ T1 ⬈[eq_t,c,h] T2.
interpretation
"t-bound context-sensitive parallel rt-transition (term)"
- 'PRed n h G L T1 T2 = (cpm h G L n T1 T2).
-
-interpretation
- "context-sensitive parallel r-transition (term)"
- 'PRed h G L T1 T2 = (cpm h G L O T1 T2).
+ 'PRed h n G L T1 T2 = (cpm h G L n T1 T2).
(* Basic properties *********************************************************)
-lemma cpm_ess: ∀h,G,L,s. ❪G,L❫ ⊢ ⋆s ➡[1,h] ⋆(⫯[h]s).
+lemma cpm_ess: ∀h,G,L,s. ❪G,L❫ ⊢ ⋆s ➡[h,1] ⋆(⫯[h]s).
/2 width=3 by cpg_ess, ex2_intro/ qed.
-lemma cpm_delta: ∀n,h,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ➡[n,h] V2 →
- ⇧[1] V2 ≘ W2 → ❪G,K.ⓓV1❫ ⊢ #0 ➡[n,h] W2.
-#n #h #G #K #V1 #V2 #W2 *
+lemma cpm_delta: ∀h,n,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ➡[h,n] V2 →
+ ⇧[1] V2 ≘ W2 → ❪G,K.ⓓV1❫ ⊢ #0 ➡[h,n] W2.
+#h #n #G #K #V1 #V2 #W2 *
/3 width=5 by cpg_delta, ex2_intro/
qed.
-lemma cpm_ell: ∀n,h,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ➡[n,h] V2 →
- ⇧[1] V2 ≘ W2 → ❪G,K.ⓛV1❫ ⊢ #0 ➡[↑n,h] W2.
-#n #h #G #K #V1 #V2 #W2 *
+lemma cpm_ell: ∀h,n,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ➡[h,n] V2 →
+ ⇧[1] V2 ≘ W2 → ❪G,K.ⓛV1❫ ⊢ #0 ➡[h,↑n] W2.
+#h #n #G #K #V1 #V2 #W2 *
/3 width=5 by cpg_ell, ex2_intro, isrt_succ/
qed.
-lemma cpm_lref: ∀n,h,I,G,K,T,U,i. ❪G,K❫ ⊢ #i ➡[n,h] T →
- ⇧[1] T ≘ U → ❪G,K.ⓘ[I]❫ ⊢ #↑i ➡[n,h] U.
-#n #h #I #G #K #T #U #i *
+lemma cpm_lref: ∀h,n,I,G,K,T,U,i. ❪G,K❫ ⊢ #i ➡[h,n] T →
+ ⇧[1] T ≘ U → ❪G,K.ⓘ[I]❫ ⊢ #↑i ➡[h,n] U.
+#h #n #I #G #K #T #U #i *
/3 width=5 by cpg_lref, ex2_intro/
qed.
(* Basic_2A1: includes: cpr_bind *)
-lemma cpm_bind: ∀n,h,p,I,G,L,V1,V2,T1,T2.
- ❪G,L❫ ⊢ V1 ➡[h] V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡[n,h] T2 →
- ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡[n,h] ⓑ[p,I]V2.T2.
-#n #h #p #I #G #L #V1 #V2 #T1 #T2 * #cV #HcV #HV12 *
+lemma cpm_bind: ∀h,n,p,I,G,L,V1,V2,T1,T2.
+ ❪G,L❫ ⊢ V1 ➡[h,0] V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡[h,n] T2 →
+ ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡[h,n] ⓑ[p,I]V2.T2.
+#h #n #p #I #G #L #V1 #V2 #T1 #T2 * #cV #HcV #HV12 *
/5 width=5 by cpg_bind, isrt_max_O1, isr_shift, ex2_intro/
qed.
-lemma cpm_appl: ∀n,h,G,L,V1,V2,T1,T2.
- ❪G,L❫ ⊢ V1 ➡[h] V2 → ❪G,L❫ ⊢ T1 ➡[n,h] T2 →
- ❪G,L❫ ⊢ ⓐV1.T1 ➡[n,h] ⓐV2.T2.
-#n #h #G #L #V1 #V2 #T1 #T2 * #cV #HcV #HV12 *
+lemma cpm_appl: ∀h,n,G,L,V1,V2,T1,T2.
+ ❪G,L❫ ⊢ V1 ➡[h,0] V2 → ❪G,L❫ ⊢ T1 ➡[h,n] T2 →
+ ❪G,L❫ ⊢ ⓐV1.T1 ➡[h,n] ⓐV2.T2.
+#h #n #G #L #V1 #V2 #T1 #T2 * #cV #HcV #HV12 *
/5 width=5 by isrt_max_O1, isr_shift, cpg_appl, ex2_intro/
qed.
-lemma cpm_cast: ∀n,h,G,L,U1,U2,T1,T2.
- ❪G,L❫ ⊢ U1 ➡[n,h] U2 → ❪G,L❫ ⊢ T1 ➡[n,h] T2 →
- ❪G,L❫ ⊢ ⓝU1.T1 ➡[n,h] ⓝU2.T2.
-#n #h #G #L #U1 #U2 #T1 #T2 * #cU #HcU #HU12 *
+lemma cpm_cast: ∀h,n,G,L,U1,U2,T1,T2.
+ ❪G,L❫ ⊢ U1 ➡[h,n] U2 → ❪G,L❫ ⊢ T1 ➡[h,n] T2 →
+ ❪G,L❫ ⊢ ⓝU1.T1 ➡[h,n] ⓝU2.T2.
+#h #n #G #L #U1 #U2 #T1 #T2 * #cU #HcU #HU12 *
/4 width=6 by cpg_cast, isrt_max_idem1, isrt_mono, ex2_intro/
qed.
(* Basic_2A1: includes: cpr_zeta *)
-lemma cpm_zeta (n) (h) (G) (L):
- ∀T1,T. ⇧[1] T ≘ T1 → ∀T2. ❪G,L❫ ⊢ T ➡[n,h] T2 →
- ∀V. ❪G,L❫ ⊢ +ⓓV.T1 ➡[n,h] T2.
-#n #h #G #L #T1 #T #HT1 #T2 *
+lemma cpm_zeta (h) (n) (G) (L):
+ ∀T1,T. ⇧[1] T ≘ T1 → ∀T2. ❪G,L❫ ⊢ T ➡[h,n] T2 →
+ ∀V. ❪G,L❫ ⊢ +ⓓV.T1 ➡[h,n] T2.
+#h #n #G #L #T1 #T #HT1 #T2 *
/3 width=5 by cpg_zeta, isrt_plus_O2, ex2_intro/
qed.
(* Basic_2A1: includes: cpr_eps *)
-lemma cpm_eps: ∀n,h,G,L,V,T1,T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 → ❪G,L❫ ⊢ ⓝV.T1 ➡[n,h] T2.
-#n #h #G #L #V #T1 #T2 *
+lemma cpm_eps: ∀h,n,G,L,V,T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → ❪G,L❫ ⊢ ⓝV.T1 ➡[h,n] T2.
+#h #n #G #L #V #T1 #T2 *
/3 width=3 by cpg_eps, isrt_plus_O2, ex2_intro/
qed.
-lemma cpm_ee: ∀n,h,G,L,V1,V2,T. ❪G,L❫ ⊢ V1 ➡[n,h] V2 → ❪G,L❫ ⊢ ⓝV1.T ➡[↑n,h] V2.
-#n #h #G #L #V1 #V2 #T *
+lemma cpm_ee: ∀h,n,G,L,V1,V2,T. ❪G,L❫ ⊢ V1 ➡[h,n] V2 → ❪G,L❫ ⊢ ⓝV1.T ➡[h,↑n] V2.
+#h #n #G #L #V1 #V2 #T *
/3 width=3 by cpg_ee, isrt_succ, ex2_intro/
qed.
(* Basic_2A1: includes: cpr_beta *)
-lemma cpm_beta: ∀n,h,p,G,L,V1,V2,W1,W2,T1,T2.
- ❪G,L❫ ⊢ V1 ➡[h] V2 → ❪G,L❫ ⊢ W1 ➡[h] W2 → ❪G,L.ⓛW1❫ ⊢ T1 ➡[n,h] T2 →
- ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ➡[n,h] ⓓ[p]ⓝW2.V2.T2.
-#n #h #p #G #L #V1 #V2 #W1 #W2 #T1 #T2 * #riV #rhV #HV12 * #riW #rhW #HW12 *
+lemma cpm_beta: ∀h,n,p,G,L,V1,V2,W1,W2,T1,T2.
+ ❪G,L❫ ⊢ V1 ➡[h,0] V2 → ❪G,L❫ ⊢ W1 ➡[h,0] W2 → ❪G,L.ⓛW1❫ ⊢ T1 ➡[h,n] T2 →
+ ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ➡[h,n] ⓓ[p]ⓝW2.V2.T2.
+#h #n #p #G #L #V1 #V2 #W1 #W2 #T1 #T2 * #riV #rhV #HV12 * #riW #rhW #HW12 *
/6 width=7 by cpg_beta, isrt_plus_O2, isrt_max, isr_shift, ex2_intro/
qed.
(* Basic_2A1: includes: cpr_theta *)
-lemma cpm_theta: ∀n,h,p,G,L,V1,V,V2,W1,W2,T1,T2.
- ❪G,L❫ ⊢ V1 ➡[h] V → ⇧[1] V ≘ V2 → ❪G,L❫ ⊢ W1 ➡[h] W2 →
- ❪G,L.ⓓW1❫ ⊢ T1 ➡[n,h] T2 →
- ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ➡[n,h] ⓓ[p]W2.ⓐV2.T2.
-#n #h #p #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 * #riV #rhV #HV1 #HV2 * #riW #rhW #HW12 *
+lemma cpm_theta: ∀h,n,p,G,L,V1,V,V2,W1,W2,T1,T2.
+ ❪G,L❫ ⊢ V1 ➡[h,0] V → ⇧[1] V ≘ V2 → ❪G,L❫ ⊢ W1 ➡[h,0] W2 →
+ ❪G,L.ⓓW1❫ ⊢ T1 ➡[h,n] T2 →
+ ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ➡[h,n] ⓓ[p]W2.ⓐV2.T2.
+#h #n #p #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 * #riV #rhV #HV1 #HV2 * #riW #rhW #HW12 *
/6 width=9 by cpg_theta, isrt_plus_O2, isrt_max, isr_shift, ex2_intro/
qed.
(* Advanced properties ******************************************************)
lemma cpm_sort (h) (G) (L):
- ∀n. n ≤ 1 → ∀s. ❪G,L❫ ⊢ ⋆s ➡[n,h] ⋆((next h)^n s).
+ ∀n. n ≤ 1 → ∀s. ❪G,L❫ ⊢ ⋆s ➡[h,n] ⋆((next h)^n s).
#h #G #L * //
#n #H #s <(le_n_O_to_eq n) /2 width=1 by le_S_S_to_le/
qed.
(* Basic inversion lemmas ***************************************************)
-lemma cpm_inv_atom1: ∀n,h,J,G,L,T2. ❪G,L❫ ⊢ ⓪[J] ➡[n,h] T2 →
+lemma cpm_inv_atom1: ∀h,n,J,G,L,T2. ❪G,L❫ ⊢ ⓪[J] ➡[h,n] T2 →
∨∨ T2 = ⓪[J] ∧ n = 0
| ∃∃s. T2 = ⋆(⫯[h]s) & J = Sort s & n = 1
- | ∃∃K,V1,V2. ❪G,K❫ ⊢ V1 ➡[n,h] V2 & ⇧[1] V2 ≘ T2 &
+ | ∃∃K,V1,V2. ❪G,K❫ ⊢ V1 ➡[h,n] V2 & ⇧[1] V2 ≘ T2 &
L = K.ⓓV1 & J = LRef 0
- | ∃∃m,K,V1,V2. ❪G,K❫ ⊢ V1 ➡[m,h] V2 & ⇧[1] V2 ≘ T2 &
+ | ∃∃m,K,V1,V2. ❪G,K❫ ⊢ V1 ➡[h,m] V2 & ⇧[1] V2 ≘ T2 &
L = K.ⓛV1 & J = LRef 0 & n = ↑m
- | ∃∃I,K,T,i. ❪G,K❫ ⊢ #i ➡[n,h] T & ⇧[1] T ≘ T2 &
+ | ∃∃I,K,T,i. ❪G,K❫ ⊢ #i ➡[h,n] T & ⇧[1] T ≘ T2 &
L = K.ⓘ[I] & J = LRef (↑i).
-#n #h #J #G #L #T2 * #c #Hc #H elim (cpg_inv_atom1 … H) -H *
+#h #n #J #G #L #T2 * #c #Hc #H elim (cpg_inv_atom1 … H) -H *
[ #H1 #H2 destruct /4 width=1 by isrt_inv_00, or5_intro0, conj/
| #s #H1 #H2 #H3 destruct /4 width=3 by isrt_inv_01, or5_intro1, ex3_intro/
| #cV #K #V1 #V2 #HV12 #HVT2 #H1 #H2 #H3 destruct
]
qed-.
-lemma cpm_inv_sort1: ∀n,h,G,L,T2,s. ❪G,L❫ ⊢ ⋆s ➡[n,h] T2 →
+lemma cpm_inv_sort1: ∀h,n,G,L,T2,s. ❪G,L❫ ⊢ ⋆s ➡[h,n] T2 →
∧∧ T2 = ⋆(((next h)^n) s) & n ≤ 1.
-#n #h #G #L #T2 #s * #c #Hc #H
+#h #n #G #L #T2 #s * #c #Hc #H
elim (cpg_inv_sort1 … H) -H * #H1 #H2 destruct
[ lapply (isrt_inv_00 … Hc) | lapply (isrt_inv_01 … Hc) ] -Hc
#H destruct /2 width=1 by conj/
qed-.
-lemma cpm_inv_zero1: ∀n,h,G,L,T2. ❪G,L❫ ⊢ #0 ➡[n,h] T2 →
+lemma cpm_inv_zero1: ∀h,n,G,L,T2. ❪G,L❫ ⊢ #0 ➡[h,n] T2 →
∨∨ T2 = #0 ∧ n = 0
- | ∃∃K,V1,V2. ❪G,K❫ ⊢ V1 ➡[n,h] V2 & ⇧[1] V2 ≘ T2 &
+ | ∃∃K,V1,V2. ❪G,K❫ ⊢ V1 ➡[h,n] V2 & ⇧[1] V2 ≘ T2 &
L = K.ⓓV1
- | ∃∃m,K,V1,V2. ❪G,K❫ ⊢ V1 ➡[m,h] V2 & ⇧[1] V2 ≘ T2 &
+ | ∃∃m,K,V1,V2. ❪G,K❫ ⊢ V1 ➡[h,m] V2 & ⇧[1] V2 ≘ T2 &
L = K.ⓛV1 & n = ↑m.
-#n #h #G #L #T2 * #c #Hc #H elim (cpg_inv_zero1 … H) -H *
+#h #n #G #L #T2 * #c #Hc #H elim (cpg_inv_zero1 … H) -H *
[ #H1 #H2 destruct /4 width=1 by isrt_inv_00, or3_intro0, conj/
| #cV #K #V1 #V2 #HV12 #HVT2 #H1 #H2 destruct
/4 width=8 by or3_intro1, ex3_3_intro, ex2_intro/
]
qed-.
-lemma cpm_inv_zero1_unit (n) (h) (I) (K) (G):
- ∀X2. ❪G,K.ⓤ[I]❫ ⊢ #0 ➡[n,h] X2 → ∧∧ X2 = #0 & n = 0.
-#n #h #I #G #K #X2 #H
+lemma cpm_inv_zero1_unit (h) (n) (I) (K) (G):
+ ∀X2. ❪G,K.ⓤ[I]❫ ⊢ #0 ➡[h,n] X2 → ∧∧ X2 = #0 & n = 0.
+#h #n #I #G #K #X2 #H
elim (cpm_inv_zero1 … H) -H *
[ #H1 #H2 destruct /2 width=1 by conj/
| #Y #X1 #X2 #_ #_ #H destruct
]
qed.
-lemma cpm_inv_lref1: ∀n,h,G,L,T2,i. ❪G,L❫ ⊢ #↑i ➡[n,h] T2 →
+lemma cpm_inv_lref1: ∀h,n,G,L,T2,i. ❪G,L❫ ⊢ #↑i ➡[h,n] T2 →
∨∨ T2 = #(↑i) ∧ n = 0
- | ∃∃I,K,T. ❪G,K❫ ⊢ #i ➡[n,h] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I].
-#n #h #G #L #T2 #i * #c #Hc #H elim (cpg_inv_lref1 … H) -H *
+ | ∃∃I,K,T. ❪G,K❫ ⊢ #i ➡[h,n] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I].
+#h #n #G #L #T2 #i * #c #Hc #H elim (cpg_inv_lref1 … H) -H *
[ #H1 #H2 destruct /4 width=1 by isrt_inv_00, or_introl, conj/
| #I #K #V2 #HV2 #HVT2 #H destruct
/4 width=6 by ex3_3_intro, ex2_intro, or_intror/
]
qed-.
-lemma cpm_inv_lref1_ctop (n) (h) (G):
- ∀X2,i. ❪G,⋆❫ ⊢ #i ➡[n,h] X2 → ∧∧ X2 = #i & n = 0.
-#n #h #G #X2 * [| #i ] #H
+lemma cpm_inv_lref1_ctop (h) (n) (G):
+ ∀X2,i. ❪G,⋆❫ ⊢ #i ➡[h,n] X2 → ∧∧ X2 = #i & n = 0.
+#h #n #G #X2 * [| #i ] #H
[ elim (cpm_inv_zero1 … H) -H *
[ #H1 #H2 destruct /2 width=1 by conj/
| #Y #X1 #X2 #_ #_ #H destruct
]
qed.
-lemma cpm_inv_gref1: ∀n,h,G,L,T2,l. ❪G,L❫ ⊢ §l ➡[n,h] T2 → T2 = §l ∧ n = 0.
-#n #h #G #L #T2 #l * #c #Hc #H elim (cpg_inv_gref1 … H) -H
+lemma cpm_inv_gref1: ∀h,n,G,L,T2,l. ❪G,L❫ ⊢ §l ➡[h,n] T2 → T2 = §l ∧ n = 0.
+#h #n #G #L #T2 #l * #c #Hc #H elim (cpg_inv_gref1 … H) -H
#H1 #H2 destruct /3 width=1 by isrt_inv_00, conj/
qed-.
(* Basic_2A1: includes: cpr_inv_bind1 *)
-lemma cpm_inv_bind1: ∀n,h,p,I,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡[n,h] U2 →
- ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 & ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡[n,h] T2 &
+lemma cpm_inv_bind1: ∀h,n,p,I,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡[h,n] U2 →
+ ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 & ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡[h,n] T2 &
U2 = ⓑ[p,I]V2.T2
- | ∃∃T. ⇧[1] T ≘ T1 & ❪G,L❫ ⊢ T ➡[n,h] U2 &
+ | ∃∃T. ⇧[1] T ≘ T1 & ❪G,L❫ ⊢ T ➡[h,n] U2 &
p = true & I = Abbr.
-#n #h #p #I #G #L #V1 #T1 #U2 * #c #Hc #H elim (cpg_inv_bind1 … H) -H *
+#h #n #p #I #G #L #V1 #T1 #U2 * #c #Hc #H elim (cpg_inv_bind1 … H) -H *
[ #cV #cT #V2 #T2 #HV12 #HT12 #H1 #H2 destruct
elim (isrt_inv_max … Hc) -Hc #nV #nT #HcV #HcT #H destruct
elim (isrt_inv_shift … HcV) -HcV #HcV #H destruct
(* Basic_1: includes: pr0_gen_abbr pr2_gen_abbr *)
(* Basic_2A1: includes: cpr_inv_abbr1 *)
-lemma cpm_inv_abbr1: ∀n,h,p,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓓ[p]V1.T1 ➡[n,h] U2 →
- ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 & ❪G,L.ⓓV1❫ ⊢ T1 ➡[n,h] T2 &
+lemma cpm_inv_abbr1: ∀h,n,p,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓓ[p]V1.T1 ➡[h,n] U2 →
+ ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 & ❪G,L.ⓓV1❫ ⊢ T1 ➡[h,n] T2 &
U2 = ⓓ[p]V2.T2
- | ∃∃T. ⇧[1] T ≘ T1 & ❪G,L❫ ⊢ T ➡[n,h] U2 & p = true.
-#n #h #p #G #L #V1 #T1 #U2 #H
+ | ∃∃T. ⇧[1] T ≘ T1 & ❪G,L❫ ⊢ T ➡[h,n] U2 & p = true.
+#h #n #p #G #L #V1 #T1 #U2 #H
elim (cpm_inv_bind1 … H) -H
[ /3 width=1 by or_introl/
| * /3 width=3 by ex3_intro, or_intror/
(* Basic_1: includes: pr0_gen_abst pr2_gen_abst *)
(* Basic_2A1: includes: cpr_inv_abst1 *)
-lemma cpm_inv_abst1: ∀n,h,p,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓛ[p]V1.T1 ➡[n,h] U2 →
- ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 & ❪G,L.ⓛV1❫ ⊢ T1 ➡[n,h] T2 &
+lemma cpm_inv_abst1: ∀h,n,p,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓛ[p]V1.T1 ➡[h,n] U2 →
+ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 & ❪G,L.ⓛV1❫ ⊢ T1 ➡[h,n] T2 &
U2 = ⓛ[p]V2.T2.
-#n #h #p #G #L #V1 #T1 #U2 #H
+#h #n #p #G #L #V1 #T1 #U2 #H
elim (cpm_inv_bind1 … H) -H
[ /3 width=1 by or_introl/
| * #T #_ #_ #_ #H destruct
]
qed-.
-lemma cpm_inv_abst_bi: ∀n,h,p1,p2,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ ⓛ[p1]V1.T1 ➡[n,h] ⓛ[p2]V2.T2 →
- ∧∧ ❪G,L❫ ⊢ V1 ➡[h] V2 & ❪G,L.ⓛV1❫ ⊢ T1 ➡[n,h] T2 & p1 = p2.
-#n #h #p1 #p2 #G #L #V1 #V2 #T1 #T2 #H
+lemma cpm_inv_abst_bi: ∀h,n,p1,p2,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ ⓛ[p1]V1.T1 ➡[h,n] ⓛ[p2]V2.T2 →
+ ∧∧ ❪G,L❫ ⊢ V1 ➡[h,0] V2 & ❪G,L.ⓛV1❫ ⊢ T1 ➡[h,n] T2 & p1 = p2.
+#h #n #p1 #p2 #G #L #V1 #V2 #T1 #T2 #H
elim (cpm_inv_abst1 … H) -H #XV #XT #HV #HT #H destruct
/2 width=1 by and3_intro/
qed-.
(* Basic_1: includes: pr0_gen_appl pr2_gen_appl *)
(* Basic_2A1: includes: cpr_inv_appl1 *)
-lemma cpm_inv_appl1: ∀n,h,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓐ V1.U1 ➡[n,h] U2 →
- ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 & ❪G,L❫ ⊢ U1 ➡[n,h] T2 &
+lemma cpm_inv_appl1: ∀h,n,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓐ V1.U1 ➡[h,n] U2 →
+ ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 & ❪G,L❫ ⊢ U1 ➡[h,n] T2 &
U2 = ⓐV2.T2
- | ∃∃p,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 & ❪G,L❫ ⊢ W1 ➡[h] W2 &
- ❪G,L.ⓛW1❫ ⊢ T1 ➡[n,h] T2 &
+ | ∃∃p,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 & ❪G,L❫ ⊢ W1 ➡[h,0] W2 &
+ ❪G,L.ⓛW1❫ ⊢ T1 ➡[h,n] T2 &
U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2
- | ∃∃p,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h] V & ⇧[1] V ≘ V2 &
- ❪G,L❫ ⊢ W1 ➡[h] W2 & ❪G,L.ⓓW1❫ ⊢ T1 ➡[n,h] T2 &
+ | ∃∃p,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V & ⇧[1] V ≘ V2 &
+ ❪G,L❫ ⊢ W1 ➡[h,0] W2 & ❪G,L.ⓓW1❫ ⊢ T1 ➡[h,n] T2 &
U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2.
-#n #h #G #L #V1 #U1 #U2 * #c #Hc #H elim (cpg_inv_appl1 … H) -H *
+#h #n #G #L #V1 #U1 #U2 * #c #Hc #H elim (cpg_inv_appl1 … H) -H *
[ #cV #cT #V2 #T2 #HV12 #HT12 #H1 #H2 destruct
elim (isrt_inv_max … Hc) -Hc #nV #nT #HcV #HcT #H destruct
elim (isrt_inv_shift … HcV) -HcV #HcV #H destruct
]
qed-.
-lemma cpm_inv_cast1: ∀n,h,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓝV1.U1 ➡[n,h] U2 →
- ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[n,h] V2 & ❪G,L❫ ⊢ U1 ➡[n,h] T2 &
+lemma cpm_inv_cast1: ∀h,n,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓝV1.U1 ➡[h,n] U2 →
+ ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h,n] V2 & ❪G,L❫ ⊢ U1 ➡[h,n] T2 &
U2 = ⓝV2.T2
- | ❪G,L❫ ⊢ U1 ➡[n,h] U2
- | ∃∃m. ❪G,L❫ ⊢ V1 ➡[m,h] U2 & n = ↑m.
-#n #h #G #L #V1 #U1 #U2 * #c #Hc #H elim (cpg_inv_cast1 … H) -H *
+ | ❪G,L❫ ⊢ U1 ➡[h,n] U2
+ | ∃∃m. ❪G,L❫ ⊢ V1 ➡[h,m] U2 & n = ↑m.
+#h #n #G #L #V1 #U1 #U2 * #c #Hc #H elim (cpg_inv_cast1 … H) -H *
[ #cV #cT #V2 #T2 #HV12 #HT12 #HcVT #H1 #H2 destruct
elim (isrt_inv_max … Hc) -Hc #nV #nT #HcV #HcT #H destruct
lapply (isrt_eq_t_trans … HcV HcVT) -HcVT #H
(* Basic forward lemmas *****************************************************)
(* Basic_2A1: includes: cpr_fwd_bind1_minus *)
-lemma cpm_fwd_bind1_minus: ∀n,h,I,G,L,V1,T1,T. ❪G,L❫ ⊢ -ⓑ[I]V1.T1 ➡[n,h] T → ∀p.
- ∃∃V2,T2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡[n,h] ⓑ[p,I]V2.T2 &
+lemma cpm_fwd_bind1_minus: ∀h,n,I,G,L,V1,T1,T. ❪G,L❫ ⊢ -ⓑ[I]V1.T1 ➡[h,n] T → ∀p.
+ ∃∃V2,T2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡[h,n] ⓑ[p,I]V2.T2 &
T = -ⓑ[I]V2.T2.
-#n #h #I #G #L #V1 #T1 #T * #c #Hc #H #p elim (cpg_fwd_bind1_minus … H p) -H
+#h #n #I #G #L #V1 #T1 #T * #c #Hc #H #p elim (cpg_fwd_bind1_minus … H p) -H
/3 width=4 by ex2_2_intro, ex2_intro/
qed-.
lemma cpm_ind (h): ∀Q:relation5 nat genv lenv term term.
(∀I,G,L. Q 0 G L (⓪[I]) (⓪[I])) →
(∀G,L,s. Q 1 G L (⋆s) (⋆(⫯[h]s))) →
- (∀n,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ➡[n,h] V2 → Q n G K V1 V2 →
+ (∀n,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ➡[h,n] V2 → Q n G K V1 V2 →
⇧[1] V2 ≘ W2 → Q n G (K.ⓓV1) (#0) W2
- ) → (∀n,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ➡[n,h] V2 → Q n G K V1 V2 →
+ ) → (∀n,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ➡[h,n] V2 → Q n G K V1 V2 →
⇧[1] V2 ≘ W2 → Q (↑n) G (K.ⓛV1) (#0) W2
- ) → (∀n,I,G,K,T,U,i. ❪G,K❫ ⊢ #i ➡[n,h] T → Q n G K (#i) T →
+ ) → (∀n,I,G,K,T,U,i. ❪G,K❫ ⊢ #i ➡[h,n] T → Q n G K (#i) T →
⇧[1] T ≘ U → Q n G (K.ⓘ[I]) (#↑i) (U)
- ) → (∀n,p,I,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡[n,h] T2 →
+ ) → (∀n,p,I,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡[h,n] T2 →
Q 0 G L V1 V2 → Q n G (L.ⓑ[I]V1) T1 T2 → Q n G L (ⓑ[p,I]V1.T1) (ⓑ[p,I]V2.T2)
- ) → (∀n,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 → ❪G,L❫ ⊢ T1 ➡[n,h] T2 →
+ ) → (∀n,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 → ❪G,L❫ ⊢ T1 ➡[h,n] T2 →
Q 0 G L V1 V2 → Q n G L T1 T2 → Q n G L (ⓐV1.T1) (ⓐV2.T2)
- ) → (∀n,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ➡[n,h] V2 → ❪G,L❫ ⊢ T1 ➡[n,h] T2 →
+ ) → (∀n,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,n] V2 → ❪G,L❫ ⊢ T1 ➡[h,n] T2 →
Q n G L V1 V2 → Q n G L T1 T2 → Q n G L (ⓝV1.T1) (ⓝV2.T2)
- ) → (∀n,G,L,V,T1,T,T2. ⇧[1] T ≘ T1 → ❪G,L❫ ⊢ T ➡[n,h] T2 →
+ ) → (∀n,G,L,V,T1,T,T2. ⇧[1] T ≘ T1 → ❪G,L❫ ⊢ T ➡[h,n] T2 →
Q n G L T T2 → Q n G L (+ⓓV.T1) T2
- ) → (∀n,G,L,V,T1,T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 →
+ ) → (∀n,G,L,V,T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 →
Q n G L T1 T2 → Q n G L (ⓝV.T1) T2
- ) → (∀n,G,L,V1,V2,T. ❪G,L❫ ⊢ V1 ➡[n,h] V2 →
+ ) → (∀n,G,L,V1,V2,T. ❪G,L❫ ⊢ V1 ➡[h,n] V2 →
Q n G L V1 V2 → Q (↑n) G L (ⓝV1.T) V2
- ) → (∀n,p,G,L,V1,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 → ❪G,L❫ ⊢ W1 ➡[h] W2 → ❪G,L.ⓛW1❫ ⊢ T1 ➡[n,h] T2 →
+ ) → (∀n,p,G,L,V1,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 → ❪G,L❫ ⊢ W1 ➡[h,0] W2 → ❪G,L.ⓛW1❫ ⊢ T1 ➡[h,n] T2 →
Q 0 G L V1 V2 → Q 0 G L W1 W2 → Q n G (L.ⓛW1) T1 T2 →
Q n G L (ⓐV1.ⓛ[p]W1.T1) (ⓓ[p]ⓝW2.V2.T2)
- ) → (∀n,p,G,L,V1,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h] V → ❪G,L❫ ⊢ W1 ➡[h] W2 → ❪G,L.ⓓW1❫ ⊢ T1 ➡[n,h] T2 →
+ ) → (∀n,p,G,L,V1,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V → ❪G,L❫ ⊢ W1 ➡[h,0] W2 → ❪G,L.ⓓW1❫ ⊢ T1 ➡[h,n] T2 →
Q 0 G L V1 V → Q 0 G L W1 W2 → Q n G (L.ⓓW1) T1 T2 →
⇧[1] V ≘ V2 → Q n G L (ⓐV1.ⓓ[p]W1.T1) (ⓓ[p]W2.ⓐV2.T2)
) →
- ∀n,G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 → Q n G L T1 T2.
+ ∀n,G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → Q n G L T1 T2.
#h #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #IH10 #IH11 #IH12 #IH13 #n #G #L #T1 #T2
* #c #HC #H generalize in match HC; -HC generalize in match n; -n
elim H -c -G -L -T1 -T2
(* Properties with atomic arity assignment for terms ************************)
(* Basic_2A1: includes: cpr_aaa_conf *)
-lemma cpm_aaa_conf (n) (h): ∀G,L. Conf3 … (aaa G L) (cpm h G L n).
+lemma cpm_aaa_conf (h) (n): ∀G,L. Conf3 … (aaa G L) (cpm h G L n).
/3 width=5 by cpx_aaa_conf, cpm_fwd_cpx/ qed-.
(* Note: one of these U is the inferred type of T *)
lemma aaa_cpm_SO (h) (G) (L) (A):
- ∀T. ❪G,L❫ ⊢ T ⁝ A → ∃U. ❪G,L❫ ⊢ T ➡[1,h] U.
+ ∀T. ❪G,L❫ ⊢ T ⁝ A → ∃U. ❪G,L❫ ⊢ T ➡[h,1] U.
#h #G #L #A #T #H elim H -G -L -T -A
[ /3 width=2 by ex_intro/
| * #G #L #V #B #_ * #V0 #HV0
(* Forward lemmas with unbound context-sensitive rt-transition for terms ****)
(* Basic_2A1: includes: cpr_cpx *)
-lemma cpm_fwd_cpx: ∀n,h,G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 → ❪G,L❫ ⊢ T1 ⬈[h] T2.
-#n #h #G #L #T1 #T2 * #c #Hc #H elim H -L -T1 -T2
+lemma cpm_fwd_cpx: ∀h,n,G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → ❪G,L❫ ⊢ T1 ⬈[h] T2.
+#h #n #G #L #T1 #T2 * #c #Hc #H elim H -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_1: includes: pr0_lift pr2_lift *)
(* Basic_2A1: includes: cpr_lift *)
-lemma cpm_lifts_sn: ∀n,h,G. d_liftable2_sn … lifts (λL. cpm h G L n).
-#n #h #G #K #T1 #T2 * #c #Hc #HT12 #b #f #L #HLK #U1 #HTU1
+lemma cpm_lifts_sn: ∀h,n,G. d_liftable2_sn … lifts (λL. cpm h G L n).
+#h #n #G #K #T1 #T2 * #c #Hc #HT12 #b #f #L #HLK #U1 #HTU1
elim (cpg_lifts_sn … HT12 … HLK … HTU1) -K -T1
/3 width=5 by ex2_intro/
qed-.
-lemma cpm_lifts_bi: ∀n,h,G. d_liftable2_bi … lifts (λL. cpm h G L n).
-#n #h #G #K #T1 #T2 * /3 width=11 by cpg_lifts_bi, ex2_intro/
+lemma cpm_lifts_bi: ∀h,n,G. d_liftable2_bi … lifts (λL. cpm h G L n).
+#h #n #G #K #T1 #T2 * /3 width=11 by cpg_lifts_bi, ex2_intro/
qed-.
(* Inversion lemmas with generic slicing for local environments *************)
(* Basic_1: includes: pr0_gen_lift pr2_gen_lift *)
(* Basic_2A1: includes: cpr_inv_lift1 *)
-lemma cpm_inv_lifts_sn: ∀n,h,G. d_deliftable2_sn … lifts (λL. cpm h G L n).
-#n #h #G #L #U1 #U2 * #c #Hc #HU12 #b #f #K #HLK #T1 #HTU1
+lemma cpm_inv_lifts_sn: ∀h,n,G. d_deliftable2_sn … lifts (λL. cpm h G L n).
+#h #n #G #L #U1 #U2 * #c #Hc #HU12 #b #f #K #HLK #T1 #HTU1
elim (cpg_inv_lifts_sn … HU12 … HLK … HTU1) -L -U1
/3 width=5 by ex2_intro/
qed-.
-lemma cpm_inv_lifts_bi: ∀n,h,G. d_deliftable2_bi … lifts (λL. cpm h G L n).
-#n #h #G #L #U1 #U2 * /3 width=11 by cpg_inv_lifts_bi, ex2_intro/
+lemma cpm_inv_lifts_bi: ∀h,n,G. d_deliftable2_bi … lifts (λL. cpm h G L n).
+#h #n #G #L #U1 #U2 * /3 width=11 by cpg_inv_lifts_bi, ex2_intro/
qed-.
(* Advanced properties ******************************************************)
(* Basic_1: includes: pr2_delta1 *)
(* Basic_2A1: includes: cpr_delta *)
-lemma cpm_delta_drops: ∀n,h,G,L,K,V,V2,W2,i.
- ⇩[i] L ≘ K.ⓓV → ❪G,K❫ ⊢ V ➡[n,h] V2 →
- ⇧[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ➡[n,h] W2.
-#n #h #G #L #K #V #V2 #W2 #i #HLK *
+lemma cpm_delta_drops: ∀h,n,G,L,K,V,V2,W2,i.
+ ⇩[i] L ≘ K.ⓓV → ❪G,K❫ ⊢ V ➡[h,n] V2 →
+ ⇧[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ➡[h,n] W2.
+#h #n #G #L #K #V #V2 #W2 #i #HLK *
/3 width=8 by cpg_delta_drops, ex2_intro/
qed.
-lemma cpm_ell_drops: ∀n,h,G,L,K,V,V2,W2,i.
- ⇩[i] L ≘ K.ⓛV → ❪G,K❫ ⊢ V ➡[n,h] V2 →
- ⇧[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ➡[↑n,h] W2.
-#n #h #G #L #K #V #V2 #W2 #i #HLK *
+lemma cpm_ell_drops: ∀h,n,G,L,K,V,V2,W2,i.
+ ⇩[i] L ≘ K.ⓛV → ❪G,K❫ ⊢ V ➡[h,n] V2 →
+ ⇧[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ➡[h,↑n] W2.
+#h #n #G #L #K #V #V2 #W2 #i #HLK *
/3 width=8 by cpg_ell_drops, isrt_succ, ex2_intro/
qed.
(* Advanced inversion lemmas ************************************************)
-lemma cpm_inv_atom1_drops: ∀n,h,I,G,L,T2. ❪G,L❫ ⊢ ⓪[I] ➡[n,h] T2 →
+lemma cpm_inv_atom1_drops: ∀h,n,I,G,L,T2. ❪G,L❫ ⊢ ⓪[I] ➡[h,n] T2 →
∨∨ T2 = ⓪[I] ∧ n = 0
| ∃∃s. T2 = ⋆(⫯[h]s) & I = Sort s & n = 1
- | ∃∃K,V,V2,i. ⇩[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ➡[n,h] V2 &
+ | ∃∃K,V,V2,i. ⇩[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ➡[h,n] V2 &
⇧[↑i] V2 ≘ T2 & I = LRef i
- | ∃∃m,K,V,V2,i. ⇩[i] L ≘ K.ⓛV & ❪G,K❫ ⊢ V ➡[m,h] V2 &
+ | ∃∃m,K,V,V2,i. ⇩[i] L ≘ K.ⓛV & ❪G,K❫ ⊢ V ➡[h,m] V2 &
⇧[↑i] V2 ≘ T2 & I = LRef i & n = ↑m.
-#n #h #I #G #L #T2 * #c #Hc #H elim (cpg_inv_atom1_drops … H) -H *
+#h #n #I #G #L #T2 * #c #Hc #H elim (cpg_inv_atom1_drops … H) -H *
[ #H1 #H2 destruct lapply (isrt_inv_00 … Hc) -Hc
/3 width=1 by or4_intro0, conj/
| #s #H1 #H2 #H3 destruct lapply (isrt_inv_01 … Hc) -Hc
]
qed-.
-lemma cpm_inv_lref1_drops: ∀n,h,G,L,T2,i. ❪G,L❫ ⊢ #i ➡[n,h] T2 →
+lemma cpm_inv_lref1_drops: ∀h,n,G,L,T2,i. ❪G,L❫ ⊢ #i ➡[h,n] T2 →
∨∨ T2 = #i ∧ n = 0
- | ∃∃K,V,V2. ⇩[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ➡[n,h] V2 &
+ | ∃∃K,V,V2. ⇩[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ➡[h,n] V2 &
⇧[↑i] V2 ≘ T2
- | ∃∃m,K,V,V2. ⇩[i] L ≘ K. ⓛV & ❪G,K❫ ⊢ V ➡[m,h] V2 &
+ | ∃∃m,K,V,V2. ⇩[i] L ≘ K. ⓛV & ❪G,K❫ ⊢ V ➡[h,m] V2 &
⇧[↑i] V2 ≘ T2 & n = ↑m.
-#n #h #G #L #T2 #i * #c #Hc #H elim (cpg_inv_lref1_drops … H) -H *
+#h #n #G #L #T2 #i * #c #Hc #H elim (cpg_inv_lref1_drops … H) -H *
[ #H1 #H2 destruct lapply (isrt_inv_00 … Hc) -Hc
/3 width=1 by or3_intro0, conj/
| #cV #K #V1 #V2 #HLK #HV12 #HVT2 #H destruct
(* Advanced forward lemmas **************************************************)
-fact cpm_fwd_plus_aux (n) (h): ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 →
+fact cpm_fwd_plus_aux (h) (n): ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 →
∀n1,n2. n1+n2 = n →
- ∃∃T. ❪G,L❫ ⊢ T1 ➡[n1,h] T & ❪G,L❫ ⊢ T ➡[n2,h] T2.
-#n #h #G #L #T1 #T2 #H @(cpm_ind … H) -G -L -T1 -T2 -n
+ ∃∃T. ❪G,L❫ ⊢ T1 ➡[h,n1] T & ❪G,L❫ ⊢ T ➡[h,n2] T2.
+#h #n #G #L #T1 #T2 #H @(cpm_ind … H) -G -L -T1 -T2 -n
[ #I #G #L #n1 #n2 #H
elim (plus_inv_O3 … H) -H #H1 #H2 destruct
/2 width=3 by ex2_intro/
]
qed-.
-lemma cpm_fwd_plus (h) (G) (L): ∀n1,n2,T1,T2. ❪G,L❫ ⊢ T1 ➡[n1+n2,h] T2 →
- ∃∃T. ❪G,L❫ ⊢ T1 ➡[n1,h] T & ❪G,L❫ ⊢ T ➡[n2,h] T2.
+lemma cpm_fwd_plus (h) (G) (L): ∀n1,n2,T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n1+n2] T2 →
+ ∃∃T. ❪G,L❫ ⊢ T1 ➡[h,n1] T & ❪G,L❫ ⊢ T ➡[h,n2] T2.
/2 width=3 by cpm_fwd_plus_aux/ qed-.
(* Forward lemmas with free variables inclusion for restricted closures *****)
-lemma cpm_fsge_comp: ∀n,h,G. R_fsge_compatible (λL. cpm h G L n).
+lemma cpm_fsge_comp: ∀h,n,G. R_fsge_compatible (λL. cpm h G L n).
/3 width=6 by cpm_fwd_cpx, cpx_fsge_comp/ qed-.
lemma rpr_fsge_comp: ∀h,G. rex_fsge_compatible (λL. cpm h G L 0).
(* Properties with restricted refinement for local environments *************)
(* Basic_2A1: includes: lsubr_cpr_trans *)
-lemma lsubr_cpm_trans (n) (h) (G): lsub_trans … (λL. cpm h G L n) lsubr.
-#n #h #G #L1 #T1 #T2 * /3 width=5 by lsubr_cpg_trans, ex2_intro/
+lemma lsubr_cpm_trans (h) (n) (G): lsub_trans … (λL. cpm h G L n) lsubr.
+#h #n #G #L1 #T1 #T2 * /3 width=5 by lsubr_cpg_trans, ex2_intro/
qed-.
-lemma cpm_bind_unit (n) (h) (G): ∀L,V1,V2. ❪G,L❫ ⊢ V1 ➡[h] V2 →
- ∀J,T1,T2. ❪G,L.ⓤ[J]❫ ⊢ T1 ➡[n,h] T2 →
- ∀p,I. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡[n,h] ⓑ[p,I]V2.T2.
+lemma cpm_bind_unit (h) (n) (G): ∀L,V1,V2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 →
+ ∀J,T1,T2. ❪G,L.ⓤ[J]❫ ⊢ T1 ➡[h,n] T2 →
+ ∀p,I. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡[h,n] ⓑ[p,I]V2.T2.
/4 width=4 by lsubr_cpm_trans, cpm_bind, lsubr_unit/ qed.
(* Properties with simple terms *********************************************)
(* Basic_2A1: includes: cpr_inv_appl1_simple *)
-lemma cpm_inv_appl1_simple: ∀n,h,G,L,V1,T1,U. ❪G,L❫ ⊢ ⓐV1.T1 ➡[n,h] U → 𝐒❪T1❫ →
- ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 & ❪G,L❫ ⊢ T1 ➡[n,h] T2 &
+lemma cpm_inv_appl1_simple: ∀h,n,G,L,V1,T1,U. ❪G,L❫ ⊢ ⓐV1.T1 ➡[h,n] U → 𝐒❪T1❫ →
+ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 & ❪G,L❫ ⊢ T1 ➡[h,n] T2 &
U = ⓐV2.T2.
-#n #h #G #L #V1 #T1 #U * #c #Hc #H #HT1 elim (cpg_inv_appl1_simple … H HT1) -H -HT1
+#h #n #G #L #V1 #T1 #U * #c #Hc #H #HT1 elim (cpg_inv_appl1_simple … H HT1) -H -HT1
#cV #cT #V2 #T2 #HV12 #HT12 #H1 #H2 destruct elim (isrt_inv_max … Hc) -Hc
#nV #nT #HnV #HnT #H destruct elim (isrt_inv_shift … HnV) -HnV
#HnV #H destruct /3 width=5 by ex3_2_intro, ex2_intro/
(* Inversion lemmas with sort-irrelevant equivalence for terms **************)
-lemma cpm_teqx_inv_lref_sn (n) (h) (G) (L) (i):
- ∀X. ❪G,L❫ ⊢ #i ➡[n,h] X → #i ≛ X →
+lemma cpm_teqx_inv_lref_sn (h) (n) (G) (L) (i):
+ ∀X. ❪G,L❫ ⊢ #i ➡[h,n] X → #i ≛ X →
∧∧ X = #i & n = 0.
-#n #h #G #L #i #X #H1 #H2
+#h #n #G #L #i #X #H1 #H2
lapply (teqx_inv_lref1 … H2) -H2 #H destruct
elim (cpm_inv_lref1_drops … H1) -H1 // * [| #m ]
#K #V1 #V2 #_ #_ #H -V1
elim (lifts_inv_lref2_uni_lt … H) -H //
qed-.
-lemma cpm_teqx_inv_atom_sn (n) (h) (I) (G) (L):
- ∀X. ❪G,L❫ ⊢ ⓪[I] ➡[n,h] X → ⓪[I] ≛ X →
+lemma cpm_teqx_inv_atom_sn (h) (n) (I) (G) (L):
+ ∀X. ❪G,L❫ ⊢ ⓪[I] ➡[h,n] X → ⓪[I] ≛ X →
∨∨ ∧∧ X = ⓪[I] & n = 0
| ∃∃s. X = ⋆(⫯[h]s) & I = Sort s & n = 1.
-#n #h * #s #G #L #X #H1 #H2
+#h #n * #s #G #L #X #H1 #H2
[ elim (cpm_inv_sort1 … H1) -H1
cases n -n [| #n ] #H #Hn destruct -H2
[ /3 width=1 by or_introl, conj/
(* Note: cpr_flat: does not hold in basic_1 *)
(* Basic_1: includes: pr2_thin_dx *)
lemma cpr_flat: ∀h,I,G,L,V1,V2,T1,T2.
- ❪G,L❫ ⊢ V1 ➡[h] V2 → ❪G,L❫ ⊢ T1 ➡[h] T2 →
- ❪G,L❫ ⊢ ⓕ[I]V1.T1 ➡[h] ⓕ[I]V2.T2.
+ ❪G,L❫ ⊢ V1 ➡[h,0] V2 → ❪G,L❫ ⊢ T1 ➡[h,0] T2 →
+ ❪G,L❫ ⊢ ⓕ[I]V1.T1 ➡[h,0] ⓕ[I]V2.T2.
#h * /2 width=1 by cpm_cast, cpm_appl/
qed.
(* Basic_1: was: pr2_head_1 *)
-lemma cpr_pair_sn: ∀h,I,G,L,V1,V2. ❪G,L❫ ⊢ V1 ➡[h] V2 →
- ∀T. ❪G,L❫ ⊢ ②[I]V1.T ➡[h] ②[I]V2.T.
+lemma cpr_pair_sn: ∀h,I,G,L,V1,V2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 →
+ ∀T. ❪G,L❫ ⊢ ②[I]V1.T ➡[h,0] ②[I]V2.T.
#h * /2 width=1 by cpm_bind, cpr_flat/
qed.
(* Basic inversion properties ***********************************************)
-lemma cpr_inv_atom1: ∀h,J,G,L,T2. ❪G,L❫ ⊢ ⓪[J] ➡[h] T2 →
+lemma cpr_inv_atom1: ∀h,J,G,L,T2. ❪G,L❫ ⊢ ⓪[J] ➡[h,0] T2 →
∨∨ T2 = ⓪[J]
- | ∃∃K,V1,V2. ❪G,K❫ ⊢ V1 ➡[h] V2 & ⇧[1] V2 ≘ T2 &
+ | ∃∃K,V1,V2. ❪G,K❫ ⊢ V1 ➡[h,0] V2 & ⇧[1] V2 ≘ T2 &
L = K.ⓓV1 & J = LRef 0
- | ∃∃I,K,T,i. ❪G,K❫ ⊢ #i ➡[h] T & ⇧[1] T ≘ T2 &
+ | ∃∃I,K,T,i. ❪G,K❫ ⊢ #i ➡[h,0] T & ⇧[1] T ≘ T2 &
L = K.ⓘ[I] & J = LRef (↑i).
#h #J #G #L #T2 #H elim (cpm_inv_atom1 … H) -H *
[2,4:|*: /3 width=8 by or3_intro0, or3_intro1, or3_intro2, ex4_4_intro, ex4_3_intro/ ]
qed-.
(* Basic_1: includes: pr0_gen_sort pr2_gen_sort *)
-lemma cpr_inv_sort1: ∀h,G,L,T2,s. ❪G,L❫ ⊢ ⋆s ➡[h] T2 → T2 = ⋆s.
+lemma cpr_inv_sort1: ∀h,G,L,T2,s. ❪G,L❫ ⊢ ⋆s ➡[h,0] T2 → T2 = ⋆s.
#h #G #L #T2 #s #H elim (cpm_inv_sort1 … H) -H //
qed-.
-lemma cpr_inv_zero1: ∀h,G,L,T2. ❪G,L❫ ⊢ #0 ➡[h] T2 →
+lemma cpr_inv_zero1: ∀h,G,L,T2. ❪G,L❫ ⊢ #0 ➡[h,0] T2 →
∨∨ T2 = #0
- | ∃∃K,V1,V2. ❪G,K❫ ⊢ V1 ➡[h] V2 & ⇧[1] V2 ≘ T2 &
+ | ∃∃K,V1,V2. ❪G,K❫ ⊢ V1 ➡[h,0] V2 & ⇧[1] V2 ≘ T2 &
L = K.ⓓV1.
#h #G #L #T2 #H elim (cpm_inv_zero1 … H) -H *
/3 width=6 by ex3_3_intro, or_introl, or_intror/
#n #K #V1 #V2 #_ #_ #_ #H destruct
qed-.
-lemma cpr_inv_lref1: ∀h,G,L,T2,i. ❪G,L❫ ⊢ #↑i ➡[h] T2 →
+lemma cpr_inv_lref1: ∀h,G,L,T2,i. ❪G,L❫ ⊢ #↑i ➡[h,0] T2 →
∨∨ T2 = #(↑i)
- | ∃∃I,K,T. ❪G,K❫ ⊢ #i ➡[h] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I].
+ | ∃∃I,K,T. ❪G,K❫ ⊢ #i ➡[h,0] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I].
#h #G #L #T2 #i #H elim (cpm_inv_lref1 … H) -H *
/3 width=6 by ex3_3_intro, or_introl, or_intror/
qed-.
-lemma cpr_inv_gref1: ∀h,G,L,T2,l. ❪G,L❫ ⊢ §l ➡[h] T2 → T2 = §l.
+lemma cpr_inv_gref1: ∀h,G,L,T2,l. ❪G,L❫ ⊢ §l ➡[h,0] T2 → T2 = §l.
#h #G #L #T2 #l #H elim (cpm_inv_gref1 … H) -H //
qed-.
(* Basic_1: includes: pr0_gen_cast pr2_gen_cast *)
-lemma cpr_inv_cast1: ∀h,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓝ V1.U1 ➡[h] U2 →
- ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 & ❪G,L❫ ⊢ U1 ➡[h] T2 &
+lemma cpr_inv_cast1: ∀h,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓝ V1.U1 ➡[h,0] U2 →
+ ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 & ❪G,L❫ ⊢ U1 ➡[h,0] T2 &
U2 = ⓝV2.T2
- | ❪G,L❫ ⊢ U1 ➡[h] U2.
+ | ❪G,L❫ ⊢ U1 ➡[h,0] U2.
#h #G #L #V1 #U1 #U2 #H elim (cpm_inv_cast1 … H) -H
/2 width=1 by or_introl, or_intror/ * #n #_ #H destruct
qed-.
-lemma cpr_inv_flat1: ∀h,I,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓕ[I]V1.U1 ➡[h] U2 →
- ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 & ❪G,L❫ ⊢ U1 ➡[h] T2 &
+lemma cpr_inv_flat1: ∀h,I,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓕ[I]V1.U1 ➡[h,0] U2 →
+ ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 & ❪G,L❫ ⊢ U1 ➡[h,0] T2 &
U2 = ⓕ[I]V2.T2
- | (❪G,L❫ ⊢ U1 ➡[h] U2 ∧ I = Cast)
- | ∃∃p,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 & ❪G,L❫ ⊢ W1 ➡[h] W2 &
- ❪G,L.ⓛW1❫ ⊢ T1 ➡[h] T2 & U1 = ⓛ[p]W1.T1 &
+ | (❪G,L❫ ⊢ U1 ➡[h,0] U2 ∧ I = Cast)
+ | ∃∃p,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 & ❪G,L❫ ⊢ W1 ➡[h,0] W2 &
+ ❪G,L.ⓛW1❫ ⊢ T1 ➡[h,0] T2 & U1 = ⓛ[p]W1.T1 &
U2 = ⓓ[p]ⓝW2.V2.T2 & I = Appl
- | ∃∃p,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h] V & ⇧[1] V ≘ V2 &
- ❪G,L❫ ⊢ W1 ➡[h] W2 & ❪G,L.ⓓW1❫ ⊢ T1 ➡[h] T2 &
+ | ∃∃p,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V & ⇧[1] V ≘ V2 &
+ ❪G,L❫ ⊢ W1 ➡[h,0] W2 & ❪G,L.ⓓW1❫ ⊢ T1 ➡[h,0] T2 &
U1 = ⓓ[p]W1.T1 &
U2 = ⓓ[p]W2.ⓐV2.T2 & I = Appl.
#h * #G #L #V1 #U1 #U2 #H
lemma cpr_ind (h): ∀Q:relation4 genv lenv term term.
(∀I,G,L. Q G L (⓪[I]) (⓪[I])) →
- (∀G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ➡[h] V2 → Q G K V1 V2 →
+ (∀G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ➡[h,0] V2 → Q G K V1 V2 →
⇧[1] V2 ≘ W2 → Q G (K.ⓓV1) (#0) W2
- ) → (∀I,G,K,T,U,i. ❪G,K❫ ⊢ #i ➡[h] T → Q G K (#i) T →
+ ) → (∀I,G,K,T,U,i. ❪G,K❫ ⊢ #i ➡[h,0] T → Q G K (#i) T →
⇧[1] T ≘ U → Q G (K.ⓘ[I]) (#↑i) (U)
- ) → (∀p,I,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡[h] T2 →
+ ) → (∀p,I,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡[h,0] T2 →
Q G L V1 V2 → Q G (L.ⓑ[I]V1) T1 T2 → Q G L (ⓑ[p,I]V1.T1) (ⓑ[p,I]V2.T2)
- ) → (∀I,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 → ❪G,L❫ ⊢ T1 ➡[h] T2 →
+ ) → (∀I,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 → ❪G,L❫ ⊢ T1 ➡[h,0] T2 →
Q G L V1 V2 → Q G L T1 T2 → Q G L (ⓕ[I]V1.T1) (ⓕ[I]V2.T2)
- ) → (∀G,L,V,T1,T,T2. ⇧[1] T ≘ T1 → ❪G,L❫ ⊢ T ➡[h] T2 →
+ ) → (∀G,L,V,T1,T,T2. ⇧[1] T ≘ T1 → ❪G,L❫ ⊢ T ➡[h,0] T2 →
Q G L T T2 → Q G L (+ⓓV.T1) T2
- ) → (∀G,L,V,T1,T2. ❪G,L❫ ⊢ T1 ➡[h] T2 → Q G L T1 T2 →
+ ) → (∀G,L,V,T1,T2. ❪G,L❫ ⊢ T1 ➡[h,0] T2 → Q G L T1 T2 →
Q G L (ⓝV.T1) T2
- ) → (∀p,G,L,V1,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 → ❪G,L❫ ⊢ W1 ➡[h] W2 → ❪G,L.ⓛW1❫ ⊢ T1 ➡[h] T2 →
+ ) → (∀p,G,L,V1,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 → ❪G,L❫ ⊢ W1 ➡[h,0] W2 → ❪G,L.ⓛW1❫ ⊢ T1 ➡[h,0] T2 →
Q G L V1 V2 → Q G L W1 W2 → Q G (L.ⓛW1) T1 T2 →
Q G L (ⓐV1.ⓛ[p]W1.T1) (ⓓ[p]ⓝW2.V2.T2)
- ) → (∀p,G,L,V1,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h] V → ❪G,L❫ ⊢ W1 ➡[h] W2 → ❪G,L.ⓓW1❫ ⊢ T1 ➡[h] T2 →
+ ) → (∀p,G,L,V1,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V → ❪G,L❫ ⊢ W1 ➡[h,0] W2 → ❪G,L.ⓓW1❫ ⊢ T1 ➡[h,0] T2 →
Q G L V1 V → Q G L W1 W2 → Q G (L.ⓓW1) T1 T2 →
⇧[1] V ≘ V2 → Q G L (ⓐV1.ⓓ[p]W1.T1) (ⓓ[p]W2.ⓐV2.T2)
) →
- ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡[h] T2 → Q G L T1 T2.
+ ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡[h,0] T2 → Q G L T1 T2.
#h #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #G #L #T1 #T2
@(insert_eq_0 … 0) #n #H
@(cpm_ind … H) -G -L -T1 -T2 -n [2,4,11:|*: /3 width=4 by/ ]
(* Advanced inversion lemmas ************************************************)
(* Basic_2A1: includes: cpr_inv_atom1 *)
-lemma cpr_inv_atom1_drops: ∀h,I,G,L,T2. ❪G,L❫ ⊢ ⓪[I] ➡[h] T2 →
+lemma cpr_inv_atom1_drops: ∀h,I,G,L,T2. ❪G,L❫ ⊢ ⓪[I] ➡[h,0] T2 →
∨∨ T2 = ⓪[I]
- | ∃∃K,V,V2,i. ⇩[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ➡[h] V2 &
+ | ∃∃K,V,V2,i. ⇩[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ➡[h,0] V2 &
⇧[↑i] V2 ≘ T2 & I = LRef i.
#h #I #G #L #T2 #H elim (cpm_inv_atom1_drops … H) -H *
[ /2 width=1 by or_introl/
(* Basic_1: includes: pr0_gen_lref pr2_gen_lref *)
(* Basic_2A1: includes: cpr_inv_lref1 *)
-lemma cpr_inv_lref1_drops: ∀h,G,L,T2,i. ❪G,L❫ ⊢ #i ➡[h] T2 →
+lemma cpr_inv_lref1_drops: ∀h,G,L,T2,i. ❪G,L❫ ⊢ #i ➡[h,0] T2 →
∨∨ T2 = #i
- | ∃∃K,V,V2. ⇩[i] L ≘ K. ⓓV & ❪G,K❫ ⊢ V ➡[h] V2 &
+ | ∃∃K,V,V2. ⇩[i] L ≘ K. ⓓV & ❪G,K❫ ⊢ V ➡[h,0] V2 &
⇧[↑i] V2 ≘ T2.
#h #G #L #T2 #i #H elim (cpm_inv_lref1_drops … H) -H *
[ /2 width=1 by or_introl/
lemma cpr_subst (h) (G) (L) (U1) (i):
∀K,V. ⇩[i] L ≘ K.ⓓV →
- ∃∃U2,T2. ❪G,L❫ ⊢ U1 ➡[h] U2 & ⇧[i,1] T2 ≘ U2.
+ ∃∃U2,T2. ❪G,L❫ ⊢ U1 ➡[h,0] U2 & ⇧[i,1] T2 ≘ U2.
#h #G #L #U1 @(fqup_wf_ind_eq (Ⓣ) … G L U1) -G -L -U1
#G0 #L0 #U0 #IH #G #L * *
[ #s #HG #HL #HT #i #K #V #_ destruct -IH
(* CONTEXT-SENSITIVE PARALLEL R-TRANSITION FOR BINDERS **********************)
-definition cpr_ext (h) (G): relation3 lenv bind bind ≝
- cext2 (λL. cpm h G L 0).
+definition cpr_ext (h) (n) (G): relation3 lenv bind bind ≝
+ cext2 (λL. cpm h G L n).
interpretation
"context-sensitive parallel r-transition (binder)"
- 'PRed h G L I1 I2 = (cpr_ext h G L I1 I2).
+ 'PRed h n G L I1 I2 = (cpr_ext h n G L I1 I2).
(* Properties with context-free sort-irrelevant equivalence *****************)
lemma cpr_abbr_pos_tneqx (h) (G) (L) (V) (T1):
- ∃∃T2. ❪G,L❫ ⊢ +ⓓV.T1 ➡[h] T2 & (+ⓓV.T1 ≛ T2 → ⊥).
+ ∃∃T2. ❪G,L❫ ⊢ +ⓓV.T1 ➡[h,0] T2 & (+ⓓV.T1 ≛ T2 → ⊥).
#h #G #L #V #U1
elim (cpr_subst h G (L.ⓓV) U1 … 0) [|*: /2 width=4 by drops_refl/ ] #U2 #T2 #HU12 #HTU2
elim (teqx_dec U1 U2) [ -HU12 #HU12 | -HTU2 #HnU12 ]
]
qed-.
-lemma cpt_inv_lref_sn_ctop (n) (h) (G) (i):
+lemma cpt_inv_lref_sn_ctop (h) (n) (G) (i):
∀X2. ❪G,⋆❫ ⊢ #i ⬆[h,n] X2 → ∧∧ X2 = #i & n = 0.
#h #n #G * [| #i ] #X2 #H
[ elim (cpt_inv_zero_sn … H) -H *
(* Forward lemmas with t-bound rt-transition for terms **********************)
lemma cpt_fwd_cpm (h) (n) (G) (L):
- ∀T1,T2. ❪G,L❫ ⊢ T1 ⬆[h,n] T2 → ❪G,L❫ ⊢ T1 ➡[n,h] T2.
+ ∀T1,T2. ❪G,L❫ ⊢ T1 ⬆[h,n] T2 → ❪G,L❫ ⊢ T1 ➡[h,n] T2.
#h #n #G #L #T1 #T2 #H
@(cpt_ind … H) -n -G -L -T1 -T2
/3 width=3 by cpm_ee, cpm_cast, cpm_appl, cpm_bind, cpm_lref, cpm_ell, cpm_delta/
(* Basic properties *********************************************************)
(* Basic_2A1: includes: cpr_fpb *)
-lemma cpm_fpb (n) (h) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 → (T1 ≛ T2 → ⊥) →
+lemma cpm_fpb (h) (n) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → (T1 ≛ T2 → ⊥) →
❪G,L,T1❫ ≻[h] ❪G,L,T2❫.
/3 width=2 by fpb_cpx, cpm_fwd_cpx/ qed.
-lemma lpr_fpb (h) (G) (T): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h] L2 → (L1 ≛[T] L2 → ⊥) →
+lemma lpr_fpb (h) (G) (T): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h,0] L2 → (L1 ≛[T] L2 → ⊥) →
❪G,L1,T❫ ≻[h] ❪G,L2,T❫.
/3 width=1 by fpb_lpx, lpr_fwd_lpx/ qed.
/2 width=1 by fpbq_cpx/ qed.
(* Basic_2A1: includes: cpr_fpbq *)
-lemma cpm_fpbq (n) (h) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 → ❪G,L,T1❫ ≽[h] ❪G,L,T2❫.
+lemma cpm_fpbq (h) (n) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → ❪G,L,T1❫ ≽[h] ❪G,L,T2❫.
/3 width=2 by fpbq_cpx, cpm_fwd_cpx/ qed.
-lemma lpr_fpbq (h) (G) (T): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h] L2 → ❪G,L1,T❫ ≽[h] ❪G,L2,T❫.
+lemma lpr_fpbq (h) (G) (T): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h,0] L2 → ❪G,L1,T❫ ≽[h] ❪G,L2,T❫.
/3 width=1 by fpbq_lpx, lpr_fwd_lpx/ qed.
(* Basic_2A1: removed theorems 2:
(* *)
(**************************************************************************)
-include "basic_2/notation/relations/predsn_4.ma".
+include "basic_2/notation/relations/predsn_5.ma".
include "static_2/relocation/lex.ma".
include "basic_2/rt_transition/cpr_ext.ma".
(* PARALLEL R-TRANSITION FOR FULL LOCAL ENVIRONMENTS ************************)
-definition lpr (h) (G): relation lenv ≝
- lex (λL. cpm h G L 0).
+definition lpr (h) (n) (G): relation lenv ≝
+ lex (λL. cpm h G L n).
interpretation
"parallel rt-transition (full local environment)"
- 'PRedSn h G L1 L2 = (lpr h G L1 L2).
+ 'PRedSn h n G L1 L2 = (lpr h n G L1 L2).
(* Basic properties *********************************************************)
-lemma lpr_bind (h) (G): ∀K1,K2. ❪G,K1❫ ⊢ ➡[h] K2 →
- ∀I1,I2. ❪G,K1❫ ⊢ I1 ➡[h] I2 → ❪G,K1.ⓘ[I1]❫ ⊢ ➡[h] K2.ⓘ[I2].
+lemma lpr_bind (h) (G): ∀K1,K2. ❪G,K1❫ ⊢ ➡[h,0] K2 →
+ ∀I1,I2. ❪G,K1❫ ⊢ I1 ➡[h,0] I2 → ❪G,K1.ⓘ[I1]❫ ⊢ ➡[h,0] K2.ⓘ[I2].
/2 width=1 by lex_bind/ qed.
(* Note: lemma 250 *)
-lemma lpr_refl (h) (G): reflexive … (lpr h G).
+lemma lpr_refl (h) (G): reflexive … (lpr h 0 G).
/2 width=1 by lex_refl/ qed.
(* Advanced properties ******************************************************)
-lemma lpr_bind_refl_dx (h) (G): ∀K1,K2. ❪G,K1❫ ⊢ ➡[h] K2 →
- ∀I. ❪G,K1.ⓘ[I]❫ ⊢ ➡[h] K2.ⓘ[I].
+lemma lpr_bind_refl_dx (h) (G): ∀K1,K2. ❪G,K1❫ ⊢ ➡[h,0] K2 →
+ ∀I. ❪G,K1.ⓘ[I]❫ ⊢ ➡[h,0] K2.ⓘ[I].
/2 width=1 by lex_bind_refl_dx/ qed.
-lemma lpr_pair (h) (G): ∀K1,K2,V1,V2. ❪G,K1❫ ⊢ ➡[h] K2 → ❪G,K1❫ ⊢ V1 ➡[h] V2 →
- ∀I. ❪G,K1.ⓑ[I]V1❫ ⊢ ➡[h] K2.ⓑ[I]V2.
+lemma lpr_pair (h) (G): ∀K1,K2,V1,V2. ❪G,K1❫ ⊢ ➡[h,0] K2 → ❪G,K1❫ ⊢ V1 ➡[h,0] V2 →
+ ∀I. ❪G,K1.ⓑ[I]V1❫ ⊢ ➡[h,0] K2.ⓑ[I]V2.
/2 width=1 by lex_pair/ qed.
(* Basic inversion lemmas ***************************************************)
(* Basic_2A1: was: lpr_inv_atom1 *)
(* Basic_1: includes: wcpr0_gen_sort *)
-lemma lpr_inv_atom_sn (h) (G): ∀L2. ❪G,⋆❫ ⊢ ➡[h] L2 → L2 = ⋆.
+lemma lpr_inv_atom_sn (h) (G): ∀L2. ❪G,⋆❫ ⊢ ➡[h,0] L2 → L2 = ⋆.
/2 width=2 by lex_inv_atom_sn/ qed-.
-lemma lpr_inv_bind_sn (h) (G): ∀I1,L2,K1. ❪G,K1.ⓘ[I1]❫ ⊢ ➡[h] L2 →
- ∃∃I2,K2. ❪G,K1❫ ⊢ ➡[h] K2 & ❪G,K1❫ ⊢ I1 ➡[h] I2 &
+lemma lpr_inv_bind_sn (h) (G): ∀I1,L2,K1. ❪G,K1.ⓘ[I1]❫ ⊢ ➡[h,0] L2 →
+ ∃∃I2,K2. ❪G,K1❫ ⊢ ➡[h,0] K2 & ❪G,K1❫ ⊢ I1 ➡[h,0] I2 &
L2 = K2.ⓘ[I2].
/2 width=1 by lex_inv_bind_sn/ qed-.
(* Basic_2A1: was: lpr_inv_atom2 *)
-lemma lpr_inv_atom_dx (h) (G): ∀L1. ❪G,L1❫ ⊢ ➡[h] ⋆ → L1 = ⋆.
+lemma lpr_inv_atom_dx (h) (G): ∀L1. ❪G,L1❫ ⊢ ➡[h,0] ⋆ → L1 = ⋆.
/2 width=2 by lex_inv_atom_dx/ qed-.
-lemma lpr_inv_bind_dx (h) (G): ∀I2,L1,K2. ❪G,L1❫ ⊢ ➡[h] K2.ⓘ[I2] →
- ∃∃I1,K1. ❪G,K1❫ ⊢ ➡[h] K2 & ❪G,K1❫ ⊢ I1 ➡[h] I2 &
+lemma lpr_inv_bind_dx (h) (G): ∀I2,L1,K2. ❪G,L1❫ ⊢ ➡[h,0] K2.ⓘ[I2] →
+ ∃∃I1,K1. ❪G,K1❫ ⊢ ➡[h,0] K2 & ❪G,K1❫ ⊢ I1 ➡[h,0] I2 &
L1 = K1.ⓘ[I1].
/2 width=1 by lex_inv_bind_dx/ qed-.
(* Advanced inversion lemmas ************************************************)
-lemma lpr_inv_unit_sn (h) (G): ∀I,L2,K1. ❪G,K1.ⓤ[I]❫ ⊢ ➡[h] L2 →
- ∃∃K2. ❪G,K1❫ ⊢ ➡[h] K2 & L2 = K2.ⓤ[I].
+lemma lpr_inv_unit_sn (h) (G): ∀I,L2,K1. ❪G,K1.ⓤ[I]❫ ⊢ ➡[h,0] L2 →
+ ∃∃K2. ❪G,K1❫ ⊢ ➡[h,0] K2 & L2 = K2.ⓤ[I].
/2 width=1 by lex_inv_unit_sn/ qed-.
(* Basic_2A1: was: lpr_inv_pair1 *)
(* Basic_1: includes: wcpr0_gen_head *)
-lemma lpr_inv_pair_sn (h) (G): ∀I,L2,K1,V1. ❪G,K1.ⓑ[I]V1❫ ⊢ ➡[h] L2 →
- ∃∃K2,V2. ❪G,K1❫ ⊢ ➡[h] K2 & ❪G,K1❫ ⊢ V1 ➡[h] V2 &
+lemma lpr_inv_pair_sn (h) (G): ∀I,L2,K1,V1. ❪G,K1.ⓑ[I]V1❫ ⊢ ➡[h,0] L2 →
+ ∃∃K2,V2. ❪G,K1❫ ⊢ ➡[h,0] K2 & ❪G,K1❫ ⊢ V1 ➡[h,0] V2 &
L2 = K2.ⓑ[I]V2.
/2 width=1 by lex_inv_pair_sn/ qed-.
-lemma lpr_inv_unit_dx (h) (G): ∀I,L1,K2. ❪G,L1❫ ⊢ ➡[h] K2.ⓤ[I] →
- ∃∃K1. ❪G,K1❫ ⊢ ➡[h] K2 & L1 = K1.ⓤ[I].
+lemma lpr_inv_unit_dx (h) (G): ∀I,L1,K2. ❪G,L1❫ ⊢ ➡[h,0] K2.ⓤ[I] →
+ ∃∃K1. ❪G,K1❫ ⊢ ➡[h,0] K2 & L1 = K1.ⓤ[I].
/2 width=1 by lex_inv_unit_dx/ qed-.
(* Basic_2A1: was: lpr_inv_pair2 *)
-lemma lpr_inv_pair_dx (h) (G): ∀I,L1,K2,V2. ❪G,L1❫ ⊢ ➡[h] K2.ⓑ[I]V2 →
- ∃∃K1,V1. ❪G,K1❫ ⊢ ➡[h] K2 & ❪G,K1❫ ⊢ V1 ➡[h] V2 &
+lemma lpr_inv_pair_dx (h) (G): ∀I,L1,K2,V2. ❪G,L1❫ ⊢ ➡[h,0] K2.ⓑ[I]V2 →
+ ∃∃K1,V1. ❪G,K1❫ ⊢ ➡[h,0] K2 & ❪G,K1❫ ⊢ V1 ➡[h,0] V2 &
L1 = K1.ⓑ[I]V1.
/2 width=1 by lex_inv_pair_dx/ qed-.
-lemma lpr_inv_pair (h) (G): ∀I1,I2,L1,L2,V1,V2. ❪G,L1.ⓑ[I1]V1❫ ⊢ ➡[h] L2.ⓑ[I2]V2 →
- ∧∧ ❪G,L1❫ ⊢ ➡[h] L2 & ❪G,L1❫ ⊢ V1 ➡[h] V2 & I1 = I2.
+lemma lpr_inv_pair (h) (G): ∀I1,I2,L1,L2,V1,V2. ❪G,L1.ⓑ[I1]V1❫ ⊢ ➡[h,0] L2.ⓑ[I2]V2 →
+ ∧∧ ❪G,L1❫ ⊢ ➡[h,0] L2 & ❪G,L1❫ ⊢ V1 ➡[h,0] V2 & I1 = I2.
/2 width=1 by lex_inv_pair/ qed-.
(* Basic_1: removed theorems 3: wcpr0_getl wcpr0_getl_back
(* Properties with atomic arity assignment for terms ************************)
-lemma lpr_aaa_conf (h): ∀G,T. Conf3 … (λL. aaa G L T) (lpr h G).
+lemma lpr_aaa_conf (h): ∀G,T. Conf3 … (λL. aaa G L T) (lpr h 0 G).
/3 width=5 by lpx_aaa_conf, lpr_fwd_lpx/ qed-.
(* Properties with extended structural successor for closures ***************)
lemma fqu_cpr_trans_sn (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ →
- ∀U2. ❪G2,L2❫ ⊢ T2 ➡[h] U2 →
- ∃∃L,U1. ❪G1,L1❫ ⊢ ➡[h] L & ❪G1,L1❫ ⊢ T1 ➡[h] U1 & ❪G1,L,U1❫ ⬂[b] ❪G2,L2,U2❫.
+ ∀U2. ❪G2,L2❫ ⊢ T2 ➡[h,0] U2 →
+ ∃∃L,U1. ❪G1,L1❫ ⊢ ➡[h,0] L & ❪G1,L1❫ ⊢ T1 ➡[h,0] U1 & ❪G1,L,U1❫ ⬂[b] ❪G2,L2,U2❫.
#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
[ /3 width=5 by lpr_pair, fqu_lref_O, ex3_2_intro/
| /3 width=5 by cpr_pair_sn, fqu_pair_sn, ex3_2_intro/
qed-.
lemma fqu_cpr_trans_dx (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ →
- ∀U2. ❪G2,L2❫ ⊢ T2 ➡[h] U2 →
- ∃∃L,U1. ❪G1,L1❫ ⊢ ➡[h] L & ❪G1,L❫ ⊢ T1 ➡[h] U1 & ❪G1,L,U1❫ ⬂[b] ❪G2,L2,U2❫.
+ ∀U2. ❪G2,L2❫ ⊢ T2 ➡[h,0] U2 →
+ ∃∃L,U1. ❪G1,L1❫ ⊢ ➡[h,0] L & ❪G1,L❫ ⊢ T1 ➡[h,0] U1 & ❪G1,L,U1❫ ⬂[b] ❪G2,L2,U2❫.
#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
[ /3 width=5 by lpr_pair, fqu_lref_O, ex3_2_intro/
| /3 width=5 by cpr_pair_sn, fqu_pair_sn, ex3_2_intro/
qed-.
lemma fqu_lpr_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ →
- ∀K2. ❪G2,L2❫ ⊢ ➡[h] K2 →
- ∃∃K1,T. ❪G1,L1❫ ⊢ ➡[h] K1 & ❪G1,L1❫ ⊢ T1 ➡[h] T & ❪G1,K1,T❫ ⬂[b] ❪G2,K2,T2❫.
+ ∀K2. ❪G2,L2❫ ⊢ ➡[h,0] K2 →
+ ∃∃K1,T. ❪G1,L1❫ ⊢ ➡[h,0] K1 & ❪G1,L1❫ ⊢ T1 ➡[h,0] T & ❪G1,K1,T❫ ⬂[b] ❪G2,K2,T2❫.
#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
[ /3 width=5 by lpr_bind_refl_dx, fqu_lref_O, ex3_2_intro/
| /3 width=5 by cpr_pair_sn, fqu_pair_sn, ex3_2_intro/
(* Note: does not hold in Basic_2A1 because it requires cpm *)
(* Note: L1 = K0.ⓛV0 and T1 = #0 require n = 1 *)
lemma lpr_fqu_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ →
- ∀K1. ❪G1,K1❫ ⊢ ➡[h] L1 →
- ∃∃n,K2,T. ❪G1,K1❫ ⊢ T1 ➡[n,h] T & ❪G1,K1,T❫ ⬂[b] ❪G2,K2,T2❫ & ❪G2,K2❫ ⊢ ➡[h] L2 & n ≤ 1.
+ ∀K1. ❪G1,K1❫ ⊢ ➡[h,0] L1 →
+ ∃∃n,K2,T. ❪G1,K1❫ ⊢ T1 ➡[h,n] T & ❪G1,K1,T❫ ⬂[b] ❪G2,K2,T2❫ & ❪G2,K2❫ ⊢ ➡[h,0] L2 & n ≤ 1.
#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
[ * #G #K #V #K1 #H
elim (lpr_inv_pair_dx … H) -H #K0 #V0 #HK0 #HV0 #H destruct
(* Properties with extended optional structural successor for closures ******)
lemma fquq_cpr_trans_sn (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ →
- ∀U2. ❪G2,L2❫ ⊢ T2 ➡[h] U2 →
- ∃∃L,U1. ❪G1,L1❫ ⊢ ➡[h] L & ❪G1,L1❫ ⊢ T1 ➡[h] U1 & ❪G1,L,U1❫ ⬂⸮[b] ❪G2,L2,U2❫.
+ ∀U2. ❪G2,L2❫ ⊢ T2 ➡[h,0] U2 →
+ ∃∃L,U1. ❪G1,L1❫ ⊢ ➡[h,0] L & ❪G1,L1❫ ⊢ T1 ➡[h,0] U1 & ❪G1,L,U1❫ ⬂⸮[b] ❪G2,L2,U2❫.
#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #U2 #HTU2 cases H -H
[ #HT12 elim (fqu_cpr_trans_sn … HT12 … HTU2) /3 width=5 by fqu_fquq, ex3_2_intro/
| * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/
qed-.
lemma fquq_cpr_trans_dx (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ →
- ∀U2. ❪G2,L2❫ ⊢ T2 ➡[h] U2 →
- ∃∃L,U1. ❪G1,L1❫ ⊢ ➡[h] L & ❪G1,L❫ ⊢ T1 ➡[h] U1 & ❪G1,L,U1❫ ⬂⸮[b] ❪G2,L2,U2❫.
+ ∀U2. ❪G2,L2❫ ⊢ T2 ➡[h,0] U2 →
+ ∃∃L,U1. ❪G1,L1❫ ⊢ ➡[h,0] L & ❪G1,L❫ ⊢ T1 ➡[h,0] U1 & ❪G1,L,U1❫ ⬂⸮[b] ❪G2,L2,U2❫.
#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #U2 #HTU2 cases H -H
[ #HT12 elim (fqu_cpr_trans_dx … HT12 … HTU2) /3 width=5 by fqu_fquq, ex3_2_intro/
| * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/
qed-.
lemma fquq_lpr_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ →
- ∀K2. ❪G2,L2❫ ⊢ ➡[h] K2 →
- ∃∃K1,T. ❪G1,L1❫ ⊢ ➡[h] K1 & ❪G1,L1❫ ⊢ T1 ➡[h] T & ❪G1,K1,T❫ ⬂⸮[b] ❪G2,K2,T2❫.
+ ∀K2. ❪G2,L2❫ ⊢ ➡[h,0] K2 →
+ ∃∃K1,T. ❪G1,L1❫ ⊢ ➡[h,0] K1 & ❪G1,L1❫ ⊢ T1 ➡[h,0] T & ❪G1,K1,T❫ ⬂⸮[b] ❪G2,K2,T2❫.
#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #K2 #HLK2 cases H -H
[ #H12 elim (fqu_lpr_trans … H12 … HLK2) /3 width=5 by fqu_fquq, ex3_2_intro/
| * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/
qed-.
lemma lpr_fquq_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ →
- ∀K1. ❪G1,K1❫ ⊢ ➡[h] L1 →
- ∃∃n,K2,T. ❪G1,K1❫ ⊢ T1 ➡[n,h] T & ❪G1,K1,T❫ ⬂⸮[b] ❪G2,K2,T2❫ & ❪G2,K2❫ ⊢ ➡[h] L2 & n ≤ 1.
+ ∀K1. ❪G1,K1❫ ⊢ ➡[h,0] L1 →
+ ∃∃n,K2,T. ❪G1,K1❫ ⊢ T1 ➡[h,n] T & ❪G1,K1,T❫ ⬂⸮[b] ❪G2,K2,T2❫ & ❪G2,K2❫ ⊢ ➡[h,0] L2 & n ≤ 1.
#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #K1 #HKL1 cases H -H
[ #H12 elim (lpr_fqu_trans … H12 … HKL1) -L1 /3 width=7 by fqu_fquq, ex4_3_intro/
| * #H1 #H2 #H3 destruct /2 width=7 by ex4_3_intro/
(* PARALLEL R-TRANSITION FOR FULL LOCAL ENVIRONMENTS ************************)
-lemma lpr_fwd_length (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h] L2 → |L1| = |L2|.
+lemma lpr_fwd_length (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h,0] L2 → |L1| = |L2|.
/2 width=2 by lex_fwd_length/ qed-.
(* PARALLEL R-TRANSITION FOR FULL LOCAL ENVIRONMENTS ************************)
definition IH_cpr_conf_lpr (h): relation3 genv lenv term ≝ λG,L,T.
- ∀T1. ❪G,L❫ ⊢ T ➡[h] T1 → ∀T2. ❪G,L❫ ⊢ T ➡[h] T2 →
- ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 →
- ∃∃T0. ❪G,L1❫ ⊢ T1 ➡[h] T0 & ❪G,L2❫ ⊢ T2 ➡[h] T0.
+ ∀T1. ❪G,L❫ ⊢ T ➡[h,0] T1 → ∀T2. ❪G,L❫ ⊢ T ➡[h,0] T2 →
+ ∀L1. ❪G,L❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 →
+ ∃∃T0. ❪G,L1❫ ⊢ T1 ➡[h,0] T0 & ❪G,L2❫ ⊢ T2 ➡[h,0] T0.
(* Main properties with context-sensitive parallel reduction for terms ******)
fact cpr_conf_lpr_atom_atom (h):
- ∀I,G,L1,L2. ∃∃T. ❪G,L1❫ ⊢ ⓪[I] ➡[h] T & ❪G,L2❫ ⊢ ⓪[I] ➡[h] T.
+ ∀I,G,L1,L2. ∃∃T. ❪G,L1❫ ⊢ ⓪[I] ➡[h,0] T & ❪G,L2❫ ⊢ ⓪[I] ➡[h,0] T.
/2 width=3 by cpr_refl, ex2_intro/ qed-.
fact cpr_conf_lpr_atom_delta (h):
∀G,L,T. ❪G0,L0,#i❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T
) →
∀K0,V0. ⇩[i] L0 ≘ K0.ⓓV0 →
- ∀V2. ❪G0,K0❫ ⊢ V0 ➡[h] V2 → ∀T2. ⇧[↑i] V2 ≘ T2 →
- ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G0,L1❫ ⊢ #i ➡[h] T & ❪G0,L2❫ ⊢ T2 ➡[h] T.
+ ∀V2. ❪G0,K0❫ ⊢ V0 ➡[h,0] V2 → ∀T2. ⇧[↑i] V2 ≘ T2 →
+ ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G0,L1❫ ⊢ #i ➡[h,0] T & ❪G0,L2❫ ⊢ T2 ➡[h,0] T.
#h #G0 #L0 #i #IH #K0 #V0 #HLK0 #V2 #HV02 #T2 #HVT2 #L1 #HL01 #L2 #HL02
elim (lpr_drops_conf … HLK0 … HL01) -HL01 // #X1 #H1 #HLK1
elim (lpr_inv_pair_sn … H1) -H1 #K1 #V1 #HK01 #HV01 #H destruct
∀G,L,T. ❪G0,L0,#i❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T
) →
∀K0,V0. ⇩[i] L0 ≘ K0.ⓓV0 →
- ∀V1. ❪G0,K0❫ ⊢ V0 ➡[h] V1 → ∀T1. ⇧[↑i] V1 ≘ T1 →
+ ∀V1. ❪G0,K0❫ ⊢ V0 ➡[h,0] V1 → ∀T1. ⇧[↑i] V1 ≘ T1 →
∀KX,VX. ⇩[i] L0 ≘ KX.ⓓVX →
- ∀V2. ❪G0,KX❫ ⊢ VX ➡[h] V2 → ∀T2. ⇧[↑i] V2 ≘ T2 →
- ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G0,L1❫ ⊢ T1 ➡[h] T & ❪G0,L2❫ ⊢ T2 ➡[h] T.
+ ∀V2. ❪G0,KX❫ ⊢ VX ➡[h,0] V2 → ∀T2. ⇧[↑i] V2 ≘ T2 →
+ ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G0,L1❫ ⊢ T1 ➡[h,0] T & ❪G0,L2❫ ⊢ T2 ➡[h,0] T.
#h #G0 #L0 #i #IH #K0 #V0 #HLK0 #V1 #HV01 #T1 #HVT1
#KX #VX #H #V2 #HV02 #T2 #HVT2 #L1 #HL01 #L2 #HL02
lapply (drops_mono … H … HLK0) -H #H destruct
∀p,I,G0,L0,V0,T0. (
∀G,L,T. ❪G0,L0,ⓑ[p,I]V0.T0❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T
) →
- ∀V1. ❪G0,L0❫ ⊢ V0 ➡[h] V1 → ∀T1. ❪G0,L0.ⓑ[I]V0❫ ⊢ T0 ➡[h] T1 →
- ∀V2. ❪G0,L0❫ ⊢ V0 ➡[h] V2 → ∀T2. ❪G0,L0.ⓑ[I]V0❫ ⊢ T0 ➡[h] T2 →
- ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G0,L1❫ ⊢ ⓑ[p,I]V1.T1 ➡[h] T & ❪G0,L2❫ ⊢ ⓑ[p,I]V2.T2 ➡[h] T.
+ ∀V1. ❪G0,L0❫ ⊢ V0 ➡[h,0] V1 → ∀T1. ❪G0,L0.ⓑ[I]V0❫ ⊢ T0 ➡[h,0] T1 →
+ ∀V2. ❪G0,L0❫ ⊢ V0 ➡[h,0] V2 → ∀T2. ❪G0,L0.ⓑ[I]V0❫ ⊢ T0 ➡[h,0] T2 →
+ ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G0,L1❫ ⊢ ⓑ[p,I]V1.T1 ➡[h,0] T & ❪G0,L2❫ ⊢ ⓑ[p,I]V2.T2 ➡[h,0] T.
#h #p #I #G0 #L0 #V0 #T0 #IH #V1 #HV01 #T1 #HT01
#V2 #HV02 #T2 #HT02 #L1 #HL01 #L2 #HL02
elim (IH … HV01 … HV02 … HL01 … HL02) //
∀G0,L0,V0,T0. (
∀G,L,T. ❪G0,L0,+ⓓV0.T0❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T
) →
- ∀V1. ❪G0,L0❫ ⊢ V0 ➡[h] V1 → ∀T1. ❪G0,L0.ⓓV0❫ ⊢ T0 ➡[h] T1 →
- ∀T2. ⇧[1]T2 ≘ T0 → ∀X2. ❪G0,L0❫ ⊢ T2 ➡[h] X2 →
- ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G0,L1❫ ⊢ +ⓓV1.T1 ➡[h] T & ❪G0,L2❫ ⊢ X2 ➡[h] T.
+ ∀V1. ❪G0,L0❫ ⊢ V0 ➡[h,0] V1 → ∀T1. ❪G0,L0.ⓓV0❫ ⊢ T0 ➡[h,0] T1 →
+ ∀T2. ⇧[1]T2 ≘ T0 → ∀X2. ❪G0,L0❫ ⊢ T2 ➡[h,0] X2 →
+ ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G0,L1❫ ⊢ +ⓓV1.T1 ➡[h,0] T & ❪G0,L2❫ ⊢ X2 ➡[h,0] T.
#h #G0 #L0 #V0 #T0 #IH #V1 #HV01 #T1 #HT01
#T2 #HT20 #X2 #HTX2 #L1 #HL01 #L2 #HL02
elim (cpm_inv_lifts_sn … HT01 (Ⓣ) … L0 … HT20) -HT01 [| /3 width=1 by drops_refl, drops_drop/ ] #T #HT1 #HT2
∀G0,L0,V0,T0. (
∀G,L,T. ❪G0,L0,+ⓓV0.T0❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T
) →
- ∀T1. ⇧[1] T1 ≘ T0 → ∀X1. ❪G0,L0❫ ⊢ T1 ➡[h] X1 →
- ∀T2. ⇧[1] T2 ≘ T0 → ∀X2. ❪G0,L0❫ ⊢ T2 ➡[h] X2 →
- ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G0,L1❫ ⊢ X1 ➡[h] T & ❪G0,L2❫ ⊢ X2 ➡[h] T.
+ ∀T1. ⇧[1] T1 ≘ T0 → ∀X1. ❪G0,L0❫ ⊢ T1 ➡[h,0] X1 →
+ ∀T2. ⇧[1] T2 ≘ T0 → ∀X2. ❪G0,L0❫ ⊢ T2 ➡[h,0] X2 →
+ ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G0,L1❫ ⊢ X1 ➡[h,0] T & ❪G0,L2❫ ⊢ X2 ➡[h,0] T.
#h #G0 #L0 #V0 #T0 #IH #T1 #HT10 #X1 #HTX1
#T2 #HT20 #X2 #HTX2 #L1 #HL01 #L2 #HL02
lapply (lifts_inj … HT20 … HT10) -HT20 #H destruct
∀I,G0,L0,V0,T0. (
∀G,L,T. ❪G0,L0,ⓕ[I]V0.T0❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T
) →
- ∀V1. ❪G0,L0❫ ⊢ V0 ➡[h] V1 → ∀T1. ❪G0,L0❫ ⊢ T0 ➡[h] T1 →
- ∀V2. ❪G0,L0❫ ⊢ V0 ➡[h] V2 → ∀T2. ❪G0,L0❫ ⊢ T0 ➡[h] T2 →
- ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G0,L1❫ ⊢ ⓕ[I]V1.T1 ➡[h] T & ❪G0,L2❫ ⊢ ⓕ[I]V2.T2 ➡[h] T.
+ ∀V1. ❪G0,L0❫ ⊢ V0 ➡[h,0] V1 → ∀T1. ❪G0,L0❫ ⊢ T0 ➡[h,0] T1 →
+ ∀V2. ❪G0,L0❫ ⊢ V0 ➡[h,0] V2 → ∀T2. ❪G0,L0❫ ⊢ T0 ➡[h,0] T2 →
+ ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G0,L1❫ ⊢ ⓕ[I]V1.T1 ➡[h,0] T & ❪G0,L2❫ ⊢ ⓕ[I]V2.T2 ➡[h,0] T.
#h #I #G0 #L0 #V0 #T0 #IH #V1 #HV01 #T1 #HT01
#V2 #HV02 #T2 #HT02 #L1 #HL01 #L2 #HL02
elim (IH … HV01 … HV02 … HL01 … HL02) //
∀G0,L0,V0,T0. (
∀G,L,T. ❪G0,L0,ⓝV0.T0❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T
) →
- ∀V1,T1. ❪G0,L0❫ ⊢ T0 ➡[h] T1 → ∀T2. ❪G0,L0❫ ⊢ T0 ➡[h] T2 →
- ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G0,L1❫ ⊢ ⓝV1.T1 ➡[h] T & ❪G0,L2❫ ⊢ T2 ➡[h] T.
+ ∀V1,T1. ❪G0,L0❫ ⊢ T0 ➡[h,0] T1 → ∀T2. ❪G0,L0❫ ⊢ T0 ➡[h,0] T2 →
+ ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G0,L1❫ ⊢ ⓝV1.T1 ➡[h,0] T & ❪G0,L2❫ ⊢ T2 ➡[h,0] T.
#h #G0 #L0 #V0 #T0 #IH #V1 #T1 #HT01
#T2 #HT02 #L1 #HL01 #L2 #HL02
elim (IH … HT01 … HT02 … HL01 … HL02) // -L0 -V0 -T0
∀G0,L0,V0,T0. (
∀G,L,T. ❪G0,L0,ⓝV0.T0❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T
) →
- ∀T1. ❪G0,L0❫ ⊢ T0 ➡[h] T1 → ∀T2. ❪G0,L0❫ ⊢ T0 ➡[h] T2 →
- ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G0,L1❫ ⊢ T1 ➡[h] T & ❪G0,L2❫ ⊢ T2 ➡[h] T.
+ ∀T1. ❪G0,L0❫ ⊢ T0 ➡[h,0] T1 → ∀T2. ❪G0,L0❫ ⊢ T0 ➡[h,0] T2 →
+ ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G0,L1❫ ⊢ T1 ➡[h,0] T & ❪G0,L2❫ ⊢ T2 ➡[h,0] T.
#h #G0 #L0 #V0 #T0 #IH #T1 #HT01
#T2 #HT02 #L1 #HL01 #L2 #HL02
elim (IH … HT01 … HT02 … HL01 … HL02) // -L0 -V0 -T0
∀p,G0,L0,V0,W0,T0. (
∀G,L,T. ❪G0,L0,ⓐV0.ⓛ[p]W0.T0❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T
) →
- ∀V1. ❪G0,L0❫ ⊢ V0 ➡[h] V1 → ∀T1. ❪G0,L0❫ ⊢ ⓛ[p]W0.T0 ➡[h] T1 →
- ∀V2. ❪G0,L0❫ ⊢ V0 ➡[h] V2 → ∀W2. ❪G0,L0❫ ⊢ W0 ➡[h] W2 → ∀T2. ❪G0,L0.ⓛW0❫ ⊢ T0 ➡[h] T2 →
- ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G0,L1❫ ⊢ ⓐV1.T1 ➡[h] T & ❪G0,L2❫ ⊢ ⓓ[p]ⓝW2.V2.T2 ➡[h] T.
+ ∀V1. ❪G0,L0❫ ⊢ V0 ➡[h,0] V1 → ∀T1. ❪G0,L0❫ ⊢ ⓛ[p]W0.T0 ➡[h,0] T1 →
+ ∀V2. ❪G0,L0❫ ⊢ V0 ➡[h,0] V2 → ∀W2. ❪G0,L0❫ ⊢ W0 ➡[h,0] W2 → ∀T2. ❪G0,L0.ⓛW0❫ ⊢ T0 ➡[h,0] T2 →
+ ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G0,L1❫ ⊢ ⓐV1.T1 ➡[h,0] T & ❪G0,L2❫ ⊢ ⓓ[p]ⓝW2.V2.T2 ➡[h,0] T.
#h #p #G0 #L0 #V0 #W0 #T0 #IH #V1 #HV01 #X #H
#V2 #HV02 #W2 #HW02 #T2 #HT02 #L1 #HL01 #L2 #HL02
elim (cpm_inv_abst1 … H) -H #W1 #T1 #HW01 #HT01 #H destruct
∀p,G0,L0,V0,W0,T0. (
∀G,L,T. ❪G0,L0,ⓐV0.ⓓ[p]W0.T0❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T
) →
- ∀V1. ❪G0,L0❫ ⊢ V0 ➡[h] V1 → ∀T1. ❪G0,L0❫ ⊢ ⓓ[p]W0.T0 ➡[h] T1 →
- ∀V2. ❪G0,L0❫ ⊢ V0 ➡[h] V2 → ∀U2. ⇧[1] V2 ≘ U2 →
- ∀W2. ❪G0,L0❫ ⊢ W0 ➡[h] W2 → ∀T2. ❪G0,L0.ⓓW0❫ ⊢ T0 ➡[h] T2 →
- ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G0,L1❫ ⊢ ⓐV1.T1 ➡[h] T & ❪G0,L2❫ ⊢ ⓓ[p]W2.ⓐU2.T2 ➡[h] T.
+ ∀V1. ❪G0,L0❫ ⊢ V0 ➡[h,0] V1 → ∀T1. ❪G0,L0❫ ⊢ ⓓ[p]W0.T0 ➡[h,0] T1 →
+ ∀V2. ❪G0,L0❫ ⊢ V0 ➡[h,0] V2 → ∀U2. ⇧[1] V2 ≘ U2 →
+ ∀W2. ❪G0,L0❫ ⊢ W0 ➡[h,0] W2 → ∀T2. ❪G0,L0.ⓓW0❫ ⊢ T0 ➡[h,0] T2 →
+ ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G0,L1❫ ⊢ ⓐV1.T1 ➡[h,0] T & ❪G0,L2❫ ⊢ ⓓ[p]W2.ⓐU2.T2 ➡[h,0] T.
#h #p #G0 #L0 #V0 #W0 #T0 #IH #V1 #HV01 #X #H
#V2 #HV02 #U2 #HVU2 #W2 #HW02 #T2 #HT02 #L1 #HL01 #L2 #HL02
elim (IH … HV01 … HV02 … HL01 … HL02) -HV01 -HV02 /2 width=1 by/ #V #HV1 #HV2
∀p,G0,L0,V0,W0,T0. (
∀G,L,T. ❪G0,L0,ⓐV0.ⓛ[p]W0.T0❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T
) →
- ∀V1. ❪G0,L0❫ ⊢ V0 ➡[h] V1 → ∀W1. ❪G0,L0❫ ⊢ W0 ➡[h] W1 → ∀T1. ❪G0,L0.ⓛW0❫ ⊢ T0 ➡[h] T1 →
- ∀V2. ❪G0,L0❫ ⊢ V0 ➡[h] V2 → ∀W2. ❪G0,L0❫ ⊢ W0 ➡[h] W2 → ∀T2. ❪G0,L0.ⓛW0❫ ⊢ T0 ➡[h] T2 →
- ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G0,L1❫ ⊢ ⓓ[p]ⓝW1.V1.T1 ➡[h] T & ❪G0,L2❫ ⊢ ⓓ[p]ⓝW2.V2.T2 ➡[h] T.
+ ∀V1. ❪G0,L0❫ ⊢ V0 ➡[h,0] V1 → ∀W1. ❪G0,L0❫ ⊢ W0 ➡[h,0] W1 → ∀T1. ❪G0,L0.ⓛW0❫ ⊢ T0 ➡[h,0] T1 →
+ ∀V2. ❪G0,L0❫ ⊢ V0 ➡[h,0] V2 → ∀W2. ❪G0,L0❫ ⊢ W0 ➡[h,0] W2 → ∀T2. ❪G0,L0.ⓛW0❫ ⊢ T0 ➡[h,0] T2 →
+ ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G0,L1❫ ⊢ ⓓ[p]ⓝW1.V1.T1 ➡[h,0] T & ❪G0,L2❫ ⊢ ⓓ[p]ⓝW2.V2.T2 ➡[h,0] T.
#h #p #G0 #L0 #V0 #W0 #T0 #IH #V1 #HV01 #W1 #HW01 #T1 #HT01
#V2 #HV02 #W2 #HW02 #T2 #HT02 #L1 #HL01 #L2 #HL02
elim (IH … HV01 … HV02 … HL01 … HL02) -HV01 -HV02 /2 width=1 by/ #V #HV1 #HV2
∀p,G0,L0,V0,W0,T0. (
∀G,L,T. ❪G0,L0,ⓐV0.ⓓ[p]W0.T0❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T
) →
- ∀V1. ❪G0,L0❫ ⊢ V0 ➡[h] V1 → ∀U1. ⇧[1] V1 ≘ U1 →
- ∀W1. ❪G0,L0❫ ⊢ W0 ➡[h] W1 → ∀T1. ❪G0,L0.ⓓW0❫ ⊢ T0 ➡[h] T1 →
- ∀V2. ❪G0,L0❫ ⊢ V0 ➡[h] V2 → ∀U2. ⇧[1] V2 ≘ U2 →
- ∀W2. ❪G0,L0❫ ⊢ W0 ➡[h] W2 → ∀T2. ❪G0,L0.ⓓW0❫ ⊢ T0 ➡[h] T2 →
- ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 →
- ∃∃T. ❪G0,L1❫ ⊢ ⓓ[p]W1.ⓐU1.T1 ➡[h] T & ❪G0,L2❫ ⊢ ⓓ[p]W2.ⓐU2.T2 ➡[h] T.
+ ∀V1. ❪G0,L0❫ ⊢ V0 ➡[h,0] V1 → ∀U1. ⇧[1] V1 ≘ U1 →
+ ∀W1. ❪G0,L0❫ ⊢ W0 ➡[h,0] W1 → ∀T1. ❪G0,L0.ⓓW0❫ ⊢ T0 ➡[h,0] T1 →
+ ∀V2. ❪G0,L0❫ ⊢ V0 ➡[h,0] V2 → ∀U2. ⇧[1] V2 ≘ U2 →
+ ∀W2. ❪G0,L0❫ ⊢ W0 ➡[h,0] W2 → ∀T2. ❪G0,L0.ⓓW0❫ ⊢ T0 ➡[h,0] T2 →
+ ∀L1. ❪G0,L0❫ ⊢ ➡[h,0] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h,0] L2 →
+ ∃∃T. ❪G0,L1❫ ⊢ ⓓ[p]W1.ⓐU1.T1 ➡[h,0] T & ❪G0,L2❫ ⊢ ⓓ[p]W2.ⓐU2.T2 ➡[h,0] T.
#h #p #G0 #L0 #V0 #W0 #T0 #IH #V1 #HV01 #U1 #HVU1 #W1 #HW01 #T1 #HT01
#V2 #HV02 #U2 #HVU2 #W2 #HW02 #T2 #HT02 #L1 #HL01 #L2 #HL02
elim (IH … HV01 … HV02 … HL01 … HL02) -HV01 -HV02 /2 width=1 by/ #V #HV1 #HV2
(* Properties with context-sensitive parallel reduction for terms ***********)
-lemma lpr_cpr_conf_dx (h) (G): ∀L0. ∀T0,T1:term. ❪G,L0❫ ⊢ T0 ➡[h] T1 → ∀L1. ❪G,L0❫ ⊢ ➡[h] L1 →
- ∃∃T. ❪G,L1❫ ⊢ T0 ➡[h] T & ❪G,L1❫ ⊢ T1 ➡[h] T.
+lemma lpr_cpr_conf_dx (h) (G): ∀L0. ∀T0,T1:term. ❪G,L0❫ ⊢ T0 ➡[h,0] T1 → ∀L1. ❪G,L0❫ ⊢ ➡[h,0] L1 →
+ ∃∃T. ❪G,L1❫ ⊢ T0 ➡[h,0] T & ❪G,L1❫ ⊢ T1 ➡[h,0] T.
#h #G #L0 #T0 #T1 #HT01 #L1 #HL01
elim (cpr_conf_lpr … HT01 T0 … HL01 … HL01) -HT01 -HL01
/2 width=3 by ex2_intro/
qed-.
-lemma lpr_cpr_conf_sn (h) (G): ∀L0. ∀T0,T1:term. ❪G,L0❫ ⊢ T0 ➡[h] T1 → ∀L1. ❪G,L0❫ ⊢ ➡[h] L1 →
- ∃∃T. ❪G,L1❫ ⊢ T0 ➡[h] T & ❪G,L0❫ ⊢ T1 ➡[h] T.
+lemma lpr_cpr_conf_sn (h) (G): ∀L0. ∀T0,T1:term. ❪G,L0❫ ⊢ T0 ➡[h,0] T1 → ∀L1. ❪G,L0❫ ⊢ ➡[h,0] L1 →
+ ∃∃T. ❪G,L1❫ ⊢ T0 ➡[h,0] T & ❪G,L0❫ ⊢ T1 ➡[h,0] T.
#h #G #L0 #T0 #T1 #HT01 #L1 #HL01
elim (cpr_conf_lpr … HT01 T0 … L0 … HL01) -HT01 -HL01
/2 width=3 by ex2_intro/
(* Main properties **********************************************************)
-theorem lpr_conf (h) (G): confluent … (lpr h G).
+theorem lpr_conf (h) (G): confluent … (lpr h 0 G).
/3 width=6 by lex_conf, cpr_conf_lpr/
qed-.
(* Forward lemmas with unbound parallel rt-transition for ref local envs ****)
(* Basic_2A1: was: lpr_lpx *)
-lemma lpr_fwd_lpx (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h] L2 → ❪G,L1❫ ⊢ ⬈[h] L2.
+lemma lpr_fwd_lpx (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h,0] L2 → ❪G,L1❫ ⊢ ⬈[h] L2.
/3 width=3 by cpm_fwd_cpx, lex_co/ qed-.
}
]
[ { "context-sensitive parallel r-computation" * } {
- [ [ "evaluation for terms" ] "cprre ( ❪?,?❫ ⊢ ? ➡*[?] 𝐍❪?❫ )" "cprre_csx" + "cprre_cpms" + "cprre_cprre" * ]
- [ [ "for lenvs on all entries" ] "lprs ( ❪?,?❫ ⊢ ➡*[?] ? )" "lprs_tc" + "lprs_ctc" + "lprs_length" + "lprs_drops" + "lprs_aaa" + "lprs_lpr" + "lprs_lpxs" + "lprs_cpms" + "lprs_cprs" + "lprs_lprs" * ]
- [ [ "for binders" ] "cprs_ext" + "( ❪?,?❫ ⊢ ? ➡*[?] ?)" * ]
- [ [ "for terms" ] "cprs" + "( ❪?,?❫ ⊢ ? ➡*[?] ?)" "cprs_ctc" + "cprs_tweq" + "cprs_drops" + "cprs_cpr" + "cprs_lpr" + "cprs_cnr" + "cprs_cprs" * ]
+ [ [ "evaluation for terms" ] "cprre" "cprre_csx" + "cprre_cpms" + "cprre_cprre" * ]
+ [ [ "for lenvs on all entries" ] "lprs ( ❪?,?❫ ⊢ ➡*[?,?] ? )" "lprs_tc" + "lprs_ctc" + "lprs_length" + "lprs_drops" + "lprs_aaa" + "lprs_lpr" + "lprs_lpxs" + "lprs_cpms" + "lprs_cprs" + "lprs_lprs" * ]
+ [ [ "for binders" ] "cprs_ext" + "( ❪?,?❫ ⊢ ? ➡*[?,?] ?)" * ]
+ [ [ "for terms" ] "cprs" "cprs_ctc" + "cprs_tweq" + "cprs_drops" + "cprs_cpr" + "cprs_lpr" + "cprs_cnr" + "cprs_cprs" * ]
}
]
[ { "t-bound context-sensitive parallel rt-computation" * } {
[ [ "t-unbound whd evaluation for terms" ] "cpmuwe ( ❪?,?❫ ⊢ ? ➡*𝐍𝐖*[?,?] ? )" "cpmuwe_csx" + "cpmuwe_cpmuwe" * ]
[ [ "t-unbound whd normal form for terms" ] "cnuw ( ❪?,?❫ ⊢ ➡𝐍𝐖*[?] ? )" "cnuw_drops" + "cnuw_simple" + "cnuw_cnuw" * ]
- [ [ "t-bpund evaluation for terms" ] "cpmre ( ❪?,?❫ ⊢ ? ➡*[?,?] 𝐍❪?❫ )" "cpmre_aaa" * ]
+ [ [ "t-bpund evaluation for terms" ] "cpmre ( ❪?,?❫ ⊢ ? ➡*𝐍[?,?] ? )" "cpmre_aaa" * ]
[ [ "for terms" ] "cpms" + "( ❪?,?❫ ⊢ ? ➡*[?,?] ? )" "cpms_drops" + "cpms_lsubr" + "cpms_reqx" + "cpms_aaa" + "cpms_lpr" + "cpms_cpxs" + "cpms_fpbs" + "cpms_fpbg" + "cpms_cpms" * ]
}
]
}
]
[ { "context-sensitive parallel r-transition" * } {
- [ [ "normal form for terms" ] "cnr ( ❪?,?❫ ⊢ ➡[?] 𝐍❪?❫ )" "cnr_simple" + "cnr_teqx" + "cnr_drops" * ]
- [ [ "for lenvs on all entries" ] "lpr" + "( ❪?,?❫ ⊢ ➡[?] ? )" "lpr_length" + "lpr_drops" + "lpr_fquq" + "lpr_aaa" + "lpr_lpx" + "lpr_lpr" * ]
- [ [ "for binders" ] "cpr_ext" + "( ❪?,?❫ ⊢ ? ➡[?] ? )" * ]
- [ [ "for terms" ] "cpr" + "( ❪?,?❫ ⊢ ? ➡[?] ? )" "cpr_drops" + "cpr_drops_basic" + "cpr_teqx" + "cpr_cpr" * ]
+ [ [ "normal form for terms" ] "cnr ( ❪?,?❫ ⊢ ➡𝐍[?,?] ? )" "cnr_simple" + "cnr_teqx" + "cnr_drops" * ]
+ [ [ "for lenvs on all entries" ] "lpr" + "( ❪?,?❫ ⊢ ➡[?,?] ? )" "lpr_length" + "lpr_drops" + "lpr_fquq" + "lpr_aaa" + "lpr_lpx" + "lpr_lpr" * ]
+ [ [ "for binders" ] "cpr_ext" * ]
+ [ [ "for terms" ] "cpr" "cpr_drops" + "cpr_drops_basic" + "cpr_teqx" + "cpr_cpr" * ]
}
]
[ { "t-bound context-sensitive parallel rt-transition" * } {
}
]
[ { "bound context-sensitive parallel rt-transition" * } {
- [ [ "for terms" ] "cpg" + "( ❪?,?❫ ⊢ ? ⬈[?,?] ? )" "cpg_simple" + "cpg_drops" + "cpg_lsubr" * ]
+ [ [ "for terms" ] "cpg" + "( ❪?,?❫ ⊢ ? ⬈[?,?,?] ? )" "cpg_simple" + "cpg_drops" + "cpg_lsubr" * ]
}
]
}