X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambda_delta%2Fbasic_2%2Fsubstitution%2Fldrop_sfr.ma;h=78a15d70dcdc6731047d8e8a7f4cf1aae80bb9b1;hb=fec1a061eeca5e7e05b4f0c3e299983b163569c3;hp=e9befe700f343d46404040719aaac433826718fb;hpb=78d4844bcccb3deb58a3179151c3045298782b18;p=helm.git diff --git a/matita/matita/contribs/lambda_delta/basic_2/substitution/ldrop_sfr.ma b/matita/matita/contribs/lambda_delta/basic_2/substitution/ldrop_sfr.ma index e9befe700..78a15d70d 100644 --- a/matita/matita/contribs/lambda_delta/basic_2/substitution/ldrop_sfr.ma +++ b/matita/matita/contribs/lambda_delta/basic_2/substitution/ldrop_sfr.ma @@ -13,27 +13,14 @@ (**************************************************************************) include "basic_2/substitution/lsubs_sfr.ma". -include "basic_2/substitution/ldrop.ma". +include "basic_2/substitution/ldrop_ldrop.ma". (* DROPPING *****************************************************************) -(* Properties about local env. full refinement for substitution *************) - -lemma sfr_ldrop: ∀L,d,e. - (∀I,K,V,i. d ≤ i → i < d + e → ⇩[0, i] L ≡ K. ⓑ{I}V → I = Abbr) → - ≼ [d, e] L. -#L elim L -L // -#L #I #V #IHL #d @(nat_ind_plus … d) -d -[ #e @(nat_ind_plus … e) -e // - #e #_ #HH - >(HH I L V 0 ? ? ?) // /5 width=6/ -| /5 width=6/ -] -qed. - (* Inversion lemmas about local env. full refinement for substitution *******) -lemma sfr_inv_ldrop: ∀I,L,K,V,i. ⇩[0, i] L ≡ K. ⓑ{I}V → ∀d,e. ≼ [d, e] L → +(* Note: ldrop_ldrop not needed *) +lemma sfr_inv_ldrop: ∀I,L,K,V,i. ⇩[0, i] L ≡ K. ⓑ{I}V → ∀d,e. ≽ [d, e] L → d ≤ i → i < d + e → I = Abbr. #I #L elim L -L [ #K #V #i #H @@ -43,7 +30,7 @@ lemma sfr_inv_ldrop: ∀I,L,K,V,i. ⇩[0, i] L ≡ K. ⓑ{I}V → ∀d,e. ≼ [d [ -IHL #H1 #H2 #d #e #HL #Hdi #Hide destruct lapply (le_n_O_to_eq … Hdi) -Hdi #H destruct lapply (HL … (L.ⓓW) ?) -HL /2 width=1/ #H - elim (lsubs_inv_abbr1 … H ?) -H // -Hide #K #_ #H destruct // + elim (lsubs_inv_abbr2 … H ?) -H // -Hide #K #_ #H destruct // | #Hi #HLK #d @(nat_ind_plus … d) -d [ #e #H #_ #Hide elim (sfr_inv_bind … H ?) -H [2: /2 width=2/ ] #HL #H destruct @@ -55,3 +42,51 @@ lemma sfr_inv_ldrop: ∀I,L,K,V,i. ⇩[0, i] L ≡ K. ⓑ{I}V → ∀d,e. ≼ [d ] ] qed-. + +(* Properties about local env. full refinement for substitution *************) + +(* Note: ldrop_ldrop not needed *) +lemma sfr_ldrop: ∀L,d,e. + (∀I,K,V,i. d ≤ i → i < d + e → ⇩[0, i] L ≡ K. ⓑ{I}V → I = Abbr) → + ≽ [d, e] L. +#L elim L -L // +#L #I #V #IHL #d @(nat_ind_plus … d) -d +[ #e @(nat_ind_plus … e) -e // + #e #_ #HH + >(HH I L V 0 ? ? ?) // /5 width=6/ +| /5 width=6/ +] +qed. + +lemma sfr_ldrop_trans_le: ∀L1,L2,d,e. ⇩[d, e] L1 ≡ L2 → ∀dd,ee. ≽ [dd, ee] L1 → + dd + ee ≤ d → ≽ [dd, ee] L2. +#L1 #L2 #d #e #HL12 #dd #ee #HL1 #Hddee +@sfr_ldrop #I #K2 #V2 #i #Hddi #Hiddee #HLK2 +lapply (lt_to_le_to_lt … Hiddee Hddee) -Hddee #Hid +elim (ldrop_trans_le … HL12 … HLK2 ?) -L2 /2 width=2/ #X #HLK1 #H +elim (ldrop_inv_skip2 … H ?) -H /2 width=1/ -Hid #K1 #V1 #HK12 #HV21 #H destruct +@(sfr_inv_ldrop … HLK1 … HL1) -L1 -K1 -V1 // +qed. + +lemma sfr_ldrop_trans_be_up: ∀L1,L2,d,e. ⇩[d, e] L1 ≡ L2 → + ∀dd,ee. ≽ [dd, ee] L1 → + dd ≤ d + e → d + e ≤ dd + ee → + ≽ [d, dd + ee - d - e] L2. +#L1 #L2 #d #e #HL12 #dd #ee #HL1 #Hdde #Hddee +@sfr_ldrop #I #K2 #V2 #i #Hdi #Hiddee #HLK2 +lapply (transitive_le ? ? (i+e)… Hdde ?) -Hdde /2 width=1/ #Hddie +>commutative_plus in Hiddee; >minus_minus_comm commutative_plus // -Hddie /2 width=1/ +qed. + +lemma sfr_ldrop_trans_ge: ∀L1,L2,d,e. ⇩[d, e] L1 ≡ L2 → ∀dd,ee. ≽ [dd, ee] L1 → + d + e ≤ dd → ≽ [dd - e, ee] L2. +#L1 #L2 #d #e #HL12 #dd #ee #HL1 #Hddee +@sfr_ldrop #I #K2 #V2 #i #Hddi #Hiddee #HLK2 +elim (le_inv_plus_l … Hddee) -Hddee #Hdde #Hedd +>plus_minus in Hiddee; // #Hiddee +lapply (transitive_le … Hdde Hddi) -Hdde #Hid +lapply (ldrop_trans_ge … HL12 … HLK2 ?) -L2 // -Hid #HL1K2 +@(sfr_inv_ldrop … HL1K2 … HL1) -L1 >commutative_plus /2 width=1/ +qed.