From: Ferruccio Guidi Date: Fri, 29 Oct 2021 18:24:59 +0000 (+0200) Subject: update in ground static_2 basic_2 apps_2 X-Git-Tag: make_still_working~133^2 X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=commitdiff_plain;h=8ec019202bff90959cf1a7158b309e7f83fa222e;p=helm.git update in ground static_2 basic_2 apps_2 + two sets of bold parentheses were used. now just one --- diff --git a/matita/matita/contribs/lambdadelta/apps_2/examples/ex_cnv_eta.ma b/matita/matita/contribs/lambdadelta/apps_2/examples/ex_cnv_eta.ma index 1eb9cd38b..a30c674da 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/examples/ex_cnv_eta.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/examples/ex_cnv_eta.ma @@ -21,7 +21,7 @@ include "basic_2/dynamic/cnv.ma". (* Note: extended validity of a closure, height of cnv_appl > 1 *) lemma cnv_extended (h) (p) (G) (L): - ∀s. ❪G,L.ⓛ⋆s.ⓛⓛ[p]⋆s.⋆s.ⓛ#0❫ ⊢ ⓐ#2.#0 ![h,𝛚]. + ∀s. ❨G,L.ⓛ⋆s.ⓛⓛ[p]⋆s.⋆s.ⓛ#0❩ ⊢ ⓐ#2.#0 ![h,𝛚]. #h #p #G #L #s @(cnv_appl … 2 p … (⋆s) … (⋆s)) [ // @@ -34,7 +34,7 @@ qed. (* Note: restricted validity of the η-expanded closure, height of cnv_appl = 1 **) lemma cnv_restricted (h) (p) (G) (L): - ∀s. ❪G,L.ⓛ⋆s.ⓛⓛ[p]⋆s.⋆s.ⓛⓛ[p]⋆s.ⓐ#0.#1❫ ⊢ ⓐ#2.#0 ![h,𝟐]. + ∀s. ❨G,L.ⓛ⋆s.ⓛⓛ[p]⋆s.⋆s.ⓛⓛ[p]⋆s.ⓐ#0.#1❩ ⊢ ⓐ#2.#0 ![h,𝟐]. #h #p #G #L #s @(cnv_appl … 1 p … (⋆s) … (ⓐ#0.#2)) [ // 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 c8145c03c..927f9727a 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,0] 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,0] 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,0] 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,0] 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,0] 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,0] 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,0] 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 f95df96fd..99e67d5d4 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,27 +36,27 @@ lemma ApplDelta_lifts (f) (s0) (s): /5 width=1 by lifts_sort, lifts_lref, lifts_bind, lifts_flat/ qed. lemma cpr_ApplOmega_12 (G) (L) (s0) (s): - ❪G,L❫ ⊢ ApplOmega1 s0 s ⬈ ApplOmega2 s0 s. + ❨G,L❩ ⊢ ApplOmega1 s0 s ⬈ ApplOmega2 s0 s. /2 width=1 by cpx_beta/ qed. lemma cpr_ApplOmega_23 (G) (L) (s0) (s): - ❪G,L❫ ⊢ ApplOmega2 s0 s ⬈ ApplOmega3 s0 s. + ❨G,L❩ ⊢ ApplOmega2 s0 s ⬈ ApplOmega3 s0 s. /6 width=3 by cpx_eps, cpx_flat, cpx_bind, cpx_delta, ApplDelta_lifts/ qed. lemma cpr_ApplOmega_34 (G) (L) (s0) (s): - ❪G,L❫ ⊢ ApplOmega3 s0 s ⬈ ApplOmega4 s0 s. + ❨G,L❩ ⊢ ApplOmega3 s0 s ⬈ ApplOmega4 s0 s. /4 width=3 by cpx_zeta, ApplDelta_lifts, lifts_sort, lifts_flat/ qed. lemma cpxs_ApplOmega_14 (G) (L) (s0) (s): - ❪G,L❫ ⊢ ApplOmega1 s0 s ⬈* ApplOmega4 s0 s. + ❨G,L❩ ⊢ ApplOmega1 s0 s ⬈* ApplOmega4 s0 s. /5 width=5 by cpxs_strap1, cpx_cpxs/ qed. lemma fqup_ApplOmega_41 (G) (L) (s0) (s): - ❪G,L,ApplOmega4 s0 s❫ ⬂+ ❪G,L,ApplOmega1 s0 s❫. + ❨G,L,ApplOmega4 s0 s❩ ⬂+ ❨G,L,ApplOmega1 s0 s❩. /2 width=1 by/ qed. (* Main properties **********************************************************) theorem fpbg_refl (G) (L) (s0) (s): - ❪G,L,ApplOmega1 s0 s❫ > ❪G,L,ApplOmega1 s0 s❫. + ❨G,L,ApplOmega1 s0 s❩ > ❨G,L,ApplOmega1 s0 s❩. /3 width=5 by fpbs_fpbg_trans, fqup_fpbg, cpxs_fpbs/ qed. diff --git a/matita/matita/contribs/lambdadelta/apps_2/examples/ex_rpx_fwd.ma b/matita/matita/contribs/lambdadelta/apps_2/examples/ex_rpx_fwd.ma index efefd445d..510d8aeb8 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/examples/ex_rpx_fwd.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/examples/ex_rpx_fwd.ma @@ -32,7 +32,7 @@ definition T: term ≝ #0. (* Basic properties *********************************************************) lemma ex_rpx_fwd_1 (G) (K) (s1) (s0): - ❪G,L1 K s1 s0❫ ⊢ ⬈ L K s1 s0. + ❨G,L1 K s1 s0❩ ⊢ ⬈ L K s1 s0. /3 width=1 by lpx_pair, lpx_bind_refl_dx, cpx_eps/ qed. lemma ex_rpx_fwd_2 (K) (s1) (s0) (i1) (i0): @@ -40,7 +40,7 @@ lemma ex_rpx_fwd_2 (K) (s1) (s0) (i1) (i0): /4 width=1 by reqg_refl, reqg_pair, reqg_sort, teqg_sort/ qed. lemma ex_rpx_fwd_3 (G) (K) (s1) (s0) (i1) (i0): - ❪G,L1 K s1 s0❫ ⊢ ⬈[T] L2 K i1 i0 → ⊥. + ❨G,L1 K s1 s0❩ ⊢ ⬈[T] L2 K i1 i0 → ⊥. #G #K #s1 #s0 #i1 #i0 #H elim (rpx_inv_zero_pair_sn … H) -H #Y2 #X2 #H #_ normalize #H0 destruct elim (rpx_inv_flat … H) -H #H #_ @@ -51,5 +51,5 @@ qed-. (* Main properties **********************************************************) theorem ex_rpx_fwd (G) (K) (s1) (s0) (i1) (i0): - (❪G,L1 K s1 s0❫ ⊢ ⬈ L K s1 s0 → L K s1 s0 ≅[T] L2 K i1 i0 → ❪G,L1 K s1 s0❫ ⊢ ⬈[T] L2 K i1 i0) → ⊥. + (❨G,L1 K s1 s0❩ ⊢ ⬈ L K s1 s0 → L K s1 s0 ≅[T] L2 K i1 i0 → ❨G,L1 K s1 s0❩ ⊢ ⬈[T] L2 K i1 i0) → ⊥. /3 width=7 by ex_rpx_fwd_3, ex_rpx_fwd_2, ex_rpx_fwd_1/ qed-. 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 4c12310e8..70b98821c 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,0] 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,0] ●[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 b19c7c464..d7aab02ba 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,0] 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/apps_2/models/tm.ma b/matita/matita/contribs/lambdadelta/apps_2/models/tm.ma index 613d67a7e..96a98fc75 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/models/tm.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/models/tm.ma @@ -20,7 +20,7 @@ include "apps_2/models/model.ma". definition tm_dd ≝ term. -definition tm_sq (h) (T1) (T2) ≝ ❪⋆,⋆❫ ⊢ T1 ⬌*[h] T2. +definition tm_sq (h) (T1) (T2) ≝ ❨⋆,⋆❩ ⊢ T1 ⬌*[h] T2. definition tm_sv (s) ≝ ⋆s. diff --git a/matita/matita/contribs/lambdadelta/apps_2/notation/models/ringeq_5.ma b/matita/matita/contribs/lambdadelta/apps_2/notation/models/ringeq_5.ma index 4543782b2..60bc76e97 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/notation/models/ringeq_5.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/notation/models/ringeq_5.ma @@ -14,14 +14,14 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation < "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ≗ break term 46 T2 )" +notation < "hvbox( ❨ term 46 G, break term 46 L ❩ ⊢ break term 46 T1 ≗ break term 46 T2 )" non associative with precedence 45 for @{ 'RingEq $M $G $L $T1 $T2 }. -notation > "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ≗ break term 46 T2 )" +notation > "hvbox( ❨ term 46 G, break term 46 L ❩ ⊢ break term 46 T1 ≗ break term 46 T2 )" non associative with precedence 45 for @{ 'RingEq ? $G $L $T1 $T2 }. -notation > "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ≗{ break term 46 M } break term 46 T2 )" +notation > "hvbox( ❨ term 46 G, break term 46 L ❩ ⊢ break term 46 T1 ≗{ break term 46 M } break term 46 T2 )" non associative with precedence 45 for @{ 'RingEq $M $G $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv.ma index 377fecd05..55a6ce36e 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 ➡*[h,1] W0 → ❪G,L❫ ⊢ T ➡*[h,n] ⓛ[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,0] U0 → ❪G,L❫ ⊢ T ➡*[h,1] 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)" @@ -38,8 +38,8 @@ interpretation "context-sensitive native validity (term)" (* Basic inversion lemmas ***************************************************) fact cnv_inv_zero_aux (h) (a): - ∀G,L,X. ❪G,L❫ ⊢ X ![h,a] → X = #0 → - ∃∃I,K,V. ❪G,K❫ ⊢ V ![h,a] & L = K.ⓑ[I]V. + ∀G,L,X. ❨G,L❩ ⊢ X ![h,a] → X = #0 → + ∃∃I,K,V. ❨G,K❩ ⊢ V ![h,a] & L = K.ⓑ[I]V. #h #a #G #L #X * -G -L -X [ #G #L #s #H destruct | #I #G #K #V #HV #_ /2 width=5 by ex2_3_intro/ @@ -51,13 +51,13 @@ fact cnv_inv_zero_aux (h) (a): qed-. lemma cnv_inv_zero (h) (a): - ∀G,L. ❪G,L❫ ⊢ #0 ![h,a] → - ∃∃I,K,V. ❪G,K❫ ⊢ V ![h,a] & L = K.ⓑ[I]V. + ∀G,L. ❨G,L❩ ⊢ #0 ![h,a] → + ∃∃I,K,V. ❨G,K❩ ⊢ V ![h,a] & L = K.ⓑ[I]V. /2 width=3 by cnv_inv_zero_aux/ qed-. fact cnv_inv_lref_aux (h) (a): - ∀G,L,X. ❪G,L❫ ⊢ X ![h,a] → ∀i. X = #(↑i) → - ∃∃I,K. ❪G,K❫ ⊢ #i ![h,a] & L = K.ⓘ[I]. + ∀G,L,X. ❨G,L❩ ⊢ X ![h,a] → ∀i. X = #(↑i) → + ∃∃I,K. ❨G,K❩ ⊢ #i ![h,a] & L = K.ⓘ[I]. #h #a #G #L #X * -G -L -X [ #G #L #s #j #H destruct | #I #G #K #V #_ #j #H destruct @@ -69,11 +69,11 @@ fact cnv_inv_lref_aux (h) (a): qed-. lemma cnv_inv_lref (h) (a): - ∀G,L,i. ❪G,L❫ ⊢ #↑i ![h,a] → - ∃∃I,K. ❪G,K❫ ⊢ #i ![h,a] & L = K.ⓘ[I]. + ∀G,L,i. ❨G,L❩ ⊢ #↑i ![h,a] → + ∃∃I,K. ❨G,K❩ ⊢ #i ![h,a] & L = K.ⓘ[I]. /2 width=3 by cnv_inv_lref_aux/ qed-. -fact cnv_inv_gref_aux (h) (a): ∀G,L,X. ❪G,L❫ ⊢ X ![h,a] → ∀l. X = §l → ⊥. +fact cnv_inv_gref_aux (h) (a): ∀G,L,X. ❨G,L❩ ⊢ X ![h,a] → ∀l. X = §l → ⊥. #h #a #G #L #X * -G -L -X [ #G #L #s #l #H destruct | #I #G #K #V #_ #l #H destruct @@ -85,13 +85,13 @@ fact cnv_inv_gref_aux (h) (a): ∀G,L,X. ❪G,L❫ ⊢ X ![h,a] → ∀l. X = § qed-. (* Basic_2A1: uses: snv_inv_gref *) -lemma cnv_inv_gref (h) (a): ∀G,L,l. ❪G,L❫ ⊢ §l ![h,a] → ⊥. +lemma cnv_inv_gref (h) (a): ∀G,L,l. ❨G,L❩ ⊢ §l ![h,a] → ⊥. /2 width=8 by cnv_inv_gref_aux/ qed-. fact cnv_inv_bind_aux (h) (a): - ∀G,L,X. ❪G,L❫ ⊢ X ![h,a] → + ∀G,L,X. ❨G,L❩ ⊢ X ![h,a] → ∀p,I,V,T. X = ⓑ[p,I]V.T → - ∧∧ ❪G,L❫ ⊢ V ![h,a] & ❪G,L.ⓑ[I]V❫ ⊢ T ![h,a]. + ∧∧ ❨G,L❩ ⊢ V ![h,a] & ❨G,L.ⓑ[I]V❩ ⊢ T ![h,a]. #h #a #G #L #X * -G -L -X [ #G #L #s #q #Z #X1 #X2 #H destruct | #I #G #K #V #_ #q #Z #X1 #X2 #H destruct @@ -104,14 +104,14 @@ qed-. (* Basic_2A1: uses: snv_inv_bind *) lemma cnv_inv_bind (h) (a): - ∀p,I,G,L,V,T. ❪G,L❫ ⊢ ⓑ[p,I]V.T ![h,a] → - ∧∧ ❪G,L❫ ⊢ V ![h,a] & ❪G,L.ⓑ[I]V❫ ⊢ T ![h,a]. + ∀p,I,G,L,V,T. ❨G,L❩ ⊢ ⓑ[p,I]V.T ![h,a] → + ∧∧ ❨G,L❩ ⊢ V ![h,a] & ❨G,L.ⓑ[I]V❩ ⊢ T ![h,a]. /2 width=4 by cnv_inv_bind_aux/ qed-. 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 ➡*[h,1] W0 & ❪G,L❫ ⊢ T ➡*[h,n] ⓛ[p]W0.U0. + ∀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 ➡*[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 @@ -124,15 +124,15 @@ qed-. (* Basic_2A1: uses: snv_inv_appl *) 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 ➡*[h,1] W0 & ❪G,L❫ ⊢ T ➡*[h,n] ⓛ[p]W0.U0. + ∀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 ➡*[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,0] U0 & ❪G,L❫ ⊢ T ➡*[h,1] U0. + ∀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,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 @@ -145,16 +145,16 @@ qed-. (* Basic_2A1: uses: snv_inv_cast *) 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,0] U0 & ❪G,L❫ ⊢ T ➡*[h,1] U0. + ∀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,0] U0 & ❨G,L❩ ⊢ T ➡*[h,1] U0. /2 width=3 by cnv_inv_cast_aux/ qed-. (* Basic forward lemmas *****************************************************) lemma cnv_fwd_flat (h) (a) (I) (G) (L): - ∀V,T. ❪G,L❫ ⊢ ⓕ[I]V.T ![h,a] → - ∧∧ ❪G,L❫ ⊢ V ![h,a] & ❪G,L❫ ⊢ T ![h,a]. + ∀V,T. ❨G,L❩ ⊢ ⓕ[I]V.T ![h,a] → + ∧∧ ❨G,L❩ ⊢ V ![h,a] & ❨G,L❩ ⊢ T ![h,a]. #h #a * #G #L #V #T #H [ elim (cnv_inv_appl … H) #n #p #W #U #_ #HV #HT #_ #_ | elim (cnv_inv_cast … H) #U #HV #HT #_ #_ @@ -162,7 +162,7 @@ lemma cnv_fwd_flat (h) (a) (I) (G) (L): qed-. lemma cnv_fwd_pair_sn (h) (a) (I) (G) (L): - ∀V,T. ❪G,L❫ ⊢ ②[I]V.T ![h,a] → ❪G,L❫ ⊢ V ![h,a]. + ∀V,T. ❨G,L❩ ⊢ ②[I]V.T ![h,a] → ❨G,L❩ ⊢ V ![h,a]. #h #a * [ #p ] #I #G #L #V #T #H [ elim (cnv_inv_bind … H) -H #HV #_ | elim (cnv_fwd_flat … H) -H #HV #_ 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 f0262cbc7..b6b93168c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_aaa.ma @@ -21,7 +21,7 @@ include "basic_2/dynamic/cnv.ma". (* 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. + ∀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/ @@ -45,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 ➡[h,1] 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/ @@ -54,16 +54,16 @@ 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 ➡*[h,n] 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/ 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 ➡*[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. + ∀T. ❨G,L❩ ⊢ T ![h,a] → + ∀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,9 +73,9 @@ 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 ➡*[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]. + ∀V. ❨G,L❩ ⊢ V ![h,a] → ∀T. ❨G,L❩ ⊢ 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_acle.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_acle.ma index c0ad6880a..313b37180 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_acle.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_acle.ma @@ -20,7 +20,7 @@ include "basic_2/dynamic/cnv_aaa.ma". (* Properties with preorder for applicability domains ***********************) lemma cnv_acle_trans (h) (a1) (a2): - a1 ⊆ a2 → ∀G,L,T. ❪G,L❫ ⊢ T ![h,a1] → ❪G,L❫ ⊢ T ![h,a2]. + a1 ⊆ a2 → ∀G,L,T. ❨G,L❩ ⊢ T ![h,a1] → ❨G,L❩ ⊢ T ![h,a2]. #h #a1 #a2 #Ha12 #G #L #T #H elim H -G -L -T [ /1 width=1 by cnv_sort/ | /3 width=1 by cnv_zero/ @@ -34,9 +34,9 @@ lemma cnv_acle_trans (h) (a1) (a2): qed-. lemma cnv_acle_omega (h) (a): - ∀G,L,T. ❪G,L❫ ⊢ T ![h,a] → ❪G,L❫ ⊢ T ![h,𝛚]. + ∀G,L,T. ❨G,L❩ ⊢ T ![h,a] → ❨G,L❩ ⊢ T ![h,𝛚]. /3 width=3 by cnv_acle_trans, acle_omega/ qed-. lemma cnv_acle_one (h) (a) (n): - ∀G,L,T. ❪G,L❫ ⊢ T ![h,𝟏] → ad a n → ❪G,L❫ ⊢ T ![h,a]. + ∀G,L,T. ❨G,L❩ ⊢ T ![h,𝟏] → ad a n → ❨G,L❩ ⊢ T ![h,a]. /3 width=3 by cnv_acle_trans, acle_one/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpcs.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpcs.ma index 8487f1688..2f1a776eb 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpcs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpcs.ma @@ -21,8 +21,8 @@ include "basic_2/dynamic/cnv_aaa.ma". (* Properties with r-equivalence ********************************************) lemma cnv_cpcs_dec (h) (a) (G) (L): - ∀T1. ❪G,L❫ ⊢ T1 ![h,a] → ∀T2. ❪G,L❫ ⊢ T2 ![h,a] → - Decidable … (❪G,L❫ ⊢ T1 ⬌*[h] T2). + ∀T1. ❨G,L❩ ⊢ T1 ![h,a] → ∀T2. ❨G,L❩ ⊢ T2 ![h,a] → + Decidable … (❨G,L❩ ⊢ T1 ⬌*[h] T2). #h #a #G #L #T1 #HT1 #T2 #HT2 elim (cnv_fwd_aaa … HT1) -HT1 #A1 #HA1 elim (cnv_fwd_aaa … HT2) -HT2 #A2 #HA2 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 1b704e76c..73be3fd46 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpes.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpes.ma @@ -22,33 +22,33 @@ include "basic_2/dynamic/cnv.ma". 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 ➡*[h,n] ⓛ[p]W.U → ❪G,L❫ ⊢ ⓐV.T ![h,a]. + ∀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 ➡*[h,n] ⓛ[p]W.U → ❨G,L❩ ⊢ ⓐV.T ![h,a]. #h #a #G #L #n #Hn #V #HV #T #HT #W * /4 width=11 by cnv_appl, cpms_cprs_trans, cpms_bind/ qed. lemma cnv_cast_cpes (h) (a) (G) (L): - ∀U. ❪G,L❫ ⊢ U ![h,a] → - ∀T. ❪G,L❫ ⊢ T ![h,a] → ❪G,L❫ ⊢ U ⬌*[h,0,1] T → ❪G,L❫ ⊢ ⓝU.T ![h,a]. + ∀U. ❨G,L❩ ⊢ U ![h,a] → + ∀T. ❨G,L❩ ⊢ T ![h,a] → ❨G,L❩ ⊢ U ⬌*[h,0,1] T → ❨G,L❩ ⊢ ⓝU.T ![h,a]. #h #a #G #L #U #HU #T #HT * /2 width=3 by cnv_cast/ qed. (* Inversion lemmas with t-bound rt-equivalence for terms *******************) 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 ➡*[h,n] ⓛ[p]W.U. + ∀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 ➡*[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/ qed-. lemma cnv_inv_cast_cpes (h) (a) (G) (L): - ∀U,T. ❪G,L❫ ⊢ ⓝU.T ![h,a] → - ∧∧ ❪G,L❫ ⊢ U ![h,a] & ❪G,L❫ ⊢ T ![h,a] & ❪G,L❫ ⊢ U ⬌*[h,0,1] T. + ∀U,T. ❨G,L❩ ⊢ ⓝU.T ![h,a] → + ∧∧ ❨G,L❩ ⊢ U ![h,a] & ❨G,L❩ ⊢ T ![h,a] & ❨G,L❩ ⊢ U ⬌*[h,0,1] T. #h #a #G #L #U #T #H elim (cnv_inv_cast … H) -H /3 width=3 by cpms_div, and3_intro/ @@ -58,19 +58,19 @@ qed-. lemma cnv_ind_cpes (h) (a) (Q:relation3 genv lenv term): (∀G,L,s. Q G L (⋆s)) → - (∀I,G,K,V. ❪G,K❫ ⊢ V![h,a] → Q G K V → Q G (K.ⓑ[I]V) (#O)) → - (∀I,G,K,i. ❪G,K❫ ⊢ #i![h,a] → Q G K (#i) → Q G (K.ⓘ[I]) (#(↑i))) → - (∀p,I,G,L,V,T. ❪G,L❫ ⊢ V![h,a] → ❪G,L.ⓑ[I]V❫⊢T![h,a] → + (∀I,G,K,V. ❨G,K❩ ⊢ V![h,a] → Q G K V → Q G (K.ⓑ[I]V) (#O)) → + (∀I,G,K,i. ❨G,K❩ ⊢ #i![h,a] → Q G K (#i) → Q G (K.ⓘ[I]) (#(↑i))) → + (∀p,I,G,L,V,T. ❨G,L❩ ⊢ V![h,a] → ❨G,L.ⓑ[I]V❩⊢T![h,a] → 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 ➡*[h,n] ⓛ[p]W.U → + (∀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 ➡*[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 → + (∀G,L,U,T. ❨G,L❩⊢ U![h,a] → ❨G,L❩ ⊢ T![h,a] → ❨G,L❩ ⊢ U ⬌*[h,0,1] T → Q G L U → Q G L T → Q G L (ⓝU.T) ) → - ∀G,L,T. ❪G,L❫⊢ T![h,a] → Q G L T. + ∀G,L,T. ❨G,L❩⊢ T![h,a] → Q G L T. #h #a #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #G #L #T #H elim H -G -L -T [5,6: /3 width=7 by cpms_div/ |*: /2 width=1 by/ ] qed-. 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 3ef5de466..78eadd408 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] ➡*[h,0] T & ❪G,L2❫ ⊢ ⓪[I] ➡*[h,0] 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 ➡*[h,1] T & ❪G,L2❫ ⊢ ⋆(⫯[h]s) ➡*[h,0] 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❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ❪G,L❫⊢#i![h,a] → + (∀G0,L0,T0. ❨G,L,#i❩ > ❨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 ➡[h,n] XV → + ∀n,XV. ❨G,K❩ ⊢ V ➡[h,n] XV → ∀X. ⇧[↑i]XV ≘ X → - ∀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. + ∀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 @@ -54,13 +54,13 @@ elim (cpms_lifts_sn … HVX … HLK2 … HXV) -XV -HLK2 #XV #HVX #HXV qed-. fact cnv_cpm_conf_lpr_atom_ell_aux (h) (a) (G) (L) (i): - (∀G0,L0,T0. ❪G,L,#i❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ❪G,L❫⊢#i![h,a] → + (∀G0,L0,T0. ❨G,L,#i❩ > ❨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 ➡[h,n] XW → + ∀n,XW. ❨G,K❩ ⊢ W ➡[h,n] XW → ∀X. ⇧[↑i]XW ≘ X → - ∀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. + ∀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 @@ -76,13 +76,13 @@ elim (cpms_lifts_sn … HWX … HLK2 … HXW) -XW -HLK2 #XW #HWX #HXW qed-. fact cnv_cpm_conf_lpr_delta_delta_aux (h) (a) (I) (G) (L) (i): - (∀G0,L0,T0. ❪G,L,#i❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ❪G,L❫⊢#i![h,a] → + (∀G0,L0,T0. ❨G,L,#i❩ > ❨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 ➡[h,n1] XV1 → ∀n2,XV2. ❪G,K2❫ ⊢ V2 ➡[h,n2] 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,0] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 → - ∃∃T. ❪G,L1❫ ⊢ X1 ➡*[h,n2-n1] T & ❪G,L2❫ ⊢ X2 ➡*[h,n1-n2] 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 @@ -108,12 +108,12 @@ lapply (drops_mono … HLK2 … HLK1) -L -i #H destruct 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❫ > ❪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,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. + (∀G0,L0,T0. ❨G,L,ⓑ[p,I]V.T❩ > ❨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,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 @@ -125,12 +125,12 @@ elim (cnv_cpm_conf_lpr_sub … IH … HT01 … HT02 (L1.ⓑ[I]V1) … (L2.ⓑ[I] qed-. fact cnv_cpm_conf_lpr_bind_zeta_aux (h) (a) (G) (L) (V) (T): - (∀G0,L0,T0. ❪G,L,+ⓓV.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ❪G,L❫ ⊢ +ⓓV.T ![h,a] → - ∀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. + (∀G0,L0,T0. ❨G,L,+ⓓV.T❩ > ❨G0,L0,T0❩ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❨G,L❩ ⊢ +ⓓV.T ![h,a] → + ∀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 @@ -145,12 +145,12 @@ elim (cnv_cpm_conf_lpr_sub … IH … HXT12 … HXT2 … HL01 … HL02) qed-. fact cnv_cpm_conf_lpr_zeta_zeta_aux (h) (a) (G) (L) (V) (T): - (∀G0,L0,T0. ❪G,L,+ⓓV.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ❪G,L❫ ⊢ +ⓓV.T ![h,a] → + (∀G0,L0,T0. ❨G,L,+ⓓV.T❩ > ❨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 ➡[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. + ∀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 @@ -164,12 +164,12 @@ elim (cnv_cpm_conf_lpr_sub … IH … HXT1 … HXT2 … HL01 … HL02) qed-. fact cnv_cpm_conf_lpr_appl_appl_aux (h) (a) (G) (L) (V) (T): - (∀G0,L0,T0. ❪G,L,ⓐV.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ❪G,L❫ ⊢ ⓐV.T ![h,a] → - ∀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. + (∀G0,L0,T0. ❨G,L,ⓐV.T❩ > ❨G0,L0,T0❩ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❨G,L❩ ⊢ ⓐV.T ![h,a] → + ∀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 @@ -181,13 +181,13 @@ elim (cnv_cpm_conf_lpr_sub … IH … HT01 … HT02 … HL01 … HL02) [|*: /2 w 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❫ > ❪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,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. + (∀G0,L0,T0. ❨G,L,ⓐV.ⓛ[p]W.T❩ > ❨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,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 @@ -203,14 +203,14 @@ lapply (lsubr_cpms_trans … HT2 (L2.ⓓⓝW2.V2) ?) -HT2 [ /2 width=1 by lsubr_ 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❫ > ❪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,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 → + (∀G0,L0,T0. ❨G,L,ⓐV.ⓓ[p]W.T❩ > ❨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,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,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. + ∀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 @@ -234,13 +234,13 @@ elim (cpm_inv_abbr1 … HX) -HX * 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❫ > ❪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,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. + (∀G0,L0,T0. ❨G,L,ⓐV.ⓛ[p]W.T❩ > ❨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,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 @@ -256,14 +256,14 @@ lapply (lsubr_cpms_trans … HT2 (L2.ⓓⓝW2.V2) ?) -HT2 /2 width=1 by lsubr_be 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❫ > ❪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,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 → + (∀G0,L0,T0. ❨G,L,ⓐV.ⓓ[p]W.T❩ > ❨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,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,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. + ∀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 @@ -279,12 +279,12 @@ lapply (cpm_lifts_bi … HV2 (Ⓣ) … (L2.ⓓW2) … HVU2 … HVU) -V2 -V [ /3 qed-. fact cnv_cpm_conf_lpr_cast_cast_aux (h) (a) (G) (L) (V) (T): - (∀G0,L0,T0. ❪G,L,ⓝV.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ❪G,L❫ ⊢ ⓝV.T ![h,a] → - ∀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. + (∀G0,L0,T0. ❨G,L,ⓝV.T❩ > ❨G0,L0,T0❩ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❨G,L❩ ⊢ ⓝV.T ![h,a] → + ∀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 @@ -296,12 +296,12 @@ elim (cnv_cpm_conf_lpr_sub … IH … HT01 … HT02 … HL01 … HL02) [|*: /2 w qed-. fact cnv_cpm_conf_lpr_cast_epsilon_aux (h) (a) (G) (L) (V) (T): - (∀G0,L0,T0. ❪G,L,ⓝV.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ❪G,L❫ ⊢ ⓝV.T ![h,a] → - ∀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. + (∀G0,L0,T0. ❨G,L,ⓝV.T❩ > ❨G0,L0,T0❩ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❨G,L❩ ⊢ ⓝV.T ![h,a] → + ∀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 @@ -312,13 +312,13 @@ elim (cnv_cpm_conf_lpr_sub … IH … HT01 … HT02 … HL01 … HL02) [|*: /2 w qed-. fact cnv_cpm_conf_lpr_cast_ee_aux (h) (a) (G) (L) (V) (T): - (∀G0,L0,T0. ❪G,L,ⓝV.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → - (∀G0,L0,T0. ❪G,L,ⓝV.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ❪G,L❫ ⊢ ⓝV.T ![h,a] → - ∀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. + (∀G0,L0,T0. ❨G,L,ⓝV.T❩ > ❨G0,L0,T0❩ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❨G,L,ⓝV.T❩ > ❨G0,L0,T0❩ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❨G,L❩ ⊢ ⓝV.T ![h,a] → + ∀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 @@ -335,11 +335,11 @@ lapply (cpms_trans … HT1 … HTU) -T ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ❪G,L❫ ⊢ ⓝV.T ![h,a] → - ∀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. + (∀G0,L0,T0. ❨G,L,ⓝV.T❩ > ❨G0,L0,T0❩ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❨G,L❩ ⊢ ⓝV.T ![h,a] → + ∀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 @@ -350,12 +350,12 @@ elim (cnv_cpm_conf_lpr_sub … IH … HT01 … HT02 … HL01 … HL02) [|*: /2 w qed-. fact cnv_cpm_conf_lpr_epsilon_ee_aux (h) (a) (G) (L) (V) (T): - (∀G0,L0,T0. ❪G,L,ⓝV.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → - (∀G0,L0,T0. ❪G,L,ⓝV.T❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ❪G,L❫ ⊢ ⓝV.T ![h,a] → - ∀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. + (∀G0,L0,T0. ❨G,L,ⓝV.T❩ > ❨G0,L0,T0❩ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❨G,L,ⓝV.T❩ > ❨G0,L0,T0❩ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❨G,L❩ ⊢ ⓝV.T ![h,a] → + ∀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 @@ -372,11 +372,11 @@ lapply (cpms_trans … HT1 … HTU) -T ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ❪G,L❫ ⊢ ⓝV.T ![h,a] → - ∀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. + (∀G0,L0,T0. ❨G,L,ⓝV.T❩ > ❨G0,L0,T0❩ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❨G,L❩ ⊢ ⓝV.T ![h,a] → + ∀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 @@ -388,8 +388,8 @@ qed-. fact cnv_cpm_conf_lpr_aux (h) (a): ∀G0,L0,T0. - (∀G1,L1,T1. ❪G0,L0,T0❫ > ❪G1,L1,T1❫ → IH_cnv_cpm_trans_lpr h a G1 L1 T1) → - (∀G1,L1,T1. ❪G0,L0,T0❫ > ❪G1,L1,T1❫ → IH_cnv_cpms_conf_lpr h a G1 L1 T1) → + (∀G1,L1,T1. ❨G0,L0,T0❩ > ❨G1,L1,T1❩ → IH_cnv_cpm_trans_lpr h a G1 L1 T1) → + (∀G1,L1,T1. ❨G0,L0,T0❩ > ❨G1,L1,T1❩ → IH_cnv_cpms_conf_lpr h a G1 L1 T1) → ∀G1,L1,T1. G0 = G1 → L0 = L1 → T0 = T1 → IH_cnv_cpm_conf_lpr h a G1 L1 T1. #h #a #G0 #L0 #T0 #IH2 #IH1 #G #L * [| * [| * ]] [ #I #HG0 #HL0 #HT0 #HT #n1 #X1 #HX1 #n2 #X2 #HX2 #L1 #HL1 #L2 #HL2 destruct 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 e37493a83..cd0203c84 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,0] 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 @@ -55,9 +55,9 @@ lemma cnv_cpr_teqx_fwd_refl (h) (a) (G) (L): 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 ➡[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. + ∀V,T1. ❨G,L❩ ⊢ ⓑ[p,I]V.T1 ![h,a] → + ∀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 @@ -73,10 +73,10 @@ elim (cpm_inv_bind1 … H1) -H1 * 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 ➡[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. + ∀V,T1. ❨G,L❩ ⊢ ⓐV.T1 ![h,a] → + ∀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 @@ -92,11 +92,11 @@ elim (cpm_inv_appl1 … H1) -H1 * 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 ➡[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. + ∀U1,T1. ❨G,L❩ ⊢ ⓝU1.T1 ![h,a] → + ∀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 @@ -115,9 +115,9 @@ elim (cpm_inv_cast1 … H1) -H1 [ * || * ] 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 ➡[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. + ∀X. ❨G,L❩ ⊢ X ![h,a] → + ∀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 @@ -129,23 +129,23 @@ qed-. 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 ➡[h,n] T2 → T1 ≅ T2 → + (∀p,I,L,V,T1. ❨G,L❩⊢ V![h,a] → ❨G,L.ⓑ[I]V❩⊢T1![h,a] → + ∀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 ➡*[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 → + ∀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,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 → + (∀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 ➡[h,n] T2 → T1 ≅ T2 → Q L T1 T2. + ∀L,T1. ❨G,L❩ ⊢ T1 ![h,a] → + ∀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 @@ -170,9 +170,9 @@ qed-. (* Advanced properties with restricted rt-transition for terms **************) lemma cpm_teqx_free (h) (a) (n) (G) (L): - ∀T1. ❪G,L❫ ⊢ T1 ![h,a] → - ∀T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → T1 ≅ T2 → - ∀F,K. ❪F,K❫ ⊢ T1 ➡[h,n] T2. + ∀T1. ❨G,L❩ ⊢ T1 ![h,a] → + ∀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 // @@ -189,9 +189,9 @@ qed-. (* Advanced inversion lemmas with restricted rt-transition for terms ********) 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 ➡[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. + ∀V,T1. ❨G,L❩ ⊢ ⓑ[p,I]V.T1 ![h,a] → + ∀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 546223ed6..d574fb915 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,33 +19,33 @@ include "basic_2/dynamic/cnv_cpm_teqx.ma". (* CONTEXT-SENSITIVE NATIVE VALIDITY FOR TERMS ******************************) 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 ➡[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. + λG,L0,T0. ❨G,L0❩ ⊢ T0 ![h,a] → + ∀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,0] T & ⓪[I] ≅ T & ❪G0,L2❫ ⊢ ⓪[I] ➡[h,0] 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 ➡[h,1] T & ⋆s ≅ T & ❪G0,L2❫ ⊢ ⋆(⫯[h]s) ➡[h,0] 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 teqg_sort, ex4_intro/ qed-. fact cnv_cpm_teqx_conf_lpr_bind_bind_aux (h) (a) (p) (I) (G0) (L0) (V0) (T0): - (∀G,L,T. ❪G0,L0,ⓑ[p,I]V0.T0❫ ⬂+ ❪G,L,T❫ → IH_cnv_cpm_teqx_conf_lpr h a G L T) → - ❪G0,L0❫ ⊢ ⓑ[p,I]V0.T0 ![h,a] → - ∀n1,T1. ❪G0,L0.ⓑ[I]V0❫ ⊢ T0 ➡[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. + (∀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 ➡[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 @@ -56,12 +56,12 @@ elim (IH … H1T01 H2T01 … H1T02 H2T02 (L1.ⓑ[I]V0) … (L2.ⓑ[I]V0)) [|*: / 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 ➡[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. + (∀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 ➡[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 @@ -72,14 +72,14 @@ elim (IH … H1T01 H2T01 … H1T02 H2T02 … HL01 … HL02) [|*: /2 width=1 by f 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 ➡[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. + (∀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 ➡[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 @@ -91,7 +91,7 @@ elim (IH … H1T01 H2T01 … H1T02 H2T02 … HL01 … HL02) [|*: /2 width=1 by f qed-. fact cnv_cpm_teqx_conf_lpr_aux (h) (a) (G0) (L0) (T0): - (∀G,L,T. ❪G0,L0,T0❫ ⬂+ ❪G,L,T❫ → IH_cnv_cpm_teqx_conf_lpr h a G L T) → + (∀G,L,T. ❨G0,L0,T0❩ ⬂+ ❨G,L,T❩ → IH_cnv_cpm_teqx_conf_lpr h a G L T) → ∀G,L,T. G0 = G → L0 = L → T0 = T → IH_cnv_cpm_teqx_conf_lpr h a G L T. #h #a #G0 #L0 #T0 #IH1 #G #L * [| * [| * ]] [ #I #HG0 #HL0 #HT0 #HT #n1 #X1 #H1X1 #H2X1 #n2 #X2 #H1X2 #H2X2 #L1 #HL1 #L2 #HL2 destruct 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 38bc3c411..14b956b82 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 @@ -18,16 +18,16 @@ include "basic_2/dynamic/cnv_cpm_teqx.ma". (* CONTEXT-SENSITIVE NATIVE VALIDITY FOR TERMS ******************************) 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 ➡[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. + λG,L,T1. ❨G,L❩ ⊢ T1 ![h,a] → + ∀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 *****************) fact cnv_cpm_teqx_cpm_trans_sub (h) (a) (G0) (L0) (T0): - (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ❪G0,L0,T0❫ ⬂+ ❪G,L,T❫ → IH_cnv_cpm_teqx_cpm_trans h a G L T) → + (∀G,L,T. ❨G0,L0,T0❩ > ❨G,L,T❩ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❨G0,L0,T0❩ ⬂+ ❨G,L,T❩ → IH_cnv_cpm_teqx_cpm_trans h a G L T) → ∀G,L,T1. G0 = G → L0 = L → T0 = T1 → IH_cnv_cpm_teqx_cpm_trans h a G L T1. #h #a #G0 #L0 #T0 #IH2 #IH1 #G #L * [| * [| * ]] [ #I #_ #_ #_ #_ #n1 #X1 #H1X #H2X #n2 #X2 #HX2 destruct -G0 -L0 -T0 @@ -89,7 +89,7 @@ fact cnv_cpm_teqx_cpm_trans_sub (h) (a) (G0) (L0) (T0): qed-. fact cnv_cpm_teqx_cpm_trans_aux (h) (a) (G0) (L0) (T0): - (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❨G0,L0,T0❩ > ❨G,L,T❩ → IH_cnv_cpm_trans_lpr h a G L T) → IH_cnv_cpm_teqx_cpm_trans h a G0 L0 T0. #h #a #G0 #L0 #T0 @(fqup_wf_ind (Ⓣ) … G0 L0 T0) -G0 -L0 -T0 #G0 #L0 #T0 #IH #IH0 diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_trans.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_trans.ma index f18e5d0ea..edd570c40 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_trans.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_trans.ma @@ -25,8 +25,8 @@ include "basic_2/dynamic/lsubv_cnv.ma". fact cnv_cpm_trans_lpr_aux (h) (a): ∀G0,L0,T0. - (∀G1,L1,T1. ❪G0,L0,T0❫ > ❪G1,L1,T1❫ → IH_cnv_cpms_conf_lpr h a G1 L1 T1) → - (∀G1,L1,T1. ❪G0,L0,T0❫ > ❪G1,L1,T1❫ → IH_cnv_cpm_trans_lpr h a G1 L1 T1) → + (∀G1,L1,T1. ❨G0,L0,T0❩ > ❨G1,L1,T1❩ → IH_cnv_cpms_conf_lpr h a G1 L1 T1) → + (∀G1,L1,T1. ❨G0,L0,T0❩ > ❨G1,L1,T1❩ → IH_cnv_cpm_trans_lpr h a G1 L1 T1) → ∀G1,L1,T1. G0 = G1 → L0 = L1 → T0 = T1 → IH_cnv_cpm_trans_lpr h a G1 L1 T1. #h #a #G0 #L0 #T0 #IH2 #IH1 #G1 #L1 * * [|||| * ] [ #s #HG0 #HL0 #HT0 #H1 #x #X #H2 #L2 #_ destruct -IH2 -IH1 -H1 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 48e99e557..c8c11b2b0 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmre.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmre.ma @@ -21,15 +21,15 @@ include "basic_2/dynamic/cnv_preserve.ma". (* Properties with t-bound evaluation on terms ******************************) lemma cnv_cpmre_trans (h) (a) (n) (G) (L): - ∀T1. ❪G,L❫ ⊢ T1 ![h,a] → - ∀T2. ❪G,L❫ ⊢ T1 ➡*𝐍[h,n] T2 → ❪G,L❫ ⊢ T2 ![h,a]. + ∀T1. ❨G,L❩ ⊢ T1 ![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 ➡*[h,n] T1 → - ∀T2. ❪G,L❫ ⊢ T ➡*𝐍[h,n] T2 → ❪G,L❫ ⊢ T1 ➡*𝐍[h,0] 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 ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → - ❪G0,L0❫ ⊢ T0 ![h,a] → - ∀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. + (∀G,L,T. ❨G0,L0,T0❩ > ❨G,L,T❩ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❨G0,L0,T0❩ > ❨G,L,T❩ → IH_cnv_cpms_conf_lpr h a G L T) → + ❨G0,L0❩ ⊢ T0 ![h,a] → + ∀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 @@ -35,12 +35,12 @@ elim (cnv_cpms_teqx_conf_lpr_aux … IH2 IH1 … H1T01 … H1T02 … HL01 … HL qed-. fact cnv_cpms_conf_lpr_refl_tneqx_sub (h) (a) (G0) (L0) (T0) (m21) (m22): - (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → - ❪G0,L0❫ ⊢ T0 ![h,a] → - ∀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. + (∀G,L,T. ❨G0,L0,T0❩ > ❨G,L,T❩ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❨G0,L0,T0❩ > ❨G,L,T❩ → IH_cnv_cpms_conf_lpr h a G L T) → + ❨G0,L0❩ ⊢ T0 ![h,a] → + ∀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 @@ -57,28 +57,28 @@ lapply (cpms_trans … HTY2 … HY2) -Y2 #HT2Y qed-. fact cnv_cpms_conf_lpr_step_tneqx_sub (h) (a) (G0) (L0) (T0) (m11) (m12) (m21) (m22): - (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → - ❪G0,L0❫ ⊢ T0 ![h,a] → - ∀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❫ > ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ❪G0,L0,X1❫ > ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → + (∀G,L,T. ❨G0,L0,T0❩ > ❨G,L,T❩ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❨G0,L0,T0❩ > ❨G,L,T❩ → IH_cnv_cpms_conf_lpr h a G L T) → + ❨G0,L0❩ ⊢ T0 ![h,a] → + ∀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❩ > ❨G,L,T❩ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❨G0,L0,X1❩ > ❨G,L,T❩ → IH_cnv_cpms_conf_lpr h a G L T) → ∀m21,m22. - ∀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 + ∀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 ➡*[h,m21+m22-(m11+m12)] T & ❪G0,L2❫ ⊢ T2 ➡*[h,m11+m12-(m21+m22)] 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 lapply (cnv_cpm_trans_lpr_aux … IH1 IH2 … H1X01 … L0 ?) // #HX1 lapply (cnv_cpm_trans_lpr_aux … IH1 IH2 … H1X02 … L0 ?) // #HX2 elim (cnv_cpm_conf_lpr_aux … IH2 IH1 … H1X01 … H1X02 … L0 … L0) // #Z0 #HXZ10 #HXZ20 -cut (❪G0, L0, T0❫ > ❪G0, L0, X2❫) [ /4 width=5 by cpms_fwd_fpbs, cpm_fwd_fpbc, fpbc_fpbs_fpbg/ ] #H1fpbg (**) (* cut *) +cut (❨G0, L0, T0❩ > ❨G0, L0, X2❩) [ /4 width=5 by cpms_fwd_fpbs, cpm_fwd_fpbc, fpbc_fpbs_fpbg/ ] #H1fpbg (**) (* cut *) lapply (fpbg_fpbs_trans … H1fpbg G0 L0 Z0 ?) [ /2 width=3 by cpms_fwd_fpbs/ ] #H2fpbg lapply (cnv_cpms_trans_lpr_sub … IH2 … HXZ20 … L0 ?) // #HZ0 elim (IH1 … HXT2 … HXZ20 … L2 … L0) [|*: /4 width=2 by fpbc_fpbg, cpm_fwd_fpbc/ ] -HXT2 -HXZ20 #Z2 #HTZ2 #HZ02 @@ -100,13 +100,13 @@ lapply (cpms_trans … HTZ2 … HZ02) -Z2 ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → - ❪G0,L0❫ ⊢ T0 ![h,a] → - ∀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. + (∀G,L,T. ❨G0,L0,T0❩ > ❨G,L,T❩ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❨G0,L0,T0❩ > ❨G,L,T❩ → IH_cnv_cpms_conf_lpr h a G L T) → + ❨G0,L0❩ ⊢ T0 ![h,a] → + ∀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 @@ -123,20 +123,20 @@ generalize in match IH1; generalize in match IH2; qed-. fact cnv_cpms_conf_lpr_tneqx_tneqx_aux (h) (a) (G0) (L0) (T0) (m11) (m12) (m21) (m22): - (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → - ❪G0,L0❫ ⊢ T0 ![h,a] → - ∀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. + (∀G,L,T. ❨G0,L0,T0❩ > ❨G,L,T❩ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❨G0,L0,T0❩ > ❨G,L,T❩ → IH_cnv_cpms_conf_lpr h a G L T) → + ❨G0,L0❩ ⊢ T0 ![h,a] → + ∀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 lapply (cnv_cpm_trans_lpr_aux … IH1 IH2 … HX01 … L0 ?) // #HX1 lapply (cnv_cpm_trans_lpr_aux … IH1 IH2 … HX02 … L0 ?) // #HX2 elim (cnv_cpm_conf_lpr_aux … IH2 IH1 … HX01 … HX02 … L0 … L0) // #Z0 #HXZ10 #HXZ20 -cut (❪G0, L0, T0❫ > ❪G0, L0, X1❫) [ /4 width=5 by cpms_fwd_fpbs, cpm_fwd_fpbc, fpbc_fpbs_fpbg/ ] #H1fpbg (**) (* cut *) +cut (❨G0, L0, T0❩ > ❨G0, L0, X1❩) [ /4 width=5 by cpms_fwd_fpbs, cpm_fwd_fpbc, fpbc_fpbs_fpbg/ ] #H1fpbg (**) (* cut *) lapply (fpbg_fpbs_trans … H1fpbg G0 L0 Z0 ?) [ /2 width=3 by cpms_fwd_fpbs/ ] #H2fpbg lapply (cnv_cpms_trans_lpr_sub … IH2 … HXZ10 … L0 ?) // #HZ0 elim (IH1 … HXT1 … HXZ10 … L1 … L0) [|*: /4 width=2 by fpbc_fpbg, cpm_fwd_fpbc/ ] -HXT1 -HXZ10 #Z1 #HTZ1 #HZ01 @@ -148,8 +148,8 @@ lapply (cpms_trans … HTZ2 … HZ02) -Z2 ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → + (∀G,L,T. ❨G0,L0,T0❩ > ❨G,L,T❩ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❨G0,L0,T0❩ > ❨G,L,T❩ → IH_cnv_cpms_conf_lpr h a G L T) → ∀G,L,T. G0 = G → L0 = L → T0 = T → IH_cnv_cpms_conf_lpr h a G L T. #h #a #G #L #T #IH2 #IH1 #G0 #L0 #T0 #HG #HL #HT #HT0 #n1 #T1 #HT01 #n2 #T2 #HT02 #L1 #HL01 #L2 #HL02 destruct 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 bc9770b54..dfd06ce5a 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 ➡*[h,n] T2 → ❪G,L❫ ⊢ T1 ![h,a] → (T1 ≅ T2 → ⊥) → - (∀G0,L0,T0. ❪G,L,T1❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - (∀G0,L0,T0. ❪G,L,T1❫ > ❪G0,L0,T0❫ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → - ∃∃n1,n2,T0. ❪G,L❫ ⊢ T1 ➡[h,n1] T0 & T1 ≅ T0 → ⊥ & ❪G,L❫ ⊢ T0 ➡*[h,n2] T2 & n1+n2 = n. + ∀T2. ❨G,L❩ ⊢ T1 ➡*[h,n] T2 → ❨G,L❩ ⊢ T1 ![h,a] → (T1 ≅ T2 → ⊥) → + (∀G0,L0,T0. ❨G,L,T1❩ > ❨G0,L0,T0❩ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❨G,L,T1❩ > ❨G0,L0,T0❩ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → + ∃∃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 // @@ -43,11 +43,11 @@ fact cpms_tneqx_fwd_step_sn_aux (h) (a) (n) (G) (L) (T1): 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 ➡[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❫ > ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - (∀G0,L0,T0. ❪G,L,T1❫ > ❪G0,L0,T0❫ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → + (❨G,L❩ ⊢ T2 ![h,a] → Q 0 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❩ > ❨G0,L0,T0❩ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❨G,L,T1❩ > ❨G0,L0,T0❩ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → Q n T1. #h #a #G #L #T2 #Q #IB1 #IB2 #n #T1 #H @(cpms_ind_sn … H) -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 e992d2e26..a671be539 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 @@ -20,12 +20,12 @@ include "basic_2/dynamic/cnv_cpms_teqx.ma". (* Sub confluence propery with restricted rt-transition for terms ***********) fact cnv_cpms_teqx_strip_lpr_aux (h) (a) (G0) (L0) (T0): - (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L 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. + (∀G,L,T. ❨G0,L0,T0❩ > ❨G,L,T❩ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❨G0,L0,T0❩ > ❨G,L,T❩ → IH_cnv_cpms_conf_lpr h a G L 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 @@ -45,12 +45,12 @@ fact cnv_cpms_teqx_strip_lpr_aux (h) (a) (G0) (L0) (T0): qed-. fact cnv_cpms_teqx_conf_lpr_aux (h) (a) (G0) (L0) (T0): - (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ❪G0,L0,T0❫ > ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L 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. + (∀G,L,T. ❨G0,L0,T0❩ > ❨G,L,T❩ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❨G0,L0,T0❩ > ❨G,L,T❩ → IH_cnv_cpms_conf_lpr h a G L 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_cpmuwe.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe.ma index 0a8ef08ce..e203601af 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe.ma @@ -21,21 +21,21 @@ include "basic_2/dynamic/cnv_preserve.ma". (* Properties with t-unbound whd evaluation on terms ************************) lemma cnv_cpmuwe_trans (h) (a) (G) (L): - ∀T1. ❪G,L❫ ⊢ T1 ![h,a] → - ∀n,T2. ❪G,L❫ ⊢ T1 ➡*𝐍𝐖*[h,n] T2 → ❪G,L❫ ⊢ T2 ![h,a]. + ∀T1. ❨G,L❩ ⊢ T1 ![h,a] → + ∀n,T2. ❨G,L❩ ⊢ T1 ➡*𝐍𝐖*[h,n] T2 → ❨G,L❩ ⊢ T2 ![h,a]. /3 width=4 by cpmuwe_fwd_cpms, cnv_cpms_trans/ qed-. lemma cnv_R_cpmuwe_total (h) (a) (G) (L): - ∀T1. ❪G,L❫ ⊢ T1 ![h,a] → ∃n. R_cpmuwe h G L T1 n. + ∀T1. ❨G,L❩ ⊢ T1 ![h,a] → ∃n. R_cpmuwe h G L T1 n. /4 width=3 by cnv_fwd_fsb, fsb_inv_csx, R_cpmuwe_total_csx/ qed-. (* Main inversions with head evaluation for t-bound rt-transition on terms **) theorem cnv_cpmuwe_mono (h) (a) (G) (L): - ∀T0. ❪G,L❫ ⊢ T0 ![h,a] → - ∀n1,T1. ❪G,L❫ ⊢ T0 ➡*𝐍𝐖*[h,n1] T1 → - ∀n2,T2. ❪G,L❫ ⊢ T0 ➡*𝐍𝐖*[h,n2] T2 → - ∧∧ ❪G,L❫ ⊢ T1 ⬌*[h,n2-n1,n1-n2] T2 & T1 ≃ T2. + ∀T0. ❨G,L❩ ⊢ T0 ![h,a] → + ∀n1,T1. ❨G,L❩ ⊢ T0 ➡*𝐍𝐖*[h,n1] T1 → + ∀n2,T2. ❨G,L❩ ⊢ T0 ➡*𝐍𝐖*[h,n2] T2 → + ∧∧ ❨G,L❩ ⊢ T1 ⬌*[h,n2-n1,n1-n2] T2 & T1 ≃ T2. #h #a #G #L #T0 #HT0 #n1 #T1 * #HT01 #HT1 #n2 #T2 * #HT02 #HT2 elim (cnv_cpms_conf … HT0 … HT01 … HT02) -T0 #T0 #HT10 #HT20 /4 width=4 by cpms_div, teqw_canc_dx, conj/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe_cpmre.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe_cpmre.ma index 09eb4bdc3..e826196e6 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe_cpmre.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe_cpmre.ma @@ -22,7 +22,7 @@ include "basic_2/dynamic/cnv_cpmre.ma". (* Advanced Properties with t-unbound whd evaluation on terms ***************) lemma cnv_R_cpmuwe_dec (h) (a) (G) (L): - ∀T. ❪G,L❫ ⊢ T ![h,a] → ∀n. Decidable (R_cpmuwe h G L T n). + ∀T. ❨G,L❩ ⊢ T ![h,a] → ∀n. Decidable (R_cpmuwe h G L T n). #h #a #G #L #T1 #HT1 #n elim (cnv_fwd_aaa … HT1) #A #HA elim (cpmre_total_aaa h n … HA) -HA #T2 #HT12 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 dc44cc5b2..3bb3568f1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpts.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpts.ma @@ -22,8 +22,8 @@ include "basic_2/dynamic/cnv_preserve_cpcs.ma". (* Forward lemmas with t-bound t-computarion for terms **********************) 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 ➡*[h,n] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2. + ∀T0. ❨G,L❩ ⊢ T0 ![h,a] → ∀T1. ❨G,L❩ ⊢ T0 ⬆*[h,n] T1 → + ∀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-. @@ -31,18 +31,18 @@ qed-. (* Inversion lemmas with t-bound t-computarion for terms ********************) lemma cnv_inv_cast_cpts (h) (a) (nu) (nt) (G) (L): - ∀U1. ❪G,L❫ ⊢ U1 ![h,a] → ∀U2. ❪G,L❫ ⊢ U1 ⬆*[h,nu] U2 → - ∀T1. ❪G,L❫ ⊢ T1 ![h,a] → ∀T2. ❪G,L❫ ⊢ T1 ⬆*[h,nt] T2 → - ❪G,L❫ ⊢ U1 ⬌*[h,nu,nt] T1 → ❪G,L❫ ⊢ U2 ⬌*[h] T2. + ∀U1. ❨G,L❩ ⊢ U1 ![h,a] → ∀U2. ❨G,L❩ ⊢ U1 ⬆*[h,nu] U2 → + ∀T1. ❨G,L❩ ⊢ T1 ![h,a] → ∀T2. ❨G,L❩ ⊢ T1 ⬆*[h,nt] T2 → + ❨G,L❩ ⊢ U1 ⬌*[h,nu,nt] T1 → ❨G,L❩ ⊢ U2 ⬌*[h] T2. #h #a #nu #nt #G #L #U1 #HU1 #U2 #HU12 #T1 #HT1 #T2 #HT12 * #X1 #HUX1 #HTX1 /3 width=8 by cpts_cpms_conf_eq, cpcs_canc_dx/ 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 ➡*[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. + ∀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 ➡*[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 @@ -56,19 +56,19 @@ qed-. (* Properties with t-bound t-computarion for terms **************************) lemma cnv_cast_cpts (h) (a) (nu) (nt) (G) (L): - ∀U1. ❪G,L❫ ⊢ U1 ![h,a] → ∀U2. ❪G,L❫ ⊢ U1 ⬆*[h,nu] U2 → - ∀T1. ❪G,L❫ ⊢ T1 ![h,a] → ∀T2. ❪G,L❫ ⊢ T1 ⬆*[h,nt] T2 → - ❪G,L❫ ⊢ U2 ⬌*[h] T2 → ❪G,L❫ ⊢ U1 ⬌*[h,nu,nt] T1. + ∀U1. ❨G,L❩ ⊢ U1 ![h,a] → ∀U2. ❨G,L❩ ⊢ U1 ⬆*[h,nu] U2 → + ∀T1. ❨G,L❩ ⊢ T1 ![h,a] → ∀T2. ❨G,L❩ ⊢ T1 ⬆*[h,nt] T2 → + ❨G,L❩ ⊢ U2 ⬌*[h] T2 → ❨G,L❩ ⊢ U1 ⬌*[h,nu,nt] T1. #h #a #nu #nt #G #L #U1 #HU1 #U2 #HU12 #T1 #HT1 #T2 #HT12 #HUT2 elim (cpcs_inv_cprs … HUT2) -HUT2 #X2 #HUX2 #HTX2 /3 width=5 by cpts_cprs_trans, cpms_div/ 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,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. + ∀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,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_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_drops.ma index 654a694b2..e217f0ab1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_drops.ma @@ -21,8 +21,8 @@ include "basic_2/dynamic/cnv.ma". (* Basic_2A1: uses: snv_lref *) lemma cnv_lref_drops (h) (a) (G): - ∀I,K,V,i,L. ❪G,K❫ ⊢ V ![h,a] → - ⇩[i] L ≘ K.ⓑ[I]V → ❪G,L❫ ⊢ #i ![h,a]. + ∀I,K,V,i,L. ❨G,K❩ ⊢ V ![h,a] → + ⇩[i] L ≘ K.ⓑ[I]V → ❨G,L❩ ⊢ #i ![h,a]. #h #a #G #I #K #V #i elim i -i [ #L #HV #H lapply (drops_fwd_isid … H ?) -H // #H destruct @@ -37,8 +37,8 @@ qed. (* Basic_2A1: uses: snv_inv_lref *) lemma cnv_inv_lref_drops (h) (a) (G): - ∀i,L. ❪G,L❫ ⊢ #i ![h,a] → - ∃∃I,K,V. ⇩[i] L ≘ K.ⓑ[I]V & ❪G,K❫ ⊢ V ![h,a]. + ∀i,L. ❨G,L❩ ⊢ #i ![h,a] → + ∃∃I,K,V. ⇩[i] L ≘ K.ⓑ[I]V & ❨G,K❩ ⊢ V ![h,a]. #h #a #G #i elim i -i [ #L #H elim (cnv_inv_zero … H) -H #I #K #V #HV #H destruct @@ -51,15 +51,15 @@ lemma cnv_inv_lref_drops (h) (a) (G): qed-. lemma cnv_inv_lref_pair (h) (a) (G): - ∀i,L. ❪G,L❫ ⊢ #i ![h,a] → - ∀I,K,V. ⇩[i] L ≘ K.ⓑ[I]V → ❪G,K❫ ⊢ V ![h,a]. + ∀i,L. ❨G,L❩ ⊢ #i ![h,a] → + ∀I,K,V. ⇩[i] L ≘ K.ⓑ[I]V → ❨G,K❩ ⊢ V ![h,a]. #h #a #G #i #L #H #I #K #V #HLK elim (cnv_inv_lref_drops … H) -H #Z #Y #X #HLY #HX lapply (drops_mono … HLY … HLK) -L #H destruct // qed-. lemma cnv_inv_lref_atom (h) (a) (b) (G): - ∀i,L. ❪G,L❫ ⊢ #i ![h,a] → ⇩*[b,𝐔❨i❩] L ≘ ⋆ → ⊥. + ∀i,L. ❨G,L❩ ⊢ #i ![h,a] → ⇩*[b,𝐔❨i❩] L ≘ ⋆ → ⊥. #h #a #b #G #i #L #H #Hi elim (cnv_inv_lref_drops … H) -H #Z #Y #X #HLY #_ lapply (drops_gen b … HLY) -HLY #HLY @@ -67,7 +67,7 @@ lapply (drops_mono … HLY … Hi) -L #H destruct qed-. lemma cnv_inv_lref_unit (h) (a) (G): - ∀i,L. ❪G,L❫ ⊢ #i ![h,a] → + ∀i,L. ❨G,L❩ ⊢ #i ![h,a] → ∀I,K. ⇩[i] L ≘ K.ⓤ[I] → ⊥. #h #a #G #i #L #H #I #K #HLK elim (cnv_inv_lref_drops … H) -H #Z #Y #X #HLY #_ diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_eval.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_eval.ma index 3126454a8..537797b33 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_eval.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_eval.ma @@ -24,7 +24,7 @@ include "basic_2/dynamic/cnv_preserve_cpes.ma". (* main properties with evaluations for rt-transition on terms **************) theorem cnv_dec (h) (a) (G) (L) (T): ac_props a → - Decidable (❪G,L❫ ⊢ T ![h,a]). + Decidable (❨G,L❩ ⊢ T ![h,a]). #h #a #G #L #T #Ha @(fqup_wf_ind_eq (Ⓣ) … G L T) -G -L -T #G0 #L0 #T0 #IH #G #L * * [|||| * ] [ #s #HG #HL #HT destruct -Ha -IH diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_fqus.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_fqus.ma index ec0549fa2..e0a3b7215 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_fqus.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_fqus.ma @@ -21,8 +21,8 @@ include "basic_2/dynamic/cnv_drops.ma". (* Basic_2A1: uses: snv_fqu_conf *) lemma cnv_fqu_conf (h) (a): - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂ ❪G2,L2,T2❫ → - ❪G1,L1❫ ⊢ T1 ![h,a] → ❪G2,L2❫ ⊢ T2 ![h,a]. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂ ❨G2,L2,T2❩ → + ❨G1,L1❩ ⊢ T1 ![h,a] → ❨G2,L2❩ ⊢ T2 ![h,a]. #h #a #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 [ #I1 #G1 #L1 #V1 #H elim (cnv_inv_zero … H) -H #I2 #L2 #V2 #HV2 #H destruct // @@ -45,24 +45,24 @@ qed-. (* Basic_2A1: uses: snv_fquq_conf *) lemma cnv_fquq_conf (h) (a): - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮ ❪G2,L2,T2❫ → - ❪G1,L1❫ ⊢ T1 ![h,a] → ❪G2,L2❫ ⊢ T2 ![h,a]. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂⸮ ❨G2,L2,T2❩ → + ❨G1,L1❩ ⊢ T1 ![h,a] → ❨G2,L2❩ ⊢ T2 ![h,a]. #h #a #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -H [|*] /2 width=5 by cnv_fqu_conf/ qed-. (* Basic_2A1: uses: snv_fqup_conf *) lemma cnv_fqup_conf (h) (a): - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+ ❪G2,L2,T2❫ → - ❪G1,L1❫ ⊢ T1 ![h,a] → ❪G2,L2❫ ⊢ T2 ![h,a]. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂+ ❨G2,L2,T2❩ → + ❨G1,L1❩ ⊢ T1 ![h,a] → ❨G2,L2❩ ⊢ T2 ![h,a]. #h #a #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2 /3 width=5 by fqup_strap1, cnv_fqu_conf/ qed-. (* Basic_2A1: uses: snv_fqus_conf *) lemma cnv_fqus_conf (h) (a): - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂* ❪G2,L2,T2❫ → - ❪G1,L1❫ ⊢ T1 ![h,a] → ❪G2,L2❫ ⊢ T2 ![h,a]. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂* ❨G2,L2,T2❩ → + ❨G1,L1❩ ⊢ T1 ![h,a] → ❨G2,L2❩ ⊢ T2 ![h,a]. #h #a #G1 #G2 #L1 #L2 #T1 #T2 #H elim (fqus_inv_fqup … H) -H [|*] /2 width=5 by cnv_fqup_conf/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_fsb.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_fsb.ma index 6055f11e3..ec7531be3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_fsb.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_fsb.ma @@ -22,14 +22,14 @@ include "basic_2/dynamic/cnv_aaa.ma". (* Note: this is the "big tree" theorem *) (* Basic_2A1: uses: snv_fwd_fsb *) lemma cnv_fwd_fsb (h) (a): - ∀G,L,T. ❪G,L❫ ⊢ T ![h,a] → ≥𝐒 ❪G,L,T❫. + ∀G,L,T. ❨G,L❩ ⊢ T ![h,a] → ≥𝐒 ❨G,L,T❩. #h #a #G #L #T #H elim (cnv_fwd_aaa … H) -H /2 width=2 by aaa_fsb/ qed-. (* Forward lemmas with strongly rt-normalizing terms ************************) lemma cnv_fwd_csx (h) (a): - ∀G,L,T. ❪G,L❫ ⊢ T ![h,a] → ❪G,L❫ ⊢ ⬈*𝐒 T. + ∀G,L,T. ❨G,L❩ ⊢ T ![h,a] → ❨G,L❩ ⊢ ⬈*𝐒 T. #h #a #G #L #T #H /3 width=3 by cnv_fwd_fsb, fsb_inv_csx/ qed-. @@ -37,5 +37,5 @@ qed-. (* Inversion lemmas with proper parallel rst-computation for closures *******) lemma cnv_fpbg_refl_false (h) (a): - ∀G,L,T. ❪G,L❫ ⊢ T ![h,a] → ❪G,L,T❫ > ❪G,L,T❫ → ⊥. + ∀G,L,T. ❨G,L❩ ⊢ T ![h,a] → ❨G,L,T❩ > ❨G,L,T❩ → ⊥. /3 width=7 by cnv_fwd_fsb, fsb_fpbg_refl_false/ 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 06df2c198..a92a62abe 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve.ma @@ -19,7 +19,7 @@ include "basic_2/dynamic/cnv_cpms_conf.ma". (* Main preservation properties *********************************************) (* Basic_2A1: uses: snv_preserve *) -lemma cnv_preserve (h) (a): ∀G,L,T. ❪G,L❫ ⊢ T ![h,a] → +lemma cnv_preserve (h) (a): ∀G,L,T. ❨G,L❩ ⊢ T ![h,a] → ∧∧ IH_cnv_cpms_conf_lpr h a G L T & IH_cnv_cpm_trans_lpr h a G L T. #h #a #G #L #T #HT @@ -42,9 +42,9 @@ qed-. (* Advanced preservation properties *****************************************) lemma cnv_cpms_conf (h) (a) (G) (L): - ∀T0. ❪G,L❫ ⊢ T0 ![h,a] → - ∀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. + ∀T0. ❨G,L❩ ⊢ T0 ![h,a] → + ∀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 *) @@ -54,22 +54,22 @@ lemma cnv_cpms_trans_lpr (h) (a) (G) (L) (T): IH_cnv_cpms_trans_lpr h a G L T. qed-. lemma cnv_cpm_trans (h) (a) (G) (L): - ∀T1. ❪G,L❫ ⊢ T1 ![h,a] → - ∀n,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → ❪G,L❫ ⊢ T2 ![h,a]. + ∀T1. ❨G,L❩ ⊢ T1 ![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 ➡*[h,n] T2 → ❪G,L❫ ⊢ T2 ![h,a]. + ∀T1. ❨G,L❩ ⊢ T1 ![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,0] 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,0] 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 059b8e44e..7bba18976 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 @@ -20,16 +20,16 @@ include "basic_2/dynamic/cnv_preserve.ma". (* Forward lemmas with r-equivalence ****************************************) lemma cnv_cpms_conf_eq (h) (a) (n) (G) (L): - ∀T. ❪G,L❫ ⊢ T ![h,a] → - ∀T1. ❪G,L❫ ⊢ T ➡*[h,n] T1 → ∀T2. ❪G,L❫ ⊢ T ➡*[h,n] T2 → ❪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] T2. #h #a #n #G #L #T #HT #T1 #HT1 #T2 #HT2 elim (cnv_cpms_conf … HT … HT1 … HT2) -T ❪G1,L1,T1❫ → IH_cnv_cpm_trans_lpr h a G1 L1 T1) → - ∀G1,L1,T1. ❪G0,L0,T0❫ > ❪G1,L1,T1❫ → IH_cnv_cpms_trans_lpr h a G1 L1 T1. + (∀G1,L1,T1. ❨G0,L0,T0❩ > ❨G1,L1,T1❩ → IH_cnv_cpm_trans_lpr h a G1 L1 T1) → + ∀G1,L1,T1. ❨G0,L0,T0❩ > ❨G1,L1,T1❩ → IH_cnv_cpms_trans_lpr h a G1 L1 T1. #h #a #G0 #L0 #T0 #IH #G1 #L1 #T1 #H01 #HT1 #n #T2 #H @(cpms_ind_dx … H) -n -T2 /3 width=7 by fpbg_cpms_trans/ @@ -61,12 +61,12 @@ qed-. fact cnv_cpm_conf_lpr_sub (h) (a): ∀G0,L0,T0. - (∀G1,L1,T1. ❪G0,L0,T0❫ > ❪G1,L1,T1❫ → IH_cnv_cpms_conf_lpr h a G1 L1 T1) → - ∀G1,L1,T1. ❪G0,L0,T0❫ > ❪G1,L1,T1❫ → IH_cnv_cpm_conf_lpr h a G1 L1 T1. + (∀G1,L1,T1. ❨G0,L0,T0❩ > ❨G1,L1,T1❩ → IH_cnv_cpms_conf_lpr h a G1 L1 T1) → + ∀G1,L1,T1. ❨G0,L0,T0❩ > ❨G1,L1,T1❩ → IH_cnv_cpm_conf_lpr h a G1 L1 T1. /3 width=8 by cpm_cpms/ qed-. fact cnv_cpms_strip_lpr_sub (h) (a): ∀G0,L0,T0. - (∀G1,L1,T1. ❪G0,L0,T0❫ > ❪G1,L1,T1❫ → IH_cnv_cpms_conf_lpr h a G1 L1 T1) → - ∀G1,L1,T1. ❪G0,L0,T0❫ > ❪G1,L1,T1❫ → IH_cnv_cpms_strip_lpr h a G1 L1 T1. + (∀G1,L1,T1. ❨G0,L0,T0❩ > ❨G1,L1,T1❩ → IH_cnv_cpms_conf_lpr h a G1 L1 T1) → + ∀G1,L1,T1. ❨G0,L0,T0❩ > ❨G1,L1,T1❩ → IH_cnv_cpms_strip_lpr h a G1 L1 T1. /3 width=8 by cpm_cpms/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubv.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubv.ma index 50d1bd0e5..6f66ec248 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubv.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubv.ma @@ -20,7 +20,7 @@ include "basic_2/dynamic/cnv.ma". inductive lsubv (h) (a) (G): relation lenv ≝ | lsubv_atom: lsubv h a G (⋆) (⋆) | lsubv_bind: ∀I,L1,L2. lsubv h a G L1 L2 → lsubv h a G (L1.ⓘ[I]) (L2.ⓘ[I]) -| lsubv_beta: ∀L1,L2,W,V. ❪G,L1❫ ⊢ ⓝW.V ![h,a] → +| lsubv_beta: ∀L1,L2,W,V. ❨G,L1❩ ⊢ ⓝW.V ![h,a] → lsubv h a G L1 L2 → lsubv h a G (L1.ⓓⓝW.V) (L2.ⓛW) . @@ -47,7 +47,7 @@ lemma lsubv_inv_atom_sn (h) (a) (G): fact lsubv_inv_bind_sn_aux (h) (a) (G): ∀L1,L2. G ⊢ L1 ⫃![h,a] L2 → ∀I,K1. L1 = K1.ⓘ[I] → ∨∨ ∃∃K2. G ⊢ K1 ⫃![h,a] K2 & L2 = K2.ⓘ[I] - | ∃∃K2,W,V. ❪G,K1❫ ⊢ ⓝW.V ![h,a] & G ⊢ K1 ⫃![h,a] K2 + | ∃∃K2,W,V. ❨G,K1❩ ⊢ ⓝW.V ![h,a] & G ⊢ K1 ⫃![h,a] K2 & I = BPair Abbr (ⓝW.V) & L2 = K2.ⓛW. #h #a #G #L1 #L2 * -L1 -L2 [ #J #K1 #H destruct @@ -60,7 +60,7 @@ qed-. lemma lsubv_inv_bind_sn (h) (a) (G): ∀I,K1,L2. G ⊢ K1.ⓘ[I] ⫃![h,a] L2 → ∨∨ ∃∃K2. G ⊢ K1 ⫃![h,a] K2 & L2 = K2.ⓘ[I] - | ∃∃K2,W,V. ❪G,K1❫ ⊢ ⓝW.V ![h,a] & G ⊢ K1 ⫃![h,a] K2 + | ∃∃K2,W,V. ❨G,K1❩ ⊢ ⓝW.V ![h,a] & G ⊢ K1 ⫃![h,a] K2 & I = BPair Abbr (ⓝW.V) & L2 = K2.ⓛW. /2 width=3 by lsubv_inv_bind_sn_aux/ qed-. @@ -82,7 +82,7 @@ fact lsubv_inv_bind_dx_aux (h) (a) (G): ∀L1,L2. G ⊢ L1 ⫃![h,a] L2 → ∀I,K2. L2 = K2.ⓘ[I] → ∨∨ ∃∃K1. G ⊢ K1 ⫃![h,a] K2 & L1 = K1.ⓘ[I] - | ∃∃K1,W,V. ❪G,K1❫ ⊢ ⓝW.V ![h,a] & + | ∃∃K1,W,V. ❨G,K1❩ ⊢ ⓝW.V ![h,a] & G ⊢ K1 ⫃![h,a] K2 & I = BPair Abst W & L1 = K1.ⓓⓝW.V. #h #a #G #L1 #L2 * -L1 -L2 [ #J #K2 #H destruct @@ -95,7 +95,7 @@ qed-. lemma lsubv_inv_bind_dx (h) (a) (G): ∀I,L1,K2. G ⊢ L1 ⫃![h,a] K2.ⓘ[I] → ∨∨ ∃∃K1. G ⊢ K1 ⫃![h,a] K2 & L1 = K1.ⓘ[I] - | ∃∃K1,W,V. ❪G,K1❫ ⊢ ⓝW.V ![h,a] & + | ∃∃K1,W,V. ❨G,K1❩ ⊢ ⓝW.V ![h,a] & G ⊢ K1 ⫃![h,a] K2 & I = BPair Abst W & L1 = K1.ⓓⓝW.V. /2 width=3 by lsubv_inv_bind_dx_aux/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubv_cnv.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubv_cnv.ma index c5b419480..47170dcf8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubv_cnv.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubv_cnv.ma @@ -20,8 +20,8 @@ include "basic_2/dynamic/lsubv_cpms.ma". (* Basic_2A1: uses: lsubsv_snv_trans *) lemma lsubv_cnv_trans (h) (a) (G): - ∀L2,T. ❪G,L2❫ ⊢ T ![h,a] → - ∀L1. G ⊢ L1 ⫃![h,a] L2 → ❪G,L1❫ ⊢ T ![h,a]. + ∀L2,T. ❨G,L2❩ ⊢ T ![h,a] → + ∀L1. G ⊢ L1 ⫃![h,a] L2 → ❨G,L1❩ ⊢ T ![h,a]. #h #a #G #L2 #T #H elim H -G -L2 -T // [ #I #G #K2 #V #HV #IH #L1 #H elim (lsubv_inv_bind_dx … H) -H * /3 width=1 by cnv_zero/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubv_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubv_drops.ma index ac7e5430e..86a7bdc81 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubv_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubv_drops.ma @@ -19,11 +19,11 @@ include "basic_2/dynamic/lsubv.ma". (* Properties with generic slicing for local environments *******************) -(* Note: the premise 𝐔❪f❫ cannot be removed *) +(* Note: the premise 𝐔❨f❩ cannot be removed *) (* Basic_2A1: includes: lsubsv_drop_O1_conf *) lemma lsubv_drops_conf_isuni (h) (a) (G): ∀L1,L2. G ⊢ L1 ⫃![h,a] L2 → - ∀b,f,K1. 𝐔❪f❫ → ⇩*[b,f] L1 ≘ K1 → + ∀b,f,K1. 𝐔❨f❩ → ⇩*[b,f] L1 ≘ K1 → ∃∃K2. G ⊢ K1 ⫃![h,a] K2 & ⇩*[b,f] L2 ≘ K2. #h #a #G #L1 #L2 #H elim H -L1 -L2 [ /2 width=3 by ex2_intro/ @@ -44,11 +44,11 @@ lemma lsubv_drops_conf_isuni (h) (a) (G): ] qed-. -(* Note: the premise 𝐔❪f❫ cannot be removed *) +(* Note: the premise 𝐔❨f❩ cannot be removed *) (* Basic_2A1: includes: lsubsv_drop_O1_trans *) lemma lsubv_drops_trans_isuni (h) (a) (G): ∀L1,L2. G ⊢ L1 ⫃![h,a] L2 → - ∀b,f,K2. 𝐔❪f❫ → ⇩*[b,f] L2 ≘ K2 → + ∀b,f,K2. 𝐔❨f❩ → ⇩*[b,f] L2 ≘ K2 → ∃∃K1. G ⊢ K1 ⫃![h,a] K2 & ⇩*[b,f] L1 ≘ K1. #h #a #G #L1 #L2 #H elim H -L1 -L2 [ /2 width=3 by ex2_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta.ma index 690e7d668..d1c5e0570 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta.ma @@ -18,7 +18,7 @@ include "basic_2/dynamic/cnv.ma". (* NATIVE TYPE ASSIGNMENT FOR TERMS *****************************************) definition nta (h) (a): relation4 genv lenv term term ≝ - λG,L,T,U. ❪G,L❫ ⊢ ⓝU.T ![h,a]. + λG,L,T,U. ❨G,L❩ ⊢ ⓝU.T ![h,a]. interpretation "native type assignment (term)" 'Colon h a G L T U = (nta h a G L T U). @@ -27,14 +27,14 @@ interpretation "native type assignment (term)" (* Basic_1: was by definition: ty3_sort *) (* Basic_2A1: was by definition: nta_sort ntaa_sort *) -lemma nta_sort (h) (a) (G) (L): ∀s. ❪G,L❫ ⊢ ⋆s :[h,a] ⋆(⫯[h]s). +lemma nta_sort (h) (a) (G) (L): ∀s. ❨G,L❩ ⊢ ⋆s :[h,a] ⋆(⫯[h]s). #h #a #G #L #s /2 width=3 by cnv_sort, cnv_cast, cpms_sort/ qed. lemma nta_bind_cnv (h) (a) (G) (K): - ∀V. ❪G,K❫ ⊢ V ![h,a] → - ∀I,T,U. ❪G,K.ⓑ[I]V❫ ⊢ T :[h,a] U → - ∀p. ❪G,K❫ ⊢ ⓑ[p,I]V.T :[h,a] ⓑ[p,I]V.U. + ∀V. ❨G,K❩ ⊢ V ![h,a] → + ∀I,T,U. ❨G,K.ⓑ[I]V❩ ⊢ T :[h,a] U → + ∀p. ❨G,K❩ ⊢ ⓑ[p,I]V.T :[h,a] ⓑ[p,I]V.U. #h #a #G #K #V #HV #I #T #U #H #p elim (cnv_inv_cast … H) -H #X #HU #HT #HUX #HTX /3 width=5 by cnv_bind, cnv_cast, cpms_bind_dx/ @@ -42,7 +42,7 @@ qed. (* Basic_2A1: was by definition: nta_cast *) lemma nta_cast (h) (a) (G) (L): - ∀T,U. ❪G,L❫ ⊢ T :[h,a] U → ❪G,L❫ ⊢ ⓝU.T :[h,a] U. + ∀T,U. ❨G,L❩ ⊢ T :[h,a] U → ❨G,L❩ ⊢ ⓝU.T :[h,a] U. #h #a #G #L #T #U #H elim (cnv_inv_cast … H) #X #HU #HT #HUX #HTX /3 width=3 by cnv_cast, cpms_eps/ @@ -50,8 +50,8 @@ qed. (* Basic_1: was by definition: ty3_cast *) lemma nta_cast_old (h) (a) (G) (L): - ∀T0,T1. ❪G,L❫ ⊢ T0 :[h,a] T1 → - ∀T2. ❪G,L❫ ⊢ T1 :[h,a] T2 → ❪G,L❫ ⊢ ⓝT1.T0 :[h,a] ⓝT2.T1. + ∀T0,T1. ❨G,L❩ ⊢ T0 :[h,a] T1 → + ∀T2. ❨G,L❩ ⊢ T1 :[h,a] T2 → ❨G,L❩ ⊢ ⓝT1.T0 :[h,a] ⓝT2.T1. #h #a #G #L #T0 #T1 #H1 #T2 #H2 elim (cnv_inv_cast … H1) #X1 #_ #_ #HTX1 #HTX01 elim (cnv_inv_cast … H2) #X2 #_ #_ #HTX2 #HTX12 @@ -61,7 +61,7 @@ qed. (* Basic inversion lemmas ***************************************************) lemma nta_inv_gref_sn (h) (a) (G) (L): - ∀X2,l. ❪G,L❫ ⊢ §l :[h,a] X2 → ⊥. + ∀X2,l. ❨G,L❩ ⊢ §l :[h,a] X2 → ⊥. #h #a #G #L #X2 #l #H elim (cnv_inv_cast … H) -H #X #_ #H #_ #_ elim (cnv_inv_gref … H) @@ -70,14 +70,14 @@ qed-. (* Basic_forward lemmas *****************************************************) lemma nta_fwd_cnv_sn (h) (a) (G) (L): - ∀T,U. ❪G,L❫ ⊢ T :[h,a] U → ❪G,L❫ ⊢ T ![h,a]. + ∀T,U. ❨G,L❩ ⊢ T :[h,a] U → ❨G,L❩ ⊢ T ![h,a]. #h #a #G #L #T #U #H elim (cnv_inv_cast … H) -H #X #_ #HT #_ #_ // qed-. (* Note: this is nta_fwd_correct_cnv *) lemma nta_fwd_cnv_dx (h) (a) (G) (L): - ∀T,U. ❪G,L❫ ⊢ T :[h,a] U → ❪G,L❫ ⊢ U ![h,a]. + ∀T,U. ❨G,L❩ ⊢ T :[h,a] U → ❨G,L❩ ⊢ U ![h,a]. #h #a #G #L #T #U #H elim (cnv_inv_cast … H) -H #X #HU #_ #_ #_ // qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_aaa.ma index d2e11b9d3..6e6a285a0 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_aaa.ma @@ -21,7 +21,7 @@ include "basic_2/dynamic/nta.ma". (* Note: this means that no type is a universe *) lemma nta_fwd_aaa (h) (a) (G) (L): - ∀T,U. ❪G,L❫ ⊢ T :[h,a] U → ∃∃A. ❪G,L❫ ⊢ T ⁝ A & ❪G,L❫ ⊢ U ⁝ A. + ∀T,U. ❨G,L❩ ⊢ T :[h,a] U → ∃∃A. ❨G,L❩ ⊢ T ⁝ A & ❨G,L❩ ⊢ U ⁝ A. #h #a #G #L #T #U #H elim (cnv_fwd_aaa … H) -H #A #H elim (aaa_inv_cast … H) -H #HU #HT @@ -32,7 +32,7 @@ qed-. (* Basic_1: uses: ty3_predicative *) lemma nta_abst_predicative (h) (a) (p) (G) (L): - ∀W,T. ❪G,L❫ ⊢ ⓛ[p]W.T :[h,a] W → ⊥. + ∀W,T. ❨G,L❩ ⊢ ⓛ[p]W.T :[h,a] W → ⊥. #h #a #p #G #L #W #T #H elim (nta_fwd_aaa … H) -a -h #X #H #H1W elim (aaa_inv_abst … H) -p #B #A #H2W #_ #H destruct -T @@ -42,8 +42,8 @@ qed-. (* Basic_1: uses: ty3_repellent *) theorem nta_abst_repellent (h) (a) (p) (G) (K): - ∀W,T,U1. ❪G,K❫ ⊢ ⓛ[p]W.T :[h,a] U1 → - ∀U2. ❪G,K.ⓛW❫ ⊢ T :[h,a] U2 → ⇧[1] U1 ≘ U2 → ⊥. + ∀W,T,U1. ❨G,K❩ ⊢ ⓛ[p]W.T :[h,a] U1 → + ∀U2. ❨G,K.ⓛW❩ ⊢ T :[h,a] U2 → ⇧[1] U1 ≘ U2 → ⊥. #h #a #p #G #K #W #T #U1 #H1 #U2 #H2 #HU12 elim (nta_fwd_aaa … H2) -H2 #A2 #H2T #H2U2 elim (nta_fwd_aaa … H1) -H1 #X1 #H1 #HU1 diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_cpcs.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_cpcs.ma index c032c5dd7..60c8fa46c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_cpcs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_cpcs.ma @@ -20,8 +20,8 @@ include "basic_2/dynamic/nta.ma". (* Properties with r-equivalence for terms **********************************) lemma nta_conv_cnv (h) (a) (G) (L) (T): - ∀U1. ❪G,L❫ ⊢ T :[h,a] U1 → - ∀U2. ❪G,L❫ ⊢ U1 ⬌*[h] U2 → ❪G,L❫ ⊢ U2 ![h,a] → ❪G,L❫ ⊢ T :[h,a] U2. + ∀U1. ❨G,L❩ ⊢ T :[h,a] U1 → + ∀U2. ❨G,L❩ ⊢ U1 ⬌*[h] U2 → ❨G,L❩ ⊢ U2 ![h,a] → ❨G,L❩ ⊢ T :[h,a] U2. #h #a #G #L #T #U1 #H1 #U2 #HU12 #HU2 elim (cnv_inv_cast … H1) -H1 #X1 #HU1 #HT #HUX1 #HTX1 lapply (cpcs_cprs_conf … HUX1 … HU12) -U1 #H @@ -32,9 +32,9 @@ qed-. (* Basic_1: was by definition: ty3_conv *) (* Basic_2A1: was by definition: nta_conv ntaa_conv *) lemma nta_conv (h) (a) (G) (L) (T): - ∀U1. ❪G,L❫ ⊢ T :[h,a] U1 → - ∀U2. ❪G,L❫ ⊢ U1 ⬌*[h] U2 → - ∀W2. ❪G,L❫ ⊢ U2 :[h,a] W2 → ❪G,L❫ ⊢ T :[h,a] U2. + ∀U1. ❨G,L❩ ⊢ T :[h,a] U1 → + ∀U2. ❨G,L❩ ⊢ U1 ⬌*[h] U2 → + ∀W2. ❨G,L❩ ⊢ U2 :[h,a] W2 → ❨G,L❩ ⊢ T :[h,a] U2. #h #a #G #L #T #U1 #H1 #U2 #HU12 #W2 #H2 /3 width=3 by nta_conv_cnv, nta_fwd_cnv_sn/ qed-. @@ -44,8 +44,8 @@ qed-. (* Basic_1: was: ty3_gen_sort *) (* Basic_2A1: was: nta_inv_sort1 *) lemma nta_inv_sort_sn (h) (a) (G) (L) (X2): - ∀s. ❪G,L❫ ⊢ ⋆s :[h,a] X2 → - ∧∧ ❪G,L❫ ⊢ ⋆(⫯[h]s) ⬌*[h] X2 & ❪G,L❫ ⊢ X2 ![h,a]. + ∀s. ❨G,L❩ ⊢ ⋆s :[h,a] X2 → + ∧∧ ❨G,L❩ ⊢ ⋆(⫯[h]s) ⬌*[h] X2 & ❨G,L❩ ⊢ X2 ![h,a]. #h #a #G #L #X2 #s #H elim (cnv_inv_cast … H) -H #X1 #HX2 #_ #HX21 #H lapply (cpms_inv_sort1 … H) -H #H destruct @@ -53,8 +53,8 @@ lapply (cpms_inv_sort1 … H) -H #H destruct qed-. lemma nta_inv_ldec_sn_cnv (h) (a) (G) (K) (V): - ∀X2. ❪G,K.ⓛV❫ ⊢ #0 :[h,a] X2 → - ∃∃U. ❪G,K❫ ⊢ V ![h,a] & ⇧[1] V ≘ U & ❪G,K.ⓛV❫ ⊢ U ⬌*[h] X2 & ❪G,K.ⓛV❫ ⊢ X2 ![h,a]. + ∀X2. ❨G,K.ⓛV❩ ⊢ #0 :[h,a] X2 → + ∃∃U. ❨G,K❩ ⊢ V ![h,a] & ⇧[1] V ≘ U & ❨G,K.ⓛV❩ ⊢ U ⬌*[h] X2 & ❨G,K.ⓛV❩ ⊢ X2 ![h,a]. #h #a #G #Y #X #X2 #H elim (cnv_inv_cast … H) -H #X1 #HX2 #H1 #HX21 #H2 elim (cnv_inv_zero … H1) -H1 #Z #K #V #HV #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_cpms.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_cpms.ma index 3e125f3f8..90ec11116 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_cpms.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_cpms.ma @@ -23,8 +23,8 @@ include "basic_2/dynamic/nta.ma". (* Basic_2A1: uses by definition nta_appl ntaa_appl *) lemma nta_appl_abst (h) (a) (p) (G) (L): ∀n. ad a n → - ∀V,W. ❪G,L❫ ⊢ V :[h,a] W → - ∀T,U. ❪G,L.ⓛW❫ ⊢ T :[h,a] U → ❪G,L❫ ⊢ ⓐV.ⓛ[p]W.T :[h,a] ⓐV.ⓛ[p]W.U. + ∀V,W. ❨G,L❩ ⊢ V :[h,a] W → + ∀T,U. ❨G,L.ⓛW❩ ⊢ T :[h,a] U → ❨G,L❩ ⊢ ⓐV.ⓛ[p]W.T :[h,a] ⓐV.ⓛ[p]W.U. #h #a #p #G #L #n #Ha #V #W #H1 #T #U #H2 elim (cnv_inv_cast … H1) -H1 #X1 #HW #HV #HWX1 #HVX1 elim (cnv_inv_cast … H2) -H2 #X2 #HU #HT #HUX2 #HTX2 @@ -35,8 +35,8 @@ qed. (* Basic_2A1: was nta_appl_old *) lemma nta_appl (h) (a) (p) (G) (L): ∀n. 1 ≤ n → ad a n → - ∀V,W. ❪G,L❫ ⊢ V :[h,a] W → - ∀T,U. ❪G,L❫ ⊢ T :[h,a] ⓛ[p]W.U → ❪G,L❫ ⊢ ⓐV.T :[h,a] ⓐV.ⓛ[p]W.U. + ∀V,W. ❨G,L❩ ⊢ V :[h,a] W → + ∀T,U. ❨G,L❩ ⊢ T :[h,a] ⓛ[p]W.U → ❨G,L❩ ⊢ ⓐV.T :[h,a] ⓐV.ⓛ[p]W.U. #h #a #p #G #L #n #Hn #Ha #V #W #H1 #T #U #H2 elim (cnv_inv_cast … H1) -H1 #X1 #HW #HV #HWX1 #HVX1 elim (cnv_inv_cast … H2) -H2 #X2 #HU #HT #HUX2 #HTX2 @@ -53,8 +53,8 @@ qed. (* Inversion lemmas with advanced rt_computation for terms ******************) lemma nta_inv_abst_bi_cnv (h) (a) (p) (G) (K) (W): - ∀T,U. ❪G,K❫ ⊢ ⓛ[p]W.T :[h,a] ⓛ[p]W.U → - ∧∧ ❪G,K❫ ⊢ W ![h,a] & ❪G,K.ⓛW❫ ⊢ T :[h,a] U. + ∀T,U. ❨G,K❩ ⊢ ⓛ[p]W.T :[h,a] ⓛ[p]W.U → + ∧∧ ❨G,K❩ ⊢ W ![h,a] & ❨G,K.ⓛW❩ ⊢ T :[h,a] U. #h #a #p #G #K #W #T #U #H elim (cnv_inv_cast … H) -H #X #HWU #HWT #HUX #HTX elim (cnv_inv_bind … HWU) -HWU #HW #HU diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_drops.ma index 600b6eea2..86ad0e1e5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_drops.ma @@ -20,8 +20,8 @@ include "basic_2/dynamic/nta.ma". (* Advanced properties ******************************************************) lemma nta_ldef (h) (a) (G) (K): - ∀V,W. ❪G,K❫ ⊢ V :[h,a] W → - ∀U. ⇧[1] W ≘ U → ❪G,K.ⓓV❫ ⊢ #0 :[h,a] U. + ∀V,W. ❨G,K❩ ⊢ V :[h,a] W → + ∀U. ⇧[1] W ≘ U → ❨G,K.ⓓV❩ ⊢ #0 :[h,a] U. #h #a #G #K #V #W #H #U #HWU elim (cnv_inv_cast … H) -H #X #HW #HV #HWX #HVX lapply (cnv_lifts … HW (Ⓣ) … (K.ⓓV) … HWU) -HW @@ -32,16 +32,16 @@ elim (cpms_lifts_sn … HWX … (Ⓣ) … (K.ⓓV) … HWU) -W qed. lemma nta_ldec_cnv (h) (a) (G) (K): - ∀W. ❪G,K❫ ⊢ W ![h,a] → - ∀U. ⇧[1] W ≘ U → ❪G,K.ⓛW❫ ⊢ #0 :[h,a] U. + ∀W. ❨G,K❩ ⊢ W ![h,a] → + ∀U. ⇧[1] W ≘ U → ❨G,K.ⓛW❩ ⊢ #0 :[h,a] U. #h #a #G #K #W #HW #U #HWU lapply (cnv_lifts … HW (Ⓣ) … (K.ⓛW) … HWU) /3 width=5 by cnv_zero, cnv_cast, cpms_ell, drops_refl, drops_drop/ qed. lemma nta_lref (h) (a) (I) (G) (K): - ∀T,i. ❪G,K❫ ⊢ #i :[h,a] T → - ∀U. ⇧[1] T ≘ U → ❪G,K.ⓘ[I]❫ ⊢ #(↑i) :[h,a] U. + ∀T,i. ❨G,K❩ ⊢ #i :[h,a] T → + ∀U. ⇧[1] T ≘ U → ❨G,K.ⓘ[I]❩ ⊢ #(↑i) :[h,a] U. #h #a #I #G #K #T #i #H #U #HTU elim (cnv_inv_cast … H) -H #X #HT #Hi #HTX #H2 lapply (cnv_lifts … HT (Ⓣ) … (K.ⓘ[I]) … HTU) -HT @@ -75,16 +75,16 @@ lemma nta_lifts_bi (h) (a) (G): d_liftable2_bi … lifts (nta a h G). (* Basic_1: was by definition: ty3_abbr *) (* Basic_2A1: was by definition: nta_ldef ntaa_ldef *) lemma nta_ldef_drops (h) (a) (G) (K) (L) (i): - ∀V,W. ❪G,K❫ ⊢ V :[h,a] W → - ∀U. ⇧[↑i] W ≘ U → ⇩[i] L ≘ K.ⓓV → ❪G,L❫ ⊢ #i :[h,a] U. + ∀V,W. ❨G,K❩ ⊢ V :[h,a] W → + ∀U. ⇧[↑i] W ≘ U → ⇩[i] L ≘ K.ⓓV → ❨G,L❩ ⊢ #i :[h,a] U. #h #a #G #K #L #i #V #W #HVW #U #HWU #HLK elim (lifts_split_trans … HWU (𝐔❨1❩) (𝐔❨i❩)) [| // ] #X #HWX #HXU /3 width=9 by nta_lifts_bi, nta_ldef/ qed. lemma nta_ldec_drops_cnv (h) (a) (G) (K) (L) (i): - ∀W. ❪G,K❫ ⊢ W ![h,a] → - ∀U. ⇧[↑i] W ≘ U → ⇩[i] L ≘ K.ⓛW → ❪G,L❫ ⊢ #i :[h,a] U. + ∀W. ❨G,K❩ ⊢ W ![h,a] → + ∀U. ⇧[↑i] W ≘ U → ⇩[i] L ≘ K.ⓛW → ❨G,L❩ ⊢ #i :[h,a] U. #h #a #G #K #L #i #W #HW #U #HWU #HLK elim (lifts_split_trans … HWU (𝐔❨1❩) (𝐔❨i❩)) [| // ] #X #HWX #HXU /3 width=9 by nta_lifts_bi, nta_ldec_cnv/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_eval.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_eval.ma index 1aafc9815..41e4a0bb2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_eval.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_eval.ma @@ -20,12 +20,12 @@ include "basic_2/dynamic/nta_preserve.ma". (* Properties with evaluations for rt-transition on terms *******************) lemma nta_typecheck_dec (h) (a) (G) (L): ac_props a → - ∀T,U. Decidable … (❪G,L❫ ⊢ T :[h,a] U). + ∀T,U. Decidable … (❨G,L❩ ⊢ T :[h,a] U). /2 width=1 by cnv_dec/ qed-. (* Basic_1: uses: ty3_inference *) lemma nta_inference_dec (h) (a) (G) (L) (T): ac_props a → - Decidable (∃U. ❪G,L❫ ⊢ T :[h,a] U). + Decidable (∃U. ❨G,L❩ ⊢ T :[h,a] U). #h #a #G #L #T #Ha elim (cnv_dec h … G L T Ha) -Ha #HT [ /3 width=1 by cnv_nta_sn, or_introl/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_fsb.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_fsb.ma index de8554b48..14a4336e9 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_fsb.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_fsb.ma @@ -24,8 +24,8 @@ include "basic_2/dynamic/nta.ma". (* Basic_1: uses: ty3_sn3 *) (* Basic_2A1: uses: nta_fwd_csn *) theorem nta_fwd_fsb (h) (a) (G) (L): - ∀T,U. ❪G,L❫ ⊢ T :[h,a] U → - ∧∧ ≥𝐒 ❪G,L,T❫ & ≥𝐒 ❪G,L,U❫. + ∀T,U. ❨G,L❩ ⊢ T :[h,a] U → + ∧∧ ≥𝐒 ❨G,L,T❩ & ≥𝐒 ❨G,L,U❩. #h #a #G #L #T #U #H elim (cnv_inv_cast … H) #X #HU #HT #_ #_ -X /3 width=3 by cnv_fwd_fsb, conj/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_ind.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_ind.ma index 29d338f3f..da580178d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_ind.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_ind.ma @@ -24,29 +24,29 @@ include "basic_2/dynamic/nta_preserve.ma". lemma nta_ind_rest_cnv (h) (Q:relation4 …): (∀G,L,s. Q G L (⋆s) (⋆(⫯[h]s))) → (∀G,K,V,W,U. - ❪G,K❫ ⊢ V :[h,𝟐] W → ⇧[1] W ≘ U → + ❨G,K❩ ⊢ V :[h,𝟐] W → ⇧[1] W ≘ U → Q G K V W → Q G (K.ⓓV) (#0) U ) → - (∀G,K,W,U. ❪G,K❫ ⊢ W ![h,𝟐] → ⇧[1] W ≘ U → Q G (K.ⓛW) (#0) U) → + (∀G,K,W,U. ❨G,K❩ ⊢ W ![h,𝟐] → ⇧[1] W ≘ U → Q G (K.ⓛW) (#0) U) → (∀I,G,K,W,U,i. - ❪G,K❫ ⊢ #i :[h,𝟐] W → ⇧[1] W ≘ U → + ❨G,K❩ ⊢ #i :[h,𝟐] W → ⇧[1] W ≘ U → Q G K (#i) W → Q G (K.ⓘ[I]) (#↑i) U ) → (∀p,I,G,K,V,T,U. - ❪G,K❫ ⊢ V ![h,𝟐] → ❪G,K.ⓑ[I]V❫ ⊢ T :[h,𝟐] U → + ❨G,K❩ ⊢ V ![h,𝟐] → ❨G,K.ⓑ[I]V❩ ⊢ T :[h,𝟐] U → Q G (K.ⓑ[I]V) T U → Q G K (ⓑ[p,I]V.T) (ⓑ[p,I]V.U) ) → (∀p,G,L,V,W,T,U. - ❪G,L❫ ⊢ V :[h,𝟐] W → ❪G,L❫ ⊢ T :[h,𝟐] ⓛ[p]W.U → + ❨G,L❩ ⊢ V :[h,𝟐] W → ❨G,L❩ ⊢ T :[h,𝟐] ⓛ[p]W.U → Q G L V W → Q G L T (ⓛ[p]W.U) → Q G L (ⓐV.T) (ⓐV.ⓛ[p]W.U) ) → - (∀G,L,T,U. ❪G,L❫ ⊢ T :[h,𝟐] U → Q G L T U → Q G L (ⓝU.T) U + (∀G,L,T,U. ❨G,L❩ ⊢ T :[h,𝟐] U → Q G L T U → Q G L (ⓝU.T) U ) → (∀G,L,T,U1,U2. - ❪G,L❫ ⊢ T :[h,𝟐] U1 → ❪G,L❫ ⊢ U1 ⬌*[h] U2 → ❪G,L❫ ⊢ U2 ![h,𝟐] → + ❨G,L❩ ⊢ T :[h,𝟐] U1 → ❨G,L❩ ⊢ U1 ⬌*[h] U2 → ❨G,L❩ ⊢ U2 ![h,𝟐] → Q G L T U1 → Q G L T U2 ) → - ∀G,L,T,U. ❪G,L❫ ⊢ T :[h,𝟐] U → Q G L T U. + ∀G,L,T,U. ❨G,L❩ ⊢ T :[h,𝟐] U → Q G L T U. #h #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #G #L #T @(fqup_wf_ind_eq (Ⓣ) … G L T) -G -L -T #G0 #L0 #T0 #IH #G #L * * [|||| * ] [ #s #HG #HL #HT #X #H destruct -IH @@ -81,33 +81,33 @@ qed-. lemma nta_ind_ext_cnv_mixed (h) (Q:relation4 …): (∀G,L,s. Q G L (⋆s) (⋆(⫯[h]s))) → (∀G,K,V,W,U. - ❪G,K❫ ⊢ V :[h,𝛚] W → ⇧[1] W ≘ U → + ❨G,K❩ ⊢ V :[h,𝛚] W → ⇧[1] W ≘ U → Q G K V W → Q G (K.ⓓV) (#0) U ) → - (∀G,K,W,U. ❪G,K❫ ⊢ W ![h,𝛚] → ⇧[1] W ≘ U → Q G (K.ⓛW) (#0) U) → + (∀G,K,W,U. ❨G,K❩ ⊢ W ![h,𝛚] → ⇧[1] W ≘ U → Q G (K.ⓛW) (#0) U) → (∀I,G,K,W,U,i. - ❪G,K❫ ⊢ #i :[h,𝛚] W → ⇧[1] W ≘ U → + ❨G,K❩ ⊢ #i :[h,𝛚] W → ⇧[1] W ≘ U → Q G K (#i) W → Q G (K.ⓘ[I]) (#↑i) U ) → (∀p,I,G,K,V,T,U. - ❪G,K❫ ⊢ V ![h,𝛚] → ❪G,K.ⓑ[I]V❫ ⊢ T :[h,𝛚] U → + ❨G,K❩ ⊢ V ![h,𝛚] → ❨G,K.ⓑ[I]V❩ ⊢ T :[h,𝛚] U → Q G (K.ⓑ[I]V) T U → Q G K (ⓑ[p,I]V.T) (ⓑ[p,I]V.U) ) → (∀p,G,L,V,W,T,U. - ❪G,L❫ ⊢ V :[h,𝛚] W → ❪G,L❫ ⊢ T :[h,𝛚] ⓛ[p]W.U → + ❨G,L❩ ⊢ V :[h,𝛚] W → ❨G,L❩ ⊢ T :[h,𝛚] ⓛ[p]W.U → Q G L V W → Q G L T (ⓛ[p]W.U) → Q G L (ⓐV.T) (ⓐV.ⓛ[p]W.U) ) → (∀G,L,V,T,U. - ❪G,L❫ ⊢ T :[h,𝛚] U → ❪G,L❫ ⊢ ⓐV.U ![h,𝛚] → + ❨G,L❩ ⊢ T :[h,𝛚] U → ❨G,L❩ ⊢ ⓐV.U ![h,𝛚] → Q G L T U → Q G L (ⓐV.T) (ⓐV.U) ) → - (∀G,L,T,U. ❪G,L❫ ⊢ T :[h,𝛚] U → Q G L T U → Q G L (ⓝU.T) U + (∀G,L,T,U. ❨G,L❩ ⊢ T :[h,𝛚] U → Q G L T U → Q G L (ⓝU.T) U ) → (∀G,L,T,U1,U2. - ❪G,L❫ ⊢ T :[h,𝛚] U1 → ❪G,L❫ ⊢ U1 ⬌*[h] U2 → ❪G,L❫ ⊢ U2 ![h,𝛚] → + ❨G,L❩ ⊢ T :[h,𝛚] U1 → ❨G,L❩ ⊢ U1 ⬌*[h] U2 → ❨G,L❩ ⊢ U2 ![h,𝛚] → Q G L T U1 → Q G L T U2 ) → - ∀G,L,T,U. ❪G,L❫ ⊢ T :[h,𝛚] U → Q G L T U. + ∀G,L,T,U. ❨G,L❩ ⊢ T :[h,𝛚] U → Q G L T U. #h #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #G #L #T @(fqup_wf_ind_eq (Ⓣ) … G L T) -G -L -T #G0 #L0 #T0 #IH #G #L * * [|||| * ] [ #s #HG #HL #HT #X #H destruct -IH @@ -146,33 +146,33 @@ qed-. lemma nta_ind_ext_cnv (h) (Q:relation4 …): (∀G,L,s. Q G L (⋆s) (⋆(⫯[h]s))) → (∀G,K,V,W,U. - ❪G,K❫ ⊢ V :[h,𝛚] W → ⇧[1] W ≘ U → + ❨G,K❩ ⊢ V :[h,𝛚] W → ⇧[1] W ≘ U → Q G K V W → Q G (K.ⓓV) (#0) U ) → - (∀G,K,W,U. ❪G,K❫ ⊢ W ![h,𝛚] → ⇧[1] W ≘ U → Q G (K.ⓛW) (#0) U) → + (∀G,K,W,U. ❨G,K❩ ⊢ W ![h,𝛚] → ⇧[1] W ≘ U → Q G (K.ⓛW) (#0) U) → (∀I,G,K,W,U,i. - ❪G,K❫ ⊢ #i :[h,𝛚] W → ⇧[1] W ≘ U → + ❨G,K❩ ⊢ #i :[h,𝛚] W → ⇧[1] W ≘ U → Q G K (#i) W → Q G (K.ⓘ[I]) (#↑i) U ) → (∀p,I,G,K,V,T,U. - ❪G,K❫ ⊢ V ![h,𝛚] → ❪G,K.ⓑ[I]V❫ ⊢ T :[h,𝛚] U → + ❨G,K❩ ⊢ V ![h,𝛚] → ❨G,K.ⓑ[I]V❩ ⊢ T :[h,𝛚] U → Q G (K.ⓑ[I]V) T U → Q G K (ⓑ[p,I]V.T) (ⓑ[p,I]V.U) ) → (∀p,G,K,V,W,T,U. - ❪G,K❫ ⊢ V :[h,𝛚] W → ❪G,K.ⓛW❫ ⊢ T :[h,𝛚] U → + ❨G,K❩ ⊢ V :[h,𝛚] W → ❨G,K.ⓛW❩ ⊢ T :[h,𝛚] U → Q G K V W → Q G (K.ⓛW) T U → Q G K (ⓐV.ⓛ[p]W.T) (ⓐV.ⓛ[p]W.U) ) → (∀G,L,V,T,U. - ❪G,L❫ ⊢ T :[h,𝛚] U → ❪G,L❫ ⊢ ⓐV.U ![h,𝛚] → + ❨G,L❩ ⊢ T :[h,𝛚] U → ❨G,L❩ ⊢ ⓐV.U ![h,𝛚] → Q G L T U → Q G L (ⓐV.T) (ⓐV.U) ) → - (∀G,L,T,U. ❪G,L❫ ⊢ T :[h,𝛚] U → Q G L T U → Q G L (ⓝU.T) U + (∀G,L,T,U. ❨G,L❩ ⊢ T :[h,𝛚] U → Q G L T U → Q G L (ⓝU.T) U ) → (∀G,L,T,U1,U2. - ❪G,L❫ ⊢ T :[h,𝛚] U1 → ❪G,L❫ ⊢ U1 ⬌*[h] U2 → ❪G,L❫ ⊢ U2 ![h,𝛚] → + ❨G,L❩ ⊢ T :[h,𝛚] U1 → ❨G,L❩ ⊢ U1 ⬌*[h] U2 → ❨G,L❩ ⊢ U2 ![h,𝛚] → Q G L T U1 → Q G L T U2 ) → - ∀G,L,T,U. ❪G,L❫ ⊢ T :[h,𝛚] U → Q G L T U. + ∀G,L,T,U. ❨G,L❩ ⊢ T :[h,𝛚] U → Q G L T U. #h #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #G #L #T #U #H @(nta_ind_ext_cnv_mixed … IH1 IH2 IH3 IH4 IH5 … IH7 IH8 IH9 … H) -G -L -T -U -IH1 -IH2 -IH3 -IH4 -IH5 -IH6 -IH8 -IH9 #p #G #L #V #W #T #U #HVW #HTU #_ #IHTU diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_preserve.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_preserve.ma index bb5f3df89..c6c0734e2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_preserve.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_preserve.ma @@ -22,11 +22,11 @@ include "basic_2/dynamic/nta.ma". (* Properties based on preservation *****************************************) lemma cnv_cpms_nta (h) (a) (G) (L): - ∀T. ❪G,L❫ ⊢ T ![h,a] → ∀U.❪G,L❫ ⊢ T ➡*[h,1] U → ❪G,L❫ ⊢ T :[h,a] U. + ∀T. ❨G,L❩ ⊢ T ![h,a] → ∀U.❨G,L❩ ⊢ T ➡*[h,1] U → ❨G,L❩ ⊢ T :[h,a] U. /3 width=4 by cnv_cast, cnv_cpms_trans/ qed. lemma cnv_nta_sn (h) (a) (G) (L): - ∀T. ❪G,L❫ ⊢ T ![h,a] → ∃U. ❪G,L❫ ⊢ T :[h,a] U. + ∀T. ❨G,L❩ ⊢ T ![h,a] → ∃U. ❨G,L❩ ⊢ T :[h,a] U. #h #a #G #L #T #HT elim (cnv_fwd_cpm_SO … HT) #U #HTU /4 width=2 by cnv_cpms_nta, cpm_cpms, ex_intro/ @@ -34,18 +34,18 @@ qed-. (* Basic_1: was: ty3_typecheck *) lemma nta_typecheck (h) (a) (G) (L): - ∀T,U. ❪G,L❫ ⊢ T :[h,a] U → ∃T0. ❪G,L❫ ⊢ ⓝU.T :[h,a] T0. + ∀T,U. ❨G,L❩ ⊢ T :[h,a] U → ∃T0. ❨G,L❩ ⊢ ⓝU.T :[h,a] T0. /3 width=1 by cnv_cast, cnv_nta_sn/ qed-. (* Basic_1: was: ty3_correct *) (* Basic_2A1: was: ntaa_fwd_correct *) lemma nta_fwd_correct (h) (a) (G) (L): - ∀T,U. ❪G,L❫ ⊢ T :[h,a] U → ∃T0. ❪G,L❫ ⊢ U :[h,a] T0. + ∀T,U. ❨G,L❩ ⊢ T :[h,a] U → ∃T0. ❨G,L❩ ⊢ U :[h,a] T0. /3 width=2 by nta_fwd_cnv_dx, cnv_nta_sn/ qed-. lemma nta_pure_cnv (h) (G) (L): - ∀T,U. ❪G,L❫ ⊢ T :[h,𝛚] U → - ∀V. ❪G,L❫ ⊢ ⓐV.U ![h,𝛚] → ❪G,L❫ ⊢ ⓐV.T :[h,𝛚] ⓐV.U. + ∀T,U. ❨G,L❩ ⊢ T :[h,𝛚] U → + ∀V. ❨G,L❩ ⊢ ⓐV.U ![h,𝛚] → ❨G,L❩ ⊢ ⓐV.T :[h,𝛚] ⓐV.U. #h #G #L #T #U #H1 #V #H2 elim (cnv_inv_cast … H1) -H1 #X0 #HU #HT #HUX0 #HTX0 elim (cnv_inv_appl … H2) #n #p #X1 #X2 #_ #HV #_ #HVX1 #HUX2 @@ -58,16 +58,16 @@ qed. (* Basic_1: uses: ty3_sred_wcpr0_pr0 *) lemma nta_cpr_conf_lpr (h) (a) (G): - ∀L1,T1,U. ❪G,L1❫ ⊢ T1 :[h,a] U → ∀T2. ❪G,L1❫ ⊢ T1 ➡[h,0] T2 → - ∀L2. ❪G,L1❫ ⊢ ➡[h,0] L2 → ❪G,L2❫ ⊢ T2 :[h,a] U. + ∀L1,T1,U. ❨G,L1❩ ⊢ T1 :[h,a] U → ∀T2. ❨G,L1❩ ⊢ T1 ➡[h,0] T2 → + ∀L2. ❨G,L1❩ ⊢ ➡[h,0] L2 → ❨G,L2❩ ⊢ T2 :[h,a] U. #h #a #G #L1 #T1 #U #H #T2 #HT12 #L2 #HL12 /3 width=6 by cnv_cpm_trans_lpr, cpm_cast/ qed-. (* Basic_1: uses: ty3_sred_pr2 ty3_sred_pr0 *) lemma nta_cpr_conf (h) (a) (G) (L): - ∀T1,U. ❪G,L❫ ⊢ T1 :[h,a] U → - ∀T2. ❪G,L❫ ⊢ T1 ➡[h,0] T2 → ❪G,L❫ ⊢ T2 :[h,a] U. + ∀T1,U. ❨G,L❩ ⊢ T1 :[h,a] U → + ∀T2. ❨G,L❩ ⊢ T1 ➡[h,0] T2 → ❨G,L❩ ⊢ T2 :[h,a] U. #h #a #G #L #T1 #U #H #T2 #HT12 /3 width=6 by cnv_cpm_trans, cpm_cast/ qed-. @@ -75,24 +75,24 @@ qed-. (* Note: this is the preservation property *) (* Basic_1: uses: ty3_sred_pr3 ty3_sred_pr1 *) lemma nta_cprs_conf (h) (a) (G) (L): - ∀T1,U. ❪G,L❫ ⊢ T1 :[h,a] U → - ∀T2. ❪G,L❫ ⊢ T1 ➡*[h,0] T2 → ❪G,L❫ ⊢ T2 :[h,a] U. + ∀T1,U. ❨G,L❩ ⊢ T1 :[h,a] U → + ∀T2. ❨G,L❩ ⊢ T1 ➡*[h,0] T2 → ❨G,L❩ ⊢ T2 :[h,a] U. #h #a #G #L #T1 #U #H #T2 #HT12 /3 width=6 by cnv_cpms_trans, cpms_cast/ qed-. (* Basic_1: uses: ty3_cred_pr2 *) lemma nta_lpr_conf (h) (a) (G): - ∀L1,T,U. ❪G,L1❫ ⊢ T :[h,a] U → - ∀L2. ❪G,L1❫ ⊢ ➡[h,0] L2 → ❪G,L2❫ ⊢ T :[h,a] U. + ∀L1,T,U. ❨G,L1❩ ⊢ T :[h,a] U → + ∀L2. ❨G,L1❩ ⊢ ➡[h,0] L2 → ❨G,L2❩ ⊢ T :[h,a] U. #h #a #G #L1 #T #U #HTU #L2 #HL12 /2 width=3 by cnv_lpr_trans/ qed-. (* Basic_1: uses: ty3_cred_pr3 *) lemma nta_lprs_conf (h) (a) (G): - ∀L1,T,U. ❪G,L1❫ ⊢ T :[h,a] U → - ∀L2. ❪G,L1❫ ⊢ ➡*[h,0] L2 → ❪G,L2❫ ⊢ T :[h,a] U. + ∀L1,T,U. ❨G,L1❩ ⊢ T :[h,a] U → + ∀L2. ❨G,L1❩ ⊢ ➡*[h,0] L2 → ❨G,L2❩ ⊢ T :[h,a] U. #h #a #G #L1 #T #U #HTU #L2 #HL12 /2 width=3 by cnv_lprs_trans/ qed-. @@ -100,8 +100,8 @@ qed-. (* Inversion lemmas based on preservation ***********************************) lemma nta_inv_ldef_sn (h) (a) (G) (K) (V): - ∀X2. ❪G,K.ⓓV❫ ⊢ #0 :[h,a] X2 → - ∃∃W,U. ❪G,K❫ ⊢ V :[h,a] W & ⇧[1] W ≘ U & ❪G,K.ⓓV❫ ⊢ U ⬌*[h] X2 & ❪G,K.ⓓV❫ ⊢ X2 ![h,a]. + ∀X2. ❨G,K.ⓓV❩ ⊢ #0 :[h,a] X2 → + ∃∃W,U. ❨G,K❩ ⊢ V :[h,a] W & ⇧[1] W ≘ U & ❨G,K.ⓓV❩ ⊢ U ⬌*[h] X2 & ❨G,K.ⓓV❩ ⊢ X2 ![h,a]. #h #a #G #Y #X #X2 #H elim (cnv_inv_cast … H) -H #X1 #HX2 #H1 #HX21 #H2 elim (cnv_inv_zero … H1) -H1 #Z #K #V #HV #H destruct @@ -113,8 +113,8 @@ elim (cpms_inv_delta_sn … H2) -H2 * qed-. lemma nta_inv_lref_sn (h) (a) (G) (L): - ∀X2,i. ❪G,L❫ ⊢ #↑i :[h,a] X2 → - ∃∃I,K,T2,U2. ❪G,K❫ ⊢ #i :[h,a] T2 & ⇧[1] T2 ≘ U2 & ❪G,K.ⓘ[I]❫ ⊢ U2 ⬌*[h] X2 & ❪G,K.ⓘ[I]❫ ⊢ X2 ![h,a] & L = K.ⓘ[I]. + ∀X2,i. ❨G,L❩ ⊢ #↑i :[h,a] X2 → + ∃∃I,K,T2,U2. ❨G,K❩ ⊢ #i :[h,a] T2 & ⇧[1] T2 ≘ U2 & ❨G,K.ⓘ[I]❩ ⊢ U2 ⬌*[h] X2 & ❨G,K.ⓘ[I]❩ ⊢ X2 ![h,a] & L = K.ⓘ[I]. #h #a #G #L #X2 #i #H elim (cnv_inv_cast … H) -H #X1 #HX2 #H1 #HX21 #H2 elim (cnv_inv_lref … H1) -H1 #I #K #Hi #H destruct @@ -126,9 +126,9 @@ elim (cpms_inv_lref_sn … H2) -H2 * qed-. lemma nta_inv_lref_sn_drops_cnv (h) (a) (G) (L): - ∀X2,i. ❪G,L❫ ⊢ #i :[h,a] X2 → - ∨∨ ∃∃K,V,W,U. ⇩[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V :[h,a] W & ⇧[↑i] W ≘ U & ❪G,L❫ ⊢ U ⬌*[h] X2 & ❪G,L❫ ⊢ X2 ![h,a] - | ∃∃K,W,U. ⇩[i] L ≘ K. ⓛW & ❪G,K❫ ⊢ W ![h,a] & ⇧[↑i] W ≘ U & ❪G,L❫ ⊢ U ⬌*[h] X2 & ❪G,L❫ ⊢ X2 ![h,a]. + ∀X2,i. ❨G,L❩ ⊢ #i :[h,a] X2 → + ∨∨ ∃∃K,V,W,U. ⇩[i] L ≘ K.ⓓV & ❨G,K❩ ⊢ V :[h,a] W & ⇧[↑i] W ≘ U & ❨G,L❩ ⊢ U ⬌*[h] X2 & ❨G,L❩ ⊢ X2 ![h,a] + | ∃∃K,W,U. ⇩[i] L ≘ K. ⓛW & ❨G,K❩ ⊢ W ![h,a] & ⇧[↑i] W ≘ U & ❨G,L❩ ⊢ U ⬌*[h] X2 & ❨G,L❩ ⊢ X2 ![h,a]. #h #a #G #L #X2 #i #H elim (cnv_inv_cast … H) -H #X1 #HX2 #H1 #HX21 #H2 elim (cnv_inv_lref_drops … H1) -H1 #I #K #V #HLK #HV @@ -147,8 +147,8 @@ elim (cpms_inv_lref1_drops … H2) -H2 * qed-. lemma nta_inv_bind_sn_cnv (h) (a) (p) (I) (G) (K) (X2): - ∀V,T. ❪G,K❫ ⊢ ⓑ[p,I]V.T :[h,a] X2 → - ∃∃U. ❪G,K❫ ⊢ V ![h,a] & ❪G,K.ⓑ[I]V❫ ⊢ T :[h,a] U & ❪G,K❫ ⊢ ⓑ[p,I]V.U ⬌*[h] X2 & ❪G,K❫ ⊢ X2 ![h,a]. + ∀V,T. ❨G,K❩ ⊢ ⓑ[p,I]V.T :[h,a] X2 → + ∃∃U. ❨G,K❩ ⊢ V ![h,a] & ❨G,K.ⓑ[I]V❩ ⊢ T :[h,a] U & ❨G,K❩ ⊢ ⓑ[p,I]V.U ⬌*[h] X2 & ❨G,K❩ ⊢ X2 ![h,a]. #h #a #p * #G #K #X2 #V #T #H elim (cnv_inv_cast … H) -H #X1 #HX2 #H1 #HX21 #H2 elim (cnv_inv_bind … H1) -H1 #HV #HT @@ -165,8 +165,8 @@ qed-. (* Basic_1: uses: ty3_gen_appl *) lemma nta_inv_appl_sn (h) (G) (L) (X2): - ∀V,T. ❪G,L❫ ⊢ ⓐV.T :[h,𝟐] X2 → - ∃∃p,W,U. ❪G,L❫ ⊢ V :[h,𝟐] W & ❪G,L❫ ⊢ T :[h,𝟐] ⓛ[p]W.U & ❪G,L❫ ⊢ ⓐV.ⓛ[p]W.U ⬌*[h] X2 & ❪G,L❫ ⊢ X2 ![h,𝟐]. + ∀V,T. ❨G,L❩ ⊢ ⓐV.T :[h,𝟐] X2 → + ∃∃p,W,U. ❨G,L❩ ⊢ V :[h,𝟐] W & ❨G,L❩ ⊢ T :[h,𝟐] ⓛ[p]W.U & ❨G,L❩ ⊢ ⓐV.ⓛ[p]W.U ⬌*[h] X2 & ❨G,L❩ ⊢ X2 ![h,𝟐]. #h #G #L #X2 #V #T #H elim (cnv_inv_cast … H) -H #X #HX2 #H1 #HX2 #H2 elim (cnv_inv_appl … H1) #n #p #W #U #H ❪ break term 46 G2, break term 46 L2, break term 46 T2 ❫ )" +notation "hvbox( ❨ term 46 G1, break term 46 L1, break term 46 T1 ❩ > ❨ break term 46 G2, break term 46 L2, break term 46 T2 ❩ )" non associative with precedence 45 for @{ 'PRedSubTyStarProper $G1 $L1 $T1 $G2 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystrong_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystrong_3.ma index c7b98755e..b89709338 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystrong_3.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystrong_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ≥𝐒❪ break term 46 G, break term 46 L, break term 46 T ❫ )" +notation "hvbox( ≥𝐒❨ break term 46 G, break term 46 L, break term 46 T ❩ )" non associative with precedence 45 for @{ 'PRedSubTyStrong $G $L $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_4.ma index bb7f36f88..7fdd603d3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_4.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_4.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ⬈ break term 46 T2 )" +notation "hvbox( ❨ term 46 G, break term 46 L ❩ ⊢ break term 46 T1 ⬈ break term 46 T2 )" non associative with precedence 45 for @{ 'PRedTy $G $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_7.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_7.ma index 37ae1e799..c6f8ac00c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_7.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_7.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ⬈[ break term 46 Rs, break term 46 Rk, break term 46 c ] break term 46 T2 )" +notation "hvbox( ❨ term 46 G, break term 46 L ❩ ⊢ break term 46 T1 ⬈[ break term 46 Rs, break term 46 Rk, break term 46 c ] break term 46 T2 )" non associative with precedence 45 for @{ 'PRedTy $Rs $Rk $c $G $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtynormal_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtynormal_3.ma index 1c87b36f2..7e13bbc5e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtynormal_3.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtynormal_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ ⬈𝐍 break term 46 T )" +notation "hvbox( ❨ term 46 G, break term 46 L ❩ ⊢ ⬈𝐍 break term 46 T )" non associative with precedence 45 for @{ 'PRedTyNormal $G $L $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_3.ma index ea2d22209..920b74c79 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_3.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ❪ term 46 G, break term 46 L1 ❫ ⊢ ⬈ break term 46 L2 )" +notation "hvbox( ❨ term 46 G, break term 46 L1 ❩ ⊢ ⬈ break term 46 L2 )" non associative with precedence 45 for @{ 'PRedTySn $G $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_4.ma index ad637ef51..0bfcf44b8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_4.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_4.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ❪ term 46 G, break term 46 L1 ❫ ⊢ ⬈[ break term 46 T ] break term 46 L2 )" +notation "hvbox( ❨ term 46 G, break term 46 L1 ❩ ⊢ ⬈[ break term 46 T ] break term 46 L2 )" non associative with precedence 45 for @{ 'PRedTySn $T $G $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstar_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstar_3.ma index c1f89d6b7..4647ebd52 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstar_3.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstar_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ❪ term 46 G, break term 46 L1 ❫ ⊢ ⬈* break term 46 L2 )" +notation "hvbox( ❨ term 46 G, break term 46 L1 ❩ ⊢ ⬈* break term 46 L2 )" non associative with precedence 45 for @{ 'PRedTySnStar $G $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystar_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystar_4.ma index fca7baa9f..529b0ebb9 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystar_4.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystar_4.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ⬈* break term 46 T2 )" +notation "hvbox( ❨ term 46 G, break term 46 L ❩ ⊢ break term 46 T1 ⬈* break term 46 T2 )" non associative with precedence 45 for @{ 'PRedTyStar $G $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystrong_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystrong_3.ma index a32fcc45a..71a29e755 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystrong_3.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystrong_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ ⬈*𝐒break term 46 T )" +notation "hvbox( ❨ term 46 G, break term 46 L ❩ ⊢ ⬈*𝐒break term 46 T )" non associative with precedence 45 for @{ 'PRedTyStrong $G $L $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pty_6.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pty_6.ma index 906402cd0..8f7e2a510 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pty_6.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pty_6.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ⬆[ break term 46 h, break term 46 n ] break term 46 T2 )" +notation "hvbox( ❨ term 46 G, break term 46 L ❩ ⊢ break term 46 T1 ⬆[ break term 46 h, break term 46 n ] break term 46 T2 )" non associative with precedence 45 for @{ 'PTy $h $n $G $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/ptystar_6.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/ptystar_6.ma index 36cd86a80..df78e8ef0 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/ptystar_6.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/ptystar_6.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ⬆*[ break term 46 h, break term 46 n ] break term 46 T2 )" +notation "hvbox( ❨ term 46 G, break term 46 L ❩ ⊢ break term 46 T1 ⬆*[ break term 46 h, break term 46 n ] break term 46 T2 )" non associative with precedence 45 for @{ 'PTyStar $h $n $G $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw.ma index 99bff3670..e86bee331 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw.ma @@ -19,7 +19,7 @@ include "basic_2/rt_computation/cpms.ma". (* NORMAL TERMS FOR T-UNUNBOUND WHD RT-TRANSITION ***************************) definition cnuw (h) (G) (L): predicate term ≝ - λT1. ∀n,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → T1 ≃ T2. + λT1. ∀n,T2. ❨G,L❩ ⊢ T1 ➡*[h,n] T2 → T1 ≃ T2. interpretation "normality for t-unbound weak head context-sensitive parallel rt-transition (term)" @@ -27,29 +27,29 @@ interpretation (* Basic properties *********************************************************) -lemma cnuw_sort (h) (G) (L): ∀s. ❪G,L❫ ⊢ ➡𝐍𝐖*[h] ⋆s. +lemma cnuw_sort (h) (G) (L): ∀s. ❨G,L❩ ⊢ ➡𝐍𝐖*[h] ⋆s. #h #G #L #s1 #n #X #H lapply (cpms_inv_sort1 … H) -H #H destruct // qed. -lemma cnuw_ctop (h) (G): ∀i. ❪G,⋆❫ ⊢ ➡𝐍𝐖*[h] #i. +lemma cnuw_ctop (h) (G): ∀i. ❨G,⋆❩ ⊢ ➡𝐍𝐖*[h] #i. #h #G #i #n #X #H elim (cpms_inv_lref1_ctop … H) -H #H #_ destruct // qed. -lemma cnuw_zero_unit (h) (G) (L): ∀I. ❪G,L.ⓤ[I]❫ ⊢ ➡𝐍𝐖*[h] #0. +lemma cnuw_zero_unit (h) (G) (L): ∀I. ❨G,L.ⓤ[I]❩ ⊢ ➡𝐍𝐖*[h] #0. #h #G #L #I #n #X #H elim (cpms_inv_zero1_unit … H) -H #H #_ destruct // qed. -lemma cnuw_gref (h) (G) (L): ∀l. ❪G,L❫ ⊢ ➡𝐍𝐖*[h] §l. +lemma cnuw_gref (h) (G) (L): ∀l. ❨G,L❩ ⊢ ➡𝐍𝐖*[h] §l. #h #G #L #l1 #n #X #H elim (cpms_inv_gref1 … H) -H #H #_ destruct // qed. (* Basic_inversion lemmas ***************************************************) -lemma cnuw_inv_zero_pair (h) (I) (G) (L): ∀V. ❪G,L.ⓑ[I]V❫ ⊢ ➡𝐍𝐖*[h] #0 → ⊥. +lemma cnuw_inv_zero_pair (h) (I) (G) (L): ∀V. ❨G,L.ⓑ[I]V❩ ⊢ ➡𝐍𝐖*[h] #0 → ⊥. #h * #G #L #V #H elim (lifts_total V (𝐔❨1❩)) #W #HVW [ lapply (H 0 W ?) [ /3 width=3 by cpm_cpms, cpm_delta/ ] @@ -60,7 +60,7 @@ lapply (teqw_inv_lref_sn … HW) -HW #H destruct qed-. lemma cnuw_inv_cast (h) (G) (L): - ∀V,T. ❪G,L❫ ⊢ ➡𝐍𝐖*[h] ⓝV.T → ⊥. + ∀V,T. ❨G,L❩ ⊢ ➡𝐍𝐖*[h] ⓝV.T → ⊥. #h #G #L #V #T #H lapply (H 0 T ?) [ /3 width=1 by cpm_cpms, cpm_eps/ ] -H #H /2 width=3 by teqw_inv_cast_xy_y/ @@ -69,7 +69,7 @@ qed-. (* Basic forward lemmas *****************************************************) lemma cnuw_fwd_appl (h) (G) (L): - ∀V,T. ❪G,L❫ ⊢ ➡𝐍𝐖*[h] ⓐV.T → ❪G,L❫ ⊢ ➡𝐍𝐖*[h] T. + ∀V,T. ❨G,L❩ ⊢ ➡𝐍𝐖*[h] ⓐV.T → ❨G,L❩ ⊢ ➡𝐍𝐖*[h] T. #h #G #L #V #T1 #HT1 #n #T2 #HT12 lapply (HT1 n (ⓐV.T2) ?) -HT1 /2 width=3 by cpms_appl_dx, teqw_inv_appl_bi/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw_cnuw.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw_cnuw.ma index 9c7439bbc..b3e459a60 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw_cnuw.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw_cnuw.ma @@ -22,7 +22,7 @@ include "basic_2/rt_computation/lprs_cpms.ma". (* Advanced inversion lemmas ************************************************) lemma cnuw_inv_abbr_pos (h) (G) (L): - ∀V,T. ❪G,L❫ ⊢ ➡𝐍𝐖*[h] +ⓓV.T → ⊥. + ∀V,T. ❨G,L❩ ⊢ ➡𝐍𝐖*[h] +ⓓV.T → ⊥. #h #G #L #V #T1 #H elim (cprs_abbr_pos_tneqw h G L V T1) #T2 #HT12 #HnT12 /3 width=2 by/ @@ -30,7 +30,7 @@ qed-. (* Advanced properties ******************************************************) -lemma cnuw_abbr_neg (h) (G) (L): ∀V,T. ❪G,L❫ ⊢ ➡𝐍𝐖*[h] -ⓓV.T. +lemma cnuw_abbr_neg (h) (G) (L): ∀V,T. ❨G,L❩ ⊢ ➡𝐍𝐖*[h] -ⓓV.T. #h #G #L #V1 #T1 #n #X #H elim (cpms_inv_abbr_sn_dx … H) -H * [ #V2 #T2 #_ #_ #H destruct /1 width=1 by teqw_abbr_neg/ @@ -38,22 +38,22 @@ elim (cpms_inv_abbr_sn_dx … H) -H * ] qed. -lemma cnuw_abst (h) (p) (G) (L): ∀W,T. ❪G,L❫ ⊢ ➡𝐍𝐖*[h] ⓛ[p]W.T. +lemma cnuw_abst (h) (p) (G) (L): ∀W,T. ❨G,L❩ ⊢ ➡𝐍𝐖*[h] ⓛ[p]W.T. #h #p #G #L #W1 #T1 #n #X #H elim (cpms_inv_abst_sn … H) -H #W2 #T2 #_ #_ #H destruct /1 width=1 by teqw_abst/ qed. lemma cnuw_cpms_trans (h) (n) (G) (L): - ∀T1. ❪G,L❫ ⊢ ➡𝐍𝐖*[h] T1 → - ∀T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → ❪G,L❫ ⊢ ➡𝐍𝐖*[h] T2. + ∀T1. ❨G,L❩ ⊢ ➡𝐍𝐖*[h] T1 → + ∀T2. ❨G,L❩ ⊢ T1 ➡*[h,n] T2 → ❨G,L❩ ⊢ ➡𝐍𝐖*[h] T2. #h #n1 #G #L #T1 #HT1 #T2 #HT12 #n2 #T3 #HT23 /4 width=5 by cpms_trans, teqw_canc_sn/ qed-. lemma cnuw_dec_ex (h) (G) (L): - ∀T1. ∨∨ ❪G,L❫ ⊢ ➡𝐍𝐖*[h] T1 - | ∃∃n,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 & (T1 ≃ T2 → ⊥). + ∀T1. ∨∨ ❨G,L❩ ⊢ ➡𝐍𝐖*[h] T1 + | ∃∃n,T2. ❨G,L❩ ⊢ T1 ➡*[h,n] T2 & (T1 ≃ T2 → ⊥). #h #G #L #T1 elim T1 -T1 * [ #s /3 width=5 by cnuw_sort, or_introl/ | #i elim (drops_F_uni L i) @@ -97,7 +97,7 @@ lemma cnuw_dec_ex (h) (G) (L): ] qed-. -lemma cnuw_dec (h) (G) (L): ∀T. Decidable (❪G,L❫ ⊢ ➡𝐍𝐖*[h] T). +lemma cnuw_dec (h) (G) (L): ∀T. Decidable (❨G,L❩ ⊢ ➡𝐍𝐖*[h] T). #h #G #L #T1 elim (cnuw_dec_ex h G L T1) [ /2 width=1 by or_introl/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw_drops.ma index beac0dcc6..b8fba649e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw_drops.ma @@ -37,7 +37,7 @@ qed-. (* Advanced properties ******************************************************) lemma cnuw_lref (h) (I) (G) (L): - ∀i. ❪G,L❫ ⊢ ➡𝐍𝐖*[h] #i → ❪G,L.ⓘ[I]❫ ⊢ ➡𝐍𝐖*[h] #↑i. + ∀i. ❨G,L❩ ⊢ ➡𝐍𝐖*[h] #i → ❨G,L.ⓘ[I]❩ ⊢ ➡𝐍𝐖*[h] #↑i. #h #I #G #L #i #Hi #n #X2 #H elim (cpms_inv_lref_sn … H) -H * [ #H #_ destruct // @@ -49,7 +49,7 @@ elim (cpms_inv_lref_sn … H) -H * qed. lemma cnuw_atom_drops (h) (b) (G) (L): - ∀i. ⇩*[b,𝐔❨i❩] L ≘ ⋆ → ❪G,L❫ ⊢ ➡𝐍𝐖*[h] #i. + ∀i. ⇩*[b,𝐔❨i❩] L ≘ ⋆ → ❨G,L❩ ⊢ ➡𝐍𝐖*[h] #i. #h #b #G #L #i #Hi #n #X #H elim (cpms_inv_lref1_drops … H) -H * [ // || #m ] #K #V1 #V2 #HLK lapply (drops_gen b … HLK) -HLK #HLK @@ -57,7 +57,7 @@ lapply (drops_mono … Hi … HLK) -L #H destruct qed. lemma cnuw_unit_drops (h) (I) (G) (L): - ∀K,i. ⇩[i] L ≘ K.ⓤ[I] → ❪G,L❫ ⊢ ➡𝐍𝐖*[h] #i. + ∀K,i. ⇩[i] L ≘ K.ⓤ[I] → ❨G,L❩ ⊢ ➡𝐍𝐖*[h] #i. #h #I #G #L #K #i #HLK #n #X #H elim (cpms_inv_lref1_drops … H) -H * [ // || #m ] #Y #V1 #V2 #HLY lapply (drops_mono … HLK … HLY) -L #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw_simple.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw_simple.ma index 9c40e390b..d69a8250d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw_simple.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw_simple.ma @@ -21,7 +21,7 @@ include "basic_2/rt_computation/cnuw.ma". (* Advanced properties with simple terms ************************************) lemma cnuw_appl_simple (h) (G) (L): - ∀V,T. 𝐒❪T❫ → ❪G,L❫ ⊢ ➡𝐍𝐖*[h] T → ❪G,L❫ ⊢ ➡𝐍𝐖*[h] ⓐV.T. + ∀V,T. 𝐒❨T❩ → ❨G,L❩ ⊢ ➡𝐍𝐖*[h] T → ❨G,L❩ ⊢ ➡𝐍𝐖*[h] ⓐV.T. #h #G #L #V1 #T1 #H1T1 #H2T1 #n #X #H elim (cpms_inv_appl_sn … H) -H * [ #V2 #T2 #_ #HT12 #H destruct -H1T1 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre.ma index 87f0b5d52..7dfe6bccd 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre.ma @@ -20,7 +20,7 @@ include "basic_2/rt_computation/cpms.ma". (* Basic_2A1: uses: cpre *) definition cpmre (h) (n) (G) (L): relation2 term term ≝ - λT1,T2. ∧∧ ❪G,L❫ ⊢ T1 ➡*[h,n] T2 & ❪G,L❫ ⊢ ➡𝐍[h,0] T2. + λT1,T2. ∧∧ ❨G,L❩ ⊢ T1 ➡*[h,n] T2 & ❨G,L❩ ⊢ ➡𝐍[h,0] T2. interpretation "evaluation for t-bound context-sensitive parallel rt-transition (term)" 'PRedEval h n G L T1 T2 = (cpmre h n G L T1 T2). @@ -28,12 +28,12 @@ interpretation "evaluation for t-bound context-sensitive parallel rt-transition (* Basic properties *********************************************************) lemma cpmre_intro (h) (n) (G) (L): - ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → ❪G,L❫ ⊢ ➡𝐍[h,0] T2 → ❪G,L❫ ⊢ T1 ➡*𝐍[h,n] T2. + ∀T1,T2. ❨G,L❩ ⊢ T1 ➡*[h,n] T2 → ❨G,L❩ ⊢ ➡𝐍[h,0] T2 → ❨G,L❩ ⊢ T1 ➡*𝐍[h,n] T2. /2 width=1 by conj/ qed. (* Basic forward lemmas *****************************************************) lemma cpmre_fwd_cpms (h) (n) (G) (L): - ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*𝐍[h,n] T2 → ❪G,L❫ ⊢ T1 ➡*[h,n] T2. + ∀T1,T2. ❨G,L❩ ⊢ T1 ➡*𝐍[h,n] T2 → ❨G,L❩ ⊢ T1 ➡*[h,n] T2. #h #n #G #L #T1 #T2 * // qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre_aaa.ma index 8639ec1a3..f96423c3f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre_aaa.ma @@ -22,7 +22,7 @@ include "basic_2/rt_computation/cprre_cpms.ma". (* Properties with atomic atomic arity assignment on terms ******************) lemma cpmre_total_aaa (h) (n) (A) (G) (L): - ∀T1. ❪G,L❫ ⊢ T1 ⁝ A → ∃T2. ❪G,L❫ ⊢ T1 ➡*𝐍[h,n] T2. + ∀T1. ❨G,L❩ ⊢ T1 ⁝ A → ∃T2. ❨G,L❩ ⊢ T1 ➡*𝐍[h,n] T2. #h #n #A #G #L #T1 #HT1 elim (cpms_total_aaa h … n … HT1) #T0 #HT10 elim (cprre_total_csx h G L T0) diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms.ma index 265dd8baa..6fc606884 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms.ma @@ -30,15 +30,15 @@ interpretation lemma cpms_ind_sn (h) (G) (L) (T2) (Q:relation2 …): Q 0 T2 → - (∀n1,n2,T1,T. ❪G,L❫ ⊢ T1 ➡[h,n1] T → ❪G,L❫ ⊢ T ➡*[h,n2] T2 → Q n2 T → Q (n1+n2) T1) → - ∀n,T1. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → Q n T1. + (∀n1,n2,T1,T. ❨G,L❩ ⊢ T1 ➡[h,n1] T → ❨G,L❩ ⊢ T ➡*[h,n2] T2 → Q n2 T → Q (n1+n2) T1) → + ∀n,T1. ❨G,L❩ ⊢ T1 ➡*[h,n] T2 → Q n T1. #h #G #L #T2 #Q @ltc_ind_sn_refl // qed-. lemma cpms_ind_dx (h) (G) (L) (T1) (Q:relation2 …): Q 0 T1 → - (∀n1,n2,T,T2. ❪G,L❫ ⊢ T1 ➡*[h,n1] T → Q n1 T → ❪G,L❫ ⊢ T ➡[h,n2] T2 → Q (n1+n2) T2) → - ∀n,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → Q n T2. + (∀n1,n2,T,T2. ❨G,L❩ ⊢ T1 ➡*[h,n1] T → Q n1 T → ❨G,L❩ ⊢ T ➡[h,n2] T2 → Q (n1+n2) T2) → + ∀n,T2. ❨G,L❩ ⊢ T1 ➡*[h,n] T2 → Q n T2. #h #G #L #T1 #Q @ltc_ind_dx_refl // qed-. @@ -48,38 +48,38 @@ qed-. (* Basic_1: uses: pr3_pr2 *) (* Basic_2A1: includes: cpr_cprs *) lemma cpm_cpms (h) (G) (L): - ∀n,T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → ❪G,L❫ ⊢ T1 ➡*[h,n] T2. + ∀n,T1,T2. ❨G,L❩ ⊢ T1 ➡[h,n] T2 → ❨G,L❩ ⊢ T1 ➡*[h,n] T2. /2 width=1 by ltc_rc/ qed. lemma cpms_step_sn (h) (G) (L): - ∀n1,T1,T. ❪G,L❫ ⊢ T1 ➡[h,n1] T → - ∀n2,T2. ❪G,L❫ ⊢ T ➡*[h,n2] T2 → ❪G,L❫ ⊢ T1 ➡*[h,n1+n2] 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_sn/ qed-. lemma cpms_step_dx (h) (G) (L): - ∀n1,T1,T. ❪G,L❫ ⊢ T1 ➡*[h,n1] T → - ∀n2,T2. ❪G,L❫ ⊢ T ➡[h,n2] T2 → ❪G,L❫ ⊢ T1 ➡*[h,n1+n2] T2. + ∀n1,T1,T. ❨G,L❩ ⊢ T1 ➡*[h,n1] T → + ∀n2,T2. ❨G,L❩ ⊢ T ➡[h,n2] T2 → ❨G,L❩ ⊢ T1 ➡*[h,n1+n2] T2. /2 width=3 by ltc_dx/ qed-. (* Basic_2A1: uses: cprs_bind_dx *) lemma cpms_bind_dx (h) (n) (G) (L): - ∀V1,V2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 → - ∀I,T1,T2. ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡*[h,n] T2 → - ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡*[h,n] ⓑ[p,I]V2.T2. + ∀V1,V2. ❨G,L❩ ⊢ V1 ➡[h,0] V2 → + ∀I,T1,T2. ❨G,L.ⓑ[I]V1❩ ⊢ T1 ➡*[h,n] T2 → + ∀p. ❨G,L❩ ⊢ ⓑ[p,I]V1.T1 ➡*[h,n] ⓑ[p,I]V2.T2. #h #n #G #L #V1 #V2 #HV12 #I #T1 #T2 #H #a @(cpms_ind_sn … H) -T1 /3 width=3 by cpms_step_sn, cpm_cpms, cpm_bind/ qed. lemma cpms_appl_dx (h) (n) (G) (L): - ∀V1,V2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 → - ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → - ❪G,L❫ ⊢ ⓐV1.T1 ➡*[h,n] ⓐV2.T2. + ∀V1,V2. ❨G,L❩ ⊢ V1 ➡[h,0] V2 → + ∀T1,T2. ❨G,L❩ ⊢ T1 ➡*[h,n] T2 → + ❨G,L❩ ⊢ ⓐV1.T1 ➡*[h,n] ⓐV2.T2. #h #n #G #L #V1 #V2 #HV12 #T1 #T2 #H @(cpms_ind_sn … H) -T1 /3 width=3 by cpms_step_sn, cpm_cpms, cpm_appl/ qed. lemma cpms_zeta (h) (n) (G) (L): ∀T1,T. ⇧[1] T ≘ T1 → - ∀V,T2. ❪G,L❫ ⊢ T ➡*[h,n] T2 → ❪G,L❫ ⊢ +ⓓV.T1 ➡*[h,n] T2. + ∀V,T2. ❨G,L❩ ⊢ T ➡*[h,n] T2 → ❨G,L❩ ⊢ +ⓓV.T1 ➡*[h,n] T2. #h #n #G #L #T1 #T #HT1 #V #T2 #H @(cpms_ind_dx … H) -T2 /3 width=3 by cpms_step_dx, cpm_cpms, cpm_zeta/ qed. @@ -87,22 +87,22 @@ qed. (* Basic_2A1: uses: cprs_zeta *) lemma cpms_zeta_dx (h) (n) (G) (L): ∀T2,T. ⇧[1] T2 ≘ T → - ∀V,T1. ❪G,L.ⓓV❫ ⊢ T1 ➡*[h,n] T → ❪G,L❫ ⊢ +ⓓV.T1 ➡*[h,n] T2. + ∀V,T1. ❨G,L.ⓓV❩ ⊢ T1 ➡*[h,n] T → ❨G,L❩ ⊢ +ⓓV.T1 ➡*[h,n] T2. #h #n #G #L #T2 #T #HT2 #V #T1 #H @(cpms_ind_sn … H) -T1 /3 width=3 by cpms_step_sn, cpm_cpms, cpm_bind, cpm_zeta/ qed. (* Basic_2A1: uses: cprs_eps *) lemma cpms_eps (h) (n) (G) (L): - ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → - ∀V. ❪G,L❫ ⊢ ⓝV.T1 ➡*[h,n] T2. + ∀T1,T2. ❨G,L❩ ⊢ T1 ➡*[h,n] T2 → + ∀V. ❨G,L❩ ⊢ ⓝV.T1 ➡*[h,n] T2. #h #n #G #L #T1 #T2 #H @(cpms_ind_sn … H) -T1 /3 width=3 by cpms_step_sn, cpm_cpms, cpm_eps/ qed. lemma cpms_ee (h) (n) (G) (L): - ∀U1,U2. ❪G,L❫ ⊢ U1 ➡*[h,n] U2 → - ∀T. ❪G,L❫ ⊢ ⓝU1.T ➡*[h,↑n] U2. + ∀U1,U2. ❨G,L❩ ⊢ U1 ➡*[h,n] U2 → + ∀T. ❨G,L❩ ⊢ ⓝU1.T ➡*[h,↑n] U2. #h #n #G #L #U1 #U2 #H @(cpms_ind_sn … H) -U1 -n [ /3 width=1 by cpm_cpms, cpm_ee/ | #n1 #n2 #U1 #U #HU1 #HU2 #_ #T >plus_S1 @@ -112,21 +112,21 @@ qed. (* Basic_2A1: uses: cprs_beta_dx *) 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. + ∀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 (h) (n) (G) (L): - ∀V1,V. ❪G,L❫ ⊢ V1 ➡[h,0] V → + ∀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. + ∀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. @@ -141,7 +141,7 @@ lemma cprs_refl (h) (G) (L): (* Advanced properties ******************************************************) lemma cpms_sort (h) (G) (L): - ∀n,s. ❪G,L❫ ⊢ ⋆s ➡*[h,n] ⋆((next h)^n s). + ∀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 @@ -35,9 +35,9 @@ theorem cpms_bind (h) (n) (G) (L): qed. 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. + ∀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 @@ -47,10 +47,10 @@ qed. (* Basic_2A1: includes: cprs_beta_rc *) 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. + ∀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 @@ -60,10 +60,10 @@ qed. (* Basic_2A1: includes: cprs_beta *) 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. + ∀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 @@ -73,10 +73,10 @@ qed. (* Basic_2A1: includes: cprs_theta_rc *) 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. + ∀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 @@ -86,10 +86,10 @@ qed. (* Basic_2A1: includes: cprs_theta *) 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. + ∀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 @@ -99,24 +99,24 @@ qed. (* Basic_2A1: uses: lstas_scpds_trans scpds_strap2 *) theorem cpms_trans (h) (G) (L): - ∀n1,T1,T. ❪G,L❫ ⊢ T1 ➡*[h,n1] T → - ∀n2,T2. ❪G,L❫ ⊢ T ➡*[h,n2] T2 → ❪G,L❫ ⊢ T1 ➡*[h,n1+n2] T2. + ∀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 (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. + ∀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 (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. + ∀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 #_ * * @@ -140,8 +140,8 @@ lemma cpms_inv_appl_sn (h) (n) (G) (L): qed-. 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. + ∀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 ❪G,L,T2❫. + ∀G,L,T1,T2. ❨G,L❩ ⊢ T1 ➡*[h,n] T2 → + (T1 ≅ T2 → ⊥) → ❨G,L,T1❩ > ❨G,L,T2❩. /3 width=3 by cpms_fwd_cpxs, cpxs_tneqx_fpbg/ qed-. lemma fpbg_cpms_trans (h) (n): - ∀G1,G2,L1,L2,T1,T. ❪G1,L1,T1❫ > ❪G2,L2,T❫ → - ∀T2. ❪G2,L2❫ ⊢ T ➡*[h,n] T2 → ❪G1,L1,T1❫ > ❪G2,L2,T2❫. + ∀G1,G2,L1,L2,T1,T. ❨G1,L1,T1❩ > ❨G2,L2,T❩ → + ∀T2. ❨G2,L2❩ ⊢ T ➡*[h,n] T2 → ❨G1,L1,T1❩ > ❨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 ➡*[h,n] T → - ∀G2,L2,T2. ❪G1,L1,T❫ > ❪G2,L2,T2❫ → ❪G1,L1,T1❫ > ❪G2,L2,T2❫. + ∀G1,L1,T1,T. ❨G1,L1❩ ⊢ T1 ➡*[h,n] T → + ∀G2,L2,T2. ❨G1,L1,T❩ > ❨G2,L2,T2❩ → ❨G1,L1,T1❩ > ❨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 ➡*[h,n] T2 → ❪G1,L1,T1❫ > ❪G2,L2,T2❫. + ∀G1,G2,L1,L2,T1,T. ❨G1,L1,T1❩ ⬂+ ❨G2,L2,T❩ → + ∀n,T2. ❨G2,L2❩ ⊢ T ➡*[h,n] T2 → ❨G1,L1,T1❩ > ❨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 ➡[h,n1] T → (T1 ≅ T → ⊥) → - ∀n2,T2. ❪G,L❫⊢ T ➡*[h,n2] T2 → T1 ≅ T2 → ❪G,L,T1❫ > ❪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❩ > ❨G,L,T1❩. #h #G #L #T1 #n1 #T #H1T1 #H2T1 #n2 #T2 #H1T2 #H2T12 /4 width=10 by fpbc_fpbs_fpbg, cpms_fwd_fpbs, fpbs_teqg_trans, cpm_fwd_fpbc, teqx_sym/ 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 7a6ace084..4f721aa7a 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 @@ -21,5 +21,5 @@ include "basic_2/rt_computation/cpms_cpxs.ma". (* Basic_2A1: uses: cprs_fpbs *) lemma cpms_fwd_fpbs (h) (n): - ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] T2 → ❪G,L,T1❫ ≥ ❪G,L,T2❫. + ∀G,L,T1,T2. ❨G,L❩ ⊢ T1 ➡*[h,n] T2 → ❨G,L,T1❩ ≥ ❨G,L,T2❩. /3 width=3 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 42e0aaf30..71831374b 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 @@ -20,8 +20,8 @@ include "basic_2/rt_computation/cpms_cpms.ma". (* Properties with parallel rt-transition for full local environments *******) 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. + ∀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/ @@ -46,8 +46,8 @@ lemma lpr_cpm_trans (h) (n) (G): qed-. 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. + ∀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-. @@ -56,14 +56,14 @@ qed-. (* Basic_2A1: includes cpr_bind2 *) 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. + ∀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 (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. + ∀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_reqg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_reqg.ma index f837a4eb5..f49044e68 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_reqg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_reqg.ma @@ -20,12 +20,12 @@ include "basic_2/rt_computation/cpms_cpxs.ma". (* Properties with generic equivalence for local environments ***************) lemma cpms_reqg_conf_sn (S) (h) (n) (G) (L1) (L2): - ∀T1,T2. ❪G,L1❫ ⊢ T1 ➡*[h,n] T2 → + ∀T1,T2. ❨G,L1❩ ⊢ T1 ➡*[h,n] T2 → L1 ≛[S,T1] L2 → L1 ≛[S,T2] L2. /3 width=5 by cpms_fwd_cpxs, cpxs_reqg_conf_sn/ qed-. lemma cpms_reqg_conf_dx (S) (h) (n) (G) (L1) (L2): reflexive … S → symmetric … S → - ∀T1,T2. ❪G,L2❫ ⊢ T1 ➡*[h,n] T2 → + ∀T1,T2. ❨G,L2❩ ⊢ T1 ➡*[h,n] T2 → L1 ≛[S,T1] L2 → L1 ≛[S,T2] L2. /3 width=5 by cpms_fwd_cpxs, cpxs_reqg_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 97d12e143..5a7596ff7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe.ma @@ -18,41 +18,41 @@ 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 ➡*[h,n] 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). definition R_cpmuwe (h) (G) (L) (T): predicate nat ≝ - λn. ∃U. ❪G,L❫ ⊢ T ➡*𝐍𝐖*[h,n] U. + λn. ∃U. ❨G,L❩ ⊢ T ➡*𝐍𝐖*[h,n] U. (* Basic properties *********************************************************) lemma cpmuwe_intro (h) (n) (G) (L): - ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,n] 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 ➡*[h,n] ⋆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 ➡*[h,n] #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 ➡*[h,n] #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 ➡*[h,n] §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 ➡*[h,n] 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 c1257d252..aa0c5a9f4 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 ➡*[h,n] -ⓓ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 ➡*[h,n] ⓛ[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/cpmuwe_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe_csx.ma index 248b4b229..2881941a1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe_csx.ma @@ -23,7 +23,7 @@ include "basic_2/rt_computation/cpmuwe.ma". (* Properties with strongly normalizing terms for extended rt-transition ****) lemma cpmuwe_total_csx (h) (G) (L): - ∀T1. ❪G,L❫ ⊢ ⬈*𝐒 T1 → ∃∃T2,n. ❪G,L❫ ⊢ T1 ➡*𝐍𝐖*[h,n] T2. + ∀T1. ❨G,L❩ ⊢ ⬈*𝐒 T1 → ∃∃T2,n. ❨G,L❩ ⊢ T1 ➡*𝐍𝐖*[h,n] T2. #h #G #L #T1 #H @(csx_ind_cpxs … H) -T1 #T1 #_ #IHT1 elim (cnuw_dec_ex h G L T1) @@ -38,7 +38,7 @@ elim (cnuw_dec_ex h G L T1) qed-. lemma R_cpmuwe_total_csx (h) (G) (L): - ∀T1. ❪G,L❫ ⊢ ⬈*𝐒 T1 → ∃n. R_cpmuwe h G L T1 n. + ∀T1. ❨G,L❩ ⊢ ⬈*𝐒 T1 → ∃n. R_cpmuwe h G L T1 n. #h #G #L #T1 #H elim (cpmuwe_total_csx h … H) -H #T2 #n #HT12 /3 width=3 by ex_intro (* 2x *)/ 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 c7ebf67fc..6c5b71d24 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 ➡*[h,n] T0 → - ∀T2. ❪G,L❫ ⊢ T0 ➡*𝐍[h,0] 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 8b854071d..fa173e0a4 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,8 +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,0] T1 → - ∀T2. ❪G,L❫ ⊢ T ➡*𝐍[h,0] T2 → ❪G,L❫ ⊢ T1 ➡*𝐍[h,0] 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 @@ -34,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,0] T1 → ∀T2. ❪G,L❫ ⊢ T ➡*𝐍[h,0] 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 854fd530b..1527f86b1 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❫ ⊢ ⬈*𝐒 T1 → ∃T2. ❪G,L❫ ⊢ T1 ➡*𝐍[h,0] T2. + ∀T1. ❨G,L❩ ⊢ ⬈*𝐒 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 2afcb81c8..323c08bf3 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,0] T → ❪G,L❫ ⊢ T ➡*[h,0] T2 → Q T → Q T1) → - ∀T1. ❪G,L❫ ⊢ T1 ➡*[h,0] 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,0] T → ❪G,L❫ ⊢ T ➡[h,0] T2 → Q T → Q T2) → - ∀T2. ❪G,L❫ ⊢ T1 ➡*[h,0] 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,0] T → - ∀T2. ❪G,L❫ ⊢ T ➡*[h,0] T2 → ❪G,L❫ ⊢ T1 ➡*[h,0] 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,0] T → - ∀T2. ❪G,L❫ ⊢ T ➡[h,0] T2 → ❪G,L❫ ⊢ T1 ➡*[h,0] 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,0] V2 → - ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[h,0] T2 → - ❪G,L❫ ⊢ ⓕ[I]V1.T1 ➡*[h,0] ⓕ[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,0] T2 → ∀V1,V2. ❪G,L❫ ⊢ V1 ➡*[h,0] V2 → - ❪G,L❫ ⊢ ⓕ[I] V1. T1 ➡*[h,0] ⓕ[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,0] 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,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. +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 bb08de9ec..ec9a2f6db 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,0] T2 → ❪G,L❫ ⊢ ➡𝐍[h,0] 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 6901f2c1d..da3e2ab02 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,0] T2 → - ∀V1,V2. ❪G,L❫ ⊢ V1 ➡*[h,0] V2 → - ∀I. ❪G,L❫ ⊢ ⓕ[I]V1.T1 ➡*[h,0] ⓕ[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,0] X2 → - ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡*[h,0] V2 & - ❪G,L❫ ⊢ T1 ➡*[h,0] 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,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. + | ∃∃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 f2a46a832..d8efa254b 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,0] 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,0] 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_lpr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_lpr.ma index dd27d4cb5..205ed4120 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 @@ -33,8 +33,8 @@ lemma lpr_cprs_trans (h) (G): qed-. lemma cprs_lpr_conf_dx (h) (G): - ∀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. + ∀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 @@ -45,9 +45,9 @@ elim (cprs_strip … HT2 … HT3) -T qed-. lemma cprs_lpr_conf_sn (h) (G): - ∀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. + ∀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_teqw.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_teqw.ma index 2f74de0c9..bd02ab79d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_teqw.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_teqw.ma @@ -22,7 +22,7 @@ include "basic_2/rt_computation/cpms.ma". (* Properties with sort-irrelevant whd equivalence on terms *****************) lemma cprs_abbr_pos_tneqw (h) (G) (L) (V) (T1): - ∃∃T2. ❪G,L❫ ⊢ +ⓓV.T1 ➡*[h,0] 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 (teqw_dec U1 U2) [ #HpU12 | -HTU2 #HnU12 ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpts.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpts.ma index 27b465319..ea4b1f532 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpts.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpts.ma @@ -29,51 +29,51 @@ interpretation lemma cpts_ind_sn (h) (G) (L) (T2) (Q:relation2 …): Q 0 T2 → - (∀n1,n2,T1,T. ❪G,L❫ ⊢ T1 ⬆[h,n1] T → ❪G,L❫ ⊢ T ⬆*[h,n2] T2 → Q n2 T → Q (n1+n2) T1) → - ∀n,T1. ❪G,L❫ ⊢ T1 ⬆*[h,n] T2 → Q n T1. + (∀n1,n2,T1,T. ❨G,L❩ ⊢ T1 ⬆[h,n1] T → ❨G,L❩ ⊢ T ⬆*[h,n2] T2 → Q n2 T → Q (n1+n2) T1) → + ∀n,T1. ❨G,L❩ ⊢ T1 ⬆*[h,n] T2 → Q n T1. #h #G #L #T2 #Q @ltc_ind_sn_refl // qed-. lemma cpts_ind_dx (h) (G) (L) (T1) (Q:relation2 …): Q 0 T1 → - (∀n1,n2,T,T2. ❪G,L❫ ⊢ T1 ⬆*[h,n1] T → Q n1 T → ❪G,L❫ ⊢ T ⬆[h,n2] T2 → Q (n1+n2) T2) → - ∀n,T2. ❪G,L❫ ⊢ T1 ⬆*[h,n] T2 → Q n T2. + (∀n1,n2,T,T2. ❨G,L❩ ⊢ T1 ⬆*[h,n1] T → Q n1 T → ❨G,L❩ ⊢ T ⬆[h,n2] T2 → Q (n1+n2) T2) → + ∀n,T2. ❨G,L❩ ⊢ T1 ⬆*[h,n] T2 → Q n T2. #h #G #L #T1 #Q @ltc_ind_dx_refl // qed-. (* Basic properties *********************************************************) lemma cpt_cpts (h) (G) (L): - ∀n,T1,T2. ❪G,L❫ ⊢ T1 ⬆[h,n] T2 → ❪G,L❫ ⊢ T1 ⬆*[h,n] T2. + ∀n,T1,T2. ❨G,L❩ ⊢ T1 ⬆[h,n] T2 → ❨G,L❩ ⊢ T1 ⬆*[h,n] T2. /2 width=1 by ltc_rc/ qed. lemma cpts_step_sn (h) (G) (L): - ∀n1,T1,T. ❪G,L❫ ⊢ T1 ⬆[h,n1] T → - ∀n2,T2. ❪G,L❫ ⊢ T ⬆*[h,n2] T2 → ❪G,L❫ ⊢ T1 ⬆*[h,n1+n2] T2. + ∀n1,T1,T. ❨G,L❩ ⊢ T1 ⬆[h,n1] T → + ∀n2,T2. ❨G,L❩ ⊢ T ⬆*[h,n2] T2 → ❨G,L❩ ⊢ T1 ⬆*[h,n1+n2] T2. /2 width=3 by ltc_sn/ qed-. lemma cpts_step_dx (h) (G) (L): - ∀n1,T1,T. ❪G,L❫ ⊢ T1 ⬆*[h,n1] T → - ∀n2,T2. ❪G,L❫ ⊢ T ⬆[h,n2] T2 → ❪G,L❫ ⊢ T1 ⬆*[h,n1+n2] T2. + ∀n1,T1,T. ❨G,L❩ ⊢ T1 ⬆*[h,n1] T → + ∀n2,T2. ❨G,L❩ ⊢ T ⬆[h,n2] T2 → ❨G,L❩ ⊢ T1 ⬆*[h,n1+n2] T2. /2 width=3 by ltc_dx/ qed-. lemma cpts_bind_dx (h) (n) (G) (L): - ∀V1,V2. ❪G,L❫ ⊢ V1 ⬆[h,0] V2 → - ∀I,T1,T2. ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬆*[h,n] T2 → - ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬆*[h,n] ⓑ[p,I]V2.T2. + ∀V1,V2. ❨G,L❩ ⊢ V1 ⬆[h,0] V2 → + ∀I,T1,T2. ❨G,L.ⓑ[I]V1❩ ⊢ T1 ⬆*[h,n] T2 → + ∀p. ❨G,L❩ ⊢ ⓑ[p,I]V1.T1 ⬆*[h,n] ⓑ[p,I]V2.T2. #h #n #G #L #V1 #V2 #HV12 #I #T1 #T2 #H #a @(cpts_ind_sn … H) -T1 /3 width=3 by cpts_step_sn, cpt_cpts, cpt_bind/ qed. lemma cpts_appl_dx (h) (n) (G) (L): - ∀V1,V2. ❪G,L❫ ⊢ V1 ⬆[h,0] V2 → - ∀T1,T2. ❪G,L❫ ⊢ T1 ⬆*[h,n] T2 → ❪G,L❫ ⊢ ⓐV1.T1 ⬆*[h,n] ⓐV2.T2. + ∀V1,V2. ❨G,L❩ ⊢ V1 ⬆[h,0] V2 → + ∀T1,T2. ❨G,L❩ ⊢ T1 ⬆*[h,n] T2 → ❨G,L❩ ⊢ ⓐV1.T1 ⬆*[h,n] ⓐV2.T2. #h #n #G #L #V1 #V2 #HV12 #T1 #T2 #H @(cpts_ind_sn … H) -T1 /3 width=3 by cpts_step_sn, cpt_cpts, cpt_appl/ qed. lemma cpts_ee (h) (n) (G) (L): - ∀U1,U2. ❪G,L❫ ⊢ U1 ⬆*[h,n] U2 → - ∀T. ❪G,L❫ ⊢ ⓝU1.T ⬆*[h,↑n] U2. + ∀U1,U2. ❨G,L❩ ⊢ U1 ⬆*[h,n] U2 → + ∀T. ❨G,L❩ ⊢ ⓝU1.T ⬆*[h,↑n] U2. #h #n #G #L #U1 #U2 #H @(cpts_ind_sn … H) -U1 -n [ /3 width=1 by cpt_cpts, cpt_ee/ | #n1 #n2 #U1 #U #HU1 #HU2 #_ #T >plus_S1 @@ -87,7 +87,7 @@ lemma cpts_refl (h) (G) (L): reflexive … (cpts h G L 0). (* Advanced properties ******************************************************) lemma cpts_sort (h) (G) (L) (n): - ∀s. ❪G,L❫ ⊢ ⋆s ⬆*[h,n] ⋆((next h)^n s). + ∀s. ❨G,L❩ ⊢ ⋆s ⬆*[h,n] ⋆((next h)^n s). #h #G #L #n elim n -n [ // ] #n #IH #s ❪G2,L2,T2❫ → - ∃∃G3,L3,T3,G4,L4,T4. ❪G1,L1,T1❫ ≥ ❪G3,L3,T3❫ & ❪G3,L3,T3❫ ≻ ❪G4,L4,T4❫ & ❪G4,L4,T4❫ ≥ ❪G2,L2,T2❫. + ❨G1,L1,T1❩ > ❨G2,L2,T2❩ → + ∃∃G3,L3,T3,G4,L4,T4. ❨G1,L1,T1❩ ≥ ❨G3,L3,T3❩ & ❨G3,L3,T3❩ ≻ ❨G4,L4,T4❩ & ❨G4,L4,T4❩ ≥ ❨G2,L2,T2❩. // qed-. (* Basic properties *********************************************************) lemma fpbg_intro (G3) (G4) (L3) (L4) (T3) (T4): ∀G1,L1,T1,G2,L2,T2. - ❪G1,L1,T1❫ ≥ ❪G3,L3,T3❫ → ❪G3,L3,T3❫ ≻ ❪G4,L4,T4❫ → - ❪G4,L4,T4❫ ≥ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ > ❪G2,L2,T2❫. + ❨G1,L1,T1❩ ≥ ❨G3,L3,T3❩ → ❨G3,L3,T3❩ ≻ ❨G4,L4,T4❩ → + ❨G4,L4,T4❩ ≥ ❨G2,L2,T2❩ → ❨G1,L1,T1❩ > ❨G2,L2,T2❩. /2 width=9 by ex3_6_intro/ qed. (* Basic_2A1: was: fpbg_fpbq_trans *) lemma fpbg_fpb_trans: ∀G1,G,G2,L1,L,L2,T1,T,T2. - ❪G1,L1,T1❫ > ❪G,L,T❫ → ❪G,L,T❫ ≽ ❪G2,L2,T2❫ → - ❪G1,L1,T1❫ > ❪G2,L2,T2❫. + ❨G1,L1,T1❩ > ❨G,L,T❩ → ❨G,L,T❩ ≽ ❨G2,L2,T2❩ → + ❨G1,L1,T1❩ > ❨G2,L2,T2❩. #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 elim (fpbg_inv_gen … H1) -H1 /3 width=13 by fpbs_strap1, fpbg_intro/ @@ -55,8 +55,8 @@ qed-. (* Basic_2A1: was: fpbq_fpbg_trans *) lemma fpb_fpbg_trans: ∀G1,G,G2,L1,L,L2,T1,T,T2. - ❪G1,L1,T1❫ ≽ ❪G,L,T❫ → ❪G,L,T❫ > ❪G2,L2,T2❫ → - ❪G1,L1,T1❫ > ❪G2,L2,T2❫. + ❨G1,L1,T1❩ ≽ ❨G,L,T❩ → ❨G,L,T❩ > ❨G2,L2,T2❩ → + ❨G1,L1,T1❩ > ❨G2,L2,T2❩. #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 elim (fpbg_inv_gen … H2) -H2 /3 width=13 by fpbs_strap2, fpbg_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_cpm.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_cpm.ma index 82c1b2f63..af1ef0158 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_cpm.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_cpm.ma @@ -21,7 +21,7 @@ include "basic_2/rt_computation/fpbg_fqup.ma". (* Properties with t-bound rt-transition for terms **************************) lemma cpm_tneqx_cpm_fpbg (h) (G) (L): - ∀n1,T1,T. ❪G,L❫ ⊢ T1 ➡[h,n1] T → (T1 ≅ T → ⊥) → - ∀n2,T2. ❪G,L❫ ⊢ T ➡[h,n2] T2 → ❪G,L,T1❫ > ❪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❩ > ❨G,L,T2❩. /4 width=5 by fpbc_fpbs_fpbg, fpb_fpbs, cpm_fwd_fpbc, cpm_fwd_fpb/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_cpxs.ma index 484500f64..2c9251f22 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_cpxs.ma @@ -24,14 +24,14 @@ include "basic_2/rt_computation/fpbg_fpbs.ma". (* Basic_2A1: was: cpxs_fpbg *) lemma cpxs_tneqx_fpbg: - ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬈* T2 → - (T1 ≅ T2 → ⊥) → ❪G,L,T1❫ > ❪G,L,T2❫. + ∀G,L,T1,T2. ❨G,L❩ ⊢ T1 ⬈* T2 → + (T1 ≅ T2 → ⊥) → ❨G,L,T1❩ > ❨G,L,T2❩. #G #L #T1 #T2 #H #H0 elim (cpxs_tneqg_fwd_step_sn … H … H0) -H -H0 /4 width=5 by fpbc_fpbs_fpbg, cpxs_fpbs, cpx_fpbc, sfull_dec/ qed. lemma cpxs_fpbg_trans: - ∀G1,L1,T1,T. ❪G1,L1❫ ⊢ T1 ⬈* T → - ∀G2,L2,T2. ❪G1,L1,T❫ > ❪G2,L2,T2❫ → ❪G1,L1,T1❫ > ❪G2,L2,T2❫. + ∀G1,L1,T1,T. ❨G1,L1❩ ⊢ T1 ⬈* T → + ∀G2,L2,T2. ❨G1,L1,T❩ > ❨G2,L2,T2❩ → ❨G1,L1,T1❩ > ❨G2,L2,T2❩. /3 width=5 by fpbs_fpbg_trans, cpxs_fpbs/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_feqg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_feqg.ma index fca623b64..1cd93d5f7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_feqg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_feqg.ma @@ -22,32 +22,32 @@ include "basic_2/rt_computation/fpbg_fpbs.ma". (* Basic_2A1: uses: fpbg_fleq_trans *) lemma fpbg_feqg_trans (S) (G) (L) (T): reflexive … S → symmetric … S → - ∀G1,L1,T1. ❪G1,L1,T1❫ > ❪G,L,T❫ → - ∀G2,L2,T2. ❪G,L,T❫ ≛[S] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ > ❪G2,L2,T2❫. + ∀G1,L1,T1. ❨G1,L1,T1❩ > ❨G,L,T❩ → + ∀G2,L2,T2. ❨G,L,T❩ ≛[S] ❨G2,L2,T2❩ → ❨G1,L1,T1❩ > ❨G2,L2,T2❩. /3 width=8 by fpbg_fpb_trans, feqg_fpb/ qed-. (* Basic_2A1: uses: fleq_fpbg_trans *) lemma feqg_fpbg_trans (S) (G) (L) (T): reflexive … S → symmetric … S → - ∀G1,L1,T1. ❪G1,L1,T1❫ ≛[S] ❪G,L,T❫ → - ∀G2,L2,T2. ❪G,L,T❫ > ❪G2,L2,T2❫ → ❪G1,L1,T1❫ > ❪G2,L2,T2❫. + ∀G1,L1,T1. ❨G1,L1,T1❩ ≛[S] ❨G,L,T❩ → + ∀G2,L2,T2. ❨G,L,T❩ > ❨G2,L2,T2❩ → ❨G1,L1,T1❩ > ❨G2,L2,T2❩. /3 width=8 by fpb_fpbg_trans, feqg_fpb/ qed-. (* Properties with generic equivalence for terms ****************************) lemma fpbg_teqg_div (S): reflexive … S → symmetric … S → - ∀G1,G2,L1,L2,T1,T. ❪G1,L1,T1❫ > ❪G2,L2,T❫ → - ∀T2. T2 ≛[S] T → ❪G1,L1,T1❫ > ❪G2,L2,T2❫. + ∀G1,G2,L1,L2,T1,T. ❨G1,L1,T1❩ > ❨G2,L2,T❩ → + ∀T2. T2 ≛[S] T → ❨G1,L1,T1❩ > ❨G2,L2,T2❩. /4 width=8 by fpbg_feqg_trans, teqg_feqg, teqg_sym/ qed-. (* Advanced inversion lemmas of parallel rst-computation on closures ********) (* Basic_2A1: was: fpbs_fpbg *) lemma fpbs_inv_fpbg: - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫ → - ∨∨ ❪G1,L1,T1❫ ≅ ❪G2,L2,T2❫ - | ❪G1,L1,T1❫ > ❪G2,L2,T2❫. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩ → + ∨∨ ❨G1,L1,T1❩ ≅ ❨G2,L2,T2❩ + | ❨G1,L1,T1❩ > ❨G2,L2,T2❩. #G1 #G2 #L1 #L2 #T1 #T2 #H elim (fpbs_inv_fpbc_sn … H) -H [ /2 width=1 by or_introl/ @@ -58,8 +58,8 @@ qed-. (* Basic_2A1: this was the definition of fpbg *) lemma fpbg_inv_fpbc_fpbs (G1) (G2) (L1) (L2) (T1) (T2): - ❪G1,L1,T1❫ > ❪G2,L2,T2❫ → - ∃∃G,L,T. ❪G1,L1,T1❫ ≻ ❪G,L,T❫ & ❪G,L,T❫ ≥ ❪G2,L2,T2❫. + ❨G1,L1,T1❩ > ❨G2,L2,T2❩ → + ∃∃G,L,T. ❨G1,L1,T1❩ ≻ ❨G,L,T❩ & ❨G,L,T❩ ≥ ❨G2,L2,T2❩. #G1 #G2 #L1 #L2 #T1 #T2 #H elim (fpbg_inv_gen … H) -H #G3 #L3 #T3 #G4 #L4 #T4 #H13 #H34 #H42 elim (fpbs_inv_fpbc_sn … H13) -H13 @@ -72,9 +72,9 @@ qed-. (* Advanced properties of parallel rst-computation on closures **************) lemma fpbs_fpb_trans: - ∀F1,F2,K1,K2,T1,T2. ❪F1,K1,T1❫ ≥ ❪F2,K2,T2❫ → - ∀G2,L2,U2. ❪F2,K2,T2❫ ≻ ❪G2,L2,U2❫ → - ∃∃G1,L1,U1. ❪F1,K1,T1❫ ≻ ❪G1,L1,U1❫ & ❪G1,L1,U1❫ ≥ ❪G2,L2,U2❫. + ∀F1,F2,K1,K2,T1,T2. ❨F1,K1,T1❩ ≥ ❨F2,K2,T2❩ → + ∀G2,L2,U2. ❨F2,K2,T2❩ ≻ ❨G2,L2,U2❩ → + ∃∃G1,L1,U1. ❨F1,K1,T1❩ ≻ ❨G1,L1,U1❩ & ❨G1,L1,U1❩ ≥ ❨G2,L2,U2❩. #F1 #F2 #K1 #K2 #T1 #T2 #H elim (fpbs_inv_fpbg … H) -H [ #H12 #G2 #L2 #U2 #H22 lapply (feqg_fpbc_trans … H12 … H22) -F2 -K2 -T2 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fpbs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fpbs.ma index a1ac69182..5a981f8e2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fpbs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fpbs.ma @@ -20,7 +20,7 @@ include "basic_2/rt_computation/fpbg.ma". (* Advanced forward lemmas **************************************************) lemma fpbg_fwd_fpbs (G1) (G2) (L1) (L2) (T1) (T2): - ❪G1,L1,T1❫ > ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ❨G1,L1,T1❩ > ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. #G1 #G2 #L1 #L2 #T1 #T2 #H elim (fpbg_inv_gen … H) -H /4 width=9 by fpbs_trans, fpbs_strap2, fpbc_fwd_fpb/ @@ -29,8 +29,8 @@ qed-. (* Advanced properties ******************************************************) lemma fpbs_fpbg_trans (G) (L) (T): - ∀G1,L1,T1. ❪G1,L1,T1❫ ≥ ❪G,L,T❫ → - ∀G2,L2,T2. ❪G,L,T❫ > ❪G2,L2,T2❫ → ❪G1,L1,T1❫ > ❪G2,L2,T2❫. + ∀G1,L1,T1. ❨G1,L1,T1❩ ≥ ❨G,L,T❩ → + ∀G2,L2,T2. ❨G,L,T❩ > ❨G2,L2,T2❩ → ❨G1,L1,T1❩ > ❨G2,L2,T2❩. #G #L #T #G1 #L1 #T1 #H1 #G2 #L2 #T2 #H2 elim (fpbg_inv_gen … H2) -H2 /3 width=13 by fpbg_intro, fpbs_trans/ @@ -38,8 +38,8 @@ qed-. (* Note: this is used in the closure proof *) lemma fpbg_fpbs_trans (G) (L) (T): - ∀G1,L1,T1. ❪G1,L1,T1❫ > ❪G,L,T❫ → - ∀G2,L2,T2. ❪G,L,T❫ ≥ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ > ❪G2,L2,T2❫. + ∀G1,L1,T1. ❨G1,L1,T1❩ > ❨G,L,T❩ → + ∀G2,L2,T2. ❨G,L,T❩ ≥ ❨G2,L2,T2❩ → ❨G1,L1,T1❩ > ❨G2,L2,T2❩. #G #L #T #G1 #L1 #T1 #H1 #G2 #L2 #T2 #H2 elim (fpbg_inv_gen … H1) -H1 /3 width=13 by fpbg_intro, fpbs_trans/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fqup.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fqup.ma index 37681f1fa..3660f103c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fqup.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fqup.ma @@ -20,10 +20,10 @@ include "basic_2/rt_computation/fpbg.ma". (* Advanced properties ******************************************************) lemma fpbc_fpbg (G1) (G2) (L1) (L2) (T1) (T2): - ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ > ❪G2,L2,T2❫. + ❨G1,L1,T1❩ ≻ ❨G2,L2,T2❩ → ❨G1,L1,T1❩ > ❨G2,L2,T2❩. /3 width=13 by fpbg_intro, fpb_fpbs/ qed. lemma fpbc_fpbs_fpbg (G) (L) (T): - ∀G1,L1,T1. ❪G1,L1,T1❫ ≻ ❪G,L,T❫ → - ∀G2,L2,T2. ❪G,L,T❫ ≥ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ > ❪G2,L2,T2❫. + ∀G1,L1,T1. ❨G1,L1,T1❩ ≻ ❨G,L,T❩ → + ∀G2,L2,T2. ❨G,L,T❩ ≥ ❨G2,L2,T2❩ → ❨G1,L1,T1❩ > ❨G2,L2,T2❩. /2 width=9 by fpbg_intro/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fqus.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fqus.ma index 1c64f5eb2..fea456d48 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fqus.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fqus.ma @@ -24,13 +24,13 @@ include "basic_2/rt_computation/fpbg_fpbs.ma". (* Note: this is used in the closure proof *) lemma fqup_fpbg: - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ > ❪G2,L2,T2❫. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂+ ❨G2,L2,T2❩ → ❨G1,L1,T1❩ > ❨G2,L2,T2❩. #G1 #G2 #L1 #L2 #T1 #T2 #H elim (fqup_inv_step_sn … H) -H /3 width=5 by fpbc_fpbs_fpbg, fqus_fpbs, fqu_fpbc/ qed. (* Note: this is used in the closure proof *) lemma fqup_fpbg_trans (G) (L) (T): - ∀G1,L1,T1. ❪G1,L1,T1❫ ⬂+ ❪G,L,T❫ → - ∀G2,L2,T2. ❪G,L,T❫ > ❪G2,L2,T2❫ → ❪G1,L1,T1❫ > ❪G2,L2,T2❫. + ∀G1,L1,T1. ❨G1,L1,T1❩ ⬂+ ❨G,L,T❩ → + ∀G2,L2,T2. ❨G,L,T❩ > ❨G2,L2,T2❩ → ❨G1,L1,T1❩ > ❨G2,L2,T2❩. /3 width=5 by fpbs_fpbg_trans, fqup_fpbs/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_lpxs.ma index b40bf450a..760fc1986 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_lpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_lpxs.ma @@ -22,8 +22,8 @@ include "basic_2/rt_computation/fpbg_fqup.ma". (* Basic_2A1: uses: lpxs_fpbg *) lemma lpxs_rneqx_fpbg: - ∀G,L1,L2,T. ❪G,L1❫ ⊢ ⬈* L2 → - (L1 ≅[T] L2 → ⊥) → ❪G,L1,T❫ > ❪G,L2,T❫. + ∀G,L1,L2,T. ❨G,L1❩ ⊢ ⬈* L2 → + (L1 ≅[T] L2 → ⊥) → ❨G,L1,T❩ > ❨G,L2,T❩. #G #L1 #L2 #T #H #H0 elim (lpxs_rneqg_inv_step_sn … H … H0) -H -H0 /4 width=10 by fpbc_fpbs_fpbg, lpxs_feqg_fpbs, lpx_fpbc, feqg_intro_sn, sfull_dec/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs.ma index f7437d26d..441b4f080 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs.ma @@ -30,18 +30,18 @@ interpretation (* Basic_2A1: uses: fpbq_fpbs *) lemma fpb_fpbs: - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫ → - ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ≽ ❨G2,L2,T2❩ → + ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. /2 width=1 by tri_inj/ qed. lemma fpbs_strap1: - ∀G1,G,G2,L1,L,L2,T1,T,T2. ❪G1,L1,T1❫ ≥ ❪G,L,T❫ → - ❪G,L,T❫ ≽ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G1,G,G2,L1,L,L2,T1,T,T2. ❨G1,L1,T1❩ ≥ ❨G,L,T❩ → + ❨G,L,T❩ ≽ ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. /2 width=5 by tri_step/ qed-. lemma fpbs_strap2: - ∀G1,G,G2,L1,L,L2,T1,T,T2. ❪G1,L1,T1❫ ≽ ❪G,L,T❫ → - ❪G,L,T❫ ≥ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G1,G,G2,L1,L,L2,T1,T,T2. ❨G1,L1,T1❩ ≽ ❨G,L,T❩ → + ❨G,L,T❩ ≥ ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. /2 width=5 by tri_TC_strap/ qed-. (* Basic_2A1: removed theorems 3: diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_aaa.ma index ba67c5425..ef7deb9ac 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_aaa.ma @@ -20,8 +20,8 @@ include "basic_2/rt_computation/fpbs_fqup.ma". (* Properties with atomic arity assignment for terms ************************) lemma fpbs_aaa_conf: - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫ → - ∀A1. ❪G1,L1❫ ⊢ T1 ⁝ A1 → ∃A2. ❪G2,L2❫ ⊢ T2 ⁝ A2. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩ → + ∀A1. ❨G1,L1❩ ⊢ T1 ⁝ A1 → ∃A2. ❨G2,L2❩ ⊢ T2 ⁝ A2. #G1 #G2 #L1 #L2 #T1 #T2 #H @(fpbs_ind … H) -G2 -L2 -T2 [ /2 width=2 by ex_intro/ | #G #G2 #L #L2 #T #T2 #_ #H2 #IH1 #A #HA elim (IH1 … HA) -IH1 -A diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpx.ma index 4225caf0e..caa5785b1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpx.ma @@ -23,9 +23,9 @@ include "basic_2/rt_computation/fpbs_lpxs.ma". lemma fpbs_cpx_tneqg_trans (S): reflexive … S → symmetric … S → Transitive … S → (∀s1,s2. Decidable (S s1 s2)) → - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫ → - ∀U2. ❪G2,L2❫ ⊢ T2 ⬈ U2 → (T2 ≛[S] U2 → ⊥) → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈ U1 & T1 ≛[S] U1 → ⊥ & ❪G1,L1,U1❫ ≥ ❪G2,L2,U2❫. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩ → + ∀U2. ❨G2,L2❩ ⊢ T2 ⬈ U2 → (T2 ≛[S] U2 → ⊥) → + ∃∃U1. ❨G1,L1❩ ⊢ T1 ⬈ U1 & T1 ≛[S] U1 → ⊥ & ❨G1,L1,U1❩ ≥ ❨G2,L2,U2❩. #S #H1S #H2S #H3S #H4S #G1 #G2 #L1 #L2 #T1 #T2 #H #U2 #HTU2 #HnTU2 elim (fpbs_inv_star S … H) -H // #G0 #L0 #L3 #T0 #T3 #HT10 #H10 #HL03 #H32 lapply (feqg_cpx_trans_cpx … H32 … HTU2) // #HTU32 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpxs.ma index 4461f2f18..85afa3bab 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpxs.ma @@ -21,47 +21,47 @@ include "basic_2/rt_computation/fpbs_fqus.ma". (* Properties with extended context-sensitive parallel rt-computation *******) lemma cpxs_fpbs: - ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬈* T2 → ❪G,L,T1❫ ≥ ❪G,L,T2❫. + ∀G,L,T1,T2. ❨G,L❩ ⊢ T1 ⬈* T2 → ❨G,L,T1❩ ≥ ❨G,L,T2❩. #G #L #T1 #T2 #H @(cpxs_ind … H) -T2 /3 width=5 by cpx_fpb, fpbs_strap1/ qed. lemma fpbs_cpxs_trans: - ∀G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ≥ ❪G,L,T❫ → - ∀T2. ❪G,L❫ ⊢ T ⬈* T2 → ❪G1,L1,T1❫ ≥ ❪G,L,T2❫. + ∀G1,G,L1,L,T1,T. ❨G1,L1,T1❩ ≥ ❨G,L,T❩ → + ∀T2. ❨G,L❩ ⊢ T ⬈* T2 → ❨G1,L1,T1❩ ≥ ❨G,L,T2❩. #G1 #G #L1 #L #T1 #T #H1 #T2 #H @(cpxs_ind … H) -T2 /3 width=5 by fpbs_strap1, cpx_fpb/ qed-. lemma cpxs_fpbs_trans: - ∀G1,G2,L1,L2,T,T2. ❪G1,L1,T❫ ≥ ❪G2,L2,T2❫ → - ∀T1. ❪G1,L1❫ ⊢ T1 ⬈* T → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G1,G2,L1,L2,T,T2. ❨G1,L1,T❩ ≥ ❨G2,L2,T2❩ → + ∀T1. ❨G1,L1❩ ⊢ T1 ⬈* T → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. #G1 #G2 #L1 #L2 #T #T2 #H1 #T1 #H @(cpxs_ind_dx … H) -T1 /3 width=5 by fpbs_strap2, cpx_fpb/ qed-. lemma cpxs_teqg_fpbs_trans (S): reflexive … S → symmetric … S → - ∀G1,L1,T1,T. ❪G1,L1❫ ⊢ T1 ⬈* T → ∀T0. T ≛[S] T0 → - ∀G2,L2,T2. ❪G1,L1,T0❫ ≥ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G1,L1,T1,T. ❨G1,L1❩ ⊢ T1 ⬈* T → ∀T0. T ≛[S] T0 → + ∀G2,L2,T2. ❨G1,L1,T0❩ ≥ ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. /3 width=6 by cpxs_fpbs_trans, teqg_fpbs_trans/ qed-. lemma cpxs_teqg_fpbs (S): reflexive … S → symmetric … S → - ∀G,L,T1,T. ❪G,L❫ ⊢ T1 ⬈* T → - ∀T2. T ≛[S] T2 → ❪G,L,T1❫ ≥ ❪G,L,T2❫. + ∀G,L,T1,T. ❨G,L❩ ⊢ T1 ⬈* T → + ∀T2. T ≛[S] T2 → ❨G,L,T1❩ ≥ ❨G,L,T2❩. /4 width=5 by cpxs_fpbs_trans, feqg_fpbs, teqg_feqg/ qed. (* Properties with plus-iterated structural successor for closures **********) lemma cpxs_fqup_fpbs: - ∀G1,L1,T1,T. ❪G1,L1❫ ⊢ T1 ⬈* T → - ∀G2,L2,T2. ❪G1,L1,T❫ ⬂+ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G1,L1,T1,T. ❨G1,L1❩ ⊢ T1 ⬈* T → + ∀G2,L2,T2. ❨G1,L1,T❩ ⬂+ ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. /3 width=5 by fpbs_fqup_trans, cpxs_fpbs/ qed. (* Properties with star-iterated structural successor for closures **********) lemma cpxs_fqus_fpbs: - ∀G1,L1,T1,T. ❪G1,L1❫ ⊢ T1 ⬈* T → - ∀G2,L2,T2. ❪G1,L1,T❫ ⬂* ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G1,L1,T1,T. ❨G1,L1❩ ⊢ T1 ⬈* T → + ∀G2,L2,T2. ❨G1,L1,T❩ ⬂* ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. /3 width=5 by fpbs_fqus_trans, cpxs_fpbs/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_csx.ma index 159b57bcb..11eb81f6c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_csx.ma @@ -21,8 +21,8 @@ include "basic_2/rt_computation/fpbs_fqup.ma". (* Basic_2A1: was: csx_fpbs_conf *) lemma fpbs_csx_conf: - ∀G1,L1,T1. ❪G1,L1❫ ⊢ ⬈*𝐒 T1 → - ∀G2,L2,T2. ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫ → ❪G2,L2❫ ⊢ ⬈*𝐒 T2. + ∀G1,L1,T1. ❨G1,L1❩ ⊢ ⬈*𝐒 T1 → + ∀G2,L2,T2. ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩ → ❨G2,L2❩ ⊢ ⬈*𝐒 T2. #G1 #L1 #T1 #HT1 #G2 #L2 #T2 #H @(fpbs_ind … H) -G2 -L2 -T2 /2 width=5 by csx_fpb_conf/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_feqg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_feqg.ma index 6c92352e4..3d39cebeb 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_feqg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_feqg.ma @@ -23,31 +23,31 @@ include "basic_2/rt_computation/fpbs_fqup.ma". (* Basic_2A1: uses: lleq_fpbs fleq_fpbs *) lemma feqg_fpbs (S) (G1) (G2) (L1) (L2) (T1) (T2): reflexive … S → symmetric … S → - ❪G1,L1,T1❫ ≛[S] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ❨G1,L1,T1❩ ≛[S] ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. /3 width=5 by fpb_fpbs, feqg_fpb/ qed. (* Basic_2A1: uses: fpbs_lleq_trans *) lemma fpbs_feqg_trans (S) (G) (L) (T): reflexive … S → symmetric … S → - ∀G1,L1,T1. ❪G1,L1,T1❫ ≥ ❪G,L,T❫ → - ∀G2,L2,T2. ❪G,L,T❫ ≛[S] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G1,L1,T1. ❨G1,L1,T1❩ ≥ ❨G,L,T❩ → + ∀G2,L2,T2. ❨G,L,T❩ ≛[S] ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. /3 width=9 by fpbs_strap1, feqg_fpb/ qed-. (* Basic_2A1: uses: lleq_fpbs_trans *) lemma feqg_fpbs_trans (S) (G) (L) (T): reflexive … S → symmetric … S → - ∀G2,L2,T2. ❪G,L,T❫ ≥ ❪G2,L2,T2❫ → - ∀G1,L1,T1. ❪G1,L1,T1❫ ≛[S] ❪G,L,T❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G2,L2,T2. ❨G,L,T❩ ≥ ❨G2,L2,T2❩ → + ∀G1,L1,T1. ❨G1,L1,T1❩ ≛[S] ❨G,L,T❩ → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. /3 width=5 by fpbs_strap2, feqg_fpb/ qed-. lemma teqg_fpbs_trans (S) (T): reflexive … S → symmetric … S → ∀T1. T1 ≛[S] T → - ∀G1,G2,L1,L2,T2. ❪G1,L1,T❫ ≥ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G1,G2,L1,L2,T2. ❨G1,L1,T❩ ≥ ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. /3 width=8 by feqg_fpbs_trans, teqg_feqg/ qed-. lemma fpbs_teqg_trans (S) (T): reflexive … S → symmetric … S → - ∀G1,G2,L1,L2,T1. ❪G1,L1,T1❫ ≥ ❪G2,L2,T❫ → - ∀T2. T ≛[S] T2 → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G1,G2,L1,L2,T1. ❨G1,L1,T1❩ ≥ ❨G2,L2,T❩ → + ∀T2. T ≛[S] T2 → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. /3 width=8 by fpbs_feqg_trans, teqg_feqg/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fpbc.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fpbc.ma index e8bd0ebc4..cd61e983d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fpbc.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fpbc.ma @@ -21,16 +21,16 @@ include "basic_2/rt_computation/fpbs_feqg.ma". (* Properties with proper parallel rst-reduction on closures ****************) lemma fpbc_fpbs: - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫ → - ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ≻ ❨G2,L2,T2❩ → + ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. /3 width=1 by fpb_fpbs, fpbc_fwd_fpb/ qed. (* Inversion lemmas with proper parallel rst-reduction on closures **********) lemma fpbs_inv_fpbc_sn: - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫ → - ∨∨ ❪G1,L1,T1❫ ≅ ❪G2,L2,T2❫ - | ∃∃G,L,T. ❪G1,L1,T1❫ ≻ ❪G,L,T❫ & ❪G,L,T❫ ≥ ❪G2,L2,T2❫. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩ → + ∨∨ ❨G1,L1,T1❩ ≅ ❨G2,L2,T2❩ + | ∃∃G,L,T. ❨G1,L1,T1❩ ≻ ❨G,L,T❩ & ❨G,L,T❩ ≥ ❨G2,L2,T2❩. #G1 #G2 #L1 #L2 #T1 #T2 #H @(fpbs_ind … H) -G2 -L2 -T2 [ /3 width=1 by feqg_refl, or_introl/ | #G #G2 #L #L2 #T #T2 #_ #H2 * [ #H1 | * #G0 #L0 #T0 #H10 #H0 ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqup.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqup.ma index 1ce4ac358..f49c3d568 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqup.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqup.ma @@ -21,14 +21,14 @@ include "basic_2/rt_computation/fpbs.ma". lemma fpbs_ind: ∀G1,L1,T1. ∀Q:relation3 genv lenv term. Q G1 L1 T1 → - (∀G,G2,L,L2,T,T2. ❪G1,L1,T1❫ ≥ ❪G,L,T❫ → ❪G,L,T❫ ≽ ❪G2,L2,T2❫ → Q G L T → Q G2 L2 T2) → - ∀G2,L2,T2. ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫ → Q G2 L2 T2. + (∀G,G2,L,L2,T,T2. ❨G1,L1,T1❩ ≥ ❨G,L,T❩ → ❨G,L,T❩ ≽ ❨G2,L2,T2❩ → Q G L T → Q G2 L2 T2) → + ∀G2,L2,T2. ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩ → Q G2 L2 T2. /3 width=8 by tri_TC_star_ind/ qed-. lemma fpbs_ind_dx: ∀G2,L2,T2. ∀Q:relation3 genv lenv term. Q G2 L2 T2 → - (∀G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ≽ ❪G,L,T❫ → ❪G,L,T❫ ≥ ❪G2,L2,T2❫ → Q G L T → Q G1 L1 T1) → - ∀G1,L1,T1. ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫ → Q G1 L1 T1. + (∀G1,G,L1,L,T1,T. ❨G1,L1,T1❩ ≽ ❨G,L,T❩ → ❨G,L,T❩ ≥ ❨G2,L2,T2❩ → Q G L T → Q G1 L1 T1) → + ∀G1,L1,T1. ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩ → Q G1 L1 T1. /3 width=8 by tri_TC_star_ind_dx/ qed-. (* Advanced properties ******************************************************) @@ -40,21 +40,21 @@ lemma fpbs_refl: (* Properties with plus-iterated structural successor for closures **********) lemma fqup_fpbs: - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂+ ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2 /4 width=5 by fqu_fquq, fquq_fpb, tri_step/ qed. lemma fpbs_fqup_trans: - ∀G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ≥ ❪G,L,T❫ → - ∀G2,L2,T2. ❪G,L,T❫ ⬂+ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G1,G,L1,L,T1,T. ❨G1,L1,T1❩ ≥ ❨G,L,T❩ → + ∀G2,L2,T2. ❨G,L,T❩ ⬂+ ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. #G1 #G #L1 #L #T1 #T #H1 #G2 #L2 #T2 #H @(fqup_ind … H) -G2 -L2 -T2 /3 width=5 by fpbs_strap1, fqu_fpb/ qed-. lemma fqup_fpbs_trans: - ∀G,G2,L,L2,T,T2. ❪G,L,T❫ ≥ ❪G2,L2,T2❫ → - ∀G1,L1,T1. ❪G1,L1,T1❫ ⬂+ ❪G,L,T❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G,G2,L,L2,T,T2. ❨G,L,T❩ ≥ ❨G2,L2,T2❩ → + ∀G1,L1,T1. ❨G1,L1,T1❩ ⬂+ ❨G,L,T❩ → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. #G #G2 #L #L2 #T #T2 #H1 #G1 #L1 #T1 #H @(fqup_ind_dx … H) -G1 -L1 -T1 /3 width=9 by fpbs_strap2, fqu_fpb/ qed-. \ No newline at end of file diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqus.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqus.ma index c6544a135..21ddab904 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqus.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqus.ma @@ -20,22 +20,22 @@ include "basic_2/rt_computation/fpbs_fqup.ma". (* Properties with star-iterated structural successor for closures **********) lemma fqus_fpbs: - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂* ❪G2,L2,T2❫ → - ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂* ❨G2,L2,T2❩ → + ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -G2 -L2 -T2 /3 width=5 by fquq_fpb, fpbs_strap1/ qed. lemma fpbs_fqus_trans: - ∀G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ≥ ❪G,L,T❫ → - ∀G2,L2,T2. ❪G,L,T❫ ⬂* ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G1,G,L1,L,T1,T. ❨G1,L1,T1❩ ≥ ❨G,L,T❩ → + ∀G2,L2,T2. ❨G,L,T❩ ⬂* ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. #G1 #G #L1 #L #T1 #T #H1 #G2 #L2 #T2 #H @(fqus_ind … H) -G2 -L2 -T2 /3 width=5 by fpbs_strap1, fquq_fpb/ qed-. lemma fqus_fpbs_trans: - ∀G,G2,L,L2,T,T2. ❪G,L,T❫ ≥ ❪G2,L2,T2❫ → - ∀G1,L1,T1. ❪G1,L1,T1❫ ⬂* ❪G,L,T❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G,G2,L,L2,T,T2. ❨G,L,T❩ ≥ ❨G2,L2,T2❩ → + ∀G1,L1,T1. ❨G1,L1,T1❩ ⬂* ❨G,L,T❩ → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. #G #G2 #L #L2 #T #T2 #H1 #G1 #L1 #T1 #H @(fqus_ind_dx … H) -G1 -L1 -T1 /3 width=5 by fpbs_strap2, fquq_fpb/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_lpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_lpx.ma index e9420b5e5..f78a4b761 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_lpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_lpx.ma @@ -20,12 +20,12 @@ include "basic_2/rt_computation/fpbs_feqg.ma". (* Properties with extended rt-transition on full local environments *******) lemma fpbs_lpx_trans (L): - ∀G1,G2,L1,T1,T2. ❪G1,L1,T1❫ ≥ ❪G2,L,T2❫ → - ∀L2. ❪G2,L❫ ⊢ ⬈ L2 → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G1,G2,L1,T1,T2. ❨G1,L1,T1❩ ≥ ❨G2,L,T2❩ → + ∀L2. ❨G2,L❩ ⊢ ⬈ L2 → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. /3 width=5 by fpbs_strap1, lpx_fpb/ qed-. lemma teqg_reqg_lpx_fpbs (S): reflexive … S → symmetric … S → ∀T1,T2. T1 ≛[S] T2 → ∀L1,L0. L1 ≛[S,T2] L0 → - ∀G,L2. ❪G,L0❫ ⊢ ⬈ L2 → ❪G,L1,T1❫ ≥ ❪G,L2,T2❫. + ∀G,L2. ❨G,L0❩ ⊢ ⬈ L2 → ❨G,L1,T1❩ ≥ ❨G,L2,T2❩. /4 width=7 by feqg_fpbs, fpbs_strap1, lpx_fpb, feqg_intro_dx/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_lpxs.ma index 6f3e97a95..6a5363a99 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_lpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_lpxs.ma @@ -23,21 +23,21 @@ include "basic_2/rt_computation/fpbs_cpxs.ma". (* Properties with extended rt-computation on full local environments ******) lemma lpxs_fpbs: - ∀G,L1,L2,T. ❪G,L1❫ ⊢ ⬈* L2 → ❪G,L1,T❫ ≥ ❪G,L2,T❫. + ∀G,L1,L2,T. ❨G,L1❩ ⊢ ⬈* L2 → ❨G,L1,T❩ ≥ ❨G,L2,T❩. #G #L1 #L2 #T #H @(lpxs_ind_dx … H) -L2 /3 width=5 by lpx_fpb, fpbs_strap1/ qed. lemma fpbs_lpxs_trans: - ∀G1,G2,L1,L,T1,T2. ❪G1,L1,T1❫ ≥ ❪G2,L,T2❫ → - ∀L2. ❪G2,L❫ ⊢ ⬈* L2 → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G1,G2,L1,L,T1,T2. ❨G1,L1,T1❩ ≥ ❨G2,L,T2❩ → + ∀L2. ❨G2,L❩ ⊢ ⬈* L2 → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. #G1 #G2 #L1 #L #T1 #T2 #H1 #L2 #H @(lpxs_ind_dx … H) -L2 /3 width=5 by fpbs_strap1, lpx_fpb/ qed-. lemma lpxs_fpbs_trans: - ∀G1,G2,L,L2,T1,T2. ❪G1,L,T1❫ ≥ ❪G2,L2,T2❫ → - ∀L1. ❪G1,L1❫ ⊢ ⬈* L → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G1,G2,L,L2,T1,T2. ❨G1,L,T1❩ ≥ ❨G2,L2,T2❩ → + ∀L1. ❨G1,L1❩ ⊢ ⬈* L → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. #G1 #G2 #L #L2 #T1 #T2 #H1 #L1 #H @(lpxs_ind_sn … H) -L1 /3 width=5 by fpbs_strap2, lpx_fpb/ qed-. @@ -45,31 +45,31 @@ qed-. (* Basic_2A1: uses: lpxs_lleq_fpbs *) lemma lpxs_feqg_fpbs (S) (L): reflexive … S → symmetric … S → - ∀G1,L1,T1. ❪G1,L1❫ ⊢ ⬈* L → - ∀G2,L2,T2. ❪G1,L,T1❫ ≛[S] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G1,L1,T1. ❨G1,L1❩ ⊢ ⬈* L → + ∀G2,L2,T2. ❨G1,L,T1❩ ≛[S] ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. /3 width=4 by lpxs_fpbs_trans, feqg_fpbs/ qed. (* Properties with star-iterated structural successor for closures **********) lemma fqus_lpxs_fpbs: - ∀G1,G2,L1,L,T1,T2. ❪G1,L1,T1❫ ⬂* ❪G2,L,T2❫ → - ∀L2. ❪G2,L❫ ⊢ ⬈* L2 → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G1,G2,L1,L,T1,T2. ❨G1,L1,T1❩ ⬂* ❨G2,L,T2❩ → + ∀L2. ❨G2,L❩ ⊢ ⬈* L2 → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. /3 width=3 by fpbs_lpxs_trans, fqus_fpbs/ qed. (* Properties with extended context-sensitive parallel rt-computation *******) lemma cpxs_fqus_lpxs_fpbs: - ∀G1,L1,T1,T. ❪G1,L1❫ ⊢ T1 ⬈* T → - ∀G2,L,T2. ❪G1,L1,T❫ ⬂* ❪G2,L,T2❫ → - ∀L2.❪G2,L❫ ⊢ ⬈* L2 → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G1,L1,T1,T. ❨G1,L1❩ ⊢ T1 ⬈* T → + ∀G2,L,T2. ❨G1,L1,T❩ ⬂* ❨G2,L,T2❩ → + ∀L2.❨G2,L❩ ⊢ ⬈* L2 → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. /3 width=5 by cpxs_fqus_fpbs, fpbs_lpxs_trans/ qed. lemma fpbs_cpxs_teqg_fqup_lpx_trans (S): reflexive … S → symmetric … S → - ∀G1,G3,L1,L3,T1,T3. ❪G1,L1,T1❫ ≥ ❪G3,L3,T3❫ → - ∀T4. ❪G3,L3❫ ⊢ T3 ⬈* T4 → ∀T5. T4 ≛[S] T5 → - ∀G2,L4,T2. ❪G3,L3,T5❫ ⬂+ ❪G2,L4,T2❫ → - ∀L2. ❪G2,L4❫ ⊢ ⬈ L2 → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G1,G3,L1,L3,T1,T3. ❨G1,L1,T1❩ ≥ ❨G3,L3,T3❩ → + ∀T4. ❨G3,L3❩ ⊢ T3 ⬈* T4 → ∀T5. T4 ≛[S] T5 → + ∀G2,L4,T2. ❨G3,L3,T5❩ ⬂+ ❨G2,L4,T2❩ → + ∀L2. ❨G2,L4❩ ⊢ ⬈ L2 → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. #S #H1S #H2S #G1 #G3 #L1 #L3 #T1 #T3 #H13 #T4 #HT34 #T5 #HT45 #G2 #L4 #T2 #H34 #L2 #HL42 @(fpbs_lpx_trans … HL42) -L2 (**) (* full auto too slow *) @(fpbs_fqup_trans … H34) -G2 -L4 -T2 @@ -81,9 +81,9 @@ qed-. (* Basic_2A1: uses: fpbs_intro_alt *) lemma fpbs_intro_star (S) (G) (T) (T0) (L) (L0): reflexive … S → symmetric … S → - ∀G1,L1,T1. ❪G1,L1❫ ⊢ T1 ⬈* T → - ❪G1,L1,T❫ ⬂* ❪G,L,T0❫ → ❪G,L❫ ⊢ ⬈* L0 → - ∀G2,L2,T2. ❪G,L0,T0❫ ≛[S] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫. + ∀G1,L1,T1. ❨G1,L1❩ ⊢ T1 ⬈* T → + ❨G1,L1,T❩ ⬂* ❨G,L,T0❩ → ❨G,L❩ ⊢ ⬈* L0 → + ∀G2,L2,T2. ❨G,L0,T0❩ ≛[S] ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩. /3 width=8 by cpxs_fqus_lpxs_fpbs, fpbs_strap1, feqg_fpb/ qed. (* Advanced inversion lemmas *************************************************) @@ -91,8 +91,8 @@ lemma fpbs_intro_star (S) (G) (T) (T0) (L) (L0): (* Basic_2A1: uses: fpbs_inv_alt *) lemma fpbs_inv_star (S): reflexive … S → symmetric … S → Transitive … S → - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫ → - ∃∃G,L,L0,T,T0. ❪G1,L1❫ ⊢ T1 ⬈* T & ❪G1,L1,T❫ ⬂* ❪G,L,T0❫ & ❪G,L❫ ⊢ ⬈* L0 & ❪G,L0,T0❫ ≛[S] ❪G2,L2,T2❫. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩ → + ∃∃G,L,L0,T,T0. ❨G1,L1❩ ⊢ T1 ⬈* T & ❨G1,L1,T❩ ⬂* ❨G,L,T0❩ & ❨G,L❩ ⊢ ⬈* L0 & ❨G,L0,T0❩ ≛[S] ❨G2,L2,T2❩. #S #H1S #H2S #H3S #G1 #G2 #L1 #L2 #T1 #T2 #H @(fpbs_ind_dx … H) -G1 -L1 -T1 [ /3 width=9 by feqg_refl, ex4_5_intro/ | #G1 #G0 #L1 #L0 #T1 #T0 * diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb.ma index 3f4ccd360..f1434a06f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb.ma @@ -27,18 +27,18 @@ interpretation (* Basic properties *********************************************************) lemma fsb_intro (G1) (L1) (T1): - (∀G2,L2,T2. ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫ → ≥𝐒 ❪G2,L2,T2❫) → ≥𝐒 ❪G1,L1,T1❫. + (∀G2,L2,T2. ❨G1,L1,T1❩ ≻ ❨G2,L2,T2❩ → ≥𝐒 ❨G2,L2,T2❩) → ≥𝐒 ❨G1,L1,T1❩. /5 width=1 by fpbc_intro, SN3_intro/ qed. (* Basic eliminators ********************************************************) (* Note: eliminator with shorter ground hypothesis *) lemma fsb_ind (Q:relation3 …): - (∀G1,L1,T1. ≥𝐒 ❪G1,L1,T1❫ → - (∀G2,L2,T2. ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫ → Q G2 L2 T2) → + (∀G1,L1,T1. ≥𝐒 ❨G1,L1,T1❩ → + (∀G2,L2,T2. ❨G1,L1,T1❩ ≻ ❨G2,L2,T2❩ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G,L,T. ≥𝐒 ❪G,L,T❫ → Q G L T. + ∀G,L,T. ≥𝐒 ❨G,L,T❩ → Q G L T. #Q #IH #G #L #T #H elim H -G -L -T #G1 #L1 #T1 #H1 #IH1 @IH -IH [ /4 width=1 by SN3_intro/ ] -H1 #G2 #L2 #T2 #H diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_aaa.ma index 4da3d3d9f..c0194cfe4 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_aaa.ma @@ -21,18 +21,18 @@ include "basic_2/rt_computation/fsb_csx.ma". (* Main properties with atomic arity assignment for terms *******************) theorem aaa_fsb (G) (L) (T) (A): - ❪G,L❫ ⊢ T ⁝ A → ≥𝐒 ❪G,L,T❫. + ❨G,L❩ ⊢ T ⁝ A → ≥𝐒 ❨G,L,T❩. /3 width=2 by aaa_csx, csx_fsb/ qed. (* Advanced eliminators with atomic arity assignment for terms **************) fact aaa_ind_fpbc_aux (Q:relation3 …): (∀G1,L1,T1,A. - ❪G1,L1❫ ⊢ T1 ⁝ A → - (∀G2,L2,T2. ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫ → Q G2 L2 T2) → + ❨G1,L1❩ ⊢ T1 ⁝ A → + (∀G2,L2,T2. ❨G1,L1,T1❩ ≻ ❨G2,L2,T2❩ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G,L,T. ❪G,L❫ ⊢ ⬈*𝐒 T → ∀A. ❪G,L❫ ⊢ T ⁝ A → Q G L T. + ∀G,L,T. ❨G,L❩ ⊢ ⬈*𝐒 T → ∀A. ❨G,L❩ ⊢ T ⁝ A → Q G L T. #R #IH #G #L #T #H @(csx_ind_fpbc … H) -G -L -T #G1 #L1 #T1 #H1 #IH1 #A1 #HTA1 @IH -IH // #G2 #L2 #T2 #H12 elim (fpbs_aaa_conf … G2 … L2 … T2 … HTA1) -A1 @@ -41,20 +41,20 @@ qed-. lemma aaa_ind_fpbc (Q:relation3 …): (∀G1,L1,T1,A. - ❪G1,L1❫ ⊢ T1 ⁝ A → - (∀G2,L2,T2. ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫ → Q G2 L2 T2) → + ❨G1,L1❩ ⊢ T1 ⁝ A → + (∀G2,L2,T2. ❨G1,L1,T1❩ ≻ ❨G2,L2,T2❩ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → Q G L T. + ∀G,L,T,A. ❨G,L❩ ⊢ T ⁝ A → Q G L T. /4 width=4 by aaa_ind_fpbc_aux, aaa_csx/ qed-. fact aaa_ind_fpbg_aux (Q:relation3 …): (∀G1,L1,T1,A. - ❪G1,L1❫ ⊢ T1 ⁝ A → - (∀G2,L2,T2. ❪G1,L1,T1❫ > ❪G2,L2,T2❫ → Q G2 L2 T2) → + ❨G1,L1❩ ⊢ T1 ⁝ A → + (∀G2,L2,T2. ❨G1,L1,T1❩ > ❨G2,L2,T2❩ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G,L,T. ❪G,L❫ ⊢ ⬈*𝐒 T → ∀A. ❪G,L❫ ⊢ T ⁝ A → Q G L T. + ∀G,L,T. ❨G,L❩ ⊢ ⬈*𝐒 T → ∀A. ❨G,L❩ ⊢ T ⁝ A → Q G L T. #Q #IH #G #L #T #H @(csx_ind_fpbg … H) -G -L -T #G1 #L1 #T1 #H1 #IH1 #A1 #HTA1 @IH -IH // #G2 #L2 #T2 #H12 elim (fpbs_aaa_conf … G2 … L2 … T2 … HTA1) -A1 @@ -63,9 +63,9 @@ qed-. lemma aaa_ind_fpbg (Q:relation3 …): (∀G1,L1,T1,A. - ❪G1,L1❫ ⊢ T1 ⁝ A → - (∀G2,L2,T2. ❪G1,L1,T1❫ > ❪G2,L2,T2❫ → Q G2 L2 T2) → + ❨G1,L1❩ ⊢ T1 ⁝ A → + (∀G2,L2,T2. ❨G1,L1,T1❩ > ❨G2,L2,T2❩ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → Q G L T. + ∀G,L,T,A. ❨G,L❩ ⊢ T ⁝ A → Q G L T. /4 width=4 by aaa_ind_fpbg_aux, aaa_csx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_csx.ma index e3ad463a6..028ac11ae 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_csx.ma @@ -24,7 +24,7 @@ include "basic_2/rt_computation/fsb_fpbg.ma". (* Inversion lemmas with context-sensitive stringly rt-normalizing terms ****) lemma fsb_inv_csx: - ∀G,L,T. ≥𝐒 ❪G,L,T❫ → ❪G,L❫ ⊢ ⬈*𝐒 T. + ∀G,L,T. ≥𝐒 ❨G,L,T❩ → ❨G,L❩ ⊢ ⬈*𝐒 T. #G #L #T #H @(fsb_ind … H) -G -L -T /5 width=1 by csx_intro, cpx_fpbc/ qed-. @@ -32,8 +32,8 @@ qed-. (* Propreties with context-sensitive stringly rt-normalizing terms **********) lemma csx_fsb_fpbs: - ∀G1,L1,T1. ❪G1,L1❫ ⊢ ⬈*𝐒 T1 → - ∀G2,L2,T2. ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫ → ≥𝐒 ❪G2,L2,T2❫. + ∀G1,L1,T1. ❨G1,L1❩ ⊢ ⬈*𝐒 T1 → + ∀G2,L2,T2. ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩ → ≥𝐒 ❨G2,L2,T2❩. #G1 #L1 #T1 #H @(csx_ind … H) -T1 #T1 #HT1 #IHc #G2 #L2 #T2 @(fqup_wf_ind (Ⓣ) … G2 L2 T2) -G2 -L2 -T2 #G0 #L0 #T0 #IHu #H10 @@ -64,25 +64,25 @@ elim (fpbc_fwd_lpx … H) -H * [ -IHd -IHc | -IHu -IHd |] qed. lemma csx_fsb (G) (L) (T): - ❪G,L❫ ⊢ ⬈*𝐒 T → ≥𝐒 ❪G,L,T❫. + ❨G,L❩ ⊢ ⬈*𝐒 T → ≥𝐒 ❨G,L,T❩. /2 width=5 by csx_fsb_fpbs/ qed. (* Advanced eliminators *****************************************************) lemma csx_ind_fpbc (Q:relation3 …): (∀G1,L1,T1. - ❪G1,L1❫ ⊢ ⬈*𝐒 T1 → - (∀G2,L2,T2. ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫ → Q G2 L2 T2) → + ❨G1,L1❩ ⊢ ⬈*𝐒 T1 → + (∀G2,L2,T2. ❨G1,L1,T1❩ ≻ ❨G2,L2,T2❩ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G,L,T. ❪G,L❫ ⊢ ⬈*𝐒 T → Q G L T. + ∀G,L,T. ❨G,L❩ ⊢ ⬈*𝐒 T → Q G L T. /4 width=4 by fsb_inv_csx, csx_fsb, fsb_ind/ qed-. lemma csx_ind_fpbg (Q:relation3 …): (∀G1,L1,T1. - ❪G1,L1❫ ⊢ ⬈*𝐒 T1 → - (∀G2,L2,T2. ❪G1,L1,T1❫ > ❪G2,L2,T2❫ → Q G2 L2 T2) → + ❨G1,L1❩ ⊢ ⬈*𝐒 T1 → + (∀G2,L2,T2. ❨G1,L1,T1❩ > ❨G2,L2,T2❩ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G,L,T. ❪G,L❫ ⊢ ⬈*𝐒 T → Q G L T. + ∀G,L,T. ❨G,L❩ ⊢ ⬈*𝐒 T → Q G L T. /4 width=4 by fsb_inv_csx, csx_fsb, fsb_ind_fpbg/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_feqg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_feqg.ma index 73ae6efed..808ee3bf1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_feqg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_feqg.ma @@ -22,8 +22,8 @@ include "basic_2/rt_computation/fsb.ma". lemma fsb_feqg_trans (S): reflexive … S → symmetric … S → Transitive … S → - ∀G1,L1,T1. ≥𝐒 ❪G1,L1,T1❫ → - ∀G2,L2,T2. ❪G1,L1,T1❫ ≛[S] ❪G2,L2,T2❫ → ≥𝐒 ❪G2,L2,T2❫. + ∀G1,L1,T1. ≥𝐒 ❨G1,L1,T1❩ → + ∀G2,L2,T2. ❨G1,L1,T1❩ ≛[S] ❨G2,L2,T2❩ → ≥𝐒 ❨G2,L2,T2❩. #S #H1S #H2S #H3S #G1 #L1 #T1 #H @(fsb_ind … H) -G1 -L1 -T1 #G1 #L1 #T1 #_ #IH #G2 #L2 #T2 #H12 @fsb_intro #G #L #T #H2 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_fpbg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_fpbg.ma index afe697426..12c72dceb 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_fpbg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_fpbg.ma @@ -21,8 +21,8 @@ include "basic_2/rt_computation/fsb_feqg.ma". (* Properties with parallel rst-computation for closures ********************) lemma fsb_fpbs_trans: - ∀G1,L1,T1. ≥𝐒 ❪G1,L1,T1❫ → - ∀G2,L2,T2. ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫ → ≥𝐒 ❪G2,L2,T2❫. + ∀G1,L1,T1. ≥𝐒 ❨G1,L1,T1❩ → + ∀G2,L2,T2. ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩ → ≥𝐒 ❨G2,L2,T2❩. #G1 #L1 #T1 #H @(fsb_ind … H) -G1 -L1 -T1 #G1 #L1 #T1 #H1 #IH #G2 #L2 #T2 #H12 elim (fpbs_inv_fpbg … H12) -H12 @@ -35,27 +35,27 @@ qed-. (* Properties with parallel rst-transition for closures *********************) lemma fsb_fpb_trans: - ∀G1,L1,T1. ≥𝐒 ❪G1,L1,T1❫ → - ∀G2,L2,T2. ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫ → ≥𝐒 ❪G2,L2,T2❫. + ∀G1,L1,T1. ≥𝐒 ❨G1,L1,T1❩ → + ∀G2,L2,T2. ❨G1,L1,T1❩ ≽ ❨G2,L2,T2❩ → ≥𝐒 ❨G2,L2,T2❩. /3 width=5 by fsb_fpbs_trans, fpb_fpbs/ qed-. (* Properties with proper parallel rst-computation for closures *************) lemma fsb_intro_fpbg: ∀G1,L1,T1. - (∀G2,L2,T2. ❪G1,L1,T1❫ > ❪G2,L2,T2❫ → ≥𝐒 ❪G2,L2,T2❫) → - ≥𝐒 ❪G1,L1,T1❫. + (∀G2,L2,T2. ❨G1,L1,T1❩ > ❨G2,L2,T2❩ → ≥𝐒 ❨G2,L2,T2❩) → + ≥𝐒 ❨G1,L1,T1❩. /4 width=1 by fsb_intro, fpbc_fpbg/ qed. (* Eliminators with proper parallel rst-computation for closures ************) lemma fsb_ind_fpbg_fpbs (Q:relation3 …): - (∀G1,L1,T1. ≥𝐒 ❪G1,L1,T1❫ → - (∀G2,L2,T2. ❪G1,L1,T1❫ > ❪G2,L2,T2❫ → Q G2 L2 T2) → + (∀G1,L1,T1. ≥𝐒 ❨G1,L1,T1❩ → + (∀G2,L2,T2. ❨G1,L1,T1❩ > ❨G2,L2,T2❩ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G1,L1,T1. ≥𝐒 ❪G1,L1,T1❫ → - ∀G2,L2,T2. ❪G1,L1,T1❫ ≥ ❪G2,L2,T2❫ → Q G2 L2 T2. + ∀G1,L1,T1. ≥𝐒 ❨G1,L1,T1❩ → + ∀G2,L2,T2. ❨G1,L1,T1❩ ≥ ❨G2,L2,T2❩ → Q G2 L2 T2. #Q #IH1 #G1 #L1 #T1 #H @(fsb_ind … H) -G1 -L1 -T1 #G1 #L1 #T1 #H1 #IH #G2 #L2 #T2 #H12 @IH1 -IH1 @@ -68,11 +68,11 @@ lemma fsb_ind_fpbg_fpbs (Q:relation3 …): qed-. lemma fsb_ind_fpbg (Q:relation3 …): - (∀G1,L1,T1. ≥𝐒 ❪G1,L1,T1❫ → - (∀G2,L2,T2. ❪G1,L1,T1❫ > ❪G2,L2,T2❫ → Q G2 L2 T2) → + (∀G1,L1,T1. ≥𝐒 ❨G1,L1,T1❩ → + (∀G2,L2,T2. ❨G1,L1,T1❩ > ❨G2,L2,T2❩ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G1,L1,T1. ≥𝐒 ❪G1,L1,T1❫ → Q G1 L1 T1. + ∀G1,L1,T1. ≥𝐒 ❨G1,L1,T1❩ → Q G1 L1 T1. #Q #IH #G1 #L1 #T1 #H @(fsb_ind_fpbg_fpbs … H) -H /3 width=1 by/ qed-. @@ -80,7 +80,7 @@ qed-. (* Inversion lemmas with proper parallel rst-computation for closures *******) lemma fsb_fpbg_refl_false (G) (L) (T): - ≥𝐒 ❪G,L,T❫ → ❪G,L,T❫ > ❪G,L,T❫ → ⊥. + ≥𝐒 ❨G,L,T❩ → ❨G,L,T❩ > ❨G,L,T❩ → ⊥. #G #L #T #H @(fsb_ind_fpbg … H) -G -L -T #G1 #L1 #T1 #_ #IH #H /2 width=5 by/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_csx.ma index c11a6bfc9..82137a8e5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_csx.ma @@ -22,7 +22,7 @@ include "basic_2/rt_computation/jsx_lsubr.ma". lemma jsx_csx_conf (G): ∀L1,L2. G ⊢ L1 ⊒ L2 → - ∀T. ❪G,L1❫ ⊢ ⬈*𝐒 T → ❪G,L2❫ ⊢ ⬈*𝐒 T. + ∀T. ❨G,L1❩ ⊢ ⬈*𝐒 T → ❨G,L2❩ ⊢ ⬈*𝐒 T. /3 width=5 by jsx_fwd_lsubr, csx_lsubr_conf/ qed-. (* Properties with strongly rt-normalizing referred local environments ******) diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_drops.ma index 2fb26c5b5..ab13f0718 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_drops.ma @@ -21,7 +21,7 @@ include "basic_2/rt_computation/jsx.ma". lemma jsx_fwd_drops_atom_sn (b) (G): ∀L1,L2. G ⊢ L1 ⊒ L2 → - ∀f. 𝐔❪f❫ → ⇩*[b,f]L1 ≘ ⋆ → ⇩*[b,f]L2 ≘ ⋆. + ∀f. 𝐔❨f❩ → ⇩*[b,f]L1 ≘ ⋆ → ⇩*[b,f]L2 ≘ ⋆. #b #G #L1 #L2 #H elim H -L1 -L2 [ #f #_ #H // | #I #K1 #K2 #_ #IH #f #Hf #H @@ -35,7 +35,7 @@ qed-. lemma jsx_fwd_drops_unit_sn (b) (G): ∀L1,L2. G ⊢ L1 ⊒ L2 → - ∀f. 𝐔❪f❫ → ∀I,K1. ⇩*[b,f]L1 ≘ K1.ⓤ[I] → + ∀f. 𝐔❨f❩ → ∀I,K1. ⇩*[b,f]L1 ≘ K1.ⓤ[I] → ∃∃K2. G ⊢ K1 ⊒ K2 & ⇩*[b,f]L2 ≘ K2.ⓤ[I]. #b #G #L1 #L2 #H elim H -L1 -L2 [ #f #_ #J #Y1 #H @@ -54,7 +54,7 @@ qed-. lemma jsx_fwd_drops_pair_sn (b) (G): ∀L1,L2. G ⊢ L1 ⊒ L2 → - ∀f. 𝐔❪f❫ → ∀I,K1,V. ⇩*[b,f]L1 ≘ K1.ⓑ[I]V → + ∀f. 𝐔❨f❩ → ∀I,K1,V. ⇩*[b,f]L1 ≘ K1.ⓑ[I]V → ∨∨ ∃∃K2. G ⊢ K1 ⊒ K2 & ⇩*[b,f]L2 ≘ K2.ⓑ[I]V | ∃∃K2. G ⊢ K1 ⊒ K2 & ⇩*[b,f]L2 ≘ K2.ⓧ & G ⊢ ⬈*𝐒[V] K2. #b #G #L1 #L2 #H elim H -L1 -L2 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_rsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_rsx.ma index 44d8ac029..54db26241 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_rsx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_rsx.ma @@ -22,7 +22,7 @@ include "basic_2/rt_computation/jsx.ma". (* Basic_2A1: uses: lsx_cpx_trans_lcosx *) lemma rsx_cpx_trans_jsx (G): - ∀L0,T1,T2. ❪G,L0❫ ⊢ T1 ⬈ T2 → + ∀L0,T1,T2. ❨G,L0❩ ⊢ T1 ⬈ T2 → ∀L. G ⊢ L0 ⊒ L → G ⊢ ⬈*𝐒[T1] L → G ⊢ ⬈*𝐒[T2] L. #G #L0 #T1 #T2 #H @(cpx_ind … H) -G -L0 -T1 -T2 [ // @@ -64,12 +64,12 @@ qed-. (* Basic_2A1: uses: lsx_cpx_trans_O *) lemma rsx_cpx_trans (G): - ∀L,T1,T2. ❪G,L❫ ⊢ T1 ⬈ T2 → + ∀L,T1,T2. ❨G,L❩ ⊢ T1 ⬈ T2 → G ⊢ ⬈*𝐒[T1] L → G ⊢ ⬈*𝐒[T2] L. /3 width=6 by rsx_cpx_trans_jsx, jsx_refl/ qed-. lemma rsx_cpxs_trans (G): - ∀L,T1,T2. ❪G,L❫ ⊢ T1 ⬈* T2 → + ∀L,T1,T2. ❨G,L❩ ⊢ T1 ⬈* T2 → G ⊢ ⬈*𝐒[T1] L → G ⊢ ⬈*𝐒[T2] L. #G #L #T1 #T2 #H @(cpxs_ind_dx ??????? H) -T1 // 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 1d7f3a180..0cfea3830 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs.ma @@ -28,38 +28,38 @@ interpretation (* Basic properties *********************************************************) (* Basic_2A1: uses: lprs_pair_refl *) -lemma lprs_bind_refl_dx (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h,0] L2 → - ∀I. ❪G,L1.ⓘ[I]❫ ⊢ ➡*[h,0] 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,0] L2 → - ∀V1,V2. ❪G,L1❫ ⊢ V1 ➡*[h,0] V2 → - ∀I. ❪G,L1.ⓑ[I]V1❫ ⊢ ➡*[h,0] 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,0] 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,0] 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,0] L2 → - ∃∃K2,V2. ❪G,K1❫ ⊢ ➡*[h,0] K2 & ❪G,K1❫ ⊢ V1 ➡*[h,0] 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,0] ⋆ → 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,0] K2.ⓑ[I]V2 → - ∃∃K1,V1. ❪G,K1❫ ⊢ ➡*[h,0] K2 & ❪G,K1❫ ⊢ V1 ➡*[h,0] 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,0] K2 → + ❨G,K1❩ ⊢ ➡*[h,0] K2 → Q K1 K2 → Q (K1.ⓘ[I]) (K2.ⓘ[I]) ) → ( ∀I,K1,K2,V1,V2. - ❪G,K1❫ ⊢ ➡*[h,0] K2 → ❪G,K1❫ ⊢ V1 ➡*[h,0] 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,0] 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_cpms.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_cpms.ma index 4e6732f13..0b01d3843 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 @@ -19,23 +19,23 @@ include "basic_2/rt_computation/lprs_lpr.ma". (* Properties with t-bound context-sensitive rt-computarion for terms *******) 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. + ∀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 (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. + ∀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_alt (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. + ∀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 *) @@ -44,8 +44,8 @@ lemma cpms_bind_alt (h) (n) (G) (L): (* Basic_2A1: includes: cprs_inv_abst1 *) (* Basic_2A1: uses: scpds_inv_abst1 *) 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. + ∀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 @@ -54,8 +54,8 @@ 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 ➡*[h,n] X → - ∃∃U. ❪G,L.ⓛW❫⊢ T ➡*[h,n] U & ❪G,L❫ ⊢ ⓛ[p]W.U ➡*[h,0] 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/ @@ -63,8 +63,8 @@ qed-. (* Basic_2A1: includes: cprs_inv_abst *) 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. + ∀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/ @@ -73,9 +73,9 @@ qed-. (* Basic_1: was pr3_gen_abbr *) (* Basic_2A1: includes: cprs_inv_abbr1 *) 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 = Ⓣ. + ∀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 #_ * * @@ -95,8 +95,8 @@ qed-. (* Basic_2A1: uses: scpds_inv_abbr_abst *) 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 = Ⓣ. + ∀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 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 5dc472746..faeec8263 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,0] L2 → - ∀V1,V2. ❪G,L2❫ ⊢ V1 ➡*[h,0] V2 → - ∀I. ❪G,L1.ⓑ[I]V1❫ ⊢ ➡*[h,0] 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,0] T1 → - ∀L1. ❪G,L0❫ ⊢ ➡*[h,0] L1 → - ∃∃T. ❪G,L1❫ ⊢ T1 ➡*[h,0] T & ❪G,L1❫ ⊢ T0 ➡*[h,0] 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,0] T1 → - ∀L1. ❪G,L0❫ ⊢ ➡*[h,0] L1 → - ∃∃T. ❪G,L1❫ ⊢ T1 ➡*[h,0] T & ❪G,L1❫ ⊢ T0 ➡*[h,0] 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,0] T1 → - ∀L1. ❪G,L0❫ ⊢ ➡*[h,0] L1 → - ∃∃T. ❪G,L0❫ ⊢ T1 ➡*[h,0] T & ❪G,L1❫ ⊢ T0 ➡*[h,0] 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,0] T1 → - ∀L1. ❪G,L0❫ ⊢ ➡*[h,0] L1 → - ∃∃T. ❪G,L0❫ ⊢ T1 ➡*[h,0] T & ❪G,L1❫ ⊢ T0 ➡*[h,0] 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 01e1c16ee..0d717c30c 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,0] 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,0] 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 8b87da9ab..55c213b27 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,0] 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 0edc5d3b1..8b6c42f09 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 @@ -21,33 +21,33 @@ include "basic_2/rt_computation/lprs_tc.ma". (* Basic_2A1: was: lprs_ind_dx *) 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. + (∀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,0] L → ❪G,L❫ ⊢ ➡[h,0] L2 → Q L → Q L2) → - ∀L2. ❪G,L1❫ ⊢ ➡*[h,0] L2 → Q L2. + (∀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 extended rt-transition for full local environments *******) lemma lpr_lprs (h) (G): - ∀L1,L2. ❪G,L1❫ ⊢ ➡[h,0] L2 → ❪G,L1❫ ⊢ ➡*[h,0] L2. + ∀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,0] L → - ∀L2.❪G,L❫ ⊢ ➡*[h,0] L2 → ❪G,L1❫ ⊢ ➡*[h,0] L2. + ∀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,0] L → - ∀L2. ❪G,L❫ ⊢ ➡[h,0] L2 → ❪G,L1❫ ⊢ ➡*[h,0] L2. + ∀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): 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 48d1d0d1f..f72a3b122 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 @@ -23,5 +23,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,0] L2 → ❪G,L1❫ ⊢ ⬈* L2. + ∀L1,L2. ❨G,L1❩ ⊢ ➡*[h,0] L2 → ❨G,L1❩ ⊢ ⬈* 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 cc3fadc33..883e9d63d 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,0] 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,0] 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_computation/lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs.ma index 17f352a9c..6885d5379 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs.ma @@ -29,14 +29,14 @@ interpretation (* Basic_2A1: uses: lpxs_pair_refl *) lemma lpxs_bind_refl_dx (G): - ∀L1,L2. ❪G,L1❫ ⊢ ⬈* L2 → - ∀I. ❪G,L1.ⓘ[I]❫ ⊢ ⬈* L2.ⓘ[I]. + ∀L1,L2. ❨G,L1❩ ⊢ ⬈* L2 → + ∀I. ❨G,L1.ⓘ[I]❩ ⊢ ⬈* L2.ⓘ[I]. /2 width=1 by lex_bind_refl_dx/ qed. lemma lpxs_pair (G): - ∀L1,L2. ❪G,L1❫ ⊢ ⬈* L2 → - ∀V1,V2. ❪G,L1❫ ⊢ V1 ⬈* V2 → - ∀I. ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈* L2.ⓑ[I]V2. + ∀L1,L2. ❨G,L1❩ ⊢ ⬈* L2 → + ∀V1,V2. ❨G,L1❩ ⊢ V1 ⬈* V2 → + ∀I. ❨G,L1.ⓑ[I]V1❩ ⊢ ⬈* L2.ⓑ[I]V2. /2 width=1 by lex_pair/ qed. lemma lpxs_refl (G): @@ -47,29 +47,29 @@ lemma lpxs_refl (G): (* Basic_2A1: was: lpxs_inv_atom1 *) lemma lpxs_inv_atom_sn (G): - ∀L2. ❪G,⋆❫ ⊢ ⬈* L2 → L2 = ⋆. + ∀L2. ❨G,⋆❩ ⊢ ⬈* L2 → L2 = ⋆. /2 width=2 by lex_inv_atom_sn/ qed-. lemma lpxs_inv_bind_sn (G): - ∀I1,L2,K1. ❪G,K1.ⓘ[I1]❫ ⊢ ⬈* L2 → - ∃∃I2,K2. ❪G,K1❫ ⊢ ⬈* K2 & ❪G,K1❫ ⊢ I1 ⬈* I2 & L2 = K2.ⓘ[I2]. + ∀I1,L2,K1. ❨G,K1.ⓘ[I1]❩ ⊢ ⬈* L2 → + ∃∃I2,K2. ❨G,K1❩ ⊢ ⬈* K2 & ❨G,K1❩ ⊢ I1 ⬈* I2 & L2 = K2.ⓘ[I2]. /2 width=1 by lex_inv_bind_sn/ qed-. (* Basic_2A1: was: lpxs_inv_pair1 *) lemma lpxs_inv_pair_sn (G): - ∀I,L2,K1,V1. ❪G,K1.ⓑ[I]V1❫ ⊢ ⬈* L2 → - ∃∃K2,V2. ❪G,K1❫ ⊢ ⬈* K2 & ❪G,K1❫ ⊢ V1 ⬈* V2 & L2 = K2.ⓑ[I]V2. + ∀I,L2,K1,V1. ❨G,K1.ⓑ[I]V1❩ ⊢ ⬈* L2 → + ∃∃K2,V2. ❨G,K1❩ ⊢ ⬈* K2 & ❨G,K1❩ ⊢ V1 ⬈* V2 & L2 = K2.ⓑ[I]V2. /2 width=1 by lex_inv_pair_sn/ qed-. (* Basic_2A1: was: lpxs_inv_atom2 *) lemma lpxs_inv_atom_dx (G): - ∀L1. ❪G,L1❫ ⊢ ⬈* ⋆ → L1 = ⋆. + ∀L1. ❨G,L1❩ ⊢ ⬈* ⋆ → L1 = ⋆. /2 width=2 by lex_inv_atom_dx/ qed-. (* Basic_2A1: was: lpxs_inv_pair2 *) lemma lpxs_inv_pair_dx (G): - ∀I,L1,K2,V2. ❪G,L1❫ ⊢ ⬈* K2.ⓑ[I]V2 → - ∃∃K1,V1. ❪G,K1❫ ⊢ ⬈* K2 & ❪G,K1❫ ⊢ V1 ⬈* V2 & L1 = K1.ⓑ[I]V1. + ∀I,L1,K2,V2. ❨G,L1❩ ⊢ ⬈* K2.ⓑ[I]V2 → + ∃∃K1,V1. ❨G,K1❩ ⊢ ⬈* K2 & ❨G,K1❩ ⊢ V1 ⬈* V2 & L1 = K1.ⓑ[I]V1. /2 width=1 by lex_inv_pair_dx/ qed-. (* Basic eliminators ********************************************************) @@ -78,12 +78,12 @@ lemma lpxs_inv_pair_dx (G): lemma lpxs_ind (G) (Q:relation …): Q (⋆) (⋆) → ( ∀I,K1,K2. - ❪G,K1❫ ⊢ ⬈* K2 → + ❨G,K1❩ ⊢ ⬈* K2 → Q K1 K2 → Q (K1.ⓘ[I]) (K2.ⓘ[I]) ) → ( ∀I,K1,K2,V1,V2. - ❪G,K1❫ ⊢ ⬈* K2 → ❪G,K1❫ ⊢ V1 ⬈* V2 → + ❨G,K1❩ ⊢ ⬈* K2 → ❨G,K1❩ ⊢ V1 ⬈* V2 → Q K1 K2 → Q (K1.ⓑ[I]V1) (K2.ⓑ[I]V2) ) → - ∀L1,L2. ❪G,L1❫ ⊢ ⬈* L2 → Q L1 L2. + ∀L1,L2. ❨G,L1❩ ⊢ ⬈* L2 → Q L1 L2. /3 width=4 by lex_ind/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_cpxs.ma index 99d72a494..fe6047de0 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_cpxs.ma @@ -20,16 +20,16 @@ include "basic_2/rt_computation/lpxs_lpx.ma". (* Basic_2A1: was: cpxs_bind2 *) lemma cpxs_bind_alt (G): - ∀L,V1,V2. ❪G,L❫ ⊢ V1 ⬈* V2 → - ∀I,T1,T2. ❪G,L.ⓑ[I]V2❫ ⊢ T1 ⬈* T2 → - ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈* ⓑ[p,I]V2.T2. + ∀L,V1,V2. ❨G,L❩ ⊢ V1 ⬈* V2 → + ∀I,T1,T2. ❨G,L.ⓑ[I]V2❩ ⊢ T1 ⬈* T2 → + ∀p. ❨G,L❩ ⊢ ⓑ[p,I]V1.T1 ⬈* ⓑ[p,I]V2.T2. /4 width=5 by lpxs_cpxs_trans, lpxs_pair, cpxs_bind/ qed. (* Inversion lemmas with context-sensitive ext rt-computation for terms *****) lemma cpxs_inv_abst1 (G): - ∀p,L,V1,T1,U2. ❪G,L❫ ⊢ ⓛ[p]V1.T1 ⬈* U2 → - ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈* V2 & ❪G,L.ⓛV1❫ ⊢ T1 ⬈* T2 & U2 = ⓛ[p]V2.T2. + ∀p,L,V1,T1,U2. ❨G,L❩ ⊢ ⓛ[p]V1.T1 ⬈* U2 → + ∃∃V2,T2. ❨G,L❩ ⊢ V1 ⬈* V2 & ❨G,L.ⓛV1❩ ⊢ T1 ⬈* T2 & U2 = ⓛ[p]V2.T2. #G #p #L #V1 #T1 #U2 #H @(cpxs_ind … H) -U2 /2 width=5 by ex3_2_intro/ #U0 #U2 #_ #HU02 * #V0 #T0 #HV10 #HT10 #H destruct elim (cpx_inv_abst1 … HU02) -HU02 #V2 #T2 #HV02 #HT02 #H destruct @@ -39,9 +39,9 @@ qed-. (* Basic_2A1: was: cpxs_inv_abbr1 *) lemma cpxs_inv_abbr1_dx (p) (G) (L): - ∀V1,T1,U2. ❪G,L❫ ⊢ ⓓ[p]V1.T1 ⬈* U2 → - ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈* V2 & ❪G,L.ⓓV1❫ ⊢ T1 ⬈* T2 & U2 = ⓓ[p]V2.T2 - | ∃∃T2. ❪G,L.ⓓV1❫ ⊢ T1 ⬈* T2 & ⇧[1] U2 ≘ T2 & p = Ⓣ. + ∀V1,T1,U2. ❨G,L❩ ⊢ ⓓ[p]V1.T1 ⬈* U2 → + ∨∨ ∃∃V2,T2. ❨G,L❩ ⊢ V1 ⬈* V2 & ❨G,L.ⓓV1❩ ⊢ T1 ⬈* T2 & U2 = ⓓ[p]V2.T2 + | ∃∃T2. ❨G,L.ⓓV1❩ ⊢ T1 ⬈* T2 & ⇧[1] U2 ≘ T2 & p = Ⓣ. #p #G #L #V1 #T1 #U2 #H @(cpxs_ind … H) -U2 /3 width=5 by ex3_2_intro, or_introl/ #U0 #U2 #_ #HU02 * * diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_feqg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_feqg.ma index 8656ce5d4..89f35cfb2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_feqg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_feqg.ma @@ -21,9 +21,9 @@ include "basic_2/rt_computation/lpxs_reqg.ma". lemma feqg_lpxs_trans (S): reflexive … S → symmetric … S → - ∀G1,G2,L1,L0,T1,T2. ❪G1,L1,T1❫ ≛[S] ❪G2,L0,T2❫ → - ∀L2. ❪G2,L0❫ ⊢⬈* L2 → - ∃∃L. ❪G1,L1❫ ⊢⬈* L & ❪G1,L,T1❫ ≛[S] ❪G2,L2,T2❫. + ∀G1,G2,L1,L0,T1,T2. ❨G1,L1,T1❩ ≛[S] ❨G2,L0,T2❩ → + ∀L2. ❨G2,L0❩ ⊢⬈* L2 → + ∃∃L. ❨G1,L1❩ ⊢⬈* L & ❨G1,L,T1❩ ≛[S] ❨G2,L2,T2❩. #S #H1S #H2S #G1 #G2 #L1 #L0 #T1 #T2 #H1 #L2 #HL02 elim (feqg_inv_gen_dx … H1) -H1 // #HG #HL10 #HT12 destruct elim (reqg_lpxs_trans … HL02 … HL10) -L0 // #L0 #HL10 #HL02 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_length.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_length.ma index e851d511f..0f88794de 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_length.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_length.ma @@ -20,5 +20,5 @@ include "basic_2/rt_computation/lpxs.ma". (* Forward lemmas with length for local environments ************************) lemma lpxs_fwd_length (G): - ∀L1,L2. ❪G,L1❫ ⊢ ⬈* L2 → |L1| = |L2|. + ∀L1,L2. ❨G,L1❩ ⊢ ⬈* L2 → |L1| = |L2|. /2 width=2 by lex_fwd_length/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_lpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_lpx.ma index 3faf56bf8..08b9af2eb 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_lpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_lpx.ma @@ -21,19 +21,19 @@ include "basic_2/rt_computation/lpxs.ma". (* Properties with extended rt-transition for full local environments *******) lemma lpx_lpxs (G): - ∀L1,L2. ❪G,L1❫ ⊢ ⬈ L2 → ❪G,L1❫ ⊢ ⬈* L2. + ∀L1,L2. ❨G,L1❩ ⊢ ⬈ L2 → ❨G,L1❩ ⊢ ⬈* L2. /3 width=3 by lpx_cpxs_trans, lex_CTC_inj/ qed. (* Basic_2A1: was: lpxs_strap2 *) lemma lpxs_step_sn (G): - ∀L1,L. ❪G,L1❫ ⊢ ⬈ L → - ∀L2. ❪G,L❫ ⊢ ⬈* L2 → ❪G,L1❫ ⊢ ⬈* L2. + ∀L1,L. ❨G,L1❩ ⊢ ⬈ L → + ∀L2. ❨G,L❩ ⊢ ⬈* L2 → ❨G,L1❩ ⊢ ⬈* L2. /3 width=3 by lpx_cpxs_trans, lex_CTC_step_sn/ qed-. (* Basic_2A1: was: lpxs_strap1 *) lemma lpxs_step_dx (G): - ∀L1,L. ❪G,L1❫ ⊢ ⬈* L → - ∀L2. ❪G,L❫ ⊢ ⬈ L2 → ❪G,L1❫ ⊢ ⬈* L2. + ∀L1,L. ❨G,L1❩ ⊢ ⬈* L → + ∀L2. ❨G,L❩ ⊢ ⬈ L2 → ❨G,L1❩ ⊢ ⬈* L2. /3 width=3 by lpx_cpxs_trans, lex_CTC_step_dx/ qed-. (* Eliminators with extended rt-transition for full local environments ******) @@ -41,15 +41,15 @@ lemma lpxs_step_dx (G): (* Basic_2A1: was: lpxs_ind_dx *) lemma lpxs_ind_sn (G) (L2) (Q:predicate …): Q L2 → - (∀L1,L. ❪G,L1❫ ⊢ ⬈ L → ❪G,L❫ ⊢ ⬈* L2 → Q L → Q L1) → - ∀L1. ❪G,L1❫ ⊢ ⬈* L2 → Q L1. + (∀L1,L. ❨G,L1❩ ⊢ ⬈ L → ❨G,L❩ ⊢ ⬈* L2 → Q L → Q L1) → + ∀L1. ❨G,L1❩ ⊢ ⬈* L2 → Q L1. /3 width=7 by lpx_cpxs_trans, cpx_refl, lex_CTC_ind_sn/ qed-. (* Basic_2A1: was: lpxs_ind *) lemma lpxs_ind_dx (G) (L1) (Q:predicate …): Q L1 → - (∀L,L2. ❪G,L1❫ ⊢ ⬈* L → ❪G,L❫ ⊢ ⬈ L2 → Q L → Q L2) → - ∀L2. ❪G,L1❫ ⊢ ⬈* L2 → Q L2. + (∀L,L2. ❨G,L1❩ ⊢ ⬈* L → ❨G,L❩ ⊢ ⬈ L2 → Q L → Q L2) → + ∀L2. ❨G,L1❩ ⊢ ⬈* L2 → Q L2. /3 width=7 by lpx_cpxs_trans, cpx_refl, lex_CTC_ind_dx/ qed-. (* Properties with context-sensitive extended rt-transition for terms *******) @@ -73,7 +73,7 @@ qed-. (* Basic_2A1: was: lpxs_pair2 *) lemma lpxs_pair_dx (G): - ∀L1,L2. ❪G,L1❫ ⊢ ⬈* L2 → - ∀V1,V2. ❪G,L2❫ ⊢ V1 ⬈* V2 → - ∀I. ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈* L2.ⓑ[I]V2. + ∀L1,L2. ❨G,L1❩ ⊢ ⬈* L2 → + ∀V1,V2. ❨G,L2❩ ⊢ V1 ⬈* V2 → + ∀I. ❨G,L1.ⓑ[I]V1❩ ⊢ ⬈* L2.ⓑ[I]V2. /3 width=3 by lpxs_pair, lpxs_cpxs_trans/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_reqg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_reqg.ma index 2343788f8..659f96aa4 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_reqg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_reqg.ma @@ -22,8 +22,8 @@ include "basic_2/rt_computation/lpxs_lpx.ma". (* Basic_2A1: uses: lleq_lpxs_trans *) lemma reqg_lpxs_trans (S) (G) (T:term): reflexive … S → symmetric … S → - ∀L2,K2. ❪G,L2❫ ⊢ ⬈* K2 → ∀L1. L1 ≛[S,T] L2 → - ∃∃K1. ❪G,L1❫ ⊢ ⬈* K1 & K1 ≛[S,T] K2. + ∀L2,K2. ❨G,L2❩ ⊢ ⬈* K2 → ∀L1. L1 ≛[S,T] L2 → + ∃∃K1. ❨G,L1❩ ⊢ ⬈* K1 & K1 ≛[S,T] K2. #S #G #T #H1S #H2S #L2 #K2 #H @(lpxs_ind_sn … H) -L2 /2 width=3 by ex2_intro/ #L #L2 #HL2 #_ #IH #L1 #HT elim (reqg_lpx_trans … HL2 … HT) // -L #L #HL1 #HT @@ -35,8 +35,8 @@ qed-. lemma lpxs_rneqg_inv_step_sn (S) (G) (T:term): reflexive … S → symmetric … S → Transitive … S → (∀s1,s2. Decidable (S s1 s2)) → - ∀L1,L2. ❪G,L1❫ ⊢ ⬈* L2 → (L1 ≛[S,T] L2 → ⊥) → - ∃∃L,L0. ❪G,L1❫ ⊢ ⬈ L & L1 ≛[S,T] L → ⊥ & ❪G,L❫ ⊢ ⬈* L0 & L0 ≛[S,T] L2. + ∀L1,L2. ❨G,L1❩ ⊢ ⬈* L2 → (L1 ≛[S,T] L2 → ⊥) → + ∃∃L,L0. ❨G,L1❩ ⊢ ⬈ L & L1 ≛[S,T] L → ⊥ & ❨G,L❩ ⊢ ⬈* L0 & L0 ≛[S,T] L2. #S #G #T #H1S #H2S #H3S #H4S #L1 #L2 #H @(lpxs_ind_sn … H) -L1 [ #H elim H -H /2 width=1 by reqg_refl/ | #L1 #L #H1 #H2 #IH2 #H12 elim (reqg_dec S … L1 L T) // #H diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx.ma index e7f603209..10ba97973 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx.ma @@ -30,7 +30,7 @@ interpretation (* Basic_2A1: uses: lsx_ind *) lemma rsx_ind (G) (T) (Q:predicate …): (∀L1. G ⊢ ⬈*𝐒[T] L1 → - (∀L2. ❪G,L1❫ ⊢ ⬈ L2 → (L1 ≅[T] L2 → ⊥) → Q L2) → + (∀L2. ❨G,L1❩ ⊢ ⬈ L2 → (L1 ≅[T] L2 → ⊥) → Q L2) → Q L1 ) → ∀L. G ⊢ ⬈*𝐒[T] L → Q L. @@ -43,7 +43,7 @@ qed-. (* Basic_2A1: uses: lsx_intro *) lemma rsx_intro (G) (T): ∀L1. - (∀L2. ❪G,L1❫ ⊢ ⬈ L2 → (L1 ≅[T] L2 → ⊥) → G ⊢ ⬈*𝐒[T] L2) → + (∀L2. ❨G,L1❩ ⊢ ⬈ L2 → (L1 ≅[T] L2 → ⊥) → G ⊢ ⬈*𝐒[T] L2) → G ⊢ ⬈*𝐒[T] L1. /5 width=1 by SN_intro/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_csx.ma index ee5d0e613..f2564aea9 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_csx.ma @@ -22,7 +22,7 @@ include "basic_2/rt_computation/jsx_rsx.ma". fact rsx_fwd_lref_pair_csx_aux (G): ∀L. G ⊢ ⬈*𝐒[#0] L → - ∀I,K,V. L = K.ⓑ[I]V → ❪G,K❫ ⊢ ⬈*𝐒 V. + ∀I,K,V. L = K.ⓑ[I]V → ❨G,K❩ ⊢ ⬈*𝐒 V. #G #L #H @(rsx_ind … H) -L #L #_ #IH #I #K #V1 #H destruct @csx_intro #V2 #HV12 #HnV12 @@ -34,11 +34,11 @@ fact rsx_fwd_lref_pair_csx_aux (G): qed-. lemma rsx_fwd_lref_pair_csx (G): - ∀I,K,V. G ⊢ ⬈*𝐒[#0] K.ⓑ[I]V → ❪G,K❫ ⊢ ⬈*𝐒 V. + ∀I,K,V. G ⊢ ⬈*𝐒[#0] K.ⓑ[I]V → ❨G,K❩ ⊢ ⬈*𝐒 V. /2 width=4 by rsx_fwd_lref_pair_csx_aux/ qed-. lemma rsx_fwd_lref_pair_csx_drops (G): - ∀I,K,V,i,L. ⇩[i] L ≘ K.ⓑ[I]V → G ⊢ ⬈*𝐒[#i] L → ❪G,K❫ ⊢ ⬈*𝐒 V. + ∀I,K,V,i,L. ⇩[i] L ≘ K.ⓑ[I]V → G ⊢ ⬈*𝐒[#i] L → ❨G,K❩ ⊢ ⬈*𝐒 V. #G #I #K #V #i elim i -i [ #L #H >(drops_fwd_isid … H) -H /2 width=2 by rsx_fwd_lref_pair_csx/ @@ -53,19 +53,19 @@ qed-. lemma rsx_inv_lref_pair (G): ∀I,K,V. G ⊢ ⬈*𝐒[#0] K.ⓑ[I]V → - ∧∧ ❪G,K❫ ⊢ ⬈*𝐒 V & G ⊢ ⬈*𝐒[V] K. + ∧∧ ❨G,K❩ ⊢ ⬈*𝐒 V & G ⊢ ⬈*𝐒[V] K. /3 width=2 by rsx_fwd_lref_pair_csx, rsx_fwd_pair, conj/ qed-. lemma rsx_inv_lref_pair_drops (G): ∀I,K,V,i,L. ⇩[i] L ≘ K.ⓑ[I]V → G ⊢ ⬈*𝐒[#i] L → - ∧∧ ❪G,K❫ ⊢ ⬈*𝐒 V & G ⊢ ⬈*𝐒[V] K. + ∧∧ ❨G,K❩ ⊢ ⬈*𝐒 V & G ⊢ ⬈*𝐒[V] K. /3 width=5 by rsx_fwd_lref_pair_csx_drops, rsx_fwd_lref_pair_drops, conj/ qed-. lemma rsx_inv_lref_drops (G): ∀L,i. G ⊢ ⬈*𝐒[#i] L → ∨∨ ⇩*[Ⓕ,𝐔❨i❩] L ≘ ⋆ | ∃∃I,K. ⇩[i] L ≘ K.ⓤ[I] - | ∃∃I,K,V. ⇩[i] L ≘ K.ⓑ[I]V & ❪G,K❫ ⊢ ⬈*𝐒 V & G ⊢ ⬈*𝐒[V] K. + | ∃∃I,K,V. ⇩[i] L ≘ K.ⓑ[I]V & ❨G,K❩ ⊢ ⬈*𝐒 V & G ⊢ ⬈*𝐒[V] K. #G #L #i #H elim (drops_F_uni L i) [ /2 width=1 by or3_intro0/ | * * /4 width=10 by rsx_fwd_lref_pair_csx_drops, rsx_fwd_lref_pair_drops, ex3_3_intro, ex1_2_intro, or3_intro2, or3_intro1/ @@ -77,8 +77,8 @@ qed-. (* Note: swapping the eliminations to avoid rsx_cpx_trans: no solution found *) (* Basic_2A1: uses: lsx_lref_be_lpxs *) lemma rsx_lref_pair_lpxs (G): - ∀K1,V. ❪G,K1❫ ⊢ ⬈*𝐒 V → - ∀K2. G ⊢ ⬈*𝐒[V] K2 → ❪G,K1❫ ⊢ ⬈* K2 → + ∀K1,V. ❨G,K1❩ ⊢ ⬈*𝐒 V → + ∀K2. G ⊢ ⬈*𝐒[V] K2 → ❨G,K1❩ ⊢ ⬈* K2 → ∀I. G ⊢ ⬈*𝐒[#0] K2.ⓑ[I]V. #G #K1 #V #H @(csx_ind_cpxs … H) -V #V0 #_ #IHV0 #K2 #H @@ -96,12 +96,12 @@ elim (teqx_dec V0 V2) #HnV02 destruct [ -IHV0 -HV02 -HK0 | -IHK0 -HnY ] qed. lemma rsx_lref_pair (G): - ∀K,V. ❪G,K❫ ⊢ ⬈*𝐒 V → G ⊢ ⬈*𝐒[V] K → ∀I. G ⊢ ⬈*𝐒[#0] K.ⓑ[I]V. + ∀K,V. ❨G,K❩ ⊢ ⬈*𝐒 V → G ⊢ ⬈*𝐒[V] K → ∀I. G ⊢ ⬈*𝐒[#0] K.ⓑ[I]V. /2 width=3 by rsx_lref_pair_lpxs/ qed. (* Basic_2A1: uses: lsx_lref_be *) lemma rsx_lref_pair_drops (G): - ∀K,V. ❪G,K❫ ⊢ ⬈*𝐒 V → G ⊢ ⬈*𝐒[V] K → + ∀K,V. ❨G,K❩ ⊢ ⬈*𝐒 V → G ⊢ ⬈*𝐒[V] K → ∀I,i,L. ⇩[i] L ≘ K.ⓑ[I]V → G ⊢ ⬈*𝐒[#i] L. #G #K #V #HV #HK #I #i elim i -i [ #L #H >(drops_fwd_isid … H) -H /2 width=1 by rsx_lref_pair/ @@ -115,7 +115,7 @@ qed. (* Basic_2A1: uses: csx_lsx *) theorem csx_rsx (G): - ∀L,T. ❪G,L❫ ⊢ ⬈*𝐒 T → G ⊢ ⬈*𝐒[T] L. + ∀L,T. ❨G,L❩ ⊢ ⬈*𝐒 T → G ⊢ ⬈*𝐒[T] L. #G #L #T @(fqup_wf_ind_eq (Ⓣ) … G L T) -G -L -T #Z #Y #X #IH #G #L * * [ // diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_lpxs.ma index 7882409b5..c4787ef7b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_lpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_lpxs.ma @@ -22,14 +22,14 @@ include "basic_2/rt_computation/rsx_rsx.ma". (* Basic_2A1: uses: lsx_intro_alt *) lemma rsx_intro_lpxs (G): - ∀L1,T. (∀L2. ❪G,L1❫ ⊢ ⬈* L2 → (L1 ≅[T] L2 → ⊥) → G ⊢ ⬈*𝐒[T] L2) → + ∀L1,T. (∀L2. ❨G,L1❩ ⊢ ⬈* L2 → (L1 ≅[T] L2 → ⊥) → G ⊢ ⬈*𝐒[T] L2) → G ⊢ ⬈*𝐒[T] L1. /4 width=1 by lpx_lpxs, rsx_intro/ qed-. (* Basic_2A1: uses: lsx_lpxs_trans *) lemma rsx_lpxs_trans (G): ∀L1,T. G ⊢ ⬈*𝐒[T] L1 → - ∀L2. ❪G,L1❫ ⊢ ⬈* L2 → G ⊢ ⬈*𝐒[T] L2. + ∀L2. ❨G,L1❩ ⊢ ⬈* L2 → G ⊢ ⬈*𝐒[T] L2. #G #L1 #T #HL1 #L2 #H @(lpxs_ind_dx … H) -L2 /2 width=3 by rsx_lpx_trans/ qed-. @@ -38,11 +38,11 @@ qed-. lemma rsx_ind_lpxs_reqx (G) (T) (Q:predicate lenv): (∀L1. G ⊢ ⬈*𝐒[T] L1 → - (∀L2. ❪G,L1❫ ⊢ ⬈* L2 → (L1 ≅[T] L2 → ⊥) → Q L2) → + (∀L2. ❨G,L1❩ ⊢ ⬈* L2 → (L1 ≅[T] L2 → ⊥) → Q L2) → Q L1 ) → ∀L1. G ⊢ ⬈*𝐒[T] L1 → - ∀L0. ❪G,L1❫ ⊢ ⬈* L0 → ∀L2. L0 ≅[T] L2 → Q L2. + ∀L0. ❨G,L1❩ ⊢ ⬈* L0 → ∀L2. L0 ≅[T] L2 → Q L2. #G #T #Q #IH #L1 #H @(rsx_ind … H) -L1 #L1 #HL1 #IH1 #L0 #HL10 #L2 #HL02 @IH -IH /3 width=3 by rsx_lpxs_trans, rsx_reqx_trans/ -HL1 #K2 #HLK2 #HnLK2 @@ -63,7 +63,7 @@ qed-. (* Basic_2A1: uses: lsx_ind_alt *) lemma rsx_ind_lpxs (G) (T) (Q:predicate lenv): (∀L1. G ⊢ ⬈*𝐒[T] L1 → - (∀L2. ❪G,L1❫ ⊢ ⬈* L2 → (L1 ≅[T] L2 → ⊥) → Q L2) → + (∀L2. ❨G,L1❩ ⊢ ⬈* L2 → (L1 ≅[T] L2 → ⊥) → Q L2) → Q L1 ) → ∀L. G ⊢ ⬈*𝐒[T] L → Q L. @@ -77,7 +77,7 @@ qed-. fact rsx_bind_lpxs_aux (G): ∀p,I,L1,V. G ⊢ ⬈*𝐒[V] L1 → ∀Y,T. G ⊢ ⬈*𝐒[T] Y → - ∀L2. Y = L2.ⓑ[I]V → ❪G,L1❫ ⊢ ⬈* L2 → + ∀L2. Y = L2.ⓑ[I]V → ❨G,L1❩ ⊢ ⬈* L2 → G ⊢ ⬈*𝐒[ⓑ[p,I]V.T] L2. #G #p #I #L1 #V #H @(rsx_ind_lpxs … H) -L1 #L1 #_ #IHL1 #Y #T #H @(rsx_ind_lpxs … H) -Y @@ -104,7 +104,7 @@ lemma rsx_bind (G): (* Basic_2A1: uses: lsx_flat_lpxs *) lemma rsx_flat_lpxs (G): ∀I,L1,V. G ⊢ ⬈*𝐒[V] L1 → - ∀L2,T. G ⊢ ⬈*𝐒[T] L2 → ❪G,L1❫ ⊢ ⬈* L2 → + ∀L2,T. G ⊢ ⬈*𝐒[T] L2 → ❨G,L1❩ ⊢ ⬈* L2 → G ⊢ ⬈*𝐒[ⓕ[I]V.T] L2. #G #I #L1 #V #H @(rsx_ind_lpxs … H) -L1 #L1 #HL1 #IHL1 #L2 #T #H @(rsx_ind_lpxs … H) -L2 @@ -129,7 +129,7 @@ lemma rsx_flat (G): fact rsx_bind_lpxs_void_aux (G): ∀p,I,L1,V. G ⊢ ⬈*𝐒[V] L1 → ∀Y,T. G ⊢ ⬈*𝐒[T] Y → - ∀L2. Y = L2.ⓧ → ❪G,L1❫ ⊢ ⬈* L2 → + ∀L2. Y = L2.ⓧ → ❨G,L1❩ ⊢ ⬈* L2 → G ⊢ ⬈*𝐒[ⓑ[p,I]V.T] L2. #G #p #I #L1 #V #H @(rsx_ind_lpxs … H) -L1 #L1 #_ #IHL1 #Y #T #H @(rsx_ind_lpxs … H) -Y diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_rsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_rsx.ma index d1a72230b..88d4f1c90 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_rsx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_rsx.ma @@ -33,7 +33,7 @@ qed-. (* Basic_2A1: uses: lsx_lpx_trans *) lemma rsx_lpx_trans (G): ∀L1,T. G ⊢ ⬈*𝐒[T] L1 → - ∀L2. ❪G,L1❫ ⊢ ⬈ L2 → G ⊢ ⬈*𝐒[T] L2. + ∀L2. ❨G,L1❩ ⊢ ⬈ L2 → G ⊢ ⬈*𝐒[T] L2. #G #L1 #T #H @(rsx_ind … H) -L1 #L1 #HL1 #IHL1 #L2 #HL12 elim (reqx_dec … L1 L2 T) /3 width=4 by rsx_reqx_trans/ 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 21cb11c00..e1a6e824d 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,0] T2 ∨ ❪G,L❫ ⊢ T2 ➡[h,0] 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)" @@ -35,7 +35,7 @@ qed-. (* Basic forward lemmas *****************************************************) -lemma cpc_fwd_cpr: ∀h,G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬌[h] T2 → - ∃∃T. ❪G,L❫ ⊢ T1 ➡[h,0] T & ❪G,L❫ ⊢ T2 ➡[h,0] T. +lemma cpc_fwd_cpr: ∀h,G,L,T1,T2. ❨G,L❩ ⊢ T1 ⬌[h] T2 → + ∃∃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_conversion/cpc_cpc.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_conversion/cpc_cpc.ma index 49528eac8..556762eb3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_conversion/cpc_cpc.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_conversion/cpc_cpc.ma @@ -18,6 +18,6 @@ include "basic_2/rt_conversion/cpc.ma". (* Main properties **********************************************************) -theorem cpc_conf: ∀h,G,L,T0,T1,T2. ❪G,L❫ ⊢ T0 ⬌[h] T1 → ❪G,L❫ ⊢ T0 ⬌[h] T2 → - ∃∃T. ❪G,L❫ ⊢ T1 ⬌[h] T & ❪G,L❫ ⊢ T2 ⬌[h] T. +theorem cpc_conf: ∀h,G,L,T0,T1,T2. ❨G,L❩ ⊢ T0 ⬌[h] T1 → ❨G,L❩ ⊢ T0 ⬌[h] T2 → + ∃∃T. ❨G,L❩ ⊢ T1 ⬌[h] T & ❨G,L❩ ⊢ T2 ⬌[h] T. /3 width=3 by cpc_sym, 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 8821057e7..21d9864ce 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs.ma @@ -29,16 +29,16 @@ interpretation "context-sensitive parallel r-equivalence (term)" (* Basic_2A1: was: cpcs_ind_dx *) lemma cpcs_ind_sn (h) (G) (L) (T2): ∀Q:predicate term. 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] T → ❨G,L❩ ⊢ T ⬌*[h] T2 → Q T → Q T1) → + ∀T1. ❨G,L❩ ⊢ T1 ⬌*[h] T2 → Q T1. normalize /3 width=6 by TC_star_ind_dx/ qed-. (* Basic_2A1: was: cpcs_ind *) lemma cpcs_ind_dx (h) (G) (L) (T1): ∀Q:predicate term. 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] T → ❨G,L❩ ⊢ T ⬌[h] T2 → Q T → Q T2) → + ∀T2. ❨G,L❩ ⊢ T1 ⬌*[h] T2 → Q T2. normalize /3 width=6 by TC_star_ind/ qed-. @@ -54,50 +54,50 @@ lemma cpcs_sym (h) (G) (L): symmetric … (cpcs h G L). /2 width=1 by cpc_sym/ qed-. -lemma cpc_cpcs (h) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T1 ⬌[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2. +lemma cpc_cpcs (h) (G) (L): ∀T1,T2. ❨G,L❩ ⊢ T1 ⬌[h] T2 → ❨G,L❩ ⊢ T1 ⬌*[h] T2. /2 width=1 by inj/ qed. (* Basic_2A1: was: cpcs_strap2 *) -lemma cpcs_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_step_sn (h) (G) (L): ∀T1,T. ❨G,L❩ ⊢ T1 ⬌[h] T → + ∀T2. ❨G,L❩ ⊢ T ⬌*[h] T2 → ❨G,L❩ ⊢ T1 ⬌*[h] T2. normalize /2 width=3 by TC_strap/ qed-. (* Basic_2A1: was: cpcs_strap1 *) -lemma cpcs_step_dx (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ⬌*[h] T → - ∀T2. ❪G,L❫ ⊢ T ⬌[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2. +lemma cpcs_step_dx (h) (G) (L): ∀T1,T. ❨G,L❩ ⊢ T1 ⬌*[h] T → + ∀T2. ❨G,L❩ ⊢ T ⬌[h] T2 → ❨G,L❩ ⊢ T1 ⬌*[h] T2. 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,0] 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,0] 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,0] 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,0] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2. +lemma cpcs_cpr_step_dx (h) (G) (L): ∀T1,T. ❨G,L❩ ⊢ T1 ⬌*[h] T → + ∀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,0] T → ❪G,L❫ ⊢ T1 ⬌*[h] T2. +lemma cpcs_cpr_div (h) (G) (L): ∀T1,T. ❨G,L❩ ⊢ T1 ⬌*[h] T → + ∀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,0] T → - ∀T2. ❪G,L❫ ⊢ T2 ➡[h,0] 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,0] T1 → - ∀T2. ❪G,L❫ ⊢ T ⬌*[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2. +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-. (* Basic_1: removed theorems 9: diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_aaa.ma index f387ce599..cd61c2b4d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_aaa.ma @@ -20,8 +20,8 @@ include "basic_2/rt_equivalence/cpcs_cprs.ma". (* Main inversion lemmas with atomic arity assignment on terms **************) (* Note: lemma 1500 *) -theorem cpcs_aaa_mono (h) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T1 ⬌*[h] T2 → - ∀A1. ❪G,L❫ ⊢ T1 ⁝ A1 → ∀A2. ❪G,L❫ ⊢ T2 ⁝ A2 → +theorem cpcs_aaa_mono (h) (G) (L): ∀T1,T2. ❨G,L❩ ⊢ T1 ⬌*[h] T2 → + ∀A1. ❨G,L❩ ⊢ T1 ⁝ A1 → ∀A2. ❨G,L❩ ⊢ T2 ⁝ A2 → A1 = A2. #h #G #L #T1 #T2 #HT12 #A1 #HA1 #A2 #HA2 elim (cpcs_inv_cprs … HT12) -HT12 #T #HT1 #HT2 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 97ea77791..a0bfbd5dd 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 @@ -31,21 +31,21 @@ theorem cpcs_canc_dx (h) (G) (L): right_cancellable … (cpcs h G L). (* Advanced properties ******************************************************) -lemma cpcs_bind1 (h) (G) (L): ∀V1,V2. ❪G,L❫ ⊢ V1 ⬌*[h] V2 → - ∀I,T1,T2. ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬌*[h] T2 → - ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬌*[h] ⓑ[p,I]V2.T2. +lemma cpcs_bind1 (h) (G) (L): ∀V1,V2. ❨G,L❩ ⊢ V1 ⬌*[h] V2 → + ∀I,T1,T2. ❨G,L.ⓑ[I]V1❩ ⊢ T1 ⬌*[h] T2 → + ∀p. ❨G,L❩ ⊢ ⓑ[p,I]V1.T1 ⬌*[h] ⓑ[p,I]V2.T2. /3 width=3 by cpcs_trans, cpcs_bind_sn, cpcs_bind_dx/ qed. -lemma cpcs_bind2 (h) (G) (L): ∀V1,V2. ❪G,L❫ ⊢ V1 ⬌*[h] V2 → - ∀I,T1,T2. ❪G,L.ⓑ[I]V2❫ ⊢ T1 ⬌*[h] T2 → - ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬌*[h] ⓑ[p,I]V2.T2. +lemma cpcs_bind2 (h) (G) (L): ∀V1,V2. ❨G,L❩ ⊢ V1 ⬌*[h] V2 → + ∀I,T1,T2. ❨G,L.ⓑ[I]V2❩ ⊢ T1 ⬌*[h] T2 → + ∀p. ❨G,L❩ ⊢ ⓑ[p,I]V1.T1 ⬌*[h] ⓑ[p,I]V2.T2. /3 width=3 by cpcs_trans, cpcs_bind_sn, cpcs_bind_dx/ qed. (* Advanced properties with r-transition for full local environments ********) (* Basic_1: was: pc3_wcpr0 *) -lemma lpr_cpcs_conf (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h,0] L2 → - ∀T1,T2. ❪G,L1❫ ⊢ T1 ⬌*[h] T2 → ❪G,L2❫ ⊢ T1 ⬌*[h] T2. +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/ qed-. 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 838b2d620..1b3e36e5e 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 @@ -20,8 +20,8 @@ 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,0] T & ❪G,L❫ ⊢ T2 ➡*[h,0] T. +lemma cpcs_inv_cprs (h) (G) (L): ∀T1,T2. ❨G,L❩ ⊢ T1 ⬌*[h] T2 → + ∃∃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 @@ -35,7 +35,7 @@ qed-. (* Basic_1: was: pc3_gen_sort *) (* Basic_2A1: was: cpcs_inv_sort *) -lemma cpcs_inv_sort_bi (h) (G) (L): ∀s1,s2. ❪G,L❫ ⊢ ⋆s1 ⬌*[h] ⋆s2 → s1 = s2. +lemma cpcs_inv_sort_bi (h) (G) (L): ∀s1,s2. ❨G,L❩ ⊢ ⋆s1 ⬌*[h] ⋆s2 → s1 = s2. #h #G #L #s1 #s2 #H elim (cpcs_inv_cprs … H) -H #T #H1 >(cprs_inv_sort1 … H1) -T #H2 lapply (cprs_inv_sort1 … H2) -L #H destruct // @@ -43,8 +43,8 @@ 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,0] ⓛ[p]W2.T2 & ❪G,L❫ ⊢ ⓛ[p]W1.T1 ➡*[h,0] ⓛ[p]W2.T2. + ∀p,W1,T1,X. ❨G,L❩ ⊢ ⓛ[p]W1.T1 ⬌*[h] X → + ∃∃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 @@ -53,13 +53,13 @@ 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,0] ⓛ[p]W2.T2 & ❪G,L❫ ⊢ ⓛ[p]W1.T1 ➡*[h,0] ⓛ[p]W2.T2. + ∀p,W1,T1,X. ❨G,L❩ ⊢ X ⬌*[h] ⓛ[p]W1.T1 → + ∃∃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 *) lemma cpcs_inv_sort_abst (h) (G) (L): - ∀p,W,T,s. ❪G,L❫ ⊢ ⋆s ⬌*[h] ⓛ[p]W.T → ⊥. + ∀p,W,T,s. ❨G,L❩ ⊢ ⋆s ⬌*[h] ⓛ[p]W.T → ⊥. #h #G #L #p #W #T #s #H elim (cpcs_inv_cprs … H) -H #X #H1 >(cprs_inv_sort1 … H1) -X #H2 @@ -69,97 +69,97 @@ 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,0] 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,0] 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,0] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2. +lemma cpcs_cprs_step_dx (h) (G) (L): ∀T1,T. ❨G,L❩ ⊢ T1 ⬌*[h] T → + ∀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,0] T → - ∀T2. ❪G,L❫ ⊢ T ⬌*[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2. +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,0] T → ❪G,L❫ ⊢ T1 ⬌*[h] T2. +lemma cpcs_cprs_div (h) (G) (L): ∀T1,T. ❨G,L❩ ⊢ T1 ⬌*[h] 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/ qed-. (* Basic_1: was: pc3_pr3_conf *) -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. +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,0] T → - ∀T2. ❪G,L❫ ⊢ T2 ➡*[h,0] 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,0] T → - ∀T2. ❪G,L❫ ⊢ T2 ➡[h,0] 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,0] T → - ∀T2. ❪G,L❫ ⊢ T2 ➡*[h,0] 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,0] T1 → - ∀T2. ❪G,L❫ ⊢ T ➡[h,0] 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,0] T1 → - ∀T2. ❪G,L❫ ⊢ T ➡[h,0] 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,0] T1 → - ∀T2. ❪G,L❫ ⊢ T ➡*[h,0] 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-. (* Basic_1: was only: pc3_thin_dx *) -lemma cpcs_flat (h) (G) (L): ∀V1,V2. ❪G,L❫ ⊢ V1 ⬌*[h] V2 → - ∀T1,T2. ❪G,L❫ ⊢ T1 ⬌*[h] T2 → - ∀I. ❪G,L❫ ⊢ ⓕ[I]V1.T1 ⬌*[h] ⓕ[I]V2.T2. +lemma cpcs_flat (h) (G) (L): ∀V1,V2. ❨G,L❩ ⊢ V1 ⬌*[h] V2 → + ∀T1,T2. ❨G,L❩ ⊢ T1 ⬌*[h] T2 → + ∀I. ❨G,L❩ ⊢ ⓕ[I]V1.T1 ⬌*[h] ⓕ[I]V2.T2. #h #G #L #V1 #V2 #HV12 #T1 #T2 #HT12 elim (cpcs_inv_cprs … HV12) -HV12 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,0] V1 → - ∀T1,T2. ❪G,L❫ ⊢ T1 ⬌*[h] T2 → - ∀I. ❪G,L❫ ⊢ ⓕ[I]V1.T1 ⬌*[h] ⓕ[I]V2.T2. +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. -lemma cpcs_bind_dx (h) (G) (L): ∀I,V,T1,T2. ❪G,L.ⓑ[I]V❫ ⊢ T1 ⬌*[h] T2 → - ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V.T1 ⬌*[h] ⓑ[p,I]V.T2. +lemma cpcs_bind_dx (h) (G) (L): ∀I,V,T1,T2. ❨G,L.ⓑ[I]V❩ ⊢ T1 ⬌*[h] T2 → + ∀p. ❨G,L❩ ⊢ ⓑ[p,I]V.T1 ⬌*[h] ⓑ[p,I]V.T2. #h #G #L #I #V #T1 #T2 #HT12 elim (cpcs_inv_cprs … HT12) -HT12 /3 width=5 by cprs_div, cpms_bind/ qed. -lemma cpcs_bind_sn (h) (G) (L): ∀I,V1,V2,T. ❪G,L❫ ⊢ V1 ⬌*[h] V2 → - ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T ⬌*[h] ⓑ[p,I]V2.T. +lemma cpcs_bind_sn (h) (G) (L): ∀I,V1,V2,T. ❨G,L❩ ⊢ V1 ⬌*[h] V2 → + ∀p. ❨G,L❩ ⊢ ⓑ[p,I]V1.T ⬌*[h] ⓑ[p,I]V2.T. #h #G #L #I #V1 #V2 #T #HV12 elim (cpcs_inv_cprs … HV12) -HV12 /3 width=5 by cprs_div, cpms_bind/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_csx.ma index 777d5ecd7..a29551ab7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_csx.ma @@ -22,8 +22,8 @@ include "basic_2/rt_equivalence/cpcs_cprs.ma". (* Basic_1: was: cpcs_dec *) lemma csx_cpcs_dec (h) (G) (L): - ∀T1. ❪G,L❫ ⊢ ⬈*𝐒 T1 → ∀T2. ❪G,L❫ ⊢ ⬈*𝐒 T2 → - Decidable … (❪G,L❫ ⊢ T1 ⬌*[h] T2). + ∀T1. ❨G,L❩ ⊢ ⬈*𝐒 T1 → ∀T2. ❨G,L❩ ⊢ ⬈*𝐒 T2 → + Decidable … (❨G,L❩ ⊢ T1 ⬌*[h] T2). #h #G #L #T1 #HT1 #T2 #HT2 elim (cprre_total_csx h … HT1) -HT1 #U1 #HTU1 elim (cprre_total_csx h … HT2) -HT2 #U2 #HTU2 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 8d9c5ee40..42e2d902b 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,0] L2 → - ∀T1,T2. ❪G,L2❫ ⊢ T1 ⬌*[h] T2 → ❪G,L1❫ ⊢ T1 ⬌*[h] T2. +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,0] L2 → - ∀T1,T2. ❪G,L2❫ ⊢ T1 ⬌*[h] T2 → ❪G,L1❫ ⊢ T1 ⬌*[h] T2. +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,0] L2 → - ∀T1,T2. ❪G,L1❫ ⊢ T1 ➡*[h,0] 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,24 +40,24 @@ 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,0] L2 → - ∀T1,T2. ❪G,L1❫ ⊢ T1 ➡*[h,0] 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,0] L2 → - ∀T1,T2. ❪G,L1❫ ⊢ T1 ➡[h,0] 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 ************************************************) (* Note: there must be a proof suitable for lfpr *) lemma cpcs_inv_abst_bi_sn (h) (G) (L): - ∀p1,p2,W1,W2,T1,T2. ❪G,L❫ ⊢ ⓛ[p1]W1.T1 ⬌*[h] ⓛ[p2]W2.T2 → - ∧∧ ❪G,L❫ ⊢ W1 ⬌*[h] W2 & ❪G,L.ⓛW1❫ ⊢ T1 ⬌*[h] T2 & p1 = p2. + ∀p1,p2,W1,W2,T1,T2. ❨G,L❩ ⊢ ⓛ[p1]W1.T1 ⬌*[h] ⓛ[p2]W2.T2 → + ∧∧ ❨G,L❩ ⊢ W1 ⬌*[h] W2 & ❨G,L.ⓛW1❩ ⊢ T1 ⬌*[h] T2 & p1 = p2. #h #G #L #p1 #p2 #W1 #W2 #T1 #T2 #H elim (cpcs_inv_cprs … H) -H #T #H1 #H2 elim (cpms_inv_abst_sn … H1) -H1 #W0 #T0 #HW10 #HT10 #H destruct @@ -68,8 +68,8 @@ lapply (lprs_cpcs_trans … (L.ⓛW1) … HT2) /2 width=1 by lprs_pair/ -HT2 #HT qed-. lemma cpcs_inv_abst_bi_dx (h) (G) (L): - ∀p1,p2,W1,W2,T1,T2. ❪G,L❫ ⊢ ⓛ[p1]W1.T1 ⬌*[h] ⓛ[p2]W2.T2 → - ∧∧ ❪G,L❫ ⊢ W1 ⬌*[h] W2 & ❪G,L.ⓛW2❫ ⊢ T1 ⬌*[h] T2 & p1 = p2. + ∀p1,p2,W1,W2,T1,T2. ❨G,L❩ ⊢ ⓛ[p1]W1.T1 ⬌*[h] ⓛ[p2]W2.T2 → + ∧∧ ❨G,L❩ ⊢ W1 ⬌*[h] W2 & ❨G,L.ⓛW2❩ ⊢ T1 ⬌*[h] T2 & p1 = p2. #h #G #L #p1 #p2 #W1 #W2 #T1 #T2 #HT12 lapply (cpcs_sym … HT12) -HT12 #HT12 elim (cpcs_inv_abst_bi_sn … HT12) -HT12 /3 width=1 by cpcs_sym, and3_intro/ qed-. 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 67f614481..911cb76fa 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 ➡*[h,n1] T & ❪G,L❫ ⊢ T2 ➡*[h,n2] 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 ➡*[h,n1] T → - ∀T2. ❪G,L❫ ⊢ T2 ➡*[h,n2] 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). @@ -38,6 +38,6 @@ lemma cpes_refl (h): ∀G,L. reflexive … (cpes h 0 0 G L). (* Basic_2A1: uses: scpes_sym *) lemma cpes_sym (h) (n1) (n2): - ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬌*[h,n1,n2] T2 → ❪G,L❫ ⊢ T2 ⬌*[h,n2,n1] T1. + ∀G,L,T1,T2. ❨G,L❩ ⊢ T1 ⬌*[h,n1,n2] T2 → ❨G,L❩ ⊢ T2 ⬌*[h,n2,n1] T1. #h #n1 #n2 #G #L #T1 #T2 * /2 width=3 by cpms_div/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes_aaa.ma index b0e54c4f1..816802820 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes_aaa.ma @@ -21,7 +21,7 @@ include "basic_2/rt_equivalence/cpes.ma". (* Basic_2A1: uses: scpes_refl *) lemma cpes_refl_aaa (h) (n): - ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ❪G,L❫ ⊢ T ⬌*[h,n,n] T. + ∀G,L,T,A. ❨G,L❩ ⊢ T ⁝ A → ❨G,L❩ ⊢ T ⬌*[h,n,n] T. #h #n #G #L #T #A #HA elim (cpms_total_aaa h … n … HA) #U #HTU /2 width=3 by cpms_div/ @@ -31,8 +31,8 @@ qed. (* Basic_2A1: uses: scpes_aaa_mono *) theorem cpes_aaa_mono (h) (n1) (n2): - ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬌*[h,n1,n2] T2 → - ∀A1. ❪G,L❫ ⊢ T1 ⁝ A1 → ∀A2. ❪G,L❫ ⊢ T2 ⁝ A2 → A1 = A2. + ∀G,L,T1,T2. ❨G,L❩ ⊢ T1 ⬌*[h,n1,n2] T2 → + ∀A1. ❨G,L❩ ⊢ T1 ⁝ A1 → ∀A2. ❨G,L❩ ⊢ T2 ⁝ A2 → A1 = A2. #h #n1 #n2 #G #L #T1 #T2 * #T #HT1 #HT2 #A1 #HA1 #A2 #HA2 lapply (cpms_aaa_conf … HA1 … HT1) -T1 #HA1 lapply (cpms_aaa_conf … HA2 … HT2) -T2 #HA2 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes_cpes.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes_cpes.ma index 28ac33e75..d443f70ba 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes_cpes.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes_cpes.ma @@ -20,8 +20,8 @@ include "basic_2/rt_equivalence/cpes_cpms.ma". (* Advanced forward lemmas **************************************************) lemma cpes_fwd_abst_bi (h) (n1) (n2) (p1) (p2) (G) (L): - ∀W1,W2,T1,T2. ❪G,L❫ ⊢ ⓛ[p1]W1.T1 ⬌*[h,n1,n2] ⓛ[p2]W2.T2 → - ∧∧ p1 = p2 & ❪G,L❫ ⊢ W1 ⬌*[h,0,O] W2. + ∀W1,W2,T1,T2. ❨G,L❩ ⊢ ⓛ[p1]W1.T1 ⬌*[h,n1,n2] ⓛ[p2]W2.T2 → + ∧∧ p1 = p2 & ❨G,L❩ ⊢ W1 ⬌*[h,0,O] W2. #h #n1 #n2 #p1 #p2 #G #L #W1 #W2 #T1 #T2 * #X #H1 #H2 elim (cpms_inv_abst_sn … H1) #W0 #X0 #HW10 #_ #H destruct elim (cpms_inv_abst_bi … H2) #H #HW20 #_ destruct @@ -31,8 +31,8 @@ qed-. (* Main properties **********************************************************) theorem cpes_cpes_trans (h) (n1) (n2) (G) (L) (T): - ∀T1. ❪G,L❫ ⊢ T ⬌*[h,n1,0] T1 → - ∀T2. ❪G,L❫ ⊢ T1 ⬌*[h,0,n2] T2 → ❪G,L❫ ⊢ T ⬌*[h,n1,n2] T2. + ∀T1. ❨G,L❩ ⊢ T ⬌*[h,n1,0] T1 → + ∀T2. ❨G,L❩ ⊢ T1 ⬌*[h,0,n2] T2 → ❨G,L❩ ⊢ T ⬌*[h,n1,n2] T2. #h #n1 #n2 #G #L #T #T1 #HT1 #T2 * #X #HX1 #HX2 lapply (cpes_cprs_trans … HT1 … HX1) -T1 #HTX lapply (cpes_cpms_div … HTX … HX2) -X // 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 cf3813ecf..fcf996938 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 @@ -20,16 +20,16 @@ include "basic_2/rt_equivalence/cpes.ma". (* Properties with t-bound rt-computation on terms **************************) lemma cpes_cprs_trans (h) (n) (G) (L) (T0): - ∀T1. ❪G,L❫ ⊢ T1 ⬌*[h,n,0] T0 → - ∀T2. ❪G,L❫ ⊢ T0 ➡*[h,0] T2 → ❪G,L❫ ⊢ T1 ⬌*[h,n,0] T2. + ∀T1. ❨G,L❩ ⊢ T1 ⬌*[h,n,0] T0 → + ∀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/ qed-. lemma cpes_cpms_div (h) (n) (n1) (n2) (G) (L) (T0): - ∀T1. ❪G,L❫ ⊢ T1 ⬌*[h,n,n1] T0 → - ∀T2. ❪G,L❫ ⊢ T2 ➡*[h,n2] T0 → ❪G,L❫ ⊢ T1 ⬌*[h,n,n2+n1] T2. + ∀T1. ❨G,L❩ ⊢ T1 ⬌*[h,n,n1] T0 → + ∀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 0e21c6687..79fa3588e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr.ma @@ -27,8 +27,8 @@ interpretation (* Basic inversion lemmas ***************************************************) lemma cnr_inv_abst (h) (p) (G) (L): - ∀V,T. ❪G,L❫ ⊢ ➡𝐍[h,0] ⓛ[p]V.T → - ∧∧ ❪G,L❫ ⊢ ➡𝐍[h,0] V & ❪G,L.ⓛV❫ ⊢ ➡𝐍[h,0] 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 // @@ -37,8 +37,8 @@ qed-. (* Basic_2A1: was: cnr_inv_abbr *) lemma cnr_inv_abbr_neg (h) (G) (L): - ∀V,T. ❪G,L❫ ⊢ ➡𝐍[h,0] -ⓓV.T → - ∧∧ ❪G,L❫ ⊢ ➡𝐍[h,0] V & ❪G,L.ⓓV❫ ⊢ ➡𝐍[h,0] 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 // @@ -47,7 +47,7 @@ qed-. (* Basic_2A1: was: cnr_inv_eps *) lemma cnr_inv_cast (h) (G) (L): - ∀V,T. ❪G,L❫ ⊢ ➡𝐍[h,0] ⓝV.T → ⊥. + ∀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-. @@ -56,27 +56,27 @@ qed-. (* Basic_1: was: nf2_sort *) lemma cnr_sort (h) (G) (L): - ∀s. ❪G,L❫ ⊢ ➡𝐍[h,0] ⋆s. + ∀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,0] §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,0] W → ❪G,L.ⓛW❫ ⊢ ➡𝐍[h,0] T → ❪G,L❫ ⊢ ➡𝐍[h,0] ⓛ[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,0] V → ❪G,L.ⓓV❫ ⊢ ➡𝐍[h,0] T → ❪G,L❫ ⊢ ➡𝐍[h,0] -ⓓ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 0cbf72011..2d314fc6e 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,0] #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,0] #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,0] #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 #_ #_ @@ -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,0] #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 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 bd1e11c00..292d97abc 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,8 +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,0] ⓐV.T → - ∧∧ ❪G,L❫ ⊢ ➡𝐍[h,0] V & ❪G,L❫ ⊢ ➡𝐍[h,0] 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 // @@ -37,7 +37,7 @@ qed-. (* Basic_1: was only: nf2_appl_lref *) lemma cnr_appl_simple (h) (G) (L): - ∀V,T. ❪G,L❫ ⊢ ➡𝐍[h,0] V → ❪G,L❫ ⊢ ➡𝐍[h,0] T → 𝐒❪T❫ → ❪G,L❫ ⊢ ➡𝐍[h,0] ⓐ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_teqg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_teqg.ma index ef7212aaf..549c6d8df 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_teqg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_teqg.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_teqg (S) (h) (G) (L): - ∀T1. ∨∨ ❪G,L❫ ⊢ ➡𝐍[h,0] T1 - | ∃∃T2. ❪G,L❫ ⊢ T1 ➡[h,0] T2 & (T1 ≛[S] T2 → ⊥). + ∀T1. ∨∨ ❨G,L❩ ⊢ ➡𝐍[h,0] T1 + | ∃∃T2. ❨G,L❩ ⊢ T1 ➡[h,0] T2 & (T1 ≛[S] T2 → ⊥). #S #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/cnr_teqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_teqx.ma index 9310bcf6c..4e2bbefab 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 @@ -21,6 +21,6 @@ include "basic_2/rt_transition/cnr_teqg.ma". (**) (* one dependence *) (* Basic_1: was: nf2_dec *) (* Basic_2A1: uses: cnr_dec *) lemma cnr_dec_teqx (h) (G) (L): - ∀T1. ∨∨ ❪G,L❫ ⊢ ➡𝐍[h,0] T1 - | ∃∃T2. ❪G,L❫ ⊢ T1 ➡[h,0] T2 & (T1 ≅ T2 → ⊥). + ∀T1. ∨∨ ❨G,L❩ ⊢ ➡𝐍[h,0] T1 + | ∃∃T2. ❨G,L❩ ⊢ T1 ➡[h,0] T2 & (T1 ≅ T2 → ⊥). /2 width=1 by cnr_dec_teqg/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx.ma index d4e3de738..e1673439e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx.ma @@ -28,8 +28,8 @@ interpretation (* Basic inversion lemmas ***************************************************) lemma cnx_inv_abst (G) (L): - ∀p,V,T. ❪G,L❫ ⊢ ⬈𝐍 ⓛ[p]V.T → - ∧∧ ❪G,L❫ ⊢ ⬈𝐍 V & ❪G,L.ⓛV❫ ⊢ ⬈𝐍 T. + ∀p,V,T. ❨G,L❩ ⊢ ⬈𝐍 ⓛ[p]V.T → + ∧∧ ❨G,L❩ ⊢ ⬈𝐍 V & ❨G,L.ⓛV❩ ⊢ ⬈𝐍 T. #G #L #p #V1 #T1 #HVT1 @conj [ #V2 #HV2 lapply (HVT1 (ⓛ[p]V2.T1) ?) -HVT1 /2 width=2 by cpx_pair_sn/ -HV2 | #T2 #HT2 lapply (HVT1 (ⓛ[p]V1.T2) ?) -HVT1 /2 width=2 by cpx_bind/ -HT2 @@ -39,8 +39,8 @@ qed-. (* Basic_2A1: was: cnx_inv_abbr *) lemma cnx_inv_abbr_neg (G) (L): - ∀V,T. ❪G,L❫ ⊢ ⬈𝐍 -ⓓV.T → - ∧∧ ❪G,L❫ ⊢ ⬈𝐍 V & ❪G,L.ⓓV❫ ⊢ ⬈𝐍 T. + ∀V,T. ❨G,L❩ ⊢ ⬈𝐍 -ⓓV.T → + ∧∧ ❨G,L❩ ⊢ ⬈𝐍 V & ❨G,L.ⓓV❩ ⊢ ⬈𝐍 T. #G #L #V1 #T1 #HVT1 @conj [ #V2 #HV2 lapply (HVT1 (-ⓓV2.T1) ?) -HVT1 /2 width=2 by cpx_pair_sn/ -HV2 | #T2 #HT2 lapply (HVT1 (-ⓓV1.T2) ?) -HVT1 /2 width=2 by cpx_bind/ -HT2 @@ -50,7 +50,7 @@ qed-. (* Basic_2A1: was: cnx_inv_eps *) lemma cnx_inv_cast (G) (L): - ∀V,T. ❪G,L❫ ⊢ ⬈𝐍 ⓝV.T → ⊥. + ∀V,T. ❨G,L❩ ⊢ ⬈𝐍 ⓝV.T → ⊥. #G #L #V #T #H lapply (H T ?) -H /2 width=6 by cpx_eps, teqg_inv_pair_xy_y/ qed-. @@ -58,13 +58,13 @@ qed-. (* Basic properties *********************************************************) lemma cnx_sort (G) (L): - ∀s. ❪G,L❫ ⊢ ⬈𝐍 ⋆s. + ∀s. ❨G,L❩ ⊢ ⬈𝐍 ⋆s. #G #L #s #X #H elim (cpx_inv_sort1 … H) -H /2 width=1 by teqg_sort/ qed. lemma cnx_abst (G) (L): - ∀p,W,T. ❪G,L❫ ⊢ ⬈𝐍 W → ❪G,L.ⓛW❫ ⊢ ⬈𝐍 T → ❪G,L❫ ⊢ ⬈𝐍 ⓛ[p]W.T. + ∀p,W,T. ❨G,L❩ ⊢ ⬈𝐍 W → ❨G,L.ⓛW❩ ⊢ ⬈𝐍 T → ❨G,L❩ ⊢ ⬈𝐍 ⓛ[p]W.T. #G #L #p #W #T #HW #HT #X #H elim (cpx_inv_abst1 … H) -H #W0 #T0 #HW0 #HT0 #H destruct @teqx_pair [ @HW | @HT ] // (**) (* auto fails because δ-expansion gets in the way *) diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_basic.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_basic.ma index 1532cfcf6..955894813 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_basic.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_basic.ma @@ -21,7 +21,7 @@ include "basic_2/rt_transition/cnx.ma". (* Advanced inversion lemmas ************************************************) lemma cnx_inv_abbr_pos (G) (L): - ∀V,T. ❪G,L❫ ⊢ ⬈𝐍 +ⓓV.T → ⊥. + ∀V,T. ❨G,L❩ ⊢ ⬈𝐍 +ⓓV.T → ⊥. #G #L #V #U1 #H elim (cpx_subst G (L.ⓓV) U1 … 0) [|*: /2 width=4 by drops_refl/ ] #U2 #T2 #HU12 #HTU2 elim (teqx_dec U1 U2) #HnU12 [ -HU12 | -HTU2 ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_cnx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_cnx.ma index 46dccc509..28028b68b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_cnx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_cnx.ma @@ -21,7 +21,7 @@ include "basic_2/rt_transition/cnx.ma". (* Advanced properties ******************************************************) lemma cnx_teqx_trans (G) (L): - ∀T1. ❪G,L❫ ⊢ ⬈𝐍 T1 → ∀T2. T1 ≅ T2 → ❪G,L❫ ⊢ ⬈𝐍 T2. + ∀T1. ❨G,L❩ ⊢ ⬈𝐍 T1 → ∀T2. T1 ≅ T2 → ❨G,L❩ ⊢ ⬈𝐍 T2. #G #L #T1 #HT1 #T2 #HT12 #T #HT2 lapply (teqx_cpx_trans … HT12 … HT2) -HT2 #H lapply (HT1 … H) -HT1 -H /2 width=5 by teqx_canc_sn/ (**) (* full auto fails *) diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_drops.ma index 3296683cb..4d0fef89f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_drops.ma @@ -21,13 +21,13 @@ include "basic_2/rt_transition/cnx.ma". (* Properties with generic slicing ******************************************) lemma cnx_lref_atom (G) (L): - ∀i. ⇩[i] L ≘ ⋆ → ❪G,L❫ ⊢ ⬈𝐍 #i. + ∀i. ⇩[i] L ≘ ⋆ → ❨G,L❩ ⊢ ⬈𝐍 #i. #G #L #i #Hi #X #H elim (cpx_inv_lref1_drops … H) -H // * #I #K #V1 #V2 #HLK lapply (drops_mono … Hi … HLK) -L #H destruct qed. lemma cnx_lref_unit (G) (L): - ∀I,K,i. ⇩[i] L ≘ K.ⓤ[I] → ❪G,L❫ ⊢ ⬈𝐍 #i. + ∀I,K,i. ⇩[i] L ≘ K.ⓤ[I] → ❨G,L❩ ⊢ ⬈𝐍 #i. #G #L #I #K #i #HLK #X #H elim (cpx_inv_lref1_drops … H) -H // * #Z #Y #V1 #V2 #HLY lapply (drops_mono … HLK … HLY) -L #H destruct qed. @@ -43,7 +43,7 @@ qed-. (* Basic_2A1: was: cnx_inv_delta *) lemma cnx_inv_lref_pair (G) (L): - ∀I,K,V,i. ⇩[i] L ≘ K.ⓑ[I]V → ❪G,L❫ ⊢ ⬈𝐍 #i → ⊥. + ∀I,K,V,i. ⇩[i] L ≘ K.ⓑ[I]V → ❨G,L❩ ⊢ ⬈𝐍 #i → ⊥. #G #L #I #K #V #i #HLK #H elim (lifts_total V (𝐔❨↑i❩)) #W #HVW lapply (H W ?) -H /2 width=7 by cpx_delta_drops/ -HLK diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_simple.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_simple.ma index 261a220aa..4adb8cffc 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_simple.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_simple.ma @@ -20,8 +20,8 @@ include "basic_2/rt_transition/cnx.ma". (* Inversion lemmas with simple terms ***************************************) lemma cnx_inv_appl (G) (L): - ∀V,T. ❪G,L❫ ⊢ ⬈𝐍 ⓐV.T → - ∧∧ ❪G,L❫ ⊢ ⬈𝐍 V & ❪G,L❫ ⊢ ⬈𝐍 T & 𝐒❪T❫. + ∀V,T. ❨G,L❩ ⊢ ⬈𝐍 ⓐV.T → + ∧∧ ❨G,L❩ ⊢ ⬈𝐍 V & ❨G,L❩ ⊢ ⬈𝐍 T & 𝐒❨T❩. #G #L #V1 #T1 #HVT1 @and3_intro [ #V2 #HV2 lapply (HVT1 (ⓐV2.T1) ?) -HVT1 /2 width=1 by cpx_pair_sn/ -HV2 #H elim (teqx_inv_pair … H) -H // @@ -41,7 +41,7 @@ qed-. (* Properties with simple terms *********************************************) lemma cnx_appl_simple (G) (L): - ∀V,T. ❪G,L❫ ⊢ ⬈𝐍 V → ❪G,L❫ ⊢ ⬈𝐍 T → 𝐒❪T❫ → ❪G,L❫ ⊢ ⬈𝐍 ⓐV.T. + ∀V,T. ❨G,L❩ ⊢ ⬈𝐍 V → ❨G,L❩ ⊢ ⬈𝐍 T → 𝐒❨T❩ → ❨G,L❩ ⊢ ⬈𝐍 ⓐV.T. #G #L #V #T #HV #HT #HS #X #H elim (cpx_inv_appl1_simple … H) -H // #V0 #T0 #HV0 #HT0 #H destruct @teqx_pair [ @HV | @HT ] // (**) (* auto fails because δ-expansion gets in the way *) diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg.ma index 3bdc93e97..3062e8120 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg.ma @@ -69,7 +69,7 @@ interpretation (* Note: this is "∀Rs,Rk. reflexive … Rk → ∀G,L. reflexive … (cpg Rs Rk (𝟘𝟘) G L)" *) lemma cpg_refl (Rs) (Rk): - reflexive … Rk → ∀G,T,L. ❪G,L❫ ⊢ T ⬈[Rs,Rk,𝟘𝟘] T. + reflexive … Rk → ∀G,T,L. ❨G,L❩ ⊢ T ⬈[Rs,Rk,𝟘𝟘] T. #Rk #HRk #h #G #T elim T -T // * /2 width=1 by cpg_bind/ * /2 width=1 by cpg_appl, cpg_cast/ qed. @@ -77,12 +77,12 @@ qed. (* Basic inversion lemmas ***************************************************) fact cpg_inv_atom1_aux (Rs) (Rk) (c) (G) (L): - ∀T1,T2. ❪G,L❫ ⊢ T1 ⬈[Rs,Rk,c] T2 → ∀J. T1 = ⓪[J] → + ∀T1,T2. ❨G,L❩ ⊢ T1 ⬈[Rs,Rk,c] T2 → ∀J. T1 = ⓪[J] → ∨∨ ∧∧ T2 = ⓪[J] & c = 𝟘𝟘 | ∃∃s1,s2. Rs s1 s2 & J = Sort s1 & T2 = ⋆s2 & c = 𝟘𝟙 - | ∃∃cV,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓓV1 & J = LRef 0 & c = cV - | ∃∃cV,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓛV1 & J = LRef 0 & c = cV+𝟘𝟙 - | ∃∃I,K,T,i. ❪G,K❫ ⊢ #i ⬈[Rs,Rk,c] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I] & J = LRef (↑i). + | ∃∃cV,K,V1,V2. ❨G,K❩ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓓV1 & J = LRef 0 & c = cV + | ∃∃cV,K,V1,V2. ❨G,K❩ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓛV1 & J = LRef 0 & c = cV+𝟘𝟙 + | ∃∃I,K,T,i. ❨G,K❩ ⊢ #i ⬈[Rs,Rk,c] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I] & J = LRef (↑i). #Rs #Rk #c #G #L #T1 #T2 * -c -G -L -T1 -T2 [ #I #G #L #J #H destruct /3 width=1 by or5_intro0, conj/ | #G #L #s1 #s2 #HRs #J #H destruct /3 width=5 by or5_intro1, ex4_2_intro/ @@ -101,16 +101,16 @@ fact cpg_inv_atom1_aux (Rs) (Rk) (c) (G) (L): qed-. lemma cpg_inv_atom1 (Rs) (Rk) (c) (G) (L): - ∀J,T2. ❪G,L❫ ⊢ ⓪[J] ⬈[Rs,Rk,c] T2 → + ∀J,T2. ❨G,L❩ ⊢ ⓪[J] ⬈[Rs,Rk,c] T2 → ∨∨ ∧∧ T2 = ⓪[J] & c = 𝟘𝟘 | ∃∃s1,s2. Rs s1 s2 & J = Sort s1 & T2 = ⋆s2 & c = 𝟘𝟙 - | ∃∃cV,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓓV1 & J = LRef 0 & c = cV - | ∃∃cV,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓛV1 & J = LRef 0 & c = cV+𝟘𝟙 - | ∃∃I,K,T,i. ❪G,K❫ ⊢ #i ⬈[Rs,Rk,c] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I] & J = LRef (↑i). + | ∃∃cV,K,V1,V2. ❨G,K❩ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓓV1 & J = LRef 0 & c = cV + | ∃∃cV,K,V1,V2. ❨G,K❩ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓛV1 & J = LRef 0 & c = cV+𝟘𝟙 + | ∃∃I,K,T,i. ❨G,K❩ ⊢ #i ⬈[Rs,Rk,c] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I] & J = LRef (↑i). /2 width=3 by cpg_inv_atom1_aux/ qed-. lemma cpg_inv_sort1 (Rs) (Rk) (c) (G) (L): - ∀T2,s1. ❪G,L❫ ⊢ ⋆s1 ⬈[Rs,Rk,c] T2 → + ∀T2,s1. ❨G,L❩ ⊢ ⋆s1 ⬈[Rs,Rk,c] T2 → ∨∨ ∧∧ T2 = ⋆s1 & c = 𝟘𝟘 | ∃∃s2. Rs s1 s2 & T2 = ⋆s2 & c = 𝟘𝟙. #Rs #Rk #c #G #L #T2 #s #H @@ -122,10 +122,10 @@ elim (cpg_inv_atom1 … H) -H * /3 width=1 by or_introl, conj/ qed-. lemma cpg_inv_zero1 (Rs) (Rk) (c) (G) (L): - ∀T2. ❪G,L❫ ⊢ #0 ⬈[Rs,Rk,c] T2 → + ∀T2. ❨G,L❩ ⊢ #0 ⬈[Rs,Rk,c] T2 → ∨∨ ∧∧ T2 = #0 & c = 𝟘𝟘 - | ∃∃cV,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓓV1 & c = cV - | ∃∃cV,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓛV1 & c = cV+𝟘𝟙. + | ∃∃cV,K,V1,V2. ❨G,K❩ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓓV1 & c = cV + | ∃∃cV,K,V1,V2. ❨G,K❩ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓛV1 & c = cV+𝟘𝟙. #Rs #Rk #c #G #L #T2 #H elim (cpg_inv_atom1 … H) -H * /3 width=1 by or3_intro0, conj/ [ #s1 #s2 #_ #H destruct @@ -135,9 +135,9 @@ elim (cpg_inv_atom1 … H) -H * /3 width=1 by or3_intro0, conj/ qed-. lemma cpg_inv_lref1 (Rs) (Rk) (c) (G) (L): - ∀T2,i. ❪G,L❫ ⊢ #↑i ⬈[Rs,Rk,c] T2 → + ∀T2,i. ❨G,L❩ ⊢ #↑i ⬈[Rs,Rk,c] T2 → ∨∨ ∧∧ T2 = #(↑i) & c = 𝟘𝟘 - | ∃∃I,K,T. ❪G,K❫ ⊢ #i ⬈[Rs,Rk,c] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I]. + | ∃∃I,K,T. ❨G,K❩ ⊢ #i ⬈[Rs,Rk,c] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I]. #Rs #Rk #c #G #L #T2 #i #H elim (cpg_inv_atom1 … H) -H * /3 width=1 by or_introl, conj/ [ #s1 #s2 #_ #H destruct @@ -147,7 +147,7 @@ elim (cpg_inv_atom1 … H) -H * /3 width=1 by or_introl, conj/ qed-. lemma cpg_inv_gref1 (Rs) (Rk) (c) (G) (L): - ∀T2,l. ❪G,L❫ ⊢ §l ⬈[Rs,Rk,c] T2 → ∧∧ T2 = §l & c = 𝟘𝟘. + ∀T2,l. ❨G,L❩ ⊢ §l ⬈[Rs,Rk,c] T2 → ∧∧ T2 = §l & c = 𝟘𝟘. #Rs #Rk #c #G #L #T2 #l #H elim (cpg_inv_atom1 … H) -H * /2 width=1 by conj/ [ #s1 #s2 #_ #H destruct @@ -157,10 +157,10 @@ elim (cpg_inv_atom1 … H) -H * /2 width=1 by conj/ qed-. fact cpg_inv_bind1_aux (Rs) (Rk) (c) (G) (L): - ∀U,U2. ❪G,L❫ ⊢ U ⬈[Rs,Rk,c] U2 → + ∀U,U2. ❨G,L❩ ⊢ U ⬈[Rs,Rk,c] U2 → ∀p,J,V1,U1. U = ⓑ[p,J]V1.U1 → - ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❪G,L.ⓑ[J]V1❫ ⊢ U1 ⬈[Rs,Rk,cT] T2 & U2 = ⓑ[p,J]V2.T2 & c = ((↕*cV)∨cT) - | ∃∃cT,T. ⇧[1] T ≘ U1 & ❪G,L❫ ⊢ T ⬈[Rs,Rk,cT] U2 & p = true & J = Abbr & c = cT+𝟙𝟘. + ∨∨ ∃∃cV,cT,V2,T2. ❨G,L❩ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❨G,L.ⓑ[J]V1❩ ⊢ U1 ⬈[Rs,Rk,cT] T2 & U2 = ⓑ[p,J]V2.T2 & c = ((↕*cV)∨cT) + | ∃∃cT,T. ⇧[1] T ≘ U1 & ❨G,L❩ ⊢ T ⬈[Rs,Rk,cT] U2 & p = true & J = Abbr & c = cT+𝟙𝟘. #Rs #Rk #c #G #L #U #U2 * -c -G -L -U -U2 [ #I #G #L #q #J #W #U1 #H destruct | #G #L #s1 #s2 #_ #q #J #W #U1 #H destruct @@ -179,22 +179,22 @@ fact cpg_inv_bind1_aux (Rs) (Rk) (c) (G) (L): qed-. lemma cpg_inv_bind1 (Rs) (Rk) (c) (G) (L): - ∀p,I,V1,T1,U2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈[Rs,Rk,c] U2 → - ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬈[Rs,Rk,cT] T2 & U2 = ⓑ[p,I]V2.T2 & c = ((↕*cV)∨cT) - | ∃∃cT,T. ⇧[1] T ≘ T1 & ❪G,L❫ ⊢ T ⬈[Rs,Rk,cT] U2 & p = true & I = Abbr & c = cT+𝟙𝟘. + ∀p,I,V1,T1,U2. ❨G,L❩ ⊢ ⓑ[p,I]V1.T1 ⬈[Rs,Rk,c] U2 → + ∨∨ ∃∃cV,cT,V2,T2. ❨G,L❩ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❨G,L.ⓑ[I]V1❩ ⊢ T1 ⬈[Rs,Rk,cT] T2 & U2 = ⓑ[p,I]V2.T2 & c = ((↕*cV)∨cT) + | ∃∃cT,T. ⇧[1] T ≘ T1 & ❨G,L❩ ⊢ T ⬈[Rs,Rk,cT] U2 & p = true & I = Abbr & c = cT+𝟙𝟘. /2 width=3 by cpg_inv_bind1_aux/ qed-. lemma cpg_inv_abbr1 (Rs) (Rk) (c) (G) (L): - ∀p,V1,T1,U2. ❪G,L❫ ⊢ ⓓ[p]V1.T1 ⬈[Rs,Rk,c] U2 → - ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❪G,L.ⓓV1❫ ⊢ T1 ⬈[Rs,Rk,cT] T2 & U2 = ⓓ[p]V2.T2 & c = ((↕*cV)∨cT) - | ∃∃cT,T. ⇧[1] T ≘ T1 & ❪G,L❫ ⊢ T ⬈[Rs,Rk,cT] U2 & p = true & c = cT+𝟙𝟘. + ∀p,V1,T1,U2. ❨G,L❩ ⊢ ⓓ[p]V1.T1 ⬈[Rs,Rk,c] U2 → + ∨∨ ∃∃cV,cT,V2,T2. ❨G,L❩ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❨G,L.ⓓV1❩ ⊢ T1 ⬈[Rs,Rk,cT] T2 & U2 = ⓓ[p]V2.T2 & c = ((↕*cV)∨cT) + | ∃∃cT,T. ⇧[1] T ≘ T1 & ❨G,L❩ ⊢ T ⬈[Rs,Rk,cT] U2 & p = true & c = cT+𝟙𝟘. #Rs #Rk #c #p #G #L #V1 #T1 #U2 #H elim (cpg_inv_bind1 … H) -H * /3 width=8 by ex4_4_intro, ex4_2_intro, or_introl, or_intror/ qed-. lemma cpg_inv_abst1 (Rs) (Rk) (c) (G) (L): - ∀p,V1,T1,U2. ❪G,L❫ ⊢ ⓛ[p]V1.T1 ⬈[Rs,Rk,c] U2 → - ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❪G,L.ⓛV1❫ ⊢ T1 ⬈[Rs,Rk,cT] T2 & U2 = ⓛ[p]V2.T2 & c = ((↕*cV)∨cT). + ∀p,V1,T1,U2. ❨G,L❩ ⊢ ⓛ[p]V1.T1 ⬈[Rs,Rk,c] U2 → + ∃∃cV,cT,V2,T2. ❨G,L❩ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❨G,L.ⓛV1❩ ⊢ T1 ⬈[Rs,Rk,cT] T2 & U2 = ⓛ[p]V2.T2 & c = ((↕*cV)∨cT). #Rs #Rk #c #p #G #L #V1 #T1 #U2 #H elim (cpg_inv_bind1 … H) -H * [ /3 width=8 by ex4_4_intro/ | #c #T #_ #_ #_ #H destruct @@ -202,11 +202,11 @@ lemma cpg_inv_abst1 (Rs) (Rk) (c) (G) (L): qed-. fact cpg_inv_appl1_aux (Rs) (Rk) (c) (G) (L): - ∀U,U2. ❪G,L❫ ⊢ U ⬈[Rs,Rk,c] U2 → + ∀U,U2. ❨G,L❩ ⊢ U ⬈[Rs,Rk,c] U2 → ∀V1,U1. U = ⓐV1.U1 → - ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❪G,L❫ ⊢ U1 ⬈[Rs,Rk,cT] T2 & U2 = ⓐV2.T2 & c = ((↕*cV)∨cT) - | ∃∃cV,cW,cT,p,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❪G,L❫ ⊢ W1 ⬈[Rs,Rk,cW] W2 & ❪G,L.ⓛW1❫ ⊢ T1 ⬈[Rs,Rk,cT] T2 & U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘 - | ∃∃cV,cW,cT,p,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V & ⇧[1] V ≘ V2 & ❪G,L❫ ⊢ W1 ⬈[Rs,Rk,cW] W2 & ❪G,L.ⓓW1❫ ⊢ T1 ⬈[Rs,Rk,cT] T2 & U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘. + ∨∨ ∃∃cV,cT,V2,T2. ❨G,L❩ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❨G,L❩ ⊢ U1 ⬈[Rs,Rk,cT] T2 & U2 = ⓐV2.T2 & c = ((↕*cV)∨cT) + | ∃∃cV,cW,cT,p,V2,W1,W2,T1,T2. ❨G,L❩ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❨G,L❩ ⊢ W1 ⬈[Rs,Rk,cW] W2 & ❨G,L.ⓛW1❩ ⊢ T1 ⬈[Rs,Rk,cT] T2 & U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘 + | ∃∃cV,cW,cT,p,V,V2,W1,W2,T1,T2. ❨G,L❩ ⊢ V1 ⬈[Rs,Rk,cV] V & ⇧[1] V ≘ V2 & ❨G,L❩ ⊢ W1 ⬈[Rs,Rk,cW] W2 & ❨G,L.ⓓW1❩ ⊢ T1 ⬈[Rs,Rk,cT] T2 & U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘. #Rs #Rk #c #G #L #U #U2 * -c -G -L -U -U2 [ #I #G #L #W #U1 #H destruct | #G #L #s1 #s2 #_ #W #U1 #H destruct @@ -225,18 +225,18 @@ fact cpg_inv_appl1_aux (Rs) (Rk) (c) (G) (L): qed-. lemma cpg_inv_appl1 (Rs) (Rk) (c) (G) (L): - ∀V1,U1,U2. ❪G,L❫ ⊢ ⓐV1.U1 ⬈[Rs,Rk,c] U2 → - ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❪G,L❫ ⊢ U1 ⬈[Rs,Rk,cT] T2 & U2 = ⓐV2.T2 & c = ((↕*cV)∨cT) - | ∃∃cV,cW,cT,p,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❪G,L❫ ⊢ W1 ⬈[Rs,Rk,cW] W2 & ❪G,L.ⓛW1❫ ⊢ T1 ⬈[Rs,Rk,cT] T2 & U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘 - | ∃∃cV,cW,cT,p,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V & ⇧[1] V ≘ V2 & ❪G,L❫ ⊢ W1 ⬈[Rs,Rk,cW] W2 & ❪G,L.ⓓW1❫ ⊢ T1 ⬈[Rs,Rk,cT] T2 & U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘. + ∀V1,U1,U2. ❨G,L❩ ⊢ ⓐV1.U1 ⬈[Rs,Rk,c] U2 → + ∨∨ ∃∃cV,cT,V2,T2. ❨G,L❩ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❨G,L❩ ⊢ U1 ⬈[Rs,Rk,cT] T2 & U2 = ⓐV2.T2 & c = ((↕*cV)∨cT) + | ∃∃cV,cW,cT,p,V2,W1,W2,T1,T2. ❨G,L❩ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❨G,L❩ ⊢ W1 ⬈[Rs,Rk,cW] W2 & ❨G,L.ⓛW1❩ ⊢ T1 ⬈[Rs,Rk,cT] T2 & U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘 + | ∃∃cV,cW,cT,p,V,V2,W1,W2,T1,T2. ❨G,L❩ ⊢ V1 ⬈[Rs,Rk,cV] V & ⇧[1] V ≘ V2 & ❨G,L❩ ⊢ W1 ⬈[Rs,Rk,cW] W2 & ❨G,L.ⓓW1❩ ⊢ T1 ⬈[Rs,Rk,cT] T2 & U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘. /2 width=3 by cpg_inv_appl1_aux/ qed-. fact cpg_inv_cast1_aux (Rs) (Rk) (c) (G) (L): - ∀U,U2. ❪G,L❫ ⊢ U ⬈[Rs,Rk,c] U2 → + ∀U,U2. ❨G,L❩ ⊢ U ⬈[Rs,Rk,c] U2 → ∀V1,U1. U = ⓝV1.U1 → - ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❪G,L❫ ⊢ U1 ⬈[Rs,Rk,cT] T2 & Rk cV cT & U2 = ⓝV2.T2 & c = (cV∨cT) - | ∃∃cT. ❪G,L❫ ⊢ U1 ⬈[Rs,Rk,cT] U2 & c = cT+𝟙𝟘 - | ∃∃cV. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] U2 & c = cV+𝟘𝟙. + ∨∨ ∃∃cV,cT,V2,T2. ❨G,L❩ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❨G,L❩ ⊢ U1 ⬈[Rs,Rk,cT] T2 & Rk cV cT & U2 = ⓝV2.T2 & c = (cV∨cT) + | ∃∃cT. ❨G,L❩ ⊢ U1 ⬈[Rs,Rk,cT] U2 & c = cT+𝟙𝟘 + | ∃∃cV. ❨G,L❩ ⊢ V1 ⬈[Rs,Rk,cV] U2 & c = cV+𝟘𝟙. #Rs #Rk #c #G #L #U #U2 * -c -G -L -U -U2 [ #I #G #L #W #U1 #H destruct | #G #L #s1 #s2 #_ #W #U1 #H destruct @@ -255,27 +255,27 @@ fact cpg_inv_cast1_aux (Rs) (Rk) (c) (G) (L): qed-. lemma cpg_inv_cast1 (Rs) (Rk) (c) (G) (L): - ∀V1,U1,U2. ❪G,L❫ ⊢ ⓝV1.U1 ⬈[Rs,Rk,c] U2 → - ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❪G,L❫ ⊢ U1 ⬈[Rs,Rk,cT] T2 & Rk cV cT & U2 = ⓝV2.T2 & c = (cV∨cT) - | ∃∃cT. ❪G,L❫ ⊢ U1 ⬈[Rs,Rk,cT] U2 & c = cT+𝟙𝟘 - | ∃∃cV. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] U2 & c = cV+𝟘𝟙. + ∀V1,U1,U2. ❨G,L❩ ⊢ ⓝV1.U1 ⬈[Rs,Rk,c] U2 → + ∨∨ ∃∃cV,cT,V2,T2. ❨G,L❩ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❨G,L❩ ⊢ U1 ⬈[Rs,Rk,cT] T2 & Rk cV cT & U2 = ⓝV2.T2 & c = (cV∨cT) + | ∃∃cT. ❨G,L❩ ⊢ U1 ⬈[Rs,Rk,cT] U2 & c = cT+𝟙𝟘 + | ∃∃cV. ❨G,L❩ ⊢ V1 ⬈[Rs,Rk,cV] U2 & c = cV+𝟘𝟙. /2 width=3 by cpg_inv_cast1_aux/ qed-. (* Advanced inversion lemmas ************************************************) lemma cpg_inv_zero1_pair (Rs) (Rk) (c) (G) (K): - ∀I,V1,T2. ❪G,K.ⓑ[I]V1❫ ⊢ #0 ⬈[Rs,Rk,c] T2 → + ∀I,V1,T2. ❨G,K.ⓑ[I]V1❩ ⊢ #0 ⬈[Rs,Rk,c] T2 → ∨∨ ∧∧ T2 = #0 & c = 𝟘𝟘 - | ∃∃cV,V2. ❪G,K❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & I = Abbr & c = cV - | ∃∃cV,V2. ❪G,K❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & I = Abst & c = cV+𝟘𝟙. + | ∃∃cV,V2. ❨G,K❩ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & I = Abbr & c = cV + | ∃∃cV,V2. ❨G,K❩ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & I = Abst & c = cV+𝟘𝟙. #Rs #Rk #c #G #K #I #V1 #T2 #H elim (cpg_inv_zero1 … H) -H /2 width=1 by or3_intro0/ * #z #Y #X1 #X2 #HX12 #HXT2 #H1 #H2 destruct /3 width=5 by or3_intro1, or3_intro2, ex4_2_intro/ qed-. lemma cpg_inv_lref1_bind (Rs) (Rk) (c) (G) (K): - ∀I,T2,i. ❪G,K.ⓘ[I]❫ ⊢ #↑i ⬈[Rs,Rk,c] T2 → + ∀I,T2,i. ❨G,K.ⓘ[I]❩ ⊢ #↑i ⬈[Rs,Rk,c] T2 → ∨∨ ∧∧ T2 = #(↑i) & c = 𝟘𝟘 - | ∃∃T. ❪G,K❫ ⊢ #i ⬈[Rs,Rk,c] T & ⇧[1] T ≘ T2. + | ∃∃T. ❨G,K❩ ⊢ #i ⬈[Rs,Rk,c] T & ⇧[1] T ≘ T2. #Rs #Rk #c #G #K #I #T2 #i #H elim (cpg_inv_lref1 … H) -H /2 width=1 by or_introl/ * #Z #Y #T #HT #HT2 #H destruct /3 width=3 by ex2_intro, or_intror/ qed-. @@ -283,8 +283,8 @@ qed-. (* Basic forward lemmas *****************************************************) lemma cpg_fwd_bind1_minus (Rs) (Rk) (c) (G) (L): - ∀I,V1,T1,T. ❪G,L❫ ⊢ -ⓑ[I]V1.T1 ⬈[Rs,Rk,c] T → ∀p. - ∃∃V2,T2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈[Rs,Rk,c] ⓑ[p,I]V2.T2 & T = -ⓑ[I]V2.T2. + ∀I,V1,T1,T. ❨G,L❩ ⊢ -ⓑ[I]V1.T1 ⬈[Rs,Rk,c] T → ∀p. + ∃∃V2,T2. ❨G,L❩ ⊢ ⓑ[p,I]V1.T1 ⬈[Rs,Rk,c] ⓑ[p,I]V2.T2 & T = -ⓑ[I]V2.T2. #Rs #Rk #c #G #L #I #V1 #T1 #T #H #p elim (cpg_inv_bind1 … H) -H * [ #cV #cT #V2 #T2 #HV12 #HT12 #H1 #H2 destruct /3 width=4 by cpg_bind, ex2_2_intro/ | #c #T2 #_ #_ #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_drops.ma index 4e66d137d..b8de514bf 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_drops.ma @@ -23,8 +23,8 @@ include "basic_2/rt_transition/cpg.ma". (* Advanced properties ******************************************************) lemma cpg_delta_drops (Rs) (Rk) (c) (G) (K): - ∀V,V2,i,L,T2. ⇩[i] L ≘ K.ⓓV → ❪G,K❫ ⊢ V ⬈[Rs,Rk,c] V2 → - ⇧[↑i] V2 ≘ T2 → ❪G,L❫ ⊢ #i ⬈[Rs,Rk,c] T2. + ∀V,V2,i,L,T2. ⇩[i] L ≘ K.ⓓV → ❨G,K❩ ⊢ V ⬈[Rs,Rk,c] V2 → + ⇧[↑i] V2 ≘ T2 → ❨G,L❩ ⊢ #i ⬈[Rs,Rk,c] T2. #Rs #Rk #c #G #K #V #V2 #i elim i -i [ #L #T2 #HLK lapply (drops_fwd_isid … HLK ?) // #H destruct /3 width=3 by cpg_delta/ | #i #IH #L0 #T0 #H0 #HV2 #HVT2 @@ -34,8 +34,8 @@ lemma cpg_delta_drops (Rs) (Rk) (c) (G) (K): qed. lemma cpg_ell_drops (Rs) (Rk) (c) (G) (K): - ∀V,V2,i,L,T2. ⇩[i] L ≘ K.ⓛV → ❪G,K❫ ⊢ V ⬈[Rs,Rk,c] V2 → - ⇧[↑i] V2 ≘ T2 → ❪G,L❫ ⊢ #i ⬈[Rs,Rk,c+𝟘𝟙] T2. + ∀V,V2,i,L,T2. ⇩[i] L ≘ K.ⓛV → ❨G,K❩ ⊢ V ⬈[Rs,Rk,c] V2 → + ⇧[↑i] V2 ≘ T2 → ❨G,L❩ ⊢ #i ⬈[Rs,Rk,c+𝟘𝟙] T2. #Rs #Rk #c #G #K #V #V2 #i elim i -i [ #L #T2 #HLK lapply (drops_fwd_isid … HLK ?) // #H destruct /3 width=3 by cpg_ell/ | #i #IH #L0 #T0 #H0 #HV2 #HVT2 @@ -47,10 +47,10 @@ qed. (* Advanced inversion lemmas ************************************************) lemma cpg_inv_lref1_drops (Rs) (Rk) (c) (G): - ∀i,L,T2. ❪G,L❫ ⊢ #i ⬈[Rs,Rk,c] T2 → + ∀i,L,T2. ❨G,L❩ ⊢ #i ⬈[Rs,Rk,c] T2 → ∨∨ ∧∧ T2 = #i & c = 𝟘𝟘 - | ∃∃cV,K,V,V2. ⇩[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ⬈[Rs,Rk,cV] V2 & ⇧[↑i] V2 ≘ T2 & c = cV - | ∃∃cV,K,V,V2. ⇩[i] L ≘ K.ⓛV & ❪G,K❫ ⊢ V ⬈[Rs,Rk,cV] V2 & ⇧[↑i] V2 ≘ T2 & c = cV + 𝟘𝟙. + | ∃∃cV,K,V,V2. ⇩[i] L ≘ K.ⓓV & ❨G,K❩ ⊢ V ⬈[Rs,Rk,cV] V2 & ⇧[↑i] V2 ≘ T2 & c = cV + | ∃∃cV,K,V,V2. ⇩[i] L ≘ K.ⓛV & ❨G,K❩ ⊢ V ⬈[Rs,Rk,cV] V2 & ⇧[↑i] V2 ≘ T2 & c = cV + 𝟘𝟙. #Rs #Rk #c #G #i elim i -i [ #L #T2 #H elim (cpg_inv_zero1 … H) -H * /3 width=1 by or3_intro0, conj/ /4 width=8 by drops_refl, ex4_4_intro, or3_intro2, or3_intro1/ @@ -67,11 +67,11 @@ lemma cpg_inv_lref1_drops (Rs) (Rk) (c) (G): qed-. lemma cpg_inv_atom1_drops (Rs) (Rk) (c) (G) (L): - ∀I,T2. ❪G,L❫ ⊢ ⓪[I] ⬈[Rs,Rk,c] T2 → + ∀I,T2. ❨G,L❩ ⊢ ⓪[I] ⬈[Rs,Rk,c] T2 → ∨∨ ∧∧ T2 = ⓪[I] & c = 𝟘𝟘 | ∃∃s1,s2. Rs s1 s2 & T2 = ⋆s2 & I = Sort s1 & c = 𝟘𝟙 - | ∃∃cV,i,K,V,V2. ⇩[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ⬈[Rs,Rk,cV] V2 & ⇧[↑i] V2 ≘ T2 & I = LRef i & c = cV - | ∃∃cV,i,K,V,V2. ⇩[i] L ≘ K.ⓛV & ❪G,K❫ ⊢ V ⬈[Rs,Rk,cV] V2 & ⇧[↑i] V2 ≘ T2 & I = LRef i & c = cV + 𝟘𝟙. + | ∃∃cV,i,K,V,V2. ⇩[i] L ≘ K.ⓓV & ❨G,K❩ ⊢ V ⬈[Rs,Rk,cV] V2 & ⇧[↑i] V2 ≘ T2 & I = LRef i & c = cV + | ∃∃cV,i,K,V,V2. ⇩[i] L ≘ K.ⓛV & ❨G,K❩ ⊢ V ⬈[Rs,Rk,cV] V2 & ⇧[↑i] V2 ≘ T2 & I = LRef i & c = cV + 𝟘𝟙. #Rs #Rk #c #G #L * #x #T2 #H [ elim (cpg_inv_sort1 … H) -H * /3 width=5 by or4_intro0, or4_intro1, ex4_2_intro, conj/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_simple.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_simple.ma index 47277708a..c543e3f86 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_simple.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_simple.ma @@ -21,8 +21,8 @@ include "basic_2/rt_transition/cpg.ma". (* Note: the main property of simple terms *) lemma cpg_inv_appl1_simple (Rs) (Rk) (c) (G) (L): - ∀V1,T1,U. ❪G,L❫ ⊢ ⓐV1.T1 ⬈[Rs,Rk,c] U → 𝐒❪T1❫ → - ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❪G,L❫ ⊢ T1 ⬈[Rs,Rk,cT] T2 & U = ⓐV2.T2 & c = ((↕*cV)∨cT). + ∀V1,T1,U. ❨G,L❩ ⊢ ⓐV1.T1 ⬈[Rs,Rk,c] U → 𝐒❨T1❩ → + ∃∃cV,cT,V2,T2. ❨G,L❩ ⊢ V1 ⬈[Rs,Rk,cV] V2 & ❨G,L❩ ⊢ T1 ⬈[Rs,Rk,cT] T2 & U = ⓐV2.T2 & c = ((↕*cV)∨cT). #Rs #Rk #c #G #L #V1 #T1 #U #H #HT1 elim (cpg_inv_appl1 … H) -H * [ /2 width=8 by ex4_4_intro/ | #cV #cW #cT #p #V2 #W1 #W2 #U1 #U2 #_ #_ #_ #H destruct 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 d14504422..d39b9411b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm.ma @@ -27,7 +27,7 @@ include "basic_2/rt_transition/cpg.ma". (* Basic_2A1: includes: cpr *) definition cpm (h) (G) (L) (n): relation2 term term ≝ - λT1,T2. ∃∃c. 𝐑𝐓❪n,c❫ & ❪G,L❫ ⊢ T1 ⬈[sh_is_next h,rtc_eq_t,c] T2. + λT1,T2. ∃∃c. 𝐑𝐓❨n,c❩ & ❨G,L❩ ⊢ T1 ⬈[sh_is_next h,rtc_eq_t,c] T2. interpretation "t-bound context-sensitive parallel rt-transition (term)" @@ -36,26 +36,26 @@ interpretation (* Basic properties *********************************************************) lemma cpm_ess (h) (G) (L): - ∀s. ❪G,L❫ ⊢ ⋆s ➡[h,1] ⋆(⫯[h]s). + ∀s. ❨G,L❩ ⊢ ⋆s ➡[h,1] ⋆(⫯[h]s). /3 width=3 by cpg_ess, ex2_intro/ qed. 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. + ∀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 (h) (n) (G) (K): - ∀V1,V2,W2. ❪G,K❫ ⊢ V1 ➡[h,n] V2 → - ⇧[1] V2 ≘ W2 → ❪G,K.ⓛV1❫ ⊢ #0 ➡[h,↑n] W2. + ∀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 (h) (n) (G) (K): - ∀I,T,U,i. ❪G,K❫ ⊢ #i ➡[h,n] T → - ⇧[1] T ≘ U → ❪G,K.ⓘ[I]❫ ⊢ #↑i ➡[h,n] U. + ∀I,T,U,i. ❨G,K❩ ⊢ #i ➡[h,n] T → + ⇧[1] T ≘ U → ❨G,K.ⓘ[I]❩ ⊢ #↑i ➡[h,n] U. #h #n #G #K #I #T #U #i * /3 width=5 by cpg_lref, ex2_intro/ qed. @@ -63,45 +63,45 @@ qed. (* Basic_2A1: includes: cpr_bind *) lemma cpm_bind (h) (n) (G) (L): ∀p,I,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. + ❨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 #G #L #p #I #V1 #V2 #T1 #T2 * #cV #HcV #HV12 * /5 width=5 by cpg_bind, isrt_max_O1, isr_shift, ex2_intro/ qed. 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. + ❨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 (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. + ❨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 (h) (n) (G) (L): - ∀T1,T. ⇧[1] T ≘ T1 → ∀T2. ❪G,L❫ ⊢ T ➡[h,n] T2 → - ∀V. ❪G,L❫ ⊢ +ⓓV.T1 ➡[h,n] T2. + ∀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 (h) (n) (G) (L): - ∀V,T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → ❪G,L❫ ⊢ ⓝV.T1 ➡[h,n] T2. + ∀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 (h) (n) (G) (L): - ∀V1,V2,T. ❪G,L❫ ⊢ V1 ➡[h,n] V2 → ❪G,L❫ ⊢ ⓝV1.T ➡[h,↑n] V2. + ∀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. @@ -109,8 +109,8 @@ qed. (* Basic_2A1: includes: cpr_beta *) lemma cpm_beta (h) (n) (G) (L): ∀p,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. + ❨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 #G #L #p #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. @@ -118,8 +118,8 @@ qed. (* Basic_2A1: includes: cpr_theta *) lemma cpm_theta (h) (n) (G) (L): ∀p,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. + ❨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 #G #L #p #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. @@ -135,7 +135,7 @@ lemma cpr_refl (h) (G) (L): reflexive … (cpm h G L 0). (* Advanced properties ******************************************************) lemma cpm_sort (h) (n) (G) (L): n ≤ 1 → - ∀s. ❪G,L❫ ⊢ ⋆s ➡[h,n] ⋆((next h)^n s). + ∀s. ❨G,L❩ ⊢ ⋆s ➡[h,n] ⋆((next h)^n s). #h * // #n #G #L #H #s <(le_n_O_to_eq n) /2 width=1 by le_S_S_to_le/ qed. @@ -143,12 +143,12 @@ qed. (* Basic inversion lemmas ***************************************************) lemma cpm_inv_atom1 (h) (n) (G) (L): - ∀J,T2. ❪G,L❫ ⊢ ⓪[J] ➡[h,n] T2 → + ∀J,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 ➡[h,n] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓓV1 & J = LRef 0 - | ∃∃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 ➡[h,n] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I] & J = LRef (↑i). + | ∃∃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 ➡[h,m] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓛV1 & J = LRef 0 & n = ↑m + | ∃∃I,K,T,i. ❨G,K❩ ⊢ #i ➡[h,n] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I] & J = LRef (↑i). #h #n #G #L #J #T2 * #c #Hc #H elim (cpg_inv_atom1 … H) -H * [ #H1 #H2 destruct /4 width=1 by isrt_inv_00, or5_intro0, conj/ | #s1 #s2 #H1 #H2 #H3 #H4 destruct /4 width=3 by isrt_inv_01, or5_intro1, ex3_intro/ @@ -163,7 +163,7 @@ lemma cpm_inv_atom1 (h) (n) (G) (L): qed-. lemma cpm_inv_sort1 (h) (n) (G) (L): - ∀T2,s1. ❪G,L❫ ⊢ ⋆s1 ➡[h,n] T2 → + ∀T2,s1. ❨G,L❩ ⊢ ⋆s1 ➡[h,n] T2 → ∧∧ T2 = ⋆(((next h)^n) s1) & n ≤ 1. #h #n #G #L #T2 #s1 * #c #Hc #H elim (cpg_inv_sort1 … H) -H * @@ -176,10 +176,10 @@ elim (cpg_inv_sort1 … H) -H * qed-. lemma cpm_inv_zero1 (h) (n) (G) (L): - ∀T2. ❪G,L❫ ⊢ #0 ➡[h,n] T2 → + ∀T2. ❨G,L❩ ⊢ #0 ➡[h,n] T2 → ∨∨ ∧∧ T2 = #0 & n = 0 - | ∃∃K,V1,V2. ❪G,K❫ ⊢ V1 ➡[h,n] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓓV1 - | ∃∃m,K,V1,V2. ❪G,K❫ ⊢ V1 ➡[h,m] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓛV1 & n = ↑m. + | ∃∃K,V1,V2. ❨G,K❩ ⊢ V1 ➡[h,n] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓓV1 + | ∃∃m,K,V1,V2. ❨G,K❩ ⊢ V1 ➡[h,m] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓛV1 & n = ↑m. #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 @@ -191,7 +191,7 @@ lemma cpm_inv_zero1 (h) (n) (G) (L): qed-. lemma cpm_inv_zero1_unit (h) (n) (I) (K) (G): - ∀X2. ❪G,K.ⓤ[I]❫ ⊢ #0 ➡[h,n] X2 → ∧∧ X2 = #0 & n = 0. + ∀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/ @@ -201,9 +201,9 @@ elim (cpm_inv_zero1 … H) -H * qed. lemma cpm_inv_lref1 (h) (n) (G) (L): - ∀T2,i. ❪G,L❫ ⊢ #↑i ➡[h,n] T2 → + ∀T2,i. ❨G,L❩ ⊢ #↑i ➡[h,n] T2 → ∨∨ ∧∧ T2 = #(↑i) & n = 0 - | ∃∃I,K,T. ❪G,K❫ ⊢ #i ➡[h,n] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I]. + | ∃∃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 @@ -212,7 +212,7 @@ lemma cpm_inv_lref1 (h) (n) (G) (L): qed-. lemma cpm_inv_lref1_ctop (h) (n) (G): - ∀X2,i. ❪G,⋆❫ ⊢ #i ➡[h,n] X2 → ∧∧ X2 = #i & n = 0. + ∀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/ @@ -227,16 +227,16 @@ lemma cpm_inv_lref1_ctop (h) (n) (G): qed. lemma cpm_inv_gref1 (h) (n) (G) (L): - ∀T2,l. ❪G,L❫ ⊢ §l ➡[h,n] T2 → ∧∧ T2 = §l & n = 0. + ∀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 (h) (n) (G) (L): - ∀p,I,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 ➡[h,n] U2 & p = true & I = Abbr. + ∀p,I,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 ➡[h,n] U2 & p = true & I = Abbr. #h #n #G #L #p #I #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 @@ -250,9 +250,9 @@ qed-. (* Basic_1: includes: pr0_gen_abbr pr2_gen_abbr *) (* Basic_2A1: includes: cpr_inv_abbr1 *) lemma cpm_inv_abbr1 (h) (n) (G) (L): - ∀p,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 ➡[h,n] U2 & p = true. + ∀p,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 ➡[h,n] U2 & p = true. #h #n #G #L #p #V1 #T1 #U2 #H elim (cpm_inv_bind1 … H) -H [ /3 width=1 by or_introl/ @@ -263,8 +263,8 @@ qed-. (* Basic_1: includes: pr0_gen_abst pr2_gen_abst *) (* Basic_2A1: includes: cpr_inv_abst1 *) lemma cpm_inv_abst1 (h) (n) (G) (L): - ∀p,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. + ∀p,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. #h #n #G #L #p #V1 #T1 #U2 #H elim (cpm_inv_bind1 … H) -H [ /3 width=1 by or_introl/ @@ -273,8 +273,8 @@ elim (cpm_inv_bind1 … H) -H qed-. lemma cpm_inv_abst_bi (h) (n) (G) (L): - ∀p1,p2,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. + ∀p1,p2,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 #G #L #p1 #p2 #V1 #V2 #T1 #T2 #H elim (cpm_inv_abst1 … H) -H #XV #XT #HV #HT #H destruct /2 width=1 by and3_intro/ @@ -283,10 +283,10 @@ qed-. (* Basic_1: includes: pr0_gen_appl pr2_gen_appl *) (* Basic_2A1: includes: cpr_inv_appl1 *) 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,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,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. + ∀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,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,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. #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 @@ -310,10 +310,10 @@ lemma cpm_inv_appl1 (h) (n) (G) (L): qed-. 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 ➡[h,n] U2 - | ∃∃m. ❪G,L❫ ⊢ V1 ➡[h,m] U2 & n = ↑m. + ∀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 ➡[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 @@ -332,8 +332,8 @@ qed-. (* Basic_2A1: includes: cpr_fwd_bind1_minus *) lemma cpm_fwd_bind1_minus (h) (n) (G) (L): - ∀I,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. + ∀I,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. #h #n #G #L #I #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-. @@ -343,32 +343,32 @@ qed-. lemma cpm_ind (h) (Q:relation5 …): (∀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 ➡[h,n] 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 ➡[h,n] 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 ➡[h,n] 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,0] V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡[h,n] 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,0] V2 → ❪G,L❫ ⊢ T1 ➡[h,n] 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 ➡[h,n] V2 → ❪G,L❫ ⊢ T1 ➡[h,n] 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 ➡[h,n] 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 ➡[h,n] 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 ➡[h,n] 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,0] V2 → ❪G,L❫ ⊢ W1 ➡[h,0] W2 → ❪G,L.ⓛW1❫ ⊢ T1 ➡[h,n] 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,0] V → ❪G,L❫ ⊢ W1 ➡[h,0] W2 → ❪G,L.ⓓW1❫ ⊢ T1 ➡[h,n] 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 ➡[h,n] 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 a096f5229..4fc6937b3 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 @@ -25,7 +25,7 @@ lemma cpm_aaa_conf (h) (n): ∀G,L. Conf3 … (aaa G L) (cpm h G L n). (* 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 ➡[h,1] 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 5251ac507..ea66025d5 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 @@ -21,7 +21,7 @@ include "basic_2/rt_transition/cpm.ma". (* Basic_2A1: includes: cpr_cpx *) lemma cpm_fwd_cpx (h) (n) (G) (L): - ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → ❪G,L❫ ⊢ T1 ⬈ T2. + ∀T1,T2. ❨G,L❩ ⊢ T1 ➡[h,n] T2 → ❨G,L❩ ⊢ T1 ⬈ T2. #h #n #G #L #T1 #T2 * #c #_ #HT12 /2 width=4 by cpg_cpx/ 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 38c78dea6..7beb18d9c 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 @@ -51,16 +51,16 @@ qed-. (* Basic_2A1: includes: cpr_delta *) 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. + ⇩[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 (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. + ⇩[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. @@ -68,11 +68,11 @@ qed. (* Advanced inversion lemmas ************************************************) lemma cpm_inv_atom1_drops (h) (n) (G) (L): - ∀I,T2. ❪G,L❫ ⊢ ⓪[I] ➡[h,n] T2 → + ∀I,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 ➡[h,n] V2 & ⇧[↑i] V2 ≘ T2 & I = LRef i - | ∃∃m,K,V,V2,i. ⇩[i] L ≘ K.ⓛV & ❪G,K❫ ⊢ V ➡[h,m] V2 & ⇧[↑i] V2 ≘ T2 & I = LRef i & n = ↑m. + | ∃∃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 ➡[h,m] V2 & ⇧[↑i] V2 ≘ T2 & I = LRef i & n = ↑m. #h #n #G #L #I #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/ @@ -87,10 +87,10 @@ lemma cpm_inv_atom1_drops (h) (n) (G) (L): qed-. lemma cpm_inv_lref1_drops (h) (n) (G) (L): - ∀T2,i. ❪G,L❫ ⊢ #i ➡[h,n] T2 → + ∀T2,i. ❨G,L❩ ⊢ #i ➡[h,n] T2 → ∨∨ ∧∧ T2 = #i & n = 0 - | ∃∃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 ➡[h,m] V2 & ⇧[↑i] V2 ≘ T2 & n = ↑m. + | ∃∃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 ➡[h,m] V2 & ⇧[↑i] V2 ≘ T2 & n = ↑m. #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/ @@ -105,9 +105,9 @@ qed-. (* Advanced forward lemmas **************************************************) fact cpm_fwd_plus_aux (h) (n) (G) (L): - ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → + ∀T1,T2. ❨G,L❩ ⊢ T1 ➡[h,n] T2 → ∀n1,n2. n1+n2 = n → - ∃∃T. ❪G,L❫ ⊢ T1 ➡[h,n1] T & ❪G,L❫ ⊢ T ➡[h,n2] T2. + ∃∃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 @@ -167,6 +167,6 @@ fact cpm_fwd_plus_aux (h) (n) (G) (L): qed-. 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. + ∀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_fpb.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_fpb.ma index 0cbf9b071..66df1dcf7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_fpb.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_fpb.ma @@ -22,5 +22,5 @@ include "basic_2/rt_transition/cpm_cpx.ma". (* Basic_2A1: includes: cpr_fpbq *) (* Basic_2A1: uses: cpm_fpbq *) lemma cpm_fwd_fpb (h) (n) (G) (L): - ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → ❪G,L,T1❫ ≽ ❪G,L,T2❫. + ∀T1,T2. ❨G,L❩ ⊢ T1 ➡[h,n] T2 → ❨G,L,T1❩ ≽ ❨G,L,T2❩. /3 width=3 by cpx_fpb, cpm_fwd_cpx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_fpbc.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_fpbc.ma index 5b30d4b0a..00f16c496 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_fpbc.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_fpbc.ma @@ -22,5 +22,5 @@ include "basic_2/rt_transition/cpm_cpx.ma". (* Basic_2A1: includes: cpr_fpb *) (* Basic_2A1: uses: cpm_fpb *) lemma cpm_fwd_fpbc (h) (n) (G) (L): - ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[h,n] T2 → (T1 ≅ T2 → ⊥) → ❪G,L,T1❫ ≻ ❪G,L,T2❫. + ∀T1,T2. ❨G,L❩ ⊢ T1 ➡[h,n] T2 → (T1 ≅ T2 → ⊥) → ❨G,L,T1❩ ≻ ❨G,L,T2❩. /3 width=3 by cpx_fpbc, cpm_fwd_cpx/ qed-. 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 e754ff7a7..4949d55b3 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 @@ -24,7 +24,7 @@ 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 (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. +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 3b81e99bd..ec90ef3c9 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,8 +20,8 @@ include "basic_2/rt_transition/cpm.ma". (* Properties with simple terms *********************************************) (* Basic_2A1: includes: cpr_inv_appl1_simple *) -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 & +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. #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 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 d52d6fa46..b0f7f89a5 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 @@ -20,7 +20,7 @@ include "basic_2/rt_transition/cpm_drops.ma". (* Inversion lemmas with sort-irrelevant equivalence for terms **************) lemma cpm_teqx_inv_lref_sn (h) (n) (G) (L) (i): - ∀X. ❪G,L❫ ⊢ #i ➡[h,n] X → #i ≅ X → + ∀X. ❨G,L❩ ⊢ #i ➡[h,n] X → #i ≅ X → ∧∧ X = #i & n = 0. #h #n #G #L #i #X #H1 #H2 lapply (teqg_inv_lref1 … H2) -H2 #H destruct @@ -30,7 +30,7 @@ elim (lifts_inv_lref2_uni_lt … H) -H // qed-. lemma cpm_teqx_inv_atom_sn (h) (n) (I) (G) (L): - ∀X. ❪G,L❫ ⊢ ⓪[I] ➡[h,n] X → ⓪[I] ≅ X → + ∀X. ❨G,L❩ ⊢ ⓪[I] ➡[h,n] X → ⓪[I] ≅ X → ∨∨ ∧∧ X = ⓪[I] & n = 0 | ∃∃s. X = ⋆(⫯[h]s) & I = Sort s & n = 1. #h #n * #s #G #L #X #H1 #H2 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 172421887..66d0bc288 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,0] V2 → ❪G,L❫ ⊢ T1 ➡[h,0] T2 → - ❪G,L❫ ⊢ ⓕ[I]V1.T1 ➡[h,0] ⓕ[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,0] V2 → - ∀T. ❪G,L❫ ⊢ ②[I]V1.T ➡[h,0] ②[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,0] 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,0] 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,0] 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,0] T2 → qed-. (* Basic_1: includes: pr0_gen_sort pr2_gen_sort *) -lemma cpr_inv_sort1: ∀h,G,L,T2,s. ❪G,L❫ ⊢ ⋆s ➡[h,0] 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,0] T2 → +lemma cpr_inv_zero1: ∀h,G,L,T2. ❨G,L❩ ⊢ #0 ➡[h,0] T2 → ∨∨ T2 = #0 - | ∃∃K,V1,V2. ❪G,K❫ ⊢ V1 ➡[h,0] 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,0] 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,0] 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,0] 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,0] U2 → - ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 & ❪G,L❫ ⊢ U1 ➡[h,0] 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,0] 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,0] U2 → - ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h,0] V2 & ❪G,L❫ ⊢ U1 ➡[h,0] 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,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 & + | (❨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,0] V & ⇧[1] V ≘ V2 & - ❪G,L❫ ⊢ W1 ➡[h,0] W2 & ❪G,L.ⓓW1❫ ⊢ T1 ➡[h,0] 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,0] 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,0] 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,0] V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡[h,0] 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,0] V2 → ❪G,L❫ ⊢ T1 ➡[h,0] 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,0] 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,0] 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,0] V2 → ❪G,L❫ ⊢ W1 ➡[h,0] W2 → ❪G,L.ⓛW1❫ ⊢ T1 ➡[h,0] 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,0] V → ❪G,L❫ ⊢ W1 ➡[h,0] W2 → ❪G,L.ⓓW1❫ ⊢ T1 ➡[h,0] 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,0] 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 25df04bda..961e4552a 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,0] 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,0] 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,0] 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,0] 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 327959cf6..9242895b2 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,0] 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_teqg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_teqg.ma index 6a6f17b37..ecd66d3f9 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_teqg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_teqg.ma @@ -21,7 +21,7 @@ include "basic_2/rt_transition/cpr_drops_basic.ma". lemma cpr_abbr_pos_tneqx (S) (h) (G) (L) (V) (T1): symmetric … S → (∀s1,s2. Decidable (S s1 s2)) → - ∃∃T2. ❪G,L❫ ⊢ +ⓓV.T1 ➡[h,0] T2 & (+ⓓV.T1 ≛[S] T2 → ⊥). + ∃∃T2. ❨G,L❩ ⊢ +ⓓV.T1 ➡[h,0] T2 & (+ⓓV.T1 ≛[S] T2 → ⊥). #S #h #G #L #V #U1 #H1S #H2S elim (cpr_subst h G (L.ⓓV) U1 … 0) [|*: /2 width=4 by drops_refl/ ] #U2 #T2 #HU12 #HTU2 elim (teqg_dec … H2S 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 de305d481..2c8fa1e11 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt.ma @@ -23,7 +23,7 @@ include "basic_2/rt_transition/cpg.ma". (* T-BOUND CONTEXT-SENSITIVE PARALLEL T-TRANSITION FOR TERMS ****************) definition cpt (h) (G) (L) (n): relation2 term term ≝ - λT1,T2. ∃∃c. 𝐓❪n,c❫ & ❪G,L❫ ⊢ T1 ⬈[sh_is_next h,eq …,c] T2. + λT1,T2. ∃∃c. 𝐓❨n,c❩ & ❨G,L❩ ⊢ T1 ⬈[sh_is_next h,eq …,c] T2. interpretation "t-bound context-sensitive parallel t-transition (term)" @@ -32,53 +32,53 @@ interpretation (* Basic properties *********************************************************) lemma cpt_ess (h) (G) (L): - ∀s. ❪G,L❫ ⊢ ⋆s ⬆[h,1] ⋆(⫯[h]s). + ∀s. ❨G,L❩ ⊢ ⋆s ⬆[h,1] ⋆(⫯[h]s). /3 width=3 by cpg_ess, ex2_intro/ qed. lemma cpt_delta (h) (n) (G) (K): - ∀V1,V2. ❪G,K❫ ⊢ V1 ⬆[h,n] V2 → - ∀W2. ⇧[1] V2 ≘ W2 → ❪G,K.ⓓV1❫ ⊢ #0 ⬆[h,n] W2. + ∀V1,V2. ❨G,K❩ ⊢ V1 ⬆[h,n] V2 → + ∀W2. ⇧[1] V2 ≘ W2 → ❨G,K.ⓓV1❩ ⊢ #0 ⬆[h,n] W2. #h #n #G #K #V1 #V2 * /3 width=5 by cpg_delta, ex2_intro/ qed. lemma cpt_ell (h) (n) (G) (K): - ∀V1,V2. ❪G,K❫ ⊢ V1 ⬆[h,n] V2 → - ∀W2. ⇧[1] V2 ≘ W2 → ❪G,K.ⓛV1❫ ⊢ #0 ⬆[h,↑n] W2. + ∀V1,V2. ❨G,K❩ ⊢ V1 ⬆[h,n] V2 → + ∀W2. ⇧[1] V2 ≘ W2 → ❨G,K.ⓛV1❩ ⊢ #0 ⬆[h,↑n] W2. #h #n #G #K #V1 #V2 * /3 width=5 by cpg_ell, ex2_intro, ist_succ/ qed. lemma cpt_lref (h) (n) (G) (K): - ∀T,i. ❪G,K❫ ⊢ #i ⬆[h,n] T → ∀U. ⇧[1] T ≘ U → - ∀I. ❪G,K.ⓘ[I]❫ ⊢ #↑i ⬆[h,n] U. + ∀T,i. ❨G,K❩ ⊢ #i ⬆[h,n] T → ∀U. ⇧[1] T ≘ U → + ∀I. ❨G,K.ⓘ[I]❩ ⊢ #↑i ⬆[h,n] U. #h #n #G #K #T #i * /3 width=5 by cpg_lref, ex2_intro/ qed. lemma cpt_bind (h) (n) (G) (L): - ∀V1,V2. ❪G,L❫ ⊢ V1 ⬆[h,0] V2 → ∀I,T1,T2. ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬆[h,n] T2 → - ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬆[h,n] ⓑ[p,I]V2.T2. + ∀V1,V2. ❨G,L❩ ⊢ V1 ⬆[h,0] V2 → ∀I,T1,T2. ❨G,L.ⓑ[I]V1❩ ⊢ T1 ⬆[h,n] T2 → + ∀p. ❨G,L❩ ⊢ ⓑ[p,I]V1.T1 ⬆[h,n] ⓑ[p,I]V2.T2. #h #n #G #L #V1 #V2 * #cV #HcV #HV12 #I #T1 #T2 * /3 width=5 by cpg_bind, ist_max_O1, ex2_intro/ qed. lemma cpt_appl (h) (n) (G) (L): - ∀V1,V2. ❪G,L❫ ⊢ V1 ⬆[h,0] V2 → - ∀T1,T2. ❪G,L❫ ⊢ T1 ⬆[h,n] T2 → ❪G,L❫ ⊢ ⓐV1.T1 ⬆[h,n] ⓐV2.T2. + ∀V1,V2. ❨G,L❩ ⊢ V1 ⬆[h,0] V2 → + ∀T1,T2. ❨G,L❩ ⊢ T1 ⬆[h,n] T2 → ❨G,L❩ ⊢ ⓐV1.T1 ⬆[h,n] ⓐV2.T2. #h #n #G #L #V1 #V2 * #cV #HcV #HV12 #T1 #T2 * /3 width=5 by ist_max_O1, cpg_appl, ex2_intro/ qed. lemma cpt_cast (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. + ∀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 * #cU #HcU #HU12 #T1 #T2 * /3 width=6 by cpg_cast, ex2_intro/ qed. lemma cpt_ee (h) (n) (G) (L): - ∀U1,U2. ❪G,L❫ ⊢ U1 ⬆[h,n] U2 → ∀T. ❪G,L❫ ⊢ ⓝU1.T ⬆[h,↑n] U2. + ∀U1,U2. ❨G,L❩ ⊢ U1 ⬆[h,n] U2 → ∀T. ❨G,L❩ ⊢ ⓝU1.T ⬆[h,↑n] U2. #h #n #G #L #V1 #V2 * /3 width=3 by cpg_ee, ist_succ, ex2_intro/ qed. @@ -89,7 +89,7 @@ lemma cpt_refl (h) (G) (L): reflexive … (cpt h G L 0). (* Advanced properties ******************************************************) lemma cpt_sort (h) (G) (L): - ∀n. n ≤ 1 → ∀s. ❪G,L❫ ⊢ ⋆s ⬆[h,n] ⋆((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. @@ -97,12 +97,12 @@ qed. (* Basic inversion lemmas ***************************************************) lemma cpt_inv_atom_sn (h) (n) (J) (G) (L): - ∀X2. ❪G,L❫ ⊢ ⓪[J] ⬆[h,n] X2 → + ∀X2. ❨G,L❩ ⊢ ⓪[J] ⬆[h,n] X2 → ∨∨ ∧∧ X2 = ⓪[J] & n = 0 | ∃∃s. X2 = ⋆(⫯[h]s) & J = Sort s & n =1 - | ∃∃K,V1,V2. ❪G,K❫ ⊢ V1 ⬆[h,n] V2 & ⇧[1] V2 ≘ X2 & L = K.ⓓV1 & J = LRef 0 - | ∃∃m,K,V1,V2. ❪G,K❫ ⊢ V1 ⬆[h,m] V2 & ⇧[1] V2 ≘ X2 & L = K.ⓛV1 & J = LRef 0 & n = ↑m - | ∃∃I,K,T,i. ❪G,K❫ ⊢ #i ⬆[h,n] T & ⇧[1] T ≘ X2 & L = K.ⓘ[I] & J = LRef (↑i). + | ∃∃K,V1,V2. ❨G,K❩ ⊢ V1 ⬆[h,n] V2 & ⇧[1] V2 ≘ X2 & L = K.ⓓV1 & J = LRef 0 + | ∃∃m,K,V1,V2. ❨G,K❩ ⊢ V1 ⬆[h,m] V2 & ⇧[1] V2 ≘ X2 & L = K.ⓛV1 & J = LRef 0 & n = ↑m + | ∃∃I,K,T,i. ❨G,K❩ ⊢ #i ⬆[h,n] T & ⇧[1] T ≘ X2 & L = K.ⓘ[I] & J = LRef (↑i). #h #n #J #G #L #X2 * #c #Hc #H elim (cpg_inv_atom1 … H) -H * [ #H1 #H2 destruct /3 width=1 by or5_intro0, conj/ @@ -118,7 +118,7 @@ elim (cpg_inv_atom1 … H) -H * qed-. lemma cpt_inv_sort_sn (h) (n) (G) (L) (s): - ∀X2. ❪G,L❫ ⊢ ⋆s ⬆[h,n] X2 → + ∀X2. ❨G,L❩ ⊢ ⋆s ⬆[h,n] X2 → ∧∧ X2 = ⋆(((next h)^n) s) & n ≤ 1. #h #n #G #L #s #X2 * #c #Hc #H elim (cpg_inv_sort1 … H) -H * #H1 #H2 destruct @@ -128,10 +128,10 @@ elim (cpg_inv_sort1 … H) -H * #H1 #H2 destruct qed-. lemma cpt_inv_zero_sn (h) (n) (G) (L): - ∀X2. ❪G,L❫ ⊢ #0 ⬆[h,n] X2 → + ∀X2. ❨G,L❩ ⊢ #0 ⬆[h,n] X2 → ∨∨ ∧∧ X2 = #0 & n = 0 - | ∃∃K,V1,V2. ❪G,K❫ ⊢ V1 ⬆[h,n] V2 & ⇧[1] V2 ≘ X2 & L = K.ⓓV1 - | ∃∃m,K,V1,V2. ❪G,K❫ ⊢ V1 ⬆[h,m] V2 & ⇧[1] V2 ≘ X2 & L = K.ⓛV1 & n = ↑m. + | ∃∃K,V1,V2. ❨G,K❩ ⊢ V1 ⬆[h,n] V2 & ⇧[1] V2 ≘ X2 & L = K.ⓓV1 + | ∃∃m,K,V1,V2. ❨G,K❩ ⊢ V1 ⬆[h,m] V2 & ⇧[1] V2 ≘ X2 & L = K.ⓛV1 & n = ↑m. #h #n #G #L #X2 * #c #Hc #H elim (cpg_inv_zero1 … H) -H * [ #H1 #H2 destruct /4 width=1 by ist_inv_00, or3_intro0, conj/ | #cV #K #V1 #V2 #HV12 #HVT2 #H1 #H2 destruct @@ -143,7 +143,7 @@ lemma cpt_inv_zero_sn (h) (n) (G) (L): qed-. lemma cpt_inv_zero_sn_unit (h) (n) (I) (K) (G): - ∀X2. ❪G,K.ⓤ[I]❫ ⊢ #0 ⬆[h,n] X2 → ∧∧ X2 = #0 & n = 0. + ∀X2. ❨G,K.ⓤ[I]❩ ⊢ #0 ⬆[h,n] X2 → ∧∧ X2 = #0 & n = 0. #h #n #I #G #K #X2 #H elim (cpt_inv_zero_sn … H) -H * [ #H1 #H2 destruct /2 width=1 by conj/ @@ -153,9 +153,9 @@ elim (cpt_inv_zero_sn … H) -H * qed. lemma cpt_inv_lref_sn (h) (n) (G) (L) (i): - ∀X2. ❪G,L❫ ⊢ #↑i ⬆[h,n] X2 → + ∀X2. ❨G,L❩ ⊢ #↑i ⬆[h,n] X2 → ∨∨ ∧∧ X2 = #(↑i) & n = 0 - | ∃∃I,K,T. ❪G,K❫ ⊢ #i ⬆[h,n] T & ⇧[1] T ≘ X2 & L = K.ⓘ[I]. + | ∃∃I,K,T. ❨G,K❩ ⊢ #i ⬆[h,n] T & ⇧[1] T ≘ X2 & L = K.ⓘ[I]. #h #n #G #L #i #X2 * #c #Hc #H elim (cpg_inv_lref1 … H) -H * [ #H1 #H2 destruct /4 width=1 by ist_inv_00, or_introl, conj/ | #I #K #V2 #HV2 #HVT2 #H destruct @@ -164,7 +164,7 @@ lemma cpt_inv_lref_sn (h) (n) (G) (L) (i): qed-. lemma cpt_inv_lref_sn_ctop (h) (n) (G) (i): - ∀X2. ❪G,⋆❫ ⊢ #i ⬆[h,n] X2 → ∧∧ X2 = #i & n = 0. + ∀X2. ❨G,⋆❩ ⊢ #i ⬆[h,n] X2 → ∧∧ X2 = #i & n = 0. #h #n #G * [| #i ] #X2 #H [ elim (cpt_inv_zero_sn … H) -H * [ #H1 #H2 destruct /2 width=1 by conj/ @@ -179,14 +179,14 @@ lemma cpt_inv_lref_sn_ctop (h) (n) (G) (i): qed. lemma cpt_inv_gref_sn (h) (n) (G) (L) (l): - ∀X2. ❪G,L❫ ⊢ §l ⬆[h,n] X2 → ∧∧ X2 = §l & n = 0. + ∀X2. ❨G,L❩ ⊢ §l ⬆[h,n] X2 → ∧∧ X2 = §l & n = 0. #h #n #G #L #l #X2 * #c #Hc #H elim (cpg_inv_gref1 … H) -H #H1 #H2 destruct /2 width=1 by conj/ qed-. lemma cpt_inv_bind_sn (h) (n) (p) (I) (G) (L) (V1) (T1): - ∀X2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬆[h,n] X2 → - ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬆[h,0] V2 & ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬆[h,n] T2 + ∀X2. ❨G,L❩ ⊢ ⓑ[p,I]V1.T1 ⬆[h,n] X2 → + ∃∃V2,T2. ❨G,L❩ ⊢ V1 ⬆[h,0] V2 & ❨G,L.ⓑ[I]V1❩ ⊢ T1 ⬆[h,n] T2 & X2 = ⓑ[p,I]V2.T2. #h #n #p #I #G #L #V1 #T1 #X2 * #c #Hc #H elim (cpg_inv_bind1 … H) -H * @@ -200,8 +200,8 @@ elim (cpg_inv_bind1 … H) -H * qed-. lemma cpt_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. + ∀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. #h #n #G #L #V1 #T1 #X2 * #c #Hc #H elim (cpg_inv_appl1 … H) -H * [ #cV #cT #V2 #T2 #HV12 #HT12 #H1 #H2 destruct elim (ist_inv_max … H2) -H2 #nV #nT #HcV #HcT #H destruct @@ -215,9 +215,9 @@ lemma cpt_inv_appl_sn (h) (n) (G) (L) (V1) (T1): qed-. lemma cpt_inv_cast_sn (h) (n) (G) (L) (V1) (T1): - ∀X2. ❪G,L❫ ⊢ ⓝV1.T1 ⬆[h,n] X2 → - ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬆[h,n] V2 & ❪G,L❫ ⊢ T1 ⬆[h,n] T2 & X2 = ⓝV2.T2 - | ∃∃m. ❪G,L❫ ⊢ V1 ⬆[h,m] X2 & n = ↑m. + ∀X2. ❨G,L❩ ⊢ ⓝV1.T1 ⬆[h,n] X2 → + ∨∨ ∃∃V2,T2. ❨G,L❩ ⊢ V1 ⬆[h,n] V2 & ❨G,L❩ ⊢ T1 ⬆[h,n] T2 & X2 = ⓝV2.T2 + | ∃∃m. ❨G,L❩ ⊢ V1 ⬆[h,m] X2 & n = ↑m. #h #n #G #L #V1 #T1 #X2 * #c #Hc #H elim (cpg_inv_cast1 … H) -H * [ #cV #cT #V2 #T2 #HV12 #HT12 #HcVT #H1 #H2 destruct elim (ist_inv_max … H2) -H2 #nV #nT #HcV #HcT #H destruct 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 aadec180c..6c8d9664d 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 ➡[h,n] 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/cpt_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_drops.ma index 29cbdfc0d..8e75cbf2d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_drops.ma @@ -48,15 +48,15 @@ qed-. (* Advanced properties ******************************************************) lemma cpt_delta_drops (h) (n) (G): - ∀L,K,V,i. ⇩[i] L ≘ K.ⓓV → ∀V2. ❪G,K❫ ⊢ V ⬆[h,n] V2 → - ∀W2. ⇧[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ⬆[h,n] W2. + ∀L,K,V,i. ⇩[i] L ≘ K.ⓓV → ∀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 * /3 width=8 by cpg_delta_drops, ex2_intro/ qed. lemma cpt_ell_drops (h) (n) (G): - ∀L,K,V,i. ⇩[i] L ≘ K.ⓛV → ∀V2. ❪G,K❫ ⊢ V ⬆[h,n] V2 → - ∀W2. ⇧[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ⬆[h,↑n] W2. + ∀L,K,V,i. ⇩[i] L ≘ K.ⓛV → ∀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 * /3 width=8 by cpg_ell_drops, ist_succ, ex2_intro/ qed. @@ -64,11 +64,11 @@ qed. (* Advanced inversion lemmas ************************************************) lemma cpt_inv_atom_sn_drops (h) (n) (I) (G) (L): - ∀X2. ❪G,L❫ ⊢ ⓪[I] ⬆[h,n] X2 → + ∀X2. ❨G,L❩ ⊢ ⓪[I] ⬆[h,n] X2 → ∨∨ ∧∧ X2 = ⓪[I] & n = 0 | ∃∃s. X2 = ⋆(⫯[h]s) & I = Sort s & n = 1 - | ∃∃K,V,V2,i. ⇩[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ⬆[h,n] V2 & ⇧[↑i] V2 ≘ X2 & I = LRef i - | ∃∃m,K,V,V2,i. ⇩[i] L ≘ K.ⓛV & ❪G,K❫ ⊢ V ⬆[h,m] V2 & ⇧[↑i] V2 ≘ X2 & I = LRef i & n = ↑m. + | ∃∃K,V,V2,i. ⇩[i] L ≘ K.ⓓV & ❨G,K❩ ⊢ V ⬆[h,n] V2 & ⇧[↑i] V2 ≘ X2 & I = LRef i + | ∃∃m,K,V,V2,i. ⇩[i] L ≘ K.ⓛV & ❨G,K❩ ⊢ V ⬆[h,m] V2 & ⇧[↑i] V2 ≘ X2 & I = LRef i & n = ↑m. #h #n #I #G #L #X2 * #c #Hc #H elim (cpg_inv_atom1_drops … H) -H * [ #H1 #H2 destruct /3 width=1 by or4_intro0, conj/ @@ -83,10 +83,10 @@ lemma cpt_inv_atom_sn_drops (h) (n) (I) (G) (L): qed-. lemma cpt_inv_lref_sn_drops (h) (n) (G) (L) (i): - ∀X2. ❪G,L❫ ⊢ #i ⬆[h,n] X2 → + ∀X2. ❨G,L❩ ⊢ #i ⬆[h,n] X2 → ∨∨ ∧∧ X2 = #i & n = 0 - | ∃∃K,V,V2. ⇩[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ⬆[h,n] V2 & ⇧[↑i] V2 ≘ X2 - | ∃∃m,K,V,V2. ⇩[i] L ≘ K. ⓛV & ❪G,K❫ ⊢ V ⬆[h,m] V2 & ⇧[↑i] V2 ≘ X2 & n = ↑m. + | ∃∃K,V,V2. ⇩[i] L ≘ K.ⓓV & ❨G,K❩ ⊢ V ⬆[h,n] V2 & ⇧[↑i] V2 ≘ X2 + | ∃∃m,K,V,V2. ⇩[i] L ≘ K. ⓛV & ❨G,K❩ ⊢ V ⬆[h,m] V2 & ⇧[↑i] V2 ≘ X2 & n = ↑m. #h #n #G #L #i #X2 * #c #Hc #H elim (cpg_inv_lref1_drops … H) -H * [ #H1 #H2 destruct /3 width=1 by or3_intro0, conj/ @@ -101,8 +101,8 @@ qed-. (* Advanced forward lemmas **************************************************) fact cpt_fwd_plus_aux (h) (n) (G) (L): - ∀T1,T2. ❪G,L❫ ⊢ T1 ⬆[h,n] T2 → ∀n1,n2. n1+n2 = n → - ∃∃T. ❪G,L❫ ⊢ T1 ⬆[h,n1] T & ❪G,L❫ ⊢ T ⬆[h,n2] T2. + ∀T1,T2. ❨G,L❩ ⊢ T1 ⬆[h,n] T2 → ∀n1,n2. n1+n2 = n → + ∃∃T. ❨G,L❩ ⊢ T1 ⬆[h,n1] T & ❨G,L❩ ⊢ T ⬆[h,n2] T2. #h #n #G #L #T1 #T2 #H @(cpt_ind … H) -G -L -T1 -T2 -n [ #I #G #L #n1 #n2 #H elim (plus_inv_O3 … H) -H #H1 #H2 destruct @@ -150,6 +150,6 @@ fact cpt_fwd_plus_aux (h) (n) (G) (L): qed-. lemma cpt_fwd_plus (h) (n1) (n2) (G) (L): - ∀T1,T2. ❪G,L❫ ⊢ T1 ⬆[h,n1+n2] T2 → - ∃∃T. ❪G,L❫ ⊢ T1 ⬆[h,n1] T & ❪G,L❫ ⊢ T ⬆[h,n2] T2. + ∀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 cpt_fwd_plus_aux/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_fqu.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_fqu.ma index ebcb2ed05..1b6395fac 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_fqu.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_fqu.ma @@ -22,22 +22,22 @@ include "basic_2/rt_transition/cpt.ma". lemma cpt_ind (h) (Q:relation5 …): (∀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 ⬆[h,n] 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 ⬆[h,n] 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 ⬆[h,n] 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,0] V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬆[h,n] 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,0] V2 → ❪G,L❫ ⊢ T1 ⬆[h,n] 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 ⬆[h,n] V2 → ❪G,L❫ ⊢ T1 ⬆[h,n] 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,V1,V2,T. ❪G,L❫ ⊢ V1 ⬆[h,n] 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,G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬆[h,n] 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 #n #G #L #T1 generalize in match n; -n @(fqu_wf_ind (Ⓣ) … G L T1) -G -L -T1 #G0 #L0 * [| * [| * ]] diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx.ma index 9e9dcf7b2..b69c9ebde 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx.ma @@ -25,7 +25,7 @@ include "basic_2/rt_transition/cpg.ma". (* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS **************) definition cpx (G) (L): relation2 term term ≝ - λT1,T2. ∃c. ❪G,L❫ ⊢ T1 ⬈[sfull,rtc_eq_f,c] T2. + λT1,T2. ∃c. ❨G,L❩ ⊢ T1 ⬈[sfull,rtc_eq_f,c] T2. interpretation "extended context-sensitive parallel rt-transition (term)" @@ -34,71 +34,71 @@ interpretation (* Basic properties *********************************************************) (* Basic_2A1: uses: cpx_st *) -lemma cpx_qu (G) (L): ∀s1,s2. ❪G,L❫ ⊢ ⋆s1 ⬈ ⋆s2. +lemma cpx_qu (G) (L): ∀s1,s2. ❨G,L❩ ⊢ ⋆s1 ⬈ ⋆s2. /3 width=2 by cpg_ess, ex_intro/ qed. lemma cpx_delta (G) (K): - ∀I,V1,V2,W2. ❪G,K❫ ⊢ V1 ⬈ V2 → - ⇧[1] V2 ≘ W2 → ❪G,K.ⓑ[I]V1❫ ⊢ #0 ⬈ W2. + ∀I,V1,V2,W2. ❨G,K❩ ⊢ V1 ⬈ V2 → + ⇧[1] V2 ≘ W2 → ❨G,K.ⓑ[I]V1❩ ⊢ #0 ⬈ W2. #G #K * #V1 #V2 #W2 * /3 width=4 by cpg_delta, cpg_ell, ex_intro/ qed. lemma cpx_lref (G) (K): - ∀I,T,U,i. ❪G,K❫ ⊢ #i ⬈ T → - ⇧[1] T ≘ U → ❪G,K.ⓘ[I]❫ ⊢ #↑i ⬈ U. + ∀I,T,U,i. ❨G,K❩ ⊢ #i ⬈ T → + ⇧[1] T ≘ U → ❨G,K.ⓘ[I]❩ ⊢ #↑i ⬈ U. #G #K #I #T #U #i * /3 width=4 by cpg_lref, ex_intro/ qed. lemma cpx_bind (G) (L): ∀p,I,V1,V2,T1,T2. - ❪G,L❫ ⊢ V1 ⬈ V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬈ T2 → - ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈ ⓑ[p,I]V2.T2. + ❨G,L❩ ⊢ V1 ⬈ V2 → ❨G,L.ⓑ[I]V1❩ ⊢ T1 ⬈ T2 → + ❨G,L❩ ⊢ ⓑ[p,I]V1.T1 ⬈ ⓑ[p,I]V2.T2. #G #L #p #I #V1 #V2 #T1 #T2 * #cV #HV12 * /3 width=2 by cpg_bind, ex_intro/ qed. lemma cpx_flat (G) (L): ∀I,V1,V2,T1,T2. - ❪G,L❫ ⊢ V1 ⬈ V2 → ❪G,L❫ ⊢ T1 ⬈ T2 → - ❪G,L❫ ⊢ ⓕ[I]V1.T1 ⬈ ⓕ[I]V2.T2. + ❨G,L❩ ⊢ V1 ⬈ V2 → ❨G,L❩ ⊢ T1 ⬈ T2 → + ❨G,L❩ ⊢ ⓕ[I]V1.T1 ⬈ ⓕ[I]V2.T2. #G #L * #V1 #V2 #T1 #T2 * #cV #HV12 * /3 width=5 by cpg_appl, cpg_cast, ex_intro/ qed. lemma cpx_zeta (G) (L): - ∀T1,T. ⇧[1] T ≘ T1 → ∀T2. ❪G,L❫ ⊢ T ⬈ T2 → - ∀V. ❪G,L❫ ⊢ +ⓓV.T1 ⬈ T2. + ∀T1,T. ⇧[1] T ≘ T1 → ∀T2. ❨G,L❩ ⊢ T ⬈ T2 → + ∀V. ❨G,L❩ ⊢ +ⓓV.T1 ⬈ T2. #G #L #T1 #T #HT1 #T2 * /3 width=4 by cpg_zeta, ex_intro/ qed. lemma cpx_eps (G) (L): - ∀V,T1,T2. ❪G,L❫ ⊢ T1 ⬈ T2 → ❪G,L❫ ⊢ ⓝV.T1 ⬈ T2. + ∀V,T1,T2. ❨G,L❩ ⊢ T1 ⬈ T2 → ❨G,L❩ ⊢ ⓝV.T1 ⬈ T2. #G #L #V #T1 #T2 * /3 width=2 by cpg_eps, ex_intro/ qed. (* Basic_2A1: was: cpx_ct *) lemma cpx_ee (G) (L): - ∀V1,V2,T. ❪G,L❫ ⊢ V1 ⬈ V2 → ❪G,L❫ ⊢ ⓝV1.T ⬈ V2. + ∀V1,V2,T. ❨G,L❩ ⊢ V1 ⬈ V2 → ❨G,L❩ ⊢ ⓝV1.T ⬈ V2. #G #L #V1 #V2 #T * /3 width=2 by cpg_ee, ex_intro/ qed. lemma cpx_beta (G) (L): ∀p,V1,V2,W1,W2,T1,T2. - ❪G,L❫ ⊢ V1 ⬈ V2 → ❪G,L❫ ⊢ W1 ⬈ W2 → ❪G,L.ⓛW1❫ ⊢ T1 ⬈ T2 → - ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ⬈ ⓓ[p]ⓝW2.V2.T2. + ❨G,L❩ ⊢ V1 ⬈ V2 → ❨G,L❩ ⊢ W1 ⬈ W2 → ❨G,L.ⓛW1❩ ⊢ T1 ⬈ T2 → + ❨G,L❩ ⊢ ⓐV1.ⓛ[p]W1.T1 ⬈ ⓓ[p]ⓝW2.V2.T2. #G #L #p #V1 #V2 #W1 #W2 #T1 #T2 * #cV #HV12 * #cW #HW12 * /3 width=2 by cpg_beta, ex_intro/ qed. lemma cpx_theta (G) (L): ∀p,V1,V,V2,W1,W2,T1,T2. - ❪G,L❫ ⊢ V1 ⬈ V → ⇧[1] V ≘ V2 → ❪G,L❫ ⊢ W1 ⬈ W2 → ❪G,L.ⓓW1❫ ⊢ T1 ⬈ T2 → - ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ⬈ ⓓ[p]W2.ⓐV2.T2. + ❨G,L❩ ⊢ V1 ⬈ V → ⇧[1] V ≘ V2 → ❨G,L❩ ⊢ W1 ⬈ W2 → ❨G,L.ⓓW1❩ ⊢ T1 ⬈ T2 → + ❨G,L❩ ⊢ ⓐV1.ⓓ[p]W1.T1 ⬈ ⓓ[p]W2.ⓐV2.T2. #G #L #p #V1 #V #V2 #W1 #W2 #T1 #T2 * #cV #HV1 #HV2 * #cW #HW12 * /3 width=4 by cpg_theta, ex_intro/ qed. @@ -110,13 +110,13 @@ lemma cpx_refl (G) (L): reflexive … (cpx G L). (* Advanced properties ******************************************************) lemma cpx_pair_sn (G) (L): - ∀I,V1,V2. ❪G,L❫ ⊢ V1 ⬈ V2 → - ∀T. ❪G,L❫ ⊢ ②[I]V1.T ⬈ ②[I]V2.T. + ∀I,V1,V2. ❨G,L❩ ⊢ V1 ⬈ V2 → + ∀T. ❨G,L❩ ⊢ ②[I]V1.T ⬈ ②[I]V2.T. #G #L * /2 width=2 by cpx_flat, cpx_bind/ qed. lemma cpg_cpx (Rs) (Rk) (c) (G) (L): - ∀T1,T2. ❪G,L❫ ⊢ T1 ⬈[Rs,Rk,c] T2 → ❪G,L❫ ⊢ T1 ⬈ T2. + ∀T1,T2. ❨G,L❩ ⊢ T1 ⬈[Rs,Rk,c] T2 → ❨G,L❩ ⊢ T1 ⬈ T2. #Rs #Rk #c #G #L #T1 #T2 #H elim H -c -G -L -T1 -T2 /2 width=3 by cpx_theta, cpx_beta, cpx_ee, cpx_eps, cpx_zeta, cpx_flat, cpx_bind, cpx_lref, cpx_delta/ qed. @@ -124,80 +124,80 @@ qed. (* Basic inversion lemmas ***************************************************) lemma cpx_inv_atom1 (G) (L): - ∀J,T2. ❪G,L❫ ⊢ ⓪[J] ⬈ T2 → + ∀J,T2. ❨G,L❩ ⊢ ⓪[J] ⬈ T2 → ∨∨ T2 = ⓪[J] | ∃∃s1,s2. T2 = ⋆s2 & J = Sort s1 - | ∃∃I,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈ V2 & ⇧[1] V2 ≘ T2 & L = K.ⓑ[I]V1 & J = LRef 0 - | ∃∃I,K,T,i. ❪G,K❫ ⊢ #i ⬈ T & ⇧[1] T ≘ T2 & L = K.ⓘ[I] & J = LRef (↑i). + | ∃∃I,K,V1,V2. ❨G,K❩ ⊢ V1 ⬈ V2 & ⇧[1] V2 ≘ T2 & L = K.ⓑ[I]V1 & J = LRef 0 + | ∃∃I,K,T,i. ❨G,K❩ ⊢ #i ⬈ T & ⇧[1] T ≘ T2 & L = K.ⓘ[I] & J = LRef (↑i). #G #L #J #T2 * #c #H elim (cpg_inv_atom1 … H) -H * /4 width=8 by or4_intro0, or4_intro1, or4_intro2, or4_intro3, ex4_4_intro, ex2_2_intro, ex_intro/ qed-. lemma cpx_inv_sort1 (G) (L): - ∀T2,s1. ❪G,L❫ ⊢ ⋆s1 ⬈ T2 → + ∀T2,s1. ❨G,L❩ ⊢ ⋆s1 ⬈ T2 → ∃s2. T2 = ⋆s2. #G #L #T2 #s1 * #c #H elim (cpg_inv_sort1 … H) -H * /2 width=2 by ex_intro/ qed-. lemma cpx_inv_zero1 (G) (L): - ∀T2. ❪G,L❫ ⊢ #0 ⬈ T2 → + ∀T2. ❨G,L❩ ⊢ #0 ⬈ T2 → ∨∨ T2 = #0 - | ∃∃I,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈ V2 & ⇧[1] V2 ≘ T2 & L = K.ⓑ[I]V1. + | ∃∃I,K,V1,V2. ❨G,K❩ ⊢ V1 ⬈ V2 & ⇧[1] V2 ≘ T2 & L = K.ⓑ[I]V1. #G #L #T2 * #c #H elim (cpg_inv_zero1 … H) -H * /4 width=7 by ex3_4_intro, ex_intro, or_introl, or_intror/ qed-. lemma cpx_inv_lref1 (G) (L): - ∀T2,i. ❪G,L❫ ⊢ #↑i ⬈ T2 → + ∀T2,i. ❨G,L❩ ⊢ #↑i ⬈ T2 → ∨∨ T2 = #(↑i) - | ∃∃I,K,T. ❪G,K❫ ⊢ #i ⬈ T & ⇧[1] T ≘ T2 & L = K.ⓘ[I]. + | ∃∃I,K,T. ❨G,K❩ ⊢ #i ⬈ T & ⇧[1] T ≘ T2 & L = K.ⓘ[I]. #G #L #T2 #i * #c #H elim (cpg_inv_lref1 … H) -H * /4 width=6 by ex3_3_intro, ex_intro, or_introl, or_intror/ qed-. lemma cpx_inv_gref1 (G) (L): - ∀T2,l. ❪G,L❫ ⊢ §l ⬈ T2 → T2 = §l. + ∀T2,l. ❨G,L❩ ⊢ §l ⬈ T2 → T2 = §l. #G #L #T2 #l * #c #H elim (cpg_inv_gref1 … H) -H // qed-. lemma cpx_inv_bind1 (G) (L): - ∀p,I,V1,T1,U2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈ U2 → - ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈ V2 & ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬈ T2 & U2 = ⓑ[p,I]V2.T2 - | ∃∃T. ⇧[1] T ≘ T1 & ❪G,L❫ ⊢ T ⬈ U2 & p = true & I = Abbr. + ∀p,I,V1,T1,U2. ❨G,L❩ ⊢ ⓑ[p,I]V1.T1 ⬈ U2 → + ∨∨ ∃∃V2,T2. ❨G,L❩ ⊢ V1 ⬈ V2 & ❨G,L.ⓑ[I]V1❩ ⊢ T1 ⬈ T2 & U2 = ⓑ[p,I]V2.T2 + | ∃∃T. ⇧[1] T ≘ T1 & ❨G,L❩ ⊢ T ⬈ U2 & p = true & I = Abbr. #G #L #p #I #V1 #T1 #U2 * #c #H elim (cpg_inv_bind1 … H) -H * /4 width=5 by ex4_intro, ex3_2_intro, ex_intro, or_introl, or_intror/ qed-. lemma cpx_inv_abbr1 (G) (L): - ∀p,V1,T1,U2. ❪G,L❫ ⊢ ⓓ[p]V1.T1 ⬈ U2 → - ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈ V2 & ❪G,L.ⓓV1❫ ⊢ T1 ⬈ T2 & U2 = ⓓ[p]V2.T2 - | ∃∃T. ⇧[1] T ≘ T1 & ❪G,L❫ ⊢ T ⬈ U2 & p = true. + ∀p,V1,T1,U2. ❨G,L❩ ⊢ ⓓ[p]V1.T1 ⬈ U2 → + ∨∨ ∃∃V2,T2. ❨G,L❩ ⊢ V1 ⬈ V2 & ❨G,L.ⓓV1❩ ⊢ T1 ⬈ T2 & U2 = ⓓ[p]V2.T2 + | ∃∃T. ⇧[1] T ≘ T1 & ❨G,L❩ ⊢ T ⬈ U2 & p = true. #G #L #p #V1 #T1 #U2 * #c #H elim (cpg_inv_abbr1 … H) -H * /4 width=5 by ex3_2_intro, ex3_intro, ex_intro, or_introl, or_intror/ qed-. lemma cpx_inv_abst1 (G) (L): - ∀p,V1,T1,U2. ❪G,L❫ ⊢ ⓛ[p]V1.T1 ⬈ U2 → - ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈ V2 & ❪G,L.ⓛV1❫ ⊢ T1 ⬈ T2 & U2 = ⓛ[p]V2.T2. + ∀p,V1,T1,U2. ❨G,L❩ ⊢ ⓛ[p]V1.T1 ⬈ U2 → + ∃∃V2,T2. ❨G,L❩ ⊢ V1 ⬈ V2 & ❨G,L.ⓛV1❩ ⊢ T1 ⬈ T2 & U2 = ⓛ[p]V2.T2. #G #L #p #V1 #T1 #U2 * #c #H elim (cpg_inv_abst1 … H) -H /3 width=5 by ex3_2_intro, ex_intro/ qed-. lemma cpx_inv_appl1 (G) (L): - ∀V1,U1,U2. ❪G,L❫ ⊢ ⓐ V1.U1 ⬈ U2 → - ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈ V2 & ❪G,L❫ ⊢ U1 ⬈ T2 & U2 = ⓐV2.T2 - | ∃∃p,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈ V2 & ❪G,L❫ ⊢ W1 ⬈ W2 & ❪G,L.ⓛW1❫ ⊢ T1 ⬈ T2 & U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 - | ∃∃p,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈ V & ⇧[1] V ≘ V2 & ❪G,L❫ ⊢ W1 ⬈ W2 & ❪G,L.ⓓW1❫ ⊢ T1 ⬈ T2 & U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2. + ∀V1,U1,U2. ❨G,L❩ ⊢ ⓐ V1.U1 ⬈ U2 → + ∨∨ ∃∃V2,T2. ❨G,L❩ ⊢ V1 ⬈ V2 & ❨G,L❩ ⊢ U1 ⬈ T2 & U2 = ⓐV2.T2 + | ∃∃p,V2,W1,W2,T1,T2. ❨G,L❩ ⊢ V1 ⬈ V2 & ❨G,L❩ ⊢ W1 ⬈ W2 & ❨G,L.ⓛW1❩ ⊢ T1 ⬈ T2 & U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 + | ∃∃p,V,V2,W1,W2,T1,T2. ❨G,L❩ ⊢ V1 ⬈ V & ⇧[1] V ≘ V2 & ❨G,L❩ ⊢ W1 ⬈ W2 & ❨G,L.ⓓW1❩ ⊢ T1 ⬈ T2 & U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2. #G #L #V1 #U1 #U2 * #c #H elim (cpg_inv_appl1 … H) -H * /4 width=13 by or3_intro0, or3_intro1, or3_intro2, ex6_7_intro, ex5_6_intro, ex3_2_intro, ex_intro/ qed-. lemma cpx_inv_cast1 (G) (L): - ∀V1,U1,U2. ❪G,L❫ ⊢ ⓝV1.U1 ⬈ U2 → - ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈ V2 & ❪G,L❫ ⊢ U1 ⬈ T2 & U2 = ⓝV2.T2 - | ❪G,L❫ ⊢ U1 ⬈ U2 - | ❪G,L❫ ⊢ V1 ⬈ U2. + ∀V1,U1,U2. ❨G,L❩ ⊢ ⓝV1.U1 ⬈ U2 → + ∨∨ ∃∃V2,T2. ❨G,L❩ ⊢ V1 ⬈ V2 & ❨G,L❩ ⊢ U1 ⬈ T2 & U2 = ⓝV2.T2 + | ❨G,L❩ ⊢ U1 ⬈ U2 + | ❨G,L❩ ⊢ V1 ⬈ U2. #G #L #V1 #U1 #U2 * #c #H elim (cpg_inv_cast1 … H) -H * /4 width=5 by or3_intro0, or3_intro1, or3_intro2, ex3_2_intro, ex_intro/ qed-. @@ -205,28 +205,28 @@ qed-. (* Advanced inversion lemmas ************************************************) lemma cpx_inv_zero1_pair (G) (K): - ∀I,V1,T2. ❪G,K.ⓑ[I]V1❫ ⊢ #0 ⬈ T2 → + ∀I,V1,T2. ❨G,K.ⓑ[I]V1❩ ⊢ #0 ⬈ T2 → ∨∨ T2 = #0 - | ∃∃V2. ❪G,K❫ ⊢ V1 ⬈ V2 & ⇧[1] V2 ≘ T2. + | ∃∃V2. ❨G,K❩ ⊢ V1 ⬈ V2 & ⇧[1] V2 ≘ T2. #G #K #I #V1 #T2 * #c #H elim (cpg_inv_zero1_pair … H) -H * /4 width=3 by ex2_intro, ex_intro, or_intror, or_introl/ qed-. lemma cpx_inv_lref1_bind (G) (K): - ∀I,T2,i. ❪G,K.ⓘ[I]❫ ⊢ #↑i ⬈ T2 → + ∀I,T2,i. ❨G,K.ⓘ[I]❩ ⊢ #↑i ⬈ T2 → ∨∨ T2 = #(↑i) - | ∃∃T. ❪G,K❫ ⊢ #i ⬈ T & ⇧[1] T ≘ T2. + | ∃∃T. ❨G,K❩ ⊢ #i ⬈ T & ⇧[1] T ≘ T2. #G #K #I #T2 #i * #c #H elim (cpg_inv_lref1_bind … H) -H * /4 width=3 by ex2_intro, ex_intro, or_introl, or_intror/ qed-. lemma cpx_inv_flat1 (G) (L): - ∀I,V1,U1,U2. ❪G,L❫ ⊢ ⓕ[I]V1.U1 ⬈ U2 → - ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈ V2 & ❪G,L❫ ⊢ U1 ⬈ T2 & U2 = ⓕ[I]V2.T2 - | (❪G,L❫ ⊢ U1 ⬈ U2 ∧ I = Cast) - | (❪G,L❫ ⊢ V1 ⬈ U2 ∧ I = Cast) - | ∃∃p,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈ V2 & ❪G,L❫ ⊢ W1 ⬈ W2 & ❪G,L.ⓛW1❫ ⊢ T1 ⬈ T2 & U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 & I = Appl - | ∃∃p,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈ V & ⇧[1] V ≘ V2 & ❪G,L❫ ⊢ W1 ⬈ W2 & ❪G,L.ⓓW1❫ ⊢ T1 ⬈ T2 & U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2 & I = Appl. + ∀I,V1,U1,U2. ❨G,L❩ ⊢ ⓕ[I]V1.U1 ⬈ U2 → + ∨∨ ∃∃V2,T2. ❨G,L❩ ⊢ V1 ⬈ V2 & ❨G,L❩ ⊢ U1 ⬈ T2 & U2 = ⓕ[I]V2.T2 + | (❨G,L❩ ⊢ U1 ⬈ U2 ∧ I = Cast) + | (❨G,L❩ ⊢ V1 ⬈ U2 ∧ I = Cast) + | ∃∃p,V2,W1,W2,T1,T2. ❨G,L❩ ⊢ V1 ⬈ V2 & ❨G,L❩ ⊢ W1 ⬈ W2 & ❨G,L.ⓛW1❩ ⊢ T1 ⬈ T2 & U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 & I = Appl + | ∃∃p,V,V2,W1,W2,T1,T2. ❨G,L❩ ⊢ V1 ⬈ V & ⇧[1] V ≘ V2 & ❨G,L❩ ⊢ W1 ⬈ W2 & ❨G,L.ⓓW1❩ ⊢ T1 ⬈ T2 & U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2 & I = Appl. #G #L * #V1 #U1 #U2 #H [ elim (cpx_inv_appl1 … H) -H * /3 width=14 by or5_intro0, or5_intro3, or5_intro4, ex7_7_intro, ex6_6_intro, ex3_2_intro/ @@ -238,8 +238,8 @@ qed-. (* Basic forward lemmas *****************************************************) lemma cpx_fwd_bind1_minus (G) (L): - ∀I,V1,T1,T. ❪G,L❫ ⊢ -ⓑ[I]V1.T1 ⬈ T → ∀p. - ∃∃V2,T2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈ ⓑ[p,I]V2.T2 & T = -ⓑ[I]V2.T2. + ∀I,V1,T1,T. ❨G,L❩ ⊢ -ⓑ[I]V1.T1 ⬈ T → ∀p. + ∃∃V2,T2. ❨G,L❩ ⊢ ⓑ[p,I]V1.T1 ⬈ ⓑ[p,I]V2.T2 & T = -ⓑ[I]V2.T2. #G #L #I #V1 #T1 #T * #c #H #p elim (cpg_fwd_bind1_minus … H p) -H /3 width=4 by ex2_2_intro, ex_intro/ qed-. @@ -249,28 +249,28 @@ qed-. lemma cpx_ind (Q:relation4 …): (∀I,G,L. Q G L (⓪[I]) (⓪[I])) → (∀G,L,s1,s2. Q G L (⋆s1) (⋆s2)) → - (∀I,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ⬈ V2 → Q G K V1 V2 → + (∀I,G,K,V1,V2,W2. ❨G,K❩ ⊢ V1 ⬈ V2 → Q G K V1 V2 → ⇧[1] V2 ≘ W2 → Q G (K.ⓑ[I]V1) (#0) W2 - ) → (∀I,G,K,T,U,i. ❪G,K❫ ⊢ #i ⬈ T → Q G K (#i) T → + ) → (∀I,G,K,T,U,i. ❨G,K❩ ⊢ #i ⬈ 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 ⬈ V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬈ T2 → + ) → (∀p,I,G,L,V1,V2,T1,T2. ❨G,L❩ ⊢ V1 ⬈ V2 → ❨G,L.ⓑ[I]V1❩ ⊢ T1 ⬈ 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 ⬈ V2 → ❪G,L❫ ⊢ T1 ⬈ T2 → + ) → (∀I,G,L,V1,V2,T1,T2. ❨G,L❩ ⊢ V1 ⬈ V2 → ❨G,L❩ ⊢ T1 ⬈ 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 ⬈ T2 → Q G L T T2 → + ) → (∀G,L,V,T1,T,T2. ⇧[1] T ≘ T1 → ❨G,L❩ ⊢ T ⬈ T2 → Q G L T T2 → Q G L (+ⓓV.T1) T2 - ) → (∀G,L,V,T1,T2. ❪G,L❫ ⊢ T1 ⬈ T2 → Q G L T1 T2 → + ) → (∀G,L,V,T1,T2. ❨G,L❩ ⊢ T1 ⬈ T2 → Q G L T1 T2 → Q G L (ⓝV.T1) T2 - ) → (∀G,L,V1,V2,T. ❪G,L❫ ⊢ V1 ⬈ V2 → Q G L V1 V2 → + ) → (∀G,L,V1,V2,T. ❨G,L❩ ⊢ V1 ⬈ V2 → Q G L V1 V2 → Q G L (ⓝV1.T) V2 - ) → (∀p,G,L,V1,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈ V2 → ❪G,L❫ ⊢ W1 ⬈ W2 → ❪G,L.ⓛW1❫ ⊢ T1 ⬈ T2 → + ) → (∀p,G,L,V1,V2,W1,W2,T1,T2. ❨G,L❩ ⊢ V1 ⬈ V2 → ❨G,L❩ ⊢ W1 ⬈ W2 → ❨G,L.ⓛW1❩ ⊢ T1 ⬈ 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 ⬈ V → ❪G,L❫ ⊢ W1 ⬈ W2 → ❪G,L.ⓓW1❫ ⊢ T1 ⬈ T2 → + ) → (∀p,G,L,V1,V,V2,W1,W2,T1,T2. ❨G,L❩ ⊢ V1 ⬈ V → ❨G,L❩ ⊢ W1 ⬈ W2 → ❨G,L.ⓓW1❩ ⊢ T1 ⬈ 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 ⬈ T2 → Q G L T1 T2. + ∀G,L,T1,T2. ❨G,L❩ ⊢ T1 ⬈ T2 → Q G L T1 T2. #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #IH10 #IH11 #G #L #T1 #T2 * #c #H elim H -c -G -L -T1 -T2 /3 width=4 by ex_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops.ma index 686dfe0ad..16d6a9a13 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops.ma @@ -23,8 +23,8 @@ include "basic_2/rt_transition/cpx.ma". (* Basic_2A1: was: cpx_delta *) lemma cpx_delta_drops (G) (L): ∀I,K,V,V2,W2,i. - ⇩[i] L ≘ K.ⓑ[I]V → ❪G,K❫ ⊢ V ⬈ V2 → - ⇧[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ⬈ W2. + ⇩[i] L ≘ K.ⓑ[I]V → ❨G,K❩ ⊢ V ⬈ V2 → + ⇧[↑i] V2 ≘ W2 → ❨G,L❩ ⊢ #i ⬈ W2. #G #L * #K #V #V2 #W2 #i #HLK * /3 width=7 by cpg_ell_drops, cpg_delta_drops, ex_intro/ qed. @@ -33,19 +33,19 @@ qed. (* Basic_2A1: was: cpx_inv_atom1 *) lemma cpx_inv_atom1_drops (G) (L): - ∀I,T2. ❪G,L❫ ⊢ ⓪[I] ⬈ T2 → + ∀I,T2. ❨G,L❩ ⊢ ⓪[I] ⬈ T2 → ∨∨ T2 = ⓪[I] | ∃∃s1,s2. T2 = ⋆s2 & I = Sort s1 - | ∃∃J,K,V,V2,i. ⇩[i] L ≘ K.ⓑ[J]V & ❪G,K❫ ⊢ V ⬈ V2 & ⇧[↑i] V2 ≘ T2 & I = LRef i. + | ∃∃J,K,V,V2,i. ⇩[i] L ≘ K.ⓑ[J]V & ❨G,K❩ ⊢ V ⬈ V2 & ⇧[↑i] V2 ≘ T2 & I = LRef i. #G #L #I #T2 * #c #H elim (cpg_inv_atom1_drops … H) -H * /4 width=9 by or3_intro0, or3_intro1, or3_intro2, ex4_5_intro, ex2_2_intro, ex_intro/ qed-. (* Basic_2A1: was: cpx_inv_lref1 *) lemma cpx_inv_lref1_drops (G) (L): - ∀T2,i. ❪G,L❫ ⊢ #i ⬈ T2 → + ∀T2,i. ❨G,L❩ ⊢ #i ⬈ T2 → ∨∨ T2 = #i - | ∃∃J,K,V,V2. ⇩[i] L ≘ K. ⓑ[J]V & ❪G,K❫ ⊢ V ⬈ V2 & ⇧[↑i] V2 ≘ T2. + | ∃∃J,K,V,V2. ⇩[i] L ≘ K. ⓑ[J]V & ❨G,K❩ ⊢ V ⬈ V2 & ⇧[↑i] V2 ≘ T2. #G #L #T1 #i * #c #H elim (cpg_inv_lref1_drops … H) -H * /4 width=7 by ex3_4_intro, ex_intro, or_introl, or_intror/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops_basic.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops_basic.ma index 4be41497d..560df775b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops_basic.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops_basic.ma @@ -21,7 +21,7 @@ include "basic_2/rt_transition/cpx_drops.ma". lemma cpx_subst (G) (L) (U1) (i): ∀I,K,V. ⇩[i] L ≘ K.ⓑ[I]V → - ∃∃U2,T2. ❪G,L❫ ⊢ U1 ⬈ U2 & ⇧[i,1] T2 ≘ U2. + ∃∃U2,T2. ❨G,L❩ ⊢ U1 ⬈ U2 & ⇧[i,1] T2 ≘ U2. #G #L #U1 @(fqup_wf_ind_eq (Ⓣ) … G L U1) -G -L -U1 #G0 #L0 #U0 #IH #G #L * * [ #s #HG #HL #HT #i #I #K #V #_ destruct -IH diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_feqg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_feqg.ma index fa73e6fa3..75a272b4e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_feqg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_feqg.ma @@ -22,8 +22,8 @@ include "basic_2/rt_transition/rpx_reqg.ma". lemma feqg_cpx_trans_cpx (S): reflexive … S → symmetric … S → - ∀G1,G2,L1,L2,T1,T. ❪G1,L1,T1❫ ≛[S] ❪G2,L2,T❫ → - ∀T2. ❪G2,L2❫ ⊢ T ⬈ T2 → ❪G1,L1❫ ⊢ T1 ⬈ T2. + ∀G1,G2,L1,L2,T1,T. ❨G1,L1,T1❩ ≛[S] ❨G2,L2,T❩ → + ∀T2. ❨G2,L2❩ ⊢ T ⬈ T2 → ❨G1,L1❩ ⊢ T1 ⬈ T2. #S #H1S #H2S #G1 #G2 #L1 #L2 #T1 #T #H #T2 #HT2 elim (feqg_inv_gen_dx … H) -H // #H #HL12 #HT1 destruct @(cpx_teqg_repl_reqg … HT2) @@ -32,8 +32,8 @@ qed-. lemma feqg_cpx_trans_feqg (S): reflexive … S → symmetric … S → - ∀G1,G2,L1,L2,T1,T. ❪G1,L1,T1❫ ≛[S] ❪G2,L2,T❫ → - ∀T2. ❪G2,L2❫ ⊢ T ⬈ T2 → ❪G1,L1,T2❫ ≛[S] ❪G2,L2,T2❫. + ∀G1,G2,L1,L2,T1,T. ❨G1,L1,T1❩ ≛[S] ❨G2,L2,T❩ → + ∀T2. ❨G2,L2❩ ⊢ T ⬈ T2 → ❨G1,L1,T2❩ ≛[S] ❨G2,L2,T2❩. #S #H1S #H2S #G1 #G2 #L1 #L2 #T1 #T #H #T2 #HT2 elim (feqg_inv_gen_dx … H) -H // #H #HL12 #_ destruct lapply (cpx_reqg_conf_dx … HT2 … HL12) -HT2 -HL12 // #HL12 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_fqus.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_fqus.ma index 29ec0f051..e6e1037a2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_fqus.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_fqus.ma @@ -22,9 +22,9 @@ include "basic_2/rt_transition/cpx_lsubr.ma". (* Properties on supclosure *************************************************) lemma fqu_cpx_trans (b): - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → - ∀U2. ❪G2,L2❫ ⊢ T2 ⬈ U2 → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈ U1 & ❪G1,L1,U1❫ ⬂[b] ❪G2,L2,U2❫. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂[b] ❨G2,L2,T2❩ → + ∀U2. ❨G2,L2❩ ⊢ T2 ⬈ U2 → + ∃∃U1. ❨G1,L1❩ ⊢ T1 ⬈ U1 & ❨G1,L1,U1❩ ⬂[b] ❨G2,L2,U2❩. #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 /3 width=3 by cpx_pair_sn, cpx_bind, cpx_flat, fqu_pair_sn, fqu_bind_dx, fqu_flat_dx, ex2_intro/ [ #I #G #L2 #V2 #X2 #HVX2 @@ -38,9 +38,9 @@ lemma fqu_cpx_trans (b): qed-. lemma fquq_cpx_trans (b): - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → - ∀U2. ❪G2,L2❫ ⊢ T2 ⬈ U2 → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈ U1 & ❪G1,L1,U1❫ ⬂⸮[b] ❪G2,L2,U2❫. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂⸮[b] ❨G2,L2,T2❩ → + ∀U2. ❨G2,L2❩ ⊢ T2 ⬈ U2 → + ∃∃U1. ❨G1,L1❩ ⊢ T1 ⬈ U1 & ❨G1,L1,U1❩ ⬂⸮[b] ❨G2,L2,U2❩. #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -H [ #HT12 #U2 #HTU2 elim (fqu_cpx_trans … HT12 … HTU2) /3 width=3 by fqu_fquq, ex2_intro/ | * #H1 #H2 #H3 destruct /2 width=3 by ex2_intro/ @@ -48,9 +48,9 @@ lemma fquq_cpx_trans (b): qed-. lemma fqup_cpx_trans (b): - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → - ∀U2. ❪G2,L2❫ ⊢ T2 ⬈ U2 → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈ U1 & ❪G1,L1,U1❫ ⬂+[b] ❪G2,L2,U2❫. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂+[b] ❨G2,L2,T2❩ → + ∀U2. ❨G2,L2❩ ⊢ T2 ⬈ U2 → + ∃∃U1. ❨G1,L1❩ ⊢ T1 ⬈ U1 & ❨G1,L1,U1❩ ⬂+[b] ❨G2,L2,U2❩. #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2 [ #G2 #L2 #T2 #H12 #U2 #HTU2 elim (fqu_cpx_trans … H12 … HTU2) -T2 /3 width=3 by fqu_fqup, ex2_intro/ @@ -61,9 +61,9 @@ lemma fqup_cpx_trans (b): qed-. lemma fqus_cpx_trans (b): - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → - ∀U2. ❪G2,L2❫ ⊢ T2 ⬈ U2 → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈ U1 & ❪G1,L1,U1❫ ⬂*[b] ❪G2,L2,U2❫. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂*[b] ❨G2,L2,T2❩ → + ∀U2. ❨G2,L2❩ ⊢ T2 ⬈ U2 → + ∃∃U1. ❨G1,L1❩ ⊢ T1 ⬈ U1 & ❨G1,L1,U1❩ ⬂*[b] ❨G2,L2,U2❩. #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim (fqus_inv_fqup … H) -H [ #HT12 #U2 #HTU2 elim (fqup_cpx_trans … HT12 … HTU2) /3 width=3 by fqup_fqus, ex2_intro/ | * #H1 #H2 #H3 destruct /2 width=3 by ex2_intro/ @@ -71,9 +71,9 @@ lemma fqus_cpx_trans (b): qed-. lemma fqu_cpx_trans_tneqx (b): - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → - ∀U2. ❪G2,L2❫ ⊢ T2 ⬈ U2 → (T2 ≅ U2 → ⊥) → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈ U1 & T1 ≅ U1 → ⊥ & ❪G1,L1,U1❫ ⬂[b] ❪G2,L2,U2❫. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂[b] ❨G2,L2,T2❩ → + ∀U2. ❨G2,L2❩ ⊢ T2 ⬈ U2 → (T2 ≅ U2 → ⊥) → + ∃∃U1. ❨G1,L1❩ ⊢ T1 ⬈ U1 & T1 ≅ U1 → ⊥ & ❨G1,L1,U1❩ ⬂[b] ❨G2,L2,U2❩. #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 [ #I #G #L #V1 #V2 #HV12 #_ elim (lifts_total V2 𝐔❨1❩) #U2 #HVU2 @(ex3_intro … U2) @@ -104,9 +104,9 @@ lemma fqu_cpx_trans_tneqx (b): qed-. lemma fquq_cpx_trans_tneqx (b): - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → - ∀U2. ❪G2,L2❫ ⊢ T2 ⬈ U2 → (T2 ≅ U2 → ⊥) → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈ U1 & T1 ≅ U1 → ⊥ & ❪G1,L1,U1❫ ⬂⸮[b] ❪G2,L2,U2❫. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂⸮[b] ❨G2,L2,T2❩ → + ∀U2. ❨G2,L2❩ ⊢ T2 ⬈ U2 → (T2 ≅ U2 → ⊥) → + ∃∃U1. ❨G1,L1❩ ⊢ T1 ⬈ U1 & T1 ≅ U1 → ⊥ & ❨G1,L1,U1❩ ⬂⸮[b] ❨G2,L2,U2❩. #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 elim H12 -H12 [ #H12 #U2 #HTU2 #H elim (fqu_cpx_trans_tneqx … H12 … HTU2 H) -T2 /3 width=4 by fqu_fquq, ex3_intro/ @@ -115,9 +115,9 @@ lemma fquq_cpx_trans_tneqx (b): qed-. lemma fqup_cpx_trans_tneqx (b): - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → - ∀U2. ❪G2,L2❫ ⊢ T2 ⬈ U2 → (T2 ≅ U2 → ⊥) → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈ U1 & T1 ≅ U1 → ⊥ & ❪G1,L1,U1❫ ⬂+[b] ❪G2,L2,U2❫. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂+[b] ❨G2,L2,T2❩ → + ∀U2. ❨G2,L2❩ ⊢ T2 ⬈ U2 → (T2 ≅ U2 → ⊥) → + ∃∃U1. ❨G1,L1❩ ⊢ T1 ⬈ U1 & T1 ≅ U1 → ⊥ & ❨G1,L1,U1❩ ⬂+[b] ❨G2,L2,U2❩. #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind_dx … H) -G1 -L1 -T1 [ #G1 #L1 #T1 #H12 #U2 #HTU2 #H elim (fqu_cpx_trans_tneqx … H12 … HTU2 H) -T2 /3 width=4 by fqu_fqup, ex3_intro/ @@ -128,9 +128,9 @@ lemma fqup_cpx_trans_tneqx (b): qed-. lemma fqus_cpx_trans_tneqx (b): - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → - ∀U2. ❪G2,L2❫ ⊢ T2 ⬈ U2 → (T2 ≅ U2 → ⊥) → - ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈ U1 & T1 ≅ U1 → ⊥ & ❪G1,L1,U1❫ ⬂*[b] ❪G2,L2,U2❫. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂*[b] ❨G2,L2,T2❩ → + ∀U2. ❨G2,L2❩ ⊢ T2 ⬈ U2 → (T2 ≅ U2 → ⊥) → + ∃∃U1. ❨G1,L1❩ ⊢ T1 ⬈ U1 & T1 ≅ U1 → ⊥ & ❨G1,L1,U1❩ ⬂*[b] ❨G2,L2,U2❩. #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 #U2 #HTU2 #H elim (fqus_inv_fqup … H12) -H12 [ #H12 elim (fqup_cpx_trans_tneqx … H12 … HTU2 H) -T2 /3 width=4 by fqup_fqus, ex3_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_lsubr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_lsubr.ma index 42fd64fa1..2e79ed629 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_lsubr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_lsubr.ma @@ -24,7 +24,7 @@ lemma lsubr_cpx_trans (G): lsub_trans … (cpx G) lsubr. qed-. lemma cpx_bind_unit (G) (L): - ∀V1,V2. ❪G,L❫ ⊢ V1 ⬈ V2 → - ∀J,T1,T2. ❪G,L.ⓤ[J]❫ ⊢ T1 ⬈ T2 → - ∀p,I. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈ ⓑ[p,I]V2.T2. + ∀V1,V2. ❨G,L❩ ⊢ V1 ⬈ V2 → + ∀J,T1,T2. ❨G,L.ⓤ[J]❩ ⊢ T1 ⬈ T2 → + ∀p,I. ❨G,L❩ ⊢ ⓑ[p,I]V1.T1 ⬈ ⓑ[p,I]V2.T2. /4 width=4 by lsubr_cpx_trans, cpx_bind, lsubr_unit/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_reqg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_reqg.ma index ae75c0089..083b43e47 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_reqg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_reqg.ma @@ -27,6 +27,6 @@ lemma cpx_reqg_conf_sn (S) (G): (* Basic_2A1: was just: cpx_lleq_conf_dx *) lemma cpx_reqg_conf_dx (S) (G) (L2): reflexive … S → symmetric … S → - ∀T1,T2. ❪G,L2❫ ⊢ T1 ⬈ T2 → + ∀T1,T2. ❨G,L2❩ ⊢ T1 ⬈ T2 → ∀L1. L1 ≛[S,T1] L2 → L1 ≛[S,T2] L2. /4 width=4 by cpx_reqg_conf_sn, reqg_sym/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_simple.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_simple.ma index 02146309f..e5c330f80 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_simple.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_simple.ma @@ -20,8 +20,8 @@ include "basic_2/rt_transition/cpx.ma". (* Inversion lemmas with simple terms ***************************************) lemma cpx_inv_appl1_simple (G) (L): - ∀V1,T1,U. ❪G,L❫ ⊢ ⓐV1.T1 ⬈ U → 𝐒❪T1❫ → - ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈ V2 & ❪G,L❫ ⊢ T1 ⬈ T2 & U = ⓐV2.T2. + ∀V1,T1,U. ❨G,L❩ ⊢ ⓐV1.T1 ⬈ U → 𝐒❨T1❩ → + ∃∃V2,T2. ❨G,L❩ ⊢ V1 ⬈ V2 & ❨G,L❩ ⊢ T1 ⬈ T2 & U = ⓐV2.T2. #G #L #V1 #T1 #U * #c #H #HT1 elim (cpg_inv_appl1_simple … H) -H /3 width=5 by ex3_2_intro, ex_intro/ qed-. 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 9d9af6c96..245c10f53 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb.ma @@ -20,7 +20,7 @@ include "basic_2/rt_transition/rpx.ma". (* Basic_2A1: uses: fpbq *) definition fpb (G1) (L1) (T1) (G2) (L2) (T2): Prop ≝ - ∃∃L,T. ❪G1,L1,T1❫ ⬂⸮ ❪G2,L,T❫ & ❪G2,L❫ ⊢ T ⬈ T2 & ❪G2,L❫ ⊢ ⬈[T] L2. + ∃∃L,T. ❨G1,L1,T1❩ ⬂⸮ ❨G2,L,T❩ & ❨G2,L❩ ⊢ T ⬈ T2 & ❨G2,L❩ ⊢ ⬈[T] L2. interpretation "parallel rst-transition (closure)" @@ -29,19 +29,19 @@ interpretation (* Basic properties *********************************************************) lemma fpb_intro (G1) (L1) (T1) (G2) (L2) (T2): - ∀L,T. ❪G1,L1,T1❫ ⬂⸮ ❪G2,L,T❫ → ❪G2,L❫ ⊢ T ⬈ T2 → - ❪G2,L❫ ⊢ ⬈[T] L2 → ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫. + ∀L,T. ❨G1,L1,T1❩ ⬂⸮ ❨G2,L,T❩ → ❨G2,L❩ ⊢ T ⬈ T2 → + ❨G2,L❩ ⊢ ⬈[T] L2 → ❨G1,L1,T1❩ ≽ ❨G2,L2,T2❩. /2 width=5 by ex3_2_intro/ qed. lemma rpx_fpb (G) (T): - ∀L1,L2. ❪G,L1❫ ⊢ ⬈[T] L2 → ❪G,L1,T❫ ≽ ❪G,L2,T❫. + ∀L1,L2. ❨G,L1❩ ⊢ ⬈[T] L2 → ❨G,L1,T❩ ≽ ❨G,L2,T❩. /2 width=5 by fpb_intro/ qed. (* Basic inversion lemmas ***************************************************) lemma fpb_inv_gen (G1) (L1) (T1) (G2) (L2) (T2): - ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫ → - ∃∃L,T. ❪G1,L1,T1❫ ⬂⸮ ❪G2,L,T❫ & ❪G2,L❫ ⊢ T ⬈ T2 & ❪G2,L❫ ⊢ ⬈[T] L2. + ❨G1,L1,T1❩ ≽ ❨G2,L2,T2❩ → + ∃∃L,T. ❨G1,L1,T1❩ ⬂⸮ ❨G2,L,T❩ & ❨G2,L❩ ⊢ T ⬈ T2 & ❨G2,L❩ ⊢ ⬈[T] L2. // qed-. (* Basic_2A1: removed theorems 2: diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_aaa.ma index 533718941..898ffd3f0 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_aaa.ma @@ -23,8 +23,8 @@ include "basic_2/rt_transition/fpb_lpx.ma". (* Basic_2A1: uses: fpbq_aaa_conf *) lemma fpb_aaa_conf: - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫ → - ∀A1. ❪G1,L1❫ ⊢ T1 ⁝ A1 → ∃A2. ❪G2,L2❫ ⊢ T2 ⁝ A2. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ≽ ❨G2,L2,T2❩ → + ∀A1. ❨G1,L1❩ ⊢ T1 ⁝ A1 → ∃A2. ❨G2,L2❩ ⊢ T2 ⁝ A2. #G1 #G2 #L1 #L2 #T1 #T2 #H #A1 #HA1 elim (fpb_inv_req … H) -H #L0 #L #T #H1 #HT2 #HL0 #HL02 elim (aaa_fquq_conf … H1 … HA1) -G1 -L1 -T1 -A1 #A2 #HA2 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_feqg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_feqg.ma index 22219566d..73c82b8b1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_feqg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_feqg.ma @@ -26,7 +26,7 @@ include "basic_2/rt_transition/fpb.ma". (* Basic_2A1: uses: fpbq_feqx *) lemma feqg_fpb (S) (G1) (G2) (L1) (L2) (T1) (T2): reflexive … S → symmetric … S → - ❪G1,L1,T1❫ ≛[S] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫. + ❨G1,L1,T1❩ ≛[S] ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ≽ ❨G2,L2,T2❩. #S #G1 #G2 #L1 #L2 #T1 #T2 #HS1 #HS2 #H elim (feqg_inv_gen_sn … H) -H #H #HL12 #HT12 destruct /4 width=8 by reqg_rpx, teqg_cpx, fpb_intro/ @@ -34,8 +34,8 @@ qed. lemma feqg_fpb_trans (S) (G) (L) (T): reflexive … S → symmetric … S → Transitive … S → - ∀G1,L1,T1. ❪G1,L1,T1❫ ≛[S] ❪G,L,T❫ → - ∀G2,L2,T2. ❪G,L,T❫ ≽ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫. + ∀G1,L1,T1. ❨G1,L1,T1❩ ≛[S] ❨G,L,T❩ → + ∀G2,L2,T2. ❨G,L,T❩ ≽ ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ≽ ❨G2,L2,T2❩. #S #G #L #T #H1S #H2S #H3S #G1 #L1 #T1 #H1 #G2 #L2 #T2 #H2 elim (fpb_inv_gen … H2) -H2 #L0 #T0 #H0 #HT02 #H elim (rpx_inv_reqg_lpx S … H) -H // #L3 #HL03 #HL32 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_fqup.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_fqup.ma index 71f214c34..bc612ea2f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_fqup.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_fqup.ma @@ -25,14 +25,14 @@ lemma fpb_refl: tri_reflexive … fpb. (* Basic_2A1: uses: fpbq_cpx *) lemma cpx_fpb (G) (L): - ∀T1,T2. ❪G,L❫ ⊢ T1 ⬈ T2 → ❪G,L,T1❫ ≽ ❪G,L,T2❫. + ∀T1,T2. ❨G,L❩ ⊢ T1 ⬈ T2 → ❨G,L,T1❩ ≽ ❨G,L,T2❩. /2 width=5 by fpb_intro/ qed. (* Basic_2A1: uses: fpbq_fquq *) lemma fquq_fpb (G1) (G2) (L1) (L2) (T1) (T2): - ❪G1,L1,T1❫ ⬂⸮ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫. + ❨G1,L1,T1❩ ⬂⸮ ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ≽ ❨G2,L2,T2❩. /2 width=5 by fpb_intro/ qed. lemma fqu_fpb (G1) (G2) (L1) (L2) (T1) (T2): - ❪G1,L1,T1❫ ⬂ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫. + ❨G1,L1,T1❩ ⬂ ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ≽ ❨G2,L2,T2❩. /3 width=5 by fquq_fpb, fqu_fquq/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_lpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_lpx.ma index 2aa0f0d4d..3010a96ca 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_lpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_lpx.ma @@ -21,19 +21,19 @@ include "basic_2/rt_transition/fpb.ma". (* Basic_2A1: uses: fpbq_lpx *) lemma lpx_fpb (G) (T): - ∀L1,L2. ❪G,L1❫ ⊢ ⬈ L2 → ❪G,L1,T❫ ≽ ❪G,L2,T❫. + ∀L1,L2. ❨G,L1❩ ⊢ ⬈ L2 → ❨G,L1,T❩ ≽ ❨G,L2,T❩. /3 width=1 by rpx_fpb, lpx_rpx/ qed. lemma fpb_intro_req (G1) (G2) (L1) (L2) (T1) (T2): - ∀L0,L,T. ❪G1,L1,T1❫ ⬂⸮ ❪G2,L,T❫ → ❪G2,L❫ ⊢ T ⬈ T2 → - L ≡[T] L0 → ❪G2,L0❫ ⊢ ⬈ L2 → ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫. + ∀L0,L,T. ❨G1,L1,T1❩ ⬂⸮ ❨G2,L,T❩ → ❨G2,L❩ ⊢ T ⬈ T2 → + L ≡[T] L0 → ❨G2,L0❩ ⊢ ⬈ L2 → ❨G1,L1,T1❩ ≽ ❨G2,L2,T2❩. /4 width=10 by fpb_intro, lpx_rpx, reqg_rpx_trans/ qed. (* Inversion lemmas with extended rt-transition for full local envs *********) lemma fpb_inv_req (G1) (G2) (L1) (L2) (T1) (T2): - ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫ → - ∃∃L0,L,T. ❪G1,L1,T1❫ ⬂⸮ ❪G2,L,T❫ & ❪G2,L❫ ⊢ T ⬈ T2 & L ≡[T] L0 & ❪G2,L0❫ ⊢ ⬈ L2. + ❨G1,L1,T1❩ ≽ ❨G2,L2,T2❩ → + ∃∃L0,L,T. ❨G1,L1,T1❩ ⬂⸮ ❨G2,L,T❩ & ❨G2,L❩ ⊢ T ⬈ T2 & L ≡[T] L0 & ❨G2,L0❩ ⊢ ⬈ L2. #G1 #G2 #L1 #L2 #T1 #T2 * #L #T #H1 #HT2 #HL2 elim (rpx_inv_req_lpx … HL2) -HL2 #L0 #HL0 #HL02 /2 width=7 by ex4_3_intro/ @@ -42,8 +42,8 @@ qed-. (* Forward lemmas with extended rt-transition for full local envs ***********) lemma fpb_fwd_req (G1) (G2) (L1) (L2) (T1) (T2): - ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫ → - ∃∃L0,L,T. ❪G1,L1,T1❫ ⬂⸮ ❪G2,L,T❫ & ❪G2,L❫ ⊢ T ⬈ T2 & ❪G2,L❫ ⊢ ⬈ L0 & L0 ≡[T] L2. + ❨G1,L1,T1❩ ≽ ❨G2,L2,T2❩ → + ∃∃L0,L,T. ❨G1,L1,T1❩ ⬂⸮ ❨G2,L,T❩ & ❨G2,L❩ ⊢ T ⬈ T2 & ❨G2,L❩ ⊢ ⬈ L0 & L0 ≡[T] L2. #G1 #G2 #L1 #L2 #T1 #T2 * #L #T #H1 #HT2 #HL2 elim (rpx_fwd_lpx_req … HL2) -HL2 #L0 #HL0 #HL02 /2 width=7 by ex4_3_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbc.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbc.ma index 1944ee29b..4245b5811 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbc.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbc.ma @@ -20,8 +20,8 @@ include "basic_2/rt_transition/fpb.ma". (* Basic_2A1: uses: fpb *) definition fpbc (G1) (L1) (T1) (G2) (L2) (T2): Prop ≝ - ∧∧ ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫ - & (❪G1,L1,T1❫ ≅ ❪G2,L2,T2❫ → ⊥). + ∧∧ ❨G1,L1,T1❩ ≽ ❨G2,L2,T2❩ + & (❨G1,L1,T1❩ ≅ ❨G2,L2,T2❩ → ⊥). interpretation "proper parallel rst-transition (closure)" @@ -31,20 +31,20 @@ interpretation (* Basic_2A1: fpbq_inv_fpb_alt *) lemma fpbc_intro (G1) (L1) (T1) (G2) (L2) (T2): - ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫ → (❪G1,L1,T1❫ ≅ ❪G2,L2,T2❫ → ⊥) → - ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫. + ❨G1,L1,T1❩ ≽ ❨G2,L2,T2❩ → (❨G1,L1,T1❩ ≅ ❨G2,L2,T2❩ → ⊥) → + ❨G1,L1,T1❩ ≻ ❨G2,L2,T2❩. /3 width=1 by conj/ qed. lemma rpx_fpbc (G) (T): - ∀L1,L2. ❪G,L1❫ ⊢ ⬈[T] L2 → (L1 ≅[T] L2 → ⊥) → ❪G,L1,T❫ ≻ ❪G,L2,T❫. + ∀L1,L2. ❨G,L1❩ ⊢ ⬈[T] L2 → (L1 ≅[T] L2 → ⊥) → ❨G,L1,T❩ ≻ ❨G,L2,T❩. /4 width=4 by fpbc_intro, rpx_fpb, feqg_fwd_reqg_sn/ qed. (* Basic inversion lemmas ***************************************************) (* Basic_2A1: uses: fpb_fpbq_alt *) lemma fpbc_inv_gen (S): - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫ → - ∧∧ ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫ & (❪G1,L1,T1❫ ≛[S] ❪G2,L2,T2❫ → ⊥). + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ≻ ❨G2,L2,T2❩ → + ∧∧ ❨G1,L1,T1❩ ≽ ❨G2,L2,T2❩ & (❨G1,L1,T1❩ ≛[S] ❨G2,L2,T2❩ → ⊥). #S #G1 #G2 #L1 #L2 #T1 #T2 * /4 width=2 by feqg_feqx, conj/ qed-. @@ -53,7 +53,7 @@ qed-. (* Basic_2A1: uses: fpb_fpbq *) lemma fpbc_fwd_fpb: - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫ → - ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ≻ ❨G2,L2,T2❩ → + ❨G1,L1,T1❩ ≽ ❨G2,L2,T2❩. #G1 #G2 #L1 #L2 #T1 #T2 * // qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbc_feqg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbc_feqg.ma index 78ada2f83..e1456347e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbc_feqg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbc_feqg.ma @@ -22,8 +22,8 @@ include "basic_2/rt_transition/fpbc.ma". (* Basic_2A1: uses: teqg_fpb_trans lleq_fpb_trans fleq_fpb_trans *) lemma feqg_fpbc_trans (S) (G) (L) (T): reflexive … S → symmetric … S → Transitive … S → - ∀G1,L1,T1. ❪G1,L1,T1❫ ≛[S] ❪G,L,T❫ → - ∀G2,L2,T2. ❪G,L,T❫ ≻ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫. + ∀G1,L1,T1. ❨G1,L1,T1❩ ≛[S] ❨G,L,T❩ → + ∀G2,L2,T2. ❨G,L,T❩ ≻ ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ≻ ❨G2,L2,T2❩. #S #G #L #T #H1S #H2S #H3S #G1 #L1 #T1 #H1 #G2 #L2 #T2 #H2 elim (fpbc_inv_gen sfull … H2) -H2 #H2 #Hn2 /6 width=9 by fpbc_intro, feqg_fpb_trans, feqg_canc_sn, feqg_feqx/ @@ -33,8 +33,8 @@ qed-. (* Basic_2A1: uses: fpb_inv_fleq *) lemma fpbc_inv_feqg (S): - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫ → - ❪G1,L1,T1❫ ≛[S] ❪G2,L2,T2❫ → ⊥. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ≻ ❨G2,L2,T2❩ → + ❨G1,L1,T1❩ ≛[S] ❨G2,L2,T2❩ → ⊥. #S #G1 #G2 #L1 #L2 #T1 #T2 #H #H12 elim (fpbc_inv_gen S … H) -H #_ #Hn2 /2 width=1 by/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbc_fpb.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbc_fpb.ma index 35654e6da..0c31ace7a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbc_fpb.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbc_fpb.ma @@ -21,9 +21,9 @@ include "basic_2/rt_transition/fpbc.ma". (* Basic_2A1: uses: fpbq_ind_alt *) lemma fpb_inv_fpbc: - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≽ ❪G2,L2,T2❫ → - ∨∨ ❪G1,L1,T1❫ ≅ ❪G2,L2,T2❫ - | ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ≽ ❨G2,L2,T2❩ → + ∨∨ ❨G1,L1,T1❩ ≅ ❨G2,L2,T2❩ + | ❨G1,L1,T1❩ ≻ ❨G2,L2,T2❩. #G1 #G2 #L1 #L2 #T1 #T2 #H elim (feqx_dec G1 G2 L1 L2 T1 T2) /4 width=1 by fpbc_intro, or_intror, or_introl/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbc_fqup.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbc_fqup.ma index 23806bc82..c7e7d1ed2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbc_fqup.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbc_fqup.ma @@ -22,10 +22,10 @@ include "basic_2/rt_transition/fpbc.ma". (* Basic_2A1: uses: fpb_cpx *) lemma cpx_fpbc (G) (L): - ∀T1,T2. ❪G,L❫ ⊢ T1 ⬈ T2 → (T1 ≅ T2 → ⊥) → ❪G,L,T1❫ ≻ ❪G,L,T2❫. + ∀T1,T2. ❨G,L❩ ⊢ T1 ⬈ T2 → (T1 ≅ T2 → ⊥) → ❨G,L,T1❩ ≻ ❨G,L,T2❩. /4 width=5 by fpbc_intro, cpx_fpb, feqg_fwd_teqg/ qed. (* Basic_2A1: uses: fpb_fqu *) lemma fqu_fpbc (G1) (G2) (L1) (L2) (T1) (T2): - ❪G1,L1,T1❫ ⬂ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫. + ❨G1,L1,T1❩ ⬂ ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ≻ ❨G2,L2,T2❩. /4 width=10 by fpbc_intro, fquq_fpb, fqu_fquq, fqu_fneqg/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbc_lpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbc_lpx.ma index 5db9f7e13..8960e8b36 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbc_lpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbc_lpx.ma @@ -21,16 +21,16 @@ include "basic_2/rt_transition/fpbc.ma". (* Basic_2A1: uses: fpb_lpx *) lemma lpx_fpbc (G) (T): - ∀L1,L2. ❪G,L1❫ ⊢ ⬈ L2 → (L1 ≅[T] L2 → ⊥) → ❪G,L1,T❫ ≻ ❪G,L2,T❫. + ∀L1,L2. ❨G,L1❩ ⊢ ⬈ L2 → (L1 ≅[T] L2 → ⊥) → ❨G,L1,T❩ ≻ ❨G,L2,T❩. /3 width=1 by rpx_fpbc, lpx_rpx/ qed. (* Forward lemmas with extended rt-transition for full local envs ***********) lemma fpbc_fwd_lpx (G1) (G2) (L1) (L2) (T1) (T2): - ❪G1,L1,T1❫ ≻ ❪G2,L2,T2❫ → - ∨∨ ∃∃G,L,T. ❪G1,L1,T1❫ ⬂ ❪G,L,T❫ & ❪G,L,T❫ ≽ ❪G2,L2,T2❫ - | ∃∃T. ❪G1,L1❫ ⊢ T1 ⬈ T & T1 ≅ T → ⊥ & ❪G1,L1,T❫ ≽ ❪G2,L2,T2❫ - | ∃∃L. ❪G1,L1❫ ⊢ ⬈ L & (L1 ≅[T1] L → ⊥) & ❪G1,L,T1❫ ≽ ❪G2,L2,T2❫. + ❨G1,L1,T1❩ ≻ ❨G2,L2,T2❩ → + ∨∨ ∃∃G,L,T. ❨G1,L1,T1❩ ⬂ ❨G,L,T❩ & ❨G,L,T❩ ≽ ❨G2,L2,T2❩ + | ∃∃T. ❨G1,L1❩ ⊢ T1 ⬈ T & T1 ≅ T → ⊥ & ❨G1,L1,T❩ ≽ ❨G2,L2,T2❩ + | ∃∃L. ❨G1,L1❩ ⊢ ⬈ L & (L1 ≅[T1] L → ⊥) & ❨G1,L,T1❩ ≽ ❨G2,L2,T2❩. #G1 #G2 #L1 #L2 #T1 #T2 #H elim (fpbc_inv_gen sfull … H) -H #H12 #Hn12 elim (fpb_inv_gen … H12) -H12 #L #T #H1 #HT2 #HL2 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 2cfb7ff4d..c0e1266ff 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr.ma @@ -27,8 +27,8 @@ interpretation (* Basic properties *********************************************************) -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]. +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 *) @@ -37,60 +37,60 @@ lemma lpr_refl (h) (G): reflexive … (lpr h 0 G). (* Advanced properties ******************************************************) -lemma lpr_bind_refl_dx (h) (G): ∀K1,K2. ❪G,K1❫ ⊢ ➡[h,0] K2 → - ∀I. ❪G,K1.ⓘ[I]❫ ⊢ ➡[h,0] 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,0] K2 → ❪G,K1❫ ⊢ V1 ➡[h,0] V2 → - ∀I. ❪G,K1.ⓑ[I]V1❫ ⊢ ➡[h,0] 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,0] 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,0] L2 → - ∃∃I2,K2. ❪G,K1❫ ⊢ ➡[h,0] K2 & ❪G,K1❫ ⊢ I1 ➡[h,0] 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,0] ⋆ → 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,0] K2.ⓘ[I2] → - ∃∃I1,K1. ❪G,K1❫ ⊢ ➡[h,0] K2 & ❪G,K1❫ ⊢ I1 ➡[h,0] 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,0] L2 → - ∃∃K2. ❪G,K1❫ ⊢ ➡[h,0] 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,0] L2 → - ∃∃K2,V2. ❪G,K1❫ ⊢ ➡[h,0] K2 & ❪G,K1❫ ⊢ V1 ➡[h,0] 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,0] K2.ⓤ[I] → - ∃∃K1. ❪G,K1❫ ⊢ ➡[h,0] 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,0] K2.ⓑ[I]V2 → - ∃∃K1,V1. ❪G,K1❫ ⊢ ➡[h,0] K2 & ❪G,K1❫ ⊢ V1 ➡[h,0] 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,0] L2.ⓑ[I2]V2 → - ∧∧ ❪G,L1❫ ⊢ ➡[h,0] L2 & ❪G,L1❫ ⊢ V1 ➡[h,0] 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_fpb.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_fpb.ma index 866a03b98..e04ba8269 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_fpb.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_fpb.ma @@ -21,5 +21,5 @@ include "basic_2/rt_transition/lpr_lpx.ma". (* Basic_2A1: uses: lpr_fpbq *) lemma lpr_fwd_fpb (h) (G) (T): - ∀L1,L2. ❪G,L1❫ ⊢ ➡[h,0] L2 → ❪G,L1,T❫ ≽ ❪G,L2,T❫. + ∀L1,L2. ❨G,L1❩ ⊢ ➡[h,0] L2 → ❨G,L1,T❩ ≽ ❨G,L2,T❩. /3 width=2 by lpx_fpb, lpr_fwd_lpx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_fpbc.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_fpbc.ma index 542e4bf3f..390dbf5dd 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_fpbc.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_fpbc.ma @@ -21,5 +21,5 @@ include "basic_2/rt_transition/lpr_lpx.ma". (* Basic_2A1: uses: lpr_fpb *) lemma lpr_fwd_fpbc (h) (G) (T): - ∀L1,L2. ❪G,L1❫ ⊢ ➡[h,0] L2 → (L1 ≅[T] L2 → ⊥) → ❪G,L1,T❫ ≻ ❪G,L2,T❫. + ∀L1,L2. ❨G,L1❩ ⊢ ➡[h,0] L2 → (L1 ≅[T] L2 → ⊥) → ❨G,L1,T❩ ≻ ❨G,L2,T❩. /3 width=2 by lpx_fpbc, 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 6c9f743cb..43589b7c5 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 @@ -22,9 +22,9 @@ 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,0] U2 → - ∃∃L,U1. ❪G1,L1❫ ⊢ ➡[h,0] L & ❪G1,L1❫ ⊢ T1 ➡[h,0] U1 & ❪G1,L,U1❫ ⬂[b] ❪G2,L2,U2❫. +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,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/ @@ -37,9 +37,9 @@ 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,0] U2 → - ∃∃L,U1. ❪G1,L1❫ ⊢ ➡[h,0] L & ❪G1,L❫ ⊢ T1 ➡[h,0] U1 & ❪G1,L,U1❫ ⬂[b] ❪G2,L2,U2❫. +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,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/ @@ -52,9 +52,9 @@ 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,0] K2 → - ∃∃K1,T. ❪G1,L1❫ ⊢ ➡[h,0] K1 & ❪G1,L1❫ ⊢ T1 ➡[h,0] T & ❪G1,K1,T❫ ⬂[b] ❪G2,K2,T2❫. +lemma fqu_lpr_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂[b] ❨G2,L2,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/ @@ -71,9 +71,9 @@ 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,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. +lemma lpr_fqu_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂[b] ❨G2,L2,T2❩ → + ∀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 @@ -91,36 +91,36 @@ 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,0] U2 → - ∃∃L,U1. ❪G1,L1❫ ⊢ ➡[h,0] L & ❪G1,L1❫ ⊢ T1 ➡[h,0] U1 & ❪G1,L,U1❫ ⬂⸮[b] ❪G2,L2,U2❫. +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,0] U2 → + ∃∃L,U1. ❨G1,L1❩ ⊢ ➡[h,0] L & ❨G1,L1❩ ⊢ T1 ➡[h,0] U1 & ❨G1,L,U1❩ ⬂⸮[b] ❨G2,L2,U2❩. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #U2 #HTU2 cases H -H [ #HT12 elim (fqu_cpr_trans_sn … HT12 … HTU2) /3 width=5 by fqu_fquq, ex3_2_intro/ | * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/ ] qed-. -lemma fquq_cpr_trans_dx (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → - ∀U2. ❪G2,L2❫ ⊢ T2 ➡[h,0] U2 → - ∃∃L,U1. ❪G1,L1❫ ⊢ ➡[h,0] L & ❪G1,L❫ ⊢ T1 ➡[h,0] U1 & ❪G1,L,U1❫ ⬂⸮[b] ❪G2,L2,U2❫. +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,0] U2 → + ∃∃L,U1. ❨G1,L1❩ ⊢ ➡[h,0] L & ❨G1,L❩ ⊢ T1 ➡[h,0] U1 & ❨G1,L,U1❩ ⬂⸮[b] ❨G2,L2,U2❩. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #U2 #HTU2 cases H -H [ #HT12 elim (fqu_cpr_trans_dx … HT12 … HTU2) /3 width=5 by fqu_fquq, ex3_2_intro/ | * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/ ] qed-. -lemma fquq_lpr_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → - ∀K2. ❪G2,L2❫ ⊢ ➡[h,0] K2 → - ∃∃K1,T. ❪G1,L1❫ ⊢ ➡[h,0] K1 & ❪G1,L1❫ ⊢ T1 ➡[h,0] T & ❪G1,K1,T❫ ⬂⸮[b] ❪G2,K2,T2❫. +lemma fquq_lpr_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂⸮[b] ❨G2,L2,T2❩ → + ∀K2. ❨G2,L2❩ ⊢ ➡[h,0] K2 → + ∃∃K1,T. ❨G1,L1❩ ⊢ ➡[h,0] K1 & ❨G1,L1❩ ⊢ T1 ➡[h,0] T & ❨G1,K1,T❩ ⬂⸮[b] ❨G2,K2,T2❩. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #K2 #HLK2 cases H -H [ #H12 elim (fqu_lpr_trans … H12 … HLK2) /3 width=5 by fqu_fquq, ex3_2_intro/ | * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/ ] qed-. -lemma lpr_fquq_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → - ∀K1. ❪G1,K1❫ ⊢ ➡[h,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. +lemma lpr_fquq_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂⸮[b] ❨G2,L2,T2❩ → + ∀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 3a548a496..f7a1341e5 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,0] 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 73509adec..2c94f6c1d 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,24 +21,24 @@ 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,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. + ∀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,0] T & ❪G,L2❫ ⊢ ⓪[I] ➡[h,0] 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): ∀G0,L0,i. ( - ∀G,L,T. ❪G0,L0,#i❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T + ∀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,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. + ∀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 @@ -54,14 +54,14 @@ qed-. (* Basic_1: includes: pr0_delta_delta pr2_delta_delta *) fact cpr_conf_lpr_delta_delta (h): ∀G0,L0,i. ( - ∀G,L,T. ❪G0,L0,#i❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T + ∀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,0] 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,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. + ∀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 @@ -79,12 +79,12 @@ qed-. 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 + ∀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,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. + ∀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) // @@ -94,12 +94,12 @@ qed-. 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 + ∀G,L,T. ❨G0,L0,+ⓓV0.T0❩ ⬂+ ❨G,L,T❩ → IH_cpr_conf_lpr h G L 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. + ∀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 @@ -109,12 +109,12 @@ qed-. 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 + ∀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,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. + ∀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 @@ -124,12 +124,12 @@ qed-. 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 + ∀G,L,T. ❨G0,L0,ⓕ[I]V0.T0❩ ⬂+ ❨G,L,T❩ → IH_cpr_conf_lpr h G L 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. + ∀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) // @@ -139,11 +139,11 @@ qed-. 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 + ∀G,L,T. ❨G0,L0,ⓝV0.T0❩ ⬂+ ❨G,L,T❩ → IH_cpr_conf_lpr h G L 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. + ∀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 @@ -152,11 +152,11 @@ qed-. 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 + ∀G,L,T. ❨G0,L0,ⓝV0.T0❩ ⬂+ ❨G,L,T❩ → IH_cpr_conf_lpr h G L 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. + ∀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 @@ -165,12 +165,12 @@ qed-. 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 + ∀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,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. + ∀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 @@ -187,13 +187,13 @@ qed-. *) 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 + ∀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,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. + ∀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 @@ -212,12 +212,12 @@ qed-. 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 + ∀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,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. + ∀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 @@ -231,14 +231,14 @@ qed-. (* Basic_1: was: pr0_upsilon_upsilon *) 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 + ∀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,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. + ∀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,0] T1 → ∀L1. ❪G,L0❫ ⊢ ➡[h,0] L1 → - ∃∃T. ❪G,L1❫ ⊢ T0 ➡[h,0] T & ❪G,L1❫ ⊢ T1 ➡[h,0] 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,0] T1 → ∀L1. ❪G,L0❫ ⊢ ➡[h,0] L1 → - ∃∃T. ❪G,L1❫ ⊢ T0 ➡[h,0] T & ❪G,L0❫ ⊢ T1 ➡[h,0] 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/ 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 ac7a93d62..d8b2c1390 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 @@ -22,5 +22,5 @@ include "basic_2/rt_transition/lpr.ma". (* Basic_2A1: was: lpr_lpx *) lemma lpr_fwd_lpx (h) (G): - ∀L1,L2. ❪G,L1❫ ⊢ ➡[h,0] L2 → ❪G,L1❫ ⊢ ⬈ L2. + ∀L1,L2. ❨G,L1❩ ⊢ ➡[h,0] L2 → ❨G,L1❩ ⊢ ⬈ L2. /3 width=3 by cpm_fwd_cpx, lex_co/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx.ma index 3878acfd8..46fae1fa9 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx.ma @@ -27,8 +27,8 @@ interpretation (* Basic properties *********************************************************) lemma lpx_bind (G): - ∀K1,K2. ❪G,K1❫ ⊢ ⬈ K2 → ∀I1,I2. ❪G,K1❫ ⊢ I1 ⬈ I2 → - ❪G,K1.ⓘ[I1]❫ ⊢ ⬈ K2.ⓘ[I2]. + ∀K1,K2. ❨G,K1❩ ⊢ ⬈ K2 → ∀I1,I2. ❨G,K1❩ ⊢ I1 ⬈ I2 → + ❨G,K1.ⓘ[I1]❩ ⊢ ⬈ K2.ⓘ[I2]. /2 width=1 by lex_bind/ qed. lemma lpx_refl (G): reflexive … (lpx G). @@ -37,62 +37,62 @@ lemma lpx_refl (G): reflexive … (lpx G). (* Advanced properties ******************************************************) lemma lpx_bind_refl_dx (G): - ∀K1,K2. ❪G,K1❫ ⊢ ⬈ K2 → - ∀I. ❪G,K1.ⓘ[I]❫ ⊢ ⬈ K2.ⓘ[I]. + ∀K1,K2. ❨G,K1❩ ⊢ ⬈ K2 → + ∀I. ❨G,K1.ⓘ[I]❩ ⊢ ⬈ K2.ⓘ[I]. /2 width=1 by lex_bind_refl_dx/ qed. lemma lpx_pair (G): - ∀K1,K2. ❪G,K1❫ ⊢ ⬈ K2 → ∀V1,V2. ❪G,K1❫ ⊢ V1 ⬈ V2 → - ∀I.❪G,K1.ⓑ[I]V1❫ ⊢ ⬈ K2.ⓑ[I]V2. + ∀K1,K2. ❨G,K1❩ ⊢ ⬈ K2 → ∀V1,V2. ❨G,K1❩ ⊢ V1 ⬈ V2 → + ∀I.❨G,K1.ⓑ[I]V1❩ ⊢ ⬈ K2.ⓑ[I]V2. /2 width=1 by lex_pair/ qed. (* Basic inversion lemmas ***************************************************) (* Basic_2A1: was: lpx_inv_atom1 *) lemma lpx_inv_atom_sn (G): - ∀L2. ❪G,⋆❫ ⊢ ⬈ L2 → L2 = ⋆. + ∀L2. ❨G,⋆❩ ⊢ ⬈ L2 → L2 = ⋆. /2 width=2 by lex_inv_atom_sn/ qed-. lemma lpx_inv_bind_sn (G): - ∀I1,L2,K1. ❪G,K1.ⓘ[I1]❫ ⊢ ⬈ L2 → - ∃∃I2,K2. ❪G,K1❫ ⊢ ⬈ K2 & ❪G,K1❫ ⊢ I1 ⬈ I2 & L2 = K2.ⓘ[I2]. + ∀I1,L2,K1. ❨G,K1.ⓘ[I1]❩ ⊢ ⬈ L2 → + ∃∃I2,K2. ❨G,K1❩ ⊢ ⬈ K2 & ❨G,K1❩ ⊢ I1 ⬈ I2 & L2 = K2.ⓘ[I2]. /2 width=1 by lex_inv_bind_sn/ qed-. (* Basic_2A1: was: lpx_inv_atom2 *) lemma lpx_inv_atom_dx (G): - ∀L1. ❪G,L1❫ ⊢ ⬈ ⋆ → L1 = ⋆. + ∀L1. ❨G,L1❩ ⊢ ⬈ ⋆ → L1 = ⋆. /2 width=2 by lex_inv_atom_dx/ qed-. lemma lpx_inv_bind_dx (G): - ∀I2,L1,K2. ❪G,L1❫ ⊢ ⬈ K2.ⓘ[I2] → - ∃∃I1,K1. ❪G,K1❫ ⊢ ⬈ K2 & ❪G,K1❫ ⊢ I1 ⬈ I2 & L1 = K1.ⓘ[I1]. + ∀I2,L1,K2. ❨G,L1❩ ⊢ ⬈ K2.ⓘ[I2] → + ∃∃I1,K1. ❨G,K1❩ ⊢ ⬈ K2 & ❨G,K1❩ ⊢ I1 ⬈ I2 & L1 = K1.ⓘ[I1]. /2 width=1 by lex_inv_bind_dx/ qed-. (* Advanced inversion lemmas ************************************************) lemma lpx_inv_unit_sn (G): - ∀I,L2,K1. ❪G,K1.ⓤ[I]❫ ⊢ ⬈ L2 → - ∃∃K2. ❪G,K1❫ ⊢ ⬈ K2 & L2 = K2.ⓤ[I]. + ∀I,L2,K1. ❨G,K1.ⓤ[I]❩ ⊢ ⬈ L2 → + ∃∃K2. ❨G,K1❩ ⊢ ⬈ K2 & L2 = K2.ⓤ[I]. /2 width=1 by lex_inv_unit_sn/ qed-. (* Basic_2A1: was: lpx_inv_pair1 *) lemma lpx_inv_pair_sn (G): - ∀I,L2,K1,V1. ❪G,K1.ⓑ[I]V1❫ ⊢ ⬈ L2 → - ∃∃K2,V2. ❪G,K1❫ ⊢ ⬈ K2 & ❪G,K1❫ ⊢ V1 ⬈ V2 & L2 = K2.ⓑ[I]V2. + ∀I,L2,K1,V1. ❨G,K1.ⓑ[I]V1❩ ⊢ ⬈ L2 → + ∃∃K2,V2. ❨G,K1❩ ⊢ ⬈ K2 & ❨G,K1❩ ⊢ V1 ⬈ V2 & L2 = K2.ⓑ[I]V2. /2 width=1 by lex_inv_pair_sn/ qed-. lemma lpx_inv_unit_dx (G): - ∀I,L1,K2. ❪G,L1❫ ⊢ ⬈ K2.ⓤ[I] → - ∃∃K1. ❪G,K1❫ ⊢ ⬈ K2 & L1 = K1.ⓤ[I]. + ∀I,L1,K2. ❨G,L1❩ ⊢ ⬈ K2.ⓤ[I] → + ∃∃K1. ❨G,K1❩ ⊢ ⬈ K2 & L1 = K1.ⓤ[I]. /2 width=1 by lex_inv_unit_dx/ qed-. (* Basic_2A1: was: lpx_inv_pair2 *) lemma lpx_inv_pair_dx (G): - ∀I,L1,K2,V2. ❪G,L1❫ ⊢ ⬈ K2.ⓑ[I]V2 → - ∃∃K1,V1. ❪G,K1❫ ⊢ ⬈ K2 & ❪G,K1❫ ⊢ V1 ⬈ V2 & L1 = K1.ⓑ[I]V1. + ∀I,L1,K2,V2. ❨G,L1❩ ⊢ ⬈ K2.ⓑ[I]V2 → + ∃∃K1,V1. ❨G,K1❩ ⊢ ⬈ K2 & ❨G,K1❩ ⊢ V1 ⬈ V2 & L1 = K1.ⓑ[I]V1. /2 width=1 by lex_inv_pair_dx/ qed-. lemma lpx_inv_pair (G): - ∀I1,I2,L1,L2,V1,V2. ❪G,L1.ⓑ[I1]V1❫ ⊢ ⬈ L2.ⓑ[I2]V2 → - ∧∧ ❪G,L1❫ ⊢ ⬈ L2 & ❪G,L1❫ ⊢ V1 ⬈ V2 & I1 = I2. + ∀I1,I2,L1,L2,V1,V2. ❨G,L1.ⓑ[I1]V1❩ ⊢ ⬈ L2.ⓑ[I2]V2 → + ∧∧ ❨G,L1❩ ⊢ ⬈ L2 & ❨G,L1❩ ⊢ V1 ⬈ V2 & I1 = I2. /2 width=1 by lex_inv_pair/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_aaa.ma index 2652783e7..134d5557f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_aaa.ma @@ -23,9 +23,9 @@ include "basic_2/rt_transition/lpx_drops.ma". (* Note: lemma 500 *) (* Basic_2A1: was: cpx_lpx_aaa_conf *) lemma cpx_aaa_conf_lpx (G) (L1): - ∀T1,A. ❪G,L1❫ ⊢ T1 ⁝ A → - ∀T2. ❪G,L1❫ ⊢ T1 ⬈ T2 → - ∀L2. ❪G,L1❫ ⊢ ⬈ L2 → ❪G,L2❫ ⊢ T2 ⁝ A. + ∀T1,A. ❨G,L1❩ ⊢ T1 ⁝ A → + ∀T2. ❨G,L1❩ ⊢ T1 ⬈ T2 → + ∀L2. ❨G,L1❩ ⊢ ⬈ L2 → ❨G,L2❩ ⊢ T2 ⁝ A. #G #L1 #T1 #A #H elim H -G -L1 -T1 -A [ #G #L1 #s1 #X #H elim (cpx_inv_sort1 … H) -H #s2 #H destruct // diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fquq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fquq.ma index 1198a5fed..3cb9f8e25 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fquq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fquq.ma @@ -20,9 +20,9 @@ include "basic_2/rt_transition/lpx.ma". (* Properties with extended structural successor for closures ***************) lemma lpx_fqu_trans (b): - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → - ∀K1. ❪G1,K1❫ ⊢ ⬈ L1 → - ∃∃K2,T. ❪G1,K1❫ ⊢ T1 ⬈ T & ❪G1,K1,T❫ ⬂[b] ❪G2,K2,T2❫ & ❪G2,K2❫ ⊢ ⬈ L2. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂[b] ❨G2,L2,T2❩ → + ∀K1. ❨G1,K1❩ ⊢ ⬈ L1 → + ∃∃K2,T. ❨G1,K1❩ ⊢ T1 ⬈ T & ❨G1,K1,T❩ ⬂[b] ❨G2,K2,T2❩ & ❨G2,K2❩ ⊢ ⬈ L2. #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 [ #I #G #K #V #K1 #H elim (lpx_inv_pair_dx … H) -H #K0 #V0 #HK0 #HV0 #H destruct @@ -39,9 +39,9 @@ lemma lpx_fqu_trans (b): qed-. lemma fqu_lpx_trans (b): - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → - ∀K2. ❪G2,L2❫ ⊢ ⬈ K2 → - ∃∃K1,T. ❪G1,L1❫ ⊢ ⬈ K1 & ❪G1,L1❫ ⊢ T1 ⬈ T & ❪G1,K1,T❫ ⬂[b] ❪G2,K2,T2❫. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂[b] ❨G2,L2,T2❩ → + ∀K2. ❨G2,L2❩ ⊢ ⬈ K2 → + ∃∃K1,T. ❨G1,L1❩ ⊢ ⬈ K1 & ❨G1,L1❩ ⊢ T1 ⬈ T & ❨G1,K1,T❩ ⬂[b] ❨G2,K2,T2❩. #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 [ /3 width=5 by lpx_bind_refl_dx, fqu_lref_O, ex3_2_intro/ | /3 width=5 by cpx_pair_sn, fqu_pair_sn, ex3_2_intro/ @@ -59,9 +59,9 @@ qed-. (* Properties with extended optional structural successor for closures ******) lemma lpx_fquq_trans (b): - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → - ∀K1. ❪G1,K1❫ ⊢ ⬈ L1 → - ∃∃K2,T. ❪G1,K1❫ ⊢ T1 ⬈ T & ❪G1,K1,T❫ ⬂⸮[b] ❪G2,K2,T2❫ & ❪G2,K2❫ ⊢ ⬈ L2. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂⸮[b] ❨G2,L2,T2❩ → + ∀K1. ❨G1,K1❩ ⊢ ⬈ L1 → + ∃∃K2,T. ❨G1,K1❩ ⊢ T1 ⬈ T & ❨G1,K1,T❩ ⬂⸮[b] ❨G2,K2,T2❩ & ❨G2,K2❩ ⊢ ⬈ L2. #b #G1 #G2 #L1 #L2 #T1 #T2 #H #K1 #HKL1 cases H -H [ #H12 elim (lpx_fqu_trans … H12 … HKL1) -L1 /3 width=5 by fqu_fquq, ex3_2_intro/ | * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/ @@ -69,9 +69,9 @@ lemma lpx_fquq_trans (b): qed-. lemma fquq_lpx_trans (b): - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → - ∀K2. ❪G2,L2❫ ⊢ ⬈ K2 → - ∃∃K1,T. ❪G1,L1❫ ⊢ ⬈ K1 & ❪G1,L1❫ ⊢ T1 ⬈ T & ❪G1,K1,T❫ ⬂⸮[b] ❪G2,K2,T2❫. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂⸮[b] ❨G2,L2,T2❩ → + ∀K2. ❨G2,L2❩ ⊢ ⬈ K2 → + ∃∃K1,T. ❨G1,L1❩ ⊢ ⬈ K1 & ❨G1,L1❩ ⊢ T1 ⬈ T & ❨G1,K1,T❩ ⬂⸮[b] ❨G2,K2,T2❩. #b #G1 #G2 #L1 #L2 #T1 #T2 #H #K2 #HLK2 cases H -H [ #H12 elim (fqu_lpx_trans … H12 … HLK2) /3 width=5 by fqu_fquq, ex3_2_intro/ | * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fsle.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fsle.ma index 14a30512f..77868539b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fsle.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fsle.ma @@ -20,11 +20,11 @@ include "basic_2/rt_transition/rpx_lpx.ma". (* Basic_2A1: uses: lpx_cpx_frees_trans *) lemma lpx_cpx_conf_fsge (G): - ∀L0,T0,T1. ❪G,L0❫ ⊢ T0 ⬈ T1 → - ∀L2. ❪G,L0❫ ⊢ ⬈ L2 → ❪L2,T1❫ ⊆ ❪L0,T0❫. + ∀L0,T0,T1. ❨G,L0❩ ⊢ T0 ⬈ T1 → + ∀L2. ❨G,L0❩ ⊢ ⬈ L2 → ❨L2,T1❩ ⊆ ❨L0,T0❩. /3 width=4 by rpx_cpx_conf_fsge, lpx_rpx/ qed-. (* Basic_2A1: uses: lpx_frees_trans *) lemma lpx_fsge_comp (G): - ∀L0,L2,T0. ❪G,L0❫ ⊢ ⬈ L2 → ❪L2,T0❫ ⊆ ❪L0,T0❫. + ∀L0,L2,T0. ❨G,L0❩ ⊢ ⬈ L2 → ❨L2,T0❩ ⊆ ❨L0,T0❩. /2 width=4 by lpx_cpx_conf_fsge/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_length.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_length.ma index aae2d8972..c58780879 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_length.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_length.ma @@ -20,5 +20,5 @@ include "basic_2/rt_transition/lpx.ma". (* Forward lemmas with length for local environments ************************) lemma lpx_fwd_length (G): - ∀L1,L2. ❪G,L1❫ ⊢ ⬈ L2 → |L1| = |L2|. + ∀L1,L2. ❨G,L1❩ ⊢ ⬈ L2 → |L1| = |L2|. /2 width=2 by lex_fwd_length/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_reqg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_reqg.ma index 2b9dbd29c..7dbb2b0d5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_reqg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_reqg.ma @@ -20,14 +20,14 @@ include "basic_2/rt_transition/rpx_lpx.ma". (**) (* one dependence *) lemma reqg_lpx_trans_rpx (S) (G) (L) (T:term): reflexive … S → symmetric … S → - ∀L1. L1 ≛[S,T] L → ∀L2. ❪G,L❫ ⊢ ⬈ L2 → ❪G,L1❫ ⊢ ⬈[T] L2. + ∀L1. L1 ≛[S,T] L → ∀L2. ❨G,L❩ ⊢ ⬈ L2 → ❨G,L1❩ ⊢ ⬈[T] L2. /3 width=6 by lpx_rpx, reqg_rpx_trans/ qed. (* Basic_2A1: uses: lleq_lpx_trans *) lemma reqg_lpx_trans (S) (G) (T:term): reflexive … S → symmetric … S → - ∀L2,K2. ❪G,L2❫ ⊢ ⬈ K2 → ∀L1. L1 ≛[S,T] L2 → - ∃∃K1. ❪G,L1❫ ⊢ ⬈ K1 & K1 ≛[S,T] K2. + ∀L2,K2. ❨G,L2❩ ⊢ ⬈ K2 → ∀L1. L1 ≛[S,T] L2 → + ∃∃K1. ❨G,L1❩ ⊢ ⬈ K1 & K1 ≛[S,T] K2. #S #G #T #H1S #H2S #L2 #K2 #HLK2 #L1 #HL12 lapply (lpx_rpx … T … HLK2) -HLK2 #HLK2 lapply (reqg_rpx_trans … HL12 … HLK2) -L2 // #H @@ -39,8 +39,8 @@ qed-. lemma rpx_inv_reqg_lpx (S) (G) (T): reflexive … S → - ∀L1,L2. ❪G,L1❫ ⊢ ⬈[T] L2 → - ∃∃L. L1 ≛[S,T] L & ❪G,L❫ ⊢ ⬈ L2. + ∀L1,L2. ❨G,L1❩ ⊢ ⬈[T] L2 → + ∃∃L. L1 ≛[S,T] L & ❨G,L❩ ⊢ ⬈ L2. #S #G #T #HS #L1 #L2 #H elim (rpx_inv_req_lpx … H) -H #L #HL1 #HL2 /3 width=3 by req_fwd_reqg, ex2_intro/ @@ -50,8 +50,8 @@ qed-. lemma rpx_fwd_lpx_reqg (S) (G) (T): reflexive … S → - ∀L1,L2. ❪G,L1❫ ⊢ ⬈[T] L2 → - ∃∃L. ❪G,L1❫ ⊢ ⬈ L & L ≛[S,T] L2. + ∀L1,L2. ❨G,L1❩ ⊢ ⬈[T] L2 → + ∃∃L. ❨G,L1❩ ⊢ ⬈ L & L ≛[S,T] L2. #S #G #T #HS #L1 #L2 #H elim (rpx_fwd_lpx_req … H) -H #L #HL1 #HL2 /3 width=3 by req_fwd_reqg, ex2_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx.ma index c12780161..a519a2415 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx.ma @@ -28,124 +28,124 @@ interpretation (* Basic properties ***********************************************************) lemma rpx_atom (G): - ∀I. ❪G,⋆❫ ⊢ ⬈[⓪[I]] ⋆. + ∀I. ❨G,⋆❩ ⊢ ⬈[⓪[I]] ⋆. /2 width=1 by rex_atom/ qed. lemma rpx_sort (G): ∀I1,I2,L1,L2,s. - ❪G,L1❫ ⊢ ⬈[⋆s] L2 → ❪G,L1.ⓘ[I1]❫ ⊢ ⬈[⋆s] L2.ⓘ[I2]. + ❨G,L1❩ ⊢ ⬈[⋆s] L2 → ❨G,L1.ⓘ[I1]❩ ⊢ ⬈[⋆s] L2.ⓘ[I2]. /2 width=1 by rex_sort/ qed. lemma rpx_pair (G): ∀I,L1,L2,V1,V2. - ❪G,L1❫ ⊢ ⬈[V1] L2 → ❪G,L1❫ ⊢ V1 ⬈ V2 → ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈[#0] L2.ⓑ[I]V2. + ❨G,L1❩ ⊢ ⬈[V1] L2 → ❨G,L1❩ ⊢ V1 ⬈ V2 → ❨G,L1.ⓑ[I]V1❩ ⊢ ⬈[#0] L2.ⓑ[I]V2. /2 width=1 by rex_pair/ qed. lemma rpx_lref (G): ∀I1,I2,L1,L2,i. - ❪G,L1❫ ⊢ ⬈[#i] L2 → ❪G,L1.ⓘ[I1]❫ ⊢ ⬈[#↑i] L2.ⓘ[I2]. + ❨G,L1❩ ⊢ ⬈[#i] L2 → ❨G,L1.ⓘ[I1]❩ ⊢ ⬈[#↑i] L2.ⓘ[I2]. /2 width=1 by rex_lref/ qed. lemma rpx_gref (G): ∀I1,I2,L1,L2,l. - ❪G,L1❫ ⊢ ⬈[§l] L2 → ❪G,L1.ⓘ[I1]❫ ⊢ ⬈[§l] L2.ⓘ[I2]. + ❨G,L1❩ ⊢ ⬈[§l] L2 → ❨G,L1.ⓘ[I1]❩ ⊢ ⬈[§l] L2.ⓘ[I2]. /2 width=1 by rex_gref/ qed. lemma rpx_bind_repl_dx (G): - ∀I,I1,L1,L2,T. ❪G,L1.ⓘ[I]❫ ⊢ ⬈[T] L2.ⓘ[I1] → - ∀I2. ❪G,L1❫ ⊢ I ⬈ I2 → ❪G,L1.ⓘ[I]❫ ⊢ ⬈[T] L2.ⓘ[I2]. + ∀I,I1,L1,L2,T. ❨G,L1.ⓘ[I]❩ ⊢ ⬈[T] L2.ⓘ[I1] → + ∀I2. ❨G,L1❩ ⊢ I ⬈ I2 → ❨G,L1.ⓘ[I]❩ ⊢ ⬈[T] L2.ⓘ[I2]. /2 width=2 by rex_bind_repl_dx/ qed-. (* Basic inversion lemmas ***************************************************) lemma rpx_inv_atom_sn (G): - ∀Y2,T. ❪G,⋆❫ ⊢ ⬈[T] Y2 → Y2 = ⋆. + ∀Y2,T. ❨G,⋆❩ ⊢ ⬈[T] Y2 → Y2 = ⋆. /2 width=3 by rex_inv_atom_sn/ qed-. lemma rpx_inv_atom_dx (G): - ∀Y1,T. ❪G,Y1❫ ⊢ ⬈[T] ⋆ → Y1 = ⋆. + ∀Y1,T. ❨G,Y1❩ ⊢ ⬈[T] ⋆ → Y1 = ⋆. /2 width=3 by rex_inv_atom_dx/ qed-. lemma rpx_inv_sort (G): - ∀Y1,Y2,s. ❪G,Y1❫ ⊢ ⬈[⋆s] Y2 → + ∀Y1,Y2,s. ❨G,Y1❩ ⊢ ⬈[⋆s] Y2 → ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ - | ∃∃I1,I2,L1,L2. ❪G,L1❫ ⊢ ⬈[⋆s] L2 & Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2]. + | ∃∃I1,I2,L1,L2. ❨G,L1❩ ⊢ ⬈[⋆s] L2 & Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2]. /2 width=1 by rex_inv_sort/ qed-. lemma rpx_inv_lref (G): - ∀Y1,Y2,i. ❪G,Y1❫ ⊢ ⬈[#↑i] Y2 → + ∀Y1,Y2,i. ❨G,Y1❩ ⊢ ⬈[#↑i] Y2 → ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ - | ∃∃I1,I2,L1,L2. ❪G,L1❫ ⊢ ⬈[#i] L2 & Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2]. + | ∃∃I1,I2,L1,L2. ❨G,L1❩ ⊢ ⬈[#i] L2 & Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2]. /2 width=1 by rex_inv_lref/ qed-. lemma rpx_inv_gref (G): - ∀Y1,Y2,l. ❪G,Y1❫ ⊢ ⬈[§l] Y2 → + ∀Y1,Y2,l. ❨G,Y1❩ ⊢ ⬈[§l] Y2 → ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ - | ∃∃I1,I2,L1,L2. ❪G,L1❫ ⊢ ⬈[§l] L2 & Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2]. + | ∃∃I1,I2,L1,L2. ❨G,L1❩ ⊢ ⬈[§l] L2 & Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2]. /2 width=1 by rex_inv_gref/ qed-. lemma rpx_inv_bind (G): - ∀p,I,L1,L2,V,T. ❪G,L1❫ ⊢ ⬈[ⓑ[p,I]V.T] L2 → - ∧∧ ❪G,L1❫ ⊢ ⬈[V] L2 & ❪G,L1.ⓑ[I]V❫ ⊢ ⬈[T] L2.ⓑ[I]V. + ∀p,I,L1,L2,V,T. ❨G,L1❩ ⊢ ⬈[ⓑ[p,I]V.T] L2 → + ∧∧ ❨G,L1❩ ⊢ ⬈[V] L2 & ❨G,L1.ⓑ[I]V❩ ⊢ ⬈[T] L2.ⓑ[I]V. /2 width=2 by rex_inv_bind/ qed-. lemma rpx_inv_flat (G): - ∀I,L1,L2,V,T. ❪G,L1❫ ⊢ ⬈[ⓕ[I]V.T] L2 → - ∧∧ ❪G,L1❫ ⊢ ⬈[V] L2 & ❪G,L1❫ ⊢ ⬈[T] L2. + ∀I,L1,L2,V,T. ❨G,L1❩ ⊢ ⬈[ⓕ[I]V.T] L2 → + ∧∧ ❨G,L1❩ ⊢ ⬈[V] L2 & ❨G,L1❩ ⊢ ⬈[T] L2. /2 width=2 by rex_inv_flat/ qed-. (* Advanced inversion lemmas ************************************************) lemma rpx_inv_sort_bind_sn (G): - ∀I1,Y2,L1,s. ❪G,L1.ⓘ[I1]❫ ⊢ ⬈[⋆s] Y2 → - ∃∃I2,L2. ❪G,L1❫ ⊢ ⬈[⋆s] L2 & Y2 = L2.ⓘ[I2]. + ∀I1,Y2,L1,s. ❨G,L1.ⓘ[I1]❩ ⊢ ⬈[⋆s] Y2 → + ∃∃I2,L2. ❨G,L1❩ ⊢ ⬈[⋆s] L2 & Y2 = L2.ⓘ[I2]. /2 width=2 by rex_inv_sort_bind_sn/ qed-. lemma rpx_inv_sort_bind_dx (G): - ∀I2,Y1,L2,s. ❪G,Y1❫ ⊢ ⬈[⋆s] L2.ⓘ[I2] → - ∃∃I1,L1. ❪G,L1❫ ⊢ ⬈[⋆s] L2 & Y1 = L1.ⓘ[I1]. + ∀I2,Y1,L2,s. ❨G,Y1❩ ⊢ ⬈[⋆s] L2.ⓘ[I2] → + ∃∃I1,L1. ❨G,L1❩ ⊢ ⬈[⋆s] L2 & Y1 = L1.ⓘ[I1]. /2 width=2 by rex_inv_sort_bind_dx/ qed-. lemma rpx_inv_zero_pair_sn (G): - ∀I,Y2,L1,V1. ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈[#0] Y2 → - ∃∃L2,V2. ❪G,L1❫ ⊢ ⬈[V1] L2 & ❪G,L1❫ ⊢ V1 ⬈ V2 & Y2 = L2.ⓑ[I]V2. + ∀I,Y2,L1,V1. ❨G,L1.ⓑ[I]V1❩ ⊢ ⬈[#0] Y2 → + ∃∃L2,V2. ❨G,L1❩ ⊢ ⬈[V1] L2 & ❨G,L1❩ ⊢ V1 ⬈ V2 & Y2 = L2.ⓑ[I]V2. /2 width=1 by rex_inv_zero_pair_sn/ qed-. lemma rpx_inv_zero_pair_dx (G): - ∀I,Y1,L2,V2. ❪G,Y1❫ ⊢ ⬈[#0] L2.ⓑ[I]V2 → - ∃∃L1,V1. ❪G,L1❫ ⊢ ⬈[V1] L2 & ❪G,L1❫ ⊢ V1 ⬈ V2 & Y1 = L1.ⓑ[I]V1. + ∀I,Y1,L2,V2. ❨G,Y1❩ ⊢ ⬈[#0] L2.ⓑ[I]V2 → + ∃∃L1,V1. ❨G,L1❩ ⊢ ⬈[V1] L2 & ❨G,L1❩ ⊢ V1 ⬈ V2 & Y1 = L1.ⓑ[I]V1. /2 width=1 by rex_inv_zero_pair_dx/ qed-. lemma rpx_inv_lref_bind_sn (G): - ∀I1,Y2,L1,i. ❪G,L1.ⓘ[I1]❫ ⊢ ⬈[#↑i] Y2 → - ∃∃I2,L2. ❪G,L1❫ ⊢ ⬈[#i] L2 & Y2 = L2.ⓘ[I2]. + ∀I1,Y2,L1,i. ❨G,L1.ⓘ[I1]❩ ⊢ ⬈[#↑i] Y2 → + ∃∃I2,L2. ❨G,L1❩ ⊢ ⬈[#i] L2 & Y2 = L2.ⓘ[I2]. /2 width=2 by rex_inv_lref_bind_sn/ qed-. lemma rpx_inv_lref_bind_dx (G): - ∀I2,Y1,L2,i. ❪G,Y1❫ ⊢ ⬈[#↑i] L2.ⓘ[I2] → - ∃∃I1,L1. ❪G,L1❫ ⊢ ⬈[#i] L2 & Y1 = L1.ⓘ[I1]. + ∀I2,Y1,L2,i. ❨G,Y1❩ ⊢ ⬈[#↑i] L2.ⓘ[I2] → + ∃∃I1,L1. ❨G,L1❩ ⊢ ⬈[#i] L2 & Y1 = L1.ⓘ[I1]. /2 width=2 by rex_inv_lref_bind_dx/ qed-. lemma rpx_inv_gref_bind_sn (G): - ∀I1,Y2,L1,l. ❪G,L1.ⓘ[I1]❫ ⊢ ⬈[§l] Y2 → - ∃∃I2,L2. ❪G,L1❫ ⊢ ⬈[§l] L2 & Y2 = L2.ⓘ[I2]. + ∀I1,Y2,L1,l. ❨G,L1.ⓘ[I1]❩ ⊢ ⬈[§l] Y2 → + ∃∃I2,L2. ❨G,L1❩ ⊢ ⬈[§l] L2 & Y2 = L2.ⓘ[I2]. /2 width=2 by rex_inv_gref_bind_sn/ qed-. lemma rpx_inv_gref_bind_dx (G): - ∀I2,Y1,L2,l. ❪G,Y1❫ ⊢ ⬈[§l] L2.ⓘ[I2] → - ∃∃I1,L1. ❪G,L1❫ ⊢ ⬈[§l] L2 & Y1 = L1.ⓘ[I1]. + ∀I2,Y1,L2,l. ❨G,Y1❩ ⊢ ⬈[§l] L2.ⓘ[I2] → + ∃∃I1,L1. ❨G,L1❩ ⊢ ⬈[§l] L2 & Y1 = L1.ⓘ[I1]. /2 width=2 by rex_inv_gref_bind_dx/ qed-. (* Basic forward lemmas *****************************************************) lemma rpx_fwd_pair_sn (G): - ∀I,L1,L2,V,T. ❪G,L1❫ ⊢ ⬈[②[I]V.T] L2 → ❪G,L1❫ ⊢ ⬈[V] L2. + ∀I,L1,L2,V,T. ❨G,L1❩ ⊢ ⬈[②[I]V.T] L2 → ❨G,L1❩ ⊢ ⬈[V] L2. /2 width=3 by rex_fwd_pair_sn/ qed-. lemma rpx_fwd_bind_dx (G): - ∀p,I,L1,L2,V,T. ❪G,L1❫ ⊢ ⬈[ⓑ[p,I]V.T] L2 → ❪G,L1.ⓑ[I]V❫ ⊢ ⬈[T] L2.ⓑ[I]V. + ∀p,I,L1,L2,V,T. ❨G,L1❩ ⊢ ⬈[ⓑ[p,I]V.T] L2 → ❨G,L1.ⓑ[I]V❩ ⊢ ⬈[T] L2.ⓑ[I]V. /2 width=2 by rex_fwd_bind_dx/ qed-. lemma rpx_fwd_flat_dx (G): - ∀I,L1,L2,V,T. ❪G,L1❫ ⊢ ⬈[ⓕ[I]V.T] L2 → ❪G,L1❫ ⊢ ⬈[T] L2. + ∀I,L1,L2,V,T. ❨G,L1❩ ⊢ ⬈[ⓕ[I]V.T] L2 → ❨G,L1❩ ⊢ ⬈[T] L2. /2 width=3 by rex_fwd_flat_dx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_drops.ma index 5e37a7213..7b968540f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_drops.ma @@ -32,7 +32,7 @@ lemma rpx_inv_lifts_dx (G): f_dropable_dx (cpx G). /2 width=5 by rex_dropable_dx/ qed-. lemma rpx_inv_lifts_bi (G): - ∀L1,L2,U. ❪G,L1❫ ⊢ ⬈[U] L2 → ∀b,f. 𝐔❪f❫ → + ∀L1,L2,U. ❨G,L1❩ ⊢ ⬈[U] L2 → ∀b,f. 𝐔❨f❩ → ∀K1,K2. ⇩*[b,f] L1 ≘ K1 → ⇩*[b,f] L2 ≘ K2 → - ∀T. ⇧*[f]T ≘ U → ❪G,K1❫ ⊢ ⬈[T] K2. + ∀T. ⇧*[f]T ≘ U → ❨G,K1❩ ⊢ ⬈[T] K2. /2 width=10 by rex_inv_lifts_bi/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fqup.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fqup.ma index e98884c8b..9ef86a2c9 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fqup.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fqup.ma @@ -24,19 +24,19 @@ lemma rpx_refl (G): /2 width=1 by rex_refl/ qed. lemma rpx_pair_refl (G): - ∀L,V1,V2. ❪G,L❫ ⊢ V1 ⬈ V2 → - ∀I,T. ❪G,L.ⓑ[I]V1❫ ⊢ ⬈[T] L.ⓑ[I]V2. + ∀L,V1,V2. ❨G,L❩ ⊢ V1 ⬈ V2 → + ∀I,T. ❨G,L.ⓑ[I]V1❩ ⊢ ⬈[T] L.ⓑ[I]V2. /2 width=1 by rex_pair_refl/ qed. (* Advanced inversion lemmas ************************************************) lemma rpx_inv_bind_void (G): - ∀p,I,L1,L2,V,T. ❪G,L1❫ ⊢ ⬈[ⓑ[p,I]V.T] L2 → - ∧∧ ❪G,L1❫ ⊢ ⬈[V] L2 & ❪G,L1.ⓧ❫ ⊢ ⬈[T] L2.ⓧ. + ∀p,I,L1,L2,V,T. ❨G,L1❩ ⊢ ⬈[ⓑ[p,I]V.T] L2 → + ∧∧ ❨G,L1❩ ⊢ ⬈[V] L2 & ❨G,L1.ⓧ❩ ⊢ ⬈[T] L2.ⓧ. /2 width=3 by rex_inv_bind_void/ qed-. (* Advanced forward lemmas **************************************************) lemma rpx_fwd_bind_dx_void (G): - ∀p,I,L1,L2,V,T. ❪G,L1❫ ⊢ ⬈[ⓑ[p,I]V.T] L2 → ❪G,L1.ⓧ❫ ⊢ ⬈[T] L2.ⓧ. + ∀p,I,L1,L2,V,T. ❨G,L1❩ ⊢ ⬈[ⓑ[p,I]V.T] L2 → ❨G,L1.ⓧ❩ ⊢ ⬈[T] L2.ⓧ. /2 width=4 by rex_fwd_bind_dx_void/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fsle.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fsle.ma index d7e5e89ea..5eed0ea7a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fsle.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fsle.ma @@ -22,12 +22,12 @@ include "basic_2/rt_transition/rpx_fqup.ma". (* Forward lemmas with free variables inclusion for restricted closures *****) -(* Note: "❪L2, T1❫ ⊆ ❪L2, T0❫" does not hold *) +(* Note: "❨L2, T1❩ ⊆ ❨L2, T0❩" does not hold *) (* Note: Take L0 = K0.ⓓ(ⓝW.V), L2 = K0.ⓓW, T0 = #0, T1 = ⇧[1]V *) (* Note: This invalidates rpxs_cpx_conf: "∀G. s_r_confluent1 … (cpx G) (rpxs G)" *) lemma rpx_cpx_conf_fsge (G): - ∀L0,T0,T1. ❪G,L0❫ ⊢ T0 ⬈ T1 → - ∀L2. ❪G,L0❫ ⊢⬈[T0] L2 → ❪L2,T1❫ ⊆ ❪L0,T0❫. + ∀L0,T0,T1. ❨G,L0❩ ⊢ T0 ⬈ T1 → + ∀L2. ❨G,L0❩ ⊢⬈[T0] L2 → ❨L2,T1❩ ⊆ ❨L0,T0❩. #G0 #L0 #T0 @(fqup_wf_ind_eq (Ⓣ) … G0 L0 T0) -G0 -L0 -T0 #G #L #T #IH #G0 #L0 * * [ #s0 #HG #HL #HT #X #HX #Y #HY destruct -IH @@ -135,6 +135,6 @@ lemma rpx_cpx_conf_sn (G): s_r_confluent1 … (cpx G) (rpx G). /2 width=5 by cpx_rex_conf_sn/ qed-. lemma rpx_cpx_conf_fsge_dx (G): - ∀L0,T0,T1. ❪G,L0❫ ⊢ T0 ⬈ T1 → - ∀L2. ❪G,L0❫ ⊢⬈[T0] L2 → ❪L2,T1❫ ⊆ ❪L0,T1❫. + ∀L0,T0,T1. ❨G,L0❩ ⊢ T0 ⬈ T1 → + ∀L2. ❨G,L0❩ ⊢⬈[T0] L2 → ❨L2,T1❩ ⊆ ❨L0,T1❩. /3 width=5 by rpx_cpx_conf_sn, rpx_fsge_comp/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_length.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_length.ma index 58034f157..565a2498d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_length.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_length.ma @@ -20,14 +20,14 @@ include "basic_2/rt_transition/rpx.ma". (* Forward lemmas with length for local environments ************************) lemma rpx_fwd_length (G): - ∀L1,L2,T. ❪G,L1❫ ⊢ ⬈[T] L2 → |L1| = |L2|. + ∀L1,L2,T. ❨G,L1❩ ⊢ ⬈[T] L2 → |L1| = |L2|. /2 width=3 by rex_fwd_length/ qed-. (* Inversion lemmas with length for local environments **********************) lemma rpx_inv_zero_length (G): - ∀Y1,Y2. ❪G,Y1❫ ⊢ ⬈[#0] Y2 → + ∀Y1,Y2. ❨G,Y1❩ ⊢ ⬈[#0] Y2 → ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ - | ∃∃I,L1,L2,V1,V2. ❪G,L1❫ ⊢ ⬈[V1] L2 & ❪G,L1❫ ⊢ V1 ⬈ V2 & Y1 = L1.ⓑ[I]V1 & Y2 = L2.ⓑ[I]V2 + | ∃∃I,L1,L2,V1,V2. ❨G,L1❩ ⊢ ⬈[V1] L2 & ❨G,L1❩ ⊢ V1 ⬈ V2 & Y1 = L1.ⓑ[I]V1 & Y2 = L2.ⓑ[I]V2 | ∃∃I,L1,L2. |L1| = |L2| & Y1 = L1.ⓤ[I] & Y2 = L2.ⓤ[I]. /2 width=1 by rex_inv_zero_length/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_lpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_lpx.ma index 845fc6d27..54202be4a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_lpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_lpx.ma @@ -21,25 +21,25 @@ include "basic_2/rt_transition/lpx.ma". (* Properties with syntactic equivalence for referred local environments ****) lemma req_rpx (G) (T): - ∀L1,L2. L1 ≡[T] L2 → ❪G,L1❫ ⊢ ⬈[T] L2. + ∀L1,L2. L1 ≡[T] L2 → ❨G,L1❩ ⊢ ⬈[T] L2. /2 width=1 by req_fwd_rex/ qed. (* Properties with extended rt-transition for full local envs ***************) lemma lpx_rpx (G) (T): - ∀L1,L2. ❪G,L1❫ ⊢ ⬈ L2 → ❪G,L1❫ ⊢ ⬈[T] L2. + ∀L1,L2. ❨G,L1❩ ⊢ ⬈ L2 → ❨G,L1❩ ⊢ ⬈[T] L2. /2 width=1 by rex_lex/ qed. (* Inversion lemmas with extended rt-transition for full local envs *********) lemma rpx_inv_req_lpx (G) (T): - ∀L1,L2. ❪G,L1❫ ⊢ ⬈[T] L2 → - ∃∃L. L1 ≡[T] L & ❪G,L❫ ⊢ ⬈ L2. + ∀L1,L2. ❨G,L1❩ ⊢ ⬈[T] L2 → + ∃∃L. L1 ≡[T] L & ❨G,L❩ ⊢ ⬈ L2. /4 width=13 by cpx_reqg_conf, rex_inv_req_lex, rex_conf1_next/ qed-. (* Forward lemmas with extended rt-transition for full local envs ***********) lemma rpx_fwd_lpx_req (G) (T): - ∀L1,L2. ❪G,L1❫ ⊢ ⬈[T] L2 → - ∃∃L. ❪G,L1❫ ⊢ ⬈ L & L ≡[T] L2. + ∀L1,L2. ❨G,L1❩ ⊢ ⬈[T] L2 → + ∃∃L. ❨G,L1❩ ⊢ ⬈ L & L ≡[T] L2. /3 width=3 by rpx_fsge_comp, rex_fwd_lex_req/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_reqg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_reqg.ma index 585ecef04..b7bf1cb0d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_reqg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_reqg.ma @@ -23,26 +23,26 @@ include "basic_2/rt_transition/rpx_fsle.ma". lemma rpx_pair_sn_split (S) (G): reflexive … S → - ∀L1,L2,V. ❪G,L1❫ ⊢ ⬈[V] L2 → ∀I,T. - ∃∃L. ❪G,L1❫ ⊢ ⬈[②[I]V.T] L & L ≛[S,V] L2. + ∀L1,L2,V. ❨G,L1❩ ⊢ ⬈[V] L2 → ∀I,T. + ∃∃L. ❨G,L1❩ ⊢ ⬈[②[I]V.T] L & L ≛[S,V] L2. /3 width=5 by rpx_fsge_comp, rex_pair_sn_split, teqg_refl/ qed-. lemma rpx_flat_dx_split (S) (G): reflexive … S → - ∀L1,L2,T. ❪G,L1❫ ⊢ ⬈[T] L2 → ∀I,V. - ∃∃L. ❪G,L1❫ ⊢ ⬈[ⓕ[I]V.T] L & L ≛[S,T] L2. + ∀L1,L2,T. ❨G,L1❩ ⊢ ⬈[T] L2 → ∀I,V. + ∃∃L. ❨G,L1❩ ⊢ ⬈[ⓕ[I]V.T] L & L ≛[S,T] L2. /3 width=5 by rpx_fsge_comp, rex_flat_dx_split, teqg_refl/ qed-. lemma rpx_bind_dx_split (S) (G): reflexive … S → - ∀I,L1,L2,V1,T. ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈[T] L2 → ∀p. - ∃∃L,V. ❪G,L1❫ ⊢ ⬈[ⓑ[p,I]V1.T] L & L.ⓑ[I]V ≛[S,T] L2 & ❪G,L1❫ ⊢ V1 ⬈ V. + ∀I,L1,L2,V1,T. ❨G,L1.ⓑ[I]V1❩ ⊢ ⬈[T] L2 → ∀p. + ∃∃L,V. ❨G,L1❩ ⊢ ⬈[ⓑ[p,I]V1.T] L & L.ⓑ[I]V ≛[S,T] L2 & ❨G,L1❩ ⊢ V1 ⬈ V. /3 width=5 by rpx_fsge_comp, rex_bind_dx_split, teqg_refl/ qed-. lemma rpx_bind_dx_split_void (S) (G): reflexive … S → - ∀K1,L2,T. ❪G,K1.ⓧ❫ ⊢ ⬈[T] L2 → ∀p,I,V. - ∃∃K2. ❪G,K1❫ ⊢ ⬈[ⓑ[p,I]V.T] K2 & K2.ⓧ ≛[S,T] L2. + ∀K1,L2,T. ❨G,K1.ⓧ❩ ⊢ ⬈[T] L2 → ∀p,I,V. + ∃∃K2. ❨G,K1❩ ⊢ ⬈[ⓑ[p,I]V.T] K2 & K2.ⓧ ≛[S,T] L2. /3 width=5 by rpx_fsge_comp, rex_bind_dx_split_void, teqg_refl/ qed-. lemma rpx_teqg_conf_sn (S) (G): @@ -52,13 +52,13 @@ lemma rpx_teqg_conf_sn (S) (G): lemma rpx_teqg_div (S) (G): reflexive … S → symmetric … S → - ∀T1,T2. T1 ≛[S] T2 → ∀L1,L2. ❪G,L1❫ ⊢ ⬈[T2] L2 → ❪G,L1❫ ⊢ ⬈[T1] L2. + ∀T1,T2. T1 ≛[S] T2 → ∀L1,L2. ❨G,L1❩ ⊢ ⬈[T2] L2 → ❨G,L1❩ ⊢ ⬈[T1] L2. /2 width=6 by teqg_rex_div/ qed-. lemma cpx_teqg_repl_reqg (S) (G) (L0) (T0): reflexive … S → - ∀T1. ❪G,L0❫ ⊢ T0 ⬈ T1 → ∀T2. T0 ≛[S] T2 → ∀T3. T1 ≛[S] T3 → - ∀L2. L0 ≛[S,T0] L2 → ❪G,L2❫ ⊢ T2 ⬈ T3. + ∀T1. ❨G,L0❩ ⊢ T0 ⬈ T1 → ∀T2. T0 ≛[S] T2 → ∀T3. T1 ≛[S] T3 → + ∀L2. L0 ≛[S,T0] L2 → ❨G,L2❩ ⊢ T2 ⬈ T3. #S #G #L0 #T0 #HS #T1 #H @(cpx_ind … H) -G -L0 -T0 -T1 [ * #x0 #G #L0 #X2 #HX2 #X3 #HX3 #L2 #_ [ elim (teqg_inv_sort1 … HX2) -HX2 #x2 #Hx02 #H destruct @@ -134,18 +134,18 @@ qed-. lemma cpx_teqg_conf (S) (G) (L): reflexive … S → - ∀T0:term. ∀T1. ❪G,L❫ ⊢ T0 ⬈ T1 → ∀T2. T0 ≛[S] T2 → ❪G,L❫ ⊢ T2 ⬈ T1. + ∀T0:term. ∀T1. ❨G,L❩ ⊢ T0 ⬈ T1 → ∀T2. T0 ≛[S] T2 → ❨G,L❩ ⊢ T2 ⬈ T1. /3 width=9 by cpx_teqg_repl_reqg, reqg_refl, teqg_refl/ qed-. lemma teqg_cpx_trans (S) (G) (L): reflexive … S → symmetric … S → - ∀T2. ∀T0:term. T2 ≛[S] T0 → ∀T1. ❪G,L❫ ⊢ T0 ⬈ T1 → ❪G,L❫ ⊢ T2 ⬈ T1. + ∀T2. ∀T0:term. T2 ≛[S] T0 → ∀T1. ❨G,L❩ ⊢ T0 ⬈ T1 → ❨G,L❩ ⊢ T2 ⬈ T1. /3 width=6 by cpx_teqg_conf, teqg_sym/ qed-. lemma teqg_cpx (S) (G) (L): reflexive … S → symmetric … S → - ∀T1,T2:term. T1 ≛[S] T2 → ❪G,L❫ ⊢ T1 ⬈ T2. + ∀T1,T2:term. T1 ≛[S] T2 → ❨G,L❩ ⊢ T1 ⬈ T2. /2 width=6 by teqg_cpx_trans/ qed. (* Basic_2A1: uses: cpx_lleq_conf *) @@ -157,7 +157,7 @@ lemma cpx_reqg_conf (S) (G): (* Basic_2A1: uses: lleq_cpx_trans *) lemma reqg_cpx_trans (S) (G): reflexive … S → symmetric … S → - ∀L2,L0,T0. L2 ≛[S,T0] L0 → ∀T1. ❪G,L0❫ ⊢ T0 ⬈ T1 → ❪G,L2❫ ⊢ T0 ⬈ T1. + ∀L2,L0,T0. L2 ≛[S,T0] L0 → ∀T1. ❨G,L0❩ ⊢ T0 ⬈ T1 → ❨G,L2❩ ⊢ T0 ⬈ T1. /3 width=7 by cpx_reqg_conf, reqg_sym/ qed-. @@ -168,10 +168,10 @@ lemma rpx_reqg_conf (S) (G) (T): lemma reqg_rpx_trans (S) (G) (T) (L): reflexive … S → symmetric … S → - ∀L1. L1 ≛[S,T] L → ∀L2. ❪G,L❫ ⊢ ⬈[T] L2 → ❪G,L1❫ ⊢ ⬈[T] L2. + ∀L1. L1 ≛[S,T] L → ∀L2. ❨G,L❩ ⊢ ⬈[T] L2 → ❨G,L1❩ ⊢ ⬈[T] L2. /3 width=7 by rpx_reqg_conf, reqg_sym/ qed-. lemma reqg_rpx (S) (G) (T): reflexive … S → symmetric … S → - ∀L1,L2. L1 ≛[S,T] L2 → ❪G,L1❫ ⊢ ⬈[T] L2. + ∀L1,L2. L1 ≛[S,T] L2 → ❨G,L1❩ ⊢ ⬈[T] L2. /2 width=6 by reqg_rpx_trans/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_reqx.ma index 912adfc51..28ecce574 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_reqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_reqx.ma @@ -20,35 +20,35 @@ include "basic_2/rt_transition/rpx_reqg.ma". (* Properties with sort-irrelevant equivalence for local environments *******) lemma rpx_pair_sn_split (G): - ∀L1,L2,V. ❪G,L1❫ ⊢ ⬈[V] L2 → ∀I,T. - ∃∃L. ❪G,L1❫ ⊢ ⬈[②[I]V.T] L & L ≛[V] L2. + ∀L1,L2,V. ❨G,L1❩ ⊢ ⬈[V] L2 → ∀I,T. + ∃∃L. ❨G,L1❩ ⊢ ⬈[②[I]V.T] L & L ≛[V] L2. /3 width=5 by rpx_fsge_comp, rex_pair_sn_split/ qed-. lemma rpx_flat_dx_split (G): - ∀L1,L2,T. ❪G,L1❫ ⊢ ⬈[T] L2 → ∀I,V. - ∃∃L. ❪G,L1❫ ⊢ ⬈[ⓕ[I]V.T] L & L ≛[T] L2. + ∀L1,L2,T. ❨G,L1❩ ⊢ ⬈[T] L2 → ∀I,V. + ∃∃L. ❨G,L1❩ ⊢ ⬈[ⓕ[I]V.T] L & L ≛[T] L2. /3 width=5 by rpx_fsge_comp, rex_flat_dx_split/ qed-. lemma rpx_bind_dx_split (G): - ∀I,L1,L2,V1,T. ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈[T] L2 → ∀p. - ∃∃L,V. ❪G,L1❫ ⊢ ⬈[ⓑ[p,I]V1.T] L & L.ⓑ[I]V ≛[T] L2 & ❪G,L1❫ ⊢ V1 ⬈ V. + ∀I,L1,L2,V1,T. ❨G,L1.ⓑ[I]V1❩ ⊢ ⬈[T] L2 → ∀p. + ∃∃L,V. ❨G,L1❩ ⊢ ⬈[ⓑ[p,I]V1.T] L & L.ⓑ[I]V ≛[T] L2 & ❨G,L1❩ ⊢ V1 ⬈ V. /3 width=5 by rpx_fsge_comp, rex_bind_dx_split/ qed-. lemma rpx_bind_dx_split_void (G): - ∀K1,L2,T. ❪G,K1.ⓧ❫ ⊢ ⬈[T] L2 → ∀p,I,V. - ∃∃K2. ❪G,K1❫ ⊢ ⬈[ⓑ[p,I]V.T] K2 & K2.ⓧ ≛[T] L2. + ∀K1,L2,T. ❨G,K1.ⓧ❩ ⊢ ⬈[T] L2 → ∀p,I,V. + ∃∃K2. ❨G,K1❩ ⊢ ⬈[ⓑ[p,I]V.T] K2 & K2.ⓧ ≛[T] L2. /3 width=5 by rpx_fsge_comp, rex_bind_dx_split_void/ qed-. lemma rpx_teqx_conf_sn (G): s_r_confluent1 … cdeq (rpx G). /2 width=5 by teqx_rex_conf_sn/ qed-. lemma rpx_teqx_div (G): - ∀T1,T2. T1 ≛ T2 → ∀L1,L2. ❪G,L1❫ ⊢ ⬈[T2] L2 → ❪G,L1❫ ⊢ ⬈[T1] L2. + ∀T1,T2. T1 ≛ T2 → ∀L1,L2. ❨G,L1❩ ⊢ ⬈[T2] L2 → ❨G,L1❩ ⊢ ⬈[T1] L2. /2 width=5 by teqx_rex_div/ qed-. lemma cpx_teqx_repl_reqx (G) (L0) (T0): - ∀T1. ❪G,L0❫ ⊢ T0 ⬈ T1 → ∀T2. T0 ≛ T2 → ∀T3. T1 ≛ T3 → - ∀L2. L0 ≛[T0] L2 → ❪G,L2❫ ⊢ T2 ⬈ T3. + ∀T1. ❨G,L0❩ ⊢ T0 ⬈ T1 → ∀T2. T0 ≛ T2 → ∀T3. T1 ≛ T3 → + ∀L2. L0 ≛[T0] L2 → ❨G,L2❩ ⊢ T2 ⬈ T3. #G #L0 #T0 #T1 #H @(cpx_ind … H) -G -L0 -T0 -T1 [ * #x0 #G #L0 #X2 #HX2 #X3 #HX3 #L2 #_ [ elim (teqx_inv_sort1 … HX2) -HX2 #x2 #H destruct @@ -123,25 +123,25 @@ lemma cpx_teqx_repl_reqx (G) (L0) (T0): qed-. lemma cpx_teqx_conf (G) (L): - ∀T0:term. ∀T1. ❪G,L❫ ⊢ T0 ⬈ T1 → ∀T2. T0 ≛ T2 → ❪G,L❫ ⊢ T2 ⬈ T1. + ∀T0:term. ∀T1. ❨G,L❩ ⊢ T0 ⬈ T1 → ∀T2. T0 ≛ T2 → ❨G,L❩ ⊢ T2 ⬈ T1. /2 width=7 by cpx_teqx_repl_reqx/ qed-. *) lemma teqx_cpx_trans (G) (L): - ∀T2. ∀T0:term. T2 ≅ T0 → ∀T1. ❪G,L❫ ⊢ T0 ⬈ T1 → ❪G,L❫ ⊢ T2 ⬈ T1. + ∀T2. ∀T0:term. T2 ≅ T0 → ∀T1. ❨G,L❩ ⊢ T0 ⬈ T1 → ❨G,L❩ ⊢ T2 ⬈ T1. /2 width=6 by teqg_cpx_trans/ qed-. (* lemma teqx_cpx (G) (L): - ∀T1,T2:term. T1 ≛ T2 → ❪G,L❫ ⊢ T1 ⬈ T2. + ∀T1,T2:term. T1 ≛ T2 → ❨G,L❩ ⊢ T1 ⬈ T2. /2 width=3 by teqx_cpx_trans/ qed. (* Basic_2A1: uses: cpx_lleq_conf *) lemma cpx_reqx_conf (G): - ∀L0,T0,T1. ❪G,L0❫ ⊢ T0 ⬈ T1 → ∀L2. L0 ≛[T0] L2 → ❪G,L2❫ ⊢ T0 ⬈ T1. + ∀L0,T0,T1. ❨G,L0❩ ⊢ T0 ⬈ T1 → ∀L2. L0 ≛[T0] L2 → ❨G,L2❩ ⊢ T0 ⬈ T1. /2 width=7 by cpx_teqx_repl_reqx/ qed-. (* Basic_2A1: uses: lleq_cpx_trans *) lemma reqx_cpx_trans (G): - ∀L2,L0,T0. L2 ≛[T0] L0 → ∀T1. ❪G,L0❫ ⊢ T0 ⬈ T1 → ❪G,L2❫ ⊢ T0 ⬈ T1. + ∀L2,L0,T0. L2 ≛[T0] L0 → ∀T1. ❨G,L0❩ ⊢ T0 ⬈ T1 → ❨G,L2❩ ⊢ T0 ⬈ T1. /3 width=3 by cpx_reqx_conf, reqx_sym/ qed-. @@ -150,10 +150,10 @@ lemma rpx_reqx_conf (G) (T): /3 width=7 by reqx_fsge_comp, cpx_teqx_repl_reqx, rex_conf1/ qed-. lemma reqx_rpx_trans (G) (T) (L): - ∀L1. L1 ≛[T] L → ∀L2. ❪G,L❫ ⊢ ⬈[T] L2 → ❪G,L1❫ ⊢ ⬈[T] L2. + ∀L1. L1 ≛[T] L → ∀L2. ❨G,L❩ ⊢ ⬈[T] L2 → ❨G,L1❩ ⊢ ⬈[T] L2. /3 width=3 by rpx_reqx_conf, reqx_sym/ qed-. lemma reqx_rpx (G) (T): - ∀L1,L2. L1 ≛[T] L2 → ❪G,L1❫ ⊢ ⬈[T] L2. + ∀L1,L2. L1 ≛[T] L2 → ❨G,L1❩ ⊢ ⬈[T] L2. /2 width=3 by reqx_rpx_trans/ qed. *) diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_rpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_rpx.ma index ea6d4cf94..1a8c4ef37 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_rpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_rpx.ma @@ -20,18 +20,18 @@ include "basic_2/rt_transition/rpx.ma". (* Main properties **********************************************************) theorem rpx_bind (G): - ∀L1,L2,V1. ❪G,L1❫ ⊢ ⬈[V1] L2 → - ∀I,V2,T. ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈[T] L2.ⓑ[I]V2 → - ∀p. ❪G,L1❫ ⊢ ⬈[ⓑ[p,I]V1.T] L2. + ∀L1,L2,V1. ❨G,L1❩ ⊢ ⬈[V1] L2 → + ∀I,V2,T. ❨G,L1.ⓑ[I]V1❩ ⊢ ⬈[T] L2.ⓑ[I]V2 → + ∀p. ❨G,L1❩ ⊢ ⬈[ⓑ[p,I]V1.T] L2. /2 width=2 by rex_bind/ qed. theorem rpx_flat (G): - ∀L1,L2,V. ❪G,L1❫ ⊢ ⬈[V] L2 → - ∀I,T. ❪G,L1❫ ⊢ ⬈[T] L2 → ❪G,L1❫ ⊢ ⬈[ⓕ[I]V.T] L2. + ∀L1,L2,V. ❨G,L1❩ ⊢ ⬈[V] L2 → + ∀I,T. ❨G,L1❩ ⊢ ⬈[T] L2 → ❨G,L1❩ ⊢ ⬈[ⓕ[I]V.T] L2. /2 width=1 by rex_flat/ qed. theorem rpx_bind_void (G): - ∀L1,L2,V. ❪G,L1❫ ⊢ ⬈[V] L2 → - ∀T. ❪G,L1.ⓧ❫ ⊢ ⬈[T] L2.ⓧ → - ∀p,I. ❪G,L1❫ ⊢ ⬈[ⓑ[p,I]V.T] L2. + ∀L1,L2,V. ❨G,L1❩ ⊢ ⬈[V] L2 → + ∀T. ❨G,L1.ⓧ❩ ⊢ ⬈[T] L2.ⓧ → + ∀p,I. ❨G,L1❩ ⊢ ⬈[ⓑ[p,I]V.T] L2. /2 width=1 by rex_bind_void/ 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 5df024fb6..121badca2 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 @@ -12,7 +12,7 @@ table { class "wine" [ { "iterated dynamic typing" * } { [ { "context-sensitive iterated native type assignment" * } { - [ [ "for terms" ] "ntas" + "( ❪?,?❫ ⊢ ? :*[?,?,?] ? )" "ntas_cpcs" + "ntas_nta" + "ntas_nta_ind" + " ntas_ntas" + "ntas_preserve" * ] + [ [ "for terms" ] "ntas" + "( ❨?,?❩ ⊢ ? :*[?,?,?] ? )" "ntas_cpcs" + "ntas_nta" + "ntas_nta_ind" + " ntas_ntas" + "ntas_preserve" * ] } ] } @@ -20,12 +20,12 @@ table { class "magenta" [ { "dynamic typing" * } { [ { "context-sensitive native type assignment" * } { - [ [ "for terms" ] "nta" + "( ❪?,?❫ ⊢ ? :[?,?] ? )" "nta_drops" + "nta_aaa" + "nta_fsb" + "nta_cpms" + "nta_cpcs" + "nta_preserve" + "nta_preserve_cpcs" + "nta_ind" + "nta_eval" * ] + [ [ "for terms" ] "nta" + "( ❨?,?❩ ⊢ ? :[?,?] ? )" "nta_drops" + "nta_aaa" + "nta_fsb" + "nta_cpms" + "nta_cpcs" + "nta_preserve" + "nta_preserve_cpcs" + "nta_ind" + "nta_eval" * ] } ] [ { "context-sensitive native validity" * } { [ [ "restricted refinement for lenvs" ] "lsubv ( ? ⊢ ? ⫃![?,?] ? )" "lsubv_drops" + "lsubv_lsubr" + "lsubv_lsuba" + "lsubv_cpms" + "lsubv_cpcs" + "lsubv_cnv" + "lsubv_lsubv" * ] - [ [ "for terms" ] "cnv" + "( ❪?,?❫ ⊢ ? ![?,?] )" "cnv_acle" + "cnv_drops" + "cnv_fqus" + "cnv_aaa" + "cnv_fsb" + "cnv_cpm_trans" + "cnv_cpm_conf" + "cnv_cpm_teqx" + "cnv_cpm_teqx_trans" + "cnv_cpm_teqx_conf" + "cnv_cpms_teqx" + "cnv_cpms_conf" + "cnv_cpms_teqx_conf" + "cnv_cpmre" + "cnv_cpmuwe" + "cnv_cpmuwe_cpmre" + "cnv_cpts" + "cnv_cpes" + "cnv_cpcs" + "cnv_preserve_sub" + "cnv_preserve" + "cnv_preserve_cpes" + "cnv_preserve_cpcs" + "cnv_eval" * ] + [ [ "for terms" ] "cnv" + "( ❨?,?❩ ⊢ ? ![?,?] )" "cnv_acle" + "cnv_drops" + "cnv_fqus" + "cnv_aaa" + "cnv_fsb" + "cnv_cpm_trans" + "cnv_cpm_conf" + "cnv_cpm_teqx" + "cnv_cpm_teqx_trans" + "cnv_cpm_teqx_conf" + "cnv_cpms_teqx" + "cnv_cpms_conf" + "cnv_cpms_teqx_conf" + "cnv_cpmre" + "cnv_cpmuwe" + "cnv_cpmuwe_cpmre" + "cnv_cpts" + "cnv_cpes" + "cnv_cpcs" + "cnv_preserve_sub" + "cnv_preserve" + "cnv_preserve_cpes" + "cnv_preserve_cpcs" + "cnv_eval" * ] } ] } @@ -33,11 +33,11 @@ table { class "prune" [ { "rt-equivalence" * } { [ { "context-sensitive parallel r-equivalence" * } { - [ [ "for terms" ] "cpcs ( ❪?,?❫ ⊢ ? ⬌*[?] ? )" "cpcs_drops" + "cpcs_lsubr" + "cpcs_aaa" + "cpcs_csx" + "cpcs_cprs" + "cpcs_lprs" + "cpcs_cpc" + "cpcs_cpcs" * ] + [ [ "for terms" ] "cpcs ( ❨?,?❩ ⊢ ? ⬌*[?] ? )" "cpcs_drops" + "cpcs_lsubr" + "cpcs_aaa" + "cpcs_csx" + "cpcs_cprs" + "cpcs_lprs" + "cpcs_cpc" + "cpcs_cpcs" * ] } ] [ { "t-bound context-sensitive parallel rt-equivalence" * } { - [ [ "for terms" ] "cpes ( ❪?,?❫ ⊢ ? ⬌*[?,?,?] ? )" "cpes_aaa" + "cpes_cpms" + "cpes_cpes" * ] + [ [ "for terms" ] "cpes ( ❨?,?❩ ⊢ ? ⬌*[?,?,?] ? )" "cpes_aaa" + "cpes_cpms" + "cpes_cpes" * ] } ] } @@ -46,14 +46,14 @@ table { [ { "rt-conversion" * } { (* [ { "context-sensitive parallel eta-conversion" * } { - [ [ "for lenvs on all entries" ] "lpce ( ❪?,?❫ ⊢ ⬌η[?] ? )" "lpce_drops" * ] - [ [ "for binders" ] "cpce_ext" + "( ❪?,?❫ ⊢ ? ⬌η[?] ? )" * ] - [ [ "for terms" ] "cpce" + "( ❪?,?❫ ⊢ ? ⬌η[?] ? )" "cpce_drops" * ] + [ [ "for lenvs on all entries" ] "lpce ( ❨?,?❩ ⊢ ⬌η[?] ? )" "lpce_drops" * ] + [ [ "for binders" ] "cpce_ext" + "( ❨?,?❩ ⊢ ? ⬌η[?] ? )" * ] + [ [ "for terms" ] "cpce" + "( ❨?,?❩ ⊢ ? ⬌η[?] ? )" "cpce_drops" * ] } ] *) [ { "context-sensitive parallel r-conversion" * } { - [ [ "for terms" ] "cpc" + "( ❪?,?❫ ⊢ ? ⬌[?] ? )" "cpc_cpc" * ] + [ [ "for terms" ] "cpc" + "( ❨?,?❩ ⊢ ? ⬌[?] ? )" "cpc_cpc" * ] } ] } @@ -61,37 +61,37 @@ table { class "sky" [ { "rt-computation" * } { [ { "context-sensitive parallel t-computation" * } { - [ [ "for terms" ] "cpts" + "( ❪?,?❫ ⊢ ? ⬆*[?,?] ? )" "cpts_drops" + "cpts_aaa" + "cpts_cpms" * ] + [ [ "for terms" ] "cpts" + "( ❨?,?❩ ⊢ ? ⬆*[?,?] ? )" "cpts_drops" + "cpts_aaa" + "cpts_cpms" * ] } ] [ { "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 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_teqw" + "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" * ] - [ [ "for terms" ] "cpms" + "( ❪?,?❫ ⊢ ? ➡*[?,?] ? )" "cpms_drops" + "cpms_lsubr" + "cpms_reqg" + "cpms_aaa" + "cpms_lpr" + "cpms_cpxs" + "cpms_fpbs" + "cpms_fpbg" + "cpms_cpms" * ] + [ [ "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" * ] + [ [ "for terms" ] "cpms" + "( ❨?,?❩ ⊢ ? ➡*[?,?] ? )" "cpms_drops" + "cpms_lsubr" + "cpms_reqg" + "cpms_aaa" + "cpms_lpr" + "cpms_cpxs" + "cpms_fpbs" + "cpms_fpbg" + "cpms_cpms" * ] } ] [ { "extended context-sensitive parallel rst-computation" * } { - [ [ "strongly normalizing for closures" ] "fsb" + "( ≥𝐒 ❪?,?,?❫ )" "fsb_feqg" + "fsb_aaa" + "fsb_csx" + "fsb_fpbg" * ] - [ [ "proper for closures" ] "fpbg" + "( ❪?,?,?❫ > ❪?,?,?❫ )" "fpbg_fqup" + "fpbg_fqus" + "fpbg_feqg" + "fpbg_cpm" + "fpbg_cpxs" + "fpbg_lpxs" + "fpbg_fpbs" + "fpbg_fpbg" * ] - [ [ "for closures" ] "fpbs" + "( ❪?,?,?❫ ≥ ❪?,?,?❫ )" "fpbs_fqup" + "fpbs_fqus" + "fpbs_feqg" + "fpbs_aaa" + "fpbs_cpx" + "fpbs_fpbc" + "fpbs_cpxs" + "fpbs_lpxs" + "fpbs_csx" + "fpbs_fpbs" * ] + [ [ "strongly normalizing for closures" ] "fsb" + "( ≥𝐒 ❨?,?,?❩ )" "fsb_feqg" + "fsb_aaa" + "fsb_csx" + "fsb_fpbg" * ] + [ [ "proper for closures" ] "fpbg" + "( ❨?,?,?❩ > ❨?,?,?❩ )" "fpbg_fqup" + "fpbg_fqus" + "fpbg_feqg" + "fpbg_cpm" + "fpbg_cpxs" + "fpbg_lpxs" + "fpbg_fpbs" + "fpbg_fpbg" * ] + [ [ "for closures" ] "fpbs" + "( ❨?,?,?❩ ≥ ❨?,?,?❩ )" "fpbs_fqup" + "fpbs_fqus" + "fpbs_feqg" + "fpbs_aaa" + "fpbs_cpx" + "fpbs_fpbc" + "fpbs_cpxs" + "fpbs_lpxs" + "fpbs_csx" + "fpbs_fpbs" * ] } ] [ { "extended context-sensitive parallel rt-computation" * } { [ [ "compatibility for lenvs" ] "jsx" + "( ? ⊢ ? ⊒ ? )" "jsx_drops" + "jsx_lsubr" + "jsx_csx" + "jsx_rsx" + "jsx_jsx" * ] [ [ "strongly normalizing for lenvs on referred entries" ] "rsx" + "( ? ⊢ ⬈*𝐒[?] ? )" "rsx_length" + "rsx_drops" + "rsx_fqup" + "rsx_cpxs" + "rsx_csx" + "rsx_rsx" * ] - [ [ "strongly normalizing for term vectors" ] "csx_vector" + "( ❪?,?❫ ⊢ ⬈*𝐒 ? )" "csx_cnx_vector" + "csx_csx_vector" * ] - [ [ "strongly normalizing for terms" ] "csx" + "( ❪?,?❫ ⊢ ⬈*𝐒 ? )" "csx_simple" + "csx_simple_teqo" + "csx_drops" + "csx_fqus" + "csx_lsubr" + "csx_reqg" + "csx_feqg" + "csx_aaa" + "csx_gcp" + "csx_gcr" + "csx_lpx" + "csx_cnx" + "csx_fpb" + "csx_cpxs" + "csx_lpxs" + "csx_csx" * ] - [ [ "for lenvs on all entries" ] "lpxs" + "( ❪?,?❫ ⊢ ⬈* ? )" "lpxs_length" + "lpxs_drops" + "lpxs_reqg" + "lpxs_feqg" + "lpxs_aaa" + "lpxs_lpx" + "lpxs_cpxs" + "lpxs_lpxs" * ] - [ [ "for binders" ] "cpxs_ext" + "( ❪?,?❫ ⊢ ? ⬈* ? )" * ] - [ [ "for terms" ] "cpxs" + "( ❪?,?❫ ⊢ ? ⬈* ? )" "cpxs_teqg" + "cpxs_teqo" + "cpxs_teqo_vector" + "cpxs_drops" + "cpxs_fqus" + "cpxs_lsubr" + "cpxs_reqg" + "cpxs_feqg" + "cpxs_aaa" + "cpxs_lpx" + "cpxs_cnx" + "cpxs_cpxs" * ] + [ [ "strongly normalizing for term vectors" ] "csx_vector" + "( ❨?,?❩ ⊢ ⬈*𝐒 ? )" "csx_cnx_vector" + "csx_csx_vector" * ] + [ [ "strongly normalizing for terms" ] "csx" + "( ❨?,?❩ ⊢ ⬈*𝐒 ? )" "csx_simple" + "csx_simple_teqo" + "csx_drops" + "csx_fqus" + "csx_lsubr" + "csx_reqg" + "csx_feqg" + "csx_aaa" + "csx_gcp" + "csx_gcr" + "csx_lpx" + "csx_cnx" + "csx_fpb" + "csx_cpxs" + "csx_lpxs" + "csx_csx" * ] + [ [ "for lenvs on all entries" ] "lpxs" + "( ❨?,?❩ ⊢ ⬈* ? )" "lpxs_length" + "lpxs_drops" + "lpxs_reqg" + "lpxs_feqg" + "lpxs_aaa" + "lpxs_lpx" + "lpxs_cpxs" + "lpxs_lpxs" * ] + [ [ "for binders" ] "cpxs_ext" + "( ❨?,?❩ ⊢ ? ⬈* ? )" * ] + [ [ "for terms" ] "cpxs" + "( ❨?,?❩ ⊢ ? ⬈* ? )" "cpxs_teqg" + "cpxs_teqo" + "cpxs_teqo_vector" + "cpxs_drops" + "cpxs_fqus" + "cpxs_lsubr" + "cpxs_reqg" + "cpxs_feqg" + "cpxs_aaa" + "cpxs_lpx" + "cpxs_cnx" + "cpxs_cpxs" * ] } ] } @@ -99,35 +99,35 @@ table { class "cyan" [ { "rt-transition" * } { [ { "context-sensitive parallel t-transition" * } { - [ [ "for terms" ] "cpt" + "( ❪?,?❫ ⊢ ? ⬆[?,?] ? )" "cpt_drops" + "cpt_fqu" + "cpt_cpm" * ] + [ [ "for terms" ] "cpt" + "( ❨?,?❩ ⊢ ? ⬆[?,?] ? )" "cpt_drops" + "cpt_fqu" + "cpt_cpm" * ] } ] [ { "context-sensitive parallel r-transition" * } { - [ [ "normal form for terms" ] "cnr ( ❪?,?❫ ⊢ ➡𝐍[?,?] ? )" "cnr_simple" + "cnr_teqg" + "cnr_teqx" + "cnr_drops" * ] - [ [ "for lenvs on all entries" ] "lpr" + "( ❪?,?❫ ⊢ ➡[?,?] ? )" "lpr_length" + "lpr_drops" + "lpr_fquq" + "lpr_aaa" + "lpr_lpx" + "lpr_fpb" + "lpr_fpbc" + "lpr_lpr" * ] + [ [ "normal form for terms" ] "cnr ( ❨?,?❩ ⊢ ➡𝐍[?,?] ? )" "cnr_simple" + "cnr_teqg" + "cnr_teqx" + "cnr_drops" * ] + [ [ "for lenvs on all entries" ] "lpr" + "( ❨?,?❩ ⊢ ➡[?,?] ? )" "lpr_length" + "lpr_drops" + "lpr_fquq" + "lpr_aaa" + "lpr_lpx" + "lpr_fpb" + "lpr_fpbc" + "lpr_lpr" * ] [ [ "for binders" ] "cpr_ext" * ] [ [ "for terms" ] "cpr" "cpr_drops" + "cpr_drops_basic" + "cpr_teqg" + "cpr_cpr" * ] } ] [ { "t-bound context-sensitive parallel rt-transition" * } { - [ [ "for terms" ] "cpm" + "( ❪?,?❫ ⊢ ? ➡[?,?] ? )" "cpm_simple" + "cpm_teqx" + "cpm_drops" + "cpm_lsubr" + "cpm_fsle" + "cpm_aaa" + "cpm_cpx" + "cpm_fpb" + "cpm_fpbc" * ] + [ [ "for terms" ] "cpm" + "( ❨?,?❩ ⊢ ? ➡[?,?] ? )" "cpm_simple" + "cpm_teqx" + "cpm_drops" + "cpm_lsubr" + "cpm_fsle" + "cpm_aaa" + "cpm_cpx" + "cpm_fpb" + "cpm_fpbc" * ] } ] [ { "extended parallel rst-transition" * } { - [ [ "proper for closures" ] "fpbc" + "( ❪?,?,?❫ ≻ ❪?,?,?❫ )" "fpbc_fqup" + "fpbc_feqg" + "fpbc_lpx" + "fpbc_fpb" * ] - [ [ "for closures" ] "fpb" + "( ❪?,?,?❫ ≽ ❪?,?,?❫ )" "fpb_fqup" + "fpb_feqg" + "fpb_aaa" + "fpb_lpx" * ] + [ [ "proper for closures" ] "fpbc" + "( ❨?,?,?❩ ≻ ❨?,?,?❩ )" "fpbc_fqup" + "fpbc_feqg" + "fpbc_lpx" + "fpbc_fpb" * ] + [ [ "for closures" ] "fpb" + "( ❨?,?,?❩ ≽ ❨?,?,?❩ )" "fpb_fqup" + "fpb_feqg" + "fpb_aaa" + "fpb_lpx" * ] } ] [ { "extended context-sensitive parallel rt-transition" * } { - [ [ "normal form for terms" ] "cnx" + "( ❪?,?❫ ⊢ ⬈𝐍 ? )" "cnx_simple" + "cnx_drops" + "cnx_basic" + "cnx_cnx" * ] - [ [ "for lenvs on referred entries" ] "rpx" + "( ❪?,?❫ ⊢ ⬈[?] ? )" "rpx_length" + "rpx_drops" + "rpx_fqup" + "rpx_fsle" + "rpx_reqg" + "rpx_reqx" + "rpx_lpx" + "rpx_rpx" * ] - [ [ "for lenvs on all entries" ] "lpx" + "( ❪?,?❫ ⊢ ⬈ ? )" "lpx_length" + "lpx_drops" + "lpx_fquq" + "lpx_fsle" + "lpx_reqg" + "lpx_aaa" * ] - [ [ "for binders" ] "cpx_ext" + "( ❪?,?❫ ⊢ ? ⬈ ? )" * ] - [ [ "for terms" ] "cpx" + "( ❪?,?❫ ⊢ ? ⬈ ? )" "cpx_simple" + "cpx_drops" + "cpx_drops_basic" + "cpx_fqus" + "cpx_lsubr" + "cpx_req" + "cpx_reqg" + "cpx_feqg" * ] + [ [ "normal form for terms" ] "cnx" + "( ❨?,?❩ ⊢ ⬈𝐍 ? )" "cnx_simple" + "cnx_drops" + "cnx_basic" + "cnx_cnx" * ] + [ [ "for lenvs on referred entries" ] "rpx" + "( ❨?,?❩ ⊢ ⬈[?] ? )" "rpx_length" + "rpx_drops" + "rpx_fqup" + "rpx_fsle" + "rpx_reqg" + "rpx_reqx" + "rpx_lpx" + "rpx_rpx" * ] + [ [ "for lenvs on all entries" ] "lpx" + "( ❨?,?❩ ⊢ ⬈ ? )" "lpx_length" + "lpx_drops" + "lpx_fquq" + "lpx_fsle" + "lpx_reqg" + "lpx_aaa" * ] + [ [ "for binders" ] "cpx_ext" + "( ❨?,?❩ ⊢ ? ⬈ ? )" * ] + [ [ "for terms" ] "cpx" + "( ❨?,?❩ ⊢ ? ⬈ ? )" "cpx_simple" + "cpx_drops" + "cpx_drops_basic" + "cpx_fqus" + "cpx_lsubr" + "cpx_req" + "cpx_reqg" + "cpx_feqg" * ] } ] [ { "bound context-sensitive parallel rt-transition" * } { - [ [ "for terms" ] "cpg" + "( ❪?,?❫ ⊢ ? ⬈[?,?,?] ? )" "cpg_simple" + "cpg_drops" + "cpg_lsubr" * ] + [ [ "for terms" ] "cpg" + "( ❨?,?❩ ⊢ ? ⬈[?,?,?] ? )" "cpg_simple" + "cpg_drops" + "cpg_lsubr" * ] } ] } @@ -145,16 +145,16 @@ class "italic" { 2 } [ [ "" ] "lsubn ( ? ⊢ ? :⫃ ? )" "lsubn_drop" "lsubn_cpcs" "lsubn_nta" * ] } ] - [ [ "" ] "shnv ( ❪?,?❫ ⊢ ? ¡[?,?,?] )" * ] + [ [ "" ] "shnv ( ❨?,?❩ ⊢ ? ¡[?,?,?] )" * ] [ { "decomposed rt-equivalence" * } { "scpes_cpcs" + "scpes_scpes" } ] - [ [ "for lenvs on referred entries" ] "rpxs" + "( ❪?,?❫ ⊢ ⬈*[?,?] ? )" "rpxs_length" + "rpxs_drops" + "rpxs_fqup" + "rpxs_reqx" + "rpxs_feqx" + "rpxs_aaa" + "rpxs_cpxs" + "rpxs_lpxs" + "rpxs_rpxs" * ] + [ [ "for lenvs on referred entries" ] "rpxs" + "( ❨?,?❩ ⊢ ⬈*[?,?] ? )" "rpxs_length" + "rpxs_drops" + "rpxs_fqup" + "rpxs_reqx" + "rpxs_feqx" + "rpxs_aaa" + "rpxs_cpxs" + "rpxs_lpxs" + "rpxs_rpxs" * ] [ [ "for lenvs on referred entries" ] - "lfpr" + "( ❪?,?❫ ⊢ ➡[?,?] ? )" "lfpr_length" + "lfpr_drops" + "lfpr_fquq" + "lfpr_fqup" + "lfpr_aaa" + "lfpr_rpx" + "lfpr_lfpr" * ] + "lfpr" + "( ❨?,?❩ ⊢ ➡[?,?] ? )" "lfpr_length" + "lfpr_drops" + "lfpr_fquq" + "lfpr_fqup" + "lfpr_aaa" + "lfpr_rpx" + "lfpr_lfpr" * ] [ { "evaluation for context-sensitive rt-reduction" * } { - [ [ "" ] "cpxe ( ❪?,?❫ ⊢ ➡*[?,?] 𝐍❪?❫ )" * ] + [ [ "" ] "cpxe ( ❨?,?❩ ⊢ ➡*[?,?] 𝐍❨?❩ )" * ] } ] [ { "normal forms for context-sensitive rt-reduction" * } { @@ -162,11 +162,11 @@ class "italic" { 2 } } ] [ { "irreducible forms for context-sensitive rt-reduction" * } { - [ [ "" ] "cix ( ❪?,?❫ ⊢ ➡[?,?] 𝐈❪?❫ )" "cix_lift" * ] + [ [ "" ] "cix ( ❨?,?❩ ⊢ ➡[?,?] 𝐈❨?❩ )" "cix_lift" * ] } ] [ { "reducible forms for context-sensitive rt-reduction" * } { - [ [ "" ] "crx ( ❪?,?❫ ⊢ ➡[?,?] 𝐑❪?❫ )" "crx_lift" * ] + [ [ "" ] "crx ( ❨?,?❩ ⊢ ➡[?,?] 𝐑❨?❩ )" "crx_lift" * ] } ] [ { "normal forms for context-sensitive reduction" * } { @@ -174,19 +174,19 @@ class "italic" { 2 } } ] [ { "irreducible forms for context-sensitive reduction" * } { - [ [ "" ] "cir ( ❪?,?❫ ⊢ ➡ 𝐈❪?❫ )" "cir_lift" * ] + [ [ "" ] "cir ( ❨?,?❩ ⊢ ➡ 𝐈❨?❩ )" "cir_lift" * ] } ] [ { "reducible forms for context-sensitive reduction" * } { - [ [ "" ] "crr ( ❪?,?❫ ⊢ ➡ 𝐑❪?❫ )" "crr_lift" * ] + [ [ "" ] "crr ( ❨?,?❩ ⊢ ➡ 𝐑❨?❩ )" "crr_lift" * ] } ] [ { "unfold" * } { - [ [ "" ] "unfold ( ❪?,?❫ ⊢ ? ⧫* ? )" * ] + [ [ "" ] "unfold ( ❨?,?❩ ⊢ ? ⧫* ? )" * ] } ] [ { "iterated static type assignment" * } { - [ [ "" ] "lstas ( ❪?,?❫ ⊢ ? •*[?,?] ? )" "lstas_lift" + "lstas_llpx_sn.ma" + "lstas_aaa" + "lstas_da" + "lstas_lstas" * ] + [ [ "" ] "lstas ( ❨?,?❩ ⊢ ? •*[?,?] ? )" "lstas_lift" + "lstas_llpx_sn.ma" + "lstas_aaa" + "lstas_da" + "lstas_lstas" * ] } ] [ { "local env. ref. for degree assignment" * } { @@ -194,11 +194,11 @@ class "italic" { 2 } } ] [ { "degree assignment" * } { - [ [ "" ] "da ( ❪?,?❫ ⊢ ? ▪[?,?] ? )" "da_lift" + "da_aaa" + "da_da" * ] + [ [ "" ] "da ( ❨?,?❩ ⊢ ? ▪[?,?] ? )" "da_lift" + "da_aaa" + "da_da" * ] } ] [ { "context-sensitive multiple rt-substitution" * } { - [ [ "" ] "cpys ( ❪?,?❫ ⊢ ? ▶*[?,?] ? )" "cpys_alt ( ❪?,?❫ ⊢ ? ▶▶*[?,?] ? )" "cpys_lift" + "cpys_cpys" * ] + [ [ "" ] "cpys ( ❨?,?❩ ⊢ ? ▶*[?,?] ? )" "cpys_alt ( ❨?,?❩ ⊢ ? ▶▶*[?,?] ? )" "cpys_lift" + "cpys_cpys" * ] } ] [ { "global env. slicing" * } { @@ -206,7 +206,7 @@ class "italic" { 2 } } ] [ { "context-sensitive ordinary rt-substitution" * } { - [ [ "" ] "cpy ( ❪?,?❫ ⊢ ? ▶[?,?] ? )" "cpy_lift" + "cpy_nlift" + "cpy_cpy" * ] + [ [ "" ] "cpy ( ❨?,?❩ ⊢ ? ▶[?,?] ? )" "cpy_lift" + "cpy_nlift" + "cpy_cpy" * ] } ] [ { "local env. ref. for rt-substitution" * } { diff --git a/matita/matita/contribs/lambdadelta/ground/counters/rtc_ism.ma b/matita/matita/contribs/lambdadelta/ground/counters/rtc_ism.ma index 3b8cbfe9c..af50363fe 100644 --- a/matita/matita/contribs/lambdadelta/ground/counters/rtc_ism.ma +++ b/matita/matita/contribs/lambdadelta/ground/counters/rtc_ism.ma @@ -26,40 +26,40 @@ interpretation (* Basic constructions ******************************************************) -lemma rtc_ism_zz: 𝐌❪𝟎,𝟘𝟘❫. +lemma rtc_ism_zz: 𝐌❨𝟎,𝟘𝟘❩. /2 width=3 by ex1_2_intro/ qed. -lemma rtc_ism_zu: 𝐌❪𝟎,𝟙𝟘❫. +lemma rtc_ism_zu: 𝐌❨𝟎,𝟙𝟘❩. /2 width=3 by ex1_2_intro/ qed. -lemma rtc_ism_uz: 𝐌❪𝟏,𝟘𝟙❫. +lemma rtc_ism_uz: 𝐌❨𝟏,𝟘𝟙❩. /2 width=3 by ex1_2_intro/ qed. -lemma rtc_ism_eq_t_trans (n) (c1) (c2): 𝐌❪n,c1❫ → rtc_eq_t c1 c2 → 𝐌❪n,c2❫. +lemma rtc_ism_eq_t_trans (n) (c1) (c2): 𝐌❨n,c1❩ → rtc_eq_t c1 c2 → 𝐌❨n,c2❩. #n #c1 #c2 * #ri1 #rs1 #H destruct #H elim (rtc_eq_t_inv_dx … H) -H /2 width=3 by ex1_2_intro/ qed-. (* Basic destructions *******************************************************) -lemma rtc_ism_des_zz (n): 𝐌❪n,𝟘𝟘❫ → 𝟎 = n. +lemma rtc_ism_des_zz (n): 𝐌❨n,𝟘𝟘❩ → 𝟎 = n. #n * #ri #rs #H destruct // qed-. -lemma rtc_ism_des_uz (n): 𝐌❪n,𝟙𝟘❫ → 𝟎 = n. +lemma rtc_ism_des_uz (n): 𝐌❨n,𝟙𝟘❩ → 𝟎 = n. #n * #ri #rs #H destruct // qed-. -lemma rtc_ism_des_01 (n): 𝐌❪n,𝟘𝟙❫ → ninj (𝟏) = n. +lemma rtc_ism_des_01 (n): 𝐌❨n,𝟘𝟙❩ → ninj (𝟏) = n. #n * #ri #rs #H destruct // qed-. (* Main inversions **********************************************************) -theorem rtc_ism_inj (n1) (n2) (c): 𝐌❪n1,c❫ → 𝐌❪n2,c❫ → n1 = n2. +theorem rtc_ism_inj (n1) (n2) (c): 𝐌❨n1,c❩ → 𝐌❨n2,c❩ → n1 = n2. #n1 #n2 #c * #ri1 #rs1 #H1 * #ri2 #rs2 #H2 destruct // qed-. -theorem rtc_ism_mono (n) (c1) (c2): 𝐌❪n,c1❫ → 𝐌❪n,c2❫ → rtc_eq_t c1 c2. +theorem rtc_ism_mono (n) (c1) (c2): 𝐌❨n,c1❩ → 𝐌❨n,c2❩ → rtc_eq_t c1 c2. #n #c1 #c2 * #ri1 #rs1 #H1 * #ri2 #rs2 #H2 destruct // qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/counters/rtc_ism_max.ma b/matita/matita/contribs/lambdadelta/ground/counters/rtc_ism_max.ma index 3e4655286..9de53ddb9 100644 --- a/matita/matita/contribs/lambdadelta/ground/counters/rtc_ism_max.ma +++ b/matita/matita/contribs/lambdadelta/ground/counters/rtc_ism_max.ma @@ -20,46 +20,46 @@ include "ground/counters/rtc_ism.ma". (* Constructions with rtc_max ***********************************************) -lemma rtc_ism_max (n1) (n2) (c1) (c2): 𝐌❪n1,c1❫ → 𝐌❪n2,c2❫ → 𝐌❪n1∨n2,c1∨c2❫. +lemma rtc_ism_max (n1) (n2) (c1) (c2): 𝐌❨n1,c1❩ → 𝐌❨n2,c2❩ → 𝐌❨n1∨n2,c1∨c2❩. #n1 #n2 #c1 #c2 * #ri1 #rs1 #H1 * #ri2 #rs2 #H2 destruct /2 width=3 by ex1_2_intro/ qed. -lemma rtc_ism_max_zero_sn (n) (c1) (c2): 𝐌❪𝟎,c1❫ → 𝐌❪n,c2❫ → 𝐌❪n,c1∨c2❫. +lemma rtc_ism_max_zero_sn (n) (c1) (c2): 𝐌❨𝟎,c1❩ → 𝐌❨n,c2❩ → 𝐌❨n,c1∨c2❩. /2 width=1 by rtc_ism_max/ qed. -lemma rtc_ism_max_zero_dx (n) (c1) (c2): 𝐌❪n,c1❫ → 𝐌❪𝟎,c2❫ → 𝐌❪n,c1∨c2❫. +lemma rtc_ism_max_zero_dx (n) (c1) (c2): 𝐌❨n,c1❩ → 𝐌❨𝟎,c2❩ → 𝐌❨n,c1∨c2❩. #n #c1 #c2 #H1 #H2 >(nmax_zero_dx n) /2 width=1 by rtc_ism_max/ qed. -lemma rtc_ism_max_idem_sn (n) (c1) (c2): 𝐌❪n,c1❫ → 𝐌❪n,c2❫ → 𝐌❪n,c1∨c2❫. +lemma rtc_ism_max_idem_sn (n) (c1) (c2): 𝐌❨n,c1❩ → 𝐌❨n,c2❩ → 𝐌❨n,c1∨c2❩. #n #c1 #c2 #H1 #H2 >(nmax_idem n) /2 width=1 by rtc_ism_max/ qed. (* Inversions with rtc_max **************************************************) -lemma rtc_ism_inv_max (n) (c1) (c2): 𝐌❪n,c1 ∨ c2❫ → - ∃∃n1,n2. 𝐌❪n1,c1❫ & 𝐌❪n2,c2❫ & (n1 ∨ n2) = n. +lemma rtc_ism_inv_max (n) (c1) (c2): 𝐌❨n,c1 ∨ c2❩ → + ∃∃n1,n2. 𝐌❨n1,c1❩ & 𝐌❨n2,c2❩ & (n1 ∨ n2) = n. #n #c1 #c2 * #ri #rs #H elim (rtc_max_inv_dx … H) -H #ri1 #rs1 #ti1 #ts1 #ri2 #rs2 #ti2 #ts2 #_ #_ #H1 #H2 #H3 #H4 elim (eq_inv_nmax_zero … H1) -H1 /3 width=5 by ex3_2_intro, ex1_2_intro/ qed-. -lemma rtc_isr_inv_max (c1) (c2): 𝐌❪𝟎,c1 ∨ c2❫ → ∧∧ 𝐌❪𝟎,c1❫ & 𝐌❪𝟎,c2❫. +lemma rtc_isr_inv_max (c1) (c2): 𝐌❨𝟎,c1 ∨ c2❩ → ∧∧ 𝐌❨𝟎,c1❩ & 𝐌❨𝟎,c2❩. #c1 #c2 #H elim (rtc_ism_inv_max … H) -H #n1 #n2 #Hn1 #Hn2 #H elim (eq_inv_nmax_zero … H) -H #H1 #H2 destruct /2 width=1 by conj/ qed-. -lemma rtc_ism_inv_max_zero_dx (n) (c1) (c2): 𝐌❪n,c1 ∨ c2❫ → 𝐌❪𝟎,c2❫ → 𝐌❪n,c1❫. +lemma rtc_ism_inv_max_zero_dx (n) (c1) (c2): 𝐌❨n,c1 ∨ c2❩ → 𝐌❨𝟎,c2❩ → 𝐌❨n,c1❩. #n #c1 #c2 #H #H2 elim (rtc_ism_inv_max … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct lapply (rtc_ism_inj … Hn2 H2) -c2 #H destruct // qed-. -lemma rtc_ism_inv_max_eq_t (n) (c1) (c2): 𝐌❪n,c1 ∨ c2❫ → rtc_eq_t c1 c2 → - ∧∧ 𝐌❪n,c1❫ & 𝐌❪n,c2❫. +lemma rtc_ism_inv_max_eq_t (n) (c1) (c2): 𝐌❨n,c1 ∨ c2❩ → rtc_eq_t c1 c2 → + ∧∧ 𝐌❨n,c1❩ & 𝐌❨n,c2❩. #n #c1 #c2 #H #Hc12 elim (rtc_ism_inv_max … H) -H #n1 #n2 #Hc1 #Hc2 #H destruct lapply (rtc_ism_eq_t_trans … Hc1 … Hc12) -Hc12 #H diff --git a/matita/matita/contribs/lambdadelta/ground/counters/rtc_ism_max_shift.ma b/matita/matita/contribs/lambdadelta/ground/counters/rtc_ism_max_shift.ma index 8d9a4508a..c8d491369 100644 --- a/matita/matita/contribs/lambdadelta/ground/counters/rtc_ism_max_shift.ma +++ b/matita/matita/contribs/lambdadelta/ground/counters/rtc_ism_max_shift.ma @@ -19,8 +19,8 @@ include "ground/counters/rtc_ism_max.ma". (* Inversions with rtc_max and rtc_shift ************************************) -lemma rtc_ism_inv_max_shift_sn (n) (c1) (c2): 𝐌❪n,↕*c1 ∨ c2❫ → - ∧∧ 𝐌❪𝟎,c1❫ & 𝐌❪n,c2❫. +lemma rtc_ism_inv_max_shift_sn (n) (c1) (c2): 𝐌❨n,↕*c1 ∨ c2❩ → + ∧∧ 𝐌❨𝟎,c1❩ & 𝐌❨n,c2❩. #n #c1 #c2 #H elim (rtc_ism_inv_max … H) -H #n1 #n2 #Hc1 #Hc2 #H destruct elim (rtc_ism_inv_shift … Hc1) -Hc1 #Hc1 * -n1 (nplus_zero_sn n) /2 width=1 by rtc_ism_plus/ qed. -lemma rtc_ism_plus_zero_dx (n) (c1) (c2): 𝐌❪n,c1❫ → 𝐌❪𝟎,c2❫ → 𝐌❪n,c1+c2❫. +lemma rtc_ism_plus_zero_dx (n) (c1) (c2): 𝐌❨n,c1❩ → 𝐌❨𝟎,c2❩ → 𝐌❨n,c1+c2❩. /2 width=1 by rtc_ism_plus/ qed. -lemma rtc_ism_succ (n) (c): 𝐌❪n,c❫ → 𝐌❪↑n,c+𝟘𝟙❫. +lemma rtc_ism_succ (n) (c): 𝐌❨n,c❩ → 𝐌❨↑n,c+𝟘𝟙❩. #n #c #H >nplus_unit_dx /2 width=1 by rtc_ism_plus/ qed. (* Inversions with rtc_plus *************************************************) -lemma rtc_ism_inv_plus (n) (c1) (c2): 𝐌❪n,c1 + c2❫ → - ∃∃n1,n2. 𝐌❪n1,c1❫ & 𝐌❪n2,c2❫ & n1 + n2 = n. +lemma rtc_ism_inv_plus (n) (c1) (c2): 𝐌❨n,c1 + c2❩ → + ∃∃n1,n2. 𝐌❨n1,c1❩ & 𝐌❨n2,c2❩ & n1 + n2 = n. #n #c1 #c2 * #ri #rs #H elim (rtc_plus_inv_dx … H) -H #ri1 #rs1 #ti1 #ts1 #ri2 #rs2 #ti2 #ts2 #_ #_ #H1 #H2 #H3 #H4 elim (eq_inv_nplus_zero … H1) -H1 /3 width=5 by ex3_2_intro, ex1_2_intro/ qed-. -lemma rtc_ism_inv_plus_zero_dx (n) (c1) (c2): 𝐌❪n,c1 + c2❫ → 𝐌❪𝟎,c2❫ → 𝐌❪n,c1❫. +lemma rtc_ism_inv_plus_zero_dx (n) (c1) (c2): 𝐌❨n,c1 + c2❩ → 𝐌❨𝟎,c2❩ → 𝐌❨n,c1❩. #n #c1 #c2 #H #H2 elim (rtc_ism_inv_plus … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct lapply (rtc_ism_inj … Hn2 H2) -c2 #H destruct // qed-. -lemma rtc_ism_inv_plus_unit_dx (n) (c1) (c2): 𝐌❪n,c1 + c2❫ → 𝐌❪𝟏,c2❫ → - ∃∃m. 𝐌❪m,c1❫ & n = ↑m. +lemma rtc_ism_inv_plus_unit_dx (n) (c1) (c2): 𝐌❨n,c1 + c2❩ → 𝐌❨𝟏,c2❩ → + ∃∃m. 𝐌❨m,c1❩ & n = ↑m. #n #c1 #c2 #H #H2 elim (rtc_ism_inv_plus … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct lapply (rtc_ism_inj … Hn2 H2) -c2 #H destruct diff --git a/matita/matita/contribs/lambdadelta/ground/counters/rtc_ism_shift.ma b/matita/matita/contribs/lambdadelta/ground/counters/rtc_ism_shift.ma index 3ecc6d017..e3acb7ccd 100644 --- a/matita/matita/contribs/lambdadelta/ground/counters/rtc_ism_shift.ma +++ b/matita/matita/contribs/lambdadelta/ground/counters/rtc_ism_shift.ma @@ -19,18 +19,18 @@ include "ground/counters/rtc_ism.ma". (* Constructions with rtc_shift *********************************************) -lemma rtc_isr_shift (c): 𝐌❪𝟎,c❫ → 𝐌❪𝟎,↕*c❫. +lemma rtc_isr_shift (c): 𝐌❨𝟎,c❩ → 𝐌❨𝟎,↕*c❩. #c * #ri #rs #H destruct /2 width=3 by ex1_2_intro/ qed. (* Inversions with rtc_shift ************************************************) -lemma rtc_ism_inv_shift (n) (c): 𝐌❪n,↕*c❫ → ∧∧ 𝐌❪𝟎,c❫ & 𝟎 = n. +lemma rtc_ism_inv_shift (n) (c): 𝐌❨n,↕*c❩ → ∧∧ 𝐌❨𝟎,c❩ & 𝟎 = n. #n #c * #ri #rs #H elim (rtc_shift_inv_dx … H) -H #rt0 #rs0 #ti0 #ts0 #_ #_ #H1 #H2 #H3 elim (eq_inv_nmax_zero … H1) -H1 /3 width=3 by ex1_2_intro, conj/ qed-. -lemma rtc_isr_inv_shift (c): 𝐌❪𝟎,↕*c❫ → 𝐌❪𝟎,c❫. +lemma rtc_isr_inv_shift (c): 𝐌❨𝟎,↕*c❩ → 𝐌❨𝟎,c❩. #c #H elim (rtc_ism_inv_shift … H) -H // qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/counters/rtc_ist.ma b/matita/matita/contribs/lambdadelta/ground/counters/rtc_ist.ma index 57ba73e32..525745120 100644 --- a/matita/matita/contribs/lambdadelta/ground/counters/rtc_ist.ma +++ b/matita/matita/contribs/lambdadelta/ground/counters/rtc_ist.ma @@ -26,32 +26,32 @@ interpretation (* Basic constructions ******************************************************) -lemma rtc_ist_zz: 𝐓❪𝟎,𝟘𝟘❫. +lemma rtc_ist_zz: 𝐓❨𝟎,𝟘𝟘❩. // qed. -lemma rtc_ist_zu: 𝐓❪𝟏,𝟘𝟙❫. +lemma rtc_ist_zu: 𝐓❨𝟏,𝟘𝟙❩. // qed. (* Basic inversions *********************************************************) -lemma rtc_ist_inv_zz (n): 𝐓❪n,𝟘𝟘❫ → 𝟎 = n. +lemma rtc_ist_inv_zz (n): 𝐓❨n,𝟘𝟘❩ → 𝟎 = n. #n #H destruct // qed-. -lemma rtc_ist_inv_zu (n): 𝐓❪n,𝟘𝟙❫ → ninj (𝟏) = n. +lemma rtc_ist_inv_zu (n): 𝐓❨n,𝟘𝟙❩ → ninj (𝟏) = n. #n #H destruct // qed-. -lemma rtc_ist_inv_uz (n): 𝐓❪n,𝟙𝟘❫ → ⊥. +lemma rtc_ist_inv_uz (n): 𝐓❨n,𝟙𝟘❩ → ⊥. #h #H destruct qed-. (* Main inversions **********************************************************) -theorem rtc_ist_inj (n1) (n2) (c): 𝐓❪n1,c❫ → 𝐓❪n2,c❫ → n1 = n2. +theorem rtc_ist_inj (n1) (n2) (c): 𝐓❨n1,c❩ → 𝐓❨n2,c❩ → n1 = n2. #n1 #n2 #c #H1 #H2 destruct // qed-. -theorem rtc_ist_mono (n) (c1) (c2): 𝐓❪n,c1❫ → 𝐓❪n,c2❫ → c1 = c2. +theorem rtc_ist_mono (n) (c1) (c2): 𝐓❨n,c1❩ → 𝐓❨n,c2❩ → c1 = c2. #n #c1 #c2 #H1 #H2 destruct // qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/counters/rtc_ist_max.ma b/matita/matita/contribs/lambdadelta/ground/counters/rtc_ist_max.ma index 3ad43260d..ab9a857fd 100644 --- a/matita/matita/contribs/lambdadelta/ground/counters/rtc_ist_max.ma +++ b/matita/matita/contribs/lambdadelta/ground/counters/rtc_ist_max.ma @@ -20,24 +20,24 @@ include "ground/counters/rtc_ist.ma". (* Constructions with rtc_max ***********************************************) -lemma rtc_ist_max (n1) (n2) (c1) (c2): 𝐓❪n1,c1❫ → 𝐓❪n2,c2❫ → 𝐓❪n1∨n2,c1∨c2❫. +lemma rtc_ist_max (n1) (n2) (c1) (c2): 𝐓❨n1,c1❩ → 𝐓❨n2,c2❩ → 𝐓❨n1∨n2,c1∨c2❩. #n1 #n2 #c1 #c2 #H1 #H2 destruct // qed. -lemma rtc_ist_max_zero_sn (n) (c1) (c2): 𝐓❪𝟎,c1❫ → 𝐓❪n,c2❫ → 𝐓❪n,c1∨c2❫. +lemma rtc_ist_max_zero_sn (n) (c1) (c2): 𝐓❨𝟎,c1❩ → 𝐓❨n,c2❩ → 𝐓❨n,c1∨c2❩. /2 width=1 by rtc_ist_max/ qed. -lemma rtc_ist_max_zero_dx (n) (c1) (c2): 𝐓❪n,c1❫ → 𝐓❪𝟎,c2❫ → 𝐓❪n,c1∨c2❫. +lemma rtc_ist_max_zero_dx (n) (c1) (c2): 𝐓❨n,c1❩ → 𝐓❨𝟎,c2❩ → 𝐓❨n,c1∨c2❩. // qed. -lemma rtc_ist_max_idem_sn (n) (c1) (c2): 𝐓❪n,c1❫ → 𝐓❪n,c2❫ → 𝐓❪n,c1∨c2❫. +lemma rtc_ist_max_idem_sn (n) (c1) (c2): 𝐓❨n,c1❩ → 𝐓❨n,c2❩ → 𝐓❨n,c1∨c2❩. #n #c1 #c2 #H1 #H2 >(nmax_idem n) /2 width=1 by rtc_ist_max/ qed. (* Inversions with rtc_max **************************************************) -lemma rtc_ist_inv_max (n) (c1) (c2): 𝐓❪n,c1 ∨ c2❫ → - ∃∃n1,n2. 𝐓❪n1,c1❫ & 𝐓❪n2,c2❫ & (n1 ∨ n2) = n. +lemma rtc_ist_inv_max (n) (c1) (c2): 𝐓❨n,c1 ∨ c2❩ → + ∃∃n1,n2. 𝐓❨n1,c1❩ & 𝐓❨n2,c2❩ & (n1 ∨ n2) = n. #n #c1 #c2 #H elim (rtc_max_inv_dx … H) -H #ri1 #rs1 #ti1 #ts1 #ri2 #rs2 #ti2 #ts2 #H1 #H2 #H3 #H4 #H5 #H6 destruct elim (eq_inv_nmax_zero … H1) -H1 #H11 #H12 destruct @@ -46,14 +46,14 @@ elim (eq_inv_nmax_zero … H3) -H3 #H31 #H32 destruct /2 width=5 by ex3_2_intro/ qed-. -lemma rtc_ist_inv_zero_max (c1) (c2): 𝐓❪𝟎,c1 ∨ c2❫ → ∧∧ 𝐓❪𝟎,c1❫ & 𝐓❪𝟎,c2❫. +lemma rtc_ist_inv_zero_max (c1) (c2): 𝐓❨𝟎,c1 ∨ c2❩ → ∧∧ 𝐓❨𝟎,c1❩ & 𝐓❨𝟎,c2❩. #c1 #c2 #H elim (rtc_ist_inv_max … H) -H #n1 #n2 #Hn1 #Hn2 #H elim (eq_inv_nmax_zero … H) -H #H1 #H2 destruct /2 width=1 by conj/ qed-. -lemma rtc_ist_inv_max_zero_dx (n) (c1) (c2): 𝐓❪n,c1 ∨ c2❫ → 𝐓❪𝟎,c2❫ → 𝐓❪n,c1❫. +lemma rtc_ist_inv_max_zero_dx (n) (c1) (c2): 𝐓❨n,c1 ∨ c2❩ → 𝐓❨𝟎,c2❩ → 𝐓❨n,c1❩. #n #c1 #c2 #H #H2 elim (rtc_ist_inv_max … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct // qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/counters/rtc_ist_plus.ma b/matita/matita/contribs/lambdadelta/ground/counters/rtc_ist_plus.ma index 5156acb85..ce43fe2dc 100644 --- a/matita/matita/contribs/lambdadelta/ground/counters/rtc_ist_plus.ma +++ b/matita/matita/contribs/lambdadelta/ground/counters/rtc_ist_plus.ma @@ -20,27 +20,27 @@ include "ground/counters/rtc_ist.ma". (* Constructions with rtc_plus **********************************************) -lemma rtc_ist_plus (n1) (n2) (c1) (c2): 𝐓❪n1,c1❫ → 𝐓❪n2,c2❫ → 𝐓❪n1+n2,c1+c2❫. +lemma rtc_ist_plus (n1) (n2) (c1) (c2): 𝐓❨n1,c1❩ → 𝐓❨n2,c2❩ → 𝐓❨n1+n2,c1+c2❩. #n1 #n2 #c1 #c2 #H1 #H2 destruct // qed. -lemma rtc_ist_plus_zero_sn (n) (c1) (c2): 𝐓❪𝟎,c1❫ → 𝐓❪n,c2❫ → 𝐓❪n,c1+c2❫. +lemma rtc_ist_plus_zero_sn (n) (c1) (c2): 𝐓❨𝟎,c1❩ → 𝐓❨n,c2❩ → 𝐓❨n,c1+c2❩. #n #c1 #c2 #H1 #H2 >(nplus_zero_sn n) /2 width=1 by rtc_ist_plus/ qed. -lemma rtc_ist_plus_zero_dx (n) (c1) (c2): 𝐓❪n,c1❫ → 𝐓❪𝟎,c2❫ → 𝐓❪n,c1+c2❫. +lemma rtc_ist_plus_zero_dx (n) (c1) (c2): 𝐓❨n,c1❩ → 𝐓❨𝟎,c2❩ → 𝐓❨n,c1+c2❩. /2 width=1 by rtc_ist_plus/ qed. -lemma rtc_ist_succ (n) (c): 𝐓❪n,c❫ → 𝐓❪↑n,c+𝟘𝟙❫. +lemma rtc_ist_succ (n) (c): 𝐓❨n,c❩ → 𝐓❨↑n,c+𝟘𝟙❩. #n #c #H >nplus_unit_dx /2 width=1 by rtc_ist_plus/ qed. (* Inversions with rtc_plus *************************************************) -lemma rtc_ist_inv_plus (n) (c1) (c2): 𝐓❪n,c1 + c2❫ → - ∃∃n1,n2. 𝐓❪n1,c1❫ & 𝐓❪n2,c2❫ & n1 + n2 = n. +lemma rtc_ist_inv_plus (n) (c1) (c2): 𝐓❨n,c1 + c2❩ → + ∃∃n1,n2. 𝐓❨n1,c1❩ & 𝐓❨n2,c2❩ & n1 + n2 = n. #n #c1 #c2 #H elim (rtc_plus_inv_dx … H) -H #ri1 #rs1 #ti1 #ts1 #ri2 #rs2 #ti2 #ts2 #H1 #H2 #H3 #H4 #H5 #H6 destruct elim (eq_inv_nplus_zero … H1) -H1 #H11 #H12 destruct @@ -49,20 +49,20 @@ elim (eq_inv_nplus_zero … H3) -H3 #H31 #H32 destruct /3 width=5 by ex3_2_intro/ qed-. -lemma rtc_ist_inv_plus_zero_dx (n) (c1) (c2): 𝐓❪n,c1 + c2❫ → 𝐓❪𝟎,c2❫ → 𝐓❪n,c1❫. +lemma rtc_ist_inv_plus_zero_dx (n) (c1) (c2): 𝐓❨n,c1 + c2❩ → 𝐓❨𝟎,c2❩ → 𝐓❨n,c1❩. #n #c1 #c2 #H #H2 elim (rtc_ist_inv_plus … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct // qed-. lemma rtc_ist_inv_plus_unit_dx: - ∀n,c1,c2. 𝐓❪n,c1 + c2❫ → 𝐓❪𝟏,c2❫ → - ∃∃m. 𝐓❪m,c1❫ & n = ↑m. + ∀n,c1,c2. 𝐓❨n,c1 + c2❩ → 𝐓❨𝟏,c2❩ → + ∃∃m. 𝐓❨m,c1❩ & n = ↑m. #n #c1 #c2 #H #H2 destruct elim (rtc_ist_inv_plus … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct /2 width=3 by ex2_intro/ qed-. -lemma rtc_ist_inv_plus_zu_dx (n) (c): 𝐓❪n,c+𝟙𝟘❫ → ⊥. +lemma rtc_ist_inv_plus_zu_dx (n) (c): 𝐓❨n,c+𝟙𝟘❩ → ⊥. #n #c #H elim (rtc_ist_inv_plus … H) -H #n1 #n2 #_ #H #_ /2 width=2 by rtc_ist_inv_uz/ diff --git a/matita/matita/contribs/lambdadelta/ground/counters/rtc_ist_shift.ma b/matita/matita/contribs/lambdadelta/ground/counters/rtc_ist_shift.ma index fbb72abac..9eb9a597f 100644 --- a/matita/matita/contribs/lambdadelta/ground/counters/rtc_ist_shift.ma +++ b/matita/matita/contribs/lambdadelta/ground/counters/rtc_ist_shift.ma @@ -19,13 +19,13 @@ include "ground/counters/rtc_ist.ma". (* Constructions with rtc_shift *********************************************) -lemma rtc_ist_zero_shift (c): 𝐓❪𝟎,c❫ → 𝐓❪𝟎,↕*c❫. +lemma rtc_ist_zero_shift (c): 𝐓❨𝟎,c❩ → 𝐓❨𝟎,↕*c❩. #c #H destruct // qed. (* Inversions with rtc_shift ************************************************) -lemma rtc_ist_inv_shift (n) (c): 𝐓❪n,↕*c❫ → ∧∧ 𝐓❪𝟎,c❫ & 𝟎 = n. +lemma rtc_ist_inv_shift (n) (c): 𝐓❨n,↕*c❩ → ∧∧ 𝐓❨𝟎,c❩ & 𝟎 = n. #n #c #H elim (rtc_shift_inv_dx … H) -H #rt0 #rs0 #ti0 #ts0 #H1 #_ #H2 #H3 #H4 destruct elim (eq_inv_nmax_zero … H1) -H1 #H11 #H12 destruct @@ -33,6 +33,6 @@ elim (eq_inv_nmax_zero … H2) -H2 #H21 #H22 destruct /2 width=1 by conj/ qed-. -lemma rtc_ist_inv_zero_shift (c): 𝐓❪𝟎,↕*c❫ → 𝐓❪𝟎,c❫. +lemma rtc_ist_inv_zero_shift (c): 𝐓❨𝟎,↕*c❩ → 𝐓❨𝟎,c❩. #c #H elim (rtc_ist_inv_shift … H) -H // qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_f_1.ma b/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_f_1.ma index 458bc6dca..a710c3086 100644 --- a/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_f_1.ma +++ b/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_f_1.ma @@ -14,6 +14,6 @@ (* GROUND NOTATION **********************************************************) -notation "hvbox( 𝐅❪ term 46 f ❫ )" +notation "hvbox( 𝐅❨ term 46 f ❩ )" non associative with precedence 45 for @{ 'PredicateF $f }. diff --git a/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_i_1.ma b/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_i_1.ma index 78a5f35c9..1c377347b 100644 --- a/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_i_1.ma +++ b/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_i_1.ma @@ -14,6 +14,6 @@ (* GROUND NOTATION **********************************************************) -notation "hvbox( 𝐈❪ term 46 f ❫ )" +notation "hvbox( 𝐈❨ term 46 f ❩ )" non associative with precedence 45 for @{ 'PredicateI $f }. diff --git a/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_m_2.ma b/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_m_2.ma index 0063c04ac..5b36decbe 100644 --- a/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_m_2.ma +++ b/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_m_2.ma @@ -14,6 +14,6 @@ (* GROUND NOTATION **********************************************************) -notation "hvbox( 𝐌❪ term 46 n, break term 46 c ❫ )" +notation "hvbox( 𝐌❨ term 46 n, break term 46 c ❩ )" non associative with precedence 45 for @{ 'PredicateM $n $c }. diff --git a/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_omega_1.ma b/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_omega_1.ma index 26a957a66..c4b3458f9 100644 --- a/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_omega_1.ma +++ b/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_omega_1.ma @@ -14,6 +14,6 @@ (* GROUND NOTATION **********************************************************) -notation "hvbox( 𝛀❪ term 46 f ❫ )" +notation "hvbox( 𝛀❨ term 46 f ❩ )" non associative with precedence 45 for @{ 'PredicateOmega $f }. diff --git a/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_t_1.ma b/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_t_1.ma index d369bf780..59ad9dbf5 100644 --- a/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_t_1.ma +++ b/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_t_1.ma @@ -14,6 +14,6 @@ (* GROUND NOTATION **********************************************************) -notation "hvbox( 𝐓❪ term 46 f ❫ )" +notation "hvbox( 𝐓❨ term 46 f ❩ )" non associative with precedence 45 for @{ 'PredicateT $f }. diff --git a/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_t_2.ma b/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_t_2.ma index 36d416831..743ea626a 100644 --- a/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_t_2.ma +++ b/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_t_2.ma @@ -14,6 +14,6 @@ (* GROUND NOTATION **********************************************************) -notation "hvbox( 𝐓❪ term 46 n, break term 46 c ❫ )" +notation "hvbox( 𝐓❨ term 46 n, break term 46 c ❩ )" non associative with precedence 45 for @{ 'PredicateT $n $c }. diff --git a/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_u_1.ma b/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_u_1.ma index 0c6bb46bd..fa8659811 100644 --- a/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_u_1.ma +++ b/matita/matita/contribs/lambdadelta/ground/notation/relations/predicate_u_1.ma @@ -14,6 +14,6 @@ (* GROUND NOTATION **********************************************************) -notation "hvbox( 𝐔❪ term 46 f ❫ )" +notation "hvbox( 𝐔❨ term 46 f ❩ )" non associative with precedence 45 for @{ 'PredicateU $f }. diff --git a/matita/matita/contribs/lambdadelta/ground/notation/relations/rat_3.ma b/matita/matita/contribs/lambdadelta/ground/notation/relations/rat_3.ma index 63317f836..5664826f9 100644 --- a/matita/matita/contribs/lambdadelta/ground/notation/relations/rat_3.ma +++ b/matita/matita/contribs/lambdadelta/ground/notation/relations/rat_3.ma @@ -14,6 +14,6 @@ (* GROUND NOTATION **********************************************************) -notation "hvbox( @❪ term 46 T1 , break term 46 f ❫ ≘ break term 46 T2 )" +notation "hvbox( @❨ term 46 T1 , break term 46 f ❩ ≘ break term 46 T2 )" non associative with precedence 45 for @{ 'RAt $T1 $f $T2 }. diff --git a/matita/matita/contribs/lambdadelta/ground/notation/relations/ratsucc_3.ma b/matita/matita/contribs/lambdadelta/ground/notation/relations/ratsucc_3.ma index 8f7e28638..b5a43f6da 100644 --- a/matita/matita/contribs/lambdadelta/ground/notation/relations/ratsucc_3.ma +++ b/matita/matita/contribs/lambdadelta/ground/notation/relations/ratsucc_3.ma @@ -14,6 +14,6 @@ (* GROUND NOTATION **********************************************************) -notation "hvbox( @↑❪ term 46 T1 , break term 46 f ❫ ≘ break term 46 T2 )" +notation "hvbox( @↑❨ term 46 T1 , break term 46 f ❩ ≘ break term 46 T2 )" non associative with precedence 45 for @{ 'RAtSucc $T1 $f $T2 }. diff --git a/matita/matita/contribs/lambdadelta/ground/notation/relations/rfun_c_2.ma b/matita/matita/contribs/lambdadelta/ground/notation/relations/rfun_c_2.ma index 9c931c379..d5df5c835 100644 --- a/matita/matita/contribs/lambdadelta/ground/notation/relations/rfun_c_2.ma +++ b/matita/matita/contribs/lambdadelta/ground/notation/relations/rfun_c_2.ma @@ -14,6 +14,6 @@ (* GROUND NOTATION **********************************************************) -notation "hvbox( 𝐂❪ term 46 f ❫ ≘ break term 46 n )" +notation "hvbox( 𝐂❨ term 46 f ❩ ≘ break term 46 n )" non associative with precedence 45 for @{ 'RFunC $f $n }. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/fr2_nat.ma b/matita/matita/contribs/lambdadelta/ground/relocation/fr2_nat.ma index 67fd827ad..59dec1229 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/fr2_nat.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/fr2_nat.ma @@ -40,7 +40,7 @@ interpretation (*** at_inv_nil *) lemma fr2_nat_inv_nil (l1) (l2): - @❪l1, ◊❫ ≘ l2 → l1 = l2. + @❨l1, ◊❩ ≘ l2 → l1 = l2. #l1 #l2 @(insert_eq_1 … (◊)) #f * -f -l1 -l2 [ // @@ -51,9 +51,9 @@ qed-. (*** at_inv_cons *) lemma fr2_nat_inv_cons (f) (d) (h) (l1) (l2): - @❪l1, ❨d,h❩;f❫ ≘ l2 → - ∨∨ ∧∧ l1 < d & @❪l1, f❫ ≘ l2 - | ∧∧ d ≤ l1 & @❪l1+h, f❫ ≘ l2. + @❨l1, ❨d,h❩;f❩ ≘ l2 → + ∨∨ ∧∧ l1 < d & @❨l1, f❩ ≘ l2 + | ∧∧ d ≤ l1 & @❨l1+h, f❩ ≘ l2. #g #d #h #l1 #l2 @(insert_eq_1 … (❨d, h❩;g)) #f * -f -l1 -l2 [ #l #H destruct @@ -64,7 +64,7 @@ qed-. (*** at_inv_cons *) lemma fr2_nat_inv_cons_lt (f) (d) (h) (l1) (l2): - @❪l1, ❨d,h❩;f❫ ≘ l2 → l1 < d → @❪l1, f❫ ≘ l2. + @❨l1, ❨d,h❩;f❩ ≘ l2 → l1 < d → @❨l1, f❩ ≘ l2. #f #d #h #l1 #h2 #H elim (fr2_nat_inv_cons … H) -H * // #Hdl1 #_ #Hl1d elim (nlt_ge_false … Hl1d Hdl1) @@ -72,7 +72,7 @@ qed-. (*** at_inv_cons *) lemma fr2_nat_inv_cons_ge (f) (d) (h) (l1) (l2): - @❪l1, ❨d,h❩;f❫ ≘ l2 → d ≤ l1 → @❪l1+h, f❫ ≘ l2. + @❨l1, ❨d,h❩;f❩ ≘ l2 → d ≤ l1 → @❨l1+h, f❩ ≘ l2. #f #d #h #l1 #h2 #H elim (fr2_nat_inv_cons … H) -H * // #Hl1d #_ #Hdl1 elim (nlt_ge_false … Hl1d Hdl1) diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/fr2_nat_nat.ma b/matita/matita/contribs/lambdadelta/ground/relocation/fr2_nat_nat.ma index a40ac35c1..744becdad 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/fr2_nat_nat.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/fr2_nat_nat.ma @@ -20,7 +20,7 @@ include "ground/relocation/fr2_nat.ma". (*** at_mono *) theorem fr2_nat_mono (f) (l): - ∀l1. @❪l, f❫ ≘ l1 → ∀l2. @❪l, f❫ ≘ l2 → l1 = l2. + ∀l1. @❨l, f❩ ≘ l1 → ∀l2. @❨l, f❩ ≘ l2 → l1 = l2. #f #l #l1 #H elim H -f -l -l1 [ #l #x #H <(fr2_nat_inv_nil … H) -x // | #f #d #h #l #l1 #Hld #_ #IH #x #H diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_after_ist.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_after_ist.ma index 8a0152682..e67235f76 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_after_ist.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_after_ist.ma @@ -21,14 +21,14 @@ include "ground/relocation/pr_after_pat_tls.ma". (*** H_after_inj *) definition H_pr_after_inj: predicate pr_map ≝ - λf1. 𝐓❪f1❫ → + λf1. 𝐓❨f1❩ → ∀f,f21,f22. f1 ⊚ f21 ≘ f → f1 ⊚ f22 ≘ f → f21 ≡ f22. (* Main destructions with pr_ist ********************************************) (*** after_inj_O_aux *) corec fact pr_after_inj_unit_aux: - ∀f1. @❪𝟏, f1❫ ≘ 𝟏 → H_pr_after_inj f1. + ∀f1. @❨𝟏, f1❩ ≘ 𝟏 → H_pr_after_inj f1. #f1 #H1f1 #H2f1 #f #f21 #f22 #H1f #H2f cases (pr_pat_inv_unit_bi … H1f1) -H1f1 [|*: // ] #g1 #H1 lapply (pr_ist_inv_push … H2f1 … H1) -H2f1 #H2g1 @@ -45,8 +45,8 @@ qed-. (*** after_inj_aux *) fact pr_after_inj_aux: - (∀f1. @❪𝟏, f1❫ ≘ 𝟏 → H_pr_after_inj f1) → - ∀i2,f1. @❪𝟏, f1❫ ≘ i2 → H_pr_after_inj f1. + (∀f1. @❨𝟏, f1❩ ≘ 𝟏 → H_pr_after_inj f1) → + ∀i2,f1. @❨𝟏, f1❩ ≘ i2 → H_pr_after_inj f1. #H0 #i2 elim i2 -i2 /2 width=1 by/ -H0 #i2 #IH #f1 #H1f1 #H2f1 #f #f21 #f22 #H1f #H2f elim (pr_pat_inv_unit_succ … H1f1) -H1f1 [|*: // ] #g1 #H1g1 #H1 diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_isi.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_isi.ma index 93182f870..494659038 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_isi.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_isi.ma @@ -21,7 +21,7 @@ include "ground/relocation/pr_after_after.ma". (*** after_isid_sn *) corec lemma pr_after_isi_sn: - ∀f1. 𝐈❪f1❫ → ∀f2. f1 ⊚ f2 ≘ f2. + ∀f1. 𝐈❨f1❩ → ∀f2. f1 ⊚ f2 ≘ f2. #f1 * -f1 #f1 #g1 #Hf1 #H1 #f2 cases (pr_map_split_tl f2) #H2 /3 width=7 by pr_after_push, pr_after_refl/ @@ -29,7 +29,7 @@ qed. (*** after_isid_dx *) corec lemma pr_after_isi_dx: - ∀f2. 𝐈❪f2❫ → ∀f1. f1 ⊚ f2 ≘ f1. + ∀f2. 𝐈❨f2❩ → ∀f1. f1 ⊚ f2 ≘ f1. #f2 * -f2 #f2 #g2 #Hf2 #H2 #f1 cases (pr_map_split_tl f1) #H1 [ /3 width=7 by pr_after_refl/ @@ -41,17 +41,17 @@ qed. (*** after_isid_inv_sn *) lemma pr_after_isi_inv_sn: - ∀f1,f2,f. f1 ⊚ f2 ≘ f → 𝐈❪f1❫ → f2 ≡ f. + ∀f1,f2,f. f1 ⊚ f2 ≘ f → 𝐈❨f1❩ → f2 ≡ f. /3 width=6 by pr_after_isi_sn, pr_after_mono/ qed-. (*** after_isid_inv_dx *) lemma pr_after_isi_inv_dx: - ∀f1,f2,f. f1 ⊚ f2 ≘ f → 𝐈❪f2❫ → f1 ≡ f. + ∀f1,f2,f. f1 ⊚ f2 ≘ f → 𝐈❨f2❩ → f1 ≡ f. /3 width=6 by pr_after_isi_dx, pr_after_mono/ qed-. (*** after_fwd_isid1 *) corec lemma pr_after_des_isi_sn: - ∀f1,f2,f. f1 ⊚ f2 ≘ f → 𝐈❪f❫ → 𝐈❪f1❫. + ∀f1,f2,f. f1 ⊚ f2 ≘ f → 𝐈❨f❩ → 𝐈❨f1❩. #f1 #f2 #f * -f1 -f2 -f #f1 #f2 #f #g1 [1,2: #g2 ] #g #Hf #H1 [1,2: #H2 ] #H0 #H [ /4 width=6 by pr_isi_inv_push, pr_isi_push/ ] @@ -60,7 +60,7 @@ qed-. (*** after_fwd_isid2 *) corec lemma pr_after_des_isi_dx: - ∀f1,f2,f. f1 ⊚ f2 ≘ f → 𝐈❪f❫ → 𝐈❪f2❫. + ∀f1,f2,f. f1 ⊚ f2 ≘ f → 𝐈❨f❩ → 𝐈❨f2❩. #f1 #f2 #f * -f1 -f2 -f #f1 #f2 #f #g1 [1,2: #g2 ] #g #Hf #H1 [1,2: #H2 ] #H0 #H [ /4 width=6 by pr_isi_inv_push, pr_isi_push/ ] @@ -69,5 +69,5 @@ qed-. (*** after_inv_isid3 *) lemma pr_after_inv_isi: - ∀f1,f2,f. f1 ⊚ f2 ≘ f → 𝐈❪f❫ → 𝐈❪f1❫ ∧ 𝐈❪f2❫. + ∀f1,f2,f. f1 ⊚ f2 ≘ f → 𝐈❨f❩ → 𝐈❨f1❩ ∧ 𝐈❨f2❩. /3 width=4 by pr_after_des_isi_dx, pr_after_des_isi_sn, conj/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_ist.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_ist.ma index 212888521..9756cd207 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_ist.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_ist.ma @@ -23,7 +23,7 @@ include "ground/relocation/pr_after_pat.ma". (*** after_istot_fwd *) lemma pr_after_ist_des: - ∀f2,f1,f. f2 ⊚ f1 ≘ f → 𝐓❪f2❫ → 𝐓❪f1❫ → 𝐓❪f❫. + ∀f2,f1,f. f2 ⊚ f1 ≘ f → 𝐓❨f2❩ → 𝐓❨f1❩ → 𝐓❨f❩. #f2 #f1 #f #Hf #Hf2 #Hf1 #i1 elim (Hf1 i1) -Hf1 #i2 #Hf1 elim (Hf2 i2) -Hf2 /3 width=7 by pr_after_des_pat, ex_intro/ @@ -31,14 +31,14 @@ qed-. (*** after_fwd_istot_dx *) lemma pr_after_des_ist_dx: - ∀f2,f1,f. f2 ⊚ f1 ≘ f → 𝐓❪f❫ → 𝐓❪f1❫. + ∀f2,f1,f. f2 ⊚ f1 ≘ f → 𝐓❨f❩ → 𝐓❨f1❩. #f2 #f1 #f #H #Hf #i1 elim (Hf i1) -Hf #i2 #Hf elim (pr_after_pat_des … Hf … H) -f /2 width=2 by ex_intro/ qed-. (*** after_fwd_istot_sn *) lemma pr_after_des_ist_sn: - ∀f2,f1,f. f2 ⊚ f1 ≘ f → 𝐓❪f❫ → 𝐓❪f2❫. + ∀f2,f1,f. f2 ⊚ f1 ≘ f → 𝐓❨f❩ → 𝐓❨f2❩. #f2 #f1 #f #H #Hf #i1 elim (Hf i1) -Hf #i #Hf elim (pr_after_pat_des … Hf … H) -f #i2 #Hf1 #Hf2 lapply (pr_pat_increasing … Hf1) -f1 @@ -47,15 +47,15 @@ qed-. (*** after_at1_fwd *) lemma pr_after_des_ist_pat: - ∀f1,i1,i2. @❪i1, f1❫ ≘ i2 → ∀f2. 𝐓❪f2❫ → ∀f. f2 ⊚ f1 ≘ f → - ∃∃i. @❪i2, f2❫ ≘ i & @❪i1, f❫ ≘ i. + ∀f1,i1,i2. @❨i1, f1❩ ≘ i2 → ∀f2. 𝐓❨f2❩ → ∀f. f2 ⊚ f1 ≘ f → + ∃∃i. @❨i2, f2❩ ≘ i & @❨i1, f❩ ≘ i. #f1 #i1 #i2 #Hf1 #f2 #Hf2 #f #Hf elim (Hf2 i2) -Hf2 /3 width=8 by pr_after_des_pat, ex2_intro/ qed-. lemma pr_after_des_ist_nat: - ∀f1,l1,l2. @↑❪l1, f1❫ ≘ l2 → ∀f2. 𝐓❪f2❫ → ∀f. f2 ⊚ f1 ≘ f → - ∃∃l. @↑❪l2, f2❫ ≘ l & @↑❪l1, f❫ ≘ l. + ∀f1,l1,l2. @↑❨l1, f1❩ ≘ l2 → ∀f2. 𝐓❨f2❩ → ∀f. f2 ⊚ f1 ≘ f → + ∃∃l. @↑❨l2, f2❩ ≘ l & @↑❨l1, f❩ ≘ l. #f1 #l1 #l2 #H1 #f2 #H2 #f #Hf elim (pr_after_des_ist_pat … H1 … H2 … Hf) -f1 -H2 /2 width=3 by ex2_intro/ @@ -65,5 +65,5 @@ qed-. (*** after_inv_istot *) lemma pr_after_inv_ist: - ∀f2,f1,f. f2 ⊚ f1 ≘ f → 𝐓❪f❫ → ∧∧ 𝐓❪f2❫ & 𝐓❪f1❫. + ∀f2,f1,f. f2 ⊚ f1 ≘ f → 𝐓❨f❩ → ∧∧ 𝐓❨f2❩ & 𝐓❨f1❩. /3 width=4 by pr_after_des_ist_sn, pr_after_des_ist_dx, conj/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_ist_isi.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_ist_isi.ma index ea312f5a0..4e17044de 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_ist_isi.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_ist_isi.ma @@ -21,7 +21,7 @@ include "ground/relocation/pr_after_ist.ma". (*** after_fwd_isid_sn *) lemma pr_after_des_ist_eq_sn: - ∀f2,f1,f. 𝐓❪f❫ → f2 ⊚ f1 ≘ f → f1 ≡ f → 𝐈❪f2❫. + ∀f2,f1,f. 𝐓❨f❩ → f2 ⊚ f1 ≘ f → f1 ≡ f → 𝐈❨f2❩. #f2 #f1 #f #H #Hf elim (pr_after_inv_ist … Hf H) -H #Hf2 #Hf1 #H @pr_isi_pat_total // -Hf2 #i2 #i #Hf2 elim (Hf1 i2) -Hf1 @@ -32,7 +32,7 @@ qed-. (*** after_fwd_isid_dx *) lemma pr_after_des_ist_eq_dx: - ∀f2,f1,f. 𝐓❪f❫ → f2 ⊚ f1 ≘ f → f2 ≡ f → 𝐈❪f1❫. + ∀f2,f1,f. 𝐓❨f❩ → f2 ⊚ f1 ≘ f → f2 ≡ f → 𝐈❨f1❩. #f2 #f1 #f #H #Hf elim (pr_after_inv_ist … Hf H) -H #Hf2 #Hf1 #H2 @pr_isi_pat_total // -Hf1 #i1 #i2 #Hi12 elim (pr_after_des_ist_pat … Hi12 … Hf) -f1 diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_isu.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_isu.ma index 311ba5542..c4109ea8a 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_isu.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_isu.ma @@ -21,7 +21,7 @@ include "ground/relocation/pr_after_uni.ma". (*** after_isid_isuni *) lemma pr_after_isu_isi_next: - ∀f1,f2. 𝐈❪f2❫ → 𝐔❪f1❫ → f1 ⊚ ↑f2 ≘ ↑f1. + ∀f1,f2. 𝐈❨f2❩ → 𝐔❨f1❩ → f1 ⊚ ↑f2 ≘ ↑f1. #f1 #f2 #Hf2 #H elim (pr_isu_inv_uni … H) -H #h #H /5 width=7 by pr_after_uni_isi_next, pr_after_eq_repl_back, pr_after_eq_repl_back_sn, pr_eq_next/ @@ -29,7 +29,7 @@ qed. (*** after_uni_next2 *) lemma pr_after_isu_next_sn: - ∀f2. 𝐔❪f2❫ → ∀f1,f. ↑f2 ⊚ f1 ≘ f → f2 ⊚ ↑f1 ≘ f. + ∀f2. 𝐔❨f2❩ → ∀f1,f. ↑f2 ⊚ f1 ≘ f → f2 ⊚ ↑f1 ≘ f. #f2 #H #f1 #f #Hf elim (pr_isu_inv_uni … H) -H #h #H /5 width=7 by pr_after_uni_next_sn, pr_after_eq_repl_fwd_sn, pr_after_eq_repl_back_sn, pr_eq_next/ diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_nat.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_nat.ma index 238a9116f..d23693202 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_nat.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_nat.ma @@ -20,24 +20,24 @@ include "ground/relocation/pr_after_pat.ma". (* Destructions with pr_nat *************************************************) lemma pr_after_nat_des (l) (l1): - ∀f. @↑❪l1, f❫ ≘ l → ∀f2,f1. f2 ⊚ f1 ≘ f → - ∃∃l2. @↑❪l1, f1❫ ≘ l2 & @↑❪l2, f2❫ ≘ l. + ∀f. @↑❨l1, f❩ ≘ l → ∀f2,f1. f2 ⊚ f1 ≘ f → + ∃∃l2. @↑❨l1, f1❩ ≘ l2 & @↑❨l2, f2❩ ≘ l. #l #l1 #f #H1 #f2 #f1 #Hf elim (pr_after_pat_des … H1 … Hf) -f #i2 #H1 #H2 /2 width=3 by ex2_intro/ qed-. lemma pr_after_des_nat (l) (l2) (l1): - ∀f1,f2. @↑❪l1, f1❫ ≘ l2 → @↑❪l2, f2❫ ≘ l → - ∀f. f2 ⊚ f1 ≘ f → @↑❪l1, f❫ ≘ l. + ∀f1,f2. @↑❨l1, f1❩ ≘ l2 → @↑❨l2, f2❩ ≘ l → + ∀f. f2 ⊚ f1 ≘ f → @↑❨l1, f❩ ≘ l. /2 width=6 by pr_after_des_pat/ qed-. lemma pr_after_des_nat_sn (l1) (l): - ∀f. @↑❪l1, f❫ ≘ l → ∀f1,l2. @↑❪l1, f1❫ ≘ l2 → - ∀f2. f2 ⊚ f1 ≘ f → @↑❪l2, f2❫ ≘ l. + ∀f. @↑❨l1, f❩ ≘ l → ∀f1,l2. @↑❨l1, f1❩ ≘ l2 → + ∀f2. f2 ⊚ f1 ≘ f → @↑❨l2, f2❩ ≘ l. /2 width=6 by pr_after_des_pat_sn/ qed-. lemma pr_after_des_nat_dx (l) (l2) (l1): - ∀f,f2. @↑❪l1, f❫ ≘ l → @↑❪l2, f2❫ ≘ l → - ∀f1. f2 ⊚ f1 ≘ f → @↑❪l1, f1❫ ≘ l2. + ∀f,f2. @↑❨l1, f❩ ≘ l → @↑❨l2, f2❩ ≘ l → + ∀f1. f2 ⊚ f1 ≘ f → @↑❨l1, f1❩ ≘ l2. /2 width=6 by pr_after_des_pat_dx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_nat_uni_tls.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_nat_uni_tls.ma index 82141bc33..3ef1f5096 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_nat_uni_tls.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_nat_uni_tls.ma @@ -23,7 +23,7 @@ include "ground/relocation/pr_after_isi.ma". (*** after_uni_dx *) lemma pr_after_nat_uni (l2) (l1): - ∀f2. @↑❪l1, f2❫ ≘ l2 → + ∀f2. @↑❨l1, f2❩ ≘ l2 → ∀f. f2 ⊚ 𝐮❨l1❩ ≘ f → 𝐮❨l2❩ ⊚ ⫰*[l2] f2 ≘ f. #l2 @(nat_ind_succ … l2) -l2 [ #l1 #f2 #Hf2 #f #Hf @@ -44,7 +44,7 @@ qed. (*** after_uni_sn *) lemma pr_nat_after_uni_tls (l2) (l1): - ∀f2. @↑❪l1, f2❫ ≘ l2 → + ∀f2. @↑❨l1, f2❩ ≘ l2 → ∀f. 𝐮❨l2❩ ⊚ ⫰*[l2] f2 ≘ f → f2 ⊚ 𝐮❨l1❩ ≘ f. #l2 @(nat_ind_succ … l2) -l2 [ #l1 #f2 #Hf2 #f #Hf diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_pat.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_pat.ma index 525658c99..c64136a65 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_pat.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_pat.ma @@ -21,8 +21,8 @@ include "ground/relocation/pr_after.ma". (*** after_at_fwd *) lemma pr_after_pat_des (i) (i1): - ∀f. @❪i1, f❫ ≘ i → ∀f2,f1. f2 ⊚ f1 ≘ f → - ∃∃i2. @❪i1, f1❫ ≘ i2 & @❪i2, f2❫ ≘ i. + ∀f. @❨i1, f❩ ≘ i → ∀f2,f1. f2 ⊚ f1 ≘ f → + ∃∃i2. @❨i1, f1❩ ≘ i2 & @❨i2, f2❩ ≘ i. #i elim i -i [2: #i #IH ] #i1 #f #Hf #f2 #f1 #Hf21 [ elim (pr_pat_inv_succ_dx … Hf) -Hf [1,3:* |*: // ] [1: #g #j1 #Hg #H0 #H |2,4: #g #Hg #H ] @@ -40,8 +40,8 @@ qed-. (*** after_fwd_at *) lemma pr_after_des_pat (i) (i2) (i1): - ∀f1,f2. @❪i1, f1❫ ≘ i2 → @❪i2, f2❫ ≘ i → - ∀f. f2 ⊚ f1 ≘ f → @❪i1, f❫ ≘ i. + ∀f1,f2. @❨i1, f1❩ ≘ i2 → @❨i2, f2❩ ≘ i → + ∀f. f2 ⊚ f1 ≘ f → @❨i1, f❩ ≘ i. #i elim i -i [2: #i #IH ] #i2 #i1 #f1 #f2 #Hf1 #Hf2 #f #Hf [ elim (pr_pat_inv_succ_dx … Hf2) -Hf2 [1,3: * |*: // ] #g2 [ #j2 ] #Hg2 [ #H22 ] #H20 @@ -60,16 +60,16 @@ qed-. (*** after_fwd_at2 *) lemma pr_after_des_pat_sn (i1) (i): - ∀f. @❪i1, f❫ ≘ i → ∀f1,i2. @❪i1, f1❫ ≘ i2 → - ∀f2. f2 ⊚ f1 ≘ f → @❪i2, f2❫ ≘ i. + ∀f. @❨i1, f❩ ≘ i → ∀f1,i2. @❨i1, f1❩ ≘ i2 → + ∀f2. f2 ⊚ f1 ≘ f → @❨i2, f2❩ ≘ i. #i1 #i #f #Hf #f1 #i2 #Hf1 #f2 #H elim (pr_after_pat_des … Hf … H) -f #j1 #H #Hf2 <(pr_pat_mono … Hf1 … H) -i1 -i2 // qed-. (*** after_fwd_at1 *) lemma pr_after_des_pat_dx (i) (i2) (i1): - ∀f,f2. @❪i1, f❫ ≘ i → @❪i2, f2❫ ≘ i → - ∀f1. f2 ⊚ f1 ≘ f → @❪i1, f1❫ ≘ i2. + ∀f,f2. @❨i1, f❩ ≘ i → @❨i2, f2❩ ≘ i → + ∀f1. f2 ⊚ f1 ≘ f → @❨i1, f1❩ ≘ i2. #i elim i -i [2: #i #IH ] #i2 #i1 #f #f2 #Hf #Hf2 #f1 #Hf1 [ elim (pr_pat_inv_succ_dx … Hf) -Hf [1,3: * |*: // ] #g [ #j1 ] #Hg [ #H01 ] #H00 diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_pat_tls.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_pat_tls.ma index ec6fb7692..02f2aee66 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_pat_tls.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_pat_tls.ma @@ -23,7 +23,7 @@ include "ground/relocation/pr_after.ma". (* Note: this requires ↑ on first n *) (*** after_tls *) lemma pr_after_tls_sn_tls (n): - ∀f1,f2,f. @❪𝟏, f1❫ ≘ ↑n → + ∀f1,f2,f. @❨𝟏, f1❩ ≘ ↑n → f1 ⊚ f2 ≘ f → ⫰*[n]f1 ⊚ f2 ≘ ⫰*[n]f. #n @(nat_ind_succ … n) -n // #n #IH #f1 #f2 #f #Hf1 #Hf diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_pat_uni_tls.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_pat_uni_tls.ma index f2ce2caa2..588978f6b 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_pat_uni_tls.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_pat_uni_tls.ma @@ -24,7 +24,7 @@ include "ground/relocation/pr_after_isi.ma". (*** after_uni_succ_dx *) lemma pr_after_pat_uni (i2) (i1): - ∀f2. @❪i1, f2❫ ≘ i2 → + ∀f2. @❨i1, f2❩ ≘ i2 → ∀f. f2 ⊚ 𝐮❨i1❩ ≘ f → 𝐮❨i2❩ ⊚ ⫰*[i2] f2 ≘ f. #i2 elim i2 -i2 [ #i1 #f2 #Hf2 #f #Hf @@ -46,7 +46,7 @@ qed. (*** after_uni_succ_sn *) lemma pr_pat_after_uni_tls (i2) (i1): - ∀f2. @❪i1, f2❫ ≘ i2 → + ∀f2. @❨i1, f2❩ ≘ i2 → ∀f. 𝐮❨i2❩ ⊚ ⫰*[i2] f2 ≘ f → f2 ⊚ 𝐮❨i1❩ ≘ f. #i2 elim i2 -i2 [ #i1 #f2 #Hf2 #f #Hf diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_uni.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_uni.ma index e74d8e0f7..6d962f5c8 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_uni.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_after_uni.ma @@ -35,7 +35,7 @@ lemma pr_after_uni_sn_pushs (h): qed. lemma pr_after_uni_isi_next (h1): - ∀f2. 𝐈❪f2❫ → 𝐮❨h1❩ ⊚ ↑f2 ≘ ↑𝐮❨h1❩. + ∀f2. 𝐈❨f2❩ → 𝐮❨h1❩ ⊚ ↑f2 ≘ ↑𝐮❨h1❩. #h1 @(nat_ind_succ … h1) -h1 /5 width=7 by pr_after_isi_dx, pr_after_eq_repl_back_sn, pr_after_next, pr_after_push, pr_isi_inv_eq_push/ qed. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_coafter_ist.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_coafter_ist.ma index 13681ff13..d627e2597 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_coafter_ist.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_coafter_ist.ma @@ -20,14 +20,14 @@ include "ground/relocation/pr_coafter_nat_tls.ma". (*** H_coafter_inj *) definition H_pr_coafter_inj: predicate pr_map ≝ - λf1. 𝐓❪f1❫ → + λf1. 𝐓❨f1❩ → ∀f,f21,f22. f1 ~⊚ f21 ≘ f → f1 ~⊚ f22 ≘ f → f21 ≡ f22. (* Main destructions with pr_ist ********************************************) (*** coafter_inj_O_aux *) corec fact pr_coafter_inj_unit_aux: - ∀f1. @❪𝟏, f1❫ ≘ 𝟏 → H_pr_coafter_inj f1. + ∀f1. @❨𝟏, f1❩ ≘ 𝟏 → H_pr_coafter_inj f1. #f1 #H1f1 #H2f1 #f #f21 #f22 #H1f #H2f cases (pr_pat_inv_unit_bi … H1f1) -H1f1 [ |*: // ] #g1 #H1 lapply (pr_ist_inv_push … H2f1 … H1) -H2f1 #H2g1 @@ -44,8 +44,8 @@ qed-. (*** coafter_inj_aux *) fact pr_coafter_inj_aux: - (∀f1. @❪𝟏, f1❫ ≘ 𝟏 → H_pr_coafter_inj f1) → - ∀i2,f1. @❪𝟏, f1❫ ≘ i2 → H_pr_coafter_inj f1. + (∀f1. @❨𝟏, f1❩ ≘ 𝟏 → H_pr_coafter_inj f1) → + ∀i2,f1. @❨𝟏, f1❩ ≘ i2 → H_pr_coafter_inj f1. #H0 #i2 elim i2 -i2 /2 width=1 by/ -H0 #i2 #IH #f1 #H1f1 #H2f1 #f #f21 #f22 #H1f #H2f elim (pr_pat_inv_unit_succ … H1f1) -H1f1 [ |*: // ] #g1 #H1g1 #H1 diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_isi.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_isi.ma index c8e71eef9..7bed357e1 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_isi.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_isi.ma @@ -21,7 +21,7 @@ include "ground/relocation/pr_coafter_coafter.ma". (*** coafter_isid_sn *) corec lemma pr_coafter_isi_sn: - ∀f1. 𝐈❪f1❫ → ∀f2. f1 ~⊚ f2 ≘ f2. + ∀f1. 𝐈❨f1❩ → ∀f2. f1 ~⊚ f2 ≘ f2. #f1 * -f1 #f1 #g1 #Hf1 #H1 #f2 cases (pr_map_split_tl f2) #H2 /3 width=7 by pr_coafter_push, pr_coafter_refl/ @@ -29,7 +29,7 @@ qed. (*** coafter_isid_dx *) corec lemma pr_coafter_isi_dx: - ∀f2,f. 𝐈❪f2❫ → 𝐈❪f❫ → ∀f1. f1 ~⊚ f2 ≘ f. + ∀f2,f. 𝐈❨f2❩ → 𝐈❨f❩ → ∀f1. f1 ~⊚ f2 ≘ f. #f2 #f * -f2 #f2 #g2 #Hf2 #H2 * -f #f #g #Hf #H #f1 cases (pr_map_split_tl f1) #H1 [ /3 width=7 by pr_coafter_refl/ @@ -41,10 +41,10 @@ qed. (*** coafter_isid_inv_sn *) lemma pr_coafter_isi_inv_sn: - ∀f1,f2,f. f1 ~⊚ f2 ≘ f → 𝐈❪f1❫ → f2 ≡ f. + ∀f1,f2,f. f1 ~⊚ f2 ≘ f → 𝐈❨f1❩ → f2 ≡ f. /3 width=6 by pr_coafter_isi_sn, pr_coafter_mono/ qed-. (*** coafter_isid_inv_dx *) lemma pr_coafter_isi_inv_dx: - ∀f1,f2,f. f1 ~⊚ f2 ≘ f → 𝐈❪f2❫ → 𝐈❪f❫. + ∀f1,f2,f. f1 ~⊚ f2 ≘ f → 𝐈❨f2❩ → 𝐈❨f❩. /4 width=4 by pr_eq_id_isi, pr_coafter_isi_dx, pr_coafter_mono/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_ist_isf.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_ist_isf.ma index c3f818592..07e81d67a 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_ist_isf.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_ist_isf.ma @@ -22,13 +22,13 @@ include "ground/relocation/pr_coafter_isi.ma". (*** H_coafter_isfin2_fwd *) definition H_pr_coafter_des_ist_isf: predicate pr_map ≝ - λf1. ∀f2. 𝐅❪f2❫ → 𝐓❪f1❫ → ∀f. f1 ~⊚ f2 ≘ f → 𝐅❪f❫. + λf1. ∀f2. 𝐅❨f2❩ → 𝐓❨f1❩ → ∀f. f1 ~⊚ f2 ≘ f → 𝐅❨f❩. (* Destructions with pr_ist and pr_isf **************************************) (*** coafter_isfin2_fwd_O_aux *) fact pr_coafter_des_ist_isf_unit_aux: - ∀f1. @❪𝟏, f1❫ ≘ 𝟏 → H_pr_coafter_des_ist_isf f1. + ∀f1. @❨𝟏, f1❩ ≘ 𝟏 → H_pr_coafter_des_ist_isf f1. #f1 #Hf1 #f2 #H generalize in match Hf1; generalize in match f1; -f1 @(pr_isf_ind … H) -f2 @@ -44,8 +44,8 @@ qed-. (*** coafter_isfin2_fwd_aux *) fact pr_coafter_des_ist_isf_aux: - (∀f1. @❪𝟏, f1❫ ≘ 𝟏 → H_pr_coafter_des_ist_isf f1) → - ∀i2,f1. @❪𝟏, f1❫ ≘ i2 → H_pr_coafter_des_ist_isf f1. + (∀f1. @❨𝟏, f1❩ ≘ 𝟏 → H_pr_coafter_des_ist_isf f1) → + ∀i2,f1. @❨𝟏, f1❩ ≘ i2 → H_pr_coafter_des_ist_isf f1. #H0 #i2 elim i2 -i2 /2 width=1 by/ -H0 #i2 #IH #f1 #H1f1 #f2 #Hf2 #H2f1 #f #Hf elim (pr_pat_inv_unit_succ … H1f1) -H1f1 [ |*: // ] #g1 #Hg1 #H1 diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_ist_isi.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_ist_isi.ma index d3dc9e6e1..50a68b5fb 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_ist_isi.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_ist_isi.ma @@ -21,13 +21,13 @@ include "ground/relocation/pr_coafter_nat_tls.ma". (*** H_coafter_fwd_isid2 *) definition H_pr_coafter_des_ist_sn_isi: predicate pr_map ≝ - λf1. ∀f2,f. f1 ~⊚ f2 ≘ f → 𝐓❪f1❫ → 𝐈❪f❫ → 𝐈❪f2❫. + λf1. ∀f2,f. f1 ~⊚ f2 ≘ f → 𝐓❨f1❩ → 𝐈❨f❩ → 𝐈❨f2❩. (* Destructions with pr_ist and pr_isi **************************************) (*** coafter_fwd_isid2_O_aux *) corec fact pr_coafter_des_ist_sn_isi_unit_aux: - ∀f1. @❪𝟏, f1❫ ≘ 𝟏 → H_pr_coafter_des_ist_sn_isi f1. + ∀f1. @❨𝟏, f1❩ ≘ 𝟏 → H_pr_coafter_des_ist_sn_isi f1. #f1 #H1f1 #f2 #f #H #H2f1 #Hf cases (pr_pat_inv_unit_bi … H1f1) -H1f1 [ |*: // ] #g1 #H1 lapply (pr_ist_inv_push … H2f1 … H1) -H2f1 #H2g1 @@ -42,8 +42,8 @@ qed-. (*** coafter_fwd_isid2_aux *) fact pr_coafter_des_ist_sn_isi_aux: - (∀f1. @❪𝟏, f1❫ ≘ 𝟏 → H_pr_coafter_des_ist_sn_isi f1) → - ∀i2,f1. @❪𝟏, f1❫ ≘ i2 → H_pr_coafter_des_ist_sn_isi f1. + (∀f1. @❨𝟏, f1❩ ≘ 𝟏 → H_pr_coafter_des_ist_sn_isi f1) → + ∀i2,f1. @❨𝟏, f1❩ ≘ i2 → H_pr_coafter_des_ist_sn_isi f1. #H0 #i2 elim i2 -i2 /2 width=1 by/ -H0 #i2 #IH #f1 #H1f1 #f2 #f #H #H2f1 #Hf elim (pr_pat_inv_unit_succ … H1f1) -H1f1 [ |*: // ] #g1 #Hg1 #H1 diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_isu.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_isu.ma index 01d0d956e..999dad992 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_isu.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_isu.ma @@ -22,7 +22,7 @@ include "ground/relocation/pr_coafter_uni_pushs.ma". (*** coafter_isuni_isid *) lemma pr_coafter_isu_isi: - ∀f2. 𝐈❪f2❫ → ∀f1. 𝐔❪f1❫ → f1 ~⊚ f2 ≘ f2. + ∀f2. 𝐈❨f2❩ → ∀f1. 𝐔❨f1❩ → f1 ~⊚ f2 ≘ f2. #f #Hf #g #H elim (pr_isu_inv_uni … H) -H #n #H /5 width=4 by pr_isi_pushs, pr_isi_inv_eq_repl, pr_coafter_eq_repl_back, pr_coafter_eq_repl_back_sn/ diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_nat_tls.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_nat_tls.ma index f3b7ba710..421e8a0b4 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_nat_tls.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_nat_tls.ma @@ -22,7 +22,7 @@ include "ground/relocation/pr_coafter.ma". (*** coafter_tls *) lemma pr_coafter_tls_bi_tls (n2) (n1): - ∀f1,f2,f. @↑❪n1, f1❫ ≘ n2 → + ∀f1,f2,f. @↑❨n1, f1❩ ≘ n2 → f1 ~⊚ f2 ≘ f → ⫰*[n2]f1 ~⊚ ⫰*[n1]f2 ≘ ⫰*[n2]f. #n2 @(nat_ind_succ … n2) -n2 [ #n1 | #n2 #IH * [| #n1 ] ] #f1 #f2 #f #Hf1 #Hf [ elim (pr_nat_inv_zero_dx … Hf1) -Hf1 [ |*: // ] #g1 #Hg1 #H1 destruct // @@ -40,6 +40,6 @@ qed. (*** coafter_tls_O *) lemma pr_coafter_tls_sn_tls: - ∀n,f1,f2,f. @↑❪𝟎, f1❫ ≘ n → + ∀n,f1,f2,f. @↑❨𝟎, f1❩ ≘ n → f1 ~⊚ f2 ≘ f → ⫰*[n]f1 ~⊚ f2 ≘ ⫰*[n]f. /2 width=1 by pr_coafter_tls_bi_tls/ qed. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_nat_tls_pushs.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_nat_tls_pushs.ma index 9445dccd0..1690ffe91 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_nat_tls_pushs.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_nat_tls_pushs.ma @@ -23,7 +23,7 @@ include "ground/relocation/pr_coafter.ma". (*** coafter_fwd_pushs *) lemma pr_coafter_des_pushs_dx (n) (m): - ∀g2,f1,g. g2 ~⊚ ⫯*[m]f1 ≘ g → @↑❪m, g2❫ ≘ n → + ∀g2,f1,g. g2 ~⊚ ⫯*[m]f1 ≘ g → @↑❨m, g2❩ ≘ n → ∃∃f. ⫰*[n]g2 ~⊚ f1 ≘ f & ⫯*[n] f = g. #n @(nat_ind_succ … n) -n [ #m #g2 #f1 #g #Hg #H diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_pat_tls.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_pat_tls.ma index d4a9865c5..935810249 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_pat_tls.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_coafter_pat_tls.ma @@ -23,7 +23,7 @@ include "ground/relocation/pr_coafter_nat_tls.ma". (*** coafter_tls_succ *) lemma pr_coafter_tls_tl_tls: ∀g2,g1,g. g2 ~⊚ g1 ≘ g → - ∀j. @❪𝟏, g2❫ ≘ j → ⫰*[j]g2 ~⊚ ⫰g1 ≘ ⫰*[j]g. + ∀j. @❨𝟏, g2❩ ≘ j → ⫰*[j]g2 ~⊚ ⫰g1 ≘ ⫰*[j]g. #g2 #g1 #g #Hg #j #Hg2 lapply (pr_nat_pred_bi … Hg2) -Hg2 #Hg2 lapply (pr_coafter_tls_bi_tls … Hg2 … Hg) -Hg #Hg @@ -35,7 +35,7 @@ qed. (* Note: parked for now lemma coafter_fwd_xpx_pushs: - ∀g2,f1,g,i,j. @❪i, g2❫ ≘ j → g2 ~⊚ ⫯*[i]⫯f1 ≘ g → + ∀g2,f1,g,i,j. @❨i, g2❩ ≘ j → g2 ~⊚ ⫯*[i]⫯f1 ≘ g → ∃∃f. ⫰*[↑j]g2 ~⊚ f1 ≘ f & ⫯*[j]⫯f = g. #g2 #g1 #g #i #j #Hg2 (eq_inv_pr_push_bi … H) -f // @@ -44,7 +44,7 @@ lemma pr_fcla_inv_push (g) (m): 𝐂❪g❫ ≘ m → ∀f. ⫯f = g → 𝐂❪ qed-. (*** fcla_inv_nx *) -lemma pr_fcla_inv_next (g) (m): 𝐂❪g❫ ≘ m → ∀f. ↑f = g → ∃∃n. 𝐂❪f❫ ≘ n & ↑n = m. +lemma pr_fcla_inv_next (g) (m): 𝐂❨g❩ ≘ m → ∀f. ↑f = g → ∃∃n. 𝐂❨f❩ ≘ n & ↑n = m. #g #m * -g -m [ #g #Hg #f #H destruct elim (pr_isi_inv_next … Hg) -Hg // @@ -57,25 +57,25 @@ qed-. (* Advanced inversions ******************************************************) (*** cla_inv_nn *) -lemma pr_cla_inv_next_succ (g) (m): 𝐂❪g❫ ≘ m → ∀f,n. ↑f = g → ↑n = m → 𝐂❪f❫ ≘ n. +lemma pr_cla_inv_next_succ (g) (m): 𝐂❨g❩ ≘ m → ∀f,n. ↑f = g → ↑n = m → 𝐂❨f❩ ≘ n. #g #m #H #f #n #H1 #H2 elim (pr_fcla_inv_next … H … H1) -g #x #Hf #H destruct <(eq_inv_nsucc_bi … H) -n // qed-. (*** cla_inv_np *) -lemma pr_cla_inv_next_zero (g) (m): 𝐂❪g❫ ≘ m → ∀f. ↑f = g → 𝟎 = m → ⊥. +lemma pr_cla_inv_next_zero (g) (m): 𝐂❨g❩ ≘ m → ∀f. ↑f = g → 𝟎 = m → ⊥. #g #m #H #f #H1 elim (pr_fcla_inv_next … H … H1) -g #x #_ #H1 #H2 destruct /2 width=2 by eq_inv_zero_nsucc/ qed-. (*** fcla_inv_xp *) -lemma pr_fcla_inv_zero (g) (m): 𝐂❪g❫ ≘ m → 𝟎 = m → 𝐈❪g❫. +lemma pr_fcla_inv_zero (g) (m): 𝐂❨g❩ ≘ m → 𝟎 = m → 𝐈❨g❩. #g #m #H elim H -g -m /3 width=3 by pr_isi_push/ #g #m #_ #_ #H destruct elim (eq_inv_zero_nsucc … H) qed-. (*** fcla_inv_isid *) -lemma pr_fcla_inv_isi (g) (m): 𝐂❪g❫ ≘ m → 𝐈❪g❫ → 𝟎 = m. +lemma pr_fcla_inv_isi (g) (m): 𝐂❨g❩ ≘ m → 𝐈❨g❩ → 𝟎 = m. #f #n #H elim H -f -n /3 width=3 by pr_isi_inv_push/ #f #n #_ #_ #H elim (pr_isi_inv_next … H) -H // qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_fcla_eq.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_fcla_eq.ma index 0ad95fadd..3675cd9f2 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_fcla_eq.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_fcla_eq.ma @@ -21,7 +21,7 @@ include "ground/relocation/pr_fcla.ma". (*** fcla_eq_repl_back *) lemma pr_fcla_eq_repl_back (n): - pr_eq_repl_back … (λf. 𝐂❪f❫ ≘ n). + pr_eq_repl_back … (λf. 𝐂❨f❩ ≘ n). #n #f1 #H elim H -f1 -n /3 width=3 by pr_fcla_isi, pr_isi_eq_repl_back/ #f1 #n #_ #IH #g2 #H [ elim (pr_eq_inv_push_sn … H) | elim (pr_eq_inv_next_sn … H) ] -H /3 width=3 by pr_fcla_push, pr_fcla_next/ @@ -29,6 +29,6 @@ qed-. (*** fcla_eq_repl_fwd *) lemma fcla_eq_repl_fwd (n): - pr_eq_repl_fwd … (λf. 𝐂❪f❫ ≘ n). + pr_eq_repl_fwd … (λf. 𝐂❨f❩ ≘ n). #n @pr_eq_repl_sym /2 width=3 by pr_fcla_eq_repl_back/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_fcla_fcla.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_fcla_fcla.ma index 8aa59f952..0c3481a21 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_fcla_fcla.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_fcla_fcla.ma @@ -20,7 +20,7 @@ include "ground/relocation/pr_fcla.ma". (*** fcla_mono *) theorem pr_fcla_mono (f): - ∀n1. 𝐂❪f❫ ≘ n1 → ∀n2. 𝐂❪f❫ ≘ n2 → n1 = n2. + ∀n1. 𝐂❨f❩ ≘ n1 → ∀n2. 𝐂❨f❩ ≘ n2 → n1 = n2. #f #n #H elim H -f -n [ /2 width=3 by pr_fcla_inv_isi/ | /3 width=3 by pr_fcla_inv_push/ diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_fcla_uni.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_fcla_uni.ma index 60fbf8979..d2d7922df 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_fcla_uni.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_fcla_uni.ma @@ -20,7 +20,7 @@ include "ground/relocation/pr_fcla.ma". (* Constructions with pr_uni ************************************************) (*** fcla_uni *) -lemma pr_fcla_uni (n): 𝐂❪𝐮❨n❩❫ ≘ n. +lemma pr_fcla_uni (n): 𝐂❨𝐮❨n❩❩ ≘ n. #n @(nat_ind_succ … n) -n /2 width=1 by pr_fcla_isi, pr_fcla_next/ qed. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isd.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isd.ma index cc959099f..18e9bb2ce 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isd.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isd.ma @@ -31,7 +31,7 @@ interpretation (* Basic inversions *********************************************************) (*** isdiv_inv_gen *) -lemma pr_isd_inv_gen (g): 𝛀❪g❫ → ∃∃f. 𝛀❪f❫ & ↑f = g. +lemma pr_isd_inv_gen (g): 𝛀❨g❩ → ∃∃f. 𝛀❨f❩ & ↑f = g. #g * -g #f #g #Hf * /2 width=3 by ex2_intro/ qed-. @@ -39,13 +39,13 @@ qed-. (* Advanced inversions ******************************************************) (*** isdiv_inv_next *) -lemma pr_isd_inv_next (g): 𝛀❪g❫ → ∀f. ↑f = g → 𝛀❪f❫. +lemma pr_isd_inv_next (g): 𝛀❨g❩ → ∀f. ↑f = g → 𝛀❨f❩. #g #H elim (pr_isd_inv_gen … H) -H #f #Hf * -g #g #H >(eq_inv_pr_next_bi … H) -H // qed-. (*** isdiv_inv_push *) -lemma pr_isd_inv_push (g): 𝛀❪g❫ → ∀f. ⫯f = g → ⊥. +lemma pr_isd_inv_push (g): 𝛀❨g❩ → ∀f. ⫯f = g → ⊥. #g #H elim (pr_isd_inv_gen … H) -H #f #Hf * -g #g #H elim (eq_inv_pr_push_next … H) qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isd_eq.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isd_eq.ma index 49a304e1c..a6000c810 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isd_eq.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isd_eq.ma @@ -35,7 +35,7 @@ lemma pr_isd_eq_repl_fwd: (* Main inversions with pr_eq ***********************************************) (*** isdiv_inv_eq_repl *) -corec theorem pr_isd_inv_eq_repl (g1) (g2): 𝛀❪g1❫ → 𝛀❪g2❫ → g1 ≡ g2. +corec theorem pr_isd_inv_eq_repl (g1) (g2): 𝛀❨g1❩ → 𝛀❨g2❩ → g1 ≡ g2. #H1 #H2 cases (pr_isd_inv_gen … H1) -H1 cases (pr_isd_inv_gen … H2) -H2 @@ -45,13 +45,13 @@ qed-. (* Alternative definition with pr_eq ****************************************) (*** eq_next_isdiv *) -corec lemma pr_eq_next_isd (f): ↑f ≡ f → 𝛀❪f❫. +corec lemma pr_eq_next_isd (f): ↑f ≡ f → 𝛀❨f❩. #H cases (pr_eq_inv_next_sn … H) -H /4 width=3 by pr_isd_next, pr_eq_trans/ qed. (*** eq_next_inv_isdiv *) -corec lemma pr_eq_next_inv_isd (g): 𝛀❪g❫ → ↑g ≡ g. +corec lemma pr_eq_next_inv_isd (g): 𝛀❨g❩ → ↑g ≡ g. * -g #f #g #Hf * /3 width=5 by pr_eq_next/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isd_nexts.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isd_nexts.ma index c7dcd74ef..402679da3 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isd_nexts.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isd_nexts.ma @@ -20,13 +20,13 @@ include "ground/relocation/pr_isd.ma". (* Constructions with pr_nexts **********************************************) (*** isdiv_nexts *) -lemma pr_isd_nexts (n) (f): 𝛀❪f❫ → 𝛀❪↑*[n]f❫. +lemma pr_isd_nexts (n) (f): 𝛀❨f❩ → 𝛀❨↑*[n]f❩. #n @(nat_ind_succ … n) -n /3 width=3 by pr_isd_next/ qed. (* Inversions with pr_nexts *************************************************) (*** isdiv_inv_nexts *) -lemma pr_isd_inv_nexts (n) (g): 𝛀❪↑*[n]g❫ → 𝛀❪g❫. +lemma pr_isd_inv_nexts (n) (g): 𝛀❨↑*[n]g❩ → 𝛀❨g❩. #n @(nat_ind_succ … n) -n /3 width=3 by pr_isd_inv_next/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isd_tl.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isd_tl.ma index 50f83a41c..7406b90af 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isd_tl.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isd_tl.ma @@ -20,7 +20,7 @@ include "ground/relocation/pr_isd.ma". (* Constructions with pr_tl *************************************************) (*** isdiv_tl *) -lemma pr_isd_tl (f): 𝛀❪f❫ → 𝛀❪⫰f❫. +lemma pr_isd_tl (f): 𝛀❨f❩ → 𝛀❨⫰f❩. #f cases (pr_map_split_tl f) * #H [ elim (pr_isd_inv_push … H) -H // | /2 width=3 by pr_isd_inv_next/ diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isd_tls.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isd_tls.ma index 4f3d80e1a..82cd63953 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isd_tls.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isd_tls.ma @@ -20,6 +20,6 @@ include "ground/relocation/pr_isd_tl.ma". (* Constructions with pr_tls ************************************************) (*** isdiv_tls *) -lemma pr_isd_tls (n) (g): 𝛀❪g❫ → 𝛀❪⫰*[n]g❫. +lemma pr_isd_tls (n) (g): 𝛀❨g❩ → 𝛀❨⫰*[n]g❩. #n @(nat_ind_succ … n) -n /3 width=1 by pr_isd_tl/ qed. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isf.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isf.ma index 3a68c00f5..df5343cb8 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isf.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isf.ma @@ -19,7 +19,7 @@ include "ground/relocation/pr_fcla.ma". (*** isfin *) definition pr_isf: predicate pr_map ≝ - λf. ∃n. 𝐂❪f❫ ≘ n. + λf. ∃n. 𝐂❨f❩ ≘ n. interpretation "finite colength condition (partial relocation maps)" @@ -29,10 +29,10 @@ interpretation (*** isfin_ind *) lemma pr_isf_ind (Q:predicate …): - (∀f. 𝐈❪f❫ → Q f) → - (∀f. 𝐅❪f❫ → Q f → Q (⫯f)) → - (∀f. 𝐅❪f❫ → Q f → Q (↑f)) → - ∀f. 𝐅❪f❫ → Q f. + (∀f. 𝐈❨f❩ → Q f) → + (∀f. 𝐅❨f❩ → Q f → Q (⫯f)) → + (∀f. 𝐅❨f❩ → Q f → Q (↑f)) → + ∀f. 𝐅❨f❩ → Q f. #Q #IH1 #IH2 #IH3 #f #H elim H -H #n #H elim H -f -n /3 width=2 by ex_intro/ qed-. @@ -40,12 +40,12 @@ qed-. (* Basic inversions *********************************************************) (*** isfin_inv_push *) -lemma pr_isf_inv_push (g): 𝐅❪g❫ → ∀f. ⫯f = g → 𝐅❪f❫. +lemma pr_isf_inv_push (g): 𝐅❨g❩ → ∀f. ⫯f = g → 𝐅❨f❩. #g * /3 width=4 by pr_fcla_inv_push, ex_intro/ qed-. (*** isfin_inv_next *) -lemma pr_isf_inv_next (g): 𝐅❪g❫ → ∀f. ↑f = g → 𝐅❪f❫. +lemma pr_isf_inv_next (g): 𝐅❨g❩ → ∀f. ↑f = g → 𝐅❨f❩. #g * #n #H #f #H0 elim (pr_fcla_inv_next … H … H0) -g /2 width=2 by ex_intro/ qed-. @@ -53,15 +53,15 @@ qed-. (* Basic constructions ******************************************************) (*** isfin_isid *) -lemma pr_isf_isi (f): 𝐈❪f❫ → 𝐅❪f❫. +lemma pr_isf_isi (f): 𝐈❨f❩ → 𝐅❨f❩. /3 width=2 by pr_fcla_isi, ex_intro/ qed. (*** isfin_push *) -lemma pr_isf_push (f): 𝐅❪f❫ → 𝐅❪⫯f❫. +lemma pr_isf_push (f): 𝐅❨f❩ → 𝐅❨⫯f❩. #f * /3 width=2 by pr_fcla_push, ex_intro/ qed. (*** isfin_next *) -lemma pr_isf_next (f): 𝐅❪f❫ → 𝐅❪↑f❫. +lemma pr_isf_next (f): 𝐅❨f❩ → 𝐅❨↑f❩. #f * /3 width=2 by pr_fcla_next, ex_intro/ qed. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isf_isu.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isf_isu.ma index e6a1b74a2..1a369df3a 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isf_isu.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isf_isu.ma @@ -20,7 +20,7 @@ include "ground/relocation/pr_isf.ma". (* Constructions with pr_isu ************************************************) (*** isuni_fwd_isfin *) -lemma pr_isf_isu (f): 𝐔❪f❫ → 𝐅❪f❫. +lemma pr_isf_isu (f): 𝐔❨f❩ → 𝐅❨f❩. #f #H elim H -f /3 width=1 by pr_isf_next, pr_isf_isi/ qed. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isf_pushs.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isf_pushs.ma index e084ab7cb..a4c9e1b55 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isf_pushs.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isf_pushs.ma @@ -20,13 +20,13 @@ include "ground/relocation/pr_isf.ma". (* Constructions with pr_pushs **********************************************) (*** isfin_pushs *) -lemma pr_isf_pushs (n) (f): 𝐅❪f❫ → 𝐅❪⫯*[n]f❫. +lemma pr_isf_pushs (n) (f): 𝐅❨f❩ → 𝐅❨⫯*[n]f❩. #n @(nat_ind_succ … n) -n /3 width=3 by pr_isf_push/ qed. (* Inversions with pr_pushs *************************************************) (*** isfin_inv_pushs *) -lemma pr_isf_inv_pushs (n) (g): 𝐅❪⫯*[n]g❫ → 𝐅❪g❫. +lemma pr_isf_inv_pushs (n) (g): 𝐅❨⫯*[n]g❩ → 𝐅❨g❩. #n @(nat_ind_succ … n) -n /3 width=3 by pr_isf_inv_push/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isf_tl.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isf_tl.ma index 3bb1a4e2b..7bd5a8ac3 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isf_tl.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isf_tl.ma @@ -20,7 +20,7 @@ include "ground/relocation/pr_isf.ma". (* Constructions with pr_tl *************************************************) (*** isfin_tl *) -lemma pr_isf_tl (f): 𝐅❪f❫ → 𝐅❪⫰f❫. +lemma pr_isf_tl (f): 𝐅❨f❩ → 𝐅❨⫰f❩. #f elim (pr_map_split_tl f) * #Hf /3 width=3 by pr_isf_inv_push, pr_isf_inv_next/ qed. @@ -28,7 +28,7 @@ qed. (* Inversions with pr_tl ****************************************************) (*** isfin_inv_tl *) -lemma pr_isf_inv_tl (g): 𝐅❪⫰g❫ → 𝐅❪g❫. +lemma pr_isf_inv_tl (g): 𝐅❨⫰g❩ → 𝐅❨g❩. #f elim (pr_map_split_tl f) * #Hf /2 width=1 by pr_isf_next, pr_isf_push/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isf_tls.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isf_tls.ma index 4fe40515a..cd4787011 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isf_tls.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isf_tls.ma @@ -19,13 +19,13 @@ include "ground/relocation/pr_isf_tl.ma". (* Constructions with pr_tls ************************************************) -lemma pr_isf_tls (n) (f): 𝐅❪f❫ → 𝐅❪⫰*[n]f❫. +lemma pr_isf_tls (n) (f): 𝐅❨f❩ → 𝐅❨⫰*[n]f❩. #n @(nat_ind_succ … n) -n /3 width=1 by pr_isf_tl/ qed. (* Inversions with pr_tls ***************************************************) (*** isfin_inv_tls *) -lemma pr_isf_inv_tls (n) (g): 𝐅❪⫰*[n]g❫ → 𝐅❪g❫. +lemma pr_isf_inv_tls (n) (g): 𝐅❨⫰*[n]g❩ → 𝐅❨g❩. #n @(nat_ind_succ … n) -n /3 width=1 by pr_isf_inv_tl/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isf_uni.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isf_uni.ma index 74132ecc1..70813ccb9 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isf_uni.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isf_uni.ma @@ -20,5 +20,5 @@ include "ground/relocation/pr_isf.ma". (* Constructions with pr_uni ************************************************) (*** isfin_uni *) -lemma pr_isf_uni (n): 𝐅❪𝐮❨n❩❫. +lemma pr_isf_uni (n): 𝐅❨𝐮❨n❩❩. /3 width=2 by ex_intro/ qed. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi.ma index ec89ac708..0dac100e5 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi.ma @@ -31,7 +31,7 @@ interpretation (* Basic inversions *********************************************************) (*** isid_inv_gen *) -lemma pr_isi_inv_gen (g): 𝐈❪g❫ → ∃∃f. 𝐈❪f❫ & ⫯f = g. +lemma pr_isi_inv_gen (g): 𝐈❨g❩ → ∃∃f. 𝐈❨f❩ & ⫯f = g. #g * -g #f #g #Hf /2 width=3 by ex2_intro/ qed-. @@ -39,7 +39,7 @@ qed-. (* Advanced inversions ******************************************************) (*** isid_inv_push *) -lemma pr_isi_inv_push (g): 𝐈❪g❫ → ∀f. ⫯f = g → 𝐈❪f❫. +lemma pr_isi_inv_push (g): 𝐈❨g❩ → ∀f. ⫯f = g → 𝐈❨f❩. #g #H elim (pr_isi_inv_gen … H) -H #f #Hf * -g #g #H @@ -47,7 +47,7 @@ elim (pr_isi_inv_gen … H) -H #f #Hf qed-. (*** isid_inv_next *) -lemma pr_isi_inv_next (g): 𝐈❪g❫ → ∀f. ↑f = g → ⊥. +lemma pr_isi_inv_next (g): 𝐈❨g❩ → ∀f. ↑f = g → ⊥. #g #H elim (pr_isi_inv_gen … H) -H #f #Hf * -g #g #H elim (eq_inv_pr_next_push … H) diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_eq.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_eq.ma index b532153d7..58317065d 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_eq.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_eq.ma @@ -36,7 +36,7 @@ lemma pr_isi_eq_repl_fwd: (* Main inversions with pr_eq ***********************************************) (*** isid_inv_eq_repl *) -corec theorem pr_isi_inv_eq_repl (g1) (g2): 𝐈❪g1❫ → 𝐈❪g2❫ → g1 ≡ g2. +corec theorem pr_isi_inv_eq_repl (g1) (g2): 𝐈❨g1❩ → 𝐈❨g2❩ → g1 ≡ g2. #H1 #H2 cases (pr_isi_inv_gen … H1) -H1 cases (pr_isi_inv_gen … H2) -H2 @@ -46,13 +46,13 @@ qed-. (* Alternative definition with pr_eq ****************************************) (*** eq_push_isid *) -corec lemma pr_eq_push_isi (f): ⫯f ≡ f → 𝐈❪f❫. +corec lemma pr_eq_push_isi (f): ⫯f ≡ f → 𝐈❨f❩. #H cases (pr_eq_inv_push_sn … H) -H /4 width=3 by pr_isi_push, pr_eq_trans/ qed. (*** eq_push_inv_isid *) -corec lemma pr_isi_inv_eq_push (g): 𝐈❪g❫ → ⫯g ≡ g. +corec lemma pr_isi_inv_eq_push (g): 𝐈❨g❩ → ⫯g ≡ g. * -g #f #g #Hf * /3 width=5 by pr_eq_push/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_id.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_id.ma index 8b672e874..374fcdce4 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_id.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_id.ma @@ -20,15 +20,15 @@ include "ground/relocation/pr_isi_eq.ma". (* Constructions with pr_id *************************************************) (*** id_isid *) -lemma pr_isi_id: 𝐈❪𝐢❫. +lemma pr_isi_id: 𝐈❨𝐢❩. /2 width=1 by pr_eq_push_isi/ qed. (* Alternative definition with pr_id and pr_eq ******************************) (*** eq_id_isid *) -lemma pr_eq_id_isi (f): 𝐢 ≡ f → 𝐈❪f❫. +lemma pr_eq_id_isi (f): 𝐢 ≡ f → 𝐈❨f❩. /2 width=3 by pr_isi_eq_repl_back/ qed. (*** eq_id_inv_isid *) -lemma pr_isi_inv_eq_id (f): 𝐈❪f❫ → 𝐢 ≡ f. +lemma pr_isi_inv_eq_id (f): 𝐈❨f❩ → 𝐢 ≡ f. /2 width=1 by pr_isi_inv_eq_repl/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_nat.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_nat.ma index 655282638..2ca0a9f33 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_nat.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_nat.ma @@ -19,15 +19,15 @@ include "ground/relocation/pr_isi_pat.ma". (* Advanced constructions with pr_isi and pr_nat ****************************) -lemma pr_isi_nat (f): (∀l. @↑❪l,f❫ ≘ l) → 𝐈❪f❫. +lemma pr_isi_nat (f): (∀l. @↑❨l,f❩ ≘ l) → 𝐈❨f❩. /2 width=1 by pr_isi_pat/ qed. (* Inversions with pr_nat ***************************************************) -lemma pr_isi_inv_nat (f) (l): 𝐈❪f❫ → @↑❪l,f❫ ≘ l. +lemma pr_isi_inv_nat (f) (l): 𝐈❨f❩ → @↑❨l,f❩ ≘ l. /2 width=1 by pr_isi_inv_pat/ qed-. (* Destructions with pr_nat *************************************************) -lemma pr_isi_nat_des (f) (l1) (l2): 𝐈❪f❫ → @↑❪l1,f❫ ≘ l2 → l1 = l2. +lemma pr_isi_nat_des (f) (l1) (l2): 𝐈❨f❩ → @↑❨l1,f❩ ≘ l2 → l1 = l2. /3 width=3 by pr_isi_pat_des, eq_inv_npsucc_bi/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_pat.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_pat.ma index 9d4997f10..2b09f5c96 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_pat.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_pat.ma @@ -20,20 +20,20 @@ include "ground/relocation/pr_pat_pat_id.ma". (* Advanced constructions with pr_isi and pr_pat ****************************) (*** isid_at *) -lemma pr_isi_pat (f): (∀i. @❪i,f❫ ≘ i) → 𝐈❪f❫. +lemma pr_isi_pat (f): (∀i. @❨i,f❩ ≘ i) → 𝐈❨f❩. /3 width=1 by pr_eq_id_isi, pr_pat_inv_id/ qed. (* Inversions with pr_pat ***************************************************) (*** isid_inv_at *) -lemma pr_isi_inv_pat (f) (i): 𝐈❪f❫ → @❪i,f❫ ≘ i. +lemma pr_isi_inv_pat (f) (i): 𝐈❨f❩ → @❨i,f❩ ≘ i. /3 width=3 by pr_isi_inv_eq_id, pr_pat_id, pr_pat_eq_repl_back/ qed-. (* Destructions with pr_pat *************************************************) (*** isid_inv_at_mono *) -lemma pr_isi_pat_des (f) (i1) (i2): 𝐈❪f❫ → @❪i1,f❫ ≘ i2 → i1 = i2. +lemma pr_isi_pat_des (f) (i1) (i2): 𝐈❨f❩ → @❨i1,f❩ ≘ i2 → i1 = i2. /4 width=3 by pr_isi_inv_eq_id, pr_pat_id_des, pr_pat_eq_repl_fwd/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_pushs.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_pushs.ma index 10b815fe5..1dda3b30f 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_pushs.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_pushs.ma @@ -20,13 +20,13 @@ include "ground/relocation/pr_isi.ma". (* Constructions with pr_pushs **********************************************) (*** isid_pushs *) -lemma pr_isi_pushs (n) (f): 𝐈❪f❫ → 𝐈❪⫯*[n]f❫. +lemma pr_isi_pushs (n) (f): 𝐈❨f❩ → 𝐈❨⫯*[n]f❩. #n @(nat_ind_succ … n) -n /3 width=3 by pr_isi_push/ qed. (* Inversions with pr_pushs *************************************************) (*** isid_inv_pushs *) -lemma pr_isi_inv_pushs (n) (g): 𝐈❪⫯*[n]g❫ → 𝐈❪g❫. +lemma pr_isi_inv_pushs (n) (g): 𝐈❨⫯*[n]g❩ → 𝐈❨g❩. #n @(nat_ind_succ … n) -n /3 width=3 by pr_isi_inv_push/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_tl.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_tl.ma index 466c1658d..376a46273 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_tl.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_tl.ma @@ -20,7 +20,7 @@ include "ground/relocation/pr_isi.ma". (* Constructions with pr_tl *************************************************) (*** isid_tl *) -lemma pr_isi_tl (f): 𝐈❪f❫ → 𝐈❪⫰f❫. +lemma pr_isi_tl (f): 𝐈❨f❩ → 𝐈❨⫰f❩. #f cases (pr_map_split_tl f) * #H [ /2 width=3 by pr_isi_inv_push/ | elim (pr_isi_inv_next … H) -H // diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_tls.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_tls.ma index 9bc8fea4c..6f86a22b0 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_tls.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_tls.ma @@ -20,6 +20,6 @@ include "ground/relocation/pr_isi_tl.ma". (* Constructions with pr_tls ************************************************) (*** isid_tls *) -lemma pr_isi_tls (n) (f): 𝐈❪f❫ → 𝐈❪⫰*[n]f❫. +lemma pr_isi_tls (n) (f): 𝐈❨f❩ → 𝐈❨⫰*[n]f❩. #n @(nat_ind_succ … n) -n /3 width=1 by pr_isi_tl/ qed. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_uni.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_uni.ma index 122b8433e..1db92adae 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_uni.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_isi_uni.ma @@ -20,11 +20,11 @@ include "ground/relocation/pr_isi_id.ma". (* Constructions with pr_isi ************************************************) (*** uni_inv_isid uni_isi *) -lemma pr_uni_isi (f): 𝐮❨𝟎❩ ≡ f → 𝐈❪f❫. +lemma pr_uni_isi (f): 𝐮❨𝟎❩ ≡ f → 𝐈❨f❩. /2 width=1 by pr_eq_id_isi/ qed. (* Inversions with pr_isi ***************************************************) (*** uni_isid isi_inv_uni *) -lemma pr_isi_inv_uni (f): 𝐈❪f❫ → 𝐮❨𝟎❩ ≡ f. +lemma pr_isi_inv_uni (f): 𝐈❨f❩ → 𝐮❨𝟎❩ ≡ f. /2 width=1 by pr_isi_inv_eq_id/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_ist.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_ist.ma index 607a16e97..2c37fcb86 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_ist.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_ist.ma @@ -19,7 +19,7 @@ include "ground/relocation/pr_pat.ma". (*** istot *) definition pr_ist: predicate pr_map ≝ - λf. ∀i. ∃j. @❪i,f❫ ≘ j. + λf. ∀i. ∃j. @❨i,f❩ ≘ j. interpretation "totality condition (partial relocation maps)" @@ -28,27 +28,27 @@ interpretation (* Basic inversions *********************************************************) (*** istot_inv_push *) -lemma pr_ist_inv_push (g): 𝐓❪g❫ → ∀f. ⫯f = g → 𝐓❪f❫. +lemma pr_ist_inv_push (g): 𝐓❨g❩ → ∀f. ⫯f = g → 𝐓❨f❩. #g #Hg #f #H #i elim (Hg (↑i)) -Hg #j #Hg elim (pr_pat_inv_succ_push … Hg … H) -Hg -H /2 width=3 by ex_intro/ qed-. (*** istot_inv_next *) -lemma pr_ist_inv_next (g): 𝐓❪g❫ → ∀f. ↑f = g → 𝐓❪f❫. +lemma pr_ist_inv_next (g): 𝐓❨g❩ → ∀f. ↑f = g → 𝐓❨f❩. #g #Hg #f #H #i elim (Hg i) -Hg #j #Hg elim (pr_pat_inv_next … Hg … H) -Hg -H /2 width=2 by ex_intro/ qed-. (* Basic constructions ******************************************************) -lemma pr_ist_push (f): 𝐓❪f❫ → 𝐓❪⫯f❫. +lemma pr_ist_push (f): 𝐓❨f❩ → 𝐓❨⫯f❩. #f #Hf * [ /3 width=2 by pr_pat_refl, ex_intro/ | #i elim (Hf i) -Hf /3 width=8 by pr_pat_push, ex_intro/ ] qed. -lemma pr_ist_next (f): 𝐓❪f❫ → 𝐓❪↑f❫. +lemma pr_ist_next (f): 𝐓❨f❩ → 𝐓❨↑f❩. #f #Hf #i elim (Hf i) -Hf /3 width=6 by pr_pat_next, ex_intro/ qed. @@ -56,7 +56,7 @@ qed. (* Constructions with pr_tl *************************************************) (*** istot_tl *) -lemma pr_ist_tl (f): 𝐓❪f❫ → 𝐓❪⫰f❫. +lemma pr_ist_tl (f): 𝐓❨f❩ → 𝐓❨⫰f❩. #f cases (pr_map_split_tl f) * /2 width=3 by pr_ist_inv_next, pr_ist_inv_push/ qed. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_ist_isi.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_ist_isi.ma index ce24651da..cfc6baf49 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_ist_isi.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_ist_isi.ma @@ -20,7 +20,7 @@ include "ground/relocation/pr_ist.ma". (* Advanced constructions with pr_isi ***************************************) (*** isid_at_total *) -lemma pr_isi_pat_total: ∀f. 𝐓❪f❫ → (∀i1,i2. @❪i1,f❫ ≘ i2 → i1 = i2) → 𝐈❪f❫. +lemma pr_isi_pat_total: ∀f. 𝐓❨f❩ → (∀i1,i2. @❨i1,f❩ ≘ i2 → i1 = i2) → 𝐈❨f❩. #f #H1f #H2f @pr_isi_pat #i lapply (H1f i) -H1f * #j #Hf >(H2f … Hf) in ⊢ (???%); -H2f // diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_ist_ist.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_ist_ist.ma index 0b4a769f8..cfb786adc 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_ist_ist.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_ist_ist.ma @@ -23,7 +23,7 @@ include "ground/relocation/pr_ist.ma". (* Advanced constructions with pr_pat ***************************************) (*** at_dec *) -lemma pr_pat_dec (f) (i1) (i2): 𝐓❪f❫ → Decidable (@❪i1,f❫ ≘ i2). +lemma pr_pat_dec (f) (i1) (i2): 𝐓❨f❩ → Decidable (@❨i1,f❩ ≘ i2). #f #i1 #i2 #Hf lapply (Hf i1) -Hf * #j2 #Hf elim (eq_pnat_dec i2 j2) [ #H destruct /2 width=1 by or_introl/ @@ -32,9 +32,9 @@ lemma pr_pat_dec (f) (i1) (i2): 𝐓❪f❫ → Decidable (@❪i1,f❫ ≘ i2). qed-. (*** is_at_dec *) -lemma is_pr_pat_dec (f) (i2): 𝐓❪f❫ → Decidable (∃i1. @❪i1,f❫ ≘ i2). +lemma is_pr_pat_dec (f) (i2): 𝐓❨f❩ → Decidable (∃i1. @❨i1,f❩ ≘ i2). #f #i2 #Hf -lapply (dec_plt (λi1.@❪i1,f❫ ≘ i2) … (↑i2)) [| * ] +lapply (dec_plt (λi1.@❨i1,f❩ ≘ i2) … (↑i2)) [| * ] [ /2 width=1 by pr_pat_dec/ | * /3 width=2 by ex_intro, or_introl/ | #H @or_intror * #i1 #Hi12 @@ -45,8 +45,8 @@ qed-. (* Main destructions with pr_pat ********************************************) (*** at_ext *) -corec theorem pr_eq_ext_pat (f1) (f2): 𝐓❪f1❫ → 𝐓❪f2❫ → - (∀i,i1,i2. @❪i,f1❫ ≘ i1 → @❪i,f2❫ ≘ i2 → i1 = i2) → +corec theorem pr_eq_ext_pat (f1) (f2): 𝐓❨f1❩ → 𝐓❨f2❩ → + (∀i,i1,i2. @❨i,f1❩ ≘ i1 → @❨i,f2❩ ≘ i2 → i1 = i2) → f1 ≡ f2. cases (pr_map_split_tl f1) #H1 cases (pr_map_split_tl f2) #H2 @@ -70,7 +70,7 @@ qed-. (* Advanced constructions with pr_nat ***************************************) -lemma is_pr_nat_dec (f) (l2): 𝐓❪f❫ → Decidable (∃l1. @↑❪l1,f❫ ≘ l2). +lemma is_pr_nat_dec (f) (l2): 𝐓❨f❩ → Decidable (∃l1. @↑❨l1,f❩ ≘ l2). #f #l2 #Hf elim (is_pr_pat_dec … (↑l2) Hf) [ * /3 width=2 by ex_intro, or_introl/ | #H @or_intror * /3 width=2 by ex_intro/ diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_ist_tls.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_ist_tls.ma index 7a7556303..9dad8cc04 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_ist_tls.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_ist_tls.ma @@ -20,7 +20,7 @@ include "ground/relocation/pr_ist.ma". (* Constructions with pr_tls ************************************************) (*** istot_tls *) -lemma pr_ist_tls (n) (f): 𝐓❪f❫ → 𝐓❪⫰*[n]f❫. +lemma pr_ist_tls (n) (f): 𝐓❨f❩ → 𝐓❨⫰*[n]f❩. #n @(nat_ind_succ … n) -n // #n #IH #f #Hf (npsucc_pred i1) in ⊢ (%→?); >(npsucc_pred i2) in ⊢ (%→?); // @@ -56,7 +56,7 @@ qed. (*** pr_nat_inv_ppx *) lemma pr_nat_inv_zero_push (f) (l1) (l2): - @↑❪l1,f❫ ≘ l2 → ∀g. 𝟎 = l1 → ⫯g = f → 𝟎 = l2. + @↑❨l1,f❩ ≘ l2 → ∀g. 𝟎 = l1 → ⫯g = f → 𝟎 = l2. #f #l1 #l2 #H #g #H1 #H2 destruct lapply (pr_pat_inv_unit_push … H ???) -H /2 width=2 by eq_inv_npsucc_bi/ @@ -64,8 +64,8 @@ qed-. (*** pr_nat_inv_npx *) lemma pr_nat_inv_succ_push (f) (l1) (l2): - @↑❪l1,f❫ ≘ l2 → ∀g,k1. ↑k1 = l1 → ⫯g = f → - ∃∃k2. @↑❪k1,g❫ ≘ k2 & ↑k2 = l2. + @↑❨l1,f❩ ≘ l2 → ∀g,k1. ↑k1 = l1 → ⫯g = f → + ∃∃k2. @↑❨k1,g❩ ≘ k2 & ↑k2 = l2. #f #l1 #l2 #H #g #k1 #H1 #H2 destruct elim (pr_pat_inv_succ_push … H) -H [|*: // ] #k2 #Hg >(npsucc_pred (↑l2)) #H @@ -74,8 +74,8 @@ qed-. (*** pr_nat_inv_xnx *) lemma pr_nat_inv_next (f) (l1) (l2): - @↑❪l1,f❫ ≘ l2 → ∀g. ↑g = f → - ∃∃k2. @↑❪l1,g❫ ≘ k2 & ↑k2 = l2. + @↑❨l1,f❩ ≘ l2 → ∀g. ↑g = f → + ∃∃k2. @↑❨l1,g❩ ≘ k2 & ↑k2 = l2. #f #l1 #l2 #H #g #H1 destruct elim (pr_pat_inv_next … H) -H [|*: // ] #k2 >(npsucc_pred (k2)) in ⊢ (%→?→?); #Hg #H @@ -86,50 +86,50 @@ qed-. (*** pr_nat_inv_ppn *) lemma pr_nat_inv_zero_push_succ (f) (l1) (l2): - @↑❪l1,f❫ ≘ l2 → ∀g,k2. 𝟎 = l1 → ⫯g = f → ↑k2 = l2 → ⊥. + @↑❨l1,f❩ ≘ l2 → ∀g,k2. 𝟎 = l1 → ⫯g = f → ↑k2 = l2 → ⊥. #f #l1 #l2 #Hf #g #k2 #H1 #H <(pr_nat_inv_zero_push … Hf … H1 H) -f -g -l1 -l2 /2 width=3 by eq_inv_nsucc_zero/ qed-. (*** pr_nat_inv_npp *) lemma pr_nat_inv_succ_push_zero (f) (l1) (l2): - @↑❪l1,f❫ ≘ l2 → ∀g,k1. ↑k1 = l1 → ⫯g = f → 𝟎 = l2 → ⊥. + @↑❨l1,f❩ ≘ l2 → ∀g,k1. ↑k1 = l1 → ⫯g = f → 𝟎 = l2 → ⊥. #f #l1 #l2 #Hf #g #k1 #H1 #H elim (pr_nat_inv_succ_push … Hf … H1 H) -f -l1 #x2 #Hg * -l2 /2 width=3 by eq_inv_zero_nsucc/ qed-. (*** pr_nat_inv_npn *) lemma pr_nat_inv_succ_push_succ (f) (l1) (l2): - @↑❪l1,f❫ ≘ l2 → ∀g,k1,k2. ↑k1 = l1 → ⫯g = f → ↑k2 = l2 → @↑❪k1,g❫ ≘ k2. + @↑❨l1,f❩ ≘ l2 → ∀g,k1,k2. ↑k1 = l1 → ⫯g = f → ↑k2 = l2 → @↑❨k1,g❩ ≘ k2. #f #l1 #l2 #Hf #g #k1 #k2 #H1 #H elim (pr_nat_inv_succ_push … Hf … H1 H) -f -l1 #x2 #Hg * -l2 #H >(eq_inv_nsucc_bi … H) -k2 // qed-. (*** pr_nat_inv_xnp *) lemma pr_nat_inv_next_zero (f) (l1) (l2): - @↑❪l1,f❫ ≘ l2 → ∀g. ↑g = f → 𝟎 = l2 → ⊥. + @↑❨l1,f❩ ≘ l2 → ∀g. ↑g = f → 𝟎 = l2 → ⊥. #f #l1 #l2 #Hf #g #H elim (pr_nat_inv_next … Hf … H) -f #x2 #Hg * -l2 /2 width=3 by eq_inv_zero_nsucc/ qed-. (*** pr_nat_inv_xnn *) lemma pr_nat_inv_next_succ (f) (l1) (l2): - @↑❪l1,f❫ ≘ l2 → ∀g,k2. ↑g = f → ↑k2 = l2 → @↑❪l1,g❫ ≘ k2. + @↑❨l1,f❩ ≘ l2 → ∀g,k2. ↑g = f → ↑k2 = l2 → @↑❨l1,g❩ ≘ k2. #f #l1 #l2 #Hf #g #k2 #H elim (pr_nat_inv_next … Hf … H) -f #x2 #Hg * -l2 #H >(eq_inv_nsucc_bi … H) -k2 // qed-. (*** pr_nat_inv_pxp *) lemma pr_nat_inv_zero_bi (f) (l1) (l2): - @↑❪l1,f❫ ≘ l2 → 𝟎 = l1 → 𝟎 = l2 → ∃g. ⫯g = f. + @↑❨l1,f❩ ≘ l2 → 𝟎 = l1 → 𝟎 = l2 → ∃g. ⫯g = f. #f elim (pr_map_split_tl … f) /2 width=2 by ex_intro/ #H #l1 #l2 #Hf #H1 #H2 cases (pr_nat_inv_next_zero … Hf … H H2) qed-. (*** pr_nat_inv_pxn *) lemma pr_nat_inv_zero_succ (f) (l1) (l2): - @↑❪l1,f❫ ≘ l2 → ∀k2. 𝟎 = l1 → ↑k2 = l2 → - ∃∃g. @↑❪l1,g❫ ≘ k2 & ↑g = f. + @↑❨l1,f❩ ≘ l2 → ∀k2. 𝟎 = l1 → ↑k2 = l2 → + ∃∃g. @↑❨l1,g❩ ≘ k2 & ↑g = f. #f elim (pr_map_split_tl … f) #H #l1 #l2 #Hf #k2 #H1 #H2 [ elim (pr_nat_inv_zero_push_succ … Hf … H1 H H2) @@ -139,7 +139,7 @@ qed-. (*** pr_nat_inv_nxp *) lemma pr_nat_inv_succ_zero (f) (l1) (l2): - @↑❪l1,f❫ ≘ l2 → ∀k1. ↑k1 = l1 → 𝟎 = l2 → ⊥. + @↑❨l1,f❩ ≘ l2 → ∀k1. ↑k1 = l1 → 𝟎 = l2 → ⊥. #f elim (pr_map_split_tl f) #H #l1 #l2 #Hf #k1 #H1 #H2 [ elim (pr_nat_inv_succ_push_zero … Hf … H1 H H2) @@ -149,9 +149,9 @@ qed-. (*** pr_nat_inv_nxn *) lemma pr_nat_inv_succ_bi (f) (l1) (l2): - @↑❪l1,f❫ ≘ l2 → ∀k1,k2. ↑k1 = l1 → ↑k2 = l2 → - ∨∨ ∃∃g. @↑❪k1,g❫ ≘ k2 & ⫯g = f - | ∃∃g. @↑❪l1,g❫ ≘ k2 & ↑g = f. + @↑❨l1,f❩ ≘ l2 → ∀k1,k2. ↑k1 = l1 → ↑k2 = l2 → + ∨∨ ∃∃g. @↑❨k1,g❩ ≘ k2 & ⫯g = f + | ∃∃g. @↑❨l1,g❩ ≘ k2 & ↑g = f. #f elim (pr_map_split_tl f) * /4 width=7 by pr_nat_inv_next_succ, pr_nat_inv_succ_push_succ, ex2_intro, or_intror, or_introl/ qed-. @@ -159,9 +159,9 @@ qed-. (* Note: the following inversion lemmas must be checked *) (*** pr_nat_inv_xpx *) lemma pr_nat_inv_push (f) (l1) (l2): - @↑❪l1,f❫ ≘ l2 → ∀g. ⫯g = f → + @↑❨l1,f❩ ≘ l2 → ∀g. ⫯g = f → ∨∨ ∧∧ 𝟎 = l1 & 𝟎 = l2 - | ∃∃k1,k2. @↑❪k1,g❫ ≘ k2 & ↑k1 = l1 & ↑k2 = l2. + | ∃∃k1,k2. @↑❨k1,g❩ ≘ k2 & ↑k1 = l1 & ↑k2 = l2. #f * [2: #l1 ] #l2 #Hf #g #H [ elim (pr_nat_inv_succ_push … Hf … H) -f /3 width=5 by or_intror, ex3_2_intro/ | >(pr_nat_inv_zero_push … Hf … H) -f /3 width=1 by conj, or_introl/ @@ -170,15 +170,15 @@ qed-. (*** pr_nat_inv_xpp *) lemma pr_nat_inv_push_zero (f) (l1) (l2): - @↑❪l1,f❫ ≘ l2 → ∀g. ⫯g = f → 𝟎 = l2 → 𝟎 = l1. + @↑❨l1,f❩ ≘ l2 → ∀g. ⫯g = f → 𝟎 = l2 → 𝟎 = l1. #f #l1 #l2 #Hf #g #H elim (pr_nat_inv_push … Hf … H) -f * // #k1 #k2 #_ #_ * -l2 #H elim (eq_inv_zero_nsucc … H) qed-. (*** pr_nat_inv_xpn *) lemma pr_nat_inv_push_succ (f) (l1) (l2): - @↑❪l1,f❫ ≘ l2 → ∀g,k2. ⫯g = f → ↑k2 = l2 → - ∃∃k1. @↑❪k1,g❫ ≘ k2 & ↑k1 = l1. + @↑❨l1,f❩ ≘ l2 → ∀g,k2. ⫯g = f → ↑k2 = l2 → + ∃∃k1. @↑❨k1,g❩ ≘ k2 & ↑k1 = l1. #f #l1 #l2 #Hf #g #k2 #H elim (pr_nat_inv_push … Hf … H) -f * [ #_ * -l2 #H elim (eq_inv_nsucc_zero … H) | #x1 #x2 #Hg #H1 * -l2 #H @@ -189,7 +189,7 @@ qed-. (*** pr_nat_inv_xxp *) lemma pr_nat_inv_zero_dx (f) (l1) (l2): - @↑❪l1,f❫ ≘ l2 → 𝟎 = l2 → ∃∃g. 𝟎 = l1 & ⫯g = f. + @↑❨l1,f❩ ≘ l2 → 𝟎 = l2 → ∃∃g. 𝟎 = l1 & ⫯g = f. #f elim (pr_map_split_tl f) #H #l1 #l2 #Hf #H2 [ /3 width=6 by pr_nat_inv_push_zero, ex2_intro/ @@ -198,9 +198,9 @@ lemma pr_nat_inv_zero_dx (f) (l1) (l2): qed-. (*** pr_nat_inv_xxn *) -lemma pr_nat_inv_succ_dx (f) (l1) (l2): @↑❪l1,f❫ ≘ l2 → ∀k2. ↑k2 = l2 → - ∨∨ ∃∃g,k1. @↑❪k1,g❫ ≘ k2 & ↑k1 = l1 & ⫯g = f - | ∃∃g. @↑❪l1,g❫ ≘ k2 & ↑g = f. +lemma pr_nat_inv_succ_dx (f) (l1) (l2): @↑❨l1,f❩ ≘ l2 → ∀k2. ↑k2 = l2 → + ∨∨ ∃∃g,k1. @↑❨k1,g❩ ≘ k2 & ↑k1 = l1 & ⫯g = f + | ∃∃g. @↑❨l1,g❩ ≘ k2 & ↑g = f. #f elim (pr_map_split_tl f) #H #l1 #l2 #Hf #k2 #H2 [ elim (pr_nat_inv_push_succ … Hf … H H2) -l2 /3 width=5 by or_introl, ex3_2_intro/ diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_nat_basic.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_nat_basic.ma index 8c406f174..edb5117aa 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_nat_basic.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_nat_basic.ma @@ -20,7 +20,7 @@ include "ground/relocation/pr_nat_uni.ma". (* Constructions with pr_basic **********************************************) lemma pr_nat_basic_lt (m) (n) (l): - l < m → @↑❪l, 𝐛❨m,n❩❫ ≘ l. + l < m → @↑❨l, 𝐛❨m,n❩❩ ≘ l. #m @(nat_ind_succ … m) -m [ #n #i #H elim (nlt_inv_zero_dx … H) | #m #IH #n #l @(nat_ind_succ … l) -l @@ -33,7 +33,7 @@ lemma pr_nat_basic_lt (m) (n) (l): qed. lemma pr_nat_basic_ge (m) (n) (l): - m ≤ l → @↑❪l, 𝐛❨m,n❩❫ ≘ l+n. + m ≤ l → @↑❨l, 𝐛❨m,n❩❩ ≘ l+n. #m @(nat_ind_succ … m) -m // #m #IH #n #l #H elim (nle_inv_succ_sn … H) -H #Hml #H >H -H @@ -43,9 +43,9 @@ qed. (* Inversions with pr_basic *************************************************) lemma pr_nat_basic_inv_lt (m) (n) (l) (k): - l < m → @↑❪l, 𝐛❨m,n❩❫ ≘ k → l = k. + l < m → @↑❨l, 𝐛❨m,n❩❩ ≘ k → l = k. /3 width=4 by pr_nat_basic_lt, pr_nat_mono/ qed-. lemma pr_nat_basic_inv_ge (m) (n) (l) (k): - m ≤ l → @↑❪l, 𝐛❨m,n❩❫ ≘ k → l+n = k. + m ≤ l → @↑❨l, 𝐛❨m,n❩❩ ≘ k → l+n = k. /3 width=4 by pr_nat_basic_ge, pr_nat_mono/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_nat_nat.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_nat_nat.ma index 5f4067080..481ff1517 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_nat_nat.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_nat_nat.ma @@ -20,7 +20,7 @@ include "ground/relocation/pr_nat.ma". (* Main destructions ********************************************************) theorem pr_nat_monotonic (k2) (l2) (f): - @↑❪l2,f❫ ≘ k2 → ∀k1,l1. @↑❪l1,f❫ ≘ k1 → l1 < l2 → k1 < k2. + @↑❨l2,f❩ ≘ k2 → ∀k1,l1. @↑❨l1,f❩ ≘ k1 → l1 < l2 → k1 < k2. #k2 @(nat_ind_succ … k2) -k2 [ #l2 #f #H2f elim (pr_nat_inv_zero_dx … H2f) -H2f // #g #H21 #_ #k1 #l1 #_ #Hi destruct @@ -37,7 +37,7 @@ theorem pr_nat_monotonic (k2) (l2) (f): qed-. theorem pr_nat_inv_monotonic (k1) (l1) (f): - @↑❪l1,f❫ ≘ k1 → ∀k2,l2. @↑❪l2,f❫ ≘ k2 → k1 < k2 → l1 < l2. + @↑❨l1,f❩ ≘ k1 → ∀k2,l2. @↑❨l2,f❩ ≘ k2 → k1 < k2 → l1 < l2. #k1 @(nat_ind_succ … k1) -k1 [ #l1 #f #H1f elim (pr_nat_inv_zero_dx … H1f) -H1f // #g * -l1 #H #k2 #l2 #H2f #Hk @@ -59,14 +59,14 @@ theorem pr_nat_inv_monotonic (k1) (l1) (f): qed-. theorem pr_nat_mono (f) (l) (l1) (l2): - @↑❪l,f❫ ≘ l1 → @↑❪l,f❫ ≘ l2 → l2 = l1. + @↑❨l,f❩ ≘ l1 → @↑❨l,f❩ ≘ l2 → l2 = l1. #f #l #l1 #l2 #H1 #H2 elim (nat_split_lt_eq_gt l2 l1) // #Hi elim (nlt_ge_false l l) /2 width=6 by pr_nat_inv_monotonic/ qed-. theorem pr_nat_inj (f) (l1) (l2) (l): - @↑❪l1,f❫ ≘ l → @↑❪l2,f❫ ≘ l → l1 = l2. + @↑❨l1,f❩ ≘ l → @↑❨l2,f❩ ≘ l → l1 = l2. #f #l1 #l2 #l #H1 #H2 elim (nat_split_lt_eq_gt l2 l1) // #Hi elim (nlt_ge_false l l) /2 width=6 by pr_nat_monotonic/ diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_nat_uni.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_nat_uni.ma index 8831312c6..114284805 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_nat_uni.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_nat_uni.ma @@ -21,12 +21,12 @@ include "ground/relocation/pr_nat_nat.ma". (* Constructions with pr_uni ************************************************) lemma pr_nat_uni (n) (l): - @↑❪l,𝐮❨n❩❫ ≘ l+n. + @↑❨l,𝐮❨n❩❩ ≘ l+n. /2 width=1 by pr_nat_pred_bi/ qed. (* Inversions with pr_uni ***************************************************) lemma pr_nat_inv_uni (n) (l) (k): - @↑❪l,𝐮❨n❩❫ ≘ k → k = l+n. + @↑❨l,𝐮❨n❩❩ ≘ k → k = l+n. /2 width=4 by pr_nat_mono/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_pat.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_pat.ma index 263da6c13..104d37c74 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_pat.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_pat.ma @@ -39,14 +39,14 @@ interpretation (*** H_at_div *) definition H_pr_pat_div: relation4 pr_map pr_map pr_map pr_map ≝ λf2,g2,f1,g1. - ∀jf,jg,j. @❪jf,f2❫ ≘ j → @❪jg,g2❫ ≘ j → - ∃∃j0. @❪j0,f1❫ ≘ jf & @❪j0,g1❫ ≘ jg. + ∀jf,jg,j. @❨jf,f2❩ ≘ j → @❨jg,g2❩ ≘ j → + ∃∃j0. @❨j0,f1❩ ≘ jf & @❨j0,g1❩ ≘ jg. (* Basic inversions *********************************************************) (*** at_inv_ppx *) lemma pr_pat_inv_unit_push (f) (i1) (i2): - @❪i1,f❫ ≘ i2 → ∀g. 𝟏 = i1 → ⫯g = f → 𝟏 = i2. + @❨i1,f❩ ≘ i2 → ∀g. 𝟏 = i1 → ⫯g = f → 𝟏 = i2. #f #i1 #i2 * -f -i1 -i2 // [ #f #i1 #i2 #_ #g #j1 #j2 #_ * #_ #x #H destruct | #f #i1 #i2 #_ #g #j2 * #_ #x #_ #H elim (eq_inv_pr_push_next … H) @@ -55,8 +55,8 @@ qed-. (*** at_inv_npx *) lemma pr_pat_inv_succ_push (f) (i1) (i2): - @❪i1,f❫ ≘ i2 → ∀g,j1. ↑j1 = i1 → ⫯g = f → - ∃∃j2. @❪j1,g❫ ≘ j2 & ↑j2 = i2. + @❨i1,f❩ ≘ i2 → ∀g,j1. ↑j1 = i1 → ⫯g = f → + ∃∃j2. @❨j1,g❩ ≘ j2 & ↑j2 = i2. #f #i1 #i2 * -f -i1 -i2 [ #f #g #j1 #j2 #_ * #_ #x #x1 #H destruct | #f #i1 #i2 #Hi #g #j1 #j2 * * * #x #x1 #H #Hf >(eq_inv_pr_push_bi … Hf) -g destruct /2 width=3 by ex2_intro/ @@ -66,8 +66,8 @@ qed-. (*** at_inv_xnx *) lemma pr_pat_inv_next (f) (i1) (i2): - @❪i1,f❫ ≘ i2 → ∀g. ↑g = f → - ∃∃j2. @❪i1,g❫ ≘ j2 & ↑j2 = i2. + @❨i1,f❩ ≘ i2 → ∀g. ↑g = f → + ∃∃j2. @❨i1,g❩ ≘ j2 & ↑j2 = i2. #f #i1 #i2 * -f -i1 -i2 [ #f #g #j1 #j2 * #_ #_ #x #H elim (eq_inv_pr_next_push … H) | #f #i1 #i2 #_ #g #j1 #j2 * #_ #_ #x #H elim (eq_inv_pr_next_push … H) @@ -79,50 +79,50 @@ qed-. (*** at_inv_ppn *) lemma pr_pat_inv_unit_push_succ (f) (i1) (i2): - @❪i1,f❫ ≘ i2 → ∀g,j2. 𝟏 = i1 → ⫯g = f → ↑j2 = i2 → ⊥. + @❨i1,f❩ ≘ i2 → ∀g,j2. 𝟏 = i1 → ⫯g = f → ↑j2 = i2 → ⊥. #f #i1 #i2 #Hf #g #j2 #H1 #H <(pr_pat_inv_unit_push … Hf … H1 H) -f -g -i1 -i2 #H destruct qed-. (*** at_inv_npp *) lemma pr_pat_inv_succ_push_unit (f) (i1) (i2): - @❪i1,f❫ ≘ i2 → ∀g,j1. ↑j1 = i1 → ⫯g = f → 𝟏 = i2 → ⊥. + @❨i1,f❩ ≘ i2 → ∀g,j1. ↑j1 = i1 → ⫯g = f → 𝟏 = i2 → ⊥. #f #i1 #i2 #Hf #g #j1 #H1 #H elim (pr_pat_inv_succ_push … Hf … H1 H) -f -i1 #x2 #Hg * -i2 #H destruct qed-. (*** at_inv_npn *) lemma pr_pat_inv_succ_push_succ (f) (i1) (i2): - @❪i1,f❫ ≘ i2 → ∀g,j1,j2. ↑j1 = i1 → ⫯g = f → ↑j2 = i2 → @❪j1,g❫ ≘ j2. + @❨i1,f❩ ≘ i2 → ∀g,j1,j2. ↑j1 = i1 → ⫯g = f → ↑j2 = i2 → @❨j1,g❩ ≘ j2. #f #i1 #i2 #Hf #g #j1 #j2 #H1 #H elim (pr_pat_inv_succ_push … Hf … H1 H) -f -i1 #x2 #Hg * -i2 #H destruct // qed-. (*** at_inv_xnp *) lemma pr_pat_inv_next_unit (f) (i1) (i2): - @❪i1,f❫ ≘ i2 → ∀g. ↑g = f → 𝟏 = i2 → ⊥. + @❨i1,f❩ ≘ i2 → ∀g. ↑g = f → 𝟏 = i2 → ⊥. #f #i1 #i2 #Hf #g #H elim (pr_pat_inv_next … Hf … H) -f #x2 #Hg * -i2 #H destruct qed-. (*** at_inv_xnn *) lemma pr_pat_inv_next_succ (f) (i1) (i2): - @❪i1,f❫ ≘ i2 → ∀g,j2. ↑g = f → ↑j2 = i2 → @❪i1,g❫ ≘ j2. + @❨i1,f❩ ≘ i2 → ∀g,j2. ↑g = f → ↑j2 = i2 → @❨i1,g❩ ≘ j2. #f #i1 #i2 #Hf #g #j2 #H elim (pr_pat_inv_next … Hf … H) -f #x2 #Hg * -i2 #H destruct // qed-. (*** at_inv_pxp *) lemma pr_pat_inv_unit_bi (f) (i1) (i2): - @❪i1,f❫ ≘ i2 → 𝟏 = i1 → 𝟏 = i2 → ∃g. ⫯g = f. + @❨i1,f❩ ≘ i2 → 𝟏 = i1 → 𝟏 = i2 → ∃g. ⫯g = f. #f elim (pr_map_split_tl … f) /2 width=2 by ex_intro/ #H #i1 #i2 #Hf #H1 #H2 cases (pr_pat_inv_next_unit … Hf … H H2) qed-. (*** at_inv_pxn *) lemma pr_pat_inv_unit_succ (f) (i1) (i2): - @❪i1,f❫ ≘ i2 → ∀j2. 𝟏 = i1 → ↑j2 = i2 → - ∃∃g. @❪i1,g❫ ≘ j2 & ↑g = f. + @❨i1,f❩ ≘ i2 → ∀j2. 𝟏 = i1 → ↑j2 = i2 → + ∃∃g. @❨i1,g❩ ≘ j2 & ↑g = f. #f elim (pr_map_split_tl … f) #H #i1 #i2 #Hf #j2 #H1 #H2 [ elim (pr_pat_inv_unit_push_succ … Hf … H1 H H2) @@ -132,7 +132,7 @@ qed-. (*** at_inv_nxp *) lemma pr_pat_inv_succ_unit (f) (i1) (i2): - @❪i1,f❫ ≘ i2 → ∀j1. ↑j1 = i1 → 𝟏 = i2 → ⊥. + @❨i1,f❩ ≘ i2 → ∀j1. ↑j1 = i1 → 𝟏 = i2 → ⊥. #f elim (pr_map_split_tl f) #H #i1 #i2 #Hf #j1 #H1 #H2 [ elim (pr_pat_inv_succ_push_unit … Hf … H1 H H2) @@ -142,9 +142,9 @@ qed-. (*** at_inv_nxn *) lemma pr_pat_inv_succ_bi (f) (i1) (i2): - @❪i1,f❫ ≘ i2 → ∀j1,j2. ↑j1 = i1 → ↑j2 = i2 → - ∨∨ ∃∃g. @❪j1,g❫ ≘ j2 & ⫯g = f - | ∃∃g. @❪i1,g❫ ≘ j2 & ↑g = f. + @❨i1,f❩ ≘ i2 → ∀j1,j2. ↑j1 = i1 → ↑j2 = i2 → + ∨∨ ∃∃g. @❨j1,g❩ ≘ j2 & ⫯g = f + | ∃∃g. @❨i1,g❩ ≘ j2 & ↑g = f. #f elim (pr_map_split_tl f) * /4 width=7 by pr_pat_inv_next_succ, pr_pat_inv_succ_push_succ, ex2_intro, or_intror, or_introl/ qed-. @@ -152,9 +152,9 @@ qed-. (* Note: the following inversion lemmas must be checked *) (*** at_inv_xpx *) lemma pr_pat_inv_push (f) (i1) (i2): - @❪i1,f❫ ≘ i2 → ∀g. ⫯g = f → + @❨i1,f❩ ≘ i2 → ∀g. ⫯g = f → ∨∨ ∧∧ 𝟏 = i1 & 𝟏 = i2 - | ∃∃j1,j2. @❪j1,g❫ ≘ j2 & ↑j1 = i1 & ↑j2 = i2. + | ∃∃j1,j2. @❨j1,g❩ ≘ j2 & ↑j1 = i1 & ↑j2 = i2. #f * [2: #i1 ] #i2 #Hf #g #H [ elim (pr_pat_inv_succ_push … Hf … H) -f /3 width=5 by or_intror, ex3_2_intro/ | >(pr_pat_inv_unit_push … Hf … H) -f /3 width=1 by conj, or_introl/ @@ -163,15 +163,15 @@ qed-. (*** at_inv_xpp *) lemma pr_pat_inv_push_unit (f) (i1) (i2): - @❪i1,f❫ ≘ i2 → ∀g. ⫯g = f → 𝟏 = i2 → 𝟏 = i1. + @❨i1,f❩ ≘ i2 → ∀g. ⫯g = f → 𝟏 = i2 → 𝟏 = i1. #f #i1 #i2 #Hf #g #H elim (pr_pat_inv_push … Hf … H) -f * // #j1 #j2 #_ #_ * -i2 #H destruct qed-. (*** at_inv_xpn *) lemma pr_pat_inv_push_succ (f) (i1) (i2): - @❪i1,f❫ ≘ i2 → ∀g,j2. ⫯g = f → ↑j2 = i2 → - ∃∃j1. @❪j1,g❫ ≘ j2 & ↑j1 = i1. + @❨i1,f❩ ≘ i2 → ∀g,j2. ⫯g = f → ↑j2 = i2 → + ∃∃j1. @❨j1,g❩ ≘ j2 & ↑j1 = i1. #f #i1 #i2 #Hf #g #j2 #H elim (pr_pat_inv_push … Hf … H) -f * [ #_ * -i2 #H destruct | #x1 #x2 #Hg #H1 * -i2 #H destruct /2 width=3 by ex2_intro/ @@ -180,7 +180,7 @@ qed-. (*** at_inv_xxp *) lemma pr_pat_inv_unit_dx (f) (i1) (i2): - @❪i1,f❫ ≘ i2 → 𝟏 = i2 → + @❨i1,f❩ ≘ i2 → 𝟏 = i2 → ∃∃g. 𝟏 = i1 & ⫯g = f. #f elim (pr_map_split_tl f) #H #i1 #i2 #Hf #H2 @@ -191,9 +191,9 @@ qed-. (*** at_inv_xxn *) lemma pr_pat_inv_succ_dx (f) (i1) (i2): - @❪i1,f❫ ≘ i2 → ∀j2. ↑j2 = i2 → - ∨∨ ∃∃g,j1. @❪j1,g❫ ≘ j2 & ↑j1 = i1 & ⫯g = f - | ∃∃g. @❪i1,g❫ ≘ j2 & ↑g = f. + @❨i1,f❩ ≘ i2 → ∀j2. ↑j2 = i2 → + ∨∨ ∃∃g,j1. @❨j1,g❩ ≘ j2 & ↑j1 = i1 & ⫯g = f + | ∃∃g. @❨i1,g❩ ≘ j2 & ↑g = f. #f elim (pr_map_split_tl f) #H #i1 #i2 #Hf #j2 #H2 [ elim (pr_pat_inv_push_succ … Hf … H H2) -i2 /3 width=5 by or_introl, ex3_2_intro/ diff --git a/matita/matita/contribs/lambdadelta/ground/relocation/pr_pat_basic.ma b/matita/matita/contribs/lambdadelta/ground/relocation/pr_pat_basic.ma index 679754300..ca6abde33 100644 --- a/matita/matita/contribs/lambdadelta/ground/relocation/pr_pat_basic.ma +++ b/matita/matita/contribs/lambdadelta/ground/relocation/pr_pat_basic.ma @@ -20,14 +20,14 @@ include "ground/relocation/pr_nat_basic.ma". (*** at_basic_lt *) lemma pr_pat_basic_lt (m) (n) (i): - ninj i ≤ m → @❪i, 𝐛❨m,n❩❫ ≘ i. + ninj i ≤ m → @❨i, 𝐛❨m,n❩❩ ≘ i. #m #n #i >(npsucc_pred i) #Hmi /2 width=1 by pr_nat_basic_lt/ qed. (*** at_basic_ge *) lemma pr_pat_basic_ge (m) (n) (i): - m < ninj i → @❪i, 𝐛❨m,n❩❫ ≘ i+n. + m < ninj i → @❨i, 𝐛❨m,n❩❩ ≘ i+n. #m #n #i >(npsucc_pred i) #Hmi (liftsb_fwd_isid … HZ Hg) -Z @@ -292,9 +292,9 @@ lemma drops_inv_bind1_isuni: ∀b,f,I,K,L2. 𝐔❪f❫ → ⇩*[b,f] K.ⓘ[I] qed-. (* Basic_2A1: was: drop_inv_O1_pair2 *) -lemma drops_inv_bind2_isuni: ∀b,f,I,K,L1. 𝐔❪f❫ → ⇩*[b,f] L1 ≘ K.ⓘ[I] → - (𝐈❪f❫ ∧ L1 = K.ⓘ[I]) ∨ - ∃∃g,I1,K1. 𝐔❪g❫ & ⇩*[b,g] K1 ≘ K.ⓘ[I] & L1 = K1.ⓘ[I1] & f = ↑g. +lemma drops_inv_bind2_isuni: ∀b,f,I,K,L1. 𝐔❨f❩ → ⇩*[b,f] L1 ≘ K.ⓘ[I] → + (𝐈❨f❩ ∧ L1 = K.ⓘ[I]) ∨ + ∃∃g,I1,K1. 𝐔❨g❩ & ⇩*[b,g] K1 ≘ K.ⓘ[I] & L1 = K1.ⓘ[I1] & f = ↑g. #b #f #I #K * [ #Hf #H elim (drops_inv_atom1 … H) -H #H destruct | #L1 #I1 #Hf #H elim (drops_inv_bind1_isuni … Hf H) -Hf -H * @@ -304,7 +304,7 @@ lemma drops_inv_bind2_isuni: ∀b,f,I,K,L1. 𝐔❪f❫ → ⇩*[b,f] L1 ≘ K. ] qed-. -lemma drops_inv_bind2_isuni_next: ∀b,f,I,K,L1. 𝐔❪f❫ → ⇩*[b,↑f] L1 ≘ K.ⓘ[I] → +lemma drops_inv_bind2_isuni_next: ∀b,f,I,K,L1. 𝐔❨f❩ → ⇩*[b,↑f] L1 ≘ K.ⓘ[I] → ∃∃I1,K1. ⇩*[b,f] K1 ≘ K.ⓘ[I] & L1 = K1.ⓘ[I1]. #b #f #I #K #L1 #Hf #H elim (drops_inv_bind2_isuni … H) -H /2 width=3 by pr_isu_next/ -Hf * [ #H elim (pr_isi_inv_next … H) -H // @@ -312,7 +312,7 @@ lemma drops_inv_bind2_isuni_next: ∀b,f,I,K,L1. 𝐔❪f❫ → ⇩*[b,↑f] L1 ] qed-. -fact drops_inv_TF_aux: ∀f,L1,L2. ⇩*[Ⓕ,f] L1 ≘ L2 → 𝐔❪f❫ → +fact drops_inv_TF_aux: ∀f,L1,L2. ⇩*[Ⓕ,f] L1 ≘ L2 → 𝐔❨f❩ → ∀I,K. L2 = K.ⓘ[I] → ⇩*[Ⓣ,f] L1 ≘ K.ⓘ[I]. #f #L1 #L2 #H elim H -f -L1 -L2 [ #f #_ #_ #J #K #H destruct @@ -326,16 +326,16 @@ fact drops_inv_TF_aux: ∀f,L1,L2. ⇩*[Ⓕ,f] L1 ≘ L2 → 𝐔❪f❫ → qed-. (* Basic_2A1: includes: drop_inv_FT *) -lemma drops_inv_TF: ∀f,I,L,K. ⇩*[Ⓕ,f] L ≘ K.ⓘ[I] → 𝐔❪f❫ → ⇩*[Ⓣ,f] L ≘ K.ⓘ[I]. +lemma drops_inv_TF: ∀f,I,L,K. ⇩*[Ⓕ,f] L ≘ K.ⓘ[I] → 𝐔❨f❩ → ⇩*[Ⓣ,f] L ≘ K.ⓘ[I]. /2 width=3 by drops_inv_TF_aux/ qed-. (* Basic_2A1: includes: drop_inv_gen *) -lemma drops_inv_gen: ∀b,f,I,L,K. ⇩*[b,f] L ≘ K.ⓘ[I] → 𝐔❪f❫ → ⇩*[Ⓣ,f] L ≘ K.ⓘ[I]. +lemma drops_inv_gen: ∀b,f,I,L,K. ⇩*[b,f] L ≘ K.ⓘ[I] → 𝐔❨f❩ → ⇩*[Ⓣ,f] L ≘ K.ⓘ[I]. * /2 width=1 by drops_inv_TF/ qed-. (* Basic_2A1: includes: drop_inv_T *) -lemma drops_inv_F: ∀b,f,I,L,K. ⇩*[Ⓕ,f] L ≘ K.ⓘ[I] → 𝐔❪f❫ → ⇩*[b,f] L ≘ K.ⓘ[I]. +lemma drops_inv_F: ∀b,f,I,L,K. ⇩*[Ⓕ,f] L ≘ K.ⓘ[I] → 𝐔❨f❩ → ⇩*[b,f] L ≘ K.ⓘ[I]. * /2 width=1 by drops_inv_TF/ qed-. @@ -343,7 +343,7 @@ qed-. (* Basic_1: was: drop_S *) (* Basic_2A1: was: drop_fwd_drop2 *) -lemma drops_isuni_fwd_drop2: ∀b,f,I,X,K. 𝐔❪f❫ → ⇩*[b,f] X ≘ K.ⓘ[I] → ⇩*[b,↑f] X ≘ K. +lemma drops_isuni_fwd_drop2: ∀b,f,I,X,K. 𝐔❨f❩ → ⇩*[b,f] X ≘ K.ⓘ[I] → ⇩*[b,↑f] X ≘ K. /3 width=7 by drops_after_fwd_drop2, pr_after_isu_isi_next/ qed-. (* Inversion lemmas with uniform relocations ********************************) @@ -378,7 +378,7 @@ lemma drops_F_uni: ∀L,i. ⇩*[Ⓕ,𝐔❨i❩] L ≘ ⋆ ∨ ∃∃I,K. ⇩[i] qed-. (* Basic_2A1: includes: drop_split *) -lemma drops_split_trans: ∀b,f,L1,L2. ⇩*[b,f] L1 ≘ L2 → ∀f1,f2. f1 ⊚ f2 ≘ f → 𝐔❪f1❫ → +lemma drops_split_trans: ∀b,f,L1,L2. ⇩*[b,f] L1 ≘ L2 → ∀f1,f2. f1 ⊚ f2 ≘ f → 𝐔❨f1❩ → ∃∃L. ⇩*[b,f1] L1 ≘ L & ⇩*[b,f2] L ≘ L2. #b #f #L1 #L2 #H elim H -f -L1 -L2 [ #f #H0f #f1 #f2 #Hf #Hf1 @(ex2_intro … (⋆)) @drops_atom @@ -398,7 +398,7 @@ lemma drops_split_trans: ∀b,f,L1,L2. ⇩*[b,f] L1 ≘ L2 → ∀f1,f2. f1 ⊚ ] qed-. -lemma drops_split_div: ∀b,f1,L1,L. ⇩*[b,f1] L1 ≘ L → ∀f2,f. f1 ⊚ f2 ≘ f → 𝐔❪f2❫ → +lemma drops_split_div: ∀b,f1,L1,L. ⇩*[b,f1] L1 ≘ L → ∀f2,f. f1 ⊚ f2 ≘ f → 𝐔❨f2❩ → ∃∃L2. ⇩*[Ⓕ,f2] L ≘ L2 & ⇩*[Ⓕ,f] L1 ≘ L2. #b #f1 #L1 #L #H elim H -f1 -L1 -L [ #f1 #Hf1 #f2 #f #Hf #Hf2 @(ex2_intro … (⋆)) @drops_atom #H destruct @@ -418,12 +418,12 @@ qed-. (* Properties with application **********************************************) -lemma drops_tls_at: ∀f,i1,i2. @❪i1,f❫ ≘ i2 → +lemma drops_tls_at: ∀f,i1,i2. @❨i1,f❩ ≘ i2 → ∀b,L1,L2. ⇩*[b,⫰*[i2]f] L1 ≘ L2 → ⇩*[b,⫯⫰*[↑i2]f] L1 ≘ L2. /3 width=3 by drops_eq_repl_fwd, pr_pat_inv_succ_dx_tls/ qed-. -lemma drops_split_trans_bind2: ∀b,f,I,L,K0. ⇩*[b,f] L ≘ K0.ⓘ[I] → ∀i. @❪O,f❫ ≘ i → +lemma drops_split_trans_bind2: ∀b,f,I,L,K0. ⇩*[b,f] L ≘ K0.ⓘ[I] → ∀i. @❨O,f❩ ≘ i → ∃∃J,K. ⇩[i]L ≘ K.ⓘ[J] & ⇩*[b,⫰*[↑i]f] K ≘ K0 & ⇧*[⫰*[↑i]f] I ≘ J. #b #f #I #L #K0 #H #i #Hf elim (drops_split_trans … H) -H [ |5: @(pr_after_nat_uni … Hf) |2,3: skip ] /2 width=1 by pr_after_isi_dx/ #Y #HLY #H diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/drops_drops.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/drops_drops.ma index 7b8bebb69..12ca707c5 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/drops_drops.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/drops_drops.ma @@ -61,7 +61,7 @@ qed-. theorem drops_conf_div_isuni: ∀f1,L,K. ⇩*[Ⓣ,f1] L ≘ K → ∀f2. ⇩*[Ⓣ,f2] L ≘ K → - 𝐔❪f1❫ → 𝐔❪f2❫ → f1 ≡ f2. + 𝐔❨f1❩ → 𝐔❨f2❩ → f1 ≡ f2. #f1 #L #K #H elim H -f1 -L -K [ #f1 #Hf1 #f2 #Hf2 elim (drops_inv_atom1 … Hf2) -Hf2 /3 width=1 by pr_isi_inv_eq_repl/ @@ -131,7 +131,7 @@ qed-. lemma drops_conf_div_bind_isuni: ∀f1,f2,I1,I2,L,K. ⇩*[Ⓣ,f1] L ≘ K.ⓘ[I1] → ⇩*[Ⓣ,f2] L ≘ K.ⓘ[I2] → - 𝐔❪f1❫ → 𝐔❪f2❫ → f1 ≡ f2 ∧ I1 = I2. + 𝐔❨f1❩ → 𝐔❨f2❩ → f1 ≡ f2 ∧ I1 = I2. #f1 #f2 #I1 #I2 #L #K #Hf1 #Hf2 #HU1 #HU2 lapply (drops_isuni_fwd_drop2 … Hf1) // #H1 lapply (drops_isuni_fwd_drop2 … Hf2) // #H2 diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/drops_length.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/drops_length.ma index 49c4f0206..05468ea93 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/drops_length.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/drops_length.ma @@ -44,7 +44,7 @@ qed-. (* forward lemmas with finite colength assignment ***************************) lemma drops_fwd_fcla: ∀f,L1,L2. ⇩*[Ⓣ,f] L1 ≘ L2 → - ∃∃n. 𝐂❪f❫ ≘ n & |L1| = |L2| + n. + ∃∃n. 𝐂❨f❩ ≘ n & |L1| = |L2| + n. #f #L1 #L2 #H elim H -f -L1 -L2 [ /4 width=3 by pr_fcla_isi, ex2_intro/ | #f #I #L1 #L2 #_ * >length_bind /3 width=3 by pr_fcla_next, ex2_intro, eq_f/ @@ -53,46 +53,46 @@ lemma drops_fwd_fcla: ∀f,L1,L2. ⇩*[Ⓣ,f] L1 ≘ L2 → qed-. (* Basic_2A1: includes: drop_fwd_length *) -lemma drops_fcla_fwd: ∀f,L1,L2,n. ⇩*[Ⓣ,f] L1 ≘ L2 → 𝐂❪f❫ ≘ n → +lemma drops_fcla_fwd: ∀f,L1,L2,n. ⇩*[Ⓣ,f] L1 ≘ L2 → 𝐂❨f❩ ≘ n → |L1| = |L2| + n. #f #l1 #l2 #n #Hf #Hn elim (drops_fwd_fcla … Hf) -Hf #k #Hm #H <(pr_fcla_mono … Hm … Hn) -f // qed-. lemma drops_fwd_fcla_le2: ∀f,L1,L2. ⇩*[Ⓣ,f] L1 ≘ L2 → - ∃∃n. 𝐂❪f❫ ≘ n & n ≤ |L1|. + ∃∃n. 𝐂❨f❩ ≘ n & n ≤ |L1|. #f #L1 #L2 #H elim (drops_fwd_fcla … H) -H /2 width=3 by ex2_intro/ qed-. (* Basic_2A1: includes: drop_fwd_length_le2 *) -lemma drops_fcla_fwd_le2: ∀f,L1,L2,n. ⇩*[Ⓣ,f] L1 ≘ L2 → 𝐂❪f❫ ≘ n → +lemma drops_fcla_fwd_le2: ∀f,L1,L2,n. ⇩*[Ⓣ,f] L1 ≘ L2 → 𝐂❨f❩ ≘ n → n ≤ |L1|. #f #L1 #L2 #n #H #Hn elim (drops_fwd_fcla_le2 … H) -H #k #Hm #H <(pr_fcla_mono … Hm … Hn) -f // qed-. lemma drops_fwd_fcla_lt2: ∀f,L1,I2,K2. ⇩*[Ⓣ,f] L1 ≘ K2.ⓘ[I2] → - ∃∃n. 𝐂❪f❫ ≘ n & n < |L1|. + ∃∃n. 𝐂❨f❩ ≘ n & n < |L1|. #f #L1 #I2 #K2 #H elim (drops_fwd_fcla … H) -H #n #Hf #H >H -L1 /3 width=3 by nle_succ_bi, ex2_intro/ qed-. (* Basic_2A1: includes: drop_fwd_length_lt2 *) lemma drops_fcla_fwd_lt2: ∀f,L1,I2,K2,n. - ⇩*[Ⓣ,f] L1 ≘ K2.ⓘ[I2] → 𝐂❪f❫ ≘ n → + ⇩*[Ⓣ,f] L1 ≘ K2.ⓘ[I2] → 𝐂❨f❩ ≘ n → n < |L1|. #f #L1 #I2 #K2 #n #H #Hn elim (drops_fwd_fcla_lt2 … H) -H #k #Hm #H <(pr_fcla_mono … Hm … Hn) -f // qed-. (* Basic_2A1: includes: drop_fwd_length_lt4 *) -lemma drops_fcla_fwd_lt4: ∀f,L1,L2,n. ⇩*[Ⓣ,f] L1 ≘ L2 → 𝐂❪f❫ ≘ n → 0 < n → +lemma drops_fcla_fwd_lt4: ∀f,L1,L2,n. ⇩*[Ⓣ,f] L1 ≘ L2 → 𝐂❨f❩ ≘ n → 0 < n → |L2| < |L1|. #f #L1 #L2 #n #H #Hf #Hn lapply (drops_fcla_fwd … H Hf) -f /2 width=1 by nlt_inv_minus_dx/ qed-. (* Basic_2A1: includes: drop_inv_length_eq *) -lemma drops_inv_length_eq: ∀f,L1,L2. ⇩*[Ⓣ,f] L1 ≘ L2 → |L1| = |L2| → 𝐈❪f❫. +lemma drops_inv_length_eq: ∀f,L1,L2. ⇩*[Ⓣ,f] L1 ≘ L2 → |L1| = |L2| → 𝐈❨f❩. #f #L1 #L2 #H #HL12 elim (drops_fwd_fcla … H) -H #n #Hn H2 -L2 qed-. theorem drops_conf_div: ∀f1,f2,L1,L2. ⇩*[Ⓣ,f1] L1 ≘ L2 → ⇩*[Ⓣ,f2] L1 ≘ L2 → - ∃∃n. 𝐂❪f1❫ ≘ n & 𝐂❪f2❫ ≘ n. + ∃∃n. 𝐂❨f1❩ ≘ n & 𝐂❨f2❩ ≘ n. #f1 #f2 #L1 #L2 #H1 #H2 elim (drops_fwd_fcla … H1) -H1 #n1 #Hf1 #H1 elim (drops_fwd_fcla … H2) -H2 #n2 #Hf2 >H1 -L1 #H @@ -116,7 +116,7 @@ lapply (eq_inv_nplus_bi_sn … H) -L2 #H destruct /2 width=3 by ex2_intro/ qed-. theorem drops_conf_div_fcla: ∀f1,f2,L1,L2,n1,n2. - ⇩*[Ⓣ,f1] L1 ≘ L2 → ⇩*[Ⓣ,f2] L1 ≘ L2 → 𝐂❪f1❫ ≘ n1 → 𝐂❪f2❫ ≘ n2 → + ⇩*[Ⓣ,f1] L1 ≘ L2 → ⇩*[Ⓣ,f2] L1 ≘ L2 → 𝐂❨f1❩ ≘ n1 → 𝐂❨f2❩ ≘ n2 → n1 = n2. #f1 #f2 #L1 #L2 #n1 #n2 #Hf1 #Hf2 #Hn1 #Hn2 lapply (drops_fcla_fwd … Hf1 Hn1) -f1 #H1 diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/drops_lex.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/drops_lex.ma index 4e261897d..5c85576b3 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/drops_lex.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/drops_lex.ma @@ -23,11 +23,11 @@ definition dedropable_sn: predicate … ≝ ∃∃L2. L1 ⪤[R] L2 & ⇩*[b,f] L2 ≘ K2 & L1 ≡[f] L2. definition dropable_sn: predicate … ≝ - λR. ∀b,f,L1,K1. ⇩*[b,f] L1 ≘ K1 → 𝐔❪f❫ → ∀L2. L1 ⪤[R] L2 → + λR. ∀b,f,L1,K1. ⇩*[b,f] L1 ≘ K1 → 𝐔❨f❩ → ∀L2. L1 ⪤[R] L2 → ∃∃K2. K1 ⪤[R] K2 & ⇩*[b,f] L2 ≘ K2. definition dropable_dx: predicate … ≝ - λR. ∀L1,L2. L1 ⪤[R] L2 → ∀b,f,K2. ⇩*[b,f] L2 ≘ K2 → 𝐔❪f❫ → + λR. ∀L1,L2. L1 ⪤[R] L2 → ∀b,f,K2. ⇩*[b,f] L2 ≘ K2 → 𝐔❨f❩ → ∃∃K1. ⇩*[b,f] L1 ≘ K1 & K1 ⪤[R] K2. (* Properties with generic extension ****************************************) @@ -58,7 +58,7 @@ qed-. (* Basic_2A1: includes: lpx_sn_drop_conf *) lemma lex_drops_conf_pair (R): ∀L1,L2. L1 ⪤[R] L2 → - ∀b,f,I,K1,V1. ⇩*[b,f] L1 ≘ K1.ⓑ[I]V1 → 𝐔❪f❫ → + ∀b,f,I,K1,V1. ⇩*[b,f] L1 ≘ K1.ⓑ[I]V1 → 𝐔❨f❩ → ∃∃K2,V2. ⇩*[b,f] L2 ≘ K2.ⓑ[I]V2 & K1 ⪤[R] K2 & R K1 V1 V2. #R #L1 #L2 * #f2 #Hf2 #HL12 #b #f #I #K1 #V1 #HLK1 #Hf elim (sex_drops_conf_push … HL12 … HLK1 Hf f2) -L1 -Hf @@ -71,7 +71,7 @@ qed-. (* Basic_2A1: includes: lpx_sn_drop_trans *) lemma lex_drops_trans_pair (R): ∀L1,L2. L1 ⪤[R] L2 → - ∀b,f,I,K2,V2. ⇩*[b,f] L2 ≘ K2.ⓑ[I]V2 → 𝐔❪f❫ → + ∀b,f,I,K2,V2. ⇩*[b,f] L2 ≘ K2.ⓑ[I]V2 → 𝐔❨f❩ → ∃∃K1,V1. ⇩*[b,f] L1 ≘ K1.ⓑ[I]V1 & K1 ⪤[R] K2 & R K1 V1 V2. #R #L1 #L2 * #f2 #Hf2 #HL12 #b #f #I #K2 #V2 #HLK2 #Hf elim (sex_drops_trans_push … HL12 … HLK2 Hf f2) -L2 -Hf diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/drops_seq.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/drops_seq.ma index 8047fdd68..5d2fed25e 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/drops_seq.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/drops_seq.ma @@ -30,7 +30,7 @@ lemma seq_co_dropable_dx: co_dropable_dx seq. (* Basic_2A1: includes: lreq_drop_trans_be *) lemma seq_drops_trans_next: ∀f2,L1,L2. L1 ≡[f2] L2 → - ∀b,f,I,K2. ⇩*[b,f] L2 ≘ K2.ⓘ[I] → 𝐔❪f❫ → + ∀b,f,I,K2. ⇩*[b,f] L2 ≘ K2.ⓘ[I] → 𝐔❨f❩ → ∀f1. f ~⊚ ↑f1 ≘ f2 → ∃∃K1. ⇩*[b,f] L1 ≘ K1.ⓘ[I] & K1 ≡[f1] K2. #f2 #L1 #L2 #HL12 #b #f #I2 #K2 #HLK2 #Hf #f1 #Hf2 @@ -41,7 +41,7 @@ qed-. (* Basic_2A1: includes: lreq_drop_conf_be *) lemma seq_drops_conf_next: ∀f2,L1,L2. L1 ≡[f2] L2 → - ∀b,f,I,K1. ⇩*[b,f] L1 ≘ K1.ⓘ[I] → 𝐔❪f❫ → + ∀b,f,I,K1. ⇩*[b,f] L1 ≘ K1.ⓘ[I] → 𝐔❨f❩ → ∀f1. f ~⊚ ↑f1 ≘ f2 → ∃∃K2. ⇩*[b,f] L2 ≘ K2.ⓘ[I] & K1 ≡[f1] K2. #f2 #L1 #L2 #HL12 #b #f #I1 #K1 #HLK1 #Hf #f1 #Hf2 diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/drops_sex.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/drops_sex.ma index 18017d88a..3195ebd21 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/drops_sex.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/drops_sex.ma @@ -91,7 +91,7 @@ lemma sex_liftable_co_dedropable_sn (RN) (RP): qed-. fact sex_dropable_dx_aux (RN) (RP): - ∀b,f,L2,K2. ⇩*[b,f] L2 ≘ K2 → 𝐔❪f❫ → + ∀b,f,L2,K2. ⇩*[b,f] L2 ≘ K2 → 𝐔❨f❩ → ∀f2,L1. L1 ⪤[RN,RP,f2] L2 → ∀f1. f ~⊚ f1 ≘ f2 → ∃∃K1. ⇩*[b,f] L1 ≘ K1 & K1 ⪤[RN,RP,f1] K2. #RN #RP #b #f #L2 #K2 #H elim H -f -L2 -K2 @@ -119,7 +119,7 @@ lemma sex_co_dropable_dx (RN) (RP): lemma sex_drops_conf_next (RN) (RP): ∀f2,L1,L2. L1 ⪤[RN,RP,f2] L2 → - ∀b,f,I1,K1. ⇩*[b,f] L1 ≘ K1.ⓘ[I1] → 𝐔❪f❫ → + ∀b,f,I1,K1. ⇩*[b,f] L1 ≘ K1.ⓘ[I1] → 𝐔❨f❩ → ∀f1. f ~⊚ ↑f1 ≘ f2 → ∃∃I2,K2. ⇩*[b,f] L2 ≘ K2.ⓘ[I2] & K1 ⪤[RN,RP,f1] K2 & RN K1 I1 I2. #RN #RP #f2 #L1 #L2 #HL12 #b #f #I1 #K1 #HLK1 #Hf #f1 #Hf2 @@ -130,7 +130,7 @@ qed-. lemma sex_drops_conf_push (RN) (RP): ∀f2,L1,L2. L1 ⪤[RN,RP,f2] L2 → - ∀b,f,I1,K1. ⇩*[b,f] L1 ≘ K1.ⓘ[I1] → 𝐔❪f❫ → + ∀b,f,I1,K1. ⇩*[b,f] L1 ≘ K1.ⓘ[I1] → 𝐔❨f❩ → ∀f1. f ~⊚ ⫯f1 ≘ f2 → ∃∃I2,K2. ⇩*[b,f] L2 ≘ K2.ⓘ[I2] & K1 ⪤[RN,RP,f1] K2 & RP K1 I1 I2. #RN #RP #f2 #L1 #L2 #HL12 #b #f #I1 #K1 #HLK1 #Hf #f1 #Hf2 @@ -141,7 +141,7 @@ qed-. lemma sex_drops_trans_next (RN) (RP): ∀f2,L1,L2. L1 ⪤[RN,RP,f2] L2 → - ∀b,f,I2,K2. ⇩*[b,f] L2 ≘ K2.ⓘ[I2] → 𝐔❪f❫ → + ∀b,f,I2,K2. ⇩*[b,f] L2 ≘ K2.ⓘ[I2] → 𝐔❨f❩ → ∀f1. f ~⊚ ↑f1 ≘ f2 → ∃∃I1,K1. ⇩*[b,f] L1 ≘ K1.ⓘ[I1] & K1 ⪤[RN,RP,f1] K2 & RN K1 I1 I2. #RN #RP #f2 #L1 #L2 #HL12 #b #f #I2 #K2 #HLK2 #Hf #f1 #Hf2 @@ -151,7 +151,7 @@ elim (sex_co_dropable_dx … HL12 … HLK2 … Hf … Hf2) -L2 -f2 -Hf qed-. lemma sex_drops_trans_push (RN) (RP): ∀f2,L1,L2. L1 ⪤[RN,RP,f2] L2 → - ∀b,f,I2,K2. ⇩*[b,f] L2 ≘ K2.ⓘ[I2] → 𝐔❪f❫ → + ∀b,f,I2,K2. ⇩*[b,f] L2 ≘ K2.ⓘ[I2] → 𝐔❨f❩ → ∀f1. f ~⊚ ⫯f1 ≘ f2 → ∃∃I1,K1. ⇩*[b,f] L1 ≘ K1.ⓘ[I1] & K1 ⪤[RN,RP,f1] K2 & RP K1 I1 I2. #RN #RP #f2 #L1 #L2 #HL12 #b #f #I2 #K2 #HLK2 #Hf #f1 #Hf2 @@ -187,7 +187,7 @@ elim (sex_liftable_co_dedropable_sn … H1RN H1RP H2RN H2RP … HLK1 … HK12 qed-. lemma drops_atom2_sex_conf (RN) (RP): - ∀b,f1,L1. ⇩*[b,f1] L1 ≘ ⋆ → 𝐔❪f1❫ → + ∀b,f1,L1. ⇩*[b,f1] L1 ≘ ⋆ → 𝐔❨f1❩ → ∀f,L2. L1 ⪤[RN,RP,f] L2 → ∀f2. f1 ~⊚ f2 ≘f → ⇩*[b,f1] L2 ≘ ⋆. #RN #RP #b #f1 #L1 #H1 #Hf1 #f #L2 #H2 #f2 #H3 diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/drops_weight.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/drops_weight.ma index 97b730cc8..ece11f807 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/drops_weight.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/drops_weight.ma @@ -31,7 +31,7 @@ qed-. (* Basic_2A1: includes: drop_fwd_lw_lt *) lemma drops_fwd_lw_lt: ∀f,L1,L2. ⇩*[Ⓣ,f] L1 ≘ L2 → - (𝐈❪f❫ → ⊥) → ♯❨L2❩ < ♯❨L1❩. + (𝐈❨f❩ → ⊥) → ♯❨L2❩ < ♯❨L1❩. #f #L1 #L2 #H elim H -f -L1 -L2 [ #f #Hf #Hnf elim Hnf -Hnf /2 width=1 by/ | /3 width=3 by drops_fwd_lw, nle_nlt_trans/ diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/lex.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/lex.ma index 02ba4bedc..240c00d60 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/lex.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/lex.ma @@ -21,7 +21,7 @@ include "static_2/relocation/sex.ma". (* GENERIC EXTENSION OF A CONTEXT-SENSITIVE REALTION FOR TERMS **************) definition lex (R): relation lenv ≝ - λL1,L2. ∃∃f. 𝐈❪f❫ & L1 ⪤[cfull,cext2 R,f] L2. + λL1,L2. ∃∃f. 𝐈❨f❩ & L1 ⪤[cfull,cext2 R,f] L2. interpretation "generic extension (local environment)" 'Relation R L1 L2 = (lex R L1 L2). diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/lifts.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/lifts.ma index e88d128d3..1a1f561f8 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/lifts.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/lifts.ma @@ -32,7 +32,7 @@ include "static_2/syntax/term.ma". *) inductive lifts: pr_map → relation term ≝ | lifts_sort: ∀f,s. lifts f (⋆s) (⋆s) -| lifts_lref: ∀f,i1,i2. @↑❪i1,f❫ ≘ i2 → lifts f (#i1) (#i2) +| lifts_lref: ∀f,i1,i2. @↑❨i1,f❩ ≘ i2 → lifts f (#i1) (#i2) | lifts_gref: ∀f,l. lifts f (§l) (§l) | lifts_bind: ∀f,p,I,V1,V2,T1,T2. lifts f V1 V2 → lifts (⫯f) T1 T2 → @@ -88,7 +88,7 @@ lemma lifts_inv_sort1: ∀f,Y,s. ⇧*[f] ⋆s ≘ Y → Y = ⋆s. /2 width=4 by lifts_inv_sort1_aux/ qed-. fact lifts_inv_lref1_aux: ∀f,X,Y. ⇧*[f] X ≘ Y → ∀i1. X = #i1 → - ∃∃i2. @↑❪i1,f❫ ≘ i2 & Y = #i2. + ∃∃i2. @↑❨i1,f❩ ≘ i2 & Y = #i2. #f #X #Y * -f -X -Y [ #f #s #x #H destruct | #f #i1 #i2 #Hi12 #x #H destruct /2 width=3 by ex2_intro/ @@ -101,7 +101,7 @@ qed-. (* Basic_1: was: lift1_lref *) (* Basic_2A1: includes: lift_inv_lref1 lift_inv_lref1_lt lift_inv_lref1_ge *) lemma lifts_inv_lref1: ∀f,Y,i1. ⇧*[f] #i1 ≘ Y → - ∃∃i2. @↑❪i1,f❫ ≘ i2 & Y = #i2. + ∃∃i2. @↑❨i1,f❩ ≘ i2 & Y = #i2. /2 width=3 by lifts_inv_lref1_aux/ qed-. fact lifts_inv_gref1_aux: ∀f,X,Y. ⇧*[f] X ≘ Y → ∀l. X = §l → Y = §l. @@ -170,7 +170,7 @@ lemma lifts_inv_sort2: ∀f,X,s. ⇧*[f] X ≘ ⋆s → X = ⋆s. /2 width=4 by lifts_inv_sort2_aux/ qed-. fact lifts_inv_lref2_aux: ∀f,X,Y. ⇧*[f] X ≘ Y → ∀i2. Y = #i2 → - ∃∃i1. @↑❪i1,f❫ ≘ i2 & X = #i1. + ∃∃i1. @↑❨i1,f❩ ≘ i2 & X = #i1. #f #X #Y * -f -X -Y [ #f #s #x #H destruct | #f #i1 #i2 #Hi12 #x #H destruct /2 width=3 by ex2_intro/ @@ -183,7 +183,7 @@ qed-. (* Basic_1: includes: lift_gen_lref lift_gen_lref_lt lift_gen_lref_false lift_gen_lref_ge *) (* Basic_2A1: includes: lift_inv_lref2 lift_inv_lref2_lt lift_inv_lref2_be lift_inv_lref2_ge lift_inv_lref2_plus *) lemma lifts_inv_lref2: ∀f,X,i2. ⇧*[f] X ≘ #i2 → - ∃∃i1. @↑❪i1,f❫ ≘ i2 & X = #i1. + ∃∃i1. @↑❨i1,f❩ ≘ i2 & X = #i1. /2 width=3 by lifts_inv_lref2_aux/ qed-. fact lifts_inv_gref2_aux: ∀f,X,Y. ⇧*[f] X ≘ Y → ∀l. Y = §l → X = §l. @@ -242,7 +242,7 @@ lemma lifts_inv_flat2: ∀f,I,V2,T2,X. ⇧*[f] X ≘ ⓕ[I]V2.T2 → lemma lifts_inv_atom1: ∀f,I,Y. ⇧*[f] ⓪[I] ≘ Y → ∨∨ ∃∃s. I = Sort s & Y = ⋆s - | ∃∃i,j. @↑❪i,f❫ ≘ j & I = LRef i & Y = #j + | ∃∃i,j. @↑❨i,f❩ ≘ j & I = LRef i & Y = #j | ∃∃l. I = GRef l & Y = §l. #f * #n #Y #H [ lapply (lifts_inv_sort1 … H) @@ -253,7 +253,7 @@ qed-. lemma lifts_inv_atom2: ∀f,I,X. ⇧*[f] X ≘ ⓪[I] → ∨∨ ∃∃s. X = ⋆s & I = Sort s - | ∃∃i,j. @↑❪i,f❫ ≘ j & X = #i & I = LRef j + | ∃∃i,j. @↑❨i,f❩ ≘ j & X = #i & I = LRef j | ∃∃l. X = §l & I = GRef l. #f * #n #X #H [ lapply (lifts_inv_sort2 … H) @@ -340,7 +340,7 @@ qed-. (* Basic forward lemmas *****************************************************) (* Basic_2A1: includes: lift_inv_O2 *) -lemma lifts_fwd_isid: ∀f,T1,T2. ⇧*[f] T1 ≘ T2 → 𝐈❪f❫ → T1 = T2. +lemma lifts_fwd_isid: ∀f,T1,T2. ⇧*[f] T1 ≘ T2 → 𝐈❨f❩ → T1 = T2. #f #T1 #T2 #H elim H -f -T1 -T2 /4 width=3 by pr_isi_nat_des, pr_isi_push, eq_f2, eq_f/ qed-. @@ -386,13 +386,13 @@ qed-. (* Basic_1: includes: lift_r *) (* Basic_2A1: includes: lift_refl *) -lemma lifts_refl: ∀T,f. 𝐈❪f❫ → ⇧*[f] T ≘ T. +lemma lifts_refl: ∀T,f. 𝐈❨f❩ → ⇧*[f] T ≘ T. #T elim T -T * /4 width=3 by lifts_flat, lifts_bind, lifts_lref, pr_isi_inv_pat, pr_isi_push/ qed. (* Basic_2A1: includes: lift_total *) -lemma lifts_total: ∀T1,f. 𝐓❪f❫ → ∃T2. ⇧*[f] T1 ≘ T2. +lemma lifts_total: ∀T1,f. 𝐓❨f❩ → ∃T2. ⇧*[f] T1 ≘ T2. #T1 elim T1 -T1 * /3 width=2 by lifts_sort, lifts_gref, ex_intro/ [ #i #f #Hf elim (Hf (↑i)) -Hf /3 width=2 by ex_intro, lifts_lref/ ] @@ -437,7 +437,7 @@ qed-. (* Note: apparently, this was missing in Basic_2A1 *) lemma lifts_split_div: ∀f1,T1,T2. ⇧*[f1] T1 ≘ T2 → - ∀f2. 𝐓❪f2❫ → ∀f. f2 ⊚ f1 ≘ f → + ∀f2. 𝐓❨f2❩ → ∀f. f2 ⊚ f1 ≘ f → ∃∃T. ⇧*[f2] T2 ≘ T & ⇧*[f] T1 ≘ T. #f1 #T1 #T2 #H elim H -f1 -T1 -T2 [ /3 width=3 by lifts_sort, ex2_intro/ @@ -456,7 +456,7 @@ qed-. (* Basic_1: includes: dnf_dec2 dnf_dec *) (* Basic_2A1: includes: is_lift_dec *) -lemma is_lifts_dec: ∀T2,f. 𝐓❪f❫ → Decidable (∃T1. ⇧*[f] T1 ≘ T2). +lemma is_lifts_dec: ∀T2,f. 𝐓❨f❩ → Decidable (∃T1. ⇧*[f] T1 ≘ T2). #T1 elim T1 -T1 [ * [1,3: /3 width=2 by lifts_sort, lifts_gref, ex_intro, or_introl/ ] #i2 #f #Hf elim (is_pr_nat_dec f i2) // diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_bind.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_bind.ma index 3b45f26c3..71e795d2f 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_bind.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_bind.ma @@ -52,7 +52,7 @@ lemma liftsb_eq_repl_back: ∀I1,I2. pr_eq_repl_back … (λf. ⇧*[f] I1 ≘ I2 #I1 #I2 #f1 * -I1 -I2 /3 width=3 by lifts_eq_repl_back, ext2_pair/ qed-. -lemma liftsb_refl (f): 𝐈❪f❫ → reflexive … (liftsb f). +lemma liftsb_refl (f): 𝐈❨f❩ → reflexive … (liftsb f). /3 width=1 by lifts_refl, ext2_refl/ qed. lemma liftsb_total: ∀I1,f. ∃I2. ⇧*[f] I1 ≘ I2. @@ -71,6 +71,6 @@ qed-. (* Basic forward lemmas *****************************************************) lemma liftsb_fwd_isid (f): - ∀I1,I2. ⇧*[f] I1 ≘ I2 → 𝐈❪f❫ → I1 = I2. + ∀I1,I2. ⇧*[f] I1 ≘ I2 → 𝐈❨f❩ → I1 = I2. #f #I1 #I2 * -I1 -I2 /3 width=3 by lifts_fwd_isid, eq_f2/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_simple.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_simple.ma index 5984132eb..298a3d4b7 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_simple.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_simple.ma @@ -20,13 +20,13 @@ include "static_2/relocation/lifts.ma". (* Forward lemmas with simple terms *****************************************) (* Basic_2A1: includes: lift_simple_dx *) -lemma lifts_simple_dx: ∀f,T1,T2. ⇧*[f] T1 ≘ T2 → 𝐒❪T1❫ → 𝐒❪T2❫. +lemma lifts_simple_dx: ∀f,T1,T2. ⇧*[f] T1 ≘ T2 → 𝐒❨T1❩ → 𝐒❨T2❩. #f #T1 #T2 #H elim H -f -T1 -T2 // #f #p #I #V1 #V2 #T1 #T2 #_ #_ #_ #_ #H elim (simple_inv_bind … H) qed-. (* Basic_2A1: includes: lift_simple_sn *) -lemma lifts_simple_sn: ∀f,T1,T2. ⇧*[f] T1 ≘ T2 → 𝐒❪T2❫ → 𝐒❪T1❫. +lemma lifts_simple_sn: ∀f,T1,T2. ⇧*[f] T1 ≘ T2 → 𝐒❨T2❩ → 𝐒❨T1❩. #f #T1 #T2 #H elim H -f -T1 -T2 // #f #p #I #V1 #V2 #T1 #T2 #_ #_ #_ #_ #H elim (simple_inv_bind … H) qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/sex.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/sex.ma index 47912ace0..c51389ea8 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/sex.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/sex.ma @@ -242,7 +242,7 @@ qed-. lemma sex_co_isid (RN1) (RP1) (RN2) (RP2): RP1 ⊆ RP2 → - ∀f,L1,L2. L1 ⪤[RN1,RP1,f] L2 → 𝐈❪f❫ → + ∀f,L1,L2. L1 ⪤[RN1,RP1,f] L2 → 𝐈❨f❩ → L1 ⪤[RN2,RP2,f] L2. #RN1 #RP1 #RN2 #RP2 #HR #f #L1 #L2 #H elim H -f -L1 -L2 // #f #I1 #I2 #K1 #K2 #_ #HI12 #IH #H diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/sex_length.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/sex_length.ma index c99c786c6..50ed1d839 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/sex_length.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/sex_length.ma @@ -36,7 +36,7 @@ lemma sex_length_cfull: ∀L1,L2. |L1| = |L2| → ∀f. L1 ⪤[cfull,cfull,f] L2 qed. lemma sex_length_isid: ∀R,L1,L2. |L1| = |L2| → - ∀f. 𝐈❪f❫ → L1 ⪤[R,cfull,f] L2. + ∀f. 𝐈❨f❩ → L1 ⪤[R,cfull,f] L2. #R #L1 elim L1 -L1 [ #Y2 #H >(length_inv_zero_sn … H) -Y2 // | #L1 #I1 #IH #Y2 #H #f #Hf diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/sex_sex.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/sex_sex.ma index 19078cfbe..90ea65aaf 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/sex_sex.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/sex_sex.ma @@ -52,7 +52,7 @@ theorem sex_trans (RN) (RP) (f): /2 width=9 by sex_trans_gen/ qed-. theorem sex_trans_id_cfull (R1) (R2) (R3): - ∀L1,L,f. L1 ⪤[R1,cfull,f] L → 𝐈❪f❫ → + ∀L1,L,f. L1 ⪤[R1,cfull,f] L → 𝐈❨f❩ → ∀L2. L ⪤[R2,cfull,f] L2 → L1 ⪤[R3,cfull,f] L2. #R1 #R2 #R3 #L1 #L #f #H elim H -L1 -L -f [ #f #Hf #L2 #H >(sex_inv_atom1 … H) -L2 // ] diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/sex_tc.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/sex_tc.ma index 0a95ed3b0..86db581d2 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/sex_tc.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/sex_tc.ma @@ -18,7 +18,7 @@ include "static_2/relocation/sex.ma". (* GENERIC ENTRYWISE EXTENSION OF CONTEXT-SENSITIVE REALTIONS FOR TERMS *****) definition s_rs_transitive_isid: relation (relation3 lenv bind bind) ≝ λRN,RP. - ∀f. 𝐈❪f❫ → s_rs_transitive … RP (λ_.sex RN RP f). + ∀f. 𝐈❨f❩ → s_rs_transitive … RP (λ_.sex RN RP f). (* Properties with transitive closure ***************************************) @@ -82,7 +82,7 @@ qed. (* Basic_2A1: uses: TC_lpx_sn_ind *) theorem sex_tc_step_dx: ∀RN,RP. s_rs_transitive_isid RN RP → - ∀f,L1,L. L1 ⪤[RN,RP,f] L → 𝐈❪f❫ → + ∀f,L1,L. L1 ⪤[RN,RP,f] L → 𝐈❨f❩ → ∀L2. L ⪤[RN,CTC … RP,f] L2 → L1⪤ [RN,CTC … RP,f] L2. #RN #RP #HRP #f #L1 #L #H elim H -f -L1 -L [ #f #_ #Y #H -HRP >(sex_inv_atom1 … H) -Y // ] @@ -99,7 +99,7 @@ qed-. (* Advanced properties ******************************************************) lemma sex_tc_dx: ∀RN,RP. s_rs_transitive_isid RN RP → - ∀f. 𝐈❪f❫ → ∀L1,L2. TC … (sex RN RP f) L1 L2 → L1 ⪤[RN,CTC … RP,f] L2. + ∀f. 𝐈❨f❩ → ∀L1,L2. TC … (sex RN RP f) L1 L2 → L1 ⪤[RN,CTC … RP,f] L2. #RN #RP #HRP #f #Hf #L1 #L2 #H @(TC_ind_dx ??????? H) -L1 /3 width=3 by sex_tc_step_dx, sex_tc_inj_dx/ qed. diff --git a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqup.ma b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqup.ma index 00b3e4fed..d01ca0882 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqup.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqup.ma @@ -30,55 +30,55 @@ interpretation "plus-iterated structural successor (closure)" (* Basic properties *********************************************************) -lemma fqu_fqup: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → - ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫. +lemma fqu_fqup: ∀b,G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂[b] ❨G2,L2,T2❩ → + ❨G1,L1,T1❩ ⬂+[b] ❨G2,L2,T2❩. /2 width=1 by tri_inj/ qed. lemma fqup_strap1: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. - ❪G1,L1,T1❫ ⬂+[b] ❪G,L,T❫ → ❪G,L,T❫ ⬂[b] ❪G2,L2,T2❫ → - ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫. + ❨G1,L1,T1❩ ⬂+[b] ❨G,L,T❩ → ❨G,L,T❩ ⬂[b] ❨G2,L2,T2❩ → + ❨G1,L1,T1❩ ⬂+[b] ❨G2,L2,T2❩. /2 width=5 by tri_step/ qed. lemma fqup_strap2: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. - ❪G1,L1,T1❫ ⬂[b] ❪G,L,T❫ → ❪G,L,T❫ ⬂+[b] ❪G2,L2,T2❫ → - ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫. + ❨G1,L1,T1❩ ⬂[b] ❨G,L,T❩ → ❨G,L,T❩ ⬂+[b] ❨G2,L2,T2❩ → + ❨G1,L1,T1❩ ⬂+[b] ❨G2,L2,T2❩. /2 width=5 by tri_TC_strap/ qed. -lemma fqup_pair_sn: ∀b,I,G,L,V,T. ❪G,L,②[I]V.T❫ ⬂+[b] ❪G,L,V❫. +lemma fqup_pair_sn: ∀b,I,G,L,V,T. ❨G,L,②[I]V.T❩ ⬂+[b] ❨G,L,V❩. /2 width=1 by fqu_pair_sn, fqu_fqup/ qed. -lemma fqup_bind_dx: ∀p,I,G,L,V,T. ❪G,L,ⓑ[p,I]V.T❫ ⬂+[Ⓣ] ❪G,L.ⓑ[I]V,T❫. +lemma fqup_bind_dx: ∀p,I,G,L,V,T. ❨G,L,ⓑ[p,I]V.T❩ ⬂+[Ⓣ] ❨G,L.ⓑ[I]V,T❩. /3 width=1 by fqu_bind_dx, fqu_fqup/ qed. -lemma fqup_clear: ∀p,I,G,L,V,T. ❪G,L,ⓑ[p,I]V.T❫ ⬂+[Ⓕ] ❪G,L.ⓧ,T❫. +lemma fqup_clear: ∀p,I,G,L,V,T. ❨G,L,ⓑ[p,I]V.T❩ ⬂+[Ⓕ] ❨G,L.ⓧ,T❩. /3 width=1 by fqu_clear, fqu_fqup/ qed. -lemma fqup_flat_dx: ∀b,I,G,L,V,T. ❪G,L,ⓕ[I]V.T❫ ⬂+[b] ❪G,L,T❫. +lemma fqup_flat_dx: ∀b,I,G,L,V,T. ❨G,L,ⓕ[I]V.T❩ ⬂+[b] ❨G,L,T❩. /2 width=1 by fqu_flat_dx, fqu_fqup/ qed. -lemma fqup_flat_dx_pair_sn: ∀b,I1,I2,G,L,V1,V2,T. ❪G,L,ⓕ[I1]V1.②[I2]V2.T❫ ⬂+[b] ❪G,L,V2❫. +lemma fqup_flat_dx_pair_sn: ∀b,I1,I2,G,L,V1,V2,T. ❨G,L,ⓕ[I1]V1.②[I2]V2.T❩ ⬂+[b] ❨G,L,V2❩. /2 width=5 by fqu_pair_sn, fqup_strap1/ qed. -lemma fqup_bind_dx_flat_dx: ∀p,G,I1,I2,L,V1,V2,T. ❪G,L,ⓑ[p,I1]V1.ⓕ[I2]V2.T❫ ⬂+[Ⓣ] ❪G,L.ⓑ[I1]V1,T❫. +lemma fqup_bind_dx_flat_dx: ∀p,G,I1,I2,L,V1,V2,T. ❨G,L,ⓑ[p,I1]V1.ⓕ[I2]V2.T❩ ⬂+[Ⓣ] ❨G,L.ⓑ[I1]V1,T❩. /2 width=5 by fqu_flat_dx, fqup_strap1/ qed. -lemma fqup_flat_dx_bind_dx: ∀p,I1,I2,G,L,V1,V2,T. ❪G,L,ⓕ[I1]V1.ⓑ[p,I2]V2.T❫ ⬂+[Ⓣ] ❪G,L.ⓑ[I2]V2,T❫. +lemma fqup_flat_dx_bind_dx: ∀p,I1,I2,G,L,V1,V2,T. ❨G,L,ⓕ[I1]V1.ⓑ[p,I2]V2.T❩ ⬂+[Ⓣ] ❨G,L.ⓑ[I2]V2,T❩. /3 width=5 by fqu_bind_dx, fqup_strap1/ qed. (* Basic eliminators ********************************************************) lemma fqup_ind: ∀b,G1,L1,T1. ∀Q:relation3 …. - (∀G2,L2,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → Q G2 L2 T2) → - (∀G,G2,L,L2,T,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G,L,T❫ → ❪G,L,T❫ ⬂[b] ❪G2,L2,T2❫ → Q G L T → Q G2 L2 T2) → - ∀G2,L2,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → Q G2 L2 T2. + (∀G2,L2,T2. ❨G1,L1,T1❩ ⬂[b] ❨G2,L2,T2❩ → Q G2 L2 T2) → + (∀G,G2,L,L2,T,T2. ❨G1,L1,T1❩ ⬂+[b] ❨G,L,T❩ → ❨G,L,T❩ ⬂[b] ❨G2,L2,T2❩ → Q G L T → Q G2 L2 T2) → + ∀G2,L2,T2. ❨G1,L1,T1❩ ⬂+[b] ❨G2,L2,T2❩ → Q G2 L2 T2. #b #G1 #L1 #T1 #Q #IH1 #IH2 #G2 #L2 #T2 #H @(tri_TC_ind … IH1 IH2 G2 L2 T2 H) qed-. lemma fqup_ind_dx: ∀b,G2,L2,T2. ∀Q:relation3 …. - (∀G1,L1,T1. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → Q G1 L1 T1) → - (∀G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ⬂[b] ❪G,L,T❫ → ❪G,L,T❫ ⬂+[b] ❪G2,L2,T2❫ → Q G L T → Q G1 L1 T1) → - ∀G1,L1,T1. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → Q G1 L1 T1. + (∀G1,L1,T1. ❨G1,L1,T1❩ ⬂[b] ❨G2,L2,T2❩ → Q G1 L1 T1) → + (∀G1,G,L1,L,T1,T. ❨G1,L1,T1❩ ⬂[b] ❨G,L,T❩ → ❨G,L,T❩ ⬂+[b] ❨G2,L2,T2❩ → Q G L T → Q G1 L1 T1) → + ∀G1,L1,T1. ❨G1,L1,T1❩ ⬂+[b] ❨G2,L2,T2❩ → Q G1 L1 T1. #b #G2 #L2 #T2 #Q #IH1 #IH2 #G1 #L1 #T1 #H @(tri_TC_ind_dx … IH1 IH2 G1 L1 T1 H) qed-. @@ -86,7 +86,7 @@ qed-. (* Advanced properties ******************************************************) lemma fqup_zeta (b) (p) (I) (G) (K) (V): - ∀T1,T2. ⇧[1]T2 ≘ T1 → ❪G,K,ⓑ[p,I]V.T1❫ ⬂+[b] ❪G,K,T2❫. + ∀T1,T2. ⇧[1]T2 ≘ T1 → ❨G,K,ⓑ[p,I]V.T1❩ ⬂+[b] ❨G,K,T2❩. * /4 width=5 by fqup_strap2, fqu_fqup, fqu_drop, fqu_clear, fqu_bind_dx/ qed. (* Basic_2A1: removed theorems 1: fqup_drop *) diff --git a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqup_drops.ma b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqup_drops.ma index 2b5173d75..9e34b8d59 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqup_drops.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqup_drops.ma @@ -20,7 +20,7 @@ include "static_2/s_computation/fqup.ma". (* Properties with generic slicing for local environments *******************) lemma fqup_drops_succ: ∀b,G,K,T,i,L,U. ⇩[↑i] L ≘ K → ⇧[↑i] T ≘ U → - ❪G,L,U❫ ⬂+[b] ❪G,K,T❫. + ❨G,L,U❩ ⬂+[b] ❨G,K,T❩. #b #G #K #T #i elim i -i [ #L #U #HLK #HTU elim (drops_inv_succ … HLK) -HLK #I #Y #HY #H destruct <(drops_fwd_isid … HY) -K // @@ -33,7 +33,7 @@ lemma fqup_drops_succ: ∀b,G,K,T,i,L,U. ⇩[↑i] L ≘ K → ⇧[↑i] T ≘ U qed. lemma fqup_drops_strap1: ∀b,G1,G2,L1,K1,K2,T1,T2,U1,i. ⇩[i] L1 ≘ K1 → ⇧[i] T1 ≘ U1 → - ❪G1,K1,T1❫ ⬂[b] ❪G2,K2,T2❫ → ❪G1,L1,U1❫ ⬂+[b] ❪G2,K2,T2❫. + ❨G1,K1,T1❩ ⬂[b] ❨G2,K2,T2❩ → ❨G1,L1,U1❩ ⬂+[b] ❨G2,K2,T2❩. #b #G1 #G2 #L1 #K1 #K2 #T1 #T2 #U1 * [ #HLK1 #HTU1 #HT12 >(drops_fwd_isid … HLK1) -L1 // @@ -42,5 +42,5 @@ lemma fqup_drops_strap1: ∀b,G1,G2,L1,K1,K2,T1,T2,U1,i. ⇩[i] L1 ≘ K1 → ] qed-. -lemma fqup_lref: ∀b,I,G,L,K,V,i. ⇩[i] L ≘ K.ⓑ[I]V → ❪G,L,#i❫ ⬂+[b] ❪G,K,V❫. +lemma fqup_lref: ∀b,I,G,L,K,V,i. ⇩[i] L ≘ K.ⓑ[I]V → ❨G,L,#i❩ ⬂+[b] ❨G,K,V❩. /2 width=6 by fqup_drops_strap1/ qed. diff --git a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqup_weight.ma b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqup_weight.ma index ed22b9e12..da0568b72 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqup_weight.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqup_weight.ma @@ -19,7 +19,7 @@ include "static_2/s_computation/fqup.ma". (* Forward lemmas with weight for closures **********************************) -lemma fqup_fwd_fw: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → +lemma fqup_fwd_fw: ∀b,G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂+[b] ❨G2,L2,T2❩ → ♯❨G2,L2,T2❩ < ♯❨G1,L1,T1❩. #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2 /3 width=3 by fqu_fwd_fw, nlt_trans/ @@ -28,7 +28,7 @@ qed-. (* Advanced eliminators *****************************************************) lemma fqup_wf_ind: ∀b. ∀Q:relation3 …. ( - ∀G1,L1,T1. (∀G2,L2,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → Q G2 L2 T2) → + ∀G1,L1,T1. (∀G2,L2,T2. ❨G1,L1,T1❩ ⬂+[b] ❨G2,L2,T2❩ → Q G2 L2 T2) → Q G1 L1 T1 ) → ∀G1,L1,T1. Q G1 L1 T1. #b #Q #HQ @(wf3_ind_nlt … fw) #x #IHx #G1 #L1 #T1 #H destruct @@ -36,7 +36,7 @@ lemma fqup_wf_ind: ∀b. ∀Q:relation3 …. ( qed-. lemma fqup_wf_ind_eq: ∀b. ∀Q:relation3 …. ( - ∀G1,L1,T1. (∀G2,L2,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → Q G2 L2 T2) → + ∀G1,L1,T1. (∀G2,L2,T2. ❨G1,L1,T1❩ ⬂+[b] ❨G2,L2,T2❩ → Q G2 L2 T2) → ∀G2,L2,T2. G1 = G2 → L1 = L2 → T1 = T2 → Q G2 L2 T2 ) → ∀G1,L1,T1. Q G1 L1 T1. #b #Q #HQ @(wf3_ind_nlt … fw) #x #IHx #G1 #L1 #T1 #H destruct diff --git a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus.ma b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus.ma index 3a58ae745..490e8e8a9 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus.ma @@ -34,15 +34,15 @@ interpretation "star-iterated structural successor (closure)" (* Basic eliminators ********************************************************) lemma fqus_ind: ∀b,G1,L1,T1. ∀Q:relation3 …. Q G1 L1 T1 → - (∀G,G2,L,L2,T,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G,L,T❫ → ❪G,L,T❫ ⬂⸮[b] ❪G2,L2,T2❫ → Q G L T → Q G2 L2 T2) → - ∀G2,L2,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → Q G2 L2 T2. + (∀G,G2,L,L2,T,T2. ❨G1,L1,T1❩ ⬂*[b] ❨G,L,T❩ → ❨G,L,T❩ ⬂⸮[b] ❨G2,L2,T2❩ → Q G L T → Q G2 L2 T2) → + ∀G2,L2,T2. ❨G1,L1,T1❩ ⬂*[b] ❨G2,L2,T2❩ → Q G2 L2 T2. #b #G1 #L1 #T1 #R #IH1 #IH2 #G2 #L2 #T2 #H @(tri_TC_star_ind … IH1 IH2 G2 L2 T2 H) // qed-. lemma fqus_ind_dx: ∀b,G2,L2,T2. ∀Q:relation3 …. Q G2 L2 T2 → - (∀G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ⬂⸮[b] ❪G,L,T❫ → ❪G,L,T❫ ⬂*[b] ❪G2,L2,T2❫ → Q G L T → Q G1 L1 T1) → - ∀G1,L1,T1. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → Q G1 L1 T1. + (∀G1,G,L1,L,T1,T. ❨G1,L1,T1❩ ⬂⸮[b] ❨G,L,T❩ → ❨G,L,T❩ ⬂*[b] ❨G2,L2,T2❩ → Q G L T → Q G1 L1 T1) → + ∀G1,L1,T1. ❨G1,L1,T1❩ ⬂*[b] ❨G2,L2,T2❩ → Q G1 L1 T1. #b #G2 #L2 #T2 #Q #IH1 #IH2 #G1 #L1 #T1 #H @(tri_TC_star_ind_dx … IH1 IH2 G1 L1 T1 H) // qed-. @@ -52,56 +52,56 @@ qed-. lemma fqus_refl: ∀b. tri_reflexive … (fqus b). /2 width=1 by tri_inj/ qed. -lemma fquq_fqus: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → - ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫. +lemma fquq_fqus: ∀b,G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂⸮[b] ❨G2,L2,T2❩ → + ❨G1,L1,T1❩ ⬂*[b] ❨G2,L2,T2❩. /2 width=1 by tri_inj/ qed. -lemma fqus_strap1: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G,L,T❫ → - ❪G,L,T❫ ⬂⸮[b] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫. +lemma fqus_strap1: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. ❨G1,L1,T1❩ ⬂*[b] ❨G,L,T❩ → + ❨G,L,T❩ ⬂⸮[b] ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ⬂*[b] ❨G2,L2,T2❩. /2 width=5 by tri_step/ qed-. -lemma fqus_strap2: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G,L,T❫ → - ❪G,L,T❫ ⬂*[b] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫. +lemma fqus_strap2: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. ❨G1,L1,T1❩ ⬂⸮[b] ❨G,L,T❩ → + ❨G,L,T❩ ⬂*[b] ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ⬂*[b] ❨G2,L2,T2❩. /2 width=5 by tri_TC_strap/ qed-. (* Basic inversion lemmas ***************************************************) -lemma fqus_inv_fqu_sn: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → +lemma fqus_inv_fqu_sn: ∀b,G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂*[b] ❨G2,L2,T2❩ → (∧∧ G1 = G2 & L1 = L2 & T1 = T2) ∨ - ∃∃G,L,T. ❪G1,L1,T1❫ ⬂[b] ❪G,L,T❫ & ❪G,L,T❫ ⬂*[b] ❪G2,L2,T2❫. + ∃∃G,L,T. ❨G1,L1,T1❩ ⬂[b] ❨G,L,T❩ & ❨G,L,T❩ ⬂*[b] ❨G2,L2,T2❩. #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 @(fqus_ind_dx … H12) -G1 -L1 -T1 /3 width=1 by and3_intro, or_introl/ #G1 #G #L1 #L #T1 #T * /3 width=5 by ex2_3_intro, or_intror/ * #HG #HL #HT #_ destruct // qed-. -lemma fqus_inv_sort1: ∀b,G1,G2,L1,L2,T2,s. ❪G1,L1,⋆s❫ ⬂*[b] ❪G2,L2,T2❫ → +lemma fqus_inv_sort1: ∀b,G1,G2,L1,L2,T2,s. ❨G1,L1,⋆s❩ ⬂*[b] ❨G2,L2,T2❩ → (∧∧ G1 = G2 & L1 = L2 & ⋆s = T2) ∨ - ∃∃J,L. ❪G1,L,⋆s❫ ⬂*[b] ❪G2,L2,T2❫ & L1 = L.ⓘ[J]. + ∃∃J,L. ❨G1,L,⋆s❩ ⬂*[b] ❨G2,L2,T2❩ & L1 = L.ⓘ[J]. #b #G1 #G2 #L1 #L2 #T2 #s #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/ #G #L #T #H elim (fqu_inv_sort1 … H) -H /3 width=4 by ex2_2_intro, or_intror/ qed-. -lemma fqus_inv_lref1: ∀b,G1,G2,L1,L2,T2,i. ❪G1,L1,#i❫ ⬂*[b] ❪G2,L2,T2❫ → +lemma fqus_inv_lref1: ∀b,G1,G2,L1,L2,T2,i. ❨G1,L1,#i❩ ⬂*[b] ❨G2,L2,T2❩ → ∨∨ ∧∧ G1 = G2 & L1 = L2 & #i = T2 - | ∃∃J,L,V. ❪G1,L,V❫ ⬂*[b] ❪G2,L2,T2❫ & L1 = L.ⓑ[J]V & i = 0 - | ∃∃J,L,j. ❪G1,L,#j❫ ⬂*[b] ❪G2,L2,T2❫ & L1 = L.ⓘ[J] & i = ↑j. + | ∃∃J,L,V. ❨G1,L,V❩ ⬂*[b] ❨G2,L2,T2❩ & L1 = L.ⓑ[J]V & i = 0 + | ∃∃J,L,j. ❨G1,L,#j❩ ⬂*[b] ❨G2,L2,T2❩ & L1 = L.ⓘ[J] & i = ↑j. #b #G1 #G2 #L1 #L2 #T2 #i #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or3_intro0/ #G #L #T #H elim (fqu_inv_lref1 … H) -H * /3 width=6 by ex3_3_intro, or3_intro1, or3_intro2/ qed-. -lemma fqus_inv_gref1: ∀b,G1,G2,L1,L2,T2,l. ❪G1,L1,§l❫ ⬂*[b] ❪G2,L2,T2❫ → +lemma fqus_inv_gref1: ∀b,G1,G2,L1,L2,T2,l. ❨G1,L1,§l❩ ⬂*[b] ❨G2,L2,T2❩ → (∧∧ G1 = G2 & L1 = L2 & §l = T2) ∨ - ∃∃J,L. ❪G1,L,§l❫ ⬂*[b] ❪G2,L2,T2❫ & L1 = L.ⓘ[J]. + ∃∃J,L. ❨G1,L,§l❩ ⬂*[b] ❨G2,L2,T2❩ & L1 = L.ⓘ[J]. #b #G1 #G2 #L1 #L2 #T2 #l #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/ #G #L #T #H elim (fqu_inv_gref1 … H) -H /3 width=4 by ex2_2_intro, or_intror/ qed-. -lemma fqus_inv_bind1: ∀b,p,I,G1,G2,L1,L2,V1,T1,T2. ❪G1,L1,ⓑ[p,I]V1.T1❫ ⬂*[b] ❪G2,L2,T2❫ → +lemma fqus_inv_bind1: ∀b,p,I,G1,G2,L1,L2,V1,T1,T2. ❨G1,L1,ⓑ[p,I]V1.T1❩ ⬂*[b] ❨G2,L2,T2❩ → ∨∨ ∧∧ G1 = G2 & L1 = L2 & ⓑ[p,I]V1.T1 = T2 - | ❪G1,L1,V1❫ ⬂*[b] ❪G2,L2,T2❫ - | ∧∧ ❪G1,L1.ⓑ[I]V1,T1❫ ⬂*[b] ❪G2,L2,T2❫ & b = Ⓣ - | ∧∧ ❪G1,L1.ⓧ,T1❫ ⬂*[b] ❪G2,L2,T2❫ & b = Ⓕ - | ∃∃J,L,T. ❪G1,L,T❫ ⬂*[b] ❪G2,L2,T2❫ & ⇧[1] T ≘ ⓑ[p,I]V1.T1 & L1 = L.ⓘ[J]. + | ❨G1,L1,V1❩ ⬂*[b] ❨G2,L2,T2❩ + | ∧∧ ❨G1,L1.ⓑ[I]V1,T1❩ ⬂*[b] ❨G2,L2,T2❩ & b = Ⓣ + | ∧∧ ❨G1,L1.ⓧ,T1❩ ⬂*[b] ❨G2,L2,T2❩ & b = Ⓕ + | ∃∃J,L,T. ❨G1,L,T❩ ⬂*[b] ❨G2,L2,T2❩ & ⇧[1] T ≘ ⓑ[p,I]V1.T1 & L1 = L.ⓘ[J]. #b #p #I #G1 #G2 #L1 #L2 #V1 #T1 #T2 #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or5_intro0/ #G #L #T #H elim (fqu_inv_bind1 … H) -H * [4: #J ] #H1 #H2 #H3 [3,4: #Hb ] #H destruct @@ -109,21 +109,21 @@ lemma fqus_inv_bind1: ∀b,p,I,G1,G2,L1,L2,V1,T1,T2. ❪G1,L1,ⓑ[p,I]V1.T1❫ qed-. -lemma fqus_inv_bind1_true: ∀p,I,G1,G2,L1,L2,V1,T1,T2. ❪G1,L1,ⓑ[p,I]V1.T1❫ ⬂* ❪G2,L2,T2❫ → +lemma fqus_inv_bind1_true: ∀p,I,G1,G2,L1,L2,V1,T1,T2. ❨G1,L1,ⓑ[p,I]V1.T1❩ ⬂* ❨G2,L2,T2❩ → ∨∨ ∧∧ G1 = G2 & L1 = L2 & ⓑ[p,I]V1.T1 = T2 - | ❪G1,L1,V1❫ ⬂* ❪G2,L2,T2❫ - | ❪G1,L1.ⓑ[I]V1,T1❫ ⬂* ❪G2,L2,T2❫ - | ∃∃J,L,T. ❪G1,L,T❫ ⬂* ❪G2,L2,T2❫ & ⇧[1] T ≘ ⓑ[p,I]V1.T1 & L1 = L.ⓘ[J]. + | ❨G1,L1,V1❩ ⬂* ❨G2,L2,T2❩ + | ❨G1,L1.ⓑ[I]V1,T1❩ ⬂* ❨G2,L2,T2❩ + | ∃∃J,L,T. ❨G1,L,T❩ ⬂* ❨G2,L2,T2❩ & ⇧[1] T ≘ ⓑ[p,I]V1.T1 & L1 = L.ⓘ[J]. #p #I #G1 #G2 #L1 #L2 #V1 #T1 #T2 #H elim (fqus_inv_bind1 … H) -H [1,3,4: * ] /3 width=1 by and3_intro, or4_intro0, or4_intro1, or4_intro2, or4_intro3/ #_ #H destruct qed-. -lemma fqus_inv_flat1: ∀b,I,G1,G2,L1,L2,V1,T1,T2. ❪G1,L1,ⓕ[I]V1.T1❫ ⬂*[b] ❪G2,L2,T2❫ → +lemma fqus_inv_flat1: ∀b,I,G1,G2,L1,L2,V1,T1,T2. ❨G1,L1,ⓕ[I]V1.T1❩ ⬂*[b] ❨G2,L2,T2❩ → ∨∨ ∧∧ G1 = G2 & L1 = L2 & ⓕ[I]V1.T1 = T2 - | ❪G1,L1,V1❫ ⬂*[b] ❪G2,L2,T2❫ - | ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ - | ∃∃J,L,T. ❪G1,L,T❫ ⬂*[b] ❪G2,L2,T2❫ & ⇧[1] T ≘ ⓕ[I]V1.T1 & L1 = L.ⓘ[J]. + | ❨G1,L1,V1❩ ⬂*[b] ❨G2,L2,T2❩ + | ❨G1,L1,T1❩ ⬂*[b] ❨G2,L2,T2❩ + | ∃∃J,L,T. ❨G1,L,T❩ ⬂*[b] ❨G2,L2,T2❩ & ⇧[1] T ≘ ⓕ[I]V1.T1 & L1 = L.ⓘ[J]. #b #I #G1 #G2 #L1 #L2 #V1 #T1 #T2 #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or4_intro0/ #G #L #T #H elim (fqu_inv_flat1 … H) -H * [3: #J ] #H1 #H2 #H3 #H destruct @@ -132,35 +132,35 @@ qed-. (* Advanced inversion lemmas ************************************************) -lemma fqus_inv_atom1: ∀b,I,G1,G2,L2,T2. ❪G1,⋆,⓪[I]❫ ⬂*[b] ❪G2,L2,T2❫ → +lemma fqus_inv_atom1: ∀b,I,G1,G2,L2,T2. ❨G1,⋆,⓪[I]❩ ⬂*[b] ❨G2,L2,T2❩ → ∧∧ G1 = G2 & ⋆ = L2 & ⓪[I] = T2. #b #I #G1 #G2 #L2 #T2 #H elim (fqus_inv_fqu_sn … H) -H * /2 width=1 by and3_intro/ #G #L #T #H elim (fqu_inv_atom1 … H) qed-. -lemma fqus_inv_sort1_bind: ∀b,I,G1,G2,L1,L2,T2,s. ❪G1,L1.ⓘ[I],⋆s❫ ⬂*[b] ❪G2,L2,T2❫ → - (∧∧ G1 = G2 & L1.ⓘ[I] = L2 & ⋆s = T2) ∨ ❪G1,L1,⋆s❫ ⬂*[b] ❪G2,L2,T2❫. +lemma fqus_inv_sort1_bind: ∀b,I,G1,G2,L1,L2,T2,s. ❨G1,L1.ⓘ[I],⋆s❩ ⬂*[b] ❨G2,L2,T2❩ → + (∧∧ G1 = G2 & L1.ⓘ[I] = L2 & ⋆s = T2) ∨ ❨G1,L1,⋆s❩ ⬂*[b] ❨G2,L2,T2❩. #b #I #G1 #G2 #L1 #L2 #T2 #s #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/ #G #L #T #H elim (fqu_inv_sort1_bind … H) -H #H1 #H2 #H3 #H destruct /2 width=1 by or_intror/ qed-. -lemma fqus_inv_zero1_pair: ∀b,I,G1,G2,L1,L2,V1,T2. ❪G1,L1.ⓑ[I]V1,#0❫ ⬂*[b] ❪G2,L2,T2❫ → - (∧∧ G1 = G2 & L1.ⓑ[I]V1 = L2 & #0 = T2) ∨ ❪G1,L1,V1❫ ⬂*[b] ❪G2,L2,T2❫. +lemma fqus_inv_zero1_pair: ∀b,I,G1,G2,L1,L2,V1,T2. ❨G1,L1.ⓑ[I]V1,#0❩ ⬂*[b] ❨G2,L2,T2❩ → + (∧∧ G1 = G2 & L1.ⓑ[I]V1 = L2 & #0 = T2) ∨ ❨G1,L1,V1❩ ⬂*[b] ❨G2,L2,T2❩. #b #I #G1 #G2 #L1 #L2 #V1 #T2 #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/ #G #L #T #H elim (fqu_inv_zero1_pair … H) -H #H1 #H2 #H3 #H destruct /2 width=1 by or_intror/ qed-. -lemma fqus_inv_lref1_bind: ∀b,I,G1,G2,L1,L2,T2,i. ❪G1,L1.ⓘ[I],#↑i❫ ⬂*[b] ❪G2,L2,T2❫ → - (∧∧ G1 = G2 & L1.ⓘ[I] = L2 & #(↑i) = T2) ∨ ❪G1,L1,#i❫ ⬂*[b] ❪G2,L2,T2❫. +lemma fqus_inv_lref1_bind: ∀b,I,G1,G2,L1,L2,T2,i. ❨G1,L1.ⓘ[I],#↑i❩ ⬂*[b] ❨G2,L2,T2❩ → + (∧∧ G1 = G2 & L1.ⓘ[I] = L2 & #(↑i) = T2) ∨ ❨G1,L1,#i❩ ⬂*[b] ❨G2,L2,T2❩. #b #I #G1 #G2 #L1 #L2 #T2 #i #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/ #G #L #T #H elim (fqu_inv_lref1_bind … H) -H #H1 #H2 #H3 #H destruct /2 width=1 by or_intror/ qed-. -lemma fqus_inv_gref1_bind: ∀b,I,G1,G2,L1,L2,T2,l. ❪G1,L1.ⓘ[I],§l❫ ⬂*[b] ❪G2,L2,T2❫ → - (∧∧ G1 = G2 & L1.ⓘ[I] = L2 & §l = T2) ∨ ❪G1,L1,§l❫ ⬂*[b] ❪G2,L2,T2❫. +lemma fqus_inv_gref1_bind: ∀b,I,G1,G2,L1,L2,T2,l. ❨G1,L1.ⓘ[I],§l❩ ⬂*[b] ❨G2,L2,T2❩ → + (∧∧ G1 = G2 & L1.ⓘ[I] = L2 & §l = T2) ∨ ❨G1,L1,§l❩ ⬂*[b] ❨G2,L2,T2❩. #b #I #G1 #G2 #L1 #L2 #T2 #l #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/ #G #L #T #H elim (fqu_inv_gref1_bind … H) -H #H1 #H2 #H3 #H destruct /2 width=1 by or_intror/ diff --git a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_drops.ma b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_drops.ma index 21bd6a775..bae2cb322 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_drops.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_drops.ma @@ -20,7 +20,7 @@ include "static_2/s_computation/fqus_fqup.ma". (* Properties with generic slicing for local environments *******************) lemma fqus_drops: ∀b,G,L,K,T,U,i. ⇩[i] L ≘ K → ⇧[i] T ≘ U → - ❪G,L,U❫ ⬂*[b] ❪G,K,T❫. + ❨G,L,U❩ ⬂*[b] ❨G,K,T❩. #b #G #L #K #T #U * /3 width=3 by fqup_drops_succ, fqup_fqus/ #HLK #HTU <(lifts_fwd_isid … HTU) -U // <(drops_fwd_isid … HLK) -K // qed. diff --git a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_fqup.ma b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_fqup.ma index 5e9d0b108..ec70f69d1 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_fqup.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_fqup.ma @@ -19,14 +19,14 @@ include "static_2/s_computation/fqus.ma". (* Alternative definition with plus-iterated supclosure *********************) -lemma fqup_fqus: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫. +lemma fqup_fqus: ∀b,G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂+[b] ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ⬂*[b] ❨G2,L2,T2❩. #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2 /3 width=5 by fqus_strap1, fquq_fqus, fqu_fquq/ qed. (* Basic_2A1: was: fqus_inv_gen *) -lemma fqus_inv_fqup: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → - ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ ∨ (∧∧ G1 = G2 & L1 = L2 & T1 = T2). +lemma fqus_inv_fqup: ∀b,G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂*[b] ❨G2,L2,T2❩ → + ❨G1,L1,T1❩ ⬂+[b] ❨G2,L2,T2❩ ∨ (∧∧ G1 = G2 & L1 = L2 & T1 = T2). #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -G2 -L2 -T2 // #G #G2 #L #L2 #T #T2 #_ * [ #H2 * /3 width=5 by fqup_strap1, or_introl/ @@ -37,38 +37,38 @@ qed-. (* Advanced properties ******************************************************) -lemma fqus_strap1_fqu: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G,L,T❫ → ❪G,L,T❫ ⬂[b] ❪G2,L2,T2❫ → - ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫. +lemma fqus_strap1_fqu: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. ❨G1,L1,T1❩ ⬂*[b] ❨G,L,T❩ → ❨G,L,T❩ ⬂[b] ❨G2,L2,T2❩ → + ❨G1,L1,T1❩ ⬂+[b] ❨G2,L2,T2❩. #b #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 elim (fqus_inv_fqup … H1) -H1 [ /2 width=5 by fqup_strap1/ | * /2 width=1 by fqu_fqup/ ] qed-. -lemma fqus_strap2_fqu: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. ❪G1,L1,T1❫ ⬂[b] ❪G,L,T❫ → ❪G,L,T❫ ⬂*[b] ❪G2,L2,T2❫ → - ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫. +lemma fqus_strap2_fqu: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. ❨G1,L1,T1❩ ⬂[b] ❨G,L,T❩ → ❨G,L,T❩ ⬂*[b] ❨G2,L2,T2❩ → + ❨G1,L1,T1❩ ⬂+[b] ❨G2,L2,T2❩. #b #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 elim (fqus_inv_fqup … H2) -H2 [ /2 width=5 by fqup_strap2/ | * /2 width=1 by fqu_fqup/ ] qed-. -lemma fqus_fqup_trans: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G,L,T❫ → ❪G,L,T❫ ⬂+[b] ❪G2,L2,T2❫ → - ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫. +lemma fqus_fqup_trans: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. ❨G1,L1,T1❩ ⬂*[b] ❨G,L,T❩ → ❨G,L,T❩ ⬂+[b] ❨G2,L2,T2❩ → + ❨G1,L1,T1❩ ⬂+[b] ❨G2,L2,T2❩. #b #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 @(fqup_ind … H2) -H2 -G2 -L2 -T2 /2 width=5 by fqus_strap1_fqu, fqup_strap1/ qed-. -lemma fqup_fqus_trans: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G,L,T❫ → - ❪G,L,T❫ ⬂*[b] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫. +lemma fqup_fqus_trans: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. ❨G1,L1,T1❩ ⬂+[b] ❨G,L,T❩ → + ❨G,L,T❩ ⬂*[b] ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ⬂+[b] ❨G2,L2,T2❩. #b #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 @(fqup_ind_dx … H1) -H1 -G1 -L1 -T1 /3 width=5 by fqus_strap2_fqu, fqup_strap2/ qed-. (* Advanced inversion lemmas for plus-iterated supclosure *******************) -lemma fqup_inv_step_sn: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → - ∃∃G,L,T. ❪G1,L1,T1❫ ⬂[b] ❪G,L,T❫ & ❪G,L,T❫ ⬂*[b] ❪G2,L2,T2❫. +lemma fqup_inv_step_sn: ∀b,G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂+[b] ❨G2,L2,T2❩ → + ∃∃G,L,T. ❨G1,L1,T1❩ ⬂[b] ❨G,L,T❩ & ❨G,L,T❩ ⬂*[b] ❨G2,L2,T2❩. #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind_dx … H) -G1 -L1 -T1 /2 width=5 by ex2_3_intro/ #G1 #G #L1 #L #T1 #T #H1 #_ * /4 width=9 by fqus_strap2, fqu_fquq, ex2_3_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_weight.ma b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_weight.ma index b76988981..0ee9b2372 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_weight.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_weight.ma @@ -19,7 +19,7 @@ include "static_2/s_computation/fqus.ma". (* Forward lemmas with weight for closures **********************************) -lemma fqus_fwd_fw: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → +lemma fqus_fwd_fw: ∀b,G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂*[b] ❨G2,L2,T2❩ → ♯❨G2,L2,T2❩ ≤ ♯❨G1,L1,T1❩. #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -L2 -T2 /3 width=3 by fquq_fwd_fw, nle_trans/ @@ -27,7 +27,7 @@ qed-. (* Advanced inversion lemmas ************************************************) -lemma fqus_inv_refl_atom3: ∀b,I,G,L,X. ❪G,L,⓪[I]❫ ⬂*[b] ❪G,L,X❫ → ⓪[I] = X. +lemma fqus_inv_refl_atom3: ∀b,I,G,L,X. ❨G,L,⓪[I]❩ ⬂*[b] ❨G,L,X❩ → ⓪[I] = X. #b #I #G #L #X #H elim (fqus_inv_fqu_sn … H) -H * // #G0 #L0 #T0 #H1 #H2 lapply (fqu_fwd_fw … H1) lapply (fqus_fwd_fw … H2) -H2 -H1 #H2 #H1 lapply (nle_nlt_trans … H2 H1) -G0 -L0 -T0 diff --git a/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu.ma b/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu.ma index ebc264bd7..2e81b0bc3 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu.ma @@ -47,18 +47,18 @@ interpretation (* Basic properties *********************************************************) -lemma fqu_sort: ∀b,I,G,L,s. ❪G,L.ⓘ[I],⋆s❫ ⬂[b] ❪G,L,⋆s❫. +lemma fqu_sort: ∀b,I,G,L,s. ❨G,L.ⓘ[I],⋆s❩ ⬂[b] ❨G,L,⋆s❩. /2 width=1 by fqu_drop/ qed. -lemma fqu_lref_S: ∀b,I,G,L,i. ❪G,L.ⓘ[I],#↑i❫ ⬂[b] ❪G,L,#i❫. +lemma fqu_lref_S: ∀b,I,G,L,i. ❨G,L.ⓘ[I],#↑i❩ ⬂[b] ❨G,L,#i❩. /2 width=1 by fqu_drop/ qed. -lemma fqu_gref: ∀b,I,G,L,l. ❪G,L.ⓘ[I],§l❫ ⬂[b] ❪G,L,§l❫. +lemma fqu_gref: ∀b,I,G,L,l. ❨G,L.ⓘ[I],§l❩ ⬂[b] ❨G,L,§l❩. /2 width=1 by fqu_drop/ qed. (* Basic inversion lemmas ***************************************************) -fact fqu_inv_sort1_aux: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → +fact fqu_inv_sort1_aux: ∀b,G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂[b] ❨G2,L2,T2❩ → ∀s. T1 = ⋆s → ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & T2 = ⋆s. #b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2 @@ -72,11 +72,11 @@ fact fqu_inv_sort1_aux: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T ] qed-. -lemma fqu_inv_sort1: ∀b,G1,G2,L1,L2,T2,s. ❪G1,L1,⋆s❫ ⬂[b] ❪G2,L2,T2❫ → +lemma fqu_inv_sort1: ∀b,G1,G2,L1,L2,T2,s. ❨G1,L1,⋆s❩ ⬂[b] ❨G2,L2,T2❩ → ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & T2 = ⋆s. /2 width=4 by fqu_inv_sort1_aux/ qed-. -fact fqu_inv_lref1_aux: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → +fact fqu_inv_lref1_aux: ∀b,G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂[b] ❨G2,L2,T2❩ → ∀i. T1 = #i → (∃∃J,V. G1 = G2 & L1 = L2.ⓑ[J]V & T2 = V & i = 0) ∨ ∃∃J,j. G1 = G2 & L1 = L2.ⓘ[J] & T2 = #j & i = ↑j. @@ -91,12 +91,12 @@ fact fqu_inv_lref1_aux: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T ] qed-. -lemma fqu_inv_lref1: ∀b,G1,G2,L1,L2,T2,i. ❪G1,L1,#i❫ ⬂[b] ❪G2,L2,T2❫ → +lemma fqu_inv_lref1: ∀b,G1,G2,L1,L2,T2,i. ❨G1,L1,#i❩ ⬂[b] ❨G2,L2,T2❩ → (∃∃J,V. G1 = G2 & L1 = L2.ⓑ[J]V & T2 = V & i = 0) ∨ ∃∃J,j. G1 = G2 & L1 = L2.ⓘ[J] & T2 = #j & i = ↑j. /2 width=4 by fqu_inv_lref1_aux/ qed-. -fact fqu_inv_gref1_aux: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → +fact fqu_inv_gref1_aux: ∀b,G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂[b] ❨G2,L2,T2❩ → ∀l. T1 = §l → ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & T2 = §l. #b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2 @@ -110,11 +110,11 @@ fact fqu_inv_gref1_aux: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T ] qed-. -lemma fqu_inv_gref1: ∀b,G1,G2,L1,L2,T2,l. ❪G1,L1,§l❫ ⬂[b] ❪G2,L2,T2❫ → +lemma fqu_inv_gref1: ∀b,G1,G2,L1,L2,T2,l. ❨G1,L1,§l❩ ⬂[b] ❨G2,L2,T2❩ → ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & T2 = §l. /2 width=4 by fqu_inv_gref1_aux/ qed-. -fact fqu_inv_bind1_aux: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → +fact fqu_inv_bind1_aux: ∀b,G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂[b] ❨G2,L2,T2❩ → ∀p,I,V1,U1. T1 = ⓑ[p,I]V1.U1 → ∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2 | ∧∧ G1 = G2 & L1.ⓑ[I]V1 = L2 & U1 = T2 & b = Ⓣ @@ -130,14 +130,14 @@ fact fqu_inv_bind1_aux: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T ] qed-. -lemma fqu_inv_bind1: ∀b,p,I,G1,G2,L1,L2,V1,U1,T2. ❪G1,L1,ⓑ[p,I]V1.U1❫ ⬂[b] ❪G2,L2,T2❫ → +lemma fqu_inv_bind1: ∀b,p,I,G1,G2,L1,L2,V1,U1,T2. ❨G1,L1,ⓑ[p,I]V1.U1❩ ⬂[b] ❨G2,L2,T2❩ → ∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2 | ∧∧ G1 = G2 & L1.ⓑ[I]V1 = L2 & U1 = T2 & b = Ⓣ | ∧∧ G1 = G2 & L1.ⓧ = L2 & U1 = T2 & b = Ⓕ | ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & ⇧[1] T2 ≘ ⓑ[p,I]V1.U1. /2 width=4 by fqu_inv_bind1_aux/ qed-. -lemma fqu_inv_bind1_true: ∀p,I,G1,G2,L1,L2,V1,U1,T2. ❪G1,L1,ⓑ[p,I]V1.U1❫ ⬂ ❪G2,L2,T2❫ → +lemma fqu_inv_bind1_true: ∀p,I,G1,G2,L1,L2,V1,U1,T2. ❨G1,L1,ⓑ[p,I]V1.U1❩ ⬂ ❨G2,L2,T2❩ → ∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2 | ∧∧ G1 = G2 & L1.ⓑ[I]V1 = L2 & U1 = T2 | ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & ⇧[1] T2 ≘ ⓑ[p,I]V1.U1. @@ -147,7 +147,7 @@ lemma fqu_inv_bind1_true: ∀p,I,G1,G2,L1,L2,V1,U1,T2. ❪G1,L1,ⓑ[p,I]V1.U1❫ /3 width=1 by and3_intro, or3_intro1/ qed-. -fact fqu_inv_flat1_aux: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → +fact fqu_inv_flat1_aux: ∀b,G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂[b] ❨G2,L2,T2❩ → ∀I,V1,U1. T1 = ⓕ[I]V1.U1 → ∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2 | ∧∧ G1 = G2 & L1 = L2 & U1 = T2 @@ -162,7 +162,7 @@ fact fqu_inv_flat1_aux: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T ] qed-. -lemma fqu_inv_flat1: ∀b,I,G1,G2,L1,L2,V1,U1,T2. ❪G1,L1,ⓕ[I]V1.U1❫ ⬂[b] ❪G2,L2,T2❫ → +lemma fqu_inv_flat1: ∀b,I,G1,G2,L1,L2,V1,U1,T2. ❨G1,L1,ⓕ[I]V1.U1❩ ⬂[b] ❨G2,L2,T2❩ → ∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2 | ∧∧ G1 = G2 & L1 = L2 & U1 = T2 | ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & ⇧[1] T2 ≘ ⓕ[I]V1.U1. @@ -170,31 +170,31 @@ lemma fqu_inv_flat1: ∀b,I,G1,G2,L1,L2,V1,U1,T2. ❪G1,L1,ⓕ[I]V1.U1❫ ⬂[b] (* Advanced inversion lemmas ************************************************) -lemma fqu_inv_atom1: ∀b,I,G1,G2,L2,T2. ❪G1,⋆,⓪[I]❫ ⬂[b] ❪G2,L2,T2❫ → ⊥. +lemma fqu_inv_atom1: ∀b,I,G1,G2,L2,T2. ❨G1,⋆,⓪[I]❩ ⬂[b] ❨G2,L2,T2❩ → ⊥. #b * #x #G1 #G2 #L2 #T2 #H [ elim (fqu_inv_sort1 … H) | elim (fqu_inv_lref1 … H) * | elim (fqu_inv_gref1 … H) ] -H #I [2: #V |3: #i ] #_ #H destruct qed-. -lemma fqu_inv_sort1_bind: ∀b,I,G1,G2,K,L2,T2,s. ❪G1,K.ⓘ[I],⋆s❫ ⬂[b] ❪G2,L2,T2❫ → +lemma fqu_inv_sort1_bind: ∀b,I,G1,G2,K,L2,T2,s. ❨G1,K.ⓘ[I],⋆s❩ ⬂[b] ❨G2,L2,T2❩ → ∧∧ G1 = G2 & L2 = K & T2 = ⋆s. #b #I #G1 #G2 #K #L2 #T2 #s #H elim (fqu_inv_sort1 … H) -H #Z #X #H1 #H2 destruct /2 width=1 by and3_intro/ qed-. -lemma fqu_inv_zero1_pair: ∀b,I,G1,G2,K,L2,V,T2. ❪G1,K.ⓑ[I]V,#0❫ ⬂[b] ❪G2,L2,T2❫ → +lemma fqu_inv_zero1_pair: ∀b,I,G1,G2,K,L2,V,T2. ❨G1,K.ⓑ[I]V,#0❩ ⬂[b] ❨G2,L2,T2❩ → ∧∧ G1 = G2 & L2 = K & T2 = V. #b #I #G1 #G2 #K #L2 #V #T2 #H elim (fqu_inv_lref1 … H) -H * #Z #X #H1 #H2 #H3 #H4 destruct /2 width=1 by and3_intro/ qed-. -lemma fqu_inv_lref1_bind: ∀b,I,G1,G2,K,L2,T2,i. ❪G1,K.ⓘ[I],#(↑i)❫ ⬂[b] ❪G2,L2,T2❫ → +lemma fqu_inv_lref1_bind: ∀b,I,G1,G2,K,L2,T2,i. ❨G1,K.ⓘ[I],#(↑i)❩ ⬂[b] ❨G2,L2,T2❩ → ∧∧ G1 = G2 & L2 = K & T2 = #i. #b #I #G1 #G2 #K #L2 #T2 #i #H elim (fqu_inv_lref1 … H) -H * #Z #X #H1 #H2 #H3 #H4 destruct /2 width=1 by and3_intro/ qed-. -lemma fqu_inv_gref1_bind: ∀b,I,G1,G2,K,L2,T2,l. ❪G1,K.ⓘ[I],§l❫ ⬂[b] ❪G2,L2,T2❫ → +lemma fqu_inv_gref1_bind: ∀b,I,G1,G2,K,L2,T2,l. ❨G1,K.ⓘ[I],§l❩ ⬂[b] ❨G2,L2,T2❩ → ∧∧ G1 = G2 & L2 = K & T2 = §l. #b #I #G1 #G2 #K #L2 #T2 #l #H elim (fqu_inv_gref1 … H) -H #Z #H1 #H2 #H3 destruct /2 width=1 by and3_intro/ diff --git a/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_length.ma b/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_length.ma index 5356ed66f..086709674 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_length.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_length.ma @@ -19,13 +19,13 @@ include "static_2/s_transition/fqu.ma". (* Forward lemmas with length for local environments ************************) -fact fqu_fwd_length_lref1_aux: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → +fact fqu_fwd_length_lref1_aux: ∀b,G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂[b] ❨G2,L2,T2❩ → ∀i. T1 = #i → |L2| < |L1|. #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 // [2,3: #p] #I #G #L #V #T [1,2: #_ ] #j #H destruct qed-. -lemma fqu_fwd_length_lref1: ∀b,G1,G2,L1,L2,T2,i. ❪G1,L1,#i❫ ⬂[b] ❪G2,L2,T2❫ → +lemma fqu_fwd_length_lref1: ∀b,G1,G2,L1,L2,T2,i. ❨G1,L1,#i❩ ⬂[b] ❨G2,L2,T2❩ → |L2| < |L1|. /2 width=8 by fqu_fwd_length_lref1_aux/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_teqg.ma b/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_teqg.ma index 366fad94a..07b529abe 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_teqg.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_teqg.ma @@ -20,7 +20,7 @@ include "static_2/s_transition/fqu_length.ma". (* Inversion lemmas with context-free generic equivalence for terms *********) fact fqu_inv_teqg_aux (S) (b): - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂[b] ❨G2,L2,T2❩ → G1 = G2 → |L1| = |L2| → T1 ≛[S] T2 → ⊥. #S #b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2 [1: #I #G #L #V #_ #H elim (nsucc_inv_refl … H) @@ -31,7 +31,7 @@ qed-. (* Basic_2A1: uses: fqu_inv_eq *) lemma fqu_inv_teqg (S) (b): - ∀G,L1,L2,T1,T2. ❪G,L1,T1❫ ⬂[b] ❪G,L2,T2❫ → + ∀G,L1,L2,T1,T2. ❨G,L1,T1❩ ⬂[b] ❨G,L2,T2❩ → |L1| = |L2| → T1 ≛[S] T2 → ⊥. #S #b #G #L1 #L2 #T1 #T2 #H @(fqu_inv_teqg_aux … H) // (**) (* full auto fails *) diff --git a/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_weight.ma b/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_weight.ma index f34260369..58fcbaa31 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_weight.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_weight.ma @@ -20,7 +20,7 @@ include "static_2/s_transition/fqu.ma". (* Forward lemmas with weight for closures **********************************) -lemma fqu_fwd_fw: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → +lemma fqu_fwd_fw: ∀b,G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂[b] ❨G2,L2,T2❩ → ♯❨G2,L2,T2❩ < ♯❨G1,L1,T1❩. #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 // #I #I1 #I2 #G #L #HI12 normalize in ⊢ (?%%); -I1 @@ -30,7 +30,7 @@ qed-. (* Advanced eliminators *****************************************************) lemma fqu_wf_ind: ∀b. ∀Q:relation3 …. ( - ∀G1,L1,T1. (∀G2,L2,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → Q G2 L2 T2) → + ∀G1,L1,T1. (∀G2,L2,T2. ❨G1,L1,T1❩ ⬂[b] ❨G2,L2,T2❩ → Q G2 L2 T2) → Q G1 L1 T1 ) → ∀G1,L1,T1. Q G1 L1 T1. #b #Q #HQ @(wf3_ind_nlt … fw) #x #IHx #G1 #L1 #T1 #H destruct /4 width=2 by fqu_fwd_fw/ diff --git a/matita/matita/contribs/lambdadelta/static_2/s_transition/fquq.ma b/matita/matita/contribs/lambdadelta/static_2/s_transition/fquq.ma index 93112ac2b..467de5f8f 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_transition/fquq.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_transition/fquq.ma @@ -37,7 +37,7 @@ interpretation lemma fquq_refl: ∀b. tri_reflexive … (fquq b). // qed. -lemma fqu_fquq: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫. +lemma fqu_fquq: ∀b,G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂[b] ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ⬂⸮[b] ❨G2,L2,T2❩. /2 width=1 by or_introl/ qed. (* Basic_2A1: removed theorems 8: diff --git a/matita/matita/contribs/lambdadelta/static_2/s_transition/fquq_length.ma b/matita/matita/contribs/lambdadelta/static_2/s_transition/fquq_length.ma index ed038771f..78d450b32 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_transition/fquq_length.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_transition/fquq_length.ma @@ -19,7 +19,7 @@ include "static_2/s_transition/fquq.ma". (* Forward lemmas with length for local environments ************************) -lemma fquq_fwd_length_lref1: ∀b,G1,G2,L1,L2,T2,i. ❪G1,L1,#i❫ ⬂⸮[b] ❪G2,L2,T2❫ → +lemma fquq_fwd_length_lref1: ∀b,G1,G2,L1,L2,T2,i. ❨G1,L1,#i❩ ⬂⸮[b] ❨G2,L2,T2❩ → |L2| ≤ |L1|. #b #G1 #G2 #L1 #L2 #T2 #i #H elim H -H [2: * ] /3 width=6 by fqu_fwd_length_lref1, nlt_des_le/ diff --git a/matita/matita/contribs/lambdadelta/static_2/s_transition/fquq_weight.ma b/matita/matita/contribs/lambdadelta/static_2/s_transition/fquq_weight.ma index 69f303e93..6a4fac633 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_transition/fquq_weight.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_transition/fquq_weight.ma @@ -19,7 +19,7 @@ include "static_2/s_transition/fquq.ma". (* Forward lemmas with weight for closures **********************************) -lemma fquq_fwd_fw: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → +lemma fquq_fwd_fw: ∀b,G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂⸮[b] ❨G2,L2,T2❩ → ♯❨G2,L2,T2❩ ≤ ♯❨G1,L1,T1❩. #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -H [2: * ] /3 width=2 by fqu_fwd_fw, nlt_des_le/ diff --git a/matita/matita/contribs/lambdadelta/static_2/static/aaa.ma b/matita/matita/contribs/lambdadelta/static_2/static/aaa.ma index 841c85be2..bb18f69f4 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/aaa.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/aaa.ma @@ -39,7 +39,7 @@ interpretation "atomic arity assignment (term)" (* Basic inversion lemmas ***************************************************) -fact aaa_inv_sort_aux: ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ∀s. T = ⋆s → A = ⓪. +fact aaa_inv_sort_aux: ∀G,L,T,A. ❨G,L❩ ⊢ T ⁝ A → ∀s. T = ⋆s → A = ⓪. #G #L #T #A * -G -L -T -A // [ #I #G #L #V #B #_ #s #H destruct | #I #G #L #A #i #_ #s #H destruct @@ -50,11 +50,11 @@ fact aaa_inv_sort_aux: ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ∀s. T = ⋆s → ] qed-. -lemma aaa_inv_sort: ∀G,L,A,s. ❪G,L❫ ⊢ ⋆s ⁝ A → A = ⓪. +lemma aaa_inv_sort: ∀G,L,A,s. ❨G,L❩ ⊢ ⋆s ⁝ A → A = ⓪. /2 width=6 by aaa_inv_sort_aux/ qed-. -fact aaa_inv_zero_aux: ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → T = #0 → - ∃∃I,K,V. L = K.ⓑ[I]V & ❪G,K❫ ⊢ V ⁝ A. +fact aaa_inv_zero_aux: ∀G,L,T,A. ❨G,L❩ ⊢ T ⁝ A → T = #0 → + ∃∃I,K,V. L = K.ⓑ[I]V & ❨G,K❩ ⊢ V ⁝ A. #G #L #T #A * -G -L -T -A /2 width=5 by ex2_3_intro/ [ #G #L #s #H destruct | #I #G #L #A #i #_ #H destruct @@ -65,12 +65,12 @@ fact aaa_inv_zero_aux: ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → T = #0 → ] qed-. -lemma aaa_inv_zero: ∀G,L,A. ❪G,L❫ ⊢ #0 ⁝ A → - ∃∃I,K,V. L = K.ⓑ[I]V & ❪G,K❫ ⊢ V ⁝ A. +lemma aaa_inv_zero: ∀G,L,A. ❨G,L❩ ⊢ #0 ⁝ A → + ∃∃I,K,V. L = K.ⓑ[I]V & ❨G,K❩ ⊢ V ⁝ A. /2 width=3 by aaa_inv_zero_aux/ qed-. -fact aaa_inv_lref_aux: ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ∀i. T = #(↑i) → - ∃∃I,K. L = K.ⓘ[I] & ❪G,K❫ ⊢ #i ⁝ A. +fact aaa_inv_lref_aux: ∀G,L,T,A. ❨G,L❩ ⊢ T ⁝ A → ∀i. T = #(↑i) → + ∃∃I,K. L = K.ⓘ[I] & ❨G,K❩ ⊢ #i ⁝ A. #G #L #T #A * -G -L -T -A [ #G #L #s #j #H destruct | #I #G #L #V #B #_ #j #H destruct @@ -82,11 +82,11 @@ fact aaa_inv_lref_aux: ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ∀i. T = #(↑i) ] qed-. -lemma aaa_inv_lref: ∀G,L,A,i. ❪G,L❫ ⊢ #↑i ⁝ A → - ∃∃I,K. L = K.ⓘ[I] & ❪G,K❫ ⊢ #i ⁝ A. +lemma aaa_inv_lref: ∀G,L,A,i. ❨G,L❩ ⊢ #↑i ⁝ A → + ∃∃I,K. L = K.ⓘ[I] & ❨G,K❩ ⊢ #i ⁝ A. /2 width=3 by aaa_inv_lref_aux/ qed-. -fact aaa_inv_gref_aux: ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ∀l. T = §l → ⊥. +fact aaa_inv_gref_aux: ∀G,L,T,A. ❨G,L❩ ⊢ T ⁝ A → ∀l. T = §l → ⊥. #G #L #T #A * -G -L -T -A [ #G #L #s #k #H destruct | #I #G #L #V #B #_ #k #H destruct @@ -98,11 +98,11 @@ fact aaa_inv_gref_aux: ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ∀l. T = §l → ] qed-. -lemma aaa_inv_gref: ∀G,L,A,l. ❪G,L❫ ⊢ §l ⁝ A → ⊥. +lemma aaa_inv_gref: ∀G,L,A,l. ❨G,L❩ ⊢ §l ⁝ A → ⊥. /2 width=7 by aaa_inv_gref_aux/ qed-. -fact aaa_inv_abbr_aux: ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ∀p,W,U. T = ⓓ[p]W.U → - ∃∃B. ❪G,L❫ ⊢ W ⁝ B & ❪G,L.ⓓW❫ ⊢ U ⁝ A. +fact aaa_inv_abbr_aux: ∀G,L,T,A. ❨G,L❩ ⊢ T ⁝ A → ∀p,W,U. T = ⓓ[p]W.U → + ∃∃B. ❨G,L❩ ⊢ W ⁝ B & ❨G,L.ⓓW❩ ⊢ U ⁝ A. #G #L #T #A * -G -L -T -A [ #G #L #s #q #W #U #H destruct | #I #G #L #V #B #_ #q #W #U #H destruct @@ -114,12 +114,12 @@ fact aaa_inv_abbr_aux: ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ∀p,W,U. T = ⓓ[p ] qed-. -lemma aaa_inv_abbr: ∀p,G,L,V,T,A. ❪G,L❫ ⊢ ⓓ[p]V.T ⁝ A → - ∃∃B. ❪G,L❫ ⊢ V ⁝ B & ❪G,L.ⓓV❫ ⊢ T ⁝ A. +lemma aaa_inv_abbr: ∀p,G,L,V,T,A. ❨G,L❩ ⊢ ⓓ[p]V.T ⁝ A → + ∃∃B. ❨G,L❩ ⊢ V ⁝ B & ❨G,L.ⓓV❩ ⊢ T ⁝ A. /2 width=4 by aaa_inv_abbr_aux/ qed-. -fact aaa_inv_abst_aux: ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ∀p,W,U. T = ⓛ[p]W.U → - ∃∃B1,B2. ❪G,L❫ ⊢ W ⁝ B1 & ❪G,L.ⓛW❫ ⊢ U ⁝ B2 & A = ②B1.B2. +fact aaa_inv_abst_aux: ∀G,L,T,A. ❨G,L❩ ⊢ T ⁝ A → ∀p,W,U. T = ⓛ[p]W.U → + ∃∃B1,B2. ❨G,L❩ ⊢ W ⁝ B1 & ❨G,L.ⓛW❩ ⊢ U ⁝ B2 & A = ②B1.B2. #G #L #T #A * -G -L -T -A [ #G #L #s #q #W #U #H destruct | #I #G #L #V #B #_ #q #W #U #H destruct @@ -131,12 +131,12 @@ fact aaa_inv_abst_aux: ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ∀p,W,U. T = ⓛ[p ] qed-. -lemma aaa_inv_abst: ∀p,G,L,W,T,A. ❪G,L❫ ⊢ ⓛ[p]W.T ⁝ A → - ∃∃B1,B2. ❪G,L❫ ⊢ W ⁝ B1 & ❪G,L.ⓛW❫ ⊢ T ⁝ B2 & A = ②B1.B2. +lemma aaa_inv_abst: ∀p,G,L,W,T,A. ❨G,L❩ ⊢ ⓛ[p]W.T ⁝ A → + ∃∃B1,B2. ❨G,L❩ ⊢ W ⁝ B1 & ❨G,L.ⓛW❩ ⊢ T ⁝ B2 & A = ②B1.B2. /2 width=4 by aaa_inv_abst_aux/ qed-. -fact aaa_inv_appl_aux: ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ∀W,U. T = ⓐW.U → - ∃∃B. ❪G,L❫ ⊢ W ⁝ B & ❪G,L❫ ⊢ U ⁝ ②B.A. +fact aaa_inv_appl_aux: ∀G,L,T,A. ❨G,L❩ ⊢ T ⁝ A → ∀W,U. T = ⓐW.U → + ∃∃B. ❨G,L❩ ⊢ W ⁝ B & ❨G,L❩ ⊢ U ⁝ ②B.A. #G #L #T #A * -G -L -T -A [ #G #L #s #W #U #H destruct | #I #G #L #V #B #_ #W #U #H destruct @@ -148,12 +148,12 @@ fact aaa_inv_appl_aux: ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ∀W,U. T = ⓐW.U ] qed-. -lemma aaa_inv_appl: ∀G,L,V,T,A. ❪G,L❫ ⊢ ⓐV.T ⁝ A → - ∃∃B. ❪G,L❫ ⊢ V ⁝ B & ❪G,L❫ ⊢ T ⁝ ②B.A. +lemma aaa_inv_appl: ∀G,L,V,T,A. ❨G,L❩ ⊢ ⓐV.T ⁝ A → + ∃∃B. ❨G,L❩ ⊢ V ⁝ B & ❨G,L❩ ⊢ T ⁝ ②B.A. /2 width=3 by aaa_inv_appl_aux/ qed-. -fact aaa_inv_cast_aux: ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ∀W,U. T = ⓝW.U → - ❪G,L❫ ⊢ W ⁝ A ∧ ❪G,L❫ ⊢ U ⁝ A. +fact aaa_inv_cast_aux: ∀G,L,T,A. ❨G,L❩ ⊢ T ⁝ A → ∀W,U. T = ⓝW.U → + ❨G,L❩ ⊢ W ⁝ A ∧ ❨G,L❩ ⊢ U ⁝ A. #G #L #T #A * -G -L -T -A [ #G #L #s #W #U #H destruct | #I #G #L #V #B #_ #W #U #H destruct @@ -165,6 +165,6 @@ fact aaa_inv_cast_aux: ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ∀W,U. T = ⓝW.U ] qed-. -lemma aaa_inv_cast: ∀G,L,W,T,A. ❪G,L❫ ⊢ ⓝW.T ⁝ A → - ❪G,L❫ ⊢ W ⁝ A ∧ ❪G,L❫ ⊢ T ⁝ A. +lemma aaa_inv_cast: ∀G,L,W,T,A. ❨G,L❩ ⊢ ⓝW.T ⁝ A → + ❨G,L❩ ⊢ W ⁝ A ∧ ❨G,L❩ ⊢ T ⁝ A. /2 width=3 by aaa_inv_cast_aux/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/aaa_aaa.ma b/matita/matita/contribs/lambdadelta/static_2/static/aaa_aaa.ma index 17d6961f6..8d06e6607 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/aaa_aaa.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/aaa_aaa.ma @@ -18,7 +18,7 @@ include "static_2/static/aaa.ma". (* Main inversion lemmas ****************************************************) -theorem aaa_mono: ∀G,L,T,A1. ❪G,L❫ ⊢ T ⁝ A1 → ∀A2. ❪G,L❫ ⊢ T ⁝ A2 → A1 = A2. +theorem aaa_mono: ∀G,L,T,A1. ❨G,L❩ ⊢ T ⁝ A1 → ∀A2. ❨G,L❩ ⊢ T ⁝ A2 → A1 = A2. #G #L #T #A1 #H elim H -G -L -T -A1 [ #G #L #s #A2 #H >(aaa_inv_sort … H) -H // | #I1 #G #L #V1 #B #_ #IH #A2 #H @@ -40,7 +40,7 @@ qed-. (* Advanced inversion lemmas ************************************************) lemma aaa_aaa_inv_appl (G) (L) (V) (T) (B) (X): - ∀A. ❪G,L❫ ⊢ ⓐV.T ⁝ A → ❪G,L❫ ⊢ V ⁝ B → ❪G,L❫⊢ T ⁝ X → ②B.A = X. + ∀A. ❨G,L❩ ⊢ ⓐV.T ⁝ A → ❨G,L❩ ⊢ V ⁝ B → ❨G,L❩⊢ T ⁝ X → ②B.A = X. #G #L #V #T #B #X #A #H #H1V #H1T elim (aaa_inv_appl … H) -H #B0 #H2V #H2T lapply (aaa_mono … H2V … H1V) -V #H destruct @@ -48,7 +48,7 @@ lapply (aaa_mono … H2T … H1T) -G -L -T // qed-. lemma aaa_aaa_inv_cast (G) (L) (U) (T) (B) (A): - ∀X. ❪G,L❫ ⊢ ⓝU.T ⁝ X → ❪G,L❫ ⊢ U ⁝ B → ❪G,L❫⊢ T ⁝ A → ∧∧ B = X & A = X. + ∀X. ❨G,L❩ ⊢ ⓝU.T ⁝ X → ❨G,L❩ ⊢ U ⁝ B → ❨G,L❩⊢ T ⁝ A → ∧∧ B = X & A = X. #G #L #U #T #B #A #X #H #H1U #H1T elim (aaa_inv_cast … H) -H #H2U #H2T lapply (aaa_mono … H1U … H2U) -U #HB diff --git a/matita/matita/contribs/lambdadelta/static_2/static/aaa_dec.ma b/matita/matita/contribs/lambdadelta/static_2/static/aaa_dec.ma index 3b471c33a..f6b9bc201 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/aaa_dec.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/aaa_dec.ma @@ -19,7 +19,7 @@ include "static_2/static/aaa_aaa.ma". (* Main properties **********************************************************) -theorem aaa_dec (G) (L) (T): Decidable (∃A. ❪G,L❫ ⊢ T ⁝ A). +theorem aaa_dec (G) (L) (T): Decidable (∃A. ❨G,L❩ ⊢ T ⁝ A). #G #L #T @(fqup_wf_ind_eq (Ⓣ) … G L T) -G -L -T #G0 #L0 #T0 #IH #G #L * * [||| #p * | * ] [ #s #HG #HL #HT destruct -IH diff --git a/matita/matita/contribs/lambdadelta/static_2/static/aaa_drops.ma b/matita/matita/contribs/lambdadelta/static_2/static/aaa_drops.ma index b501bd3a6..6dacaf8e1 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/aaa_drops.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/aaa_drops.ma @@ -22,7 +22,7 @@ include "static_2/static/aaa.ma". (* Advanced properties ******************************************************) (* Basic_2A1: was: aaa_lref *) -lemma aaa_lref_drops: ∀I,G,K,V,B,i,L. ⇩[i] L ≘ K.ⓑ[I]V → ❪G,K❫ ⊢ V ⁝ B → ❪G,L❫ ⊢ #i ⁝ B. +lemma aaa_lref_drops: ∀I,G,K,V,B,i,L. ⇩[i] L ≘ K.ⓑ[I]V → ❨G,K❩ ⊢ V ⁝ B → ❨G,L❩ ⊢ #i ⁝ B. #I #G #K #V #B #i elim i -i [ #L #H lapply (drops_fwd_isid … H ?) -H // #H destruct /2 width=1 by aaa_zero/ @@ -34,8 +34,8 @@ qed. (* Advanced inversion lemmas ************************************************) (* Basic_2A1: was: aaa_inv_lref *) -lemma aaa_inv_lref_drops: ∀G,A,i,L. ❪G,L❫ ⊢ #i ⁝ A → - ∃∃I,K,V. ⇩[i] L ≘ K.ⓑ[I]V & ❪G,K❫ ⊢ V ⁝ A. +lemma aaa_inv_lref_drops: ∀G,A,i,L. ❨G,L❩ ⊢ #i ⁝ A → + ∃∃I,K,V. ⇩[i] L ≘ K.ⓑ[I]V & ❨G,K❩ ⊢ V ⁝ A. #G #A #i elim i -i [ #L #H elim (aaa_inv_zero … H) -H /3 width=5 by drops_refl, ex2_3_intro/ | #i #IH #L #H elim (aaa_inv_lref … H) -H @@ -44,7 +44,7 @@ lemma aaa_inv_lref_drops: ∀G,A,i,L. ❪G,L❫ ⊢ #i ⁝ A → qed-. lemma aaa_pair_inv_lref (G) (L) (i): - ∀A. ❪G,L❫ ⊢ #i ⁝ A → ∀I,K,V. ⇩[i] L ≘ K.ⓑ[I]V → ❪G,K❫ ⊢ V ⁝ A. + ∀A. ❨G,L❩ ⊢ #i ⁝ A → ∀I,K,V. ⇩[i] L ≘ K.ⓑ[I]V → ❨G,K❩ ⊢ V ⁝ A. #G #L #i #A #H #I #K #V #HLK elim (aaa_inv_lref_drops … H) -H #J #Y #X #HLY #HX lapply (drops_mono … HLY … HLK) -L -i #H destruct // @@ -54,8 +54,8 @@ qed-. (* Basic_2A1: includes: aaa_lift *) (* Note: it should use drops_split_trans_pair2 *) -lemma aaa_lifts: ∀G,L1,T1,A. ❪G,L1❫ ⊢ T1 ⁝ A → ∀b,f,L2. ⇩*[b,f] L2 ≘ L1 → - ∀T2. ⇧*[f] T1 ≘ T2 → ❪G,L2❫ ⊢ T2 ⁝ A. +lemma aaa_lifts: ∀G,L1,T1,A. ❨G,L1❩ ⊢ T1 ⁝ A → ∀b,f,L2. ⇩*[b,f] L2 ≘ L1 → + ∀T2. ⇧*[f] T1 ≘ T2 → ❨G,L2❩ ⊢ T2 ⁝ A. @(fqup_wf_ind_eq (Ⓣ)) #G0 #L0 #T0 #IH #G #L1 * * [ #s #HG #HL #HT #A #H #b #f #L2 #HL21 #X #HX -b -IH lapply (aaa_inv_sort … H) -H #H destruct @@ -93,8 +93,8 @@ qed-. (* Inversion lemmas with generic slicing for local environments *************) (* Basic_2A1: includes: aaa_inv_lift *) -lemma aaa_inv_lifts: ∀G,L2,T2,A. ❪G,L2❫ ⊢ T2 ⁝ A → ∀b,f,L1. ⇩*[b,f] L2 ≘ L1 → - ∀T1. ⇧*[f] T1 ≘ T2 → ❪G,L1❫ ⊢ T1 ⁝ A. +lemma aaa_inv_lifts: ∀G,L2,T2,A. ❨G,L2❩ ⊢ T2 ⁝ A → ∀b,f,L1. ⇩*[b,f] L2 ≘ L1 → + ∀T1. ⇧*[f] T1 ≘ T2 → ❨G,L1❩ ⊢ T1 ⁝ A. @(fqup_wf_ind_eq (Ⓣ)) #G0 #L0 #T0 #IH #G #L2 * * [ #s #HG #HL #HT #A #H #b #f #L1 #HL21 #X #HX -b -IH lapply (aaa_inv_sort … H) -H #H destruct diff --git a/matita/matita/contribs/lambdadelta/static_2/static/aaa_feqg.ma b/matita/matita/contribs/lambdadelta/static_2/static/aaa_feqg.ma index 29404a7aa..7d75e4e15 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/aaa_feqg.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/aaa_feqg.ma @@ -21,7 +21,7 @@ include "static_2/static/aaa_reqg.ma". lemma aaa_feqg_conf (S): reflexive … S → - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≛[S] ❪G2,L2,T2❫ → - ∀A. ❪G1,L1❫ ⊢ T1 ⁝ A → ❪G2,L2❫ ⊢ T2 ⁝ A. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ≛[S] ❨G2,L2,T2❩ → + ∀A. ❨G1,L1❩ ⊢ T1 ⁝ A → ❨G2,L2❩ ⊢ T2 ⁝ A. #S #HS #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 /2 width=7 by aaa_teqg_conf_reqg/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/aaa_fqus.ma b/matita/matita/contribs/lambdadelta/static_2/static/aaa_fqus.ma index ad573b77f..a9f435200 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/aaa_fqus.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/aaa_fqus.ma @@ -19,8 +19,8 @@ include "static_2/static/aaa_drops.ma". (* Properties on supclosure *************************************************) -lemma aaa_fqu_conf: ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂ ❪G2,L2,T2❫ → - ∀A1. ❪G1,L1❫ ⊢ T1 ⁝ A1 → ∃A2. ❪G2,L2❫ ⊢ T2 ⁝ A2. +lemma aaa_fqu_conf: ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂ ❨G2,L2,T2❩ → + ∀A1. ❨G1,L1❩ ⊢ T1 ⁝ A1 → ∃A2. ❨G2,L2❩ ⊢ T2 ⁝ A2. #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 [ #I #G #L #T #A #H elim (aaa_inv_zero … H) -H #J #K #V #H #HA destruct /2 width=2 by ex_intro/ @@ -43,21 +43,21 @@ lemma aaa_fqu_conf: ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂ ❪G2,L2,T2❫ → ] qed-. -lemma aaa_fquq_conf: ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮ ❪G2,L2,T2❫ → - ∀A1. ❪G1,L1❫ ⊢ T1 ⁝ A1 → ∃A2. ❪G2,L2❫ ⊢ T2 ⁝ A2. +lemma aaa_fquq_conf: ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂⸮ ❨G2,L2,T2❩ → + ∀A1. ❨G1,L1❩ ⊢ T1 ⁝ A1 → ∃A2. ❨G2,L2❩ ⊢ T2 ⁝ A2. #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -H /2 width=6 by aaa_fqu_conf/ * #H1 #H2 #H3 destruct /2 width=2 by ex_intro/ qed-. -lemma aaa_fqup_conf: ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+ ❪G2,L2,T2❫ → - ∀A1. ❪G1,L1❫ ⊢ T1 ⁝ A1 → ∃A2. ❪G2,L2❫ ⊢ T2 ⁝ A2. +lemma aaa_fqup_conf: ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂+ ❨G2,L2,T2❩ → + ∀A1. ❨G1,L1❩ ⊢ T1 ⁝ A1 → ∃A2. ❨G2,L2❩ ⊢ T2 ⁝ A2. #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2 [2: #G #G2 #L #L2 #T #T2 #_ #H2 #IH1 #A #HA elim (IH1 … HA) -IH1 -A ] /2 width=6 by aaa_fqu_conf/ qed-. -lemma aaa_fqus_conf: ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂* ❪G2,L2,T2❫ → - ∀A1. ❪G1,L1❫ ⊢ T1 ⁝ A1 → ∃A2. ❪G2,L2❫ ⊢ T2 ⁝ A2. +lemma aaa_fqus_conf: ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ⬂* ❨G2,L2,T2❩ → + ∀A1. ❨G1,L1❩ ⊢ T1 ⁝ A1 → ∃A2. ❨G2,L2❩ ⊢ T2 ⁝ A2. #G1 #G2 #L1 #L2 #T1 #T2 #H elim(fqus_inv_fqup … H) -H /2 width=6 by aaa_fqup_conf/ * #H1 #H2 #H3 destruct /2 width=2 by ex_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/aaa_reqg.ma b/matita/matita/contribs/lambdadelta/static_2/static/aaa_reqg.ma index f2b4fb056..79d26116e 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/aaa_reqg.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/aaa_reqg.ma @@ -21,8 +21,8 @@ include "static_2/static/aaa.ma". lemma aaa_teqg_conf_reqg (S) (G): reflexive … S → - ∀L1,T1,A. ❪G,L1❫ ⊢ T1 ⁝ A → ∀T2. T1 ≛[S] T2 → - ∀L2. L1 ≛[S,T1] L2 → ❪G,L2❫ ⊢ T2 ⁝ A. + ∀L1,T1,A. ❨G,L1❩ ⊢ T1 ⁝ A → ∀T2. T1 ≛[S] T2 → + ∀L2. L1 ≛[S,T1] L2 → ❨G,L2❩ ⊢ T2 ⁝ A. #S #G #HS #L1 #T1 #A #H elim H -G -L1 -T1 -A [ #G #L1 #s1 #X #H1 elim (teqg_inv_sort1 … H1) -H1 // | #I #G #L1 #V1 #B #_ #IH #X #H1 >(teqg_inv_lref1 … H1) -H1 @@ -48,10 +48,10 @@ qed-. lemma aaa_teqg_conf (S) (G) (L) (A): reflexive … S → - ∀T1. ❪G,L❫ ⊢ T1 ⁝ A → ∀T2. T1 ≛[S] T2 → ❪G,L❫ ⊢ T2 ⁝ A. + ∀T1. ❨G,L❩ ⊢ T1 ⁝ A → ∀T2. T1 ≛[S] T2 → ❨G,L❩ ⊢ T2 ⁝ A. /3 width=7 by aaa_teqg_conf_reqg, reqg_refl/ qed-. lemma aaa_reqg_conf (S) (G) (T) (A): reflexive … S → - ∀L1. ❪G,L1❫ ⊢ T ⁝ A → ∀L2. L1 ≛[S,T] L2 → ❪G,L2❫ ⊢ T ⁝ A. + ∀L1. ❨G,L1❩ ⊢ T ⁝ A → ∀L2. L1 ≛[S,T] L2 → ❨G,L2❩ ⊢ T ⁝ A. /3 width=7 by aaa_teqg_conf_reqg, teqg_refl/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/feqg.ma b/matita/matita/contribs/lambdadelta/static_2/static/feqg.ma index 378e52d91..c9705e72a 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/feqg.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/feqg.ma @@ -32,20 +32,20 @@ interpretation lemma feqg_intro_dx (S) (G): reflexive … S → symmetric … S → ∀L1,L2,T2. L1 ≛[S,T2] L2 → - ∀T1. T1 ≛[S] T2 → ❪G,L1,T1❫ ≛[S] ❪G,L2,T2❫. + ∀T1. T1 ≛[S] T2 → ❨G,L1,T1❩ ≛[S] ❨G,L2,T2❩. /3 width=6 by feqg_intro_sn, teqg_reqg_div/ qed. (* Basic inversion lemmas ***************************************************) lemma feqg_inv_gen_sn (S): - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≛[S] ❪G2,L2,T2❫ → + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ≛[S] ❨G2,L2,T2❩ → ∧∧ G1 = G2 & L1 ≛[S,T1] L2 & T1 ≛[S] T2. #S #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 /2 width=1 by and3_intro/ qed-. lemma feqg_inv_gen_dx (S): reflexive … S → - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≛[S] ❪G2,L2,T2❫ → + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ≛[S] ❨G2,L2,T2❩ → ∧∧ G1 = G2 & L1 ≛[S,T2] L2 & T1 ≛[S] T2. #S #HS #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 /3 width=6 by teqg_reqg_conf_sn, and3_intro/ @@ -54,20 +54,20 @@ qed-. (* Basic forward lemmas *****************************************************) lemma feqg_fwd_teqg (S): - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≛[S] ❪G2,L2,T2❫ → T1 ≛[S] T2. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ≛[S] ❨G2,L2,T2❩ → T1 ≛[S] T2. #S #G1 #G2 #L1 #L2 #T1 #T2 #H elim (feqg_inv_gen_sn … H) -H // qed-. lemma feqg_fwd_reqg_sn (S): - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≛[S] ❪G2,L2,T2❫ → L1 ≛[S,T1] L2. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ≛[S] ❨G2,L2,T2❩ → L1 ≛[S,T1] L2. #S #G1 #G2 #L1 #L2 #T1 #T2 #H elim (feqg_inv_gen_sn … H) -H // qed-. lemma feqg_fwd_reqg_dx (S): reflexive … S → - ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≛[S] ❪G2,L2,T2❫ → L1 ≛[S,T2] L2. + ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ≛[S] ❨G2,L2,T2❩ → L1 ≛[S,T2] L2. #S #HS #G1 #G2 #L1 #L2 #T1 #T2 #H elim (feqg_inv_gen_dx … H) -H // qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/feqg_feqg.ma b/matita/matita/contribs/lambdadelta/static_2/static/feqg_feqg.ma index 7a3339a88..1d0e4e38f 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/feqg_feqg.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/feqg_feqg.ma @@ -28,7 +28,7 @@ qed-. lemma feqg_dec (S): (∀s1,s2. Decidable … (S s1 s2)) → - ∀G1,G2,L1,L2,T1,T2. Decidable (❪G1,L1,T1❫ ≛[S] ❪G2,L2,T2❫). + ∀G1,G2,L1,L2,T1,T2. Decidable (❨G1,L1,T1❩ ≛[S] ❨G2,L2,T2❩). #S #HS #G1 #G2 #L1 #L2 #T1 #T2 elim (eq_genv_dec G1 G2) #HnG destruct [ elim (reqg_dec … HS L1 L2 T1) #HnL @@ -53,20 +53,20 @@ qed-. theorem feqg_canc_sn (S): reflexive … S → symmetric … S → Transitive … S → - ∀G,G1,L,L1,T,T1. ❪G,L,T❫ ≛[S] ❪G1,L1,T1❫ → - ∀G2,L2,T2. ❪G,L,T❫ ≛[S] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≛[S] ❪G2,L2,T2❫. + ∀G,G1,L,L1,T,T1. ❨G,L,T❩ ≛[S] ❨G1,L1,T1❩ → + ∀G2,L2,T2. ❨G,L,T❩ ≛[S] ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ≛[S] ❨G2,L2,T2❩. /3 width=5 by feqg_trans, feqg_sym/ qed-. theorem feqg_canc_dx (S): reflexive … S → symmetric … S → Transitive … S → - ∀G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ≛[S] ❪G,L,T❫ → - ∀G2,L2,T2. ❪G2,L2,T2❫ ≛[S] ❪G,L,T❫ → ❪G1,L1,T1❫ ≛[S] ❪G2,L2,T2❫. + ∀G1,G,L1,L,T1,T. ❨G1,L1,T1❩ ≛[S] ❨G,L,T❩ → + ∀G2,L2,T2. ❨G2,L2,T2❩ ≛[S] ❨G,L,T❩ → ❨G1,L1,T1❩ ≛[S] ❨G2,L2,T2❩. /3 width=5 by feqg_trans, feqg_sym/ qed-. lemma feqg_reqg_trans (S) (G2) (L) (T2): reflexive … S → symmetric … S → Transitive … S → - ∀G1,L1,T1. ❪G1,L1,T1❫ ≛[S] ❪G2,L,T2❫ → - ∀L2. L ≛[S,T2] L2 → ❪G1,L1,T1❫ ≛[S] ❪G2,L2,T2❫. + ∀G1,L1,T1. ❨G1,L1,T1❩ ≛[S] ❨G2,L,T2❩ → + ∀L2. L ≛[S,T2] L2 → ❨G1,L1,T1❩ ≛[S] ❨G2,L2,T2❩. #S #G2 #L #T2 #H1S #H2S #H3S #G1 #L1 #T1 #H1 #L2 #HL2 /4 width=5 by feqg_trans, feqg_intro_sn, teqg_refl/ qed-. @@ -76,7 +76,7 @@ qed-. (* Basic_2A1: uses: feqg_tneqg_repl_dx *) lemma feqg_tneqg_trans (S) (G1) (G2) (L1) (L2) (T): reflexive … S → symmetric … S → Transitive … S → - ∀T1. ❪G1,L1,T1❫ ≛[S] ❪G2,L2,T❫ → + ∀T1. ❨G1,L1,T1❩ ≛[S] ❨G2,L2,T❩ → ∀T2. (T ≛[S] T2 → ⊥) → (T1 ≛[S] T2 → ⊥). #S #G1 #G2 #L1 #L2 #T #H1S #H2S #H3S #T1 #H1 #T2 #HnT2 #HT12 elim (feqg_inv_gen_sn … H1) -H1 #_ #_ #HnT1 -G1 -G2 -L1 -L2 diff --git a/matita/matita/contribs/lambdadelta/static_2/static/feqg_fqu.ma b/matita/matita/contribs/lambdadelta/static_2/static/feqg_fqu.ma index e70fcc94d..b541c4b6c 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/feqg_fqu.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/feqg_fqu.ma @@ -19,7 +19,7 @@ include "static_2/static/feqg_length.ma". (* Properties with structural successor for closures ************************) lemma fqu_fneqg (S) (b) (G1) (G2) (L1) (L2) (T1) (T2): - ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≛[S] ❪G2,L2,T2❫ → ⊥. + ❨G1,L1,T1❩ ⬂[b] ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ≛[S] ❨G2,L2,T2❩ → ⊥. #S #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 [ /3 width=8 by feqg_fwd_length, nsucc_inv_refl/ | /3 width=9 by teqg_inv_pair_xy_x, feqg_fwd_teqg/ diff --git a/matita/matita/contribs/lambdadelta/static_2/static/feqg_fqup.ma b/matita/matita/contribs/lambdadelta/static_2/static/feqg_fqup.ma index e50f40818..17b7c8e79 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/feqg_fqup.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/feqg_fqup.ma @@ -22,7 +22,7 @@ include "static_2/static/feqg.ma". lemma teqg_feqg (S): reflexive … S → ∀T1,T2. T1 ≛[S] T2 → - ∀G,L. ❪G,L,T1❫ ≛[S] ❪G,L,T2❫. + ∀G,L. ❨G,L,T1❩ ≛[S] ❨G,L,T2❩. /3 width=1 by feqg_intro_sn, reqg_refl/ qed. (* Advanced properties ******************************************************) diff --git a/matita/matita/contribs/lambdadelta/static_2/static/feqg_fqus.ma b/matita/matita/contribs/lambdadelta/static_2/static/feqg_fqus.ma index 33663faa0..639d18245 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/feqg_fqus.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/feqg_fqus.ma @@ -21,9 +21,9 @@ include "static_2/static/feqg.ma". lemma feqg_fquq_trans (S) (b): reflexive … S → symmetric … S → Transitive … S → - ∀G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ≛[S] ❪G,L,T❫ → - ∀G2,L2,T2. ❪G,L,T❫ ⬂⸮[b] ❪G2,L2,T2❫ → - ∃∃G,L0,T0. ❪G1,L1,T1❫ ⬂⸮[b] ❪G,L0,T0❫ & ❪G,L0,T0❫ ≛[S] ❪G2,L2,T2❫. + ∀G1,G,L1,L,T1,T. ❨G1,L1,T1❩ ≛[S] ❨G,L,T❩ → + ∀G2,L2,T2. ❨G,L,T❩ ⬂⸮[b] ❨G2,L2,T2❩ → + ∃∃G,L0,T0. ❨G1,L1,T1❩ ⬂⸮[b] ❨G,L0,T0❩ & ❨G,L0,T0❩ ≛[S] ❨G2,L2,T2❩. #S #b #H1S #H2S #H3S #G1 #G #L1 #L #T1 #T #H1 #G2 #L2 #T2 #H2 elim(feqg_inv_gen_dx … H1) -H1 // #HG #HL1 #HT1 destruct elim (reqg_fquq_trans … H2 … HL1) -L // #L #T0 #H2 #HT02 #HL2 @@ -34,9 +34,9 @@ qed-. lemma feqg_fqus_trans (S) (b): reflexive … S → symmetric … S → Transitive … S → - ∀G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ≛[S] ❪G,L,T❫ → - ∀G2,L2,T2. ❪G,L,T❫ ⬂*[b] ❪G2,L2,T2❫ → - ∃∃G,L0,T0. ❪G1,L1,T1❫ ⬂*[b] ❪G,L0,T0❫ & ❪G,L0,T0❫ ≛[S] ❪G2,L2,T2❫. + ∀G1,G,L1,L,T1,T. ❨G1,L1,T1❩ ≛[S] ❨G,L,T❩ → + ∀G2,L2,T2. ❨G,L,T❩ ⬂*[b] ❨G2,L2,T2❩ → + ∃∃G,L0,T0. ❨G1,L1,T1❩ ⬂*[b] ❨G,L0,T0❩ & ❨G,L0,T0❩ ≛[S] ❨G2,L2,T2❩. #S #b #H1S #H2S #H3S #G1 #G #L1 #L #T1 #T #H1 #G2 #L2 #T2 #H2 elim(feqg_inv_gen_dx … H1) -H1 // #HG #HL1 #HT1 destruct elim (reqg_fqus_trans … H2 … HL1) -L // #L #T0 #H2 #HT02 #HL2 diff --git a/matita/matita/contribs/lambdadelta/static_2/static/feqg_length.ma b/matita/matita/contribs/lambdadelta/static_2/static/feqg_length.ma index fd4119f87..b6a308648 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/feqg_length.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/feqg_length.ma @@ -20,5 +20,5 @@ include "static_2/static/feqg.ma". (* Forward lemmas with length for local environments ************************) lemma feqg_fwd_length (S) (G1) (G2) (L1) (L2) (T1) (T2): - ❪G1,L1,T1❫ ≛[S] ❪G2,L2,T2❫ → |L1| = |L2|. + ❨G1,L1,T1❩ ≛[S] ❨G2,L2,T2❩ → |L1| = |L2|. /3 width=6 by feqg_fwd_reqg_sn, reqg_fwd_length/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/feqx.ma b/matita/matita/contribs/lambdadelta/static_2/static/feqx.ma index 055343f85..f3388bfa4 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/feqx.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/feqx.ma @@ -25,7 +25,7 @@ interpretation (* Basic_properties *********************************************************) lemma feqg_feqx (S) (G1) (G2) (L1) (L2) (T1) (T2): - ❪G1,L1,T1❫ ≛[S] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≅ ❪G2,L2,T2❫. + ❨G1,L1,T1❩ ≛[S] ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ≅ ❨G2,L2,T2❩. #S #G1 #G2 #L1 #L2 #T1 #T2 #H elim (feqg_inv_gen_sn … H) -H /3 width=2 by feqg_intro_sn, reqg_reqx, teqg_teqx/ diff --git a/matita/matita/contribs/lambdadelta/static_2/static/feqx_feqx.ma b/matita/matita/contribs/lambdadelta/static_2/static/feqx_feqx.ma index dddcb113b..c00a1d9df 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/feqx_feqx.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/feqx_feqx.ma @@ -20,7 +20,7 @@ include "static_2/static/feqx.ma". (* Advanced properties ******************************************************) lemma feqx_dec (G1) (G2) (L1) (L2) (T1) (T2): - Decidable (❪G1,L1,T1❫ ≅ ❪G2,L2,T2❫). + Decidable (❨G1,L1,T1❩ ≅ ❨G2,L2,T2❩). /3 width=1 by feqg_dec, sfull_dec/ qed-. (* lemma feqx_sym: tri_symmetric … feqx. @@ -36,18 +36,18 @@ theorem feqx_trans: tri_transitive … feqx. /4 width=5 by feqx_intro_sn, reqx_trans, teqx_reqx_div, teqx_trans/ qed-. -theorem feqx_canc_sn: ∀G,G1,L,L1,T,T1. ❪G,L,T❫ ≛ ❪G1,L1,T1❫→ - ∀G2,L2,T2. ❪G,L,T❫ ≛ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫. +theorem feqx_canc_sn: ∀G,G1,L,L1,T,T1. ❨G,L,T❩ ≛ ❨G1,L1,T1❩→ + ∀G2,L2,T2. ❨G,L,T❩ ≛ ❨G2,L2,T2❩ → ❨G1,L1,T1❩ ≛ ❨G2,L2,T2❩. /3 width=5 by feqx_trans, feqx_sym/ qed-. -theorem feqx_canc_dx: ∀G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ≛ ❪G,L,T❫ → - ∀G2,L2,T2. ❪G2,L2,T2❫ ≛ ❪G,L,T❫ → ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫. +theorem feqx_canc_dx: ∀G1,G,L1,L,T1,T. ❨G1,L1,T1❩ ≛ ❨G,L,T❩ → + ∀G2,L2,T2. ❨G2,L2,T2❩ ≛ ❨G,L,T❩ → ❨G1,L1,T1❩ ≛ ❨G2,L2,T2❩. /3 width=5 by feqx_trans, feqx_sym/ qed-. (* Main inversion lemmas with degree-based equivalence on terms *************) -theorem feqx_tneqx_repl_dx: ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → - ∀U1,U2. ❪G1,L1,U1❫ ≛ ❪G2,L2,U2❫ → +theorem feqx_tneqx_repl_dx: ∀G1,G2,L1,L2,T1,T2. ❨G1,L1,T1❩ ≛ ❨G2,L2,T2❩ → + ∀U1,U2. ❨G1,L1,U1❩ ≛ ❨G2,L2,U2❩ → (T2 ≛ U2 → ⊥) → (T1 ≛ U1 → ⊥). #G1 #G2 #L1 #L2 #T1 #T2 #HT #U1 #U2 #HU #HnTU2 #HTU1 elim (feqx_inv_gen_sn … HT) -HT #_ #_ #HT diff --git a/matita/matita/contribs/lambdadelta/static_2/static/frees.ma b/matita/matita/contribs/lambdadelta/static_2/static/frees.ma index 90155762b..4ab9974c5 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/frees.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/frees.ma @@ -19,14 +19,14 @@ include "static_2/syntax/lenv.ma". (* CONTEXT-SENSITIVE FREE VARIABLES *****************************************) inductive frees: relation3 lenv term pr_map ≝ -| frees_sort: ∀f,L,s. 𝐈❪f❫ → frees L (⋆s) f -| frees_atom: ∀f,i. 𝐈❪f❫ → frees (⋆) (#i) (⫯*[i]↑f) +| frees_sort: ∀f,L,s. 𝐈❨f❩ → frees L (⋆s) f +| frees_atom: ∀f,i. 𝐈❨f❩ → frees (⋆) (#i) (⫯*[i]↑f) | frees_pair: ∀f,I,L,V. frees L V f → frees (L.ⓑ[I]V) (#0) (↑f) -| frees_unit: ∀f,I,L. 𝐈❪f❫ → frees (L.ⓤ[I]) (#0) (↑f) +| frees_unit: ∀f,I,L. 𝐈❨f❩ → frees (L.ⓤ[I]) (#0) (↑f) | frees_lref: ∀f,I,L,i. frees L (#i) f → frees (L.ⓘ[I]) (#↑i) (⫯f) -| frees_gref: ∀f,L,l. 𝐈❪f❫ → frees L (§l) f +| frees_gref: ∀f,L,l. 𝐈❨f❩ → frees L (§l) f | frees_bind: ∀f1,f2,f,p,I,L,V,T. frees L V f1 → frees (L.ⓑ[I]V) T f2 → f1 ⋓ ⫰f2 ≘ f → frees L (ⓑ[p,I]V.T) f | frees_flat: ∀f1,f2,f,I,L,V,T. frees L V f1 → frees L T f2 → @@ -39,7 +39,7 @@ interpretation (* Basic inversion lemmas ***************************************************) -fact frees_inv_sort_aux: ∀f,L,X. L ⊢ 𝐅+❪X❫ ≘ f → ∀x. X = ⋆x → 𝐈❪f❫. +fact frees_inv_sort_aux: ∀f,L,X. L ⊢ 𝐅+❨X❩ ≘ f → ∀x. X = ⋆x → 𝐈❨f❩. #L #X #f #H elim H -f -L -X // [ #f #i #_ #x #H destruct | #f #_ #L #V #_ #_ #x #H destruct @@ -50,12 +50,12 @@ fact frees_inv_sort_aux: ∀f,L,X. L ⊢ 𝐅+❪X❫ ≘ f → ∀x. X = ⋆x ] qed-. -lemma frees_inv_sort: ∀f,L,s. L ⊢ 𝐅+❪⋆s❫ ≘ f → 𝐈❪f❫. +lemma frees_inv_sort: ∀f,L,s. L ⊢ 𝐅+❨⋆s❩ ≘ f → 𝐈❨f❩. /2 width=5 by frees_inv_sort_aux/ qed-. fact frees_inv_atom_aux: - ∀f,L,X. L ⊢ 𝐅+❪X❫ ≘ f → ∀i. L = ⋆ → X = #i → - ∃∃g. 𝐈❪g❫ & f = ⫯*[i]↑g. + ∀f,L,X. L ⊢ 𝐅+❨X❩ ≘ f → ∀i. L = ⋆ → X = #i → + ∃∃g. 𝐈❨g❩ & f = ⫯*[i]↑g. #f #L #X #H elim H -f -L -X [ #f #L #s #_ #j #_ #H destruct | #f #i #Hf #j #_ #H destruct /2 width=3 by ex2_intro/ @@ -68,12 +68,12 @@ fact frees_inv_atom_aux: ] qed-. -lemma frees_inv_atom: ∀f,i. ⋆ ⊢ 𝐅+❪#i❫ ≘ f → ∃∃g. 𝐈❪g❫ & f = ⫯*[i]↑g. +lemma frees_inv_atom: ∀f,i. ⋆ ⊢ 𝐅+❨#i❩ ≘ f → ∃∃g. 𝐈❨g❩ & f = ⫯*[i]↑g. /2 width=5 by frees_inv_atom_aux/ qed-. fact frees_inv_pair_aux: - ∀f,L,X. L ⊢ 𝐅+❪X❫ ≘ f → ∀I,K,V. L = K.ⓑ[I]V → X = #0 → - ∃∃g. K ⊢ 𝐅+❪V❫ ≘ g & f = ↑g. + ∀f,L,X. L ⊢ 𝐅+❨X❩ ≘ f → ∀I,K,V. L = K.ⓑ[I]V → X = #0 → + ∃∃g. K ⊢ 𝐅+❨V❩ ≘ g & f = ↑g. #f #L #X * -f -L -X [ #f #L #s #_ #Z #Y #X #_ #H destruct | #f #i #_ #Z #Y #X #H destruct @@ -86,12 +86,12 @@ fact frees_inv_pair_aux: ] qed-. -lemma frees_inv_pair: ∀f,I,K,V. K.ⓑ[I]V ⊢ 𝐅+❪#0❫ ≘ f → ∃∃g. K ⊢ 𝐅+❪V❫ ≘ g & f = ↑g. +lemma frees_inv_pair: ∀f,I,K,V. K.ⓑ[I]V ⊢ 𝐅+❨#0❩ ≘ f → ∃∃g. K ⊢ 𝐅+❨V❩ ≘ g & f = ↑g. /2 width=6 by frees_inv_pair_aux/ qed-. fact frees_inv_unit_aux: - ∀f,L,X. L ⊢ 𝐅+❪X❫ ≘ f → ∀I,K. L = K.ⓤ[I] → X = #0 → - ∃∃g. 𝐈❪g❫ & f = ↑g. + ∀f,L,X. L ⊢ 𝐅+❨X❩ ≘ f → ∀I,K. L = K.ⓤ[I] → X = #0 → + ∃∃g. 𝐈❨g❩ & f = ↑g. #f #L #X * -f -L -X [ #f #L #s #_ #Z #Y #_ #H destruct | #f #i #_ #Z #Y #H destruct @@ -104,12 +104,12 @@ fact frees_inv_unit_aux: ] qed-. -lemma frees_inv_unit: ∀f,I,K. K.ⓤ[I] ⊢ 𝐅+❪#0❫ ≘ f → ∃∃g. 𝐈❪g❫ & f = ↑g. +lemma frees_inv_unit: ∀f,I,K. K.ⓤ[I] ⊢ 𝐅+❨#0❩ ≘ f → ∃∃g. 𝐈❨g❩ & f = ↑g. /2 width=7 by frees_inv_unit_aux/ qed-. fact frees_inv_lref_aux: - ∀f,L,X. L ⊢ 𝐅+❪X❫ ≘ f → ∀I,K,j. L = K.ⓘ[I] → X = #(↑j) → - ∃∃g. K ⊢ 𝐅+❪#j❫ ≘ g & f = ⫯g. + ∀f,L,X. L ⊢ 𝐅+❨X❩ ≘ f → ∀I,K,j. L = K.ⓘ[I] → X = #(↑j) → + ∃∃g. K ⊢ 𝐅+❨#j❩ ≘ g & f = ⫯g. #f #L #X * -f -L -X [ #f #L #s #_ #Z #Y #j #_ #H destruct | #f #i #_ #Z #Y #j #H destruct @@ -123,11 +123,11 @@ fact frees_inv_lref_aux: qed-. lemma frees_inv_lref: - ∀f,I,K,i. K.ⓘ[I] ⊢ 𝐅+❪#(↑i)❫ ≘ f → - ∃∃g. K ⊢ 𝐅+❪#i❫ ≘ g & f = ⫯g. + ∀f,I,K,i. K.ⓘ[I] ⊢ 𝐅+❨#(↑i)❩ ≘ f → + ∃∃g. K ⊢ 𝐅+❨#i❩ ≘ g & f = ⫯g. /2 width=6 by frees_inv_lref_aux/ qed-. -fact frees_inv_gref_aux: ∀f,L,X. L ⊢ 𝐅+❪X❫ ≘ f → ∀x. X = §x → 𝐈❪f❫. +fact frees_inv_gref_aux: ∀f,L,X. L ⊢ 𝐅+❨X❩ ≘ f → ∀x. X = §x → 𝐈❨f❩. #f #L #X #H elim H -f -L -X // [ #f #i #_ #x #H destruct | #f #_ #L #V #_ #_ #x #H destruct @@ -138,12 +138,12 @@ fact frees_inv_gref_aux: ∀f,L,X. L ⊢ 𝐅+❪X❫ ≘ f → ∀x. X = §x ] qed-. -lemma frees_inv_gref: ∀f,L,l. L ⊢ 𝐅+❪§l❫ ≘ f → 𝐈❪f❫. +lemma frees_inv_gref: ∀f,L,l. L ⊢ 𝐅+❨§l❩ ≘ f → 𝐈❨f❩. /2 width=5 by frees_inv_gref_aux/ qed-. fact frees_inv_bind_aux: - ∀f,L,X. L ⊢ 𝐅+❪X❫ ≘ f → ∀p,I,V,T. X = ⓑ[p,I]V.T → - ∃∃f1,f2. L ⊢ 𝐅+❪V❫ ≘ f1 & L.ⓑ[I]V ⊢ 𝐅+❪T❫ ≘ f2 & f1 ⋓ ⫰f2 ≘ f. + ∀f,L,X. L ⊢ 𝐅+❨X❩ ≘ f → ∀p,I,V,T. X = ⓑ[p,I]V.T → + ∃∃f1,f2. L ⊢ 𝐅+❨V❩ ≘ f1 & L.ⓑ[I]V ⊢ 𝐅+❨T❩ ≘ f2 & f1 ⋓ ⫰f2 ≘ f. #f #L #X * -f -L -X [ #f #L #s #_ #q #J #W #U #H destruct | #f #i #_ #q #J #W #U #H destruct @@ -157,12 +157,12 @@ fact frees_inv_bind_aux: qed-. lemma frees_inv_bind: - ∀f,p,I,L,V,T. L ⊢ 𝐅+❪ⓑ[p,I]V.T❫ ≘ f → - ∃∃f1,f2. L ⊢ 𝐅+❪V❫ ≘ f1 & L.ⓑ[I]V ⊢ 𝐅+❪T❫ ≘ f2 & f1 ⋓ ⫰f2 ≘ f. + ∀f,p,I,L,V,T. L ⊢ 𝐅+❨ⓑ[p,I]V.T❩ ≘ f → + ∃∃f1,f2. L ⊢ 𝐅+❨V❩ ≘ f1 & L.ⓑ[I]V ⊢ 𝐅+❨T❩ ≘ f2 & f1 ⋓ ⫰f2 ≘ f. /2 width=4 by frees_inv_bind_aux/ qed-. -fact frees_inv_flat_aux: ∀f,L,X. L ⊢ 𝐅+❪X❫ ≘ f → ∀I,V,T. X = ⓕ[I]V.T → - ∃∃f1,f2. L ⊢ 𝐅+❪V❫ ≘ f1 & L ⊢ 𝐅+❪T❫ ≘ f2 & f1 ⋓ f2 ≘ f. +fact frees_inv_flat_aux: ∀f,L,X. L ⊢ 𝐅+❨X❩ ≘ f → ∀I,V,T. X = ⓕ[I]V.T → + ∃∃f1,f2. L ⊢ 𝐅+❨V❩ ≘ f1 & L ⊢ 𝐅+❨T❩ ≘ f2 & f1 ⋓ f2 ≘ f. #f #L #X * -f -L -X [ #f #L #s #_ #J #W #U #H destruct | #f #i #_ #J #W #U #H destruct @@ -176,13 +176,13 @@ fact frees_inv_flat_aux: ∀f,L,X. L ⊢ 𝐅+❪X❫ ≘ f → ∀I,V,T. X = qed-. lemma frees_inv_flat: - ∀f,I,L,V,T. L ⊢ 𝐅+❪ⓕ[I]V.T❫ ≘ f → - ∃∃f1,f2. L ⊢ 𝐅+❪V❫ ≘ f1 & L ⊢ 𝐅+❪T❫ ≘ f2 & f1 ⋓ f2 ≘ f. + ∀f,I,L,V,T. L ⊢ 𝐅+❨ⓕ[I]V.T❩ ≘ f → + ∃∃f1,f2. L ⊢ 𝐅+❨V❩ ≘ f1 & L ⊢ 𝐅+❨T❩ ≘ f2 & f1 ⋓ f2 ≘ f. /2 width=4 by frees_inv_flat_aux/ qed-. (* Basic properties ********************************************************) -lemma frees_eq_repl_back: ∀L,T. pr_eq_repl_back … (λf. L ⊢ 𝐅+❪T❫ ≘ f). +lemma frees_eq_repl_back: ∀L,T. pr_eq_repl_back … (λf. L ⊢ 𝐅+❨T❩ ≘ f). #L #T #f1 #H elim H -f1 -L -T [ /3 width=3 by frees_sort, pr_isi_eq_repl_back/ | #f1 #i #Hf1 #g2 #H @@ -203,11 +203,11 @@ lemma frees_eq_repl_back: ∀L,T. pr_eq_repl_back … (λf. L ⊢ 𝐅+❪T❫ ] qed-. -lemma frees_eq_repl_fwd: ∀L,T. pr_eq_repl_fwd … (λf. L ⊢ 𝐅+❪T❫ ≘ f). +lemma frees_eq_repl_fwd: ∀L,T. pr_eq_repl_fwd … (λf. L ⊢ 𝐅+❨T❩ ≘ f). #L #T @pr_eq_repl_sym /2 width=3 by frees_eq_repl_back/ qed-. -lemma frees_lref_push: ∀f,i. ⋆ ⊢ 𝐅+❪#i❫ ≘ f → ⋆ ⊢ 𝐅+❪#↑i❫ ≘ ⫯f. +lemma frees_lref_push: ∀f,i. ⋆ ⊢ 𝐅+❨#i❩ ≘ f → ⋆ ⊢ 𝐅+❨#↑i❩ ≘ ⫯f. #f #i #H elim (frees_inv_atom … H) -H #g #Hg #H destruct /2 width=1 by frees_atom/ @@ -215,7 +215,7 @@ qed. (* Forward lemmas with test for finite colength *****************************) -lemma frees_fwd_isfin: ∀f,L,T. L ⊢ 𝐅+❪T❫ ≘ f → 𝐅❪f❫. +lemma frees_fwd_isfin: ∀f,L,T. L ⊢ 𝐅+❨T❩ ≘ f → 𝐅❨f❩. #f #L #T #H elim H -f -L -T /4 width=5 by pr_sor_inv_isf_bi, pr_isf_isi, pr_isf_tl, pr_isf_pushs, pr_isf_push, pr_isf_next/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/frees_append.ma b/matita/matita/contribs/lambdadelta/static_2/static/frees_append.ma index 294662aa4..207b506f2 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/frees_append.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/frees_append.ma @@ -19,7 +19,7 @@ include "static_2/static/frees.ma". (* Properties with append for local environments ****************************) -lemma frees_append_void: ∀f,K,T. K ⊢ 𝐅+❪T❫ ≘ f → ⓧ.K ⊢ 𝐅+❪T❫ ≘ f. +lemma frees_append_void: ∀f,K,T. K ⊢ 𝐅+❨T❩ ≘ f → ⓧ.K ⊢ 𝐅+❨T❩ ≘ f. #f #K #T #H elim H -f -K -T [ /2 width=1 by frees_sort/ | #f * /3 width=1 by frees_atom, frees_unit, frees_lref/ @@ -35,8 +35,8 @@ qed. (* Inversion lemmas with append for local environments **********************) fact frees_inv_append_void_aux: - ∀f,L,T. L ⊢ 𝐅+❪T❫ ≘ f → - ∀K. L = ⓧ.K → K ⊢ 𝐅+❪T❫ ≘ f. + ∀f,L,T. L ⊢ 𝐅+❨T❩ ≘ f → + ∀K. L = ⓧ.K → K ⊢ 𝐅+❨T❩ ≘ f. #f #L #T #H elim H -f -L -T [ /2 width=1 by frees_sort/ | #f #i #_ #K #H @@ -56,5 +56,5 @@ fact frees_inv_append_void_aux: ] qed-. -lemma frees_inv_append_void: ∀f,K,T. ⓧ.K ⊢ 𝐅+❪T❫ ≘ f → K ⊢ 𝐅+❪T❫ ≘ f. +lemma frees_inv_append_void: ∀f,K,T. ⓧ.K ⊢ 𝐅+❨T❩ ≘ f → K ⊢ 𝐅+❨T❩ ≘ f. /2 width=3 by frees_inv_append_void_aux/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/frees_drops.ma b/matita/matita/contribs/lambdadelta/static_2/static/frees_drops.ma index 215ba6e1a..67e3e9992 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/frees_drops.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/frees_drops.ma @@ -22,7 +22,7 @@ include "static_2/static/frees_fqup.ma". lemma frees_atom_drops: ∀b,L,i. ⇩*[b,𝐔❨i❩] L ≘ ⋆ → - ∀f. 𝐈❪f❫ → L ⊢ 𝐅+❪#i❫ ≘ ⫯*[i]↑f. + ∀f. 𝐈❨f❩ → L ⊢ 𝐅+❨#i❩ ≘ ⫯*[i]↑f. #b #L elim L -L /2 width=1 by frees_atom/ #L #I #IH * [ #H lapply (drops_fwd_isid … H ?) -H // #H destruct @@ -31,8 +31,8 @@ lemma frees_atom_drops: qed. lemma frees_pair_drops: - ∀f,K,V. K ⊢ 𝐅+❪V❫ ≘ f → - ∀i,I,L. ⇩[i] L ≘ K.ⓑ[I]V → L ⊢ 𝐅+❪#i❫ ≘ ⫯*[i] ↑f. + ∀f,K,V. K ⊢ 𝐅+❨V❩ ≘ f → + ∀i,I,L. ⇩[i] L ≘ K.ⓑ[I]V → L ⊢ 𝐅+❨#i❩ ≘ ⫯*[i] ↑f. #f #K #V #Hf #i elim i -i [ #I #L #H lapply (drops_fwd_isid … H ?) -H /2 width=1 by frees_pair/ | #i #IH #I #L #H elim (drops_inv_succ … H) -H /3 width=2 by frees_lref/ @@ -40,8 +40,8 @@ lemma frees_pair_drops: qed. lemma frees_unit_drops: - ∀f. 𝐈❪f❫ → ∀I,K,i,L. ⇩[i] L ≘ K.ⓤ[I] → - L ⊢ 𝐅+❪#i❫ ≘ ⫯*[i] ↑f. + ∀f. 𝐈❨f❩ → ∀I,K,i,L. ⇩[i] L ≘ K.ⓤ[I] → + L ⊢ 𝐅+❨#i❩ ≘ ⫯*[i] ↑f. #f #Hf #I #K #i elim i -i [ #L #H lapply (drops_fwd_isid … H ?) -H /2 width=1 by frees_unit/ | #i #IH #Y #H elim (drops_inv_succ … H) -H @@ -50,8 +50,8 @@ lemma frees_unit_drops: qed. lemma frees_lref_pushs: - ∀f,K,j. K ⊢ 𝐅+❪#j❫ ≘ f → - ∀i,L. ⇩[i] L ≘ K → L ⊢ 𝐅+❪#(i+j)❫ ≘ ⫯*[i] f. + ∀f,K,j. K ⊢ 𝐅+❨#j❩ ≘ f → + ∀i,L. ⇩[i] L ≘ K → L ⊢ 𝐅+❨#(i+j)❩ ≘ ⫯*[i] f. #f #K #j #Hf #i elim i -i [ #L #H lapply (drops_fwd_isid … H ?) -H // | #i #IH #L #H elim (drops_inv_succ … H) -H @@ -62,10 +62,10 @@ qed. (* Advanced inversion lemmas ************************************************) lemma frees_inv_lref_drops: - ∀L,i,f. L ⊢ 𝐅+❪#i❫ ≘ f → - ∨∨ ∃∃g. ⇩*[Ⓕ,𝐔❨i❩] L ≘ ⋆ & 𝐈❪g❫ & f = ⫯*[i] ↑g - | ∃∃g,I,K,V. K ⊢ 𝐅+❪V❫ ≘ g & ⇩[i] L ≘ K.ⓑ[I]V & f = ⫯*[i] ↑g - | ∃∃g,I,K. ⇩[i] L ≘ K.ⓤ[I] & 𝐈❪g❫ & f = ⫯*[i] ↑g. + ∀L,i,f. L ⊢ 𝐅+❨#i❩ ≘ f → + ∨∨ ∃∃g. ⇩*[Ⓕ,𝐔❨i❩] L ≘ ⋆ & 𝐈❨g❩ & f = ⫯*[i] ↑g + | ∃∃g,I,K,V. K ⊢ 𝐅+❨V❩ ≘ g & ⇩[i] L ≘ K.ⓑ[I]V & f = ⫯*[i] ↑g + | ∃∃g,I,K. ⇩[i] L ≘ K.ⓤ[I] & 𝐈❨g❩ & f = ⫯*[i] ↑g. #L elim L -L [ #i #g | #L #I #IH * [ #g cases I -I [ #I | #I #V ] -IH | #i #g ] ] #H [ elim (frees_inv_atom … H) -H #f #Hf #H destruct @@ -86,9 +86,9 @@ qed-. (* Properties with generic slicing for local environments *******************) lemma frees_lifts: - ∀b,f1,K,T. K ⊢ 𝐅+❪T❫ ≘ f1 → + ∀b,f1,K,T. K ⊢ 𝐅+❨T❩ ≘ f1 → ∀f,L. ⇩*[b,f] L ≘ K → ∀U. ⇧*[f] T ≘ U → - ∀f2. f ~⊚ f1 ≘ f2 → L ⊢ 𝐅+❪U❫ ≘ f2. + ∀f2. f ~⊚ f1 ≘ f2 → L ⊢ 𝐅+❨U❩ ≘ f2. #b #f1 #K #T #H lapply (frees_fwd_isfin … H) elim H -f1 -K -T [ #f1 #K #s #Hf1 #_ #f #L #HLK #U #H2 #f2 #H3 lapply (pr_coafter_isi_inv_dx … H3 … Hf1) -f1 #Hf2 @@ -145,7 +145,7 @@ qed-. lemma frees_lifts_SO: ∀b,L,K. ⇩*[b,𝐔❨1❩] L ≘ K → ∀T,U. ⇧[1] T ≘ U → - ∀f. K ⊢ 𝐅+❪T❫ ≘ f → L ⊢ 𝐅+❪U❫ ≘ ⫯f. + ∀f. K ⊢ 𝐅+❨T❩ ≘ f → L ⊢ 𝐅+❨U❩ ≘ ⫯f. #b #L #K #HLK #T #U #HTU #f #Hf @(frees_lifts b … Hf … HTU) // (**) (* auto fails *) qed. @@ -153,44 +153,44 @@ qed. (* Forward lemmas with generic slicing for local environments ***************) lemma frees_fwd_coafter: - ∀b,f2,L,U. L ⊢ 𝐅+❪U❫ ≘ f2 → + ∀b,f2,L,U. L ⊢ 𝐅+❨U❩ ≘ f2 → ∀f,K. ⇩*[b,f] L ≘ K → ∀T. ⇧*[f] T ≘ U → - ∀f1. K ⊢ 𝐅+❪T❫ ≘ f1 → f ~⊚ f1 ≘ f2. + ∀f1. K ⊢ 𝐅+❨T❩ ≘ f1 → f ~⊚ f1 ≘ f2. /4 width=11 by frees_lifts, frees_mono, pr_coafter_eq_repl_back/ qed-. (* Inversion lemmas with generic slicing for local environments *************) lemma frees_inv_lifts_ex: - ∀b,f2,L,U. L ⊢ 𝐅+❪U❫ ≘ f2 → + ∀b,f2,L,U. L ⊢ 𝐅+❨U❩ ≘ f2 → ∀f,K. ⇩*[b,f] L ≘ K → ∀T. ⇧*[f] T ≘ U → - ∃∃f1. f ~⊚ f1 ≘ f2 & K ⊢ 𝐅+❪T❫ ≘ f1. + ∃∃f1. f ~⊚ f1 ≘ f2 & K ⊢ 𝐅+❨T❩ ≘ f1. #b #f2 #L #U #Hf2 #f #K #HLK #T elim (frees_total K T) /3 width=9 by frees_fwd_coafter, ex2_intro/ qed-. lemma frees_inv_lifts_SO: - ∀b,f,L,U. L ⊢ 𝐅+❪U❫ ≘ f → + ∀b,f,L,U. L ⊢ 𝐅+❨U❩ ≘ f → ∀K. ⇩*[b,𝐔❨1❩] L ≘ K → ∀T. ⇧[1] T ≘ U → - K ⊢ 𝐅+❪T❫ ≘ ⫰f. + K ⊢ 𝐅+❨T❩ ≘ ⫰f. #b #f #L #U #H #K #HLK #T #HTU elim(frees_inv_lifts_ex … H … HLK … HTU) -b -L -U #f1 #Hf #Hf1 elim (pr_coafter_inv_next_sn … Hf) -Hf /3 width=5 by frees_eq_repl_back, pr_coafter_isi_inv_sn/ qed-. lemma frees_inv_lifts: - ∀b,f2,L,U. L ⊢ 𝐅+❪U❫ ≘ f2 → + ∀b,f2,L,U. L ⊢ 𝐅+❨U❩ ≘ f2 → ∀f,K. ⇩*[b,f] L ≘ K → ∀T. ⇧*[f] T ≘ U → - ∀f1. f ~⊚ f1 ≘ f2 → K ⊢ 𝐅+❪T❫ ≘ f1. + ∀f1. f ~⊚ f1 ≘ f2 → K ⊢ 𝐅+❨T❩ ≘ f1. #b #f2 #L #U #H #f #K #HLK #T #HTU #f1 #Hf2 elim (frees_inv_lifts_ex … H … HLK … HTU) -b -L -U /3 width=7 by frees_eq_repl_back, pr_coafter_inj/ qed-. (* Note: this is used by rex_conf and might be modified *) lemma frees_inv_drops_next: - ∀f1,L1,T1. L1 ⊢ 𝐅+❪T1❫ ≘ f1 → + ∀f1,L1,T1. L1 ⊢ 𝐅+❨T1❩ ≘ f1 → ∀I2,L2,V2,i. ⇩[i] L1 ≘ L2.ⓑ[I2]V2 → ∀g1. ↑g1 = ⫰*[i] f1 → - ∃∃g2. L2 ⊢ 𝐅+❪V2❫ ≘ g2 & g2 ⊆ g1. + ∃∃g2. L2 ⊢ 𝐅+❨V2❩ ≘ g2 & g2 ⊆ g1. #f1 #L1 #T1 #H elim H -f1 -L1 -T1 [ #f1 #L1 #s #Hf1 #I2 #L2 #V2 #j #_ #g1 #H1 -I2 -L1 -s lapply (pr_isi_tls j … Hf1) -Hf1

(teqg_inv_lref1 … H) -X /3 width=5 by reqg_refl, fqu_lref_O, teqg_refl, ex3_2_intro/ @@ -49,9 +49,9 @@ qed-. lemma teqg_fqu_trans (S) (b): reflexive … S → symmetric … S → - ∀G1,G2,L1,L2,U1,T1. ❪G1,L1,U1❫ ⬂[b] ❪G2,L2,T1❫ → + ∀G1,G2,L1,L2,U1,T1. ❨G1,L1,U1❩ ⬂[b] ❨G2,L2,T1❩ → ∀U2. U2 ≛[S] U1 → - ∃∃L,T2. ❪G1,L1,U2❫ ⬂[b] ❪G2,L,T2❫ & T2 ≛[S] T1 & L ≛[S,T1] L2. + ∃∃L,T2. ❨G1,L1,U2❩ ⬂[b] ❨G2,L,T2❩ & T2 ≛[S] T1 & L ≛[S,T1] L2. #S #b #H1S #H2S #G1 #G2 #L1 #L2 #U1 #T1 #H12 #U2 #HU21 elim (fqu_teqg_conf … H12 U2) -H12 /3 width=5 by reqg_sym, teqg_sym, ex3_2_intro/ @@ -60,9 +60,9 @@ qed-. (* Basic_2A1: uses: lleq_fqu_trans *) lemma reqg_fqu_trans (S) (b): reflexive … S → - ∀G1,G2,L2,K2,T,U. ❪G1,L2,T❫ ⬂[b] ❪G2,K2,U❫ → + ∀G1,G2,L2,K2,T,U. ❨G1,L2,T❩ ⬂[b] ❨G2,K2,U❩ → ∀L1. L1 ≛[S,T] L2 → - ∃∃K1,U0. ❪G1,L1,T❫ ⬂[b] ❪G2,K1,U0❫ & U0 ≛[S] U & K1 ≛[S,U] K2. + ∃∃K1,U0. ❨G1,L1,T❩ ⬂[b] ❨G2,K1,U0❩ & U0 ≛[S] U & K1 ≛[S,U] K2. #S #b #HS #G1 #G2 #L2 #K2 #T #U #H elim H -G1 -G2 -L2 -K2 -T -U [ #I #G #L2 #V2 #L1 #H elim (reqg_inv_zero_pair_dx … H) -H #K1 #V1 #HV1 #HV12 #H destruct @@ -88,9 +88,9 @@ qed-. lemma teqg_fquq_trans (S) (b): reflexive … S → symmetric … S → - ∀G1,G2,L1,L2,U1,T1. ❪G1,L1,U1❫ ⬂⸮[b] ❪G2,L2,T1❫ → + ∀G1,G2,L1,L2,U1,T1. ❨G1,L1,U1❩ ⬂⸮[b] ❨G2,L2,T1❩ → ∀U2. U2 ≛[S] U1 → - ∃∃L,T2. ❪G1,L1,U2❫ ⬂⸮[b] ❪G2,L,T2❫ & T2 ≛[S] T1 & L ≛[S,T1] L2. + ∃∃L,T2. ❨G1,L1,U2❩ ⬂⸮[b] ❨G2,L,T2❩ & T2 ≛[S] T1 & L ≛[S,T1] L2. #S #b #H1S #H2S #G1 #G2 #L1 #L2 #U1 #T1 #H elim H -H [ #H #U2 #HU21 elim (teqg_fqu_trans … H … HU21) -U1 /3 width=5 by fqu_fquq, ex3_2_intro/ @@ -101,9 +101,9 @@ qed-. (* Basic_2A1: was just: lleq_fquq_trans *) lemma reqg_fquq_trans (S) (b): reflexive … S → - ∀G1,G2,L2,K2,T,U. ❪G1,L2,T❫ ⬂⸮[b] ❪G2,K2,U❫ → + ∀G1,G2,L2,K2,T,U. ❨G1,L2,T❩ ⬂⸮[b] ❨G2,K2,U❩ → ∀L1. L1 ≛[S,T] L2 → - ∃∃K1,U0. ❪G1,L1,T❫ ⬂⸮[b] ❪G2,K1,U0❫ & U0 ≛[S] U & K1 ≛[S,U] K2. + ∃∃K1,U0. ❨G1,L1,T❩ ⬂⸮[b] ❨G2,K1,U0❩ & U0 ≛[S] U & K1 ≛[S,U] K2. #S #b #HS #G1 #G2 #L2 #K2 #T #U #H elim H -H [ #H #L1 #HL12 elim (reqg_fqu_trans … H … HL12) -L2 /3 width=5 by fqu_fquq, ex3_2_intro/ | * #HG #HL #HT destruct /3 width=5 by teqg_refl, ex3_2_intro/ @@ -115,9 +115,9 @@ qed-. (* Basic_2A1: was just: lleq_fqup_trans *) lemma reqg_fqup_trans (S) (b): reflexive … S → symmetric … S → Transitive … S → - ∀G1,G2,L2,K2,T,U. ❪G1,L2,T❫ ⬂+[b] ❪G2,K2,U❫ → + ∀G1,G2,L2,K2,T,U. ❨G1,L2,T❩ ⬂+[b] ❨G2,K2,U❩ → ∀L1. L1 ≛[S,T] L2 → - ∃∃K1,U0. ❪G1,L1,T❫ ⬂+[b] ❪G2,K1,U0❫ & U0 ≛[S] U & K1 ≛[S,U] K2. + ∃∃K1,U0. ❨G1,L1,T❩ ⬂+[b] ❨G2,K1,U0❩ & U0 ≛[S] U & K1 ≛[S,U] K2. #S #b #H1S #H2S #H3S #G1 #G2 #L2 #K2 #T #U #H @(fqup_ind … H) -G2 -K2 -U [ #G2 #K2 #U #HTU #L1 #HL12 elim (reqg_fqu_trans … HTU … HL12) -L2 /3 width=5 by fqu_fqup, ex3_2_intro/ @@ -132,9 +132,9 @@ qed-. lemma teqg_fqup_trans (S) (b): reflexive … S → symmetric … S → Transitive … S → - ∀G1,G2,L1,L2,U1,T1. ❪G1,L1,U1❫ ⬂+[b] ❪G2,L2,T1❫ → + ∀G1,G2,L1,L2,U1,T1. ❨G1,L1,U1❩ ⬂+[b] ❨G2,L2,T1❩ → ∀U2. U2 ≛[S] U1 → - ∃∃L,T2. ❪G1,L1,U2❫ ⬂+[b] ❪G2,L,T2❫ & T2 ≛[S] T1 & L ≛[S,T1] L2. + ∃∃L,T2. ❨G1,L1,U2❩ ⬂+[b] ❨G2,L,T2❩ & T2 ≛[S] T1 & L ≛[S,T1] L2. #S #b #H1S #H2S #H3S #G1 #G2 #L1 #L2 #U1 #T1 #H @(fqup_ind_dx … H) -G1 -L1 -U1 [ #G1 #L1 #U1 #H #U2 #HU21 elim (teqg_fqu_trans … H … HU21) -U1 // /3 width=5 by fqu_fqup, ex3_2_intro/ @@ -152,9 +152,9 @@ qed-. lemma teqg_fqus_trans (S) (b): reflexive … S → symmetric … S → Transitive … S → - ∀G1,G2,L1,L2,U1,T1. ❪G1,L1,U1❫ ⬂*[b] ❪G2,L2,T1❫ → + ∀G1,G2,L1,L2,U1,T1. ❨G1,L1,U1❩ ⬂*[b] ❨G2,L2,T1❩ → ∀U2. U2 ≛[S] U1 → - ∃∃L,T2. ❪G1,L1,U2❫ ⬂*[b] ❪G2,L,T2❫ & T2 ≛[S] T1 & L ≛[S,T1] L2. + ∃∃L,T2. ❨G1,L1,U2❩ ⬂*[b] ❨G2,L,T2❩ & T2 ≛[S] T1 & L ≛[S,T1] L2. #S #b #H1S #H2S #H3S #G1 #G2 #L1 #L2 #U1 #T1 #H #U2 #HU21 elim(fqus_inv_fqup … H) -H [ #H elim (teqg_fqup_trans … H … HU21) -U1 /3 width=5 by fqup_fqus, ex3_2_intro/ | * #HG #HL #HT destruct /3 width=5 by reqg_refl, ex3_2_intro/ @@ -164,9 +164,9 @@ qed-. (* Basic_2A1: was just: lleq_fqus_trans *) lemma reqg_fqus_trans (S) (b): reflexive … S → symmetric … S → Transitive … S → - ∀G1,G2,L2,K2,T,U. ❪G1,L2,T❫ ⬂*[b] ❪G2,K2,U❫ → + ∀G1,G2,L2,K2,T,U. ❨G1,L2,T❩ ⬂*[b] ❨G2,K2,U❩ → ∀L1. L1 ≛[S,T] L2 → - ∃∃K1,U0. ❪G1,L1,T❫ ⬂*[b] ❪G2,K1,U0❫ & U0 ≛[S] U & K1 ≛[S,U] K2. + ∃∃K1,U0. ❨G1,L1,T❩ ⬂*[b] ❨G2,K1,U0❩ & U0 ≛[S] U & K1 ≛[S,U] K2. #S #b #H1S #H2S #H3S #G1 #G2 #L2 #K2 #T #U #H #L1 #HL12 elim(fqus_inv_fqup … H) -H [ #H elim (reqg_fqup_trans … H … HL12) -L2 /3 width=5 by fqup_fqus, ex3_2_intro/ | * #HG #HL #HT destruct /3 width=5 by teqg_refl, ex3_2_intro/ diff --git a/matita/matita/contribs/lambdadelta/static_2/static/reqg_reqg.ma b/matita/matita/contribs/lambdadelta/static_2/static/reqg_reqg.ma index c5ad7a7b7..63bdf8a99 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/reqg_reqg.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/reqg_reqg.ma @@ -22,8 +22,8 @@ include "static_2/static/reqg_length.ma". lemma frees_reqg_conf (S): reflexive … S → - ∀f,L1,T. L1 ⊢ 𝐅+❪T❫ ≘ f → - ∀L2. L1 ≛[S,T] L2 → L2 ⊢ 𝐅+❪T❫ ≘ f. + ∀f,L1,T. L1 ⊢ 𝐅+❨T❩ ≘ f → + ∀L2. L1 ≛[S,T] L2 → L2 ⊢ 𝐅+❨T❩ ≘ f. /3 width=7 by frees_seqg_conf, rex_inv_frees/ qed-. (* Properties with free variables inclusion for restricted closures *******) diff --git a/matita/matita/contribs/lambdadelta/static_2/static/reqx.ma b/matita/matita/contribs/lambdadelta/static_2/static/reqx.ma index 8b7badaf9..e89532979 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/reqx.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/reqx.ma @@ -32,8 +32,8 @@ interpretation (* Basic properties ***********************************************************) (* lemma frees_teqx_conf_reqx: - ∀f,L1,T1. L1 ⊢ 𝐅+❪T1❫ ≘ f → ∀T2. T1 ≛ T2 → - ∀L2. L1 ≛[f] L2 → L2 ⊢ 𝐅+❪T2❫ ≘ f. + ∀f,L1,T1. L1 ⊢ 𝐅+❨T1❩ ≘ f → ∀T2. T1 ≛ T2 → + ∀L2. L1 ≛[f] L2 → L2 ⊢ 𝐅+❨T2❩ ≘ f. #f #L1 #T1 #H elim H -f -L1 -T1 [ #f #L1 #s1 #Hf #X #H1 #L2 #_ elim (teqx_inv_sort1 … H1) -H1 #s2 #H destruct @@ -67,13 +67,13 @@ lemma frees_teqx_conf_reqx: qed-. lemma frees_teqx_conf: - ∀f,L,T1. L ⊢ 𝐅+❪T1❫ ≘ f → - ∀T2. T1 ≛ T2 → L ⊢ 𝐅+❪T2❫ ≘ f. + ∀f,L,T1. L ⊢ 𝐅+❨T1❩ ≘ f → + ∀T2. T1 ≛ T2 → L ⊢ 𝐅+❨T2❩ ≘ f. /4 width=7 by frees_teqx_conf_reqx, sex_refl, ext2_refl/ qed-. lemma frees_reqx_conf: - ∀f,L1,T. L1 ⊢ 𝐅+❪T❫ ≘ f → - ∀L2. L1 ≛[f] L2 → L2 ⊢ 𝐅+❪T❫ ≘ f. + ∀f,L1,T. L1 ⊢ 𝐅+❨T❩ ≘ f → + ∀L2. L1 ≛[f] L2 → L2 ⊢ 𝐅+❨T❩ ≘ f. /2 width=7 by frees_teqx_conf_reqx, teqx_refl/ qed-. lemma teqx_rex_conf_sn (R): @@ -110,7 +110,7 @@ lemma reqx_pair: /2 width=1 by rex_pair/ qed. lemma reqx_unit: - ∀f,I,L1,L2. 𝐈❪f❫ → L1 ≛[f] L2 → + ∀f,I,L1,L2. 𝐈❨f❩ → L1 ≛[f] L2 → L1.ⓤ[I] ≛[#0] L2.ⓤ[I]. /2 width=3 by rex_unit/ qed. @@ -147,7 +147,7 @@ lemma reqx_inv_zero: ∀Y1,Y2. Y1 ≛[#0] Y2 → ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ | ∃∃I,L1,L2,V1,V2. L1 ≛[V1] L2 & V1 ≛ V2 & Y1 = L1.ⓑ[I]V1 & Y2 = L2.ⓑ[I]V2 - | ∃∃f,I,L1,L2. 𝐈❪f❫ & L1 ≛[f] L2 & Y1 = L1.ⓤ[I] & Y2 = L2.ⓤ[I]. + | ∃∃f,I,L1,L2. 𝐈❨f❩ & L1 ≛[f] L2 & Y1 = L1.ⓤ[I] & Y2 = L2.ⓤ[I]. #Y1 #Y2 #H elim (rex_inv_zero … H) -H * /3 width=9 by or3_intro0, or3_intro1, or3_intro2, ex4_5_intro, ex4_4_intro, conj/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rex.ma b/matita/matita/contribs/lambdadelta/static_2/static/rex.ma index 45e9028d7..f48b75f57 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/rex.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/rex.ma @@ -25,7 +25,7 @@ include "static_2/static/frees.ma". (* GENERIC EXTENSION ON REFERRED ENTRIES OF A CONTEXT-SENSITIVE REALTION ****) definition rex (R) (T): relation lenv ≝ - λL1,L2. ∃∃f. L1 ⊢ 𝐅+❪T❫ ≘ f & L1 ⪤[cext2 R,cfull,f] L2. + λL1,L2. ∃∃f. L1 ⊢ 𝐅+❨T❩ ≘ f & L1 ⪤[cext2 R,cfull,f] L2. interpretation "generic extension on referred entries (local environment)" @@ -90,7 +90,7 @@ lemma rex_inv_zero (R): ∀Y1,Y2. Y1 ⪤[R,#0] Y2 → ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ | ∃∃I,L1,L2,V1,V2. L1 ⪤[R,V1] L2 & R L1 V1 V2 & Y1 = L1.ⓑ[I]V1 & Y2 = L2.ⓑ[I]V2 - | ∃∃f,I,L1,L2. 𝐈❪f❫ & L1 ⪤[cext2 R,cfull,f] L2 & Y1 = L1.ⓤ[I] & Y2 = L2.ⓤ[I]. + | ∃∃f,I,L1,L2. 𝐈❨f❩ & L1 ⪤[cext2 R,cfull,f] L2 & Y1 = L1.ⓤ[I] & Y2 = L2.ⓤ[I]. #R * [ | #Y1 * #I1 [ | #X ] ] #Y2 * #f #H1 #H2 [ lapply (sex_inv_atom1 … H2) -H2 /3 width=1 by or3_intro0, conj/ | elim (frees_inv_unit … H1) -H1 #g #HX #H destruct @@ -188,7 +188,7 @@ qed-. lemma rex_inv_zero_unit_sn (R): ∀I,K1,L2. K1.ⓤ[I] ⪤[R,#0] L2 → - ∃∃f,K2. 𝐈❪f❫ & K1 ⪤[cext2 R,cfull,f] K2 & L2 = K2.ⓤ[I]. + ∃∃f,K2. 𝐈❨f❩ & K1 ⪤[cext2 R,cfull,f] K2 & L2 = K2.ⓤ[I]. #R #I #K1 #L2 #H elim (rex_inv_zero … H) -H * [ #H destruct | #Z #Y1 #Y2 #X1 #X2 #_ #_ #H destruct @@ -198,7 +198,7 @@ qed-. lemma rex_inv_zero_unit_dx (R): ∀I,L1,K2. L1 ⪤[R,#0] K2.ⓤ[I] → - ∃∃f,K1. 𝐈❪f❫ & K1 ⪤[cext2 R,cfull,f] K2 & L1 = K1.ⓤ[I]. + ∃∃f,K1. 𝐈❨f❩ & K1 ⪤[cext2 R,cfull,f] K2 & L1 = K1.ⓤ[I]. #R #I #L1 #K2 #H elim (rex_inv_zero … H) -H * [ #_ #H destruct | #Z #Y1 #Y2 #X1 #X2 #_ #_ #_ #H destruct @@ -301,7 +301,7 @@ lemma rex_pair (R): qed. lemma rex_unit (R): - ∀f,I,L1,L2. 𝐈❪f❫ → L1 ⪤[cext2 R,cfull,f] L2 → + ∀f,I,L1,L2. 𝐈❨f❩ → L1 ⪤[cext2 R,cfull,f] L2 → L1.ⓤ[I] ⪤[R,#0] L2.ⓤ[I]. /4 width=3 by frees_unit, sex_next, ext2_unit, ex2_intro/ qed. @@ -333,8 +333,8 @@ qed-. lemma rex_isid (R1) (R2): ∀L1,L2,T1,T2. - (∀f. L1 ⊢ 𝐅+❪T1❫ ≘ f → 𝐈❪f❫) → - (∀f. 𝐈❪f❫ → L1 ⊢ 𝐅+❪T2❫ ≘ f) → + (∀f. L1 ⊢ 𝐅+❨T1❩ ≘ f → 𝐈❨f❩) → + (∀f. 𝐈❨f❩ → L1 ⊢ 𝐅+❨T2❩ ≘ f) → L1 ⪤[R1,T1] L2 → L1 ⪤[R2,T2] L2. #R1 #R2 #L1 #L2 #T1 #T2 #H1 #H2 * /4 width=7 by sex_co_isid, ex2_intro/ diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rex_drops.ma b/matita/matita/contribs/lambdadelta/static_2/static/rex_drops.ma index b6374ac0b..d7ed815cd 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/rex_drops.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/rex_drops.ma @@ -27,24 +27,24 @@ definition f_dedropable_sn: definition f_dropable_sn: predicate (relation3 lenv term term) ≝ λR. - ∀b,f,L1,K1. ⇩*[b,f] L1 ≘ K1 → 𝐔❪f❫ → + ∀b,f,L1,K1. ⇩*[b,f] L1 ≘ K1 → 𝐔❨f❩ → ∀L2,U. L1 ⪤[R,U] L2 → ∀T. ⇧*[f] T ≘ U → ∃∃K2. K1 ⪤[R,T] K2 & ⇩*[b,f] L2 ≘ K2. definition f_dropable_dx: predicate (relation3 lenv term term) ≝ λR. ∀L1,L2,U. L1 ⪤[R,U] L2 → - ∀b,f,K2. ⇩*[b,f] L2 ≘ K2 → 𝐔❪f❫ → ∀T. ⇧*[f] T ≘ U → + ∀b,f,K2. ⇩*[b,f] L2 ≘ K2 → 𝐔❨f❩ → ∀T. ⇧*[f] T ≘ U → ∃∃K1. ⇩*[b,f] L1 ≘ K1 & K1 ⪤[R,T] K2. definition f_transitive_next: relation3 … ≝ λR1,R2,R3. - ∀f,L,T. L ⊢ 𝐅+❪T❫ ≘ f → + ∀f,L,T. L ⊢ 𝐅+❨T❩ ≘ f → ∀g,I,K,i. ⇩[i] L ≘ K.ⓘ[I] → ↑g = ⫰*[i] f → R_pw_transitive_sex (cext2 R1) (cext2 R2) (cext2 R3) (cext2 R1) cfull g K I. definition f_confluent1_next: relation2 … ≝ λR1,R2. - ∀f,L,T. L ⊢ 𝐅+❪T❫ ≘ f → + ∀f,L,T. L ⊢ 𝐅+❨T❩ ≘ f → ∀g,I,K,i. ⇩[i] L ≘ K.ⓘ[I] → ↑g = ⫰*[i] f → R_pw_confluent1_sex (cext2 R1) (cext2 R1) (cext2 R2) cfull g K I. @@ -112,7 +112,7 @@ qed-. (* Basic_2A1: uses: llpx_sn_inv_lift_O *) lemma rex_inv_lifts_bi (R): - ∀L1,L2,U. L1 ⪤[R,U] L2 → ∀b,f. 𝐔❪f❫ → + ∀L1,L2,U. L1 ⪤[R,U] L2 → ∀b,f. 𝐔❨f❩ → ∀K1,K2. ⇩*[b,f] L1 ≘ K1 → ⇩*[b,f] L2 ≘ K2 → ∀T. ⇧*[f] T ≘ U → K1 ⪤[R,T] K2. #R #L1 #L2 #U #HL12 #b #f #Hf #K1 #K2 #HLK1 #HLK2 #T #HTU @@ -149,7 +149,7 @@ qed-. lemma rex_inv_lref_unit_sn (R): ∀L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K1. ⇩[i] L1 ≘ K1.ⓤ[I] → - ∃∃f,K2. ⇩[i] L2 ≘ K2.ⓤ[I] & K1 ⪤[cext2 R,cfull,f] K2 & 𝐈❪f❫. + ∃∃f,K2. ⇩[i] L2 ≘ K2.ⓤ[I] & K1 ⪤[cext2 R,cfull,f] K2 & 𝐈❨f❩. #R #L1 #L2 #i #HL12 #I #K1 #HLK1 elim (rex_dropable_sn … HLK1 … HL12 (#0)) -HLK1 -HL12 // #Y #HY #HLK2 elim (rex_inv_zero_unit_sn … HY) -HY #f #K2 #Hf #HK12 #H destruct /2 width=5 by ex3_2_intro/ @@ -157,7 +157,7 @@ qed-. lemma rex_inv_lref_unit_dx (R): ∀L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K2. ⇩[i] L2 ≘ K2.ⓤ[I] → - ∃∃f,K1. ⇩[i] L1 ≘ K1.ⓤ[I] & K1 ⪤[cext2 R,cfull,f] K2 & 𝐈❪f❫. + ∃∃f,K1. ⇩[i] L1 ≘ K1.ⓤ[I] & K1 ⪤[cext2 R,cfull,f] K2 & 𝐈❨f❩. #R #L1 #L2 #i #HL12 #I #K2 #HLK2 elim (rex_dropable_dx … HL12 … HLK2 … (#0)) -HLK2 -HL12 // #Y #HLK1 #HY elim (rex_inv_zero_unit_dx … HY) -HY #f #K2 #Hf #HK12 #H destruct /2 width=5 by ex3_2_intro/ diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rex_fsle.ma b/matita/matita/contribs/lambdadelta/static_2/static/rex_fsle.ma index 8e1fbedef..e4ea6e3d0 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/rex_fsle.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/rex_fsle.ma @@ -20,21 +20,21 @@ include "static_2/static/rex_rex.ma". (* GENERIC EXTENSION ON REFERRED ENTRIES OF A CONTEXT-SENSITIVE REALTION ****) definition R_fsge_compatible: predicate (relation3 …) ≝ λRN. - ∀L,T1,T2. RN L T1 T2 → ❪L,T2❫ ⊆ ❪L,T1❫. + ∀L,T1,T2. RN L T1 T2 → ❨L,T2❩ ⊆ ❨L,T1❩. definition rex_fsge_compatible: predicate (relation3 …) ≝ λRN. - ∀L1,L2,T. L1 ⪤[RN,T] L2 → ❪L2,T❫ ⊆ ❪L1,T❫. + ∀L1,L2,T. L1 ⪤[RN,T] L2 → ❨L2,T❩ ⊆ ❨L1,T❩. definition rex_fsle_compatible: predicate (relation3 …) ≝ λRN. - ∀L1,L2,T. L1 ⪤[RN,T] L2 → ❪L1,T❫ ⊆ ❪L2,T❫. + ∀L1,L2,T. L1 ⪤[RN,T] L2 → ❨L1,T❩ ⊆ ❨L2,T❩. (* Basic inversions with free variables inclusion for restricted closures ***) lemma frees_sex_conf_fsge (R): rex_fsge_compatible R → - ∀L1,T,f1. L1 ⊢ 𝐅+❪T❫ ≘ f1 → + ∀L1,T,f1. L1 ⊢ 𝐅+❨T❩ ≘ f1 → ∀L2. L1 ⪤[cext2 R,cfull,f1] L2 → - ∃∃f2. L2 ⊢ 𝐅+❪T❫ ≘ f2 & f2 ⊆ f1. + ∃∃f2. L2 ⊢ 𝐅+❨T❩ ≘ f2 & f2 ⊆ f1. #R #HR #L1 #T #f1 #Hf1 #L2 #H1L lapply (HR L1 L2 T ?) /2 width=3 by ex2_intro/ #H2L @(fsle_frees_trans_eq … H2L … Hf1) /3 width=4 by sex_fwd_length, sym_eq/ @@ -42,9 +42,9 @@ qed-. lemma frees_sex_conf_fsle (R): rex_fsle_compatible R → - ∀L1,T,f1. L1 ⊢ 𝐅+❪T❫ ≘ f1 → + ∀L1,T,f1. L1 ⊢ 𝐅+❨T❩ ≘ f1 → ∀L2. L1 ⪤[cext2 R,cfull,f1] L2 → - ∃∃f2. L2 ⊢ 𝐅+❪T❫ ≘ f2 & f1 ⊆ f2. + ∃∃f2. L2 ⊢ 𝐅+❨T❩ ≘ f2 & f1 ⊆ f2. #R #HR #L1 #T #f1 #Hf1 #L2 #H1L lapply (HR L1 L2 T ?) /2 width=3 by ex2_intro/ #H2L @(fsle_frees_conf_eq … H2L … Hf1) /3 width=4 by sex_fwd_length, sym_eq/ @@ -54,7 +54,7 @@ qed-. (* Note: we just need lveq_inv_refl: ∀L, n1, n2. L ≋ⓧ*[n1, n2] L → ∧∧ 0 = n1 & 0 = n2 *) lemma fsge_rex_trans (R): - ∀L1,T1,T2. ❪L1,T1❫ ⊆ ❪L1,T2❫ → + ∀L1,T1,T2. ❨L1,T1❩ ⊆ ❨L1,T2❩ → ∀L2. L1 ⪤[R,T2] L2 → L1 ⪤[R,T1] L2. #R #L1 #T1 #T2 * #n1 #n2 #f1 #f2 #Hf1 #Hf2 #Hn #Hf #L2 #HL12 elim (lveq_inj_length … Hn ?) // #H1 #H2 destruct diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rex_rex.ma b/matita/matita/contribs/lambdadelta/static_2/static/rex_rex.ma index e3d0aee79..5aaee3689 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/rex_rex.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/rex_rex.ma @@ -22,7 +22,7 @@ include "static_2/static/rex.ma". lemma rex_inv_frees (R): ∀L1,L2,T. L1 ⪤[R,T] L2 → - ∀f. L1 ⊢ 𝐅+❪T❫ ≘ f → L1 ⪤[cext2 R,cfull,f] L2. + ∀f. L1 ⊢ 𝐅+❨T❩ ≘ f → L1 ⪤[cext2 R,cfull,f] L2. #R #L1 #L2 #T * /3 width=6 by frees_mono, sex_eq_repl_back/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/teqo_simple.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/teqo_simple.ma index a5652b1b7..3649a88c3 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/teqo_simple.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/teqo_simple.ma @@ -20,12 +20,12 @@ include "static_2/syntax/teqo.ma". (* Properies with simple (neutral) terms ************************************) (* Basic_2A1: was: simple_tsts_repl_dx *) -lemma simple_teqo_repl_dx: ∀T1,T2. T1 ~ T2 → 𝐒❪T1❫ → 𝐒❪T2❫. +lemma simple_teqo_repl_dx: ∀T1,T2. T1 ~ T2 → 𝐒❨T1❩ → 𝐒❨T2❩. #T1 #T2 * -T1 -T2 // #I #V1 #V2 #T1 #T2 #H elim (simple_inv_pair … H) -H #J #H destruct // qed-. (* Basic_2A1: was: simple_tsts_repl_sn *) -lemma simple_teqo_repl_sn: ∀T1,T2. T1 ~ T2 → 𝐒❪T2❫ → 𝐒❪T1❫. +lemma simple_teqo_repl_sn: ∀T1,T2. T1 ~ T2 → 𝐒❨T2❩ → 𝐒❨T1❩. /3 width=3 by simple_teqo_repl_dx, teqo_sym/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/teqo_simple_vector.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/teqo_simple_vector.ma index ce3229ab5..cded6e6e7 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/teqo_simple_vector.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/teqo_simple_vector.ma @@ -22,7 +22,7 @@ include "static_2/syntax/teqo_simple.ma". (* Basic_1: was only: iso_flats_lref_bind_false iso_flats_flat_bind_false *) (* Basic_2A1: was: tsts_inv_bind_applv_simple *) lemma teqo_inv_applv_bind_simple (p) (I): - ∀Vs,V2,T1,T2. ⒶVs.T1 ~ ⓑ[p,I]V2.T2 → 𝐒❪T1❫ → ⊥. + ∀Vs,V2,T1,T2. ⒶVs.T1 ~ ⓑ[p,I]V2.T2 → 𝐒❨T1❩ → ⊥. #p #I #Vs #V2 #T1 #T2 #H elim (teqo_inv_pair2 … H) -H #V0 #T0 elim Vs -Vs normalize [ #H destruct #H /2 width=5 by simple_inv_bind/ diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/teqw_simple.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/teqw_simple.ma index 9132df1c1..6762ce16b 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/teqw_simple.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/teqw_simple.ma @@ -20,7 +20,7 @@ include "static_2/syntax/teqw.ma". (* Properties with simple terms *********************************************) lemma teqw_simple_trans: - ∀T1,T2. T1 ≃ T2 → 𝐒❪T1❫ → 𝐒❪T2❫. + ∀T1,T2. T1 ≃ T2 → 𝐒❨T1❩ → 𝐒❨T2❩. #T1 #T2 * -T1 -T2 [4,5: #p #V1 #V2 #T1 #T2 [ #_ ] #H elim (simple_inv_bind … H) diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/term_simple.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/term_simple.ma index ca01552ea..3cdd073c7 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/term_simple.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/term_simple.ma @@ -27,24 +27,24 @@ interpretation "simple (term)" 'Simple T = (simple T). (* Basic inversion lemmas ***************************************************) -fact simple_inv_bind_aux: ∀T. 𝐒❪T❫ → ∀p,J,W,U. T = ⓑ[p,J]W.U → ⊥. +fact simple_inv_bind_aux: ∀T. 𝐒❨T❩ → ∀p,J,W,U. T = ⓑ[p,J]W.U → ⊥. #T * -T [ #I #p #J #W #U #H destruct | #I #V #T #a #J #W #U #H destruct ] qed-. -lemma simple_inv_bind: ∀p,I,V,T. 𝐒❪ⓑ[p,I] V. T❫ → ⊥. +lemma simple_inv_bind: ∀p,I,V,T. 𝐒❨ⓑ[p,I] V. T❩ → ⊥. /2 width=7 by simple_inv_bind_aux/ qed-. -lemma simple_inv_pair: ∀I,V,T. 𝐒❪②[I]V.T❫ → ∃J. I = Flat2 J. +lemma simple_inv_pair: ∀I,V,T. 𝐒❨②[I]V.T❩ → ∃J. I = Flat2 J. * /2 width=2 by ex_intro/ #p #I #V #T #H elim (simple_inv_bind … H) qed-. (* Basic properties *********************************************************) -lemma simple_dec_ex (X): ∨∨ 𝐒❪X❫ | ∃∃p,I,T,U. X = ⓑ[p,I]T.U. +lemma simple_dec_ex (X): ∨∨ 𝐒❨X❩ | ∃∃p,I,T,U. X = ⓑ[p,I]T.U. * [ /2 width=1 by simple_atom, or_introl/ ] * [| /2 width=1 by simple_flat, or_introl/ ] /3 width=5 by ex1_4_intro, or_intror/ diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/term_vector.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/term_vector.ma index 82581af61..8be2b3ae7 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/term_vector.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/term_vector.ma @@ -37,6 +37,6 @@ lemma applv_cons: ∀V,Vs,T. ⒶV⨮Vs.T = ⓐV.ⒶVs.T. (* Properties with simple terms *********************************************) -lemma applv_simple: ∀T,Vs. 𝐒❪T❫ → 𝐒❪ⒶVs.T❫. +lemma applv_simple: ∀T,Vs. 𝐒❨T❩ → 𝐒❨ⒶVs.T❩. #T * // qed. diff --git a/matita/matita/contribs/lambdadelta/static_2/web/static_2_src.tbl b/matita/matita/contribs/lambdadelta/static_2/web/static_2_src.tbl index 74f0e6f20..df5a5a21e 100644 --- a/matita/matita/contribs/lambdadelta/static_2/web/static_2_src.tbl +++ b/matita/matita/contribs/lambdadelta/static_2/web/static_2_src.tbl @@ -21,17 +21,17 @@ table { [ { "static typing" * } { [ { "generic reducibility" * } { [ [ "restricted refinement for lenvs" ] "lsubc" + "( ? ⊢ ? ⫃[?] ? )" "lsubc_drops" + "lsubc_lsubr" + "lsubc_lsuba" * ] - [ [ "candidates" ] "gcp_cr" + "( ❪?,?,?❫ ϵ ⟦?⟧[?] )" "gcp_aaa" * ] + [ [ "candidates" ] "gcp_cr" + "( ❨?,?,?❩ ϵ ⟦?⟧[?] )" "gcp_aaa" * ] [ [ "computation properties" ] "gcp" *] } ] [ { "atomic arity assignment" * } { [ [ "restricted refinement for lenvs" ] "lsuba" + "( ? ⊢ ? ⫃⁝ ? )" "lsuba_drops" + "lsuba_lsubr" + "lsuba_aaa" + "lsuba_lsuba" * ] - [ [ "for terms" ] "aaa" + "( ❪?,?❫ ⊢ ? ⁝ ? )" "aaa_drops" + "aaa_fqus" + "aaa_reqg" + "aaa_feqg" + "aaa_aaa" + "aaa_dec" * ] + [ [ "for terms" ] "aaa" + "( ❨?,?❩ ⊢ ? ⁝ ? )" "aaa_drops" + "aaa_fqus" + "aaa_reqg" + "aaa_feqg" + "aaa_aaa" + "aaa_dec" * ] } ] [ { "sort-irrelevant equivalence" * } { - [ [ "for closures on referred entries" ] "feqx" + "( ❪?,?,?❫ ≅ ❪?,?,?❫ )" "feqx_feqx" * ] + [ [ "for closures on referred entries" ] "feqx" + "( ❨?,?,?❩ ≅ ❨?,?,?❩ )" "feqx_feqx" * ] [ [ "for lenvs on referred entries" ] "reqx" + "( ? ≅[?] ? )" "reqx_reqx" * ] } ] @@ -40,7 +40,7 @@ table { } ] [ { "generic equivalence" * } { - [ [ "for closures on referred entries" ] "feqg" + "( ❪?,?,?❫ ≛[?] ❪?,?,?❫ )" "feqg_length" + "feqg_fqu" + "feqg_fqup" + "feqg_fqus" + "feqg_feqg" * ] + [ [ "for closures on referred entries" ] "feqg" + "( ❨?,?,?❩ ≛[?] ❨?,?,?❩ )" "feqg_length" + "feqg_fqu" + "feqg_fqup" + "feqg_fqus" + "feqg_feqg" * ] [ [ "for lenvs on referred entries" ] "reqg" + "( ? ≛[?,?] ? )" "reqg_length" + "reqg_drops" + "reqg_fqup" + "reqg_fqus" + "reqg_reqg" * ] } ] @@ -49,9 +49,9 @@ table { } ] [ { "context-sensitive free variables" * } { - [ [ "inclusion for restricted closures" ] "fsle" + "( ❪?,?❫ ⊆ ❪?,?❫ )" "fsle_length" + "fsle_drops" + "fsle_fqup" + "fsle_fsle" * ] - [ [ "restricted refinement for lenvs" ] "lsubf" + "( ❪?,?❫ ⫃𝐅+ ❪?,?❫ )" "lsubf_lsubr" + "lsubf_frees" + "lsubf_lsubf" * ] - [ [ "for terms" ] "frees" + "( ? ⊢ 𝐅+❪?❫ ≘ ? )" "frees_append" + "frees_drops" + "frees_fqup" + "frees_frees" * ] + [ [ "inclusion for restricted closures" ] "fsle" + "( ❨?,?❩ ⊆ ❨?,?❩ )" "fsle_length" + "fsle_drops" + "fsle_fqup" + "fsle_fsle" * ] + [ [ "restricted refinement for lenvs" ] "lsubf" + "( ❨?,?❩ ⫃𝐅+ ❨?,?❩ )" "lsubf_lsubr" + "lsubf_frees" + "lsubf_lsubf" * ] + [ [ "for terms" ] "frees" + "( ? ⊢ 𝐅+❨?❩ ≘ ? )" "frees_append" + "frees_drops" + "frees_fqup" + "frees_frees" * ] } ] [ { "local environments" * } { @@ -63,8 +63,8 @@ table { class "grass" [ { "s-computation" * } { [ { "iterated structural successor" * } { - [ [ "for closures" ] "fqus" + "( ❪?,?,?❫ ⬂*[?] ❪?,?,?❫ )" + "( ❪?,?,?❫ ⬂* ❪?,?,?❫ )" "fqus_weight" + "fqus_drops" + "fqus_fqup" + "fqus_fqus" * ] - [ [ "proper for closures" ] "fqup" + "( ❪?,?,?❫ ⬂+[?] ❪?,?,?❫ )" + "( ❪?,?,?❫ ⬂+ ❪?,?,?❫ )" "fqup_weight" + "fqup_drops" + "fqup_fqup" * ] + [ [ "for closures" ] "fqus" + "( ❨?,?,?❩ ⬂*[?] ❨?,?,?❩ )" + "( ❨?,?,?❩ ⬂* ❨?,?,?❩ )" "fqus_weight" + "fqus_drops" + "fqus_fqup" + "fqus_fqus" * ] + [ [ "proper for closures" ] "fqup" + "( ❨?,?,?❩ ⬂+[?] ❨?,?,?❩ )" + "( ❨?,?,?❩ ⬂+ ❨?,?,?❩ )" "fqup_weight" + "fqup_drops" + "fqup_fqup" * ] } ] } @@ -72,8 +72,8 @@ table { class "yellow" [ { "s-transition" * } { [ { "structural successor" * } { - [ [ "for closures" ] "fquq" + "( ❪?,?,?❫ ⬂⸮[?] ❪?,?,?❫ )" + "( ❪?,?,?❫ ⬂⸮ ❪?,?,?❫ )" "fquq_length" + "fquq_weight" * ] - [ [ "proper for closures" ] "fqu" + "( ❪?,?,?❫ ⬂[?] ❪?,?,?❫ )" + "( ❪?,?,?❫ ⬂ ❪?,?,?❫ )" "fqu_length" + "fqu_weight" + "fqu_teqg" * ] + [ [ "for closures" ] "fquq" + "( ❨?,?,?❩ ⬂⸮[?] ❨?,?,?❩ )" + "( ❨?,?,?❩ ⬂⸮ ❨?,?,?❩ )" "fquq_length" + "fquq_weight" * ] + [ [ "proper for closures" ] "fqu" + "( ❨?,?,?❩ ⬂[?] ❨?,?,?❩ )" + "( ❨?,?,?❩ ⬂ ❨?,?,?❩ )" "fqu_length" + "fqu_weight" + "fqu_teqg" * ] } ] } @@ -169,7 +169,7 @@ table { ] [ { "terms" * } { [ [ "" ] "term_vector" + "( Ⓐ?.? )" * ] - [ [ "" ] "term_simple" + "( 𝐒❪?❫ )" * ] + [ [ "" ] "term_simple" + "( 𝐒❨?❩ )" * ] [ [ "" ] "term_weight" + "( ♯❨?❩ )" * ] [ [ "" ] "term" * ] }