X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fbasic_2%2Fstatic%2Flsuba_drops.ma;fp=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fbasic_2%2Fstatic%2Flsuba_drops.ma;h=29ff470b8da4544197155cca91c5c990b33cdab6;hb=d2e0a33c75842a10574ef904097803e02571536c;hp=f2440c801c8200131b64e22e8a035ce16d1a8ea7;hpb=3ef251397627da80aeea0cf08b053a4bc781ef88;p=helm.git diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/lsuba_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/static/lsuba_drops.ma index f2440c801..29ff470b8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/lsuba_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/lsuba_drops.ma @@ -12,54 +12,57 @@ (* *) (**************************************************************************) -include "basic_2/notation/relations/lrsubeqa_3.ma". -include "basic_2/static/lsubr.ma". -include "basic_2/static/aaa.ma". +include "basic_2/relocation/drops.ma". +include "basic_2/static/lsuba.ma". (* RESTRICTED REFINEMENT FOR ATOMIC ARITY ASSIGNMENT ************************) -(* Basic properties *********************************************************) +(* Properties with generic slicing for local environments *******************) -(* Note: the constant 0 cannot be generalized *) -lemma lsuba_drop_O1_conf: ∀G,L1,L2. G ⊢ L1 ⫃⁝ L2 → ∀K1,c,k. ⬇[c, 0, k] L1 ≡ K1 → - ∃∃K2. G ⊢ K1 ⫃⁝ K2 & ⬇[c, 0, k] L2 ≡ K2. +(* Note: the premise 𝐔⦃f⦄ cannot be removed *) +(* Basic_2A1: includes: lsuba_drop_O1_conf *) +lemma lsuba_drops_conf_isuni: ∀G,L1,L2. G ⊢ L1 ⫃⁝ L2 → + ∀K1,c,f. 𝐔⦃f⦄ → ⬇*[c, f] L1 ≡ K1 → + ∃∃K2. G ⊢ K1 ⫃⁝ K2 & ⬇*[c, f] L2 ≡ K2. #G #L1 #L2 #H elim H -L1 -L2 [ /2 width=3 by ex2_intro/ -| #I #L1 #L2 #V #_ #IHL12 #K1 #c #k #H - elim (drop_inv_O1_pair1 … H) -H * #Hm #HLK1 - [ destruct - elim (IHL12 L1 c 0) -IHL12 // #X #HL12 #H - <(drop_inv_O2 … H) in HL12; -H /3 width=3 by lsuba_pair, drop_pair, ex2_intro/ - | elim (IHL12 … HLK1) -L1 /3 width=3 by drop_drop_lt, ex2_intro/ +| #I #L1 #L2 #V #HL12 #IH #K1 #c #f #Hf #H + elim (drops_inv_pair1_isuni … Hf H) -Hf -H * + [ #Hf #H destruct -IH + /3 width=3 by lsuba_pair, drops_refl, ex2_intro/ + | #g #Hg #HLK1 #H destruct -HL12 + elim (IH … Hg HLK1) -L1 -Hg /3 width=3 by drops_drop, ex2_intro/ ] -| #L1 #L2 #W #V #A #HV #HW #_ #IHL12 #K1 #c #k #H - elim (drop_inv_O1_pair1 … H) -H * #Hm #HLK1 - [ destruct - elim (IHL12 L1 c 0) -IHL12 // #X #HL12 #H - <(drop_inv_O2 … H) in HL12; -H /3 width=3 by lsuba_beta, drop_pair, ex2_intro/ - | elim (IHL12 … HLK1) -L1 /3 width=3 by drop_drop_lt, ex2_intro/ +| #L1 #L2 #W #V #A #HV #HW #HL12 #IH #K1 #c #f #Hf #H + elim (drops_inv_pair1_isuni … Hf H) -Hf -H * + [ #Hf #H destruct -IH + /3 width=3 by drops_refl, lsuba_beta, ex2_intro/ + | #g #Hg #HLK1 #H destruct -HL12 + elim (IH … Hg HLK1) -L1 -Hg /3 width=3 by drops_drop, ex2_intro/ ] ] qed-. -(* Note: the constant 0 cannot be generalized *) -lemma lsuba_drop_O1_trans: ∀G,L1,L2. G ⊢ L1 ⫃⁝ L2 → ∀K2,c,k. ⬇[c, 0, k] L2 ≡ K2 → - ∃∃K1. G ⊢ K1 ⫃⁝ K2 & ⬇[c, 0, k] L1 ≡ K1. +(* Note: the premise 𝐔⦃f⦄ cannot be removed *) +(* Basic_2A1: includes: lsuba_drop_O1_trans *) +lemma lsuba_drop_O1_trans: ∀G,L1,L2. G ⊢ L1 ⫃⁝ L2 → + ∀K2,c,f. 𝐔⦃f⦄ → ⬇*[c, f] L2 ≡ K2 → + ∃∃K1. G ⊢ K1 ⫃⁝ K2 & ⬇*[c, f] L1 ≡ K1. #G #L1 #L2 #H elim H -L1 -L2 [ /2 width=3 by ex2_intro/ -| #I #L1 #L2 #V #_ #IHL12 #K2 #c #k #H - elim (drop_inv_O1_pair1 … H) -H * #Hm #HLK2 - [ destruct - elim (IHL12 L2 c 0) -IHL12 // #X #HL12 #H - <(drop_inv_O2 … H) in HL12; -H /3 width=3 by lsuba_pair, drop_pair, ex2_intro/ - | elim (IHL12 … HLK2) -L2 /3 width=3 by drop_drop_lt, ex2_intro/ +| #I #L1 #L2 #V #HL12 #IH #K2 #c #f #Hf #H + elim (drops_inv_pair1_isuni … Hf H) -Hf -H * + [ #Hf #H destruct -IH + /3 width=3 by lsuba_pair, drops_refl, ex2_intro/ + | #g #Hg #HLK2 #H destruct -HL12 + elim (IH … Hg HLK2) -L2 -Hg /3 width=3 by drops_drop, ex2_intro/ ] -| #L1 #L2 #W #V #A #HV #HW #_ #IHL12 #K2 #c #k #H - elim (drop_inv_O1_pair1 … H) -H * #Hm #HLK2 - [ destruct - elim (IHL12 L2 c 0) -IHL12 // #X #HL12 #H - <(drop_inv_O2 … H) in HL12; -H /3 width=3 by lsuba_beta, drop_pair, ex2_intro/ - | elim (IHL12 … HLK2) -L2 /3 width=3 by drop_drop_lt, ex2_intro/ +| #L1 #L2 #W #V #A #HV #HW #HL12 #IH #K2 #c #f #Hf #H + elim (drops_inv_pair1_isuni … Hf H) -Hf -H * + [ #Hf #H destruct -IH + /3 width=3 by drops_refl, lsuba_beta, ex2_intro/ + | #g #Hg #HLK2 #H destruct -HL12 + elim (IH … Hg HLK2) -L2 -Hg /3 width=3 by drops_drop, ex2_intro/ ] ] qed-.