X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fbasic_2%2Frt_computation%2Fcprs_cprs.ma;h=aba142ab75dda014eb978f22628230ccae37d45d;hb=d8d00d6f6694155be5be486a8239f5953efe28b7;hp=e69c6b8d231f697a4137059d73735d331b844695;hpb=8f5533bd34e93eee2a14cdcfd0595be65651bfa7;p=helm.git diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_cprs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_cprs.ma index e69c6b8d2..aba142ab7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_cprs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_cprs.ma @@ -12,111 +12,63 @@ (* *) (**************************************************************************) -include "basic_2/reduction/lpr_lpr.ma". -include "basic_2/computation/cprs_lift.ma". +include "ground_2/xoa/ex_4_5.ma". +include "basic_2/rt_computation/cpms_cpms.ma". +include "basic_2/rt_computation/cprs_cpr.ma". -(* CONTEXT-SENSITIVE PARALLEL COMPUTATION ON TERMS **************************) +(* CONTEXT-SENSITIVE PARALLEL R-COMPUTATION FOR TERMS ***********************) (* Main properties **********************************************************) (* Basic_1: was: pr3_t *) (* Basic_1: includes: pr1_t *) -theorem cprs_trans: ∀G,L. Transitive … (cprs G L). -normalize /2 width=3 by trans_TC/ qed-. +theorem cprs_trans (h) (G) (L): Transitive … (cpms h G L 0). +/2 width=3 by cpms_trans/ qed-. (* Basic_1: was: pr3_confluence *) (* Basic_1: includes: pr1_confluence *) -theorem cprs_conf: ∀G,L. confluent2 … (cprs G L) (cprs G L). -normalize /3 width=3 by cpr_conf, TC_confluent2/ qed-. - -theorem cprs_bind: ∀a,I,G,L,V1,V2,T1,T2. ⦃G, L.ⓑ{I}V1⦄ ⊢ T1 ➡* T2 → ⦃G, L⦄ ⊢ V1 ➡* V2 → - ⦃G, L⦄ ⊢ ⓑ{a,I}V1.T1 ➡* ⓑ{a,I}V2.T2. -#a #I #G #L #V1 #V2 #T1 #T2 #HT12 #H @(cprs_ind … H) -V2 -/3 width=5 by cprs_trans, cprs_bind_dx/ -qed. +theorem cprs_conf (h) (G) (L): confluent2 … (cpms h G L 0) (cpms h G L 0). +#h #G #L #T0 #T1 #HT01 #T2 #HT02 +elim (TC_confluent2 … T0 T1 … T2) +[ /3 width=3 by cprs_CTC, ex2_intro/ |5,6: skip +| /2 width=1 by cprs_inv_CTC/ +| /2 width=1 by cprs_inv_CTC/ +| /2 width=3 by cpr_conf/ +] +qed-. (* Basic_1: was: pr3_flat *) -theorem cprs_flat: ∀I,G,L,V1,V2,T1,T2. ⦃G, L⦄ ⊢ T1 ➡* T2 → ⦃G, L⦄ ⊢ V1 ➡* V2 → - ⦃G, L⦄ ⊢ ⓕ{I}V1.T1 ➡* ⓕ{I}V2.T2. -#I #G #L #V1 #V2 #T1 #T2 #HT12 #H @(cprs_ind … H) -V2 -/3 width=3 by cprs_flat_dx, cprs_strap1, cpr_pair_sn/ -qed. - -theorem cprs_beta_rc: ∀a,G,L,V1,V2,W1,W2,T1,T2. - ⦃G, L⦄ ⊢ V1 ➡ V2 → ⦃G, L.ⓛW1⦄ ⊢ T1 ➡* T2 → ⦃G, L⦄ ⊢ W1 ➡* W2 → - ⦃G, L⦄ ⊢ ⓐV1.ⓛ{a}W1.T1 ➡* ⓓ{a}ⓝW2.V2.T2. -#a #G #L #V1 #V2 #W1 #W2 #T1 #T2 #HV12 #HT12 #H @(cprs_ind … H) -W2 /2 width=1 by cprs_beta_dx/ -#W #W2 #_ #HW2 #IHW1 (**) (* fulla uto too slow 14s *) -@(cprs_trans … IHW1) -IHW1 /3 width=1 by cprs_flat_dx, cprs_bind/ -qed. - -theorem cprs_beta: ∀a,G,L,V1,V2,W1,W2,T1,T2. - ⦃G, L.ⓛW1⦄ ⊢ T1 ➡* T2 → ⦃G, L⦄ ⊢ W1 ➡* W2 → ⦃G, L⦄ ⊢ V1 ➡* V2 → - ⦃G, L⦄ ⊢ ⓐV1.ⓛ{a}W1.T1 ➡* ⓓ{a}ⓝW2.V2.T2. -#a #G #L #V1 #V2 #W1 #W2 #T1 #T2 #HT12 #HW12 #H @(cprs_ind … H) -V2 /2 width=1 by cprs_beta_rc/ -#V #V2 #_ #HV2 #IHV1 -@(cprs_trans … IHV1) -IHV1 /3 width=1 by cprs_flat_sn, cprs_bind/ -qed. - -theorem cprs_theta_rc: ∀a,G,L,V1,V,V2,W1,W2,T1,T2. - ⦃G, L⦄ ⊢ V1 ➡ V → ⬆[0, 1] V ≘ V2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ➡* T2 → - ⦃G, L⦄ ⊢ W1 ➡* W2 → ⦃G, L⦄ ⊢ ⓐV1.ⓓ{a}W1.T1 ➡* ⓓ{a}W2.ⓐV2.T2. -#a #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV1 #HV2 #HT12 #H @(cprs_ind … H) -W2 -/3 width=5 by cprs_trans, cprs_theta_dx, cprs_bind_dx/ -qed. - -theorem cprs_theta: ∀a,G,L,V1,V,V2,W1,W2,T1,T2. - ⬆[0, 1] V ≘ V2 → ⦃G, L⦄ ⊢ W1 ➡* W2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ➡* T2 → - ⦃G, L⦄ ⊢ V1 ➡* V → ⦃G, L⦄ ⊢ ⓐV1.ⓓ{a}W1.T1 ➡* ⓓ{a}W2.ⓐV2.T2. -#a #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV2 #HW12 #HT12 #H @(cprs_ind_dx … H) -V1 -/3 width=3 by cprs_trans, cprs_theta_rc, cprs_flat_dx/ +theorem cprs_flat (h) (G) (L): + ∀T1,T2. ⦃G,L⦄ ⊢ T1 ➡*[h] T2 → + ∀V1,V2. ⦃G,L⦄ ⊢ V1 ➡*[h] V2 → + ∀I. ⦃G,L⦄ ⊢ ⓕ{I}V1.T1 ➡*[h] ⓕ{I}V2.T2. +#h #G #L #T1 #T2 #HT12 #V1 #V2 #H @(cprs_ind_dx … H) -V2 +[ /2 width=3 by cprs_flat_dx/ +| /3 width=3 by cpr_pair_sn, cprs_step_dx/ +] qed. (* Advanced inversion lemmas ************************************************) (* Basic_1: was pr3_gen_appl *) -lemma cprs_inv_appl1: ∀G,L,V1,T1,U2. ⦃G, L⦄ ⊢ ⓐV1.T1 ➡* U2 → - ∨∨ ∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ➡* V2 & ⦃G, L⦄ ⊢ T1 ➡* T2 & - U2 = ⓐV2. T2 - | ∃∃a,W,T. ⦃G, L⦄ ⊢ T1 ➡* ⓛ{a}W.T & - ⦃G, L⦄ ⊢ ⓓ{a}ⓝW.V1.T ➡* U2 - | ∃∃a,V0,V2,V,T. ⦃G, L⦄ ⊢ V1 ➡* V0 & ⬆[0,1] V0 ≘ V2 & - ⦃G, L⦄ ⊢ T1 ➡* ⓓ{a}V.T & - ⦃G, L⦄ ⊢ ⓓ{a}V.ⓐV2.T ➡* U2. -#G #L #V1 #T1 #U2 #H @(cprs_ind … H) -U2 /3 width=5 by or3_intro0, ex3_2_intro/ -#U #U2 #_ #HU2 * * -[ #V0 #T0 #HV10 #HT10 #H destruct - elim (cpr_inv_appl1 … HU2) -HU2 * - [ #V2 #T2 #HV02 #HT02 #H destruct /4 width=5 by cprs_strap1, or3_intro0, ex3_2_intro/ - | #a #V2 #W #W2 #T #T2 #HV02 #HW2 #HT2 #H1 #H2 destruct - lapply (cprs_strap1 … HV10 … HV02) -V0 #HV12 - lapply (lsubr_cpr_trans … HT2 (L.ⓓⓝW.V1) ?) -HT2 - /5 width=5 by cprs_bind, cprs_flat_dx, cpr_cprs, lsubr_beta, ex2_3_intro, or3_intro1/ - | #a #V #V2 #W0 #W2 #T #T2 #HV0 #HV2 #HW02 #HT2 #H1 #H2 destruct - /5 width=10 by cprs_flat_sn, cprs_bind_dx, cprs_strap1, ex4_5_intro, or3_intro2/ - ] -| /4 width=9 by cprs_strap1, or3_intro1, ex2_3_intro/ -| /4 width=11 by cprs_strap1, or3_intro2, ex4_5_intro/ +(* Basic_2A1: was: cprs_inv_appl1 *) +lemma cprs_inv_appl_sn (h) (G) (L): + ∀V1,T1,X2. ⦃G,L⦄ ⊢ ⓐV1.T1 ➡*[h] X2 → + ∨∨ ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ➡*[h] V2 & + ⦃G,L⦄ ⊢ T1 ➡*[h] T2 & + X2 = ⓐV2. T2 + | ∃∃p,W,T. ⦃G,L⦄ ⊢ T1 ➡*[h] ⓛ{p}W.T & + ⦃G,L⦄ ⊢ ⓓ{p}ⓝW.V1.T ➡*[h] X2 + | ∃∃p,V0,V2,V,T. ⦃G,L⦄ ⊢ V1 ➡*[h] V0 & ⇧*[1] V0 ≘ V2 & + ⦃G,L⦄ ⊢ T1 ➡*[h] ⓓ{p}V.T & + ⦃G,L⦄ ⊢ ⓓ{p}V.ⓐV2.T ➡*[h] X2. +#h #G #L #V1 #T1 #X2 #H elim (cpms_inv_appl_sn … H) -H * +[ /3 width=5 by or3_intro0, ex3_2_intro/ +| #n1 #n2 #p #V2 #T2 #HT12 #HTX2 #H + elim (plus_inv_O3 … H) -H #H1 #H2 destruct + /3 width=5 by or3_intro1, ex2_3_intro/ +| #n1 #n2 #p #V2 #W2 #V #T2 #HV12 #HVW2 #HT12 #HTX2 #H + elim (plus_inv_O3 … H) -H #H1 #H2 destruct + /3 width=9 by or3_intro2, ex4_5_intro/ ] qed-. - -(* Basic_1: was: pr3_strip *) -(* Basic_1: includes: pr1_strip *) -lemma cprs_strip: ∀G,L. confluent2 … (cprs G L) (cpr G L). -normalize /4 width=3 by cpr_conf, TC_strip1/ qed-. - -lemma cprs_lpr_conf_dx: ∀G,L0,T0,T1. ⦃G, L0⦄ ⊢ T0 ➡* T1 → ∀L1. ⦃G, L0⦄ ⊢ ➡ L1 → - ∃∃T. ⦃G, L1⦄ ⊢ T1 ➡* T & ⦃G, L1⦄ ⊢ T0 ➡* T. -#G #L0 #T0 #T1 #H @(cprs_ind … H) -T1 /2 width=3 by ex2_intro/ -#T #T1 #_ #HT1 #IHT0 #L1 #HL01 elim (IHT0 … HL01) -#T2 #HT2 #HT02 elim (lpr_cpr_conf_dx … HT1 … HL01) -L0 -#T3 #HT3 #HT13 elim (cprs_strip … HT2 … HT3) -T -/4 width=5 by cprs_strap2, cprs_strap1, ex2_intro/ -qed-. - -lemma cprs_lpr_conf_sn: ∀G,L0,T0,T1. ⦃G, L0⦄ ⊢ T0 ➡* T1 → - ∀L1. ⦃G, L0⦄ ⊢ ➡ L1 → - ∃∃T. ⦃G, L0⦄ ⊢ T1 ➡* T & ⦃G, L1⦄ ⊢ T0 ➡* T. -#G #L0 #T0 #T1 #HT01 #L1 #HL01 elim (cprs_lpr_conf_dx … HT01 … HL01) -HT01 -/3 width=3 by lpr_cprs_trans, ex2_intro/ -qed-.