X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fbasic_2%2Fmultiple%2Ffrees.ma;h=fe9292e9de49005aaa36479f85834c6d65573483;hb=c60524dec7ace912c416a90d6b926bee8553250b;hp=f7269bc09050092caa706acdf83e06b3d6789da7;hpb=f10cfe417b6b8ec1c7ac85c6ecf5fb1b3fdf37db;p=helm.git diff --git a/matita/matita/contribs/lambdadelta/basic_2/multiple/frees.ma b/matita/matita/contribs/lambdadelta/basic_2/multiple/frees.ma index f7269bc09..fe9292e9d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/multiple/frees.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/multiple/frees.ma @@ -20,75 +20,75 @@ include "basic_2/substitution/drop.ma". (* CONTEXT-SENSITIVE FREE VARIABLES *****************************************) inductive frees: relation4 ynat lenv term nat ≝ -| frees_eq: ∀L,U,d,i. (∀T. ⬆[i, 1] T ≡ U → ⊥) → frees d L U i -| frees_be: ∀I,L,K,U,W,d,i,j. d ≤ yinj j → j < i → +| frees_eq: ∀L,U,l,i. (∀T. ⬆[i, 1] T ≡ U → ⊥) → frees l L U i +| frees_be: ∀I,L,K,U,W,l,i,j. l ≤ yinj j → j < i → (∀T. ⬆[j, 1] T ≡ U → ⊥) → ⬇[j]L ≡ K.ⓑ{I}W → - frees 0 K W (i-j-1) → frees d L U i. + frees 0 K W (i-j-1) → frees l L U i. interpretation "context-sensitive free variables (term)" - 'FreeStar L i d U = (frees d L U i). + 'FreeStar L i l U = (frees l L U i). definition frees_trans: predicate (relation3 lenv term term) ≝ λR. ∀L,U1,U2,i. R L U1 U2 → L ⊢ i ϵ 𝐅*[0]⦃U2⦄ → L ⊢ i ϵ 𝐅*[0]⦃U1⦄. (* Basic inversion lemmas ***************************************************) -lemma frees_inv: ∀L,U,d,i. L ⊢ i ϵ 𝐅*[d]⦃U⦄ → +lemma frees_inv: ∀L,U,l,i. L ⊢ i ϵ 𝐅*[l]⦃U⦄ → (∀T. ⬆[i, 1] T ≡ U → ⊥) ∨ - ∃∃I,K,W,j. d ≤ yinj j & j < i & (∀T. ⬆[j, 1] T ≡ U → ⊥) & + ∃∃I,K,W,j. l ≤ yinj j & j < i & (∀T. ⬆[j, 1] T ≡ U → ⊥) & ⬇[j]L ≡ K.ⓑ{I}W & K ⊢ (i-j-1) ϵ 𝐅*[yinj 0]⦃W⦄. -#L #U #d #i * -L -U -d -i /4 width=9 by ex5_4_intro, or_intror, or_introl/ +#L #U #l #i * -L -U -l -i /4 width=9 by ex5_4_intro, or_intror, or_introl/ qed-. -lemma frees_inv_sort: ∀L,d,i,k. L ⊢ i ϵ 𝐅*[d]⦃⋆k⦄ → ⊥. -#L #d #i #k #H elim (frees_inv … H) -H [|*] /2 width=2 by/ +lemma frees_inv_sort: ∀L,l,i,k. L ⊢ i ϵ 𝐅*[l]⦃⋆k⦄ → ⊥. +#L #l #i #k #H elim (frees_inv … H) -H [|*] /2 width=2 by/ qed-. -lemma frees_inv_gref: ∀L,d,i,p. L ⊢ i ϵ 𝐅*[d]⦃§p⦄ → ⊥. -#L #d #i #p #H elim (frees_inv … H) -H [|*] /2 width=2 by/ +lemma frees_inv_gref: ∀L,l,i,p. L ⊢ i ϵ 𝐅*[l]⦃§p⦄ → ⊥. +#L #l #i #p #H elim (frees_inv … H) -H [|*] /2 width=2 by/ qed-. -lemma frees_inv_lref: ∀L,d,j,i. L ⊢ i ϵ 𝐅*[d]⦃#j⦄ → +lemma frees_inv_lref: ∀L,l,j,i. L ⊢ i ϵ 𝐅*[l]⦃#j⦄ → j = i ∨ - ∃∃I,K,W. d ≤ yinj j & j < i & ⬇[j] L ≡ K.ⓑ{I}W & K ⊢ (i-j-1) ϵ 𝐅*[yinj 0]⦃W⦄. -#L #d #x #i #H elim (frees_inv … H) -H + ∃∃I,K,W. l ≤ yinj j & j < i & ⬇[j] L ≡ K.ⓑ{I}W & K ⊢ (i-j-1) ϵ 𝐅*[yinj 0]⦃W⦄. +#L #l #x #i #H elim (frees_inv … H) -H [ /4 width=2 by nlift_inv_lref_be_SO, or_introl/ -| * #I #K #W #j #Hdj #Hji #Hnx #HLK #HW +| * #I #K #W #j #Hlj #Hji #Hnx #HLK #HW >(nlift_inv_lref_be_SO … Hnx) -x /3 width=5 by ex4_3_intro, or_intror/ ] qed-. -lemma frees_inv_lref_free: ∀L,d,j,i. L ⊢ i ϵ 𝐅*[d]⦃#j⦄ → |L| ≤ j → j = i. -#L #d #j #i #H #Hj elim (frees_inv_lref … H) -H // +lemma frees_inv_lref_free: ∀L,l,j,i. L ⊢ i ϵ 𝐅*[l]⦃#j⦄ → |L| ≤ j → j = i. +#L #l #j #i #H #Hj elim (frees_inv_lref … H) -H // * #I #K #W #_ #_ #HLK lapply (drop_fwd_length_lt2 … HLK) -I #H elim (lt_refl_false j) /2 width=3 by lt_to_le_to_lt/ qed-. -lemma frees_inv_lref_skip: ∀L,d,j,i. L ⊢ i ϵ 𝐅*[d]⦃#j⦄ → yinj j < d → j = i. -#L #d #j #i #H #Hjd elim (frees_inv_lref … H) -H // -* #I #K #W #Hdj elim (ylt_yle_false … Hdj) -Hdj // +lemma frees_inv_lref_skip: ∀L,l,j,i. L ⊢ i ϵ 𝐅*[l]⦃#j⦄ → yinj j < l → j = i. +#L #l #j #i #H #Hjl elim (frees_inv_lref … H) -H // +* #I #K #W #Hlj elim (ylt_yle_false … Hlj) -Hlj // qed-. -lemma frees_inv_lref_ge: ∀L,d,j,i. L ⊢ i ϵ 𝐅*[d]⦃#j⦄ → i ≤ j → j = i. -#L #d #j #i #H #Hij elim (frees_inv_lref … H) -H // -* #I #K #W #_ #Hji elim (lt_refl_false j) -I -L -K -W -d /2 width=3 by lt_to_le_to_lt/ +lemma frees_inv_lref_ge: ∀L,l,j,i. L ⊢ i ϵ 𝐅*[l]⦃#j⦄ → i ≤ j → j = i. +#L #l #j #i #H #Hij elim (frees_inv_lref … H) -H // +* #I #K #W #_ #Hji elim (lt_refl_false j) -I -L -K -W -l /2 width=3 by lt_to_le_to_lt/ qed-. -lemma frees_inv_lref_lt: ∀L,d,j,i.L ⊢ i ϵ 𝐅*[d]⦃#j⦄ → j < i → - ∃∃I,K,W. d ≤ yinj j & ⬇[j] L ≡ K.ⓑ{I}W & K ⊢ (i-j-1) ϵ 𝐅*[yinj 0]⦃W⦄. -#L #d #j #i #H #Hji elim (frees_inv_lref … H) -H +lemma frees_inv_lref_lt: ∀L,l,j,i.L ⊢ i ϵ 𝐅*[l]⦃#j⦄ → j < i → + ∃∃I,K,W. l ≤ yinj j & ⬇[j] L ≡ K.ⓑ{I}W & K ⊢ (i-j-1) ϵ 𝐅*[yinj 0]⦃W⦄. +#L #l #j #i #H #Hji elim (frees_inv_lref … H) -H [ #H elim (lt_refl_false j) // | * /2 width=5 by ex3_3_intro/ ] qed-. -lemma frees_inv_bind: ∀a,I,L,W,U,d,i. L ⊢ i ϵ 𝐅*[d]⦃ⓑ{a,I}W.U⦄ → - L ⊢ i ϵ 𝐅*[d]⦃W⦄ ∨ L.ⓑ{I}W ⊢ i+1 ϵ 𝐅*[⫯d]⦃U⦄ . -#a #J #L #V #U #d #i #H elim (frees_inv … H) -H +lemma frees_inv_bind: ∀a,I,L,W,U,l,i. L ⊢ i ϵ 𝐅*[l]⦃ⓑ{a,I}W.U⦄ → + L ⊢ i ϵ 𝐅*[l]⦃W⦄ ∨ L.ⓑ{I}W ⊢ i+1 ϵ 𝐅*[⫯l]⦃U⦄ . +#a #J #L #V #U #l #i #H elim (frees_inv … H) -H [ #HnX elim (nlift_inv_bind … HnX) -HnX /4 width=2 by frees_eq, or_intror, or_introl/ -| * #I #K #W #j #Hdj #Hji #HnX #HLK #HW elim (nlift_inv_bind … HnX) -HnX +| * #I #K #W #j #Hlj #Hji #HnX #HLK #HW elim (nlift_inv_bind … HnX) -HnX [ /4 width=9 by frees_be, or_introl/ | #HnT @or_intror @(frees_be … HnT) -HnT [4,5,6: /2 width=1 by drop_drop, yle_succ, lt_minus_to_plus/ @@ -99,58 +99,58 @@ lemma frees_inv_bind: ∀a,I,L,W,U,d,i. L ⊢ i ϵ 𝐅*[d]⦃ⓑ{a,I}W.U⦄ → ] qed-. -lemma frees_inv_flat: ∀I,L,W,U,d,i. L ⊢ i ϵ 𝐅*[d]⦃ⓕ{I}W.U⦄ → - L ⊢ i ϵ 𝐅*[d]⦃W⦄ ∨ L ⊢ i ϵ 𝐅*[d]⦃U⦄ . -#J #L #V #U #d #i #H elim (frees_inv … H) -H +lemma frees_inv_flat: ∀I,L,W,U,l,i. L ⊢ i ϵ 𝐅*[l]⦃ⓕ{I}W.U⦄ → + L ⊢ i ϵ 𝐅*[l]⦃W⦄ ∨ L ⊢ i ϵ 𝐅*[l]⦃U⦄ . +#J #L #V #U #l #i #H elim (frees_inv … H) -H [ #HnX elim (nlift_inv_flat … HnX) -HnX /4 width=2 by frees_eq, or_intror, or_introl/ -| * #I #K #W #j #Hdj #Hji #HnX #HLK #HW elim (nlift_inv_flat … HnX) -HnX +| * #I #K #W #j #Hlj #Hji #HnX #HLK #HW elim (nlift_inv_flat … HnX) -HnX /4 width=9 by frees_be, or_intror, or_introl/ ] qed-. (* Basic properties *********************************************************) -lemma frees_lref_eq: ∀L,d,i. L ⊢ i ϵ 𝐅*[d]⦃#i⦄. +lemma frees_lref_eq: ∀L,l,i. L ⊢ i ϵ 𝐅*[l]⦃#i⦄. /3 width=7 by frees_eq, lift_inv_lref2_be/ qed. -lemma frees_lref_be: ∀I,L,K,W,d,i,j. d ≤ yinj j → j < i → ⬇[j]L ≡ K.ⓑ{I}W → - K ⊢ i-j-1 ϵ 𝐅*[0]⦃W⦄ → L ⊢ i ϵ 𝐅*[d]⦃#j⦄. +lemma frees_lref_be: ∀I,L,K,W,l,i,j. l ≤ yinj j → j < i → ⬇[j]L ≡ K.ⓑ{I}W → + K ⊢ i-j-1 ϵ 𝐅*[0]⦃W⦄ → L ⊢ i ϵ 𝐅*[l]⦃#j⦄. /3 width=9 by frees_be, lift_inv_lref2_be/ qed. -lemma frees_bind_sn: ∀a,I,L,W,U,d,i. L ⊢ i ϵ 𝐅*[d]⦃W⦄ → - L ⊢ i ϵ 𝐅*[d]⦃ⓑ{a,I}W.U⦄. -#a #I #L #W #U #d #i #H elim (frees_inv … H) -H [|*] +lemma frees_bind_sn: ∀a,I,L,W,U,l,i. L ⊢ i ϵ 𝐅*[l]⦃W⦄ → + L ⊢ i ϵ 𝐅*[l]⦃ⓑ{a,I}W.U⦄. +#a #I #L #W #U #l #i #H elim (frees_inv … H) -H [|*] /4 width=9 by frees_be, frees_eq, nlift_bind_sn/ qed. -lemma frees_bind_dx: ∀a,I,L,W,U,d,i. L.ⓑ{I}W ⊢ i+1 ϵ 𝐅*[⫯d]⦃U⦄ → - L ⊢ i ϵ 𝐅*[d]⦃ⓑ{a,I}W.U⦄. -#a #J #L #V #U #d #i #H elim (frees_inv … H) -H +lemma frees_bind_dx: ∀a,I,L,W,U,l,i. L.ⓑ{I}W ⊢ i+1 ϵ 𝐅*[⫯l]⦃U⦄ → + L ⊢ i ϵ 𝐅*[l]⦃ⓑ{a,I}W.U⦄. +#a #J #L #V #U #l #i #H elim (frees_inv … H) -H [ /4 width=9 by frees_eq, nlift_bind_dx/ -| * #I #K #W #j #Hdj #Hji #HnU #HLK #HW - elim (yle_inv_succ1 … Hdj) -Hdj (plus_minus_m_m j 1) in HnU; //