From: Ferruccio Guidi Date: Sat, 13 Jan 2018 21:24:16 +0000 (+0100) Subject: update in ground_2 and basic_2 X-Git-Tag: make_still_working~371 X-Git-Url: http://matita.cs.unibo.it/gitweb/?p=helm.git;a=commitdiff_plain;h=b1868c5a258a6bf7fc983d63f3c417f00185e7b6 update in ground_2 and basic_2 - new version of lveq completed: allows to prove all six main properties of fle, but lfxs_fle fails :( - voids parked for now - more ignores for the web site --- diff --git a/.gitignore b/.gitignore index 29933ad99..7ab34bb92 100644 --- a/.gitignore +++ b/.gitignore @@ -45,14 +45,18 @@ helm/www/lambdadelta/etc/BTM helm/www/lambdadelta/etc/lambdadelta helm/www/lambdadelta/etc/coq-contribs helm/www/lambdadelta/xslt/apps_2_src.xsl +helm/www/lambdadelta/xslt/apps_2_sum.xsl helm/www/lambdadelta/xslt/basic_2_blk.xsl helm/www/lambdadelta/xslt/basic_2_src.xsl +helm/www/lambdadelta/xslt/basic_2_sum.xsl helm/www/lambdadelta/xslt/ground_2_src.xsl +helm/www/lambdadelta/xslt/ground_2_sum.xsl helm/www/lambdadelta/xslt/basic_1_blk.xsl helm/www/lambdadelta/xslt/basic_1_src.xsl helm/www/lambdadelta/xslt/basic_1_sum.xsl helm/www/lambdadelta/xslt/ground_1_src.xsl helm/www/lambdadelta/xslt/ground_1_sum.xsl +helm/www/lambdadelta/xslt/alpha_1_sum.xsl helm/www/lambdadelta/xslt/documentation_1.xsl helm/www/lambdadelta/xslt/documentation_2.xsl helm/www/lambdadelta/xslt/documentation_3.xsl @@ -68,3 +72,5 @@ matita/matita/contribs/lambdadelta/apps_2/notation matita/matita/contribs/lambdadelta/apps_2/models matita/matita/contribs/lambdadelta/ground_2/xoa/xoa2.ma matita/matita/contribs/lambdadelta/ground_2/notation/xoa/notation2.ma +matita/matita/contribs/lambdadelta/*/*_probe.txt +matita/matita/contribs/lambdadelta/*/web/*_sum.tbl diff --git a/matita/matita/contribs/lambdadelta/basic_2/etc/lveq.etc b/matita/matita/contribs/lambdadelta/basic_2/etc/lveq.etc new file mode 100644 index 000000000..e355449ef --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/etc/lveq.etc @@ -0,0 +1,36 @@ +fact lveq_inv_pair_bind_aux: ∀L1,L2,n1,n2. L1 ≋ ⓧ*[n1, n2] L2 → + ∀I1,I2,K1,K2,V1. K1.ⓑ{I1}V1 = L1 → K2.ⓘ{I2} = L2 → + ∨∨ ∃∃m. K1 ≋ ⓧ*[m, m] K2 & 0 = n1 & 0 = n2 + | ∃∃m1,m2. K1 ≋ ⓧ*[m1, m2] K2 & + BUnit Void = I2 & ⫯m2 = n2. +#L1 #L2 #n1 #n2 #H elim H -L1 -L2 -n1 -n2 +[ #J1 #J2 #L1 #L2 #V1 #H1 #H2 destruct +|2,3: #I1 #I2 #K1 #K2 #V #n #HK #_ #J1 #J2 #L1 #L2 #V1 #H1 #H2 destruct /3 width=2 by or_introl, ex3_intro/ +|4,5: #K1 #K2 #n1 #n2 #HK #IH #J1 #J2 #L1 #L2 #V1 #H1 #H2 destruct + /3 width=4 by _/ +] +qed-. + +lemma voids_inv_pair_bind: ∀I1,I2,K1,K2,V1,n1,n2. ⓧ*[n1]K1.ⓑ{I1}V1 ≋ ⓧ*[n2]K2.ⓘ{I2} → + ∨∨ ∃∃n. ⓧ*[n]K1 ≋ ⓧ*[n]K2 & 0 = n1 & 0 = n2 + | ∃∃m2. ⓧ*[n1]K1.ⓑ{I1}V1 ≋ ⓧ*[m2]K2 & + BUnit Void = I2 & ⫯m2 = n2. +/2 width=5 by voids_inv_pair_bind_aux/ qed-. + +fact voids_inv_bind_pair_aux: ∀L1,L2,n1,n2. ⓧ*[n1]L1 ≋ ⓧ*[n2]L2 → + ∀I1,I2,K1,K2,V2. K1.ⓘ{I1} = L1 → K2.ⓑ{I2}V2 = L2 → + ∨∨ ∃∃n. ⓧ*[n]K1 ≋ ⓧ*[n]K2 & 0 = n1 & 0 = n2 + | ∃∃m1. ⓧ*[m1]K1 ≋ ⓧ*[n2]K2.ⓑ{I2}V2 & + BUnit Void = I1 & ⫯m1 = n1. +#L1 #L2 #n1 #n2 * -L1 -L2 -n1 -n2 +[ #J1 #J2 #L1 #L2 #V1 #H1 #H2 destruct +|2,3: #I1 #I2 #K1 #K2 #V #n #HK #J1 #J2 #L1 #L2 #V2 #H1 #H2 destruct /3 width=2 by or_introl, ex3_intro/ +|4,5: #K1 #K2 #n1 #n2 #HK #J1 #J2 #L1 #L2 #V2 #H1 #H2 destruct /3 width=3 by or_intror, ex3_intro/ +] +qed-. + +lemma voids_inv_bind_pair: ∀I1,I2,K1,K2,V2,n1,n2. ⓧ*[n1]K1.ⓘ{I1} ≋ ⓧ*[n2]K2.ⓑ{I2}V2 → + ∨∨ ∃∃n. ⓧ*[n]K1 ≋ ⓧ*[n]K2 & 0 = n1 & 0 = n2 + | ∃∃m1. ⓧ*[m1]K1 ≋ ⓧ*[n2]K2.ⓑ{I2}V2 & + BUnit Void = I1 & ⫯m1 = n1. +/2 width=5 by voids_inv_bind_pair_aux/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/etc/voids/lveq_voids.etc b/matita/matita/contribs/lambdadelta/basic_2/etc/voids/lveq_voids.etc new file mode 100644 index 000000000..38b2076a6 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/etc/voids/lveq_voids.etc @@ -0,0 +1,99 @@ +(**************************************************************************) +(* ___ *) +(* ||M|| *) +(* ||A|| A project by Andrea Asperti *) +(* ||T|| *) +(* ||I|| Developers: *) +(* ||T|| The HELM team. *) +(* ||A|| http://helm.cs.unibo.it *) +(* \ / *) +(* \ / This file is distributed under the terms of the *) +(* v GNU General Public License Version 2 *) +(* *) +(**************************************************************************) + +(* requires 3 6 *) +include "ground_2/xoa/xoa2.ma". +include "basic_2/syntax/voids_length.ma". +include "basic_2/syntax/lveq.ma". + +(* EQUIVALENCE FOR LOCAL ENVIRONMENTS UP TO EXCLUSION BINDERS ***************) + +(* Inversion lemmas with extension with exclusion binders *******************) + +lemma lveq_inv_voids: ∀L1,L2,n1,n2. L1 ≋ⓧ*[n1, n2] L2 → + ∨∨ ∧∧ ⓧ*[n1]⋆ = L1 & ⓧ*[n2]⋆ = L2 + | ∃∃I1,I2,K1,K2,V1,n. K1 ≋ⓧ*[n, n] K2 & ⓧ*[n1](K1.ⓑ{I1}V1) = L1 & ⓧ*[n2](K2.ⓘ{I2}) = L2 + | ∃∃I1,I2,K1,K2,V2,n. K1 ≋ⓧ*[n, n] K2 & ⓧ*[n1](K1.ⓘ{I1}) = L1 & ⓧ*[n2](K2.ⓑ{I2}V2) = L2. +#L1 #L2 #n1 #n2 #H elim H -L1 -L2 -n1 -n2 +[ /3 width=1 by conj, or3_intro0/ +|2,3: /3 width=9 by or3_intro1, or3_intro2, ex3_6_intro/ +|4,5: #K1 #K2 #n1 #n2 #HK12 * * + /3 width=9 by conj, or3_intro0, or3_intro1, or3_intro2, ex3_6_intro/ +] +qed-. + +(* Eliminators with extension with exclusion binders ************************) + +lemma lveq_ind_voids: ∀R:bi_relation lenv nat. ( + ∀n1,n2. R (ⓧ*[n1]⋆) n1 (ⓧ*[n2]⋆) n2 + ) → ( + ∀I1,I2,K1,K2,V1,n1,n2,n. K1 ≋ⓧ*[n, n] K2 → R K1 n K2 n → + R (ⓧ*[n1]K1.ⓑ{I1}V1) n1 (ⓧ*[n2]K2.ⓘ{I2}) n2 + ) → ( + ∀I1,I2,K1,K2,V2,n1,n2,n. K1 ≋ⓧ*[n, n] K2 → R K1 n K2 n → + R (ⓧ*[n1]K1.ⓘ{I1}) n1 (ⓧ*[n2]K2.ⓑ{I2}V2) n2 + ) → + ∀L1,L2,n1,n2. L1 ≋ⓧ*[n1, n2] L2 → R L1 n1 L2 n2. +#R #IH1 #IH2 #IH3 #L1 #L2 @(f2_ind ?? length2 ?? L1 L2) -L1 -L2 +#m #IH #L1 #L2 #Hm #n1 #n2 #H destruct +elim (lveq_inv_voids … H) -H * // +#I1 #I2 #K1 #K2 #V #n #HK #H1 #H2 destruct +/4 width=3 by lt_plus/ +qed-. + +(* + +(* Properties with extension with exclusion binders *************************) + +lemma lveq_voids_sn: ∀L1,L2,n1,n2. L1 ≋ⓧ*[n1, n2] L2 → + ∀m1. ⓧ*[m1]L1 ≋ⓧ*[m1+n1, n2] L2. +#L1 #L2 #n1 #n2 #HL12 #m1 elim m1 -m1 /2 width=1 by lveq_void_sn/ +qed-. + +lemma lveq_voids_dx: ∀L1,L2,n1,n2. L1 ≋ⓧ*[n1, n2] L2 → + ∀m2. L1 ≋ⓧ*[n1, m2+n2] ⓧ*[m2]L2. +#L1 #L2 #n1 #n2 #HL12 #m2 elim m2 -m2 /2 width=1 by lveq_void_dx/ +qed-. + +lemma lveq_voids: ∀L1,L2,n1,n2. L1 ≋ⓧ*[n1, n2] L2 → + ∀m1,m2. ⓧ*[m1]L1 ≋ⓧ*[m1+n1, m2+n2] ⓧ*[m2]L2. +/3 width=1 by lveq_voids_dx, lveq_voids_sn/ qed-. + +lemma lveq_voids_zero: ∀L1,L2. L1 ≋ⓧ*[0, 0] L2 → + ∀n1,n2. ⓧ*[n1]L1 ≋ⓧ*[n1, n2] ⓧ*[n2]L2. +#L1 #L2 #HL12 #n1 #n2 +>(plus_n_O … n1) in ⊢ (?%???); >(plus_n_O … n2) in ⊢ (???%?); +/2 width=1 by lveq_voids/ qed-. + +(* Inversion lemmas with extension with exclusion binders *******************) + +lemma lveq_inv_voids_sn: ∀L1,L2,n1,n2,m1. ⓧ*[m1]L1 ≋ⓧ*[m1+n1, n2] L2 → + L1 ≋ⓧ*[n1, n2] L2. +#L1 #L2 #n1 #n2 #m1 elim m1 -m1 /3 width=1 by lveq_inv_void_sn/ +qed-. + +lemma lveq_inv_voids_dx: ∀L1,L2,n1,n2,m2. L1 ≋ⓧ*[n1, m2+n2] ⓧ*[m2]L2 → + L1 ≋ⓧ*[n1, n2] L2. +#L1 #L2 #n1 #n2 #m2 elim m2 -m2 /3 width=1 by lveq_inv_void_dx/ +qed-. + +lemma lveq_inv_voids: ∀L1,L2,n1,n2,m1,m2. ⓧ*[m1]L1 ≋ⓧ*[m1+n1, m2+n2] ⓧ*[m2]L2 → + L1 ≋ⓧ*[n1, n2] L2. +/3 width=3 by lveq_inv_voids_dx, lveq_inv_voids_sn/ qed-. + +lemma lveq_inv_voids_zero: ∀L1,L2,n1,n2. ⓧ*[n1]L1 ≋ⓧ*[n1, n2] ⓧ*[n2]L2 → + L1 ≋ⓧ*[0, 0] L2. +/2 width=3 by lveq_inv_voids/ qed-. + +*) diff --git a/matita/matita/contribs/lambdadelta/basic_2/etc/voids/voids.etc b/matita/matita/contribs/lambdadelta/basic_2/etc/voids/voids.etc new file mode 100644 index 000000000..854737b4a --- /dev/null +++ b/matita/matita/contribs/lambdadelta/basic_2/etc/voids/voids.etc @@ -0,0 +1,91 @@ +(**************************************************************************) +(* ___ *) +(* ||M|| *) +(* ||A|| A project by Andrea Asperti *) +(* ||T|| *) +(* ||I|| Developers: *) +(* ||T|| The HELM team. *) +(* ||A|| http://helm.cs.unibo.it *) +(* \ / *) +(* \ / This file is distributed under the terms of the *) +(* v GNU General Public License Version 2 *) +(* *) +(**************************************************************************) + +include "basic_2/notation/functions/voidstar_2.ma". +include "basic_2/syntax/lenv.ma". + +(* EXTENSION OF A LOCAL ENVIRONMENT WITH EXCLUSION BINDERS ******************) + +rec definition voids (L:lenv) (n:nat) on n: lenv ≝ match n with +[ O ⇒ L | S m ⇒ (voids L m).ⓧ ]. + +interpretation "extension with exclusion binders (local environment)" + 'VoidStar n L = (voids L n). + +(* Basic properties *********************************************************) + +lemma voids_zero: ∀L. L = ⓧ*[0]L. +// qed. + +lemma voids_succ: ∀L,n. (ⓧ*[n]L).ⓧ = ⓧ*[⫯n]L. +// qed. + +(* Advanced properties ******************************************************) + +lemma voids_next: ∀n,L. ⓧ*[n](L.ⓧ) = ⓧ*[⫯n]L. +#n elim n -n // +qed. + +(* Basic inversion lemmas ***************************************************) + +lemma voids_atom_inv: ∀K,n. ⓧ*[n]K = ⋆ → ∧∧ ⋆ = K & 0 = n. +#K * /2 width=1 by conj/ +#n minus_S_S #H + elim (destruct_lbind_lbind_aux … H) -H #HK #_ (**) (* destruct lemma needed *) + elim (IH … HK) -IH -HK #H #Hn destruct /3 width=1 by conj, le_S_S/ + ] +] +qed-. + +lemma voids_inv_pair_sn: ∀I,V,n1,K1,K2,n2. ⓧ*[n1]K1.ⓑ{I}V = ⓧ*[n2]K2 → + ∧∧ ⓧ*[n1-n2]K1.ⓑ{I}V = K2 & n2 ≤ n1. +#I #V #n1 elim n1 -n1 +[ #K1 #K2 minus_S_S #H + elim (destruct_lbind_lbind_aux … H) -H #HK #_ (**) (* destruct lemma needed *) + elim (IH … HK) -IH -HK #H #Hn destruct /3 width=1 by conj, le_S_S/ + ] +] +qed-. + +(* Main inversion properties ************************************************) + +theorem voids_inj: ∀n. injective … (λL. ⓧ*[n]L). +#n elim n -n // +#n #IH #L1 #L2 +length_bind (tl_push_rew f) in H; #Hf -/6 width=6 by frees_lifts_SO, frees_bind, drops_refl, drops_drop, ex3_2_intro/ +elim (sor_isfin_ex f1 f2) /3 width=3 by frees_fwd_isfin, isfin_tl/ #f #Hf #_ +lapply (sor_inv_sle_dx … Hf) #Hf0 +elim (lveq_refl L) #n #HL +/6 width=8 by frees_lifts_SO, frees_bind, drops_refl, drops_drop, sle_tls, ex4_4_intro/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/fle_fle.ma b/matita/matita/contribs/lambdadelta/basic_2/static/fle_fle.ma index e756b43f7..42c403412 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/fle_fle.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/fle_fle.ma @@ -12,6 +12,7 @@ (* *) (**************************************************************************) +include "basic_2/syntax/lveq_lveq.ma". include "basic_2/static/frees_frees.ma". include "basic_2/static/fle_fqup.ma". @@ -19,14 +20,15 @@ include "basic_2/static/fle_fqup.ma". (* Advanced inversion lemmas ************************************************) -lemma fle_inv_voids_sn_frees_dx: ∀L1,L2,T1,T2,n. ⦃ⓧ*[n]L1, T1⦄ ⊆ ⦃L2, T2⦄ → - |L1| = |L2| → ∀f2. L2 ⊢ 𝐅*⦃T2⦄ ≡ f2 → - ∃∃f1. ⓧ*[n]L1 ⊢ 𝐅*⦃T1⦄ ≡ f1 & ⫱*[n]f1 ⊆ f2. -#L1 #L2 #T1 #T2 #n #H #HL12 #f2 #Hf2 -elim (fle_inv_voids_sn … H HL12) -H -HL12 #f1 #g2 #Hf1 #Hg2 #Hfg -lapply (frees_mono … Hg2 … Hf2) -Hg2 -Hf2 #Hfg2 -lapply (sle_eq_repl_back2 … Hfg … Hfg2) -g2 -/2 width=3 by ex2_intro/ +lemma fle_frees_trans: ∀L1,L2,T1,T2. ⦃L1, T1⦄ ⊆ ⦃L2, T2⦄ → + ∀f2. L2 ⊢ 𝐅*⦃T2⦄ ≡ f2 → + ∃∃n1,n2,f1. L1 ⊢ 𝐅*⦃T1⦄ ≡ f1 & + L1 ≋ⓧ*[n1, n2] L2 & ⫱*[n1]f1 ⊆ ⫱*[n2]f2. +#L1 #L2 #T1 #T2 * #n1 #n2 #f1 #g2 #Hf1 #Hg2 #HL #Hn #f2 #Hf2 +lapply (frees_mono … Hg2 … Hf2) -Hg2 -Hf2 #Hgf2 +lapply (tls_eq_repl n2 … Hgf2) -Hgf2 #Hgf2 +lapply (sle_eq_repl_back2 … Hn … Hgf2) -g2 +/2 width=6 by ex3_3_intro/ qed-. (* Main properties **********************************************************) @@ -38,37 +40,38 @@ qed-. *) theorem fle_bind_sn: ∀L1,L2,V1,T1,T. ⦃L1, V1⦄ ⊆ ⦃L2, T⦄ → ⦃L1.ⓧ, T1⦄ ⊆ ⦃L2, T⦄ → ∀p,I. ⦃L1, ⓑ{p,I}V1.T1⦄ ⊆ ⦃L2, T⦄. -#L1 #L2 #V1 #T1 #T * -L1 #f1 #x #L1 #n1 #Hf1 #Hx #HL12 #Hf1x ->voids_succ #H #p #I -elim (fle_inv_voids_sn_frees_dx … H … Hx) -H // #f2 #Hf2 -length_bind >length_bind #H +/2 width=1 by monotonic_pred/ +qed-. + +lemma lveq_fwd_bind_abst_length_le: ∀I1,I2,L1,L2,V2,n1,n2. + L1.ⓘ{I1} ≋ⓧ*[n1, n2] L2.ⓑ{I2}V2 → |L2| ≤ |L1|. +/3 width=6 by lveq_fwd_abst_bind_length_le, lveq_sym/ qed-. + (* Inversion lemmas with length for local environments **********************) - + lemma lveq_inv_void_dx_length: ∀L1,L2,n1,n2. L1 ≋ⓧ*[n1, n2] L2.ⓧ → |L1| ≤ |L2| → ∃∃m2. L1 ≋ ⓧ*[n1, m2] L2 & n2 = ⫯m2 & n1 ≤ m2. #L1 #L2 #n1 #n2 #H #HL12 lapply (lveq_fwd_length … H) normalize >plus_n_Sm #H0 lapply (plus2_inv_le_sn … H0 HL12) -H0 -HL12 #H0 elim (le_inv_S1 … H0) -H0 #m2 #Hm2 #H0 destruct -/3 width=4 by lveq_inv_void_dx, ex3_intro/ +/3 width=4 by lveq_inv_void_succ_dx, ex3_intro/ +qed-. + +lemma lveq_inv_void_sn_length: ∀L1,L2,n1,n2. L1.ⓧ ≋ⓧ*[n1, n2] L2 → |L2| ≤ |L1| → + ∃∃m1. L1 ≋ ⓧ*[m1, n2] L2 & n1 = ⫯m1 & n2 ≤ m1. +#L1 #L2 #n1 #n2 #H #HL +lapply (lveq_sym … H) -H #H +elim (lveq_inv_void_dx_length … H HL) -H -HL +/3 width=4 by lveq_sym, ex3_intro/ qed-. -*) \ No newline at end of file diff --git a/matita/matita/contribs/lambdadelta/basic_2/syntax/lveq_lveq.ma b/matita/matita/contribs/lambdadelta/basic_2/syntax/lveq_lveq.ma index 12b6f0cb6..3f64c33b0 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/syntax/lveq_lveq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/syntax/lveq_lveq.ma @@ -16,6 +16,33 @@ include "basic_2/syntax/lveq_length.ma". (* EQUIVALENCE FOR LOCAL ENVIRONMENTS UP TO EXCLUSION BINDERS ***************) +(* Main forward lemmas ******************************************************) + +theorem lveq_fwd_inj_succ_zero: ∀L1,L2,n1. L1 ≋ⓧ*[⫯n1, 0] L2 → + ∀m1,m2. L1 ≋ⓧ*[m1, m2] L2 → ∃x1. ⫯x1 = m1. +#L1 #L2 #n1 #Hn #m1 #m2 #Hm +lapply (lveq_fwd_length … Hn) -Hn Hn >associative_plus -Hn #Hm +lapply (injective_plus_r … Hm) -Hm +(plus_n_O … n1) in ⊢ (?%???); >(plus_n_O … n2) in ⊢ (???%?); -/2 width=1 by lveq_voids/ qed-. - -(* Inversion lemmas with extension with exclusion binders *******************) - -lemma lveq_inv_voids_sn: ∀L1,L2,n1,n2,m1. ⓧ*[m1]L1 ≋ⓧ*[m1+n1, n2] L2 → - L1 ≋ⓧ*[n1, n2] L2. -#L1 #L2 #n1 #n2 #m1 elim m1 -m1 /3 width=1 by lveq_inv_void_sn/ -qed-. - -lemma lveq_inv_voids_dx: ∀L1,L2,n1,n2,m2. L1 ≋ⓧ*[n1, m2+n2] ⓧ*[m2]L2 → - L1 ≋ⓧ*[n1, n2] L2. -#L1 #L2 #n1 #n2 #m2 elim m2 -m2 /3 width=1 by lveq_inv_void_dx/ -qed-. - -lemma lveq_inv_voids: ∀L1,L2,n1,n2,m1,m2. ⓧ*[m1]L1 ≋ⓧ*[m1+n1, m2+n2] ⓧ*[m2]L2 → - L1 ≋ⓧ*[n1, n2] L2. -/3 width=3 by lveq_inv_voids_dx, lveq_inv_voids_sn/ qed-. - -lemma lveq_inv_voids_zero: ∀L1,L2,n1,n2. ⓧ*[n1]L1 ≋ⓧ*[n1, n2] ⓧ*[n2]L2 → - L1 ≋ⓧ*[0, 0] L2. -/2 width=3 by lveq_inv_voids/ qed-. - -*) \ No newline at end of file diff --git a/matita/matita/contribs/lambdadelta/basic_2/syntax/voids.ma b/matita/matita/contribs/lambdadelta/basic_2/syntax/voids.ma deleted file mode 100644 index 854737b4a..000000000 --- a/matita/matita/contribs/lambdadelta/basic_2/syntax/voids.ma +++ /dev/null @@ -1,91 +0,0 @@ -(**************************************************************************) -(* ___ *) -(* ||M|| *) -(* ||A|| A project by Andrea Asperti *) -(* ||T|| *) -(* ||I|| Developers: *) -(* ||T|| The HELM team. *) -(* ||A|| http://helm.cs.unibo.it *) -(* \ / *) -(* \ / This file is distributed under the terms of the *) -(* v GNU General Public License Version 2 *) -(* *) -(**************************************************************************) - -include "basic_2/notation/functions/voidstar_2.ma". -include "basic_2/syntax/lenv.ma". - -(* EXTENSION OF A LOCAL ENVIRONMENT WITH EXCLUSION BINDERS ******************) - -rec definition voids (L:lenv) (n:nat) on n: lenv ≝ match n with -[ O ⇒ L | S m ⇒ (voids L m).ⓧ ]. - -interpretation "extension with exclusion binders (local environment)" - 'VoidStar n L = (voids L n). - -(* Basic properties *********************************************************) - -lemma voids_zero: ∀L. L = ⓧ*[0]L. -// qed. - -lemma voids_succ: ∀L,n. (ⓧ*[n]L).ⓧ = ⓧ*[⫯n]L. -// qed. - -(* Advanced properties ******************************************************) - -lemma voids_next: ∀n,L. ⓧ*[n](L.ⓧ) = ⓧ*[⫯n]L. -#n elim n -n // -qed. - -(* Basic inversion lemmas ***************************************************) - -lemma voids_atom_inv: ∀K,n. ⓧ*[n]K = ⋆ → ∧∧ ⋆ = K & 0 = n. -#K * /2 width=1 by conj/ -#n minus_S_S #H - elim (destruct_lbind_lbind_aux … H) -H #HK #_ (**) (* destruct lemma needed *) - elim (IH … HK) -IH -HK #H #Hn destruct /3 width=1 by conj, le_S_S/ - ] -] -qed-. - -lemma voids_inv_pair_sn: ∀I,V,n1,K1,K2,n2. ⓧ*[n1]K1.ⓑ{I}V = ⓧ*[n2]K2 → - ∧∧ ⓧ*[n1-n2]K1.ⓑ{I}V = K2 & n2 ≤ n1. -#I #V #n1 elim n1 -n1 -[ #K1 #K2 minus_S_S #H - elim (destruct_lbind_lbind_aux … H) -H #HK #_ (**) (* destruct lemma needed *) - elim (IH … HK) -IH -HK #H #Hn destruct /3 width=1 by conj, le_S_S/ - ] -] -qed-. - -(* Main inversion properties ************************************************) - -theorem voids_inj: ∀n. injective … (λL. ⓧ*[n]L). -#n elim n -n // -#n #IH #L1 #L2 -length_bind ground_2/xoa/xoa2 ground_2/notation/xoa/notation2 basics/pts.ma - 3 6 diff --git a/matita/matita/contribs/lambdadelta/ma2etc.sh b/matita/matita/contribs/lambdadelta/ma2etc.sh index e546af776..b135f45b4 100644 --- a/matita/matita/contribs/lambdadelta/ma2etc.sh +++ b/matita/matita/contribs/lambdadelta/ma2etc.sh @@ -1 +1 @@ -for FILE in `find $1 -name "*.ma"`; do svn mv $FILE ${FILE/%.ma/.etc} ; done +for FILE in `find $1 -name "*.ma"`; do git mv $FILE ${FILE/%.ma/.etc} ; done