X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fbasic_2%2Fsubstitution%2Ffqu.ma;h=47bd0eabe6f09d811e4b97f3e2b534d49119ea16;hb=e258362c37ec6d9132ec57bd5e4987d148c10799;hp=651ca43221e15080fc45c7e001791218213ba37f;hpb=598a5c56535a8339f6533227ab580aff64e2d41c;p=helm.git diff --git a/matita/matita/contribs/lambdadelta/basic_2/substitution/fqu.ma b/matita/matita/contribs/lambdadelta/basic_2/substitution/fqu.ma index 651ca4322..47bd0eabe 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/substitution/fqu.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/substitution/fqu.ma @@ -14,7 +14,7 @@ include "basic_2/notation/relations/supterm_6.ma". include "basic_2/grammar/cl_weight.ma". -include "basic_2/substitution/ldrop.ma". +include "basic_2/substitution/drop.ma". (* SUPCLOSURE ***************************************************************) @@ -24,8 +24,8 @@ inductive fqu: tri_relation genv lenv term ≝ | fqu_pair_sn: ∀I,G,L,V,T. fqu G L (②{I}V.T) G L V | fqu_bind_dx: ∀a,I,G,L,V,T. fqu G L (ⓑ{a,I}V.T) G (L.ⓑ{I}V) T | fqu_flat_dx: ∀I,G,L,V,T. fqu G L (ⓕ{I}V.T) G L T -| fqu_drop : ∀G,L,K,T,U,e. - ⇩[e+1] L ≡ K → ⇧[0, e+1] T ≡ U → fqu G L U G K T +| fqu_drop : ∀G,L,K,T,U,m. + ⬇[m+1] L ≡ K → ⬆[0, m+1] T ≡ U → fqu G L U G K T . interpretation @@ -34,22 +34,22 @@ interpretation (* Basic properties *********************************************************) -lemma fqu_drop_lt: ∀G,L,K,T,U,e. 0 < e → - ⇩[e] L ≡ K → ⇧[0, e] T ≡ U → ⦃G, L, U⦄ ⊐ ⦃G, K, T⦄. -#G #L #K #T #U #e #He >(plus_minus_m_m e 1) /2 width=3 by fqu_drop/ +lemma fqu_drop_lt: ∀G,L,K,T,U,m. 0 < m → + ⬇[m] L ≡ K → ⬆[0, m] T ≡ U → ⦃G, L, U⦄ ⊐ ⦃G, K, T⦄. +#G #L #K #T #U #m #Hm >(plus_minus_m_m m 1) /2 width=3 by fqu_drop/ qed. lemma fqu_lref_S_lt: ∀I,G,L,V,i. 0 < i → ⦃G, L.ⓑ{I}V, #i⦄ ⊐ ⦃G, L, #(i-1)⦄. -/3 width=3 by fqu_drop, ldrop_drop, lift_lref_ge_minus/ +/3 width=3 by fqu_drop, drop_drop, lift_lref_ge_minus/ qed. (* Basic forward lemmas *****************************************************) lemma fqu_fwd_fw: ∀G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐ ⦃G2, L2, T2⦄ → ♯{G2, L2, T2} < ♯{G1, L1, T1}. #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 // -#G #L #K #T #U #e #HLK #HTU -lapply (ldrop_fwd_lw_lt … HLK ?) -HLK // #HKL -lapply (lift_fwd_tw … HTU) -e #H +#G #L #K #T #U #m #HLK #HTU +lapply (drop_fwd_lw_lt … HLK ?) -HLK // #HKL +lapply (lift_fwd_tw … HTU) -m #H normalize in ⊢ (?%%); /2 width=1 by lt_minus_to_plus/ qed-. @@ -58,7 +58,7 @@ fact fqu_fwd_length_lref1_aux: ∀G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐ ⦃G2, #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 [1: normalize // |3: #a -|5: /2 width=4 by ldrop_fwd_length_lt4/ +|5: /2 width=4 by drop_fwd_length_lt4/ ] #I #G #L #V #T #j #H destruct qed-. @@ -66,11 +66,25 @@ lemma fqu_fwd_length_lref1: ∀G1,G2,L1,L2,T2,i. ⦃G1, L1, #i⦄ ⊐ ⦃G2, L2, /2 width=7 by fqu_fwd_length_lref1_aux/ qed-. +(* Basic inversion lemmas ***************************************************) + +fact fqu_inv_eq_aux: ∀G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐ ⦃G2, L2, T2⦄ → + G1 = G2 → |L1| = |L2| → T1 = T2 → ⊥. +#G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2 normalize +/2 width=4 by discr_tpair_xy_y, discr_tpair_xy_x, plus_xSy_x_false/ +#G #L #K #T #U #m #HLK #_ #_ #H #_ -G -T -U >(drop_fwd_length … HLK) in H; -L +/2 width=4 by plus_xySz_x_false/ +qed-. + +lemma fqu_inv_eq: ∀G,L1,L2,T. ⦃G, L1, T⦄ ⊐ ⦃G, L2, T⦄ → |L1| = |L2| → ⊥. +#G #L1 #L2 #T #H #H0 @(fqu_inv_eq_aux … H … H0) // (**) (* full auto fails *) +qed-. + (* Advanced eliminators *****************************************************) lemma fqu_wf_ind: ∀R:relation3 …. ( ∀G1,L1,T1. (∀G2,L2,T2. ⦃G1, L1, T1⦄ ⊐ ⦃G2, L2, T2⦄ → R G2 L2 T2) → R G1 L1 T1 ) → ∀G1,L1,T1. R G1 L1 T1. -#R #HR @(f3_ind … fw) #n #IHn #G1 #L1 #T1 #H destruct /4 width=1 by fqu_fwd_fw/ +#R #HR @(f3_ind … fw) #x #IHx #G1 #L1 #T1 #H destruct /4 width=1 by fqu_fwd_fw/ qed-.