X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fbasic_2%2Fmultiple%2Fdrops.ma;h=bb357cd21450c4d8aed93469faa6cf8a42be0024;hb=33f8507cadd3b36dc9afa227d8968dda66fe2034;hp=1c0c1888888cc55dd4e62f0650f7a73d5e69ff1c;hpb=fca909e9e53de73771e1b47e94434ae8f747d7fb;p=helm.git diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/drops.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/drops.ma index 1c0c18888..bb357cd21 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/drops.ma @@ -16,12 +16,12 @@ include "basic_2/notation/relations/rdropstar_3.ma". include "basic_2/notation/relations/rdropstar_4.ma". include "basic_2/substitution/drop.ma". include "basic_2/multiple/mr2_minus.ma". -include "basic_2/multiple/lifts.ma". +include "basic_2/multiple/lifts_vector.ma". (* ITERATED LOCAL ENVIRONMENT SLICING ***************************************) inductive drops (s:bool): list2 nat nat → relation lenv ≝ -| drops_nil : ∀L. drops s (⟠) L L +| 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 . @@ -33,15 +33,28 @@ interpretation "iterated slicing (local environment) general" 'RDropStar des T1 T2 = (drops true des T1 T2). *) +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. + +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. + +definition l_liftables1_all: relation2 lenv term → predicate bool ≝ + λ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 → @@ -93,4 +106,17 @@ lemma drops_skip: ∀L1,L2,s,des. ⇩*[s, des] L1 ≡ L2 → ∀V1,V2. ⇧*[des] ]. qed. +lemma l1_liftable_liftables: ∀R,s. l_liftable1 R s → l_liftables1 R s. +#R #s #HR #L #K #des #H elim H -L -K -des +[ #L #T #U #H #HT <(lifts_inv_nil … H) -H // +| #L1 #L #L2 #des #d #e #_ #HL2 #IHL #T2 #T1 #H #HLT2 + elim (lifts_inv_cons … H) -H /3 width=10 by/ +] +qed. + +lemma l1_liftables_liftables_all: ∀R,s. l_liftables1 R s → l_liftables1_all R s. +#R #s #HR #L #K #des #HLK #Ts #Us #H elim H -Ts -Us normalize // +#Ts #Us #T #U #HTU #_ #IHTUs * /3 width=7 by conj/ +qed. + (* Basic_1: removed theorems 1: drop1_getl_trans *)