X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fbasic_2%2Frt_computation%2Fcsx_lsubr.ma;h=04a1b278b1fb2eadd4a52f93c5193f58fa9622cf;hb=cc178d85bc4fec05b6a9dd176f338b3275beb3d9;hp=00683b0fc2de5f52640785f3a93c06ea6f0db484;hpb=6555775aa5268dec0d9ae4579412b659cacdc964;p=helm.git diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lsubr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lsubr.ma index 00683b0fc..04a1b278b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lsubr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lsubr.ma @@ -15,13 +15,14 @@ include "basic_2/rt_transition/cpx_lsubr.ma". include "basic_2/rt_computation/csx_csx.ma". -(* STRONGLY NORMALIZING TERMS FOR UNCOUNTED PARALLEL RT-TRANSITION **********) +(* STRONGLY NORMALIZING TERMS FOR EXTENDED PARALLEL RT-TRANSITION ***********) (* Advanced properties ******************************************************) -fact csx_appl_beta_aux: ∀h,o,p,G,L,U1. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃U1⦄ → - ∀V,W,T1. U1 = ⓓ{p}ⓝW.V.T1 → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓐV.ⓛ{p}W.T1⦄. -#h #o #p #G #L #X #H @(csx_ind … H) -X +fact csx_appl_beta_aux (G) (L): + ∀p,U1. ❨G,L❩ ⊢ ⬈*𝐒 U1 → + ∀V,W,T1. U1 = ⓓ[p]ⓝW.V.T1 → ❨G,L❩ ⊢ ⬈*𝐒 ⓐV.ⓛ[p]W.T1. +#G #L #p #X #H @(csx_ind … H) -X #X #HT1 #IHT1 #V #W #T1 #H1 destruct @csx_intro #X #H1 #H2 elim (cpx_inv_appl1 … H1) -H1 * @@ -30,9 +31,9 @@ elim (cpx_inv_appl1 … H1) -H1 * @IHT1 -IHT1 [4: // | skip ] [ lapply (lsubr_cpx_trans … HLT0 (L.ⓓⓝW.V) ?) -HLT0 -H2 /3 width=1 by cpx_bind, cpx_flat, lsubr_beta/ - | #H elim (tdeq_inv_pair … H) -H - #_ #H elim (tdeq_inv_pair … H) -H - #_ /4 width=1 by tdeq_pair/ + | #H elim (teqx_inv_pair … H) -H + #_ #H elim (teqx_inv_pair … H) -H + #_ /4 width=1 by teqx_pair/ ] | -IHT1 -H2 #q #V0 #W0 #W2 #T0 #T2 #HLV0 #HLW02 #HLT02 #H1 #H3 destruct lapply (lsubr_cpx_trans … HLT02 (L.ⓓⓝW0.V) ?) -HLT02 @@ -42,5 +43,37 @@ elim (cpx_inv_appl1 … H1) -H1 * qed-. (* Basic_1: was just: sn3_beta *) -lemma csx_appl_beta: ∀h,o,p,G,L,V,W,T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓓ{p}ⓝW.V.T⦄ → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓐV.ⓛ{p}W.T⦄. +lemma csx_appl_beta (G) (L): + ∀p,V,W,T. ❨G,L❩ ⊢ ⬈*𝐒 ⓓ[p]ⓝW.V.T → ❨G,L❩ ⊢ ⬈*𝐒 ⓐV.ⓛ[p]W.T. /2 width=3 by csx_appl_beta_aux/ qed. + +(* Advanced forward lemmas **************************************************) + +fact csx_fwd_bind_dx_unit_aux (G) (L): + ∀U. ❨G,L❩ ⊢ ⬈*𝐒 U → + ∀p,I,J,V,T. U = ⓑ[p,I]V.T → ❨G,L.ⓤ[J]❩ ⊢ ⬈*𝐒 T. +#G #L #U #H elim H -H #U0 #_ #IH #p #I #J #V #T #H destruct +@csx_intro #T2 #HLT2 #HT2 +@(IH (ⓑ[p, I]V.T2)) -IH /2 width=4 by cpx_bind_unit/ -HLT2 #H +elim (teqx_inv_pair … H) -H /2 width=1 by/ +qed-. + +lemma csx_fwd_bind_dx_unit (G) (L): + ∀p,I,V,T. ❨G,L❩ ⊢ ⬈*𝐒 ⓑ[p,I]V.T → + ∀J. ❨G,L.ⓤ[J]❩ ⊢ ⬈*𝐒 T. +/2 width=6 by csx_fwd_bind_dx_unit_aux/ qed-. + +lemma csx_fwd_bind_unit (G) (L): + ∀p,I,V,T. ❨G,L❩ ⊢ ⬈*𝐒 ⓑ[p,I]V.T → + ∀J. ∧∧ ❨G,L❩ ⊢ ⬈*𝐒 V & ❨G,L.ⓤ[J]❩ ⊢ ⬈*𝐒 T. +/3 width=4 by csx_fwd_pair_sn, csx_fwd_bind_dx_unit, conj/ qed-. + +(* Properties with restricted refinement for local environments *************) + +lemma csx_lsubr_conf (G) (L1): + ∀T. ❨G,L1❩ ⊢ ⬈*𝐒 T → ∀L2. L1 ⫃ L2 → ❨G,L2❩ ⊢ ⬈*𝐒 T. +#G #L1 #T #H +@(csx_ind … H) -T #T1 #_ #IH #L2 #HL12 +@csx_intro #T2 #HT12 #HnT12 +/3 width=3 by lsubr_cpx_trans/ +qed-.