X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fbasic_2%2Fcomputation%2Flsx_csx.ma;h=791a0e526c57fa8c989b6ec1f5bdb14484d0b6c1;hb=d95bd78c09617ad212fa9e96837a15fc907dcfca;hp=883e32d0bcb80b0c81b1682f5b93e5b5973d50ea;hpb=e2527c6784c2593ca67af35fafaf0b3725d80a60;p=helm.git diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/lsx_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/lsx_csx.ma index 883e32d0b..791a0e526 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/lsx_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/lsx_csx.ma @@ -12,85 +12,31 @@ (* *) (**************************************************************************) -include "basic_2/computation/lpxs_lleq.ma". +include "basic_2/reduction/cpx_cpys.ma". +include "basic_2/computation/lpxs_cpye.ma". include "basic_2/computation/csx_alt.ma". include "basic_2/computation/lsx_lpxs.ma". (* SN EXTENDED STRONGLY NORMALIZING LOCAL ENVIRONMENTS **********************) -(* Advanced forward lemmas **************************************************) - -include "basic_2/computation/cpxs_lleq.ma". +(* Advanced properties ******************************************************) +axiom lpxs_cpye_csx_lsx: ∀h,g,G,L1,U. ⦃G, L1⦄ ⊢ ⬊*[h, g] U → + ∀L2. ⦃G, L1⦄ ⊢ ➡*[h, g] L2 → ∀T. ⦃G, L2⦄ ⊢ T ▶*[0, ∞] 𝐍⦃U⦄ → + G ⊢ ⋕⬊*[h, g, T] L2. (* -lemma lsx_cpxs_conf: ∀h,g,G,L1,T1,T2. G ⊢ ⋕⬊*[h, g, T1] L1 → - ∀L2. ⦃G, L1⦄ ⊢ ➡*[h, g] L2 → ⦃G, L1⦄ ⊢ T1 ➡*[h, g] T2 → - G ⊢ ⋕⬊*[h, g, T2] L2. -#h #g #G #L1 #T1 #T2 #H @(lsx_ind … H) -L1 -#L1 #HL1 #IHL1 #L2 #HL12 #HT12 @lsx_intro -#L3 #HL23 #HnL23 elim (lleq_dec T2 L1 L2 0) [| -HnL23 ] -[ #HT2 @(IHL1 L3) /2 width=3 by lpxs_trans/ - - @(lsx_lpxs_trans … HL23) -| #HnT2 @(lsx_lpxs_trans … HL23) @(IHL1 … L2) // - #HT1 @HnT2 @(lleq_cpxs_conf_dx … HT12) // +#h #g #G #L1 #U #H @(csx_ind_alt … H) -U +#U0 #_ #IHU0 #L0 #HL10 #T #H0 @lsx_intro +#L2 #HL02 #HnT elim (cpye_total G L2 T 0 (∞)) +#U2 #H2 elim (eq_term_dec U0 U2) #H destruct +[ -IHU0 +| -HnT /4 width=9 by lpxs_trans, lpxs_cpxs_trans, cpx_cpye_fwd_lpxs/ ] *) - -lemma lsx_fwd_bind_dx_lpxs: ∀h,g,a,I,G,L1,V1. ⦃G, L1⦄ ⊢ ⬊*[h, g] V1 → - ∀L2,T. G ⊢ ⋕⬊*[h, g, ⓑ{a,I}V1.T] L2 → - ∀V2. ⦃G, L1⦄ ⊢ ➡*[h, g] L2 → ⦃G, L2⦄ ⊢ V1 ➡*[h, g] V2 → - G ⊢ ⋕⬊*[h, g, T] L2.ⓑ{I}V2. -#h #g #a #I #G #L1 #V1 #H @(csx_ind_alt … H) -V1 -#V1 #_ #IHV1 #L2 #T #H @(lsx_ind … H) -L2 -#L2 #HL2 #IHL2 #V2 #HL12 #HV12 @lsx_intro -#Y #H #HnT elim (lpxs_inv_pair1 … H) -H -#L3 #V3 #HL23 #HV23 #H destruct -lapply (lpxs_trans … HL12 … HL23) #HL13 -elim (eq_term_dec V2 V3) -[ (* -HV13 -HL2 -IHV1 -HL12 *) #H destruct - @IHL2 -IHL2 // -HL23 -HL13 /3 width=2 by lleq_fwd_bind_O/ -| -IHL2 -HnT #HnV23 elim (eq_term_dec V1 V2) - [ #H -HV12 destruct - (* @(lsx_lpxs_trans … (L2.ⓑ{I}V2)) /2 width=1 by lpxs_pair/ *) - @(IHV1 … HnV23) -IHV1 -HnV23 /2 width=3 by lpxs_cpxs_trans/ -HL12 -HL13 - @(lsx_lpxs_trans … HL23) - - -lemma lsx_fwd_bind_dx_lpxs: ∀h,g,a,I,G,L1,V. ⦃G, L1⦄ ⊢ ⬊*[h, g] V → - ∀L2,T. G ⊢ ⋕⬊*[h, g, ⓑ{a,I}V.T] L2 → ⦃G, L1⦄ ⊢ ➡*[h, g] L2 → - G ⊢ ⋕⬊*[h, g, T] L2.ⓑ{I}V. -#h #g #a #I #G #L1 #V #H @(csx_ind_alt … H) -V -#V1 #_ #IHV1 #L2 #T #H @(lsx_ind … H) -L2 -#L2 #HL2 #IHL2 #HL12 @lsx_intro -#Y #H #HnT elim (lpxs_inv_pair1 … H) -H -#L3 #V3 #HL23 #HV13 #H destruct -lapply (lpxs_trans … HL12 … HL23) #HL13 -elim (eq_term_dec V1 V3) -[ -HV13 -HL2 -IHV1 -HL12 #H destruct - @IHL2 -IHL2 // -HL23 -HL13 /3 width=2 by lleq_fwd_bind_O/ -| -IHL2 -HnT #HnV13 - @(IHV1 … HnV13) -IHV1 -HnV13 /2 width=3 by lpxs_cpxs_trans/ -HL12 -HL13 - @(lsx_lpxs_trans … HL23) - - -(* Advanced inversion lemmas ************************************************) - - - (* Main properties **********************************************************) -axiom csx_lsx: ∀h,g,G,L,T. ⦃G, L⦄ ⊢ ⬊*[h, g] T → G ⊢ ⋕⬊*[h, g, T] L. -(* -#h #g #G #L #T @(fqup_wf_ind_eq … G L T) -G -L -T -#G1 #L1 #T1 #IH #G2 #L2 * * -[ #k #HG #HL #HT destruct // -| #i #HG #HL #HT destruct - #H -| #p #HG #HL #HT destruct // -| #a #I #V2 #T2 #HG #HL #HT #H destruct - elim (csx_fwd_bind … H) -H - #HV2 #HT2 -| #I #V2 #T2 #HG #HL #HT #H destruct - elim (csx_fwd_flat … H) -H /3 width=1 by lsx_flat/ -*) +lemma csx_lsx: ∀h,g,G,L,T. ⦃G, L⦄ ⊢ ⬊*[h, g] T → G ⊢ ⋕⬊*[h, g, T] L. +#h #g #G #L #T #HT elim (cpye_total G L T 0 (∞)) +#U #HTU elim HTU +/4 width=5 by lpxs_cpye_csx_lsx, csx_cpx_trans, cpys_cpx/ +qed.