X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fbasic_2%2Fdynamic%2Fnta_preserve_cpcs.ma;h=c2bcbd4bd49fc08f7617301ff8cc38c0389a2175;hb=ca7327c20c6031829fade8bb84a3a1bb66113f54;hp=cbcd378a4d774ce1a01444150e5d0cccc5a254e8;hpb=dc20d16b32940a94d29a04de0d4fe1f80e00a73f;p=helm.git diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_preserve_cpcs.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_preserve_cpcs.ma index cbcd378a4..c2bcbd4bd 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_preserve_cpcs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_preserve_cpcs.ma @@ -20,43 +20,43 @@ include "basic_2/dynamic/nta_preserve.ma". (* Properties based on type equivalence and preservation *******************) (* Basic_1: uses: ty3_tred *) -lemma nta_cprs_trans (a) (h) (G) (L): - ∀T,U1. ⦃G,L⦄ ⊢ T :[a,h] U1 → ∀U2. ⦃G,L⦄ ⊢ U1 ➡*[h] U2 → ⦃G,L⦄ ⊢ T :[a,h] U2. -#a #h #G #L #T #U1 #H #U2 #HU12 +lemma nta_cprs_trans (h) (a) (G) (L): + ∀T,U1. ❪G,L❫ ⊢ T :[h,a] U1 → ∀U2. ❪G,L❫ ⊢ U1 ➡*[h,0] U2 → ❪G,L❫ ⊢ T :[h,a] U2. +#h #a #G #L #T #U1 #H #U2 #HU12 /4 width=4 by nta_conv_cnv, nta_fwd_cnv_dx, cnv_cpms_trans, cpcs_cprs_dx/ qed-. (* Basic_1: uses: ty3_sred_back *) -lemma cprs_nta_trans (a) (h) (G) (L): - ∀T1,U0. ⦃G,L⦄ ⊢ T1 :[a,h] U0 → ∀T2. ⦃G,L⦄ ⊢ T1 ➡*[h] T2 → - ∀U. ⦃G,L⦄ ⊢ T2 :[a,h] U → ⦃G,L⦄ ⊢ T1 :[a,h] U. -#a #h #G #L #T1 #U0 #HT1 #T2 #HT12 #U #H +lemma cprs_nta_trans (h) (a) (G) (L): + ∀T1,U0. ❪G,L❫ ⊢ T1 :[h,a] U0 → ∀T2. ❪G,L❫ ⊢ T1 ➡*[h,0] T2 → + ∀U. ❪G,L❫ ⊢ T2 :[h,a] U → ❪G,L❫ ⊢ T1 :[h,a] U. +#h #a #G #L #T1 #U0 #HT1 #T2 #HT12 #U #H lapply (nta_cprs_conf … HT1 … HT12) -HT12 #HT2 /4 width=6 by nta_mono, nta_conv_cnv, nta_fwd_cnv_dx/ qed-. -lemma cprs_nta_trans_cnv (a) (h) (G) (L): - ∀T1. ⦃G,L⦄ ⊢ T1 ![a,h] → ∀T2. ⦃G,L⦄ ⊢ T1 ➡*[h] T2 → - ∀U. ⦃G,L⦄ ⊢ T2 :[a,h] U → ⦃G,L⦄ ⊢ T1 :[a,h] U. -#a #h #G #L #T1 #HT1 #T2 #HT12 #U #H +lemma cprs_nta_trans_cnv (h) (a) (G) (L): + ∀T1. ❪G,L❫ ⊢ T1 ![h,a] → ∀T2. ❪G,L❫ ⊢ T1 ➡*[h,0] T2 → + ∀U. ❪G,L❫ ⊢ T2 :[h,a] U → ❪G,L❫ ⊢ T1 :[h,a] U. +#h #a #G #L #T1 #HT1 #T2 #HT12 #U #H elim (cnv_nta_sn … HT1) -HT1 #U0 #HT1 /2 width=3 by cprs_nta_trans/ qed-. (* Basic_1: uses: ty3_sconv *) -lemma nta_cpcs_conf (a) (h) (G) (L): - ∀T1,U. ⦃G,L⦄ ⊢ T1 :[a,h] U → ∀T2. ⦃G,L⦄ ⊢ T1 ⬌*[h] T2 → - ∀U0. ⦃G,L⦄ ⊢ T2 :[a,h] U0 → ⦃G,L⦄ ⊢ T2 :[a,h] U. -#a #h #G #L #T1 #U #HT1 #T2 #HT12 #U0 #HT2 +lemma nta_cpcs_conf (h) (a) (G) (L): + ∀T1,U. ❪G,L❫ ⊢ T1 :[h,a] U → ∀T2. ❪G,L❫ ⊢ T1 ⬌*[h] T2 → + ∀U0. ❪G,L❫ ⊢ T2 :[h,a] U0 → ❪G,L❫ ⊢ T2 :[h,a] U. +#h #a #G #L #T1 #U #HT1 #T2 #HT12 #U0 #HT2 elim (cpcs_inv_cprs … HT12) -HT12 #T0 #HT10 #HT02 /3 width=5 by cprs_nta_trans, nta_cprs_conf/ qed-. (* Note: type preservation by valid r-equivalence *) -lemma nta_cpcs_conf_cnv (a) (h) (G) (L): - ∀T1,U. ⦃G,L⦄ ⊢ T1 :[a,h] U → - ∀T2. ⦃G,L⦄ ⊢ T1 ⬌*[h] T2 → ⦃G,L⦄ ⊢ T2 ![a,h] → ⦃G,L⦄ ⊢ T2 :[a,h] U. -#a #h #G #L #T1 #U #HT1 #T2 #HT12 #HT2 +lemma nta_cpcs_conf_cnv (h) (a) (G) (L): + ∀T1,U. ❪G,L❫ ⊢ T1 :[h,a] U → + ∀T2. ❪G,L❫ ⊢ T1 ⬌*[h] T2 → ❪G,L❫ ⊢ T2 ![h,a] → ❪G,L❫ ⊢ T2 :[h,a] U. +#h #a #G #L #T1 #U #HT1 #T2 #HT12 #HT2 elim (cnv_nta_sn … HT2) -HT2 #U0 #HT2 /2 width=3 by nta_cpcs_conf/ qed-.