X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fbasic_2%2Fstatic%2Fssta_lift.ma;h=94aec3b15d1f3a09bdf6bf7264ae7ca2a1b432c1;hb=fdb2c62b58006b82c015ba70b494d50c7860e28f;hp=cf969115db06b1166f79e4dfbe69830e94f4ebe7;hpb=4aa431513ffa0ce0accf81e6e9ea4b9314d468e3;p=helm.git diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/ssta_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/static/ssta_lift.ma index cf969115d..94aec3b15 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/ssta_lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/ssta_lift.ma @@ -12,111 +12,131 @@ (* *) (**************************************************************************) -include "basic_2/relocation/ldrop_ldrop.ma". +include "basic_2/static/da_lift.ma". include "basic_2/static/ssta.ma". -(* STRATIFIED STATIC TYPE ASSIGNMENT ON TERMS *******************************) +(* STRATIFIED STATIC TYPE ASSIGNMENT FOR TERMS ******************************) (* Properties on relocation *************************************************) -(* Basic_1: was just: sty0_lift *) -lemma ssta_lift: ∀h,g,G,L1,T1,U1,l. ⦃G, L1⦄ ⊢ T1 •[h, g] ⦃l, U1⦄ → - ∀L2,d,e. ⇩[d, e] L2 ≡ L1 → ∀T2. ⇧[d, e] T1 ≡ T2 → - ∀U2. ⇧[d, e] U1 ≡ U2 → ⦃G, L2⦄ ⊢ T2 •[h, g] ⦃l, U2⦄. -#h #g #G #L1 #T1 #U1 #l #H elim H -G -L1 -T1 -U1 -l -[ #G #L1 #k #l #Hkl #L2 #d #e #HL21 #X1 #H1 #X2 #H2 +lemma ssta_lift: ∀h,g,G. l_liftable (ssta h g G). +#h #g #G #L1 #T1 #U1 #H elim H -G -L1 -T1 -U1 +[ #G #L1 #k #L2 #d #e #HL21 #X1 #H1 #X2 #H2 >(lift_inv_sort1 … H1) -X1 - >(lift_inv_sort1 … H2) -X2 /2 width=1/ -| #G #L1 #K1 #V1 #W1 #W #i #l #HLK1 #_ #HW1 #IHVW1 #L2 #d #e #HL21 #X #H #U2 #HWU2 + >(lift_inv_sort1 … H2) -X2 // +| #G #L1 #K1 #V1 #U1 #W1 #i #HLK1 #_ #HWU1 #IHVW1 #L2 #d #e #HL21 #X #H #U2 #HU12 elim (lift_inv_lref1 … H) * #Hid #H destruct - [ elim (lift_trans_ge … HW1 … HWU2 ?) -W // #W2 #HW12 #HWU2 - elim (ldrop_trans_le … HL21 … HLK1 ?) -L1 /2 width=2/ #X #HLK2 #H - elim (ldrop_inv_skip2 … H ?) -H /2 width=1/ -Hid #K2 #V2 #HK21 #HV12 #H destruct + [ elim (lift_trans_ge … HWU1 … HU12) -U1 // #W2 #HW12 #HWU2 + elim (ldrop_trans_le … HL21 … HLK1) -L1 /2 width=2/ #X #HLK2 #H + elim (ldrop_inv_skip2 … H) -H /2 width=1/ -Hid #K2 #V2 #HK21 #HV12 #H destruct /3 width=8/ - | lapply (lift_trans_be … HW1 … HWU2 ? ?) -W // /2 width=1/ #HW1U2 + | lapply (lift_trans_be … HWU1 … HU12 ? ?) -U1 // /2 width=1/ #HW1U2 lapply (ldrop_trans_ge … HL21 … HLK1 ?) -L1 // -Hid /3 width=8/ ] -| #G #L1 #K1 #W1 #V1 #W #i #l #HLK1 #_ #HW1 #IHWV1 #L2 #d #e #HL21 #X #H #U2 #HWU2 +| #G #L1 #K1 #W1 #U1 #l #i #HLK1 #HW1l #HWU1 #L2 #d #e #HL21 #X #H #U2 #HU12 elim (lift_inv_lref1 … H) * #Hid #H destruct - [ elim (lift_trans_ge … HW1 … HWU2 ?) -W // (lift_inv_sort2 … H) -X /3 width=3/ -| #G #L2 #K2 #V2 #W2 #W #i #l #HLK2 #HVW2 #HW2 #IHVW2 #L1 #d #e #HL21 #X #H +(* Inversion lemmas on relocation *******************************************) + +lemma ssta_inv_lift1: ∀h,g,G. l_deliftable_sn (ssta h g G). +#h #g #G #L2 #T2 #U2 #H elim H -G -L2 -T2 -U2 +[ #G #L2 #k #L1 #d #e #_ #X #H + >(lift_inv_sort2 … H) -X /2 width=3/ +| #G #L2 #K2 #V2 #U2 #W2 #i #HLK2 #HVW2 #HWU2 #IHVW2 #L1 #d #e #HL21 #X #H elim (lift_inv_lref2 … H) * #Hid #H destruct [ -HVW2 | -IHVW2 ] - [ elim (ldrop_conf_lt … HL21 … HLK2 ?) -L2 // #K1 #V1 #HLK1 #HK21 #HV12 - elim (IHVW2 … HK21 … HV12) -K2 -V2 #W1 #HVW1 #HW12 - elim (lift_trans_le … HW12 … HW2 ?) -W2 // >minus_plus minus_plus minus_minus_m_m /2 width=1/ /3 width=6/ + elim (lift_split … HWU2 d (i-e+1)) -HWU2 // [3: /2 width=1/ ] + [ #W0 #HW20 minus_minus_m_m /2 width=1/ /3 width=8/ | minus_plus minus_plus minus_minus_m_m /2 width=1/ /3 width=6/ + elim (lift_split … HWU2 d (i-e+1)) -HWU2 // [3: /2 width=1/ ] + [ #W0 #HW20 minus_minus_m_m /2 width=1/ /3 width=8/ |