From: Ferruccio Guidi Date: Mon, 15 Sep 2014 14:17:22 +0000 (+0000) Subject: notational change of lift, drop, and gget X-Git-Tag: make_still_working~838 X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=commitdiff_plain;h=43282d3750af8831c8100c60d75c56fdfb7ff3c9;p=helm.git notational change of lift, drop, and gget --- diff --git a/matita/matita/contribs/lambdadelta/apps_2/functional/lift.ma b/matita/matita/contribs/lambdadelta/apps_2/functional/lift.ma index 4792a7ea5..ea7409060 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/functional/lift.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/functional/lift.ma @@ -33,7 +33,7 @@ interpretation "functional relocation" 'Lift d e T = (flift d e T). (* Main properties **********************************************************) -theorem flift_lift: ∀T,d,e. ⇧[d, e] T ≡ ↑[d, e] T. +theorem flift_lift: ∀T,d,e. ⬆[d, e] T ≡ ↑[d, e] T. #T elim T -T [ * #i #d #e // elim (lt_or_eq_or_gt i d) #Hid normalize @@ -47,7 +47,7 @@ qed. (* Main inversion properties ************************************************) -theorem flift_inv_lift: ∀d,e,T1,T2. ⇧[d, e] T1 ≡ T2 → ↑[d, e] T1 = T2. +theorem flift_inv_lift: ∀d,e,T1,T2. ⬆[d, e] T1 ≡ T2 → ↑[d, e] T1 = T2. #d #e #T1 #T2 #H elim H -d -e -T1 -T2 normalize // [ #i #d #e #Hid >(tri_lt ?????? Hid) // | #i #d #e #Hid @@ -60,7 +60,7 @@ qed-. (* Derived properties *******************************************************) -lemma flift_join: ∀e1,e2,T. ⇧[e1, e2] ↑[0, e1] T ≡ ↑[0, e1 + e2] T. +lemma flift_join: ∀e1,e2,T. ⬆[e1, e2] ↑[0, e1] T ≡ ↑[0, e1 + e2] T. #e1 #e2 #T lapply (flift_lift T 0 (e1+e2)) #H elim (lift_split … H e1 e1) -H // #U #H diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/cprs.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/cprs.ma index e4c5460d0..889659759 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/cprs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/cprs.ma @@ -85,7 +85,7 @@ lemma cprs_flat_sn: ∀I,G,L,T1,T2. ⦃G, L⦄ ⊢ T1 ➡ T2 → ∀V1,V2. ⦃G, /3 width=3 by cprs_strap1, cpr_cprs, cpr_pair_sn, cpr_flat/ qed. -lemma cprs_zeta: ∀G,L,V,T1,T,T2. ⇧[0, 1] T2 ≡ T → +lemma cprs_zeta: ∀G,L,V,T1,T,T2. ⬆[0, 1] T2 ≡ T → ⦃G, L.ⓓV⦄ ⊢ T1 ➡* T → ⦃G, L⦄ ⊢ +ⓓV.T1 ➡* T2. #G #L #V #T1 #T #T2 #HT2 #H @(cprs_ind_dx … H) -T1 /3 width=3 by cprs_strap2, cpr_cprs, cpr_bind, cpr_zeta/ @@ -104,7 +104,7 @@ lemma cprs_beta_dx: ∀a,G,L,V1,V2,W1,W2,T1,T2. qed. lemma cprs_theta_dx: ∀a,G,L,V1,V,V2,W1,W2,T1,T2. - ⦃G, L⦄ ⊢ V1 ➡ V → ⇧[0, 1] V ≡ V2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ➡* T2 → + ⦃G, L⦄ ⊢ V1 ➡ V → ⬆[0, 1] V ≡ V2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ➡* T2 → ⦃G, L⦄ ⊢ W1 ➡ W2 → ⦃G, L⦄ ⊢ ⓐV1.ⓓ{a}W1.T1 ➡* ⓓ{a}W2.ⓐV2.T2. #a #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV1 #HV2 * -T2 /4 width=9 by cprs_strap1, cpr_cprs, cprs_bind_dx, cprs_flat_dx, cpr_theta/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/cprs_cprs.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/cprs_cprs.ma index 0b9d7a021..e86df253e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/cprs_cprs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/cprs_cprs.ma @@ -59,14 +59,14 @@ theorem cprs_beta: ∀a,G,L,V1,V2,W1,W2,T1,T2. qed. theorem cprs_theta_rc: ∀a,G,L,V1,V,V2,W1,W2,T1,T2. - ⦃G, L⦄ ⊢ V1 ➡ V → ⇧[0, 1] V ≡ V2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ➡* T2 → + ⦃G, L⦄ ⊢ V1 ➡ V → ⬆[0, 1] V ≡ V2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ➡* T2 → ⦃G, L⦄ ⊢ W1 ➡* W2 → ⦃G, L⦄ ⊢ ⓐV1.ⓓ{a}W1.T1 ➡* ⓓ{a}W2.ⓐV2.T2. #a #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV1 #HV2 #HT12 #H @(cprs_ind … H) -W2 /3 width=5 by cprs_trans, cprs_theta_dx, cprs_bind_dx/ qed. theorem cprs_theta: ∀a,G,L,V1,V,V2,W1,W2,T1,T2. - ⇧[0, 1] V ≡ V2 → ⦃G, L⦄ ⊢ W1 ➡* W2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ➡* T2 → + ⬆[0, 1] V ≡ V2 → ⦃G, L⦄ ⊢ W1 ➡* W2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ➡* T2 → ⦃G, L⦄ ⊢ V1 ➡* V → ⦃G, L⦄ ⊢ ⓐV1.ⓓ{a}W1.T1 ➡* ⓓ{a}W2.ⓐV2.T2. #a #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV2 #HW12 #HT12 #H @(cprs_ind_dx … H) -V1 /3 width=3 by cprs_trans, cprs_theta_rc, cprs_flat_dx/ @@ -80,7 +80,7 @@ lemma cprs_inv_appl1: ∀G,L,V1,T1,U2. ⦃G, L⦄ ⊢ ⓐV1.T1 ➡* U2 → U2 = ⓐV2. T2 | ∃∃a,W,T. ⦃G, L⦄ ⊢ T1 ➡* ⓛ{a}W.T & ⦃G, L⦄ ⊢ ⓓ{a}ⓝW.V1.T ➡* U2 - | ∃∃a,V0,V2,V,T. ⦃G, L⦄ ⊢ V1 ➡* V0 & ⇧[0,1] V0 ≡ V2 & + | ∃∃a,V0,V2,V,T. ⦃G, L⦄ ⊢ V1 ➡* V0 & ⬆[0,1] V0 ≡ V2 & ⦃G, L⦄ ⊢ T1 ➡* ⓓ{a}V.T & ⦃G, L⦄ ⊢ ⓓ{a}V.ⓐV2.T ➡* U2. #G #L #V1 #T1 #U2 #H @(cprs_ind … H) -U2 /3 width=5 by or3_intro0, ex3_2_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/cprs_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/cprs_lift.ma index 0a7775096..c36bf3cc7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/cprs_lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/cprs_lift.ma @@ -21,8 +21,8 @@ include "basic_2/computation/cprs.ma". (* Note: apparently this was missing in basic_1 *) lemma cprs_delta: ∀G,L,K,V,V2,i. - ⇩[i] L ≡ K.ⓓV → ⦃G, K⦄ ⊢ V ➡* V2 → - ∀W2. ⇧[0, i + 1] V2 ≡ W2 → ⦃G, L⦄ ⊢ #i ➡* W2. + ⬇[i] L ≡ K.ⓓV → ⦃G, K⦄ ⊢ V ➡* V2 → + ∀W2. ⬆[0, i + 1] V2 ≡ W2 → ⦃G, L⦄ ⊢ #i ➡* W2. #G #L #K #V #V2 #i #HLK #H elim H -V2 [ /3 width=6 by cpr_cprs, cpr_delta/ ] #V1 #V2 #_ #HV12 #IHV1 #W2 #HVW2 lapply (drop_fwd_drop2 … HLK) -HLK #HLK @@ -34,8 +34,8 @@ qed. (* Basic_1: was: pr3_gen_lref *) lemma cprs_inv_lref1: ∀G,L,T2,i. ⦃G, L⦄ ⊢ #i ➡* T2 → T2 = #i ∨ - ∃∃K,V1,T1. ⇩[i] L ≡ K.ⓓV1 & ⦃G, K⦄ ⊢ V1 ➡* T1 & - ⇧[0, i + 1] T1 ≡ T2. + ∃∃K,V1,T1. ⬇[i] L ≡ K.ⓓV1 & ⦃G, K⦄ ⊢ V1 ➡* T1 & + ⬆[0, i + 1] T1 ≡ T2. #G #L #T2 #i #H @(cprs_ind … H) -T2 /2 width=1 by or_introl/ #T #T2 #_ #HT2 * [ #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs.ma index 588208177..2f316a737 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs.ma @@ -102,7 +102,7 @@ lemma cpxs_pair_sn: ∀h,g,I,G,L,V1,V2. ⦃G, L⦄ ⊢ V1 ➡*[h, g] V2 → /3 width=3 by cpxs_strap1, cpx_pair_sn/ qed. -lemma cpxs_zeta: ∀h,g,G,L,V,T1,T,T2. ⇧[0, 1] T2 ≡ T → +lemma cpxs_zeta: ∀h,g,G,L,V,T1,T,T2. ⬆[0, 1] T2 ≡ T → ⦃G, L.ⓓV⦄ ⊢ T1 ➡*[h, g] T → ⦃G, L⦄ ⊢ +ⓓV.T1 ➡*[h, g] T2. #h #g #G #L #V #T1 #T #T2 #HT2 #H @(cpxs_ind_dx … H) -T1 /3 width=3 by cpxs_strap2, cpx_cpxs, cpx_bind, cpx_zeta/ @@ -128,7 +128,7 @@ lemma cpxs_beta_dx: ∀h,g,a,G,L,V1,V2,W1,W2,T1,T2. qed. lemma cpxs_theta_dx: ∀h,g,a,G,L,V1,V,V2,W1,W2,T1,T2. - ⦃G, L⦄ ⊢ V1 ➡[h, g] V → ⇧[0, 1] V ≡ V2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ➡*[h, g] T2 → + ⦃G, L⦄ ⊢ V1 ➡[h, g] V → ⬆[0, 1] V ≡ V2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ➡*[h, g] T2 → ⦃G, L⦄ ⊢ W1 ➡[h, g] W2 → ⦃G, L⦄ ⊢ ⓐV1.ⓓ{a}W1.T1 ➡*[h, g] ⓓ{a}W2.ⓐV2.T2. #h #g #a #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV1 #HV2 * -T2 /4 width=9 by cpx_cpxs, cpxs_strap1, cpxs_bind_dx, cpxs_flat_dx, cpx_theta/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs_cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs_cpxs.ma index f5c200630..6f8e0ffcb 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs_cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs_cpxs.ma @@ -51,7 +51,7 @@ theorem cpxs_beta: ∀h,g,a,G,L,V1,V2,W1,W2,T1,T2. qed. theorem cpxs_theta_rc: ∀h,g,a,G,L,V1,V,V2,W1,W2,T1,T2. - ⦃G, L⦄ ⊢ V1 ➡[h, g] V → ⇧[0, 1] V ≡ V2 → + ⦃G, L⦄ ⊢ V1 ➡[h, g] V → ⬆[0, 1] V ≡ V2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ➡*[h, g] T2 → ⦃G, L⦄ ⊢ W1 ➡*[h, g] W2 → ⦃G, L⦄ ⊢ ⓐV1.ⓓ{a}W1.T1 ➡*[h, g] ⓓ{a}W2.ⓐV2.T2. #h #g #a #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV1 #HV2 #HT12 #H @(cpxs_ind … H) -W2 @@ -59,7 +59,7 @@ theorem cpxs_theta_rc: ∀h,g,a,G,L,V1,V,V2,W1,W2,T1,T2. qed. theorem cpxs_theta: ∀h,g,a,G,L,V1,V,V2,W1,W2,T1,T2. - ⇧[0, 1] V ≡ V2 → ⦃G, L⦄ ⊢ W1 ➡*[h, g] W2 → + ⬆[0, 1] V ≡ V2 → ⦃G, L⦄ ⊢ W1 ➡*[h, g] W2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ➡*[h, g] T2 → ⦃G, L⦄ ⊢ V1 ➡*[h, g] V → ⦃G, L⦄ ⊢ ⓐV1.ⓓ{a}W1.T1 ➡*[h, g] ⓓ{a}W2.ⓐV2.T2. #h #g #a #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV2 #HW12 #HT12 #H @(TC_ind_dx … V1 H) -V1 @@ -72,7 +72,7 @@ lemma cpxs_inv_appl1: ∀h,g,G,L,V1,T1,U2. ⦃G, L⦄ ⊢ ⓐV1.T1 ➡*[h, g] U2 ∨∨ ∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ➡*[h, g] V2 & ⦃G, L⦄ ⊢ T1 ➡*[h, g] T2 & U2 = ⓐV2. T2 | ∃∃a,W,T. ⦃G, L⦄ ⊢ T1 ➡*[h, g] ⓛ{a}W.T & ⦃G, L⦄ ⊢ ⓓ{a}ⓝW.V1.T ➡*[h, g] U2 - | ∃∃a,V0,V2,V,T. ⦃G, L⦄ ⊢ V1 ➡*[h, g] V0 & ⇧[0,1] V0 ≡ V2 & + | ∃∃a,V0,V2,V,T. ⦃G, L⦄ ⊢ V1 ➡*[h, g] V0 & ⬆[0,1] V0 ≡ V2 & ⦃G, L⦄ ⊢ T1 ➡*[h, g] ⓓ{a}V.T & ⦃G, L⦄ ⊢ ⓓ{a}V.ⓐV2.T ➡*[h, g] U2. #h #g #G #L #V1 #T1 #U2 #H @(cpxs_ind … H) -U2 [ /3 width=5 by or3_intro0, ex3_2_intro/ ] #U #U2 #_ #HU2 * * diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs_lift.ma index 6b4fddb88..de80cace1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs_lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs_lift.ma @@ -21,8 +21,8 @@ include "basic_2/computation/cpxs.ma". (* Advanced properties ******************************************************) lemma cpxs_delta: ∀h,g,I,G,L,K,V,V2,i. - ⇩[i] L ≡ K.ⓑ{I}V → ⦃G, K⦄ ⊢ V ➡*[h, g] V2 → - ∀W2. ⇧[0, i+1] V2 ≡ W2 → ⦃G, L⦄ ⊢ #i ➡*[h, g] W2. + ⬇[i] L ≡ K.ⓑ{I}V → ⦃G, K⦄ ⊢ V ➡*[h, g] V2 → + ∀W2. ⬆[0, i+1] V2 ≡ W2 → ⦃G, L⦄ ⊢ #i ➡*[h, g] W2. #h #g #I #G #L #K #V #V2 #i #HLK #H elim H -V2 [ /3 width=9 by cpx_cpxs, cpx_delta/ | #V1 lapply (drop_fwd_drop2 … HLK) -HLK @@ -52,8 +52,8 @@ qed. lemma cpxs_inv_lref1: ∀h,g,G,L,T2,i. ⦃G, L⦄ ⊢ #i ➡*[h, g] T2 → T2 = #i ∨ - ∃∃I,K,V1,T1. ⇩[i] L ≡ K.ⓑ{I}V1 & ⦃G, K⦄ ⊢ V1 ➡*[h, g] T1 & - ⇧[0, i+1] T1 ≡ T2. + ∃∃I,K,V1,T1. ⬇[i] L ≡ K.ⓑ{I}V1 & ⦃G, K⦄ ⊢ V1 ➡*[h, g] T1 & + ⬆[0, i+1] T1 ≡ T2. #h #g #G #L #T2 #i #H @(cpxs_ind … H) -T2 /2 width=1 by or_introl/ #T #T2 #_ #HT2 * [ #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs_tsts.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs_tsts.ma index b1d0f1116..2991481d9 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs_tsts.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs_tsts.ma @@ -56,8 +56,8 @@ elim (cpxs_inv_appl1 … H) -H * qed-. (* Note: probably this is an inversion lemma *) -lemma cpxs_fwd_delta: ∀h,g,I,G,L,K,V1,i. ⇩[i] L ≡ K.ⓑ{I}V1 → - ∀V2. ⇧[0, i + 1] V1 ≡ V2 → +lemma cpxs_fwd_delta: ∀h,g,I,G,L,K,V1,i. ⬇[i] L ≡ K.ⓑ{I}V1 → + ∀V2. ⬆[0, i + 1] V1 ≡ V2 → ∀U. ⦃G, L⦄ ⊢ #i ➡*[h, g] U → #i ≂ U ∨ ⦃G, L⦄ ⊢ V2 ➡*[h, g] U. #h #g #I #G #L #K #V1 #i #HLK #V2 #HV12 #U #H @@ -68,7 +68,7 @@ lapply (drop_mono … HLK0 … HLK) -HLK0 #H destruct qed-. lemma cpxs_fwd_theta: ∀h,g,a,G,L,V1,V,T,U. ⦃G, L⦄ ⊢ ⓐV1.ⓓ{a}V.T ➡*[h, g] U → - ∀V2. ⇧[0, 1] V1 ≡ V2 → ⓐV1.ⓓ{a}V.T ≂ U ∨ + ∀V2. ⬆[0, 1] V1 ≡ V2 → ⓐV1.ⓓ{a}V.T ≂ U ∨ ⦃G, L⦄ ⊢ ⓓ{a}V.ⓐV2.T ➡*[h, g] U. #h #g #a #G #L #V1 #V #T #U #H #V2 #HV12 elim (cpxs_inv_appl1 … H) -H * diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs_tsts_vector.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs_tsts_vector.ma index bfbad281c..c26d55921 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs_tsts_vector.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/cpxs_tsts_vector.ma @@ -84,8 +84,8 @@ elim (cpxs_inv_appl1 … H) -H * ] qed-. -lemma cpxs_fwd_delta_vector: ∀h,g,I,G,L,K,V1,i. ⇩[i] L ≡ K.ⓑ{I}V1 → - ∀V2. ⇧[0, i + 1] V1 ≡ V2 → +lemma cpxs_fwd_delta_vector: ∀h,g,I,G,L,K,V1,i. ⬇[i] L ≡ K.ⓑ{I}V1 → + ∀V2. ⬆[0, i + 1] V1 ≡ V2 → ∀Vs,U. ⦃G, L⦄ ⊢ ⒶVs.#i ➡*[h, g] U → ⒶVs.#i ≂ U ∨ ⦃G, L⦄ ⊢ ⒶVs.V2 ➡*[h, g] U. #h #g #I #G #L #K #V1 #i #HLK #V2 #HV12 #Vs elim Vs -Vs /2 width=5 by cpxs_fwd_delta/ @@ -110,7 +110,7 @@ elim (cpxs_inv_appl1 … H) -H * qed-. (* Basic_1: was just: pr3_iso_appls_abbr *) -lemma cpxs_fwd_theta_vector: ∀h,g,G,L,V1s,V2s. ⇧[0, 1] V1s ≡ V2s → +lemma cpxs_fwd_theta_vector: ∀h,g,G,L,V1s,V2s. ⬆[0, 1] V1s ≡ V2s → ∀a,V,T,U. ⦃G, L⦄ ⊢ ⒶV1s.ⓓ{a}V.T ➡*[h, g] U → ⒶV1s. ⓓ{a}V. T ≂ U ∨ ⦃G, L⦄ ⊢ ⓓ{a}V.ⒶV2s.T ➡*[h, g] U. #h #g #G #L #V1s #V2s * -V1s -V2s /3 width=1 by or_intror/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/csx_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/csx_lift.ma index d12f16a77..6b2ddff83 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/csx_lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/csx_lift.ma @@ -22,7 +22,7 @@ include "basic_2/computation/csx.ma". (* Basic_1: was just: sn3_lift *) lemma csx_lift: ∀h,g,G,L2,L1,T1,s,d,e. ⦃G, L1⦄ ⊢ ⬊*[h, g] T1 → - ∀T2. ⇩[s, d, e] L2 ≡ L1 → ⇧[d, e] T1 ≡ T2 → ⦃G, L2⦄ ⊢ ⬊*[h, g] T2. + ∀T2. ⬇[s, d, e] L2 ≡ L1 → ⬆[d, e] T1 ≡ T2 → ⦃G, L2⦄ ⊢ ⬊*[h, g] T2. #h #g #G #L2 #L1 #T1 #s #d #e #H elim H -T1 #T1 #_ #IHT1 #T2 #HL21 #HT12 @csx_intro #T #HLT2 #HT2 elim (cpx_inv_lift1 … HLT2 … HL21 … HT12) -HLT2 #T0 #HT0 #HLT10 @@ -32,7 +32,7 @@ qed. (* Basic_1: was just: sn3_gen_lift *) lemma csx_inv_lift: ∀h,g,G,L2,L1,T1,s,d,e. ⦃G, L1⦄ ⊢ ⬊*[h, g] T1 → - ∀T2. ⇩[s, d, e] L1 ≡ L2 → ⇧[d, e] T2 ≡ T1 → ⦃G, L2⦄ ⊢ ⬊*[h, g] T2. + ∀T2. ⬇[s, d, e] L1 ≡ L2 → ⬆[d, e] T2 ≡ T1 → ⦃G, L2⦄ ⊢ ⬊*[h, g] T2. #h #g #G #L2 #L1 #T1 #s #d #e #H elim H -T1 #T1 #_ #IHT1 #T2 #HL12 #HT21 @csx_intro #T #HLT2 #HT2 elim (lift_total T d e) #T0 #HT0 @@ -44,7 +44,7 @@ qed. (* Advanced inversion lemmas ************************************************) (* Basic_1: was: sn3_gen_def *) -lemma csx_inv_lref_bind: ∀h,g,I,G,L,K,V,i. ⇩[i] L ≡ K.ⓑ{I}V → +lemma csx_inv_lref_bind: ∀h,g,I,G,L,K,V,i. ⬇[i] L ≡ K.ⓑ{I}V → ⦃G, L⦄ ⊢ ⬊*[h, g] #i → ⦃G, K⦄ ⊢ ⬊*[h, g] V. #h #g #I #G #L #K #V #i #HLK #Hi elim (lift_total V 0 (i+1)) @@ -54,7 +54,7 @@ qed-. (* Advanced properties ******************************************************) (* Basic_1: was just: sn3_abbr *) -lemma csx_lref_bind: ∀h,g,I,G,L,K,V,i. ⇩[i] L ≡ K.ⓑ{I}V → ⦃G, K⦄ ⊢ ⬊*[h, g] V → ⦃G, L⦄ ⊢ ⬊*[h, g] #i. +lemma csx_lref_bind: ∀h,g,I,G,L,K,V,i. ⬇[i] L ≡ K.ⓑ{I}V → ⦃G, K⦄ ⊢ ⬊*[h, g] V → ⦃G, L⦄ ⊢ ⬊*[h, g] #i. #h #g #I #G #L #K #V #i #HLK #HV @csx_intro #X #H #Hi elim (cpx_inv_lref1 … H) -H diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/csx_lpx.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/csx_lpx.ma index bd0ebff18..b87a08bb4 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/csx_lpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/csx_lpx.ma @@ -76,7 +76,7 @@ qed-. lemma csx_appl_beta: ∀h,g,a,G,L,V,W,T. ⦃G, L⦄ ⊢ ⬊*[h, g] ⓓ{a}ⓝW.V.T → ⦃G, L⦄ ⊢ ⬊*[h, g] ⓐV.ⓛ{a}W.T. /2 width=3 by csx_appl_beta_aux/ qed. -fact csx_appl_theta_aux: ∀h,g,a,G,L,U. ⦃G, L⦄ ⊢ ⬊*[h, g] U → ∀V1,V2. ⇧[0, 1] V1 ≡ V2 → +fact csx_appl_theta_aux: ∀h,g,a,G,L,U. ⦃G, L⦄ ⊢ ⬊*[h, g] U → ∀V1,V2. ⬆[0, 1] V1 ≡ V2 → ∀V,T. U = ⓓ{a}V.ⓐV2.T → ⦃G, L⦄ ⊢ ⬊*[h, g] ⓐV1.ⓓ{a}V.T. #h #g #a #G #L #X #H @(csx_ind_alt … H) -X #X #HVT #IHVT #V1 #V2 #HV12 #V #T #H destruct lapply (csx_fwd_pair_sn … HVT) #HV @@ -113,7 +113,7 @@ elim (cpx_inv_appl1 … HL) -HL * ] qed-. -lemma csx_appl_theta: ∀h,g,a,V1,V2. ⇧[0, 1] V1 ≡ V2 → +lemma csx_appl_theta: ∀h,g,a,V1,V2. ⬆[0, 1] V1 ≡ V2 → ∀G,L,V,T. ⦃G, L⦄ ⊢ ⬊*[h, g] ⓓ{a}V.ⓐV2.T → ⦃G, L⦄ ⊢ ⬊*[h, g] ⓐV1.ⓓ{a}V.T. /2 width=5 by csx_appl_theta_aux/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/csx_tsts_vector.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/csx_tsts_vector.ma index 96a008b6c..5c11070ed 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/csx_tsts_vector.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/csx_tsts_vector.ma @@ -63,8 +63,8 @@ elim (cpxs_fwd_beta_vector … H) -H #H ] qed. -lemma csx_applv_delta: ∀h,g,I,G,L,K,V1,i. ⇩[i] L ≡ K.ⓑ{I}V1 → - ∀V2. ⇧[0, i + 1] V1 ≡ V2 → +lemma csx_applv_delta: ∀h,g,I,G,L,K,V1,i. ⬇[i] L ≡ K.ⓑ{I}V1 → + ∀V2. ⬆[0, i + 1] V1 ≡ V2 → ∀Vs. ⦃G, L⦄ ⊢ ⬊*[h, g] (ⒶVs.V2) → ⦃G, L⦄ ⊢ ⬊*[h, g] (ⒶVs.#i). #h #g #I #G #L #K #V1 #i #HLK #V2 #HV12 #Vs elim Vs -Vs [ /4 width=12 by csx_inv_lift, csx_lref_bind, drop_fwd_drop2/ @@ -81,7 +81,7 @@ lemma csx_applv_delta: ∀h,g,I,G,L,K,V1,i. ⇩[i] L ≡ K.ⓑ{I}V1 → qed. (* Basic_1: was just: sn3_appls_abbr *) -lemma csx_applv_theta: ∀h,g,a,G,L,V1s,V2s. ⇧[0, 1] V1s ≡ V2s → +lemma csx_applv_theta: ∀h,g,a,G,L,V1s,V2s. ⬆[0, 1] V1s ≡ V2s → ∀V,T. ⦃G, L⦄ ⊢ ⬊*[h, g] ⓓ{a}V.ⒶV2s.T → ⦃G, L⦄ ⊢ ⬊*[h, g] ⒶV1s.ⓓ{a}V.T. #h #g #a #G #L #V1s #V2s * -V1s -V2s /2 width=1 by/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/gcp_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/gcp_aaa.ma index 3b5f84378..58a128bd8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/gcp_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/gcp_aaa.ma @@ -25,8 +25,8 @@ include "basic_2/computation/lsubc_drops.ma". (* Basic_1: was: sc3_arity_csubc *) theorem acr_aaa_csubc_lifts: ∀RR,RS,RP. gcp RR RS RP → gcr RR RS RP RP → - ∀G,L1,T,A. ⦃G, L1⦄ ⊢ T ⁝ A → ∀L0,des. ⇩*[Ⓕ, des] L0 ≡ L1 → - ∀T0. ⇧*[des] T ≡ T0 → ∀L2. G ⊢ L2 ⫃[RP] L0 → + ∀G,L1,T,A. ⦃G, L1⦄ ⊢ T ⁝ A → ∀L0,des. ⬇*[Ⓕ, des] L0 ≡ L1 → + ∀T0. ⬆*[des] T ≡ T0 → ∀L2. G ⊢ L2 ⫃[RP] L0 → ⦃G, L2, T0⦄ ϵ[RP] 〚A〛. #RR #RS #RP #H1RP #H2RP #G #L1 #T #A #H elim H -G -L1 -T -A [ #G #L #k #L0 #des #HL0 #X #H #L2 #HL20 diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/gcp_cr.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/gcp_cr.ma index a596e246d..fa040b915 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/gcp_cr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/gcp_cr.ma @@ -39,11 +39,11 @@ definition S4 ≝ λRP,C:candidate. ∀G,L,Vs. all … (RP G L) Vs → ∀k. C G L (ⒶVs.⋆k). definition S5 ≝ λC:candidate. ∀I,G,L,K,Vs,V1,V2,i. - C G L (ⒶVs.V2) → ⇧[0, i+1] V1 ≡ V2 → - ⇩[i] L ≡ K.ⓑ{I}V1 → C G L (ⒶVs.#i). + C G L (ⒶVs.V2) → ⬆[0, i+1] V1 ≡ V2 → + ⬇[i] L ≡ K.ⓑ{I}V1 → C G L (ⒶVs.#i). definition S6 ≝ λRP,C:candidate. - ∀G,L,V1s,V2s. ⇧[0, 1] V1s ≡ V2s → + ∀G,L,V1s,V2s. ⬆[0, 1] V1s ≡ V2s → ∀a,V,T. C G (L.ⓓV) (ⒶV2s.T) → RP G L V → C G L (ⒶV1s.ⓓ{a}V.T). definition S7 ≝ λC:candidate. @@ -63,7 +63,7 @@ record gcr (RR:relation4 genv lenv term term) (RS:relation term) (RP,C:candidate (* the functional construction for candidates *) definition cfun: candidate → candidate → candidate ≝ λC1,C2,G,K,T. ∀L,W,U,des. - ⇩*[Ⓕ, des] L ≡ K → ⇧*[des] T ≡ U → C1 G L W → C2 G L (ⓐW.U). + ⬇*[Ⓕ, des] L ≡ K → ⬆*[des] T ≡ U → C1 G L W → C2 G L (ⓐW.U). (* the reducibility candidate associated to an atomic arity *) let rec acr (RP:candidate) (A:aarity) on A: candidate ≝ @@ -148,7 +148,7 @@ qed. lemma acr_abst: ∀RR,RS,RP. gcp RR RS RP → gcr RR RS RP RP → ∀a,G,L,W,T,A,B. ⦃G, L, W⦄ ϵ[RP] 〚B〛 → ( - ∀L0,V0,W0,T0,des. ⇩*[Ⓕ, des] L0 ≡ L → ⇧*[des] W ≡ W0 → ⇧*[des + 1] T ≡ T0 → + ∀L0,V0,W0,T0,des. ⬇*[Ⓕ, des] L0 ≡ L → ⬆*[des] W ≡ W0 → ⬆*[des + 1] T ≡ T0 → ⦃G, L0, V0⦄ ϵ[RP] 〚B〛 → ⦃G, L0, W0⦄ ϵ[RP] 〚B〛 → ⦃G, L0.ⓓⓝW0.V0, T0⦄ ϵ[RP] 〚A〛 ) → ⦃G, L, ⓛ{a}W.T⦄ ϵ[RP] 〚②B.A〛. diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/lcosx.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/lcosx.ma index 79e147a75..03187e34c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/lcosx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/lcosx.ma @@ -35,7 +35,7 @@ lemma lcosx_O: ∀h,g,G,L. G ⊢ ~⬊*[h, g, 0] L. qed. lemma lcosx_drop_trans_lt: ∀h,g,G,L,d. G ⊢ ~⬊*[h, g, d] L → - ∀I,K,V,i. ⇩[i] L ≡ K.ⓑ{I}V → i < d → + ∀I,K,V,i. ⬇[i] L ≡ K.ⓑ{I}V → i < d → G ⊢ ~⬊*[h, g, ⫰(d-i)] K ∧ G ⊢ ⬊*[h, g, V, ⫰(d-i)] K. #h #g #G #L #d #H elim H -L -d [ #d #J #K #V #i #H elim (drop_inv_atom1 … H) -H #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/lprs_cprs.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/lprs_cprs.ma index 46c7d1250..05138eb57 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/lprs_cprs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/lprs_cprs.ma @@ -117,7 +117,7 @@ lemma cprs_inv_abbr1: ∀a,G,L,V1,T1,U2. ⦃G, L⦄ ⊢ ⓓ{a}V1.T1 ➡* U2 → ∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ➡* V2 & ⦃G, L.ⓓV1⦄ ⊢ T1 ➡* T2 & U2 = ⓓ{a}V2.T2 ) ∨ - ∃∃T2. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡* T2 & ⇧[0, 1] U2 ≡ T2 & a = true. + ∃∃T2. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡* T2 & ⬆[0, 1] U2 ≡ T2 & a = true. #a #G #L #V1 #T1 #U2 #H @(cprs_ind … H) -U2 /3 width=5 by ex3_2_intro, or_introl/ #U0 #U2 #_ #HU02 * * [ #V0 #T0 #HV10 #HT10 #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/lpxs_cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/lpxs_cpxs.ma index 147bef745..c1928ff10 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/lpxs_cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/lpxs_cpxs.ma @@ -77,7 +77,7 @@ lemma cpxs_inv_abbr1: ∀h,g,a,G,L,V1,T1,U2. ⦃G, L⦄ ⊢ ⓓ{a}V1.T1 ➡*[h, ∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ➡*[h, g] V2 & ⦃G, L.ⓓV1⦄ ⊢ T1 ➡*[h, g] T2 & U2 = ⓓ{a}V2.T2 ) ∨ - ∃∃T2. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡*[h, g] T2 & ⇧[0, 1] U2 ≡ T2 & a = true. + ∃∃T2. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡*[h, g] T2 & ⬆[0, 1] U2 ≡ T2 & a = true. #h #g #a #G #L #V1 #T1 #U2 #H @(cpxs_ind … H) -U2 /3 width=5 by ex3_2_intro, or_introl/ #U0 #U2 #_ #HU02 * * [ #V0 #T0 #HV10 #HT10 #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/lsubc_drop.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/lsubc_drop.ma index 0e48ce8a3..404f7f582 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/lsubc_drop.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/lsubc_drop.ma @@ -21,8 +21,8 @@ include "basic_2/computation/lsubc.ma". (* Basic_1: was: csubc_drop_conf_O *) (* Note: the constant 0 can not be generalized *) -lemma lsubc_drop_O1_trans: ∀RP,G,L1,L2. G ⊢ L1 ⫃[RP] L2 → ∀K2,s,e. ⇩[s, 0, e] L2 ≡ K2 → - ∃∃K1. ⇩[s, 0, e] L1 ≡ K1 & G ⊢ K1 ⫃[RP] K2. +lemma lsubc_drop_O1_trans: ∀RP,G,L1,L2. G ⊢ L1 ⫃[RP] L2 → ∀K2,s,e. ⬇[s, 0, e] L2 ≡ K2 → + ∃∃K1. ⬇[s, 0, e] L1 ≡ K1 & G ⊢ K1 ⫃[RP] K2. #RP #G #L1 #L2 #H elim H -L1 -L2 [ #X #s #e #H elim (drop_inv_atom1 … H) -H /4 width=3 by drop_atom, ex2_intro/ | #I #L1 #L2 #V #_ #IHL12 #X #s #e #H @@ -42,8 +42,8 @@ qed-. (* Basic_1: was: csubc_drop_conf_rev *) lemma drop_lsubc_trans: ∀RR,RS,RP. gcp RR RS RP → - ∀G,L1,K1,d,e. ⇩[Ⓕ, d, e] L1 ≡ K1 → ∀K2. G ⊢ K1 ⫃[RP] K2 → - ∃∃L2. G ⊢ L1 ⫃[RP] L2 & ⇩[Ⓕ, d, e] L2 ≡ K2. + ∀G,L1,K1,d,e. ⬇[Ⓕ, d, e] L1 ≡ K1 → ∀K2. G ⊢ K1 ⫃[RP] K2 → + ∃∃L2. G ⊢ L1 ⫃[RP] L2 & ⬇[Ⓕ, d, e] L2 ≡ K2. #RR #RS #RP #Hgcp #G #L1 #K1 #d #e #H elim H -L1 -K1 -d -e [ #d #e #He #X #H elim (lsubc_inv_atom1 … H) -H >He /2 width=3 by ex2_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/lsubc_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/lsubc_drops.ma index 3f53eb54d..088cd210d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/lsubc_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/lsubc_drops.ma @@ -20,8 +20,8 @@ include "basic_2/computation/lsubc_drop.ma". (* Basic_1: was: csubc_drop1_conf_rev *) lemma drops_lsubc_trans: ∀RR,RS,RP. gcp RR RS RP → - ∀G,L1,K1,des. ⇩*[Ⓕ, des] L1 ≡ K1 → ∀K2. G ⊢ K1 ⫃[RP] K2 → - ∃∃L2. G ⊢ L1 ⫃[RP] L2 & ⇩*[Ⓕ, des] L2 ≡ K2. + ∀G,L1,K1,des. ⬇*[Ⓕ, des] L1 ≡ K1 → ∀K2. G ⊢ K1 ⫃[RP] K2 → + ∃∃L2. G ⊢ L1 ⫃[RP] L2 & ⬇*[Ⓕ, des] L2 ≡ K2. #RR #RS #RP #Hgcp #G #L1 #K1 #des #H elim H -L1 -K1 -des [ /2 width=3 by drops_nil, ex2_intro/ | #L1 #L #K1 #des #d #e #_ #HLK1 #IHL #K2 #HK12 diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/lsx.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/lsx.ma index 1abf9c523..3c2b01edd 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/lsx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/lsx.ma @@ -63,7 +63,7 @@ lemma lsx_gref: ∀h,g,G,L,d,p. G ⊢ ⬊*[h, g, §p, d] L. qed. lemma lsx_ge_up: ∀h,g,G,L,T,U,dt,d,e. dt ≤ yinj d + yinj e → - ⇧[d, e] T ≡ U → G ⊢ ⬊*[h, g, U, dt] L → G ⊢ ⬊*[h, g, U, d] L. + ⬆[d, e] T ≡ U → G ⊢ ⬊*[h, g, U, dt] L → G ⊢ ⬊*[h, g, U, d] L. #h #g #G #L #T #U #dt #d #e #Hdtde #HTU #H @(lsx_ind … H) -L /5 width=7 by lsx_intro, lleq_ge_up/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/lsx_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/lsx_csx.ma index 7cb1fb56a..a49378955 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/lsx_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/lsx_csx.ma @@ -21,7 +21,7 @@ include "basic_2/computation/lcosx_cpx.ma". lemma lsx_lref_be_lpxs: ∀h,g,I,G,K1,V,i,d. d ≤ yinj i → ⦃G, K1⦄ ⊢ ⬊*[h, g] V → ∀K2. G ⊢ ⬊*[h, g, V, 0] K2 → ⦃G, K1⦄ ⊢ ➡*[h, g] K2 → - ∀L2. ⇩[i] L2 ≡ K2.ⓑ{I}V → G ⊢ ⬊*[h, g, #i, d] L2. + ∀L2. ⬇[i] L2 ≡ K2.ⓑ{I}V → G ⊢ ⬊*[h, g, #i, d] L2. #h #g #I #G #K1 #V #i #d #Hdi #H @(csx_ind_alt … H) -V #V0 #_ #IHV0 #K2 #H @(lsx_ind … H) -K2 #K0 #HK0 #IHK0 #HK10 #L0 #HLK0 @lsx_intro @@ -37,7 +37,7 @@ qed. lemma lsx_lref_be: ∀h,g,I,G,K,V,i,d. d ≤ yinj i → ⦃G, K⦄ ⊢ ⬊*[h, g] V → G ⊢ ⬊*[h, g, V, 0] K → - ∀L. ⇩[i] L ≡ K.ⓑ{I}V → G ⊢ ⬊*[h, g, #i, d] L. + ∀L. ⬇[i] L ≡ K.ⓑ{I}V → G ⊢ ⬊*[h, g, #i, d] L. /2 width=8 by lsx_lref_be_lpxs/ qed. (* Main properties **********************************************************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/lsx_drop.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/lsx_drop.ma index d1fddee68..664ff62a8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/lsx_drop.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/lsx_drop.ma @@ -35,7 +35,7 @@ qed. (* Advanced forward lemmas **************************************************) lemma lsx_fwd_lref_be: ∀h,g,I,G,L,d,i. d ≤ yinj i → G ⊢ ⬊*[h, g, #i, d] L → - ∀K,V. ⇩[i] L ≡ K.ⓑ{I}V → G ⊢ ⬊*[h, g, V, 0] K. + ∀K,V. ⬇[i] L ≡ K.ⓑ{I}V → G ⊢ ⬊*[h, g, V, 0] K. #h #g #I #G #L #d #i #Hdi #H @(lsx_ind … H) -L #L1 #_ #IHL1 #K1 #V #HLK1 @lsx_intro #K2 #HK12 #HnK12 lapply (drop_fwd_drop2 … HLK1) @@ -49,8 +49,8 @@ qed-. (* Properties on relocation *************************************************) lemma lsx_lift_le: ∀h,g,G,K,T,U,dt,d,e. dt ≤ yinj d → - ⇧[d, e] T ≡ U → G ⊢ ⬊*[h, g, T, dt] K → - ∀L. ⇩[Ⓕ, d, e] L ≡ K → G ⊢ ⬊*[h, g, U, dt] L. + ⬆[d, e] T ≡ U → G ⊢ ⬊*[h, g, T, dt] K → + ∀L. ⬇[Ⓕ, d, e] L ≡ K → G ⊢ ⬊*[h, g, U, dt] L. #h #g #G #K #T #U #dt #d #e #Hdtd #HTU #H @(lsx_ind … H) -K #K1 #_ #IHK1 #L1 #HLK1 @lsx_intro #L2 #HL12 #HnU elim (lpx_drop_conf … HLK1 … HL12) -HL12 @@ -58,8 +58,8 @@ lemma lsx_lift_le: ∀h,g,G,K,T,U,dt,d,e. dt ≤ yinj d → qed-. lemma lsx_lift_ge: ∀h,g,G,K,T,U,dt,d,e. yinj d ≤ dt → - ⇧[d, e] T ≡ U → G ⊢ ⬊*[h, g, T, dt] K → - ∀L. ⇩[Ⓕ, d, e] L ≡ K → G ⊢ ⬊*[h, g, U, dt + e] L. + ⬆[d, e] T ≡ U → G ⊢ ⬊*[h, g, T, dt] K → + ∀L. ⬇[Ⓕ, d, e] L ≡ K → G ⊢ ⬊*[h, g, U, dt + e] L. #h #g #G #K #T #U #dt #d #e #Hddt #HTU #H @(lsx_ind … H) -K #K1 #_ #IHK1 #L1 #HLK1 @lsx_intro #L2 #HL12 #HnU elim (lpx_drop_conf … HLK1 … HL12) -HL12 @@ -69,8 +69,8 @@ qed-. (* Inversion lemmas on relocation *******************************************) lemma lsx_inv_lift_le: ∀h,g,G,L,T,U,dt,d,e. dt ≤ yinj d → - ⇧[d, e] T ≡ U → G ⊢ ⬊*[h, g, U, dt] L → - ∀K. ⇩[Ⓕ, d, e] L ≡ K → G ⊢ ⬊*[h, g, T, dt] K. + ⬆[d, e] T ≡ U → G ⊢ ⬊*[h, g, U, dt] L → + ∀K. ⬇[Ⓕ, d, e] L ≡ K → G ⊢ ⬊*[h, g, T, dt] K. #h #g #G #L #T #U #dt #d #e #Hdtd #HTU #H @(lsx_ind … H) -L #L1 #_ #IHL1 #K1 #HLK1 @lsx_intro #K2 #HK12 #HnT elim (drop_lpx_trans … HLK1 … HK12) -HK12 @@ -78,8 +78,8 @@ lemma lsx_inv_lift_le: ∀h,g,G,L,T,U,dt,d,e. dt ≤ yinj d → qed-. lemma lsx_inv_lift_be: ∀h,g,G,L,T,U,dt,d,e. yinj d ≤ dt → dt ≤ d + e → - ⇧[d, e] T ≡ U → G ⊢ ⬊*[h, g, U, dt] L → - ∀K. ⇩[Ⓕ, d, e] L ≡ K → G ⊢ ⬊*[h, g, T, d] K. + ⬆[d, e] T ≡ U → G ⊢ ⬊*[h, g, U, dt] L → + ∀K. ⬇[Ⓕ, d, e] L ≡ K → G ⊢ ⬊*[h, g, T, d] K. #h #g #G #L #T #U #dt #d #e #Hddt #Hdtde #HTU #H @(lsx_ind … H) -L #L1 #_ #IHL1 #K1 #HLK1 @lsx_intro #K2 #HK12 #HnT elim (drop_lpx_trans … HLK1 … HK12) -HK12 @@ -87,8 +87,8 @@ lemma lsx_inv_lift_be: ∀h,g,G,L,T,U,dt,d,e. yinj d ≤ dt → dt ≤ d + e → qed-. lemma lsx_inv_lift_ge: ∀h,g,G,L,T,U,dt,d,e. yinj d + yinj e ≤ dt → - ⇧[d, e] T ≡ U → G ⊢ ⬊*[h, g, U, dt] L → - ∀K. ⇩[Ⓕ, d, e] L ≡ K → G ⊢ ⬊*[h, g, T, dt-e] K. + ⬆[d, e] T ≡ U → G ⊢ ⬊*[h, g, U, dt] L → + ∀K. ⬇[Ⓕ, d, e] L ≡ K → G ⊢ ⬊*[h, g, T, dt-e] K. #h #g #G #L #T #U #dt #d #e #Hdedt #HTU #H @(lsx_ind … H) -L #L1 #_ #IHL1 #K1 #HLK1 @lsx_intro #K2 #HK12 #HnT elim (drop_lpx_trans … HLK1 … HK12) -HK12 diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/scpds_scpds.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/scpds_scpds.ma index f64cdf9cf..a7213b0d2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/scpds_scpds.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/scpds_scpds.ma @@ -60,7 +60,7 @@ elim (cprs_inv_abst1 … H2) -H2 #V2 #T2 #HV12 #HUT2 #H destruct qed-. lemma scpds_inv_abbr_abst: ∀h,g,a1,a2,G,L,V1,W2,T1,T2,l. ⦃G, L⦄ ⊢ ⓓ{a1}V1.T1 •*➡*[h, g, l] ⓛ{a2}W2.T2 → - ∃∃T. ⦃G, L.ⓓV1⦄ ⊢ T1 •*➡*[h, g, l] T & ⇧[0, 1] ⓛ{a2}W2.T2 ≡ T & a1 = true. + ∃∃T. ⦃G, L.ⓓV1⦄ ⊢ T1 •*➡*[h, g, l] T & ⬆[0, 1] ⓛ{a2}W2.T2 ≡ T & a1 = true. #h #g #a1 #a2 #G #L #V1 #W2 #T1 #T2 #l2 * #X #l1 #Hl21 #Hl1 #H1 #H2 lapply (da_inv_bind … Hl1) -Hl1 #Hl1 elim (lstas_inv_bind1 … H1) -H1 #U1 #HTU1 #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv.ma index c16f87bb0..18a49d6bf 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv.ma @@ -116,8 +116,8 @@ qed-. (* Note: the constant 0 cannot be generalized *) lemma lsubsv_drop_O1_conf: ∀h,g,G,L1,L2. G ⊢ L1 ⫃¡[h, g] L2 → - ∀K1,s,e. ⇩[s, 0, e] L1 ≡ K1 → - ∃∃K2. G ⊢ K1 ⫃¡[h, g] K2 & ⇩[s, 0, e] L2 ≡ K2. + ∀K1,s,e. ⬇[s, 0, e] L1 ≡ K1 → + ∃∃K2. G ⊢ K1 ⫃¡[h, g] K2 & ⬇[s, 0, e] L2 ≡ K2. #h #g #G #L1 #L2 #H elim H -L1 -L2 [ /2 width=3 by ex2_intro/ | #I #L1 #L2 #V #_ #IHL12 #K1 #s #e #H @@ -139,8 +139,8 @@ qed-. (* Note: the constant 0 cannot be generalized *) lemma lsubsv_drop_O1_trans: ∀h,g,G,L1,L2. G ⊢ L1 ⫃¡[h, g] L2 → - ∀K2,s, e. ⇩[s, 0, e] L2 ≡ K2 → - ∃∃K1. G ⊢ K1 ⫃¡[h, g] K2 & ⇩[s, 0, e] L1 ≡ K1. + ∀K2,s, e. ⬇[s, 0, e] L2 ≡ K2 → + ∃∃K1. G ⊢ K1 ⫃¡[h, g] K2 & ⬇[s, 0, e] L1 ≡ K1. #h #g #G #L1 #L2 #H elim H -L1 -L2 [ /2 width=3 by ex2_intro/ | #I #L1 #L2 #V #_ #IHL12 #K2 #s #e #H diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv.ma index a5be16b57..88d4db421 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv.ma @@ -20,7 +20,7 @@ include "basic_2/computation/scpds.ma". (* activate genv *) inductive snv (h) (g): relation3 genv lenv term ≝ | snv_sort: ∀G,L,k. snv h g G L (⋆k) -| snv_lref: ∀I,G,L,K,V,i. ⇩[i] L ≡ K.ⓑ{I}V → snv h g G K V → snv h g G L (#i) +| snv_lref: ∀I,G,L,K,V,i. ⬇[i] L ≡ K.ⓑ{I}V → snv h g G K V → snv h g G L (#i) | snv_bind: ∀a,I,G,L,V,T. snv h g G L V → snv h g G (L.ⓑ{I}V) T → snv h g G L (ⓑ{a,I}V.T) | snv_appl: ∀a,G,L,V,W0,T,U0,l. snv h g G L V → snv h g G L T → ⦃G, L⦄ ⊢ V •*➡*[h, g, 1] W0 → ⦃G, L⦄ ⊢ T •*➡*[h, g, l] ⓛ{a}W0.U0 → snv h g G L (ⓐV.T) @@ -34,7 +34,7 @@ interpretation "stratified native validity (term)" (* Basic inversion lemmas ***************************************************) fact snv_inv_lref_aux: ∀h,g,G,L,X. ⦃G, L⦄ ⊢ X ¡[h, g] → ∀i. X = #i → - ∃∃I,K,V. ⇩[i] L ≡ K.ⓑ{I}V & ⦃G, K⦄ ⊢ V ¡[h, g]. + ∃∃I,K,V. ⬇[i] L ≡ K.ⓑ{I}V & ⦃G, K⦄ ⊢ V ¡[h, g]. #h #g #G #L #X * -G -L -X [ #G #L #k #i #H destruct | #I #G #L #K #V #i0 #HLK #HV #i #H destruct /2 width=5 by ex2_3_intro/ @@ -45,7 +45,7 @@ fact snv_inv_lref_aux: ∀h,g,G,L,X. ⦃G, L⦄ ⊢ X ¡[h, g] → ∀i. X = #i qed-. lemma snv_inv_lref: ∀h,g,G,L,i. ⦃G, L⦄ ⊢ #i ¡[h, g] → - ∃∃I,K,V. ⇩[i] L ≡ K.ⓑ{I}V & ⦃G, K⦄ ⊢ V ¡[h, g]. + ∃∃I,K,V. ⬇[i] L ≡ K.ⓑ{I}V & ⦃G, K⦄ ⊢ V ¡[h, g]. /2 width=3 by snv_inv_lref_aux/ qed-. fact snv_inv_gref_aux: ∀h,g,G,L,X. ⦃G, L⦄ ⊢ X ¡[h, g] → ∀p. X = §p → ⊥. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_lift.ma index 0d604c128..09acef6c3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_lift.ma @@ -20,8 +20,8 @@ include "basic_2/dynamic/snv.ma". (* Relocation properties ****************************************************) -lemma snv_lift: ∀h,g,G,K,T. ⦃G, K⦄ ⊢ T ¡[h, g] → ∀L,s,d,e. ⇩[s, d, e] L ≡ K → - ∀U. ⇧[d, e] T ≡ U → ⦃G, L⦄ ⊢ U ¡[h, g]. +lemma snv_lift: ∀h,g,G,K,T. ⦃G, K⦄ ⊢ T ¡[h, g] → ∀L,s,d,e. ⬇[s, d, e] L ≡ K → + ∀U. ⬆[d, e] T ≡ U → ⦃G, L⦄ ⊢ U ¡[h, g]. #h #g #G #K #T #H elim H -G -K -T [ #G #K #k #L #s #d #e #_ #X #H >(lift_inv_sort1 … H) -X -K -d -e // @@ -49,8 +49,8 @@ lemma snv_lift: ∀h,g,G,K,T. ⦃G, K⦄ ⊢ T ¡[h, g] → ∀L,s,d,e. ⇩[s, d ] qed. -lemma snv_inv_lift: ∀h,g,G,L,U. ⦃G, L⦄ ⊢ U ¡[h, g] → ∀K,s,d,e. ⇩[s, d, e] L ≡ K → - ∀T. ⇧[d, e] T ≡ U → ⦃G, K⦄ ⊢ T ¡[h, g]. +lemma snv_inv_lift: ∀h,g,G,L,U. ⦃G, L⦄ ⊢ U ¡[h, g] → ∀K,s,d,e. ⬇[s, d, e] L ≡ K → + ∀T. ⬆[d, e] T ≡ U → ⦃G, K⦄ ⊢ T ¡[h, g]. #h #g #G #L #U #H elim H -G -L -U [ #G #L #k #K #s #d #e #_ #X #H >(lift_inv_sort2 … H) -X -L -d -e // diff --git a/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs_cpcs.ma b/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs_cpcs.ma index fcf4a7ee2..083194053 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs_cpcs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs_cpcs.ma @@ -59,8 +59,8 @@ elim (cprs_inv_abst1 … H2) -H2 #W0 #T0 #_ #_ #H destruct qed-. (* Basic_1: was: pc3_gen_lift *) -lemma cpcs_inv_lift: ∀G,L,K,s,d,e. ⇩[s, d, e] L ≡ K → - ∀T1,U1. ⇧[d, e] T1 ≡ U1 → ∀T2,U2. ⇧[d, e] T2 ≡ U2 → +lemma cpcs_inv_lift: ∀G,L,K,s,d,e. ⬇[s, d, e] L ≡ K → + ∀T1,U1. ⬆[d, e] T1 ≡ U1 → ∀T2,U2. ⬆[d, e] T2 ≡ U2 → ⦃G, L⦄ ⊢ U1 ⬌* U2 → ⦃G, K⦄ ⊢ T1 ⬌* T2. #G #L #K #s #d #e #HLK #T1 #U1 #HTU1 #T2 #U2 #HTU2 #HU12 elim (cpcs_inv_cprs … HU12) -HU12 #U #HU1 #HU2 @@ -150,8 +150,8 @@ lemma lsubr_cpcs_trans: ∀G,L1,T1,T2. ⦃G, L1⦄ ⊢ T1 ⬌* T2 → qed-. (* Basic_1: was: pc3_lift *) -lemma cpcs_lift: ∀G,L,K,s,d,e. ⇩[s, d, e] L ≡ K → - ∀T1,U1. ⇧[d, e] T1 ≡ U1 → ∀T2,U2. ⇧[d, e] T2 ≡ U2 → +lemma cpcs_lift: ∀G,L,K,s,d,e. ⬇[s, d, e] L ≡ K → + ∀T1,U1. ⬆[d, e] T1 ≡ U1 → ∀T2,U2. ⬆[d, e] T2 ≡ U2 → ⦃G, K⦄ ⊢ T1 ⬌* T2 → ⦃G, L⦄ ⊢ U1 ⬌* U2. #G #L #K #s #d #e #HLK #T1 #U1 #HTU1 #T2 #U2 #HTU2 #HT12 elim (cpcs_inv_cprs … HT12) -HT12 #T #HT1 #HT2 diff --git a/matita/matita/contribs/lambdadelta/basic_2/examples/ex_cpr_omega.ma b/matita/matita/contribs/lambdadelta/basic_2/examples/ex_cpr_omega.ma index 6a2586ff1..ef27dfa48 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/examples/ex_cpr_omega.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/examples/ex_cpr_omega.ma @@ -26,8 +26,8 @@ definition Omega2: term → term ≝ λW. +ⓓⓝW.(Delta W).ⓐ#0.#0. (* Basic properties *********************************************************) -lemma Delta_lift: ∀W1,W2,d,e. ⇧[d, e] W1 ≡ W2 → - ⇧[d, e] (Delta W1) ≡ (Delta W2). +lemma Delta_lift: ∀W1,W2,d,e. ⬆[d, e] W1 ≡ W2 → + ⬆[d, e] (Delta W1) ≡ (Delta W2). /4 width=1 by lift_flat, lift_bind, lift_lref_lt/ qed. (* Main properties **********************************************************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/cpys.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/cpys.ma index c7d59d176..eda8ee1e1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/cpys.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/cpys.ma @@ -98,9 +98,9 @@ qed-. (* Basic forward lemmas *****************************************************) lemma cpys_fwd_up: ∀G,L,U1,U2,dt,et. ⦃G, L⦄ ⊢ U1 ▶*[dt, et] U2 → - ∀T1,d,e. ⇧[d, e] T1 ≡ U1 → + ∀T1,d,e. ⬆[d, e] T1 ≡ U1 → d ≤ dt → d + e ≤ dt + et → - ∃∃T2. ⦃G, L⦄ ⊢ U1 ▶*[d+e, dt+et-(d+e)] U2 & ⇧[d, e] T2 ≡ U2. + ∃∃T2. ⦃G, L⦄ ⊢ U1 ▶*[d+e, dt+et-(d+e)] U2 & ⬆[d, e] T2 ≡ U2. #G #L #U1 #U2 #dt #et #H #T1 #d #e #HTU1 #Hddt #Hdedet @(cpys_ind … H) -U2 [ /2 width=3 by ex2_intro/ | -HTU1 #U #U2 #_ #HU2 * #T #HU1 #HTU @@ -160,7 +160,7 @@ lemma cpys_inv_refl_O2: ∀G,L,T1,T2,d. ⦃G, L⦄ ⊢ T1 ▶*[d, 0] T2 → T1 = qed-. lemma cpys_inv_lift1_eq: ∀G,L,U1,U2. ∀d,e:nat. - ⦃G, L⦄ ⊢ U1 ▶*[d, e] U2 → ∀T1. ⇧[d, e] T1 ≡ U1 → U1 = U2. + ⦃G, L⦄ ⊢ U1 ▶*[d, e] U2 → ∀T1. ⬆[d, e] T1 ≡ U1 → U1 = U2. #G #L #U1 #U2 #d #e #H #T1 #HTU1 @(cpys_ind … H) -U2 /2 width=7 by cpy_inv_lift1_eq/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/cpys_alt.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/cpys_alt.ma index 10a198cb2..2d550cdbc 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/cpys_alt.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/cpys_alt.ma @@ -21,8 +21,8 @@ include "basic_2/multiple/cpys_lift.ma". inductive cpysa: ynat → ynat → relation4 genv lenv term term ≝ | cpysa_atom : ∀I,G,L,d,e. cpysa d e G L (⓪{I}) (⓪{I}) | cpysa_subst: ∀I,G,L,K,V1,V2,W2,i,d,e. d ≤ yinj i → i < d+e → - ⇩[i] L ≡ K.ⓑ{I}V1 → cpysa 0 (⫰(d+e-i)) G K V1 V2 → - ⇧[0, i+1] V2 ≡ W2 → cpysa d e G L (#i) W2 + ⬇[i] L ≡ K.ⓑ{I}V1 → cpysa 0 (⫰(d+e-i)) G K V1 V2 → + ⬆[0, i+1] V2 ≡ W2 → cpysa d e G L (#i) W2 | cpysa_bind : ∀a,I,G,L,V1,V2,T1,T2,d,e. cpysa d e G L V1 V2 → cpysa (⫯d) e G (L.ⓑ{I}V1) T1 T2 → cpysa d e G L (ⓑ{a,I}V1.T1) (ⓑ{a,I}V2.T2) @@ -85,8 +85,8 @@ qed-. lemma cpys_ind_alt: ∀R:ynat→ynat→relation4 genv lenv term term. (∀I,G,L,d,e. R d e G L (⓪{I}) (⓪{I})) → (∀I,G,L,K,V1,V2,W2,i,d,e. d ≤ yinj i → i < d + e → - ⇩[i] L ≡ K.ⓑ{I}V1 → ⦃G, K⦄ ⊢ V1 ▶*[O, ⫰(d+e-i)] V2 → - ⇧[O, i+1] V2 ≡ W2 → R O (⫰(d+e-i)) G K V1 V2 → R d e G L (#i) W2 + ⬇[i] L ≡ K.ⓑ{I}V1 → ⦃G, K⦄ ⊢ V1 ▶*[O, ⫰(d+e-i)] V2 → + ⬆[O, i+1] V2 ≡ W2 → R O (⫰(d+e-i)) G K V1 V2 → R d e G L (#i) W2 ) → (∀a,I,G,L,V1,V2,T1,T2,d,e. ⦃G, L⦄ ⊢ V1 ▶*[d, e] V2 → ⦃G, L.ⓑ{I}V1⦄ ⊢ T1 ▶*[⫯d, e] T2 → R d e G L V1 V2 → diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/cpys_cpys.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/cpys_cpys.ma index dc646a4ca..9c21cb39d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/cpys_cpys.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/cpys_cpys.ma @@ -59,10 +59,10 @@ lemma cpys_split_up: ∀G,L,T1,T2,d,e. ⦃G, L⦄ ⊢ T1 ▶*[d, e] T2 → qed-. lemma cpys_inv_lift1_up: ∀G,L,U1,U2,dt,et. ⦃G, L⦄ ⊢ U1 ▶*[dt, et] U2 → - ∀K,s,d,e. ⇩[s, d, e] L ≡ K → ∀T1. ⇧[d, e] T1 ≡ U1 → + ∀K,s,d,e. ⬇[s, d, e] L ≡ K → ∀T1. ⬆[d, e] T1 ≡ U1 → d ≤ dt → dt ≤ yinj d + e → yinj d + e ≤ dt + et → ∃∃T2. ⦃G, K⦄ ⊢ T1 ▶*[d, dt + et - (yinj d + e)] T2 & - ⇧[d, e] T2 ≡ U2. + ⬆[d, e] T2 ≡ U2. #G #L #U1 #U2 #dt #et #HU12 #K #s #d #e #HLK #T1 #HTU1 #Hddt #Hdtde #Hdedet elim (cpys_split_up … HU12 (d + e)) -HU12 // -Hdedet #U #HU1 #HU2 lapply (cpys_weak … HU1 d e ? ?) -HU1 // [ >ymax_pre_sn_comm // ] -Hddt -Hdtde #HU1 diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/cpys_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/cpys_lift.ma index d69de694e..d21e9cce0 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/cpys_lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/cpys_lift.ma @@ -21,8 +21,8 @@ include "basic_2/multiple/cpys.ma". lemma cpys_subst: ∀I,G,L,K,V,U1,i,d,e. d ≤ yinj i → i < d + e → - ⇩[i] L ≡ K.ⓑ{I}V → ⦃G, K⦄ ⊢ V ▶*[0, ⫰(d+e-i)] U1 → - ∀U2. ⇧[0, i+1] U1 ≡ U2 → ⦃G, L⦄ ⊢ #i ▶*[d, e] U2. + ⬇[i] L ≡ K.ⓑ{I}V → ⦃G, K⦄ ⊢ V ▶*[0, ⫰(d+e-i)] U1 → + ∀U2. ⬆[0, i+1] U1 ≡ U2 → ⦃G, L⦄ ⊢ #i ▶*[d, e] U2. #I #G #L #K #V #U1 #i #d #e #Hdi #Hide #HLK #H @(cpys_ind … H) -U1 [ /3 width=5 by cpy_cpys, cpy_subst/ | #U #U1 #_ #HU1 #IHU #U2 #HU12 @@ -38,8 +38,8 @@ qed. lemma cpys_subst_Y2: ∀I,G,L,K,V,U1,i,d. d ≤ yinj i → - ⇩[i] L ≡ K.ⓑ{I}V → ⦃G, K⦄ ⊢ V ▶*[0, ∞] U1 → - ∀U2. ⇧[0, i+1] U1 ≡ U2 → ⦃G, L⦄ ⊢ #i ▶*[d, ∞] U2. + ⬇[i] L ≡ K.ⓑ{I}V → ⦃G, K⦄ ⊢ V ▶*[0, ∞] U1 → + ∀U2. ⬆[0, i+1] U1 ≡ U2 → ⦃G, L⦄ ⊢ #i ▶*[d, ∞] U2. #I #G #L #K #V #U1 #i #d #Hdi #HLK #HVU1 #U2 #HU12 @(cpys_subst … HLK … HU12) >yminus_Y_inj // qed. @@ -49,9 +49,9 @@ qed. lemma cpys_inv_atom1: ∀I,G,L,T2,d,e. ⦃G, L⦄ ⊢ ⓪{I} ▶*[d, e] T2 → T2 = ⓪{I} ∨ ∃∃J,K,V1,V2,i. d ≤ yinj i & i < d + e & - ⇩[i] L ≡ K.ⓑ{J}V1 & + ⬇[i] L ≡ K.ⓑ{J}V1 & ⦃G, K⦄ ⊢ V1 ▶*[0, ⫰(d+e-i)] V2 & - ⇧[O, i+1] V2 ≡ T2 & + ⬆[O, i+1] V2 ≡ T2 & I = LRef i. #I #G #L #T2 #d #e #H @(cpys_ind … H) -T2 [ /2 width=1 by or_introl/ @@ -70,24 +70,24 @@ qed-. lemma cpys_inv_lref1: ∀G,L,T2,i,d,e. ⦃G, L⦄ ⊢ #i ▶*[d, e] T2 → T2 = #i ∨ ∃∃I,K,V1,V2. d ≤ i & i < d + e & - ⇩[i] L ≡ K.ⓑ{I}V1 & + ⬇[i] L ≡ K.ⓑ{I}V1 & ⦃G, K⦄ ⊢ V1 ▶*[0, ⫰(d+e-i)] V2 & - ⇧[O, i+1] V2 ≡ T2. + ⬆[O, i+1] V2 ≡ T2. #G #L #T2 #i #d #e #H elim (cpys_inv_atom1 … H) -H /2 width=1 by or_introl/ * #I #K #V1 #V2 #j #Hdj #Hjde #HLK #HV12 #HVT2 #H destruct /3 width=7 by ex5_4_intro, or_intror/ qed-. lemma cpys_inv_lref1_Y2: ∀G,L,T2,i,d. ⦃G, L⦄ ⊢ #i ▶*[d, ∞] T2 → T2 = #i ∨ - ∃∃I,K,V1,V2. d ≤ i & ⇩[i] L ≡ K.ⓑ{I}V1 & - ⦃G, K⦄ ⊢ V1 ▶*[0, ∞] V2 & ⇧[O, i+1] V2 ≡ T2. + ∃∃I,K,V1,V2. d ≤ i & ⬇[i] L ≡ K.ⓑ{I}V1 & + ⦃G, K⦄ ⊢ V1 ▶*[0, ∞] V2 & ⬆[O, i+1] V2 ≡ T2. #G #L #T2 #i #d #H elim (cpys_inv_lref1 … H) -H /2 width=1 by or_introl/ * >yminus_Y_inj /3 width=7 by or_intror, ex4_4_intro/ qed-. lemma cpys_inv_lref1_drop: ∀G,L,T2,i,d,e. ⦃G, L⦄ ⊢ #i ▶*[d, e] T2 → - ∀I,K,V1. ⇩[i] L ≡ K.ⓑ{I}V1 → - ∀V2. ⇧[O, i+1] V2 ≡ T2 → + ∀I,K,V1. ⬇[i] L ≡ K.ⓑ{I}V1 → + ∀V2. ⬆[O, i+1] V2 ≡ T2 → ∧∧ ⦃G, K⦄ ⊢ V1 ▶*[0, ⫰(d+e-i)] V2 & d ≤ i & i < d + e. @@ -103,8 +103,8 @@ qed-. (* Properties on relocation *************************************************) lemma cpys_lift_le: ∀G,K,T1,T2,dt,et. ⦃G, K⦄ ⊢ T1 ▶*[dt, et] T2 → - ∀L,U1,s,d,e. dt + et ≤ yinj d → ⇩[s, d, e] L ≡ K → - ⇧[d, e] T1 ≡ U1 → ∀U2. ⇧[d, e] T2 ≡ U2 → + ∀L,U1,s,d,e. dt + et ≤ yinj d → ⬇[s, d, e] L ≡ K → + ⬆[d, e] T1 ≡ U1 → ∀U2. ⬆[d, e] T2 ≡ U2 → ⦃G, L⦄ ⊢ U1 ▶*[dt, et] U2. #G #K #T1 #T2 #dt #et #H #L #U1 #s #d #e #Hdetd #HLK #HTU1 @(cpys_ind … H) -T2 [ #U2 #H >(lift_mono … HTU1 … H) -H // @@ -117,8 +117,8 @@ qed-. lemma cpys_lift_be: ∀G,K,T1,T2,dt,et. ⦃G, K⦄ ⊢ T1 ▶*[dt, et] T2 → ∀L,U1,s,d,e. dt ≤ yinj d → d ≤ dt + et → - ⇩[s, d, e] L ≡ K → ⇧[d, e] T1 ≡ U1 → - ∀U2. ⇧[d, e] T2 ≡ U2 → ⦃G, L⦄ ⊢ U1 ▶*[dt, et + e] U2. + ⬇[s, d, e] L ≡ K → ⬆[d, e] T1 ≡ U1 → + ∀U2. ⬆[d, e] T2 ≡ U2 → ⦃G, L⦄ ⊢ U1 ▶*[dt, et + e] U2. #G #K #T1 #T2 #dt #et #H #L #U1 #s #d #e #Hdtd #Hddet #HLK #HTU1 @(cpys_ind … H) -T2 [ #U2 #H >(lift_mono … HTU1 … H) -H // | -HTU1 #T #T2 #_ #HT2 #IHT #U2 #HTU2 @@ -129,8 +129,8 @@ lemma cpys_lift_be: ∀G,K,T1,T2,dt,et. ⦃G, K⦄ ⊢ T1 ▶*[dt, et] T2 → qed-. lemma cpys_lift_ge: ∀G,K,T1,T2,dt,et. ⦃G, K⦄ ⊢ T1 ▶*[dt, et] T2 → - ∀L,U1,s,d,e. yinj d ≤ dt → ⇩[s, d, e] L ≡ K → - ⇧[d, e] T1 ≡ U1 → ∀U2. ⇧[d, e] T2 ≡ U2 → + ∀L,U1,s,d,e. yinj d ≤ dt → ⬇[s, d, e] L ≡ K → + ⬆[d, e] T1 ≡ U1 → ∀U2. ⬆[d, e] T2 ≡ U2 → ⦃G, L⦄ ⊢ U1 ▶*[dt+e, et] U2. #G #K #T1 #T2 #dt #et #H #L #U1 #s #d #e #Hddt #HLK #HTU1 @(cpys_ind … H) -T2 [ #U2 #H >(lift_mono … HTU1 … H) -H // @@ -144,9 +144,9 @@ qed-. (* Inversion lemmas for relocation ******************************************) lemma cpys_inv_lift1_le: ∀G,L,U1,U2,dt,et. ⦃G, L⦄ ⊢ U1 ▶*[dt, et] U2 → - ∀K,s,d,e. ⇩[s, d, e] L ≡ K → ∀T1. ⇧[d, e] T1 ≡ U1 → + ∀K,s,d,e. ⬇[s, d, e] L ≡ K → ∀T1. ⬆[d, e] T1 ≡ U1 → dt + et ≤ d → - ∃∃T2. ⦃G, K⦄ ⊢ T1 ▶*[dt, et] T2 & ⇧[d, e] T2 ≡ U2. + ∃∃T2. ⦃G, K⦄ ⊢ T1 ▶*[dt, et] T2 & ⬆[d, e] T2 ≡ U2. #G #L #U1 #U2 #dt #et #H #K #s #d #e #HLK #T1 #HTU1 #Hdetd @(cpys_ind … H) -U2 [ /2 width=3 by ex2_intro/ | -HTU1 #U #U2 #_ #HU2 * #T #HT1 #HTU @@ -155,9 +155,9 @@ lemma cpys_inv_lift1_le: ∀G,L,U1,U2,dt,et. ⦃G, L⦄ ⊢ U1 ▶*[dt, et] U2 qed-. lemma cpys_inv_lift1_be: ∀G,L,U1,U2,dt,et. ⦃G, L⦄ ⊢ U1 ▶*[dt, et] U2 → - ∀K,s,d,e. ⇩[s, d, e] L ≡ K → ∀T1. ⇧[d, e] T1 ≡ U1 → + ∀K,s,d,e. ⬇[s, d, e] L ≡ K → ∀T1. ⬆[d, e] T1 ≡ U1 → dt ≤ d → yinj d + e ≤ dt + et → - ∃∃T2. ⦃G, K⦄ ⊢ T1 ▶*[dt, et - e] T2 & ⇧[d, e] T2 ≡ U2. + ∃∃T2. ⦃G, K⦄ ⊢ T1 ▶*[dt, et - e] T2 & ⬆[d, e] T2 ≡ U2. #G #L #U1 #U2 #dt #et #H #K #s #d #e #HLK #T1 #HTU1 #Hdtd #Hdedet @(cpys_ind … H) -U2 [ /2 width=3 by ex2_intro/ | -HTU1 #U #U2 #_ #HU2 * #T #HT1 #HTU @@ -166,9 +166,9 @@ lemma cpys_inv_lift1_be: ∀G,L,U1,U2,dt,et. ⦃G, L⦄ ⊢ U1 ▶*[dt, et] U2 qed-. lemma cpys_inv_lift1_ge: ∀G,L,U1,U2,dt,et. ⦃G, L⦄ ⊢ U1 ▶*[dt, et] U2 → - ∀K,s,d,e. ⇩[s, d, e] L ≡ K → ∀T1. ⇧[d, e] T1 ≡ U1 → + ∀K,s,d,e. ⬇[s, d, e] L ≡ K → ∀T1. ⬆[d, e] T1 ≡ U1 → yinj d + e ≤ dt → - ∃∃T2. ⦃G, K⦄ ⊢ T1 ▶*[dt - e, et] T2 & ⇧[d, e] T2 ≡ U2. + ∃∃T2. ⦃G, K⦄ ⊢ T1 ▶*[dt - e, et] T2 & ⬆[d, e] T2 ≡ U2. #G #L #U1 #U2 #dt #et #H #K #s #d #e #HLK #T1 #HTU1 #Hdedt @(cpys_ind … H) -U2 [ /2 width=3 by ex2_intro/ | -HTU1 #U #U2 #_ #HU2 * #T #HT1 #HTU @@ -179,10 +179,10 @@ qed-. (* Advanced inversion lemmas on relocation **********************************) lemma cpys_inv_lift1_ge_up: ∀G,L,U1,U2,dt,et. ⦃G, L⦄ ⊢ U1 ▶*[dt, et] U2 → - ∀K,s,d,e. ⇩[s, d, e] L ≡ K → ∀T1. ⇧[d, e] T1 ≡ U1 → + ∀K,s,d,e. ⬇[s, d, e] L ≡ K → ∀T1. ⬆[d, e] T1 ≡ U1 → d ≤ dt → dt ≤ yinj d + e → yinj d + e ≤ dt + et → ∃∃T2. ⦃G, K⦄ ⊢ T1 ▶*[d, dt + et - (yinj d + e)] T2 & - ⇧[d, e] T2 ≡ U2. + ⬆[d, e] T2 ≡ U2. #G #L #U1 #U2 #dt #et #H #K #s #d #e #HLK #T1 #HTU1 #Hddt #Hdtde #Hdedet @(cpys_ind … H) -U2 [ /2 width=3 by ex2_intro/ | -HTU1 #U #U2 #_ #HU2 * #T #HT1 #HTU @@ -191,9 +191,9 @@ lemma cpys_inv_lift1_ge_up: ∀G,L,U1,U2,dt,et. ⦃G, L⦄ ⊢ U1 ▶*[dt, et] U qed-. lemma cpys_inv_lift1_be_up: ∀G,L,U1,U2,dt,et. ⦃G, L⦄ ⊢ U1 ▶*[dt, et] U2 → - ∀K,s,d,e. ⇩[s, d, e] L ≡ K → ∀T1. ⇧[d, e] T1 ≡ U1 → + ∀K,s,d,e. ⬇[s, d, e] L ≡ K → ∀T1. ⬆[d, e] T1 ≡ U1 → dt ≤ d → dt + et ≤ yinj d + e → - ∃∃T2. ⦃G, K⦄ ⊢ T1 ▶*[dt, d - dt] T2 & ⇧[d, e] T2 ≡ U2. + ∃∃T2. ⦃G, K⦄ ⊢ T1 ▶*[dt, d - dt] T2 & ⬆[d, e] T2 ≡ U2. #G #L #U1 #U2 #dt #et #H #K #s #d #e #HLK #T1 #HTU1 #Hdtd #Hdetde @(cpys_ind … H) -U2 [ /2 width=3 by ex2_intro/ | -HTU1 #U #U2 #_ #HU2 * #T #HT1 #HTU @@ -202,9 +202,9 @@ lemma cpys_inv_lift1_be_up: ∀G,L,U1,U2,dt,et. ⦃G, L⦄ ⊢ U1 ▶*[dt, et] U qed-. lemma cpys_inv_lift1_le_up: ∀G,L,U1,U2,dt,et. ⦃G, L⦄ ⊢ U1 ▶*[dt, et] U2 → - ∀K,s,d,e. ⇩[s, d, e] L ≡ K → ∀T1. ⇧[d, e] T1 ≡ U1 → + ∀K,s,d,e. ⬇[s, d, e] L ≡ K → ∀T1. ⬆[d, e] T1 ≡ U1 → dt ≤ d → d ≤ dt + et → dt + et ≤ yinj d + e → - ∃∃T2. ⦃G, K⦄ ⊢ T1 ▶*[dt, d - dt] T2 & ⇧[d, e] T2 ≡ U2. + ∃∃T2. ⦃G, K⦄ ⊢ T1 ▶*[dt, d - dt] T2 & ⬆[d, e] T2 ≡ U2. #G #L #U1 #U2 #dt #et #H #K #s #d #e #HLK #T1 #HTU1 #Hdtd #Hddet #Hdetde @(cpys_ind … H) -U2 [ /2 width=3 by ex2_intro/ | -HTU1 #U #U2 #_ #HU2 * #T #HT1 #HTU @@ -213,9 +213,9 @@ lemma cpys_inv_lift1_le_up: ∀G,L,U1,U2,dt,et. ⦃G, L⦄ ⊢ U1 ▶*[dt, et] U qed-. lemma cpys_inv_lift1_subst: ∀G,L,W1,W2,d,e. ⦃G, L⦄ ⊢ W1 ▶*[d, e] W2 → - ∀K,V1,i. ⇩[i+1] L ≡ K → ⇧[O, i+1] V1 ≡ W1 → + ∀K,V1,i. ⬇[i+1] L ≡ K → ⬆[O, i+1] V1 ≡ W1 → d ≤ yinj i → i < d + e → - ∃∃V2. ⦃G, K⦄ ⊢ V1 ▶*[O, ⫰(d+e-i)] V2 & ⇧[O, i+1] V2 ≡ W2. + ∃∃V2. ⦃G, K⦄ ⊢ V1 ▶*[O, ⫰(d+e-i)] V2 & ⬆[O, i+1] V2 ≡ W2. #G #L #W1 #W2 #d #e #HW12 #K #V1 #i #HLK #HVW1 #Hdi #Hide elim (cpys_inv_lift1_ge_up … HW12 … HLK … HVW1 ? ? ?) // >yplus_O1 yplus_SO2 diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/drops.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/drops.ma index bb357cd21..3a2546564 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/drops.ma @@ -23,7 +23,7 @@ include "basic_2/multiple/lifts_vector.ma". inductive drops (s:bool): list2 nat nat → relation lenv ≝ | drops_nil : ∀L. drops s (◊) L L | drops_cons: ∀L1,L,L2,des,d,e. - drops s des L1 L → ⇩[s, d, e] L ≡ L2 → drops s ({d, e} @ des) L1 L2 + drops s des L1 L → ⬇[s, d, e] L ≡ L2 → drops s ({d, e} @ des) L1 L2 . interpretation "iterated slicing (local environment) abstract" @@ -34,32 +34,32 @@ interpretation "iterated slicing (local environment) general" *) definition l_liftable1: relation2 lenv term → predicate bool ≝ - λR,s. ∀K,T. R K T → ∀L,d,e. ⇩[s, d, e] L ≡ K → - ∀U. ⇧[d, e] T ≡ U → R L U. + λR,s. ∀K,T. R K T → ∀L,d,e. ⬇[s, d, e] L ≡ K → + ∀U. ⬆[d, e] T ≡ U → R L U. definition l_liftables1: relation2 lenv term → predicate bool ≝ - λR,s. ∀L,K,des. ⇩*[s, des] L ≡ K → - ∀T,U. ⇧*[des] T ≡ U → R K T → R L U. + λR,s. ∀L,K,des. ⬇*[s, des] L ≡ K → + ∀T,U. ⬆*[des] T ≡ U → R K T → R L U. definition l_liftables1_all: relation2 lenv term → predicate bool ≝ - λR,s. ∀L,K,des. ⇩*[s, des] L ≡ K → - ∀Ts,Us. ⇧*[des] Ts ≡ Us → + λR,s. ∀L,K,des. ⬇*[s, des] L ≡ K → + ∀Ts,Us. ⬆*[des] Ts ≡ Us → all … (R K) Ts → all … (R L) Us. (* Basic inversion lemmas ***************************************************) -fact drops_inv_nil_aux: ∀L1,L2,s,des. ⇩*[s, des] L1 ≡ L2 → des = ◊ → L1 = L2. +fact drops_inv_nil_aux: ∀L1,L2,s,des. ⬇*[s, des] L1 ≡ L2 → des = ◊ → L1 = L2. #L1 #L2 #s #des * -L1 -L2 -des // #L1 #L #L2 #d #e #des #_ #_ #H destruct qed-. (* Basic_1: was: drop1_gen_pnil *) -lemma drops_inv_nil: ∀L1,L2,s. ⇩*[s, ◊] L1 ≡ L2 → L1 = L2. +lemma drops_inv_nil: ∀L1,L2,s. ⬇*[s, ◊] L1 ≡ L2 → L1 = L2. /2 width=4 by drops_inv_nil_aux/ qed-. -fact drops_inv_cons_aux: ∀L1,L2,s,des. ⇩*[s, des] L1 ≡ L2 → +fact drops_inv_cons_aux: ∀L1,L2,s,des. ⬇*[s, des] L1 ≡ L2 → ∀d,e,tl. des = {d, e} @ tl → - ∃∃L. ⇩*[s, tl] L1 ≡ L & ⇩[s, d, e] L ≡ L2. + ∃∃L. ⬇*[s, tl] L1 ≡ L & ⬇[s, d, e] L ≡ L2. #L1 #L2 #s #des * -L1 -L2 -des [ #L #d #e #tl #H destruct | #L1 #L #L2 #des #d #e #HT1 #HT2 #hd #he #tl #H destruct @@ -68,15 +68,15 @@ fact drops_inv_cons_aux: ∀L1,L2,s,des. ⇩*[s, des] L1 ≡ L2 → qed-. (* Basic_1: was: drop1_gen_pcons *) -lemma drops_inv_cons: ∀L1,L2,s,d,e,des. ⇩*[s, {d, e} @ des] L1 ≡ L2 → - ∃∃L. ⇩*[s, des] L1 ≡ L & ⇩[s, d, e] L ≡ L2. +lemma drops_inv_cons: ∀L1,L2,s,d,e,des. ⬇*[s, {d, e} @ des] L1 ≡ L2 → + ∃∃L. ⬇*[s, des] L1 ≡ L & ⬇[s, d, e] L ≡ L2. /2 width=3 by drops_inv_cons_aux/ qed-. lemma drops_inv_skip2: ∀I,s,des,des2,i. des ▭ i ≡ des2 → - ∀L1,K2,V2. ⇩*[s, des2] L1 ≡ K2. ⓑ{I} V2 → + ∀L1,K2,V2. ⬇*[s, des2] L1 ≡ K2. ⓑ{I} V2 → ∃∃K1,V1,des1. des + 1 ▭ i + 1 ≡ des1 + 1 & - ⇩*[s, des1] K1 ≡ K2 & - ⇧*[des1] V2 ≡ V1 & + ⬇*[s, des1] K1 ≡ K2 & + ⬆*[des1] V2 ≡ V1 & L1 = K1. ⓑ{I} V1. #I #s #des #des2 #i #H elim H -des -des2 -i [ #i #L1 #K2 #V2 #H @@ -96,8 +96,8 @@ qed-. (* Basic properties *********************************************************) (* Basic_1: was: drop1_skip_bind *) -lemma drops_skip: ∀L1,L2,s,des. ⇩*[s, des] L1 ≡ L2 → ∀V1,V2. ⇧*[des] V2 ≡ V1 → - ∀I. ⇩*[s, des + 1] L1.ⓑ{I}V1 ≡ L2.ⓑ{I}V2. +lemma drops_skip: ∀L1,L2,s,des. ⬇*[s, des] L1 ≡ L2 → ∀V1,V2. ⬆*[des] V2 ≡ V1 → + ∀I. ⬇*[s, des + 1] L1.ⓑ{I}V1 ≡ L2.ⓑ{I}V2. #L1 #L2 #s #des #H elim H -L1 -L2 -des [ #L #V1 #V2 #HV12 #I >(lifts_inv_nil … HV12) -HV12 // diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/drops_drop.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/drops_drop.ma index 207228887..99b69bdc7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/drops_drop.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/drops_drop.ma @@ -19,8 +19,8 @@ include "basic_2/multiple/drops.ma". (* Properties concerning basic local environment slicing ********************) -lemma drops_drop_trans: ∀L1,L,des. ⇩*[Ⓕ, des] L1 ≡ L → ∀L2,i. ⇩[i] L ≡ L2 → - ∃∃L0,des0,i0. ⇩[i0] L1 ≡ L0 & ⇩*[Ⓕ, des0] L0 ≡ L2 & +lemma drops_drop_trans: ∀L1,L,des. ⬇*[Ⓕ, des] L1 ≡ L → ∀L2,i. ⬇[i] L ≡ L2 → + ∃∃L0,des0,i0. ⬇[i0] L1 ≡ L0 & ⬇*[Ⓕ, des0] L0 ≡ L2 & @⦃i, des⦄ ≡ i0 & des ▭ i ≡ des0. #L1 #L #des #H elim H -L1 -L -des [ /2 width=7 by drops_nil, minuss_nil, at_nil, ex4_3_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/drops_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/drops_drops.ma index c4751028a..2ee3a07ff 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/drops_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/drops_drops.ma @@ -19,7 +19,7 @@ include "basic_2/multiple/drops_drop.ma". (* Main properties **********************************************************) (* Basic_1: was: drop1_trans *) -theorem drops_trans: ∀L,L2,s,des2. ⇩*[s, des2] L ≡ L2 → ∀L1,des1. ⇩*[s, des1] L1 ≡ L → - ⇩*[s, des2 @@ des1] L1 ≡ L2. +theorem drops_trans: ∀L,L2,s,des2. ⬇*[s, des2] L ≡ L2 → ∀L1,des1. ⬇*[s, des1] L1 ≡ L → + ⬇*[s, des2 @@ des1] L1 ≡ L2. #L #L2 #s #des2 #H elim H -L -L2 -des2 /3 width=3 by drops_cons/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/fqup.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/fqup.ma index 086505fdf..aa253f700 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/fqup.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/fqup.ma @@ -37,7 +37,7 @@ lemma fqup_strap2: ∀G1,G,G2,L1,L,L2,T1,T,T2. ⦃G1, L1, T1⦄ ⊐+ ⦃G2, L2, T2⦄. /2 width=5 by tri_TC_strap/ qed. -lemma fqup_drop: ∀G1,G2,L1,K1,K2,T1,T2,U1,e. ⇩[e] L1 ≡ K1 → ⇧[0, e] T1 ≡ U1 → +lemma fqup_drop: ∀G1,G2,L1,K1,K2,T1,T2,U1,e. ⬇[e] L1 ≡ K1 → ⬆[0, e] T1 ≡ U1 → ⦃G1, K1, T1⦄ ⊐+ ⦃G2, K2, T2⦄ → ⦃G1, L1, U1⦄ ⊐+ ⦃G2, K2, T2⦄. #G1 #G2 #L1 #K1 #K2 #T1 #T2 #U1 #e #HLK1 #HTU1 #HT12 elim (eq_or_gt … e) #H destruct [ >(drop_inv_O2 … HLK1) -L1 <(lift_inv_O2 … HTU1) -U1 // @@ -45,7 +45,7 @@ lemma fqup_drop: ∀G1,G2,L1,K1,K2,T1,T2,U1,e. ⇩[e] L1 ≡ K1 → ⇧[0, e] T1 ] qed-. -lemma fqup_lref: ∀I,G,L,K,V,i. ⇩[i] L ≡ K.ⓑ{I}V → ⦃G, L, #i⦄ ⊐+ ⦃G, K, V⦄. +lemma fqup_lref: ∀I,G,L,K,V,i. ⬇[i] L ≡ K.ⓑ{I}V → ⦃G, L, #i⦄ ⊐+ ⦃G, K, V⦄. /3 width=6 by fqu_lref_O, fqu_fqup, lift_lref_ge, fqup_drop/ qed. lemma fqup_pair_sn: ∀I,G,L,V,T. ⦃G, L, ②{I}V.T⦄ ⊐+ ⦃G, L, V⦄. diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/fqus.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/fqus.ma index 6c990cace..048dbf5ad 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/fqus.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/fqus.ma @@ -56,7 +56,7 @@ lemma fqus_strap2: ∀G1,G,G2,L1,L,L2,T1,T,T2. ⦃G1, L1, T1⦄ ⊐⸮ ⦃G, L, /2 width=5 by tri_TC_strap/ qed-. lemma fqus_drop: ∀G1,G2,K1,K2,T1,T2. ⦃G1, K1, T1⦄ ⊐* ⦃G2, K2, T2⦄ → - ∀L1,U1,e. ⇩[e] L1 ≡ K1 → ⇧[0, e] T1 ≡ U1 → + ∀L1,U1,e. ⬇[e] L1 ≡ K1 → ⬆[0, e] T1 ≡ U1 → ⦃G1, L1, U1⦄ ⊐* ⦃G2, K2, T2⦄. #G1 #G2 #K1 #K2 #T1 #T2 #H @(fqus_ind … H) -G2 -K2 -T2 /3 width=5 by fqus_strap1, fquq_fqus, fquq_drop/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/frees.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/frees.ma index b803a05b6..f7269bc09 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/frees.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/frees.ma @@ -20,9 +20,9 @@ include "basic_2/substitution/drop.ma". (* CONTEXT-SENSITIVE FREE VARIABLES *****************************************) inductive frees: relation4 ynat lenv term nat ≝ -| frees_eq: ∀L,U,d,i. (∀T. ⇧[i, 1] T ≡ U → ⊥) → frees d L U i +| frees_eq: ∀L,U,d,i. (∀T. ⬆[i, 1] T ≡ U → ⊥) → frees d L U i | frees_be: ∀I,L,K,U,W,d,i,j. d ≤ yinj j → j < i → - (∀T. ⇧[j, 1] T ≡ U → ⊥) → ⇩[j]L ≡ K.ⓑ{I}W → + (∀T. ⬆[j, 1] T ≡ U → ⊥) → ⬇[j]L ≡ K.ⓑ{I}W → frees 0 K W (i-j-1) → frees d L U i. interpretation @@ -35,9 +35,9 @@ definition frees_trans: predicate (relation3 lenv term term) ≝ (* Basic inversion lemmas ***************************************************) lemma frees_inv: ∀L,U,d,i. L ⊢ i ϵ 𝐅*[d]⦃U⦄ → - (∀T. ⇧[i, 1] T ≡ U → ⊥) ∨ - ∃∃I,K,W,j. d ≤ yinj j & j < i & (∀T. ⇧[j, 1] T ≡ U → ⊥) & - ⇩[j]L ≡ K.ⓑ{I}W & K ⊢ (i-j-1) ϵ 𝐅*[yinj 0]⦃W⦄. + (∀T. ⬆[i, 1] T ≡ U → ⊥) ∨ + ∃∃I,K,W,j. d ≤ yinj j & j < i & (∀T. ⬆[j, 1] T ≡ U → ⊥) & + ⬇[j]L ≡ K.ⓑ{I}W & K ⊢ (i-j-1) ϵ 𝐅*[yinj 0]⦃W⦄. #L #U #d #i * -L -U -d -i /4 width=9 by ex5_4_intro, or_intror, or_introl/ qed-. @@ -51,7 +51,7 @@ qed-. lemma frees_inv_lref: ∀L,d,j,i. L ⊢ i ϵ 𝐅*[d]⦃#j⦄ → j = i ∨ - ∃∃I,K,W. d ≤ yinj j & j < i & ⇩[j] L ≡ K.ⓑ{I}W & K ⊢ (i-j-1) ϵ 𝐅*[yinj 0]⦃W⦄. + ∃∃I,K,W. d ≤ yinj j & j < i & ⬇[j] L ≡ K.ⓑ{I}W & K ⊢ (i-j-1) ϵ 𝐅*[yinj 0]⦃W⦄. #L #d #x #i #H elim (frees_inv … H) -H [ /4 width=2 by nlift_inv_lref_be_SO, or_introl/ | * #I #K #W #j #Hdj #Hji #Hnx #HLK #HW @@ -76,7 +76,7 @@ lemma frees_inv_lref_ge: ∀L,d,j,i. L ⊢ i ϵ 𝐅*[d]⦃#j⦄ → i ≤ j → qed-. lemma frees_inv_lref_lt: ∀L,d,j,i.L ⊢ i ϵ 𝐅*[d]⦃#j⦄ → j < i → - ∃∃I,K,W. d ≤ yinj j & ⇩[j] L ≡ K.ⓑ{I}W & K ⊢ (i-j-1) ϵ 𝐅*[yinj 0]⦃W⦄. + ∃∃I,K,W. d ≤ yinj j & ⬇[j] L ≡ K.ⓑ{I}W & K ⊢ (i-j-1) ϵ 𝐅*[yinj 0]⦃W⦄. #L #d #j #i #H #Hji elim (frees_inv_lref … H) -H [ #H elim (lt_refl_false j) // | * /2 width=5 by ex3_3_intro/ @@ -114,7 +114,7 @@ qed-. lemma frees_lref_eq: ∀L,d,i. L ⊢ i ϵ 𝐅*[d]⦃#i⦄. /3 width=7 by frees_eq, lift_inv_lref2_be/ qed. -lemma frees_lref_be: ∀I,L,K,W,d,i,j. d ≤ yinj j → j < i → ⇩[j]L ≡ K.ⓑ{I}W → +lemma frees_lref_be: ∀I,L,K,W,d,i,j. d ≤ yinj j → j < i → ⬇[j]L ≡ K.ⓑ{I}W → K ⊢ i-j-1 ϵ 𝐅*[0]⦃W⦄ → L ⊢ i ϵ 𝐅*[d]⦃#j⦄. /3 width=9 by frees_be, lift_inv_lref2_be/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/frees_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/frees_lift.ma index 1b66bd0b7..14b5eff6c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/frees_lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/frees_lift.ma @@ -52,7 +52,7 @@ lemma frees_dec: ∀L,U,d,i. Decidable (frees d L U i). ] qed-. -lemma frees_S: ∀L,U,d,i. L ⊢ i ϵ 𝐅*[yinj d]⦃U⦄ → ∀I,K,W. ⇩[d] L ≡ K.ⓑ{I}W → +lemma frees_S: ∀L,U,d,i. L ⊢ i ϵ 𝐅*[yinj d]⦃U⦄ → ∀I,K,W. ⬇[d] L ≡ K.ⓑ{I}W → (K ⊢ i-d-1 ϵ 𝐅*[0]⦃W⦄ → ⊥) → L ⊢ i ϵ 𝐅*[⫯d]⦃U⦄. #L #U #d #i #H elim (frees_inv … H) -H /3 width=2 by frees_eq/ * #I #K #W #j #Hdj #Hji #HnU #HLK #HW #I0 #K0 #W0 #HLK0 #HnW0 @@ -75,8 +75,8 @@ qed. (* Properties on relocation *************************************************) lemma frees_lift_ge: ∀K,T,d,i. K ⊢ i ϵ𝐅*[d]⦃T⦄ → - ∀L,s,d0,e0. ⇩[s, d0, e0] L ≡ K → - ∀U. ⇧[d0, e0] T ≡ U → d0 ≤ i → + ∀L,s,d0,e0. ⬇[s, d0, e0] L ≡ K → + ∀U. ⬆[d0, e0] T ≡ U → d0 ≤ i → L ⊢ i+e0 ϵ 𝐅*[d]⦃U⦄. #K #T #d #i #H elim H -K -T -d -i [ #K #T #d #i #HnT #L #s #d0 #e0 #_ #U #HTU #Hd0i -K -s @@ -103,8 +103,8 @@ qed. (* Inversion lemmas on relocation *******************************************) lemma frees_inv_lift_be: ∀L,U,d,i. L ⊢ i ϵ 𝐅*[d]⦃U⦄ → - ∀K,s,d0,e0. ⇩[s, d0, e0+1] L ≡ K → - ∀T. ⇧[d0, e0+1] T ≡ U → d0 ≤ i → i ≤ d0 + e0 → ⊥. + ∀K,s,d0,e0. ⬇[s, d0, e0+1] L ≡ K → + ∀T. ⬆[d0, e0+1] T ≡ U → d0 ≤ i → i ≤ d0 + e0 → ⊥. #L #U #d #i #H elim H -L -U -d -i [ #L #U #d #i #HnU #K #s #d0 #e0 #_ #T #HTU #Hd0i #Hide0 elim (lift_split … HTU i e0) -HTU /2 width=2 by/ @@ -121,8 +121,8 @@ lemma frees_inv_lift_be: ∀L,U,d,i. L ⊢ i ϵ 𝐅*[d]⦃U⦄ → qed-. lemma frees_inv_lift_ge: ∀L,U,d,i. L ⊢ i ϵ 𝐅*[d]⦃U⦄ → - ∀K,s,d0,e0. ⇩[s, d0, e0] L ≡ K → - ∀T. ⇧[d0, e0] T ≡ U → d0 + e0 ≤ i → + ∀K,s,d0,e0. ⬇[s, d0, e0] L ≡ K → + ∀T. ⬆[d0, e0] T ≡ U → d0 + e0 ≤ i → K ⊢ i-e0 ϵ𝐅*[d-yinj e0]⦃T⦄. #L #U #d #i #H elim H -L -U -d -i [ #L #U #d #i #HnU #K #s #d0 #e0 #HLK #T #HTU #Hde0i -L -s diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/lifts.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/lifts.ma index 272105255..8d3d9ccd5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/lifts.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/lifts.ma @@ -21,7 +21,7 @@ include "basic_2/multiple/mr2_plus.ma". inductive lifts: list2 nat nat → relation term ≝ | lifts_nil : ∀T. lifts (◊) T T | lifts_cons: ∀T1,T,T2,des,d,e. - ⇧[d,e] T1 ≡ T → lifts des T T2 → lifts ({d, e} @ des) T1 T2 + ⬆[d,e] T1 ≡ T → lifts des T T2 → lifts ({d, e} @ des) T1 T2 . interpretation "generic relocation (term)" @@ -29,29 +29,29 @@ interpretation "generic relocation (term)" (* Basic inversion lemmas ***************************************************) -fact lifts_inv_nil_aux: ∀T1,T2,des. ⇧*[des] T1 ≡ T2 → des = ◊ → T1 = T2. +fact lifts_inv_nil_aux: ∀T1,T2,des. ⬆*[des] T1 ≡ T2 → des = ◊ → T1 = T2. #T1 #T2 #des * -T1 -T2 -des // #T1 #T #T2 #d #e #des #_ #_ #H destruct qed-. -lemma lifts_inv_nil: ∀T1,T2. ⇧*[◊] T1 ≡ T2 → T1 = T2. +lemma lifts_inv_nil: ∀T1,T2. ⬆*[◊] T1 ≡ T2 → T1 = T2. /2 width=3 by lifts_inv_nil_aux/ qed-. -fact lifts_inv_cons_aux: ∀T1,T2,des. ⇧*[des] T1 ≡ T2 → +fact lifts_inv_cons_aux: ∀T1,T2,des. ⬆*[des] T1 ≡ T2 → ∀d,e,tl. des = {d, e} @ tl → - ∃∃T. ⇧[d, e] T1 ≡ T & ⇧*[tl] T ≡ T2. + ∃∃T. ⬆[d, e] T1 ≡ T & ⬆*[tl] T ≡ T2. #T1 #T2 #des * -T1 -T2 -des [ #T #d #e #tl #H destruct | #T1 #T #T2 #des #d #e #HT1 #HT2 #hd #he #tl #H destruct /2 width=3 by ex2_intro/ qed-. -lemma lifts_inv_cons: ∀T1,T2,d,e,des. ⇧*[{d, e} @ des] T1 ≡ T2 → - ∃∃T. ⇧[d, e] T1 ≡ T & ⇧*[des] T ≡ T2. +lemma lifts_inv_cons: ∀T1,T2,d,e,des. ⬆*[{d, e} @ des] T1 ≡ T2 → + ∃∃T. ⬆[d, e] T1 ≡ T & ⬆*[des] T ≡ T2. /2 width=3 by lifts_inv_cons_aux/ qed-. (* Basic_1: was: lift1_sort *) -lemma lifts_inv_sort1: ∀T2,k,des. ⇧*[des] ⋆k ≡ T2 → T2 = ⋆k. +lemma lifts_inv_sort1: ∀T2,k,des. ⬆*[des] ⋆k ≡ T2 → T2 = ⋆k. #T2 #k #des elim des -des [ #H <(lifts_inv_nil … H) -H // | #d #e #des #IH #H @@ -61,7 +61,7 @@ lemma lifts_inv_sort1: ∀T2,k,des. ⇧*[des] ⋆k ≡ T2 → T2 = ⋆k. qed-. (* Basic_1: was: lift1_lref *) -lemma lifts_inv_lref1: ∀T2,des,i1. ⇧*[des] #i1 ≡ T2 → +lemma lifts_inv_lref1: ∀T2,des,i1. ⬆*[des] #i1 ≡ T2 → ∃∃i2. @⦃i1, des⦄ ≡ i2 & T2 = #i2. #T2 #des elim des -des [ #i1 #H <(lifts_inv_nil … H) -H /2 width=3 by at_nil, ex2_intro/ @@ -72,7 +72,7 @@ lemma lifts_inv_lref1: ∀T2,des,i1. ⇧*[des] #i1 ≡ T2 → ] qed-. -lemma lifts_inv_gref1: ∀T2,p,des. ⇧*[des] §p ≡ T2 → T2 = §p. +lemma lifts_inv_gref1: ∀T2,p,des. ⬆*[des] §p ≡ T2 → T2 = §p. #T2 #p #des elim des -des [ #H <(lifts_inv_nil … H) -H // | #d #e #des #IH #H @@ -82,8 +82,8 @@ lemma lifts_inv_gref1: ∀T2,p,des. ⇧*[des] §p ≡ T2 → T2 = §p. qed-. (* Basic_1: was: lift1_bind *) -lemma lifts_inv_bind1: ∀a,I,T2,des,V1,U1. ⇧*[des] ⓑ{a,I} V1. U1 ≡ T2 → - ∃∃V2,U2. ⇧*[des] V1 ≡ V2 & ⇧*[des + 1] U1 ≡ U2 & +lemma lifts_inv_bind1: ∀a,I,T2,des,V1,U1. ⬆*[des] ⓑ{a,I} V1. U1 ≡ T2 → + ∃∃V2,U2. ⬆*[des] V1 ≡ V2 & ⬆*[des + 1] U1 ≡ U2 & T2 = ⓑ{a,I} V2. U2. #a #I #T2 #des elim des -des [ #V1 #U1 #H @@ -97,8 +97,8 @@ lemma lifts_inv_bind1: ∀a,I,T2,des,V1,U1. ⇧*[des] ⓑ{a,I} V1. U1 ≡ T2 → qed-. (* Basic_1: was: lift1_flat *) -lemma lifts_inv_flat1: ∀I,T2,des,V1,U1. ⇧*[des] ⓕ{I} V1. U1 ≡ T2 → - ∃∃V2,U2. ⇧*[des] V1 ≡ V2 & ⇧*[des] U1 ≡ U2 & +lemma lifts_inv_flat1: ∀I,T2,des,V1,U1. ⬆*[des] ⓕ{I} V1. U1 ≡ T2 → + ∃∃V2,U2. ⬆*[des] V1 ≡ V2 & ⬆*[des] U1 ≡ U2 & T2 = ⓕ{I} V2. U2. #I #T2 #des elim des -des [ #V1 #U1 #H @@ -113,19 +113,19 @@ qed-. (* Basic forward lemmas *****************************************************) -lemma lifts_simple_dx: ∀T1,T2,des. ⇧*[des] T1 ≡ T2 → 𝐒⦃T1⦄ → 𝐒⦃T2⦄. +lemma lifts_simple_dx: ∀T1,T2,des. ⬆*[des] T1 ≡ T2 → 𝐒⦃T1⦄ → 𝐒⦃T2⦄. #T1 #T2 #des #H elim H -T1 -T2 -des /3 width=5 by lift_simple_dx/ qed-. -lemma lifts_simple_sn: ∀T1,T2,des. ⇧*[des] T1 ≡ T2 → 𝐒⦃T2⦄ → 𝐒⦃T1⦄. +lemma lifts_simple_sn: ∀T1,T2,des. ⬆*[des] T1 ≡ T2 → 𝐒⦃T2⦄ → 𝐒⦃T1⦄. #T1 #T2 #des #H elim H -T1 -T2 -des /3 width=5 by lift_simple_sn/ qed-. (* Basic properties *********************************************************) -lemma lifts_bind: ∀a,I,T2,V1,V2,des. ⇧*[des] V1 ≡ V2 → - ∀T1. ⇧*[des + 1] T1 ≡ T2 → - ⇧*[des] ⓑ{a,I} V1. T1 ≡ ⓑ{a,I} V2. T2. +lemma lifts_bind: ∀a,I,T2,V1,V2,des. ⬆*[des] V1 ≡ V2 → + ∀T1. ⬆*[des + 1] T1 ≡ T2 → + ⬆*[des] ⓑ{a,I} V1. T1 ≡ ⓑ{a,I} V2. T2. #a #I #T2 #V1 #V2 #des #H elim H -V1 -V2 -des [ #V #T1 #H >(lifts_inv_nil … H) -H // | #V1 #V #V2 #des #d #e #HV1 #_ #IHV #T1 #H @@ -133,9 +133,9 @@ lemma lifts_bind: ∀a,I,T2,V1,V2,des. ⇧*[des] V1 ≡ V2 → ] qed. -lemma lifts_flat: ∀I,T2,V1,V2,des. ⇧*[des] V1 ≡ V2 → - ∀T1. ⇧*[des] T1 ≡ T2 → - ⇧*[des] ⓕ{I} V1. T1 ≡ ⓕ{I} V2. T2. +lemma lifts_flat: ∀I,T2,V1,V2,des. ⬆*[des] V1 ≡ V2 → + ∀T1. ⬆*[des] T1 ≡ T2 → + ⬆*[des] ⓕ{I} V1. T1 ≡ ⓕ{I} V2. T2. #I #T2 #V1 #V2 #des #H elim H -V1 -V2 -des [ #V #T1 #H >(lifts_inv_nil … H) -H // | #V1 #V #V2 #des #d #e #HV1 #_ #IHV #T1 #H @@ -143,7 +143,7 @@ lemma lifts_flat: ∀I,T2,V1,V2,des. ⇧*[des] V1 ≡ V2 → ] qed. -lemma lifts_total: ∀des,T1. ∃T2. ⇧*[des] T1 ≡ T2. +lemma lifts_total: ∀des,T1. ∃T2. ⬆*[des] T1 ≡ T2. #des elim des -des /2 width=2 by lifts_nil, ex_intro/ #d #e #des #IH #T1 elim (lift_total T1 d e) #T #HT1 elim (IH T) -IH /3 width=4 by lifts_cons, ex_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/lifts_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/lifts_lift.ma index 5761094ab..ae4801a5e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/lifts_lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/lifts_lift.ma @@ -21,8 +21,8 @@ include "basic_2/multiple/lifts.ma". (* Properties concerning basic term relocation ******************************) (* Basic_1: was: lift1_xhg (right to left) *) -lemma lifts_lift_trans_le: ∀T1,T,des. ⇧*[des] T1 ≡ T → ∀T2. ⇧[0, 1] T ≡ T2 → - ∃∃T0. ⇧[0, 1] T1 ≡ T0 & ⇧*[des + 1] T0 ≡ T2. +lemma lifts_lift_trans_le: ∀T1,T,des. ⬆*[des] T1 ≡ T → ∀T2. ⬆[0, 1] T ≡ T2 → + ∃∃T0. ⬆[0, 1] T1 ≡ T0 & ⬆*[des + 1] T0 ≡ T2. #T1 #T #des #H elim H -T1 -T -des [ /2 width=3/ | #T1 #T3 #T #des #d #e #HT13 #_ #IHT13 #T2 #HT2 @@ -34,9 +34,9 @@ qed-. (* Basic_1: was: lift1_free (right to left) *) lemma lifts_lift_trans: ∀des,i,i0. @⦃i, des⦄ ≡ i0 → ∀des0. des + 1 ▭ i + 1 ≡ des0 + 1 → - ∀T1,T0. ⇧*[des0] T1 ≡ T0 → - ∀T2. ⇧[O, i0 + 1] T0 ≡ T2 → - ∃∃T. ⇧[0, i + 1] T1 ≡ T & ⇧*[des] T ≡ T2. + ∀T1,T0. ⬆*[des0] T1 ≡ T0 → + ∀T2. ⬆[O, i0 + 1] T0 ≡ T2 → + ∃∃T. ⬆[0, i + 1] T1 ≡ T & ⬆*[des] T ≡ T2. #des elim des -des normalize [ #i #x #H1 #des0 #H2 #T1 #T0 #HT10 #T2 <(at_inv_nil … H1) -x #HT02 diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/lifts_lift_vector.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/lifts_lift_vector.ma index 559e62659..ecba0fd77 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/lifts_lift_vector.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/lifts_lift_vector.ma @@ -21,9 +21,9 @@ include "basic_2/multiple/lifts_vector.ma". (* Main properties **********************************************************) (* Basic_1: was: lifts1_xhg (right to left) *) -lemma liftsv_liftv_trans_le: ∀T1s,Ts,des. ⇧*[des] T1s ≡ Ts → - ∀T2s:list term. ⇧[0, 1] Ts ≡ T2s → - ∃∃T0s. ⇧[0, 1] T1s ≡ T0s & ⇧*[des + 1] T0s ≡ T2s. +lemma liftsv_liftv_trans_le: ∀T1s,Ts,des. ⬆*[des] T1s ≡ Ts → + ∀T2s:list term. ⬆[0, 1] Ts ≡ T2s → + ∃∃T0s. ⬆[0, 1] T1s ≡ T0s & ⬆*[des + 1] T0s ≡ T2s. #T1s #Ts #des #H elim H -T1s -Ts [ #T1s #H >(liftv_inv_nil1 … H) -T1s /2 width=3/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/lifts_lifts.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/lifts_lifts.ma index d72f56868..739f79009 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/lifts_lifts.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/lifts_lifts.ma @@ -19,7 +19,7 @@ include "basic_2/multiple/lifts_lift.ma". (* Main properties **********************************************************) (* Basic_1: was: lift1_lift1 (left to right) *) -theorem lifts_trans: ∀T1,T,des1. ⇧*[des1] T1 ≡ T → ∀T2:term. ∀des2. ⇧*[des2] T ≡ T2 → - ⇧*[des1 @@ des2] T1 ≡ T2. +theorem lifts_trans: ∀T1,T,des1. ⬆*[des1] T1 ≡ T → ∀T2:term. ∀des2. ⬆*[des2] T ≡ T2 → + ⬆*[des1 @@ des2] T1 ≡ T2. #T1 #T #des1 #H elim H -T1 -T -des1 // /3 width=3/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/lifts_vector.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/lifts_vector.ma index d6878c0a1..c285d520a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/lifts_vector.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/lifts_vector.ma @@ -20,7 +20,7 @@ include "basic_2/multiple/lifts.ma". inductive liftsv (des:list2 nat nat) : relation (list term) ≝ | liftsv_nil : liftsv des (◊) (◊) | liftsv_cons: ∀T1s,T2s,T1,T2. - ⇧*[des] T1 ≡ T2 → liftsv des T1s T2s → + ⬆*[des] T1 ≡ T2 → liftsv des T1s T2s → liftsv des (T1 @ T1s) (T2 @ T2s) . @@ -30,8 +30,8 @@ interpretation "generic relocation (vector)" (* Basic inversion lemmas ***************************************************) (* Basic_1: was: lifts1_flat (left to right) *) -lemma lifts_inv_applv1: ∀V1s,U1,T2,des. ⇧*[des] Ⓐ V1s. U1 ≡ T2 → - ∃∃V2s,U2. ⇧*[des] V1s ≡ V2s & ⇧*[des] U1 ≡ U2 & +lemma lifts_inv_applv1: ∀V1s,U1,T2,des. ⬆*[des] Ⓐ V1s. U1 ≡ T2 → + ∃∃V2s,U2. ⬆*[des] V1s ≡ V2s & ⬆*[des] U1 ≡ U2 & T2 = Ⓐ V2s. U2. #V1s elim V1s -V1s normalize [ #T1 #T2 #des #HT12 @@ -46,8 +46,8 @@ qed-. (* Basic properties *********************************************************) (* Basic_1: was: lifts1_flat (right to left) *) -lemma lifts_applv: ∀V1s,V2s,des. ⇧*[des] V1s ≡ V2s → - ∀T1,T2. ⇧*[des] T1 ≡ T2 → - ⇧*[des] Ⓐ V1s. T1 ≡ Ⓐ V2s. T2. +lemma lifts_applv: ∀V1s,V2s,des. ⬆*[des] V1s ≡ V2s → + ∀T1,T2. ⬆*[des] T1 ≡ T2 → + ⬆*[des] Ⓐ V1s. T1 ≡ Ⓐ V2s. T2. #V1s #V2s #des #H elim H -V1s -V2s /3 width=1 by lifts_flat/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/lleq.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/lleq.ma index 7be12035e..666d22eec 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/lleq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/lleq.ma @@ -36,7 +36,7 @@ lemma lleq_ind: ∀R:relation4 ynat term lenv lenv. ( ∀L1,L2,d,i. |L1| = |L2| → yinj i < d → R d (#i) L1 L2 ) → ( ∀I,L1,L2,K1,K2,V,d,i. d ≤ yinj i → - ⇩[i] L1 ≡ K1.ⓑ{I}V → ⇩[i] L2 ≡ K2.ⓑ{I}V → + ⬇[i] L1 ≡ K1.ⓑ{I}V → ⬇[i] L2 ≡ K2.ⓑ{I}V → K1 ≡[V, yinj O] K2 → R (yinj O) V K1 K2 → R d (#i) L1 L2 ) → ( ∀L1,L2,d,i. |L1| = |L2| → |L1| ≤ i → |L2| ≤ i → R d (#i) L1 L2 @@ -71,19 +71,19 @@ lemma lleq_fwd_length: ∀L1,L2,T,d. L1 ≡[T, d] L2 → |L1| = |L2|. lemma lleq_fwd_lref: ∀L1,L2,d,i. L1 ≡[#i, d] L2 → ∨∨ |L1| ≤ i ∧ |L2| ≤ i | yinj i < d - | ∃∃I,K1,K2,V. ⇩[i] L1 ≡ K1.ⓑ{I}V & - ⇩[i] L2 ≡ K2.ⓑ{I}V & + | ∃∃I,K1,K2,V. ⬇[i] L1 ≡ K1.ⓑ{I}V & + ⬇[i] L2 ≡ K2.ⓑ{I}V & K1 ≡[V, yinj 0] K2 & d ≤ yinj i. #L1 #L2 #d #i #H elim (llpx_sn_fwd_lref … H) /2 width=1/ * /3 width=7 by or3_intro2, ex4_4_intro/ qed-. -lemma lleq_fwd_drop_sn: ∀L1,L2,T,d. L1 ≡[d, T] L2 → ∀K1,i. ⇩[i] L1 ≡ K1 → - ∃K2. ⇩[i] L2 ≡ K2. +lemma lleq_fwd_drop_sn: ∀L1,L2,T,d. L1 ≡[d, T] L2 → ∀K1,i. ⬇[i] L1 ≡ K1 → + ∃K2. ⬇[i] L2 ≡ K2. /2 width=7 by llpx_sn_fwd_drop_sn/ qed-. -lemma lleq_fwd_drop_dx: ∀L1,L2,T,d. L1 ≡[d, T] L2 → ∀K2,i. ⇩[i] L2 ≡ K2 → - ∃K1. ⇩[i] L1 ≡ K1. +lemma lleq_fwd_drop_dx: ∀L1,L2,T,d. L1 ≡[d, T] L2 → ∀K2,i. ⬇[i] L2 ≡ K2 → + ∃K1. ⬇[i] L1 ≡ K1. /2 width=7 by llpx_sn_fwd_drop_dx/ qed-. lemma lleq_fwd_bind_sn: ∀a,I,L1,L2,V,T,d. @@ -111,7 +111,7 @@ lemma lleq_skip: ∀L1,L2,d,i. yinj i < d → |L1| = |L2| → L1 ≡[#i, d] L2. /2 width=1 by llpx_sn_skip/ qed. lemma lleq_lref: ∀I,L1,L2,K1,K2,V,d,i. d ≤ yinj i → - ⇩[i] L1 ≡ K1.ⓑ{I}V → ⇩[i] L2 ≡ K2.ⓑ{I}V → + ⬇[i] L1 ≡ K1.ⓑ{I}V → ⬇[i] L2 ≡ K2.ⓑ{I}V → K1 ≡[V, 0] K2 → L1 ≡[#i, d] L2. /2 width=9 by llpx_sn_lref/ qed. @@ -142,7 +142,7 @@ lemma lleq_sym: ∀d,T. symmetric … (lleq d T). qed-. lemma lleq_ge_up: ∀L1,L2,U,dt. L1 ≡[U, dt] L2 → - ∀T,d,e. ⇧[d, e] T ≡ U → + ∀T,d,e. ⬆[d, e] T ≡ U → dt ≤ d + e → L1 ≡[U, d] L2. /2 width=6 by llpx_sn_ge_up/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/lleq_alt.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/lleq_alt.ma index 38b34aec5..2c6b8feb6 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/lleq_alt.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/lleq_alt.ma @@ -21,7 +21,7 @@ include "basic_2/multiple/lleq.ma". theorem lleq_intro_alt: ∀L1,L2,T,d. |L1| = |L2| → (∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → L1 ⊢ i ϵ 𝐅*[d]⦃T⦄ → - ⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 → + ⬇[i] L1 ≡ K1.ⓑ{I1}V1 → ⬇[i] L2 ≡ K2.ⓑ{I2}V2 → I1 = I2 ∧ V1 = V2 ) → L1 ≡[T, d] L2. #L1 #L2 #T #d #HL12 #IH @llpx_sn_alt_inv_llpx_sn @conj // -HL12 @@ -32,7 +32,7 @@ qed. theorem lleq_inv_alt: ∀L1,L2,T,d. L1 ≡[T, d] L2 → |L1| = |L2| ∧ ∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → L1 ⊢ i ϵ 𝐅*[d]⦃T⦄ → - ⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 → + ⬇[i] L1 ≡ K1.ⓑ{I1}V1 → ⬇[i] L2 ≡ K2.ⓑ{I2}V2 → I1 = I2 ∧ V1 = V2. #L1 #L2 #T #d #H elim (llpx_sn_llpx_sn_alt … H) -H #HL12 #IH @conj // diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/lleq_alt_rec.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/lleq_alt_rec.ma index b8646bc0e..692ece149 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/lleq_alt_rec.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/lleq_alt_rec.ma @@ -20,8 +20,8 @@ include "basic_2/multiple/lleq.ma". (* Alternative definition (recursive) ***************************************) theorem lleq_intro_alt_r: ∀L1,L2,T,d. |L1| = |L2| → - (∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⇧[i, 1] U ≡ T → ⊥) → - ⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 → + (∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⬆[i, 1] U ≡ T → ⊥) → + ⬇[i] L1 ≡ K1.ⓑ{I1}V1 → ⬇[i] L2 ≡ K2.ⓑ{I2}V2 → ∧∧ I1 = I2 & V1 = V2 & K1 ≡[V1, 0] K2 ) → L1 ≡[T, d] L2. #L1 #L2 #T #d #HL12 #IH @llpx_sn_intro_alt_r // -HL12 @@ -31,8 +31,8 @@ qed. theorem lleq_ind_alt_r: ∀S:relation4 ynat term lenv lenv. (∀L1,L2,T,d. |L1| = |L2| → ( - ∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⇧[i, 1] U ≡ T → ⊥) → - ⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 → + ∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⬆[i, 1] U ≡ T → ⊥) → + ⬇[i] L1 ≡ K1.ⓑ{I1}V1 → ⬇[i] L2 ≡ K2.ⓑ{I2}V2 → ∧∧ I1 = I2 & V1 = V2 & K1 ≡[V1, 0] K2 & S 0 V1 K1 K2 ) → S d T L1 L2) → ∀L1,L2,T,d. L1 ≡[T, d] L2 → S d T L1 L2. @@ -44,8 +44,8 @@ qed-. theorem lleq_inv_alt_r: ∀L1,L2,T,d. L1 ≡[T, d] L2 → |L1| = |L2| ∧ - ∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⇧[i, 1] U ≡ T → ⊥) → - ⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 → + ∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⬆[i, 1] U ≡ T → ⊥) → + ⬇[i] L1 ≡ K1.ⓑ{I1}V1 → ⬇[i] L2 ≡ K2.ⓑ{I2}V2 → ∧∧ I1 = I2 & V1 = V2 & K1 ≡[V1, 0] K2. #L1 #L2 #T #d #H elim (llpx_sn_inv_alt_r … H) -H #HL12 #IH @conj // diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/lleq_drop.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/lleq_drop.ma index 6dc43267a..2a31e44dc 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/lleq_drop.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/lleq_drop.ma @@ -49,34 +49,34 @@ lemma lleq_llpx_sn_conf: ∀R. lleq_transitive R → (* Advanced inversion lemmas ************************************************) lemma lleq_inv_lref_ge_dx: ∀L1,L2,d,i. L1 ≡[#i, d] L2 → d ≤ i → - ∀I,K2,V. ⇩[i] L2 ≡ K2.ⓑ{I}V → - ∃∃K1. ⇩[i] L1 ≡ K1.ⓑ{I}V & K1 ≡[V, 0] K2. + ∀I,K2,V. ⬇[i] L2 ≡ K2.ⓑ{I}V → + ∃∃K1. ⬇[i] L1 ≡ K1.ⓑ{I}V & K1 ≡[V, 0] K2. #L1 #L2 #d #i #H #Hdi #I #K2 #V #HLK2 elim (llpx_sn_inv_lref_ge_dx … H … HLK2) -L2 /2 width=3 by ex2_intro/ qed-. lemma lleq_inv_lref_ge_sn: ∀L1,L2,d,i. L1 ≡[#i, d] L2 → d ≤ i → - ∀I,K1,V. ⇩[i] L1 ≡ K1.ⓑ{I}V → - ∃∃K2. ⇩[i] L2 ≡ K2.ⓑ{I}V & K1 ≡[V, 0] K2. + ∀I,K1,V. ⬇[i] L1 ≡ K1.ⓑ{I}V → + ∃∃K2. ⬇[i] L2 ≡ K2.ⓑ{I}V & K1 ≡[V, 0] K2. #L1 #L2 #d #i #H #Hdi #I1 #K1 #V #HLK1 elim (llpx_sn_inv_lref_ge_sn … H … HLK1) -L1 /2 width=3 by ex2_intro/ qed-. lemma lleq_inv_lref_ge_bi: ∀L1,L2,d,i. L1 ≡[#i, d] L2 → d ≤ i → ∀I1,I2,K1,K2,V1,V2. - ⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 → + ⬇[i] L1 ≡ K1.ⓑ{I1}V1 → ⬇[i] L2 ≡ K2.ⓑ{I2}V2 → ∧∧ I1 = I2 & K1 ≡[V1, 0] K2 & V1 = V2. /2 width=8 by llpx_sn_inv_lref_ge_bi/ qed-. lemma lleq_inv_lref_ge: ∀L1,L2,d,i. L1 ≡[#i, d] L2 → d ≤ i → - ∀I,K1,K2,V. ⇩[i] L1 ≡ K1.ⓑ{I}V → ⇩[i] L2 ≡ K2.ⓑ{I}V → + ∀I,K1,K2,V. ⬇[i] L1 ≡ K1.ⓑ{I}V → ⬇[i] L2 ≡ K2.ⓑ{I}V → K1 ≡[V, 0] K2. #L1 #L2 #d #i #HL12 #Hdi #I #K1 #K2 #V #HLK1 #HLK2 elim (lleq_inv_lref_ge_bi … HL12 … HLK1 HLK2) // qed-. lemma lleq_inv_S: ∀L1,L2,T,d. L1 ≡[T, d+1] L2 → - ∀I,K1,K2,V. ⇩[d] L1 ≡ K1.ⓑ{I}V → ⇩[d] L2 ≡ K2.ⓑ{I}V → + ∀I,K1,K2,V. ⬇[d] L1 ≡ K1.ⓑ{I}V → ⬇[d] L2 ≡ K2.ⓑ{I}V → K1 ≡[V, 0] K2 → L1 ≡[T, d] L2. /2 width=9 by llpx_sn_inv_S/ qed-. @@ -87,17 +87,17 @@ lemma lleq_inv_bind_O: ∀a,I,L1,L2,V,T. L1 ≡[ⓑ{a,I}V.T, 0] L2 → (* Advanced forward lemmas **************************************************) lemma lleq_fwd_lref_dx: ∀L1,L2,d,i. L1 ≡[#i, d] L2 → - ∀I,K2,V. ⇩[i] L2 ≡ K2.ⓑ{I}V → + ∀I,K2,V. ⬇[i] L2 ≡ K2.ⓑ{I}V → i < d ∨ - ∃∃K1. ⇩[i] L1 ≡ K1.ⓑ{I}V & K1 ≡[V, 0] K2 & d ≤ i. + ∃∃K1. ⬇[i] L1 ≡ K1.ⓑ{I}V & K1 ≡[V, 0] K2 & d ≤ i. #L1 #L2 #d #i #H #I #K2 #V #HLK2 elim (llpx_sn_fwd_lref_dx … H … HLK2) -L2 [ | * ] /3 width=3 by ex3_intro, or_intror, or_introl/ qed-. lemma lleq_fwd_lref_sn: ∀L1,L2,d,i. L1 ≡[#i, d] L2 → - ∀I,K1,V. ⇩[i] L1 ≡ K1.ⓑ{I}V → + ∀I,K1,V. ⬇[i] L1 ≡ K1.ⓑ{I}V → i < d ∨ - ∃∃K2. ⇩[i] L2 ≡ K2.ⓑ{I}V & K1 ≡[V, 0] K2 & d ≤ i. + ∃∃K2. ⬇[i] L2 ≡ K2.ⓑ{I}V & K1 ≡[V, 0] K2 & d ≤ i. #L1 #L2 #d #i #H #I #K1 #V #HLK1 elim (llpx_sn_fwd_lref_sn … H … HLK1) -L1 [ | * ] /3 width=3 by ex3_intro, or_intror, or_introl/ qed-. @@ -109,30 +109,30 @@ lemma lleq_fwd_bind_O_dx: ∀a,I,L1,L2,V,T. L1 ≡[ⓑ{a,I}V.T, 0] L2 → (* Properties on relocation *************************************************) lemma lleq_lift_le: ∀K1,K2,T,dt. K1 ≡[T, dt] K2 → - ∀L1,L2,d,e. ⇩[Ⓕ, d, e] L1 ≡ K1 → ⇩[Ⓕ, d, e] L2 ≡ K2 → - ∀U. ⇧[d, e] T ≡ U → dt ≤ d → L1 ≡[U, dt] L2. + ∀L1,L2,d,e. ⬇[Ⓕ, d, e] L1 ≡ K1 → ⬇[Ⓕ, d, e] L2 ≡ K2 → + ∀U. ⬆[d, e] T ≡ U → dt ≤ d → L1 ≡[U, dt] L2. /3 width=10 by llpx_sn_lift_le, lift_mono/ qed-. lemma lleq_lift_ge: ∀K1,K2,T,dt. K1 ≡[T, dt] K2 → - ∀L1,L2,d,e. ⇩[Ⓕ, d, e] L1 ≡ K1 → ⇩[Ⓕ, d, e] L2 ≡ K2 → - ∀U. ⇧[d, e] T ≡ U → d ≤ dt → L1 ≡[U, dt+e] L2. + ∀L1,L2,d,e. ⬇[Ⓕ, d, e] L1 ≡ K1 → ⬇[Ⓕ, d, e] L2 ≡ K2 → + ∀U. ⬆[d, e] T ≡ U → d ≤ dt → L1 ≡[U, dt+e] L2. /2 width=9 by llpx_sn_lift_ge/ qed-. (* Inversion lemmas on relocation *******************************************) lemma lleq_inv_lift_le: ∀L1,L2,U,dt. L1 ≡[U, dt] L2 → - ∀K1,K2,d,e. ⇩[Ⓕ, d, e] L1 ≡ K1 → ⇩[Ⓕ, d, e] L2 ≡ K2 → - ∀T. ⇧[d, e] T ≡ U → dt ≤ d → K1 ≡[T, dt] K2. + ∀K1,K2,d,e. ⬇[Ⓕ, d, e] L1 ≡ K1 → ⬇[Ⓕ, d, e] L2 ≡ K2 → + ∀T. ⬆[d, e] T ≡ U → dt ≤ d → K1 ≡[T, dt] K2. /3 width=10 by llpx_sn_inv_lift_le, ex2_intro/ qed-. lemma lleq_inv_lift_be: ∀L1,L2,U,dt. L1 ≡[U, dt] L2 → - ∀K1,K2,d,e. ⇩[Ⓕ, d, e] L1 ≡ K1 → ⇩[Ⓕ, d, e] L2 ≡ K2 → - ∀T. ⇧[d, e] T ≡ U → d ≤ dt → dt ≤ yinj d + e → K1 ≡[T, d] K2. + ∀K1,K2,d,e. ⬇[Ⓕ, d, e] L1 ≡ K1 → ⬇[Ⓕ, d, e] L2 ≡ K2 → + ∀T. ⬆[d, e] T ≡ U → d ≤ dt → dt ≤ yinj d + e → K1 ≡[T, d] K2. /2 width=11 by llpx_sn_inv_lift_be/ qed-. lemma lleq_inv_lift_ge: ∀L1,L2,U,dt. L1 ≡[U, dt] L2 → - ∀K1,K2,d,e. ⇩[Ⓕ, d, e] L1 ≡ K1 → ⇩[Ⓕ, d, e] L2 ≡ K2 → - ∀T. ⇧[d, e] T ≡ U → yinj d + e ≤ dt → K1 ≡[T, dt-e] K2. + ∀K1,K2,d,e. ⬇[Ⓕ, d, e] L1 ≡ K1 → ⬇[Ⓕ, d, e] L2 ≡ K2 → + ∀T. ⬆[d, e] T ≡ U → yinj d + e ≤ dt → K1 ≡[T, dt-e] K2. /2 width=9 by llpx_sn_inv_lift_ge/ qed-. (* Inversion lemmas on negated lazy quivalence for local environments *******) diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/llor.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/llor.ma index fc950fdb1..1e124cdb5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/llor.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/llor.ma @@ -20,7 +20,7 @@ include "basic_2/multiple/frees.ma". definition llor: ynat → relation4 term lenv lenv lenv ≝ λd,T,L2,L1,L. ∧∧ |L1| = |L2| & |L1| = |L| & (∀I1,I2,I,K1,K2,K,V1,V2,V,i. - ⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 → ⇩[i] L ≡ K.ⓑ{I}V → ∨∨ + ⬇[i] L1 ≡ K1.ⓑ{I1}V1 → ⬇[i] L2 ≡ K2.ⓑ{I2}V2 → ⬇[i] L ≡ K.ⓑ{I}V → ∨∨ (∧∧ yinj i < d & I1 = I & V1 = V) | (∧∧ (L1 ⊢ i ϵ 𝐅*[d]⦃T⦄ → ⊥) & I1 = I & V1 = V) | (∧∧ d ≤ yinj i & L1 ⊢ i ϵ 𝐅*[d]⦃T⦄ & I2 = I & V2 = V) diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/llpx_sn.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/llpx_sn.ma index f0d8bbcfe..c78445bef 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/llpx_sn.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/llpx_sn.ma @@ -21,7 +21,7 @@ inductive llpx_sn (R:relation3 lenv term term): relation4 ynat term lenv lenv | llpx_sn_sort: ∀L1,L2,d,k. |L1| = |L2| → llpx_sn R d (⋆k) L1 L2 | llpx_sn_skip: ∀L1,L2,d,i. |L1| = |L2| → yinj i < d → llpx_sn R d (#i) L1 L2 | llpx_sn_lref: ∀I,L1,L2,K1,K2,V1,V2,d,i. d ≤ yinj i → - ⇩[i] L1 ≡ K1.ⓑ{I}V1 → ⇩[i] L2 ≡ K2.ⓑ{I}V2 → + ⬇[i] L1 ≡ K1.ⓑ{I}V1 → ⬇[i] L2 ≡ K2.ⓑ{I}V2 → llpx_sn R (yinj 0) V1 K1 K2 → R K1 V1 V2 → llpx_sn R d (#i) L1 L2 | llpx_sn_free: ∀L1,L2,d,i. |L1| ≤ i → |L2| ≤ i → |L1| = |L2| → llpx_sn R d (#i) L1 L2 | llpx_sn_gref: ∀L1,L2,d,p. |L1| = |L2| → llpx_sn R d (§p) L1 L2 @@ -81,13 +81,13 @@ normalize // qed-. lemma llpx_sn_fwd_drop_sn: ∀R,L1,L2,T,d. llpx_sn R d T L1 L2 → - ∀K1,i. ⇩[i] L1 ≡ K1 → ∃K2. ⇩[i] L2 ≡ K2. + ∀K1,i. ⬇[i] L1 ≡ K1 → ∃K2. ⬇[i] L2 ≡ K2. #R #L1 #L2 #T #d #H #K1 #i #HLK1 lapply (llpx_sn_fwd_length … H) -H #HL12 lapply (drop_fwd_length_le2 … HLK1) -HLK1 /2 width=1 by drop_O1_le/ qed-. lemma llpx_sn_fwd_drop_dx: ∀R,L1,L2,T,d. llpx_sn R d T L1 L2 → - ∀K2,i. ⇩[i] L2 ≡ K2 → ∃K1. ⇩[i] L1 ≡ K1. + ∀K2,i. ⬇[i] L2 ≡ K2 → ∃K1. ⬇[i] L1 ≡ K1. #R #L1 #L2 #T #d #H #K2 #i #HLK2 lapply (llpx_sn_fwd_length … H) -H #HL12 lapply (drop_fwd_length_le2 … HLK2) -HLK2 /2 width=1 by drop_O1_le/ qed-. @@ -95,8 +95,8 @@ qed-. fact llpx_sn_fwd_lref_aux: ∀R,L1,L2,X,d. llpx_sn R d X L1 L2 → ∀i. X = #i → ∨∨ |L1| ≤ i ∧ |L2| ≤ i | yinj i < d - | ∃∃I,K1,K2,V1,V2. ⇩[i] L1 ≡ K1.ⓑ{I}V1 & - ⇩[i] L2 ≡ K2.ⓑ{I}V2 & + | ∃∃I,K1,K2,V1,V2. ⬇[i] L1 ≡ K1.ⓑ{I}V1 & + ⬇[i] L2 ≡ K2.ⓑ{I}V2 & llpx_sn R (yinj 0) V1 K1 K2 & R K1 V1 V2 & d ≤ yinj i. #R #L1 #L2 #X #d * -L1 -L2 -X -d @@ -114,8 +114,8 @@ qed-. lemma llpx_sn_fwd_lref: ∀R,L1,L2,d,i. llpx_sn R d (#i) L1 L2 → ∨∨ |L1| ≤ i ∧ |L2| ≤ i | yinj i < d - | ∃∃I,K1,K2,V1,V2. ⇩[i] L1 ≡ K1.ⓑ{I}V1 & - ⇩[i] L2 ≡ K2.ⓑ{I}V2 & + | ∃∃I,K1,K2,V1,V2. ⬇[i] L1 ≡ K1.ⓑ{I}V1 & + ⬇[i] L2 ≡ K2.ⓑ{I}V2 & llpx_sn R (yinj 0) V1 K1 K2 & R K1 V1 V2 & d ≤ yinj i. /2 width=3 by llpx_sn_fwd_lref_aux/ qed-. @@ -163,7 +163,7 @@ lemma llpx_sn_Y: ∀R,T,L1,L2. |L1| = |L2| → llpx_sn R (∞) T L1 L2. @IH -IH // normalize /2 width=1 by eq_f2/ qed-. -lemma llpx_sn_ge_up: ∀R,L1,L2,U,dt. llpx_sn R dt U L1 L2 → ∀T,d,e. ⇧[d, e] T ≡ U → +lemma llpx_sn_ge_up: ∀R,L1,L2,U,dt. llpx_sn R dt U L1 L2 → ∀T,d,e. ⬆[d, e] T ≡ U → dt ≤ d + e → llpx_sn R d U L1 L2. #R #L1 #L2 #U #dt #H elim H -L1 -L2 -U -dt [ #L1 #L2 #dt #k #HL12 #X #d #e #H #_ >(lift_inv_sort2 … H) -H /2 width=1 by llpx_sn_sort/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/llpx_sn_alt.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/llpx_sn_alt.ma index 126b73321..956ae4699 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/llpx_sn_alt.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/llpx_sn_alt.ma @@ -21,7 +21,7 @@ include "basic_2/multiple/llpx_sn_alt_rec.ma". definition llpx_sn_alt: relation3 lenv term term → relation4 ynat term lenv lenv ≝ λR,d,T,L1,L2. |L1| = |L2| ∧ (∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → L1 ⊢ i ϵ 𝐅*[d]⦃T⦄ → - ⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 → + ⬇[i] L1 ≡ K1.ⓑ{I1}V1 → ⬇[i] L2 ≡ K2.ⓑ{I2}V2 → I1 = I2 ∧ R K1 V1 V2 ). diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/llpx_sn_alt_rec.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/llpx_sn_alt_rec.ma index df39d6e53..d428e5900 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/llpx_sn_alt_rec.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/llpx_sn_alt_rec.ma @@ -21,19 +21,19 @@ include "basic_2/multiple/llpx_sn.ma". (* alternative definition of llpx_sn (recursive) *) inductive llpx_sn_alt_r (R:relation3 lenv term term): relation4 ynat term lenv lenv ≝ | llpx_sn_alt_r_intro: ∀L1,L2,T,d. - (∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⇧[i, 1] U ≡ T → ⊥) → - ⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 → I1 = I2 ∧ R K1 V1 V2 + (∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⬆[i, 1] U ≡ T → ⊥) → + ⬇[i] L1 ≡ K1.ⓑ{I1}V1 → ⬇[i] L2 ≡ K2.ⓑ{I2}V2 → I1 = I2 ∧ R K1 V1 V2 ) → - (∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⇧[i, 1] U ≡ T → ⊥) → - ⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 → llpx_sn_alt_r R 0 V1 K1 K2 + (∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⬆[i, 1] U ≡ T → ⊥) → + ⬇[i] L1 ≡ K1.ⓑ{I1}V1 → ⬇[i] L2 ≡ K2.ⓑ{I2}V2 → llpx_sn_alt_r R 0 V1 K1 K2 ) → |L1| = |L2| → llpx_sn_alt_r R d T L1 L2 . (* Compact definition of llpx_sn_alt_r **************************************) lemma llpx_sn_alt_r_intro_alt: ∀R,L1,L2,T,d. |L1| = |L2| → - (∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⇧[i, 1] U ≡ T → ⊥) → - ⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 → + (∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⬆[i, 1] U ≡ T → ⊥) → + ⬇[i] L1 ≡ K1.ⓑ{I1}V1 → ⬇[i] L2 ≡ K2.ⓑ{I2}V2 → ∧∧ I1 = I2 & R K1 V1 V2 & llpx_sn_alt_r R 0 V1 K1 K2 ) → llpx_sn_alt_r R d T L1 L2. #R #L1 #L2 #T #d #HL12 #IH @llpx_sn_alt_r_intro // -HL12 @@ -43,8 +43,8 @@ qed. lemma llpx_sn_alt_r_ind_alt: ∀R. ∀S:relation4 ynat term lenv lenv. (∀L1,L2,T,d. |L1| = |L2| → ( - ∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⇧[i, 1] U ≡ T → ⊥) → - ⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 → + ∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⬆[i, 1] U ≡ T → ⊥) → + ⬇[i] L1 ≡ K1.ⓑ{I1}V1 → ⬇[i] L2 ≡ K2.ⓑ{I2}V2 → ∧∧ I1 = I2 & R K1 V1 V2 & llpx_sn_alt_r R 0 V1 K1 K2 & S 0 V1 K1 K2 ) → S d T L1 L2) → ∀L1,L2,T,d. llpx_sn_alt_r R d T L1 L2 → S d T L1 L2. @@ -56,8 +56,8 @@ qed-. lemma llpx_sn_alt_r_inv_alt: ∀R,L1,L2,T,d. llpx_sn_alt_r R d T L1 L2 → |L1| = |L2| ∧ - ∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⇧[i, 1] U ≡ T → ⊥) → - ⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 → + ∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⬆[i, 1] U ≡ T → ⊥) → + ⬇[i] L1 ≡ K1.ⓑ{I1}V1 → ⬇[i] L2 ≡ K2.ⓑ{I2}V2 → ∧∧ I1 = I2 & R K1 V1 V2 & llpx_sn_alt_r R 0 V1 K1 K2. #R #L1 #L2 #T #d #H @(llpx_sn_alt_r_ind_alt … H) -L1 -L2 -T -d #L1 #L2 #T #d #HL12 #IH @conj // -HL12 @@ -100,8 +100,8 @@ qed-. lemma llpx_sn_alt_r_fwd_lref: ∀R,L1,L2,d,i. llpx_sn_alt_r R d (#i) L1 L2 → ∨∨ |L1| ≤ i ∧ |L2| ≤ i | yinj i < d - | ∃∃I,K1,K2,V1,V2. ⇩[i] L1 ≡ K1.ⓑ{I}V1 & - ⇩[i] L2 ≡ K2.ⓑ{I}V2 & + | ∃∃I,K1,K2,V1,V2. ⬇[i] L1 ≡ K1.ⓑ{I}V1 & + ⬇[i] L2 ≡ K2.ⓑ{I}V2 & llpx_sn_alt_r R (yinj 0) V1 K1 K2 & R K1 V1 V2 & d ≤ yinj i. #R #L1 #L2 #d #i #H elim (llpx_sn_alt_r_inv_alt … H) -H @@ -140,7 +140,7 @@ lapply (drop_fwd_length_lt2 … HLK1) -HLK1 qed. lemma llpx_sn_alt_r_lref: ∀R,I,L1,L2,K1,K2,V1,V2,d,i. d ≤ yinj i → - ⇩[i] L1 ≡ K1.ⓑ{I}V1 → ⇩[i] L2 ≡ K2.ⓑ{I}V2 → + ⬇[i] L1 ≡ K1.ⓑ{I}V1 → ⬇[i] L2 ≡ K2.ⓑ{I}V2 → llpx_sn_alt_r R 0 V1 K1 K2 → R K1 V1 V2 → llpx_sn_alt_r R d (#i) L1 L2. #R #I #L1 #L2 #K1 #K2 #V1 #V2 #d #i #Hdi #HLK1 #HLK2 #HK12 #HV12 @llpx_sn_alt_r_intro_alt @@ -213,8 +213,8 @@ qed-. (* Alternative definition of llpx_sn (recursive) ****************************) lemma llpx_sn_intro_alt_r: ∀R,L1,L2,T,d. |L1| = |L2| → - (∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⇧[i, 1] U ≡ T → ⊥) → - ⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 → + (∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⬆[i, 1] U ≡ T → ⊥) → + ⬇[i] L1 ≡ K1.ⓑ{I1}V1 → ⬇[i] L2 ≡ K2.ⓑ{I2}V2 → ∧∧ I1 = I2 & R K1 V1 V2 & llpx_sn R 0 V1 K1 K2 ) → llpx_sn R d T L1 L2. #R #L1 #L2 #T #d #HL12 #IH @llpx_sn_alt_r_inv_lpx_sn @@ -225,8 +225,8 @@ qed. lemma llpx_sn_ind_alt_r: ∀R. ∀S:relation4 ynat term lenv lenv. (∀L1,L2,T,d. |L1| = |L2| → ( - ∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⇧[i, 1] U ≡ T → ⊥) → - ⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 → + ∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⬆[i, 1] U ≡ T → ⊥) → + ⬇[i] L1 ≡ K1.ⓑ{I1}V1 → ⬇[i] L2 ≡ K2.ⓑ{I2}V2 → ∧∧ I1 = I2 & R K1 V1 V2 & llpx_sn R 0 V1 K1 K2 & S 0 V1 K1 K2 ) → S d T L1 L2) → ∀L1,L2,T,d. llpx_sn R d T L1 L2 → S d T L1 L2. @@ -239,8 +239,8 @@ qed-. lemma llpx_sn_inv_alt_r: ∀R,L1,L2,T,d. llpx_sn R d T L1 L2 → |L1| = |L2| ∧ - ∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⇧[i, 1] U ≡ T → ⊥) → - ⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 → + ∀I1,I2,K1,K2,V1,V2,i. d ≤ yinj i → (∀U. ⬆[i, 1] U ≡ T → ⊥) → + ⬇[i] L1 ≡ K1.ⓑ{I1}V1 → ⬇[i] L2 ≡ K2.ⓑ{I2}V2 → ∧∧ I1 = I2 & R K1 V1 V2 & llpx_sn R 0 V1 K1 K2. #R #L1 #L2 #T #d #H lapply (llpx_sn_lpx_sn_alt_r … H) -H #H elim (llpx_sn_alt_r_inv_alt … H) -H diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/llpx_sn_drop.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/llpx_sn_drop.ma index 444a4bcbb..cc21b8b2e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/llpx_sn_drop.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/llpx_sn_drop.ma @@ -20,9 +20,9 @@ include "basic_2/multiple/llpx_sn_leq.ma". (* Advanced forward lemmas **************************************************) lemma llpx_sn_fwd_lref_dx: ∀R,L1,L2,d,i. llpx_sn R d (#i) L1 L2 → - ∀I,K2,V2. ⇩[i] L2 ≡ K2.ⓑ{I}V2 → + ∀I,K2,V2. ⬇[i] L2 ≡ K2.ⓑ{I}V2 → i < d ∨ - ∃∃K1,V1. ⇩[i] L1 ≡ K1.ⓑ{I}V1 & llpx_sn R 0 V1 K1 K2 & + ∃∃K1,V1. ⬇[i] L1 ≡ K1.ⓑ{I}V1 & llpx_sn R 0 V1 K1 K2 & R K1 V1 V2 & d ≤ i. #R #L1 #L2 #d #i #H #I #K2 #V2 #HLK2 elim (llpx_sn_fwd_lref … H) -H [ * || * ] [ #_ #H elim (lt_refl_false i) @@ -36,9 +36,9 @@ lemma llpx_sn_fwd_lref_dx: ∀R,L1,L2,d,i. llpx_sn R d (#i) L1 L2 → qed-. lemma llpx_sn_fwd_lref_sn: ∀R,L1,L2,d,i. llpx_sn R d (#i) L1 L2 → - ∀I,K1,V1. ⇩[i] L1 ≡ K1.ⓑ{I}V1 → + ∀I,K1,V1. ⬇[i] L1 ≡ K1.ⓑ{I}V1 → i < d ∨ - ∃∃K2,V2. ⇩[i] L2 ≡ K2.ⓑ{I}V2 & llpx_sn R 0 V1 K1 K2 & + ∃∃K2,V2. ⬇[i] L2 ≡ K2.ⓑ{I}V2 & llpx_sn R 0 V1 K1 K2 & R K1 V1 V2 & d ≤ i. #R #L1 #L2 #d #i #H #I #K1 #V1 #HLK1 elim (llpx_sn_fwd_lref … H) -H [ * || * ] [ #H #_ elim (lt_refl_false i) @@ -54,8 +54,8 @@ qed-. (* Advanced inversion lemmas ************************************************) lemma llpx_sn_inv_lref_ge_dx: ∀R,L1,L2,d,i. llpx_sn R d (#i) L1 L2 → d ≤ i → - ∀I,K2,V2. ⇩[i] L2 ≡ K2.ⓑ{I}V2 → - ∃∃K1,V1. ⇩[i] L1 ≡ K1.ⓑ{I}V1 & + ∀I,K2,V2. ⬇[i] L2 ≡ K2.ⓑ{I}V2 → + ∃∃K1,V1. ⬇[i] L1 ≡ K1.ⓑ{I}V1 & llpx_sn R 0 V1 K1 K2 & R K1 V1 V2. #R #L1 #L2 #d #i #H #Hdi #I #K2 #V2 #HLK2 elim (llpx_sn_fwd_lref_dx … H … HLK2) -L2 [ #H elim (ylt_yle_false … H Hdi) @@ -64,8 +64,8 @@ lemma llpx_sn_inv_lref_ge_dx: ∀R,L1,L2,d,i. llpx_sn R d (#i) L1 L2 → d ≤ i qed-. lemma llpx_sn_inv_lref_ge_sn: ∀R,L1,L2,d,i. llpx_sn R d (#i) L1 L2 → d ≤ i → - ∀I,K1,V1. ⇩[i] L1 ≡ K1.ⓑ{I}V1 → - ∃∃K2,V2. ⇩[i] L2 ≡ K2.ⓑ{I}V2 & + ∀I,K1,V1. ⬇[i] L1 ≡ K1.ⓑ{I}V1 → + ∃∃K2,V2. ⬇[i] L2 ≡ K2.ⓑ{I}V2 & llpx_sn R 0 V1 K1 K2 & R K1 V1 V2. #R #L1 #L2 #d #i #H #Hdi #I #K1 #V1 #HLK1 elim (llpx_sn_fwd_lref_sn … H … HLK1) -L1 [ #H elim (ylt_yle_false … H Hdi) @@ -75,7 +75,7 @@ qed-. lemma llpx_sn_inv_lref_ge_bi: ∀R,L1,L2,d,i. llpx_sn R d (#i) L1 L2 → d ≤ i → ∀I1,I2,K1,K2,V1,V2. - ⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 → + ⬇[i] L1 ≡ K1.ⓑ{I1}V1 → ⬇[i] L2 ≡ K2.ⓑ{I2}V2 → ∧∧ I1 = I2 & llpx_sn R 0 V1 K1 K2 & R K1 V1 V2. #R #L1 #L2 #d #i #HL12 #Hdi #I1 #I2 #K1 #K2 #V1 #V2 #HLK1 #HLK2 elim (llpx_sn_inv_lref_ge_sn … HL12 … HLK1) // -L1 -d @@ -83,7 +83,7 @@ elim (llpx_sn_inv_lref_ge_sn … HL12 … HLK1) // -L1 -d qed-. fact llpx_sn_inv_S_aux: ∀R,L1,L2,T,d0. llpx_sn R d0 T L1 L2 → ∀d. d0 = d + 1 → - ∀K1,K2,I,V1,V2. ⇩[d] L1 ≡ K1.ⓑ{I}V1 → ⇩[d] L2 ≡ K2.ⓑ{I}V2 → + ∀K1,K2,I,V1,V2. ⬇[d] L1 ≡ K1.ⓑ{I}V1 → ⬇[d] L2 ≡ K2.ⓑ{I}V2 → llpx_sn R 0 V1 K1 K2 → R K1 V1 V2 → llpx_sn R d T L1 L2. #R #L1 #L2 #T #d0 #H elim H -L1 -L2 -T -d0 /2 width=1 by llpx_sn_gref, llpx_sn_free, llpx_sn_sort/ @@ -100,7 +100,7 @@ fact llpx_sn_inv_S_aux: ∀R,L1,L2,T,d0. llpx_sn R d0 T L1 L2 → ∀d. d0 = d + qed-. lemma llpx_sn_inv_S: ∀R,L1,L2,T,d. llpx_sn R (d + 1) T L1 L2 → - ∀K1,K2,I,V1,V2. ⇩[d] L1 ≡ K1.ⓑ{I}V1 → ⇩[d] L2 ≡ K2.ⓑ{I}V2 → + ∀K1,K2,I,V1,V2. ⬇[d] L1 ≡ K1.ⓑ{I}V1 → ⬇[d] L2 ≡ K2.ⓑ{I}V2 → llpx_sn R 0 V1 K1 K2 → R K1 V1 V2 → llpx_sn R d T L1 L2. /2 width=9 by llpx_sn_inv_S_aux/ qed-. @@ -171,8 +171,8 @@ qed-. lemma llpx_sn_lift_le: ∀R. l_liftable R → ∀K1,K2,T,d0. llpx_sn R d0 T K1 K2 → - ∀L1,L2,d,e. ⇩[Ⓕ, d, e] L1 ≡ K1 → ⇩[Ⓕ, d, e] L2 ≡ K2 → - ∀U. ⇧[d, e] T ≡ U → d0 ≤ d → llpx_sn R d0 U L1 L2. + ∀L1,L2,d,e. ⬇[Ⓕ, d, e] L1 ≡ K1 → ⬇[Ⓕ, d, e] L2 ≡ K2 → + ∀U. ⬆[d, e] T ≡ U → d0 ≤ d → llpx_sn R d0 U L1 L2. #R #HR #K1 #K2 #T #d0 #H elim H -K1 -K2 -T -d0 [ #K1 #K2 #d0 #k #HK12 #L1 #L2 #d #e #HLK1 #HLK2 #X #H #_ >(lift_inv_sort1 … H) -X lapply (drop_fwd_length_eq2 … HLK1 HLK2 HK12) -K1 -K2 -d @@ -212,8 +212,8 @@ lemma llpx_sn_lift_le: ∀R. l_liftable R → qed-. lemma llpx_sn_lift_ge: ∀R,K1,K2,T,d0. llpx_sn R d0 T K1 K2 → - ∀L1,L2,d,e. ⇩[Ⓕ, d, e] L1 ≡ K1 → ⇩[Ⓕ, d, e] L2 ≡ K2 → - ∀U. ⇧[d, e] T ≡ U → d ≤ d0 → llpx_sn R (d0+e) U L1 L2. + ∀L1,L2,d,e. ⬇[Ⓕ, d, e] L1 ≡ K1 → ⬇[Ⓕ, d, e] L2 ≡ K2 → + ∀U. ⬆[d, e] T ≡ U → d ≤ d0 → llpx_sn R (d0+e) U L1 L2. #R #K1 #K2 #T #d0 #H elim H -K1 -K2 -T -d0 [ #K1 #K2 #d0 #k #HK12 #L1 #L2 #d #e #HLK1 #HLK2 #X #H #_ >(lift_inv_sort1 … H) -X lapply (drop_fwd_length_eq2 … HLK1 HLK2 HK12) -K1 -K2 -d @@ -254,8 +254,8 @@ qed-. lemma llpx_sn_inv_lift_le: ∀R. l_deliftable_sn R → ∀L1,L2,U,d0. llpx_sn R d0 U L1 L2 → - ∀K1,K2,d,e. ⇩[Ⓕ, d, e] L1 ≡ K1 → ⇩[Ⓕ, d, e] L2 ≡ K2 → - ∀T. ⇧[d, e] T ≡ U → d0 ≤ d → llpx_sn R d0 T K1 K2. + ∀K1,K2,d,e. ⬇[Ⓕ, d, e] L1 ≡ K1 → ⬇[Ⓕ, d, e] L2 ≡ K2 → + ∀T. ⬆[d, e] T ≡ U → d0 ≤ d → llpx_sn R d0 T K1 K2. #R #HR #L1 #L2 #U #d0 #H elim H -L1 -L2 -U -d0 [ #L1 #L2 #d0 #k #HL12 #K1 #K2 #d #e #HLK1 #HLK2 #X #H #_ >(lift_inv_sort2 … H) -X lapply (drop_fwd_length_eq1 … HLK1 HLK2 HL12) -L1 -L2 -d -e @@ -298,8 +298,8 @@ lemma llpx_sn_inv_lift_le: ∀R. l_deliftable_sn R → qed-. lemma llpx_sn_inv_lift_be: ∀R,L1,L2,U,d0. llpx_sn R d0 U L1 L2 → - ∀K1,K2,d,e. ⇩[Ⓕ, d, e] L1 ≡ K1 → ⇩[Ⓕ, d, e] L2 ≡ K2 → - ∀T. ⇧[d, e] T ≡ U → d ≤ d0 → d0 ≤ yinj d + e → llpx_sn R d T K1 K2. + ∀K1,K2,d,e. ⬇[Ⓕ, d, e] L1 ≡ K1 → ⬇[Ⓕ, d, e] L2 ≡ K2 → + ∀T. ⬆[d, e] T ≡ U → d ≤ d0 → d0 ≤ yinj d + e → llpx_sn R d T K1 K2. #R #L1 #L2 #U #d0 #H elim H -L1 -L2 -U -d0 [ #L1 #L2 #d0 #k #HL12 #K1 #K2 #d #e #HLK1 #HLK2 #X #H #_ #_ >(lift_inv_sort2 … H) -X lapply (drop_fwd_length_eq1 … HLK1 HLK2 HL12) -L1 -L2 -d0 -e @@ -342,8 +342,8 @@ lemma llpx_sn_inv_lift_be: ∀R,L1,L2,U,d0. llpx_sn R d0 U L1 L2 → qed-. lemma llpx_sn_inv_lift_ge: ∀R,L1,L2,U,d0. llpx_sn R d0 U L1 L2 → - ∀K1,K2,d,e. ⇩[Ⓕ, d, e] L1 ≡ K1 → ⇩[Ⓕ, d, e] L2 ≡ K2 → - ∀T. ⇧[d, e] T ≡ U → yinj d + e ≤ d0 → llpx_sn R (d0-e) T K1 K2. + ∀K1,K2,d,e. ⬇[Ⓕ, d, e] L1 ≡ K1 → ⬇[Ⓕ, d, e] L2 ≡ K2 → + ∀T. ⬆[d, e] T ≡ U → yinj d + e ≤ d0 → llpx_sn R (d0-e) T K1 K2. #R #L1 #L2 #U #d0 #H elim H -L1 -L2 -U -d0 [ #L1 #L2 #d0 #k #HL12 #K1 #K2 #d #e #HLK1 #HLK2 #X #H #_ >(lift_inv_sort2 … H) -X lapply (drop_fwd_length_eq1 … HLK1 HLK2 HL12) -L1 -L2 -d @@ -389,20 +389,20 @@ qed-. (* Advanced inversion lemmas on relocation **********************************) lemma llpx_sn_inv_lift_O: ∀R,L1,L2,U. llpx_sn R 0 U L1 L2 → - ∀K1,K2,e. ⇩[e] L1 ≡ K1 → ⇩[e] L2 ≡ K2 → - ∀T. ⇧[0, e] T ≡ U → llpx_sn R 0 T K1 K2. + ∀K1,K2,e. ⬇[e] L1 ≡ K1 → ⬇[e] L2 ≡ K2 → + ∀T. ⬆[0, e] T ≡ U → llpx_sn R 0 T K1 K2. /2 width=11 by llpx_sn_inv_lift_be/ qed-. lemma llpx_sn_drop_conf_O: ∀R,L1,L2,U. llpx_sn R 0 U L1 L2 → - ∀K1,e. ⇩[e] L1 ≡ K1 → ∀T. ⇧[0, e] T ≡ U → - ∃∃K2. ⇩[e] L2 ≡ K2 & llpx_sn R 0 T K1 K2. + ∀K1,e. ⬇[e] L1 ≡ K1 → ∀T. ⬆[0, e] T ≡ U → + ∃∃K2. ⬇[e] L2 ≡ K2 & llpx_sn R 0 T K1 K2. #R #L1 #L2 #U #HU #K1 #e #HLK1 #T #HTU elim (llpx_sn_fwd_drop_sn … HU … HLK1) /3 width=10 by llpx_sn_inv_lift_O, ex2_intro/ qed-. lemma llpx_sn_drop_trans_O: ∀R,L1,L2,U. llpx_sn R 0 U L1 L2 → - ∀K2,e. ⇩[e] L2 ≡ K2 → ∀T. ⇧[0, e] T ≡ U → - ∃∃K1. ⇩[e] L1 ≡ K1 & llpx_sn R 0 T K1 K2. + ∀K2,e. ⬇[e] L2 ≡ K2 → ∀T. ⬆[0, e] T ≡ U → + ∃∃K1. ⬇[e] L1 ≡ K1 & llpx_sn R 0 T K1 K2. #R #L1 #L2 #U #HU #K2 #e #HLK2 #T #HTU elim (llpx_sn_fwd_drop_dx … HU … HLK2) /3 width=10 by llpx_sn_inv_lift_O, ex2_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdrop_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdrop_3.ma index d66063b2a..2d43a13fb 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdrop_3.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdrop_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⇩ [ term 46 e ] break term 46 L1 ≡ break term 46 L2 )" +notation "hvbox( ⬇ [ term 46 e ] break term 46 L1 ≡ break term 46 L2 )" non associative with precedence 45 for @{ 'RDrop $e $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdrop_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdrop_4.ma index 0b4a36676..1728856fd 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdrop_4.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdrop_4.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⇩ [ term 46 d , break term 46 e ] break term 46 L1 ≡ break term 46 L2 )" +notation "hvbox( ⬇ [ term 46 d , break term 46 e ] break term 46 L1 ≡ break term 46 L2 )" non associative with precedence 45 for @{ 'RDrop $d $e $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdrop_5.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdrop_5.ma index 70d59f931..3fbc10c64 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdrop_5.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdrop_5.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⇩ [ term 46 s , break term 46 d , break term 46 e ] break term 46 L1 ≡ break term 46 L2 )" +notation "hvbox( ⬇ [ term 46 s , break term 46 d , break term 46 e ] break term 46 L1 ≡ break term 46 L2 )" non associative with precedence 45 for @{ 'RDrop $s $d $e $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdropstar_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdropstar_3.ma index 14803b14f..85ce21e3d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdropstar_3.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdropstar_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⇩ * [ term 46 e ] break term 46 L1 ≡ break term 46 L2 )" +notation "hvbox( ⬇ * [ term 46 e ] break term 46 L1 ≡ break term 46 L2 )" non associative with precedence 45 for @{ 'RDropStar $e $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdropstar_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdropstar_4.ma index 94906922f..e7a9c77e6 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdropstar_4.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdropstar_4.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⇩ * [ term 46 s , break term 46 e ] break term 46 L1 ≡ break term 46 L2 )" +notation "hvbox( ⬇ * [ term 46 s , break term 46 e ] break term 46 L1 ≡ break term 46 L2 )" non associative with precedence 45 for @{ 'RDropStar $s $e $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rlift_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rlift_4.ma index c875be4ae..77c922073 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rlift_4.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rlift_4.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⇧ [ term 46 d , break term 46 e ] break term 46 T1 ≡ break term 46 T2 )" +notation "hvbox( ⬆ [ term 46 d , break term 46 e ] break term 46 T1 ≡ break term 46 T2 )" non associative with precedence 45 for @{ 'RLift $d $e $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rliftstar_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rliftstar_3.ma index a75a097c7..ce6541c52 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rliftstar_3.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rliftstar_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⇧ * [ term 46 e ] break term 46 T1 ≡ break term 46 T2 )" +notation "hvbox( ⬆ * [ term 46 e ] break term 46 T1 ≡ break term 46 T2 )" non associative with precedence 45 for @{ 'RLiftStar $e $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/cir.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/cir.ma index b315e29bc..576633954 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/cir.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/cir.ma @@ -24,7 +24,7 @@ interpretation "irreducibility for context-sensitive reduction (term)" (* Basic inversion lemmas ***************************************************) -lemma cir_inv_delta: ∀G,L,K,V,i. ⇩[i] L ≡ K.ⓓV → ⦃G, L⦄ ⊢ ➡ 𝐈⦃#i⦄ → ⊥. +lemma cir_inv_delta: ∀G,L,K,V,i. ⬇[i] L ≡ K.ⓓV → ⦃G, L⦄ ⊢ ➡ 𝐈⦃#i⦄ → ⊥. /3 width=3 by crr_delta/ qed-. lemma cir_inv_ri2: ∀I,G,L,V,T. ri2 I → ⦃G, L⦄ ⊢ ➡ 𝐈⦃②{I}V.T⦄ → ⊥. diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/cir_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/cir_lift.ma index b570745d9..b9f4102a6 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/cir_lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/cir_lift.ma @@ -19,10 +19,10 @@ include "basic_2/reduction/cir.ma". (* Properties on relocation *************************************************) -lemma cir_lift: ∀G,K,T. ⦃G, K⦄ ⊢ ➡ 𝐈⦃T⦄ → ∀L,s,d,e. ⇩[s, d, e] L ≡ K → - ∀U. ⇧[d, e] T ≡ U → ⦃G, L⦄ ⊢ ➡ 𝐈⦃U⦄. +lemma cir_lift: ∀G,K,T. ⦃G, K⦄ ⊢ ➡ 𝐈⦃T⦄ → ∀L,s,d,e. ⬇[s, d, e] L ≡ K → + ∀U. ⬆[d, e] T ≡ U → ⦃G, L⦄ ⊢ ➡ 𝐈⦃U⦄. /3 width=8 by crr_inv_lift/ qed. -lemma cir_inv_lift: ∀G,L,U. ⦃G, L⦄ ⊢ ➡ 𝐈⦃U⦄ → ∀K,s,d,e. ⇩[s, d, e] L ≡ K → - ∀T. ⇧[d, e] T ≡ U → ⦃G, K⦄ ⊢ ➡ 𝐈⦃T⦄. +lemma cir_inv_lift: ∀G,L,U. ⦃G, L⦄ ⊢ ➡ 𝐈⦃U⦄ → ∀K,s,d,e. ⬇[s, d, e] L ≡ K → + ∀T. ⬆[d, e] T ≡ U → ⦃G, K⦄ ⊢ ➡ 𝐈⦃T⦄. /3 width=8 by crr_lift/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/cix.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/cix.ma index 61d14f011..6683871ad 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/cix.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/cix.ma @@ -29,7 +29,7 @@ interpretation "irreducibility for context-sensitive extended reduction (term)" lemma cix_inv_sort: ∀h,g,G,L,k,l. deg h g k (l+1) → ⦃G, L⦄ ⊢ ➡[h, g] 𝐈⦃⋆k⦄ → ⊥. /3 width=2 by crx_sort/ qed-. -lemma cix_inv_delta: ∀h,g,I,G,L,K,V,i. ⇩[i] L ≡ K.ⓑ{I}V → ⦃G, L⦄ ⊢ ➡[h, g] 𝐈⦃#i⦄ → ⊥. +lemma cix_inv_delta: ∀h,g,I,G,L,K,V,i. ⬇[i] L ≡ K.ⓑ{I}V → ⦃G, L⦄ ⊢ ➡[h, g] 𝐈⦃#i⦄ → ⊥. /3 width=4 by crx_delta/ qed-. lemma cix_inv_ri2: ∀h,g,I,G,L,V,T. ri2 I → ⦃G, L⦄ ⊢ ➡[h, g] 𝐈⦃②{I}V.T⦄ → ⊥. diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/cix_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/cix_lift.ma index 59d408dee..37835b0f1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/cix_lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/cix_lift.ma @@ -19,17 +19,17 @@ include "basic_2/reduction/cix.ma". (* Advanced properties ******************************************************) -lemma cix_lref: ∀h,g,G,L,i. ⇩[i] L ≡ ⋆ → ⦃G, L⦄ ⊢ ➡[h, g] 𝐈⦃#i⦄. +lemma cix_lref: ∀h,g,G,L,i. ⬇[i] L ≡ ⋆ → ⦃G, L⦄ ⊢ ➡[h, g] 𝐈⦃#i⦄. #h #g #G #L #i #HL #H elim (crx_inv_lref … H) -h #I #K #V #HLK lapply (drop_mono … HLK … HL) -L -i #H destruct qed. (* Properties on relocation *************************************************) -lemma cix_lift: ∀h,g,G,K,T. ⦃G, K⦄ ⊢ ➡[h, g] 𝐈⦃T⦄ → ∀L,s,d,e. ⇩[s, d, e] L ≡ K → - ∀U. ⇧[d, e] T ≡ U → ⦃G, L⦄ ⊢ ➡[h, g] 𝐈⦃U⦄. +lemma cix_lift: ∀h,g,G,K,T. ⦃G, K⦄ ⊢ ➡[h, g] 𝐈⦃T⦄ → ∀L,s,d,e. ⬇[s, d, e] L ≡ K → + ∀U. ⬆[d, e] T ≡ U → ⦃G, L⦄ ⊢ ➡[h, g] 𝐈⦃U⦄. /3 width=8 by crx_inv_lift/ qed. -lemma cix_inv_lift: ∀h,g,G,L,U. ⦃G, L⦄ ⊢ ➡[h, g] 𝐈⦃U⦄ → ∀K,s,d,e. ⇩[s, d, e] L ≡ K → - ∀T. ⇧[d, e] T ≡ U → ⦃G, K⦄ ⊢ ➡[h, g] 𝐈⦃T⦄. +lemma cix_inv_lift: ∀h,g,G,L,U. ⦃G, L⦄ ⊢ ➡[h, g] 𝐈⦃U⦄ → ∀K,s,d,e. ⬇[s, d, e] L ≡ K → + ∀T. ⬆[d, e] T ≡ U → ⦃G, K⦄ ⊢ ➡[h, g] 𝐈⦃T⦄. /3 width=8 by crx_lift/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/cnr.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/cnr.ma index 1a6ce5d31..c70640808 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/cnr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/cnr.ma @@ -25,7 +25,7 @@ interpretation (* Basic inversion lemmas ***************************************************) -lemma cnr_inv_delta: ∀G,L,K,V,i. ⇩[i] L ≡ K.ⓓV → ⦃G, L⦄ ⊢ ➡ 𝐍⦃#i⦄ → ⊥. +lemma cnr_inv_delta: ∀G,L,K,V,i. ⬇[i] L ≡ K.ⓓV → ⦃G, L⦄ ⊢ ➡ 𝐍⦃#i⦄ → ⊥. #G #L #K #V #i #HLK #H elim (lift_total V 0 (i+1)) #W #HVW lapply (H W ?) -H [ /3 width=6 by cpr_delta/ ] -HLK #H destruct @@ -89,7 +89,7 @@ lemma cnr_lref_free: ∀G,L,i. |L| ≤ i → ⦃G, L⦄ ⊢ ➡ 𝐍⦃#i⦄. qed. (* Basic_1: was only: nf2_csort_lref *) -lemma cnr_lref_atom: ∀G,L,i. ⇩[i] L ≡ ⋆ → ⦃G, L⦄ ⊢ ➡ 𝐍⦃#i⦄. +lemma cnr_lref_atom: ∀G,L,i. ⬇[i] L ≡ ⋆ → ⦃G, L⦄ ⊢ ➡ 𝐍⦃#i⦄. #G #L #i #HL @cnr_lref_free >(drop_fwd_length … HL) -HL // qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/cnr_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/cnr_lift.ma index 001f2017f..96ba32505 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/cnr_lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/cnr_lift.ma @@ -20,7 +20,7 @@ include "basic_2/reduction/cnr.ma". (* Advanced properties ******************************************************) (* Basic_1: was: nf2_lref_abst *) -lemma cnr_lref_abst: ∀G,L,K,V,i. ⇩[i] L ≡ K. ⓛV → ⦃G, L⦄ ⊢ ➡ 𝐍⦃#i⦄. +lemma cnr_lref_abst: ∀G,L,K,V,i. ⬇[i] L ≡ K. ⓛV → ⦃G, L⦄ ⊢ ➡ 𝐍⦃#i⦄. #G #L #K #V #i #HLK #X #H elim (cpr_inv_lref1 … H) -H // * #K0 #V1 #V2 #HLK0 #_ #_ @@ -31,7 +31,7 @@ qed. (* Basic_1: was: nf2_lift *) lemma cnr_lift: ∀G,L0,L,T,T0,s,d,e. ⦃G, L⦄ ⊢ ➡ 𝐍⦃T⦄ → - ⇩[s, d, e] L0 ≡ L → ⇧[d, e] T ≡ T0 → ⦃G, L0⦄ ⊢ ➡ 𝐍⦃T0⦄. + ⬇[s, d, e] L0 ≡ L → ⬆[d, e] T ≡ T0 → ⦃G, L0⦄ ⊢ ➡ 𝐍⦃T0⦄. #G #L0 #L #T #T0 #s #d #e #HLT #HL0 #HT0 #X #H elim (cpr_inv_lift1 … H … HL0 … HT0) -L0 #T1 #HT10 #HT1 <(HLT … HT1) in HT0; -L #HT0 @@ -40,7 +40,7 @@ qed. (* Note: this was missing in basic_1 *) lemma cnr_inv_lift: ∀G,L0,L,T,T0,s,d,e. ⦃G, L0⦄ ⊢ ➡ 𝐍⦃T0⦄ → - ⇩[s, d, e] L0 ≡ L → ⇧[d, e] T ≡ T0 → ⦃G, L⦄ ⊢ ➡ 𝐍⦃T⦄. + ⬇[s, d, e] L0 ≡ L → ⬆[d, e] T ≡ T0 → ⦃G, L⦄ ⊢ ➡ 𝐍⦃T⦄. #G #L0 #L #T #T0 #s #d #e #HLT0 #HL0 #HT0 #X #H elim (lift_total X d e) #X0 #HX0 lapply (cpr_lift … H … HL0 … HT0 … HX0) -L #HTX0 diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/cnx.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/cnx.ma index 2402ccf0b..0a23bcf03 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/cnx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/cnx.ma @@ -34,7 +34,7 @@ lapply (H (⋆(next h k)) ?) -H /2 width=2 by cpx_st/ -L -l #H destruct -H -e0 ( lapply (next_lt h k) >e1 -e1 #H elim (lt_refl_false … H) qed-. -lemma cnx_inv_delta: ∀h,g,I,G,L,K,V,i. ⇩[i] L ≡ K.ⓑ{I}V → ⦃G, L⦄ ⊢ ➡[h, g] 𝐍⦃#i⦄ → ⊥. +lemma cnx_inv_delta: ∀h,g,I,G,L,K,V,i. ⬇[i] L ≡ K.ⓑ{I}V → ⦃G, L⦄ ⊢ ➡[h, g] 𝐍⦃#i⦄ → ⊥. #h #g #I #G #L #K #V #i #HLK #H elim (lift_total V 0 (i+1)) #W #HVW lapply (H W ?) -H [ /3 width=7 by cpx_delta/ ] -HLK #H destruct @@ -112,7 +112,7 @@ lemma cnx_lref_free: ∀h,g,G,L,i. |L| ≤ i → ⦃G, L⦄ ⊢ ➡[h, g] 𝐍 #H elim (lt_refl_false i) /2 width=3 by lt_to_le_to_lt/ qed. -lemma cnx_lref_atom: ∀h,g,G,L,i. ⇩[i] L ≡ ⋆ → ⦃G, L⦄ ⊢ ➡[h, g] 𝐍⦃#i⦄. +lemma cnx_lref_atom: ∀h,g,G,L,i. ⬇[i] L ≡ ⋆ → ⦃G, L⦄ ⊢ ➡[h, g] 𝐍⦃#i⦄. #h #g #G #L #i #HL @cnx_lref_free >(drop_fwd_length … HL) -HL // qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/cnx_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/cnx_lift.ma index 91ea0091b..f313ee8bf 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/cnx_lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/cnx_lift.ma @@ -19,16 +19,16 @@ include "basic_2/reduction/cnx.ma". (* Relocation properties ****************************************************) -lemma cnx_lift: ∀h,g,G,L0,L,T,T0,s,d,e. ⦃G, L⦄ ⊢ ➡[h, g] 𝐍⦃T⦄ → ⇩[s, d, e] L0 ≡ L → - ⇧[d, e] T ≡ T0 → ⦃G, L0⦄ ⊢ ➡[h, g] 𝐍⦃T0⦄. +lemma cnx_lift: ∀h,g,G,L0,L,T,T0,s,d,e. ⦃G, L⦄ ⊢ ➡[h, g] 𝐍⦃T⦄ → ⬇[s, d, e] L0 ≡ L → + ⬆[d, e] T ≡ T0 → ⦃G, L0⦄ ⊢ ➡[h, g] 𝐍⦃T0⦄. #h #g #G #L0 #L #T #T0 #s #d #e #HLT #HL0 #HT0 #X #H elim (cpx_inv_lift1 … H … HL0 … HT0) -L0 #T1 #HT10 #HT1 <(HLT … HT1) in HT0; -L #HT0 >(lift_mono … HT10 … HT0) -T1 -X // qed. -lemma cnx_inv_lift: ∀h,g,G,L0,L,T,T0,s,d,e. ⦃G, L0⦄ ⊢ ➡[h, g] 𝐍⦃T0⦄ → ⇩[s, d, e] L0 ≡ L → - ⇧[d, e] T ≡ T0 → ⦃G, L⦄ ⊢ ➡[h, g] 𝐍⦃T⦄. +lemma cnx_inv_lift: ∀h,g,G,L0,L,T,T0,s,d,e. ⦃G, L0⦄ ⊢ ➡[h, g] 𝐍⦃T0⦄ → ⬇[s, d, e] L0 ≡ L → + ⬆[d, e] T ≡ T0 → ⦃G, L⦄ ⊢ ➡[h, g] 𝐍⦃T⦄. #h #g #G #L0 #L #T #T0 #s #d #e #HLT0 #HL0 #HT0 #X #H elim (lift_total X d e) #X0 #HX0 lapply (cpx_lift … H … HL0 … HT0 … HX0) -L #HTX0 diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/cpr.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/cpr.ma index 6548e64a2..dc9203525 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/cpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/cpr.ma @@ -24,8 +24,8 @@ include "basic_2/unfold/lstas.ma". inductive cpr: relation4 genv lenv term term ≝ | cpr_atom : ∀I,G,L. cpr G L (⓪{I}) (⓪{I}) | cpr_delta: ∀G,L,K,V,V2,W2,i. - ⇩[i] L ≡ K. ⓓV → cpr G K V V2 → - ⇧[0, i + 1] V2 ≡ W2 → cpr G L (#i) W2 + ⬇[i] L ≡ K. ⓓV → cpr G K V V2 → + ⬆[0, i + 1] V2 ≡ W2 → cpr G L (#i) W2 | cpr_bind : ∀a,I,G,L,V1,V2,T1,T2. cpr G L V1 V2 → cpr G (L.ⓑ{I}V1) T1 T2 → cpr G L (ⓑ{a,I}V1.T1) (ⓑ{a,I}V2.T2) @@ -33,13 +33,13 @@ inductive cpr: relation4 genv lenv term term ≝ cpr G L V1 V2 → cpr G L T1 T2 → cpr G L (ⓕ{I}V1.T1) (ⓕ{I}V2.T2) | cpr_zeta : ∀G,L,V,T1,T,T2. cpr G (L.ⓓV) T1 T → - ⇧[0, 1] T2 ≡ T → cpr G L (+ⓓV.T1) T2 + ⬆[0, 1] T2 ≡ T → cpr G L (+ⓓV.T1) T2 | cpr_eps : ∀G,L,V,T1,T2. cpr G L T1 T2 → cpr G L (ⓝV.T1) T2 | cpr_beta : ∀a,G,L,V1,V2,W1,W2,T1,T2. cpr G L V1 V2 → cpr G L W1 W2 → cpr G (L.ⓛW1) T1 T2 → cpr G L (ⓐV1.ⓛ{a}W1.T1) (ⓓ{a}ⓝW2.V2.T2) | cpr_theta: ∀a,G,L,V1,V,V2,W1,W2,T1,T2. - cpr G L V1 V → ⇧[0, 1] V ≡ V2 → cpr G L W1 W2 → cpr G (L.ⓓW1) T1 T2 → + cpr G L V1 V → ⬆[0, 1] V ≡ V2 → cpr G L W1 W2 → cpr G (L.ⓓW1) T1 T2 → cpr G L (ⓐV1.ⓓ{a}W1.T1) (ⓓ{a}W2.ⓐV2.T2) . @@ -76,8 +76,8 @@ lemma cpr_pair_sn: ∀I,G,L,V1,V2. ⦃G, L⦄ ⊢ V1 ➡ V2 → ∀T. ⦃G, L⦄ ⊢ ②{I}V1.T ➡ ②{I}V2.T. * /2 width=1 by cpr_bind, cpr_flat/ qed. -lemma cpr_delift: ∀G,K,V,T1,L,d. ⇩[d] L ≡ (K.ⓓV) → - ∃∃T2,T. ⦃G, L⦄ ⊢ T1 ➡ T2 & ⇧[d, 1] T ≡ T2. +lemma cpr_delift: ∀G,K,V,T1,L,d. ⬇[d] L ≡ (K.ⓓV) → + ∃∃T2,T. ⦃G, L⦄ ⊢ T1 ➡ T2 & ⬆[d, 1] T ≡ T2. #G #K #V #T1 elim T1 -T1 [ * /2 width=4 by cpr_atom, lift_sort, lift_gref, ex2_2_intro/ #i #L #d #HLK elim (lt_or_eq_or_gt i d) @@ -111,8 +111,8 @@ lemma lstas_cpr: ∀h,G,L,T1,T2. ⦃G, L⦄ ⊢ T1 •*[h, 0] T2 → ⦃G, L⦄ fact cpr_inv_atom1_aux: ∀G,L,T1,T2. ⦃G, L⦄ ⊢ T1 ➡ T2 → ∀I. T1 = ⓪{I} → T2 = ⓪{I} ∨ - ∃∃K,V,V2,i. ⇩[i] L ≡ K. ⓓV & ⦃G, K⦄ ⊢ V ➡ V2 & - ⇧[O, i + 1] V2 ≡ T2 & I = LRef i. + ∃∃K,V,V2,i. ⬇[i] L ≡ K. ⓓV & ⦃G, K⦄ ⊢ V ➡ V2 & + ⬆[O, i + 1] V2 ≡ T2 & I = LRef i. #G #L #T1 #T2 * -G -L -T1 -T2 [ #I #G #L #J #H destruct /2 width=1 by or_introl/ | #L #G #K #V #V2 #T2 #i #HLK #HV2 #HVT2 #J #H destruct /3 width=8 by ex4_4_intro, or_intror/ @@ -127,8 +127,8 @@ qed-. lemma cpr_inv_atom1: ∀I,G,L,T2. ⦃G, L⦄ ⊢ ⓪{I} ➡ T2 → T2 = ⓪{I} ∨ - ∃∃K,V,V2,i. ⇩[i] L ≡ K. ⓓV & ⦃G, K⦄ ⊢ V ➡ V2 & - ⇧[O, i + 1] V2 ≡ T2 & I = LRef i. + ∃∃K,V,V2,i. ⬇[i] L ≡ K. ⓓV & ⦃G, K⦄ ⊢ V ➡ V2 & + ⬆[O, i + 1] V2 ≡ T2 & I = LRef i. /2 width=3 by cpr_inv_atom1_aux/ qed-. (* Basic_1: includes: pr0_gen_sort pr2_gen_sort *) @@ -141,8 +141,8 @@ qed-. (* Basic_1: includes: pr0_gen_lref pr2_gen_lref *) lemma cpr_inv_lref1: ∀G,L,T2,i. ⦃G, L⦄ ⊢ #i ➡ T2 → T2 = #i ∨ - ∃∃K,V,V2. ⇩[i] L ≡ K. ⓓV & ⦃G, K⦄ ⊢ V ➡ V2 & - ⇧[O, i + 1] V2 ≡ T2. + ∃∃K,V,V2. ⬇[i] L ≡ K. ⓓV & ⦃G, K⦄ ⊢ V ➡ V2 & + ⬆[O, i + 1] V2 ≡ T2. #G #L #T2 #i #H elim (cpr_inv_atom1 … H) -H /2 width=1 by or_introl/ * #K #V #V2 #j #HLK #HV2 #HVT2 #H destruct /3 width=6 by ex3_3_intro, or_intror/ @@ -159,7 +159,7 @@ fact cpr_inv_bind1_aux: ∀G,L,U1,U2. ⦃G, L⦄ ⊢ U1 ➡ U2 → ∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ➡ V2 & ⦃G, L.ⓑ{I}V1⦄ ⊢ T1 ➡ T2 & U2 = ⓑ{a,I}V2.T2 ) ∨ - ∃∃T. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡ T & ⇧[0, 1] U2 ≡ T & + ∃∃T. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡ T & ⬆[0, 1] U2 ≡ T & a = true & I = Abbr. #G #L #U1 #U2 * -L -U1 -U2 [ #I #G #L #b #J #W1 #U1 #H destruct @@ -177,7 +177,7 @@ lemma cpr_inv_bind1: ∀a,I,G,L,V1,T1,U2. ⦃G, L⦄ ⊢ ⓑ{a,I}V1.T1 ➡ U2 ∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ➡ V2 & ⦃G, L.ⓑ{I}V1⦄ ⊢ T1 ➡ T2 & U2 = ⓑ{a,I}V2.T2 ) ∨ - ∃∃T. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡ T & ⇧[0, 1] U2 ≡ T & + ∃∃T. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡ T & ⬆[0, 1] U2 ≡ T & a = true & I = Abbr. /2 width=3 by cpr_inv_bind1_aux/ qed-. @@ -186,7 +186,7 @@ lemma cpr_inv_abbr1: ∀a,G,L,V1,T1,U2. ⦃G, L⦄ ⊢ ⓓ{a}V1.T1 ➡ U2 → ( ∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ➡ V2 & ⦃G, L. ⓓV1⦄ ⊢ T1 ➡ T2 & U2 = ⓓ{a}V2.T2 ) ∨ - ∃∃T. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡ T & ⇧[0, 1] U2 ≡ T & a = true. + ∃∃T. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡ T & ⬆[0, 1] U2 ≡ T & a = true. #a #G #L #V1 #T1 #U2 #H elim (cpr_inv_bind1 … H) -H * /3 width=5 by ex3_2_intro, ex3_intro, or_introl, or_intror/ @@ -211,7 +211,7 @@ fact cpr_inv_flat1_aux: ∀G,L,U,U2. ⦃G, L⦄ ⊢ U ➡ U2 → | ∃∃a,V2,W1,W2,T1,T2. ⦃G, L⦄ ⊢ V1 ➡ V2 & ⦃G, L⦄ ⊢ W1 ➡ W2 & ⦃G, L.ⓛW1⦄ ⊢ T1 ➡ T2 & U1 = ⓛ{a}W1.T1 & U2 = ⓓ{a}ⓝW2.V2.T2 & I = Appl - | ∃∃a,V,V2,W1,W2,T1,T2. ⦃G, L⦄ ⊢ V1 ➡ V & ⇧[0,1] V ≡ V2 & + | ∃∃a,V,V2,W1,W2,T1,T2. ⦃G, L⦄ ⊢ V1 ➡ V & ⬆[0,1] V ≡ V2 & ⦃G, L⦄ ⊢ W1 ➡ W2 & ⦃G, L.ⓓW1⦄ ⊢ T1 ➡ T2 & U1 = ⓓ{a}W1.T1 & U2 = ⓓ{a}W2.ⓐV2.T2 & I = Appl. @@ -234,7 +234,7 @@ lemma cpr_inv_flat1: ∀I,G,L,V1,U1,U2. ⦃G, L⦄ ⊢ ⓕ{I}V1.U1 ➡ U2 → | ∃∃a,V2,W1,W2,T1,T2. ⦃G, L⦄ ⊢ V1 ➡ V2 & ⦃G, L⦄ ⊢ W1 ➡ W2 & ⦃G, L.ⓛW1⦄ ⊢ T1 ➡ T2 & U1 = ⓛ{a}W1.T1 & U2 = ⓓ{a}ⓝW2.V2.T2 & I = Appl - | ∃∃a,V,V2,W1,W2,T1,T2. ⦃G, L⦄ ⊢ V1 ➡ V & ⇧[0,1] V ≡ V2 & + | ∃∃a,V,V2,W1,W2,T1,T2. ⦃G, L⦄ ⊢ V1 ➡ V & ⬆[0,1] V ≡ V2 & ⦃G, L⦄ ⊢ W1 ➡ W2 & ⦃G, L.ⓓW1⦄ ⊢ T1 ➡ T2 & U1 = ⓓ{a}W1.T1 & U2 = ⓓ{a}W2.ⓐV2.T2 & I = Appl. @@ -247,7 +247,7 @@ lemma cpr_inv_appl1: ∀G,L,V1,U1,U2. ⦃G, L⦄ ⊢ ⓐV1.U1 ➡ U2 → | ∃∃a,V2,W1,W2,T1,T2. ⦃G, L⦄ ⊢ V1 ➡ V2 & ⦃G, L⦄ ⊢ W1 ➡ W2 & ⦃G, L.ⓛW1⦄ ⊢ T1 ➡ T2 & U1 = ⓛ{a}W1.T1 & U2 = ⓓ{a}ⓝW2.V2.T2 - | ∃∃a,V,V2,W1,W2,T1,T2. ⦃G, L⦄ ⊢ V1 ➡ V & ⇧[0,1] V ≡ V2 & + | ∃∃a,V,V2,W1,W2,T1,T2. ⦃G, L⦄ ⊢ V1 ➡ V & ⬆[0,1] V ≡ V2 & ⦃G, L⦄ ⊢ W1 ➡ W2 & ⦃G, L.ⓓW1⦄ ⊢ T1 ➡ T2 & U1 = ⓓ{a}W1.T1 & U2 = ⓓ{a}W2.ⓐV2.T2. #G #L #V1 #U1 #U2 #H elim (cpr_inv_flat1 … H) -H * diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/cpx.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/cpx.ma index 27f51b907..dd8fcdb85 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/cpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/cpx.ma @@ -23,8 +23,8 @@ inductive cpx (h) (g): relation4 genv lenv term term ≝ | cpx_atom : ∀I,G,L. cpx h g G L (⓪{I}) (⓪{I}) | cpx_st : ∀G,L,k,l. deg h g k (l+1) → cpx h g G L (⋆k) (⋆(next h k)) | cpx_delta: ∀I,G,L,K,V,V2,W2,i. - ⇩[i] L ≡ K.ⓑ{I}V → cpx h g G K V V2 → - ⇧[0, i+1] V2 ≡ W2 → cpx h g G L (#i) W2 + ⬇[i] L ≡ K.ⓑ{I}V → cpx h g G K V V2 → + ⬆[0, i+1] V2 ≡ W2 → cpx h g G L (#i) W2 | cpx_bind : ∀a,I,G,L,V1,V2,T1,T2. cpx h g G L V1 V2 → cpx h g G (L.ⓑ{I}V1) T1 T2 → cpx h g G L (ⓑ{a,I}V1.T1) (ⓑ{a,I}V2.T2) @@ -32,14 +32,14 @@ inductive cpx (h) (g): relation4 genv lenv term term ≝ cpx h g G L V1 V2 → cpx h g G L T1 T2 → cpx h g G L (ⓕ{I}V1.T1) (ⓕ{I}V2.T2) | cpx_zeta : ∀G,L,V,T1,T,T2. cpx h g G (L.ⓓV) T1 T → - ⇧[0, 1] T2 ≡ T → cpx h g G L (+ⓓV.T1) T2 + ⬆[0, 1] T2 ≡ T → cpx h g G L (+ⓓV.T1) T2 | cpx_eps : ∀G,L,V,T1,T2. cpx h g G L T1 T2 → cpx h g G L (ⓝV.T1) T2 | cpx_ct : ∀G,L,V1,V2,T. cpx h g G L V1 V2 → cpx h g G L (ⓝV1.T) V2 | cpx_beta : ∀a,G,L,V1,V2,W1,W2,T1,T2. cpx h g G L V1 V2 → cpx h g G L W1 W2 → cpx h g G (L.ⓛW1) T1 T2 → cpx h g G L (ⓐV1.ⓛ{a}W1.T1) (ⓓ{a}ⓝW2.V2.T2) | cpx_theta: ∀a,G,L,V1,V,V2,W1,W2,T1,T2. - cpx h g G L V1 V → ⇧[0, 1] V ≡ V2 → cpx h g G L W1 W2 → + cpx h g G L V1 V → ⬆[0, 1] V ≡ V2 → cpx h g G L W1 W2 → cpx h g G (L.ⓓW1) T1 T2 → cpx h g G L (ⓐV1.ⓓ{a}W1.T1) (ⓓ{a}W2.ⓐV2.T2) . @@ -78,8 +78,8 @@ lemma cpx_pair_sn: ∀h,g,I,G,L,V1,V2. ⦃G, L⦄ ⊢ V1 ➡[h, g] V2 → #h #g * /2 width=1 by cpx_bind, cpx_flat/ qed. -lemma cpx_delift: ∀h,g,I,G,K,V,T1,L,d. ⇩[d] L ≡ (K.ⓑ{I}V) → - ∃∃T2,T. ⦃G, L⦄ ⊢ T1 ➡[h, g] T2 & ⇧[d, 1] T ≡ T2. +lemma cpx_delift: ∀h,g,I,G,K,V,T1,L,d. ⬇[d] L ≡ (K.ⓑ{I}V) → + ∃∃T2,T. ⦃G, L⦄ ⊢ T1 ➡[h, g] T2 & ⬆[d, 1] T ≡ T2. #h #g #I #G #K #V #T1 elim T1 -T1 [ * #i #L #d /2 width=4 by cpx_atom, lift_sort, lift_gref, ex2_2_intro/ elim (lt_or_eq_or_gt i d) #Hid [1,3: /3 width=4 by cpx_atom, lift_lref_ge_minus, lift_lref_lt, ex2_2_intro/ ] @@ -99,8 +99,8 @@ qed-. fact cpx_inv_atom1_aux: ∀h,g,G,L,T1,T2. ⦃G, L⦄ ⊢ T1 ➡[h, g] T2 → ∀J. T1 = ⓪{J} → ∨∨ T2 = ⓪{J} | ∃∃k,l. deg h g k (l+1) & T2 = ⋆(next h k) & J = Sort k - | ∃∃I,K,V,V2,i. ⇩[i] L ≡ K.ⓑ{I}V & ⦃G, K⦄ ⊢ V ➡[h, g] V2 & - ⇧[O, i+1] V2 ≡ T2 & J = LRef i. + | ∃∃I,K,V,V2,i. ⬇[i] L ≡ K.ⓑ{I}V & ⦃G, K⦄ ⊢ V ➡[h, g] V2 & + ⬆[O, i+1] V2 ≡ T2 & J = LRef i. #G #h #g #L #T1 #T2 * -L -T1 -T2 [ #I #G #L #J #H destruct /2 width=1 by or3_intro0/ | #G #L #k #l #Hkl #J #H destruct /3 width=5 by or3_intro1, ex3_2_intro/ @@ -118,8 +118,8 @@ qed-. lemma cpx_inv_atom1: ∀h,g,J,G,L,T2. ⦃G, L⦄ ⊢ ⓪{J} ➡[h, g] T2 → ∨∨ T2 = ⓪{J} | ∃∃k,l. deg h g k (l+1) & T2 = ⋆(next h k) & J = Sort k - | ∃∃I,K,V,V2,i. ⇩[i] L ≡ K.ⓑ{I}V & ⦃G, K⦄ ⊢ V ➡[h, g] V2 & - ⇧[O, i+1] V2 ≡ T2 & J = LRef i. + | ∃∃I,K,V,V2,i. ⬇[i] L ≡ K.ⓑ{I}V & ⦃G, K⦄ ⊢ V ➡[h, g] V2 & + ⬆[O, i+1] V2 ≡ T2 & J = LRef i. /2 width=3 by cpx_inv_atom1_aux/ qed-. lemma cpx_inv_sort1: ∀h,g,G,L,T2,k. ⦃G, L⦄ ⊢ ⋆k ➡[h, g] T2 → T2 = ⋆k ∨ @@ -133,8 +133,8 @@ qed-. lemma cpx_inv_lref1: ∀h,g,G,L,T2,i. ⦃G, L⦄ ⊢ #i ➡[h, g] T2 → T2 = #i ∨ - ∃∃I,K,V,V2. ⇩[i] L ≡ K. ⓑ{I}V & ⦃G, K⦄ ⊢ V ➡[h, g] V2 & - ⇧[O, i+1] V2 ≡ T2. + ∃∃I,K,V,V2. ⬇[i] L ≡ K. ⓑ{I}V & ⦃G, K⦄ ⊢ V ➡[h, g] V2 & + ⬆[O, i+1] V2 ≡ T2. #h #g #G #L #T2 #i #H elim (cpx_inv_atom1 … H) -H /2 width=1 by or_introl/ * [ #k #l #_ #_ #H destruct @@ -161,7 +161,7 @@ fact cpx_inv_bind1_aux: ∀h,g,G,L,U1,U2. ⦃G, L⦄ ⊢ U1 ➡[h, g] U2 → ∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ➡[h, g] V2 & ⦃G, L.ⓑ{J}V1⦄ ⊢ T1 ➡[h, g] T2 & U2 = ⓑ{a,J}V2.T2 ) ∨ - ∃∃T. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡[h, g] T & ⇧[0, 1] U2 ≡ T & + ∃∃T. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡[h, g] T & ⬆[0, 1] U2 ≡ T & a = true & J = Abbr. #h #g #G #L #U1 #U2 * -L -U1 -U2 [ #I #G #L #b #J #W #U1 #H destruct @@ -181,7 +181,7 @@ lemma cpx_inv_bind1: ∀h,g,a,I,G,L,V1,T1,U2. ⦃G, L⦄ ⊢ ⓑ{a,I}V1.T1 ➡[h ∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ➡[h, g] V2 & ⦃G, L.ⓑ{I}V1⦄ ⊢ T1 ➡[h, g] T2 & U2 = ⓑ{a,I} V2. T2 ) ∨ - ∃∃T. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡[h, g] T & ⇧[0, 1] U2 ≡ T & + ∃∃T. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡[h, g] T & ⬆[0, 1] U2 ≡ T & a = true & I = Abbr. /2 width=3 by cpx_inv_bind1_aux/ qed-. @@ -189,7 +189,7 @@ lemma cpx_inv_abbr1: ∀h,g,a,G,L,V1,T1,U2. ⦃G, L⦄ ⊢ ⓓ{a}V1.T1 ➡[h, g] ∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ➡[h, g] V2 & ⦃G, L.ⓓV1⦄ ⊢ T1 ➡[h, g] T2 & U2 = ⓓ{a} V2. T2 ) ∨ - ∃∃T. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡[h, g] T & ⇧[0, 1] U2 ≡ T & a = true. + ∃∃T. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡[h, g] T & ⬆[0, 1] U2 ≡ T & a = true. #h #g #a #G #L #V1 #T1 #U2 #H elim (cpx_inv_bind1 … H) -H * /3 width=5 by ex3_2_intro, ex3_intro, or_introl, or_intror/ qed-. @@ -214,7 +214,7 @@ fact cpx_inv_flat1_aux: ∀h,g,G,L,U,U2. ⦃G, L⦄ ⊢ U ➡[h, g] U2 → ⦃G, L.ⓛW1⦄ ⊢ T1 ➡[h, g] T2 & U1 = ⓛ{a}W1.T1 & U2 = ⓓ{a}ⓝW2.V2.T2 & J = Appl - | ∃∃a,V,V2,W1,W2,T1,T2. ⦃G, L⦄ ⊢ V1 ➡[h, g] V & ⇧[0,1] V ≡ V2 & + | ∃∃a,V,V2,W1,W2,T1,T2. ⦃G, L⦄ ⊢ V1 ➡[h, g] V & ⬆[0,1] V ≡ V2 & ⦃G, L⦄ ⊢ W1 ➡[h, g] W2 & ⦃G, L.ⓓW1⦄ ⊢ T1 ➡[h, g] T2 & U1 = ⓓ{a}W1.T1 & U2 = ⓓ{a}W2.ⓐV2.T2 & J = Appl. @@ -241,7 +241,7 @@ lemma cpx_inv_flat1: ∀h,g,I,G,L,V1,U1,U2. ⦃G, L⦄ ⊢ ⓕ{I}V1.U1 ➡[h, g] ⦃G, L.ⓛW1⦄ ⊢ T1 ➡[h, g] T2 & U1 = ⓛ{a}W1.T1 & U2 = ⓓ{a}ⓝW2.V2.T2 & I = Appl - | ∃∃a,V,V2,W1,W2,T1,T2. ⦃G, L⦄ ⊢ V1 ➡[h, g] V & ⇧[0,1] V ≡ V2 & + | ∃∃a,V,V2,W1,W2,T1,T2. ⦃G, L⦄ ⊢ V1 ➡[h, g] V & ⬆[0,1] V ≡ V2 & ⦃G, L⦄ ⊢ W1 ➡[h, g] W2 & ⦃G, L.ⓓW1⦄ ⊢ T1 ➡[h, g] T2 & U1 = ⓓ{a}W1.T1 & U2 = ⓓ{a}W2.ⓐV2.T2 & I = Appl. @@ -253,7 +253,7 @@ lemma cpx_inv_appl1: ∀h,g,G,L,V1,U1,U2. ⦃G, L⦄ ⊢ ⓐ V1.U1 ➡[h, g] U2 | ∃∃a,V2,W1,W2,T1,T2. ⦃G, L⦄ ⊢ V1 ➡[h, g] V2 & ⦃G, L⦄ ⊢ W1 ➡[h, g] W2 & ⦃G, L.ⓛW1⦄ ⊢ T1 ➡[h, g] T2 & U1 = ⓛ{a}W1.T1 & U2 = ⓓ{a}ⓝW2.V2.T2 - | ∃∃a,V,V2,W1,W2,T1,T2. ⦃G, L⦄ ⊢ V1 ➡[h, g] V & ⇧[0,1] V ≡ V2 & + | ∃∃a,V,V2,W1,W2,T1,T2. ⦃G, L⦄ ⊢ V1 ➡[h, g] V & ⬆[0,1] V ≡ V2 & ⦃G, L⦄ ⊢ W1 ➡[h, g] W2 & ⦃G, L.ⓓW1⦄ ⊢ T1 ➡[h, g] T2 & U1 = ⓓ{a}W1.T1 & U2 = ⓓ{a}W2. ⓐV2. T2. #h #g #G #L #V1 #U1 #U2 #H elim (cpx_inv_flat1 … H) -H * diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/crr.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/crr.ma index 3aca991bc..f5bc97b50 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/crr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/crr.ma @@ -29,7 +29,7 @@ definition ib2: relation2 bool bind2 ≝ (* activate genv *) (* reducible terms *) inductive crr (G:genv): relation2 lenv term ≝ -| crr_delta : ∀L,K,V,i. ⇩[i] L ≡ K.ⓓV → crr G L (#i) +| crr_delta : ∀L,K,V,i. ⬇[i] L ≡ K.ⓓV → crr G L (#i) | crr_appl_sn: ∀L,V,T. crr G L V → crr G L (ⓐV.T) | crr_appl_dx: ∀L,V,T. crr G L T → crr G L (ⓐV.T) | crr_ri2 : ∀I,L,V,T. ri2 I → crr G L (②{I}V.T) @@ -62,7 +62,7 @@ lemma crr_inv_sort: ∀G,L,k. ⦃G, L⦄ ⊢ ➡ 𝐑⦃⋆k⦄ → ⊥. /2 width=6 by crr_inv_sort_aux/ qed-. fact crr_inv_lref_aux: ∀G,L,T,i. ⦃G, L⦄ ⊢ ➡ 𝐑⦃T⦄ → T = #i → - ∃∃K,V. ⇩[i] L ≡ K.ⓓV. + ∃∃K,V. ⬇[i] L ≡ K.ⓓV. #G #L #T #j * -L -T [ #L #K #V #i #HLK #H destruct /2 width=3 by ex1_2_intro/ | #L #V #T #_ #H destruct @@ -75,7 +75,7 @@ fact crr_inv_lref_aux: ∀G,L,T,i. ⦃G, L⦄ ⊢ ➡ 𝐑⦃T⦄ → T = #i → ] qed-. -lemma crr_inv_lref: ∀G,L,i. ⦃G, L⦄ ⊢ ➡ 𝐑⦃#i⦄ → ∃∃K,V. ⇩[i] L ≡ K.ⓓV. +lemma crr_inv_lref: ∀G,L,i. ⦃G, L⦄ ⊢ ➡ 𝐑⦃#i⦄ → ∃∃K,V. ⬇[i] L ≡ K.ⓓV. /2 width=4 by crr_inv_lref_aux/ qed-. fact crr_inv_gref_aux: ∀G,L,T,p. ⦃G, L⦄ ⊢ ➡ 𝐑⦃T⦄ → T = §p → ⊥. diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/crr_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/crr_lift.ma index 27a6951bd..ee142ffe3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/crr_lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/crr_lift.ma @@ -19,8 +19,8 @@ include "basic_2/reduction/crr.ma". (* Properties on relocation *************************************************) -lemma crr_lift: ∀G,K,T. ⦃G, K⦄ ⊢ ➡ 𝐑⦃T⦄ → ∀L,s,d,e. ⇩[s, d, e] L ≡ K → - ∀U. ⇧[d, e] T ≡ U → ⦃G, L⦄ ⊢ ➡ 𝐑⦃U⦄. +lemma crr_lift: ∀G,K,T. ⦃G, K⦄ ⊢ ➡ 𝐑⦃T⦄ → ∀L,s,d,e. ⬇[s, d, e] L ≡ K → + ∀U. ⬆[d, e] T ≡ U → ⦃G, L⦄ ⊢ ➡ 𝐑⦃U⦄. #G #K #T #H elim H -K -T [ #K #K0 #V #i #HK0 #L #s #d #e #HLK #X #H elim (lift_inv_lref1 … H) -H * #Hid #H destruct @@ -46,8 +46,8 @@ lemma crr_lift: ∀G,K,T. ⦃G, K⦄ ⊢ ➡ 𝐑⦃T⦄ → ∀L,s,d,e. ⇩[s, ] qed. -lemma crr_inv_lift: ∀G,L,U. ⦃G, L⦄ ⊢ ➡ 𝐑⦃U⦄ → ∀K,s,d,e. ⇩[s, d, e] L ≡ K → - ∀T. ⇧[d, e] T ≡ U → ⦃G, K⦄ ⊢ ➡ 𝐑⦃T⦄. +lemma crr_inv_lift: ∀G,L,U. ⦃G, L⦄ ⊢ ➡ 𝐑⦃U⦄ → ∀K,s,d,e. ⬇[s, d, e] L ≡ K → + ∀T. ⬆[d, e] T ≡ U → ⦃G, K⦄ ⊢ ➡ 𝐑⦃T⦄. #G #L #U #H elim H -L -U [ #L #L0 #W #i #HK0 #K #s #d #e #HLK #X #H elim (lift_inv_lref2 … H) -H * #Hid #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/crx.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/crx.ma index 5816b0028..fe2ff03f9 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/crx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/crx.ma @@ -22,7 +22,7 @@ include "basic_2/reduction/crr.ma". (* extended reducible terms *) inductive crx (h) (g) (G:genv): relation2 lenv term ≝ | crx_sort : ∀L,k,l. deg h g k (l+1) → crx h g G L (⋆k) -| crx_delta : ∀I,L,K,V,i. ⇩[i] L ≡ K.ⓑ{I}V → crx h g G L (#i) +| crx_delta : ∀I,L,K,V,i. ⬇[i] L ≡ K.ⓑ{I}V → crx h g G L (#i) | crx_appl_sn: ∀L,V,T. crx h g G L V → crx h g G L (ⓐV.T) | crx_appl_dx: ∀L,V,T. crx h g G L T → crx h g G L (ⓐV.T) | crx_ri2 : ∀I,L,V,T. ri2 I → crx h g G L (②{I}V.T) @@ -64,7 +64,7 @@ lemma crx_inv_sort: ∀h,g,G,L,k. ⦃G, L⦄ ⊢ ➡[h, g] 𝐑⦃⋆k⦄ → /2 width=5 by crx_inv_sort_aux/ qed-. fact crx_inv_lref_aux: ∀h,g,G,L,T,i. ⦃G, L⦄ ⊢ ➡[h, g] 𝐑⦃T⦄ → T = #i → - ∃∃I,K,V. ⇩[i] L ≡ K.ⓑ{I}V. + ∃∃I,K,V. ⬇[i] L ≡ K.ⓑ{I}V. #h #g #G #L #T #j * -L -T [ #L #k #l #_ #H destruct | #I #L #K #V #i #HLK #H destruct /2 width=4 by ex1_3_intro/ @@ -78,7 +78,7 @@ fact crx_inv_lref_aux: ∀h,g,G,L,T,i. ⦃G, L⦄ ⊢ ➡[h, g] 𝐑⦃T⦄ → ] qed-. -lemma crx_inv_lref: ∀h,g,G,L,i. ⦃G, L⦄ ⊢ ➡[h, g] 𝐑⦃#i⦄ → ∃∃I,K,V. ⇩[i] L ≡ K.ⓑ{I}V. +lemma crx_inv_lref: ∀h,g,G,L,i. ⦃G, L⦄ ⊢ ➡[h, g] 𝐑⦃#i⦄ → ∃∃I,K,V. ⬇[i] L ≡ K.ⓑ{I}V. /2 width=6 by crx_inv_lref_aux/ qed-. fact crx_inv_gref_aux: ∀h,g,G,L,T,p. ⦃G, L⦄ ⊢ ➡[h, g] 𝐑⦃T⦄ → T = §p → ⊥. diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/crx_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/crx_lift.ma index bcaacf28b..3298022ae 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/crx_lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/crx_lift.ma @@ -19,8 +19,8 @@ include "basic_2/reduction/crx.ma". (* Properties on relocation *************************************************) -lemma crx_lift: ∀h,g,G,K,T. ⦃G, K⦄ ⊢ ➡[h, g] 𝐑⦃T⦄ → ∀L,s,d,e. ⇩[s, d, e] L ≡ K → - ∀U. ⇧[d, e] T ≡ U → ⦃G, L⦄ ⊢ ➡[h, g] 𝐑⦃U⦄. +lemma crx_lift: ∀h,g,G,K,T. ⦃G, K⦄ ⊢ ➡[h, g] 𝐑⦃T⦄ → ∀L,s,d,e. ⬇[s, d, e] L ≡ K → + ∀U. ⬆[d, e] T ≡ U → ⦃G, L⦄ ⊢ ➡[h, g] 𝐑⦃U⦄. #h #g #G #K #T #H elim H -K -T [ #K #k #l #Hkl #L #s #d #e #_ #X #H >(lift_inv_sort1 … H) -X /2 width=2 by crx_sort/ @@ -48,8 +48,8 @@ lemma crx_lift: ∀h,g,G,K,T. ⦃G, K⦄ ⊢ ➡[h, g] 𝐑⦃T⦄ → ∀L,s,d, ] qed. -lemma crx_inv_lift: ∀h,g,G,L,U. ⦃G, L⦄ ⊢ ➡[h, g] 𝐑⦃U⦄ → ∀K,s,d,e. ⇩[s, d, e] L ≡ K → - ∀T. ⇧[d, e] T ≡ U → ⦃G, K⦄ ⊢ ➡[h, g] 𝐑⦃T⦄. +lemma crx_inv_lift: ∀h,g,G,L,U. ⦃G, L⦄ ⊢ ➡[h, g] 𝐑⦃U⦄ → ∀K,s,d,e. ⬇[s, d, e] L ≡ K → + ∀T. ⬆[d, e] T ≡ U → ⦃G, K⦄ ⊢ ➡[h, g] 𝐑⦃T⦄. #h #g #G #L #U #H elim H -L -U [ #L #k #l #Hkl #K #s #d #e #_ #X #H >(lift_inv_sort2 … H) -X /2 width=2 by crx_sort/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/lpr_lpr.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/lpr_lpr.ma index 2aa2810b1..284fafe20 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/lpr_lpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/lpr_lpr.ma @@ -31,8 +31,8 @@ fact cpr_conf_lpr_atom_delta: ∀L1. ⦃G, L⦄ ⊢ ➡ L1 → ∀L2. ⦃G, L⦄ ⊢ ➡ L2 → ∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡ T0 & ⦃G, L2⦄ ⊢ T2 ➡ T0 ) → - ∀K0,V0. ⇩[i] L0 ≡ K0.ⓓV0 → - ∀V2. ⦃G, K0⦄ ⊢ V0 ➡ V2 → ∀T2. ⇧[O, i + 1] V2 ≡ T2 → + ∀K0,V0. ⬇[i] L0 ≡ K0.ⓓV0 → + ∀V2. ⦃G, K0⦄ ⊢ V0 ➡ V2 → ∀T2. ⬆[O, i + 1] V2 ≡ T2 → ∀L1. ⦃G, L0⦄ ⊢ ➡ L1 → ∀L2. ⦃G, L0⦄ ⊢ ➡ L2 → ∃∃T. ⦃G, L1⦄ ⊢ #i ➡ T & ⦃G, L2⦄ ⊢ T2 ➡ T. #G #L0 #i #IH #K0 #V0 #HLK0 #V2 #HV02 #T2 #HVT2 #L1 #HL01 #L2 #HL02 @@ -55,10 +55,10 @@ fact cpr_conf_lpr_delta_delta: ∀L1. ⦃G, L⦄ ⊢ ➡ L1 → ∀L2. ⦃G, L⦄ ⊢ ➡ L2 → ∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡ T0 & ⦃G, L2⦄ ⊢ T2 ➡ T0 ) → - ∀K0,V0. ⇩[i] L0 ≡ K0.ⓓV0 → - ∀V1. ⦃G, K0⦄ ⊢ V0 ➡ V1 → ∀T1. ⇧[O, i + 1] V1 ≡ T1 → - ∀KX,VX. ⇩[i] L0 ≡ KX.ⓓVX → - ∀V2. ⦃G, KX⦄ ⊢ VX ➡ V2 → ∀T2. ⇧[O, i + 1] V2 ≡ T2 → + ∀K0,V0. ⬇[i] L0 ≡ K0.ⓓV0 → + ∀V1. ⦃G, K0⦄ ⊢ V0 ➡ V1 → ∀T1. ⬆[O, i + 1] V1 ≡ T1 → + ∀KX,VX. ⬇[i] L0 ≡ KX.ⓓVX → + ∀V2. ⦃G, KX⦄ ⊢ VX ➡ V2 → ∀T2. ⬆[O, i + 1] V2 ≡ T2 → ∀L1. ⦃G, L0⦄ ⊢ ➡ L1 → ∀L2. ⦃G, L0⦄ ⊢ ➡ L2 → ∃∃T. ⦃G, L1⦄ ⊢ T1 ➡ T & ⦃G, L2⦄ ⊢ T2 ➡ T. #G #L0 #i #IH #K0 #V0 #HLK0 #V1 #HV01 #T1 #HVT1 @@ -101,7 +101,7 @@ fact cpr_conf_lpr_bind_zeta: ∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡ T0 & ⦃G, L2⦄ ⊢ T2 ➡ T0 ) → ∀V1. ⦃G, L0⦄ ⊢ V0 ➡ V1 → ∀T1. ⦃G, L0.ⓓV0⦄ ⊢ T0 ➡ T1 → - ∀T2. ⦃G, L0.ⓓV0⦄ ⊢ T0 ➡ T2 → ∀X2. ⇧[O, 1] X2 ≡ T2 → + ∀T2. ⦃G, L0.ⓓV0⦄ ⊢ T0 ➡ T2 → ∀X2. ⬆[O, 1] X2 ≡ T2 → ∀L1. ⦃G, L0⦄ ⊢ ➡ L1 → ∀L2. ⦃G, L0⦄ ⊢ ➡ L2 → ∃∃T. ⦃G, L1⦄ ⊢ +ⓓV1.T1 ➡ T & ⦃G, L2⦄ ⊢ X2 ➡ T. #G #L0 #V0 #T0 #IH #V1 #HV01 #T1 #HT01 @@ -117,8 +117,8 @@ fact cpr_conf_lpr_zeta_zeta: ∀L1. ⦃G, L⦄ ⊢ ➡ L1 → ∀L2. ⦃G, L⦄ ⊢ ➡ L2 → ∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡ T0 & ⦃G, L2⦄ ⊢ T2 ➡ T0 ) → - ∀T1. ⦃G, L0.ⓓV0⦄ ⊢ T0 ➡ T1 → ∀X1. ⇧[O, 1] X1 ≡ T1 → - ∀T2. ⦃G, L0.ⓓV0⦄ ⊢ T0 ➡ T2 → ∀X2. ⇧[O, 1] X2 ≡ T2 → + ∀T1. ⦃G, L0.ⓓV0⦄ ⊢ T0 ➡ T1 → ∀X1. ⬆[O, 1] X1 ≡ T1 → + ∀T2. ⦃G, L0.ⓓV0⦄ ⊢ T0 ➡ T2 → ∀X2. ⬆[O, 1] X2 ≡ T2 → ∀L1. ⦃G, L0⦄ ⊢ ➡ L1 → ∀L2. ⦃G, L0⦄ ⊢ ➡ L2 → ∃∃T. ⦃G, L1⦄ ⊢ X1 ➡ T & ⦃G, L2⦄ ⊢ X2 ➡ T. #G #L0 #V0 #T0 #IH #T1 #HT01 #X1 #HXT1 @@ -209,7 +209,7 @@ fact cpr_conf_lpr_flat_theta: ∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡ T0 & ⦃G, L2⦄ ⊢ T2 ➡ T0 ) → ∀V1. ⦃G, L0⦄ ⊢ V0 ➡ V1 → ∀T1. ⦃G, L0⦄ ⊢ ⓓ{a}W0.T0 ➡ T1 → - ∀V2. ⦃G, L0⦄ ⊢ V0 ➡ V2 → ∀U2. ⇧[O, 1] V2 ≡ U2 → + ∀V2. ⦃G, L0⦄ ⊢ V0 ➡ V2 → ∀U2. ⬆[O, 1] V2 ≡ U2 → ∀W2. ⦃G, L0⦄ ⊢ W0 ➡ W2 → ∀T2. ⦃G, L0.ⓓW0⦄ ⊢ T0 ➡ T2 → ∀L1. ⦃G, L0⦄ ⊢ ➡ L1 → ∀L2. ⦃G, L0⦄ ⊢ ➡ L2 → ∃∃T. ⦃G, L1⦄ ⊢ ⓐV1.T1 ➡ T & ⦃G, L2⦄ ⊢ ⓓ{a}W2.ⓐU2.T2 ➡ T. @@ -259,9 +259,9 @@ fact cpr_conf_lpr_theta_theta: ∀L1. ⦃G, L⦄ ⊢ ➡ L1 → ∀L2. ⦃G, L⦄ ⊢ ➡ L2 → ∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡ T0 & ⦃G, L2⦄ ⊢ T2 ➡ T0 ) → - ∀V1. ⦃G, L0⦄ ⊢ V0 ➡ V1 → ∀U1. ⇧[O, 1] V1 ≡ U1 → + ∀V1. ⦃G, L0⦄ ⊢ V0 ➡ V1 → ∀U1. ⬆[O, 1] V1 ≡ U1 → ∀W1. ⦃G, L0⦄ ⊢ W0 ➡ W1 → ∀T1. ⦃G, L0.ⓓW0⦄ ⊢ T0 ➡ T1 → - ∀V2. ⦃G, L0⦄ ⊢ V0 ➡ V2 → ∀U2. ⇧[O, 1] V2 ≡ U2 → + ∀V2. ⦃G, L0⦄ ⊢ V0 ➡ V2 → ∀U2. ⬆[O, 1] V2 ≡ U2 → ∀W2. ⦃G, L0⦄ ⊢ W0 ➡ W2 → ∀T2. ⦃G, L0.ⓓW0⦄ ⊢ T0 ➡ T2 → ∀L1. ⦃G, L0⦄ ⊢ ➡ L1 → ∀L2. ⦃G, L0⦄ ⊢ ➡ L2 → ∃∃T. ⦃G, L1⦄ ⊢ ⓓ{a}W1.ⓐU1.T1 ➡ T & ⦃G, L2⦄ ⊢ ⓓ{a}W2.ⓐU2.T2 ➡ T. diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/static/aaa.ma index 687a92199..9c1f53736 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/aaa.ma @@ -22,7 +22,7 @@ include "basic_2/substitution/drop.ma". (* activate genv *) inductive aaa: relation4 genv lenv term aarity ≝ | aaa_sort: ∀G,L,k. aaa G L (⋆k) (⓪) -| aaa_lref: ∀I,G,L,K,V,B,i. ⇩[i] L ≡ K. ⓑ{I}V → aaa G K V B → aaa G L (#i) B +| aaa_lref: ∀I,G,L,K,V,B,i. ⬇[i] L ≡ K. ⓑ{I}V → aaa G K V B → aaa G L (#i) B | aaa_abbr: ∀a,G,L,V,T,B,A. aaa G L V B → aaa G (L.ⓓV) T A → aaa G L (ⓓ{a}V.T) A | aaa_abst: ∀a,G,L,V,T,B,A. @@ -51,7 +51,7 @@ lemma aaa_inv_sort: ∀G,L,A,k. ⦃G, L⦄ ⊢ ⋆k ⁝ A → A = ⓪. /2 width=6 by aaa_inv_sort_aux/ qed-. fact aaa_inv_lref_aux: ∀G,L,T,A. ⦃G, L⦄ ⊢ T ⁝ A → ∀i. T = #i → - ∃∃I,K,V. ⇩[i] L ≡ K.ⓑ{I} V & ⦃G, K⦄ ⊢ V ⁝ A. + ∃∃I,K,V. ⬇[i] L ≡ K.ⓑ{I} V & ⦃G, K⦄ ⊢ V ⁝ A. #G #L #T #A * -G -L -T -A [ #G #L #k #i #H destruct | #I #G #L #K #V #B #j #HLK #HB #i #H destruct /2 width=5 by ex2_3_intro/ @@ -63,7 +63,7 @@ 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,V. ⇩[i] L ≡ K. ⓑ{I} V & ⦃G, K⦄ ⊢ V ⁝ A. + ∃∃I,K,V. ⬇[i] L ≡ K. ⓑ{I} V & ⦃G, K⦄ ⊢ V ⁝ A. /2 width=3 by aaa_inv_lref_aux/ qed-. fact aaa_inv_gref_aux: ∀G,L,T,A. ⦃G, L⦄ ⊢ T ⁝ A → ∀p. T = §p → ⊥. diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/aaa_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/static/aaa_lift.ma index 1b2b95b18..736f45d98 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/aaa_lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/aaa_lift.ma @@ -19,8 +19,8 @@ include "basic_2/static/aaa.ma". (* Properties on basic relocation *******************************************) -lemma aaa_lift: ∀G,L1,T1,A. ⦃G, L1⦄ ⊢ T1 ⁝ A → ∀L2,s,d,e. ⇩[s, d, e] L2 ≡ L1 → - ∀T2. ⇧[d, e] T1 ≡ T2 → ⦃G, L2⦄ ⊢ T2 ⁝ A. +lemma aaa_lift: ∀G,L1,T1,A. ⦃G, L1⦄ ⊢ T1 ⁝ A → ∀L2,s,d,e. ⬇[s, d, e] L2 ≡ L1 → + ∀T2. ⬆[d, e] T1 ≡ T2 → ⦃G, L2⦄ ⊢ T2 ⁝ A. #G #L1 #T1 #A #H elim H -G -L1 -T1 -A [ #G #L1 #k #L2 #s #d #e #_ #T2 #H >(lift_inv_sort1 … H) -H // @@ -47,8 +47,8 @@ lemma aaa_lift: ∀G,L1,T1,A. ⦃G, L1⦄ ⊢ T1 ⁝ A → ∀L2,s,d,e. ⇩[s, d ] qed. -lemma aaa_inv_lift: ∀G,L2,T2,A. ⦃G, L2⦄ ⊢ T2 ⁝ A → ∀L1,s,d,e. ⇩[s, d, e] L2 ≡ L1 → - ∀T1. ⇧[d, e] T1 ≡ T2 → ⦃G, L1⦄ ⊢ T1 ⁝ A. +lemma aaa_inv_lift: ∀G,L2,T2,A. ⦃G, L2⦄ ⊢ T2 ⁝ A → ∀L1,s,d,e. ⬇[s, d, e] L2 ≡ L1 → + ∀T1. ⬆[d, e] T1 ≡ T2 → ⦃G, L1⦄ ⊢ T1 ⁝ A. #G #L2 #T2 #A #H elim H -G -L2 -T2 -A [ #G #L2 #k #L1 #s #d #e #_ #T1 #H >(lift_inv_sort2 … H) -H // diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/aaa_lifts.ma b/matita/matita/contribs/lambdadelta/basic_2/static/aaa_lifts.ma index 50c795b1f..d3018298d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/aaa_lifts.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/aaa_lifts.ma @@ -19,7 +19,7 @@ include "basic_2/static/aaa_lift.ma". (* Properties concerning generic relocation *********************************) -lemma aaa_lifts: ∀G,L1,L2,T2,A,s,des. ⇩*[s, des] L2 ≡ L1 → ∀T1. ⇧*[des] T1 ≡ T2 → +lemma aaa_lifts: ∀G,L1,L2,T2,A,s,des. ⬇*[s, des] L2 ≡ L1 → ∀T1. ⬆*[des] T1 ≡ T2 → ⦃G, L1⦄ ⊢ T1 ⁝ A → ⦃G, L2⦄ ⊢ T2 ⁝ A. #G #L1 #L2 #T2 #A #s #des #H elim H -L1 -L2 -des [ #L #T1 #H #HT1 diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/da.ma b/matita/matita/contribs/lambdadelta/basic_2/static/da.ma index 69baf3fdc..81201f52a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/da.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/da.ma @@ -22,8 +22,8 @@ include "basic_2/static/sd.ma". (* activate genv *) inductive da (h:sh) (g:sd h): relation4 genv lenv term nat ≝ | da_sort: ∀G,L,k,l. deg h g k l → da h g G L (⋆k) l -| da_ldef: ∀G,L,K,V,i,l. ⇩[i] L ≡ K.ⓓV → da h g G K V l → da h g G L (#i) l -| da_ldec: ∀G,L,K,W,i,l. ⇩[i] L ≡ K.ⓛW → da h g G K W l → da h g G L (#i) (l+1) +| da_ldef: ∀G,L,K,V,i,l. ⬇[i] L ≡ K.ⓓV → da h g G K V l → da h g G L (#i) l +| da_ldec: ∀G,L,K,W,i,l. ⬇[i] L ≡ K.ⓛW → da h g G K W l → da h g G L (#i) (l+1) | da_bind: ∀a,I,G,L,V,T,l. da h g G (L.ⓑ{I}V) T l → da h g G L (ⓑ{a,I}V.T) l | da_flat: ∀I,G,L,V,T,l. da h g G L T l → da h g G L (ⓕ{I}V.T) l . @@ -48,8 +48,8 @@ lemma da_inv_sort: ∀h,g,G,L,k,l. ⦃G, L⦄ ⊢ ⋆k ▪[h, g] l → deg h g k /2 width=5 by da_inv_sort_aux/ qed-. fact da_inv_lref_aux: ∀h,g,G,L,T,l. ⦃G, L⦄ ⊢ T ▪[h, g] l → ∀j. T = #j → - (∃∃K,V. ⇩[j] L ≡ K.ⓓV & ⦃G, K⦄ ⊢ V ▪[h, g] l) ∨ - (∃∃K,W,l0. ⇩[j] L ≡ K.ⓛW & ⦃G, K⦄ ⊢ W ▪[h, g] l0 & + (∃∃K,V. ⬇[j] L ≡ K.ⓓV & ⦃G, K⦄ ⊢ V ▪[h, g] l) ∨ + (∃∃K,W,l0. ⬇[j] L ≡ K.ⓛW & ⦃G, K⦄ ⊢ W ▪[h, g] l0 & l = l0 + 1 ). #h #g #G #L #T #l * -G -L -T -l @@ -62,8 +62,8 @@ fact da_inv_lref_aux: ∀h,g,G,L,T,l. ⦃G, L⦄ ⊢ T ▪[h, g] l → ∀j. T = qed-. lemma da_inv_lref: ∀h,g,G,L,j,l. ⦃G, L⦄ ⊢ #j ▪[h, g] l → - (∃∃K,V. ⇩[j] L ≡ K.ⓓV & ⦃G, K⦄ ⊢ V ▪[h, g] l) ∨ - (∃∃K,W,l0. ⇩[j] L ≡ K.ⓛW & ⦃G, K⦄ ⊢ W ▪[h, g] l0 & l = l0+1). + (∃∃K,V. ⬇[j] L ≡ K.ⓓV & ⦃G, K⦄ ⊢ V ▪[h, g] l) ∨ + (∃∃K,W,l0. ⬇[j] L ≡ K.ⓛW & ⦃G, K⦄ ⊢ W ▪[h, g] l0 & l = l0+1). /2 width=3 by da_inv_lref_aux/ qed-. fact da_inv_gref_aux: ∀h,g,G,L,T,l. ⦃G, L⦄ ⊢ T ▪[h, g] l → ∀p0. T = §p0 → ⊥. diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/da_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/static/da_lift.ma index b2ad8b882..0e7428fa3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/da_lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/da_lift.ma @@ -20,7 +20,7 @@ include "basic_2/static/da.ma". (* Properties on relocation *************************************************) lemma da_lift: ∀h,g,G,L1,T1,l. ⦃G, L1⦄ ⊢ T1 ▪[h, g] l → - ∀L2,s,d,e. ⇩[s, d, e] L2 ≡ L1 → ∀T2. ⇧[d, e] T1 ≡ T2 → + ∀L2,s,d,e. ⬇[s, d, e] L2 ≡ L1 → ∀T2. ⬆[d, e] T1 ≡ T2 → ⦃G, L2⦄ ⊢ T2 ▪[h, g] l. #h #g #G #L1 #T1 #l #H elim H -G -L1 -T1 -l [ #G #L1 #k #l #Hkl #L2 #s #d #e #_ #X #H @@ -53,7 +53,7 @@ qed. (* Inversion lemmas on relocation *******************************************) lemma da_inv_lift: ∀h,g,G,L2,T2,l. ⦃G, L2⦄ ⊢ T2 ▪[h, g] l → - ∀L1,s,d,e. ⇩[s, d, e] L2 ≡ L1 → ∀T1. ⇧[d, e] T1 ≡ T2 → + ∀L1,s,d,e. ⬇[s, d, e] L2 ≡ L1 → ∀T1. ⬆[d, e] T1 ≡ T2 → ⦃G, L1⦄ ⊢ T1 ▪[h, g] l. #h #g #G #L2 #T2 #l #H elim H -G -L2 -T2 -l [ #G #L2 #k #l #Hkl #L1 #s #d #e #_ #X #H diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/lsuba.ma b/matita/matita/contribs/lambdadelta/basic_2/static/lsuba.ma index be8b2a38b..be272d27a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/lsuba.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/lsuba.ma @@ -100,8 +100,8 @@ lemma lsuba_refl: ∀G,L. G ⊢ L ⫃⁝ L. qed. (* Note: the constant 0 cannot be generalized *) -lemma lsuba_drop_O1_conf: ∀G,L1,L2. G ⊢ L1 ⫃⁝ L2 → ∀K1,s,e. ⇩[s, 0, e] L1 ≡ K1 → - ∃∃K2. G ⊢ K1 ⫃⁝ K2 & ⇩[s, 0, e] L2 ≡ K2. +lemma lsuba_drop_O1_conf: ∀G,L1,L2. G ⊢ L1 ⫃⁝ L2 → ∀K1,s,e. ⬇[s, 0, e] L1 ≡ K1 → + ∃∃K2. G ⊢ K1 ⫃⁝ K2 & ⬇[s, 0, e] L2 ≡ K2. #G #L1 #L2 #H elim H -L1 -L2 [ /2 width=3 by ex2_intro/ | #I #L1 #L2 #V #_ #IHL12 #K1 #s #e #H @@ -122,8 +122,8 @@ lemma lsuba_drop_O1_conf: ∀G,L1,L2. G ⊢ L1 ⫃⁝ L2 → ∀K1,s,e. ⇩[s, 0 qed-. (* Note: the constant 0 cannot be generalized *) -lemma lsuba_drop_O1_trans: ∀G,L1,L2. G ⊢ L1 ⫃⁝ L2 → ∀K2,s,e. ⇩[s, 0, e] L2 ≡ K2 → - ∃∃K1. G ⊢ K1 ⫃⁝ K2 & ⇩[s, 0, e] L1 ≡ K1. +lemma lsuba_drop_O1_trans: ∀G,L1,L2. G ⊢ L1 ⫃⁝ L2 → ∀K2,s,e. ⬇[s, 0, e] L2 ≡ K2 → + ∃∃K1. G ⊢ K1 ⫃⁝ K2 & ⬇[s, 0, e] L1 ≡ K1. #G #L1 #L2 #H elim H -L1 -L2 [ /2 width=3 by ex2_intro/ | #I #L1 #L2 #V #_ #IHL12 #K2 #s #e #H diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/lsubd.ma b/matita/matita/contribs/lambdadelta/basic_2/static/lsubd.ma index 3dec42104..14abf913d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/lsubd.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/lsubd.ma @@ -106,8 +106,8 @@ qed. (* Note: the constant 0 cannot be generalized *) lemma lsubd_drop_O1_conf: ∀h,g,G,L1,L2. G ⊢ L1 ⫃▪[h, g] L2 → - ∀K1,s,e. ⇩[s, 0, e] L1 ≡ K1 → - ∃∃K2. G ⊢ K1 ⫃▪[h, g] K2 & ⇩[s, 0, e] L2 ≡ K2. + ∀K1,s,e. ⬇[s, 0, e] L1 ≡ K1 → + ∃∃K2. G ⊢ K1 ⫃▪[h, g] K2 & ⬇[s, 0, e] L2 ≡ K2. #h #g #G #L1 #L2 #H elim H -L1 -L2 [ /2 width=3 by ex2_intro/ | #I #L1 #L2 #V #_ #IHL12 #K1 #s #e #H @@ -129,8 +129,8 @@ qed-. (* Note: the constant 0 cannot be generalized *) lemma lsubd_drop_O1_trans: ∀h,g,G,L1,L2. G ⊢ L1 ⫃▪[h, g] L2 → - ∀K2,s,e. ⇩[s, 0, e] L2 ≡ K2 → - ∃∃K1. G ⊢ K1 ⫃▪[h, g] K2 & ⇩[s, 0, e] L1 ≡ K1. + ∀K2,s,e. ⬇[s, 0, e] L2 ≡ K2 → + ∃∃K1. G ⊢ K1 ⫃▪[h, g] K2 & ⬇[s, 0, e] L1 ≡ K1. #h #g #G #L1 #L2 #H elim H -L1 -L2 [ /2 width=3 by ex2_intro/ | #I #L1 #L2 #V #_ #IHL12 #K2 #s #e #H diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/lsubr.ma b/matita/matita/contribs/lambdadelta/basic_2/static/lsubr.ma index 4aeecb118..111da1751 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/lsubr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/lsubr.ma @@ -78,9 +78,9 @@ lemma lsubr_fwd_length: ∀L1,L2. L1 ⫃ L2 → |L2| ≤ |L1|. qed-. lemma lsubr_fwd_drop2_pair: ∀L1,L2. L1 ⫃ L2 → - ∀I,K2,W,s,i. ⇩[s, 0, i] L2 ≡ K2.ⓑ{I}W → - (∃∃K1. K1 ⫃ K2 & ⇩[s, 0, i] L1 ≡ K1.ⓑ{I}W) ∨ - ∃∃K1,V. K1 ⫃ K2 & ⇩[s, 0, i] L1 ≡ K1.ⓓⓝW.V & I = Abst. + ∀I,K2,W,s,i. ⬇[s, 0, i] L2 ≡ K2.ⓑ{I}W → + (∃∃K1. K1 ⫃ K2 & ⬇[s, 0, i] L1 ≡ K1.ⓑ{I}W) ∨ + ∃∃K1,V. K1 ⫃ K2 & ⬇[s, 0, i] L1 ≡ K1.ⓓⓝW.V & I = Abst. #L1 #L2 #H elim H -L1 -L2 [ #L #I #K2 #W #s #i #H elim (drop_inv_atom1 … H) -H #H destruct @@ -100,8 +100,8 @@ lemma lsubr_fwd_drop2_pair: ∀L1,L2. L1 ⫃ L2 → qed-. lemma lsubr_fwd_drop2_abbr: ∀L1,L2. L1 ⫃ L2 → - ∀K2,V,s,i. ⇩[s, 0, i] L2 ≡ K2.ⓓV → - ∃∃K1. K1 ⫃ K2 & ⇩[s, 0, i] L1 ≡ K1.ⓓV. + ∀K2,V,s,i. ⬇[s, 0, i] L2 ≡ K2.ⓓV → + ∃∃K1. K1 ⫃ K2 & ⬇[s, 0, i] L1 ≡ K1.ⓓV. #L1 #L2 #HL12 #K2 #V #s #i #HLK2 elim (lsubr_fwd_drop2_pair … HL12 … HLK2) -L2 // * #K1 #W #_ #_ #H destruct qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/substitution/cpy.ma b/matita/matita/contribs/lambdadelta/basic_2/substitution/cpy.ma index 5dbbe92e6..439a2cba2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/substitution/cpy.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/substitution/cpy.ma @@ -23,7 +23,7 @@ include "basic_2/substitution/lsuby.ma". inductive cpy: ynat → ynat → relation4 genv lenv term term ≝ | cpy_atom : ∀I,G,L,d,e. cpy d e G L (⓪{I}) (⓪{I}) | cpy_subst: ∀I,G,L,K,V,W,i,d,e. d ≤ yinj i → i < d+e → - ⇩[i] L ≡ K.ⓑ{I}V → ⇧[0, i+1] V ≡ W → cpy d e G L (#i) W + ⬇[i] L ≡ K.ⓑ{I}V → ⬆[0, i+1] V ≡ W → cpy d e G L (#i) W | cpy_bind : ∀a,I,G,L,V1,V2,T1,T2,d,e. cpy d e G L V1 V2 → cpy (⫯d) e G (L.ⓑ{I}V1) T1 T2 → cpy d e G L (ⓑ{a,I}V1.T1) (ⓑ{a,I}V2.T2) @@ -52,8 +52,8 @@ lemma cpy_refl: ∀G,T,L,d,e. ⦃G, L⦄ ⊢ T ▶[d, e] T. qed. (* Basic_1: was: subst1_ex *) -lemma cpy_full: ∀I,G,K,V,T1,L,d. ⇩[d] L ≡ K.ⓑ{I}V → - ∃∃T2,T. ⦃G, L⦄ ⊢ T1 ▶[d, 1] T2 & ⇧[d, 1] T ≡ T2. +lemma cpy_full: ∀I,G,K,V,T1,L,d. ⬇[d] L ≡ K.ⓑ{I}V → + ∃∃T2,T. ⦃G, L⦄ ⊢ T1 ▶[d, 1] T2 & ⬆[d, 1] T ≡ T2. #I #G #K #V #T1 elim T1 -T1 [ * #i #L #d #HLK /2 width=4 by lift_sort, lift_gref, ex2_2_intro/ @@ -143,9 +143,9 @@ qed-. (* Basic forward lemmas *****************************************************) lemma cpy_fwd_up: ∀G,L,U1,U2,dt,et. ⦃G, L⦄ ⊢ U1 ▶[dt, et] U2 → - ∀T1,d,e. ⇧[d, e] T1 ≡ U1 → + ∀T1,d,e. ⬆[d, e] T1 ≡ U1 → d ≤ dt → d + e ≤ dt + et → - ∃∃T2. ⦃G, L⦄ ⊢ U1 ▶[d+e, dt+et-(d+e)] U2 & ⇧[d, e] T2 ≡ U2. + ∃∃T2. ⦃G, L⦄ ⊢ U1 ▶[d+e, dt+et-(d+e)] U2 & ⬆[d, e] T2 ≡ U2. #G #L #U1 #U2 #dt #et #H elim H -G -L -U1 -U2 -dt -et [ * #i #G #L #dt #et #T1 #d #e #H #_ [ lapply (lift_inv_sort2 … H) -H #H destruct /2 width=3 by ex2_intro/ @@ -183,8 +183,8 @@ qed-. fact cpy_inv_atom1_aux: ∀G,L,T1,T2,d,e. ⦃G, L⦄ ⊢ T1 ▶[d, e] T2 → ∀J. T1 = ⓪{J} → T2 = ⓪{J} ∨ ∃∃I,K,V,i. d ≤ yinj i & i < d + e & - ⇩[i] L ≡ K.ⓑ{I}V & - ⇧[O, i+1] V ≡ T2 & + ⬇[i] L ≡ K.ⓑ{I}V & + ⬆[O, i+1] V ≡ T2 & J = LRef i. #G #L #T1 #T2 #d #e * -G -L -T1 -T2 -d -e [ #I #G #L #d #e #J #H destruct /2 width=1 by or_introl/ @@ -197,8 +197,8 @@ qed-. lemma cpy_inv_atom1: ∀I,G,L,T2,d,e. ⦃G, L⦄ ⊢ ⓪{I} ▶[d, e] T2 → T2 = ⓪{I} ∨ ∃∃J,K,V,i. d ≤ yinj i & i < d + e & - ⇩[i] L ≡ K.ⓑ{J}V & - ⇧[O, i+1] V ≡ T2 & + ⬇[i] L ≡ K.ⓑ{J}V & + ⬆[O, i+1] V ≡ T2 & I = LRef i. /2 width=4 by cpy_inv_atom1_aux/ qed-. @@ -213,8 +213,8 @@ qed-. lemma cpy_inv_lref1: ∀G,L,T2,i,d,e. ⦃G, L⦄ ⊢ #i ▶[d, e] T2 → T2 = #i ∨ ∃∃I,K,V. d ≤ i & i < d + e & - ⇩[i] L ≡ K.ⓑ{I}V & - ⇧[O, i+1] V ≡ T2. + ⬇[i] L ≡ K.ⓑ{I}V & + ⬆[O, i+1] V ≡ T2. #G #L #T2 #i #d #e #H elim (cpy_inv_atom1 … H) -H /2 width=1 by or_introl/ * #I #K #V #j #Hdj #Hjde #HLK #HVT2 #H destruct /3 width=5 by ex4_3_intro, or_intror/ @@ -279,7 +279,7 @@ lemma cpy_inv_refl_O2: ∀G,L,T1,T2,d. ⦃G, L⦄ ⊢ T1 ▶[d, 0] T2 → T1 = T /2 width=6 by cpy_inv_refl_O2_aux/ qed-. (* Basic_1: was: subst1_gen_lift_eq *) -lemma cpy_inv_lift1_eq: ∀G,T1,U1,d,e. ⇧[d, e] T1 ≡ U1 → +lemma cpy_inv_lift1_eq: ∀G,T1,U1,d,e. ⬆[d, e] T1 ≡ U1 → ∀L,U2. ⦃G, L⦄ ⊢ U1 ▶[d, e] U2 → U1 = U2. #G #T1 #U1 #d #e #HTU1 #L #U2 #HU12 elim (cpy_fwd_up … HU12 … HTU1) -HU12 -HTU1 /2 width=4 by cpy_inv_refl_O2/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/substitution/cpy_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/substitution/cpy_lift.ma index 78318917b..991d4db29 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/substitution/cpy_lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/substitution/cpy_lift.ma @@ -21,8 +21,8 @@ include "basic_2/substitution/cpy.ma". (* Basic_1: was: subst1_lift_lt *) lemma cpy_lift_le: ∀G,K,T1,T2,dt,et. ⦃G, K⦄ ⊢ T1 ▶[dt, et] T2 → - ∀L,U1,U2,s,d,e. ⇩[s, d, e] L ≡ K → - ⇧[d, e] T1 ≡ U1 → ⇧[d, e] T2 ≡ U2 → + ∀L,U1,U2,s,d,e. ⬇[s, d, e] L ≡ K → + ⬆[d, e] T1 ≡ U1 → ⬆[d, e] T2 ≡ U2 → dt + et ≤ d → ⦃G, L⦄ ⊢ U1 ▶[dt, et] U2. #G #K #T1 #T2 #dt #et #H elim H -G -K -T1 -T2 -dt -et [ #I #G #K #dt #et #L #U1 #U2 #s #d #e #_ #H1 #H2 #_ @@ -47,8 +47,8 @@ lemma cpy_lift_le: ∀G,K,T1,T2,dt,et. ⦃G, K⦄ ⊢ T1 ▶[dt, et] T2 → qed-. lemma cpy_lift_be: ∀G,K,T1,T2,dt,et. ⦃G, K⦄ ⊢ T1 ▶[dt, et] T2 → - ∀L,U1,U2,s,d,e. ⇩[s, d, e] L ≡ K → - ⇧[d, e] T1 ≡ U1 → ⇧[d, e] T2 ≡ U2 → + ∀L,U1,U2,s,d,e. ⬇[s, d, e] L ≡ K → + ⬆[d, e] T1 ≡ U1 → ⬆[d, e] T2 ≡ U2 → dt ≤ d → d ≤ dt + et → ⦃G, L⦄ ⊢ U1 ▶[dt, et + e] U2. #G #K #T1 #T2 #dt #et #H elim H -G -K -T1 -T2 -dt -et [ #I #G #K #dt #et #L #U1 #U2 #s #d #e #_ #H1 #H2 #_ #_ @@ -81,8 +81,8 @@ qed-. (* Basic_1: was: subst1_lift_ge *) lemma cpy_lift_ge: ∀G,K,T1,T2,dt,et. ⦃G, K⦄ ⊢ T1 ▶[dt, et] T2 → - ∀L,U1,U2,s,d,e. ⇩[s, d, e] L ≡ K → - ⇧[d, e] T1 ≡ U1 → ⇧[d, e] T2 ≡ U2 → + ∀L,U1,U2,s,d,e. ⬇[s, d, e] L ≡ K → + ⬆[d, e] T1 ≡ U1 → ⬆[d, e] T2 ≡ U2 → d ≤ dt → ⦃G, L⦄ ⊢ U1 ▶[dt+e, et] U2. #G #K #T1 #T2 #dt #et #H elim H -G -K -T1 -T2 -dt -et [ #I #G #K #dt #et #L #U1 #U2 #s #d #e #_ #H1 #H2 #_ @@ -109,9 +109,9 @@ qed-. (* Basic_1: was: subst1_gen_lift_lt *) lemma cpy_inv_lift1_le: ∀G,L,U1,U2,dt,et. ⦃G, L⦄ ⊢ U1 ▶[dt, et] U2 → - ∀K,s,d,e. ⇩[s, d, e] L ≡ K → ∀T1. ⇧[d, e] T1 ≡ U1 → + ∀K,s,d,e. ⬇[s, d, e] L ≡ K → ∀T1. ⬆[d, e] T1 ≡ U1 → dt + et ≤ d → - ∃∃T2. ⦃G, K⦄ ⊢ T1 ▶[dt, et] T2 & ⇧[d, e] T2 ≡ U2. + ∃∃T2. ⦃G, K⦄ ⊢ T1 ▶[dt, et] T2 & ⬆[d, e] T2 ≡ U2. #G #L #U1 #U2 #dt #et #H elim H -G -L -U1 -U2 -dt -et [ * #i #G #L #dt #et #K #s #d #e #_ #T1 #H #_ [ lapply (lift_inv_sort2 … H) -H #H destruct /2 width=3 by ex2_intro/ @@ -138,9 +138,9 @@ lemma cpy_inv_lift1_le: ∀G,L,U1,U2,dt,et. ⦃G, L⦄ ⊢ U1 ▶[dt, et] U2 → qed-. lemma cpy_inv_lift1_be: ∀G,L,U1,U2,dt,et. ⦃G, L⦄ ⊢ U1 ▶[dt, et] U2 → - ∀K,s,d,e. ⇩[s, d, e] L ≡ K → ∀T1. ⇧[d, e] T1 ≡ U1 → + ∀K,s,d,e. ⬇[s, d, e] L ≡ K → ∀T1. ⬆[d, e] T1 ≡ U1 → dt ≤ d → yinj d + e ≤ dt + et → - ∃∃T2. ⦃G, K⦄ ⊢ T1 ▶[dt, et-e] T2 & ⇧[d, e] T2 ≡ U2. + ∃∃T2. ⦃G, K⦄ ⊢ T1 ▶[dt, et-e] T2 & ⬆[d, e] T2 ≡ U2. #G #L #U1 #U2 #dt #et #H elim H -G -L -U1 -U2 -dt -et [ * #i #G #L #dt #et #K #s #d #e #_ #T1 #H #_ #_ [ lapply (lift_inv_sort2 … H) -H #H destruct /2 width=3 by ex2_intro/ @@ -178,9 +178,9 @@ qed-. (* Basic_1: was: subst1_gen_lift_ge *) lemma cpy_inv_lift1_ge: ∀G,L,U1,U2,dt,et. ⦃G, L⦄ ⊢ U1 ▶[dt, et] U2 → - ∀K,s,d,e. ⇩[s, d, e] L ≡ K → ∀T1. ⇧[d, e] T1 ≡ U1 → + ∀K,s,d,e. ⬇[s, d, e] L ≡ K → ∀T1. ⬆[d, e] T1 ≡ U1 → yinj d + e ≤ dt → - ∃∃T2. ⦃G, K⦄ ⊢ T1 ▶[dt-e, et] T2 & ⇧[d, e] T2 ≡ U2. + ∃∃T2. ⦃G, K⦄ ⊢ T1 ▶[dt-e, et] T2 & ⬆[d, e] T2 ≡ U2. #G #L #U1 #U2 #dt #et #H elim H -G -L -U1 -U2 -dt -et [ * #i #G #L #dt #et #K #s #d #e #_ #T1 #H #_ [ lapply (lift_inv_sort2 … H) -H #H destruct /2 width=3 by ex2_intro/ @@ -215,9 +215,9 @@ qed-. (* Advanced inversion lemmas on relocation ***********************************) lemma cpy_inv_lift1_ge_up: ∀G,L,U1,U2,dt,et. ⦃G, L⦄ ⊢ U1 ▶[dt, et] U2 → - ∀K,s,d,e. ⇩[s, d, e] L ≡ K → ∀T1. ⇧[d, e] T1 ≡ U1 → + ∀K,s,d,e. ⬇[s, d, e] L ≡ K → ∀T1. ⬆[d, e] T1 ≡ U1 → d ≤ dt → dt ≤ yinj d + e → yinj d + e ≤ dt + et → - ∃∃T2. ⦃G, K⦄ ⊢ T1 ▶[d, dt + et - (yinj d + e)] T2 & ⇧[d, e] T2 ≡ U2. + ∃∃T2. ⦃G, K⦄ ⊢ T1 ▶[d, dt + et - (yinj d + e)] T2 & ⬆[d, e] T2 ≡ U2. #G #L #U1 #U2 #dt #et #HU12 #K #s #d #e #HLK #T1 #HTU1 #Hddt #Hdtde #Hdedet elim (cpy_split_up … HU12 (d + e)) -HU12 // -Hdedet #U #HU1 #HU2 lapply (cpy_weak … HU1 d e ? ?) -HU1 // [ >ymax_pre_sn_comm // ] -Hddt -Hdtde #HU1 @@ -226,9 +226,9 @@ elim (cpy_inv_lift1_ge … HU2 … HLK … HTU1) -U -L /2 width=3 by ex2_intro/ qed-. lemma cpy_inv_lift1_be_up: ∀G,L,U1,U2,dt,et. ⦃G, L⦄ ⊢ U1 ▶[dt, et] U2 → - ∀K,s,d,e. ⇩[s, d, e] L ≡ K → ∀T1. ⇧[d, e] T1 ≡ U1 → + ∀K,s,d,e. ⬇[s, d, e] L ≡ K → ∀T1. ⬆[d, e] T1 ≡ U1 → dt ≤ d → dt + et ≤ yinj d + e → - ∃∃T2. ⦃G, K⦄ ⊢ T1 ▶[dt, d-dt] T2 & ⇧[d, e] T2 ≡ U2. + ∃∃T2. ⦃G, K⦄ ⊢ T1 ▶[dt, d-dt] T2 & ⬆[d, e] T2 ≡ U2. #G #L #U1 #U2 #dt #et #HU12 #K #s #d #e #HLK #T1 #HTU1 #Hdtd #Hdetde lapply (cpy_weak … HU12 dt (d+e-dt) ? ?) -HU12 // [ >ymax_pre_sn_comm /2 width=1 by yle_plus_dx1_trans/ ] -Hdetde #HU12 @@ -236,9 +236,9 @@ elim (cpy_inv_lift1_be … HU12 … HLK … HTU1) -U1 -L /2 width=3 by ex2_intro qed-. lemma cpy_inv_lift1_le_up: ∀G,L,U1,U2,dt,et. ⦃G, L⦄ ⊢ U1 ▶[dt, et] U2 → - ∀K,s,d,e. ⇩[s, d, e] L ≡ K → ∀T1. ⇧[d, e] T1 ≡ U1 → + ∀K,s,d,e. ⬇[s, d, e] L ≡ K → ∀T1. ⬆[d, e] T1 ≡ U1 → dt ≤ d → d ≤ dt + et → dt + et ≤ yinj d + e → - ∃∃T2. ⦃G, K⦄ ⊢ T1 ▶[dt, d - dt] T2 & ⇧[d, e] T2 ≡ U2. + ∃∃T2. ⦃G, K⦄ ⊢ T1 ▶[dt, d - dt] T2 & ⬆[d, e] T2 ≡ U2. #G #L #U1 #U2 #dt #et #HU12 #K #s #d #e #HLK #T1 #HTU1 #Hdtd #Hddet #Hdetde elim (cpy_split_up … HU12 d) -HU12 // #U #HU1 #HU2 elim (cpy_inv_lift1_le … HU1 … HLK … HTU1) -U1 diff --git a/matita/matita/contribs/lambdadelta/basic_2/substitution/cpy_nlift.ma b/matita/matita/contribs/lambdadelta/basic_2/substitution/cpy_nlift.ma index 5f1148dbf..b48aca5c1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/substitution/cpy_nlift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/substitution/cpy_nlift.ma @@ -21,10 +21,10 @@ include "basic_2/substitution/cpy.ma". (* Inversion lemmas on negated relocation ***********************************) lemma cpy_fwd_nlift2_ge: ∀G,L,U1,U2,d,e. ⦃G, L⦄ ⊢ U1 ▶[d, e] U2 → - ∀i. d ≤ yinj i → (∀T2. ⇧[i, 1] T2 ≡ U2 → ⊥) → - (∀T1. ⇧[i, 1] T1 ≡ U1 → ⊥) ∨ - ∃∃I,K,W,j. d ≤ yinj j & j < i & ⇩[j]L ≡ K.ⓑ{I}W & - (∀V. ⇧[i-j-1, 1] V ≡ W → ⊥) & (∀T1. ⇧[j, 1] T1 ≡ U1 → ⊥). + ∀i. d ≤ yinj i → (∀T2. ⬆[i, 1] T2 ≡ U2 → ⊥) → + (∀T1. ⬆[i, 1] T1 ≡ U1 → ⊥) ∨ + ∃∃I,K,W,j. d ≤ yinj j & j < i & ⬇[j]L ≡ K.ⓑ{I}W & + (∀V. ⬆[i-j-1, 1] V ≡ W → ⊥) & (∀T1. ⬆[j, 1] T1 ≡ U1 → ⊥). #G #L #U1 #U2 #d #e #H elim H -G -L -U1 -U2 -d -e [ /3 width=2 by or_introl/ | #I #G #L #K #V #W #j #d #e #Hdj #Hjde #HLK #HVW #i #Hdi #HnW diff --git a/matita/matita/contribs/lambdadelta/basic_2/substitution/drop.ma b/matita/matita/contribs/lambdadelta/basic_2/substitution/drop.ma index c60891d61..475110434 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/substitution/drop.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/substitution/drop.ma @@ -28,7 +28,7 @@ inductive drop (s:bool): relation4 nat nat lenv lenv ≝ | drop_pair: ∀I,L,V. drop s 0 0 (L.ⓑ{I}V) (L.ⓑ{I}V) | drop_drop: ∀I,L1,L2,V,e. drop s 0 e L1 L2 → drop s 0 (e+1) (L1.ⓑ{I}V) L2 | drop_skip: ∀I,L1,L2,V1,V2,d,e. - drop s d e L1 L2 → ⇧[d, e] V2 ≡ V1 → + drop s d e L1 L2 → ⬆[d, e] V2 ≡ V1 → drop s (d+1) e (L1.ⓑ{I}V1) (L2.ⓑ{I}V2) . @@ -45,25 +45,25 @@ interpretation 'RDrop e L1 L2 = (drop false O e L1 L2). definition l_liftable: predicate (lenv → relation term) ≝ - λR. ∀K,T1,T2. R K T1 T2 → ∀L,s,d,e. ⇩[s, d, e] L ≡ K → - ∀U1. ⇧[d, e] T1 ≡ U1 → ∀U2. ⇧[d, e] T2 ≡ U2 → R L U1 U2. + λR. ∀K,T1,T2. R K T1 T2 → ∀L,s,d,e. ⬇[s, d, e] L ≡ K → + ∀U1. ⬆[d, e] T1 ≡ U1 → ∀U2. ⬆[d, e] T2 ≡ U2 → R L U1 U2. definition l_deliftable_sn: predicate (lenv → relation term) ≝ - λR. ∀L,U1,U2. R L U1 U2 → ∀K,s,d,e. ⇩[s, d, e] L ≡ K → - ∀T1. ⇧[d, e] T1 ≡ U1 → - ∃∃T2. ⇧[d, e] T2 ≡ U2 & R K T1 T2. + λR. ∀L,U1,U2. R L U1 U2 → ∀K,s,d,e. ⬇[s, d, e] L ≡ K → + ∀T1. ⬆[d, e] T1 ≡ U1 → + ∃∃T2. ⬆[d, e] T2 ≡ U2 & R K T1 T2. definition dropable_sn: predicate (relation lenv) ≝ - λR. ∀L1,K1,s,d,e. ⇩[s, d, e] L1 ≡ K1 → ∀L2. R L1 L2 → - ∃∃K2. R K1 K2 & ⇩[s, d, e] L2 ≡ K2. + λR. ∀L1,K1,s,d,e. ⬇[s, d, e] L1 ≡ K1 → ∀L2. R L1 L2 → + ∃∃K2. R K1 K2 & ⬇[s, d, e] L2 ≡ K2. definition dropable_dx: predicate (relation lenv) ≝ - λR. ∀L1,L2. R L1 L2 → ∀K2,s,e. ⇩[s, 0, e] L2 ≡ K2 → - ∃∃K1. ⇩[s, 0, e] L1 ≡ K1 & R K1 K2. + λR. ∀L1,L2. R L1 L2 → ∀K2,s,e. ⬇[s, 0, e] L2 ≡ K2 → + ∃∃K1. ⬇[s, 0, e] L1 ≡ K1 & R K1 K2. (* Basic inversion lemmas ***************************************************) -fact drop_inv_atom1_aux: ∀L1,L2,s,d,e. ⇩[s, d, e] L1 ≡ L2 → L1 = ⋆ → +fact drop_inv_atom1_aux: ∀L1,L2,s,d,e. ⬇[s, d, e] L1 ≡ L2 → L1 = ⋆ → L2 = ⋆ ∧ (s = Ⓕ → e = 0). #L1 #L2 #s #d #e * -L1 -L2 -d -e [ /3 width=1 by conj/ @@ -74,13 +74,13 @@ fact drop_inv_atom1_aux: ∀L1,L2,s,d,e. ⇩[s, d, e] L1 ≡ L2 → L1 = ⋆ → qed-. (* Basic_1: was: drop_gen_sort *) -lemma drop_inv_atom1: ∀L2,s,d,e. ⇩[s, d, e] ⋆ ≡ L2 → L2 = ⋆ ∧ (s = Ⓕ → e = 0). +lemma drop_inv_atom1: ∀L2,s,d,e. ⬇[s, d, e] ⋆ ≡ L2 → L2 = ⋆ ∧ (s = Ⓕ → e = 0). /2 width=4 by drop_inv_atom1_aux/ qed-. -fact drop_inv_O1_pair1_aux: ∀L1,L2,s,d,e. ⇩[s, d, e] L1 ≡ L2 → d = 0 → +fact drop_inv_O1_pair1_aux: ∀L1,L2,s,d,e. ⬇[s, d, e] L1 ≡ L2 → d = 0 → ∀K,I,V. L1 = K.ⓑ{I}V → (e = 0 ∧ L2 = K.ⓑ{I}V) ∨ - (0 < e ∧ ⇩[s, d, e-1] K ≡ L2). + (0 < e ∧ ⬇[s, d, e-1] K ≡ L2). #L1 #L2 #s #d #e * -L1 -L2 -d -e [ #d #e #_ #_ #K #J #W #H destruct | #I #L #V #_ #K #J #W #HX destruct /3 width=1 by or_introl, conj/ @@ -89,12 +89,12 @@ fact drop_inv_O1_pair1_aux: ∀L1,L2,s,d,e. ⇩[s, d, e] L1 ≡ L2 → d = 0 → ] qed-. -lemma drop_inv_O1_pair1: ∀I,K,L2,V,s,e. ⇩[s, 0, e] K. ⓑ{I} V ≡ L2 → +lemma drop_inv_O1_pair1: ∀I,K,L2,V,s,e. ⬇[s, 0, e] K. ⓑ{I} V ≡ L2 → (e = 0 ∧ L2 = K.ⓑ{I}V) ∨ - (0 < e ∧ ⇩[s, 0, e-1] K ≡ L2). + (0 < e ∧ ⬇[s, 0, e-1] K ≡ L2). /2 width=3 by drop_inv_O1_pair1_aux/ qed-. -lemma drop_inv_pair1: ∀I,K,L2,V,s. ⇩[s, 0, 0] K.ⓑ{I}V ≡ L2 → L2 = K.ⓑ{I}V. +lemma drop_inv_pair1: ∀I,K,L2,V,s. ⬇[s, 0, 0] K.ⓑ{I}V ≡ L2 → L2 = K.ⓑ{I}V. #I #K #L2 #V #s #H elim (drop_inv_O1_pair1 … H) -H * // #H destruct elim (lt_refl_false … H) @@ -102,21 +102,21 @@ qed-. (* Basic_1: was: drop_gen_drop *) lemma drop_inv_drop1_lt: ∀I,K,L2,V,s,e. - ⇩[s, 0, e] K.ⓑ{I}V ≡ L2 → 0 < e → ⇩[s, 0, e-1] K ≡ L2. + ⬇[s, 0, e] K.ⓑ{I}V ≡ L2 → 0 < e → ⬇[s, 0, e-1] K ≡ L2. #I #K #L2 #V #s #e #H #He elim (drop_inv_O1_pair1 … H) -H * // #H destruct elim (lt_refl_false … He) qed-. lemma drop_inv_drop1: ∀I,K,L2,V,s,e. - ⇩[s, 0, e+1] K.ⓑ{I}V ≡ L2 → ⇩[s, 0, e] K ≡ L2. + ⬇[s, 0, e+1] K.ⓑ{I}V ≡ L2 → ⬇[s, 0, e] K ≡ L2. #I #K #L2 #V #s #e #H lapply (drop_inv_drop1_lt … H ?) -H // qed-. -fact drop_inv_skip1_aux: ∀L1,L2,s,d,e. ⇩[s, d, e] L1 ≡ L2 → 0 < d → +fact drop_inv_skip1_aux: ∀L1,L2,s,d,e. ⬇[s, d, e] L1 ≡ L2 → 0 < d → ∀I,K1,V1. L1 = K1.ⓑ{I}V1 → - ∃∃K2,V2. ⇩[s, d-1, e] K1 ≡ K2 & - ⇧[d-1, e] V2 ≡ V1 & + ∃∃K2,V2. ⬇[s, d-1, e] K1 ≡ K2 & + ⬆[d-1, e] V2 ≡ V1 & L2 = K2.ⓑ{I}V2. #L1 #L2 #s #d #e * -L1 -L2 -d -e [ #d #e #_ #_ #J #K1 #W1 #H destruct @@ -127,15 +127,15 @@ fact drop_inv_skip1_aux: ∀L1,L2,s,d,e. ⇩[s, d, e] L1 ≡ L2 → 0 < d → qed-. (* Basic_1: was: drop_gen_skip_l *) -lemma drop_inv_skip1: ∀I,K1,V1,L2,s,d,e. ⇩[s, d, e] K1.ⓑ{I}V1 ≡ L2 → 0 < d → - ∃∃K2,V2. ⇩[s, d-1, e] K1 ≡ K2 & - ⇧[d-1, e] V2 ≡ V1 & +lemma drop_inv_skip1: ∀I,K1,V1,L2,s,d,e. ⬇[s, d, e] K1.ⓑ{I}V1 ≡ L2 → 0 < d → + ∃∃K2,V2. ⬇[s, d-1, e] K1 ≡ K2 & + ⬆[d-1, e] V2 ≡ V1 & L2 = K2.ⓑ{I}V2. /2 width=3 by drop_inv_skip1_aux/ qed-. -lemma drop_inv_O1_pair2: ∀I,K,V,s,e,L1. ⇩[s, 0, e] L1 ≡ K.ⓑ{I}V → +lemma drop_inv_O1_pair2: ∀I,K,V,s,e,L1. ⬇[s, 0, e] L1 ≡ K.ⓑ{I}V → (e = 0 ∧ L1 = K.ⓑ{I}V) ∨ - ∃∃I1,K1,V1. ⇩[s, 0, e-1] K1 ≡ K.ⓑ{I}V & L1 = K1.ⓑ{I1}V1 & 0 < e. + ∃∃I1,K1,V1. ⬇[s, 0, e-1] K1 ≡ K.ⓑ{I}V & L1 = K1.ⓑ{I1}V1 & 0 < e. #I #K #V #s #e * [ #H elim (drop_inv_atom1 … H) -H #H destruct | #L1 #I1 #V1 #H @@ -146,10 +146,10 @@ lemma drop_inv_O1_pair2: ∀I,K,V,s,e,L1. ⇩[s, 0, e] L1 ≡ K.ⓑ{I}V → ] qed-. -fact drop_inv_skip2_aux: ∀L1,L2,s,d,e. ⇩[s, d, e] L1 ≡ L2 → 0 < d → +fact drop_inv_skip2_aux: ∀L1,L2,s,d,e. ⬇[s, d, e] L1 ≡ L2 → 0 < d → ∀I,K2,V2. L2 = K2.ⓑ{I}V2 → - ∃∃K1,V1. ⇩[s, d-1, e] K1 ≡ K2 & - ⇧[d-1, e] V2 ≡ V1 & + ∃∃K1,V1. ⬇[s, d-1, e] K1 ≡ K2 & + ⬆[d-1, e] V2 ≡ V1 & L1 = K1.ⓑ{I}V1. #L1 #L2 #s #d #e * -L1 -L2 -d -e [ #d #e #_ #_ #J #K2 #W2 #H destruct @@ -160,12 +160,12 @@ fact drop_inv_skip2_aux: ∀L1,L2,s,d,e. ⇩[s, d, e] L1 ≡ L2 → 0 < d → qed-. (* Basic_1: was: drop_gen_skip_r *) -lemma drop_inv_skip2: ∀I,L1,K2,V2,s,d,e. ⇩[s, d, e] L1 ≡ K2.ⓑ{I}V2 → 0 < d → - ∃∃K1,V1. ⇩[s, d-1, e] K1 ≡ K2 & ⇧[d-1, e] V2 ≡ V1 & +lemma drop_inv_skip2: ∀I,L1,K2,V2,s,d,e. ⬇[s, d, e] L1 ≡ K2.ⓑ{I}V2 → 0 < d → + ∃∃K1,V1. ⬇[s, d-1, e] K1 ≡ K2 & ⬆[d-1, e] V2 ≡ V1 & L1 = K1.ⓑ{I}V1. /2 width=3 by drop_inv_skip2_aux/ qed-. -lemma drop_inv_O1_gt: ∀L,K,e,s. ⇩[s, 0, e] L ≡ K → |L| < e → +lemma drop_inv_O1_gt: ∀L,K,e,s. ⬇[s, 0, e] L ≡ K → |L| < e → s = Ⓣ ∧ K = ⋆. #L elim L -L [| #L #Z #X #IHL ] #K #e #s #H normalize in ⊢ (?%?→?); #H1e [ elim (drop_inv_atom1 … H) -H elim s -s /2 width=1 by conj/ @@ -179,27 +179,27 @@ qed-. (* Basic properties *********************************************************) -lemma drop_refl_atom_O2: ∀s,d. ⇩[s, d, O] ⋆ ≡ ⋆. +lemma drop_refl_atom_O2: ∀s,d. ⬇[s, d, O] ⋆ ≡ ⋆. /2 width=1 by drop_atom/ qed. (* Basic_1: was by definition: drop_refl *) -lemma drop_refl: ∀L,d,s. ⇩[s, d, 0] L ≡ L. +lemma drop_refl: ∀L,d,s. ⬇[s, d, 0] L ≡ L. #L elim L -L // #L #I #V #IHL #d #s @(nat_ind_plus … d) -d /2 width=1 by drop_pair, drop_skip/ qed. lemma drop_drop_lt: ∀I,L1,L2,V,s,e. - ⇩[s, 0, e-1] L1 ≡ L2 → 0 < e → ⇩[s, 0, e] L1.ⓑ{I}V ≡ L2. + ⬇[s, 0, e-1] L1 ≡ L2 → 0 < e → ⬇[s, 0, e] L1.ⓑ{I}V ≡ L2. #I #L1 #L2 #V #s #e #HL12 #He >(plus_minus_m_m e 1) /2 width=1 by drop_drop/ qed. lemma drop_skip_lt: ∀I,L1,L2,V1,V2,s,d,e. - ⇩[s, d-1, e] L1 ≡ L2 → ⇧[d-1, e] V2 ≡ V1 → 0 < d → - ⇩[s, d, e] L1. ⓑ{I} V1 ≡ L2.ⓑ{I}V2. + ⬇[s, d-1, e] L1 ≡ L2 → ⬆[d-1, e] V2 ≡ V1 → 0 < d → + ⬇[s, d, e] L1. ⓑ{I} V1 ≡ L2.ⓑ{I}V2. #I #L1 #L2 #V1 #V2 #s #d #e #HL12 #HV21 #Hd >(plus_minus_m_m d 1) /2 width=1 by drop_skip/ qed. -lemma drop_O1_le: ∀s,e,L. e ≤ |L| → ∃K. ⇩[s, 0, e] L ≡ K. +lemma drop_O1_le: ∀s,e,L. e ≤ |L| → ∃K. ⬇[s, 0, e] L ≡ K. #s #e @(nat_ind_plus … e) -e /2 width=2 by ex_intro/ #e #IHe * [ #H elim (le_plus_xSy_O_false … H) @@ -207,7 +207,7 @@ lemma drop_O1_le: ∀s,e,L. e ≤ |L| → ∃K. ⇩[s, 0, e] L ≡ K. ] qed-. -lemma drop_O1_lt: ∀s,L,e. e < |L| → ∃∃I,K,V. ⇩[s, 0, e] L ≡ K.ⓑ{I}V. +lemma drop_O1_lt: ∀s,L,e. e < |L| → ∃∃I,K,V. ⬇[s, 0, e] L ≡ K.ⓑ{I}V. #s #L elim L -L [ #e #H elim (lt_zero_false … H) | #L #I #V #IHL #e @(nat_ind_plus … e) -e /2 width=4 by drop_pair, ex1_3_intro/ @@ -215,8 +215,8 @@ lemma drop_O1_lt: ∀s,L,e. e < |L| → ∃∃I,K,V. ⇩[s, 0, e] L ≡ K.ⓑ{I} ] qed-. -lemma drop_O1_pair: ∀L,K,e,s. ⇩[s, 0, e] L ≡ K → e ≤ |L| → ∀I,V. - ∃∃J,W. ⇩[s, 0, e] L.ⓑ{I}V ≡ K.ⓑ{J}W. +lemma drop_O1_pair: ∀L,K,e,s. ⬇[s, 0, e] L ≡ K → e ≤ |L| → ∀I,V. + ∃∃J,W. ⬇[s, 0, e] L.ⓑ{I}V ≡ K.ⓑ{J}W. #L elim L -L [| #L #Z #X #IHL ] #K #e #s #H normalize #He #I #V [ elim (drop_inv_atom1 … H) -H #H <(le_n_O_to_eq … He) -e #Hs destruct /2 width=3 by ex1_2_intro/ @@ -226,18 +226,18 @@ lemma drop_O1_pair: ∀L,K,e,s. ⇩[s, 0, e] L ≡ K → e ≤ |L| → ∀I,V. ] qed-. -lemma drop_O1_ge: ∀L,e. |L| ≤ e → ⇩[Ⓣ, 0, e] L ≡ ⋆. +lemma drop_O1_ge: ∀L,e. |L| ≤ e → ⬇[Ⓣ, 0, e] L ≡ ⋆. #L elim L -L [ #e #_ @drop_atom #H destruct ] #L #I #V #IHL #e @(nat_ind_plus … e) -e [ #H elim (le_plus_xSy_O_false … H) ] normalize /4 width=1 by drop_drop, monotonic_pred/ qed. -lemma drop_O1_eq: ∀L,s. ⇩[s, 0, |L|] L ≡ ⋆. +lemma drop_O1_eq: ∀L,s. ⬇[s, 0, |L|] L ≡ ⋆. #L elim L -L /2 width=1 by drop_drop, drop_atom/ qed. -lemma drop_split: ∀L1,L2,d,e2,s. ⇩[s, d, e2] L1 ≡ L2 → ∀e1. e1 ≤ e2 → - ∃∃L. ⇩[s, d, e2 - e1] L1 ≡ L & ⇩[s, d, e1] L ≡ L2. +lemma drop_split: ∀L1,L2,d,e2,s. ⬇[s, d, e2] L1 ≡ L2 → ∀e1. e1 ≤ e2 → + ∃∃L. ⬇[s, d, e2 - e1] L1 ≡ L & ⬇[s, d, e1] L ≡ L2. #L1 #L2 #d #e2 #s #H elim H -L1 -L2 -d -e2 [ #d #e2 #Hs #e1 #He12 @(ex2_intro … (⋆)) @drop_atom #H lapply (Hs H) -s #H destruct /2 width=1 by le_n_O_to_eq/ @@ -260,16 +260,16 @@ lemma drop_split: ∀L1,L2,d,e2,s. ⇩[s, d, e2] L1 ≡ L2 → ∀e1. e1 ≤ e2 ] qed-. -lemma drop_FT: ∀L1,L2,d,e. ⇩[Ⓕ, d, e] L1 ≡ L2 → ⇩[Ⓣ, d, e] L1 ≡ L2. +lemma drop_FT: ∀L1,L2,d,e. ⬇[Ⓕ, d, e] L1 ≡ L2 → ⬇[Ⓣ, d, e] L1 ≡ L2. #L1 #L2 #d #e #H elim H -L1 -L2 -d -e /3 width=1 by drop_atom, drop_drop, drop_skip/ qed. -lemma drop_gen: ∀L1,L2,s,d,e. ⇩[Ⓕ, d, e] L1 ≡ L2 → ⇩[s, d, e] L1 ≡ L2. +lemma drop_gen: ∀L1,L2,s,d,e. ⬇[Ⓕ, d, e] L1 ≡ L2 → ⬇[s, d, e] L1 ≡ L2. #L1 #L2 * /2 width=1 by drop_FT/ qed-. -lemma drop_T: ∀L1,L2,s,d,e. ⇩[s, d, e] L1 ≡ L2 → ⇩[Ⓣ, d, e] L1 ≡ L2. +lemma drop_T: ∀L1,L2,s,d,e. ⬇[s, d, e] L1 ≡ L2 → ⬇[Ⓣ, d, e] L1 ≡ L2. #L1 #L2 * /2 width=1 by drop_FT/ qed-. @@ -323,8 +323,8 @@ qed-. (* Basic forward lemmas *****************************************************) (* Basic_1: was: drop_S *) -lemma drop_fwd_drop2: ∀L1,I2,K2,V2,s,e. ⇩[s, O, e] L1 ≡ K2. ⓑ{I2} V2 → - ⇩[s, O, e + 1] L1 ≡ K2. +lemma drop_fwd_drop2: ∀L1,I2,K2,V2,s,e. ⬇[s, O, e] L1 ≡ K2. ⓑ{I2} V2 → + ⬇[s, O, e + 1] L1 ≡ K2. #L1 elim L1 -L1 [ #I2 #K2 #V2 #s #e #H lapply (drop_inv_atom1 … H) -H * #H destruct | #K1 #I1 #V1 #IHL1 #I2 #K2 #V2 #s #e #H @@ -335,14 +335,14 @@ lemma drop_fwd_drop2: ∀L1,I2,K2,V2,s,e. ⇩[s, O, e] L1 ≡ K2. ⓑ{I2} V2 → ] qed-. -lemma drop_fwd_length_ge: ∀L1,L2,d,e,s. ⇩[s, d, e] L1 ≡ L2 → |L1| ≤ d → |L2| = |L1|. +lemma drop_fwd_length_ge: ∀L1,L2,d,e,s. ⬇[s, d, e] L1 ≡ L2 → |L1| ≤ d → |L2| = |L1|. #L1 #L2 #d #e #s #H elim H -L1 -L2 -d -e // normalize [ #I #L1 #L2 #V #e #_ #_ #H elim (le_plus_xSy_O_false … H) | /4 width=2 by le_plus_to_le_r, eq_f/ ] qed-. -lemma drop_fwd_length_le_le: ∀L1,L2,d,e,s. ⇩[s, d, e] L1 ≡ L2 → d ≤ |L1| → e ≤ |L1| - d → |L2| = |L1| - e. +lemma drop_fwd_length_le_le: ∀L1,L2,d,e,s. ⬇[s, d, e] L1 ≡ L2 → d ≤ |L1| → e ≤ |L1| - d → |L2| = |L1| - e. #L1 #L2 #d #e #s #H elim H -L1 -L2 -d -e // normalize [ /3 width=2 by le_plus_to_le_r/ | #I #L1 #L2 #V1 #V2 #d #e #_ #_ #IHL12 >minus_plus_plus_l @@ -351,7 +351,7 @@ lemma drop_fwd_length_le_le: ∀L1,L2,d,e,s. ⇩[s, d, e] L1 ≡ L2 → d ≤ |L ] qed-. -lemma drop_fwd_length_le_ge: ∀L1,L2,d,e,s. ⇩[s, d, e] L1 ≡ L2 → d ≤ |L1| → |L1| - d ≤ e → |L2| = d. +lemma drop_fwd_length_le_ge: ∀L1,L2,d,e,s. ⬇[s, d, e] L1 ≡ L2 → d ≤ |L1| → |L1| - d ≤ e → |L2| = d. #L1 #L2 #d #e #s #H elim H -L1 -L2 -d -e normalize [ /2 width=1 by le_n_O_to_eq/ | #I #L #V #_ H -H // | #I #L #V #H elim (lt_refl_false … H) @@ -425,14 +425,14 @@ lemma drop_fwd_lw_lt: ∀L1,L2,d,e. ⇩[Ⓕ, d, e] L1 ≡ L2 → 0 < e → ♯{L ] qed-. -lemma drop_fwd_rfw: ∀I,L,K,V,i. ⇩[i] L ≡ K.ⓑ{I}V → ∀T. ♯{K, V} < ♯{L, T}. +lemma drop_fwd_rfw: ∀I,L,K,V,i. ⬇[i] L ≡ K.ⓑ{I}V → ∀T. ♯{K, V} < ♯{L, T}. #I #L #K #V #i #HLK lapply (drop_fwd_lw … HLK) -HLK normalize in ⊢ (%→?→?%%); /3 width=3 by le_to_lt_to_lt/ qed-. (* Advanced inversion lemmas ************************************************) -fact drop_inv_O2_aux: ∀L1,L2,s,d,e. ⇩[s, d, e] L1 ≡ L2 → e = 0 → L1 = L2. +fact drop_inv_O2_aux: ∀L1,L2,s,d,e. ⬇[s, d, e] L1 ≡ L2 → e = 0 → L1 = L2. #L1 #L2 #s #d #e #H elim H -L1 -L2 -d -e [ // | // @@ -443,19 +443,19 @@ fact drop_inv_O2_aux: ∀L1,L2,s,d,e. ⇩[s, d, e] L1 ≡ L2 → e = 0 → L1 = qed-. (* Basic_1: was: drop_gen_refl *) -lemma drop_inv_O2: ∀L1,L2,s,d. ⇩[s, d, 0] L1 ≡ L2 → L1 = L2. +lemma drop_inv_O2: ∀L1,L2,s,d. ⬇[s, d, 0] L1 ≡ L2 → L1 = L2. /2 width=5 by drop_inv_O2_aux/ qed-. -lemma drop_inv_length_eq: ∀L1,L2,d,e. ⇩[Ⓕ, d, e] L1 ≡ L2 → |L1| = |L2| → e = 0. +lemma drop_inv_length_eq: ∀L1,L2,d,e. ⬇[Ⓕ, d, e] L1 ≡ L2 → |L1| = |L2| → e = 0. #L1 #L2 #d #e #H #HL12 lapply (drop_fwd_length_minus4 … H) // qed-. -lemma drop_inv_refl: ∀L,d,e. ⇩[Ⓕ, d, e] L ≡ L → e = 0. +lemma drop_inv_refl: ∀L,d,e. ⬇[Ⓕ, d, e] L ≡ L → e = 0. /2 width=5 by drop_inv_length_eq/ qed-. -fact drop_inv_FT_aux: ∀L1,L2,s,d,e. ⇩[s, d, e] L1 ≡ L2 → +fact drop_inv_FT_aux: ∀L1,L2,s,d,e. ⬇[s, d, e] L1 ≡ L2 → ∀I,K,V. L2 = K.ⓑ{I}V → s = Ⓣ → d = 0 → - ⇩[Ⓕ, d, e] L1 ≡ K.ⓑ{I}V. + ⬇[Ⓕ, d, e] L1 ≡ K.ⓑ{I}V. #L1 #L2 #s #d #e #H elim H -L1 -L2 -d -e [ #d #e #_ #J #K #W #H destruct | #I #L #V #J #K #W #H destruct // @@ -466,14 +466,14 @@ fact drop_inv_FT_aux: ∀L1,L2,s,d,e. ⇩[s, d, e] L1 ≡ L2 → ] qed-. -lemma drop_inv_FT: ∀I,L,K,V,e. ⇩[Ⓣ, 0, e] L ≡ K.ⓑ{I}V → ⇩[e] L ≡ K.ⓑ{I}V. +lemma drop_inv_FT: ∀I,L,K,V,e. ⬇[Ⓣ, 0, e] L ≡ K.ⓑ{I}V → ⬇[e] L ≡ K.ⓑ{I}V. /2 width=5 by drop_inv_FT_aux/ qed. -lemma drop_inv_gen: ∀I,L,K,V,s,e. ⇩[s, 0, e] L ≡ K.ⓑ{I}V → ⇩[e] L ≡ K.ⓑ{I}V. +lemma drop_inv_gen: ∀I,L,K,V,s,e. ⬇[s, 0, e] L ≡ K.ⓑ{I}V → ⬇[e] L ≡ K.ⓑ{I}V. #I #L #K #V * /2 width=1 by drop_inv_FT/ qed-. -lemma drop_inv_T: ∀I,L,K,V,s,e. ⇩[Ⓣ, 0, e] L ≡ K.ⓑ{I}V → ⇩[s, 0, e] L ≡ K.ⓑ{I}V. +lemma drop_inv_T: ∀I,L,K,V,s,e. ⬇[Ⓣ, 0, e] L ≡ K.ⓑ{I}V → ⬇[s, 0, e] L ≡ K.ⓑ{I}V. #I #L #K #V * /2 width=1 by drop_inv_FT/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/substitution/drop_append.ma b/matita/matita/contribs/lambdadelta/basic_2/substitution/drop_append.ma index 46d9c3021..2cb36a8c7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/substitution/drop_append.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/substitution/drop_append.ma @@ -19,22 +19,22 @@ include "basic_2/substitution/drop.ma". (* Properties on append for local environments ******************************) -fact drop_O1_append_sn_le_aux: ∀L1,L2,s,d,e. ⇩[s, d, e] L1 ≡ L2 → +fact drop_O1_append_sn_le_aux: ∀L1,L2,s,d,e. ⬇[s, d, e] L1 ≡ L2 → d = 0 → e ≤ |L1| → - ∀L. ⇩[s, 0, e] L @@ L1 ≡ L @@ L2. + ∀L. ⬇[s, 0, e] L @@ L1 ≡ L @@ L2. #L1 #L2 #s #d #e #H elim H -L1 -L2 -d -e normalize [2,3,4: /4 width=1 by drop_skip_lt, drop_drop, arith_b1, lt_minus_to_plus_r, monotonic_pred/ ] #d #e #_ #_ #H <(le_n_O_to_eq … H) -H // qed-. -lemma drop_O1_append_sn_le: ∀L1,L2,s,e. ⇩[s, 0, e] L1 ≡ L2 → e ≤ |L1| → - ∀L. ⇩[s, 0, e] L @@ L1 ≡ L @@ L2. +lemma drop_O1_append_sn_le: ∀L1,L2,s,e. ⬇[s, 0, e] L1 ≡ L2 → e ≤ |L1| → + ∀L. ⬇[s, 0, e] L @@ L1 ≡ L @@ L2. /2 width=3 by drop_O1_append_sn_le_aux/ qed. (* Inversion lemmas on append for local environments ************************) -lemma drop_O1_inv_append1_ge: ∀K,L1,L2,s,e. ⇩[s, 0, e] L1 @@ L2 ≡ K → - |L2| ≤ e → ⇩[s, 0, e - |L2|] L1 ≡ K. +lemma drop_O1_inv_append1_ge: ∀K,L1,L2,s,e. ⬇[s, 0, e] L1 @@ L2 ≡ K → + |L2| ≤ e → ⬇[s, 0, e - |L2|] L1 ≡ K. #K #L1 #L2 elim L2 -L2 normalize // #L2 #I #V #IHL2 #s #e #H #H1e elim (drop_inv_O1_pair1 … H) -H * #H2e #HL12 destruct @@ -44,8 +44,8 @@ elim (drop_inv_O1_pair1 … H) -H * #H2e #HL12 destruct ] qed-. -lemma drop_O1_inv_append1_le: ∀K,L1,L2,s,e. ⇩[s, 0, e] L1 @@ L2 ≡ K → e ≤ |L2| → - ∀K2. ⇩[s, 0, e] L2 ≡ K2 → K = L1 @@ K2. +lemma drop_O1_inv_append1_le: ∀K,L1,L2,s,e. ⬇[s, 0, e] L1 @@ L2 ≡ K → e ≤ |L2| → + ∀K2. ⬇[s, 0, e] L2 ≡ K2 → K = L1 @@ K2. #K #L1 #L2 elim L2 -L2 normalize [ #s #e #H1 #H2 #K2 #H3 lapply (le_n_O_to_eq … H2) -H2 #H2 elim (drop_inv_atom1 … H3) -H3 #H3 #_ destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/substitution/drop_drop.ma b/matita/matita/contribs/lambdadelta/basic_2/substitution/drop_drop.ma index bfc54b072..a2c8b19ef 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/substitution/drop_drop.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/substitution/drop_drop.ma @@ -20,8 +20,8 @@ include "basic_2/substitution/drop.ma". (* Main properties **********************************************************) (* Basic_1: was: drop_mono *) -theorem drop_mono: ∀L,L1,s1,d,e. ⇩[s1, d, e] L ≡ L1 → - ∀L2,s2. ⇩[s2, d, e] L ≡ L2 → L1 = L2. +theorem drop_mono: ∀L,L1,s1,d,e. ⬇[s1, d, e] L ≡ L1 → + ∀L2,s2. ⬇[s2, d, e] L ≡ L2 → L1 = L2. #L #L1 #s1 #d #e #H elim H -L -L1 -d -e [ #d #e #He #L2 #s2 #H elim (drop_inv_atom1 … H) -H // | #I #K #V #L2 #s2 #HL12 <(drop_inv_O2 … HL12) -L2 // @@ -35,9 +35,9 @@ theorem drop_mono: ∀L,L1,s1,d,e. ⇩[s1, d, e] L ≡ L1 → qed-. (* Basic_1: was: drop_conf_ge *) -theorem drop_conf_ge: ∀L,L1,s1,d1,e1. ⇩[s1, d1, e1] L ≡ L1 → - ∀L2,s2,e2. ⇩[s2, 0, e2] L ≡ L2 → d1 + e1 ≤ e2 → - ⇩[s2, 0, e2 - e1] L1 ≡ L2. +theorem drop_conf_ge: ∀L,L1,s1,d1,e1. ⬇[s1, d1, e1] L ≡ L1 → + ∀L2,s2,e2. ⬇[s2, 0, e2] L ≡ L2 → d1 + e1 ≤ e2 → + ⬇[s2, 0, e2 - e1] L1 ≡ L2. #L #L1 #s1 #d1 #e1 #H elim H -L -L1 -d1 -e1 // [ #d #e #_ #L2 #s2 #e2 #H #_ elim (drop_inv_atom1 … H) -H #H #He destruct @@ -54,9 +54,9 @@ theorem drop_conf_ge: ∀L,L1,s1,d1,e1. ⇩[s1, d1, e1] L ≡ L1 → qed. (* Note: apparently this was missing in basic_1 *) -theorem drop_conf_be: ∀L0,L1,s1,d1,e1. ⇩[s1, d1, e1] L0 ≡ L1 → - ∀L2,e2. ⇩[e2] L0 ≡ L2 → d1 ≤ e2 → e2 ≤ d1 + e1 → - ∃∃L. ⇩[s1, 0, d1 + e1 - e2] L2 ≡ L & ⇩[d1] L1 ≡ L. +theorem drop_conf_be: ∀L0,L1,s1,d1,e1. ⬇[s1, d1, e1] L0 ≡ L1 → + ∀L2,e2. ⬇[e2] L0 ≡ L2 → d1 ≤ e2 → e2 ≤ d1 + e1 → + ∃∃L. ⬇[s1, 0, d1 + e1 - e2] L2 ≡ L & ⬇[d1] L1 ≡ L. #L0 #L1 #s1 #d1 #e1 #H elim H -L0 -L1 -d1 -e1 [ #d1 #e1 #He1 #L2 #e2 #H #Hd1 #_ elim (drop_inv_atom1 … H) -H #H #He2 destruct >(He2 ?) in Hd1; // -He2 #Hd1 <(le_n_O_to_eq … Hd1) -d1 @@ -79,9 +79,9 @@ theorem drop_conf_be: ∀L0,L1,s1,d1,e1. ⇩[s1, d1, e1] L0 ≡ L1 → qed-. (* Note: apparently this was missing in basic_1 *) -theorem drop_conf_le: ∀L0,L1,s1,d1,e1. ⇩[s1, d1, e1] L0 ≡ L1 → - ∀L2,s2,e2. ⇩[s2, 0, e2] L0 ≡ L2 → e2 ≤ d1 → - ∃∃L. ⇩[s2, 0, e2] L1 ≡ L & ⇩[s1, d1 - e2, e1] L2 ≡ L. +theorem drop_conf_le: ∀L0,L1,s1,d1,e1. ⬇[s1, d1, e1] L0 ≡ L1 → + ∀L2,s2,e2. ⬇[s2, 0, e2] L0 ≡ L2 → e2 ≤ d1 → + ∃∃L. ⬇[s2, 0, e2] L1 ≡ L & ⬇[s1, d1 - e2, e1] L2 ≡ L. #L0 #L1 #s1 #d1 #e1 #H elim H -L0 -L1 -d1 -e1 [ #d1 #e1 #He1 #L2 #s2 #e2 #H elim (drop_inv_atom1 … H) -H #H #He2 #_ destruct /4 width=3 by drop_atom, ex2_intro/ @@ -103,8 +103,8 @@ qed-. (* Note: with "s2", the conclusion parameter is "s1 ∨ s2" *) (* Basic_1: was: drop_trans_ge *) -theorem drop_trans_ge: ∀L1,L,s1,d1,e1. ⇩[s1, d1, e1] L1 ≡ L → - ∀L2,e2. ⇩[e2] L ≡ L2 → d1 ≤ e2 → ⇩[s1, 0, e1 + e2] L1 ≡ L2. +theorem drop_trans_ge: ∀L1,L,s1,d1,e1. ⬇[s1, d1, e1] L1 ≡ L → + ∀L2,e2. ⬇[e2] L ≡ L2 → d1 ≤ e2 → ⬇[s1, 0, e1 + e2] L1 ≡ L2. #L1 #L #s1 #d1 #e1 #H elim H -L1 -L -d1 -e1 [ #d1 #e1 #He1 #L2 #e2 #H #_ elim (drop_inv_atom1 … H) -H #H #He2 destruct /4 width=1 by drop_atom, eq_f2/ @@ -119,9 +119,9 @@ theorem drop_trans_ge: ∀L1,L,s1,d1,e1. ⇩[s1, d1, e1] L1 ≡ L → qed. (* Basic_1: was: drop_trans_le *) -theorem drop_trans_le: ∀L1,L,s1,d1,e1. ⇩[s1, d1, e1] L1 ≡ L → - ∀L2,s2,e2. ⇩[s2, 0, e2] L ≡ L2 → e2 ≤ d1 → - ∃∃L0. ⇩[s2, 0, e2] L1 ≡ L0 & ⇩[s1, d1 - e2, e1] L0 ≡ L2. +theorem drop_trans_le: ∀L1,L,s1,d1,e1. ⬇[s1, d1, e1] L1 ≡ L → + ∀L2,s2,e2. ⬇[s2, 0, e2] L ≡ L2 → e2 ≤ d1 → + ∃∃L0. ⬇[s2, 0, e2] L1 ≡ L0 & ⬇[s1, d1 - e2, e1] L0 ≡ L2. #L1 #L #s1 #d1 #e1 #H elim H -L1 -L -d1 -e1 [ #d1 #e1 #He1 #L2 #s2 #e2 #H #_ elim (drop_inv_atom1 … H) -H #H #He2 destruct /4 width=3 by drop_atom, ex2_intro/ @@ -152,11 +152,11 @@ lemma l_liftable_llstar: ∀R. l_liftable R → ∀l. l_liftable (llstar … R l qed-. (* Basic_1: was: drop_conf_lt *) -lemma drop_conf_lt: ∀L,L1,s1,d1,e1. ⇩[s1, d1, e1] L ≡ L1 → - ∀I,K2,V2,s2,e2. ⇩[s2, 0, e2] L ≡ K2.ⓑ{I}V2 → +lemma drop_conf_lt: ∀L,L1,s1,d1,e1. ⬇[s1, d1, e1] L ≡ L1 → + ∀I,K2,V2,s2,e2. ⬇[s2, 0, e2] L ≡ K2.ⓑ{I}V2 → e2 < d1 → let d ≝ d1 - e2 - 1 in - ∃∃K1,V1. ⇩[s2, 0, e2] L1 ≡ K1.ⓑ{I}V1 & - ⇩[s1, d, e1] K2 ≡ K1 & ⇧[d, e1] V1 ≡ V2. + ∃∃K1,V1. ⬇[s2, 0, e2] L1 ≡ K1.ⓑ{I}V1 & + ⬇[s1, d, e1] K2 ≡ K1 & ⬆[d, e1] V1 ≡ V2. #L #L1 #s1 #d1 #e1 #H1 #I #K2 #V2 #s2 #e2 #H2 #He2d1 elim (drop_conf_le … H1 … H2) -L /2 width=2 by lt_to_le/ #K #HL1K #HK2 elim (drop_inv_skip1 … HK2) -HK2 /2 width=1 by lt_plus_to_minus_r/ @@ -164,25 +164,25 @@ elim (drop_inv_skip1 … HK2) -HK2 /2 width=1 by lt_plus_to_minus_r/ qed-. (* Note: apparently this was missing in basic_1 *) -lemma drop_trans_lt: ∀L1,L,s1,d1,e1. ⇩[s1, d1, e1] L1 ≡ L → - ∀I,L2,V2,s2,e2. ⇩[s2, 0, e2] L ≡ L2.ⓑ{I}V2 → +lemma drop_trans_lt: ∀L1,L,s1,d1,e1. ⬇[s1, d1, e1] L1 ≡ L → + ∀I,L2,V2,s2,e2. ⬇[s2, 0, e2] L ≡ L2.ⓑ{I}V2 → e2 < d1 → let d ≝ d1 - e2 - 1 in - ∃∃L0,V0. ⇩[s2, 0, e2] L1 ≡ L0.ⓑ{I}V0 & - ⇩[s1, d, e1] L0 ≡ L2 & ⇧[d, e1] V2 ≡ V0. + ∃∃L0,V0. ⬇[s2, 0, e2] L1 ≡ L0.ⓑ{I}V0 & + ⬇[s1, d, e1] L0 ≡ L2 & ⬆[d, e1] V2 ≡ V0. #L1 #L #s1 #d1 #e1 #HL1 #I #L2 #V2 #s2 #e2 #HL2 #Hd21 elim (drop_trans_le … HL1 … HL2) -L /2 width=1 by lt_to_le/ #L0 #HL10 #HL02 elim (drop_inv_skip2 … HL02) -HL02 /2 width=1 by lt_plus_to_minus_r/ #L #V1 #HL2 #HV21 #H destruct /2 width=5 by ex3_2_intro/ qed-. lemma drop_trans_ge_comm: ∀L1,L,L2,s1,d1,e1,e2. - ⇩[s1, d1, e1] L1 ≡ L → ⇩[e2] L ≡ L2 → d1 ≤ e2 → - ⇩[s1, 0, e2 + e1] L1 ≡ L2. + ⬇[s1, d1, e1] L1 ≡ L → ⬇[e2] L ≡ L2 → d1 ≤ e2 → + ⬇[s1, 0, e2 + e1] L1 ≡ L2. #L1 #L #L2 #s1 #d1 #e1 #e2 >commutative_plus /2 width=5 by drop_trans_ge/ qed. -lemma drop_conf_div: ∀I1,L,K,V1,e1. ⇩[e1] L ≡ K.ⓑ{I1}V1 → - ∀I2,V2,e2. ⇩[e2] L ≡ K.ⓑ{I2}V2 → +lemma drop_conf_div: ∀I1,L,K,V1,e1. ⬇[e1] L ≡ K.ⓑ{I1}V1 → + ∀I2,V2,e2. ⬇[e2] L ≡ K.ⓑ{I2}V2 → ∧∧ e1 = e2 & I1 = I2 & V1 = V2. #I1 #L #K #V1 #e1 #HLK1 #I2 #V2 #e2 #HLK2 elim (le_or_ge e1 e2) #He @@ -199,7 +199,7 @@ qed-. (* Advanced forward lemmas **************************************************) -lemma drop_fwd_be: ∀L,K,s,d,e,i. ⇩[s, d, e] L ≡ K → |K| ≤ i → i < d → |L| ≤ i. +lemma drop_fwd_be: ∀L,K,s,d,e,i. ⬇[s, d, e] L ≡ K → |K| ≤ i → i < d → |L| ≤ i. #L #K #s #d #e #i #HLK #HK #Hd elim (lt_or_ge i (|L|)) // #HL elim (drop_O1_lt (Ⓕ) … HL) #I #K0 #V #HLK0 -HL elim (drop_conf_lt … HLK … HLK0) // -HLK -HLK0 -Hd diff --git a/matita/matita/contribs/lambdadelta/basic_2/substitution/drop_leq.ma b/matita/matita/contribs/lambdadelta/basic_2/substitution/drop_leq.ma index 98c5f48fd..d04c13b55 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/substitution/drop_leq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/substitution/drop_leq.ma @@ -18,15 +18,15 @@ include "basic_2/substitution/drop.ma". (* BASIC SLICING FOR LOCAL ENVIRONMENTS *************************************) definition dedropable_sn: predicate (relation lenv) ≝ - λR. ∀L1,K1,s,d,e. ⇩[s, d, e] L1 ≡ K1 → ∀K2. R K1 K2 → - ∃∃L2. R L1 L2 & ⇩[s, d, e] L2 ≡ K2 & L1 ⩬[d, e] L2. + λR. ∀L1,K1,s,d,e. ⬇[s, d, e] L1 ≡ K1 → ∀K2. R K1 K2 → + ∃∃L2. R L1 L2 & ⬇[s, d, e] L2 ≡ K2 & L1 ⩬[d, e] L2. (* Properties on equivalence ************************************************) lemma leq_drop_trans_be: ∀L1,L2,d,e. L1 ⩬[d, e] L2 → - ∀I,K2,W,s,i. ⇩[s, 0, i] L2 ≡ K2.ⓑ{I}W → + ∀I,K2,W,s,i. ⬇[s, 0, i] L2 ≡ K2.ⓑ{I}W → d ≤ i → i < d + e → - ∃∃K1. K1 ⩬[0, ⫰(d+e-i)] K2 & ⇩[s, 0, i] L1 ≡ K1.ⓑ{I}W. + ∃∃K1. K1 ⩬[0, ⫰(d+e-i)] K2 & ⬇[s, 0, i] L1 ≡ K1.ⓑ{I}W. #L1 #L2 #d #e #H elim H -L1 -L2 -d -e [ #d #e #J #K2 #W #s #i #H elim (drop_inv_atom1 … H) -H #H destruct @@ -51,16 +51,16 @@ lemma leq_drop_trans_be: ∀L1,L2,d,e. L1 ⩬[d, e] L2 → qed-. lemma leq_drop_conf_be: ∀L1,L2,d,e. L1 ⩬[d, e] L2 → - ∀I,K1,W,s,i. ⇩[s, 0, i] L1 ≡ K1.ⓑ{I}W → + ∀I,K1,W,s,i. ⬇[s, 0, i] L1 ≡ K1.ⓑ{I}W → d ≤ i → i < d + e → - ∃∃K2. K1 ⩬[0, ⫰(d+e-i)] K2 & ⇩[s, 0, i] L2 ≡ K2.ⓑ{I}W. + ∃∃K2. K1 ⩬[0, ⫰(d+e-i)] K2 & ⬇[s, 0, i] L2 ≡ K2.ⓑ{I}W. #L1 #L2 #d #e #HL12 #I #K1 #W #s #i #HLK1 #Hdi #Hide elim (leq_drop_trans_be … (leq_sym … HL12) … HLK1) // -L1 -Hdi -Hide /3 width=3 by leq_sym, ex2_intro/ qed-. lemma drop_O1_ex: ∀K2,i,L1. |L1| = |K2| + i → - ∃∃L2. L1 ⩬[0, i] L2 & ⇩[i] L2 ≡ K2. + ∃∃L2. L1 ⩬[0, i] L2 & ⬇[i] L2 ≡ K2. #K2 #i @(nat_ind_plus … i) -i [ /3 width=3 by leq_O2, ex2_intro/ | #i #IHi #Y #Hi elim (drop_O1_lt (Ⓕ) Y 0) // @@ -81,7 +81,7 @@ qed-. (* Inversion lemmas on equivalence ******************************************) -lemma drop_O1_inj: ∀i,L1,L2,K. ⇩[i] L1 ≡ K → ⇩[i] L2 ≡ K → L1 ⩬[i, ∞] L2. +lemma drop_O1_inj: ∀i,L1,L2,K. ⬇[i] L1 ≡ K → ⬇[i] L2 ≡ K → L1 ⩬[i, ∞] L2. #i @(nat_ind_plus … i) -i [ #L1 #L2 #K #H <(drop_inv_O2 … H) -K #H <(drop_inv_O2 … H) -L1 // | #i #IHi * [2: #L1 #I1 #V1 ] * [2,4: #L2 #I2 #V2 ] #K #HLK1 #HLK2 // diff --git a/matita/matita/contribs/lambdadelta/basic_2/substitution/fqu.ma b/matita/matita/contribs/lambdadelta/basic_2/substitution/fqu.ma index 48e230f00..21697819c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/substitution/fqu.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/substitution/fqu.ma @@ -25,7 +25,7 @@ inductive fqu: tri_relation genv lenv term ≝ | fqu_bind_dx: ∀a,I,G,L,V,T. fqu G L (ⓑ{a,I}V.T) G (L.ⓑ{I}V) T | fqu_flat_dx: ∀I,G,L,V,T. fqu G L (ⓕ{I}V.T) G L T | fqu_drop : ∀G,L,K,T,U,e. - ⇩[e+1] L ≡ K → ⇧[0, e+1] T ≡ U → fqu G L U G K T + ⬇[e+1] L ≡ K → ⬆[0, e+1] T ≡ U → fqu G L U G K T . interpretation @@ -35,7 +35,7 @@ interpretation (* Basic properties *********************************************************) lemma fqu_drop_lt: ∀G,L,K,T,U,e. 0 < e → - ⇩[e] L ≡ K → ⇧[0, e] T ≡ U → ⦃G, L, U⦄ ⊐ ⦃G, K, T⦄. + ⬇[e] L ≡ K → ⬆[0, e] T ≡ U → ⦃G, L, U⦄ ⊐ ⦃G, K, T⦄. #G #L #K #T #U #e #He >(plus_minus_m_m e 1) /2 width=3 by fqu_drop/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/substitution/fquq.ma b/matita/matita/contribs/lambdadelta/basic_2/substitution/fquq.ma index 0e85a6d23..48503a312 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/substitution/fquq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/substitution/fquq.ma @@ -24,7 +24,7 @@ inductive fquq: tri_relation genv lenv term ≝ | fquq_bind_dx: ∀a,I,G,L,V,T. fquq G L (ⓑ{a,I}V.T) G (L.ⓑ{I}V) T | fquq_flat_dx: ∀I,G, L,V,T. fquq G L (ⓕ{I}V.T) G L T | fquq_drop : ∀G,L,K,T,U,e. - ⇩[e] L ≡ K → ⇧[0, e] T ≡ U → fquq G L U G K T + ⬇[e] L ≡ K → ⬆[0, e] T ≡ U → fquq G L U G K T . interpretation diff --git a/matita/matita/contribs/lambdadelta/basic_2/substitution/fquq_alt.ma b/matita/matita/contribs/lambdadelta/basic_2/substitution/fquq_alt.ma index 8e5fb500f..619bb0b4a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/substitution/fquq_alt.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/substitution/fquq_alt.ma @@ -30,7 +30,7 @@ lemma fquqa_refl: tri_reflexive … fquqa. // qed. lemma fquqa_drop: ∀G,L,K,T,U,e. - ⇩[e] L ≡ K → ⇧[0, e] T ≡ U → ⦃G, L, U⦄ ⊐⊐⸮ ⦃G, K, T⦄. + ⬇[e] L ≡ K → ⬆[0, e] T ≡ U → ⦃G, L, U⦄ ⊐⊐⸮ ⦃G, K, T⦄. #G #L #K #T #U #e #HLK #HTU elim (eq_or_gt e) /3 width=5 by fqu_drop_lt, or_introl/ #H destruct >(drop_inv_O2 … HLK) -L >(lift_inv_O2 … HTU) -T // diff --git a/matita/matita/contribs/lambdadelta/basic_2/substitution/gget.ma b/matita/matita/contribs/lambdadelta/basic_2/substitution/gget.ma index f299c9bea..acf9602be 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/substitution/gget.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/substitution/gget.ma @@ -28,7 +28,7 @@ interpretation "global reading" (* basic inversion lemmas ***************************************************) -lemma gget_inv_gt: ∀G1,G2,e. ⇩[e] G1 ≡ G2 → |G1| ≤ e → G2 = ⋆. +lemma gget_inv_gt: ∀G1,G2,e. ⬇[e] G1 ≡ G2 → |G1| ≤ e → G2 = ⋆. #G1 #G2 #e * -G1 -G2 // [ #G #H >H -H >commutative_plus #H (**) (* lemma needed here *) lapply (le_plus_to_le_r … 0 H) -H #H @@ -40,7 +40,7 @@ lemma gget_inv_gt: ∀G1,G2,e. ⇩[e] G1 ≡ G2 → |G1| ≤ e → G2 = ⋆. ] qed-. -lemma gget_inv_eq: ∀G1,G2,e. ⇩[e] G1 ≡ G2 → |G1| = e + 1 → G1 = G2. +lemma gget_inv_eq: ∀G1,G2,e. ⬇[e] G1 ≡ G2 → |G1| = e + 1 → G1 = G2. #G1 #G2 #e * -G1 -G2 // [ #G #H1 #H2 >H2 in H1; -H2 >commutative_plus #H (**) (* lemma needed here *) lapply (le_plus_to_le_r … 0 H) -H #H @@ -51,8 +51,8 @@ lemma gget_inv_eq: ∀G1,G2,e. ⇩[e] G1 ≡ G2 → |G1| = e + 1 → G1 = G2. ] qed-. -fact gget_inv_lt_aux: ∀I,G,G1,G2,V,e. ⇩[e] G ≡ G2 → G = G1. ⓑ{I} V → - e < |G1| → ⇩[e] G1 ≡ G2. +fact gget_inv_lt_aux: ∀I,G,G1,G2,V,e. ⬇[e] G ≡ G2 → G = G1. ⓑ{I} V → + e < |G1| → ⬇[e] G1 ≡ G2. #I #G #G1 #G2 #V #e * -G -G2 [ #G #H1 #H destruct #H2 lapply (le_to_lt_to_lt … H1 H2) -H1 -H2 normalize in ⊢ (? % ? → ?); >commutative_plus #H @@ -65,12 +65,12 @@ fact gget_inv_lt_aux: ∀I,G,G1,G2,V,e. ⇩[e] G ≡ G2 → G = G1. ⓑ{I} V → qed-. lemma gget_inv_lt: ∀I,G1,G2,V,e. - ⇩[e] G1. ⓑ{I} V ≡ G2 → e < |G1| → ⇩[e] G1 ≡ G2. + ⬇[e] G1. ⓑ{I} V ≡ G2 → e < |G1| → ⬇[e] G1 ≡ G2. /2 width=5 by gget_inv_lt_aux/ qed-. (* Basic properties *********************************************************) -lemma gget_total: ∀e,G1. ∃G2. ⇩[e] G1 ≡ G2. +lemma gget_total: ∀e,G1. ∃G2. ⬇[e] G1 ≡ G2. #e #G1 elim G1 -G1 /3 width=2/ #I #V #G1 * #G2 #HG12 elim (lt_or_eq_or_gt e (|G1|)) #He diff --git a/matita/matita/contribs/lambdadelta/basic_2/substitution/gget_gget.ma b/matita/matita/contribs/lambdadelta/basic_2/substitution/gget_gget.ma index 2f75c9812..bf14f9e44 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/substitution/gget_gget.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/substitution/gget_gget.ma @@ -18,7 +18,7 @@ include "basic_2/substitution/gget.ma". (* Main properties **********************************************************) -theorem gget_mono: ∀G,G1,e. ⇩[e] G ≡ G1 → ∀G2. ⇩[e] G ≡ G2 → G1 = G2. +theorem gget_mono: ∀G,G1,e. ⬇[e] G ≡ G1 → ∀G2. ⬇[e] G ≡ G2 → G1 = G2. #G #G1 #e #H elim H -G -G1 [ #G #He #G2 #H >(gget_inv_gt … H He) -H -He // @@ -29,7 +29,7 @@ theorem gget_mono: ∀G,G1,e. ⇩[e] G ≡ G1 → ∀G2. ⇩[e] G ≡ G2 → G1 ] qed-. -lemma gget_dec: ∀G1,G2,e. Decidable (⇩[e] G1 ≡ G2). +lemma gget_dec: ∀G1,G2,e. Decidable (⬇[e] G1 ≡ G2). #G1 #G2 #e elim (gget_total e G1) #G #HG1 elim (eq_genv_dec G G2) #HG2 diff --git a/matita/matita/contribs/lambdadelta/basic_2/substitution/lift.ma b/matita/matita/contribs/lambdadelta/basic_2/substitution/lift.ma index f88486292..d6537046c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/substitution/lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/substitution/lift.ma @@ -38,14 +38,14 @@ interpretation "relocation" 'RLift d e T1 T2 = (lift d e T1 T2). (* Basic inversion lemmas ***************************************************) -fact lift_inv_O2_aux: ∀d,e,T1,T2. ⇧[d, e] T1 ≡ T2 → e = 0 → T1 = T2. +fact lift_inv_O2_aux: ∀d,e,T1,T2. ⬆[d, e] T1 ≡ T2 → e = 0 → T1 = T2. #d #e #T1 #T2 #H elim H -d -e -T1 -T2 /3 width=1 by eq_f2/ qed-. -lemma lift_inv_O2: ∀d,T1,T2. ⇧[d, 0] T1 ≡ T2 → T1 = T2. +lemma lift_inv_O2: ∀d,T1,T2. ⬆[d, 0] T1 ≡ T2 → T1 = T2. /2 width=4 by lift_inv_O2_aux/ qed-. -fact lift_inv_sort1_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → ∀k. T1 = ⋆k → T2 = ⋆k. +fact lift_inv_sort1_aux: ∀d,e,T1,T2. ⬆[d,e] T1 ≡ T2 → ∀k. T1 = ⋆k → T2 = ⋆k. #d #e #T1 #T2 * -d -e -T1 -T2 // [ #i #d #e #_ #k #H destruct | #a #I #V1 #V2 #T1 #T2 #d #e #_ #_ #k #H destruct @@ -53,10 +53,10 @@ fact lift_inv_sort1_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → ∀k. T1 = ⋆k ] qed-. -lemma lift_inv_sort1: ∀d,e,T2,k. ⇧[d,e] ⋆k ≡ T2 → T2 = ⋆k. +lemma lift_inv_sort1: ∀d,e,T2,k. ⬆[d,e] ⋆k ≡ T2 → T2 = ⋆k. /2 width=5 by lift_inv_sort1_aux/ qed-. -fact lift_inv_lref1_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → ∀i. T1 = #i → +fact lift_inv_lref1_aux: ∀d,e,T1,T2. ⬆[d,e] T1 ≡ T2 → ∀i. T1 = #i → (i < d ∧ T2 = #i) ∨ (d ≤ i ∧ T2 = #(i + e)). #d #e #T1 #T2 * -d -e -T1 -T2 [ #k #d #e #i #H destruct @@ -68,23 +68,23 @@ fact lift_inv_lref1_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → ∀i. T1 = #i → ] qed-. -lemma lift_inv_lref1: ∀d,e,T2,i. ⇧[d,e] #i ≡ T2 → +lemma lift_inv_lref1: ∀d,e,T2,i. ⬆[d,e] #i ≡ T2 → (i < d ∧ T2 = #i) ∨ (d ≤ i ∧ T2 = #(i + e)). /2 width=3 by lift_inv_lref1_aux/ qed-. -lemma lift_inv_lref1_lt: ∀d,e,T2,i. ⇧[d,e] #i ≡ T2 → i < d → T2 = #i. +lemma lift_inv_lref1_lt: ∀d,e,T2,i. ⬆[d,e] #i ≡ T2 → i < d → T2 = #i. #d #e #T2 #i #H elim (lift_inv_lref1 … H) -H * // #Hdi #_ #Hid lapply (le_to_lt_to_lt … Hdi Hid) -Hdi -Hid #Hdd elim (lt_refl_false … Hdd) qed-. -lemma lift_inv_lref1_ge: ∀d,e,T2,i. ⇧[d,e] #i ≡ T2 → d ≤ i → T2 = #(i + e). +lemma lift_inv_lref1_ge: ∀d,e,T2,i. ⬆[d,e] #i ≡ T2 → d ≤ i → T2 = #(i + e). #d #e #T2 #i #H elim (lift_inv_lref1 … H) -H * // #Hid #_ #Hdi lapply (le_to_lt_to_lt … Hdi Hid) -Hdi -Hid #Hdd elim (lt_refl_false … Hdd) qed-. -fact lift_inv_gref1_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → ∀p. T1 = §p → T2 = §p. +fact lift_inv_gref1_aux: ∀d,e,T1,T2. ⬆[d,e] T1 ≡ T2 → ∀p. T1 = §p → T2 = §p. #d #e #T1 #T2 * -d -e -T1 -T2 // [ #i #d #e #_ #k #H destruct | #a #I #V1 #V2 #T1 #T2 #d #e #_ #_ #k #H destruct @@ -92,12 +92,12 @@ fact lift_inv_gref1_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → ∀p. T1 = §p → ] qed-. -lemma lift_inv_gref1: ∀d,e,T2,p. ⇧[d,e] §p ≡ T2 → T2 = §p. +lemma lift_inv_gref1: ∀d,e,T2,p. ⬆[d,e] §p ≡ T2 → T2 = §p. /2 width=5 by lift_inv_gref1_aux/ qed-. -fact lift_inv_bind1_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → +fact lift_inv_bind1_aux: ∀d,e,T1,T2. ⬆[d,e] T1 ≡ T2 → ∀a,I,V1,U1. T1 = ⓑ{a,I} V1.U1 → - ∃∃V2,U2. ⇧[d,e] V1 ≡ V2 & ⇧[d+1,e] U1 ≡ U2 & + ∃∃V2,U2. ⬆[d,e] V1 ≡ V2 & ⬆[d+1,e] U1 ≡ U2 & T2 = ⓑ{a,I} V2. U2. #d #e #T1 #T2 * -d -e -T1 -T2 [ #k #d #e #a #I #V1 #U1 #H destruct @@ -109,14 +109,14 @@ fact lift_inv_bind1_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → ] qed-. -lemma lift_inv_bind1: ∀d,e,T2,a,I,V1,U1. ⇧[d,e] ⓑ{a,I} V1. U1 ≡ T2 → - ∃∃V2,U2. ⇧[d,e] V1 ≡ V2 & ⇧[d+1,e] U1 ≡ U2 & +lemma lift_inv_bind1: ∀d,e,T2,a,I,V1,U1. ⬆[d,e] ⓑ{a,I} V1. U1 ≡ T2 → + ∃∃V2,U2. ⬆[d,e] V1 ≡ V2 & ⬆[d+1,e] U1 ≡ U2 & T2 = ⓑ{a,I} V2. U2. /2 width=3 by lift_inv_bind1_aux/ qed-. -fact lift_inv_flat1_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → +fact lift_inv_flat1_aux: ∀d,e,T1,T2. ⬆[d,e] T1 ≡ T2 → ∀I,V1,U1. T1 = ⓕ{I} V1.U1 → - ∃∃V2,U2. ⇧[d,e] V1 ≡ V2 & ⇧[d,e] U1 ≡ U2 & + ∃∃V2,U2. ⬆[d,e] V1 ≡ V2 & ⬆[d,e] U1 ≡ U2 & T2 = ⓕ{I} V2. U2. #d #e #T1 #T2 * -d -e -T1 -T2 [ #k #d #e #I #V1 #U1 #H destruct @@ -128,12 +128,12 @@ fact lift_inv_flat1_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → ] qed-. -lemma lift_inv_flat1: ∀d,e,T2,I,V1,U1. ⇧[d,e] ⓕ{I} V1. U1 ≡ T2 → - ∃∃V2,U2. ⇧[d,e] V1 ≡ V2 & ⇧[d,e] U1 ≡ U2 & +lemma lift_inv_flat1: ∀d,e,T2,I,V1,U1. ⬆[d,e] ⓕ{I} V1. U1 ≡ T2 → + ∃∃V2,U2. ⬆[d,e] V1 ≡ V2 & ⬆[d,e] U1 ≡ U2 & T2 = ⓕ{I} V2. U2. /2 width=3 by lift_inv_flat1_aux/ qed-. -fact lift_inv_sort2_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → ∀k. T2 = ⋆k → T1 = ⋆k. +fact lift_inv_sort2_aux: ∀d,e,T1,T2. ⬆[d,e] T1 ≡ T2 → ∀k. T2 = ⋆k → T1 = ⋆k. #d #e #T1 #T2 * -d -e -T1 -T2 // [ #i #d #e #_ #k #H destruct | #a #I #V1 #V2 #T1 #T2 #d #e #_ #_ #k #H destruct @@ -142,10 +142,10 @@ fact lift_inv_sort2_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → ∀k. T2 = ⋆k qed-. (* Basic_1: was: lift_gen_sort *) -lemma lift_inv_sort2: ∀d,e,T1,k. ⇧[d,e] T1 ≡ ⋆k → T1 = ⋆k. +lemma lift_inv_sort2: ∀d,e,T1,k. ⬆[d,e] T1 ≡ ⋆k → T1 = ⋆k. /2 width=5 by lift_inv_sort2_aux/ qed-. -fact lift_inv_lref2_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → ∀i. T2 = #i → +fact lift_inv_lref2_aux: ∀d,e,T1,T2. ⬆[d,e] T1 ≡ T2 → ∀i. T2 = #i → (i < d ∧ T1 = #i) ∨ (d + e ≤ i ∧ T1 = #(i - e)). #d #e #T1 #T2 * -d -e -T1 -T2 [ #k #d #e #i #H destruct @@ -158,12 +158,12 @@ fact lift_inv_lref2_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → ∀i. T2 = #i → qed-. (* Basic_1: was: lift_gen_lref *) -lemma lift_inv_lref2: ∀d,e,T1,i. ⇧[d,e] T1 ≡ #i → +lemma lift_inv_lref2: ∀d,e,T1,i. ⬆[d,e] T1 ≡ #i → (i < d ∧ T1 = #i) ∨ (d + e ≤ i ∧ T1 = #(i - e)). /2 width=3 by lift_inv_lref2_aux/ qed-. (* Basic_1: was: lift_gen_lref_lt *) -lemma lift_inv_lref2_lt: ∀d,e,T1,i. ⇧[d,e] T1 ≡ #i → i < d → T1 = #i. +lemma lift_inv_lref2_lt: ∀d,e,T1,i. ⬆[d,e] T1 ≡ #i → i < d → T1 = #i. #d #e #T1 #i #H elim (lift_inv_lref2 … H) -H * // #Hdi #_ #Hid lapply (le_to_lt_to_lt … Hdi Hid) -Hdi -Hid #Hdd elim (lt_inv_plus_l … Hdd) -Hdd #Hdd @@ -171,7 +171,7 @@ elim (lt_refl_false … Hdd) qed-. (* Basic_1: was: lift_gen_lref_false *) -lemma lift_inv_lref2_be: ∀d,e,T1,i. ⇧[d,e] T1 ≡ #i → +lemma lift_inv_lref2_be: ∀d,e,T1,i. ⬆[d,e] T1 ≡ #i → d ≤ i → i < d + e → ⊥. #d #e #T1 #i #H elim (lift_inv_lref2 … H) -H * [ #H1 #_ #H2 #_ | #H2 #_ #_ #H1 ] @@ -180,14 +180,14 @@ elim (lt_refl_false … H) qed-. (* Basic_1: was: lift_gen_lref_ge *) -lemma lift_inv_lref2_ge: ∀d,e,T1,i. ⇧[d,e] T1 ≡ #i → d + e ≤ i → T1 = #(i - e). +lemma lift_inv_lref2_ge: ∀d,e,T1,i. ⬆[d,e] T1 ≡ #i → d + e ≤ i → T1 = #(i - e). #d #e #T1 #i #H elim (lift_inv_lref2 … H) -H * // #Hid #_ #Hdi lapply (le_to_lt_to_lt … Hdi Hid) -Hdi -Hid #Hdd elim (lt_inv_plus_l … Hdd) -Hdd #Hdd elim (lt_refl_false … Hdd) qed-. -fact lift_inv_gref2_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → ∀p. T2 = §p → T1 = §p. +fact lift_inv_gref2_aux: ∀d,e,T1,T2. ⬆[d,e] T1 ≡ T2 → ∀p. T2 = §p → T1 = §p. #d #e #T1 #T2 * -d -e -T1 -T2 // [ #i #d #e #_ #k #H destruct | #a #I #V1 #V2 #T1 #T2 #d #e #_ #_ #k #H destruct @@ -195,12 +195,12 @@ fact lift_inv_gref2_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → ∀p. T2 = §p → ] qed-. -lemma lift_inv_gref2: ∀d,e,T1,p. ⇧[d,e] T1 ≡ §p → T1 = §p. +lemma lift_inv_gref2: ∀d,e,T1,p. ⬆[d,e] T1 ≡ §p → T1 = §p. /2 width=5 by lift_inv_gref2_aux/ qed-. -fact lift_inv_bind2_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → +fact lift_inv_bind2_aux: ∀d,e,T1,T2. ⬆[d,e] T1 ≡ T2 → ∀a,I,V2,U2. T2 = ⓑ{a,I} V2.U2 → - ∃∃V1,U1. ⇧[d,e] V1 ≡ V2 & ⇧[d+1,e] U1 ≡ U2 & + ∃∃V1,U1. ⬆[d,e] V1 ≡ V2 & ⬆[d+1,e] U1 ≡ U2 & T1 = ⓑ{a,I} V1. U1. #d #e #T1 #T2 * -d -e -T1 -T2 [ #k #d #e #a #I #V2 #U2 #H destruct @@ -213,14 +213,14 @@ fact lift_inv_bind2_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → qed-. (* Basic_1: was: lift_gen_bind *) -lemma lift_inv_bind2: ∀d,e,T1,a,I,V2,U2. ⇧[d,e] T1 ≡ ⓑ{a,I} V2. U2 → - ∃∃V1,U1. ⇧[d,e] V1 ≡ V2 & ⇧[d+1,e] U1 ≡ U2 & +lemma lift_inv_bind2: ∀d,e,T1,a,I,V2,U2. ⬆[d,e] T1 ≡ ⓑ{a,I} V2. U2 → + ∃∃V1,U1. ⬆[d,e] V1 ≡ V2 & ⬆[d+1,e] U1 ≡ U2 & T1 = ⓑ{a,I} V1. U1. /2 width=3 by lift_inv_bind2_aux/ qed-. -fact lift_inv_flat2_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → +fact lift_inv_flat2_aux: ∀d,e,T1,T2. ⬆[d,e] T1 ≡ T2 → ∀I,V2,U2. T2 = ⓕ{I} V2.U2 → - ∃∃V1,U1. ⇧[d,e] V1 ≡ V2 & ⇧[d,e] U1 ≡ U2 & + ∃∃V1,U1. ⬆[d,e] V1 ≡ V2 & ⬆[d,e] U1 ≡ U2 & T1 = ⓕ{I} V1. U1. #d #e #T1 #T2 * -d -e -T1 -T2 [ #k #d #e #I #V2 #U2 #H destruct @@ -233,12 +233,12 @@ fact lift_inv_flat2_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → qed-. (* Basic_1: was: lift_gen_flat *) -lemma lift_inv_flat2: ∀d,e,T1,I,V2,U2. ⇧[d,e] T1 ≡ ⓕ{I} V2. U2 → - ∃∃V1,U1. ⇧[d,e] V1 ≡ V2 & ⇧[d,e] U1 ≡ U2 & +lemma lift_inv_flat2: ∀d,e,T1,I,V2,U2. ⬆[d,e] T1 ≡ ⓕ{I} V2. U2 → + ∃∃V1,U1. ⬆[d,e] V1 ≡ V2 & ⬆[d,e] U1 ≡ U2 & T1 = ⓕ{I} V1. U1. /2 width=3 by lift_inv_flat2_aux/ qed-. -lemma lift_inv_pair_xy_x: ∀d,e,I,V,T. ⇧[d, e] ②{I} V. T ≡ V → ⊥. +lemma lift_inv_pair_xy_x: ∀d,e,I,V,T. ⬆[d, e] ②{I} V. T ≡ V → ⊥. #d #e #J #V elim V -V [ * #i #T #H [ lapply (lift_inv_sort2 … H) -H #H destruct @@ -253,7 +253,7 @@ lemma lift_inv_pair_xy_x: ∀d,e,I,V,T. ⇧[d, e] ②{I} V. T ≡ V → ⊥. qed-. (* Basic_1: was: thead_x_lift_y_y *) -lemma lift_inv_pair_xy_y: ∀I,T,V,d,e. ⇧[d, e] ②{I} V. T ≡ T → ⊥. +lemma lift_inv_pair_xy_y: ∀I,T,V,d,e. ⬆[d, e] ②{I} V. T ≡ T → ⊥. #J #T elim T -T [ * #i #V #d #e #H [ lapply (lift_inv_sort2 … H) -H #H destruct @@ -269,33 +269,33 @@ qed-. (* Basic forward lemmas *****************************************************) -lemma lift_fwd_pair1: ∀I,T2,V1,U1,d,e. ⇧[d,e] ②{I}V1.U1 ≡ T2 → - ∃∃V2,U2. ⇧[d,e] V1 ≡ V2 & T2 = ②{I}V2.U2. +lemma lift_fwd_pair1: ∀I,T2,V1,U1,d,e. ⬆[d,e] ②{I}V1.U1 ≡ T2 → + ∃∃V2,U2. ⬆[d,e] V1 ≡ V2 & T2 = ②{I}V2.U2. * [ #a ] #I #T2 #V1 #U1 #d #e #H [ elim (lift_inv_bind1 … H) -H /2 width=4 by ex2_2_intro/ | elim (lift_inv_flat1 … H) -H /2 width=4 by ex2_2_intro/ ] qed-. -lemma lift_fwd_pair2: ∀I,T1,V2,U2,d,e. ⇧[d,e] T1 ≡ ②{I}V2.U2 → - ∃∃V1,U1. ⇧[d,e] V1 ≡ V2 & T1 = ②{I}V1.U1. +lemma lift_fwd_pair2: ∀I,T1,V2,U2,d,e. ⬆[d,e] T1 ≡ ②{I}V2.U2 → + ∃∃V1,U1. ⬆[d,e] V1 ≡ V2 & T1 = ②{I}V1.U1. * [ #a ] #I #T1 #V2 #U2 #d #e #H [ elim (lift_inv_bind2 … H) -H /2 width=4 by ex2_2_intro/ | elim (lift_inv_flat2 … H) -H /2 width=4 by ex2_2_intro/ ] qed-. -lemma lift_fwd_tw: ∀d,e,T1,T2. ⇧[d, e] T1 ≡ T2 → ♯{T1} = ♯{T2}. +lemma lift_fwd_tw: ∀d,e,T1,T2. ⬆[d, e] T1 ≡ T2 → ♯{T1} = ♯{T2}. #d #e #T1 #T2 #H elim H -d -e -T1 -T2 normalize // qed-. -lemma lift_simple_dx: ∀d,e,T1,T2. ⇧[d, e] T1 ≡ T2 → 𝐒⦃T1⦄ → 𝐒⦃T2⦄. +lemma lift_simple_dx: ∀d,e,T1,T2. ⬆[d, e] T1 ≡ T2 → 𝐒⦃T1⦄ → 𝐒⦃T2⦄. #d #e #T1 #T2 #H elim H -d -e -T1 -T2 // #a #I #V1 #V2 #T1 #T2 #d #e #_ #_ #_ #_ #H elim (simple_inv_bind … H) qed-. -lemma lift_simple_sn: ∀d,e,T1,T2. ⇧[d, e] T1 ≡ T2 → 𝐒⦃T2⦄ → 𝐒⦃T1⦄. +lemma lift_simple_sn: ∀d,e,T1,T2. ⬆[d, e] T1 ≡ T2 → 𝐒⦃T2⦄ → 𝐒⦃T1⦄. #d #e #T1 #T2 #H elim H -d -e -T1 -T2 // #a #I #V1 #V2 #T1 #T2 #d #e #_ #_ #_ #_ #H elim (simple_inv_bind … H) @@ -304,22 +304,22 @@ qed-. (* Basic properties *********************************************************) (* Basic_1: was: lift_lref_gt *) -lemma lift_lref_ge_minus: ∀d,e,i. d + e ≤ i → ⇧[d, e] #(i - e) ≡ #i. +lemma lift_lref_ge_minus: ∀d,e,i. d + e ≤ i → ⬆[d, e] #(i - e) ≡ #i. #d #e #i #H >(plus_minus_m_m i e) in ⊢ (? ? ? ? %); /3 width=2 by lift_lref_ge, le_plus_to_minus_r, le_plus_b/ qed. -lemma lift_lref_ge_minus_eq: ∀d,e,i,j. d + e ≤ i → j = i - e → ⇧[d, e] #j ≡ #i. +lemma lift_lref_ge_minus_eq: ∀d,e,i,j. d + e ≤ i → j = i - e → ⬆[d, e] #j ≡ #i. /2 width=1/ qed-. (* Basic_1: was: lift_r *) -lemma lift_refl: ∀T,d. ⇧[d, 0] T ≡ T. +lemma lift_refl: ∀T,d. ⬆[d, 0] T ≡ T. #T elim T -T [ * #i // #d elim (lt_or_ge i d) /2 width=1 by lift_lref_lt, lift_lref_ge/ | * /2 width=1 by lift_bind, lift_flat/ ] qed. -lemma lift_total: ∀T1,d,e. ∃T2. ⇧[d,e] T1 ≡ T2. +lemma lift_total: ∀T1,d,e. ∃T2. ⬆[d,e] T1 ≡ T2. #T1 elim T1 -T1 [ * #i /2 width=2/ #d #e elim (lt_or_ge i d) /3 width=2 by lift_lref_lt, lift_lref_ge, ex_intro/ | * [ #a ] #I #V1 #T1 #IHV1 #IHT1 #d #e @@ -331,9 +331,9 @@ lemma lift_total: ∀T1,d,e. ∃T2. ⇧[d,e] T1 ≡ T2. qed. (* Basic_1: was: lift_free (right to left) *) -lemma lift_split: ∀d1,e2,T1,T2. ⇧[d1, e2] T1 ≡ T2 → +lemma lift_split: ∀d1,e2,T1,T2. ⬆[d1, e2] T1 ≡ T2 → ∀d2,e1. d1 ≤ d2 → d2 ≤ d1 + e1 → e1 ≤ e2 → - ∃∃T. ⇧[d1, e1] T1 ≡ T & ⇧[d2, e2 - e1] T ≡ T2. + ∃∃T. ⬆[d1, e1] T1 ≡ T & ⬆[d2, e2 - e1] T ≡ T2. #d1 #e2 #T1 #T2 #H elim H -d1 -e2 -T1 -T2 [ /3 width=3/ | #i #d1 #e2 #Hid1 #d2 #e1 #Hd12 #_ #_ @@ -352,7 +352,7 @@ lemma lift_split: ∀d1,e2,T1,T2. ⇧[d1, e2] T1 ≡ T2 → qed. (* Basic_1: was only: dnf_dec2 dnf_dec *) -lemma is_lift_dec: ∀T2,d,e. Decidable (∃T1. ⇧[d,e] T1 ≡ T2). +lemma is_lift_dec: ∀T2,d,e. Decidable (∃T1. ⬆[d,e] T1 ≡ T2). #T1 elim T1 -T1 [ * [1,3: /3 width=2 by lift_sort, lift_gref, ex_intro, or_introl/ ] #i #d #e elim (lt_or_ge i d) #Hdi diff --git a/matita/matita/contribs/lambdadelta/basic_2/substitution/lift_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/substitution/lift_lift.ma index 17aff3a81..06452afe4 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/substitution/lift_lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/substitution/lift_lift.ma @@ -19,7 +19,7 @@ include "basic_2/substitution/lift.ma". (* Main properties ***********************************************************) (* Basic_1: was: lift_inj *) -theorem lift_inj: ∀d,e,T1,U. ⇧[d,e] T1 ≡ U → ∀T2. ⇧[d,e] T2 ≡ U → T1 = T2. +theorem lift_inj: ∀d,e,T1,U. ⬆[d,e] T1 ≡ U → ∀T2. ⬆[d,e] T2 ≡ U → T1 = T2. #d #e #T1 #U #H elim H -d -e -T1 -U [ #k #d #e #X #HX lapply (lift_inv_sort2 … HX) -HX // @@ -37,10 +37,10 @@ theorem lift_inj: ∀d,e,T1,U. ⇧[d,e] T1 ≡ U → ∀T2. ⇧[d,e] T2 ≡ U qed-. (* Basic_1: was: lift_gen_lift *) -theorem lift_div_le: ∀d1,e1,T1,T. ⇧[d1, e1] T1 ≡ T → - ∀d2,e2,T2. ⇧[d2 + e1, e2] T2 ≡ T → +theorem lift_div_le: ∀d1,e1,T1,T. ⬆[d1, e1] T1 ≡ T → + ∀d2,e2,T2. ⬆[d2 + e1, e2] T2 ≡ T → d1 ≤ d2 → - ∃∃T0. ⇧[d1, e1] T0 ≡ T2 & ⇧[d2, e2] T0 ≡ T1. + ∃∃T0. ⬆[d1, e1] T0 ≡ T2 & ⬆[d2, e2] T0 ≡ T1. #d1 #e1 #T1 #T #H elim H -d1 -e1 -T1 -T [ #k #d1 #e1 #d2 #e2 #T2 #Hk #Hd12 lapply (lift_inv_sort2 … Hk) -Hk #Hk destruct /3 width=3 by lift_sort, ex2_intro/ @@ -70,10 +70,10 @@ theorem lift_div_le: ∀d1,e1,T1,T. ⇧[d1, e1] T1 ≡ T → qed. (* Note: apparently this was missing in basic_1 *) -theorem lift_div_be: ∀d1,e1,T1,T. ⇧[d1, e1] T1 ≡ T → - ∀e,e2,T2. ⇧[d1 + e, e2] T2 ≡ T → +theorem lift_div_be: ∀d1,e1,T1,T. ⬆[d1, e1] T1 ≡ T → + ∀e,e2,T2. ⬆[d1 + e, e2] T2 ≡ T → e ≤ e1 → e1 ≤ e + e2 → - ∃∃T0. ⇧[d1, e] T0 ≡ T2 & ⇧[d1, e + e2 - e1] T0 ≡ T1. + ∃∃T0. ⬆[d1, e] T0 ≡ T2 & ⬆[d1, e + e2 - e1] T0 ≡ T1. #d1 #e1 #T1 #T #H elim H -d1 -e1 -T1 -T [ #k #d1 #e1 #e #e2 #T2 #H >(lift_inv_sort2 … H) -H /2 width=3 by lift_sort, ex2_intro/ | #i #d1 #e1 #Hid1 #e #e2 #T2 #H #He1 #He1e2 @@ -99,7 +99,7 @@ theorem lift_div_be: ∀d1,e1,T1,T. ⇧[d1, e1] T1 ≡ T → ] qed. -theorem lift_mono: ∀d,e,T,U1. ⇧[d,e] T ≡ U1 → ∀U2. ⇧[d,e] T ≡ U2 → U1 = U2. +theorem lift_mono: ∀d,e,T,U1. ⬆[d,e] T ≡ U1 → ∀U2. ⬆[d,e] T ≡ U2 → U1 = U2. #d #e #T #U1 #H elim H -d -e -T -U1 [ #k #d #e #X #HX lapply (lift_inv_sort1 … HX) -HX // @@ -117,9 +117,9 @@ theorem lift_mono: ∀d,e,T,U1. ⇧[d,e] T ≡ U1 → ∀U2. ⇧[d,e] T ≡ U2 qed-. (* Basic_1: was: lift_free (left to right) *) -theorem lift_trans_be: ∀d1,e1,T1,T. ⇧[d1, e1] T1 ≡ T → - ∀d2,e2,T2. ⇧[d2, e2] T ≡ T2 → - d1 ≤ d2 → d2 ≤ d1 + e1 → ⇧[d1, e1 + e2] T1 ≡ T2. +theorem lift_trans_be: ∀d1,e1,T1,T. ⬆[d1, e1] T1 ≡ T → + ∀d2,e2,T2. ⬆[d2, e2] T ≡ T2 → + d1 ≤ d2 → d2 ≤ d1 + e1 → ⬆[d1, e1 + e2] T1 ≡ T2. #d1 #e1 #T1 #T #H elim H -d1 -e1 -T1 -T [ #k #d1 #e1 #d2 #e2 #T2 #HT2 #_ #_ >(lift_inv_sort1 … HT2) -HT2 // @@ -145,9 +145,9 @@ theorem lift_trans_be: ∀d1,e1,T1,T. ⇧[d1, e1] T1 ≡ T → qed. (* Basic_1: was: lift_d (right to left) *) -theorem lift_trans_le: ∀d1,e1,T1,T. ⇧[d1, e1] T1 ≡ T → - ∀d2,e2,T2. ⇧[d2, e2] T ≡ T2 → d2 ≤ d1 → - ∃∃T0. ⇧[d2, e2] T1 ≡ T0 & ⇧[d1 + e2, e1] T0 ≡ T2. +theorem lift_trans_le: ∀d1,e1,T1,T. ⬆[d1, e1] T1 ≡ T → + ∀d2,e2,T2. ⬆[d2, e2] T ≡ T2 → d2 ≤ d1 → + ∃∃T0. ⬆[d2, e2] T1 ≡ T0 & ⬆[d1 + e2, e1] T0 ≡ T2. #d1 #e1 #T1 #T #H elim H -d1 -e1 -T1 -T [ #k #d1 #e1 #d2 #e2 #X #HX #_ >(lift_inv_sort1 … HX) -HX /2 width=3 by lift_sort, ex2_intro/ @@ -172,9 +172,9 @@ theorem lift_trans_le: ∀d1,e1,T1,T. ⇧[d1, e1] T1 ≡ T → qed. (* Basic_1: was: lift_d (left to right) *) -theorem lift_trans_ge: ∀d1,e1,T1,T. ⇧[d1, e1] T1 ≡ T → - ∀d2,e2,T2. ⇧[d2, e2] T ≡ T2 → d1 + e1 ≤ d2 → - ∃∃T0. ⇧[d2 - e1, e2] T1 ≡ T0 & ⇧[d1, e1] T0 ≡ T2. +theorem lift_trans_ge: ∀d1,e1,T1,T. ⬆[d1, e1] T1 ≡ T → + ∀d2,e2,T2. ⬆[d2, e2] T ≡ T2 → d1 + e1 ≤ d2 → + ∃∃T0. ⬆[d2 - e1, e2] T1 ≡ T0 & ⬆[d1, e1] T0 ≡ T2. #d1 #e1 #T1 #T #H elim H -d1 -e1 -T1 -T [ #k #d1 #e1 #d2 #e2 #X #HX #_ >(lift_inv_sort1 … HX) -HX /2 width=3 by lift_sort, ex2_intro/ @@ -201,16 +201,16 @@ qed. (* Advanced properties ******************************************************) -lemma lift_conf_O1: ∀T,T1,d1,e1. ⇧[d1, e1] T ≡ T1 → ∀T2,e2. ⇧[0, e2] T ≡ T2 → - ∃∃T0. ⇧[0, e2] T1 ≡ T0 & ⇧[d1 + e2, e1] T2 ≡ T0. +lemma lift_conf_O1: ∀T,T1,d1,e1. ⬆[d1, e1] T ≡ T1 → ∀T2,e2. ⬆[0, e2] T ≡ T2 → + ∃∃T0. ⬆[0, e2] T1 ≡ T0 & ⬆[d1 + e2, e1] T2 ≡ T0. #T #T1 #d1 #e1 #HT1 #T2 #e2 #HT2 elim (lift_total T1 0 e2) #T0 #HT10 elim (lift_trans_le … HT1 … HT10) -HT1 // #X #HTX #HT20 lapply (lift_mono … HTX … HT2) -T #H destruct /2 width=3 by ex2_intro/ qed. -lemma lift_conf_be: ∀T,T1,d,e1. ⇧[d, e1] T ≡ T1 → ∀T2,e2. ⇧[d, e2] T ≡ T2 → - e1 ≤ e2 → ⇧[d + e1, e2 - e1] T1 ≡ T2. +lemma lift_conf_be: ∀T,T1,d,e1. ⬆[d, e1] T ≡ T1 → ∀T2,e2. ⬆[d, e2] T ≡ T2 → + e1 ≤ e2 → ⬆[d + e1, e2 - e1] T1 ≡ T2. #T #T1 #d #e1 #HT1 #T2 #e2 #HT2 #He12 elim (lift_split … HT2 (d+e1) e1) -HT2 // #X #H >(lift_mono … H … HT1) -T // diff --git a/matita/matita/contribs/lambdadelta/basic_2/substitution/lift_lift_vector.ma b/matita/matita/contribs/lambdadelta/basic_2/substitution/lift_lift_vector.ma index d285750a4..c0c83975e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/substitution/lift_lift_vector.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/substitution/lift_lift_vector.ma @@ -19,8 +19,8 @@ include "basic_2/substitution/lift_vector.ma". (* Main properties ***********************************************************) -theorem liftv_mono: ∀Ts,U1s,d,e. ⇧[d,e] Ts ≡ U1s → - ∀U2s:list term. ⇧[d,e] Ts ≡ U2s → U1s = U2s. +theorem liftv_mono: ∀Ts,U1s,d,e. ⬆[d,e] Ts ≡ U1s → + ∀U2s:list term. ⬆[d,e] Ts ≡ U2s → U1s = U2s. #Ts #U1s #d #e #H elim H -Ts -U1s [ #U2s #H >(liftv_inv_nil1 … H) -H // | #Ts #U1s #T #U1 #HTU1 #_ #IHTU1s #X #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/substitution/lift_neg.ma b/matita/matita/contribs/lambdadelta/basic_2/substitution/lift_neg.ma index ba97d5c54..a2d7cd7e1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/substitution/lift_neg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/substitution/lift_neg.ma @@ -18,48 +18,48 @@ include "basic_2/substitution/lift.ma". (* Properties on negated basic relocation ***********************************) -lemma nlift_lref_be_SO: ∀X,i. ⇧[i, 1] X ≡ #i → ⊥. +lemma nlift_lref_be_SO: ∀X,i. ⬆[i, 1] X ≡ #i → ⊥. /2 width=7 by lift_inv_lref2_be/ qed-. -lemma nlift_bind_sn: ∀W,d,e. (∀V. ⇧[d, e] V ≡ W → ⊥) → - ∀a,I,U. (∀X. ⇧[d, e] X ≡ ⓑ{a,I}W.U → ⊥). +lemma nlift_bind_sn: ∀W,d,e. (∀V. ⬆[d, e] V ≡ W → ⊥) → + ∀a,I,U. (∀X. ⬆[d, e] X ≡ ⓑ{a,I}W.U → ⊥). #W #d #e #HW #a #I #U #X #H elim (lift_inv_bind2 … H) -H /2 width=2 by/ qed-. -lemma nlift_bind_dx: ∀U,d,e. (∀T. ⇧[d+1, e] T ≡ U → ⊥) → - ∀a,I,W. (∀X. ⇧[d, e] X ≡ ⓑ{a,I}W.U → ⊥). +lemma nlift_bind_dx: ∀U,d,e. (∀T. ⬆[d+1, e] T ≡ U → ⊥) → + ∀a,I,W. (∀X. ⬆[d, e] X ≡ ⓑ{a,I}W.U → ⊥). #U #d #e #HU #a #I #W #X #H elim (lift_inv_bind2 … H) -H /2 width=2 by/ qed-. -lemma nlift_flat_sn: ∀W,d,e. (∀V. ⇧[d, e] V ≡ W → ⊥) → - ∀I,U. (∀X. ⇧[d, e] X ≡ ⓕ{I}W.U → ⊥). +lemma nlift_flat_sn: ∀W,d,e. (∀V. ⬆[d, e] V ≡ W → ⊥) → + ∀I,U. (∀X. ⬆[d, e] X ≡ ⓕ{I}W.U → ⊥). #W #d #e #HW #I #U #X #H elim (lift_inv_flat2 … H) -H /2 width=2 by/ qed-. -lemma nlift_flat_dx: ∀U,d,e. (∀T. ⇧[d, e] T ≡ U → ⊥) → - ∀I,W. (∀X. ⇧[d, e] X ≡ ⓕ{I}W.U → ⊥). +lemma nlift_flat_dx: ∀U,d,e. (∀T. ⬆[d, e] T ≡ U → ⊥) → + ∀I,W. (∀X. ⬆[d, e] X ≡ ⓕ{I}W.U → ⊥). #U #d #e #HU #I #W #X #H elim (lift_inv_flat2 … H) -H /2 width=2 by/ qed-. (* Inversion lemmas on negated basic relocation *****************************) -lemma nlift_inv_lref_be_SO: ∀i,j. (∀X. ⇧[i, 1] X ≡ #j → ⊥) → j = i. +lemma nlift_inv_lref_be_SO: ∀i,j. (∀X. ⬆[i, 1] X ≡ #j → ⊥) → j = i. #i #j elim (lt_or_eq_or_gt i j) // #Hij #H [ elim (H (#(j-1))) -H /2 width=1 by lift_lref_ge_minus/ | elim (H (#j)) -H /2 width=1 by lift_lref_lt/ ] qed-. -lemma nlift_inv_bind: ∀a,I,W,U,d,e. (∀X. ⇧[d, e] X ≡ ⓑ{a,I}W.U → ⊥) → - (∀V. ⇧[d, e] V ≡ W → ⊥) ∨ (∀T. ⇧[d+1, e] T ≡ U → ⊥). +lemma nlift_inv_bind: ∀a,I,W,U,d,e. (∀X. ⬆[d, e] X ≡ ⓑ{a,I}W.U → ⊥) → + (∀V. ⬆[d, e] V ≡ W → ⊥) ∨ (∀T. ⬆[d+1, e] T ≡ U → ⊥). #a #I #W #U #d #e #H elim (is_lift_dec W d e) [ * /4 width=2 by lift_bind, or_intror/ | /4 width=2 by ex_intro, or_introl/ ] qed-. -lemma nlift_inv_flat: ∀I,W,U,d,e. (∀X. ⇧[d, e] X ≡ ⓕ{I}W.U → ⊥) → - (∀V. ⇧[d, e] V ≡ W → ⊥) ∨ (∀T. ⇧[d, e] T ≡ U → ⊥). +lemma nlift_inv_flat: ∀I,W,U,d,e. (∀X. ⬆[d, e] X ≡ ⓕ{I}W.U → ⊥) → + (∀V. ⬆[d, e] V ≡ W → ⊥) ∨ (∀T. ⬆[d, e] T ≡ U → ⊥). #I #W #U #d #e #H elim (is_lift_dec W d e) [ * /4 width=2 by lift_flat, or_intror/ | /4 width=2 by ex_intro, or_introl/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/substitution/lift_vector.ma b/matita/matita/contribs/lambdadelta/basic_2/substitution/lift_vector.ma index ea5458ec7..1aa6978f6 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/substitution/lift_vector.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/substitution/lift_vector.ma @@ -20,7 +20,7 @@ include "basic_2/substitution/lift.ma". inductive liftv (d,e:nat) : relation (list term) ≝ | liftv_nil : liftv d e (◊) (◊) | liftv_cons: ∀T1s,T2s,T1,T2. - ⇧[d, e] T1 ≡ T2 → liftv d e T1s T2s → + ⬆[d, e] T1 ≡ T2 → liftv d e T1s T2s → liftv d e (T1 @ T1s) (T2 @ T2s) . @@ -28,17 +28,17 @@ interpretation "relocation (vector)" 'RLift d e T1s T2s = (liftv d e T1s T2s). (* Basic inversion lemmas ***************************************************) -fact liftv_inv_nil1_aux: ∀T1s,T2s,d,e. ⇧[d, e] T1s ≡ T2s → T1s = ◊ → T2s = ◊. +fact liftv_inv_nil1_aux: ∀T1s,T2s,d,e. ⬆[d, e] T1s ≡ T2s → T1s = ◊ → T2s = ◊. #T1s #T2s #d #e * -T1s -T2s // #T1s #T2s #T1 #T2 #_ #_ #H destruct qed-. -lemma liftv_inv_nil1: ∀T2s,d,e. ⇧[d, e] ◊ ≡ T2s → T2s = ◊. +lemma liftv_inv_nil1: ∀T2s,d,e. ⬆[d, e] ◊ ≡ T2s → T2s = ◊. /2 width=5 by liftv_inv_nil1_aux/ qed-. -fact liftv_inv_cons1_aux: ∀T1s,T2s,d,e. ⇧[d, e] T1s ≡ T2s → +fact liftv_inv_cons1_aux: ∀T1s,T2s,d,e. ⬆[d, e] T1s ≡ T2s → ∀U1,U1s. T1s = U1 @ U1s → - ∃∃U2,U2s. ⇧[d, e] U1 ≡ U2 & ⇧[d, e] U1s ≡ U2s & + ∃∃U2,U2s. ⬆[d, e] U1 ≡ U2 & ⬆[d, e] U1s ≡ U2s & T2s = U2 @ U2s. #T1s #T2s #d #e * -T1s -T2s [ #U1 #U1s #H destruct @@ -46,14 +46,14 @@ fact liftv_inv_cons1_aux: ∀T1s,T2s,d,e. ⇧[d, e] T1s ≡ T2s → ] qed-. -lemma liftv_inv_cons1: ∀U1,U1s,T2s,d,e. ⇧[d, e] U1 @ U1s ≡ T2s → - ∃∃U2,U2s. ⇧[d, e] U1 ≡ U2 & ⇧[d, e] U1s ≡ U2s & +lemma liftv_inv_cons1: ∀U1,U1s,T2s,d,e. ⬆[d, e] U1 @ U1s ≡ T2s → + ∃∃U2,U2s. ⬆[d, e] U1 ≡ U2 & ⬆[d, e] U1s ≡ U2s & T2s = U2 @ U2s. /2 width=3 by liftv_inv_cons1_aux/ qed-. (* Basic properties *********************************************************) -lemma liftv_total: ∀d,e. ∀T1s:list term. ∃T2s. ⇧[d, e] T1s ≡ T2s. +lemma liftv_total: ∀d,e. ∀T1s:list term. ∃T2s. ⬆[d, e] T1s ≡ T2s. #d #e #T1s elim T1s -T1s [ /2 width=2 by liftv_nil, ex_intro/ | #T1 #T1s * #T2s #HT12s diff --git a/matita/matita/contribs/lambdadelta/basic_2/substitution/lpx_sn_alt.ma b/matita/matita/contribs/lambdadelta/basic_2/substitution/lpx_sn_alt.ma index db6174aee..e6d268bcd 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/substitution/lpx_sn_alt.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/substitution/lpx_sn_alt.ma @@ -21,7 +21,7 @@ include "basic_2/substitution/lpx_sn.ma". definition lpx_sn_alt: relation3 lenv term term → relation lenv ≝ λR,L1,L2. |L1| = |L2| ∧ (∀I1,I2,K1,K2,V1,V2,i. - ⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 → + ⬇[i] L1 ≡ K1.ⓑ{I1}V1 → ⬇[i] L2 ≡ K2.ⓑ{I2}V2 → I1 = I2 ∧ R K1 V1 V2 ). @@ -110,7 +110,7 @@ qed-. lemma lpx_sn_intro_alt: ∀R,L1,L2. |L1| = |L2| → (∀I1,I2,K1,K2,V1,V2,i. - ⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 → + ⬇[i] L1 ≡ K1.ⓑ{I1}V1 → ⬇[i] L2 ≡ K2.ⓑ{I2}V2 → I1 = I2 ∧ R K1 V1 V2 ) → lpx_sn R L1 L2. /4 width=4 by lpx_sn_alt_inv_lpx_sn, conj/ qed. @@ -118,7 +118,7 @@ lemma lpx_sn_intro_alt: ∀R,L1,L2. |L1| = |L2| → lemma lpx_sn_inv_alt: ∀R,L1,L2. lpx_sn R L1 L2 → |L1| = |L2| ∧ ∀I1,I2,K1,K2,V1,V2,i. - ⇩[i] L1 ≡ K1.ⓑ{I1}V1 → ⇩[i] L2 ≡ K2.ⓑ{I2}V2 → + ⬇[i] L1 ≡ K1.ⓑ{I1}V1 → ⬇[i] L2 ≡ K2.ⓑ{I2}V2 → I1 = I2 ∧ R K1 V1 V2. #R #L1 #L2 #H lapply (lpx_sn_lpx_sn_alt … H) -H #H elim H -H /3 width=4 by conj/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/substitution/lpx_sn_drop.ma b/matita/matita/contribs/lambdadelta/basic_2/substitution/lpx_sn_drop.ma index 22e058f26..b5ff6d204 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/substitution/lpx_sn_drop.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/substitution/lpx_sn_drop.ma @@ -20,8 +20,8 @@ include "basic_2/substitution/lpx_sn.ma". (* Properties on dropping ****************************************************) lemma lpx_sn_drop_conf: ∀R,L1,L2. lpx_sn R L1 L2 → - ∀I,K1,V1,i. ⇩[i] L1 ≡ K1.ⓑ{I}V1 → - ∃∃K2,V2. ⇩[i] L2 ≡ K2.ⓑ{I}V2 & lpx_sn R K1 K2 & R K1 V1 V2. + ∀I,K1,V1,i. ⬇[i] L1 ≡ K1.ⓑ{I}V1 → + ∃∃K2,V2. ⬇[i] L2 ≡ K2.ⓑ{I}V2 & lpx_sn R K1 K2 & R K1 V1 V2. #R #L1 #L2 #H elim H -L1 -L2 [ #I0 #K0 #V0 #i #H elim (drop_inv_atom1 … H) -H #H destruct | #I #K1 #K2 #V1 #V2 #HK12 #HV12 #IHK12 #I0 #K0 #V0 #i #H elim (drop_inv_O1_pair1 … H) * -H @@ -33,8 +33,8 @@ lemma lpx_sn_drop_conf: ∀R,L1,L2. lpx_sn R L1 L2 → qed-. lemma lpx_sn_drop_trans: ∀R,L1,L2. lpx_sn R L1 L2 → - ∀I,K2,V2,i. ⇩[i] L2 ≡ K2.ⓑ{I}V2 → - ∃∃K1,V1. ⇩[i] L1 ≡ K1.ⓑ{I}V1 & lpx_sn R K1 K2 & R K1 V1 V2. + ∀I,K2,V2,i. ⬇[i] L2 ≡ K2.ⓑ{I}V2 → + ∃∃K1,V1. ⬇[i] L1 ≡ K1.ⓑ{I}V1 & lpx_sn R K1 K2 & R K1 V1 V2. #R #L1 #L2 #H elim H -L1 -L2 [ #I0 #K0 #V0 #i #H elim (drop_inv_atom1 … H) -H #H destruct | #I #K1 #K2 #V1 #V2 #HK12 #HV12 #IHK12 #I0 #K0 #V0 #i #H elim (drop_inv_O1_pair1 … H) * -H @@ -84,8 +84,8 @@ lemma lpx_sn_liftable_dedropable: ∀R. (∀L. reflexive ? (R L)) → ] qed-. -fact lpx_sn_dropable_aux: ∀R,L2,K2,s,d,e. ⇩[s, d, e] L2 ≡ K2 → ∀L1. lpx_sn R L1 L2 → - d = 0 → ∃∃K1. ⇩[s, 0, e] L1 ≡ K1 & lpx_sn R K1 K2. +fact lpx_sn_dropable_aux: ∀R,L2,K2,s,d,e. ⬇[s, d, e] L2 ≡ K2 → ∀L1. lpx_sn R L1 L2 → + d = 0 → ∃∃K1. ⬇[s, 0, e] L1 ≡ K1 & lpx_sn R K1 K2. #R #L2 #K2 #s #d #e #H elim H -L2 -K2 -d -e [ #d #e #He #X #H >(lpx_sn_inv_atom2 … H) -H /4 width=3 by drop_atom, lpx_sn_atom, ex2_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/substitution/lsuby.ma b/matita/matita/contribs/lambdadelta/basic_2/substitution/lsuby.ma index 73f35cdd2..578612a71 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/substitution/lsuby.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/substitution/lsuby.ma @@ -210,9 +210,9 @@ qed-. (* Properties on basic slicing **********************************************) lemma lsuby_drop_trans_be: ∀L1,L2,d,e. L1 ⊆[d, e] L2 → - ∀I2,K2,W,s,i. ⇩[s, 0, i] L2 ≡ K2.ⓑ{I2}W → + ∀I2,K2,W,s,i. ⬇[s, 0, i] L2 ≡ K2.ⓑ{I2}W → d ≤ i → i < d + e → - ∃∃I1,K1. K1 ⊆[0, ⫰(d+e-i)] K2 & ⇩[s, 0, i] L1 ≡ K1.ⓑ{I1}W. + ∃∃I1,K1. K1 ⊆[0, ⫰(d+e-i)] K2 & ⬇[s, 0, i] L1 ≡ K1.ⓑ{I1}W. #L1 #L2 #d #e #H elim H -L1 -L2 -d -e [ #L1 #d #e #J2 #K2 #W #s #i #H elim (drop_inv_atom1 … H) -H #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/unfold/lstas.ma b/matita/matita/contribs/lambdadelta/basic_2/unfold/lstas.ma index 2a81f4c06..39a972c3f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/unfold/lstas.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/unfold/lstas.ma @@ -22,12 +22,12 @@ include "basic_2/static/sh.ma". (* activate genv *) inductive lstas (h): nat → relation4 genv lenv term term ≝ | lstas_sort: ∀G,L,l,k. lstas h l G L (⋆k) (⋆((next h)^l k)) -| lstas_ldef: ∀G,L,K,V,W,U,i,l. ⇩[i] L ≡ K.ⓓV → lstas h l G K V W → - ⇧[0, i+1] W ≡ U → lstas h l G L (#i) U -| lstas_zero: ∀G,L,K,W,V,i. ⇩[i] L ≡ K.ⓛW → lstas h 0 G K W V → +| lstas_ldef: ∀G,L,K,V,W,U,i,l. ⬇[i] L ≡ K.ⓓV → lstas h l G K V W → + ⬆[0, i+1] W ≡ U → lstas h l G L (#i) U +| lstas_zero: ∀G,L,K,W,V,i. ⬇[i] L ≡ K.ⓛW → lstas h 0 G K W V → lstas h 0 G L (#i) (#i) -| lstas_succ: ∀G,L,K,W,V,U,i,l. ⇩[i] L ≡ K.ⓛW → lstas h l G K W V → - ⇧[0, i+1] V ≡ U → lstas h (l+1) G L (#i) U +| lstas_succ: ∀G,L,K,W,V,U,i,l. ⬇[i] L ≡ K.ⓛW → lstas h l G K W V → + ⬆[0, i+1] V ≡ U → lstas h (l+1) G L (#i) U | lstas_bind: ∀a,I,G,L,V,T,U,l. lstas h l G (L.ⓑ{I}V) T U → lstas h l G L (ⓑ{a,I}V.T) (ⓑ{a,I}V.U) | lstas_appl: ∀G,L,V,T,U,l. lstas h l G L T U → lstas h l G L (ⓐV.T) (ⓐV.U) @@ -57,14 +57,14 @@ lemma lstas_inv_sort1: ∀h,G,L,X,k,l. ⦃G, L⦄ ⊢ ⋆k •*[h, l] X → X = qed-. fact lstas_inv_lref1_aux: ∀h,G,L,T,U,l. ⦃G, L⦄ ⊢ T •*[h, l] U → ∀j. T = #j → ∨∨ - (∃∃K,V,W. ⇩[j] L ≡ K.ⓓV & ⦃G, K⦄ ⊢ V •*[h, l] W & - ⇧[0, j+1] W ≡ U + (∃∃K,V,W. ⬇[j] L ≡ K.ⓓV & ⦃G, K⦄ ⊢ V •*[h, l] W & + ⬆[0, j+1] W ≡ U ) | - (∃∃K,W,V. ⇩[j] L ≡ K.ⓛW & ⦃G, K⦄ ⊢ W •*[h, 0] V & + (∃∃K,W,V. ⬇[j] L ≡ K.ⓛW & ⦃G, K⦄ ⊢ W •*[h, 0] V & U = #j & l = 0 ) | - (∃∃K,W,V,l0. ⇩[j] L ≡ K.ⓛW & ⦃G, K⦄ ⊢ W •*[h, l0] V & - ⇧[0, j+1] V ≡ U & l = l0+1 + (∃∃K,W,V,l0. ⬇[j] L ≡ K.ⓛW & ⦃G, K⦄ ⊢ W •*[h, l0] V & + ⬆[0, j+1] V ≡ U & l = l0+1 ). #h #G #L #T #U #l * -G -L -T -U -l [ #G #L #l #k #j #H destruct @@ -78,23 +78,23 @@ fact lstas_inv_lref1_aux: ∀h,G,L,T,U,l. ⦃G, L⦄ ⊢ T •*[h, l] U → ∀j qed-. lemma lstas_inv_lref1: ∀h,G,L,X,i,l. ⦃G, L⦄ ⊢ #i •*[h, l] X → ∨∨ - (∃∃K,V,W. ⇩[i] L ≡ K.ⓓV & ⦃G, K⦄ ⊢ V •*[h, l] W & - ⇧[0, i+1] W ≡ X + (∃∃K,V,W. ⬇[i] L ≡ K.ⓓV & ⦃G, K⦄ ⊢ V •*[h, l] W & + ⬆[0, i+1] W ≡ X ) | - (∃∃K,W,V. ⇩[i] L ≡ K.ⓛW & ⦃G, K⦄ ⊢ W •*[h, 0] V & + (∃∃K,W,V. ⬇[i] L ≡ K.ⓛW & ⦃G, K⦄ ⊢ W •*[h, 0] V & X = #i & l = 0 ) | - (∃∃K,W,V,l0. ⇩[i] L ≡ K.ⓛW & ⦃G, K⦄ ⊢ W •*[h, l0] V & - ⇧[0, i+1] V ≡ X & l = l0+1 + (∃∃K,W,V,l0. ⬇[i] L ≡ K.ⓛW & ⦃G, K⦄ ⊢ W •*[h, l0] V & + ⬆[0, i+1] V ≡ X & l = l0+1 ). /2 width=3 by lstas_inv_lref1_aux/ qed-. lemma lstas_inv_lref1_O: ∀h,G,L,X,i. ⦃G, L⦄ ⊢ #i •*[h, 0] X → - (∃∃K,V,W. ⇩[i] L ≡ K.ⓓV & ⦃G, K⦄ ⊢ V •*[h, 0] W & - ⇧[0, i+1] W ≡ X + (∃∃K,V,W. ⬇[i] L ≡ K.ⓓV & ⦃G, K⦄ ⊢ V •*[h, 0] W & + ⬆[0, i+1] W ≡ X ) ∨ - (∃∃K,W,V. ⇩[i] L ≡ K.ⓛW & ⦃G, K⦄ ⊢ W •*[h, 0] V & + (∃∃K,W,V. ⬇[i] L ≡ K.ⓛW & ⦃G, K⦄ ⊢ W •*[h, 0] V & X = #i ). #h #G #L #X #i #H elim (lstas_inv_lref1 … H) -H * /3 width=6 by ex3_3_intro, or_introl, or_intror/ @@ -103,11 +103,11 @@ qed-. (* Basic_1: was just: sty0_gen_lref *) lemma lstas_inv_lref1_S: ∀h,G,L,X,i,l. ⦃G, L⦄ ⊢ #i •*[h, l+1] X → - (∃∃K,V,W. ⇩[i] L ≡ K.ⓓV & ⦃G, K⦄ ⊢ V •*[h, l+1] W & - ⇧[0, i+1] W ≡ X + (∃∃K,V,W. ⬇[i] L ≡ K.ⓓV & ⦃G, K⦄ ⊢ V •*[h, l+1] W & + ⬆[0, i+1] W ≡ X ) ∨ - (∃∃K,W,V. ⇩[i] L ≡ K.ⓛW & ⦃G, K⦄ ⊢ W •*[h, l] V & - ⇧[0, i+1] V ≡ X + (∃∃K,W,V. ⬇[i] L ≡ K.ⓛW & ⦃G, K⦄ ⊢ W •*[h, l] V & + ⬆[0, i+1] V ≡ X ). #h #G #L #X #i #l #H elim (lstas_inv_lref1 … H) -H * /3 width=6 by ex3_3_intro, or_introl, or_intror/ #K #W #V #_ #_ #_