From cac628104788b9400cc1a33407272fd4c35f2402 Mon Sep 17 00:00:00 2001 From: Ferruccio Guidi <ferruccio.guidi@unibo.it> Date: Wed, 7 Aug 2013 14:44:32 +0000 Subject: [PATCH] partial commit: "conversion" and "equivalence" components ... --- .../lambdadelta/basic_2/conversion/cpc.ma | 20 +-- .../lambdadelta/basic_2/conversion/cpc_cpc.ma | 4 +- .../lambdadelta/basic_2/equivalence/cpcs.ma | 45 +++--- .../basic_2/equivalence/cpcs_aaa.ma | 4 +- .../basic_2/equivalence/cpcs_cpcs.ma | 128 ++++++++++-------- .../basic_2/equivalence/cpcs_cprs.ma | 32 ++--- .../relations/{pconv_3.ma => pconv_4.ma} | 4 +- .../{pconvstar_3.ma => pconvstar_4.ma} | 4 +- .../lambdadelta/basic_2/web/basic_2_src.tbl | 12 +- 9 files changed, 131 insertions(+), 122 deletions(-) rename matita/matita/contribs/lambdadelta/basic_2/notation/relations/{pconv_3.ma => pconv_4.ma} (89%) rename matita/matita/contribs/lambdadelta/basic_2/notation/relations/{pconvstar_3.ma => pconvstar_4.ma} (89%) diff --git a/matita/matita/contribs/lambdadelta/basic_2/conversion/cpc.ma b/matita/matita/contribs/lambdadelta/basic_2/conversion/cpc.ma index 5be5601ea..116e15950 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/conversion/cpc.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/conversion/cpc.ma @@ -12,29 +12,29 @@ (* *) (**************************************************************************) -include "basic_2/notation/relations/pconv_3.ma". +include "basic_2/notation/relations/pconv_4.ma". include "basic_2/reduction/cpr.ma". (* CONTEXT-SENSITIVE PARALLEL CONVERSION ON TERMS ***************************) -definition cpc: lenv â relation term â - λL,T1,T2. â¦G, L⦠⢠T1 â¡ T2 ⨠â¦G, L⦠⢠T2 â¡ T1. +definition cpc: relation4 genv lenv term term â + λG,L,T1,T2. â¦G, L⦠⢠T1 â¡ T2 ⨠â¦G, L⦠⢠T2 â¡ T1. interpretation "context-sensitive parallel conversion (term)" - 'PConv L T1 T2 = (cpc L T1 T2). + 'PConv G L T1 T2 = (cpc G L T1 T2). (* Basic properties *********************************************************) -lemma cpc_refl: âL. reflexive ⦠(cpc L). +lemma cpc_refl: âG,L. reflexive ⦠(cpc G L). /2 width=1/ qed. -lemma cpc_sym: âL. symmetric ⦠(cpc L). -#L #T1 #T2 * /2 width=1/ +lemma cpc_sym: âG,L. symmetric ⦠(cpc L G). +#G #L #T1 #T2 * /2 width=1/ qed. (* Basic forward lemmas *****************************************************) -lemma cpc_fwd_cpr: âL,T1,T2. â¦G, L⦠⢠T1 ⬠T2 â ââT. â¦G, L⦠⢠T1 â¡ T & â¦G, L⦠⢠T2 â¡ T. -#L #T1 #T2 * /2 width=3/ -qed. +lemma cpc_fwd_cpr: âG,L,T1,T2. â¦G, L⦠⢠T1 ⬠T2 â ââT. â¦G, L⦠⢠T1 â¡ T & â¦G, L⦠⢠T2 â¡ T. +#G #L #T1 #T2 * /2 width=3/ +qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/conversion/cpc_cpc.ma b/matita/matita/contribs/lambdadelta/basic_2/conversion/cpc_cpc.ma index 092d2a9a7..714d3e712 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/conversion/cpc_cpc.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/conversion/cpc_cpc.ma @@ -18,6 +18,6 @@ include "basic_2/conversion/cpc.ma". (* Main properties **********************************************************) -theorem cpc_conf: âL,T0,T1,T2. â¦G, L⦠⢠T0 ⬠T1 â â¦G, L⦠⢠T0 ⬠T2 â +theorem cpc_conf: âG,L,T0,T1,T2. â¦G, L⦠⢠T0 ⬠T1 â â¦G, L⦠⢠T0 ⬠T2 â ââT. â¦G, L⦠⢠T1 ⬠T & â¦G, L⦠⢠T2 ⬠T. -/3 width=3/ qed. +/3 width=3/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs.ma b/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs.ma index a7e5b7514..deb838412 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs.ma @@ -12,73 +12,74 @@ (* *) (**************************************************************************) -include "basic_2/notation/relations/pconvstar_3.ma". +include "basic_2/notation/relations/pconvstar_4.ma". include "basic_2/conversion/cpc.ma". (* CONTEXT-SENSITIVE PARALLEL EQUIVALENCE ON TERMS **************************) -definition cpcs: lenv â relation term â LTC ⦠cpc. +definition cpcs: relation4 genv lenv term term â + λG. LTC ⦠(cpc G). interpretation "context-sensitive parallel equivalence (term)" - 'PConvStar L T1 T2 = (cpcs L T1 T2). + 'PConvStar G L T1 T2 = (cpcs G L T1 T2). (* Basic eliminators ********************************************************) -lemma cpcs_ind: âL,T1. âR:predicate term. R T1 â +lemma cpcs_ind: âG,L,T1. âR:predicate term. R T1 â (âT,T2. â¦G, L⦠⢠T1 â¬* T â â¦G, L⦠⢠T ⬠T2 â R T â R T2) â âT2. â¦G, L⦠⢠T1 â¬* T2 â R T2. -#L #T1 #R #HT1 #IHT1 #T2 #HT12 @(TC_star_ind ⦠HT1 IHT1 ⦠HT12) // +#G #L #T1 #R #HT1 #IHT1 #T2 #HT12 @(TC_star_ind ⦠HT1 IHT1 ⦠HT12) // qed-. -lemma cpcs_ind_dx: âL,T2. âR:predicate term. R T2 â +lemma cpcs_ind_dx: âG,L,T2. âR:predicate term. R T2 â (âT1,T. â¦G, L⦠⢠T1 ⬠T â â¦G, L⦠⢠T â¬* T2 â R T â R T1) â âT1. â¦G, L⦠⢠T1 â¬* T2 â R T1. -#L #T2 #R #HT2 #IHT2 #T1 #HT12 +#G #L #T2 #R #HT2 #IHT2 #T1 #HT12 @(TC_star_ind_dx ⦠HT2 IHT2 ⦠HT12) // qed-. (* Basic properties *********************************************************) (* Basic_1: was: pc3_refl *) -lemma cpcs_refl: âL. reflexive ⦠(cpcs L). +lemma cpcs_refl: âG,L. reflexive ⦠(cpcs G L). /2 width=1/ qed. (* Basic_1: was: pc3_s *) -lemma cpcs_sym: âL. symmetric ⦠(cpcs L). -#L @TC_symmetric // qed. +lemma cpcs_sym: âG,L. symmetric ⦠(cpcs G L). +#G #L @TC_symmetric // qed. -lemma cpc_cpcs: âL,T1,T2. â¦G, L⦠⢠T1 ⬠T2 â â¦G, L⦠⢠T2 â¬* T2. +lemma cpc_cpcs: âG,L,T1,T2. â¦G, L⦠⢠T1 ⬠T2 â â¦G, L⦠⢠T2 â¬* T2. /2 width=1/ qed. -lemma cpcs_strap1: âL,T1,T,T2. â¦G, L⦠⢠T1 â¬* T â â¦G, L⦠⢠T ⬠T2 â â¦G, L⦠⢠T1 â¬* T2. -#L @step qed. +lemma cpcs_strap1: âG,L,T1,T,T2. â¦G, L⦠⢠T1 â¬* T â â¦G, L⦠⢠T ⬠T2 â â¦G, L⦠⢠T1 â¬* T2. +#G #L @step qed. -lemma cpcs_strap2: âL,T1,T,T2. â¦G, L⦠⢠T1 ⬠T â â¦G, L⦠⢠T â¬* T2 â â¦G, L⦠⢠T1 â¬* T2. -#L @TC_strap qed. +lemma cpcs_strap2: âG,L,T1,T,T2. â¦G, L⦠⢠T1 ⬠T â â¦G, L⦠⢠T â¬* T2 â â¦G, L⦠⢠T1 â¬* T2. +#G #L @TC_strap qed. (* Basic_1: was: pc3_pr2_r *) -lemma cpr_cpcs_dx: âL,T1,T2. â¦G, L⦠⢠T1 â¡ T2 â â¦G, L⦠⢠T1 â¬* T2. +lemma cpr_cpcs_dx: âG,L,T1,T2. â¦G, L⦠⢠T1 â¡ T2 â â¦G, L⦠⢠T1 â¬* T2. /3 width=1/ qed. (* Basic_1: was: pc3_pr2_x *) -lemma cpr_cpcs_sn: âL,T1,T2. â¦G, L⦠⢠T2 â¡ T1 â â¦G, L⦠⢠T1 â¬* T2. +lemma cpr_cpcs_sn: âG,L,T1,T2. â¦G, L⦠⢠T2 â¡ T1 â â¦G, L⦠⢠T1 â¬* T2. /3 width=1/ qed. -lemma cpcs_cpr_strap1: âL,T1,T. â¦G, L⦠⢠T1 â¬* T â âT2. â¦G, L⦠⢠T â¡ T2 â â¦G, L⦠⢠T1 â¬* T2. +lemma cpcs_cpr_strap1: âG,L,T1,T. â¦G, L⦠⢠T1 â¬* T â âT2. â¦G, L⦠⢠T â¡ T2 â â¦G, L⦠⢠T1 â¬* T2. /3 width=3/ qed. (* Basic_1: was: pc3_pr2_u *) -lemma cpcs_cpr_strap2: âL,T1,T. â¦G, L⦠⢠T1 â¡ T â âT2. â¦G, L⦠⢠T â¬* T2 â â¦G, L⦠⢠T1 â¬* T2. +lemma cpcs_cpr_strap2: âG,L,T1,T. â¦G, L⦠⢠T1 â¡ T â âT2. â¦G, L⦠⢠T â¬* T2 â â¦G, L⦠⢠T1 â¬* T2. /3 width=3/ qed. -lemma cpcs_cpr_div: âL,T1,T. â¦G, L⦠⢠T1 â¬* T â âT2. â¦G, L⦠⢠T2 â¡ T â â¦G, L⦠⢠T1 â¬* T2. +lemma cpcs_cpr_div: âG,L,T1,T. â¦G, L⦠⢠T1 â¬* T â âT2. â¦G, L⦠⢠T2 â¡ T â â¦G, L⦠⢠T1 â¬* T2. /3 width=3/ qed. -lemma cpr_div: âL,T1,T. â¦G, L⦠⢠T1 â¡ T â âT2. â¦G, L⦠⢠T2 â¡ T â â¦G, L⦠⢠T1 â¬* T2. +lemma cpr_div: âG,L,T1,T. â¦G, L⦠⢠T1 â¡ T â âT2. â¦G, L⦠⢠T2 â¡ T â â¦G, L⦠⢠T1 â¬* T2. /3 width=3/ qed-. (* Basic_1: was: pc3_pr2_u2 *) -lemma cpcs_cpr_conf: âL,T1,T. â¦G, L⦠⢠T â¡ T1 â âT2. â¦G, L⦠⢠T â¬* T2 â â¦G, L⦠⢠T1 â¬* T2. +lemma cpcs_cpr_conf: âG,L,T1,T. â¦G, L⦠⢠T â¡ T1 â âT2. â¦G, L⦠⢠T â¬* T2 â â¦G, L⦠⢠T1 â¬* T2. /3 width=3/ qed. (* Basic_1: removed theorems 9: diff --git a/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs_aaa.ma index 1a5e48687..ce4bf678e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs_aaa.ma @@ -19,10 +19,10 @@ include "basic_2/equivalence/cpcs_cpcs.ma". (* Main properties about atomic arity assignment on terms *******************) -theorem aaa_cpcs_mono: âL,T1,T2. â¦G, L⦠⢠T1 â¬* T2 â +theorem aaa_cpcs_mono: âG,L,T1,T2. â¦G, L⦠⢠T1 â¬* T2 â âA1. â¦G, L⦠⢠T1 â A1 â âA2. â¦G, L⦠⢠T2 â A2 â A1 = A2. -#L #T1 #T2 #HT12 #A1 #HA1 #A2 #HA2 +#G #L #T1 #T2 #HT12 #A1 #HA1 #A2 #HA2 elim (cpcs_inv_cprs ⦠HT12) -HT12 #T #HT1 #HT2 lapply (aaa_cprs_conf ⦠HA1 ⦠HT1) -T1 #HA1 lapply (aaa_cprs_conf ⦠HA2 ⦠HT2) -T2 #HA2 diff --git a/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs_cpcs.ma b/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs_cpcs.ma index 125cc70fe..e6ef1a9ad 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs_cpcs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs_cpcs.ma @@ -20,9 +20,9 @@ include "basic_2/equivalence/cpcs_cprs.ma". (* Advanced inversion lemmas ************************************************) -lemma cpcs_inv_cprs: âL,T1,T2. â¦G, L⦠⢠T1 â¬* T2 â +lemma cpcs_inv_cprs: âG,L,T1,T2. â¦G, L⦠⢠T1 â¬* T2 â ââT. â¦G, L⦠⢠T1 â¡* T & â¦G, L⦠⢠T2 â¡* T. -#L #T1 #T2 #H @(cpcs_ind ⦠H) -T2 +#G #L #T1 #T2 #H @(cpcs_ind ⦠H) -T2 [ /3 width=3/ | #T #T2 #_ #HT2 * #T0 #HT10 elim HT2 -HT2 #HT2 #HT0 [ elim (cprs_strip ⦠HT0 ⦠HT2) -T #T #HT0 #HT2 @@ -33,38 +33,38 @@ lemma cpcs_inv_cprs: âL,T1,T2. â¦G, L⦠⢠T1 â¬* T2 â qed-. (* Basic_1: was: pc3_gen_sort *) -lemma cpcs_inv_sort: âL,k1,k2. â¦G, L⦠⢠âk1 â¬* âk2 â k1 = k2. -#L #k1 #k2 #H +lemma cpcs_inv_sort: âG,L,k1,k2. â¦G, L⦠⢠âk1 â¬* âk2 â k1 = k2. +#G #L #k1 #k2 #H elim (cpcs_inv_cprs ⦠H) -H #T #H1 >(cprs_inv_sort1 ⦠H1) -T #H2 lapply (cprs_inv_sort1 ⦠H2) -L #H destruct // qed-. -lemma cpcs_inv_abst1: âa,L,W1,T1,T. â¦G, L⦠⢠â{a}W1.T1 â¬* T â +lemma cpcs_inv_abst1: âa,G,L,W1,T1,T. â¦G, L⦠⢠â{a}W1.T1 â¬* T â ââW2,T2. â¦G, L⦠⢠T â¡* â{a}W2.T2 & â¦G, L⦠⢠â{a}W1.T1 â¡* â{a}W2.T2. -#a #L #W1 #T1 #T #H +#a #G #L #W1 #T1 #T #H elim (cpcs_inv_cprs ⦠H) -H #X #H1 #H2 elim (cprs_inv_abst1 ⦠H1) -H1 #W2 #T2 #HW12 #HT12 #H destruct @(ex2_2_intro ⦠H2) -H2 /2 width=2/ (**) (* explicit constructor, /3 width=6/ is slow *) qed-. -lemma cpcs_inv_abst2: âa,L,W1,T1,T. â¦G, L⦠⢠T â¬* â{a}W1.T1 â +lemma cpcs_inv_abst2: âa,G,L,W1,T1,T. â¦G, L⦠⢠T â¬* â{a}W1.T1 â ââW2,T2. â¦G, L⦠⢠T â¡* â{a}W2.T2 & â¦G, L⦠⢠â{a}W1.T1 â¡* â{a}W2.T2. /3 width=1 by cpcs_inv_abst1, cpcs_sym/ qed-. (* Basic_1: was: pc3_gen_sort_abst *) -lemma cpcs_inv_sort_abst: âa,L,W,T,k. â¦G, L⦠⢠âk â¬* â{a}W.T â â¥. -#a #L #W #T #k #H +lemma cpcs_inv_sort_abst: âa,G,L,W,T,k. â¦G, L⦠⢠âk â¬* â{a}W.T â â¥. +#a #G #L #W #T #k #H elim (cpcs_inv_cprs ⦠H) -H #X #H1 >(cprs_inv_sort1 ⦠H1) -X #H2 elim (cprs_inv_abst1 ⦠H2) -H2 #W0 #T0 #_ #_ #H destruct qed-. (* Basic_1: was: pc3_gen_lift *) -lemma cpcs_inv_lift: âL,K,d,e. â©[d, e] L â¡ K â +lemma cpcs_inv_lift: âG,L,K,d,e. â©[d, e] L â¡ K â âT1,U1. â§[d, e] T1 â¡ U1 â âT2,U2. â§[d, e] T2 â¡ U2 â - â¦G, L⦠⢠U1 â¬* U2 â K ⢠T1 â¬* T2. -#L #K #d #e #HLK #T1 #U1 #HTU1 #T2 #U2 #HTU2 #HU12 + â¦G, L⦠⢠U1 â¬* U2 â â¦G, K⦠⢠T1 â¬* T2. +#G #L #K #d #e #HLK #T1 #U1 #HTU1 #T2 #U2 #HTU2 #HU12 elim (cpcs_inv_cprs ⦠HU12) -HU12 #U #HU1 #HU2 elim (cprs_inv_lift1 ⦠HU1 ⦠HLK ⦠HTU1) -U1 #T #HTU #HT1 elim (cprs_inv_lift1 ⦠HU2 ⦠HLK ⦠HTU2) -L -U2 #X #HXU @@ -73,100 +73,105 @@ qed-. (* Advanced properties ******************************************************) -lemma lpr_cpcs_trans: âL1,L2. L1 ⢠⡠L2 â âT1,T2. L2 ⢠T1 â¬* T2 â L1 ⢠T1 â¬* T2. -#L1 #L2 #HL12 #T1 #T2 #H +lemma lpr_cpcs_trans: âG,L1,L2. â¦G, L1⦠⢠⡠L2 â + âT1,T2. â¦G, L2⦠⢠T1 â¬* T2 â â¦G, L1⦠⢠T1 â¬* T2. +#G #L1 #L2 #HL12 #T1 #T2 #H elim (cpcs_inv_cprs ⦠H) -H #T #HT1 #HT2 lapply (lpr_cprs_trans ⦠HT1 ⦠HL12) -HT1 lapply (lpr_cprs_trans ⦠HT2 ⦠HL12) -L2 /2 width=3/ qed-. -lemma lprs_cpcs_trans: âL1,L2. L1 ⢠â¡* L2 â âT1,T2. L2 ⢠T1 â¬* T2 â L1 ⢠T1 â¬* T2. -#L1 #L2 #HL12 #T1 #T2 #H +lemma lprs_cpcs_trans: âG,L1,L2. â¦G, L1⦠⢠â¡* L2 â + âT1,T2. â¦G, L2⦠⢠T1 â¬* T2 â â¦G, L1⦠⢠T1 â¬* T2. +#G #L1 #L2 #HL12 #T1 #T2 #H elim (cpcs_inv_cprs ⦠H) -H #T #HT1 #HT2 lapply (lprs_cprs_trans ⦠HT1 ⦠HL12) -HT1 lapply (lprs_cprs_trans ⦠HT2 ⦠HL12) -L2 /2 width=3/ qed-. -lemma cpr_cprs_conf_cpcs: âL,T,T1,T2. â¦G, L⦠⢠T â¡* T1 â â¦G, L⦠⢠T â¡ T2 â â¦G, L⦠⢠T1 â¬* T2. -#L #T #T1 #T2 #HT1 #HT2 +lemma cpr_cprs_conf_cpcs: âG,L,T,T1,T2. â¦G, L⦠⢠T â¡* T1 â â¦G, L⦠⢠T â¡ T2 â â¦G, L⦠⢠T1 â¬* T2. +#G #L #T #T1 #T2 #HT1 #HT2 elim (cprs_strip ⦠HT1 ⦠HT2) /2 width=3 by cpr_cprs_div/ qed-. -lemma cprs_cpr_conf_cpcs: âL,T,T1,T2. â¦G, L⦠⢠T â¡* T1 â â¦G, L⦠⢠T â¡ T2 â â¦G, L⦠⢠T2 â¬* T1. -#L #T #T1 #T2 #HT1 #HT2 +lemma cprs_cpr_conf_cpcs: âG,L,T,T1,T2. â¦G, L⦠⢠T â¡* T1 â â¦G, L⦠⢠T â¡ T2 â â¦G, L⦠⢠T2 â¬* T1. +#G #L #T #T1 #T2 #HT1 #HT2 elim (cprs_strip ⦠HT1 ⦠HT2) /2 width=3 by cprs_cpr_div/ qed-. -lemma cprs_conf_cpcs: âL,T,T1,T2. â¦G, L⦠⢠T â¡* T1 â â¦G, L⦠⢠T â¡* T2 â â¦G, L⦠⢠T1 â¬* T2. -#L #T #T1 #T2 #HT1 #HT2 +lemma cprs_conf_cpcs: âG,L,T,T1,T2. â¦G, L⦠⢠T â¡* T1 â â¦G, L⦠⢠T â¡* T2 â â¦G, L⦠⢠T1 â¬* T2. +#G #L #T #T1 #T2 #HT1 #HT2 elim (cprs_conf ⦠HT1 ⦠HT2) /2 width=3/ qed-. -lemma lprs_cprs_conf: âL1,L2. L1 ⢠â¡* L2 â âT1,T2. L1 ⢠T1 â¡* T2 â L2 ⢠T1 â¬* T2. -#L1 #L2 #HL12 #T1 #T2 #HT12 +lemma lprs_cprs_conf: âG,L1,L2. â¦G, L1⦠⢠â¡* L2 â + âT1,T2. â¦G, L1⦠⢠T1 â¡* T2 â â¦G, L2⦠⢠T1 â¬* T2. +#G #L1 #L2 #HL12 #T1 #T2 #HT12 elim (lprs_cprs_conf_dx ⦠HT12 ⦠HL12) -L1 /2 width=3/ qed-. (* Basic_1: was: pc3_wcpr0_t *) (* Basic_1: note: pc3_wcpr0_t should be renamed *) -lemma lpr_cprs_conf: âL1,L2. L1 ⢠⡠L2 â âT1,T2. L1 ⢠T1 â¡* T2 â L2 ⢠T1 â¬* T2. +lemma lpr_cprs_conf: âG,L1,L2. â¦G, L1⦠⢠⡠L2 â + âT1,T2. â¦G, L1⦠⢠T1 â¡* T2 â â¦G, L2⦠⢠T1 â¬* T2. /3 width=5 by lprs_cprs_conf, lpr_lprs/ qed-. (* Basic_1: was only: pc3_pr0_pr2_t *) (* Basic_1: note: pc3_pr0_pr2_t should be renamed *) -lemma lpr_cpr_conf: âL1,L2. L1 ⢠⡠L2 â âT1,T2. L1 ⢠T1 â¡ T2 â L2 ⢠T1 â¬* T2. +lemma lpr_cpr_conf: âG,L1,L2. â¦G, L1⦠⢠⡠L2 â + âT1,T2. â¦G, L1⦠⢠T1 â¡ T2 â â¦G, L2⦠⢠T1 â¬* T2. /3 width=5 by lpr_cprs_conf, cpr_cprs/ qed-. (* Basic_1: was only: pc3_thin_dx *) -lemma cpcs_flat: âL,V1,V2. â¦G, L⦠⢠V1 â¬* V2 â âT1,T2. â¦G, L⦠⢠T1 â¬* T2 â - âI. â¦G, L⦠⢠â{I}V1. T1 â¬* â{I}V2. T2. -#L #V1 #V2 #HV12 #T1 #T2 #HT12 #I +lemma cpcs_flat: âG,L,V1,V2. â¦G, L⦠⢠V1 â¬* V2 â âT1,T2. â¦G, L⦠⢠T1 â¬* T2 â + âI. â¦G, L⦠⢠â{I}V1.T1 â¬* â{I}V2.T2. +#G #L #V1 #V2 #HV12 #T1 #T2 #HT12 #I elim (cpcs_inv_cprs ⦠HV12) -HV12 #V #HV1 #HV2 elim (cpcs_inv_cprs ⦠HT12) -HT12 /3 width=5 by cprs_flat, cprs_div/ (**) (* /3 width=5/ is too slow *) qed. -lemma cpcs_flat_dx_cpr_rev: âL,V1,V2. â¦G, L⦠⢠V2 â¡ V1 â âT1,T2. â¦G, L⦠⢠T1 â¬* T2 â - âI. â¦G, L⦠⢠â{I}V1. T1 â¬* â{I}V2. T2. +lemma cpcs_flat_dx_cpr_rev: âG,L,V1,V2. â¦G, L⦠⢠V2 â¡ V1 â âT1,T2. â¦G, L⦠⢠T1 â¬* T2 â + âI. â¦G, L⦠⢠â{I}V1.T1 â¬* â{I}V2.T2. /3 width=1/ qed. -lemma cpcs_bind_dx: âa,I,L,V,T1,T2. L.â{I}V ⢠T1 â¬* T2 â - â¦G, L⦠⢠â{a,I}V. T1 â¬* â{a,I}V. T2. -#a #I #L #V #T1 #T2 #HT12 +lemma cpcs_bind_dx: âa,I,G,L,V,T1,T2. â¦G, L.â{I}V⦠⢠T1 â¬* T2 â + â¦G, L⦠⢠â{a,I}V.T1 â¬* â{a,I}V.T2. +#a #I #G #L #V #T1 #T2 #HT12 elim (cpcs_inv_cprs ⦠HT12) -HT12 /3 width=5 by cprs_div, cprs_bind/ (**) (* /3 width=5/ is a bit slow *) qed. -lemma cpcs_bind_sn: âa,I,L,V1,V2,T. â¦G, L⦠⢠V1 â¬* V2 â â¦G, L⦠⢠â{a,I}V1. T â¬* â{a,I}V2. T. -#a #I #L #V1 #V2 #T #HV12 +lemma cpcs_bind_sn: âa,I,G,L,V1,V2,T. â¦G, L⦠⢠V1 â¬* V2 â â¦G, L⦠⢠â{a,I}V1. T â¬* â{a,I}V2. T. +#a #I #G #L #V1 #V2 #T #HV12 elim (cpcs_inv_cprs ⦠HV12) -HV12 /3 width=5 by cprs_div, cprs_bind/ (**) (* /3 width=5/ is a bit slow *) qed. -lemma lsubr_cpcs_trans: âL1,T1,T2. L1 ⢠T1 â¬* T2 â - âL2. L2 â L1 â L2 ⢠T1 â¬* T2. -#L1 #T1 #T2 #HT12 +lemma lsubr_cpcs_trans: âG,L1,T1,T2. â¦G, L1⦠⢠T1 â¬* T2 â + âL2. L2 â L1 â â¦G, L2⦠⢠T1 â¬* T2. +#G #L1 #T1 #T2 #HT12 elim (cpcs_inv_cprs ⦠HT12) -HT12 /3 width=5 by cprs_div, lsubr_cprs_trans/ (**) (* /3 width=5/ is a bit slow *) qed-. (* Basic_1: was: pc3_lift *) -lemma cpcs_lift: âL,K,d,e. â©[d, e] L â¡ K â +lemma cpcs_lift: âG,L,K,d,e. â©[d, e] L â¡ K â âT1,U1. â§[d, e] T1 â¡ U1 â âT2,U2. â§[d, e] T2 â¡ U2 â - K ⢠T1 â¬* T2 â â¦G, L⦠⢠U1 â¬* U2. -#L #K #d #e #HLK #T1 #U1 #HTU1 #T2 #U2 #HTU2 #HT12 + â¦G, K⦠⢠T1 â¬* T2 â â¦G, L⦠⢠U1 â¬* U2. +#G #L #K #d #e #HLK #T1 #U1 #HTU1 #T2 #U2 #HTU2 #HT12 elim (cpcs_inv_cprs ⦠HT12) -HT12 #T #HT1 #HT2 elim (lift_total T d e) #U #HTU lapply (cprs_lift ⦠HT1 ⦠HLK ⦠HTU1 ⦠HTU) -T1 #HU1 lapply (cprs_lift ⦠HT2 ⦠HLK ⦠HTU2 ⦠HTU) -K -T2 -T -d -e /2 width=3/ qed. -lemma cpcs_strip: âL,T1,T. â¦G, L⦠⢠T â¬* T1 â âT2. â¦G, L⦠⢠T ⬠T2 â +lemma cpcs_strip: âG,L,T1,T. â¦G, L⦠⢠T â¬* T1 â âT2. â¦G, L⦠⢠T ⬠T2 â ââT0. â¦G, L⦠⢠T1 ⬠T0 & â¦G, L⦠⢠T2 â¬* T0. -#L #T1 #T @TC_strip1 /2 width=3/ qed-. +#G #L #T1 #T @TC_strip1 /2 width=3 by cpc_conf/ qed-. (* More inversion lemmas ****************************************************) -lemma cpcs_inv_abst_sn: âa1,a2,L,W1,W2,T1,T2. â¦G, L⦠⢠â{a1}W1.T1 â¬* â{a2}W2.T2 â - â§â§ â¦G, L⦠⢠W1 â¬* W2 & L.âW1 ⢠T1 â¬* T2 & a1 = a2. -#a1 #a2 #L #W1 #W2 #T1 #T2 #H +lemma cpcs_inv_abst_sn: âa1,a2,G,L,W1,W2,T1,T2. â¦G, L⦠⢠â{a1}W1.T1 â¬* â{a2}W2.T2 â + â§â§ â¦G, L⦠⢠W1 â¬* W2 & â¦G, L.âW1⦠⢠T1 â¬* T2 & a1 = a2. +#a1 #a2 #G #L #W1 #W2 #T1 #T2 #H elim (cpcs_inv_cprs ⦠H) -H #T #H1 #H2 elim (cprs_inv_abst1 ⦠H1) -H1 #W0 #T0 #HW10 #HT10 #H destruct elim (cprs_inv_abst1 ⦠H2) -H2 #W #T #HW2 #HT2 #H destruct @@ -175,9 +180,9 @@ lapply (lprs_cpcs_trans ⦠(L.âW1) ⦠HT2) /2 width=1/ -HT2 #HT2 /4 width=3 by and3_intro, cprs_div, cpcs_cprs_div, cpcs_sym/ qed-. -lemma cpcs_inv_abst_dx: âa1,a2,L,W1,W2,T1,T2. â¦G, L⦠⢠â{a1}W1.T1 â¬* â{a2}W2.T2 â - â§â§ â¦G, L⦠⢠W1 â¬* W2 & L. âW2 ⢠T1 â¬* T2 & a1 = a2. -#a1 #a2 #L #W1 #W2 #T1 #T2 #HT12 +lemma cpcs_inv_abst_dx: âa1,a2,G,L,W1,W2,T1,T2. â¦G, L⦠⢠â{a1}W1.T1 â¬* â{a2}W2.T2 â + â§â§ â¦G, L⦠⢠W1 â¬* W2 & â¦G, L.âW2⦠⢠T1 â¬* T2 & a1 = a2. +#a1 #a2 #G #L #W1 #W2 #T1 #T2 #HT12 lapply (cpcs_sym ⦠HT12) -HT12 #HT12 elim (cpcs_inv_abst_sn ⦠HT12) -HT12 /3 width=1/ qed-. @@ -185,29 +190,32 @@ qed-. (* Main properties **********************************************************) (* Basic_1: was pc3_t *) -theorem cpcs_trans: âL,T1,T. â¦G, L⦠⢠T1 â¬* T â âT2. â¦G, L⦠⢠T â¬* T2 â â¦G, L⦠⢠T1 â¬* T2. -#L #T1 #T #HT1 #T2 @(trans_TC ⦠HT1) qed-. +theorem cpcs_trans: âG,L,T1,T. â¦G, L⦠⢠T1 â¬* T â âT2. â¦G, L⦠⢠T â¬* T2 â â¦G, L⦠⢠T1 â¬* T2. +#G #L #T1 #T #HT1 #T2 @(trans_TC ⦠HT1) qed-. -theorem cpcs_canc_sn: âL,T,T1,T2. â¦G, L⦠⢠T â¬* T1 â â¦G, L⦠⢠T â¬* T2 â â¦G, L⦠⢠T1 â¬* T2. +theorem cpcs_canc_sn: âG,L,T,T1,T2. â¦G, L⦠⢠T â¬* T1 â â¦G, L⦠⢠T â¬* T2 â â¦G, L⦠⢠T1 â¬* T2. /3 width=3 by cpcs_trans, cpcs_sym/ qed-. (**) (* /3 width=3/ is too slow *) -theorem cpcs_canc_dx: âL,T,T1,T2. â¦G, L⦠⢠T1 â¬* T â â¦G, L⦠⢠T2 â¬* T â â¦G, L⦠⢠T1 â¬* T2. +theorem cpcs_canc_dx: âG,L,T,T1,T2. â¦G, L⦠⢠T1 â¬* T â â¦G, L⦠⢠T2 â¬* T â â¦G, L⦠⢠T1 â¬* T2. /3 width=3 by cpcs_trans, cpcs_sym/ qed-. (**) (* /3 width=3/ is too slow *) -lemma cpcs_bind1: âa,I,L,V1,V2. â¦G, L⦠⢠V1 â¬* V2 â âT1,T2. L.â{I}V1 ⢠T1 â¬* T2 â +lemma cpcs_bind1: âa,I,G,L,V1,V2. â¦G, L⦠⢠V1 â¬* V2 â + âT1,T2. â¦G, L.â{I}V1⦠⢠T1 â¬* T2 â â¦G, L⦠⢠â{a,I}V1. T1 â¬* â{a,I}V2. T2. -#a #I #L #V1 #V2 #HV12 #T1 #T2 #HT12 +#a #I #G #L #V1 #V2 #HV12 #T1 #T2 #HT12 @(cpcs_trans ⦠(â{a,I}V1.T2)) /2 width=1/ qed. -lemma cpcs_bind2: âa,I,L,V1,V2. â¦G, L⦠⢠V1 â¬* V2 â âT1,T2. L.â{I}V2 ⢠T1 â¬* T2 â +lemma cpcs_bind2: âa,I,G,L,V1,V2. â¦G, L⦠⢠V1 â¬* V2 â + âT1,T2. â¦G, L.â{I}V2⦠⢠T1 â¬* T2 â â¦G, L⦠⢠â{a,I}V1. T1 â¬* â{a,I}V2. T2. -#a #I #L #V1 #V2 #HV12 #T1 #T2 #HT12 +#a #I #G #L #V1 #V2 #HV12 #T1 #T2 #HT12 @(cpcs_trans ⦠(â{a,I}V2.T1)) /2 width=1/ qed. (* Basic_1: was: pc3_wcpr0 *) -lemma lpr_cpcs_conf: âL1,L2. L1 ⢠⡠L2 â âT1,T2. L1 ⢠T1 â¬* T2 â L2 ⢠T1 â¬* T2. -#L1 #L2 #HL12 #T1 #T2 #H +lemma lpr_cpcs_conf: âG,L1,L2. â¦G, L1⦠⢠⡠L2 â + âT1,T2. â¦G, L1⦠⢠T1 â¬* T2 â â¦G, L2⦠⢠T1 â¬* T2. +#G #L1 #L2 #HL12 #T1 #T2 #H elim (cpcs_inv_cprs ⦠H) -H /3 width=5 by cpcs_canc_dx, lpr_cprs_conf/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs_cprs.ma b/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs_cprs.ma index 30ee9fb9d..69641dbf7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs_cprs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs_cprs.ma @@ -20,40 +20,40 @@ include "basic_2/equivalence/cpcs.ma". (* Properties about context sensitive computation on terms ******************) (* Basic_1: was: pc3_pr3_r *) -lemma cpcs_cprs_dx: âL,T1,T2. â¦G, L⦠⢠T1 â¡* T2 â â¦G, L⦠⢠T1 â¬* T2. -#L #T1 #T2 #H @(cprs_ind ⦠H) -T2 /width=1/ /3 width=3/ +lemma cpcs_cprs_dx: âG,L,T1,T2. â¦G, L⦠⢠T1 â¡* T2 â â¦G, L⦠⢠T1 â¬* T2. +#G #L #T1 #T2 #H @(cprs_ind ⦠H) -T2 /width=1/ /3 width=3/ qed. (* Basic_1: was: pc3_pr3_x *) -lemma cpcs_cprs_sn: âL,T1,T2. â¦G, L⦠⢠T2 â¡* T1 â â¦G, L⦠⢠T1 â¬* T2. -#L #T1 #T2 #H @(cprs_ind_dx ⦠H) -T2 /width=1/ /3 width=3/ +lemma cpcs_cprs_sn: âG,L,T1,T2. â¦G, L⦠⢠T2 â¡* T1 â â¦G, L⦠⢠T1 â¬* T2. +#G #L #T1 #T2 #H @(cprs_ind_dx ⦠H) -T2 /width=1/ /3 width=3/ qed. -lemma cpcs_cprs_strap1: âL,T1,T. â¦G, L⦠⢠T1 â¬* T â âT2. â¦G, L⦠⢠T â¡* T2 â â¦G, L⦠⢠T1 â¬* T2. -#L #T1 #T #HT1 #T2 #H @(cprs_ind ⦠H) -T2 /width=1/ /2 width=3/ +lemma cpcs_cprs_strap1: âG,L,T1,T. â¦G, L⦠⢠T1 â¬* T â âT2. â¦G, L⦠⢠T â¡* T2 â â¦G, L⦠⢠T1 â¬* T2. +#G #L #T1 #T #HT1 #T2 #H @(cprs_ind ⦠H) -T2 /width=1/ /2 width=3/ qed. -lemma cpcs_cprs_strap2: âL,T1,T. â¦G, L⦠⢠T1 â¡* T â âT2. â¦G, L⦠⢠T â¬* T2 â â¦G, L⦠⢠T1 â¬* T2. -#L #T1 #T #H #T2 #HT2 @(cprs_ind_dx ⦠H) -T1 /width=1/ /2 width=3/ +lemma cpcs_cprs_strap2: âG,L,T1,T. â¦G, L⦠⢠T1 â¡* T â âT2. â¦G, L⦠⢠T â¬* T2 â â¦G, L⦠⢠T1 â¬* T2. +#G #L #T1 #T #H #T2 #HT2 @(cprs_ind_dx ⦠H) -T1 /width=1/ /2 width=3/ qed. -lemma cpcs_cprs_div: âL,T1,T. â¦G, L⦠⢠T1 â¬* T â âT2. â¦G, L⦠⢠T2 â¡* T â â¦G, L⦠⢠T1 â¬* T2. -#L #T1 #T #HT1 #T2 #H @(cprs_ind_dx ⦠H) -T2 /width=1/ /2 width=3/ +lemma cpcs_cprs_div: âG,L,T1,T. â¦G, L⦠⢠T1 â¬* T â âT2. â¦G, L⦠⢠T2 â¡* T â â¦G, L⦠⢠T1 â¬* T2. +#G #L #T1 #T #HT1 #T2 #H @(cprs_ind_dx ⦠H) -T2 /width=1/ /2 width=3/ qed. (* Basic_1: was: pc3_pr3_conf *) -lemma cpcs_cprs_conf: âL,T1,T. â¦G, L⦠⢠T â¡* T1 â âT2. â¦G, L⦠⢠T â¬* T2 â â¦G, L⦠⢠T1 â¬* T2. -#L #T1 #T #H #T2 #HT2 @(cprs_ind ⦠H) -T1 /width=1/ /2 width=3/ +lemma cpcs_cprs_conf: âG,L,T1,T. â¦G, L⦠⢠T â¡* T1 â âT2. â¦G, L⦠⢠T â¬* T2 â â¦G, L⦠⢠T1 â¬* T2. +#G #L #T1 #T #H #T2 #HT2 @(cprs_ind ⦠H) -T1 /width=1/ /2 width=3/ qed. (* Basic_1: was: pc3_pr3_t *) (* Basic_1: note: pc3_pr3_t should be renamed *) -lemma cprs_div: âL,T1,T. â¦G, L⦠⢠T1 â¡* T â âT2. â¦G, L⦠⢠T2 â¡* T â â¦G, L⦠⢠T1 â¬* T2. -#L #T1 #T #HT1 #T2 #H @(cprs_ind_dx ⦠H) -T2 /2 width=1/ /2 width=3/ +lemma cprs_div: âG,L,T1,T. â¦G, L⦠⢠T1 â¡* T â âT2. â¦G, L⦠⢠T2 â¡* T â â¦G, L⦠⢠T1 â¬* T2. +#G #L #T1 #T #HT1 #T2 #H @(cprs_ind_dx ⦠H) -T2 /2 width=1/ /2 width=3/ qed. -lemma cprs_cpr_div: âL,T1,T. â¦G, L⦠⢠T1 â¡* T â âT2. â¦G, L⦠⢠T2 â¡ T â â¦G, L⦠⢠T1 â¬* T2. +lemma cprs_cpr_div: âG,L,T1,T. â¦G, L⦠⢠T1 â¡* T â âT2. â¦G, L⦠⢠T2 â¡ T â â¦G, L⦠⢠T1 â¬* T2. /3 width=5 by cpr_cprs, cprs_div/ qed-. -lemma cpr_cprs_div: âL,T1,T. â¦G, L⦠⢠T1 â¡ T â âT2. â¦G, L⦠⢠T2 â¡* T â â¦G, L⦠⢠T1 â¬* T2. +lemma cpr_cprs_div: âG,L,T1,T. â¦G, L⦠⢠T1 â¡ T â âT2. â¦G, L⦠⢠T2 â¡* T â â¦G, L⦠⢠T1 â¬* T2. /3 width=3 by cpr_cprs, cprs_div/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pconv_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pconv_4.ma similarity index 89% rename from matita/matita/contribs/lambdadelta/basic_2/notation/relations/pconv_3.ma rename to matita/matita/contribs/lambdadelta/basic_2/notation/relations/pconv_4.ma index c4a789ab8..a7563d0c0 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pconv_3.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pconv_4.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( â¦G, L⦠⢠break term 46 T1 ⬠break term 46 T2 )" +notation "hvbox( ⦠term 46 G, break term 46 L ⦠⢠break term 46 T1 ⬠break term 46 T2 )" non associative with precedence 45 - for @{ 'PConv $L $T1 $T2 }. + for @{ 'PConv $G $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pconvstar_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pconvstar_4.ma similarity index 89% rename from matita/matita/contribs/lambdadelta/basic_2/notation/relations/pconvstar_3.ma rename to matita/matita/contribs/lambdadelta/basic_2/notation/relations/pconvstar_4.ma index 2088bc68d..f263e5d06 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pconvstar_3.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pconvstar_4.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( â¦G, L⦠⢠break term 46 T1 â¬* break term 46 T2 )" +notation "hvbox( ⦠term 46 G, break term 46 L ⦠⢠break term 46 T1 â¬* break term 46 T2 )" non associative with precedence 45 - for @{ 'PConvStar $L $T1 $T2 }. + for @{ 'PConvStar $G $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/web/basic_2_src.tbl b/matita/matita/contribs/lambdadelta/basic_2/web/basic_2_src.tbl index 7a7d92d17..0bd584cac 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/web/basic_2_src.tbl +++ b/matita/matita/contribs/lambdadelta/basic_2/web/basic_2_src.tbl @@ -40,19 +40,19 @@ table { ] *) [ { "\"big tree\" parallel computation" * } { - [ "yprs ( ? ⢠â¦?,?⦠â¥[g] â¦?,?⦠)" "yprs_yprs" "ygt ( ? ⢠â¦?,?⦠>[g] â¦?,?⦠)" "ygt_ygt" * ] + [ "yprs ( ? ⢠â¦?,?,?⦠â¥[?,?] â¦?,?,?⦠)" "yprs_yprs" "ygt ( â¦?,?,?⦠>[?,?] â¦?,?,?⦠)" "ygt_ygt" * ] } ] [ { "\"big tree\" parallel reduction" * } { - [ "ypr ( ? ⢠â¦?,?⦠â½[g] â¦?,?⦠)" "ysc ( ? ⢠â¦?,?⦠â»[g] â¦?,?⦠)" * ] + [ "ypr ( â¦?,?,?⦠â½[?,?] â¦?,?,?⦠)" "ysc ( â¦?,?,?⦠â»[?,?] â¦?,?,?⦠)" * ] } ] [ { "local env. ref. for stratified native validity" * } { - [ "lsubsv ( ? ⢠? ¡â[?] ? )" "lsubsv_ldrop" + "lsubsv_lsuba" + "lsubsv_ssta" + "lsubsv_dxprs" + "lsubsv_cpcs" + "lsubsv_snv" * ] + [ "lsubsv ( ? ⢠? ¡â[?,?] ? )" "lsubsv_ldrop" + "lsubsv_lsuba" + "lsubsv_ssta" + "lsubsv_dxprs" + "lsubsv_cpcs" + "lsubsv_snv" * ] } ] [ { "stratified native validity" * } { - [ "snv ( â¦?,?⦠⢠? ¡[?] )" "snv_lift" + "snv_aaa" + "snv_ssta" + "snv_sstas" + "snv_ssta_lpr" + "snv_lpr" + "snv_cpcs" * ] + [ "snv ( â¦?,?⦠⢠? ¡[?,?] )" "snv_lift" + "snv_aaa" + "snv_ssta" + "snv_sstas" + "snv_ssta_lpr" + "snv_lpr" + "snv_cpcs" * ] } ] } @@ -60,7 +60,7 @@ table { class "blue" [ { "equivalence" * } { [ { "context-sensitive equivalence" * } { - [ "cpcs ( ? ⢠? â¬* ? )" "cpcs_aaa" + "cpcs_cprs" + "cpcs_cpcs" * ] + [ "cpcs ( â¦?,?⦠⢠? â¬* ? )" "cpcs_aaa" + "cpcs_cprs" + "cpcs_cpcs" * ] } ] } @@ -68,7 +68,7 @@ table { class "sky" [ { "conversion" * } { [ { "context-sensitive conversion" * } { - [ "cpc ( ? ⢠? ⬠? )" "cpc_cpc" * ] + [ "cpc ( â¦?,?⦠⢠? ⬠? )" "cpc_cpc" * ] } ] } -- 2.39.5