From bd53c4e895203eb049e75434f638f26b5a161a2b Mon Sep 17 00:00:00 2001 From: Ferruccio Guidi Date: Wed, 8 Jan 2020 22:39:47 +0100 Subject: [PATCH] update in ground_2, static_2, basic_2, apps_2, alpha_1 + updated notation with uniform bracket policy + notation update for acr + some renaming in alpha_1 --- .../alpha_1/notation/functions/snabstneg_1.ma | 2 +- .../alpha_1/notation/functions/sngref_2.ma | 4 +- .../alpha_1/notation/functions/snitem1_2.ma | 2 +- .../alpha_1/notation/functions/snlref_2.ma | 2 +- .../alpha_1/notation/functions/snproj_3.ma | 4 +- .../alpha_1/notation/functions/snprojneg_2.ma | 2 +- .../alpha_1/notation/functions/snprojpos_2.ma | 2 +- .../alpha_1/notation/functions/snstar_2.ma | 4 +- .../lambdadelta/alpha_1/syntax/term.ma | 8 +- .../lambdadelta/alpha_1/syntax/term_append.ma | 4 +- .../lambdadelta/apps_2/examples/ex_cnv_eta.ma | 4 +- .../apps_2/examples/ex_cpr_omega.ma | 14 +- .../apps_2/examples/ex_fpbg_refl.ma | 12 +- .../lambdadelta/apps_2/functional/flifts.ma | 12 +- .../apps_2/functional/flifts_basic.ma | 2 +- .../lambdadelta/apps_2/functional/mf.ma | 4 +- .../lambdadelta/apps_2/functional/mf_cpr.ma | 4 +- .../lambdadelta/apps_2/models/deq_cpr.ma | 2 +- .../contribs/lambdadelta/apps_2/models/li.ma | 8 +- .../lambdadelta/apps_2/models/model_props.ma | 12 +- .../contribs/lambdadelta/apps_2/models/tm.ma | 8 +- .../lambdadelta/apps_2/models/tm_props.ma | 6 +- .../lambdadelta/apps_2/models/veq_lifts.ma | 2 +- .../lambdadelta/apps_2/models/vpushs.ma | 8 +- .../apps_2/notation/models/ringeq_5.ma | 6 +- .../lambdadelta/basic_2/dynamic/cnv.ma | 70 +++--- .../lambdadelta/basic_2/dynamic/cnv_aaa.ma | 18 +- .../lambdadelta/basic_2/dynamic/cnv_acle.ma | 6 +- .../lambdadelta/basic_2/dynamic/cnv_cpcs.ma | 4 +- .../lambdadelta/basic_2/dynamic/cnv_cpes.ma | 36 +-- .../basic_2/dynamic/cnv_cpm_conf.ma | 214 +++++++++--------- .../basic_2/dynamic/cnv_cpm_teqx.ma | 68 +++--- .../basic_2/dynamic/cnv_cpm_teqx_conf.ma | 58 ++--- .../basic_2/dynamic/cnv_cpm_teqx_trans.ma | 18 +- .../basic_2/dynamic/cnv_cpm_trans.ma | 8 +- .../lambdadelta/basic_2/dynamic/cnv_cpmre.ma | 12 +- .../basic_2/dynamic/cnv_cpms_conf.ma | 88 +++---- .../basic_2/dynamic/cnv_cpms_teqx.ma | 18 +- .../basic_2/dynamic/cnv_cpms_teqx_conf.ma | 24 +- .../lambdadelta/basic_2/dynamic/cnv_cpmuwe.ma | 14 +- .../basic_2/dynamic/cnv_cpmuwe_cpmre.ma | 2 +- .../lambdadelta/basic_2/dynamic/cnv_cpts.ma | 32 +-- .../lambdadelta/basic_2/dynamic/cnv_drops.ma | 20 +- .../lambdadelta/basic_2/dynamic/cnv_eval.ma | 4 +- .../lambdadelta/basic_2/dynamic/cnv_fqus.ma | 16 +- .../lambdadelta/basic_2/dynamic/cnv_fsb.ma | 6 +- .../basic_2/dynamic/cnv_preserve.ma | 20 +- .../basic_2/dynamic/cnv_preserve_cpcs.ma | 8 +- .../basic_2/dynamic/cnv_preserve_cpes.ma | 4 +- .../basic_2/dynamic/cnv_preserve_sub.ma | 48 ++-- .../lambdadelta/basic_2/dynamic/lsubv.ma | 28 +-- .../lambdadelta/basic_2/dynamic/lsubv_cnv.ma | 4 +- .../basic_2/dynamic/lsubv_drops.ma | 8 +- .../lambdadelta/basic_2/dynamic/nta.ma | 22 +- .../lambdadelta/basic_2/dynamic/nta_aaa.ma | 8 +- .../lambdadelta/basic_2/dynamic/nta_cpcs.ma | 20 +- .../lambdadelta/basic_2/dynamic/nta_cpms.ma | 14 +- .../lambdadelta/basic_2/dynamic/nta_drops.ma | 30 +-- .../lambdadelta/basic_2/dynamic/nta_eval.ma | 4 +- .../lambdadelta/basic_2/dynamic/nta_fsb.ma | 4 +- .../lambdadelta/basic_2/dynamic/nta_ind.ma | 70 +++--- .../basic_2/dynamic/nta_preserve.ma | 84 +++---- .../basic_2/dynamic/nta_preserve_cpcs.ma | 18 +- .../lambdadelta/basic_2/i_dynamic/ntas.ma | 20 +- .../basic_2/i_dynamic/ntas_cpcs.ma | 6 +- .../lambdadelta/basic_2/i_dynamic/ntas_nta.ma | 36 +-- .../basic_2/i_dynamic/ntas_nta_ind.ma | 32 +-- .../basic_2/i_dynamic/ntas_ntas.ma | 4 +- .../basic_2/i_dynamic/ntas_preserve.ma | 12 +- .../basic_2/notation/relations/colon_6.ma | 2 +- .../basic_2/notation/relations/colonstar_7.ma | 2 +- .../basic_2/notation/relations/exclaim_5.ma | 2 +- .../basic_2/notation/relations/pconv_5.ma | 2 +- .../basic_2/notation/relations/pconveta_4.ma | 2 +- .../basic_2/notation/relations/pconveta_5.ma | 2 +- .../basic_2/notation/relations/pconvstar_5.ma | 2 +- .../basic_2/notation/relations/pconvstar_7.ma | 2 +- .../basic_2/notation/relations/pred_5.ma | 2 +- .../basic_2/notation/relations/pred_6.ma | 2 +- .../basic_2/notation/relations/predeval_5.ma | 2 +- .../basic_2/notation/relations/predeval_6.ma | 2 +- .../notation/relations/predevalwstar_6.ma | 2 +- .../notation/relations/preditnormal_4.ma | 2 +- .../notation/relations/prednormal_4.ma | 2 +- .../basic_2/notation/relations/predsn_4.ma | 2 +- .../notation/relations/predsnstar_4.ma | 2 +- .../basic_2/notation/relations/predstar_5.ma | 2 +- .../basic_2/notation/relations/predstar_6.ma | 2 +- .../basic_2/notation/relations/predsubty_7.ma | 2 +- .../notation/relations/predsubtyproper_7.ma | 2 +- .../notation/relations/predsubtystar_7.ma | 2 +- .../relations/predsubtystarproper_7.ma | 2 +- .../notation/relations/predsubtystrong_4.ma | 2 +- .../basic_2/notation/relations/predty_5.ma | 2 +- .../basic_2/notation/relations/predty_7.ma | 2 +- .../notation/relations/predtynormal_4.ma | 2 +- .../basic_2/notation/relations/predtysn_4.ma | 2 +- .../basic_2/notation/relations/predtysn_5.ma | 2 +- .../notation/relations/predtysnstar_4.ma | 2 +- .../notation/relations/predtysnstrong_4.ma | 2 +- .../notation/relations/predtystar_5.ma | 2 +- .../notation/relations/predtystrong_4.ma | 2 +- .../basic_2/notation/relations/pty_6.ma | 2 +- .../basic_2/notation/relations/ptystar_6.ma | 2 +- .../basic_2/rt_computation/cnuw.ma | 18 +- .../basic_2/rt_computation/cnuw_cnuw.ma | 26 +-- .../basic_2/rt_computation/cnuw_drops.ma | 6 +- .../basic_2/rt_computation/cnuw_simple.ma | 2 +- .../basic_2/rt_computation/cpmre.ma | 6 +- .../basic_2/rt_computation/cpmre_aaa.ma | 2 +- .../basic_2/rt_computation/cpms.ma | 76 +++---- .../basic_2/rt_computation/cpms_aaa.ma | 8 +- .../basic_2/rt_computation/cpms_cpms.ma | 76 +++---- .../basic_2/rt_computation/cpms_cpxs.ma | 2 +- .../basic_2/rt_computation/cpms_drops.ma | 62 ++--- .../basic_2/rt_computation/cpms_fpbg.ma | 20 +- .../basic_2/rt_computation/cpms_fpbs.ma | 2 +- .../basic_2/rt_computation/cpms_lpr.ma | 20 +- .../basic_2/rt_computation/cpms_reqx.ma | 4 +- .../basic_2/rt_computation/cpmuwe.ma | 16 +- .../basic_2/rt_computation/cpmuwe_cpmuwe.ma | 4 +- .../basic_2/rt_computation/cpmuwe_csx.ma | 4 +- .../basic_2/rt_computation/cprre_cpms.ma | 4 +- .../basic_2/rt_computation/cprre_cprre.ma | 4 +- .../basic_2/rt_computation/cprre_csx.ma | 2 +- .../basic_2/rt_computation/cprs.ma | 34 +-- .../basic_2/rt_computation/cprs_cnr.ma | 2 +- .../basic_2/rt_computation/cprs_cprs.ma | 22 +- .../basic_2/rt_computation/cprs_drops.ma | 4 +- .../basic_2/rt_computation/cprs_lpr.ma | 10 +- .../basic_2/rt_computation/cprs_tweq.ma | 2 +- .../basic_2/rt_computation/cpts.ma | 48 ++-- .../basic_2/rt_computation/cpts_aaa.ma | 8 +- .../basic_2/rt_computation/cpts_cpms.ma | 6 +- .../basic_2/rt_computation/cpts_drops.ma | 60 ++--- .../basic_2/rt_computation/cpxs.ma | 74 +++--- .../basic_2/rt_computation/cpxs_cnx.ma | 4 +- .../basic_2/rt_computation/cpxs_cpxs.ma | 42 ++-- .../basic_2/rt_computation/cpxs_drops.ma | 32 +-- .../basic_2/rt_computation/cpxs_feqx.ma | 6 +- .../basic_2/rt_computation/cpxs_fqus.ma | 60 ++--- .../basic_2/rt_computation/cpxs_lpx.ma | 24 +- .../basic_2/rt_computation/cpxs_reqx.ma | 12 +- .../basic_2/rt_computation/cpxs_teqo.ma | 34 +-- .../rt_computation/cpxs_teqo_vector.ma | 54 ++--- .../basic_2/rt_computation/cpxs_teqx.ma | 8 +- .../lambdadelta/basic_2/rt_computation/csx.ma | 42 ++-- .../basic_2/rt_computation/csx_aaa.ma | 26 +-- .../basic_2/rt_computation/csx_cnx.ma | 4 +- .../basic_2/rt_computation/csx_cnx_vector.ma | 6 +- .../basic_2/rt_computation/csx_cpxs.ma | 22 +- .../basic_2/rt_computation/csx_csx.ma | 30 +-- .../basic_2/rt_computation/csx_csx_vector.ma | 14 +- .../basic_2/rt_computation/csx_feqx.ma | 4 +- .../basic_2/rt_computation/csx_fpbq.ma | 4 +- .../basic_2/rt_computation/csx_fqus.ma | 16 +- .../basic_2/rt_computation/csx_lpx.ma | 26 +-- .../basic_2/rt_computation/csx_lpxs.ma | 4 +- .../basic_2/rt_computation/csx_lsubr.ma | 22 +- .../basic_2/rt_computation/csx_reqx.ma | 6 +- .../basic_2/rt_computation/csx_simple.ma | 6 +- .../basic_2/rt_computation/csx_simple_teqo.ma | 6 +- .../basic_2/rt_computation/csx_vector.ma | 8 +- .../basic_2/rt_computation/fpbg.ma | 26 +-- .../basic_2/rt_computation/fpbg_cpxs.ma | 8 +- .../basic_2/rt_computation/fpbg_fpbs.ma | 34 +-- .../basic_2/rt_computation/fpbg_fqup.ma | 6 +- .../basic_2/rt_computation/fpbg_lpxs.ma | 4 +- .../basic_2/rt_computation/fpbs.ma | 32 +-- .../basic_2/rt_computation/fpbs_aaa.ma | 4 +- .../basic_2/rt_computation/fpbs_cpx.ma | 6 +- .../basic_2/rt_computation/fpbs_cpxs.ma | 26 +-- .../basic_2/rt_computation/fpbs_csx.ma | 4 +- .../basic_2/rt_computation/fpbs_fpb.ma | 4 +- .../basic_2/rt_computation/fpbs_fqup.ma | 18 +- .../basic_2/rt_computation/fpbs_fqus.ma | 12 +- .../basic_2/rt_computation/fpbs_lpxs.ma | 50 ++-- .../lambdadelta/basic_2/rt_computation/fsb.ma | 8 +- .../basic_2/rt_computation/fsb_aaa.ma | 26 +-- .../basic_2/rt_computation/fsb_csx.ma | 20 +- .../basic_2/rt_computation/fsb_feqx.ma | 4 +- .../basic_2/rt_computation/fsb_fpbg.ma | 24 +- .../lambdadelta/basic_2/rt_computation/jsx.ma | 26 +-- .../basic_2/rt_computation/jsx_csx.ma | 6 +- .../basic_2/rt_computation/jsx_drops.ma | 12 +- .../basic_2/rt_computation/jsx_rsx.ma | 12 +- .../basic_2/rt_computation/lprs.ma | 34 +-- .../basic_2/rt_computation/lprs_cpms.ma | 38 ++-- .../basic_2/rt_computation/lprs_cprs.ma | 30 +-- .../basic_2/rt_computation/lprs_ctc.ma | 4 +- .../basic_2/rt_computation/lprs_length.ma | 2 +- .../basic_2/rt_computation/lprs_lpr.ma | 18 +- .../basic_2/rt_computation/lprs_lpxs.ma | 2 +- .../basic_2/rt_computation/lprs_tc.ma | 4 +- .../basic_2/rt_computation/lpxs.ma | 36 +-- .../basic_2/rt_computation/lpxs_cpxs.ma | 20 +- .../basic_2/rt_computation/lpxs_feqx.ma | 6 +- .../basic_2/rt_computation/lpxs_length.ma | 2 +- .../basic_2/rt_computation/lpxs_lpx.ma | 24 +- .../basic_2/rt_computation/lpxs_reqx.ma | 10 +- .../lambdadelta/basic_2/rt_computation/rsx.ma | 28 +-- .../basic_2/rt_computation/rsx_csx.ma | 42 ++-- .../basic_2/rt_computation/rsx_drops.ma | 12 +- .../basic_2/rt_computation/rsx_fqup.ma | 8 +- .../basic_2/rt_computation/rsx_length.ma | 6 +- .../basic_2/rt_computation/rsx_lpxs.ma | 60 ++--- .../basic_2/rt_computation/rsx_rsx.ma | 8 +- .../lambdadelta/basic_2/rt_conversion/cpc.ma | 6 +- .../basic_2/rt_conversion/cpc_cpc.ma | 4 +- .../basic_2/rt_equivalence/cpcs.ma | 40 ++-- .../basic_2/rt_equivalence/cpcs_aaa.ma | 4 +- .../basic_2/rt_equivalence/cpcs_cpcs.ma | 16 +- .../basic_2/rt_equivalence/cpcs_cprs.ma | 80 +++---- .../basic_2/rt_equivalence/cpcs_csx.ma | 4 +- .../basic_2/rt_equivalence/cpcs_lprs.ma | 28 +-- .../basic_2/rt_equivalence/cpes.ma | 8 +- .../basic_2/rt_equivalence/cpes_aaa.ma | 6 +- .../basic_2/rt_equivalence/cpes_cpes.ma | 8 +- .../basic_2/rt_equivalence/cpes_cpms.ma | 8 +- .../lambdadelta/basic_2/rt_transition/cnr.ma | 18 +- .../basic_2/rt_transition/cnr_drops.ma | 10 +- .../basic_2/rt_transition/cnr_simple.ma | 10 +- .../basic_2/rt_transition/cnr_teqx.ma | 16 +- .../lambdadelta/basic_2/rt_transition/cnx.ma | 20 +- .../basic_2/rt_transition/cnx_basic.ma | 2 +- .../basic_2/rt_transition/cnx_cnx.ma | 4 +- .../basic_2/rt_transition/cnx_drops.ma | 8 +- .../basic_2/rt_transition/cnx_simple.ma | 14 +- .../lambdadelta/basic_2/rt_transition/cpg.ma | 140 ++++++------ .../basic_2/rt_transition/cpg_drops.ma | 32 +-- .../basic_2/rt_transition/cpg_simple.ma | 4 +- .../lambdadelta/basic_2/rt_transition/cpm.ma | 168 +++++++------- .../basic_2/rt_transition/cpm_aaa.ma | 8 +- .../basic_2/rt_transition/cpm_cpx.ma | 2 +- .../basic_2/rt_transition/cpm_drops.ma | 36 +-- .../basic_2/rt_transition/cpm_lsubr.ma | 6 +- .../basic_2/rt_transition/cpm_simple.ma | 4 +- .../basic_2/rt_transition/cpm_teqx.ma | 6 +- .../lambdadelta/basic_2/rt_transition/cpr.ma | 88 +++---- .../basic_2/rt_transition/cpr_drops.ma | 10 +- .../basic_2/rt_transition/cpr_drops_basic.ma | 8 +- .../basic_2/rt_transition/cpr_teqx.ma | 2 +- .../lambdadelta/basic_2/rt_transition/cpt.ma | 76 +++---- .../basic_2/rt_transition/cpt_cpm.ma | 2 +- .../basic_2/rt_transition/cpt_drops.ma | 36 +-- .../basic_2/rt_transition/cpt_fqu.ma | 22 +- .../lambdadelta/basic_2/rt_transition/cpx.ma | 190 ++++++++-------- .../basic_2/rt_transition/cpx_drops.ma | 14 +- .../basic_2/rt_transition/cpx_drops_basic.ma | 10 +- .../basic_2/rt_transition/cpx_feqx.ma | 6 +- .../basic_2/rt_transition/cpx_fqus.ma | 64 +++--- .../basic_2/rt_transition/cpx_lsubr.ma | 6 +- .../basic_2/rt_transition/cpx_reqx.ma | 2 +- .../basic_2/rt_transition/cpx_simple.ma | 4 +- .../lambdadelta/basic_2/rt_transition/fpb.ma | 14 +- .../basic_2/rt_transition/fpb_feqx.ma | 10 +- .../basic_2/rt_transition/fpb_reqx.ma | 8 +- .../lambdadelta/basic_2/rt_transition/fpbq.ma | 12 +- .../basic_2/rt_transition/fpbq_aaa.ma | 4 +- .../basic_2/rt_transition/fpbq_fpb.ma | 18 +- .../lambdadelta/basic_2/rt_transition/lpr.ma | 52 ++--- .../basic_2/rt_transition/lpr_fquq.ma | 54 ++--- .../basic_2/rt_transition/lpr_length.ma | 2 +- .../basic_2/rt_transition/lpr_lpr.ma | 138 +++++------ .../basic_2/rt_transition/lpr_lpx.ma | 2 +- .../lambdadelta/basic_2/rt_transition/lpx.ma | 52 ++--- .../basic_2/rt_transition/lpx_aaa.ma | 10 +- .../basic_2/rt_transition/lpx_fquq.ma | 26 +-- .../basic_2/rt_transition/lpx_fsle.ma | 6 +- .../basic_2/rt_transition/lpx_length.ma | 2 +- .../basic_2/rt_transition/lpx_reqx.ma | 4 +- .../lambdadelta/basic_2/rt_transition/rpx.ma | 88 +++---- .../basic_2/rt_transition/rpx_drops.ma | 4 +- .../basic_2/rt_transition/rpx_fqup.ma | 10 +- .../basic_2/rt_transition/rpx_fsle.ma | 10 +- .../basic_2/rt_transition/rpx_length.ma | 12 +- .../basic_2/rt_transition/rpx_lpx.ma | 8 +- .../basic_2/rt_transition/rpx_reqx.ma | 38 ++-- .../basic_2/rt_transition/rpx_rpx.ma | 16 +- .../lambdadelta/basic_2/web/basic_2_src.tbl | 108 ++++----- .../ground_2/notation/functions/apply_2.ma | 2 +- .../ground_2/notation/functions/basic_2.ma | 2 +- .../notation/functions/cocompose_2.ma | 2 +- .../notation/functions/droppreds_2.ma | 2 +- .../notation/functions/semicolon_3.ma | 2 +- .../ground_2/notation/functions/uniform_1.ma | 2 +- .../notation/functions/uparrowstar_2.ma | 2 +- .../notation/functions/upspoonstar_2.ma | 2 +- .../notation/relations/isdivergent_1.ma | 2 +- .../ground_2/notation/relations/isfinite_1.ma | 2 +- .../notation/relations/isidentity_1.ma | 2 +- .../notation/relations/isredtype_2.ma | 2 +- .../ground_2/notation/relations/istotal_1.ma | 2 +- .../ground_2/notation/relations/istype_2.ma | 2 +- .../notation/relations/isuniform_1.ma | 2 +- .../ground_2/notation/relations/rat_3.ma | 2 +- .../ground_2/notation/relations/rcoafter_3.ma | 2 +- .../notation/relations/rcolength_2.ma | 2 +- .../lambdadelta/ground_2/relocation/mr2_at.ma | 32 +-- .../ground_2/relocation/mr2_minus.ma | 18 +- .../ground_2/relocation/mr2_plus.ma | 8 +- .../ground_2/relocation/nstream_after.ma | 18 +- .../ground_2/relocation/nstream_basic.ma | 6 +- .../ground_2/relocation/nstream_isid.ma | 2 +- .../ground_2/relocation/nstream_istot.ma | 34 +-- .../ground_2/relocation/rtmap_after.ma | 82 +++---- .../ground_2/relocation/rtmap_at.ma | 112 ++++----- .../ground_2/relocation/rtmap_basic.ma | 10 +- .../ground_2/relocation/rtmap_basic_after.ma | 2 +- .../ground_2/relocation/rtmap_coafter.ma | 110 ++++----- .../ground_2/relocation/rtmap_fcla.ma | 22 +- .../ground_2/relocation/rtmap_id.ma | 6 +- .../ground_2/relocation/rtmap_isdiv.ma | 20 +- .../ground_2/relocation/rtmap_isfin.ma | 30 +-- .../ground_2/relocation/rtmap_isid.ma | 20 +- .../ground_2/relocation/rtmap_istot.ma | 24 +- .../ground_2/relocation/rtmap_isuni.ma | 12 +- .../ground_2/relocation/rtmap_sdj.ma | 6 +- .../ground_2/relocation/rtmap_sle.ma | 8 +- .../ground_2/relocation/rtmap_sor.ma | 42 ++-- .../ground_2/relocation/rtmap_uni.ma | 30 +-- .../lambdadelta/ground_2/steps/rtc_isrt.ma | 18 +- .../lambdadelta/ground_2/steps/rtc_ist.ma | 14 +- .../lambdadelta/ground_2/steps/rtc_ist_max.ma | 16 +- .../ground_2/steps/rtc_ist_plus.ma | 20 +- .../ground_2/steps/rtc_ist_shift.ma | 6 +- .../lambdadelta/ground_2/steps/rtc_max.ma | 24 +- .../lambdadelta/ground_2/steps/rtc_plus.ma | 18 +- .../lambdadelta/ground_2/steps/rtc_shift.ma | 6 +- .../lambdadelta/ground_2/web/ground_2_src.tbl | 18 +- .../lambdadelta/static_2/i_static/rexs.ma | 52 ++--- .../static_2/i_static/rexs_drops.ma | 4 +- .../static_2/i_static/rexs_fqup.ma | 8 +- .../static_2/notation/functions/dxbind1_2.ma | 2 +- .../static_2/notation/functions/dxbind2_3.ma | 2 +- .../static_2/notation/functions/dxitem_2.ma | 2 +- .../static_2/notation/functions/item0_1.ma | 2 +- .../static_2/notation/functions/snabbr_3.ma | 2 +- .../notation/functions/snabbrneg_2.ma | 2 +- .../notation/functions/snabbrpos_2.ma | 2 +- .../static_2/notation/functions/snabst_3.ma | 2 +- .../notation/functions/snabstneg_2.ma | 2 +- .../notation/functions/snabstpos_2.ma | 2 +- .../static_2/notation/functions/snbind1_2.ma | 2 +- .../static_2/notation/functions/snbind2_3.ma | 2 +- .../static_2/notation/functions/snbind2_4.ma | 2 +- .../notation/functions/snbind2neg_3.ma | 2 +- .../notation/functions/snbind2pos_3.ma | 2 +- .../static_2/notation/functions/snflat2_3.ma | 2 +- .../static_2/notation/functions/snitem2_3.ma | 2 +- .../static_2/notation/functions/snitem_2.ma | 2 +- .../static_2/notation/functions/weight_1.ma | 2 +- .../static_2/notation/functions/weight_2.ma | 2 +- .../static_2/notation/functions/weight_3.ma | 2 +- .../notation/relations/atomicarity_4.ma | 2 +- .../static_2/notation/relations/freeplus_3.ma | 2 +- .../static_2/notation/relations/ideqsn_3.ma | 2 +- .../{ineint_5.ma => inwbrackets_5.ma} | 4 +- .../static_2/notation/relations/lrsubeqa_3.ma | 2 +- .../static_2/notation/relations/lrsubeqc_4.ma | 2 +- .../static_2/notation/relations/lrsubeqf_4.ma | 2 +- .../notation/relations/rdropstar_3.ma | 2 +- .../notation/relations/rdropstar_4.ma | 2 +- .../static_2/notation/relations/relation_3.ma | 2 +- .../notation/relations/rliftstar_3.ma | 2 +- .../static_2/notation/relations/simple_1.ma | 2 +- .../static_2/notation/relations/stareqsn_3.ma | 2 +- .../static_2/notation/relations/stareqsn_6.ma | 2 +- .../static_2/notation/relations/subseteq_4.ma | 2 +- .../static_2/notation/relations/supterm_6.ma | 2 +- .../static_2/notation/relations/supterm_7.ma | 2 +- .../notation/relations/suptermopt_6.ma | 2 +- .../notation/relations/suptermopt_7.ma | 2 +- .../notation/relations/suptermplus_6.ma | 2 +- .../notation/relations/suptermplus_7.ma | 2 +- .../notation/relations/suptermstar_6.ma | 2 +- .../notation/relations/suptermstar_7.ma | 2 +- .../notation/relations/voidstareq_4.ma | 2 +- .../lambdadelta/static_2/relocation/drops.ma | 108 ++++----- .../static_2/relocation/drops_drops.ma | 16 +- .../static_2/relocation/drops_length.ma | 22 +- .../static_2/relocation/drops_lex.ma | 12 +- .../static_2/relocation/drops_seq.ma | 12 +- .../static_2/relocation/drops_sex.ma | 28 +-- .../static_2/relocation/drops_weight.ma | 8 +- .../lambdadelta/static_2/relocation/lex.ma | 40 ++-- .../lambdadelta/static_2/relocation/lifts.ma | 72 +++--- .../static_2/relocation/lifts_bind.ma | 4 +- .../static_2/relocation/lifts_simple.ma | 4 +- .../static_2/relocation/lifts_teqx.ma | 2 +- .../static_2/relocation/lifts_weight.ma | 2 +- .../static_2/relocation/lifts_weight_bind.ma | 2 +- .../lambdadelta/static_2/relocation/seq.ma | 22 +- .../lambdadelta/static_2/relocation/sex.ma | 50 ++-- .../static_2/relocation/sex_length.ma | 2 +- .../static_2/relocation/sex_sex.ma | 10 +- .../lambdadelta/static_2/relocation/sex_tc.ma | 18 +- .../static_2/s_computation/fqup.ma | 40 ++-- .../static_2/s_computation/fqup_drops.ma | 8 +- .../static_2/s_computation/fqup_weight.ma | 8 +- .../static_2/s_computation/fqus.ma | 90 ++++---- .../static_2/s_computation/fqus_drops.ma | 2 +- .../static_2/s_computation/fqus_fqup.ma | 26 +-- .../static_2/s_computation/fqus_weight.ma | 6 +- .../lambdadelta/static_2/s_transition/fqu.ma | 86 +++---- .../static_2/s_transition/fqu_length.ma | 4 +- .../static_2/s_transition/fqu_teqx.ma | 4 +- .../static_2/s_transition/fqu_weight.ma | 6 +- .../lambdadelta/static_2/s_transition/fquq.ma | 2 +- .../static_2/s_transition/fquq_length.ma | 2 +- .../static_2/s_transition/fquq_weight.ma | 4 +- .../lambdadelta/static_2/static/aaa.ma | 64 +++--- .../lambdadelta/static_2/static/aaa_aaa.ma | 6 +- .../lambdadelta/static_2/static/aaa_dec.ma | 2 +- .../lambdadelta/static_2/static/aaa_drops.ma | 18 +- .../lambdadelta/static_2/static/aaa_feqx.ma | 4 +- .../lambdadelta/static_2/static/aaa_fqus.ma | 16 +- .../lambdadelta/static_2/static/aaa_reqx.ma | 4 +- .../lambdadelta/static_2/static/feqx.ma | 6 +- .../lambdadelta/static_2/static/feqx_feqx.ma | 12 +- .../lambdadelta/static_2/static/feqx_fqup.ma | 2 +- .../lambdadelta/static_2/static/feqx_fqus.ma | 6 +- .../lambdadelta/static_2/static/feqx_req.ma | 2 +- .../lambdadelta/static_2/static/frees.ma | 76 +++---- .../static_2/static/frees_append.ma | 8 +- .../static_2/static/frees_drops.ma | 56 ++--- .../lambdadelta/static_2/static/frees_fqup.ma | 36 +-- .../static_2/static/frees_frees.ma | 2 +- .../lambdadelta/static_2/static/fsle.ma | 6 +- .../lambdadelta/static_2/static/fsle_drops.ma | 16 +- .../lambdadelta/static_2/static/fsle_fqup.ma | 24 +- .../lambdadelta/static_2/static/fsle_fsle.ma | 52 ++--- .../static_2/static/fsle_length.ma | 10 +- .../lambdadelta/static_2/static/gcp_aaa.ma | 12 +- .../lambdadelta/static_2/static/gcp_cr.ma | 26 +-- .../lambdadelta/static_2/static/lsuba.ma | 28 +-- .../lambdadelta/static_2/static/lsuba_aaa.ma | 8 +- .../static_2/static/lsuba_drops.ma | 8 +- .../lambdadelta/static_2/static/lsubc.ma | 28 +-- .../static_2/static/lsubc_drops.ma | 4 +- .../lambdadelta/static_2/static/lsubf.ma | 162 ++++++------- .../static_2/static/lsubf_frees.ma | 4 +- .../static_2/static/lsubf_lsubf.ma | 6 +- .../static_2/static/lsubf_lsubr.ma | 8 +- .../lambdadelta/static_2/static/lsubr.ma | 52 ++--- .../static_2/static/lsubr_drops.ma | 8 +- .../lambdadelta/static_2/static/req.ma | 26 +-- .../lambdadelta/static_2/static/req_drops.ma | 2 +- .../lambdadelta/static_2/static/reqx.ma | 70 +++--- .../lambdadelta/static_2/static/reqx_drops.ma | 14 +- .../lambdadelta/static_2/static/reqx_fqup.ma | 6 +- .../lambdadelta/static_2/static/reqx_fqus.ma | 36 +-- .../static_2/static/reqx_length.ma | 2 +- .../lambdadelta/static_2/static/reqx_reqx.ma | 16 +- .../lambdadelta/static_2/static/rex.ma | 98 ++++---- .../lambdadelta/static_2/static/rex_drops.ma | 30 +-- .../lambdadelta/static_2/static/rex_fqup.ma | 8 +- .../lambdadelta/static_2/static/rex_fsle.ma | 32 +-- .../lambdadelta/static_2/static/rex_length.ma | 6 +- .../lambdadelta/static_2/static/rex_rex.ma | 18 +- .../lambdadelta/static_2/syntax/append.ma | 14 +- .../static_2/syntax/append_length.ma | 12 +- .../static_2/syntax/bind_weight.ma | 4 +- .../static_2/syntax/cl_restricted_weight.ma | 14 +- .../lambdadelta/static_2/syntax/cl_weight.ma | 12 +- .../lambdadelta/static_2/syntax/fold.ma | 6 +- .../static_2/syntax/genv_weight.ma | 4 +- .../lambdadelta/static_2/syntax/lenv.ma | 6 +- .../static_2/syntax/lenv_length.ma | 6 +- .../static_2/syntax/lenv_weight.ma | 4 +- .../lambdadelta/static_2/syntax/lveq.ma | 18 +- .../static_2/syntax/lveq_length.ma | 4 +- .../lambdadelta/static_2/syntax/lveq_lveq.ma | 2 +- .../lambdadelta/static_2/syntax/teqo.ma | 20 +- .../static_2/syntax/teqo_simple.ma | 4 +- .../static_2/syntax/teqo_simple_vector.ma | 2 +- .../lambdadelta/static_2/syntax/teqx.ma | 24 +- .../lambdadelta/static_2/syntax/term.ma | 16 +- .../static_2/syntax/term_simple.ma | 12 +- .../static_2/syntax/term_vector.ma | 2 +- .../static_2/syntax/term_weight.ma | 4 +- .../lambdadelta/static_2/syntax/tweq.ma | 24 +- .../static_2/syntax/tweq_simple.ma | 2 +- .../lambdadelta/static_2/web/static_2_src.tbl | 32 +-- 484 files changed, 4220 insertions(+), 4220 deletions(-) rename matita/matita/contribs/lambdadelta/static_2/notation/relations/{ineint_5.ma => inwbrackets_5.ma} (87%) diff --git a/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snabstneg_1.ma b/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snabstneg_1.ma index a82ce4605..72707b02e 100644 --- a/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snabstneg_1.ma +++ b/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snabstneg_1.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM α *****************************************) -notation "hvbox( - 𝛌 . break term 55 T )" +notation "hvbox( -𝛌. break term 55 T )" non associative with precedence 55 for @{ 'SnAbstNeg $T }. diff --git a/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/sngref_2.ma b/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/sngref_2.ma index f28b669d1..28f6c95ed 100644 --- a/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/sngref_2.ma +++ b/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/sngref_2.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM α *****************************************) -notation "hvbox( § term 90 p . break term 55 T )" +notation "hvbox( § term 90 l. break term 55 T )" non associative with precedence 55 - for @{ 'SnGRef $p $T }. + for @{ 'SnGRef $l $T }. diff --git a/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snitem1_2.ma b/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snitem1_2.ma index cef7a31fa..130526cb6 100644 --- a/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snitem1_2.ma +++ b/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snitem1_2.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM α *****************************************) -notation "hvbox( ① { term 46 I } . break term 55 T )" +notation "hvbox( ① [ term 46 I ]. break term 55 T )" non associative with precedence 55 for @{ 'SnItem1 $I $T }. diff --git a/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snlref_2.ma b/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snlref_2.ma index 4f9311f1e..89516d493 100644 --- a/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snlref_2.ma +++ b/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snlref_2.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM α *****************************************) -notation "hvbox( # term 90 i . break term 55 T )" +notation "hvbox( # term 90 i. break term 55 T )" non associative with precedence 55 for @{ 'SnLRef $i $T }. diff --git a/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snproj_3.ma b/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snproj_3.ma index 3e985c331..219df4d52 100644 --- a/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snproj_3.ma +++ b/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snproj_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM α *****************************************) -notation "hvbox( 𝛑 { term 46 a } break term 55 T1 . break term 55 T2 )" +notation "hvbox( 𝛑[ term 46 p ] break term 55 T1. break term 55 T2 )" non associative with precedence 55 - for @{ 'SnProj $a $T1 $T2 }. + for @{ 'SnProj $p $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snprojneg_2.ma b/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snprojneg_2.ma index c29417e3c..5ed5322d2 100644 --- a/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snprojneg_2.ma +++ b/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snprojneg_2.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM α *****************************************) -notation "hvbox( - 𝛑 term 55 T1 . break term 55 T2 )" +notation "hvbox( -𝛑 term 55 T1. break term 55 T2 )" non associative with precedence 55 for @{ 'SnProjNeg $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snprojpos_2.ma b/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snprojpos_2.ma index 74a573d60..a1b9213e4 100644 --- a/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snprojpos_2.ma +++ b/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snprojpos_2.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM α *****************************************) -notation "hvbox( + 𝛑 term 55 T1 . break term 55 T2 )" +notation "hvbox( +𝛑 term 55 T1. break term 55 T2 )" non associative with precedence 55 for @{ 'SnProjPos $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snstar_2.ma b/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snstar_2.ma index b4e1e0dac..c16c15c06 100644 --- a/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snstar_2.ma +++ b/matita/matita/contribs/lambdadelta/alpha_1/notation/functions/snstar_2.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM α *****************************************) -notation "hvbox( ⋆ term 90 k . break term 55 T )" +notation "hvbox( ⋆ term 90 s. break term 55 T )" non associative with precedence 55 - for @{ 'SnStar $k $T }. + for @{ 'SnStar $s $T }. diff --git a/matita/matita/contribs/lambdadelta/alpha_1/syntax/term.ma b/matita/matita/contribs/lambdadelta/alpha_1/syntax/term.ma index 4ba35edc6..4334a0918 100644 --- a/matita/matita/contribs/lambdadelta/alpha_1/syntax/term.ma +++ b/matita/matita/contribs/lambdadelta/alpha_1/syntax/term.ma @@ -47,13 +47,13 @@ interpretation "term construction (binary)" 'SnItem2 I T1 T2 = (TPair I T1 T2). interpretation "character (term)" - 'SnStar k T = (TUnit (Char k) T). + 'SnStar s T = (TUnit (Char s) T). interpretation "local reference (term)" 'SnLRef i T = (TUnit (LRef i) T). interpretation "global reference (term)" - 'SnGRef p T = (TUnit (GRef p) T). + 'SnGRef l T = (TUnit (GRef l) T). interpretation "negative abbreviation (term)" 'SnAbbrNeg T = (TUnit Decl T). @@ -62,7 +62,7 @@ interpretation "positive abstraction (term)" 'SnAbstPos T1 T2 = (TPair Abst T1 T2). interpretation "abbreviation (term)" - 'SnAbbr a T1 T2 = (TPair (Abbr a) T1 T2). + 'SnAbbr p T1 T2 = (TPair (Abbr p) T1 T2). interpretation "positive abbreviation (term)" 'SnAbbrPos T1 T2 = (TPair (Abbr true) T1 T2). @@ -71,7 +71,7 @@ interpretation "negative abbreviation (term)" 'SnAbbrNeg T1 T2 = (TPair (Abbr false) T1 T2). interpretation "projection (term)" - 'SnProj a T1 T2 = (TPair (Proj a) T1 T2). + 'SnProj p T1 T2 = (TPair (Proj p) T1 T2). interpretation "positive projection (term)" 'SnProjPos T1 T2 = (TPair (Proj true) T1 T2). diff --git a/matita/matita/contribs/lambdadelta/alpha_1/syntax/term_append.ma b/matita/matita/contribs/lambdadelta/alpha_1/syntax/term_append.ma index a2db5fedd..63ddda16f 100644 --- a/matita/matita/contribs/lambdadelta/alpha_1/syntax/term_append.ma +++ b/matita/matita/contribs/lambdadelta/alpha_1/syntax/term_append.ma @@ -18,8 +18,8 @@ include "alpha_1/syntax/term.ma". let rec tappend T U on T ≝ match T with [ TAtom ⇒ U -| TUnit I T ⇒ ①{I}.(tappend T U) -| TPair I V T ⇒ ②{I}V.(tappend T U) +| TUnit I T ⇒ ①[I].(tappend T U) +| TPair I V T ⇒ ②[I]V.(tappend T U) ]. interpretation "append (term)" 'plus T U = (tappend T U). diff --git a/matita/matita/contribs/lambdadelta/apps_2/examples/ex_cnv_eta.ma b/matita/matita/contribs/lambdadelta/apps_2/examples/ex_cnv_eta.ma index 17be9f2dd..1eb9cd38b 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/examples/ex_cnv_eta.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/examples/ex_cnv_eta.ma @@ -21,7 +21,7 @@ include "basic_2/dynamic/cnv.ma". (* Note: extended validity of a closure, height of cnv_appl > 1 *) lemma cnv_extended (h) (p) (G) (L): - ∀s. ⦃G,L.ⓛ⋆s.ⓛⓛ{p}⋆s.⋆s.ⓛ#0⦄ ⊢ ⓐ#2.#0 ![h,𝛚]. + ∀s. ❪G,L.ⓛ⋆s.ⓛⓛ[p]⋆s.⋆s.ⓛ#0❫ ⊢ ⓐ#2.#0 ![h,𝛚]. #h #p #G #L #s @(cnv_appl … 2 p … (⋆s) … (⋆s)) [ // @@ -34,7 +34,7 @@ qed. (* Note: restricted validity of the η-expanded closure, height of cnv_appl = 1 **) lemma cnv_restricted (h) (p) (G) (L): - ∀s. ⦃G,L.ⓛ⋆s.ⓛⓛ{p}⋆s.⋆s.ⓛⓛ{p}⋆s.ⓐ#0.#1⦄ ⊢ ⓐ#2.#0 ![h,𝟐]. + ∀s. ❪G,L.ⓛ⋆s.ⓛⓛ[p]⋆s.⋆s.ⓛⓛ[p]⋆s.ⓐ#0.#1❫ ⊢ ⓐ#2.#0 ![h,𝟐]. #h #p #G #L #s @(cnv_appl … 1 p … (⋆s) … (ⓐ#0.#2)) [ // diff --git a/matita/matita/contribs/lambdadelta/apps_2/examples/ex_cpr_omega.ma b/matita/matita/contribs/lambdadelta/apps_2/examples/ex_cpr_omega.ma index 649086604..0f07f5997 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/examples/ex_cpr_omega.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/examples/ex_cpr_omega.ma @@ -34,7 +34,7 @@ lemma Delta_lifts (f) (s): ⇧*[f] (Delta s) ≘ (Delta s). (* Basic inversion properties ***********************************************) lemma cpr_inv_Delta1_body_sn (h) (G) (L) (s): - ∀X. ⦃G,L.ⓛ⋆s⦄ ⊢ ⓐ#O.#O ➡[h] X → ⓐ#O.#O = X. + ∀X. ❪G,L.ⓛ⋆s❫ ⊢ ⓐ#O.#O ➡[h] X → ⓐ#O.#O = X. #h #G #L #s #X #H lapply (cpm_inv_appl1 … H) -H * * [ #W2 #T2 #HW2 #HT2 #H destruct @@ -51,7 +51,7 @@ lapply (cpm_inv_appl1 … H) -H * * qed-. lemma cpr_inv_Delta_sn (h) (G) (L) (s): - ∀X. ⦃G,L⦄ ⊢ Delta s ➡[h] X → Delta s = X. + ∀X. ❪G,L❫ ⊢ Delta s ➡[h] X → Delta s = X. #h #G #L #s #X #H elim (cpm_inv_abst1 … H) -H #X1 #X2 #H1 #H2 #H destruct lapply (cpr_inv_sort1 … H1) -H1 #H destruct @@ -60,19 +60,19 @@ qed-. (* Main properties **********************************************************) -theorem cpr_Omega_12 (h) (G) (L) (s): ⦃G,L⦄ ⊢ Omega1 s ➡[h] Omega2 s. +theorem cpr_Omega_12 (h) (G) (L) (s): ❪G,L❫ ⊢ Omega1 s ➡[h] Omega2 s. /2 width=1 by cpm_beta/ qed. -theorem cpr_Omega_23 (h) (G) (L) (s): ⦃G,L⦄ ⊢ Omega2 s ➡[h] Omega3 s. +theorem cpr_Omega_23 (h) (G) (L) (s): ❪G,L❫ ⊢ Omega2 s ➡[h] Omega3 s. /5 width=3 by cpm_eps, cpm_appl, cpm_bind, cpm_delta, Delta_lifts/ qed. -theorem cpr_Omega_31 (h) (G) (L) (s): ⦃G,L⦄ ⊢ Omega3 s ➡[h] Omega1 s. +theorem cpr_Omega_31 (h) (G) (L) (s): ❪G,L❫ ⊢ Omega3 s ➡[h] Omega1 s. /4 width=3 by cpm_zeta, Delta_lifts, lifts_flat/ qed. (* Main inversion properties ************************************************) theorem cpr_inv_Omega1_sn (h) (G) (L) (s): - ∀X. ⦃G,L⦄ ⊢ Omega1 s ➡[h] X → + ∀X. ❪G,L❫ ⊢ Omega1 s ➡[h] X → ∨∨ Omega1 s = X | Omega2 s = X. #h #G #L #s #X #H elim (cpm_inv_appl1 … H) -H * [ #W2 #T2 #HW2 #HT2 #H destruct @@ -87,7 +87,7 @@ theorem cpr_inv_Omega1_sn (h) (G) (L) (s): ] qed-. -theorem cpr_Omega_21_false (h) (G) (L) (s): ⦃G,L⦄ ⊢ Omega2 s ➡[h] Omega1 s → ⊥. +theorem cpr_Omega_21_false (h) (G) (L) (s): ❪G,L❫ ⊢ Omega2 s ➡[h] Omega1 s → ⊥. #h #G #L #s #H elim (cpm_inv_bind1 … H) -H * [ #W #T #_ #_ whd in ⊢ (??%?→?); #H destruct | #X #H #_ #_ #_ diff --git a/matita/matita/contribs/lambdadelta/apps_2/examples/ex_fpbg_refl.ma b/matita/matita/contribs/lambdadelta/apps_2/examples/ex_fpbg_refl.ma index bbd3ec04e..232f9e8a7 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/examples/ex_fpbg_refl.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/examples/ex_fpbg_refl.ma @@ -36,22 +36,22 @@ lemma ApplDelta_lifts (f:rtmap) (s0) (s): ⇧*[f] (ApplDelta s0 s) ≘ (ApplDelta s0 s). /5 width=1 by lifts_sort, lifts_lref, lifts_bind, lifts_flat/ qed. -lemma cpr_ApplOmega_12 (h) (G) (L) (s0) (s): ⦃G,L⦄ ⊢ ApplOmega1 s0 s ➡[h] ApplOmega2 s0 s. +lemma cpr_ApplOmega_12 (h) (G) (L) (s0) (s): ❪G,L❫ ⊢ ApplOmega1 s0 s ➡[h] ApplOmega2 s0 s. /2 width=1 by cpm_beta/ qed. -lemma cpr_ApplOmega_23 (h) (G) (L) (s0) (s): ⦃G,L⦄ ⊢ ApplOmega2 s0 s ➡[h] ApplOmega3 s0 s. +lemma cpr_ApplOmega_23 (h) (G) (L) (s0) (s): ❪G,L❫ ⊢ ApplOmega2 s0 s ➡[h] ApplOmega3 s0 s. /6 width=3 by cpm_eps, cpm_appl, cpm_bind, cpm_delta, ApplDelta_lifts/ qed. -lemma cpr_ApplOmega_34 (h) (G) (L) (s0) (s): ⦃G,L⦄ ⊢ ApplOmega3 s0 s ➡[h] ApplOmega4 s0 s. +lemma cpr_ApplOmega_34 (h) (G) (L) (s0) (s): ❪G,L❫ ⊢ ApplOmega3 s0 s ➡[h] ApplOmega4 s0 s. /4 width=3 by cpm_zeta, ApplDelta_lifts, lifts_sort, lifts_flat/ qed. -lemma cpxs_ApplOmega_14 (h) (G) (L) (s0) (s): ⦃G,L⦄ ⊢ ApplOmega1 s0 s ⬈*[h] ApplOmega4 s0 s. +lemma cpxs_ApplOmega_14 (h) (G) (L) (s0) (s): ❪G,L❫ ⊢ ApplOmega1 s0 s ⬈*[h] ApplOmega4 s0 s. /5 width=4 by cpxs_strap1, cpm_fwd_cpx/ qed. -lemma fqup_ApplOmega_41 (G) (L) (s0) (s): ⦃G,L,ApplOmega4 s0 s⦄ ⬂+ ⦃G,L,ApplOmega1 s0 s⦄. +lemma fqup_ApplOmega_41 (G) (L) (s0) (s): ❪G,L,ApplOmega4 s0 s❫ ⬂+ ❪G,L,ApplOmega1 s0 s❫. /2 width=1 by/ qed. (* Main properties **********************************************************) -theorem fpbg_refl (h) (G) (L) (s0) (s): ⦃G,L,ApplOmega1 s0 s⦄ >[h] ⦃G,L,ApplOmega1 s0 s⦄. +theorem fpbg_refl (h) (G) (L) (s0) (s): ❪G,L,ApplOmega1 s0 s❫ >[h] ❪G,L,ApplOmega1 s0 s❫. /3 width=5 by fpbs_fpbg_trans, fqup_fpbg, cpxs_fpbs/ qed. diff --git a/matita/matita/contribs/lambdadelta/apps_2/functional/flifts.ma b/matita/matita/contribs/lambdadelta/apps_2/functional/flifts.ma index b266b3ae8..10d9636db 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/functional/flifts.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/functional/flifts.ma @@ -21,12 +21,12 @@ include "static_2/relocation/lifts.ma". rec definition flifts f U on U ≝ match U with [ TAtom I ⇒ match I with [ Sort _ ⇒ U - | LRef i ⇒ #(f@❴i❵) + | LRef i ⇒ #(f@❨i❩) | GRef _ ⇒ U ] | TPair I V T ⇒ match I with - [ Bind2 p I ⇒ ⓑ{p,I}(flifts f V).(flifts (⫯f) T) - | Flat2 I ⇒ ⓕ{I}(flifts f V).(flifts f T) + [ Bind2 p I ⇒ ⓑ[p,I](flifts f V).(flifts (⫯f) T) + | Flat2 I ⇒ ⓕ[I](flifts f V).(flifts f T) ] ]. @@ -38,13 +38,13 @@ interpretation "uniform functional relocation (term)" (* Basic properties *********************************************************) -lemma flifts_lref (f) (i): ↑*[f](#i) = #(f@❴i❵). +lemma flifts_lref (f) (i): ↑*[f](#i) = #(f@❨i❩). // qed. -lemma flifts_bind (f) (p) (I) (V) (T): ↑*[f](ⓑ{p,I}V.T) = ⓑ{p,I}↑*[f]V.↑*[⫯f]T. +lemma flifts_bind (f) (p) (I) (V) (T): ↑*[f](ⓑ[p,I]V.T) = ⓑ[p,I]↑*[f]V.↑*[⫯f]T. // qed. -lemma flifts_flat (f) (I) (V) (T): ↑*[f](ⓕ{I}V.T) = ⓕ{I}↑*[f]V.↑*[f]T. +lemma flifts_flat (f) (I) (V) (T): ↑*[f](ⓕ[I]V.T) = ⓕ[I]↑*[f]V.↑*[f]T. // qed. (* Main properties **********************************************************) diff --git a/matita/matita/contribs/lambdadelta/apps_2/functional/flifts_basic.ma b/matita/matita/contribs/lambdadelta/apps_2/functional/flifts_basic.ma index 5c50fb1af..414a3de11 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/functional/flifts_basic.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/functional/flifts_basic.ma @@ -28,5 +28,5 @@ lemma flifts_basic_lref_ge (i) (d) (h): d ≤ i → ↑[d,h](#i) = #(h+i). /4 width=1 by apply_basic_ge, (* 2x *) eq_f/ qed-. -lemma flifts_basic_bind (p) (I) (V) (T) (d) (h): ↑[d,h](ⓑ{p,I}V.T) = ⓑ{p,I}(↑[d,h]V).(↑[↑d,h]T). +lemma flifts_basic_bind (p) (I) (V) (T) (d) (h): ↑[d,h](ⓑ[p,I]V.T) = ⓑ[p,I](↑[d,h]V).(↑[↑d,h]T). // qed. diff --git a/matita/matita/contribs/lambdadelta/apps_2/functional/mf.ma b/matita/matita/contribs/lambdadelta/apps_2/functional/mf.ma index 6f2074db5..4e88c1a78 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/functional/mf.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/functional/mf.ma @@ -45,9 +45,9 @@ lemma mf_gref: ∀gv,lv,l. ●[gv,lv]§l = gv l. // qed. lemma mf_bind (p) (I): ∀gv,lv,V,T. - ●[gv,lv]ⓑ{p,I}V.T = ⓑ{p,I}●[gv,lv]V.●[⇡[0]gv,⇡[0←#0]lv]T. + ●[gv,lv]ⓑ[p,I]V.T = ⓑ[p,I]●[gv,lv]V.●[⇡[0]gv,⇡[0←#0]lv]T. // qed. lemma mf_flat (I): ∀gv,lv,V,T. - ●[gv,lv]ⓕ{I}V.T = ⓕ{I}●[gv,lv]V.●[gv,lv]T. + ●[gv,lv]ⓕ[I]V.T = ⓕ[I]●[gv,lv]V.●[gv,lv]T. // qed. diff --git a/matita/matita/contribs/lambdadelta/apps_2/functional/mf_cpr.ma b/matita/matita/contribs/lambdadelta/apps_2/functional/mf_cpr.ma index d4e5d447a..fc472668b 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/functional/mf_cpr.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/functional/mf_cpr.ma @@ -20,9 +20,9 @@ include "apps_2/functional/mf_exteq.ma". (* Properties with relocation ***********************************************) -lemma mf_delta_drops (h) (G): ∀K,V1,V2. ⦃G,K⦄ ⊢ V1 ➡[h] V2 → +lemma mf_delta_drops (h) (G): ∀K,V1,V2. ❪G,K❫ ⊢ V1 ➡[h] V2 → ∀T,L,l. ⇩*[l] L ≘ K.ⓓV1 → - ∀gv,lv. ⦃G,L⦄ ⊢ ●[gv,⇡[l←#l]lv]T ➡[h] ●[gv,⇡[l←↑[↑l]V2]lv]T. + ∀gv,lv. ❪G,L❫ ⊢ ●[gv,⇡[l←#l]lv]T ➡[h] ●[gv,⇡[l←↑[↑l]V2]lv]T. #h #G #K #V1 #V2 #HV #T elim T -T * // [ #i #L #l #HKL #gv #lv >mf_lref >mf_lref diff --git a/matita/matita/contribs/lambdadelta/apps_2/models/deq_cpr.ma b/matita/matita/contribs/lambdadelta/apps_2/models/deq_cpr.ma index 3e085aeea..7d648b075 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/models/deq_cpr.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/models/deq_cpr.ma @@ -21,7 +21,7 @@ include "apps_2/models/deq.ma". (* Forward lemmas with context-sensitive parallel reduction for terms *******) lemma cpr_fwd_deq (h) (M): is_model M → is_extensional M → - ∀G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ➡[h] T2 → ⦃G,L⦄ ⊢ T1 ≗{M} T2. + ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡[h] T2 → ❪G,L❫ ⊢ T1 ≗{M} T2. #h #M #H1M #H2M #G #L #T1 #T2 #H @(cpr_ind … H) -G -L -T1 -T2 [ /2 width=2 by deq_refl/ | #G #K #V1 #V2 #W2 #_ #IH #HVW2 #gv #v #H diff --git a/matita/matita/contribs/lambdadelta/apps_2/models/li.ma b/matita/matita/contribs/lambdadelta/apps_2/models/li.ma index 6975017c5..441b8b377 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/models/li.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/models/li.ma @@ -22,7 +22,7 @@ inductive li (M) (gv): relation2 lenv (evaluation M) ≝ | li_atom: ∀lv. li M gv (⋆) lv | li_abbr: ∀lv,d,L,V. li M gv L lv → ⟦V⟧[gv,lv] = d → li M gv (L.ⓓV) (⫯[0←d]lv) | li_abst: ∀lv,d,L,W. li M gv L lv → li M gv (L.ⓛW) (⫯[0←d]lv) -| li_unit: ∀lv,d,I,L. li M gv L lv → li M gv (L.ⓤ{I}) (⫯[0←d]lv) +| li_unit: ∀lv,d,I,L. li M gv L lv → li M gv (L.ⓤ[I]) (⫯[0←d]lv) | li_veq : ∀lv1,lv2,L. li M gv L lv1 → lv1 ≗ lv2 → li M gv L lv2 . @@ -72,7 +72,7 @@ lemma li_inv_abst (M) (gv): is_model M → /2 width=4 by li_inv_abst_aux/ qed-. fact li_inv_unit_aux (M) (gv): is_model M → - ∀v,Y. v ϵ ⟦Y⟧{M}[gv] → ∀I,L. Y = L.ⓤ{I} → + ∀v,Y. v ϵ ⟦Y⟧{M}[gv] → ∀I,L. Y = L.ⓤ[I] → ∃∃lv,d. lv ϵ ⟦L⟧[gv] & ⫯[0←d]lv ≗ v. #M #gv #HM #v #Y #H elim H -v -Y [ #lv #J #K #H destruct @@ -87,14 +87,14 @@ fact li_inv_unit_aux (M) (gv): is_model M → qed-. lemma li_inv_unit (M) (gv): is_model M → - ∀v,I,L. v ϵ ⟦L.ⓤ{I}⟧{M}[gv] → + ∀v,I,L. v ϵ ⟦L.ⓤ[I]⟧{M}[gv] → ∃∃lv,d. lv ϵ ⟦L⟧[gv] & ⫯[0←d]lv ≗ v. /2 width=4 by li_inv_unit_aux/ qed-. (* Advanced forward lemmas **************************************************) lemma li_fwd_bind (M) (gv): is_model M → - ∀v,I,L. v ϵ ⟦L.ⓘ{I}⟧{M}[gv] → + ∀v,I,L. v ϵ ⟦L.ⓘ[I]⟧{M}[gv] → ∃∃lv,d. lv ϵ ⟦L⟧[gv] & ⫯[0←d]lv ≗ v. #M #gv #HM #v * [ #I | * #V ] #L #H [ /2 width=2 by li_inv_unit/ diff --git a/matita/matita/contribs/lambdadelta/apps_2/models/model_props.ma b/matita/matita/contribs/lambdadelta/apps_2/models/model_props.ma index d06b4efda..f6c8d4c58 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/models/model_props.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/models/model_props.ma @@ -34,9 +34,9 @@ record is_model (M): Prop ≝ { (* Note: interpretation: intensional binder *) mi: ∀p,gv1,gv2,lv1,lv2,W,T. ⟦W⟧{M}[gv1,lv1] ≗ ⟦W⟧{M}[gv2,lv2] → (∀d. ⟦T⟧{M}[gv1,⫯[0←d]lv1] ≗ ⟦T⟧{M}[gv2,⫯[0←d]lv2]) → - ⟦ⓛ{p}W.T⟧[gv1,lv1] ≗ ⟦ⓛ{p}W.T⟧[gv2,lv2]; + ⟦ⓛ[p]W.T⟧[gv1,lv1] ≗ ⟦ⓛ[p]W.T⟧[gv2,lv2]; (* Note: interpretation: abbreviation *) - md: ∀p,gv,lv,V,T. ⟦ⓓ{p}V.T⟧{M}[gv,lv] ≗ ⟦V⟧[gv,lv] ⊕[p] ⟦T⟧[gv,⫯[0←⟦V⟧[gv,lv]]lv]; + md: ∀p,gv,lv,V,T. ⟦ⓓ[p]V.T⟧{M}[gv,lv] ≗ ⟦V⟧[gv,lv] ⊕[p] ⟦T⟧[gv,⫯[0←⟦V⟧[gv,lv]]lv]; (* Note: interpretation: application *) ma: ∀gv,lv,V,T. ⟦ⓐV.T⟧{M}[gv,lv] ≗ ⟦V⟧[gv,lv] @ ⟦T⟧[gv,lv]; (* Note: interpretation: ζ-equivalence *) @@ -44,7 +44,7 @@ record is_model (M): Prop ≝ { (* Note: interpretation: ϵ-equivalence *) me: ∀gv,lv,W,T. ⟦ⓝW.T⟧{M}[gv,lv] ≗ ⟦T⟧[gv,lv]; (* Note: interpretation: β-requivalence *) - mb: ∀p,gv,lv,d,W,T. d @ ⟦ⓛ{p}W.T⟧{M}[gv,lv] ≗ d ⊕[p] ⟦T⟧[gv,⫯[0←d]lv]; + mb: ∀p,gv,lv,d,W,T. d @ ⟦ⓛ[p]W.T⟧{M}[gv,lv] ≗ d ⊕[p] ⟦T⟧[gv,⫯[0←d]lv]; (* Note: interpretation: θ-requivalence *) mh: ∀p,d1,d2,d3. d1 @ (d2 ⊕{M}[p] d3) ≗ d2 ⊕[p] (d1 @ d3) }. @@ -53,7 +53,7 @@ record is_extensional (M): Prop ≝ { (* Note: interpretation: extensional abstraction *) mx: ∀p,gv1,gv2,lv1,lv2,W1,W2,T1,T2. ⟦W1⟧{M}[gv1,lv1] ≗ ⟦W2⟧{M}[gv2,lv2] → (∀d. ⟦T1⟧{M}[gv1,⫯[0←d]lv1] ≗ ⟦T2⟧{M}[gv2,⫯[0←d]lv2]) → - ⟦ⓛ{p}W1.T1⟧[gv1,lv1] ≗ ⟦ⓛ{p}W2.T2⟧[gv2,lv2] + ⟦ⓛ[p]W1.T1⟧[gv1,lv1] ≗ ⟦ⓛ[p]W2.T2⟧[gv2,lv2] }. record is_injective (M): Prop ≝ { @@ -99,7 +99,7 @@ qed. lemma ti_fwd_mx_dx (M): is_model M → is_injective M → ∀p,gv1,gv2,lv1,lv2,W1,W2,T1,T2. - ⟦ⓛ{p}W1.T1⟧[gv1,lv1] ≗ ⟦ⓛ{p}W2.T2⟧[gv2,lv2] → + ⟦ⓛ[p]W1.T1⟧[gv1,lv1] ≗ ⟦ⓛ[p]W2.T2⟧[gv2,lv2] → ∀d. ⟦T1⟧{M}[gv1,⫯[0←d]lv1] ≗ ⟦T2⟧{M}[gv2,⫯[0←d]lv2]. #M #H1M #H2M #p #gv1 #gv2 #lv1 #lv2 #W1 #W2 #T1 #T2 #H12 #d @(co_inv_dx … p d d) @@ -108,7 +108,7 @@ qed-. lemma ti_fwd_abbr_dx (M): is_model M → is_injective M → ∀p,gv1,gv2,lv1,lv2,V1,V2,T1,T2. - ⟦ⓓ{p}V1.T1⟧[gv1,lv1] ≗ ⟦ⓓ{p}V2.T2⟧[gv2,lv2] → + ⟦ⓓ[p]V1.T1⟧[gv1,lv1] ≗ ⟦ⓓ[p]V2.T2⟧[gv2,lv2] → ⟦T1⟧{M}[gv1,⫯[0←⟦V1⟧[gv1,lv1]]lv1] ≗ ⟦T2⟧{M}[gv2,⫯[0←⟦V2⟧[gv2,lv2]]lv2]. #M #H1M #H2M #p #gv1 #gv2 #lv1 #lv2 #V1 #V2 #T1 #T2 #H12 @(co_inv_dx … p (⟦V1⟧[gv1,lv1]) (⟦V2⟧[gv2,lv2])) diff --git a/matita/matita/contribs/lambdadelta/apps_2/models/tm.ma b/matita/matita/contribs/lambdadelta/apps_2/models/tm.ma index 00358c9a2..613d67a7e 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/models/tm.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/models/tm.ma @@ -20,11 +20,11 @@ include "apps_2/models/model.ma". definition tm_dd ≝ term. -definition tm_sq (h) (T1) (T2) ≝ ⦃⋆,⋆⦄ ⊢ T1 ⬌*[h] T2. +definition tm_sq (h) (T1) (T2) ≝ ❪⋆,⋆❫ ⊢ T1 ⬌*[h] T2. definition tm_sv (s) ≝ ⋆s. -definition tm_co (p) (V) (T) ≝ ⓓ{p}V.(↑[1]T). +definition tm_co (p) (V) (T) ≝ ⓓ[p]V.(↑[1]T). definition tm_ap (V) (T) ≝ ⓐV.T. @@ -42,7 +42,7 @@ defined-. (* Basic properties *********************************************************) -lemma tm_co_rw (h) (p) (V) (T): V⊕{TM h}[p]T = ⓓ{p}V.(↑[1]T). +lemma tm_co_rw (h) (p) (V) (T): V⊕{TM h}[p]T = ⓓ[p]V.(↑[1]T). // qed. lemma tm_ti_sort (h) (gv) (lv): ∀s. ⟦⋆s⟧{TM h}[gv,lv] = sv … s. @@ -55,5 +55,5 @@ lemma tm_ti_gref (h): ∀gv,lv,l. ⟦§l⟧{TM h}[gv,lv] = gv l. // qed. lemma tm_ti_bind (h) (p) (I): ∀gv,lv,V,T. - ⟦ⓑ{p,I}V.T⟧{TM h}[gv,lv] = ⓑ{p,I}⟦V⟧[gv,lv].⟦T⟧{TM h}[⇡[0]gv,⇡[0←#0]lv]. + ⟦ⓑ[p,I]V.T⟧{TM h}[gv,lv] = ⓑ[p,I]⟦V⟧[gv,lv].⟦T⟧{TM h}[⇡[0]gv,⇡[0←#0]lv]. // qed. diff --git a/matita/matita/contribs/lambdadelta/apps_2/models/tm_props.ma b/matita/matita/contribs/lambdadelta/apps_2/models/tm_props.ma index 280bd8e51..1f3c49413 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/models/tm_props.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/models/tm_props.ma @@ -30,7 +30,7 @@ lemma pippo (h) (gv) (lv) (T): ●[gv,lv]T = ⟦T⟧{TM h}[gv,lv]. lemma tm_mi (h) (gv1) (gv2) (lv1) (lv2) (p) (W) (T): ⟦W⟧[gv1,lv1] ≗{TM h} ⟦W⟧[gv2,lv2] → (∀d. ⟦T⟧[gv1,⫯[0←d]lv1] ≗ ⟦T⟧[gv2,⫯[0←d]lv2]) → - ⟦ⓛ{p}W.T⟧[gv1,lv1] ≗ ⟦ⓛ{p}W.T⟧[gv2,lv2]. + ⟦ⓛ[p]W.T⟧[gv1,lv1] ≗ ⟦ⓛ[p]W.T⟧[gv2,lv2]. #h #gv1 #gv2 #lv1 #lv2 #p #W #T #HW #HT >tm_ti_bind >tm_ti_bind @(cpcs_bind1 … HW) @@ -46,7 +46,7 @@ lapply (HT (#0)) -HT #HT *) lemma tm_md (h) (p) (gv) (lv) (V) (T): - ⓓ{p}V.⟦T⟧{TM h}[⇡[0]gv,⇡[0←#0]lv] ≗{TM h} V⊕{TM h}[p]⟦T⟧{TM h}[gv,⫯{TM h}[0←V]lv]. + ⓓ[p]V.⟦T⟧{TM h}[⇡[0]gv,⇡[0←#0]lv] ≗{TM h} V⊕{TM h}[p]⟦T⟧{TM h}[gv,⫯{TM h}[0←V]lv]. #h #p #gv #lv #V #T >tm_co_rw >(mf_lifts_basic_SO_dx T 0) >(mf_comp … T) in ⊢ (???%); @@ -62,7 +62,7 @@ lemma tm_me (h) (gv) (lv) (U) (T): /4 width=1 by cpc_cpcs, cpm_eps, or_introl/ qed. lemma tm_mb (h) (p) (gv) (lv) (d) (W) (T): - d@⟦ⓛ{p}W.T⟧[gv,lv] ≗{TM h} d⊕[p]⟦T⟧[gv,⫯[0←d]lv]. + d@⟦ⓛ[p]W.T⟧[gv,lv] ≗{TM h} d⊕[p]⟦T⟧[gv,⫯[0←d]lv]. #h #p #gv #lv #d #W #T @cpcs_repl [5: @tm_md |4: /4 width=2 by cpc_cpcs, cpm_beta, or_intror/ |1,2: skip ] /5 width=1 by cpcs_bind1, cpc_cpcs, cpm_eps, or_introl/ diff --git a/matita/matita/contribs/lambdadelta/apps_2/models/veq_lifts.ma b/matita/matita/contribs/lambdadelta/apps_2/models/veq_lifts.ma index ee36afae2..2c624e69f 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/models/veq_lifts.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/models/veq_lifts.ma @@ -21,7 +21,7 @@ include "apps_2/models/veq.ma". (* Forward lemmas with generic relocation ***********************************) fact lifts_fwd_vpush_aux (M): is_model M → is_extensional M → - ∀f,T1,T2. ⇧*[f] T1 ≘ T2 → ∀m. 𝐁❴m,1❵ = f → + ∀f,T1,T2. ⇧*[f] T1 ≘ T2 → ∀m. 𝐁❨m,1❩ = f → ∀gv,lv,d. ⟦T1⟧[gv,lv] ≗{M} ⟦T2⟧[gv,⫯[m←d]lv]. #M #H1M #H2M #f #T1 #T2 #H elim H -f -T1 -T2 [ #f #s #m #Hf #gv #lv #d diff --git a/matita/matita/contribs/lambdadelta/apps_2/models/vpushs.ma b/matita/matita/contribs/lambdadelta/apps_2/models/vpushs.ma index c401800d1..b19a742ca 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/models/vpushs.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/models/vpushs.ma @@ -22,7 +22,7 @@ inductive vpushs (M) (gv) (lv): relation2 lenv (evaluation M) ≝ | vpushs_atom: vpushs M gv lv (⋆) lv | vpushs_abbr: ∀v,d,K,V. vpushs M gv lv K v → ⟦V⟧[gv,v] = d → vpushs M gv lv (K.ⓓV) (⫯[0←d]v) | vpushs_abst: ∀v,d,K,V. vpushs M gv lv K v → vpushs M gv lv (K.ⓛV) (⫯[0←d]v) -| vpushs_unit: ∀v,d,I,K. vpushs M gv lv K v → vpushs M gv lv (K.ⓤ{I}) (⫯[0←d]v) +| vpushs_unit: ∀v,d,I,K. vpushs M gv lv K v → vpushs M gv lv (K.ⓤ[I]) (⫯[0←d]v) | vpushs_repl: ∀v1,v2,L. vpushs M gv lv L v1 → v1 ≗ v2 → vpushs M gv lv L v2 . @@ -92,7 +92,7 @@ lemma vpushs_inv_abst (M) (gv) (lv): is_model M → fact vpushs_inv_unit_aux (M) (gv) (lv): is_model M → ∀y,L. L ⨁{M}[gv] lv ≘ y → - ∀I,K. K.ⓤ{I} = L → + ∀I,K. K.ⓤ[I] = L → ∃∃v,d. K ⨁[gv] lv ≘ v & ⫯[0←d]v ≗ y. #M #gv #lv #HM #y #L #H elim H -y -L [ #Z #Y #H destruct @@ -107,14 +107,14 @@ fact vpushs_inv_unit_aux (M) (gv) (lv): is_model M → qed-. lemma vpushs_inv_unit (M) (gv) (lv): is_model M → - ∀y,I,K. K.ⓤ{I} ⨁{M}[gv] lv ≘ y → + ∀y,I,K. K.ⓤ[I] ⨁{M}[gv] lv ≘ y → ∃∃v,d. K ⨁[gv] lv ≘ v & ⫯[0←d]v ≗ y. /2 width=4 by vpushs_inv_unit_aux/ qed-. (* Basic forward lemmas *****************************************************) lemma vpushs_fwd_bind (M) (gv) (lv): is_model M → - ∀y,I,K. K.ⓘ{I} ⨁{M}[gv] lv ≘ y → + ∀y,I,K. K.ⓘ[I] ⨁{M}[gv] lv ≘ y → ∃∃v,d. K ⨁[gv] lv ≘ v & ⫯[0←d]v ≗ y. #M #gv #lv #HM #y * [ #I | * #V ] #L #H [ /2 width=2 by vpushs_inv_unit/ diff --git a/matita/matita/contribs/lambdadelta/apps_2/notation/models/ringeq_5.ma b/matita/matita/contribs/lambdadelta/apps_2/notation/models/ringeq_5.ma index 94e36c02d..4543782b2 100644 --- a/matita/matita/contribs/lambdadelta/apps_2/notation/models/ringeq_5.ma +++ b/matita/matita/contribs/lambdadelta/apps_2/notation/models/ringeq_5.ma @@ -14,14 +14,14 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation < "hvbox( ⦃ term 46 G, break term 46 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 @{ 'RingEq $M $G $L $T1 $T2 }. -notation > "hvbox( ⦃ term 46 G, break term 46 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 @{ 'RingEq ? $G $L $T1 $T2 }. -notation > "hvbox( ⦃ term 46 G, break term 46 L ⦄ ⊢ break term 46 T1 ≗{ break term 46 M } break term 46 T2 )" +notation > "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ≗{ break term 46 M } break term 46 T2 )" non associative with precedence 45 for @{ 'RingEq $M $G $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv.ma index 14da27905..256b798b5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv.ma @@ -23,13 +23,13 @@ include "basic_2/rt_computation/cpms.ma". (* Basic_2A1: uses: snv *) inductive cnv (h) (a): relation3 genv lenv term ≝ | cnv_sort: ∀G,L,s. cnv h a G L (⋆s) -| cnv_zero: ∀I,G,K,V. cnv h a G K V → cnv h a G (K.ⓑ{I}V) (#0) -| cnv_lref: ∀I,G,K,i. cnv h a G K (#i) → cnv h a G (K.ⓘ{I}) (#↑i) -| cnv_bind: ∀p,I,G,L,V,T. cnv h a G L V → cnv h a G (L.ⓑ{I}V) T → cnv h a G L (ⓑ{p,I}V.T) +| cnv_zero: ∀I,G,K,V. cnv h a G K V → cnv h a G (K.ⓑ[I]V) (#0) +| cnv_lref: ∀I,G,K,i. cnv h a G K (#i) → cnv h a G (K.ⓘ[I]) (#↑i) +| cnv_bind: ∀p,I,G,L,V,T. cnv h a G L V → cnv h a G (L.ⓑ[I]V) T → cnv h a G L (ⓑ[p,I]V.T) | cnv_appl: ∀n,p,G,L,V,W0,T,U0. ad a n → cnv h a G L V → cnv h a G L T → - ⦃G,L⦄ ⊢ V ➡*[1,h] W0 → ⦃G,L⦄ ⊢ T ➡*[n,h] ⓛ{p}W0.U0 → cnv h a G L (ⓐV.T) + ❪G,L❫ ⊢ V ➡*[1,h] W0 → ❪G,L❫ ⊢ T ➡*[n,h] ⓛ[p]W0.U0 → cnv h a G L (ⓐV.T) | cnv_cast: ∀G,L,U,T,U0. cnv h a G L U → cnv h a G L T → - ⦃G,L⦄ ⊢ U ➡*[h] U0 → ⦃G,L⦄ ⊢ T ➡*[1,h] U0 → cnv h a G L (ⓝU.T) + ❪G,L❫ ⊢ U ➡*[h] U0 → ❪G,L❫ ⊢ T ➡*[1,h] U0 → cnv h a G L (ⓝU.T) . interpretation "context-sensitive native validity (term)" @@ -38,8 +38,8 @@ interpretation "context-sensitive native validity (term)" (* Basic inversion lemmas ***************************************************) fact cnv_inv_zero_aux (h) (a): - ∀G,L,X. ⦃G,L⦄ ⊢ X ![h,a] → X = #0 → - ∃∃I,K,V. ⦃G,K⦄ ⊢ V ![h,a] & L = K.ⓑ{I}V. + ∀G,L,X. ❪G,L❫ ⊢ X ![h,a] → X = #0 → + ∃∃I,K,V. ❪G,K❫ ⊢ V ![h,a] & L = K.ⓑ[I]V. #h #a #G #L #X * -G -L -X [ #G #L #s #H destruct | #I #G #K #V #HV #_ /2 width=5 by ex2_3_intro/ @@ -51,13 +51,13 @@ fact cnv_inv_zero_aux (h) (a): qed-. lemma cnv_inv_zero (h) (a): - ∀G,L. ⦃G,L⦄ ⊢ #0 ![h,a] → - ∃∃I,K,V. ⦃G,K⦄ ⊢ V ![h,a] & L = K.ⓑ{I}V. + ∀G,L. ❪G,L❫ ⊢ #0 ![h,a] → + ∃∃I,K,V. ❪G,K❫ ⊢ V ![h,a] & L = K.ⓑ[I]V. /2 width=3 by cnv_inv_zero_aux/ qed-. fact cnv_inv_lref_aux (h) (a): - ∀G,L,X. ⦃G,L⦄ ⊢ X ![h,a] → ∀i. X = #(↑i) → - ∃∃I,K. ⦃G,K⦄ ⊢ #i ![h,a] & L = K.ⓘ{I}. + ∀G,L,X. ❪G,L❫ ⊢ X ![h,a] → ∀i. X = #(↑i) → + ∃∃I,K. ❪G,K❫ ⊢ #i ![h,a] & L = K.ⓘ[I]. #h #a #G #L #X * -G -L -X [ #G #L #s #j #H destruct | #I #G #K #V #_ #j #H destruct @@ -69,11 +69,11 @@ fact cnv_inv_lref_aux (h) (a): qed-. lemma cnv_inv_lref (h) (a): - ∀G,L,i. ⦃G,L⦄ ⊢ #↑i ![h,a] → - ∃∃I,K. ⦃G,K⦄ ⊢ #i ![h,a] & L = K.ⓘ{I}. + ∀G,L,i. ❪G,L❫ ⊢ #↑i ![h,a] → + ∃∃I,K. ❪G,K❫ ⊢ #i ![h,a] & L = K.ⓘ[I]. /2 width=3 by cnv_inv_lref_aux/ qed-. -fact cnv_inv_gref_aux (h) (a): ∀G,L,X. ⦃G,L⦄ ⊢ X ![h,a] → ∀l. X = §l → ⊥. +fact cnv_inv_gref_aux (h) (a): ∀G,L,X. ❪G,L❫ ⊢ X ![h,a] → ∀l. X = §l → ⊥. #h #a #G #L #X * -G -L -X [ #G #L #s #l #H destruct | #I #G #K #V #_ #l #H destruct @@ -85,13 +85,13 @@ fact cnv_inv_gref_aux (h) (a): ∀G,L,X. ⦃G,L⦄ ⊢ X ![h,a] → ∀l. X = § qed-. (* Basic_2A1: uses: snv_inv_gref *) -lemma cnv_inv_gref (h) (a): ∀G,L,l. ⦃G,L⦄ ⊢ §l ![h,a] → ⊥. +lemma cnv_inv_gref (h) (a): ∀G,L,l. ❪G,L❫ ⊢ §l ![h,a] → ⊥. /2 width=8 by cnv_inv_gref_aux/ qed-. fact cnv_inv_bind_aux (h) (a): - ∀G,L,X. ⦃G,L⦄ ⊢ X ![h,a] → - ∀p,I,V,T. X = ⓑ{p,I}V.T → - ∧∧ ⦃G,L⦄ ⊢ V ![h,a] & ⦃G,L.ⓑ{I}V⦄ ⊢ T ![h,a]. + ∀G,L,X. ❪G,L❫ ⊢ X ![h,a] → + ∀p,I,V,T. X = ⓑ[p,I]V.T → + ∧∧ ❪G,L❫ ⊢ V ![h,a] & ❪G,L.ⓑ[I]V❫ ⊢ T ![h,a]. #h #a #G #L #X * -G -L -X [ #G #L #s #q #Z #X1 #X2 #H destruct | #I #G #K #V #_ #q #Z #X1 #X2 #H destruct @@ -104,14 +104,14 @@ qed-. (* Basic_2A1: uses: snv_inv_bind *) lemma cnv_inv_bind (h) (a): - ∀p,I,G,L,V,T. ⦃G,L⦄ ⊢ ⓑ{p,I}V.T ![h,a] → - ∧∧ ⦃G,L⦄ ⊢ V ![h,a] & ⦃G,L.ⓑ{I}V⦄ ⊢ T ![h,a]. + ∀p,I,G,L,V,T. ❪G,L❫ ⊢ ⓑ[p,I]V.T ![h,a] → + ∧∧ ❪G,L❫ ⊢ V ![h,a] & ❪G,L.ⓑ[I]V❫ ⊢ T ![h,a]. /2 width=4 by cnv_inv_bind_aux/ qed-. fact cnv_inv_appl_aux (h) (a): - ∀G,L,X. ⦃G,L⦄ ⊢ X ![h,a] → ∀V,T. X = ⓐV.T → - ∃∃n,p,W0,U0. ad a n & ⦃G,L⦄ ⊢ V ![h,a] & ⦃G,L⦄ ⊢ T ![h,a] & - ⦃G,L⦄ ⊢ V ➡*[1,h] W0 & ⦃G,L⦄ ⊢ T ➡*[n,h] ⓛ{p}W0.U0. + ∀G,L,X. ❪G,L❫ ⊢ X ![h,a] → ∀V,T. X = ⓐV.T → + ∃∃n,p,W0,U0. ad a n & ❪G,L❫ ⊢ V ![h,a] & ❪G,L❫ ⊢ T ![h,a] & + ❪G,L❫ ⊢ V ➡*[1,h] W0 & ❪G,L❫ ⊢ T ➡*[n,h] ⓛ[p]W0.U0. #h #a #G #L #X * -L -X [ #G #L #s #X1 #X2 #H destruct | #I #G #K #V #_ #X1 #X2 #H destruct @@ -124,15 +124,15 @@ qed-. (* Basic_2A1: uses: snv_inv_appl *) lemma cnv_inv_appl (h) (a): - ∀G,L,V,T. ⦃G,L⦄ ⊢ ⓐV.T ![h,a] → - ∃∃n,p,W0,U0. ad a n & ⦃G,L⦄ ⊢ V ![h,a] & ⦃G,L⦄ ⊢ T ![h,a] & - ⦃G,L⦄ ⊢ V ➡*[1,h] W0 & ⦃G,L⦄ ⊢ T ➡*[n,h] ⓛ{p}W0.U0. + ∀G,L,V,T. ❪G,L❫ ⊢ ⓐV.T ![h,a] → + ∃∃n,p,W0,U0. ad a n & ❪G,L❫ ⊢ V ![h,a] & ❪G,L❫ ⊢ T ![h,a] & + ❪G,L❫ ⊢ V ➡*[1,h] W0 & ❪G,L❫ ⊢ T ➡*[n,h] ⓛ[p]W0.U0. /2 width=3 by cnv_inv_appl_aux/ qed-. fact cnv_inv_cast_aux (h) (a): - ∀G,L,X. ⦃G,L⦄ ⊢ X ![h,a] → ∀U,T. X = ⓝU.T → - ∃∃U0. ⦃G,L⦄ ⊢ U ![h,a] & ⦃G,L⦄ ⊢ T ![h,a] & - ⦃G,L⦄ ⊢ U ➡*[h] U0 & ⦃G,L⦄ ⊢ T ➡*[1,h] U0. + ∀G,L,X. ❪G,L❫ ⊢ X ![h,a] → ∀U,T. X = ⓝU.T → + ∃∃U0. ❪G,L❫ ⊢ U ![h,a] & ❪G,L❫ ⊢ T ![h,a] & + ❪G,L❫ ⊢ U ➡*[h] U0 & ❪G,L❫ ⊢ T ➡*[1,h] U0. #h #a #G #L #X * -G -L -X [ #G #L #s #X1 #X2 #H destruct | #I #G #K #V #_ #X1 #X2 #H destruct @@ -145,16 +145,16 @@ qed-. (* Basic_2A1: uses: snv_inv_cast *) lemma cnv_inv_cast (h) (a): - ∀G,L,U,T. ⦃G,L⦄ ⊢ ⓝU.T ![h,a] → - ∃∃U0. ⦃G,L⦄ ⊢ U ![h,a] & ⦃G,L⦄ ⊢ T ![h,a] & - ⦃G,L⦄ ⊢ U ➡*[h] U0 & ⦃G,L⦄ ⊢ T ➡*[1,h] U0. + ∀G,L,U,T. ❪G,L❫ ⊢ ⓝU.T ![h,a] → + ∃∃U0. ❪G,L❫ ⊢ U ![h,a] & ❪G,L❫ ⊢ T ![h,a] & + ❪G,L❫ ⊢ U ➡*[h] U0 & ❪G,L❫ ⊢ T ➡*[1,h] U0. /2 width=3 by cnv_inv_cast_aux/ qed-. (* Basic forward lemmas *****************************************************) lemma cnv_fwd_flat (h) (a) (I) (G) (L): - ∀V,T. ⦃G,L⦄ ⊢ ⓕ{I}V.T ![h,a] → - ∧∧ ⦃G,L⦄ ⊢ V ![h,a] & ⦃G,L⦄ ⊢ T ![h,a]. + ∀V,T. ❪G,L❫ ⊢ ⓕ[I]V.T ![h,a] → + ∧∧ ❪G,L❫ ⊢ V ![h,a] & ❪G,L❫ ⊢ T ![h,a]. #h #a * #G #L #V #T #H [ elim (cnv_inv_appl … H) #n #p #W #U #_ #HV #HT #_ #_ | elim (cnv_inv_cast … H) #U #HV #HT #_ #_ @@ -162,7 +162,7 @@ lemma cnv_fwd_flat (h) (a) (I) (G) (L): qed-. lemma cnv_fwd_pair_sn (h) (a) (I) (G) (L): - ∀V,T. ⦃G,L⦄ ⊢ ②{I}V.T ![h,a] → ⦃G,L⦄ ⊢ V ![h,a]. + ∀V,T. ❪G,L❫ ⊢ ②[I]V.T ![h,a] → ❪G,L❫ ⊢ V ![h,a]. #h #a * [ #p ] #I #G #L #V #T #H [ elim (cnv_inv_bind … H) -H #HV #_ | elim (cnv_fwd_flat … H) -H #HV #_ diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_aaa.ma index e96946f06..d47a061e3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_aaa.ma @@ -20,7 +20,7 @@ include "basic_2/dynamic/cnv.ma". (* Forward lemmas on atomic arity assignment for terms **********************) (* Basic_2A1: uses: snv_fwd_aaa *) -lemma cnv_fwd_aaa (h) (a): ∀G,L,T. ⦃G,L⦄ ⊢ T ![h,a] → ∃A. ⦃G,L⦄ ⊢ T ⁝ A. +lemma cnv_fwd_aaa (h) (a): ∀G,L,T. ❪G,L❫ ⊢ T ![h,a] → ∃A. ❪G,L❫ ⊢ T ⁝ A. #h #a #G #L #T #H elim H -G -L -T [ /2 width=2 by aaa_sort, ex_intro/ | #I #G #L #V #_ * /3 width=2 by aaa_zero, ex_intro/ @@ -44,7 +44,7 @@ qed-. (* Forward lemmas with t_bound rt_transition for terms **********************) lemma cnv_fwd_cpm_SO (h) (a) (G) (L): - ∀T. ⦃G,L⦄ ⊢ T ![h,a] → ∃U. ⦃G,L⦄ ⊢ T ➡[1,h] U. + ∀T. ❪G,L❫ ⊢ T ![h,a] → ∃U. ❪G,L❫ ⊢ T ➡[1,h] U. #h #a #G #L #T #H elim (cnv_fwd_aaa … H) -H #A #HA /2 width=2 by aaa_cpm_SO/ @@ -53,16 +53,16 @@ qed-. (* Forward lemmas with t_bound rt_computation for terms *********************) lemma cnv_fwd_cpms_total (h) (a) (n) (G) (L): - ∀T. ⦃G,L⦄ ⊢ T ![h,a] → ∃U. ⦃G,L⦄ ⊢ T ➡*[n,h] U. + ∀T. ❪G,L❫ ⊢ T ![h,a] → ∃U. ❪G,L❫ ⊢ T ➡*[n,h] U. #h #a #n #G #L #T #H elim (cnv_fwd_aaa … H) -H #A #HA /2 width=2 by cpms_total_aaa/ qed-. lemma cnv_fwd_cpms_abst_dx_le (h) (a) (G) (L) (W) (p): - ∀T. ⦃G,L⦄ ⊢ T ![h,a] → - ∀n1,U1. ⦃G,L⦄ ⊢ T ➡*[n1,h] ⓛ{p}W.U1 → ∀n2. n1 ≤ n2 → - ∃∃U2. ⦃G,L⦄ ⊢ T ➡*[n2,h] ⓛ{p}W.U2 & ⦃G,L.ⓛW⦄ ⊢ U1 ➡*[n2-n1,h] U2. + ∀T. ❪G,L❫ ⊢ T ![h,a] → + ∀n1,U1. ❪G,L❫ ⊢ T ➡*[n1,h] ⓛ[p]W.U1 → ∀n2. n1 ≤ n2 → + ∃∃U2. ❪G,L❫ ⊢ T ➡*[n2,h] ⓛ[p]W.U2 & ❪G,L.ⓛW❫ ⊢ U1 ➡*[n2-n1,h] U2. #h #a #G #L #W #p #T #H elim (cnv_fwd_aaa … H) -H #A #HA /2 width=2 by cpms_abst_dx_le_aaa/ @@ -72,9 +72,9 @@ qed-. lemma cnv_appl_ge (h) (a) (n1) (p) (G) (L): ∀n2. n1 ≤ n2 → ad a n2 → - ∀V. ⦃G,L⦄ ⊢ V ![h,a] → ∀T. ⦃G,L⦄ ⊢ T ![h,a] → - ∀X. ⦃G,L⦄ ⊢ V ➡*[1,h] X → ∀W. ⦃G,L⦄ ⊢ W ➡*[h] X → - ∀U. ⦃G,L⦄ ⊢ T ➡*[n1,h] ⓛ{p}W.U → ⦃G,L⦄ ⊢ ⓐV.T ![h,a]. + ∀V. ❪G,L❫ ⊢ V ![h,a] → ∀T. ❪G,L❫ ⊢ T ![h,a] → + ∀X. ❪G,L❫ ⊢ V ➡*[1,h] X → ∀W. ❪G,L❫ ⊢ W ➡*[h] X → + ∀U. ❪G,L❫ ⊢ T ➡*[n1,h] ⓛ[p]W.U → ❪G,L❫ ⊢ ⓐV.T ![h,a]. #h #a #n1 #p #G #L #n2 #Hn12 #Ha #V #HV #T #HT #X #HVX #W #HW #X #HTX elim (cnv_fwd_cpms_abst_dx_le … HT … HTX … Hn12) #U #HTU #_ -n1 /4 width=11 by cnv_appl, cpms_bind, cpms_cprs_trans/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_acle.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_acle.ma index 4a4a015ac..c0ad6880a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_acle.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_acle.ma @@ -20,7 +20,7 @@ include "basic_2/dynamic/cnv_aaa.ma". (* Properties with preorder for applicability domains ***********************) lemma cnv_acle_trans (h) (a1) (a2): - a1 ⊆ a2 → ∀G,L,T. ⦃G,L⦄ ⊢ T ![h,a1] → ⦃G,L⦄ ⊢ T ![h,a2]. + a1 ⊆ a2 → ∀G,L,T. ❪G,L❫ ⊢ T ![h,a1] → ❪G,L❫ ⊢ T ![h,a2]. #h #a1 #a2 #Ha12 #G #L #T #H elim H -G -L -T [ /1 width=1 by cnv_sort/ | /3 width=1 by cnv_zero/ @@ -34,9 +34,9 @@ lemma cnv_acle_trans (h) (a1) (a2): qed-. lemma cnv_acle_omega (h) (a): - ∀G,L,T. ⦃G,L⦄ ⊢ T ![h,a] → ⦃G,L⦄ ⊢ T ![h,𝛚]. + ∀G,L,T. ❪G,L❫ ⊢ T ![h,a] → ❪G,L❫ ⊢ T ![h,𝛚]. /3 width=3 by cnv_acle_trans, acle_omega/ qed-. lemma cnv_acle_one (h) (a) (n): - ∀G,L,T. ⦃G,L⦄ ⊢ T ![h,𝟏] → ad a n → ⦃G,L⦄ ⊢ T ![h,a]. + ∀G,L,T. ❪G,L❫ ⊢ T ![h,𝟏] → ad a n → ❪G,L❫ ⊢ T ![h,a]. /3 width=3 by cnv_acle_trans, acle_one/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpcs.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpcs.ma index 5ed59b739..8487f1688 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpcs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpcs.ma @@ -21,8 +21,8 @@ include "basic_2/dynamic/cnv_aaa.ma". (* Properties with r-equivalence ********************************************) lemma cnv_cpcs_dec (h) (a) (G) (L): - ∀T1. ⦃G,L⦄ ⊢ T1 ![h,a] → ∀T2. ⦃G,L⦄ ⊢ T2 ![h,a] → - Decidable … (⦃G,L⦄ ⊢ T1 ⬌*[h] T2). + ∀T1. ❪G,L❫ ⊢ T1 ![h,a] → ∀T2. ❪G,L❫ ⊢ T2 ![h,a] → + Decidable … (❪G,L❫ ⊢ T1 ⬌*[h] T2). #h #a #G #L #T1 #HT1 #T2 #HT2 elim (cnv_fwd_aaa … HT1) -HT1 #A1 #HA1 elim (cnv_fwd_aaa … HT2) -HT2 #A2 #HA2 diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpes.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpes.ma index fbf407f50..abfa9df36 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpes.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpes.ma @@ -22,33 +22,33 @@ include "basic_2/dynamic/cnv.ma". lemma cnv_appl_cpes (h) (a) (G) (L): ∀n. ad a n → - ∀V. ⦃G,L⦄ ⊢ V ![h,a] → ∀T. ⦃G,L⦄ ⊢ T ![h,a] → - ∀W. ⦃G,L⦄ ⊢ V ⬌*[h,1,0] W → - ∀p,U. ⦃G,L⦄ ⊢ T ➡*[n,h] ⓛ{p}W.U → ⦃G,L⦄ ⊢ ⓐV.T ![h,a]. + ∀V. ❪G,L❫ ⊢ V ![h,a] → ∀T. ❪G,L❫ ⊢ T ![h,a] → + ∀W. ❪G,L❫ ⊢ V ⬌*[h,1,0] W → + ∀p,U. ❪G,L❫ ⊢ T ➡*[n,h] ⓛ[p]W.U → ❪G,L❫ ⊢ ⓐV.T ![h,a]. #h #a #G #L #n #Hn #V #HV #T #HT #W * /4 width=11 by cnv_appl, cpms_cprs_trans, cpms_bind/ qed. lemma cnv_cast_cpes (h) (a) (G) (L): - ∀U. ⦃G,L⦄ ⊢ U ![h,a] → - ∀T. ⦃G,L⦄ ⊢ T ![h,a] → ⦃G,L⦄ ⊢ U ⬌*[h,0,1] T → ⦃G,L⦄ ⊢ ⓝU.T ![h,a]. + ∀U. ❪G,L❫ ⊢ U ![h,a] → + ∀T. ❪G,L❫ ⊢ T ![h,a] → ❪G,L❫ ⊢ U ⬌*[h,0,1] T → ❪G,L❫ ⊢ ⓝU.T ![h,a]. #h #a #G #L #U #HU #T #HT * /2 width=3 by cnv_cast/ qed. (* Inversion lemmas with t-bound rt-equivalence for terms *******************) lemma cnv_inv_appl_cpes (h) (a) (G) (L): - ∀V,T. ⦃G,L⦄ ⊢ ⓐV.T ![h,a] → - ∃∃n,p,W,U. ad a n & ⦃G,L⦄ ⊢ V ![h,a] & ⦃G,L⦄ ⊢ T ![h,a] & - ⦃G,L⦄ ⊢ V ⬌*[h,1,0] W & ⦃G,L⦄ ⊢ T ➡*[n,h] ⓛ{p}W.U. + ∀V,T. ❪G,L❫ ⊢ ⓐV.T ![h,a] → + ∃∃n,p,W,U. ad a n & ❪G,L❫ ⊢ V ![h,a] & ❪G,L❫ ⊢ T ![h,a] & + ❪G,L❫ ⊢ V ⬌*[h,1,0] W & ❪G,L❫ ⊢ T ➡*[n,h] ⓛ[p]W.U. #h #a #G #L #V #T #H elim (cnv_inv_appl … H) -H #n #p #W #U #Hn #HV #HT #HVW #HTU /3 width=7 by cpms_div, ex5_4_intro/ qed-. lemma cnv_inv_cast_cpes (h) (a) (G) (L): - ∀U,T. ⦃G,L⦄ ⊢ ⓝU.T ![h,a] → - ∧∧ ⦃G,L⦄ ⊢ U ![h,a] & ⦃G,L⦄ ⊢ T ![h,a] & ⦃G,L⦄ ⊢ U ⬌*[h,0,1] T. + ∀U,T. ❪G,L❫ ⊢ ⓝU.T ![h,a] → + ∧∧ ❪G,L❫ ⊢ U ![h,a] & ❪G,L❫ ⊢ T ![h,a] & ❪G,L❫ ⊢ U ⬌*[h,0,1] T. #h #a #G #L #U #T #H elim (cnv_inv_cast … H) -H /3 width=3 by cpms_div, and3_intro/ @@ -58,19 +58,19 @@ qed-. lemma cnv_ind_cpes (h) (a) (Q:relation3 genv lenv term): (∀G,L,s. Q G L (⋆s)) → - (∀I,G,K,V. ⦃G,K⦄ ⊢ V![h,a] → Q G K V → Q G (K.ⓑ{I}V) (#O)) → - (∀I,G,K,i. ⦃G,K⦄ ⊢ #i![h,a] → Q G K (#i) → Q G (K.ⓘ{I}) (#(↑i))) → - (∀p,I,G,L,V,T. ⦃G,L⦄ ⊢ V![h,a] → ⦃G,L.ⓑ{I}V⦄⊢T![h,a] → - Q G L V →Q G (L.ⓑ{I}V) T →Q G L (ⓑ{p,I}V.T) + (∀I,G,K,V. ❪G,K❫ ⊢ V![h,a] → Q G K V → Q G (K.ⓑ[I]V) (#O)) → + (∀I,G,K,i. ❪G,K❫ ⊢ #i![h,a] → Q G K (#i) → Q G (K.ⓘ[I]) (#(↑i))) → + (∀p,I,G,L,V,T. ❪G,L❫ ⊢ V![h,a] → ❪G,L.ⓑ[I]V❫⊢T![h,a] → + Q G L V →Q G (L.ⓑ[I]V) T →Q G L (ⓑ[p,I]V.T) ) → - (∀n,p,G,L,V,W,T,U. ad a n → ⦃G,L⦄ ⊢ V![h,a] → ⦃G,L⦄ ⊢ T![h,a] → - ⦃G,L⦄ ⊢ V ⬌*[h,1,0]W → ⦃G,L⦄ ⊢ T ➡*[n,h] ⓛ{p}W.U → + (∀n,p,G,L,V,W,T,U. ad a n → ❪G,L❫ ⊢ V![h,a] → ❪G,L❫ ⊢ T![h,a] → + ❪G,L❫ ⊢ V ⬌*[h,1,0]W → ❪G,L❫ ⊢ T ➡*[n,h] ⓛ[p]W.U → Q G L V → Q G L T → Q G L (ⓐV.T) ) → - (∀G,L,U,T. ⦃G,L⦄⊢ U![h,a] → ⦃G,L⦄ ⊢ T![h,a] → ⦃G,L⦄ ⊢ U ⬌*[h,0,1] T → + (∀G,L,U,T. ❪G,L❫⊢ U![h,a] → ❪G,L❫ ⊢ T![h,a] → ❪G,L❫ ⊢ U ⬌*[h,0,1] T → Q G L U → Q G L T → Q G L (ⓝU.T) ) → - ∀G,L,T. ⦃G,L⦄⊢ T![h,a] → Q G L T. + ∀G,L,T. ❪G,L❫⊢ T![h,a] → Q G L T. #h #a #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #G #L #T #H elim H -G -L -T [5,6: /3 width=7 by cpms_div/ |*: /2 width=1 by/ ] qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_conf.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_conf.ma index ae42a2168..ed24744da 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_conf.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_conf.ma @@ -24,21 +24,21 @@ include "basic_2/dynamic/cnv_preserve_sub.ma". (* Sub diamond propery with t-bound rt-transition for terms *****************) fact cnv_cpm_conf_lpr_atom_atom_aux (h) (G) (L1) (L2) (I): - ∃∃T. ⦃G,L1⦄ ⊢ ⓪{I} ➡*[0,h] T & ⦃G,L2⦄ ⊢ ⓪{I} ➡*[O,h] T. + ∃∃T. ❪G,L1❫ ⊢ ⓪[I] ➡*[0,h] T & ❪G,L2❫ ⊢ ⓪[I] ➡*[O,h] T. /2 width=3 by ex2_intro/ qed-. fact cnv_cpm_conf_lpr_atom_ess_aux (h) (G) (L1) (L2) (s): - ∃∃T. ⦃G,L1⦄ ⊢ ⋆s ➡*[1,h] T & ⦃G,L2⦄ ⊢ ⋆(⫯[h]s) ➡*[h] T. + ∃∃T. ❪G,L1❫ ⊢ ⋆s ➡*[1,h] T & ❪G,L2❫ ⊢ ⋆(⫯[h]s) ➡*[h] T. /3 width=3 by cpm_cpms, ex2_intro/ qed-. fact cnv_cpm_conf_lpr_atom_delta_aux (h) (a) (G) (L) (i): - (∀G0,L0,T0. ⦃G,L,#i⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ⦃G,L⦄⊢#i![h,a] → + (∀G0,L0,T0. ❪G,L,#i❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❪G,L❫⊢#i![h,a] → ∀K,V. ⇩*[i]L ≘ K.ⓓV → - ∀n,XV. ⦃G,K⦄ ⊢ V ➡[n,h] XV → + ∀n,XV. ❪G,K❫ ⊢ V ➡[n,h] XV → ∀X. ⇧*[↑i]XV ≘ X → - ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G,L1⦄ ⊢ #i ➡*[n,h] T & ⦃G,L2⦄ ⊢ X ➡*[h] T. + ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G,L1❫ ⊢ #i ➡*[n,h] T & ❪G,L2❫ ⊢ X ➡*[h] T. #h #a #G #L #i #IH #HT #K #V #HLK #n #XV #HVX #X #HXV #L1 #HL1 #L2 #HL2 lapply (cnv_inv_lref_pair … HT … HLK) -HT #HV elim (lpr_drops_conf … HLK … HL1) -HL1 // #Y1 #H1 #HLK1 @@ -54,13 +54,13 @@ elim (cpms_lifts_sn … HVX … HLK2 … HXV) -XV -HLK2 #XV #HVX #HXV qed-. fact cnv_cpm_conf_lpr_atom_ell_aux (h) (a) (G) (L) (i): - (∀G0,L0,T0. ⦃G,L,#i⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ⦃G,L⦄⊢#i![h,a] → + (∀G0,L0,T0. ❪G,L,#i❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❪G,L❫⊢#i![h,a] → ∀K,W. ⇩*[i]L ≘ K.ⓛW → - ∀n,XW. ⦃G,K⦄ ⊢ W ➡[n,h] XW → + ∀n,XW. ❪G,K❫ ⊢ W ➡[n,h] XW → ∀X. ⇧*[↑i]XW ≘ X → - ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G,L1⦄ ⊢ #i ➡*[↑n,h] T & ⦃G,L2⦄ ⊢ X ➡*[h] T. + ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G,L1❫ ⊢ #i ➡*[↑n,h] T & ❪G,L2❫ ⊢ X ➡*[h] T. #h #a #G #L #i #IH #HT #K #W #HLK #n #XW #HWX #X #HXW #L1 #HL1 #L2 #HL2 lapply (cnv_inv_lref_pair … HT … HLK) -HT #HW elim (lpr_drops_conf … HLK … HL1) -HL1 // #Y1 #H1 #HLK1 @@ -76,13 +76,13 @@ elim (cpms_lifts_sn … HWX … HLK2 … HXW) -XW -HLK2 #XW #HWX #HXW qed-. fact cnv_cpm_conf_lpr_delta_delta_aux (h) (a) (I) (G) (L) (i): - (∀G0,L0,T0. ⦃G,L,#i⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ⦃G,L⦄⊢#i![h,a] → - ∀K1,V1. ⇩*[i]L ≘ K1.ⓑ{I}V1 → ∀K2,V2. ⇩*[i]L ≘ K2.ⓑ{I}V2 → - ∀n1,XV1. ⦃G,K1⦄ ⊢ V1 ➡[n1,h] XV1 → ∀n2,XV2. ⦃G,K2⦄ ⊢ V2 ➡[n2,h] XV2 → + (∀G0,L0,T0. ❪G,L,#i❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❪G,L❫⊢#i![h,a] → + ∀K1,V1. ⇩*[i]L ≘ K1.ⓑ[I]V1 → ∀K2,V2. ⇩*[i]L ≘ K2.ⓑ[I]V2 → + ∀n1,XV1. ❪G,K1❫ ⊢ V1 ➡[n1,h] XV1 → ∀n2,XV2. ❪G,K2❫ ⊢ V2 ➡[n2,h] XV2 → ∀X1. ⇧*[↑i]XV1 ≘ X1 → ∀X2. ⇧*[↑i]XV2 ≘ X2 → - ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G,L1⦄ ⊢ X1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ X2 ➡*[n1-n2,h] T. + ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G,L1❫ ⊢ X1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ X2 ➡*[n1-n2,h] T. #h #a #I #G #L #i #IH #HT #K #V #HLK #Y #X #HLY #n1 #XV1 #HVX1 #n2 #XV2 #HVX2 #X1 #HXV1 #X2 #HXV2 #L1 #HL1 #L2 #HL2 @@ -108,29 +108,29 @@ lapply (drops_mono … HLK2 … HLK1) -L -i #H destruct qed-. fact cnv_cpm_conf_lpr_bind_bind_aux (h) (a) (p) (I) (G) (L) (V) (T): - (∀G0,L0,T0. ⦃G,L,ⓑ{p,I}V.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ⦃G,L⦄ ⊢ ⓑ{p,I}V.T ![h,a] → - ∀V1. ⦃G,L⦄ ⊢ V ➡[h] V1 → ∀V2. ⦃G,L⦄ ⊢ V ➡[h] V2 → - ∀n1,T1. ⦃G,L.ⓑ{I}V⦄ ⊢ T ➡[n1,h] T1 → ∀n2,T2. ⦃G,L.ⓑ{I}V⦄ ⊢ T ➡[n2,h] T2 → - ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G,L1⦄ ⊢ ⓑ{p,I}V1.T1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ ⓑ{p,I}V2.T2 ➡*[n1-n2,h] T. + (∀G0,L0,T0. ❪G,L,ⓑ[p,I]V.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❪G,L❫ ⊢ ⓑ[p,I]V.T ![h,a] → + ∀V1. ❪G,L❫ ⊢ V ➡[h] V1 → ∀V2. ❪G,L❫ ⊢ V ➡[h] V2 → + ∀n1,T1. ❪G,L.ⓑ[I]V❫ ⊢ T ➡[n1,h] T1 → ∀n2,T2. ❪G,L.ⓑ[I]V❫ ⊢ T ➡[n2,h] T2 → + ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G,L1❫ ⊢ ⓑ[p,I]V1.T1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ ⓑ[p,I]V2.T2 ➡*[n1-n2,h] T. #h #a #p #I #G0 #L0 #V0 #T0 #IH #H0 #V1 #HV01 #V2 #HV02 #n1 #T1 #HT01 #n2 #T2 #HT02 #L1 #HL01 #L2 #HL02 elim (cnv_inv_bind … H0) -H0 #HV0 #HT0 elim (cpr_conf_lpr … HV01 … HV02 … HL01 … HL02) #V #HV1 #HV2 -elim (cnv_cpm_conf_lpr_sub … IH … HT01 … HT02 (L1.ⓑ{I}V1) … (L2.ⓑ{I}V2)) [|*: /2 width=1 by fqup_fpbg, lpr_pair/ ] +elim (cnv_cpm_conf_lpr_sub … IH … HT01 … HT02 (L1.ⓑ[I]V1) … (L2.ⓑ[I]V2)) [|*: /2 width=1 by fqup_fpbg, lpr_pair/ ] #T #HT1 #HT2 -L0 -V0 -T0 /3 width=5 by cpms_bind_dx, ex2_intro/ qed-. fact cnv_cpm_conf_lpr_bind_zeta_aux (h) (a) (G) (L) (V) (T): - (∀G0,L0,T0. ⦃G,L,+ⓓV.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ⦃G,L⦄ ⊢ +ⓓV.T ![h,a] → - ∀V1. ⦃G,L⦄ ⊢V ➡[h] V1 → ∀n1,T1. ⦃G,L.ⓓV⦄ ⊢ T ➡[n1,h] T1 → - ∀T2. ⇧*[1]T2 ≘ T → ∀n2,XT2. ⦃G,L⦄ ⊢ T2 ➡[n2,h] XT2 → - ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G,L1⦄ ⊢ +ⓓV1.T1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ XT2 ➡*[n1-n2,h] T. + (∀G0,L0,T0. ❪G,L,+ⓓV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❪G,L❫ ⊢ +ⓓV.T ![h,a] → + ∀V1. ❪G,L❫ ⊢V ➡[h] V1 → ∀n1,T1. ❪G,L.ⓓV❫ ⊢ T ➡[n1,h] T1 → + ∀T2. ⇧*[1]T2 ≘ T → ∀n2,XT2. ❪G,L❫ ⊢ T2 ➡[n2,h] XT2 → + ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G,L1❫ ⊢ +ⓓV1.T1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ XT2 ➡*[n1-n2,h] T. #h #a #G0 #L0 #V0 #T0 #IH #H0 #V1 #HV01 #n1 #T1 #HT01 #T2 #HT20 #n2 #XT2 #HXT2 #L1 #HL01 #L2 #HL02 @@ -145,12 +145,12 @@ elim (cnv_cpm_conf_lpr_sub … IH … HXT12 … HXT2 … HL01 … HL02) qed-. fact cnv_cpm_conf_lpr_zeta_zeta_aux (h) (a) (G) (L) (V) (T): - (∀G0,L0,T0. ⦃G,L,+ⓓV.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ⦃G,L⦄ ⊢ +ⓓV.T ![h,a] → + (∀G0,L0,T0. ❪G,L,+ⓓV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❪G,L❫ ⊢ +ⓓV.T ![h,a] → ∀T1. ⇧*[1]T1 ≘ T → ∀T2. ⇧*[1]T2 ≘ T → - ∀n1,XT1. ⦃G,L⦄ ⊢ T1 ➡[n1,h] XT1 → ∀n2,XT2. ⦃G,L⦄ ⊢ T2 ➡[n2,h] XT2 → - ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G,L1⦄ ⊢ XT1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ XT2 ➡*[n1-n2,h] T. + ∀n1,XT1. ❪G,L❫ ⊢ T1 ➡[n1,h] XT1 → ∀n2,XT2. ❪G,L❫ ⊢ T2 ➡[n2,h] XT2 → + ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G,L1❫ ⊢ XT1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ XT2 ➡*[n1-n2,h] T. #h #a #G0 #L0 #V0 #T0 #IH #H0 #T1 #HT10 #T2 #HT20 #n1 #XT1 #HXT1 #n2 #XT2 #HXT2 #L1 #HL01 #L2 #HL02 @@ -164,12 +164,12 @@ elim (cnv_cpm_conf_lpr_sub … IH … HXT1 … HXT2 … HL01 … HL02) qed-. fact cnv_cpm_conf_lpr_appl_appl_aux (h) (a) (G) (L) (V) (T): - (∀G0,L0,T0. ⦃G,L,ⓐV.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ⦃G,L⦄ ⊢ ⓐV.T ![h,a] → - ∀V1. ⦃G,L⦄ ⊢ V ➡[h] V1 → ∀V2. ⦃G,L⦄ ⊢ V ➡[h] V2 → - ∀n1,T1. ⦃G,L⦄ ⊢ T ➡[n1,h] T1 → ∀n2,T2. ⦃G,L⦄ ⊢ T ➡[n2,h] T2 → - ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G,L1⦄ ⊢ ⓐV1.T1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ ⓐV2.T2 ➡*[n1-n2,h] T. + (∀G0,L0,T0. ❪G,L,ⓐV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❪G,L❫ ⊢ ⓐV.T ![h,a] → + ∀V1. ❪G,L❫ ⊢ V ➡[h] V1 → ∀V2. ❪G,L❫ ⊢ V ➡[h] V2 → + ∀n1,T1. ❪G,L❫ ⊢ T ➡[n1,h] T1 → ∀n2,T2. ❪G,L❫ ⊢ T ➡[n2,h] T2 → + ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G,L1❫ ⊢ ⓐV1.T1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ ⓐV2.T2 ➡*[n1-n2,h] T. #h #a #G0 #L0 #V0 #T0 #IH #H0 #V1 #HV01 #V2 #HV02 #n1 #T1 #HT01 #n2 #T2 #HT02 #L1 #HL01 #L2 #HL02 @@ -181,13 +181,13 @@ elim (cnv_cpm_conf_lpr_sub … IH … HT01 … HT02 … HL01 … HL02) [|*: /2 w qed-. fact cnv_cpm_conf_lpr_appl_beta_aux (h) (a) (p) (G) (L) (V) (W) (T): - (∀G0,L0,T0. ⦃G,L,ⓐV.ⓛ{p}W.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ⦃G,L⦄ ⊢ ⓐV.ⓛ{p}W.T ![h,a] → - ∀V1. ⦃G,L⦄ ⊢ V ➡[h] V1 → ∀V2. ⦃G,L⦄ ⊢ V ➡[h] V2 → - ∀W2. ⦃G,L⦄ ⊢ W ➡[h] W2 → - ∀n1,T1. ⦃G,L⦄ ⊢ ⓛ{p}W.T ➡[n1,h] T1 → ∀n2,T2. ⦃G,L.ⓛW⦄ ⊢ T ➡[n2,h] T2 → - ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G,L1⦄ ⊢ ⓐV1.T1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ ⓓ{p}ⓝW2.V2.T2 ➡*[n1-n2,h] T. + (∀G0,L0,T0. ❪G,L,ⓐV.ⓛ[p]W.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❪G,L❫ ⊢ ⓐV.ⓛ[p]W.T ![h,a] → + ∀V1. ❪G,L❫ ⊢ V ➡[h] V1 → ∀V2. ❪G,L❫ ⊢ V ➡[h] V2 → + ∀W2. ❪G,L❫ ⊢ W ➡[h] W2 → + ∀n1,T1. ❪G,L❫ ⊢ ⓛ[p]W.T ➡[n1,h] T1 → ∀n2,T2. ❪G,L.ⓛW❫ ⊢ T ➡[n2,h] T2 → + ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G,L1❫ ⊢ ⓐV1.T1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ ⓓ[p]ⓝW2.V2.T2 ➡*[n1-n2,h] T. #h #a #p #G0 #L0 #V0 #W0 #T0 #IH #H0 #V1 #HV01 #V2 #HV02 #W2 #HW02 #n1 #X #HX #n2 #T2 #HT02 #L1 #HL01 #L2 #HL02 @@ -203,14 +203,14 @@ lapply (lsubr_cpms_trans … HT2 (L2.ⓓⓝW2.V2) ?) -HT2 [ /2 width=1 by lsubr_ qed-. fact cnv_cpm_conf_lpr_appl_theta_aux (h) (a) (p) (G) (L) (V) (W) (T): - (∀G0,L0,T0. ⦃G,L,ⓐV.ⓓ{p}W.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ⦃G,L⦄ ⊢ ⓐV.ⓓ{p}W.T ![h,a] → - ∀V1. ⦃G,L⦄ ⊢ V ➡[h] V1 → ∀V2. ⦃G,L⦄ ⊢ V ➡[h] V2 → - ∀W2. ⦃G,L⦄ ⊢ W ➡[h] W2 → - ∀n1,T1. ⦃G,L⦄ ⊢ ⓓ{p}W.T ➡[n1,h] T1 → ∀n2,T2. ⦃G,L.ⓓW⦄ ⊢ T ➡[n2,h] T2 → + (∀G0,L0,T0. ❪G,L,ⓐV.ⓓ[p]W.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❪G,L❫ ⊢ ⓐV.ⓓ[p]W.T ![h,a] → + ∀V1. ❪G,L❫ ⊢ V ➡[h] V1 → ∀V2. ❪G,L❫ ⊢ V ➡[h] V2 → + ∀W2. ❪G,L❫ ⊢ W ➡[h] W2 → + ∀n1,T1. ❪G,L❫ ⊢ ⓓ[p]W.T ➡[n1,h] T1 → ∀n2,T2. ❪G,L.ⓓW❫ ⊢ T ➡[n2,h] T2 → ∀U2. ⇧*[1]V2 ≘ U2 → - ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G,L1⦄ ⊢ ⓐV1.T1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ ⓓ{p}W2.ⓐU2.T2 ➡*[n1-n2,h] T. + ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G,L1❫ ⊢ ⓐV1.T1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ ⓓ[p]W2.ⓐU2.T2 ➡*[n1-n2,h] T. #h #a #p #G0 #L0 #V0 #W0 #T0 #IH #H0 #V1 #HV01 #V2 #HV02 #W2 #HW02 #n1 #X #HX #n2 #T2 #HT02 #U2 #HVU2 #L1 #HL01 #L2 #HL02 @@ -234,13 +234,13 @@ elim (cpm_inv_abbr1 … HX) -HX * qed-. fact cnv_cpm_conf_lpr_beta_beta_aux (h) (a) (p) (G) (L) (V) (W) (T): - (∀G0,L0,T0. ⦃G,L,ⓐV.ⓛ{p}W.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ⦃G,L⦄ ⊢ ⓐV.ⓛ{p}W.T ![h,a] → - ∀V1. ⦃G,L⦄ ⊢ V ➡[h] V1 → ∀V2. ⦃G,L⦄ ⊢ V ➡[h] V2 → - ∀W1. ⦃G,L⦄ ⊢ W ➡[h] W1 → ∀W2. ⦃G,L⦄ ⊢ W ➡[h] W2 → - ∀n1,T1. ⦃G,L.ⓛW⦄ ⊢ T ➡[n1,h] T1 → ∀n2,T2. ⦃G,L.ⓛW⦄ ⊢ T ➡[n2,h] T2 → - ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G,L1⦄ ⊢ ⓓ{p}ⓝW1.V1.T1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ ⓓ{p}ⓝW2.V2.T2 ➡*[n1-n2,h] T. + (∀G0,L0,T0. ❪G,L,ⓐV.ⓛ[p]W.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❪G,L❫ ⊢ ⓐV.ⓛ[p]W.T ![h,a] → + ∀V1. ❪G,L❫ ⊢ V ➡[h] V1 → ∀V2. ❪G,L❫ ⊢ V ➡[h] V2 → + ∀W1. ❪G,L❫ ⊢ W ➡[h] W1 → ∀W2. ❪G,L❫ ⊢ W ➡[h] W2 → + ∀n1,T1. ❪G,L.ⓛW❫ ⊢ T ➡[n1,h] T1 → ∀n2,T2. ❪G,L.ⓛW❫ ⊢ T ➡[n2,h] T2 → + ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G,L1❫ ⊢ ⓓ[p]ⓝW1.V1.T1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ ⓓ[p]ⓝW2.V2.T2 ➡*[n1-n2,h] T. #h #a #p #G0 #L0 #V0 #W0 #T0 #IH #H0 #V1 #HV01 #V2 #HV02 #W1 #HW01 #W2 #HW02 #n1 #T1 #HT01 #n2 #T2 #HT02 #L1 #HL01 #L2 #HL02 @@ -256,14 +256,14 @@ lapply (lsubr_cpms_trans … HT2 (L2.ⓓⓝW2.V2) ?) -HT2 /2 width=1 by lsubr_be qed-. fact cnv_cpm_conf_lpr_theta_theta_aux (h) (a) (p) (G) (L) (V) (W) (T): - (∀G0,L0,T0. ⦃G,L,ⓐV.ⓓ{p}W.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ⦃G,L⦄ ⊢ ⓐV.ⓓ{p}W.T ![h,a] → - ∀V1. ⦃G,L⦄ ⊢ V ➡[h] V1 → ∀V2. ⦃G,L⦄ ⊢ V ➡[h] V2 → - ∀W1. ⦃G,L⦄ ⊢ W ➡[h] W1 → ∀W2. ⦃G,L⦄ ⊢ W ➡[h] W2 → - ∀n1,T1. ⦃G,L.ⓓW⦄ ⊢ T ➡[n1,h] T1 → ∀n2,T2. ⦃G,L.ⓓW⦄ ⊢ T ➡[n2,h] T2 → + (∀G0,L0,T0. ❪G,L,ⓐV.ⓓ[p]W.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❪G,L❫ ⊢ ⓐV.ⓓ[p]W.T ![h,a] → + ∀V1. ❪G,L❫ ⊢ V ➡[h] V1 → ∀V2. ❪G,L❫ ⊢ V ➡[h] V2 → + ∀W1. ❪G,L❫ ⊢ W ➡[h] W1 → ∀W2. ❪G,L❫ ⊢ W ➡[h] W2 → + ∀n1,T1. ❪G,L.ⓓW❫ ⊢ T ➡[n1,h] T1 → ∀n2,T2. ❪G,L.ⓓW❫ ⊢ T ➡[n2,h] T2 → ∀U1. ⇧*[1]V1 ≘ U1 → ∀U2. ⇧*[1]V2 ≘ U2 → - ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G,L1⦄ ⊢ ⓓ{p}W1.ⓐU1.T1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ ⓓ{p}W2.ⓐU2.T2 ➡*[n1-n2,h] T. + ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G,L1❫ ⊢ ⓓ[p]W1.ⓐU1.T1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ ⓓ[p]W2.ⓐU2.T2 ➡*[n1-n2,h] T. #h #a #p #G0 #L0 #V0 #W0 #T0 #IH #H0 #V1 #HV01 #V2 #HV02 #W1 #HW01 #W2 #HW02 #n1 #T1 #HT01 #n2 #T2 #HT02 #U1 #HVU1 #U2 #HVU2 #L1 #HL01 #L2 #HL02 @@ -279,12 +279,12 @@ lapply (cpm_lifts_bi … HV2 (Ⓣ) … (L2.ⓓW2) … HVU2 … HVU) -V2 -V [ /3 qed-. fact cnv_cpm_conf_lpr_cast_cast_aux (h) (a) (G) (L) (V) (T): - (∀G0,L0,T0. ⦃G,L,ⓝV.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ⦃G,L⦄ ⊢ ⓝV.T ![h,a] → - ∀n1,V1. ⦃G,L⦄ ⊢ V ➡[n1,h] V1 → ∀n2,V2. ⦃G,L⦄ ⊢ V ➡[n2,h] V2 → - ∀T1. ⦃G,L⦄ ⊢ T ➡[n1,h] T1 → ∀T2. ⦃G,L⦄ ⊢ T ➡[n2,h] T2 → - ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G,L1⦄ ⊢ ⓝV1.T1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ ⓝV2.T2 ➡*[n1-n2,h] T. + (∀G0,L0,T0. ❪G,L,ⓝV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❪G,L❫ ⊢ ⓝV.T ![h,a] → + ∀n1,V1. ❪G,L❫ ⊢ V ➡[n1,h] V1 → ∀n2,V2. ❪G,L❫ ⊢ V ➡[n2,h] V2 → + ∀T1. ❪G,L❫ ⊢ T ➡[n1,h] T1 → ∀T2. ❪G,L❫ ⊢ T ➡[n2,h] T2 → + ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G,L1❫ ⊢ ⓝV1.T1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ ⓝV2.T2 ➡*[n1-n2,h] T. #h #a #G0 #L0 #V0 #T0 #IH #H0 #n1 #V1 #HV01 #n2 #V2 #HV02 #T1 #HT01 #T2 #HT02 #L1 #HL01 #L2 #HL02 @@ -296,12 +296,12 @@ elim (cnv_cpm_conf_lpr_sub … IH … HT01 … HT02 … HL01 … HL02) [|*: /2 w qed-. fact cnv_cpm_conf_lpr_cast_epsilon_aux (h) (a) (G) (L) (V) (T): - (∀G0,L0,T0. ⦃G,L,ⓝV.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ⦃G,L⦄ ⊢ ⓝV.T ![h,a] → - ∀n1,V1. ⦃G,L⦄ ⊢ V ➡[n1,h] V1 → - ∀T1. ⦃G,L⦄ ⊢ T ➡[n1,h] T1 → ∀n2,T2. ⦃G,L⦄ ⊢ T ➡[n2,h] T2 → - ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G,L1⦄ ⊢ ⓝV1.T1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ T2 ➡*[n1-n2,h] T. + (∀G0,L0,T0. ❪G,L,ⓝV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❪G,L❫ ⊢ ⓝV.T ![h,a] → + ∀n1,V1. ❪G,L❫ ⊢ V ➡[n1,h] V1 → + ∀T1. ❪G,L❫ ⊢ T ➡[n1,h] T1 → ∀n2,T2. ❪G,L❫ ⊢ T ➡[n2,h] T2 → + ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G,L1❫ ⊢ ⓝV1.T1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ T2 ➡*[n1-n2,h] T. #h #a #G0 #L0 #V0 #T0 #IH #H0 #n1 #V1 #HV01 #T1 #HT01 #n2 #T2 #HT02 #L1 #HL01 #L2 #HL02 @@ -312,13 +312,13 @@ elim (cnv_cpm_conf_lpr_sub … IH … HT01 … HT02 … HL01 … HL02) [|*: /2 w qed-. fact cnv_cpm_conf_lpr_cast_ee_aux (h) (a) (G) (L) (V) (T): - (∀G0,L0,T0. ⦃G,L,ⓝV.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → - (∀G0,L0,T0. ⦃G,L,ⓝV.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ⦃G,L⦄ ⊢ ⓝV.T ![h,a] → - ∀n1,V1. ⦃G,L⦄ ⊢ V ➡[n1,h] V1 → ∀n2,V2. ⦃G,L⦄ ⊢ V ➡[n2,h] V2 → - ∀T1. ⦃G,L⦄ ⊢ T ➡[n1,h] T1 → - ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G,L1⦄ ⊢ ⓝV1.T1 ➡*[↑n2-n1,h] T & ⦃G,L2⦄ ⊢ V2 ➡*[n1-↑n2,h] T. + (∀G0,L0,T0. ❪G,L,ⓝV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,ⓝV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❪G,L❫ ⊢ ⓝV.T ![h,a] → + ∀n1,V1. ❪G,L❫ ⊢ V ➡[n1,h] V1 → ∀n2,V2. ❪G,L❫ ⊢ V ➡[n2,h] V2 → + ∀T1. ❪G,L❫ ⊢ T ➡[n1,h] T1 → + ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G,L1❫ ⊢ ⓝV1.T1 ➡*[↑n2-n1,h] T & ❪G,L2❫ ⊢ V2 ➡*[n1-↑n2,h] T. #h #a #G0 #L0 #V0 #T0 #IH2 #IH1 #H0 #n1 #V1 #HV01 #n2 #V2 #HV02 #T1 #HT01 #L1 #HL01 #L2 #HL02 -HV01 @@ -335,11 +335,11 @@ lapply (cpms_trans … HT1 … HTU) -T [h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ⦃G,L⦄ ⊢ ⓝV.T ![h,a] → - ∀n1,T1. ⦃G,L⦄ ⊢ T ➡[n1,h] T1 → ∀n2,T2. ⦃G,L⦄ ⊢ T ➡[n2,h] T2 → - ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G,L1⦄ ⊢ T1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ T2 ➡*[n1-n2,h] T. + (∀G0,L0,T0. ❪G,L,ⓝV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❪G,L❫ ⊢ ⓝV.T ![h,a] → + ∀n1,T1. ❪G,L❫ ⊢ T ➡[n1,h] T1 → ∀n2,T2. ❪G,L❫ ⊢ T ➡[n2,h] T2 → + ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G,L1❫ ⊢ T1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ T2 ➡*[n1-n2,h] T. #h #a #G0 #L0 #V0 #T0 #IH #H0 #n1 #T1 #HT01 #n2 #T2 #HT02 #L1 #HL01 #L2 #HL02 @@ -350,12 +350,12 @@ elim (cnv_cpm_conf_lpr_sub … IH … HT01 … HT02 … HL01 … HL02) [|*: /2 w qed-. fact cnv_cpm_conf_lpr_epsilon_ee_aux (h) (a) (G) (L) (V) (T): - (∀G0,L0,T0. ⦃G,L,ⓝV.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → - (∀G0,L0,T0. ⦃G,L,ⓝV.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ⦃G,L⦄ ⊢ ⓝV.T ![h,a] → - ∀n1,T1. ⦃G,L⦄ ⊢ T ➡[n1,h] T1 → ∀n2,V2. ⦃G,L⦄ ⊢ V ➡[n2,h] V2 → - ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G,L1⦄ ⊢ T1 ➡*[↑n2-n1,h] T & ⦃G,L2⦄ ⊢ V2 ➡*[n1-↑n2,h] T. + (∀G0,L0,T0. ❪G,L,ⓝV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,ⓝV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❪G,L❫ ⊢ ⓝV.T ![h,a] → + ∀n1,T1. ❪G,L❫ ⊢ T ➡[n1,h] T1 → ∀n2,V2. ❪G,L❫ ⊢ V ➡[n2,h] V2 → + ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G,L1❫ ⊢ T1 ➡*[↑n2-n1,h] T & ❪G,L2❫ ⊢ V2 ➡*[n1-↑n2,h] T. #h #a #G0 #L0 #V0 #T0 #IH2 #IH1 #H0 #n1 #T1 #HT01 #n2 #V2 #HV02 #L1 #HL01 #L2 #HL02 @@ -372,11 +372,11 @@ lapply (cpms_trans … HT1 … HTU) -T [h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - ⦃G,L⦄ ⊢ ⓝV.T ![h,a] → - ∀n1,V1. ⦃G,L⦄ ⊢ V ➡[n1,h] V1 → ∀n2,V2. ⦃G,L⦄ ⊢ V ➡[n2,h] V2 → - ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G,L1⦄ ⊢ V1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ V2 ➡*[n1-n2,h] T. + (∀G0,L0,T0. ❪G,L,ⓝV.T❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + ❪G,L❫ ⊢ ⓝV.T ![h,a] → + ∀n1,V1. ❪G,L❫ ⊢ V ➡[n1,h] V1 → ∀n2,V2. ❪G,L❫ ⊢ V ➡[n2,h] V2 → + ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G,L1❫ ⊢ V1 ➡*[n2-n1,h] T & ❪G,L2❫ ⊢ V2 ➡*[n1-n2,h] T. #h #a #G0 #L0 #V0 #T0 #IH #H0 #n1 #V1 #HV01 #n2 #V2 #HV02 #L1 #HL01 #L2 #HL02 @@ -388,8 +388,8 @@ qed-. fact cnv_cpm_conf_lpr_aux (h) (a): ∀G0,L0,T0. - (∀G1,L1,T1. ⦃G0,L0,T0⦄ >[h] ⦃G1,L1,T1⦄ → IH_cnv_cpm_trans_lpr h a G1 L1 T1) → - (∀G1,L1,T1. ⦃G0,L0,T0⦄ >[h] ⦃G1,L1,T1⦄ → IH_cnv_cpms_conf_lpr h a G1 L1 T1) → + (∀G1,L1,T1. ❪G0,L0,T0❫ >[h] ❪G1,L1,T1❫ → IH_cnv_cpm_trans_lpr h a G1 L1 T1) → + (∀G1,L1,T1. ❪G0,L0,T0❫ >[h] ❪G1,L1,T1❫ → IH_cnv_cpms_conf_lpr h a G1 L1 T1) → ∀G1,L1,T1. G0 = G1 → L0 = L1 → T0 = T1 → IH_cnv_cpm_conf_lpr h a G1 L1 T1. #h #a #G0 #L0 #T0 #IH2 #IH1 #G #L * [| * [| * ]] [ #I #HG0 #HL0 #HT0 #HT #n1 #X1 #HX1 #n2 #X2 #HX2 #L1 #HL1 #L2 #HL2 destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx.ma index 1cc63fbae..4a5e09ff8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx.ma @@ -24,7 +24,7 @@ include "basic_2/dynamic/cnv_fsb.ma". (* Inversion lemmas with restricted rt-transition for terms *****************) lemma cnv_cpr_teqx_fwd_refl (h) (a) (G) (L): - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ➡[h] T2 → T1 ≛ T2 → ⦃G,L⦄ ⊢ T1 ![h,a] → T1 = T2. + ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[h] T2 → T1 ≛ T2 → ❪G,L❫ ⊢ T1 ![h,a] → T1 = T2. #h #a #G #L #T1 #T2 #H @(cpr_ind … H) -G -L -T1 -T2 [ // | #G #K #V1 #V2 #X2 #_ #_ #_ #H1 #_ -a -G -K -V1 -V2 @@ -55,9 +55,9 @@ lemma cnv_cpr_teqx_fwd_refl (h) (a) (G) (L): qed-. lemma cpm_teqx_inv_bind_sn (h) (a) (n) (p) (I) (G) (L): - ∀V,T1. ⦃G,L⦄ ⊢ ⓑ{p,I}V.T1 ![h,a] → - ∀X. ⦃G,L⦄ ⊢ ⓑ{p,I}V.T1 ➡[n,h] X → ⓑ{p,I}V.T1 ≛ X → - ∃∃T2. ⦃G,L⦄ ⊢ V ![h,a] & ⦃G,L.ⓑ{I}V⦄ ⊢ T1 ![h,a] & ⦃G,L.ⓑ{I}V⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓑ{p,I}V.T2. + ∀V,T1. ❪G,L❫ ⊢ ⓑ[p,I]V.T1 ![h,a] → + ∀X. ❪G,L❫ ⊢ ⓑ[p,I]V.T1 ➡[n,h] X → ⓑ[p,I]V.T1 ≛ X → + ∃∃T2. ❪G,L❫ ⊢ V ![h,a] & ❪G,L.ⓑ[I]V❫ ⊢ T1 ![h,a] & ❪G,L.ⓑ[I]V❫ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓑ[p,I]V.T2. #h #a #n #p #I #G #L #V #T1 #H0 #X #H1 #H2 elim (cpm_inv_bind1 … H1) -H1 * [ #XV #T2 #HXV #HT12 #H destruct @@ -73,10 +73,10 @@ elim (cpm_inv_bind1 … H1) -H1 * qed-. lemma cpm_teqx_inv_appl_sn (h) (a) (n) (G) (L): - ∀V,T1. ⦃G,L⦄ ⊢ ⓐV.T1 ![h,a] → - ∀X. ⦃G,L⦄ ⊢ ⓐV.T1 ➡[n,h] X → ⓐV.T1 ≛ X → - ∃∃m,q,W,U1,T2. ad a m & ⦃G,L⦄ ⊢ V ![h,a] & ⦃G,L⦄ ⊢ V ➡*[1,h] W & ⦃G,L⦄ ⊢ T1 ➡*[m,h] ⓛ{q}W.U1 - & ⦃G,L⦄⊢ T1 ![h,a] & ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓐV.T2. + ∀V,T1. ❪G,L❫ ⊢ ⓐV.T1 ![h,a] → + ∀X. ❪G,L❫ ⊢ ⓐV.T1 ➡[n,h] X → ⓐV.T1 ≛ X → + ∃∃m,q,W,U1,T2. ad a m & ❪G,L❫ ⊢ V ![h,a] & ❪G,L❫ ⊢ V ➡*[1,h] W & ❪G,L❫ ⊢ T1 ➡*[m,h] ⓛ[q]W.U1 + & ❪G,L❫⊢ T1 ![h,a] & ❪G,L❫ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓐV.T2. #h #a #n #G #L #V #T1 #H0 #X #H1 #H2 elim (cpm_inv_appl1 … H1) -H1 * [ #XV #T2 #HXV #HT12 #H destruct @@ -92,11 +92,11 @@ elim (cpm_inv_appl1 … H1) -H1 * qed-. lemma cpm_teqx_inv_cast_sn (h) (a) (n) (G) (L): - ∀U1,T1. ⦃G,L⦄ ⊢ ⓝU1.T1 ![h,a] → - ∀X. ⦃G,L⦄ ⊢ ⓝU1.T1 ➡[n,h] X → ⓝU1.T1 ≛ X → - ∃∃U0,U2,T2. ⦃G,L⦄ ⊢ U1 ➡*[h] U0 & ⦃G,L⦄ ⊢ T1 ➡*[1,h] U0 - & ⦃G,L⦄ ⊢ U1 ![h,a] & ⦃G,L⦄ ⊢ U1 ➡[n,h] U2 & U1 ≛ U2 - & ⦃G,L⦄ ⊢ T1 ![h,a] & ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓝU2.T2. + ∀U1,T1. ❪G,L❫ ⊢ ⓝU1.T1 ![h,a] → + ∀X. ❪G,L❫ ⊢ ⓝU1.T1 ➡[n,h] X → ⓝU1.T1 ≛ X → + ∃∃U0,U2,T2. ❪G,L❫ ⊢ U1 ➡*[h] U0 & ❪G,L❫ ⊢ T1 ➡*[1,h] U0 + & ❪G,L❫ ⊢ U1 ![h,a] & ❪G,L❫ ⊢ U1 ➡[n,h] U2 & U1 ≛ U2 + & ❪G,L❫ ⊢ T1 ![h,a] & ❪G,L❫ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓝU2.T2. #h #a #n #G #L #U1 #T1 #H0 #X #H1 #H2 elim (cpm_inv_cast1 … H1) -H1 [ * || * ] [ #U2 #T2 #HU12 #HT12 #H destruct @@ -115,9 +115,9 @@ elim (cpm_inv_cast1 … H1) -H1 [ * || * ] qed-. lemma cpm_teqx_inv_bind_dx (h) (a) (n) (p) (I) (G) (L): - ∀X. ⦃G,L⦄ ⊢ X ![h,a] → - ∀V,T2. ⦃G,L⦄ ⊢ X ➡[n,h] ⓑ{p,I}V.T2 → X ≛ ⓑ{p,I}V.T2 → - ∃∃T1. ⦃G,L⦄ ⊢ V ![h,a] & ⦃G,L.ⓑ{I}V⦄ ⊢ T1 ![h,a] & ⦃G,L.ⓑ{I}V⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓑ{p,I}V.T1. + ∀X. ❪G,L❫ ⊢ X ![h,a] → + ∀V,T2. ❪G,L❫ ⊢ X ➡[n,h] ⓑ[p,I]V.T2 → X ≛ ⓑ[p,I]V.T2 → + ∃∃T1. ❪G,L❫ ⊢ V ![h,a] & ❪G,L.ⓑ[I]V❫ ⊢ T1 ![h,a] & ❪G,L.ⓑ[I]V❫ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓑ[p,I]V.T1. #h #a #n #p #I #G #L #X #H0 #V #T2 #H1 #H2 elim (teqx_inv_pair2 … H2) #V0 #T1 #_ #_ #H destruct elim (cpm_teqx_inv_bind_sn … H0 … H1 H2) -H0 -H1 -H2 #T0 #HV #HT1 #H1T12 #H2T12 #H destruct @@ -127,25 +127,25 @@ qed-. (* Eliminators with restricted rt-transition for terms **********************) lemma cpm_teqx_ind (h) (a) (n) (G) (Q:relation3 …): - (∀I,L. n = 0 → Q L (⓪{I}) (⓪{I})) → + (∀I,L. n = 0 → Q L (⓪[I]) (⓪[I])) → (∀L,s. n = 1 → Q L (⋆s) (⋆(⫯[h]s))) → - (∀p,I,L,V,T1. ⦃G,L⦄⊢ V![h,a] → ⦃G,L.ⓑ{I}V⦄⊢T1![h,a] → - ∀T2. ⦃G,L.ⓑ{I}V⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → - Q (L.ⓑ{I}V) T1 T2 → Q L (ⓑ{p,I}V.T1) (ⓑ{p,I}V.T2) + (∀p,I,L,V,T1. ❪G,L❫⊢ V![h,a] → ❪G,L.ⓑ[I]V❫⊢T1![h,a] → + ∀T2. ❪G,L.ⓑ[I]V❫ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → + Q (L.ⓑ[I]V) T1 T2 → Q L (ⓑ[p,I]V.T1) (ⓑ[p,I]V.T2) ) → (∀m. ad a m → - ∀L,V. ⦃G,L⦄ ⊢ V ![h,a] → ∀W. ⦃G,L⦄ ⊢ V ➡*[1,h] W → - ∀p,T1,U1. ⦃G,L⦄ ⊢ T1 ➡*[m,h] ⓛ{p}W.U1 → ⦃G,L⦄⊢ T1 ![h,a] → - ∀T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → + ∀L,V. ❪G,L❫ ⊢ V ![h,a] → ∀W. ❪G,L❫ ⊢ V ➡*[1,h] W → + ∀p,T1,U1. ❪G,L❫ ⊢ T1 ➡*[m,h] ⓛ[p]W.U1 → ❪G,L❫⊢ T1 ![h,a] → + ∀T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → Q L T1 T2 → Q L (ⓐV.T1) (ⓐV.T2) ) → - (∀L,U0,U1,T1. ⦃G,L⦄ ⊢ U1 ➡*[h] U0 → ⦃G,L⦄ ⊢ T1 ➡*[1,h] U0 → - ∀U2. ⦃G,L⦄ ⊢ U1 ![h,a] → ⦃G,L⦄ ⊢ U1 ➡[n,h] U2 → U1 ≛ U2 → - ∀T2. ⦃G,L⦄ ⊢ T1 ![h,a] → ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → + (∀L,U0,U1,T1. ❪G,L❫ ⊢ U1 ➡*[h] U0 → ❪G,L❫ ⊢ T1 ➡*[1,h] U0 → + ∀U2. ❪G,L❫ ⊢ U1 ![h,a] → ❪G,L❫ ⊢ U1 ➡[n,h] U2 → U1 ≛ U2 → + ∀T2. ❪G,L❫ ⊢ T1 ![h,a] → ❪G,L❫ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → Q L U1 U2 → Q L T1 T2 → Q L (ⓝU1.T1) (ⓝU2.T2) ) → - ∀L,T1. ⦃G,L⦄ ⊢ T1 ![h,a] → - ∀T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → Q L T1 T2. + ∀L,T1. ❪G,L❫ ⊢ T1 ![h,a] → + ∀T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → Q L T1 T2. #h #a #n #G #Q #IH1 #IH2 #IH3 #IH4 #IH5 #L #T1 @(insert_eq_0 … G) #F @(fqup_wf_ind_eq (Ⓣ) … F L T1) -L -T1 -F @@ -170,9 +170,9 @@ qed-. (* Advanced properties with restricted rt-transition for terms **************) lemma cpm_teqx_free (h) (a) (n) (G) (L): - ∀T1. ⦃G,L⦄ ⊢ T1 ![h,a] → - ∀T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → - ∀F,K. ⦃F,K⦄ ⊢ T1 ➡[n,h] T2. + ∀T1. ❪G,L❫ ⊢ T1 ![h,a] → + ∀T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → + ∀F,K. ❪F,K❫ ⊢ T1 ➡[n,h] T2. #h #a #n #G #L #T1 #H0 #T2 #H1 #H2 @(cpm_teqx_ind … H0 … H1 H2) -L -T1 -T2 [ #I #L #H #F #K destruct // @@ -189,9 +189,9 @@ qed-. (* Advanced inversion lemmas with restricted rt-transition for terms ********) lemma cpm_teqx_inv_bind_sn_void (h) (a) (n) (p) (I) (G) (L): - ∀V,T1. ⦃G,L⦄ ⊢ ⓑ{p,I}V.T1 ![h,a] → - ∀X. ⦃G,L⦄ ⊢ ⓑ{p,I}V.T1 ➡[n,h] X → ⓑ{p,I}V.T1 ≛ X → - ∃∃T2. ⦃G,L⦄ ⊢ V ![h,a] & ⦃G,L.ⓑ{I}V⦄ ⊢ T1 ![h,a] & ⦃G,L.ⓧ⦄ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓑ{p,I}V.T2. + ∀V,T1. ❪G,L❫ ⊢ ⓑ[p,I]V.T1 ![h,a] → + ∀X. ❪G,L❫ ⊢ ⓑ[p,I]V.T1 ➡[n,h] X → ⓑ[p,I]V.T1 ≛ X → + ∃∃T2. ❪G,L❫ ⊢ V ![h,a] & ❪G,L.ⓑ[I]V❫ ⊢ T1 ![h,a] & ❪G,L.ⓧ❫ ⊢ T1 ➡[n,h] T2 & T1 ≛ T2 & X = ⓑ[p,I]V.T2. #h #a #n #p #I #G #L #V #T1 #H0 #X #H1 #H2 elim (cpm_teqx_inv_bind_sn … H0 … H1 H2) -H0 -H1 -H2 #T2 #HV #HT1 #H1T12 #H2T12 #H /3 width=5 by ex5_intro, cpm_teqx_free/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx_conf.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx_conf.ma index f894128ac..4e7b176fd 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx_conf.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx_conf.ma @@ -18,49 +18,49 @@ include "basic_2/dynamic/cnv_cpm_teqx.ma". (* CONTEXT-SENSITIVE NATIVE VALIDITY FOR TERMS ******************************) definition IH_cnv_cpm_teqx_conf_lpr (h) (a): relation3 genv lenv term ≝ - λG,L0,T0. ⦃G,L0⦄ ⊢ T0 ![h,a] → - ∀n1,T1. ⦃G,L0⦄ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 → - ∀n2,T2. ⦃G,L0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → - ∀L1. ⦃G,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G,L1⦄ ⊢ T1 ➡[n2-n1,h] T & T1 ≛ T & ⦃G,L2⦄ ⊢ T2 ➡[n1-n2,h] T & T2 ≛ T. + λG,L0,T0. ❪G,L0❫ ⊢ T0 ![h,a] → + ∀n1,T1. ❪G,L0❫ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 → + ∀n2,T2. ❪G,L0❫ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → + ∀L1. ❪G,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L0❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G,L1❫ ⊢ T1 ➡[n2-n1,h] T & T1 ≛ T & ❪G,L2❫ ⊢ T2 ➡[n1-n2,h] T & T2 ≛ T. (* Diamond propery with restricted rt-transition for terms ******************) fact cnv_cpm_teqx_conf_lpr_atom_atom_aux (h) (G0) (L1) (L2) (I): - ∃∃T. ⦃G0,L1⦄ ⊢ ⓪{I} ➡[h] T & ⓪{I} ≛ T & ⦃G0,L2⦄ ⊢ ⓪{I} ➡[h] T & ⓪{I} ≛ T. + ∃∃T. ❪G0,L1❫ ⊢ ⓪[I] ➡[h] T & ⓪[I] ≛ T & ❪G0,L2❫ ⊢ ⓪[I] ➡[h] T & ⓪[I] ≛ T. #h #G0 #L1 #L2 #I /2 width=5 by ex4_intro/ qed-. fact cnv_cpm_teqx_conf_lpr_atom_ess_aux (h) (G0) (L1) (L2) (s): - ∃∃T. ⦃G0,L1⦄ ⊢ ⋆s ➡[1,h] T & ⋆s ≛ T & ⦃G0,L2⦄ ⊢ ⋆(⫯[h]s) ➡[h] T & ⋆(⫯[h]s) ≛ T. + ∃∃T. ❪G0,L1❫ ⊢ ⋆s ➡[1,h] T & ⋆s ≛ T & ❪G0,L2❫ ⊢ ⋆(⫯[h]s) ➡[h] T & ⋆(⫯[h]s) ≛ T. #h #G0 #L1 #L2 #s /3 width=5 by teqx_sort, ex4_intro/ qed-. fact cnv_cpm_teqx_conf_lpr_bind_bind_aux (h) (a) (p) (I) (G0) (L0) (V0) (T0): - (∀G,L,T. ⦃G0,L0,ⓑ{p,I}V0.T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cnv_cpm_teqx_conf_lpr h a G L T) → - ⦃G0,L0⦄ ⊢ ⓑ{p,I}V0.T0 ![h,a] → - ∀n1,T1. ⦃G0,L0.ⓑ{I}V0⦄ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 → - ∀n2,T2. ⦃G0,L0.ⓑ{I}V0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ ⓑ{p,I}V0.T1 ➡[n2-n1,h] T & ⓑ{p,I}V0.T1 ≛ T & ⦃G0,L2⦄ ⊢ ⓑ{p,I}V0.T2 ➡[n1-n2,h] T & ⓑ{p,I}V0.T2 ≛ T. + (∀G,L,T. ❪G0,L0,ⓑ[p,I]V0.T0❫ ⬂+ ❪G,L,T❫ → IH_cnv_cpm_teqx_conf_lpr h a G L T) → + ❪G0,L0❫ ⊢ ⓑ[p,I]V0.T0 ![h,a] → + ∀n1,T1. ❪G0,L0.ⓑ[I]V0❫ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 → + ∀n2,T2. ❪G0,L0.ⓑ[I]V0❫ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → + ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G0,L1❫ ⊢ ⓑ[p,I]V0.T1 ➡[n2-n1,h] T & ⓑ[p,I]V0.T1 ≛ T & ❪G0,L2❫ ⊢ ⓑ[p,I]V0.T2 ➡[n1-n2,h] T & ⓑ[p,I]V0.T2 ≛ T. #h #a #p #I #G0 #L0 #V0 #T0 #IH #H0 #n1 #T1 #H1T01 #H2T01 #n2 #T2 #H1T02 #H2T02 #L1 #HL01 #L2 #HL02 elim (cnv_inv_bind … H0) -H0 #_ #HT0 -elim (IH … H1T01 H2T01 … H1T02 H2T02 (L1.ⓑ{I}V0) … (L2.ⓑ{I}V0)) [|*: /2 width=1 by lpr_bind_refl_dx/ ] +elim (IH … H1T01 H2T01 … H1T02 H2T02 (L1.ⓑ[I]V0) … (L2.ⓑ[I]V0)) [|*: /2 width=1 by lpr_bind_refl_dx/ ] #T #H1T1 #H2T1 #H1T2 #H2T2 -L0 -T0 /3 width=7 by cpm_bind, teqx_pair, ex4_intro/ qed-. fact cnv_cpm_teqx_conf_lpr_appl_appl_aux (h) (a) (G0) (L0) (V0) (T0): - (∀G,L,T. ⦃G0,L0,ⓐV0.T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cnv_cpm_teqx_conf_lpr h a G L T) → - ⦃G0,L0⦄ ⊢ ⓐV0.T0 ![h,a] → - ∀n1,T1. ⦃G0,L0⦄ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 → - ∀n2,T2. ⦃G0,L0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ ⓐV0.T1 ➡[n2-n1,h] T & ⓐV0.T1 ≛ T & ⦃G0,L2⦄ ⊢ ⓐV0.T2 ➡[n1-n2,h] T & ⓐV0.T2 ≛ T. + (∀G,L,T. ❪G0,L0,ⓐV0.T0❫ ⬂+ ❪G,L,T❫ → IH_cnv_cpm_teqx_conf_lpr h a G L T) → + ❪G0,L0❫ ⊢ ⓐV0.T0 ![h,a] → + ∀n1,T1. ❪G0,L0❫ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 → + ∀n2,T2. ❪G0,L0❫ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → + ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G0,L1❫ ⊢ ⓐV0.T1 ➡[n2-n1,h] T & ⓐV0.T1 ≛ T & ❪G0,L2❫ ⊢ ⓐV0.T2 ➡[n1-n2,h] T & ⓐV0.T2 ≛ T. #h #a #G0 #L0 #V0 #T0 #IH #H0 #n1 #T1 #H1T01 #H2T01 #n2 #T2 #H1T02 #H2T02 #L1 #HL01 #L2 #HL02 @@ -71,14 +71,14 @@ elim (IH … H1T01 H2T01 … H1T02 H2T02 … HL01 … HL02) [|*: /2 width=1 by f qed-. fact cnv_cpm_teqx_conf_lpr_cast_cast_aux (h) (a) (G0) (L0) (V0) (T0): - (∀G,L,T. ⦃G0,L0,ⓝV0.T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cnv_cpm_teqx_conf_lpr h a G L T) → - ⦃G0,L0⦄ ⊢ ⓝV0.T0 ![h,a] → - ∀n1,V1. ⦃G0,L0⦄ ⊢ V0 ➡[n1,h] V1 → V0 ≛ V1 → - ∀n2,V2. ⦃G0,L0⦄ ⊢ V0 ➡[n2,h] V2 → V0 ≛ V2 → - ∀T1. ⦃G0,L0⦄ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 → - ∀T2. ⦃G0,L0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ ⓝV1.T1 ➡[n2-n1,h] T & ⓝV1.T1 ≛ T & ⦃G0,L2⦄ ⊢ ⓝV2.T2 ➡[n1-n2,h] T & ⓝV2.T2 ≛ T. + (∀G,L,T. ❪G0,L0,ⓝV0.T0❫ ⬂+ ❪G,L,T❫ → IH_cnv_cpm_teqx_conf_lpr h a G L T) → + ❪G0,L0❫ ⊢ ⓝV0.T0 ![h,a] → + ∀n1,V1. ❪G0,L0❫ ⊢ V0 ➡[n1,h] V1 → V0 ≛ V1 → + ∀n2,V2. ❪G0,L0❫ ⊢ V0 ➡[n2,h] V2 → V0 ≛ V2 → + ∀T1. ❪G0,L0❫ ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 → + ∀T2. ❪G0,L0❫ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → + ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G0,L1❫ ⊢ ⓝV1.T1 ➡[n2-n1,h] T & ⓝV1.T1 ≛ T & ❪G0,L2❫ ⊢ ⓝV2.T2 ➡[n1-n2,h] T & ⓝV2.T2 ≛ T. #h #a #G0 #L0 #V0 #T0 #IH #H0 #n1 #V1 #H1V01 #H2V01 #n2 #V2 #H1V02 #H2V02 #T1 #H1T01 #H2T01 #T2 #H1T02 #H2T02 #L1 #HL01 #L2 #HL02 @@ -90,7 +90,7 @@ elim (IH … H1T01 H2T01 … H1T02 H2T02 … HL01 … HL02) [|*: /2 width=1 by f qed-. fact cnv_cpm_teqx_conf_lpr_aux (h) (a) (G0) (L0) (T0): - (∀G,L,T. ⦃G0,L0,T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cnv_cpm_teqx_conf_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ ⬂+ ❪G,L,T❫ → IH_cnv_cpm_teqx_conf_lpr h a G L T) → ∀G,L,T. G0 = G → L0 = L → T0 = T → IH_cnv_cpm_teqx_conf_lpr h a G L T. #h #a #G0 #L0 #T0 #IH1 #G #L * [| * [| * ]] [ #I #HG0 #HL0 #HT0 #HT #n1 #X1 #H1X1 #H2X1 #n2 #X2 #H1X2 #H2X2 #L1 #HL1 #L2 #HL2 destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx_trans.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx_trans.ma index 1736148f7..2ff1bbb6d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx_trans.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_teqx_trans.ma @@ -18,16 +18,16 @@ include "basic_2/dynamic/cnv_cpm_teqx.ma". (* CONTEXT-SENSITIVE NATIVE VALIDITY FOR TERMS ******************************) definition IH_cnv_cpm_teqx_cpm_trans (h) (a): relation3 genv lenv term ≝ - λG,L,T1. ⦃G,L⦄ ⊢ T1 ![h,a] → - ∀n1,T. ⦃G,L⦄ ⊢ T1 ➡[n1,h] T → T1 ≛ T → - ∀n2,T2. ⦃G,L⦄ ⊢ T ➡[n2,h] T2 → - ∃∃T0. ⦃G,L⦄ ⊢ T1 ➡[n2,h] T0 & ⦃G,L⦄ ⊢ T0 ➡[n1,h] T2 & T0 ≛ T2. + λG,L,T1. ❪G,L❫ ⊢ T1 ![h,a] → + ∀n1,T. ❪G,L❫ ⊢ T1 ➡[n1,h] T → T1 ≛ T → + ∀n2,T2. ❪G,L❫ ⊢ T ➡[n2,h] T2 → + ∃∃T0. ❪G,L❫ ⊢ T1 ➡[n2,h] T0 & ❪G,L❫ ⊢ T0 ➡[n1,h] T2 & T0 ≛ T2. (* Transitive properties restricted rt-transition for terms *****************) fact cnv_cpm_teqx_cpm_trans_sub (h) (a) (G0) (L0) (T0): - (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ⦃G0,L0,T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cnv_cpm_teqx_cpm_trans h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ ⬂+ ❪G,L,T❫ → IH_cnv_cpm_teqx_cpm_trans h a G L T) → ∀G,L,T1. G0 = G → L0 = L → T0 = T1 → IH_cnv_cpm_teqx_cpm_trans h a G L T1. #h #a #G0 #L0 #T0 #IH2 #IH1 #G #L * [| * [| * ]] [ #I #_ #_ #_ #_ #n1 #X1 #H1X #H2X #n2 #X2 #HX2 destruct -G0 -L0 -T0 @@ -42,8 +42,8 @@ fact cnv_cpm_teqx_cpm_trans_sub (h) (a) (G0) (L0) (T0): elim (cpm_inv_bind1 … HX2) -HX2 * [ #V2 #T2 #HV12 #HT2 #H destruct elim (IH1 … H0T1 … H1T1 H2T1 … HT2) -T -IH1 [| // ] #T0 #HT10 #H1T02 #H2T02 - lapply (IH2 … H0T1 … HT10 (L.ⓑ{I}V1) ?) -IH2 -H0T1 [3:|*: /2 width=1 by fqup_fpbg/ ] #HT0 - lapply (cpm_teqx_free … HT0 … H1T02 H2T02 G (L.ⓑ{I}V2)) -H1T02 #H1T02 + lapply (IH2 … H0T1 … HT10 (L.ⓑ[I]V1) ?) -IH2 -H0T1 [3:|*: /2 width=1 by fqup_fpbg/ ] #HT0 + lapply (cpm_teqx_free … HT0 … H1T02 H2T02 G (L.ⓑ[I]V2)) -H1T02 #H1T02 /3 width=6 by cpm_bind, teqx_pair, ex3_intro/ | #T2 #HT2 #HTX2 #H1 #H2 destruct -IH2 elim (teqx_inv_lifts_dx … H2T1 … HT2) -H2T1 #XT #HXT1 #H2XT2 @@ -89,7 +89,7 @@ fact cnv_cpm_teqx_cpm_trans_sub (h) (a) (G0) (L0) (T0): qed-. fact cnv_cpm_teqx_cpm_trans_aux (h) (a) (G0) (L0) (T0): - (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → IH_cnv_cpm_teqx_cpm_trans h a G0 L0 T0. #h #a #G0 #L0 #T0 @(fqup_wf_ind (Ⓣ) … G0 L0 T0) -G0 -L0 -T0 #G0 #L0 #T0 #IH #IH0 diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_trans.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_trans.ma index 84ef77264..2aaa3bf2a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_trans.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpm_trans.ma @@ -25,8 +25,8 @@ include "basic_2/dynamic/lsubv_cnv.ma". fact cnv_cpm_trans_lpr_aux (h) (a): ∀G0,L0,T0. - (∀G1,L1,T1. ⦃G0,L0,T0⦄ >[h] ⦃G1,L1,T1⦄ → IH_cnv_cpms_conf_lpr h a G1 L1 T1) → - (∀G1,L1,T1. ⦃G0,L0,T0⦄ >[h] ⦃G1,L1,T1⦄ → IH_cnv_cpm_trans_lpr h a G1 L1 T1) → + (∀G1,L1,T1. ❪G0,L0,T0❫ >[h] ❪G1,L1,T1❫ → IH_cnv_cpms_conf_lpr h a G1 L1 T1) → + (∀G1,L1,T1. ❪G0,L0,T0❫ >[h] ❪G1,L1,T1❫ → IH_cnv_cpm_trans_lpr h a G1 L1 T1) → ∀G1,L1,T1. G0 = G1 → L0 = L1 → T0 = T1 → IH_cnv_cpm_trans_lpr h a G1 L1 T1. #h #a #G0 #L0 #T0 #IH2 #IH1 #G1 #L1 * * [|||| * ] [ #s #HG0 #HL0 #HT0 #H1 #x #X #H2 #L2 #_ destruct -IH2 -IH1 -H1 @@ -67,7 +67,7 @@ fact cnv_cpm_trans_lpr_aux (h) (a): elim (cpms_inv_abst_sn … H) -H #W2 #X2 #HW12 #_ #H destruct elim (cprs_conf … HXW1 … HW12) -W1 #W1 #HXW1 #HW21 lapply (cpms_trans … HXV2 … HXW1) -XW1 [h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr h a G L T) → - ⦃G0,L0⦄ ⊢ T0 ![h,a] → - ∀n1,T1. ⦃G0,L0⦄ ⊢ T0 ➡*[n1,h] T1 → T0 ≛ T1 → - ∀n2,T2. ⦃G0,L0⦄ ⊢ T0 ➡*[n2,h] T2 → T0 ≛ T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ T1 ➡*[n2-n1,h] T & ⦃G0,L2⦄ ⊢ T2 ➡*[n1-n2,h] T. + (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → + ❪G0,L0❫ ⊢ T0 ![h,a] → + ∀n1,T1. ❪G0,L0❫ ⊢ T0 ➡*[n1,h] T1 → T0 ≛ T1 → + ∀n2,T2. ❪G0,L0❫ ⊢ T0 ➡*[n2,h] T2 → T0 ≛ T2 → + ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G0,L1❫ ⊢ T1 ➡*[n2-n1,h] T & ❪G0,L2❫ ⊢ T2 ➡*[n1-n2,h] T. #h #a #G #L0 #T0 #IH2 #IH1 #HT0 #n1 #T1 #H1T01 #H2T01 #n2 #T2 #H1T02 #H2T02 #L1 #HL01 #L2 #HL02 @@ -35,12 +35,12 @@ elim (cnv_cpms_teqx_conf_lpr_aux … IH2 IH1 … H1T01 … H1T02 … HL01 … HL qed-. fact cnv_cpms_conf_lpr_refl_tneqx_sub (h) (a) (G0) (L0) (T0) (m21) (m22): - (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr h a G L T) → - ⦃G0,L0⦄ ⊢ T0 ![h,a] → - ∀X2. ⦃G0,L0⦄ ⊢ T0 ➡[m21,h] X2 → (T0 ≛ X2 → ⊥) → ∀T2. ⦃G0,L0⦄ ⊢ X2 ➡*[m22,h] T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ T0 ➡*[m21+m22,h] T& ⦃G0,L2⦄ ⊢ T2 ➡*[h] T. + (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → + ❪G0,L0❫ ⊢ T0 ![h,a] → + ∀X2. ❪G0,L0❫ ⊢ T0 ➡[m21,h] X2 → (T0 ≛ X2 → ⊥) → ∀T2. ❪G0,L0❫ ⊢ X2 ➡*[m22,h] T2 → + ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G0,L1❫ ⊢ T0 ➡*[m21+m22,h] T& ❪G0,L2❫ ⊢ T2 ➡*[h] T. #h #a #G0 #L0 #T0 #m21 #m22 #IH2 #IH1 #H0 #X2 #HX02 #HnX02 #T2 #HXT2 #L1 #HL01 #L2 #HL02 @@ -57,28 +57,28 @@ lapply (cpms_trans … HTY2 … HY2) -Y2 #HT2Y qed-. fact cnv_cpms_conf_lpr_step_tneqx_sub (h) (a) (G0) (L0) (T0) (m11) (m12) (m21) (m22): - (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr h a G L T) → - ⦃G0,L0⦄ ⊢ T0 ![h,a] → - ∀X1. ⦃G0,L0⦄ ⊢ T0 ➡[m11,h] X1 → T0 ≛ X1 → ∀T1. ⦃G0,L0⦄ ⊢ X1 ➡*[m12,h] T1 → X1 ≛ T1 → - ∀X2. ⦃G0,L0⦄ ⊢ T0 ➡[m21,h] X2 → (T0 ≛ X2 → ⊥) → ∀T2. ⦃G0,L0⦄ ⊢ X2 ➡*[m22,h] T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ((∀G,L,T. ⦃G0,L0,X1⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ⦃G0,L0,X1⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → + ❪G0,L0❫ ⊢ T0 ![h,a] → + ∀X1. ❪G0,L0❫ ⊢ T0 ➡[m11,h] X1 → T0 ≛ X1 → ∀T1. ❪G0,L0❫ ⊢ X1 ➡*[m12,h] T1 → X1 ≛ T1 → + ∀X2. ❪G0,L0❫ ⊢ T0 ➡[m21,h] X2 → (T0 ≛ X2 → ⊥) → ∀T2. ❪G0,L0❫ ⊢ X2 ➡*[m22,h] T2 → + ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 → + ((∀G,L,T. ❪G0,L0,X1❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,X1❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → ∀m21,m22. - ∀X2. ⦃G0,L0⦄ ⊢ X1 ➡[m21,h] X2 → (X1 ≛ X2 → ⊥) → - ∀T2. ⦃G0,L0⦄ ⊢ X2 ➡*[m22,h] T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ T1 ➡*[m21+m22-m12,h] T & ⦃G0,L2⦄ ⊢ T2 ➡*[m12-(m21+m22),h]T + ∀X2. ❪G0,L0❫ ⊢ X1 ➡[m21,h] X2 → (X1 ≛ X2 → ⊥) → + ∀T2. ❪G0,L0❫ ⊢ X2 ➡*[m22,h] T2 → + ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G0,L1❫ ⊢ T1 ➡*[m21+m22-m12,h] T & ❪G0,L2❫ ⊢ T2 ➡*[m12-(m21+m22),h]T ) → - ∃∃T. ⦃G0,L1⦄ ⊢ T1 ➡*[m21+m22-(m11+m12),h] T & ⦃G0,L2⦄ ⊢ T2 ➡*[m11+m12-(m21+m22),h] T. + ∃∃T. ❪G0,L1❫ ⊢ T1 ➡*[m21+m22-(m11+m12),h] T & ❪G0,L2❫ ⊢ T2 ➡*[m11+m12-(m21+m22),h] T. #h #a #G0 #L0 #T0 #m11 #m12 #m21 #m22 #IH2 #IH1 #HT0 #X1 #H1X01 #H2X01 #T1 #H1XT1 #H2XT1 #X2 #H1X02 #H2X02 #T2 #HXT2 #L1 #HL01 #L2 #HL02 #IH lapply (cnv_cpm_trans_lpr_aux … IH1 IH2 … H1X01 … L0 ?) // #HX1 lapply (cnv_cpm_trans_lpr_aux … IH1 IH2 … H1X02 … L0 ?) // #HX2 elim (cnv_cpm_conf_lpr_aux … IH2 IH1 … H1X01 … H1X02 … L0 … L0) // #Z0 #HXZ10 #HXZ20 -cut (⦃G0, L0, T0⦄ >[h] ⦃G0, L0, X2⦄) [ /4 width=5 by cpms_fwd_fpbs, cpm_fpb, ex2_3_intro/ ] #H1fpbg (**) (* cut *) +cut (❪G0, L0, T0❫ >[h] ❪G0, L0, X2❫) [ /4 width=5 by cpms_fwd_fpbs, cpm_fpb, ex2_3_intro/ ] #H1fpbg (**) (* cut *) lapply (fpbg_fpbs_trans ?? G0 ? L0 ? Z0 ? … H1fpbg) [ /2 width=2 by cpms_fwd_fpbs/ ] #H2fpbg lapply (cnv_cpms_trans_lpr_sub … IH2 … HXZ20 … L0 ?) // #HZ0 elim (IH1 … HXT2 … HXZ20 … L2 … L0) [|*: /4 width=2 by fpb_fpbg, cpm_fpb/ ] -HXT2 -HXZ20 #Z2 #HTZ2 #HZ02 @@ -99,13 +99,13 @@ lapply (cpms_trans … HTZ2 … HZ02) -Z2 [h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr h a G L T) → - ⦃G0,L0⦄ ⊢ T0 ![h,a] → - ∀T1. ⦃G0,L0⦄ ⊢ T0 ➡*[n1,h] T1 → T0 ≛ T1 → - ∀X2. ⦃G0,L0⦄ ⊢ T0 ➡[m21,h] X2 → (T0 ≛ X2 → ⊥) → ∀T2. ⦃G0,L0⦄ ⊢ X2 ➡*[m22,h] T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ T1 ➡*[m21+m22-n1,h] T & ⦃G0,L2⦄ ⊢ T2 ➡*[n1-(m21+m22),h] T. + (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → + ❪G0,L0❫ ⊢ T0 ![h,a] → + ∀T1. ❪G0,L0❫ ⊢ T0 ➡*[n1,h] T1 → T0 ≛ T1 → + ∀X2. ❪G0,L0❫ ⊢ T0 ➡[m21,h] X2 → (T0 ≛ X2 → ⊥) → ∀T2. ❪G0,L0❫ ⊢ X2 ➡*[m22,h] T2 → + ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G0,L1❫ ⊢ T1 ➡*[m21+m22-n1,h] T & ❪G0,L2❫ ⊢ T2 ➡*[n1-(m21+m22),h] T. #h #a #G0 #L0 #T0 #n1 #m21 #m22 #IH2 #IH1 #HT0 #T1 #H1T01 #H2T01 generalize in match m22; generalize in match m21; -m21 -m22 @@ -122,20 +122,20 @@ generalize in match IH1; generalize in match IH2; qed-. fact cnv_cpms_conf_lpr_tneqx_tneqx_aux (h) (a) (G0) (L0) (T0) (m11) (m12) (m21) (m22): - (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr h a G L T) → - ⦃G0,L0⦄ ⊢ T0 ![h,a] → - ∀X1. ⦃G0,L0⦄ ⊢ T0 ➡[m11,h] X1 → (T0 ≛ X1 → ⊥) → ∀T1. ⦃G0,L0⦄ ⊢ X1 ➡*[m12,h] T1 → - ∀X2. ⦃G0,L0⦄ ⊢ T0 ➡[m21,h] X2 → (T0 ≛ X2 → ⊥) → ∀T2. ⦃G0,L0⦄ ⊢ X2 ➡*[m22,h] T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ T1 ➡*[m21+m22-(m11+m12),h] T & ⦃G0,L2⦄ ⊢ T2 ➡*[m11+m12-(m21+m22),h] T. + (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → + ❪G0,L0❫ ⊢ T0 ![h,a] → + ∀X1. ❪G0,L0❫ ⊢ T0 ➡[m11,h] X1 → (T0 ≛ X1 → ⊥) → ∀T1. ❪G0,L0❫ ⊢ X1 ➡*[m12,h] T1 → + ∀X2. ❪G0,L0❫ ⊢ T0 ➡[m21,h] X2 → (T0 ≛ X2 → ⊥) → ∀T2. ❪G0,L0❫ ⊢ X2 ➡*[m22,h] T2 → + ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G0,L1❫ ⊢ T1 ➡*[m21+m22-(m11+m12),h] T & ❪G0,L2❫ ⊢ T2 ➡*[m11+m12-(m21+m22),h] T. #h #a #G0 #L0 #T0 #m11 #m12 #m21 #m22 #IH2 #IH1 #H0 #X1 #HX01 #HnX01 #T1 #HXT1 #X2 #HX02 #HnX02 #T2 #HXT2 #L1 #HL01 #L2 #HL02 lapply (cnv_cpm_trans_lpr_aux … IH1 IH2 … HX01 … L0 ?) // #HX1 lapply (cnv_cpm_trans_lpr_aux … IH1 IH2 … HX02 … L0 ?) // #HX2 elim (cnv_cpm_conf_lpr_aux … IH2 IH1 … HX01 … HX02 … L0 … L0) // #Z0 #HXZ10 #HXZ20 -cut (⦃G0, L0, T0⦄ >[h] ⦃G0, L0, X1⦄) [ /4 width=5 by cpms_fwd_fpbs, cpm_fpb, ex2_3_intro/ ] #H1fpbg (**) (* cut *) +cut (❪G0, L0, T0❫ >[h] ❪G0, L0, X1❫) [ /4 width=5 by cpms_fwd_fpbs, cpm_fpb, ex2_3_intro/ ] #H1fpbg (**) (* cut *) lapply (fpbg_fpbs_trans ?? G0 ? L0 ? Z0 ? … H1fpbg) [ /2 width=2 by cpms_fwd_fpbs/ ] #H2fpbg lapply (cnv_cpms_trans_lpr_sub … IH2 … HXZ10 … L0 ?) // #HZ0 elim (IH1 … HXT1 … HXZ10 … L1 … L0) [|*: /4 width=2 by fpb_fpbg, cpm_fpb/ ] -HXT1 -HXZ10 #Z1 #HTZ1 #HZ01 @@ -147,8 +147,8 @@ lapply (cpms_trans … HTZ2 … HZ02) -Z2 [h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → ∀G,L,T. G0 = G → L0 = L → T0 = T → IH_cnv_cpms_conf_lpr h a G L T. #h #a #G #L #T #IH2 #IH1 #G0 #L0 #T0 #HG #HL #HT #HT0 #n1 #T1 #HT01 #n2 #T2 #HT02 #L1 #HL01 #L2 #HL02 destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx.ma index ab676566f..28c781e0f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx.ma @@ -19,10 +19,10 @@ include "basic_2/dynamic/cnv_cpm_teqx_trans.ma". (* Properties with restricted rt-computation for terms **********************) fact cpms_tneqx_fwd_step_sn_aux (h) (a) (n) (G) (L) (T1): - ∀T2. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 → ⦃G,L⦄ ⊢ T1 ![h,a] → (T1 ≛ T2 → ⊥) → - (∀G0,L0,T0. ⦃G,L,T1⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - (∀G0,L0,T0. ⦃G,L,T1⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → - ∃∃n1,n2,T0. ⦃G,L⦄ ⊢ T1 ➡[n1,h] T0 & T1 ≛ T0 → ⊥ & ⦃G,L⦄ ⊢ T0 ➡*[n2,h] T2 & n1+n2 = n. + ∀T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → ❪G,L❫ ⊢ T1 ![h,a] → (T1 ≛ T2 → ⊥) → + (∀G0,L0,T0. ❪G,L,T1❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,T1❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → + ∃∃n1,n2,T0. ❪G,L❫ ⊢ T1 ➡[n1,h] T0 & T1 ≛ T0 → ⊥ & ❪G,L❫ ⊢ T0 ➡*[n2,h] T2 & n1+n2 = n. #h #a #n #G #L #T1 #T2 #H @(cpms_ind_sn … H) -n -T1 [ #_ #H2T2 elim H2T2 -H2T2 // @@ -43,11 +43,11 @@ fact cpms_tneqx_fwd_step_sn_aux (h) (a) (n) (G) (L) (T1): qed-. fact cpms_teqx_ind_sn (h) (a) (G) (L) (T2) (Q:relation2 …): - (⦃G,L⦄ ⊢ T2 ![h,a] → Q 0 T2) → - (∀n1,n2,T1,T. ⦃G,L⦄ ⊢ T1 ➡[n1,h] T → ⦃G,L⦄ ⊢ T1 ![h,a] → T1 ≛ T → ⦃G,L⦄ ⊢ T ➡*[n2,h] T2 → ⦃G,L⦄ ⊢ T ![h,a] → T ≛ T2 → Q n2 T → Q (n1+n2) T1) → - ∀n,T1. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 → ⦃G,L⦄ ⊢ T1 ![h,a] → T1 ≛ T2 → - (∀G0,L0,T0. ⦃G,L,T1⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → - (∀G0,L0,T0. ⦃G,L,T1⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → + (❪G,L❫ ⊢ T2 ![h,a] → Q 0 T2) → + (∀n1,n2,T1,T. ❪G,L❫ ⊢ T1 ➡[n1,h] T → ❪G,L❫ ⊢ T1 ![h,a] → T1 ≛ T → ❪G,L❫ ⊢ T ➡*[n2,h] T2 → ❪G,L❫ ⊢ T ![h,a] → T ≛ T2 → Q n2 T → Q (n1+n2) T1) → + ∀n,T1. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → ❪G,L❫ ⊢ T1 ![h,a] → T1 ≛ T2 → + (∀G0,L0,T0. ❪G,L,T1❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) → + (∀G0,L0,T0. ❪G,L,T1❫ >[h] ❪G0,L0,T0❫ → IH_cnv_cpm_trans_lpr h a G0 L0 T0) → Q n T1. #h #a #G #L #T2 #Q #IB1 #IB2 #n #T1 #H @(cpms_ind_sn … H) -n -T1 diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx_conf.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx_conf.ma index f0e8dff67..656eee30d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx_conf.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpms_teqx_conf.ma @@ -20,12 +20,12 @@ include "basic_2/dynamic/cnv_cpms_teqx.ma". (* Sub confluence propery with restricted rt-transition for terms ***********) fact cnv_cpms_teqx_strip_lpr_aux (h) (a) (G0) (L0) (T0): - (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr h a G L T) → - ∀n1,T1. ⦃G0,L0⦄ ⊢ T0 ➡*[n1,h] T1 → ⦃G0,L0⦄ ⊢ T0 ![h,a] → T0 ≛ T1 → - ∀n2,T2. ⦃G0,L0⦄ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ T1 ➡[n2-n1,h] T & T1 ≛ T & ⦃G0,L2⦄ ⊢ T2 ➡*[n1-n2,h] T & T2 ≛ T. + (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → + ∀n1,T1. ❪G0,L0❫ ⊢ T0 ➡*[n1,h] T1 → ❪G0,L0❫ ⊢ T0 ![h,a] → T0 ≛ T1 → + ∀n2,T2. ❪G0,L0❫ ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 → + ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G0,L1❫ ⊢ T1 ➡[n2-n1,h] T & T1 ≛ T & ❪G0,L2❫ ⊢ T2 ➡*[n1-n2,h] T & T2 ≛ T. #h #a #G #L0 #T0 #IH2 #IH1 #n1 #T1 #H1T01 #H0T0 #H2T01 @(cpms_teqx_ind_sn … H1T01 H0T0 H2T01 IH1 IH2) -n1 -T0 [ #H0T1 #n2 #T2 #H1T12 #H2T12 #L1 #HL01 #L2 #HL02 @@ -45,12 +45,12 @@ fact cnv_cpms_teqx_strip_lpr_aux (h) (a) (G0) (L0) (T0): qed-. fact cnv_cpms_teqx_conf_lpr_aux (h) (a) (G0) (L0) (T0): - (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpm_trans_lpr h a G L T) → - (∀G,L,T. ⦃G0,L0,T0⦄ >[h] ⦃G,L,T⦄ → IH_cnv_cpms_conf_lpr h a G L T) → - ∀n1,T1. ⦃G0,L0⦄ ⊢ T0 ➡*[n1,h] T1 → ⦃G0,L0⦄ ⊢ T0 ![h,a] → T0 ≛ T1 → - ∀n2,T2. ⦃G0,L0⦄ ⊢ T0 ➡*[n2,h] T2 → T0 ≛ T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ T1 ➡*[n2-n1,h] T & T1 ≛ T & ⦃G0,L2⦄ ⊢ T2 ➡*[n1-n2,h] T & T2 ≛ T. + (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpm_trans_lpr h a G L T) → + (∀G,L,T. ❪G0,L0,T0❫ >[h] ❪G,L,T❫ → IH_cnv_cpms_conf_lpr h a G L T) → + ∀n1,T1. ❪G0,L0❫ ⊢ T0 ➡*[n1,h] T1 → ❪G0,L0❫ ⊢ T0 ![h,a] → T0 ≛ T1 → + ∀n2,T2. ❪G0,L0❫ ⊢ T0 ➡*[n2,h] T2 → T0 ≛ T2 → + ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G0,L1❫ ⊢ T1 ➡*[n2-n1,h] T & T1 ≛ T & ❪G0,L2❫ ⊢ T2 ➡*[n1-n2,h] T & T2 ≛ T. #h #a #G #L0 #T0 #IH2 #IH1 #n1 #T1 #H1T01 #H0T0 #H2T01 generalize in match IH1; generalize in match IH2; @(cpms_teqx_ind_sn … H1T01 H0T0 H2T01 IH1 IH2) -n1 -T0 diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe.ma index 09dcccc3d..ce73661f8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe.ma @@ -21,21 +21,21 @@ include "basic_2/dynamic/cnv_preserve.ma". (* Properties with t-unbound whd evaluation on terms ************************) lemma cnv_cpmuwe_trans (h) (a) (G) (L): - ∀T1. ⦃G,L⦄ ⊢ T1 ![h,a] → - ∀n,T2. ⦃G,L⦄ ⊢ T1 ➡*𝐍𝐖*[h,n] T2 → ⦃G,L⦄ ⊢ T2 ![h,a]. + ∀T1. ❪G,L❫ ⊢ T1 ![h,a] → + ∀n,T2. ❪G,L❫ ⊢ T1 ➡*𝐍𝐖*[h,n] T2 → ❪G,L❫ ⊢ T2 ![h,a]. /3 width=4 by cpmuwe_fwd_cpms, cnv_cpms_trans/ qed-. lemma cnv_R_cpmuwe_total (h) (a) (G) (L): - ∀T1. ⦃G,L⦄ ⊢ T1 ![h,a] → ∃n. R_cpmuwe h G L T1 n. + ∀T1. ❪G,L❫ ⊢ T1 ![h,a] → ∃n. R_cpmuwe h G L T1 n. /4 width=2 by cnv_fwd_fsb, fsb_inv_csx, R_cpmuwe_total_csx/ qed-. (* Main inversions with head evaluation for t-bound rt-transition on terms **) theorem cnv_cpmuwe_mono (h) (a) (G) (L): - ∀T0. ⦃G,L⦄ ⊢ T0 ![h,a] → - ∀n1,T1. ⦃G,L⦄ ⊢ T0 ➡*𝐍𝐖*[h,n1] T1 → - ∀n2,T2. ⦃G,L⦄ ⊢ T0 ➡*𝐍𝐖*[h,n2] T2 → - ∧∧ ⦃G,L⦄ ⊢ T1 ⬌*[h,n2-n1,n1-n2] T2 & T1 ≅ T2. + ∀T0. ❪G,L❫ ⊢ T0 ![h,a] → + ∀n1,T1. ❪G,L❫ ⊢ T0 ➡*𝐍𝐖*[h,n1] T1 → + ∀n2,T2. ❪G,L❫ ⊢ T0 ➡*𝐍𝐖*[h,n2] T2 → + ∧∧ ❪G,L❫ ⊢ T1 ⬌*[h,n2-n1,n1-n2] T2 & T1 ≅ T2. #h #a #G #L #T0 #HT0 #n1 #T1 * #HT01 #HT1 #n2 #T2 * #HT02 #HT2 elim (cnv_cpms_conf … HT0 … HT01 … HT02) -T0 #T0 #HT10 #HT20 /4 width=4 by cpms_div, tweq_canc_dx, conj/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe_cpmre.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe_cpmre.ma index 701746c9f..09eb4bdc3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe_cpmre.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpmuwe_cpmre.ma @@ -22,7 +22,7 @@ include "basic_2/dynamic/cnv_cpmre.ma". (* Advanced Properties with t-unbound whd evaluation on terms ***************) lemma cnv_R_cpmuwe_dec (h) (a) (G) (L): - ∀T. ⦃G,L⦄ ⊢ T ![h,a] → ∀n. Decidable (R_cpmuwe h G L T n). + ∀T. ❪G,L❫ ⊢ T ![h,a] → ∀n. Decidable (R_cpmuwe h G L T n). #h #a #G #L #T1 #HT1 #n elim (cnv_fwd_aaa … HT1) #A #HA elim (cpmre_total_aaa h n … HA) -HA #T2 #HT12 diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpts.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpts.ma index fc6d8e388..51c02346f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpts.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_cpts.ma @@ -22,8 +22,8 @@ include "basic_2/dynamic/cnv_preserve_cpcs.ma". (* Forward lemmas with t-bound t-computarion for terms **********************) lemma cpts_cpms_conf_eq (h) (n) (a) (G) (L): - ∀T0. ⦃G,L⦄ ⊢ T0 ![h,a] → ∀T1. ⦃G,L⦄ ⊢ T0 ⬆*[h,n] T1 → - ∀T2. ⦃G,L⦄ ⊢ T0 ➡*[n,h] T2 → ⦃G,L⦄ ⊢ T1 ⬌*[h] T2. + ∀T0. ❪G,L❫ ⊢ T0 ![h,a] → ∀T1. ❪G,L❫ ⊢ T0 ⬆*[h,n] T1 → + ∀T2. ❪G,L❫ ⊢ T0 ➡*[n,h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2. #h #a #n #G #L #T0 #HT0 #T1 #HT01 #T2 #HT02 /3 width=6 by cpts_fwd_cpms, cnv_cpms_conf_eq/ qed-. @@ -31,18 +31,18 @@ qed-. (* Inversion lemmas with t-bound t-computarion for terms ********************) lemma cnv_inv_cast_cpts (h) (a) (nu) (nt) (G) (L): - ∀U1. ⦃G,L⦄ ⊢ U1 ![h,a] → ∀U2. ⦃G,L⦄ ⊢ U1 ⬆*[h,nu] U2 → - ∀T1. ⦃G,L⦄ ⊢ T1 ![h,a] → ∀T2. ⦃G,L⦄ ⊢ T1 ⬆*[h,nt] T2 → - ⦃G,L⦄ ⊢ U1 ⬌*[h,nu,nt] T1 → ⦃G,L⦄ ⊢ U2 ⬌*[h] T2. + ∀U1. ❪G,L❫ ⊢ U1 ![h,a] → ∀U2. ❪G,L❫ ⊢ U1 ⬆*[h,nu] U2 → + ∀T1. ❪G,L❫ ⊢ T1 ![h,a] → ∀T2. ❪G,L❫ ⊢ T1 ⬆*[h,nt] T2 → + ❪G,L❫ ⊢ U1 ⬌*[h,nu,nt] T1 → ❪G,L❫ ⊢ U2 ⬌*[h] T2. #h #a #nu #nt #G #L #U1 #HU1 #U2 #HU12 #T1 #HT1 #T2 #HT12 * #X1 #HUX1 #HTX1 /3 width=8 by cpts_cpms_conf_eq, cpcs_canc_dx/ qed-. lemma cnv_inv_appl_cpts (h) (a) (nv) (nt) (p) (G) (L): - ∀V1. ⦃G,L⦄ ⊢ V1 ![h,a] → ∀V2. ⦃G,L⦄ ⊢ V1 ⬆*[h,nv] V2 → - ∀T1. ⦃G,L⦄ ⊢ T1 ![h,a] → ∀T2. ⦃G,L⦄ ⊢ T1 ⬆*[h,nt] T2 → - ∀V0. ⦃G,L⦄ ⊢ V1 ➡*[nv,h] V0 → ∀T0. ⦃G,L⦄ ⊢ T1 ➡*[nt,h] ⓛ{p}V0.T0 → - ∃∃W0,U0. ⦃G,L⦄ ⊢ V2 ➡*[h] W0 & ⦃G,L⦄ ⊢ T2 ➡*[h] ⓛ{p}W0.U0. + ∀V1. ❪G,L❫ ⊢ V1 ![h,a] → ∀V2. ❪G,L❫ ⊢ V1 ⬆*[h,nv] V2 → + ∀T1. ❪G,L❫ ⊢ T1 ![h,a] → ∀T2. ❪G,L❫ ⊢ T1 ⬆*[h,nt] T2 → + ∀V0. ❪G,L❫ ⊢ V1 ➡*[nv,h] V0 → ∀T0. ❪G,L❫ ⊢ T1 ➡*[nt,h] ⓛ[p]V0.T0 → + ∃∃W0,U0. ❪G,L❫ ⊢ V2 ➡*[h] W0 & ❪G,L❫ ⊢ T2 ➡*[h] ⓛ[p]W0.U0. #h #a #nv #nt #p #G #L #V1 #HV1 #V2 #HV12 #T1 #HT1 #T2 #HT12 #V0 #HV20 #T0 #HT20 lapply (cpts_cpms_conf_eq … HV1 … HV12 … HV20) -nv -V1 #HV20 lapply (cpts_cpms_conf_eq … HT1 … HT12 … HT20) -nt -T1 #HT20 @@ -56,19 +56,19 @@ qed-. (* Properties with t-bound t-computarion for terms **************************) lemma cnv_cast_cpts (h) (a) (nu) (nt) (G) (L): - ∀U1. ⦃G,L⦄ ⊢ U1 ![h,a] → ∀U2. ⦃G,L⦄ ⊢ U1 ⬆*[h,nu] U2 → - ∀T1. ⦃G,L⦄ ⊢ T1 ![h,a] → ∀T2. ⦃G,L⦄ ⊢ T1 ⬆*[h,nt] T2 → - ⦃G,L⦄ ⊢ U2 ⬌*[h] T2 → ⦃G,L⦄ ⊢ U1 ⬌*[h,nu,nt] T1. + ∀U1. ❪G,L❫ ⊢ U1 ![h,a] → ∀U2. ❪G,L❫ ⊢ U1 ⬆*[h,nu] U2 → + ∀T1. ❪G,L❫ ⊢ T1 ![h,a] → ∀T2. ❪G,L❫ ⊢ T1 ⬆*[h,nt] T2 → + ❪G,L❫ ⊢ U2 ⬌*[h] T2 → ❪G,L❫ ⊢ U1 ⬌*[h,nu,nt] T1. #h #a #nu #nt #G #L #U1 #HU1 #U2 #HU12 #T1 #HT1 #T2 #HT12 #HUT2 elim (cpcs_inv_cprs … HUT2) -HUT2 #X2 #HUX2 #HTX2 /3 width=5 by cpts_cprs_trans, cpms_div/ qed-. lemma cnv_appl_cpts (h) (a) (nv) (nt) (p) (G) (L): - ∀V1. ⦃G,L⦄ ⊢ V1 ![h,a] → ∀V2. ⦃G,L⦄ ⊢ V1 ⬆*[h,nv] V2 → - ∀T1. ⦃G,L⦄ ⊢ T1 ![h,a] → ∀T2. ⦃G,L⦄ ⊢ T1 ⬆*[h,nt] T2 → - ∀V0. ⦃G,L⦄ ⊢ V2 ➡*[h] V0 → ∀T0. ⦃G,L⦄ ⊢ T2 ➡*[h] ⓛ{p}V0.T0 → - ∃∃W0,U0. ⦃G,L⦄ ⊢ V1 ➡*[nv,h] W0 & ⦃G,L⦄ ⊢ T1 ➡*[nt,h] ⓛ{p}W0.U0. + ∀V1. ❪G,L❫ ⊢ V1 ![h,a] → ∀V2. ❪G,L❫ ⊢ V1 ⬆*[h,nv] V2 → + ∀T1. ❪G,L❫ ⊢ T1 ![h,a] → ∀T2. ❪G,L❫ ⊢ T1 ⬆*[h,nt] T2 → + ∀V0. ❪G,L❫ ⊢ V2 ➡*[h] V0 → ∀T0. ❪G,L❫ ⊢ T2 ➡*[h] ⓛ[p]V0.T0 → + ∃∃W0,U0. ❪G,L❫ ⊢ V1 ➡*[nv,h] W0 & ❪G,L❫ ⊢ T1 ➡*[nt,h] ⓛ[p]W0.U0. #h #a #nv #nt #p #G #L #V1 #HV1 #V2 #HV12 #T1 #HT1 #T2 #HT12 #V0 #HV20 #T0 #HT20 /3 width=6 by cpts_cprs_trans, ex2_2_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_drops.ma index 25bf405df..1b8bf7714 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_drops.ma @@ -21,8 +21,8 @@ include "basic_2/dynamic/cnv.ma". (* Basic_2A1: uses: snv_lref *) lemma cnv_lref_drops (h) (a) (G): - ∀I,K,V,i,L. ⦃G,K⦄ ⊢ V ![h,a] → - ⇩*[i] L ≘ K.ⓑ{I}V → ⦃G,L⦄ ⊢ #i ![h,a]. + ∀I,K,V,i,L. ❪G,K❫ ⊢ V ![h,a] → + ⇩*[i] L ≘ K.ⓑ[I]V → ❪G,L❫ ⊢ #i ![h,a]. #h #a #G #I #K #V #i elim i -i [ #L #HV #H lapply (drops_fwd_isid … H ?) -H // #H destruct @@ -37,8 +37,8 @@ qed. (* Basic_2A1: uses: snv_inv_lref *) lemma cnv_inv_lref_drops (h) (a) (G): - ∀i,L. ⦃G,L⦄ ⊢ #i ![h,a] → - ∃∃I,K,V. ⇩*[i] L ≘ K.ⓑ{I}V & ⦃G,K⦄ ⊢ V ![h,a]. + ∀i,L. ❪G,L❫ ⊢ #i ![h,a] → + ∃∃I,K,V. ⇩*[i] L ≘ K.ⓑ[I]V & ❪G,K❫ ⊢ V ![h,a]. #h #a #G #i elim i -i [ #L #H elim (cnv_inv_zero … H) -H #I #K #V #HV #H destruct @@ -51,15 +51,15 @@ lemma cnv_inv_lref_drops (h) (a) (G): qed-. lemma cnv_inv_lref_pair (h) (a) (G): - ∀i,L. ⦃G,L⦄ ⊢ #i ![h,a] → - ∀I,K,V. ⇩*[i] L ≘ K.ⓑ{I}V → ⦃G,K⦄ ⊢ V ![h,a]. + ∀i,L. ❪G,L❫ ⊢ #i ![h,a] → + ∀I,K,V. ⇩*[i] L ≘ K.ⓑ[I]V → ❪G,K❫ ⊢ V ![h,a]. #h #a #G #i #L #H #I #K #V #HLK elim (cnv_inv_lref_drops … H) -H #Z #Y #X #HLY #HX lapply (drops_mono … HLY … HLK) -L #H destruct // qed-. lemma cnv_inv_lref_atom (h) (a) (b) (G): - ∀i,L. ⦃G,L⦄ ⊢ #i ![h,a] → ⇩*[b,𝐔❴i❵] L ≘ ⋆ → ⊥. + ∀i,L. ❪G,L❫ ⊢ #i ![h,a] → ⇩*[b,𝐔❨i❩] L ≘ ⋆ → ⊥. #h #a #b #G #i #L #H #Hi elim (cnv_inv_lref_drops … H) -H #Z #Y #X #HLY #_ lapply (drops_gen b … HLY) -HLY #HLY @@ -67,8 +67,8 @@ lapply (drops_mono … HLY … Hi) -L #H destruct qed-. lemma cnv_inv_lref_unit (h) (a) (G): - ∀i,L. ⦃G,L⦄ ⊢ #i ![h,a] → - ∀I,K. ⇩*[i] L ≘ K.ⓤ{I} → ⊥. + ∀i,L. ❪G,L❫ ⊢ #i ![h,a] → + ∀I,K. ⇩*[i] L ≘ K.ⓤ[I] → ⊥. #h #a #G #i #L #H #I #K #HLK elim (cnv_inv_lref_drops … H) -H #Z #Y #X #HLY #_ lapply (drops_mono … HLY … HLK) -L #H destruct @@ -125,7 +125,7 @@ lemma cnv_inv_lifts (h) (a): ∀G. d_deliftable1 (cnv h a G). elim (cnv_inv_lref_drops … H1) -H1 #I0 #L0 #W #HL0 #HW elim (lifts_inv_lref2 … H2) -H2 #i #Hf #H destruct (**) (* this should be a lemma *) - lapply (drops_split_div … HLK (𝐔❴i❵) ???) -HLK [4,8: * |*: // ] #Y0 #HK #HLY0 + lapply (drops_split_div … HLK (𝐔❨i❩) ???) -HLK [4,8: * |*: // ] #Y0 #HK #HLY0 lapply (drops_conf … HL0 … HLY0 ??) -HLY0 [3,6: |*: /2 width=6 by after_uni_dx/ ] #HLY0 lapply (drops_tls_at … Hf … HLY0) -HLY0 #HLY0 elim (drops_inv_skip1 … HLY0) -HLY0 #Z #K0 #HLK0 #HZ #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_eval.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_eval.ma index f0557da92..44bd544d7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_eval.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_eval.ma @@ -24,7 +24,7 @@ include "basic_2/dynamic/cnv_preserve_cpes.ma". (* main properties with evaluations for rt-transition on terms **************) theorem cnv_dec (h) (a) (G) (L) (T): ac_props a → - Decidable (⦃G,L⦄ ⊢ T ![h,a]). + Decidable (❪G,L❫ ⊢ T ![h,a]). #h #a #G #L #T #Ha @(fqup_wf_ind_eq (Ⓣ) … G L T) -G -L -T #G0 #L0 #T0 #IH #G #L * * [|||| * ] [ #s #HG #HL #HT destruct -Ha -IH @@ -43,7 +43,7 @@ theorem cnv_dec (h) (a) (G) (L) (T): ac_props a → /3 width=6 by cnv_inv_gref, or_intror/ | #p #I #V #T #HG #HL #HT destruct -Ha elim (IH G L V) [| -IH | // ] #HV - [ elim (IH G (L.ⓑ{I}V) T) -IH [3: // ] #HT + [ elim (IH G (L.ⓑ[I]V) T) -IH [3: // ] #HT [ /3 width=1 by cnv_bind, or_introl/ ] ] @or_intror #H diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_fqus.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_fqus.ma index 7498e33c1..ec0549fa2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_fqus.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_fqus.ma @@ -21,8 +21,8 @@ include "basic_2/dynamic/cnv_drops.ma". (* Basic_2A1: uses: snv_fqu_conf *) lemma cnv_fqu_conf (h) (a): - ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂ ⦃G2,L2,T2⦄ → - ⦃G1,L1⦄ ⊢ T1 ![h,a] → ⦃G2,L2⦄ ⊢ T2 ![h,a]. + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂ ❪G2,L2,T2❫ → + ❪G1,L1❫ ⊢ T1 ![h,a] → ❪G2,L2❫ ⊢ T2 ![h,a]. #h #a #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 [ #I1 #G1 #L1 #V1 #H elim (cnv_inv_zero … H) -H #I2 #L2 #V2 #HV2 #H destruct // @@ -45,24 +45,24 @@ qed-. (* Basic_2A1: uses: snv_fquq_conf *) lemma cnv_fquq_conf (h) (a): - ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂⸮ ⦃G2,L2,T2⦄ → - ⦃G1,L1⦄ ⊢ T1 ![h,a] → ⦃G2,L2⦄ ⊢ T2 ![h,a]. + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮ ❪G2,L2,T2❫ → + ❪G1,L1❫ ⊢ T1 ![h,a] → ❪G2,L2❫ ⊢ T2 ![h,a]. #h #a #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -H [|*] /2 width=5 by cnv_fqu_conf/ qed-. (* Basic_2A1: uses: snv_fqup_conf *) lemma cnv_fqup_conf (h) (a): - ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂+ ⦃G2,L2,T2⦄ → - ⦃G1,L1⦄ ⊢ T1 ![h,a] → ⦃G2,L2⦄ ⊢ T2 ![h,a]. + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+ ❪G2,L2,T2❫ → + ❪G1,L1❫ ⊢ T1 ![h,a] → ❪G2,L2❫ ⊢ T2 ![h,a]. #h #a #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2 /3 width=5 by fqup_strap1, cnv_fqu_conf/ qed-. (* Basic_2A1: uses: snv_fqus_conf *) lemma cnv_fqus_conf (h) (a): - ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂* ⦃G2,L2,T2⦄ → - ⦃G1,L1⦄ ⊢ T1 ![h,a] → ⦃G2,L2⦄ ⊢ T2 ![h,a]. + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂* ❪G2,L2,T2❫ → + ❪G1,L1❫ ⊢ T1 ![h,a] → ❪G2,L2❫ ⊢ T2 ![h,a]. #h #a #G1 #G2 #L1 #L2 #T1 #T2 #H elim (fqus_inv_fqup … H) -H [|*] /2 width=5 by cnv_fqup_conf/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_fsb.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_fsb.ma index 3716f67ea..381030317 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_fsb.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_fsb.ma @@ -22,14 +22,14 @@ include "basic_2/dynamic/cnv_aaa.ma". (* Note: this is the "big tree" theorem *) (* Basic_2A1: uses: snv_fwd_fsb *) lemma cnv_fwd_fsb (h) (a): - ∀G,L,T. ⦃G,L⦄ ⊢ T ![h,a] → ≥[h] 𝐒⦃G,L,T⦄. + ∀G,L,T. ❪G,L❫ ⊢ T ![h,a] → ≥[h] 𝐒❪G,L,T❫. #h #a #G #L #T #H elim (cnv_fwd_aaa … H) -H /2 width=2 by aaa_fsb/ qed-. (* Forward lemmas with strongly rt-normalizing terms ************************) lemma cnv_fwd_csx (h) (a): - ∀G,L,T. ⦃G,L⦄ ⊢ T ![h,a] → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. + ∀G,L,T. ❪G,L❫ ⊢ T ![h,a] → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T❫. #h #a #G #L #T #H /3 width=2 by cnv_fwd_fsb, fsb_inv_csx/ qed-. @@ -37,5 +37,5 @@ qed-. (* Inversion lemmas with proper parallel rst-computation for closures *******) lemma cnv_fpbg_refl_false (h) (a): - ∀G,L,T. ⦃G,L⦄ ⊢ T ![h,a] → ⦃G,L,T⦄ >[h] ⦃G,L,T⦄ → ⊥. + ∀G,L,T. ❪G,L❫ ⊢ T ![h,a] → ❪G,L,T❫ >[h] ❪G,L,T❫ → ⊥. /3 width=7 by cnv_fwd_fsb, fsb_fpbg_refl_false/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve.ma index 9763d082a..a7027e195 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve.ma @@ -19,7 +19,7 @@ include "basic_2/dynamic/cnv_cpms_conf.ma". (* Main preservation properties *********************************************) (* Basic_2A1: uses: snv_preserve *) -lemma cnv_preserve (h) (a): ∀G,L,T. ⦃G,L⦄ ⊢ T ![h,a] → +lemma cnv_preserve (h) (a): ∀G,L,T. ❪G,L❫ ⊢ T ![h,a] → ∧∧ IH_cnv_cpms_conf_lpr h a G L T & IH_cnv_cpm_trans_lpr h a G L T. #h #a #G #L #T #HT @@ -42,9 +42,9 @@ qed-. (* Advanced preservation properties *****************************************) lemma cnv_cpms_conf (h) (a) (G) (L): - ∀T0. ⦃G,L⦄ ⊢ T0 ![h,a] → - ∀n1,T1. ⦃G,L⦄ ⊢ T0 ➡*[n1,h] T1 → ∀n2,T2. ⦃G,L⦄ ⊢ T0 ➡*[n2,h] T2 → - ∃∃T. ⦃G,L⦄ ⊢ T1 ➡*[n2-n1,h] T & ⦃G,L⦄ ⊢ T2 ➡*[n1-n2,h] T. + ∀T0. ❪G,L❫ ⊢ T0 ![h,a] → + ∀n1,T1. ❪G,L❫ ⊢ T0 ➡*[n1,h] T1 → ∀n2,T2. ❪G,L❫ ⊢ T0 ➡*[n2,h] T2 → + ∃∃T. ❪G,L❫ ⊢ T1 ➡*[n2-n1,h] T & ❪G,L❫ ⊢ T2 ➡*[n1-n2,h] T. /2 width=8 by cnv_cpms_conf_lpr/ qed-. (* Basic_2A1: uses: snv_cprs_lpr *) @@ -54,22 +54,22 @@ lemma cnv_cpms_trans_lpr (h) (a) (G) (L) (T): IH_cnv_cpms_trans_lpr h a G L T. qed-. lemma cnv_cpm_trans (h) (a) (G) (L): - ∀T1. ⦃G,L⦄ ⊢ T1 ![h,a] → - ∀n,T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → ⦃G,L⦄ ⊢ T2 ![h,a]. + ∀T1. ❪G,L❫ ⊢ T1 ![h,a] → + ∀n,T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 → ❪G,L❫ ⊢ T2 ![h,a]. /2 width=6 by cnv_cpm_trans_lpr/ qed-. (* Note: this is the preservation property *) lemma cnv_cpms_trans (h) (a) (G) (L): - ∀T1. ⦃G,L⦄ ⊢ T1 ![h,a] → - ∀n,T2. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 → ⦃G,L⦄ ⊢ T2 ![h,a]. + ∀T1. ❪G,L❫ ⊢ T1 ![h,a] → + ∀n,T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → ❪G,L❫ ⊢ T2 ![h,a]. /2 width=6 by cnv_cpms_trans_lpr/ qed-. lemma cnv_lpr_trans (h) (a) (G): - ∀L1,T. ⦃G,L1⦄ ⊢ T ![h,a] → ∀L2. ⦃G,L1⦄ ⊢ ➡[h] L2 → ⦃G,L2⦄ ⊢ T ![h,a]. + ∀L1,T. ❪G,L1❫ ⊢ T ![h,a] → ∀L2. ❪G,L1❫ ⊢ ➡[h] L2 → ❪G,L2❫ ⊢ T ![h,a]. /2 width=6 by cnv_cpm_trans_lpr/ qed-. lemma cnv_lprs_trans (h) (a) (G): - ∀L1,T. ⦃G,L1⦄ ⊢ T ![h,a] → ∀L2. ⦃G,L1⦄ ⊢ ➡*[h] L2 → ⦃G,L2⦄ ⊢ T ![h,a]. + ∀L1,T. ❪G,L1❫ ⊢ T ![h,a] → ∀L2. ❪G,L1❫ ⊢ ➡*[h] L2 → ❪G,L2❫ ⊢ T ![h,a]. #h #a #G #L1 #T #HT #L2 #H @(lprs_ind_dx … H) -L2 /2 width=3 by cnv_lpr_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve_cpcs.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve_cpcs.ma index 29d85f7bd..728499add 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve_cpcs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/cnv_preserve_cpcs.ma @@ -20,16 +20,16 @@ include "basic_2/dynamic/cnv_preserve.ma". (* Forward lemmas with r-equivalence ****************************************) lemma cnv_cpms_conf_eq (h) (a) (n) (G) (L): - ∀T. ⦃G,L⦄ ⊢ T ![h,a] → - ∀T1. ⦃G,L⦄ ⊢ T ➡*[n,h] T1 → ∀T2. ⦃G,L⦄ ⊢ T ➡*[n,h] T2 → ⦃G,L⦄ ⊢ T1 ⬌*[h] T2. + ∀T. ❪G,L❫ ⊢ T ![h,a] → + ∀T1. ❪G,L❫ ⊢ T ➡*[n,h] T1 → ∀T2. ❪G,L❫ ⊢ T ➡*[n,h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2. #h #a #n #G #L #T #HT #T1 #HT1 #T2 #HT2 elim (cnv_cpms_conf … HT … HT1 … HT2) -T [h] ⦃G1,L1,T1⦄ → IH_cnv_cpm_trans_lpr h a G1 L1 T1) → - ∀G1,L1,T1. ⦃G0,L0,T0⦄ >[h] ⦃G1,L1,T1⦄ → IH_cnv_cpms_trans_lpr h a G1 L1 T1. + (∀G1,L1,T1. ❪G0,L0,T0❫ >[h] ❪G1,L1,T1❫ → IH_cnv_cpm_trans_lpr h a G1 L1 T1) → + ∀G1,L1,T1. ❪G0,L0,T0❫ >[h] ❪G1,L1,T1❫ → IH_cnv_cpms_trans_lpr h a G1 L1 T1. #h #a #G0 #L0 #T0 #IH #G1 #L1 #T1 #H01 #HT1 #n #T2 #H @(cpms_ind_dx … H) -n -T2 /3 width=7 by fpbg_cpms_trans/ @@ -60,12 +60,12 @@ qed-. fact cnv_cpm_conf_lpr_sub (h) (a): ∀G0,L0,T0. - (∀G1,L1,T1. ⦃G0,L0,T0⦄ >[h] ⦃G1,L1,T1⦄ → IH_cnv_cpms_conf_lpr h a G1 L1 T1) → - ∀G1,L1,T1. ⦃G0,L0,T0⦄ >[h] ⦃G1,L1,T1⦄ → IH_cnv_cpm_conf_lpr h a G1 L1 T1. + (∀G1,L1,T1. ❪G0,L0,T0❫ >[h] ❪G1,L1,T1❫ → IH_cnv_cpms_conf_lpr h a G1 L1 T1) → + ∀G1,L1,T1. ❪G0,L0,T0❫ >[h] ❪G1,L1,T1❫ → IH_cnv_cpm_conf_lpr h a G1 L1 T1. /3 width=8 by cpm_cpms/ qed-. fact cnv_cpms_strip_lpr_sub (h) (a): ∀G0,L0,T0. - (∀G1,L1,T1. ⦃G0,L0,T0⦄ >[h] ⦃G1,L1,T1⦄ → IH_cnv_cpms_conf_lpr h a G1 L1 T1) → - ∀G1,L1,T1. ⦃G0,L0,T0⦄ >[h] ⦃G1,L1,T1⦄ → IH_cnv_cpms_strip_lpr h a G1 L1 T1. + (∀G1,L1,T1. ❪G0,L0,T0❫ >[h] ❪G1,L1,T1❫ → IH_cnv_cpms_conf_lpr h a G1 L1 T1) → + ∀G1,L1,T1. ❪G0,L0,T0❫ >[h] ❪G1,L1,T1❫ → IH_cnv_cpms_strip_lpr h a G1 L1 T1. /3 width=8 by cpm_cpms/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubv.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubv.ma index 6df83d988..50d1bd0e5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubv.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubv.ma @@ -19,8 +19,8 @@ include "basic_2/dynamic/cnv.ma". inductive lsubv (h) (a) (G): relation lenv ≝ | lsubv_atom: lsubv h a G (⋆) (⋆) -| lsubv_bind: ∀I,L1,L2. lsubv h a G L1 L2 → lsubv h a G (L1.ⓘ{I}) (L2.ⓘ{I}) -| lsubv_beta: ∀L1,L2,W,V. ⦃G,L1⦄ ⊢ ⓝW.V ![h,a] → +| lsubv_bind: ∀I,L1,L2. lsubv h a G L1 L2 → lsubv h a G (L1.ⓘ[I]) (L2.ⓘ[I]) +| lsubv_beta: ∀L1,L2,W,V. ❪G,L1❫ ⊢ ⓝW.V ![h,a] → lsubv h a G L1 L2 → lsubv h a G (L1.ⓓⓝW.V) (L2.ⓛW) . @@ -45,9 +45,9 @@ lemma lsubv_inv_atom_sn (h) (a) (G): /2 width=6 by lsubv_inv_atom_sn_aux/ qed-. fact lsubv_inv_bind_sn_aux (h) (a) (G): ∀L1,L2. G ⊢ L1 ⫃![h,a] L2 → - ∀I,K1. L1 = K1.ⓘ{I} → - ∨∨ ∃∃K2. G ⊢ K1 ⫃![h,a] K2 & L2 = K2.ⓘ{I} - | ∃∃K2,W,V. ⦃G,K1⦄ ⊢ ⓝW.V ![h,a] & G ⊢ K1 ⫃![h,a] K2 + ∀I,K1. L1 = K1.ⓘ[I] → + ∨∨ ∃∃K2. G ⊢ K1 ⫃![h,a] K2 & L2 = K2.ⓘ[I] + | ∃∃K2,W,V. ❪G,K1❫ ⊢ ⓝW.V ![h,a] & G ⊢ K1 ⫃![h,a] K2 & I = BPair Abbr (ⓝW.V) & L2 = K2.ⓛW. #h #a #G #L1 #L2 * -L1 -L2 [ #J #K1 #H destruct @@ -58,9 +58,9 @@ qed-. (* Basic_2A1: uses: lsubsv_inv_pair1 *) lemma lsubv_inv_bind_sn (h) (a) (G): - ∀I,K1,L2. G ⊢ K1.ⓘ{I} ⫃![h,a] L2 → - ∨∨ ∃∃K2. G ⊢ K1 ⫃![h,a] K2 & L2 = K2.ⓘ{I} - | ∃∃K2,W,V. ⦃G,K1⦄ ⊢ ⓝW.V ![h,a] & G ⊢ K1 ⫃![h,a] K2 + ∀I,K1,L2. G ⊢ K1.ⓘ[I] ⫃![h,a] L2 → + ∨∨ ∃∃K2. G ⊢ K1 ⫃![h,a] K2 & L2 = K2.ⓘ[I] + | ∃∃K2,W,V. ❪G,K1❫ ⊢ ⓝW.V ![h,a] & G ⊢ K1 ⫃![h,a] K2 & I = BPair Abbr (ⓝW.V) & L2 = K2.ⓛW. /2 width=3 by lsubv_inv_bind_sn_aux/ qed-. @@ -80,9 +80,9 @@ lemma lsubv_inv_atom_dx (h) (a) (G): fact lsubv_inv_bind_dx_aux (h) (a) (G): ∀L1,L2. G ⊢ L1 ⫃![h,a] L2 → - ∀I,K2. L2 = K2.ⓘ{I} → - ∨∨ ∃∃K1. G ⊢ K1 ⫃![h,a] K2 & L1 = K1.ⓘ{I} - | ∃∃K1,W,V. ⦃G,K1⦄ ⊢ ⓝW.V ![h,a] & + ∀I,K2. L2 = K2.ⓘ[I] → + ∨∨ ∃∃K1. G ⊢ K1 ⫃![h,a] K2 & L1 = K1.ⓘ[I] + | ∃∃K1,W,V. ❪G,K1❫ ⊢ ⓝW.V ![h,a] & G ⊢ K1 ⫃![h,a] K2 & I = BPair Abst W & L1 = K1.ⓓⓝW.V. #h #a #G #L1 #L2 * -L1 -L2 [ #J #K2 #H destruct @@ -93,9 +93,9 @@ qed-. (* Basic_2A1: uses: lsubsv_inv_pair2 *) lemma lsubv_inv_bind_dx (h) (a) (G): - ∀I,L1,K2. G ⊢ L1 ⫃![h,a] K2.ⓘ{I} → - ∨∨ ∃∃K1. G ⊢ K1 ⫃![h,a] K2 & L1 = K1.ⓘ{I} - | ∃∃K1,W,V. ⦃G,K1⦄ ⊢ ⓝW.V ![h,a] & + ∀I,L1,K2. G ⊢ L1 ⫃![h,a] K2.ⓘ[I] → + ∨∨ ∃∃K1. G ⊢ K1 ⫃![h,a] K2 & L1 = K1.ⓘ[I] + | ∃∃K1,W,V. ❪G,K1❫ ⊢ ⓝW.V ![h,a] & G ⊢ K1 ⫃![h,a] K2 & I = BPair Abst W & L1 = K1.ⓓⓝW.V. /2 width=3 by lsubv_inv_bind_dx_aux/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubv_cnv.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubv_cnv.ma index 122c30c41..c5b419480 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubv_cnv.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubv_cnv.ma @@ -20,8 +20,8 @@ include "basic_2/dynamic/lsubv_cpms.ma". (* Basic_2A1: uses: lsubsv_snv_trans *) lemma lsubv_cnv_trans (h) (a) (G): - ∀L2,T. ⦃G,L2⦄ ⊢ T ![h,a] → - ∀L1. G ⊢ L1 ⫃![h,a] L2 → ⦃G,L1⦄ ⊢ T ![h,a]. + ∀L2,T. ❪G,L2❫ ⊢ T ![h,a] → + ∀L1. G ⊢ L1 ⫃![h,a] L2 → ❪G,L1❫ ⊢ T ![h,a]. #h #a #G #L2 #T #H elim H -G -L2 -T // [ #I #G #K2 #V #HV #IH #L1 #H elim (lsubv_inv_bind_dx … H) -H * /3 width=1 by cnv_zero/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubv_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubv_drops.ma index 859eefd95..ac7e5430e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubv_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubv_drops.ma @@ -19,11 +19,11 @@ include "basic_2/dynamic/lsubv.ma". (* Properties with generic slicing for local environments *******************) -(* Note: the premise 𝐔⦃f⦄ cannot be removed *) +(* Note: the premise 𝐔❪f❫ cannot be removed *) (* Basic_2A1: includes: lsubsv_drop_O1_conf *) lemma lsubv_drops_conf_isuni (h) (a) (G): ∀L1,L2. G ⊢ L1 ⫃![h,a] L2 → - ∀b,f,K1. 𝐔⦃f⦄ → ⇩*[b,f] L1 ≘ K1 → + ∀b,f,K1. 𝐔❪f❫ → ⇩*[b,f] L1 ≘ K1 → ∃∃K2. G ⊢ K1 ⫃![h,a] K2 & ⇩*[b,f] L2 ≘ K2. #h #a #G #L1 #L2 #H elim H -L1 -L2 [ /2 width=3 by ex2_intro/ @@ -44,11 +44,11 @@ lemma lsubv_drops_conf_isuni (h) (a) (G): ] qed-. -(* Note: the premise 𝐔⦃f⦄ cannot be removed *) +(* Note: the premise 𝐔❪f❫ cannot be removed *) (* Basic_2A1: includes: lsubsv_drop_O1_trans *) lemma lsubv_drops_trans_isuni (h) (a) (G): ∀L1,L2. G ⊢ L1 ⫃![h,a] L2 → - ∀b,f,K2. 𝐔⦃f⦄ → ⇩*[b,f] L2 ≘ K2 → + ∀b,f,K2. 𝐔❪f❫ → ⇩*[b,f] L2 ≘ K2 → ∃∃K1. G ⊢ K1 ⫃![h,a] K2 & ⇩*[b,f] L1 ≘ K1. #h #a #G #L1 #L2 #H elim H -L1 -L2 [ /2 width=3 by ex2_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta.ma index c2c939388..690e7d668 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta.ma @@ -18,7 +18,7 @@ include "basic_2/dynamic/cnv.ma". (* NATIVE TYPE ASSIGNMENT FOR TERMS *****************************************) definition nta (h) (a): relation4 genv lenv term term ≝ - λG,L,T,U. ⦃G,L⦄ ⊢ ⓝU.T ![h,a]. + λG,L,T,U. ❪G,L❫ ⊢ ⓝU.T ![h,a]. interpretation "native type assignment (term)" 'Colon h a G L T U = (nta h a G L T U). @@ -27,14 +27,14 @@ interpretation "native type assignment (term)" (* Basic_1: was by definition: ty3_sort *) (* Basic_2A1: was by definition: nta_sort ntaa_sort *) -lemma nta_sort (h) (a) (G) (L): ∀s. ⦃G,L⦄ ⊢ ⋆s :[h,a] ⋆(⫯[h]s). +lemma nta_sort (h) (a) (G) (L): ∀s. ❪G,L❫ ⊢ ⋆s :[h,a] ⋆(⫯[h]s). #h #a #G #L #s /2 width=3 by cnv_sort, cnv_cast, cpms_sort/ qed. lemma nta_bind_cnv (h) (a) (G) (K): - ∀V. ⦃G,K⦄ ⊢ V ![h,a] → - ∀I,T,U. ⦃G,K.ⓑ{I}V⦄ ⊢ T :[h,a] U → - ∀p. ⦃G,K⦄ ⊢ ⓑ{p,I}V.T :[h,a] ⓑ{p,I}V.U. + ∀V. ❪G,K❫ ⊢ V ![h,a] → + ∀I,T,U. ❪G,K.ⓑ[I]V❫ ⊢ T :[h,a] U → + ∀p. ❪G,K❫ ⊢ ⓑ[p,I]V.T :[h,a] ⓑ[p,I]V.U. #h #a #G #K #V #HV #I #T #U #H #p elim (cnv_inv_cast … H) -H #X #HU #HT #HUX #HTX /3 width=5 by cnv_bind, cnv_cast, cpms_bind_dx/ @@ -42,7 +42,7 @@ qed. (* Basic_2A1: was by definition: nta_cast *) lemma nta_cast (h) (a) (G) (L): - ∀T,U. ⦃G,L⦄ ⊢ T :[h,a] U → ⦃G,L⦄ ⊢ ⓝU.T :[h,a] U. + ∀T,U. ❪G,L❫ ⊢ T :[h,a] U → ❪G,L❫ ⊢ ⓝU.T :[h,a] U. #h #a #G #L #T #U #H elim (cnv_inv_cast … H) #X #HU #HT #HUX #HTX /3 width=3 by cnv_cast, cpms_eps/ @@ -50,8 +50,8 @@ qed. (* Basic_1: was by definition: ty3_cast *) lemma nta_cast_old (h) (a) (G) (L): - ∀T0,T1. ⦃G,L⦄ ⊢ T0 :[h,a] T1 → - ∀T2. ⦃G,L⦄ ⊢ T1 :[h,a] T2 → ⦃G,L⦄ ⊢ ⓝT1.T0 :[h,a] ⓝT2.T1. + ∀T0,T1. ❪G,L❫ ⊢ T0 :[h,a] T1 → + ∀T2. ❪G,L❫ ⊢ T1 :[h,a] T2 → ❪G,L❫ ⊢ ⓝT1.T0 :[h,a] ⓝT2.T1. #h #a #G #L #T0 #T1 #H1 #T2 #H2 elim (cnv_inv_cast … H1) #X1 #_ #_ #HTX1 #HTX01 elim (cnv_inv_cast … H2) #X2 #_ #_ #HTX2 #HTX12 @@ -61,7 +61,7 @@ qed. (* Basic inversion lemmas ***************************************************) lemma nta_inv_gref_sn (h) (a) (G) (L): - ∀X2,l. ⦃G,L⦄ ⊢ §l :[h,a] X2 → ⊥. + ∀X2,l. ❪G,L❫ ⊢ §l :[h,a] X2 → ⊥. #h #a #G #L #X2 #l #H elim (cnv_inv_cast … H) -H #X #_ #H #_ #_ elim (cnv_inv_gref … H) @@ -70,14 +70,14 @@ qed-. (* Basic_forward lemmas *****************************************************) lemma nta_fwd_cnv_sn (h) (a) (G) (L): - ∀T,U. ⦃G,L⦄ ⊢ T :[h,a] U → ⦃G,L⦄ ⊢ T ![h,a]. + ∀T,U. ❪G,L❫ ⊢ T :[h,a] U → ❪G,L❫ ⊢ T ![h,a]. #h #a #G #L #T #U #H elim (cnv_inv_cast … H) -H #X #_ #HT #_ #_ // qed-. (* Note: this is nta_fwd_correct_cnv *) lemma nta_fwd_cnv_dx (h) (a) (G) (L): - ∀T,U. ⦃G,L⦄ ⊢ T :[h,a] U → ⦃G,L⦄ ⊢ U ![h,a]. + ∀T,U. ❪G,L❫ ⊢ T :[h,a] U → ❪G,L❫ ⊢ U ![h,a]. #h #a #G #L #T #U #H elim (cnv_inv_cast … H) -H #X #HU #_ #_ #_ // qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_aaa.ma index b0814238a..485daf488 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_aaa.ma @@ -21,7 +21,7 @@ include "basic_2/dynamic/nta.ma". (* Note: this means that no type is a universe *) lemma nta_fwd_aaa (h) (a) (G) (L): - ∀T,U. ⦃G,L⦄ ⊢ T :[h,a] U → ∃∃A. ⦃G,L⦄ ⊢ T ⁝ A & ⦃G,L⦄ ⊢ U ⁝ A. + ∀T,U. ❪G,L❫ ⊢ T :[h,a] U → ∃∃A. ❪G,L❫ ⊢ T ⁝ A & ❪G,L❫ ⊢ U ⁝ A. #h #a #G #L #T #U #H elim (cnv_fwd_aaa … H) -H #A #H elim (aaa_inv_cast … H) -H #HU #HT @@ -32,7 +32,7 @@ qed-. (* Basic_1: uses: ty3_predicative *) lemma nta_abst_predicative (h) (a) (p) (G) (L): - ∀W,T. ⦃G,L⦄ ⊢ ⓛ{p}W.T :[h,a] W → ⊥. + ∀W,T. ❪G,L❫ ⊢ ⓛ[p]W.T :[h,a] W → ⊥. #h #a #p #G #L #W #T #H elim (nta_fwd_aaa … H) -a -h #X #H #H1W elim (aaa_inv_abst … H) -p #B #A #H2W #_ #H destruct -T @@ -42,8 +42,8 @@ qed-. (* Basic_1: uses: ty3_repellent *) theorem nta_abst_repellent (h) (a) (p) (G) (K): - ∀W,T,U1. ⦃G,K⦄ ⊢ ⓛ{p}W.T :[h,a] U1 → - ∀U2. ⦃G,K.ⓛW⦄ ⊢ T :[h,a] U2 → ⇧*[1] U1 ≘ U2 → ⊥. + ∀W,T,U1. ❪G,K❫ ⊢ ⓛ[p]W.T :[h,a] U1 → + ∀U2. ❪G,K.ⓛW❫ ⊢ T :[h,a] U2 → ⇧*[1] U1 ≘ U2 → ⊥. #h #a #p #G #K #W #T #U1 #H1 #U2 #H2 #HU12 elim (nta_fwd_aaa … H2) -H2 #A2 #H2T #H2U2 elim (nta_fwd_aaa … H1) -H1 #X1 #H1 #HU1 diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_cpcs.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_cpcs.ma index d03ca146b..018ca9830 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_cpcs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_cpcs.ma @@ -20,8 +20,8 @@ include "basic_2/dynamic/nta.ma". (* Properties with r-equivalence for terms **********************************) lemma nta_conv_cnv (h) (a) (G) (L) (T): - ∀U1. ⦃G,L⦄ ⊢ T :[h,a] U1 → - ∀U2. ⦃G,L⦄ ⊢ U1 ⬌*[h] U2 → ⦃G,L⦄ ⊢ U2 ![h,a] → ⦃G,L⦄ ⊢ T :[h,a] U2. + ∀U1. ❪G,L❫ ⊢ T :[h,a] U1 → + ∀U2. ❪G,L❫ ⊢ U1 ⬌*[h] U2 → ❪G,L❫ ⊢ U2 ![h,a] → ❪G,L❫ ⊢ T :[h,a] U2. #h #a #G #L #T #U1 #H1 #U2 #HU12 #HU2 elim (cnv_inv_cast … H1) -H1 #X1 #HU1 #HT #HUX1 #HTX1 lapply (cpcs_cprs_conf … HUX1 … HU12) -U1 #H @@ -32,9 +32,9 @@ qed-. (* Basic_1: was by definition: ty3_conv *) (* Basic_2A1: was by definition: nta_conv ntaa_conv *) lemma nta_conv (h) (a) (G) (L) (T): - ∀U1. ⦃G,L⦄ ⊢ T :[h,a] U1 → - ∀U2. ⦃G,L⦄ ⊢ U1 ⬌*[h] U2 → - ∀W2. ⦃G,L⦄ ⊢ U2 :[h,a] W2 → ⦃G,L⦄ ⊢ T :[h,a] U2. + ∀U1. ❪G,L❫ ⊢ T :[h,a] U1 → + ∀U2. ❪G,L❫ ⊢ U1 ⬌*[h] U2 → + ∀W2. ❪G,L❫ ⊢ U2 :[h,a] W2 → ❪G,L❫ ⊢ T :[h,a] U2. #h #a #G #L #T #U1 #H1 #U2 #HU12 #W2 #H2 /3 width=3 by nta_conv_cnv, nta_fwd_cnv_sn/ qed-. @@ -44,8 +44,8 @@ qed-. (* Basic_1: was: ty3_gen_sort *) (* Basic_2A1: was: nta_inv_sort1 *) lemma nta_inv_sort_sn (h) (a) (G) (L) (X2): - ∀s. ⦃G,L⦄ ⊢ ⋆s :[h,a] X2 → - ∧∧ ⦃G,L⦄ ⊢ ⋆(⫯[h]s) ⬌*[h] X2 & ⦃G,L⦄ ⊢ X2 ![h,a]. + ∀s. ❪G,L❫ ⊢ ⋆s :[h,a] X2 → + ∧∧ ❪G,L❫ ⊢ ⋆(⫯[h]s) ⬌*[h] X2 & ❪G,L❫ ⊢ X2 ![h,a]. #h #a #G #L #X2 #s #H elim (cnv_inv_cast … H) -H #X1 #HX2 #_ #HX21 #H lapply (cpms_inv_sort1 … H) -H #H destruct @@ -53,15 +53,15 @@ lapply (cpms_inv_sort1 … H) -H #H destruct qed-. lemma nta_inv_ldec_sn_cnv (h) (a) (G) (K) (V): - ∀X2. ⦃G,K.ⓛV⦄ ⊢ #0 :[h,a] X2 → - ∃∃U. ⦃G,K⦄ ⊢ V ![h,a] & ⇧*[1] V ≘ U & ⦃G,K.ⓛV⦄ ⊢ U ⬌*[h] X2 & ⦃G,K.ⓛV⦄ ⊢ X2 ![h,a]. + ∀X2. ❪G,K.ⓛV❫ ⊢ #0 :[h,a] X2 → + ∃∃U. ❪G,K❫ ⊢ V ![h,a] & ⇧*[1] V ≘ U & ❪G,K.ⓛV❫ ⊢ U ⬌*[h] X2 & ❪G,K.ⓛV❫ ⊢ X2 ![h,a]. #h #a #G #Y #X #X2 #H elim (cnv_inv_cast … H) -H #X1 #HX2 #H1 #HX21 #H2 elim (cnv_inv_zero … H1) -H1 #Z #K #V #HV #H destruct elim (cpms_inv_ell_sn … H2) -H2 * [ #_ #H destruct | #m #W #HVW #HWX1 #H destruct - elim (lifts_total V (𝐔❴1❵)) #U #HVU + elim (lifts_total V (𝐔❨1❩)) #U #HVU lapply (cpms_lifts_bi … HVW (Ⓣ) … (K.ⓛV) … HVU … HWX1) -W [ /3 width=1 by drops_refl, drops_drop/ ] #HUX1 /3 width=5 by cprs_div, ex4_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_cpms.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_cpms.ma index f45290268..3e125f3f8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_cpms.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_cpms.ma @@ -23,8 +23,8 @@ include "basic_2/dynamic/nta.ma". (* Basic_2A1: uses by definition nta_appl ntaa_appl *) lemma nta_appl_abst (h) (a) (p) (G) (L): ∀n. ad a n → - ∀V,W. ⦃G,L⦄ ⊢ V :[h,a] W → - ∀T,U. ⦃G,L.ⓛW⦄ ⊢ T :[h,a] U → ⦃G,L⦄ ⊢ ⓐV.ⓛ{p}W.T :[h,a] ⓐV.ⓛ{p}W.U. + ∀V,W. ❪G,L❫ ⊢ V :[h,a] W → + ∀T,U. ❪G,L.ⓛW❫ ⊢ T :[h,a] U → ❪G,L❫ ⊢ ⓐV.ⓛ[p]W.T :[h,a] ⓐV.ⓛ[p]W.U. #h #a #p #G #L #n #Ha #V #W #H1 #T #U #H2 elim (cnv_inv_cast … H1) -H1 #X1 #HW #HV #HWX1 #HVX1 elim (cnv_inv_cast … H2) -H2 #X2 #HU #HT #HUX2 #HTX2 @@ -35,14 +35,14 @@ qed. (* Basic_2A1: was nta_appl_old *) lemma nta_appl (h) (a) (p) (G) (L): ∀n. 1 ≤ n → ad a n → - ∀V,W. ⦃G,L⦄ ⊢ V :[h,a] W → - ∀T,U. ⦃G,L⦄ ⊢ T :[h,a] ⓛ{p}W.U → ⦃G,L⦄ ⊢ ⓐV.T :[h,a] ⓐV.ⓛ{p}W.U. + ∀V,W. ❪G,L❫ ⊢ V :[h,a] W → + ∀T,U. ❪G,L❫ ⊢ T :[h,a] ⓛ[p]W.U → ❪G,L❫ ⊢ ⓐV.T :[h,a] ⓐV.ⓛ[p]W.U. #h #a #p #G #L #n #Hn #Ha #V #W #H1 #T #U #H2 elim (cnv_inv_cast … H1) -H1 #X1 #HW #HV #HWX1 #HVX1 elim (cnv_inv_cast … H2) -H2 #X2 #HU #HT #HUX2 #HTX2 elim (cpms_inv_abst_sn … HUX2) #W0 #U0 #HW0 #HU0 #H destruct elim (cprs_conf … HWX1 … HW0) -HW0 #X0 #HX10 #HWX0 -@(cnv_cast … (ⓐV.ⓛ{p}W0.U0)) (**) (* full auto too slow *) +@(cnv_cast … (ⓐV.ⓛ[p]W0.U0)) (**) (* full auto too slow *) [ /2 width=11 by cnv_appl_ge/ | /3 width=11 by cnv_appl_ge, cpms_cprs_trans/ | /2 width=1 by cpms_appl_dx/ @@ -53,8 +53,8 @@ qed. (* Inversion lemmas with advanced rt_computation for terms ******************) lemma nta_inv_abst_bi_cnv (h) (a) (p) (G) (K) (W): - ∀T,U. ⦃G,K⦄ ⊢ ⓛ{p}W.T :[h,a] ⓛ{p}W.U → - ∧∧ ⦃G,K⦄ ⊢ W ![h,a] & ⦃G,K.ⓛW⦄ ⊢ T :[h,a] U. + ∀T,U. ❪G,K❫ ⊢ ⓛ[p]W.T :[h,a] ⓛ[p]W.U → + ∧∧ ❪G,K❫ ⊢ W ![h,a] & ❪G,K.ⓛW❫ ⊢ T :[h,a] U. #h #a #p #G #K #W #T #U #H elim (cnv_inv_cast … H) -H #X #HWU #HWT #HUX #HTX elim (cnv_inv_bind … HWU) -HWU #HW #HU diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_drops.ma index e054072d2..5aea37112 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_drops.ma @@ -20,8 +20,8 @@ include "basic_2/dynamic/nta.ma". (* Advanced properties ******************************************************) lemma nta_ldef (h) (a) (G) (K): - ∀V,W. ⦃G,K⦄ ⊢ V :[h,a] W → - ∀U. ⇧*[1] W ≘ U → ⦃G,K.ⓓV⦄ ⊢ #0 :[h,a] U. + ∀V,W. ❪G,K❫ ⊢ V :[h,a] W → + ∀U. ⇧*[1] W ≘ U → ❪G,K.ⓓV❫ ⊢ #0 :[h,a] U. #h #a #G #K #V #W #H #U #HWU elim (cnv_inv_cast … H) -H #X #HW #HV #HWX #HVX lapply (cnv_lifts … HW (Ⓣ) … (K.ⓓV) … HWU) -HW @@ -32,23 +32,23 @@ elim (cpms_lifts_sn … HWX … (Ⓣ) … (K.ⓓV) … HWU) -W qed. lemma nta_ldec_cnv (h) (a) (G) (K): - ∀W. ⦃G,K⦄ ⊢ W ![h,a] → - ∀U. ⇧*[1] W ≘ U → ⦃G,K.ⓛW⦄ ⊢ #0 :[h,a] U. + ∀W. ❪G,K❫ ⊢ W ![h,a] → + ∀U. ⇧*[1] W ≘ U → ❪G,K.ⓛW❫ ⊢ #0 :[h,a] U. #h #a #G #K #W #HW #U #HWU lapply (cnv_lifts … HW (Ⓣ) … (K.ⓛW) … HWU) /3 width=5 by cnv_zero, cnv_cast, cpms_ell, drops_refl, drops_drop/ qed. lemma nta_lref (h) (a) (I) (G) (K): - ∀T,i. ⦃G,K⦄ ⊢ #i :[h,a] T → - ∀U. ⇧*[1] T ≘ U → ⦃G,K.ⓘ{I}⦄ ⊢ #(↑i) :[h,a] U. + ∀T,i. ❪G,K❫ ⊢ #i :[h,a] T → + ∀U. ⇧*[1] T ≘ U → ❪G,K.ⓘ[I]❫ ⊢ #(↑i) :[h,a] U. #h #a #I #G #K #T #i #H #U #HTU elim (cnv_inv_cast … H) -H #X #HT #Hi #HTX #H2 -lapply (cnv_lifts … HT (Ⓣ) … (K.ⓘ{I}) … HTU) -HT +lapply (cnv_lifts … HT (Ⓣ) … (K.ⓘ[I]) … HTU) -HT [ /3 width=3 by drops_refl, drops_drop/ ] #HU -lapply (cnv_lifts … Hi (Ⓣ) (𝐔❴1❵) (K.ⓘ{I}) ???) -Hi +lapply (cnv_lifts … Hi (Ⓣ) (𝐔❨1❩) (K.ⓘ[I]) ???) -Hi [4:|*: /3 width=3 by drops_refl, drops_drop/ ] #Hi -elim (cpms_lifts_sn … HTX … (Ⓣ) … (K.ⓘ{I}) … HTU) -T +elim (cpms_lifts_sn … HTX … (Ⓣ) … (K.ⓘ[I]) … HTU) -T [| /3 width=3 by drops_refl, drops_drop/ ] #XU #HXU #HUXU /3 width=5 by cnv_cast, cpms_lref/ qed. @@ -75,17 +75,17 @@ lemma nta_lifts_bi (h) (a) (G): d_liftable2_bi … lifts (nta a h G). (* Basic_1: was by definition: ty3_abbr *) (* Basic_2A1: was by definition: nta_ldef ntaa_ldef *) lemma nta_ldef_drops (h) (a) (G) (K) (L) (i): - ∀V,W. ⦃G,K⦄ ⊢ V :[h,a] W → - ∀U. ⇧*[↑i] W ≘ U → ⇩*[i] L ≘ K.ⓓV → ⦃G,L⦄ ⊢ #i :[h,a] U. + ∀V,W. ❪G,K❫ ⊢ V :[h,a] W → + ∀U. ⇧*[↑i] W ≘ U → ⇩*[i] L ≘ K.ⓓV → ❪G,L❫ ⊢ #i :[h,a] U. #h #a #G #K #L #i #V #W #HVW #U #HWU #HLK -elim (lifts_split_trans … HWU (𝐔❴1❵) (𝐔❴i❵)) [| // ] #X #HWX #HXU +elim (lifts_split_trans … HWU (𝐔❨1❩) (𝐔❨i❩)) [| // ] #X #HWX #HXU /3 width=9 by nta_lifts_bi, nta_ldef/ qed. lemma nta_ldec_drops_cnv (h) (a) (G) (K) (L) (i): - ∀W. ⦃G,K⦄ ⊢ W ![h,a] → - ∀U. ⇧*[↑i] W ≘ U → ⇩*[i] L ≘ K.ⓛW → ⦃G,L⦄ ⊢ #i :[h,a] U. + ∀W. ❪G,K❫ ⊢ W ![h,a] → + ∀U. ⇧*[↑i] W ≘ U → ⇩*[i] L ≘ K.ⓛW → ❪G,L❫ ⊢ #i :[h,a] U. #h #a #G #K #L #i #W #HW #U #HWU #HLK -elim (lifts_split_trans … HWU (𝐔❴1❵) (𝐔❴i❵)) [| // ] #X #HWX #HXU +elim (lifts_split_trans … HWU (𝐔❨1❩) (𝐔❨i❩)) [| // ] #X #HWX #HXU /3 width=9 by nta_lifts_bi, nta_ldec_cnv/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_eval.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_eval.ma index 3a8971fd8..1aafc9815 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_eval.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_eval.ma @@ -20,12 +20,12 @@ include "basic_2/dynamic/nta_preserve.ma". (* Properties with evaluations for rt-transition on terms *******************) lemma nta_typecheck_dec (h) (a) (G) (L): ac_props a → - ∀T,U. Decidable … (⦃G,L⦄ ⊢ T :[h,a] U). + ∀T,U. Decidable … (❪G,L❫ ⊢ T :[h,a] U). /2 width=1 by cnv_dec/ qed-. (* Basic_1: uses: ty3_inference *) lemma nta_inference_dec (h) (a) (G) (L) (T): ac_props a → - Decidable (∃U. ⦃G,L⦄ ⊢ T :[h,a] U). + Decidable (∃U. ❪G,L❫ ⊢ T :[h,a] U). #h #a #G #L #T #Ha elim (cnv_dec h … G L T Ha) -Ha #HT [ /3 width=1 by cnv_nta_sn, or_introl/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_fsb.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_fsb.ma index 4d4cebd5e..f3ae36256 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_fsb.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_fsb.ma @@ -24,8 +24,8 @@ include "basic_2/dynamic/nta.ma". (* Basic_1: uses: ty3_sn3 *) (* Basic_2A1: uses: nta_fwd_csn *) theorem nta_fwd_fsb (h) (a) (G) (L): - ∀T,U. ⦃G,L⦄ ⊢ T :[h,a] U → - ∧∧ ≥[h] 𝐒⦃G,L,T⦄ & ≥[h] 𝐒⦃G,L,U⦄. + ∀T,U. ❪G,L❫ ⊢ T :[h,a] U → + ∧∧ ≥[h] 𝐒❪G,L,T❫ & ≥[h] 𝐒❪G,L,U❫. #h #a #G #L #T #U #H elim (cnv_inv_cast … H) #X #HU #HT #_ #_ -X /3 width=2 by cnv_fwd_fsb, conj/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_ind.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_ind.ma index 325188276..74f376e7b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_ind.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_ind.ma @@ -24,29 +24,29 @@ include "basic_2/dynamic/nta_preserve.ma". lemma nta_ind_rest_cnv (h) (Q:relation4 …): (∀G,L,s. Q G L (⋆s) (⋆(⫯[h]s))) → (∀G,K,V,W,U. - ⦃G,K⦄ ⊢ V :[h,𝟐] W → ⇧*[1] W ≘ U → + ❪G,K❫ ⊢ V :[h,𝟐] W → ⇧*[1] W ≘ U → Q G K V W → Q G (K.ⓓV) (#0) U ) → - (∀G,K,W,U. ⦃G,K⦄ ⊢ W ![h,𝟐] → ⇧*[1] W ≘ U → Q G (K.ⓛW) (#0) U) → + (∀G,K,W,U. ❪G,K❫ ⊢ W ![h,𝟐] → ⇧*[1] W ≘ U → Q G (K.ⓛW) (#0) U) → (∀I,G,K,W,U,i. - ⦃G,K⦄ ⊢ #i :[h,𝟐] W → ⇧*[1] W ≘ U → - Q G K (#i) W → Q G (K.ⓘ{I}) (#↑i) U + ❪G,K❫ ⊢ #i :[h,𝟐] W → ⇧*[1] W ≘ U → + Q G K (#i) W → Q G (K.ⓘ[I]) (#↑i) U ) → (∀p,I,G,K,V,T,U. - ⦃G,K⦄ ⊢ V ![h,𝟐] → ⦃G,K.ⓑ{I}V⦄ ⊢ T :[h,𝟐] U → - Q G (K.ⓑ{I}V) T U → Q G K (ⓑ{p,I}V.T) (ⓑ{p,I}V.U) + ❪G,K❫ ⊢ V ![h,𝟐] → ❪G,K.ⓑ[I]V❫ ⊢ T :[h,𝟐] U → + Q G (K.ⓑ[I]V) T U → Q G K (ⓑ[p,I]V.T) (ⓑ[p,I]V.U) ) → (∀p,G,L,V,W,T,U. - ⦃G,L⦄ ⊢ V :[h,𝟐] W → ⦃G,L⦄ ⊢ T :[h,𝟐] ⓛ{p}W.U → - Q G L V W → Q G L T (ⓛ{p}W.U) → Q G L (ⓐV.T) (ⓐV.ⓛ{p}W.U) + ❪G,L❫ ⊢ V :[h,𝟐] W → ❪G,L❫ ⊢ T :[h,𝟐] ⓛ[p]W.U → + Q G L V W → Q G L T (ⓛ[p]W.U) → Q G L (ⓐV.T) (ⓐV.ⓛ[p]W.U) ) → - (∀G,L,T,U. ⦃G,L⦄ ⊢ T :[h,𝟐] U → Q G L T U → Q G L (ⓝU.T) U + (∀G,L,T,U. ❪G,L❫ ⊢ T :[h,𝟐] U → Q G L T U → Q G L (ⓝU.T) U ) → (∀G,L,T,U1,U2. - ⦃G,L⦄ ⊢ T :[h,𝟐] U1 → ⦃G,L⦄ ⊢ U1 ⬌*[h] U2 → ⦃G,L⦄ ⊢ U2 ![h,𝟐] → + ❪G,L❫ ⊢ T :[h,𝟐] U1 → ❪G,L❫ ⊢ U1 ⬌*[h] U2 → ❪G,L❫ ⊢ U2 ![h,𝟐] → Q G L T U1 → Q G L T U2 ) → - ∀G,L,T,U. ⦃G,L⦄ ⊢ T :[h,𝟐] U → Q G L T U. + ∀G,L,T,U. ❪G,L❫ ⊢ T :[h,𝟐] U → Q G L T U. #h #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #G #L #T @(fqup_wf_ind_eq (Ⓣ) … G L T) -G -L -T #G0 #L0 #T0 #IH #G #L * * [|||| * ] [ #s #HG #HL #HT #X #H destruct -IH @@ -81,33 +81,33 @@ qed-. lemma nta_ind_ext_cnv_mixed (h) (Q:relation4 …): (∀G,L,s. Q G L (⋆s) (⋆(⫯[h]s))) → (∀G,K,V,W,U. - ⦃G,K⦄ ⊢ V :[h,𝛚] W → ⇧*[1] W ≘ U → + ❪G,K❫ ⊢ V :[h,𝛚] W → ⇧*[1] W ≘ U → Q G K V W → Q G (K.ⓓV) (#0) U ) → - (∀G,K,W,U. ⦃G,K⦄ ⊢ W ![h,𝛚] → ⇧*[1] W ≘ U → Q G (K.ⓛW) (#0) U) → + (∀G,K,W,U. ❪G,K❫ ⊢ W ![h,𝛚] → ⇧*[1] W ≘ U → Q G (K.ⓛW) (#0) U) → (∀I,G,K,W,U,i. - ⦃G,K⦄ ⊢ #i :[h,𝛚] W → ⇧*[1] W ≘ U → - Q G K (#i) W → Q G (K.ⓘ{I}) (#↑i) U + ❪G,K❫ ⊢ #i :[h,𝛚] W → ⇧*[1] W ≘ U → + Q G K (#i) W → Q G (K.ⓘ[I]) (#↑i) U ) → (∀p,I,G,K,V,T,U. - ⦃G,K⦄ ⊢ V ![h,𝛚] → ⦃G,K.ⓑ{I}V⦄ ⊢ T :[h,𝛚] U → - Q G (K.ⓑ{I}V) T U → Q G K (ⓑ{p,I}V.T) (ⓑ{p,I}V.U) + ❪G,K❫ ⊢ V ![h,𝛚] → ❪G,K.ⓑ[I]V❫ ⊢ T :[h,𝛚] U → + Q G (K.ⓑ[I]V) T U → Q G K (ⓑ[p,I]V.T) (ⓑ[p,I]V.U) ) → (∀p,G,L,V,W,T,U. - ⦃G,L⦄ ⊢ V :[h,𝛚] W → ⦃G,L⦄ ⊢ T :[h,𝛚] ⓛ{p}W.U → - Q G L V W → Q G L T (ⓛ{p}W.U) → Q G L (ⓐV.T) (ⓐV.ⓛ{p}W.U) + ❪G,L❫ ⊢ V :[h,𝛚] W → ❪G,L❫ ⊢ T :[h,𝛚] ⓛ[p]W.U → + Q G L V W → Q G L T (ⓛ[p]W.U) → Q G L (ⓐV.T) (ⓐV.ⓛ[p]W.U) ) → (∀G,L,V,T,U. - ⦃G,L⦄ ⊢ T :[h,𝛚] U → ⦃G,L⦄ ⊢ ⓐV.U ![h,𝛚] → + ❪G,L❫ ⊢ T :[h,𝛚] U → ❪G,L❫ ⊢ ⓐV.U ![h,𝛚] → Q G L T U → Q G L (ⓐV.T) (ⓐV.U) ) → - (∀G,L,T,U. ⦃G,L⦄ ⊢ T :[h,𝛚] U → Q G L T U → Q G L (ⓝU.T) U + (∀G,L,T,U. ❪G,L❫ ⊢ T :[h,𝛚] U → Q G L T U → Q G L (ⓝU.T) U ) → (∀G,L,T,U1,U2. - ⦃G,L⦄ ⊢ T :[h,𝛚] U1 → ⦃G,L⦄ ⊢ U1 ⬌*[h] U2 → ⦃G,L⦄ ⊢ U2 ![h,𝛚] → + ❪G,L❫ ⊢ T :[h,𝛚] U1 → ❪G,L❫ ⊢ U1 ⬌*[h] U2 → ❪G,L❫ ⊢ U2 ![h,𝛚] → Q G L T U1 → Q G L T U2 ) → - ∀G,L,T,U. ⦃G,L⦄ ⊢ T :[h,𝛚] U → Q G L T U. + ∀G,L,T,U. ❪G,L❫ ⊢ T :[h,𝛚] U → Q G L T U. #h #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #G #L #T @(fqup_wf_ind_eq (Ⓣ) … G L T) -G -L -T #G0 #L0 #T0 #IH #G #L * * [|||| * ] [ #s #HG #HL #HT #X #H destruct -IH @@ -146,33 +146,33 @@ qed-. lemma nta_ind_ext_cnv (h) (Q:relation4 …): (∀G,L,s. Q G L (⋆s) (⋆(⫯[h]s))) → (∀G,K,V,W,U. - ⦃G,K⦄ ⊢ V :[h,𝛚] W → ⇧*[1] W ≘ U → + ❪G,K❫ ⊢ V :[h,𝛚] W → ⇧*[1] W ≘ U → Q G K V W → Q G (K.ⓓV) (#0) U ) → - (∀G,K,W,U. ⦃G,K⦄ ⊢ W ![h,𝛚] → ⇧*[1] W ≘ U → Q G (K.ⓛW) (#0) U) → + (∀G,K,W,U. ❪G,K❫ ⊢ W ![h,𝛚] → ⇧*[1] W ≘ U → Q G (K.ⓛW) (#0) U) → (∀I,G,K,W,U,i. - ⦃G,K⦄ ⊢ #i :[h,𝛚] W → ⇧*[1] W ≘ U → - Q G K (#i) W → Q G (K.ⓘ{I}) (#↑i) U + ❪G,K❫ ⊢ #i :[h,𝛚] W → ⇧*[1] W ≘ U → + Q G K (#i) W → Q G (K.ⓘ[I]) (#↑i) U ) → (∀p,I,G,K,V,T,U. - ⦃G,K⦄ ⊢ V ![h,𝛚] → ⦃G,K.ⓑ{I}V⦄ ⊢ T :[h,𝛚] U → - Q G (K.ⓑ{I}V) T U → Q G K (ⓑ{p,I}V.T) (ⓑ{p,I}V.U) + ❪G,K❫ ⊢ V ![h,𝛚] → ❪G,K.ⓑ[I]V❫ ⊢ T :[h,𝛚] U → + Q G (K.ⓑ[I]V) T U → Q G K (ⓑ[p,I]V.T) (ⓑ[p,I]V.U) ) → (∀p,G,K,V,W,T,U. - ⦃G,K⦄ ⊢ V :[h,𝛚] W → ⦃G,K.ⓛW⦄ ⊢ T :[h,𝛚] U → - Q G K V W → Q G (K.ⓛW) T U → Q G K (ⓐV.ⓛ{p}W.T) (ⓐV.ⓛ{p}W.U) + ❪G,K❫ ⊢ V :[h,𝛚] W → ❪G,K.ⓛW❫ ⊢ T :[h,𝛚] U → + Q G K V W → Q G (K.ⓛW) T U → Q G K (ⓐV.ⓛ[p]W.T) (ⓐV.ⓛ[p]W.U) ) → (∀G,L,V,T,U. - ⦃G,L⦄ ⊢ T :[h,𝛚] U → ⦃G,L⦄ ⊢ ⓐV.U ![h,𝛚] → + ❪G,L❫ ⊢ T :[h,𝛚] U → ❪G,L❫ ⊢ ⓐV.U ![h,𝛚] → Q G L T U → Q G L (ⓐV.T) (ⓐV.U) ) → - (∀G,L,T,U. ⦃G,L⦄ ⊢ T :[h,𝛚] U → Q G L T U → Q G L (ⓝU.T) U + (∀G,L,T,U. ❪G,L❫ ⊢ T :[h,𝛚] U → Q G L T U → Q G L (ⓝU.T) U ) → (∀G,L,T,U1,U2. - ⦃G,L⦄ ⊢ T :[h,𝛚] U1 → ⦃G,L⦄ ⊢ U1 ⬌*[h] U2 → ⦃G,L⦄ ⊢ U2 ![h,𝛚] → + ❪G,L❫ ⊢ T :[h,𝛚] U1 → ❪G,L❫ ⊢ U1 ⬌*[h] U2 → ❪G,L❫ ⊢ U2 ![h,𝛚] → Q G L T U1 → Q G L T U2 ) → - ∀G,L,T,U. ⦃G,L⦄ ⊢ T :[h,𝛚] U → Q G L T U. + ∀G,L,T,U. ❪G,L❫ ⊢ T :[h,𝛚] U → Q G L T U. #h #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #G #L #T #U #H @(nta_ind_ext_cnv_mixed … IH1 IH2 IH3 IH4 IH5 … IH7 IH8 IH9 … H) -G -L -T -U -IH1 -IH2 -IH3 -IH4 -IH5 -IH6 -IH8 -IH9 #p #G #L #V #W #T #U #HVW #HTU #_ #IHTU diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_preserve.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_preserve.ma index 6de11fe16..eb8d953a2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_preserve.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_preserve.ma @@ -22,11 +22,11 @@ include "basic_2/dynamic/nta.ma". (* Properties based on preservation *****************************************) lemma cnv_cpms_nta (h) (a) (G) (L): - ∀T. ⦃G,L⦄ ⊢ T ![h,a] → ∀U.⦃G,L⦄ ⊢ T ➡*[1,h] U → ⦃G,L⦄ ⊢ T :[h,a] U. + ∀T. ❪G,L❫ ⊢ T ![h,a] → ∀U.❪G,L❫ ⊢ T ➡*[1,h] U → ❪G,L❫ ⊢ T :[h,a] U. /3 width=4 by cnv_cast, cnv_cpms_trans/ qed. lemma cnv_nta_sn (h) (a) (G) (L): - ∀T. ⦃G,L⦄ ⊢ T ![h,a] → ∃U. ⦃G,L⦄ ⊢ T :[h,a] U. + ∀T. ❪G,L❫ ⊢ T ![h,a] → ∃U. ❪G,L❫ ⊢ T :[h,a] U. #h #a #G #L #T #HT elim (cnv_fwd_cpm_SO … HT) #U #HTU /4 width=2 by cnv_cpms_nta, cpm_cpms, ex_intro/ @@ -34,18 +34,18 @@ qed-. (* Basic_1: was: ty3_typecheck *) lemma nta_typecheck (h) (a) (G) (L): - ∀T,U. ⦃G,L⦄ ⊢ T :[h,a] U → ∃T0. ⦃G,L⦄ ⊢ ⓝU.T :[h,a] T0. + ∀T,U. ❪G,L❫ ⊢ T :[h,a] U → ∃T0. ❪G,L❫ ⊢ ⓝU.T :[h,a] T0. /3 width=1 by cnv_cast, cnv_nta_sn/ qed-. (* Basic_1: was: ty3_correct *) (* Basic_2A1: was: ntaa_fwd_correct *) lemma nta_fwd_correct (h) (a) (G) (L): - ∀T,U. ⦃G,L⦄ ⊢ T :[h,a] U → ∃T0. ⦃G,L⦄ ⊢ U :[h,a] T0. + ∀T,U. ❪G,L❫ ⊢ T :[h,a] U → ∃T0. ❪G,L❫ ⊢ U :[h,a] T0. /3 width=2 by nta_fwd_cnv_dx, cnv_nta_sn/ qed-. lemma nta_pure_cnv (h) (G) (L): - ∀T,U. ⦃G,L⦄ ⊢ T :[h,𝛚] U → - ∀V. ⦃G,L⦄ ⊢ ⓐV.U ![h,𝛚] → ⦃G,L⦄ ⊢ ⓐV.T :[h,𝛚] ⓐV.U. + ∀T,U. ❪G,L❫ ⊢ T :[h,𝛚] U → + ∀V. ❪G,L❫ ⊢ ⓐV.U ![h,𝛚] → ❪G,L❫ ⊢ ⓐV.T :[h,𝛚] ⓐV.U. #h #G #L #T #U #H1 #V #H2 elim (cnv_inv_cast … H1) -H1 #X0 #HU #HT #HUX0 #HTX0 elim (cnv_inv_appl … H2) #n #p #X1 #X2 #_ #HV #_ #HVX1 #HUX2 @@ -58,16 +58,16 @@ qed. (* Basic_1: uses: ty3_sred_wcpr0_pr0 *) lemma nta_cpr_conf_lpr (h) (a) (G): - ∀L1,T1,U. ⦃G,L1⦄ ⊢ T1 :[h,a] U → ∀T2. ⦃G,L1⦄ ⊢ T1 ➡[h] T2 → - ∀L2. ⦃G,L1⦄ ⊢ ➡[h] L2 → ⦃G,L2⦄ ⊢ T2 :[h,a] U. + ∀L1,T1,U. ❪G,L1❫ ⊢ T1 :[h,a] U → ∀T2. ❪G,L1❫ ⊢ T1 ➡[h] T2 → + ∀L2. ❪G,L1❫ ⊢ ➡[h] L2 → ❪G,L2❫ ⊢ T2 :[h,a] U. #h #a #G #L1 #T1 #U #H #T2 #HT12 #L2 #HL12 /3 width=6 by cnv_cpm_trans_lpr, cpm_cast/ qed-. (* Basic_1: uses: ty3_sred_pr2 ty3_sred_pr0 *) lemma nta_cpr_conf (h) (a) (G) (L): - ∀T1,U. ⦃G,L⦄ ⊢ T1 :[h,a] U → - ∀T2. ⦃G,L⦄ ⊢ T1 ➡[h] T2 → ⦃G,L⦄ ⊢ T2 :[h,a] U. + ∀T1,U. ❪G,L❫ ⊢ T1 :[h,a] U → + ∀T2. ❪G,L❫ ⊢ T1 ➡[h] T2 → ❪G,L❫ ⊢ T2 :[h,a] U. #h #a #G #L #T1 #U #H #T2 #HT12 /3 width=6 by cnv_cpm_trans, cpm_cast/ qed-. @@ -75,24 +75,24 @@ qed-. (* Note: this is the preservation property *) (* Basic_1: uses: ty3_sred_pr3 ty3_sred_pr1 *) lemma nta_cprs_conf (h) (a) (G) (L): - ∀T1,U. ⦃G,L⦄ ⊢ T1 :[h,a] U → - ∀T2. ⦃G,L⦄ ⊢ T1 ➡*[h] T2 → ⦃G,L⦄ ⊢ T2 :[h,a] U. + ∀T1,U. ❪G,L❫ ⊢ T1 :[h,a] U → + ∀T2. ❪G,L❫ ⊢ T1 ➡*[h] T2 → ❪G,L❫ ⊢ T2 :[h,a] U. #h #a #G #L #T1 #U #H #T2 #HT12 /3 width=6 by cnv_cpms_trans, cpms_cast/ qed-. (* Basic_1: uses: ty3_cred_pr2 *) lemma nta_lpr_conf (h) (a) (G): - ∀L1,T,U. ⦃G,L1⦄ ⊢ T :[h,a] U → - ∀L2. ⦃G,L1⦄ ⊢ ➡[h] L2 → ⦃G,L2⦄ ⊢ T :[h,a] U. + ∀L1,T,U. ❪G,L1❫ ⊢ T :[h,a] U → + ∀L2. ❪G,L1❫ ⊢ ➡[h] L2 → ❪G,L2❫ ⊢ T :[h,a] U. #h #a #G #L1 #T #U #HTU #L2 #HL12 /2 width=3 by cnv_lpr_trans/ qed-. (* Basic_1: uses: ty3_cred_pr3 *) lemma nta_lprs_conf (h) (a) (G): - ∀L1,T,U. ⦃G,L1⦄ ⊢ T :[h,a] U → - ∀L2. ⦃G,L1⦄ ⊢ ➡*[h] L2 → ⦃G,L2⦄ ⊢ T :[h,a] U. + ∀L1,T,U. ❪G,L1❫ ⊢ T :[h,a] U → + ∀L2. ❪G,L1❫ ⊢ ➡*[h] L2 → ❪G,L2❫ ⊢ T :[h,a] U. #h #a #G #L1 #T #U #HTU #L2 #HL12 /2 width=3 by cnv_lprs_trans/ qed-. @@ -100,8 +100,8 @@ qed-. (* Inversion lemmas based on preservation ***********************************) lemma nta_inv_ldef_sn (h) (a) (G) (K) (V): - ∀X2. ⦃G,K.ⓓV⦄ ⊢ #0 :[h,a] X2 → - ∃∃W,U. ⦃G,K⦄ ⊢ V :[h,a] W & ⇧*[1] W ≘ U & ⦃G,K.ⓓV⦄ ⊢ U ⬌*[h] X2 & ⦃G,K.ⓓV⦄ ⊢ X2 ![h,a]. + ∀X2. ❪G,K.ⓓV❫ ⊢ #0 :[h,a] X2 → + ∃∃W,U. ❪G,K❫ ⊢ V :[h,a] W & ⇧*[1] W ≘ U & ❪G,K.ⓓV❫ ⊢ U ⬌*[h] X2 & ❪G,K.ⓓV❫ ⊢ X2 ![h,a]. #h #a #G #Y #X #X2 #H elim (cnv_inv_cast … H) -H #X1 #HX2 #H1 #HX21 #H2 elim (cnv_inv_zero … H1) -H1 #Z #K #V #HV #H destruct @@ -113,8 +113,8 @@ elim (cpms_inv_delta_sn … H2) -H2 * qed-. lemma nta_inv_lref_sn (h) (a) (G) (L): - ∀X2,i. ⦃G,L⦄ ⊢ #↑i :[h,a] X2 → - ∃∃I,K,T2,U2. ⦃G,K⦄ ⊢ #i :[h,a] T2 & ⇧*[1] T2 ≘ U2 & ⦃G,K.ⓘ{I}⦄ ⊢ U2 ⬌*[h] X2 & ⦃G,K.ⓘ{I}⦄ ⊢ X2 ![h,a] & L = K.ⓘ{I}. + ∀X2,i. ❪G,L❫ ⊢ #↑i :[h,a] X2 → + ∃∃I,K,T2,U2. ❪G,K❫ ⊢ #i :[h,a] T2 & ⇧*[1] T2 ≘ U2 & ❪G,K.ⓘ[I]❫ ⊢ U2 ⬌*[h] X2 & ❪G,K.ⓘ[I]❫ ⊢ X2 ![h,a] & L = K.ⓘ[I]. #h #a #G #L #X2 #i #H elim (cnv_inv_cast … H) -H #X1 #HX2 #H1 #HX21 #H2 elim (cnv_inv_lref … H1) -H1 #I #K #Hi #H destruct @@ -126,9 +126,9 @@ elim (cpms_inv_lref_sn … H2) -H2 * qed-. lemma nta_inv_lref_sn_drops_cnv (h) (a) (G) (L): - ∀X2,i. ⦃G,L⦄ ⊢ #i :[h,a] X2 → - ∨∨ ∃∃K,V,W,U. ⇩*[i] L ≘ K.ⓓV & ⦃G,K⦄ ⊢ V :[h,a] W & ⇧*[↑i] W ≘ U & ⦃G,L⦄ ⊢ U ⬌*[h] X2 & ⦃G,L⦄ ⊢ X2 ![h,a] - | ∃∃K,W,U. ⇩*[i] L ≘ K. ⓛW & ⦃G,K⦄ ⊢ W ![h,a] & ⇧*[↑i] W ≘ U & ⦃G,L⦄ ⊢ U ⬌*[h] X2 & ⦃G,L⦄ ⊢ X2 ![h,a]. + ∀X2,i. ❪G,L❫ ⊢ #i :[h,a] X2 → + ∨∨ ∃∃K,V,W,U. ⇩*[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V :[h,a] W & ⇧*[↑i] W ≘ U & ❪G,L❫ ⊢ U ⬌*[h] X2 & ❪G,L❫ ⊢ X2 ![h,a] + | ∃∃K,W,U. ⇩*[i] L ≘ K. ⓛW & ❪G,K❫ ⊢ W ![h,a] & ⇧*[↑i] W ≘ U & ❪G,L❫ ⊢ U ⬌*[h] X2 & ❪G,L❫ ⊢ X2 ![h,a]. #h #a #G #L #X2 #i #H elim (cnv_inv_cast … H) -H #X1 #HX2 #H1 #HX21 #H2 elim (cnv_inv_lref_drops … H1) -H1 #I #K #V #HLK #HV @@ -139,7 +139,7 @@ elim (cpms_inv_lref1_drops … H2) -H2 * /4 width=8 by cnv_cpms_nta, cpcs_cprs_sn, ex5_4_intro, or_introl/ | #n #Y #X #U #H #HVU #HUX1 #H0 destruct lapply (drops_mono … H … HLK) -H #H destruct - elim (lifts_total V (𝐔❴↑i❵)) #W #HVW + elim (lifts_total V (𝐔❨↑i❩)) #W #HVW lapply (cpms_lifts_bi … HVU (Ⓣ) … L … HVW … HUX1) -U [ /2 width=2 by drops_isuni_fwd_drop2/ ] #HWX1 /4 width=9 by cprs_div, ex5_3_intro, or_intror/ @@ -147,8 +147,8 @@ elim (cpms_inv_lref1_drops … H2) -H2 * qed-. lemma nta_inv_bind_sn_cnv (h) (a) (p) (I) (G) (K) (X2): - ∀V,T. ⦃G,K⦄ ⊢ ⓑ{p,I}V.T :[h,a] X2 → - ∃∃U. ⦃G,K⦄ ⊢ V ![h,a] & ⦃G,K.ⓑ{I}V⦄ ⊢ T :[h,a] U & ⦃G,K⦄ ⊢ ⓑ{p,I}V.U ⬌*[h] X2 & ⦃G,K⦄ ⊢ X2 ![h,a]. + ∀V,T. ❪G,K❫ ⊢ ⓑ[p,I]V.T :[h,a] X2 → + ∃∃U. ❪G,K❫ ⊢ V ![h,a] & ❪G,K.ⓑ[I]V❫ ⊢ T :[h,a] U & ❪G,K❫ ⊢ ⓑ[p,I]V.U ⬌*[h] X2 & ❪G,K❫ ⊢ X2 ![h,a]. #h #a #p * #G #K #X2 #V #T #H elim (cnv_inv_cast … H) -H #X1 #HX2 #H1 #HX21 #H2 elim (cnv_inv_bind … H1) -H1 #HV #HT @@ -165,8 +165,8 @@ qed-. (* Basic_1: uses: ty3_gen_appl *) lemma nta_inv_appl_sn (h) (G) (L) (X2): - ∀V,T. ⦃G,L⦄ ⊢ ⓐV.T :[h,𝟐] X2 → - ∃∃p,W,U. ⦃G,L⦄ ⊢ V :[h,𝟐] W & ⦃G,L⦄ ⊢ T :[h,𝟐] ⓛ{p}W.U & ⦃G,L⦄ ⊢ ⓐV.ⓛ{p}W.U ⬌*[h] X2 & ⦃G,L⦄ ⊢ X2 ![h,𝟐]. + ∀V,T. ❪G,L❫ ⊢ ⓐV.T :[h,𝟐] X2 → + ∃∃p,W,U. ❪G,L❫ ⊢ V :[h,𝟐] W & ❪G,L❫ ⊢ T :[h,𝟐] ⓛ[p]W.U & ❪G,L❫ ⊢ ⓐV.ⓛ[p]W.U ⬌*[h] X2 & ❪G,L❫ ⊢ X2 ![h,𝟐]. #h #G #L #X2 #V #T #H elim (cnv_inv_cast … H) -H #X #HX2 #H1 #HX2 #H2 elim (cnv_inv_appl … H1) #n #p #W #U #H [ break term 46 h ] ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )" +notation "hvbox( ❪ term 46 G1, break term 46 L1, break term 46 T1 ❫ >[ break term 46 h ] ❪ break term 46 G2, break term 46 L2, break term 46 T2 ❫ )" non associative with precedence 45 for @{ 'PRedSubTyStarProper $h $G1 $L1 $T1 $G2 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystrong_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystrong_4.ma index d36f44f40..877f6941a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystrong_4.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predsubtystrong_4.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ≥ [ term 46 h ] 𝐒 ⦃ break term 46 G, break term 46 L, break term 46 T ⦄ )" +notation "hvbox( ≥[ term 46 h ] 𝐒❪ break term 46 G, break term 46 L, break term 46 T ❫ )" non associative with precedence 45 for @{ 'PRedSubTyStrong $h $G $L $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_5.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_5.ma index 8ec99d4db..b2ab29aeb 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_5.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_5.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⦃ term 46 G, break term 46 L ⦄ ⊢ break term 46 T1 ⬈ [ break term 46 h ] break term 46 T2 )" +notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ⬈[ break term 46 h ] break term 46 T2 )" non associative with precedence 45 for @{ 'PRedTy $h $G $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_7.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_7.ma index 40f9f3a53..c59a40dcb 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_7.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predty_7.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⦃ term 46 G, break term 46 L ⦄ ⊢ break term 46 T1 ⬈ [ break term 46 Rt, break term 46 c, break term 46 h ] break term 46 T2 )" +notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ⬈[ break term 46 Rt, break term 46 c, break term 46 h ] break term 46 T2 )" non associative with precedence 45 for @{ 'PRedTy $Rt $c $h $G $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtynormal_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtynormal_4.ma index 21c22eee7..ebcc11f45 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtynormal_4.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtynormal_4.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⦃ term 46 G, break term 46 L ⦄ ⊢ ⬈ [ break term 46 h ] 𝐍 ⦃ break term 46 T ⦄ )" +notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ ⬈[ break term 46 h ] 𝐍❪ break term 46 T ❫ )" non associative with precedence 45 for @{ 'PRedTyNormal $h $G $L $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_4.ma index 5c028b6d2..f900505ea 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_4.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_4.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⦃ term 46 G, break term 46 L1 ⦄ ⊢ ⬈[ break term 46 h ] break term 46 L2 )" +notation "hvbox( ❪ term 46 G, break term 46 L1 ❫ ⊢ ⬈[ break term 46 h ] break term 46 L2 )" non associative with precedence 45 for @{ 'PRedTySn $h $G $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_5.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_5.ma index 0ba8150f1..fdcc1a4fc 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_5.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysn_5.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⦃ term 46 G, break term 46 L1 ⦄ ⊢ ⬈ [ break term 46 h, break term 46 T ] break term 46 L2 )" +notation "hvbox( ❪ term 46 G, break term 46 L1 ❫ ⊢ ⬈[ break term 46 h, break term 46 T ] break term 46 L2 )" non associative with precedence 45 for @{ 'PRedTySn $h $T $G $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstar_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstar_4.ma index b6e63229e..5cb97d096 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstar_4.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstar_4.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⦃ term 46 G, break term 46 L1 ⦄ ⊢ ⬈*[ break term 46 h ] break term 46 L2 )" +notation "hvbox( ❪ term 46 G, break term 46 L1 ❫ ⊢ ⬈*[ break term 46 h ] break term 46 L2 )" non associative with precedence 45 for @{ 'PRedTySnStar $h $G $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstrong_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstrong_4.ma index 6602630db..790d5fd55 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstrong_4.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtysnstrong_4.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( G ⊢ ⬈ * [ break term 46 h, break term 46 T ] 𝐒 ⦃ break term 46 L ⦄ )" +notation "hvbox( G ⊢ ⬈*[ break term 46 h, break term 46 T ] 𝐒❪ break term 46 L ❫ )" non associative with precedence 45 for @{ 'PRedTySNStrong $h $T $G $L }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystar_5.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystar_5.ma index 347c93284..217b589b1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystar_5.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystar_5.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⦃ term 46 G, break term 46 L ⦄ ⊢ break term 46 T1 ⬈ * [ break term 46 h ] break term 46 T2 )" +notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ⬈*[ break term 46 h ] break term 46 T2 )" non associative with precedence 45 for @{ 'PRedTyStar $h $G $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystrong_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystrong_4.ma index 34fb89885..97ad5aab0 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystrong_4.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/predtystrong_4.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⦃ term 46 G, break term 46 L ⦄ ⊢ ⬈ * [ break term 46 h] 𝐒 ⦃ break term 46 T ⦄ )" +notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ ⬈*[ break term 46 h] 𝐒❪ break term 46 T ❫ )" non associative with precedence 45 for @{ 'PRedTyStrong $h $G $L $T }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pty_6.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pty_6.ma index 0fb47e92f..906402cd0 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pty_6.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/pty_6.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⦃ term 46 G, break term 46 L ⦄ ⊢ break term 46 T1 ⬆[ break term 46 h, break term 46 n ] break term 46 T2 )" +notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ⬆[ break term 46 h, break term 46 n ] break term 46 T2 )" non associative with precedence 45 for @{ 'PTy $h $n $G $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/ptystar_6.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/ptystar_6.ma index 884303830..36cd86a80 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/ptystar_6.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/ptystar_6.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⦃ term 46 G, break term 46 L ⦄ ⊢ break term 46 T1 ⬆*[ break term 46 h, break term 46 n ] break term 46 T2 )" +notation "hvbox( ❪ term 46 G, break term 46 L ❫ ⊢ break term 46 T1 ⬆*[ break term 46 h, break term 46 n ] break term 46 T2 )" non associative with precedence 45 for @{ 'PTyStar $h $n $G $L $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw.ma index 45b655229..a02ea47df 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw.ma @@ -19,7 +19,7 @@ include "basic_2/rt_computation/cpms.ma". (* NORMAL TERMS FOR T-UNUNBOUND WHD RT-TRANSITION ***************************) definition cnuw (h) (G) (L): predicate term ≝ - λT1. ∀n,T2. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 → T1 ≅ T2. + λT1. ∀n,T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → T1 ≅ T2. interpretation "normality for t-unbound weak head context-sensitive parallel rt-transition (term)" @@ -27,31 +27,31 @@ interpretation (* Basic properties *********************************************************) -lemma cnuw_sort (h) (G) (L): ∀s. ⦃G,L⦄ ⊢ ➡𝐍𝐖*[h] ⋆s. +lemma cnuw_sort (h) (G) (L): ∀s. ❪G,L❫ ⊢ ➡𝐍𝐖*[h] ⋆s. #h #G #L #s1 #n #X #H lapply (cpms_inv_sort1 … H) -H #H destruct // qed. -lemma cnuw_ctop (h) (G): ∀i. ⦃G,⋆⦄ ⊢ ➡𝐍𝐖*[h] #i. +lemma cnuw_ctop (h) (G): ∀i. ❪G,⋆❫ ⊢ ➡𝐍𝐖*[h] #i. #h #G #i #n #X #H elim (cpms_inv_lref1_ctop … H) -H #H #_ destruct // qed. -lemma cnuw_zero_unit (h) (G) (L): ∀I. ⦃G,L.ⓤ{I}⦄ ⊢ ➡𝐍𝐖*[h] #0. +lemma cnuw_zero_unit (h) (G) (L): ∀I. ❪G,L.ⓤ[I]❫ ⊢ ➡𝐍𝐖*[h] #0. #h #G #L #I #n #X #H elim (cpms_inv_zero1_unit … H) -H #H #_ destruct // qed. -lemma cnuw_gref (h) (G) (L): ∀l. ⦃G,L⦄ ⊢ ➡𝐍𝐖*[h] §l. +lemma cnuw_gref (h) (G) (L): ∀l. ❪G,L❫ ⊢ ➡𝐍𝐖*[h] §l. #h #G #L #l1 #n #X #H elim (cpms_inv_gref1 … H) -H #H #_ destruct // qed. (* Basic_inversion lemmas ***************************************************) -lemma cnuw_inv_zero_pair (h) (I) (G) (L): ∀V. ⦃G,L.ⓑ{I}V⦄ ⊢ ➡𝐍𝐖*[h] #0 → ⊥. +lemma cnuw_inv_zero_pair (h) (I) (G) (L): ∀V. ❪G,L.ⓑ[I]V❫ ⊢ ➡𝐍𝐖*[h] #0 → ⊥. #h * #G #L #V #H -elim (lifts_total V (𝐔❴1❵)) #W #HVW +elim (lifts_total V (𝐔❨1❩)) #W #HVW [ lapply (H 0 W ?) [ /3 width=3 by cpm_cpms, cpm_delta/ ] | lapply (H 1 W ?) [ /3 width=3 by cpm_cpms, cpm_ell/ ] ] -H #HW @@ -60,7 +60,7 @@ lapply (tweq_inv_lref_sn … HW) -HW #H destruct qed-. lemma cnuw_inv_cast (h) (G) (L): - ∀V,T. ⦃G,L⦄ ⊢ ➡𝐍𝐖*[h] ⓝV.T → ⊥. + ∀V,T. ❪G,L❫ ⊢ ➡𝐍𝐖*[h] ⓝV.T → ⊥. #h #G #L #V #T #H lapply (H 0 T ?) [ /3 width=1 by cpm_cpms, cpm_eps/ ] -H #H /2 width=3 by tweq_inv_cast_xy_y/ @@ -69,7 +69,7 @@ qed-. (* Basic forward lemmas *****************************************************) lemma cnuw_fwd_appl (h) (G) (L): - ∀V,T. ⦃G,L⦄ ⊢ ➡𝐍𝐖*[h] ⓐV.T → ⦃G,L⦄ ⊢ ➡𝐍𝐖*[h] T. + ∀V,T. ❪G,L❫ ⊢ ➡𝐍𝐖*[h] ⓐV.T → ❪G,L❫ ⊢ ➡𝐍𝐖*[h] T. #h #G #L #V #T1 #HT1 #n #T2 #HT12 lapply (HT1 n (ⓐV.T2) ?) -HT1 /2 width=3 by cpms_appl_dx, tweq_inv_appl_bi/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw_cnuw.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw_cnuw.ma index 6cde759d9..76c7cb964 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw_cnuw.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw_cnuw.ma @@ -22,7 +22,7 @@ include "basic_2/rt_computation/lprs_cpms.ma". (* Advanced inversion lemmas ************************************************) lemma cnuw_inv_abbr_pos (h) (G) (L): - ∀V,T. ⦃G,L⦄ ⊢ ➡𝐍𝐖*[h] +ⓓV.T → ⊥. + ∀V,T. ❪G,L❫ ⊢ ➡𝐍𝐖*[h] +ⓓV.T → ⊥. #h #G #L #V #T1 #H elim (cprs_abbr_pos_twneq h G L V T1) #T2 #HT12 #HnT12 /3 width=2 by/ @@ -30,7 +30,7 @@ qed-. (* Advanced properties ******************************************************) -lemma cnuw_abbr_neg (h) (G) (L): ∀V,T. ⦃G,L⦄ ⊢ ➡𝐍𝐖*[h] -ⓓV.T. +lemma cnuw_abbr_neg (h) (G) (L): ∀V,T. ❪G,L❫ ⊢ ➡𝐍𝐖*[h] -ⓓV.T. #h #G #L #V1 #T1 #n #X #H elim (cpms_inv_abbr_sn_dx … H) -H * [ #V2 #T2 #_ #_ #H destruct /1 width=1 by tweq_abbr_neg/ @@ -38,33 +38,33 @@ elim (cpms_inv_abbr_sn_dx … H) -H * ] qed. -lemma cnuw_abst (h) (p) (G) (L): ∀W,T. ⦃G,L⦄ ⊢ ➡𝐍𝐖*[h] ⓛ{p}W.T. +lemma cnuw_abst (h) (p) (G) (L): ∀W,T. ❪G,L❫ ⊢ ➡𝐍𝐖*[h] ⓛ[p]W.T. #h #p #G #L #W1 #T1 #n #X #H elim (cpms_inv_abst_sn … H) -H #W2 #T2 #_ #_ #H destruct /1 width=1 by tweq_abst/ qed. lemma cnuw_cpms_trans (h) (n) (G) (L): - ∀T1. ⦃G,L⦄ ⊢ ➡𝐍𝐖*[h] T1 → - ∀T2. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 → ⦃G,L⦄ ⊢ ➡𝐍𝐖*[h] T2. + ∀T1. ❪G,L❫ ⊢ ➡𝐍𝐖*[h] T1 → + ∀T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → ❪G,L❫ ⊢ ➡𝐍𝐖*[h] T2. #h #n1 #G #L #T1 #HT1 #T2 #HT12 #n2 #T3 #HT23 /4 width=5 by cpms_trans, tweq_canc_sn/ qed-. lemma cnuw_dec_ex (h) (G) (L): - ∀T1. ∨∨ ⦃G,L⦄ ⊢ ➡𝐍𝐖*[h] T1 - | ∃∃n,T2. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 & (T1 ≅ T2 → ⊥). + ∀T1. ∨∨ ❪G,L❫ ⊢ ➡𝐍𝐖*[h] T1 + | ∃∃n,T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 & (T1 ≅ T2 → ⊥). #h #G #L #T1 elim T1 -T1 * [ #s /3 width=5 by cnuw_sort, or_introl/ | #i elim (drops_F_uni L i) [ /3 width=7 by cnuw_atom_drops, or_introl/ | * * [ #I | * #V ] #K #HLK [ /3 width=8 by cnuw_unit_drops, or_introl/ - | elim (lifts_total V 𝐔❴↑i❵) #W #HVW + | elim (lifts_total V 𝐔❨↑i❩) #W #HVW @or_intror @(ex2_2_intro … W) [1,2: /2 width=7 by cpms_delta_drops/ ] #H lapply (tweq_inv_lref_sn … H) -H #H destruct /2 width=5 by lifts_inv_lref2_uni_lt/ - | elim (lifts_total V 𝐔❴↑i❵) #W #HVW + | elim (lifts_total V 𝐔❨↑i❩) #W #HVW @or_intror @(ex2_2_intro … W) [1,2: /2 width=7 by cpms_ell_drops/ ] #H lapply (tweq_inv_lref_sn … H) -H #H destruct /2 width=5 by lifts_inv_lref2_uni_lt/ @@ -85,10 +85,10 @@ lemma cnuw_dec_ex (h) (G) (L): @or_intror @(ex2_2_intro … n (ⓐV1.T2)) [ /2 width=1 by cpms_appl_dx/ ] #H lapply (tweq_inv_appl_bi … H) -H /2 width=1 by/ ] - | elim (lifts_total V1 𝐔❴1❵) #X1 #HVX1 - @or_intror @(ex2_2_intro … (ⓓ{p}W1.ⓐX1.U1)) [1,2: /2 width=3 by cpms_theta/ ] #H + | elim (lifts_total V1 𝐔❨1❩) #X1 #HVX1 + @or_intror @(ex2_2_intro … (ⓓ[p]W1.ⓐX1.U1)) [1,2: /2 width=3 by cpms_theta/ ] #H elim (tweq_inv_appl_sn … H) -H #X1 #X2 #_ #H destruct - | @or_intror @(ex2_2_intro … (ⓓ{p}ⓝW1.V1.U1)) [1,2: /2 width=2 by cpms_beta/ ] #H + | @or_intror @(ex2_2_intro … (ⓓ[p]ⓝW1.V1.U1)) [1,2: /2 width=2 by cpms_beta/ ] #H elim (tweq_inv_appl_sn … H) -H #X1 #X2 #_ #H destruct ] | @or_intror @(ex2_2_intro … T1) [1,2: /2 width=2 by cpms_eps/ ] #H @@ -97,7 +97,7 @@ lemma cnuw_dec_ex (h) (G) (L): ] qed-. -lemma cnuw_dec (h) (G) (L): ∀T. Decidable (⦃G,L⦄ ⊢ ➡𝐍𝐖*[h] T). +lemma cnuw_dec (h) (G) (L): ∀T. Decidable (❪G,L❫ ⊢ ➡𝐍𝐖*[h] T). #h #G #L #T1 elim (cnuw_dec_ex h G L T1) [ /2 width=1 by or_introl/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw_drops.ma index 6492a3b1b..478ef3de0 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw_drops.ma @@ -37,7 +37,7 @@ qed-. (* Advanced properties ******************************************************) lemma cnuw_lref (h) (I) (G) (L): - ∀i. ⦃G,L⦄ ⊢ ➡𝐍𝐖*[h] #i → ⦃G,L.ⓘ{I}⦄ ⊢ ➡𝐍𝐖*[h] #↑i. + ∀i. ❪G,L❫ ⊢ ➡𝐍𝐖*[h] #i → ❪G,L.ⓘ[I]❫ ⊢ ➡𝐍𝐖*[h] #↑i. #h #I #G #L #i #Hi #n #X2 #H elim (cpms_inv_lref_sn … H) -H * [ #H #_ destruct // @@ -49,7 +49,7 @@ elim (cpms_inv_lref_sn … H) -H * qed. lemma cnuw_atom_drops (h) (b) (G) (L): - ∀i. ⇩*[b,𝐔❴i❵] L ≘ ⋆ → ⦃G,L⦄ ⊢ ➡𝐍𝐖*[h] #i. + ∀i. ⇩*[b,𝐔❨i❩] L ≘ ⋆ → ❪G,L❫ ⊢ ➡𝐍𝐖*[h] #i. #h #b #G #L #i #Hi #n #X #H elim (cpms_inv_lref1_drops … H) -H * [ // || #m ] #K #V1 #V2 #HLK lapply (drops_gen b … HLK) -HLK #HLK @@ -57,7 +57,7 @@ lapply (drops_mono … Hi … HLK) -L #H destruct qed. lemma cnuw_unit_drops (h) (I) (G) (L): - ∀K,i. ⇩*[i] L ≘ K.ⓤ{I} → ⦃G,L⦄ ⊢ ➡𝐍𝐖*[h] #i. + ∀K,i. ⇩*[i] L ≘ K.ⓤ[I] → ❪G,L❫ ⊢ ➡𝐍𝐖*[h] #i. #h #I #G #L #K #i #HLK #n #X #H elim (cpms_inv_lref1_drops … H) -H * [ // || #m ] #Y #V1 #V2 #HLY lapply (drops_mono … HLK … HLY) -L #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw_simple.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw_simple.ma index 2e193c21f..8e5f5527a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw_simple.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cnuw_simple.ma @@ -21,7 +21,7 @@ include "basic_2/rt_computation/cnuw.ma". (* Advanced properties with simple terms ************************************) lemma cnuw_appl_simple (h) (G) (L): - ∀V,T. 𝐒⦃T⦄ → ⦃G,L⦄ ⊢ ➡𝐍𝐖*[h] T → ⦃G,L⦄ ⊢ ➡𝐍𝐖*[h] ⓐV.T. + ∀V,T. 𝐒❪T❫ → ❪G,L❫ ⊢ ➡𝐍𝐖*[h] T → ❪G,L❫ ⊢ ➡𝐍𝐖*[h] ⓐV.T. #h #G #L #V1 #T1 #H1T1 #H2T1 #n #X #H elim (cpms_inv_appl_sn … H) -H * [ #V2 #T2 #_ #HT12 #H destruct -H1T1 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre.ma index 112f0aa34..229477f82 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre.ma @@ -20,7 +20,7 @@ include "basic_2/rt_computation/cpms.ma". (* Basic_2A1: uses: cprre *) definition cpmre (h) (n) (G) (L): relation2 term term ≝ - λT1,T2. ∧∧ ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 & ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃T2⦄. + λT1,T2. ∧∧ ❪G,L❫ ⊢ T1 ➡*[n,h] T2 & ❪G,L❫ ⊢ ➡[h] 𝐍❪T2❫. interpretation "evaluation for t-bound context-sensitive parallel rt-transition (term)" 'PRedEval h n G L T1 T2 = (cpmre h n G L T1 T2). @@ -28,12 +28,12 @@ interpretation "evaluation for t-bound context-sensitive parallel rt-transition (* Basic properties *********************************************************) lemma cpmre_intro (h) (n) (G) (L): - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 → ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃T2⦄ → ⦃G,L⦄⊢T1➡*[h,n]𝐍⦃T2⦄. + ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → ❪G,L❫ ⊢ ➡[h] 𝐍❪T2❫ → ❪G,L❫⊢T1➡*[h,n]𝐍❪T2❫. /2 width=1 by conj/ qed. (* Basic forward lemmas *****************************************************) lemma cpmre_fwd_cpms (h) (n) (G) (L): - ∀T1,T2. ⦃G,L⦄⊢T1➡*[h,n]𝐍⦃T2⦄ → ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2. + ∀T1,T2. ❪G,L❫⊢T1➡*[h,n]𝐍❪T2❫ → ❪G,L❫ ⊢ T1 ➡*[n,h] T2. #h #n #G #L #T1 #T2 * // qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre_aaa.ma index 840985f84..0c695ceff 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmre_aaa.ma @@ -22,7 +22,7 @@ include "basic_2/rt_computation/cprre_cpms.ma". (* Properties with atomic atomic arity assignment on terms ******************) lemma cpmre_total_aaa (h) (n) (A) (G) (L): - ∀T1. ⦃G,L⦄ ⊢ T1 ⁝ A → ∃T2. ⦃G,L⦄ ⊢ T1 ➡*[h,n] 𝐍⦃T2⦄. + ∀T1. ❪G,L❫ ⊢ T1 ⁝ A → ∃T2. ❪G,L❫ ⊢ T1 ➡*[h,n] 𝐍❪T2❫. #h #n #A #G #L #T1 #HT1 elim (cpms_total_aaa h … n … HT1) #T0 #HT10 elim (cprre_total_csx h G L T0) diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms.ma index 081eece9b..642158751 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms.ma @@ -35,15 +35,15 @@ interpretation lemma cpms_ind_sn (h) (G) (L) (T2) (Q:relation2 …): Q 0 T2 → - (∀n1,n2,T1,T. ⦃G,L⦄ ⊢ T1 ➡[n1,h] T → ⦃G,L⦄ ⊢ T ➡*[n2,h] T2 → Q n2 T → Q (n1+n2) T1) → - ∀n,T1. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 → Q n T1. + (∀n1,n2,T1,T. ❪G,L❫ ⊢ T1 ➡[n1,h] T → ❪G,L❫ ⊢ T ➡*[n2,h] T2 → Q n2 T → Q (n1+n2) T1) → + ∀n,T1. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → Q n T1. #h #G #L #T2 #Q @ltc_ind_sn_refl // qed-. lemma cpms_ind_dx (h) (G) (L) (T1) (Q:relation2 …): Q 0 T1 → - (∀n1,n2,T,T2. ⦃G,L⦄ ⊢ T1 ➡*[n1,h] T → Q n1 T → ⦃G,L⦄ ⊢ T ➡[n2,h] T2 → Q (n1+n2) T2) → - ∀n,T2. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 → Q n T2. + (∀n1,n2,T,T2. ❪G,L❫ ⊢ T1 ➡*[n1,h] T → Q n1 T → ❪G,L❫ ⊢ T ➡[n2,h] T2 → Q (n1+n2) T2) → + ∀n,T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → Q n T2. #h #G #L #T1 #Q @ltc_ind_dx_refl // qed-. @@ -52,36 +52,36 @@ qed-. (* Basic_1: includes: pr1_pr0 *) (* Basic_1: uses: pr3_pr2 *) (* Basic_2A1: includes: cpr_cprs *) -lemma cpm_cpms (h) (G) (L): ∀n,T1,T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2. +lemma cpm_cpms (h) (G) (L): ∀n,T1,T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 → ❪G,L❫ ⊢ T1 ➡*[n,h] T2. /2 width=1 by ltc_rc/ qed. -lemma cpms_step_sn (h) (G) (L): ∀n1,T1,T. ⦃G,L⦄ ⊢ T1 ➡[n1,h] T → - ∀n2,T2. ⦃G,L⦄ ⊢ T ➡*[n2,h] T2 → ⦃G,L⦄ ⊢ T1 ➡*[n1+n2,h] T2. +lemma cpms_step_sn (h) (G) (L): ∀n1,T1,T. ❪G,L❫ ⊢ T1 ➡[n1,h] T → + ∀n2,T2. ❪G,L❫ ⊢ T ➡*[n2,h] T2 → ❪G,L❫ ⊢ T1 ➡*[n1+n2,h] T2. /2 width=3 by ltc_sn/ qed-. -lemma cpms_step_dx (h) (G) (L): ∀n1,T1,T. ⦃G,L⦄ ⊢ T1 ➡*[n1,h] T → - ∀n2,T2. ⦃G,L⦄ ⊢ T ➡[n2,h] T2 → ⦃G,L⦄ ⊢ T1 ➡*[n1+n2,h] T2. +lemma cpms_step_dx (h) (G) (L): ∀n1,T1,T. ❪G,L❫ ⊢ T1 ➡*[n1,h] T → + ∀n2,T2. ❪G,L❫ ⊢ T ➡[n2,h] T2 → ❪G,L❫ ⊢ T1 ➡*[n1+n2,h] T2. /2 width=3 by ltc_dx/ qed-. (* Basic_2A1: uses: cprs_bind_dx *) lemma cpms_bind_dx (n) (h) (G) (L): - ∀V1,V2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 → - ∀I,T1,T2. ⦃G,L.ⓑ{I}V1⦄ ⊢ T1 ➡*[n,h] T2 → - ∀p. ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T1 ➡*[n,h] ⓑ{p,I}V2.T2. + ∀V1,V2. ❪G,L❫ ⊢ V1 ➡[h] V2 → + ∀I,T1,T2. ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡*[n,h] T2 → + ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡*[n,h] ⓑ[p,I]V2.T2. #n #h #G #L #V1 #V2 #HV12 #I #T1 #T2 #H #a @(cpms_ind_sn … H) -T1 /3 width=3 by cpms_step_sn, cpm_cpms, cpm_bind/ qed. lemma cpms_appl_dx (n) (h) (G) (L): - ∀V1,V2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 → - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 → - ⦃G,L⦄ ⊢ ⓐV1.T1 ➡*[n,h] ⓐV2.T2. + ∀V1,V2. ❪G,L❫ ⊢ V1 ➡[h] V2 → + ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → + ❪G,L❫ ⊢ ⓐV1.T1 ➡*[n,h] ⓐV2.T2. #n #h #G #L #V1 #V2 #HV12 #T1 #T2 #H @(cpms_ind_sn … H) -T1 /3 width=3 by cpms_step_sn, cpm_cpms, cpm_appl/ qed. lemma cpms_zeta (n) (h) (G) (L): ∀T1,T. ⇧*[1] T ≘ T1 → - ∀V,T2. ⦃G,L⦄ ⊢ T ➡*[n,h] T2 → ⦃G,L⦄ ⊢ +ⓓV.T1 ➡*[n,h] T2. + ∀V,T2. ❪G,L❫ ⊢ T ➡*[n,h] T2 → ❪G,L❫ ⊢ +ⓓV.T1 ➡*[n,h] T2. #n #h #G #L #T1 #T #HT1 #V #T2 #H @(cpms_ind_dx … H) -T2 /3 width=3 by cpms_step_dx, cpm_cpms, cpm_zeta/ qed. @@ -89,22 +89,22 @@ qed. (* Basic_2A1: uses: cprs_zeta *) lemma cpms_zeta_dx (n) (h) (G) (L): ∀T2,T. ⇧*[1] T2 ≘ T → - ∀V,T1. ⦃G,L.ⓓV⦄ ⊢ T1 ➡*[n,h] T → ⦃G,L⦄ ⊢ +ⓓV.T1 ➡*[n,h] T2. + ∀V,T1. ❪G,L.ⓓV❫ ⊢ T1 ➡*[n,h] T → ❪G,L❫ ⊢ +ⓓV.T1 ➡*[n,h] T2. #n #h #G #L #T2 #T #HT2 #V #T1 #H @(cpms_ind_sn … H) -T1 /3 width=3 by cpms_step_sn, cpm_cpms, cpm_bind, cpm_zeta/ qed. (* Basic_2A1: uses: cprs_eps *) lemma cpms_eps (n) (h) (G) (L): - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 → - ∀V. ⦃G,L⦄ ⊢ ⓝV.T1 ➡*[n,h] T2. + ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → + ∀V. ❪G,L❫ ⊢ ⓝV.T1 ➡*[n,h] T2. #n #h #G #L #T1 #T2 #H @(cpms_ind_sn … H) -T1 /3 width=3 by cpms_step_sn, cpm_cpms, cpm_eps/ qed. lemma cpms_ee (n) (h) (G) (L): - ∀U1,U2. ⦃G,L⦄ ⊢ U1 ➡*[n,h] U2 → - ∀T. ⦃G,L⦄ ⊢ ⓝU1.T ➡*[↑n,h] U2. + ∀U1,U2. ❪G,L❫ ⊢ U1 ➡*[n,h] U2 → + ∀T. ❪G,L❫ ⊢ ⓝU1.T ➡*[↑n,h] U2. #n #h #G #L #U1 #U2 #H @(cpms_ind_sn … H) -U1 -n [ /3 width=1 by cpm_cpms, cpm_ee/ | #n1 #n2 #U1 #U #HU1 #HU2 #_ #T >plus_S1 @@ -114,21 +114,21 @@ qed. (* Basic_2A1: uses: cprs_beta_dx *) lemma cpms_beta_dx (n) (h) (G) (L): - ∀V1,V2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 → - ∀W1,W2. ⦃G,L⦄ ⊢ W1 ➡[h] W2 → - ∀T1,T2. ⦃G,L.ⓛW1⦄ ⊢ T1 ➡*[n,h] T2 → - ∀p. ⦃G,L⦄ ⊢ ⓐV1.ⓛ{p}W1.T1 ➡*[n,h] ⓓ{p}ⓝW2.V2.T2. + ∀V1,V2. ❪G,L❫ ⊢ V1 ➡[h] V2 → + ∀W1,W2. ❪G,L❫ ⊢ W1 ➡[h] W2 → + ∀T1,T2. ❪G,L.ⓛW1❫ ⊢ T1 ➡*[n,h] T2 → + ∀p. ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ➡*[n,h] ⓓ[p]ⓝW2.V2.T2. #n #h #G #L #V1 #V2 #HV12 #W1 #W2 #HW12 #T1 #T2 #H @(cpms_ind_dx … H) -T2 /4 width=7 by cpms_step_dx, cpm_cpms, cpms_bind_dx, cpms_appl_dx, cpm_beta/ qed. (* Basic_2A1: uses: cprs_theta_dx *) lemma cpms_theta_dx (n) (h) (G) (L): - ∀V1,V. ⦃G,L⦄ ⊢ V1 ➡[h] V → + ∀V1,V. ❪G,L❫ ⊢ V1 ➡[h] V → ∀V2. ⇧*[1] V ≘ V2 → - ∀W1,W2. ⦃G,L⦄ ⊢ W1 ➡[h] W2 → - ∀T1,T2. ⦃G,L.ⓓW1⦄ ⊢ T1 ➡*[n,h] T2 → - ∀p. ⦃G,L⦄ ⊢ ⓐV1.ⓓ{p}W1.T1 ➡*[n,h] ⓓ{p}W2.ⓐV2.T2. + ∀W1,W2. ❪G,L❫ ⊢ W1 ➡[h] W2 → + ∀T1,T2. ❪G,L.ⓓW1❫ ⊢ T1 ➡*[n,h] T2 → + ∀p. ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ➡*[n,h] ⓓ[p]W2.ⓐV2.T2. #n #h #G #L #V1 #V #HV1 #V2 #HV2 #W1 #W2 #HW12 #T1 #T2 #H @(cpms_ind_dx … H) -T2 /4 width=9 by cpms_step_dx, cpm_cpms, cpms_bind_dx, cpms_appl_dx, cpm_theta/ qed. @@ -142,7 +142,7 @@ lemma cprs_refl: ∀h,G,L. reflexive … (cpms h G L 0). (* Advanced properties ******************************************************) lemma cpms_sort (h) (G) (L) (n): - ∀s. ⦃G,L⦄ ⊢ ⋆s ➡*[n,h] ⋆((next h)^n s). + ∀s. ❪G,L❫ ⊢ ⋆s ➡*[n,h] ⋆((next h)^n s). #h #G #L #n elim n -n [ // ] #n #IH #s (plus_n_O … n) -HT12 @@ -35,9 +35,9 @@ theorem cpms_bind (n) (h) (G) (L): qed. theorem cpms_appl (n) (h) (G) (L): - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 → - ∀V1,V2. ⦃G,L⦄ ⊢ V1 ➡*[h] V2 → - ⦃G,L⦄ ⊢ ⓐV1.T1 ➡*[n,h] ⓐV2.T2. + ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → + ∀V1,V2. ❪G,L❫ ⊢ V1 ➡*[h] V2 → + ❪G,L❫ ⊢ ⓐV1.T1 ➡*[n,h] ⓐV2.T2. #n #h #G #L #T1 #T2 #HT12 #V1 #V2 #H @(cprs_ind_dx … H) -V2 [ /2 width=1 by cpms_appl_dx/ | #V #V2 #_ #HV2 #IH >(plus_n_O … n) -HT12 @@ -47,10 +47,10 @@ qed. (* Basic_2A1: includes: cprs_beta_rc *) theorem cpms_beta_rc (n) (h) (G) (L): - ∀V1,V2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 → - ∀W1,T1,T2. ⦃G,L.ⓛW1⦄ ⊢ T1 ➡*[n,h] T2 → - ∀W2. ⦃G,L⦄ ⊢ W1 ➡*[h] W2 → - ∀p. ⦃G,L⦄ ⊢ ⓐV1.ⓛ{p}W1.T1 ➡*[n,h] ⓓ{p}ⓝW2.V2.T2. + ∀V1,V2. ❪G,L❫ ⊢ V1 ➡[h] V2 → + ∀W1,T1,T2. ❪G,L.ⓛW1❫ ⊢ T1 ➡*[n,h] T2 → + ∀W2. ❪G,L❫ ⊢ W1 ➡*[h] W2 → + ∀p. ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ➡*[n,h] ⓓ[p]ⓝW2.V2.T2. #n #h #G #L #V1 #V2 #HV12 #W1 #T1 #T2 #HT12 #W2 #H @(cprs_ind_dx … H) -W2 [ /2 width=1 by cpms_beta_dx/ | #W #W2 #_ #HW2 #IH #p >(plus_n_O … n) -HT12 @@ -60,10 +60,10 @@ qed. (* Basic_2A1: includes: cprs_beta *) theorem cpms_beta (n) (h) (G) (L): - ∀W1,T1,T2. ⦃G,L.ⓛW1⦄ ⊢ T1 ➡*[n,h] T2 → - ∀W2. ⦃G,L⦄ ⊢ W1 ➡*[h] W2 → - ∀V1,V2. ⦃G,L⦄ ⊢ V1 ➡*[h] V2 → - ∀p. ⦃G,L⦄ ⊢ ⓐV1.ⓛ{p}W1.T1 ➡*[n,h] ⓓ{p}ⓝW2.V2.T2. + ∀W1,T1,T2. ❪G,L.ⓛW1❫ ⊢ T1 ➡*[n,h] T2 → + ∀W2. ❪G,L❫ ⊢ W1 ➡*[h] W2 → + ∀V1,V2. ❪G,L❫ ⊢ V1 ➡*[h] V2 → + ∀p. ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ➡*[n,h] ⓓ[p]ⓝW2.V2.T2. #n #h #G #L #W1 #T1 #T2 #HT12 #W2 #HW12 #V1 #V2 #H @(cprs_ind_dx … H) -V2 [ /2 width=1 by cpms_beta_rc/ | #V #V2 #_ #HV2 #IH #p >(plus_n_O … n) -HT12 @@ -73,10 +73,10 @@ qed. (* Basic_2A1: includes: cprs_theta_rc *) theorem cpms_theta_rc (n) (h) (G) (L): - ∀V1,V. ⦃G,L⦄ ⊢ V1 ➡[h] V → ∀V2. ⇧*[1] V ≘ V2 → - ∀W1,T1,T2. ⦃G,L.ⓓW1⦄ ⊢ T1 ➡*[n,h] T2 → - ∀W2. ⦃G,L⦄ ⊢ W1 ➡*[h] W2 → - ∀p. ⦃G,L⦄ ⊢ ⓐV1.ⓓ{p}W1.T1 ➡*[n,h] ⓓ{p}W2.ⓐV2.T2. + ∀V1,V. ❪G,L❫ ⊢ V1 ➡[h] V → ∀V2. ⇧*[1] V ≘ V2 → + ∀W1,T1,T2. ❪G,L.ⓓW1❫ ⊢ T1 ➡*[n,h] T2 → + ∀W2. ❪G,L❫ ⊢ W1 ➡*[h] W2 → + ∀p. ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ➡*[n,h] ⓓ[p]W2.ⓐV2.T2. #n #h #G #L #V1 #V #HV1 #V2 #HV2 #W1 #T1 #T2 #HT12 #W2 #H @(cprs_ind_dx … H) -W2 [ /2 width=3 by cpms_theta_dx/ | #W #W2 #_ #HW2 #IH #p >(plus_n_O … n) -HT12 @@ -86,10 +86,10 @@ qed. (* Basic_2A1: includes: cprs_theta *) theorem cpms_theta (n) (h) (G) (L): - ∀V,V2. ⇧*[1] V ≘ V2 → ∀W1,W2. ⦃G,L⦄ ⊢ W1 ➡*[h] W2 → - ∀T1,T2. ⦃G,L.ⓓW1⦄ ⊢ T1 ➡*[n,h] T2 → - ∀V1. ⦃G,L⦄ ⊢ V1 ➡*[h] V → - ∀p. ⦃G,L⦄ ⊢ ⓐV1.ⓓ{p}W1.T1 ➡*[n,h] ⓓ{p}W2.ⓐV2.T2. + ∀V,V2. ⇧*[1] V ≘ V2 → ∀W1,W2. ❪G,L❫ ⊢ W1 ➡*[h] W2 → + ∀T1,T2. ❪G,L.ⓓW1❫ ⊢ T1 ➡*[n,h] T2 → + ∀V1. ❪G,L❫ ⊢ V1 ➡*[h] V → + ∀p. ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ➡*[n,h] ⓓ[p]W2.ⓐV2.T2. #n #h #G #L #V #V2 #HV2 #W1 #W2 #HW12 #T1 #T2 #HT12 #V1 #H @(cprs_ind_sn … H) -V1 [ /2 width=3 by cpms_theta_rc/ | #V1 #V0 #HV10 #_ #IH #p >(plus_O_n … n) -HT12 @@ -99,30 +99,30 @@ qed. (* Basic_2A1: uses: lstas_scpds_trans scpds_strap2 *) theorem cpms_trans (h) (G) (L): - ∀n1,T1,T. ⦃G,L⦄ ⊢ T1 ➡*[n1,h] T → - ∀n2,T2. ⦃G,L⦄ ⊢ T ➡*[n2,h] T2 → ⦃G,L⦄ ⊢ T1 ➡*[n1+n2,h] T2. + ∀n1,T1,T. ❪G,L❫ ⊢ T1 ➡*[n1,h] T → + ∀n2,T2. ❪G,L❫ ⊢ T ➡*[n2,h] T2 → ❪G,L❫ ⊢ T1 ➡*[n1+n2,h] T2. /2 width=3 by ltc_trans/ qed-. (* Basic_2A1: uses: scpds_cprs_trans *) theorem cpms_cprs_trans (n) (h) (G) (L): - ∀T1,T. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T → - ∀T2. ⦃G,L⦄ ⊢ T ➡*[h] T2 → ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2. + ∀T1,T. ❪G,L❫ ⊢ T1 ➡*[n,h] T → + ∀T2. ❪G,L❫ ⊢ T ➡*[h] T2 → ❪G,L❫ ⊢ T1 ➡*[n,h] T2. #n #h #G #L #T1 #T #HT1 #T2 #HT2 >(plus_n_O … n) /2 width=3 by cpms_trans/ qed-. (* Advanced inversion lemmas ************************************************) lemma cpms_inv_appl_sn (n) (h) (G) (L): - ∀V1,T1,X2. ⦃G,L⦄ ⊢ ⓐV1.T1 ➡*[n,h] X2 → + ∀V1,T1,X2. ❪G,L❫ ⊢ ⓐV1.T1 ➡*[n,h] X2 → ∨∨ ∃∃V2,T2. - ⦃G,L⦄ ⊢ V1 ➡*[h] V2 & ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 & + ❪G,L❫ ⊢ V1 ➡*[h] V2 & ❪G,L❫ ⊢ T1 ➡*[n,h] T2 & X2 = ⓐV2.T2 | ∃∃n1,n2,p,W,T. - ⦃G,L⦄ ⊢ T1 ➡*[n1,h] ⓛ{p}W.T & ⦃G,L⦄ ⊢ ⓓ{p}ⓝW.V1.T ➡*[n2,h] X2 & + ❪G,L❫ ⊢ T1 ➡*[n1,h] ⓛ[p]W.T & ❪G,L❫ ⊢ ⓓ[p]ⓝW.V1.T ➡*[n2,h] X2 & n1 + n2 = n | ∃∃n1,n2,p,V0,V2,V,T. - ⦃G,L⦄ ⊢ V1 ➡*[h] V0 & ⇧*[1] V0 ≘ V2 & - ⦃G,L⦄ ⊢ T1 ➡*[n1,h] ⓓ{p}V.T & ⦃G,L⦄ ⊢ ⓓ{p}V.ⓐV2.T ➡*[n2,h] X2 & + ❪G,L❫ ⊢ V1 ➡*[h] V0 & ⇧*[1] V0 ≘ V2 & + ❪G,L❫ ⊢ T1 ➡*[n1,h] ⓓ[p]V.T & ❪G,L❫ ⊢ ⓓ[p]V.ⓐV2.T ➡*[n2,h] X2 & n1 + n2 = n. #n #h #G #L #V1 #T1 #U2 #H @(cpms_ind_dx … H) -U2 /3 width=5 by or3_intro0, ex3_2_intro/ @@ -146,8 +146,8 @@ lemma cpms_inv_appl_sn (n) (h) (G) (L): ] qed-. -lemma cpms_inv_plus (h) (G) (L): ∀n1,n2,T1,T2. ⦃G,L⦄ ⊢ T1 ➡*[n1+n2,h] T2 → - ∃∃T. ⦃G,L⦄ ⊢ T1 ➡*[n1,h] T & ⦃G,L⦄ ⊢ T ➡*[n2,h] T2. +lemma cpms_inv_plus (h) (G) (L): ∀n1,n2,T1,T2. ❪G,L❫ ⊢ T1 ➡*[n1+n2,h] T2 → + ∃∃T. ❪G,L❫ ⊢ T1 ➡*[n1,h] T & ❪G,L❫ ⊢ T ➡*[n2,h] T2. #h #G #L #n1 elim n1 -n1 /2 width=3 by ex2_intro/ #n1 #IH #n2 #T1 #T2 plus_S1 + elim (lifts_total V (𝐔❨1❩)) #W #HVW >plus_S1 /5 width=11 by cpms_step_dx, cpm_lifts_bi, drops_refl, drops_drop/ ] qed. -lemma cpms_lref (n) (h) (I) (G): ∀K,T,i. ⦃G,K⦄ ⊢ #i ➡*[n,h] T → - ∀U. ⇧*[1] T ≘ U → ⦃G,K.ⓘ{I}⦄ ⊢ #↑i ➡*[n,h] U. +lemma cpms_lref (n) (h) (I) (G): ∀K,T,i. ❪G,K❫ ⊢ #i ➡*[n,h] T → + ∀U. ⇧*[1] T ≘ U → ❪G,K.ⓘ[I]❫ ⊢ #↑i ➡*[n,h] U. #n #h #I #G #K #T #i #H @(cpms_ind_dx … H) -T [ /3 width=3 by cpm_cpms, cpm_lref/ | #n1 #n2 #T #T2 #_ #IH #HT2 #U2 #HTU2 - elim (lifts_total T (𝐔❴1❵)) #U #TU + elim (lifts_total T (𝐔❨1❩)) #U #TU /5 width=11 by cpms_step_dx, cpm_lifts_bi, drops_refl, drops_drop/ ] qed. lemma cpms_cast_sn (n) (h) (G) (L): - ∀U1,U2. ⦃G,L⦄ ⊢ U1 ➡*[n,h] U2 → - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → - ⦃G,L⦄ ⊢ ⓝU1.T1 ➡*[n,h] ⓝU2.T2. + ∀U1,U2. ❪G,L❫ ⊢ U1 ➡*[n,h] U2 → + ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 → + ❪G,L❫ ⊢ ⓝU1.T1 ➡*[n,h] ⓝU2.T2. #n #h #G #L #U1 #U2 #H @(cpms_ind_sn … H) -U1 -n [ /3 width=3 by cpm_cpms, cpm_cast/ | #n1 #n2 #U1 #U #HU1 #_ #IH #T1 #T2 #H @@ -92,26 +92,26 @@ qed. (* Basic_2A1: uses: cprs_delta *) lemma cpms_delta_drops (n) (h) (G): ∀L,K,V,i. ⇩*[i] L ≘ K.ⓓV → - ∀V2. ⦃G,K⦄ ⊢ V ➡*[n,h] V2 → - ∀W2. ⇧*[↑i] V2 ≘ W2 → ⦃G,L⦄ ⊢ #i ➡*[n,h] W2. + ∀V2. ❪G,K❫ ⊢ V ➡*[n,h] V2 → + ∀W2. ⇧*[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ➡*[n,h] W2. #n #h #G #L #K #V #i #HLK #V2 #H @(cpms_ind_dx … H) -V2 [ /3 width=6 by cpm_cpms, cpm_delta_drops/ | #n1 #n2 #V1 #V2 #_ #IH #HV12 #W2 #HVW2 lapply (drops_isuni_fwd_drop2 … HLK) -HLK // #HLK - elim (lifts_total V1 (𝐔❴↑i❵)) #W1 #HVW1 + elim (lifts_total V1 (𝐔❨↑i❩)) #W1 #HVW1 /3 width=11 by cpm_lifts_bi, cpms_step_dx/ ] qed. lemma cpms_ell_drops (n) (h) (G): ∀L,K,W,i. ⇩*[i] L ≘ K.ⓛW → - ∀W2. ⦃G,K⦄ ⊢ W ➡*[n,h] W2 → - ∀V2. ⇧*[↑i] W2 ≘ V2 → ⦃G,L⦄ ⊢ #i ➡*[↑n,h] V2. + ∀W2. ❪G,K❫ ⊢ W ➡*[n,h] W2 → + ∀V2. ⇧*[↑i] W2 ≘ V2 → ❪G,L❫ ⊢ #i ➡*[↑n,h] V2. #n #h #G #L #K #W #i #HLK #W2 #H @(cpms_ind_dx … H) -W2 [ /3 width=6 by cpm_cpms, cpm_ell_drops/ | #n1 #n2 #W1 #W2 #_ #IH #HW12 #V2 #HWV2 lapply (drops_isuni_fwd_drop2 … HLK) -HLK // #HLK - elim (lifts_total W1 (𝐔❴↑i❵)) #V1 #HWV1 >plus_S1 + elim (lifts_total W1 (𝐔❨↑i❩)) #V1 #HWV1 >plus_S1 /3 width=11 by cpm_lifts_bi, cpms_step_dx/ ] qed. @@ -119,11 +119,11 @@ qed. (* Advanced inversion lemmas ************************************************) lemma cpms_inv_lref1_drops (n) (h) (G): - ∀L,T2,i. ⦃G,L⦄ ⊢ #i ➡*[n,h] T2 → + ∀L,T2,i. ❪G,L❫ ⊢ #i ➡*[n,h] T2 → ∨∨ ∧∧ T2 = #i & n = 0 - | ∃∃K,V,V2. ⇩*[i] L ≘ K.ⓓV & ⦃G,K⦄ ⊢ V ➡*[n,h] V2 & + | ∃∃K,V,V2. ⇩*[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ➡*[n,h] V2 & ⇧*[↑i] V2 ≘ T2 - | ∃∃m,K,V,V2. ⇩*[i] L ≘ K.ⓛV & ⦃G,K⦄ ⊢ V ➡*[m,h] V2 & + | ∃∃m,K,V,V2. ⇩*[i] L ≘ K.ⓛV & ❪G,K❫ ⊢ V ➡*[m,h] V2 & ⇧*[↑i] V2 ≘ T2 & n = ↑m. #n #h #G #L #T2 #i #H @(cpms_ind_dx … H) -T2 [ /3 width=1 by or3_intro0, conj/ @@ -147,9 +147,9 @@ lemma cpms_inv_lref1_drops (n) (h) (G): qed-. lemma cpms_inv_delta_sn (n) (h) (G) (K) (V): - ∀T2. ⦃G,K.ⓓV⦄ ⊢ #0 ➡*[n,h] T2 → + ∀T2. ❪G,K.ⓓV❫ ⊢ #0 ➡*[n,h] T2 → ∨∨ ∧∧ T2 = #0 & n = 0 - | ∃∃V2. ⦃G,K⦄ ⊢ V ➡*[n,h] V2 & ⇧*[1] V2 ≘ T2. + | ∃∃V2. ❪G,K❫ ⊢ V ➡*[n,h] V2 & ⇧*[1] V2 ≘ T2. #n #h #G #K #V #T2 #H elim (cpms_inv_lref1_drops … H) -H * [ /3 width=1 by or_introl, conj/ @@ -162,9 +162,9 @@ elim (cpms_inv_lref1_drops … H) -H * qed-. lemma cpms_inv_ell_sn (n) (h) (G) (K) (V): - ∀T2. ⦃G,K.ⓛV⦄ ⊢ #0 ➡*[n,h] T2 → + ∀T2. ❪G,K.ⓛV❫ ⊢ #0 ➡*[n,h] T2 → ∨∨ ∧∧ T2 = #0 & n = 0 - | ∃∃m,V2. ⦃G,K⦄ ⊢ V ➡*[m,h] V2 & ⇧*[1] V2 ≘ T2 & n = ↑m. + | ∃∃m,V2. ❪G,K❫ ⊢ V ➡*[m,h] V2 & ⇧*[1] V2 ≘ T2 & n = ↑m. #n #h #G #K #V #T2 #H elim (cpms_inv_lref1_drops … H) -H * [ /3 width=1 by or_introl, conj/ @@ -177,28 +177,28 @@ elim (cpms_inv_lref1_drops … H) -H * qed-. lemma cpms_inv_lref_sn (n) (h) (G) (I) (K): - ∀U2,i. ⦃G,K.ⓘ{I}⦄ ⊢ #↑i ➡*[n,h] U2 → + ∀U2,i. ❪G,K.ⓘ[I]❫ ⊢ #↑i ➡*[n,h] U2 → ∨∨ ∧∧ U2 = #↑i & n = 0 - | ∃∃T2. ⦃G,K⦄ ⊢ #i ➡*[n,h] T2 & ⇧*[1] T2 ≘ U2. + | ∃∃T2. ❪G,K❫ ⊢ #i ➡*[n,h] T2 & ⇧*[1] T2 ≘ U2. #n #h #G #I #K #U2 #i #H elim (cpms_inv_lref1_drops … H) -H * [ /3 width=1 by or_introl, conj/ | #L #V #V2 #H #HV2 #HVU2 lapply (drops_inv_drop1 … H) -H #HLK - elim (lifts_split_trans … HVU2 (𝐔❴↑i❵) (𝐔❴1❵)) -HVU2 + elim (lifts_split_trans … HVU2 (𝐔❨↑i❩) (𝐔❨1❩)) -HVU2 [| // ] #T2 #HVT2 #HTU2 /4 width=6 by cpms_delta_drops, ex2_intro, or_intror/ | #m #L #V #V2 #H #HV2 #HVU2 #H0 destruct lapply (drops_inv_drop1 … H) -H #HLK - elim (lifts_split_trans … HVU2 (𝐔❴↑i❵) (𝐔❴1❵)) -HVU2 + elim (lifts_split_trans … HVU2 (𝐔❨↑i❩) (𝐔❨1❩)) -HVU2 [| // ] #T2 #HVT2 #HTU2 /4 width=6 by cpms_ell_drops, ex2_intro, or_intror/ ] qed-. fact cpms_inv_succ_sn (n) (h) (G) (L): - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ➡*[↑n,h] T2 → - ∃∃T. ⦃G,L⦄ ⊢ T1 ➡*[1,h] T & ⦃G,L⦄ ⊢ T ➡*[n,h] T2. + ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[↑n,h] T2 → + ∃∃T. ❪G,L❫ ⊢ T1 ➡*[1,h] T & ❪G,L❫ ⊢ T ➡*[n,h] T2. #n #h #G #L #T1 #T2 @(insert_eq_0 … (↑n)) #m #H @(cpms_ind_sn … H) -T1 -m diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbg.ma index a71f3de70..da18f9c4d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbg.ma @@ -21,28 +21,28 @@ include "basic_2/rt_computation/cpms_fpbs.ma". (* Forward lemmas with proper parallel rst-computation for closures *********) lemma cpms_tneqx_fwd_fpbg (h) (n): - ∀G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 → - (T1 ≛ T2 → ⊥) → ⦃G,L,T1⦄ >[h] ⦃G,L,T2⦄. + ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → + (T1 ≛ T2 → ⊥) → ❪G,L,T1❫ >[h] ❪G,L,T2❫. /3 width=2 by cpms_fwd_cpxs, cpxs_tneqx_fpbg/ qed-. lemma fpbg_cpms_trans (h) (n): - ∀G1,G2,L1,L2,T1,T. ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T⦄ → - ∀T2. ⦃G2,L2⦄ ⊢ T ➡*[n,h] T2 → ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄. + ∀G1,G2,L1,L2,T1,T. ❪G1,L1,T1❫ >[h] ❪G2,L2,T❫ → + ∀T2. ❪G2,L2❫ ⊢ T ➡*[n,h] T2 → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. /3 width=5 by fpbg_fpbs_trans, cpms_fwd_fpbs/ qed-. lemma cpms_fpbg_trans (h) (n): - ∀G1,L1,T1,T. ⦃G1,L1⦄ ⊢ T1 ➡*[n,h] T → - ∀G2,L2,T2. ⦃G1,L1,T⦄ >[h] ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄. + ∀G1,L1,T1,T. ❪G1,L1❫ ⊢ T1 ➡*[n,h] T → + ∀G2,L2,T2. ❪G1,L1,T❫ >[h] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. /3 width=5 by fpbs_fpbg_trans, cpms_fwd_fpbs/ qed-. lemma fqup_cpms_fwd_fpbg (h): - ∀G1,G2,L1,L2,T1,T. ⦃G1,L1,T1⦄ ⬂+ ⦃G2,L2,T⦄ → - ∀n,T2. ⦃G2,L2⦄ ⊢ T ➡*[n,h] T2 → ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄. + ∀G1,G2,L1,L2,T1,T. ❪G1,L1,T1❫ ⬂+ ❪G2,L2,T❫ → + ∀n,T2. ❪G2,L2❫ ⊢ T ➡*[n,h] T2 → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. /3 width=5 by cpms_fwd_fpbs, fqup_fpbg, fpbg_fpbs_trans/ qed-. lemma cpm_tneqx_cpm_cpms_teqx_sym_fwd_fpbg (h) (G) (L) (T1): - ∀n1,T. ⦃G,L⦄ ⊢ T1 ➡[n1,h] T → (T1 ≛ T → ⊥) → - ∀n2,T2. ⦃G,L⦄⊢ T ➡*[n2,h] T2 → T1 ≛ T2 → ⦃G,L,T1⦄ >[h] ⦃G,L,T1⦄. + ∀n1,T. ❪G,L❫ ⊢ T1 ➡[n1,h] T → (T1 ≛ T → ⊥) → + ∀n2,T2. ❪G,L❫⊢ T ➡*[n2,h] T2 → T1 ≛ T2 → ❪G,L,T1❫ >[h] ❪G,L,T1❫. #h #G #L #T1 #n1 #T #H1T1 #H2T1 #n2 #T2 #H1T2 #H2T12 /4 width=7 by cpms_fwd_fpbs, cpm_fpb, fpbs_teqx_trans, teqx_sym, ex2_3_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbs.ma index 0fb54e8a6..ddc129c46 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_fpbs.ma @@ -21,5 +21,5 @@ include "basic_2/rt_computation/cpms_cpxs.ma". (* Basic_2A1: uses: cprs_fpbs *) lemma cpms_fwd_fpbs (n) (h): - ∀G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 → ⦃G,L,T1⦄ ≥[h] ⦃G,L,T2⦄. + ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → ❪G,L,T1❫ ≥[h] ❪G,L,T2❫. /3 width=2 by cpms_fwd_cpxs, cpxs_fpbs/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_lpr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_lpr.ma index dc6c0f065..be8c9a5fa 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_lpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_lpr.ma @@ -20,8 +20,8 @@ include "basic_2/rt_computation/cpms_cpms.ma". (* Properties with parallel rt-transition for full local environments *******) lemma lpr_cpm_trans (n) (h) (G): - ∀L2,T1,T2. ⦃G,L2⦄ ⊢ T1 ➡[n,h] T2 → - ∀L1. ⦃G,L1⦄ ⊢ ➡[h] L2 → ⦃G,L1⦄ ⊢ T1 ➡*[n,h] T2. + ∀L2,T1,T2. ❪G,L2❫ ⊢ T1 ➡[n,h] T2 → + ∀L1. ❪G,L1❫ ⊢ ➡[h] L2 → ❪G,L1❫ ⊢ T1 ➡*[n,h] T2. #n #h #G #L2 #T1 #T2 #H @(cpm_ind … H) -n -G -L2 -T1 -T2 [ /2 width=3 by/ | /3 width=2 by cpm_cpms/ @@ -46,8 +46,8 @@ lemma lpr_cpm_trans (n) (h) (G): qed-. lemma lpr_cpms_trans (n) (h) (G): - ∀L1,L2. ⦃G,L1⦄ ⊢ ➡[h] L2 → - ∀T1,T2. ⦃G,L2⦄ ⊢ T1 ➡*[n,h] T2 → ⦃G,L1⦄ ⊢ T1 ➡*[n,h] T2. + ∀L1,L2. ❪G,L1❫ ⊢ ➡[h] L2 → + ∀T1,T2. ❪G,L2❫ ⊢ T1 ➡*[n,h] T2 → ❪G,L1❫ ⊢ T1 ➡*[n,h] T2. #n #h #G #L1 #L2 #HL12 #T1 #T2 #H @(cpms_ind_sn … H) -n -T1 /3 width=3 by lpr_cpm_trans, cpms_trans/ qed-. @@ -56,14 +56,14 @@ qed-. (* Basic_2A1: includes cpr_bind2 *) lemma cpm_bind2 (n) (h) (G) (L): - ∀V1,V2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 → - ∀I,T1,T2. ⦃G,L.ⓑ{I}V2⦄ ⊢ T1 ➡[n,h] T2 → - ∀p. ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T1 ➡*[n,h] ⓑ{p,I}V2.T2. + ∀V1,V2. ❪G,L❫ ⊢ V1 ➡[h] V2 → + ∀I,T1,T2. ❪G,L.ⓑ[I]V2❫ ⊢ T1 ➡[n,h] T2 → + ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡*[n,h] ⓑ[p,I]V2.T2. /4 width=5 by lpr_cpm_trans, cpms_bind_dx, lpr_pair/ qed. (* Basic_2A1: includes cprs_bind2_dx *) lemma cpms_bind2_dx (n) (h) (G) (L): - ∀V1,V2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 → - ∀I,T1,T2. ⦃G,L.ⓑ{I}V2⦄ ⊢ T1 ➡*[n,h] T2 → - ∀p. ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T1 ➡*[n,h] ⓑ{p,I}V2.T2. + ∀V1,V2. ❪G,L❫ ⊢ V1 ➡[h] V2 → + ∀I,T1,T2. ❪G,L.ⓑ[I]V2❫ ⊢ T1 ➡*[n,h] T2 → + ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡*[n,h] ⓑ[p,I]V2.T2. /4 width=5 by lpr_cpms_trans, cpms_bind_dx, lpr_pair/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_reqx.ma index cda3b2b8e..78294ec71 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_reqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpms_reqx.ma @@ -20,11 +20,11 @@ include "basic_2/rt_computation/cpms_cpxs.ma". (* Properties with sort-irrelevant equivalence for local environments *******) lemma cpms_reqx_conf_sn (h) (n) (G) (L1) (L2): - ∀T1,T2. ⦃G,L1⦄ ⊢ T1 ➡*[n,h] T2 → + ∀T1,T2. ❪G,L1❫ ⊢ T1 ➡*[n,h] T2 → L1 ≛[T1] L2 → L1 ≛[T2] L2. /3 width=5 by cpms_fwd_cpxs, cpxs_reqx_conf_sn/ qed-. lemma cpms_reqx_conf_dx (h) (n) (G) (L1) (L2): - ∀T1,T2. ⦃G,L2⦄ ⊢ T1 ➡*[n,h] T2 → + ∀T1,T2. ❪G,L2❫ ⊢ T1 ➡*[n,h] T2 → L1 ≛[T1] L2 → L1 ≛[T2] L2. /3 width=5 by cpms_fwd_cpxs, cpxs_reqx_conf_dx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe.ma index 44d91e8da..8b13f4539 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe.ma @@ -18,41 +18,41 @@ include "basic_2/rt_computation/cnuw.ma". (* T-UNBOUND WHD EVALUATION FOR T-BOUND RT-TRANSITION ON TERMS **************) definition cpmuwe (h) (n) (G) (L): relation2 term term ≝ - λT1,T2. ∧∧ ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 & ⦃G,L⦄ ⊢ ➡𝐍𝐖*[h] T2. + λT1,T2. ∧∧ ❪G,L❫ ⊢ T1 ➡*[n,h] T2 & ❪G,L❫ ⊢ ➡𝐍𝐖*[h] T2. interpretation "t-unbound whd evaluation for t-bound context-sensitive parallel rt-transition (term)" 'PRedEvalWStar h n G L T1 T2 = (cpmuwe h n G L T1 T2). definition R_cpmuwe (h) (G) (L) (T): predicate nat ≝ - λn. ∃U. ⦃G,L⦄ ⊢ T ➡*𝐍𝐖*[h,n] U. + λn. ∃U. ❪G,L❫ ⊢ T ➡*𝐍𝐖*[h,n] U. (* Basic properties *********************************************************) lemma cpmuwe_intro (h) (n) (G) (L): - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2 → ⦃G,L⦄ ⊢ ➡𝐍𝐖*[h] T2 → ⦃G,L⦄ ⊢ T1 ➡*𝐍𝐖*[h,n] T2. + ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[n,h] T2 → ❪G,L❫ ⊢ ➡𝐍𝐖*[h] T2 → ❪G,L❫ ⊢ T1 ➡*𝐍𝐖*[h,n] T2. /2 width=1 by conj/ qed. (* Advanced properties ******************************************************) lemma cpmuwe_sort (h) (n) (G) (L) (T): - ∀s. ⦃G,L⦄ ⊢ T ➡*[n,h] ⋆s → ⦃G,L⦄ ⊢ T ➡*𝐍𝐖*[h,n] ⋆s. + ∀s. ❪G,L❫ ⊢ T ➡*[n,h] ⋆s → ❪G,L❫ ⊢ T ➡*𝐍𝐖*[h,n] ⋆s. /3 width=5 by cnuw_sort, cpmuwe_intro/ qed. lemma cpmuwe_ctop (h) (n) (G) (T): - ∀i. ⦃G,⋆⦄ ⊢ T ➡*[n,h] #i → ⦃G,⋆⦄ ⊢ T ➡*𝐍𝐖*[h,n] #i. + ∀i. ❪G,⋆❫ ⊢ T ➡*[n,h] #i → ❪G,⋆❫ ⊢ T ➡*𝐍𝐖*[h,n] #i. /3 width=5 by cnuw_ctop, cpmuwe_intro/ qed. lemma cpmuwe_zero_unit (h) (n) (G) (L) (T): - ∀I. ⦃G,L.ⓤ{I}⦄ ⊢ T ➡*[n,h] #0 → ⦃G,L.ⓤ{I}⦄ ⊢ T ➡*𝐍𝐖*[h,n] #0. + ∀I. ❪G,L.ⓤ[I]❫ ⊢ T ➡*[n,h] #0 → ❪G,L.ⓤ[I]❫ ⊢ T ➡*𝐍𝐖*[h,n] #0. /3 width=6 by cnuw_zero_unit, cpmuwe_intro/ qed. lemma cpmuwe_gref (h) (n) (G) (L) (T): - ∀l. ⦃G,L⦄ ⊢ T ➡*[n,h] §l → ⦃G,L⦄ ⊢ T ➡*𝐍𝐖*[h,n] §l. + ∀l. ❪G,L❫ ⊢ T ➡*[n,h] §l → ❪G,L❫ ⊢ T ➡*𝐍𝐖*[h,n] §l. /3 width=5 by cnuw_gref, cpmuwe_intro/ qed. (* Basic forward lemmas *****************************************************) lemma cpmuwe_fwd_cpms (h) (n) (G) (L): - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ➡*𝐍𝐖*[h,n] T2 → ⦃G,L⦄ ⊢ T1 ➡*[n,h] T2. + ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*𝐍𝐖*[h,n] T2 → ❪G,L❫ ⊢ T1 ➡*[n,h] T2. #h #n #G #L #T1 #T2 * #HT12 #_ // qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe_cpmuwe.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe_cpmuwe.ma index deea7cdd4..3ebd3c366 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe_cpmuwe.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe_cpmuwe.ma @@ -20,9 +20,9 @@ include "basic_2/rt_computation/cpmuwe.ma". (* Advanced properties ******************************************************) lemma cpmuwe_abbr_neg (h) (n) (G) (L) (T): - ∀V,U. ⦃G,L⦄ ⊢ T ➡*[n,h] -ⓓV.U → ⦃G,L⦄ ⊢ T ➡*𝐍𝐖*[h,n] -ⓓV.U. + ∀V,U. ❪G,L❫ ⊢ T ➡*[n,h] -ⓓV.U → ❪G,L❫ ⊢ T ➡*𝐍𝐖*[h,n] -ⓓV.U. /3 width=5 by cnuw_abbr_neg, cpmuwe_intro/ qed. lemma cpmuwe_abst (h) (n) (p) (G) (L) (T): - ∀W,U. ⦃G,L⦄ ⊢ T ➡*[n,h] ⓛ{p}W.U → ⦃G,L⦄ ⊢ T ➡*𝐍𝐖*[h,n] ⓛ{p}W.U. + ∀W,U. ❪G,L❫ ⊢ T ➡*[n,h] ⓛ[p]W.U → ❪G,L❫ ⊢ T ➡*𝐍𝐖*[h,n] ⓛ[p]W.U. /3 width=5 by cnuw_abst, cpmuwe_intro/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe_csx.ma index 37015eb4f..026418f4b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpmuwe_csx.ma @@ -23,7 +23,7 @@ include "basic_2/rt_computation/cpmuwe.ma". (* Properties with strong normalization for unbound rt-transition for terms *) lemma cpmuwe_total_csx (h) (G) (L): - ∀T1. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → ∃∃T2,n. ⦃G,L⦄ ⊢ T1 ➡*𝐍𝐖*[h,n] T2. + ∀T1. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T1❫ → ∃∃T2,n. ❪G,L❫ ⊢ T1 ➡*𝐍𝐖*[h,n] T2. #h #G #L #T1 #H @(csx_ind_cpxs … H) -T1 #T1 #_ #IHT1 elim (cnuw_dec_ex h G L T1) @@ -38,7 +38,7 @@ elim (cnuw_dec_ex h G L T1) qed-. lemma R_cpmuwe_total_csx (h) (G) (L): - ∀T1. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → ∃n. R_cpmuwe h G L T1 n. + ∀T1. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T1❫ → ∃n. R_cpmuwe h G L T1 n. #h #G #L #T1 #H elim (cpmuwe_total_csx … H) -H #T2 #n #HT12 /3 width=3 by ex_intro (* 2x *)/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_cpms.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_cpms.ma index 02474ff5f..dec5319a0 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_cpms.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_cpms.ma @@ -20,8 +20,8 @@ include "basic_2/rt_computation/cprre.ma". (* Properties with t-bound rt-computarion on terms **************************) lemma cpms_cprre_trans (h) (n) (G) (L): - ∀T1,T0. ⦃G,L⦄ ⊢T1 ➡*[n,h] T0 → - ∀T2. ⦃G,L⦄ ⊢ T0 ➡*[h] 𝐍⦃T2⦄ → ⦃G,L⦄ ⊢ T1 ➡*[h,n] 𝐍⦃T2⦄. + ∀T1,T0. ❪G,L❫ ⊢T1 ➡*[n,h] T0 → + ∀T2. ❪G,L❫ ⊢ T0 ➡*[h] 𝐍❪T2❫ → ❪G,L❫ ⊢ T1 ➡*[h,n] 𝐍❪T2❫. #h #n #G #L #T1 #T0 #HT10 #T2 * #HT02 #HT2 /3 width=3 by cpms_cprs_trans, cpmre_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_cprre.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_cprre.ma index 24d9483d1..4ffb118a7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_cprre.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_cprre.ma @@ -21,7 +21,7 @@ include "basic_2/rt_computation/cprre.ma". (* Properties with context-sensitive parallel r-computation for terms ******) lemma cprre_cprs_conf (h) (G) (L) (T): - ∀T1. ⦃G,L⦄ ⊢ T ➡*[h] T1 → ∀T2. ⦃G,L⦄ ⊢ T ➡*[h] 𝐍⦃T2⦄ → ⦃G,L⦄ ⊢ T1 ➡*[h] 𝐍⦃T2⦄. + ∀T1. ❪G,L❫ ⊢ T ➡*[h] T1 → ∀T2. ❪G,L❫ ⊢ T ➡*[h] 𝐍❪T2❫ → ❪G,L❫ ⊢ T1 ➡*[h] 𝐍❪T2❫. #h #G #L #T0 #T1 #HT01 #T2 * #HT02 #HT2 elim (cprs_conf … HT01 … HT02) -T0 #T0 #HT10 #HT20 lapply (cprs_inv_cnr_sn … HT20 HT2) -HT20 #H destruct @@ -33,7 +33,7 @@ qed-. (* Basic_1: was: nf2_pr3_confluence *) (* Basic_2A1: was: cpre_mono *) theorem cprre_mono (h) (G) (L) (T): - ∀T1. ⦃G,L⦄ ⊢ T ➡*[h] 𝐍⦃T1⦄ → ∀T2. ⦃G,L⦄ ⊢ T ➡*[h] 𝐍⦃T2⦄ → T1 = T2. + ∀T1. ❪G,L❫ ⊢ T ➡*[h] 𝐍❪T1❫ → ∀T2. ❪G,L❫ ⊢ T ➡*[h] 𝐍❪T2❫ → T1 = T2. #h #G #L #T0 #T1 * #HT01 #HT1 #T2 * #HT02 #HT2 elim (cprs_conf … HT01 … HT02) -T0 #T0 #HT10 #HT20 >(cprs_inv_cnr_sn … HT10 HT1) -T1 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_csx.ma index fac487cab..b56a6207e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprre_csx.ma @@ -24,7 +24,7 @@ include "basic_2/rt_computation/cprre.ma". (* Basic_1: was just: nf2_sn3 *) (* Basic_2A1: was: csx_cpre *) lemma cprre_total_csx (h) (G) (L): - ∀T1. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → ∃T2. ⦃G,L⦄ ⊢ T1 ➡*[h] 𝐍⦃T2⦄. + ∀T1. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T1❫ → ∃T2. ❪G,L❫ ⊢ T1 ➡*[h] 𝐍❪T2❫. #h #G #L #T1 #H @(csx_ind … H) -T1 #T1 #_ #IHT1 elim (cnr_dec_teqx h G L T1) [ /3 width=3 by ex_intro, cpmre_intro/ ] * diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs.ma index 7a9df49a5..4b221d5a4 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs.ma @@ -22,8 +22,8 @@ include "basic_2/rt_computation/cpms.ma". (* Basic_2A1: was: cprs_ind_dx *) lemma cprs_ind_sn (h) (G) (L) (T2) (Q:predicate …): Q T2 → - (∀T1,T. ⦃G,L⦄ ⊢ T1 ➡[h] T → ⦃G,L⦄ ⊢ T ➡*[h] T2 → Q T → Q T1) → - ∀T1. ⦃G,L⦄ ⊢ T1 ➡*[h] T2 → Q T1. + (∀T1,T. ❪G,L❫ ⊢ T1 ➡[h] T → ❪G,L❫ ⊢ T ➡*[h] T2 → Q T → Q T1) → + ∀T1. ❪G,L❫ ⊢ T1 ➡*[h] T2 → Q T1. #h #G #L #T2 #Q #IH1 #IH2 #T1 @(insert_eq_0 … 0) #n #H @(cpms_ind_sn … H) -n -T1 // @@ -35,8 +35,8 @@ qed-. (* Basic_2A1: was: cprs_ind *) lemma cprs_ind_dx (h) (G) (L) (T1) (Q:predicate …): Q T1 → - (∀T,T2. ⦃G,L⦄ ⊢ T1 ➡*[h] T → ⦃G,L⦄ ⊢ T ➡[h] T2 → Q T → Q T2) → - ∀T2. ⦃G,L⦄ ⊢ T1 ➡*[h] T2 → Q T2. + (∀T,T2. ❪G,L❫ ⊢ T1 ➡*[h] T → ❪G,L❫ ⊢ T ➡[h] T2 → Q T → Q T2) → + ∀T2. ❪G,L❫ ⊢ T1 ➡*[h] T2 → Q T2. #h #G #L #T1 #Q #IH1 #IH2 #T2 @(insert_eq_0 … 0) #n #H @(cpms_ind_dx … H) -n -T2 // @@ -50,28 +50,28 @@ qed-. (* Basic_1: was: pr3_step *) (* Basic_2A1: was: cprs_strap2 *) lemma cprs_step_sn (h) (G) (L): - ∀T1,T. ⦃G,L⦄ ⊢ T1 ➡[h] T → - ∀T2. ⦃G,L⦄ ⊢ T ➡*[h] T2 → ⦃G,L⦄ ⊢ T1 ➡*[h] T2. + ∀T1,T. ❪G,L❫ ⊢ T1 ➡[h] T → + ∀T2. ❪G,L❫ ⊢ T ➡*[h] T2 → ❪G,L❫ ⊢ T1 ➡*[h] T2. /2 width=3 by cpms_step_sn/ qed-. (* Basic_2A1: was: cprs_strap1 *) lemma cprs_step_dx (h) (G) (L): - ∀T1,T. ⦃G,L⦄ ⊢ T1 ➡*[h] T → - ∀T2. ⦃G,L⦄ ⊢ T ➡[h] T2 → ⦃G,L⦄ ⊢ T1 ➡*[h] T2. + ∀T1,T. ❪G,L❫ ⊢ T1 ➡*[h] T → + ∀T2. ❪G,L❫ ⊢ T ➡[h] T2 → ❪G,L❫ ⊢ T1 ➡*[h] T2. /2 width=3 by cpms_step_dx/ qed-. (* Basic_1: was only: pr3_thin_dx *) lemma cprs_flat_dx (h) (I) (G) (L): - ∀V1,V2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 → - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ➡*[h] T2 → - ⦃G,L⦄ ⊢ ⓕ{I}V1.T1 ➡*[h] ⓕ{I}V2.T2. + ∀V1,V2. ❪G,L❫ ⊢ V1 ➡[h] V2 → + ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[h] T2 → + ❪G,L❫ ⊢ ⓕ[I]V1.T1 ➡*[h] ⓕ[I]V2.T2. #h #I #G #L #V1 #V2 #HV12 #T1 #T2 #H @(cprs_ind_sn … H) -T1 /3 width=3 by cprs_step_sn, cpm_cpms, cpr_flat/ qed. lemma cprs_flat_sn (h) (I) (G) (L): - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ➡[h] T2 → ∀V1,V2. ⦃G,L⦄ ⊢ V1 ➡*[h] V2 → - ⦃G,L⦄ ⊢ ⓕ{I} V1. T1 ➡*[h] ⓕ{I} V2. T2. + ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[h] T2 → ∀V1,V2. ❪G,L❫ ⊢ V1 ➡*[h] V2 → + ❪G,L❫ ⊢ ⓕ[I] V1. T1 ➡*[h] ⓕ[I] V2. T2. #h #I #G #L #T1 #T2 #HT12 #V1 #V2 #H @(cprs_ind_sn … H) -V1 /3 width=3 by cprs_step_sn, cpm_cpms, cpr_flat/ qed. @@ -79,13 +79,13 @@ qed. (* Basic inversion lemmas ***************************************************) (* Basic_1: was: pr3_gen_sort *) -lemma cprs_inv_sort1 (h) (G) (L): ∀X2,s. ⦃G,L⦄ ⊢ ⋆s ➡*[h] X2 → X2 = ⋆s. +lemma cprs_inv_sort1 (h) (G) (L): ∀X2,s. ❪G,L❫ ⊢ ⋆s ➡*[h] X2 → X2 = ⋆s. /2 width=4 by cpms_inv_sort1/ qed-. (* Basic_1: was: pr3_gen_cast *) -lemma cprs_inv_cast1 (h) (G) (L): ∀W1,T1,X2. ⦃G,L⦄ ⊢ ⓝW1.T1 ➡*[h] X2 → - ∨∨ ∃∃W2,T2. ⦃G,L⦄ ⊢ W1 ➡*[h] W2 & ⦃G,L⦄ ⊢ T1 ➡*[h] T2 & X2 = ⓝW2.T2 - | ⦃G,L⦄ ⊢ T1 ➡*[h] X2. +lemma cprs_inv_cast1 (h) (G) (L): ∀W1,T1,X2. ❪G,L❫ ⊢ ⓝW1.T1 ➡*[h] X2 → + ∨∨ ∃∃W2,T2. ❪G,L❫ ⊢ W1 ➡*[h] W2 & ❪G,L❫ ⊢ T1 ➡*[h] T2 & X2 = ⓝW2.T2 + | ❪G,L❫ ⊢ T1 ➡*[h] X2. #h #G #L #W1 #T1 #X2 #H elim (cpms_inv_cast1 … H) -H [ /2 width=1 by or_introl/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_cnr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_cnr.ma index 8cbb2ee6f..45cad66b7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_cnr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_cnr.ma @@ -22,7 +22,7 @@ include "basic_2/rt_computation/cprs.ma". (* Basic_1: was: nf2_pr3_unfold *) (* Basic_2A1: was: cprs_inv_cnr1 *) lemma cprs_inv_cnr_sn (h) (G) (L): - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ➡*[h] T2 → ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃T1⦄ → T1 = T2. + ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[h] T2 → ❪G,L❫ ⊢ ➡[h] 𝐍❪T1❫ → T1 = T2. #h #G #L #T1 #T2 #H @(cprs_ind_sn … H) -T1 // #T1 #T0 #HT10 #_ #IH #HT1 lapply (HT1 … HT10) -HT10 #H destruct /2 width=1 by/ 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 aba142ab7..562b4e171 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 @@ -39,9 +39,9 @@ qed-. (* Basic_1: was: pr3_flat *) 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. + ∀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/ @@ -53,15 +53,15 @@ qed. (* Basic_1: was pr3_gen_appl *) (* 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 & + ∀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. + | ∃∃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 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_drops.ma index bbc0b19a5..9d083bf26 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_drops.ma @@ -20,9 +20,9 @@ include "basic_2/rt_computation/cpms_drops.ma". (* Basic_1: was: pr3_gen_lref *) (* Basic_2A1: was: cprs_inv_lref1 *) -lemma cprs_inv_lref1_drops (h) (G): ∀L,T2,i. ⦃G,L⦄ ⊢ #i ➡*[h] T2 → +lemma cprs_inv_lref1_drops (h) (G): ∀L,T2,i. ❪G,L❫ ⊢ #i ➡*[h] T2 → ∨∨ T2 = #i - | ∃∃K,V1,T1. ⇩*[i] L ≘ K.ⓓV1 & ⦃G,K⦄ ⊢ V1 ➡*[h] T1 & + | ∃∃K,V1,T1. ⇩*[i] L ≘ K.ⓓV1 & ❪G,K❫ ⊢ V1 ➡*[h] T1 & ⇧*[↑i] T1 ≘ T2. #h #G #L #T2 #i #H elim (cpms_inv_lref1_drops … H) -H * [ /2 width=1 by or_introl/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_lpr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_lpr.ma index 8a578cf5b..b70eb7650 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_lpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_lpr.ma @@ -31,8 +31,8 @@ lemma lpr_cprs_trans (h) (G): s_rs_transitive … (λL. cpm h G L 0) (λ_. lpr h qed-. lemma cprs_lpr_conf_dx (h) (G): - ∀L0,T0,T1. ⦃G,L0⦄ ⊢ T0 ➡*[h] T1 → ∀L1. ⦃G,L0⦄ ⊢ ➡[h] L1 → - ∃∃T. ⦃G,L1⦄ ⊢ T1 ➡*[h] T & ⦃G,L1⦄ ⊢ T0 ➡*[h] T. + ∀L0,T0,T1. ❪G,L0❫ ⊢ T0 ➡*[h] T1 → ∀L1. ❪G,L0❫ ⊢ ➡[h] L1 → + ∃∃T. ❪G,L1❫ ⊢ T1 ➡*[h] T & ❪G,L1❫ ⊢ T0 ➡*[h] T. #h #G #L0 #T0 #T1 #H @(cprs_ind_dx … H) -T1 /2 width=3 by ex2_intro/ #T #T1 #_ #HT1 #IHT0 #L1 #HL01 @@ -43,9 +43,9 @@ elim (cprs_strip … HT2 … HT3) -T qed-. lemma cprs_lpr_conf_sn (h) (G): - ∀L0,T0,T1. ⦃G,L0⦄ ⊢ T0 ➡*[h] T1 → - ∀L1. ⦃G,L0⦄ ⊢ ➡[h] L1 → - ∃∃T. ⦃G,L0⦄ ⊢ T1 ➡*[h] T & ⦃G,L1⦄ ⊢ T0 ➡*[h] T. + ∀L0,T0,T1. ❪G,L0❫ ⊢ T0 ➡*[h] T1 → + ∀L1. ❪G,L0❫ ⊢ ➡[h] L1 → + ∃∃T. ❪G,L0❫ ⊢ T1 ➡*[h] T & ❪G,L1❫ ⊢ T0 ➡*[h] T. #h #G #L0 #T0 #T1 #HT01 #L1 #HL01 elim (cprs_lpr_conf_dx … HT01 … HL01) -HT01 #T #HT1 #HT0 /3 width=3 by lpr_cpms_trans, ex2_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_tweq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_tweq.ma index 7c8102af2..14503c1ec 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_tweq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_tweq.ma @@ -22,7 +22,7 @@ include "basic_2/rt_computation/cpms.ma". (* Properties with sort-irrelevant whd equivalence on terms *****************) lemma cprs_abbr_pos_twneq (h) (G) (L) (V) (T1): - ∃∃T2. ⦃G,L⦄ ⊢ +ⓓV.T1 ➡*[h] T2 & (+ⓓV.T1 ≅ T2 → ⊥). + ∃∃T2. ❪G,L❫ ⊢ +ⓓV.T1 ➡*[h] T2 & (+ⓓV.T1 ≅ T2 → ⊥). #h #G #L #V #U1 elim (cpr_subst h G (L.ⓓV) U1 … 0) [|*: /2 width=4 by drops_refl/ ] #U2 #T2 #HU12 #HTU2 elim (tweq_dec U1 U2) [ #HpU12 | -HTU2 #HnU12 ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpts.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpts.ma index 24b6655b5..9818e6d84 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpts.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpts.ma @@ -29,51 +29,51 @@ interpretation lemma cpts_ind_sn (h) (G) (L) (T2) (Q:relation2 …): Q 0 T2 → - (∀n1,n2,T1,T. ⦃G,L⦄ ⊢ T1 ⬆[h,n1] T → ⦃G,L⦄ ⊢ T ⬆*[h,n2] T2 → Q n2 T → Q (n1+n2) T1) → - ∀n,T1. ⦃G,L⦄ ⊢ T1 ⬆*[h,n] T2 → Q n T1. + (∀n1,n2,T1,T. ❪G,L❫ ⊢ T1 ⬆[h,n1] T → ❪G,L❫ ⊢ T ⬆*[h,n2] T2 → Q n2 T → Q (n1+n2) T1) → + ∀n,T1. ❪G,L❫ ⊢ T1 ⬆*[h,n] T2 → Q n T1. #h #G #L #T2 #Q @ltc_ind_sn_refl // qed-. lemma cpts_ind_dx (h) (G) (L) (T1) (Q:relation2 …): Q 0 T1 → - (∀n1,n2,T,T2. ⦃G,L⦄ ⊢ T1 ⬆*[h,n1] T → Q n1 T → ⦃G,L⦄ ⊢ T ⬆[h,n2] T2 → Q (n1+n2) T2) → - ∀n,T2. ⦃G,L⦄ ⊢ T1 ⬆*[h,n] T2 → Q n T2. + (∀n1,n2,T,T2. ❪G,L❫ ⊢ T1 ⬆*[h,n1] T → Q n1 T → ❪G,L❫ ⊢ T ⬆[h,n2] T2 → Q (n1+n2) T2) → + ∀n,T2. ❪G,L❫ ⊢ T1 ⬆*[h,n] T2 → Q n T2. #h #G #L #T1 #Q @ltc_ind_dx_refl // qed-. (* Basic properties *********************************************************) lemma cpt_cpts (h) (G) (L): - ∀n,T1,T2. ⦃G,L⦄ ⊢ T1 ⬆[h,n] T2 → ⦃G,L⦄ ⊢ T1 ⬆*[h,n] T2. + ∀n,T1,T2. ❪G,L❫ ⊢ T1 ⬆[h,n] T2 → ❪G,L❫ ⊢ T1 ⬆*[h,n] T2. /2 width=1 by ltc_rc/ qed. lemma cpts_step_sn (h) (G) (L): - ∀n1,T1,T. ⦃G,L⦄ ⊢ T1 ⬆[h,n1] T → - ∀n2,T2. ⦃G,L⦄ ⊢ T ⬆*[h,n2] T2 → ⦃G,L⦄ ⊢ T1 ⬆*[h,n1+n2] T2. + ∀n1,T1,T. ❪G,L❫ ⊢ T1 ⬆[h,n1] T → + ∀n2,T2. ❪G,L❫ ⊢ T ⬆*[h,n2] T2 → ❪G,L❫ ⊢ T1 ⬆*[h,n1+n2] T2. /2 width=3 by ltc_sn/ qed-. lemma cpts_step_dx (h) (G) (L): - ∀n1,T1,T. ⦃G,L⦄ ⊢ T1 ⬆*[h,n1] T → - ∀n2,T2. ⦃G,L⦄ ⊢ T ⬆[h,n2] T2 → ⦃G,L⦄ ⊢ T1 ⬆*[h,n1+n2] T2. + ∀n1,T1,T. ❪G,L❫ ⊢ T1 ⬆*[h,n1] T → + ∀n2,T2. ❪G,L❫ ⊢ T ⬆[h,n2] T2 → ❪G,L❫ ⊢ T1 ⬆*[h,n1+n2] T2. /2 width=3 by ltc_dx/ qed-. lemma cpts_bind_dx (h) (n) (G) (L): - ∀V1,V2. ⦃G,L⦄ ⊢ V1 ⬆[h,0] V2 → - ∀I,T1,T2. ⦃G,L.ⓑ{I}V1⦄ ⊢ T1 ⬆*[h,n] T2 → - ∀p. ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T1 ⬆*[h,n] ⓑ{p,I}V2.T2. + ∀V1,V2. ❪G,L❫ ⊢ V1 ⬆[h,0] V2 → + ∀I,T1,T2. ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬆*[h,n] T2 → + ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬆*[h,n] ⓑ[p,I]V2.T2. #h #n #G #L #V1 #V2 #HV12 #I #T1 #T2 #H #a @(cpts_ind_sn … H) -T1 /3 width=3 by cpts_step_sn, cpt_cpts, cpt_bind/ qed. lemma cpts_appl_dx (h) (n) (G) (L): - ∀V1,V2. ⦃G,L⦄ ⊢ V1 ⬆[h,0] V2 → - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ⬆*[h,n] T2 → ⦃G,L⦄ ⊢ ⓐV1.T1 ⬆*[h,n] ⓐV2.T2. + ∀V1,V2. ❪G,L❫ ⊢ V1 ⬆[h,0] V2 → + ∀T1,T2. ❪G,L❫ ⊢ T1 ⬆*[h,n] T2 → ❪G,L❫ ⊢ ⓐV1.T1 ⬆*[h,n] ⓐV2.T2. #h #n #G #L #V1 #V2 #HV12 #T1 #T2 #H @(cpts_ind_sn … H) -T1 /3 width=3 by cpts_step_sn, cpt_cpts, cpt_appl/ qed. lemma cpts_ee (h) (n) (G) (L): - ∀U1,U2. ⦃G,L⦄ ⊢ U1 ⬆*[h,n] U2 → - ∀T. ⦃G,L⦄ ⊢ ⓝU1.T ⬆*[h,↑n] U2. + ∀U1,U2. ❪G,L❫ ⊢ U1 ⬆*[h,n] U2 → + ∀T. ❪G,L❫ ⊢ ⓝU1.T ⬆*[h,↑n] U2. #h #n #G #L #U1 #U2 #H @(cpts_ind_sn … H) -U1 -n [ /3 width=1 by cpt_cpts, cpt_ee/ | #n1 #n2 #U1 #U #HU1 #HU2 #_ #T >plus_S1 @@ -87,7 +87,7 @@ lemma cpts_refl (h) (G) (L): reflexive … (cpts h G L 0). (* Advanced properties ******************************************************) lemma cpts_sort (h) (G) (L) (n): - ∀s. ⦃G,L⦄ ⊢ ⋆s ⬆*[h,n] ⋆((next h)^n s). + ∀s. ❪G,L❫ ⊢ ⋆s ⬆*[h,n] ⋆((next h)^n s). #h #G #L #n elim n -n [ // ] #n #IH #s plus_S1 + elim (lifts_total V (𝐔❨1❩)) #W #HVW >plus_S1 /5 width=11 by cpts_step_dx, cpt_lifts_bi, drops_refl, drops_drop/ ] qed. lemma cpts_lref (h) (n) (I) (G): - ∀K,T,i. ⦃G,K⦄ ⊢ #i ⬆*[h,n] T → - ∀U. ⇧*[1] T ≘ U → ⦃G,K.ⓘ{I}⦄ ⊢ #↑i ⬆*[h,n] U. + ∀K,T,i. ❪G,K❫ ⊢ #i ⬆*[h,n] T → + ∀U. ⇧*[1] T ≘ U → ❪G,K.ⓘ[I]❫ ⊢ #↑i ⬆*[h,n] U. #h #n #I #G #K #T #i #H @(cpts_ind_dx … H) -T [ /3 width=3 by cpt_cpts, cpt_lref/ | #n1 #n2 #T #T2 #_ #IH #HT2 #U2 #HTU2 - elim (lifts_total T (𝐔❴1❵)) #U #TU + elim (lifts_total T (𝐔❨1❩)) #U #TU /5 width=11 by cpts_step_dx, cpt_lifts_bi, drops_refl, drops_drop/ ] qed. lemma cpts_cast_sn (h) (n) (G) (L): - ∀U1,U2. ⦃G,L⦄ ⊢ U1 ⬆*[h,n] U2 → - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ⬆[h,n] T2 → ⦃G,L⦄ ⊢ ⓝU1.T1 ⬆*[h,n] ⓝU2.T2. + ∀U1,U2. ❪G,L❫ ⊢ U1 ⬆*[h,n] U2 → + ∀T1,T2. ❪G,L❫ ⊢ T1 ⬆[h,n] T2 → ❪G,L❫ ⊢ ⓝU1.T1 ⬆*[h,n] ⓝU2.T2. #h #n #G #L #U1 #U2 #H @(cpts_ind_sn … H) -U1 -n [ /3 width=3 by cpt_cpts, cpt_cast/ | #n1 #n2 #U1 #U #HU1 #_ #IH #T1 #T2 #H @@ -90,26 +90,26 @@ qed. lemma cpts_delta_drops (h) (n) (G): ∀L,K,V,i. ⇩*[i] L ≘ K.ⓓV → - ∀V2. ⦃G,K⦄ ⊢ V ⬆*[h,n] V2 → - ∀W2. ⇧*[↑i] V2 ≘ W2 → ⦃G,L⦄ ⊢ #i ⬆*[h,n] W2. + ∀V2. ❪G,K❫ ⊢ V ⬆*[h,n] V2 → + ∀W2. ⇧*[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ⬆*[h,n] W2. #h #n #G #L #K #V #i #HLK #V2 #H @(cpts_ind_dx … H) -V2 [ /3 width=6 by cpt_cpts, cpt_delta_drops/ | #n1 #n2 #V1 #V2 #_ #IH #HV12 #W2 #HVW2 lapply (drops_isuni_fwd_drop2 … HLK) -HLK // #HLK - elim (lifts_total V1 (𝐔❴↑i❵)) #W1 #HVW1 + elim (lifts_total V1 (𝐔❨↑i❩)) #W1 #HVW1 /3 width=11 by cpt_lifts_bi, cpts_step_dx/ ] qed. lemma cpts_ell_drops (h) (n) (G): ∀L,K,W,i. ⇩*[i] L ≘ K.ⓛW → - ∀W2. ⦃G,K⦄ ⊢ W ⬆*[h,n] W2 → - ∀V2. ⇧*[↑i] W2 ≘ V2 → ⦃G,L⦄ ⊢ #i ⬆*[h,↑n] V2. + ∀W2. ❪G,K❫ ⊢ W ⬆*[h,n] W2 → + ∀V2. ⇧*[↑i] W2 ≘ V2 → ❪G,L❫ ⊢ #i ⬆*[h,↑n] V2. #h #n #G #L #K #W #i #HLK #W2 #H @(cpts_ind_dx … H) -W2 [ /3 width=6 by cpt_cpts, cpt_ell_drops/ | #n1 #n2 #W1 #W2 #_ #IH #HW12 #V2 #HWV2 lapply (drops_isuni_fwd_drop2 … HLK) -HLK // #HLK - elim (lifts_total W1 (𝐔❴↑i❵)) #V1 #HWV1 >plus_S1 + elim (lifts_total W1 (𝐔❨↑i❩)) #V1 #HWV1 >plus_S1 /3 width=11 by cpt_lifts_bi, cpts_step_dx/ ] qed. @@ -117,10 +117,10 @@ qed. (* Advanced inversion lemmas ************************************************) lemma cpts_inv_lref_sn_drops (h) (n) (G) (L) (i): - ∀X2. ⦃G,L⦄ ⊢ #i ⬆*[h,n] X2 → + ∀X2. ❪G,L❫ ⊢ #i ⬆*[h,n] X2 → ∨∨ ∧∧ X2 = #i & n = 0 - | ∃∃K,V,V2. ⇩*[i] L ≘ K.ⓓV & ⦃G,K⦄ ⊢ V ⬆*[h,n] V2 & ⇧*[↑i] V2 ≘ X2 - | ∃∃m,K,V,V2. ⇩*[i] L ≘ K.ⓛV & ⦃G,K⦄ ⊢ V ⬆*[h,m] V2 & ⇧*[↑i] V2 ≘ X2 & n = ↑m. + | ∃∃K,V,V2. ⇩*[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ⬆*[h,n] V2 & ⇧*[↑i] V2 ≘ X2 + | ∃∃m,K,V,V2. ⇩*[i] L ≘ K.ⓛV & ❪G,K❫ ⊢ V ⬆*[h,m] V2 & ⇧*[↑i] V2 ≘ X2 & n = ↑m. #h #n #G #L #i #X2 #H @(cpts_ind_dx … H) -X2 [ /3 width=1 by or3_intro0, conj/ | #n1 #n2 #T #T2 #_ #IH #HT2 cases IH -IH * @@ -143,9 +143,9 @@ lemma cpts_inv_lref_sn_drops (h) (n) (G) (L) (i): qed-. lemma cpts_inv_delta_sn (h) (n) (G) (K) (V): - ∀X2. ⦃G,K.ⓓV⦄ ⊢ #0 ⬆*[h,n] X2 → + ∀X2. ❪G,K.ⓓV❫ ⊢ #0 ⬆*[h,n] X2 → ∨∨ ∧∧ X2 = #0 & n = 0 - | ∃∃V2. ⦃G,K⦄ ⊢ V ⬆*[h,n] V2 & ⇧*[1] V2 ≘ X2. + | ∃∃V2. ❪G,K❫ ⊢ V ⬆*[h,n] V2 & ⇧*[1] V2 ≘ X2. #h #n #G #K #V #X2 #H elim (cpts_inv_lref_sn_drops … H) -H * [ /3 width=1 by or_introl, conj/ @@ -158,9 +158,9 @@ elim (cpts_inv_lref_sn_drops … H) -H * qed-. lemma cpts_inv_ell_sn (h) (n) (G) (K) (V): - ∀X2. ⦃G,K.ⓛV⦄ ⊢ #0 ⬆*[h,n] X2 → + ∀X2. ❪G,K.ⓛV❫ ⊢ #0 ⬆*[h,n] X2 → ∨∨ ∧∧ X2 = #0 & n = 0 - | ∃∃m,V2. ⦃G,K⦄ ⊢ V ⬆*[h,m] V2 & ⇧*[1] V2 ≘ X2 & n = ↑m. + | ∃∃m,V2. ❪G,K❫ ⊢ V ⬆*[h,m] V2 & ⇧*[1] V2 ≘ X2 & n = ↑m. #h #n #G #K #V #X2 #H elim (cpts_inv_lref_sn_drops … H) -H * [ /3 width=1 by or_introl, conj/ @@ -173,28 +173,28 @@ elim (cpts_inv_lref_sn_drops … H) -H * qed-. lemma cpts_inv_lref_sn (h) (n) (I) (G) (K) (i): - ∀X2. ⦃G,K.ⓘ{I}⦄ ⊢ #↑i ⬆*[h,n] X2 → + ∀X2. ❪G,K.ⓘ[I]❫ ⊢ #↑i ⬆*[h,n] X2 → ∨∨ ∧∧ X2 = #↑i & n = 0 - | ∃∃T2. ⦃G,K⦄ ⊢ #i ⬆*[h,n] T2 & ⇧*[1] T2 ≘ X2. + | ∃∃T2. ❪G,K❫ ⊢ #i ⬆*[h,n] T2 & ⇧*[1] T2 ≘ X2. #h #n #I #G #K #i #X2 #H elim (cpts_inv_lref_sn_drops … H) -H * [ /3 width=1 by or_introl, conj/ | #L #V #V2 #H #HV2 #HVU2 lapply (drops_inv_drop1 … H) -H #HLK - elim (lifts_split_trans … HVU2 (𝐔❴↑i❵) (𝐔❴1❵)) -HVU2 + elim (lifts_split_trans … HVU2 (𝐔❨↑i❩) (𝐔❨1❩)) -HVU2 [| // ] #T2 #HVT2 #HTU2 /4 width=6 by cpts_delta_drops, ex2_intro, or_intror/ | #m #L #V #V2 #H #HV2 #HVU2 #H0 destruct lapply (drops_inv_drop1 … H) -H #HLK - elim (lifts_split_trans … HVU2 (𝐔❴↑i❵) (𝐔❴1❵)) -HVU2 + elim (lifts_split_trans … HVU2 (𝐔❨↑i❩) (𝐔❨1❩)) -HVU2 [| // ] #T2 #HVT2 #HTU2 /4 width=6 by cpts_ell_drops, ex2_intro, or_intror/ ] qed-. lemma cpts_inv_succ_sn (h) (n) (G) (L): - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ⬆*[h,↑n] T2 → - ∃∃T. ⦃G,L⦄ ⊢ T1 ⬆*[h,1] T & ⦃G,L⦄ ⊢ T ⬆*[h,n] T2. + ∀T1,T2. ❪G,L❫ ⊢ T1 ⬆*[h,↑n] T2 → + ∃∃T. ❪G,L❫ ⊢ T1 ⬆*[h,1] T & ❪G,L❫ ⊢ T ⬆*[h,n] T2. #h #n #G #L #T1 #T2 @(insert_eq_0 … (↑n)) #m #H @(cpts_ind_sn … H) -T1 -m diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs.ma index 5081b65ec..bbf9483b2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs.ma @@ -27,71 +27,71 @@ interpretation "unbound context-sensitive parallel rt-computation (term)" (* Basic eliminators ********************************************************) lemma cpxs_ind: ∀h,G,L,T1. ∀Q:predicate term. Q T1 → - (∀T,T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T → ⦃G,L⦄ ⊢ T ⬈[h] T2 → Q T → Q T2) → - ∀T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → Q T2. + (∀T,T2. ❪G,L❫ ⊢ T1 ⬈*[h] T → ❪G,L❫ ⊢ T ⬈[h] T2 → Q T → Q T2) → + ∀T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → Q T2. #h #L #G #T1 #Q #HT1 #IHT1 #T2 #HT12 @(TC_star_ind … HT1 IHT1 … HT12) // qed-. lemma cpxs_ind_dx: ∀h,G,L,T2. ∀Q:predicate term. Q T2 → - (∀T1,T. ⦃G,L⦄ ⊢ T1 ⬈[h] T → ⦃G,L⦄ ⊢ T ⬈*[h] T2 → Q T → Q T1) → - ∀T1. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → Q T1. + (∀T1,T. ❪G,L❫ ⊢ T1 ⬈[h] T → ❪G,L❫ ⊢ T ⬈*[h] T2 → Q T → Q T1) → + ∀T1. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → Q T1. #h #G #L #T2 #Q #HT2 #IHT2 #T1 #HT12 @(TC_star_ind_dx … HT2 IHT2 … HT12) // qed-. (* Basic properties *********************************************************) -lemma cpxs_refl: ∀h,G,L,T. ⦃G,L⦄ ⊢ T ⬈*[h] T. +lemma cpxs_refl: ∀h,G,L,T. ❪G,L❫ ⊢ T ⬈*[h] T. /2 width=1 by inj/ qed. -lemma cpx_cpxs: ∀h,G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈[h] T2 → ⦃G,L⦄ ⊢ T1 ⬈*[h] T2. +lemma cpx_cpxs: ∀h,G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬈[h] T2 → ❪G,L❫ ⊢ T1 ⬈*[h] T2. /2 width=1 by inj/ qed. -lemma cpxs_strap1: ∀h,G,L,T1,T. ⦃G,L⦄ ⊢ T1 ⬈*[h] T → - ∀T2. ⦃G,L⦄ ⊢ T ⬈[h] T2 → ⦃G,L⦄ ⊢ T1 ⬈*[h] T2. +lemma cpxs_strap1: ∀h,G,L,T1,T. ❪G,L❫ ⊢ T1 ⬈*[h] T → + ∀T2. ❪G,L❫ ⊢ T ⬈[h] T2 → ❪G,L❫ ⊢ T1 ⬈*[h] T2. normalize /2 width=3 by step/ qed-. -lemma cpxs_strap2: ∀h,G,L,T1,T. ⦃G,L⦄ ⊢ T1 ⬈[h] T → - ∀T2. ⦃G,L⦄ ⊢ T ⬈*[h] T2 → ⦃G,L⦄ ⊢ T1 ⬈*[h] T2. +lemma cpxs_strap2: ∀h,G,L,T1,T. ❪G,L❫ ⊢ T1 ⬈[h] T → + ∀T2. ❪G,L❫ ⊢ T ⬈*[h] T2 → ❪G,L❫ ⊢ T1 ⬈*[h] T2. normalize /2 width=3 by TC_strap/ qed-. (* Basic_2A1: was just: cpxs_sort *) -lemma cpxs_sort: ∀h,G,L,s,n. ⦃G,L⦄ ⊢ ⋆s ⬈*[h] ⋆((next h)^n s). +lemma cpxs_sort: ∀h,G,L,s,n. ❪G,L❫ ⊢ ⋆s ⬈*[h] ⋆((next h)^n s). #h #G #L #s #n elim n -n /2 width=1 by cpx_cpxs/ #n >iter_S /2 width=3 by cpxs_strap1/ qed. -lemma cpxs_bind_dx: ∀h,G,L,V1,V2. ⦃G,L⦄ ⊢ V1 ⬈[h] V2 → - ∀I,T1,T2. ⦃G,L. ⓑ{I}V1⦄ ⊢ T1 ⬈*[h] T2 → - ∀p. ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T1 ⬈*[h] ⓑ{p,I}V2.T2. +lemma cpxs_bind_dx: ∀h,G,L,V1,V2. ❪G,L❫ ⊢ V1 ⬈[h] V2 → + ∀I,T1,T2. ❪G,L. ⓑ[I]V1❫ ⊢ T1 ⬈*[h] T2 → + ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈*[h] ⓑ[p,I]V2.T2. #h #G #L #V1 #V2 #HV12 #I #T1 #T2 #HT12 #a @(cpxs_ind_dx … HT12) -T1 /3 width=3 by cpxs_strap2, cpx_cpxs, cpx_pair_sn, cpx_bind/ qed. -lemma cpxs_flat_dx: ∀h,G,L,V1,V2. ⦃G,L⦄ ⊢ V1 ⬈[h] V2 → - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → - ∀I. ⦃G,L⦄ ⊢ ⓕ{I}V1.T1 ⬈*[h] ⓕ{I}V2.T2. +lemma cpxs_flat_dx: ∀h,G,L,V1,V2. ❪G,L❫ ⊢ V1 ⬈[h] V2 → + ∀T1,T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → + ∀I. ❪G,L❫ ⊢ ⓕ[I]V1.T1 ⬈*[h] ⓕ[I]V2.T2. #h #G #L #V1 #V2 #HV12 #T1 #T2 #HT12 @(cpxs_ind … HT12) -T2 /3 width=5 by cpxs_strap1, cpx_cpxs, cpx_pair_sn, cpx_flat/ qed. -lemma cpxs_flat_sn: ∀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. +lemma cpxs_flat_sn: ∀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 @(cpxs_ind … H) -V2 /3 width=5 by cpxs_strap1, cpx_cpxs, cpx_pair_sn, cpx_flat/ qed. -lemma cpxs_pair_sn: ∀h,I,G,L,V1,V2. ⦃G,L⦄ ⊢ V1 ⬈*[h] V2 → - ∀T. ⦃G,L⦄ ⊢ ②{I}V1.T ⬈*[h] ②{I}V2.T. +lemma cpxs_pair_sn: ∀h,I,G,L,V1,V2. ❪G,L❫ ⊢ V1 ⬈*[h] V2 → + ∀T. ❪G,L❫ ⊢ ②[I]V1.T ⬈*[h] ②[I]V2.T. #h #I #G #L #V1 #V2 #H @(cpxs_ind … H) -V2 /3 width=3 by cpxs_strap1, cpx_pair_sn/ qed. lemma cpxs_zeta (h) (G) (L) (V): ∀T1,T. ⇧*[1] T ≘ T1 → - ∀T2. ⦃G,L⦄ ⊢ T ⬈*[h] T2 → ⦃G,L⦄ ⊢ +ⓓV.T1 ⬈*[h] T2. + ∀T2. ❪G,L❫ ⊢ T ⬈*[h] T2 → ❪G,L❫ ⊢ +ⓓV.T1 ⬈*[h] T2. #h #G #L #V #T1 #T #HT1 #T2 #H @(cpxs_ind … H) -T2 /3 width=3 by cpxs_strap1, cpx_cpxs, cpx_zeta/ qed. @@ -99,34 +99,34 @@ qed. (* Basic_2A1: was: cpxs_zeta *) lemma cpxs_zeta_dx (h) (G) (L) (V): ∀T2,T. ⇧*[1] T2 ≘ T → - ∀T1. ⦃G,L.ⓓV⦄ ⊢ T1 ⬈*[h] T → ⦃G,L⦄ ⊢ +ⓓV.T1 ⬈*[h] T2. + ∀T1. ❪G,L.ⓓV❫ ⊢ T1 ⬈*[h] T → ❪G,L❫ ⊢ +ⓓV.T1 ⬈*[h] T2. #h #G #L #V #T2 #T #HT2 #T1 #H @(cpxs_ind_dx … H) -T1 /3 width=3 by cpxs_strap2, cpx_cpxs, cpx_bind, cpx_zeta/ qed. -lemma cpxs_eps: ∀h,G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → - ∀V. ⦃G,L⦄ ⊢ ⓝV.T1 ⬈*[h] T2. +lemma cpxs_eps: ∀h,G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → + ∀V. ❪G,L❫ ⊢ ⓝV.T1 ⬈*[h] T2. #h #G #L #T1 #T2 #H @(cpxs_ind … H) -T2 /3 width=3 by cpxs_strap1, cpx_cpxs, cpx_eps/ qed. (* Basic_2A1: was: cpxs_ct *) -lemma cpxs_ee: ∀h,G,L,V1,V2. ⦃G,L⦄ ⊢ V1 ⬈*[h] V2 → - ∀T. ⦃G,L⦄ ⊢ ⓝV1.T ⬈*[h] V2. +lemma cpxs_ee: ∀h,G,L,V1,V2. ❪G,L❫ ⊢ V1 ⬈*[h] V2 → + ∀T. ❪G,L❫ ⊢ ⓝV1.T ⬈*[h] V2. #h #G #L #V1 #V2 #H @(cpxs_ind … H) -V2 /3 width=3 by cpxs_strap1, cpx_cpxs, cpx_ee/ qed. lemma cpxs_beta_dx: ∀h,p,G,L,V1,V2,W1,W2,T1,T2. - ⦃G,L⦄ ⊢ V1 ⬈[h] V2 → ⦃G,L.ⓛW1⦄ ⊢ T1 ⬈*[h] T2 → ⦃G,L⦄ ⊢ W1 ⬈[h] W2 → - ⦃G,L⦄ ⊢ ⓐV1.ⓛ{p}W1.T1 ⬈*[h] ⓓ{p}ⓝW2.V2.T2. + ❪G,L❫ ⊢ V1 ⬈[h] V2 → ❪G,L.ⓛW1❫ ⊢ T1 ⬈*[h] T2 → ❪G,L❫ ⊢ W1 ⬈[h] W2 → + ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ⬈*[h] ⓓ[p]ⓝW2.V2.T2. #h #p #G #L #V1 #V2 #W1 #W2 #T1 #T2 #HV12 * -T2 /4 width=7 by cpx_cpxs, cpxs_strap1, cpxs_bind_dx, cpxs_flat_dx, cpx_beta/ qed. lemma cpxs_theta_dx: ∀h,p,G,L,V1,V,V2,W1,W2,T1,T2. - ⦃G,L⦄ ⊢ V1 ⬈[h] V → ⇧*[1] V ≘ V2 → ⦃G,L.ⓓW1⦄ ⊢ T1 ⬈*[h] T2 → - ⦃G,L⦄ ⊢ W1 ⬈[h] W2 → ⦃G,L⦄ ⊢ ⓐV1.ⓓ{p}W1.T1 ⬈*[h] ⓓ{p}W2.ⓐV2.T2. + ❪G,L❫ ⊢ V1 ⬈[h] V → ⇧*[1] V ≘ V2 → ❪G,L.ⓓW1❫ ⊢ T1 ⬈*[h] T2 → + ❪G,L❫ ⊢ W1 ⬈[h] W2 → ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ⬈*[h] ⓓ[p]W2.ⓐV2.T2. #h #p #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV1 #HV2 * -T2 /4 width=9 by cpx_cpxs, cpxs_strap1, cpxs_bind_dx, cpxs_flat_dx, cpx_theta/ qed. @@ -134,7 +134,7 @@ qed. (* Basic inversion lemmas ***************************************************) (* Basic_2A1: wa just: cpxs_inv_sort1 *) -lemma cpxs_inv_sort1: ∀h,G,L,X2,s. ⦃G,L⦄ ⊢ ⋆s ⬈*[h] X2 → +lemma cpxs_inv_sort1: ∀h,G,L,X2,s. ❪G,L❫ ⊢ ⋆s ⬈*[h] X2 → ∃n. X2 = ⋆((next h)^n s). #h #G #L #X2 #s #H @(cpxs_ind … H) -X2 /2 width=2 by ex_intro/ #X #X2 #_ #HX2 * #n #H destruct @@ -142,10 +142,10 @@ elim (cpx_inv_sort1 … HX2) -HX2 #H destruct /2 width=2 by ex_intro/ @(ex_intro … (↑n)) >iter_S // qed-. -lemma cpxs_inv_cast1: ∀h,G,L,W1,T1,U2. ⦃G,L⦄ ⊢ ⓝW1.T1 ⬈*[h] U2 → - ∨∨ ∃∃W2,T2. ⦃G,L⦄ ⊢ W1 ⬈*[h] W2 & ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 & U2 = ⓝW2.T2 - | ⦃G,L⦄ ⊢ T1 ⬈*[h] U2 - | ⦃G,L⦄ ⊢ W1 ⬈*[h] U2. +lemma cpxs_inv_cast1: ∀h,G,L,W1,T1,U2. ❪G,L❫ ⊢ ⓝW1.T1 ⬈*[h] U2 → + ∨∨ ∃∃W2,T2. ❪G,L❫ ⊢ W1 ⬈*[h] W2 & ❪G,L❫ ⊢ T1 ⬈*[h] T2 & U2 = ⓝW2.T2 + | ❪G,L❫ ⊢ T1 ⬈*[h] U2 + | ❪G,L❫ ⊢ W1 ⬈*[h] U2. #h #G #L #W1 #T1 #U2 #H @(cpxs_ind … H) -U2 /3 width=5 by or3_intro0, ex3_2_intro/ #U2 #U #_ #HU2 * /3 width=3 by cpxs_strap1, or3_intro1, or3_intro2/ * #W #T #HW1 #HT1 #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_cnx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_cnx.ma index d10463afe..98e81b543 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_cnx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_cnx.ma @@ -20,13 +20,13 @@ include "basic_2/rt_computation/cpxs.ma". (* Properties with normal forms *********************************************) lemma cpxs_cnx (h) (G) (L) (T1): - (∀T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → T1 ≛ T2) → ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃T1⦄. + (∀T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → T1 ≛ T2) → ❪G,L❫ ⊢ ⬈[h] 𝐍❪T1❫. /3 width=1 by cpx_cpxs/ qed. (* Inversion lemmas with normal terms ***************************************) lemma cpxs_inv_cnx1 (h) (G) (L): - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃T1⦄ → T1 ≛ T2. + ∀T1,T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → ❪G,L❫ ⊢ ⬈[h] 𝐍❪T1❫ → T1 ≛ T2. #h #G #L #T1 #T2 #H @(cpxs_ind_dx … H) -T1 /5 width=9 by cnx_teqx_trans, teqx_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_cpxs.ma index e2347a296..5ab4a3915 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_cpxs.ma @@ -23,58 +23,58 @@ include "basic_2/rt_computation/cpxs.ma". theorem cpxs_trans: ∀h,G,L. Transitive … (cpxs h G L). normalize /2 width=3 by trans_TC/ qed-. -theorem cpxs_bind: ∀h,p,I,G,L,V1,V2,T1,T2. ⦃G,L.ⓑ{I}V1⦄ ⊢ T1 ⬈*[h] T2 → - ⦃G,L⦄ ⊢ V1 ⬈*[h] V2 → - ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T1 ⬈*[h] ⓑ{p,I}V2.T2. +theorem cpxs_bind: ∀h,p,I,G,L,V1,V2,T1,T2. ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬈*[h] T2 → + ❪G,L❫ ⊢ V1 ⬈*[h] V2 → + ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈*[h] ⓑ[p,I]V2.T2. #h #p #I #G #L #V1 #V2 #T1 #T2 #HT12 #H @(cpxs_ind … H) -V2 /3 width=5 by cpxs_trans, cpxs_bind_dx/ qed. -theorem cpxs_flat: ∀h,I,G,L,V1,V2,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → - ⦃G,L⦄ ⊢ V1 ⬈*[h] V2 → - ⦃G,L⦄ ⊢ ⓕ{I}V1.T1 ⬈*[h] ⓕ{I}V2.T2. +theorem cpxs_flat: ∀h,I,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → + ❪G,L❫ ⊢ V1 ⬈*[h] V2 → + ❪G,L❫ ⊢ ⓕ[I]V1.T1 ⬈*[h] ⓕ[I]V2.T2. #h #I #G #L #V1 #V2 #T1 #T2 #HT12 #H @(cpxs_ind … H) -V2 /3 width=5 by cpxs_trans, cpxs_flat_dx/ qed. theorem cpxs_beta_rc: ∀h,p,G,L,V1,V2,W1,W2,T1,T2. - ⦃G,L⦄ ⊢ V1 ⬈[h] V2 → ⦃G,L.ⓛW1⦄ ⊢ T1 ⬈*[h] T2 → ⦃G,L⦄ ⊢ W1 ⬈*[h] W2 → - ⦃G,L⦄ ⊢ ⓐV1.ⓛ{p}W1.T1 ⬈*[h] ⓓ{p}ⓝW2.V2.T2. + ❪G,L❫ ⊢ V1 ⬈[h] V2 → ❪G,L.ⓛW1❫ ⊢ T1 ⬈*[h] T2 → ❪G,L❫ ⊢ W1 ⬈*[h] W2 → + ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ⬈*[h] ⓓ[p]ⓝW2.V2.T2. #h #p #G #L #V1 #V2 #W1 #W2 #T1 #T2 #HV12 #HT12 #H @(cpxs_ind … H) -W2 /4 width=5 by cpxs_trans, cpxs_beta_dx, cpxs_bind_dx, cpx_pair_sn/ qed. theorem cpxs_beta: ∀h,p,G,L,V1,V2,W1,W2,T1,T2. - ⦃G,L.ⓛW1⦄ ⊢ T1 ⬈*[h] T2 → ⦃G,L⦄ ⊢ W1 ⬈*[h] W2 → ⦃G,L⦄ ⊢ V1 ⬈*[h] V2 → - ⦃G,L⦄ ⊢ ⓐV1.ⓛ{p}W1.T1 ⬈*[h] ⓓ{p}ⓝW2.V2.T2. + ❪G,L.ⓛW1❫ ⊢ T1 ⬈*[h] T2 → ❪G,L❫ ⊢ W1 ⬈*[h] W2 → ❪G,L❫ ⊢ V1 ⬈*[h] V2 → + ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ⬈*[h] ⓓ[p]ⓝW2.V2.T2. #h #p #G #L #V1 #V2 #W1 #W2 #T1 #T2 #HT12 #HW12 #H @(cpxs_ind … H) -V2 /4 width=5 by cpxs_trans, cpxs_beta_rc, cpxs_bind_dx, cpx_flat/ qed. theorem cpxs_theta_rc: ∀h,p,G,L,V1,V,V2,W1,W2,T1,T2. - ⦃G,L⦄ ⊢ V1 ⬈[h] V → ⇧*[1] V ≘ V2 → - ⦃G,L.ⓓW1⦄ ⊢ T1 ⬈*[h] T2 → ⦃G,L⦄ ⊢ W1 ⬈*[h] W2 → - ⦃G,L⦄ ⊢ ⓐV1.ⓓ{p}W1.T1 ⬈*[h] ⓓ{p}W2.ⓐV2.T2. + ❪G,L❫ ⊢ V1 ⬈[h] V → ⇧*[1] V ≘ V2 → + ❪G,L.ⓓW1❫ ⊢ T1 ⬈*[h] T2 → ❪G,L❫ ⊢ W1 ⬈*[h] W2 → + ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ⬈*[h] ⓓ[p]W2.ⓐV2.T2. #h #p #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV1 #HV2 #HT12 #H @(cpxs_ind … H) -W2 /3 width=5 by cpxs_trans, cpxs_theta_dx, cpxs_bind_dx/ qed. theorem cpxs_theta: ∀h,p,G,L,V1,V,V2,W1,W2,T1,T2. - ⇧*[1] V ≘ V2 → ⦃G,L⦄ ⊢ W1 ⬈*[h] W2 → - ⦃G,L.ⓓW1⦄ ⊢ T1 ⬈*[h] T2 → ⦃G,L⦄ ⊢ V1 ⬈*[h] V → - ⦃G,L⦄ ⊢ ⓐV1.ⓓ{p}W1.T1 ⬈*[h] ⓓ{p}W2.ⓐV2.T2. + ⇧*[1] V ≘ V2 → ❪G,L❫ ⊢ W1 ⬈*[h] W2 → + ❪G,L.ⓓW1❫ ⊢ T1 ⬈*[h] T2 → ❪G,L❫ ⊢ V1 ⬈*[h] V → + ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ⬈*[h] ⓓ[p]W2.ⓐV2.T2. #h #p #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV2 #HW12 #HT12 #H @(TC_ind_dx … V1 H) -V1 /3 width=5 by cpxs_trans, cpxs_theta_rc, cpxs_flat_dx/ qed. (* Advanced inversion lemmas ************************************************) -lemma cpxs_inv_appl1: ∀h,G,L,V1,T1,U2. ⦃G,L⦄ ⊢ ⓐV1.T1 ⬈*[h] U2 → - ∨∨ ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ⬈*[h] V2 & ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 & +lemma cpxs_inv_appl1: ∀h,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓐV1.T1 ⬈*[h] U2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈*[h] V2 & ❪G,L❫ ⊢ T1 ⬈*[h] T2 & U2 = ⓐV2.T2 - | ∃∃p,W,T. ⦃G,L⦄ ⊢ T1 ⬈*[h] ⓛ{p}W.T & ⦃G,L⦄ ⊢ ⓓ{p}ⓝW.V1.T ⬈*[h] U2 - | ∃∃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] U2. + | ∃∃p,W,T. ❪G,L❫ ⊢ T1 ⬈*[h] ⓛ[p]W.T & ❪G,L❫ ⊢ ⓓ[p]ⓝW.V1.T ⬈*[h] U2 + | ∃∃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] U2. #h #G #L #V1 #T1 #U2 #H @(cpxs_ind … H) -U2 [ /3 width=5 by or3_intro0, ex3_2_intro/ ] #U #U2 #_ #HU2 * * [ #V0 #T0 #HV10 #HT10 #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_drops.ma index 92c0ca4b6..7f617b13a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_drops.ma @@ -20,44 +20,44 @@ include "basic_2/rt_computation/cpxs.ma". (* Advanced properties ******************************************************) -lemma cpxs_delta: ∀h,I,G,K,V1,V2. ⦃G,K⦄ ⊢ V1 ⬈*[h] V2 → - ∀W2. ⇧*[1] V2 ≘ W2 → ⦃G,K.ⓑ{I}V1⦄ ⊢ #0 ⬈*[h] W2. +lemma cpxs_delta: ∀h,I,G,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈*[h] V2 → + ∀W2. ⇧*[1] V2 ≘ W2 → ❪G,K.ⓑ[I]V1❫ ⊢ #0 ⬈*[h] W2. #h #I #G #K #V1 #V2 #H @(cpxs_ind … H) -V2 [ /3 width=3 by cpx_cpxs, cpx_delta/ | #V #V2 #_ #HV2 #IH #W2 #HVW2 - elim (lifts_total V (𝐔❴1❵)) + elim (lifts_total V (𝐔❨1❩)) /5 width=11 by cpxs_strap1, cpx_lifts_bi, drops_refl, drops_drop/ ] qed. -lemma cpxs_lref: ∀h,I,G,K,T,i. ⦃G,K⦄ ⊢ #i ⬈*[h] T → - ∀U. ⇧*[1] T ≘ U → ⦃G,K.ⓘ{I}⦄ ⊢ #↑i ⬈*[h] U. +lemma cpxs_lref: ∀h,I,G,K,T,i. ❪G,K❫ ⊢ #i ⬈*[h] T → + ∀U. ⇧*[1] T ≘ U → ❪G,K.ⓘ[I]❫ ⊢ #↑i ⬈*[h] U. #h #I #G #K #T #i #H @(cpxs_ind … H) -T [ /3 width=3 by cpx_cpxs, cpx_lref/ | #T0 #T #_ #HT2 #IH #U #HTU - elim (lifts_total T0 (𝐔❴1❵)) + elim (lifts_total T0 (𝐔❨1❩)) /5 width=11 by cpxs_strap1, cpx_lifts_bi, drops_refl, drops_drop/ ] qed. (* Basic_2A1: was: cpxs_delta *) lemma cpxs_delta_drops: ∀h,I,G,L,K,V1,V2,i. - ⇩*[i] L ≘ K.ⓑ{I}V1 → ⦃G,K⦄ ⊢ V1 ⬈*[h] V2 → - ∀W2. ⇧*[↑i] V2 ≘ W2 → ⦃G,L⦄ ⊢ #i ⬈*[h] W2. + ⇩*[i] L ≘ K.ⓑ[I]V1 → ❪G,K❫ ⊢ V1 ⬈*[h] V2 → + ∀W2. ⇧*[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ⬈*[h] W2. #h #I #G #L #K #V1 #V2 #i #HLK #H @(cpxs_ind … H) -V2 [ /3 width=7 by cpx_cpxs, cpx_delta_drops/ | #V #V2 #_ #HV2 #IH #W2 #HVW2 - elim (lifts_total V (𝐔❴↑i❵)) + elim (lifts_total V (𝐔❨↑i❩)) /4 width=11 by cpxs_strap1, cpx_lifts_bi, drops_isuni_fwd_drop2/ ] qed. (* Advanced inversion lemmas ************************************************) -lemma cpxs_inv_zero1: ∀h,G,L,T2. ⦃G,L⦄ ⊢ #0 ⬈*[h] T2 → +lemma cpxs_inv_zero1: ∀h,G,L,T2. ❪G,L❫ ⊢ #0 ⬈*[h] T2 → T2 = #0 ∨ - ∃∃I,K,V1,V2. ⦃G,K⦄ ⊢ V1 ⬈*[h] V2 & ⇧*[1] V2 ≘ T2 & - L = K.ⓑ{I}V1. + ∃∃I,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈*[h] V2 & ⇧*[1] V2 ≘ T2 & + L = K.ⓑ[I]V1. #h #G #L #T2 #H @(cpxs_ind … H) -T2 /2 width=1 by or_introl/ #T #T2 #_ #HT2 * [ #H destruct @@ -69,9 +69,9 @@ lemma cpxs_inv_zero1: ∀h,G,L,T2. ⦃G,L⦄ ⊢ #0 ⬈*[h] T2 → ] qed-. -lemma cpxs_inv_lref1: ∀h,G,L,T2,i. ⦃G,L⦄ ⊢ #↑i ⬈*[h] T2 → +lemma cpxs_inv_lref1: ∀h,G,L,T2,i. ❪G,L❫ ⊢ #↑i ⬈*[h] T2 → T2 = #(↑i) ∨ - ∃∃I,K,T. ⦃G,K⦄ ⊢ #i ⬈*[h] T & ⇧*[1] T ≘ T2 & L = K.ⓘ{I}. + ∃∃I,K,T. ❪G,K❫ ⊢ #i ⬈*[h] T & ⇧*[1] T ≘ T2 & L = K.ⓘ[I]. #h #G #L #T2 #i #H @(cpxs_ind … H) -T2 /2 width=1 by or_introl/ #T #T2 #_ #HT2 * [ #H destruct @@ -84,9 +84,9 @@ lemma cpxs_inv_lref1: ∀h,G,L,T2,i. ⦃G,L⦄ ⊢ #↑i ⬈*[h] T2 → qed-. (* Basic_2A1: was: cpxs_inv_lref1 *) -lemma cpxs_inv_lref1_drops: ∀h,G,L,T2,i. ⦃G,L⦄ ⊢ #i ⬈*[h] T2 → +lemma cpxs_inv_lref1_drops: ∀h,G,L,T2,i. ❪G,L❫ ⊢ #i ⬈*[h] T2 → T2 = #i ∨ - ∃∃I,K,V1,T1. ⇩*[i] L ≘ K.ⓑ{I}V1 & ⦃G,K⦄ ⊢ V1 ⬈*[h] T1 & + ∃∃I,K,V1,T1. ⇩*[i] L ≘ K.ⓑ[I]V1 & ❪G,K❫ ⊢ V1 ⬈*[h] T1 & ⇧*[↑i] T1 ≘ T2. #h #G #L #T2 #i #H @(cpxs_ind … H) -T2 /2 width=1 by or_introl/ #T #T2 #_ #HT2 * diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_feqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_feqx.ma index 23709c963..abbddfab7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_feqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_feqx.ma @@ -19,9 +19,9 @@ include "basic_2/rt_computation/cpxs_reqx.ma". (* Properties with sort-irrelevant equivalence for closures *****************) -lemma feqx_cpxs_trans: ∀h,G1,G2,L1,L2,T1,T. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T⦄ → - ∀T2. ⦃G2,L2⦄ ⊢ T ⬈*[h] T2 → - ∃∃T0. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] T0 & ⦃G1,L1,T0⦄ ≛ ⦃G2,L2,T2⦄. +lemma feqx_cpxs_trans: ∀h,G1,G2,L1,L2,T1,T. ❪G1,L1,T1❫ ≛ ❪G2,L2,T❫ → + ∀T2. ❪G2,L2❫ ⊢ T ⬈*[h] T2 → + ∃∃T0. ❪G1,L1❫ ⊢ T1 ⬈*[h] T0 & ❪G1,L1,T0❫ ≛ ❪G2,L2,T2❫. #h #G1 #G2 #L1 #L2 #T1 #T #H #T2 #HT2 elim (feqx_inv_gen_dx … H) -H #H #HL12 #HT1 destruct elim (reqx_cpxs_trans … HT2 … HL12) #T0 #HT0 #HT02 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_fqus.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_fqus.ma index eb71bafca..1dd3b59db 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_fqus.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_fqus.ma @@ -21,33 +21,33 @@ include "basic_2/rt_computation/cpxs_cpxs.ma". (* Properties on supclosure *************************************************) -lemma fqu_cpxs_trans: ∀h,b,G1,G2,L1,L2,T2,U2. ⦃G2,L2⦄ ⊢ T2 ⬈*[h] U2 → - ∀T1. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → - ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] U1 & ⦃G1,L1,U1⦄ ⬂[b] ⦃G2,L2,U2⦄. +lemma fqu_cpxs_trans: ∀h,b,G1,G2,L1,L2,T2,U2. ❪G2,L2❫ ⊢ T2 ⬈*[h] U2 → + ∀T1. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈*[h] U1 & ❪G1,L1,U1❫ ⬂[b] ❪G2,L2,U2❫. #h #b #G1 #G2 #L1 #L2 #T2 #U2 #H @(cpxs_ind_dx … H) -T2 /2 width=3 by ex2_intro/ #T #T2 #HT2 #_ #IHTU2 #T1 #HT1 elim (fqu_cpx_trans … HT1 … HT2) -T #T #HT1 #HT2 elim (IHTU2 … HT2) -T2 /3 width=3 by cpxs_strap2, ex2_intro/ qed-. -lemma fquq_cpxs_trans: ∀h,b,G1,G2,L1,L2,T2,U2. ⦃G2,L2⦄ ⊢ T2 ⬈*[h] U2 → - ∀T1. ⦃G1,L1,T1⦄ ⬂⸮[b] ⦃G2,L2,T2⦄ → - ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] U1 & ⦃G1,L1,U1⦄ ⬂⸮[b] ⦃G2,L2,U2⦄. +lemma fquq_cpxs_trans: ∀h,b,G1,G2,L1,L2,T2,U2. ❪G2,L2❫ ⊢ T2 ⬈*[h] U2 → + ∀T1. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈*[h] U1 & ❪G1,L1,U1❫ ⬂⸮[b] ❪G2,L2,U2❫. #h #b #G1 #G2 #L1 #L2 #T2 #U2 #H @(cpxs_ind_dx … H) -T2 /2 width=3 by ex2_intro/ #T #T2 #HT2 #_ #IHTU2 #T1 #HT1 elim (fquq_cpx_trans … HT1 … HT2) -T #T #HT1 #HT2 elim (IHTU2 … HT2) -T2 /3 width=3 by cpxs_strap2, ex2_intro/ qed-. -lemma fqup_cpxs_trans: ∀h,b,G1,G2,L1,L2,T2,U2. ⦃G2,L2⦄ ⊢ T2 ⬈*[h] U2 → - ∀T1. ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄ → - ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] U1 & ⦃G1,L1,U1⦄ ⬂+[b] ⦃G2,L2,U2⦄. +lemma fqup_cpxs_trans: ∀h,b,G1,G2,L1,L2,T2,U2. ❪G2,L2❫ ⊢ T2 ⬈*[h] U2 → + ∀T1. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈*[h] U1 & ❪G1,L1,U1❫ ⬂+[b] ❪G2,L2,U2❫. #h #b #G1 #G2 #L1 #L2 #T2 #U2 #H @(cpxs_ind_dx … H) -T2 /2 width=3 by ex2_intro/ #T #T2 #HT2 #_ #IHTU2 #T1 #HT1 elim (fqup_cpx_trans … HT1 … HT2) -T #U1 #HTU1 #H2 elim (IHTU2 … H2) -T2 /3 width=3 by cpxs_strap2, ex2_intro/ qed-. -lemma fqus_cpxs_trans: ∀h,b,G1,G2,L1,L2,T2,U2. ⦃G2,L2⦄ ⊢ T2 ⬈*[h] U2 → - ∀T1. ⦃G1,L1,T1⦄ ⬂*[b] ⦃G2,L2,T2⦄ → - ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] U1 & ⦃G1,L1,U1⦄ ⬂*[b] ⦃G2,L2,U2⦄. +lemma fqus_cpxs_trans: ∀h,b,G1,G2,L1,L2,T2,U2. ❪G2,L2❫ ⊢ T2 ⬈*[h] U2 → + ∀T1. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈*[h] U1 & ❪G1,L1,U1❫ ⬂*[b] ❪G2,L2,U2❫. #h #b #G1 #G2 #L1 #L2 #T2 #U2 #H @(cpxs_ind_dx … H) -T2 /2 width=3 by ex2_intro/ #T #T2 #HT2 #_ #IHTU2 #T1 #HT1 elim (fqus_cpx_trans … HT1 … HT2) -T #U1 #HTU1 #H2 elim (IHTU2 … H2) -T2 /3 width=3 by cpxs_strap2, ex2_intro/ @@ -55,42 +55,42 @@ qed-. (* Note: a proof based on fqu_cpx_trans_tneqx might exist *) (* Basic_2A1: uses: fqu_cpxs_trans_neq *) -lemma fqu_cpxs_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → - ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) → - ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] U1 & T1 ≛ U1 → ⊥ & ⦃G1,L1,U1⦄ ⬂[b] ⦃G2,L2,U2⦄. +lemma fqu_cpxs_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈*[h] U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ⬂[b] ❪G2,L2,U2❫. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 -[ #I #G #L #V1 #V2 #HV12 #_ elim (lifts_total V2 𝐔❴1❵) +[ #I #G #L #V1 #V2 #HV12 #_ elim (lifts_total V2 𝐔❨1❩) #U2 #HVU2 @(ex3_intro … U2) [1,3: /3 width=7 by cpxs_delta, fqu_drop/ | #H lapply (teqx_inv_lref1 … H) -H #H destruct /2 width=5 by lifts_inv_lref2_uni_lt/ ] -| #I #G #L #V1 #T #V2 #HV12 #H0 @(ex3_intro … (②{I}V2.T)) +| #I #G #L #V1 #T #V2 #HV12 #H0 @(ex3_intro … (②[I]V2.T)) [1,3: /2 width=4 by fqu_pair_sn, cpxs_pair_sn/ | #H elim (teqx_inv_pair … H) -H /2 width=1 by/ ] -| #p #I #G #L #V #T1 #Hb #T2 #HT12 #H0 @(ex3_intro … (ⓑ{p,I}V.T2)) +| #p #I #G #L #V #T1 #Hb #T2 #HT12 #H0 @(ex3_intro … (ⓑ[p,I]V.T2)) [1,3: /2 width=4 by fqu_bind_dx, cpxs_bind/ | #H elim (teqx_inv_pair … H) -H /2 width=1 by/ ] -| #p #I #G #L #V #T1 #Hb #T2 #HT12 #H0 @(ex3_intro … (ⓑ{p,I}V.T2)) +| #p #I #G #L #V #T1 #Hb #T2 #HT12 #H0 @(ex3_intro … (ⓑ[p,I]V.T2)) [1,3: /4 width=4 by lsubr_cpxs_trans, cpxs_bind, lsubr_unit, fqu_clear/ | #H elim (teqx_inv_pair … H) -H /2 width=1 by/ ] -| #I #G #L #V #T1 #T2 #HT12 #H0 @(ex3_intro … (ⓕ{I}V.T2)) +| #I #G #L #V #T1 #T2 #HT12 #H0 @(ex3_intro … (ⓕ[I]V.T2)) [1,3: /2 width=4 by fqu_flat_dx, cpxs_flat/ | #H elim (teqx_inv_pair … H) -H /2 width=1 by/ ] | #I #G #L #T1 #U1 #HTU1 #T2 #HT12 #H0 - elim (cpxs_lifts_sn … HT12 (Ⓣ) … (L.ⓘ{I}) … HTU1) -HT12 + elim (cpxs_lifts_sn … HT12 (Ⓣ) … (L.ⓘ[I]) … HTU1) -HT12 /4 width=6 by fqu_drop, drops_refl, drops_drop, teqx_inv_lifts_bi, ex3_intro/ ] qed-. (* Basic_2A1: uses: fquq_cpxs_trans_neq *) -lemma fquq_cpxs_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂⸮[b] ⦃G2,L2,T2⦄ → - ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) → - ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] U1 & T1 ≛ U1 → ⊥ & ⦃G1,L1,U1⦄ ⬂⸮[b] ⦃G2,L2,U2⦄. +lemma fquq_cpxs_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈*[h] U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ⬂⸮[b] ❪G2,L2,U2❫. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 elim H12 -H12 [ #H12 #U2 #HTU2 #H elim (fqu_cpxs_trans_tneqx … H12 … HTU2 H) -T2 /3 width=4 by fqu_fquq, ex3_intro/ @@ -99,9 +99,9 @@ lemma fquq_cpxs_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂⸮[b] qed-. (* Basic_2A1: uses: fqup_cpxs_trans_neq *) -lemma fqup_cpxs_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄ → - ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) → - ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] U1 & T1 ≛ U1 → ⊥ & ⦃G1,L1,U1⦄ ⬂+[b] ⦃G2,L2,U2⦄. +lemma fqup_cpxs_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈*[h] U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ⬂+[b] ❪G2,L2,U2❫. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind_dx … H) -G1 -L1 -T1 [ #G1 #L1 #T1 #H12 #U2 #HTU2 #H elim (fqu_cpxs_trans_tneqx … H12 … HTU2 H) -T2 /3 width=4 by fqu_fqup, ex3_intro/ @@ -112,9 +112,9 @@ lemma fqup_cpxs_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂+[b] qed-. (* Basic_2A1: uses: fqus_cpxs_trans_neq *) -lemma fqus_cpxs_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂*[b] ⦃G2,L2,T2⦄ → - ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) → - ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] U1 & T1 ≛ U1 → ⊥ & ⦃G1,L1,U1⦄ ⬂*[b] ⦃G2,L2,U2⦄. +lemma fqus_cpxs_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈*[h] U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ⬂*[b] ❪G2,L2,U2❫. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 #U2 #HTU2 #H elim (fqus_inv_fqup … H12) -H12 [ #H12 elim (fqup_cpxs_trans_tneqx … H12 … HTU2 H) -T2 /3 width=4 by fqup_fqus, ex3_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_lpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_lpx.ma index 599e41a20..43aee248d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_lpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_lpx.ma @@ -44,22 +44,22 @@ qed-. (* Advanced properties ******************************************************) -lemma cpx_bind2: ∀h,G,L,V1,V2. ⦃G,L⦄ ⊢ V1 ⬈[h] V2 → - ∀I,T1,T2. ⦃G,L.ⓑ{I}V2⦄ ⊢ T1 ⬈[h] T2 → - ∀p. ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T1 ⬈*[h] ⓑ{p,I}V2.T2. +lemma cpx_bind2: ∀h,G,L,V1,V2. ❪G,L❫ ⊢ V1 ⬈[h] V2 → + ∀I,T1,T2. ❪G,L.ⓑ[I]V2❫ ⊢ T1 ⬈[h] T2 → + ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈*[h] ⓑ[p,I]V2.T2. /4 width=5 by lpx_cpx_trans, cpxs_bind_dx, lpx_pair/ qed. -lemma cpxs_bind2_dx: ∀h,G,L,V1,V2. ⦃G,L⦄ ⊢ V1 ⬈[h] V2 → - ∀I,T1,T2. ⦃G,L.ⓑ{I}V2⦄ ⊢ T1 ⬈*[h] T2 → - ∀p. ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T1 ⬈*[h] ⓑ{p,I}V2.T2. +lemma cpxs_bind2_dx: ∀h,G,L,V1,V2. ❪G,L❫ ⊢ V1 ⬈[h] V2 → + ∀I,T1,T2. ❪G,L.ⓑ[I]V2❫ ⊢ T1 ⬈*[h] T2 → + ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈*[h] ⓑ[p,I]V2.T2. /4 width=5 by lpx_cpxs_trans, cpxs_bind_dx, lpx_pair/ qed. (* Properties with plus-iterated structural successor for closures **********) (* Basic_2A1: uses: lpx_fqup_trans *) -lemma lpx_fqup_trans: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄ → - ∀K1. ⦃G1,K1⦄ ⊢ ⬈[h] L1 → - ∃∃K2,T. ⦃G1,K1⦄ ⊢ T1 ⬈*[h] T & ⦃G1,K1,T⦄ ⬂+[b] ⦃G2,K2,T2⦄ & ⦃G2,K2⦄ ⊢ ⬈[h] L2. +lemma lpx_fqup_trans: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → + ∀K1. ❪G1,K1❫ ⊢ ⬈[h] L1 → + ∃∃K2,T. ❪G1,K1❫ ⊢ T1 ⬈*[h] T & ❪G1,K1,T❫ ⬂+[b] ❪G2,K2,T2❫ & ❪G2,K2❫ ⊢ ⬈[h] L2. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2 [ #G2 #L2 #T2 #H12 #K1 #HKL1 elim (lpx_fqu_trans … H12 … HKL1) -L1 /3 width=5 by cpx_cpxs, fqu_fqup, ex3_2_intro/ @@ -73,9 +73,9 @@ qed-. (* Properties with star-iterated structural successor for closures **********) (* Basic_2A1: uses: lpx_fqus_trans *) -lemma lpx_fqus_trans: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂*[b] ⦃G2,L2,T2⦄ → - ∀K1. ⦃G1,K1⦄ ⊢ ⬈[h] L1 → - ∃∃K2,T. ⦃G1,K1⦄ ⊢ T1 ⬈*[h] T & ⦃G1,K1,T⦄ ⬂*[b] ⦃G2,K2,T2⦄ & ⦃G2,K2⦄ ⊢ ⬈[h] L2. +lemma lpx_fqus_trans: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → + ∀K1. ❪G1,K1❫ ⊢ ⬈[h] L1 → + ∃∃K2,T. ❪G1,K1❫ ⊢ T1 ⬈*[h] T & ❪G1,K1,T❫ ⬂*[b] ❪G2,K2,T2❫ & ❪G2,K2❫ ⊢ ⬈[h] L2. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #K1 #HKL1 elim (fqus_inv_fqup … H) -H [ #H12 elim (lpx_fqup_trans … H12 … HKL1) -L1 /3 width=5 by fqup_fqus, ex3_2_intro/ | * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_reqx.ma index 64be00b99..0e93ddb5b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_reqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_reqx.ma @@ -20,9 +20,9 @@ include "basic_2/rt_computation/cpxs_teqx.ma". (* Properties with sort-irrelevant equivalence for local environments *******) (* Basic_2A1: was just: lleq_cpxs_trans *) -lemma reqx_cpxs_trans: ∀h,G,L0,T0,T1. ⦃G,L0⦄ ⊢ T0 ⬈*[h] T1 → +lemma reqx_cpxs_trans: ∀h,G,L0,T0,T1. ❪G,L0❫ ⊢ T0 ⬈*[h] T1 → ∀L2. L2 ≛[T0] L0 → - ∃∃T. ⦃G,L2⦄ ⊢ T0 ⬈*[h] T & T ≛ T1. + ∃∃T. ❪G,L2❫ ⊢ T0 ⬈*[h] T & T ≛ T1. #h #G #L0 #T0 #T1 #H @(cpxs_ind_dx … H) -T0 /2 width=3 by ex2_intro/ #T0 #T #HT0 #_ #IH #L2 #HL2 elim (reqx_cpx_trans … HL2 … HT0) #U1 #H1 #H2 @@ -32,18 +32,18 @@ elim (teqx_cpxs_trans … H2 … H3) -T #U0 #H2 #H3 qed-. (* Basic_2A1: was just: cpxs_lleq_conf *) -lemma cpxs_reqx_conf: ∀h,G,L0,T0,T1. ⦃G,L0⦄ ⊢ T0 ⬈*[h] T1 → +lemma cpxs_reqx_conf: ∀h,G,L0,T0,T1. ❪G,L0❫ ⊢ T0 ⬈*[h] T1 → ∀L2. L0 ≛[T0] L2 → - ∃∃T. ⦃G,L2⦄ ⊢ T0 ⬈*[h] T & T ≛ T1. + ∃∃T. ❪G,L2❫ ⊢ T0 ⬈*[h] T & T ≛ T1. /3 width=3 by reqx_cpxs_trans, reqx_sym/ qed-. (* Basic_2A1: was just: cpxs_lleq_conf_dx *) -lemma cpxs_reqx_conf_dx: ∀h,G,L2,T1,T2. ⦃G,L2⦄ ⊢ T1 ⬈*[h] T2 → +lemma cpxs_reqx_conf_dx: ∀h,G,L2,T1,T2. ❪G,L2❫ ⊢ T1 ⬈*[h] T2 → ∀L1. L1 ≛[T1] L2 → L1 ≛[T2] L2. #h #G #L2 #T1 #T2 #H @(cpxs_ind … H) -T2 /3 width=6 by cpx_reqx_conf_dx/ qed-. (* Basic_2A1: was just: lleq_conf_sn *) -lemma cpxs_reqx_conf_sn: ∀h,G,L1,T1,T2. ⦃G,L1⦄ ⊢ T1 ⬈*[h] T2 → +lemma cpxs_reqx_conf_sn: ∀h,G,L1,T1,T2. ❪G,L1❫ ⊢ T1 ⬈*[h] T2 → ∀L2. L1 ≛[T1] L2 → L1 ≛[T2] L2. /4 width=6 by cpxs_reqx_conf_dx, reqx_sym/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqo.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqo.ma index 571a46efe..93d8cd3de 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqo.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqo.ma @@ -22,7 +22,7 @@ include "basic_2/rt_computation/lpxs_cpxs.ma". (* Forward lemmas with sort-irrelevant outer equivalence for terms **********) lemma cpxs_fwd_sort (h) (G) (L): - ∀X2,s1. ⦃G,L⦄ ⊢ ⋆s1 ⬈*[h] X2 → ⋆s1 ⩳ X2. + ∀X2,s1. ❪G,L❫ ⊢ ⋆s1 ⬈*[h] X2 → ⋆s1 ⩳ X2. #h #G #L #X2 #s1 #H elim (cpxs_inv_sort1 … H) -H #s2 #H destruct // qed-. @@ -30,10 +30,10 @@ qed-. (* Note: probably this is an inversion lemma *) (* Basic_2A1: was: cpxs_fwd_delta *) lemma cpxs_fwd_delta_drops (h) (I) (G) (L) (K): - ∀V1,i. ⇩*[i] L ≘ K.ⓑ{I}V1 → + ∀V1,i. ⇩*[i] L ≘ K.ⓑ[I]V1 → ∀V2. ⇧*[↑i] V1 ≘ V2 → - ∀X2. ⦃G,L⦄ ⊢ #i ⬈*[h] X2 → - ∨∨ #i ⩳ X2 | ⦃G,L⦄ ⊢ V2 ⬈*[h] X2. + ∀X2. ❪G,L❫ ⊢ #i ⬈*[h] X2 → + ∨∨ #i ⩳ X2 | ❪G,L❫ ⊢ V2 ⬈*[h] X2. #h #I #G #L #K #V1 #i #HLK #V2 #HV12 #X2 #H elim (cpxs_inv_lref1_drops … H) -H /2 width=1 by or_introl/ * #I0 #K0 #V0 #U0 #HLK0 #HVU0 #HU0 @@ -43,8 +43,8 @@ qed-. (* Basic_1: was just: pr3_iso_beta *) lemma cpxs_fwd_beta (h) (p) (G) (L): - ∀V,W,T,X2. ⦃G,L⦄ ⊢ ⓐV.ⓛ{p}W.T ⬈*[h] X2 → - ∨∨ ⓐV.ⓛ{p}W.T ⩳ X2 | ⦃G,L⦄ ⊢ ⓓ{p}ⓝW.V.T ⬈*[h] X2. + ∀V,W,T,X2. ❪G,L❫ ⊢ ⓐV.ⓛ[p]W.T ⬈*[h] X2 → + ∨∨ ⓐV.ⓛ[p]W.T ⩳ X2 | ❪G,L❫ ⊢ ⓓ[p]ⓝW.V.T ⬈*[h] X2. #h #p #G #L #V #W #T #X2 #H elim (cpxs_inv_appl1 … H) -H * [ #V0 #T0 #_ #_ #H destruct /2 width=1 by teqo_pair, or_introl/ | #b #W0 #T0 #HT0 #HU @@ -57,9 +57,9 @@ lemma cpxs_fwd_beta (h) (p) (G) (L): qed-. lemma cpxs_fwd_theta (h) (p) (G) (L): - ∀V1,V,T,X2. ⦃G,L⦄ ⊢ ⓐV1.ⓓ{p}V.T ⬈*[h] X2 → + ∀V1,V,T,X2. ❪G,L❫ ⊢ ⓐV1.ⓓ[p]V.T ⬈*[h] X2 → ∀V2. ⇧*[1] V1 ≘ V2 → - ∨∨ ⓐV1.ⓓ{p}V.T ⩳ X2 | ⦃G,L⦄ ⊢ ⓓ{p}V.ⓐV2.T ⬈*[h] X2. + ∨∨ ⓐV1.ⓓ[p]V.T ⩳ X2 | ❪G,L❫ ⊢ ⓓ[p]V.ⓐV2.T ⬈*[h] X2. #h #p #G #L #V1 #V #T #X2 #H #V2 #HV12 elim (cpxs_inv_appl1 … H) -H * [ -HV12 #V0 #T0 #_ #_ #H destruct /2 width=1 by teqo_pair, or_introl/ @@ -69,8 +69,8 @@ elim (cpxs_inv_appl1 … H) -H * | #X #HT2 #H #H0 destruct elim (lifts_inv_bind1 … H) -H #W2 #T2 #HW2 #HT02 #H destruct @or_intror @(cpxs_trans … HU) -X2 (**) (* explicit constructor *) - @(cpxs_trans … (+ⓓV.ⓐV2.ⓛ{q}W2.T2)) [ /3 width=1 by cpxs_flat_dx, cpxs_bind_dx/ ] -T - @(cpxs_strap2 … (ⓐV1.ⓛ{q}W.T0)) [2: /2 width=1 by cpxs_beta_dx/ ] + @(cpxs_trans … (+ⓓV.ⓐV2.ⓛ[q]W2.T2)) [ /3 width=1 by cpxs_flat_dx, cpxs_bind_dx/ ] -T + @(cpxs_strap2 … (ⓐV1.ⓛ[q]W.T0)) [2: /2 width=1 by cpxs_beta_dx/ ] /4 width=7 by cpx_zeta, lifts_bind, lifts_flat/ ] | #q #V3 #V4 #V0 #T0 #HV13 #HV34 #HT0 #HU @@ -81,22 +81,22 @@ elim (cpxs_inv_appl1 … H) -H * | #X #HT1 #H #H0 destruct elim (lifts_inv_bind1 … H) -H #V5 #T5 #HV05 #HT05 #H destruct lapply (cpxs_lifts_bi … HV13 (Ⓣ) … (L.ⓓV0) … HV12 … HV34) -V3 /3 width=1 by drops_refl, drops_drop/ #HV24 - @(cpxs_trans … (+ⓓV.ⓐV2.ⓓ{q}V5.T5)) [ /3 width=1 by cpxs_flat_dx, cpxs_bind_dx/ ] -T - @(cpxs_strap2 … (ⓐV1.ⓓ{q}V0.T0)) [ /4 width=7 by cpx_zeta, lifts_bind, lifts_flat/ ] -V -V5 -T5 - @(cpxs_strap2 … (ⓓ{q}V0.ⓐV2.T0)) /3 width=3 by cpxs_pair_sn, cpxs_bind_dx, cpx_theta/ + @(cpxs_trans … (+ⓓV.ⓐV2.ⓓ[q]V5.T5)) [ /3 width=1 by cpxs_flat_dx, cpxs_bind_dx/ ] -T + @(cpxs_strap2 … (ⓐV1.ⓓ[q]V0.T0)) [ /4 width=7 by cpx_zeta, lifts_bind, lifts_flat/ ] -V -V5 -T5 + @(cpxs_strap2 … (ⓓ[q]V0.ⓐV2.T0)) /3 width=3 by cpxs_pair_sn, cpxs_bind_dx, cpx_theta/ ] ] qed-. lemma cpxs_fwd_cast (h) (G) (L): - ∀W,T,X2. ⦃G,L⦄ ⊢ ⓝW.T ⬈*[h] X2 → - ∨∨ ⓝW. T ⩳ X2 | ⦃G,L⦄ ⊢ T ⬈*[h] X2 | ⦃G,L⦄ ⊢ W ⬈*[h] X2. + ∀W,T,X2. ❪G,L❫ ⊢ ⓝW.T ⬈*[h] X2 → + ∨∨ ⓝW. T ⩳ X2 | ❪G,L❫ ⊢ T ⬈*[h] X2 | ❪G,L❫ ⊢ W ⬈*[h] X2. #h #G #L #W #T #X2 #H elim (cpxs_inv_cast1 … H) -H /2 width=1 by or3_intro1, or3_intro2/ * #W0 #T0 #_ #_ #H destruct /2 width=1 by teqo_pair, or3_intro0/ qed-. lemma cpxs_fwd_cnx (h) (G) (L): - ∀T1. ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃T1⦄ → - ∀X2. ⦃G,L⦄ ⊢ T1 ⬈*[h] X2 → T1 ⩳ X2. + ∀T1. ❪G,L❫ ⊢ ⬈[h] 𝐍❪T1❫ → + ∀X2. ❪G,L❫ ⊢ T1 ⬈*[h] X2 → T1 ⩳ X2. /3 width=5 by cpxs_inv_cnx1, teqx_teqo/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqo_vector.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqo_vector.ma index 5b7135b01..496201579 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqo_vector.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqo_vector.ma @@ -21,7 +21,7 @@ include "basic_2/rt_computation/cpxs_teqo.ma". (* Vector form of forward lemmas with outer equivalence for terms ***********) lemma cpxs_fwd_sort_vector (h) (G) (L): - ∀s,Vs,X2. ⦃G,L⦄ ⊢ ⒶVs.⋆s ⬈*[h] X2 → ⒶVs.⋆s ⩳ X2. + ∀s,Vs,X2. ❪G,L❫ ⊢ ⒶVs.⋆s ⬈*[h] X2 → ⒶVs.⋆s ⩳ X2. #h #G #L #s #Vs elim Vs -Vs /2 width=4 by cpxs_fwd_sort/ #V #Vs #IHVs #X2 #H elim (cpxs_inv_appl1 … H) -H * @@ -37,10 +37,10 @@ qed-. (* Basic_2A1: was: cpxs_fwd_delta_vector *) lemma cpxs_fwd_delta_drops_vector (h) (I) (G) (L) (K): - ∀V1,i. ⇩*[i] L ≘ K.ⓑ{I}V1 → + ∀V1,i. ⇩*[i] L ≘ K.ⓑ[I]V1 → ∀V2. ⇧*[↑i] V1 ≘ V2 → - ∀Vs,X2. ⦃G,L⦄ ⊢ ⒶVs.#i ⬈*[h] X2 → - ∨∨ ⒶVs.#i ⩳ X2 | ⦃G,L⦄ ⊢ ⒶVs.V2 ⬈*[h] X2. + ∀Vs,X2. ❪G,L❫ ⊢ ⒶVs.#i ⬈*[h] X2 → + ∨∨ ⒶVs.#i ⩳ X2 | ❪G,L❫ ⊢ ⒶVs.V2 ⬈*[h] X2. #h #I #G #L #K #V1 #i #HLK #V2 #HV12 #Vs elim Vs -Vs /2 width=5 by cpxs_fwd_delta_drops/ #V #Vs #IHVs #X2 #H -K -V1 @@ -51,22 +51,22 @@ elim (cpxs_inv_appl1 … H) -H * [ elim (teqo_inv_applv_bind_simple … HT0) // | @or_intror -i (**) (* explicit constructor *) @(cpxs_trans … HU) -X2 - @(cpxs_strap1 … (ⓐV.ⓛ{q}W0.T0)) /3 width=1 by cpxs_flat_dx, cpx_beta/ + @(cpxs_strap1 … (ⓐV.ⓛ[q]W0.T0)) /3 width=1 by cpxs_flat_dx, cpx_beta/ ] | #q #V0 #V1 #V3 #T0 #HV0 #HV01 #HT0 #HU elim (IHVs … HT0) -IHVs -HT0 #HT0 [ elim (teqo_inv_applv_bind_simple … HT0) // | @or_intror -i (**) (* explicit constructor *) @(cpxs_trans … HU) -X2 - @(cpxs_strap1 … (ⓐV0.ⓓ{q}V3.T0)) /3 width=3 by cpxs_flat, cpx_theta/ + @(cpxs_strap1 … (ⓐV0.ⓓ[q]V3.T0)) /3 width=3 by cpxs_flat, cpx_theta/ ] ] qed-. (* Basic_1: was just: pr3_iso_appls_beta *) lemma cpxs_fwd_beta_vector (h) (p) (G) (L): - ∀Vs,V,W,T,X2. ⦃G,L⦄ ⊢ ⒶVs.ⓐV.ⓛ{p}W.T ⬈*[h] X2 → - ∨∨ ⒶVs.ⓐV.ⓛ{p}W. T ⩳ X2 | ⦃G,L⦄ ⊢ ⒶVs.ⓓ{p}ⓝW.V.T ⬈*[h] X2. + ∀Vs,V,W,T,X2. ❪G,L❫ ⊢ ⒶVs.ⓐV.ⓛ[p]W.T ⬈*[h] X2 → + ∨∨ ⒶVs.ⓐV.ⓛ[p]W. T ⩳ X2 | ❪G,L❫ ⊢ ⒶVs.ⓓ[p]ⓝW.V.T ⬈*[h] X2. #h #p #G #L #Vs elim Vs -Vs /2 width=1 by cpxs_fwd_beta/ #V0 #Vs #IHVs #V #W #T #X2 #H elim (cpxs_inv_appl1 … H) -H * @@ -76,14 +76,14 @@ elim (cpxs_inv_appl1 … H) -H * [ elim (teqo_inv_applv_bind_simple … HT1) // | @or_intror (**) (* explicit constructor *) @(cpxs_trans … HU) -X2 - @(cpxs_strap1 … (ⓐV0.ⓛ{q}W1.T1)) /3 width=1 by cpxs_flat_dx, cpx_beta/ + @(cpxs_strap1 … (ⓐV0.ⓛ[q]W1.T1)) /3 width=1 by cpxs_flat_dx, cpx_beta/ ] | #q #V1 #V2 #V3 #T1 #HV01 #HV12 #HT1 #HU elim (IHVs … HT1) -IHVs -HT1 #HT1 [ elim (teqo_inv_applv_bind_simple … HT1) // | @or_intror (**) (* explicit constructor *) @(cpxs_trans … HU) -X2 - @(cpxs_strap1 … (ⓐV1.ⓓ{q}V3.T1)) /3 width=3 by cpxs_flat, cpx_theta/ + @(cpxs_strap1 … (ⓐV1.ⓓ[q]V3.T1)) /3 width=3 by cpxs_flat, cpx_theta/ ] ] qed-. @@ -91,8 +91,8 @@ qed-. (* Basic_1: was just: pr3_iso_appls_abbr *) lemma cpxs_fwd_theta_vector (h) (G) (L): ∀V1b,V2b. ⇧*[1] V1b ≘ V2b → - ∀p,V,T,X2. ⦃G,L⦄ ⊢ ⒶV1b.ⓓ{p}V.T ⬈*[h] X2 → - ∨∨ ⒶV1b.ⓓ{p}V.T ⩳ X2 | ⦃G,L⦄ ⊢ ⓓ{p}V.ⒶV2b.T ⬈*[h] X2. + ∀p,V,T,X2. ❪G,L❫ ⊢ ⒶV1b.ⓓ[p]V.T ⬈*[h] X2 → + ∨∨ ⒶV1b.ⓓ[p]V.T ⩳ X2 | ❪G,L❫ ⊢ ⓓ[p]V.ⒶV2b.T ⬈*[h] X2. #h #G #L #V1b #V2b * -V1b -V2b /3 width=1 by or_intror/ #V1b #V2b #V1a #V2a #HV12a #HV12b #p generalize in match HV12a; -HV12a @@ -112,8 +112,8 @@ elim (cpxs_inv_appl1 … H) -H * [ -HV12a #V1 #T1 #_ #_ #H destruct | -V1b #X #HT1 #H #H0 destruct elim (lifts_inv_bind1 … H) -H #W1 #T1 #HW01 #HT01 #H destruct - @(cpxs_trans … (+ⓓV.ⓐV2a.ⓛ{q}W1.T1)) [ /3 width=1 by cpxs_flat_dx, cpxs_bind_dx/ ] -T -V2b -V2b - @(cpxs_strap2 … (ⓐV1a.ⓛ{q}W0.T0)) + @(cpxs_trans … (+ⓓV.ⓐV2a.ⓛ[q]W1.T1)) [ /3 width=1 by cpxs_flat_dx, cpxs_bind_dx/ ] -T -V2b -V2b + @(cpxs_strap2 … (ⓐV1a.ⓛ[q]W0.T0)) /4 width=7 by cpxs_beta_dx, cpx_zeta, lifts_bind, lifts_flat/ ] ] @@ -126,13 +126,13 @@ elim (cpxs_inv_appl1 … H) -H * elim (cpxs_inv_abbr1_dx … HT0) -HT0 * [ #V1 #T1 #HV1 #HT1 #H destruct lapply (cpxs_lifts_bi … HV10a (Ⓣ) … (L.ⓓV) … HV12a … HV0a) -V1a -V0a /3 width=1 by drops_refl, drops_drop/ #HV2a - @(cpxs_trans … (ⓓ{p}V.ⓐV2a.T1)) /3 width=1 by cpxs_bind, cpxs_pair_sn, cpxs_flat_dx, cpxs_bind_dx/ + @(cpxs_trans … (ⓓ[p]V.ⓐV2a.T1)) /3 width=1 by cpxs_bind, cpxs_pair_sn, cpxs_flat_dx, cpxs_bind_dx/ | #X #HT1 #H #H0 destruct elim (lifts_inv_bind1 … H) -H #V1 #T1 #HW01 #HT01 #H destruct lapply (cpxs_lifts_bi … HV10a (Ⓣ) … (L.ⓓV0) … HV12a … HV0a) -V0a /3 width=1 by drops_refl, drops_drop/ #HV2a - @(cpxs_trans … (+ⓓV.ⓐV2a.ⓓ{q}V1.T1)) [ /3 width=1 by cpxs_flat_dx, cpxs_bind_dx/ ] -T -V2b -V2b - @(cpxs_strap2 … (ⓐV1a.ⓓ{q}V0.T0)) [ /4 width=7 by cpx_zeta, lifts_bind, lifts_flat/ ] -V -V1 -T1 - @(cpxs_strap2 … (ⓓ{q}V0.ⓐV2a.T0)) /3 width=3 by cpxs_pair_sn, cpxs_bind_dx, cpx_theta/ + @(cpxs_trans … (+ⓓV.ⓐV2a.ⓓ[q]V1.T1)) [ /3 width=1 by cpxs_flat_dx, cpxs_bind_dx/ ] -T -V2b -V2b + @(cpxs_strap2 … (ⓐV1a.ⓓ[q]V0.T0)) [ /4 width=7 by cpx_zeta, lifts_bind, lifts_flat/ ] -V -V1 -T1 + @(cpxs_strap2 … (ⓓ[q]V0.ⓐV2a.T0)) /3 width=3 by cpxs_pair_sn, cpxs_bind_dx, cpx_theta/ ] ] ] @@ -140,10 +140,10 @@ qed-. (* Basic_1: was just: pr3_iso_appls_cast *) lemma cpxs_fwd_cast_vector (h) (G) (L): - ∀Vs,W,T,X2. ⦃G,L⦄ ⊢ ⒶVs.ⓝW.T ⬈*[h] X2 → + ∀Vs,W,T,X2. ❪G,L❫ ⊢ ⒶVs.ⓝW.T ⬈*[h] X2 → ∨∨ ⒶVs. ⓝW. T ⩳ X2 - | ⦃G,L⦄ ⊢ ⒶVs.T ⬈*[h] X2 - | ⦃G,L⦄ ⊢ ⒶVs.W ⬈*[h] X2. + | ❪G,L❫ ⊢ ⒶVs.T ⬈*[h] X2 + | ❪G,L❫ ⊢ ⒶVs.W ⬈*[h] X2. #h #G #L #Vs elim Vs -Vs /2 width=1 by cpxs_fwd_cast/ #V #Vs #IHVs #W #T #X2 #H elim (cpxs_inv_appl1 … H) -H * @@ -152,28 +152,28 @@ elim (cpxs_inv_appl1 … H) -H * [ elim (teqo_inv_applv_bind_simple … HT0) // | @or3_intro1 -W (**) (* explicit constructor *) @(cpxs_trans … HU) -X2 - @(cpxs_strap1 … (ⓐV.ⓛ{q}W0.T0)) /2 width=1 by cpxs_flat_dx, cpx_beta/ + @(cpxs_strap1 … (ⓐV.ⓛ[q]W0.T0)) /2 width=1 by cpxs_flat_dx, cpx_beta/ | @or3_intro2 -T (**) (* explicit constructor *) @(cpxs_trans … HU) -X2 - @(cpxs_strap1 … (ⓐV.ⓛ{q}W0.T0)) /2 width=1 by cpxs_flat_dx, cpx_beta/ + @(cpxs_strap1 … (ⓐV.ⓛ[q]W0.T0)) /2 width=1 by cpxs_flat_dx, cpx_beta/ ] | #q #V0 #V1 #V2 #T0 #HV0 #HV01 #HT0 #HU elim (IHVs … HT0) -IHVs -HT0 #HT0 [ elim (teqo_inv_applv_bind_simple … HT0) // | @or3_intro1 -W (**) (* explicit constructor *) @(cpxs_trans … HU) -X2 - @(cpxs_strap1 … (ⓐV0.ⓓ{q}V2.T0)) /2 width=3 by cpxs_flat, cpx_theta/ + @(cpxs_strap1 … (ⓐV0.ⓓ[q]V2.T0)) /2 width=3 by cpxs_flat, cpx_theta/ | @or3_intro2 -T (**) (* explicit constructor *) @(cpxs_trans … HU) -X2 - @(cpxs_strap1 … (ⓐV0.ⓓ{q}V2.T0)) /2 width=3 by cpxs_flat, cpx_theta/ + @(cpxs_strap1 … (ⓐV0.ⓓ[q]V2.T0)) /2 width=3 by cpxs_flat, cpx_theta/ ] ] qed-. (* Basic_1: was just: nf2_iso_appls_lref *) lemma cpxs_fwd_cnx_vector (h) (G) (L): - ∀T. 𝐒⦃T⦄ → ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃T⦄ → - ∀Vs,X2. ⦃G,L⦄ ⊢ ⒶVs.T ⬈*[h] X2 → ⒶVs.T ⩳ X2. + ∀T. 𝐒❪T❫ → ❪G,L❫ ⊢ ⬈[h] 𝐍❪T❫ → + ∀Vs,X2. ❪G,L❫ ⊢ ⒶVs.T ⬈*[h] X2 → ⒶVs.T ⩳ X2. #h #G #L #T #H1T #H2T #Vs elim Vs -Vs [ @(cpxs_fwd_cnx … H2T) ] (**) (* /2 width=3 by cpxs_fwd_cnx/ does not work *) #V #Vs #IHVs #X2 #H elim (cpxs_inv_appl1 … H) -H * diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqx.ma index 178a2c440..5ccc22d53 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_teqx.ma @@ -19,8 +19,8 @@ include "basic_2/rt_computation/cpxs.ma". (* Properties with sort-irrelevant equivalence for terms ********************) -lemma teqx_cpxs_trans: ∀h,U1,T1. U1 ≛ T1 → ∀G,L,T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → - ∃∃U2. ⦃G,L⦄ ⊢ U1 ⬈*[h] U2 & U2 ≛ T2. +lemma teqx_cpxs_trans: ∀h,U1,T1. U1 ≛ T1 → ∀G,L,T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → + ∃∃U2. ❪G,L❫ ⊢ U1 ⬈*[h] U2 & U2 ≛ T2. #h #U1 #T1 #HUT1 #G #L #T2 #HT12 @(cpxs_ind … HT12) -T2 /2 width=3 by ex2_intro/ #T #T2 #_ #HT2 * #U #HU1 #HUT elim (teqx_cpx_trans … HUT … HT2) -T -T1 /3 width=3 by ex2_intro, cpxs_strap1/ @@ -28,8 +28,8 @@ qed-. (* Note: this requires teqx to be symmetric *) (* Nasic_2A1: uses: cpxs_neq_inv_step_sn *) -lemma cpxs_tneqx_fwd_step_sn: ∀h,G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → - ∃∃T,T0. ⦃G,L⦄ ⊢ T1 ⬈[h] T & T1 ≛ T → ⊥ & ⦃G,L⦄ ⊢ T ⬈*[h] T0 & T0 ≛ T2. +lemma cpxs_tneqx_fwd_step_sn: ∀h,G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → + ∃∃T,T0. ❪G,L❫ ⊢ T1 ⬈[h] T & T1 ≛ T → ⊥ & ❪G,L❫ ⊢ T ⬈*[h] T0 & T0 ≛ T2. #h #G #L #T1 #T2 #H @(cpxs_ind_dx … H) -T1 [ #H elim H -H // | #T1 #T0 #HT10 #HT02 #IH #Hn12 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx.ma index d162f660a..9ed838235 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx.ma @@ -28,11 +28,11 @@ interpretation (* Basic eliminators ********************************************************) lemma csx_ind: ∀h,G,L. ∀Q:predicate term. - (∀T1. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → - (∀T2. ⦃G,L⦄ ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → + (∀T1. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T1❫ → + (∀T2. ❪G,L❫ ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 ) → - ∀T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → Q T. + ∀T. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T❫ → Q T. #h #G #L #Q #H0 #T1 #H elim H -T1 /5 width=1 by SN_intro/ qed-. @@ -41,54 +41,54 @@ qed-. (* Basic_1: was just: sn3_pr2_intro *) lemma csx_intro: ∀h,G,L,T1. - (∀T2. ⦃G,L⦄ ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄) → - ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄. + (∀T2. ❪G,L❫ ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T2❫) → + ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T1❫. /4 width=1 by SN_intro/ qed. (* Basic forward lemmas *****************************************************) -fact csx_fwd_pair_sn_aux: ∀h,G,L,U. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃U⦄ → - ∀I,V,T. U = ②{I}V.T → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃V⦄. +fact csx_fwd_pair_sn_aux: ∀h,G,L,U. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪U❫ → + ∀I,V,T. U = ②[I]V.T → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪V❫. #h #G #L #U #H elim H -H #U0 #_ #IH #I #V #T #H destruct @csx_intro #V2 #HLV2 #HV2 -@(IH (②{I}V2.T)) -IH /2 width=3 by cpx_pair_sn/ -HLV2 +@(IH (②[I]V2.T)) -IH /2 width=3 by cpx_pair_sn/ -HLV2 #H elim (teqx_inv_pair … H) -H /2 width=1 by/ qed-. (* Basic_1: was just: sn3_gen_head *) -lemma csx_fwd_pair_sn: ∀h,I,G,L,V,T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃②{I}V.T⦄ → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃V⦄. +lemma csx_fwd_pair_sn: ∀h,I,G,L,V,T. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪②[I]V.T❫ → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪V❫. /2 width=5 by csx_fwd_pair_sn_aux/ qed-. -fact csx_fwd_bind_dx_aux: ∀h,G,L,U. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃U⦄ → - ∀p,I,V,T. U = ⓑ{p,I}V.T → ⦃G,L.ⓑ{I}V⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. +fact csx_fwd_bind_dx_aux: ∀h,G,L,U. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪U❫ → + ∀p,I,V,T. U = ⓑ[p,I]V.T → ❪G,L.ⓑ[I]V❫ ⊢ ⬈*[h] 𝐒❪T❫. #h #G #L #U #H elim H -H #U0 #_ #IH #p #I #V #T #H destruct @csx_intro #T2 #HLT2 #HT2 -@(IH (ⓑ{p, I}V.T2)) -IH /2 width=3 by cpx_bind/ -HLT2 +@(IH (ⓑ[p, I]V.T2)) -IH /2 width=3 by cpx_bind/ -HLT2 #H elim (teqx_inv_pair … H) -H /2 width=1 by/ qed-. (* Basic_1: was just: sn3_gen_bind *) -lemma csx_fwd_bind_dx: ∀h,p,I,G,L,V,T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓑ{p,I}V.T⦄ → ⦃G,L.ⓑ{I}V⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. +lemma csx_fwd_bind_dx: ∀h,p,I,G,L,V,T. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⓑ[p,I]V.T❫ → ❪G,L.ⓑ[I]V❫ ⊢ ⬈*[h] 𝐒❪T❫. /2 width=4 by csx_fwd_bind_dx_aux/ qed-. -fact csx_fwd_flat_dx_aux: ∀h,G,L,U. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃U⦄ → - ∀I,V,T. U = ⓕ{I}V.T → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. +fact csx_fwd_flat_dx_aux: ∀h,G,L,U. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪U❫ → + ∀I,V,T. U = ⓕ[I]V.T → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T❫. #h #G #L #U #H elim H -H #U0 #_ #IH #I #V #T #H destruct @csx_intro #T2 #HLT2 #HT2 -@(IH (ⓕ{I}V.T2)) -IH /2 width=3 by cpx_flat/ -HLT2 +@(IH (ⓕ[I]V.T2)) -IH /2 width=3 by cpx_flat/ -HLT2 #H elim (teqx_inv_pair … H) -H /2 width=1 by/ qed-. (* Basic_1: was just: sn3_gen_flat *) -lemma csx_fwd_flat_dx: ∀h,I,G,L,V,T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓕ{I}V.T⦄ → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. +lemma csx_fwd_flat_dx: ∀h,I,G,L,V,T. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⓕ[I]V.T❫ → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T❫. /2 width=5 by csx_fwd_flat_dx_aux/ qed-. -lemma csx_fwd_bind: ∀h,p,I,G,L,V,T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓑ{p,I}V.T⦄ → - ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ ∧ ⦃G,L.ⓑ{I}V⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. +lemma csx_fwd_bind: ∀h,p,I,G,L,V,T. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⓑ[p,I]V.T❫ → + ❪G,L❫ ⊢ ⬈*[h] 𝐒❪V❫ ∧ ❪G,L.ⓑ[I]V❫ ⊢ ⬈*[h] 𝐒❪T❫. /3 width=3 by csx_fwd_pair_sn, csx_fwd_bind_dx, conj/ qed-. -lemma csx_fwd_flat: ∀h,I,G,L,V,T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓕ{I}V.T⦄ → - ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ ∧ ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. +lemma csx_fwd_flat: ∀h,I,G,L,V,T. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⓕ[I]V.T❫ → + ❪G,L❫ ⊢ ⬈*[h] 𝐒❪V❫ ∧ ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T❫. /3 width=3 by csx_fwd_pair_sn, csx_fwd_flat_dx, conj/ qed-. (* Basic_1: removed theorems 14: diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_aaa.ma index dfbcf7e48..c963c06a4 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_aaa.ma @@ -21,7 +21,7 @@ include "basic_2/rt_computation/csx_gcr.ma". (* Main properties with atomic arity assignment *****************************) -theorem aaa_csx: ∀h,G,L,T,A. ⦃G,L⦄ ⊢ T ⁝ A → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. +theorem aaa_csx: ∀h,G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T❫. #h #G #L #T #A #H @(gcr_aaa … (csx_gcp h) (csx_gcr h) … H) qed. @@ -29,32 +29,32 @@ qed. (* Advanced eliminators *****************************************************) fact aaa_ind_csx_aux: ∀h,G,L,A. ∀Q:predicate term. - (∀T1. ⦃G,L⦄ ⊢ T1 ⁝ A → - (∀T2. ⦃G,L⦄ ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 + (∀T1. ❪G,L❫ ⊢ T1 ⁝ A → + (∀T2. ❪G,L❫ ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 ) → - ∀T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ⦃G,L⦄ ⊢ T ⁝ A → Q T. + ∀T. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T❫ → ❪G,L❫ ⊢ T ⁝ A → Q T. #h #G #L #A #Q #IH #T #H @(csx_ind … H) -T /4 width=5 by cpx_aaa_conf/ qed-. lemma aaa_ind_csx: ∀h,G,L,A. ∀Q:predicate term. - (∀T1. ⦃G,L⦄ ⊢ T1 ⁝ A → - (∀T2. ⦃G,L⦄ ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 + (∀T1. ❪G,L❫ ⊢ T1 ⁝ A → + (∀T2. ❪G,L❫ ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 ) → - ∀T. ⦃G,L⦄ ⊢ T ⁝ A → Q T. + ∀T. ❪G,L❫ ⊢ T ⁝ A → Q T. /5 width=9 by aaa_ind_csx_aux, aaa_csx/ qed-. fact aaa_ind_csx_cpxs_aux: ∀h,G,L,A. ∀Q:predicate term. - (∀T1. ⦃G,L⦄ ⊢ T1 ⁝ A → - (∀T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 + (∀T1. ❪G,L❫ ⊢ T1 ⁝ A → + (∀T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 ) → - ∀T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ⦃G,L⦄ ⊢ T ⁝ A → Q T. + ∀T. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T❫ → ❪G,L❫ ⊢ T ⁝ A → Q T. #h #G #L #A #Q #IH #T #H @(csx_ind_cpxs … H) -T /4 width=5 by cpxs_aaa_conf/ qed-. (* Basic_2A1: was: aaa_ind_csx_alt *) lemma aaa_ind_csx_cpxs: ∀h,G,L,A. ∀Q:predicate term. - (∀T1. ⦃G,L⦄ ⊢ T1 ⁝ A → - (∀T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 + (∀T1. ❪G,L❫ ⊢ T1 ⁝ A → + (∀T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 ) → - ∀T. ⦃G,L⦄ ⊢ T ⁝ A → Q T. + ∀T. ❪G,L❫ ⊢ T ⁝ A → Q T. /5 width=9 by aaa_ind_csx_cpxs_aux, aaa_csx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cnx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cnx.ma index 3cd1edff9..8cfec456c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cnx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cnx.ma @@ -20,10 +20,10 @@ include "basic_2/rt_computation/csx.ma". (* Properties with normal terms for unbound parallel rt-transition **********) (* Basic_1: was just: sn3_nf2 *) -lemma cnx_csx: ∀h,G,L,T. ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃T⦄ → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. +lemma cnx_csx: ∀h,G,L,T. ❪G,L❫ ⊢ ⬈[h] 𝐍❪T❫ → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T❫. /2 width=1 by NF_to_SN/ qed. (* Advanced properties ******************************************************) -lemma csx_sort: ∀h,G,L,s. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃⋆s⦄. +lemma csx_sort: ∀h,G,L,s. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪⋆s❫. /3 width=4 by cnx_csx, cnx_sort/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cnx_vector.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cnx_vector.ma index 949c28d9a..1e33d469c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cnx_vector.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cnx_vector.ma @@ -24,8 +24,8 @@ include "basic_2/rt_computation/csx_vector.ma". (* Basic_1: was just: sn3_appls_lref *) lemma csx_applv_cnx (h) (G) (L): - ∀T. 𝐒⦃T⦄ → ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃T⦄ → - ∀Vs. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃Vs⦄ → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶVs.T⦄. + ∀T. 𝐒❪T❫ → ❪G,L❫ ⊢ ⬈[h] 𝐍❪T❫ → + ∀Vs. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪Vs❫ → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⒶVs.T❫. #h #G #L #T #H1T #H2T #Vs elim Vs -Vs [ #_ normalize in ⊢ (????%); /2 width=1 by cnx_csx/ | #V #Vs #IHV #H @@ -41,5 +41,5 @@ qed. (* Note: strong normalization does not depend on this any more *) lemma csx_applv_sort (h) (G) (L): - ∀s,Vs. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃Vs⦄ → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶVs.⋆s⦄. + ∀s,Vs. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪Vs❫ → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⒶVs.⋆s❫. /3 width=6 by csx_applv_cnx, cnx_sort, simple_atom/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cpxs.ma index 33262e95a..9ed4a0b59 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_cpxs.ma @@ -22,13 +22,13 @@ include "basic_2/rt_computation/csx_csx.ma". (* Basic_1: was just: sn3_intro *) lemma csx_intro_cpxs: ∀h,G,L,T1. - (∀T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄) → - ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄. + (∀T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T2❫) → + ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T1❫. /4 width=1 by cpx_cpxs, csx_intro/ qed-. (* Basic_1: was just: sn3_pr3_trans *) -lemma csx_cpxs_trans: ∀h,G,L,T1. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → - ∀T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. +lemma csx_cpxs_trans: ∀h,G,L,T1. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T1❫ → + ∀T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T2❫. #h #G #L #T1 #HT1 #T2 #H @(cpxs_ind … H) -T2 /2 width=3 by csx_cpx_trans/ qed-. @@ -36,11 +36,11 @@ qed-. (* Eliminators with unbound context-sensitive rt-computation for terms ******) lemma csx_ind_cpxs_teqx: ∀h,G,L. ∀Q:predicate term. - (∀T1. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → - (∀T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 + (∀T1. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T1❫ → + (∀T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 ) → - ∀T1. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → - ∀T0. ⦃G,L⦄ ⊢ T1 ⬈*[h] T0 → ∀T2. T0 ≛ T2 → Q T2. + ∀T1. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T1❫ → + ∀T0. ❪G,L❫ ⊢ T1 ⬈*[h] T0 → ∀T2. T0 ≛ T2 → Q T2. #h #G #L #Q #IH #T1 #H @(csx_ind … H) -T1 #T1 #HT1 #IH1 #T0 #HT10 #T2 #HT02 @IH -IH /3 width=3 by csx_cpxs_trans, csx_teqx_trans/ -HT1 #V2 #HTV2 #HnTV2 @@ -60,10 +60,10 @@ qed-. (* Basic_2A1: was: csx_ind_alt *) lemma csx_ind_cpxs: ∀h,G,L. ∀Q:predicate term. - (∀T1. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → - (∀T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 + (∀T1. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T1❫ → + (∀T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1 ) → - ∀T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → Q T. + ∀T. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T❫ → Q T. #h #G #L #Q #IH #T #HT @(csx_ind_cpxs_teqx … IH … HT) -IH -HT // (**) (* full auto fails *) qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_csx.ma index 4a5330d1e..0500e4254 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_csx.ma @@ -20,24 +20,24 @@ include "basic_2/rt_computation/csx_drops.ma". (* Advanced properties ******************************************************) lemma csx_teqx_trans (h) (G): - ∀L,T1. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → - ∀T2. T1 ≛ T2 → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. + ∀L,T1. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T1❫ → + ∀T2. T1 ≛ T2 → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T2❫. #h #G #L #T1 #H @(csx_ind … H) -T1 #T #_ #IH #T2 #HT2 @csx_intro #T1 #HT21 #HnT21 elim (teqx_cpx_trans … HT2 … HT21) -HT21 /4 width=5 by teqx_repl/ qed-. lemma csx_cpx_trans (h) (G): - ∀L,T1. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → - ∀T2. ⦃G,L⦄ ⊢ T1 ⬈[h] T2 → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. + ∀L,T1. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T1❫ → + ∀T2. ❪G,L❫ ⊢ T1 ⬈[h] T2 → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T2❫. #h #G #L #T1 #H @(csx_ind … H) -T1 #T1 #HT1 #IHT1 #T2 #HLT12 elim (teqx_dec T1 T2) /3 width=4 by csx_teqx_trans/ qed-. (* Basic_1: was just: sn3_cast *) lemma csx_cast (h) (G): - ∀L,W. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃W⦄ → - ∀T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓝW.T⦄. + ∀L,W. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪W❫ → + ∀T. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T❫ → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⓝW.T❫. #h #G #L #W #HW @(csx_ind … HW) -W #W #HW #IHW #T #HT @(csx_ind … HT) -T #T #HT #IHT @csx_intro @@ -55,8 +55,8 @@ qed. (* Basic_1: was just: sn3_abbr *) (* Basic_2A1: was: csx_lref_bind *) lemma csx_lref_pair_drops (h) (G): - ∀I,L,K,V,i. ⇩*[i] L ≘ K.ⓑ{I}V → - ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃#i⦄. + ∀I,L,K,V,i. ⇩*[i] L ≘ K.ⓑ[I]V → + ❪G,K❫ ⊢ ⬈*[h] 𝐒❪V❫ → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪#i❫. #h #G #I #L #K #V #i #HLK #HV @csx_intro #X #H #Hi elim (cpx_inv_lref1_drops … H) -H [ #H destruct elim Hi // @@ -71,18 +71,18 @@ qed. (* Basic_1: was: sn3_gen_def *) (* Basic_2A1: was: csx_inv_lref_bind *) lemma csx_inv_lref_pair_drops (h) (G): - ∀I,L,K,V,i. ⇩*[i] L ≘ K.ⓑ{I}V → - ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃#i⦄ → ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄. + ∀I,L,K,V,i. ⇩*[i] L ≘ K.ⓑ[I]V → + ❪G,L❫ ⊢ ⬈*[h] 𝐒❪#i❫ → ❪G,K❫ ⊢ ⬈*[h] 𝐒❪V❫. #h #G #I #L #K #V #i #HLK #Hi -elim (lifts_total V (𝐔❴↑i❵)) +elim (lifts_total V (𝐔❨↑i❩)) /4 width=9 by csx_inv_lifts, csx_cpx_trans, cpx_delta_drops, drops_isuni_fwd_drop2/ qed-. lemma csx_inv_lref_drops (h) (G): - ∀L,i. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃#i⦄ → - ∨∨ ⇩*[Ⓕ,𝐔❴i❵] L ≘ ⋆ - | ∃∃I,K. ⇩*[i] L ≘ K.ⓤ{I} - | ∃∃I,K,V. ⇩*[i] L ≘ K.ⓑ{I}V & ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄. + ∀L,i. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪#i❫ → + ∨∨ ⇩*[Ⓕ,𝐔❨i❩] L ≘ ⋆ + | ∃∃I,K. ⇩*[i] L ≘ K.ⓤ[I] + | ∃∃I,K,V. ⇩*[i] L ≘ K.ⓑ[I]V & ❪G,K❫ ⊢ ⬈*[h] 𝐒❪V❫. #h #G #L #i #H elim (drops_F_uni L i) /2 width=1 by or3_intro0/ * * /4 width=9 by csx_inv_lref_pair_drops, ex2_3_intro, ex1_2_intro, or3_intro2, or3_intro1/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_csx_vector.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_csx_vector.ma index d88452162..cab82ac33 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_csx_vector.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_csx_vector.ma @@ -24,8 +24,8 @@ include "basic_2/rt_computation/csx_vector.ma". (* Basic_1: was just: sn3_appls_beta *) lemma csx_applv_beta (h) (G): - ∀p,L,Vs,V,W,T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶVs.ⓓ{p}ⓝW.V.T⦄ → - ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶVs.ⓐV.ⓛ{p}W.T⦄. + ∀p,L,Vs,V,W,T. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⒶVs.ⓓ[p]ⓝW.V.T❫ → + ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⒶVs.ⓐV.ⓛ[p]W.T❫. #h #G #p #L #Vs elim Vs -Vs /2 width=1 by csx_appl_beta/ #V0 #Vs #IHV #V #W #T #H1T lapply (csx_fwd_pair_sn … H1T) #HV0 @@ -39,9 +39,9 @@ elim (cpxs_fwd_beta_vector … H) -H #H qed. lemma csx_applv_delta_drops (h) (G): - ∀I,L,K,V1,i. ⇩*[i] L ≘ K.ⓑ{I}V1 → + ∀I,L,K,V1,i. ⇩*[i] L ≘ K.ⓑ[I]V1 → ∀V2. ⇧*[↑i] V1 ≘ V2 → - ∀Vs. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶVs.V2⦄ → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶVs.#i⦄. + ∀Vs. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⒶVs.V2❫ → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⒶVs.#i❫. #h #G #I #L #K #V1 #i #HLK #V2 #HV12 #Vs elim Vs -Vs [ /4 width=11 by csx_inv_lifts, csx_lref_pair_drops, drops_isuni_fwd_drop2/ | #V #Vs #IHV #H1T @@ -59,7 +59,7 @@ qed. (* Basic_1: was just: sn3_appls_abbr *) lemma csx_applv_theta (h) (G): ∀p,L,V1b,V2b. ⇧*[1] V1b ≘ V2b → - ∀V,T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓓ{p}V.ⒶV2b.T⦄ → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶV1b.ⓓ{p}V.T⦄. + ∀V,T. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⓓ[p]V.ⒶV2b.T❫ → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⒶV1b.ⓓ[p]V.T❫. #h #G #p #L #V1b #V2b * -V1b -V2b /2 width=1 by/ #V1b #V2b #V1 #V2 #HV12 #H generalize in match HV12; -HV12 generalize in match V2; -V2 generalize in match V1; -V1 @@ -77,8 +77,8 @@ qed. (* Basic_1: was just: sn3_appls_cast *) lemma csx_applv_cast (h) (G): - ∀L,Vs,U. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶVs.U⦄ → - ∀T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶVs.T⦄ → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶVs.ⓝU.T⦄. + ∀L,Vs,U. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⒶVs.U❫ → + ∀T. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⒶVs.T❫ → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⒶVs.ⓝU.T❫. #h #G #L #Vs elim Vs -Vs /2 width=1 by csx_cast/ #V #Vs #IHV #U #H1U #T #H1T lapply (csx_fwd_pair_sn … H1U) #HV diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_feqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_feqx.ma index a3cf91954..7cf01b28d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_feqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_feqx.ma @@ -19,8 +19,8 @@ include "basic_2/rt_computation/csx_reqx.ma". (* Properties with sort-irrelevant equivalence for closures *****************) -lemma csx_feqx_conf: ∀h,G1,L1,T1. ⦃G1,L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → - ∀G2,L2,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → ⦃G2,L2⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. +lemma csx_feqx_conf: ∀h,G1,L1,T1. ❪G1,L1❫ ⊢ ⬈*[h] 𝐒❪T1❫ → + ∀G2,L2,T2. ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → ❪G2,L2❫ ⊢ ⬈*[h] 𝐒❪T2❫. #h #G1 #L1 #T1 #HT1 #G2 #L2 #T2 * -G2 -L2 -T2 /3 width=3 by csx_reqx_conf, csx_teqx_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fpbq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fpbq.ma index 0329b7386..f16edc6cd 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fpbq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fpbq.ma @@ -22,8 +22,8 @@ include "basic_2/rt_computation/csx_lpx.ma". (* Properties with parallel rst-transition for closures *********************) (* Basic_2A1: was: csx_fpb_conf *) -lemma csx_fpbq_conf: ∀h,G1,L1,T1. ⦃G1,L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → - ∀G2,L2,T2. ⦃G1,L1,T1⦄ ≽[h] ⦃G2,L2,T2⦄ → ⦃G2,L2⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. +lemma csx_fpbq_conf: ∀h,G1,L1,T1. ❪G1,L1❫ ⊢ ⬈*[h] 𝐒❪T1❫ → + ∀G2,L2,T2. ❪G1,L1,T1❫ ≽[h] ❪G2,L2,T2❫ → ❪G2,L2❫ ⊢ ⬈*[h] 𝐒❪T2❫. #h #G1 #L1 #T1 #HT1 #G2 #L2 #T2 * /2 width=6 by csx_cpx_trans, csx_fquq_conf, csx_lpx_conf, csx_feqx_conf/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fqus.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fqus.ma index c35a584bb..92c26c44c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fqus.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_fqus.ma @@ -20,8 +20,8 @@ include "basic_2/rt_computation/csx_lsubr.ma". (* Properties with extended supclosure **************************************) lemma csx_fqu_conf (h) (b): - ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → - ⦃G1,L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → ⦃G2,L2⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → + ❪G1,L1❫ ⊢ ⬈*[h] 𝐒❪T1❫ → ❪G2,L2❫ ⊢ ⬈*[h] 𝐒❪T2❫. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 [ /3 width=5 by csx_inv_lref_pair_drops, drops_refl/ | /2 width=3 by csx_fwd_pair_sn/ @@ -33,22 +33,22 @@ lemma csx_fqu_conf (h) (b): qed-. lemma csx_fquq_conf (h) (b): - ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂⸮[b] ⦃G2,L2,T2⦄ → - ⦃G1,L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → ⦃G2,L2⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → + ❪G1,L1❫ ⊢ ⬈*[h] 𝐒❪T1❫ → ❪G2,L2❫ ⊢ ⬈*[h] 𝐒❪T2❫. #h #b #G1 #G2 #L1 #L2 #T1 #T2 * /2 width=6 by csx_fqu_conf/ * #HG #HL #HT destruct // qed-. lemma csx_fqup_conf (h) (b): - ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄ → - ⦃G1,L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → ⦃G2,L2⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → + ❪G1,L1❫ ⊢ ⬈*[h] 𝐒❪T1❫ → ❪G2,L2❫ ⊢ ⬈*[h] 𝐒❪T2❫. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2 /3 width=6 by csx_fqu_conf/ qed-. lemma csx_fqus_conf (h) (b): - ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂*[b] ⦃G2,L2,T2⦄ → - ⦃G1,L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → ⦃G2,L2⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. + ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → + ❪G1,L1❫ ⊢ ⬈*[h] 𝐒❪T1❫ → ❪G2,L2❫ ⊢ ⬈*[h] 𝐒❪T2❫. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -H /3 width=6 by csx_fquq_conf/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lpx.ma index 79d69cf4c..5c4018a72 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lpx.ma @@ -20,8 +20,8 @@ include "basic_2/rt_computation/csx_cpxs.ma". (* Properties with unbound parallel rt-transition on all entries ************) lemma csx_lpx_conf (h) (G): - ∀L1,T. ⦃G,L1⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → - ∀L2. ⦃G,L1⦄ ⊢ ⬈[h] L2 → ⦃G,L2⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. + ∀L1,T. ❪G,L1❫ ⊢ ⬈*[h] 𝐒❪T❫ → + ∀L2. ❪G,L1❫ ⊢ ⬈[h] L2 → ❪G,L2❫ ⊢ ⬈*[h] 𝐒❪T❫. #h #G #L1 #T #H @(csx_ind_cpxs … H) -T /4 width=3 by csx_intro, lpx_cpx_trans/ qed-. @@ -29,8 +29,8 @@ qed-. (* Advanced properties ******************************************************) lemma csx_abst (h) (G): - ∀p,L,W. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃W⦄ → - ∀T. ⦃G,L.ⓛW⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓛ{p}W.T⦄. + ∀p,L,W. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪W❫ → + ∀T. ❪G,L.ⓛW❫ ⊢ ⬈*[h] 𝐒❪T❫ → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⓛ[p]W.T❫. #h #G #p #L #W #HW @(csx_ind … HW) -W #W #_ #IHW #T #HT @(csx_ind … HT) -T #T #HT #IHT @@ -45,8 +45,8 @@ elim (tneqx_inv_pair … H2) -H2 qed. lemma csx_abbr (h) (G): - ∀p,L,V. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ → - ∀T. ⦃G,L.ⓓV⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓓ{p}V.T⦄. + ∀p,L,V. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪V❫ → + ∀T. ❪G,L.ⓓV❫ ⊢ ⬈*[h] 𝐒❪T❫ → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⓓ[p]V.T❫. #h #G #p #L #V #HV @(csx_ind … HV) -V #V #_ #IHV #T #HT @(csx_ind_cpxs … HT) -T #T #HT #IHT @@ -64,15 +64,15 @@ elim (cpx_inv_abbr1 … H1) -H1 * qed. lemma csx_bind (h) (G): - ∀p,I,L,V. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ → - ∀T. ⦃G,L.ⓑ{I}V⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓑ{p,I}V.T⦄. + ∀p,I,L,V. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪V❫ → + ∀T. ❪G,L.ⓑ[I]V❫ ⊢ ⬈*[h] 𝐒❪T❫ → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⓑ[p,I]V.T❫. #h #G #p * #L #V #HV #T #HT /2 width=1 by csx_abbr, csx_abst/ qed. fact csx_appl_theta_aux (h) (G): - ∀p,L,U. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃U⦄ → ∀V1,V2. ⇧*[1] V1 ≘ V2 → - ∀V,T. U = ⓓ{p}V.ⓐV2.T → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓐV1.ⓓ{p}V.T⦄. + ∀p,L,U. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪U❫ → ∀V1,V2. ⇧*[1] V1 ≘ V2 → + ∀V,T. U = ⓓ[p]V.ⓐV2.T → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⓐV1.ⓓ[p]V.T❫. #h #G #p #L #X #H @(csx_ind_cpxs … H) -X #X #HVT #IHVT #V1 #V2 #HV12 #V #T #H destruct lapply (csx_fwd_pair_sn … HVT) #HV @@ -83,7 +83,7 @@ elim (cpx_inv_appl1 … HL) -HL * elim (cpx_inv_abbr1 … HL) -HL * [ #V3 #T3 #HV3 #HLT3 #H0 destruct elim (cpx_lifts_sn … HLV10 (Ⓣ) … (L.ⓓV) … HV12) -HLV10 /3 width=1 by drops_refl, drops_drop/ #V4 #HV04 #HV24 - elim (teqx_dec (ⓓ{p}V.ⓐV2.T) (ⓓ{p}V3.ⓐV4.T3)) #H0 + elim (teqx_dec (ⓓ[p]V.ⓐV2.T) (ⓓ[p]V3.ⓐV4.T3)) #H0 [ -IHVT -HV3 -HV24 -HLT3 elim (teqx_inv_pair … H0) -H0 #_ #HV3 #H0 elim (teqx_inv_pair … H0) -H0 #_ #HV24 #HT3 @@ -106,6 +106,6 @@ elim (cpx_inv_appl1 … HL) -HL * qed-. lemma csx_appl_theta (h) (G): - ∀p,L,V,V2,T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓓ{p}V.ⓐV2.T⦄ → - ∀V1. ⇧*[1] V1 ≘ V2 → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓐV1.ⓓ{p}V.T⦄. + ∀p,L,V,V2,T. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⓓ[p]V.ⓐV2.T❫ → + ∀V1. ⇧*[1] V1 ≘ V2 → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⓐV1.ⓓ[p]V.T❫. /2 width=5 by csx_appl_theta_aux/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lpxs.ma index 84086bcb6..1629eddcd 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lpxs.ma @@ -19,8 +19,8 @@ include "basic_2/rt_computation/lpxs_lpx.ma". (* Properties with unbound parallel rt-computation on all entries ***********) -lemma csx_lpxs_conf: ∀h,G,L1,L2,T. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → - ⦃G,L1⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ⦃G,L2⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. +lemma csx_lpxs_conf: ∀h,G,L1,L2,T. ❪G,L1❫ ⊢ ⬈*[h] L2 → + ❪G,L1❫ ⊢ ⬈*[h] 𝐒❪T❫ → ❪G,L2❫ ⊢ ⬈*[h] 𝐒❪T❫. #h #G #L1 #L2 #T #H @(lpxs_ind_dx … H) -L2 /3 by lpxs_step_dx, csx_lpx_conf/ qed-. 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 6d37e77be..5b180f3da 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 @@ -20,8 +20,8 @@ include "basic_2/rt_computation/csx_csx.ma". (* Advanced properties ******************************************************) fact csx_appl_beta_aux (h) (G): - ∀p,L,U1. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃U1⦄ → - ∀V,W,T1. U1 = ⓓ{p}ⓝW.V.T1 → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓐV.ⓛ{p}W.T1⦄. + ∀p,L,U1. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪U1❫ → + ∀V,W,T1. U1 = ⓓ[p]ⓝW.V.T1 → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⓐV.ⓛ[p]W.T1❫. #h #G #p #L #X #H @(csx_ind … H) -X #X #HT1 #IHT1 #V #W #T1 #H1 destruct @csx_intro #X #H1 #H2 @@ -44,34 +44,34 @@ qed-. (* Basic_1: was just: sn3_beta *) lemma csx_appl_beta (h) (G): - ∀p,L,V,W,T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓓ{p}ⓝW.V.T⦄ → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓐV.ⓛ{p}W.T⦄. + ∀p,L,V,W,T. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⓓ[p]ⓝW.V.T❫ → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⓐV.ⓛ[p]W.T❫. /2 width=3 by csx_appl_beta_aux/ qed. (* Advanced forward lemmas **************************************************) fact csx_fwd_bind_dx_unit_aux (h) (G): - ∀L,U. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃U⦄ → - ∀p,I,J,V,T. U = ⓑ{p,I}V.T → ⦃G,L.ⓤ{J}⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. + ∀L,U. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪U❫ → + ∀p,I,J,V,T. U = ⓑ[p,I]V.T → ❪G,L.ⓤ[J]❫ ⊢ ⬈*[h] 𝐒❪T❫. #h #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 +@(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 (h) (G): - ∀p,I,L,V,T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓑ{p,I}V.T⦄ → - ∀J. ⦃G,L.ⓤ{J}⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. + ∀p,I,L,V,T. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⓑ[p,I]V.T❫ → + ∀J. ❪G,L.ⓤ[J]❫ ⊢ ⬈*[h] 𝐒❪T❫. /2 width=6 by csx_fwd_bind_dx_unit_aux/ qed-. lemma csx_fwd_bind_unit (h) (G): - ∀p,I,L,V,T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓑ{p,I}V.T⦄ → - ∀J. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ ∧ ⦃G,L.ⓤ{J}⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. + ∀p,I,L,V,T. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⓑ[p,I]V.T❫ → + ∀J. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪V❫ ∧ ❪G,L.ⓤ[J]❫ ⊢ ⬈*[h] 𝐒❪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 (h) (G): - ∀L1,T. ⦃G,L1⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ∀L2. L1 ⫃ L2 → ⦃G,L2⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. + ∀L1,T. ❪G,L1❫ ⊢ ⬈*[h] 𝐒❪T❫ → ∀L2. L1 ⫃ L2 → ❪G,L2❫ ⊢ ⬈*[h] 𝐒❪T❫. #h #G #L1 #T #H @(csx_ind … H) -T #T1 #_ #IH #L2 #HL12 @csx_intro #T2 #HT12 #HnT12 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_reqx.ma index 7b3cfdae3..a32c9380e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_reqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_reqx.ma @@ -20,8 +20,8 @@ include "basic_2/rt_computation/csx_csx.ma". (* Properties with sort-irrelevant equivalence for local environments *******) (* Basic_2A1: uses: csx_lleq_conf *) -lemma csx_reqx_conf: ∀h,G,L1,T. ⦃G,L1⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → - ∀L2. L1 ≛[T] L2 → ⦃G,L2⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. +lemma csx_reqx_conf: ∀h,G,L1,T. ❪G,L1❫ ⊢ ⬈*[h] 𝐒❪T❫ → + ∀L2. L1 ≛[T] L2 → ❪G,L2❫ ⊢ ⬈*[h] 𝐒❪T❫. #h #G #L1 #T #H @(csx_ind … H) -T #T1 #_ #IH #L2 #HL12 @csx_intro #T2 #HT12 #HnT12 @@ -31,5 +31,5 @@ qed-. (* Basic_2A1: uses: csx_lleq_conf *) lemma csx_reqx_trans: ∀h,L1,L2,T. L1 ≛[T] L2 → - ∀G. ⦃G,L2⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ⦃G,L1⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. + ∀G. ❪G,L2❫ ⊢ ⬈*[h] 𝐒❪T❫ → ❪G,L1❫ ⊢ ⬈*[h] 𝐒❪T❫. /3 width=3 by csx_reqx_conf, reqx_sym/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple.ma index 50e525ec4..765cc7a3c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple.ma @@ -19,9 +19,9 @@ include "basic_2/rt_computation/csx_csx.ma". (* Properties with simple terms *********************************************) -lemma csx_appl_simple: ∀h,G,L,V. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ → ∀T1. - (∀T2. ⦃G,L⦄ ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓐV.T2⦄) → - 𝐒⦃T1⦄ → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓐV.T1⦄. +lemma csx_appl_simple: ∀h,G,L,V. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪V❫ → ∀T1. + (∀T2. ❪G,L❫ ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⓐV.T2❫) → + 𝐒❪T1❫ → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⓐV.T1❫. #h #G #L #V #H @(csx_ind … H) -V #V #_ #IHV #T1 #IHT1 #HT1 @csx_intro #X #H1 #H2 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple_teqo.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple_teqo.ma index 70ee928ff..52f68f6ff 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple_teqo.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_simple_teqo.ma @@ -25,9 +25,9 @@ include "basic_2/rt_computation/csx_csx.ma". (* Basic_1: was just: sn3_appl_appl *) (* Basic_2A1: was: csx_appl_simple_tsts *) lemma csx_appl_simple_teqo (h) (G) (L): - ∀V. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ → ∀T1. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → - (∀T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → (T1 ⩳ T2 → ⊥) → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓐV.T2⦄) → - 𝐒⦃T1⦄ → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓐV.T1⦄. + ∀V. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪V❫ → ∀T1. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T1❫ → + (∀T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → (T1 ⩳ T2 → ⊥) → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⓐV.T2❫) → + 𝐒❪T1❫ → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⓐV.T1❫. #h #G #L #V #H @(csx_ind … H) -V #V #_ #IHV #T1 #H @(csx_ind … H) -T1 #T1 #H1T1 #IHT1 #H2T1 #H3T1 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_vector.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_vector.ma index f4b85eb9d..d436de774 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_vector.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_vector.ma @@ -26,14 +26,14 @@ interpretation (* Basic inversion lemmas ***************************************************) -lemma csxv_inv_cons: ∀h,G,L,T,Ts. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⨮Ts⦄ → - ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ ∧ ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃Ts⦄. +lemma csxv_inv_cons: ∀h,G,L,T,Ts. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T⨮Ts❫ → + ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T❫ ∧ ❪G,L❫ ⊢ ⬈*[h] 𝐒❪Ts❫. normalize // qed-. (* Basic forward lemmas *****************************************************) -lemma csx_fwd_applv: ∀h,G,L,T,Vs. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶVs.T⦄ → - ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃Vs⦄ ∧ ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. +lemma csx_fwd_applv: ∀h,G,L,T,Vs. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⒶVs.T❫ → + ❪G,L❫ ⊢ ⬈*[h] 𝐒❪Vs❫ ∧ ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T❫. #h #G #L #T #Vs elim Vs -Vs /2 width=1 by conj/ #V #Vs #IHVs #HVs lapply (csx_fwd_pair_sn … HVs) #HV diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg.ma index f975e1b2f..2d33bdf49 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg.ma @@ -21,45 +21,45 @@ include "basic_2/rt_computation/fpbs.ma". definition fpbg: ∀h. tri_relation genv lenv term ≝ λh,G1,L1,T1,G2,L2,T2. - ∃∃G,L,T. ⦃G1,L1,T1⦄ ≻[h] ⦃G,L,T⦄ & ⦃G,L,T⦄ ≥[h] ⦃G2,L2,T2⦄. + ∃∃G,L,T. ❪G1,L1,T1❫ ≻[h] ❪G,L,T❫ & ❪G,L,T❫ ≥[h] ❪G2,L2,T2❫. interpretation "proper parallel rst-computation (closure)" 'PRedSubTyStarProper h G1 L1 T1 G2 L2 T2 = (fpbg h G1 L1 T1 G2 L2 T2). (* Basic properties *********************************************************) -lemma fpb_fpbg: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≻[h] ⦃G2,L2,T2⦄ → - ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄. +lemma fpb_fpbg: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. /2 width=5 by ex2_3_intro/ qed. lemma fpbg_fpbq_trans: ∀h,G1,G,G2,L1,L,L2,T1,T,T2. - ⦃G1,L1,T1⦄ >[h] ⦃G,L,T⦄ → ⦃G,L,T⦄ ≽[h] ⦃G2,L2,T2⦄ → - ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄. + ❪G1,L1,T1❫ >[h] ❪G,L,T❫ → ❪G,L,T❫ ≽[h] ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. #h #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 * /3 width=9 by fpbs_strap1, ex2_3_intro/ qed-. lemma fpbg_fqu_trans (h): ∀G1,G,G2,L1,L,L2,T1,T,T2. - ⦃G1,L1,T1⦄ >[h] ⦃G,L,T⦄ → ⦃G,L,T⦄ ⬂ ⦃G2,L2,T2⦄ → - ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄. + ❪G1,L1,T1❫ >[h] ❪G,L,T❫ → ❪G,L,T❫ ⬂ ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. #h #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 /4 width=5 by fpbg_fpbq_trans, fpbq_fquq, fqu_fquq/ qed-. (* Note: this is used in the closure proof *) -lemma fpbg_fpbs_trans: ∀h,G,G2,L,L2,T,T2. ⦃G,L,T⦄ ≥[h] ⦃G2,L2,T2⦄ → - ∀G1,L1,T1. ⦃G1,L1,T1⦄ >[h] ⦃G,L,T⦄ → ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄. +lemma fpbg_fpbs_trans: ∀h,G,G2,L,L2,T,T2. ❪G,L,T❫ ≥[h] ❪G2,L2,T2❫ → + ∀G1,L1,T1. ❪G1,L1,T1❫ >[h] ❪G,L,T❫ → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. #h #G #G2 #L #L2 #T #T2 #H @(fpbs_ind_dx … H) -G -L -T /3 width=5 by fpbg_fpbq_trans/ qed-. (* Basic_2A1: uses: fpbg_fleq_trans *) -lemma fpbg_feqx_trans: ∀h,G1,G,L1,L,T1,T. ⦃G1,L1,T1⦄ >[h] ⦃G,L,T⦄ → - ∀G2,L2,T2. ⦃G,L,T⦄ ≛ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄. +lemma fpbg_feqx_trans: ∀h,G1,G,L1,L,T1,T. ❪G1,L1,T1❫ >[h] ❪G,L,T❫ → + ∀G2,L2,T2. ❪G,L,T❫ ≛ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. /3 width=5 by fpbg_fpbq_trans, fpbq_feqx/ qed-. (* Properties with t-bound rt-transition for terms **************************) lemma cpm_tneqx_cpm_fpbg (h) (G) (L): - ∀n1,T1,T. ⦃G,L⦄ ⊢ T1 ➡[n1,h] T → (T1 ≛ T → ⊥) → - ∀n2,T2. ⦃G,L⦄ ⊢ T ➡[n2,h] T2 → ⦃G,L,T1⦄ >[h] ⦃G,L,T2⦄. + ∀n1,T1,T. ❪G,L❫ ⊢ T1 ➡[n1,h] T → (T1 ≛ T → ⊥) → + ∀n2,T2. ❪G,L❫ ⊢ T ➡[n2,h] T2 → ❪G,L,T1❫ >[h] ❪G,L,T2❫. /4 width=5 by fpbq_fpbs, cpm_fpbq, cpm_fpb, ex2_3_intro/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_cpxs.ma index 35828f20c..e12dae651 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_cpxs.ma @@ -21,13 +21,13 @@ include "basic_2/rt_computation/fpbg_fpbs.ma". (* Properties with unbound context-sensitive parallel rt-computation ********) (* Basic_2A1: was: cpxs_fpbg *) -lemma cpxs_tneqx_fpbg (h): ∀G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → - (T1 ≛ T2 → ⊥) → ⦃G,L,T1⦄ >[h] ⦃G,L,T2⦄. +lemma cpxs_tneqx_fpbg (h): ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → + (T1 ≛ T2 → ⊥) → ❪G,L,T1❫ >[h] ❪G,L,T2❫. #h #G #L #T1 #T2 #H #H0 elim (cpxs_tneqx_fwd_step_sn … H … H0) -H -H0 /4 width=5 by cpxs_teqx_fpbs, fpb_cpx, ex2_3_intro/ qed. -lemma cpxs_fpbg_trans (h): ∀G1,L1,T1,T. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] T → - ∀G2,L2,T2. ⦃G1,L1,T⦄ >[h] ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄. +lemma cpxs_fpbg_trans (h): ∀G1,L1,T1,T. ❪G1,L1❫ ⊢ T1 ⬈*[h] T → + ∀G2,L2,T2. ❪G1,L1,T❫ >[h] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. /3 width=5 by fpbs_fpbg_trans, cpxs_fpbs/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fpbs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fpbs.ma index f7e3f5b23..888b96969 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fpbs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fpbs.ma @@ -22,7 +22,7 @@ include "basic_2/rt_computation/fpbg.ma". (* Advanced forward lemmas **************************************************) lemma fpbg_fwd_fpbs: ∀h,G1,G2,L1,L2,T1,T2. - ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. + ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. #h #G1 #G2 #L1 #L2 #T1 #T2 * /3 width=5 by fpbs_strap2, fpb_fpbq/ qed-. @@ -30,8 +30,8 @@ qed-. (* Advanced properties with sort-irrelevant equivalence on closures *********) (* Basic_2A1: uses: fleq_fpbg_trans *) -lemma feqx_fpbg_trans: ∀h,G,G2,L,L2,T,T2. ⦃G,L,T⦄ >[h] ⦃G2,L2,T2⦄ → - ∀G1,L1,T1. ⦃G1,L1,T1⦄ ≛ ⦃G,L,T⦄ → ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄. +lemma feqx_fpbg_trans: ∀h,G,G2,L,L2,T,T2. ❪G,L,T❫ >[h] ❪G2,L2,T2❫ → + ∀G1,L1,T1. ❪G1,L1,T1❫ ≛ ❪G,L,T❫ → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. #h #G #G2 #L #L2 #T #T2 * #G0 #L0 #T0 #H0 #H02 #G1 #L1 #T1 #H1 elim (feqx_fpb_trans … H1 … H0) -G -L -T /4 width=9 by fpbs_strap2, fpbq_feqx, ex2_3_intro/ @@ -40,15 +40,15 @@ qed-. (* Properties with parallel proper rst-reduction on closures ****************) lemma fpb_fpbg_trans: ∀h,G1,G,G2,L1,L,L2,T1,T,T2. - ⦃G1,L1,T1⦄ ≻[h] ⦃G,L,T⦄ → ⦃G,L,T⦄ >[h] ⦃G2,L2,T2⦄ → - ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄. + ❪G1,L1,T1❫ ≻[h] ❪G,L,T❫ → ❪G,L,T❫ >[h] ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. /3 width=5 by fpbg_fwd_fpbs, ex2_3_intro/ qed-. (* Properties with parallel rst-reduction on closures ***********************) lemma fpbq_fpbg_trans: ∀h,G1,G,G2,L1,L,L2,T1,T,T2. - ⦃G1,L1,T1⦄ ≽[h] ⦃G,L,T⦄ → ⦃G,L,T⦄ >[h] ⦃G2,L2,T2⦄ → - ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄. + ❪G1,L1,T1❫ ≽[h] ❪G,L,T❫ → ❪G,L,T❫ >[h] ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. #h #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 elim (fpbq_inv_fpb … H1) -H1 /2 width=5 by feqx_fpbg_trans, fpb_fpbg_trans/ @@ -56,24 +56,24 @@ qed-. (* Properties with parallel rst-compuutation on closures ********************) -lemma fpbs_fpbg_trans: ∀h,G1,G,L1,L,T1,T. ⦃G1,L1,T1⦄ ≥[h] ⦃G,L,T⦄ → - ∀G2,L2,T2. ⦃G,L,T⦄ >[h] ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄. +lemma fpbs_fpbg_trans: ∀h,G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ≥[h] ❪G,L,T❫ → + ∀G2,L2,T2. ❪G,L,T❫ >[h] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. #h #G1 #G #L1 #L #T1 #T #H @(fpbs_ind … H) -G -L -T /3 width=5 by fpbq_fpbg_trans/ qed-. (* Advanced properties with plus-iterated structural successor for closures *) lemma fqup_fpbg_trans (h): - ∀G1,G,L1,L,T1,T. ⦃G1,L1,T1⦄ ⬂+ ⦃G,L,T⦄ → - ∀G2,L2,T2. ⦃G,L,T⦄ >[h] ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄. + ∀G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ⬂+ ❪G,L,T❫ → + ∀G2,L2,T2. ❪G,L,T❫ >[h] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. /3 width=5 by fpbs_fpbg_trans, fqup_fpbs/ qed-. (* Advanced inversion lemmas of parallel rst-computation on closures ********) (* Basic_2A1: was: fpbs_fpbg *) -lemma fpbs_inv_fpbg: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄ → - ∨∨ ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ - | ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄. +lemma fpbs_inv_fpbg: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫ → + ∨∨ ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ + | ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. #h #G1 #G2 #L1 #L2 #T1 #T2 #H @(fpbs_ind … H) -G2 -L2 -T2 [ /2 width=1 by or_introl/ | #G #G2 #L #L2 #T #T2 #_ #H2 * #H1 @@ -89,9 +89,9 @@ qed-. (* Advanced properties of parallel rst-computation on closures **************) -lemma fpbs_fpb_trans: ∀h,F1,F2,K1,K2,T1,T2. ⦃F1,K1,T1⦄ ≥[h] ⦃F2,K2,T2⦄ → - ∀G2,L2,U2. ⦃F2,K2,T2⦄ ≻[h] ⦃G2,L2,U2⦄ → - ∃∃G1,L1,U1. ⦃F1,K1,T1⦄ ≻[h] ⦃G1,L1,U1⦄ & ⦃G1,L1,U1⦄ ≥[h] ⦃G2,L2,U2⦄. +lemma fpbs_fpb_trans: ∀h,F1,F2,K1,K2,T1,T2. ❪F1,K1,T1❫ ≥[h] ❪F2,K2,T2❫ → + ∀G2,L2,U2. ❪F2,K2,T2❫ ≻[h] ❪G2,L2,U2❫ → + ∃∃G1,L1,U1. ❪F1,K1,T1❫ ≻[h] ❪G1,L1,U1❫ & ❪G1,L1,U1❫ ≥[h] ❪G2,L2,U2❫. #h #F1 #F2 #K1 #K2 #T1 #T2 #H elim (fpbs_inv_fpbg … H) -H [ #H12 #G2 #L2 #U2 #H2 elim (feqx_fpb_trans … H12 … H2) -F2 -K2 -T2 /3 width=5 by feqx_fpbs, ex2_3_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fqup.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fqup.ma index c2fde98d7..029c086d3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fqup.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_fqup.ma @@ -19,14 +19,14 @@ include "basic_2/rt_computation/fpbg.ma". (* Advanced properties with sort-irrelevant equivalence for terms ***********) -lemma fpbg_teqx_div: ∀h,G1,G2,L1,L2,T1,T. ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T⦄ → - ∀T2. T2 ≛ T → ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄. +lemma fpbg_teqx_div: ∀h,G1,G2,L1,L2,T1,T. ❪G1,L1,T1❫ >[h] ❪G2,L2,T❫ → + ∀T2. T2 ≛ T → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. /4 width=5 by fpbg_feqx_trans, teqx_feqx, teqx_sym/ qed-. (* Properties with plus-iterated structural successor for closures **********) (* Note: this is used in the closure proof *) -lemma fqup_fpbg: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂+ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄. +lemma fqup_fpbg: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫. #h #G1 #G2 #L1 #L2 #T1 #T2 #H elim (fqup_inv_step_sn … H) -H /3 width=5 by fqus_fpbs, fpb_fqu, ex2_3_intro/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_lpxs.ma index 654110c10..2893e58e5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_lpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbg_lpxs.ma @@ -20,8 +20,8 @@ include "basic_2/rt_computation/fpbg.ma". (* Properties with unbound rt-computation on full local environments ********) (* Basic_2A1: uses: lpxs_fpbg *) -lemma lpxs_rneqx_fpbg: ∀h,G,L1,L2,T. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → - (L1 ≛[T] L2 → ⊥) → ⦃G,L1,T⦄ >[h] ⦃G,L2,T⦄. +lemma lpxs_rneqx_fpbg: ∀h,G,L1,L2,T. ❪G,L1❫ ⊢ ⬈*[h] L2 → + (L1 ≛[T] L2 → ⊥) → ❪G,L1,T❫ >[h] ❪G,L2,T❫. #h #G #L1 #L2 #T #H #H0 elim (lpxs_rneqx_inv_step_sn … H … H0) -H -H0 /4 width=7 by fpb_lpx, lpxs_feqx_fpbs, feqx_intro_sn, ex2_3_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs.ma index 19584074f..64277054e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs.ma @@ -27,13 +27,13 @@ interpretation "parallel rst-computation (closure)" (* Basic eliminators ********************************************************) lemma fpbs_ind: ∀h,G1,L1,T1. ∀Q:relation3 genv lenv term. Q G1 L1 T1 → - (∀G,G2,L,L2,T,T2. ⦃G1,L1,T1⦄ ≥[h] ⦃G,L,T⦄ → ⦃G,L,T⦄ ≽[h] ⦃G2,L2,T2⦄ → Q G L T → Q G2 L2 T2) → - ∀G2,L2,T2. ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄ → Q G2 L2 T2. + (∀G,G2,L,L2,T,T2. ❪G1,L1,T1❫ ≥[h] ❪G,L,T❫ → ❪G,L,T❫ ≽[h] ❪G2,L2,T2❫ → Q G L T → Q G2 L2 T2) → + ∀G2,L2,T2. ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫ → Q G2 L2 T2. /3 width=8 by tri_TC_star_ind/ qed-. lemma fpbs_ind_dx: ∀h,G2,L2,T2. ∀Q:relation3 genv lenv term. Q G2 L2 T2 → - (∀G1,G,L1,L,T1,T. ⦃G1,L1,T1⦄ ≽[h] ⦃G,L,T⦄ → ⦃G,L,T⦄ ≥[h] ⦃G2,L2,T2⦄ → Q G L T → Q G1 L1 T1) → - ∀G1,L1,T1. ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄ → Q G1 L1 T1. + (∀G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ≽[h] ❪G,L,T❫ → ❪G,L,T❫ ≥[h] ❪G2,L2,T2❫ → Q G L T → Q G1 L1 T1) → + ∀G1,L1,T1. ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫ → Q G1 L1 T1. /3 width=8 by tri_TC_star_ind_dx/ qed-. (* Basic properties *********************************************************) @@ -41,34 +41,34 @@ lemma fpbs_ind_dx: ∀h,G2,L2,T2. ∀Q:relation3 genv lenv term. Q G2 L2 T2 → lemma fpbs_refl: ∀h. tri_reflexive … (fpbs h). /2 width=1 by tri_inj/ qed. -lemma fpbq_fpbs: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≽[h] ⦃G2,L2,T2⦄ → - ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. +lemma fpbq_fpbs: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≽[h] ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. /2 width=1 by tri_inj/ qed. -lemma fpbs_strap1: ∀h,G1,G,G2,L1,L,L2,T1,T,T2. ⦃G1,L1,T1⦄ ≥[h] ⦃G,L,T⦄ → - ⦃G,L,T⦄ ≽[h] ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. +lemma fpbs_strap1: ∀h,G1,G,G2,L1,L,L2,T1,T,T2. ❪G1,L1,T1❫ ≥[h] ❪G,L,T❫ → + ❪G,L,T❫ ≽[h] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. /2 width=5 by tri_step/ qed-. -lemma fpbs_strap2: ∀h,G1,G,G2,L1,L,L2,T1,T,T2. ⦃G1,L1,T1⦄ ≽[h] ⦃G,L,T⦄ → - ⦃G,L,T⦄ ≥[h] ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. +lemma fpbs_strap2: ∀h,G1,G,G2,L1,L,L2,T1,T,T2. ❪G1,L1,T1❫ ≽[h] ❪G,L,T❫ → + ❪G,L,T❫ ≥[h] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. /2 width=5 by tri_TC_strap/ qed-. (* Basic_2A1: uses: lleq_fpbs fleq_fpbs *) -lemma feqx_fpbs: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. +lemma feqx_fpbs: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. /3 width=1 by fpbq_fpbs, fpbq_feqx/ qed. (* Basic_2A1: uses: fpbs_lleq_trans *) -lemma fpbs_feqx_trans: ∀h,G1,G,L1,L,T1,T. ⦃G1,L1,T1⦄ ≥[h] ⦃G,L,T⦄ → - ∀G2,L2,T2. ⦃G,L,T⦄ ≛ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. +lemma fpbs_feqx_trans: ∀h,G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ≥[h] ❪G,L,T❫ → + ∀G2,L2,T2. ❪G,L,T❫ ≛ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. /3 width=9 by fpbs_strap1, fpbq_feqx/ qed-. (* Basic_2A1: uses: lleq_fpbs_trans *) -lemma feqx_fpbs_trans: ∀h,G,G2,L,L2,T,T2. ⦃G,L,T⦄ ≥[h] ⦃G2,L2,T2⦄ → - ∀G1,L1,T1. ⦃G1,L1,T1⦄ ≛ ⦃G,L,T⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. +lemma feqx_fpbs_trans: ∀h,G,G2,L,L2,T,T2. ❪G,L,T❫ ≥[h] ❪G2,L2,T2❫ → + ∀G1,L1,T1. ❪G1,L1,T1❫ ≛ ❪G,L,T❫ → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. /3 width=5 by fpbs_strap2, fpbq_feqx/ qed-. lemma teqx_reqx_lpx_fpbs: ∀h,T1,T2. T1 ≛ T2 → ∀L1,L0. L1 ≛[T2] L0 → - ∀G,L2. ⦃G,L0⦄ ⊢ ⬈[h] L2 → ⦃G,L1,T1⦄ ≥[h] ⦃G,L2,T2⦄. + ∀G,L2. ❪G,L0❫ ⊢ ⬈[h] L2 → ❪G,L1,T1❫ ≥[h] ❪G,L2,T2❫. /4 width=5 by feqx_fpbs, fpbs_strap1, fpbq_lpx, feqx_intro_dx/ qed. (* Basic_2A1: removed theorems 3: diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_aaa.ma index 9d27bacb8..9a54fb6c5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_aaa.ma @@ -19,8 +19,8 @@ include "basic_2/rt_computation/fpbs.ma". (* Properties with atomic arity assignment for terms ************************) -lemma fpbs_aaa_conf: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄ → - ∀A1. ⦃G1,L1⦄ ⊢ T1 ⁝ A1 → ∃A2. ⦃G2,L2⦄ ⊢ T2 ⁝ A2. +lemma fpbs_aaa_conf: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫ → + ∀A1. ❪G1,L1❫ ⊢ T1 ⁝ A1 → ∃A2. ❪G2,L2❫ ⊢ T2 ⁝ A2. #h #G1 #G2 #L1 #L2 #T1 #T2 #H @(fpbs_ind … H) -G2 -L2 -T2 /2 width=2 by ex_intro/ #G #G2 #L #L2 #T #T2 #_ #H2 #IH1 #A #HA elim (IH1 … HA) -IH1 -A /2 width=8 by fpbq_aaa_conf/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpx.ma index 4d41c9b62..536e532a4 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpx.ma @@ -21,9 +21,9 @@ include "basic_2/rt_computation/fpbs_lpxs.ma". (* Properties with unbound context-sensitive parallel rt-transition *********) (* Basic_2A1: uses: fpbs_cpx_trans_neq *) -lemma fpbs_cpx_tneqx_trans: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄ → - ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) → - ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈[h] U1 & T1 ≛ U1 → ⊥ & ⦃G1,L1,U1⦄ ≥[h] ⦃G2,L2,U2⦄. +lemma fpbs_cpx_tneqx_trans: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈[h] U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ≥[h] ❪G2,L2,U2❫. #h #G1 #G2 #L1 #L2 #T1 #T2 #H #U2 #HTU2 #HnTU2 elim (fpbs_inv_star … H) -H #G0 #L0 #L3 #T0 #T3 #HT10 #H10 #HL03 #H32 elim (feqx_cpx_trans … H32 … HTU2) -HTU2 #T4 #HT34 #H42 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpxs.ma index a0534a0e3..872882627 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_cpxs.ma @@ -19,40 +19,40 @@ include "basic_2/rt_computation/fpbs_fqup.ma". (* Properties with unbound context-sensitive parallel rt-computation ********) -lemma cpxs_fpbs: ∀h,G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → ⦃G,L,T1⦄ ≥[h] ⦃G,L,T2⦄. +lemma cpxs_fpbs: ∀h,G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → ❪G,L,T1❫ ≥[h] ❪G,L,T2❫. #h #G #L #T1 #T2 #H @(cpxs_ind … H) -T2 /3 width=5 by fpbq_cpx, fpbs_strap1/ qed. -lemma fpbs_cpxs_trans: ∀h,G1,G,L1,L,T1,T. ⦃G1,L1,T1⦄ ≥[h] ⦃G,L,T⦄ → - ∀T2. ⦃G,L⦄ ⊢ T ⬈*[h] T2 → ⦃G1,L1,T1⦄ ≥[h] ⦃G,L,T2⦄. +lemma fpbs_cpxs_trans: ∀h,G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ≥[h] ❪G,L,T❫ → + ∀T2. ❪G,L❫ ⊢ T ⬈*[h] T2 → ❪G1,L1,T1❫ ≥[h] ❪G,L,T2❫. #h #G1 #G #L1 #L #T1 #T #H1 #T2 #H @(cpxs_ind … H) -T2 /3 width=5 by fpbs_strap1, fpbq_cpx/ qed-. -lemma cpxs_fpbs_trans: ∀h,G1,G2,L1,L2,T,T2. ⦃G1,L1,T⦄ ≥[h] ⦃G2,L2,T2⦄ → - ∀T1. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] T → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. +lemma cpxs_fpbs_trans: ∀h,G1,G2,L1,L2,T,T2. ❪G1,L1,T❫ ≥[h] ❪G2,L2,T2❫ → + ∀T1. ❪G1,L1❫ ⊢ T1 ⬈*[h] T → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. #h #G1 #G2 #L1 #L2 #T #T2 #H1 #T1 #H @(cpxs_ind_dx … H) -T1 /3 width=5 by fpbs_strap2, fpbq_cpx/ qed-. -lemma cpxs_teqx_fpbs_trans: ∀h,G1,L1,T1,T. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] T → +lemma cpxs_teqx_fpbs_trans: ∀h,G1,L1,T1,T. ❪G1,L1❫ ⊢ T1 ⬈*[h] T → ∀T0. T ≛ T0 → - ∀G2,L2,T2. ⦃G1,L1,T0⦄ ≥[h] ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. + ∀G2,L2,T2. ❪G1,L1,T0❫ ≥[h] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. /3 width=3 by cpxs_fpbs_trans, teqx_fpbs_trans/ qed-. -lemma cpxs_teqx_fpbs: ∀h,G,L,T1,T. ⦃G,L⦄ ⊢ T1 ⬈*[h] T → - ∀T2. T ≛ T2 → ⦃G,L,T1⦄ ≥[h] ⦃G,L,T2⦄. +lemma cpxs_teqx_fpbs: ∀h,G,L,T1,T. ❪G,L❫ ⊢ T1 ⬈*[h] T → + ∀T2. T ≛ T2 → ❪G,L,T1❫ ≥[h] ❪G,L,T2❫. /4 width=3 by cpxs_fpbs_trans, feqx_fpbs, teqx_feqx/ qed. (* Properties with star-iterated structural successor for closures **********) -lemma cpxs_fqus_fpbs: ∀h,G1,L1,T1,T. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] T → - ∀G2,L2,T2. ⦃G1,L1,T⦄ ⬂* ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. +lemma cpxs_fqus_fpbs: ∀h,G1,L1,T1,T. ❪G1,L1❫ ⊢ T1 ⬈*[h] T → + ∀G2,L2,T2. ❪G1,L1,T❫ ⬂* ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. /3 width=5 by fpbs_fqus_trans, cpxs_fpbs/ qed. (* Properties with plus-iterated structural successor for closures **********) -lemma cpxs_fqup_fpbs: ∀h,G1,L1,T1,T. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] T → - ∀G2,L2,T2. ⦃G1,L1,T⦄ ⬂+ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. +lemma cpxs_fqup_fpbs: ∀h,G1,L1,T1,T. ❪G1,L1❫ ⊢ T1 ⬈*[h] T → + ∀G2,L2,T2. ❪G1,L1,T❫ ⬂+ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. /3 width=5 by fpbs_fqup_trans, cpxs_fpbs/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_csx.ma index 583f5e31f..091369ff4 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_csx.ma @@ -20,8 +20,8 @@ include "basic_2/rt_computation/fpbs.ma". (* Properties with sn for unbound parallel rt-transition for terms **********) (* Basic_2A1: was: csx_fpbs_conf *) -lemma fpbs_csx_conf: ∀h,G1,L1,T1. ⦃G1,L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → - ∀G2,L2,T2. ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄ → ⦃G2,L2⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄. +lemma fpbs_csx_conf: ∀h,G1,L1,T1. ❪G1,L1❫ ⊢ ⬈*[h] 𝐒❪T1❫ → + ∀G2,L2,T2. ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫ → ❪G2,L2❫ ⊢ ⬈*[h] 𝐒❪T2❫. #h #G1 #L1 #T1 #HT1 #G2 #L2 #T2 #H @(fpbs_ind … H) -G2 -L2 -T2 /2 width=5 by csx_fpbq_conf/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fpb.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fpb.ma index 428644da8..711bb73a7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fpb.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fpb.ma @@ -19,6 +19,6 @@ include "basic_2/rt_computation/fpbs.ma". (* Properties with proper parallel rst-reduction on closures ****************) -lemma fpb_fpbs: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≻[h] ⦃G2,L2,T2⦄ → - ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. +lemma fpb_fpbs: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. /3 width=1 by fpbq_fpbs, fpb_fpbq/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqup.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqup.ma index 4fcd971bb..72c12b91e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqup.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqup.ma @@ -21,25 +21,25 @@ include "basic_2/rt_computation/fpbs_fqus.ma". (* Advanced properties ******************************************************) lemma teqx_fpbs_trans: ∀h,T1,T. T1 ≛ T → - ∀G1,G2,L1,L2,T2. ⦃G1,L1,T⦄ ≥[h] ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. + ∀G1,G2,L1,L2,T2. ❪G1,L1,T❫ ≥[h] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. /3 width=5 by feqx_fpbs_trans, teqx_feqx/ qed-. -lemma fpbs_teqx_trans: ∀h,G1,G2,L1,L2,T1,T. ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T⦄ → - ∀T2. T ≛ T2 → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. +lemma fpbs_teqx_trans: ∀h,G1,G2,L1,L2,T1,T. ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T❫ → + ∀T2. T ≛ T2 → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. /3 width=5 by fpbs_feqx_trans, teqx_feqx/ qed-. (* Properties with plus-iterated structural successor for closures **********) -lemma fqup_fpbs: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂+ ⦃G2,L2,T2⦄ → - ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. +lemma fqup_fpbs: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+ ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. #h #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2 /4 width=5 by fqu_fquq, fpbq_fquq, tri_step/ qed. -lemma fpbs_fqup_trans: ∀h,G1,G,L1,L,T1,T. ⦃G1,L1,T1⦄ ≥[h] ⦃G,L,T⦄ → - ∀G2,L2,T2. ⦃G,L,T⦄ ⬂+ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. +lemma fpbs_fqup_trans: ∀h,G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ≥[h] ❪G,L,T❫ → + ∀G2,L2,T2. ❪G,L,T❫ ⬂+ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. /3 width=5 by fpbs_fqus_trans, fqup_fqus/ qed-. -lemma fqup_fpbs_trans: ∀h,G,G2,L,L2,T,T2. ⦃G,L,T⦄ ≥[h] ⦃G2,L2,T2⦄ → - ∀G1,L1,T1. ⦃G1,L1,T1⦄ ⬂+ ⦃G,L,T⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. +lemma fqup_fpbs_trans: ∀h,G,G2,L,L2,T,T2. ❪G,L,T❫ ≥[h] ❪G2,L2,T2❫ → + ∀G1,L1,T1. ❪G1,L1,T1❫ ⬂+ ❪G,L,T❫ → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. /3 width=5 by fqus_fpbs_trans, fqup_fqus/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqus.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqus.ma index 3f1e06fab..808c2615b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqus.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_fqus.ma @@ -19,20 +19,20 @@ include "basic_2/rt_computation/fpbs.ma". (* Properties with star-iterated structural successor for closures **********) -lemma fqus_fpbs: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂* ⦃G2,L2,T2⦄ → - ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. +lemma fqus_fpbs: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂* ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. #h #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -G2 -L2 -T2 /3 width=5 by fpbq_fquq, tri_step/ qed. -lemma fpbs_fqus_trans: ∀h,G1,G,L1,L,T1,T. ⦃G1,L1,T1⦄ ≥[h] ⦃G,L,T⦄ → - ∀G2,L2,T2. ⦃G,L,T⦄ ⬂* ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. +lemma fpbs_fqus_trans: ∀h,G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ≥[h] ❪G,L,T❫ → + ∀G2,L2,T2. ❪G,L,T❫ ⬂* ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. #h #G1 #G #L1 #L #T1 #T #H1 #G2 #L2 #T2 #H @(fqus_ind … H) -G2 -L2 -T2 /3 width=5 by fpbs_strap1, fpbq_fquq/ qed-. -lemma fqus_fpbs_trans: ∀h,G,G2,L,L2,T,T2. ⦃G,L,T⦄ ≥[h] ⦃G2,L2,T2⦄ → - ∀G1,L1,T1. ⦃G1,L1,T1⦄ ⬂* ⦃G,L,T⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. +lemma fqus_fpbs_trans: ∀h,G,G2,L,L2,T,T2. ❪G,L,T❫ ≥[h] ❪G2,L2,T2❫ → + ∀G1,L1,T1. ❪G1,L1,T1❫ ⬂* ❪G,L,T❫ → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. #h #G #G2 #L #L2 #T #T2 #H1 #G1 #L1 #T1 #H @(fqus_ind_dx … H) -G1 -L1 -T1 /3 width=5 by fpbs_strap2, fpbq_fquq/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_lpxs.ma index f01561bc2..857f394d9 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_lpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fpbs_lpxs.ma @@ -23,49 +23,49 @@ include "basic_2/rt_computation/fpbs_cpxs.ma". (* Properties with unbound rt-computation on full local environments *******) -lemma lpxs_fpbs: ∀h,G,L1,L2,T. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → ⦃G,L1,T⦄ ≥[h] ⦃G,L2,T⦄. +lemma lpxs_fpbs: ∀h,G,L1,L2,T. ❪G,L1❫ ⊢ ⬈*[h] L2 → ❪G,L1,T❫ ≥[h] ❪G,L2,T❫. #h #G #L1 #L2 #T #H @(lpxs_ind_dx … H) -L2 /3 width=5 by fpbq_lpx, fpbs_strap1/ qed. -lemma fpbs_lpxs_trans: ∀h,G1,G2,L1,L,T1,T2. ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L,T2⦄ → - ∀L2. ⦃G2,L⦄ ⊢ ⬈*[h] L2 → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. +lemma fpbs_lpxs_trans: ∀h,G1,G2,L1,L,T1,T2. ❪G1,L1,T1❫ ≥[h] ❪G2,L,T2❫ → + ∀L2. ❪G2,L❫ ⊢ ⬈*[h] L2 → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. #h #G1 #G2 #L1 #L #T1 #T2 #H1 #L2 #H @(lpxs_ind_dx … H) -L2 /3 width=5 by fpbs_strap1, fpbq_lpx/ qed-. -lemma lpxs_fpbs_trans: ∀h,G1,G2,L,L2,T1,T2. ⦃G1,L,T1⦄ ≥[h] ⦃G2,L2,T2⦄ → - ∀L1. ⦃G1,L1⦄ ⊢ ⬈*[h] L → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. +lemma lpxs_fpbs_trans: ∀h,G1,G2,L,L2,T1,T2. ❪G1,L,T1❫ ≥[h] ❪G2,L2,T2❫ → + ∀L1. ❪G1,L1❫ ⊢ ⬈*[h] L → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. #h #G1 #G2 #L #L2 #T1 #T2 #H1 #L1 #H @(lpxs_ind_sn … H) -L1 /3 width=5 by fpbs_strap2, fpbq_lpx/ qed-. (* Basic_2A1: uses: lpxs_lleq_fpbs *) -lemma lpxs_feqx_fpbs: ∀h,G1,L1,L,T1. ⦃G1,L1⦄ ⊢ ⬈*[h] L → - ∀G2,L2,T2. ⦃G1,L,T1⦄ ≛ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. +lemma lpxs_feqx_fpbs: ∀h,G1,L1,L,T1. ❪G1,L1❫ ⊢ ⬈*[h] L → + ∀G2,L2,T2. ❪G1,L,T1❫ ≛ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. /3 width=3 by lpxs_fpbs_trans, feqx_fpbs/ qed. -lemma fpbs_lpx_trans: ∀h,G1,G2,L1,L,T1,T2. ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L,T2⦄ → - ∀L2. ⦃G2,L⦄ ⊢ ⬈[h] L2 → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. +lemma fpbs_lpx_trans: ∀h,G1,G2,L1,L,T1,T2. ❪G1,L1,T1❫ ≥[h] ❪G2,L,T2❫ → + ∀L2. ❪G2,L❫ ⊢ ⬈[h] L2 → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. /3 width=3 by fpbs_lpxs_trans, lpx_lpxs/ qed-. (* Properties with star-iterated structural successor for closures **********) -lemma fqus_lpxs_fpbs: ∀h,G1,G2,L1,L,T1,T2. ⦃G1,L1,T1⦄ ⬂* ⦃G2,L,T2⦄ → - ∀L2. ⦃G2,L⦄ ⊢ ⬈*[h] L2 → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. +lemma fqus_lpxs_fpbs: ∀h,G1,G2,L1,L,T1,T2. ❪G1,L1,T1❫ ⬂* ❪G2,L,T2❫ → + ∀L2. ❪G2,L❫ ⊢ ⬈*[h] L2 → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. /3 width=3 by fpbs_lpxs_trans, fqus_fpbs/ qed. (* Properties with unbound context-sensitive parallel rt-computation ********) -lemma cpxs_fqus_lpxs_fpbs: ∀h,G1,L1,T1,T. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] T → - ∀G2,L,T2. ⦃G1,L1,T⦄ ⬂* ⦃G2,L,T2⦄ → - ∀L2.⦃G2,L⦄ ⊢ ⬈*[h] L2 → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄. +lemma cpxs_fqus_lpxs_fpbs: ∀h,G1,L1,T1,T. ❪G1,L1❫ ⊢ T1 ⬈*[h] T → + ∀G2,L,T2. ❪G1,L1,T❫ ⬂* ❪G2,L,T2❫ → + ∀L2.❪G2,L❫ ⊢ ⬈*[h] L2 → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫. /3 width=5 by cpxs_fqus_fpbs, fpbs_lpxs_trans/ qed. -lemma fpbs_cpxs_teqx_fqup_lpx_trans: ∀h,G1,G3,L1,L3,T1,T3. ⦃G1,L1,T1⦄ ≥ [h] ⦃G3,L3,T3⦄ → - ∀T4. ⦃G3,L3⦄ ⊢ T3 ⬈*[h] T4 → ∀T5. T4 ≛ T5 → - ∀G2,L4,T2. ⦃G3,L3,T5⦄ ⬂+ ⦃G2,L4,T2⦄ → - ∀L2. ⦃G2,L4⦄ ⊢ ⬈[h] L2 → ⦃G1,L1,T1⦄ ≥ [h] ⦃G2,L2,T2⦄. +lemma fpbs_cpxs_teqx_fqup_lpx_trans: ∀h,G1,G3,L1,L3,T1,T3. ❪G1,L1,T1❫ ≥ [h] ❪G3,L3,T3❫ → + ∀T4. ❪G3,L3❫ ⊢ T3 ⬈*[h] T4 → ∀T5. T4 ≛ T5 → + ∀G2,L4,T2. ❪G3,L3,T5❫ ⬂+ ❪G2,L4,T2❫ → + ∀L2. ❪G2,L4❫ ⊢ ⬈[h] L2 → ❪G1,L1,T1❫ ≥ [h] ❪G2,L2,T2❫. #h #G1 #G3 #L1 #L3 #T1 #T3 #H13 #T4 #HT34 #T5 #HT45 #G2 #L4 #T2 #H34 #L2 #HL42 @(fpbs_lpx_trans … HL42) -L2 (**) (* full auto too slow *) @(fpbs_fqup_trans … H34) -G2 -L4 -T2 @@ -75,18 +75,18 @@ qed-. (* Advanced properties ******************************************************) (* Basic_2A1: uses: fpbs_intro_alt *) -lemma fpbs_intro_star: ∀h,G1,L1,T1,T. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] T → - ∀G,L,T0. ⦃G1,L1,T⦄ ⬂* ⦃G,L,T0⦄ → - ∀L0. ⦃G,L⦄ ⊢ ⬈*[h] L0 → - ∀G2,L2,T2. ⦃G,L0,T0⦄ ≛ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄ . +lemma fpbs_intro_star: ∀h,G1,L1,T1,T. ❪G1,L1❫ ⊢ T1 ⬈*[h] T → + ∀G,L,T0. ❪G1,L1,T❫ ⬂* ❪G,L,T0❫ → + ∀L0. ❪G,L❫ ⊢ ⬈*[h] L0 → + ∀G2,L2,T2. ❪G,L0,T0❫ ≛ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫ . /3 width=5 by cpxs_fqus_lpxs_fpbs, fpbs_strap1, fpbq_feqx/ qed. (* Advanced inversion lemmas *************************************************) (* Basic_2A1: uses: fpbs_inv_alt *) -lemma fpbs_inv_star: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄ → - ∃∃G,L,L0,T,T0. ⦃G1,L1⦄ ⊢ T1 ⬈*[h] T & ⦃G1,L1,T⦄ ⬂* ⦃G,L,T0⦄ - & ⦃G,L⦄ ⊢ ⬈*[h] L0 & ⦃G,L0,T0⦄ ≛ ⦃G2,L2,T2⦄. +lemma fpbs_inv_star: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫ → + ∃∃G,L,L0,T,T0. ❪G1,L1❫ ⊢ T1 ⬈*[h] T & ❪G1,L1,T❫ ⬂* ❪G,L,T0❫ + & ❪G,L❫ ⊢ ⬈*[h] L0 & ❪G,L0,T0❫ ≛ ❪G2,L2,T2❫. #h #G1 #G2 #L1 #L2 #T1 #T2 #H @(fpbs_ind_dx … H) -G1 -L1 -T1 [ /2 width=9 by ex4_5_intro/ | #G1 #G0 #L1 #L0 #T1 #T0 * -G0 -L0 -T0 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb.ma index e5a0108c3..919b91f61 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb.ma @@ -19,7 +19,7 @@ include "basic_2/rt_transition/fpb.ma". inductive fsb (h): relation3 genv lenv term ≝ | fsb_intro: ∀G1,L1,T1. ( - ∀G2,L2,T2. ⦃G1,L1,T1⦄ ≻[h] ⦃G2,L2,T2⦄ → fsb h G2 L2 T2 + ∀G2,L2,T2. ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫ → fsb h G2 L2 T2 ) → fsb h G1 L1 T1 . @@ -32,11 +32,11 @@ interpretation (* Note: eliminator with shorter ground hypothesis *) (* Note: to be named fsb_ind when fsb becomes a definition like csx, lfsx ***) lemma fsb_ind_alt: ∀h. ∀Q: relation3 …. ( - ∀G1,L1,T1. ≥[h] 𝐒⦃G1,L1,T1⦄ → ( - ∀G2,L2,T2. ⦃G1,L1,T1⦄ ≻[h] ⦃G2,L2,T2⦄ → Q G2 L2 T2 + ∀G1,L1,T1. ≥[h] 𝐒❪G1,L1,T1❫ → ( + ∀G2,L2,T2. ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫ → Q G2 L2 T2 ) → Q G1 L1 T1 ) → - ∀G,L,T. ≥[h] 𝐒⦃G,L,T⦄ → Q G L T. + ∀G,L,T. ≥[h] 𝐒❪G,L,T❫ → Q G L T. #h #Q #IH #G #L #T #H elim H -G -L -T /4 width=1 by fsb_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_aaa.ma index b95c6ced6..756353fb3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_aaa.ma @@ -21,17 +21,17 @@ include "basic_2/rt_computation/fsb_csx.ma". (* Main properties with atomic arity assignment for terms *******************) -theorem aaa_fsb: ∀h,G,L,T,A. ⦃G,L⦄ ⊢ T ⁝ A → ≥[h] 𝐒⦃G,L,T⦄. +theorem aaa_fsb: ∀h,G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ≥[h] 𝐒❪G,L,T❫. /3 width=2 by aaa_csx, csx_fsb/ qed. (* Advanced eliminators with atomic arity assignment for terms **************) fact aaa_ind_fpb_aux: ∀h. ∀Q:relation3 …. - (∀G1,L1,T1,A. ⦃G1,L1⦄ ⊢ T1 ⁝ A → - (∀G2,L2,T2. ⦃G1,L1,T1⦄ ≻[h] ⦃G2,L2,T2⦄ → Q G2 L2 T2) → + (∀G1,L1,T1,A. ❪G1,L1❫ ⊢ T1 ⁝ A → + (∀G2,L2,T2. ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G,L,T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ∀A. ⦃G,L⦄ ⊢ T ⁝ A → Q G L T. + ∀G,L,T. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T❫ → ∀A. ❪G,L❫ ⊢ T ⁝ A → Q G L T. #h #R #IH #G #L #T #H @(csx_ind_fpb … H) -G -L -T #G1 #L1 #T1 #H1 #IH1 #A1 #HTA1 @IH -IH // #G2 #L2 #T2 #H12 elim (fpbs_aaa_conf … G2 … L2 … T2 … HTA1) -A1 @@ -39,19 +39,19 @@ fact aaa_ind_fpb_aux: ∀h. ∀Q:relation3 …. qed-. lemma aaa_ind_fpb: ∀h. ∀Q:relation3 …. - (∀G1,L1,T1,A. ⦃G1,L1⦄ ⊢ T1 ⁝ A → - (∀G2,L2,T2. ⦃G1,L1,T1⦄ ≻[h] ⦃G2,L2,T2⦄ → Q G2 L2 T2) → + (∀G1,L1,T1,A. ❪G1,L1❫ ⊢ T1 ⁝ A → + (∀G2,L2,T2. ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G,L,T,A. ⦃G,L⦄ ⊢ T ⁝ A → Q G L T. + ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → Q G L T. /4 width=4 by aaa_ind_fpb_aux, aaa_csx/ qed-. fact aaa_ind_fpbg_aux: ∀h. ∀Q:relation3 …. - (∀G1,L1,T1,A. ⦃G1,L1⦄ ⊢ T1 ⁝ A → - (∀G2,L2,T2. ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄ → Q G2 L2 T2) → + (∀G1,L1,T1,A. ❪G1,L1❫ ⊢ T1 ⁝ A → + (∀G2,L2,T2. ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G,L,T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ∀A. ⦃G,L⦄ ⊢ T ⁝ A → Q G L T. + ∀G,L,T. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T❫ → ∀A. ❪G,L❫ ⊢ T ⁝ A → Q G L T. #h #Q #IH #G #L #T #H @(csx_ind_fpbg … H) -G -L -T #G1 #L1 #T1 #H1 #IH1 #A1 #HTA1 @IH -IH // #G2 #L2 #T2 #H12 elim (fpbs_aaa_conf … G2 … L2 … T2 … HTA1) -A1 @@ -59,9 +59,9 @@ fact aaa_ind_fpbg_aux: ∀h. ∀Q:relation3 …. qed-. lemma aaa_ind_fpbg: ∀h. ∀Q:relation3 …. - (∀G1,L1,T1,A. ⦃G1,L1⦄ ⊢ T1 ⁝ A → - (∀G2,L2,T2. ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄ → Q G2 L2 T2) → + (∀G1,L1,T1,A. ❪G1,L1❫ ⊢ T1 ⁝ A → + (∀G2,L2,T2. ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G,L,T,A. ⦃G,L⦄ ⊢ T ⁝ A → Q G L T. + ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → Q G L T. /4 width=4 by aaa_ind_fpbg_aux, aaa_csx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_csx.ma index 98bed39de..203f60b8a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_csx.ma @@ -21,14 +21,14 @@ include "basic_2/rt_computation/fsb_fpbg.ma". (* Inversion lemmas with context-sensitive stringly rt-normalizing terms ****) -lemma fsb_inv_csx: ∀h,G,L,T. ≥[h] 𝐒⦃G,L,T⦄ → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. +lemma fsb_inv_csx: ∀h,G,L,T. ≥[h] 𝐒❪G,L,T❫ → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T❫. #h #G #L #T #H @(fsb_ind_alt … H) -G -L -T /5 width=1 by csx_intro, fpb_cpx/ qed-. (* Propreties with context-sensitive stringly rt-normalizing terms **********) -lemma csx_fsb_fpbs: ∀h,G1,L1,T1. ⦃G1,L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → - ∀G2,L2,T2. ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄ → ≥[h] 𝐒⦃G2,L2,T2⦄. +lemma csx_fsb_fpbs: ∀h,G1,L1,T1. ❪G1,L1❫ ⊢ ⬈*[h] 𝐒❪T1❫ → + ∀G2,L2,T2. ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫ → ≥[h] 𝐒❪G2,L2,T2❫. #h #G1 #L1 #T1 #H @(csx_ind … H) -T1 #T1 #HT1 #IHc #G2 #L2 #T2 @(fqup_wf_ind (Ⓣ) … G2 L2 T2) -G2 -L2 -T2 #G0 #L0 #T0 #IHu #H10 @@ -56,23 +56,23 @@ generalize in match IHu; -IHu generalize in match H10; -H10 ] qed. -lemma csx_fsb: ∀h,G,L,T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ≥[h] 𝐒⦃G,L,T⦄. +lemma csx_fsb: ∀h,G,L,T. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T❫ → ≥[h] 𝐒❪G,L,T❫. /2 width=5 by csx_fsb_fpbs/ qed. (* Advanced eliminators *****************************************************) lemma csx_ind_fpb: ∀h. ∀Q:relation3 genv lenv term. - (∀G1,L1,T1. ⦃G1,L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → - (∀G2,L2,T2. ⦃G1,L1,T1⦄ ≻[h] ⦃G2,L2,T2⦄ → Q G2 L2 T2) → + (∀G1,L1,T1. ❪G1,L1❫ ⊢ ⬈*[h] 𝐒❪T1❫ → + (∀G2,L2,T2. ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G,L,T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → Q G L T. + ∀G,L,T. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T❫ → Q G L T. /4 width=4 by fsb_inv_csx, csx_fsb, fsb_ind_alt/ qed-. lemma csx_ind_fpbg: ∀h. ∀Q:relation3 genv lenv term. - (∀G1,L1,T1. ⦃G1,L1⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → - (∀G2,L2,T2. ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄ → Q G2 L2 T2) → + (∀G1,L1,T1. ❪G1,L1❫ ⊢ ⬈*[h] 𝐒❪T1❫ → + (∀G2,L2,T2. ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G,L,T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → Q G L T. + ∀G,L,T. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T❫ → Q G L T. /4 width=4 by fsb_inv_csx, csx_fsb, fsb_ind_fpbg/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_feqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_feqx.ma index 918adc2aa..c7311efe7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_feqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_feqx.ma @@ -19,8 +19,8 @@ include "basic_2/rt_computation/fsb.ma". (* Properties with sort-irrelevant equivalence for closures *****************) -lemma fsb_feqx_trans: ∀h,G1,L1,T1. ≥[h] 𝐒⦃G1,L1,T1⦄ → - ∀G2,L2,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → ≥[h] 𝐒⦃G2,L2,T2⦄. +lemma fsb_feqx_trans: ∀h,G1,L1,T1. ≥[h] 𝐒❪G1,L1,T1❫ → + ∀G2,L2,T2. ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → ≥[h] 𝐒❪G2,L2,T2❫. #h #G1 #L1 #T1 #H @(fsb_ind_alt … H) -G1 -L1 -T1 #G1 #L1 #T1 #_ #IH #G2 #L2 #T2 #H12 @fsb_intro #G #L #T #H2 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_fpbg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_fpbg.ma index 1fd7ea36b..81583f39e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_fpbg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/fsb_fpbg.ma @@ -19,8 +19,8 @@ include "basic_2/rt_computation/fsb_feqx.ma". (* Properties with parallel rst-computation for closures ********************) -lemma fsb_fpbs_trans: ∀h,G1,L1,T1. ≥[h] 𝐒⦃G1,L1,T1⦄ → - ∀G2,L2,T2. ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄ → ≥[h] 𝐒⦃G2,L2,T2⦄. +lemma fsb_fpbs_trans: ∀h,G1,L1,T1. ≥[h] 𝐒❪G1,L1,T1❫ → + ∀G2,L2,T2. ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫ → ≥[h] 𝐒❪G2,L2,T2❫. #h #G1 #L1 #T1 #H @(fsb_ind_alt … H) -G1 -L1 -T1 #G1 #L1 #T1 #H1 #IH #G2 #L2 #T2 #H12 elim (fpbs_inv_fpbg … H12) -H12 @@ -32,19 +32,19 @@ qed-. (* Properties with proper parallel rst-computation for closures *************) lemma fsb_intro_fpbg: ∀h,G1,L1,T1. ( - ∀G2,L2,T2. ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄ → ≥[h] 𝐒⦃G2,L2,T2⦄ - ) → ≥[h] 𝐒⦃G1,L1,T1⦄. + ∀G2,L2,T2. ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫ → ≥[h] 𝐒❪G2,L2,T2❫ + ) → ≥[h] 𝐒❪G1,L1,T1❫. /4 width=1 by fsb_intro, fpb_fpbg/ qed. (* Eliminators with proper parallel rst-computation for closures ************) lemma fsb_ind_fpbg_fpbs: ∀h. ∀Q:relation3 genv lenv term. - (∀G1,L1,T1. ≥[h] 𝐒⦃G1,L1,T1⦄ → - (∀G2,L2,T2. ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄ → Q G2 L2 T2) → + (∀G1,L1,T1. ≥[h] 𝐒❪G1,L1,T1❫ → + (∀G2,L2,T2. ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G1,L1,T1. ≥[h] 𝐒⦃G1,L1,T1⦄ → - ∀G2,L2,T2. ⦃G1,L1,T1⦄ ≥[h] ⦃G2,L2,T2⦄ → Q G2 L2 T2. + ∀G1,L1,T1. ≥[h] 𝐒❪G1,L1,T1❫ → + ∀G2,L2,T2. ❪G1,L1,T1❫ ≥[h] ❪G2,L2,T2❫ → Q G2 L2 T2. #h #Q #IH1 #G1 #L1 #T1 #H @(fsb_ind_alt … H) -G1 -L1 -T1 #G1 #L1 #T1 #H1 #IH #G2 #L2 #T2 #H12 @IH1 -IH1 @@ -56,11 +56,11 @@ lemma fsb_ind_fpbg_fpbs: ∀h. ∀Q:relation3 genv lenv term. qed-. lemma fsb_ind_fpbg: ∀h. ∀Q:relation3 genv lenv term. - (∀G1,L1,T1. ≥[h] 𝐒⦃G1,L1,T1⦄ → - (∀G2,L2,T2. ⦃G1,L1,T1⦄ >[h] ⦃G2,L2,T2⦄ → Q G2 L2 T2) → + (∀G1,L1,T1. ≥[h] 𝐒❪G1,L1,T1❫ → + (∀G2,L2,T2. ❪G1,L1,T1❫ >[h] ❪G2,L2,T2❫ → Q G2 L2 T2) → Q G1 L1 T1 ) → - ∀G1,L1,T1. ≥[h] 𝐒⦃G1,L1,T1⦄ → Q G1 L1 T1. + ∀G1,L1,T1. ≥[h] 𝐒❪G1,L1,T1❫ → Q G1 L1 T1. #h #Q #IH #G1 #L1 #T1 #H @(fsb_ind_fpbg_fpbs … H) -H /3 width=1 by/ qed-. @@ -68,7 +68,7 @@ qed-. (* Inversion lemmas with proper parallel rst-computation for closures *******) lemma fsb_fpbg_refl_false (h) (G) (L) (T): - ≥[h] 𝐒⦃G,L,T⦄ → ⦃G,L,T⦄ >[h] ⦃G,L,T⦄ → ⊥. + ≥[h] 𝐒❪G,L,T❫ → ❪G,L,T❫ >[h] ❪G,L,T❫ → ⊥. #h #G #L #T #H @(fsb_ind_fpbg … H) -G -L -T #G1 #L1 #T1 #_ #IH #H /2 width=5 by/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx.ma index 685ff2a36..a318423b5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx.ma @@ -23,9 +23,9 @@ include "basic_2/rt_computation/rsx.ma". inductive jsx (h) (G): relation lenv ≝ | jsx_atom: jsx h G (⋆) (⋆) | jsx_bind: ∀I,K1,K2. jsx h G K1 K2 → - jsx h G (K1.ⓘ{I}) (K2.ⓘ{I}) + jsx h G (K1.ⓘ[I]) (K2.ⓘ[I]) | jsx_pair: ∀I,K1,K2,V. jsx h G K1 K2 → - G ⊢ ⬈*[h,V] 𝐒⦃K2⦄ → jsx h G (K1.ⓑ{I}V) (K2.ⓧ) + G ⊢ ⬈*[h,V] 𝐒❪K2❫ → jsx h G (K1.ⓑ[I]V) (K2.ⓧ) . interpretation @@ -48,9 +48,9 @@ lemma jsx_inv_atom_sn (h) (G): ∀L2. G ⊢ ⋆ ⊒[h] L2 → L2 = ⋆. fact jsx_inv_bind_sn_aux (h) (G): ∀L1,L2. G ⊢ L1 ⊒[h] L2 → - ∀I,K1. L1 = K1.ⓘ{I} → - ∨∨ ∃∃K2. G ⊢ K1 ⊒[h] K2 & L2 = K2.ⓘ{I} - | ∃∃J,K2,V. G ⊢ K1 ⊒[h] K2 & G ⊢ ⬈*[h,V] 𝐒⦃K2⦄ & I = BPair J V & L2 = K2.ⓧ. + ∀I,K1. L1 = K1.ⓘ[I] → + ∨∨ ∃∃K2. G ⊢ K1 ⊒[h] K2 & L2 = K2.ⓘ[I] + | ∃∃J,K2,V. G ⊢ K1 ⊒[h] K2 & G ⊢ ⬈*[h,V] 𝐒❪K2❫ & I = BPair J V & L2 = K2.ⓧ. #h #G #L1 #L2 * -L1 -L2 [ #J #L1 #H destruct | #I #K1 #K2 #HK12 #J #L1 #H destruct /3 width=3 by ex2_intro, or_introl/ @@ -59,18 +59,18 @@ fact jsx_inv_bind_sn_aux (h) (G): qed-. lemma jsx_inv_bind_sn (h) (G): - ∀I,K1,L2. G ⊢ K1.ⓘ{I} ⊒[h] L2 → - ∨∨ ∃∃K2. G ⊢ K1 ⊒[h] K2 & L2 = K2.ⓘ{I} - | ∃∃J,K2,V. G ⊢ K1 ⊒[h] K2 & G ⊢ ⬈*[h,V] 𝐒⦃K2⦄ & I = BPair J V & L2 = K2.ⓧ. + ∀I,K1,L2. G ⊢ K1.ⓘ[I] ⊒[h] L2 → + ∨∨ ∃∃K2. G ⊢ K1 ⊒[h] K2 & L2 = K2.ⓘ[I] + | ∃∃J,K2,V. G ⊢ K1 ⊒[h] K2 & G ⊢ ⬈*[h,V] 𝐒❪K2❫ & I = BPair J V & L2 = K2.ⓧ. /2 width=3 by jsx_inv_bind_sn_aux/ qed-. (* Advanced inversion lemmas ************************************************) (* Basic_2A1: uses: lcosx_inv_pair *) lemma jsx_inv_pair_sn (h) (G): - ∀I,K1,L2,V. G ⊢ K1.ⓑ{I}V ⊒[h] L2 → - ∨∨ ∃∃K2. G ⊢ K1 ⊒[h] K2 & L2 = K2.ⓑ{I}V - | ∃∃K2. G ⊢ K1 ⊒[h] K2 & G ⊢ ⬈*[h,V] 𝐒⦃K2⦄ & L2 = K2.ⓧ. + ∀I,K1,L2,V. G ⊢ K1.ⓑ[I]V ⊒[h] L2 → + ∨∨ ∃∃K2. G ⊢ K1 ⊒[h] K2 & L2 = K2.ⓑ[I]V + | ∃∃K2. G ⊢ K1 ⊒[h] K2 & G ⊢ ⬈*[h,V] 𝐒❪K2❫ & L2 = K2.ⓧ. #h #G #I #K1 #L2 #V #H elim (jsx_inv_bind_sn … H) -H * [ /3 width=3 by ex2_intro, or_introl/ | #J #K2 #X #HK12 #HX #H1 #H2 destruct /3 width=4 by ex3_intro, or_intror/ @@ -87,8 +87,8 @@ qed-. (* Advanced forward lemmas **************************************************) lemma jsx_fwd_bind_sn (h) (G): - ∀I1,K1,L2. G ⊢ K1.ⓘ{I1} ⊒[h] L2 → - ∃∃I2,K2. G ⊢ K1 ⊒[h] K2 & L2 = K2.ⓘ{I2}. + ∀I1,K1,L2. G ⊢ K1.ⓘ[I1] ⊒[h] L2 → + ∃∃I2,K2. G ⊢ K1 ⊒[h] K2 & L2 = K2.ⓘ[I2]. #h #G #I1 #K1 #L2 #H elim (jsx_inv_bind_sn … H) -H * /2 width=4 by ex2_2_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_csx.ma index adeaa3f88..642520638 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_csx.ma @@ -22,15 +22,15 @@ include "basic_2/rt_computation/jsx_lsubr.ma". lemma jsx_csx_conf (h) (G): ∀L1,L2. G ⊢ L1 ⊒[h] L2 → - ∀T. ⦃G,L1⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → ⦃G,L2⦄ ⊢ ⬈*[h] 𝐒⦃T⦄. + ∀T. ❪G,L1❫ ⊢ ⬈*[h] 𝐒❪T❫ → ❪G,L2❫ ⊢ ⬈*[h] 𝐒❪T❫. /3 width=5 by jsx_fwd_lsubr, csx_lsubr_conf/ qed-. (* Properties with strongly rt-normalizing referred local environments ******) (* Note: Try by induction on the 2nd premise by generalizing V with f *) lemma rsx_jsx_trans (h) (G): - ∀L1,V. G ⊢ ⬈*[h,V] 𝐒⦃L1⦄ → - ∀L2. G ⊢ L1 ⊒[h] L2 → G ⊢ ⬈*[h,V] 𝐒⦃L2⦄. + ∀L1,V. G ⊢ ⬈*[h,V] 𝐒❪L1❫ → + ∀L2. G ⊢ L1 ⊒[h] L2 → G ⊢ ⬈*[h,V] 𝐒❪L2❫. #h #G #L1 #V @(fqup_wf_ind_eq (Ⓕ) … G L1 V) -G -L1 -V #G0 #L0 #V0 #IH #G #L1 * * [ // diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_drops.ma index 74eb68212..01fe99176 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_drops.ma @@ -21,7 +21,7 @@ include "basic_2/rt_computation/jsx.ma". lemma jsx_fwd_drops_atom_sn (h) (b) (G): ∀L1,L2. G ⊢ L1 ⊒[h] L2 → - ∀f. 𝐔⦃f⦄ → ⇩*[b,f]L1 ≘ ⋆ → ⇩*[b,f]L2 ≘ ⋆. + ∀f. 𝐔❪f❫ → ⇩*[b,f]L1 ≘ ⋆ → ⇩*[b,f]L2 ≘ ⋆. #h #b #G #L1 #L2 #H elim H -L1 -L2 [ #f #_ #H // | #I #K1 #K2 #_ #IH #f #Hf #H @@ -35,8 +35,8 @@ qed-. lemma jsx_fwd_drops_unit_sn (h) (b) (G): ∀L1,L2. G ⊢ L1 ⊒[h] L2 → - ∀f. 𝐔⦃f⦄ → ∀I,K1. ⇩*[b,f]L1 ≘ K1.ⓤ{I} → - ∃∃K2. G ⊢ K1 ⊒[h] K2 & ⇩*[b,f]L2 ≘ K2.ⓤ{I}. + ∀f. 𝐔❪f❫ → ∀I,K1. ⇩*[b,f]L1 ≘ K1.ⓤ[I] → + ∃∃K2. G ⊢ K1 ⊒[h] K2 & ⇩*[b,f]L2 ≘ K2.ⓤ[I]. #h #b #G #L1 #L2 #H elim H -L1 -L2 [ #f #_ #J #Y1 #H lapply (drops_inv_atom1 … H) -H * #H #_ destruct @@ -54,9 +54,9 @@ qed-. lemma jsx_fwd_drops_pair_sn (h) (b) (G): ∀L1,L2. G ⊢ L1 ⊒[h] L2 → - ∀f. 𝐔⦃f⦄ → ∀I,K1,V. ⇩*[b,f]L1 ≘ K1.ⓑ{I}V → - ∨∨ ∃∃K2. G ⊢ K1 ⊒[h] K2 & ⇩*[b,f]L2 ≘ K2.ⓑ{I}V - | ∃∃K2. G ⊢ K1 ⊒[h] K2 & ⇩*[b,f]L2 ≘ K2.ⓧ & G ⊢ ⬈*[h,V] 𝐒⦃K2⦄. + ∀f. 𝐔❪f❫ → ∀I,K1,V. ⇩*[b,f]L1 ≘ K1.ⓑ[I]V → + ∨∨ ∃∃K2. G ⊢ K1 ⊒[h] K2 & ⇩*[b,f]L2 ≘ K2.ⓑ[I]V + | ∃∃K2. G ⊢ K1 ⊒[h] K2 & ⇩*[b,f]L2 ≘ K2.ⓧ & G ⊢ ⬈*[h,V] 𝐒❪K2❫. #h #b #G #L1 #L2 #H elim H -L1 -L2 [ #f #_ #J #Y1 #X1 #H lapply (drops_inv_atom1 … H) -H * #H #_ destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_rsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_rsx.ma index 4d294b2e2..dd874f6aa 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_rsx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/jsx_rsx.ma @@ -22,8 +22,8 @@ include "basic_2/rt_computation/jsx.ma". (* Basic_2A1: uses: lsx_cpx_trans_lcosx *) lemma rsx_cpx_trans_jsx (h) (G): - ∀L0,T1,T2. ⦃G,L0⦄ ⊢ T1 ⬈[h] T2 → - ∀L. G ⊢ L0 ⊒[h] L → G ⊢ ⬈*[h,T1] 𝐒⦃L⦄ → G ⊢ ⬈*[h,T2] 𝐒⦃L⦄. + ∀L0,T1,T2. ❪G,L0❫ ⊢ T1 ⬈[h] T2 → + ∀L. G ⊢ L0 ⊒[h] L → G ⊢ ⬈*[h,T1] 𝐒❪L❫ → G ⊢ ⬈*[h,T2] 𝐒❪L❫. #h #G #L0 #T1 #T2 #H @(cpx_ind … H) -G -L0 -T1 -T2 [ // | // @@ -64,13 +64,13 @@ qed-. (* Basic_2A1: uses: lsx_cpx_trans_O *) lemma rsx_cpx_trans (h) (G): - ∀L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈[h] T2 → - G ⊢ ⬈*[h,T1] 𝐒⦃L⦄ → G ⊢ ⬈*[h,T2] 𝐒⦃L⦄. + ∀L,T1,T2. ❪G,L❫ ⊢ T1 ⬈[h] T2 → + G ⊢ ⬈*[h,T1] 𝐒❪L❫ → G ⊢ ⬈*[h,T2] 𝐒❪L❫. /3 width=6 by rsx_cpx_trans_jsx, jsx_refl/ qed-. lemma rsx_cpxs_trans (h) (G): - ∀L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈*[h] T2 → - G ⊢ ⬈*[h,T1] 𝐒⦃L⦄ → G ⊢ ⬈*[h,T2] 𝐒⦃L⦄. + ∀L,T1,T2. ❪G,L❫ ⊢ T1 ⬈*[h] T2 → + G ⊢ ⬈*[h,T1] 𝐒❪L❫ → G ⊢ ⬈*[h,T2] 𝐒❪L❫. #h #G #L #T1 #T2 #H @(cpxs_ind_dx ???????? H) -T1 // /3 width=3 by rsx_cpx_trans/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs.ma index 7a3de7dca..d4061da39 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs.ma @@ -28,38 +28,38 @@ interpretation (* Basic properties *********************************************************) (* Basic_2A1: uses: lprs_pair_refl *) -lemma lprs_bind_refl_dx (h) (G): ∀L1,L2. ⦃G,L1⦄ ⊢ ➡*[h] L2 → - ∀I. ⦃G,L1.ⓘ{I}⦄ ⊢ ➡*[h] L2.ⓘ{I}. +lemma lprs_bind_refl_dx (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h] L2 → + ∀I. ❪G,L1.ⓘ[I]❫ ⊢ ➡*[h] L2.ⓘ[I]. /2 width=1 by lex_bind_refl_dx/ qed. -lemma lprs_pair (h) (G): ∀L1,L2. ⦃G,L1⦄ ⊢ ➡*[h] L2 → - ∀V1,V2. ⦃G,L1⦄ ⊢ V1 ➡*[h] V2 → - ∀I. ⦃G,L1.ⓑ{I}V1⦄ ⊢ ➡*[h] L2.ⓑ{I}V2. +lemma lprs_pair (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h] L2 → + ∀V1,V2. ❪G,L1❫ ⊢ V1 ➡*[h] V2 → + ∀I. ❪G,L1.ⓑ[I]V1❫ ⊢ ➡*[h] L2.ⓑ[I]V2. /2 width=1 by lex_pair/ qed. -lemma lprs_refl (h) (G): ∀L. ⦃G,L⦄ ⊢ ➡*[h] L. +lemma lprs_refl (h) (G): ∀L. ❪G,L❫ ⊢ ➡*[h] L. /2 width=1 by lex_refl/ qed. (* Basic inversion lemmas ***************************************************) (* Basic_2A1: uses: lprs_inv_atom1 *) -lemma lprs_inv_atom_sn (h) (G): ∀L2. ⦃G,⋆⦄ ⊢ ➡*[h] L2 → L2 = ⋆. +lemma lprs_inv_atom_sn (h) (G): ∀L2. ❪G,⋆❫ ⊢ ➡*[h] L2 → L2 = ⋆. /2 width=2 by lex_inv_atom_sn/ qed-. (* Basic_2A1: was: lprs_inv_pair1 *) lemma lprs_inv_pair_sn (h) (G): - ∀I,K1,L2,V1. ⦃G,K1.ⓑ{I}V1⦄ ⊢ ➡*[h] L2 → - ∃∃K2,V2. ⦃G,K1⦄ ⊢ ➡*[h] K2 & ⦃G,K1⦄ ⊢ V1 ➡*[h] V2 & L2 = K2.ⓑ{I}V2. + ∀I,K1,L2,V1. ❪G,K1.ⓑ[I]V1❫ ⊢ ➡*[h] L2 → + ∃∃K2,V2. ❪G,K1❫ ⊢ ➡*[h] K2 & ❪G,K1❫ ⊢ V1 ➡*[h] V2 & L2 = K2.ⓑ[I]V2. /2 width=1 by lex_inv_pair_sn/ qed-. (* Basic_2A1: uses: lprs_inv_atom2 *) -lemma lprs_inv_atom_dx (h) (G): ∀L1. ⦃G,L1⦄ ⊢ ➡*[h] ⋆ → L1 = ⋆. +lemma lprs_inv_atom_dx (h) (G): ∀L1. ❪G,L1❫ ⊢ ➡*[h] ⋆ → L1 = ⋆. /2 width=2 by lex_inv_atom_dx/ qed-. (* Basic_2A1: was: lprs_inv_pair2 *) lemma lprs_inv_pair_dx (h) (G): - ∀I,L1,K2,V2. ⦃G,L1⦄ ⊢ ➡*[h] K2.ⓑ{I}V2 → - ∃∃K1,V1. ⦃G,K1⦄ ⊢ ➡*[h] K2 & ⦃G,K1⦄ ⊢ V1 ➡*[h] V2 & L1 = K1.ⓑ{I}V1. + ∀I,L1,K2,V2. ❪G,L1❫ ⊢ ➡*[h] K2.ⓑ[I]V2 → + ∃∃K1,V1. ❪G,K1❫ ⊢ ➡*[h] K2 & ❪G,K1❫ ⊢ V1 ➡*[h] V2 & L1 = K1.ⓑ[I]V1. /2 width=1 by lex_inv_pair_dx/ qed-. (* Basic eliminators ********************************************************) @@ -68,12 +68,12 @@ lemma lprs_inv_pair_dx (h) (G): lemma lprs_ind (h) (G): ∀Q:relation lenv. Q (⋆) (⋆) → ( ∀I,K1,K2. - ⦃G,K1⦄ ⊢ ➡*[h] K2 → - Q K1 K2 → Q (K1.ⓘ{I}) (K2.ⓘ{I}) + ❪G,K1❫ ⊢ ➡*[h] K2 → + Q K1 K2 → Q (K1.ⓘ[I]) (K2.ⓘ[I]) ) → ( ∀I,K1,K2,V1,V2. - ⦃G,K1⦄ ⊢ ➡*[h] K2 → ⦃G,K1⦄ ⊢ V1 ➡*[h] V2 → - Q K1 K2 → Q (K1.ⓑ{I}V1) (K2.ⓑ{I}V2) + ❪G,K1❫ ⊢ ➡*[h] K2 → ❪G,K1❫ ⊢ V1 ➡*[h] V2 → + Q K1 K2 → Q (K1.ⓑ[I]V1) (K2.ⓑ[I]V2) ) → - ∀L1,L2. ⦃G,L1⦄ ⊢ ➡*[h] L2 → Q L1 L2. + ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h] L2 → Q L1 L2. /3 width=4 by lex_ind/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_cpms.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_cpms.ma index c75c79f8f..8bfdf9432 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_cpms.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_cpms.ma @@ -19,22 +19,22 @@ include "basic_2/rt_computation/lprs_lpr.ma". (* Properties with t-bound context-sensitive rt-computarion for terms *******) lemma lprs_cpms_trans (n) (h) (G): - ∀L2,T1,T2. ⦃G,L2⦄ ⊢ T1 ➡*[n,h] T2 → - ∀L1. ⦃G,L1⦄ ⊢ ➡*[h] L2 → ⦃G,L1⦄ ⊢ T1 ➡*[n,h] T2. + ∀L2,T1,T2. ❪G,L2❫ ⊢ T1 ➡*[n,h] T2 → + ∀L1. ❪G,L1❫ ⊢ ➡*[h] L2 → ❪G,L1❫ ⊢ T1 ➡*[n,h] T2. #n #h #G #L2 #T1 #T2 #HT12 #L1 #H @(lprs_ind_sn … H) -L1 /2 width=3 by lpr_cpms_trans/ qed-. lemma lprs_cpm_trans (n) (h) (G): - ∀L2,T1,T2. ⦃G,L2⦄ ⊢ T1 ➡[n,h] T2 → - ∀L1. ⦃G,L1⦄ ⊢ ➡*[h] L2 → ⦃G,L1⦄ ⊢ T1 ➡*[n,h] T2. + ∀L2,T1,T2. ❪G,L2❫ ⊢ T1 ➡[n,h] T2 → + ∀L1. ❪G,L1❫ ⊢ ➡*[h] L2 → ❪G,L1❫ ⊢ T1 ➡*[n,h] T2. /3 width=3 by lprs_cpms_trans, cpm_cpms/ qed-. (* Basic_2A1: includes cprs_bind2 *) lemma cpms_bind_dx (n) (h) (G) (L): - ∀V1,V2. ⦃G,L⦄ ⊢ V1 ➡*[h] V2 → - ∀I,T1,T2. ⦃G,L.ⓑ{I}V2⦄ ⊢ T1 ➡*[n,h] T2 → - ∀p. ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T1 ➡*[n,h] ⓑ{p,I}V2.T2. + ∀V1,V2. ❪G,L❫ ⊢ V1 ➡*[h] V2 → + ∀I,T1,T2. ❪G,L.ⓑ[I]V2❫ ⊢ T1 ➡*[n,h] T2 → + ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡*[n,h] ⓑ[p,I]V2.T2. /4 width=5 by lprs_cpms_trans, lprs_pair, cpms_bind/ qed. (* Inversion lemmas with t-bound context-sensitive rt-computarion for terms *) @@ -43,9 +43,9 @@ lemma cpms_bind_dx (n) (h) (G) (L): (* Basic_2A1: includes: cprs_inv_abst1 *) (* Basic_2A1: uses: scpds_inv_abst1 *) lemma cpms_inv_abst_sn (n) (h) (G) (L): - ∀p,V1,T1,X2. ⦃G,L⦄ ⊢ ⓛ{p}V1.T1 ➡*[n,h] X2 → - ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ➡*[h] V2 & ⦃G,L.ⓛV1⦄ ⊢ T1 ➡*[n,h] T2 & - X2 = ⓛ{p}V2.T2. + ∀p,V1,T1,X2. ❪G,L❫ ⊢ ⓛ[p]V1.T1 ➡*[n,h] X2 → + ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡*[h] V2 & ❪G,L.ⓛV1❫ ⊢ T1 ➡*[n,h] T2 & + X2 = ⓛ[p]V2.T2. #n #h #G #L #p #V1 #T1 #X2 #H @(cpms_ind_dx … H) -X2 /2 width=5 by ex3_2_intro/ #n1 #n2 #X #X2 #_ * #V #T #HV1 #HT1 #H1 #H2 destruct @@ -54,8 +54,8 @@ elim (cpm_inv_abst1 … H2) -H2 #V2 #T2 #HV2 #HT2 #H2 destruct qed-. lemma cpms_inv_abst_sn_cprs (h) (n) (p) (G) (L) (W): - ∀T,X. ⦃G,L⦄ ⊢ ⓛ{p}W.T ➡*[n,h] X → - ∃∃U. ⦃G,L.ⓛW⦄⊢ T ➡*[n,h] U & ⦃G,L⦄ ⊢ ⓛ{p}W.U ➡*[h] X. + ∀T,X. ❪G,L❫ ⊢ ⓛ[p]W.T ➡*[n,h] X → + ∃∃U. ❪G,L.ⓛW❫⊢ T ➡*[n,h] U & ❪G,L❫ ⊢ ⓛ[p]W.U ➡*[h] X. #h #n #p #G #L #W #T #X #H elim (cpms_inv_abst_sn … H) -H #W0 #U #HW0 #HTU #H destruct @(ex2_intro … HTU) /2 width=1 by cpms_bind/ @@ -63,8 +63,8 @@ qed-. (* Basic_2A1: includes: cprs_inv_abst *) lemma cpms_inv_abst_bi (n) (h) (p1) (p2) (G) (L): - ∀W1,W2,T1,T2. ⦃G,L⦄ ⊢ ⓛ{p1}W1.T1 ➡*[n,h] ⓛ{p2}W2.T2 → - ∧∧ p1 = p2 & ⦃G,L⦄ ⊢ W1 ➡*[h] W2 & ⦃G,L.ⓛW1⦄ ⊢ T1 ➡*[n,h] T2. + ∀W1,W2,T1,T2. ❪G,L❫ ⊢ ⓛ[p1]W1.T1 ➡*[n,h] ⓛ[p2]W2.T2 → + ∧∧ p1 = p2 & ❪G,L❫ ⊢ W1 ➡*[h] W2 & ❪G,L.ⓛW1❫ ⊢ T1 ➡*[n,h] T2. #n #h #p1 #p2 #G #L #W1 #W2 #T1 #T2 #H elim (cpms_inv_abst_sn … H) -H #W #T #HW1 #HT1 #H destruct /2 width=1 by and3_intro/ @@ -73,9 +73,9 @@ qed-. (* Basic_1: was pr3_gen_abbr *) (* Basic_2A1: includes: cprs_inv_abbr1 *) lemma cpms_inv_abbr_sn_dx (n) (h) (G) (L): - ∀p,V1,T1,X2. ⦃G,L⦄ ⊢ ⓓ{p}V1.T1 ➡*[n,h] X2 → - ∨∨ ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ➡*[h] V2 & ⦃G,L.ⓓV1⦄ ⊢ T1 ➡*[n,h] T2 & X2 = ⓓ{p}V2.T2 - | ∃∃T2. ⦃G,L.ⓓV1⦄ ⊢ T1 ➡*[n ,h] T2 & ⇧*[1] X2 ≘ T2 & p = Ⓣ. + ∀p,V1,T1,X2. ❪G,L❫ ⊢ ⓓ[p]V1.T1 ➡*[n,h] X2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡*[h] V2 & ❪G,L.ⓓV1❫ ⊢ T1 ➡*[n,h] T2 & X2 = ⓓ[p]V2.T2 + | ∃∃T2. ❪G,L.ⓓV1❫ ⊢ T1 ➡*[n ,h] T2 & ⇧*[1] X2 ≘ T2 & p = Ⓣ. #n #h #G #L #p #V1 #T1 #X2 #H @(cpms_ind_dx … H) -X2 -n /3 width=5 by ex3_2_intro, or_introl/ #n1 #n2 #X #X2 #_ * * @@ -95,8 +95,8 @@ qed-. (* Basic_2A1: uses: scpds_inv_abbr_abst *) lemma cpms_inv_abbr_abst (n) (h) (G) (L): - ∀p1,p2,V1,W2,T1,T2. ⦃G,L⦄ ⊢ ⓓ{p1}V1.T1 ➡*[n,h] ⓛ{p2}W2.T2 → - ∃∃T. ⦃G,L.ⓓV1⦄ ⊢ T1 ➡*[n,h] T & ⇧*[1] ⓛ{p2}W2.T2 ≘ T & p1 = Ⓣ. + ∀p1,p2,V1,W2,T1,T2. ❪G,L❫ ⊢ ⓓ[p1]V1.T1 ➡*[n,h] ⓛ[p2]W2.T2 → + ∃∃T. ❪G,L.ⓓV1❫ ⊢ T1 ➡*[n,h] T & ⇧*[1] ⓛ[p2]W2.T2 ≘ T & p1 = Ⓣ. #n #h #G #L #p1 #p2 #V1 #W2 #T1 #T2 #H elim (cpms_inv_abbr_sn_dx … H) -H * [ #V #T #_ #_ #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_cprs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_cprs.ma index 1706ae98e..fafeabe1e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_cprs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_cprs.ma @@ -20,16 +20,16 @@ include "basic_2/rt_computation/lprs_cpms.ma". (* Advanced properties ******************************************************) (* Basic_2A1: was: lprs_pair2 *) -lemma lprs_pair_dx (h) (G): ∀L1,L2. ⦃G,L1⦄ ⊢ ➡*[h] L2 → - ∀V1,V2. ⦃G,L2⦄ ⊢ V1 ➡*[h] V2 → - ∀I. ⦃G,L1.ⓑ{I}V1⦄ ⊢ ➡*[h] L2.ⓑ{I}V2. +lemma lprs_pair_dx (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h] L2 → + ∀V1,V2. ❪G,L2❫ ⊢ V1 ➡*[h] V2 → + ∀I. ❪G,L1.ⓑ[I]V1❫ ⊢ ➡*[h] L2.ⓑ[I]V2. /3 width=3 by lprs_pair, lprs_cpms_trans/ qed. (* Properties on context-sensitive parallel r-computation for terms *********) -lemma lprs_cprs_conf_dx (h) (G): ∀L0.∀T0,T1:term. ⦃G,L0⦄ ⊢ T0 ➡*[h] T1 → - ∀L1. ⦃G,L0⦄ ⊢ ➡*[h] L1 → - ∃∃T. ⦃G,L1⦄ ⊢ T1 ➡*[h] T & ⦃G,L1⦄ ⊢ T0 ➡*[h] T. +lemma lprs_cprs_conf_dx (h) (G): ∀L0.∀T0,T1:term. ❪G,L0❫ ⊢ T0 ➡*[h] T1 → + ∀L1. ❪G,L0❫ ⊢ ➡*[h] L1 → + ∃∃T. ❪G,L1❫ ⊢ T1 ➡*[h] T & ❪G,L1❫ ⊢ T0 ➡*[h] T. #h #G #L0 #T0 #T1 #HT01 #L1 #H @(lprs_ind_dx … H) -L1 /2 width=3 by ex2_intro/ #L #L1 #_ #HL1 * #T #HT1 #HT0 -L0 @@ -39,21 +39,21 @@ elim (cprs_conf … HT2 … HT3) -T /3 width=5 by cprs_trans, ex2_intro/ qed-. -lemma lprs_cpr_conf_dx (h) (G): ∀L0. ∀T0,T1:term. ⦃G,L0⦄ ⊢ T0 ➡[h] T1 → - ∀L1. ⦃G,L0⦄ ⊢ ➡*[h] L1 → - ∃∃T. ⦃G,L1⦄ ⊢ T1 ➡*[h] T & ⦃G,L1⦄ ⊢ T0 ➡*[h] T. +lemma lprs_cpr_conf_dx (h) (G): ∀L0. ∀T0,T1:term. ❪G,L0❫ ⊢ T0 ➡[h] T1 → + ∀L1. ❪G,L0❫ ⊢ ➡*[h] L1 → + ∃∃T. ❪G,L1❫ ⊢ T1 ➡*[h] T & ❪G,L1❫ ⊢ T0 ➡*[h] T. /3 width=3 by lprs_cprs_conf_dx, cpm_cpms/ qed-. (* Note: this can be proved on its own using lprs_ind_sn *) -lemma lprs_cprs_conf_sn (h) (G): ∀L0. ∀T0,T1:term. ⦃G,L0⦄ ⊢ T0 ➡*[h] T1 → - ∀L1. ⦃G,L0⦄ ⊢ ➡*[h] L1 → - ∃∃T. ⦃G,L0⦄ ⊢ T1 ➡*[h] T & ⦃G,L1⦄ ⊢ T0 ➡*[h] T. +lemma lprs_cprs_conf_sn (h) (G): ∀L0. ∀T0,T1:term. ❪G,L0❫ ⊢ T0 ➡*[h] T1 → + ∀L1. ❪G,L0❫ ⊢ ➡*[h] L1 → + ∃∃T. ❪G,L0❫ ⊢ T1 ➡*[h] T & ❪G,L1❫ ⊢ T0 ➡*[h] T. #h #G #L0 #T0 #T1 #HT01 #L1 #HL01 elim (lprs_cprs_conf_dx … HT01 … HL01) -HT01 /3 width=3 by lprs_cpms_trans, ex2_intro/ qed-. -lemma lprs_cpr_conf_sn (h) (G): ∀L0. ∀T0,T1:term. ⦃G,L0⦄ ⊢ T0 ➡[h] T1 → - ∀L1. ⦃G,L0⦄ ⊢ ➡*[h] L1 → - ∃∃T. ⦃G,L0⦄ ⊢ T1 ➡*[h] T & ⦃G,L1⦄ ⊢ T0 ➡*[h] T. +lemma lprs_cpr_conf_sn (h) (G): ∀L0. ∀T0,T1:term. ❪G,L0❫ ⊢ T0 ➡[h] T1 → + ∀L1. ❪G,L0❫ ⊢ ➡*[h] L1 → + ∃∃T. ❪G,L0❫ ⊢ T1 ➡*[h] T & ❪G,L1❫ ⊢ T0 ➡*[h] T. /3 width=3 by lprs_cprs_conf_sn, cpm_cpms/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_ctc.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_ctc.ma index c3e72888b..6406552e0 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_ctc.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_ctc.ma @@ -20,11 +20,11 @@ include "basic_2/rt_computation/lprs.ma". (* Properties with contextual transitive closure ****************************) lemma lprs_CTC (h) (G): - ∀L1,L2. L1⪤[CTC … (λL. cpm h G L 0)] L2 → ⦃G,L1⦄⊢ ➡*[h] L2. + ∀L1,L2. L1⪤[CTC … (λL. cpm h G L 0)] L2 → ❪G,L1❫⊢ ➡*[h] L2. /3 width=3 by cprs_CTC, lex_co/ qed. (* Inversion lemmas with contextual transitive closure **********************) lemma lprs_inv_CTC (h) (G): - ∀L1,L2. ⦃G,L1⦄⊢ ➡*[h] L2 → L1⪤[CTC … (λL. cpm h G L 0)] L2. + ∀L1,L2. ❪G,L1❫⊢ ➡*[h] L2 → L1⪤[CTC … (λL. cpm h G L 0)] L2. /3 width=3 by cprs_inv_CTC, lex_co/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_length.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_length.ma index 4327dcb7b..060348bf3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_length.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_length.ma @@ -19,5 +19,5 @@ include "basic_2/rt_computation/lprs.ma". (* Forward lemmas with length for local environments ************************) -lemma lprs_fwd_length (h) (G): ∀L1,L2. ⦃G,L1⦄ ⊢ ➡*[h] L2 → |L1| = |L2|. +lemma lprs_fwd_length (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h] L2 → |L1| = |L2|. /2 width=2 by lex_fwd_length/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpr.ma index ea0456434..6424733db 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpr.ma @@ -20,29 +20,29 @@ include "basic_2/rt_computation/lprs_tc.ma". (* Basic_2A1: was: lprs_ind_dx *) lemma lprs_ind_sn (h) (G) (L2): ∀Q:predicate lenv. Q L2 → - (∀L1,L. ⦃G,L1⦄ ⊢ ➡[h] L → ⦃G,L⦄ ⊢ ➡*[h] L2 → Q L → Q L1) → - ∀L1. ⦃G,L1⦄ ⊢ ➡*[h] L2 → Q L1. + (∀L1,L. ❪G,L1❫ ⊢ ➡[h] L → ❪G,L❫ ⊢ ➡*[h] L2 → Q L → Q L1) → + ∀L1. ❪G,L1❫ ⊢ ➡*[h] L2 → Q L1. /4 width=8 by lprs_inv_CTC, lprs_CTC, lpr_cprs_trans, cpr_refl, lex_CTC_ind_sn/ qed-. (* Basic_2A1: was: lprs_ind *) lemma lprs_ind_dx (h) (G) (L1): ∀Q:predicate lenv. Q L1 → - (∀L,L2. ⦃G,L1⦄ ⊢ ➡*[h] L → ⦃G,L⦄ ⊢ ➡[h] L2 → Q L → Q L2) → - ∀L2. ⦃G,L1⦄ ⊢ ➡*[h] L2 → Q L2. + (∀L,L2. ❪G,L1❫ ⊢ ➡*[h] L → ❪G,L❫ ⊢ ➡[h] L2 → Q L → Q L2) → + ∀L2. ❪G,L1❫ ⊢ ➡*[h] L2 → Q L2. /4 width=8 by lprs_inv_CTC, lprs_CTC, lpr_cprs_trans, cpr_refl, lex_CTC_ind_dx/ qed-. (* Properties with unbound rt-transition for full local environments ********) -lemma lpr_lprs (h) (G): ∀L1,L2. ⦃G,L1⦄ ⊢ ➡[h] L2 → ⦃G,L1⦄ ⊢ ➡*[h] L2. +lemma lpr_lprs (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h] L2 → ❪G,L1❫ ⊢ ➡*[h] L2. /4 width=3 by lprs_CTC, lpr_cprs_trans, lex_CTC_inj/ qed. (* Basic_2A1: was: lprs_strap2 *) -lemma lprs_step_sn (h) (G): ∀L1,L. ⦃G,L1⦄ ⊢ ➡[h] L → - ∀L2.⦃G,L⦄ ⊢ ➡*[h] L2 → ⦃G,L1⦄ ⊢ ➡*[h] L2. +lemma lprs_step_sn (h) (G): ∀L1,L. ❪G,L1❫ ⊢ ➡[h] L → + ∀L2.❪G,L❫ ⊢ ➡*[h] L2 → ❪G,L1❫ ⊢ ➡*[h] L2. /4 width=3 by lprs_inv_CTC, lprs_CTC, lpr_cprs_trans, lex_CTC_step_sn/ qed-. (* Basic_2A1: was: lpxs_strap1 *) -lemma lprs_step_dx (h) (G): ∀L1,L. ⦃G,L1⦄ ⊢ ➡*[h] L → - ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → ⦃G,L1⦄ ⊢ ➡*[h] L2. +lemma lprs_step_dx (h) (G): ∀L1,L. ❪G,L1❫ ⊢ ➡*[h] L → + ∀L2. ❪G,L❫ ⊢ ➡[h] L2 → ❪G,L1❫ ⊢ ➡*[h] L2. /4 width=3 by lprs_inv_CTC, lprs_CTC, lpr_cprs_trans, lex_CTC_step_dx/ qed-. lemma lprs_strip (h) (G): confluent2 … (lprs h G) (lpr h G). diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpxs.ma index 5709df1f3..2c95704c8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_lpxs.ma @@ -22,5 +22,5 @@ include "basic_2/rt_computation/lprs.ma". (* Basic_2A1: was: lprs_lpxs *) (* Note: original proof uses lpr_fwd_lpx and monotonic_TC *) -lemma lprs_fwd_lpxs (h) (G) : ∀L1,L2. ⦃G,L1⦄ ⊢ ➡*[h] L2 → ⦃G,L1⦄ ⊢ ⬈*[h] L2. +lemma lprs_fwd_lpxs (h) (G) : ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h] L2 → ❪G,L1❫ ⊢ ⬈*[h] L2. /3 width=3 by cpms_fwd_cpxs, lex_co/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_tc.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_tc.ma index 3b031c6d5..b0602eaa0 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_tc.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lprs_tc.ma @@ -21,11 +21,11 @@ include "basic_2/rt_computation/cprs_lpr.ma". (* Properties with transitive closure ***************************************) lemma lprs_TC (h) (G): - ∀L1,L2. TC … (lex (λL.cpm h G L 0)) L1 L2 → ⦃G,L1⦄⊢ ➡*[h] L2. + ∀L1,L2. TC … (lex (λL.cpm h G L 0)) L1 L2 → ❪G,L1❫⊢ ➡*[h] L2. /4 width=3 by lprs_CTC, lex_CTC, lpr_cprs_trans/ qed. (* Inversion lemmas with transitive closure *********************************) lemma lprs_inv_TC (h) (G): - ∀L1,L2. ⦃G,L1⦄⊢ ➡*[h] L2 → TC … (lex (λL.cpm h G L 0)) L1 L2. + ∀L1,L2. ❪G,L1❫⊢ ➡*[h] L2 → TC … (lex (λL.cpm h G L 0)) L1 L2. /3 width=3 by lprs_inv_CTC, lex_inv_CTC/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs.ma index d532c62bf..ade37fde5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs.ma @@ -28,13 +28,13 @@ interpretation (* Basic properties *********************************************************) (* Basic_2A1: uses: lpxs_pair_refl *) -lemma lpxs_bind_refl_dx (h) (G): ∀L1,L2. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → - ∀I. ⦃G,L1.ⓘ{I}⦄ ⊢ ⬈*[h] L2.ⓘ{I}. +lemma lpxs_bind_refl_dx (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ⬈*[h] L2 → + ∀I. ❪G,L1.ⓘ[I]❫ ⊢ ⬈*[h] L2.ⓘ[I]. /2 width=1 by lex_bind_refl_dx/ qed. -lemma lpxs_pair (h) (G): ∀L1,L2. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → - ∀V1,V2. ⦃G,L1⦄ ⊢ V1 ⬈*[h] V2 → - ∀I. ⦃G,L1.ⓑ{I}V1⦄ ⊢ ⬈*[h] L2.ⓑ{I}V2. +lemma lpxs_pair (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ⬈*[h] L2 → + ∀V1,V2. ❪G,L1❫ ⊢ V1 ⬈*[h] V2 → + ∀I. ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈*[h] L2.ⓑ[I]V2. /2 width=1 by lex_pair/ qed. lemma lpxs_refl (h) (G): reflexive … (lpxs h G). @@ -43,25 +43,25 @@ lemma lpxs_refl (h) (G): reflexive … (lpxs h G). (* Basic inversion lemmas ***************************************************) (* Basic_2A1: was: lpxs_inv_atom1 *) -lemma lpxs_inv_atom_sn (h) (G): ∀L2. ⦃G,⋆⦄ ⊢ ⬈*[h] L2 → L2 = ⋆. +lemma lpxs_inv_atom_sn (h) (G): ∀L2. ❪G,⋆❫ ⊢ ⬈*[h] L2 → L2 = ⋆. /2 width=2 by lex_inv_atom_sn/ qed-. -lemma lpxs_inv_bind_sn (h) (G): ∀I1,L2,K1. ⦃G,K1.ⓘ{I1}⦄ ⊢ ⬈*[h] L2 → - ∃∃I2,K2. ⦃G,K1⦄ ⊢ ⬈*[h] K2 & ⦃G,K1⦄ ⊢ I1 ⬈*[h] I2 & L2 = K2.ⓘ{I2}. +lemma lpxs_inv_bind_sn (h) (G): ∀I1,L2,K1. ❪G,K1.ⓘ[I1]❫ ⊢ ⬈*[h] L2 → + ∃∃I2,K2. ❪G,K1❫ ⊢ ⬈*[h] K2 & ❪G,K1❫ ⊢ I1 ⬈*[h] I2 & L2 = K2.ⓘ[I2]. /2 width=1 by lex_inv_bind_sn/ qed-. (* Basic_2A1: was: lpxs_inv_pair1 *) -lemma lpxs_inv_pair_sn (h) (G): ∀I,L2,K1,V1. ⦃G,K1.ⓑ{I}V1⦄ ⊢ ⬈*[h] L2 → - ∃∃K2,V2. ⦃G,K1⦄ ⊢ ⬈*[h] K2 & ⦃G,K1⦄ ⊢ V1 ⬈*[h] V2 & L2 = K2.ⓑ{I}V2. +lemma lpxs_inv_pair_sn (h) (G): ∀I,L2,K1,V1. ❪G,K1.ⓑ[I]V1❫ ⊢ ⬈*[h] L2 → + ∃∃K2,V2. ❪G,K1❫ ⊢ ⬈*[h] K2 & ❪G,K1❫ ⊢ V1 ⬈*[h] V2 & L2 = K2.ⓑ[I]V2. /2 width=1 by lex_inv_pair_sn/ qed-. (* Basic_2A1: was: lpxs_inv_atom2 *) -lemma lpxs_inv_atom_dx (h) (G): ∀L1. ⦃G,L1⦄ ⊢ ⬈*[h] ⋆ → L1 = ⋆. +lemma lpxs_inv_atom_dx (h) (G): ∀L1. ❪G,L1❫ ⊢ ⬈*[h] ⋆ → L1 = ⋆. /2 width=2 by lex_inv_atom_dx/ qed-. (* Basic_2A1: was: lpxs_inv_pair2 *) -lemma lpxs_inv_pair_dx (h) (G): ∀I,L1,K2,V2. ⦃G,L1⦄ ⊢ ⬈*[h] K2.ⓑ{I}V2 → - ∃∃K1,V1. ⦃G,K1⦄ ⊢ ⬈*[h] K2 & ⦃G,K1⦄ ⊢ V1 ⬈*[h] V2 & L1 = K1.ⓑ{I}V1. +lemma lpxs_inv_pair_dx (h) (G): ∀I,L1,K2,V2. ❪G,L1❫ ⊢ ⬈*[h] K2.ⓑ[I]V2 → + ∃∃K1,V1. ❪G,K1❫ ⊢ ⬈*[h] K2 & ❪G,K1❫ ⊢ V1 ⬈*[h] V2 & L1 = K1.ⓑ[I]V1. /2 width=1 by lex_inv_pair_dx/ qed-. (* Basic eliminators ********************************************************) @@ -70,12 +70,12 @@ lemma lpxs_inv_pair_dx (h) (G): ∀I,L1,K2,V2. ⦃G,L1⦄ ⊢ ⬈*[h] K2.ⓑ{I}V lemma lpxs_ind (h) (G): ∀Q:relation lenv. Q (⋆) (⋆) → ( ∀I,K1,K2. - ⦃G,K1⦄ ⊢ ⬈*[h] K2 → - Q K1 K2 → Q (K1.ⓘ{I}) (K2.ⓘ{I}) + ❪G,K1❫ ⊢ ⬈*[h] K2 → + Q K1 K2 → Q (K1.ⓘ[I]) (K2.ⓘ[I]) ) → ( ∀I,K1,K2,V1,V2. - ⦃G,K1⦄ ⊢ ⬈*[h] K2 → ⦃G,K1⦄ ⊢ V1 ⬈*[h] V2 → - Q K1 K2 → Q (K1.ⓑ{I}V1) (K2.ⓑ{I}V2) + ❪G,K1❫ ⊢ ⬈*[h] K2 → ❪G,K1❫ ⊢ V1 ⬈*[h] V2 → + Q K1 K2 → Q (K1.ⓑ[I]V1) (K2.ⓑ[I]V2) ) → - ∀L1,L2. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → Q L1 L2. + ∀L1,L2. ❪G,L1❫ ⊢ ⬈*[h] L2 → Q L1 L2. /3 width=4 by lex_ind/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_cpxs.ma index bf54e6acc..b04bf7ba2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_cpxs.ma @@ -19,16 +19,16 @@ include "basic_2/rt_computation/lpxs_lpx.ma". (* Properties with context-sensitive extended rt-computation for terms ******) (* Basic_2A1: was: cpxs_bind2 *) -lemma cpxs_bind_dx (h) (G): ∀L,V1,V2. ⦃G,L⦄ ⊢ V1 ⬈*[h] V2 → - ∀I,T1,T2. ⦃G,L.ⓑ{I}V2⦄ ⊢ T1 ⬈*[h] T2 → - ∀p. ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T1 ⬈*[h] ⓑ{p,I}V2.T2. +lemma cpxs_bind_dx (h) (G): ∀L,V1,V2. ❪G,L❫ ⊢ V1 ⬈*[h] V2 → + ∀I,T1,T2. ❪G,L.ⓑ[I]V2❫ ⊢ T1 ⬈*[h] T2 → + ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈*[h] ⓑ[p,I]V2.T2. /4 width=5 by lpxs_cpxs_trans, lpxs_pair, cpxs_bind/ qed. (* Inversion lemmas with context-sensitive ext rt-computation for terms *****) -lemma cpxs_inv_abst1 (h) (G): ∀p,L,V1,T1,U2. ⦃G,L⦄ ⊢ ⓛ{p}V1.T1 ⬈*[h] U2 → - ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ⬈*[h] V2 & ⦃G,L.ⓛV1⦄ ⊢ T1 ⬈*[h] T2 & - U2 = ⓛ{p}V2.T2. +lemma cpxs_inv_abst1 (h) (G): ∀p,L,V1,T1,U2. ❪G,L❫ ⊢ ⓛ[p]V1.T1 ⬈*[h] U2 → + ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈*[h] V2 & ❪G,L.ⓛV1❫ ⊢ T1 ⬈*[h] T2 & + U2 = ⓛ[p]V2.T2. #h #G #p #L #V1 #T1 #U2 #H @(cpxs_ind … H) -U2 /2 width=5 by ex3_2_intro/ #U0 #U2 #_ #HU02 * #V0 #T0 #HV10 #HT10 #H destruct elim (cpx_inv_abst1 … HU02) -HU02 #V2 #T2 #HV02 #HT02 #H destruct @@ -38,10 +38,10 @@ qed-. (* Basic_2A1: was: cpxs_inv_abbr1 *) lemma cpxs_inv_abbr1_dx (h) (p) (G) (L): - ∀V1,T1,U2. ⦃G,L⦄ ⊢ ⓓ{p}V1.T1 ⬈*[h] U2 → - ∨∨ ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ⬈*[h] V2 & ⦃G,L.ⓓV1⦄ ⊢ T1 ⬈*[h] T2 & - U2 = ⓓ{p}V2.T2 - | ∃∃T2. ⦃G,L.ⓓV1⦄ ⊢ T1 ⬈*[h] T2 & ⇧*[1] U2 ≘ T2 & p = Ⓣ. + ∀V1,T1,U2. ❪G,L❫ ⊢ ⓓ[p]V1.T1 ⬈*[h] U2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈*[h] V2 & ❪G,L.ⓓV1❫ ⊢ T1 ⬈*[h] T2 & + U2 = ⓓ[p]V2.T2 + | ∃∃T2. ❪G,L.ⓓV1❫ ⊢ T1 ⬈*[h] T2 & ⇧*[1] U2 ≘ T2 & p = Ⓣ. #h #p #G #L #V1 #T1 #U2 #H @(cpxs_ind … H) -U2 /3 width=5 by ex3_2_intro, or_introl/ #U0 #U2 #_ #HU02 * * diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_feqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_feqx.ma index e6fc7f0bb..4c2a560db 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_feqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_feqx.ma @@ -19,9 +19,9 @@ include "basic_2/rt_computation/lpxs_reqx.ma". (* Properties with sort-irrelevant equivalence on closures ******************) -lemma feqx_lpxs_trans (h): ∀G1,G2,L1,L0,T1,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L0,T2⦄ → - ∀L2. ⦃G2,L0⦄ ⊢⬈*[h] L2 → - ∃∃L. ⦃G1,L1⦄ ⊢⬈*[h] L & ⦃G1,L,T1⦄ ≛ ⦃G2,L2,T2⦄. +lemma feqx_lpxs_trans (h): ∀G1,G2,L1,L0,T1,T2. ❪G1,L1,T1❫ ≛ ❪G2,L0,T2❫ → + ∀L2. ❪G2,L0❫ ⊢⬈*[h] L2 → + ∃∃L. ❪G1,L1❫ ⊢⬈*[h] L & ❪G1,L,T1❫ ≛ ❪G2,L2,T2❫. #h #G1 #G2 #L1 #L0 #T1 #T2 #H1 #L2 #HL02 elim (feqx_inv_gen_dx … H1) -H1 #HG #HL10 #HT12 destruct elim (reqx_lpxs_trans … HL02 … HL10) -L0 #L0 #HL10 #HL02 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_length.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_length.ma index 8ab26578e..ec5b9dbe7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_length.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_length.ma @@ -19,5 +19,5 @@ include "basic_2/rt_computation/lpxs.ma". (* Forward lemmas with length for local environments ************************) -lemma lpxs_fwd_length (h) (G): ∀L1,L2. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → |L1| = |L2|. +lemma lpxs_fwd_length (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ⬈*[h] L2 → |L1| = |L2|. /2 width=2 by lex_fwd_length/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_lpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_lpx.ma index c27507776..18c5bb7ee 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_lpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_lpx.ma @@ -20,31 +20,31 @@ include "basic_2/rt_computation/lpxs.ma". (* Properties with unbound rt-transition for full local environments ********) -lemma lpx_lpxs (h) (G): ∀L1,L2. ⦃G,L1⦄ ⊢ ⬈[h] L2 → ⦃G,L1⦄ ⊢ ⬈*[h] L2. +lemma lpx_lpxs (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ⬈[h] L2 → ❪G,L1❫ ⊢ ⬈*[h] L2. /3 width=3 by lpx_cpxs_trans, lex_CTC_inj/ qed. (* Basic_2A1: was: lpxs_strap2 *) -lemma lpxs_step_sn (h) (G): ∀L1,L. ⦃G,L1⦄ ⊢ ⬈[h] L → - ∀L2. ⦃G,L⦄ ⊢ ⬈*[h] L2 → ⦃G,L1⦄ ⊢ ⬈*[h] L2. +lemma lpxs_step_sn (h) (G): ∀L1,L. ❪G,L1❫ ⊢ ⬈[h] L → + ∀L2. ❪G,L❫ ⊢ ⬈*[h] L2 → ❪G,L1❫ ⊢ ⬈*[h] L2. /3 width=3 by lpx_cpxs_trans, lex_CTC_step_sn/ qed-. (* Basic_2A1: was: lpxs_strap1 *) -lemma lpxs_step_dx (h) (G): ∀L1,L. ⦃G,L1⦄ ⊢ ⬈*[h] L → - ∀L2. ⦃G,L⦄ ⊢ ⬈[h] L2 → ⦃G,L1⦄ ⊢ ⬈*[h] L2. +lemma lpxs_step_dx (h) (G): ∀L1,L. ❪G,L1❫ ⊢ ⬈*[h] L → + ∀L2. ❪G,L❫ ⊢ ⬈[h] L2 → ❪G,L1❫ ⊢ ⬈*[h] L2. /3 width=3 by lpx_cpxs_trans, lex_CTC_step_dx/ qed-. (* Eliminators with unbound rt-transition for full local environments *******) (* Basic_2A1: was: lpxs_ind_dx *) lemma lpxs_ind_sn (h) (G) (L2): ∀Q:predicate lenv. Q L2 → - (∀L1,L. ⦃G,L1⦄ ⊢ ⬈[h] L → ⦃G,L⦄ ⊢ ⬈*[h] L2 → Q L → Q L1) → - ∀L1. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → Q L1. + (∀L1,L. ❪G,L1❫ ⊢ ⬈[h] L → ❪G,L❫ ⊢ ⬈*[h] L2 → Q L → Q L1) → + ∀L1. ❪G,L1❫ ⊢ ⬈*[h] L2 → Q L1. /3 width=7 by lpx_cpxs_trans, cpx_refl, lex_CTC_ind_sn/ qed-. (* Basic_2A1: was: lpxs_ind *) lemma lpxs_ind_dx (h) (G) (L1): ∀Q:predicate lenv. Q L1 → - (∀L,L2. ⦃G,L1⦄ ⊢ ⬈*[h] L → ⦃G,L⦄ ⊢ ⬈[h] L2 → Q L → Q L2) → - ∀L2. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → Q L2. + (∀L,L2. ❪G,L1❫ ⊢ ⬈*[h] L → ❪G,L❫ ⊢ ⬈[h] L2 → Q L → Q L2) → + ∀L2. ❪G,L1❫ ⊢ ⬈*[h] L2 → Q L2. /3 width=7 by lpx_cpxs_trans, cpx_refl, lex_CTC_ind_dx/ qed-. (* Properties with context-sensitive extended rt-transition for terms *******) @@ -65,7 +65,7 @@ qed-. (* Advanced properties ******************************************************) (* Basic_2A1: was: lpxs_pair2 *) -lemma lpxs_pair_dx (h) (G): ∀L1,L2. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → - ∀V1,V2. ⦃G,L2⦄ ⊢ V1 ⬈*[h] V2 → - ∀I. ⦃G,L1.ⓑ{I}V1⦄ ⊢ ⬈*[h] L2.ⓑ{I}V2. +lemma lpxs_pair_dx (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ⬈*[h] L2 → + ∀V1,V2. ❪G,L2❫ ⊢ V1 ⬈*[h] V2 → + ∀I. ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈*[h] L2.ⓑ[I]V2. /3 width=3 by lpxs_pair, lpxs_cpxs_trans/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_reqx.ma index 16c930462..29deb0239 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_reqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lpxs_reqx.ma @@ -21,9 +21,9 @@ include "basic_2/rt_computation/lpxs_lpx.ma". (* Basic_2A1: uses: lleq_lpxs_trans *) lemma reqx_lpxs_trans (h) (G) (T:term): - ∀L2,K2. ⦃G,L2⦄ ⊢ ⬈*[h] K2 → + ∀L2,K2. ❪G,L2❫ ⊢ ⬈*[h] K2 → ∀L1. L1 ≛[T] L2 → - ∃∃K1. ⦃G,L1⦄ ⊢ ⬈*[h] K1 & K1 ≛[T] K2. + ∃∃K1. ❪G,L1❫ ⊢ ⬈*[h] K1 & K1 ≛[T] K2. #h #G #T #L2 #K2 #H @(lpxs_ind_sn … H) -L2 /2 width=3 by ex2_intro/ #L #L2 #HL2 #_ #IH #L1 #HT elim (reqx_lpx_trans … HL2 … HT) -L #L #HL1 #HT @@ -33,9 +33,9 @@ qed-. (* Basic_2A1: uses: lpxs_nlleq_inv_step_sn *) lemma lpxs_rneqx_inv_step_sn (h) (G) (T:term): - ∀L1,L2. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → - ∃∃L,L0. ⦃G,L1⦄ ⊢ ⬈[h] L & L1 ≛[T] L → ⊥ & - ⦃G,L⦄ ⊢ ⬈*[h] L0 & L0 ≛[T] L2. + ∀L1,L2. ❪G,L1❫ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → + ∃∃L,L0. ❪G,L1❫ ⊢ ⬈[h] L & L1 ≛[T] L → ⊥ & + ❪G,L❫ ⊢ ⬈*[h] L0 & L0 ≛[T] L2. #h #G #T #L1 #L2 #H @(lpxs_ind_sn … H) -L1 [ #H elim H -H // | #L1 #L #H1 #H2 #IH2 #H12 elim (reqx_dec L1 L T) #H diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx.ma index 2671597f1..81e3d9154 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx.ma @@ -29,11 +29,11 @@ interpretation (* Basic_2A1: uses: lsx_ind *) lemma rsx_ind (h) (G) (T) (Q:predicate lenv): - (∀L1. G ⊢ ⬈*[h,T] 𝐒⦃L1⦄ → - (∀L2. ⦃G,L1⦄ ⊢ ⬈[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) → + (∀L1. G ⊢ ⬈*[h,T] 𝐒❪L1❫ → + (∀L2. ❪G,L1❫ ⊢ ⬈[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) → Q L1 ) → - ∀L. G ⊢ ⬈*[h,T] 𝐒⦃L⦄ → Q L. + ∀L. G ⊢ ⬈*[h,T] 𝐒❪L❫ → Q L. #h #G #T #Q #H0 #L1 #H elim H -L1 /5 width=1 by SN_intro/ qed-. @@ -43,16 +43,16 @@ qed-. (* Basic_2A1: uses: lsx_intro *) lemma rsx_intro (h) (G) (T): ∀L1. - (∀L2. ⦃G,L1⦄ ⊢ ⬈[h] L2 → (L1 ≛[T] L2 → ⊥) → G ⊢ ⬈*[h,T] 𝐒⦃L2⦄) → - G ⊢ ⬈*[h,T] 𝐒⦃L1⦄. + (∀L2. ❪G,L1❫ ⊢ ⬈[h] L2 → (L1 ≛[T] L2 → ⊥) → G ⊢ ⬈*[h,T] 𝐒❪L2❫) → + G ⊢ ⬈*[h,T] 𝐒❪L1❫. /5 width=1 by SN_intro/ qed. (* Basic forward lemmas *****************************************************) (* Basic_2A1: uses: lsx_fwd_pair_sn lsx_fwd_bind_sn lsx_fwd_flat_sn *) lemma rsx_fwd_pair_sn (h) (G): - ∀I,L,V,T. G ⊢ ⬈*[h,②{I}V.T] 𝐒⦃L⦄ → - G ⊢ ⬈*[h,V] 𝐒⦃L⦄. + ∀I,L,V,T. G ⊢ ⬈*[h,②[I]V.T] 𝐒❪L❫ → + G ⊢ ⬈*[h,V] 𝐒❪L❫. #h #G #I #L #V #T #H @(rsx_ind … H) -L #L1 #_ #IHL1 @rsx_intro #L2 #HL12 #HnL12 @@ -61,8 +61,8 @@ qed-. (* Basic_2A1: uses: lsx_fwd_flat_dx *) lemma rsx_fwd_flat_dx (h) (G): - ∀I,L,V,T. G ⊢ ⬈*[h,ⓕ{I}V.T] 𝐒⦃L⦄ → - G ⊢ ⬈*[h,T] 𝐒⦃L⦄. + ∀I,L,V,T. G ⊢ ⬈*[h,ⓕ[I]V.T] 𝐒❪L❫ → + G ⊢ ⬈*[h,T] 𝐒❪L❫. #h #G #I #L #V #T #H @(rsx_ind … H) -L #L1 #_ #IHL1 @rsx_intro #L2 #HL12 #HnL12 @@ -70,23 +70,23 @@ lemma rsx_fwd_flat_dx (h) (G): qed-. fact rsx_fwd_pair_aux (h) (G): - ∀L. G ⊢ ⬈*[h,#0] 𝐒⦃L⦄ → - ∀I,K,V. L = K.ⓑ{I}V → G ⊢ ⬈*[h,V] 𝐒⦃K⦄. + ∀L. G ⊢ ⬈*[h,#0] 𝐒❪L❫ → + ∀I,K,V. L = K.ⓑ[I]V → G ⊢ ⬈*[h,V] 𝐒❪K❫. #h #G #L #H @(rsx_ind … H) -L #L1 #_ #IH #I #K1 #V #H destruct /5 width=5 by lpx_pair, rsx_intro, reqx_fwd_zero_pair/ qed-. lemma rsx_fwd_pair (h) (G): - ∀I,K,V. G ⊢ ⬈*[h,#0] 𝐒⦃K.ⓑ{I}V⦄ → G ⊢ ⬈*[h,V] 𝐒⦃K⦄. + ∀I,K,V. G ⊢ ⬈*[h,#0] 𝐒❪K.ⓑ[I]V❫ → G ⊢ ⬈*[h,V] 𝐒❪K❫. /2 width=4 by rsx_fwd_pair_aux/ qed-. (* Basic inversion lemmas ***************************************************) (* Basic_2A1: uses: lsx_inv_flat *) lemma rsx_inv_flat (h) (G): - ∀I,L,V,T. G ⊢ ⬈*[h,ⓕ{I}V.T] 𝐒⦃L⦄ → - ∧∧ G ⊢ ⬈*[h,V] 𝐒⦃L⦄ & G ⊢ ⬈*[h,T] 𝐒⦃L⦄. + ∀I,L,V,T. G ⊢ ⬈*[h,ⓕ[I]V.T] 𝐒❪L❫ → + ∧∧ G ⊢ ⬈*[h,V] 𝐒❪L❫ & G ⊢ ⬈*[h,T] 𝐒❪L❫. /3 width=3 by rsx_fwd_pair_sn, rsx_fwd_flat_dx, conj/ qed-. (* Basic_2A1: removed theorems 9: diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_csx.ma index 8e7c7793a..f9f97bca8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_csx.ma @@ -21,8 +21,8 @@ include "basic_2/rt_computation/jsx_rsx.ma". (* Forward lemmas with strongly rt-normalizing terms ************************) fact rsx_fwd_lref_pair_csx_aux (h) (G): - ∀L. G ⊢ ⬈*[h,#0] 𝐒⦃L⦄ → - ∀I,K,V. L = K.ⓑ{I}V → ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄. + ∀L. G ⊢ ⬈*[h,#0] 𝐒❪L❫ → + ∀I,K,V. L = K.ⓑ[I]V → ❪G,K❫ ⊢ ⬈*[h] 𝐒❪V❫. #h #G #L #H @(rsx_ind … H) -L #L #_ #IH #I #K #V1 #H destruct @csx_intro #V2 #HV12 #HnV12 @@ -34,17 +34,17 @@ fact rsx_fwd_lref_pair_csx_aux (h) (G): qed-. lemma rsx_fwd_lref_pair_csx (h) (G): - ∀I,K,V. G ⊢ ⬈*[h,#0] 𝐒⦃K.ⓑ{I}V⦄ → ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄. + ∀I,K,V. G ⊢ ⬈*[h,#0] 𝐒❪K.ⓑ[I]V❫ → ❪G,K❫ ⊢ ⬈*[h] 𝐒❪V❫. /2 width=4 by rsx_fwd_lref_pair_csx_aux/ qed-. lemma rsx_fwd_lref_pair_csx_drops (h) (G): - ∀I,K,V,i,L. ⇩*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄ → ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄. + ∀I,K,V,i,L. ⇩*[i] L ≘ K.ⓑ[I]V → G ⊢ ⬈*[h,#i] 𝐒❪L❫ → ❪G,K❫ ⊢ ⬈*[h] 𝐒❪V❫. #h #G #I #K #V #i elim i -i [ #L #H >(drops_fwd_isid … H) -H /2 width=2 by rsx_fwd_lref_pair_csx/ | #i #IH #L #H1 #H2 elim (drops_inv_bind2_isuni_next … H1) -H1 // #J #Y #HY #H destruct - lapply (rsx_inv_lifts … H2 … (𝐔❴1❵) ?????) -H2 + lapply (rsx_inv_lifts … H2 … (𝐔❨1❩) ?????) -H2 /3 width=6 by drops_refl, drops_drop/ ] qed-. @@ -52,20 +52,20 @@ qed-. (* Inversion lemmas with strongly rt-normalizing terms **********************) lemma rsx_inv_lref_pair (h) (G): - ∀I,K,V. G ⊢ ⬈*[h,#0] 𝐒⦃K.ⓑ{I}V⦄ → - ∧∧ ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ & G ⊢ ⬈*[h,V] 𝐒⦃K⦄. + ∀I,K,V. G ⊢ ⬈*[h,#0] 𝐒❪K.ⓑ[I]V❫ → + ∧∧ ❪G,K❫ ⊢ ⬈*[h] 𝐒❪V❫ & G ⊢ ⬈*[h,V] 𝐒❪K❫. /3 width=2 by rsx_fwd_lref_pair_csx, rsx_fwd_pair, conj/ qed-. lemma rsx_inv_lref_pair_drops (h) (G): - ∀I,K,V,i,L. ⇩*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄ → - ∧∧ ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ & G ⊢ ⬈*[h,V] 𝐒⦃K⦄. + ∀I,K,V,i,L. ⇩*[i] L ≘ K.ⓑ[I]V → G ⊢ ⬈*[h,#i] 𝐒❪L❫ → + ∧∧ ❪G,K❫ ⊢ ⬈*[h] 𝐒❪V❫ & G ⊢ ⬈*[h,V] 𝐒❪K❫. /3 width=5 by rsx_fwd_lref_pair_csx_drops, rsx_fwd_lref_pair_drops, conj/ qed-. lemma rsx_inv_lref_drops (h) (G): - ∀L,i. G ⊢ ⬈*[h,#i] 𝐒⦃L⦄ → - ∨∨ ⇩*[Ⓕ,𝐔❴i❵] L ≘ ⋆ - | ∃∃I,K. ⇩*[i] L ≘ K.ⓤ{I} - | ∃∃I,K,V. ⇩*[i] L ≘ K.ⓑ{I}V & ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ & G ⊢ ⬈*[h,V] 𝐒⦃K⦄. + ∀L,i. G ⊢ ⬈*[h,#i] 𝐒❪L❫ → + ∨∨ ⇩*[Ⓕ,𝐔❨i❩] L ≘ ⋆ + | ∃∃I,K. ⇩*[i] L ≘ K.ⓤ[I] + | ∃∃I,K,V. ⇩*[i] L ≘ K.ⓑ[I]V & ❪G,K❫ ⊢ ⬈*[h] 𝐒❪V❫ & G ⊢ ⬈*[h,V] 𝐒❪K❫. #h #G #L #i #H elim (drops_F_uni L i) [ /2 width=1 by or3_intro0/ | * * /4 width=10 by rsx_fwd_lref_pair_csx_drops, rsx_fwd_lref_pair_drops, ex3_3_intro, ex1_2_intro, or3_intro2, or3_intro1/ @@ -77,9 +77,9 @@ qed-. (* Note: swapping the eliminations to avoid rsx_cpx_trans: no solution found *) (* Basic_2A1: uses: lsx_lref_be_lpxs *) lemma rsx_lref_pair_lpxs (h) (G): - ∀K1,V. ⦃G,K1⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ → - ∀K2. G ⊢ ⬈*[h,V] 𝐒⦃K2⦄ → ⦃G,K1⦄ ⊢ ⬈*[h] K2 → - ∀I. G ⊢ ⬈*[h,#0] 𝐒⦃K2.ⓑ{I}V⦄. + ∀K1,V. ❪G,K1❫ ⊢ ⬈*[h] 𝐒❪V❫ → + ∀K2. G ⊢ ⬈*[h,V] 𝐒❪K2❫ → ❪G,K1❫ ⊢ ⬈*[h] K2 → + ∀I. G ⊢ ⬈*[h,#0] 𝐒❪K2.ⓑ[I]V❫. #h #G #K1 #V #H @(csx_ind_cpxs … H) -V #V0 #_ #IHV0 #K2 #H @(rsx_ind … H) -K2 #K0 #HK0 #IHK0 #HK10 #I @@ -96,25 +96,25 @@ elim (teqx_dec V0 V2) #HnV02 destruct [ -IHV0 -HV02 -HK0 | -IHK0 -HnY ] qed. lemma rsx_lref_pair (h) (G): - ∀K,V. ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ → G ⊢ ⬈*[h,V] 𝐒⦃K⦄ → ∀I. G ⊢ ⬈*[h,#0] 𝐒⦃K.ⓑ{I}V⦄. + ∀K,V. ❪G,K❫ ⊢ ⬈*[h] 𝐒❪V❫ → G ⊢ ⬈*[h,V] 𝐒❪K❫ → ∀I. G ⊢ ⬈*[h,#0] 𝐒❪K.ⓑ[I]V❫. /2 width=3 by rsx_lref_pair_lpxs/ qed. (* Basic_2A1: uses: lsx_lref_be *) lemma rsx_lref_pair_drops (h) (G): - ∀K,V. ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ → G ⊢ ⬈*[h,V] 𝐒⦃K⦄ → - ∀I,i,L. ⇩*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄. + ∀K,V. ❪G,K❫ ⊢ ⬈*[h] 𝐒❪V❫ → G ⊢ ⬈*[h,V] 𝐒❪K❫ → + ∀I,i,L. ⇩*[i] L ≘ K.ⓑ[I]V → G ⊢ ⬈*[h,#i] 𝐒❪L❫. #h #G #K #V #HV #HK #I #i elim i -i [ #L #H >(drops_fwd_isid … H) -H /2 width=1 by rsx_lref_pair/ | #i #IH #L #H elim (drops_inv_bind2_isuni_next … H) -H // #J #Y #HY #H destruct - @(rsx_lifts … (𝐔❴1❵)) /3 width=6 by drops_refl, drops_drop/ (**) (* full auto fails *) + @(rsx_lifts … (𝐔❨1❩)) /3 width=6 by drops_refl, drops_drop/ (**) (* full auto fails *) ] qed. (* Main properties with strongly rt-normalizing terms ***********************) (* Basic_2A1: uses: csx_lsx *) -theorem csx_rsx (h) (G): ∀L,T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄ → G ⊢ ⬈*[h,T] 𝐒⦃L⦄. +theorem csx_rsx (h) (G): ∀L,T. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T❫ → G ⊢ ⬈*[h,T] 𝐒❪L❫. #h #G #L #T @(fqup_wf_ind_eq (Ⓣ) … G L T) -G -L -T #Z #Y #X #IH #G #L * * [ // diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_drops.ma index 5a4dd983c..cf607f56b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_drops.ma @@ -23,7 +23,7 @@ include "basic_2/rt_computation/rsx_fqup.ma". (* Note: this uses length *) (* Basic_2A1: uses: lsx_lift_le lsx_lift_ge *) -lemma rsx_lifts (h) (G): d_liftable1_isuni … (λL,T. G ⊢ ⬈*[h,T] 𝐒⦃L⦄). +lemma rsx_lifts (h) (G): d_liftable1_isuni … (λL,T. G ⊢ ⬈*[h,T] 𝐒❪L❫). #h #G #K #T #H @(rsx_ind … H) -K #K1 #_ #IH #b #f #L1 #HLK1 #Hf #U #HTU @rsx_intro #L2 #HL12 #HnL12 elim (lpx_drops_conf … HLK1 … HL12) @@ -33,7 +33,7 @@ qed-. (* Inversion lemmas on relocation *******************************************) (* Basic_2A1: uses: lsx_inv_lift_le lsx_inv_lift_be lsx_inv_lift_ge *) -lemma rsx_inv_lifts (h) (G): d_deliftable1_isuni … (λL,T. G ⊢ ⬈*[h,T] 𝐒⦃L⦄). +lemma rsx_inv_lifts (h) (G): d_deliftable1_isuni … (λL,T. G ⊢ ⬈*[h,T] 𝐒❪L❫). #h #G #L #U #H @(rsx_ind … H) -L #L1 #_ #IH #b #f #K1 #HLK1 #Hf #T #HTU @rsx_intro #K2 #HK12 #HnK12 elim (drops_lpx_trans … HLK1 … HK12) -HK12 @@ -43,13 +43,13 @@ qed-. (* Advanced properties ******************************************************) (* Basic_2A1: uses: lsx_lref_free *) -lemma rsx_lref_atom_drops (h) (G): ∀L,i. ⇩*[Ⓕ,𝐔❴i❵] L ≘ ⋆ → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄. +lemma rsx_lref_atom_drops (h) (G): ∀L,i. ⇩*[Ⓕ,𝐔❨i❩] L ≘ ⋆ → G ⊢ ⬈*[h,#i] 𝐒❪L❫. #h #G #L1 #i #HL1 @(rsx_lifts … (#0) … HL1) -HL1 // qed. (* Basic_2A1: uses: lsx_lref_skip *) -lemma rsx_lref_unit_drops (h) (G): ∀I,L,K,i. ⇩*[i] L ≘ K.ⓤ{I} → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄. +lemma rsx_lref_unit_drops (h) (G): ∀I,L,K,i. ⇩*[i] L ≘ K.ⓤ[I] → G ⊢ ⬈*[h,#i] 𝐒❪L❫. #h #G #I #L1 #K1 #i #HL1 @(rsx_lifts … (#0) … HL1) -HL1 // qed. @@ -58,8 +58,8 @@ qed. (* Basic_2A1: uses: lsx_fwd_lref_be *) lemma rsx_fwd_lref_pair_drops (h) (G): - ∀L,i. G ⊢ ⬈*[h,#i] 𝐒⦃L⦄ → - ∀I,K,V. ⇩*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h,V] 𝐒⦃K⦄. + ∀L,i. G ⊢ ⬈*[h,#i] 𝐒❪L❫ → + ∀I,K,V. ⇩*[i] L ≘ K.ⓑ[I]V → G ⊢ ⬈*[h,V] 𝐒❪K❫. #h #G #L #i #HL #I #K #V #HLK lapply (rsx_inv_lifts … HL … HLK … (#0) ?) -L /2 width=2 by rsx_fwd_pair/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_fqup.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_fqup.ma index bd56111e1..c654e3729 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_fqup.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_fqup.ma @@ -20,7 +20,7 @@ include "basic_2/rt_computation/rsx.ma". (* Advanced properties ******************************************************) (* Basic_2A1: uses: lsx_atom *) -lemma lfsx_atom (h) (G) (T): G ⊢ ⬈*[h,T] 𝐒⦃⋆⦄. +lemma lfsx_atom (h) (G) (T): G ⊢ ⬈*[h,T] 𝐒❪⋆❫. #h #G #T @rsx_intro #Y #H #HnT lapply (lpx_inv_atom_sn … H) -H #H destruct @@ -33,7 +33,7 @@ qed. (* Note: the exclusion binder (ⓧ) makes this more elegant and much simpler *) (* Note: the old proof without the exclusion binder requires lreq *) lemma rsx_fwd_bind_dx_void (h) (G): - ∀p,I,L,V,T. G ⊢ ⬈*[h,ⓑ{p,I}V.T] 𝐒⦃L⦄ → G ⊢ ⬈*[h,T] 𝐒⦃L.ⓧ⦄. + ∀p,I,L,V,T. G ⊢ ⬈*[h,ⓑ[p,I]V.T] 𝐒❪L❫ → G ⊢ ⬈*[h,T] 𝐒❪L.ⓧ❫. #h #G #p #I #L #V #T #H @(rsx_ind … H) -L #L1 #_ #IH @rsx_intro #Y #H #HT @@ -45,6 +45,6 @@ qed-. (* Basic_2A1: uses: lsx_inv_bind *) lemma rsx_inv_bind_void (h) (G): - ∀p,I,L,V,T. G ⊢ ⬈*[h,ⓑ{p,I}V.T] 𝐒⦃L⦄ → - ∧∧ G ⊢ ⬈*[h,V] 𝐒⦃L⦄ & G ⊢ ⬈*[h,T] 𝐒⦃L.ⓧ⦄. + ∀p,I,L,V,T. G ⊢ ⬈*[h,ⓑ[p,I]V.T] 𝐒❪L❫ → + ∧∧ G ⊢ ⬈*[h,V] 𝐒❪L❫ & G ⊢ ⬈*[h,T] 𝐒❪L.ⓧ❫. /3 width=4 by rsx_fwd_pair_sn, rsx_fwd_bind_dx_void, conj/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_length.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_length.ma index 1954e6b6b..81021b2c8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_length.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_length.ma @@ -21,18 +21,18 @@ include "basic_2/rt_computation/rsx.ma". (* Advanced properties ******************************************************) (* Basic_2A1: uses: lsx_sort *) -lemma rsx_sort (h) (G): ∀L,s. G ⊢ ⬈*[h,⋆s] 𝐒⦃L⦄. +lemma rsx_sort (h) (G): ∀L,s. G ⊢ ⬈*[h,⋆s] 𝐒❪L❫. #h #G #L1 #s @rsx_intro #L2 #H #Hs elim Hs -Hs /3 width=3 by lpx_fwd_length, reqx_sort_length/ qed. (* Basic_2A1: uses: lsx_gref *) -lemma rsx_gref (h) (G): ∀L,l. G ⊢ ⬈*[h,§l] 𝐒⦃L⦄. +lemma rsx_gref (h) (G): ∀L,l. G ⊢ ⬈*[h,§l] 𝐒❪L❫. #h #G #L1 #s @rsx_intro #L2 #H #Hs elim Hs -Hs /3 width=3 by lpx_fwd_length, reqx_gref_length/ qed. -lemma rsx_unit (h) (G): ∀I,L. G ⊢ ⬈*[h,#0] 𝐒⦃L.ⓤ{I}⦄. +lemma rsx_unit (h) (G): ∀I,L. G ⊢ ⬈*[h,#0] 𝐒❪L.ⓤ[I]❫. #h #G #I #L1 @rsx_intro #Y #HY #HnY elim HnY -HnY elim (lpx_inv_unit_sn … HY) -HY #L2 #HL12 #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_lpxs.ma index bdb9c7de3..f0a53e660 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_lpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_lpxs.ma @@ -22,14 +22,14 @@ include "basic_2/rt_computation/rsx_rsx.ma". (* Basic_2A1: uses: lsx_intro_alt *) lemma rsx_intro_lpxs (h) (G): - ∀L1,T. (∀L2. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → G ⊢ ⬈*[h,T] 𝐒⦃L2⦄) → - G ⊢ ⬈*[h,T] 𝐒⦃L1⦄. + ∀L1,T. (∀L2. ❪G,L1❫ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → G ⊢ ⬈*[h,T] 𝐒❪L2❫) → + G ⊢ ⬈*[h,T] 𝐒❪L1❫. /4 width=1 by lpx_lpxs, rsx_intro/ qed-. (* Basic_2A1: uses: lsx_lpxs_trans *) lemma rsx_lpxs_trans (h) (G): - ∀L1,T. G ⊢ ⬈*[h,T] 𝐒⦃L1⦄ → - ∀L2. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → G ⊢ ⬈*[h,T] 𝐒⦃L2⦄. + ∀L1,T. G ⊢ ⬈*[h,T] 𝐒❪L1❫ → + ∀L2. ❪G,L1❫ ⊢ ⬈*[h] L2 → G ⊢ ⬈*[h,T] 𝐒❪L2❫. #h #G #L1 #T #HL1 #L2 #H @(lpxs_ind_dx … H) -L2 /2 width=3 by rsx_lpx_trans/ qed-. @@ -37,12 +37,12 @@ qed-. (* Eliminators with unbound rt-computation for full local environments ******) lemma rsx_ind_lpxs_reqx (h) (G) (T) (Q:predicate lenv): - (∀L1. G ⊢ ⬈*[h,T] 𝐒⦃L1⦄ → - (∀L2. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) → + (∀L1. G ⊢ ⬈*[h,T] 𝐒❪L1❫ → + (∀L2. ❪G,L1❫ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) → Q L1 ) → - ∀L1. G ⊢ ⬈*[h,T] 𝐒⦃L1⦄ → - ∀L0. ⦃G,L1⦄ ⊢ ⬈*[h] L0 → ∀L2. L0 ≛[T] L2 → Q L2. + ∀L1. G ⊢ ⬈*[h,T] 𝐒❪L1❫ → + ∀L0. ❪G,L1❫ ⊢ ⬈*[h] L0 → ∀L2. L0 ≛[T] L2 → Q L2. #h #G #T #Q #IH #L1 #H @(rsx_ind … H) -L1 #L1 #HL1 #IH1 #L0 #HL10 #L2 #HL02 @IH -IH /3 width=3 by rsx_lpxs_trans, rsx_reqx_trans/ -HL1 #K2 #HLK2 #HnLK2 @@ -62,11 +62,11 @@ qed-. (* Basic_2A1: uses: lsx_ind_alt *) lemma rsx_ind_lpxs (h) (G) (T) (Q:predicate lenv): - (∀L1. G ⊢ ⬈*[h,T] 𝐒⦃L1⦄ → - (∀L2. ⦃G,L1⦄ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) → + (∀L1. G ⊢ ⬈*[h,T] 𝐒❪L1❫ → + (∀L2. ❪G,L1❫ ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) → Q L1 ) → - ∀L. G ⊢ ⬈*[h,T] 𝐒⦃L⦄ → Q L. + ∀L. G ⊢ ⬈*[h,T] 𝐒❪L❫ → Q L. #h #G #T #Q #IH #L #HL @(rsx_ind_lpxs_reqx … IH … HL) -IH -HL // (**) (* full auto fails *) qed-. @@ -74,10 +74,10 @@ qed-. (* Advanced properties ******************************************************) fact rsx_bind_lpxs_aux (h) (G): - ∀p,I,L1,V. G ⊢ ⬈*[h,V] 𝐒⦃L1⦄ → - ∀Y,T. G ⊢ ⬈*[h,T] 𝐒⦃Y⦄ → - ∀L2. Y = L2.ⓑ{I}V → ⦃G,L1⦄ ⊢ ⬈*[h] L2 → - G ⊢ ⬈*[h,ⓑ{p,I}V.T] 𝐒⦃L2⦄. + ∀p,I,L1,V. G ⊢ ⬈*[h,V] 𝐒❪L1❫ → + ∀Y,T. G ⊢ ⬈*[h,T] 𝐒❪Y❫ → + ∀L2. Y = L2.ⓑ[I]V → ❪G,L1❫ ⊢ ⬈*[h] L2 → + G ⊢ ⬈*[h,ⓑ[p,I]V.T] 𝐒❪L2❫. #h #G #p #I #L1 #V #H @(rsx_ind_lpxs … H) -L1 #L1 #_ #IHL1 #Y #T #H @(rsx_ind_lpxs … H) -Y #Y #HY #IHY #L2 #H #HL12 destruct @@ -95,16 +95,16 @@ qed-. (* Basic_2A1: uses: lsx_bind *) lemma rsx_bind (h) (G): - ∀p,I,L,V. G ⊢ ⬈*[h,V] 𝐒⦃L⦄ → - ∀T. G ⊢ ⬈*[h,T] 𝐒⦃L.ⓑ{I}V⦄ → - G ⊢ ⬈*[h,ⓑ{p,I}V.T] 𝐒⦃L⦄. + ∀p,I,L,V. G ⊢ ⬈*[h,V] 𝐒❪L❫ → + ∀T. G ⊢ ⬈*[h,T] 𝐒❪L.ⓑ[I]V❫ → + G ⊢ ⬈*[h,ⓑ[p,I]V.T] 𝐒❪L❫. /2 width=3 by rsx_bind_lpxs_aux/ qed. (* Basic_2A1: uses: lsx_flat_lpxs *) lemma rsx_flat_lpxs (h) (G): - ∀I,L1,V. G ⊢ ⬈*[h,V] 𝐒⦃L1⦄ → - ∀L2,T. G ⊢ ⬈*[h,T] 𝐒⦃L2⦄ → ⦃G,L1⦄ ⊢ ⬈*[h] L2 → - G ⊢ ⬈*[h,ⓕ{I}V.T] 𝐒⦃L2⦄. + ∀I,L1,V. G ⊢ ⬈*[h,V] 𝐒❪L1❫ → + ∀L2,T. G ⊢ ⬈*[h,T] 𝐒❪L2❫ → ❪G,L1❫ ⊢ ⬈*[h] L2 → + G ⊢ ⬈*[h,ⓕ[I]V.T] 𝐒❪L2❫. #h #G #I #L1 #V #H @(rsx_ind_lpxs … H) -L1 #L1 #HL1 #IHL1 #L2 #T #H @(rsx_ind_lpxs … H) -L2 #L2 #HL2 #IHL2 #HL12 @rsx_intro_lpxs @@ -121,15 +121,15 @@ qed-. (* Basic_2A1: uses: lsx_flat *) lemma rsx_flat (h) (G): - ∀I,L,V. G ⊢ ⬈*[h,V] 𝐒⦃L⦄ → - ∀T. G ⊢ ⬈*[h,T] 𝐒⦃L⦄ → G ⊢ ⬈*[h,ⓕ{I}V.T] 𝐒⦃L⦄. + ∀I,L,V. G ⊢ ⬈*[h,V] 𝐒❪L❫ → + ∀T. G ⊢ ⬈*[h,T] 𝐒❪L❫ → G ⊢ ⬈*[h,ⓕ[I]V.T] 𝐒❪L❫. /2 width=3 by rsx_flat_lpxs/ qed. fact rsx_bind_lpxs_void_aux (h) (G): - ∀p,I,L1,V. G ⊢ ⬈*[h,V] 𝐒⦃L1⦄ → - ∀Y,T. G ⊢ ⬈*[h,T] 𝐒⦃Y⦄ → - ∀L2. Y = L2.ⓧ → ⦃G,L1⦄ ⊢ ⬈*[h] L2 → - G ⊢ ⬈*[h,ⓑ{p,I}V.T] 𝐒⦃L2⦄. + ∀p,I,L1,V. G ⊢ ⬈*[h,V] 𝐒❪L1❫ → + ∀Y,T. G ⊢ ⬈*[h,T] 𝐒❪Y❫ → + ∀L2. Y = L2.ⓧ → ❪G,L1❫ ⊢ ⬈*[h] L2 → + G ⊢ ⬈*[h,ⓑ[p,I]V.T] 𝐒❪L2❫. #h #G #p #I #L1 #V #H @(rsx_ind_lpxs … H) -L1 #L1 #_ #IHL1 #Y #T #H @(rsx_ind_lpxs … H) -Y #Y #HY #IHY #L2 #H #HL12 destruct @@ -146,7 +146,7 @@ elim (rneqx_inv_bind_void … H) -H [ -IHY | -HY -IHL1 -HL12 ] qed-. lemma rsx_bind_void (h) (G): - ∀p,I,L,V. G ⊢ ⬈*[h,V] 𝐒⦃L⦄ → - ∀T. G ⊢ ⬈*[h,T] 𝐒⦃L.ⓧ⦄ → - G ⊢ ⬈*[h,ⓑ{p,I}V.T] 𝐒⦃L⦄. + ∀p,I,L,V. G ⊢ ⬈*[h,V] 𝐒❪L❫ → + ∀T. G ⊢ ⬈*[h,T] 𝐒❪L.ⓧ❫ → + G ⊢ ⬈*[h,ⓑ[p,I]V.T] 𝐒❪L❫. /2 width=3 by rsx_bind_lpxs_void_aux/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_rsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_rsx.ma index 0c31405a8..230a56900 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_rsx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/rsx_rsx.ma @@ -21,8 +21,8 @@ include "basic_2/rt_computation/rsx.ma". (* Basic_2A1: uses: lsx_lleq_trans *) lemma rsx_reqx_trans (h) (G): - ∀L1,T. G ⊢ ⬈*[h,T] 𝐒⦃L1⦄ → - ∀L2. L1 ≛[T] L2 → G ⊢ ⬈*[h,T] 𝐒⦃L2⦄. + ∀L1,T. G ⊢ ⬈*[h,T] 𝐒❪L1❫ → + ∀L2. L1 ≛[T] L2 → G ⊢ ⬈*[h,T] 𝐒❪L2❫. #h #G #L1 #T #H @(rsx_ind … H) -L1 #L1 #_ #IHL1 #L2 #HL12 @rsx_intro #L #HL2 #HnL2 elim (reqx_lpx_trans … HL2 … HL12) -HL2 @@ -31,8 +31,8 @@ qed-. (* Basic_2A1: uses: lsx_lpx_trans *) lemma rsx_lpx_trans (h) (G): - ∀L1,T. G ⊢ ⬈*[h,T] 𝐒⦃L1⦄ → - ∀L2. ⦃G,L1⦄ ⊢ ⬈[h] L2 → G ⊢ ⬈*[h,T] 𝐒⦃L2⦄. + ∀L1,T. G ⊢ ⬈*[h,T] 𝐒❪L1❫ → + ∀L2. ❪G,L1❫ ⊢ ⬈[h] L2 → G ⊢ ⬈*[h,T] 𝐒❪L2❫. #h #G #L1 #T #H @(rsx_ind … H) -L1 #L1 #HL1 #IHL1 #L2 #HL12 elim (reqx_dec L1 L2 T) /3 width=4 by rsx_reqx_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_conversion/cpc.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_conversion/cpc.ma index df250a17b..fcc70428c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_conversion/cpc.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_conversion/cpc.ma @@ -18,7 +18,7 @@ include "basic_2/rt_transition/cpm.ma". (* CONTEXT-SENSITIVE PARALLEL R-CONVERSION FOR TERMS ************************) definition cpc: sh → relation4 genv lenv term term ≝ - λh,G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ➡[h] T2 ∨ ⦃G,L⦄ ⊢ T2 ➡[h] T1. + λh,G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡[h] T2 ∨ ❪G,L❫ ⊢ T2 ➡[h] T1. interpretation "context-sensitive parallel r-conversion (term)" @@ -35,7 +35,7 @@ qed-. (* Basic forward lemmas *****************************************************) -lemma cpc_fwd_cpr: ∀h,G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬌[h] T2 → - ∃∃T. ⦃G,L⦄ ⊢ T1 ➡[h] T & ⦃G,L⦄ ⊢ T2 ➡[h] T. +lemma cpc_fwd_cpr: ∀h,G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬌[h] T2 → + ∃∃T. ❪G,L❫ ⊢ T1 ➡[h] T & ❪G,L❫ ⊢ T2 ➡[h] T. #h #G #L #T1 #T2 * /2 width=3 by ex2_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_conversion/cpc_cpc.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_conversion/cpc_cpc.ma index d3151122a..49528eac8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_conversion/cpc_cpc.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_conversion/cpc_cpc.ma @@ -18,6 +18,6 @@ include "basic_2/rt_conversion/cpc.ma". (* Main properties **********************************************************) -theorem cpc_conf: ∀h,G,L,T0,T1,T2. ⦃G,L⦄ ⊢ T0 ⬌[h] T1 → ⦃G,L⦄ ⊢ T0 ⬌[h] T2 → - ∃∃T. ⦃G,L⦄ ⊢ T1 ⬌[h] T & ⦃G,L⦄ ⊢ T2 ⬌[h] T. +theorem cpc_conf: ∀h,G,L,T0,T1,T2. ❪G,L❫ ⊢ T0 ⬌[h] T1 → ❪G,L❫ ⊢ T0 ⬌[h] T2 → + ∃∃T. ❪G,L❫ ⊢ T1 ⬌[h] T & ❪G,L❫ ⊢ T2 ⬌[h] T. /3 width=3 by cpc_sym, ex2_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs.ma index 4daecd3eb..0a9de4f23 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs.ma @@ -29,16 +29,16 @@ interpretation "context-sensitive parallel r-equivalence (term)" (* Basic_2A1: was: cpcs_ind_dx *) lemma cpcs_ind_sn (h) (G) (L) (T2): ∀Q:predicate term. Q T2 → - (∀T1,T. ⦃G,L⦄ ⊢ T1 ⬌[h] T → ⦃G,L⦄ ⊢ T ⬌*[h] T2 → Q T → Q T1) → - ∀T1. ⦃G,L⦄ ⊢ T1 ⬌*[h] T2 → Q T1. + (∀T1,T. ❪G,L❫ ⊢ T1 ⬌[h] T → ❪G,L❫ ⊢ T ⬌*[h] T2 → Q T → Q T1) → + ∀T1. ❪G,L❫ ⊢ T1 ⬌*[h] T2 → Q T1. normalize /3 width=6 by TC_star_ind_dx/ qed-. (* Basic_2A1: was: cpcs_ind *) lemma cpcs_ind_dx (h) (G) (L) (T1): ∀Q:predicate term. Q T1 → - (∀T,T2. ⦃G,L⦄ ⊢ T1 ⬌*[h] T → ⦃G,L⦄ ⊢ T ⬌[h] T2 → Q T → Q T2) → - ∀T2. ⦃G,L⦄ ⊢ T1 ⬌*[h] T2 → Q T2. + (∀T,T2. ❪G,L❫ ⊢ T1 ⬌*[h] T → ❪G,L❫ ⊢ T ⬌[h] T2 → Q T → Q T2) → + ∀T2. ❪G,L❫ ⊢ T1 ⬌*[h] T2 → Q T2. normalize /3 width=6 by TC_star_ind/ qed-. @@ -54,50 +54,50 @@ lemma cpcs_sym (h) (G) (L): symmetric … (cpcs h G L). /2 width=1 by cpc_sym/ qed-. -lemma cpc_cpcs (h) (G) (L): ∀T1,T2. ⦃G,L⦄ ⊢ T1 ⬌[h] T2 → ⦃G,L⦄ ⊢ T1 ⬌*[h] T2. +lemma cpc_cpcs (h) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T1 ⬌[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2. /2 width=1 by inj/ qed. (* Basic_2A1: was: cpcs_strap2 *) -lemma cpcs_step_sn (h) (G) (L): ∀T1,T. ⦃G,L⦄ ⊢ T1 ⬌[h] T → - ∀T2. ⦃G,L⦄ ⊢ T ⬌*[h] T2 → ⦃G,L⦄ ⊢ T1 ⬌*[h] T2. +lemma cpcs_step_sn (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ⬌[h] T → + ∀T2. ❪G,L❫ ⊢ T ⬌*[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2. normalize /2 width=3 by TC_strap/ qed-. (* Basic_2A1: was: cpcs_strap1 *) -lemma cpcs_step_dx (h) (G) (L): ∀T1,T. ⦃G,L⦄ ⊢ T1 ⬌*[h] T → - ∀T2. ⦃G,L⦄ ⊢ T ⬌[h] T2 → ⦃G,L⦄ ⊢ T1 ⬌*[h] T2. +lemma cpcs_step_dx (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ⬌*[h] T → + ∀T2. ❪G,L❫ ⊢ T ⬌[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2. normalize /2 width=3 by step/ qed-. (* Basic_1: was: pc3_pr2_r *) -lemma cpr_cpcs_dx (h) (G) (L): ∀T1,T2. ⦃G,L⦄ ⊢ T1 ➡[h] T2 → ⦃G,L⦄ ⊢ T1 ⬌*[h] T2. +lemma cpr_cpcs_dx (h) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2. /3 width=1 by cpc_cpcs, or_introl/ qed. (* Basic_1: was: pc3_pr2_x *) -lemma cpr_cpcs_sn (h) (G) (L): ∀T1,T2. ⦃G,L⦄ ⊢ T2 ➡[h] T1 → ⦃G,L⦄ ⊢ T1 ⬌*[h] T2. +lemma cpr_cpcs_sn (h) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T2 ➡[h] T1 → ❪G,L❫ ⊢ T1 ⬌*[h] T2. /3 width=1 by cpc_cpcs, or_intror/ qed. (* Basic_1: was: pc3_pr2_u *) (* Basic_2A1: was: cpcs_cpr_strap2 *) -lemma cpcs_cpr_step_sn (h) (G) (L): ∀T1,T. ⦃G,L⦄ ⊢ T1 ➡[h] T → ∀T2. ⦃G,L⦄ ⊢ T ⬌*[h] T2 → ⦃G,L⦄ ⊢ T1 ⬌*[h] T2. +lemma cpcs_cpr_step_sn (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ➡[h] T → ∀T2. ❪G,L❫ ⊢ T ⬌*[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2. /3 width=3 by cpcs_step_sn, or_introl/ qed-. (* Basic_2A1: was: cpcs_cpr_strap1 *) -lemma cpcs_cpr_step_dx (h) (G) (L): ∀T1,T. ⦃G,L⦄ ⊢ T1 ⬌*[h] T → - ∀T2. ⦃G,L⦄ ⊢ T ➡[h] T2 → ⦃G,L⦄ ⊢ T1 ⬌*[h] T2. +lemma cpcs_cpr_step_dx (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ⬌*[h] T → + ∀T2. ❪G,L❫ ⊢ T ➡[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2. /3 width=3 by cpcs_step_dx, or_introl/ qed-. -lemma cpcs_cpr_div (h) (G) (L): ∀T1,T. ⦃G,L⦄ ⊢ T1 ⬌*[h] T → - ∀T2. ⦃G,L⦄ ⊢ T2 ➡[h] T → ⦃G,L⦄ ⊢ T1 ⬌*[h] T2. +lemma cpcs_cpr_div (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ⬌*[h] T → + ∀T2. ❪G,L❫ ⊢ T2 ➡[h] T → ❪G,L❫ ⊢ T1 ⬌*[h] T2. /3 width=3 by cpcs_step_dx, or_intror/ qed-. -lemma cpr_div (h) (G) (L): ∀T1,T. ⦃G,L⦄ ⊢ T1 ➡[h] T → - ∀T2. ⦃G,L⦄ ⊢ T2 ➡[h] T → ⦃G,L⦄ ⊢ T1 ⬌*[h] T2. +lemma cpr_div (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ➡[h] T → + ∀T2. ❪G,L❫ ⊢ T2 ➡[h] T → ❪G,L❫ ⊢ T1 ⬌*[h] T2. /3 width=3 by cpr_cpcs_dx, cpcs_step_dx, or_intror/ qed-. (* Basic_1: was: pc3_pr2_u2 *) -lemma cpcs_cpr_conf (h) (G) (L): ∀T1,T. ⦃G,L⦄ ⊢ T ➡[h] T1 → - ∀T2. ⦃G,L⦄ ⊢ T ⬌*[h] T2 → ⦃G,L⦄ ⊢ T1 ⬌*[h] T2. +lemma cpcs_cpr_conf (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T ➡[h] T1 → + ∀T2. ❪G,L❫ ⊢ T ⬌*[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2. /3 width=3 by cpcs_step_sn, or_intror/ qed-. (* Basic_1: removed theorems 9: diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_aaa.ma index 2c1be91f4..f387ce599 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_aaa.ma @@ -20,8 +20,8 @@ include "basic_2/rt_equivalence/cpcs_cprs.ma". (* Main inversion lemmas with atomic arity assignment on terms **************) (* Note: lemma 1500 *) -theorem cpcs_aaa_mono (h) (G) (L): ∀T1,T2. ⦃G,L⦄ ⊢ T1 ⬌*[h] T2 → - ∀A1. ⦃G,L⦄ ⊢ T1 ⁝ A1 → ∀A2. ⦃G,L⦄ ⊢ T2 ⁝ A2 → +theorem cpcs_aaa_mono (h) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T1 ⬌*[h] T2 → + ∀A1. ❪G,L❫ ⊢ T1 ⁝ A1 → ∀A2. ❪G,L❫ ⊢ T2 ⁝ A2 → A1 = A2. #h #G #L #T1 #T2 #HT12 #A1 #HA1 #A2 #HA2 elim (cpcs_inv_cprs … HT12) -HT12 #T #HT1 #HT2 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_cpcs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_cpcs.ma index 85cd8c732..692bd0b61 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_cpcs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_cpcs.ma @@ -31,21 +31,21 @@ theorem cpcs_canc_dx (h) (G) (L): right_cancellable … (cpcs h G L). (* Advanced properties ******************************************************) -lemma cpcs_bind1 (h) (G) (L): ∀V1,V2. ⦃G,L⦄ ⊢ V1 ⬌*[h] V2 → - ∀I,T1,T2. ⦃G,L.ⓑ{I}V1⦄ ⊢ T1 ⬌*[h] T2 → - ∀p. ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T1 ⬌*[h] ⓑ{p,I}V2.T2. +lemma cpcs_bind1 (h) (G) (L): ∀V1,V2. ❪G,L❫ ⊢ V1 ⬌*[h] V2 → + ∀I,T1,T2. ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬌*[h] T2 → + ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬌*[h] ⓑ[p,I]V2.T2. /3 width=3 by cpcs_trans, cpcs_bind_sn, cpcs_bind_dx/ qed. -lemma cpcs_bind2 (h) (G) (L): ∀V1,V2. ⦃G,L⦄ ⊢ V1 ⬌*[h] V2 → - ∀I,T1,T2. ⦃G,L.ⓑ{I}V2⦄ ⊢ T1 ⬌*[h] T2 → - ∀p. ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T1 ⬌*[h] ⓑ{p,I}V2.T2. +lemma cpcs_bind2 (h) (G) (L): ∀V1,V2. ❪G,L❫ ⊢ V1 ⬌*[h] V2 → + ∀I,T1,T2. ❪G,L.ⓑ[I]V2❫ ⊢ T1 ⬌*[h] T2 → + ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬌*[h] ⓑ[p,I]V2.T2. /3 width=3 by cpcs_trans, cpcs_bind_sn, cpcs_bind_dx/ qed. (* Advanced properties with r-transition for full local environments ********) (* Basic_1: was: pc3_wcpr0 *) -lemma lpr_cpcs_conf (h) (G): ∀L1,L2. ⦃G,L1⦄ ⊢ ➡[h] L2 → - ∀T1,T2. ⦃G,L1⦄ ⊢ T1 ⬌*[h] T2 → ⦃G,L2⦄ ⊢ T1 ⬌*[h] T2. +lemma lpr_cpcs_conf (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h] L2 → + ∀T1,T2. ❪G,L1❫ ⊢ T1 ⬌*[h] T2 → ❪G,L2❫ ⊢ T1 ⬌*[h] T2. #h #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/rt_equivalence/cpcs_cprs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_cprs.ma index bd40f01c3..90fd02313 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_cprs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_cprs.ma @@ -20,8 +20,8 @@ include "basic_2/rt_equivalence/cpcs.ma". (* Inversion lemmas with context sensitive r-computation on terms ***********) -lemma cpcs_inv_cprs (h) (G) (L): ∀T1,T2. ⦃G,L⦄ ⊢ T1 ⬌*[h] T2 → - ∃∃T. ⦃G,L⦄ ⊢ T1 ➡*[h] T & ⦃G,L⦄ ⊢ T2 ➡*[h] T. +lemma cpcs_inv_cprs (h) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T1 ⬌*[h] T2 → + ∃∃T. ❪G,L❫ ⊢ T1 ➡*[h] T & ❪G,L❫ ⊢ T2 ➡*[h] T. #h #G #L #T1 #T2 #H @(cpcs_ind_dx … H) -T2 [ /3 width=3 by ex2_intro/ | #T #T2 #_ #HT2 * #T0 #HT10 elim HT2 -HT2 #HT2 #HT0 @@ -35,7 +35,7 @@ qed-. (* Basic_1: was: pc3_gen_sort *) (* Basic_2A1: was: cpcs_inv_sort *) -lemma cpcs_inv_sort_bi (h) (G) (L): ∀s1,s2. ⦃G,L⦄ ⊢ ⋆s1 ⬌*[h] ⋆s2 → s1 = s2. +lemma cpcs_inv_sort_bi (h) (G) (L): ∀s1,s2. ❪G,L❫ ⊢ ⋆s1 ⬌*[h] ⋆s2 → s1 = s2. #h #G #L #s1 #s2 #H elim (cpcs_inv_cprs … H) -H #T #H1 >(cprs_inv_sort1 … H1) -T #H2 lapply (cprs_inv_sort1 … H2) -L #H destruct // @@ -43,8 +43,8 @@ qed-. (* Basic_2A1: was: cpcs_inv_abst1 *) lemma cpcs_inv_abst_sn (h) (G) (L): - ∀p,W1,T1,X. ⦃G,L⦄ ⊢ ⓛ{p}W1.T1 ⬌*[h] X → - ∃∃W2,T2. ⦃G,L⦄ ⊢ X ➡*[h] ⓛ{p}W2.T2 & ⦃G,L⦄ ⊢ ⓛ{p}W1.T1 ➡*[h] ⓛ{p}W2.T2. + ∀p,W1,T1,X. ❪G,L❫ ⊢ ⓛ[p]W1.T1 ⬌*[h] X → + ∃∃W2,T2. ❪G,L❫ ⊢ X ➡*[h] ⓛ[p]W2.T2 & ❪G,L❫ ⊢ ⓛ[p]W1.T1 ➡*[h] ⓛ[p]W2.T2. #h #G #L #p #W1 #T1 #T #H elim (cpcs_inv_cprs … H) -H #X #H1 #H2 elim (cpms_inv_abst_sn … H1) -H1 #W2 #T2 #HW12 #HT12 #H destruct @@ -53,13 +53,13 @@ qed-. (* Basic_2A1: was: cpcs_inv_abst2 *) lemma cpcs_inv_abst_dx (h) (G) (L): - ∀p,W1,T1,X. ⦃G,L⦄ ⊢ X ⬌*[h] ⓛ{p}W1.T1 → - ∃∃W2,T2. ⦃G,L⦄ ⊢ X ➡*[h] ⓛ{p}W2.T2 & ⦃G,L⦄ ⊢ ⓛ{p}W1.T1 ➡*[h] ⓛ{p}W2.T2. + ∀p,W1,T1,X. ❪G,L❫ ⊢ X ⬌*[h] ⓛ[p]W1.T1 → + ∃∃W2,T2. ❪G,L❫ ⊢ X ➡*[h] ⓛ[p]W2.T2 & ❪G,L❫ ⊢ ⓛ[p]W1.T1 ➡*[h] ⓛ[p]W2.T2. /3 width=1 by cpcs_inv_abst_sn, cpcs_sym/ qed-. (* Basic_1: was: pc3_gen_sort_abst *) lemma cpcs_inv_sort_abst (h) (G) (L): - ∀p,W,T,s. ⦃G,L⦄ ⊢ ⋆s ⬌*[h] ⓛ{p}W.T → ⊥. + ∀p,W,T,s. ❪G,L❫ ⊢ ⋆s ⬌*[h] ⓛ[p]W.T → ⊥. #h #G #L #p #W #T #s #H elim (cpcs_inv_cprs … H) -H #X #H1 >(cprs_inv_sort1 … H1) -X #H2 @@ -69,97 +69,97 @@ qed-. (* Properties with context sensitive r-computation on terms *****************) (* Basic_1: was: pc3_pr3_r *) -lemma cpcs_cprs_dx (h) (G) (L): ∀T1,T2. ⦃G,L⦄ ⊢ T1 ➡*[h] T2 → ⦃G,L⦄ ⊢ T1 ⬌*[h] T2. +lemma cpcs_cprs_dx (h) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T1 ➡*[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2. #h #G #L #T1 #T2 #H @(cprs_ind_dx … H) -T2 /3 width=3 by cpcs_cpr_step_dx, cpcs_step_dx, cpc_cpcs/ qed. (* Basic_1: was: pc3_pr3_x *) -lemma cpcs_cprs_sn (h) (G) (L): ∀T1,T2. ⦃G,L⦄ ⊢ T2 ➡*[h] T1 → ⦃G,L⦄ ⊢ T1 ⬌*[h] T2. +lemma cpcs_cprs_sn (h) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T2 ➡*[h] T1 → ❪G,L❫ ⊢ T1 ⬌*[h] T2. #h #G #L #T1 #T2 #H @(cprs_ind_sn … H) -T2 /3 width=3 by cpcs_cpr_div, cpcs_step_sn, cpcs_cprs_dx/ qed. (* Basic_2A1: was: cpcs_cprs_strap1 *) -lemma cpcs_cprs_step_dx (h) (G) (L): ∀T1,T. ⦃G,L⦄ ⊢ T1 ⬌*[h] T → - ∀T2. ⦃G,L⦄ ⊢ T ➡*[h] T2 → ⦃G,L⦄ ⊢ T1 ⬌*[h] T2. +lemma cpcs_cprs_step_dx (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ⬌*[h] T → + ∀T2. ❪G,L❫ ⊢ T ➡*[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2. #h #G #L #T1 #T #HT1 #T2 #H @(cprs_ind_dx … H) -T2 /2 width=3 by cpcs_cpr_step_dx/ qed-. (* Basic_2A1: was: cpcs_cprs_strap2 *) -lemma cpcs_cprs_step_sn (h) (G) (L): ∀T1,T. ⦃G,L⦄ ⊢ T1 ➡*[h] T → - ∀T2. ⦃G,L⦄ ⊢ T ⬌*[h] T2 → ⦃G,L⦄ ⊢ T1 ⬌*[h] T2. +lemma cpcs_cprs_step_sn (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ➡*[h] T → + ∀T2. ❪G,L❫ ⊢ T ⬌*[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2. #h #G #L #T1 #T #H #T2 #HT2 @(cprs_ind_sn … H) -T1 /2 width=3 by cpcs_cpr_step_sn/ qed-. -lemma cpcs_cprs_div (h) (G) (L): ∀T1,T. ⦃G,L⦄ ⊢ T1 ⬌*[h] T → - ∀T2. ⦃G,L⦄ ⊢ T2 ➡*[h] T → ⦃G,L⦄ ⊢ T1 ⬌*[h] T2. +lemma cpcs_cprs_div (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ⬌*[h] T → + ∀T2. ❪G,L❫ ⊢ T2 ➡*[h] T → ❪G,L❫ ⊢ T1 ⬌*[h] T2. #h #G #L #T1 #T #HT1 #T2 #H @(cprs_ind_sn … H) -T2 /2 width=3 by cpcs_cpr_div/ qed-. (* Basic_1: was: pc3_pr3_conf *) -lemma cpcs_cprs_conf (h) (G) (L): ∀T1,T. ⦃G,L⦄ ⊢ T ➡*[h] T1 → - ∀T2. ⦃G,L⦄ ⊢ T ⬌*[h] T2 → ⦃G,L⦄ ⊢ T1 ⬌*[h] T2. +lemma cpcs_cprs_conf (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T ➡*[h] T1 → + ∀T2. ❪G,L❫ ⊢ T ⬌*[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2. #h #G #L #T1 #T #H #T2 #HT2 @(cprs_ind_dx … H) -T1 /2 width=3 by cpcs_cpr_conf/ qed-. (* Basic_1: was: pc3_pr3_t *) (* Basic_1: note: pc3_pr3_t should be renamed *) -lemma cprs_div (h) (G) (L): ∀T1,T. ⦃G,L⦄ ⊢ T1 ➡*[h] T → - ∀T2. ⦃G,L⦄ ⊢ T2 ➡*[h] T → ⦃G,L⦄ ⊢ T1 ⬌*[h] T2. +lemma cprs_div (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ➡*[h] T → + ∀T2. ❪G,L❫ ⊢ T2 ➡*[h] T → ❪G,L❫ ⊢ T1 ⬌*[h] T2. #h #G #L #T1 #T #HT1 #T2 #H @(cprs_ind_sn … H) -T2 /2 width=3 by cpcs_cpr_div, cpcs_cprs_dx/ qed. -lemma cprs_cpr_div (h) (G) (L): ∀T1,T. ⦃G,L⦄ ⊢ T1 ➡*[h] T → - ∀T2. ⦃G,L⦄ ⊢ T2 ➡[h] T → ⦃G,L⦄ ⊢ T1 ⬌*[h] T2. +lemma cprs_cpr_div (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ➡*[h] T → + ∀T2. ❪G,L❫ ⊢ T2 ➡[h] T → ❪G,L❫ ⊢ T1 ⬌*[h] T2. /3 width=5 by cpm_cpms, cprs_div/ qed-. -lemma cpr_cprs_div (h) (G) (L): ∀T1,T. ⦃G,L⦄ ⊢ T1 ➡[h] T → - ∀T2. ⦃G,L⦄ ⊢ T2 ➡*[h] T → ⦃G,L⦄ ⊢ T1 ⬌*[h] T2. +lemma cpr_cprs_div (h) (G) (L): ∀T1,T. ❪G,L❫ ⊢ T1 ➡[h] T → + ∀T2. ❪G,L❫ ⊢ T2 ➡*[h] T → ❪G,L❫ ⊢ T1 ⬌*[h] T2. /3 width=3 by cpm_cpms, cprs_div/ qed-. -lemma cpr_cprs_conf_cpcs (h) (G) (L): ∀T,T1. ⦃G,L⦄ ⊢ T ➡*[h] T1 → - ∀T2. ⦃G,L⦄ ⊢ T ➡[h] T2 → ⦃G,L⦄ ⊢ T1 ⬌*[h] T2. +lemma cpr_cprs_conf_cpcs (h) (G) (L): ∀T,T1. ❪G,L❫ ⊢ T ➡*[h] T1 → + ∀T2. ❪G,L❫ ⊢ T ➡[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2. #h #G #L #T #T1 #HT1 #T2 #HT2 elim (cprs_strip … HT1 … HT2) -HT1 -HT2 /2 width=3 by cpr_cprs_div/ qed-. -lemma cprs_cpr_conf_cpcs (h) (G) (L): ∀T,T1. ⦃G,L⦄ ⊢ T ➡*[h] T1 → - ∀T2. ⦃G,L⦄ ⊢ T ➡[h] T2 → ⦃G,L⦄ ⊢ T2 ⬌*[h] T1. +lemma cprs_cpr_conf_cpcs (h) (G) (L): ∀T,T1. ❪G,L❫ ⊢ T ➡*[h] T1 → + ∀T2. ❪G,L❫ ⊢ T ➡[h] T2 → ❪G,L❫ ⊢ T2 ⬌*[h] T1. #h #G #L #T #T1 #HT1 #T2 #HT2 elim (cprs_strip … HT1 … HT2) -HT1 -HT2 /2 width=3 by cprs_cpr_div/ qed-. -lemma cprs_conf_cpcs (h) (G) (L): ∀T,T1. ⦃G,L⦄ ⊢ T ➡*[h] T1 → - ∀T2. ⦃G,L⦄ ⊢ T ➡*[h] T2 → ⦃G,L⦄ ⊢ T1 ⬌*[h] T2. +lemma cprs_conf_cpcs (h) (G) (L): ∀T,T1. ❪G,L❫ ⊢ T ➡*[h] T1 → + ∀T2. ❪G,L❫ ⊢ T ➡*[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h] T2. #h #G #L #T #T1 #HT1 #T2 #HT2 elim (cprs_conf … HT1 … HT2) -HT1 -HT2 /2 width=3 by cprs_div/ qed-. (* Basic_1: was only: pc3_thin_dx *) -lemma cpcs_flat (h) (G) (L): ∀V1,V2. ⦃G,L⦄ ⊢ V1 ⬌*[h] V2 → - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ⬌*[h] T2 → - ∀I. ⦃G,L⦄ ⊢ ⓕ{I}V1.T1 ⬌*[h] ⓕ{I}V2.T2. +lemma cpcs_flat (h) (G) (L): ∀V1,V2. ❪G,L❫ ⊢ V1 ⬌*[h] V2 → + ∀T1,T2. ❪G,L❫ ⊢ T1 ⬌*[h] T2 → + ∀I. ❪G,L❫ ⊢ ⓕ[I]V1.T1 ⬌*[h] ⓕ[I]V2.T2. #h #G #L #V1 #V2 #HV12 #T1 #T2 #HT12 elim (cpcs_inv_cprs … HV12) -HV12 elim (cpcs_inv_cprs … HT12) -HT12 /3 width=5 by cprs_flat, cprs_div/ qed. -lemma cpcs_flat_dx_cpr_rev (h) (G) (L): ∀V1,V2. ⦃G,L⦄ ⊢ V2 ➡[h] V1 → - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ⬌*[h] T2 → - ∀I. ⦃G,L⦄ ⊢ ⓕ{I}V1.T1 ⬌*[h] ⓕ{I}V2.T2. +lemma cpcs_flat_dx_cpr_rev (h) (G) (L): ∀V1,V2. ❪G,L❫ ⊢ V2 ➡[h] V1 → + ∀T1,T2. ❪G,L❫ ⊢ T1 ⬌*[h] T2 → + ∀I. ❪G,L❫ ⊢ ⓕ[I]V1.T1 ⬌*[h] ⓕ[I]V2.T2. /3 width=1 by cpr_cpcs_sn, cpcs_flat/ qed. -lemma cpcs_bind_dx (h) (G) (L): ∀I,V,T1,T2. ⦃G,L.ⓑ{I}V⦄ ⊢ T1 ⬌*[h] T2 → - ∀p. ⦃G,L⦄ ⊢ ⓑ{p,I}V.T1 ⬌*[h] ⓑ{p,I}V.T2. +lemma cpcs_bind_dx (h) (G) (L): ∀I,V,T1,T2. ❪G,L.ⓑ[I]V❫ ⊢ T1 ⬌*[h] T2 → + ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V.T1 ⬌*[h] ⓑ[p,I]V.T2. #h #G #L #I #V #T1 #T2 #HT12 elim (cpcs_inv_cprs … HT12) -HT12 /3 width=5 by cprs_div, cpms_bind/ qed. -lemma cpcs_bind_sn (h) (G) (L): ∀I,V1,V2,T. ⦃G,L⦄ ⊢ V1 ⬌*[h] V2 → - ∀p. ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T ⬌*[h] ⓑ{p,I}V2.T. +lemma cpcs_bind_sn (h) (G) (L): ∀I,V1,V2,T. ❪G,L❫ ⊢ V1 ⬌*[h] V2 → + ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T ⬌*[h] ⓑ[p,I]V2.T. #h #G #L #I #V1 #V2 #T #HV12 elim (cpcs_inv_cprs … HV12) -HV12 /3 width=5 by cprs_div, cpms_bind/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_csx.ma index 76203c518..849ebebf0 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_csx.ma @@ -22,8 +22,8 @@ include "basic_2/rt_equivalence/cpcs_cprs.ma". (* Basic_1: was: cpcs_dec *) lemma csx_cpcs_dec (h) (G) (L): - ∀T1. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T1⦄ → ∀T2. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T2⦄ → - Decidable … (⦃G,L⦄ ⊢ T1 ⬌*[h] T2). + ∀T1. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T1❫ → ∀T2. ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T2❫ → + Decidable … (❪G,L❫ ⊢ T1 ⬌*[h] T2). #h #G #L #T1 #HT1 #T2 #HT2 elim (cprre_total_csx … HT1) -HT1 #U1 #HTU1 elim (cprre_total_csx … HT2) -HT2 #U2 #HTU2 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_lprs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_lprs.ma index 6da444ce1..a47534026 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_lprs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpcs_lprs.ma @@ -19,20 +19,20 @@ include "basic_2/rt_equivalence/cpcs_cprs.ma". (* Properties with parallel r-computation for full local environments *******) -lemma lpr_cpcs_trans (h) (G): ∀L1,L2. ⦃G,L1⦄ ⊢ ➡[h] L2 → - ∀T1,T2. ⦃G,L2⦄ ⊢ T1 ⬌*[h] T2 → ⦃G,L1⦄ ⊢ T1 ⬌*[h] T2. +lemma lpr_cpcs_trans (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h] L2 → + ∀T1,T2. ❪G,L2❫ ⊢ T1 ⬌*[h] T2 → ❪G,L1❫ ⊢ T1 ⬌*[h] T2. #h #G #L1 #L2 #HL12 #T1 #T2 #H elim (cpcs_inv_cprs … H) -H /4 width=5 by cprs_div, lpr_cpms_trans/ qed-. -lemma lprs_cpcs_trans (h) (G): ∀L1,L2. ⦃G,L1⦄ ⊢ ➡*[h] L2 → - ∀T1,T2. ⦃G,L2⦄ ⊢ T1 ⬌*[h] T2 → ⦃G,L1⦄ ⊢ T1 ⬌*[h] T2. +lemma lprs_cpcs_trans (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h] L2 → + ∀T1,T2. ❪G,L2❫ ⊢ T1 ⬌*[h] T2 → ❪G,L1❫ ⊢ T1 ⬌*[h] T2. #h #G #L1 #L2 #HL12 #T1 #T2 #H elim (cpcs_inv_cprs … H) -H /4 width=5 by cprs_div, lprs_cpms_trans/ qed-. -lemma lprs_cprs_conf (h) (G): ∀L1,L2. ⦃G,L1⦄ ⊢ ➡*[h] L2 → - ∀T1,T2. ⦃G,L1⦄ ⊢ T1 ➡*[h] T2 → ⦃G,L2⦄ ⊢ T1 ⬌*[h] T2. +lemma lprs_cprs_conf (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡*[h] L2 → + ∀T1,T2. ❪G,L1❫ ⊢ T1 ➡*[h] T2 → ❪G,L2❫ ⊢ T1 ⬌*[h] T2. #h #G #L1 #L2 #HL12 #T1 #T2 #HT12 elim (lprs_cprs_conf_dx … HT12 … HL12) -L1 /2 width=3 by cprs_div/ qed-. @@ -40,23 +40,23 @@ qed-. (* Basic_1: was: pc3_wcpr0_t *) (* Basic_1: note: pc3_wcpr0_t should be renamed *) (* Note: alternative proof /3 width=5 by lprs_cprs_conf, lpr_lprs/ *) -lemma lpr_cprs_conf (h) (G): ∀L1,L2. ⦃G,L1⦄ ⊢ ➡[h] L2 → - ∀T1,T2. ⦃G,L1⦄ ⊢ T1 ➡*[h] T2 → ⦃G,L2⦄ ⊢ T1 ⬌*[h] T2. +lemma lpr_cprs_conf (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h] L2 → + ∀T1,T2. ❪G,L1❫ ⊢ T1 ➡*[h] T2 → ❪G,L2❫ ⊢ T1 ⬌*[h] T2. #h #G #L1 #L2 #HL12 #T1 #T2 #HT12 elim (cprs_lpr_conf_dx … HT12 … HL12) -L1 /2 width=3 by cprs_div/ qed-. (* Basic_1: was only: pc3_pr0_pr2_t *) (* Basic_1: note: pc3_pr0_pr2_t should be renamed *) -lemma lpr_cpr_conf (h) (G): ∀L1,L2. ⦃G,L1⦄ ⊢ ➡[h] L2 → - ∀T1,T2. ⦃G,L1⦄ ⊢ T1 ➡[h] T2 → ⦃G,L2⦄ ⊢ T1 ⬌*[h] T2. +lemma lpr_cpr_conf (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h] L2 → + ∀T1,T2. ❪G,L1❫ ⊢ T1 ➡[h] T2 → ❪G,L2❫ ⊢ T1 ⬌*[h] T2. /3 width=5 by lpr_cprs_conf, cpm_cpms/ qed-. (* Advanced inversion lemmas ************************************************) (* Note: there must be a proof suitable for lfpr *) -lemma cpcs_inv_abst_sn (h) (G) (L): ∀p1,p2,W1,W2,T1,T2. ⦃G,L⦄ ⊢ ⓛ{p1}W1.T1 ⬌*[h] ⓛ{p2}W2.T2 → - ∧∧ ⦃G,L⦄ ⊢ W1 ⬌*[h] W2 & ⦃G,L.ⓛW1⦄ ⊢ T1 ⬌*[h] T2 & p1 = p2. +lemma cpcs_inv_abst_sn (h) (G) (L): ∀p1,p2,W1,W2,T1,T2. ❪G,L❫ ⊢ ⓛ[p1]W1.T1 ⬌*[h] ⓛ[p2]W2.T2 → + ∧∧ ❪G,L❫ ⊢ W1 ⬌*[h] W2 & ❪G,L.ⓛW1❫ ⊢ T1 ⬌*[h] T2 & p1 = p2. #h #G #L #p1 #p2 #W1 #W2 #T1 #T2 #H elim (cpcs_inv_cprs … H) -H #T #H1 #H2 elim (cpms_inv_abst_sn … H1) -H1 #W0 #T0 #HW10 #HT10 #H destruct @@ -66,8 +66,8 @@ lapply (lprs_cpcs_trans … (L.ⓛW1) … HT2) /2 width=1 by lprs_pair/ -HT2 #HT /4 width=3 by and3_intro, cprs_div, cpcs_cprs_div, cpcs_sym/ qed-. -lemma cpcs_inv_abst_dx (h) (G) (L): ∀p1,p2,W1,W2,T1,T2. ⦃G,L⦄ ⊢ ⓛ{p1}W1.T1 ⬌*[h] ⓛ{p2}W2.T2 → - ∧∧ ⦃G,L⦄ ⊢ W1 ⬌*[h] W2 & ⦃G,L.ⓛW2⦄ ⊢ T1 ⬌*[h] T2 & p1 = p2. +lemma cpcs_inv_abst_dx (h) (G) (L): ∀p1,p2,W1,W2,T1,T2. ❪G,L❫ ⊢ ⓛ[p1]W1.T1 ⬌*[h] ⓛ[p2]W2.T2 → + ∧∧ ❪G,L❫ ⊢ W1 ⬌*[h] W2 & ❪G,L.ⓛW2❫ ⊢ T1 ⬌*[h] T2 & p1 = p2. #h #G #L #p1 #p2 #W1 #W2 #T1 #T2 #HT12 lapply (cpcs_sym … HT12) -HT12 #HT12 elim (cpcs_inv_abst_sn … HT12) -HT12 /3 width=1 by cpcs_sym, and3_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes.ma index de444a0d7..07e5285b5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes.ma @@ -20,7 +20,7 @@ include "basic_2/rt_computation/cpms.ma". (* Basic_2A1: uses: scpes *) definition cpes (h) (n1) (n2): relation4 genv lenv term term ≝ λG,L,T1,T2. - ∃∃T. ⦃G,L⦄ ⊢ T1 ➡*[n1,h] T & ⦃G,L⦄ ⊢ T2 ➡*[n2,h] T. + ∃∃T. ❪G,L❫ ⊢ T1 ➡*[n1,h] T & ❪G,L❫ ⊢ T2 ➡*[n2,h] T. interpretation "t-bound context-sensitive parallel rt-equivalence (term)" 'PConvStar h n1 n2 G L T1 T2 = (cpes h n1 n2 G L T1 T2). @@ -29,8 +29,8 @@ interpretation "t-bound context-sensitive parallel rt-equivalence (term)" (* Basic_2A1: uses: scpds_div *) lemma cpms_div (h) (n1) (n2): - ∀G,L,T1,T. ⦃G,L⦄ ⊢ T1 ➡*[n1,h] T → - ∀T2. ⦃G,L⦄ ⊢ T2 ➡*[n2,h] T → ⦃G,L⦄ ⊢ T1 ⬌*[h,n1,n2] T2. + ∀G,L,T1,T. ❪G,L❫ ⊢ T1 ➡*[n1,h] T → + ∀T2. ❪G,L❫ ⊢ T2 ➡*[n2,h] T → ❪G,L❫ ⊢ T1 ⬌*[h,n1,n2] T2. /2 width=3 by ex2_intro/ qed. lemma cpes_refl (h): ∀G,L. reflexive … (cpes h 0 0 G L). @@ -38,6 +38,6 @@ lemma cpes_refl (h): ∀G,L. reflexive … (cpes h 0 0 G L). (* Basic_2A1: uses: scpes_sym *) lemma cpes_sym (h) (n1) (n2): - ∀G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬌*[h,n1,n2] T2 → ⦃G,L⦄ ⊢ T2 ⬌*[h,n2,n1] T1. + ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬌*[h,n1,n2] T2 → ❪G,L❫ ⊢ T2 ⬌*[h,n2,n1] T1. #h #n1 #n2 #G #L #T1 #T2 * /2 width=3 by cpms_div/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes_aaa.ma index 06eacc674..b0e54c4f1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes_aaa.ma @@ -21,7 +21,7 @@ include "basic_2/rt_equivalence/cpes.ma". (* Basic_2A1: uses: scpes_refl *) lemma cpes_refl_aaa (h) (n): - ∀G,L,T,A. ⦃G,L⦄ ⊢ T ⁝ A → ⦃G,L⦄ ⊢ T ⬌*[h,n,n] T. + ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ❪G,L❫ ⊢ T ⬌*[h,n,n] T. #h #n #G #L #T #A #HA elim (cpms_total_aaa h … n … HA) #U #HTU /2 width=3 by cpms_div/ @@ -31,8 +31,8 @@ qed. (* Basic_2A1: uses: scpes_aaa_mono *) theorem cpes_aaa_mono (h) (n1) (n2): - ∀G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬌*[h,n1,n2] T2 → - ∀A1. ⦃G,L⦄ ⊢ T1 ⁝ A1 → ∀A2. ⦃G,L⦄ ⊢ T2 ⁝ A2 → A1 = A2. + ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬌*[h,n1,n2] T2 → + ∀A1. ❪G,L❫ ⊢ T1 ⁝ A1 → ∀A2. ❪G,L❫ ⊢ T2 ⁝ A2 → A1 = A2. #h #n1 #n2 #G #L #T1 #T2 * #T #HT1 #HT2 #A1 #HA1 #A2 #HA2 lapply (cpms_aaa_conf … HA1 … HT1) -T1 #HA1 lapply (cpms_aaa_conf … HA2 … HT2) -T2 #HA2 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes_cpes.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes_cpes.ma index 73dca9727..28ac33e75 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes_cpes.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes_cpes.ma @@ -20,8 +20,8 @@ include "basic_2/rt_equivalence/cpes_cpms.ma". (* Advanced forward lemmas **************************************************) lemma cpes_fwd_abst_bi (h) (n1) (n2) (p1) (p2) (G) (L): - ∀W1,W2,T1,T2. ⦃G,L⦄ ⊢ ⓛ{p1}W1.T1 ⬌*[h,n1,n2] ⓛ{p2}W2.T2 → - ∧∧ p1 = p2 & ⦃G,L⦄ ⊢ W1 ⬌*[h,0,O] W2. + ∀W1,W2,T1,T2. ❪G,L❫ ⊢ ⓛ[p1]W1.T1 ⬌*[h,n1,n2] ⓛ[p2]W2.T2 → + ∧∧ p1 = p2 & ❪G,L❫ ⊢ W1 ⬌*[h,0,O] W2. #h #n1 #n2 #p1 #p2 #G #L #W1 #W2 #T1 #T2 * #X #H1 #H2 elim (cpms_inv_abst_sn … H1) #W0 #X0 #HW10 #_ #H destruct elim (cpms_inv_abst_bi … H2) #H #HW20 #_ destruct @@ -31,8 +31,8 @@ qed-. (* Main properties **********************************************************) theorem cpes_cpes_trans (h) (n1) (n2) (G) (L) (T): - ∀T1. ⦃G,L⦄ ⊢ T ⬌*[h,n1,0] T1 → - ∀T2. ⦃G,L⦄ ⊢ T1 ⬌*[h,0,n2] T2 → ⦃G,L⦄ ⊢ T ⬌*[h,n1,n2] T2. + ∀T1. ❪G,L❫ ⊢ T ⬌*[h,n1,0] T1 → + ∀T2. ❪G,L❫ ⊢ T1 ⬌*[h,0,n2] T2 → ❪G,L❫ ⊢ T ⬌*[h,n1,n2] T2. #h #n1 #n2 #G #L #T #T1 #HT1 #T2 * #X #HX1 #HX2 lapply (cpes_cprs_trans … HT1 … HX1) -T1 #HTX lapply (cpes_cpms_div … HTX … HX2) -X // diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes_cpms.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes_cpms.ma index 48b0ceb1c..845deae5e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes_cpms.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_equivalence/cpes_cpms.ma @@ -20,16 +20,16 @@ include "basic_2/rt_equivalence/cpes.ma". (* Properties with t-bound rt-computation on terms **************************) lemma cpes_cprs_trans (h) (n) (G) (L) (T0): - ∀T1. ⦃G,L⦄ ⊢ T1 ⬌*[h,n,0] T0 → - ∀T2. ⦃G,L⦄ ⊢ T0 ➡*[h] T2 → ⦃G,L⦄ ⊢ T1 ⬌*[h,n,0] T2. + ∀T1. ❪G,L❫ ⊢ T1 ⬌*[h,n,0] T0 → + ∀T2. ❪G,L❫ ⊢ T0 ➡*[h] T2 → ❪G,L❫ ⊢ T1 ⬌*[h,n,0] T2. #h #n #G #L #T0 #T1 * #T #HT1 #HT0 #T2 #HT02 elim (cprs_conf … HT0 … HT02) -T0 #T0 #HT0 #HT20 /3 width=3 by cpms_div, cpms_cprs_trans/ qed-. lemma cpes_cpms_div (h) (n) (n1) (n2) (G) (L) (T0): - ∀T1. ⦃G,L⦄ ⊢ T1 ⬌*[h,n,n1] T0 → - ∀T2. ⦃G,L⦄ ⊢ T2 ➡*[n2,h] T0 → ⦃G,L⦄ ⊢ T1 ⬌*[h,n,n2+n1] T2. + ∀T1. ❪G,L❫ ⊢ T1 ⬌*[h,n,n1] T0 → + ∀T2. ❪G,L❫ ⊢ T2 ➡*[n2,h] T0 → ❪G,L❫ ⊢ T1 ⬌*[h,n,n2+n1] T2. #h #n #n1 #n2 #G #L #T0 #T1 * #T #HT1 #HT0 #T2 #HT20 lapply (cpms_trans … HT20 … HT0) -T0 #HT2 /2 width=3 by cpms_div/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr.ma index aa739d678..8d50d4d4d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr.ma @@ -26,16 +26,16 @@ interpretation (* Basic inversion lemmas ***************************************************) lemma cnr_inv_abst (h) (p) (G) (L): - ∀V,T. ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃ⓛ{p}V.T⦄ → ∧∧ ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃V⦄ & ⦃G,L.ⓛV⦄ ⊢ ➡[h] 𝐍⦃T⦄. + ∀V,T. ❪G,L❫ ⊢ ➡[h] 𝐍❪ⓛ[p]V.T❫ → ∧∧ ❪G,L❫ ⊢ ➡[h] 𝐍❪V❫ & ❪G,L.ⓛV❫ ⊢ ➡[h] 𝐍❪T❫. #h #p #G #L #V1 #T1 #HVT1 @conj -[ #V2 #HV2 lapply (HVT1 (ⓛ{p}V2.T1) ?) -HVT1 /2 width=2 by cpr_pair_sn/ -HV2 #H destruct // -| #T2 #HT2 lapply (HVT1 (ⓛ{p}V1.T2) ?) -HVT1 /2 width=2 by cpm_bind/ -HT2 #H destruct // +[ #V2 #HV2 lapply (HVT1 (ⓛ[p]V2.T1) ?) -HVT1 /2 width=2 by cpr_pair_sn/ -HV2 #H destruct // +| #T2 #HT2 lapply (HVT1 (ⓛ[p]V1.T2) ?) -HVT1 /2 width=2 by cpm_bind/ -HT2 #H destruct // ] qed-. (* Basic_2A1: was: cnr_inv_abbr *) lemma cnr_inv_abbr_neg (h) (G) (L): - ∀V,T. ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃-ⓓV.T⦄ → ∧∧ ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃V⦄ & ⦃G,L.ⓓV⦄ ⊢ ➡[h] 𝐍⦃T⦄. + ∀V,T. ❪G,L❫ ⊢ ➡[h] 𝐍❪-ⓓV.T❫ → ∧∧ ❪G,L❫ ⊢ ➡[h] 𝐍❪V❫ & ❪G,L.ⓓV❫ ⊢ ➡[h] 𝐍❪T❫. #h #G #L #V1 #T1 #HVT1 @conj [ #V2 #HV2 lapply (HVT1 (-ⓓV2.T1) ?) -HVT1 /2 width=2 by cpr_pair_sn/ -HV2 #H destruct // | #T2 #HT2 lapply (HVT1 (-ⓓV1.T2) ?) -HVT1 /2 width=2 by cpm_bind/ -HT2 #H destruct // @@ -43,7 +43,7 @@ lemma cnr_inv_abbr_neg (h) (G) (L): qed-. (* Basic_2A1: was: cnr_inv_eps *) -lemma cnr_inv_cast (h) (G) (L): ∀V,T. ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃ⓝV.T⦄ → ⊥. +lemma cnr_inv_cast (h) (G) (L): ∀V,T. ❪G,L❫ ⊢ ➡[h] 𝐍❪ⓝV.T❫ → ⊥. #h #G #L #V #T #H lapply (H T ?) -H /2 width=4 by cpm_eps, discr_tpair_xy_y/ qed-. @@ -51,26 +51,26 @@ qed-. (* Basic properties *********************************************************) (* Basic_1: was: nf2_sort *) -lemma cnr_sort (h) (G) (L): ∀s. ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃⋆s⦄. +lemma cnr_sort (h) (G) (L): ∀s. ❪G,L❫ ⊢ ➡[h] 𝐍❪⋆s❫. #h #G #L #s #X #H >(cpr_inv_sort1 … H) // qed. -lemma cnr_gref (h) (G) (L): ∀l. ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃§l⦄. +lemma cnr_gref (h) (G) (L): ∀l. ❪G,L❫ ⊢ ➡[h] 𝐍❪§l❫. #h #G #L #l #X #H >(cpr_inv_gref1 … H) // qed. (* Basic_1: was: nf2_abst *) lemma cnr_abst (h) (p) (G) (L): - ∀W,T. ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃W⦄ → ⦃G,L.ⓛW⦄ ⊢ ➡[h] 𝐍⦃T⦄ → ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃ⓛ{p}W.T⦄. + ∀W,T. ❪G,L❫ ⊢ ➡[h] 𝐍❪W❫ → ❪G,L.ⓛW❫ ⊢ ➡[h] 𝐍❪T❫ → ❪G,L❫ ⊢ ➡[h] 𝐍❪ⓛ[p]W.T❫. #h #p #G #L #W #T #HW #HT #X #H elim (cpm_inv_abst1 … H) -H #W0 #T0 #HW0 #HT0 #H destruct <(HW … HW0) -W0 <(HT … HT0) -T0 // qed. lemma cnr_abbr_neg (h) (G) (L): - ∀V,T. ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃V⦄ → ⦃G,L.ⓓV⦄ ⊢ ➡[h] 𝐍⦃T⦄ → ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃-ⓓV.T⦄. + ∀V,T. ❪G,L❫ ⊢ ➡[h] 𝐍❪V❫ → ❪G,L.ⓓV❫ ⊢ ➡[h] 𝐍❪T❫ → ❪G,L❫ ⊢ ➡[h] 𝐍❪-ⓓV.T❫. #h #G #L #V #T #HV #HT #X #H elim (cpm_inv_abbr1 … H) -H * [ #V0 #T0 #HV0 #HT0 #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_drops.ma index 2eebfb16d..ff227f401 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_drops.ma @@ -21,7 +21,7 @@ include "basic_2/rt_transition/cnr.ma". (* Basic_1: was only: nf2_csort_lref *) lemma cnr_lref_atom (h) (b) (G) (L): - ∀i. ⇩*[b,𝐔❴i❵] L ≘ ⋆ → ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃#i⦄. + ∀i. ⇩*[b,𝐔❨i❩] L ≘ ⋆ → ❪G,L❫ ⊢ ➡[h] 𝐍❪#i❫. #h #b #G #L #i #Hi #X #H elim (cpr_inv_lref1_drops … H) -H // * #K #V1 #V2 #HLK lapply (drops_gen b … HLK) -HLK #HLK @@ -30,7 +30,7 @@ qed. (* Basic_1: was: nf2_lref_abst *) lemma cnr_lref_abst (h) (G) (L): - ∀K,V,i. ⇩*[i] L ≘ K.ⓛV → ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃#i⦄. + ∀K,V,i. ⇩*[i] L ≘ K.ⓛV → ❪G,L❫ ⊢ ➡[h] 𝐍❪#i❫. #h #G #L #K #V #i #HLK #X #H elim (cpr_inv_lref1_drops … H) -H // * #K0 #V1 #V2 #HLK0 #_ #_ @@ -38,7 +38,7 @@ lapply (drops_mono … HLK … HLK0) -L #H destruct qed. lemma cnr_lref_unit (h) (I) (G) (L): - ∀K,i. ⇩*[i] L ≘ K.ⓤ{I} → ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃#i⦄. + ∀K,i. ⇩*[i] L ≘ K.ⓤ[I] → ❪G,L❫ ⊢ ➡[h] 𝐍❪#i❫. #h #I #G #L #K #i #HLK #X #H elim (cpr_inv_lref1_drops … H) -H // * #K0 #V1 #V2 #HLK0 #_ #_ @@ -59,9 +59,9 @@ qed-. (* Basic_2A1: was: cnr_inv_delta *) lemma cnr_inv_lref_abbr (h) (G) (L): - ∀K,V,i. ⇩*[i] L ≘ K.ⓓV → ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃#i⦄ → ⊥. + ∀K,V,i. ⇩*[i] L ≘ K.ⓓV → ❪G,L❫ ⊢ ➡[h] 𝐍❪#i❫ → ⊥. #h #G #L #K #V #i #HLK #H -elim (lifts_total V 𝐔❴↑i❵) #W #HVW +elim (lifts_total V 𝐔❨↑i❩) #W #HVW lapply (H W ?) -H [ /3 width=6 by cpm_delta_drops/ ] -HLK #H destruct elim (lifts_inv_lref2_uni_lt … HVW) -HVW // qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_simple.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_simple.ma index 20039dafe..71c9223b2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_simple.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_simple.ma @@ -20,14 +20,14 @@ include "basic_2/rt_transition/cnr.ma". (* Inversion lemmas with simple terms ***************************************) lemma cnr_inv_appl (h) (G) (L): - ∀V,T. ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃ⓐV.T⦄ → ∧∧ ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃V⦄ & ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃T⦄ & 𝐒⦃T⦄. + ∀V,T. ❪G,L❫ ⊢ ➡[h] 𝐍❪ⓐV.T❫ → ∧∧ ❪G,L❫ ⊢ ➡[h] 𝐍❪V❫ & ❪G,L❫ ⊢ ➡[h] 𝐍❪T❫ & 𝐒❪T❫. #h #G #L #V1 #T1 #HVT1 @and3_intro [ #V2 #HV2 lapply (HVT1 (ⓐV2.T1) ?) -HVT1 /2 width=1 by cpr_pair_sn/ -HV2 #H destruct // | #T2 #HT2 lapply (HVT1 (ⓐV1.T2) ?) -HVT1 /2 width=1 by cpr_flat/ -HT2 #H destruct // | generalize in match HVT1; -HVT1 elim T1 -T1 * // #a * #W1 #U1 #_ #_ #H - [ elim (lifts_total V1 𝐔❴1❵) #V2 #HV12 - lapply (H (ⓓ{a}W1.ⓐV2.U1) ?) -H /2 width=3 by cpm_theta/ -HV12 #H destruct - | lapply (H (ⓓ{a}ⓝW1.V1.U1) ?) -H /2 width=1 by cpm_beta/ #H destruct + [ elim (lifts_total V1 𝐔❨1❩) #V2 #HV12 + lapply (H (ⓓ[a]W1.ⓐV2.U1) ?) -H /2 width=3 by cpm_theta/ -HV12 #H destruct + | lapply (H (ⓓ[a]ⓝW1.V1.U1) ?) -H /2 width=1 by cpm_beta/ #H destruct ] ] qed-. @@ -36,7 +36,7 @@ qed-. (* Basic_1: was only: nf2_appl_lref *) lemma cnr_appl_simple (h) (G) (L): - ∀V,T. ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃V⦄ → ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃T⦄ → 𝐒⦃T⦄ → ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃ⓐV.T⦄. + ∀V,T. ❪G,L❫ ⊢ ➡[h] 𝐍❪V❫ → ❪G,L❫ ⊢ ➡[h] 𝐍❪T❫ → 𝐒❪T❫ → ❪G,L❫ ⊢ ➡[h] 𝐍❪ⓐV.T❫. #h #G #L #V #T #HV #HT #HS #X #H elim (cpm_inv_appl1_simple … H) -H // #V0 #T0 #HV0 #HT0 #H destruct <(HV … HV0) -V0 <(HT … HT0) -T0 // diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_teqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_teqx.ma index f0e91e7c1..8d23d17b3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_teqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnr_teqx.ma @@ -24,8 +24,8 @@ include "basic_2/rt_transition/cnr_drops.ma". (* Basic_1: was: nf2_dec *) (* Basic_2A1: uses: cnr_dec *) lemma cnr_dec_teqx (h) (G) (L): - ∀T1. ∨∨ ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃T1⦄ - | ∃∃T2. ⦃G,L⦄ ⊢ T1 ➡[h] T2 & (T1 ≛ T2 → ⊥). + ∀T1. ∨∨ ❪G,L❫ ⊢ ➡[h] 𝐍❪T1❫ + | ∃∃T2. ❪G,L❫ ⊢ T1 ➡[h] T2 & (T1 ≛ T2 → ⊥). #h #G #L #T1 @(fqup_wf_ind_eq (Ⓣ) … G L T1) -G -L -T1 #G0 #L0 #T0 #IH #G #L * * [ #s #HG #HL #HT destruct -IH @@ -35,7 +35,7 @@ lemma cnr_dec_teqx (h) (G) (L): [ /3 width=6 by cnr_lref_atom, or_introl/ | * * [ #I | * #V ] #K #HLK [ /3 width=7 by cnr_lref_unit, or_introl/ - | elim (lifts_total V 𝐔❴↑i❵) #W #HVW + | elim (lifts_total V 𝐔❨↑i❩) #W #HVW @or_intror @(ex2_intro … W) [ /2 width=6 by cpm_delta_drops/ ] #H lapply (teqx_inv_lref1 … H) -H #H destruct /2 width=5 by lifts_inv_lref2_uni_lt/ @@ -65,10 +65,10 @@ lemma cnr_dec_teqx (h) (G) (L): | elim (IH G L V1) [ elim (IH G (L.ⓛV1) T1) [| * | // ] | * | // ] -IH [ #HT1 #HV1 /3 width=6 by cnr_abst, or_introl/ | #T2 #HT12 #HnT12 #_ - @or_intror @(ex2_intro … (ⓛ{p}V1.T2)) [ /2 width=1 by cpm_bind/ ] #H + @or_intror @(ex2_intro … (ⓛ[p]V1.T2)) [ /2 width=1 by cpm_bind/ ] #H elim (teqx_inv_pair … H) -H /2 width=1 by/ | #V2 #HV12 #HnV12 - @or_intror @(ex2_intro … (ⓛ{p}V2.T1)) [ /2 width=1 by cpr_pair_sn/ ] #H + @or_intror @(ex2_intro … (ⓛ[p]V2.T1)) [ /2 width=1 by cpr_pair_sn/ ] #H elim (teqx_inv_pair … H) -H /2 width=1 by/ ] ] @@ -77,10 +77,10 @@ lemma cnr_dec_teqx (h) (G) (L): [ #HT1 #HV1 elim (simple_dec_ex T1) [| * #p * #W1 #U1 #H destruct ] [ /3 width=6 by cnr_appl_simple, or_introl/ - | elim (lifts_total V1 𝐔❴1❵) #X1 #HVX1 - @or_intror @(ex2_intro … (ⓓ{p}W1.ⓐX1.U1)) [ /2 width=3 by cpm_theta/ ] #H + | elim (lifts_total V1 𝐔❨1❩) #X1 #HVX1 + @or_intror @(ex2_intro … (ⓓ[p]W1.ⓐX1.U1)) [ /2 width=3 by cpm_theta/ ] #H elim (teqx_inv_pair … H) -H #H destruct - | @or_intror @(ex2_intro … (ⓓ{p}ⓝW1.V1.U1)) [ /2 width=1 by cpm_beta/ ] #H + | @or_intror @(ex2_intro … (ⓓ[p]ⓝW1.V1.U1)) [ /2 width=1 by cpm_beta/ ] #H elim (teqx_inv_pair … H) -H #H destruct ] | #T2 #HT12 #HnT12 #_ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx.ma index 0f4571262..4b9059643 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx.ma @@ -27,18 +27,18 @@ interpretation (* Basic inversion lemmas ***************************************************) -lemma cnx_inv_abst: ∀h,p,G,L,V,T. ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃ⓛ{p}V.T⦄ → - ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃V⦄ ∧ ⦃G,L.ⓛV⦄ ⊢ ⬈[h] 𝐍⦃T⦄. +lemma cnx_inv_abst: ∀h,p,G,L,V,T. ❪G,L❫ ⊢ ⬈[h] 𝐍❪ⓛ[p]V.T❫ → + ❪G,L❫ ⊢ ⬈[h] 𝐍❪V❫ ∧ ❪G,L.ⓛV❫ ⊢ ⬈[h] 𝐍❪T❫. #h #p #G #L #V1 #T1 #HVT1 @conj -[ #V2 #HV2 lapply (HVT1 (ⓛ{p}V2.T1) ?) -HVT1 /2 width=2 by cpx_pair_sn/ -HV2 -| #T2 #HT2 lapply (HVT1 (ⓛ{p}V1.T2) ?) -HVT1 /2 width=2 by cpx_bind/ -HT2 +[ #V2 #HV2 lapply (HVT1 (ⓛ[p]V2.T1) ?) -HVT1 /2 width=2 by cpx_pair_sn/ -HV2 +| #T2 #HT2 lapply (HVT1 (ⓛ[p]V1.T2) ?) -HVT1 /2 width=2 by cpx_bind/ -HT2 ] #H elim (teqx_inv_pair … H) -H // qed-. (* Basic_2A1: was: cnx_inv_abbr *) -lemma cnx_inv_abbr_neg: ∀h,G,L,V,T. ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃-ⓓV.T⦄ → - ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃V⦄ ∧ ⦃G,L.ⓓV⦄ ⊢ ⬈[h] 𝐍⦃T⦄. +lemma cnx_inv_abbr_neg: ∀h,G,L,V,T. ❪G,L❫ ⊢ ⬈[h] 𝐍❪-ⓓV.T❫ → + ❪G,L❫ ⊢ ⬈[h] 𝐍❪V❫ ∧ ❪G,L.ⓓV❫ ⊢ ⬈[h] 𝐍❪T❫. #h #G #L #V1 #T1 #HVT1 @conj [ #V2 #HV2 lapply (HVT1 (-ⓓV2.T1) ?) -HVT1 /2 width=2 by cpx_pair_sn/ -HV2 | #T2 #HT2 lapply (HVT1 (-ⓓV1.T2) ?) -HVT1 /2 width=2 by cpx_bind/ -HT2 @@ -47,20 +47,20 @@ lemma cnx_inv_abbr_neg: ∀h,G,L,V,T. ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃-ⓓV.T⦄ → qed-. (* Basic_2A1: was: cnx_inv_eps *) -lemma cnx_inv_cast: ∀h,G,L,V,T. ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃ⓝV.T⦄ → ⊥. +lemma cnx_inv_cast: ∀h,G,L,V,T. ❪G,L❫ ⊢ ⬈[h] 𝐍❪ⓝV.T❫ → ⊥. #h #G #L #V #T #H lapply (H T ?) -H /2 width=6 by cpx_eps, teqx_inv_pair_xy_y/ qed-. (* Basic properties *********************************************************) -lemma cnx_sort: ∀h,G,L,s. ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃⋆s⦄. +lemma cnx_sort: ∀h,G,L,s. ❪G,L❫ ⊢ ⬈[h] 𝐍❪⋆s❫. #h #G #L #s #X #H elim (cpx_inv_sort1 … H) -H /2 width=1 by teqx_sort/ qed. -lemma cnx_abst: ∀h,p,G,L,W,T. ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃W⦄ → ⦃G,L.ⓛW⦄ ⊢ ⬈[h] 𝐍⦃T⦄ → - ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃ⓛ{p}W.T⦄. +lemma cnx_abst: ∀h,p,G,L,W,T. ❪G,L❫ ⊢ ⬈[h] 𝐍❪W❫ → ❪G,L.ⓛW❫ ⊢ ⬈[h] 𝐍❪T❫ → + ❪G,L❫ ⊢ ⬈[h] 𝐍❪ⓛ[p]W.T❫. #h #p #G #L #W #T #HW #HT #X #H elim (cpx_inv_abst1 … H) -H #W0 #T0 #HW0 #HT0 #H destruct @teqx_pair [ @HW | @HT ] // (**) (* auto fails because δ-expansion gets in the way *) diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_basic.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_basic.ma index 4f07b3e5e..41cb6dad8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_basic.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_basic.ma @@ -20,7 +20,7 @@ include "basic_2/rt_transition/cnx.ma". (* Advanced inversion lemmas ************************************************) -lemma cnx_inv_abbr_pos (h) (G) (L): ∀V,T. ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃+ⓓV.T⦄ → ⊥. +lemma cnx_inv_abbr_pos (h) (G) (L): ∀V,T. ❪G,L❫ ⊢ ⬈[h] 𝐍❪+ⓓV.T❫ → ⊥. #h #G #L #V #U1 #H elim (cpx_subst h G (L.ⓓV) U1 … 0) [|*: /2 width=4 by drops_refl/ ] #U2 #T2 #HU12 #HTU2 elim (teqx_dec U1 U2) #HnU12 [ -HU12 | -HTU2 ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_cnx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_cnx.ma index 43fccb612..76739178d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_cnx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_cnx.ma @@ -19,8 +19,8 @@ include "basic_2/rt_transition/cnx.ma". (* Advanced properties ******************************************************) -lemma cnx_teqx_trans: ∀h,G,L,T1. ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃T1⦄ → - ∀T2. T1 ≛ T2 → ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃T2⦄. +lemma cnx_teqx_trans: ∀h,G,L,T1. ❪G,L❫ ⊢ ⬈[h] 𝐍❪T1❫ → + ∀T2. T1 ≛ T2 → ❪G,L❫ ⊢ ⬈[h] 𝐍❪T2❫. #h #G #L #T1 #HT1 #T2 #HT12 #T #HT2 elim (teqx_cpx_trans … HT12 … HT2) -HT2 #T0 #HT10 #HT0 lapply (HT1 … HT10) -HT1 -HT10 /2 width=5 by teqx_repl/ (**) (* full auto fails *) diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_drops.ma index 977d278f9..76f8f77b0 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_drops.ma @@ -20,12 +20,12 @@ include "basic_2/rt_transition/cnx.ma". (* Properties with generic slicing ******************************************) -lemma cnx_lref_atom: ∀h,G,L,i. ⇩*[i] L ≘ ⋆ → ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃#i⦄. +lemma cnx_lref_atom: ∀h,G,L,i. ⇩*[i] L ≘ ⋆ → ❪G,L❫ ⊢ ⬈[h] 𝐍❪#i❫. #h #G #L #i #Hi #X #H elim (cpx_inv_lref1_drops … H) -H // * #I #K #V1 #V2 #HLK lapply (drops_mono … Hi … HLK) -L #H destruct qed. -lemma cnx_lref_unit: ∀h,I,G,L,K,i. ⇩*[i] L ≘ K.ⓤ{I} → ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃#i⦄. +lemma cnx_lref_unit: ∀h,I,G,L,K,i. ⇩*[i] L ≘ K.ⓤ[I] → ❪G,L❫ ⊢ ⬈[h] 𝐍❪#i❫. #h #I #G #L #K #i #HLK #X #H elim (cpx_inv_lref1_drops … H) -H // * #Z #Y #V1 #V2 #HLY lapply (drops_mono … HLK … HLY) -L #H destruct qed. @@ -40,9 +40,9 @@ qed-. (* Inversion lemmas with generic slicing ************************************) (* Basic_2A1: was: cnx_inv_delta *) -lemma cnx_inv_lref_pair: ∀h,I,G,L,K,V,i. ⇩*[i] L ≘ K.ⓑ{I}V → ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃#i⦄ → ⊥. +lemma cnx_inv_lref_pair: ∀h,I,G,L,K,V,i. ⇩*[i] L ≘ K.ⓑ[I]V → ❪G,L❫ ⊢ ⬈[h] 𝐍❪#i❫ → ⊥. #h #I #G #L #K #V #i #HLK #H -elim (lifts_total V (𝐔❴↑i❵)) #W #HVW +elim (lifts_total V (𝐔❨↑i❩)) #W #HVW lapply (H W ?) -H /2 width=7 by cpx_delta_drops/ -HLK #H lapply (teqx_inv_lref1 … H) -H #H destruct /2 width=5 by lifts_inv_lref2_uni_lt/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_simple.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_simple.ma index 4263b28cb..ad4afa831 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_simple.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cnx_simple.ma @@ -19,8 +19,8 @@ include "basic_2/rt_transition/cnx.ma". (* Inversion lemmas with simple terms ***************************************) -lemma cnx_inv_appl: ∀h,G,L,V,T. ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃ⓐV.T⦄ → - ∧∧ ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃V⦄ & ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃T⦄ & 𝐒⦃T⦄. +lemma cnx_inv_appl: ∀h,G,L,V,T. ❪G,L❫ ⊢ ⬈[h] 𝐍❪ⓐV.T❫ → + ∧∧ ❪G,L❫ ⊢ ⬈[h] 𝐍❪V❫ & ❪G,L❫ ⊢ ⬈[h] 𝐍❪T❫ & 𝐒❪T❫. #h #G #L #V1 #T1 #HVT1 @and3_intro [ #V2 #HV2 lapply (HVT1 (ⓐV2.T1) ?) -HVT1 /2 width=1 by cpx_pair_sn/ -HV2 #H elim (teqx_inv_pair … H) -H // @@ -28,10 +28,10 @@ lemma cnx_inv_appl: ∀h,G,L,V,T. ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃ⓐV.T⦄ → #H elim (teqx_inv_pair … H) -H // | generalize in match HVT1; -HVT1 elim T1 -T1 * // #p * #W1 #U1 #_ #_ #H - [ elim (lifts_total V1 (𝐔❴1❵)) #V2 #HV12 - lapply (H (ⓓ{p}W1.ⓐV2.U1) ?) -H /2 width=3 by cpx_theta/ -HV12 + [ elim (lifts_total V1 (𝐔❨1❩)) #V2 #HV12 + lapply (H (ⓓ[p]W1.ⓐV2.U1) ?) -H /2 width=3 by cpx_theta/ -HV12 #H elim (teqx_inv_pair … H) -H #H destruct - | lapply (H (ⓓ{p}ⓝW1.V1.U1) ?) -H /2 width=1 by cpx_beta/ + | lapply (H (ⓓ[p]ⓝW1.V1.U1) ?) -H /2 width=1 by cpx_beta/ #H elim (teqx_inv_pair … H) -H #H destruct ] ] @@ -39,8 +39,8 @@ qed-. (* Properties with simple terms *********************************************) -lemma cnx_appl_simple: ∀h,G,L,V,T. ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃V⦄ → ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃T⦄ → 𝐒⦃T⦄ → - ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃ⓐV.T⦄. +lemma cnx_appl_simple: ∀h,G,L,V,T. ❪G,L❫ ⊢ ⬈[h] 𝐍❪V❫ → ❪G,L❫ ⊢ ⬈[h] 𝐍❪T❫ → 𝐒❪T❫ → + ❪G,L❫ ⊢ ⬈[h] 𝐍❪ⓐV.T❫. #h #G #L #V #T #HV #HT #HS #X #H elim (cpx_inv_appl1_simple … H) -H // #V0 #T0 #HV0 #HT0 #H destruct @teqx_pair [ @HV | @HT ] // (**) (* auto fails because δ-expansion gets in the way *) diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg.ma index c33b21973..377d39ea6 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg.ma @@ -31,17 +31,17 @@ include "static_2/relocation/lifts.ma". (* avtivate genv *) inductive cpg (Rt:relation rtc) (h): rtc → relation4 genv lenv term term ≝ -| cpg_atom : ∀I,G,L. cpg Rt h (𝟘𝟘) G L (⓪{I}) (⓪{I}) +| cpg_atom : ∀I,G,L. cpg Rt h (𝟘𝟘) G L (⓪[I]) (⓪[I]) | cpg_ess : ∀G,L,s. cpg Rt h (𝟘𝟙) G L (⋆s) (⋆(⫯[h]s)) | cpg_delta: ∀c,G,L,V1,V2,W2. cpg Rt h c G L V1 V2 → ⇧*[1] V2 ≘ W2 → cpg Rt h c G (L.ⓓV1) (#0) W2 | cpg_ell : ∀c,G,L,V1,V2,W2. cpg Rt h c G L V1 V2 → ⇧*[1] V2 ≘ W2 → cpg Rt h (c+𝟘𝟙) G (L.ⓛV1) (#0) W2 | cpg_lref : ∀c,I,G,L,T,U,i. cpg Rt h c G L (#i) T → - ⇧*[1] T ≘ U → cpg Rt h c G (L.ⓘ{I}) (#↑i) U + ⇧*[1] T ≘ U → cpg Rt h c G (L.ⓘ[I]) (#↑i) U | cpg_bind : ∀cV,cT,p,I,G,L,V1,V2,T1,T2. - cpg Rt h cV G L V1 V2 → cpg Rt h cT G (L.ⓑ{I}V1) T1 T2 → - cpg Rt h ((↕*cV)∨cT) G L (ⓑ{p,I}V1.T1) (ⓑ{p,I}V2.T2) + cpg Rt h cV G L V1 V2 → cpg Rt h cT G (L.ⓑ[I]V1) T1 T2 → + cpg Rt h ((↕*cV)∨cT) G L (ⓑ[p,I]V1.T1) (ⓑ[p,I]V2.T2) | cpg_appl : ∀cV,cT,G,L,V1,V2,T1,T2. cpg Rt h cV G L V1 V2 → cpg Rt h cT G L T1 T2 → cpg Rt h ((↕*cV)∨cT) G L (ⓐV1.T1) (ⓐV2.T2) @@ -54,11 +54,11 @@ inductive cpg (Rt:relation rtc) (h): rtc → relation4 genv lenv term term ≝ | cpg_ee : ∀c,G,L,V1,V2,T. cpg Rt h c G L V1 V2 → cpg Rt h (c+𝟘𝟙) G L (ⓝV1.T) V2 | cpg_beta : ∀cV,cW,cT,p,G,L,V1,V2,W1,W2,T1,T2. cpg Rt h cV G L V1 V2 → cpg Rt h cW G L W1 W2 → cpg Rt h cT G (L.ⓛW1) T1 T2 → - cpg Rt h (((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘) G L (ⓐV1.ⓛ{p}W1.T1) (ⓓ{p}ⓝW2.V2.T2) + cpg Rt h (((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘) G L (ⓐV1.ⓛ[p]W1.T1) (ⓓ[p]ⓝW2.V2.T2) | cpg_theta: ∀cV,cW,cT,p,G,L,V1,V,V2,W1,W2,T1,T2. cpg Rt h cV G L V1 V → ⇧*[1] V ≘ V2 → cpg Rt h cW G L W1 W2 → cpg Rt h cT G (L.ⓓW1) T1 T2 → - cpg Rt h (((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘) G L (ⓐV1.ⓓ{p}W1.T1) (ⓓ{p}W2.ⓐV2.T2) + cpg Rt h (((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘) G L (ⓐV1.ⓓ[p]W1.T1) (ⓓ[p]W2.ⓐV2.T2) . interpretation @@ -68,22 +68,22 @@ interpretation (* Basic properties *********************************************************) (* Note: this is "∀Rt. reflexive … Rt → ∀h,g,L. reflexive … (cpg Rt h (𝟘𝟘) L)" *) -lemma cpg_refl: ∀Rt. reflexive … Rt → ∀h,G,T,L. ⦃G,L⦄ ⊢ T ⬈[Rt,𝟘𝟘,h] T. +lemma cpg_refl: ∀Rt. reflexive … Rt → ∀h,G,T,L. ❪G,L❫ ⊢ T ⬈[Rt,𝟘𝟘,h] T. #Rt #HRt #h #G #T elim T -T // * /2 width=1 by cpg_bind/ * /2 width=1 by cpg_appl, cpg_cast/ qed. (* Basic inversion lemmas ***************************************************) -fact cpg_inv_atom1_aux: ∀Rt,c,h,G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈[Rt,c,h] T2 → ∀J. T1 = ⓪{J} → - ∨∨ T2 = ⓪{J} ∧ c = 𝟘𝟘 +fact cpg_inv_atom1_aux: ∀Rt,c,h,G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬈[Rt,c,h] T2 → ∀J. T1 = ⓪[J] → + ∨∨ T2 = ⓪[J] ∧ c = 𝟘𝟘 | ∃∃s. J = Sort s & T2 = ⋆(⫯[h]s) & c = 𝟘𝟙 - | ∃∃cV,K,V1,V2. ⦃G,K⦄ ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 & + | ∃∃cV,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 & L = K.ⓓV1 & J = LRef 0 & c = cV - | ∃∃cV,K,V1,V2. ⦃G,K⦄ ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 & + | ∃∃cV,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 & L = K.ⓛV1 & J = LRef 0 & c = cV+𝟘𝟙 - | ∃∃I,K,T,i. ⦃G,K⦄ ⊢ #i ⬈[Rt,c,h] T & ⇧*[1] T ≘ T2 & - L = K.ⓘ{I} & J = LRef (↑i). + | ∃∃I,K,T,i. ❪G,K❫ ⊢ #i ⬈[Rt,c,h] T & ⇧*[1] T ≘ T2 & + L = K.ⓘ[I] & J = LRef (↑i). #Rt #c #h #G #L #T1 #T2 * -c -G -L -T1 -T2 [ #I #G #L #J #H destruct /3 width=1 by or5_intro0, conj/ | #G #L #s #J #H destruct /3 width=3 by or5_intro1, ex3_intro/ @@ -101,18 +101,18 @@ fact cpg_inv_atom1_aux: ∀Rt,c,h,G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈[Rt,c,h] T2 → ] qed-. -lemma cpg_inv_atom1: ∀Rt,c,h,J,G,L,T2. ⦃G,L⦄ ⊢ ⓪{J} ⬈[Rt,c,h] T2 → - ∨∨ T2 = ⓪{J} ∧ c = 𝟘𝟘 +lemma cpg_inv_atom1: ∀Rt,c,h,J,G,L,T2. ❪G,L❫ ⊢ ⓪[J] ⬈[Rt,c,h] T2 → + ∨∨ T2 = ⓪[J] ∧ c = 𝟘𝟘 | ∃∃s. J = Sort s & T2 = ⋆(⫯[h]s) & c = 𝟘𝟙 - | ∃∃cV,K,V1,V2. ⦃G,K⦄ ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 & + | ∃∃cV,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 & L = K.ⓓV1 & J = LRef 0 & c = cV - | ∃∃cV,K,V1,V2. ⦃G,K⦄ ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 & + | ∃∃cV,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 & L = K.ⓛV1 & J = LRef 0 & c = cV+𝟘𝟙 - | ∃∃I,K,T,i. ⦃G,K⦄ ⊢ #i ⬈[Rt,c,h] T & ⇧*[1] T ≘ T2 & - L = K.ⓘ{I} & J = LRef (↑i). + | ∃∃I,K,T,i. ❪G,K❫ ⊢ #i ⬈[Rt,c,h] T & ⇧*[1] T ≘ T2 & + L = K.ⓘ[I] & J = LRef (↑i). /2 width=3 by cpg_inv_atom1_aux/ qed-. -lemma cpg_inv_sort1: ∀Rt,c,h,G,L,T2,s. ⦃G,L⦄ ⊢ ⋆s ⬈[Rt,c,h] T2 → +lemma cpg_inv_sort1: ∀Rt,c,h,G,L,T2,s. ❪G,L❫ ⊢ ⋆s ⬈[Rt,c,h] T2 → ∨∨ T2 = ⋆s ∧ c = 𝟘𝟘 | T2 = ⋆(⫯[h]s) ∧ c = 𝟘𝟙. #Rt #c #h #G #L #T2 #s #H elim (cpg_inv_atom1 … H) -H * /3 width=1 by or_introl, conj/ @@ -122,11 +122,11 @@ elim (cpg_inv_atom1 … H) -H * /3 width=1 by or_introl, conj/ ] qed-. -lemma cpg_inv_zero1: ∀Rt,c,h,G,L,T2. ⦃G,L⦄ ⊢ #0 ⬈[Rt,c,h] T2 → +lemma cpg_inv_zero1: ∀Rt,c,h,G,L,T2. ❪G,L❫ ⊢ #0 ⬈[Rt,c,h] T2 → ∨∨ T2 = #0 ∧ c = 𝟘𝟘 - | ∃∃cV,K,V1,V2. ⦃G,K⦄ ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 & + | ∃∃cV,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 & L = K.ⓓV1 & c = cV - | ∃∃cV,K,V1,V2. ⦃G,K⦄ ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 & + | ∃∃cV,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 & L = K.ⓛV1 & c = cV+𝟘𝟙. #Rt #c #h #G #L #T2 #H elim (cpg_inv_atom1 … H) -H * /3 width=1 by or3_intro0, conj/ @@ -136,9 +136,9 @@ elim (cpg_inv_atom1 … H) -H * /3 width=1 by or3_intro0, conj/ ] qed-. -lemma cpg_inv_lref1: ∀Rt,c,h,G,L,T2,i. ⦃G,L⦄ ⊢ #↑i ⬈[Rt,c,h] T2 → +lemma cpg_inv_lref1: ∀Rt,c,h,G,L,T2,i. ❪G,L❫ ⊢ #↑i ⬈[Rt,c,h] T2 → ∨∨ T2 = #(↑i) ∧ c = 𝟘𝟘 - | ∃∃I,K,T. ⦃G,K⦄ ⊢ #i ⬈[Rt,c,h] T & ⇧*[1] T ≘ T2 & L = K.ⓘ{I}. + | ∃∃I,K,T. ❪G,K❫ ⊢ #i ⬈[Rt,c,h] T & ⇧*[1] T ≘ T2 & L = K.ⓘ[I]. #Rt #c #h #G #L #T2 #i #H elim (cpg_inv_atom1 … H) -H * /3 width=1 by or_introl, conj/ [ #s #H destruct @@ -147,7 +147,7 @@ elim (cpg_inv_atom1 … H) -H * /3 width=1 by or_introl, conj/ ] qed-. -lemma cpg_inv_gref1: ∀Rt,c,h,G,L,T2,l. ⦃G,L⦄ ⊢ §l ⬈[Rt,c,h] T2 → T2 = §l ∧ c = 𝟘𝟘. +lemma cpg_inv_gref1: ∀Rt,c,h,G,L,T2,l. ❪G,L❫ ⊢ §l ⬈[Rt,c,h] T2 → T2 = §l ∧ c = 𝟘𝟘. #Rt #c #h #G #L #T2 #l #H elim (cpg_inv_atom1 … H) -H * /2 width=1 by conj/ [ #s #H destruct @@ -156,11 +156,11 @@ elim (cpg_inv_atom1 … H) -H * /2 width=1 by conj/ ] qed-. -fact cpg_inv_bind1_aux: ∀Rt,c,h,G,L,U,U2. ⦃G,L⦄ ⊢ U ⬈[Rt,c,h] U2 → - ∀p,J,V1,U1. U = ⓑ{p,J}V1.U1 → - ∨∨ ∃∃cV,cT,V2,T2. ⦃G,L⦄ ⊢ V1 ⬈[Rt,cV,h] V2 & ⦃G,L.ⓑ{J}V1⦄ ⊢ U1 ⬈[Rt,cT,h] T2 & - U2 = ⓑ{p,J}V2.T2 & c = ((↕*cV)∨cT) - | ∃∃cT,T. ⇧*[1] T ≘ U1 & ⦃G,L⦄ ⊢ T ⬈[Rt,cT,h] U2 & +fact cpg_inv_bind1_aux: ∀Rt,c,h,G,L,U,U2. ❪G,L❫ ⊢ U ⬈[Rt,c,h] U2 → + ∀p,J,V1,U1. U = ⓑ[p,J]V1.U1 → + ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ❪G,L.ⓑ[J]V1❫ ⊢ U1 ⬈[Rt,cT,h] T2 & + U2 = ⓑ[p,J]V2.T2 & c = ((↕*cV)∨cT) + | ∃∃cT,T. ⇧*[1] T ≘ U1 & ❪G,L❫ ⊢ T ⬈[Rt,cT,h] U2 & p = true & J = Abbr & c = cT+𝟙𝟘. #Rt #c #h #G #L #U #U2 * -c -G -L -U -U2 [ #I #G #L #q #J #W #U1 #H destruct @@ -179,39 +179,39 @@ fact cpg_inv_bind1_aux: ∀Rt,c,h,G,L,U,U2. ⦃G,L⦄ ⊢ U ⬈[Rt,c,h] U2 → ] qed-. -lemma cpg_inv_bind1: ∀Rt,c,h,p,I,G,L,V1,T1,U2. ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T1 ⬈[Rt,c,h] U2 → - ∨∨ ∃∃cV,cT,V2,T2. ⦃G,L⦄ ⊢ V1 ⬈[Rt,cV,h] V2 & ⦃G,L.ⓑ{I}V1⦄ ⊢ T1 ⬈[Rt,cT,h] T2 & - U2 = ⓑ{p,I}V2.T2 & c = ((↕*cV)∨cT) - | ∃∃cT,T. ⇧*[1] T ≘ T1 & ⦃G,L⦄ ⊢ T ⬈[Rt,cT,h] U2 & +lemma cpg_inv_bind1: ∀Rt,c,h,p,I,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈[Rt,c,h] U2 → + ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬈[Rt,cT,h] T2 & + U2 = ⓑ[p,I]V2.T2 & c = ((↕*cV)∨cT) + | ∃∃cT,T. ⇧*[1] T ≘ T1 & ❪G,L❫ ⊢ T ⬈[Rt,cT,h] U2 & p = true & I = Abbr & c = cT+𝟙𝟘. /2 width=3 by cpg_inv_bind1_aux/ qed-. -lemma cpg_inv_abbr1: ∀Rt,c,h,p,G,L,V1,T1,U2. ⦃G,L⦄ ⊢ ⓓ{p}V1.T1 ⬈[Rt,c,h] U2 → - ∨∨ ∃∃cV,cT,V2,T2. ⦃G,L⦄ ⊢ V1 ⬈[Rt,cV,h] V2 & ⦃G,L.ⓓV1⦄ ⊢ T1 ⬈[Rt,cT,h] T2 & - U2 = ⓓ{p}V2.T2 & c = ((↕*cV)∨cT) - | ∃∃cT,T. ⇧*[1] T ≘ T1 & ⦃G,L⦄ ⊢ T ⬈[Rt,cT,h] U2 & +lemma cpg_inv_abbr1: ∀Rt,c,h,p,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓓ[p]V1.T1 ⬈[Rt,c,h] U2 → + ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ❪G,L.ⓓV1❫ ⊢ T1 ⬈[Rt,cT,h] T2 & + U2 = ⓓ[p]V2.T2 & c = ((↕*cV)∨cT) + | ∃∃cT,T. ⇧*[1] T ≘ T1 & ❪G,L❫ ⊢ T ⬈[Rt,cT,h] U2 & p = true & c = cT+𝟙𝟘. #Rt #c #h #p #G #L #V1 #T1 #U2 #H elim (cpg_inv_bind1 … H) -H * /3 width=8 by ex4_4_intro, ex4_2_intro, or_introl, or_intror/ qed-. -lemma cpg_inv_abst1: ∀Rt,c,h,p,G,L,V1,T1,U2. ⦃G,L⦄ ⊢ ⓛ{p}V1.T1 ⬈[Rt,c,h] U2 → - ∃∃cV,cT,V2,T2. ⦃G,L⦄ ⊢ V1 ⬈[Rt,cV,h] V2 & ⦃G,L.ⓛV1⦄ ⊢ T1 ⬈[Rt,cT,h] T2 & - U2 = ⓛ{p}V2.T2 & c = ((↕*cV)∨cT). +lemma cpg_inv_abst1: ∀Rt,c,h,p,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓛ[p]V1.T1 ⬈[Rt,c,h] U2 → + ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ❪G,L.ⓛV1❫ ⊢ T1 ⬈[Rt,cT,h] T2 & + U2 = ⓛ[p]V2.T2 & c = ((↕*cV)∨cT). #Rt #c #h #p #G #L #V1 #T1 #U2 #H elim (cpg_inv_bind1 … H) -H * [ /3 width=8 by ex4_4_intro/ | #c #T #_ #_ #_ #H destruct ] qed-. -fact cpg_inv_appl1_aux: ∀Rt,c,h,G,L,U,U2. ⦃G,L⦄ ⊢ U ⬈[Rt,c,h] U2 → +fact cpg_inv_appl1_aux: ∀Rt,c,h,G,L,U,U2. ❪G,L❫ ⊢ U ⬈[Rt,c,h] U2 → ∀V1,U1. U = ⓐV1.U1 → - ∨∨ ∃∃cV,cT,V2,T2. ⦃G,L⦄ ⊢ V1 ⬈[Rt,cV,h] V2 & ⦃G,L⦄ ⊢ U1 ⬈[Rt,cT,h] T2 & + ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ❪G,L❫ ⊢ U1 ⬈[Rt,cT,h] T2 & U2 = ⓐV2.T2 & c = ((↕*cV)∨cT) - | ∃∃cV,cW,cT,p,V2,W1,W2,T1,T2. ⦃G,L⦄ ⊢ V1 ⬈[Rt,cV,h] V2 & ⦃G,L⦄ ⊢ W1 ⬈[Rt,cW,h] W2 & ⦃G,L.ⓛW1⦄ ⊢ T1 ⬈[Rt,cT,h] T2 & - U1 = ⓛ{p}W1.T1 & U2 = ⓓ{p}ⓝW2.V2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘 - | ∃∃cV,cW,cT,p,V,V2,W1,W2,T1,T2. ⦃G,L⦄ ⊢ V1 ⬈[Rt,cV,h] V & ⇧*[1] V ≘ V2 & ⦃G,L⦄ ⊢ W1 ⬈[Rt,cW,h] W2 & ⦃G,L.ⓓW1⦄ ⊢ T1 ⬈[Rt,cT,h] T2 & - U1 = ⓓ{p}W1.T1 & U2 = ⓓ{p}W2.ⓐV2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘. + | ∃∃cV,cW,cT,p,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ❪G,L❫ ⊢ W1 ⬈[Rt,cW,h] W2 & ❪G,L.ⓛW1❫ ⊢ T1 ⬈[Rt,cT,h] T2 & + U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘 + | ∃∃cV,cW,cT,p,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V & ⇧*[1] V ≘ V2 & ❪G,L❫ ⊢ W1 ⬈[Rt,cW,h] W2 & ❪G,L.ⓓW1❫ ⊢ T1 ⬈[Rt,cT,h] T2 & + U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘. #Rt #c #h #G #L #U #U2 * -c -G -L -U -U2 [ #I #G #L #W #U1 #H destruct | #G #L #s #W #U1 #H destruct @@ -229,21 +229,21 @@ fact cpg_inv_appl1_aux: ∀Rt,c,h,G,L,U,U2. ⦃G,L⦄ ⊢ U ⬈[Rt,c,h] U2 → ] qed-. -lemma cpg_inv_appl1: ∀Rt,c,h,G,L,V1,U1,U2. ⦃G,L⦄ ⊢ ⓐV1.U1 ⬈[Rt,c,h] U2 → - ∨∨ ∃∃cV,cT,V2,T2. ⦃G,L⦄ ⊢ V1 ⬈[Rt,cV,h] V2 & ⦃G,L⦄ ⊢ U1 ⬈[Rt,cT,h] T2 & +lemma cpg_inv_appl1: ∀Rt,c,h,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓐV1.U1 ⬈[Rt,c,h] U2 → + ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ❪G,L❫ ⊢ U1 ⬈[Rt,cT,h] T2 & U2 = ⓐV2.T2 & c = ((↕*cV)∨cT) - | ∃∃cV,cW,cT,p,V2,W1,W2,T1,T2. ⦃G,L⦄ ⊢ V1 ⬈[Rt,cV,h] V2 & ⦃G,L⦄ ⊢ W1 ⬈[Rt,cW,h] W2 & ⦃G,L.ⓛW1⦄ ⊢ T1 ⬈[Rt,cT,h] T2 & - U1 = ⓛ{p}W1.T1 & U2 = ⓓ{p}ⓝW2.V2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘 - | ∃∃cV,cW,cT,p,V,V2,W1,W2,T1,T2. ⦃G,L⦄ ⊢ V1 ⬈[Rt,cV,h] V & ⇧*[1] V ≘ V2 & ⦃G,L⦄ ⊢ W1 ⬈[Rt,cW,h] W2 & ⦃G,L.ⓓW1⦄ ⊢ T1 ⬈[Rt,cT,h] T2 & - U1 = ⓓ{p}W1.T1 & U2 = ⓓ{p}W2.ⓐV2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘. + | ∃∃cV,cW,cT,p,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ❪G,L❫ ⊢ W1 ⬈[Rt,cW,h] W2 & ❪G,L.ⓛW1❫ ⊢ T1 ⬈[Rt,cT,h] T2 & + U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘 + | ∃∃cV,cW,cT,p,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V & ⇧*[1] V ≘ V2 & ❪G,L❫ ⊢ W1 ⬈[Rt,cW,h] W2 & ❪G,L.ⓓW1❫ ⊢ T1 ⬈[Rt,cT,h] T2 & + U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘. /2 width=3 by cpg_inv_appl1_aux/ qed-. -fact cpg_inv_cast1_aux: ∀Rt,c,h,G,L,U,U2. ⦃G,L⦄ ⊢ U ⬈[Rt,c,h] U2 → +fact cpg_inv_cast1_aux: ∀Rt,c,h,G,L,U,U2. ❪G,L❫ ⊢ U ⬈[Rt,c,h] U2 → ∀V1,U1. U = ⓝV1.U1 → - ∨∨ ∃∃cV,cT,V2,T2. ⦃G,L⦄ ⊢ V1 ⬈[Rt,cV,h] V2 & ⦃G,L⦄ ⊢ U1 ⬈[Rt,cT,h] T2 & + ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ❪G,L❫ ⊢ U1 ⬈[Rt,cT,h] T2 & Rt cV cT & U2 = ⓝV2.T2 & c = (cV∨cT) - | ∃∃cT. ⦃G,L⦄ ⊢ U1 ⬈[Rt,cT,h] U2 & c = cT+𝟙𝟘 - | ∃∃cV. ⦃G,L⦄ ⊢ V1 ⬈[Rt,cV,h] U2 & c = cV+𝟘𝟙. + | ∃∃cT. ❪G,L❫ ⊢ U1 ⬈[Rt,cT,h] U2 & c = cT+𝟙𝟘 + | ∃∃cV. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] U2 & c = cV+𝟘𝟙. #Rt #c #h #G #L #U #U2 * -c -G -L -U -U2 [ #I #G #L #W #U1 #H destruct | #G #L #s #W #U1 #H destruct @@ -261,37 +261,37 @@ fact cpg_inv_cast1_aux: ∀Rt,c,h,G,L,U,U2. ⦃G,L⦄ ⊢ U ⬈[Rt,c,h] U2 → ] qed-. -lemma cpg_inv_cast1: ∀Rt,c,h,G,L,V1,U1,U2. ⦃G,L⦄ ⊢ ⓝV1.U1 ⬈[Rt,c,h] U2 → - ∨∨ ∃∃cV,cT,V2,T2. ⦃G,L⦄ ⊢ V1 ⬈[Rt,cV,h] V2 & ⦃G,L⦄ ⊢ U1 ⬈[Rt,cT,h] T2 & +lemma cpg_inv_cast1: ∀Rt,c,h,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓝV1.U1 ⬈[Rt,c,h] U2 → + ∨∨ ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ❪G,L❫ ⊢ U1 ⬈[Rt,cT,h] T2 & Rt cV cT & U2 = ⓝV2.T2 & c = (cV∨cT) - | ∃∃cT. ⦃G,L⦄ ⊢ U1 ⬈[Rt,cT,h] U2 & c = cT+𝟙𝟘 - | ∃∃cV. ⦃G,L⦄ ⊢ V1 ⬈[Rt,cV,h] U2 & c = cV+𝟘𝟙. + | ∃∃cT. ❪G,L❫ ⊢ U1 ⬈[Rt,cT,h] U2 & c = cT+𝟙𝟘 + | ∃∃cV. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] U2 & c = cV+𝟘𝟙. /2 width=3 by cpg_inv_cast1_aux/ qed-. (* Advanced inversion lemmas ************************************************) -lemma cpg_inv_zero1_pair: ∀Rt,c,h,I,G,K,V1,T2. ⦃G,K.ⓑ{I}V1⦄ ⊢ #0 ⬈[Rt,c,h] T2 → +lemma cpg_inv_zero1_pair: ∀Rt,c,h,I,G,K,V1,T2. ❪G,K.ⓑ[I]V1❫ ⊢ #0 ⬈[Rt,c,h] T2 → ∨∨ T2 = #0 ∧ c = 𝟘𝟘 - | ∃∃cV,V2. ⦃G,K⦄ ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 & + | ∃∃cV,V2. ❪G,K❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 & I = Abbr & c = cV - | ∃∃cV,V2. ⦃G,K⦄ ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 & + | ∃∃cV,V2. ❪G,K❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 & I = Abst & c = cV+𝟘𝟙. #Rt #c #h #I #G #K #V1 #T2 #H elim (cpg_inv_zero1 … H) -H /2 width=1 by or3_intro0/ * #z #Y #X1 #X2 #HX12 #HXT2 #H1 #H2 destruct /3 width=5 by or3_intro1, or3_intro2, ex4_2_intro/ qed-. -lemma cpg_inv_lref1_bind: ∀Rt,c,h,I,G,K,T2,i. ⦃G,K.ⓘ{I}⦄ ⊢ #↑i ⬈[Rt,c,h] T2 → +lemma cpg_inv_lref1_bind: ∀Rt,c,h,I,G,K,T2,i. ❪G,K.ⓘ[I]❫ ⊢ #↑i ⬈[Rt,c,h] T2 → ∨∨ T2 = #(↑i) ∧ c = 𝟘𝟘 - | ∃∃T. ⦃G,K⦄ ⊢ #i ⬈[Rt,c,h] T & ⇧*[1] T ≘ T2. + | ∃∃T. ❪G,K❫ ⊢ #i ⬈[Rt,c,h] T & ⇧*[1] T ≘ T2. #Rt #c #h #I #G #L #T2 #i #H elim (cpg_inv_lref1 … H) -H /2 width=1 by or_introl/ * #Z #Y #T #HT #HT2 #H destruct /3 width=3 by ex2_intro, or_intror/ qed-. (* Basic forward lemmas *****************************************************) -lemma cpg_fwd_bind1_minus: ∀Rt,c,h,I,G,L,V1,T1,T. ⦃G,L⦄ ⊢ -ⓑ{I}V1.T1 ⬈[Rt,c,h] T → ∀p. - ∃∃V2,T2. ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T1 ⬈[Rt,c,h] ⓑ{p,I}V2.T2 & - T = -ⓑ{I}V2.T2. +lemma cpg_fwd_bind1_minus: ∀Rt,c,h,I,G,L,V1,T1,T. ❪G,L❫ ⊢ -ⓑ[I]V1.T1 ⬈[Rt,c,h] T → ∀p. + ∃∃V2,T2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈[Rt,c,h] ⓑ[p,I]V2.T2 & + T = -ⓑ[I]V2.T2. #Rt #c #h #I #G #L #V1 #T1 #T #H #p elim (cpg_inv_bind1 … H) -H * [ #cV #cT #V2 #T2 #HV12 #HT12 #H1 #H2 destruct /3 width=4 by cpg_bind, ex2_2_intro/ | #c #T2 #_ #_ #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_drops.ma index 482a4b126..6bfc84c4e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_drops.ma @@ -22,33 +22,33 @@ include "basic_2/rt_transition/cpg.ma". (* Advanced properties ******************************************************) -lemma cpg_delta_drops: ∀Rt,c,h,G,K,V,V2,i,L,T2. ⇩*[i] L ≘ K.ⓓV → ⦃G,K⦄ ⊢ V ⬈[Rt,c,h] V2 → - ⇧*[↑i] V2 ≘ T2 → ⦃G,L⦄ ⊢ #i ⬈[Rt,c,h] T2. +lemma cpg_delta_drops: ∀Rt,c,h,G,K,V,V2,i,L,T2. ⇩*[i] L ≘ K.ⓓV → ❪G,K❫ ⊢ V ⬈[Rt,c,h] V2 → + ⇧*[↑i] V2 ≘ T2 → ❪G,L❫ ⊢ #i ⬈[Rt,c,h] T2. #Rt #c #h #G #K #V #V2 #i elim i -i [ #L #T2 #HLK lapply (drops_fwd_isid … HLK ?) // #H destruct /3 width=3 by cpg_delta/ | #i #IH #L0 #T0 #H0 #HV2 #HVT2 elim (drops_inv_succ … H0) -H0 #I #L #HLK #H destruct - elim (lifts_split_trans … HVT2 (𝐔❴↑i❵) (𝐔❴1❵) ?) -HVT2 /3 width=3 by cpg_lref/ + elim (lifts_split_trans … HVT2 (𝐔❨↑i❩) (𝐔❨1❩) ?) -HVT2 /3 width=3 by cpg_lref/ ] qed. -lemma cpg_ell_drops: ∀Rt,c,h,G,K,V,V2,i,L,T2. ⇩*[i] L ≘ K.ⓛV → ⦃G,K⦄ ⊢ V ⬈[Rt,c,h] V2 → - ⇧*[↑i] V2 ≘ T2 → ⦃G,L⦄ ⊢ #i ⬈[Rt,c+𝟘𝟙,h] T2. +lemma cpg_ell_drops: ∀Rt,c,h,G,K,V,V2,i,L,T2. ⇩*[i] L ≘ K.ⓛV → ❪G,K❫ ⊢ V ⬈[Rt,c,h] V2 → + ⇧*[↑i] V2 ≘ T2 → ❪G,L❫ ⊢ #i ⬈[Rt,c+𝟘𝟙,h] T2. #Rt #c #h #G #K #V #V2 #i elim i -i [ #L #T2 #HLK lapply (drops_fwd_isid … HLK ?) // #H destruct /3 width=3 by cpg_ell/ | #i #IH #L0 #T0 #H0 #HV2 #HVT2 elim (drops_inv_succ … H0) -H0 #I #L #HLK #H destruct - elim (lifts_split_trans … HVT2 (𝐔❴↑i❵) (𝐔❴1❵) ?) -HVT2 /3 width=3 by cpg_lref/ + elim (lifts_split_trans … HVT2 (𝐔❨↑i❩) (𝐔❨1❩) ?) -HVT2 /3 width=3 by cpg_lref/ ] qed. (* Advanced inversion lemmas ************************************************) -lemma cpg_inv_lref1_drops: ∀Rt,c,h,G,i,L,T2. ⦃G,L⦄ ⊢ #i ⬈[Rt,c,h] T2 → +lemma cpg_inv_lref1_drops: ∀Rt,c,h,G,i,L,T2. ❪G,L❫ ⊢ #i ⬈[Rt,c,h] T2 → ∨∨ T2 = #i ∧ c = 𝟘𝟘 - | ∃∃cV,K,V,V2. ⇩*[i] L ≘ K.ⓓV & ⦃G,K⦄ ⊢ V ⬈[Rt,cV,h] V2 & + | ∃∃cV,K,V,V2. ⇩*[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ⬈[Rt,cV,h] V2 & ⇧*[↑i] V2 ≘ T2 & c = cV - | ∃∃cV,K,V,V2. ⇩*[i] L ≘ K.ⓛV & ⦃G,K⦄ ⊢ V ⬈[Rt,cV,h] V2 & + | ∃∃cV,K,V,V2. ⇩*[i] L ≘ K.ⓛV & ❪G,K❫ ⊢ V ⬈[Rt,cV,h] V2 & ⇧*[↑i] V2 ≘ T2 & c = cV + 𝟘𝟙. #Rt #c #h #G #i elim i -i [ #L #T2 #H elim (cpg_inv_zero1 … H) -H * /3 width=1 by or3_intro0, conj/ @@ -62,12 +62,12 @@ lemma cpg_inv_lref1_drops: ∀Rt,c,h,G,i,L,T2. ⦃G,L⦄ ⊢ #i ⬈[Rt,c,h] T2 ] qed-. -lemma cpg_inv_atom1_drops: ∀Rt,c,h,I,G,L,T2. ⦃G,L⦄ ⊢ ⓪{I} ⬈[Rt,c,h] T2 → - ∨∨ T2 = ⓪{I} ∧ c = 𝟘𝟘 +lemma cpg_inv_atom1_drops: ∀Rt,c,h,I,G,L,T2. ❪G,L❫ ⊢ ⓪[I] ⬈[Rt,c,h] T2 → + ∨∨ T2 = ⓪[I] ∧ c = 𝟘𝟘 | ∃∃s. T2 = ⋆(⫯[h]s) & I = Sort s & c = 𝟘𝟙 - | ∃∃cV,i,K,V,V2. ⇩*[i] L ≘ K.ⓓV & ⦃G,K⦄ ⊢ V ⬈[Rt,cV,h] V2 & + | ∃∃cV,i,K,V,V2. ⇩*[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ⬈[Rt,cV,h] V2 & ⇧*[↑i] V2 ≘ T2 & I = LRef i & c = cV - | ∃∃cV,i,K,V,V2. ⇩*[i] L ≘ K.ⓛV & ⦃G,K⦄ ⊢ V ⬈[Rt,cV,h] V2 & + | ∃∃cV,i,K,V,V2. ⇩*[i] L ≘ K.ⓛV & ❪G,K❫ ⊢ V ⬈[Rt,cV,h] V2 & ⇧*[↑i] V2 ≘ T2 & I = LRef i & c = cV + 𝟘𝟙. #Rt #c #h * #n #G #L #T2 #H [ elim (cpg_inv_sort1 … H) -H * @@ -101,7 +101,7 @@ lemma cpg_lifts_sn: ∀Rt. reflexive … Rt → elim (drops_inv_skip2 … HY) -HY #Z #L0 #HLK0 #HZ #H destruct elim (liftsb_inv_pair_sn … HZ) -HZ #W #HVW #H destruct elim (IH … HV2 … HLK0 … HVW) -IH /2 width=2 by fqup_lref/ -K -K0 -V #W2 #HVW2 #HW2 - elim (lifts_total W2 (𝐔❴↑i2❵)) #U2 #HWU2 + elim (lifts_total W2 (𝐔❨↑i2❩)) #U2 #HWU2 lapply (lifts_trans … HVW2 … HWU2 ??) -HVW2 [3,6: |*: // ] #HVU2 lapply (lifts_conf … HVT2 … HVU2 f ?) -V2 [1,3: /2 width=3 by after_uni_succ_sn/ ] /4 width=8 by cpg_ell_drops, cpg_delta_drops, drops_inv_gen, ex2_intro/ @@ -139,7 +139,7 @@ lemma cpg_lifts_sn: ∀Rt. reflexive … Rt → elim (IH … HV12 … HLK … HVW1) -HV12 -HVW1 // #W2 #HVW2 #HW12 elim (IH … HY12 … HLK … HYZ1) -HY12 // elim (IH … HT12 … HTU1) -IH -HT12 -HTU1 [ |*: /3 width=3 by drops_skip, ext2_pair/ ] - elim (lifts_total W2 (𝐔❴1❵)) #W20 #HW20 + elim (lifts_total W2 (𝐔❨1❩)) #W20 #HW20 lapply (lifts_trans … HVW2 … HW20 ??) -HVW2 [3: |*: // ] #H lapply (lifts_conf … HV20 … H (⫯f) ?) -V2 /2 width=3 by after_uni_one_sn/ /4 width=9 by cpg_theta, lifts_bind, lifts_flat, ex2_intro/ @@ -179,7 +179,7 @@ lemma cpg_inv_lifts_sn: ∀Rt. reflexive … Rt → [ #H1 #H2 destruct /3 width=3 by cpg_refl, ex2_intro/ ] #cW #L0 #W #W2 #HL0 #HW2 #HWU2 #H destruct elim (lifts_inv_lref2 … H1) -H1 #i1 #Hf #H destruct - lapply (drops_split_div … HLK (𝐔❴i1❵) ???) -HLK [4,8: * |*: // ] #Y0 #HK0 #HLY0 + lapply (drops_split_div … HLK (𝐔❨i1❩) ???) -HLK [4,8: * |*: // ] #Y0 #HK0 #HLY0 lapply (drops_conf … HL0 … HLY0 ??) -HLY0 [3,6: |*: /2 width=6 by after_uni_dx/ ] #HLY0 lapply (drops_tls_at … Hf … HLY0) -HLY0 #HLY0 elim (drops_inv_skip1 … HLY0) -HLY0 #Z #K0 #HLK0 #HZ #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_simple.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_simple.ma index 7d4b85f06..4785791d0 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_simple.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_simple.ma @@ -20,8 +20,8 @@ include "basic_2/rt_transition/cpg.ma". (* Properties with simple terms *********************************************) (* Note: the main property of simple terms *) -lemma cpg_inv_appl1_simple: ∀Rt,c,h,G,L,V1,T1,U. ⦃G,L⦄ ⊢ ⓐV1.T1 ⬈[Rt,c,h] U → 𝐒⦃T1⦄ → - ∃∃cV,cT,V2,T2. ⦃G,L⦄ ⊢ V1 ⬈[Rt,cV,h] V2 & ⦃G,L⦄ ⊢ T1 ⬈[Rt,cT,h] T2 & +lemma cpg_inv_appl1_simple: ∀Rt,c,h,G,L,V1,T1,U. ❪G,L❫ ⊢ ⓐV1.T1 ⬈[Rt,c,h] U → 𝐒❪T1❫ → + ∃∃cV,cT,V2,T2. ❪G,L❫ ⊢ V1 ⬈[Rt,cV,h] V2 & ❪G,L❫ ⊢ T1 ⬈[Rt,cT,h] T2 & U = ⓐV2.T2 & c = ((↕*cV)∨cT). #Rt #c #h #G #L #V1 #T1 #U #H #HT1 elim (cpg_inv_appl1 … H) -H * [ /2 width=8 by ex4_4_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm.ma index f161bf061..f9a51d5b6 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm.ma @@ -24,7 +24,7 @@ include "basic_2/rt_transition/cpg.ma". (* Basic_2A1: includes: cpr *) definition cpm (h) (G) (L) (n): relation2 term term ≝ - λT1,T2. ∃∃c. 𝐑𝐓⦃n,c⦄ & ⦃G,L⦄ ⊢ T1 ⬈[eq_t,c,h] T2. + λT1,T2. ∃∃c. 𝐑𝐓❪n,c❫ & ❪G,L❫ ⊢ T1 ⬈[eq_t,c,h] T2. interpretation "t-bound context-sensitive parallel rt-transition (term)" @@ -36,81 +36,81 @@ interpretation (* Basic properties *********************************************************) -lemma cpm_ess: ∀h,G,L,s. ⦃G,L⦄ ⊢ ⋆s ➡[1,h] ⋆(⫯[h]s). +lemma cpm_ess: ∀h,G,L,s. ❪G,L❫ ⊢ ⋆s ➡[1,h] ⋆(⫯[h]s). /2 width=3 by cpg_ess, ex2_intro/ qed. -lemma cpm_delta: ∀n,h,G,K,V1,V2,W2. ⦃G,K⦄ ⊢ V1 ➡[n,h] V2 → - ⇧*[1] V2 ≘ W2 → ⦃G,K.ⓓV1⦄ ⊢ #0 ➡[n,h] W2. +lemma cpm_delta: ∀n,h,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ➡[n,h] V2 → + ⇧*[1] V2 ≘ W2 → ❪G,K.ⓓV1❫ ⊢ #0 ➡[n,h] W2. #n #h #G #K #V1 #V2 #W2 * /3 width=5 by cpg_delta, ex2_intro/ qed. -lemma cpm_ell: ∀n,h,G,K,V1,V2,W2. ⦃G,K⦄ ⊢ V1 ➡[n,h] V2 → - ⇧*[1] V2 ≘ W2 → ⦃G,K.ⓛV1⦄ ⊢ #0 ➡[↑n,h] W2. +lemma cpm_ell: ∀n,h,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ➡[n,h] V2 → + ⇧*[1] V2 ≘ W2 → ❪G,K.ⓛV1❫ ⊢ #0 ➡[↑n,h] W2. #n #h #G #K #V1 #V2 #W2 * /3 width=5 by cpg_ell, ex2_intro, isrt_succ/ qed. -lemma cpm_lref: ∀n,h,I,G,K,T,U,i. ⦃G,K⦄ ⊢ #i ➡[n,h] T → - ⇧*[1] T ≘ U → ⦃G,K.ⓘ{I}⦄ ⊢ #↑i ➡[n,h] U. +lemma cpm_lref: ∀n,h,I,G,K,T,U,i. ❪G,K❫ ⊢ #i ➡[n,h] T → + ⇧*[1] T ≘ U → ❪G,K.ⓘ[I]❫ ⊢ #↑i ➡[n,h] U. #n #h #I #G #K #T #U #i * /3 width=5 by cpg_lref, ex2_intro/ qed. (* Basic_2A1: includes: cpr_bind *) lemma cpm_bind: ∀n,h,p,I,G,L,V1,V2,T1,T2. - ⦃G,L⦄ ⊢ V1 ➡[h] V2 → ⦃G,L.ⓑ{I}V1⦄ ⊢ T1 ➡[n,h] T2 → - ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T1 ➡[n,h] ⓑ{p,I}V2.T2. + ❪G,L❫ ⊢ V1 ➡[h] V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡[n,h] T2 → + ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡[n,h] ⓑ[p,I]V2.T2. #n #h #p #I #G #L #V1 #V2 #T1 #T2 * #cV #HcV #HV12 * /5 width=5 by cpg_bind, isrt_max_O1, isr_shift, ex2_intro/ qed. lemma cpm_appl: ∀n,h,G,L,V1,V2,T1,T2. - ⦃G,L⦄ ⊢ V1 ➡[h] V2 → ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → - ⦃G,L⦄ ⊢ ⓐV1.T1 ➡[n,h] ⓐV2.T2. + ❪G,L❫ ⊢ V1 ➡[h] V2 → ❪G,L❫ ⊢ T1 ➡[n,h] T2 → + ❪G,L❫ ⊢ ⓐV1.T1 ➡[n,h] ⓐV2.T2. #n #h #G #L #V1 #V2 #T1 #T2 * #cV #HcV #HV12 * /5 width=5 by isrt_max_O1, isr_shift, cpg_appl, ex2_intro/ qed. lemma cpm_cast: ∀n,h,G,L,U1,U2,T1,T2. - ⦃G,L⦄ ⊢ U1 ➡[n,h] U2 → ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → - ⦃G,L⦄ ⊢ ⓝU1.T1 ➡[n,h] ⓝU2.T2. + ❪G,L❫ ⊢ U1 ➡[n,h] U2 → ❪G,L❫ ⊢ T1 ➡[n,h] T2 → + ❪G,L❫ ⊢ ⓝU1.T1 ➡[n,h] ⓝU2.T2. #n #h #G #L #U1 #U2 #T1 #T2 * #cU #HcU #HU12 * /4 width=6 by cpg_cast, isrt_max_idem1, isrt_mono, ex2_intro/ qed. (* Basic_2A1: includes: cpr_zeta *) lemma cpm_zeta (n) (h) (G) (L): - ∀T1,T. ⇧*[1] T ≘ T1 → ∀T2. ⦃G,L⦄ ⊢ T ➡[n,h] T2 → - ∀V. ⦃G,L⦄ ⊢ +ⓓV.T1 ➡[n,h] T2. + ∀T1,T. ⇧*[1] T ≘ T1 → ∀T2. ❪G,L❫ ⊢ T ➡[n,h] T2 → + ∀V. ❪G,L❫ ⊢ +ⓓV.T1 ➡[n,h] T2. #n #h #G #L #T1 #T #HT1 #T2 * /3 width=5 by cpg_zeta, isrt_plus_O2, ex2_intro/ qed. (* Basic_2A1: includes: cpr_eps *) -lemma cpm_eps: ∀n,h,G,L,V,T1,T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → ⦃G,L⦄ ⊢ ⓝV.T1 ➡[n,h] T2. +lemma cpm_eps: ∀n,h,G,L,V,T1,T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 → ❪G,L❫ ⊢ ⓝV.T1 ➡[n,h] T2. #n #h #G #L #V #T1 #T2 * /3 width=3 by cpg_eps, isrt_plus_O2, ex2_intro/ qed. -lemma cpm_ee: ∀n,h,G,L,V1,V2,T. ⦃G,L⦄ ⊢ V1 ➡[n,h] V2 → ⦃G,L⦄ ⊢ ⓝV1.T ➡[↑n,h] V2. +lemma cpm_ee: ∀n,h,G,L,V1,V2,T. ❪G,L❫ ⊢ V1 ➡[n,h] V2 → ❪G,L❫ ⊢ ⓝV1.T ➡[↑n,h] V2. #n #h #G #L #V1 #V2 #T * /3 width=3 by cpg_ee, isrt_succ, ex2_intro/ qed. (* Basic_2A1: includes: cpr_beta *) lemma cpm_beta: ∀n,h,p,G,L,V1,V2,W1,W2,T1,T2. - ⦃G,L⦄ ⊢ V1 ➡[h] V2 → ⦃G,L⦄ ⊢ W1 ➡[h] W2 → ⦃G,L.ⓛW1⦄ ⊢ T1 ➡[n,h] T2 → - ⦃G,L⦄ ⊢ ⓐV1.ⓛ{p}W1.T1 ➡[n,h] ⓓ{p}ⓝW2.V2.T2. + ❪G,L❫ ⊢ V1 ➡[h] V2 → ❪G,L❫ ⊢ W1 ➡[h] W2 → ❪G,L.ⓛW1❫ ⊢ T1 ➡[n,h] T2 → + ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ➡[n,h] ⓓ[p]ⓝW2.V2.T2. #n #h #p #G #L #V1 #V2 #W1 #W2 #T1 #T2 * #riV #rhV #HV12 * #riW #rhW #HW12 * /6 width=7 by cpg_beta, isrt_plus_O2, isrt_max, isr_shift, ex2_intro/ qed. (* Basic_2A1: includes: cpr_theta *) lemma cpm_theta: ∀n,h,p,G,L,V1,V,V2,W1,W2,T1,T2. - ⦃G,L⦄ ⊢ V1 ➡[h] V → ⇧*[1] V ≘ V2 → ⦃G,L⦄ ⊢ W1 ➡[h] W2 → - ⦃G,L.ⓓW1⦄ ⊢ T1 ➡[n,h] T2 → - ⦃G,L⦄ ⊢ ⓐV1.ⓓ{p}W1.T1 ➡[n,h] ⓓ{p}W2.ⓐV2.T2. + ❪G,L❫ ⊢ V1 ➡[h] V → ⇧*[1] V ≘ V2 → ❪G,L❫ ⊢ W1 ➡[h] W2 → + ❪G,L.ⓓW1❫ ⊢ T1 ➡[n,h] T2 → + ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ➡[n,h] ⓓ[p]W2.ⓐV2.T2. #n #h #p #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 * #riV #rhV #HV1 #HV2 * #riW #rhW #HW12 * /6 width=9 by cpg_theta, isrt_plus_O2, isrt_max, isr_shift, ex2_intro/ qed. @@ -126,22 +126,22 @@ lemma cpr_refl: ∀h,G,L. reflexive … (cpm h G L 0). (* Advanced properties ******************************************************) lemma cpm_sort (h) (G) (L): - ∀n. n ≤ 1 → ∀s. ⦃G,L⦄ ⊢ ⋆s ➡[n,h] ⋆((next h)^n s). + ∀n. n ≤ 1 → ∀s. ❪G,L❫ ⊢ ⋆s ➡[n,h] ⋆((next h)^n s). #h #G #L * // #n #H #s <(le_n_O_to_eq n) /2 width=1 by le_S_S_to_le/ qed. (* Basic inversion lemmas ***************************************************) -lemma cpm_inv_atom1: ∀n,h,J,G,L,T2. ⦃G,L⦄ ⊢ ⓪{J} ➡[n,h] T2 → - ∨∨ T2 = ⓪{J} ∧ n = 0 +lemma cpm_inv_atom1: ∀n,h,J,G,L,T2. ❪G,L❫ ⊢ ⓪[J] ➡[n,h] T2 → + ∨∨ T2 = ⓪[J] ∧ n = 0 | ∃∃s. T2 = ⋆(⫯[h]s) & J = Sort s & n = 1 - | ∃∃K,V1,V2. ⦃G,K⦄ ⊢ V1 ➡[n,h] V2 & ⇧*[1] V2 ≘ T2 & + | ∃∃K,V1,V2. ❪G,K❫ ⊢ V1 ➡[n,h] V2 & ⇧*[1] V2 ≘ T2 & L = K.ⓓV1 & J = LRef 0 - | ∃∃m,K,V1,V2. ⦃G,K⦄ ⊢ V1 ➡[m,h] V2 & ⇧*[1] V2 ≘ T2 & + | ∃∃m,K,V1,V2. ❪G,K❫ ⊢ V1 ➡[m,h] V2 & ⇧*[1] V2 ≘ T2 & L = K.ⓛV1 & J = LRef 0 & n = ↑m - | ∃∃I,K,T,i. ⦃G,K⦄ ⊢ #i ➡[n,h] T & ⇧*[1] T ≘ T2 & - L = K.ⓘ{I} & J = LRef (↑i). + | ∃∃I,K,T,i. ❪G,K❫ ⊢ #i ➡[n,h] T & ⇧*[1] T ≘ T2 & + L = K.ⓘ[I] & J = LRef (↑i). #n #h #J #G #L #T2 * #c #Hc #H elim (cpg_inv_atom1 … H) -H * [ #H1 #H2 destruct /4 width=1 by isrt_inv_00, or5_intro0, conj/ | #s #H1 #H2 #H3 destruct /4 width=3 by isrt_inv_01, or5_intro1, ex3_intro/ @@ -155,7 +155,7 @@ lemma cpm_inv_atom1: ∀n,h,J,G,L,T2. ⦃G,L⦄ ⊢ ⓪{J} ➡[n,h] T2 → ] qed-. -lemma cpm_inv_sort1: ∀n,h,G,L,T2,s. ⦃G,L⦄ ⊢ ⋆s ➡[n,h] T2 → +lemma cpm_inv_sort1: ∀n,h,G,L,T2,s. ❪G,L❫ ⊢ ⋆s ➡[n,h] T2 → ∧∧ T2 = ⋆(((next h)^n) s) & n ≤ 1. #n #h #G #L #T2 #s * #c #Hc #H elim (cpg_inv_sort1 … H) -H * #H1 #H2 destruct @@ -163,11 +163,11 @@ elim (cpg_inv_sort1 … H) -H * #H1 #H2 destruct #H destruct /2 width=1 by conj/ qed-. -lemma cpm_inv_zero1: ∀n,h,G,L,T2. ⦃G,L⦄ ⊢ #0 ➡[n,h] T2 → +lemma cpm_inv_zero1: ∀n,h,G,L,T2. ❪G,L❫ ⊢ #0 ➡[n,h] T2 → ∨∨ T2 = #0 ∧ n = 0 - | ∃∃K,V1,V2. ⦃G,K⦄ ⊢ V1 ➡[n,h] V2 & ⇧*[1] V2 ≘ T2 & + | ∃∃K,V1,V2. ❪G,K❫ ⊢ V1 ➡[n,h] V2 & ⇧*[1] V2 ≘ T2 & L = K.ⓓV1 - | ∃∃m,K,V1,V2. ⦃G,K⦄ ⊢ V1 ➡[m,h] V2 & ⇧*[1] V2 ≘ T2 & + | ∃∃m,K,V1,V2. ❪G,K❫ ⊢ V1 ➡[m,h] V2 & ⇧*[1] V2 ≘ T2 & L = K.ⓛV1 & n = ↑m. #n #h #G #L #T2 * #c #Hc #H elim (cpg_inv_zero1 … H) -H * [ #H1 #H2 destruct /4 width=1 by isrt_inv_00, or3_intro0, conj/ @@ -180,7 +180,7 @@ lemma cpm_inv_zero1: ∀n,h,G,L,T2. ⦃G,L⦄ ⊢ #0 ➡[n,h] T2 → qed-. lemma cpm_inv_zero1_unit (n) (h) (I) (K) (G): - ∀X2. ⦃G,K.ⓤ{I}⦄ ⊢ #0 ➡[n,h] X2 → ∧∧ X2 = #0 & n = 0. + ∀X2. ❪G,K.ⓤ[I]❫ ⊢ #0 ➡[n,h] X2 → ∧∧ X2 = #0 & n = 0. #n #h #I #G #K #X2 #H elim (cpm_inv_zero1 … H) -H * [ #H1 #H2 destruct /2 width=1 by conj/ @@ -189,9 +189,9 @@ elim (cpm_inv_zero1 … H) -H * ] qed. -lemma cpm_inv_lref1: ∀n,h,G,L,T2,i. ⦃G,L⦄ ⊢ #↑i ➡[n,h] T2 → +lemma cpm_inv_lref1: ∀n,h,G,L,T2,i. ❪G,L❫ ⊢ #↑i ➡[n,h] T2 → ∨∨ T2 = #(↑i) ∧ n = 0 - | ∃∃I,K,T. ⦃G,K⦄ ⊢ #i ➡[n,h] T & ⇧*[1] T ≘ T2 & L = K.ⓘ{I}. + | ∃∃I,K,T. ❪G,K❫ ⊢ #i ➡[n,h] T & ⇧*[1] T ≘ T2 & L = K.ⓘ[I]. #n #h #G #L #T2 #i * #c #Hc #H elim (cpg_inv_lref1 … H) -H * [ #H1 #H2 destruct /4 width=1 by isrt_inv_00, or_introl, conj/ | #I #K #V2 #HV2 #HVT2 #H destruct @@ -200,7 +200,7 @@ lemma cpm_inv_lref1: ∀n,h,G,L,T2,i. ⦃G,L⦄ ⊢ #↑i ➡[n,h] T2 → qed-. lemma cpm_inv_lref1_ctop (n) (h) (G): - ∀X2,i. ⦃G,⋆⦄ ⊢ #i ➡[n,h] X2 → ∧∧ X2 = #i & n = 0. + ∀X2,i. ❪G,⋆❫ ⊢ #i ➡[n,h] X2 → ∧∧ X2 = #i & n = 0. #n #h #G #X2 * [| #i ] #H [ elim (cpm_inv_zero1 … H) -H * [ #H1 #H2 destruct /2 width=1 by conj/ @@ -214,16 +214,16 @@ lemma cpm_inv_lref1_ctop (n) (h) (G): ] qed. -lemma cpm_inv_gref1: ∀n,h,G,L,T2,l. ⦃G,L⦄ ⊢ §l ➡[n,h] T2 → T2 = §l ∧ n = 0. +lemma cpm_inv_gref1: ∀n,h,G,L,T2,l. ❪G,L❫ ⊢ §l ➡[n,h] T2 → T2 = §l ∧ n = 0. #n #h #G #L #T2 #l * #c #Hc #H elim (cpg_inv_gref1 … H) -H #H1 #H2 destruct /3 width=1 by isrt_inv_00, conj/ qed-. (* Basic_2A1: includes: cpr_inv_bind1 *) -lemma cpm_inv_bind1: ∀n,h,p,I,G,L,V1,T1,U2. ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T1 ➡[n,h] U2 → - ∨∨ ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 & ⦃G,L.ⓑ{I}V1⦄ ⊢ T1 ➡[n,h] T2 & - U2 = ⓑ{p,I}V2.T2 - | ∃∃T. ⇧*[1] T ≘ T1 & ⦃G,L⦄ ⊢ T ➡[n,h] U2 & +lemma cpm_inv_bind1: ∀n,h,p,I,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡[n,h] U2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 & ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡[n,h] T2 & + U2 = ⓑ[p,I]V2.T2 + | ∃∃T. ⇧*[1] T ≘ T1 & ❪G,L❫ ⊢ T ➡[n,h] U2 & p = true & I = Abbr. #n #h #p #I #G #L #V1 #T1 #U2 * #c #Hc #H elim (cpg_inv_bind1 … H) -H * [ #cV #cT #V2 #T2 #HV12 #HT12 #H1 #H2 destruct @@ -237,10 +237,10 @@ qed-. (* Basic_1: includes: pr0_gen_abbr pr2_gen_abbr *) (* Basic_2A1: includes: cpr_inv_abbr1 *) -lemma cpm_inv_abbr1: ∀n,h,p,G,L,V1,T1,U2. ⦃G,L⦄ ⊢ ⓓ{p}V1.T1 ➡[n,h] U2 → - ∨∨ ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 & ⦃G,L.ⓓV1⦄ ⊢ T1 ➡[n,h] T2 & - U2 = ⓓ{p}V2.T2 - | ∃∃T. ⇧*[1] T ≘ T1 & ⦃G,L⦄ ⊢ T ➡[n,h] U2 & p = true. +lemma cpm_inv_abbr1: ∀n,h,p,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓓ[p]V1.T1 ➡[n,h] U2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 & ❪G,L.ⓓV1❫ ⊢ T1 ➡[n,h] T2 & + U2 = ⓓ[p]V2.T2 + | ∃∃T. ⇧*[1] T ≘ T1 & ❪G,L❫ ⊢ T ➡[n,h] U2 & p = true. #n #h #p #G #L #V1 #T1 #U2 #H elim (cpm_inv_bind1 … H) -H [ /3 width=1 by or_introl/ @@ -250,9 +250,9 @@ qed-. (* Basic_1: includes: pr0_gen_abst pr2_gen_abst *) (* Basic_2A1: includes: cpr_inv_abst1 *) -lemma cpm_inv_abst1: ∀n,h,p,G,L,V1,T1,U2. ⦃G,L⦄ ⊢ ⓛ{p}V1.T1 ➡[n,h] U2 → - ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 & ⦃G,L.ⓛV1⦄ ⊢ T1 ➡[n,h] T2 & - U2 = ⓛ{p}V2.T2. +lemma cpm_inv_abst1: ∀n,h,p,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓛ[p]V1.T1 ➡[n,h] U2 → + ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 & ❪G,L.ⓛV1❫ ⊢ T1 ➡[n,h] T2 & + U2 = ⓛ[p]V2.T2. #n #h #p #G #L #V1 #T1 #U2 #H elim (cpm_inv_bind1 … H) -H [ /3 width=1 by or_introl/ @@ -260,8 +260,8 @@ elim (cpm_inv_bind1 … H) -H ] qed-. -lemma cpm_inv_abst_bi: ∀n,h,p1,p2,G,L,V1,V2,T1,T2. ⦃G,L⦄ ⊢ ⓛ{p1}V1.T1 ➡[n,h] ⓛ{p2}V2.T2 → - ∧∧ ⦃G,L⦄ ⊢ V1 ➡[h] V2 & ⦃G,L.ⓛV1⦄ ⊢ T1 ➡[n,h] T2 & p1 = p2. +lemma cpm_inv_abst_bi: ∀n,h,p1,p2,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ ⓛ[p1]V1.T1 ➡[n,h] ⓛ[p2]V2.T2 → + ∧∧ ❪G,L❫ ⊢ V1 ➡[h] V2 & ❪G,L.ⓛV1❫ ⊢ T1 ➡[n,h] T2 & p1 = p2. #n #h #p1 #p2 #G #L #V1 #V2 #T1 #T2 #H elim (cpm_inv_abst1 … H) -H #XV #XT #HV #HT #H destruct /2 width=1 by and3_intro/ @@ -269,15 +269,15 @@ qed-. (* Basic_1: includes: pr0_gen_appl pr2_gen_appl *) (* Basic_2A1: includes: cpr_inv_appl1 *) -lemma cpm_inv_appl1: ∀n,h,G,L,V1,U1,U2. ⦃G,L⦄ ⊢ ⓐ V1.U1 ➡[n,h] U2 → - ∨∨ ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 & ⦃G,L⦄ ⊢ U1 ➡[n,h] T2 & +lemma cpm_inv_appl1: ∀n,h,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓐ V1.U1 ➡[n,h] U2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 & ❪G,L❫ ⊢ U1 ➡[n,h] T2 & U2 = ⓐV2.T2 - | ∃∃p,V2,W1,W2,T1,T2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 & ⦃G,L⦄ ⊢ W1 ➡[h] W2 & - ⦃G,L.ⓛW1⦄ ⊢ T1 ➡[n,h] T2 & - U1 = ⓛ{p}W1.T1 & U2 = ⓓ{p}ⓝW2.V2.T2 - | ∃∃p,V,V2,W1,W2,T1,T2. ⦃G,L⦄ ⊢ V1 ➡[h] V & ⇧*[1] V ≘ V2 & - ⦃G,L⦄ ⊢ W1 ➡[h] W2 & ⦃G,L.ⓓW1⦄ ⊢ T1 ➡[n,h] T2 & - U1 = ⓓ{p}W1.T1 & U2 = ⓓ{p}W2.ⓐV2.T2. + | ∃∃p,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 & ❪G,L❫ ⊢ W1 ➡[h] W2 & + ❪G,L.ⓛW1❫ ⊢ T1 ➡[n,h] T2 & + U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 + | ∃∃p,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h] V & ⇧*[1] V ≘ V2 & + ❪G,L❫ ⊢ W1 ➡[h] W2 & ❪G,L.ⓓW1❫ ⊢ T1 ➡[n,h] T2 & + U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2. #n #h #G #L #V1 #U1 #U2 * #c #Hc #H elim (cpg_inv_appl1 … H) -H * [ #cV #cT #V2 #T2 #HV12 #HT12 #H1 #H2 destruct elim (isrt_inv_max … Hc) -Hc #nV #nT #HcV #HcT #H destruct @@ -300,11 +300,11 @@ lemma cpm_inv_appl1: ∀n,h,G,L,V1,U1,U2. ⦃G,L⦄ ⊢ ⓐ V1.U1 ➡[n,h] U2 ] qed-. -lemma cpm_inv_cast1: ∀n,h,G,L,V1,U1,U2. ⦃G,L⦄ ⊢ ⓝV1.U1 ➡[n,h] U2 → - ∨∨ ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ➡[n,h] V2 & ⦃G,L⦄ ⊢ U1 ➡[n,h] T2 & +lemma cpm_inv_cast1: ∀n,h,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓝV1.U1 ➡[n,h] U2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[n,h] V2 & ❪G,L❫ ⊢ U1 ➡[n,h] T2 & U2 = ⓝV2.T2 - | ⦃G,L⦄ ⊢ U1 ➡[n,h] U2 - | ∃∃m. ⦃G,L⦄ ⊢ V1 ➡[m,h] U2 & n = ↑m. + | ❪G,L❫ ⊢ U1 ➡[n,h] U2 + | ∃∃m. ❪G,L❫ ⊢ V1 ➡[m,h] U2 & n = ↑m. #n #h #G #L #V1 #U1 #U2 * #c #Hc #H elim (cpg_inv_cast1 … H) -H * [ #cV #cT #V2 #T2 #HV12 #HT12 #HcVT #H1 #H2 destruct elim (isrt_inv_max … Hc) -Hc #nV #nT #HcV #HcT #H destruct @@ -322,9 +322,9 @@ qed-. (* Basic forward lemmas *****************************************************) (* Basic_2A1: includes: cpr_fwd_bind1_minus *) -lemma cpm_fwd_bind1_minus: ∀n,h,I,G,L,V1,T1,T. ⦃G,L⦄ ⊢ -ⓑ{I}V1.T1 ➡[n,h] T → ∀p. - ∃∃V2,T2. ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T1 ➡[n,h] ⓑ{p,I}V2.T2 & - T = -ⓑ{I}V2.T2. +lemma cpm_fwd_bind1_minus: ∀n,h,I,G,L,V1,T1,T. ❪G,L❫ ⊢ -ⓑ[I]V1.T1 ➡[n,h] T → ∀p. + ∃∃V2,T2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡[n,h] ⓑ[p,I]V2.T2 & + T = -ⓑ[I]V2.T2. #n #h #I #G #L #V1 #T1 #T * #c #Hc #H #p elim (cpg_fwd_bind1_minus … H p) -H /3 width=4 by ex2_2_intro, ex2_intro/ qed-. @@ -332,34 +332,34 @@ qed-. (* Basic eliminators ********************************************************) lemma cpm_ind (h): ∀Q:relation5 nat genv lenv term term. - (∀I,G,L. Q 0 G L (⓪{I}) (⓪{I})) → + (∀I,G,L. Q 0 G L (⓪[I]) (⓪[I])) → (∀G,L,s. Q 1 G L (⋆s) (⋆(⫯[h]s))) → - (∀n,G,K,V1,V2,W2. ⦃G,K⦄ ⊢ V1 ➡[n,h] V2 → Q n G K V1 V2 → + (∀n,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ➡[n,h] V2 → Q n G K V1 V2 → ⇧*[1] V2 ≘ W2 → Q n G (K.ⓓV1) (#0) W2 - ) → (∀n,G,K,V1,V2,W2. ⦃G,K⦄ ⊢ V1 ➡[n,h] V2 → Q n G K V1 V2 → + ) → (∀n,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ➡[n,h] V2 → Q n G K V1 V2 → ⇧*[1] V2 ≘ W2 → Q (↑n) G (K.ⓛV1) (#0) W2 - ) → (∀n,I,G,K,T,U,i. ⦃G,K⦄ ⊢ #i ➡[n,h] T → Q n G K (#i) T → - ⇧*[1] T ≘ U → Q n G (K.ⓘ{I}) (#↑i) (U) - ) → (∀n,p,I,G,L,V1,V2,T1,T2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 → ⦃G,L.ⓑ{I}V1⦄ ⊢ T1 ➡[n,h] T2 → - Q 0 G L V1 V2 → Q n G (L.ⓑ{I}V1) T1 T2 → Q n G L (ⓑ{p,I}V1.T1) (ⓑ{p,I}V2.T2) - ) → (∀n,G,L,V1,V2,T1,T2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 → ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → + ) → (∀n,I,G,K,T,U,i. ❪G,K❫ ⊢ #i ➡[n,h] T → Q n G K (#i) T → + ⇧*[1] T ≘ U → Q n G (K.ⓘ[I]) (#↑i) (U) + ) → (∀n,p,I,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡[n,h] T2 → + Q 0 G L V1 V2 → Q n G (L.ⓑ[I]V1) T1 T2 → Q n G L (ⓑ[p,I]V1.T1) (ⓑ[p,I]V2.T2) + ) → (∀n,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 → ❪G,L❫ ⊢ T1 ➡[n,h] T2 → Q 0 G L V1 V2 → Q n G L T1 T2 → Q n G L (ⓐV1.T1) (ⓐV2.T2) - ) → (∀n,G,L,V1,V2,T1,T2. ⦃G,L⦄ ⊢ V1 ➡[n,h] V2 → ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → + ) → (∀n,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ➡[n,h] V2 → ❪G,L❫ ⊢ T1 ➡[n,h] T2 → Q n G L V1 V2 → Q n G L T1 T2 → Q n G L (ⓝV1.T1) (ⓝV2.T2) - ) → (∀n,G,L,V,T1,T,T2. ⇧*[1] T ≘ T1 → ⦃G,L⦄ ⊢ T ➡[n,h] T2 → + ) → (∀n,G,L,V,T1,T,T2. ⇧*[1] T ≘ T1 → ❪G,L❫ ⊢ T ➡[n,h] T2 → Q n G L T T2 → Q n G L (+ⓓV.T1) T2 - ) → (∀n,G,L,V,T1,T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → + ) → (∀n,G,L,V,T1,T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 → Q n G L T1 T2 → Q n G L (ⓝV.T1) T2 - ) → (∀n,G,L,V1,V2,T. ⦃G,L⦄ ⊢ V1 ➡[n,h] V2 → + ) → (∀n,G,L,V1,V2,T. ❪G,L❫ ⊢ V1 ➡[n,h] V2 → Q n G L V1 V2 → Q (↑n) G L (ⓝV1.T) V2 - ) → (∀n,p,G,L,V1,V2,W1,W2,T1,T2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 → ⦃G,L⦄ ⊢ W1 ➡[h] W2 → ⦃G,L.ⓛW1⦄ ⊢ T1 ➡[n,h] T2 → + ) → (∀n,p,G,L,V1,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 → ❪G,L❫ ⊢ W1 ➡[h] W2 → ❪G,L.ⓛW1❫ ⊢ T1 ➡[n,h] T2 → Q 0 G L V1 V2 → Q 0 G L W1 W2 → Q n G (L.ⓛW1) T1 T2 → - Q n G L (ⓐV1.ⓛ{p}W1.T1) (ⓓ{p}ⓝW2.V2.T2) - ) → (∀n,p,G,L,V1,V,V2,W1,W2,T1,T2. ⦃G,L⦄ ⊢ V1 ➡[h] V → ⦃G,L⦄ ⊢ W1 ➡[h] W2 → ⦃G,L.ⓓW1⦄ ⊢ T1 ➡[n,h] T2 → + Q n G L (ⓐV1.ⓛ[p]W1.T1) (ⓓ[p]ⓝW2.V2.T2) + ) → (∀n,p,G,L,V1,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h] V → ❪G,L❫ ⊢ W1 ➡[h] W2 → ❪G,L.ⓓW1❫ ⊢ T1 ➡[n,h] T2 → Q 0 G L V1 V → Q 0 G L W1 W2 → Q n G (L.ⓓW1) T1 T2 → - ⇧*[1] V ≘ V2 → Q n G L (ⓐV1.ⓓ{p}W1.T1) (ⓓ{p}W2.ⓐV2.T2) + ⇧*[1] V ≘ V2 → Q n G L (ⓐV1.ⓓ[p]W1.T1) (ⓓ[p]W2.ⓐV2.T2) ) → - ∀n,G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → Q n G L T1 T2. + ∀n,G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 → Q n G L T1 T2. #h #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #IH10 #IH11 #IH12 #IH13 #n #G #L #T1 #T2 * #c #HC #H generalize in match HC; -HC generalize in match n; -n elim H -c -G -L -T1 -T2 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_aaa.ma index b5a67ac4e..6cc56dc07 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_aaa.ma @@ -25,17 +25,17 @@ lemma cpm_aaa_conf (n) (h): ∀G,L. Conf3 … (aaa G L) (cpm h G L n). (* Note: one of these U is the inferred type of T *) lemma aaa_cpm_SO (h) (G) (L) (A): - ∀T. ⦃G,L⦄ ⊢ T ⁝ A → ∃U. ⦃G,L⦄ ⊢ T ➡[1,h] U. + ∀T. ❪G,L❫ ⊢ T ⁝ A → ∃U. ❪G,L❫ ⊢ T ➡[1,h] U. #h #G #L #A #T #H elim H -G -L -T -A [ /3 width=2 by ex_intro/ | * #G #L #V #B #_ * #V0 #HV0 - [ elim (lifts_total V0 (𝐔❴1❵)) #W0 #HVW0 + [ elim (lifts_total V0 (𝐔❨1❩)) #W0 #HVW0 /3 width=4 by cpm_delta, ex_intro/ - | elim (lifts_total V (𝐔❴1❵)) #W #HVW -V0 + | elim (lifts_total V (𝐔❨1❩)) #W #HVW -V0 /3 width=4 by cpm_ell, ex_intro/ ] | #I #G #L #A #i #_ * #T0 #HT0 - elim (lifts_total T0 (𝐔❴1❵)) #U0 #HTU0 + elim (lifts_total T0 (𝐔❨1❩)) #U0 #HTU0 /3 width=4 by cpm_lref, ex_intro/ | #p #G #L #V #T #B #A #_ #_ #_ * #T0 #HT0 /3 width=2 by cpm_bind, ex_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_cpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_cpx.ma index 8cbb8fc18..c3fb02f68 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_cpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_cpx.ma @@ -20,7 +20,7 @@ include "basic_2/rt_transition/cpm.ma". (* Forward lemmas with unbound context-sensitive rt-transition for terms ****) (* Basic_2A1: includes: cpr_cpx *) -lemma cpm_fwd_cpx: ∀n,h,G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → ⦃G,L⦄ ⊢ T1 ⬈[h] T2. +lemma cpm_fwd_cpx: ∀n,h,G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 → ❪G,L❫ ⊢ T1 ⬈[h] T2. #n #h #G #L #T1 #T2 * #c #Hc #H elim H -L -T1 -T2 /2 width=3 by cpx_theta, cpx_beta, cpx_ee, cpx_eps, cpx_zeta, cpx_flat, cpx_bind, cpx_lref, cpx_delta/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_drops.ma index 3d465a950..8dcb983e1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_drops.ma @@ -50,27 +50,27 @@ qed-. (* Basic_1: includes: pr2_delta1 *) (* Basic_2A1: includes: cpr_delta *) lemma cpm_delta_drops: ∀n,h,G,L,K,V,V2,W2,i. - ⇩*[i] L ≘ K.ⓓV → ⦃G,K⦄ ⊢ V ➡[n,h] V2 → - ⇧*[↑i] V2 ≘ W2 → ⦃G,L⦄ ⊢ #i ➡[n,h] W2. + ⇩*[i] L ≘ K.ⓓV → ❪G,K❫ ⊢ V ➡[n,h] V2 → + ⇧*[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ➡[n,h] W2. #n #h #G #L #K #V #V2 #W2 #i #HLK * /3 width=8 by cpg_delta_drops, ex2_intro/ qed. lemma cpm_ell_drops: ∀n,h,G,L,K,V,V2,W2,i. - ⇩*[i] L ≘ K.ⓛV → ⦃G,K⦄ ⊢ V ➡[n,h] V2 → - ⇧*[↑i] V2 ≘ W2 → ⦃G,L⦄ ⊢ #i ➡[↑n,h] W2. + ⇩*[i] L ≘ K.ⓛV → ❪G,K❫ ⊢ V ➡[n,h] V2 → + ⇧*[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ➡[↑n,h] W2. #n #h #G #L #K #V #V2 #W2 #i #HLK * /3 width=8 by cpg_ell_drops, isrt_succ, ex2_intro/ qed. (* Advanced inversion lemmas ************************************************) -lemma cpm_inv_atom1_drops: ∀n,h,I,G,L,T2. ⦃G,L⦄ ⊢ ⓪{I} ➡[n,h] T2 → - ∨∨ T2 = ⓪{I} ∧ n = 0 +lemma cpm_inv_atom1_drops: ∀n,h,I,G,L,T2. ❪G,L❫ ⊢ ⓪[I] ➡[n,h] T2 → + ∨∨ T2 = ⓪[I] ∧ n = 0 | ∃∃s. T2 = ⋆(⫯[h]s) & I = Sort s & n = 1 - | ∃∃K,V,V2,i. ⇩*[i] L ≘ K.ⓓV & ⦃G,K⦄ ⊢ V ➡[n,h] V2 & + | ∃∃K,V,V2,i. ⇩*[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ➡[n,h] V2 & ⇧*[↑i] V2 ≘ T2 & I = LRef i - | ∃∃m,K,V,V2,i. ⇩*[i] L ≘ K.ⓛV & ⦃G,K⦄ ⊢ V ➡[m,h] V2 & + | ∃∃m,K,V,V2,i. ⇩*[i] L ≘ K.ⓛV & ❪G,K❫ ⊢ V ➡[m,h] V2 & ⇧*[↑i] V2 ≘ T2 & I = LRef i & n = ↑m. #n #h #I #G #L #T2 * #c #Hc #H elim (cpg_inv_atom1_drops … H) -H * [ #H1 #H2 destruct lapply (isrt_inv_00 … Hc) -Hc @@ -85,11 +85,11 @@ lemma cpm_inv_atom1_drops: ∀n,h,I,G,L,T2. ⦃G,L⦄ ⊢ ⓪{I} ➡[n,h] T2 → ] qed-. -lemma cpm_inv_lref1_drops: ∀n,h,G,L,T2,i. ⦃G,L⦄ ⊢ #i ➡[n,h] T2 → +lemma cpm_inv_lref1_drops: ∀n,h,G,L,T2,i. ❪G,L❫ ⊢ #i ➡[n,h] T2 → ∨∨ T2 = #i ∧ n = 0 - | ∃∃K,V,V2. ⇩*[i] L ≘ K.ⓓV & ⦃G,K⦄ ⊢ V ➡[n,h] V2 & + | ∃∃K,V,V2. ⇩*[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ➡[n,h] V2 & ⇧*[↑i] V2 ≘ T2 - | ∃∃m,K,V,V2. ⇩*[i] L ≘ K. ⓛV & ⦃G,K⦄ ⊢ V ➡[m,h] V2 & + | ∃∃m,K,V,V2. ⇩*[i] L ≘ K. ⓛV & ❪G,K❫ ⊢ V ➡[m,h] V2 & ⇧*[↑i] V2 ≘ T2 & n = ↑m. #n #h #G #L #T2 #i * #c #Hc #H elim (cpg_inv_lref1_drops … H) -H * [ #H1 #H2 destruct lapply (isrt_inv_00 … Hc) -Hc @@ -104,9 +104,9 @@ qed-. (* Advanced forward lemmas **************************************************) -fact cpm_fwd_plus_aux (n) (h): ∀G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → +fact cpm_fwd_plus_aux (n) (h): ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 → ∀n1,n2. n1+n2 = n → - ∃∃T. ⦃G,L⦄ ⊢ T1 ➡[n1,h] T & ⦃G,L⦄ ⊢ T ➡[n2,h] T2. + ∃∃T. ❪G,L❫ ⊢ T1 ➡[n1,h] T & ❪G,L❫ ⊢ T ➡[n2,h] T2. #n #h #G #L #T1 #T2 #H @(cpm_ind … H) -G -L -T1 -T2 -n [ #I #G #L #n1 #n2 #H elim (plus_inv_O3 … H) -H #H1 #H2 destruct @@ -119,19 +119,19 @@ fact cpm_fwd_plus_aux (n) (h): ∀G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → ] | #n #G #K #V1 #V2 #W2 #_ #IH #HVW2 #n1 #n2 #H destruct elim IH [|*: // ] -IH #V #HV1 #HV2 - elim (lifts_total V 𝐔❴↑O❵) #W #HVW + elim (lifts_total V 𝐔❨↑O❩) #W #HVW /5 width=11 by cpm_lifts_bi, cpm_delta, drops_refl, drops_drop, ex2_intro/ | #n #G #K #V1 #V2 #W2 #HV12 #IH #HVW2 #x1 #n2 #H elim (plus_inv_S3_sn … H) -H * [ #H1 #H2 destruct -IH /3 width=3 by cpm_ell, ex2_intro/ | #n1 #H1 #H2 destruct -HV12 elim (IH n1) [|*: // ] -IH #V #HV1 #HV2 - elim (lifts_total V 𝐔❴↑O❵) #W #HVW + elim (lifts_total V 𝐔❨↑O❩) #W #HVW /5 width=11 by cpm_lifts_bi, cpm_ell, drops_refl, drops_drop, ex2_intro/ ] | #n #I #G #K #T2 #U2 #i #_ #IH #HTU2 #n1 #n2 #H destruct elim IH [|*: // ] -IH #T #HT1 #HT2 - elim (lifts_total T 𝐔❴↑O❵) #U #HTU + elim (lifts_total T 𝐔❨↑O❩) #U #HTU /5 width=11 by cpm_lifts_bi, cpm_lref, drops_refl, drops_drop, ex2_intro/ | #n #p #I #G #L #V1 #V2 #T1 #T2 #HV12 #_ #_ #IHT #n1 #n2 #H destruct elim IHT [|*: // ] -IHT #T #HT1 #HT2 @@ -165,6 +165,6 @@ fact cpm_fwd_plus_aux (n) (h): ∀G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → ] qed-. -lemma cpm_fwd_plus (h) (G) (L): ∀n1,n2,T1,T2. ⦃G,L⦄ ⊢ T1 ➡[n1+n2,h] T2 → - ∃∃T. ⦃G,L⦄ ⊢ T1 ➡[n1,h] T & ⦃G,L⦄ ⊢ T ➡[n2,h] T2. +lemma cpm_fwd_plus (h) (G) (L): ∀n1,n2,T1,T2. ❪G,L❫ ⊢ T1 ➡[n1+n2,h] T2 → + ∃∃T. ❪G,L❫ ⊢ T1 ➡[n1,h] T & ❪G,L❫ ⊢ T ➡[n2,h] T2. /2 width=3 by cpm_fwd_plus_aux/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_lsubr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_lsubr.ma index 7b4cde75a..1f117aab0 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_lsubr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_lsubr.ma @@ -24,7 +24,7 @@ lemma lsubr_cpm_trans (n) (h) (G): lsub_trans … (λL. cpm h G L n) lsubr. #n #h #G #L1 #T1 #T2 * /3 width=5 by lsubr_cpg_trans, ex2_intro/ qed-. -lemma cpm_bind_unit (n) (h) (G): ∀L,V1,V2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 → - ∀J,T1,T2. ⦃G,L.ⓤ{J}⦄ ⊢ T1 ➡[n,h] T2 → - ∀p,I. ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T1 ➡[n,h] ⓑ{p,I}V2.T2. +lemma cpm_bind_unit (n) (h) (G): ∀L,V1,V2. ❪G,L❫ ⊢ V1 ➡[h] V2 → + ∀J,T1,T2. ❪G,L.ⓤ[J]❫ ⊢ T1 ➡[n,h] T2 → + ∀p,I. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ➡[n,h] ⓑ[p,I]V2.T2. /4 width=4 by lsubr_cpm_trans, cpm_bind, lsubr_unit/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_simple.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_simple.ma index b160f471c..33bd855b6 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_simple.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_simple.ma @@ -20,8 +20,8 @@ include "basic_2/rt_transition/cpm.ma". (* Properties with simple terms *********************************************) (* Basic_2A1: includes: cpr_inv_appl1_simple *) -lemma cpm_inv_appl1_simple: ∀n,h,G,L,V1,T1,U. ⦃G,L⦄ ⊢ ⓐV1.T1 ➡[n,h] U → 𝐒⦃T1⦄ → - ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 & ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 & +lemma cpm_inv_appl1_simple: ∀n,h,G,L,V1,T1,U. ❪G,L❫ ⊢ ⓐV1.T1 ➡[n,h] U → 𝐒❪T1❫ → + ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 & ❪G,L❫ ⊢ T1 ➡[n,h] T2 & U = ⓐV2.T2. #n #h #G #L #V1 #T1 #U * #c #Hc #H #HT1 elim (cpg_inv_appl1_simple … H HT1) -H -HT1 #cV #cT #V2 #T2 #HV12 #HT12 #H1 #H2 destruct elim (isrt_inv_max … Hc) -Hc diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_teqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_teqx.ma index fec97dfb6..90aca3c7e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_teqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm_teqx.ma @@ -20,7 +20,7 @@ include "basic_2/rt_transition/cpm_drops.ma". (* Inversion lemmas with sort-irrelevant equivalence for terms **************) lemma cpm_teqx_inv_lref_sn (n) (h) (G) (L) (i): - ∀X. ⦃G,L⦄ ⊢ #i ➡[n,h] X → #i ≛ X → + ∀X. ❪G,L❫ ⊢ #i ➡[n,h] X → #i ≛ X → ∧∧ X = #i & n = 0. #n #h #G #L #i #X #H1 #H2 lapply (teqx_inv_lref1 … H2) -H2 #H destruct @@ -30,8 +30,8 @@ elim (lifts_inv_lref2_uni_lt … H) -H // qed-. lemma cpm_teqx_inv_atom_sn (n) (h) (I) (G) (L): - ∀X. ⦃G,L⦄ ⊢ ⓪{I} ➡[n,h] X → ⓪{I} ≛ X → - ∨∨ ∧∧ X = ⓪{I} & n = 0 + ∀X. ❪G,L❫ ⊢ ⓪[I] ➡[n,h] X → ⓪[I] ≛ X → + ∨∨ ∧∧ X = ⓪[I] & n = 0 | ∃∃s. X = ⋆(⫯[h]s) & I = Sort s & n = 1. #n #h * #s #G #L #X #H1 #H2 [ elim (cpm_inv_sort1 … H1) -H1 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr.ma index b51753a79..978c42b7c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr.ma @@ -25,25 +25,25 @@ include "basic_2/rt_transition/cpm.ma". (* Note: cpr_flat: does not hold in basic_1 *) (* Basic_1: includes: pr2_thin_dx *) lemma cpr_flat: ∀h,I,G,L,V1,V2,T1,T2. - ⦃G,L⦄ ⊢ V1 ➡[h] V2 → ⦃G,L⦄ ⊢ T1 ➡[h] T2 → - ⦃G,L⦄ ⊢ ⓕ{I}V1.T1 ➡[h] ⓕ{I}V2.T2. + ❪G,L❫ ⊢ V1 ➡[h] V2 → ❪G,L❫ ⊢ T1 ➡[h] T2 → + ❪G,L❫ ⊢ ⓕ[I]V1.T1 ➡[h] ⓕ[I]V2.T2. #h * /2 width=1 by cpm_cast, cpm_appl/ qed. (* Basic_1: was: pr2_head_1 *) -lemma cpr_pair_sn: ∀h,I,G,L,V1,V2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 → - ∀T. ⦃G,L⦄ ⊢ ②{I}V1.T ➡[h] ②{I}V2.T. +lemma cpr_pair_sn: ∀h,I,G,L,V1,V2. ❪G,L❫ ⊢ V1 ➡[h] V2 → + ∀T. ❪G,L❫ ⊢ ②[I]V1.T ➡[h] ②[I]V2.T. #h * /2 width=1 by cpm_bind, cpr_flat/ qed. (* Basic inversion properties ***********************************************) -lemma cpr_inv_atom1: ∀h,J,G,L,T2. ⦃G,L⦄ ⊢ ⓪{J} ➡[h] T2 → - ∨∨ T2 = ⓪{J} - | ∃∃K,V1,V2. ⦃G,K⦄ ⊢ V1 ➡[h] V2 & ⇧*[1] V2 ≘ T2 & +lemma cpr_inv_atom1: ∀h,J,G,L,T2. ❪G,L❫ ⊢ ⓪[J] ➡[h] T2 → + ∨∨ T2 = ⓪[J] + | ∃∃K,V1,V2. ❪G,K❫ ⊢ V1 ➡[h] V2 & ⇧*[1] V2 ≘ T2 & L = K.ⓓV1 & J = LRef 0 - | ∃∃I,K,T,i. ⦃G,K⦄ ⊢ #i ➡[h] T & ⇧*[1] T ≘ T2 & - L = K.ⓘ{I} & J = LRef (↑i). + | ∃∃I,K,T,i. ❪G,K❫ ⊢ #i ➡[h] T & ⇧*[1] T ≘ T2 & + L = K.ⓘ[I] & J = LRef (↑i). #h #J #G #L #T2 #H elim (cpm_inv_atom1 … H) -H * [2,4:|*: /3 width=8 by or3_intro0, or3_intro1, or3_intro2, ex4_4_intro, ex4_3_intro/ ] [ #n #_ #_ #H destruct @@ -52,50 +52,50 @@ lemma cpr_inv_atom1: ∀h,J,G,L,T2. ⦃G,L⦄ ⊢ ⓪{J} ➡[h] T2 → qed-. (* Basic_1: includes: pr0_gen_sort pr2_gen_sort *) -lemma cpr_inv_sort1: ∀h,G,L,T2,s. ⦃G,L⦄ ⊢ ⋆s ➡[h] T2 → T2 = ⋆s. +lemma cpr_inv_sort1: ∀h,G,L,T2,s. ❪G,L❫ ⊢ ⋆s ➡[h] T2 → T2 = ⋆s. #h #G #L #T2 #s #H elim (cpm_inv_sort1 … H) -H // qed-. -lemma cpr_inv_zero1: ∀h,G,L,T2. ⦃G,L⦄ ⊢ #0 ➡[h] T2 → +lemma cpr_inv_zero1: ∀h,G,L,T2. ❪G,L❫ ⊢ #0 ➡[h] T2 → ∨∨ T2 = #0 - | ∃∃K,V1,V2. ⦃G,K⦄ ⊢ V1 ➡[h] V2 & ⇧*[1] V2 ≘ T2 & + | ∃∃K,V1,V2. ❪G,K❫ ⊢ V1 ➡[h] V2 & ⇧*[1] V2 ≘ T2 & L = K.ⓓV1. #h #G #L #T2 #H elim (cpm_inv_zero1 … H) -H * /3 width=6 by ex3_3_intro, or_introl, or_intror/ #n #K #V1 #V2 #_ #_ #_ #H destruct qed-. -lemma cpr_inv_lref1: ∀h,G,L,T2,i. ⦃G,L⦄ ⊢ #↑i ➡[h] T2 → +lemma cpr_inv_lref1: ∀h,G,L,T2,i. ❪G,L❫ ⊢ #↑i ➡[h] T2 → ∨∨ T2 = #(↑i) - | ∃∃I,K,T. ⦃G,K⦄ ⊢ #i ➡[h] T & ⇧*[1] T ≘ T2 & L = K.ⓘ{I}. + | ∃∃I,K,T. ❪G,K❫ ⊢ #i ➡[h] T & ⇧*[1] T ≘ T2 & L = K.ⓘ[I]. #h #G #L #T2 #i #H elim (cpm_inv_lref1 … H) -H * /3 width=6 by ex3_3_intro, or_introl, or_intror/ qed-. -lemma cpr_inv_gref1: ∀h,G,L,T2,l. ⦃G,L⦄ ⊢ §l ➡[h] T2 → T2 = §l. +lemma cpr_inv_gref1: ∀h,G,L,T2,l. ❪G,L❫ ⊢ §l ➡[h] T2 → T2 = §l. #h #G #L #T2 #l #H elim (cpm_inv_gref1 … H) -H // qed-. (* Basic_1: includes: pr0_gen_cast pr2_gen_cast *) -lemma cpr_inv_cast1: ∀h,G,L,V1,U1,U2. ⦃G,L⦄ ⊢ ⓝ V1.U1 ➡[h] U2 → - ∨∨ ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 & ⦃G,L⦄ ⊢ U1 ➡[h] T2 & +lemma cpr_inv_cast1: ∀h,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓝ V1.U1 ➡[h] U2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 & ❪G,L❫ ⊢ U1 ➡[h] T2 & U2 = ⓝV2.T2 - | ⦃G,L⦄ ⊢ U1 ➡[h] U2. + | ❪G,L❫ ⊢ U1 ➡[h] U2. #h #G #L #V1 #U1 #U2 #H elim (cpm_inv_cast1 … H) -H /2 width=1 by or_introl, or_intror/ * #n #_ #H destruct qed-. -lemma cpr_inv_flat1: ∀h,I,G,L,V1,U1,U2. ⦃G,L⦄ ⊢ ⓕ{I}V1.U1 ➡[h] U2 → - ∨∨ ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 & ⦃G,L⦄ ⊢ U1 ➡[h] T2 & - U2 = ⓕ{I}V2.T2 - | (⦃G,L⦄ ⊢ U1 ➡[h] U2 ∧ I = Cast) - | ∃∃p,V2,W1,W2,T1,T2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 & ⦃G,L⦄ ⊢ W1 ➡[h] W2 & - ⦃G,L.ⓛW1⦄ ⊢ T1 ➡[h] T2 & U1 = ⓛ{p}W1.T1 & - U2 = ⓓ{p}ⓝW2.V2.T2 & I = Appl - | ∃∃p,V,V2,W1,W2,T1,T2. ⦃G,L⦄ ⊢ V1 ➡[h] V & ⇧*[1] V ≘ V2 & - ⦃G,L⦄ ⊢ W1 ➡[h] W2 & ⦃G,L.ⓓW1⦄ ⊢ T1 ➡[h] T2 & - U1 = ⓓ{p}W1.T1 & - U2 = ⓓ{p}W2.ⓐV2.T2 & I = Appl. +lemma cpr_inv_flat1: ∀h,I,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓕ[I]V1.U1 ➡[h] U2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 & ❪G,L❫ ⊢ U1 ➡[h] T2 & + U2 = ⓕ[I]V2.T2 + | (❪G,L❫ ⊢ U1 ➡[h] U2 ∧ I = Cast) + | ∃∃p,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 & ❪G,L❫ ⊢ W1 ➡[h] W2 & + ❪G,L.ⓛW1❫ ⊢ T1 ➡[h] T2 & U1 = ⓛ[p]W1.T1 & + U2 = ⓓ[p]ⓝW2.V2.T2 & I = Appl + | ∃∃p,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h] V & ⇧*[1] V ≘ V2 & + ❪G,L❫ ⊢ W1 ➡[h] W2 & ❪G,L.ⓓW1❫ ⊢ T1 ➡[h] T2 & + U1 = ⓓ[p]W1.T1 & + U2 = ⓓ[p]W2.ⓐV2.T2 & I = Appl. #h * #G #L #V1 #U1 #U2 #H [ elim (cpm_inv_appl1 … H) -H * /3 width=13 by or4_intro0, or4_intro2, or4_intro3, ex7_7_intro, ex6_6_intro, ex3_2_intro/ @@ -107,27 +107,27 @@ qed-. (* Basic eliminators ********************************************************) lemma cpr_ind (h): ∀Q:relation4 genv lenv term term. - (∀I,G,L. Q G L (⓪{I}) (⓪{I})) → - (∀G,K,V1,V2,W2. ⦃G,K⦄ ⊢ V1 ➡[h] V2 → Q G K V1 V2 → + (∀I,G,L. Q G L (⓪[I]) (⓪[I])) → + (∀G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ➡[h] V2 → Q G K V1 V2 → ⇧*[1] V2 ≘ W2 → Q G (K.ⓓV1) (#0) W2 - ) → (∀I,G,K,T,U,i. ⦃G,K⦄ ⊢ #i ➡[h] T → Q G K (#i) T → - ⇧*[1] T ≘ U → Q G (K.ⓘ{I}) (#↑i) (U) - ) → (∀p,I,G,L,V1,V2,T1,T2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 → ⦃G,L.ⓑ{I}V1⦄ ⊢ T1 ➡[h] T2 → - Q G L V1 V2 → Q G (L.ⓑ{I}V1) T1 T2 → Q G L (ⓑ{p,I}V1.T1) (ⓑ{p,I}V2.T2) - ) → (∀I,G,L,V1,V2,T1,T2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 → ⦃G,L⦄ ⊢ T1 ➡[h] T2 → - Q G L V1 V2 → Q G L T1 T2 → Q G L (ⓕ{I}V1.T1) (ⓕ{I}V2.T2) - ) → (∀G,L,V,T1,T,T2. ⇧*[1] T ≘ T1 → ⦃G,L⦄ ⊢ T ➡[h] T2 → + ) → (∀I,G,K,T,U,i. ❪G,K❫ ⊢ #i ➡[h] T → Q G K (#i) T → + ⇧*[1] T ≘ U → Q G (K.ⓘ[I]) (#↑i) (U) + ) → (∀p,I,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ➡[h] T2 → + Q G L V1 V2 → Q G (L.ⓑ[I]V1) T1 T2 → Q G L (ⓑ[p,I]V1.T1) (ⓑ[p,I]V2.T2) + ) → (∀I,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 → ❪G,L❫ ⊢ T1 ➡[h] T2 → + Q G L V1 V2 → Q G L T1 T2 → Q G L (ⓕ[I]V1.T1) (ⓕ[I]V2.T2) + ) → (∀G,L,V,T1,T,T2. ⇧*[1] T ≘ T1 → ❪G,L❫ ⊢ T ➡[h] T2 → Q G L T T2 → Q G L (+ⓓV.T1) T2 - ) → (∀G,L,V,T1,T2. ⦃G,L⦄ ⊢ T1 ➡[h] T2 → Q G L T1 T2 → + ) → (∀G,L,V,T1,T2. ❪G,L❫ ⊢ T1 ➡[h] T2 → Q G L T1 T2 → Q G L (ⓝV.T1) T2 - ) → (∀p,G,L,V1,V2,W1,W2,T1,T2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 → ⦃G,L⦄ ⊢ W1 ➡[h] W2 → ⦃G,L.ⓛW1⦄ ⊢ T1 ➡[h] T2 → + ) → (∀p,G,L,V1,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h] V2 → ❪G,L❫ ⊢ W1 ➡[h] W2 → ❪G,L.ⓛW1❫ ⊢ T1 ➡[h] T2 → Q G L V1 V2 → Q G L W1 W2 → Q G (L.ⓛW1) T1 T2 → - Q G L (ⓐV1.ⓛ{p}W1.T1) (ⓓ{p}ⓝW2.V2.T2) - ) → (∀p,G,L,V1,V,V2,W1,W2,T1,T2. ⦃G,L⦄ ⊢ V1 ➡[h] V → ⦃G,L⦄ ⊢ W1 ➡[h] W2 → ⦃G,L.ⓓW1⦄ ⊢ T1 ➡[h] T2 → + Q G L (ⓐV1.ⓛ[p]W1.T1) (ⓓ[p]ⓝW2.V2.T2) + ) → (∀p,G,L,V1,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ➡[h] V → ❪G,L❫ ⊢ W1 ➡[h] W2 → ❪G,L.ⓓW1❫ ⊢ T1 ➡[h] T2 → Q G L V1 V → Q G L W1 W2 → Q G (L.ⓓW1) T1 T2 → - ⇧*[1] V ≘ V2 → Q G L (ⓐV1.ⓓ{p}W1.T1) (ⓓ{p}W2.ⓐV2.T2) + ⇧*[1] V ≘ V2 → Q G L (ⓐV1.ⓓ[p]W1.T1) (ⓓ[p]W2.ⓐV2.T2) ) → - ∀G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ➡[h] T2 → Q G L T1 T2. + ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ➡[h] T2 → Q G L T1 T2. #h #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #G #L #T1 #T2 @(insert_eq_0 … 0) #n #H @(cpm_ind … H) -G -L -T1 -T2 -n [2,4,11:|*: /3 width=4 by/ ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_drops.ma index 9fd1974a1..2481e3c38 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_drops.ma @@ -19,9 +19,9 @@ include "basic_2/rt_transition/cpm_drops.ma". (* Advanced inversion lemmas ************************************************) (* Basic_2A1: includes: cpr_inv_atom1 *) -lemma cpr_inv_atom1_drops: ∀h,I,G,L,T2. ⦃G,L⦄ ⊢ ⓪{I} ➡[h] T2 → - ∨∨ T2 = ⓪{I} - | ∃∃K,V,V2,i. ⇩*[i] L ≘ K.ⓓV & ⦃G,K⦄ ⊢ V ➡[h] V2 & +lemma cpr_inv_atom1_drops: ∀h,I,G,L,T2. ❪G,L❫ ⊢ ⓪[I] ➡[h] T2 → + ∨∨ T2 = ⓪[I] + | ∃∃K,V,V2,i. ⇩*[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ➡[h] V2 & ⇧*[↑i] V2 ≘ T2 & I = LRef i. #h #I #G #L #T2 #H elim (cpm_inv_atom1_drops … H) -H * [ /2 width=1 by or_introl/ @@ -33,9 +33,9 @@ qed-. (* Basic_1: includes: pr0_gen_lref pr2_gen_lref *) (* Basic_2A1: includes: cpr_inv_lref1 *) -lemma cpr_inv_lref1_drops: ∀h,G,L,T2,i. ⦃G,L⦄ ⊢ #i ➡[h] T2 → +lemma cpr_inv_lref1_drops: ∀h,G,L,T2,i. ❪G,L❫ ⊢ #i ➡[h] T2 → ∨∨ T2 = #i - | ∃∃K,V,V2. ⇩*[i] L ≘ K. ⓓV & ⦃G,K⦄ ⊢ V ➡[h] V2 & + | ∃∃K,V,V2. ⇩*[i] L ≘ K. ⓓV & ❪G,K❫ ⊢ V ➡[h] V2 & ⇧*[↑i] V2 ≘ T2. #h #G #L #T2 #i #H elim (cpm_inv_lref1_drops … H) -H * [ /2 width=1 by or_introl/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_drops_basic.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_drops_basic.ma index e01180f09..661ee4ab5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_drops_basic.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_drops_basic.ma @@ -22,7 +22,7 @@ include "basic_2/rt_transition/cpr.ma". lemma cpr_subst (h) (G) (L) (U1) (i): ∀K,V. ⇩*[i] L ≘ K.ⓓV → - ∃∃U2,T2. ⦃G,L⦄ ⊢ U1 ➡[h] U2 & ⇧[i,1] T2 ≘ U2. + ∃∃U2,T2. ❪G,L❫ ⊢ U1 ➡[h] U2 & ⇧[i,1] T2 ≘ U2. #h #G #L #U1 @(fqup_wf_ind_eq (Ⓣ) … G L U1) -G -L -U1 #G0 #L0 #U0 #IH #G #L * * [ #s #HG #HL #HT #i #K #V #_ destruct -IH @@ -30,8 +30,8 @@ lemma cpr_subst (h) (G) (L) (U1) (i): | #j #HG #HL #HT #i #K #V #HLK destruct -IH elim (lt_or_eq_or_gt i j) #Hij [ /3 width=4 by lifts_lref_ge_minus, cpr_refl, ex2_2_intro/ - | elim (lifts_total V (𝐔❴↑i❵)) #U2 #HU2 - elim (lifts_split_trans … HU2 (𝐔❴i❵) (𝐁❴i,1❵)) [2: @(after_basic_rc i 0) ] + | elim (lifts_total V (𝐔❨↑i❩)) #U2 #HU2 + elim (lifts_split_trans … HU2 (𝐔❨i❩) (𝐁❨i,1❩)) [2: @(after_basic_rc i 0) ] /3 width=7 by cpm_delta_drops, ex2_2_intro/ | /3 width=4 by lifts_lref_lt, cpr_refl, ex2_2_intro/ ] @@ -39,7 +39,7 @@ lemma cpr_subst (h) (G) (L) (U1) (i): /2 width=4 by lifts_gref, ex2_2_intro/ | #p #J #W1 #U1 #HG #HL #HT #i #K #V #HLK destruct elim (IH G L W1 … HLK) [| // ] #W2 #V2 #HW12 #HVW2 - elim (IH G (L.ⓑ{J}W1) U1 … (↑i)) [|*: /3 width=4 by drops_drop/ ] #U2 #T2 #HU12 #HTU2 + elim (IH G (L.ⓑ[J]W1) U1 … (↑i)) [|*: /3 width=4 by drops_drop/ ] #U2 #T2 #HU12 #HTU2 /3 width=9 by cpm_bind, lifts_bind, ex2_2_intro/ | #J #W1 #U1 #HG #HL #HT #i #K #V #HLK destruct elim (IH G L W1 … HLK) [| // ] #W2 #V2 #HW12 #HVW2 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_teqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_teqx.ma index 49a988290..be549cdae 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_teqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr_teqx.ma @@ -20,7 +20,7 @@ include "basic_2/rt_transition/cpr_drops_basic.ma". (* Properties with context-free sort-irrelevant equivalence *****************) lemma cpr_abbr_pos_tneqx (h) (G) (L) (V) (T1): - ∃∃T2. ⦃G,L⦄ ⊢ +ⓓV.T1 ➡[h] T2 & (+ⓓV.T1 ≛ T2 → ⊥). + ∃∃T2. ❪G,L❫ ⊢ +ⓓV.T1 ➡[h] T2 & (+ⓓV.T1 ≛ T2 → ⊥). #h #G #L #V #U1 elim (cpr_subst h G (L.ⓓV) U1 … 0) [|*: /2 width=4 by drops_refl/ ] #U2 #T2 #HU12 #HTU2 elim (teqx_dec U1 U2) [ -HU12 #HU12 | -HTU2 #HnU12 ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt.ma index a8b160cd1..59fe4d34e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt.ma @@ -22,7 +22,7 @@ include "basic_2/rt_transition/cpg.ma". (* T-BOUND CONTEXT-SENSITIVE PARALLEL T-TRANSITION FOR TERMS ****************) definition cpt (h) (G) (L) (n): relation2 term term ≝ - λT1,T2. ∃∃c. 𝐓⦃n,c⦄ & ⦃G,L⦄ ⊢ T1 ⬈[eq …,c,h] T2. + λT1,T2. ∃∃c. 𝐓❪n,c❫ & ❪G,L❫ ⊢ T1 ⬈[eq …,c,h] T2. interpretation "t-bound context-sensitive parallel t-transition (term)" @@ -31,53 +31,53 @@ interpretation (* Basic properties *********************************************************) lemma cpt_ess (h) (G) (L): - ∀s. ⦃G,L⦄ ⊢ ⋆s ⬆[h,1] ⋆(⫯[h]s). + ∀s. ❪G,L❫ ⊢ ⋆s ⬆[h,1] ⋆(⫯[h]s). /2 width=3 by cpg_ess, ex2_intro/ qed. lemma cpt_delta (h) (n) (G) (K): - ∀V1,V2. ⦃G,K⦄ ⊢ V1 ⬆[h,n] V2 → - ∀W2. ⇧*[1] V2 ≘ W2 → ⦃G,K.ⓓV1⦄ ⊢ #0 ⬆[h,n] W2. + ∀V1,V2. ❪G,K❫ ⊢ V1 ⬆[h,n] V2 → + ∀W2. ⇧*[1] V2 ≘ W2 → ❪G,K.ⓓV1❫ ⊢ #0 ⬆[h,n] W2. #h #n #G #K #V1 #V2 * /3 width=5 by cpg_delta, ex2_intro/ qed. lemma cpt_ell (h) (n) (G) (K): - ∀V1,V2. ⦃G,K⦄ ⊢ V1 ⬆[h,n] V2 → - ∀W2. ⇧*[1] V2 ≘ W2 → ⦃G,K.ⓛV1⦄ ⊢ #0 ⬆[h,↑n] W2. + ∀V1,V2. ❪G,K❫ ⊢ V1 ⬆[h,n] V2 → + ∀W2. ⇧*[1] V2 ≘ W2 → ❪G,K.ⓛV1❫ ⊢ #0 ⬆[h,↑n] W2. #h #n #G #K #V1 #V2 * /3 width=5 by cpg_ell, ex2_intro, ist_succ/ qed. lemma cpt_lref (h) (n) (G) (K): - ∀T,i. ⦃G,K⦄ ⊢ #i ⬆[h,n] T → ∀U. ⇧*[1] T ≘ U → - ∀I. ⦃G,K.ⓘ{I}⦄ ⊢ #↑i ⬆[h,n] U. + ∀T,i. ❪G,K❫ ⊢ #i ⬆[h,n] T → ∀U. ⇧*[1] T ≘ U → + ∀I. ❪G,K.ⓘ[I]❫ ⊢ #↑i ⬆[h,n] U. #h #n #G #K #T #i * /3 width=5 by cpg_lref, ex2_intro/ qed. lemma cpt_bind (h) (n) (G) (L): - ∀V1,V2. ⦃G,L⦄ ⊢ V1 ⬆[h,0] V2 → ∀I,T1,T2. ⦃G,L.ⓑ{I}V1⦄ ⊢ T1 ⬆[h,n] T2 → - ∀p. ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T1 ⬆[h,n] ⓑ{p,I}V2.T2. + ∀V1,V2. ❪G,L❫ ⊢ V1 ⬆[h,0] V2 → ∀I,T1,T2. ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬆[h,n] T2 → + ∀p. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬆[h,n] ⓑ[p,I]V2.T2. #h #n #G #L #V1 #V2 * #cV #HcV #HV12 #I #T1 #T2 * /3 width=5 by cpg_bind, ist_max_O1, ex2_intro/ qed. lemma cpt_appl (h) (n) (G) (L): - ∀V1,V2. ⦃G,L⦄ ⊢ V1 ⬆[h,0] V2 → - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ⬆[h,n] T2 → ⦃G,L⦄ ⊢ ⓐV1.T1 ⬆[h,n] ⓐV2.T2. + ∀V1,V2. ❪G,L❫ ⊢ V1 ⬆[h,0] V2 → + ∀T1,T2. ❪G,L❫ ⊢ T1 ⬆[h,n] T2 → ❪G,L❫ ⊢ ⓐV1.T1 ⬆[h,n] ⓐV2.T2. #h #n #G #L #V1 #V2 * #cV #HcV #HV12 #T1 #T2 * /3 width=5 by ist_max_O1, cpg_appl, ex2_intro/ qed. lemma cpt_cast (h) (n) (G) (L): - ∀U1,U2. ⦃G,L⦄ ⊢ U1 ⬆[h,n] U2 → - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ⬆[h,n] T2 → ⦃G,L⦄ ⊢ ⓝU1.T1 ⬆[h,n] ⓝU2.T2. + ∀U1,U2. ❪G,L❫ ⊢ U1 ⬆[h,n] U2 → + ∀T1,T2. ❪G,L❫ ⊢ T1 ⬆[h,n] T2 → ❪G,L❫ ⊢ ⓝU1.T1 ⬆[h,n] ⓝU2.T2. #h #n #G #L #U1 #U2 * #cU #HcU #HU12 #T1 #T2 * /3 width=6 by cpg_cast, ex2_intro/ qed. lemma cpt_ee (h) (n) (G) (L): - ∀U1,U2. ⦃G,L⦄ ⊢ U1 ⬆[h,n] U2 → ∀T. ⦃G,L⦄ ⊢ ⓝU1.T ⬆[h,↑n] U2. + ∀U1,U2. ❪G,L❫ ⊢ U1 ⬆[h,n] U2 → ∀T. ❪G,L❫ ⊢ ⓝU1.T ⬆[h,↑n] U2. #h #n #G #L #V1 #V2 * /3 width=3 by cpg_ee, ist_succ, ex2_intro/ qed. @@ -88,7 +88,7 @@ lemma cpt_refl (h) (G) (L): reflexive … (cpt h G L 0). (* Advanced properties ******************************************************) lemma cpt_sort (h) (G) (L): - ∀n. n ≤ 1 → ∀s. ⦃G,L⦄ ⊢ ⋆s ⬆[h,n] ⋆((next h)^n s). + ∀n. n ≤ 1 → ∀s. ❪G,L❫ ⊢ ⋆s ⬆[h,n] ⋆((next h)^n s). #h #G #L * // #n #H #s <(le_n_O_to_eq n) /2 width=1 by le_S_S_to_le/ qed. @@ -96,12 +96,12 @@ qed. (* Basic inversion lemmas ***************************************************) lemma cpt_inv_atom_sn (h) (n) (J) (G) (L): - ∀X2. ⦃G,L⦄ ⊢ ⓪{J} ⬆[h,n] X2 → - ∨∨ ∧∧ X2 = ⓪{J} & n = 0 + ∀X2. ❪G,L❫ ⊢ ⓪[J] ⬆[h,n] X2 → + ∨∨ ∧∧ X2 = ⓪[J] & n = 0 | ∃∃s. X2 = ⋆(⫯[h]s) & J = Sort s & n =1 - | ∃∃K,V1,V2. ⦃G,K⦄ ⊢ V1 ⬆[h,n] V2 & ⇧*[1] V2 ≘ X2 & L = K.ⓓV1 & J = LRef 0 - | ∃∃m,K,V1,V2. ⦃G,K⦄ ⊢ V1 ⬆[h,m] V2 & ⇧*[1] V2 ≘ X2 & L = K.ⓛV1 & J = LRef 0 & n = ↑m - | ∃∃I,K,T,i. ⦃G,K⦄ ⊢ #i ⬆[h,n] T & ⇧*[1] T ≘ X2 & L = K.ⓘ{I} & J = LRef (↑i). + | ∃∃K,V1,V2. ❪G,K❫ ⊢ V1 ⬆[h,n] V2 & ⇧*[1] V2 ≘ X2 & L = K.ⓓV1 & J = LRef 0 + | ∃∃m,K,V1,V2. ❪G,K❫ ⊢ V1 ⬆[h,m] V2 & ⇧*[1] V2 ≘ X2 & L = K.ⓛV1 & J = LRef 0 & n = ↑m + | ∃∃I,K,T,i. ❪G,K❫ ⊢ #i ⬆[h,n] T & ⇧*[1] T ≘ X2 & L = K.ⓘ[I] & J = LRef (↑i). #h #n #J #G #L #X2 * #c #Hc #H elim (cpg_inv_atom1 … H) -H * [ #H1 #H2 destruct /3 width=1 by or5_intro0, conj/ @@ -117,7 +117,7 @@ elim (cpg_inv_atom1 … H) -H * qed-. lemma cpt_inv_sort_sn (h) (n) (G) (L) (s): - ∀X2. ⦃G,L⦄ ⊢ ⋆s ⬆[h,n] X2 → + ∀X2. ❪G,L❫ ⊢ ⋆s ⬆[h,n] X2 → ∧∧ X2 = ⋆(((next h)^n) s) & n ≤ 1. #h #n #G #L #s #X2 * #c #Hc #H elim (cpg_inv_sort1 … H) -H * #H1 #H2 destruct @@ -125,10 +125,10 @@ elim (cpg_inv_sort1 … H) -H * #H1 #H2 destruct qed-. lemma cpt_inv_zero_sn (h) (n) (G) (L): - ∀X2. ⦃G,L⦄ ⊢ #0 ⬆[h,n] X2 → + ∀X2. ❪G,L❫ ⊢ #0 ⬆[h,n] X2 → ∨∨ ∧∧ X2 = #0 & n = 0 - | ∃∃K,V1,V2. ⦃G,K⦄ ⊢ V1 ⬆[h,n] V2 & ⇧*[1] V2 ≘ X2 & L = K.ⓓV1 - | ∃∃m,K,V1,V2. ⦃G,K⦄ ⊢ V1 ⬆[h,m] V2 & ⇧*[1] V2 ≘ X2 & L = K.ⓛV1 & n = ↑m. + | ∃∃K,V1,V2. ❪G,K❫ ⊢ V1 ⬆[h,n] V2 & ⇧*[1] V2 ≘ X2 & L = K.ⓓV1 + | ∃∃m,K,V1,V2. ❪G,K❫ ⊢ V1 ⬆[h,m] V2 & ⇧*[1] V2 ≘ X2 & L = K.ⓛV1 & n = ↑m. #h #n #G #L #X2 * #c #Hc #H elim (cpg_inv_zero1 … H) -H * [ #H1 #H2 destruct /4 width=1 by isrt_inv_00, or3_intro0, conj/ | #cV #K #V1 #V2 #HV12 #HVT2 #H1 #H2 destruct @@ -140,7 +140,7 @@ lemma cpt_inv_zero_sn (h) (n) (G) (L): qed-. lemma cpt_inv_zero_sn_unit (h) (n) (I) (K) (G): - ∀X2. ⦃G,K.ⓤ{I}⦄ ⊢ #0 ⬆[h,n] X2 → ∧∧ X2 = #0 & n = 0. + ∀X2. ❪G,K.ⓤ[I]❫ ⊢ #0 ⬆[h,n] X2 → ∧∧ X2 = #0 & n = 0. #h #n #I #G #K #X2 #H elim (cpt_inv_zero_sn … H) -H * [ #H1 #H2 destruct /2 width=1 by conj/ @@ -150,9 +150,9 @@ elim (cpt_inv_zero_sn … H) -H * qed. lemma cpt_inv_lref_sn (h) (n) (G) (L) (i): - ∀X2. ⦃G,L⦄ ⊢ #↑i ⬆[h,n] X2 → + ∀X2. ❪G,L❫ ⊢ #↑i ⬆[h,n] X2 → ∨∨ ∧∧ X2 = #(↑i) & n = 0 - | ∃∃I,K,T. ⦃G,K⦄ ⊢ #i ⬆[h,n] T & ⇧*[1] T ≘ X2 & L = K.ⓘ{I}. + | ∃∃I,K,T. ❪G,K❫ ⊢ #i ⬆[h,n] T & ⇧*[1] T ≘ X2 & L = K.ⓘ[I]. #h #n #G #L #i #X2 * #c #Hc #H elim (cpg_inv_lref1 … H) -H * [ #H1 #H2 destruct /4 width=1 by isrt_inv_00, or_introl, conj/ | #I #K #V2 #HV2 #HVT2 #H destruct @@ -161,7 +161,7 @@ lemma cpt_inv_lref_sn (h) (n) (G) (L) (i): qed-. lemma cpt_inv_lref_sn_ctop (n) (h) (G) (i): - ∀X2. ⦃G,⋆⦄ ⊢ #i ⬆[h,n] X2 → ∧∧ X2 = #i & n = 0. + ∀X2. ❪G,⋆❫ ⊢ #i ⬆[h,n] X2 → ∧∧ X2 = #i & n = 0. #h #n #G * [| #i ] #X2 #H [ elim (cpt_inv_zero_sn … H) -H * [ #H1 #H2 destruct /2 width=1 by conj/ @@ -176,15 +176,15 @@ lemma cpt_inv_lref_sn_ctop (n) (h) (G) (i): qed. lemma cpt_inv_gref_sn (h) (n) (G) (L) (l): - ∀X2. ⦃G,L⦄ ⊢ §l ⬆[h,n] X2 → ∧∧ X2 = §l & n = 0. + ∀X2. ❪G,L❫ ⊢ §l ⬆[h,n] X2 → ∧∧ X2 = §l & n = 0. #h #n #G #L #l #X2 * #c #Hc #H elim (cpg_inv_gref1 … H) -H #H1 #H2 destruct /2 width=1 by conj/ qed-. lemma cpt_inv_bind_sn (h) (n) (p) (I) (G) (L) (V1) (T1): - ∀X2. ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T1 ⬆[h,n] X2 → - ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ⬆[h,0] V2 & ⦃G,L.ⓑ{I}V1⦄ ⊢ T1 ⬆[h,n] T2 - & X2 = ⓑ{p,I}V2.T2. + ∀X2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬆[h,n] X2 → + ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬆[h,0] V2 & ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬆[h,n] T2 + & X2 = ⓑ[p,I]V2.T2. #h #n #p #I #G #L #V1 #T1 #X2 * #c #Hc #H elim (cpg_inv_bind1 … H) -H * [ #cV #cT #V2 #T2 #HV12 #HT12 #H1 #H2 destruct @@ -197,8 +197,8 @@ elim (cpg_inv_bind1 … H) -H * qed-. lemma cpt_inv_appl_sn (h) (n) (G) (L) (V1) (T1): - ∀X2. ⦃G,L⦄ ⊢ ⓐV1.T1 ⬆[h,n] X2 → - ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ⬆[h,0] V2 & ⦃G,L⦄ ⊢ T1 ⬆[h,n] T2 & X2 = ⓐV2.T2. + ∀X2. ❪G,L❫ ⊢ ⓐV1.T1 ⬆[h,n] X2 → + ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬆[h,0] V2 & ❪G,L❫ ⊢ T1 ⬆[h,n] T2 & X2 = ⓐV2.T2. #h #n #G #L #V1 #T1 #X2 * #c #Hc #H elim (cpg_inv_appl1 … H) -H * [ #cV #cT #V2 #T2 #HV12 #HT12 #H1 #H2 destruct elim (ist_inv_max … H2) -H2 #nV #nT #HcV #HcT #H destruct @@ -212,9 +212,9 @@ lemma cpt_inv_appl_sn (h) (n) (G) (L) (V1) (T1): qed-. lemma cpt_inv_cast_sn (h) (n) (G) (L) (V1) (T1): - ∀X2. ⦃G,L⦄ ⊢ ⓝV1.T1 ⬆[h,n] X2 → - ∨∨ ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ⬆[h,n] V2 & ⦃G,L⦄ ⊢ T1 ⬆[h,n] T2 & X2 = ⓝV2.T2 - | ∃∃m. ⦃G,L⦄ ⊢ V1 ⬆[h,m] X2 & n = ↑m. + ∀X2. ❪G,L❫ ⊢ ⓝV1.T1 ⬆[h,n] X2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬆[h,n] V2 & ❪G,L❫ ⊢ T1 ⬆[h,n] T2 & X2 = ⓝV2.T2 + | ∃∃m. ❪G,L❫ ⊢ V1 ⬆[h,m] X2 & n = ↑m. #h #n #G #L #V1 #T1 #X2 * #c #Hc #H elim (cpg_inv_cast1 … H) -H * [ #cV #cT #V2 #T2 #HV12 #HT12 #HcVT #H1 #H2 destruct elim (ist_inv_max … H2) -H2 #nV #nT #HcV #HcT #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_cpm.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_cpm.ma index 8358906ac..bf7dff5d9 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_cpm.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_cpm.ma @@ -20,7 +20,7 @@ include "basic_2/rt_transition/cpt_fqu.ma". (* Forward lemmas with t-bound rt-transition for terms **********************) lemma cpt_fwd_cpm (h) (n) (G) (L): - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ⬆[h,n] T2 → ⦃G,L⦄ ⊢ T1 ➡[n,h] T2. + ∀T1,T2. ❪G,L❫ ⊢ T1 ⬆[h,n] T2 → ❪G,L❫ ⊢ T1 ➡[n,h] T2. #h #n #G #L #T1 #T2 #H @(cpt_ind … H) -n -G -L -T1 -T2 /3 width=3 by cpm_ee, cpm_cast, cpm_appl, cpm_bind, cpm_lref, cpm_ell, cpm_delta/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_drops.ma index 707ecb19d..eee1c0f9b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_drops.ma @@ -48,15 +48,15 @@ qed-. (* Advanced properties ******************************************************) lemma cpt_delta_drops (h) (n) (G): - ∀L,K,V,i. ⇩*[i] L ≘ K.ⓓV → ∀V2. ⦃G,K⦄ ⊢ V ⬆[h,n] V2 → - ∀W2. ⇧*[↑i] V2 ≘ W2 → ⦃G,L⦄ ⊢ #i ⬆[h,n] W2. + ∀L,K,V,i. ⇩*[i] L ≘ K.ⓓV → ∀V2. ❪G,K❫ ⊢ V ⬆[h,n] V2 → + ∀W2. ⇧*[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ⬆[h,n] W2. #h #n #G #L #K #V #i #HLK #V2 * /3 width=8 by cpg_delta_drops, ex2_intro/ qed. lemma cpt_ell_drops (h) (n) (G): - ∀L,K,V,i. ⇩*[i] L ≘ K.ⓛV → ∀V2. ⦃G,K⦄ ⊢ V ⬆[h,n] V2 → - ∀W2. ⇧*[↑i] V2 ≘ W2 → ⦃G,L⦄ ⊢ #i ⬆[h,↑n] W2. + ∀L,K,V,i. ⇩*[i] L ≘ K.ⓛV → ∀V2. ❪G,K❫ ⊢ V ⬆[h,n] V2 → + ∀W2. ⇧*[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ⬆[h,↑n] W2. #h #n #G #L #K #V #i #HLK #V2 * /3 width=8 by cpg_ell_drops, ist_succ, ex2_intro/ qed. @@ -64,11 +64,11 @@ qed. (* Advanced inversion lemmas ************************************************) lemma cpt_inv_atom_sn_drops (h) (n) (I) (G) (L): - ∀X2. ⦃G,L⦄ ⊢ ⓪{I} ⬆[h,n] X2 → - ∨∨ ∧∧ X2 = ⓪{I} & n = 0 + ∀X2. ❪G,L❫ ⊢ ⓪[I] ⬆[h,n] X2 → + ∨∨ ∧∧ X2 = ⓪[I] & n = 0 | ∃∃s. X2 = ⋆(⫯[h]s) & I = Sort s & n = 1 - | ∃∃K,V,V2,i. ⇩*[i] L ≘ K.ⓓV & ⦃G,K⦄ ⊢ V ⬆[h,n] V2 & ⇧*[↑i] V2 ≘ X2 & I = LRef i - | ∃∃m,K,V,V2,i. ⇩*[i] L ≘ K.ⓛV & ⦃G,K⦄ ⊢ V ⬆[h,m] V2 & ⇧*[↑i] V2 ≘ X2 & I = LRef i & n = ↑m. + | ∃∃K,V,V2,i. ⇩*[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ⬆[h,n] V2 & ⇧*[↑i] V2 ≘ X2 & I = LRef i + | ∃∃m,K,V,V2,i. ⇩*[i] L ≘ K.ⓛV & ❪G,K❫ ⊢ V ⬆[h,m] V2 & ⇧*[↑i] V2 ≘ X2 & I = LRef i & n = ↑m. #h #n #I #G #L #X2 * #c #Hc #H elim (cpg_inv_atom1_drops … H) -H * [ #H1 #H2 destruct /3 width=1 by or4_intro0, conj/ @@ -83,10 +83,10 @@ lemma cpt_inv_atom_sn_drops (h) (n) (I) (G) (L): qed-. lemma cpt_inv_lref_sn_drops (h) (n) (G) (L) (i): - ∀X2. ⦃G,L⦄ ⊢ #i ⬆[h,n] X2 → + ∀X2. ❪G,L❫ ⊢ #i ⬆[h,n] X2 → ∨∨ ∧∧ X2 = #i & n = 0 - | ∃∃K,V,V2. ⇩*[i] L ≘ K.ⓓV & ⦃G,K⦄ ⊢ V ⬆[h,n] V2 & ⇧*[↑i] V2 ≘ X2 - | ∃∃m,K,V,V2. ⇩*[i] L ≘ K. ⓛV & ⦃G,K⦄ ⊢ V ⬆[h,m] V2 & ⇧*[↑i] V2 ≘ X2 & n = ↑m. + | ∃∃K,V,V2. ⇩*[i] L ≘ K.ⓓV & ❪G,K❫ ⊢ V ⬆[h,n] V2 & ⇧*[↑i] V2 ≘ X2 + | ∃∃m,K,V,V2. ⇩*[i] L ≘ K. ⓛV & ❪G,K❫ ⊢ V ⬆[h,m] V2 & ⇧*[↑i] V2 ≘ X2 & n = ↑m. #h #n #G #L #i #X2 * #c #Hc #H elim (cpg_inv_lref1_drops … H) -H * [ #H1 #H2 destruct /3 width=1 by or3_intro0, conj/ @@ -101,8 +101,8 @@ qed-. (* Advanced forward lemmas **************************************************) fact cpt_fwd_plus_aux (h) (n) (G) (L): - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ⬆[h,n] T2 → ∀n1,n2. n1+n2 = n → - ∃∃T. ⦃G,L⦄ ⊢ T1 ⬆[h,n1] T & ⦃G,L⦄ ⊢ T ⬆[h,n2] T2. + ∀T1,T2. ❪G,L❫ ⊢ T1 ⬆[h,n] T2 → ∀n1,n2. n1+n2 = n → + ∃∃T. ❪G,L❫ ⊢ T1 ⬆[h,n1] T & ❪G,L❫ ⊢ T ⬆[h,n2] T2. #h #n #G #L #T1 #T2 #H @(cpt_ind … H) -G -L -T1 -T2 -n [ #I #G #L #n1 #n2 #H elim (plus_inv_O3 … H) -H #H1 #H2 destruct @@ -115,19 +115,19 @@ fact cpt_fwd_plus_aux (h) (n) (G) (L): ] | #n #G #K #V1 #V2 #W2 #_ #IH #HVW2 #n1 #n2 #H destruct elim IH [|*: // ] -IH #V #HV1 #HV2 - elim (lifts_total V 𝐔❴↑O❵) #W #HVW + elim (lifts_total V 𝐔❨↑O❩) #W #HVW /5 width=11 by cpt_lifts_bi, cpt_delta, drops_refl, drops_drop, ex2_intro/ | #n #G #K #V1 #V2 #W2 #HV12 #IH #HVW2 #x1 #n2 #H elim (plus_inv_S3_sn … H) -H * [ #H1 #H2 destruct -IH /3 width=3 by cpt_ell, ex2_intro/ | #n1 #H1 #H2 destruct -HV12 elim (IH n1) [|*: // ] -IH #V #HV1 #HV2 - elim (lifts_total V 𝐔❴↑O❵) #W #HVW + elim (lifts_total V 𝐔❨↑O❩) #W #HVW /5 width=11 by cpt_lifts_bi, cpt_ell, drops_refl, drops_drop, ex2_intro/ ] | #n #I #G #K #T2 #U2 #i #_ #IH #HTU2 #n1 #n2 #H destruct elim IH [|*: // ] -IH #T #HT1 #HT2 - elim (lifts_total T 𝐔❴↑O❵) #U #HTU + elim (lifts_total T 𝐔❨↑O❩) #U #HTU /5 width=11 by cpt_lifts_bi, cpt_lref, drops_refl, drops_drop, ex2_intro/ | #n #p #I #G #L #V1 #V2 #T1 #T2 #HV12 #_ #_ #IHT #n1 #n2 #H destruct elim IHT [|*: // ] -IHT #T #HT1 #HT2 @@ -150,6 +150,6 @@ fact cpt_fwd_plus_aux (h) (n) (G) (L): qed-. lemma cpt_fwd_plus (h) (n1) (n2) (G) (L): - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ⬆[h,n1+n2] T2 → - ∃∃T. ⦃G,L⦄ ⊢ T1 ⬆[h,n1] T & ⦃G,L⦄ ⊢ T ⬆[h,n2] T2. + ∀T1,T2. ❪G,L❫ ⊢ T1 ⬆[h,n1+n2] T2 → + ∃∃T. ❪G,L❫ ⊢ T1 ⬆[h,n1] T & ❪G,L❫ ⊢ T ⬆[h,n2] T2. /2 width=3 by cpt_fwd_plus_aux/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_fqu.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_fqu.ma index 034d3e014..5ac497f65 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_fqu.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpt_fqu.ma @@ -20,24 +20,24 @@ include "basic_2/rt_transition/cpt.ma". (* Basic eliminators ********************************************************) lemma cpt_ind (h) (Q:relation5 …): - (∀I,G,L. Q 0 G L (⓪{I}) (⓪{I})) → + (∀I,G,L. Q 0 G L (⓪[I]) (⓪[I])) → (∀G,L,s. Q 1 G L (⋆s) (⋆(⫯[h]s))) → - (∀n,G,K,V1,V2,W2. ⦃G,K⦄ ⊢ V1 ⬆[h,n] V2 → Q n G K V1 V2 → + (∀n,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ⬆[h,n] V2 → Q n G K V1 V2 → ⇧*[1] V2 ≘ W2 → Q n G (K.ⓓV1) (#0) W2 - ) → (∀n,G,K,V1,V2,W2. ⦃G,K⦄ ⊢ V1 ⬆[h,n] V2 → Q n G K V1 V2 → + ) → (∀n,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ⬆[h,n] V2 → Q n G K V1 V2 → ⇧*[1] V2 ≘ W2 → Q (↑n) G (K.ⓛV1) (#0) W2 - ) → (∀n,I,G,K,T,U,i. ⦃G,K⦄ ⊢ #i ⬆[h,n] T → Q n G K (#i) T → - ⇧*[1] T ≘ U → Q n G (K.ⓘ{I}) (#↑i) (U) - ) → (∀n,p,I,G,L,V1,V2,T1,T2. ⦃G,L⦄ ⊢ V1 ⬆[h,0] V2 → ⦃G,L.ⓑ{I}V1⦄ ⊢ T1 ⬆[h,n] T2 → - Q 0 G L V1 V2 → Q n G (L.ⓑ{I}V1) T1 T2 → Q n G L (ⓑ{p,I}V1.T1) (ⓑ{p,I}V2.T2) - ) → (∀n,G,L,V1,V2,T1,T2. ⦃G,L⦄ ⊢ V1 ⬆[h,0] V2 → ⦃G,L⦄ ⊢ T1 ⬆[h,n] T2 → + ) → (∀n,I,G,K,T,U,i. ❪G,K❫ ⊢ #i ⬆[h,n] T → Q n G K (#i) T → + ⇧*[1] T ≘ U → Q n G (K.ⓘ[I]) (#↑i) (U) + ) → (∀n,p,I,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ⬆[h,0] V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬆[h,n] T2 → + Q 0 G L V1 V2 → Q n G (L.ⓑ[I]V1) T1 T2 → Q n G L (ⓑ[p,I]V1.T1) (ⓑ[p,I]V2.T2) + ) → (∀n,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ⬆[h,0] V2 → ❪G,L❫ ⊢ T1 ⬆[h,n] T2 → Q 0 G L V1 V2 → Q n G L T1 T2 → Q n G L (ⓐV1.T1) (ⓐV2.T2) - ) → (∀n,G,L,V1,V2,T1,T2. ⦃G,L⦄ ⊢ V1 ⬆[h,n] V2 → ⦃G,L⦄ ⊢ T1 ⬆[h,n] T2 → + ) → (∀n,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ⬆[h,n] V2 → ❪G,L❫ ⊢ T1 ⬆[h,n] T2 → Q n G L V1 V2 → Q n G L T1 T2 → Q n G L (ⓝV1.T1) (ⓝV2.T2) - ) → (∀n,G,L,V1,V2,T. ⦃G,L⦄ ⊢ V1 ⬆[h,n] V2 → + ) → (∀n,G,L,V1,V2,T. ❪G,L❫ ⊢ V1 ⬆[h,n] V2 → Q n G L V1 V2 → Q (↑n) G L (ⓝV1.T) V2 ) → - ∀n,G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬆[h,n] T2 → Q n G L T1 T2. + ∀n,G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬆[h,n] T2 → Q n G L T1 T2. #h #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #n #G #L #T1 generalize in match n; -n @(fqu_wf_ind (Ⓣ) … G L T1) -G -L -T1 #G0 #L0 * [| * [| * ]] diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx.ma index 9532929a5..37fe4e7c5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx.ma @@ -25,7 +25,7 @@ include "basic_2/rt_transition/cpg.ma". (* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS ***************) definition cpx (h): relation4 genv lenv term term ≝ - λG,L,T1,T2. ∃c. ⦃G,L⦄ ⊢ T1 ⬈[eq_f,c,h] T2. + λG,L,T1,T2. ∃c. ❪G,L❫ ⊢ T1 ⬈[eq_f,c,h] T2. interpretation "unbound context-sensitive parallel rt-transition (term)" @@ -34,64 +34,64 @@ interpretation (* Basic properties *********************************************************) (* Basic_2A1: was: cpx_st *) -lemma cpx_ess: ∀h,G,L,s. ⦃G,L⦄ ⊢ ⋆s ⬈[h] ⋆(⫯[h]s). +lemma cpx_ess: ∀h,G,L,s. ❪G,L❫ ⊢ ⋆s ⬈[h] ⋆(⫯[h]s). /2 width=2 by cpg_ess, ex_intro/ qed. -lemma cpx_delta: ∀h,I,G,K,V1,V2,W2. ⦃G,K⦄ ⊢ V1 ⬈[h] V2 → - ⇧*[1] V2 ≘ W2 → ⦃G,K.ⓑ{I}V1⦄ ⊢ #0 ⬈[h] W2. +lemma cpx_delta: ∀h,I,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ⬈[h] V2 → + ⇧*[1] V2 ≘ W2 → ❪G,K.ⓑ[I]V1❫ ⊢ #0 ⬈[h] W2. #h * #G #K #V1 #V2 #W2 * /3 width=4 by cpg_delta, cpg_ell, ex_intro/ qed. -lemma cpx_lref: ∀h,I,G,K,T,U,i. ⦃G,K⦄ ⊢ #i ⬈[h] T → - ⇧*[1] T ≘ U → ⦃G,K.ⓘ{I}⦄ ⊢ #↑i ⬈[h] U. +lemma cpx_lref: ∀h,I,G,K,T,U,i. ❪G,K❫ ⊢ #i ⬈[h] T → + ⇧*[1] T ≘ U → ❪G,K.ⓘ[I]❫ ⊢ #↑i ⬈[h] U. #h #I #G #K #T #U #i * /3 width=4 by cpg_lref, ex_intro/ qed. lemma cpx_bind: ∀h,p,I,G,L,V1,V2,T1,T2. - ⦃G,L⦄ ⊢ V1 ⬈[h] V2 → ⦃G,L.ⓑ{I}V1⦄ ⊢ T1 ⬈[h] T2 → - ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T1 ⬈[h] ⓑ{p,I}V2.T2. + ❪G,L❫ ⊢ V1 ⬈[h] V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬈[h] T2 → + ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈[h] ⓑ[p,I]V2.T2. #h #p #I #G #L #V1 #V2 #T1 #T2 * #cV #HV12 * /3 width=2 by cpg_bind, ex_intro/ qed. lemma cpx_flat: ∀h,I,G,L,V1,V2,T1,T2. - ⦃G,L⦄ ⊢ V1 ⬈[h] V2 → ⦃G,L⦄ ⊢ T1 ⬈[h] T2 → - ⦃G,L⦄ ⊢ ⓕ{I}V1.T1 ⬈[h] ⓕ{I}V2.T2. + ❪G,L❫ ⊢ V1 ⬈[h] V2 → ❪G,L❫ ⊢ T1 ⬈[h] T2 → + ❪G,L❫ ⊢ ⓕ[I]V1.T1 ⬈[h] ⓕ[I]V2.T2. #h * #G #L #V1 #V2 #T1 #T2 * #cV #HV12 * /3 width=5 by cpg_appl, cpg_cast, ex_intro/ qed. lemma cpx_zeta (h) (G) (L): - ∀T1,T. ⇧*[1] T ≘ T1 → ∀T2. ⦃G,L⦄ ⊢ T ⬈[h] T2 → - ∀V. ⦃G,L⦄ ⊢ +ⓓV.T1 ⬈[h] T2. + ∀T1,T. ⇧*[1] T ≘ T1 → ∀T2. ❪G,L❫ ⊢ T ⬈[h] T2 → + ∀V. ❪G,L❫ ⊢ +ⓓV.T1 ⬈[h] T2. #h #G #L #T1 #T #HT1 #T2 * /3 width=4 by cpg_zeta, ex_intro/ qed. -lemma cpx_eps: ∀h,G,L,V,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈[h] T2 → ⦃G,L⦄ ⊢ ⓝV.T1 ⬈[h] T2. +lemma cpx_eps: ∀h,G,L,V,T1,T2. ❪G,L❫ ⊢ T1 ⬈[h] T2 → ❪G,L❫ ⊢ ⓝV.T1 ⬈[h] T2. #h #G #L #V #T1 #T2 * /3 width=2 by cpg_eps, ex_intro/ qed. (* Basic_2A1: was: cpx_ct *) -lemma cpx_ee: ∀h,G,L,V1,V2,T. ⦃G,L⦄ ⊢ V1 ⬈[h] V2 → ⦃G,L⦄ ⊢ ⓝV1.T ⬈[h] V2. +lemma cpx_ee: ∀h,G,L,V1,V2,T. ❪G,L❫ ⊢ V1 ⬈[h] V2 → ❪G,L❫ ⊢ ⓝV1.T ⬈[h] V2. #h #G #L #V1 #V2 #T * /3 width=2 by cpg_ee, ex_intro/ qed. lemma cpx_beta: ∀h,p,G,L,V1,V2,W1,W2,T1,T2. - ⦃G,L⦄ ⊢ V1 ⬈[h] V2 → ⦃G,L⦄ ⊢ W1 ⬈[h] W2 → ⦃G,L.ⓛW1⦄ ⊢ T1 ⬈[h] T2 → - ⦃G,L⦄ ⊢ ⓐV1.ⓛ{p}W1.T1 ⬈[h] ⓓ{p}ⓝW2.V2.T2. + ❪G,L❫ ⊢ V1 ⬈[h] V2 → ❪G,L❫ ⊢ W1 ⬈[h] W2 → ❪G,L.ⓛW1❫ ⊢ T1 ⬈[h] T2 → + ❪G,L❫ ⊢ ⓐV1.ⓛ[p]W1.T1 ⬈[h] ⓓ[p]ⓝW2.V2.T2. #h #p #G #L #V1 #V2 #W1 #W2 #T1 #T2 * #cV #HV12 * #cW #HW12 * /3 width=2 by cpg_beta, ex_intro/ qed. lemma cpx_theta: ∀h,p,G,L,V1,V,V2,W1,W2,T1,T2. - ⦃G,L⦄ ⊢ V1 ⬈[h] V → ⇧*[1] V ≘ V2 → ⦃G,L⦄ ⊢ W1 ⬈[h] W2 → - ⦃G,L.ⓓW1⦄ ⊢ T1 ⬈[h] T2 → - ⦃G,L⦄ ⊢ ⓐV1.ⓓ{p}W1.T1 ⬈[h] ⓓ{p}W2.ⓐV2.T2. + ❪G,L❫ ⊢ V1 ⬈[h] V → ⇧*[1] V ≘ V2 → ❪G,L❫ ⊢ W1 ⬈[h] W2 → + ❪G,L.ⓓW1❫ ⊢ T1 ⬈[h] T2 → + ❪G,L❫ ⊢ ⓐV1.ⓓ[p]W1.T1 ⬈[h] ⓓ[p]W2.ⓐV2.T2. #h #p #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 * #cV #HV1 #HV2 * #cW #HW12 * /3 width=4 by cpg_theta, ex_intro/ qed. @@ -102,130 +102,130 @@ lemma cpx_refl: ∀h,G,L. reflexive … (cpx h G L). (* Advanced properties ******************************************************) -lemma cpx_pair_sn: ∀h,I,G,L,V1,V2. ⦃G,L⦄ ⊢ V1 ⬈[h] V2 → - ∀T. ⦃G,L⦄ ⊢ ②{I}V1.T ⬈[h] ②{I}V2.T. +lemma cpx_pair_sn: ∀h,I,G,L,V1,V2. ❪G,L❫ ⊢ V1 ⬈[h] V2 → + ∀T. ❪G,L❫ ⊢ ②[I]V1.T ⬈[h] ②[I]V2.T. #h * /2 width=2 by cpx_flat, cpx_bind/ qed. lemma cpg_cpx (h) (Rt) (c) (G) (L): - ∀T1,T2. ⦃G,L⦄ ⊢ T1 ⬈[Rt,c,h] T2 → ⦃G,L⦄ ⊢ T1 ⬈[h] T2. + ∀T1,T2. ❪G,L❫ ⊢ T1 ⬈[Rt,c,h] T2 → ❪G,L❫ ⊢ T1 ⬈[h] T2. #h #Rt #c #G #L #T1 #T2 #H elim H -c -G -L -T1 -T2 /2 width=3 by cpx_theta, cpx_beta, cpx_ee, cpx_eps, cpx_zeta, cpx_flat, cpx_bind, cpx_lref, cpx_delta/ qed. (* Basic inversion lemmas ***************************************************) -lemma cpx_inv_atom1: ∀h,J,G,L,T2. ⦃G,L⦄ ⊢ ⓪{J} ⬈[h] T2 → - ∨∨ T2 = ⓪{J} +lemma cpx_inv_atom1: ∀h,J,G,L,T2. ❪G,L❫ ⊢ ⓪[J] ⬈[h] T2 → + ∨∨ T2 = ⓪[J] | ∃∃s. T2 = ⋆(⫯[h]s) & J = Sort s - | ∃∃I,K,V1,V2. ⦃G,K⦄ ⊢ V1 ⬈[h] V2 & ⇧*[1] V2 ≘ T2 & - L = K.ⓑ{I}V1 & J = LRef 0 - | ∃∃I,K,T,i. ⦃G,K⦄ ⊢ #i ⬈[h] T & ⇧*[1] T ≘ T2 & - L = K.ⓘ{I} & J = LRef (↑i). + | ∃∃I,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[h] V2 & ⇧*[1] V2 ≘ T2 & + L = K.ⓑ[I]V1 & J = LRef 0 + | ∃∃I,K,T,i. ❪G,K❫ ⊢ #i ⬈[h] T & ⇧*[1] T ≘ T2 & + L = K.ⓘ[I] & J = LRef (↑i). #h #J #G #L #T2 * #c #H elim (cpg_inv_atom1 … H) -H * /4 width=8 by or4_intro0, or4_intro1, or4_intro2, or4_intro3, ex4_4_intro, ex2_intro, ex_intro/ qed-. -lemma cpx_inv_sort1: ∀h,G,L,T2,s. ⦃G,L⦄ ⊢ ⋆s ⬈[h] T2 → +lemma cpx_inv_sort1: ∀h,G,L,T2,s. ❪G,L❫ ⊢ ⋆s ⬈[h] T2 → ∨∨ T2 = ⋆s | T2 = ⋆(⫯[h]s). #h #G #L #T2 #s * #c #H elim (cpg_inv_sort1 … H) -H * /2 width=1 by or_introl, or_intror/ qed-. -lemma cpx_inv_zero1: ∀h,G,L,T2. ⦃G,L⦄ ⊢ #0 ⬈[h] T2 → +lemma cpx_inv_zero1: ∀h,G,L,T2. ❪G,L❫ ⊢ #0 ⬈[h] T2 → ∨∨ T2 = #0 - | ∃∃I,K,V1,V2. ⦃G,K⦄ ⊢ V1 ⬈[h] V2 & ⇧*[1] V2 ≘ T2 & - L = K.ⓑ{I}V1. + | ∃∃I,K,V1,V2. ❪G,K❫ ⊢ V1 ⬈[h] V2 & ⇧*[1] V2 ≘ T2 & + L = K.ⓑ[I]V1. #h #G #L #T2 * #c #H elim (cpg_inv_zero1 … H) -H * /4 width=7 by ex3_4_intro, ex_intro, or_introl, or_intror/ qed-. -lemma cpx_inv_lref1: ∀h,G,L,T2,i. ⦃G,L⦄ ⊢ #↑i ⬈[h] T2 → +lemma cpx_inv_lref1: ∀h,G,L,T2,i. ❪G,L❫ ⊢ #↑i ⬈[h] T2 → ∨∨ T2 = #(↑i) - | ∃∃I,K,T. ⦃G,K⦄ ⊢ #i ⬈[h] T & ⇧*[1] T ≘ T2 & L = K.ⓘ{I}. + | ∃∃I,K,T. ❪G,K❫ ⊢ #i ⬈[h] T & ⇧*[1] T ≘ T2 & L = K.ⓘ[I]. #h #G #L #T2 #i * #c #H elim (cpg_inv_lref1 … H) -H * /4 width=6 by ex3_3_intro, ex_intro, or_introl, or_intror/ qed-. -lemma cpx_inv_gref1: ∀h,G,L,T2,l. ⦃G,L⦄ ⊢ §l ⬈[h] T2 → T2 = §l. +lemma cpx_inv_gref1: ∀h,G,L,T2,l. ❪G,L❫ ⊢ §l ⬈[h] T2 → T2 = §l. #h #G #L #T2 #l * #c #H elim (cpg_inv_gref1 … H) -H // qed-. -lemma cpx_inv_bind1: ∀h,p,I,G,L,V1,T1,U2. ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T1 ⬈[h] U2 → - ∨∨ ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ⬈[h] V2 & ⦃G,L.ⓑ{I}V1⦄ ⊢ T1 ⬈[h] T2 & - U2 = ⓑ{p,I}V2.T2 - | ∃∃T. ⇧*[1] T ≘ T1 & ⦃G,L⦄ ⊢ T ⬈[h] U2 & +lemma cpx_inv_bind1: ∀h,p,I,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈[h] U2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈[h] V2 & ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬈[h] T2 & + U2 = ⓑ[p,I]V2.T2 + | ∃∃T. ⇧*[1] T ≘ T1 & ❪G,L❫ ⊢ T ⬈[h] U2 & p = true & I = Abbr. #h #p #I #G #L #V1 #T1 #U2 * #c #H elim (cpg_inv_bind1 … H) -H * /4 width=5 by ex4_intro, ex3_2_intro, ex_intro, or_introl, or_intror/ qed-. -lemma cpx_inv_abbr1: ∀h,p,G,L,V1,T1,U2. ⦃G,L⦄ ⊢ ⓓ{p}V1.T1 ⬈[h] U2 → - ∨∨ ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ⬈[h] V2 & ⦃G,L.ⓓV1⦄ ⊢ T1 ⬈[h] T2 & - U2 = ⓓ{p}V2.T2 - | ∃∃T. ⇧*[1] T ≘ T1 & ⦃G,L⦄ ⊢ T ⬈[h] U2 & p = true. +lemma cpx_inv_abbr1: ∀h,p,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓓ[p]V1.T1 ⬈[h] U2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈[h] V2 & ❪G,L.ⓓV1❫ ⊢ T1 ⬈[h] T2 & + U2 = ⓓ[p]V2.T2 + | ∃∃T. ⇧*[1] T ≘ T1 & ❪G,L❫ ⊢ T ⬈[h] U2 & p = true. #h #p #G #L #V1 #T1 #U2 * #c #H elim (cpg_inv_abbr1 … H) -H * /4 width=5 by ex3_2_intro, ex3_intro, ex_intro, or_introl, or_intror/ qed-. -lemma cpx_inv_abst1: ∀h,p,G,L,V1,T1,U2. ⦃G,L⦄ ⊢ ⓛ{p}V1.T1 ⬈[h] U2 → - ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ⬈[h] V2 & ⦃G,L.ⓛV1⦄ ⊢ T1 ⬈[h] T2 & - U2 = ⓛ{p}V2.T2. +lemma cpx_inv_abst1: ∀h,p,G,L,V1,T1,U2. ❪G,L❫ ⊢ ⓛ[p]V1.T1 ⬈[h] U2 → + ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈[h] V2 & ❪G,L.ⓛV1❫ ⊢ T1 ⬈[h] T2 & + U2 = ⓛ[p]V2.T2. #h #p #G #L #V1 #T1 #U2 * #c #H elim (cpg_inv_abst1 … H) -H /3 width=5 by ex3_2_intro, ex_intro/ qed-. -lemma cpx_inv_appl1: ∀h,G,L,V1,U1,U2. ⦃G,L⦄ ⊢ ⓐ V1.U1 ⬈[h] U2 → - ∨∨ ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ⬈[h] V2 & ⦃G,L⦄ ⊢ U1 ⬈[h] T2 & +lemma cpx_inv_appl1: ∀h,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓐ V1.U1 ⬈[h] U2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈[h] V2 & ❪G,L❫ ⊢ U1 ⬈[h] T2 & U2 = ⓐV2.T2 - | ∃∃p,V2,W1,W2,T1,T2. ⦃G,L⦄ ⊢ V1 ⬈[h] V2 & ⦃G,L⦄ ⊢ W1 ⬈[h] W2 & - ⦃G,L.ⓛW1⦄ ⊢ T1 ⬈[h] T2 & - U1 = ⓛ{p}W1.T1 & U2 = ⓓ{p}ⓝW2.V2.T2 - | ∃∃p,V,V2,W1,W2,T1,T2. ⦃G,L⦄ ⊢ V1 ⬈[h] V & ⇧*[1] V ≘ V2 & - ⦃G,L⦄ ⊢ W1 ⬈[h] W2 & ⦃G,L.ⓓW1⦄ ⊢ T1 ⬈[h] T2 & - U1 = ⓓ{p}W1.T1 & U2 = ⓓ{p}W2.ⓐV2.T2. + | ∃∃p,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[h] V2 & ❪G,L❫ ⊢ W1 ⬈[h] W2 & + ❪G,L.ⓛW1❫ ⊢ T1 ⬈[h] T2 & + U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 + | ∃∃p,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[h] V & ⇧*[1] V ≘ V2 & + ❪G,L❫ ⊢ W1 ⬈[h] W2 & ❪G,L.ⓓW1❫ ⊢ T1 ⬈[h] T2 & + U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2. #h #G #L #V1 #U1 #U2 * #c #H elim (cpg_inv_appl1 … H) -H * /4 width=13 by or3_intro0, or3_intro1, or3_intro2, ex6_7_intro, ex5_6_intro, ex3_2_intro, ex_intro/ qed-. -lemma cpx_inv_cast1: ∀h,G,L,V1,U1,U2. ⦃G,L⦄ ⊢ ⓝV1.U1 ⬈[h] U2 → - ∨∨ ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ⬈[h] V2 & ⦃G,L⦄ ⊢ U1 ⬈[h] T2 & +lemma cpx_inv_cast1: ∀h,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓝV1.U1 ⬈[h] U2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈[h] V2 & ❪G,L❫ ⊢ U1 ⬈[h] T2 & U2 = ⓝV2.T2 - | ⦃G,L⦄ ⊢ U1 ⬈[h] U2 - | ⦃G,L⦄ ⊢ V1 ⬈[h] U2. + | ❪G,L❫ ⊢ U1 ⬈[h] U2 + | ❪G,L❫ ⊢ V1 ⬈[h] U2. #h #G #L #V1 #U1 #U2 * #c #H elim (cpg_inv_cast1 … H) -H * /4 width=5 by or3_intro0, or3_intro1, or3_intro2, ex3_2_intro, ex_intro/ qed-. (* Advanced inversion lemmas ************************************************) -lemma cpx_inv_zero1_pair: ∀h,I,G,K,V1,T2. ⦃G,K.ⓑ{I}V1⦄ ⊢ #0 ⬈[h] T2 → +lemma cpx_inv_zero1_pair: ∀h,I,G,K,V1,T2. ❪G,K.ⓑ[I]V1❫ ⊢ #0 ⬈[h] T2 → ∨∨ T2 = #0 - | ∃∃V2. ⦃G,K⦄ ⊢ V1 ⬈[h] V2 & ⇧*[1] V2 ≘ T2. + | ∃∃V2. ❪G,K❫ ⊢ V1 ⬈[h] V2 & ⇧*[1] V2 ≘ T2. #h #I #G #L #V1 #T2 * #c #H elim (cpg_inv_zero1_pair … H) -H * /4 width=3 by ex2_intro, ex_intro, or_intror, or_introl/ qed-. -lemma cpx_inv_lref1_bind: ∀h,I,G,K,T2,i. ⦃G,K.ⓘ{I}⦄ ⊢ #↑i ⬈[h] T2 → +lemma cpx_inv_lref1_bind: ∀h,I,G,K,T2,i. ❪G,K.ⓘ[I]❫ ⊢ #↑i ⬈[h] T2 → ∨∨ T2 = #(↑i) - | ∃∃T. ⦃G,K⦄ ⊢ #i ⬈[h] T & ⇧*[1] T ≘ T2. + | ∃∃T. ❪G,K❫ ⊢ #i ⬈[h] T & ⇧*[1] T ≘ T2. #h #I #G #L #T2 #i * #c #H elim (cpg_inv_lref1_bind … H) -H * /4 width=3 by ex2_intro, ex_intro, or_introl, or_intror/ qed-. -lemma cpx_inv_flat1: ∀h,I,G,L,V1,U1,U2. ⦃G,L⦄ ⊢ ⓕ{I}V1.U1 ⬈[h] U2 → - ∨∨ ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ⬈[h] V2 & ⦃G,L⦄ ⊢ U1 ⬈[h] T2 & - U2 = ⓕ{I}V2.T2 - | (⦃G,L⦄ ⊢ U1 ⬈[h] U2 ∧ I = Cast) - | (⦃G,L⦄ ⊢ V1 ⬈[h] U2 ∧ I = Cast) - | ∃∃p,V2,W1,W2,T1,T2. ⦃G,L⦄ ⊢ V1 ⬈[h] V2 & ⦃G,L⦄ ⊢ W1 ⬈[h] W2 & - ⦃G,L.ⓛW1⦄ ⊢ T1 ⬈[h] T2 & - U1 = ⓛ{p}W1.T1 & - U2 = ⓓ{p}ⓝW2.V2.T2 & I = Appl - | ∃∃p,V,V2,W1,W2,T1,T2. ⦃G,L⦄ ⊢ V1 ⬈[h] V & ⇧*[1] V ≘ V2 & - ⦃G,L⦄ ⊢ W1 ⬈[h] W2 & ⦃G,L.ⓓW1⦄ ⊢ T1 ⬈[h] T2 & - U1 = ⓓ{p}W1.T1 & - U2 = ⓓ{p}W2.ⓐV2.T2 & I = Appl. +lemma cpx_inv_flat1: ∀h,I,G,L,V1,U1,U2. ❪G,L❫ ⊢ ⓕ[I]V1.U1 ⬈[h] U2 → + ∨∨ ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈[h] V2 & ❪G,L❫ ⊢ U1 ⬈[h] T2 & + U2 = ⓕ[I]V2.T2 + | (❪G,L❫ ⊢ U1 ⬈[h] U2 ∧ I = Cast) + | (❪G,L❫ ⊢ V1 ⬈[h] U2 ∧ I = Cast) + | ∃∃p,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[h] V2 & ❪G,L❫ ⊢ W1 ⬈[h] W2 & + ❪G,L.ⓛW1❫ ⊢ T1 ⬈[h] T2 & + U1 = ⓛ[p]W1.T1 & + U2 = ⓓ[p]ⓝW2.V2.T2 & I = Appl + | ∃∃p,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[h] V & ⇧*[1] V ≘ V2 & + ❪G,L❫ ⊢ W1 ⬈[h] W2 & ❪G,L.ⓓW1❫ ⊢ T1 ⬈[h] T2 & + U1 = ⓓ[p]W1.T1 & + U2 = ⓓ[p]W2.ⓐV2.T2 & I = Appl. #h * #G #L #V1 #U1 #U2 #H [ elim (cpx_inv_appl1 … H) -H * /3 width=14 by or5_intro0, or5_intro3, or5_intro4, ex7_7_intro, ex6_6_intro, ex3_2_intro/ @@ -236,9 +236,9 @@ qed-. (* Basic forward lemmas *****************************************************) -lemma cpx_fwd_bind1_minus: ∀h,I,G,L,V1,T1,T. ⦃G,L⦄ ⊢ -ⓑ{I}V1.T1 ⬈[h] T → ∀p. - ∃∃V2,T2. ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T1 ⬈[h] ⓑ{p,I}V2.T2 & - T = -ⓑ{I}V2.T2. +lemma cpx_fwd_bind1_minus: ∀h,I,G,L,V1,T1,T. ❪G,L❫ ⊢ -ⓑ[I]V1.T1 ⬈[h] T → ∀p. + ∃∃V2,T2. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈[h] ⓑ[p,I]V2.T2 & + T = -ⓑ[I]V2.T2. #h #I #G #L #V1 #T1 #T * #c #H #p elim (cpg_fwd_bind1_minus … H p) -H /3 width=4 by ex2_2_intro, ex_intro/ qed-. @@ -246,30 +246,30 @@ qed-. (* Basic eliminators ********************************************************) lemma cpx_ind: ∀h. ∀Q:relation4 genv lenv term term. - (∀I,G,L. Q G L (⓪{I}) (⓪{I})) → + (∀I,G,L. Q G L (⓪[I]) (⓪[I])) → (∀G,L,s. Q G L (⋆s) (⋆(⫯[h]s))) → - (∀I,G,K,V1,V2,W2. ⦃G,K⦄ ⊢ V1 ⬈[h] V2 → Q G K V1 V2 → - ⇧*[1] V2 ≘ W2 → Q G (K.ⓑ{I}V1) (#0) W2 - ) → (∀I,G,K,T,U,i. ⦃G,K⦄ ⊢ #i ⬈[h] T → Q G K (#i) T → - ⇧*[1] T ≘ U → Q G (K.ⓘ{I}) (#↑i) (U) - ) → (∀p,I,G,L,V1,V2,T1,T2. ⦃G,L⦄ ⊢ V1 ⬈[h] V2 → ⦃G,L.ⓑ{I}V1⦄ ⊢ T1 ⬈[h] T2 → - Q G L V1 V2 → Q G (L.ⓑ{I}V1) T1 T2 → Q G L (ⓑ{p,I}V1.T1) (ⓑ{p,I}V2.T2) - ) → (∀I,G,L,V1,V2,T1,T2. ⦃G,L⦄ ⊢ V1 ⬈[h] V2 → ⦃G,L⦄ ⊢ T1 ⬈[h] T2 → - Q G L V1 V2 → Q G L T1 T2 → Q G L (ⓕ{I}V1.T1) (ⓕ{I}V2.T2) - ) → (∀G,L,V,T1,T,T2. ⇧*[1] T ≘ T1 → ⦃G,L⦄ ⊢ T ⬈[h] T2 → Q G L T T2 → + (∀I,G,K,V1,V2,W2. ❪G,K❫ ⊢ V1 ⬈[h] V2 → Q G K V1 V2 → + ⇧*[1] V2 ≘ W2 → Q G (K.ⓑ[I]V1) (#0) W2 + ) → (∀I,G,K,T,U,i. ❪G,K❫ ⊢ #i ⬈[h] T → Q G K (#i) T → + ⇧*[1] T ≘ U → Q G (K.ⓘ[I]) (#↑i) (U) + ) → (∀p,I,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[h] V2 → ❪G,L.ⓑ[I]V1❫ ⊢ T1 ⬈[h] T2 → + Q G L V1 V2 → Q G (L.ⓑ[I]V1) T1 T2 → Q G L (ⓑ[p,I]V1.T1) (ⓑ[p,I]V2.T2) + ) → (∀I,G,L,V1,V2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[h] V2 → ❪G,L❫ ⊢ T1 ⬈[h] T2 → + Q G L V1 V2 → Q G L T1 T2 → Q G L (ⓕ[I]V1.T1) (ⓕ[I]V2.T2) + ) → (∀G,L,V,T1,T,T2. ⇧*[1] T ≘ T1 → ❪G,L❫ ⊢ T ⬈[h] T2 → Q G L T T2 → Q G L (+ⓓV.T1) T2 - ) → (∀G,L,V,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈[h] T2 → Q G L T1 T2 → + ) → (∀G,L,V,T1,T2. ❪G,L❫ ⊢ T1 ⬈[h] T2 → Q G L T1 T2 → Q G L (ⓝV.T1) T2 - ) → (∀G,L,V1,V2,T. ⦃G,L⦄ ⊢ V1 ⬈[h] V2 → Q G L V1 V2 → + ) → (∀G,L,V1,V2,T. ❪G,L❫ ⊢ V1 ⬈[h] V2 → Q G L V1 V2 → Q G L (ⓝV1.T) V2 - ) → (∀p,G,L,V1,V2,W1,W2,T1,T2. ⦃G,L⦄ ⊢ V1 ⬈[h] V2 → ⦃G,L⦄ ⊢ W1 ⬈[h] W2 → ⦃G,L.ⓛW1⦄ ⊢ T1 ⬈[h] T2 → + ) → (∀p,G,L,V1,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[h] V2 → ❪G,L❫ ⊢ W1 ⬈[h] W2 → ❪G,L.ⓛW1❫ ⊢ T1 ⬈[h] T2 → Q G L V1 V2 → Q G L W1 W2 → Q G (L.ⓛW1) T1 T2 → - Q G L (ⓐV1.ⓛ{p}W1.T1) (ⓓ{p}ⓝW2.V2.T2) - ) → (∀p,G,L,V1,V,V2,W1,W2,T1,T2. ⦃G,L⦄ ⊢ V1 ⬈[h] V → ⦃G,L⦄ ⊢ W1 ⬈[h] W2 → ⦃G,L.ⓓW1⦄ ⊢ T1 ⬈[h] T2 → + Q G L (ⓐV1.ⓛ[p]W1.T1) (ⓓ[p]ⓝW2.V2.T2) + ) → (∀p,G,L,V1,V,V2,W1,W2,T1,T2. ❪G,L❫ ⊢ V1 ⬈[h] V → ❪G,L❫ ⊢ W1 ⬈[h] W2 → ❪G,L.ⓓW1❫ ⊢ T1 ⬈[h] T2 → Q G L V1 V → Q G L W1 W2 → Q G (L.ⓓW1) T1 T2 → - ⇧*[1] V ≘ V2 → Q G L (ⓐV1.ⓓ{p}W1.T1) (ⓓ{p}W2.ⓐV2.T2) + ⇧*[1] V ≘ V2 → Q G L (ⓐV1.ⓓ[p]W1.T1) (ⓓ[p]W2.ⓐV2.T2) ) → - ∀G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈[h] T2 → Q G L T1 T2. + ∀G,L,T1,T2. ❪G,L❫ ⊢ T1 ⬈[h] T2 → Q G L T1 T2. #h #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #IH10 #IH11 #G #L #T1 #T2 * #c #H elim H -c -G -L -T1 -T2 /3 width=4 by ex_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops.ma index 1770f4263..6ad56889f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops.ma @@ -22,8 +22,8 @@ include "basic_2/rt_transition/cpx.ma". (* Basic_2A1: was: cpx_delta *) lemma cpx_delta_drops: ∀h,I,G,L,K,V,V2,W2,i. - ⇩*[i] L ≘ K.ⓑ{I}V → ⦃G,K⦄ ⊢ V ⬈[h] V2 → - ⇧*[↑i] V2 ≘ W2 → ⦃G,L⦄ ⊢ #i ⬈[h] W2. + ⇩*[i] L ≘ K.ⓑ[I]V → ❪G,K❫ ⊢ V ⬈[h] V2 → + ⇧*[↑i] V2 ≘ W2 → ❪G,L❫ ⊢ #i ⬈[h] W2. #h * #G #L #K #V #V2 #W2 #i #HLK * /3 width=7 by cpg_ell_drops, cpg_delta_drops, ex_intro/ qed. @@ -31,19 +31,19 @@ qed. (* Advanced inversion lemmas ************************************************) (* Basic_2A1: was: cpx_inv_atom1 *) -lemma cpx_inv_atom1_drops: ∀h,I,G,L,T2. ⦃G,L⦄ ⊢ ⓪{I} ⬈[h] T2 → - ∨∨ T2 = ⓪{I} +lemma cpx_inv_atom1_drops: ∀h,I,G,L,T2. ❪G,L❫ ⊢ ⓪[I] ⬈[h] T2 → + ∨∨ T2 = ⓪[I] | ∃∃s. T2 = ⋆(⫯[h]s) & I = Sort s - | ∃∃J,K,V,V2,i. ⇩*[i] L ≘ K.ⓑ{J}V & ⦃G,K⦄ ⊢ V ⬈[h] V2 & + | ∃∃J,K,V,V2,i. ⇩*[i] L ≘ K.ⓑ[J]V & ❪G,K❫ ⊢ V ⬈[h] V2 & ⇧*[↑i] V2 ≘ T2 & I = LRef i. #h #I #G #L #T2 * #c #H elim (cpg_inv_atom1_drops … H) -H * /4 width=9 by or3_intro0, or3_intro1, or3_intro2, ex4_5_intro, ex2_intro, ex_intro/ qed-. (* Basic_2A1: was: cpx_inv_lref1 *) -lemma cpx_inv_lref1_drops: ∀h,G,L,T2,i. ⦃G,L⦄ ⊢ #i ⬈[h] T2 → +lemma cpx_inv_lref1_drops: ∀h,G,L,T2,i. ❪G,L❫ ⊢ #i ⬈[h] T2 → T2 = #i ∨ - ∃∃J,K,V,V2. ⇩*[i] L ≘ K. ⓑ{J}V & ⦃G,K⦄ ⊢ V ⬈[h] V2 & + ∃∃J,K,V,V2. ⇩*[i] L ≘ K. ⓑ[J]V & ❪G,K❫ ⊢ V ⬈[h] V2 & ⇧*[↑i] V2 ≘ T2. #h #G #L #T1 #i * #c #H elim (cpg_inv_lref1_drops … H) -H * /4 width=7 by ex3_4_intro, ex_intro, or_introl, or_intror/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops_basic.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops_basic.ma index 022810c73..13c54293a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops_basic.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops_basic.ma @@ -20,8 +20,8 @@ include "basic_2/rt_transition/cpx_drops.ma". (* Properties with basic relocation *****************************************) lemma cpx_subst (h) (G) (L) (U1) (i): - ∀I,K,V. ⇩*[i] L ≘ K.ⓑ{I}V → - ∃∃U2,T2. ⦃G,L⦄ ⊢ U1 ⬈[h] U2 & ⇧[i,1] T2 ≘ U2. + ∀I,K,V. ⇩*[i] L ≘ K.ⓑ[I]V → + ∃∃U2,T2. ❪G,L❫ ⊢ U1 ⬈[h] U2 & ⇧[i,1] T2 ≘ U2. #h #G #L #U1 @(fqup_wf_ind_eq (Ⓣ) … G L U1) -G -L -U1 #G0 #L0 #U0 #IH #G #L * * [ #s #HG #HL #HT #i #I #K #V #_ destruct -IH @@ -29,8 +29,8 @@ lemma cpx_subst (h) (G) (L) (U1) (i): | #j #HG #HL #HT #i #I #K #V #HLK destruct -IH elim (lt_or_eq_or_gt i j) #Hij [ /3 width=4 by lifts_lref_ge_minus, cpx_refl, ex2_2_intro/ - | elim (lifts_total V (𝐔❴↑i❵)) #U2 #HU2 - elim (lifts_split_trans … HU2 (𝐔❴i❵) (𝐁❴i,1❵)) [2: @(after_basic_rc i 0) ] + | elim (lifts_total V (𝐔❨↑i❩)) #U2 #HU2 + elim (lifts_split_trans … HU2 (𝐔❨i❩) (𝐁❨i,1❩)) [2: @(after_basic_rc i 0) ] /3 width=7 by cpx_delta_drops, ex2_2_intro/ | /3 width=4 by lifts_lref_lt, cpx_refl, ex2_2_intro/ ] @@ -38,7 +38,7 @@ lemma cpx_subst (h) (G) (L) (U1) (i): /2 width=4 by lifts_gref, ex2_2_intro/ | #p #J #W1 #U1 #HG #HL #HT #i #I #K #V #HLK destruct elim (IH G L W1 … HLK) [| // ] #W2 #V2 #HW12 #HVW2 - elim (IH G (L.ⓑ{J}W1) U1 … (↑i)) [|*: /3 width=4 by drops_drop/ ] #U2 #T2 #HU12 #HTU2 + elim (IH G (L.ⓑ[J]W1) U1 … (↑i)) [|*: /3 width=4 by drops_drop/ ] #U2 #T2 #HU12 #HTU2 /3 width=9 by cpx_bind, lifts_bind, ex2_2_intro/ | #J #W1 #U1 #HG #HL #HT #i #I #K #V #HLK destruct elim (IH G L W1 … HLK) [| // ] #W2 #V2 #HW12 #HVW2 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_feqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_feqx.ma index 3d19c0bc9..fc7a7d631 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_feqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_feqx.ma @@ -20,9 +20,9 @@ include "basic_2/rt_transition/rpx_reqx.ma". (* Properties with sort-irrelevant equivalence for closures *****************) -lemma feqx_cpx_trans: ∀h,G1,G2,L1,L2,T1,T. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T⦄ → - ∀T2. ⦃G2,L2⦄ ⊢ T ⬈[h] T2 → - ∃∃T0. ⦃G1,L1⦄ ⊢ T1 ⬈[h] T0 & ⦃G1,L1,T0⦄ ≛ ⦃G2,L2,T2⦄. +lemma feqx_cpx_trans: ∀h,G1,G2,L1,L2,T1,T. ❪G1,L1,T1❫ ≛ ❪G2,L2,T❫ → + ∀T2. ❪G2,L2❫ ⊢ T ⬈[h] T2 → + ∃∃T0. ❪G1,L1❫ ⊢ T1 ⬈[h] T0 & ❪G1,L1,T0❫ ≛ ❪G2,L2,T2❫. #h #G1 #G2 #L1 #L2 #T1 #T #H #T2 #HT2 elim (feqx_inv_gen_dx … H) -H #H #HL12 #HT1 destruct elim (reqx_cpx_trans … HL12 … HT2) #T0 #HT0 #HT02 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_fqus.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_fqus.ma index 3be9277cd..18a502335 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_fqus.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_fqus.ma @@ -21,33 +21,33 @@ include "basic_2/rt_transition/cpx_lsubr.ma". (* Properties on supclosure *************************************************) -lemma fqu_cpx_trans: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → - ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈[h] U2 → - ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈[h] U1 & ⦃G1,L1,U1⦄ ⬂[b] ⦃G2,L2,U2⦄. +lemma fqu_cpx_trans: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈[h] U2 → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈[h] U1 & ❪G1,L1,U1❫ ⬂[b] ❪G2,L2,U2❫. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 /3 width=3 by cpx_pair_sn, cpx_bind, cpx_flat, fqu_pair_sn, fqu_bind_dx, fqu_flat_dx, ex2_intro/ [ #I #G #L2 #V2 #X2 #HVX2 - elim (lifts_total X2 (𝐔❴1❵)) + elim (lifts_total X2 (𝐔❨1❩)) /3 width=3 by fqu_drop, cpx_delta, ex2_intro/ | /5 width=4 by lsubr_cpx_trans, cpx_bind, lsubr_unit, fqu_clear, ex2_intro/ | #I #G #L2 #T2 #X2 #HTX2 #U2 #HTU2 - elim (cpx_lifts_sn … HTU2 (Ⓣ) … (L2.ⓘ{I}) … HTX2) + elim (cpx_lifts_sn … HTU2 (Ⓣ) … (L2.ⓘ[I]) … HTX2) /3 width=3 by fqu_drop, drops_refl, drops_drop, ex2_intro/ ] qed-. -lemma fquq_cpx_trans: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂⸮[b] ⦃G2,L2,T2⦄ → - ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈[h] U2 → - ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈[h] U1 & ⦃G1,L1,U1⦄ ⬂⸮[b] ⦃G2,L2,U2⦄. +lemma fquq_cpx_trans: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈[h] U2 → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈[h] U1 & ❪G1,L1,U1❫ ⬂⸮[b] ❪G2,L2,U2❫. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -H [ #HT12 #U2 #HTU2 elim (fqu_cpx_trans … HT12 … HTU2) /3 width=3 by fqu_fquq, ex2_intro/ | * #H1 #H2 #H3 destruct /2 width=3 by ex2_intro/ ] qed-. -lemma fqup_cpx_trans: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄ → - ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈[h] U2 → - ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈[h] U1 & ⦃G1,L1,U1⦄ ⬂+[b] ⦃G2,L2,U2⦄. +lemma fqup_cpx_trans: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈[h] U2 → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈[h] U1 & ❪G1,L1,U1❫ ⬂+[b] ❪G2,L2,U2❫. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2 [ #G2 #L2 #T2 #H12 #U2 #HTU2 elim (fqu_cpx_trans … H12 … HTU2) -T2 /3 width=3 by fqu_fqup, ex2_intro/ @@ -57,50 +57,50 @@ lemma fqup_cpx_trans: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2, ] qed-. -lemma fqus_cpx_trans: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂*[b] ⦃G2,L2,T2⦄ → - ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈[h] U2 → - ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈[h] U1 & ⦃G1,L1,U1⦄ ⬂*[b] ⦃G2,L2,U2⦄. +lemma fqus_cpx_trans: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈[h] U2 → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈[h] U1 & ❪G1,L1,U1❫ ⬂*[b] ❪G2,L2,U2❫. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim (fqus_inv_fqup … H) -H [ #HT12 #U2 #HTU2 elim (fqup_cpx_trans … HT12 … HTU2) /3 width=3 by fqup_fqus, ex2_intro/ | * #H1 #H2 #H3 destruct /2 width=3 by ex2_intro/ ] qed-. -lemma fqu_cpx_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → - ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) → - ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈[h] U1 & T1 ≛ U1 → ⊥ & ⦃G1,L1,U1⦄ ⬂[b] ⦃G2,L2,U2⦄. +lemma fqu_cpx_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈[h] U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ⬂[b] ❪G2,L2,U2❫. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 -[ #I #G #L #V1 #V2 #HV12 #_ elim (lifts_total V2 𝐔❴1❵) +[ #I #G #L #V1 #V2 #HV12 #_ elim (lifts_total V2 𝐔❨1❩) #U2 #HVU2 @(ex3_intro … U2) [1,3: /3 width=7 by cpx_delta, fqu_drop/ | #H lapply (teqx_inv_lref1 … H) -H #H destruct /2 width=5 by lifts_inv_lref2_uni_lt/ ] -| #I #G #L #V1 #T #V2 #HV12 #H0 @(ex3_intro … (②{I}V2.T)) +| #I #G #L #V1 #T #V2 #HV12 #H0 @(ex3_intro … (②[I]V2.T)) [1,3: /2 width=4 by fqu_pair_sn, cpx_pair_sn/ | #H elim (teqx_inv_pair … H) -H /2 width=1 by/ ] -| #p #I #G #L #V #T1 #Hb #T2 #HT12 #H0 @(ex3_intro … (ⓑ{p,I}V.T2)) +| #p #I #G #L #V #T1 #Hb #T2 #HT12 #H0 @(ex3_intro … (ⓑ[p,I]V.T2)) [1,3: /2 width=4 by fqu_bind_dx, cpx_bind/ | #H elim (teqx_inv_pair … H) -H /2 width=1 by/ ] -| #p #I #G #L #V #T1 #Hb #T2 #HT12 #H0 @(ex3_intro … (ⓑ{p,I}V.T2)) +| #p #I #G #L #V #T1 #Hb #T2 #HT12 #H0 @(ex3_intro … (ⓑ[p,I]V.T2)) [1,3: /4 width=4 by lsubr_cpx_trans, cpx_bind, lsubr_unit, fqu_clear/ | #H elim (teqx_inv_pair … H) -H /2 width=1 by/ ] -| #I #G #L #V #T1 #T2 #HT12 #H0 @(ex3_intro … (ⓕ{I}V.T2)) +| #I #G #L #V #T1 #T2 #HT12 #H0 @(ex3_intro … (ⓕ[I]V.T2)) [1,3: /2 width=4 by fqu_flat_dx, cpx_flat/ | #H elim (teqx_inv_pair … H) -H /2 width=1 by/ ] | #I #G #L #T1 #U1 #HTU1 #T2 #HT12 #H0 - elim (cpx_lifts_sn … HT12 (Ⓣ) … (L.ⓘ{I}) … HTU1) -HT12 + elim (cpx_lifts_sn … HT12 (Ⓣ) … (L.ⓘ[I]) … HTU1) -HT12 /4 width=6 by fqu_drop, drops_refl, drops_drop, teqx_inv_lifts_bi, ex3_intro/ ] qed-. -lemma fquq_cpx_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂⸮[b] ⦃G2,L2,T2⦄ → - ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) → - ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈[h] U1 & T1 ≛ U1 → ⊥ & ⦃G1,L1,U1⦄ ⬂⸮[b] ⦃G2,L2,U2⦄. +lemma fquq_cpx_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈[h] U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ⬂⸮[b] ❪G2,L2,U2❫. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 elim H12 -H12 [ #H12 #U2 #HTU2 #H elim (fqu_cpx_trans_tneqx … H12 … HTU2 H) -T2 /3 width=4 by fqu_fquq, ex3_intro/ @@ -108,9 +108,9 @@ lemma fquq_cpx_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂⸮[b] ] qed-. -lemma fqup_cpx_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄ → - ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) → - ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈[h] U1 & T1 ≛ U1 → ⊥ & ⦃G1,L1,U1⦄ ⬂+[b] ⦃G2,L2,U2⦄. +lemma fqup_cpx_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈[h] U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ⬂+[b] ❪G2,L2,U2❫. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind_dx … H) -G1 -L1 -T1 [ #G1 #L1 #T1 #H12 #U2 #HTU2 #H elim (fqu_cpx_trans_tneqx … H12 … HTU2 H) -T2 /3 width=4 by fqu_fqup, ex3_intro/ @@ -120,9 +120,9 @@ lemma fqup_cpx_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂+[b] ⦃ ] qed-. -lemma fqus_cpx_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂*[b] ⦃G2,L2,T2⦄ → - ∀U2. ⦃G2,L2⦄ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) → - ∃∃U1. ⦃G1,L1⦄ ⊢ T1 ⬈[h] U1 & T1 ≛ U1 → ⊥ & ⦃G1,L1,U1⦄ ⬂*[b] ⦃G2,L2,U2⦄. +lemma fqus_cpx_trans_tneqx: ∀h,b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) → + ∃∃U1. ❪G1,L1❫ ⊢ T1 ⬈[h] U1 & T1 ≛ U1 → ⊥ & ❪G1,L1,U1❫ ⬂*[b] ❪G2,L2,U2❫. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 #U2 #HTU2 #H elim (fqus_inv_fqup … H12) -H12 [ #H12 elim (fqup_cpx_trans_tneqx … H12 … HTU2 H) -T2 /3 width=4 by fqup_fqus, ex3_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_lsubr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_lsubr.ma index 7eb730a80..ecc4cf82e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_lsubr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_lsubr.ma @@ -23,8 +23,8 @@ lemma lsubr_cpx_trans (h) (G): lsub_trans … (cpx h G) lsubr. #h #G #L1 #T1 #T2 * /3 width=4 by lsubr_cpg_trans, ex_intro/ qed-. -lemma cpx_bind_unit (h) (G): ∀L,V1,V2. ⦃G,L⦄ ⊢ V1 ⬈[h] V2 → - ∀J,T1,T2. ⦃G,L.ⓤ{J}⦄ ⊢ T1 ⬈[h] T2 → - ∀p,I. ⦃G,L⦄ ⊢ ⓑ{p,I}V1.T1 ⬈[h] ⓑ{p,I}V2.T2. +lemma cpx_bind_unit (h) (G): ∀L,V1,V2. ❪G,L❫ ⊢ V1 ⬈[h] V2 → + ∀J,T1,T2. ❪G,L.ⓤ[J]❫ ⊢ T1 ⬈[h] T2 → + ∀p,I. ❪G,L❫ ⊢ ⓑ[p,I]V1.T1 ⬈[h] ⓑ[p,I]V2.T2. /4 width=4 by lsubr_cpx_trans, cpx_bind, lsubr_unit/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_reqx.ma index 08823139b..d3cbfa45e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_reqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_reqx.ma @@ -24,6 +24,6 @@ lemma cpx_reqx_conf_sn: ∀h,G. s_r_confluent1 … (cpx h G) reqx. /3 width=6 by cpx_rex_conf/ qed-. (* Basic_2A1: was just: cpx_lleq_conf_dx *) -lemma cpx_reqx_conf_dx: ∀h,G,L2,T1,T2. ⦃G,L2⦄ ⊢ T1 ⬈[h] T2 → +lemma cpx_reqx_conf_dx: ∀h,G,L2,T1,T2. ❪G,L2❫ ⊢ T1 ⬈[h] T2 → ∀L1. L1 ≛[T1] L2 → L1 ≛[T2] L2. /4 width=5 by cpx_reqx_conf_sn, reqx_sym/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_simple.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_simple.ma index 1ce5b538d..d0b3e453e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_simple.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_simple.ma @@ -19,8 +19,8 @@ include "basic_2/rt_transition/cpx.ma". (* Inversion lemmas with simple terms ***************************************) -lemma cpx_inv_appl1_simple: ∀h,G,L,V1,T1,U. ⦃G,L⦄ ⊢ ⓐV1.T1 ⬈[h] U → 𝐒⦃T1⦄ → - ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ⬈[h] V2 & ⦃G,L⦄ ⊢ T1 ⬈[h] T2 & +lemma cpx_inv_appl1_simple: ∀h,G,L,V1,T1,U. ❪G,L❫ ⊢ ⓐV1.T1 ⬈[h] U → 𝐒❪T1❫ → + ∃∃V2,T2. ❪G,L❫ ⊢ V1 ⬈[h] V2 & ❪G,L❫ ⊢ T1 ⬈[h] T2 & U = ⓐV2.T2. #h #G #L #V1 #T1 #U * #c #H #HT1 elim (cpg_inv_appl1_simple … H) -H /3 width=5 by ex3_2_intro, ex_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb.ma index 57a4c6964..5b0c68c2a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb.ma @@ -20,9 +20,9 @@ include "basic_2/rt_transition/lpr_lpx.ma". (* PROPER PARALLEL RST-TRANSITION FOR CLOSURES ******************************) inductive fpb (h) (G1) (L1) (T1): relation3 genv lenv term ≝ -| fpb_fqu: ∀G2,L2,T2. ⦃G1,L1,T1⦄ ⬂ ⦃G2,L2,T2⦄ → fpb h G1 L1 T1 G2 L2 T2 -| fpb_cpx: ∀T2. ⦃G1,L1⦄ ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → fpb h G1 L1 T1 G1 L1 T2 -| fpb_lpx: ∀L2. ⦃G1,L1⦄ ⊢ ⬈[h] L2 → (L1 ≛[T1] L2 → ⊥) → fpb h G1 L1 T1 G1 L2 T1 +| fpb_fqu: ∀G2,L2,T2. ❪G1,L1,T1❫ ⬂ ❪G2,L2,T2❫ → fpb h G1 L1 T1 G2 L2 T2 +| fpb_cpx: ∀T2. ❪G1,L1❫ ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → fpb h G1 L1 T1 G1 L1 T2 +| fpb_lpx: ∀L2. ❪G1,L1❫ ⊢ ⬈[h] L2 → (L1 ≛[T1] L2 → ⊥) → fpb h G1 L1 T1 G1 L2 T1 . interpretation @@ -32,10 +32,10 @@ interpretation (* Basic properties *********************************************************) (* Basic_2A1: includes: cpr_fpb *) -lemma cpm_fpb (n) (h) (G) (L): ∀T1,T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → (T1 ≛ T2 → ⊥) → - ⦃G,L,T1⦄ ≻[h] ⦃G,L,T2⦄. +lemma cpm_fpb (n) (h) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 → (T1 ≛ T2 → ⊥) → + ❪G,L,T1❫ ≻[h] ❪G,L,T2❫. /3 width=2 by fpb_cpx, cpm_fwd_cpx/ qed. -lemma lpr_fpb (h) (G) (T): ∀L1,L2. ⦃G,L1⦄ ⊢ ➡[h] L2 → (L1 ≛[T] L2 → ⊥) → - ⦃G,L1,T⦄ ≻[h] ⦃G,L2,T⦄. +lemma lpr_fpb (h) (G) (T): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h] L2 → (L1 ≛[T] L2 → ⊥) → + ❪G,L1,T❫ ≻[h] ❪G,L2,T❫. /3 width=1 by fpb_lpx, lpr_fwd_lpx/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_feqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_feqx.ma index 0dac369a3..633b7c43c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_feqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_feqx.ma @@ -21,9 +21,9 @@ include "basic_2/rt_transition/fpb_reqx.ma". (* Properties with degree-based equivalence for closures ********************) (* Basic_2A1: uses: fleq_fpb_trans *) -lemma feqx_fpb_trans: ∀h,F1,F2,K1,K2,T1,T2. ⦃F1,K1,T1⦄ ≛ ⦃F2,K2,T2⦄ → - ∀G2,L2,U2. ⦃F2,K2,T2⦄ ≻[h] ⦃G2,L2,U2⦄ → - ∃∃G1,L1,U1. ⦃F1,K1,T1⦄ ≻[h] ⦃G1,L1,U1⦄ & ⦃G1,L1,U1⦄ ≛ ⦃G2,L2,U2⦄. +lemma feqx_fpb_trans: ∀h,F1,F2,K1,K2,T1,T2. ❪F1,K1,T1❫ ≛ ❪F2,K2,T2❫ → + ∀G2,L2,U2. ❪F2,K2,T2❫ ≻[h] ❪G2,L2,U2❫ → + ∃∃G1,L1,U1. ❪F1,K1,T1❫ ≻[h] ❪G1,L1,U1❫ & ❪G1,L1,U1❫ ≛ ❪G2,L2,U2❫. #h #F1 #F2 #K1 #K2 #T1 #T2 * -F2 -K2 -T2 #K2 #T2 #HK12 #HT12 #G2 #L2 #U2 #H12 elim (teqx_fpb_trans … HT12 … H12) -T2 #K0 #T0 #H #HT0 #HK0 @@ -35,8 +35,8 @@ qed-. (* Inversion lemmas with degree-based equivalence for closures **************) (* Basic_2A1: uses: fpb_inv_fleq *) -lemma fpb_inv_feqx: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≻[h] ⦃G2,L2,T2⦄ → - ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → ⊥. +lemma fpb_inv_feqx: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → ⊥. #h #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 [ #G2 #L2 #T2 #H12 #H elim (feqx_inv_gen_sn … H) -H /3 width=11 by reqx_fwd_length, fqu_inv_teqx/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_reqx.ma index 6dea95295..0cc359e48 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_reqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpb_reqx.ma @@ -22,8 +22,8 @@ include "basic_2/rt_transition/fpb.ma". (* Properties with sort-irrelevant equivalence for local environments *******) lemma teqx_fpb_trans: ∀h,U2,U1. U2 ≛ U1 → - ∀G1,G2,L1,L2,T1. ⦃G1,L1,U1⦄ ≻[h] ⦃G2,L2,T1⦄ → - ∃∃L,T2. ⦃G1,L1,U2⦄ ≻[h] ⦃G2,L,T2⦄ & T2 ≛ T1 & L ≛[T1] L2. + ∀G1,G2,L1,L2,T1. ❪G1,L1,U1❫ ≻[h] ❪G2,L2,T1❫ → + ∃∃L,T2. ❪G1,L1,U2❫ ≻[h] ❪G2,L,T2❫ & T2 ≛ T1 & L ≛[T1] L2. #h #U2 #U1 #HU21 #G1 #G2 #L1 #L2 #T1 * -G2 -L2 -T1 [ #G2 #L2 #T1 #H elim (teqx_fqu_trans … H … HU21) -H @@ -37,8 +37,8 @@ qed-. (* Basic_2A1: was just: lleq_fpb_trans *) lemma reqx_fpb_trans: ∀h,F,K1,K2,T. K1 ≛[T] K2 → - ∀G,L2,U. ⦃F,K2,T⦄ ≻[h] ⦃G,L2,U⦄ → - ∃∃L1,U0. ⦃F,K1,T⦄ ≻[h] ⦃G,L1,U0⦄ & U0 ≛ U & L1 ≛[U] L2. + ∀G,L2,U. ❪F,K2,T❫ ≻[h] ❪G,L2,U❫ → + ∃∃L1,U0. ❪F,K1,T❫ ≻[h] ❪G,L1,U0❫ & U0 ≛ U & L1 ≛[U] L2. #h #F #K1 #K2 #T #HT #G #L2 #U * -G -L2 -U [ #G #L2 #U #H2 elim (reqx_fqu_trans … H2 … HT) -K2 /3 width=5 by fpb_fqu, ex3_2_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq.ma index e8e183cb8..3175d6556 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq.ma @@ -21,10 +21,10 @@ include "basic_2/rt_transition/lpr_lpx.ma". (* Basic_2A1: includes: fleq_fpbq fpbq_lleq *) inductive fpbq (h) (G1) (L1) (T1): relation3 genv lenv term ≝ -| fpbq_fquq: ∀G2,L2,T2. ⦃G1,L1,T1⦄ ⬂⸮ ⦃G2,L2,T2⦄ → fpbq h G1 L1 T1 G2 L2 T2 -| fpbq_cpx : ∀T2. ⦃G1,L1⦄ ⊢ T1 ⬈[h] T2 → fpbq h G1 L1 T1 G1 L1 T2 -| fpbq_lpx : ∀L2. ⦃G1,L1⦄ ⊢ ⬈[h] L2 → fpbq h G1 L1 T1 G1 L2 T1 -| fpbq_feqx: ∀G2,L2,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → fpbq h G1 L1 T1 G2 L2 T2 +| fpbq_fquq: ∀G2,L2,T2. ❪G1,L1,T1❫ ⬂⸮ ❪G2,L2,T2❫ → fpbq h G1 L1 T1 G2 L2 T2 +| fpbq_cpx : ∀T2. ❪G1,L1❫ ⊢ T1 ⬈[h] T2 → fpbq h G1 L1 T1 G1 L1 T2 +| fpbq_lpx : ∀L2. ❪G1,L1❫ ⊢ ⬈[h] L2 → fpbq h G1 L1 T1 G1 L2 T1 +| fpbq_feqx: ∀G2,L2,T2. ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → fpbq h G1 L1 T1 G2 L2 T2 . interpretation @@ -37,10 +37,10 @@ lemma fpbq_refl (h): tri_reflexive … (fpbq h). /2 width=1 by fpbq_cpx/ qed. (* Basic_2A1: includes: cpr_fpbq *) -lemma cpm_fpbq (n) (h) (G) (L): ∀T1,T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → ⦃G,L,T1⦄ ≽[h] ⦃G,L,T2⦄. +lemma cpm_fpbq (n) (h) (G) (L): ∀T1,T2. ❪G,L❫ ⊢ T1 ➡[n,h] T2 → ❪G,L,T1❫ ≽[h] ❪G,L,T2❫. /3 width=2 by fpbq_cpx, cpm_fwd_cpx/ qed. -lemma lpr_fpbq (h) (G) (T): ∀L1,L2. ⦃G,L1⦄ ⊢ ➡[h] L2 → ⦃G,L1,T⦄ ≽[h] ⦃G,L2,T⦄. +lemma lpr_fpbq (h) (G) (T): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h] L2 → ❪G,L1,T❫ ≽[h] ❪G,L2,T❫. /3 width=1 by fpbq_lpx, lpr_fwd_lpx/ qed. (* Basic_2A1: removed theorems 2: diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq_aaa.ma index ead3fc1bf..8f3a348ac 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq_aaa.ma @@ -21,8 +21,8 @@ include "basic_2/rt_transition/fpbq.ma". (* Properties with atomic arity assignment for terms ************************) -lemma fpbq_aaa_conf: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≽[h] ⦃G2,L2,T2⦄ → - ∀A1. ⦃G1,L1⦄ ⊢ T1 ⁝ A1 → ∃A2. ⦃G2,L2⦄ ⊢ T2 ⁝ A2. +lemma fpbq_aaa_conf: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≽[h] ❪G2,L2,T2❫ → + ∀A1. ❪G1,L1❫ ⊢ T1 ⁝ A1 → ∃A2. ❪G2,L2❫ ⊢ T2 ⁝ A2. #h #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 /3 width=8 by lpx_aaa_conf, cpx_aaa_conf, aaa_feqx_conf, aaa_fquq_conf, ex_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq_fpb.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq_fpb.ma index af02bdefa..0ec2597f1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq_fpb.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/fpbq_fpb.ma @@ -19,23 +19,23 @@ include "basic_2/rt_transition/fpbq.ma". (* Properties with proper parallel rst-transition for closures **************) -lemma fpb_fpbq: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≻[h] ⦃G2,L2,T2⦄ → - ⦃G1,L1,T1⦄ ≽[h] ⦃G2,L2,T2⦄. +lemma fpb_fpbq: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ ≽[h] ❪G2,L2,T2❫. #h #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 /3 width=1 by fpbq_fquq, fpbq_cpx, fpbq_lpx, fqu_fquq/ qed. (* Basic_2A1: fpb_fpbq_alt *) -lemma fpb_fpbq_fneqx: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≻[h] ⦃G2,L2,T2⦄ → - ∧∧ ⦃G1,L1,T1⦄ ≽[h] ⦃G2,L2,T2⦄ & (⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → ⊥). +lemma fpb_fpbq_fneqx: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫ → + ∧∧ ❪G1,L1,T1❫ ≽[h] ❪G2,L2,T2❫ & (❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → ⊥). /3 width=10 by fpb_fpbq, fpb_inv_feqx, conj/ qed-. (* Inversrion lemmas with proper parallel rst-transition for closures *******) (* Basic_2A1: uses: fpbq_ind_alt *) -lemma fpbq_inv_fpb: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≽[h] ⦃G2,L2,T2⦄ → - ∨∨ ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ - | ⦃G1,L1,T1⦄ ≻[h] ⦃G2,L2,T2⦄. +lemma fpbq_inv_fpb: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≽[h] ❪G2,L2,T2❫ → + ∨∨ ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ + | ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫. #h #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 [ #G2 #L2 #T2 * [2: * #H1 #H2 #H3 destruct ] /3 width=1 by fpb_fqu, feqx_intro_sn, or_intror, or_introl/ @@ -48,8 +48,8 @@ lemma fpbq_inv_fpb: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≽[h] ⦃G2,L2,T2⦄ qed-. (* Basic_2A1: fpbq_inv_fpb_alt *) -lemma fpbq_fneqx_inv_fpb: ∀h,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≽[h] ⦃G2,L2,T2⦄ → - (⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → ⊥) → ⦃G1,L1,T1⦄ ≻[h] ⦃G2,L2,T2⦄. +lemma fpbq_fneqx_inv_fpb: ∀h,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≽[h] ❪G2,L2,T2❫ → + (❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → ⊥) → ❪G1,L1,T1❫ ≻[h] ❪G2,L2,T2❫. #h #G1 #G2 #L1 #L2 #T1 #T2 #H #H0 elim (fpbq_inv_fpb … H) -H // #H elim H0 -H0 // qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr.ma index f47d6640e..646689287 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr.ma @@ -27,8 +27,8 @@ interpretation (* Basic properties *********************************************************) -lemma lpr_bind (h) (G): ∀K1,K2. ⦃G,K1⦄ ⊢ ➡[h] K2 → - ∀I1,I2. ⦃G,K1⦄ ⊢ I1 ➡[h] I2 → ⦃G,K1.ⓘ{I1}⦄ ⊢ ➡[h] K2.ⓘ{I2}. +lemma lpr_bind (h) (G): ∀K1,K2. ❪G,K1❫ ⊢ ➡[h] K2 → + ∀I1,I2. ❪G,K1❫ ⊢ I1 ➡[h] I2 → ❪G,K1.ⓘ[I1]❫ ⊢ ➡[h] K2.ⓘ[I2]. /2 width=1 by lex_bind/ qed. (* Note: lemma 250 *) @@ -37,60 +37,60 @@ lemma lpr_refl (h) (G): reflexive … (lpr h G). (* Advanced properties ******************************************************) -lemma lpr_bind_refl_dx (h) (G): ∀K1,K2. ⦃G,K1⦄ ⊢ ➡[h] K2 → - ∀I. ⦃G,K1.ⓘ{I}⦄ ⊢ ➡[h] K2.ⓘ{I}. +lemma lpr_bind_refl_dx (h) (G): ∀K1,K2. ❪G,K1❫ ⊢ ➡[h] K2 → + ∀I. ❪G,K1.ⓘ[I]❫ ⊢ ➡[h] K2.ⓘ[I]. /2 width=1 by lex_bind_refl_dx/ qed. -lemma lpr_pair (h) (G): ∀K1,K2,V1,V2. ⦃G,K1⦄ ⊢ ➡[h] K2 → ⦃G,K1⦄ ⊢ V1 ➡[h] V2 → - ∀I. ⦃G,K1.ⓑ{I}V1⦄ ⊢ ➡[h] K2.ⓑ{I}V2. +lemma lpr_pair (h) (G): ∀K1,K2,V1,V2. ❪G,K1❫ ⊢ ➡[h] K2 → ❪G,K1❫ ⊢ V1 ➡[h] V2 → + ∀I. ❪G,K1.ⓑ[I]V1❫ ⊢ ➡[h] K2.ⓑ[I]V2. /2 width=1 by lex_pair/ qed. (* Basic inversion lemmas ***************************************************) (* Basic_2A1: was: lpr_inv_atom1 *) (* Basic_1: includes: wcpr0_gen_sort *) -lemma lpr_inv_atom_sn (h) (G): ∀L2. ⦃G,⋆⦄ ⊢ ➡[h] L2 → L2 = ⋆. +lemma lpr_inv_atom_sn (h) (G): ∀L2. ❪G,⋆❫ ⊢ ➡[h] L2 → L2 = ⋆. /2 width=2 by lex_inv_atom_sn/ qed-. -lemma lpr_inv_bind_sn (h) (G): ∀I1,L2,K1. ⦃G,K1.ⓘ{I1}⦄ ⊢ ➡[h] L2 → - ∃∃I2,K2. ⦃G,K1⦄ ⊢ ➡[h] K2 & ⦃G,K1⦄ ⊢ I1 ➡[h] I2 & - L2 = K2.ⓘ{I2}. +lemma lpr_inv_bind_sn (h) (G): ∀I1,L2,K1. ❪G,K1.ⓘ[I1]❫ ⊢ ➡[h] L2 → + ∃∃I2,K2. ❪G,K1❫ ⊢ ➡[h] K2 & ❪G,K1❫ ⊢ I1 ➡[h] I2 & + L2 = K2.ⓘ[I2]. /2 width=1 by lex_inv_bind_sn/ qed-. (* Basic_2A1: was: lpr_inv_atom2 *) -lemma lpr_inv_atom_dx (h) (G): ∀L1. ⦃G,L1⦄ ⊢ ➡[h] ⋆ → L1 = ⋆. +lemma lpr_inv_atom_dx (h) (G): ∀L1. ❪G,L1❫ ⊢ ➡[h] ⋆ → L1 = ⋆. /2 width=2 by lex_inv_atom_dx/ qed-. -lemma lpr_inv_bind_dx (h) (G): ∀I2,L1,K2. ⦃G,L1⦄ ⊢ ➡[h] K2.ⓘ{I2} → - ∃∃I1,K1. ⦃G,K1⦄ ⊢ ➡[h] K2 & ⦃G,K1⦄ ⊢ I1 ➡[h] I2 & - L1 = K1.ⓘ{I1}. +lemma lpr_inv_bind_dx (h) (G): ∀I2,L1,K2. ❪G,L1❫ ⊢ ➡[h] K2.ⓘ[I2] → + ∃∃I1,K1. ❪G,K1❫ ⊢ ➡[h] K2 & ❪G,K1❫ ⊢ I1 ➡[h] I2 & + L1 = K1.ⓘ[I1]. /2 width=1 by lex_inv_bind_dx/ qed-. (* Advanced inversion lemmas ************************************************) -lemma lpr_inv_unit_sn (h) (G): ∀I,L2,K1. ⦃G,K1.ⓤ{I}⦄ ⊢ ➡[h] L2 → - ∃∃K2. ⦃G,K1⦄ ⊢ ➡[h] K2 & L2 = K2.ⓤ{I}. +lemma lpr_inv_unit_sn (h) (G): ∀I,L2,K1. ❪G,K1.ⓤ[I]❫ ⊢ ➡[h] L2 → + ∃∃K2. ❪G,K1❫ ⊢ ➡[h] K2 & L2 = K2.ⓤ[I]. /2 width=1 by lex_inv_unit_sn/ qed-. (* Basic_2A1: was: lpr_inv_pair1 *) (* Basic_1: includes: wcpr0_gen_head *) -lemma lpr_inv_pair_sn (h) (G): ∀I,L2,K1,V1. ⦃G,K1.ⓑ{I}V1⦄ ⊢ ➡[h] L2 → - ∃∃K2,V2. ⦃G,K1⦄ ⊢ ➡[h] K2 & ⦃G,K1⦄ ⊢ V1 ➡[h] V2 & - L2 = K2.ⓑ{I}V2. +lemma lpr_inv_pair_sn (h) (G): ∀I,L2,K1,V1. ❪G,K1.ⓑ[I]V1❫ ⊢ ➡[h] L2 → + ∃∃K2,V2. ❪G,K1❫ ⊢ ➡[h] K2 & ❪G,K1❫ ⊢ V1 ➡[h] V2 & + L2 = K2.ⓑ[I]V2. /2 width=1 by lex_inv_pair_sn/ qed-. -lemma lpr_inv_unit_dx (h) (G): ∀I,L1,K2. ⦃G,L1⦄ ⊢ ➡[h] K2.ⓤ{I} → - ∃∃K1. ⦃G,K1⦄ ⊢ ➡[h] K2 & L1 = K1.ⓤ{I}. +lemma lpr_inv_unit_dx (h) (G): ∀I,L1,K2. ❪G,L1❫ ⊢ ➡[h] K2.ⓤ[I] → + ∃∃K1. ❪G,K1❫ ⊢ ➡[h] K2 & L1 = K1.ⓤ[I]. /2 width=1 by lex_inv_unit_dx/ qed-. (* Basic_2A1: was: lpr_inv_pair2 *) -lemma lpr_inv_pair_dx (h) (G): ∀I,L1,K2,V2. ⦃G,L1⦄ ⊢ ➡[h] K2.ⓑ{I}V2 → - ∃∃K1,V1. ⦃G,K1⦄ ⊢ ➡[h] K2 & ⦃G,K1⦄ ⊢ V1 ➡[h] V2 & - L1 = K1.ⓑ{I}V1. +lemma lpr_inv_pair_dx (h) (G): ∀I,L1,K2,V2. ❪G,L1❫ ⊢ ➡[h] K2.ⓑ[I]V2 → + ∃∃K1,V1. ❪G,K1❫ ⊢ ➡[h] K2 & ❪G,K1❫ ⊢ V1 ➡[h] V2 & + L1 = K1.ⓑ[I]V1. /2 width=1 by lex_inv_pair_dx/ qed-. -lemma lpr_inv_pair (h) (G): ∀I1,I2,L1,L2,V1,V2. ⦃G,L1.ⓑ{I1}V1⦄ ⊢ ➡[h] L2.ⓑ{I2}V2 → - ∧∧ ⦃G,L1⦄ ⊢ ➡[h] L2 & ⦃G,L1⦄ ⊢ V1 ➡[h] V2 & I1 = I2. +lemma lpr_inv_pair (h) (G): ∀I1,I2,L1,L2,V1,V2. ❪G,L1.ⓑ[I1]V1❫ ⊢ ➡[h] L2.ⓑ[I2]V2 → + ∧∧ ❪G,L1❫ ⊢ ➡[h] L2 & ❪G,L1❫ ⊢ V1 ➡[h] V2 & I1 = I2. /2 width=1 by lex_inv_pair/ qed-. (* Basic_1: removed theorems 3: wcpr0_getl wcpr0_getl_back diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_fquq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_fquq.ma index c31e2d0ab..97b4f2c8f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_fquq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_fquq.ma @@ -22,9 +22,9 @@ include "basic_2/rt_transition/lpr.ma". (* Properties with extended structural successor for closures ***************) -lemma fqu_cpr_trans_sn (h) (b): ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → - ∀U2. ⦃G2,L2⦄ ⊢ T2 ➡[h] U2 → - ∃∃L,U1. ⦃G1,L1⦄ ⊢ ➡[h] L & ⦃G1,L1⦄ ⊢ T1 ➡[h] U1 & ⦃G1,L,U1⦄ ⬂[b] ⦃G2,L2,U2⦄. +lemma fqu_cpr_trans_sn (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ➡[h] U2 → + ∃∃L,U1. ❪G1,L1❫ ⊢ ➡[h] L & ❪G1,L1❫ ⊢ T1 ➡[h] U1 & ❪G1,L,U1❫ ⬂[b] ❪G2,L2,U2❫. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 [ /3 width=5 by lpr_pair, fqu_lref_O, ex3_2_intro/ | /3 width=5 by cpr_pair_sn, fqu_pair_sn, ex3_2_intro/ @@ -32,14 +32,14 @@ lemma fqu_cpr_trans_sn (h) (b): ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G | /3 width=5 by cpm_bind_unit, fqu_clear, ex3_2_intro/ | /3 width=5 by cpr_flat, fqu_flat_dx, ex3_2_intro/ | #I #G #K #U #T #HUT #U2 #HU2 - elim (cpm_lifts_sn … HU2 (Ⓣ) … (K.ⓘ{I}) … HUT) -U + elim (cpm_lifts_sn … HU2 (Ⓣ) … (K.ⓘ[I]) … HUT) -U /3 width=5 by lpr_bind_refl_dx, fqu_drop, drops_refl, drops_drop, ex3_2_intro/ ] qed-. -lemma fqu_cpr_trans_dx (h) (b): ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → - ∀U2. ⦃G2,L2⦄ ⊢ T2 ➡[h] U2 → - ∃∃L,U1. ⦃G1,L1⦄ ⊢ ➡[h] L & ⦃G1,L⦄ ⊢ T1 ➡[h] U1 & ⦃G1,L,U1⦄ ⬂[b] ⦃G2,L2,U2⦄. +lemma fqu_cpr_trans_dx (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ➡[h] U2 → + ∃∃L,U1. ❪G1,L1❫ ⊢ ➡[h] L & ❪G1,L❫ ⊢ T1 ➡[h] U1 & ❪G1,L,U1❫ ⬂[b] ❪G2,L2,U2❫. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 [ /3 width=5 by lpr_pair, fqu_lref_O, ex3_2_intro/ | /3 width=5 by cpr_pair_sn, fqu_pair_sn, ex3_2_intro/ @@ -47,14 +47,14 @@ lemma fqu_cpr_trans_dx (h) (b): ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G | /3 width=5 by cpm_bind_unit, fqu_clear, ex3_2_intro/ | /3 width=5 by cpr_flat, fqu_flat_dx, ex3_2_intro/ | #I #G #K #U #T #HUT #U2 #HU2 - elim (cpm_lifts_sn … HU2 (Ⓣ) … (K.ⓘ{I}) … HUT) -U + elim (cpm_lifts_sn … HU2 (Ⓣ) … (K.ⓘ[I]) … HUT) -U /3 width=5 by lpr_bind_refl_dx, fqu_drop, drops_refl, drops_drop, ex3_2_intro/ ] qed-. -lemma fqu_lpr_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → - ∀K2. ⦃G2,L2⦄ ⊢ ➡[h] K2 → - ∃∃K1,T. ⦃G1,L1⦄ ⊢ ➡[h] K1 & ⦃G1,L1⦄ ⊢ T1 ➡[h] T & ⦃G1,K1,T⦄ ⬂[b] ⦃G2,K2,T2⦄. +lemma fqu_lpr_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → + ∀K2. ❪G2,L2❫ ⊢ ➡[h] K2 → + ∃∃K1,T. ❪G1,L1❫ ⊢ ➡[h] K1 & ❪G1,L1❫ ⊢ T1 ➡[h] T & ❪G1,K1,T❫ ⬂[b] ❪G2,K2,T2❫. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 [ /3 width=5 by lpr_bind_refl_dx, fqu_lref_O, ex3_2_intro/ | /3 width=5 by cpr_pair_sn, fqu_pair_sn, ex3_2_intro/ @@ -71,13 +71,13 @@ qed-. (* Note: does not hold in Basic_2A1 because it requires cpm *) (* Note: L1 = K0.ⓛV0 and T1 = #0 require n = 1 *) -lemma lpr_fqu_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → - ∀K1. ⦃G1,K1⦄ ⊢ ➡[h] L1 → - ∃∃n,K2,T. ⦃G1,K1⦄ ⊢ T1 ➡[n,h] T & ⦃G1,K1,T⦄ ⬂[b] ⦃G2,K2,T2⦄ & ⦃G2,K2⦄ ⊢ ➡[h] L2 & n ≤ 1. +lemma lpr_fqu_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → + ∀K1. ❪G1,K1❫ ⊢ ➡[h] L1 → + ∃∃n,K2,T. ❪G1,K1❫ ⊢ T1 ➡[n,h] T & ❪G1,K1,T❫ ⬂[b] ❪G2,K2,T2❫ & ❪G2,K2❫ ⊢ ➡[h] L2 & n ≤ 1. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 [ * #G #K #V #K1 #H elim (lpr_inv_pair_dx … H) -H #K0 #V0 #HK0 #HV0 #H destruct - elim (lifts_total V (𝐔❴1❵)) #T #HVT + elim (lifts_total V (𝐔❨1❩)) #T #HVT /3 width=7 by cpm_ell, cpm_delta, fqu_drop, ex4_3_intro/ | /3 width=7 by cpr_pair_sn, fqu_pair_sn, ex4_3_intro/ | /3 width=7 by lpr_bind_refl_dx, cpr_pair_sn, fqu_bind_dx, ex4_3_intro/ @@ -91,36 +91,36 @@ qed-. (* Properties with extended optional structural successor for closures ******) -lemma fquq_cpr_trans_sn (h) (b): ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂⸮[b] ⦃G2,L2,T2⦄ → - ∀U2. ⦃G2,L2⦄ ⊢ T2 ➡[h] U2 → - ∃∃L,U1. ⦃G1,L1⦄ ⊢ ➡[h] L & ⦃G1,L1⦄ ⊢ T1 ➡[h] U1 & ⦃G1,L,U1⦄ ⬂⸮[b] ⦃G2,L2,U2⦄. +lemma fquq_cpr_trans_sn (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ➡[h] U2 → + ∃∃L,U1. ❪G1,L1❫ ⊢ ➡[h] L & ❪G1,L1❫ ⊢ T1 ➡[h] U1 & ❪G1,L,U1❫ ⬂⸮[b] ❪G2,L2,U2❫. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #U2 #HTU2 cases H -H [ #HT12 elim (fqu_cpr_trans_sn … HT12 … HTU2) /3 width=5 by fqu_fquq, ex3_2_intro/ | * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/ ] qed-. -lemma fquq_cpr_trans_dx (h) (b): ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂⸮[b] ⦃G2,L2,T2⦄ → - ∀U2. ⦃G2,L2⦄ ⊢ T2 ➡[h] U2 → - ∃∃L,U1. ⦃G1,L1⦄ ⊢ ➡[h] L & ⦃G1,L⦄ ⊢ T1 ➡[h] U1 & ⦃G1,L,U1⦄ ⬂⸮[b] ⦃G2,L2,U2⦄. +lemma fquq_cpr_trans_dx (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → + ∀U2. ❪G2,L2❫ ⊢ T2 ➡[h] U2 → + ∃∃L,U1. ❪G1,L1❫ ⊢ ➡[h] L & ❪G1,L❫ ⊢ T1 ➡[h] U1 & ❪G1,L,U1❫ ⬂⸮[b] ❪G2,L2,U2❫. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #U2 #HTU2 cases H -H [ #HT12 elim (fqu_cpr_trans_dx … HT12 … HTU2) /3 width=5 by fqu_fquq, ex3_2_intro/ | * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/ ] qed-. -lemma fquq_lpr_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂⸮[b] ⦃G2,L2,T2⦄ → - ∀K2. ⦃G2,L2⦄ ⊢ ➡[h] K2 → - ∃∃K1,T. ⦃G1,L1⦄ ⊢ ➡[h] K1 & ⦃G1,L1⦄ ⊢ T1 ➡[h] T & ⦃G1,K1,T⦄ ⬂⸮[b] ⦃G2,K2,T2⦄. +lemma fquq_lpr_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → + ∀K2. ❪G2,L2❫ ⊢ ➡[h] K2 → + ∃∃K1,T. ❪G1,L1❫ ⊢ ➡[h] K1 & ❪G1,L1❫ ⊢ T1 ➡[h] T & ❪G1,K1,T❫ ⬂⸮[b] ❪G2,K2,T2❫. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #K2 #HLK2 cases H -H [ #H12 elim (fqu_lpr_trans … H12 … HLK2) /3 width=5 by fqu_fquq, ex3_2_intro/ | * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/ ] qed-. -lemma lpr_fquq_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂⸮[b] ⦃G2,L2,T2⦄ → - ∀K1. ⦃G1,K1⦄ ⊢ ➡[h] L1 → - ∃∃n,K2,T. ⦃G1,K1⦄ ⊢ T1 ➡[n,h] T & ⦃G1,K1,T⦄ ⬂⸮[b] ⦃G2,K2,T2⦄ & ⦃G2,K2⦄ ⊢ ➡[h] L2 & n ≤ 1. +lemma lpr_fquq_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → + ∀K1. ❪G1,K1❫ ⊢ ➡[h] L1 → + ∃∃n,K2,T. ❪G1,K1❫ ⊢ T1 ➡[n,h] T & ❪G1,K1,T❫ ⬂⸮[b] ❪G2,K2,T2❫ & ❪G2,K2❫ ⊢ ➡[h] L2 & n ≤ 1. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #K1 #HKL1 cases H -H [ #H12 elim (lpr_fqu_trans … H12 … HKL1) -L1 /3 width=7 by fqu_fquq, ex4_3_intro/ | * #H1 #H2 #H3 destruct /2 width=7 by ex4_3_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_length.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_length.ma index db3c8e334..cd15d3434 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_length.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_length.ma @@ -17,5 +17,5 @@ include "basic_2/rt_transition/lpr.ma". (* PARALLEL R-TRANSITION FOR FULL LOCAL ENVIRONMENTS ************************) -lemma lpr_fwd_length (h) (G): ∀L1,L2. ⦃G,L1⦄ ⊢ ➡[h] L2 → |L1| = |L2|. +lemma lpr_fwd_length (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h] L2 → |L1| = |L2|. /2 width=2 by lex_fwd_length/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_lpr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_lpr.ma index dcbe44401..58f5d5843 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_lpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_lpr.ma @@ -21,24 +21,24 @@ include "basic_2/rt_transition/lpr_drops.ma". (* PARALLEL R-TRANSITION FOR FULL LOCAL ENVIRONMENTS ************************) definition IH_cpr_conf_lpr (h): relation3 genv lenv term ≝ λG,L,T. - ∀T1. ⦃G,L⦄ ⊢ T ➡[h] T1 → ∀T2. ⦃G,L⦄ ⊢ T ➡[h] T2 → - ∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 → - ∃∃T0. ⦃G,L1⦄ ⊢ T1 ➡[h] T0 & ⦃G,L2⦄ ⊢ T2 ➡[h] T0. + ∀T1. ❪G,L❫ ⊢ T ➡[h] T1 → ∀T2. ❪G,L❫ ⊢ T ➡[h] T2 → + ∀L1. ❪G,L❫ ⊢ ➡[h] L1 → ∀L2. ❪G,L❫ ⊢ ➡[h] L2 → + ∃∃T0. ❪G,L1❫ ⊢ T1 ➡[h] T0 & ❪G,L2❫ ⊢ T2 ➡[h] T0. (* Main properties with context-sensitive parallel reduction for terms ******) fact cpr_conf_lpr_atom_atom (h): - ∀I,G,L1,L2. ∃∃T. ⦃G,L1⦄ ⊢ ⓪{I} ➡[h] T & ⦃G,L2⦄ ⊢ ⓪{I} ➡[h] T. + ∀I,G,L1,L2. ∃∃T. ❪G,L1❫ ⊢ ⓪[I] ➡[h] T & ❪G,L2❫ ⊢ ⓪[I] ➡[h] T. /2 width=3 by cpr_refl, ex2_intro/ qed-. fact cpr_conf_lpr_atom_delta (h): ∀G0,L0,i. ( - ∀G,L,T. ⦃G0,L0,#i⦄ ⬂+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T + ∀G,L,T. ❪G0,L0,#i❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T ) → ∀K0,V0. ⇩*[i] L0 ≘ K0.ⓓV0 → - ∀V2. ⦃G0,K0⦄ ⊢ V0 ➡[h] V2 → ∀T2. ⇧*[↑i] V2 ≘ T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ #i ➡[h] T & ⦃G0,L2⦄ ⊢ T2 ➡[h] T. + ∀V2. ❪G0,K0❫ ⊢ V0 ➡[h] V2 → ∀T2. ⇧*[↑i] V2 ≘ T2 → + ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G0,L1❫ ⊢ #i ➡[h] T & ❪G0,L2❫ ⊢ T2 ➡[h] T. #h #G0 #L0 #i #IH #K0 #V0 #HLK0 #V2 #HV02 #T2 #HVT2 #L1 #HL01 #L2 #HL02 elim (lpr_drops_conf … HLK0 … HL01) -HL01 // #X1 #H1 #HLK1 elim (lpr_inv_pair_sn … H1) -H1 #K1 #V1 #HK01 #HV01 #H destruct @@ -54,14 +54,14 @@ qed-. (* Basic_1: includes: pr0_delta_delta pr2_delta_delta *) fact cpr_conf_lpr_delta_delta (h): ∀G0,L0,i. ( - ∀G,L,T. ⦃G0,L0,#i⦄ ⬂+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T + ∀G,L,T. ❪G0,L0,#i❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T ) → ∀K0,V0. ⇩*[i] L0 ≘ K0.ⓓV0 → - ∀V1. ⦃G0,K0⦄ ⊢ V0 ➡[h] V1 → ∀T1. ⇧*[↑i] V1 ≘ T1 → + ∀V1. ❪G0,K0❫ ⊢ V0 ➡[h] V1 → ∀T1. ⇧*[↑i] V1 ≘ T1 → ∀KX,VX. ⇩*[i] L0 ≘ KX.ⓓVX → - ∀V2. ⦃G0,KX⦄ ⊢ VX ➡[h] V2 → ∀T2. ⇧*[↑i] V2 ≘ T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ T1 ➡[h] T & ⦃G0,L2⦄ ⊢ T2 ➡[h] T. + ∀V2. ❪G0,KX❫ ⊢ VX ➡[h] V2 → ∀T2. ⇧*[↑i] V2 ≘ T2 → + ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G0,L1❫ ⊢ T1 ➡[h] T & ❪G0,L2❫ ⊢ T2 ➡[h] T. #h #G0 #L0 #i #IH #K0 #V0 #HLK0 #V1 #HV01 #T1 #HVT1 #KX #VX #H #V2 #HV02 #T2 #HVT2 #L1 #HL01 #L2 #HL02 lapply (drops_mono … H … HLK0) -H #H destruct @@ -79,27 +79,27 @@ qed-. fact cpr_conf_lpr_bind_bind (h): ∀p,I,G0,L0,V0,T0. ( - ∀G,L,T. ⦃G0,L0,ⓑ{p,I}V0.T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T + ∀G,L,T. ❪G0,L0,ⓑ[p,I]V0.T0❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T ) → - ∀V1. ⦃G0,L0⦄ ⊢ V0 ➡[h] V1 → ∀T1. ⦃G0,L0.ⓑ{I}V0⦄ ⊢ T0 ➡[h] T1 → - ∀V2. ⦃G0,L0⦄ ⊢ V0 ➡[h] V2 → ∀T2. ⦃G0,L0.ⓑ{I}V0⦄ ⊢ T0 ➡[h] T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ ⓑ{p,I}V1.T1 ➡[h] T & ⦃G0,L2⦄ ⊢ ⓑ{p,I}V2.T2 ➡[h] T. + ∀V1. ❪G0,L0❫ ⊢ V0 ➡[h] V1 → ∀T1. ❪G0,L0.ⓑ[I]V0❫ ⊢ T0 ➡[h] T1 → + ∀V2. ❪G0,L0❫ ⊢ V0 ➡[h] V2 → ∀T2. ❪G0,L0.ⓑ[I]V0❫ ⊢ T0 ➡[h] T2 → + ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G0,L1❫ ⊢ ⓑ[p,I]V1.T1 ➡[h] T & ❪G0,L2❫ ⊢ ⓑ[p,I]V2.T2 ➡[h] T. #h #p #I #G0 #L0 #V0 #T0 #IH #V1 #HV01 #T1 #HT01 #V2 #HV02 #T2 #HT02 #L1 #HL01 #L2 #HL02 elim (IH … HV01 … HV02 … HL01 … HL02) // -elim (IH … HT01 … HT02 (L1.ⓑ{I}V1) … (L2.ⓑ{I}V2)) -IH +elim (IH … HT01 … HT02 (L1.ⓑ[I]V1) … (L2.ⓑ[I]V2)) -IH /3 width=5 by lpr_pair, cpm_bind, ex2_intro/ qed-. fact cpr_conf_lpr_bind_zeta (h): ∀G0,L0,V0,T0. ( - ∀G,L,T. ⦃G0,L0,+ⓓV0.T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T + ∀G,L,T. ❪G0,L0,+ⓓV0.T0❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T ) → - ∀V1. ⦃G0,L0⦄ ⊢ V0 ➡[h] V1 → ∀T1. ⦃G0,L0.ⓓV0⦄ ⊢ T0 ➡[h] T1 → - ∀T2. ⇧*[1]T2 ≘ T0 → ∀X2. ⦃G0,L0⦄ ⊢ T2 ➡[h] X2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ +ⓓV1.T1 ➡[h] T & ⦃G0,L2⦄ ⊢ X2 ➡[h] T. + ∀V1. ❪G0,L0❫ ⊢ V0 ➡[h] V1 → ∀T1. ❪G0,L0.ⓓV0❫ ⊢ T0 ➡[h] T1 → + ∀T2. ⇧*[1]T2 ≘ T0 → ∀X2. ❪G0,L0❫ ⊢ T2 ➡[h] X2 → + ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G0,L1❫ ⊢ +ⓓV1.T1 ➡[h] T & ❪G0,L2❫ ⊢ X2 ➡[h] T. #h #G0 #L0 #V0 #T0 #IH #V1 #HV01 #T1 #HT01 #T2 #HT20 #X2 #HTX2 #L1 #HL01 #L2 #HL02 elim (cpm_inv_lifts_sn … HT01 (Ⓣ) … L0 … HT20) -HT01 [| /3 width=1 by drops_refl, drops_drop/ ] #T #HT1 #HT2 @@ -109,12 +109,12 @@ qed-. fact cpr_conf_lpr_zeta_zeta (h): ∀G0,L0,V0,T0. ( - ∀G,L,T. ⦃G0,L0,+ⓓV0.T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T + ∀G,L,T. ❪G0,L0,+ⓓV0.T0❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T ) → - ∀T1. ⇧*[1] T1 ≘ T0 → ∀X1. ⦃G0,L0⦄ ⊢ T1 ➡[h] X1 → - ∀T2. ⇧*[1] T2 ≘ T0 → ∀X2. ⦃G0,L0⦄ ⊢ T2 ➡[h] X2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ X1 ➡[h] T & ⦃G0,L2⦄ ⊢ X2 ➡[h] T. + ∀T1. ⇧*[1] T1 ≘ T0 → ∀X1. ❪G0,L0❫ ⊢ T1 ➡[h] X1 → + ∀T2. ⇧*[1] T2 ≘ T0 → ∀X2. ❪G0,L0❫ ⊢ T2 ➡[h] X2 → + ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G0,L1❫ ⊢ X1 ➡[h] T & ❪G0,L2❫ ⊢ X2 ➡[h] T. #h #G0 #L0 #V0 #T0 #IH #T1 #HT10 #X1 #HTX1 #T2 #HT20 #X2 #HTX2 #L1 #HL01 #L2 #HL02 lapply (lifts_inj … HT20 … HT10) -HT20 #H destruct @@ -124,12 +124,12 @@ qed-. fact cpr_conf_lpr_flat_flat (h): ∀I,G0,L0,V0,T0. ( - ∀G,L,T. ⦃G0,L0,ⓕ{I}V0.T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T + ∀G,L,T. ❪G0,L0,ⓕ[I]V0.T0❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T ) → - ∀V1. ⦃G0,L0⦄ ⊢ V0 ➡[h] V1 → ∀T1. ⦃G0,L0⦄ ⊢ T0 ➡[h] T1 → - ∀V2. ⦃G0,L0⦄ ⊢ V0 ➡[h] V2 → ∀T2. ⦃G0,L0⦄ ⊢ T0 ➡[h] T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ ⓕ{I}V1.T1 ➡[h] T & ⦃G0,L2⦄ ⊢ ⓕ{I}V2.T2 ➡[h] T. + ∀V1. ❪G0,L0❫ ⊢ V0 ➡[h] V1 → ∀T1. ❪G0,L0❫ ⊢ T0 ➡[h] T1 → + ∀V2. ❪G0,L0❫ ⊢ V0 ➡[h] V2 → ∀T2. ❪G0,L0❫ ⊢ T0 ➡[h] T2 → + ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G0,L1❫ ⊢ ⓕ[I]V1.T1 ➡[h] T & ❪G0,L2❫ ⊢ ⓕ[I]V2.T2 ➡[h] T. #h #I #G0 #L0 #V0 #T0 #IH #V1 #HV01 #T1 #HT01 #V2 #HV02 #T2 #HT02 #L1 #HL01 #L2 #HL02 elim (IH … HV01 … HV02 … HL01 … HL02) // @@ -139,11 +139,11 @@ qed-. fact cpr_conf_lpr_flat_eps (h): ∀G0,L0,V0,T0. ( - ∀G,L,T. ⦃G0,L0,ⓝV0.T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T + ∀G,L,T. ❪G0,L0,ⓝV0.T0❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T ) → - ∀V1,T1. ⦃G0,L0⦄ ⊢ T0 ➡[h] T1 → ∀T2. ⦃G0,L0⦄ ⊢ T0 ➡[h] T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ ⓝV1.T1 ➡[h] T & ⦃G0,L2⦄ ⊢ T2 ➡[h] T. + ∀V1,T1. ❪G0,L0❫ ⊢ T0 ➡[h] T1 → ∀T2. ❪G0,L0❫ ⊢ T0 ➡[h] T2 → + ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G0,L1❫ ⊢ ⓝV1.T1 ➡[h] T & ❪G0,L2❫ ⊢ T2 ➡[h] T. #h #G0 #L0 #V0 #T0 #IH #V1 #T1 #HT01 #T2 #HT02 #L1 #HL01 #L2 #HL02 elim (IH … HT01 … HT02 … HL01 … HL02) // -L0 -V0 -T0 @@ -152,11 +152,11 @@ qed-. fact cpr_conf_lpr_eps_eps (h): ∀G0,L0,V0,T0. ( - ∀G,L,T. ⦃G0,L0,ⓝV0.T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T + ∀G,L,T. ❪G0,L0,ⓝV0.T0❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T ) → - ∀T1. ⦃G0,L0⦄ ⊢ T0 ➡[h] T1 → ∀T2. ⦃G0,L0⦄ ⊢ T0 ➡[h] T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ T1 ➡[h] T & ⦃G0,L2⦄ ⊢ T2 ➡[h] T. + ∀T1. ❪G0,L0❫ ⊢ T0 ➡[h] T1 → ∀T2. ❪G0,L0❫ ⊢ T0 ➡[h] T2 → + ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G0,L1❫ ⊢ T1 ➡[h] T & ❪G0,L2❫ ⊢ T2 ➡[h] T. #h #G0 #L0 #V0 #T0 #IH #T1 #HT01 #T2 #HT02 #L1 #HL01 #L2 #HL02 elim (IH … HT01 … HT02 … HL01 … HL02) // -L0 -V0 -T0 @@ -165,12 +165,12 @@ qed-. fact cpr_conf_lpr_flat_beta (h): ∀p,G0,L0,V0,W0,T0. ( - ∀G,L,T. ⦃G0,L0,ⓐV0.ⓛ{p}W0.T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T + ∀G,L,T. ❪G0,L0,ⓐV0.ⓛ[p]W0.T0❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T ) → - ∀V1. ⦃G0,L0⦄ ⊢ V0 ➡[h] V1 → ∀T1. ⦃G0,L0⦄ ⊢ ⓛ{p}W0.T0 ➡[h] T1 → - ∀V2. ⦃G0,L0⦄ ⊢ V0 ➡[h] V2 → ∀W2. ⦃G0,L0⦄ ⊢ W0 ➡[h] W2 → ∀T2. ⦃G0,L0.ⓛW0⦄ ⊢ T0 ➡[h] T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ ⓐV1.T1 ➡[h] T & ⦃G0,L2⦄ ⊢ ⓓ{p}ⓝW2.V2.T2 ➡[h] T. + ∀V1. ❪G0,L0❫ ⊢ V0 ➡[h] V1 → ∀T1. ❪G0,L0❫ ⊢ ⓛ[p]W0.T0 ➡[h] T1 → + ∀V2. ❪G0,L0❫ ⊢ V0 ➡[h] V2 → ∀W2. ❪G0,L0❫ ⊢ W0 ➡[h] W2 → ∀T2. ❪G0,L0.ⓛW0❫ ⊢ T0 ➡[h] T2 → + ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G0,L1❫ ⊢ ⓐV1.T1 ➡[h] T & ❪G0,L2❫ ⊢ ⓓ[p]ⓝW2.V2.T2 ➡[h] T. #h #p #G0 #L0 #V0 #W0 #T0 #IH #V1 #HV01 #X #H #V2 #HV02 #W2 #HW02 #T2 #HT02 #L1 #HL01 #L2 #HL02 elim (cpm_inv_abst1 … H) -H #W1 #T1 #HW01 #HT01 #H destruct @@ -187,13 +187,13 @@ qed-. *) fact cpr_conf_lpr_flat_theta (h): ∀p,G0,L0,V0,W0,T0. ( - ∀G,L,T. ⦃G0,L0,ⓐV0.ⓓ{p}W0.T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T + ∀G,L,T. ❪G0,L0,ⓐV0.ⓓ[p]W0.T0❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T ) → - ∀V1. ⦃G0,L0⦄ ⊢ V0 ➡[h] V1 → ∀T1. ⦃G0,L0⦄ ⊢ ⓓ{p}W0.T0 ➡[h] T1 → - ∀V2. ⦃G0,L0⦄ ⊢ V0 ➡[h] V2 → ∀U2. ⇧*[1] V2 ≘ U2 → - ∀W2. ⦃G0,L0⦄ ⊢ W0 ➡[h] W2 → ∀T2. ⦃G0,L0.ⓓW0⦄ ⊢ T0 ➡[h] T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ ⓐV1.T1 ➡[h] T & ⦃G0,L2⦄ ⊢ ⓓ{p}W2.ⓐU2.T2 ➡[h] T. + ∀V1. ❪G0,L0❫ ⊢ V0 ➡[h] V1 → ∀T1. ❪G0,L0❫ ⊢ ⓓ[p]W0.T0 ➡[h] T1 → + ∀V2. ❪G0,L0❫ ⊢ V0 ➡[h] V2 → ∀U2. ⇧*[1] V2 ≘ U2 → + ∀W2. ❪G0,L0❫ ⊢ W0 ➡[h] W2 → ∀T2. ❪G0,L0.ⓓW0❫ ⊢ T0 ➡[h] T2 → + ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G0,L1❫ ⊢ ⓐV1.T1 ➡[h] T & ❪G0,L2❫ ⊢ ⓓ[p]W2.ⓐU2.T2 ➡[h] T. #h #p #G0 #L0 #V0 #W0 #T0 #IH #V1 #HV01 #X #H #V2 #HV02 #U2 #HVU2 #W2 #HW02 #T2 #HT02 #L1 #HL01 #L2 #HL02 elim (IH … HV01 … HV02 … HL01 … HL02) -HV01 -HV02 /2 width=1 by/ #V #HV1 #HV2 @@ -212,12 +212,12 @@ qed-. fact cpr_conf_lpr_beta_beta (h): ∀p,G0,L0,V0,W0,T0. ( - ∀G,L,T. ⦃G0,L0,ⓐV0.ⓛ{p}W0.T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T + ∀G,L,T. ❪G0,L0,ⓐV0.ⓛ[p]W0.T0❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T ) → - ∀V1. ⦃G0,L0⦄ ⊢ V0 ➡[h] V1 → ∀W1. ⦃G0,L0⦄ ⊢ W0 ➡[h] W1 → ∀T1. ⦃G0,L0.ⓛW0⦄ ⊢ T0 ➡[h] T1 → - ∀V2. ⦃G0,L0⦄ ⊢ V0 ➡[h] V2 → ∀W2. ⦃G0,L0⦄ ⊢ W0 ➡[h] W2 → ∀T2. ⦃G0,L0.ⓛW0⦄ ⊢ T0 ➡[h] T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ ⓓ{p}ⓝW1.V1.T1 ➡[h] T & ⦃G0,L2⦄ ⊢ ⓓ{p}ⓝW2.V2.T2 ➡[h] T. + ∀V1. ❪G0,L0❫ ⊢ V0 ➡[h] V1 → ∀W1. ❪G0,L0❫ ⊢ W0 ➡[h] W1 → ∀T1. ❪G0,L0.ⓛW0❫ ⊢ T0 ➡[h] T1 → + ∀V2. ❪G0,L0❫ ⊢ V0 ➡[h] V2 → ∀W2. ❪G0,L0❫ ⊢ W0 ➡[h] W2 → ∀T2. ❪G0,L0.ⓛW0❫ ⊢ T0 ➡[h] T2 → + ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G0,L1❫ ⊢ ⓓ[p]ⓝW1.V1.T1 ➡[h] T & ❪G0,L2❫ ⊢ ⓓ[p]ⓝW2.V2.T2 ➡[h] T. #h #p #G0 #L0 #V0 #W0 #T0 #IH #V1 #HV01 #W1 #HW01 #T1 #HT01 #V2 #HV02 #W2 #HW02 #T2 #HT02 #L1 #HL01 #L2 #HL02 elim (IH … HV01 … HV02 … HL01 … HL02) -HV01 -HV02 /2 width=1 by/ #V #HV1 #HV2 @@ -231,14 +231,14 @@ qed-. (* Basic_1: was: pr0_upsilon_upsilon *) fact cpr_conf_lpr_theta_theta (h): ∀p,G0,L0,V0,W0,T0. ( - ∀G,L,T. ⦃G0,L0,ⓐV0.ⓓ{p}W0.T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T + ∀G,L,T. ❪G0,L0,ⓐV0.ⓓ[p]W0.T0❫ ⬂+ ❪G,L,T❫ → IH_cpr_conf_lpr h G L T ) → - ∀V1. ⦃G0,L0⦄ ⊢ V0 ➡[h] V1 → ∀U1. ⇧*[1] V1 ≘ U1 → - ∀W1. ⦃G0,L0⦄ ⊢ W0 ➡[h] W1 → ∀T1. ⦃G0,L0.ⓓW0⦄ ⊢ T0 ➡[h] T1 → - ∀V2. ⦃G0,L0⦄ ⊢ V0 ➡[h] V2 → ∀U2. ⇧*[1] V2 ≘ U2 → - ∀W2. ⦃G0,L0⦄ ⊢ W0 ➡[h] W2 → ∀T2. ⦃G0,L0.ⓓW0⦄ ⊢ T0 ➡[h] T2 → - ∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 → - ∃∃T. ⦃G0,L1⦄ ⊢ ⓓ{p}W1.ⓐU1.T1 ➡[h] T & ⦃G0,L2⦄ ⊢ ⓓ{p}W2.ⓐU2.T2 ➡[h] T. + ∀V1. ❪G0,L0❫ ⊢ V0 ➡[h] V1 → ∀U1. ⇧*[1] V1 ≘ U1 → + ∀W1. ❪G0,L0❫ ⊢ W0 ➡[h] W1 → ∀T1. ❪G0,L0.ⓓW0❫ ⊢ T0 ➡[h] T1 → + ∀V2. ❪G0,L0❫ ⊢ V0 ➡[h] V2 → ∀U2. ⇧*[1] V2 ≘ U2 → + ∀W2. ❪G0,L0❫ ⊢ W0 ➡[h] W2 → ∀T2. ❪G0,L0.ⓓW0❫ ⊢ T0 ➡[h] T2 → + ∀L1. ❪G0,L0❫ ⊢ ➡[h] L1 → ∀L2. ❪G0,L0❫ ⊢ ➡[h] L2 → + ∃∃T. ❪G0,L1❫ ⊢ ⓓ[p]W1.ⓐU1.T1 ➡[h] T & ❪G0,L2❫ ⊢ ⓓ[p]W2.ⓐU2.T2 ➡[h] T. #h #p #G0 #L0 #V0 #W0 #T0 #IH #V1 #HV01 #U1 #HVU1 #W1 #HW01 #T1 #HT01 #V2 #HV02 #U2 #HVU2 #W2 #HW02 #T2 #HT02 #L1 #HL01 #L2 #HL02 elim (IH … HV01 … HV02 … HL01 … HL02) -HV01 -HV02 /2 width=1 by/ #V #HV1 #HV2 @@ -308,15 +308,15 @@ qed-. (* Properties with context-sensitive parallel reduction for terms ***********) -lemma lpr_cpr_conf_dx (h) (G): ∀L0. ∀T0,T1:term. ⦃G,L0⦄ ⊢ T0 ➡[h] T1 → ∀L1. ⦃G,L0⦄ ⊢ ➡[h] L1 → - ∃∃T. ⦃G,L1⦄ ⊢ T0 ➡[h] T & ⦃G,L1⦄ ⊢ T1 ➡[h] T. +lemma lpr_cpr_conf_dx (h) (G): ∀L0. ∀T0,T1:term. ❪G,L0❫ ⊢ T0 ➡[h] T1 → ∀L1. ❪G,L0❫ ⊢ ➡[h] L1 → + ∃∃T. ❪G,L1❫ ⊢ T0 ➡[h] T & ❪G,L1❫ ⊢ T1 ➡[h] T. #h #G #L0 #T0 #T1 #HT01 #L1 #HL01 elim (cpr_conf_lpr … HT01 T0 … HL01 … HL01) -HT01 -HL01 /2 width=3 by ex2_intro/ qed-. -lemma lpr_cpr_conf_sn (h) (G): ∀L0. ∀T0,T1:term. ⦃G,L0⦄ ⊢ T0 ➡[h] T1 → ∀L1. ⦃G,L0⦄ ⊢ ➡[h] L1 → - ∃∃T. ⦃G,L1⦄ ⊢ T0 ➡[h] T & ⦃G,L0⦄ ⊢ T1 ➡[h] T. +lemma lpr_cpr_conf_sn (h) (G): ∀L0. ∀T0,T1:term. ❪G,L0❫ ⊢ T0 ➡[h] T1 → ∀L1. ❪G,L0❫ ⊢ ➡[h] L1 → + ∃∃T. ❪G,L1❫ ⊢ T0 ➡[h] T & ❪G,L0❫ ⊢ T1 ➡[h] T. #h #G #L0 #T0 #T1 #HT01 #L1 #HL01 elim (cpr_conf_lpr … HT01 T0 … L0 … HL01) -HT01 -HL01 /2 width=3 by ex2_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_lpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_lpx.ma index 6cc94e31f..df7889d62 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_lpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpr_lpx.ma @@ -21,5 +21,5 @@ include "basic_2/rt_transition/lpr.ma". (* Forward lemmas with unbound parallel rt-transition for ref local envs ****) (* Basic_2A1: was: lpr_lpx *) -lemma lpr_fwd_lpx (h) (G): ∀L1,L2. ⦃G,L1⦄ ⊢ ➡[h] L2 → ⦃G,L1⦄ ⊢ ⬈[h] L2. +lemma lpr_fwd_lpx (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ➡[h] L2 → ❪G,L1❫ ⊢ ⬈[h] L2. /3 width=3 by cpm_fwd_cpx, lex_co/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx.ma index 14d34b21a..4363fb103 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx.ma @@ -27,8 +27,8 @@ interpretation (* Basic properties *********************************************************) -lemma lpx_bind (h) (G): ∀K1,K2. ⦃G,K1⦄ ⊢ ⬈[h] K2 → - ∀I1,I2. ⦃G,K1⦄ ⊢ I1 ⬈[h] I2 → ⦃G,K1.ⓘ{I1}⦄ ⊢ ⬈[h] K2.ⓘ{I2}. +lemma lpx_bind (h) (G): ∀K1,K2. ❪G,K1❫ ⊢ ⬈[h] K2 → + ∀I1,I2. ❪G,K1❫ ⊢ I1 ⬈[h] I2 → ❪G,K1.ⓘ[I1]❫ ⊢ ⬈[h] K2.ⓘ[I2]. /2 width=1 by lex_bind/ qed. lemma lpx_refl (h) (G): reflexive … (lpx h G). @@ -36,56 +36,56 @@ lemma lpx_refl (h) (G): reflexive … (lpx h G). (* Advanced properties ******************************************************) -lemma lpx_bind_refl_dx (h) (G): ∀K1,K2. ⦃G,K1⦄ ⊢ ⬈[h] K2 → - ∀I. ⦃G,K1.ⓘ{I}⦄ ⊢ ⬈[h] K2.ⓘ{I}. +lemma lpx_bind_refl_dx (h) (G): ∀K1,K2. ❪G,K1❫ ⊢ ⬈[h] K2 → + ∀I. ❪G,K1.ⓘ[I]❫ ⊢ ⬈[h] K2.ⓘ[I]. /2 width=1 by lex_bind_refl_dx/ qed. -lemma lpx_pair (h) (G): ∀K1,K2. ⦃G,K1⦄ ⊢ ⬈[h] K2 → ∀V1,V2. ⦃G,K1⦄ ⊢ V1 ⬈[h] V2 → - ∀I.⦃G,K1.ⓑ{I}V1⦄ ⊢ ⬈[h] K2.ⓑ{I}V2. +lemma lpx_pair (h) (G): ∀K1,K2. ❪G,K1❫ ⊢ ⬈[h] K2 → ∀V1,V2. ❪G,K1❫ ⊢ V1 ⬈[h] V2 → + ∀I.❪G,K1.ⓑ[I]V1❫ ⊢ ⬈[h] K2.ⓑ[I]V2. /2 width=1 by lex_pair/ qed. (* Basic inversion lemmas ***************************************************) (* Basic_2A1: was: lpx_inv_atom1 *) -lemma lpx_inv_atom_sn (h) (G): ∀L2. ⦃G,⋆⦄ ⊢ ⬈[h] L2 → L2 = ⋆. +lemma lpx_inv_atom_sn (h) (G): ∀L2. ❪G,⋆❫ ⊢ ⬈[h] L2 → L2 = ⋆. /2 width=2 by lex_inv_atom_sn/ qed-. -lemma lpx_inv_bind_sn (h) (G): ∀I1,L2,K1. ⦃G,K1.ⓘ{I1}⦄ ⊢ ⬈[h] L2 → - ∃∃I2,K2. ⦃G,K1⦄ ⊢ ⬈[h] K2 & ⦃G,K1⦄ ⊢ I1 ⬈[h] I2 & - L2 = K2.ⓘ{I2}. +lemma lpx_inv_bind_sn (h) (G): ∀I1,L2,K1. ❪G,K1.ⓘ[I1]❫ ⊢ ⬈[h] L2 → + ∃∃I2,K2. ❪G,K1❫ ⊢ ⬈[h] K2 & ❪G,K1❫ ⊢ I1 ⬈[h] I2 & + L2 = K2.ⓘ[I2]. /2 width=1 by lex_inv_bind_sn/ qed-. (* Basic_2A1: was: lpx_inv_atom2 *) -lemma lpx_inv_atom_dx: ∀h,G,L1. ⦃G,L1⦄ ⊢ ⬈[h] ⋆ → L1 = ⋆. +lemma lpx_inv_atom_dx: ∀h,G,L1. ❪G,L1❫ ⊢ ⬈[h] ⋆ → L1 = ⋆. /2 width=2 by lex_inv_atom_dx/ qed-. -lemma lpx_inv_bind_dx (h) (G): ∀I2,L1,K2. ⦃G,L1⦄ ⊢ ⬈[h] K2.ⓘ{I2} → - ∃∃I1,K1. ⦃G,K1⦄ ⊢ ⬈[h] K2 & ⦃G,K1⦄ ⊢ I1 ⬈[h] I2 & - L1 = K1.ⓘ{I1}. +lemma lpx_inv_bind_dx (h) (G): ∀I2,L1,K2. ❪G,L1❫ ⊢ ⬈[h] K2.ⓘ[I2] → + ∃∃I1,K1. ❪G,K1❫ ⊢ ⬈[h] K2 & ❪G,K1❫ ⊢ I1 ⬈[h] I2 & + L1 = K1.ⓘ[I1]. /2 width=1 by lex_inv_bind_dx/ qed-. (* Advanced inversion lemmas ************************************************) -lemma lpx_inv_unit_sn (h) (G): ∀I,L2,K1. ⦃G,K1.ⓤ{I}⦄ ⊢ ⬈[h] L2 → - ∃∃K2. ⦃G,K1⦄ ⊢ ⬈[h] K2 & L2 = K2.ⓤ{I}. +lemma lpx_inv_unit_sn (h) (G): ∀I,L2,K1. ❪G,K1.ⓤ[I]❫ ⊢ ⬈[h] L2 → + ∃∃K2. ❪G,K1❫ ⊢ ⬈[h] K2 & L2 = K2.ⓤ[I]. /2 width=1 by lex_inv_unit_sn/ qed-. (* Basic_2A1: was: lpx_inv_pair1 *) -lemma lpx_inv_pair_sn (h) (G): ∀I,L2,K1,V1. ⦃G,K1.ⓑ{I}V1⦄ ⊢ ⬈[h] L2 → - ∃∃K2,V2. ⦃G,K1⦄ ⊢ ⬈[h] K2 & ⦃G,K1⦄ ⊢ V1 ⬈[h] V2 & - L2 = K2.ⓑ{I}V2. +lemma lpx_inv_pair_sn (h) (G): ∀I,L2,K1,V1. ❪G,K1.ⓑ[I]V1❫ ⊢ ⬈[h] L2 → + ∃∃K2,V2. ❪G,K1❫ ⊢ ⬈[h] K2 & ❪G,K1❫ ⊢ V1 ⬈[h] V2 & + L2 = K2.ⓑ[I]V2. /2 width=1 by lex_inv_pair_sn/ qed-. -lemma lpx_inv_unit_dx (h) (G): ∀I,L1,K2. ⦃G,L1⦄ ⊢ ⬈[h] K2.ⓤ{I} → - ∃∃K1. ⦃G,K1⦄ ⊢ ⬈[h] K2 & L1 = K1.ⓤ{I}. +lemma lpx_inv_unit_dx (h) (G): ∀I,L1,K2. ❪G,L1❫ ⊢ ⬈[h] K2.ⓤ[I] → + ∃∃K1. ❪G,K1❫ ⊢ ⬈[h] K2 & L1 = K1.ⓤ[I]. /2 width=1 by lex_inv_unit_dx/ qed-. (* Basic_2A1: was: lpx_inv_pair2 *) -lemma lpx_inv_pair_dx (h) (G): ∀I,L1,K2,V2. ⦃G,L1⦄ ⊢ ⬈[h] K2.ⓑ{I}V2 → - ∃∃K1,V1. ⦃G,K1⦄ ⊢ ⬈[h] K2 & ⦃G,K1⦄ ⊢ V1 ⬈[h] V2 & - L1 = K1.ⓑ{I}V1. +lemma lpx_inv_pair_dx (h) (G): ∀I,L1,K2,V2. ❪G,L1❫ ⊢ ⬈[h] K2.ⓑ[I]V2 → + ∃∃K1,V1. ❪G,K1❫ ⊢ ⬈[h] K2 & ❪G,K1❫ ⊢ V1 ⬈[h] V2 & + L1 = K1.ⓑ[I]V1. /2 width=1 by lex_inv_pair_dx/ qed-. -lemma lpx_inv_pair (h) (G): ∀I1,I2,L1,L2,V1,V2. ⦃G,L1.ⓑ{I1}V1⦄ ⊢ ⬈[h] L2.ⓑ{I2}V2 → - ∧∧ ⦃G,L1⦄ ⊢ ⬈[h] L2 & ⦃G,L1⦄ ⊢ V1 ⬈[h] V2 & I1 = I2. +lemma lpx_inv_pair (h) (G): ∀I1,I2,L1,L2,V1,V2. ❪G,L1.ⓑ[I1]V1❫ ⊢ ⬈[h] L2.ⓑ[I2]V2 → + ∧∧ ❪G,L1❫ ⊢ ⬈[h] L2 & ❪G,L1❫ ⊢ V1 ⬈[h] V2 & I1 = I2. /2 width=1 by lex_inv_pair/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_aaa.ma index 6e2319f19..4cb7cbe86 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_aaa.ma @@ -22,9 +22,9 @@ include "basic_2/rt_transition/lpx_drops.ma". (* Note: lemma 500 *) (* Basic_2A1: was: cpx_lpx_aaa_conf *) -lemma cpx_aaa_conf_lpx (h): ∀G,L1,T1,A. ⦃G,L1⦄ ⊢ T1 ⁝ A → - ∀T2. ⦃G,L1⦄ ⊢ T1 ⬈[h] T2 → - ∀L2. ⦃G,L1⦄ ⊢ ⬈[h] L2 → ⦃G,L2⦄ ⊢ T2 ⁝ A. +lemma cpx_aaa_conf_lpx (h): ∀G,L1,T1,A. ❪G,L1❫ ⊢ T1 ⁝ A → + ∀T2. ❪G,L1❫ ⊢ T1 ⬈[h] T2 → + ∀L2. ❪G,L1❫ ⊢ ⬈[h] L2 → ❪G,L2❫ ⊢ T2 ⁝ A. #h #G #L1 #T1 #A #H elim H -G -L1 -T1 -A [ #G #L1 #s #X #H elim (cpx_inv_sort1 … H) -H #H destruct // @@ -57,12 +57,12 @@ lemma cpx_aaa_conf_lpx (h): ∀G,L1,T1,A. ⦃G,L1⦄ ⊢ T1 ⁝ A → [ #V2 #T2 #HV12 #HT12 #H destruct /3 width=3 by aaa_appl/ | #q #V2 #W1 #W2 #U1 #U2 #HV12 #HW12 #HU12 #H1 #H2 destruct lapply (IHV1 … HV12 … HL12) -IHV1 -HV12 #HV2 - lapply (IHT1 (ⓛ{q}W2.U2) … HL12) -IHT1 /2 width=1 by cpx_bind/ -L1 #H + lapply (IHT1 (ⓛ[q]W2.U2) … HL12) -IHT1 /2 width=1 by cpx_bind/ -L1 #H elim (aaa_inv_abst … H) -H #B0 #A0 #HW1 #HU2 #H destruct /5 width=6 by lsuba_aaa_trans, lsuba_beta, aaa_abbr, aaa_cast/ | #q #V #V2 #W1 #W2 #U1 #U2 #HV1 #HV2 #HW12 #HU12 #H1 #H2 destruct lapply (aaa_lifts G L2 … B … (L2.ⓓW2) … HV2) -HV2 /3 width=2 by drops_refl, drops_drop/ #HV2 - lapply (IHT1 (ⓓ{q}W2.U2) … HL12) -IHT1 /2 width=1 by cpx_bind/ -L1 #H + lapply (IHT1 (ⓓ[q]W2.U2) … HL12) -IHT1 /2 width=1 by cpx_bind/ -L1 #H elim (aaa_inv_abbr … H) -H /3 width=3 by aaa_abbr, aaa_appl/ ] | #G #L1 #V1 #T1 #A #_ #_ #IHV1 #IHT1 #X #H #L2 #HL12 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fquq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fquq.ma index b73fe99b5..23e08858c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fquq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fquq.ma @@ -19,13 +19,13 @@ include "basic_2/rt_transition/lpx.ma". (* Properties with extended structural successor for closures ***************) -lemma lpx_fqu_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → - ∀K1. ⦃G1,K1⦄ ⊢ ⬈[h] L1 → - ∃∃K2,T. ⦃G1,K1⦄ ⊢ T1 ⬈[h] T & ⦃G1,K1,T⦄ ⬂[b] ⦃G2,K2,T2⦄ & ⦃G2,K2⦄ ⊢ ⬈[h] L2. +lemma lpx_fqu_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → + ∀K1. ❪G1,K1❫ ⊢ ⬈[h] L1 → + ∃∃K2,T. ❪G1,K1❫ ⊢ T1 ⬈[h] T & ❪G1,K1,T❫ ⬂[b] ❪G2,K2,T2❫ & ❪G2,K2❫ ⊢ ⬈[h] L2. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 [ #I #G #K #V #K1 #H elim (lpx_inv_pair_dx … H) -H #K0 #V0 #HK0 #HV0 #H destruct - elim (lifts_total V (𝐔❴1❵)) #T #HVT + elim (lifts_total V (𝐔❨1❩)) #T #HVT /3 width=5 by cpx_delta, fqu_drop, ex3_2_intro/ | /3 width=5 by cpx_pair_sn, fqu_pair_sn, ex3_2_intro/ | /3 width=5 by lpx_bind_refl_dx, cpx_pair_sn, fqu_bind_dx, ex3_2_intro/ @@ -37,9 +37,9 @@ lemma lpx_fqu_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L ] qed-. -lemma fqu_lpx_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → - ∀K2. ⦃G2,L2⦄ ⊢ ⬈[h] K2 → - ∃∃K1,T. ⦃G1,L1⦄ ⊢ ⬈[h] K1 & ⦃G1,L1⦄ ⊢ T1 ⬈[h] T & ⦃G1,K1,T⦄ ⬂[b] ⦃G2,K2,T2⦄. +lemma fqu_lpx_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → + ∀K2. ❪G2,L2❫ ⊢ ⬈[h] K2 → + ∃∃K1,T. ❪G1,L1❫ ⊢ ⬈[h] K1 & ❪G1,L1❫ ⊢ T1 ⬈[h] T & ❪G1,K1,T❫ ⬂[b] ❪G2,K2,T2❫. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 [ /3 width=5 by lpx_bind_refl_dx, fqu_lref_O, ex3_2_intro/ | /3 width=5 by cpx_pair_sn, fqu_pair_sn, ex3_2_intro/ @@ -56,18 +56,18 @@ qed-. (* Properties with extended optional structural successor for closures ******) -lemma lpx_fquq_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂⸮[b] ⦃G2,L2,T2⦄ → - ∀K1. ⦃G1,K1⦄ ⊢ ⬈[h] L1 → - ∃∃K2,T. ⦃G1,K1⦄ ⊢ T1 ⬈[h] T & ⦃G1,K1,T⦄ ⬂⸮[b] ⦃G2,K2,T2⦄ & ⦃G2,K2⦄ ⊢ ⬈[h] L2. +lemma lpx_fquq_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → + ∀K1. ❪G1,K1❫ ⊢ ⬈[h] L1 → + ∃∃K2,T. ❪G1,K1❫ ⊢ T1 ⬈[h] T & ❪G1,K1,T❫ ⬂⸮[b] ❪G2,K2,T2❫ & ❪G2,K2❫ ⊢ ⬈[h] L2. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #K1 #HKL1 cases H -H [ #H12 elim (lpx_fqu_trans … H12 … HKL1) -L1 /3 width=5 by fqu_fquq, ex3_2_intro/ | * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/ ] qed-. -lemma fquq_lpx_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂⸮[b] ⦃G2,L2,T2⦄ → - ∀K2. ⦃G2,L2⦄ ⊢ ⬈[h] K2 → - ∃∃K1,T. ⦃G1,L1⦄ ⊢ ⬈[h] K1 & ⦃G1,L1⦄ ⊢ T1 ⬈[h] T & ⦃G1,K1,T⦄ ⬂⸮[b] ⦃G2,K2,T2⦄. +lemma fquq_lpx_trans (h) (b): ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → + ∀K2. ❪G2,L2❫ ⊢ ⬈[h] K2 → + ∃∃K1,T. ❪G1,L1❫ ⊢ ⬈[h] K1 & ❪G1,L1❫ ⊢ T1 ⬈[h] T & ❪G1,K1,T❫ ⬂⸮[b] ❪G2,K2,T2❫. #h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #K2 #HLK2 cases H -H [ #H12 elim (fqu_lpx_trans … H12 … HLK2) /3 width=5 by fqu_fquq, ex3_2_intro/ | * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fsle.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fsle.ma index ed3144625..4f90ed805 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fsle.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_fsle.ma @@ -19,10 +19,10 @@ include "basic_2/rt_transition/rpx_lpx.ma". (* Forward lemmas with free variables inclusion for restricted closures *****) (* Basic_2A1: uses: lpx_cpx_frees_trans *) -lemma lpx_cpx_conf_fsge (h) (G): ∀L0,T0,T1. ⦃G,L0⦄ ⊢ T0 ⬈[h] T1 → - ∀L2. ⦃G,L0⦄ ⊢ ⬈[h] L2 → ⦃L2,T1⦄ ⊆ ⦃L0,T0⦄. +lemma lpx_cpx_conf_fsge (h) (G): ∀L0,T0,T1. ❪G,L0❫ ⊢ T0 ⬈[h] T1 → + ∀L2. ❪G,L0❫ ⊢ ⬈[h] L2 → ❪L2,T1❫ ⊆ ❪L0,T0❫. /3 width=4 by rpx_cpx_conf_fsge, lpx_rpx/ qed-. (* Basic_2A1: uses: lpx_frees_trans *) -lemma lpx_fsge_comp (h) (G): ∀L0,L2,T0. ⦃G,L0⦄ ⊢ ⬈[h] L2 → ⦃L2,T0⦄ ⊆ ⦃L0,T0⦄. +lemma lpx_fsge_comp (h) (G): ∀L0,L2,T0. ❪G,L0❫ ⊢ ⬈[h] L2 → ❪L2,T0❫ ⊆ ❪L0,T0❫. /2 width=4 by lpx_cpx_conf_fsge/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_length.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_length.ma index 1c416b934..2332d68aa 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_length.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_length.ma @@ -19,5 +19,5 @@ include "basic_2/rt_transition/lpx.ma". (* Forward lemmas with length for local environments ************************) -lemma lpx_fwd_length (h) (G): ∀L1,L2. ⦃G,L1⦄ ⊢ ⬈[h] L2 → |L1| = |L2|. +lemma lpx_fwd_length (h) (G): ∀L1,L2. ❪G,L1❫ ⊢ ⬈[h] L2 → |L1| = |L2|. /2 width=2 by lex_fwd_length/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_reqx.ma index ad623b08b..36c97f983 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_reqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lpx_reqx.ma @@ -21,9 +21,9 @@ include "basic_2/rt_transition/rpx_lpx.ma". (* Properties with sort-irrelevant equivalence for local environments *******) (* Basic_2A1: uses: lleq_lpx_trans *) -lemma reqx_lpx_trans (h) (G): ∀L2,K2. ⦃G,L2⦄ ⊢ ⬈[h] K2 → +lemma reqx_lpx_trans (h) (G): ∀L2,K2. ❪G,L2❫ ⊢ ⬈[h] K2 → ∀L1. ∀T:term. L1 ≛[T] L2 → - ∃∃K1. ⦃G,L1⦄ ⊢ ⬈[h] K1 & K1 ≛[T] K2. + ∃∃K1. ❪G,L1❫ ⊢ ⬈[h] K1 & K1 ≛[T] K2. #h #G #L2 #K2 #HLK2 #L1 #T #HL12 lapply (lpx_rpx … T HLK2) -HLK2 #HLK2 elim (reqx_rpx_trans … HLK2 … HL12) -L2 #K #H #HK2 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx.ma index 70351ad4f..b3c8ba2fd 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx.ma @@ -27,111 +27,111 @@ interpretation (* Basic properties ***********************************************************) -lemma rpx_atom: ∀h,I,G. ⦃G,⋆⦄ ⊢ ⬈[h,⓪{I}] ⋆. +lemma rpx_atom: ∀h,I,G. ❪G,⋆❫ ⊢ ⬈[h,⓪[I]] ⋆. /2 width=1 by rex_atom/ qed. lemma rpx_sort: ∀h,I1,I2,G,L1,L2,s. - ⦃G,L1⦄ ⊢ ⬈[h,⋆s] L2 → ⦃G,L1.ⓘ{I1}⦄ ⊢ ⬈[h,⋆s] L2.ⓘ{I2}. + ❪G,L1❫ ⊢ ⬈[h,⋆s] L2 → ❪G,L1.ⓘ[I1]❫ ⊢ ⬈[h,⋆s] L2.ⓘ[I2]. /2 width=1 by rex_sort/ qed. lemma rpx_pair: ∀h,I,G,L1,L2,V1,V2. - ⦃G,L1⦄ ⊢ ⬈[h,V1] L2 → ⦃G,L1⦄ ⊢ V1 ⬈[h] V2 → ⦃G,L1.ⓑ{I}V1⦄ ⊢ ⬈[h,#0] L2.ⓑ{I}V2. + ❪G,L1❫ ⊢ ⬈[h,V1] L2 → ❪G,L1❫ ⊢ V1 ⬈[h] V2 → ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈[h,#0] L2.ⓑ[I]V2. /2 width=1 by rex_pair/ qed. lemma rpx_lref: ∀h,I1,I2,G,L1,L2,i. - ⦃G,L1⦄ ⊢ ⬈[h,#i] L2 → ⦃G,L1.ⓘ{I1}⦄ ⊢ ⬈[h,#↑i] L2.ⓘ{I2}. + ❪G,L1❫ ⊢ ⬈[h,#i] L2 → ❪G,L1.ⓘ[I1]❫ ⊢ ⬈[h,#↑i] L2.ⓘ[I2]. /2 width=1 by rex_lref/ qed. lemma rpx_gref: ∀h,I1,I2,G,L1,L2,l. - ⦃G,L1⦄ ⊢ ⬈[h,§l] L2 → ⦃G,L1.ⓘ{I1}⦄ ⊢ ⬈[h,§l] L2.ⓘ{I2}. + ❪G,L1❫ ⊢ ⬈[h,§l] L2 → ❪G,L1.ⓘ[I1]❫ ⊢ ⬈[h,§l] L2.ⓘ[I2]. /2 width=1 by rex_gref/ qed. lemma rpx_bind_repl_dx: ∀h,I,I1,G,L1,L2,T. - ⦃G,L1.ⓘ{I}⦄ ⊢ ⬈[h,T] L2.ⓘ{I1} → - ∀I2. ⦃G,L1⦄ ⊢ I ⬈[h] I2 → - ⦃G,L1.ⓘ{I}⦄ ⊢ ⬈[h,T] L2.ⓘ{I2}. + ❪G,L1.ⓘ[I]❫ ⊢ ⬈[h,T] L2.ⓘ[I1] → + ∀I2. ❪G,L1❫ ⊢ I ⬈[h] I2 → + ❪G,L1.ⓘ[I]❫ ⊢ ⬈[h,T] L2.ⓘ[I2]. /2 width=2 by rex_bind_repl_dx/ qed-. (* Basic inversion lemmas ***************************************************) -lemma rpx_inv_atom_sn: ∀h,G,Y2,T. ⦃G,⋆⦄ ⊢ ⬈[h,T] Y2 → Y2 = ⋆. +lemma rpx_inv_atom_sn: ∀h,G,Y2,T. ❪G,⋆❫ ⊢ ⬈[h,T] Y2 → Y2 = ⋆. /2 width=3 by rex_inv_atom_sn/ qed-. -lemma rpx_inv_atom_dx: ∀h,G,Y1,T. ⦃G,Y1⦄ ⊢ ⬈[h,T] ⋆ → Y1 = ⋆. +lemma rpx_inv_atom_dx: ∀h,G,Y1,T. ❪G,Y1❫ ⊢ ⬈[h,T] ⋆ → Y1 = ⋆. /2 width=3 by rex_inv_atom_dx/ qed-. -lemma rpx_inv_sort: ∀h,G,Y1,Y2,s. ⦃G,Y1⦄ ⊢ ⬈[h,⋆s] Y2 → +lemma rpx_inv_sort: ∀h,G,Y1,Y2,s. ❪G,Y1❫ ⊢ ⬈[h,⋆s] Y2 → ∨∨ Y1 = ⋆ ∧ Y2 = ⋆ - | ∃∃I1,I2,L1,L2. ⦃G,L1⦄ ⊢ ⬈[h,⋆s] L2 & - Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}. + | ∃∃I1,I2,L1,L2. ❪G,L1❫ ⊢ ⬈[h,⋆s] L2 & + Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2]. /2 width=1 by rex_inv_sort/ qed-. -lemma rpx_inv_lref: ∀h,G,Y1,Y2,i. ⦃G,Y1⦄ ⊢ ⬈[h,#↑i] Y2 → +lemma rpx_inv_lref: ∀h,G,Y1,Y2,i. ❪G,Y1❫ ⊢ ⬈[h,#↑i] Y2 → ∨∨ Y1 = ⋆ ∧ Y2 = ⋆ - | ∃∃I1,I2,L1,L2. ⦃G,L1⦄ ⊢ ⬈[h,#i] L2 & - Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}. + | ∃∃I1,I2,L1,L2. ❪G,L1❫ ⊢ ⬈[h,#i] L2 & + Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2]. /2 width=1 by rex_inv_lref/ qed-. -lemma rpx_inv_gref: ∀h,G,Y1,Y2,l. ⦃G,Y1⦄ ⊢ ⬈[h,§l] Y2 → +lemma rpx_inv_gref: ∀h,G,Y1,Y2,l. ❪G,Y1❫ ⊢ ⬈[h,§l] Y2 → ∨∨ Y1 = ⋆ ∧ Y2 = ⋆ - | ∃∃I1,I2,L1,L2. ⦃G,L1⦄ ⊢ ⬈[h,§l] L2 & - Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}. + | ∃∃I1,I2,L1,L2. ❪G,L1❫ ⊢ ⬈[h,§l] L2 & + Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2]. /2 width=1 by rex_inv_gref/ qed-. -lemma rpx_inv_bind: ∀h,p,I,G,L1,L2,V,T. ⦃G,L1⦄ ⊢ ⬈[h,ⓑ{p,I}V.T] L2 → - ∧∧ ⦃G,L1⦄ ⊢ ⬈[h,V] L2 & ⦃G,L1.ⓑ{I}V⦄ ⊢ ⬈[h,T] L2.ⓑ{I}V. +lemma rpx_inv_bind: ∀h,p,I,G,L1,L2,V,T. ❪G,L1❫ ⊢ ⬈[h,ⓑ[p,I]V.T] L2 → + ∧∧ ❪G,L1❫ ⊢ ⬈[h,V] L2 & ❪G,L1.ⓑ[I]V❫ ⊢ ⬈[h,T] L2.ⓑ[I]V. /2 width=2 by rex_inv_bind/ qed-. -lemma rpx_inv_flat: ∀h,I,G,L1,L2,V,T. ⦃G,L1⦄ ⊢ ⬈[h,ⓕ{I}V.T] L2 → - ∧∧ ⦃G,L1⦄ ⊢ ⬈[h,V] L2 & ⦃G,L1⦄ ⊢ ⬈[h,T] L2. +lemma rpx_inv_flat: ∀h,I,G,L1,L2,V,T. ❪G,L1❫ ⊢ ⬈[h,ⓕ[I]V.T] L2 → + ∧∧ ❪G,L1❫ ⊢ ⬈[h,V] L2 & ❪G,L1❫ ⊢ ⬈[h,T] L2. /2 width=2 by rex_inv_flat/ qed-. (* Advanced inversion lemmas ************************************************) -lemma rpx_inv_sort_bind_sn: ∀h,I1,G,Y2,L1,s. ⦃G,L1.ⓘ{I1}⦄ ⊢ ⬈[h,⋆s] Y2 → - ∃∃I2,L2. ⦃G,L1⦄ ⊢ ⬈[h,⋆s] L2 & Y2 = L2.ⓘ{I2}. +lemma rpx_inv_sort_bind_sn: ∀h,I1,G,Y2,L1,s. ❪G,L1.ⓘ[I1]❫ ⊢ ⬈[h,⋆s] Y2 → + ∃∃I2,L2. ❪G,L1❫ ⊢ ⬈[h,⋆s] L2 & Y2 = L2.ⓘ[I2]. /2 width=2 by rex_inv_sort_bind_sn/ qed-. -lemma rpx_inv_sort_bind_dx: ∀h,I2,G,Y1,L2,s. ⦃G,Y1⦄ ⊢ ⬈[h,⋆s] L2.ⓘ{I2} → - ∃∃I1,L1. ⦃G,L1⦄ ⊢ ⬈[h,⋆s] L2 & Y1 = L1.ⓘ{I1}. +lemma rpx_inv_sort_bind_dx: ∀h,I2,G,Y1,L2,s. ❪G,Y1❫ ⊢ ⬈[h,⋆s] L2.ⓘ[I2] → + ∃∃I1,L1. ❪G,L1❫ ⊢ ⬈[h,⋆s] L2 & Y1 = L1.ⓘ[I1]. /2 width=2 by rex_inv_sort_bind_dx/ qed-. -lemma rpx_inv_zero_pair_sn: ∀h,I,G,Y2,L1,V1. ⦃G,L1.ⓑ{I}V1⦄ ⊢ ⬈[h,#0] Y2 → - ∃∃L2,V2. ⦃G,L1⦄ ⊢ ⬈[h,V1] L2 & ⦃G,L1⦄ ⊢ V1 ⬈[h] V2 & - Y2 = L2.ⓑ{I}V2. +lemma rpx_inv_zero_pair_sn: ∀h,I,G,Y2,L1,V1. ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈[h,#0] Y2 → + ∃∃L2,V2. ❪G,L1❫ ⊢ ⬈[h,V1] L2 & ❪G,L1❫ ⊢ V1 ⬈[h] V2 & + Y2 = L2.ⓑ[I]V2. /2 width=1 by rex_inv_zero_pair_sn/ qed-. -lemma rpx_inv_zero_pair_dx: ∀h,I,G,Y1,L2,V2. ⦃G,Y1⦄ ⊢ ⬈[h,#0] L2.ⓑ{I}V2 → - ∃∃L1,V1. ⦃G,L1⦄ ⊢ ⬈[h,V1] L2 & ⦃G,L1⦄ ⊢ V1 ⬈[h] V2 & - Y1 = L1.ⓑ{I}V1. +lemma rpx_inv_zero_pair_dx: ∀h,I,G,Y1,L2,V2. ❪G,Y1❫ ⊢ ⬈[h,#0] L2.ⓑ[I]V2 → + ∃∃L1,V1. ❪G,L1❫ ⊢ ⬈[h,V1] L2 & ❪G,L1❫ ⊢ V1 ⬈[h] V2 & + Y1 = L1.ⓑ[I]V1. /2 width=1 by rex_inv_zero_pair_dx/ qed-. -lemma rpx_inv_lref_bind_sn: ∀h,I1,G,Y2,L1,i. ⦃G,L1.ⓘ{I1}⦄ ⊢ ⬈[h,#↑i] Y2 → - ∃∃I2,L2. ⦃G,L1⦄ ⊢ ⬈[h,#i] L2 & Y2 = L2.ⓘ{I2}. +lemma rpx_inv_lref_bind_sn: ∀h,I1,G,Y2,L1,i. ❪G,L1.ⓘ[I1]❫ ⊢ ⬈[h,#↑i] Y2 → + ∃∃I2,L2. ❪G,L1❫ ⊢ ⬈[h,#i] L2 & Y2 = L2.ⓘ[I2]. /2 width=2 by rex_inv_lref_bind_sn/ qed-. -lemma rpx_inv_lref_bind_dx: ∀h,I2,G,Y1,L2,i. ⦃G,Y1⦄ ⊢ ⬈[h,#↑i] L2.ⓘ{I2} → - ∃∃I1,L1. ⦃G,L1⦄ ⊢ ⬈[h,#i] L2 & Y1 = L1.ⓘ{I1}. +lemma rpx_inv_lref_bind_dx: ∀h,I2,G,Y1,L2,i. ❪G,Y1❫ ⊢ ⬈[h,#↑i] L2.ⓘ[I2] → + ∃∃I1,L1. ❪G,L1❫ ⊢ ⬈[h,#i] L2 & Y1 = L1.ⓘ[I1]. /2 width=2 by rex_inv_lref_bind_dx/ qed-. -lemma rpx_inv_gref_bind_sn: ∀h,I1,G,Y2,L1,l. ⦃G,L1.ⓘ{I1}⦄ ⊢ ⬈[h,§l] Y2 → - ∃∃I2,L2. ⦃G,L1⦄ ⊢ ⬈[h,§l] L2 & Y2 = L2.ⓘ{I2}. +lemma rpx_inv_gref_bind_sn: ∀h,I1,G,Y2,L1,l. ❪G,L1.ⓘ[I1]❫ ⊢ ⬈[h,§l] Y2 → + ∃∃I2,L2. ❪G,L1❫ ⊢ ⬈[h,§l] L2 & Y2 = L2.ⓘ[I2]. /2 width=2 by rex_inv_gref_bind_sn/ qed-. -lemma rpx_inv_gref_bind_dx: ∀h,I2,G,Y1,L2,l. ⦃G,Y1⦄ ⊢ ⬈[h,§l] L2.ⓘ{I2} → - ∃∃I1,L1. ⦃G,L1⦄ ⊢ ⬈[h,§l] L2 & Y1 = L1.ⓘ{I1}. +lemma rpx_inv_gref_bind_dx: ∀h,I2,G,Y1,L2,l. ❪G,Y1❫ ⊢ ⬈[h,§l] L2.ⓘ[I2] → + ∃∃I1,L1. ❪G,L1❫ ⊢ ⬈[h,§l] L2 & Y1 = L1.ⓘ[I1]. /2 width=2 by rex_inv_gref_bind_dx/ qed-. (* Basic forward lemmas *****************************************************) lemma rpx_fwd_pair_sn: ∀h,I,G,L1,L2,V,T. - ⦃G,L1⦄ ⊢ ⬈[h,②{I}V.T] L2 → ⦃G,L1⦄ ⊢ ⬈[h,V] L2. + ❪G,L1❫ ⊢ ⬈[h,②[I]V.T] L2 → ❪G,L1❫ ⊢ ⬈[h,V] L2. /2 width=3 by rex_fwd_pair_sn/ qed-. lemma rpx_fwd_bind_dx: ∀h,p,I,G,L1,L2,V,T. - ⦃G,L1⦄ ⊢ ⬈[h,ⓑ{p,I}V.T] L2 → ⦃G,L1.ⓑ{I}V⦄ ⊢ ⬈[h,T] L2.ⓑ{I}V. + ❪G,L1❫ ⊢ ⬈[h,ⓑ[p,I]V.T] L2 → ❪G,L1.ⓑ[I]V❫ ⊢ ⬈[h,T] L2.ⓑ[I]V. /2 width=2 by rex_fwd_bind_dx/ qed-. lemma rpx_fwd_flat_dx: ∀h,I,G,L1,L2,V,T. - ⦃G,L1⦄ ⊢ ⬈[h,ⓕ{I}V.T] L2 → ⦃G,L1⦄ ⊢ ⬈[h,T] L2. + ❪G,L1❫ ⊢ ⬈[h,ⓕ[I]V.T] L2 → ❪G,L1❫ ⊢ ⬈[h,T] L2. /2 width=3 by rex_fwd_flat_dx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_drops.ma index eaf81190d..ae9319282 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_drops.ma @@ -32,7 +32,7 @@ lemma rpx_inv_lifts_dx (h) (G): f_dropable_dx (cpx h G). /2 width=5 by rex_dropable_dx/ qed-. lemma rpx_inv_lifts_bi (h) (G): - ∀L1,L2,U. ⦃G,L1⦄ ⊢ ⬈[h,U] L2 → ∀b,f. 𝐔⦃f⦄ → + ∀L1,L2,U. ❪G,L1❫ ⊢ ⬈[h,U] L2 → ∀b,f. 𝐔❪f❫ → ∀K1,K2. ⇩*[b,f] L1 ≘ K1 → ⇩*[b,f] L2 ≘ K2 → - ∀T. ⇧*[f]T ≘ U → ⦃G,K1⦄ ⊢ ⬈[h,T] K2. + ∀T. ⇧*[f]T ≘ U → ❪G,K1❫ ⊢ ⬈[h,T] K2. /2 width=10 by rex_inv_lifts_bi/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fqup.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fqup.ma index 43f6f81b2..29e81b1dd 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fqup.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fqup.ma @@ -22,18 +22,18 @@ include "basic_2/rt_transition/rpx.ma". lemma rpx_refl: ∀h,G,T. reflexive … (rpx h G T). /2 width=1 by rex_refl/ qed. -lemma rpx_pair_refl: ∀h,G,L,V1,V2. ⦃G,L⦄ ⊢ V1 ⬈[h] V2 → - ∀I,T. ⦃G,L.ⓑ{I}V1⦄ ⊢ ⬈[h,T] L.ⓑ{I}V2. +lemma rpx_pair_refl: ∀h,G,L,V1,V2. ❪G,L❫ ⊢ V1 ⬈[h] V2 → + ∀I,T. ❪G,L.ⓑ[I]V1❫ ⊢ ⬈[h,T] L.ⓑ[I]V2. /2 width=1 by rex_pair_refl/ qed. (* Advanced inversion lemmas ************************************************) -lemma rpx_inv_bind_void: ∀h,p,I,G,L1,L2,V,T. ⦃G,L1⦄ ⊢ ⬈[h,ⓑ{p,I}V.T] L2 → - ∧∧ ⦃G,L1⦄ ⊢ ⬈[h,V] L2 & ⦃G,L1.ⓧ⦄ ⊢ ⬈[h,T] L2.ⓧ. +lemma rpx_inv_bind_void: ∀h,p,I,G,L1,L2,V,T. ❪G,L1❫ ⊢ ⬈[h,ⓑ[p,I]V.T] L2 → + ∧∧ ❪G,L1❫ ⊢ ⬈[h,V] L2 & ❪G,L1.ⓧ❫ ⊢ ⬈[h,T] L2.ⓧ. /2 width=3 by rex_inv_bind_void/ qed-. (* Advanced forward lemmas **************************************************) lemma rpx_fwd_bind_dx_void: ∀h,p,I,G,L1,L2,V,T. - ⦃G,L1⦄ ⊢ ⬈[h,ⓑ{p,I}V.T] L2 → ⦃G,L1.ⓧ⦄ ⊢ ⬈[h,T] L2.ⓧ. + ❪G,L1❫ ⊢ ⬈[h,ⓑ[p,I]V.T] L2 → ❪G,L1.ⓧ❫ ⊢ ⬈[h,T] L2.ⓧ. /2 width=4 by rex_fwd_bind_dx_void/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fsle.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fsle.ma index 4f811399e..29c6a5cd3 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fsle.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_fsle.ma @@ -22,11 +22,11 @@ include "basic_2/rt_transition/rpx_fqup.ma". (* Forward lemmas with free variables inclusion for restricted closures *****) -(* Note: "⦃L2, T1⦄ ⊆ ⦃L2, T0⦄" does not hold *) +(* Note: "❪L2, T1❫ ⊆ ❪L2, T0❫" does not hold *) (* Note: Take L0 = K0.ⓓ(ⓝW.V), L2 = K0.ⓓW, T0 = #0, T1 = ⇧*[1]V *) (* Note: This invalidates rpxs_cpx_conf: "∀h, G. s_r_confluent1 … (cpx h G) (rpxs h G)" *) -lemma rpx_cpx_conf_fsge (h) (G): ∀L0,T0,T1. ⦃G,L0⦄ ⊢ T0 ⬈[h] T1 → - ∀L2. ⦃G,L0⦄ ⊢⬈[h,T0] L2 → ⦃L2,T1⦄ ⊆ ⦃L0,T0⦄. +lemma rpx_cpx_conf_fsge (h) (G): ∀L0,T0,T1. ❪G,L0❫ ⊢ T0 ⬈[h] T1 → + ∀L2. ❪G,L0❫ ⊢⬈[h,T0] L2 → ❪L2,T1❫ ⊆ ❪L0,T0❫. #h #G0 #L0 #T0 @(fqup_wf_ind_eq (Ⓣ) … G0 L0 T0) -G0 -L0 -T0 #G #L #T #IH #G0 #L0 * * [ #s #HG #HL #HT #X #HX #Y #HY destruct -IH @@ -133,6 +133,6 @@ lemma cpx_rex_conf (R) (h) (G): s_r_confluent1 … (cpx h G) (rex R). lemma rpx_cpx_conf (h) (G): s_r_confluent1 … (cpx h G) (rpx h G). /2 width=5 by cpx_rex_conf/ qed-. -lemma rpx_cpx_conf_fsge_dx (h) (G): ∀L0,T0,T1. ⦃G,L0⦄ ⊢ T0 ⬈[h] T1 → - ∀L2. ⦃G,L0⦄ ⊢⬈[h,T0] L2 → ⦃L2,T1⦄ ⊆ ⦃L0,T1⦄. +lemma rpx_cpx_conf_fsge_dx (h) (G): ∀L0,T0,T1. ❪G,L0❫ ⊢ T0 ⬈[h] T1 → + ∀L2. ❪G,L0❫ ⊢⬈[h,T0] L2 → ❪L2,T1❫ ⊆ ❪L0,T1❫. /3 width=5 by rpx_cpx_conf, rpx_fsge_comp/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_length.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_length.ma index 45a052c67..7f3bdc40d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_length.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_length.ma @@ -19,15 +19,15 @@ include "basic_2/rt_transition/rpx.ma". (* Forward lemmas with length for local environments ************************) -lemma rpx_fwd_length: ∀h,G,L1,L2,T. ⦃G,L1⦄ ⊢ ⬈[h,T] L2 → |L1| = |L2|. +lemma rpx_fwd_length: ∀h,G,L1,L2,T. ❪G,L1❫ ⊢ ⬈[h,T] L2 → |L1| = |L2|. /2 width=3 by rex_fwd_length/ qed-. (* Inversion lemmas with length for local environments **********************) -lemma rpx_inv_zero_length: ∀h,G,Y1,Y2. ⦃G,Y1⦄ ⊢ ⬈[h,#0] Y2 → +lemma rpx_inv_zero_length: ∀h,G,Y1,Y2. ❪G,Y1❫ ⊢ ⬈[h,#0] Y2 → ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ - | ∃∃I,L1,L2,V1,V2. ⦃G,L1⦄ ⊢ ⬈[h,V1] L2 & - ⦃G,L1⦄ ⊢ V1 ⬈[h] V2 & - Y1 = L1.ⓑ{I}V1 & Y2 = L2.ⓑ{I}V2 - | ∃∃I,L1,L2. |L1| = |L2| & Y1 = L1.ⓤ{I} & Y2 = L2.ⓤ{I}. + | ∃∃I,L1,L2,V1,V2. ❪G,L1❫ ⊢ ⬈[h,V1] L2 & + ❪G,L1❫ ⊢ V1 ⬈[h] V2 & + Y1 = L1.ⓑ[I]V1 & Y2 = L2.ⓑ[I]V2 + | ∃∃I,L1,L2. |L1| = |L2| & Y1 = L1.ⓤ[I] & Y2 = L2.ⓤ[I]. /2 width=1 by rex_inv_zero_length/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_lpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_lpx.ma index ba4a29ec5..7c8a4ae99 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_lpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_lpx.ma @@ -20,16 +20,16 @@ include "basic_2/rt_transition/lpx.ma". (* Properties with syntactic equivalence for referred local environments ****) -lemma fleq_rpx (h) (G): ∀L1,L2,T. L1 ≡[T] L2 → ⦃G,L1⦄ ⊢ ⬈[h,T] L2. +lemma fleq_rpx (h) (G): ∀L1,L2,T. L1 ≡[T] L2 → ❪G,L1❫ ⊢ ⬈[h,T] L2. /2 width=1 by req_fwd_rex/ qed. (* Properties with unbound parallel rt-transition for full local envs *******) -lemma lpx_rpx: ∀h,G,L1,L2,T. ⦃G,L1⦄ ⊢ ⬈[h] L2 → ⦃G,L1⦄ ⊢ ⬈[h,T] L2. +lemma lpx_rpx: ∀h,G,L1,L2,T. ❪G,L1❫ ⊢ ⬈[h] L2 → ❪G,L1❫ ⊢ ⬈[h,T] L2. /2 width=1 by rex_lex/ qed. (* Inversion lemmas with unbound parallel rt-transition for full local envs *) -lemma rpx_inv_lpx_req: ∀h,G,L1,L2,T. ⦃G,L1⦄ ⊢ ⬈[h,T] L2 → - ∃∃L. ⦃G,L1⦄ ⊢ ⬈[h] L & L ≡[T] L2. +lemma rpx_inv_lpx_req: ∀h,G,L1,L2,T. ❪G,L1❫ ⊢ ⬈[h,T] L2 → + ∃∃L. ❪G,L1❫ ⊢ ⬈[h] L & L ≡[T] L2. /3 width=3 by rpx_fsge_comp, rex_inv_lex_req/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_reqx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_reqx.ma index 61b24fdae..725ddde9a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_reqx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_reqx.ma @@ -21,27 +21,27 @@ include "basic_2/rt_transition/rpx_fsle.ma". (* Properties with sort-irrelevant equivalence for local environments *******) -lemma rpx_pair_sn_split: ∀h,G,L1,L2,V. ⦃G,L1⦄ ⊢ ⬈[h,V] L2 → ∀I,T. - ∃∃L. ⦃G,L1⦄ ⊢ ⬈[h,②{I}V.T] L & L ≛[V] L2. +lemma rpx_pair_sn_split: ∀h,G,L1,L2,V. ❪G,L1❫ ⊢ ⬈[h,V] L2 → ∀I,T. + ∃∃L. ❪G,L1❫ ⊢ ⬈[h,②[I]V.T] L & L ≛[V] L2. /3 width=5 by rpx_fsge_comp, rex_pair_sn_split/ qed-. -lemma rpx_flat_dx_split: ∀h,G,L1,L2,T. ⦃G,L1⦄ ⊢ ⬈[h,T] L2 → ∀I,V. - ∃∃L. ⦃G,L1⦄ ⊢ ⬈[h,ⓕ{I}V.T] L & L ≛[T] L2. +lemma rpx_flat_dx_split: ∀h,G,L1,L2,T. ❪G,L1❫ ⊢ ⬈[h,T] L2 → ∀I,V. + ∃∃L. ❪G,L1❫ ⊢ ⬈[h,ⓕ[I]V.T] L & L ≛[T] L2. /3 width=5 by rpx_fsge_comp, rex_flat_dx_split/ qed-. -lemma rpx_bind_dx_split: ∀h,I,G,L1,L2,V1,T. ⦃G,L1.ⓑ{I}V1⦄ ⊢ ⬈[h,T] L2 → ∀p. - ∃∃L,V. ⦃G,L1⦄ ⊢ ⬈[h,ⓑ{p,I}V1.T] L & L.ⓑ{I}V ≛[T] L2 & ⦃G,L1⦄ ⊢ V1 ⬈[h] V. +lemma rpx_bind_dx_split: ∀h,I,G,L1,L2,V1,T. ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈[h,T] L2 → ∀p. + ∃∃L,V. ❪G,L1❫ ⊢ ⬈[h,ⓑ[p,I]V1.T] L & L.ⓑ[I]V ≛[T] L2 & ❪G,L1❫ ⊢ V1 ⬈[h] V. /3 width=5 by rpx_fsge_comp, rex_bind_dx_split/ qed-. -lemma rpx_bind_dx_split_void: ∀h,G,K1,L2,T. ⦃G,K1.ⓧ⦄ ⊢ ⬈[h,T] L2 → ∀p,I,V. - ∃∃K2. ⦃G,K1⦄ ⊢ ⬈[h,ⓑ{p,I}V.T] K2 & K2.ⓧ ≛[T] L2. +lemma rpx_bind_dx_split_void: ∀h,G,K1,L2,T. ❪G,K1.ⓧ❫ ⊢ ⬈[h,T] L2 → ∀p,I,V. + ∃∃K2. ❪G,K1❫ ⊢ ⬈[h,ⓑ[p,I]V.T] K2 & K2.ⓧ ≛[T] L2. /3 width=5 by rpx_fsge_comp, rex_bind_dx_split_void/ qed-. lemma rpx_teqx_conf: ∀h,G. s_r_confluent1 … cdeq (rpx h G). /2 width=5 by teqx_rex_conf/ qed-. lemma rpx_teqx_div: ∀h,T1,T2. T1 ≛ T2 → - ∀G,L1,L2. ⦃G,L1⦄ ⊢ ⬈[h,T2] L2 → ⦃G,L1⦄ ⊢ ⬈[h,T1] L2. + ∀G,L1,L2. ❪G,L1❫ ⊢ ⬈[h,T2] L2 → ❪G,L1❫ ⊢ ⬈[h,T1] L2. /2 width=5 by teqx_rex_div/ qed-. lemma cpx_teqx_conf_rex: ∀h,G. R_confluent2_rex … (cpx h G) cdeq (cpx h G) cdeq. @@ -125,25 +125,25 @@ lemma cpx_teqx_conf_rex: ∀h,G. R_confluent2_rex … (cpx h G) cdeq (cpx h G) c ] qed-. -lemma cpx_teqx_conf: ∀h,G,L. ∀T0:term. ∀T1. ⦃G,L⦄ ⊢ T0 ⬈[h] T1 → +lemma cpx_teqx_conf: ∀h,G,L. ∀T0:term. ∀T1. ❪G,L❫ ⊢ T0 ⬈[h] T1 → ∀T2. T0 ≛ T2 → - ∃∃T. T1 ≛ T & ⦃G,L⦄ ⊢ T2 ⬈[h] T. + ∃∃T. T1 ≛ T & ❪G,L❫ ⊢ T2 ⬈[h] T. #h #G #L #T0 #T1 #HT01 #T2 #HT02 elim (cpx_teqx_conf_rex … HT01 … HT02 L … L) -HT01 -HT02 /2 width=3 by rex_refl, ex2_intro/ qed-. lemma teqx_cpx_trans: ∀h,G,L,T2. ∀T0:term. T2 ≛ T0 → - ∀T1. ⦃G,L⦄ ⊢ T0 ⬈[h] T1 → - ∃∃T. ⦃G,L⦄ ⊢ T2 ⬈[h] T & T ≛ T1. + ∀T1. ❪G,L❫ ⊢ T0 ⬈[h] T1 → + ∃∃T. ❪G,L❫ ⊢ T2 ⬈[h] T & T ≛ T1. #h #G #L #T2 #T0 #HT20 #T1 #HT01 elim (cpx_teqx_conf … HT01 T2) -HT01 /3 width=3 by teqx_sym, ex2_intro/ qed-. (* Basic_2A1: uses: cpx_lleq_conf *) -lemma cpx_reqx_conf: ∀h,G,L0,T0,T1. ⦃G,L0⦄ ⊢ T0 ⬈[h] T1 → +lemma cpx_reqx_conf: ∀h,G,L0,T0,T1. ❪G,L0❫ ⊢ T0 ⬈[h] T1 → ∀L2. L0 ≛[T0] L2 → - ∃∃T. ⦃G,L2⦄ ⊢ T0 ⬈[h] T & T1 ≛ T. + ∃∃T. ❪G,L2❫ ⊢ T0 ⬈[h] T & T1 ≛ T. #h #G #L0 #T0 #T1 #HT01 #L2 #HL02 elim (cpx_teqx_conf_rex … HT01 T0 … L0 … HL02) -HT01 -HL02 /2 width=3 by rex_refl, ex2_intro/ @@ -151,8 +151,8 @@ qed-. (* Basic_2A1: uses: lleq_cpx_trans *) lemma reqx_cpx_trans: ∀h,G,L2,L0,T0. L2 ≛[T0] L0 → - ∀T1. ⦃G,L0⦄ ⊢ T0 ⬈[h] T1 → - ∃∃T. ⦃G,L2⦄ ⊢ T0 ⬈[h] T & T ≛ T1. + ∀T1. ❪G,L0❫ ⊢ T0 ⬈[h] T1 → + ∃∃T. ❪G,L2❫ ⊢ T0 ⬈[h] T & T ≛ T1. #h #G #L2 #L0 #T0 #HL20 #T1 #HT01 elim (cpx_reqx_conf … HT01 L2) -HT01 /3 width=3 by reqx_sym, teqx_sym, ex2_intro/ @@ -161,9 +161,9 @@ qed-. lemma rpx_reqx_conf: ∀h,G,T. confluent2 … (rpx h G T) (reqx T). /3 width=6 by rpx_fsge_comp, reqx_fsge_comp, cpx_teqx_conf_rex, rex_conf/ qed-. -lemma reqx_rpx_trans: ∀h,G,T,L2,K2. ⦃G,L2⦄ ⊢ ⬈[h,T] K2 → +lemma reqx_rpx_trans: ∀h,G,T,L2,K2. ❪G,L2❫ ⊢ ⬈[h,T] K2 → ∀L1. L1 ≛[T] L2 → - ∃∃K1. ⦃G,L1⦄ ⊢ ⬈[h,T] K1 & K1 ≛[T] K2. + ∃∃K1. ❪G,L1❫ ⊢ ⬈[h,T] K1 & K1 ≛[T] K2. #h #G #T #L2 #K2 #HLK2 #L1 #HL12 elim (rpx_reqx_conf … HLK2 L1) /3 width=3 by reqx_sym, ex2_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_rpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_rpx.ma index 8b6716c10..85261b95a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_rpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/rpx_rpx.ma @@ -19,16 +19,16 @@ include "basic_2/rt_transition/rpx.ma". (* Main properties **********************************************************) -theorem rpx_bind: ∀h,G,L1,L2,V1. ⦃G,L1⦄ ⊢ ⬈[h,V1] L2 → - ∀I,V2,T. ⦃G,L1.ⓑ{I}V1⦄ ⊢ ⬈[h,T] L2.ⓑ{I}V2 → - ∀p. ⦃G,L1⦄ ⊢ ⬈[h,ⓑ{p,I}V1.T] L2. +theorem rpx_bind: ∀h,G,L1,L2,V1. ❪G,L1❫ ⊢ ⬈[h,V1] L2 → + ∀I,V2,T. ❪G,L1.ⓑ[I]V1❫ ⊢ ⬈[h,T] L2.ⓑ[I]V2 → + ∀p. ❪G,L1❫ ⊢ ⬈[h,ⓑ[p,I]V1.T] L2. /2 width=2 by rex_bind/ qed. -theorem rpx_flat: ∀h,G,L1,L2,V. ⦃G,L1⦄ ⊢ ⬈[h,V] L2 → - ∀I,T. ⦃G,L1⦄ ⊢ ⬈[h,T] L2 → ⦃G,L1⦄ ⊢ ⬈[h,ⓕ{I}V.T] L2. +theorem rpx_flat: ∀h,G,L1,L2,V. ❪G,L1❫ ⊢ ⬈[h,V] L2 → + ∀I,T. ❪G,L1❫ ⊢ ⬈[h,T] L2 → ❪G,L1❫ ⊢ ⬈[h,ⓕ[I]V.T] L2. /2 width=1 by rex_flat/ qed. -theorem rpx_bind_void: ∀h,G,L1,L2,V. ⦃G,L1⦄ ⊢ ⬈[h,V] L2 → - ∀T. ⦃G,L1.ⓧ⦄ ⊢ ⬈[h,T] L2.ⓧ → - ∀p,I. ⦃G,L1⦄ ⊢ ⬈[h,ⓑ{p,I}V.T] L2. +theorem rpx_bind_void: ∀h,G,L1,L2,V. ❪G,L1❫ ⊢ ⬈[h,V] L2 → + ∀T. ❪G,L1.ⓧ❫ ⊢ ⬈[h,T] L2.ⓧ → + ∀p,I. ❪G,L1❫ ⊢ ⬈[h,ⓑ[p,I]V.T] L2. /2 width=1 by rex_bind_void/ qed. 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 f9d388a3c..4a02ae6ff 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 @@ -12,7 +12,7 @@ table { class "wine" [ { "iterated dynamic typing" * } { [ { "context-sensitive iterated native type assignment" * } { - [ [ "for terms" ] "ntas" + "( ⦃?,?⦄ ⊢ ? :*[?,?,?] ? )" "ntas_cpcs" + "ntas_nta" + "ntas_nta_ind" + " ntas_ntas" + "ntas_preserve" * ] + [ [ "for terms" ] "ntas" + "( ❪?,?❫ ⊢ ? :*[?,?,?] ? )" "ntas_cpcs" + "ntas_nta" + "ntas_nta_ind" + " ntas_ntas" + "ntas_preserve" * ] } ] } @@ -20,12 +20,12 @@ table { class "magenta" [ { "dynamic typing" * } { [ { "context-sensitive native type assignment" * } { - [ [ "for terms" ] "nta" + "( ⦃?,?⦄ ⊢ ? :[?,?] ? )" "nta_drops" + "nta_aaa" + "nta_fsb" + "nta_cpms" + "nta_cpcs" + "nta_preserve" + "nta_preserve_cpcs" + "nta_ind" + "nta_eval" * ] + [ [ "for terms" ] "nta" + "( ❪?,?❫ ⊢ ? :[?,?] ? )" "nta_drops" + "nta_aaa" + "nta_fsb" + "nta_cpms" + "nta_cpcs" + "nta_preserve" + "nta_preserve_cpcs" + "nta_ind" + "nta_eval" * ] } ] [ { "context-sensitive native validity" * } { [ [ "restricted refinement for lenvs" ] "lsubv ( ? ⊢ ? ⫃![?,?] ? )" "lsubv_drops" + "lsubv_lsubr" + "lsubv_lsuba" + "lsubv_cpms" + "lsubv_cpcs" + "lsubv_cnv" + "lsubv_lsubv" * ] - [ [ "for terms" ] "cnv" + "( ⦃?,?⦄ ⊢ ? ![?,?] )" "cnv_acle" + "cnv_drops" + "cnv_fqus" + "cnv_aaa" + "cnv_fsb" + "cnv_cpm_trans" + "cnv_cpm_conf" + "cnv_cpm_teqx" + "cnv_cpm_teqx_trans" + "cnv_cpm_teqx_conf" + "cnv_cpms_teqx" + "cnv_cpms_conf" + "cnv_cpms_teqx_conf" + "cnv_cpmre" + "cnv_cpmuwe" + "cnv_cpmuwe_cpmre" + "cnv_cpts" + "cnv_cpes" + "cnv_cpcs" + "cnv_preserve_sub" + "cnv_preserve" + "cnv_preserve_cpes" + "cnv_preserve_cpcs" + "cnv_eval" * ] + [ [ "for terms" ] "cnv" + "( ❪?,?❫ ⊢ ? ![?,?] )" "cnv_acle" + "cnv_drops" + "cnv_fqus" + "cnv_aaa" + "cnv_fsb" + "cnv_cpm_trans" + "cnv_cpm_conf" + "cnv_cpm_teqx" + "cnv_cpm_teqx_trans" + "cnv_cpm_teqx_conf" + "cnv_cpms_teqx" + "cnv_cpms_conf" + "cnv_cpms_teqx_conf" + "cnv_cpmre" + "cnv_cpmuwe" + "cnv_cpmuwe_cpmre" + "cnv_cpts" + "cnv_cpes" + "cnv_cpcs" + "cnv_preserve_sub" + "cnv_preserve" + "cnv_preserve_cpes" + "cnv_preserve_cpcs" + "cnv_eval" * ] } ] } @@ -33,11 +33,11 @@ table { class "prune" [ { "rt-equivalence" * } { [ { "context-sensitive parallel r-equivalence" * } { - [ [ "for terms" ] "cpcs ( ⦃?,?⦄ ⊢ ? ⬌*[?] ? )" "cpcs_drops" + "cpcs_lsubr" + "cpcs_aaa" + "cpcs_csx" + "cpcs_cprs" + "cpcs_lprs" + "cpcs_cpc" + "cpcs_cpcs" * ] + [ [ "for terms" ] "cpcs ( ❪?,?❫ ⊢ ? ⬌*[?] ? )" "cpcs_drops" + "cpcs_lsubr" + "cpcs_aaa" + "cpcs_csx" + "cpcs_cprs" + "cpcs_lprs" + "cpcs_cpc" + "cpcs_cpcs" * ] } ] [ { "t-bound context-sensitive parallel rt-equivalence" * } { - [ [ "for terms" ] "cpes ( ⦃?,?⦄ ⊢ ? ⬌*[?,?,?] ? )" "cpes_aaa" + "cpes_cpms" + "cpes_cpes" * ] + [ [ "for terms" ] "cpes ( ❪?,?❫ ⊢ ? ⬌*[?,?,?] ? )" "cpes_aaa" + "cpes_cpms" + "cpes_cpes" * ] } ] } @@ -46,14 +46,14 @@ table { [ { "rt-conversion" * } { (* [ { "context-sensitive parallel eta-conversion" * } { - [ [ "for lenvs on all entries" ] "lpce ( ⦃?,?⦄ ⊢ ⬌η[?] ? )" "lpce_drops" * ] - [ [ "for binders" ] "cpce_ext" + "( ⦃?,?⦄ ⊢ ? ⬌η[?] ? )" * ] - [ [ "for terms" ] "cpce" + "( ⦃?,?⦄ ⊢ ? ⬌η[?] ? )" "cpce_drops" * ] + [ [ "for lenvs on all entries" ] "lpce ( ❪?,?❫ ⊢ ⬌η[?] ? )" "lpce_drops" * ] + [ [ "for binders" ] "cpce_ext" + "( ❪?,?❫ ⊢ ? ⬌η[?] ? )" * ] + [ [ "for terms" ] "cpce" + "( ❪?,?❫ ⊢ ? ⬌η[?] ? )" "cpce_drops" * ] } ] *) [ { "context-sensitive parallel r-conversion" * } { - [ [ "for terms" ] "cpc" + "( ⦃?,?⦄ ⊢ ? ⬌[?] ? )" "cpc_cpc" * ] + [ [ "for terms" ] "cpc" + "( ❪?,?❫ ⊢ ? ⬌[?] ? )" "cpc_cpc" * ] } ] } @@ -61,37 +61,37 @@ table { class "sky" [ { "rt-computation" * } { [ { "context-sensitive parallel t-computation" * } { - [ [ "for terms" ] "cpts" + "( ⦃?,?⦄ ⊢ ? ⬆*[?,?] ? )" "cpts_drops" + "cpts_aaa" + "cpts_cpms" * ] + [ [ "for terms" ] "cpts" + "( ❪?,?❫ ⊢ ? ⬆*[?,?] ? )" "cpts_drops" + "cpts_aaa" + "cpts_cpms" * ] } ] [ { "context-sensitive parallel r-computation" * } { - [ [ "evaluation for terms" ] "cprre ( ⦃?,?⦄ ⊢ ? ➡*[?] 𝐍⦃?⦄ )" "cprre_csx" + "cprre_cpms" + "cprre_cprre" * ] - [ [ "for lenvs on all entries" ] "lprs ( ⦃?,?⦄ ⊢ ➡*[?] ? )" "lprs_tc" + "lprs_ctc" + "lprs_length" + "lprs_drops" + "lprs_aaa" + "lprs_lpr" + "lprs_lpxs" + "lprs_cpms" + "lprs_cprs" + "lprs_lprs" * ] - [ [ "for binders" ] "cprs_ext" + "( ⦃?,?⦄ ⊢ ? ➡*[?] ?)" * ] - [ [ "for terms" ] "cprs" + "( ⦃?,?⦄ ⊢ ? ➡*[?] ?)" "cprs_ctc" + "cprs_tweq" + "cprs_drops" + "cprs_cpr" + "cprs_lpr" + "cprs_cnr" + "cprs_cprs" * ] + [ [ "evaluation for terms" ] "cprre ( ❪?,?❫ ⊢ ? ➡*[?] 𝐍❪?❫ )" "cprre_csx" + "cprre_cpms" + "cprre_cprre" * ] + [ [ "for lenvs on all entries" ] "lprs ( ❪?,?❫ ⊢ ➡*[?] ? )" "lprs_tc" + "lprs_ctc" + "lprs_length" + "lprs_drops" + "lprs_aaa" + "lprs_lpr" + "lprs_lpxs" + "lprs_cpms" + "lprs_cprs" + "lprs_lprs" * ] + [ [ "for binders" ] "cprs_ext" + "( ❪?,?❫ ⊢ ? ➡*[?] ?)" * ] + [ [ "for terms" ] "cprs" + "( ❪?,?❫ ⊢ ? ➡*[?] ?)" "cprs_ctc" + "cprs_tweq" + "cprs_drops" + "cprs_cpr" + "cprs_lpr" + "cprs_cnr" + "cprs_cprs" * ] } ] [ { "t-bound context-sensitive parallel rt-computation" * } { - [ [ "t-unbound whd evaluation for terms" ] "cpmuwe ( ⦃?,?⦄ ⊢ ? ⬌*𝐍𝐖*[?,?] ? )" "cpmuwe_csx" + "cpmuwe_cpmuwe" * ] - [ [ "t-unbound whd normal form for terms" ] "cnuw ( ⦃?,?⦄ ⊢ ⬌𝐍𝐖*[?] ? )" "cnuw_drops" + "cnuw_simple" + "cnuw_cnuw" * ] - [ [ "t-bpund evaluation for terms" ] "cpmre ( ⦃?,?⦄ ⊢ ? ➡*[?,?] 𝐍⦃?⦄ )" "cpmre_aaa" * ] - [ [ "for terms" ] "cpms" + "( ⦃?,?⦄ ⊢ ? ➡*[?,?] ? )" "cpms_drops" + "cpms_lsubr" + "cpms_reqx" + "cpms_aaa" + "cpms_lpr" + "cpms_cpxs" + "cpms_fpbs" + "cpms_fpbg" + "cpms_cpms" * ] + [ [ "t-unbound whd evaluation for terms" ] "cpmuwe ( ❪?,?❫ ⊢ ? ➡*𝐍𝐖*[?,?] ? )" "cpmuwe_csx" + "cpmuwe_cpmuwe" * ] + [ [ "t-unbound whd normal form for terms" ] "cnuw ( ❪?,?❫ ⊢ ➡𝐍𝐖*[?] ? )" "cnuw_drops" + "cnuw_simple" + "cnuw_cnuw" * ] + [ [ "t-bpund evaluation for terms" ] "cpmre ( ❪?,?❫ ⊢ ? ➡*[?,?] 𝐍❪?❫ )" "cpmre_aaa" * ] + [ [ "for terms" ] "cpms" + "( ❪?,?❫ ⊢ ? ➡*[?,?] ? )" "cpms_drops" + "cpms_lsubr" + "cpms_reqx" + "cpms_aaa" + "cpms_lpr" + "cpms_cpxs" + "cpms_fpbs" + "cpms_fpbg" + "cpms_cpms" * ] } ] [ { "unbound context-sensitive parallel rst-computation" * } { - [ [ "strongly normalizing for closures" ] "fsb" + "( ≥[?] 𝐒⦃?,?,?⦄ )" "fsb_feqx" + "fsb_aaa" + "fsb_csx" + "fsb_fpbg" * ] - [ [ "proper for closures" ] "fpbg" + "( ⦃?,?,?⦄ >[?] ⦃?,?,?⦄ )" "fpbg_fqup" + "fpbg_cpxs" + "fpbg_lpxs" + "fpbg_fpbs" + "fpbg_fpbg" * ] - [ [ "for closures" ] "fpbs" + "( ⦃?,?,?⦄ ≥[?] ⦃?,?,?⦄ )" "fpbs_fqup" + "fpbs_fqus" + "fpbs_aaa" + "fpbs_cpx" + "fpbs_fpb" + "fpbs_cpxs" + "fpbs_lpxs" + "fpbs_csx" + "fpbs_fpbs" * ] + [ [ "strongly normalizing for closures" ] "fsb" + "( ≥[?] 𝐒❪?,?,?❫ )" "fsb_feqx" + "fsb_aaa" + "fsb_csx" + "fsb_fpbg" * ] + [ [ "proper for closures" ] "fpbg" + "( ❪?,?,?❫ >[?] ❪?,?,?❫ )" "fpbg_fqup" + "fpbg_cpxs" + "fpbg_lpxs" + "fpbg_fpbs" + "fpbg_fpbg" * ] + [ [ "for closures" ] "fpbs" + "( ❪?,?,?❫ ≥[?] ❪?,?,?❫ )" "fpbs_fqup" + "fpbs_fqus" + "fpbs_aaa" + "fpbs_cpx" + "fpbs_fpb" + "fpbs_cpxs" + "fpbs_lpxs" + "fpbs_csx" + "fpbs_fpbs" * ] } ] [ { "unbound context-sensitive parallel rt-computation" * } { [ [ "compatibility for lenvs" ] "jsx" + "( ? ⊢ ? ⊒[?] ? )" "jsx_drops" + "jsx_lsubr" + "jsx_csx" + "jsx_rsx" + "jsx_jsx" * ] - [ [ "strongly normalizing for lenvs on referred entries" ] "rsx" + "( ? ⊢ ⬈*[?,?] 𝐒⦃?⦄ )" "rsx_length" + "rsx_drops" + "rsx_fqup" + "rsx_cpxs" + "rsx_csx" + "rsx_rsx" * ] - [ [ "strongly normalizing for term vectors" ] "csx_vector" + "( ⦃?,?⦄ ⊢ ⬈*[?] 𝐒⦃?⦄ )" "csx_cnx_vector" + "csx_csx_vector" * ] - [ [ "strongly normalizing for terms" ] "csx" + "( ⦃?,?⦄ ⊢ ⬈*[?] 𝐒⦃?⦄ )" "csx_simple" + "csx_simple_teqo" + "csx_drops" + "csx_fqus" + "csx_lsubr" + "csx_reqx" + "csx_feqx" + "csx_aaa" + "csx_gcp" + "csx_gcr" + "csx_lpx" + "csx_cnx" + "csx_fpbq" + "csx_cpxs" + "csx_lpxs" + "csx_csx" * ] - [ [ "for lenvs on all entries" ] "lpxs" + "( ⦃?,?⦄ ⊢ ⬈*[?] ? )" "lpxs_length" + "lpxs_drops" + "lpxs_reqx" + "lpxs_feqx" + "lpxs_aaa" + "lpxs_lpx" + "lpxs_cpxs" + "lpxs_lpxs" * ] - [ [ "for binders" ] "cpxs_ext" + "( ⦃?,?⦄ ⊢ ? ⬈*[?] ? )" * ] - [ [ "for terms" ] "cpxs" + "( ⦃?,?⦄ ⊢ ? ⬈*[?] ? )" "cpxs_teqx" + "cpxs_teqo" + "cpxs_teqo_vector" + "cpxs_drops" + "cpxs_fqus" + "cpxs_lsubr" + "cpxs_reqx" + "cpxs_feqx" + "cpxs_aaa" + "cpxs_lpx" + "cpxs_cnx" + "cpxs_cpxs" * ] + [ [ "strongly normalizing for lenvs on referred entries" ] "rsx" + "( ? ⊢ ⬈*[?,?] 𝐒❪?❫ )" "rsx_length" + "rsx_drops" + "rsx_fqup" + "rsx_cpxs" + "rsx_csx" + "rsx_rsx" * ] + [ [ "strongly normalizing for term vectors" ] "csx_vector" + "( ❪?,?❫ ⊢ ⬈*[?] 𝐒❪?❫ )" "csx_cnx_vector" + "csx_csx_vector" * ] + [ [ "strongly normalizing for terms" ] "csx" + "( ❪?,?❫ ⊢ ⬈*[?] 𝐒❪?❫ )" "csx_simple" + "csx_simple_teqo" + "csx_drops" + "csx_fqus" + "csx_lsubr" + "csx_reqx" + "csx_feqx" + "csx_aaa" + "csx_gcp" + "csx_gcr" + "csx_lpx" + "csx_cnx" + "csx_fpbq" + "csx_cpxs" + "csx_lpxs" + "csx_csx" * ] + [ [ "for lenvs on all entries" ] "lpxs" + "( ❪?,?❫ ⊢ ⬈*[?] ? )" "lpxs_length" + "lpxs_drops" + "lpxs_reqx" + "lpxs_feqx" + "lpxs_aaa" + "lpxs_lpx" + "lpxs_cpxs" + "lpxs_lpxs" * ] + [ [ "for binders" ] "cpxs_ext" + "( ❪?,?❫ ⊢ ? ⬈*[?] ? )" * ] + [ [ "for terms" ] "cpxs" + "( ❪?,?❫ ⊢ ? ⬈*[?] ? )" "cpxs_teqx" + "cpxs_teqo" + "cpxs_teqo_vector" + "cpxs_drops" + "cpxs_fqus" + "cpxs_lsubr" + "cpxs_reqx" + "cpxs_feqx" + "cpxs_aaa" + "cpxs_lpx" + "cpxs_cnx" + "cpxs_cpxs" * ] } ] } @@ -99,35 +99,35 @@ table { class "cyan" [ { "rt-transition" * } { [ { "context-sensitive parallel t-transition" * } { - [ [ "for terms" ] "cpt" + "( ⦃?,?⦄ ⊢ ? ⬆[?,?] ? )" "cpt_drops" + "cpt_fqu" + "cpt_cpm" * ] + [ [ "for terms" ] "cpt" + "( ❪?,?❫ ⊢ ? ⬆[?,?] ? )" "cpt_drops" + "cpt_fqu" + "cpt_cpm" * ] } ] [ { "context-sensitive parallel r-transition" * } { - [ [ "normal form for terms" ] "cnr ( ⦃?,?⦄ ⊢ ➡[?] 𝐍⦃?⦄ )" "cnr_simple" + "cnr_teqx" + "cnr_drops" * ] - [ [ "for lenvs on all entries" ] "lpr" + "( ⦃?,?⦄ ⊢ ➡[?] ? )" "lpr_length" + "lpr_drops" + "lpr_fquq" + "lpr_aaa" + "lpr_lpx" + "lpr_lpr" * ] - [ [ "for binders" ] "cpr_ext" + "( ⦃?,?⦄ ⊢ ? ➡[?] ? )" * ] - [ [ "for terms" ] "cpr" + "( ⦃?,?⦄ ⊢ ? ➡[?] ? )" "cpr_drops" + "cpr_drops_basic" + "cpr_teqx" + "cpr_cpr" * ] + [ [ "normal form for terms" ] "cnr ( ❪?,?❫ ⊢ ➡[?] 𝐍❪?❫ )" "cnr_simple" + "cnr_teqx" + "cnr_drops" * ] + [ [ "for lenvs on all entries" ] "lpr" + "( ❪?,?❫ ⊢ ➡[?] ? )" "lpr_length" + "lpr_drops" + "lpr_fquq" + "lpr_aaa" + "lpr_lpx" + "lpr_lpr" * ] + [ [ "for binders" ] "cpr_ext" + "( ❪?,?❫ ⊢ ? ➡[?] ? )" * ] + [ [ "for terms" ] "cpr" + "( ❪?,?❫ ⊢ ? ➡[?] ? )" "cpr_drops" + "cpr_drops_basic" + "cpr_teqx" + "cpr_cpr" * ] } ] [ { "t-bound context-sensitive parallel rt-transition" * } { - [ [ "for terms" ] "cpm" + "( ⦃?,?⦄ ⊢ ? ➡[?,?] ? )" "cpm_simple" + "cpm_teqx" + "cpm_drops" + "cpm_lsubr" + "cpm_fsle" + "cpm_aaa" + "cpm_cpx" * ] + [ [ "for terms" ] "cpm" + "( ❪?,?❫ ⊢ ? ➡[?,?] ? )" "cpm_simple" + "cpm_teqx" + "cpm_drops" + "cpm_lsubr" + "cpm_fsle" + "cpm_aaa" + "cpm_cpx" * ] } ] [ { "unbound parallel rst-transition" * } { - [ [ "for closures" ] "fpbq" + "( ⦃?,?,?⦄ ≽[?] ⦃?,?,?⦄ )" "fpbq_aaa" + "fpbq_fpb" * ] - [ [ "proper for closures" ] "fpb" + "( ⦃?,?,?⦄ ≻[?] ⦃?,?,?⦄ )" "fpb_reqx" + "fpb_feqx" * ] + [ [ "for closures" ] "fpbq" + "( ❪?,?,?❫ ≽[?] ❪?,?,?❫ )" "fpbq_aaa" + "fpbq_fpb" * ] + [ [ "proper for closures" ] "fpb" + "( ❪?,?,?❫ ≻[?] ❪?,?,?❫ )" "fpb_reqx" + "fpb_feqx" * ] } ] [ { "unbound context-sensitive parallel rt-transition" * } { - [ [ "normal form for terms" ] "cnx" + "( ⦃?,?⦄ ⊢ ⬈[?] 𝐍⦃?⦄ )" "cnx_simple" + "cnx_drops" + "cnx_basic" + "cnx_cnx" * ] - [ [ "for lenvs on referred entries" ] "rpx" + "( ⦃?,?⦄ ⊢ ⬈[?,?] ? )" "rpx_length" + "rpx_drops" + "rpx_fqup" + "rpx_fsle" + "rpx_reqx" + "rpx_lpx" + "rpx_rpx" * ] - [ [ "for lenvs on all entries" ] "lpx" + "( ⦃?,?⦄ ⊢ ⬈[?] ? )" "lpx_length" + "lpx_drops" + "lpx_fquq" + "lpx_fsle" + "lpx_reqx" + "lpx_aaa" * ] - [ [ "for binders" ] "cpx_ext" + "( ⦃?,?⦄ ⊢ ? ⬈[?] ? )" * ] - [ [ "for terms" ] "cpx" + "( ⦃?,?⦄ ⊢ ? ⬈[?] ? )" "cpx_simple" + "cpx_drops" + "cpx_drops_basic" + "cpx_fqus" + "cpx_lsubr" + "cpx_req" + "cpx_reqx" + "cpx_feqx" * ] + [ [ "normal form for terms" ] "cnx" + "( ❪?,?❫ ⊢ ⬈[?] 𝐍❪?❫ )" "cnx_simple" + "cnx_drops" + "cnx_basic" + "cnx_cnx" * ] + [ [ "for lenvs on referred entries" ] "rpx" + "( ❪?,?❫ ⊢ ⬈[?,?] ? )" "rpx_length" + "rpx_drops" + "rpx_fqup" + "rpx_fsle" + "rpx_reqx" + "rpx_lpx" + "rpx_rpx" * ] + [ [ "for lenvs on all entries" ] "lpx" + "( ❪?,?❫ ⊢ ⬈[?] ? )" "lpx_length" + "lpx_drops" + "lpx_fquq" + "lpx_fsle" + "lpx_reqx" + "lpx_aaa" * ] + [ [ "for binders" ] "cpx_ext" + "( ❪?,?❫ ⊢ ? ⬈[?] ? )" * ] + [ [ "for terms" ] "cpx" + "( ❪?,?❫ ⊢ ? ⬈[?] ? )" "cpx_simple" + "cpx_drops" + "cpx_drops_basic" + "cpx_fqus" + "cpx_lsubr" + "cpx_req" + "cpx_reqx" + "cpx_feqx" * ] } ] [ { "bound context-sensitive parallel rt-transition" * } { - [ [ "for terms" ] "cpg" + "( ⦃?,?⦄ ⊢ ? ⬈[?,?] ? )" "cpg_simple" + "cpg_drops" + "cpg_lsubr" * ] + [ [ "for terms" ] "cpg" + "( ❪?,?❫ ⊢ ? ⬈[?,?] ? )" "cpg_simple" + "cpg_drops" + "cpg_lsubr" * ] } ] } @@ -145,16 +145,16 @@ class "italic" { 2 } [ [ "" ] "lsubn ( ? ⊢ ? :⫃ ? )" "lsubn_drop" "lsubn_cpcs" "lsubn_nta" * ] } ] - [ [ "" ] "shnv ( ⦃?,?⦄ ⊢ ? ¡[?,?,?] )" * ] + [ [ "" ] "shnv ( ❪?,?❫ ⊢ ? ¡[?,?,?] )" * ] [ { "decomposed rt-equivalence" * } { "scpes_cpcs" + "scpes_scpes" } ] - [ [ "for lenvs on referred entries" ] "rpxs" + "( ⦃?,?⦄ ⊢ ⬈*[?,?] ? )" "rpxs_length" + "rpxs_drops" + "rpxs_fqup" + "rpxs_reqx" + "rpxs_feqx" + "rpxs_aaa" + "rpxs_cpxs" + "rpxs_lpxs" + "rpxs_rpxs" * ] + [ [ "for lenvs on referred entries" ] "rpxs" + "( ❪?,?❫ ⊢ ⬈*[?,?] ? )" "rpxs_length" + "rpxs_drops" + "rpxs_fqup" + "rpxs_reqx" + "rpxs_feqx" + "rpxs_aaa" + "rpxs_cpxs" + "rpxs_lpxs" + "rpxs_rpxs" * ] [ [ "for lenvs on referred entries" ] - "lfpr" + "( ⦃?,?⦄ ⊢ ➡[?,?] ? )" "lfpr_length" + "lfpr_drops" + "lfpr_fquq" + "lfpr_fqup" + "lfpr_aaa" + "lfpr_rpx" + "lfpr_lfpr" * ] + "lfpr" + "( ❪?,?❫ ⊢ ➡[?,?] ? )" "lfpr_length" + "lfpr_drops" + "lfpr_fquq" + "lfpr_fqup" + "lfpr_aaa" + "lfpr_rpx" + "lfpr_lfpr" * ] [ { "evaluation for context-sensitive rt-reduction" * } { - [ [ "" ] "cpxe ( ⦃?,?⦄ ⊢ ➡*[?,?] 𝐍⦃?⦄ )" * ] + [ [ "" ] "cpxe ( ❪?,?❫ ⊢ ➡*[?,?] 𝐍❪?❫ )" * ] } ] [ { "normal forms for context-sensitive rt-reduction" * } { @@ -162,11 +162,11 @@ class "italic" { 2 } } ] [ { "irreducible forms for context-sensitive rt-reduction" * } { - [ [ "" ] "cix ( ⦃?,?⦄ ⊢ ➡[?,?] 𝐈⦃?⦄ )" "cix_lift" * ] + [ [ "" ] "cix ( ❪?,?❫ ⊢ ➡[?,?] 𝐈❪?❫ )" "cix_lift" * ] } ] [ { "reducible forms for context-sensitive rt-reduction" * } { - [ [ "" ] "crx ( ⦃?,?⦄ ⊢ ➡[?,?] 𝐑⦃?⦄ )" "crx_lift" * ] + [ [ "" ] "crx ( ❪?,?❫ ⊢ ➡[?,?] 𝐑❪?❫ )" "crx_lift" * ] } ] [ { "normal forms for context-sensitive reduction" * } { @@ -174,19 +174,19 @@ class "italic" { 2 } } ] [ { "irreducible forms for context-sensitive reduction" * } { - [ [ "" ] "cir ( ⦃?,?⦄ ⊢ ➡ 𝐈⦃?⦄ )" "cir_lift" * ] + [ [ "" ] "cir ( ❪?,?❫ ⊢ ➡ 𝐈❪?❫ )" "cir_lift" * ] } ] [ { "reducible forms for context-sensitive reduction" * } { - [ [ "" ] "crr ( ⦃?,?⦄ ⊢ ➡ 𝐑⦃?⦄ )" "crr_lift" * ] + [ [ "" ] "crr ( ❪?,?❫ ⊢ ➡ 𝐑❪?❫ )" "crr_lift" * ] } ] [ { "unfold" * } { - [ [ "" ] "unfold ( ⦃?,?⦄ ⊢ ? ⧫* ? )" * ] + [ [ "" ] "unfold ( ❪?,?❫ ⊢ ? ⧫* ? )" * ] } ] [ { "iterated static type assignment" * } { - [ [ "" ] "lstas ( ⦃?,?⦄ ⊢ ? •*[?,?] ? )" "lstas_lift" + "lstas_llpx_sn.ma" + "lstas_aaa" + "lstas_da" + "lstas_lstas" * ] + [ [ "" ] "lstas ( ❪?,?❫ ⊢ ? •*[?,?] ? )" "lstas_lift" + "lstas_llpx_sn.ma" + "lstas_aaa" + "lstas_da" + "lstas_lstas" * ] } ] [ { "local env. ref. for degree assignment" * } { @@ -194,11 +194,11 @@ class "italic" { 2 } } ] [ { "degree assignment" * } { - [ [ "" ] "da ( ⦃?,?⦄ ⊢ ? ▪[?,?] ? )" "da_lift" + "da_aaa" + "da_da" * ] + [ [ "" ] "da ( ❪?,?❫ ⊢ ? ▪[?,?] ? )" "da_lift" + "da_aaa" + "da_da" * ] } ] [ { "context-sensitive multiple rt-substitution" * } { - [ [ "" ] "cpys ( ⦃?,?⦄ ⊢ ? ▶*[?,?] ? )" "cpys_alt ( ⦃?,?⦄ ⊢ ? ▶▶*[?,?] ? )" "cpys_lift" + "cpys_cpys" * ] + [ [ "" ] "cpys ( ❪?,?❫ ⊢ ? ▶*[?,?] ? )" "cpys_alt ( ❪?,?❫ ⊢ ? ▶▶*[?,?] ? )" "cpys_lift" + "cpys_cpys" * ] } ] [ { "global env. slicing" * } { @@ -206,7 +206,7 @@ class "italic" { 2 } } ] [ { "context-sensitive ordinary rt-substitution" * } { - [ [ "" ] "cpy ( ⦃?,?⦄ ⊢ ? ▶[?,?] ? )" "cpy_lift" + "cpy_nlift" + "cpy_cpy" * ] + [ [ "" ] "cpy ( ❪?,?❫ ⊢ ? ▶[?,?] ? )" "cpy_lift" + "cpy_nlift" + "cpy_cpy" * ] } ] [ { "local env. ref. for rt-substitution" * } { diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/apply_2.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/apply_2.ma index a4d566f3f..f770230c8 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/apply_2.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/apply_2.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( f @ ❴ break term 46 a ❵ )" +notation "hvbox( f @❨ break term 46 a ❩ )" non associative with precedence 60 for @{ 'Apply $f $a }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/basic_2.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/basic_2.ma index 5a122b8ec..52ebf0ebd 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/basic_2.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/basic_2.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( 𝐁❴ term 46 l, break term 46 h ❵ )" +notation "hvbox( 𝐁❨ term 46 l, break term 46 h ❩ )" non associative with precedence 90 for @{ 'Basic $l $h }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/cocompose_2.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/cocompose_2.ma index 992179f98..252f567bd 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/cocompose_2.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/cocompose_2.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox(f2 ~ \circ break f1)" (**) +notation "hvbox( f2 ~∘ break f1 )" right associative with precedence 60 for @{ 'CoCompose $f2 $f1 }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/droppreds_2.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/droppreds_2.ma index d74010073..90c206208 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/droppreds_2.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/droppreds_2.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( ⫱ * [ term 46 n ] break term 46 T )" +notation "hvbox( ⫱ *[ term 46 n ] break term 46 T )" non associative with precedence 46 for @{ 'DropPreds $n $T }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/semicolon_3.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/semicolon_3.ma index 44b7c17a5..cd884bde6 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/semicolon_3.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/semicolon_3.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( { term 46 hd1, break term 46 hd2 }; break term 46 tl )" +notation "hvbox( ❨ term 46 hd1, break term 46 hd2 ❩; break term 46 tl )" non associative with precedence 47 for @{ 'Semicolon $hd1 $hd2 $tl }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/uniform_1.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/uniform_1.ma index 896665d02..df29e6b1a 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/uniform_1.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/uniform_1.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( 𝐔 ❴ break term 46 a ❵ )" +notation "hvbox( 𝐔 ❨ break term 46 a ❩ )" non associative with precedence 90 for @{ 'Uniform $a }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/uparrowstar_2.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/uparrowstar_2.ma index a0ab933d8..50e07287a 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/uparrowstar_2.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/uparrowstar_2.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( ↑ * [ term 46 n ] break term 70 T )" +notation "hvbox( ↑*[ term 46 n ] break term 70 T )" non associative with precedence 70 for @{ 'UpArrowStar $n $T }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/upspoonstar_2.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/upspoonstar_2.ma index de75ff051..c9a1e3184 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/upspoonstar_2.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/upspoonstar_2.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( ⫯ * [ term 46 n ] break term 46 T )" +notation "hvbox( ⫯*[ term 46 n ] break term 46 T )" non associative with precedence 46 for @{ 'UpSpoonStar $n $T }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/relations/isdivergent_1.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/relations/isdivergent_1.ma index cd2838895..1a25c7878 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/relations/isdivergent_1.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/relations/isdivergent_1.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( 𝛀 ⦃ term 46 f ⦄ )" +notation "hvbox( 𝛀❪ term 46 f ❫ )" non associative with precedence 45 for @{ 'IsDivergent $f }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/relations/isfinite_1.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/relations/isfinite_1.ma index eb6eec16f..ac60a895b 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/relations/isfinite_1.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/relations/isfinite_1.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( 𝐅 ⦃ term 46 f ⦄ )" +notation "hvbox( 𝐅❪ term 46 f ❫ )" non associative with precedence 45 for @{ 'IsFinite $f }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/relations/isidentity_1.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/relations/isidentity_1.ma index f4cc5d7da..03fb76098 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/relations/isidentity_1.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/relations/isidentity_1.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( 𝐈 ⦃ term 46 f ⦄ )" +notation "hvbox( 𝐈❪ term 46 f ❫ )" non associative with precedence 45 for @{ 'IsIdentity $f }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/relations/isredtype_2.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/relations/isredtype_2.ma index 72275c55c..58ac25631 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/relations/isredtype_2.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/relations/isredtype_2.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( 𝐑𝐓 ⦃ term 46 n, break term 46 c ⦄ )" +notation "hvbox( 𝐑𝐓❪ term 46 n, break term 46 c ❫ )" non associative with precedence 45 for @{ 'IsRedType $n $c }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/relations/istotal_1.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/relations/istotal_1.ma index dd89fc23e..e26e9a3c5 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/relations/istotal_1.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/relations/istotal_1.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( 𝐓 ⦃ term 46 f ⦄ )" +notation "hvbox( 𝐓❪ term 46 f ❫ )" non associative with precedence 45 for @{ 'IsTotal $f }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/relations/istype_2.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/relations/istype_2.ma index 795d811ab..04c4927bd 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/relations/istype_2.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/relations/istype_2.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( 𝐓⦃ term 46 n, break term 46 c ⦄ )" +notation "hvbox( 𝐓❪ term 46 n, break term 46 c ❫ )" non associative with precedence 45 for @{ 'IsType $n $c }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/relations/isuniform_1.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/relations/isuniform_1.ma index 349f2b3bf..bc66e5c6d 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/relations/isuniform_1.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/relations/isuniform_1.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( 𝐔 ⦃ term 46 f ⦄ )" +notation "hvbox( 𝐔❪ term 46 f ❫ )" non associative with precedence 45 for @{ 'IsUniform $f }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/relations/rat_3.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/relations/rat_3.ma index 810640101..007b7f1a4 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/relations/rat_3.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/relations/rat_3.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( @ ⦃ term 46 T1 , break term 46 f ⦄ ≘ break term 46 T2 )" +notation "hvbox( @❪ term 46 T1 , break term 46 f ❫ ≘ break term 46 T2 )" non associative with precedence 45 for @{ 'RAt $T1 $f $T2 }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/relations/rcoafter_3.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/relations/rcoafter_3.ma index 3ad620801..83fc39664 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/relations/rcoafter_3.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/relations/rcoafter_3.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( f1 ~ ⊚ break term 46 f2 ≘ break term 46 f )" +notation "hvbox( f1 ~⊚ break term 46 f2 ≘ break term 46 f )" non associative with precedence 45 for @{ 'RCoAfter $f1 $f2 $f }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/relations/rcolength_2.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/relations/rcolength_2.ma index 7bb4e1363..785c4cbc5 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/relations/rcolength_2.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/relations/rcolength_2.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( 𝐂 ⦃ term 46 f ⦄ ≘ break term 46 n )" +notation "hvbox( 𝐂❪ term 46 f ❫ ≘ break term 46 n )" non associative with precedence 45 for @{ 'RCoLength $f $n }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/mr2_at.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/mr2_at.ma index 77aa3917c..d2a2499a3 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/mr2_at.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/mr2_at.ma @@ -20,9 +20,9 @@ include "ground_2/relocation/mr2.ma". inductive at: mr2 → relation nat ≝ | at_nil: ∀i. at (◊) i i | at_lt : ∀cs,l,m,i1,i2. i1 < l → - at cs i1 i2 → at ({l, m};cs) i1 i2 + at cs i1 i2 → at (❨l, m❩;cs) i1 i2 | at_ge : ∀cs,l,m,i1,i2. l ≤ i1 → - at cs (i1 + m) i2 → at ({l, m};cs) i1 i2 + at cs (i1 + m) i2 → at (❨l, m❩;cs) i1 i2 . interpretation "application (multiple relocation with pairs)" @@ -30,7 +30,7 @@ interpretation "application (multiple relocation with pairs)" (* Basic inversion lemmas ***************************************************) -fact at_inv_nil_aux: ∀cs,i1,i2. @⦃i1, cs⦄ ≘ i2 → cs = ◊ → i1 = i2. +fact at_inv_nil_aux: ∀cs,i1,i2. @❪i1, cs❫ ≘ i2 → cs = ◊ → i1 = i2. #cs #i1 #i2 * -cs -i1 -i2 [ // | #cs #l #m #i1 #i2 #_ #_ #H destruct @@ -38,13 +38,13 @@ fact at_inv_nil_aux: ∀cs,i1,i2. @⦃i1, cs⦄ ≘ i2 → cs = ◊ → i1 = i2. ] qed-. -lemma at_inv_nil: ∀i1,i2. @⦃i1, ◊⦄ ≘ i2 → i1 = i2. +lemma at_inv_nil: ∀i1,i2. @❪i1, ◊❫ ≘ i2 → i1 = i2. /2 width=3 by at_inv_nil_aux/ qed-. -fact at_inv_cons_aux: ∀cs,i1,i2. @⦃i1, cs⦄ ≘ i2 → - ∀l,m,cs0. cs = {l, m};cs0 → - i1 < l ∧ @⦃i1, cs0⦄ ≘ i2 ∨ - l ≤ i1 ∧ @⦃i1 + m, cs0⦄ ≘ i2. +fact at_inv_cons_aux: ∀cs,i1,i2. @❪i1, cs❫ ≘ i2 → + ∀l,m,cs0. cs = ❨l, m❩;cs0 → + i1 < l ∧ @❪i1, cs0❫ ≘ i2 ∨ + l ≤ i1 ∧ @❪i1 + m, cs0❫ ≘ i2. #cs #i1 #i2 * -cs -i1 -i2 [ #i #l #m #cs #H destruct | #cs1 #l1 #m1 #i1 #i2 #Hil1 #Hi12 #l2 #m2 #cs2 #H destruct /3 width=1 by or_introl, conj/ @@ -52,20 +52,20 @@ fact at_inv_cons_aux: ∀cs,i1,i2. @⦃i1, cs⦄ ≘ i2 → ] qed-. -lemma at_inv_cons: ∀cs,l,m,i1,i2. @⦃i1, {l, m};cs⦄ ≘ i2 → - i1 < l ∧ @⦃i1, cs⦄ ≘ i2 ∨ - l ≤ i1 ∧ @⦃i1 + m, cs⦄ ≘ i2. +lemma at_inv_cons: ∀cs,l,m,i1,i2. @❪i1, ❨l, m❩;cs❫ ≘ i2 → + i1 < l ∧ @❪i1, cs❫ ≘ i2 ∨ + l ≤ i1 ∧ @❪i1 + m, cs❫ ≘ i2. /2 width=3 by at_inv_cons_aux/ qed-. -lemma at_inv_cons_lt: ∀cs,l,m,i1,i2. @⦃i1, {l, m};cs⦄ ≘ i2 → - i1 < l → @⦃i1, cs⦄ ≘ i2. +lemma at_inv_cons_lt: ∀cs,l,m,i1,i2. @❪i1, ❨l, m❩;cs❫ ≘ i2 → + i1 < l → @❪i1, cs❫ ≘ i2. #cs #l #m #i1 #m2 #H elim (at_inv_cons … H) -H * // #Hli1 #_ #Hi1l elim (lt_le_false … Hi1l Hli1) qed-. -lemma at_inv_cons_ge: ∀cs,l,m,i1,i2. @⦃i1, {l, m};cs⦄ ≘ i2 → - l ≤ i1 → @⦃i1 + m, cs⦄ ≘ i2. +lemma at_inv_cons_ge: ∀cs,l,m,i1,i2. @❪i1, ❨l, m❩;cs❫ ≘ i2 → + l ≤ i1 → @❪i1 + m, cs❫ ≘ i2. #cs #l #m #i1 #m2 #H elim (at_inv_cons … H) -H * // #Hi1l #_ #Hli1 elim (lt_le_false … Hi1l Hli1) @@ -73,7 +73,7 @@ qed-. (* Main properties **********************************************************) -theorem at_mono: ∀cs,i,i1. @⦃i, cs⦄ ≘ i1 → ∀i2. @⦃i, cs⦄ ≘ i2 → i1 = i2. +theorem at_mono: ∀cs,i,i1. @❪i, cs❫ ≘ i1 → ∀i2. @❪i, cs❫ ≘ i2 → i1 = i2. #cs #i #i1 #H elim H -cs -i -i1 [ #i #x #H <(at_inv_nil … H) -x // | #cs #l #m #i #i1 #Hil #_ #IHi1 #x #H diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/mr2_minus.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/mr2_minus.ma index f118cf129..81544fe29 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/mr2_minus.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/mr2_minus.ma @@ -20,9 +20,9 @@ include "ground_2/relocation/mr2.ma". inductive minuss: nat → relation mr2 ≝ | minuss_nil: ∀i. minuss i (◊) (◊) | minuss_lt : ∀cs1,cs2,l,m,i. i < l → minuss i cs1 cs2 → - minuss i ({l, m};cs1) ({l - i, m};cs2) + minuss i (❨l, m❩;cs1) (❨l - i, m❩;cs2) | minuss_ge : ∀cs1,cs2,l,m,i. l ≤ i → minuss (m + i) cs1 cs2 → - minuss i ({l, m};cs1) cs2 + minuss i (❨l, m❩;cs1) cs2 . interpretation "minus (multiple relocation with pairs)" @@ -42,10 +42,10 @@ lemma minuss_inv_nil1: ∀cs2,i. ◊ ▭ i ≘ cs2 → cs2 = ◊. /2 width=4 by minuss_inv_nil1_aux/ qed-. fact minuss_inv_cons1_aux: ∀cs1,cs2,i. cs1 ▭ i ≘ cs2 → - ∀l,m,cs. cs1 = {l, m};cs → + ∀l,m,cs. cs1 = ❨l, m❩;cs → l ≤ i ∧ cs ▭ m + i ≘ cs2 ∨ ∃∃cs0. i < l & cs ▭ i ≘ cs0 & - cs2 = {l - i, m};cs0. + cs2 = ❨l - i, m❩;cs0. #cs1 #cs2 #i * -cs1 -cs2 -i [ #i #l #m #cs #H destruct | #cs1 #cs #l1 #m1 #i1 #Hil1 #Hcs #l2 #m2 #cs2 #H destruct /3 width=3 by ex3_intro, or_intror/ @@ -53,22 +53,22 @@ fact minuss_inv_cons1_aux: ∀cs1,cs2,i. cs1 ▭ i ≘ cs2 → ] qed-. -lemma minuss_inv_cons1: ∀cs1,cs2,l,m,i. {l, m};cs1 ▭ i ≘ cs2 → +lemma minuss_inv_cons1: ∀cs1,cs2,l,m,i. ❨l, m❩;cs1 ▭ i ≘ cs2 → l ≤ i ∧ cs1 ▭ m + i ≘ cs2 ∨ ∃∃cs. i < l & cs1 ▭ i ≘ cs & - cs2 = {l - i, m};cs. + cs2 = ❨l - i, m❩;cs. /2 width=3 by minuss_inv_cons1_aux/ qed-. -lemma minuss_inv_cons1_ge: ∀cs1,cs2,l,m,i. {l, m};cs1 ▭ i ≘ cs2 → +lemma minuss_inv_cons1_ge: ∀cs1,cs2,l,m,i. ❨l, m❩;cs1 ▭ i ≘ cs2 → l ≤ i → cs1 ▭ m + i ≘ cs2. #cs1 #cs2 #l #m #i #H elim (minuss_inv_cons1 … H) -H * // #cs #Hil #_ #_ #Hli elim (lt_le_false … Hil Hli) qed-. -lemma minuss_inv_cons1_lt: ∀cs1,cs2,l,m,i. {l, m};cs1 ▭ i ≘ cs2 → +lemma minuss_inv_cons1_lt: ∀cs1,cs2,l,m,i. ❨l, m❩;cs1 ▭ i ≘ cs2 → i < l → - ∃∃cs. cs1 ▭ i ≘ cs & cs2 = {l - i, m};cs. + ∃∃cs. cs1 ▭ i ≘ cs & cs2 = ❨l - i, m❩;cs. #cs1 #cs2 #l #m #i #H elim (minuss_inv_cons1 … H) -H * /2 width=3 by ex2_intro/ #Hli #_ #Hil elim (lt_le_false … Hil Hli) qed-. diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/mr2_plus.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/mr2_plus.ma index 94c561032..041ed014c 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/mr2_plus.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/mr2_plus.ma @@ -18,7 +18,7 @@ include "ground_2/relocation/mr2.ma". rec definition pluss (cs:mr2) (i:nat) on cs ≝ match cs with [ nil2 ⇒ ◊ -| cons2 l m cs ⇒ {l + i,m};pluss cs i +| cons2 l m cs ⇒ ❨l + i,m❩;pluss cs i ]. interpretation "plus (multiple relocation with pairs)" @@ -26,7 +26,7 @@ interpretation "plus (multiple relocation with pairs)" (* Basic properties *********************************************************) -lemma pluss_SO2: ∀l,m,cs. ({l,m};cs) + 1 = {↑l,m};cs + 1. +lemma pluss_SO2: ∀l,m,cs. (❨l,m❩;cs) + 1 = ❨↑l,m❩;cs + 1. normalize // qed. (* Basic inversion lemmas ***************************************************) @@ -36,8 +36,8 @@ lemma pluss_inv_nil2: ∀i,cs. cs + i = ◊ → cs = ◊. #l #m #cs #H destruct qed. -lemma pluss_inv_cons2: ∀i,l,m,cs2,cs. cs + i = {l,m};cs2 → - ∃∃cs1. cs1 + i = cs2 & cs = {l - i,m};cs1. +lemma pluss_inv_cons2: ∀i,l,m,cs2,cs. cs + i = ❨l,m❩;cs2 → + ∃∃cs1. cs1 + i = cs2 & cs = ❨l - i,m❩;cs1. #i #l #m #cs2 * [ normalize #H destruct | #l1 #m1 #cs1 whd in ⊢ (??%?→?); #H destruct diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/nstream_after.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/nstream_after.ma index 6ce6fa476..ca3ad7bc7 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/nstream_after.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/nstream_after.ma @@ -18,7 +18,7 @@ include "ground_2/relocation/rtmap_after.ma". (* RELOCATION N-STREAM ******************************************************) corec definition compose: rtmap → rtmap → rtmap. -#f2 * #n1 #f1 @(seq … (f2@❴n1❵)) @(compose ? f1) -compose -f1 +#f2 * #n1 #f1 @(seq … (f2@❨n1❩)) @(compose ? f1) -compose -f1 @(⫰*[↑n1] f2) defined. @@ -27,7 +27,7 @@ interpretation "functional composition (nstream)" (* Basic properies on compose ***********************************************) -lemma compose_rew: ∀f2,f1,n1. f2@❴n1❵⨮(⫰*[↑n1]f2)∘f1 = f2∘(n1⨮f1). +lemma compose_rew: ∀f2,f1,n1. f2@❨n1❩⨮(⫰*[↑n1]f2)∘f1 = f2∘(n1⨮f1). #f2 #f1 #n1 <(stream_rew … (f2∘(n1⨮f1))) normalize // qed. @@ -39,7 +39,7 @@ qed. (* Basic inversion lemmas on compose ****************************************) lemma compose_inv_rew: ∀f2,f1,f,n1,n. f2∘(n1⨮f1) = n⨮f → - f2@❴n1❵ = n ∧ (⫰*[↑n1]f2)∘f1 = f. + f2@❨n1❩ = n ∧ (⫰*[↑n1]f2)∘f1 = f. #f2 #f1 #f #n1 #n <(stream_rew … (f2∘(n1⨮f1))) normalize #H destruct /2 width=1 by conj/ qed-. @@ -51,13 +51,13 @@ lemma compose_inv_O2: ∀f2,f1,f,n2,n. (n2⨮f2)∘(⫯f1) = n⨮f → qed-. lemma compose_inv_S2: ∀f2,f1,f,n2,n1,n. (n2⨮f2)∘(↑n1⨮f1) = n⨮f → - ↑(n2+f2@❴n1❵) = n ∧ f2∘(n1⨮f1) = f2@❴n1❵⨮f. + ↑(n2+f2@❨n1❩) = n ∧ f2∘(n1⨮f1) = f2@❨n1❩⨮f. #f2 #f1 #f #n2 #n1 #n (injective_push … Hf) -g destruct /2 width=3 by ex2_intro/ @@ -48,8 +48,8 @@ lemma at_inv_npx: ∀f,i1,i2. @⦃i1,f⦄ ≘ i2 → ∀g,j1. ↑j1 = i1 → ⫯ ] qed-. -lemma at_inv_xnx: ∀f,i1,i2. @⦃i1,f⦄ ≘ i2 → ∀g. ↑g = f → - ∃∃j2. @⦃i1,g⦄ ≘ j2 & ↑j2 = i2. +lemma at_inv_xnx: ∀f,i1,i2. @❪i1,f❫ ≘ i2 → ∀g. ↑g = f → + ∃∃j2. @❪i1,g❫ ≘ j2 & ↑j2 = i2. #f #i1 #i2 * -f -i1 -i2 [ #f #g #j1 #j2 * #_ #_ #x #H elim (discr_next_push … H) | #f #i1 #i2 #_ #g #j1 #j2 * #_ #_ #x #H elim (discr_next_push … H) @@ -59,43 +59,43 @@ qed-. (* Advanced inversion lemmas ************************************************) -lemma at_inv_ppn: ∀f,i1,i2. @⦃i1,f⦄ ≘ i2 → +lemma at_inv_ppn: ∀f,i1,i2. @❪i1,f❫ ≘ i2 → ∀g,j2. 0 = i1 → ⫯g = f → ↑j2 = i2 → ⊥. #f #i1 #i2 #Hf #g #j2 #H1 #H <(at_inv_ppx … Hf … H1 H) -f -g -i1 -i2 #H destruct qed-. -lemma at_inv_npp: ∀f,i1,i2. @⦃i1,f⦄ ≘ i2 → +lemma at_inv_npp: ∀f,i1,i2. @❪i1,f❫ ≘ i2 → ∀g,j1. ↑j1 = i1 → ⫯g = f → 0 = i2 → ⊥. #f #i1 #i2 #Hf #g #j1 #H1 #H elim (at_inv_npx … Hf … H1 H) -f -i1 #x2 #Hg * -i2 #H destruct qed-. -lemma at_inv_npn: ∀f,i1,i2. @⦃i1,f⦄ ≘ i2 → - ∀g,j1,j2. ↑j1 = i1 → ⫯g = f → ↑j2 = i2 → @⦃j1,g⦄ ≘ j2. +lemma at_inv_npn: ∀f,i1,i2. @❪i1,f❫ ≘ i2 → + ∀g,j1,j2. ↑j1 = i1 → ⫯g = f → ↑j2 = i2 → @❪j1,g❫ ≘ j2. #f #i1 #i2 #Hf #g #j1 #j2 #H1 #H elim (at_inv_npx … Hf … H1 H) -f -i1 #x2 #Hg * -i2 #H destruct // qed-. -lemma at_inv_xnp: ∀f,i1,i2. @⦃i1,f⦄ ≘ i2 → +lemma at_inv_xnp: ∀f,i1,i2. @❪i1,f❫ ≘ i2 → ∀g. ↑g = f → 0 = i2 → ⊥. #f #i1 #i2 #Hf #g #H elim (at_inv_xnx … Hf … H) -f #x2 #Hg * -i2 #H destruct qed-. -lemma at_inv_xnn: ∀f,i1,i2. @⦃i1,f⦄ ≘ i2 → - ∀g,j2. ↑g = f → ↑j2 = i2 → @⦃i1,g⦄ ≘ j2. +lemma at_inv_xnn: ∀f,i1,i2. @❪i1,f❫ ≘ i2 → + ∀g,j2. ↑g = f → ↑j2 = i2 → @❪i1,g❫ ≘ j2. #f #i1 #i2 #Hf #g #j2 #H elim (at_inv_xnx … Hf … H) -f #x2 #Hg * -i2 #H destruct // qed-. -lemma at_inv_pxp: ∀f,i1,i2. @⦃i1,f⦄ ≘ i2 → 0 = i1 → 0 = i2 → ∃g. ⫯g = f. +lemma at_inv_pxp: ∀f,i1,i2. @❪i1,f❫ ≘ i2 → 0 = i1 → 0 = i2 → ∃g. ⫯g = f. #f elim (pn_split … f) * /2 width=2 by ex_intro/ #g #H #i1 #i2 #Hf #H1 #H2 cases (at_inv_xnp … Hf … H H2) qed-. -lemma at_inv_pxn: ∀f,i1,i2. @⦃i1,f⦄ ≘ i2 → ∀j2. 0 = i1 → ↑j2 = i2 → - ∃∃g. @⦃i1,g⦄ ≘ j2 & ↑g = f. +lemma at_inv_pxn: ∀f,i1,i2. @❪i1,f❫ ≘ i2 → ∀j2. 0 = i1 → ↑j2 = i2 → + ∃∃g. @❪i1,g❫ ≘ j2 & ↑g = f. #f elim (pn_split … f) * #g #H #i1 #i2 #Hf #j2 #H1 #H2 [ elim (at_inv_ppn … Hf … H1 H H2) @@ -103,7 +103,7 @@ lemma at_inv_pxn: ∀f,i1,i2. @⦃i1,f⦄ ≘ i2 → ∀j2. 0 = i1 → ↑j2 = i ] qed-. -lemma at_inv_nxp: ∀f,i1,i2. @⦃i1,f⦄ ≘ i2 → +lemma at_inv_nxp: ∀f,i1,i2. @❪i1,f❫ ≘ i2 → ∀j1. ↑j1 = i1 → 0 = i2 → ⊥. #f elim (pn_split f) * #g #H #i1 #i2 #Hf #j1 #H1 #H2 @@ -112,37 +112,37 @@ lemma at_inv_nxp: ∀f,i1,i2. @⦃i1,f⦄ ≘ i2 → ] qed-. -lemma at_inv_nxn: ∀f,i1,i2. @⦃i1,f⦄ ≘ i2 → ∀j1,j2. ↑j1 = i1 → ↑j2 = i2 → - (∃∃g. @⦃j1,g⦄ ≘ j2 & ⫯g = f) ∨ - ∃∃g. @⦃i1,g⦄ ≘ j2 & ↑g = f. +lemma at_inv_nxn: ∀f,i1,i2. @❪i1,f❫ ≘ i2 → ∀j1,j2. ↑j1 = i1 → ↑j2 = i2 → + (∃∃g. @❪j1,g❫ ≘ j2 & ⫯g = f) ∨ + ∃∃g. @❪i1,g❫ ≘ j2 & ↑g = f. #f elim (pn_split f) * /4 width=7 by at_inv_xnn, at_inv_npn, ex2_intro, or_intror, or_introl/ qed-. (* Note: the following inversion lemmas must be checked *) -lemma at_inv_xpx: ∀f,i1,i2. @⦃i1,f⦄ ≘ i2 → ∀g. ⫯g = f → +lemma at_inv_xpx: ∀f,i1,i2. @❪i1,f❫ ≘ i2 → ∀g. ⫯g = f → (0 = i1 ∧ 0 = i2) ∨ - ∃∃j1,j2. @⦃j1,g⦄ ≘ j2 & ↑j1 = i1 & ↑j2 = i2. + ∃∃j1,j2. @❪j1,g❫ ≘ j2 & ↑j1 = i1 & ↑j2 = i2. #f * [2: #i1 ] #i2 #Hf #g #H [ elim (at_inv_npx … Hf … H) -f /3 width=5 by or_intror, ex3_2_intro/ | >(at_inv_ppx … Hf … H) -f /3 width=1 by conj, or_introl/ ] qed-. -lemma at_inv_xpp: ∀f,i1,i2. @⦃i1,f⦄ ≘ i2 → ∀g. ⫯g = f → 0 = i2 → 0 = i1. +lemma at_inv_xpp: ∀f,i1,i2. @❪i1,f❫ ≘ i2 → ∀g. ⫯g = f → 0 = i2 → 0 = i1. #f #i1 #i2 #Hf #g #H elim (at_inv_xpx … Hf … H) -f * // #j1 #j2 #_ #_ * -i2 #H destruct qed-. -lemma at_inv_xpn: ∀f,i1,i2. @⦃i1,f⦄ ≘ i2 → ∀g,j2. ⫯g = f → ↑j2 = i2 → - ∃∃j1. @⦃j1,g⦄ ≘ j2 & ↑j1 = i1. +lemma at_inv_xpn: ∀f,i1,i2. @❪i1,f❫ ≘ i2 → ∀g,j2. ⫯g = f → ↑j2 = i2 → + ∃∃j1. @❪j1,g❫ ≘ j2 & ↑j1 = i1. #f #i1 #i2 #Hf #g #j2 #H elim (at_inv_xpx … Hf … H) -f * [ #_ * -i2 #H destruct | #x1 #x2 #Hg #H1 * -i2 #H destruct /2 width=3 by ex2_intro/ ] qed-. -lemma at_inv_xxp: ∀f,i1,i2. @⦃i1,f⦄ ≘ i2 → 0 = i2 → +lemma at_inv_xxp: ∀f,i1,i2. @❪i1,f❫ ≘ i2 → 0 = i2 → ∃∃g. 0 = i1 & ⫯g = f. #f elim (pn_split f) * #g #H #i1 #i2 #Hf #H2 @@ -151,9 +151,9 @@ lemma at_inv_xxp: ∀f,i1,i2. @⦃i1,f⦄ ≘ i2 → 0 = i2 → ] qed-. -lemma at_inv_xxn: ∀f,i1,i2. @⦃i1,f⦄ ≘ i2 → ∀j2. ↑j2 = i2 → - (∃∃g,j1. @⦃j1,g⦄ ≘ j2 & ↑j1 = i1 & ⫯g = f) ∨ - ∃∃g. @⦃i1,g⦄ ≘ j2 & ↑g = f. +lemma at_inv_xxn: ∀f,i1,i2. @❪i1,f❫ ≘ i2 → ∀j2. ↑j2 = i2 → + (∃∃g,j1. @❪j1,g❫ ≘ j2 & ↑j1 = i1 & ⫯g = f) ∨ + ∃∃g. @❪i1,g❫ ≘ j2 & ↑g = f. #f elim (pn_split f) * #g #H #i1 #i2 #Hf #j2 #H2 [ elim (at_inv_xpn … Hf … H H2) -i2 /3 width=5 by or_introl, ex3_2_intro/ @@ -163,7 +163,7 @@ qed-. (* Basic forward lemmas *****************************************************) -lemma at_increasing: ∀i2,i1,f. @⦃i1,f⦄ ≘ i2 → i1 ≤ i2. +lemma at_increasing: ∀i2,i1,f. @❪i1,f❫ ≘ i2 → i1 ≤ i2. #i2 elim i2 -i2 [ #i1 #f #Hf elim (at_inv_xxp … Hf) -Hf // | #i2 #IH * // @@ -172,13 +172,13 @@ lemma at_increasing: ∀i2,i1,f. @⦃i1,f⦄ ≘ i2 → i1 ≤ i2. ] qed-. -lemma at_increasing_strict: ∀g,i1,i2. @⦃i1,g⦄ ≘ i2 → ∀f. ↑f = g → - i1 < i2 ∧ @⦃i1,f⦄ ≘ ↓i2. +lemma at_increasing_strict: ∀g,i1,i2. @❪i1,g❫ ≘ i2 → ∀f. ↑f = g → + i1 < i2 ∧ @❪i1,f❫ ≘ ↓i2. #g #i1 #i2 #Hg #f #H elim (at_inv_xnx … Hg … H) -Hg -H /4 width=2 by conj, at_increasing, le_S_S/ qed-. -lemma at_fwd_id_ex: ∀f,i. @⦃i,f⦄ ≘ i → ∃g. ⫯g = f. +lemma at_fwd_id_ex: ∀f,i. @❪i,f❫ ≘ i → ∃g. ⫯g = f. #f elim (pn_split f) * /2 width=2 by ex_intro/ #g #H #i #Hf elim (at_inv_xnx … Hf … H) -Hf -H #j2 #Hg #H destruct lapply (at_increasing … Hg) -Hg @@ -187,7 +187,7 @@ qed-. (* Basic properties *********************************************************) -corec lemma at_eq_repl_back: ∀i1,i2. eq_repl_back (λf. @⦃i1,f⦄ ≘ i2). +corec lemma at_eq_repl_back: ∀i1,i2. eq_repl_back (λf. @❪i1,f❫ ≘ i2). #i1 #i2 #f1 #H1 cases H1 -f1 -i1 -i2 [ #f1 #g1 #j1 #j2 #H #H1 #H2 #f2 #H12 cases (eq_inv_px … H12 … H) -g1 /2 width=2 by at_refl/ | #f1 #i1 #i2 #Hf1 #g1 #j1 #j2 #H #H1 #H2 #f2 #H12 cases (eq_inv_px … H12 … H) -g1 /3 width=7 by at_push/ @@ -195,12 +195,12 @@ corec lemma at_eq_repl_back: ∀i1,i2. eq_repl_back (λf. @⦃i1,f⦄ ≘ i2). ] qed-. -lemma at_eq_repl_fwd: ∀i1,i2. eq_repl_fwd (λf. @⦃i1,f⦄ ≘ i2). +lemma at_eq_repl_fwd: ∀i1,i2. eq_repl_fwd (λf. @❪i1,f❫ ≘ i2). #i1 #i2 @eq_repl_sym /2 width=3 by at_eq_repl_back/ qed-. -lemma at_le_ex: ∀j2,i2,f. @⦃i2,f⦄ ≘ j2 → ∀i1. i1 ≤ i2 → - ∃∃j1. @⦃i1,f⦄ ≘ j1 & j1 ≤ j2. +lemma at_le_ex: ∀j2,i2,f. @❪i2,f❫ ≘ j2 → ∀i1. i1 ≤ i2 → + ∃∃j1. @❪i1,f❫ ≘ j1 & j1 ≤ j2. #j2 elim j2 -j2 [2: #j2 #IH ] #i2 #f #Hf [ elim (at_inv_xxn … Hf) -Hf [1,3: * |*: // ] #g [ #x2 ] #Hg [ #H2 ] #H0 @@ -217,14 +217,14 @@ lemma at_le_ex: ∀j2,i2,f. @⦃i2,f⦄ ≘ j2 → ∀i1. i1 ≤ i2 → ] qed-. -lemma at_id_le: ∀i1,i2. i1 ≤ i2 → ∀f. @⦃i2,f⦄ ≘ i2 → @⦃i1,f⦄ ≘ i1. +lemma at_id_le: ∀i1,i2. i1 ≤ i2 → ∀f. @❪i2,f❫ ≘ i2 → @❪i1,f❫ ≘ i1. #i1 #i2 #H @(le_elim … H) -i1 -i2 [ #i2 | #i1 #i2 #IH ] #f #Hf elim (at_fwd_id_ex … Hf) /4 width=7 by at_inv_npn, at_push, at_refl/ qed-. (* Main properties **********************************************************) -theorem at_monotonic: ∀j2,i2,f. @⦃i2,f⦄ ≘ j2 → ∀j1,i1. @⦃i1,f⦄ ≘ j1 → +theorem at_monotonic: ∀j2,i2,f. @❪i2,f❫ ≘ j2 → ∀j1,i1. @❪i1,f❫ ≘ j1 → i1 < i2 → j1 < j2. #j2 elim j2 -j2 [ #i2 #f #H2f elim (at_inv_xxp … H2f) -H2f // @@ -240,7 +240,7 @@ theorem at_monotonic: ∀j2,i2,f. @⦃i2,f⦄ ≘ j2 → ∀j1,i1. @⦃i1,f⦄ ] qed-. -theorem at_inv_monotonic: ∀j1,i1,f. @⦃i1,f⦄ ≘ j1 → ∀j2,i2. @⦃i2,f⦄ ≘ j2 → +theorem at_inv_monotonic: ∀j1,i1,f. @❪i1,f❫ ≘ j1 → ∀j2,i2. @❪i2,f❫ ≘ j2 → j1 < j2 → i1 < i2. #j1 elim j1 -j1 [ #i1 #f #H1f elim (at_inv_xxp … H1f) -H1f // @@ -261,12 +261,12 @@ theorem at_inv_monotonic: ∀j1,i1,f. @⦃i1,f⦄ ≘ j1 → ∀j2,i2. @⦃i2,f ] qed-. -theorem at_mono: ∀f,i,i1. @⦃i,f⦄ ≘ i1 → ∀i2. @⦃i,f⦄ ≘ i2 → i2 = i1. +theorem at_mono: ∀f,i,i1. @❪i,f❫ ≘ i1 → ∀i2. @❪i,f❫ ≘ i2 → i2 = i1. #f #i #i1 #H1 #i2 #H2 elim (lt_or_eq_or_gt i2 i1) // #Hi elim (lt_le_false i i) /3 width=6 by at_inv_monotonic, eq_sym/ qed-. -theorem at_inj: ∀f,i1,i. @⦃i1,f⦄ ≘ i → ∀i2. @⦃i2,f⦄ ≘ i → i1 = i2. +theorem at_inj: ∀f,i1,i. @❪i1,f❫ ≘ i → ∀i2. @❪i2,f❫ ≘ i → i1 = i2. #f #i1 #i #H1 #i2 #H2 elim (lt_or_eq_or_gt i2 i1) // #Hi elim (lt_le_false i i) /3 width=6 by at_monotonic, eq_sym/ qed-. @@ -312,14 +312,14 @@ theorem at_div_pn: ∀f2,g2,f1,g1. (* Properties on tls ********************************************************) -lemma at_pxx_tls: ∀n,f. @⦃0,f⦄ ≘ n → @⦃0,⫱*[n]f⦄ ≘ 0. +lemma at_pxx_tls: ∀n,f. @❪0,f❫ ≘ n → @❪0,⫱*[n]f❫ ≘ 0. #n elim n -n // #n #IH #f #Hf cases (at_inv_pxn … Hf) -Hf [ |*: // ] #g #Hg #H0 destruct (injective_next … H) -H // qed-. -lemma isdiv_inv_push: ∀g. 𝛀⦃g⦄ → ∀f. ⫯f = g → ⊥. +lemma isdiv_inv_push: ∀g. 𝛀❪g❫ → ∀f. ⫯f = g → ⊥. #g #H elim (isdiv_inv_gen … H) -H #f #Hf * -g #g #H elim (discr_push_next … H) qed-. (* Main inversion lemmas ****************************************************) -corec theorem isdiv_inv_eq_repl: ∀f1,f2. 𝛀⦃f1⦄ → 𝛀⦃f2⦄ → f1 ≡ f2. +corec theorem isdiv_inv_eq_repl: ∀f1,f2. 𝛀❪f1❫ → 𝛀❪f2❫ → f1 ≡ f2. #f1 #f2 #H1 #H2 cases (isdiv_inv_gen … H1) -H1 cases (isdiv_inv_gen … H2) -H2 @@ -66,11 +66,11 @@ lemma isdiv_eq_repl_fwd: eq_repl_fwd … isdiv. (* Alternative definition ***************************************************) -corec lemma eq_next_isdiv: ∀f. ↑f ≡ f → 𝛀⦃f⦄. +corec lemma eq_next_isdiv: ∀f. ↑f ≡ f → 𝛀❪f❫. #f #H cases (eq_inv_nx … H) -H /4 width=3 by isdiv_next, eq_trans/ qed. -corec lemma eq_next_inv_isdiv: ∀f. 𝛀⦃f⦄ → ↑f ≡ f. +corec lemma eq_next_inv_isdiv: ∀f. 𝛀❪f❫ → ↑f ≡ f. #f * -f #f #g #Hf #Hg @(eq_next … Hg) [2: @eq_next_inv_isdiv // | skip ] @eq_f // @@ -78,19 +78,19 @@ qed-. (* Properties with iterated next ********************************************) -lemma isdiv_nexts: ∀n,f. 𝛀⦃f⦄ → 𝛀⦃↑*[n]f⦄. +lemma isdiv_nexts: ∀n,f. 𝛀❪f❫ → 𝛀❪↑*[n]f❫. #n elim n -n /3 width=3 by isdiv_next/ qed. (* Inversion lemmas with iterated next **************************************) -lemma isdiv_inv_nexts: ∀n,g. 𝛀⦃↑*[n]g⦄ → 𝛀⦃g⦄. +lemma isdiv_inv_nexts: ∀n,g. 𝛀❪↑*[n]g❫ → 𝛀❪g❫. #n elim n -n /3 width=3 by isdiv_inv_next/ qed. (* Properties with tail *****************************************************) -lemma isdiv_tl: ∀f. 𝛀⦃f⦄ → 𝛀⦃⫱f⦄. +lemma isdiv_tl: ∀f. 𝛀❪f❫ → 𝛀❪⫱f❫. #f cases (pn_split f) * #g * -f #H [ elim (isdiv_inv_push … H) -H // | /2 width=3 by isdiv_inv_next/ @@ -99,6 +99,6 @@ qed. (* Properties with iterated tail ********************************************) -lemma isdiv_tls: ∀n,g. 𝛀⦃g⦄ → 𝛀⦃⫱*[n]g⦄. +lemma isdiv_tls: ∀n,g. 𝛀❪g❫ → 𝛀❪⫱*[n]g❫. #n elim n -n /3 width=1 by isdiv_tl/ qed. diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isfin.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isfin.ma index f79431a17..3a9d2656c 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isfin.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isfin.ma @@ -18,28 +18,28 @@ include "ground_2/relocation/rtmap_fcla.ma". (* RELOCATION MAP ***********************************************************) definition isfin: predicate rtmap ≝ - λf. ∃n. 𝐂⦃f⦄ ≘ n. + λf. ∃n. 𝐂❪f❫ ≘ n. interpretation "test for finite colength (rtmap)" 'IsFinite f = (isfin f). (* Basic eliminators ********************************************************) -lemma isfin_ind (R:predicate rtmap): (∀f. 𝐈⦃f⦄ → R f) → - (∀f. 𝐅⦃f⦄ → R f → R (⫯f)) → - (∀f. 𝐅⦃f⦄ → R f → R (↑f)) → - ∀f. 𝐅⦃f⦄ → R f. +lemma isfin_ind (R:predicate rtmap): (∀f. 𝐈❪f❫ → R f) → + (∀f. 𝐅❪f❫ → R f → R (⫯f)) → + (∀f. 𝐅❪f❫ → R f → R (↑f)) → + ∀f. 𝐅❪f❫ → R f. #R #IH1 #IH2 #IH3 #f #H elim H -H #n #H elim H -f -n /3 width=2 by ex_intro/ qed-. (* Basic inversion lemmas ***************************************************) -lemma isfin_inv_push: ∀g. 𝐅⦃g⦄ → ∀f. ⫯f = g → 𝐅⦃f⦄. +lemma isfin_inv_push: ∀g. 𝐅❪g❫ → ∀f. ⫯f = g → 𝐅❪f❫. #g * /3 width=4 by fcla_inv_px, ex_intro/ qed-. -lemma isfin_inv_next: ∀g. 𝐅⦃g⦄ → ∀f. ↑f = g → 𝐅⦃f⦄. +lemma isfin_inv_next: ∀g. 𝐅❪g❫ → ∀f. ↑f = g → 𝐅❪f❫. #g * #n #H #f #H0 elim (fcla_inv_nx … H … H0) -g /2 width=2 by ex_intro/ qed-. @@ -53,44 +53,44 @@ qed-. lemma isfin_eq_repl_fwd: eq_repl_fwd … isfin. /3 width=3 by isfin_eq_repl_back, eq_repl_sym/ qed-. -lemma isfin_isid: ∀f. 𝐈⦃f⦄ → 𝐅⦃f⦄. +lemma isfin_isid: ∀f. 𝐈❪f❫ → 𝐅❪f❫. /3 width=2 by fcla_isid, ex_intro/ qed. -lemma isfin_push: ∀f. 𝐅⦃f⦄ → 𝐅⦃⫯f⦄. +lemma isfin_push: ∀f. 𝐅❪f❫ → 𝐅❪⫯f❫. #f * /3 width=2 by fcla_push, ex_intro/ qed. -lemma isfin_next: ∀f. 𝐅⦃f⦄ → 𝐅⦃↑f⦄. +lemma isfin_next: ∀f. 𝐅❪f❫ → 𝐅❪↑f❫. #f * /3 width=2 by fcla_next, ex_intro/ qed. (* Properties with iterated push ********************************************) -lemma isfin_pushs: ∀n,f. 𝐅⦃f⦄ → 𝐅⦃⫯*[n]f⦄. +lemma isfin_pushs: ∀n,f. 𝐅❪f❫ → 𝐅❪⫯*[n]f❫. #n elim n -n /3 width=3 by isfin_push/ qed. (* Inversion lemmas with iterated push **************************************) -lemma isfin_inv_pushs: ∀n,g. 𝐅⦃⫯*[n]g⦄ → 𝐅⦃g⦄. +lemma isfin_inv_pushs: ∀n,g. 𝐅❪⫯*[n]g❫ → 𝐅❪g❫. #n elim n -n /3 width=3 by isfin_inv_push/ qed. (* Properties with tail *****************************************************) -lemma isfin_tl: ∀f. 𝐅⦃f⦄ → 𝐅⦃⫱f⦄. +lemma isfin_tl: ∀f. 𝐅❪f❫ → 𝐅❪⫱f❫. #f elim (pn_split f) * #g #H #Hf destruct /3 width=3 by isfin_inv_push, isfin_inv_next/ qed. (* Inversion lemmas with tail ***********************************************) -lemma isfin_inv_tl: ∀f. 𝐅⦃⫱f⦄ → 𝐅⦃f⦄. +lemma isfin_inv_tl: ∀f. 𝐅❪⫱f❫ → 𝐅❪f❫. #f elim (pn_split f) * /2 width=1 by isfin_next, isfin_push/ qed-. (* Inversion lemmas with iterated tail **************************************) -lemma isfin_inv_tls: ∀n,f. 𝐅⦃⫱*[n]f⦄ → 𝐅⦃f⦄. +lemma isfin_inv_tls: ∀n,f. 𝐅❪⫱*[n]f❫ → 𝐅❪f❫. #n elim n -n /3 width=1 by isfin_inv_tl/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isid.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isid.ma index 4fa424d49..7fea33f00 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isid.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isid.ma @@ -26,26 +26,26 @@ interpretation "test for identity (rtmap)" (* Basic inversion lemmas ***************************************************) -lemma isid_inv_gen: ∀g. 𝐈⦃g⦄ → ∃∃f. 𝐈⦃f⦄ & ⫯f = g. +lemma isid_inv_gen: ∀g. 𝐈❪g❫ → ∃∃f. 𝐈❪f❫ & ⫯f = g. #g * -g #f #g #Hf * /2 width=3 by ex2_intro/ qed-. (* Advanced inversion lemmas ************************************************) -lemma isid_inv_push: ∀g. 𝐈⦃g⦄ → ∀f. ⫯f = g → 𝐈⦃f⦄. +lemma isid_inv_push: ∀g. 𝐈❪g❫ → ∀f. ⫯f = g → 𝐈❪f❫. #g #H elim (isid_inv_gen … H) -H #f #Hf * -g #g #H >(injective_push … H) -H // qed-. -lemma isid_inv_next: ∀g. 𝐈⦃g⦄ → ∀f. ↑f = g → ⊥. +lemma isid_inv_next: ∀g. 𝐈❪g❫ → ∀f. ↑f = g → ⊥. #g #H elim (isid_inv_gen … H) -H #f #Hf * -g #g #H elim (discr_next_push … H) qed-. (* Main inversion lemmas ****************************************************) -corec theorem isid_inv_eq_repl: ∀f1,f2. 𝐈⦃f1⦄ → 𝐈⦃f2⦄ → f1 ≡ f2. +corec theorem isid_inv_eq_repl: ∀f1,f2. 𝐈❪f1❫ → 𝐈❪f2❫ → f1 ≡ f2. #f1 #f2 #H1 #H2 cases (isid_inv_gen … H1) -H1 cases (isid_inv_gen … H2) -H2 @@ -65,11 +65,11 @@ lemma isid_eq_repl_fwd: eq_repl_fwd … isid. (* Alternative definition ***************************************************) -corec lemma eq_push_isid: ∀f. ⫯f ≡ f → 𝐈⦃f⦄. +corec lemma eq_push_isid: ∀f. ⫯f ≡ f → 𝐈❪f❫. #f #H cases (eq_inv_px … H) -H /4 width=3 by isid_push, eq_trans/ qed. -corec lemma eq_push_inv_isid: ∀f. 𝐈⦃f⦄ → ⫯f ≡ f. +corec lemma eq_push_inv_isid: ∀f. 𝐈❪f❫ → ⫯f ≡ f. #f * -f #f #g #Hf #Hg @(eq_push … Hg) [2: @eq_push_inv_isid // | skip ] @eq_f // @@ -77,19 +77,19 @@ qed-. (* Properties with iterated push ********************************************) -lemma isid_pushs: ∀n,f. 𝐈⦃f⦄ → 𝐈⦃⫯*[n]f⦄. +lemma isid_pushs: ∀n,f. 𝐈❪f❫ → 𝐈❪⫯*[n]f❫. #n elim n -n /3 width=3 by isid_push/ qed. (* Inversion lemmas with iterated push **************************************) -lemma isid_inv_pushs: ∀n,g. 𝐈⦃⫯*[n]g⦄ → 𝐈⦃g⦄. +lemma isid_inv_pushs: ∀n,g. 𝐈❪⫯*[n]g❫ → 𝐈❪g❫. #n elim n -n /3 width=3 by isid_inv_push/ qed. (* Properties with tail *****************************************************) -lemma isid_tl: ∀f. 𝐈⦃f⦄ → 𝐈⦃⫱f⦄. +lemma isid_tl: ∀f. 𝐈❪f❫ → 𝐈❪⫱f❫. #f cases (pn_split f) * #g * -f #H [ /2 width=3 by isid_inv_push/ | elim (isid_inv_next … H) -H // @@ -98,6 +98,6 @@ qed. (* Properties with iterated tail ********************************************) -lemma isid_tls: ∀n,g. 𝐈⦃g⦄ → 𝐈⦃⫱*[n]g⦄. +lemma isid_tls: ∀n,g. 𝐈❪g❫ → 𝐈❪⫱*[n]g❫. #n elim n -n /3 width=1 by isid_tl/ qed. diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_istot.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_istot.ma index 87087b273..c947583a3 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_istot.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_istot.ma @@ -17,40 +17,40 @@ include "ground_2/relocation/rtmap_at.ma". (* RELOCATION MAP ***********************************************************) -definition istot: predicate rtmap ≝ λf. ∀i. ∃j. @⦃i,f⦄ ≘ j. +definition istot: predicate rtmap ≝ λf. ∀i. ∃j. @❪i,f❫ ≘ j. interpretation "test for totality (rtmap)" 'IsTotal f = (istot f). (* Basic inversion lemmas ***************************************************) -lemma istot_inv_push: ∀g. 𝐓⦃g⦄ → ∀f. ⫯f = g → 𝐓⦃f⦄. +lemma istot_inv_push: ∀g. 𝐓❪g❫ → ∀f. ⫯f = g → 𝐓❪f❫. #g #Hg #f #H #i elim (Hg (↑i)) -Hg #j #Hg elim (at_inv_npx … Hg … H) -Hg -H /2 width=3 by ex_intro/ qed-. -lemma istot_inv_next: ∀g. 𝐓⦃g⦄ → ∀f. ↑f = g → 𝐓⦃f⦄. +lemma istot_inv_next: ∀g. 𝐓❪g❫ → ∀f. ↑f = g → 𝐓❪f❫. #g #Hg #f #H #i elim (Hg i) -Hg #j #Hg elim (at_inv_xnx … Hg … H) -Hg -H /2 width=2 by ex_intro/ qed-. (* Properties on tl *********************************************************) -lemma istot_tl: ∀f. 𝐓⦃f⦄ → 𝐓⦃⫱f⦄. +lemma istot_tl: ∀f. 𝐓❪f❫ → 𝐓❪⫱f❫. #f cases (pn_split f) * #g * -f /2 width=3 by istot_inv_next, istot_inv_push/ qed. (* Properties on tls ********************************************************) -lemma istot_tls: ∀n,f. 𝐓⦃f⦄ → 𝐓⦃⫱*[n]f⦄. +lemma istot_tls: ∀n,f. 𝐓❪f❫ → 𝐓❪⫱*[n]f❫. #n elim n -n /3 width=1 by istot_tl/ qed. (* Main forward lemmas on at ************************************************) -corec theorem at_ext: ∀f1,f2. 𝐓⦃f1⦄ → 𝐓⦃f2⦄ → - (∀i,i1,i2. @⦃i,f1⦄ ≘ i1 → @⦃i,f2⦄ ≘ i2 → i1 = i2) → +corec theorem at_ext: ∀f1,f2. 𝐓❪f1❫ → 𝐓❪f2❫ → + (∀i,i1,i2. @❪i,f1❫ ≘ i1 → @❪i,f2❫ ≘ i2 → i1 = i2) → f1 ≡ f2. #f1 cases (pn_split f1) * #g1 #H1 #f2 cases (pn_split f2) * #g2 #H2 @@ -72,7 +72,7 @@ qed-. (* Advanced properties on at ************************************************) -lemma at_dec: ∀f,i1,i2. 𝐓⦃f⦄ → Decidable (@⦃i1,f⦄ ≘ i2). +lemma at_dec: ∀f,i1,i2. 𝐓❪f❫ → Decidable (@❪i1,f❫ ≘ i2). #f #i1 #i2 #Hf lapply (Hf i1) -Hf * #j2 #Hf elim (eq_nat_dec i2 j2) [ #H destruct /2 width=1 by or_introl/ @@ -80,8 +80,8 @@ lemma at_dec: ∀f,i1,i2. 𝐓⦃f⦄ → Decidable (@⦃i1,f⦄ ≘ i2). ] qed-. -lemma is_at_dec_le: ∀f,i2,i. 𝐓⦃f⦄ → (∀i1. i1 + i ≤ i2 → @⦃i1,f⦄ ≘ i2 → ⊥) → - Decidable (∃i1. @⦃i1,f⦄ ≘ i2). +lemma is_at_dec_le: ∀f,i2,i. 𝐓❪f❫ → (∀i1. i1 + i ≤ i2 → @❪i1,f❫ ≘ i2 → ⊥) → + Decidable (∃i1. @❪i1,f❫ ≘ i2). #f #i2 #i #Hf elim i -i [ #Ht @or_intror * /3 width=3 by at_increasing/ | #i #IH #Ht elim (at_dec f (i2-i) i2) /3 width=2 by ex_intro, or_introl/ @@ -90,13 +90,13 @@ lemma is_at_dec_le: ∀f,i2,i. 𝐓⦃f⦄ → (∀i1. i1 + i ≤ i2 → @⦃i1, ] qed-. -lemma is_at_dec: ∀f,i2. 𝐓⦃f⦄ → Decidable (∃i1. @⦃i1,f⦄ ≘ i2). +lemma is_at_dec: ∀f,i2. 𝐓❪f❫ → Decidable (∃i1. @❪i1,f❫ ≘ i2). #f #i2 #Hf @(is_at_dec_le ?? (↑i2)) /2 width=4 by lt_le_false/ qed-. (* Advanced properties on isid **********************************************) -lemma isid_at_total: ∀f. 𝐓⦃f⦄ → (∀i1,i2. @⦃i1,f⦄ ≘ i2 → i1 = i2) → 𝐈⦃f⦄. +lemma isid_at_total: ∀f. 𝐓❪f❫ → (∀i1,i2. @❪i1,f❫ ≘ i2 → i1 = i2) → 𝐈❪f❫. #f #H1f #H2f @isid_at #i lapply (H1f i) -H1f * #j #Hf >(H2f … Hf) in ⊢ (???%); -H2f // diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isuni.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isuni.ma index 38443bf59..b88288a82 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isuni.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isuni.ma @@ -18,7 +18,7 @@ include "ground_2/relocation/rtmap_isfin.ma". (* RELOCATION MAP ***********************************************************) inductive isuni: predicate rtmap ≝ -| isuni_isid: ∀f. 𝐈⦃f⦄ → isuni f +| isuni_isid: ∀f. 𝐈❪f❫ → isuni f | isuni_next: ∀f. isuni f → ∀g. ↑f = g → isuni g . @@ -27,30 +27,30 @@ interpretation "test for uniformity (rtmap)" (* Basic inversion lemmas ***************************************************) -lemma isuni_inv_push: ∀g. 𝐔⦃g⦄ → ∀f. ⫯f = g → 𝐈⦃f⦄. +lemma isuni_inv_push: ∀g. 𝐔❪g❫ → ∀f. ⫯f = g → 𝐈❪f❫. #g * -g /2 width=3 by isid_inv_push/ #f #_ #g #H #x #Hx destruct elim (discr_push_next … Hx) qed-. -lemma isuni_inv_next: ∀g. 𝐔⦃g⦄ → ∀f. ↑f = g → 𝐔⦃f⦄. +lemma isuni_inv_next: ∀g. 𝐔❪g❫ → ∀f. ↑f = g → 𝐔❪f❫. #g * -g #f #Hf [ #x #Hx elim (isid_inv_next … Hf … Hx) | #g #H #x #Hx destruct /2 width=1 by injective_push/ ] qed-. -lemma isuni_split: ∀g. 𝐔⦃g⦄ → (∃∃f. 𝐈⦃f⦄ & ⫯f = g) ∨ (∃∃f.𝐔⦃f⦄ & ↑f = g). +lemma isuni_split: ∀g. 𝐔❪g❫ → (∃∃f. 𝐈❪f❫ & ⫯f = g) ∨ (∃∃f.𝐔❪f❫ & ↑f = g). #g #H elim (pn_split g) * #f #Hf /4 width=3 by isuni_inv_next, isuni_inv_push, or_introl, or_intror, ex2_intro/ qed-. (* basic forward lemmas *****************************************************) -lemma isuni_fwd_push: ∀g. 𝐔⦃g⦄ → ∀f. ⫯f = g → 𝐔⦃f⦄. +lemma isuni_fwd_push: ∀g. 𝐔❪g❫ → ∀f. ⫯f = g → 𝐔❪f❫. /3 width=3 by isuni_inv_push, isuni_isid/ qed-. (* Forward lemmas with test for finite colength *****************************) -lemma isuni_fwd_isfin: ∀f. 𝐔⦃f⦄ → 𝐅⦃f⦄. +lemma isuni_fwd_isfin: ∀f. 𝐔❪f❫ → 𝐅❪f❫. #f #H elim H -f /3 width=1 by isfin_next, isfin_isid/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sdj.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sdj.ma index bc0086a60..330ad6e98 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sdj.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sdj.ma @@ -124,13 +124,13 @@ qed-. (* Properties with isid *****************************************************) -corec lemma sdj_isid_dx: ∀f2. 𝐈⦃f2⦄ → ∀f1. f1 ∥ f2. +corec lemma sdj_isid_dx: ∀f2. 𝐈❪f2❫ → ∀f1. f1 ∥ f2. #f2 * -f2 #f2 #g2 #Hf2 #H2 #f1 cases (pn_split f1) * /3 width=5 by sdj_np, sdj_pp/ qed. -corec lemma sdj_isid_sn: ∀f1. 𝐈⦃f1⦄ → ∀f2. f1 ∥ f2. +corec lemma sdj_isid_sn: ∀f1. 𝐈❪f1❫ → ∀f2. f1 ∥ f2. #f1 * -f1 #f1 #g1 #Hf1 #H1 #f2 cases (pn_split f2) * /3 width=5 by sdj_pn, sdj_pp/ @@ -138,7 +138,7 @@ qed. (* Inversion lemmas with isid ***********************************************) -corec lemma sdj_inv_refl: ∀f. f ∥ f → 𝐈⦃f⦄. +corec lemma sdj_inv_refl: ∀f. f ∥ f → 𝐈❪f❫. #f cases (pn_split f) * #g #Hg #H [ lapply (sdj_inv_pp … H … Hg Hg) -H /3 width=3 by isid_push/ | elim (sdj_inv_nn … H … Hg Hg) diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sle.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sle.ma index 373be5488..c08d574cd 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sle.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sle.ma @@ -154,7 +154,7 @@ qed. (* Properties with isid *****************************************************) -corec lemma sle_isid_sn: ∀f1. 𝐈⦃f1⦄ → ∀f2. f1 ⊆ f2. +corec lemma sle_isid_sn: ∀f1. 𝐈❪f1❫ → ∀f2. f1 ⊆ f2. #f1 * -f1 #f1 #g1 #Hf1 #H1 #f2 cases (pn_split f2) * /3 width=5 by sle_weak, sle_push/ @@ -162,7 +162,7 @@ qed. (* Inversion lemmas with isid ***********************************************) -corec lemma sle_inv_isid_dx: ∀f1,f2. f1 ⊆ f2 → 𝐈⦃f2⦄ → 𝐈⦃f1⦄. +corec lemma sle_inv_isid_dx: ∀f1,f2. f1 ⊆ f2 → 𝐈❪f2❫ → 𝐈❪f1❫. #f1 #f2 * -f1 -f2 #f1 #f2 #g1 #g2 #Hf * * #H [2,3: elim (isid_inv_next … H) // ] @@ -172,7 +172,7 @@ qed-. (* Properties with isdiv ****************************************************) -corec lemma sle_isdiv_dx: ∀f2. 𝛀⦃f2⦄ → ∀f1. f1 ⊆ f2. +corec lemma sle_isdiv_dx: ∀f2. 𝛀❪f2❫ → ∀f1. f1 ⊆ f2. #f2 * -f2 #f2 #g2 #Hf2 #H2 #f1 cases (pn_split f1) * /3 width=5 by sle_weak, sle_next/ @@ -180,7 +180,7 @@ qed. (* Inversion lemmas with isdiv **********************************************) -corec lemma sle_inv_isdiv_sn: ∀f1,f2. f1 ⊆ f2 → 𝛀⦃f1⦄ → 𝛀⦃f2⦄. +corec lemma sle_inv_isdiv_sn: ∀f1,f2. f1 ⊆ f2 → 𝛀❪f1❫ → 𝛀❪f2❫. #f1 #f2 * -f1 -f2 #f1 #f2 #g1 #g2 #Hf * * #H [1,3: elim (isdiv_inv_push … H) // ] diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sor.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sor.ma index de0872c44..9191eb321 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sor.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sor.ma @@ -310,19 +310,19 @@ qed. (* Properies with test for identity *****************************************) -corec lemma sor_isid_sn: ∀f1. 𝐈⦃f1⦄ → ∀f2. f1 ⋓ f2 ≘ f2. +corec lemma sor_isid_sn: ∀f1. 𝐈❪f1❫ → ∀f2. f1 ⋓ f2 ≘ f2. #f1 * -f1 #f1 #g1 #Hf1 #H1 #f2 cases (pn_split f2) * /3 width=7 by sor_pp, sor_pn/ qed. -corec lemma sor_isid_dx: ∀f2. 𝐈⦃f2⦄ → ∀f1. f1 ⋓ f2 ≘ f1. +corec lemma sor_isid_dx: ∀f2. 𝐈❪f2❫ → ∀f1. f1 ⋓ f2 ≘ f1. #f2 * -f2 #f2 #g2 #Hf2 #H2 #f1 cases (pn_split f1) * /3 width=7 by sor_pp, sor_np/ qed. -lemma sor_isid: ∀f1,f2,f. 𝐈⦃f1⦄ → 𝐈⦃f2⦄ → 𝐈⦃f⦄ → f1 ⋓ f2 ≘ f. +lemma sor_isid: ∀f1,f2,f. 𝐈❪f1❫ → 𝐈❪f2❫ → 𝐈❪f❫ → f1 ⋓ f2 ≘ f. /4 width=3 by sor_eq_repl_back2, sor_eq_repl_back1, isid_inv_eq_repl/ qed. (* Inversion lemmas with tail ***********************************************) @@ -339,35 +339,35 @@ qed-. (* Inversion lemmas with test for identity **********************************) -lemma sor_isid_inv_sn: ∀f1,f2,f. f1 ⋓ f2 ≘ f → 𝐈⦃f1⦄ → f2 ≡ f. +lemma sor_isid_inv_sn: ∀f1,f2,f. f1 ⋓ f2 ≘ f → 𝐈❪f1❫ → f2 ≡ f. /3 width=4 by sor_isid_sn, sor_mono/ qed-. -lemma sor_isid_inv_dx: ∀f1,f2,f. f1 ⋓ f2 ≘ f → 𝐈⦃f2⦄ → f1 ≡ f. +lemma sor_isid_inv_dx: ∀f1,f2,f. f1 ⋓ f2 ≘ f → 𝐈❪f2❫ → f1 ≡ f. /3 width=4 by sor_isid_dx, sor_mono/ qed-. -corec lemma sor_fwd_isid1: ∀f1,f2,f. f1 ⋓ f2 ≘ f → 𝐈⦃f⦄ → 𝐈⦃f1⦄. +corec lemma sor_fwd_isid1: ∀f1,f2,f. f1 ⋓ f2 ≘ f → 𝐈❪f❫ → 𝐈❪f1❫. #f1 #f2 #f * -f1 -f2 -f #f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H #Hg [ /4 width=6 by isid_inv_push, isid_push/ ] cases (isid_inv_next … Hg … H) qed-. -corec lemma sor_fwd_isid2: ∀f1,f2,f. f1 ⋓ f2 ≘ f → 𝐈⦃f⦄ → 𝐈⦃f2⦄. +corec lemma sor_fwd_isid2: ∀f1,f2,f. f1 ⋓ f2 ≘ f → 𝐈❪f❫ → 𝐈❪f2❫. #f1 #f2 #f * -f1 -f2 -f #f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H #Hg [ /4 width=6 by isid_inv_push, isid_push/ ] cases (isid_inv_next … Hg … H) qed-. -lemma sor_inv_isid3: ∀f1,f2,f. f1 ⋓ f2 ≘ f → 𝐈⦃f⦄ → 𝐈⦃f1⦄ ∧ 𝐈⦃f2⦄. +lemma sor_inv_isid3: ∀f1,f2,f. f1 ⋓ f2 ≘ f → 𝐈❪f❫ → 𝐈❪f1❫ ∧ 𝐈❪f2❫. /3 width=4 by sor_fwd_isid2, sor_fwd_isid1, conj/ qed-. (* Properties with finite colength assignment *******************************) -lemma sor_fcla_ex: ∀f1,n1. 𝐂⦃f1⦄ ≘ n1 → ∀f2,n2. 𝐂⦃f2⦄ ≘ n2 → - ∃∃f,n. f1 ⋓ f2 ≘ f & 𝐂⦃f⦄ ≘ n & (n1 ∨ n2) ≤ n & n ≤ n1 + n2. +lemma sor_fcla_ex: ∀f1,n1. 𝐂❪f1❫ ≘ n1 → ∀f2,n2. 𝐂❪f2❫ ≘ n2 → + ∃∃f,n. f1 ⋓ f2 ≘ f & 𝐂❪f❫ ≘ n & (n1 ∨ n2) ≤ n & n ≤ n1 + n2. #f1 #n1 #Hf1 elim Hf1 -f1 -n1 /3 width=6 by sor_isid_sn, ex4_2_intro/ #f1 #n1 #Hf1 #IH #f2 #n2 * -f2 -n2 /3 width=6 by fcla_push, fcla_next, ex4_2_intro, sor_isid_dx/ #f2 #n2 #Hf2 elim (IH … Hf2) -IH -Hf2 -Hf1 [2,4: #f #n (max_O2 n) /2 width=1 by ist_max/ qed. -lemma ist_max_idem1: ∀n,c1,c2. 𝐓⦃n,c1⦄ → 𝐓⦃n,c2⦄ → 𝐓⦃n,c1∨c2⦄. +lemma ist_max_idem1: ∀n,c1,c2. 𝐓❪n,c1❫ → 𝐓❪n,c2❫ → 𝐓❪n,c1∨c2❫. #n #c1 #c2 #H1 #H2 >(idempotent_max n) /2 width=1 by ist_max/ qed. (* Inversion properties with test for t-transition counter ******************) lemma ist_inv_max: - ∀n,c1,c2. 𝐓⦃n,c1 ∨ c2⦄ → - ∃∃n1,n2. 𝐓⦃n1,c1⦄ & 𝐓⦃n2,c2⦄ & (n1 ∨ n2) = n. + ∀n,c1,c2. 𝐓❪n,c1 ∨ c2❫ → + ∃∃n1,n2. 𝐓❪n1,c1❫ & 𝐓❪n2,c2❫ & (n1 ∨ n2) = n. #n #c1 #c2 #H elim (max_inv_dx … H) -H #ri1 #rs1 #ti1 #ts1 #ri2 #rs2 #ti2 #ts2 #H1 #H2 #H3 #H4 #H5 #H6 destruct elim (max_inv_O3 … H1) -H1 #H11 #H12 destruct @@ -47,14 +47,14 @@ elim (max_inv_O3 … H3) -H3 #H31 #H32 destruct /2 width=5 by ex3_2_intro/ qed-. -lemma ist_O_inv_max: ∀c1,c2. 𝐓⦃0,c1 ∨ c2⦄ → ∧∧ 𝐓⦃0,c1⦄ & 𝐓⦃0,c2⦄. +lemma ist_O_inv_max: ∀c1,c2. 𝐓❪0,c1 ∨ c2❫ → ∧∧ 𝐓❪0,c1❫ & 𝐓❪0,c2❫. #c1 #c2 #H elim (ist_inv_max … H) -H #n1 #n2 #Hn1 #Hn2 #H elim (max_inv_O3 … H) -H #H1 #H2 destruct /2 width=1 by conj/ qed-. -lemma ist_inv_max_O_dx: ∀n,c1,c2. 𝐓⦃n,c1 ∨ c2⦄ → 𝐓⦃0,c2⦄ → 𝐓⦃n,c1⦄. +lemma ist_inv_max_O_dx: ∀n,c1,c2. 𝐓❪n,c1 ∨ c2❫ → 𝐓❪0,c2❫ → 𝐓❪n,c1❫. #n #c1 #c2 #H #H2 elim (ist_inv_max … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct // qed-. diff --git a/matita/matita/contribs/lambdadelta/ground_2/steps/rtc_ist_plus.ma b/matita/matita/contribs/lambdadelta/ground_2/steps/rtc_ist_plus.ma index a66a81d29..7e154d6b9 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/steps/rtc_ist_plus.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/steps/rtc_ist_plus.ma @@ -19,25 +19,25 @@ include "ground_2/steps/rtc_ist.ma". (* Properties with test for t-transition counter ****************************) -lemma ist_plus: ∀n1,n2,c1,c2. 𝐓⦃n1,c1⦄ → 𝐓⦃n2,c2⦄ → 𝐓⦃n1+n2,c1+c2⦄. +lemma ist_plus: ∀n1,n2,c1,c2. 𝐓❪n1,c1❫ → 𝐓❪n2,c2❫ → 𝐓❪n1+n2,c1+c2❫. #n1 #n2 #c1 #c2 #H1 #H2 destruct // qed. -lemma ist_plus_O1: ∀n,c1,c2. 𝐓⦃0,c1⦄ → 𝐓⦃n,c2⦄ → 𝐓⦃n,c1+c2⦄. +lemma ist_plus_O1: ∀n,c1,c2. 𝐓❪0,c1❫ → 𝐓❪n,c2❫ → 𝐓❪n,c1+c2❫. /2 width=1 by ist_plus/ qed. -lemma ist_plus_O2: ∀n,c1,c2. 𝐓⦃n,c1⦄ → 𝐓⦃0,c2⦄ → 𝐓⦃n,c1+c2⦄. +lemma ist_plus_O2: ∀n,c1,c2. 𝐓❪n,c1❫ → 𝐓❪0,c2❫ → 𝐓❪n,c1+c2❫. #n #c1 #c2 #H1 #H2 >(plus_n_O n) /2 width=1 by ist_plus/ qed. -lemma ist_succ: ∀n,c. 𝐓⦃n,c⦄ → 𝐓⦃↑n,c+𝟘𝟙⦄. +lemma ist_succ: ∀n,c. 𝐓❪n,c❫ → 𝐓❪↑n,c+𝟘𝟙❫. /2 width=1 by ist_plus/ qed. (* Inversion properties with test for constrained rt-transition counter *****) lemma ist_inv_plus: - ∀n,c1,c2. 𝐓⦃n,c1 + c2⦄ → - ∃∃n1,n2. 𝐓⦃n1,c1⦄ & 𝐓⦃n2,c2⦄ & n1 + n2 = n. + ∀n,c1,c2. 𝐓❪n,c1 + c2❫ → + ∃∃n1,n2. 𝐓❪n1,c1❫ & 𝐓❪n2,c2❫ & n1 + n2 = n. #n #c1 #c2 #H elim (plus_inv_dx … H) -H #ri1 #rs1 #ti1 #ts1 #ri2 #rs2 #ti2 #ts2 #H1 #H2 #H3 #H4 #H5 #H6 destruct elim (plus_inv_O3 … H1) -H1 #H11 #H12 destruct @@ -46,20 +46,20 @@ elim (plus_inv_O3 … H3) -H3 #H31 #H32 destruct /3 width=5 by ex3_2_intro/ qed-. -lemma ist_inv_plus_O_dx: ∀n,c1,c2. 𝐓⦃n,c1 + c2⦄ → 𝐓⦃0,c2⦄ → 𝐓⦃n,c1⦄. +lemma ist_inv_plus_O_dx: ∀n,c1,c2. 𝐓❪n,c1 + c2❫ → 𝐓❪0,c2❫ → 𝐓❪n,c1❫. #n #c1 #c2 #H #H2 elim (ist_inv_plus … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct // qed-. lemma ist_inv_plus_SO_dx: - ∀n,c1,c2. 𝐓⦃n,c1 + c2⦄ → 𝐓⦃1,c2⦄ → - ∃∃m. 𝐓⦃m,c1⦄ & n = ↑m. + ∀n,c1,c2. 𝐓❪n,c1 + c2❫ → 𝐓❪1,c2❫ → + ∃∃m. 𝐓❪m,c1❫ & n = ↑m. #n #c1 #c2 #H #H2 destruct elim (ist_inv_plus … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct /2 width=3 by ex2_intro/ qed-. -lemma ist_inv_plus_10_dx: ∀n,c. 𝐓⦃n,c+𝟙𝟘⦄ → ⊥. +lemma ist_inv_plus_10_dx: ∀n,c. 𝐓❪n,c+𝟙𝟘❫ → ⊥. #n #c #H elim (ist_inv_plus … H) -H #n1 #n2 #_ #H #_ /2 width=2 by ist_inv_10/ diff --git a/matita/matita/contribs/lambdadelta/ground_2/steps/rtc_ist_shift.ma b/matita/matita/contribs/lambdadelta/ground_2/steps/rtc_ist_shift.ma index 99ad5a092..66af3f4a5 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/steps/rtc_ist_shift.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/steps/rtc_ist_shift.ma @@ -19,13 +19,13 @@ include "ground_2/steps/rtc_ist.ma". (* Properties with test for t-transition counter ****************************) -lemma ist_zero_shift: ∀c. 𝐓⦃0,c⦄ → 𝐓⦃0,↕*c⦄. +lemma ist_zero_shift: ∀c. 𝐓❪0,c❫ → 𝐓❪0,↕*c❫. #c #H destruct // qed. (* Inversion properties with test for t-transition counter ******************) -lemma ist_inv_shift: ∀n,c. 𝐓⦃n,↕*c⦄ → ∧∧ 𝐓⦃0,c⦄ & 0 = n. +lemma ist_inv_shift: ∀n,c. 𝐓❪n,↕*c❫ → ∧∧ 𝐓❪0,c❫ & 0 = n. #n #c #H elim (shift_inv_dx … H) -H #rt0 #rs0 #ti0 #ts0 #H1 #_ #H2 #H3 #H4 destruct elim (max_inv_O3 … H1) -H1 #H11 #H12 destruct @@ -33,6 +33,6 @@ elim (max_inv_O3 … H2) -H2 #H21 #H22 destruct /2 width=1 by conj/ qed-. -lemma ist_inv_zero_shift: ∀c. 𝐓⦃0,↕*c⦄ → 𝐓⦃0,c⦄. +lemma ist_inv_zero_shift: ∀c. 𝐓❪0,↕*c❫ → 𝐓❪0,c❫. #c #H elim (ist_inv_shift … H) -H // qed-. diff --git a/matita/matita/contribs/lambdadelta/ground_2/steps/rtc_max.ma b/matita/matita/contribs/lambdadelta/ground_2/steps/rtc_max.ma index fb8fd9a42..e35ae558a 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/steps/rtc_max.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/steps/rtc_max.ma @@ -61,46 +61,46 @@ qed. (* Properties with test for constrained rt-transition counter ***************) -lemma isrt_max: ∀n1,n2,c1,c2. 𝐑𝐓⦃n1,c1⦄ → 𝐑𝐓⦃n2,c2⦄ → 𝐑𝐓⦃n1∨n2,c1∨c2⦄. +lemma isrt_max: ∀n1,n2,c1,c2. 𝐑𝐓❪n1,c1❫ → 𝐑𝐓❪n2,c2❫ → 𝐑𝐓❪n1∨n2,c1∨c2❫. #n1 #n2 #c1 #c2 * #ri1 #rs1 #H1 * #ri2 #rs2 #H2 destruct /2 width=3 by ex1_2_intro/ qed. -lemma isrt_max_O1: ∀n,c1,c2. 𝐑𝐓⦃0,c1⦄ → 𝐑𝐓⦃n,c2⦄ → 𝐑𝐓⦃n,c1∨c2⦄. +lemma isrt_max_O1: ∀n,c1,c2. 𝐑𝐓❪0,c1❫ → 𝐑𝐓❪n,c2❫ → 𝐑𝐓❪n,c1∨c2❫. /2 width=1 by isrt_max/ qed. -lemma isrt_max_O2: ∀n,c1,c2. 𝐑𝐓⦃n,c1⦄ → 𝐑𝐓⦃0,c2⦄ → 𝐑𝐓⦃n,c1∨c2⦄. +lemma isrt_max_O2: ∀n,c1,c2. 𝐑𝐓❪n,c1❫ → 𝐑𝐓❪0,c2❫ → 𝐑𝐓❪n,c1∨c2❫. #n #c1 #c2 #H1 #H2 >(max_O2 n) /2 width=1 by isrt_max/ qed. -lemma isrt_max_idem1: ∀n,c1,c2. 𝐑𝐓⦃n,c1⦄ → 𝐑𝐓⦃n,c2⦄ → 𝐑𝐓⦃n,c1∨c2⦄. +lemma isrt_max_idem1: ∀n,c1,c2. 𝐑𝐓❪n,c1❫ → 𝐑𝐓❪n,c2❫ → 𝐑𝐓❪n,c1∨c2❫. #n #c1 #c2 #H1 #H2 >(idempotent_max n) /2 width=1 by isrt_max/ qed. (* Inversion properties with test for constrained rt-transition counter *****) -lemma isrt_inv_max: ∀n,c1,c2. 𝐑𝐓⦃n,c1 ∨ c2⦄ → - ∃∃n1,n2. 𝐑𝐓⦃n1,c1⦄ & 𝐑𝐓⦃n2,c2⦄ & (n1 ∨ n2) = n. +lemma isrt_inv_max: ∀n,c1,c2. 𝐑𝐓❪n,c1 ∨ c2❫ → + ∃∃n1,n2. 𝐑𝐓❪n1,c1❫ & 𝐑𝐓❪n2,c2❫ & (n1 ∨ n2) = n. #n #c1 #c2 * #ri #rs #H elim (max_inv_dx … H) -H #ri1 #rs1 #ti1 #ts1 #ri2 #rs2 #ti2 #ts2 #_ #_ #H1 #H2 #H3 #H4 elim (max_inv_O3 … H1) -H1 /3 width=5 by ex3_2_intro, ex1_2_intro/ qed-. -lemma isrt_O_inv_max: ∀c1,c2. 𝐑𝐓⦃0,c1 ∨ c2⦄ → ∧∧ 𝐑𝐓⦃0,c1⦄ & 𝐑𝐓⦃0,c2⦄. +lemma isrt_O_inv_max: ∀c1,c2. 𝐑𝐓❪0,c1 ∨ c2❫ → ∧∧ 𝐑𝐓❪0,c1❫ & 𝐑𝐓❪0,c2❫. #c1 #c2 #H elim (isrt_inv_max … H) -H #n1 #n2 #Hn1 #Hn2 #H elim (max_inv_O3 … H) -H #H1 #H2 destruct /2 width=1 by conj/ qed-. -lemma isrt_inv_max_O_dx: ∀n,c1,c2. 𝐑𝐓⦃n,c1 ∨ c2⦄ → 𝐑𝐓⦃0,c2⦄ → 𝐑𝐓⦃n,c1⦄. +lemma isrt_inv_max_O_dx: ∀n,c1,c2. 𝐑𝐓❪n,c1 ∨ c2❫ → 𝐑𝐓❪0,c2❫ → 𝐑𝐓❪n,c1❫. #n #c1 #c2 #H #H2 elim (isrt_inv_max … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct lapply (isrt_inj … Hn2 H2) -c2 #H destruct // qed-. -lemma isrt_inv_max_eq_t: ∀n,c1,c2. 𝐑𝐓⦃n,c1 ∨ c2⦄ → eq_t c1 c2 → - ∧∧ 𝐑𝐓⦃n,c1⦄ & 𝐑𝐓⦃n,c2⦄. +lemma isrt_inv_max_eq_t: ∀n,c1,c2. 𝐑𝐓❪n,c1 ∨ c2❫ → eq_t c1 c2 → + ∧∧ 𝐑𝐓❪n,c1❫ & 𝐑𝐓❪n,c2❫. #n #c1 #c2 #H #Hc12 elim (isrt_inv_max … H) -H #n1 #n2 #Hc1 #Hc2 #H destruct lapply (isrt_eq_t_trans … Hc1 … Hc12) -Hc12 #H @@ -117,8 +117,8 @@ qed. (* Inversion lemmaswith shift ***********************************************) -lemma isrt_inv_max_shift_sn: ∀n,c1,c2. 𝐑𝐓⦃n,↕*c1 ∨ c2⦄ → - ∧∧ 𝐑𝐓⦃0,c1⦄ & 𝐑𝐓⦃n,c2⦄. +lemma isrt_inv_max_shift_sn: ∀n,c1,c2. 𝐑𝐓❪n,↕*c1 ∨ c2❫ → + ∧∧ 𝐑𝐓❪0,c1❫ & 𝐑𝐓❪n,c2❫. #n #c1 #c2 #H elim (isrt_inv_max … H) -H #n1 #n2 #Hc1 #Hc2 #H destruct elim (isrt_inv_shift … Hc1) -Hc1 #Hc1 * -n1 diff --git a/matita/matita/contribs/lambdadelta/ground_2/steps/rtc_plus.ma b/matita/matita/contribs/lambdadelta/ground_2/steps/rtc_plus.ma index 49d25453c..6993f318d 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/steps/rtc_plus.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/steps/rtc_plus.ma @@ -58,38 +58,38 @@ qed. (* Properties with test for constrained rt-transition counter ***************) -lemma isrt_plus: ∀n1,n2,c1,c2. 𝐑𝐓⦃n1,c1⦄ → 𝐑𝐓⦃n2,c2⦄ → 𝐑𝐓⦃n1+n2,c1+c2⦄. +lemma isrt_plus: ∀n1,n2,c1,c2. 𝐑𝐓❪n1,c1❫ → 𝐑𝐓❪n2,c2❫ → 𝐑𝐓❪n1+n2,c1+c2❫. #n1 #n2 #c1 #c2 * #ri1 #rs1 #H1 * #ri2 #rs2 #H2 destruct /2 width=3 by ex1_2_intro/ qed. -lemma isrt_plus_O1: ∀n,c1,c2. 𝐑𝐓⦃0,c1⦄ → 𝐑𝐓⦃n,c2⦄ → 𝐑𝐓⦃n,c1+c2⦄. +lemma isrt_plus_O1: ∀n,c1,c2. 𝐑𝐓❪0,c1❫ → 𝐑𝐓❪n,c2❫ → 𝐑𝐓❪n,c1+c2❫. /2 width=1 by isrt_plus/ qed. -lemma isrt_plus_O2: ∀n,c1,c2. 𝐑𝐓⦃n,c1⦄ → 𝐑𝐓⦃0,c2⦄ → 𝐑𝐓⦃n,c1+c2⦄. +lemma isrt_plus_O2: ∀n,c1,c2. 𝐑𝐓❪n,c1❫ → 𝐑𝐓❪0,c2❫ → 𝐑𝐓❪n,c1+c2❫. #n #c1 #c2 #H1 #H2 >(plus_n_O n) /2 width=1 by isrt_plus/ qed. -lemma isrt_succ: ∀n,c. 𝐑𝐓⦃n,c⦄ → 𝐑𝐓⦃↑n,c+𝟘𝟙⦄. +lemma isrt_succ: ∀n,c. 𝐑𝐓❪n,c❫ → 𝐑𝐓❪↑n,c+𝟘𝟙❫. /2 width=1 by isrt_plus/ qed. (* Inversion properties with test for constrained rt-transition counter *****) -lemma isrt_inv_plus: ∀n,c1,c2. 𝐑𝐓⦃n,c1 + c2⦄ → - ∃∃n1,n2. 𝐑𝐓⦃n1,c1⦄ & 𝐑𝐓⦃n2,c2⦄ & n1 + n2 = n. +lemma isrt_inv_plus: ∀n,c1,c2. 𝐑𝐓❪n,c1 + c2❫ → + ∃∃n1,n2. 𝐑𝐓❪n1,c1❫ & 𝐑𝐓❪n2,c2❫ & n1 + n2 = n. #n #c1 #c2 * #ri #rs #H elim (plus_inv_dx … H) -H #ri1 #rs1 #ti1 #ts1 #ri2 #rs2 #ti2 #ts2 #_ #_ #H1 #H2 #H3 #H4 elim (plus_inv_O3 … H1) -H1 /3 width=5 by ex3_2_intro, ex1_2_intro/ qed-. -lemma isrt_inv_plus_O_dx: ∀n,c1,c2. 𝐑𝐓⦃n,c1 + c2⦄ → 𝐑𝐓⦃0,c2⦄ → 𝐑𝐓⦃n,c1⦄. +lemma isrt_inv_plus_O_dx: ∀n,c1,c2. 𝐑𝐓❪n,c1 + c2❫ → 𝐑𝐓❪0,c2❫ → 𝐑𝐓❪n,c1❫. #n #c1 #c2 #H #H2 elim (isrt_inv_plus … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct lapply (isrt_inj … Hn2 H2) -c2 #H destruct // qed-. -lemma isrt_inv_plus_SO_dx: ∀n,c1,c2. 𝐑𝐓⦃n,c1 + c2⦄ → 𝐑𝐓⦃1,c2⦄ → - ∃∃m. 𝐑𝐓⦃m,c1⦄ & n = ↑m. +lemma isrt_inv_plus_SO_dx: ∀n,c1,c2. 𝐑𝐓❪n,c1 + c2❫ → 𝐑𝐓❪1,c2❫ → + ∃∃m. 𝐑𝐓❪m,c1❫ & n = ↑m. #n #c1 #c2 #H #H2 elim (isrt_inv_plus … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct lapply (isrt_inj … Hn2 H2) -c2 #H destruct diff --git a/matita/matita/contribs/lambdadelta/ground_2/steps/rtc_shift.ma b/matita/matita/contribs/lambdadelta/ground_2/steps/rtc_shift.ma index 2907ec46e..9601be038 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/steps/rtc_shift.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/steps/rtc_shift.ma @@ -44,18 +44,18 @@ qed-. (* Properties with test for costrained rt-transition counter ****************) -lemma isr_shift: ∀c. 𝐑𝐓⦃0,c⦄ → 𝐑𝐓⦃0,↕*c⦄. +lemma isr_shift: ∀c. 𝐑𝐓❪0,c❫ → 𝐑𝐓❪0,↕*c❫. #c * #ri #rs #H destruct /2 width=3 by ex1_2_intro/ qed. (* Inversion properties with test for costrained rt-counter *****************) -lemma isrt_inv_shift: ∀n,c. 𝐑𝐓⦃n,↕*c⦄ → 𝐑𝐓⦃0,c⦄ ∧ 0 = n. +lemma isrt_inv_shift: ∀n,c. 𝐑𝐓❪n,↕*c❫ → 𝐑𝐓❪0,c❫ ∧ 0 = n. #n #c * #ri #rs #H elim (shift_inv_dx … H) -H #rt0 #rs0 #ti0 #ts0 #_ #_ #H1 #H2 #H3 elim (max_inv_O3 … H1) -H1 /3 width=3 by ex1_2_intro, conj/ qed-. -lemma isr_inv_shift: ∀c. 𝐑𝐓⦃0,↕*c⦄ → 𝐑𝐓⦃0,c⦄. +lemma isr_inv_shift: ∀c. 𝐑𝐓❪0,↕*c❫ → 𝐑𝐓❪0,c❫. #c #H elim (isrt_inv_shift … H) -H // qed-. diff --git a/matita/matita/contribs/lambdadelta/ground_2/web/ground_2_src.tbl b/matita/matita/contribs/lambdadelta/ground_2/web/ground_2_src.tbl index 0fcbd1155..15bd8bfc2 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/web/ground_2_src.tbl +++ b/matita/matita/contribs/lambdadelta/ground_2/web/ground_2_src.tbl @@ -12,8 +12,8 @@ table { class "water" [ { "generic rt-transition counter" * } { [ { "" * } { - [ "rtc_ist ( 𝐓⦃?,?⦄ )" "rtc_ist_shift" "rtc_ist_plus" "rtc_ist_max" * ] - [ "rtc ( 〈?,?,?,?〉 ) ( 𝟘𝟘 ) ( 𝟙𝟘 ) ( 𝟘𝟙 )" "rtc_isrc ( 𝐑𝐓⦃?,?⦄ )" "rtc_shift ( ↕*? )" "rtc_max ( ? ∨ ? )" "rtc_plus ( ? + ? )" * ] + [ "rtc_ist ( 𝐓❪?,?❫ )" "rtc_ist_shift" "rtc_ist_plus" "rtc_ist_max" * ] + [ "rtc ( 〈?,?,?,?〉 ) ( 𝟘𝟘 ) ( 𝟙𝟘 ) ( 𝟘𝟙 )" "rtc_isrc ( 𝐑𝐓❪?,?❫ )" "rtc_shift ( ↕*? )" "rtc_max ( ? ∨ ? )" "rtc_plus ( ? + ? )" * ] } ] } @@ -22,24 +22,24 @@ table { [ { "multiple relocation" * } { [ { "" * } { [ "rtmap" "rtmap_eq ( ? ≡ ? )" "rtmap_pushs ( ⫯*[?]? )" "rtmap_nexts ( ↑*[?]? )" - "rtmap_tl ( ⫱? )" "rtmap_tls ( ⫱*[?]? )" "rtmap_isid ( 𝐈⦃?⦄ )" "rtmap_id" "rtmap_isdiv ( 𝛀⦃?⦄ )" - "rtmap_fcla ( 𝐂⦃?⦄ ≘ ? )" "rtmap_isfin ( 𝐅⦃?⦄ )" "rtmap_isuni ( 𝐔⦃?⦄ )" "rtmap_uni ( 𝐔❴?❵ )" + "rtmap_tl ( ⫱? )" "rtmap_tls ( ⫱*[?]? )" "rtmap_isid ( 𝐈❪?❫ )" "rtmap_id" "rtmap_isdiv ( 𝛀❪?❫ )" + "rtmap_fcla ( 𝐂❪?❫ ≘ ? )" "rtmap_isfin ( 𝐅❪?❫ )" "rtmap_isuni ( 𝐔❪?❫ )" "rtmap_uni ( 𝐔❨?❩ )" "rtmap_sle ( ? ⊆ ? )" "rtmap_sdj ( ? ∥ ? )" "rtmap_sand ( ? ⋒ ? ≘ ? )" "rtmap_sor ( ? ⋓ ? ≘ ? )" - "rtmap_at ( @⦃?,?⦄ ≘ ? )" "rtmap_istot ( 𝐓⦃?⦄ )" "rtmap_after ( ? ⊚ ? ≘ ? )" "rtmap_coafter ( ? ~⊚ ? ≘ ? )" - "rtmap_basic ( 𝐁❴?,?❵ )" "rtmap_basic_after" + "rtmap_at ( @❪?,?❫ ≘ ? )" "rtmap_istot ( 𝐓❪?❫ )" "rtmap_after ( ? ⊚ ? ≘ ? )" "rtmap_coafter ( ? ~⊚ ? ≘ ? )" + "rtmap_basic ( 𝐁❨?,?❩ )" "rtmap_basic_after" * ] [ "nstream ( ⫯? ) ( ↑? )" "nstream_eq" "" "" "" "" "nstream_isid" "nstream_id ( 𝐈𝐝 )" "" "" "" "" "" "" "" "" "nstream_sor" - "" "nstream_istot ( ?@❴?❵ )" "nstream_after ( ? ∘ ? )" "nstream_coafter ( ? ~∘ ? )" + "" "nstream_istot ( ?@❨?❩ )" "nstream_after ( ? ∘ ? )" "nstream_coafter ( ? ~∘ ? )" "nstream_basic" "" * ] (* - [ "trace ( ∥?∥ )" "trace_at ( @⦃?,?⦄ ≘ ? )" "trace_after ( ? ⊚ ? ≘ ? )" "trace_isid ( 𝐈⦃?⦄ )" "trace_isun ( 𝐔⦃?⦄ )" + [ "trace ( ∥?∥ )" "trace_at ( @❪?,?❫ ≘ ? )" "trace_after ( ? ⊚ ? ≘ ? )" "trace_isid ( 𝐈❪?❫ )" "trace_isun ( 𝐔❪?❫ )" "trace_sle ( ? ⊆ ? )" "trace_sor ( ? ⋓ ? ≘ ? )" "trace_snot ( ∁ ? )" * ] *) - [ "mr2 ( ◊ ) ( {?,?};? )" "mr2_at ( @⦃?,?⦄ ≘ ? )" "mr2_plus ( ? + ? )" "mr2_minus ( ? ▭ ? ≘ ? )" * ] + [ "mr2 ( ◊ ) ( ❨?,?❩;? )" "mr2_at ( @❪?,?❫ ≘ ? )" "mr2_plus ( ? + ? )" "mr2_minus ( ? ▭ ? ≘ ? )" * ] } ] } diff --git a/matita/matita/contribs/lambdadelta/static_2/i_static/rexs.ma b/matita/matita/contribs/lambdadelta/static_2/i_static/rexs.ma index 58b26cd76..6e6bb06aa 100644 --- a/matita/matita/contribs/lambdadelta/static_2/i_static/rexs.ma +++ b/matita/matita/contribs/lambdadelta/static_2/i_static/rexs.ma @@ -35,34 +35,34 @@ lemma rexs_step_sn: ∀R,L1,L,T. L1 ⪤[R,T] L → #R #L1 #L2 #T #HL1 #L2 @TC_strap @HL1 (**) (* auto fails *) qed-. -lemma rexs_atom: ∀R,I. ⋆ ⪤*[R,⓪{I}] ⋆. +lemma rexs_atom: ∀R,I. ⋆ ⪤*[R,⓪[I]] ⋆. /2 width=1 by inj/ qed. lemma rexs_sort: ∀R,I,L1,L2,V1,V2,s. - L1 ⪤*[R,⋆s] L2 → L1.ⓑ{I}V1 ⪤*[R,⋆s] L2.ⓑ{I}V2. + L1 ⪤*[R,⋆s] L2 → L1.ⓑ[I]V1 ⪤*[R,⋆s] L2.ⓑ[I]V2. #R #I #L1 #L2 #V1 #V2 #s #H elim H -L2 /3 width=4 by rex_sort, rexs_step_dx, inj/ qed. lemma rexs_pair: ∀R. (∀L. reflexive … (R L)) → ∀I,L1,L2,V. L1 ⪤*[R,V] L2 → - L1.ⓑ{I}V ⪤*[R,#0] L2.ⓑ{I}V. + L1.ⓑ[I]V ⪤*[R,#0] L2.ⓑ[I]V. #R #HR #I #L1 #L2 #V #H elim H -L2 /3 width=5 by rex_pair, rexs_step_dx, inj/ qed. -lemma rexs_unit: ∀R,f,I,L1,L2. 𝐈⦃f⦄ → L1 ⪤[cext2 R,cfull,f] L2 → - L1.ⓤ{I} ⪤*[R,#0] L2.ⓤ{I}. +lemma rexs_unit: ∀R,f,I,L1,L2. 𝐈❪f❫ → L1 ⪤[cext2 R,cfull,f] L2 → + L1.ⓤ[I] ⪤*[R,#0] L2.ⓤ[I]. /3 width=3 by rex_unit, inj/ qed. lemma rexs_lref: ∀R,I,L1,L2,V1,V2,i. - L1 ⪤*[R,#i] L2 → L1.ⓑ{I}V1 ⪤*[R,#↑i] L2.ⓑ{I}V2. + L1 ⪤*[R,#i] L2 → L1.ⓑ[I]V1 ⪤*[R,#↑i] L2.ⓑ[I]V2. #R #I #L1 #L2 #V1 #V2 #i #H elim H -L2 /3 width=4 by rex_lref, rexs_step_dx, inj/ qed. lemma rexs_gref: ∀R,I,L1,L2,V1,V2,l. - L1 ⪤*[R,§l] L2 → L1.ⓑ{I}V1 ⪤*[R,§l] L2.ⓑ{I}V2. + L1 ⪤*[R,§l] L2 → L1.ⓑ[I]V1 ⪤*[R,§l] L2.ⓑ[I]V2. #R #I #L1 #L2 #V1 #V2 #l #H elim H -L2 /3 width=4 by rex_gref, rexs_step_dx, inj/ qed. @@ -76,12 +76,12 @@ qed-. (* Basic inversion lemmas ***************************************************) (* Basic_2A1: uses: TC_lpx_sn_inv_atom1 *) -lemma rexs_inv_atom_sn: ∀R,I,Y2. ⋆ ⪤*[R,⓪{I}] Y2 → Y2 = ⋆. +lemma rexs_inv_atom_sn: ∀R,I,Y2. ⋆ ⪤*[R,⓪[I]] Y2 → Y2 = ⋆. #R #I #Y2 #H elim H -Y2 /3 width=3 by inj, rex_inv_atom_sn/ qed-. (* Basic_2A1: uses: TC_lpx_sn_inv_atom2 *) -lemma rexs_inv_atom_dx: ∀R,I,Y1. Y1 ⪤*[R,⓪{I}] ⋆ → Y1 = ⋆. +lemma rexs_inv_atom_dx: ∀R,I,Y1. Y1 ⪤*[R,⓪[I]] ⋆ → Y1 = ⋆. #R #I #Y1 #H @(TC_ind_dx ??????? H) -Y1 /3 width=3 by inj, rex_inv_atom_dx/ qed-. @@ -89,7 +89,7 @@ qed-. lemma rexs_inv_sort: ∀R,Y1,Y2,s. Y1 ⪤*[R,⋆s] Y2 → ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ | ∃∃I1,I2,L1,L2. L1 ⪤*[R,⋆s] L2 & - Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}. + Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2]. #R #Y1 #Y2 #s #H elim H -Y2 [ #Y2 #H elim (rex_inv_sort … H) -H * /4 width=8 by ex3_4_intro, inj, or_introl, or_intror, conj/ @@ -107,7 +107,7 @@ qed-. lemma rexs_inv_gref: ∀R,Y1,Y2,l. Y1 ⪤*[R,§l] Y2 → ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ | ∃∃I1,I2,L1,L2. L1 ⪤*[R,§l] L2 & - Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}. + Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2]. #R #Y1 #Y2 #l #H elim H -Y2 [ #Y2 #H elim (rex_inv_gref … H) -H * /4 width=8 by ex3_4_intro, inj, or_introl, or_intror, conj/ @@ -123,15 +123,15 @@ lemma rexs_inv_gref: ∀R,Y1,Y2,l. Y1 ⪤*[R,§l] Y2 → qed-. lemma rexs_inv_bind: ∀R. (∀L. reflexive … (R L)) → - ∀p,I,L1,L2,V,T. L1 ⪤*[R,ⓑ{p,I}V.T] L2 → - ∧∧ L1 ⪤*[R,V] L2 & L1.ⓑ{I}V ⪤*[R,T] L2.ⓑ{I}V. + ∀p,I,L1,L2,V,T. L1 ⪤*[R,ⓑ[p,I]V.T] L2 → + ∧∧ L1 ⪤*[R,V] L2 & L1.ⓑ[I]V ⪤*[R,T] L2.ⓑ[I]V. #R #HR #p #I #L1 #L2 #V #T #H elim H -L2 [ #L2 #H elim (rex_inv_bind … V ? H) -H /3 width=1 by inj, conj/ | #L #L2 #_ #H * elim (rex_inv_bind … V ? H) -H /3 width=3 by rexs_step_dx, conj/ ] qed-. -lemma rexs_inv_flat: ∀R,I,L1,L2,V,T. L1 ⪤*[R,ⓕ{I}V.T] L2 → +lemma rexs_inv_flat: ∀R,I,L1,L2,V,T. L1 ⪤*[R,ⓕ[I]V.T] L2 → ∧∧ L1 ⪤*[R,V] L2 & L1 ⪤*[R,T] L2. #R #I #L1 #L2 #V #T #H elim H -L2 [ #L2 #H elim (rex_inv_flat … H) -H /3 width=1 by inj, conj/ @@ -141,32 +141,32 @@ qed-. (* Advanced inversion lemmas ************************************************) -lemma rexs_inv_sort_bind_sn: ∀R,I1,Y2,L1,s. L1.ⓘ{I1} ⪤*[R,⋆s] Y2 → - ∃∃I2,L2. L1 ⪤*[R,⋆s] L2 & Y2 = L2.ⓘ{I2}. +lemma rexs_inv_sort_bind_sn: ∀R,I1,Y2,L1,s. L1.ⓘ[I1] ⪤*[R,⋆s] Y2 → + ∃∃I2,L2. L1 ⪤*[R,⋆s] L2 & Y2 = L2.ⓘ[I2]. #R #I1 #Y2 #L1 #s #H elim (rexs_inv_sort … H) -H * [ #H destruct | #Z #I2 #Y1 #L2 #Hs #H1 #H2 destruct /2 width=4 by ex2_2_intro/ ] qed-. -lemma rexs_inv_sort_bind_dx: ∀R,I2,Y1,L2,s. Y1 ⪤*[R,⋆s] L2.ⓘ{I2} → - ∃∃I1,L1. L1 ⪤*[R,⋆s] L2 & Y1 = L1.ⓘ{I1}. +lemma rexs_inv_sort_bind_dx: ∀R,I2,Y1,L2,s. Y1 ⪤*[R,⋆s] L2.ⓘ[I2] → + ∃∃I1,L1. L1 ⪤*[R,⋆s] L2 & Y1 = L1.ⓘ[I1]. #R #I2 #Y1 #L2 #s #H elim (rexs_inv_sort … H) -H * [ #_ #H destruct | #I1 #Z #L1 #Y2 #Hs #H1 #H2 destruct /2 width=4 by ex2_2_intro/ ] qed-. -lemma rexs_inv_gref_bind_sn: ∀R,I1,Y2,L1,l. L1.ⓘ{I1} ⪤*[R,§l] Y2 → - ∃∃I2,L2. L1 ⪤*[R,§l] L2 & Y2 = L2.ⓘ{I2}. +lemma rexs_inv_gref_bind_sn: ∀R,I1,Y2,L1,l. L1.ⓘ[I1] ⪤*[R,§l] Y2 → + ∃∃I2,L2. L1 ⪤*[R,§l] L2 & Y2 = L2.ⓘ[I2]. #R #I1 #Y2 #L1 #l #H elim (rexs_inv_gref … H) -H * [ #H destruct | #Z #I2 #Y1 #L2 #Hl #H1 #H2 destruct /2 width=4 by ex2_2_intro/ ] qed-. -lemma rexs_inv_gref_bind_dx: ∀R,I2,Y1,L2,l. Y1 ⪤*[R,§l] L2.ⓘ{I2} → - ∃∃I1,L1. L1 ⪤*[R,§l] L2 & Y1 = L1.ⓘ{I1}. +lemma rexs_inv_gref_bind_dx: ∀R,I2,Y1,L2,l. Y1 ⪤*[R,§l] L2.ⓘ[I2] → + ∃∃I1,L1. L1 ⪤*[R,§l] L2 & Y1 = L1.ⓘ[I1]. #R #I2 #Y1 #L2 #l #H elim (rexs_inv_gref … H) -H * [ #_ #H destruct | #I1 #Z #L1 #Y2 #Hl #H1 #H2 destruct /2 width=4 by ex2_2_intro/ @@ -175,18 +175,18 @@ qed-. (* Basic forward lemmas *****************************************************) -lemma rexs_fwd_pair_sn: ∀R,I,L1,L2,V,T. L1 ⪤*[R,②{I}V.T] L2 → L1 ⪤*[R,V] L2. +lemma rexs_fwd_pair_sn: ∀R,I,L1,L2,V,T. L1 ⪤*[R,②[I]V.T] L2 → L1 ⪤*[R,V] L2. #R #I #L1 #L2 #V #T #H elim H -L2 /3 width=5 by rex_fwd_pair_sn, rexs_step_dx, inj/ qed-. lemma rexs_fwd_bind_dx: ∀R. (∀L. reflexive … (R L)) → - ∀p,I,L1,L2,V,T. L1 ⪤*[R,ⓑ{p,I}V.T] L2 → - L1.ⓑ{I}V ⪤*[R,T] L2.ⓑ{I}V. + ∀p,I,L1,L2,V,T. L1 ⪤*[R,ⓑ[p,I]V.T] L2 → + L1.ⓑ[I]V ⪤*[R,T] L2.ⓑ[I]V. #R #HR #p #I #L1 #L2 #V #T #H elim (rexs_inv_bind … H) -H // qed-. -lemma rexs_fwd_flat_dx: ∀R,I,L1,L2,V,T. L1 ⪤*[R,ⓕ{I}V.T] L2 → L1 ⪤*[R,T] L2. +lemma rexs_fwd_flat_dx: ∀R,I,L1,L2,V,T. L1 ⪤*[R,ⓕ[I]V.T] L2 → L1 ⪤*[R,T] L2. #R #I #L1 #L2 #V #T #H elim (rexs_inv_flat … H) -H // qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/i_static/rexs_drops.ma b/matita/matita/contribs/lambdadelta/static_2/i_static/rexs_drops.ma index e146211fd..7ff2b3bad 100644 --- a/matita/matita/contribs/lambdadelta/static_2/i_static/rexs_drops.ma +++ b/matita/matita/contribs/lambdadelta/static_2/i_static/rexs_drops.ma @@ -24,13 +24,13 @@ definition tc_f_dedropable_sn: predicate (relation3 lenv term term) ≝ ∃∃L2. L1 ⪤*[R,U] L2 & ⇩*[b,f] L2 ≘ K2 & L1 ≡[f] L2. definition tc_f_dropable_sn: predicate (relation3 lenv term term) ≝ - λR. ∀b,f,L1,K1. ⇩*[b,f] L1 ≘ K1 → 𝐔⦃f⦄ → + λR. ∀b,f,L1,K1. ⇩*[b,f] L1 ≘ K1 → 𝐔❪f❫ → ∀L2,U. L1 ⪤*[R,U] L2 → ∀T. ⇧*[f] T ≘ U → ∃∃K2. K1 ⪤*[R,T] K2 & ⇩*[b,f] L2 ≘ K2. definition tc_f_dropable_dx: predicate (relation3 lenv term term) ≝ λR. ∀L1,L2,U. L1 ⪤*[R,U] L2 → - ∀b,f,K2. ⇩*[b,f] L2 ≘ K2 → 𝐔⦃f⦄ → ∀T. ⇧*[f] T ≘ U → + ∀b,f,K2. ⇩*[b,f] L2 ≘ K2 → 𝐔❪f❫ → ∀T. ⇧*[f] T ≘ U → ∃∃K1. ⇩*[b,f] L1 ≘ K1 & K1 ⪤*[R,T] K2. (* Properties with generic slicing for local environments *******************) diff --git a/matita/matita/contribs/lambdadelta/static_2/i_static/rexs_fqup.ma b/matita/matita/contribs/lambdadelta/static_2/i_static/rexs_fqup.ma index fbb41879c..705338db3 100644 --- a/matita/matita/contribs/lambdadelta/static_2/i_static/rexs_fqup.ma +++ b/matita/matita/contribs/lambdadelta/static_2/i_static/rexs_fqup.ma @@ -25,12 +25,12 @@ lemma rexs_refl: ∀R. c_reflexive … R → (* Basic_2A1: uses: TC_lpx_sn_pair TC_lpx_sn_pair_refl *) lemma rexs_pair_refl: ∀R. c_reflexive … R → - ∀L,V1,V2. CTC … R L V1 V2 → ∀I,T. L.ⓑ{I}V1 ⪤*[R,T] L.ⓑ{I}V2. + ∀L,V1,V2. CTC … R L V1 V2 → ∀I,T. L.ⓑ[I]V1 ⪤*[R,T] L.ⓑ[I]V2. #R #HR #L #V1 #V2 #H elim H -V2 /3 width=3 by rexs_step_dx, rex_pair_refl, inj/ qed. -lemma rexs_tc: ∀R,L1,L2,T,f. 𝐈⦃f⦄ → TC … (sex cfull (cext2 R) f) L1 L2 → +lemma rexs_tc: ∀R,L1,L2,T,f. 𝐈❪f❫ → TC … (sex cfull (cext2 R) f) L1 L2 → L1 ⪤*[R,T] L2. #R #L1 #L2 #T #f #Hf #H elim H -L2 [ elim (frees_total L1 T) | #L elim (frees_total L T) ] @@ -58,7 +58,7 @@ qed-. (* Advanced inversion lemmas ************************************************) lemma rexs_inv_bind_void: ∀R. c_reflexive … R → - ∀p,I,L1,L2,V,T. L1 ⪤*[R,ⓑ{p,I}V.T] L2 → + ∀p,I,L1,L2,V,T. L1 ⪤*[R,ⓑ[p,I]V.T] L2 → ∧∧ L1 ⪤*[R,V] L2 & L1.ⓧ ⪤*[R,T] L2.ⓧ. #R #HR #p #I #L1 #L2 #V #T #H @(rexs_ind_sn … HR … H) -L2 [ /3 width=1 by rexs_refl, conj/ @@ -69,7 +69,7 @@ qed-. (* Advanced forward lemmas **************************************************) lemma rexs_fwd_bind_dx_void: ∀R. c_reflexive … R → - ∀p,I,L1,L2,V,T. L1 ⪤*[R,ⓑ{p,I}V.T] L2 → + ∀p,I,L1,L2,V,T. L1 ⪤*[R,ⓑ[p,I]V.T] L2 → L1.ⓧ ⪤*[R,T] L2.ⓧ. #R #HR #p #I #L1 #L2 #V #T #H elim (rexs_inv_bind_void … H) -H // qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/functions/dxbind1_2.ma b/matita/matita/contribs/lambdadelta/static_2/notation/functions/dxbind1_2.ma index a427352dd..8d306b08c 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/functions/dxbind1_2.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/functions/dxbind1_2.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( L. ⓤ { break term 46 I } )" +notation "hvbox( L. ⓤ[ break term 46 I ] )" non associative with precedence 47 for @{ 'DxBind1 $L $I }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/functions/dxbind2_3.ma b/matita/matita/contribs/lambdadelta/static_2/notation/functions/dxbind2_3.ma index 3b9e43699..8ada4b0fa 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/functions/dxbind2_3.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/functions/dxbind2_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( L. ⓑ { break term 46 I } break term 49 T1 )" +notation "hvbox( L. ⓑ[ break term 46 I ] break term 49 T1 )" non associative with precedence 48 for @{ 'DxBind2 $L $I $T1 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/functions/dxitem_2.ma b/matita/matita/contribs/lambdadelta/static_2/notation/functions/dxitem_2.ma index c2e0b42dd..c58144410 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/functions/dxitem_2.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/functions/dxitem_2.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( L. ⓘ { break term 46 I } )" +notation "hvbox( L. ⓘ[ break term 46 I ] )" non associative with precedence 46 for @{'DxItem $L $I }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/functions/item0_1.ma b/matita/matita/contribs/lambdadelta/static_2/notation/functions/item0_1.ma index 2c9e41aef..9f21e08f2 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/functions/item0_1.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/functions/item0_1.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⓪ { term 46 I } )" +notation "hvbox( ⓪[ term 46 I ] )" non associative with precedence 55 for @{ 'Item0 $I }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snabbr_3.ma b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snabbr_3.ma index 192f6cd70..a48051333 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snabbr_3.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snabbr_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⓓ { term 46 p } break term 55 T1. break term 55 T2 )" +notation "hvbox( ⓓ[ term 46 p ] break term 55 T1. break term 55 T2 )" non associative with precedence 55 for @{ 'SnAbbr $p $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snabbrneg_2.ma b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snabbrneg_2.ma index ecd1a7c63..0af3600cb 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snabbrneg_2.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snabbrneg_2.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( - ⓓ term 55 T1. break term 55 T2 )" +notation "hvbox( -ⓓ term 55 T1. break term 55 T2 )" non associative with precedence 55 for @{ 'SnAbbrNeg $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snabbrpos_2.ma b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snabbrpos_2.ma index 84aa4d213..2912cb462 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snabbrpos_2.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snabbrpos_2.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( + ⓓ term 55 T1. break term 55 T2 )" +notation "hvbox( +ⓓ term 55 T1. break term 55 T2 )" non associative with precedence 55 for @{ 'SnAbbrPos $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snabst_3.ma b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snabst_3.ma index 2c9253d98..de0b3b039 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snabst_3.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snabst_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⓛ { term 46 p } break term 55 T1. break term 55 T2 )" +notation "hvbox( ⓛ[ term 46 p ] break term 55 T1. break term 55 T2 )" non associative with precedence 55 for @{ 'SnAbst $p $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snabstneg_2.ma b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snabstneg_2.ma index e4dc84a10..aec832f0a 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snabstneg_2.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snabstneg_2.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( - ⓛ term 55 T1. break term 55 T2 )" +notation "hvbox( -ⓛ term 55 T1. break term 55 T2 )" non associative with precedence 55 for @{ 'SnAbstNeg $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snabstpos_2.ma b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snabstpos_2.ma index a54fadce2..6e421f089 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snabstpos_2.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snabstpos_2.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( + ⓛ term 55 T1. break term 55 T2 )" +notation "hvbox( +ⓛ term 55 T1. break term 55 T2 )" non associative with precedence 55 for @{ 'SnAbstPos $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snbind1_2.ma b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snbind1_2.ma index 8cac6eac6..896df598b 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snbind1_2.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snbind1_2.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⓤ { term 46 I }. break term 55 L )" +notation "hvbox( ⓤ[ term 46 I ]. break term 55 L )" non associative with precedence 55 for @{ 'SnBind1 $I $L }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snbind2_3.ma b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snbind2_3.ma index 7e73c0fb5..5b831ce6b 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snbind2_3.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snbind2_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⓑ { term 46 I } break term 55 T. break term 55 L )" +notation "hvbox( ⓑ[ term 46 I ] break term 55 T. break term 55 L )" non associative with precedence 55 for @{ 'SnBind2 $I $T $L }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snbind2_4.ma b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snbind2_4.ma index b36457861..84f3cf010 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snbind2_4.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snbind2_4.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⓑ { term 46 p, break term 46 I } break term 55 T1. break term 55 T )" +notation "hvbox( ⓑ[ term 46 p, break term 46 I ] break term 55 T1. break term 55 T )" non associative with precedence 55 for @{ 'SnBind2 $p $I $T1 $T }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snbind2neg_3.ma b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snbind2neg_3.ma index c75fe170d..526971ace 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snbind2neg_3.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snbind2neg_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( - ⓑ { term 46 I } break term 55 T1. break term 55 T )" +notation "hvbox( -ⓑ[ term 46 I ] break term 55 T1. break term 55 T )" non associative with precedence 55 for @{ 'SnBind2Neg $I $T1 $T }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snbind2pos_3.ma b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snbind2pos_3.ma index ca7a9d921..ffa7e9399 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snbind2pos_3.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snbind2pos_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( + ⓑ { term 46 I } break term 55 T1. break term 55 T )" +notation "hvbox( +ⓑ[ term 46 I ] break term 55 T1. break term 55 T )" non associative with precedence 55 for @{ 'SnBind2Pos $I $T1 $T }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snflat2_3.ma b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snflat2_3.ma index b0fdc8987..e8b5d400c 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snflat2_3.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snflat2_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⓕ { term 46 I } break term 55 T1. break term 55 T )" +notation "hvbox( ⓕ[ term 46 I ] break term 55 T1. break term 55 T )" non associative with precedence 55 for @{ 'SnFlat2 $I $T1 $T }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snitem2_3.ma b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snitem2_3.ma index d455b5103..c89f2523c 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snitem2_3.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snitem2_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ② { term 46 I } break term 55 T1. break term 55 T )" +notation "hvbox( ②[ term 46 I ] break term 55 T1. break term 55 T )" non associative with precedence 55 for @{ 'SnItem2 $I $T1 $T }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snitem_2.ma b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snitem_2.ma index 7046d2247..69b1c3559 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/functions/snitem_2.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/functions/snitem_2.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⓘ { term 46 I }. break term 55 L )" +notation "hvbox( ⓘ[ term 46 I ]. break term 55 L )" non associative with precedence 55 for @{ 'SnItem $I $L }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/functions/weight_1.ma b/matita/matita/contribs/lambdadelta/static_2/notation/functions/weight_1.ma index 3cd52cc2f..1cc29859b 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/functions/weight_1.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/functions/weight_1.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ♯ { term 46 X } )" +notation "hvbox( ♯❨ term 46 X ❩ )" non associative with precedence 90 for @{ 'Weight $X }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/functions/weight_2.ma b/matita/matita/contribs/lambdadelta/static_2/notation/functions/weight_2.ma index 8d13242c1..bb2c25d8b 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/functions/weight_2.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/functions/weight_2.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ♯ { term 46 L, break term 46 T } )" +notation "hvbox( ♯❨ term 46 L, break term 46 T ❩ )" non associative with precedence 90 for @{ 'Weight $L $T }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/functions/weight_3.ma b/matita/matita/contribs/lambdadelta/static_2/notation/functions/weight_3.ma index de765db43..e8d5637f1 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/functions/weight_3.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/functions/weight_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ♯ { term 46 G, break term 46 L, break term 46 T } )" +notation "hvbox( ♯❨ term 46 G, break term 46 L, break term 46 T ❩ )" non associative with precedence 90 for @{ 'Weight $G $L $T }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/atomicarity_4.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/atomicarity_4.ma index 9659409b9..bb4d8eff5 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/atomicarity_4.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/atomicarity_4.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⦃ term 46 G, break term 46 L⦄ ⊢ break term 46 T ⁝ break term 46 A )" +notation "hvbox( ❪ term 46 G, break term 46 L❫ ⊢ break term 46 T ⁝ break term 46 A )" non associative with precedence 45 for @{ 'AtomicArity $G $L $T $A }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/freeplus_3.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/freeplus_3.ma index 19dc43e01..32410211a 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/freeplus_3.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/freeplus_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( L ⊢ 𝐅 + ⦃ break term 46 T ⦄ ≘ break term 46 f )" +notation "hvbox( L ⊢ 𝐅 +❪ break term 46 T ❫ ≘ break term 46 f )" non associative with precedence 45 for @{ 'FreePlus $L $T $f }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/ideqsn_3.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/ideqsn_3.ma index 3ba302519..36632e872 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/ideqsn_3.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/ideqsn_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( L1 ≡ [ break term 46 f ] break term 46 L2 )" +notation "hvbox( L1 ≡[ break term 46 f ] break term 46 L2 )" non associative with precedence 45 for @{ 'IdEqSn $f $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/ineint_5.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/inwbrackets_5.ma similarity index 87% rename from matita/matita/contribs/lambdadelta/static_2/notation/relations/ineint_5.ma rename to matita/matita/contribs/lambdadelta/static_2/notation/relations/inwbrackets_5.ma index 1705b31be..318a249bb 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/ineint_5.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/inwbrackets_5.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⦃ term 46 G, break term 46 L, break term 46 T ⦄ ϵ [ break term 46 R ] 〚 break term 46 A 〛 )" +notation "hvbox( ❪ term 46 G, break term 46 L, break term 46 T ❫ ϵ ⟦ break term 46 A ⟧[ break term 46 R ] )" non associative with precedence 45 - for @{ 'InEInt $R $G $L $T $A }. + for @{ 'InWBrackets $R $G $L $T $A }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/lrsubeqa_3.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/lrsubeqa_3.ma index c3b74a96a..d2c39a79c 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/lrsubeqa_3.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/lrsubeqa_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( G ⊢ break term 46 L1 ⫃ ⁝ break term 46 L2 )" +notation "hvbox( G ⊢ break term 46 L1 ⫃⁝ break term 46 L2 )" non associative with precedence 45 for @{ 'LRSubEqA $G $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/lrsubeqc_4.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/lrsubeqc_4.ma index 6b9fa4dfd..cf86e5b70 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/lrsubeqc_4.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/lrsubeqc_4.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( G ⊢ break term 46 L1 ⫃ [ break term 46 R ] break term 46 L2 )" +notation "hvbox( G ⊢ break term 46 L1 ⫃[ break term 46 R ] break term 46 L2 )" non associative with precedence 45 for @{ 'LRSubEqC $R $G $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/lrsubeqf_4.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/lrsubeqf_4.ma index 9847c8531..bea4ea245 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/lrsubeqf_4.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/lrsubeqf_4.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⦃ term 46 L1, break term 46 f1 ⦄ ⫃ 𝐅+ ⦃ break term 46 L2, break term 46 f2 ⦄ )" +notation "hvbox( ❪ term 46 L1, break term 46 f1 ❫ ⫃𝐅+❪ break term 46 L2, break term 46 f2 ❫ )" non associative with precedence 45 for @{ 'LRSubEqF $L1 $f1 $L2 $f2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/rdropstar_3.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/rdropstar_3.ma index 9135f3760..13d53d684 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/rdropstar_3.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/rdropstar_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⇩ * [ term 46 i ] break term 46 L1 ≘ break term 46 L2 )" +notation "hvbox( ⇩*[ term 46 i ] break term 46 L1 ≘ break term 46 L2 )" non associative with precedence 45 for @{ 'RDropStar $i $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/rdropstar_4.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/rdropstar_4.ma index 5cb9c3bf8..3a6cf6103 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/rdropstar_4.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/rdropstar_4.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⇩ * [ term 46 b, break term 46 f ] break term 46 L1 ≘ break term 46 L2 )" +notation "hvbox( ⇩*[ term 46 b, break term 46 f ] break term 46 L1 ≘ break term 46 L2 )" non associative with precedence 45 for @{ 'RDropStar $b $f $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/relation_3.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/relation_3.ma index 251dbf3f9..45c56226a 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/relation_3.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/relation_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( L1 ⪤ [ break term 46 R ] break term 46 L2 )" +notation "hvbox( L1 ⪤[ break term 46 R ] break term 46 L2 )" non associative with precedence 45 for @{ 'Relation $R $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/rliftstar_3.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/rliftstar_3.ma index 109f973ed..3d0bb8eae 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/rliftstar_3.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/rliftstar_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⇧ * [ term 46 f ] break term 46 T1 ≘ break term 46 T2 )" +notation "hvbox( ⇧*[ term 46 f ] break term 46 T1 ≘ break term 46 T2 )" non associative with precedence 45 for @{ 'RLiftStar $f $T1 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/simple_1.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/simple_1.ma index 0acfb4ef7..28be9e8ea 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/simple_1.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/simple_1.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( 𝐒 ⦃ term 46 T ⦄ )" +notation "hvbox( 𝐒❪ term 46 T ❫ )" non associative with precedence 45 for @{ 'Simple $T }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareqsn_3.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareqsn_3.ma index 5d7cb99f1..5dcaaaa5d 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareqsn_3.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareqsn_3.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( L1 ≛ [ break term 46 T ] break term 46 L2 )" +notation "hvbox( L1 ≛[ break term 46 T ] break term 46 L2 )" non associative with precedence 45 for @{ 'StarEqSn $T $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareqsn_6.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareqsn_6.ma index 71174825e..29eb309c7 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareqsn_6.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/stareqsn_6.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⦃ term 46 G1, break term 46 L1, break term 46 T1 ⦄ ≛ ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )" +notation "hvbox( ❪ term 46 G1, break term 46 L1, break term 46 T1 ❫ ≛ ❪ break term 46 G2, break term 46 L2, break term 46 T2 ❫ )" non associative with precedence 45 for @{ 'StarEqSn $G1 $L1 $T1 $G2 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/subseteq_4.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/subseteq_4.ma index f7a000112..7b15e417d 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/subseteq_4.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/subseteq_4.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⦃ term 46 L1, break term 46 T1 ⦄ ⊆ ⦃ break term 46 L2, break term 46 T2 ⦄ )" +notation "hvbox( ❪ term 46 L1, break term 46 T1 ❫ ⊆ ❪ break term 46 L2, break term 46 T2 ❫ )" non associative with precedence 45 for @{ 'SubSetEq $L1 $T1 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/supterm_6.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/supterm_6.ma index a8dfc7e72..ef30bafc2 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/supterm_6.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/supterm_6.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⦃ term 46 G1, break term 46 L1, break term 46 T1 ⦄ ⬂ ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )" +notation "hvbox( ❪ term 46 G1, break term 46 L1, break term 46 T1 ❫ ⬂ ❪ break term 46 G2, break term 46 L2, break term 46 T2 ❫ )" non associative with precedence 45 for @{ 'SupTerm $G1 $L1 $T1 $G2 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/supterm_7.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/supterm_7.ma index 011caa06b..b19fea7ce 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/supterm_7.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/supterm_7.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⦃ term 46 G1, break term 46 L1, break term 46 T1 ⦄ ⬂ [ break term 46 b ] ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )" +notation "hvbox( ❪ term 46 G1, break term 46 L1, break term 46 T1 ❫ ⬂[ break term 46 b ] ❪ break term 46 G2, break term 46 L2, break term 46 T2 ❫ )" non associative with precedence 45 for @{ 'SupTerm $b $G1 $L1 $T1 $G2 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermopt_6.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermopt_6.ma index f52c205c3..a2638fc22 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermopt_6.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermopt_6.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⦃ term 46 G1, break term 46 L1, break term 46 T1 ⦄ ⬂⸮ ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )" +notation "hvbox( ❪ term 46 G1, break term 46 L1, break term 46 T1 ❫ ⬂⸮ ❪ break term 46 G2, break term 46 L2, break term 46 T2 ❫ )" non associative with precedence 45 for @{ 'SupTermOpt $G1 $L1 $T1 $G2 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermopt_7.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermopt_7.ma index 60b22c90d..c1361aeac 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermopt_7.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermopt_7.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⦃ term 46 G1, break term 46 L1, break term 46 T1 ⦄ ⬂⸮ [ break term 46 b ] ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )" +notation "hvbox( ❪ term 46 G1, break term 46 L1, break term 46 T1 ❫ ⬂⸮[ break term 46 b ] ❪ break term 46 G2, break term 46 L2, break term 46 T2 ❫ )" non associative with precedence 45 for @{ 'SupTermOpt $b $G1 $L1 $T1 $G2 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermplus_6.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermplus_6.ma index 5b60a957d..f90a49bc9 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermplus_6.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermplus_6.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⦃ term 46 G1, break term 46 L1, break term 46 T1 ⦄ ⬂ + ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )" +notation "hvbox( ❪ term 46 G1, break term 46 L1, break term 46 T1 ❫ ⬂+ ❪ break term 46 G2, break term 46 L2, break term 46 T2 ❫ )" non associative with precedence 45 for @{ 'SupTermPlus $G1 $L1 $T1 $G2 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermplus_7.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermplus_7.ma index d4b9a8669..a1c032fd3 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermplus_7.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermplus_7.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⦃ term 46 G1, break term 46 L1, break term 46 T1 ⦄ ⬂ + [ break term 46 b ] ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )" +notation "hvbox( ❪ term 46 G1, break term 46 L1, break term 46 T1 ❫ ⬂+[ break term 46 b ] ❪ break term 46 G2, break term 46 L2, break term 46 T2 ❫ )" non associative with precedence 45 for @{ 'SupTermPlus $b $G1 $L1 $T1 $G2 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermstar_6.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermstar_6.ma index 1a9c2442b..026852150 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermstar_6.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermstar_6.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⦃ term 46 G1, break term 46 L1, break term 46 T1 ⦄ ⬂ * ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )" +notation "hvbox( ❪ term 46 G1, break term 46 L1, break term 46 T1 ❫ ⬂* ❪ break term 46 G2, break term 46 L2, break term 46 T2 ❫ )" non associative with precedence 45 for @{ 'SupTermStar $G1 $L1 $T1 $G2 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermstar_7.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermstar_7.ma index 3d137035c..d7363eb44 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermstar_7.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/suptermstar_7.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( ⦃ term 46 G1, break term 46 L1, break term 46 T1 ⦄ ⬂ * [ break term 46 b ] ⦃ break term 46 G2, break term 46 L2, break term 46 T2 ⦄ )" +notation "hvbox( ❪ term 46 G1, break term 46 L1, break term 46 T1 ❫ ⬂*[ break term 46 b ] ❪ break term 46 G2, break term 46 L2, break term 46 T2 ❫ )" non associative with precedence 45 for @{ 'SupTermStar $b $G1 $L1 $T1 $G2 $L2 $T2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/notation/relations/voidstareq_4.ma b/matita/matita/contribs/lambdadelta/static_2/notation/relations/voidstareq_4.ma index 77841c6bb..0a67b3190 100644 --- a/matita/matita/contribs/lambdadelta/static_2/notation/relations/voidstareq_4.ma +++ b/matita/matita/contribs/lambdadelta/static_2/notation/relations/voidstareq_4.ma @@ -14,6 +14,6 @@ (* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************) -notation "hvbox( L1 ≋ⓧ* [ break term 46 n1, break term 46 n2 ] break term 46 L2 )" +notation "hvbox( L1 ≋ⓧ*[ break term 46 n1, break term 46 n2 ] break term 46 L2 )" non associative with precedence 45 for @{ 'VoidStarEq $L1 $n1 $n2 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/drops.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/drops.ma index b934de2a9..7b29dd1a3 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/drops.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/drops.ma @@ -27,11 +27,11 @@ include "static_2/relocation/lifts_bind.ma". drop_refl_atom_O2 drop_drop_lt drop_skip_lt *) inductive drops (b:bool): rtmap → relation lenv ≝ -| drops_atom: ∀f. (b = Ⓣ → 𝐈⦃f⦄) → drops b (f) (⋆) (⋆) -| drops_drop: ∀f,I,L1,L2. drops b f L1 L2 → drops b (↑f) (L1.ⓘ{I}) L2 +| drops_atom: ∀f. (b = Ⓣ → 𝐈❪f❫) → drops b (f) (⋆) (⋆) +| drops_drop: ∀f,I,L1,L2. drops b f L1 L2 → drops b (↑f) (L1.ⓘ[I]) L2 | drops_skip: ∀f,I1,I2,L1,L2. drops b f L1 L2 → ⇧*[f] I2 ≘ I1 → - drops b (⫯f) (L1.ⓘ{I1}) (L2.ⓘ{I2}) + drops b (⫯f) (L1.ⓘ[I1]) (L2.ⓘ[I2]) . interpretation "uniform slicing (local environment)" @@ -45,7 +45,7 @@ definition d_liftable1: predicate (relation2 lenv term) ≝ ∀U. ⇧*[f] T ≘ U → R L U. definition d_liftable1_isuni: predicate (relation2 lenv term) ≝ - λR. ∀K,T. R K T → ∀b,f,L. ⇩*[b,f] L ≘ K → 𝐔⦃f⦄ → + λR. ∀K,T. R K T → ∀b,f,L. ⇩*[b,f] L ≘ K → 𝐔❪f❫ → ∀U. ⇧*[f] T ≘ U → R L U. definition d_deliftable1: predicate (relation2 lenv term) ≝ @@ -53,7 +53,7 @@ definition d_deliftable1: predicate (relation2 lenv term) ≝ ∀T. ⇧*[f] T ≘ U → R K T. definition d_deliftable1_isuni: predicate (relation2 lenv term) ≝ - λR. ∀L,U. R L U → ∀b,f,K. ⇩*[b,f] L ≘ K → 𝐔⦃f⦄ → + λR. ∀L,U. R L U → ∀b,f,K. ⇩*[b,f] L ≘ K → 𝐔❪f❫ → ∀T. ⇧*[f] T ≘ U → R K T. definition d_liftable2_sn: ∀C:Type[0]. ∀S:rtmap → relation C. @@ -81,13 +81,13 @@ definition d_deliftable2_bi: ∀C:Type[0]. ∀S:rtmap → relation C. ∀T2. S f T2 U2 → R K T1 T2. definition co_dropable_sn: predicate (rtmap → relation lenv) ≝ - λR. ∀b,f,L1,K1. ⇩*[b,f] L1 ≘ K1 → 𝐔⦃f⦄ → + λR. ∀b,f,L1,K1. ⇩*[b,f] L1 ≘ K1 → 𝐔❪f❫ → ∀f2,L2. R f2 L1 L2 → ∀f1. f ~⊚ f1 ≘ f2 → ∃∃K2. R f1 K1 K2 & ⇩*[b,f] L2 ≘ K2. definition co_dropable_dx: predicate (rtmap → relation lenv) ≝ λR. ∀f2,L1,L2. R f2 L1 L2 → - ∀b,f,K2. ⇩*[b,f] L2 ≘ K2 → 𝐔⦃f⦄ → + ∀b,f,K2. ⇩*[b,f] L2 ≘ K2 → 𝐔❪f❫ → ∀f1. f ~⊚ f1 ≘ f2 → ∃∃K1. ⇩*[b,f] L1 ≘ K1 & R f1 K1 K2. @@ -149,7 +149,7 @@ qed-. (* Basic inversion lemmas ***************************************************) fact drops_inv_atom1_aux: ∀b,f,X,Y. ⇩*[b,f] X ≘ Y → X = ⋆ → - Y = ⋆ ∧ (b = Ⓣ → 𝐈⦃f⦄). + Y = ⋆ ∧ (b = Ⓣ → 𝐈❪f❫). #b #f #X #Y * -f -X -Y [ /3 width=1 by conj/ | #f #I #L1 #L2 #_ #H destruct @@ -159,10 +159,10 @@ qed-. (* Basic_1: includes: drop_gen_sort *) (* Basic_2A1: includes: drop_inv_atom1 *) -lemma drops_inv_atom1: ∀b,f,Y. ⇩*[b,f] ⋆ ≘ Y → Y = ⋆ ∧ (b = Ⓣ → 𝐈⦃f⦄). +lemma drops_inv_atom1: ∀b,f,Y. ⇩*[b,f] ⋆ ≘ Y → Y = ⋆ ∧ (b = Ⓣ → 𝐈❪f❫). /2 width=3 by drops_inv_atom1_aux/ qed-. -fact drops_inv_drop1_aux: ∀b,f,X,Y. ⇩*[b,f] X ≘ Y → ∀g,I,K. X = K.ⓘ{I} → f = ↑g → +fact drops_inv_drop1_aux: ∀b,f,X,Y. ⇩*[b,f] X ≘ Y → ∀g,I,K. X = K.ⓘ[I] → f = ↑g → ⇩*[b,g] K ≘ Y. #b #f #X #Y * -f -X -Y [ #f #Hf #g #J #K #H destruct @@ -173,11 +173,11 @@ qed-. (* Basic_1: includes: drop_gen_drop *) (* Basic_2A1: includes: drop_inv_drop1_lt drop_inv_drop1 *) -lemma drops_inv_drop1: ∀b,f,I,K,Y. ⇩*[b,↑f] K.ⓘ{I} ≘ Y → ⇩*[b,f] K ≘ Y. +lemma drops_inv_drop1: ∀b,f,I,K,Y. ⇩*[b,↑f] K.ⓘ[I] ≘ Y → ⇩*[b,f] K ≘ Y. /2 width=6 by drops_inv_drop1_aux/ qed-. -fact drops_inv_skip1_aux: ∀b,f,X,Y. ⇩*[b,f] X ≘ Y → ∀g,I1,K1. X = K1.ⓘ{I1} → f = ⫯g → - ∃∃I2,K2. ⇩*[b,g] K1 ≘ K2 & ⇧*[g] I2 ≘ I1 & Y = K2.ⓘ{I2}. +fact drops_inv_skip1_aux: ∀b,f,X,Y. ⇩*[b,f] X ≘ Y → ∀g,I1,K1. X = K1.ⓘ[I1] → f = ⫯g → + ∃∃I2,K2. ⇩*[b,g] K1 ≘ K2 & ⇧*[g] I2 ≘ I1 & Y = K2.ⓘ[I2]. #b #f #X #Y * -f -X -Y [ #f #Hf #g #J1 #K1 #H destruct | #f #I #L1 #L2 #_ #g #J1 #K1 #_ #H2 elim (discr_next_push … H2) @@ -188,12 +188,12 @@ qed-. (* Basic_1: includes: drop_gen_skip_l *) (* Basic_2A1: includes: drop_inv_skip1 *) -lemma drops_inv_skip1: ∀b,f,I1,K1,Y. ⇩*[b,⫯f] K1.ⓘ{I1} ≘ Y → - ∃∃I2,K2. ⇩*[b,f] K1 ≘ K2 & ⇧*[f] I2 ≘ I1 & Y = K2.ⓘ{I2}. +lemma drops_inv_skip1: ∀b,f,I1,K1,Y. ⇩*[b,⫯f] K1.ⓘ[I1] ≘ Y → + ∃∃I2,K2. ⇩*[b,f] K1 ≘ K2 & ⇧*[f] I2 ≘ I1 & Y = K2.ⓘ[I2]. /2 width=5 by drops_inv_skip1_aux/ qed-. -fact drops_inv_skip2_aux: ∀b,f,X,Y. ⇩*[b,f] X ≘ Y → ∀g,I2,K2. Y = K2.ⓘ{I2} → f = ⫯g → - ∃∃I1,K1. ⇩*[b,g] K1 ≘ K2 & ⇧*[g] I2 ≘ I1 & X = K1.ⓘ{I1}. +fact drops_inv_skip2_aux: ∀b,f,X,Y. ⇩*[b,f] X ≘ Y → ∀g,I2,K2. Y = K2.ⓘ[I2] → f = ⫯g → + ∃∃I1,K1. ⇩*[b,g] K1 ≘ K2 & ⇧*[g] I2 ≘ I1 & X = K1.ⓘ[I1]. #b #f #X #Y * -f -X -Y [ #f #Hf #g #J2 #K2 #H destruct | #f #I #L1 #L2 #_ #g #J2 #K2 #_ #H2 elim (discr_next_push … H2) @@ -204,14 +204,14 @@ qed-. (* Basic_1: includes: drop_gen_skip_r *) (* Basic_2A1: includes: drop_inv_skip2 *) -lemma drops_inv_skip2: ∀b,f,I2,X,K2. ⇩*[b,⫯f] X ≘ K2.ⓘ{I2} → - ∃∃I1,K1. ⇩*[b,f] K1 ≘ K2 & ⇧*[f] I2 ≘ I1 & X = K1.ⓘ{I1}. +lemma drops_inv_skip2: ∀b,f,I2,X,K2. ⇩*[b,⫯f] X ≘ K2.ⓘ[I2] → + ∃∃I1,K1. ⇩*[b,f] K1 ≘ K2 & ⇧*[f] I2 ≘ I1 & X = K1.ⓘ[I1]. /2 width=5 by drops_inv_skip2_aux/ qed-. (* Basic forward lemmas *****************************************************) -fact drops_fwd_drop2_aux: ∀b,f2,X,Y. ⇩*[b,f2] X ≘ Y → ∀I,K. Y = K.ⓘ{I} → - ∃∃f1,f. 𝐈⦃f1⦄ & f2 ⊚ ↑f1 ≘ f & ⇩*[b,f] X ≘ K. +fact drops_fwd_drop2_aux: ∀b,f2,X,Y. ⇩*[b,f2] X ≘ Y → ∀I,K. Y = K.ⓘ[I] → + ∃∃f1,f. 𝐈❪f1❫ & f2 ⊚ ↑f1 ≘ f & ⇩*[b,f] X ≘ K. #b #f2 #X #Y #H elim H -f2 -X -Y [ #f2 #Hf2 #J #K #H destruct | #f2 #I #L1 #L2 #_ #IHL #J #K #H elim (IHL … H) -IHL @@ -221,14 +221,14 @@ fact drops_fwd_drop2_aux: ∀b,f2,X,Y. ⇩*[b,f2] X ≘ Y → ∀I,K. Y = K.ⓘ{ ] qed-. -lemma drops_fwd_drop2: ∀b,f2,I,X,K. ⇩*[b,f2] X ≘ K.ⓘ{I} → - ∃∃f1,f. 𝐈⦃f1⦄ & f2 ⊚ ↑f1 ≘ f & ⇩*[b,f] X ≘ K. +lemma drops_fwd_drop2: ∀b,f2,I,X,K. ⇩*[b,f2] X ≘ K.ⓘ[I] → + ∃∃f1,f. 𝐈❪f1❫ & f2 ⊚ ↑f1 ≘ f & ⇩*[b,f] X ≘ K. /2 width=4 by drops_fwd_drop2_aux/ qed-. (* Properties with test for identity ****************************************) (* Basic_2A1: includes: drop_refl *) -lemma drops_refl: ∀b,L,f. 𝐈⦃f⦄ → ⇩*[b,f] L ≘ L. +lemma drops_refl: ∀b,L,f. 𝐈❪f❫ → ⇩*[b,f] L ≘ L. #b #L elim L -L /2 width=1 by drops_atom/ #L #I #IHL #f #Hf elim (isid_inv_gen … Hf) -Hf /3 width=1 by drops_skip, liftsb_refl/ @@ -238,15 +238,15 @@ qed. (* Basic_1: includes: drop_gen_refl *) (* Basic_2A1: includes: drop_inv_O2 *) -lemma drops_fwd_isid: ∀b,f,L1,L2. ⇩*[b,f] L1 ≘ L2 → 𝐈⦃f⦄ → L1 = L2. +lemma drops_fwd_isid: ∀b,f,L1,L2. ⇩*[b,f] L1 ≘ L2 → 𝐈❪f❫ → L1 = L2. #b #f #L1 #L2 #H elim H -f -L1 -L2 // [ #f #I #L1 #L2 #_ #_ #H elim (isid_inv_next … H) // | /5 width=5 by isid_inv_push, liftsb_fwd_isid, eq_f2, sym_eq/ ] qed-. -lemma drops_after_fwd_drop2: ∀b,f2,I,X,K. ⇩*[b,f2] X ≘ K.ⓘ{I} → - ∀f1,f. 𝐈⦃f1⦄ → f2 ⊚ ↑f1 ≘ f → ⇩*[b,f] X ≘ K. +lemma drops_after_fwd_drop2: ∀b,f2,I,X,K. ⇩*[b,f2] X ≘ K.ⓘ[I] → + ∀f1,f. 𝐈❪f1❫ → f2 ⊚ ↑f1 ≘ f → ⇩*[b,f] X ≘ K. #b #f2 #I #X #K #H #f1 #f #Hf1 #Hf elim (drops_fwd_drop2 … H) -H #g1 #g #Hg1 #Hg #HK lapply (after_mono_eq … Hg … Hf ??) -Hg -Hf /3 width=5 by drops_eq_repl_back, isid_inv_eq_repl, eq_next/ @@ -254,14 +254,14 @@ qed-. (* Forward lemmas with test for finite colength *****************************) -lemma drops_fwd_isfin: ∀f,L1,L2. ⇩*[Ⓣ,f] L1 ≘ L2 → 𝐅⦃f⦄. +lemma drops_fwd_isfin: ∀f,L1,L2. ⇩*[Ⓣ,f] L1 ≘ L2 → 𝐅❪f❫. #f #L1 #L2 #H elim H -f -L1 -L2 /3 width=1 by isfin_next, isfin_push, isfin_isid/ qed-. (* Properties with test for uniformity **************************************) -lemma drops_isuni_ex: ∀f. 𝐔⦃f⦄ → ∀L. ∃K. ⇩*[Ⓕ,f] L ≘ K. +lemma drops_isuni_ex: ∀f. 𝐔❪f❫ → ∀L. ∃K. ⇩*[Ⓕ,f] L ≘ K. #f #H elim H -f /4 width=2 by drops_refl, drops_TF, ex_intro/ #f #_ #g #H #IH destruct * /2 width=2 by ex_intro/ #L #I elim (IH L) -IH /3 width=2 by drops_drop, ex_intro/ @@ -269,9 +269,9 @@ qed-. (* Inversion lemmas with test for uniformity ********************************) -lemma drops_inv_isuni: ∀f,L1,L2. ⇩*[Ⓣ,f] L1 ≘ L2 → 𝐔⦃f⦄ → - (𝐈⦃f⦄ ∧ L1 = L2) ∨ - ∃∃g,I,K. ⇩*[Ⓣ,g] K ≘ L2 & 𝐔⦃g⦄ & L1 = K.ⓘ{I} & f = ↑g. +lemma drops_inv_isuni: ∀f,L1,L2. ⇩*[Ⓣ,f] L1 ≘ L2 → 𝐔❪f❫ → + (𝐈❪f❫ ∧ L1 = L2) ∨ + ∃∃g,I,K. ⇩*[Ⓣ,g] K ≘ L2 & 𝐔❪g❫ & L1 = K.ⓘ[I] & f = ↑g. #f #L1 #L2 * -f -L1 -L2 [ /4 width=1 by or_introl, conj/ | /4 width=7 by isuni_inv_next, ex4_3_intro, or_intror/ @@ -280,9 +280,9 @@ lemma drops_inv_isuni: ∀f,L1,L2. ⇩*[Ⓣ,f] L1 ≘ L2 → 𝐔⦃f⦄ → qed-. (* Basic_2A1: was: drop_inv_O1_pair1 *) -lemma drops_inv_bind1_isuni: ∀b,f,I,K,L2. 𝐔⦃f⦄ → ⇩*[b,f] K.ⓘ{I} ≘ L2 → - (𝐈⦃f⦄ ∧ L2 = K.ⓘ{I}) ∨ - ∃∃g. 𝐔⦃g⦄ & ⇩*[b,g] K ≘ L2 & f = ↑g. +lemma drops_inv_bind1_isuni: ∀b,f,I,K,L2. 𝐔❪f❫ → ⇩*[b,f] K.ⓘ[I] ≘ L2 → + (𝐈❪f❫ ∧ L2 = K.ⓘ[I]) ∨ + ∃∃g. 𝐔❪g❫ & ⇩*[b,g] K ≘ L2 & f = ↑g. #b #f #I #K #L2 #Hf #H elim (isuni_split … Hf) -Hf * #g #Hg #H0 destruct [ lapply (drops_inv_skip1 … H) -H * #Z #Y #HY #HZ #H destruct <(drops_fwd_isid … HY Hg) -Y >(liftsb_fwd_isid … HZ Hg) -Z @@ -292,9 +292,9 @@ lemma drops_inv_bind1_isuni: ∀b,f,I,K,L2. 𝐔⦃f⦄ → ⇩*[b,f] K.ⓘ{I} qed-. (* Basic_2A1: was: drop_inv_O1_pair2 *) -lemma drops_inv_bind2_isuni: ∀b,f,I,K,L1. 𝐔⦃f⦄ → ⇩*[b,f] L1 ≘ K.ⓘ{I} → - (𝐈⦃f⦄ ∧ L1 = K.ⓘ{I}) ∨ - ∃∃g,I1,K1. 𝐔⦃g⦄ & ⇩*[b,g] K1 ≘ K.ⓘ{I} & L1 = K1.ⓘ{I1} & f = ↑g. +lemma drops_inv_bind2_isuni: ∀b,f,I,K,L1. 𝐔❪f❫ → ⇩*[b,f] L1 ≘ K.ⓘ[I] → + (𝐈❪f❫ ∧ L1 = K.ⓘ[I]) ∨ + ∃∃g,I1,K1. 𝐔❪g❫ & ⇩*[b,g] K1 ≘ K.ⓘ[I] & L1 = K1.ⓘ[I1] & f = ↑g. #b #f #I #K * [ #Hf #H elim (drops_inv_atom1 … H) -H #H destruct | #L1 #I1 #Hf #H elim (drops_inv_bind1_isuni … Hf H) -Hf -H * @@ -304,16 +304,16 @@ lemma drops_inv_bind2_isuni: ∀b,f,I,K,L1. 𝐔⦃f⦄ → ⇩*[b,f] L1 ≘ K. ] qed-. -lemma drops_inv_bind2_isuni_next: ∀b,f,I,K,L1. 𝐔⦃f⦄ → ⇩*[b,↑f] L1 ≘ K.ⓘ{I} → - ∃∃I1,K1. ⇩*[b,f] K1 ≘ K.ⓘ{I} & L1 = K1.ⓘ{I1}. +lemma drops_inv_bind2_isuni_next: ∀b,f,I,K,L1. 𝐔❪f❫ → ⇩*[b,↑f] L1 ≘ K.ⓘ[I] → + ∃∃I1,K1. ⇩*[b,f] K1 ≘ K.ⓘ[I] & L1 = K1.ⓘ[I1]. #b #f #I #K #L1 #Hf #H elim (drops_inv_bind2_isuni … H) -H /2 width=3 by isuni_next/ -Hf * [ #H elim (isid_inv_next … H) -H // | /2 width=4 by ex2_2_intro/ ] qed-. -fact drops_inv_TF_aux: ∀f,L1,L2. ⇩*[Ⓕ,f] L1 ≘ L2 → 𝐔⦃f⦄ → - ∀I,K. L2 = K.ⓘ{I} → ⇩*[Ⓣ,f] L1 ≘ K.ⓘ{I}. +fact drops_inv_TF_aux: ∀f,L1,L2. ⇩*[Ⓕ,f] L1 ≘ L2 → 𝐔❪f❫ → + ∀I,K. L2 = K.ⓘ[I] → ⇩*[Ⓣ,f] L1 ≘ K.ⓘ[I]. #f #L1 #L2 #H elim H -f -L1 -L2 [ #f #_ #_ #J #K #H destruct | #f #I #L1 #L2 #_ #IH #Hf #J #K #H destruct @@ -326,16 +326,16 @@ fact drops_inv_TF_aux: ∀f,L1,L2. ⇩*[Ⓕ,f] L1 ≘ L2 → 𝐔⦃f⦄ → qed-. (* Basic_2A1: includes: drop_inv_FT *) -lemma drops_inv_TF: ∀f,I,L,K. ⇩*[Ⓕ,f] L ≘ K.ⓘ{I} → 𝐔⦃f⦄ → ⇩*[Ⓣ,f] L ≘ K.ⓘ{I}. +lemma drops_inv_TF: ∀f,I,L,K. ⇩*[Ⓕ,f] L ≘ K.ⓘ[I] → 𝐔❪f❫ → ⇩*[Ⓣ,f] L ≘ K.ⓘ[I]. /2 width=3 by drops_inv_TF_aux/ qed-. (* Basic_2A1: includes: drop_inv_gen *) -lemma drops_inv_gen: ∀b,f,I,L,K. ⇩*[b,f] L ≘ K.ⓘ{I} → 𝐔⦃f⦄ → ⇩*[Ⓣ,f] L ≘ K.ⓘ{I}. +lemma drops_inv_gen: ∀b,f,I,L,K. ⇩*[b,f] L ≘ K.ⓘ[I] → 𝐔❪f❫ → ⇩*[Ⓣ,f] L ≘ K.ⓘ[I]. * /2 width=1 by drops_inv_TF/ qed-. (* Basic_2A1: includes: drop_inv_T *) -lemma drops_inv_F: ∀b,f,I,L,K. ⇩*[Ⓕ,f] L ≘ K.ⓘ{I} → 𝐔⦃f⦄ → ⇩*[b,f] L ≘ K.ⓘ{I}. +lemma drops_inv_F: ∀b,f,I,L,K. ⇩*[Ⓕ,f] L ≘ K.ⓘ[I] → 𝐔❪f❫ → ⇩*[b,f] L ≘ K.ⓘ[I]. * /2 width=1 by drops_inv_TF/ qed-. @@ -343,13 +343,13 @@ qed-. (* Basic_1: was: drop_S *) (* Basic_2A1: was: drop_fwd_drop2 *) -lemma drops_isuni_fwd_drop2: ∀b,f,I,X,K. 𝐔⦃f⦄ → ⇩*[b,f] X ≘ K.ⓘ{I} → ⇩*[b,↑f] X ≘ K. +lemma drops_isuni_fwd_drop2: ∀b,f,I,X,K. 𝐔❪f❫ → ⇩*[b,f] X ≘ K.ⓘ[I] → ⇩*[b,↑f] X ≘ K. /3 width=7 by drops_after_fwd_drop2, after_isid_isuni/ qed-. (* Inversion lemmas with uniform relocations ********************************) lemma drops_inv_atom2: ∀b,L,f. ⇩*[b,f] L ≘ ⋆ → - ∃∃n,f1. ⇩*[b,𝐔❴n❵] L ≘ ⋆ & 𝐔❴n❵ ⊚ f1 ≘ f. + ∃∃n,f1. ⇩*[b,𝐔❨n❩] L ≘ ⋆ & 𝐔❨n❩ ⊚ f1 ≘ f. #b #L elim L -L [ /3 width=4 by drops_atom, after_isid_sn, ex2_2_intro/ | #L #I #IH #f #H elim (pn_split f) * #g #H0 destruct @@ -361,7 +361,7 @@ lemma drops_inv_atom2: ∀b,L,f. ⇩*[b,f] L ≘ ⋆ → qed-. lemma drops_inv_succ: ∀L1,L2,i. ⇩*[↑i] L1 ≘ L2 → - ∃∃I,K. ⇩*[i] K ≘ L2 & L1 = K.ⓘ{I}. + ∃∃I,K. ⇩*[i] K ≘ L2 & L1 = K.ⓘ[I]. #L1 #L2 #i #H elim (drops_inv_isuni … H) -H // * [ #H elim (isid_inv_next … H) -H // | /2 width=4 by ex2_2_intro/ @@ -370,7 +370,7 @@ qed-. (* Properties with uniform relocations **************************************) -lemma drops_F_uni: ∀L,i. ⇩*[Ⓕ,𝐔❴i❵] L ≘ ⋆ ∨ ∃∃I,K. ⇩*[i] L ≘ K.ⓘ{I}. +lemma drops_F_uni: ∀L,i. ⇩*[Ⓕ,𝐔❨i❩] L ≘ ⋆ ∨ ∃∃I,K. ⇩*[i] L ≘ K.ⓘ[I]. #L elim L -L /2 width=1 by or_introl/ #L #I #IH * /4 width=3 by drops_refl, ex1_2_intro, or_intror/ #i elim (IH i) -IH /3 width=1 by drops_drop, or_introl/ @@ -378,7 +378,7 @@ lemma drops_F_uni: ∀L,i. ⇩*[Ⓕ,𝐔❴i❵] L ≘ ⋆ ∨ ∃∃I,K. ⇩*[i qed-. (* Basic_2A1: includes: drop_split *) -lemma drops_split_trans: ∀b,f,L1,L2. ⇩*[b,f] L1 ≘ L2 → ∀f1,f2. f1 ⊚ f2 ≘ f → 𝐔⦃f1⦄ → +lemma drops_split_trans: ∀b,f,L1,L2. ⇩*[b,f] L1 ≘ L2 → ∀f1,f2. f1 ⊚ f2 ≘ f → 𝐔❪f1❫ → ∃∃L. ⇩*[b,f1] L1 ≘ L & ⇩*[b,f2] L ≘ L2. #b #f #L1 #L2 #H elim H -f -L1 -L2 [ #f #H0f #f1 #f2 #Hf #Hf1 @(ex2_intro … (⋆)) @drops_atom @@ -398,7 +398,7 @@ lemma drops_split_trans: ∀b,f,L1,L2. ⇩*[b,f] L1 ≘ L2 → ∀f1,f2. f1 ⊚ ] qed-. -lemma drops_split_div: ∀b,f1,L1,L. ⇩*[b,f1] L1 ≘ L → ∀f2,f. f1 ⊚ f2 ≘ f → 𝐔⦃f2⦄ → +lemma drops_split_div: ∀b,f1,L1,L. ⇩*[b,f1] L1 ≘ L → ∀f2,f. f1 ⊚ f2 ≘ f → 𝐔❪f2❫ → ∃∃L2. ⇩*[Ⓕ,f2] L ≘ L2 & ⇩*[Ⓕ,f] L1 ≘ L2. #b #f1 #L1 #L #H elim H -f1 -L1 -L [ #f1 #Hf1 #f2 #f #Hf #Hf2 @(ex2_intro … (⋆)) @drops_atom #H destruct @@ -418,13 +418,13 @@ qed-. (* Properties with application **********************************************) -lemma drops_tls_at: ∀f,i1,i2. @⦃i1,f⦄ ≘ i2 → +lemma drops_tls_at: ∀f,i1,i2. @❪i1,f❫ ≘ i2 → ∀b,L1,L2. ⇩*[b,⫱*[i2]f] L1 ≘ L2 → ⇩*[b,⫯⫱*[↑i2]f] L1 ≘ L2. /3 width=3 by drops_eq_repl_fwd, at_inv_tls/ qed-. -lemma drops_split_trans_bind2: ∀b,f,I,L,K0. ⇩*[b,f] L ≘ K0.ⓘ{I} → ∀i. @⦃O,f⦄ ≘ i → - ∃∃J,K. ⇩*[i]L ≘ K.ⓘ{J} & ⇩*[b,⫱*[↑i]f] K ≘ K0 & ⇧*[⫱*[↑i]f] I ≘ J. +lemma drops_split_trans_bind2: ∀b,f,I,L,K0. ⇩*[b,f] L ≘ K0.ⓘ[I] → ∀i. @❪O,f❫ ≘ i → + ∃∃J,K. ⇩*[i]L ≘ K.ⓘ[J] & ⇩*[b,⫱*[↑i]f] K ≘ K0 & ⇧*[⫱*[↑i]f] I ≘ J. #b #f #I #L #K0 #H #i #Hf elim (drops_split_trans … H) -H [ |5: @(after_uni_dx … Hf) |2,3: skip ] /2 width=1 by after_isid_dx/ #Y #HLY #H lapply (drops_tls_at … Hf … H) -H #H diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/drops_drops.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/drops_drops.ma index f8a65c536..b90bf07df 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/drops_drops.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/drops_drops.ma @@ -60,7 +60,7 @@ theorem drops_trans: ∀b1,f1,L1,L. ⇩*[b1,f1] L1 ≘ L → qed-. theorem drops_conf_div: ∀f1,L,K. ⇩*[Ⓣ,f1] L ≘ K → ∀f2. ⇩*[Ⓣ,f2] L ≘ K → - 𝐔⦃f1⦄ → 𝐔⦃f2⦄ → f1 ≡ f2. + 𝐔❪f1❫ → 𝐔❪f2❫ → f1 ≡ f2. #f1 #L #K #H elim H -f1 -L -K [ #f1 #Hf1 #f2 #Hf2 elim (drops_inv_atom1 … Hf2) -Hf2 /3 width=1 by isid_inv_eq_repl/ @@ -91,7 +91,7 @@ lemma drops_mono: ∀b1,f,L,L1. ⇩*[b1,f] L ≘ L1 → /3 width=8 by drops_conf, drops_fwd_isid/ qed-. -lemma drops_inv_uni: ∀L,i. ⇩*[Ⓕ,𝐔❴i❵] L ≘ ⋆ → ∀I,K. ⇩*[i] L ≘ K.ⓘ{I} → ⊥. +lemma drops_inv_uni: ∀L,i. ⇩*[Ⓕ,𝐔❨i❩] L ≘ ⋆ → ∀I,K. ⇩*[i] L ≘ K.ⓘ[I] → ⊥. #L #i #H1 #I #K #H2 lapply (drops_F … H2) -H2 #H2 lapply (drops_mono … H2 … H1) -L -i #H destruct @@ -107,9 +107,9 @@ qed-. (* Basic_2A1: includes: drop_conf_lt *) lemma drops_conf_skip1: ∀b2,f,L,L2. ⇩*[b2,f] L ≘ L2 → - ∀b1,f1,I1,K1. ⇩*[b1,f1] L ≘ K1.ⓘ{I1} → + ∀b1,f1,I1,K1. ⇩*[b1,f1] L ≘ K1.ⓘ[I1] → ∀f2. f1 ⊚ ⫯f2 ≘ f → - ∃∃I2,K2. L2 = K2.ⓘ{I2} & + ∃∃I2,K2. L2 = K2.ⓘ[I2] & ⇩*[b2,f2] K1 ≘ K2 & ⇧*[f2] I2 ≘ I1. #b2 #f #L #L2 #H2 #b1 #f1 #I1 #K1 #H1 #f2 #Hf lapply (drops_conf … H1 … H2 … Hf) -L -Hf #H elim (drops_inv_skip1 … H) -H /2 width=5 by ex3_2_intro/ @@ -117,9 +117,9 @@ qed-. (* Basic_2A1: includes: drop_trans_lt *) lemma drops_trans_skip2: ∀b1,f1,L1,L. ⇩*[b1,f1] L1 ≘ L → - ∀b2,f2,I2,K2. ⇩*[b2,f2] L ≘ K2.ⓘ{I2} → + ∀b2,f2,I2,K2. ⇩*[b2,f2] L ≘ K2.ⓘ[I2] → ∀f. f1 ⊚ f2 ≘ ⫯f → - ∃∃I1,K1. L1 = K1.ⓘ{I1} & + ∃∃I1,K1. L1 = K1.ⓘ[I1] & ⇩*[b1∧b2,f] K1 ≘ K2 & ⇧*[f] I2 ≘ I1. #b1 #f1 #L1 #L #H1 #b2 #f2 #I2 #K2 #H2 #f #Hf lapply (drops_trans … H1 … H2 … Hf) -L -Hf @@ -128,8 +128,8 @@ qed-. (* Basic_2A1: includes: drops_conf_div *) lemma drops_conf_div_bind: ∀f1,f2,I1,I2,L,K. - ⇩*[Ⓣ,f1] L ≘ K.ⓘ{I1} → ⇩*[Ⓣ,f2] L ≘ K.ⓘ{I2} → - 𝐔⦃f1⦄ → 𝐔⦃f2⦄ → f1 ≡ f2 ∧ I1 = I2. + ⇩*[Ⓣ,f1] L ≘ K.ⓘ[I1] → ⇩*[Ⓣ,f2] L ≘ K.ⓘ[I2] → + 𝐔❪f1❫ → 𝐔❪f2❫ → f1 ≡ f2 ∧ I1 = I2. #f1 #f2 #I1 #I2 #L #K #Hf1 #Hf2 #HU1 #HU2 lapply (drops_isuni_fwd_drop2 … Hf1) // #H1 lapply (drops_isuni_fwd_drop2 … Hf2) // #H2 diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/drops_length.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/drops_length.ma index 7d53c39db..fe6b2ade8 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/drops_length.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/drops_length.ma @@ -44,7 +44,7 @@ qed-. (* forward lemmas with finite colength assignment ***************************) lemma drops_fwd_fcla: ∀f,L1,L2. ⇩*[Ⓣ,f] L1 ≘ L2 → - ∃∃n. 𝐂⦃f⦄ ≘ n & |L1| = |L2| + n. + ∃∃n. 𝐂❪f❫ ≘ n & |L1| = |L2| + n. #f #L1 #L2 #H elim H -f -L1 -L2 [ /4 width=3 by fcla_isid, ex2_intro/ | #f #I #L1 #L2 #_ * >length_bind /3 width=3 by fcla_next, ex2_intro, eq_f/ @@ -53,46 +53,46 @@ lemma drops_fwd_fcla: ∀f,L1,L2. ⇩*[Ⓣ,f] L1 ≘ L2 → qed-. (* Basic_2A1: includes: drop_fwd_length *) -lemma drops_fcla_fwd: ∀f,L1,L2,n. ⇩*[Ⓣ,f] L1 ≘ L2 → 𝐂⦃f⦄ ≘ n → +lemma drops_fcla_fwd: ∀f,L1,L2,n. ⇩*[Ⓣ,f] L1 ≘ L2 → 𝐂❪f❫ ≘ n → |L1| = |L2| + n. #f #l1 #l2 #n #Hf #Hn elim (drops_fwd_fcla … Hf) -Hf #k #Hm #H <(fcla_mono … Hm … Hn) -f // qed-. lemma drops_fwd_fcla_le2: ∀f,L1,L2. ⇩*[Ⓣ,f] L1 ≘ L2 → - ∃∃n. 𝐂⦃f⦄ ≘ n & n ≤ |L1|. + ∃∃n. 𝐂❪f❫ ≘ n & n ≤ |L1|. #f #L1 #L2 #H elim (drops_fwd_fcla … H) -H /2 width=3 by ex2_intro/ qed-. (* Basic_2A1: includes: drop_fwd_length_le2 *) -lemma drops_fcla_fwd_le2: ∀f,L1,L2,n. ⇩*[Ⓣ,f] L1 ≘ L2 → 𝐂⦃f⦄ ≘ n → +lemma drops_fcla_fwd_le2: ∀f,L1,L2,n. ⇩*[Ⓣ,f] L1 ≘ L2 → 𝐂❪f❫ ≘ n → n ≤ |L1|. #f #L1 #L2 #n #H #Hn elim (drops_fwd_fcla_le2 … H) -H #k #Hm #H <(fcla_mono … Hm … Hn) -f // qed-. -lemma drops_fwd_fcla_lt2: ∀f,L1,I2,K2. ⇩*[Ⓣ,f] L1 ≘ K2.ⓘ{I2} → - ∃∃n. 𝐂⦃f⦄ ≘ n & n < |L1|. +lemma drops_fwd_fcla_lt2: ∀f,L1,I2,K2. ⇩*[Ⓣ,f] L1 ≘ K2.ⓘ[I2] → + ∃∃n. 𝐂❪f❫ ≘ n & n < |L1|. #f #L1 #I2 #K2 #H elim (drops_fwd_fcla … H) -H #n #Hf #H >H -L1 /3 width=3 by le_S_S, ex2_intro/ qed-. (* Basic_2A1: includes: drop_fwd_length_lt2 *) lemma drops_fcla_fwd_lt2: ∀f,L1,I2,K2,n. - ⇩*[Ⓣ,f] L1 ≘ K2.ⓘ{I2} → 𝐂⦃f⦄ ≘ n → + ⇩*[Ⓣ,f] L1 ≘ K2.ⓘ[I2] → 𝐂❪f❫ ≘ n → n < |L1|. #f #L1 #I2 #K2 #n #H #Hn elim (drops_fwd_fcla_lt2 … H) -H #k #Hm #H <(fcla_mono … Hm … Hn) -f // qed-. (* Basic_2A1: includes: drop_fwd_length_lt4 *) -lemma drops_fcla_fwd_lt4: ∀f,L1,L2,n. ⇩*[Ⓣ,f] L1 ≘ L2 → 𝐂⦃f⦄ ≘ n → 0 < n → +lemma drops_fcla_fwd_lt4: ∀f,L1,L2,n. ⇩*[Ⓣ,f] L1 ≘ L2 → 𝐂❪f❫ ≘ n → 0 < n → |L2| < |L1|. #f #L1 #L2 #n #H #Hf #Hn lapply (drops_fcla_fwd … H Hf) -f /2 width=1 by lt_minus_to_plus_r/ qed-. (* Basic_2A1: includes: drop_inv_length_eq *) -lemma drops_inv_length_eq: ∀f,L1,L2. ⇩*[Ⓣ,f] L1 ≘ L2 → |L1| = |L2| → 𝐈⦃f⦄. +lemma drops_inv_length_eq: ∀f,L1,L2. ⇩*[Ⓣ,f] L1 ≘ L2 → |L1| = |L2| → 𝐈❪f❫. #f #L1 #L2 #H #HL12 elim (drops_fwd_fcla … H) -H #n #Hn H2 -L2 qed-. theorem drops_conf_div: ∀f1,f2,L1,L2. ⇩*[Ⓣ,f1] L1 ≘ L2 → ⇩*[Ⓣ,f2] L1 ≘ L2 → - ∃∃n. 𝐂⦃f1⦄ ≘ n & 𝐂⦃f2⦄ ≘ n. + ∃∃n. 𝐂❪f1❫ ≘ n & 𝐂❪f2❫ ≘ n. #f1 #f2 #L1 #L2 #H1 #H2 elim (drops_fwd_fcla … H1) -H1 #n1 #Hf1 #H1 elim (drops_fwd_fcla … H2) -H2 #n2 #Hf2 >H1 -L1 #H @@ -116,7 +116,7 @@ lapply (injective_plus_r … H) -L2 #H destruct /2 width=3 by ex2_intro/ qed-. theorem drops_conf_div_fcla: ∀f1,f2,L1,L2,n1,n2. - ⇩*[Ⓣ,f1] L1 ≘ L2 → ⇩*[Ⓣ,f2] L1 ≘ L2 → 𝐂⦃f1⦄ ≘ n1 → 𝐂⦃f2⦄ ≘ n2 → + ⇩*[Ⓣ,f1] L1 ≘ L2 → ⇩*[Ⓣ,f2] L1 ≘ L2 → 𝐂❪f1❫ ≘ n1 → 𝐂❪f2❫ ≘ n2 → n1 = n2. #f1 #f2 #L1 #L2 #n1 #n2 #Hf1 #Hf2 #Hn1 #Hn2 lapply (drops_fcla_fwd … Hf1 Hn1) -f1 #H1 diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/drops_lex.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/drops_lex.ma index 97a95c638..1201b75fa 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/drops_lex.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/drops_lex.ma @@ -23,11 +23,11 @@ definition dedropable_sn: predicate … ≝ ∃∃L2. L1 ⪤[R] L2 & ⇩*[b,f] L2 ≘ K2 & L1 ≡[f] L2. definition dropable_sn: predicate … ≝ - λR. ∀b,f,L1,K1. ⇩*[b,f] L1 ≘ K1 → 𝐔⦃f⦄ → ∀L2. L1 ⪤[R] L2 → + λR. ∀b,f,L1,K1. ⇩*[b,f] L1 ≘ K1 → 𝐔❪f❫ → ∀L2. L1 ⪤[R] L2 → ∃∃K2. K1 ⪤[R] K2 & ⇩*[b,f] L2 ≘ K2. definition dropable_dx: predicate … ≝ - λR. ∀L1,L2. L1 ⪤[R] L2 → ∀b,f,K2. ⇩*[b,f] L2 ≘ K2 → 𝐔⦃f⦄ → + λR. ∀L1,L2. L1 ⪤[R] L2 → ∀b,f,K2. ⇩*[b,f] L2 ≘ K2 → 𝐔❪f❫ → ∃∃K1. ⇩*[b,f] L1 ≘ K1 & K1 ⪤[R] K2. (* Properties with generic extension ****************************************) @@ -58,8 +58,8 @@ qed-. (* Basic_2A1: includes: lpx_sn_drop_conf *) lemma lex_drops_conf_pair (R): ∀L1,L2. L1 ⪤[R] L2 → - ∀b,f,I,K1,V1. ⇩*[b,f] L1 ≘ K1.ⓑ{I}V1 → 𝐔⦃f⦄ → - ∃∃K2,V2. ⇩*[b,f] L2 ≘ K2.ⓑ{I}V2 & K1 ⪤[R] K2 & R K1 V1 V2. + ∀b,f,I,K1,V1. ⇩*[b,f] L1 ≘ K1.ⓑ[I]V1 → 𝐔❪f❫ → + ∃∃K2,V2. ⇩*[b,f] L2 ≘ K2.ⓑ[I]V2 & K1 ⪤[R] K2 & R K1 V1 V2. #R #L1 #L2 * #f2 #Hf2 #HL12 #b #f #I #K1 #V1 #HLK1 #Hf elim (sex_drops_conf_push … HL12 … HLK1 Hf f2) -L1 -Hf [ #Z2 #K2 #HLK2 #HK12 #H @@ -71,8 +71,8 @@ qed-. (* Basic_2A1: includes: lpx_sn_drop_trans *) lemma lex_drops_trans_pair (R): ∀L1,L2. L1 ⪤[R] L2 → - ∀b,f,I,K2,V2. ⇩*[b,f] L2 ≘ K2.ⓑ{I}V2 → 𝐔⦃f⦄ → - ∃∃K1,V1. ⇩*[b,f] L1 ≘ K1.ⓑ{I}V1 & K1 ⪤[R] K2 & R K1 V1 V2. + ∀b,f,I,K2,V2. ⇩*[b,f] L2 ≘ K2.ⓑ[I]V2 → 𝐔❪f❫ → + ∃∃K1,V1. ⇩*[b,f] L1 ≘ K1.ⓑ[I]V1 & K1 ⪤[R] K2 & R K1 V1 V2. #R #L1 #L2 * #f2 #Hf2 #HL12 #b #f #I #K2 #V2 #HLK2 #Hf elim (sex_drops_trans_push … HL12 … HLK2 Hf f2) -L2 -Hf [ #Z1 #K1 #HLK1 #HK12 #H diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/drops_seq.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/drops_seq.ma index af2c4ef88..8047fdd68 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/drops_seq.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/drops_seq.ma @@ -30,9 +30,9 @@ lemma seq_co_dropable_dx: co_dropable_dx seq. (* Basic_2A1: includes: lreq_drop_trans_be *) lemma seq_drops_trans_next: ∀f2,L1,L2. L1 ≡[f2] L2 → - ∀b,f,I,K2. ⇩*[b,f] L2 ≘ K2.ⓘ{I} → 𝐔⦃f⦄ → + ∀b,f,I,K2. ⇩*[b,f] L2 ≘ K2.ⓘ[I] → 𝐔❪f❫ → ∀f1. f ~⊚ ↑f1 ≘ f2 → - ∃∃K1. ⇩*[b,f] L1 ≘ K1.ⓘ{I} & K1 ≡[f1] K2. + ∃∃K1. ⇩*[b,f] L1 ≘ K1.ⓘ[I] & K1 ≡[f1] K2. #f2 #L1 #L2 #HL12 #b #f #I2 #K2 #HLK2 #Hf #f1 #Hf2 elim (sex_drops_trans_next … HL12 … HLK2 Hf … Hf2) -f2 -L2 -Hf #I1 #K1 #HLK1 #HK12 #H <(ceq_ext_inv_eq … H) -I2 @@ -41,18 +41,18 @@ qed-. (* Basic_2A1: includes: lreq_drop_conf_be *) lemma seq_drops_conf_next: ∀f2,L1,L2. L1 ≡[f2] L2 → - ∀b,f,I,K1. ⇩*[b,f] L1 ≘ K1.ⓘ{I} → 𝐔⦃f⦄ → + ∀b,f,I,K1. ⇩*[b,f] L1 ≘ K1.ⓘ[I] → 𝐔❪f❫ → ∀f1. f ~⊚ ↑f1 ≘ f2 → - ∃∃K2. ⇩*[b,f] L2 ≘ K2.ⓘ{I} & K1 ≡[f1] K2. + ∃∃K2. ⇩*[b,f] L2 ≘ K2.ⓘ[I] & K1 ≡[f1] K2. #f2 #L1 #L2 #HL12 #b #f #I1 #K1 #HLK1 #Hf #f1 #Hf2 elim (seq_drops_trans_next … (seq_sym … HL12) … HLK1 … Hf2) // -f2 -L1 -Hf /3 width=3 by seq_sym, ex2_intro/ qed-. lemma drops_seq_trans_next: ∀f1,K1,K2. K1 ≡[f1] K2 → - ∀b,f,I,L1. ⇩*[b,f] L1.ⓘ{I} ≘ K1 → + ∀b,f,I,L1. ⇩*[b,f] L1.ⓘ[I] ≘ K1 → ∀f2. f ~⊚ f1 ≘ ↑f2 → - ∃∃L2. ⇩*[b,f] L2.ⓘ{I} ≘ K2 & L1 ≡[f2] L2 & L1.ⓘ{I} ≡[f] L2.ⓘ{I}. + ∃∃L2. ⇩*[b,f] L2.ⓘ[I] ≘ K2 & L1 ≡[f2] L2 & L1.ⓘ[I] ≡[f] L2.ⓘ[I]. #f1 #K1 #K2 #HK12 #b #f #I1 #L1 #HLK1 #f2 #Hf2 elim (drops_sex_trans_next … HK12 … HLK1 … Hf2) -f1 -K1 /2 width=6 by cfull_lift_sn, ceq_lift_sn/ diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/drops_sex.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/drops_sex.ma index 129f950eb..edec3dcc5 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/drops_sex.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/drops_sex.ma @@ -87,7 +87,7 @@ lemma sex_liftable_co_dedropable_sn: ∀RN,RP. (∀L. reflexive … (RN L)) → ] qed-. -fact sex_dropable_dx_aux: ∀RN,RP,b,f,L2,K2. ⇩*[b,f] L2 ≘ K2 → 𝐔⦃f⦄ → +fact sex_dropable_dx_aux: ∀RN,RP,b,f,L2,K2. ⇩*[b,f] L2 ≘ K2 → 𝐔❪f❫ → ∀f2,L1. L1 ⪤[RN,RP,f2] L2 → ∀f1. f ~⊚ f1 ≘ f2 → ∃∃K1. ⇩*[b,f] L1 ≘ K1 & K1 ⪤[RN,RP,f1] K2. #RN #RP #b #f #L2 #K2 #H elim H -f -L2 -K2 @@ -114,9 +114,9 @@ lemma sex_co_dropable_dx: ∀RN,RP. co_dropable_dx (sex RN RP). lemma sex_drops_conf_next: ∀RN,RP. ∀f2,L1,L2. L1 ⪤[RN,RP,f2] L2 → - ∀b,f,I1,K1. ⇩*[b,f] L1 ≘ K1.ⓘ{I1} → 𝐔⦃f⦄ → + ∀b,f,I1,K1. ⇩*[b,f] L1 ≘ K1.ⓘ[I1] → 𝐔❪f❫ → ∀f1. f ~⊚ ↑f1 ≘ f2 → - ∃∃I2,K2. ⇩*[b,f] L2 ≘ K2.ⓘ{I2} & K1 ⪤[RN,RP,f1] K2 & RN K1 I1 I2. + ∃∃I2,K2. ⇩*[b,f] L2 ≘ K2.ⓘ[I2] & K1 ⪤[RN,RP,f1] K2 & RN K1 I1 I2. #RN #RP #f2 #L1 #L2 #HL12 #b #f #I1 #K1 #HLK1 #Hf #f1 #Hf2 elim (sex_co_dropable_sn … HLK1 … Hf … HL12 … Hf2) -L1 -f2 -Hf #X #HX #HLK2 elim (sex_inv_next1 … HX) -HX @@ -125,9 +125,9 @@ qed-. lemma sex_drops_conf_push: ∀RN,RP. ∀f2,L1,L2. L1 ⪤[RN,RP,f2] L2 → - ∀b,f,I1,K1. ⇩*[b,f] L1 ≘ K1.ⓘ{I1} → 𝐔⦃f⦄ → + ∀b,f,I1,K1. ⇩*[b,f] L1 ≘ K1.ⓘ[I1] → 𝐔❪f❫ → ∀f1. f ~⊚ ⫯f1 ≘ f2 → - ∃∃I2,K2. ⇩*[b,f] L2 ≘ K2.ⓘ{I2} & K1 ⪤[RN,RP,f1] K2 & RP K1 I1 I2. + ∃∃I2,K2. ⇩*[b,f] L2 ≘ K2.ⓘ[I2] & K1 ⪤[RN,RP,f1] K2 & RP K1 I1 I2. #RN #RP #f2 #L1 #L2 #HL12 #b #f #I1 #K1 #HLK1 #Hf #f1 #Hf2 elim (sex_co_dropable_sn … HLK1 … Hf … HL12 … Hf2) -L1 -f2 -Hf #X #HX #HLK2 elim (sex_inv_push1 … HX) -HX @@ -135,9 +135,9 @@ elim (sex_co_dropable_sn … HLK1 … Hf … HL12 … Hf2) -L1 -f2 -Hf qed-. lemma sex_drops_trans_next: ∀RN,RP,f2,L1,L2. L1 ⪤[RN,RP,f2] L2 → - ∀b,f,I2,K2. ⇩*[b,f] L2 ≘ K2.ⓘ{I2} → 𝐔⦃f⦄ → + ∀b,f,I2,K2. ⇩*[b,f] L2 ≘ K2.ⓘ[I2] → 𝐔❪f❫ → ∀f1. f ~⊚ ↑f1 ≘ f2 → - ∃∃I1,K1. ⇩*[b,f] L1 ≘ K1.ⓘ{I1} & K1 ⪤[RN,RP,f1] K2 & RN K1 I1 I2. + ∃∃I1,K1. ⇩*[b,f] L1 ≘ K1.ⓘ[I1] & K1 ⪤[RN,RP,f1] K2 & RN K1 I1 I2. #RN #RP #f2 #L1 #L2 #HL12 #b #f #I2 #K2 #HLK2 #Hf #f1 #Hf2 elim (sex_co_dropable_dx … HL12 … HLK2 … Hf … Hf2) -L2 -f2 -Hf #X #HLK1 #HX elim (sex_inv_next2 … HX) -HX @@ -145,9 +145,9 @@ elim (sex_co_dropable_dx … HL12 … HLK2 … Hf … Hf2) -L2 -f2 -Hf qed-. lemma sex_drops_trans_push: ∀RN,RP,f2,L1,L2. L1 ⪤[RN,RP,f2] L2 → - ∀b,f,I2,K2. ⇩*[b,f] L2 ≘ K2.ⓘ{I2} → 𝐔⦃f⦄ → + ∀b,f,I2,K2. ⇩*[b,f] L2 ≘ K2.ⓘ[I2] → 𝐔❪f❫ → ∀f1. f ~⊚ ⫯f1 ≘ f2 → - ∃∃I1,K1. ⇩*[b,f] L1 ≘ K1.ⓘ{I1} & K1 ⪤[RN,RP,f1] K2 & RP K1 I1 I2. + ∃∃I1,K1. ⇩*[b,f] L1 ≘ K1.ⓘ[I1] & K1 ⪤[RN,RP,f1] K2 & RP K1 I1 I2. #RN #RP #f2 #L1 #L2 #HL12 #b #f #I2 #K2 #HLK2 #Hf #f1 #Hf2 elim (sex_co_dropable_dx … HL12 … HLK2 … Hf … Hf2) -L2 -f2 -Hf #X #HLK1 #HX elim (sex_inv_push2 … HX) -HX @@ -157,9 +157,9 @@ qed-. lemma drops_sex_trans_next: ∀RN,RP. (∀L. reflexive ? (RN L)) → (∀L. reflexive ? (RP L)) → d_liftable2_sn … liftsb RN → d_liftable2_sn … liftsb RP → ∀f1,K1,K2. K1 ⪤[RN,RP,f1] K2 → - ∀b,f,I1,L1. ⇩*[b,f] L1.ⓘ{I1} ≘ K1 → + ∀b,f,I1,L1. ⇩*[b,f] L1.ⓘ[I1] ≘ K1 → ∀f2. f ~⊚ f1 ≘ ↑f2 → - ∃∃I2,L2. ⇩*[b,f] L2.ⓘ{I2} ≘ K2 & L1 ⪤[RN,RP,f2] L2 & RN L1 I1 I2 & L1.ⓘ{I1} ≡[f] L2.ⓘ{I2}. + ∃∃I2,L2. ⇩*[b,f] L2.ⓘ[I2] ≘ K2 & L1 ⪤[RN,RP,f2] L2 & RN L1 I1 I2 & L1.ⓘ[I1] ≡[f] L2.ⓘ[I2]. #RN #RP #H1RN #H1RP #H2RN #H2RP #f1 #K1 #K2 #HK12 #b #f #I1 #L1 #HLK1 #f2 #Hf2 elim (sex_liftable_co_dedropable_sn … H1RN H1RP H2RN H2RP … HLK1 … HK12 … Hf2) -K1 -f1 -H1RN -H1RP -H2RN -H2RP #X #HX #HLK2 #H1L12 elim (sex_inv_next1 … HX) -HX @@ -169,16 +169,16 @@ qed-. lemma drops_sex_trans_push: ∀RN,RP. (∀L. reflexive ? (RN L)) → (∀L. reflexive ? (RP L)) → d_liftable2_sn … liftsb RN → d_liftable2_sn … liftsb RP → ∀f1,K1,K2. K1 ⪤[RN,RP,f1] K2 → - ∀b,f,I1,L1. ⇩*[b,f] L1.ⓘ{I1} ≘ K1 → + ∀b,f,I1,L1. ⇩*[b,f] L1.ⓘ[I1] ≘ K1 → ∀f2. f ~⊚ f1 ≘ ⫯f2 → - ∃∃I2,L2. ⇩*[b,f] L2.ⓘ{I2} ≘ K2 & L1 ⪤[RN,RP,f2] L2 & RP L1 I1 I2 & L1.ⓘ{I1} ≡[f] L2.ⓘ{I2}. + ∃∃I2,L2. ⇩*[b,f] L2.ⓘ[I2] ≘ K2 & L1 ⪤[RN,RP,f2] L2 & RP L1 I1 I2 & L1.ⓘ[I1] ≡[f] L2.ⓘ[I2]. #RN #RP #H1RN #H1RP #H2RN #H2RP #f1 #K1 #K2 #HK12 #b #f #I1 #L1 #HLK1 #f2 #Hf2 elim (sex_liftable_co_dedropable_sn … H1RN H1RP H2RN H2RP … HLK1 … HK12 … Hf2) -K1 -f1 -H1RN -H1RP -H2RN -H2RP #X #HX #HLK2 #H1L12 elim (sex_inv_push1 … HX) -HX #I2 #L2 #H2L12 #HI12 #H destruct /2 width=6 by ex4_2_intro/ qed-. -lemma drops_atom2_sex_conf: ∀RN,RP,b,f1,L1. ⇩*[b,f1] L1 ≘ ⋆ → 𝐔⦃f1⦄ → +lemma drops_atom2_sex_conf: ∀RN,RP,b,f1,L1. ⇩*[b,f1] L1 ≘ ⋆ → 𝐔❪f1❫ → ∀f,L2. L1 ⪤[RN,RP,f] L2 → ∀f2. f1 ~⊚ f2 ≘f → ⇩*[b,f1] L2 ≘ ⋆. #RN #RP #b #f1 #L1 #H1 #Hf1 #f #L2 #H2 #f2 #H3 diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/drops_weight.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/drops_weight.ma index e6bd458ea..975b01523 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/drops_weight.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/drops_weight.ma @@ -21,7 +21,7 @@ include "static_2/relocation/drops.ma". (* Forward lemmas with weight for local environments ************************) (* Basic_2A1: includes: drop_fwd_lw *) -lemma drops_fwd_lw: ∀b,f,L1,L2. ⇩*[b,f] L1 ≘ L2 → ♯{L2} ≤ ♯{L1}. +lemma drops_fwd_lw: ∀b,f,L1,L2. ⇩*[b,f] L1 ≘ L2 → ♯❨L2❩ ≤ ♯❨L1❩. #b #f #L1 #L2 #H elim H -f -L1 -L2 // [ /2 width=3 by transitive_le/ | #f #I1 #I2 #L1 #L2 #_ #HI21 #IHL12 normalize @@ -31,7 +31,7 @@ qed-. (* Basic_2A1: includes: drop_fwd_lw_lt *) lemma drops_fwd_lw_lt: ∀f,L1,L2. ⇩*[Ⓣ,f] L1 ≘ L2 → - (𝐈⦃f⦄ → ⊥) → ♯{L2} < ♯{L1}. + (𝐈❪f❫ → ⊥) → ♯❨L2❩ < ♯❨L1❩. #f #L1 #L2 #H elim H -f -L1 -L2 [ #f #Hf #Hnf elim Hnf -Hnf /2 width=1 by/ | /3 width=3 by drops_fwd_lw, le_to_lt_to_lt/ @@ -43,14 +43,14 @@ qed-. (* Forward lemmas with restricted weight for closures ***********************) (* Basic_2A1: includes: drop_fwd_rfw *) -lemma drops_bind2_fwd_rfw: ∀b,f,I,L,K,V. ⇩*[b,f] L ≘ K.ⓑ{I}V → ∀T. ♯{K,V} < ♯{L,T}. +lemma drops_bind2_fwd_rfw: ∀b,f,I,L,K,V. ⇩*[b,f] L ≘ K.ⓑ[I]V → ∀T. ♯❨K,V❩ < ♯❨L,T❩. #b #f #I #L #K #V #HLK lapply (drops_fwd_lw … HLK) -HLK normalize in ⊢ (%→?→?%%); /3 width=3 by le_to_lt_to_lt, monotonic_lt_plus_r/ qed-. (* Advanced inversion lemma *************************************************) -lemma drops_inv_x_bind_xy: ∀b,f,I,L. ⇩*[b,f] L ≘ L.ⓘ{I} → ⊥. +lemma drops_inv_x_bind_xy: ∀b,f,I,L. ⇩*[b,f] L ≘ L.ⓘ[I] → ⊥. #b #f #I #L #H lapply (drops_fwd_lw … H) -b -f /2 width=4 by lt_le_false/ (**) (* full auto is a bit slow: 19s *) qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/lex.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/lex.ma index cc4bf1797..6ca29e586 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/lex.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/lex.ma @@ -21,7 +21,7 @@ include "static_2/relocation/sex.ma". (* GENERIC EXTENSION OF A CONTEXT-SENSITIVE REALTION FOR TERMS **************) definition lex (R): relation lenv ≝ - λL1,L2. ∃∃f. 𝐈⦃f⦄ & L1 ⪤[cfull,cext2 R,f] L2. + λL1,L2. ∃∃f. 𝐈❪f❫ & L1 ⪤[cfull,cext2 R,f] L2. interpretation "generic extension (local environment)" 'Relation R L1 L2 = (lex R L1 L2). @@ -42,7 +42,7 @@ lemma lex_atom (R): ⋆ ⪤[R] ⋆. /2 width=3 by sex_atom, ex2_intro/ qed. lemma lex_bind (R): ∀I1,I2,K1,K2. K1 ⪤[R] K2 → cext2 R K1 I1 I2 → - K1.ⓘ{I1} ⪤[R] K2.ⓘ{I2}. + K1.ⓘ[I1] ⪤[R] K2.ⓘ[I2]. #R #I1 #I2 #K1 #K2 * #f #Hf #HK12 #HI12 /3 width=3 by sex_push, isid_push, ex2_intro/ qed. @@ -59,15 +59,15 @@ qed-. (* Advanced properties ******************************************************) lemma lex_bind_refl_dx (R): c_reflexive … R → - ∀I,K1,K2. K1 ⪤[R] K2 → K1.ⓘ{I} ⪤[R] K2.ⓘ{I}. + ∀I,K1,K2. K1 ⪤[R] K2 → K1.ⓘ[I] ⪤[R] K2.ⓘ[I]. /3 width=3 by ext2_refl, lex_bind/ qed. -lemma lex_unit (R): ∀I,K1,K2. K1 ⪤[R] K2 → K1.ⓤ{I} ⪤[R] K2.ⓤ{I}. +lemma lex_unit (R): ∀I,K1,K2. K1 ⪤[R] K2 → K1.ⓤ[I] ⪤[R] K2.ⓤ[I]. /3 width=1 by lex_bind, ext2_unit/ qed. (* Basic_2A1: was: lpx_sn_pair *) lemma lex_pair (R): ∀I,K1,K2,V1,V2. K1 ⪤[R] K2 → R K1 V1 V2 → - K1.ⓑ{I}V1 ⪤[R] K2.ⓑ{I}V2. + K1.ⓑ[I]V1 ⪤[R] K2.ⓑ[I]V2. /3 width=1 by lex_bind, ext2_pair/ qed. (* Basic inversion lemmas ***************************************************) @@ -77,8 +77,8 @@ lemma lex_inv_atom_sn (R): ∀L2. ⋆ ⪤[R] L2 → L2 = ⋆. #R #L2 * #f #Hf #H >(sex_inv_atom1 … H) -L2 // qed-. -lemma lex_inv_bind_sn (R): ∀I1,L2,K1. K1.ⓘ{I1} ⪤[R] L2 → - ∃∃I2,K2. K1 ⪤[R] K2 & cext2 R K1 I1 I2 & L2 = K2.ⓘ{I2}. +lemma lex_inv_bind_sn (R): ∀I1,L2,K1. K1.ⓘ[I1] ⪤[R] L2 → + ∃∃I2,K2. K1 ⪤[R] K2 & cext2 R K1 I1 I2 & L2 = K2.ⓘ[I2]. #R #I1 #L2 #K1 * #f #Hf #H lapply (sex_eq_repl_fwd … H (⫯f) ?) -H /2 width=1 by eq_push_inv_isid/ #H elim (sex_inv_push1 … H) -H #I2 #K2 #HK12 #HI12 #H destruct @@ -90,8 +90,8 @@ lemma lex_inv_atom_dx (R): ∀L1. L1 ⪤[R] ⋆ → L1 = ⋆. #R #L1 * #f #Hf #H >(sex_inv_atom2 … H) -L1 // qed-. -lemma lex_inv_bind_dx (R): ∀I2,L1,K2. L1 ⪤[R] K2.ⓘ{I2} → - ∃∃I1,K1. K1 ⪤[R] K2 & cext2 R K1 I1 I2 & L1 = K1.ⓘ{I1}. +lemma lex_inv_bind_dx (R): ∀I2,L1,K2. L1 ⪤[R] K2.ⓘ[I2] → + ∃∃I1,K1. K1 ⪤[R] K2 & cext2 R K1 I1 I2 & L1 = K1.ⓘ[I1]. #R #I2 #L1 #K2 * #f #Hf #H lapply (sex_eq_repl_fwd … H (⫯f) ?) -H /2 width=1 by eq_push_inv_isid/ #H elim (sex_inv_push2 … H) -H #I1 #K1 #HK12 #HI12 #H destruct @@ -100,8 +100,8 @@ qed-. (* Advanced inversion lemmas ************************************************) -lemma lex_inv_unit_sn (R): ∀I,L2,K1. K1.ⓤ{I} ⪤[R] L2 → - ∃∃K2. K1 ⪤[R] K2 & L2 = K2.ⓤ{I}. +lemma lex_inv_unit_sn (R): ∀I,L2,K1. K1.ⓤ[I] ⪤[R] L2 → + ∃∃K2. K1 ⪤[R] K2 & L2 = K2.ⓤ[I]. #R #I #L2 #K1 #H elim (lex_inv_bind_sn … H) -H #Z2 #K2 #HK12 #HZ2 #H destruct elim (ext2_inv_unit_sn … HZ2) -HZ2 @@ -109,16 +109,16 @@ elim (ext2_inv_unit_sn … HZ2) -HZ2 qed-. (* Basic_2A1: was: lpx_sn_inv_pair1 *) -lemma lex_inv_pair_sn (R): ∀I,L2,K1,V1. K1.ⓑ{I}V1 ⪤[R] L2 → - ∃∃K2,V2. K1 ⪤[R] K2 & R K1 V1 V2 & L2 = K2.ⓑ{I}V2. +lemma lex_inv_pair_sn (R): ∀I,L2,K1,V1. K1.ⓑ[I]V1 ⪤[R] L2 → + ∃∃K2,V2. K1 ⪤[R] K2 & R K1 V1 V2 & L2 = K2.ⓑ[I]V2. #R #I #L2 #K1 #V1 #H elim (lex_inv_bind_sn … H) -H #Z2 #K2 #HK12 #HZ2 #H destruct elim (ext2_inv_pair_sn … HZ2) -HZ2 #V2 #HV12 #H destruct /2 width=5 by ex3_2_intro/ qed-. -lemma lex_inv_unit_dx (R): ∀I,L1,K2. L1 ⪤[R] K2.ⓤ{I} → - ∃∃K1. K1 ⪤[R] K2 & L1 = K1.ⓤ{I}. +lemma lex_inv_unit_dx (R): ∀I,L1,K2. L1 ⪤[R] K2.ⓤ[I] → + ∃∃K1. K1 ⪤[R] K2 & L1 = K1.ⓤ[I]. #R #I #L1 #K2 #H elim (lex_inv_bind_dx … H) -H #Z1 #K1 #HK12 #HZ1 #H destruct elim (ext2_inv_unit_dx … HZ1) -HZ1 @@ -126,8 +126,8 @@ elim (ext2_inv_unit_dx … HZ1) -HZ1 qed-. (* Basic_2A1: was: lpx_sn_inv_pair2 *) -lemma lex_inv_pair_dx (R): ∀I,L1,K2,V2. L1 ⪤[R] K2.ⓑ{I}V2 → - ∃∃K1,V1. K1 ⪤[R] K2 & R K1 V1 V2 & L1 = K1.ⓑ{I}V1. +lemma lex_inv_pair_dx (R): ∀I,L1,K2,V2. L1 ⪤[R] K2.ⓑ[I]V2 → + ∃∃K1,V1. K1 ⪤[R] K2 & R K1 V1 V2 & L1 = K1.ⓑ[I]V1. #R #I #L1 #K2 #V2 #H elim (lex_inv_bind_dx … H) -H #Z1 #K1 #HK12 #HZ1 #H destruct elim (ext2_inv_pair_dx … HZ1) -HZ1 #V1 #HV12 #H destruct @@ -136,7 +136,7 @@ qed-. (* Basic_2A1: was: lpx_sn_inv_pair *) lemma lex_inv_pair (R): ∀I1,I2,L1,L2,V1,V2. - L1.ⓑ{I1}V1 ⪤[R] L2.ⓑ{I2}V2 → + L1.ⓑ[I1]V1 ⪤[R] L2.ⓑ[I2]V2 → ∧∧ L1 ⪤[R] L2 & R L1 V1 V2 & I1 = I2. #R #I1 #I2 #L1 #L2 #V1 #V2 #H elim (lex_inv_pair_sn … H) -H #L0 #V0 #HL10 #HV10 #H destruct /2 width=1 by and3_intro/ @@ -147,9 +147,9 @@ qed-. lemma lex_ind (R) (Q:relation2 …): Q (⋆) (⋆) → ( - ∀I,K1,K2. K1 ⪤[R] K2 → Q K1 K2 → Q (K1.ⓤ{I}) (K2.ⓤ{I}) + ∀I,K1,K2. K1 ⪤[R] K2 → Q K1 K2 → Q (K1.ⓤ[I]) (K2.ⓤ[I]) ) → ( - ∀I,K1,K2,V1,V2. K1 ⪤[R] K2 → Q K1 K2 → R K1 V1 V2 →Q (K1.ⓑ{I}V1) (K2.ⓑ{I}V2) + ∀I,K1,K2,V1,V2. K1 ⪤[R] K2 → Q K1 K2 → R K1 V1 V2 →Q (K1.ⓑ[I]V1) (K2.ⓑ[I]V2) ) → ∀L1,L2. L1 ⪤[R] L2 → Q L1 L2. #R #Q #IH1 #IH2 #IH3 #L1 #L2 * #f @pull_2 #H diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/lifts.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/lifts.ma index 9116951c3..6bdf97c00 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/lifts.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/lifts.ma @@ -24,14 +24,14 @@ include "static_2/syntax/term.ma". *) inductive lifts: rtmap → relation term ≝ | lifts_sort: ∀f,s. lifts f (⋆s) (⋆s) -| lifts_lref: ∀f,i1,i2. @⦃i1,f⦄ ≘ i2 → lifts f (#i1) (#i2) +| lifts_lref: ∀f,i1,i2. @❪i1,f❫ ≘ i2 → lifts f (#i1) (#i2) | lifts_gref: ∀f,l. lifts f (§l) (§l) | lifts_bind: ∀f,p,I,V1,V2,T1,T2. lifts f V1 V2 → lifts (⫯f) T1 T2 → - lifts f (ⓑ{p,I}V1.T1) (ⓑ{p,I}V2.T2) + lifts f (ⓑ[p,I]V1.T1) (ⓑ[p,I]V2.T2) | lifts_flat: ∀f,I,V1,V2,T1,T2. lifts f V1 V2 → lifts f T1 T2 → - lifts f (ⓕ{I}V1.T1) (ⓕ{I}V2.T2) + lifts f (ⓕ[I]V1.T1) (ⓕ[I]V2.T2) . interpretation "uniform relocation (term)" @@ -80,7 +80,7 @@ lemma lifts_inv_sort1: ∀f,Y,s. ⇧*[f] ⋆s ≘ Y → Y = ⋆s. /2 width=4 by lifts_inv_sort1_aux/ qed-. fact lifts_inv_lref1_aux: ∀f,X,Y. ⇧*[f] X ≘ Y → ∀i1. X = #i1 → - ∃∃i2. @⦃i1,f⦄ ≘ i2 & Y = #i2. + ∃∃i2. @❪i1,f❫ ≘ i2 & Y = #i2. #f #X #Y * -f -X -Y [ #f #s #x #H destruct | #f #i1 #i2 #Hi12 #x #H destruct /2 width=3 by ex2_intro/ @@ -93,7 +93,7 @@ qed-. (* Basic_1: was: lift1_lref *) (* Basic_2A1: includes: lift_inv_lref1 lift_inv_lref1_lt lift_inv_lref1_ge *) lemma lifts_inv_lref1: ∀f,Y,i1. ⇧*[f] #i1 ≘ Y → - ∃∃i2. @⦃i1,f⦄ ≘ i2 & Y = #i2. + ∃∃i2. @❪i1,f❫ ≘ i2 & Y = #i2. /2 width=3 by lifts_inv_lref1_aux/ qed-. fact lifts_inv_gref1_aux: ∀f,X,Y. ⇧*[f] X ≘ Y → ∀l. X = §l → Y = §l. @@ -109,9 +109,9 @@ lemma lifts_inv_gref1: ∀f,Y,l. ⇧*[f] §l ≘ Y → Y = §l. /2 width=4 by lifts_inv_gref1_aux/ qed-. fact lifts_inv_bind1_aux: ∀f,X,Y. ⇧*[f] X ≘ Y → - ∀p,I,V1,T1. X = ⓑ{p,I}V1.T1 → + ∀p,I,V1,T1. X = ⓑ[p,I]V1.T1 → ∃∃V2,T2. ⇧*[f] V1 ≘ V2 & ⇧*[⫯f] T1 ≘ T2 & - Y = ⓑ{p,I}V2.T2. + Y = ⓑ[p,I]V2.T2. #f #X #Y * -f -X -Y [ #f #s #q #J #W1 #U1 #H destruct | #f #i1 #i2 #_ #q #J #W1 #U1 #H destruct @@ -123,15 +123,15 @@ qed-. (* Basic_1: was: lift1_bind *) (* Basic_2A1: includes: lift_inv_bind1 *) -lemma lifts_inv_bind1: ∀f,p,I,V1,T1,Y. ⇧*[f] ⓑ{p,I}V1.T1 ≘ Y → +lemma lifts_inv_bind1: ∀f,p,I,V1,T1,Y. ⇧*[f] ⓑ[p,I]V1.T1 ≘ Y → ∃∃V2,T2. ⇧*[f] V1 ≘ V2 & ⇧*[⫯f] T1 ≘ T2 & - Y = ⓑ{p,I}V2.T2. + Y = ⓑ[p,I]V2.T2. /2 width=3 by lifts_inv_bind1_aux/ qed-. fact lifts_inv_flat1_aux: ∀f:rtmap. ∀X,Y. ⇧*[f] X ≘ Y → - ∀I,V1,T1. X = ⓕ{I}V1.T1 → + ∀I,V1,T1. X = ⓕ[I]V1.T1 → ∃∃V2,T2. ⇧*[f] V1 ≘ V2 & ⇧*[f] T1 ≘ T2 & - Y = ⓕ{I}V2.T2. + Y = ⓕ[I]V2.T2. #f #X #Y * -f -X -Y [ #f #s #J #W1 #U1 #H destruct | #f #i1 #i2 #_ #J #W1 #U1 #H destruct @@ -143,9 +143,9 @@ qed-. (* Basic_1: was: lift1_flat *) (* Basic_2A1: includes: lift_inv_flat1 *) -lemma lifts_inv_flat1: ∀f:rtmap. ∀I,V1,T1,Y. ⇧*[f] ⓕ{I}V1.T1 ≘ Y → +lemma lifts_inv_flat1: ∀f:rtmap. ∀I,V1,T1,Y. ⇧*[f] ⓕ[I]V1.T1 ≘ Y → ∃∃V2,T2. ⇧*[f] V1 ≘ V2 & ⇧*[f] T1 ≘ T2 & - Y = ⓕ{I}V2.T2. + Y = ⓕ[I]V2.T2. /2 width=3 by lifts_inv_flat1_aux/ qed-. fact lifts_inv_sort2_aux: ∀f,X,Y. ⇧*[f] X ≘ Y → ∀s. Y = ⋆s → X = ⋆s. @@ -162,7 +162,7 @@ lemma lifts_inv_sort2: ∀f,X,s. ⇧*[f] X ≘ ⋆s → X = ⋆s. /2 width=4 by lifts_inv_sort2_aux/ qed-. fact lifts_inv_lref2_aux: ∀f,X,Y. ⇧*[f] X ≘ Y → ∀i2. Y = #i2 → - ∃∃i1. @⦃i1,f⦄ ≘ i2 & X = #i1. + ∃∃i1. @❪i1,f❫ ≘ i2 & X = #i1. #f #X #Y * -f -X -Y [ #f #s #x #H destruct | #f #i1 #i2 #Hi12 #x #H destruct /2 width=3 by ex2_intro/ @@ -175,7 +175,7 @@ qed-. (* Basic_1: includes: lift_gen_lref lift_gen_lref_lt lift_gen_lref_false lift_gen_lref_ge *) (* Basic_2A1: includes: lift_inv_lref2 lift_inv_lref2_lt lift_inv_lref2_be lift_inv_lref2_ge lift_inv_lref2_plus *) lemma lifts_inv_lref2: ∀f,X,i2. ⇧*[f] X ≘ #i2 → - ∃∃i1. @⦃i1,f⦄ ≘ i2 & X = #i1. + ∃∃i1. @❪i1,f❫ ≘ i2 & X = #i1. /2 width=3 by lifts_inv_lref2_aux/ qed-. fact lifts_inv_gref2_aux: ∀f,X,Y. ⇧*[f] X ≘ Y → ∀l. Y = §l → X = §l. @@ -191,9 +191,9 @@ lemma lifts_inv_gref2: ∀f,X,l. ⇧*[f] X ≘ §l → X = §l. /2 width=4 by lifts_inv_gref2_aux/ qed-. fact lifts_inv_bind2_aux: ∀f,X,Y. ⇧*[f] X ≘ Y → - ∀p,I,V2,T2. Y = ⓑ{p,I}V2.T2 → + ∀p,I,V2,T2. Y = ⓑ[p,I]V2.T2 → ∃∃V1,T1. ⇧*[f] V1 ≘ V2 & ⇧*[⫯f] T1 ≘ T2 & - X = ⓑ{p,I}V1.T1. + X = ⓑ[p,I]V1.T1. #f #X #Y * -f -X -Y [ #f #s #q #J #W2 #U2 #H destruct | #f #i1 #i2 #_ #q #J #W2 #U2 #H destruct @@ -205,15 +205,15 @@ qed-. (* Basic_1: includes: lift_gen_bind *) (* Basic_2A1: includes: lift_inv_bind2 *) -lemma lifts_inv_bind2: ∀f,p,I,V2,T2,X. ⇧*[f] X ≘ ⓑ{p,I}V2.T2 → +lemma lifts_inv_bind2: ∀f,p,I,V2,T2,X. ⇧*[f] X ≘ ⓑ[p,I]V2.T2 → ∃∃V1,T1. ⇧*[f] V1 ≘ V2 & ⇧*[⫯f] T1 ≘ T2 & - X = ⓑ{p,I}V1.T1. + X = ⓑ[p,I]V1.T1. /2 width=3 by lifts_inv_bind2_aux/ qed-. fact lifts_inv_flat2_aux: ∀f:rtmap. ∀X,Y. ⇧*[f] X ≘ Y → - ∀I,V2,T2. Y = ⓕ{I}V2.T2 → + ∀I,V2,T2. Y = ⓕ[I]V2.T2 → ∃∃V1,T1. ⇧*[f] V1 ≘ V2 & ⇧*[f] T1 ≘ T2 & - X = ⓕ{I}V1.T1. + X = ⓕ[I]V1.T1. #f #X #Y * -f -X -Y [ #f #s #J #W2 #U2 #H destruct | #f #i1 #i2 #_ #J #W2 #U2 #H destruct @@ -225,16 +225,16 @@ qed-. (* Basic_1: includes: lift_gen_flat *) (* Basic_2A1: includes: lift_inv_flat2 *) -lemma lifts_inv_flat2: ∀f:rtmap. ∀I,V2,T2,X. ⇧*[f] X ≘ ⓕ{I}V2.T2 → +lemma lifts_inv_flat2: ∀f:rtmap. ∀I,V2,T2,X. ⇧*[f] X ≘ ⓕ[I]V2.T2 → ∃∃V1,T1. ⇧*[f] V1 ≘ V2 & ⇧*[f] T1 ≘ T2 & - X = ⓕ{I}V1.T1. + X = ⓕ[I]V1.T1. /2 width=3 by lifts_inv_flat2_aux/ qed-. (* Advanced inversion lemmas ************************************************) -lemma lifts_inv_atom1: ∀f,I,Y. ⇧*[f] ⓪{I} ≘ Y → +lemma lifts_inv_atom1: ∀f,I,Y. ⇧*[f] ⓪[I] ≘ Y → ∨∨ ∃∃s. I = Sort s & Y = ⋆s - | ∃∃i,j. @⦃i,f⦄ ≘ j & I = LRef i & Y = #j + | ∃∃i,j. @❪i,f❫ ≘ j & I = LRef i & Y = #j | ∃∃l. I = GRef l & Y = §l. #f * #n #Y #H [ lapply (lifts_inv_sort1 … H) @@ -243,9 +243,9 @@ lemma lifts_inv_atom1: ∀f,I,Y. ⇧*[f] ⓪{I} ≘ Y → ] -H /3 width=5 by or3_intro0, or3_intro1, or3_intro2, ex3_2_intro, ex2_intro/ qed-. -lemma lifts_inv_atom2: ∀f,I,X. ⇧*[f] X ≘ ⓪{I} → +lemma lifts_inv_atom2: ∀f,I,X. ⇧*[f] X ≘ ⓪[I] → ∨∨ ∃∃s. X = ⋆s & I = Sort s - | ∃∃i,j. @⦃i,f⦄ ≘ j & X = #i & I = LRef j + | ∃∃i,j. @❪i,f❫ ≘ j & X = #i & I = LRef j | ∃∃l. X = §l & I = GRef l. #f * #n #X #H [ lapply (lifts_inv_sort2 … H) @@ -255,7 +255,7 @@ lemma lifts_inv_atom2: ∀f,I,X. ⇧*[f] X ≘ ⓪{I} → qed-. (* Basic_2A1: includes: lift_inv_pair_xy_x *) -lemma lifts_inv_pair_xy_x: ∀f,I,V,T. ⇧*[f] ②{I}V.T ≘ V → ⊥. +lemma lifts_inv_pair_xy_x: ∀f,I,V,T. ⇧*[f] ②[I]V.T ≘ V → ⊥. #f #J #V elim V -V [ * #i #U #H [ lapply (lifts_inv_sort2 … H) -H #H destruct @@ -272,7 +272,7 @@ qed-. (* Basic_1: includes: thead_x_lift_y_y *) (* Basic_2A1: includes: lift_inv_pair_xy_y *) -lemma lifts_inv_pair_xy_y: ∀I,T,V,f. ⇧*[f] ②{I}V.T ≘ T → ⊥. +lemma lifts_inv_pair_xy_y: ∀I,T,V,f. ⇧*[f] ②[I]V.T ≘ T → ⊥. #J #T elim T -T [ * #i #W #f #H [ lapply (lifts_inv_sort2 … H) -H #H destruct @@ -328,14 +328,14 @@ qed-. (* Basic forward lemmas *****************************************************) (* Basic_2A1: includes: lift_inv_O2 *) -lemma lifts_fwd_isid: ∀f,T1,T2. ⇧*[f] T1 ≘ T2 → 𝐈⦃f⦄ → T1 = T2. +lemma lifts_fwd_isid: ∀f,T1,T2. ⇧*[f] T1 ≘ T2 → 𝐈❪f❫ → T1 = T2. #f #T1 #T2 #H elim H -f -T1 -T2 /4 width=3 by isid_inv_at_mono, isid_push, eq_f2, eq_f/ qed-. (* Basic_2A1: includes: lift_fwd_pair1 *) -lemma lifts_fwd_pair1: ∀f:rtmap. ∀I,V1,T1,Y. ⇧*[f] ②{I}V1.T1 ≘ Y → - ∃∃V2,T2. ⇧*[f] V1 ≘ V2 & Y = ②{I}V2.T2. +lemma lifts_fwd_pair1: ∀f:rtmap. ∀I,V1,T1,Y. ⇧*[f] ②[I]V1.T1 ≘ Y → + ∃∃V2,T2. ⇧*[f] V1 ≘ V2 & Y = ②[I]V2.T2. #f * [ #p ] #I #V1 #T1 #Y #H [ elim (lifts_inv_bind1 … H) -H /2 width=4 by ex2_2_intro/ | elim (lifts_inv_flat1 … H) -H /2 width=4 by ex2_2_intro/ @@ -343,8 +343,8 @@ lemma lifts_fwd_pair1: ∀f:rtmap. ∀I,V1,T1,Y. ⇧*[f] ②{I}V1.T1 ≘ Y → qed-. (* Basic_2A1: includes: lift_fwd_pair2 *) -lemma lifts_fwd_pair2: ∀f:rtmap. ∀I,V2,T2,X. ⇧*[f] X ≘ ②{I}V2.T2 → - ∃∃V1,T1. ⇧*[f] V1 ≘ V2 & X = ②{I}V1.T1. +lemma lifts_fwd_pair2: ∀f:rtmap. ∀I,V2,T2,X. ⇧*[f] X ≘ ②[I]V2.T2 → + ∃∃V1,T1. ⇧*[f] V1 ≘ V2 & X = ②[I]V1.T1. #f * [ #p ] #I #V2 #T2 #X #H [ elim (lifts_inv_bind2 … H) -H /2 width=4 by ex2_2_intro/ | elim (lifts_inv_flat2 … H) -H /2 width=4 by ex2_2_intro/ @@ -374,7 +374,7 @@ qed-. (* Basic_1: includes: lift_r *) (* Basic_2A1: includes: lift_refl *) -lemma lifts_refl: ∀T,f. 𝐈⦃f⦄ → ⇧*[f] T ≘ T. +lemma lifts_refl: ∀T,f. 𝐈❪f❫ → ⇧*[f] T ≘ T. #T elim T -T * /4 width=3 by lifts_flat, lifts_bind, lifts_lref, isid_inv_at, isid_push/ qed. @@ -476,7 +476,7 @@ qed-. (* Properties with uniform relocation ***************************************) -lemma lifts_uni: ∀n1,n2,T,U. ⇧*[𝐔❴n1❵∘𝐔❴n2❵] T ≘ U → ⇧*[n1+n2] T ≘ U. +lemma lifts_uni: ∀n1,n2,T,U. ⇧*[𝐔❨n1❩∘𝐔❨n2❩] T ≘ U → ⇧*[n1+n2] T ≘ U. /3 width=4 by lifts_eq_repl_back, after_inv_total/ qed. (* Basic_2A1: removed theorems 14: diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_bind.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_bind.ma index d3f36a65e..ec97e7a1b 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_bind.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_bind.ma @@ -48,7 +48,7 @@ lemma liftsb_eq_repl_back: ∀I1,I2. eq_repl_back … (λf. ⇧*[f] I1 ≘ I2). #I1 #I2 #f1 * -I1 -I2 /3 width=3 by lifts_eq_repl_back, ext2_pair/ qed-. -lemma liftsb_refl: ∀f. 𝐈⦃f⦄ → reflexive … (liftsb f). +lemma liftsb_refl: ∀f. 𝐈❪f❫ → reflexive … (liftsb f). /3 width=1 by lifts_refl, ext2_refl/ qed. lemma liftsb_total: ∀I1,f. ∃I2. ⇧*[f] I1 ≘ I2. @@ -66,6 +66,6 @@ qed-. (* Basic forward lemmas *****************************************************) -lemma liftsb_fwd_isid: ∀f,I1,I2. ⇧*[f] I1 ≘ I2 → 𝐈⦃f⦄ → I1 = I2. +lemma liftsb_fwd_isid: ∀f,I1,I2. ⇧*[f] I1 ≘ I2 → 𝐈❪f❫ → I1 = I2. #f #I1 #I2 * -I1 -I2 /3 width=3 by lifts_fwd_isid, eq_f2/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_simple.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_simple.ma index 4a01cd1ff..5984132eb 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_simple.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_simple.ma @@ -20,13 +20,13 @@ include "static_2/relocation/lifts.ma". (* Forward lemmas with simple terms *****************************************) (* Basic_2A1: includes: lift_simple_dx *) -lemma lifts_simple_dx: ∀f,T1,T2. ⇧*[f] T1 ≘ T2 → 𝐒⦃T1⦄ → 𝐒⦃T2⦄. +lemma lifts_simple_dx: ∀f,T1,T2. ⇧*[f] T1 ≘ T2 → 𝐒❪T1❫ → 𝐒❪T2❫. #f #T1 #T2 #H elim H -f -T1 -T2 // #f #p #I #V1 #V2 #T1 #T2 #_ #_ #_ #_ #H elim (simple_inv_bind … H) qed-. (* Basic_2A1: includes: lift_simple_sn *) -lemma lifts_simple_sn: ∀f,T1,T2. ⇧*[f] T1 ≘ T2 → 𝐒⦃T2⦄ → 𝐒⦃T1⦄. +lemma lifts_simple_sn: ∀f,T1,T2. ⇧*[f] T1 ≘ T2 → 𝐒❪T2❫ → 𝐒❪T1❫. #f #T1 #T2 #H elim H -f -T1 -T2 // #f #p #I #V1 #V2 #T1 #T2 #_ #_ #_ #_ #H elim (simple_inv_bind … H) qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_teqx.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_teqx.ma index e508856c6..2eef832e5 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_teqx.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_teqx.ma @@ -72,7 +72,7 @@ lemma teqx_inv_lifts_bi: deliftable2_bi teqx. /3 width=6 by teqx_inv_lifts_sn, deliftable2_sn_bi/ qed-. lemma teqx_lifts_inv_pair_sn (I) (f:rtmap): - ∀X,T. ⇧*[f]X ≘ T → ∀V. ②{I}V.T ≛ X → ⊥. + ∀X,T. ⇧*[f]X ≘ T → ∀V. ②[I]V.T ≛ X → ⊥. #I #f #X #T #H elim H -f -X -T [ #f #s #V #H elim (teqx_inv_pair1 … H) -H #X1 #X2 #_ #_ #H destruct diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_weight.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_weight.ma index e3830a0ac..d41099183 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_weight.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_weight.ma @@ -20,6 +20,6 @@ include "static_2/relocation/lifts.ma". (* Forward lemmas with weight for terms *************************************) (* Basic_2A1: includes: lift_fwd_tw *) -lemma lifts_fwd_tw: ∀f,T1,T2. ⇧*[f] T1 ≘ T2 → ♯{T1} = ♯{T2}. +lemma lifts_fwd_tw: ∀f,T1,T2. ⇧*[f] T1 ≘ T2 → ♯❨T1❩ = ♯❨T2❩. #f #T1 #T2 #H elim H -f -T1 -T2 normalize // qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_weight_bind.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_weight_bind.ma index 3d1bef200..43faaa001 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_weight_bind.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/lifts_weight_bind.ma @@ -20,6 +20,6 @@ include "static_2/relocation/lifts_bind.ma". (* Forward lemmas with weight for binders ***********************************) -lemma liftsb_fwd_bw: ∀f,I1,I2. ⇧*[f] I1 ≘ I2 → ♯{I1} = ♯{I2}. +lemma liftsb_fwd_bw: ∀f,I1,I2. ⇧*[f] I1 ≘ I2 → ♯❨I1❩ = ♯❨I2❩. #f #I1 #I2 * -I1 -I2 /2 width=2 by lifts_fwd_tw/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/seq.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/seq.ma index dcfbb0323..60830fa46 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/seq.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/seq.ma @@ -52,16 +52,16 @@ lemma seq_inv_atom1: ∀f,Y. ⋆ ≡[f] Y → Y = ⋆. /2 width=4 by sex_inv_atom1/ qed-. (* Basic_2A1: includes: lreq_inv_pair1 *) -lemma seq_inv_next1: ∀g,J,K1,Y. K1.ⓘ{J} ≡[↑g] Y → - ∃∃K2. K1 ≡[g] K2 & Y = K2.ⓘ{J}. +lemma seq_inv_next1: ∀g,J,K1,Y. K1.ⓘ[J] ≡[↑g] Y → + ∃∃K2. K1 ≡[g] K2 & Y = K2.ⓘ[J]. #g #J #K1 #Y #H elim (sex_inv_next1 … H) -H #Z #K2 #HK12 #H1 #H2 destruct <(ceq_ext_inv_eq … H1) -Z /2 width=3 by ex2_intro/ qed-. (* Basic_2A1: includes: lreq_inv_zero1 lreq_inv_succ1 *) -lemma seq_inv_push1: ∀g,J1,K1,Y. K1.ⓘ{J1} ≡[⫯g] Y → - ∃∃J2,K2. K1 ≡[g] K2 & Y = K2.ⓘ{J2}. +lemma seq_inv_push1: ∀g,J1,K1,Y. K1.ⓘ[J1] ≡[⫯g] Y → + ∃∃J2,K2. K1 ≡[g] K2 & Y = K2.ⓘ[J2]. #g #J1 #K1 #Y #H elim (sex_inv_push1 … H) -H /2 width=4 by ex2_2_intro/ qed-. @@ -70,32 +70,32 @@ lemma seq_inv_atom2: ∀f,X. X ≡[f] ⋆ → X = ⋆. /2 width=4 by sex_inv_atom2/ qed-. (* Basic_2A1: includes: lreq_inv_pair2 *) -lemma seq_inv_next2: ∀g,J,X,K2. X ≡[↑g] K2.ⓘ{J} → - ∃∃K1. K1 ≡[g] K2 & X = K1.ⓘ{J}. +lemma seq_inv_next2: ∀g,J,X,K2. X ≡[↑g] K2.ⓘ[J] → + ∃∃K1. K1 ≡[g] K2 & X = K1.ⓘ[J]. #g #J #X #K2 #H elim (sex_inv_next2 … H) -H #Z #K1 #HK12 #H1 #H2 destruct <(ceq_ext_inv_eq … H1) -J /2 width=3 by ex2_intro/ qed-. (* Basic_2A1: includes: lreq_inv_zero2 lreq_inv_succ2 *) -lemma seq_inv_push2: ∀g,J2,X,K2. X ≡[⫯g] K2.ⓘ{J2} → - ∃∃J1,K1. K1 ≡[g] K2 & X = K1.ⓘ{J1}. +lemma seq_inv_push2: ∀g,J2,X,K2. X ≡[⫯g] K2.ⓘ[J2] → + ∃∃J1,K1. K1 ≡[g] K2 & X = K1.ⓘ[J1]. #g #J2 #X #K2 #H elim (sex_inv_push2 … H) -H /2 width=4 by ex2_2_intro/ qed-. (* Basic_2A1: includes: lreq_inv_pair *) -lemma seq_inv_next: ∀f,I1,I2,L1,L2. L1.ⓘ{I1} ≡[↑f] L2.ⓘ{I2} → +lemma seq_inv_next: ∀f,I1,I2,L1,L2. L1.ⓘ[I1] ≡[↑f] L2.ⓘ[I2] → ∧∧ L1 ≡[f] L2 & I1 = I2. #f #I1 #I2 #L1 #L2 #H elim (sex_inv_next … H) -H /3 width=3 by ceq_ext_inv_eq, conj/ qed-. (* Basic_2A1: includes: lreq_inv_succ *) -lemma seq_inv_push: ∀f,I1,I2,L1,L2. L1.ⓘ{I1} ≡[⫯f] L2.ⓘ{I2} → L1 ≡[f] L2. +lemma seq_inv_push: ∀f,I1,I2,L1,L2. L1.ⓘ[I1] ≡[⫯f] L2.ⓘ[I2] → L1 ≡[f] L2. #f #I1 #I2 #L1 #L2 #H elim (sex_inv_push … H) -H /2 width=1 by conj/ qed-. -lemma seq_inv_tl: ∀f,I,L1,L2. L1 ≡[⫱f] L2 → L1.ⓘ{I} ≡[f] L2.ⓘ{I}. +lemma seq_inv_tl: ∀f,I,L1,L2. L1 ≡[⫱f] L2 → L1.ⓘ[I] ≡[f] L2.ⓘ[I]. /2 width=1 by sex_inv_tl/ qed-. (* Basic_2A1: removed theorems 5: diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/sex.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/sex.ma index 6eb1629fd..5994b4b62 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/sex.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/sex.ma @@ -23,10 +23,10 @@ inductive sex (RN,RP:relation3 lenv bind bind): rtmap → relation lenv ≝ | sex_atom: ∀f. sex RN RP f (⋆) (⋆) | sex_next: ∀f,I1,I2,L1,L2. sex RN RP f L1 L2 → RN L1 I1 I2 → - sex RN RP (↑f) (L1.ⓘ{I1}) (L2.ⓘ{I2}) + sex RN RP (↑f) (L1.ⓘ[I1]) (L2.ⓘ[I2]) | sex_push: ∀f,I1,I2,L1,L2. sex RN RP f L1 L2 → RP L1 I1 I2 → - sex RN RP (⫯f) (L1.ⓘ{I1}) (L2.ⓘ{I2}) + sex RN RP (⫯f) (L1.ⓘ[I1]) (L2.ⓘ[I2]) . interpretation "generic entrywise extension (local environment)" @@ -60,8 +60,8 @@ qed-. lemma sex_inv_atom1: ∀RN,RP,f,Y. ⋆ ⪤[RN,RP,f] Y → Y = ⋆. /2 width=6 by sex_inv_atom1_aux/ qed-. -fact sex_inv_next1_aux: ∀RN,RP,f,X,Y. X ⪤[RN,RP,f] Y → ∀g,J1,K1. X = K1.ⓘ{J1} → f = ↑g → - ∃∃J2,K2. K1 ⪤[RN,RP,g] K2 & RN K1 J1 J2 & Y = K2.ⓘ{J2}. +fact sex_inv_next1_aux: ∀RN,RP,f,X,Y. X ⪤[RN,RP,f] Y → ∀g,J1,K1. X = K1.ⓘ[J1] → f = ↑g → + ∃∃J2,K2. K1 ⪤[RN,RP,g] K2 & RN K1 J1 J2 & Y = K2.ⓘ[J2]. #RN #RP #f #X #Y * -f -X -Y [ #f #g #J1 #K1 #H destruct | #f #I1 #I2 #L1 #L2 #HL #HI #g #J1 #K1 #H1 #H2 <(injective_next … H2) -g destruct @@ -71,12 +71,12 @@ fact sex_inv_next1_aux: ∀RN,RP,f,X,Y. X ⪤[RN,RP,f] Y → ∀g,J1,K1. X = K1. qed-. (* Basic_2A1: includes lpx_sn_inv_pair1 *) -lemma sex_inv_next1: ∀RN,RP,g,J1,K1,Y. K1.ⓘ{J1} ⪤[RN,RP,↑g] Y → - ∃∃J2,K2. K1 ⪤[RN,RP,g] K2 & RN K1 J1 J2 & Y = K2.ⓘ{J2}. +lemma sex_inv_next1: ∀RN,RP,g,J1,K1,Y. K1.ⓘ[J1] ⪤[RN,RP,↑g] Y → + ∃∃J2,K2. K1 ⪤[RN,RP,g] K2 & RN K1 J1 J2 & Y = K2.ⓘ[J2]. /2 width=7 by sex_inv_next1_aux/ qed-. -fact sex_inv_push1_aux: ∀RN,RP,f,X,Y. X ⪤[RN,RP,f] Y → ∀g,J1,K1. X = K1.ⓘ{J1} → f = ⫯g → - ∃∃J2,K2. K1 ⪤[RN,RP,g] K2 & RP K1 J1 J2 & Y = K2.ⓘ{J2}. +fact sex_inv_push1_aux: ∀RN,RP,f,X,Y. X ⪤[RN,RP,f] Y → ∀g,J1,K1. X = K1.ⓘ[J1] → f = ⫯g → + ∃∃J2,K2. K1 ⪤[RN,RP,g] K2 & RP K1 J1 J2 & Y = K2.ⓘ[J2]. #RN #RP #f #X #Y * -f -X -Y [ #f #g #J1 #K1 #H destruct | #f #I1 #I2 #L1 #L2 #_ #_ #g #J1 #K1 #_ #H elim (discr_next_push … H) @@ -85,8 +85,8 @@ fact sex_inv_push1_aux: ∀RN,RP,f,X,Y. X ⪤[RN,RP,f] Y → ∀g,J1,K1. X = K1. ] qed-. -lemma sex_inv_push1: ∀RN,RP,g,J1,K1,Y. K1.ⓘ{J1} ⪤[RN,RP,⫯g] Y → - ∃∃J2,K2. K1 ⪤[RN,RP,g] K2 & RP K1 J1 J2 & Y = K2.ⓘ{J2}. +lemma sex_inv_push1: ∀RN,RP,g,J1,K1,Y. K1.ⓘ[J1] ⪤[RN,RP,⫯g] Y → + ∃∃J2,K2. K1 ⪤[RN,RP,g] K2 & RP K1 J1 J2 & Y = K2.ⓘ[J2]. /2 width=7 by sex_inv_push1_aux/ qed-. fact sex_inv_atom2_aux: ∀RN,RP,f,X,Y. X ⪤[RN,RP,f] Y → Y = ⋆ → X = ⋆. @@ -98,8 +98,8 @@ qed-. lemma sex_inv_atom2: ∀RN,RP,f,X. X ⪤[RN,RP,f] ⋆ → X = ⋆. /2 width=6 by sex_inv_atom2_aux/ qed-. -fact sex_inv_next2_aux: ∀RN,RP,f,X,Y. X ⪤[RN,RP,f] Y → ∀g,J2,K2. Y = K2.ⓘ{J2} → f = ↑g → - ∃∃J1,K1. K1 ⪤[RN,RP,g] K2 & RN K1 J1 J2 & X = K1.ⓘ{J1}. +fact sex_inv_next2_aux: ∀RN,RP,f,X,Y. X ⪤[RN,RP,f] Y → ∀g,J2,K2. Y = K2.ⓘ[J2] → f = ↑g → + ∃∃J1,K1. K1 ⪤[RN,RP,g] K2 & RN K1 J1 J2 & X = K1.ⓘ[J1]. #RN #RP #f #X #Y * -f -X -Y [ #f #g #J2 #K2 #H destruct | #f #I1 #I2 #L1 #L2 #HL #HI #g #J2 #K2 #H1 #H2 <(injective_next … H2) -g destruct @@ -109,12 +109,12 @@ fact sex_inv_next2_aux: ∀RN,RP,f,X,Y. X ⪤[RN,RP,f] Y → ∀g,J2,K2. Y = K2. qed-. (* Basic_2A1: includes lpx_sn_inv_pair2 *) -lemma sex_inv_next2: ∀RN,RP,g,J2,X,K2. X ⪤[RN,RP,↑g] K2.ⓘ{J2} → - ∃∃J1,K1. K1 ⪤[RN,RP,g] K2 & RN K1 J1 J2 & X = K1.ⓘ{J1}. +lemma sex_inv_next2: ∀RN,RP,g,J2,X,K2. X ⪤[RN,RP,↑g] K2.ⓘ[J2] → + ∃∃J1,K1. K1 ⪤[RN,RP,g] K2 & RN K1 J1 J2 & X = K1.ⓘ[J1]. /2 width=7 by sex_inv_next2_aux/ qed-. -fact sex_inv_push2_aux: ∀RN,RP,f,X,Y. X ⪤[RN,RP,f] Y → ∀g,J2,K2. Y = K2.ⓘ{J2} → f = ⫯g → - ∃∃J1,K1. K1 ⪤[RN,RP,g] K2 & RP K1 J1 J2 & X = K1.ⓘ{J1}. +fact sex_inv_push2_aux: ∀RN,RP,f,X,Y. X ⪤[RN,RP,f] Y → ∀g,J2,K2. Y = K2.ⓘ[J2] → f = ⫯g → + ∃∃J1,K1. K1 ⪤[RN,RP,g] K2 & RP K1 J1 J2 & X = K1.ⓘ[J1]. #RN #RP #f #X #Y * -f -X -Y [ #f #J2 #K2 #g #H destruct | #f #I1 #I2 #L1 #L2 #_ #_ #g #J2 #K2 #_ #H elim (discr_next_push … H) @@ -123,20 +123,20 @@ fact sex_inv_push2_aux: ∀RN,RP,f,X,Y. X ⪤[RN,RP,f] Y → ∀g,J2,K2. Y = K2. ] qed-. -lemma sex_inv_push2: ∀RN,RP,g,J2,X,K2. X ⪤[RN,RP,⫯g] K2.ⓘ{J2} → - ∃∃J1,K1. K1 ⪤[RN,RP,g] K2 & RP K1 J1 J2 & X = K1.ⓘ{J1}. +lemma sex_inv_push2: ∀RN,RP,g,J2,X,K2. X ⪤[RN,RP,⫯g] K2.ⓘ[J2] → + ∃∃J1,K1. K1 ⪤[RN,RP,g] K2 & RP K1 J1 J2 & X = K1.ⓘ[J1]. /2 width=7 by sex_inv_push2_aux/ qed-. (* Basic_2A1: includes lpx_sn_inv_pair *) lemma sex_inv_next: ∀RN,RP,f,I1,I2,L1,L2. - L1.ⓘ{I1} ⪤[RN,RP,↑f] L2.ⓘ{I2} → + L1.ⓘ[I1] ⪤[RN,RP,↑f] L2.ⓘ[I2] → L1 ⪤[RN,RP,f] L2 ∧ RN L1 I1 I2. #RN #RP #f #I1 #I2 #L1 #L2 #H elim (sex_inv_next1 … H) -H #I0 #L0 #HL10 #HI10 #H destruct /2 width=1 by conj/ qed-. lemma sex_inv_push: ∀RN,RP,f,I1,I2,L1,L2. - L1.ⓘ{I1} ⪤[RN,RP,⫯f] L2.ⓘ{I2} → + L1.ⓘ[I1] ⪤[RN,RP,⫯f] L2.ⓘ[I2] → L1 ⪤[RN,RP,f] L2 ∧ RP L1 I1 I2. #RN #RP #f #I1 #I2 #L1 #L2 #H elim (sex_inv_push1 … H) -H #I0 #L0 #HL10 #HI10 #H destruct /2 width=1 by conj/ @@ -144,7 +144,7 @@ qed-. lemma sex_inv_tl: ∀RN,RP,f,I1,I2,L1,L2. L1 ⪤[RN,RP,⫱f] L2 → RN L1 I1 I2 → RP L1 I1 I2 → - L1.ⓘ{I1} ⪤[RN,RP,f] L2.ⓘ{I2}. + L1.ⓘ[I1] ⪤[RN,RP,f] L2.ⓘ[I2]. #RN #RP #f #I1 #I2 #L2 #L2 elim (pn_split f) * /2 width=1 by sex_next, sex_push/ qed-. @@ -152,7 +152,7 @@ qed-. (* Basic forward lemmas *****************************************************) lemma sex_fwd_bind: ∀RN,RP,f,I1,I2,L1,L2. - L1.ⓘ{I1} ⪤[RN,RP,f] L2.ⓘ{I2} → + L1.ⓘ[I1] ⪤[RN,RP,f] L2.ⓘ[I2] → L1 ⪤[RN,RP,⫱f] L2. #RN #RP #f #I1 #I2 #L1 #L2 #Hf elim (pn_split f) * #g #H destruct @@ -189,9 +189,9 @@ lemma sex_sym: ∀RN,RP. qed-. lemma sex_pair_repl: ∀RN,RP,f,I1,I2,L1,L2. - L1.ⓘ{I1} ⪤[RN,RP,f] L2.ⓘ{I2} → + L1.ⓘ[I1] ⪤[RN,RP,f] L2.ⓘ[I2] → ∀J1,J2. RN L1 J1 J2 → RP L1 J1 J2 → - L1.ⓘ{J1} ⪤[RN,RP,f] L2.ⓘ{J2}. + L1.ⓘ[J1] ⪤[RN,RP,f] L2.ⓘ[J2]. /3 width=3 by sex_inv_tl, sex_fwd_bind/ qed-. lemma sex_co: ∀RN1,RP1,RN2,RP2. RN1 ⊆ RN2 → RP1 ⊆ RP2 → @@ -201,7 +201,7 @@ lemma sex_co: ∀RN1,RP1,RN2,RP2. RN1 ⊆ RN2 → RP1 ⊆ RP2 → qed-. lemma sex_co_isid: ∀RN1,RP1,RN2,RP2. RP1 ⊆ RP2 → - ∀f,L1,L2. L1 ⪤[RN1,RP1,f] L2 → 𝐈⦃f⦄ → + ∀f,L1,L2. L1 ⪤[RN1,RP1,f] L2 → 𝐈❪f❫ → L1 ⪤[RN2,RP2,f] L2. #RN1 #RP1 #RN2 #RP2 #HR #f #L1 #L2 #H elim H -f -L1 -L2 // #f #I1 #I2 #K1 #K2 #_ #HI12 #IH #H diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/sex_length.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/sex_length.ma index 4a2379889..4f2157be2 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/sex_length.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/sex_length.ma @@ -36,7 +36,7 @@ lemma sex_length_cfull: ∀L1,L2. |L1| = |L2| → ∀f. L1 ⪤[cfull,cfull,f] L2 qed. lemma sex_length_isid: ∀R,L1,L2. |L1| = |L2| → - ∀f. 𝐈⦃f⦄ → L1 ⪤[R,cfull,f] L2. + ∀f. 𝐈❪f❫ → L1 ⪤[R,cfull,f] L2. #R #L1 elim L1 -L1 [ #Y2 #H >(length_inv_zero_sn … H) -Y2 // | #L1 #I1 #IH #Y2 #H #f #Hf diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/sex_sex.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/sex_sex.ma index 239966181..e75771c23 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/sex_sex.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/sex_sex.ma @@ -21,8 +21,8 @@ include "static_2/relocation/drops.ma". theorem sex_trans_gen (RN1) (RP1) (RN2) (RP2) (RN) (RP): ∀L1,f. - (∀g,I,K,n. ⇩*[n] L1 ≘ K.ⓘ{I} → ↑g = ⫱*[n] f → sex_transitive RN1 RN2 RN RN1 RP1 g K I) → - (∀g,I,K,n. ⇩*[n] L1 ≘ K.ⓘ{I} → ⫯g = ⫱*[n] f → sex_transitive RP1 RP2 RP RN1 RP1 g K I) → + (∀g,I,K,n. ⇩*[n] L1 ≘ K.ⓘ[I] → ↑g = ⫱*[n] f → sex_transitive RN1 RN2 RN RN1 RP1 g K I) → + (∀g,I,K,n. ⇩*[n] L1 ≘ K.ⓘ[I] → ⫯g = ⫱*[n] f → sex_transitive RP1 RP2 RP RN1 RP1 g K I) → ∀L0. L1 ⪤[RN1,RP1,f] L0 → ∀L2. L0 ⪤[RN2,RP2,f] L2 → L1 ⪤[RN,RP,f] L2. @@ -50,7 +50,7 @@ theorem sex_trans (RN) (RP) (f): (∀g,I,K. sex_transitive RN RN RN RN RP g K I) Transitive … (sex RN RP f). /2 width=9 by sex_trans_gen/ qed-. -theorem sex_trans_id_cfull: ∀R1,R2,R3,L1,L,f. L1 ⪤[R1,cfull,f] L → 𝐈⦃f⦄ → +theorem sex_trans_id_cfull: ∀R1,R2,R3,L1,L,f. L1 ⪤[R1,cfull,f] L → 𝐈❪f❫ → ∀L2. L ⪤[R2,cfull,f] L2 → L1 ⪤[R3,cfull,f] L2. #R1 #R2 #R3 #L1 #L #f #H elim H -L1 -L -f [ #f #Hf #L2 #H >(sex_inv_atom1 … H) -L2 // ] @@ -62,8 +62,8 @@ qed-. theorem sex_conf (RN1) (RP1) (RN2) (RP2): ∀L,f. - (∀g,I,K,n. ⇩*[n] L ≘ K.ⓘ{I} → ↑g = ⫱*[n] f → R_pw_confluent2_sex RN1 RN2 RN1 RP1 RN2 RP2 g K I) → - (∀g,I,K,n. ⇩*[n] L ≘ K.ⓘ{I} → ⫯g = ⫱*[n] f → R_pw_confluent2_sex RP1 RP2 RN1 RP1 RN2 RP2 g K I) → + (∀g,I,K,n. ⇩*[n] L ≘ K.ⓘ[I] → ↑g = ⫱*[n] f → R_pw_confluent2_sex RN1 RN2 RN1 RP1 RN2 RP2 g K I) → + (∀g,I,K,n. ⇩*[n] L ≘ K.ⓘ[I] → ⫯g = ⫱*[n] f → R_pw_confluent2_sex RP1 RP2 RN1 RP1 RN2 RP2 g K I) → pw_confluent2 … (sex RN1 RP1 f) (sex RN2 RP2 f) L. #RN1 #RP1 #RN2 #RP2 #L elim L -L [ #f #_ #_ #L1 #H1 #L2 #H2 >(sex_inv_atom1 … H1) >(sex_inv_atom1 … H2) -H2 -H1 diff --git a/matita/matita/contribs/lambdadelta/static_2/relocation/sex_tc.ma b/matita/matita/contribs/lambdadelta/static_2/relocation/sex_tc.ma index c892868cb..379cfc751 100644 --- a/matita/matita/contribs/lambdadelta/static_2/relocation/sex_tc.ma +++ b/matita/matita/contribs/lambdadelta/static_2/relocation/sex_tc.ma @@ -18,7 +18,7 @@ include "static_2/relocation/sex.ma". (* GENERIC ENTRYWISE EXTENSION OF CONTEXT-SENSITIVE REALTIONS FOR TERMS *****) definition s_rs_transitive_isid: relation (relation3 lenv bind bind) ≝ λRN,RP. - ∀f. 𝐈⦃f⦄ → s_rs_transitive … RP (λ_.sex RN RP f). + ∀f. 𝐈❪f❫ → s_rs_transitive … RP (λ_.sex RN RP f). (* Properties with transitive closure ***************************************) @@ -28,28 +28,28 @@ lemma sex_tc_refl: ∀RN,RP. c_reflexive … RN → c_reflexive … RP → lemma sex_tc_next_sn: ∀RN,RP. c_reflexive … RN → ∀f,I2,L1,L2. TC … (sex RN RP f) L1 L2 → ∀I1. RN L1 I1 I2 → - TC … (sex RN RP (↑f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}). + TC … (sex RN RP (↑f)) (L1.ⓘ[I1]) (L2.ⓘ[I2]). #RN #RP #HRN #f #I2 #L1 #L2 #H @(TC_ind_dx ??????? H) -L1 /3 width=3 by sex_next, TC_strap, inj/ qed. lemma sex_tc_next_dx: ∀RN,RP. c_reflexive … RN → c_reflexive … RP → ∀f,I1,I2,L1. (CTC … RN) L1 I1 I2 → ∀L2. L1 ⪤[RN,RP,f] L2 → - TC … (sex RN RP (↑f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}). + TC … (sex RN RP (↑f)) (L1.ⓘ[I1]) (L2.ⓘ[I2]). #RN #RP #HRN #HRP #f #I1 #I2 #L1 #H elim H -I2 /4 width=5 by sex_refl, sex_next, step, inj/ qed. lemma sex_tc_push_sn: ∀RN,RP. c_reflexive … RP → ∀f,I2,L1,L2. TC … (sex RN RP f) L1 L2 → ∀I1. RP L1 I1 I2 → - TC … (sex RN RP (⫯f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}). + TC … (sex RN RP (⫯f)) (L1.ⓘ[I1]) (L2.ⓘ[I2]). #RN #RP #HRP #f #I2 #L1 #L2 #H @(TC_ind_dx ??????? H) -L1 /3 width=3 by sex_push, TC_strap, inj/ qed. lemma sex_tc_push_dx: ∀RN,RP. c_reflexive … RN → c_reflexive … RP → ∀f,I1,I2,L1. (CTC … RP) L1 I1 I2 → ∀L2. L1 ⪤[RN,RP,f] L2 → - TC … (sex RN RP (⫯f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}). + TC … (sex RN RP (⫯f)) (L1.ⓘ[I1]) (L2.ⓘ[I2]). #RN #RP #HRN #HRP #f #I1 #I2 #L1 #H elim H -I2 /4 width=5 by sex_refl, sex_push, step, inj/ qed. @@ -68,21 +68,21 @@ qed. theorem sex_tc_next: ∀RN,RP. c_reflexive … RN → c_reflexive … RP → ∀f,I1,I2,L1. (CTC … RN) L1 I1 I2 → ∀L2. TC … (sex RN RP f) L1 L2 → - TC … (sex RN RP (↑f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}). + TC … (sex RN RP (↑f)) (L1.ⓘ[I1]) (L2.ⓘ[I2]). #RN #RP #HRN #HRP #f #I1 #I2 #L1 #H elim H -I2 /4 width=5 by sex_tc_next_sn, sex_tc_refl, trans_TC/ qed. theorem sex_tc_push: ∀RN,RP. c_reflexive … RN → c_reflexive … RP → ∀f,I1,I2,L1. (CTC … RP) L1 I1 I2 → ∀L2. TC … (sex RN RP f) L1 L2 → - TC … (sex RN RP (⫯f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}). + TC … (sex RN RP (⫯f)) (L1.ⓘ[I1]) (L2.ⓘ[I2]). #RN #RP #HRN #HRP #f #I1 #I2 #L1 #H elim H -I2 /4 width=5 by sex_tc_push_sn, sex_tc_refl, trans_TC/ qed. (* Basic_2A1: uses: TC_lpx_sn_ind *) theorem sex_tc_step_dx: ∀RN,RP. s_rs_transitive_isid RN RP → - ∀f,L1,L. L1 ⪤[RN,RP,f] L → 𝐈⦃f⦄ → + ∀f,L1,L. L1 ⪤[RN,RP,f] L → 𝐈❪f❫ → ∀L2. L ⪤[RN,CTC … RP,f] L2 → L1⪤ [RN,CTC … RP,f] L2. #RN #RP #HRP #f #L1 #L #H elim H -f -L1 -L [ #f #_ #Y #H -HRP >(sex_inv_atom1 … H) -Y // ] @@ -99,7 +99,7 @@ qed-. (* Advanced properties ******************************************************) lemma sex_tc_dx: ∀RN,RP. s_rs_transitive_isid RN RP → - ∀f. 𝐈⦃f⦄ → ∀L1,L2. TC … (sex RN RP f) L1 L2 → L1 ⪤[RN,CTC … RP,f] L2. + ∀f. 𝐈❪f❫ → ∀L1,L2. TC … (sex RN RP f) L1 L2 → L1 ⪤[RN,CTC … RP,f] L2. #RN #RP #HRP #f #Hf #L1 #L2 #H @(TC_ind_dx ??????? H) -L1 /3 width=3 by sex_tc_step_dx, sex_tc_inj_dx/ qed. diff --git a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqup.ma b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqup.ma index 1f21d404e..91a2ab2a9 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqup.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqup.ma @@ -30,55 +30,55 @@ interpretation "plus-iterated structural successor (closure)" (* Basic properties *********************************************************) -lemma fqu_fqup: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → - ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄. +lemma fqu_fqup: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫. /2 width=1 by tri_inj/ qed. lemma fqup_strap1: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. - ⦃G1,L1,T1⦄ ⬂+[b] ⦃G,L,T⦄ → ⦃G,L,T⦄ ⬂[b] ⦃G2,L2,T2⦄ → - ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄. + ❪G1,L1,T1❫ ⬂+[b] ❪G,L,T❫ → ❪G,L,T❫ ⬂[b] ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫. /2 width=5 by tri_step/ qed. lemma fqup_strap2: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. - ⦃G1,L1,T1⦄ ⬂[b] ⦃G,L,T⦄ → ⦃G,L,T⦄ ⬂+[b] ⦃G2,L2,T2⦄ → - ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄. + ❪G1,L1,T1❫ ⬂[b] ❪G,L,T❫ → ❪G,L,T❫ ⬂+[b] ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫. /2 width=5 by tri_TC_strap/ qed. -lemma fqup_pair_sn: ∀b,I,G,L,V,T. ⦃G,L,②{I}V.T⦄ ⬂+[b] ⦃G,L,V⦄. +lemma fqup_pair_sn: ∀b,I,G,L,V,T. ❪G,L,②[I]V.T❫ ⬂+[b] ❪G,L,V❫. /2 width=1 by fqu_pair_sn, fqu_fqup/ qed. -lemma fqup_bind_dx: ∀p,I,G,L,V,T. ⦃G,L,ⓑ{p,I}V.T⦄ ⬂+[Ⓣ] ⦃G,L.ⓑ{I}V,T⦄. +lemma fqup_bind_dx: ∀p,I,G,L,V,T. ❪G,L,ⓑ[p,I]V.T❫ ⬂+[Ⓣ] ❪G,L.ⓑ[I]V,T❫. /3 width=1 by fqu_bind_dx, fqu_fqup/ qed. -lemma fqup_clear: ∀p,I,G,L,V,T. ⦃G,L,ⓑ{p,I}V.T⦄ ⬂+[Ⓕ] ⦃G,L.ⓧ,T⦄. +lemma fqup_clear: ∀p,I,G,L,V,T. ❪G,L,ⓑ[p,I]V.T❫ ⬂+[Ⓕ] ❪G,L.ⓧ,T❫. /3 width=1 by fqu_clear, fqu_fqup/ qed. -lemma fqup_flat_dx: ∀b,I,G,L,V,T. ⦃G,L,ⓕ{I}V.T⦄ ⬂+[b] ⦃G,L,T⦄. +lemma fqup_flat_dx: ∀b,I,G,L,V,T. ❪G,L,ⓕ[I]V.T❫ ⬂+[b] ❪G,L,T❫. /2 width=1 by fqu_flat_dx, fqu_fqup/ qed. -lemma fqup_flat_dx_pair_sn: ∀b,I1,I2,G,L,V1,V2,T. ⦃G,L,ⓕ{I1}V1.②{I2}V2.T⦄ ⬂+[b] ⦃G,L,V2⦄. +lemma fqup_flat_dx_pair_sn: ∀b,I1,I2,G,L,V1,V2,T. ❪G,L,ⓕ[I1]V1.②[I2]V2.T❫ ⬂+[b] ❪G,L,V2❫. /2 width=5 by fqu_pair_sn, fqup_strap1/ qed. -lemma fqup_bind_dx_flat_dx: ∀p,G,I1,I2,L,V1,V2,T. ⦃G,L,ⓑ{p,I1}V1.ⓕ{I2}V2.T⦄ ⬂+[Ⓣ] ⦃G,L.ⓑ{I1}V1,T⦄. +lemma fqup_bind_dx_flat_dx: ∀p,G,I1,I2,L,V1,V2,T. ❪G,L,ⓑ[p,I1]V1.ⓕ[I2]V2.T❫ ⬂+[Ⓣ] ❪G,L.ⓑ[I1]V1,T❫. /2 width=5 by fqu_flat_dx, fqup_strap1/ qed. -lemma fqup_flat_dx_bind_dx: ∀p,I1,I2,G,L,V1,V2,T. ⦃G,L,ⓕ{I1}V1.ⓑ{p,I2}V2.T⦄ ⬂+[Ⓣ] ⦃G,L.ⓑ{I2}V2,T⦄. +lemma fqup_flat_dx_bind_dx: ∀p,I1,I2,G,L,V1,V2,T. ❪G,L,ⓕ[I1]V1.ⓑ[p,I2]V2.T❫ ⬂+[Ⓣ] ❪G,L.ⓑ[I2]V2,T❫. /3 width=5 by fqu_bind_dx, fqup_strap1/ qed. (* Basic eliminators ********************************************************) lemma fqup_ind: ∀b,G1,L1,T1. ∀Q:relation3 …. - (∀G2,L2,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → Q G2 L2 T2) → - (∀G,G2,L,L2,T,T2. ⦃G1,L1,T1⦄ ⬂+[b] ⦃G,L,T⦄ → ⦃G,L,T⦄ ⬂[b] ⦃G2,L2,T2⦄ → Q G L T → Q G2 L2 T2) → - ∀G2,L2,T2. ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄ → Q G2 L2 T2. + (∀G2,L2,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → Q G2 L2 T2) → + (∀G,G2,L,L2,T,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G,L,T❫ → ❪G,L,T❫ ⬂[b] ❪G2,L2,T2❫ → Q G L T → Q G2 L2 T2) → + ∀G2,L2,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → Q G2 L2 T2. #b #G1 #L1 #T1 #Q #IH1 #IH2 #G2 #L2 #T2 #H @(tri_TC_ind … IH1 IH2 G2 L2 T2 H) qed-. lemma fqup_ind_dx: ∀b,G2,L2,T2. ∀Q:relation3 …. - (∀G1,L1,T1. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → Q G1 L1 T1) → - (∀G1,G,L1,L,T1,T. ⦃G1,L1,T1⦄ ⬂[b] ⦃G,L,T⦄ → ⦃G,L,T⦄ ⬂+[b] ⦃G2,L2,T2⦄ → Q G L T → Q G1 L1 T1) → - ∀G1,L1,T1. ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄ → Q G1 L1 T1. + (∀G1,L1,T1. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → Q G1 L1 T1) → + (∀G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ⬂[b] ❪G,L,T❫ → ❪G,L,T❫ ⬂+[b] ❪G2,L2,T2❫ → Q G L T → Q G1 L1 T1) → + ∀G1,L1,T1. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → Q G1 L1 T1. #b #G2 #L2 #T2 #Q #IH1 #IH2 #G1 #L1 #T1 #H @(tri_TC_ind_dx … IH1 IH2 G1 L1 T1 H) qed-. @@ -86,7 +86,7 @@ qed-. (* Advanced properties ******************************************************) lemma fqup_zeta (b) (p) (I) (G) (K) (V): - ∀T1,T2. ⇧*[1]T2 ≘ T1 → ⦃G,K,ⓑ{p,I}V.T1⦄ ⬂+[b] ⦃G,K,T2⦄. + ∀T1,T2. ⇧*[1]T2 ≘ T1 → ❪G,K,ⓑ[p,I]V.T1❫ ⬂+[b] ❪G,K,T2❫. * /4 width=5 by fqup_strap2, fqu_fqup, fqu_drop, fqu_clear, fqu_bind_dx/ qed. (* Basic_2A1: removed theorems 1: fqup_drop *) diff --git a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqup_drops.ma b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqup_drops.ma index e72eced2e..2a81feacf 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqup_drops.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqup_drops.ma @@ -20,20 +20,20 @@ include "static_2/s_computation/fqup.ma". (* Properties with generic slicing for local environments *******************) lemma fqup_drops_succ: ∀b,G,K,T,i,L,U. ⇩*[↑i] L ≘ K → ⇧*[↑i] T ≘ U → - ⦃G,L,U⦄ ⬂+[b] ⦃G,K,T⦄. + ❪G,L,U❫ ⬂+[b] ❪G,K,T❫. #b #G #K #T #i elim i -i [ #L #U #HLK #HTU elim (drops_inv_succ … HLK) -HLK #I #Y #HY #H destruct <(drops_fwd_isid … HY) -K // /3 width=2 by fqu_fqup, fqu_drop/ | #l #IH #L #U #HLK #HTU elim (drops_inv_succ … HLK) -HLK #I #Y #HY #H destruct - elim (lifts_split_trans … HTU … (𝐔❴↑l❵) (𝐔❴1❵)) -HTU + elim (lifts_split_trans … HTU … (𝐔❨↑l❩) (𝐔❨1❩)) -HTU /4 width=5 by fqup_strap2, fqu_drop/ ] qed. lemma fqup_drops_strap1: ∀b,G1,G2,L1,K1,K2,T1,T2,U1,i. ⇩*[i] L1 ≘ K1 → ⇧*[i] T1 ≘ U1 → - ⦃G1,K1,T1⦄ ⬂[b] ⦃G2,K2,T2⦄ → ⦃G1,L1,U1⦄ ⬂+[b] ⦃G2,K2,T2⦄. + ❪G1,K1,T1❫ ⬂[b] ❪G2,K2,T2❫ → ❪G1,L1,U1❫ ⬂+[b] ❪G2,K2,T2❫. #b #G1 #G2 #L1 #K1 #K2 #T1 #T2 #U1 * [ #HLK1 #HTU1 #HT12 >(drops_fwd_isid … HLK1) -L1 // @@ -42,5 +42,5 @@ lemma fqup_drops_strap1: ∀b,G1,G2,L1,K1,K2,T1,T2,U1,i. ⇩*[i] L1 ≘ K1 → ] qed-. -lemma fqup_lref: ∀b,I,G,L,K,V,i. ⇩*[i] L ≘ K.ⓑ{I}V → ⦃G,L,#i⦄ ⬂+[b] ⦃G,K,V⦄. +lemma fqup_lref: ∀b,I,G,L,K,V,i. ⇩*[i] L ≘ K.ⓑ[I]V → ❪G,L,#i❫ ⬂+[b] ❪G,K,V❫. /2 width=6 by fqup_drops_strap1/ qed. diff --git a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqup_weight.ma b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqup_weight.ma index 94319671a..94642d014 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqup_weight.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqup_weight.ma @@ -19,8 +19,8 @@ include "static_2/s_computation/fqup.ma". (* Forward lemmas with weight for closures **********************************) -lemma fqup_fwd_fw: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄ → - ♯{G2,L2,T2} < ♯{G1,L1,T1}. +lemma fqup_fwd_fw: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → + ♯❨G2,L2,T2❩ < ♯❨G1,L1,T1❩. #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2 /3 width=3 by fqu_fwd_fw, transitive_lt/ qed-. @@ -28,7 +28,7 @@ qed-. (* Advanced eliminators *****************************************************) lemma fqup_wf_ind: ∀b. ∀Q:relation3 …. ( - ∀G1,L1,T1. (∀G2,L2,T2. ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄ → Q G2 L2 T2) → + ∀G1,L1,T1. (∀G2,L2,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → Q G2 L2 T2) → Q G1 L1 T1 ) → ∀G1,L1,T1. Q G1 L1 T1. #b #Q #HQ @(f3_ind … fw) #x #IHx #G1 #L1 #T1 #H destruct @@ -36,7 +36,7 @@ lemma fqup_wf_ind: ∀b. ∀Q:relation3 …. ( qed-. lemma fqup_wf_ind_eq: ∀b. ∀Q:relation3 …. ( - ∀G1,L1,T1. (∀G2,L2,T2. ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄ → Q G2 L2 T2) → + ∀G1,L1,T1. (∀G2,L2,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → Q G2 L2 T2) → ∀G2,L2,T2. G1 = G2 → L1 = L2 → T1 = T2 → Q G2 L2 T2 ) → ∀G1,L1,T1. Q G1 L1 T1. #b #Q #HQ @(f3_ind … fw) #x #IHx #G1 #L1 #T1 #H destruct diff --git a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus.ma b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus.ma index a4d01db08..2d8676959 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus.ma @@ -34,15 +34,15 @@ interpretation "star-iterated structural successor (closure)" (* Basic eliminators ********************************************************) lemma fqus_ind: ∀b,G1,L1,T1. ∀Q:relation3 …. Q G1 L1 T1 → - (∀G,G2,L,L2,T,T2. ⦃G1,L1,T1⦄ ⬂*[b] ⦃G,L,T⦄ → ⦃G,L,T⦄ ⬂⸮[b] ⦃G2,L2,T2⦄ → Q G L T → Q G2 L2 T2) → - ∀G2,L2,T2. ⦃G1,L1,T1⦄ ⬂*[b] ⦃G2,L2,T2⦄ → Q G2 L2 T2. + (∀G,G2,L,L2,T,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G,L,T❫ → ❪G,L,T❫ ⬂⸮[b] ❪G2,L2,T2❫ → Q G L T → Q G2 L2 T2) → + ∀G2,L2,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → Q G2 L2 T2. #b #G1 #L1 #T1 #R #IH1 #IH2 #G2 #L2 #T2 #H @(tri_TC_star_ind … IH1 IH2 G2 L2 T2 H) // qed-. lemma fqus_ind_dx: ∀b,G2,L2,T2. ∀Q:relation3 …. Q G2 L2 T2 → - (∀G1,G,L1,L,T1,T. ⦃G1,L1,T1⦄ ⬂⸮[b] ⦃G,L,T⦄ → ⦃G,L,T⦄ ⬂*[b] ⦃G2,L2,T2⦄ → Q G L T → Q G1 L1 T1) → - ∀G1,L1,T1. ⦃G1,L1,T1⦄ ⬂*[b] ⦃G2,L2,T2⦄ → Q G1 L1 T1. + (∀G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ⬂⸮[b] ❪G,L,T❫ → ❪G,L,T❫ ⬂*[b] ❪G2,L2,T2❫ → Q G L T → Q G1 L1 T1) → + ∀G1,L1,T1. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → Q G1 L1 T1. #b #G2 #L2 #T2 #Q #IH1 #IH2 #G1 #L1 #T1 #H @(tri_TC_star_ind_dx … IH1 IH2 G1 L1 T1 H) // qed-. @@ -52,56 +52,56 @@ qed-. lemma fqus_refl: ∀b. tri_reflexive … (fqus b). /2 width=1 by tri_inj/ qed. -lemma fquq_fqus: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂⸮[b] ⦃G2,L2,T2⦄ → - ⦃G1,L1,T1⦄ ⬂*[b] ⦃G2,L2,T2⦄. +lemma fquq_fqus: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫. /2 width=1 by tri_inj/ qed. -lemma fqus_strap1: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. ⦃G1,L1,T1⦄ ⬂*[b] ⦃G,L,T⦄ → - ⦃G,L,T⦄ ⬂⸮[b] ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ⬂*[b] ⦃G2,L2,T2⦄. +lemma fqus_strap1: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G,L,T❫ → + ❪G,L,T❫ ⬂⸮[b] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫. /2 width=5 by tri_step/ qed-. -lemma fqus_strap2: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. ⦃G1,L1,T1⦄ ⬂⸮[b] ⦃G,L,T⦄ → - ⦃G,L,T⦄ ⬂*[b] ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ⬂*[b] ⦃G2,L2,T2⦄. +lemma fqus_strap2: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G,L,T❫ → + ❪G,L,T❫ ⬂*[b] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫. /2 width=5 by tri_TC_strap/ qed-. (* Basic inversion lemmas ***************************************************) -lemma fqus_inv_fqu_sn: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂*[b] ⦃G2,L2,T2⦄ → +lemma fqus_inv_fqu_sn: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → (∧∧ G1 = G2 & L1 = L2 & T1 = T2) ∨ - ∃∃G,L,T. ⦃G1,L1,T1⦄ ⬂[b] ⦃G,L,T⦄ & ⦃G,L,T⦄ ⬂*[b] ⦃G2,L2,T2⦄. + ∃∃G,L,T. ❪G1,L1,T1❫ ⬂[b] ❪G,L,T❫ & ❪G,L,T❫ ⬂*[b] ❪G2,L2,T2❫. #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 @(fqus_ind_dx … H12) -G1 -L1 -T1 /3 width=1 by and3_intro, or_introl/ #G1 #G #L1 #L #T1 #T * /3 width=5 by ex2_3_intro, or_intror/ * #HG #HL #HT #_ destruct // qed-. -lemma fqus_inv_sort1: ∀b,G1,G2,L1,L2,T2,s. ⦃G1,L1,⋆s⦄ ⬂*[b] ⦃G2,L2,T2⦄ → +lemma fqus_inv_sort1: ∀b,G1,G2,L1,L2,T2,s. ❪G1,L1,⋆s❫ ⬂*[b] ❪G2,L2,T2❫ → (∧∧ G1 = G2 & L1 = L2 & ⋆s = T2) ∨ - ∃∃J,L. ⦃G1,L,⋆s⦄ ⬂*[b] ⦃G2,L2,T2⦄ & L1 = L.ⓘ{J}. + ∃∃J,L. ❪G1,L,⋆s❫ ⬂*[b] ❪G2,L2,T2❫ & L1 = L.ⓘ[J]. #b #G1 #G2 #L1 #L2 #T2 #s #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/ #G #L #T #H elim (fqu_inv_sort1 … H) -H /3 width=4 by ex2_2_intro, or_intror/ qed-. -lemma fqus_inv_lref1: ∀b,G1,G2,L1,L2,T2,i. ⦃G1,L1,#i⦄ ⬂*[b] ⦃G2,L2,T2⦄ → +lemma fqus_inv_lref1: ∀b,G1,G2,L1,L2,T2,i. ❪G1,L1,#i❫ ⬂*[b] ❪G2,L2,T2❫ → ∨∨ ∧∧ G1 = G2 & L1 = L2 & #i = T2 - | ∃∃J,L,V. ⦃G1,L,V⦄ ⬂*[b] ⦃G2,L2,T2⦄ & L1 = L.ⓑ{J}V & i = 0 - | ∃∃J,L,j. ⦃G1,L,#j⦄ ⬂*[b] ⦃G2,L2,T2⦄ & L1 = L.ⓘ{J} & i = ↑j. + | ∃∃J,L,V. ❪G1,L,V❫ ⬂*[b] ❪G2,L2,T2❫ & L1 = L.ⓑ[J]V & i = 0 + | ∃∃J,L,j. ❪G1,L,#j❫ ⬂*[b] ❪G2,L2,T2❫ & L1 = L.ⓘ[J] & i = ↑j. #b #G1 #G2 #L1 #L2 #T2 #i #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or3_intro0/ #G #L #T #H elim (fqu_inv_lref1 … H) -H * /3 width=6 by ex3_3_intro, or3_intro1, or3_intro2/ qed-. -lemma fqus_inv_gref1: ∀b,G1,G2,L1,L2,T2,l. ⦃G1,L1,§l⦄ ⬂*[b] ⦃G2,L2,T2⦄ → +lemma fqus_inv_gref1: ∀b,G1,G2,L1,L2,T2,l. ❪G1,L1,§l❫ ⬂*[b] ❪G2,L2,T2❫ → (∧∧ G1 = G2 & L1 = L2 & §l = T2) ∨ - ∃∃J,L. ⦃G1,L,§l⦄ ⬂*[b] ⦃G2,L2,T2⦄ & L1 = L.ⓘ{J}. + ∃∃J,L. ❪G1,L,§l❫ ⬂*[b] ❪G2,L2,T2❫ & L1 = L.ⓘ[J]. #b #G1 #G2 #L1 #L2 #T2 #l #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/ #G #L #T #H elim (fqu_inv_gref1 … H) -H /3 width=4 by ex2_2_intro, or_intror/ qed-. -lemma fqus_inv_bind1: ∀b,p,I,G1,G2,L1,L2,V1,T1,T2. ⦃G1,L1,ⓑ{p,I}V1.T1⦄ ⬂*[b] ⦃G2,L2,T2⦄ → - ∨∨ ∧∧ G1 = G2 & L1 = L2 & ⓑ{p,I}V1.T1 = T2 - | ⦃G1,L1,V1⦄ ⬂*[b] ⦃G2,L2,T2⦄ - | ∧∧ ⦃G1,L1.ⓑ{I}V1,T1⦄ ⬂*[b] ⦃G2,L2,T2⦄ & b = Ⓣ - | ∧∧ ⦃G1,L1.ⓧ,T1⦄ ⬂*[b] ⦃G2,L2,T2⦄ & b = Ⓕ - | ∃∃J,L,T. ⦃G1,L,T⦄ ⬂*[b] ⦃G2,L2,T2⦄ & ⇧*[1] T ≘ ⓑ{p,I}V1.T1 & L1 = L.ⓘ{J}. +lemma fqus_inv_bind1: ∀b,p,I,G1,G2,L1,L2,V1,T1,T2. ❪G1,L1,ⓑ[p,I]V1.T1❫ ⬂*[b] ❪G2,L2,T2❫ → + ∨∨ ∧∧ G1 = G2 & L1 = L2 & ⓑ[p,I]V1.T1 = T2 + | ❪G1,L1,V1❫ ⬂*[b] ❪G2,L2,T2❫ + | ∧∧ ❪G1,L1.ⓑ[I]V1,T1❫ ⬂*[b] ❪G2,L2,T2❫ & b = Ⓣ + | ∧∧ ❪G1,L1.ⓧ,T1❫ ⬂*[b] ❪G2,L2,T2❫ & b = Ⓕ + | ∃∃J,L,T. ❪G1,L,T❫ ⬂*[b] ❪G2,L2,T2❫ & ⇧*[1] T ≘ ⓑ[p,I]V1.T1 & L1 = L.ⓘ[J]. #b #p #I #G1 #G2 #L1 #L2 #V1 #T1 #T2 #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or5_intro0/ #G #L #T #H elim (fqu_inv_bind1 … H) -H * [4: #J ] #H1 #H2 #H3 [3,4: #Hb ] #H destruct @@ -109,21 +109,21 @@ lemma fqus_inv_bind1: ∀b,p,I,G1,G2,L1,L2,V1,T1,T2. ⦃G1,L1,ⓑ{p,I}V1.T1⦄ qed-. -lemma fqus_inv_bind1_true: ∀p,I,G1,G2,L1,L2,V1,T1,T2. ⦃G1,L1,ⓑ{p,I}V1.T1⦄ ⬂* ⦃G2,L2,T2⦄ → - ∨∨ ∧∧ G1 = G2 & L1 = L2 & ⓑ{p,I}V1.T1 = T2 - | ⦃G1,L1,V1⦄ ⬂* ⦃G2,L2,T2⦄ - | ⦃G1,L1.ⓑ{I}V1,T1⦄ ⬂* ⦃G2,L2,T2⦄ - | ∃∃J,L,T. ⦃G1,L,T⦄ ⬂* ⦃G2,L2,T2⦄ & ⇧*[1] T ≘ ⓑ{p,I}V1.T1 & L1 = L.ⓘ{J}. +lemma fqus_inv_bind1_true: ∀p,I,G1,G2,L1,L2,V1,T1,T2. ❪G1,L1,ⓑ[p,I]V1.T1❫ ⬂* ❪G2,L2,T2❫ → + ∨∨ ∧∧ G1 = G2 & L1 = L2 & ⓑ[p,I]V1.T1 = T2 + | ❪G1,L1,V1❫ ⬂* ❪G2,L2,T2❫ + | ❪G1,L1.ⓑ[I]V1,T1❫ ⬂* ❪G2,L2,T2❫ + | ∃∃J,L,T. ❪G1,L,T❫ ⬂* ❪G2,L2,T2❫ & ⇧*[1] T ≘ ⓑ[p,I]V1.T1 & L1 = L.ⓘ[J]. #p #I #G1 #G2 #L1 #L2 #V1 #T1 #T2 #H elim (fqus_inv_bind1 … H) -H [1,3,4: * ] /3 width=1 by and3_intro, or4_intro0, or4_intro1, or4_intro2, or4_intro3/ #_ #H destruct qed-. -lemma fqus_inv_flat1: ∀b,I,G1,G2,L1,L2,V1,T1,T2. ⦃G1,L1,ⓕ{I}V1.T1⦄ ⬂*[b] ⦃G2,L2,T2⦄ → - ∨∨ ∧∧ G1 = G2 & L1 = L2 & ⓕ{I}V1.T1 = T2 - | ⦃G1,L1,V1⦄ ⬂*[b] ⦃G2,L2,T2⦄ - | ⦃G1,L1,T1⦄ ⬂*[b] ⦃G2,L2,T2⦄ - | ∃∃J,L,T. ⦃G1,L,T⦄ ⬂*[b] ⦃G2,L2,T2⦄ & ⇧*[1] T ≘ ⓕ{I}V1.T1 & L1 = L.ⓘ{J}. +lemma fqus_inv_flat1: ∀b,I,G1,G2,L1,L2,V1,T1,T2. ❪G1,L1,ⓕ[I]V1.T1❫ ⬂*[b] ❪G2,L2,T2❫ → + ∨∨ ∧∧ G1 = G2 & L1 = L2 & ⓕ[I]V1.T1 = T2 + | ❪G1,L1,V1❫ ⬂*[b] ❪G2,L2,T2❫ + | ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ + | ∃∃J,L,T. ❪G1,L,T❫ ⬂*[b] ❪G2,L2,T2❫ & ⇧*[1] T ≘ ⓕ[I]V1.T1 & L1 = L.ⓘ[J]. #b #I #G1 #G2 #L1 #L2 #V1 #T1 #T2 #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or4_intro0/ #G #L #T #H elim (fqu_inv_flat1 … H) -H * [3: #J ] #H1 #H2 #H3 #H destruct @@ -132,35 +132,35 @@ qed-. (* Advanced inversion lemmas ************************************************) -lemma fqus_inv_atom1: ∀b,I,G1,G2,L2,T2. ⦃G1,⋆,⓪{I}⦄ ⬂*[b] ⦃G2,L2,T2⦄ → - ∧∧ G1 = G2 & ⋆ = L2 & ⓪{I} = T2. +lemma fqus_inv_atom1: ∀b,I,G1,G2,L2,T2. ❪G1,⋆,⓪[I]❫ ⬂*[b] ❪G2,L2,T2❫ → + ∧∧ G1 = G2 & ⋆ = L2 & ⓪[I] = T2. #b #I #G1 #G2 #L2 #T2 #H elim (fqus_inv_fqu_sn … H) -H * /2 width=1 by and3_intro/ #G #L #T #H elim (fqu_inv_atom1 … H) qed-. -lemma fqus_inv_sort1_bind: ∀b,I,G1,G2,L1,L2,T2,s. ⦃G1,L1.ⓘ{I},⋆s⦄ ⬂*[b] ⦃G2,L2,T2⦄ → - (∧∧ G1 = G2 & L1.ⓘ{I} = L2 & ⋆s = T2) ∨ ⦃G1,L1,⋆s⦄ ⬂*[b] ⦃G2,L2,T2⦄. +lemma fqus_inv_sort1_bind: ∀b,I,G1,G2,L1,L2,T2,s. ❪G1,L1.ⓘ[I],⋆s❫ ⬂*[b] ❪G2,L2,T2❫ → + (∧∧ G1 = G2 & L1.ⓘ[I] = L2 & ⋆s = T2) ∨ ❪G1,L1,⋆s❫ ⬂*[b] ❪G2,L2,T2❫. #b #I #G1 #G2 #L1 #L2 #T2 #s #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/ #G #L #T #H elim (fqu_inv_sort1_bind … H) -H #H1 #H2 #H3 #H destruct /2 width=1 by or_intror/ qed-. -lemma fqus_inv_zero1_pair: ∀b,I,G1,G2,L1,L2,V1,T2. ⦃G1,L1.ⓑ{I}V1,#0⦄ ⬂*[b] ⦃G2,L2,T2⦄ → - (∧∧ G1 = G2 & L1.ⓑ{I}V1 = L2 & #0 = T2) ∨ ⦃G1,L1,V1⦄ ⬂*[b] ⦃G2,L2,T2⦄. +lemma fqus_inv_zero1_pair: ∀b,I,G1,G2,L1,L2,V1,T2. ❪G1,L1.ⓑ[I]V1,#0❫ ⬂*[b] ❪G2,L2,T2❫ → + (∧∧ G1 = G2 & L1.ⓑ[I]V1 = L2 & #0 = T2) ∨ ❪G1,L1,V1❫ ⬂*[b] ❪G2,L2,T2❫. #b #I #G1 #G2 #L1 #L2 #V1 #T2 #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/ #G #L #T #H elim (fqu_inv_zero1_pair … H) -H #H1 #H2 #H3 #H destruct /2 width=1 by or_intror/ qed-. -lemma fqus_inv_lref1_bind: ∀b,I,G1,G2,L1,L2,T2,i. ⦃G1,L1.ⓘ{I},#↑i⦄ ⬂*[b] ⦃G2,L2,T2⦄ → - (∧∧ G1 = G2 & L1.ⓘ{I} = L2 & #(↑i) = T2) ∨ ⦃G1,L1,#i⦄ ⬂*[b] ⦃G2,L2,T2⦄. +lemma fqus_inv_lref1_bind: ∀b,I,G1,G2,L1,L2,T2,i. ❪G1,L1.ⓘ[I],#↑i❫ ⬂*[b] ❪G2,L2,T2❫ → + (∧∧ G1 = G2 & L1.ⓘ[I] = L2 & #(↑i) = T2) ∨ ❪G1,L1,#i❫ ⬂*[b] ❪G2,L2,T2❫. #b #I #G1 #G2 #L1 #L2 #T2 #i #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/ #G #L #T #H elim (fqu_inv_lref1_bind … H) -H #H1 #H2 #H3 #H destruct /2 width=1 by or_intror/ qed-. -lemma fqus_inv_gref1_bind: ∀b,I,G1,G2,L1,L2,T2,l. ⦃G1,L1.ⓘ{I},§l⦄ ⬂*[b] ⦃G2,L2,T2⦄ → - (∧∧ G1 = G2 & L1.ⓘ{I} = L2 & §l = T2) ∨ ⦃G1,L1,§l⦄ ⬂*[b] ⦃G2,L2,T2⦄. +lemma fqus_inv_gref1_bind: ∀b,I,G1,G2,L1,L2,T2,l. ❪G1,L1.ⓘ[I],§l❫ ⬂*[b] ❪G2,L2,T2❫ → + (∧∧ G1 = G2 & L1.ⓘ[I] = L2 & §l = T2) ∨ ❪G1,L1,§l❫ ⬂*[b] ❪G2,L2,T2❫. #b #I #G1 #G2 #L1 #L2 #T2 #l #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/ #G #L #T #H elim (fqu_inv_gref1_bind … H) -H #H1 #H2 #H3 #H destruct /2 width=1 by or_intror/ diff --git a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_drops.ma b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_drops.ma index 688995d1c..8216c86c0 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_drops.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_drops.ma @@ -20,7 +20,7 @@ include "static_2/s_computation/fqus_fqup.ma". (* Properties with generic slicing for local environments *******************) lemma fqus_drops: ∀b,G,L,K,T,U,i. ⇩*[i] L ≘ K → ⇧*[i] T ≘ U → - ⦃G,L,U⦄ ⬂*[b] ⦃G,K,T⦄. + ❪G,L,U❫ ⬂*[b] ❪G,K,T❫. #b #G #L #K #T #U * /3 width=3 by fqup_drops_succ, fqup_fqus/ #HLK #HTU <(lifts_fwd_isid … HTU) -U // <(drops_fwd_isid … HLK) -K // qed. diff --git a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_fqup.ma b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_fqup.ma index f59fd10aa..5e9d0b108 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_fqup.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_fqup.ma @@ -19,14 +19,14 @@ include "static_2/s_computation/fqus.ma". (* Alternative definition with plus-iterated supclosure *********************) -lemma fqup_fqus: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ⬂*[b] ⦃G2,L2,T2⦄. +lemma fqup_fqus: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫. #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2 /3 width=5 by fqus_strap1, fquq_fqus, fqu_fquq/ qed. (* Basic_2A1: was: fqus_inv_gen *) -lemma fqus_inv_fqup: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂*[b] ⦃G2,L2,T2⦄ → - ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄ ∨ (∧∧ G1 = G2 & L1 = L2 & T1 = T2). +lemma fqus_inv_fqup: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ ∨ (∧∧ G1 = G2 & L1 = L2 & T1 = T2). #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -G2 -L2 -T2 // #G #G2 #L #L2 #T #T2 #_ * [ #H2 * /3 width=5 by fqup_strap1, or_introl/ @@ -37,38 +37,38 @@ qed-. (* Advanced properties ******************************************************) -lemma fqus_strap1_fqu: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. ⦃G1,L1,T1⦄ ⬂*[b] ⦃G,L,T⦄ → ⦃G,L,T⦄ ⬂[b] ⦃G2,L2,T2⦄ → - ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄. +lemma fqus_strap1_fqu: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G,L,T❫ → ❪G,L,T❫ ⬂[b] ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫. #b #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 elim (fqus_inv_fqup … H1) -H1 [ /2 width=5 by fqup_strap1/ | * /2 width=1 by fqu_fqup/ ] qed-. -lemma fqus_strap2_fqu: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G,L,T⦄ → ⦃G,L,T⦄ ⬂*[b] ⦃G2,L2,T2⦄ → - ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄. +lemma fqus_strap2_fqu: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. ❪G1,L1,T1❫ ⬂[b] ❪G,L,T❫ → ❪G,L,T❫ ⬂*[b] ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫. #b #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 elim (fqus_inv_fqup … H2) -H2 [ /2 width=5 by fqup_strap2/ | * /2 width=1 by fqu_fqup/ ] qed-. -lemma fqus_fqup_trans: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. ⦃G1,L1,T1⦄ ⬂*[b] ⦃G,L,T⦄ → ⦃G,L,T⦄ ⬂+[b] ⦃G2,L2,T2⦄ → - ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄. +lemma fqus_fqup_trans: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G,L,T❫ → ❪G,L,T❫ ⬂+[b] ❪G2,L2,T2❫ → + ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫. #b #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 @(fqup_ind … H2) -H2 -G2 -L2 -T2 /2 width=5 by fqus_strap1_fqu, fqup_strap1/ qed-. -lemma fqup_fqus_trans: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. ⦃G1,L1,T1⦄ ⬂+[b] ⦃G,L,T⦄ → - ⦃G,L,T⦄ ⬂*[b] ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄. +lemma fqup_fqus_trans: ∀b,G1,G,G2,L1,L,L2,T1,T,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G,L,T❫ → + ❪G,L,T❫ ⬂*[b] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫. #b #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 @(fqup_ind_dx … H1) -H1 -G1 -L1 -T1 /3 width=5 by fqus_strap2_fqu, fqup_strap2/ qed-. (* Advanced inversion lemmas for plus-iterated supclosure *******************) -lemma fqup_inv_step_sn: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂+[b] ⦃G2,L2,T2⦄ → - ∃∃G,L,T. ⦃G1,L1,T1⦄ ⬂[b] ⦃G,L,T⦄ & ⦃G,L,T⦄ ⬂*[b] ⦃G2,L2,T2⦄. +lemma fqup_inv_step_sn: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+[b] ❪G2,L2,T2❫ → + ∃∃G,L,T. ❪G1,L1,T1❫ ⬂[b] ❪G,L,T❫ & ❪G,L,T❫ ⬂*[b] ❪G2,L2,T2❫. #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind_dx … H) -G1 -L1 -T1 /2 width=5 by ex2_3_intro/ #G1 #G #L1 #L #T1 #T #H1 #_ * /4 width=9 by fqus_strap2, fqu_fquq, ex2_3_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_weight.ma b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_weight.ma index 67ba92a4b..4c0406cf5 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_weight.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_computation/fqus_weight.ma @@ -19,15 +19,15 @@ include "static_2/s_computation/fqus.ma". (* Forward lemmas with weight for closures **********************************) -lemma fqus_fwd_fw: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂*[b] ⦃G2,L2,T2⦄ → - ♯{G2,L2,T2} ≤ ♯{G1,L1,T1}. +lemma fqus_fwd_fw: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂*[b] ❪G2,L2,T2❫ → + ♯❨G2,L2,T2❩ ≤ ♯❨G1,L1,T1❩. #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -L2 -T2 /3 width=3 by fquq_fwd_fw, transitive_le/ qed-. (* Advanced inversion lemmas ************************************************) -lemma fqus_inv_refl_atom3: ∀b,I,G,L,X. ⦃G,L,⓪{I}⦄ ⬂*[b] ⦃G,L,X⦄ → ⓪{I} = X. +lemma fqus_inv_refl_atom3: ∀b,I,G,L,X. ❪G,L,⓪[I]❫ ⬂*[b] ❪G,L,X❫ → ⓪[I] = X. #b #I #G #L #X #H elim (fqus_inv_fqu_sn … H) -H * // #G0 #L0 #T0 #H1 #H2 lapply (fqu_fwd_fw … H1) lapply (fqus_fwd_fw … H2) -H2 -H1 #H2 #H1 lapply (le_to_lt_to_lt … H2 H1) -G0 -L0 -T0 diff --git a/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu.ma b/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu.ma index a496d528c..915028884 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu.ma @@ -29,12 +29,12 @@ include "static_2/relocation/lifts.ma". frees_fqus_drops requires fqu_drop restricted on atoms *) inductive fqu (b:bool): tri_relation genv lenv term ≝ -| fqu_lref_O : ∀I,G,L,V. fqu b G (L.ⓑ{I}V) (#0) G L V -| fqu_pair_sn: ∀I,G,L,V,T. fqu b G L (②{I}V.T) G L V -| fqu_bind_dx: ∀p,I,G,L,V,T. b = Ⓣ → fqu b G L (ⓑ{p,I}V.T) G (L.ⓑ{I}V) T -| fqu_clear : ∀p,I,G,L,V,T. b = Ⓕ → fqu b G L (ⓑ{p,I}V.T) G (L.ⓧ) T -| fqu_flat_dx: ∀I,G,L,V,T. fqu b G L (ⓕ{I}V.T) G L T -| fqu_drop : ∀I,G,L,T,U. ⇧*[1] T ≘ U → fqu b G (L.ⓘ{I}) U G L T +| fqu_lref_O : ∀I,G,L,V. fqu b G (L.ⓑ[I]V) (#0) G L V +| fqu_pair_sn: ∀I,G,L,V,T. fqu b G L (②[I]V.T) G L V +| fqu_bind_dx: ∀p,I,G,L,V,T. b = Ⓣ → fqu b G L (ⓑ[p,I]V.T) G (L.ⓑ[I]V) T +| fqu_clear : ∀p,I,G,L,V,T. b = Ⓕ → fqu b G L (ⓑ[p,I]V.T) G (L.ⓧ) T +| fqu_flat_dx: ∀I,G,L,V,T. fqu b G L (ⓕ[I]V.T) G L T +| fqu_drop : ∀I,G,L,T,U. ⇧*[1] T ≘ U → fqu b G (L.ⓘ[I]) U G L T . interpretation @@ -47,20 +47,20 @@ interpretation (* Basic properties *********************************************************) -lemma fqu_sort: ∀b,I,G,L,s. ⦃G,L.ⓘ{I},⋆s⦄ ⬂[b] ⦃G,L,⋆s⦄. +lemma fqu_sort: ∀b,I,G,L,s. ❪G,L.ⓘ[I],⋆s❫ ⬂[b] ❪G,L,⋆s❫. /2 width=1 by fqu_drop/ qed. -lemma fqu_lref_S: ∀b,I,G,L,i. ⦃G,L.ⓘ{I},#↑i⦄ ⬂[b] ⦃G,L,#i⦄. +lemma fqu_lref_S: ∀b,I,G,L,i. ❪G,L.ⓘ[I],#↑i❫ ⬂[b] ❪G,L,#i❫. /2 width=1 by fqu_drop/ qed. -lemma fqu_gref: ∀b,I,G,L,l. ⦃G,L.ⓘ{I},§l⦄ ⬂[b] ⦃G,L,§l⦄. +lemma fqu_gref: ∀b,I,G,L,l. ❪G,L.ⓘ[I],§l❫ ⬂[b] ❪G,L,§l❫. /2 width=1 by fqu_drop/ qed. (* Basic inversion lemmas ***************************************************) -fact fqu_inv_sort1_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → +fact fqu_inv_sort1_aux: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → ∀s. T1 = ⋆s → - ∃∃J. G1 = G2 & L1 = L2.ⓘ{J} & T2 = ⋆s. + ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & T2 = ⋆s. #b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2 [ #I #G #L #T #s #H destruct | #I #G #L #V #T #s #H destruct @@ -72,14 +72,14 @@ fact fqu_inv_sort1_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T ] qed-. -lemma fqu_inv_sort1: ∀b,G1,G2,L1,L2,T2,s. ⦃G1,L1,⋆s⦄ ⬂[b] ⦃G2,L2,T2⦄ → - ∃∃J. G1 = G2 & L1 = L2.ⓘ{J} & T2 = ⋆s. +lemma fqu_inv_sort1: ∀b,G1,G2,L1,L2,T2,s. ❪G1,L1,⋆s❫ ⬂[b] ❪G2,L2,T2❫ → + ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & T2 = ⋆s. /2 width=4 by fqu_inv_sort1_aux/ qed-. -fact fqu_inv_lref1_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → +fact fqu_inv_lref1_aux: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → ∀i. T1 = #i → - (∃∃J,V. G1 = G2 & L1 = L2.ⓑ{J}V & T2 = V & i = 0) ∨ - ∃∃J,j. G1 = G2 & L1 = L2.ⓘ{J} & T2 = #j & i = ↑j. + (∃∃J,V. G1 = G2 & L1 = L2.ⓑ[J]V & T2 = V & i = 0) ∨ + ∃∃J,j. G1 = G2 & L1 = L2.ⓘ[J] & T2 = #j & i = ↑j. #b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2 [ #I #G #L #T #i #H destruct /3 width=4 by ex4_2_intro, or_introl/ | #I #G #L #V #T #i #H destruct @@ -91,14 +91,14 @@ fact fqu_inv_lref1_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T ] qed-. -lemma fqu_inv_lref1: ∀b,G1,G2,L1,L2,T2,i. ⦃G1,L1,#i⦄ ⬂[b] ⦃G2,L2,T2⦄ → - (∃∃J,V. G1 = G2 & L1 = L2.ⓑ{J}V & T2 = V & i = 0) ∨ - ∃∃J,j. G1 = G2 & L1 = L2.ⓘ{J} & T2 = #j & i = ↑j. +lemma fqu_inv_lref1: ∀b,G1,G2,L1,L2,T2,i. ❪G1,L1,#i❫ ⬂[b] ❪G2,L2,T2❫ → + (∃∃J,V. G1 = G2 & L1 = L2.ⓑ[J]V & T2 = V & i = 0) ∨ + ∃∃J,j. G1 = G2 & L1 = L2.ⓘ[J] & T2 = #j & i = ↑j. /2 width=4 by fqu_inv_lref1_aux/ qed-. -fact fqu_inv_gref1_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → +fact fqu_inv_gref1_aux: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → ∀l. T1 = §l → - ∃∃J. G1 = G2 & L1 = L2.ⓘ{J} & T2 = §l. + ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & T2 = §l. #b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2 [ #I #G #L #T #l #H destruct | #I #G #L #V #T #l #H destruct @@ -110,16 +110,16 @@ fact fqu_inv_gref1_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T ] qed-. -lemma fqu_inv_gref1: ∀b,G1,G2,L1,L2,T2,l. ⦃G1,L1,§l⦄ ⬂[b] ⦃G2,L2,T2⦄ → - ∃∃J. G1 = G2 & L1 = L2.ⓘ{J} & T2 = §l. +lemma fqu_inv_gref1: ∀b,G1,G2,L1,L2,T2,l. ❪G1,L1,§l❫ ⬂[b] ❪G2,L2,T2❫ → + ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & T2 = §l. /2 width=4 by fqu_inv_gref1_aux/ qed-. -fact fqu_inv_bind1_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → - ∀p,I,V1,U1. T1 = ⓑ{p,I}V1.U1 → +fact fqu_inv_bind1_aux: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → + ∀p,I,V1,U1. T1 = ⓑ[p,I]V1.U1 → ∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2 - | ∧∧ G1 = G2 & L1.ⓑ{I}V1 = L2 & U1 = T2 & b = Ⓣ + | ∧∧ G1 = G2 & L1.ⓑ[I]V1 = L2 & U1 = T2 & b = Ⓣ | ∧∧ G1 = G2 & L1.ⓧ = L2 & U1 = T2 & b = Ⓕ - | ∃∃J. G1 = G2 & L1 = L2.ⓘ{J} & ⇧*[1] T2 ≘ ⓑ{p,I}V1.U1. + | ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & ⇧*[1] T2 ≘ ⓑ[p,I]V1.U1. #b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2 [ #I #G #L #T #q #J #V0 #U0 #H destruct | #I #G #L #V #T #q #J #V0 #U0 #H destruct /3 width=1 by and3_intro, or4_intro0/ @@ -130,28 +130,28 @@ fact fqu_inv_bind1_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T ] qed-. -lemma fqu_inv_bind1: ∀b,p,I,G1,G2,L1,L2,V1,U1,T2. ⦃G1,L1,ⓑ{p,I}V1.U1⦄ ⬂[b] ⦃G2,L2,T2⦄ → +lemma fqu_inv_bind1: ∀b,p,I,G1,G2,L1,L2,V1,U1,T2. ❪G1,L1,ⓑ[p,I]V1.U1❫ ⬂[b] ❪G2,L2,T2❫ → ∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2 - | ∧∧ G1 = G2 & L1.ⓑ{I}V1 = L2 & U1 = T2 & b = Ⓣ + | ∧∧ G1 = G2 & L1.ⓑ[I]V1 = L2 & U1 = T2 & b = Ⓣ | ∧∧ G1 = G2 & L1.ⓧ = L2 & U1 = T2 & b = Ⓕ - | ∃∃J. G1 = G2 & L1 = L2.ⓘ{J} & ⇧*[1] T2 ≘ ⓑ{p,I}V1.U1. + | ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & ⇧*[1] T2 ≘ ⓑ[p,I]V1.U1. /2 width=4 by fqu_inv_bind1_aux/ qed-. -lemma fqu_inv_bind1_true: ∀p,I,G1,G2,L1,L2,V1,U1,T2. ⦃G1,L1,ⓑ{p,I}V1.U1⦄ ⬂ ⦃G2,L2,T2⦄ → +lemma fqu_inv_bind1_true: ∀p,I,G1,G2,L1,L2,V1,U1,T2. ❪G1,L1,ⓑ[p,I]V1.U1❫ ⬂ ❪G2,L2,T2❫ → ∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2 - | ∧∧ G1 = G2 & L1.ⓑ{I}V1 = L2 & U1 = T2 - | ∃∃J. G1 = G2 & L1 = L2.ⓘ{J} & ⇧*[1] T2 ≘ ⓑ{p,I}V1.U1. + | ∧∧ G1 = G2 & L1.ⓑ[I]V1 = L2 & U1 = T2 + | ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & ⇧*[1] T2 ≘ ⓑ[p,I]V1.U1. #p #I #G1 #G2 #L1 #L2 #V1 #U1 #T2 #H elim (fqu_inv_bind1 … H) -H /3 width=1 by or3_intro0, or3_intro2/ * #HG #HL #HU #H destruct /3 width=1 by and3_intro, or3_intro1/ qed-. -fact fqu_inv_flat1_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → - ∀I,V1,U1. T1 = ⓕ{I}V1.U1 → +fact fqu_inv_flat1_aux: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → + ∀I,V1,U1. T1 = ⓕ[I]V1.U1 → ∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2 | ∧∧ G1 = G2 & L1 = L2 & U1 = T2 - | ∃∃J. G1 = G2 & L1 = L2.ⓘ{J} & ⇧*[1] T2 ≘ ⓕ{I}V1.U1. + | ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & ⇧*[1] T2 ≘ ⓕ[I]V1.U1. #b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2 [ #I #G #L #T #J #V0 #U0 #H destruct | #I #G #L #V #T #J #V0 #U0 #H destruct /3 width=1 by and3_intro, or3_intro0/ @@ -162,39 +162,39 @@ fact fqu_inv_flat1_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T ] qed-. -lemma fqu_inv_flat1: ∀b,I,G1,G2,L1,L2,V1,U1,T2. ⦃G1,L1,ⓕ{I}V1.U1⦄ ⬂[b] ⦃G2,L2,T2⦄ → +lemma fqu_inv_flat1: ∀b,I,G1,G2,L1,L2,V1,U1,T2. ❪G1,L1,ⓕ[I]V1.U1❫ ⬂[b] ❪G2,L2,T2❫ → ∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2 | ∧∧ G1 = G2 & L1 = L2 & U1 = T2 - | ∃∃J. G1 = G2 & L1 = L2.ⓘ{J} & ⇧*[1] T2 ≘ ⓕ{I}V1.U1. + | ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & ⇧*[1] T2 ≘ ⓕ[I]V1.U1. /2 width=4 by fqu_inv_flat1_aux/ qed-. (* Advanced inversion lemmas ************************************************) -lemma fqu_inv_atom1: ∀b,I,G1,G2,L2,T2. ⦃G1,⋆,⓪{I}⦄ ⬂[b] ⦃G2,L2,T2⦄ → ⊥. +lemma fqu_inv_atom1: ∀b,I,G1,G2,L2,T2. ❪G1,⋆,⓪[I]❫ ⬂[b] ❪G2,L2,T2❫ → ⊥. #b * #x #G1 #G2 #L2 #T2 #H [ elim (fqu_inv_sort1 … H) | elim (fqu_inv_lref1 … H) * | elim (fqu_inv_gref1 … H) ] -H #I [2: #V |3: #i ] #_ #H destruct qed-. -lemma fqu_inv_sort1_bind: ∀b,I,G1,G2,K,L2,T2,s. ⦃G1,K.ⓘ{I},⋆s⦄ ⬂[b] ⦃G2,L2,T2⦄ → +lemma fqu_inv_sort1_bind: ∀b,I,G1,G2,K,L2,T2,s. ❪G1,K.ⓘ[I],⋆s❫ ⬂[b] ❪G2,L2,T2❫ → ∧∧ G1 = G2 & L2 = K & T2 = ⋆s. #b #I #G1 #G2 #K #L2 #T2 #s #H elim (fqu_inv_sort1 … H) -H #Z #X #H1 #H2 destruct /2 width=1 by and3_intro/ qed-. -lemma fqu_inv_zero1_pair: ∀b,I,G1,G2,K,L2,V,T2. ⦃G1,K.ⓑ{I}V,#0⦄ ⬂[b] ⦃G2,L2,T2⦄ → +lemma fqu_inv_zero1_pair: ∀b,I,G1,G2,K,L2,V,T2. ❪G1,K.ⓑ[I]V,#0❫ ⬂[b] ❪G2,L2,T2❫ → ∧∧ G1 = G2 & L2 = K & T2 = V. #b #I #G1 #G2 #K #L2 #V #T2 #H elim (fqu_inv_lref1 … H) -H * #Z #X #H1 #H2 #H3 #H4 destruct /2 width=1 by and3_intro/ qed-. -lemma fqu_inv_lref1_bind: ∀b,I,G1,G2,K,L2,T2,i. ⦃G1,K.ⓘ{I},#(↑i)⦄ ⬂[b] ⦃G2,L2,T2⦄ → +lemma fqu_inv_lref1_bind: ∀b,I,G1,G2,K,L2,T2,i. ❪G1,K.ⓘ[I],#(↑i)❫ ⬂[b] ❪G2,L2,T2❫ → ∧∧ G1 = G2 & L2 = K & T2 = #i. #b #I #G1 #G2 #K #L2 #T2 #i #H elim (fqu_inv_lref1 … H) -H * #Z #X #H1 #H2 #H3 #H4 destruct /2 width=1 by and3_intro/ qed-. -lemma fqu_inv_gref1_bind: ∀b,I,G1,G2,K,L2,T2,l. ⦃G1,K.ⓘ{I},§l⦄ ⬂[b] ⦃G2,L2,T2⦄ → +lemma fqu_inv_gref1_bind: ∀b,I,G1,G2,K,L2,T2,l. ❪G1,K.ⓘ[I],§l❫ ⬂[b] ❪G2,L2,T2❫ → ∧∧ G1 = G2 & L2 = K & T2 = §l. #b #I #G1 #G2 #K #L2 #T2 #l #H elim (fqu_inv_gref1 … H) -H #Z #H1 #H2 #H3 destruct /2 width=1 by and3_intro/ diff --git a/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_length.ma b/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_length.ma index e9d8fcbfc..5356ed66f 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_length.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_length.ma @@ -19,13 +19,13 @@ include "static_2/s_transition/fqu.ma". (* Forward lemmas with length for local environments ************************) -fact fqu_fwd_length_lref1_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → +fact fqu_fwd_length_lref1_aux: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → ∀i. T1 = #i → |L2| < |L1|. #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 // [2,3: #p] #I #G #L #V #T [1,2: #_ ] #j #H destruct qed-. -lemma fqu_fwd_length_lref1: ∀b,G1,G2,L1,L2,T2,i. ⦃G1,L1,#i⦄ ⬂[b] ⦃G2,L2,T2⦄ → +lemma fqu_fwd_length_lref1: ∀b,G1,G2,L1,L2,T2,i. ❪G1,L1,#i❫ ⬂[b] ❪G2,L2,T2❫ → |L2| < |L1|. /2 width=8 by fqu_fwd_length_lref1_aux/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_teqx.ma b/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_teqx.ma index b7e77976c..d24fe5813 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_teqx.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_teqx.ma @@ -19,7 +19,7 @@ include "static_2/s_transition/fqu_length.ma". (* Inversion lemmas with context-free sort-irrelevant equivalence for terms *) -fact fqu_inv_teqx_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → +fact fqu_inv_teqx_aux: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → G1 = G2 → |L1| = |L2| → T1 ≛ T2 → ⊥. #b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2 [1: #I #G #L #V #_ #H elim (succ_inv_refl_sn … H) @@ -29,7 +29,7 @@ fact fqu_inv_teqx_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2 qed-. (* Basic_2A1: uses: fqu_inv_eq *) -lemma fqu_inv_teqx: ∀b,G,L1,L2,T1,T2. ⦃G,L1,T1⦄ ⬂[b] ⦃G,L2,T2⦄ → +lemma fqu_inv_teqx: ∀b,G,L1,L2,T1,T2. ❪G,L1,T1❫ ⬂[b] ❪G,L2,T2❫ → |L1| = |L2| → T1 ≛ T2 → ⊥. #b #G #L1 #L2 #T1 #T2 #H @(fqu_inv_teqx_aux … H) // (**) (* full auto fails *) diff --git a/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_weight.ma b/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_weight.ma index 6e2a7ffec..51d3b957f 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_weight.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_transition/fqu_weight.ma @@ -20,8 +20,8 @@ include "static_2/s_transition/fqu.ma". (* Forward lemmas with weight for closures **********************************) -lemma fqu_fwd_fw: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → - ♯{G2,L2,T2} < ♯{G1,L1,T1}. +lemma fqu_fwd_fw: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → + ♯❨G2,L2,T2❩ < ♯❨G1,L1,T1❩. #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 // #I #I1 #I2 #G #L #HI12 normalize in ⊢ (?%%); -I1 <(lifts_fwd_tw … HI12) /3 width=1 by monotonic_lt_plus_r, monotonic_lt_plus_l/ @@ -30,7 +30,7 @@ qed-. (* Advanced eliminators *****************************************************) lemma fqu_wf_ind: ∀b. ∀Q:relation3 …. ( - ∀G1,L1,T1. (∀G2,L2,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → Q G2 L2 T2) → + ∀G1,L1,T1. (∀G2,L2,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → Q G2 L2 T2) → Q G1 L1 T1 ) → ∀G1,L1,T1. Q G1 L1 T1. #b #Q #HQ @(f3_ind … fw) #x #IHx #G1 #L1 #T1 #H destruct /4 width=2 by fqu_fwd_fw/ diff --git a/matita/matita/contribs/lambdadelta/static_2/s_transition/fquq.ma b/matita/matita/contribs/lambdadelta/static_2/s_transition/fquq.ma index d7736ab20..93112ac2b 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_transition/fquq.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_transition/fquq.ma @@ -37,7 +37,7 @@ interpretation lemma fquq_refl: ∀b. tri_reflexive … (fquq b). // qed. -lemma fqu_fquq: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂[b] ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ⬂⸮[b] ⦃G2,L2,T2⦄. +lemma fqu_fquq: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂[b] ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫. /2 width=1 by or_introl/ qed. (* Basic_2A1: removed theorems 8: diff --git a/matita/matita/contribs/lambdadelta/static_2/s_transition/fquq_length.ma b/matita/matita/contribs/lambdadelta/static_2/s_transition/fquq_length.ma index 3985a6c9e..20bc7f0bd 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_transition/fquq_length.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_transition/fquq_length.ma @@ -19,7 +19,7 @@ include "static_2/s_transition/fquq.ma". (* Forward lemmas with length for local environments ************************) -lemma fquq_fwd_length_lref1: ∀b,G1,G2,L1,L2,T2,i. ⦃G1,L1,#i⦄ ⬂⸮[b] ⦃G2,L2,T2⦄ → +lemma fquq_fwd_length_lref1: ∀b,G1,G2,L1,L2,T2,i. ❪G1,L1,#i❫ ⬂⸮[b] ❪G2,L2,T2❫ → |L2| ≤ |L1|. #b #G1 #G2 #L1 #L2 #T2 #i #H elim H -H [2: * ] /3 width=6 by fqu_fwd_length_lref1, lt_to_le/ diff --git a/matita/matita/contribs/lambdadelta/static_2/s_transition/fquq_weight.ma b/matita/matita/contribs/lambdadelta/static_2/s_transition/fquq_weight.ma index 3aab7face..605a53905 100644 --- a/matita/matita/contribs/lambdadelta/static_2/s_transition/fquq_weight.ma +++ b/matita/matita/contribs/lambdadelta/static_2/s_transition/fquq_weight.ma @@ -19,8 +19,8 @@ include "static_2/s_transition/fquq.ma". (* Forward lemmas with weight for closures **********************************) -lemma fquq_fwd_fw: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂⸮[b] ⦃G2,L2,T2⦄ → - ♯{G2,L2,T2} ≤ ♯{G1,L1,T1}. +lemma fquq_fwd_fw: ∀b,G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮[b] ❪G2,L2,T2❫ → + ♯❨G2,L2,T2❩ ≤ ♯❨G1,L1,T1❩. #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -H [2: * ] /3 width=2 by fqu_fwd_fw, lt_to_le/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/aaa.ma b/matita/matita/contribs/lambdadelta/static_2/static/aaa.ma index 04f70ba91..a13ca0f16 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/aaa.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/aaa.ma @@ -24,12 +24,12 @@ include "static_2/syntax/genv.ma". (* activate genv *) inductive aaa: relation4 genv lenv term aarity ≝ | aaa_sort: ∀G,L,s. aaa G L (⋆s) (⓪) -| aaa_zero: ∀I,G,L,V,B. aaa G L V B → aaa G (L.ⓑ{I}V) (#0) B -| aaa_lref: ∀I,G,L,A,i. aaa G L (#i) A → aaa G (L.ⓘ{I}) (#↑i) A +| aaa_zero: ∀I,G,L,V,B. aaa G L V B → aaa G (L.ⓑ[I]V) (#0) B +| aaa_lref: ∀I,G,L,A,i. aaa G L (#i) A → aaa G (L.ⓘ[I]) (#↑i) A | aaa_abbr: ∀p,G,L,V,T,B,A. - aaa G L V B → aaa G (L.ⓓV) T A → aaa G L (ⓓ{p}V.T) A + aaa G L V B → aaa G (L.ⓓV) T A → aaa G L (ⓓ[p]V.T) A | aaa_abst: ∀p,G,L,V,T,B,A. - aaa G L V B → aaa G (L.ⓛV) T A → aaa G L (ⓛ{p}V.T) (②B.A) + aaa G L V B → aaa G (L.ⓛV) T A → aaa G L (ⓛ[p]V.T) (②B.A) | aaa_appl: ∀G,L,V,T,B,A. aaa G L V B → aaa G L T (②B.A) → aaa G L (ⓐV.T) A | aaa_cast: ∀G,L,V,T,A. aaa G L V A → aaa G L T A → aaa G L (ⓝV.T) A . @@ -39,7 +39,7 @@ interpretation "atomic arity assignment (term)" (* Basic inversion lemmas ***************************************************) -fact aaa_inv_sort_aux: ∀G,L,T,A. ⦃G,L⦄ ⊢ T ⁝ A → ∀s. T = ⋆s → A = ⓪. +fact aaa_inv_sort_aux: ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ∀s. T = ⋆s → A = ⓪. #G #L #T #A * -G -L -T -A // [ #I #G #L #V #B #_ #s #H destruct | #I #G #L #A #i #_ #s #H destruct @@ -50,11 +50,11 @@ fact aaa_inv_sort_aux: ∀G,L,T,A. ⦃G,L⦄ ⊢ T ⁝ A → ∀s. T = ⋆s → ] qed-. -lemma aaa_inv_sort: ∀G,L,A,s. ⦃G,L⦄ ⊢ ⋆s ⁝ A → A = ⓪. +lemma aaa_inv_sort: ∀G,L,A,s. ❪G,L❫ ⊢ ⋆s ⁝ A → A = ⓪. /2 width=6 by aaa_inv_sort_aux/ qed-. -fact aaa_inv_zero_aux: ∀G,L,T,A. ⦃G,L⦄ ⊢ T ⁝ A → T = #0 → - ∃∃I,K,V. L = K.ⓑ{I}V & ⦃G,K⦄ ⊢ V ⁝ A. +fact aaa_inv_zero_aux: ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → T = #0 → + ∃∃I,K,V. L = K.ⓑ[I]V & ❪G,K❫ ⊢ V ⁝ A. #G #L #T #A * -G -L -T -A /2 width=5 by ex2_3_intro/ [ #G #L #s #H destruct | #I #G #L #A #i #_ #H destruct @@ -65,12 +65,12 @@ fact aaa_inv_zero_aux: ∀G,L,T,A. ⦃G,L⦄ ⊢ T ⁝ A → T = #0 → ] qed-. -lemma aaa_inv_zero: ∀G,L,A. ⦃G,L⦄ ⊢ #0 ⁝ A → - ∃∃I,K,V. L = K.ⓑ{I}V & ⦃G,K⦄ ⊢ V ⁝ A. +lemma aaa_inv_zero: ∀G,L,A. ❪G,L❫ ⊢ #0 ⁝ A → + ∃∃I,K,V. L = K.ⓑ[I]V & ❪G,K❫ ⊢ V ⁝ A. /2 width=3 by aaa_inv_zero_aux/ qed-. -fact aaa_inv_lref_aux: ∀G,L,T,A. ⦃G,L⦄ ⊢ T ⁝ A → ∀i. T = #(↑i) → - ∃∃I,K. L = K.ⓘ{I} & ⦃G,K⦄ ⊢ #i ⁝ A. +fact aaa_inv_lref_aux: ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ∀i. T = #(↑i) → + ∃∃I,K. L = K.ⓘ[I] & ❪G,K❫ ⊢ #i ⁝ A. #G #L #T #A * -G -L -T -A [ #G #L #s #j #H destruct | #I #G #L #V #B #_ #j #H destruct @@ -82,11 +82,11 @@ fact aaa_inv_lref_aux: ∀G,L,T,A. ⦃G,L⦄ ⊢ T ⁝ A → ∀i. T = #(↑i) ] qed-. -lemma aaa_inv_lref: ∀G,L,A,i. ⦃G,L⦄ ⊢ #↑i ⁝ A → - ∃∃I,K. L = K.ⓘ{I} & ⦃G,K⦄ ⊢ #i ⁝ A. +lemma aaa_inv_lref: ∀G,L,A,i. ❪G,L❫ ⊢ #↑i ⁝ A → + ∃∃I,K. L = K.ⓘ[I] & ❪G,K❫ ⊢ #i ⁝ A. /2 width=3 by aaa_inv_lref_aux/ qed-. -fact aaa_inv_gref_aux: ∀G,L,T,A. ⦃G,L⦄ ⊢ T ⁝ A → ∀l. T = §l → ⊥. +fact aaa_inv_gref_aux: ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ∀l. T = §l → ⊥. #G #L #T #A * -G -L -T -A [ #G #L #s #k #H destruct | #I #G #L #V #B #_ #k #H destruct @@ -98,11 +98,11 @@ fact aaa_inv_gref_aux: ∀G,L,T,A. ⦃G,L⦄ ⊢ T ⁝ A → ∀l. T = §l → ] qed-. -lemma aaa_inv_gref: ∀G,L,A,l. ⦃G,L⦄ ⊢ §l ⁝ A → ⊥. +lemma aaa_inv_gref: ∀G,L,A,l. ❪G,L❫ ⊢ §l ⁝ A → ⊥. /2 width=7 by aaa_inv_gref_aux/ qed-. -fact aaa_inv_abbr_aux: ∀G,L,T,A. ⦃G,L⦄ ⊢ T ⁝ A → ∀p,W,U. T = ⓓ{p}W.U → - ∃∃B. ⦃G,L⦄ ⊢ W ⁝ B & ⦃G,L.ⓓW⦄ ⊢ U ⁝ A. +fact aaa_inv_abbr_aux: ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ∀p,W,U. T = ⓓ[p]W.U → + ∃∃B. ❪G,L❫ ⊢ W ⁝ B & ❪G,L.ⓓW❫ ⊢ U ⁝ A. #G #L #T #A * -G -L -T -A [ #G #L #s #q #W #U #H destruct | #I #G #L #V #B #_ #q #W #U #H destruct @@ -114,12 +114,12 @@ fact aaa_inv_abbr_aux: ∀G,L,T,A. ⦃G,L⦄ ⊢ T ⁝ A → ∀p,W,U. T = ⓓ{p ] qed-. -lemma aaa_inv_abbr: ∀p,G,L,V,T,A. ⦃G,L⦄ ⊢ ⓓ{p}V.T ⁝ A → - ∃∃B. ⦃G,L⦄ ⊢ V ⁝ B & ⦃G,L.ⓓV⦄ ⊢ T ⁝ A. +lemma aaa_inv_abbr: ∀p,G,L,V,T,A. ❪G,L❫ ⊢ ⓓ[p]V.T ⁝ A → + ∃∃B. ❪G,L❫ ⊢ V ⁝ B & ❪G,L.ⓓV❫ ⊢ T ⁝ A. /2 width=4 by aaa_inv_abbr_aux/ qed-. -fact aaa_inv_abst_aux: ∀G,L,T,A. ⦃G,L⦄ ⊢ T ⁝ A → ∀p,W,U. T = ⓛ{p}W.U → - ∃∃B1,B2. ⦃G,L⦄ ⊢ W ⁝ B1 & ⦃G,L.ⓛW⦄ ⊢ U ⁝ B2 & A = ②B1.B2. +fact aaa_inv_abst_aux: ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ∀p,W,U. T = ⓛ[p]W.U → + ∃∃B1,B2. ❪G,L❫ ⊢ W ⁝ B1 & ❪G,L.ⓛW❫ ⊢ U ⁝ B2 & A = ②B1.B2. #G #L #T #A * -G -L -T -A [ #G #L #s #q #W #U #H destruct | #I #G #L #V #B #_ #q #W #U #H destruct @@ -131,12 +131,12 @@ fact aaa_inv_abst_aux: ∀G,L,T,A. ⦃G,L⦄ ⊢ T ⁝ A → ∀p,W,U. T = ⓛ{p ] qed-. -lemma aaa_inv_abst: ∀p,G,L,W,T,A. ⦃G,L⦄ ⊢ ⓛ{p}W.T ⁝ A → - ∃∃B1,B2. ⦃G,L⦄ ⊢ W ⁝ B1 & ⦃G,L.ⓛW⦄ ⊢ T ⁝ B2 & A = ②B1.B2. +lemma aaa_inv_abst: ∀p,G,L,W,T,A. ❪G,L❫ ⊢ ⓛ[p]W.T ⁝ A → + ∃∃B1,B2. ❪G,L❫ ⊢ W ⁝ B1 & ❪G,L.ⓛW❫ ⊢ T ⁝ B2 & A = ②B1.B2. /2 width=4 by aaa_inv_abst_aux/ qed-. -fact aaa_inv_appl_aux: ∀G,L,T,A. ⦃G,L⦄ ⊢ T ⁝ A → ∀W,U. T = ⓐW.U → - ∃∃B. ⦃G,L⦄ ⊢ W ⁝ B & ⦃G,L⦄ ⊢ U ⁝ ②B.A. +fact aaa_inv_appl_aux: ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ∀W,U. T = ⓐW.U → + ∃∃B. ❪G,L❫ ⊢ W ⁝ B & ❪G,L❫ ⊢ U ⁝ ②B.A. #G #L #T #A * -G -L -T -A [ #G #L #s #W #U #H destruct | #I #G #L #V #B #_ #W #U #H destruct @@ -148,12 +148,12 @@ fact aaa_inv_appl_aux: ∀G,L,T,A. ⦃G,L⦄ ⊢ T ⁝ A → ∀W,U. T = ⓐW.U ] qed-. -lemma aaa_inv_appl: ∀G,L,V,T,A. ⦃G,L⦄ ⊢ ⓐV.T ⁝ A → - ∃∃B. ⦃G,L⦄ ⊢ V ⁝ B & ⦃G,L⦄ ⊢ T ⁝ ②B.A. +lemma aaa_inv_appl: ∀G,L,V,T,A. ❪G,L❫ ⊢ ⓐV.T ⁝ A → + ∃∃B. ❪G,L❫ ⊢ V ⁝ B & ❪G,L❫ ⊢ T ⁝ ②B.A. /2 width=3 by aaa_inv_appl_aux/ qed-. -fact aaa_inv_cast_aux: ∀G,L,T,A. ⦃G,L⦄ ⊢ T ⁝ A → ∀W,U. T = ⓝW.U → - ⦃G,L⦄ ⊢ W ⁝ A ∧ ⦃G,L⦄ ⊢ U ⁝ A. +fact aaa_inv_cast_aux: ∀G,L,T,A. ❪G,L❫ ⊢ T ⁝ A → ∀W,U. T = ⓝW.U → + ❪G,L❫ ⊢ W ⁝ A ∧ ❪G,L❫ ⊢ U ⁝ A. #G #L #T #A * -G -L -T -A [ #G #L #s #W #U #H destruct | #I #G #L #V #B #_ #W #U #H destruct @@ -165,6 +165,6 @@ fact aaa_inv_cast_aux: ∀G,L,T,A. ⦃G,L⦄ ⊢ T ⁝ A → ∀W,U. T = ⓝW.U ] qed-. -lemma aaa_inv_cast: ∀G,L,W,T,A. ⦃G,L⦄ ⊢ ⓝW.T ⁝ A → - ⦃G,L⦄ ⊢ W ⁝ A ∧ ⦃G,L⦄ ⊢ T ⁝ A. +lemma aaa_inv_cast: ∀G,L,W,T,A. ❪G,L❫ ⊢ ⓝW.T ⁝ A → + ❪G,L❫ ⊢ W ⁝ A ∧ ❪G,L❫ ⊢ T ⁝ A. /2 width=3 by aaa_inv_cast_aux/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/aaa_aaa.ma b/matita/matita/contribs/lambdadelta/static_2/static/aaa_aaa.ma index 968112846..17d6961f6 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/aaa_aaa.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/aaa_aaa.ma @@ -18,7 +18,7 @@ include "static_2/static/aaa.ma". (* Main inversion lemmas ****************************************************) -theorem aaa_mono: ∀G,L,T,A1. ⦃G,L⦄ ⊢ T ⁝ A1 → ∀A2. ⦃G,L⦄ ⊢ T ⁝ A2 → A1 = A2. +theorem aaa_mono: ∀G,L,T,A1. ❪G,L❫ ⊢ T ⁝ A1 → ∀A2. ❪G,L❫ ⊢ T ⁝ A2 → A1 = A2. #G #L #T #A1 #H elim H -G -L -T -A1 [ #G #L #s #A2 #H >(aaa_inv_sort … H) -H // | #I1 #G #L #V1 #B #_ #IH #A2 #H @@ -40,7 +40,7 @@ qed-. (* Advanced inversion lemmas ************************************************) lemma aaa_aaa_inv_appl (G) (L) (V) (T) (B) (X): - ∀A. ⦃G,L⦄ ⊢ ⓐV.T ⁝ A → ⦃G,L⦄ ⊢ V ⁝ B → ⦃G,L⦄⊢ T ⁝ X → ②B.A = X. + ∀A. ❪G,L❫ ⊢ ⓐV.T ⁝ A → ❪G,L❫ ⊢ V ⁝ B → ❪G,L❫⊢ T ⁝ X → ②B.A = X. #G #L #V #T #B #X #A #H #H1V #H1T elim (aaa_inv_appl … H) -H #B0 #H2V #H2T lapply (aaa_mono … H2V … H1V) -V #H destruct @@ -48,7 +48,7 @@ lapply (aaa_mono … H2T … H1T) -G -L -T // qed-. lemma aaa_aaa_inv_cast (G) (L) (U) (T) (B) (A): - ∀X. ⦃G,L⦄ ⊢ ⓝU.T ⁝ X → ⦃G,L⦄ ⊢ U ⁝ B → ⦃G,L⦄⊢ T ⁝ A → ∧∧ B = X & A = X. + ∀X. ❪G,L❫ ⊢ ⓝU.T ⁝ X → ❪G,L❫ ⊢ U ⁝ B → ❪G,L❫⊢ T ⁝ A → ∧∧ B = X & A = X. #G #L #U #T #B #A #X #H #H1U #H1T elim (aaa_inv_cast … H) -H #H2U #H2T lapply (aaa_mono … H1U … H2U) -U #HB diff --git a/matita/matita/contribs/lambdadelta/static_2/static/aaa_dec.ma b/matita/matita/contribs/lambdadelta/static_2/static/aaa_dec.ma index 045657326..3b471c33a 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/aaa_dec.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/aaa_dec.ma @@ -19,7 +19,7 @@ include "static_2/static/aaa_aaa.ma". (* Main properties **********************************************************) -theorem aaa_dec (G) (L) (T): Decidable (∃A. ⦃G,L⦄ ⊢ T ⁝ A). +theorem aaa_dec (G) (L) (T): Decidable (∃A. ❪G,L❫ ⊢ T ⁝ A). #G #L #T @(fqup_wf_ind_eq (Ⓣ) … G L T) -G -L -T #G0 #L0 #T0 #IH #G #L * * [||| #p * | * ] [ #s #HG #HL #HT destruct -IH diff --git a/matita/matita/contribs/lambdadelta/static_2/static/aaa_drops.ma b/matita/matita/contribs/lambdadelta/static_2/static/aaa_drops.ma index 071e04475..866a0a528 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/aaa_drops.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/aaa_drops.ma @@ -22,7 +22,7 @@ include "static_2/static/aaa.ma". (* Advanced properties ******************************************************) (* Basic_2A1: was: aaa_lref *) -lemma aaa_lref_drops: ∀I,G,K,V,B,i,L. ⇩*[i] L ≘ K.ⓑ{I}V → ⦃G,K⦄ ⊢ V ⁝ B → ⦃G,L⦄ ⊢ #i ⁝ B. +lemma aaa_lref_drops: ∀I,G,K,V,B,i,L. ⇩*[i] L ≘ K.ⓑ[I]V → ❪G,K❫ ⊢ V ⁝ B → ❪G,L❫ ⊢ #i ⁝ B. #I #G #K #V #B #i elim i -i [ #L #H lapply (drops_fwd_isid … H ?) -H // #H destruct /2 width=1 by aaa_zero/ @@ -34,8 +34,8 @@ qed. (* Advanced inversion lemmas ************************************************) (* Basic_2A1: was: aaa_inv_lref *) -lemma aaa_inv_lref_drops: ∀G,A,i,L. ⦃G,L⦄ ⊢ #i ⁝ A → - ∃∃I,K,V. ⇩*[i] L ≘ K.ⓑ{I}V & ⦃G,K⦄ ⊢ V ⁝ A. +lemma aaa_inv_lref_drops: ∀G,A,i,L. ❪G,L❫ ⊢ #i ⁝ A → + ∃∃I,K,V. ⇩*[i] L ≘ K.ⓑ[I]V & ❪G,K❫ ⊢ V ⁝ A. #G #A #i elim i -i [ #L #H elim (aaa_inv_zero … H) -H /3 width=5 by drops_refl, ex2_3_intro/ | #i #IH #L #H elim (aaa_inv_lref … H) -H @@ -44,7 +44,7 @@ lemma aaa_inv_lref_drops: ∀G,A,i,L. ⦃G,L⦄ ⊢ #i ⁝ A → qed-. lemma aaa_pair_inv_lref (G) (L) (i): - ∀A. ⦃G,L⦄ ⊢ #i ⁝ A → ∀I,K,V. ⇩*[i] L ≘ K.ⓑ{I}V → ⦃G,K⦄ ⊢ V ⁝ A. + ∀A. ❪G,L❫ ⊢ #i ⁝ A → ∀I,K,V. ⇩*[i] L ≘ K.ⓑ[I]V → ❪G,K❫ ⊢ V ⁝ A. #G #L #i #A #H #I #K #V #HLK elim (aaa_inv_lref_drops … H) -H #J #Y #X #HLY #HX lapply (drops_mono … HLY … HLK) -L -i #H destruct // @@ -54,8 +54,8 @@ qed-. (* Basic_2A1: includes: aaa_lift *) (* Note: it should use drops_split_trans_pair2 *) -lemma aaa_lifts: ∀G,L1,T1,A. ⦃G,L1⦄ ⊢ T1 ⁝ A → ∀b,f,L2. ⇩*[b,f] L2 ≘ L1 → - ∀T2. ⇧*[f] T1 ≘ T2 → ⦃G,L2⦄ ⊢ T2 ⁝ A. +lemma aaa_lifts: ∀G,L1,T1,A. ❪G,L1❫ ⊢ T1 ⁝ A → ∀b,f,L2. ⇩*[b,f] L2 ≘ L1 → + ∀T2. ⇧*[f] T1 ≘ T2 → ❪G,L2❫ ⊢ T2 ⁝ A. @(fqup_wf_ind_eq (Ⓣ)) #G0 #L0 #T0 #IH #G #L1 * * [ #s #HG #HL #HT #A #H #b #f #L2 #HL21 #X #HX -b -IH lapply (aaa_inv_sort … H) -H #H destruct @@ -93,8 +93,8 @@ qed-. (* Inversion lemmas with generic slicing for local environments *************) (* Basic_2A1: includes: aaa_inv_lift *) -lemma aaa_inv_lifts: ∀G,L2,T2,A. ⦃G,L2⦄ ⊢ T2 ⁝ A → ∀b,f,L1. ⇩*[b,f] L2 ≘ L1 → - ∀T1. ⇧*[f] T1 ≘ T2 → ⦃G,L1⦄ ⊢ T1 ⁝ A. +lemma aaa_inv_lifts: ∀G,L2,T2,A. ❪G,L2❫ ⊢ T2 ⁝ A → ∀b,f,L1. ⇩*[b,f] L2 ≘ L1 → + ∀T1. ⇧*[f] T1 ≘ T2 → ❪G,L1❫ ⊢ T1 ⁝ A. @(fqup_wf_ind_eq (Ⓣ)) #G0 #L0 #T0 #IH #G #L2 * * [ #s #HG #HL #HT #A #H #b #f #L1 #HL21 #X #HX -b -IH lapply (aaa_inv_sort … H) -H #H destruct @@ -102,7 +102,7 @@ lemma aaa_inv_lifts: ∀G,L2,T2,A. ⦃G,L2⦄ ⊢ T2 ⁝ A → ∀b,f,L1. ⇩*[b | #i2 #HG #HL #HT #A #H #b #f #L1 #HL21 #X #HX elim (aaa_inv_lref_drops … H) -H #J #K2 #V2 #HLK2 #HA elim (lifts_inv_lref2 … HX) -HX #i1 #Hf #H destruct - lapply (drops_split_div … HL21 (𝐔❴i1❵) ???) -HL21 [4: * |*: // ] #Y #HLK1 #HY + lapply (drops_split_div … HL21 (𝐔❨i1❩) ???) -HL21 [4: * |*: // ] #Y #HLK1 #HY lapply (drops_conf … HLK2 … HY ??) -HY [1,2: /2 width=6 by after_uni_dx/ ] #HY lapply (drops_tls_at … Hf … HY) -HY #HY -Hf elim (drops_inv_skip1 … HY) -HY #Z #K1 #HK21 #HZ #H destruct diff --git a/matita/matita/contribs/lambdadelta/static_2/static/aaa_feqx.ma b/matita/matita/contribs/lambdadelta/static_2/static/aaa_feqx.ma index 47fd35c02..f3ea064f0 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/aaa_feqx.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/aaa_feqx.ma @@ -19,7 +19,7 @@ include "static_2/static/aaa_reqx.ma". (* Properties with sort-irrelevant equivalence on referred entries **********) -lemma aaa_feqx_conf: ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → - ∀A. ⦃G1,L1⦄ ⊢ T1 ⁝ A → ⦃G2,L2⦄ ⊢ T2 ⁝ A. +lemma aaa_feqx_conf: ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → + ∀A. ❪G1,L1❫ ⊢ T1 ⁝ A → ❪G2,L2❫ ⊢ T2 ⁝ A. #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 /2 width=5 by aaa_teqx_conf_reqx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/aaa_fqus.ma b/matita/matita/contribs/lambdadelta/static_2/static/aaa_fqus.ma index 4ba7d8c56..ad573b77f 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/aaa_fqus.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/aaa_fqus.ma @@ -19,8 +19,8 @@ include "static_2/static/aaa_drops.ma". (* Properties on supclosure *************************************************) -lemma aaa_fqu_conf: ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂ ⦃G2,L2,T2⦄ → - ∀A1. ⦃G1,L1⦄ ⊢ T1 ⁝ A1 → ∃A2. ⦃G2,L2⦄ ⊢ T2 ⁝ A2. +lemma aaa_fqu_conf: ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂ ❪G2,L2,T2❫ → + ∀A1. ❪G1,L1❫ ⊢ T1 ⁝ A1 → ∃A2. ❪G2,L2❫ ⊢ T2 ⁝ A2. #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 [ #I #G #L #T #A #H elim (aaa_inv_zero … H) -H #J #K #V #H #HA destruct /2 width=2 by ex_intro/ @@ -43,21 +43,21 @@ lemma aaa_fqu_conf: ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂ ⦃G2,L2,T2⦄ → ] qed-. -lemma aaa_fquq_conf: ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂⸮ ⦃G2,L2,T2⦄ → - ∀A1. ⦃G1,L1⦄ ⊢ T1 ⁝ A1 → ∃A2. ⦃G2,L2⦄ ⊢ T2 ⁝ A2. +lemma aaa_fquq_conf: ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂⸮ ❪G2,L2,T2❫ → + ∀A1. ❪G1,L1❫ ⊢ T1 ⁝ A1 → ∃A2. ❪G2,L2❫ ⊢ T2 ⁝ A2. #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -H /2 width=6 by aaa_fqu_conf/ * #H1 #H2 #H3 destruct /2 width=2 by ex_intro/ qed-. -lemma aaa_fqup_conf: ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂+ ⦃G2,L2,T2⦄ → - ∀A1. ⦃G1,L1⦄ ⊢ T1 ⁝ A1 → ∃A2. ⦃G2,L2⦄ ⊢ T2 ⁝ A2. +lemma aaa_fqup_conf: ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂+ ❪G2,L2,T2❫ → + ∀A1. ❪G1,L1❫ ⊢ T1 ⁝ A1 → ∃A2. ❪G2,L2❫ ⊢ T2 ⁝ A2. #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2 [2: #G #G2 #L #L2 #T #T2 #_ #H2 #IH1 #A #HA elim (IH1 … HA) -IH1 -A ] /2 width=6 by aaa_fqu_conf/ qed-. -lemma aaa_fqus_conf: ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ⬂* ⦃G2,L2,T2⦄ → - ∀A1. ⦃G1,L1⦄ ⊢ T1 ⁝ A1 → ∃A2. ⦃G2,L2⦄ ⊢ T2 ⁝ A2. +lemma aaa_fqus_conf: ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ⬂* ❪G2,L2,T2❫ → + ∀A1. ❪G1,L1❫ ⊢ T1 ⁝ A1 → ∃A2. ❪G2,L2❫ ⊢ T2 ⁝ A2. #G1 #G2 #L1 #L2 #T1 #T2 #H elim(fqus_inv_fqup … H) -H /2 width=6 by aaa_fqup_conf/ * #H1 #H2 #H3 destruct /2 width=2 by ex_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/aaa_reqx.ma b/matita/matita/contribs/lambdadelta/static_2/static/aaa_reqx.ma index b502a8a27..c3a6249e1 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/aaa_reqx.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/aaa_reqx.ma @@ -19,8 +19,8 @@ include "static_2/static/aaa.ma". (* Properties with sort-irrelevant equivalence on referred entries **********) -lemma aaa_teqx_conf_reqx: ∀G,L1,T1,A. ⦃G,L1⦄ ⊢ T1 ⁝ A → ∀T2. T1 ≛ T2 → - ∀L2. L1 ≛[T1] L2 → ⦃G,L2⦄ ⊢ T2 ⁝ A. +lemma aaa_teqx_conf_reqx: ∀G,L1,T1,A. ❪G,L1❫ ⊢ T1 ⁝ A → ∀T2. T1 ≛ T2 → + ∀L2. L1 ≛[T1] L2 → ❪G,L2❫ ⊢ T2 ⁝ A. #G #L1 #T1 #A #H elim H -G -L1 -T1 -A [ #G #L1 #s1 #X #H1 elim (teqx_inv_sort1 … H1) -H1 // | #I #G #L1 #V1 #B #_ #IH #X #H1 >(teqx_inv_lref1 … H1) -H1 diff --git a/matita/matita/contribs/lambdadelta/static_2/static/feqx.ma b/matita/matita/contribs/lambdadelta/static_2/static/feqx.ma index a341e7688..2ec73d338 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/feqx.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/feqx.ma @@ -30,17 +30,17 @@ interpretation (* Basic_properties *********************************************************) lemma feqx_intro_dx (G): ∀L1,L2,T2. L1 ≛[T2] L2 → - ∀T1. T1 ≛ T2 → ⦃G,L1,T1⦄ ≛ ⦃G,L2,T2⦄. + ∀T1. T1 ≛ T2 → ❪G,L1,T1❫ ≛ ❪G,L2,T2❫. /3 width=3 by feqx_intro_sn, teqx_reqx_div/ qed. (* Basic inversion lemmas ***************************************************) -lemma feqx_inv_gen_sn: ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → +lemma feqx_inv_gen_sn: ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → ∧∧ G1 = G2 & L1 ≛[T1] L2 & T1 ≛ T2. #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 /2 width=1 by and3_intro/ qed-. -lemma feqx_inv_gen_dx: ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → +lemma feqx_inv_gen_dx: ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → ∧∧ G1 = G2 & L1 ≛[T2] L2 & T1 ≛ T2. #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 /3 width=3 by teqx_reqx_conf, and3_intro/ diff --git a/matita/matita/contribs/lambdadelta/static_2/static/feqx_feqx.ma b/matita/matita/contribs/lambdadelta/static_2/static/feqx_feqx.ma index 52c7f3109..62ed7e48c 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/feqx_feqx.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/feqx_feqx.ma @@ -32,18 +32,18 @@ theorem feqx_trans: tri_transitive … feqx. /4 width=5 by feqx_intro_sn, reqx_trans, teqx_reqx_div, teqx_trans/ qed-. -theorem feqx_canc_sn: ∀G,G1,L,L1,T,T1. ⦃G,L,T⦄ ≛ ⦃G1,L1,T1⦄→ - ∀G2,L2,T2. ⦃G,L,T⦄ ≛ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄. +theorem feqx_canc_sn: ∀G,G1,L,L1,T,T1. ❪G,L,T❫ ≛ ❪G1,L1,T1❫→ + ∀G2,L2,T2. ❪G,L,T❫ ≛ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫. /3 width=5 by feqx_trans, feqx_sym/ qed-. -theorem feqx_canc_dx: ∀G1,G,L1,L,T1,T. ⦃G1,L1,T1⦄ ≛ ⦃G,L,T⦄ → - ∀G2,L2,T2. ⦃G2,L2,T2⦄ ≛ ⦃G,L,T⦄ → ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄. +theorem feqx_canc_dx: ∀G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ≛ ❪G,L,T❫ → + ∀G2,L2,T2. ❪G2,L2,T2❫ ≛ ❪G,L,T❫ → ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫. /3 width=5 by feqx_trans, feqx_sym/ qed-. (* Main inversion lemmas with degree-based equivalence on terms *************) -theorem feqx_tneqx_repl_dx: ∀G1,G2,L1,L2,T1,T2. ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄ → - ∀U1,U2. ⦃G1,L1,U1⦄ ≛ ⦃G2,L2,U2⦄ → +theorem feqx_tneqx_repl_dx: ∀G1,G2,L1,L2,T1,T2. ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫ → + ∀U1,U2. ❪G1,L1,U1❫ ≛ ❪G2,L2,U2❫ → (T2 ≛ U2 → ⊥) → (T1 ≛ U1 → ⊥). #G1 #G2 #L1 #L2 #T1 #T2 #HT #U1 #U2 #HU #HnTU2 #HTU1 elim (feqx_inv_gen_sn … HT) -HT #_ #_ #HT diff --git a/matita/matita/contribs/lambdadelta/static_2/static/feqx_fqup.ma b/matita/matita/contribs/lambdadelta/static_2/static/feqx_fqup.ma index 2919d492b..2821e6718 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/feqx_fqup.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/feqx_fqup.ma @@ -20,7 +20,7 @@ include "static_2/static/feqx.ma". (* Properties with sort-irrelevant equivalence for terms ********************) lemma teqx_feqx: ∀T1,T2. T1 ≛ T2 → - ∀G,L. ⦃G,L,T1⦄ ≛ ⦃G,L,T2⦄. + ∀G,L. ❪G,L,T1❫ ≛ ❪G,L,T2❫. /2 width=1 by feqx_intro_sn/ qed. (* Advanced properties ******************************************************) diff --git a/matita/matita/contribs/lambdadelta/static_2/static/feqx_fqus.ma b/matita/matita/contribs/lambdadelta/static_2/static/feqx_fqus.ma index f929f33b7..cf59d2269 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/feqx_fqus.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/feqx_fqus.ma @@ -19,9 +19,9 @@ include "static_2/static/feqx.ma". (* Properties with star-iterated structural successor for closures **********) -lemma feqx_fqus_trans: ∀b,G1,G,L1,L,T1,T. ⦃G1,L1,T1⦄ ≛ ⦃G,L,T⦄ → - ∀G2,L2,T2. ⦃G,L,T⦄ ⬂*[b] ⦃G2,L2,T2⦄ → - ∃∃G,L0,T0. ⦃G1,L1,T1⦄ ⬂*[b] ⦃G,L0,T0⦄ & ⦃G,L0,T0⦄ ≛ ⦃G2,L2,T2⦄. +lemma feqx_fqus_trans: ∀b,G1,G,L1,L,T1,T. ❪G1,L1,T1❫ ≛ ❪G,L,T❫ → + ∀G2,L2,T2. ❪G,L,T❫ ⬂*[b] ❪G2,L2,T2❫ → + ∃∃G,L0,T0. ❪G1,L1,T1❫ ⬂*[b] ❪G,L0,T0❫ & ❪G,L0,T0❫ ≛ ❪G2,L2,T2❫. #b #G1 #G #L1 #L #T1 #T #H1 #G2 #L2 #T2 #H2 elim(feqx_inv_gen_dx … H1) -H1 #HG #HL1 #HT1 destruct elim (reqx_fqus_trans … H2 … HL1) -L #L #T0 #H2 #HT02 #HL2 diff --git a/matita/matita/contribs/lambdadelta/static_2/static/feqx_req.ma b/matita/matita/contribs/lambdadelta/static_2/static/feqx_req.ma index 219186271..196d0654c 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/feqx_req.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/feqx_req.ma @@ -20,7 +20,7 @@ include "static_2/static/feqx.ma". (* Properties with syntactic equivalence on referred entries ****************) lemma req_reqx_trans: ∀L1,L,T1. L1 ≡[T1] L → - ∀G1,G2,L2,T2. ⦃G1,L,T1⦄ ≛ ⦃G2,L2,T2⦄ → ⦃G1,L1,T1⦄ ≛ ⦃G2,L2,T2⦄. + ∀G1,G2,L2,T2. ❪G1,L,T1❫ ≛ ❪G2,L2,T2❫ → ❪G1,L1,T1❫ ≛ ❪G2,L2,T2❫. #L1 #L #T1 #HL1 #G1 #G2 #L2 #T2 #H elim (feqx_inv_gen_sn … H) -H #H #HL2 #T12 destruct /3 width=3 by feqx_intro_sn, req_reqx_trans/ diff --git a/matita/matita/contribs/lambdadelta/static_2/static/frees.ma b/matita/matita/contribs/lambdadelta/static_2/static/frees.ma index 2a72515f4..cdbf5be5a 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/frees.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/frees.ma @@ -19,18 +19,18 @@ include "static_2/syntax/lenv.ma". (* CONTEXT-SENSITIVE FREE VARIABLES *****************************************) inductive frees: relation3 lenv term rtmap ≝ -| frees_sort: ∀f,L,s. 𝐈⦃f⦄ → frees L (⋆s) f -| frees_atom: ∀f,i. 𝐈⦃f⦄ → frees (⋆) (#i) (⫯*[i]↑f) +| frees_sort: ∀f,L,s. 𝐈❪f❫ → frees L (⋆s) f +| frees_atom: ∀f,i. 𝐈❪f❫ → frees (⋆) (#i) (⫯*[i]↑f) | frees_pair: ∀f,I,L,V. frees L V f → - frees (L.ⓑ{I}V) (#0) (↑f) -| frees_unit: ∀f,I,L. 𝐈⦃f⦄ → frees (L.ⓤ{I}) (#0) (↑f) + frees (L.ⓑ[I]V) (#0) (↑f) +| frees_unit: ∀f,I,L. 𝐈❪f❫ → frees (L.ⓤ[I]) (#0) (↑f) | frees_lref: ∀f,I,L,i. frees L (#i) f → - frees (L.ⓘ{I}) (#↑i) (⫯f) -| frees_gref: ∀f,L,l. 𝐈⦃f⦄ → frees L (§l) f -| frees_bind: ∀f1,f2,f,p,I,L,V,T. frees L V f1 → frees (L.ⓑ{I}V) T f2 → - f1 ⋓ ⫱f2 ≘ f → frees L (ⓑ{p,I}V.T) f + frees (L.ⓘ[I]) (#↑i) (⫯f) +| frees_gref: ∀f,L,l. 𝐈❪f❫ → frees L (§l) f +| frees_bind: ∀f1,f2,f,p,I,L,V,T. frees L V f1 → frees (L.ⓑ[I]V) T f2 → + f1 ⋓ ⫱f2 ≘ f → frees L (ⓑ[p,I]V.T) f | frees_flat: ∀f1,f2,f,I,L,V,T. frees L V f1 → frees L T f2 → - f1 ⋓ f2 ≘ f → frees L (ⓕ{I}V.T) f + f1 ⋓ f2 ≘ f → frees L (ⓕ[I]V.T) f . interpretation @@ -39,7 +39,7 @@ interpretation (* Basic inversion lemmas ***************************************************) -fact frees_inv_sort_aux: ∀f,L,X. L ⊢ 𝐅+⦃X⦄ ≘ f → ∀x. X = ⋆x → 𝐈⦃f⦄. +fact frees_inv_sort_aux: ∀f,L,X. L ⊢ 𝐅+❪X❫ ≘ f → ∀x. X = ⋆x → 𝐈❪f❫. #L #X #f #H elim H -f -L -X // [ #f #i #_ #x #H destruct | #f #_ #L #V #_ #_ #x #H destruct @@ -50,12 +50,12 @@ fact frees_inv_sort_aux: ∀f,L,X. L ⊢ 𝐅+⦃X⦄ ≘ f → ∀x. X = ⋆x ] qed-. -lemma frees_inv_sort: ∀f,L,s. L ⊢ 𝐅+⦃⋆s⦄ ≘ f → 𝐈⦃f⦄. +lemma frees_inv_sort: ∀f,L,s. L ⊢ 𝐅+❪⋆s❫ ≘ f → 𝐈❪f❫. /2 width=5 by frees_inv_sort_aux/ qed-. fact frees_inv_atom_aux: - ∀f,L,X. L ⊢ 𝐅+⦃X⦄ ≘ f → ∀i. L = ⋆ → X = #i → - ∃∃g. 𝐈⦃g⦄ & f = ⫯*[i]↑g. + ∀f,L,X. L ⊢ 𝐅+❪X❫ ≘ f → ∀i. L = ⋆ → X = #i → + ∃∃g. 𝐈❪g❫ & f = ⫯*[i]↑g. #f #L #X #H elim H -f -L -X [ #f #L #s #_ #j #_ #H destruct | #f #i #Hf #j #_ #H destruct /2 width=3 by ex2_intro/ @@ -68,12 +68,12 @@ fact frees_inv_atom_aux: ] qed-. -lemma frees_inv_atom: ∀f,i. ⋆ ⊢ 𝐅+⦃#i⦄ ≘ f → ∃∃g. 𝐈⦃g⦄ & f = ⫯*[i]↑g. +lemma frees_inv_atom: ∀f,i. ⋆ ⊢ 𝐅+❪#i❫ ≘ f → ∃∃g. 𝐈❪g❫ & f = ⫯*[i]↑g. /2 width=5 by frees_inv_atom_aux/ qed-. fact frees_inv_pair_aux: - ∀f,L,X. L ⊢ 𝐅+⦃X⦄ ≘ f → ∀I,K,V. L = K.ⓑ{I}V → X = #0 → - ∃∃g. K ⊢ 𝐅+⦃V⦄ ≘ g & f = ↑g. + ∀f,L,X. L ⊢ 𝐅+❪X❫ ≘ f → ∀I,K,V. L = K.ⓑ[I]V → X = #0 → + ∃∃g. K ⊢ 𝐅+❪V❫ ≘ g & f = ↑g. #f #L #X * -f -L -X [ #f #L #s #_ #Z #Y #X #_ #H destruct | #f #i #_ #Z #Y #X #H destruct @@ -86,12 +86,12 @@ fact frees_inv_pair_aux: ] qed-. -lemma frees_inv_pair: ∀f,I,K,V. K.ⓑ{I}V ⊢ 𝐅+⦃#0⦄ ≘ f → ∃∃g. K ⊢ 𝐅+⦃V⦄ ≘ g & f = ↑g. +lemma frees_inv_pair: ∀f,I,K,V. K.ⓑ[I]V ⊢ 𝐅+❪#0❫ ≘ f → ∃∃g. K ⊢ 𝐅+❪V❫ ≘ g & f = ↑g. /2 width=6 by frees_inv_pair_aux/ qed-. fact frees_inv_unit_aux: - ∀f,L,X. L ⊢ 𝐅+⦃X⦄ ≘ f → ∀I,K. L = K.ⓤ{I} → X = #0 → - ∃∃g. 𝐈⦃g⦄ & f = ↑g. + ∀f,L,X. L ⊢ 𝐅+❪X❫ ≘ f → ∀I,K. L = K.ⓤ[I] → X = #0 → + ∃∃g. 𝐈❪g❫ & f = ↑g. #f #L #X * -f -L -X [ #f #L #s #_ #Z #Y #_ #H destruct | #f #i #_ #Z #Y #H destruct @@ -104,12 +104,12 @@ fact frees_inv_unit_aux: ] qed-. -lemma frees_inv_unit: ∀f,I,K. K.ⓤ{I} ⊢ 𝐅+⦃#0⦄ ≘ f → ∃∃g. 𝐈⦃g⦄ & f = ↑g. +lemma frees_inv_unit: ∀f,I,K. K.ⓤ[I] ⊢ 𝐅+❪#0❫ ≘ f → ∃∃g. 𝐈❪g❫ & f = ↑g. /2 width=7 by frees_inv_unit_aux/ qed-. fact frees_inv_lref_aux: - ∀f,L,X. L ⊢ 𝐅+⦃X⦄ ≘ f → ∀I,K,j. L = K.ⓘ{I} → X = #(↑j) → - ∃∃g. K ⊢ 𝐅+⦃#j⦄ ≘ g & f = ⫯g. + ∀f,L,X. L ⊢ 𝐅+❪X❫ ≘ f → ∀I,K,j. L = K.ⓘ[I] → X = #(↑j) → + ∃∃g. K ⊢ 𝐅+❪#j❫ ≘ g & f = ⫯g. #f #L #X * -f -L -X [ #f #L #s #_ #Z #Y #j #_ #H destruct | #f #i #_ #Z #Y #j #H destruct @@ -123,11 +123,11 @@ fact frees_inv_lref_aux: qed-. lemma frees_inv_lref: - ∀f,I,K,i. K.ⓘ{I} ⊢ 𝐅+⦃#(↑i)⦄ ≘ f → - ∃∃g. K ⊢ 𝐅+⦃#i⦄ ≘ g & f = ⫯g. + ∀f,I,K,i. K.ⓘ[I] ⊢ 𝐅+❪#(↑i)❫ ≘ f → + ∃∃g. K ⊢ 𝐅+❪#i❫ ≘ g & f = ⫯g. /2 width=6 by frees_inv_lref_aux/ qed-. -fact frees_inv_gref_aux: ∀f,L,X. L ⊢ 𝐅+⦃X⦄ ≘ f → ∀x. X = §x → 𝐈⦃f⦄. +fact frees_inv_gref_aux: ∀f,L,X. L ⊢ 𝐅+❪X❫ ≘ f → ∀x. X = §x → 𝐈❪f❫. #f #L #X #H elim H -f -L -X // [ #f #i #_ #x #H destruct | #f #_ #L #V #_ #_ #x #H destruct @@ -138,12 +138,12 @@ fact frees_inv_gref_aux: ∀f,L,X. L ⊢ 𝐅+⦃X⦄ ≘ f → ∀x. X = §x ] qed-. -lemma frees_inv_gref: ∀f,L,l. L ⊢ 𝐅+⦃§l⦄ ≘ f → 𝐈⦃f⦄. +lemma frees_inv_gref: ∀f,L,l. L ⊢ 𝐅+❪§l❫ ≘ f → 𝐈❪f❫. /2 width=5 by frees_inv_gref_aux/ qed-. fact frees_inv_bind_aux: - ∀f,L,X. L ⊢ 𝐅+⦃X⦄ ≘ f → ∀p,I,V,T. X = ⓑ{p,I}V.T → - ∃∃f1,f2. L ⊢ 𝐅+⦃V⦄ ≘ f1 & L.ⓑ{I}V ⊢ 𝐅+⦃T⦄ ≘ f2 & f1 ⋓ ⫱f2 ≘ f. + ∀f,L,X. L ⊢ 𝐅+❪X❫ ≘ f → ∀p,I,V,T. X = ⓑ[p,I]V.T → + ∃∃f1,f2. L ⊢ 𝐅+❪V❫ ≘ f1 & L.ⓑ[I]V ⊢ 𝐅+❪T❫ ≘ f2 & f1 ⋓ ⫱f2 ≘ f. #f #L #X * -f -L -X [ #f #L #s #_ #q #J #W #U #H destruct | #f #i #_ #q #J #W #U #H destruct @@ -157,12 +157,12 @@ fact frees_inv_bind_aux: qed-. lemma frees_inv_bind: - ∀f,p,I,L,V,T. L ⊢ 𝐅+⦃ⓑ{p,I}V.T⦄ ≘ f → - ∃∃f1,f2. L ⊢ 𝐅+⦃V⦄ ≘ f1 & L.ⓑ{I}V ⊢ 𝐅+⦃T⦄ ≘ f2 & f1 ⋓ ⫱f2 ≘ f. + ∀f,p,I,L,V,T. L ⊢ 𝐅+❪ⓑ[p,I]V.T❫ ≘ f → + ∃∃f1,f2. L ⊢ 𝐅+❪V❫ ≘ f1 & L.ⓑ[I]V ⊢ 𝐅+❪T❫ ≘ f2 & f1 ⋓ ⫱f2 ≘ f. /2 width=4 by frees_inv_bind_aux/ qed-. -fact frees_inv_flat_aux: ∀f,L,X. L ⊢ 𝐅+⦃X⦄ ≘ f → ∀I,V,T. X = ⓕ{I}V.T → - ∃∃f1,f2. L ⊢ 𝐅+⦃V⦄ ≘ f1 & L ⊢ 𝐅+⦃T⦄ ≘ f2 & f1 ⋓ f2 ≘ f. +fact frees_inv_flat_aux: ∀f,L,X. L ⊢ 𝐅+❪X❫ ≘ f → ∀I,V,T. X = ⓕ[I]V.T → + ∃∃f1,f2. L ⊢ 𝐅+❪V❫ ≘ f1 & L ⊢ 𝐅+❪T❫ ≘ f2 & f1 ⋓ f2 ≘ f. #f #L #X * -f -L -X [ #f #L #s #_ #J #W #U #H destruct | #f #i #_ #J #W #U #H destruct @@ -176,13 +176,13 @@ fact frees_inv_flat_aux: ∀f,L,X. L ⊢ 𝐅+⦃X⦄ ≘ f → ∀I,V,T. X = qed-. lemma frees_inv_flat: - ∀f,I,L,V,T. L ⊢ 𝐅+⦃ⓕ{I}V.T⦄ ≘ f → - ∃∃f1,f2. L ⊢ 𝐅+⦃V⦄ ≘ f1 & L ⊢ 𝐅+⦃T⦄ ≘ f2 & f1 ⋓ f2 ≘ f. + ∀f,I,L,V,T. L ⊢ 𝐅+❪ⓕ[I]V.T❫ ≘ f → + ∃∃f1,f2. L ⊢ 𝐅+❪V❫ ≘ f1 & L ⊢ 𝐅+❪T❫ ≘ f2 & f1 ⋓ f2 ≘ f. /2 width=4 by frees_inv_flat_aux/ qed-. (* Basic properties ********************************************************) -lemma frees_eq_repl_back: ∀L,T. eq_repl_back … (λf. L ⊢ 𝐅+⦃T⦄ ≘ f). +lemma frees_eq_repl_back: ∀L,T. eq_repl_back … (λf. L ⊢ 𝐅+❪T❫ ≘ f). #L #T #f1 #H elim H -f1 -L -T [ /3 width=3 by frees_sort, isid_eq_repl_back/ | #f1 #i #Hf1 #g2 #H @@ -203,11 +203,11 @@ lemma frees_eq_repl_back: ∀L,T. eq_repl_back … (λf. L ⊢ 𝐅+⦃T⦄ ≘ ] qed-. -lemma frees_eq_repl_fwd: ∀L,T. eq_repl_fwd … (λf. L ⊢ 𝐅+⦃T⦄ ≘ f). +lemma frees_eq_repl_fwd: ∀L,T. eq_repl_fwd … (λf. L ⊢ 𝐅+❪T❫ ≘ f). #L #T @eq_repl_sym /2 width=3 by frees_eq_repl_back/ qed-. -lemma frees_lref_push: ∀f,i. ⋆ ⊢ 𝐅+⦃#i⦄ ≘ f → ⋆ ⊢ 𝐅+⦃#↑i⦄ ≘ ⫯f. +lemma frees_lref_push: ∀f,i. ⋆ ⊢ 𝐅+❪#i❫ ≘ f → ⋆ ⊢ 𝐅+❪#↑i❫ ≘ ⫯f. #f #i #H elim (frees_inv_atom … H) -H #g #Hg #H destruct /2 width=1 by frees_atom/ @@ -215,7 +215,7 @@ qed. (* Forward lemmas with test for finite colength *****************************) -lemma frees_fwd_isfin: ∀f,L,T. L ⊢ 𝐅+⦃T⦄ ≘ f → 𝐅⦃f⦄. +lemma frees_fwd_isfin: ∀f,L,T. L ⊢ 𝐅+❪T❫ ≘ f → 𝐅❪f❫. #f #L #T #H elim H -f -L -T /4 width=5 by sor_isfin, isfin_isid, isfin_tl, isfin_pushs, isfin_push, isfin_next/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/frees_append.ma b/matita/matita/contribs/lambdadelta/static_2/static/frees_append.ma index 8863fb15e..294662aa4 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/frees_append.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/frees_append.ma @@ -19,7 +19,7 @@ include "static_2/static/frees.ma". (* Properties with append for local environments ****************************) -lemma frees_append_void: ∀f,K,T. K ⊢ 𝐅+⦃T⦄ ≘ f → ⓧ.K ⊢ 𝐅+⦃T⦄ ≘ f. +lemma frees_append_void: ∀f,K,T. K ⊢ 𝐅+❪T❫ ≘ f → ⓧ.K ⊢ 𝐅+❪T❫ ≘ f. #f #K #T #H elim H -f -K -T [ /2 width=1 by frees_sort/ | #f * /3 width=1 by frees_atom, frees_unit, frees_lref/ @@ -35,8 +35,8 @@ qed. (* Inversion lemmas with append for local environments **********************) fact frees_inv_append_void_aux: - ∀f,L,T. L ⊢ 𝐅+⦃T⦄ ≘ f → - ∀K. L = ⓧ.K → K ⊢ 𝐅+⦃T⦄ ≘ f. + ∀f,L,T. L ⊢ 𝐅+❪T❫ ≘ f → + ∀K. L = ⓧ.K → K ⊢ 𝐅+❪T❫ ≘ f. #f #L #T #H elim H -f -L -T [ /2 width=1 by frees_sort/ | #f #i #_ #K #H @@ -56,5 +56,5 @@ fact frees_inv_append_void_aux: ] qed-. -lemma frees_inv_append_void: ∀f,K,T. ⓧ.K ⊢ 𝐅+⦃T⦄ ≘ f → K ⊢ 𝐅+⦃T⦄ ≘ f. +lemma frees_inv_append_void: ∀f,K,T. ⓧ.K ⊢ 𝐅+❪T❫ ≘ f → K ⊢ 𝐅+❪T❫ ≘ f. /2 width=3 by frees_inv_append_void_aux/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/frees_drops.ma b/matita/matita/contribs/lambdadelta/static_2/static/frees_drops.ma index bc5a7056b..37c629351 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/frees_drops.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/frees_drops.ma @@ -21,8 +21,8 @@ include "static_2/static/frees_fqup.ma". (* Advanced properties ******************************************************) lemma frees_atom_drops: - ∀b,L,i. ⇩*[b,𝐔❴i❵] L ≘ ⋆ → - ∀f. 𝐈⦃f⦄ → L ⊢ 𝐅+⦃#i⦄ ≘ ⫯*[i]↑f. + ∀b,L,i. ⇩*[b,𝐔❨i❩] L ≘ ⋆ → + ∀f. 𝐈❪f❫ → L ⊢ 𝐅+❪#i❫ ≘ ⫯*[i]↑f. #b #L elim L -L /2 width=1 by frees_atom/ #L #I #IH * [ #H lapply (drops_fwd_isid … H ?) -H // #H destruct @@ -31,8 +31,8 @@ lemma frees_atom_drops: qed. lemma frees_pair_drops: - ∀f,K,V. K ⊢ 𝐅+⦃V⦄ ≘ f → - ∀i,I,L. ⇩*[i] L ≘ K.ⓑ{I}V → L ⊢ 𝐅+⦃#i⦄ ≘ ⫯*[i] ↑f. + ∀f,K,V. K ⊢ 𝐅+❪V❫ ≘ f → + ∀i,I,L. ⇩*[i] L ≘ K.ⓑ[I]V → L ⊢ 𝐅+❪#i❫ ≘ ⫯*[i] ↑f. #f #K #V #Hf #i elim i -i [ #I #L #H lapply (drops_fwd_isid … H ?) -H /2 width=1 by frees_pair/ | #i #IH #I #L #H elim (drops_inv_succ … H) -H /3 width=2 by frees_lref/ @@ -40,8 +40,8 @@ lemma frees_pair_drops: qed. lemma frees_unit_drops: - ∀f. 𝐈⦃f⦄ → ∀I,K,i,L. ⇩*[i] L ≘ K.ⓤ{I} → - L ⊢ 𝐅+⦃#i⦄ ≘ ⫯*[i] ↑f. + ∀f. 𝐈❪f❫ → ∀I,K,i,L. ⇩*[i] L ≘ K.ⓤ[I] → + L ⊢ 𝐅+❪#i❫ ≘ ⫯*[i] ↑f. #f #Hf #I #K #i elim i -i [ #L #H lapply (drops_fwd_isid … H ?) -H /2 width=1 by frees_unit/ | #i #IH #Y #H elim (drops_inv_succ … H) -H @@ -50,8 +50,8 @@ lemma frees_unit_drops: qed. lemma frees_lref_pushs: - ∀f,K,j. K ⊢ 𝐅+⦃#j⦄ ≘ f → - ∀i,L. ⇩*[i] L ≘ K → L ⊢ 𝐅+⦃#(i+j)⦄ ≘ ⫯*[i] f. + ∀f,K,j. K ⊢ 𝐅+❪#j❫ ≘ f → + ∀i,L. ⇩*[i] L ≘ K → L ⊢ 𝐅+❪#(i+j)❫ ≘ ⫯*[i] f. #f #K #j #Hf #i elim i -i [ #L #H lapply (drops_fwd_isid … H ?) -H // | #i #IH #L #H elim (drops_inv_succ … H) -H @@ -62,10 +62,10 @@ qed. (* Advanced inversion lemmas ************************************************) lemma frees_inv_lref_drops: - ∀L,i,f. L ⊢ 𝐅+⦃#i⦄ ≘ f → - ∨∨ ∃∃g. ⇩*[Ⓕ,𝐔❴i❵] L ≘ ⋆ & 𝐈⦃g⦄ & f = ⫯*[i] ↑g - | ∃∃g,I,K,V. K ⊢ 𝐅+⦃V⦄ ≘ g & ⇩*[i] L ≘ K.ⓑ{I}V & f = ⫯*[i] ↑g - | ∃∃g,I,K. ⇩*[i] L ≘ K.ⓤ{I} & 𝐈⦃g⦄ & f = ⫯*[i] ↑g. + ∀L,i,f. L ⊢ 𝐅+❪#i❫ ≘ f → + ∨∨ ∃∃g. ⇩*[Ⓕ,𝐔❨i❩] L ≘ ⋆ & 𝐈❪g❫ & f = ⫯*[i] ↑g + | ∃∃g,I,K,V. K ⊢ 𝐅+❪V❫ ≘ g & ⇩*[i] L ≘ K.ⓑ[I]V & f = ⫯*[i] ↑g + | ∃∃g,I,K. ⇩*[i] L ≘ K.ⓤ[I] & 𝐈❪g❫ & f = ⫯*[i] ↑g. #L elim L -L [ #i #g | #L #I #IH * [ #g cases I -I [ #I | #I #V ] -IH | #i #g ] ] #H [ elim (frees_inv_atom … H) -H #f #Hf #H destruct @@ -86,9 +86,9 @@ qed-. (* Properties with generic slicing for local environments *******************) lemma frees_lifts: - ∀b,f1,K,T. K ⊢ 𝐅+⦃T⦄ ≘ f1 → + ∀b,f1,K,T. K ⊢ 𝐅+❪T❫ ≘ f1 → ∀f,L. ⇩*[b,f] L ≘ K → ∀U. ⇧*[f] T ≘ U → - ∀f2. f ~⊚ f1 ≘ f2 → L ⊢ 𝐅+⦃U⦄ ≘ f2. + ∀f2. f ~⊚ f1 ≘ f2 → L ⊢ 𝐅+❪U❫ ≘ f2. #b #f1 #K #T #H lapply (frees_fwd_isfin … H) elim H -f1 -K -T [ #f1 #K #s #Hf1 #_ #f #L #HLK #U #H2 #f2 #H3 lapply (coafter_isid_inv_dx … H3 … Hf1) -f1 #Hf2 @@ -144,8 +144,8 @@ lemma frees_lifts: qed-. lemma frees_lifts_SO: - ∀b,L,K. ⇩*[b,𝐔❴1❵] L ≘ K → ∀T,U. ⇧*[1] T ≘ U → - ∀f. K ⊢ 𝐅+⦃T⦄ ≘ f → L ⊢ 𝐅+⦃U⦄ ≘ ⫯f. + ∀b,L,K. ⇩*[b,𝐔❨1❩] L ≘ K → ∀T,U. ⇧*[1] T ≘ U → + ∀f. K ⊢ 𝐅+❪T❫ ≘ f → L ⊢ 𝐅+❪U❫ ≘ ⫯f. #b #L #K #HLK #T #U #HTU #f #Hf @(frees_lifts b … Hf … HTU) // (**) (* auto fails *) qed. @@ -153,44 +153,44 @@ qed. (* Forward lemmas with generic slicing for local environments ***************) lemma frees_fwd_coafter: - ∀b,f2,L,U. L ⊢ 𝐅+⦃U⦄ ≘ f2 → + ∀b,f2,L,U. L ⊢ 𝐅+❪U❫ ≘ f2 → ∀f,K. ⇩*[b,f] L ≘ K → ∀T. ⇧*[f] T ≘ U → - ∀f1. K ⊢ 𝐅+⦃T⦄ ≘ f1 → f ~⊚ f1 ≘ f2. + ∀f1. K ⊢ 𝐅+❪T❫ ≘ f1 → f ~⊚ f1 ≘ f2. /4 width=11 by frees_lifts, frees_mono, coafter_eq_repl_back0/ qed-. (* Inversion lemmas with generic slicing for local environments *************) lemma frees_inv_lifts_ex: - ∀b,f2,L,U. L ⊢ 𝐅+⦃U⦄ ≘ f2 → + ∀b,f2,L,U. L ⊢ 𝐅+❪U❫ ≘ f2 → ∀f,K. ⇩*[b,f] L ≘ K → ∀T. ⇧*[f] T ≘ U → - ∃∃f1. f ~⊚ f1 ≘ f2 & K ⊢ 𝐅+⦃T⦄ ≘ f1. + ∃∃f1. f ~⊚ f1 ≘ f2 & K ⊢ 𝐅+❪T❫ ≘ f1. #b #f2 #L #U #Hf2 #f #K #HLK #T elim (frees_total K T) /3 width=9 by frees_fwd_coafter, ex2_intro/ qed-. lemma frees_inv_lifts_SO: - ∀b,f,L,U. L ⊢ 𝐅+⦃U⦄ ≘ f → - ∀K. ⇩*[b,𝐔❴1❵] L ≘ K → ∀T. ⇧*[1] T ≘ U → - K ⊢ 𝐅+⦃T⦄ ≘ ⫱f. + ∀b,f,L,U. L ⊢ 𝐅+❪U❫ ≘ f → + ∀K. ⇩*[b,𝐔❨1❩] L ≘ K → ∀T. ⇧*[1] T ≘ U → + K ⊢ 𝐅+❪T❫ ≘ ⫱f. #b #f #L #U #H #K #HLK #T #HTU elim(frees_inv_lifts_ex … H … HLK … HTU) -b -L -U #f1 #Hf #Hf1 elim (coafter_inv_nxx … Hf) -Hf /3 width=5 by frees_eq_repl_back, coafter_isid_inv_sn/ qed-. lemma frees_inv_lifts: - ∀b,f2,L,U. L ⊢ 𝐅+⦃U⦄ ≘ f2 → + ∀b,f2,L,U. L ⊢ 𝐅+❪U❫ ≘ f2 → ∀f,K. ⇩*[b,f] L ≘ K → ∀T. ⇧*[f] T ≘ U → - ∀f1. f ~⊚ f1 ≘ f2 → K ⊢ 𝐅+⦃T⦄ ≘ f1. + ∀f1. f ~⊚ f1 ≘ f2 → K ⊢ 𝐅+❪T❫ ≘ f1. #b #f2 #L #U #H #f #K #HLK #T #HTU #f1 #Hf2 elim (frees_inv_lifts_ex … H … HLK … HTU) -b -L -U /3 width=7 by frees_eq_repl_back, coafter_inj/ qed-. (* Note: this is used by rex_conf and might be modified *) lemma frees_inv_drops_next: - ∀f1,L1,T1. L1 ⊢ 𝐅+⦃T1⦄ ≘ f1 → - ∀I2,L2,V2,n. ⇩*[n] L1 ≘ L2.ⓑ{I2}V2 → + ∀f1,L1,T1. L1 ⊢ 𝐅+❪T1❫ ≘ f1 → + ∀I2,L2,V2,n. ⇩*[n] L1 ≘ L2.ⓑ[I2]V2 → ∀g1. ↑g1 = ⫱*[n] f1 → - ∃∃g2. L2 ⊢ 𝐅+⦃V2⦄ ≘ g2 & g2 ⊆ g1. + ∃∃g2. L2 ⊢ 𝐅+❪V2❫ ≘ g2 & g2 ⊆ g1. #f1 #L1 #T1 #H elim H -f1 -L1 -T1 [ #f1 #L1 #s #Hf1 #I2 #L2 #V2 #n #_ #g1 #H1 -I2 -L1 -s lapply (isid_tls n … Hf1) -Hf1

(liftsv_mono … HV12s … HV10s) -V1s // | @(acr_lifts … H1RP … HB … HV120) /3 width=2 by drops_refl, drops_drop/ ] @@ -148,11 +148,11 @@ lemma acr_gcr: ∀RR,RS,RP. gcp RR RS RP → gcr RR RS RP RP → qed. lemma acr_abst: ∀RR,RS,RP. gcp RR RS RP → gcr RR RS RP RP → - ∀p,G,L,W,T,A,B. ⦃G,L,W⦄ ϵ[RP] 〚B〛 → ( + ∀p,G,L,W,T,A,B. ❪G,L,W❫ ϵ ⟦B⟧[RP] → ( ∀b,f,L0,V0,W0,T0. ⇩*[b,f] L0 ≘ L → ⇧*[f] W ≘ W0 → ⇧*[⫯f] T ≘ T0 → - ⦃G,L0,V0⦄ ϵ[RP] 〚B〛 → ⦃G,L0,W0⦄ ϵ[RP] 〚B〛 → ⦃G,L0.ⓓⓝW0.V0,T0⦄ ϵ[RP] 〚A〛 + ❪G,L0,V0❫ ϵ ⟦B⟧[RP] → ❪G,L0,W0❫ ϵ ⟦B⟧[RP] → ❪G,L0.ⓓⓝW0.V0,T0❫ ϵ ⟦A⟧[RP] ) → - ⦃G,L,ⓛ{p}W.T⦄ ϵ[RP] 〚②B.A〛. + ❪G,L,ⓛ[p]W.T❫ ϵ ⟦②B.A⟧[RP]. #RR #RS #RP #H1RP #H2RP #p #G #L #W #T #A #B #HW #HA #f #L0 #V0 #X #HL0 #H #HB lapply (acr_gcr … H1RP H2RP A) #HCA lapply (acr_gcr … H1RP H2RP B) #HCB diff --git a/matita/matita/contribs/lambdadelta/static_2/static/lsuba.ma b/matita/matita/contribs/lambdadelta/static_2/static/lsuba.ma index ce9a92392..fd30febbf 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/lsuba.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/lsuba.ma @@ -20,8 +20,8 @@ include "static_2/static/aaa.ma". inductive lsuba (G:genv): relation lenv ≝ | lsuba_atom: lsuba G (⋆) (⋆) -| lsuba_bind: ∀I,L1,L2. lsuba G L1 L2 → lsuba G (L1.ⓘ{I}) (L2.ⓘ{I}) -| lsuba_beta: ∀L1,L2,W,V,A. ⦃G,L1⦄ ⊢ ⓝW.V ⁝ A → ⦃G,L2⦄ ⊢ W ⁝ A → +| lsuba_bind: ∀I,L1,L2. lsuba G L1 L2 → lsuba G (L1.ⓘ[I]) (L2.ⓘ[I]) +| lsuba_beta: ∀L1,L2,W,V,A. ❪G,L1❫ ⊢ ⓝW.V ⁝ A → ❪G,L2❫ ⊢ W ⁝ A → lsuba G L1 L2 → lsuba G (L1.ⓓⓝW.V) (L2.ⓛW) . @@ -42,9 +42,9 @@ qed-. lemma lsuba_inv_atom1: ∀G,L2. G ⊢ ⋆ ⫃⁝ L2 → L2 = ⋆. /2 width=4 by lsuba_inv_atom1_aux/ qed-. -fact lsuba_inv_bind1_aux: ∀G,L1,L2. G ⊢ L1 ⫃⁝ L2 → ∀I,K1. L1 = K1.ⓘ{I} → - (∃∃K2. G ⊢ K1 ⫃⁝ K2 & L2 = K2.ⓘ{I}) ∨ - ∃∃K2,W,V,A. ⦃G,K1⦄ ⊢ ⓝW.V ⁝ A & ⦃G,K2⦄ ⊢ W ⁝ A & +fact lsuba_inv_bind1_aux: ∀G,L1,L2. G ⊢ L1 ⫃⁝ L2 → ∀I,K1. L1 = K1.ⓘ[I] → + (∃∃K2. G ⊢ K1 ⫃⁝ K2 & L2 = K2.ⓘ[I]) ∨ + ∃∃K2,W,V,A. ❪G,K1❫ ⊢ ⓝW.V ⁝ A & ❪G,K2❫ ⊢ W ⁝ A & G ⊢ K1 ⫃⁝ K2 & I = BPair Abbr (ⓝW.V) & L2 = K2.ⓛW. #G #L1 #L2 * -L1 -L2 [ #J #K1 #H destruct @@ -53,9 +53,9 @@ fact lsuba_inv_bind1_aux: ∀G,L1,L2. G ⊢ L1 ⫃⁝ L2 → ∀I,K1. L1 = K1. ] qed-. -lemma lsuba_inv_bind1: ∀I,G,K1,L2. G ⊢ K1.ⓘ{I} ⫃⁝ L2 → - (∃∃K2. G ⊢ K1 ⫃⁝ K2 & L2 = K2.ⓘ{I}) ∨ - ∃∃K2,W,V,A. ⦃G,K1⦄ ⊢ ⓝW.V ⁝ A & ⦃G,K2⦄ ⊢ W ⁝ A & G ⊢ K1 ⫃⁝ K2 & +lemma lsuba_inv_bind1: ∀I,G,K1,L2. G ⊢ K1.ⓘ[I] ⫃⁝ L2 → + (∃∃K2. G ⊢ K1 ⫃⁝ K2 & L2 = K2.ⓘ[I]) ∨ + ∃∃K2,W,V,A. ❪G,K1❫ ⊢ ⓝW.V ⁝ A & ❪G,K2❫ ⊢ W ⁝ A & G ⊢ K1 ⫃⁝ K2 & I = BPair Abbr (ⓝW.V) & L2 = K2.ⓛW. /2 width=3 by lsuba_inv_bind1_aux/ qed-. @@ -70,9 +70,9 @@ qed-. lemma lsubc_inv_atom2: ∀G,L1. G ⊢ L1 ⫃⁝ ⋆ → L1 = ⋆. /2 width=4 by lsuba_inv_atom2_aux/ qed-. -fact lsuba_inv_bind2_aux: ∀G,L1,L2. G ⊢ L1 ⫃⁝ L2 → ∀I,K2. L2 = K2.ⓘ{I} → - (∃∃K1. G ⊢ K1 ⫃⁝ K2 & L1 = K1.ⓘ{I}) ∨ - ∃∃K1,V,W,A. ⦃G,K1⦄ ⊢ ⓝW.V ⁝ A & ⦃G,K2⦄ ⊢ W ⁝ A & +fact lsuba_inv_bind2_aux: ∀G,L1,L2. G ⊢ L1 ⫃⁝ L2 → ∀I,K2. L2 = K2.ⓘ[I] → + (∃∃K1. G ⊢ K1 ⫃⁝ K2 & L1 = K1.ⓘ[I]) ∨ + ∃∃K1,V,W,A. ❪G,K1❫ ⊢ ⓝW.V ⁝ A & ❪G,K2❫ ⊢ W ⁝ A & G ⊢ K1 ⫃⁝ K2 & I = BPair Abst W & L1 = K1.ⓓⓝW.V. #G #L1 #L2 * -L1 -L2 [ #J #K2 #H destruct @@ -81,9 +81,9 @@ fact lsuba_inv_bind2_aux: ∀G,L1,L2. G ⊢ L1 ⫃⁝ L2 → ∀I,K2. L2 = K2. ] qed-. -lemma lsuba_inv_bind2: ∀I,G,L1,K2. G ⊢ L1 ⫃⁝ K2.ⓘ{I} → - (∃∃K1. G ⊢ K1 ⫃⁝ K2 & L1 = K1.ⓘ{I}) ∨ - ∃∃K1,V,W,A. ⦃G,K1⦄ ⊢ ⓝW.V ⁝ A & ⦃G,K2⦄ ⊢ W ⁝ A & G ⊢ K1 ⫃⁝ K2 & +lemma lsuba_inv_bind2: ∀I,G,L1,K2. G ⊢ L1 ⫃⁝ K2.ⓘ[I] → + (∃∃K1. G ⊢ K1 ⫃⁝ K2 & L1 = K1.ⓘ[I]) ∨ + ∃∃K1,V,W,A. ❪G,K1❫ ⊢ ⓝW.V ⁝ A & ❪G,K2❫ ⊢ W ⁝ A & G ⊢ K1 ⫃⁝ K2 & I = BPair Abst W & L1 = K1.ⓓⓝW.V. /2 width=3 by lsuba_inv_bind2_aux/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/lsuba_aaa.ma b/matita/matita/contribs/lambdadelta/static_2/static/lsuba_aaa.ma index 9a42e6bf9..5f9c886c2 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/lsuba_aaa.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/lsuba_aaa.ma @@ -19,8 +19,8 @@ include "static_2/static/lsuba.ma". (* Properties with atomic arity assignment **********************************) -lemma lsuba_aaa_conf: ∀G,L1,V,A. ⦃G,L1⦄ ⊢ V ⁝ A → - ∀L2. G ⊢ L1 ⫃⁝ L2 → ⦃G,L2⦄ ⊢ V ⁝ A. +lemma lsuba_aaa_conf: ∀G,L1,V,A. ❪G,L1❫ ⊢ V ⁝ A → + ∀L2. G ⊢ L1 ⫃⁝ L2 → ❪G,L2❫ ⊢ V ⁝ A. #G #L1 #V #A #H elim H -G -L1 -V -A [ // | #I #G #L1 #V #A #HA #IH #L2 #H @@ -36,8 +36,8 @@ lemma lsuba_aaa_conf: ∀G,L1,V,A. ⦃G,L1⦄ ⊢ V ⁝ A → ] qed-. -lemma lsuba_aaa_trans: ∀G,L2,V,A. ⦃G,L2⦄ ⊢ V ⁝ A → - ∀L1. G ⊢ L1 ⫃⁝ L2 → ⦃G,L1⦄ ⊢ V ⁝ A. +lemma lsuba_aaa_trans: ∀G,L2,V,A. ❪G,L2❫ ⊢ V ⁝ A → + ∀L1. G ⊢ L1 ⫃⁝ L2 → ❪G,L1❫ ⊢ V ⁝ A. #G #L2 #V #A #H elim H -G -L2 -V -A [ // | #I #G #L2 #V #A #HA #IH #L1 #H diff --git a/matita/matita/contribs/lambdadelta/static_2/static/lsuba_drops.ma b/matita/matita/contribs/lambdadelta/static_2/static/lsuba_drops.ma index 6863c36e0..49040fe5e 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/lsuba_drops.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/lsuba_drops.ma @@ -19,10 +19,10 @@ include "static_2/static/lsuba.ma". (* Properties with generic slicing for local environments *******************) -(* Note: the premise 𝐔⦃f⦄ cannot be removed *) +(* Note: the premise 𝐔❪f❫ cannot be removed *) (* Basic_2A1: includes: lsuba_drop_O1_conf *) lemma lsuba_drops_conf_isuni: ∀G,L1,L2. G ⊢ L1 ⫃⁝ L2 → - ∀b,f,K1. 𝐔⦃f⦄ → ⇩*[b,f] L1 ≘ K1 → + ∀b,f,K1. 𝐔❪f❫ → ⇩*[b,f] L1 ≘ K1 → ∃∃K2. G ⊢ K1 ⫃⁝ K2 & ⇩*[b,f] L2 ≘ K2. #G #L1 #L2 #H elim H -L1 -L2 [ /2 width=3 by ex2_intro/ @@ -43,10 +43,10 @@ lemma lsuba_drops_conf_isuni: ∀G,L1,L2. G ⊢ L1 ⫃⁝ L2 → ] qed-. -(* Note: the premise 𝐔⦃f⦄ cannot be removed *) +(* Note: the premise 𝐔❪f❫ cannot be removed *) (* Basic_2A1: includes: lsuba_drop_O1_trans *) lemma lsuba_drops_trans_isuni: ∀G,L1,L2. G ⊢ L1 ⫃⁝ L2 → - ∀b,f,K2. 𝐔⦃f⦄ → ⇩*[b,f] L2 ≘ K2 → + ∀b,f,K2. 𝐔❪f❫ → ⇩*[b,f] L2 ≘ K2 → ∃∃K1. G ⊢ K1 ⫃⁝ K2 & ⇩*[b,f] L1 ≘ K1. #G #L1 #L2 #H elim H -L1 -L2 [ /2 width=3 by ex2_intro/ diff --git a/matita/matita/contribs/lambdadelta/static_2/static/lsubc.ma b/matita/matita/contribs/lambdadelta/static_2/static/lsubc.ma index d75cf8708..d264460fb 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/lsubc.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/lsubc.ma @@ -21,8 +21,8 @@ include "static_2/static/gcp_cr.ma". inductive lsubc (RP) (G): relation lenv ≝ | lsubc_atom: lsubc RP G (⋆) (⋆) -| lsubc_bind: ∀I,L1,L2. lsubc RP G L1 L2 → lsubc RP G (L1.ⓘ{I}) (L2.ⓘ{I}) -| lsubc_beta: ∀L1,L2,V,W,A. ⦃G,L1,V⦄ ϵ[RP] 〚A〛 → ⦃G,L1,W⦄ ϵ[RP] 〚A〛 → ⦃G,L2⦄ ⊢ W ⁝ A → +| lsubc_bind: ∀I,L1,L2. lsubc RP G L1 L2 → lsubc RP G (L1.ⓘ[I]) (L2.ⓘ[I]) +| lsubc_beta: ∀L1,L2,V,W,A. ❪G,L1,V❫ ϵ ⟦A⟧[RP] → ❪G,L1,W❫ ϵ ⟦A⟧[RP] → ❪G,L2❫ ⊢ W ⁝ A → lsubc RP G L1 L2 → lsubc RP G (L1. ⓓⓝW.V) (L2.ⓛW) . @@ -44,9 +44,9 @@ qed-. lemma lsubc_inv_atom1: ∀RP,G,L2. G ⊢ ⋆ ⫃[RP] L2 → L2 = ⋆. /2 width=5 by lsubc_inv_atom1_aux/ qed-. -fact lsubc_inv_bind1_aux: ∀RP,G,L1,L2. G ⊢ L1 ⫃[RP] L2 → ∀I,K1. L1 = K1.ⓘ{I} → - (∃∃K2. G ⊢ K1 ⫃[RP] K2 & L2 = K2.ⓘ{I}) ∨ - ∃∃K2,V,W,A. ⦃G,K1,V⦄ ϵ[RP] 〚A〛 & ⦃G,K1,W⦄ ϵ[RP] 〚A〛 & ⦃G,K2⦄ ⊢ W ⁝ A & +fact lsubc_inv_bind1_aux: ∀RP,G,L1,L2. G ⊢ L1 ⫃[RP] L2 → ∀I,K1. L1 = K1.ⓘ[I] → + (∃∃K2. G ⊢ K1 ⫃[RP] K2 & L2 = K2.ⓘ[I]) ∨ + ∃∃K2,V,W,A. ❪G,K1,V❫ ϵ ⟦A⟧[RP] & ❪G,K1,W❫ ϵ ⟦A⟧[RP] & ❪G,K2❫ ⊢ W ⁝ A & G ⊢ K1 ⫃[RP] K2 & L2 = K2. ⓛW & I = BPair Abbr (ⓝW.V). #RP #G #L1 #L2 * -L1 -L2 @@ -58,9 +58,9 @@ fact lsubc_inv_bind1_aux: ∀RP,G,L1,L2. G ⊢ L1 ⫃[RP] L2 → ∀I,K1. L1 = K qed-. (* Basic_1: was: csubc_gen_head_r *) -lemma lsubc_inv_bind1: ∀RP,I,G,K1,L2. G ⊢ K1.ⓘ{I} ⫃[RP] L2 → - (∃∃K2. G ⊢ K1 ⫃[RP] K2 & L2 = K2.ⓘ{I}) ∨ - ∃∃K2,V,W,A. ⦃G,K1,V⦄ ϵ[RP] 〚A〛 & ⦃G,K1,W⦄ ϵ[RP] 〚A〛 & ⦃G,K2⦄ ⊢ W ⁝ A & +lemma lsubc_inv_bind1: ∀RP,I,G,K1,L2. G ⊢ K1.ⓘ[I] ⫃[RP] L2 → + (∃∃K2. G ⊢ K1 ⫃[RP] K2 & L2 = K2.ⓘ[I]) ∨ + ∃∃K2,V,W,A. ❪G,K1,V❫ ϵ ⟦A⟧[RP] & ❪G,K1,W❫ ϵ ⟦A⟧[RP] & ❪G,K2❫ ⊢ W ⁝ A & G ⊢ K1 ⫃[RP] K2 & L2 = K2.ⓛW & I = BPair Abbr (ⓝW.V). /2 width=3 by lsubc_inv_bind1_aux/ qed-. @@ -77,9 +77,9 @@ qed-. lemma lsubc_inv_atom2: ∀RP,G,L1. G ⊢ L1 ⫃[RP] ⋆ → L1 = ⋆. /2 width=5 by lsubc_inv_atom2_aux/ qed-. -fact lsubc_inv_bind2_aux: ∀RP,G,L1,L2. G ⊢ L1 ⫃[RP] L2 → ∀I,K2. L2 = K2.ⓘ{I} → - (∃∃K1. G ⊢ K1 ⫃[RP] K2 & L1 = K1. ⓘ{I}) ∨ - ∃∃K1,V,W,A. ⦃G,K1,V⦄ ϵ[RP] 〚A〛 & ⦃G,K1,W⦄ ϵ[RP] 〚A〛 & ⦃G,K2⦄ ⊢ W ⁝ A & +fact lsubc_inv_bind2_aux: ∀RP,G,L1,L2. G ⊢ L1 ⫃[RP] L2 → ∀I,K2. L2 = K2.ⓘ[I] → + (∃∃K1. G ⊢ K1 ⫃[RP] K2 & L1 = K1. ⓘ[I]) ∨ + ∃∃K1,V,W,A. ❪G,K1,V❫ ϵ ⟦A⟧[RP] & ❪G,K1,W❫ ϵ ⟦A⟧[RP] & ❪G,K2❫ ⊢ W ⁝ A & G ⊢ K1 ⫃[RP] K2 & L1 = K1.ⓓⓝW.V & I = BPair Abst W. #RP #G #L1 #L2 * -L1 -L2 @@ -91,9 +91,9 @@ fact lsubc_inv_bind2_aux: ∀RP,G,L1,L2. G ⊢ L1 ⫃[RP] L2 → ∀I,K2. L2 = K qed-. (* Basic_1: was just: csubc_gen_head_l *) -lemma lsubc_inv_bind2: ∀RP,I,G,L1,K2. G ⊢ L1 ⫃[RP] K2.ⓘ{I} → - (∃∃K1. G ⊢ K1 ⫃[RP] K2 & L1 = K1.ⓘ{I}) ∨ - ∃∃K1,V,W,A. ⦃G,K1,V⦄ ϵ[RP] 〚A〛 & ⦃G,K1,W⦄ ϵ[RP] 〚A〛 & ⦃G,K2⦄ ⊢ W ⁝ A & +lemma lsubc_inv_bind2: ∀RP,I,G,L1,K2. G ⊢ L1 ⫃[RP] K2.ⓘ[I] → + (∃∃K1. G ⊢ K1 ⫃[RP] K2 & L1 = K1.ⓘ[I]) ∨ + ∃∃K1,V,W,A. ❪G,K1,V❫ ϵ ⟦A⟧[RP] & ❪G,K1,W❫ ϵ ⟦A⟧[RP] & ❪G,K2❫ ⊢ W ⁝ A & G ⊢ K1 ⫃[RP] K2 & L1 = K1.ⓓⓝW.V & I = BPair Abst W. /2 width=3 by lsubc_inv_bind2_aux/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/lsubc_drops.ma b/matita/matita/contribs/lambdadelta/static_2/static/lsubc_drops.ma index 4cfe0eade..26d627a90 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/lsubc_drops.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/lsubc_drops.ma @@ -19,11 +19,11 @@ include "static_2/static/lsubc.ma". (* Properties with generic slicing ******************************************) -(* Note: the premise 𝐔⦃f⦄ cannot be removed *) +(* Note: the premise 𝐔❪f❫ cannot be removed *) (* Basic_1: includes: csubc_drop_conf_O *) (* Basic_2A1: includes: lsubc_drop_O1_trans *) lemma lsubc_drops_trans_isuni: ∀RP,G,L1,L2. G ⊢ L1 ⫃[RP] L2 → - ∀b,f,K2. 𝐔⦃f⦄ → ⇩*[b,f] L2 ≘ K2 → + ∀b,f,K2. 𝐔❪f❫ → ⇩*[b,f] L2 ≘ K2 → ∃∃K1. ⇩*[b,f] L1 ≘ K1 & G ⊢ K1 ⫃[RP] K2. #RP #G #L1 #L2 #H elim H -L1 -L2 [ /2 width=3 by ex2_intro/ diff --git a/matita/matita/contribs/lambdadelta/static_2/static/lsubf.ma b/matita/matita/contribs/lambdadelta/static_2/static/lsubf.ma index a486161d6..2c3a1bf37 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/lsubf.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/lsubf.ma @@ -27,13 +27,13 @@ include "static_2/static/frees.ma". inductive lsubf: relation4 lenv rtmap lenv rtmap ≝ | lsubf_atom: ∀f1,f2. f1 ≡ f2 → lsubf (⋆) f1 (⋆) f2 | lsubf_push: ∀f1,f2,I1,I2,L1,L2. lsubf L1 (f1) L2 (f2) → - lsubf (L1.ⓘ{I1}) (⫯f1) (L2.ⓘ{I2}) (⫯f2) + lsubf (L1.ⓘ[I1]) (⫯f1) (L2.ⓘ[I2]) (⫯f2) | lsubf_bind: ∀f1,f2,I,L1,L2. lsubf L1 f1 L2 f2 → - lsubf (L1.ⓘ{I}) (↑f1) (L2.ⓘ{I}) (↑f2) -| lsubf_beta: ∀f,f0,f1,f2,L1,L2,W,V. L1 ⊢ 𝐅+⦃V⦄ ≘ f → f0 ⋓ f ≘ f1 → + lsubf (L1.ⓘ[I]) (↑f1) (L2.ⓘ[I]) (↑f2) +| lsubf_beta: ∀f,f0,f1,f2,L1,L2,W,V. L1 ⊢ 𝐅+❪V❫ ≘ f → f0 ⋓ f ≘ f1 → lsubf L1 f0 L2 f2 → lsubf (L1.ⓓⓝW.V) (↑f1) (L2.ⓛW) (↑f2) -| lsubf_unit: ∀f,f0,f1,f2,I1,I2,L1,L2,V. L1 ⊢ 𝐅+⦃V⦄ ≘ f → f0 ⋓ f ≘ f1 → - lsubf L1 f0 L2 f2 → lsubf (L1.ⓑ{I1}V) (↑f1) (L2.ⓤ{I2}) (↑f2) +| lsubf_unit: ∀f,f0,f1,f2,I1,I2,L1,L2,V. L1 ⊢ 𝐅+❪V❫ ≘ f → f0 ⋓ f ≘ f1 → + lsubf L1 f0 L2 f2 → lsubf (L1.ⓑ[I1]V) (↑f1) (L2.ⓤ[I2]) (↑f2) . interpretation @@ -43,7 +43,7 @@ interpretation (* Basic inversion lemmas ***************************************************) fact lsubf_inv_atom1_aux: - ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → L1 = ⋆ → + ∀f1,f2,L1,L2. ❪L1,f1❫ ⫃𝐅+ ❪L2,f2❫ → L1 = ⋆ → ∧∧ f1 ≡ f2 & L2 = ⋆. #f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2 [ /2 width=1 by conj/ @@ -54,13 +54,13 @@ fact lsubf_inv_atom1_aux: ] qed-. -lemma lsubf_inv_atom1: ∀f1,f2,L2. ⦃⋆,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → ∧∧ f1 ≡ f2 & L2 = ⋆. +lemma lsubf_inv_atom1: ∀f1,f2,L2. ❪⋆,f1❫ ⫃𝐅+ ❪L2,f2❫ → ∧∧ f1 ≡ f2 & L2 = ⋆. /2 width=3 by lsubf_inv_atom1_aux/ qed-. fact lsubf_inv_push1_aux: - ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → - ∀g1,I1,K1. f1 = ⫯g1 → L1 = K1.ⓘ{I1} → - ∃∃g2,I2,K2. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f2 = ⫯g2 & L2 = K2.ⓘ{I2}. + ∀f1,f2,L1,L2. ❪L1,f1❫ ⫃𝐅+ ❪L2,f2❫ → + ∀g1,I1,K1. f1 = ⫯g1 → L1 = K1.ⓘ[I1] → + ∃∃g2,I2,K2. ❪K1,g1❫ ⫃𝐅+ ❪K2,g2❫ & f2 = ⫯g2 & L2 = K2.ⓘ[I2]. #f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2 [ #f1 #f2 #_ #g1 #J1 #K1 #_ #H destruct | #f1 #f2 #I1 #I2 #L1 #L2 #H12 #g1 #J1 #K1 #H1 #H2 destruct @@ -72,19 +72,19 @@ fact lsubf_inv_push1_aux: qed-. lemma lsubf_inv_push1: - ∀g1,f2,I1,K1,L2. ⦃K1.ⓘ{I1},⫯g1⦄ ⫃𝐅+ ⦃L2,f2⦄ → - ∃∃g2,I2,K2. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f2 = ⫯g2 & L2 = K2.ⓘ{I2}. + ∀g1,f2,I1,K1,L2. ❪K1.ⓘ[I1],⫯g1❫ ⫃𝐅+ ❪L2,f2❫ → + ∃∃g2,I2,K2. ❪K1,g1❫ ⫃𝐅+ ❪K2,g2❫ & f2 = ⫯g2 & L2 = K2.ⓘ[I2]. /2 width=6 by lsubf_inv_push1_aux/ qed-. fact lsubf_inv_pair1_aux: - ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → - ∀g1,I,K1,X. f1 = ↑g1 → L1 = K1.ⓑ{I}X → - ∨∨ ∃∃g2,K2. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f2 = ↑g2 & L2 = K2.ⓑ{I}X - | ∃∃g,g0,g2,K2,W,V. ⦃K1,g0⦄ ⫃𝐅+ ⦃K2,g2⦄ & - K1 ⊢ 𝐅+⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 & + ∀f1,f2,L1,L2. ❪L1,f1❫ ⫃𝐅+ ❪L2,f2❫ → + ∀g1,I,K1,X. f1 = ↑g1 → L1 = K1.ⓑ[I]X → + ∨∨ ∃∃g2,K2. ❪K1,g1❫ ⫃𝐅+ ❪K2,g2❫ & f2 = ↑g2 & L2 = K2.ⓑ[I]X + | ∃∃g,g0,g2,K2,W,V. ❪K1,g0❫ ⫃𝐅+ ❪K2,g2❫ & + K1 ⊢ 𝐅+❪V❫ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 & I = Abbr & X = ⓝW.V & L2 = K2.ⓛW - | ∃∃g,g0,g2,J,K2. ⦃K1,g0⦄ ⫃𝐅+ ⦃K2,g2⦄ & - K1 ⊢ 𝐅+⦃X⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 & L2 = K2.ⓤ{J}. + | ∃∃g,g0,g2,J,K2. ❪K1,g0❫ ⫃𝐅+ ❪K2,g2❫ & + K1 ⊢ 𝐅+❪X❫ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 & L2 = K2.ⓤ[J]. #f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2 [ #f1 #f2 #_ #g1 #J #K1 #X #_ #H destruct | #f1 #f2 #I1 #I2 #L1 #L2 #H12 #g1 #J #K1 #X #H elim (discr_push_next … H) @@ -98,19 +98,19 @@ fact lsubf_inv_pair1_aux: qed-. lemma lsubf_inv_pair1: - ∀g1,f2,I,K1,L2,X. ⦃K1.ⓑ{I}X,↑g1⦄ ⫃𝐅+ ⦃L2,f2⦄ → - ∨∨ ∃∃g2,K2. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f2 = ↑g2 & L2 = K2.ⓑ{I}X - | ∃∃g,g0,g2,K2,W,V. ⦃K1,g0⦄ ⫃𝐅+ ⦃K2,g2⦄ & - K1 ⊢ 𝐅+⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 & + ∀g1,f2,I,K1,L2,X. ❪K1.ⓑ[I]X,↑g1❫ ⫃𝐅+ ❪L2,f2❫ → + ∨∨ ∃∃g2,K2. ❪K1,g1❫ ⫃𝐅+ ❪K2,g2❫ & f2 = ↑g2 & L2 = K2.ⓑ[I]X + | ∃∃g,g0,g2,K2,W,V. ❪K1,g0❫ ⫃𝐅+ ❪K2,g2❫ & + K1 ⊢ 𝐅+❪V❫ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 & I = Abbr & X = ⓝW.V & L2 = K2.ⓛW - | ∃∃g,g0,g2,J,K2. ⦃K1,g0⦄ ⫃𝐅+ ⦃K2,g2⦄ & - K1 ⊢ 𝐅+⦃X⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 & L2 = K2.ⓤ{J}. + | ∃∃g,g0,g2,J,K2. ❪K1,g0❫ ⫃𝐅+ ❪K2,g2❫ & + K1 ⊢ 𝐅+❪X❫ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 & L2 = K2.ⓤ[J]. /2 width=5 by lsubf_inv_pair1_aux/ qed-. fact lsubf_inv_unit1_aux: - ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → - ∀g1,I,K1. f1 = ↑g1 → L1 = K1.ⓤ{I} → - ∃∃g2,K2. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f2 = ↑g2 & L2 = K2.ⓤ{I}. + ∀f1,f2,L1,L2. ❪L1,f1❫ ⫃𝐅+ ❪L2,f2❫ → + ∀g1,I,K1. f1 = ↑g1 → L1 = K1.ⓤ[I] → + ∃∃g2,K2. ❪K1,g1❫ ⫃𝐅+ ❪K2,g2❫ & f2 = ↑g2 & L2 = K2.ⓤ[I]. #f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2 [ #f1 #f2 #_ #g1 #J #K1 #_ #H destruct | #f1 #f2 #I1 #I2 #L1 #L2 #H12 #g1 #J #K1 #H elim (discr_push_next … H) @@ -122,12 +122,12 @@ fact lsubf_inv_unit1_aux: qed-. lemma lsubf_inv_unit1: - ∀g1,f2,I,K1,L2. ⦃K1.ⓤ{I},↑g1⦄ ⫃𝐅+ ⦃L2,f2⦄ → - ∃∃g2,K2. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f2 = ↑g2 & L2 = K2.ⓤ{I}. + ∀g1,f2,I,K1,L2. ❪K1.ⓤ[I],↑g1❫ ⫃𝐅+ ❪L2,f2❫ → + ∃∃g2,K2. ❪K1,g1❫ ⫃𝐅+ ❪K2,g2❫ & f2 = ↑g2 & L2 = K2.ⓤ[I]. /2 width=5 by lsubf_inv_unit1_aux/ qed-. fact lsubf_inv_atom2_aux: - ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → L2 = ⋆ → + ∀f1,f2,L1,L2. ❪L1,f1❫ ⫃𝐅+ ❪L2,f2❫ → L2 = ⋆ → ∧∧ f1 ≡ f2 & L1 = ⋆. #f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2 [ /2 width=1 by conj/ @@ -138,13 +138,13 @@ fact lsubf_inv_atom2_aux: ] qed-. -lemma lsubf_inv_atom2: ∀f1,f2,L1. ⦃L1,f1⦄ ⫃𝐅+ ⦃⋆,f2⦄ → ∧∧f1 ≡ f2 & L1 = ⋆. +lemma lsubf_inv_atom2: ∀f1,f2,L1. ❪L1,f1❫ ⫃𝐅+ ❪⋆,f2❫ → ∧∧f1 ≡ f2 & L1 = ⋆. /2 width=3 by lsubf_inv_atom2_aux/ qed-. fact lsubf_inv_push2_aux: - ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → - ∀g2,I2,K2. f2 = ⫯g2 → L2 = K2.ⓘ{I2} → - ∃∃g1,I1,K1. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f1 = ⫯g1 & L1 = K1.ⓘ{I1}. + ∀f1,f2,L1,L2. ❪L1,f1❫ ⫃𝐅+ ❪L2,f2❫ → + ∀g2,I2,K2. f2 = ⫯g2 → L2 = K2.ⓘ[I2] → + ∃∃g1,I1,K1. ❪K1,g1❫ ⫃𝐅+ ❪K2,g2❫ & f1 = ⫯g1 & L1 = K1.ⓘ[I1]. #f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2 [ #f1 #f2 #_ #g2 #J2 #K2 #_ #H destruct | #f1 #f2 #I1 #I2 #L1 #L2 #H12 #g2 #J2 #K2 #H1 #H2 destruct @@ -156,16 +156,16 @@ fact lsubf_inv_push2_aux: qed-. lemma lsubf_inv_push2: - ∀f1,g2,I2,L1,K2. ⦃L1,f1⦄ ⫃𝐅+ ⦃K2.ⓘ{I2},⫯g2⦄ → - ∃∃g1,I1,K1. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f1 = ⫯g1 & L1 = K1.ⓘ{I1}. + ∀f1,g2,I2,L1,K2. ❪L1,f1❫ ⫃𝐅+ ❪K2.ⓘ[I2],⫯g2❫ → + ∃∃g1,I1,K1. ❪K1,g1❫ ⫃𝐅+ ❪K2,g2❫ & f1 = ⫯g1 & L1 = K1.ⓘ[I1]. /2 width=6 by lsubf_inv_push2_aux/ qed-. fact lsubf_inv_pair2_aux: - ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → - ∀g2,I,K2,W. f2 = ↑g2 → L2 = K2.ⓑ{I}W → - ∨∨ ∃∃g1,K1. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f1 = ↑g1 & L1 = K1.ⓑ{I}W - | ∃∃g,g0,g1,K1,V. ⦃K1,g0⦄ ⫃𝐅+ ⦃K2,g2⦄ & - K1 ⊢ 𝐅+⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 & + ∀f1,f2,L1,L2. ❪L1,f1❫ ⫃𝐅+ ❪L2,f2❫ → + ∀g2,I,K2,W. f2 = ↑g2 → L2 = K2.ⓑ[I]W → + ∨∨ ∃∃g1,K1. ❪K1,g1❫ ⫃𝐅+ ❪K2,g2❫ & f1 = ↑g1 & L1 = K1.ⓑ[I]W + | ∃∃g,g0,g1,K1,V. ❪K1,g0❫ ⫃𝐅+ ❪K2,g2❫ & + K1 ⊢ 𝐅+❪V❫ ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 & I = Abst & L1 = K1.ⓓⓝW.V. #f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2 [ #f1 #f2 #_ #g2 #J #K2 #X #_ #H destruct @@ -179,19 +179,19 @@ fact lsubf_inv_pair2_aux: qed-. lemma lsubf_inv_pair2: - ∀f1,g2,I,L1,K2,W. ⦃L1,f1⦄ ⫃𝐅+ ⦃K2.ⓑ{I}W,↑g2⦄ → - ∨∨ ∃∃g1,K1. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f1 = ↑g1 & L1 = K1.ⓑ{I}W - | ∃∃g,g0,g1,K1,V. ⦃K1,g0⦄ ⫃𝐅+ ⦃K2,g2⦄ & - K1 ⊢ 𝐅+⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 & + ∀f1,g2,I,L1,K2,W. ❪L1,f1❫ ⫃𝐅+ ❪K2.ⓑ[I]W,↑g2❫ → + ∨∨ ∃∃g1,K1. ❪K1,g1❫ ⫃𝐅+ ❪K2,g2❫ & f1 = ↑g1 & L1 = K1.ⓑ[I]W + | ∃∃g,g0,g1,K1,V. ❪K1,g0❫ ⫃𝐅+ ❪K2,g2❫ & + K1 ⊢ 𝐅+❪V❫ ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 & I = Abst & L1 = K1.ⓓⓝW.V. /2 width=5 by lsubf_inv_pair2_aux/ qed-. fact lsubf_inv_unit2_aux: - ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → - ∀g2,I,K2. f2 = ↑g2 → L2 = K2.ⓤ{I} → - ∨∨ ∃∃g1,K1. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f1 = ↑g1 & L1 = K1.ⓤ{I} - | ∃∃g,g0,g1,J,K1,V. ⦃K1,g0⦄ ⫃𝐅+ ⦃K2,g2⦄ & - K1 ⊢ 𝐅+⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 & L1 = K1.ⓑ{J}V. + ∀f1,f2,L1,L2. ❪L1,f1❫ ⫃𝐅+ ❪L2,f2❫ → + ∀g2,I,K2. f2 = ↑g2 → L2 = K2.ⓤ[I] → + ∨∨ ∃∃g1,K1. ❪K1,g1❫ ⫃𝐅+ ❪K2,g2❫ & f1 = ↑g1 & L1 = K1.ⓤ[I] + | ∃∃g,g0,g1,J,K1,V. ❪K1,g0❫ ⫃𝐅+ ❪K2,g2❫ & + K1 ⊢ 𝐅+❪V❫ ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 & L1 = K1.ⓑ[J]V. #f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2 [ #f1 #f2 #_ #g2 #J #K2 #_ #H destruct | #f1 #f2 #I1 #I2 #L1 #L2 #H12 #g2 #J #K2 #H elim (discr_push_next … H) @@ -204,28 +204,28 @@ fact lsubf_inv_unit2_aux: qed-. lemma lsubf_inv_unit2: - ∀f1,g2,I,L1,K2. ⦃L1,f1⦄ ⫃𝐅+ ⦃K2.ⓤ{I},↑g2⦄ → - ∨∨ ∃∃g1,K1. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f1 = ↑g1 & L1 = K1.ⓤ{I} - | ∃∃g,g0,g1,J,K1,V. ⦃K1,g0⦄ ⫃𝐅+ ⦃K2,g2⦄ & - K1 ⊢ 𝐅+⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 & L1 = K1.ⓑ{J}V. + ∀f1,g2,I,L1,K2. ❪L1,f1❫ ⫃𝐅+ ❪K2.ⓤ[I],↑g2❫ → + ∨∨ ∃∃g1,K1. ❪K1,g1❫ ⫃𝐅+ ❪K2,g2❫ & f1 = ↑g1 & L1 = K1.ⓤ[I] + | ∃∃g,g0,g1,J,K1,V. ❪K1,g0❫ ⫃𝐅+ ❪K2,g2❫ & + K1 ⊢ 𝐅+❪V❫ ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 & L1 = K1.ⓑ[J]V. /2 width=5 by lsubf_inv_unit2_aux/ qed-. (* Advanced inversion lemmas ************************************************) -lemma lsubf_inv_atom: ∀f1,f2. ⦃⋆,f1⦄ ⫃𝐅+ ⦃⋆,f2⦄ → f1 ≡ f2. +lemma lsubf_inv_atom: ∀f1,f2. ❪⋆,f1❫ ⫃𝐅+ ❪⋆,f2❫ → f1 ≡ f2. #f1 #f2 #H elim (lsubf_inv_atom1 … H) -H // qed-. lemma lsubf_inv_push_sn: - ∀g1,f2,I1,I2,K1,K2. ⦃K1.ⓘ{I1},⫯g1⦄ ⫃𝐅+ ⦃K2.ⓘ{I2},f2⦄ → - ∃∃g2. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f2 = ⫯g2. + ∀g1,f2,I1,I2,K1,K2. ❪K1.ⓘ[I1],⫯g1❫ ⫃𝐅+ ❪K2.ⓘ[I2],f2❫ → + ∃∃g2. ❪K1,g1❫ ⫃𝐅+ ❪K2,g2❫ & f2 = ⫯g2. #g1 #f2 #I #K1 #K2 #X #H elim (lsubf_inv_push1 … H) -H #g2 #I #Y #H0 #H2 #H destruct /2 width=3 by ex2_intro/ qed-. lemma lsubf_inv_bind_sn: - ∀g1,f2,I,K1,K2. ⦃K1.ⓘ{I},↑g1⦄ ⫃𝐅+ ⦃K2.ⓘ{I},f2⦄ → - ∃∃g2. ⦃K1,g1⦄ ⫃𝐅+ ⦃K2,g2⦄ & f2 = ↑g2. + ∀g1,f2,I,K1,K2. ❪K1.ⓘ[I],↑g1❫ ⫃𝐅+ ❪K2.ⓘ[I],f2❫ → + ∃∃g2. ❪K1,g1❫ ⫃𝐅+ ❪K2,g2❫ & f2 = ↑g2. #g1 #f2 * #I [2: #X ] #K1 #K2 #H [ elim (lsubf_inv_pair1 … H) -H * [ #z2 #Y2 #H2 #H #H0 destruct /2 width=3 by ex2_intro/ @@ -238,8 +238,8 @@ lemma lsubf_inv_bind_sn: qed-. lemma lsubf_inv_beta_sn: - ∀g1,f2,K1,K2,V,W. ⦃K1.ⓓⓝW.V,↑g1⦄ ⫃𝐅+ ⦃K2.ⓛW,f2⦄ → - ∃∃g,g0,g2. ⦃K1,g0⦄ ⫃𝐅+ ⦃K2,g2⦄ & K1 ⊢ 𝐅+⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2. + ∀g1,f2,K1,K2,V,W. ❪K1.ⓓⓝW.V,↑g1❫ ⫃𝐅+ ❪K2.ⓛW,f2❫ → + ∃∃g,g0,g2. ❪K1,g0❫ ⫃𝐅+ ❪K2,g2❫ & K1 ⊢ 𝐅+❪V❫ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2. #g1 #f2 #K1 #K2 #V #W #H elim (lsubf_inv_pair1 … H) -H * [ #z2 #Y2 #_ #_ #H destruct | #z #z0 #z2 #Y2 #X0 #X #H02 #Hz #Hg1 #H #_ #H0 #H1 destruct @@ -249,8 +249,8 @@ lemma lsubf_inv_beta_sn: qed-. lemma lsubf_inv_unit_sn: - ∀g1,f2,I,J,K1,K2,V. ⦃K1.ⓑ{I}V,↑g1⦄ ⫃𝐅+ ⦃K2.ⓤ{J},f2⦄ → - ∃∃g,g0,g2. ⦃K1,g0⦄ ⫃𝐅+ ⦃K2,g2⦄ & K1 ⊢ 𝐅+⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2. + ∀g1,f2,I,J,K1,K2,V. ❪K1.ⓑ[I]V,↑g1❫ ⫃𝐅+ ❪K2.ⓤ[J],f2❫ → + ∃∃g,g0,g2. ❪K1,g0❫ ⫃𝐅+ ❪K2,g2❫ & K1 ⊢ 𝐅+❪V❫ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2. #g1 #f2 #I #J #K1 #K2 #V #H elim (lsubf_inv_pair1 … H) -H * [ #z2 #Y2 #_ #_ #H destruct | #z #z0 #z2 #Y2 #X0 #X #_ #_ #_ #_ #_ #_ #H destruct @@ -259,7 +259,7 @@ lemma lsubf_inv_unit_sn: ] qed-. -lemma lsubf_inv_refl: ∀L,f1,f2. ⦃L,f1⦄ ⫃𝐅+ ⦃L,f2⦄ → f1 ≡ f2. +lemma lsubf_inv_refl: ∀L,f1,f2. ❪L,f1❫ ⫃𝐅+ ❪L,f2❫ → f1 ≡ f2. #L elim L -L /2 width=1 by lsubf_inv_atom/ #L #I #IH #f1 #f2 #H12 elim (pn_split f1) * #g1 #H destruct @@ -270,14 +270,14 @@ qed-. (* Basic forward lemmas *****************************************************) lemma lsubf_fwd_bind_tl: - ∀f1,f2,I,L1,L2. ⦃L1.ⓘ{I},f1⦄ ⫃𝐅+ ⦃L2.ⓘ{I},f2⦄ → ⦃L1,⫱f1⦄ ⫃𝐅+ ⦃L2,⫱f2⦄. + ∀f1,f2,I,L1,L2. ❪L1.ⓘ[I],f1❫ ⫃𝐅+ ❪L2.ⓘ[I],f2❫ → ❪L1,⫱f1❫ ⫃𝐅+ ❪L2,⫱f2❫. #f1 #f2 #I #L1 #L2 #H elim (pn_split f1) * #g1 #H0 destruct [ elim (lsubf_inv_push_sn … H) | elim (lsubf_inv_bind_sn … H) ] -H #g2 #H12 #H destruct // qed-. -lemma lsubf_fwd_isid_dx: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → 𝐈⦃f2⦄ → 𝐈⦃f1⦄. +lemma lsubf_fwd_isid_dx: ∀f1,f2,L1,L2. ❪L1,f1❫ ⫃𝐅+ ❪L2,f2❫ → 𝐈❪f2❫ → 𝐈❪f1❫. #f1 #f2 #L1 #L2 #H elim H -f1 -f2 -L1 -L2 [ /2 width=3 by isid_eq_repl_fwd/ | /4 width=3 by isid_inv_push, isid_push/ @@ -287,7 +287,7 @@ lemma lsubf_fwd_isid_dx: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → ] qed-. -lemma lsubf_fwd_isid_sn: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → 𝐈⦃f1⦄ → 𝐈⦃f2⦄. +lemma lsubf_fwd_isid_sn: ∀f1,f2,L1,L2. ❪L1,f1❫ ⫃𝐅+ ❪L2,f2❫ → 𝐈❪f1❫ → 𝐈❪f2❫. #f1 #f2 #L1 #L2 #H elim H -f1 -f2 -L1 -L2 [ /2 width=3 by isid_eq_repl_back/ | /4 width=3 by isid_inv_push, isid_push/ @@ -297,14 +297,14 @@ lemma lsubf_fwd_isid_sn: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → ] qed-. -lemma lsubf_fwd_sle: ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → f2 ⊆ f1. +lemma lsubf_fwd_sle: ∀f1,f2,L1,L2. ❪L1,f1❫ ⫃𝐅+ ❪L2,f2❫ → f2 ⊆ f1. #f1 #f2 #L1 #L2 #H elim H -f1 -f2 -L1 -L2 /3 width=5 by sor_inv_sle_sn_trans, sle_next, sle_push, sle_refl_eq, eq_sym/ qed-. (* Basic properties *********************************************************) -lemma lsubf_eq_repl_back1: ∀f2,L1,L2. eq_repl_back … (λf1. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄). +lemma lsubf_eq_repl_back1: ∀f2,L1,L2. eq_repl_back … (λf1. ❪L1,f1❫ ⫃𝐅+ ❪L2,f2❫). #f2 #L1 #L2 #f #H elim H -f -f2 -L1 -L2 [ #f1 #f2 #Hf12 #g1 #Hfg1 /3 width=3 by lsubf_atom, eq_canc_sn/ @@ -323,11 +323,11 @@ lemma lsubf_eq_repl_back1: ∀f2,L1,L2. eq_repl_back … (λf1. ⦃L1,f1⦄ ⫃ ] qed-. -lemma lsubf_eq_repl_fwd1: ∀f2,L1,L2. eq_repl_fwd … (λf1. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄). +lemma lsubf_eq_repl_fwd1: ∀f2,L1,L2. eq_repl_fwd … (λf1. ❪L1,f1❫ ⫃𝐅+ ❪L2,f2❫). #f2 #L1 #L2 @eq_repl_sym /2 width=3 by lsubf_eq_repl_back1/ qed-. -lemma lsubf_eq_repl_back2: ∀f1,L1,L2. eq_repl_back … (λf2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄). +lemma lsubf_eq_repl_back2: ∀f1,L1,L2. eq_repl_back … (λf2. ❪L1,f1❫ ⫃𝐅+ ❪L2,f2❫). #f1 #L1 #L2 #f #H elim H -f1 -f -L1 -L2 [ #f1 #f2 #Hf12 #g2 #Hfg2 /3 width=3 by lsubf_atom, eq_trans/ @@ -346,7 +346,7 @@ lemma lsubf_eq_repl_back2: ∀f1,L1,L2. eq_repl_back … (λf2. ⦃L1,f1⦄ ⫃ ] qed-. -lemma lsubf_eq_repl_fwd2: ∀f1,L1,L2. eq_repl_fwd … (λf2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄). +lemma lsubf_eq_repl_fwd2: ∀f1,L1,L2. eq_repl_fwd … (λf2. ❪L1,f1❫ ⫃𝐅+ ❪L2,f2❫). #f1 #L1 #L2 @eq_repl_sym /2 width=3 by lsubf_eq_repl_back2/ qed-. @@ -356,21 +356,21 @@ lemma lsubf_refl: bi_reflexive … lsubf. /2 width=1 by lsubf_push, lsubf_bind/ qed. -lemma lsubf_refl_eq: ∀f1,f2,L. f1 ≡ f2 → ⦃L,f1⦄ ⫃𝐅+ ⦃L,f2⦄. +lemma lsubf_refl_eq: ∀f1,f2,L. f1 ≡ f2 → ❪L,f1❫ ⫃𝐅+ ❪L,f2❫. /2 width=3 by lsubf_eq_repl_back2/ qed. lemma lsubf_bind_tl_dx: - ∀g1,f2,I,L1,L2. ⦃L1,g1⦄ ⫃𝐅+ ⦃L2,⫱f2⦄ → - ∃∃f1. ⦃L1.ⓘ{I},f1⦄ ⫃𝐅+ ⦃L2.ⓘ{I},f2⦄ & g1 = ⫱f1. + ∀g1,f2,I,L1,L2. ❪L1,g1❫ ⫃𝐅+ ❪L2,⫱f2❫ → + ∃∃f1. ❪L1.ⓘ[I],f1❫ ⫃𝐅+ ❪L2.ⓘ[I],f2❫ & g1 = ⫱f1. #g1 #f2 #I #L1 #L2 #H elim (pn_split f2) * #g2 #H2 destruct @ex2_intro [1,2,4,5: /2 width=2 by lsubf_push, lsubf_bind/ ] // (**) (* constructor needed *) qed-. lemma lsubf_beta_tl_dx: - ∀f,f0,g1,L1,V. L1 ⊢ 𝐅+⦃V⦄ ≘ f → f0 ⋓ f ≘ g1 → - ∀f2,L2,W. ⦃L1,f0⦄ ⫃𝐅+ ⦃L2,⫱f2⦄ → - ∃∃f1. ⦃L1.ⓓⓝW.V,f1⦄ ⫃𝐅+ ⦃L2.ⓛW,f2⦄ & ⫱f1 ⊆ g1. + ∀f,f0,g1,L1,V. L1 ⊢ 𝐅+❪V❫ ≘ f → f0 ⋓ f ≘ g1 → + ∀f2,L2,W. ❪L1,f0❫ ⫃𝐅+ ❪L2,⫱f2❫ → + ∃∃f1. ❪L1.ⓓⓝW.V,f1❫ ⫃𝐅+ ❪L2.ⓛW,f2❫ & ⫱f1 ⊆ g1. #f #f0 #g1 #L1 #V #Hf #Hg1 #f2 elim (pn_split f2) * #x2 #H2 #L2 #W #HL12 destruct [ /3 width=4 by lsubf_push, sor_inv_sle_sn, ex2_intro/ @@ -380,9 +380,9 @@ qed-. (* Note: this might be moved *) lemma lsubf_inv_sor_dx: - ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → + ∀f1,f2,L1,L2. ❪L1,f1❫ ⫃𝐅+ ❪L2,f2❫ → ∀f2l,f2r. f2l⋓f2r ≘ f2 → - ∃∃f1l,f1r. ⦃L1,f1l⦄ ⫃𝐅+ ⦃L2,f2l⦄ & ⦃L1,f1r⦄ ⫃𝐅+ ⦃L2,f2r⦄ & f1l⋓f1r ≘ f1. + ∃∃f1l,f1r. ❪L1,f1l❫ ⫃𝐅+ ❪L2,f2l❫ & ❪L1,f1r❫ ⫃𝐅+ ❪L2,f2r❫ & f1l⋓f1r ≘ f1. #f1 #f2 #L1 #L2 #H elim H -f1 -f2 -L1 -L2 [ /3 width=7 by sor_eq_repl_fwd3, ex3_2_intro/ | #g1 #g2 #I1 #I2 #L1 #L2 #_ #IH #f2l #f2r #H diff --git a/matita/matita/contribs/lambdadelta/static_2/static/lsubf_frees.ma b/matita/matita/contribs/lambdadelta/static_2/static/lsubf_frees.ma index 963893a24..de32a2f00 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/lsubf_frees.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/lsubf_frees.ma @@ -19,8 +19,8 @@ include "static_2/static/lsubf.ma". (* Properties with context-sensitive free variables *************************) lemma lsubf_frees_trans: - ∀f2,L2,T. L2 ⊢ 𝐅+⦃T⦄ ≘ f2 → - ∀f1,L1. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → L1 ⊢ 𝐅+⦃T⦄ ≘ f1. + ∀f2,L2,T. L2 ⊢ 𝐅+❪T❫ ≘ f2 → + ∀f1,L1. ❪L1,f1❫ ⫃𝐅+ ❪L2,f2❫ → L1 ⊢ 𝐅+❪T❫ ≘ f1. #f2 #L2 #T #H elim H -f2 -L2 -T [ /3 width=5 by lsubf_fwd_isid_dx, frees_sort/ | #f2 #i #Hf2 #g1 #Y1 #H diff --git a/matita/matita/contribs/lambdadelta/static_2/static/lsubf_lsubf.ma b/matita/matita/contribs/lambdadelta/static_2/static/lsubf_lsubf.ma index 63173fbf7..7d162a58e 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/lsubf_lsubf.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/lsubf_lsubf.ma @@ -20,9 +20,9 @@ include "static_2/static/lsubf.ma". (* Main properties **********************************************************) theorem lsubf_sor: - ∀K,L,g1,f1. ⦃K,g1⦄ ⫃𝐅+ ⦃L,f1⦄ → - ∀g2,f2. ⦃K,g2⦄ ⫃𝐅+ ⦃L,f2⦄ → - ∀g. g1 ⋓ g2 ≘ g → ∀f. f1 ⋓ f2 ≘ f → ⦃K,g⦄ ⫃𝐅+ ⦃L,f⦄. + ∀K,L,g1,f1. ❪K,g1❫ ⫃𝐅+ ❪L,f1❫ → + ∀g2,f2. ❪K,g2❫ ⫃𝐅+ ❪L,f2❫ → + ∀g. g1 ⋓ g2 ≘ g → ∀f. f1 ⋓ f2 ≘ f → ❪K,g❫ ⫃𝐅+ ❪L,f❫. #K elim K -K [ #L #g1 #f1 #H1 #g2 #f2 #H2 #g #Hg #f #Hf elim (lsubf_inv_atom1 … H1) -H1 #H1 #H destruct diff --git a/matita/matita/contribs/lambdadelta/static_2/static/lsubf_lsubr.ma b/matita/matita/contribs/lambdadelta/static_2/static/lsubf_lsubr.ma index 627bc1779..3e0ce90ba 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/lsubf_lsubr.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/lsubf_lsubr.ma @@ -20,7 +20,7 @@ include "static_2/static/lsubf_lsubf.ma". (* Forward lemmas with restricted refinement for local environments *********) lemma lsubf_fwd_lsubr_isdiv: - ∀f1,f2,L1,L2. ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄ → 𝛀⦃f1⦄ → 𝛀⦃f2⦄ → L1 ⫃ L2. + ∀f1,f2,L1,L2. ❪L1,f1❫ ⫃𝐅+ ❪L2,f2❫ → 𝛀❪f1❫ → 𝛀❪f2❫ → L1 ⫃ L2. #f1 #f2 #L1 #L2 #H elim H -f1 -f2 -L1 -L2 /4 width=3 by lsubr_bind, isdiv_inv_next/ [ #f1 #f2 #I1 #I2 #L1 #L2 #_ #_ #H @@ -33,7 +33,7 @@ qed-. (* Properties with restricted refinement for local environments *************) lemma lsubr_lsubf_isid: - ∀L1,L2. L1 ⫃ L2 → ∀f1,f2. 𝐈⦃f1⦄ → 𝐈⦃f2⦄ → ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄. + ∀L1,L2. L1 ⫃ L2 → ∀f1,f2. 𝐈❪f1❫ → 𝐈❪f2❫ → ❪L1,f1❫ ⫃𝐅+ ❪L2,f2❫. #L1 #L2 #H elim H -L1 -L2 [ /3 width=1 by lsubf_atom, isid_inv_eq_repl/ | #I #L1 #L2 | #L1 #L2 #V #W | #I1 #I2 #L1 #L2 #V @@ -45,8 +45,8 @@ elim (isid_inv_gen … Hf2) -Hf2 #g2 #Hg2 #H destruct qed. lemma lsubr_lsubf: - ∀f2,L2,T. L2 ⊢ 𝐅+⦃T⦄ ≘ f2 → ∀L1. L1 ⫃ L2 → - ∀f1. L1 ⊢ 𝐅+⦃T⦄ ≘ f1 → ⦃L1,f1⦄ ⫃𝐅+ ⦃L2,f2⦄. + ∀f2,L2,T. L2 ⊢ 𝐅+❪T❫ ≘ f2 → ∀L1. L1 ⫃ L2 → + ∀f1. L1 ⊢ 𝐅+❪T❫ ≘ f1 → ❪L1,f1❫ ⫃𝐅+ ❪L2,f2❫. #f2 #L2 #T #H elim H -f2 -L2 -T [ #f2 #L2 #s #Hf2 #L1 #HL12 #f1 #Hf1 lapply (frees_inv_sort … Hf1) -Hf1 /2 width=1 by lsubr_lsubf_isid/ diff --git a/matita/matita/contribs/lambdadelta/static_2/static/lsubr.ma b/matita/matita/contribs/lambdadelta/static_2/static/lsubr.ma index a6197c52f..5e70c9880 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/lsubr.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/lsubr.ma @@ -25,9 +25,9 @@ include "static_2/syntax/lenv.ma". (* Basic_2A1: includes: lsubr_pair *) inductive lsubr: relation lenv ≝ | lsubr_atom: lsubr (⋆) (⋆) -| lsubr_bind: ∀I,L1,L2. lsubr L1 L2 → lsubr (L1.ⓘ{I}) (L2.ⓘ{I}) +| lsubr_bind: ∀I,L1,L2. lsubr L1 L2 → lsubr (L1.ⓘ[I]) (L2.ⓘ[I]) | lsubr_beta: ∀L1,L2,V,W. lsubr L1 L2 → lsubr (L1.ⓓⓝW.V) (L2.ⓛW) -| lsubr_unit: ∀I1,I2,L1,L2,V. lsubr L1 L2 → lsubr (L1.ⓑ{I1}V) (L2.ⓤ{I2}) +| lsubr_unit: ∀I1,I2,L1,L2,V. lsubr L1 L2 → lsubr (L1.ⓑ[I1]V) (L2.ⓤ[I2]) . interpretation @@ -54,10 +54,10 @@ lemma lsubr_inv_atom1: ∀L2. ⋆ ⫃ L2 → L2 = ⋆. /2 width=3 by lsubr_inv_atom1_aux/ qed-. fact lsubr_inv_bind1_aux: - ∀L1,L2. L1 ⫃ L2 → ∀I,K1. L1 = K1.ⓘ{I} → - ∨∨ ∃∃K2. K1 ⫃ K2 & L2 = K2.ⓘ{I} + ∀L1,L2. L1 ⫃ L2 → ∀I,K1. L1 = K1.ⓘ[I] → + ∨∨ ∃∃K2. K1 ⫃ K2 & L2 = K2.ⓘ[I] | ∃∃K2,V,W. K1 ⫃ K2 & L2 = K2.ⓛW & I = BPair Abbr (ⓝW.V) - | ∃∃J1,J2,K2,V. K1 ⫃ K2 & L2 = K2.ⓤ{J2} & I = BPair J1 V. + | ∃∃J1,J2,K2,V. K1 ⫃ K2 & L2 = K2.ⓤ[J2] & I = BPair J1 V. #L1 #L2 * -L1 -L2 [ #J #K1 #H destruct | #I #L1 #L2 #HL12 #J #K1 #H destruct /3 width=3 by or3_intro0, ex2_intro/ @@ -68,10 +68,10 @@ qed-. (* Basic_2A1: uses: lsubr_inv_pair1 *) lemma lsubr_inv_bind1: - ∀I,K1,L2. K1.ⓘ{I} ⫃ L2 → - ∨∨ ∃∃K2. K1 ⫃ K2 & L2 = K2.ⓘ{I} + ∀I,K1,L2. K1.ⓘ[I] ⫃ L2 → + ∨∨ ∃∃K2. K1 ⫃ K2 & L2 = K2.ⓘ[I] | ∃∃K2,V,W. K1 ⫃ K2 & L2 = K2.ⓛW & I = BPair Abbr (ⓝW.V) - | ∃∃J1,J2,K2,V. K1 ⫃ K2 & L2 = K2.ⓤ{J2} & I = BPair J1 V. + | ∃∃J1,J2,K2,V. K1 ⫃ K2 & L2 = K2.ⓤ[J2] & I = BPair J1 V. /2 width=3 by lsubr_inv_bind1_aux/ qed-. fact lsubr_inv_atom2_aux: ∀L1,L2. L1 ⫃ L2 → L2 = ⋆ → L1 = ⋆. @@ -86,10 +86,10 @@ lemma lsubr_inv_atom2: ∀L1. L1 ⫃ ⋆ → L1 = ⋆. /2 width=3 by lsubr_inv_atom2_aux/ qed-. fact lsubr_inv_bind2_aux: - ∀L1,L2. L1 ⫃ L2 → ∀I,K2. L2 = K2.ⓘ{I} → - ∨∨ ∃∃K1. K1 ⫃ K2 & L1 = K1.ⓘ{I} + ∀L1,L2. L1 ⫃ L2 → ∀I,K2. L2 = K2.ⓘ[I] → + ∨∨ ∃∃K1. K1 ⫃ K2 & L1 = K1.ⓘ[I] | ∃∃K1,W,V. K1 ⫃ K2 & L1 = K1.ⓓⓝW.V & I = BPair Abst W - | ∃∃J1,J2,K1,V. K1 ⫃ K2 & L1 = K1.ⓑ{J1}V & I = BUnit J2. + | ∃∃J1,J2,K1,V. K1 ⫃ K2 & L1 = K1.ⓑ[J1]V & I = BUnit J2. #L1 #L2 * -L1 -L2 [ #J #K2 #H destruct | #I #L1 #L2 #HL12 #J #K2 #H destruct /3 width=3 by ex2_intro, or3_intro0/ @@ -99,10 +99,10 @@ fact lsubr_inv_bind2_aux: qed-. lemma lsubr_inv_bind2: - ∀I,L1,K2. L1 ⫃ K2.ⓘ{I} → - ∨∨ ∃∃K1. K1 ⫃ K2 & L1 = K1.ⓘ{I} + ∀I,L1,K2. L1 ⫃ K2.ⓘ[I] → + ∨∨ ∃∃K1. K1 ⫃ K2 & L1 = K1.ⓘ[I] | ∃∃K1,W,V. K1 ⫃ K2 & L1 = K1.ⓓⓝW.V & I = BPair Abst W - | ∃∃J1,J2,K1,V. K1 ⫃ K2 & L1 = K1.ⓑ{J1}V & I = BUnit J2. + | ∃∃J1,J2,K1,V. K1 ⫃ K2 & L1 = K1.ⓑ[J1]V & I = BUnit J2. /2 width=3 by lsubr_inv_bind2_aux/ qed-. (* Advanced inversion lemmas ************************************************) @@ -110,15 +110,15 @@ lemma lsubr_inv_bind2: lemma lsubr_inv_abst1: ∀K1,L2,W. K1.ⓛW ⫃ L2 → ∨∨ ∃∃K2. K1 ⫃ K2 & L2 = K2.ⓛW - | ∃∃I2,K2. K1 ⫃ K2 & L2 = K2.ⓤ{I2}. + | ∃∃I2,K2. K1 ⫃ K2 & L2 = K2.ⓤ[I2]. #K1 #L2 #W #H elim (lsubr_inv_bind1 … H) -H * /3 width=4 by ex2_2_intro, ex2_intro, or_introl, or_intror/ #K2 #V2 #W2 #_ #_ #H destruct qed-. lemma lsubr_inv_unit1: - ∀I,K1,L2. K1.ⓤ{I} ⫃ L2 → - ∃∃K2. K1 ⫃ K2 & L2 = K2.ⓤ{I}. + ∀I,K1,L2. K1.ⓤ[I] ⫃ L2 → + ∃∃K2. K1 ⫃ K2 & L2 = K2.ⓤ[I]. #I #K1 #L2 #H elim (lsubr_inv_bind1 … H) -H * [ #K2 #HK12 #H destruct /2 width=3 by ex2_intro/ | #K2 #V #W #_ #_ #H destruct @@ -127,8 +127,8 @@ lemma lsubr_inv_unit1: qed-. lemma lsubr_inv_pair2: - ∀I,L1,K2,W. L1 ⫃ K2.ⓑ{I}W → - ∨∨ ∃∃K1. K1 ⫃ K2 & L1 = K1.ⓑ{I}W + ∀I,L1,K2,W. L1 ⫃ K2.ⓑ[I]W → + ∨∨ ∃∃K1. K1 ⫃ K2 & L1 = K1.ⓑ[I]W | ∃∃K1,V. K1 ⫃ K2 & L1 = K1.ⓓⓝW.V & I = Abst. #I #L1 #K2 #W #H elim (lsubr_inv_bind2 … H) -H * [ /3 width=3 by ex2_intro, or_introl/ @@ -155,9 +155,9 @@ lemma lsubr_inv_abst2: qed-. lemma lsubr_inv_unit2: - ∀I,L1,K2. L1 ⫃ K2.ⓤ{I} → - ∨∨ ∃∃K1. K1 ⫃ K2 & L1 = K1.ⓤ{I} - | ∃∃J,K1,V. K1 ⫃ K2 & L1 = K1.ⓑ{J}V. + ∀I,L1,K2. L1 ⫃ K2.ⓤ[I] → + ∨∨ ∃∃K1. K1 ⫃ K2 & L1 = K1.ⓤ[I] + | ∃∃J,K1,V. K1 ⫃ K2 & L1 = K1.ⓑ[J]V. #I #L1 #K2 #H elim (lsubr_inv_bind2 … H) -H * [ /3 width=3 by ex2_intro, or_introl/ | #K1 #W #V #_ #_ #H destruct @@ -168,8 +168,8 @@ qed-. (* Basic forward lemmas *****************************************************) lemma lsubr_fwd_bind1: - ∀I1,K1,L2. K1.ⓘ{I1} ⫃ L2 → - ∃∃I2,K2. K1 ⫃ K2 & L2 = K2.ⓘ{I2}. + ∀I1,K1,L2. K1.ⓘ[I1] ⫃ L2 → + ∃∃I2,K2. K1 ⫃ K2 & L2 = K2.ⓘ[I2]. #I1 #K1 #L2 #H elim (lsubr_inv_bind1 … H) -H * [ #K2 #HK12 #H destruct /3 width=4 by ex2_2_intro/ | #K2 #W1 #V1 #HK12 #H1 #H2 destruct /3 width=4 by ex2_2_intro/ @@ -178,8 +178,8 @@ lemma lsubr_fwd_bind1: qed-. lemma lsubr_fwd_bind2: - ∀I2,L1,K2. L1 ⫃ K2.ⓘ{I2} → - ∃∃I1,K1. K1 ⫃ K2 & L1 = K1.ⓘ{I1}. + ∀I2,L1,K2. L1 ⫃ K2.ⓘ[I2] → + ∃∃I1,K1. K1 ⫃ K2 & L1 = K1.ⓘ[I1]. #I2 #L1 #K2 #H elim (lsubr_inv_bind2 … H) -H * [ #K1 #HK12 #H destruct /3 width=4 by ex2_2_intro/ | #K1 #W1 #V1 #HK12 #H1 #H2 destruct /3 width=4 by ex2_2_intro/ diff --git a/matita/matita/contribs/lambdadelta/static_2/static/lsubr_drops.ma b/matita/matita/contribs/lambdadelta/static_2/static/lsubr_drops.ma index 9876c8fd2..7859c7995 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/lsubr_drops.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/lsubr_drops.ma @@ -22,10 +22,10 @@ include "static_2/static/lsubr.ma". (* Basic_2A1: includes: lsubr_fwd_drop2_pair *) lemma lsubr_fwd_drops2_bind: ∀L1,L2. L1 ⫃ L2 → - ∀b,f,I,K2. 𝐔⦃f⦄ → ⇩*[b,f] L2 ≘ K2.ⓘ{I} → - ∨∨ ∃∃K1. K1 ⫃ K2 & ⇩*[b,f] L1 ≘ K1.ⓘ{I} + ∀b,f,I,K2. 𝐔❪f❫ → ⇩*[b,f] L2 ≘ K2.ⓘ[I] → + ∨∨ ∃∃K1. K1 ⫃ K2 & ⇩*[b,f] L1 ≘ K1.ⓘ[I] | ∃∃K1,W,V. K1 ⫃ K2 & ⇩*[b,f] L1 ≘ K1.ⓓⓝW.V & I = BPair Abst W - | ∃∃J1,J2,K1,V. K1 ⫃ K2 & ⇩*[b,f] L1 ≘ K1.ⓑ{J1}V & I = BUnit J2. + | ∃∃J1,J2,K1,V. K1 ⫃ K2 & ⇩*[b,f] L1 ≘ K1.ⓑ[J1]V & I = BUnit J2. #L1 #L2 #H elim H -L1 -L2 [ #b #f #I #K2 #_ #H elim (drops_inv_atom1 … H) -H #H destruct @@ -44,7 +44,7 @@ qed-. (* Basic_2A1: includes: lsubr_fwd_drop2_abbr *) lemma lsubr_fwd_drops2_abbr: ∀L1,L2. L1 ⫃ L2 → - ∀b,f,K2,V. 𝐔⦃f⦄ → ⇩*[b,f] L2 ≘ K2.ⓓV → + ∀b,f,K2,V. 𝐔❪f❫ → ⇩*[b,f] L2 ≘ K2.ⓓV → ∃∃K1. K1 ⫃ K2 & ⇩*[b,f] L1 ≘ K1.ⓓV. #L1 #L2 #HL12 #b #f #K2 #V #Hf #HLK2 elim (lsubr_fwd_drops2_bind … HL12 … Hf HLK2) -L2 -Hf // * diff --git a/matita/matita/contribs/lambdadelta/static_2/static/req.ma b/matita/matita/contribs/lambdadelta/static_2/static/req.ma index 58255521f..fcd79b33a 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/req.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/req.ma @@ -32,36 +32,36 @@ definition req_transitive: predicate (relation3 lenv term term) ≝ (* Basic inversion lemmas ***************************************************) -lemma req_inv_bind: ∀p,I,L1,L2,V,T. L1 ≡[ⓑ{p,I}V.T] L2 → - ∧∧ L1 ≡[V] L2 & L1.ⓑ{I}V ≡[T] L2.ⓑ{I}V. +lemma req_inv_bind: ∀p,I,L1,L2,V,T. L1 ≡[ⓑ[p,I]V.T] L2 → + ∧∧ L1 ≡[V] L2 & L1.ⓑ[I]V ≡[T] L2.ⓑ[I]V. /2 width=2 by rex_inv_bind/ qed-. -lemma req_inv_flat: ∀I,L1,L2,V,T. L1 ≡[ⓕ{I}V.T] L2 → +lemma req_inv_flat: ∀I,L1,L2,V,T. L1 ≡[ⓕ[I]V.T] L2 → ∧∧ L1 ≡[V] L2 & L1 ≡[T] L2. /2 width=2 by rex_inv_flat/ qed-. (* Advanced inversion lemmas ************************************************) -lemma req_inv_zero_pair_sn: ∀I,L2,K1,V. K1.ⓑ{I}V ≡[#0] L2 → - ∃∃K2. K1 ≡[V] K2 & L2 = K2.ⓑ{I}V. +lemma req_inv_zero_pair_sn: ∀I,L2,K1,V. K1.ⓑ[I]V ≡[#0] L2 → + ∃∃K2. K1 ≡[V] K2 & L2 = K2.ⓑ[I]V. #I #L2 #K1 #V #H elim (rex_inv_zero_pair_sn … H) -H #K2 #X #HK12 #HX #H destruct /2 width=3 by ex2_intro/ qed-. -lemma req_inv_zero_pair_dx: ∀I,L1,K2,V. L1 ≡[#0] K2.ⓑ{I}V → - ∃∃K1. K1 ≡[V] K2 & L1 = K1.ⓑ{I}V. +lemma req_inv_zero_pair_dx: ∀I,L1,K2,V. L1 ≡[#0] K2.ⓑ[I]V → + ∃∃K1. K1 ≡[V] K2 & L1 = K1.ⓑ[I]V. #I #L1 #K2 #V #H elim (rex_inv_zero_pair_dx … H) -H #K1 #X #HK12 #HX #H destruct /2 width=3 by ex2_intro/ qed-. -lemma req_inv_lref_bind_sn: ∀I1,K1,L2,i. K1.ⓘ{I1} ≡[#↑i] L2 → - ∃∃I2,K2. K1 ≡[#i] K2 & L2 = K2.ⓘ{I2}. +lemma req_inv_lref_bind_sn: ∀I1,K1,L2,i. K1.ⓘ[I1] ≡[#↑i] L2 → + ∃∃I2,K2. K1 ≡[#i] K2 & L2 = K2.ⓘ[I2]. /2 width=2 by rex_inv_lref_bind_sn/ qed-. -lemma req_inv_lref_bind_dx: ∀I2,K2,L1,i. L1 ≡[#↑i] K2.ⓘ{I2} → - ∃∃I1,K1. K1 ≡[#i] K2 & L1 = K1.ⓘ{I1}. +lemma req_inv_lref_bind_dx: ∀I2,K2,L1,i. L1 ≡[#↑i] K2.ⓘ[I2] → + ∃∃I1,K1. K1 ≡[#i] K2 & L1 = K1.ⓘ[I1]. /2 width=2 by rex_inv_lref_bind_dx/ qed-. (* Basic forward lemmas *****************************************************) @@ -76,8 +76,8 @@ qed-. (* Basic_properties *********************************************************) -lemma frees_req_conf: ∀f,L1,T. L1 ⊢ 𝐅+⦃T⦄ ≘ f → - ∀L2. L1 ≡[T] L2 → L2 ⊢ 𝐅+⦃T⦄ ≘ f. +lemma frees_req_conf: ∀f,L1,T. L1 ⊢ 𝐅+❪T❫ ≘ f → + ∀L2. L1 ≡[T] L2 → L2 ⊢ 𝐅+❪T❫ ≘ f. #f #L1 #T #H elim H -f -L1 -T [ /2 width=3 by frees_sort/ | #f #i #Hf #L2 #H2 diff --git a/matita/matita/contribs/lambdadelta/static_2/static/req_drops.ma b/matita/matita/contribs/lambdadelta/static_2/static/req_drops.ma index 9acbbb933..fa8ea6d84 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/req_drops.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/req_drops.ma @@ -20,7 +20,7 @@ include "static_2/static/req.ma". (* Note: req_inv_lifts_dx missing in basic_2A1 *) (* Basic_2A1: uses: lleq_inv_lift_le lleq_inv_lift_be lleq_inv_lift_ge *) -lemma req_inv_lifts_bi: ∀L1,L2,U. L1 ≡[U] L2 → ∀b,f. 𝐔⦃f⦄ → +lemma req_inv_lifts_bi: ∀L1,L2,U. L1 ≡[U] L2 → ∀b,f. 𝐔❪f❫ → ∀K1,K2. ⇩*[b,f] L1 ≘ K1 → ⇩*[b,f] L2 ≘ K2 → ∀T. ⇧*[f] T ≘ U → K1 ≡[T] K2. /2 width=10 by rex_inv_lifts_bi/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/reqx.ma b/matita/matita/contribs/lambdadelta/static_2/static/reqx.ma index e3cb96b73..25d445ee6 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/reqx.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/reqx.ma @@ -31,8 +31,8 @@ interpretation (* Basic properties ***********************************************************) -lemma frees_teqx_conf_reqx: ∀f,L1,T1. L1 ⊢ 𝐅+⦃T1⦄ ≘ f → ∀T2. T1 ≛ T2 → - ∀L2. L1 ≛[f] L2 → L2 ⊢ 𝐅+⦃T2⦄ ≘ f. +lemma frees_teqx_conf_reqx: ∀f,L1,T1. L1 ⊢ 𝐅+❪T1❫ ≘ f → ∀T2. T1 ≛ T2 → + ∀L2. L1 ≛[f] L2 → L2 ⊢ 𝐅+❪T2❫ ≘ f. #f #L1 #T1 #H elim H -f -L1 -T1 [ #f #L1 #s1 #Hf #X #H1 #L2 #_ elim (teqx_inv_sort1 … H1) -H1 #s2 #H destruct @@ -65,12 +65,12 @@ lemma frees_teqx_conf_reqx: ∀f,L1,T1. L1 ⊢ 𝐅+⦃T1⦄ ≘ f → ∀T2. T1 ] qed-. -lemma frees_teqx_conf: ∀f,L,T1. L ⊢ 𝐅+⦃T1⦄ ≘ f → - ∀T2. T1 ≛ T2 → L ⊢ 𝐅+⦃T2⦄ ≘ f. +lemma frees_teqx_conf: ∀f,L,T1. L ⊢ 𝐅+❪T1❫ ≘ f → + ∀T2. T1 ≛ T2 → L ⊢ 𝐅+❪T2❫ ≘ f. /4 width=7 by frees_teqx_conf_reqx, sex_refl, ext2_refl/ qed-. -lemma frees_reqx_conf: ∀f,L1,T. L1 ⊢ 𝐅+⦃T⦄ ≘ f → - ∀L2. L1 ≛[f] L2 → L2 ⊢ 𝐅+⦃T⦄ ≘ f. +lemma frees_reqx_conf: ∀f,L1,T. L1 ⊢ 𝐅+❪T❫ ≘ f → + ∀L2. L1 ≛[f] L2 → L2 ⊢ 𝐅+❪T❫ ≘ f. /2 width=7 by frees_teqx_conf_reqx, teqx_refl/ qed-. lemma teqx_rex_conf (R): s_r_confluent1 … cdeq (rex R). @@ -89,33 +89,33 @@ lemma teqx_reqx_div: ∀T1,T2. T1 ≛ T2 → ∀L1,L2. L1 ≛[T2] L2 → L1 ≛[T1] L2. /2 width=5 by teqx_rex_div/ qed-. -lemma reqx_atom: ∀I. ⋆ ≛[⓪{I}] ⋆. +lemma reqx_atom: ∀I. ⋆ ≛[⓪[I]] ⋆. /2 width=1 by rex_atom/ qed. lemma reqx_sort: ∀I1,I2,L1,L2,s. - L1 ≛[⋆s] L2 → L1.ⓘ{I1} ≛[⋆s] L2.ⓘ{I2}. + L1 ≛[⋆s] L2 → L1.ⓘ[I1] ≛[⋆s] L2.ⓘ[I2]. /2 width=1 by rex_sort/ qed. lemma reqx_pair: ∀I,L1,L2,V1,V2. - L1 ≛[V1] L2 → V1 ≛ V2 → L1.ⓑ{I}V1 ≛[#0] L2.ⓑ{I}V2. + L1 ≛[V1] L2 → V1 ≛ V2 → L1.ⓑ[I]V1 ≛[#0] L2.ⓑ[I]V2. /2 width=1 by rex_pair/ qed. -lemma reqx_unit: ∀f,I,L1,L2. 𝐈⦃f⦄ → L1 ≛[f] L2 → - L1.ⓤ{I} ≛[#0] L2.ⓤ{I}. +lemma reqx_unit: ∀f,I,L1,L2. 𝐈❪f❫ → L1 ≛[f] L2 → + L1.ⓤ[I] ≛[#0] L2.ⓤ[I]. /2 width=3 by rex_unit/ qed. lemma reqx_lref: ∀I1,I2,L1,L2,i. - L1 ≛[#i] L2 → L1.ⓘ{I1} ≛[#↑i] L2.ⓘ{I2}. + L1 ≛[#i] L2 → L1.ⓘ[I1] ≛[#↑i] L2.ⓘ[I2]. /2 width=1 by rex_lref/ qed. lemma reqx_gref: ∀I1,I2,L1,L2,l. - L1 ≛[§l] L2 → L1.ⓘ{I1} ≛[§l] L2.ⓘ{I2}. + L1 ≛[§l] L2 → L1.ⓘ[I1] ≛[§l] L2.ⓘ[I2]. /2 width=1 by rex_gref/ qed. lemma reqx_bind_repl_dx: ∀I,I1,L1,L2.∀T:term. - L1.ⓘ{I} ≛[T] L2.ⓘ{I1} → + L1.ⓘ[I] ≛[T] L2.ⓘ[I1] → ∀I2. I ≛ I2 → - L1.ⓘ{I} ≛[T] L2.ⓘ{I2}. + L1.ⓘ[I] ≛[T] L2.ⓘ[I2]. /2 width=2 by rex_bind_repl_dx/ qed-. (* Basic inversion lemmas ***************************************************) @@ -129,8 +129,8 @@ lemma reqx_inv_atom_dx: ∀Y1. ∀T:term. Y1 ≛[T] ⋆ → Y1 = ⋆. lemma reqx_inv_zero: ∀Y1,Y2. Y1 ≛[#0] Y2 → ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ - | ∃∃I,L1,L2,V1,V2. L1 ≛[V1] L2 & V1 ≛ V2 & Y1 = L1.ⓑ{I}V1 & Y2 = L2.ⓑ{I}V2 - | ∃∃f,I,L1,L2. 𝐈⦃f⦄ & L1 ≛[f] L2 & Y1 = L1.ⓤ{I} & Y2 = L2.ⓤ{I}. + | ∃∃I,L1,L2,V1,V2. L1 ≛[V1] L2 & V1 ≛ V2 & Y1 = L1.ⓑ[I]V1 & Y2 = L2.ⓑ[I]V2 + | ∃∃f,I,L1,L2. 𝐈❪f❫ & L1 ≛[f] L2 & Y1 = L1.ⓤ[I] & Y2 = L2.ⓤ[I]. #Y1 #Y2 #H elim (rex_inv_zero … H) -H * /3 width=9 by or3_intro0, or3_intro1, or3_intro2, ex4_5_intro, ex4_4_intro, conj/ qed-. @@ -138,56 +138,56 @@ qed-. lemma reqx_inv_lref: ∀Y1,Y2,i. Y1 ≛[#↑i] Y2 → ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ | ∃∃I1,I2,L1,L2. L1 ≛[#i] L2 & - Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}. + Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2]. /2 width=1 by rex_inv_lref/ qed-. (* Basic_2A1: uses: lleq_inv_bind lleq_inv_bind_O *) -lemma reqx_inv_bind: ∀p,I,L1,L2,V,T. L1 ≛[ⓑ{p,I}V.T] L2 → - ∧∧ L1 ≛[V] L2 & L1.ⓑ{I}V ≛[T] L2.ⓑ{I}V. +lemma reqx_inv_bind: ∀p,I,L1,L2,V,T. L1 ≛[ⓑ[p,I]V.T] L2 → + ∧∧ L1 ≛[V] L2 & L1.ⓑ[I]V ≛[T] L2.ⓑ[I]V. /2 width=2 by rex_inv_bind/ qed-. (* Basic_2A1: uses: lleq_inv_flat *) -lemma reqx_inv_flat: ∀I,L1,L2,V,T. L1 ≛[ⓕ{I}V.T] L2 → +lemma reqx_inv_flat: ∀I,L1,L2,V,T. L1 ≛[ⓕ[I]V.T] L2 → ∧∧ L1 ≛[V] L2 & L1 ≛[T] L2. /2 width=2 by rex_inv_flat/ qed-. (* Advanced inversion lemmas ************************************************) -lemma reqx_inv_zero_pair_sn: ∀I,Y2,L1,V1. L1.ⓑ{I}V1 ≛[#0] Y2 → - ∃∃L2,V2. L1 ≛[V1] L2 & V1 ≛ V2 & Y2 = L2.ⓑ{I}V2. +lemma reqx_inv_zero_pair_sn: ∀I,Y2,L1,V1. L1.ⓑ[I]V1 ≛[#0] Y2 → + ∃∃L2,V2. L1 ≛[V1] L2 & V1 ≛ V2 & Y2 = L2.ⓑ[I]V2. /2 width=1 by rex_inv_zero_pair_sn/ qed-. -lemma reqx_inv_zero_pair_dx: ∀I,Y1,L2,V2. Y1 ≛[#0] L2.ⓑ{I}V2 → - ∃∃L1,V1. L1 ≛[V1] L2 & V1 ≛ V2 & Y1 = L1.ⓑ{I}V1. +lemma reqx_inv_zero_pair_dx: ∀I,Y1,L2,V2. Y1 ≛[#0] L2.ⓑ[I]V2 → + ∃∃L1,V1. L1 ≛[V1] L2 & V1 ≛ V2 & Y1 = L1.ⓑ[I]V1. /2 width=1 by rex_inv_zero_pair_dx/ qed-. -lemma reqx_inv_lref_bind_sn: ∀I1,Y2,L1,i. L1.ⓘ{I1} ≛[#↑i] Y2 → - ∃∃I2,L2. L1 ≛[#i] L2 & Y2 = L2.ⓘ{I2}. +lemma reqx_inv_lref_bind_sn: ∀I1,Y2,L1,i. L1.ⓘ[I1] ≛[#↑i] Y2 → + ∃∃I2,L2. L1 ≛[#i] L2 & Y2 = L2.ⓘ[I2]. /2 width=2 by rex_inv_lref_bind_sn/ qed-. -lemma reqx_inv_lref_bind_dx: ∀I2,Y1,L2,i. Y1 ≛[#↑i] L2.ⓘ{I2} → - ∃∃I1,L1. L1 ≛[#i] L2 & Y1 = L1.ⓘ{I1}. +lemma reqx_inv_lref_bind_dx: ∀I2,Y1,L2,i. Y1 ≛[#↑i] L2.ⓘ[I2] → + ∃∃I1,L1. L1 ≛[#i] L2 & Y1 = L1.ⓘ[I1]. /2 width=2 by rex_inv_lref_bind_dx/ qed-. (* Basic forward lemmas *****************************************************) lemma reqx_fwd_zero_pair: ∀I,K1,K2,V1,V2. - K1.ⓑ{I}V1 ≛[#0] K2.ⓑ{I}V2 → K1 ≛[V1] K2. + K1.ⓑ[I]V1 ≛[#0] K2.ⓑ[I]V2 → K1 ≛[V1] K2. /2 width=3 by rex_fwd_zero_pair/ qed-. (* Basic_2A1: uses: lleq_fwd_bind_sn lleq_fwd_flat_sn *) -lemma reqx_fwd_pair_sn: ∀I,L1,L2,V,T. L1 ≛[②{I}V.T] L2 → L1 ≛[V] L2. +lemma reqx_fwd_pair_sn: ∀I,L1,L2,V,T. L1 ≛[②[I]V.T] L2 → L1 ≛[V] L2. /2 width=3 by rex_fwd_pair_sn/ qed-. (* Basic_2A1: uses: lleq_fwd_bind_dx lleq_fwd_bind_O_dx *) lemma reqx_fwd_bind_dx: ∀p,I,L1,L2,V,T. - L1 ≛[ⓑ{p,I}V.T] L2 → L1.ⓑ{I}V ≛[T] L2.ⓑ{I}V. + L1 ≛[ⓑ[p,I]V.T] L2 → L1.ⓑ[I]V ≛[T] L2.ⓑ[I]V. /2 width=2 by rex_fwd_bind_dx/ qed-. (* Basic_2A1: uses: lleq_fwd_flat_dx *) -lemma reqx_fwd_flat_dx: ∀I,L1,L2,V,T. L1 ≛[ⓕ{I}V.T] L2 → L1 ≛[T] L2. +lemma reqx_fwd_flat_dx: ∀I,L1,L2,V,T. L1 ≛[ⓕ[I]V.T] L2 → L1 ≛[T] L2. /2 width=3 by rex_fwd_flat_dx/ qed-. -lemma reqx_fwd_dx: ∀I2,L1,K2. ∀T:term. L1 ≛[T] K2.ⓘ{I2} → - ∃∃I1,K1. L1 = K1.ⓘ{I1}. +lemma reqx_fwd_dx: ∀I2,L1,K2. ∀T:term. L1 ≛[T] K2.ⓘ[I2] → + ∃∃I1,K1. L1 = K1.ⓘ[I1]. /2 width=5 by rex_fwd_dx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/reqx_drops.ma b/matita/matita/contribs/lambdadelta/static_2/static/reqx_drops.ma index 1a0837d5c..2e82d7053 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/reqx_drops.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/reqx_drops.ma @@ -31,22 +31,22 @@ lemma reqx_inv_lifts_sn: f_dropable_sn cdeq. lemma reqx_inv_lifts_dx: f_dropable_dx cdeq. /2 width=5 by rex_dropable_dx/ qed-. -lemma reqx_inv_lifts_bi: ∀L1,L2,U. L1 ≛[U] L2 → ∀b,f. 𝐔⦃f⦄ → +lemma reqx_inv_lifts_bi: ∀L1,L2,U. L1 ≛[U] L2 → ∀b,f. 𝐔❪f❫ → ∀K1,K2. ⇩*[b,f] L1 ≘ K1 → ⇩*[b,f] L2 ≘ K2 → ∀T. ⇧*[f] T ≘ U → K1 ≛[T] K2. /2 width=10 by rex_inv_lifts_bi/ qed-. -lemma reqx_inv_lref_pair_sn: ∀L1,L2,i. L1 ≛[#i] L2 → ∀I,K1,V1. ⇩*[i] L1 ≘ K1.ⓑ{I}V1 → - ∃∃K2,V2. ⇩*[i] L2 ≘ K2.ⓑ{I}V2 & K1 ≛[V1] K2 & V1 ≛ V2. +lemma reqx_inv_lref_pair_sn: ∀L1,L2,i. L1 ≛[#i] L2 → ∀I,K1,V1. ⇩*[i] L1 ≘ K1.ⓑ[I]V1 → + ∃∃K2,V2. ⇩*[i] L2 ≘ K2.ⓑ[I]V2 & K1 ≛[V1] K2 & V1 ≛ V2. /2 width=3 by rex_inv_lref_pair_sn/ qed-. -lemma reqx_inv_lref_pair_dx: ∀L1,L2,i. L1 ≛[#i] L2 → ∀I,K2,V2. ⇩*[i] L2 ≘ K2.ⓑ{I}V2 → - ∃∃K1,V1. ⇩*[i] L1 ≘ K1.ⓑ{I}V1 & K1 ≛[V1] K2 & V1 ≛ V2. +lemma reqx_inv_lref_pair_dx: ∀L1,L2,i. L1 ≛[#i] L2 → ∀I,K2,V2. ⇩*[i] L2 ≘ K2.ⓑ[I]V2 → + ∃∃K1,V1. ⇩*[i] L1 ≘ K1.ⓑ[I]V1 & K1 ≛[V1] K2 & V1 ≛ V2. /2 width=3 by rex_inv_lref_pair_dx/ qed-. lemma reqx_inv_lref_pair_bi (L1) (L2) (i): L1 ≛[#i] L2 → - ∀I1,K1,V1. ⇩*[i] L1 ≘ K1.ⓑ{I1}V1 → - ∀I2,K2,V2. ⇩*[i] L2 ≘ K2.ⓑ{I2}V2 → + ∀I1,K1,V1. ⇩*[i] L1 ≘ K1.ⓑ[I1]V1 → + ∀I2,K2,V2. ⇩*[i] L2 ≘ K2.ⓑ[I2]V2 → ∧∧ K1 ≛[V1] K2 & V1 ≛ V2 & I1 = I2. /2 width=6 by rex_inv_lref_pair_bi/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/reqx_fqup.ma b/matita/matita/contribs/lambdadelta/static_2/static/reqx_fqup.ma index d31901784..bc021d8b9 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/reqx_fqup.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/reqx_fqup.ma @@ -23,17 +23,17 @@ lemma reqx_refl: ∀T. reflexive … (reqx T). /2 width=1 by rex_refl/ qed. lemma reqx_pair_refl: ∀V1,V2. V1 ≛ V2 → - ∀I,L. ∀T:term. L.ⓑ{I}V1 ≛[T] L.ⓑ{I}V2. + ∀I,L. ∀T:term. L.ⓑ[I]V1 ≛[T] L.ⓑ[I]V2. /2 width=1 by rex_pair_refl/ qed. (* Advanced inversion lemmas ************************************************) -lemma reqx_inv_bind_void: ∀p,I,L1,L2,V,T. L1 ≛[ⓑ{p,I}V.T] L2 → +lemma reqx_inv_bind_void: ∀p,I,L1,L2,V,T. L1 ≛[ⓑ[p,I]V.T] L2 → L1 ≛[V] L2 ∧ L1.ⓧ ≛[T] L2.ⓧ. /2 width=3 by rex_inv_bind_void/ qed-. (* Advanced forward lemmas **************************************************) lemma reqx_fwd_bind_dx_void: ∀p,I,L1,L2,V,T. - L1 ≛[ⓑ{p,I}V.T] L2 → L1.ⓧ ≛[T] L2.ⓧ. + L1 ≛[ⓑ[p,I]V.T] L2 → L1.ⓧ ≛[T] L2.ⓧ. /2 width=4 by rex_fwd_bind_dx_void/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/reqx_fqus.ma b/matita/matita/contribs/lambdadelta/static_2/static/reqx_fqus.ma index 462a00014..6f9b14b42 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/reqx_fqus.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/reqx_fqus.ma @@ -21,9 +21,9 @@ include "static_2/static/reqx_reqx.ma". (* Properties with extended structural successor for closures ***************) -lemma fqu_teqx_conf: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1,L1,U1⦄ ⬂[b] ⦃G2,L2,T1⦄ → +lemma fqu_teqx_conf: ∀b,G1,G2,L1,L2,U1,T1. ❪G1,L1,U1❫ ⬂[b] ❪G2,L2,T1❫ → ∀U2. U1 ≛ U2 → - ∃∃L,T2. ⦃G1,L1,U2⦄ ⬂[b] ⦃G2,L,T2⦄ & L2 ≛[T1] L & T1 ≛ T2. + ∃∃L,T2. ❪G1,L1,U2❫ ⬂[b] ❪G2,L,T2❫ & L2 ≛[T1] L & T1 ≛ T2. #b #G1 #G2 #L1 #L2 #U1 #T1 #H elim H -G1 -G2 -L1 -L2 -U1 -T1 [ #I #G #L #W #X #H >(teqx_inv_lref1 … H) -X /2 width=5 by fqu_lref_O, ex3_2_intro/ @@ -45,18 +45,18 @@ lemma fqu_teqx_conf: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1,L1,U1⦄ ⬂[b] ⦃G2,L2,T1 ] qed-. -lemma teqx_fqu_trans: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1,L1,U1⦄ ⬂[b] ⦃G2,L2,T1⦄ → +lemma teqx_fqu_trans: ∀b,G1,G2,L1,L2,U1,T1. ❪G1,L1,U1❫ ⬂[b] ❪G2,L2,T1❫ → ∀U2. U2 ≛ U1 → - ∃∃L,T2. ⦃G1,L1,U2⦄ ⬂[b] ⦃G2,L,T2⦄ & T2 ≛ T1 & L ≛[T1] L2. + ∃∃L,T2. ❪G1,L1,U2❫ ⬂[b] ❪G2,L,T2❫ & T2 ≛ T1 & L ≛[T1] L2. #b #G1 #G2 #L1 #L2 #U1 #T1 #H12 #U2 #HU21 elim (fqu_teqx_conf … H12 U2) -H12 /3 width=5 by reqx_sym, teqx_sym, ex3_2_intro/ qed-. (* Basic_2A1: uses: lleq_fqu_trans *) -lemma reqx_fqu_trans: ∀b,G1,G2,L2,K2,T,U. ⦃G1,L2,T⦄ ⬂[b] ⦃G2,K2,U⦄ → +lemma reqx_fqu_trans: ∀b,G1,G2,L2,K2,T,U. ❪G1,L2,T❫ ⬂[b] ❪G2,K2,U❫ → ∀L1. L1 ≛[T] L2 → - ∃∃K1,U0. ⦃G1,L1,T⦄ ⬂[b] ⦃G2,K1,U0⦄ & U0 ≛ U & K1 ≛[U] K2. + ∃∃K1,U0. ❪G1,L1,T❫ ⬂[b] ❪G2,K1,U0❫ & U0 ≛ U & K1 ≛[U] K2. #b #G1 #G2 #L2 #K2 #T #U #H elim H -G1 -G2 -L2 -K2 -T -U [ #I #G #L2 #V2 #L1 #H elim (reqx_inv_zero_pair_dx … H) -H #K1 #V1 #HV1 #HV12 #H destruct @@ -80,9 +80,9 @@ qed-. (* Properties with optional structural successor for closures ***************) -lemma teqx_fquq_trans: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1,L1,U1⦄ ⬂⸮[b] ⦃G2,L2,T1⦄ → +lemma teqx_fquq_trans: ∀b,G1,G2,L1,L2,U1,T1. ❪G1,L1,U1❫ ⬂⸮[b] ❪G2,L2,T1❫ → ∀U2. U2 ≛ U1 → - ∃∃L,T2. ⦃G1,L1,U2⦄ ⬂⸮[b] ⦃G2,L,T2⦄ & T2 ≛ T1 & L ≛[T1] L2. + ∃∃L,T2. ❪G1,L1,U2❫ ⬂⸮[b] ❪G2,L,T2❫ & T2 ≛ T1 & L ≛[T1] L2. #b #G1 #G2 #L1 #L2 #U1 #T1 #H elim H -H [ #H #U2 #HU21 elim (teqx_fqu_trans … H … HU21) -U1 /3 width=5 by fqu_fquq, ex3_2_intro/ @@ -91,9 +91,9 @@ lemma teqx_fquq_trans: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1,L1,U1⦄ ⬂⸮[b] ⦃G2,L2 qed-. (* Basic_2A1: was just: lleq_fquq_trans *) -lemma reqx_fquq_trans: ∀b,G1,G2,L2,K2,T,U. ⦃G1,L2,T⦄ ⬂⸮[b] ⦃G2,K2,U⦄ → +lemma reqx_fquq_trans: ∀b,G1,G2,L2,K2,T,U. ❪G1,L2,T❫ ⬂⸮[b] ❪G2,K2,U❫ → ∀L1. L1 ≛[T] L2 → - ∃∃K1,U0. ⦃G1,L1,T⦄ ⬂⸮[b] ⦃G2,K1,U0⦄ & U0 ≛ U & K1 ≛[U] K2. + ∃∃K1,U0. ❪G1,L1,T❫ ⬂⸮[b] ❪G2,K1,U0❫ & U0 ≛ U & K1 ≛[U] K2. #b #G1 #G2 #L2 #K2 #T #U #H elim H -H [ #H #L1 #HL12 elim (reqx_fqu_trans … H … HL12) -L2 /3 width=5 by fqu_fquq, ex3_2_intro/ | * #HG #HL #HT destruct /2 width=5 by ex3_2_intro/ @@ -103,9 +103,9 @@ qed-. (* Properties with plus-iterated structural successor for closures **********) (* Basic_2A1: was just: lleq_fqup_trans *) -lemma reqx_fqup_trans: ∀b,G1,G2,L2,K2,T,U. ⦃G1,L2,T⦄ ⬂+[b] ⦃G2,K2,U⦄ → +lemma reqx_fqup_trans: ∀b,G1,G2,L2,K2,T,U. ❪G1,L2,T❫ ⬂+[b] ❪G2,K2,U❫ → ∀L1. L1 ≛[T] L2 → - ∃∃K1,U0. ⦃G1,L1,T⦄ ⬂+[b] ⦃G2,K1,U0⦄ & U0 ≛ U & K1 ≛[U] K2. + ∃∃K1,U0. ❪G1,L1,T❫ ⬂+[b] ❪G2,K1,U0❫ & U0 ≛ U & K1 ≛[U] K2. #b #G1 #G2 #L2 #K2 #T #U #H @(fqup_ind … H) -G2 -K2 -U [ #G2 #K2 #U #HTU #L1 #HL12 elim (reqx_fqu_trans … HTU … HL12) -L2 /3 width=5 by fqu_fqup, ex3_2_intro/ @@ -118,9 +118,9 @@ lemma reqx_fqup_trans: ∀b,G1,G2,L2,K2,T,U. ⦃G1,L2,T⦄ ⬂+[b] ⦃G2,K2,U⦄ ] qed-. -lemma teqx_fqup_trans: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1,L1,U1⦄ ⬂+[b] ⦃G2,L2,T1⦄ → +lemma teqx_fqup_trans: ∀b,G1,G2,L1,L2,U1,T1. ❪G1,L1,U1❫ ⬂+[b] ❪G2,L2,T1❫ → ∀U2. U2 ≛ U1 → - ∃∃L,T2. ⦃G1,L1,U2⦄ ⬂+[b] ⦃G2,L,T2⦄ & T2 ≛ T1 & L ≛[T1] L2. + ∃∃L,T2. ❪G1,L1,U2❫ ⬂+[b] ❪G2,L,T2❫ & T2 ≛ T1 & L ≛[T1] L2. #b #G1 #G2 #L1 #L2 #U1 #T1 #H @(fqup_ind_dx … H) -G1 -L1 -U1 [ #G1 #L1 #U1 #H #U2 #HU21 elim (teqx_fqu_trans … H … HU21) -U1 /3 width=5 by fqu_fqup, ex3_2_intro/ @@ -136,9 +136,9 @@ qed-. (* Properties with star-iterated structural successor for closures **********) -lemma teqx_fqus_trans: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1,L1,U1⦄ ⬂*[b] ⦃G2,L2,T1⦄ → +lemma teqx_fqus_trans: ∀b,G1,G2,L1,L2,U1,T1. ❪G1,L1,U1❫ ⬂*[b] ❪G2,L2,T1❫ → ∀U2. U2 ≛ U1 → - ∃∃L,T2. ⦃G1,L1,U2⦄ ⬂*[b] ⦃G2,L,T2⦄ & T2 ≛ T1 & L ≛[T1] L2. + ∃∃L,T2. ❪G1,L1,U2❫ ⬂*[b] ❪G2,L,T2❫ & T2 ≛ T1 & L ≛[T1] L2. #b #G1 #G2 #L1 #L2 #U1 #T1 #H #U2 #HU21 elim(fqus_inv_fqup … H) -H [ #H elim (teqx_fqup_trans … H … HU21) -U1 /3 width=5 by fqup_fqus, ex3_2_intro/ | * #HG #HL #HT destruct /2 width=5 by ex3_2_intro/ @@ -146,9 +146,9 @@ lemma teqx_fqus_trans: ∀b,G1,G2,L1,L2,U1,T1. ⦃G1,L1,U1⦄ ⬂*[b] ⦃G2,L2,T qed-. (* Basic_2A1: was just: lleq_fqus_trans *) -lemma reqx_fqus_trans: ∀b,G1,G2,L2,K2,T,U. ⦃G1,L2,T⦄ ⬂*[b] ⦃G2,K2,U⦄ → +lemma reqx_fqus_trans: ∀b,G1,G2,L2,K2,T,U. ❪G1,L2,T❫ ⬂*[b] ❪G2,K2,U❫ → ∀L1. L1 ≛[T] L2 → - ∃∃K1,U0. ⦃G1,L1,T⦄ ⬂*[b] ⦃G2,K1,U0⦄ & U0 ≛ U & K1 ≛[U] K2. + ∃∃K1,U0. ❪G1,L1,T❫ ⬂*[b] ❪G2,K1,U0❫ & U0 ≛ U & K1 ≛[U] K2. #b #G1 #G2 #L2 #K2 #T #U #H #L1 #HL12 elim(fqus_inv_fqup … H) -H [ #H elim (reqx_fqup_trans … H … HL12) -L2 /3 width=5 by fqup_fqus, ex3_2_intro/ | * #HG #HL #HT destruct /2 width=5 by ex3_2_intro/ diff --git a/matita/matita/contribs/lambdadelta/static_2/static/reqx_length.ma b/matita/matita/contribs/lambdadelta/static_2/static/reqx_length.ma index d8750ca24..dafdc4f57 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/reqx_length.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/reqx_length.ma @@ -39,7 +39,7 @@ lemma reqx_gref_length: ∀L1,L2. |L1| = |L2| → ∀l. L1 ≛[§l] L2. /2 width=1 by rex_gref_length/ qed. lemma reqx_unit_length: ∀L1,L2. |L1| = |L2| → - ∀I. L1.ⓤ{I} ≛[#0] L2.ⓤ{I}. + ∀I. L1.ⓤ[I] ≛[#0] L2.ⓤ[I]. /2 width=1 by rex_unit_length/ qed. (* Basic_2A1: uses: lleq_lift_le lleq_lift_ge *) diff --git a/matita/matita/contribs/lambdadelta/static_2/static/reqx_reqx.ma b/matita/matita/contribs/lambdadelta/static_2/static/reqx_reqx.ma index f7322ee5e..3d4c8921c 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/reqx_reqx.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/reqx_reqx.ma @@ -32,17 +32,17 @@ lemma reqx_dec: ∀L1,L2. ∀T:term. Decidable (L1 ≛[T] L2). (* Basic_2A1: uses: lleq_bind lleq_bind_O *) theorem reqx_bind: ∀p,I,L1,L2,V1,V2,T. - L1 ≛[V1] L2 → L1.ⓑ{I}V1 ≛[T] L2.ⓑ{I}V2 → - L1 ≛[ⓑ{p,I}V1.T] L2. + L1 ≛[V1] L2 → L1.ⓑ[I]V1 ≛[T] L2.ⓑ[I]V2 → + L1 ≛[ⓑ[p,I]V1.T] L2. /2 width=2 by rex_bind/ qed. (* Basic_2A1: uses: lleq_flat *) theorem reqx_flat: ∀I,L1,L2,V,T. - L1 ≛[V] L2 → L1 ≛[T] L2 → L1 ≛[ⓕ{I}V.T] L2. + L1 ≛[V] L2 → L1 ≛[T] L2 → L1 ≛[ⓕ[I]V.T] L2. /2 width=1 by rex_flat/ qed. theorem reqx_bind_void: ∀p,I,L1,L2,V,T. - L1 ≛[V] L2 → L1.ⓧ ≛[T] L2.ⓧ → L1 ≛[ⓑ{p,I}V.T] L2. + L1 ≛[V] L2 → L1.ⓧ ≛[T] L2.ⓧ → L1 ≛[ⓑ[p,I]V.T] L2. /2 width=1 by rex_bind_void/ qed. (* Basic_2A1: uses: lleq_trans *) @@ -85,15 +85,15 @@ theorem rneqx_reqx_canc_dx: ∀L1,L. ∀T:term. (L1 ≛[T] L → ⊥) → (* Negated inversion lemmas *************************************************) (* Basic_2A1: uses: nlleq_inv_bind nlleq_inv_bind_O *) -lemma rneqx_inv_bind: ∀p,I,L1,L2,V,T. (L1 ≛[ⓑ{p,I}V.T] L2 → ⊥) → - (L1 ≛[V] L2 → ⊥) ∨ (L1.ⓑ{I}V ≛[T] L2.ⓑ{I}V → ⊥). +lemma rneqx_inv_bind: ∀p,I,L1,L2,V,T. (L1 ≛[ⓑ[p,I]V.T] L2 → ⊥) → + (L1 ≛[V] L2 → ⊥) ∨ (L1.ⓑ[I]V ≛[T] L2.ⓑ[I]V → ⊥). /3 width=2 by rnex_inv_bind, teqx_dec/ qed-. (* Basic_2A1: uses: nlleq_inv_flat *) -lemma rneqx_inv_flat: ∀I,L1,L2,V,T. (L1 ≛[ⓕ{I}V.T] L2 → ⊥) → +lemma rneqx_inv_flat: ∀I,L1,L2,V,T. (L1 ≛[ⓕ[I]V.T] L2 → ⊥) → (L1 ≛[V] L2 → ⊥) ∨ (L1 ≛[T] L2 → ⊥). /3 width=2 by rnex_inv_flat, teqx_dec/ qed-. -lemma rneqx_inv_bind_void: ∀p,I,L1,L2,V,T. (L1 ≛[ⓑ{p,I}V.T] L2 → ⊥) → +lemma rneqx_inv_bind_void: ∀p,I,L1,L2,V,T. (L1 ≛[ⓑ[p,I]V.T] L2 → ⊥) → (L1 ≛[V] L2 → ⊥) ∨ (L1.ⓧ ≛[T] L2.ⓧ → ⊥). /3 width=3 by rnex_inv_bind_void, teqx_dec/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rex.ma b/matita/matita/contribs/lambdadelta/static_2/static/rex.ma index bfaf0cbce..a17dd7d6a 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/rex.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/rex.ma @@ -25,7 +25,7 @@ include "static_2/static/frees.ma". (* GENERIC EXTENSION ON REFERRED ENTRIES OF A CONTEXT-SENSITIVE REALTION ****) definition rex (R) (T): relation lenv ≝ - λL1,L2. ∃∃f. L1 ⊢ 𝐅+⦃T⦄ ≘ f & L1 ⪤[cext2 R,cfull,f] L2. + λL1,L2. ∃∃f. L1 ⊢ 𝐅+❪T❫ ≘ f & L1 ⪤[cext2 R,cfull,f] L2. interpretation "generic extension on referred entries (local environment)" 'Relation R T L1 L2 = (rex R T L1 L2). @@ -60,7 +60,7 @@ qed-. lemma rex_inv_sort (R): ∀Y1,Y2,s. Y1 ⪤[R,⋆s] Y2 → ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ - | ∃∃I1,I2,L1,L2. L1 ⪤[R,⋆s] L2 & Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}. + | ∃∃I1,I2,L1,L2. L1 ⪤[R,⋆s] L2 & Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2]. #R * [ | #Y1 #I1 ] #Y2 #s * #f #H1 #H2 [ lapply (sex_inv_atom1 … H2) -H2 /3 width=1 by or_introl, conj/ | lapply (frees_inv_sort … H1) -H1 #Hf @@ -74,9 +74,9 @@ lemma rex_inv_zero (R): ∀Y1,Y2. Y1 ⪤[R,#0] Y2 → ∨∨ Y1 = ⋆ ∧ Y2 = ⋆ | ∃∃I,L1,L2,V1,V2. L1 ⪤[R,V1] L2 & R L1 V1 V2 & - Y1 = L1.ⓑ{I}V1 & Y2 = L2.ⓑ{I}V2 - | ∃∃f,I,L1,L2. 𝐈⦃f⦄ & L1 ⪤[cext2 R,cfull,f] L2 & - Y1 = L1.ⓤ{I} & Y2 = L2.ⓤ{I}. + Y1 = L1.ⓑ[I]V1 & Y2 = L2.ⓑ[I]V2 + | ∃∃f,I,L1,L2. 𝐈❪f❫ & L1 ⪤[cext2 R,cfull,f] L2 & + Y1 = L1.ⓤ[I] & Y2 = L2.ⓤ[I]. #R * [ | #Y1 * #I1 [ | #X ] ] #Y2 * #f #H1 #H2 [ lapply (sex_inv_atom1 … H2) -H2 /3 width=1 by or3_intro0, conj/ | elim (frees_inv_unit … H1) -H1 #g #HX #H destruct @@ -92,7 +92,7 @@ qed-. lemma rex_inv_lref (R): ∀Y1,Y2,i. Y1 ⪤[R,#↑i] Y2 → ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ - | ∃∃I1,I2,L1,L2. L1 ⪤[R,#i] L2 & Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}. + | ∃∃I1,I2,L1,L2. L1 ⪤[R,#i] L2 & Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2]. #R * [ | #Y1 #I1 ] #Y2 #i * #f #H1 #H2 [ lapply (sex_inv_atom1 … H2) -H2 /3 width=1 by or_introl, conj/ | elim (frees_inv_lref … H1) -H1 #g #Hg #H destruct @@ -104,7 +104,7 @@ qed-. lemma rex_inv_gref (R): ∀Y1,Y2,l. Y1 ⪤[R,§l] Y2 → ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ - | ∃∃I1,I2,L1,L2. L1 ⪤[R,§l] L2 & Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}. + | ∃∃I1,I2,L1,L2. L1 ⪤[R,§l] L2 & Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2]. #R * [ | #Y1 #I1 ] #Y2 #l * #f #H1 #H2 [ lapply (sex_inv_atom1 … H2) -H2 /3 width=1 by or_introl, conj/ | lapply (frees_inv_gref … H1) -H1 #Hf @@ -116,15 +116,15 @@ qed-. (* Basic_2A1: uses: llpx_sn_inv_bind llpx_sn_inv_bind_O *) lemma rex_inv_bind (R): - ∀p,I,L1,L2,V1,V2,T. L1 ⪤[R,ⓑ{p,I}V1.T] L2 → R L1 V1 V2 → - ∧∧ L1 ⪤[R,V1] L2 & L1.ⓑ{I}V1 ⪤[R,T] L2.ⓑ{I}V2. + ∀p,I,L1,L2,V1,V2,T. L1 ⪤[R,ⓑ[p,I]V1.T] L2 → R L1 V1 V2 → + ∧∧ L1 ⪤[R,V1] L2 & L1.ⓑ[I]V1 ⪤[R,T] L2.ⓑ[I]V2. #R #p #I #L1 #L2 #V1 #V2 #T * #f #Hf #HL #HV elim (frees_inv_bind … Hf) -Hf /6 width=6 by sle_sex_trans, sex_inv_tl, ext2_pair, sor_inv_sle_dx, sor_inv_sle_sn, ex2_intro, conj/ qed-. (* Basic_2A1: uses: llpx_sn_inv_flat *) lemma rex_inv_flat (R): - ∀I,L1,L2,V,T. L1 ⪤[R,ⓕ{I}V.T] L2 → + ∀I,L1,L2,V,T. L1 ⪤[R,ⓕ[I]V.T] L2 → ∧∧ L1 ⪤[R,V] L2 & L1 ⪤[R,T] L2. #R #I #L1 #L2 #V #T * #f #Hf #HL elim (frees_inv_flat … Hf) -Hf /5 width=6 by sle_sex_trans, sor_inv_sle_dx, sor_inv_sle_sn, ex2_intro, conj/ @@ -133,8 +133,8 @@ qed-. (* Advanced inversion lemmas ************************************************) lemma rex_inv_sort_bind_sn (R): - ∀I1,K1,L2,s. K1.ⓘ{I1} ⪤[R,⋆s] L2 → - ∃∃I2,K2. K1 ⪤[R,⋆s] K2 & L2 = K2.ⓘ{I2}. + ∀I1,K1,L2,s. K1.ⓘ[I1] ⪤[R,⋆s] L2 → + ∃∃I2,K2. K1 ⪤[R,⋆s] K2 & L2 = K2.ⓘ[I2]. #R #I1 #K1 #L2 #s #H elim (rex_inv_sort … H) -H * [ #H destruct | #Z1 #I2 #Y1 #K2 #Hs #H1 #H2 destruct /2 width=4 by ex2_2_intro/ @@ -142,8 +142,8 @@ lemma rex_inv_sort_bind_sn (R): qed-. lemma rex_inv_sort_bind_dx (R): - ∀I2,K2,L1,s. L1 ⪤[R,⋆s] K2.ⓘ{I2} → - ∃∃I1,K1. K1 ⪤[R,⋆s] K2 & L1 = K1.ⓘ{I1}. + ∀I2,K2,L1,s. L1 ⪤[R,⋆s] K2.ⓘ[I2] → + ∃∃I1,K1. K1 ⪤[R,⋆s] K2 & L1 = K1.ⓘ[I1]. #R #I2 #K2 #L1 #s #H elim (rex_inv_sort … H) -H * [ #_ #H destruct | #I1 #Z2 #K1 #Y2 #Hs #H1 #H2 destruct /2 width=4 by ex2_2_intro/ @@ -151,8 +151,8 @@ lemma rex_inv_sort_bind_dx (R): qed-. lemma rex_inv_zero_pair_sn (R): - ∀I,L2,K1,V1. K1.ⓑ{I}V1 ⪤[R,#0] L2 → - ∃∃K2,V2. K1 ⪤[R,V1] K2 & R K1 V1 V2 & L2 = K2.ⓑ{I}V2. + ∀I,L2,K1,V1. K1.ⓑ[I]V1 ⪤[R,#0] L2 → + ∃∃K2,V2. K1 ⪤[R,V1] K2 & R K1 V1 V2 & L2 = K2.ⓑ[I]V2. #R #I #L2 #K1 #V1 #H elim (rex_inv_zero … H) -H * [ #H destruct | #Z #Y1 #K2 #X1 #V2 #HK12 #HV12 #H1 #H2 destruct @@ -162,8 +162,8 @@ lemma rex_inv_zero_pair_sn (R): qed-. lemma rex_inv_zero_pair_dx (R): - ∀I,L1,K2,V2. L1 ⪤[R,#0] K2.ⓑ{I}V2 → - ∃∃K1,V1. K1 ⪤[R,V1] K2 & R K1 V1 V2 & L1 = K1.ⓑ{I}V1. + ∀I,L1,K2,V2. L1 ⪤[R,#0] K2.ⓑ[I]V2 → + ∃∃K1,V1. K1 ⪤[R,V1] K2 & R K1 V1 V2 & L1 = K1.ⓑ[I]V1. #R #I #L1 #K2 #V2 #H elim (rex_inv_zero … H) -H * [ #_ #H destruct | #Z #K1 #Y2 #V1 #X2 #HK12 #HV12 #H1 #H2 destruct @@ -173,8 +173,8 @@ lemma rex_inv_zero_pair_dx (R): qed-. lemma rex_inv_zero_unit_sn (R): - ∀I,K1,L2. K1.ⓤ{I} ⪤[R,#0] L2 → - ∃∃f,K2. 𝐈⦃f⦄ & K1 ⪤[cext2 R,cfull,f] K2 & L2 = K2.ⓤ{I}. + ∀I,K1,L2. K1.ⓤ[I] ⪤[R,#0] L2 → + ∃∃f,K2. 𝐈❪f❫ & K1 ⪤[cext2 R,cfull,f] K2 & L2 = K2.ⓤ[I]. #R #I #K1 #L2 #H elim (rex_inv_zero … H) -H * [ #H destruct | #Z #Y1 #Y2 #X1 #X2 #_ #_ #H destruct @@ -183,8 +183,8 @@ lemma rex_inv_zero_unit_sn (R): qed-. lemma rex_inv_zero_unit_dx (R): - ∀I,L1,K2. L1 ⪤[R,#0] K2.ⓤ{I} → - ∃∃f,K1. 𝐈⦃f⦄ & K1 ⪤[cext2 R,cfull,f] K2 & L1 = K1.ⓤ{I}. + ∀I,L1,K2. L1 ⪤[R,#0] K2.ⓤ[I] → + ∃∃f,K1. 𝐈❪f❫ & K1 ⪤[cext2 R,cfull,f] K2 & L1 = K1.ⓤ[I]. #R #I #L1 #K2 #H elim (rex_inv_zero … H) -H * [ #_ #H destruct | #Z #Y1 #Y2 #X1 #X2 #_ #_ #_ #H destruct @@ -193,8 +193,8 @@ lemma rex_inv_zero_unit_dx (R): qed-. lemma rex_inv_lref_bind_sn (R): - ∀I1,K1,L2,i. K1.ⓘ{I1} ⪤[R,#↑i] L2 → - ∃∃I2,K2. K1 ⪤[R,#i] K2 & L2 = K2.ⓘ{I2}. + ∀I1,K1,L2,i. K1.ⓘ[I1] ⪤[R,#↑i] L2 → + ∃∃I2,K2. K1 ⪤[R,#i] K2 & L2 = K2.ⓘ[I2]. #R #I1 #K1 #L2 #i #H elim (rex_inv_lref … H) -H * [ #H destruct | #Z1 #I2 #Y1 #K2 #Hi #H1 #H2 destruct /2 width=4 by ex2_2_intro/ @@ -202,8 +202,8 @@ lemma rex_inv_lref_bind_sn (R): qed-. lemma rex_inv_lref_bind_dx (R): - ∀I2,K2,L1,i. L1 ⪤[R,#↑i] K2.ⓘ{I2} → - ∃∃I1,K1. K1 ⪤[R,#i] K2 & L1 = K1.ⓘ{I1}. + ∀I2,K2,L1,i. L1 ⪤[R,#↑i] K2.ⓘ[I2] → + ∃∃I1,K1. K1 ⪤[R,#i] K2 & L1 = K1.ⓘ[I1]. #R #I2 #K2 #L1 #i #H elim (rex_inv_lref … H) -H * [ #_ #H destruct | #I1 #Z2 #K1 #Y2 #Hi #H1 #H2 destruct /2 width=4 by ex2_2_intro/ @@ -211,8 +211,8 @@ lemma rex_inv_lref_bind_dx (R): qed-. lemma rex_inv_gref_bind_sn (R): - ∀I1,K1,L2,l. K1.ⓘ{I1} ⪤[R,§l] L2 → - ∃∃I2,K2. K1 ⪤[R,§l] K2 & L2 = K2.ⓘ{I2}. + ∀I1,K1,L2,l. K1.ⓘ[I1] ⪤[R,§l] L2 → + ∃∃I2,K2. K1 ⪤[R,§l] K2 & L2 = K2.ⓘ[I2]. #R #I1 #K1 #L2 #l #H elim (rex_inv_gref … H) -H * [ #H destruct | #Z1 #I2 #Y1 #K2 #Hl #H1 #H2 destruct /2 width=4 by ex2_2_intro/ @@ -220,8 +220,8 @@ lemma rex_inv_gref_bind_sn (R): qed-. lemma rex_inv_gref_bind_dx (R): - ∀I2,K2,L1,l. L1 ⪤[R,§l] K2.ⓘ{I2} → - ∃∃I1,K1. K1 ⪤[R,§l] K2 & L1 = K1.ⓘ{I1}. + ∀I2,K2,L1,l. L1 ⪤[R,§l] K2.ⓘ[I2] → + ∃∃I1,K1. K1 ⪤[R,§l] K2 & L1 = K1.ⓘ[I1]. #R #I2 #K2 #L1 #l #H elim (rex_inv_gref … H) -H * [ #_ #H destruct | #I1 #Z2 #K1 #Y2 #Hl #H1 #H2 destruct /2 width=4 by ex2_2_intro/ @@ -231,13 +231,13 @@ qed-. (* Basic forward lemmas *****************************************************) lemma rex_fwd_zero_pair (R): - ∀I,K1,K2,V1,V2. K1.ⓑ{I}V1 ⪤[R,#0] K2.ⓑ{I}V2 → K1 ⪤[R,V1] K2. + ∀I,K1,K2,V1,V2. K1.ⓑ[I]V1 ⪤[R,#0] K2.ⓑ[I]V2 → K1 ⪤[R,V1] K2. #R #I #K1 #K2 #V1 #V2 #H elim (rex_inv_zero_pair_sn … H) -H #Y #X #HK12 #_ #H destruct // qed-. (* Basic_2A1: uses: llpx_sn_fwd_pair_sn llpx_sn_fwd_bind_sn llpx_sn_fwd_flat_sn *) -lemma rex_fwd_pair_sn (R): ∀I,L1,L2,V,T. L1 ⪤[R,②{I}V.T] L2 → L1 ⪤[R,V] L2. +lemma rex_fwd_pair_sn (R): ∀I,L1,L2,V,T. L1 ⪤[R,②[I]V.T] L2 → L1 ⪤[R,V] L2. #R * [ #p ] #I #L1 #L2 #V #T * #f #Hf #HL [ elim (frees_inv_bind … Hf) | elim (frees_inv_flat … Hf) ] -Hf /4 width=6 by sle_sex_trans, sor_inv_sle_sn, ex2_intro/ @@ -245,19 +245,19 @@ qed-. (* Basic_2A1: uses: llpx_sn_fwd_bind_dx llpx_sn_fwd_bind_O_dx *) lemma rex_fwd_bind_dx (R): - ∀p,I,L1,L2,V1,V2,T. L1 ⪤[R,ⓑ{p,I}V1.T] L2 → - R L1 V1 V2 → L1.ⓑ{I}V1 ⪤[R,T] L2.ⓑ{I}V2. + ∀p,I,L1,L2,V1,V2,T. L1 ⪤[R,ⓑ[p,I]V1.T] L2 → + R L1 V1 V2 → L1.ⓑ[I]V1 ⪤[R,T] L2.ⓑ[I]V2. #R #p #I #L1 #L2 #V1 #V2 #T #H #HV elim (rex_inv_bind … H HV) -H -HV // qed-. (* Basic_2A1: uses: llpx_sn_fwd_flat_dx *) -lemma rex_fwd_flat_dx (R): ∀I,L1,L2,V,T. L1 ⪤[R,ⓕ{I}V.T] L2 → L1 ⪤[R,T] L2. +lemma rex_fwd_flat_dx (R): ∀I,L1,L2,V,T. L1 ⪤[R,ⓕ[I]V.T] L2 → L1 ⪤[R,T] L2. #R #I #L1 #L2 #V #T #H elim (rex_inv_flat … H) -H // qed-. lemma rex_fwd_dx (R): - ∀I2,L1,K2,T. L1 ⪤[R,T] K2.ⓘ{I2} → - ∃∃I1,K1. L1 = K1.ⓘ{I1}. + ∀I2,L1,K2,T. L1 ⪤[R,T] K2.ⓘ[I2] → + ∃∃I1,K1. L1 = K1.ⓘ[I1]. #R #I2 #L1 #K2 #T * #f elim (pn_split f) * #g #Hg #_ #Hf destruct [ elim (sex_inv_push2 … Hf) | elim (sex_inv_next2 … Hf) ] -Hf #I1 #K1 #_ #_ #H destruct /2 width=3 by ex1_2_intro/ @@ -265,12 +265,12 @@ qed-. (* Basic properties *********************************************************) -lemma rex_atom (R): ∀I. ⋆ ⪤[R,⓪{I}] ⋆. +lemma rex_atom (R): ∀I. ⋆ ⪤[R,⓪[I]] ⋆. #R * /3 width=3 by frees_sort, frees_atom, frees_gref, sex_atom, ex2_intro/ qed. lemma rex_sort (R): - ∀I1,I2,L1,L2,s. L1 ⪤[R,⋆s] L2 → L1.ⓘ{I1} ⪤[R,⋆s] L2.ⓘ{I2}. + ∀I1,I2,L1,L2,s. L1 ⪤[R,⋆s] L2 → L1.ⓘ[I1] ⪤[R,⋆s] L2.ⓘ[I2]. #R #I1 #I2 #L1 #L2 #s * #f #Hf #H12 lapply (frees_inv_sort … Hf) -Hf /4 width=3 by frees_sort, sex_push, isid_push, ex2_intro/ @@ -278,31 +278,31 @@ qed. lemma rex_pair (R): ∀I,L1,L2,V1,V2. L1 ⪤[R,V1] L2 → - R L1 V1 V2 → L1.ⓑ{I}V1 ⪤[R,#0] L2.ⓑ{I}V2. + R L1 V1 V2 → L1.ⓑ[I]V1 ⪤[R,#0] L2.ⓑ[I]V2. #R #I1 #I2 #L1 #L2 #V1 * /4 width=3 by ext2_pair, frees_pair, sex_next, ex2_intro/ qed. lemma rex_unit (R): - ∀f,I,L1,L2. 𝐈⦃f⦄ → L1 ⪤[cext2 R,cfull,f] L2 → - L1.ⓤ{I} ⪤[R,#0] L2.ⓤ{I}. + ∀f,I,L1,L2. 𝐈❪f❫ → L1 ⪤[cext2 R,cfull,f] L2 → + L1.ⓤ[I] ⪤[R,#0] L2.ⓤ[I]. /4 width=3 by frees_unit, sex_next, ext2_unit, ex2_intro/ qed. lemma rex_lref (R): - ∀I1,I2,L1,L2,i. L1 ⪤[R,#i] L2 → L1.ⓘ{I1} ⪤[R,#↑i] L2.ⓘ{I2}. + ∀I1,I2,L1,L2,i. L1 ⪤[R,#i] L2 → L1.ⓘ[I1] ⪤[R,#↑i] L2.ⓘ[I2]. #R #I1 #I2 #L1 #L2 #i * /3 width=3 by sex_push, frees_lref, ex2_intro/ qed. lemma rex_gref (R): - ∀I1,I2,L1,L2,l. L1 ⪤[R,§l] L2 → L1.ⓘ{I1} ⪤[R,§l] L2.ⓘ{I2}. + ∀I1,I2,L1,L2,l. L1 ⪤[R,§l] L2 → L1.ⓘ[I1] ⪤[R,§l] L2.ⓘ[I2]. #R #I1 #I2 #L1 #L2 #l * #f #Hf #H12 lapply (frees_inv_gref … Hf) -Hf /4 width=3 by frees_gref, sex_push, isid_push, ex2_intro/ qed. lemma rex_bind_repl_dx (R): - ∀I,I1,L1,L2,T. L1.ⓘ{I} ⪤[R,T] L2.ⓘ{I1} → - ∀I2. cext2 R L1 I I2 → L1.ⓘ{I} ⪤[R,T] L2.ⓘ{I2}. + ∀I,I1,L1,L2,T. L1.ⓘ[I] ⪤[R,T] L2.ⓘ[I1] → + ∀I2. cext2 R L1 I I2 → L1.ⓘ[I] ⪤[R,T] L2.ⓘ[I2]. #R #I #I1 #L1 #L2 #T * #f #Hf #HL12 #I2 #HR /3 width=5 by sex_pair_repl, ex2_intro/ qed-. @@ -316,15 +316,15 @@ qed-. lemma rex_isid (R1) (R2): ∀L1,L2,T1,T2. - (∀f. L1 ⊢ 𝐅+⦃T1⦄ ≘ f → 𝐈⦃f⦄) → - (∀f. 𝐈⦃f⦄ → L1 ⊢ 𝐅+⦃T2⦄ ≘ f) → + (∀f. L1 ⊢ 𝐅+❪T1❫ ≘ f → 𝐈❪f❫) → + (∀f. 𝐈❪f❫ → L1 ⊢ 𝐅+❪T2❫ ≘ f) → L1 ⪤[R1,T1] L2 → L1 ⪤[R2,T2] L2. #R1 #R2 #L1 #L2 #T1 #T2 #H1 #H2 * /4 width=7 by sex_co_isid, ex2_intro/ qed-. lemma rex_unit_sn (R1) (R2): - ∀I,K1,L2. K1.ⓤ{I} ⪤[R1,#0] L2 → K1.ⓤ{I} ⪤[R2,#0] L2. + ∀I,K1,L2. K1.ⓤ[I] ⪤[R1,#0] L2 → K1.ⓤ[I] ⪤[R2,#0] L2. #R1 #R2 #I #K1 #L2 #H elim (rex_inv_zero_unit_sn … H) -H #f #K2 #Hf #HK12 #H destruct /3 width=7 by rex_unit, sex_co_isid/ diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rex_drops.ma b/matita/matita/contribs/lambdadelta/static_2/static/rex_drops.ma index 9a9df172e..4866935fa 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/rex_drops.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/rex_drops.ma @@ -25,18 +25,18 @@ definition f_dedropable_sn: predicate (relation3 lenv term term) ≝ ∃∃L2. L1 ⪤[R,U] L2 & ⇩*[b,f] L2 ≘ K2 & L1 ≡[f] L2. definition f_dropable_sn: predicate (relation3 lenv term term) ≝ - λR. ∀b,f,L1,K1. ⇩*[b,f] L1 ≘ K1 → 𝐔⦃f⦄ → + λR. ∀b,f,L1,K1. ⇩*[b,f] L1 ≘ K1 → 𝐔❪f❫ → ∀L2,U. L1 ⪤[R,U] L2 → ∀T. ⇧*[f] T ≘ U → ∃∃K2. K1 ⪤[R,T] K2 & ⇩*[b,f] L2 ≘ K2. definition f_dropable_dx: predicate (relation3 lenv term term) ≝ λR. ∀L1,L2,U. L1 ⪤[R,U] L2 → - ∀b,f,K2. ⇩*[b,f] L2 ≘ K2 → 𝐔⦃f⦄ → ∀T. ⇧*[f] T ≘ U → + ∀b,f,K2. ⇩*[b,f] L2 ≘ K2 → 𝐔❪f❫ → ∀T. ⇧*[f] T ≘ U → ∃∃K1. ⇩*[b,f] L1 ≘ K1 & K1 ⪤[R,T] K2. definition f_transitive_next: relation3 … ≝ λR1,R2,R3. - ∀f,L,T. L ⊢ 𝐅+⦃T⦄ ≘ f → - ∀g,I,K,n. ⇩*[n] L ≘ K.ⓘ{I} → ↑g = ⫱*[n] f → + ∀f,L,T. L ⊢ 𝐅+❪T❫ ≘ f → + ∀g,I,K,n. ⇩*[n] L ≘ K.ⓘ[I] → ↑g = ⫱*[n] f → sex_transitive (cext2 R1) (cext2 R2) (cext2 R3) (cext2 R1) cfull g K I. (* Properties with generic slicing for local environments *******************) @@ -90,7 +90,7 @@ qed-. (* Basic_2A1: uses: llpx_sn_inv_lift_O *) lemma rex_inv_lifts_bi (R): - ∀L1,L2,U. L1 ⪤[R,U] L2 → ∀b,f. 𝐔⦃f⦄ → + ∀L1,L2,U. L1 ⪤[R,U] L2 → ∀b,f. 𝐔❪f❫ → ∀K1,K2. ⇩*[b,f] L1 ≘ K1 → ⇩*[b,f] L2 ≘ K2 → ∀T. ⇧*[f] T ≘ U → K1 ⪤[R,T] K2. #R #L1 #L2 #U #HL12 #b #f #Hf #K1 #K2 #HLK1 #HLK2 #T #HTU @@ -99,16 +99,16 @@ lapply (drops_mono … HY … HLK2) -b -f -L2 #H destruct // qed-. lemma rex_inv_lref_pair_sn (R): - ∀L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K1,V1. ⇩*[i] L1 ≘ K1.ⓑ{I}V1 → - ∃∃K2,V2. ⇩*[i] L2 ≘ K2.ⓑ{I}V2 & K1 ⪤[R,V1] K2 & R K1 V1 V2. + ∀L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K1,V1. ⇩*[i] L1 ≘ K1.ⓑ[I]V1 → + ∃∃K2,V2. ⇩*[i] L2 ≘ K2.ⓑ[I]V2 & K1 ⪤[R,V1] K2 & R K1 V1 V2. #R #L1 #L2 #i #HL12 #I #K1 #V1 #HLK1 elim (rex_dropable_sn … HLK1 … HL12 (#0)) -HLK1 -HL12 // #Y #HY #HLK2 elim (rex_inv_zero_pair_sn … HY) -HY #K2 #V2 #HK12 #HV12 #H destruct /2 width=5 by ex3_2_intro/ qed-. lemma rex_inv_lref_pair_dx (R): - ∀L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K2,V2. ⇩*[i] L2 ≘ K2.ⓑ{I}V2 → - ∃∃K1,V1. ⇩*[i] L1 ≘ K1.ⓑ{I}V1 & K1 ⪤[R,V1] K2 & R K1 V1 V2. + ∀L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K2,V2. ⇩*[i] L2 ≘ K2.ⓑ[I]V2 → + ∃∃K1,V1. ⇩*[i] L1 ≘ K1.ⓑ[I]V1 & K1 ⪤[R,V1] K2 & R K1 V1 V2. #R #L1 #L2 #i #HL12 #I #K2 #V2 #HLK2 elim (rex_dropable_dx … HL12 … HLK2 … (#0)) -HLK2 -HL12 // #Y #HLK1 #HY elim (rex_inv_zero_pair_dx … HY) -HY #K1 #V1 #HK12 #HV12 #H destruct /2 width=5 by ex3_2_intro/ @@ -116,8 +116,8 @@ qed-. lemma rex_inv_lref_pair_bi (R) (L1) (L2) (i): L1 ⪤[R,#i] L2 → - ∀I1,K1,V1. ⇩*[i] L1 ≘ K1.ⓑ{I1}V1 → - ∀I2,K2,V2. ⇩*[i] L2 ≘ K2.ⓑ{I2}V2 → + ∀I1,K1,V1. ⇩*[i] L1 ≘ K1.ⓑ[I1]V1 → + ∀I2,K2,V2. ⇩*[i] L2 ≘ K2.ⓑ[I2]V2 → ∧∧ K1 ⪤[R,V1] K2 & R K1 V1 V2 & I1 = I2. #R #L1 #L2 #i #H12 #I1 #K1 #V1 #H1 #I2 #K2 #V2 #H2 elim (rex_inv_lref_pair_sn … H12 … H1) -L1 #Y2 #X2 #HLY2 #HK12 #HV12 @@ -126,16 +126,16 @@ lapply (drops_mono … HLY2 … H2) -HLY2 -H2 #H destruct qed-. lemma rex_inv_lref_unit_sn (R): - ∀L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K1. ⇩*[i] L1 ≘ K1.ⓤ{I} → - ∃∃f,K2. ⇩*[i] L2 ≘ K2.ⓤ{I} & K1 ⪤[cext2 R,cfull,f] K2 & 𝐈⦃f⦄. + ∀L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K1. ⇩*[i] L1 ≘ K1.ⓤ[I] → + ∃∃f,K2. ⇩*[i] L2 ≘ K2.ⓤ[I] & K1 ⪤[cext2 R,cfull,f] K2 & 𝐈❪f❫. #R #L1 #L2 #i #HL12 #I #K1 #HLK1 elim (rex_dropable_sn … HLK1 … HL12 (#0)) -HLK1 -HL12 // #Y #HY #HLK2 elim (rex_inv_zero_unit_sn … HY) -HY #f #K2 #Hf #HK12 #H destruct /2 width=5 by ex3_2_intro/ qed-. lemma rex_inv_lref_unit_dx (R): - ∀L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K2. ⇩*[i] L2 ≘ K2.ⓤ{I} → - ∃∃f,K1. ⇩*[i] L1 ≘ K1.ⓤ{I} & K1 ⪤[cext2 R,cfull,f] K2 & 𝐈⦃f⦄. + ∀L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K2. ⇩*[i] L2 ≘ K2.ⓤ[I] → + ∃∃f,K1. ⇩*[i] L1 ≘ K1.ⓤ[I] & K1 ⪤[cext2 R,cfull,f] K2 & 𝐈❪f❫. #R #L1 #L2 #i #HL12 #I #K2 #HLK2 elim (rex_dropable_dx … HL12 … HLK2 … (#0)) -HLK2 -HL12 // #Y #HLK1 #HY elim (rex_inv_zero_unit_dx … HY) -HY #f #K2 #Hf #HK12 #H destruct /2 width=5 by ex3_2_intro/ diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rex_fqup.ma b/matita/matita/contribs/lambdadelta/static_2/static/rex_fqup.ma index 601e8b28d..063832841 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/rex_fqup.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/rex_fqup.ma @@ -27,9 +27,9 @@ qed. lemma rex_pair_refl (R): (∀L. reflexive … (R L)) → - ∀L,V1,V2. R L V1 V2 → ∀I,T. L.ⓑ{I}V1 ⪤[R,T] L.ⓑ{I}V2. + ∀L,V1,V2. R L V1 V2 → ∀I,T. L.ⓑ[I]V1 ⪤[R,T] L.ⓑ[I]V2. #R #HR #L #V1 #V2 #HV12 #I #T -elim (frees_total (L.ⓑ{I}V1) T) #f #Hf +elim (frees_total (L.ⓑ[I]V1) T) #f #Hf elim (pn_split f) * #g #H destruct /5 width=3 by sex_refl, sex_next, sex_push, ext2_refl, ext2_pair, ex2_intro/ qed. @@ -37,7 +37,7 @@ qed. (* Advanced inversion lemmas ************************************************) lemma rex_inv_bind_void (R): - ∀p,I,L1,L2,V,T. L1 ⪤[R,ⓑ{p,I}V.T] L2 → L1 ⪤[R,V] L2 ∧ L1.ⓧ ⪤[R,T] L2.ⓧ. + ∀p,I,L1,L2,V,T. L1 ⪤[R,ⓑ[p,I]V.T] L2 → L1 ⪤[R,V] L2 ∧ L1.ⓧ ⪤[R,T] L2.ⓧ. #R #p #I #L1 #L2 #V #T * #f #Hf #HL elim (frees_inv_bind_void … Hf) -Hf /6 width=6 by sle_sex_trans, sex_inv_tl, sor_inv_sle_dx, sor_inv_sle_sn, ex2_intro, conj/ qed-. @@ -45,6 +45,6 @@ qed-. (* Advanced forward lemmas **************************************************) lemma rex_fwd_bind_dx_void (R): - ∀p,I,L1,L2,V,T. L1 ⪤[R,ⓑ{p,I}V.T] L2 → L1.ⓧ ⪤[R,T] L2.ⓧ. + ∀p,I,L1,L2,V,T. L1 ⪤[R,ⓑ[p,I]V.T] L2 → L1.ⓧ ⪤[R,T] L2.ⓧ. #R #p #I #L1 #L2 #V #T #H elim (rex_inv_bind_void … H) -H // qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rex_fsle.ma b/matita/matita/contribs/lambdadelta/static_2/static/rex_fsle.ma index 7974bb900..641fc459d 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/rex_fsle.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/rex_fsle.ma @@ -20,21 +20,21 @@ include "static_2/static/rex_rex.ma". (* GENERIC EXTENSION ON REFERRED ENTRIES OF A CONTEXT-SENSITIVE REALTION ****) definition R_fsge_compatible: predicate (relation3 …) ≝ λRN. - ∀L,T1,T2. RN L T1 T2 → ⦃L,T2⦄ ⊆ ⦃L,T1⦄. + ∀L,T1,T2. RN L T1 T2 → ❪L,T2❫ ⊆ ❪L,T1❫. definition rex_fsge_compatible: predicate (relation3 …) ≝ λRN. - ∀L1,L2,T. L1 ⪤[RN,T] L2 → ⦃L2,T⦄ ⊆ ⦃L1,T⦄. + ∀L1,L2,T. L1 ⪤[RN,T] L2 → ❪L2,T❫ ⊆ ❪L1,T❫. definition rex_fsle_compatible: predicate (relation3 …) ≝ λRN. - ∀L1,L2,T. L1 ⪤[RN,T] L2 → ⦃L1,T⦄ ⊆ ⦃L2,T⦄. + ∀L1,L2,T. L1 ⪤[RN,T] L2 → ❪L1,T❫ ⊆ ❪L2,T❫. (* Basic inversions with free variables inclusion for restricted closures ***) lemma frees_sex_conf (R): rex_fsge_compatible R → - ∀L1,T,f1. L1 ⊢ 𝐅+⦃T⦄ ≘ f1 → + ∀L1,T,f1. L1 ⊢ 𝐅+❪T❫ ≘ f1 → ∀L2. L1 ⪤[cext2 R,cfull,f1] L2 → - ∃∃f2. L2 ⊢ 𝐅+⦃T⦄ ≘ f2 & f2 ⊆ f1. + ∃∃f2. L2 ⊢ 𝐅+❪T❫ ≘ f2 & f2 ⊆ f1. #R #HR #L1 #T #f1 #Hf1 #L2 #H1L lapply (HR L1 L2 T ?) /2 width=3 by ex2_intro/ #H2L @(fsle_frees_trans_eq … H2L … Hf1) /3 width=4 by sex_fwd_length, sym_eq/ @@ -44,7 +44,7 @@ qed-. (* Note: we just need lveq_inv_refl: ∀L, n1, n2. L ≋ⓧ*[n1, n2] L → ∧∧ 0 = n1 & 0 = n2 *) lemma fsge_rex_trans (R): - ∀L1,T1,T2. ⦃L1,T1⦄ ⊆ ⦃L1,T2⦄ → + ∀L1,T1,T2. ❪L1,T1❫ ⊆ ❪L1,T2❫ → ∀L2. L1 ⪤[R,T2] L2 → L1 ⪤[R,T1] L2. #R #L1 #T1 #T2 * #n1 #n2 #f1 #f2 #Hf1 #Hf2 #Hn #Hf #L2 #HL12 elim (lveq_inj_length … Hn ?) // #H1 #H2 destruct @@ -65,11 +65,11 @@ lemma rex_pair_sn_split (R1) (R2): (∀L. reflexive … (R1 L)) → (∀L. reflexive … (R2 L)) → rex_fsge_compatible R1 → ∀L1,L2,V. L1 ⪤[R1,V] L2 → ∀I,T. - ∃∃L. L1 ⪤[R1,②{I}V.T] L & L ⪤[R2,V] L2. + ∃∃L. L1 ⪤[R1,②[I]V.T] L & L ⪤[R2,V] L2. #R1 #R2 #HR1 #HR2 #HR #L1 #L2 #V * #f #Hf #HL12 * [ #p ] #I #T -[ elim (frees_total L1 (ⓑ{p,I}V.T)) #g #Hg +[ elim (frees_total L1 (ⓑ[p,I]V.T)) #g #Hg elim (frees_inv_bind … Hg) #y1 #y2 #H #_ #Hy -| elim (frees_total L1 (ⓕ{I}V.T)) #g #Hg +| elim (frees_total L1 (ⓕ[I]V.T)) #g #Hg elim (frees_inv_flat … Hg) #y1 #y2 #H #_ #Hy ] lapply(frees_mono … H … Hf) -H #H1 @@ -85,9 +85,9 @@ lemma rex_flat_dx_split (R1) (R2): (∀L. reflexive … (R1 L)) → (∀L. reflexive … (R2 L)) → rex_fsge_compatible R1 → ∀L1,L2,T. L1 ⪤[R1,T] L2 → ∀I,V. - ∃∃L. L1 ⪤[R1,ⓕ{I}V.T] L & L ⪤[R2,T] L2. + ∃∃L. L1 ⪤[R1,ⓕ[I]V.T] L & L ⪤[R2,T] L2. #R1 #R2 #HR1 #HR2 #HR #L1 #L2 #T * #f #Hf #HL12 #I #V -elim (frees_total L1 (ⓕ{I}V.T)) #g #Hg +elim (frees_total L1 (ⓕ[I]V.T)) #g #Hg elim (frees_inv_flat … Hg) #y1 #y2 #_ #H #Hy lapply(frees_mono … H … Hf) -H #H2 lapply (sor_eq_repl_back2 … Hy … H2) -y2 #Hy @@ -101,10 +101,10 @@ qed-. lemma rex_bind_dx_split (R1) (R2): (∀L. reflexive … (R1 L)) → (∀L. reflexive … (R2 L)) → rex_fsge_compatible R1 → - ∀I,L1,L2,V1,T. L1.ⓑ{I}V1 ⪤[R1,T] L2 → ∀p. - ∃∃L,V. L1 ⪤[R1,ⓑ{p,I}V1.T] L & L.ⓑ{I}V ⪤[R2,T] L2 & R1 L1 V1 V. + ∀I,L1,L2,V1,T. L1.ⓑ[I]V1 ⪤[R1,T] L2 → ∀p. + ∃∃L,V. L1 ⪤[R1,ⓑ[p,I]V1.T] L & L.ⓑ[I]V ⪤[R2,T] L2 & R1 L1 V1 V. #R1 #R2 #HR1 #HR2 #HR #I #L1 #L2 #V1 #T * #f #Hf #HL12 #p -elim (frees_total L1 (ⓑ{p,I}V1.T)) #g #Hg +elim (frees_total L1 (ⓑ[p,I]V1.T)) #g #Hg elim (frees_inv_bind … Hg) #y1 #y2 #_ #H #Hy lapply(frees_mono … H … Hf) -H #H2 lapply (tl_eq_repl … H2) -H2 #H2 @@ -123,9 +123,9 @@ lemma rex_bind_dx_split_void (R1) (R2): (∀L. reflexive … (R1 L)) → (∀L. reflexive … (R2 L)) → rex_fsge_compatible R1 → ∀L1,L2,T. L1.ⓧ ⪤[R1,T] L2 → ∀p,I,V. - ∃∃L. L1 ⪤[R1,ⓑ{p,I}V.T] L & L.ⓧ ⪤[R2,T] L2. + ∃∃L. L1 ⪤[R1,ⓑ[p,I]V.T] L & L.ⓧ ⪤[R2,T] L2. #R1 #R2 #HR1 #HR2 #HR #L1 #L2 #T * #f #Hf #HL12 #p #I #V -elim (frees_total L1 (ⓑ{p,I}V.T)) #g #Hg +elim (frees_total L1 (ⓑ[p,I]V.T)) #g #Hg elim (frees_inv_bind_void … Hg) #y1 #y2 #_ #H #Hy lapply(frees_mono … H … Hf) -H #H2 lapply (tl_eq_repl … H2) -H2 #H2 diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rex_length.ma b/matita/matita/contribs/lambdadelta/static_2/static/rex_length.ma index a963524d2..aa4fba009 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/rex_length.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/rex_length.ma @@ -46,7 +46,7 @@ lemma rex_gref_length (R): ∀L1,L2. |L1| = |L2| → ∀l. L1 ⪤[R,§l] L2. ] qed. -lemma rex_unit_length (R): ∀L1,L2. |L1| = |L2| → ∀I. L1.ⓤ{I} ⪤[R,#0] L2.ⓤ{I}. +lemma rex_unit_length (R): ∀L1,L2. |L1| = |L2| → ∀I. L1.ⓤ[I] ⪤[R,#0] L2.ⓤ[I]. /3 width=3 by rex_unit, sex_length_isid/ qed. (* Basic_2A1: uses: llpx_sn_lift_le llpx_sn_lift_ge *) @@ -67,8 +67,8 @@ lemma rex_inv_zero_length (R): ∀Y1,Y2. Y1 ⪤[R,#0] Y2 → ∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆ | ∃∃I,L1,L2,V1,V2. L1 ⪤[R,V1] L2 & R L1 V1 V2 & - Y1 = L1.ⓑ{I}V1 & Y2 = L2.ⓑ{I}V2 - | ∃∃I,L1,L2. |L1| = |L2| & Y1 = L1.ⓤ{I} & Y2 = L2.ⓤ{I}. + Y1 = L1.ⓑ[I]V1 & Y2 = L2.ⓑ[I]V2 + | ∃∃I,L1,L2. |L1| = |L2| & Y1 = L1.ⓤ[I] & Y2 = L2.ⓤ[I]. #R #Y1 #Y2 #H elim (rex_inv_zero … H) -H * /4 width=9 by sex_fwd_length, ex4_5_intro, ex3_3_intro, or3_intro2, or3_intro1, or3_intro0, conj/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/static/rex_rex.ma b/matita/matita/contribs/lambdadelta/static_2/static/rex_rex.ma index 10d2b9178..5604348bf 100644 --- a/matita/matita/contribs/lambdadelta/static_2/static/rex_rex.ma +++ b/matita/matita/contribs/lambdadelta/static_2/static/rex_rex.ma @@ -22,7 +22,7 @@ include "static_2/static/rex.ma". lemma rex_inv_frees (R): ∀L1,L2,T. L1 ⪤[R,T] L2 → - ∀f. L1 ⊢ 𝐅+⦃T⦄ ≘ f → L1 ⪤[cext2 R,cfull,f] L2. + ∀f. L1 ⊢ 𝐅+❪T❫ ≘ f → L1 ⪤[cext2 R,cfull,f] L2. #R #L1 #L2 #T * /3 width=6 by frees_mono, sex_eq_repl_back/ qed-. @@ -42,8 +42,8 @@ qed-. (* Basic_2A1: uses: llpx_sn_bind llpx_sn_bind_O *) theorem rex_bind (R) (p) (I): - ∀L1,L2,V1,V2,T. L1 ⪤[R,V1] L2 → L1.ⓑ{I}V1 ⪤[R,T] L2.ⓑ{I}V2 → - L1 ⪤[R,ⓑ{p,I}V1.T] L2. + ∀L1,L2,V1,V2,T. L1 ⪤[R,V1] L2 → L1.ⓑ[I]V1 ⪤[R,T] L2.ⓑ[I]V2 → + L1 ⪤[R,ⓑ[p,I]V1.T] L2. #R #p #I #L1 #L2 #V1 #V2 #T * #f1 #HV #Hf1 * #f2 #HT #Hf2 lapply (sex_fwd_bind … Hf2) -Hf2 #Hf2 elim (sor_isfin_ex f1 (⫱f2)) /3 width=7 by frees_fwd_isfin, frees_bind, sex_join, isfin_tl, ex2_intro/ @@ -51,13 +51,13 @@ qed. (* Basic_2A1: llpx_sn_flat *) theorem rex_flat (R) (I): - ∀L1,L2,V,T. L1 ⪤[R,V] L2 → L1 ⪤[R,T] L2 → L1 ⪤[R,ⓕ{I}V.T] L2. + ∀L1,L2,V,T. L1 ⪤[R,V] L2 → L1 ⪤[R,T] L2 → L1 ⪤[R,ⓕ[I]V.T] L2. #R #I #L1 #L2 #V #T * #f1 #HV #Hf1 * #f2 #HT #Hf2 elim (sor_isfin_ex f1 f2) /3 width=7 by frees_fwd_isfin, frees_flat, sex_join, ex2_intro/ qed. theorem rex_bind_void (R) (p) (I): - ∀L1,L2,V,T. L1 ⪤[R,V] L2 → L1.ⓧ ⪤[R,T] L2.ⓧ → L1 ⪤[R,ⓑ{p,I}V.T] L2. + ∀L1,L2,V,T. L1 ⪤[R,V] L2 → L1.ⓧ ⪤[R,T] L2.ⓧ → L1 ⪤[R,ⓑ[p,I]V.T] L2. #R #p #I #L1 #L2 #V #T * #f1 #HV #Hf1 * #f2 #HT #Hf2 lapply (sex_fwd_bind … Hf2) -Hf2 #Hf2 elim (sor_isfin_ex f1 (⫱f2)) /3 width=7 by frees_fwd_isfin, frees_bind_void, sex_join, isfin_tl, ex2_intro/ @@ -68,8 +68,8 @@ qed. (* Basic_2A1: uses: nllpx_sn_inv_bind nllpx_sn_inv_bind_O *) lemma rnex_inv_bind (R): (∀L,T1,T2. Decidable (R L T1 T2)) → - ∀p,I,L1,L2,V,T. (L1 ⪤[R,ⓑ{p,I}V.T] L2 → ⊥) → - ∨∨ (L1 ⪤[R,V] L2 → ⊥) | (L1.ⓑ{I}V ⪤[R,T] L2.ⓑ{I}V → ⊥). + ∀p,I,L1,L2,V,T. (L1 ⪤[R,ⓑ[p,I]V.T] L2 → ⊥) → + ∨∨ (L1 ⪤[R,V] L2 → ⊥) | (L1.ⓑ[I]V ⪤[R,T] L2.ⓑ[I]V → ⊥). #R #HR #p #I #L1 #L2 #V #T #H elim (rex_dec … HR L1 L2 V) /4 width=2 by rex_bind, or_intror, or_introl/ qed-. @@ -77,7 +77,7 @@ qed-. (* Basic_2A1: uses: nllpx_sn_inv_flat *) lemma rnex_inv_flat (R): (∀L,T1,T2. Decidable (R L T1 T2)) → - ∀I,L1,L2,V,T. (L1 ⪤[R,ⓕ{I}V.T] L2 → ⊥) → + ∀I,L1,L2,V,T. (L1 ⪤[R,ⓕ[I]V.T] L2 → ⊥) → ∨∨ (L1 ⪤[R,V] L2 → ⊥) | (L1 ⪤[R,T] L2 → ⊥). #R #HR #I #L1 #L2 #V #T #H elim (rex_dec … HR L1 L2 V) /4 width=1 by rex_flat, or_intror, or_introl/ @@ -85,7 +85,7 @@ qed-. lemma rnex_inv_bind_void (R): (∀L,T1,T2. Decidable (R L T1 T2)) → - ∀p,I,L1,L2,V,T. (L1 ⪤[R,ⓑ{p,I}V.T] L2 → ⊥) → + ∀p,I,L1,L2,V,T. (L1 ⪤[R,ⓑ[p,I]V.T] L2 → ⊥) → ∨∨ (L1 ⪤[R,V] L2 → ⊥) | (L1.ⓧ ⪤[R,T] L2.ⓧ → ⊥). #R #HR #p #I #L1 #L2 #V #T #H elim (rex_dec … HR L1 L2 V) /4 width=2 by rex_bind_void, or_intror, or_introl/ diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/append.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/append.ma index b8c04461f..7a26b8865 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/append.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/append.ma @@ -25,7 +25,7 @@ include "static_2/syntax/lenv.ma". rec definition append L K on K ≝ match K with [ LAtom ⇒ L -| LBind K I ⇒ (append L K).ⓘ{I} +| LBind K I ⇒ (append L K).ⓘ[I] ]. interpretation "append (local environment)" 'plus L1 L2 = (append L1 L2). @@ -57,7 +57,7 @@ lemma append_atom: ∀L. (L + ⋆) = L. (**) (* () should be redundant *) // qed. (* Basic_2A1: uses: append_pair *) -lemma append_bind: ∀I,L,K. L+(K.ⓘ{I}) = (L+K).ⓘ{I}. +lemma append_bind: ∀I,L,K. L+(K.ⓘ[I]) = (L+K).ⓘ[I]. // qed. lemma append_atom_sn: ∀L. ⋆ + L = L. @@ -69,7 +69,7 @@ lemma append_assoc: associative … append. #L1 #L2 #L3 elim L3 -L3 // qed. -lemma append_shift: ∀L,K,I. L+(ⓘ{I}.K) = (L.ⓘ{I})+K. +lemma append_shift: ∀L,K,I. L+(ⓘ[I].K) = (L.ⓘ[I])+K. #L #K #I append_bind #H destruct qed-. -lemma append_inv_bind3_sn: ∀I0,L,L0,K. L0.ⓘ{I0} = L + K → - ∨∨ ∧∧ L0.ⓘ{I0} = L & ⋆ = K - | ∃∃K0. K = K0.ⓘ{I0} & L0 = L + K0. +lemma append_inv_bind3_sn: ∀I0,L,L0,K. L0.ⓘ[I0] = L + K → + ∨∨ ∧∧ L0.ⓘ[I0] = L & ⋆ = K + | ∃∃K0. K = K0.ⓘ[I0] & L0 = L + K0. #I0 #L #L0 * /3 width=1 by or_introl, conj/ #K #I >append_bind #H destruct /3 width=3 by ex2_intro, or_intror/ qed-. @@ -95,7 +95,7 @@ qed-. (* Basic_1: uses: chead_ctail *) (* Basic_2A1: uses: lpair_ltail *) -lemma lenv_case_tail: ∀L. L = ⋆ ∨ ∃∃K,I. L = ⓘ{I}.K. +lemma lenv_case_tail: ∀L. L = ⋆ ∨ ∃∃K,I. L = ⓘ[I].K. #L elim L -L /2 width=1 by or_introl/ #L #I * [2: * ] /3 width=3 by ex1_2_intro, or_intror/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/append_length.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/append_length.ma index a0906800c..c76a2a6e7 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/append_length.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/append_length.ma @@ -24,7 +24,7 @@ lemma append_length: ∀L1,L2. |L1 + L2| = |L1| + |L2|. #L2 #I >append_bind >length_bind >length_bind // qed. -lemma ltail_length: ∀I,L. |ⓘ{I}.L| = ↑|L|. +lemma ltail_length: ∀I,L. |ⓘ[I].L| = ↑|L|. #I #L >append_length // qed. @@ -32,7 +32,7 @@ qed. (* Basic_2A1: was: length_inv_pos_dx_ltail *) lemma length_inv_succ_dx_ltail: ∀L,n. |L| = ↑n → - ∃∃I,K. |K| = n & L = ⓘ{I}.K. + ∃∃I,K. |K| = n & L = ⓘ[I].K. #Y #n #H elim (length_inv_succ_dx … H) -H #I #L #Hn #HLK destruct elim (lenv_case_tail … L) [2: * #K #J ] #H destruct /2 width=4 by ex2_2_intro/ @@ -40,7 +40,7 @@ qed-. (* Basic_2A1: was: length_inv_pos_sn_ltail *) lemma length_inv_succ_sn_ltail: ∀L,n. ↑n = |L| → - ∃∃I,K. n = |K| & L = ⓘ{I}.K. + ∃∃I,K. n = |K| & L = ⓘ[I].K. #Y #n #H elim (length_inv_succ_sn … H) -H #I #L #Hn #HLK destruct elim (lenv_case_tail … L) [2: * #K #J ] #H destruct /2 width=4 by ex2_2_intro/ @@ -95,8 +95,8 @@ lemma append_inv_refl_dx: ∀L,K. L+K = L → K = ⋆. #L #K #H elim (append_inj_dx … (⋆) … H) // qed-. -lemma append_inv_pair_dx: ∀I,L,K,V. L+K = L.ⓑ{I}V → K = ⋆.ⓑ{I}V. -#I #L #K #V #H elim (append_inj_dx … (⋆.ⓑ{I}V) … H) // +lemma append_inv_pair_dx: ∀I,L,K,V. L+K = L.ⓑ[I]V → K = ⋆.ⓑ[I]V. +#I #L #K #V #H elim (append_inj_dx … (⋆.ⓑ[I]V) … H) // qed-. (* Basic eliminators ********************************************************) @@ -104,7 +104,7 @@ qed-. (* Basic_1: was: c_tail_ind *) (* Basic_2A1: was: lenv_ind_alt *) lemma lenv_ind_tail: ∀Q:predicate lenv. - Q (⋆) → (∀I,L. Q L → Q (ⓘ{I}.L)) → ∀L. Q L. + Q (⋆) → (∀I,L. Q L → Q (ⓘ[I].L)) → ∀L. Q L. #Q #IH1 #IH2 #L @(f_ind … length … L) -L #x #IHx * // #L #I -IH1 #H destruct elim (lenv_case_tail … L) [2: * #K #J ] diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/bind_weight.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/bind_weight.ma index c1f512f33..2cf1bc170 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/bind_weight.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/bind_weight.ma @@ -19,13 +19,13 @@ include "static_2/syntax/bind.ma". rec definition bw I ≝ match I with [ BUnit _ ⇒ 1 -| BPair _ V ⇒ ♯{V} +| BPair _ V ⇒ ♯❨V❩ ]. interpretation "weight (binder for local environments)" 'Weight I = (bw I). (* Basic properties *********************************************************) -lemma bw_pos: ∀I. 1 ≤ ♯{I}. +lemma bw_pos: ∀I. 1 ≤ ♯❨I❩. * // qed. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/cl_restricted_weight.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/cl_restricted_weight.ma index bc5b92945..8340649d8 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/cl_restricted_weight.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/cl_restricted_weight.ma @@ -17,34 +17,34 @@ include "static_2/syntax/lenv_weight.ma". (* WEIGHT OF A RESTRICTED CLOSURE *******************************************) -definition rfw: lenv → term → ? ≝ λL,T. ♯{L} + ♯{T}. +definition rfw: lenv → term → ? ≝ λL,T. ♯❨L❩ + ♯❨T❩. interpretation "weight (restricted closure)" 'Weight L T = (rfw L T). (* Basic properties *********************************************************) (* Basic_1: was: flt_shift *) -lemma rfw_shift: ∀p,I,K,V,T. ♯{K.ⓑ{I}V,T} < ♯{K,ⓑ{p,I}V.T}. +lemma rfw_shift: ∀p,I,K,V,T. ♯❨K.ⓑ[I]V,T❩ < ♯❨K,ⓑ[p,I]V.T❩. normalize /2 width=1 by monotonic_le_plus_r/ qed. -lemma rfw_clear: ∀p,I1,I2,K,V,T. ♯{K.ⓤ{I1},T} < ♯{K,ⓑ{p,I2}V.T}. +lemma rfw_clear: ∀p,I1,I2,K,V,T. ♯❨K.ⓤ[I1],T❩ < ♯❨K,ⓑ[p,I2]V.T❩. normalize /4 width=1 by monotonic_le_plus_r, le_S_S/ qed. -lemma rfw_tpair_sn: ∀I,L,V,T. ♯{L,V} < ♯{L,②{I}V.T}. +lemma rfw_tpair_sn: ∀I,L,V,T. ♯❨L,V❩ < ♯❨L,②[I]V.T❩. normalize in ⊢ (?→?→?→?→?%%); // qed. -lemma rfw_tpair_dx: ∀I,L,V,T. ♯{L,T} < ♯{L,②{I}V.T}. +lemma rfw_tpair_dx: ∀I,L,V,T. ♯❨L,T❩ < ♯❨L,②[I]V.T❩. normalize in ⊢ (?→?→?→?→?%%); // qed. -lemma rfw_lpair_sn: ∀I,L,V,T. ♯{L,V} < ♯{L.ⓑ{I}V,T}. +lemma rfw_lpair_sn: ∀I,L,V,T. ♯❨L,V❩ < ♯❨L.ⓑ[I]V,T❩. normalize /3 width=1 by monotonic_lt_plus_l, monotonic_le_plus_r/ qed. -lemma rfw_lpair_dx: ∀I,L,V,T. ♯{L,T} < ♯{L.ⓑ{I}V,T}. +lemma rfw_lpair_dx: ∀I,L,V,T. ♯❨L,T❩ < ♯❨L.ⓑ[I]V,T❩. normalize /3 width=1 by monotonic_lt_plus_l, monotonic_le_plus_r/ qed. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/cl_weight.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/cl_weight.ma index af52e35b1..ad3f08f93 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/cl_weight.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/cl_weight.ma @@ -19,30 +19,30 @@ include "static_2/syntax/genv.ma". (* WEIGHT OF A CLOSURE ******************************************************) (* activate genv *) -definition fw: genv → lenv → term → ? ≝ λG,L,T. ♯{L} + ♯{T}. +definition fw: genv → lenv → term → ? ≝ λG,L,T. ♯❨L❩ + ♯❨T❩. interpretation "weight (closure)" 'Weight G L T = (fw G L T). (* Basic properties *********************************************************) (* Basic_1: was: flt_shift *) -lemma fw_shift: ∀p,I,G,K,V,T. ♯{G,K.ⓑ{I}V,T} < ♯{G,K,ⓑ{p,I}V.T}. +lemma fw_shift: ∀p,I,G,K,V,T. ♯❨G,K.ⓑ[I]V,T❩ < ♯❨G,K,ⓑ[p,I]V.T❩. normalize /2 width=1 by monotonic_le_plus_r/ qed. -lemma fw_clear: ∀p,I1,I2,G,K,V,T. ♯{G,K.ⓤ{I1},T} < ♯{G,K,ⓑ{p,I2}V.T}. +lemma fw_clear: ∀p,I1,I2,G,K,V,T. ♯❨G,K.ⓤ[I1],T❩ < ♯❨G,K,ⓑ[p,I2]V.T❩. normalize /4 width=1 by monotonic_le_plus_r, le_S_S/ qed. -lemma fw_tpair_sn: ∀I,G,L,V,T. ♯{G,L,V} < ♯{G,L,②{I}V.T}. +lemma fw_tpair_sn: ∀I,G,L,V,T. ♯❨G,L,V❩ < ♯❨G,L,②[I]V.T❩. normalize in ⊢ (?→?→?→?→?→?%%); // qed. -lemma fw_tpair_dx: ∀I,G,L,V,T. ♯{G,L,T} < ♯{G,L,②{I}V.T}. +lemma fw_tpair_dx: ∀I,G,L,V,T. ♯❨G,L,T❩ < ♯❨G,L,②[I]V.T❩. normalize in ⊢ (?→?→?→?→?→?%%); // qed. -lemma fw_lpair_sn: ∀I,G,L,V,T. ♯{G,L,V} < ♯{G,L.ⓑ{I}V,T}. +lemma fw_lpair_sn: ∀I,G,L,V,T. ♯❨G,L,V❩ < ♯❨G,L.ⓑ[I]V,T❩. normalize /3 width=1 by monotonic_lt_plus_l, monotonic_le_plus_r/ qed. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/fold.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/fold.ma index 67bfbf7ff..05b86e627 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/fold.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/fold.ma @@ -20,7 +20,7 @@ rec definition fold L T on L ≝ match L with [ LAtom ⇒ T | LBind L I ⇒ match I with [ BUnit _ ⇒ fold L (-ⓛ⋆0.T) - | BPair I V ⇒ fold L (-ⓑ{I}V.T) + | BPair I V ⇒ fold L (-ⓑ[I]V.T) ] ]. @@ -31,8 +31,8 @@ interpretation "fold (restricted closure)" 'plus L T = (fold L T). lemma fold_atom: ∀T. ⋆ + T = T. // qed. -lemma fold_unit: ∀I,L,T. L.ⓤ{I}+T = L+(-ⓛ⋆0.T). +lemma fold_unit: ∀I,L,T. L.ⓤ[I]+T = L+(-ⓛ⋆0.T). // qed. -lemma fold_pair: ∀I,L,V,T. (L.ⓑ{I}V)+T = L+(-ⓑ{I}V.T). +lemma fold_pair: ∀I,L,V,T. (L.ⓑ[I]V)+T = L+(-ⓑ[I]V.T). // qed. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/genv_weight.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/genv_weight.ma index 9bf005fa0..3dd315e0a 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/genv_weight.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/genv_weight.ma @@ -19,12 +19,12 @@ include "static_2/syntax/genv.ma". rec definition gw G ≝ match G with [ GAtom ⇒ 0 -| GPair G I T ⇒ gw G + ♯{T} +| GPair G I T ⇒ gw G + ♯❨T❩ ]. interpretation "weight (global environment)" 'Weight G = (gw G). (* Basic properties *********************************************************) -lemma gw_pair: ∀I,G,T. ♯{G} < ♯{G.ⓑ{I}T}. +lemma gw_pair: ∀I,G,T. ♯❨G❩ < ♯❨G.ⓑ[I]T❩. normalize /2 width=1 by monotonic_le_plus_r/ qed. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/lenv.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/lenv.ma index 7e2b65da5..8de779e77 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/lenv.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/lenv.ma @@ -70,13 +70,13 @@ lemma cfull_dec: ∀L,T1,T2. Decidable (cfull L T1 T2). (* Basic inversion lemmas ***************************************************) -fact destruct_lbind_lbind_aux: ∀I1,I2,L1,L2. L1.ⓘ{I1} = L2.ⓘ{I2} → +fact destruct_lbind_lbind_aux: ∀I1,I2,L1,L2. L1.ⓘ[I1] = L2.ⓘ[I2] → L1 = L2 ∧ I1 = I2. #I1 #I2 #L1 #L2 #H destruct /2 width=1 by conj/ qed-. (* Basic_2A1: uses: discr_lpair_x_xy *) -lemma discr_lbind_x_xy: ∀I,L. L = L.ⓘ{I} → ⊥. +lemma discr_lbind_x_xy: ∀I,L. L = L.ⓘ[I] → ⊥. #I #L elim L -L [ #H destruct | #L #J #IHL #H elim (destruct_lbind_lbind_aux … H) -H (**) (* destruct lemma needed *) @@ -85,5 +85,5 @@ lemma discr_lbind_x_xy: ∀I,L. L = L.ⓘ{I} → ⊥. qed-. (* Basic_2A1: uses: discr_lpair_xy_x *) -lemma discr_lbind_xy_x: ∀I,L. L.ⓘ{I} = L → ⊥. +lemma discr_lbind_xy_x: ∀I,L. L.ⓘ[I] = L → ⊥. /2 width=4 by discr_lbind_x_xy/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/lenv_length.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/lenv_length.ma index 162b21fa0..768105e54 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/lenv_length.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/lenv_length.ma @@ -29,7 +29,7 @@ lemma length_atom: |⋆| = 0. // qed. (* Basic_2A1: uses: length_pair *) -lemma length_bind: ∀I,L. |L.ⓘ{I}| = ↑|L|. +lemma length_bind: ∀I,L. |L.ⓘ[I]| = ↑|L|. // qed. (* Basic inversion lemmas ***************************************************) @@ -44,7 +44,7 @@ lemma length_inv_zero_sn: ∀L. 0 = |L| → L = ⋆. (* Basic_2A1: was: length_inv_pos_dx *) lemma length_inv_succ_dx: ∀n,L. |L| = ↑n → - ∃∃I,K. |K| = n & L = K. ⓘ{I}. + ∃∃I,K. |K| = n & L = K. ⓘ[I]. #n * [ >length_atom #H destruct | #L #I >length_bind /3 width=4 by ex2_2_intro, injective_S/ @@ -53,7 +53,7 @@ qed-. (* Basic_2A1: was: length_inv_pos_sn *) lemma length_inv_succ_sn: ∀n,L. ↑n = |L| → - ∃∃I,K. n = |K| & L = K. ⓘ{I}. + ∃∃I,K. n = |K| & L = K. ⓘ[I]. #n #L #H lapply (sym_eq ??? H) -H #H elim (length_inv_succ_dx … H) -H /2 width=4 by ex2_2_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/lenv_weight.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/lenv_weight.ma index 01ff8b7ad..19a645439 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/lenv_weight.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/lenv_weight.ma @@ -19,7 +19,7 @@ include "static_2/syntax/lenv.ma". rec definition lw L ≝ match L with [ LAtom ⇒ 0 -| LBind L I ⇒ lw L + ♯{I} +| LBind L I ⇒ lw L + ♯❨I❩ ]. interpretation "weight (local environment)" 'Weight L = (lw L). @@ -27,7 +27,7 @@ interpretation "weight (local environment)" 'Weight L = (lw L). (* Basic properties *********************************************************) (* Basic_2A1: uses: lw_pair *) -lemma lw_bind: ∀I,L. ♯{L} < ♯{L.ⓘ{I}}. +lemma lw_bind: ∀I,L. ♯❨L❩ < ♯❨L.ⓘ[I]❩. normalize /2 width=1 by monotonic_le_plus_r/ qed. (* Basic_1: removed theorems 4: clt_cong clt_head clt_thead clt_wf_ind *) diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/lveq.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/lveq.ma index a895a5811..776affc1c 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/lveq.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/lveq.ma @@ -22,7 +22,7 @@ include "static_2/syntax/lenv.ma". inductive lveq: bi_relation nat lenv ≝ | lveq_atom : lveq 0 (⋆) 0 (⋆) | lveq_bind : ∀I1,I2,K1,K2. lveq 0 K1 0 K2 → - lveq 0 (K1.ⓘ{I1}) 0 (K2.ⓘ{I2}) + lveq 0 (K1.ⓘ[I1]) 0 (K2.ⓘ[I2]) | lveq_void_sn: ∀K1,K2,n1. lveq n1 K1 0 K2 → lveq (↑n1) (K1.ⓧ) 0 K2 | lveq_void_dx: ∀K1,K2,n2. lveq 0 K1 n2 K2 → @@ -48,7 +48,7 @@ qed-. fact lveq_inv_zero_aux: ∀L1,L2,n1,n2. L1 ≋ⓧ*[n1,n2] L2 → 0 = n1 → 0 = n2 → ∨∨ ∧∧ ⋆ = L1 & ⋆ = L2 - | ∃∃I1,I2,K1,K2. K1 ≋ⓧ*[0,0] K2 & K1.ⓘ{I1} = L1 & K2.ⓘ{I2} = L2. + | ∃∃I1,I2,K1,K2. K1 ≋ⓧ*[0,0] K2 & K1.ⓘ[I1] = L1 & K2.ⓘ[I2] = L2. #L1 #L2 #n1 #n2 * -L1 -L2 -n1 -n2 [1: /3 width=1 by or_introl, conj/ |2: /3 width=7 by ex3_4_intro, or_intror/ @@ -58,7 +58,7 @@ qed-. lemma lveq_inv_zero: ∀L1,L2. L1 ≋ⓧ*[0,0] L2 → ∨∨ ∧∧ ⋆ = L1 & ⋆ = L2 - | ∃∃I1,I2,K1,K2. K1 ≋ⓧ*[0,0] K2 & K1.ⓘ{I1} = L1 & K2.ⓘ{I2} = L2. + | ∃∃I1,I2,K1,K2. K1 ≋ⓧ*[0,0] K2 & K1.ⓘ[I1] = L1 & K2.ⓘ[I2] = L2. /2 width=5 by lveq_inv_zero_aux/ qed-. fact lveq_inv_succ_sn_aux: ∀L1,L2,n1,n2. L1 ≋ⓧ*[n1,n2] L2 → @@ -96,7 +96,7 @@ lemma lveq_inv_succ: ∀L1,L2,n1,n2. L1 ≋ⓧ*[↑n1,↑n2] L2 → ⊥. (* Advanced inversion lemmas ************************************************) -lemma lveq_inv_bind: ∀I1,I2,K1,K2. K1.ⓘ{I1} ≋ⓧ*[0,0] K2.ⓘ{I2} → K1 ≋ⓧ*[0,0] K2. +lemma lveq_inv_bind: ∀I1,I2,K1,K2. K1.ⓘ[I1] ≋ⓧ*[0,0] K2.ⓘ[I2] → K1 ≋ⓧ*[0,0] K2. #I1 #I2 #K1 #K2 #H elim (lveq_inv_zero … H) -H * [| #Z1 #Z2 #Y1 #Y2 #HY ] #H1 #H2 destruct // qed-. @@ -110,7 +110,7 @@ lemma lveq_inv_atom_atom: ∀n1,n2. ⋆ ≋ⓧ*[n1,n2] ⋆ → ∧∧ 0 = n1 & 0 ] qed-. -lemma lveq_inv_bind_atom: ∀I1,K1,n1,n2. K1.ⓘ{I1} ≋ⓧ*[n1,n2] ⋆ → +lemma lveq_inv_bind_atom: ∀I1,K1,n1,n2. K1.ⓘ[I1] ≋ⓧ*[n1,n2] ⋆ → ∃∃m1. K1 ≋ⓧ*[m1,0] ⋆ & BUnit Void = I1 & ↑m1 = n1 & 0 = n2. #I1 #K1 * [2: #n1 ] * [2,4: #n2 ] #H [ elim (lveq_inv_succ … H) @@ -123,7 +123,7 @@ lemma lveq_inv_bind_atom: ∀I1,K1,n1,n2. K1.ⓘ{I1} ≋ⓧ*[n1,n2] ⋆ → ] qed-. -lemma lveq_inv_atom_bind: ∀I2,K2,n1,n2. ⋆ ≋ⓧ*[n1,n2] K2.ⓘ{I2} → +lemma lveq_inv_atom_bind: ∀I2,K2,n1,n2. ⋆ ≋ⓧ*[n1,n2] K2.ⓘ[I2] → ∃∃m2. ⋆ ≋ⓧ*[0,m2] K2 & BUnit Void = I2 & 0 = n1 & ↑m2 = n2. #I2 #K2 #n1 #n2 #H lapply (lveq_sym … H) -H #H @@ -131,7 +131,7 @@ elim (lveq_inv_bind_atom … H) -H /3 width=3 by lveq_sym, ex4_intro/ qed-. -lemma lveq_inv_pair_pair: ∀I1,I2,K1,K2,V1,V2,n1,n2. K1.ⓑ{I1}V1 ≋ⓧ*[n1,n2] K2.ⓑ{I2}V2 → +lemma lveq_inv_pair_pair: ∀I1,I2,K1,K2,V1,V2,n1,n2. K1.ⓑ[I1]V1 ≋ⓧ*[n1,n2] K2.ⓑ[I2]V2 → ∧∧ K1 ≋ⓧ*[0,0] K2 & 0 = n1 & 0 = n2. #I1 #I2 #K1 #K2 #V1 #V2 * [2: #n1 ] * [2,4: #n2 ] #H [ elim (lveq_inv_succ … H) @@ -167,12 +167,12 @@ lemma lveq_fwd_gen: ∀L1,L2,n1,n2. L1 ≋ⓧ*[n1,n2] L2 → /2 width=1 by or_introl, or_intror/ qed-. -lemma lveq_fwd_pair_sn: ∀I1,K1,L2,V1,n1,n2. K1.ⓑ{I1}V1 ≋ⓧ*[n1,n2] L2 → 0 = n1. +lemma lveq_fwd_pair_sn: ∀I1,K1,L2,V1,n1,n2. K1.ⓑ[I1]V1 ≋ⓧ*[n1,n2] L2 → 0 = n1. #I1 #K1 #L2 #V1 * [2: #n1 ] // * [2: #n2 ] #H [ elim (lveq_inv_succ … H) | elim (lveq_inv_succ_sn … H) -H #Y #_ #H1 #H2 destruct ] qed-. -lemma lveq_fwd_pair_dx: ∀I2,L1,K2,V2,n1,n2. L1 ≋ⓧ*[n1,n2] K2.ⓑ{I2}V2 → 0 = n2. +lemma lveq_fwd_pair_dx: ∀I2,L1,K2,V2,n1,n2. L1 ≋ⓧ*[n1,n2] K2.ⓑ[I2]V2 → 0 = n2. /3 width=6 by lveq_fwd_pair_sn, lveq_sym/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/lveq_length.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/lveq_length.ma index 7f77340e7..a88ef7706 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/lveq_length.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/lveq_length.ma @@ -79,14 +79,14 @@ lemma lveq_fwd_length_minus: ∀L1,L2,n1,n2. L1 ≋ⓧ*[n1,n2] L2 → /3 width=3 by lveq_fwd_length_plus, lveq_fwd_length_le_dx, lveq_fwd_length_le_sn, plus_to_minus_2/ qed-. lemma lveq_fwd_abst_bind_length_le: ∀I1,I2,L1,L2,V1,n1,n2. - L1.ⓑ{I1}V1 ≋ⓧ*[n1,n2] L2.ⓘ{I2} → |L1| ≤ |L2|. + L1.ⓑ[I1]V1 ≋ⓧ*[n1,n2] L2.ⓘ[I2] → |L1| ≤ |L2|. #I1 #I2 #L1 #L2 #V1 #n1 #n2 #HL lapply (lveq_fwd_pair_sn … HL) #H destruct elim (lveq_fwd_length … HL) -HL >length_bind >length_bind // qed-. lemma lveq_fwd_bind_abst_length_le: ∀I1,I2,L1,L2,V2,n1,n2. - L1.ⓘ{I1} ≋ⓧ*[n1,n2] L2.ⓑ{I2}V2 → |L2| ≤ |L1|. + L1.ⓘ[I1] ≋ⓧ*[n1,n2] L2.ⓑ[I2]V2 → |L2| ≤ |L1|. /3 width=6 by lveq_fwd_abst_bind_length_le, lveq_sym/ qed-. (* Inversion lemmas with length for local environments **********************) diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/lveq_lveq.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/lveq_lveq.ma index c0c8cf1ab..f3b2d18cd 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/lveq_lveq.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/lveq_lveq.ma @@ -19,7 +19,7 @@ include "static_2/syntax/lveq_length.ma". (* Main inversion lemmas ****************************************************) theorem lveq_inv_bind: ∀K1,K2. K1 ≋ⓧ*[0,0] K2 → - ∀I1,I2,m1,m2. K1.ⓘ{I1} ≋ⓧ*[m1,m2] K2.ⓘ{I2} → + ∀I1,I2,m1,m2. K1.ⓘ[I1] ≋ⓧ*[m1,m2] K2.ⓘ[I2] → ∧∧ 0 = m1 & 0 = m2. #K1 #K2 #HK #I1 #I2 #m1 #m2 #H lapply (lveq_fwd_length_eq … HK) -HK #HK diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/teqo.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/teqo.ma index b08bfc087..4ededae0c 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/teqo.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/teqo.ma @@ -23,7 +23,7 @@ inductive teqo: relation term ≝ | teqo_sort: ∀s1,s2. teqo (⋆s1) (⋆s2) | teqo_lref: ∀i. teqo (#i) (#i) | teqo_gref: ∀l. teqo (§l) (§l) -| teqo_pair: ∀I,V1,V2,T1,T2. teqo (②{I}V1.T1) (②{I}V2.T2) +| teqo_pair: ∀I,V1,V2,T1,T2. teqo (②[I]V1.T1) (②[I]V2.T2) . interpretation @@ -69,8 +69,8 @@ lemma teqo_inv_gref1: ∀Y,l. §l ⩳ Y → Y = §l. /2 width=5 by teqo_inv_gref1_aux/ qed-. fact teqo_inv_pair1_aux: ∀T1,T2. T1 ⩳ T2 → - ∀J,W1,U1. T1 = ②{J}W1.U1 → - ∃∃W2,U2. T2 = ②{J}W2.U2. + ∀J,W1,U1. T1 = ②[J]W1.U1 → + ∃∃W2,U2. T2 = ②[J]W2.U2. #T1 #T2 * -T1 -T2 [ #s1 #s2 #J #W1 #U1 #H destruct | #i #J #W1 #U1 #H destruct @@ -81,13 +81,13 @@ qed-. (* Basic_1: was: iso_gen_head *) (* Basic_2A1: was: tsts_inv_pair1 *) -lemma teqo_inv_pair1: ∀J,W1,U1,T2. ②{J}W1.U1 ⩳ T2 → - ∃∃W2,U2. T2 = ②{J}W2. U2. +lemma teqo_inv_pair1: ∀J,W1,U1,T2. ②[J]W1.U1 ⩳ T2 → + ∃∃W2,U2. T2 = ②[J]W2. U2. /2 width=7 by teqo_inv_pair1_aux/ qed-. fact teqo_inv_pair2_aux: ∀T1,T2. T1 ⩳ T2 → - ∀J,W2,U2. T2 = ②{J}W2.U2 → - ∃∃W1,U1. T1 = ②{J}W1.U1. + ∀J,W2,U2. T2 = ②[J]W2.U2 → + ∃∃W1,U1. T1 = ②[J]W1.U1. #T1 #T2 * -T1 -T2 [ #s1 #s2 #J #W2 #U2 #H destruct | #i #J #W2 #U2 #H destruct @@ -97,13 +97,13 @@ fact teqo_inv_pair2_aux: ∀T1,T2. T1 ⩳ T2 → qed-. (* Basic_2A1: was: tsts_inv_pair2 *) -lemma teqo_inv_pair2: ∀J,T1,W2,U2. T1 ⩳ ②{J}W2.U2 → - ∃∃W1,U1. T1 = ②{J}W1.U1. +lemma teqo_inv_pair2: ∀J,T1,W2,U2. T1 ⩳ ②[J]W2.U2 → + ∃∃W1,U1. T1 = ②[J]W1.U1. /2 width=7 by teqo_inv_pair2_aux/ qed-. (* Advanced inversion lemmas ************************************************) -lemma teqo_inv_pair: ∀I1,I2,V1,V2,T1,T2. ②{I1}V1.T1 ⩳ ②{I2}V2.T2 → +lemma teqo_inv_pair: ∀I1,I2,V1,V2,T1,T2. ②[I1]V1.T1 ⩳ ②[I2]V2.T2 → I1 = I2. #I1 #I2 #V1 #V2 #T1 #T2 #H elim (teqo_inv_pair1 … H) -H #V0 #T0 #H destruct // diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/teqo_simple.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/teqo_simple.ma index 8159a89f3..865b0aa6f 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/teqo_simple.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/teqo_simple.ma @@ -20,12 +20,12 @@ include "static_2/syntax/teqo.ma". (* Properies with simple (neutral) terms ************************************) (* Basic_2A1: was: simple_tsts_repl_dx *) -lemma simple_teqo_repl_dx: ∀T1,T2. T1 ⩳ T2 → 𝐒⦃T1⦄ → 𝐒⦃T2⦄. +lemma simple_teqo_repl_dx: ∀T1,T2. T1 ⩳ T2 → 𝐒❪T1❫ → 𝐒❪T2❫. #T1 #T2 * -T1 -T2 // #I #V1 #V2 #T1 #T2 #H elim (simple_inv_pair … H) -H #J #H destruct // qed-. (* Basic_2A1: was: simple_tsts_repl_sn *) -lemma simple_teqo_repl_sn: ∀T1,T2. T1 ⩳ T2 → 𝐒⦃T2⦄ → 𝐒⦃T1⦄. +lemma simple_teqo_repl_sn: ∀T1,T2. T1 ⩳ T2 → 𝐒❪T2❫ → 𝐒❪T1❫. /3 width=3 by simple_teqo_repl_dx, teqo_sym/ qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/teqo_simple_vector.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/teqo_simple_vector.ma index 43ea6c691..1d89e0bc7 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/teqo_simple_vector.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/teqo_simple_vector.ma @@ -22,7 +22,7 @@ include "static_2/syntax/teqo_simple.ma". (* Basic_1: was only: iso_flats_lref_bind_false iso_flats_flat_bind_false *) (* Basic_2A1: was: tsts_inv_bind_applv_simple *) lemma teqo_inv_applv_bind_simple (p) (I): - ∀Vs,V2,T1,T2. ⒶVs.T1 ⩳ ⓑ{p,I}V2.T2 → 𝐒⦃T1⦄ → ⊥. + ∀Vs,V2,T1,T2. ⒶVs.T1 ⩳ ⓑ[p,I]V2.T2 → 𝐒❪T1❫ → ⊥. #p #I #Vs #V2 #T1 #T2 #H elim (teqo_inv_pair2 … H) -H #V0 #T0 elim Vs -Vs normalize [ #H destruct #H /2 width=5 by simple_inv_bind/ diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/teqx.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/teqx.ma index fbe372f56..819cbb91a 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/teqx.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/teqx.ma @@ -22,7 +22,7 @@ inductive teqx: relation term ≝ | teqx_sort: ∀s1,s2. teqx (⋆s1) (⋆s2) | teqx_lref: ∀i. teqx (#i) (#i) | teqx_gref: ∀l. teqx (§l) (§l) -| teqx_pair: ∀I,V1,V2,T1,T2. teqx V1 V2 → teqx T1 T2 → teqx (②{I}V1.T1) (②{I}V2.T2) +| teqx_pair: ∀I,V1,V2,T1,T2. teqx V1 V2 → teqx T1 T2 → teqx (②[I]V1.T1) (②[I]V2.T2) . interpretation @@ -77,8 +77,8 @@ qed-. lemma teqx_inv_gref1: ∀Y,l. §l ≛ Y → Y = §l. /2 width=5 by teqx_inv_gref1_aux/ qed-. -fact teqx_inv_pair1_aux: ∀X,Y. X ≛ Y → ∀I,V1,T1. X = ②{I}V1.T1 → - ∃∃V2,T2. V1 ≛ V2 & T1 ≛ T2 & Y = ②{I}V2.T2. +fact teqx_inv_pair1_aux: ∀X,Y. X ≛ Y → ∀I,V1,T1. X = ②[I]V1.T1 → + ∃∃V2,T2. V1 ≛ V2 & T1 ≛ T2 & Y = ②[I]V2.T2. #X #Y * -X -Y [ #s1 #s2 #J #W1 #U1 #H destruct | #i #J #W1 #U1 #H destruct @@ -87,8 +87,8 @@ fact teqx_inv_pair1_aux: ∀X,Y. X ≛ Y → ∀I,V1,T1. X = ②{I}V1.T1 → ] qed-. -lemma teqx_inv_pair1: ∀I,V1,T1,Y. ②{I}V1.T1 ≛ Y → - ∃∃V2,T2. V1 ≛ V2 & T1 ≛ T2 & Y = ②{I}V2.T2. +lemma teqx_inv_pair1: ∀I,V1,T1,Y. ②[I]V1.T1 ≛ Y → + ∃∃V2,T2. V1 ≛ V2 & T1 ≛ T2 & Y = ②[I]V2.T2. /2 width=3 by teqx_inv_pair1_aux/ qed-. lemma teqx_inv_sort2: ∀X1,s2. X1 ≛ ⋆s2 → @@ -98,8 +98,8 @@ elim (teqx_inv_sort1 X1 s2) /2 width=2 by teqx_sym, ex_intro/ qed-. -lemma teqx_inv_pair2: ∀I,X1,V2,T2. X1 ≛ ②{I}V2.T2 → - ∃∃V1,T1. V1 ≛ V2 & T1 ≛ T2 & X1 = ②{I}V1.T1. +lemma teqx_inv_pair2: ∀I,X1,V2,T2. X1 ≛ ②[I]V2.T2 → + ∃∃V1,T1. V1 ≛ V2 & T1 ≛ T2 & X1 = ②[I]V1.T1. #I #X1 #V2 #T2 #H elim (teqx_inv_pair1 I V2 T2 X1) [ #V1 #T1 #HV #HT #H destruct ] @@ -108,20 +108,20 @@ qed-. (* Advanced inversion lemmas ************************************************) -lemma teqx_inv_pair: ∀I1,I2,V1,V2,T1,T2. ②{I1}V1.T1 ≛ ②{I2}V2.T2 → +lemma teqx_inv_pair: ∀I1,I2,V1,V2,T1,T2. ②[I1]V1.T1 ≛ ②[I2]V2.T2 → ∧∧ I1 = I2 & V1 ≛ V2 & T1 ≛ T2. #I1 #I2 #V1 #V2 #T1 #T2 #H elim (teqx_inv_pair1 … H) -H #V0 #T0 #HV #HT #H destruct /2 width=1 by and3_intro/ qed-. -lemma teqx_inv_pair_xy_x: ∀I,V,T. ②{I}V.T ≛ V → ⊥. +lemma teqx_inv_pair_xy_x: ∀I,V,T. ②[I]V.T ≛ V → ⊥. #I #V elim V -V [ #J #T #H elim (teqx_inv_pair1 … H) -H #X #Y #_ #_ #H destruct | #J #X #Y #IHX #_ #T #H elim (teqx_inv_pair … H) -H #H #HY #_ destruct /2 width=2 by/ ] qed-. -lemma teqx_inv_pair_xy_y: ∀I,T,V. ②{I}V.T ≛ T → ⊥. +lemma teqx_inv_pair_xy_y: ∀I,T,V. ②[I]V.T ≛ T → ⊥. #I #T elim T -T [ #J #V #H elim (teqx_inv_pair1 … H) -H #X #Y #_ #_ #H destruct | #J #X #Y #_ #IHY #V #H elim (teqx_inv_pair … H) -H #H #_ #HY destruct /2 width=2 by/ @@ -130,7 +130,7 @@ qed-. (* Basic forward lemmas *****************************************************) -lemma teqx_fwd_atom1: ∀I,Y. ⓪{I} ≛ Y → ∃J. Y = ⓪{J}. +lemma teqx_fwd_atom1: ∀I,Y. ⓪[I] ≛ Y → ∃J. Y = ⓪[J]. * #x #Y #H [ elim (teqx_inv_sort1 … H) -H ] /3 width=4 by teqx_inv_gref1, teqx_inv_lref1, ex_intro/ qed-. @@ -174,7 +174,7 @@ qed-. (* Negated inversion lemmas *************************************************) lemma tneqx_inv_pair: ∀I1,I2,V1,V2,T1,T2. - (②{I1}V1.T1 ≛ ②{I2}V2.T2 → ⊥) → + (②[I1]V1.T1 ≛ ②[I2]V2.T2 → ⊥) → ∨∨ I1 = I2 → ⊥ | (V1 ≛ V2 → ⊥) | (T1 ≛ T2 → ⊥). diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/term.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/term.ma index be1313b07..5ab8ef15e 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/term.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/term.ma @@ -93,8 +93,8 @@ interpretation "native type annotation (term)" (* Basic properties *********************************************************) -lemma abst_dec (X): ∨∨ ∃∃p,W,T. X = ⓛ{p}W.T - | (∀p,W,T. X = ⓛ{p}W.T → ⊥). +lemma abst_dec (X): ∨∨ ∃∃p,W,T. X = ⓛ[p]W.T + | (∀p,W,T. X = ⓛ[p]W.T → ⊥). * [ #I | * [ #p * | #I ] #V #T ] [3: /3 width=4 by ex1_3_intro, or_introl/ ] @or_intror #q #W #U #H destruct @@ -116,16 +116,16 @@ qed-. (* Basic inversion lemmas ***************************************************) -fact destruct_tatom_tatom_aux: ∀I1,I2. ⓪{I1} = ⓪{I2} → I1 = I2. +fact destruct_tatom_tatom_aux: ∀I1,I2. ⓪[I1] = ⓪[I2] → I1 = I2. #I1 #I2 #H destruct // qed-. -fact destruct_tpair_tpair_aux: ∀I1,I2,T1,T2,V1,V2. ②{I1}T1.V1 = ②{I2}T2.V2 → +fact destruct_tpair_tpair_aux: ∀I1,I2,T1,T2,V1,V2. ②[I1]T1.V1 = ②[I2]T2.V2 → ∧∧T1 = T2 & I1 = I2 & V1 = V2. #I1 #I2 #T1 #T2 #V1 #V2 #H destruct /2 width=1 by and3_intro/ qed-. -lemma discr_tpair_xy_x: ∀I,T,V. ②{I}V.T = V → ⊥. +lemma discr_tpair_xy_x: ∀I,T,V. ②[I]V.T = V → ⊥. #I #T #V elim V -V [ #J #H destruct | #J #W #U #IHW #_ #H elim (destruct_tpair_tpair_aux … H) -H /2 width=1 by/ (**) (* destruct lemma needed *) @@ -133,7 +133,7 @@ lemma discr_tpair_xy_x: ∀I,T,V. ②{I}V.T = V → ⊥. qed-. (* Basic_1: was: thead_x_y_y *) -lemma discr_tpair_xy_y: ∀I,V,T. ②{I}V.T = T → ⊥. +lemma discr_tpair_xy_y: ∀I,V,T. ②[I]V.T = T → ⊥. #I #V #T elim T -T [ #J #H destruct | #J #W #U #_ #IHU #H elim (destruct_tpair_tpair_aux … H) -H /2 width=1 by/ (**) (* destruct lemma needed *) @@ -141,7 +141,7 @@ lemma discr_tpair_xy_y: ∀I,V,T. ②{I}V.T = T → ⊥. qed-. lemma eq_false_inv_tpair_sn: ∀I,V1,T1,V2,T2. - (②{I}V1.T1 = ②{I}V2.T2 → ⊥) → + (②[I]V1.T1 = ②[I]V2.T2 → ⊥) → (V1 = V2 → ⊥) ∨ (V1 = V2 ∧ (T1 = T2 → ⊥)). #I #V1 #T1 #V2 #T2 #H elim (eq_term_dec V1 V2) /3 width=1 by or_introl/ #HV12 destruct @@ -149,7 +149,7 @@ elim (eq_term_dec V1 V2) /3 width=1 by or_introl/ #HV12 destruct qed-. lemma eq_false_inv_tpair_dx: ∀I,V1,T1,V2,T2. - (②{I} V1. T1 = ②{I}V2.T2 → ⊥) → + (②[I] V1. T1 = ②[I]V2.T2 → ⊥) → (T1 = T2 → ⊥) ∨ (T1 = T2 ∧ (V1 = V2 → ⊥)). #I #V1 #T1 #V2 #T2 #H elim (eq_term_dec T1 T2) /3 width=1 by or_introl/ #HT12 destruct diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/term_simple.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/term_simple.ma index a32b35268..50e1a4d22 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/term_simple.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/term_simple.ma @@ -19,32 +19,32 @@ include "static_2/syntax/term.ma". (* SIMPLE (NEUTRAL) TERMS ***************************************************) inductive simple: predicate term ≝ - | simple_atom: ∀I. simple (⓪{I}) - | simple_flat: ∀I,V,T. simple (ⓕ{I}V.T) + | simple_atom: ∀I. simple (⓪[I]) + | simple_flat: ∀I,V,T. simple (ⓕ[I]V.T) . interpretation "simple (term)" 'Simple T = (simple T). (* Basic inversion lemmas ***************************************************) -fact simple_inv_bind_aux: ∀T. 𝐒⦃T⦄ → ∀p,J,W,U. T = ⓑ{p,J}W.U → ⊥. +fact simple_inv_bind_aux: ∀T. 𝐒❪T❫ → ∀p,J,W,U. T = ⓑ[p,J]W.U → ⊥. #T * -T [ #I #p #J #W #U #H destruct | #I #V #T #a #J #W #U #H destruct ] qed-. -lemma simple_inv_bind: ∀p,I,V,T. 𝐒⦃ⓑ{p,I} V. T⦄ → ⊥. +lemma simple_inv_bind: ∀p,I,V,T. 𝐒❪ⓑ[p,I] V. T❫ → ⊥. /2 width=7 by simple_inv_bind_aux/ qed-. -lemma simple_inv_pair: ∀I,V,T. 𝐒⦃②{I}V.T⦄ → ∃J. I = Flat2 J. +lemma simple_inv_pair: ∀I,V,T. 𝐒❪②[I]V.T❫ → ∃J. I = Flat2 J. * /2 width=2 by ex_intro/ #p #I #V #T #H elim (simple_inv_bind … H) qed-. (* Basic properties *********************************************************) -lemma simple_dec_ex (X): ∨∨ 𝐒⦃X⦄ | ∃∃p,I,T,U. X = ⓑ{p,I}T.U. +lemma simple_dec_ex (X): ∨∨ 𝐒❪X❫ | ∃∃p,I,T,U. X = ⓑ[p,I]T.U. * [ /2 width=1 by simple_atom, or_introl/ ] * [| /2 width=1 by simple_flat, or_introl/ ] /3 width=5 by ex1_4_intro, or_intror/ diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/term_vector.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/term_vector.ma index b5da507bc..360386bd2 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/term_vector.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/term_vector.ma @@ -37,6 +37,6 @@ lemma applv_cons: ∀V,Vs,T. ⒶV⨮Vs.T = ⓐV.ⒶVs.T. (* Properties with simple terms *********************************************) -lemma applv_simple: ∀T,Vs. 𝐒⦃T⦄ → 𝐒⦃ⒶVs.T⦄. +lemma applv_simple: ∀T,Vs. 𝐒❪T❫ → 𝐒❪ⒶVs.T❫. #T * // qed. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/term_weight.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/term_weight.ma index 6948a54a8..ee53e62e7 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/term_weight.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/term_weight.ma @@ -27,11 +27,11 @@ interpretation "weight (term)" 'Weight T = (tw T). (* Basic properties *********************************************************) (* Basic_1: was: tweight_lt *) -lemma tw_pos: ∀T. 1 ≤ ♯{T}. +lemma tw_pos: ∀T. 1 ≤ ♯❨T❩. #T elim T -T // qed. -lemma tw_le_pair_dx (I): ∀V,T. ♯{T} < ♯{②{I}V.T}. +lemma tw_le_pair_dx (I): ∀V,T. ♯❨T❩ < ♯❨②[I]V.T❩. #I #V #T /2 width=1 by le_S_S/ qed. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/tweq.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/tweq.ma index 3d2671a60..1b44f03de 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/tweq.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/tweq.ma @@ -23,8 +23,8 @@ inductive tweq: relation term ≝ | tweq_sort: ∀s1,s2. tweq (⋆s1) (⋆s2) | tweq_lref: ∀i. tweq (#i) (#i) | tweq_gref: ∀l. tweq (§l) (§l) -| tweq_abbr: ∀p,V1,V2,T1,T2. (p=Ⓣ→tweq T1 T2) → tweq (ⓓ{p}V1.T1) (ⓓ{p}V2.T2) -| tweq_abst: ∀p,V1,V2,T1,T2. tweq (ⓛ{p}V1.T1) (ⓛ{p}V2.T2) +| tweq_abbr: ∀p,V1,V2,T1,T2. (p=Ⓣ→tweq T1 T2) → tweq (ⓓ[p]V1.T1) (ⓓ[p]V2.T2) +| tweq_abst: ∀p,V1,V2,T1,T2. tweq (ⓛ[p]V1.T1) (ⓛ[p]V2.T2) | tweq_appl: ∀V1,V2,T1,T2. tweq T1 T2 → tweq (ⓐV1.T1) (ⓐV2.T2) | tweq_cast: ∀V1,V2,T1,T2. tweq V1 V2 → tweq T1 T2 → tweq (ⓝV1.T1) (ⓝV2.T2) . @@ -103,8 +103,8 @@ lemma tweq_inv_gref_sn: /2 width=5 by tweq_inv_gref_sn_aux/ qed-. fact tweq_inv_abbr_sn_aux: - ∀X,Y. X ≅ Y → ∀p,V1,T1. X = ⓓ{p}V1.T1 → - ∃∃V2,T2. p = Ⓣ → T1 ≅ T2 & Y = ⓓ{p}V2.T2. + ∀X,Y. X ≅ Y → ∀p,V1,T1. X = ⓓ[p]V1.T1 → + ∃∃V2,T2. p = Ⓣ → T1 ≅ T2 & Y = ⓓ[p]V2.T2. #X #Y * -X -Y [1 : #s1 #s2 #q #W1 #U1 #H destruct |2,3: #i #q #W1 #U1 #H destruct @@ -116,13 +116,13 @@ fact tweq_inv_abbr_sn_aux: qed-. lemma tweq_inv_abbr_sn: - ∀p,V1,T1,Y. ⓓ{p}V1.T1 ≅ Y → - ∃∃V2,T2. p = Ⓣ → T1 ≅ T2 & Y = ⓓ{p}V2.T2. + ∀p,V1,T1,Y. ⓓ[p]V1.T1 ≅ Y → + ∃∃V2,T2. p = Ⓣ → T1 ≅ T2 & Y = ⓓ[p]V2.T2. /2 width=4 by tweq_inv_abbr_sn_aux/ qed-. fact tweq_inv_abst_sn_aux: - ∀X,Y. X ≅ Y → ∀p,V1,T1. X = ⓛ{p}V1.T1 → - ∃∃V2,T2. Y = ⓛ{p}V2.T2. + ∀X,Y. X ≅ Y → ∀p,V1,T1. X = ⓛ[p]V1.T1 → + ∃∃V2,T2. Y = ⓛ[p]V2.T2. #X #Y * -X -Y [1 : #s1 #s2 #q #W1 #U1 #H destruct |2,3: #i #q #W1 #U1 #H destruct @@ -134,8 +134,8 @@ fact tweq_inv_abst_sn_aux: qed-. lemma tweq_inv_abst_sn: - ∀p,V1,T1,Y. ⓛ{p}V1.T1 ≅ Y → - ∃∃V2,T2. Y = ⓛ{p}V2.T2. + ∀p,V1,T1,Y. ⓛ[p]V1.T1 ≅ Y → + ∃∃V2,T2. Y = ⓛ[p]V2.T2. /2 width=5 by tweq_inv_abst_sn_aux/ qed-. fact tweq_inv_appl_sn_aux: @@ -218,7 +218,7 @@ qed-. (* Advanced forward lemmas **************************************************) lemma tweq_fwd_pair_sn (I): - ∀V1,T1,X2. ②{I}V1.T1 ≅ X2 → ∃∃V2,T2. X2 = ②{I}V2.T2. + ∀V1,T1,X2. ②[I]V1.T1 ≅ X2 → ∃∃V2,T2. X2 = ②[I]V2.T2. * [ #p ] * [ cases p -p ] #V1 #T1 #X2 #H [ elim (tweq_inv_abbr_pos_sn … H) -H #V2 #T2 #_ #H | elim (tweq_inv_abbr_neg_sn … H) -H #V2 #T2 #H @@ -229,7 +229,7 @@ lemma tweq_fwd_pair_sn (I): qed-. lemma tweq_fwd_pair_bi (I1) (I2): - ∀V1,V2,T1,T2. ②{I1}V1.T1 ≅ ②{I2}V2.T2 → I1 = I2. + ∀V1,V2,T1,T2. ②[I1]V1.T1 ≅ ②[I2]V2.T2 → I1 = I2. #I1 #I2 #V1 #V2 #T1 #T2 #H elim (tweq_fwd_pair_sn … H) -H #W2 #U2 #H destruct // qed-. diff --git a/matita/matita/contribs/lambdadelta/static_2/syntax/tweq_simple.ma b/matita/matita/contribs/lambdadelta/static_2/syntax/tweq_simple.ma index 4077d0568..bf1ef003b 100644 --- a/matita/matita/contribs/lambdadelta/static_2/syntax/tweq_simple.ma +++ b/matita/matita/contribs/lambdadelta/static_2/syntax/tweq_simple.ma @@ -20,7 +20,7 @@ include "static_2/syntax/tweq.ma". (* Properties with simple terms *********************************************) lemma tweq_simple_trans: - ∀T1,T2. T1 ≅ T2 → 𝐒⦃T1⦄ → 𝐒⦃T2⦄. + ∀T1,T2. T1 ≅ T2 → 𝐒❪T1❫ → 𝐒❪T2❫. #T1 #T2 * -T1 -T2 [4,5: #p #V1 #V2 #T1 #T2 [ #_ ] #H elim (simple_inv_bind … H) diff --git a/matita/matita/contribs/lambdadelta/static_2/web/static_2_src.tbl b/matita/matita/contribs/lambdadelta/static_2/web/static_2_src.tbl index 83796e352..f7afe7a1a 100644 --- a/matita/matita/contribs/lambdadelta/static_2/web/static_2_src.tbl +++ b/matita/matita/contribs/lambdadelta/static_2/web/static_2_src.tbl @@ -21,17 +21,17 @@ table { [ { "static typing" * } { [ { "generic reducibility" * } { [ [ "restricted refinement for lenvs" ] "lsubc" + "( ? ⊢ ? ⫃[?] ? )" "lsubc_drops" + "lsubc_lsubr" + "lsubc_lsuba" * ] - [ [ "candidates" ] "gcp_cr" + "( ⦃?,?,?⦄ ϵ[?] 〚?〛 )" "gcp_aaa" * ] + [ [ "candidates" ] "gcp_cr" + "( ❪?,?,?❫ ϵ ⟦?⟧[?] )" "gcp_aaa" * ] [ [ "computation properties" ] "gcp" *] } ] [ { "atomic arity assignment" * } { [ [ "restricted refinement for lenvs" ] "lsuba" + "( ? ⊢ ? ⫃⁝ ? )" "lsuba_drops" + "lsuba_lsubr" + "lsuba_aaa" + "lsuba_lsuba" * ] - [ [ "for terms" ] "aaa" + "( ⦃?,?⦄ ⊢ ? ⁝ ? )" "aaa_drops" + "aaa_fqus" + "aaa_reqx" + "aaa_feqx" + "aaa_aaa" + "aaa_dec" * ] + [ [ "for terms" ] "aaa" + "( ❪?,?❫ ⊢ ? ⁝ ? )" "aaa_drops" + "aaa_fqus" + "aaa_reqx" + "aaa_feqx" + "aaa_aaa" + "aaa_dec" * ] } ] [ { "degree-based equivalence" * } { - [ [ "for closures on referred entries" ] "feqx" + "( ⦃?,?,?⦄ ≛ ⦃?,?,?⦄ )" "feqx_fqup" + "feqx_fqus" + "feqx_req" + "feqx_feqx" * ] + [ [ "for closures on referred entries" ] "feqx" + "( ❪?,?,?❫ ≛ ❪?,?,?❫ )" "feqx_fqup" + "feqx_fqus" + "feqx_req" + "feqx_feqx" * ] [ [ "for lenvs on referred entries" ] "reqx" + "( ? ≛[?] ? )" "reqx_length" + "reqx_drops" + "reqx_fqup" + "reqx_fqus" + "reqx_req" + "reqx_reqx" * ] } ] @@ -44,9 +44,9 @@ table { } ] [ { "context-sensitive free variables" * } { - [ [ "inclusion for restricted closures" ] "fsle" + "( ⦃?,?⦄ ⊆ ⦃?,?⦄ )" "fsle_length" + "fsle_drops" + "fsle_fqup" + "fsle_fsle" * ] - [ [ "restricted refinement for lenvs" ] "lsubf" + "( ⦃?,?⦄ ⫃𝐅+ ⦃?,?⦄ )" "lsubf_lsubr" + "lsubf_frees" + "lsubf_lsubf" * ] - [ [ "for terms" ] "frees" + "( ? ⊢ 𝐅+⦃?⦄ ≘ ? )" "frees_append" + "frees_drops" + "frees_fqup" + "frees_frees" * ] + [ [ "inclusion for restricted closures" ] "fsle" + "( ❪?,?❫ ⊆ ❪?,?❫ )" "fsle_length" + "fsle_drops" + "fsle_fqup" + "fsle_fsle" * ] + [ [ "restricted refinement for lenvs" ] "lsubf" + "( ❪?,?❫ ⫃𝐅+ ❪?,?❫ )" "lsubf_lsubr" + "lsubf_frees" + "lsubf_lsubf" * ] + [ [ "for terms" ] "frees" + "( ? ⊢ 𝐅+❪?❫ ≘ ? )" "frees_append" + "frees_drops" + "frees_fqup" + "frees_frees" * ] } ] [ { "local environments" * } { @@ -58,8 +58,8 @@ table { class "grass" [ { "s-computation" * } { [ { "iterated structural successor" * } { - [ [ "for closures" ] "fqus" + "( ⦃?,?,?⦄ ⬂*[?] ⦃?,?,?⦄ )" + "( ⦃?,?,?⦄ ⬂* ⦃?,?,?⦄ )" "fqus_weight" + "fqus_drops" + "fqus_fqup" + "fqus_fqus" * ] - [ [ "proper for closures" ] "fqup" + "( ⦃?,?,?⦄ ⬂+[?] ⦃?,?,?⦄ )" + "( ⦃?,?,?⦄ ⬂+ ⦃?,?,?⦄ )" "fqup_weight" + "fqup_drops" + "fqup_fqup" * ] + [ [ "for closures" ] "fqus" + "( ❪?,?,?❫ ⬂*[?] ❪?,?,?❫ )" + "( ❪?,?,?❫ ⬂* ❪?,?,?❫ )" "fqus_weight" + "fqus_drops" + "fqus_fqup" + "fqus_fqus" * ] + [ [ "proper for closures" ] "fqup" + "( ❪?,?,?❫ ⬂+[?] ❪?,?,?❫ )" + "( ❪?,?,?❫ ⬂+ ❪?,?,?❫ )" "fqup_weight" + "fqup_drops" + "fqup_fqup" * ] } ] } @@ -67,8 +67,8 @@ table { class "yellow" [ { "s-transition" * } { [ { "structural successor" * } { - [ [ "for closures" ] "fquq" + "( ⦃?,?,?⦄ ⬂⸮[?] ⦃?,?,?⦄ )" + "( ⦃?,?,?⦄ ⬂⸮ ⦃?,?,?⦄ )" "fquq_length" + "fquq_weight" * ] - [ [ "proper for closures" ] "fqu" + "( ⦃?,?,?⦄ ⬂[?] ⦃?,?,?⦄ )" + "( ⦃?,?,?⦄ ⬂ ⦃?,?,?⦄ )" "fqu_length" + "fqu_weight" + "fqu_teqx" * ] + [ [ "for closures" ] "fquq" + "( ❪?,?,?❫ ⬂⸮[?] ❪?,?,?❫ )" + "( ❪?,?,?❫ ⬂⸮ ❪?,?,?❫ )" "fquq_length" + "fquq_weight" * ] + [ [ "proper for closures" ] "fqu" + "( ❪?,?,?❫ ⬂[?] ❪?,?,?❫ )" + "( ❪?,?,?❫ ⬂ ❪?,?,?❫ )" "fqu_length" + "fqu_weight" + "fqu_teqx" * ] } ] } @@ -130,13 +130,13 @@ table { } ] [ { "closures" * } { - [ [ "" ] "cl_weight" + "( ♯{?,?,?} )" * ] - [ [ "" ] "cl_restricted_weight" + "( ♯{?,?} )" * ] + [ [ "" ] "cl_weight" + "( ♯❨?,?,?❩ )" * ] + [ [ "" ] "cl_restricted_weight" + "( ♯❨?,?❩ )" * ] } ] [ { "global environments" * } { [ [ "" ] "genv_length" + "( |?| )" * ] - [ [ "" ] "genv_weight" + "( ♯{?} )" * ] + [ [ "" ] "genv_weight" + "( ♯❨?❩ )" * ] [ [ "" ] "genv" * ] } ] @@ -144,7 +144,7 @@ table { [ [ "" ] "ceq_ext" "ceq_ext_ceq_ext" * ] [ [ "" ] "cext2" * ] [ [ "" ] "lenv_length" + "( |?| )" * ] - [ [ "" ] "lenv_weight" + "( ♯{?} )" * ] + [ [ "" ] "lenv_weight" + "( ♯❨?❩ )" * ] [ [ "" ] "lenv" * ] } ] @@ -155,8 +155,8 @@ table { ] [ { "terms" * } { [ [ "" ] "term_vector" + "( Ⓐ?.? )" * ] - [ [ "" ] "term_simple" + "( 𝐒⦃?⦄ )" * ] - [ [ "" ] "term_weight" + "( ♯{?} )" * ] + [ [ "" ] "term_simple" + "( 𝐒❪?❫ )" * ] + [ [ "" ] "term_weight" + "( ♯❨?❩ )" * ] [ [ "" ] "term" * ] } ] -- 2.39.2