X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fbasic_2%2Funfold%2Flstas_da.ma;h=6ecadc335b0f503856c5264787ac89d5afb92170;hb=c60524dec7ace912c416a90d6b926bee8553250b;hp=8d1feca9f9e09032abb2970e56812406b55e3281;hpb=f10cfe417b6b8ec1c7ac85c6ecf5fb1b3fdf37db;p=helm.git diff --git a/matita/matita/contribs/lambdadelta/basic_2/unfold/lstas_da.ma b/matita/matita/contribs/lambdadelta/basic_2/unfold/lstas_da.ma index 8d1feca9f..6ecadc335 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/unfold/lstas_da.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/unfold/lstas_da.ma @@ -19,77 +19,77 @@ include "basic_2/unfold/lstas_lstas.ma". (* Properties on degree assignment for terms ********************************) -lemma da_lstas: ∀h,g,G,L,T,l1. ⦃G, L⦄ ⊢ T ▪[h, g] l1 → ∀l2. - ∃∃U. ⦃G, L⦄ ⊢ T •*[h, l2] U & ⦃G, L⦄ ⊢ U ▪[h, g] l1-l2. -#h #g #G #L #T #l1 #H elim H -G -L -T -l1 +lemma da_lstas: ∀h,g,G,L,T,d1. ⦃G, L⦄ ⊢ T ▪[h, g] d1 → ∀d2. + ∃∃U. ⦃G, L⦄ ⊢ T •*[h, d2] U & ⦃G, L⦄ ⊢ U ▪[h, g] d1-d2. +#h #g #G #L #T #d1 #H elim H -G -L -T -d1 [ /4 width=3 by da_sort, deg_iter, ex2_intro/ -| #G #L #K #V #i #l1 #HLK #_ #IHV #l2 - elim (IHV l2) -IHV #W +| #G #L #K #V #i #d1 #HLK #_ #IHV #d2 + elim (IHV d2) -IHV #W elim (lift_total W 0 (i+1)) lapply (drop_fwd_drop2 … HLK) /3 width=10 by lstas_ldef, da_lift, ex2_intro/ -| #G #L #K #W #i #l1 #HLK #HW #IHW #l2 @(nat_ind_plus … l2) -l2 +| #G #L #K #W #i #d1 #HLK #HW #IHW #d2 @(nat_ind_plus … d2) -d2 [ elim (IHW 0) -IHW /3 width=6 by lstas_zero, da_ldec, ex2_intro/ - | #l #_ elim (IHW l) -IHW #V + | #d #_ elim (IHW d) -IHW #V elim (lift_total V 0 (i+1)) lapply (drop_fwd_drop2 … HLK) /3 width=10 by lstas_succ, da_lift, ex2_intro/ ] -| #a #I #G #L #V #T #l1 #_ #IHT #l2 elim (IHT … l2) -IHT +| #a #I #G #L #V #T #d1 #_ #IHT #d2 elim (IHT … d2) -IHT /3 width=6 by lstas_bind, da_bind, ex2_intro/ -| * #G #L #V #T #l1 #_ #IHT #l2 elim (IHT … l2) -IHT +| * #G #L #V #T #d1 #_ #IHT #d2 elim (IHT … d2) -IHT /3 width=5 by lstas_appl, lstas_cast, da_flat, ex2_intro/ ] qed-. -lemma lstas_da_conf: ∀h,g,G,L,T,U,l2. ⦃G, L⦄ ⊢ T •*[h, l2] U → - ∀l1. ⦃G, L⦄ ⊢ T ▪[h, g] l1 → ⦃G, L⦄ ⊢ U ▪[h, g] l1-l2. -#h #g #G #L #T #U #l2 #HTU #l1 #HT -elim (da_lstas … HT l2) -HT #X #HTX +lemma lstas_da_conf: ∀h,g,G,L,T,U,d2. ⦃G, L⦄ ⊢ T •*[h, d2] U → + ∀d1. ⦃G, L⦄ ⊢ T ▪[h, g] d1 → ⦃G, L⦄ ⊢ U ▪[h, g] d1-d2. +#h #g #G #L #T #U #d2 #HTU #d1 #HT +elim (da_lstas … HT d2) -HT #X #HTX lapply (lstas_mono … HTX … HTU) -T // qed-. (* inversion lemmas on degree assignment for terms **************************) -lemma lstas_inv_da: ∀h,g,G,L,T,U,l2. ⦃G, L⦄ ⊢ T •*[h, l2] U → - ∃∃l1. ⦃G, L⦄ ⊢ T ▪[h, g] l1 & ⦃G, L⦄ ⊢ U ▪[h, g] l1-l2. -#h #g #G #L #T #U #l2 #H elim H -G -L -T -U -l2 -[ #G #L #l2 #k elim (deg_total h g k) /4 width=3 by da_sort, deg_iter, ex2_intro/ -| #G #L #K #V #W #U #i #l2 #HLK #_ #HWU * +lemma lstas_inv_da: ∀h,g,G,L,T,U,d2. ⦃G, L⦄ ⊢ T •*[h, d2] U → + ∃∃d1. ⦃G, L⦄ ⊢ T ▪[h, g] d1 & ⦃G, L⦄ ⊢ U ▪[h, g] d1-d2. +#h #g #G #L #T #U #d2 #H elim H -G -L -T -U -d2 +[ #G #L #d2 #k elim (deg_total h g k) /4 width=3 by da_sort, deg_iter, ex2_intro/ +| #G #L #K #V #W #U #i #d2 #HLK #_ #HWU * lapply (drop_fwd_drop2 … HLK) /3 width=10 by da_lift, da_ldef, ex2_intro/ | #G #L #K #W #V #i #HLK #_ * /3 width=6 by da_ldec, ex2_intro/ -| #G #L #K #W #V #U #i #l2 #HLK #_ #HVU * +| #G #L #K #W #V #U #i #d2 #HLK #_ #HVU * lapply (drop_fwd_drop2 … HLK) /3 width=10 by da_lift, da_ldec, ex2_intro/ -| #a #I #G #L #V #T #U #l2 #_ * /3 width=3 by da_bind, ex2_intro/ -| #G #L #V #T #U #l2 #_ * /3 width=3 by da_flat, ex2_intro/ -| #G #L #W #T #U #l2 #_ * /3 width=3 by da_flat, ex2_intro/ +| #a #I #G #L #V #T #U #d2 #_ * /3 width=3 by da_bind, ex2_intro/ +| #G #L #V #T #U #d2 #_ * /3 width=3 by da_flat, ex2_intro/ +| #G #L #W #T #U #d2 #_ * /3 width=3 by da_flat, ex2_intro/ ] qed-. -lemma lstas_inv_da_ge: ∀h,G,L,T,U,l2,l. ⦃G, L⦄ ⊢ T •*[h, l2] U → - ∃∃g,l1. ⦃G, L⦄ ⊢ T ▪[h, g] l1 & ⦃G, L⦄ ⊢ U ▪[h, g] l1-l2 & l ≤ l1. -#h #G #L #T #U #l2 #l #H elim H -G -L -T -U -l2 +lemma lstas_inv_da_ge: ∀h,G,L,T,U,d2,d. ⦃G, L⦄ ⊢ T •*[h, d2] U → + ∃∃g,d1. ⦃G, L⦄ ⊢ T ▪[h, g] d1 & ⦃G, L⦄ ⊢ U ▪[h, g] d1-d2 & d ≤ d1. +#h #G #L #T #U #d2 #d #H elim H -G -L -T -U -d2 [ /4 width=5 by da_sort, deg_iter, ex3_2_intro/ -| #G #L #K #V #W #U #i #l2 #HLK #_ #HWU * +| #G #L #K #V #W #U #i #d2 #HLK #_ #HWU * lapply (drop_fwd_drop2 … HLK) /3 width=10 by da_lift, da_ldef, ex3_2_intro/ | #G #L #K #W #V #i #HLK #_ * - #g #l1 #HW #HV #Hl1 /4 width=6 by da_ldec, lt_to_le, le_S_S, ex3_2_intro/ -| #G #L #K #W #V #U #i #l2 #HLK #_ #HVU * + #g #d1 #HW #HV #Hd1 /4 width=6 by da_ldec, lt_to_le, le_S_S, ex3_2_intro/ +| #G #L #K #W #V #U #i #d2 #HLK #_ #HVU * lapply (drop_fwd_drop2 … HLK) /4 width=10 by da_lift, da_ldec, lt_to_le, le_S_S, ex3_2_intro/ -| #a #I #G #L #V #T #U #l2 #_ * /3 width=5 by da_bind, ex3_2_intro/ -| #G #L #V #T #U #l2 #_ * /3 width=5 by da_flat, ex3_2_intro/ -| #G #L #W #T #U #l2 #_ * /3 width=5 by da_flat, ex3_2_intro/ +| #a #I #G #L #V #T #U #d2 #_ * /3 width=5 by da_bind, ex3_2_intro/ +| #G #L #V #T #U #d2 #_ * /3 width=5 by da_flat, ex3_2_intro/ +| #G #L #W #T #U #d2 #_ * /3 width=5 by da_flat, ex3_2_intro/ ] qed-. (* Advanced inversion lemmas ************************************************) -lemma lstas_inv_refl_pos: ∀h,G,L,T,l. ⦃G, L⦄ ⊢ T •*[h, l+1] T → ⊥. -#h #G #L #T #l2 #H elim (lstas_inv_da_ge … (l2+1) H) -H -#g #l1 #HT1 #HT12 #Hl21 lapply (da_mono … HT1 … HT12) -h -G -L -T +lemma lstas_inv_refl_pos: ∀h,G,L,T,d. ⦃G, L⦄ ⊢ T •*[h, d+1] T → ⊥. +#h #G #L #T #d2 #H elim (lstas_inv_da_ge … (d2+1) H) -H +#g #d1 #HT1 #HT12 #Hd21 lapply (da_mono … HT1 … HT12) -h -G -L -T #H elim (discr_x_minus_xy … H) -H [ #H destruct /2 width=3 by le_plus_xSy_O_false/ -| -l1