X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fbasic_2%2Fetc%2Fcsup%2Fcsup.etc;h=0a980f6a7fb58bf00b6573563cca64fecea73d08;hb=eb4b3b1b307fc392c36f0be253e6a111553259bc;hp=dcfe086e967e438632075d84f27e83f573b49ddb;hpb=85a33f6b6de49ad8076753643df41f39bbedf802;p=helm.git diff --git a/matita/matita/contribs/lambdadelta/basic_2/etc/csup/csup.etc b/matita/matita/contribs/lambdadelta/basic_2/etc/csup/csup.etc index dcfe086e9..0a980f6a7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/etc/csup/csup.etc +++ b/matita/matita/contribs/lambdadelta/basic_2/etc/csup/csup.etc @@ -1,94 +1,5 @@ -(**************************************************************************) -(* ___ *) -(* ||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 *) -(* *) -(**************************************************************************) - -notation "hvbox( ⦃ L1, break T1 ⦄ > break ⦃ L2 , break T2 ⦄ )" - non associative with precedence 45 - for @{ 'SupTerm $L1 $T1 $L2 $T2 }. - -include "basic_2/substitution/ldrop.ma". - -(* SUPCLOSURE ***************************************************************) - -inductive csup: bi_relation lenv term ≝ -| csup_lref : ∀I,L,K,V,i. ⇩[0, i] L ≡ K.ⓑ{I}V → csup L (#i) K V -| csup_bind_sn: ∀a,I,L,V,T. csup L (ⓑ{a,I}V.T) L V -| csup_bind_dx: ∀a,I,L,V,T. csup L (ⓑ{a,I}V.T) (L.ⓑ{I}V) T -| csup_flat_sn: ∀I,L,V,T. csup L (ⓕ{I}V.T) L V -| csup_flat_dx: ∀I,L,V,T. csup L (ⓕ{I}V.T) L T -. - -interpretation - "structural predecessor (closure)" - 'SupTerm L1 T1 L2 T2 = (csup L1 T1 L2 T2). - -(* Basic inversion lemmas ***************************************************) - -fact csup_inv_atom1_aux: ∀L1,L2,T1,T2. ⦃L1, T1⦄ > ⦃L2, T2⦄ → ∀J. T1 = ⓪{J} → - ∃∃I,i. ⇩[0, i] L1 ≡ L2.ⓑ{I}T2 & J = LRef i. -#L1 #L2 #T1 #T2 * -L1 -L2 -T1 -T2 -[ #I #L #K #V #i #HLK #J #H destruct /2 width=4/ -| #a #I #L #V #T #J #H destruct -| #a #I #L #V #T #J #H destruct -| #I #L #V #T #J #H destruct -| #I #L #V #T #J #H destruct -] -qed-. - -lemma csup_inv_atom1: ∀J,L1,L2,T2. ⦃L1, ⓪{J}⦄ > ⦃L2, T2⦄ → - ∃∃I,i. ⇩[0, i] L1 ≡ L2.ⓑ{I}T2 & J = LRef i. -/2 width=3 by csup_inv_atom1_aux/ qed-. - -fact csup_inv_bind1_aux: ∀L1,L2,T1,T2. ⦃L1, T1⦄ > ⦃L2, T2⦄ → - ∀b,J,W,U. T1 = ⓑ{b,J}W.U → - (L2 = L1 ∧ T2 = W) ∨ - (L2 = L1.ⓑ{J}W ∧ T2 = U). -#L1 #L2 #T1 #T2 * -L1 -L2 -T1 -T2 -[ #I #L #K #V #i #_ #b #J #W #U #H destruct -| #a #I #L #V #T #b #J #W #U #H destruct /3 width=1/ -| #a #I #L #V #T #b #J #W #U #H destruct /3 width=1/ -| #I #L #V #T #b #J #W #U #H destruct -| #I #L #V #T #b #J #W #U #H destruct -] -qed-. - -lemma csup_inv_bind1: ∀b,J,L1,L2,W,U,T2. ⦃L1, ⓑ{b,J}W.U⦄ > ⦃L2, T2⦄ → - (L2 = L1 ∧ T2 = W) ∨ - (L2 = L1.ⓑ{J}W ∧ T2 = U). -/2 width=4 by csup_inv_bind1_aux/ qed-. - -fact csup_inv_flat1_aux: ∀L1,L2,T1,T2. ⦃L1, T1⦄ > ⦃L2, T2⦄ → - ∀J,W,U. T1 = ⓕ{J}W.U → - L2 = L1 ∧ (T2 = W ∨ T2 = U). -#L1 #L2 #T1 #T2 * -L1 -L2 -T1 -T2 -[ #I #L #K #V #i #_ #J #W #U #H destruct -| #a #I #L #V #T #J #W #U #H destruct -| #a #I #L #V #T #J #W #U #H destruct -| #I #L #V #T #J #W #U #H destruct /3 width=1/ -| #I #L #V #T #J #W #U #H destruct /3 width=1/ -] -qed-. - -lemma csup_inv_flat1: ∀J,L1,L2,W,U,T2. ⦃L1, ⓕ{J}W.U⦄ > ⦃L2, T2⦄ → - L2 = L1 ∧ (T2 = W ∨ T2 = U). -/2 width=4 by csup_inv_flat1_aux/ qed-. - (* Basic forward lemmas *****************************************************) -lemma csup_fwd_cw: ∀L1,L2,T1,T2. ⦃L1, T1⦄ > ⦃L2, T2⦄ → #{L2, T2} < #{L1, T1}. -#L1 #L2 #T1 #T2 * -L1 -L2 -T1 -T2 /width=1/ /2 width=4 by ldrop_pair2_fwd_cw/ -qed-. - lemma csup_fwd_ldrop: ∀L1,L2,T1,T2. ⦃L1, T1⦄ > ⦃L2, T2⦄ → ∃i. ⇩[0, i] L1 ≡ L2 ∨ ⇩[0, i] L2 ≡ L1. #L1 #L2 #T1 #T2 * -L1 -L2 -T1 -T2 /3 width=2/ /4 width=2/ @@ -155,3 +66,23 @@ lemma csup_inv_lref2_be: ∀L,U,i. ⦃L, U⦄ > ⦃L, #i⦄ → elim (lift_csup_trans_eq … HTU … H) -H -T #T #H elim (lift_inv_lref2_be … H ? ?) // qed-. + + +fact csup_inv_all4_refl_aux: ∀L1,L2,T1,T2. ⦃L1, T1⦄ > ⦃L2, T2⦄ → L1 = L2 → + ∨∨ ∃∃a,I,U. T1 = ⓑ{a,I}T2.U + | ∃∃I,W. T1 = ⓕ{I}W.T2 + | ∃∃I,U. T1 = ⓕ{I}T2.U. +#L1 #L2 #T1 #T2 * -L1 -L2 -T1 -T2 /3 width=3/ /3 width=4/ +[ #I #L #K #V #i #HLK #H destruct + lapply (ldrop_pair2_fwd_cw … HLK V) -HLK #H + elim (lt_refl_false … H) +| #a #I #L #V #T #H + elim (discr_lpair_x_xy … H) +] +qed-. + +lemma csup_inv_all4_refl: ∀L,T1,T2. ⦃L, T1⦄ > ⦃L, T2⦄ → + ∨∨ ∃∃a,I,U. T1 = ⓑ{a,I}T2.U + | ∃∃I,W. T1 = ⓕ{I}W.T2 + | ∃∃I,U. T1 = ⓕ{I}T2.U. +/2 width=4 by csup_inv_all4_refl_aux/ qed-.