From: Ferruccio Guidi Date: Tue, 14 Jan 2020 18:08:54 +0000 (+0100) Subject: update in basic_2 and apps_2 X-Git-Tag: make_still_working~203 X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=commitdiff_plain;h=ca7327c20c6031829fade8bb84a3a1bb66113f54;p=helm.git update in basic_2 and apps_2 + bug fixed in the notation of cpm and derivatives --- diff --git a/matita/matita/contribs/lambdadelta/apps_2/examples/ex_cpr_omega.ma b/matita/matita/contribs/lambdadelta/apps_2/examples/ex_cpr_omega.ma index 0f07f5997..c8145c03c 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/examples/ex_cpr_omega.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/examples/ex_cpr_omega.ma @@ -34,7 +34,7 @@ lemma Delta_lifts (f) (s): ⇧*[f] (Delta s) ≘ (Delta s). (* 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 @@ -51,7 +51,7 @@ lapply (cpm_inv_appl1 … H) -H * * 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 @@ -60,19 +60,19 @@ qed-. (* 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 @@ -87,7 +87,7 @@ theorem cpr_inv_Omega1_sn (h) (G) (L) (s): ] 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 #_ #_ #_ diff --git a/matita/matita/contribs/lambdadelta/apps_2/examples/ex_fpbg_refl.ma b/matita/matita/contribs/lambdadelta/apps_2/examples/ex_fpbg_refl.ma index db674d19d..8a459a0be 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/examples/ex_fpbg_refl.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/examples/ex_fpbg_refl.ma @@ -36,13 +36,13 @@ lemma ApplDelta_lifts (f) (s0) (s): ⇧*[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. diff --git a/matita/matita/contribs/lambdadelta/apps_2/functional/mf_cpr.ma b/matita/matita/contribs/lambdadelta/apps_2/functional/mf_cpr.ma index 46c1925c9..4c12310e8 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/functional/mf_cpr.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/functional/mf_cpr.ma @@ -20,9 +20,9 @@ include "apps_2/functional/mf_exteq.ma". (* 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 diff --git a/matita/matita/contribs/lambdadelta/apps_2/models/deq_cpr.ma b/matita/matita/contribs/lambdadelta/apps_2/models/deq_cpr.ma index 7d648b075..b19c7c464 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/models/deq_cpr.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/models/deq_cpr.ma @@ -21,7 +21,7 @@ include "apps_2/models/deq.ma". (* 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 diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv.ma index 256b798b5..c49573cc3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv.ma @@ -27,9 +27,9 @@ inductive cnv (h) (a): relation3 genv lenv term ≝ | 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)" @@ -111,7 +111,7 @@ lemma cnv_inv_bind (h) (a): 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 @@ -126,13 +126,13 @@ qed-. 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 @@ -147,7 +147,7 @@ qed-. 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 *****************************************************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_aaa.ma index d47a061e3..f0262cbc7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_aaa.ma @@ -20,7 +20,8 @@ include "basic_2/dynamic/cnv.ma". (* 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/ @@ -44,7 +45,7 @@ qed-. (* 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/ @@ -53,7 +54,7 @@ qed-. (* 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/ @@ -61,8 +62,8 @@ qed-. 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/ @@ -73,8 +74,8 @@ qed-. 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/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpes.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpes.ma index abfa9df36..1b704e76c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpes.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpes.ma @@ -24,7 +24,7 @@ lemma cnv_appl_cpes (h) (a) (G) (L): ∀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. @@ -40,7 +40,7 @@ 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/ @@ -64,7 +64,7 @@ lemma cnv_ind_cpes (h) (a) (Q:relation3 genv lenv term): 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 → diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_conf.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_conf.ma index 8ac88c89b..1f0dab73e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_conf.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_conf.ma @@ -24,21 +24,21 @@ include "basic_2/dynamic/cnv_preserve_sub.ma". (* 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 @@ -57,10 +57,10 @@ fact cnv_cpm_conf_lpr_atom_ell_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,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 @@ -79,10 +79,10 @@ fact cnv_cpm_conf_lpr_delta_delta_aux (h) (a) (I) (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] → ∀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 @@ -110,10 +110,10 @@ qed-. 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 @@ -127,10 +127,10 @@ qed-. 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 @@ -148,9 +148,9 @@ fact cnv_cpm_conf_lpr_zeta_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] → ∀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 @@ -166,10 +166,10 @@ qed-. 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 @@ -183,11 +183,11 @@ qed-. 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 @@ -205,12 +205,12 @@ qed-. 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 @@ -236,11 +236,11 @@ qed-. 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 @@ -258,12 +258,12 @@ qed-. 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 @@ -281,10 +281,10 @@ qed-. 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 @@ -298,10 +298,10 @@ qed-. 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 @@ -315,10 +315,10 @@ fact cnv_cpm_conf_lpr_cast_ee_aux (h) (a) (G) (L) (V) (T): (∀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 @@ -337,9 +337,9 @@ qed-. 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 @@ -353,9 +353,9 @@ fact cnv_cpm_conf_lpr_epsilon_ee_aux (h) (a) (G) (L) (V) (T): (∀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 @@ -374,9 +374,9 @@ qed-. 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 diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx.ma index 4a5e09ff8..a2987f8eb 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx.ma @@ -24,7 +24,7 @@ include "basic_2/dynamic/cnv_fsb.ma". (* 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 @@ -56,8 +56,8 @@ qed-. 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 @@ -74,9 +74,9 @@ qed-. 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 @@ -93,10 +93,10 @@ qed-. 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 @@ -116,8 +116,8 @@ qed-. 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 @@ -130,22 +130,22 @@ lemma cpm_teqx_ind (h) (a) (n) (G) (Q:relation3 …): (∀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 @@ -171,8 +171,8 @@ qed-. 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 // @@ -190,8 +190,8 @@ qed-. 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/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx_conf.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx_conf.ma index 4e7b176fd..657fa03b3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx_conf.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx_conf.ma @@ -19,21 +19,21 @@ include "basic_2/dynamic/cnv_cpm_teqx.ma". 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-. @@ -41,10 +41,10 @@ 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 @@ -57,10 +57,10 @@ qed-. 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 @@ -73,12 +73,12 @@ qed-. 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 diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx_trans.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx_trans.ma index 2ff1bbb6d..67104bbc6 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx_trans.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx_trans.ma @@ -19,9 +19,9 @@ include "basic_2/dynamic/cnv_cpm_teqx.ma". 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 *****************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmre.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmre.ma index aa9840d0c..48e99e557 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmre.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmre.ma @@ -22,14 +22,14 @@ include "basic_2/dynamic/cnv_preserve.ma". 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 [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 @@ -38,9 +38,9 @@ fact cnv_cpms_conf_lpr_refl_tneqx_sub (h) (a) (G0) (L0) (T0) (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] → - ∀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 @@ -60,18 +60,18 @@ fact cnv_cpms_conf_lpr_step_tneqx_sub (h) (a) (G0) (L0) (T0) (m11) (m12) (m21) ( (∀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 @@ -102,10 +102,10 @@ fact cnv_cpms_conf_lpr_teqx_tneqx_aux (h) (a) (G0) (L0) (T0) (n1) (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] → - ∀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 @@ -125,10 +125,10 @@ fact cnv_cpms_conf_lpr_tneqx_tneqx_aux (h) (a) (G0) (L0) (T0) (m11) (m12) (m21) (∀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 diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx.ma index 28c781e0f..13530d008 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx.ma @@ -19,10 +19,10 @@ include "basic_2/dynamic/cnv_cpm_teqx_trans.ma". (* 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 // @@ -44,8 +44,8 @@ qed-. 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. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx_conf.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx_conf.ma index 656eee30d..3271b4e11 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx_conf.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx_conf.ma @@ -22,10 +22,10 @@ include "basic_2/dynamic/cnv_cpms_teqx.ma". 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 @@ -47,10 +47,10 @@ qed-. 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 diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpts.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpts.ma index 51c02346f..dc44cc5b2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpts.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpts.ma @@ -23,7 +23,7 @@ include "basic_2/dynamic/cnv_preserve_cpcs.ma". 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-. @@ -41,8 +41,8 @@ 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 @@ -67,8 +67,8 @@ qed-. 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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve.ma index a7027e195..06df2c198 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve.ma @@ -43,8 +43,8 @@ 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 *) @@ -55,21 +55,21 @@ qed-. 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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve_cpcs.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve_cpcs.ma index 728499add..059b8e44e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve_cpcs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve_cpcs.ma @@ -21,15 +21,15 @@ include "basic_2/dynamic/cnv_preserve.ma". 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 plus_S1 /3 width=3 by cpms_step_sn, cpm_ee/ @@ -113,36 +111,37 @@ lemma cpms_ee (n) (h) (G) (L): 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_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/ @@ -46,12 +46,12 @@ theorem cpms_appl (n) (h) (G) (L): 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/ @@ -59,12 +59,12 @@ theorem cpms_beta_rc (n) (h) (G) (L): 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/ @@ -72,12 +72,12 @@ theorem cpms_beta (n) (h) (G) (L): 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/ @@ -85,12 +85,12 @@ theorem cpms_theta_rc (n) (h) (G) (L): 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/ @@ -99,32 +99,25 @@ qed. (* 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 @@ -146,8 +139,9 @@ lemma cpms_inv_appl_sn (n) (h) (G) (L): ] 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 @@ -66,9 +66,9 @@ lemma cpms_ell (n) (h) (G): ∀K,V1,V2. ❪G,K❫ ⊢ V1 ➡*[n,h] V2 → ] 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 @@ -76,11 +76,11 @@ lemma cpms_lref (n) (h) (I) (G): ∀K,T,i. ❪G,K❫ ⊢ #i ➡*[n,h] T → ] 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 @@ -90,11 +90,11 @@ qed. (* 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 @@ -103,11 +103,11 @@ lemma cpms_delta_drops (n) (h) (G): ] 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 @@ -118,14 +118,14 @@ qed. (* 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 @@ -146,11 +146,11 @@ lemma cpms_inv_lref1_drops (n) (h) (G): ] 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 @@ -161,11 +161,11 @@ elim (cpms_inv_lref1_drops … H) -H * ] 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 @@ -176,11 +176,11 @@ elim (cpms_inv_lref1_drops … H) -H * ] 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 @@ -196,10 +196,10 @@ elim (cpms_inv_lref1_drops … H) -H * ] 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 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbg.ma index da18f9c4d..b96b5fcc6 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbg.ma @@ -21,28 +21,28 @@ include "basic_2/rt_computation/cpms_fpbs.ma". (* 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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbs.ma index ddc129c46..ec8e45b13 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbs.ma @@ -20,6 +20,6 @@ include "basic_2/rt_computation/cpms_cpxs.ma". (* 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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_lpr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_lpr.ma index be8c9a5fa..42e0aaf30 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_lpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_lpr.ma @@ -19,10 +19,10 @@ include "basic_2/rt_computation/cpms_cpms.ma". (* 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 @@ -45,25 +45,25 @@ lemma lpr_cpm_trans (n) (h) (G): ] 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. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_lsubr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_lsubr.ma index 300e2eff0..f8834d4c1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_lsubr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_lsubr.ma @@ -20,6 +20,6 @@ include "basic_2/rt_computation/cpms.ma". (* 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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_reqx.ma index 78294ec71..d7215295a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_reqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_reqx.ma @@ -20,11 +20,11 @@ include "basic_2/rt_computation/cpms_cpxs.ma". (* 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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe.ma index 8b13f4539..97d12e143 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe.ma @@ -18,7 +18,7 @@ include "basic_2/rt_computation/cnuw.ma". (* 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). @@ -29,30 +29,30 @@ definition R_cpmuwe (h) (G) (L) (T): predicate nat ≝ (* 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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe_cpmuwe.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe_cpmuwe.ma index 3ebd3c366..c1257d252 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe_cpmuwe.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe_cpmuwe.ma @@ -20,9 +20,9 @@ include "basic_2/rt_computation/cpmuwe.ma". (* 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. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre.ma index bd1a28398..c62a2e45f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre.ma @@ -12,12 +12,7 @@ (* *) (**************************************************************************) -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). diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_cpms.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_cpms.ma index dec5319a0..c7ebf67fc 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_cpms.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_cpms.ma @@ -20,8 +20,8 @@ include "basic_2/rt_computation/cprre.ma". (* 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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_cprre.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_cprre.ma index 4ffb118a7..8b854071d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_cprre.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_cprre.ma @@ -21,7 +21,8 @@ include "basic_2/rt_computation/cprre.ma". (* 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 @@ -33,7 +34,7 @@ qed-. (* 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 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_csx.ma index b56a6207e..a6675e4b4 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_csx.ma @@ -24,7 +24,7 @@ include "basic_2/rt_computation/cprre.ma". (* 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/ ] * diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs.ma index 4b221d5a4..2afcb81c8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs.ma @@ -22,8 +22,8 @@ include "basic_2/rt_computation/cpms.ma". (* 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 // @@ -35,8 +35,8 @@ qed-. (* 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 // @@ -50,28 +50,28 @@ qed-. (* 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. @@ -79,13 +79,13 @@ 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/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_cnr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_cnr.ma index 45cad66b7..bb08de9ec 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_cnr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_cnr.ma @@ -22,7 +22,7 @@ include "basic_2/rt_computation/cprs.ma". (* 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/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_cprs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_cprs.ma index abd60ec8d..d9eedf3b8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_cprs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_cprs.ma @@ -39,9 +39,9 @@ qed-. (* 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/ @@ -53,15 +53,15 @@ qed. (* 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 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_drops.ma index 8446ee1f2..f2a46a832 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_drops.ma @@ -20,9 +20,9 @@ include "basic_2/rt_computation/cpms_drops.ma". (* 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/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_ext.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_ext.ma index e69b27a31..8ae117db2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_ext.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_ext.ma @@ -17,9 +17,9 @@ include "basic_2/rt_computation/cpms.ma". (* 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). diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_lpr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_lpr.ma index b70eb7650..dd27d4cb5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_lpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_lpr.ma @@ -21,18 +21,20 @@ include "basic_2/rt_computation/cprs_cpr.ma". (* 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 @@ -43,9 +45,9 @@ elim (cprs_strip … HT2 … HT3) -T 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/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_tweq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_tweq.ma index 14503c1ec..4ea686119 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_tweq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_tweq.ma @@ -22,7 +22,7 @@ include "basic_2/rt_computation/cpms.ma". (* 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 ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpts_cpms.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpts_cpms.ma index 479b3898d..a21ec7041 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpts_cpms.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpts_cpms.ma @@ -21,7 +21,7 @@ include "basic_2/rt_computation/cpts.ma". (* 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 @@ -30,6 +30,6 @@ qed-. 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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg.ma index 2d33bdf49..8d940a856 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg.ma @@ -20,46 +20,48 @@ include "basic_2/rt_computation/fpbs.ma". (* 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. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs.ma index d4061da39..1d7f3a180 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs.ma @@ -12,54 +12,54 @@ (* *) (**************************************************************************) -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 ********************************************************) @@ -68,12 +68,12 @@ lemma lprs_inv_pair_dx (h) (G): 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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_aaa.ma index e1214dbac..306766f42 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_aaa.ma @@ -19,5 +19,6 @@ include "basic_2/rt_computation/lprs_lpxs.ma". (* 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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_cpms.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_cpms.ma index 7cd332093..bee160dd3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_cpms.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_cpms.ma @@ -18,23 +18,24 @@ include "basic_2/rt_computation/lprs_lpr.ma". (* 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 *) @@ -42,11 +43,10 @@ lemma cpms_bind_dx (n) (h) (G) (L): (* 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 @@ -54,29 +54,29 @@ 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 @@ -94,10 +94,10 @@ lemma cpms_inv_abbr_sn_dx (n) (h) (G) (L): 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/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_cprs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_cprs.ma index fafeabe1e..5dc472746 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_cprs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_cprs.ma @@ -20,16 +20,16 @@ include "basic_2/rt_computation/lprs_cpms.ma". (* 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 @@ -39,21 +39,21 @@ elim (cprs_conf … HT2 … HT3) -T /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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_ctc.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_ctc.ma index 6406552e0..01e1c16ee 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_ctc.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_ctc.ma @@ -20,11 +20,11 @@ include "basic_2/rt_computation/lprs.ma". (* 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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_length.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_length.ma index 060348bf3..8b87da9ab 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_length.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_length.ma @@ -19,5 +19,5 @@ include "basic_2/rt_computation/lprs.ma". (* 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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpr.ma index 6424733db..b1ce9c242 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpr.ma @@ -19,33 +19,39 @@ include "basic_2/rt_computation/lprs_tc.ma". (* 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 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lprs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lprs.ma index ae645f6aa..7421955b6 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lprs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lprs.ma @@ -19,10 +19,10 @@ include "basic_2/rt_computation/lprs_cpms.ma". (* 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 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpxs.ma index 2c95704c8..17b127713 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpxs.ma @@ -22,5 +22,5 @@ include "basic_2/rt_computation/lprs.ma". (* 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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_tc.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_tc.ma index b0602eaa0..cc3fadc33 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_tc.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_tc.ma @@ -21,11 +21,11 @@ include "basic_2/rt_computation/cprs_lpr.ma". (* 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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_conversion/cpc.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_conversion/cpc.ma index fcc70428c..21cb11c00 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_conversion/cpc.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_conversion/cpc.ma @@ -18,7 +18,7 @@ include "basic_2/rt_transition/cpm.ma". (* 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)" @@ -36,6 +36,6 @@ qed-. (* 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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs.ma index 0a9de4f23..e22c7957a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs.ma @@ -70,33 +70,33 @@ normalize /2 width=3 by step/ 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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_cpcs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_cpcs.ma index 692bd0b61..97ea77791 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_cpcs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_cpcs.ma @@ -44,7 +44,7 @@ lemma cpcs_bind2 (h) (G) (L): ∀V1,V2. ❪G,L❫ ⊢ V1 ⬌*[h] V2 → (* 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/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_cprs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_cprs.ma index 90fd02313..838b2d620 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_cprs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_cprs.ma @@ -21,7 +21,7 @@ include "basic_2/rt_equivalence/cpcs.ma". (* 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 @@ -44,7 +44,7 @@ qed-. (* 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 @@ -54,7 +54,7 @@ qed-. (* 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 *) @@ -69,70 +69,70 @@ qed-. (* 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-. @@ -147,7 +147,7 @@ elim (cpcs_inv_cprs … HT12) -HT12 /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. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_lprs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_lprs.ma index a47534026..aebf01f07 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_lprs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_lprs.ma @@ -19,20 +19,20 @@ include "basic_2/rt_equivalence/cpcs_cprs.ma". (* 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-. @@ -40,16 +40,16 @@ 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 ************************************************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes.ma index 07e5285b5..67f614481 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes.ma @@ -20,7 +20,7 @@ include "basic_2/rt_computation/cpms.ma". (* 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). @@ -29,8 +29,8 @@ interpretation "t-bound context-sensitive parallel rt-equivalence (term)" (* 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). diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes_cpms.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes_cpms.ma index 845deae5e..cf3813ecf 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes_cpms.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes_cpms.ma @@ -21,7 +21,7 @@ include "basic_2/rt_equivalence/cpes.ma". 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/ @@ -29,7 +29,7 @@ qed-. 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/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr.ma index 8d50d4d4d..0e21c6687 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr.ma @@ -12,21 +12,23 @@ (* *) (**************************************************************************) -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 // @@ -35,7 +37,8 @@ qed-. (* 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 // @@ -43,7 +46,8 @@ lemma cnr_inv_abbr_neg (h) (G) (L): 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-. @@ -51,26 +55,28 @@ 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 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_drops.ma index 6a34bb604..0cbf72011 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_drops.ma @@ -21,7 +21,7 @@ include "basic_2/rt_transition/cnr.ma". (* 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 @@ -30,7 +30,7 @@ qed. (* 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 #_ #_ @@ -38,7 +38,7 @@ lapply (drops_mono … HLK … HLK0) -L #H destruct 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 #_ #_ @@ -49,7 +49,7 @@ qed. (* 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/ @@ -59,7 +59,7 @@ qed-. (* 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 @@ -70,7 +70,7 @@ qed-. (* 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/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_simple.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_simple.ma index 71c9223b2..bd1e11c00 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_simple.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_simple.ma @@ -20,7 +20,8 @@ include "basic_2/rt_transition/cnr.ma". (* 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 // @@ -36,7 +37,7 @@ qed-. (* 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 // diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_teqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_teqx.ma index 8d23d17b3..0f2f9d709 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_teqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_teqx.ma @@ -24,8 +24,8 @@ include "basic_2/rt_transition/cnr_drops.ma". (* 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 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm.ma index 8e60c4f2e..c2b95d2ac 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm.ma @@ -20,101 +20,96 @@ include "ground_2/steps/rtc_max_shift.ma". 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. @@ -129,23 +124,23 @@ lemma cpr_refl: ∀h,G,L. reflexive … (cpm h G L 0). (* 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 @@ -158,21 +153,21 @@ lemma cpm_inv_atom1: ∀n,h,J,G,L,T2. ❪G,L❫ ⊢ ⓪[J] ➡[n,h] T2 → ] 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/ @@ -182,9 +177,9 @@ lemma cpm_inv_zero1: ∀n,h,G,L,T2. ❪G,L❫ ⊢ #0 ➡[n,h] T2 → ] 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 @@ -192,19 +187,19 @@ elim (cpm_inv_zero1 … H) -H * ] 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 @@ -217,18 +212,18 @@ lemma cpm_inv_lref1_ctop (n) (h) (G): ] 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 @@ -240,11 +235,11 @@ qed-. (* 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/ @@ -253,35 +248,35 @@ qed-. (* 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 @@ -303,12 +298,12 @@ lemma cpm_inv_appl1: ∀n,h,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓐ V1.U1 ➡[n,h] U2 ] 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 @@ -325,10 +320,10 @@ qed-. (* 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-. @@ -337,32 +332,32 @@ 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 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_aaa.ma index 6cc56dc07..a096f5229 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_aaa.ma @@ -20,12 +20,12 @@ include "basic_2/rt_transition/lpx_aaa.ma". (* 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 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_cpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_cpx.ma index c3fb02f68..6586e600c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_cpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_cpx.ma @@ -20,7 +20,7 @@ include "basic_2/rt_transition/cpm.ma". (* 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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_drops.ma index acdcba165..91544044c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_drops.ma @@ -21,58 +21,58 @@ include "basic_2/rt_transition/cpm.ma". (* 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 @@ -85,13 +85,13 @@ lemma cpm_inv_atom1_drops: ∀n,h,I,G,L,T2. ❪G,L❫ ⊢ ⓪[I] ➡[n,h] T2 → ] 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 @@ -104,10 +104,10 @@ qed-. (* 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/ @@ -165,6 +165,6 @@ fact cpm_fwd_plus_aux (n) (h): ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 → ] 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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_fsle.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_fsle.ma index 0c51efd06..81ee72afb 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_fsle.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_fsle.ma @@ -19,7 +19,7 @@ include "basic_2/rt_transition/cpm_cpx.ma". (* 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). diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_lsubr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_lsubr.ma index 1f117aab0..e754ff7a7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_lsubr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_lsubr.ma @@ -20,11 +20,11 @@ include "basic_2/rt_transition/cpm.ma". (* 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. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_simple.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_simple.ma index 33bd855b6..3b81e99bd 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_simple.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_simple.ma @@ -20,10 +20,10 @@ include "basic_2/rt_transition/cpm.ma". (* 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/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_teqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_teqx.ma index 90aca3c7e..c465039d8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_teqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_teqx.ma @@ -19,21 +19,21 @@ include "basic_2/rt_transition/cpm_drops.ma". (* 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/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr.ma index 2d0608f92..b99663e05 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr.ma @@ -25,24 +25,24 @@ include "basic_2/rt_transition/cpm.ma". (* 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/ ] @@ -52,48 +52,48 @@ lemma cpr_inv_atom1: ∀h,J,G,L,T2. ❪G,L❫ ⊢ ⓪[J] ➡[h] T2 → 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 @@ -108,26 +108,26 @@ qed-. 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/ ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_drops.ma index 973329139..25df04bda 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_drops.ma @@ -19,9 +19,9 @@ include "basic_2/rt_transition/cpm_drops.ma". (* 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/ @@ -33,9 +33,9 @@ qed-. (* 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/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_drops_basic.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_drops_basic.ma index 988a3d32e..8de34c2a4 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_drops_basic.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_drops_basic.ma @@ -22,7 +22,7 @@ include "basic_2/rt_transition/cpr.ma". 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 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_ext.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_ext.ma index 3e3020fc3..c22674ee2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_ext.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_ext.ma @@ -17,9 +17,9 @@ include "basic_2/rt_transition/cpm.ma". (* 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). diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_teqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_teqx.ma index be549cdae..6c05df3d3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_teqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_teqx.ma @@ -20,7 +20,7 @@ include "basic_2/rt_transition/cpr_drops_basic.ma". (* 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 ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt.ma index d1a733be6..72fab31b0 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt.ma @@ -160,7 +160,7 @@ lemma cpt_inv_lref_sn (h) (n) (G) (L) (i): ] 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 * diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_cpm.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_cpm.ma index bf7dff5d9..aadec180c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_cpm.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_cpm.ma @@ -20,7 +20,7 @@ include "basic_2/rt_transition/cpt_fqu.ma". (* 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/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb.ma index 5b0c68c2a..3e31edb7e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb.ma @@ -32,10 +32,10 @@ interpretation (* 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. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq.ma index 3175d6556..3e3472135 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq.ma @@ -37,10 +37,10 @@ lemma fpbq_refl (h): tri_reflexive … (fpbq h). /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: diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr.ma index 646689287..2cfb7ff4d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr.ma @@ -12,85 +12,85 @@ (* *) (**************************************************************************) -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 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_aaa.ma index c051cf6d9..2e6e577ef 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_aaa.ma @@ -19,5 +19,5 @@ include "basic_2/rt_transition/lpx_aaa.ma". (* 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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_fquq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_fquq.ma index 97b4f2c8f..6c9f743cb 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_fquq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_fquq.ma @@ -23,8 +23,8 @@ include "basic_2/rt_transition/lpr.ma". (* 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/ @@ -38,8 +38,8 @@ lemma fqu_cpr_trans_sn (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G 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/ @@ -53,8 +53,8 @@ lemma fqu_cpr_trans_dx (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G 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/ @@ -72,8 +72,8 @@ qed-. (* 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 @@ -92,8 +92,8 @@ qed-. (* 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/ @@ -101,8 +101,8 @@ lemma fquq_cpr_trans_sn (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] 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/ @@ -110,8 +110,8 @@ lemma fquq_cpr_trans_dx (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] 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/ @@ -119,8 +119,8 @@ lemma fquq_lpr_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪ 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/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_length.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_length.ma index cd15d3434..3a548a496 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_length.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_length.ma @@ -17,5 +17,5 @@ include "basic_2/rt_transition/lpr.ma". (* 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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_lpr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_lpr.ma index 2b92825d3..73509adec 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_lpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_lpr.ma @@ -21,14 +21,14 @@ include "basic_2/rt_transition/lpr_drops.ma". (* 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): @@ -36,9 +36,9 @@ 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 @@ -57,11 +57,11 @@ fact cpr_conf_lpr_delta_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 → - ∀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 @@ -81,10 +81,10 @@ fact cpr_conf_lpr_bind_bind (h): ∀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) // @@ -96,10 +96,10 @@ fact cpr_conf_lpr_bind_zeta (h): ∀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 @@ -111,10 +111,10 @@ fact cpr_conf_lpr_zeta_zeta (h): ∀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 @@ -126,10 +126,10 @@ fact cpr_conf_lpr_flat_flat (h): ∀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) // @@ -141,9 +141,9 @@ fact cpr_conf_lpr_flat_eps (h): ∀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 @@ -154,9 +154,9 @@ fact cpr_conf_lpr_eps_eps (h): ∀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 @@ -167,10 +167,10 @@ fact cpr_conf_lpr_flat_beta (h): ∀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 @@ -189,11 +189,11 @@ fact cpr_conf_lpr_flat_theta (h): ∀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 @@ -214,10 +214,10 @@ fact cpr_conf_lpr_beta_beta (h): ∀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 @@ -233,12 +233,12 @@ fact cpr_conf_lpr_theta_theta (h): ∀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 @@ -308,15 +308,15 @@ qed-. (* 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/ @@ -324,6 +324,6 @@ qed-. (* 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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_lpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_lpx.ma index df7889d62..65bc4fa37 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_lpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_lpx.ma @@ -21,5 +21,5 @@ include "basic_2/rt_transition/lpr.ma". (* 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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/web/basic_2_src.tbl b/matita/matita/contribs/lambdadelta/basic_2/web/basic_2_src.tbl index 4a02ae6ff..4a8f9c713 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/web/basic_2_src.tbl +++ b/matita/matita/contribs/lambdadelta/basic_2/web/basic_2_src.tbl @@ -65,16 +65,16 @@ table { } ] [ { "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" * ] } ] @@ -103,10 +103,10 @@ table { } ] [ { "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" * } { @@ -127,7 +127,7 @@ table { } ] [ { "bound context-sensitive parallel rt-transition" * } { - [ [ "for terms" ] "cpg" + "( ❪?,?❫ ⊢ ? ⬈[?,?] ? )" "cpg_simple" + "cpg_drops" + "cpg_lsubr" * ] + [ [ "for terms" ] "cpg" + "( ❪?,?❫ ⊢ ? ⬈[?,?,?] ? )" "cpg_simple" + "cpg_drops" + "cpg_lsubr" * ] } ] }