From 75f395f0febd02de8e0f881d918a8812b1425c8d Mon Sep 17 00:00:00 2001 From: Ferruccio Guidi Date: Mon, 16 Apr 2018 21:47:12 +0200 Subject: [PATCH] update in basic_2 and ground_2 + some notational changes + some renaming + some dependences updated --- matita/components/syntax_extensions/.depend | 4 +- matita/matita/.depend.opt | 85 +++---- .../apps_2/examples/ex_cpr_omega.ma | 4 +- .../lambdadelta/basic_2/dynamic/lsubsv.ma | 8 +- .../lambdadelta/basic_2/dynamic/snv.ma | 6 +- .../lambdadelta/basic_2/dynamic/snv_lift.ma | 8 +- .../lambdadelta/basic_2/equivalence/cpcs.ma | 2 +- .../basic_2/equivalence/cpcs_cpcs.ma | 8 +- .../lambdadelta/basic_2/i_static/tc_lfxs.ma | 2 +- .../basic_2/i_static/tc_lfxs_drops.ma | 22 +- .../basic_2/i_static/tc_lfxs_fqup.ma | 2 +- .../basic_2/i_static/tc_lfxs_lex.ma | 8 +- .../basic_2/notation/relations/freestar_3.ma | 2 +- .../relations/{doteqsn_3.ma => ideqsn_3.ma} | 4 +- .../basic_2/notation/relations/rdropstar_3.ma | 2 +- .../basic_2/notation/relations/rdropstar_4.ma | 2 +- .../basic_2/notation/relations/rliftstar_3.ma | 2 +- .../lambdadelta/basic_2/relocation/drops.ma | 158 ++++++------- .../basic_2/relocation/drops_drops.ma | 38 +-- .../basic_2/relocation/drops_length.ma | 36 +-- .../basic_2/relocation/drops_lexs.ma | 50 ++-- .../basic_2/relocation/drops_lreq.ma | 24 +- .../basic_2/relocation/drops_lstar.ma | 10 +- .../basic_2/relocation/drops_vector.ma | 4 +- .../basic_2/relocation/drops_weight.ma | 8 +- .../lambdadelta/basic_2/relocation/lex_tc.ma | 22 +- .../basic_2/relocation/lexs_lexs.ma | 12 +- .../lambdadelta/basic_2/relocation/lexs_tc.ma | 20 +- .../lambdadelta/basic_2/relocation/lifts.ma | 138 +++++------ .../basic_2/relocation/lifts_bind.ma | 24 +- .../basic_2/relocation/lifts_lifts.ma | 22 +- .../basic_2/relocation/lifts_lifts_bind.ma | 12 +- .../basic_2/relocation/lifts_lifts_vector.ma | 12 +- .../basic_2/relocation/lifts_simple.ma | 4 +- .../basic_2/relocation/lifts_vector.ma | 48 ++-- .../basic_2/relocation/lifts_weight.ma | 2 +- .../basic_2/relocation/lifts_weight_bind.ma | 2 +- .../lambdadelta/basic_2/relocation/lreq.ma | 40 ++-- .../basic_2/relocation/lreq_length.ma | 2 +- .../basic_2/relocation/lreq_lreq.ma | 8 +- .../basic_2/rt_computation/cprs.ma | 8 +- .../basic_2/rt_computation/cprs_cprs.ma | 8 +- .../basic_2/rt_computation/cprs_lift.ma | 12 +- .../basic_2/rt_computation/cpxs.ma | 6 +- .../basic_2/rt_computation/cpxs_cpxs.ma | 6 +- .../basic_2/rt_computation/cpxs_drops.ma | 20 +- .../basic_2/rt_computation/cpxs_lfpx.ma | 4 +- .../basic_2/rt_computation/cpxs_lpx.ma | 2 +- .../basic_2/rt_computation/cpxs_lsubr.ma | 2 +- .../basic_2/rt_computation/cpxs_theq.ma | 6 +- .../rt_computation/cpxs_theq_vector.ma | 6 +- .../basic_2/rt_computation/csx_csx.ma | 10 +- .../basic_2/rt_computation/csx_csx_vector.ma | 6 +- .../basic_2/rt_computation/csx_lfpx.ma | 4 +- .../basic_2/rt_computation/lfpxs_cpxs.ma | 8 +- .../basic_2/rt_computation/lfpxs_drops.ma | 6 +- .../basic_2/rt_computation/lfpxs_lpxs.ma | 4 +- .../basic_2/rt_computation/lfsx_csx.ma | 2 +- .../basic_2/rt_computation/lfsx_drops.ma | 6 +- .../basic_2/rt_computation/lprs_cprs.ma | 8 +- .../basic_2/rt_computation/lpxs_lpx.ma | 4 +- .../basic_2/rt_computation/scpds_scpds.ma | 2 +- .../basic_2/rt_transition/cnx_drops.ma | 6 +- .../lambdadelta/basic_2/rt_transition/cpg.ma | 44 ++-- .../basic_2/rt_transition/cpg_drops.ma | 24 +- .../lambdadelta/basic_2/rt_transition/cpm.ma | 28 +-- .../basic_2/rt_transition/cpm_drops.ma | 24 +- .../lambdadelta/basic_2/rt_transition/cpr.ma | 10 +- .../basic_2/rt_transition/cpr_drops.ma | 8 +- .../lambdadelta/basic_2/rt_transition/cpx.ma | 36 +-- .../basic_2/rt_transition/cpx_drops.ma | 12 +- .../basic_2/rt_transition/cpx_lfeq.ma | 4 +- .../basic_2/rt_transition/lfpr_drops.ma | 8 +- .../basic_2/rt_transition/lfpr_lfpr.ma | 24 +- .../basic_2/rt_transition/lfpx_drops.ma | 8 +- .../basic_2/rt_transition/lfpx_lpx.ma | 2 +- .../basic_2/s_computation/fqup_drops.ma | 6 +- .../lambdadelta/basic_2/s_computation/fqus.ma | 6 +- .../basic_2/s_computation/fqus_drops.ma | 2 +- .../lambdadelta/basic_2/s_transition/fqu.ma | 12 +- .../lambdadelta/basic_2/static/aaa_drops.ma | 12 +- .../lambdadelta/basic_2/static/ffdeq_lfeq.ma | 2 +- .../lambdadelta/basic_2/static/frees.ma | 58 ++--- .../basic_2/static/frees_append.ma | 8 +- .../lambdadelta/basic_2/static/frees_drops.ma | 74 +++--- .../lambdadelta/basic_2/static/frees_fqup.ma | 20 +- .../lambdadelta/basic_2/static/frees_frees.ma | 2 +- .../lambdadelta/basic_2/static/fsle.ma | 2 +- .../lambdadelta/basic_2/static/fsle_drops.ma | 8 +- .../lambdadelta/basic_2/static/fsle_fsle.ma | 10 +- .../lambdadelta/basic_2/static/gcp_aaa.ma | 4 +- .../lambdadelta/basic_2/static/gcp_cr.ma | 10 +- .../lambdadelta/basic_2/static/lfdeq.ma | 12 +- .../lambdadelta/basic_2/static/lfdeq_drops.ma | 12 +- .../basic_2/static/lfdeq_length.ma | 4 +- .../lambdadelta/basic_2/static/lfdeq_lfeq.ma | 4 +- .../lambdadelta/basic_2/static/lfeq.ma | 36 +-- .../lambdadelta/basic_2/static/lfeq_fsle.ma | 2 +- .../lambdadelta/basic_2/static/lfxs.ma | 6 +- .../lambdadelta/basic_2/static/lfxs_drops.ma | 40 ++-- .../lambdadelta/basic_2/static/lfxs_fsle.ma | 4 +- .../lambdadelta/basic_2/static/lfxs_length.ma | 4 +- .../lambdadelta/basic_2/static/lfxs_lex.ma | 2 +- .../lambdadelta/basic_2/static/lfxs_lfxs.ma | 2 +- .../lambdadelta/basic_2/static/lsuba_drops.ma | 8 +- .../lambdadelta/basic_2/static/lsubc_drops.ma | 8 +- .../lambdadelta/basic_2/static/lsubf.ma | 30 +-- .../lambdadelta/basic_2/static/lsubf_frees.ma | 4 +- .../lambdadelta/basic_2/static/lsubf_lsubf.ma | 2 +- .../lambdadelta/basic_2/static/lsubf_lsubr.ma | 4 +- .../lambdadelta/basic_2/static/lsubr_drops.ma | 12 +- .../lambdadelta/basic_2/web/basic_2_src.tbl | 16 +- .../contribs/lambdadelta/ground_2/lib/star.ma | 22 +- .../ground_2/notation/relations/rafter_3.ma | 2 +- .../ground_2/notation/relations/rat_3.ma | 2 +- .../ground_2/notation/relations/rcoafter_3.ma | 2 +- .../notation/relations/rcolength_2.ma | 2 +- .../notation/relations/rintersection_3.ma | 2 +- .../ground_2/notation/relations/rminus_3.ma | 2 +- .../ground_2/notation/relations/runion_3.ma | 2 +- .../lambdadelta/ground_2/relocation/mr2_at.ma | 26 +-- .../ground_2/relocation/mr2_minus.ma | 24 +- .../ground_2/relocation/nstream_after.ma | 36 +-- .../ground_2/relocation/nstream_coafter.ma | 4 +- .../ground_2/relocation/nstream_istot.ma | 20 +- .../ground_2/relocation/nstream_sor.ma | 2 +- .../ground_2/relocation/rtmap_after.ma | 166 ++++++------- .../ground_2/relocation/rtmap_at.ma | 112 ++++----- .../ground_2/relocation/rtmap_coafter.ma | 218 +++++++++--------- .../ground_2/relocation/rtmap_fcla.ma | 20 +- .../ground_2/relocation/rtmap_isfin.ma | 2 +- .../ground_2/relocation/rtmap_istot.ma | 14 +- .../ground_2/relocation/rtmap_sand.ma | 32 +-- .../ground_2/relocation/rtmap_sor.ma | 206 ++++++++--------- .../ground_2/relocation/rtmap_uni.ma | 2 +- .../lambdadelta/ground_2/web/ground_2_src.tbl | 12 +- 136 files changed, 1299 insertions(+), 1326 deletions(-) rename matita/matita/contribs/lambdadelta/basic_2/notation/relations/{doteqsn_3.ma => ideqsn_3.ma} (92%) diff --git a/matita/components/syntax_extensions/.depend b/matita/components/syntax_extensions/.depend index 4b9bcffd4..8b3261bc8 100644 --- a/matita/components/syntax_extensions/.depend +++ b/matita/components/syntax_extensions/.depend @@ -1,5 +1,5 @@ +utf8Macro.cmo : utf8MacroTable.cmo utf8Macro.cmi +utf8Macro.cmx : utf8MacroTable.cmx utf8Macro.cmi utf8Macro.cmi : utf8MacroTable.cmo : utf8MacroTable.cmx : -utf8Macro.cmo : utf8MacroTable.cmo utf8Macro.cmi -utf8Macro.cmx : utf8MacroTable.cmx utf8Macro.cmi diff --git a/matita/matita/.depend.opt b/matita/matita/.depend.opt index be904cca8..5c7d0715a 100644 --- a/matita/matita/.depend.opt +++ b/matita/matita/.depend.opt @@ -1,74 +1,47 @@ -applyTransformation.cmo : applyTransformation.cmi applyTransformation.cmx : applyTransformation.cmi -buildTimeConf.cmo : +applyTransformation.cmi : buildTimeConf.cmx : -cicMathView.cmo : matitaMisc.cmi matitaGuiTypes.cmi matitaGtkMisc.cmi \ - buildTimeConf.cmx applyTransformation.cmi cicMathView.cmi cicMathView.cmx : matitaMisc.cmx matitaGuiTypes.cmi matitaGtkMisc.cmx \ buildTimeConf.cmx applyTransformation.cmx cicMathView.cmi -lablGraphviz.cmo : lablGraphviz.cmi +cicMathView.cmi : matitaGuiTypes.cmi applyTransformation.cmi lablGraphviz.cmx : lablGraphviz.cmi -matitaclean.cmo : matitaMisc.cmi matitaInit.cmi matitaclean.cmi -matitaclean.cmx : matitaMisc.cmx matitaInit.cmx matitaclean.cmi -matitac.cmo : matitaclean.cmi matitaMisc.cmi matitaInit.cmi matitaExcPp.cmi \ - matitaEngine.cmi -matitac.cmx : matitaclean.cmx matitaMisc.cmx matitaInit.cmx matitaExcPp.cmx \ - matitaEngine.cmx -matitaEngine.cmo : applyTransformation.cmi matitaEngine.cmi -matitaEngine.cmx : applyTransformation.cmx matitaEngine.cmi -matitaExcPp.cmo : matitaEngine.cmi matitaExcPp.cmi -matitaExcPp.cmx : matitaEngine.cmx matitaExcPp.cmi -matitaGtkMisc.cmo : matitaTypes.cmi buildTimeConf.cmx matitaGtkMisc.cmi -matitaGtkMisc.cmx : matitaTypes.cmx buildTimeConf.cmx matitaGtkMisc.cmi -matitaGui.cmo : matitaTypes.cmi matitaScript.cmi matitaMisc.cmi \ - matitaMathView.cmi matitaGuiTypes.cmi matitaGtkMisc.cmi matitaExcPp.cmi \ - buildTimeConf.cmx matitaGui.cmi -matitaGui.cmx : matitaTypes.cmx matitaScript.cmx matitaMisc.cmx \ - matitaMathView.cmx matitaGuiTypes.cmi matitaGtkMisc.cmx matitaExcPp.cmx \ - buildTimeConf.cmx matitaGui.cmi -matitaInit.cmo : matitaExcPp.cmi buildTimeConf.cmx matitaInit.cmi -matitaInit.cmx : matitaExcPp.cmx buildTimeConf.cmx matitaInit.cmi -matitaMathView.cmo : virtuals.cmi matitaTypes.cmi matitaMisc.cmi \ - matitaGuiTypes.cmi matitaGtkMisc.cmi matitaExcPp.cmi lablGraphviz.cmi \ - cicMathView.cmi buildTimeConf.cmx applyTransformation.cmi \ - matitaMathView.cmi -matitaMathView.cmx : virtuals.cmx matitaTypes.cmx matitaMisc.cmx \ - matitaGuiTypes.cmi matitaGtkMisc.cmx matitaExcPp.cmx lablGraphviz.cmx \ - cicMathView.cmx buildTimeConf.cmx applyTransformation.cmx \ - matitaMathView.cmi -matitaMisc.cmo : matitaGuiTypes.cmi buildTimeConf.cmx matitaMisc.cmi -matitaMisc.cmx : matitaGuiTypes.cmi buildTimeConf.cmx matitaMisc.cmi -matita.cmo : predefined_virtuals.cmi matitaScript.cmi matitaMisc.cmi \ - matitaInit.cmi matitaGui.cmi matitaGtkMisc.cmi buildTimeConf.cmx \ - applyTransformation.cmi +lablGraphviz.cmi : matita.cmx : predefined_virtuals.cmx matitaScript.cmx matitaMisc.cmx \ matitaInit.cmx matitaGui.cmx matitaGtkMisc.cmx buildTimeConf.cmx \ applyTransformation.cmx -matitaScript.cmo : virtuals.cmi matitaTypes.cmi matitaMisc.cmi \ - matitaMathView.cmi matitaGtkMisc.cmi matitaEngine.cmi cicMathView.cmi \ - buildTimeConf.cmx matitaScript.cmi -matitaScript.cmx : virtuals.cmx matitaTypes.cmx matitaMisc.cmx \ - matitaMathView.cmx matitaGtkMisc.cmx matitaEngine.cmx cicMathView.cmx \ - buildTimeConf.cmx matitaScript.cmi -matitaTypes.cmo : matitaTypes.cmi -matitaTypes.cmx : matitaTypes.cmi -predefined_virtuals.cmo : virtuals.cmi predefined_virtuals.cmi -predefined_virtuals.cmx : virtuals.cmx predefined_virtuals.cmi -virtuals.cmo : virtuals.cmi -virtuals.cmx : virtuals.cmi -applyTransformation.cmi : -cicMathView.cmi : matitaGuiTypes.cmi applyTransformation.cmi -lablGraphviz.cmi : -matitaclean.cmi : +matitaEngine.cmx : applyTransformation.cmx matitaEngine.cmi matitaEngine.cmi : applyTransformation.cmi +matitaExcPp.cmx : matitaEngine.cmx matitaExcPp.cmi matitaExcPp.cmi : -matitaGtkMisc.cmi : +matitaGeneratedGui.cmx : +matitaGtkMisc.cmx : matitaTypes.cmx matitaGeneratedGui.cmx buildTimeConf.cmx \ + matitaGtkMisc.cmi +matitaGtkMisc.cmi : matitaGeneratedGui.cmx +matitaGui.cmx : matitaTypes.cmx matitaScript.cmx matitaMisc.cmx \ + matitaMathView.cmx matitaGuiTypes.cmi matitaGtkMisc.cmx \ + matitaGeneratedGui.cmx matitaExcPp.cmx buildTimeConf.cmx matitaGui.cmi matitaGui.cmi : matitaGuiTypes.cmi -matitaGuiTypes.cmi : applyTransformation.cmi +matitaGuiTypes.cmi : matitaGeneratedGui.cmx applyTransformation.cmi +matitaInit.cmx : matitaExcPp.cmx buildTimeConf.cmx matitaInit.cmi matitaInit.cmi : +matitaMathView.cmx : virtuals.cmx matitaTypes.cmx matitaMisc.cmx \ + matitaGuiTypes.cmi matitaGtkMisc.cmx matitaGeneratedGui.cmx \ + matitaExcPp.cmx lablGraphviz.cmx cicMathView.cmx buildTimeConf.cmx \ + applyTransformation.cmx matitaMathView.cmi matitaMathView.cmi : matitaTypes.cmi matitaGuiTypes.cmi +matitaMisc.cmx : matitaGuiTypes.cmi buildTimeConf.cmx matitaMisc.cmi matitaMisc.cmi : matitaGuiTypes.cmi +matitaScript.cmx : virtuals.cmx matitaTypes.cmx matitaMisc.cmx \ + matitaMathView.cmx matitaGtkMisc.cmx matitaEngine.cmx cicMathView.cmx \ + buildTimeConf.cmx matitaScript.cmi matitaScript.cmi : +matitaTypes.cmx : matitaTypes.cmi matitaTypes.cmi : +matitac.cmx : matitaclean.cmx matitaMisc.cmx matitaInit.cmx matitaExcPp.cmx \ + matitaEngine.cmx +matitaclean.cmx : matitaMisc.cmx matitaInit.cmx matitaclean.cmi +matitaclean.cmi : +predefined_virtuals.cmx : virtuals.cmx predefined_virtuals.cmi predefined_virtuals.cmi : +virtuals.cmx : virtuals.cmi virtuals.cmi : 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 0bbe88b88..7ebb0a345 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 @@ -26,8 +26,8 @@ definition Omega2: term → term ≝ λW. +ⓓⓝW.(Delta W).ⓐ#0.#0. (* Basic properties *********************************************************) -lemma Delta_lifts: ∀W1,W2,f. ⬆*[f] W1 ≡ W2 → - ⬆*[f] (Delta W1) ≡ (Delta W2). +lemma Delta_lifts: ∀W1,W2,f. ⬆*[f] W1 ≘ W2 → + ⬆*[f] (Delta W1) ≘ (Delta W2). /4 width=1 by lifts_lref, lifts_bind, lifts_flat/ qed. (* Main properties **********************************************************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv.ma index aaacee45f..9fe022334 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/lsubsv.ma @@ -116,8 +116,8 @@ qed-. (* Note: the constant 0 cannot be generalized *) lemma lsubsv_drop_O1_conf: ∀h,o,G,L1,L2. G ⊢ L1 ⫃¡[h, o] L2 → - ∀K1,b,k. ⬇[b, 0, k] L1 ≡ K1 → - ∃∃K2. G ⊢ K1 ⫃¡[h, o] K2 & ⬇[b, 0, k] L2 ≡ K2. + ∀K1,b,k. ⬇[b, 0, k] L1 ≘ K1 → + ∃∃K2. G ⊢ K1 ⫃¡[h, o] K2 & ⬇[b, 0, k] L2 ≘ K2. #h #o #G #L1 #L2 #H elim H -L1 -L2 [ /2 width=3 by ex2_intro/ | #I #L1 #L2 #V #_ #IHL12 #K1 #b #k #H @@ -139,8 +139,8 @@ qed-. (* Note: the constant 0 cannot be generalized *) lemma lsubsv_drop_O1_trans: ∀h,o,G,L1,L2. G ⊢ L1 ⫃¡[h, o] L2 → - ∀K2,b, k. ⬇[b, 0, k] L2 ≡ K2 → - ∃∃K1. G ⊢ K1 ⫃¡[h, o] K2 & ⬇[b, 0, k] L1 ≡ K1. + ∀K2,b, k. ⬇[b, 0, k] L2 ≘ K2 → + ∃∃K1. G ⊢ K1 ⫃¡[h, o] K2 & ⬇[b, 0, k] L1 ≘ K1. #h #o #G #L1 #L2 #H elim H -L1 -L2 [ /2 width=3 by ex2_intro/ | #I #L1 #L2 #V #_ #IHL12 #K2 #b #k #H diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv.ma index 4889098c1..a76beb80f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv.ma @@ -20,7 +20,7 @@ include "basic_2/computation/scpds.ma". (* activate genv *) inductive snv (h) (o): relation3 genv lenv term ≝ | snv_sort: ∀G,L,s. snv h o G L (⋆s) -| snv_lref: ∀I,G,L,K,V,i. ⬇[i] L ≡ K.ⓑ{I}V → snv h o G K V → snv h o G L (#i) +| snv_lref: ∀I,G,L,K,V,i. ⬇[i] L ≘ K.ⓑ{I}V → snv h o G K V → snv h o G L (#i) | snv_bind: ∀a,I,G,L,V,T. snv h o G L V → snv h o G (L.ⓑ{I}V) T → snv h o G L (ⓑ{a,I}V.T) | snv_appl: ∀a,G,L,V,W0,T,U0,d. snv h o G L V → snv h o G L T → ⦃G, L⦄ ⊢ V •*➡*[h, o, 1] W0 → ⦃G, L⦄ ⊢ T •*➡*[h, o, d] ⓛ{a}W0.U0 → snv h o G L (ⓐV.T) @@ -34,7 +34,7 @@ interpretation "stratified native validity (term)" (* Basic inversion lemmas ***************************************************) fact snv_inv_lref_aux: ∀h,o,G,L,X. ⦃G, L⦄ ⊢ X ¡[h, o] → ∀i. X = #i → - ∃∃I,K,V. ⬇[i] L ≡ K.ⓑ{I}V & ⦃G, K⦄ ⊢ V ¡[h, o]. + ∃∃I,K,V. ⬇[i] L ≘ K.ⓑ{I}V & ⦃G, K⦄ ⊢ V ¡[h, o]. #h #o #G #L #X * -G -L -X [ #G #L #s #i #H destruct | #I #G #L #K #V #i0 #HLK #HV #i #H destruct /2 width=5 by ex2_3_intro/ @@ -45,7 +45,7 @@ fact snv_inv_lref_aux: ∀h,o,G,L,X. ⦃G, L⦄ ⊢ X ¡[h, o] → ∀i. X = #i qed-. lemma snv_inv_lref: ∀h,o,G,L,i. ⦃G, L⦄ ⊢ #i ¡[h, o] → - ∃∃I,K,V. ⬇[i] L ≡ K.ⓑ{I}V & ⦃G, K⦄ ⊢ V ¡[h, o]. + ∃∃I,K,V. ⬇[i] L ≘ K.ⓑ{I}V & ⦃G, K⦄ ⊢ V ¡[h, o]. /2 width=3 by snv_inv_lref_aux/ qed-. fact snv_inv_gref_aux: ∀h,o,G,L,X. ⦃G, L⦄ ⊢ X ¡[h, o] → ∀p. X = §p → ⊥. diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_lift.ma index 98d617600..702ca5ab9 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/snv_lift.ma @@ -20,8 +20,8 @@ include "basic_2/dynamic/snv.ma". (* Relocation properties ****************************************************) -lemma snv_lift: ∀h,o,G,K,T. ⦃G, K⦄ ⊢ T ¡[h, o] → ∀L,b,l,k. ⬇[b, l, k] L ≡ K → - ∀U. ⬆[l, k] T ≡ U → ⦃G, L⦄ ⊢ U ¡[h, o]. +lemma snv_lift: ∀h,o,G,K,T. ⦃G, K⦄ ⊢ T ¡[h, o] → ∀L,b,l,k. ⬇[b, l, k] L ≘ K → + ∀U. ⬆[l, k] T ≘ U → ⦃G, L⦄ ⊢ U ¡[h, o]. #h #o #G #K #T #H elim H -G -K -T [ #G #K #s #L #b #l #k #_ #X #H >(lift_inv_sort1 … H) -X -K -l -k // @@ -48,8 +48,8 @@ lemma snv_lift: ∀h,o,G,K,T. ⦃G, K⦄ ⊢ T ¡[h, o] → ∀L,b,l,k. ⬇[b, l ] qed. -lemma snv_inv_lift: ∀h,o,G,L,U. ⦃G, L⦄ ⊢ U ¡[h, o] → ∀K,b,l,k. ⬇[b, l, k] L ≡ K → - ∀T. ⬆[l, k] T ≡ U → ⦃G, K⦄ ⊢ T ¡[h, o]. +lemma snv_inv_lift: ∀h,o,G,L,U. ⦃G, L⦄ ⊢ U ¡[h, o] → ∀K,b,l,k. ⬇[b, l, k] L ≘ K → + ∀T. ⬆[l, k] T ≘ U → ⦃G, K⦄ ⊢ T ¡[h, o]. #h #o #G #L #U #H elim H -G -L -U [ #G #L #s #K #b #l #k #_ #X #H >(lift_inv_sort2 … H) -X -L -l -k // diff --git a/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs.ma b/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs.ma index cec1db1bc..75964c615 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs.ma @@ -18,7 +18,7 @@ include "basic_2/conversion/cpc.ma". (* CONTEXT-SENSITIVE PARALLEL EQUIVALENCE ON TERMS **************************) definition cpcs: relation4 genv lenv term term ≝ - λG. LTC … (cpc G). + λG. CTC … (cpc G). interpretation "context-sensitive parallel equivalence (term)" 'PConvStar G L T1 T2 = (cpcs G L T1 T2). diff --git a/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs_cpcs.ma b/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs_cpcs.ma index 6e098196b..7b9645afa 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs_cpcs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/equivalence/cpcs_cpcs.ma @@ -59,8 +59,8 @@ elim (cprs_inv_abst1 … H2) -H2 #W0 #T0 #_ #_ #H destruct qed-. (* Basic_1: was: pc3_gen_lift *) -lemma cpcs_inv_lift: ∀G,L,K,b,l,k. ⬇[b, l, k] L ≡ K → - ∀T1,U1. ⬆[l, k] T1 ≡ U1 → ∀T2,U2. ⬆[l, k] T2 ≡ U2 → +lemma cpcs_inv_lift: ∀G,L,K,b,l,k. ⬇[b, l, k] L ≘ K → + ∀T1,U1. ⬆[l, k] T1 ≘ U1 → ∀T2,U2. ⬆[l, k] T2 ≘ U2 → ⦃G, L⦄ ⊢ U1 ⬌* U2 → ⦃G, K⦄ ⊢ T1 ⬌* T2. #G #L #K #b #l #k #HLK #T1 #U1 #HTU1 #T2 #U2 #HTU2 #HU12 elim (cpcs_inv_cprs … HU12) -HU12 #U #HU1 #HU2 @@ -150,8 +150,8 @@ lemma lsubr_cpcs_trans: ∀G,L1,T1,T2. ⦃G, L1⦄ ⊢ T1 ⬌* T2 → qed-. (* Basic_1: was: pc3_lift *) -lemma cpcs_lift: ∀G,L,K,b,l,k. ⬇[b, l, k] L ≡ K → - ∀T1,U1. ⬆[l, k] T1 ≡ U1 → ∀T2,U2. ⬆[l, k] T2 ≡ U2 → +lemma cpcs_lift: ∀G,L,K,b,l,k. ⬇[b, l, k] L ≘ K → + ∀T1,U1. ⬆[l, k] T1 ≘ U1 → ∀T2,U2. ⬆[l, k] T2 ≘ U2 → ⦃G, K⦄ ⊢ T1 ⬌* T2 → ⦃G, L⦄ ⊢ U1 ⬌* U2. #G #L #K #b #l #k #HLK #T1 #U1 #HTU1 #T2 #U2 #HTU2 #HT12 elim (cpcs_inv_cprs … HT12) -HT12 #T #HT1 #HT2 diff --git a/matita/matita/contribs/lambdadelta/basic_2/i_static/tc_lfxs.ma b/matita/matita/contribs/lambdadelta/basic_2/i_static/tc_lfxs.ma index 90b0de1eb..5fbe3afe2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/i_static/tc_lfxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/i_static/tc_lfxs.ma @@ -18,7 +18,7 @@ include "basic_2/static/lfxs.ma". (* ITERATED EXTENSION ON REFERRED ENTRIES OF A CONTEXT-SENSITIVE REALTION ***) -definition tc_lfxs (R): term → relation lenv ≝ LTC … (lfxs R). +definition tc_lfxs (R): term → relation lenv ≝ CTC … (lfxs R). interpretation "iterated extension on referred entries (local environment)" 'RelationStarStar R T L1 L2 = (tc_lfxs R T L1 L2). diff --git a/matita/matita/contribs/lambdadelta/basic_2/i_static/tc_lfxs_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/i_static/tc_lfxs_drops.ma index 2122b0533..6d24a75c7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/i_static/tc_lfxs_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/i_static/tc_lfxs_drops.ma @@ -19,23 +19,23 @@ include "basic_2/i_static/tc_lfxs.ma". (* ITERATED EXTENSION ON REFERRED ENTRIES OF A CONTEXT-SENSITIVE REALTION ***) definition tc_dedropable_sn: predicate (relation3 lenv term term) ≝ - λR. ∀b,f,L1,K1. ⬇*[b, f] L1 ≡ K1 → - ∀K2,T. K1 ⪤**[R, T] K2 → ∀U. ⬆*[f] T ≡ U → - ∃∃L2. L1 ⪤**[R, U] L2 & ⬇*[b, f] L2 ≡ K2 & L1 ≐[f] L2. + λR. ∀b,f,L1,K1. ⬇*[b, f] L1 ≘ K1 → + ∀K2,T. K1 ⪤**[R, T] K2 → ∀U. ⬆*[f] T ≘ U → + ∃∃L2. L1 ⪤**[R, U] L2 & ⬇*[b, f] L2 ≘ K2 & L1 ≡[f] L2. definition tc_dropable_sn: predicate (relation3 lenv term term) ≝ - λ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. + λ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_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 → - ∃∃K1. ⬇*[b, f] L1 ≡ K1 & K1 ⪤**[R, T] K2. + ∀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 *******************) -lemma dedropable_sn_LTC: ∀R. dedropable_sn R → tc_dedropable_sn R. +lemma dedropable_sn_CTC: ∀R. dedropable_sn R → tc_dedropable_sn R. #R #HR #b #f #L1 #K1 #HLK1 #K2 #T #H elim H -K2 [ #K2 #HK12 #U #HTU elim (HR … HLK1 … HK12 … HTU) -K1 -T -HR /3 width=4 by ex3_intro, inj/ @@ -48,7 +48,7 @@ qed-. (* Inversion lemmas with generic slicing for local environments *************) -lemma dropable_sn_LTC: ∀R. dropable_sn R → tc_dropable_sn R. +lemma dropable_sn_CTC: ∀R. dropable_sn R → tc_dropable_sn R. #R #HR #b #f #L1 #K1 #HLK1 #Hf #L2 #U #H elim H -L2 [ #L2 #HL12 #T #HTU elim (HR … HLK1 … HL12 … HTU) -L1 -U -HR /3 width=3 by inj, ex2_intro/ @@ -59,7 +59,7 @@ lemma dropable_sn_LTC: ∀R. dropable_sn R → tc_dropable_sn R. ] qed-. -lemma dropable_dx_LTC: ∀R. dropable_dx R → tc_dropable_dx R. +lemma dropable_dx_CTC: ∀R. dropable_dx R → tc_dropable_dx R. #R #HR #L1 #L2 #U #H elim H -L2 [ #L2 #HL12 #b #f #K2 #HLK2 #Hf #T #HTU elim (HR … HL12 … HLK2 … HTU) -L2 -U -HR diff --git a/matita/matita/contribs/lambdadelta/basic_2/i_static/tc_lfxs_fqup.ma b/matita/matita/contribs/lambdadelta/basic_2/i_static/tc_lfxs_fqup.ma index d802f6e1a..8eaf23735 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/i_static/tc_lfxs_fqup.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/i_static/tc_lfxs_fqup.ma @@ -25,7 +25,7 @@ lemma tc_lfxs_refl: ∀R. c_reflexive … R → (* Basic_2A1: uses: TC_lpx_sn_pair TC_lpx_sn_pair_refl *) lemma tc_lfxs_pair_refl: ∀R. c_reflexive … R → - ∀L,V1,V2. LTC … 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 tc_lfxs_step_dx, lfxs_pair_refl, inj/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/i_static/tc_lfxs_lex.ma b/matita/matita/contribs/lambdadelta/basic_2/i_static/tc_lfxs_lex.ma index cb32e58b0..918191c8f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/i_static/tc_lfxs_lex.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/i_static/tc_lfxs_lex.ma @@ -22,13 +22,13 @@ include "basic_2/i_static/tc_lfxs_fqup.ma". (* Properties with generic extension of a context sensitive relation ********) lemma tc_lfxs_lex: ∀R. c_reflexive … R → - ∀L1,L2,T. L1 ⪤[LTC … R] L2 → L1 ⪤**[R, T] L2. + ∀L1,L2,T. L1 ⪤[CTC … R] L2 → L1 ⪤**[R, T] L2. #R #HR #L1 #L2 #T * /5 width=7 by tc_lfxs_tc, lexs_inv_tc_dx, lexs_co, ext2_inv_tc, ext2_refl/ qed. lemma tc_lfxs_lex_lfeq: ∀R. c_reflexive … R → - ∀L1,L. L1 ⪤[LTC … R] L → ∀L2,T. L ≐[T] L2 → + ∀L1,L. L1 ⪤[CTC … R] L → ∀L2,T. L ≡[T] L2 → L1 ⪤**[R, T] L2. /3 width=3 by tc_lfxs_lex, tc_lfxs_step_dx, lfeq_fwd_lfxs/ qed. @@ -40,7 +40,7 @@ lemma tc_lfxs_inv_lex_lfeq: ∀R. c_reflexive … R → s_rs_transitive … R (λ_.lex R) → lfeq_transitive R → ∀L1,L2,T. L1 ⪤**[R, T] L2 → - ∃∃L. L1 ⪤[LTC … R] L & L ≐[T] L2. + ∃∃L. L1 ⪤[CTC … R] L & L ≡[T] L2. #R #H1R #H2R #H3R #H4R #L1 #L2 #T #H lapply (s_rs_transitive_lex_inv_isid … H3R) -H3R #H3R @(tc_lfxs_ind_sn … H1R … H) -H -L2 @@ -52,7 +52,7 @@ lapply (s_rs_transitive_lex_inv_isid … H3R) -H3R #H3R lapply (lexs_sdj … HL0 f1 ?) /2 width=1 by sdj_isid_sn/ #H elim (frees_lexs_conf … Hf1 … H) // -H2R -H #f2 #Hf2 #Hf21 lapply (sle_lexs_trans … HL02 … Hf21) -f1 // #HL02 - lapply (lexs_co ?? cfull (LTC … (cext2 R)) … HL1) -HL1 /2 width=1 by ext2_inv_tc/ #HL1 + lapply (lexs_co ?? cfull (CTC … (cext2 R)) … HL1) -HL1 /2 width=1 by ext2_inv_tc/ #HL1 /8 width=11 by lexs_inv_tc_dx, lexs_tc_dx, lexs_co, ext2_tc, ext2_refl, step, ex2_intro/ (**) (* full auto too slow *) ] qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/freestar_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/freestar_3.ma index fe106086e..02c33853c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/freestar_3.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/freestar_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 @{ 'FreeStar $L $T $f }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/doteqsn_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/ideqsn_3.ma similarity index 92% rename from matita/matita/contribs/lambdadelta/basic_2/notation/relations/doteqsn_3.ma rename to matita/matita/contribs/lambdadelta/basic_2/notation/relations/ideqsn_3.ma index 96060d509..3ba302519 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/doteqsn_3.ma +++ b/matita/matita/contribs/lambdadelta/basic_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 @{ 'DotEqSn $f $L1 $L2 }. + for @{ 'IdEqSn $f $L1 $L2 }. diff --git a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdropstar_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdropstar_3.ma index 32b9c8445..0e0a3273d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdropstar_3.ma +++ b/matita/matita/contribs/lambdadelta/basic_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/basic_2/notation/relations/rdropstar_4.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdropstar_4.ma index e60d5916f..ce4ce12b9 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rdropstar_4.ma +++ b/matita/matita/contribs/lambdadelta/basic_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/basic_2/notation/relations/rliftstar_3.ma b/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rliftstar_3.ma index fa19e933e..26d0262de 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/notation/relations/rliftstar_3.ma +++ b/matita/matita/contribs/lambdadelta/basic_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/basic_2/relocation/drops.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/drops.ma index 57bf1bfe5..fdcf1a70f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/drops.ma @@ -28,7 +28,7 @@ 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_skip: ∀f,I1,I2,L1,L2. - drops b f L1 L2 → ⬆*[f] I2 ≡ I1 → + drops b f L1 L2 → ⬆*[f] I2 ≘ I1 → drops b (↑f) (L1.ⓘ{I1}) (L2.ⓘ{I2}) . @@ -39,68 +39,68 @@ interpretation "generic slicing (local environment)" 'RDropStar b f L1 L2 = (drops b f L1 L2). definition d_liftable1: predicate (relation2 lenv term) ≝ - λR. ∀K,T. R K T → ∀b,f,L. ⬇*[b, f] L ≡ K → - ∀U. ⬆*[f] T ≡ U → R L U. + λR. ∀K,T. R K T → ∀b,f,L. ⬇*[b, f] L ≘ K → + ∀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⦄ → - ∀U. ⬆*[f] T ≡ U → R L U. + λ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) ≝ - λR. ∀L,U. R L U → ∀b,f,K. ⬇*[b, f] L ≡ K → - ∀T. ⬆*[f] T ≡ U → R K T. + λR. ∀L,U. R L U → ∀b,f,K. ⬇*[b, f] L ≘ K → + ∀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⦄ → - ∀T. ⬆*[f] T ≡ U → R K T. + λ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. predicate (lenv → relation C) ≝ - λC,S,R. ∀K,T1,T2. R K T1 T2 → ∀b,f,L. ⬇*[b, f] L ≡ K → + λC,S,R. ∀K,T1,T2. R K T1 T2 → ∀b,f,L. ⬇*[b, f] L ≘ K → ∀U1. S f T1 U1 → ∃∃U2. S f T2 U2 & R L U1 U2. definition d_deliftable2_sn: ∀C:Type[0]. ∀S:rtmap → relation C. predicate (lenv → relation C) ≝ - λC,S,R. ∀L,U1,U2. R L U1 U2 → ∀b,f,K. ⬇*[b, f] L ≡ K → + λC,S,R. ∀L,U1,U2. R L U1 U2 → ∀b,f,K. ⬇*[b, f] L ≘ K → ∀T1. S f T1 U1 → ∃∃T2. S f T2 U2 & R K T1 T2. definition d_liftable2_bi: ∀C:Type[0]. ∀S:rtmap → relation C. predicate (lenv → relation C) ≝ - λC,S,R. ∀K,T1,T2. R K T1 T2 → ∀b,f,L. ⬇*[b, f] L ≡ K → + λC,S,R. ∀K,T1,T2. R K T1 T2 → ∀b,f,L. ⬇*[b, f] L ≘ K → ∀U1. S f T1 U1 → ∀U2. S f T2 U2 → R L U1 U2. definition d_deliftable2_bi: ∀C:Type[0]. ∀S:rtmap → relation C. predicate (lenv → relation C) ≝ - λC,S,R. ∀L,U1,U2. R L U1 U2 → ∀b,f,K. ⬇*[b, f] L ≡ K → + λC,S,R. ∀L,U1,U2. R L U1 U2 → ∀b,f,K. ⬇*[b, f] L ≘ K → ∀T1. S f T1 U1 → ∀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⦄ → - ∀f2,L2. R f2 L1 L2 → ∀f1. f ~⊚ f1 ≡ f2 → - ∃∃K2. R f1 K1 K2 & ⬇*[b, f] L2 ≡ K2. + λ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⦄ → - ∀f1. f ~⊚ f1 ≡ f2 → - ∃∃K1. ⬇*[b, f] L1 ≡ K1 & R f1 K1 K2. + ∀b,f,K2. ⬇*[b, f] L2 ≘ K2 → 𝐔⦃f⦄ → + ∀f1. f ~⊚ f1 ≘ f2 → + ∃∃K1. ⬇*[b, f] L1 ≘ K1 & R f1 K1 K2. definition co_dedropable_sn: predicate (rtmap → relation lenv) ≝ - λR. ∀b,f,L1,K1. ⬇*[b, f] L1 ≡ K1 → ∀f1,K2. R f1 K1 K2 → - ∀f2. f ~⊚ f1 ≡ f2 → - ∃∃L2. R f2 L1 L2 & ⬇*[b, f] L2 ≡ K2 & L1 ≐[f] L2. + λR. ∀b,f,L1,K1. ⬇*[b, f] L1 ≘ K1 → ∀f1,K2. R f1 K1 K2 → + ∀f2. f ~⊚ f1 ≘ f2 → + ∃∃L2. R f2 L1 L2 & ⬇*[b, f] L2 ≘ K2 & L1 ≡[f] L2. (* Basic properties *********************************************************) -lemma drops_atom_F: ∀f. ⬇*[Ⓕ, f] ⋆ ≡ ⋆. +lemma drops_atom_F: ∀f. ⬇*[Ⓕ, f] ⋆ ≘ ⋆. #f @drops_atom #H destruct qed. -lemma drops_eq_repl_back: ∀b,L1,L2. eq_repl_back … (λf. ⬇*[b, f] L1 ≡ L2). +lemma drops_eq_repl_back: ∀b,L1,L2. eq_repl_back … (λf. ⬇*[b, f] L1 ≘ L2). #b #L1 #L2 #f1 #H elim H -f1 -L1 -L2 [ /4 width=3 by drops_atom, isid_eq_repl_back/ | #f1 #I #L1 #L2 #_ #IH #f2 #H elim (eq_inv_nx … H) -H @@ -110,23 +110,23 @@ lemma drops_eq_repl_back: ∀b,L1,L2. eq_repl_back … (λf. ⬇*[b, f] L1 ≡ L ] qed-. -lemma drops_eq_repl_fwd: ∀b,L1,L2. eq_repl_fwd … (λf. ⬇*[b, f] L1 ≡ L2). +lemma drops_eq_repl_fwd: ∀b,L1,L2. eq_repl_fwd … (λf. ⬇*[b, f] L1 ≘ L2). #b #L1 #L2 @eq_repl_sym /2 width=3 by drops_eq_repl_back/ (**) (* full auto fails *) qed-. (* Basic_2A1: includes: drop_FT *) -lemma drops_TF: ∀f,L1,L2. ⬇*[Ⓣ, f] L1 ≡ L2 → ⬇*[Ⓕ, f] L1 ≡ L2. +lemma drops_TF: ∀f,L1,L2. ⬇*[Ⓣ, f] L1 ≘ L2 → ⬇*[Ⓕ, f] L1 ≘ L2. #f #L1 #L2 #H elim H -f -L1 -L2 /3 width=1 by drops_atom, drops_drop, drops_skip/ qed. (* Basic_2A1: includes: drop_gen *) -lemma drops_gen: ∀b,f,L1,L2. ⬇*[Ⓣ, f] L1 ≡ L2 → ⬇*[b, f] L1 ≡ L2. +lemma drops_gen: ∀b,f,L1,L2. ⬇*[Ⓣ, f] L1 ≘ L2 → ⬇*[b, f] L1 ≘ L2. * /2 width=1 by drops_TF/ qed-. (* Basic_2A1: includes: drop_T *) -lemma drops_F: ∀b,f,L1,L2. ⬇*[b, f] L1 ≡ L2 → ⬇*[Ⓕ, f] L1 ≡ L2. +lemma drops_F: ∀b,f,L1,L2. ⬇*[b, f] L1 ≘ L2 → ⬇*[Ⓕ, f] L1 ≘ L2. * /2 width=1 by drops_TF/ qed-. @@ -146,7 +146,7 @@ qed-. (* Basic inversion lemmas ***************************************************) -fact drops_inv_atom1_aux: ∀b,f,X,Y. ⬇*[b, f] X ≡ Y → X = ⋆ → +fact drops_inv_atom1_aux: ∀b,f,X,Y. ⬇*[b, f] X ≘ Y → X = ⋆ → Y = ⋆ ∧ (b = Ⓣ → 𝐈⦃f⦄). #b #f #X #Y * -f -X -Y [ /3 width=1 by conj/ @@ -157,11 +157,11 @@ 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 → - ⬇*[b, g] K ≡ Y. +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 | #f #I #L1 #L2 #HL #g #J #K #H1 #H2 <(injective_next … H2) -g destruct // @@ -171,11 +171,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) @@ -186,12 +186,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) @@ -202,14 +202,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 @@ -219,14 +219,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/ @@ -236,15 +236,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/ @@ -252,14 +252,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/ @@ -267,9 +267,9 @@ qed-. (* Inversion lemmas with test for uniformity ********************************) -lemma drops_inv_isuni: ∀f,L1,L2. ⬇*[Ⓣ, f] L1 ≡ L2 → 𝐔⦃f⦄ → +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. + ∃∃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/ @@ -278,9 +278,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 → +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. + ∃∃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 @@ -290,9 +290,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} → +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. + ∃∃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 * @@ -302,16 +302,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 @@ -324,16 +324,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-. @@ -341,13 +341,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. +lemma drops_inv_atom2: ∀b,L,f. ⬇*[b, f] L ≘ ⋆ → + ∃∃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 @@ -358,8 +358,8 @@ 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}. +lemma drops_inv_succ: ∀L1,L2,i. ⬇*[⫯i] L1 ≘ L2 → + ∃∃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/ @@ -368,7 +368,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/ @@ -376,8 +376,8 @@ lemma drops_F_uni: ∀L,i. ⬇*[Ⓕ, 𝐔❴i❵] L ≡ ⋆ ∨ ∃∃I,K. ⬇*[ qed-. (* Basic_2A1: includes: drop_split *) -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. +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 #H lapply (H0f H) -b @@ -396,8 +396,8 @@ 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⦄ → - ∃∃L2. ⬇*[Ⓕ, f2] L ≡ L2 & ⬇*[Ⓕ, f] L1 ≡ L2. +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 | #f1 #I #L1 #L #HL1 #IH #f2 #f #Hf #Hf2 elim (after_inv_nxx … Hf) -Hf [2,3: // ] @@ -416,13 +416,13 @@ qed-. (* Properties with application **********************************************) -lemma drops_tls_at: ∀f,i1,i2. @⦃i1,f⦄ ≡ i2 → - ∀b,L1,L2. ⬇*[b,⫱*[i2]f] L1 ≡ L2 → - ⬇*[b,↑⫱*[⫯i2]f] L1 ≡ L2. +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/basic_2/relocation/drops_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_drops.ma index 68eddde13..06f1c0655 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_drops.ma @@ -20,9 +20,9 @@ include "basic_2/relocation/drops_weight.ma". (* Main properties **********************************************************) (* Basic_2A1: includes: drop_conf_ge drop_conf_be drop_conf_le *) -theorem drops_conf: ∀b1,f1,L1,L. ⬇*[b1, f1] L1 ≡ L → - ∀b2,f,L2. ⬇*[b2, f] L1 ≡ L2 → - ∀f2. f1 ⊚ f2 ≡ f → ⬇*[b2, f2] L ≡ L2. +theorem drops_conf: ∀b1,f1,L1,L. ⬇*[b1, f1] L1 ≘ L → + ∀b2,f,L2. ⬇*[b2, f] L1 ≘ L2 → + ∀f2. f1 ⊚ f2 ≘ f → ⬇*[b2, f2] L ≘ L2. #b1 #f1 #L1 #L #H elim H -f1 -L1 -L [ #f1 #_ #b2 #f #L2 #HL2 #f2 #Hf12 elim (drops_inv_atom1 … HL2) -b1 -HL2 #H #Hf destruct @drops_atom @@ -41,9 +41,9 @@ qed-. (* Basic_2A1: includes: drop_trans_ge drop_trans_le drop_trans_ge_comm drops_drop_trans *) -theorem drops_trans: ∀b1,f1,L1,L. ⬇*[b1, f1] L1 ≡ L → - ∀b2,f2,L2. ⬇*[b2, f2] L ≡ L2 → - ∀f. f1 ⊚ f2 ≡ f → ⬇*[b1∧b2, f] L1 ≡ L2. +theorem drops_trans: ∀b1,f1,L1,L. ⬇*[b1, f1] L1 ≘ L → + ∀b2,f2,L2. ⬇*[b2, f2] L ≘ L2 → + ∀f. f1 ⊚ f2 ≘ f → ⬇*[b1∧b2, f] L1 ≘ L2. #b1 #f1 #L1 #L #H elim H -f1 -L1 -L [ #f1 #Hf1 #b2 #f2 #L2 #HL2 #f #Hf elim (drops_inv_atom1 … HL2) -HL2 #H #Hf2 destruct @drops_atom #H elim (andb_inv_true_dx … H) -H @@ -59,7 +59,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 → +theorem drops_conf_div: ∀f1,L,K. ⬇*[Ⓣ,f1] L ≘ K → ∀f2. ⬇*[Ⓣ,f2] L ≘ K → 𝐔⦃f1⦄ → 𝐔⦃f2⦄ → f1 ≗ f2. #f1 #L #K #H elim H -f1 -L -K [ #f1 #Hf1 #f2 #Hf2 elim (drops_inv_atom1 … Hf2) -Hf2 @@ -85,28 +85,28 @@ qed-. (* Advanced properties ******************************************************) (* Basic_2A1: includes: drop_mono *) -lemma drops_mono: ∀b1,f,L,L1. ⬇*[b1, f] L ≡ L1 → - ∀b2,L2. ⬇*[b2, f] L ≡ L2 → L1 = L2. +lemma drops_mono: ∀b1,f,L,L1. ⬇*[b1, f] L ≘ L1 → + ∀b2,L2. ⬇*[b2, f] L ≘ L2 → L1 = L2. #b1 #f #L #L1 lapply (after_isid_dx 𝐈𝐝 … f) /3 width=8 by drops_conf, drops_fwd_isid/ 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} → - ∀f2. f1 ⊚ ↑f2 ≡ f → +lemma drops_conf_skip1: ∀b2,f,L,L2. ⬇*[b2, f] L ≘ L2 → + ∀b1,f1,I1,K1. ⬇*[b1, f1] L ≘ K1.ⓘ{I1} → + ∀f2. f1 ⊚ ↑f2 ≘ f → ∃∃I2,K2. L2 = K2.ⓘ{I2} & - ⬇*[b2, f2] K1 ≡ K2 & ⬆*[f2] I2 ≡ I1. + ⬇*[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/ 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} → - ∀f. f1 ⊚ f2 ≡ ↑f → +lemma drops_trans_skip2: ∀b1,f1,L1,L. ⬇*[b1, f1] L1 ≘ L → + ∀b2,f2,I2,K2. ⬇*[b2, f2] L ≘ K2.ⓘ{I2} → + ∀f. f1 ⊚ f2 ≘ ↑f → ∃∃I1,K1. L1 = K1.ⓘ{I1} & - ⬇*[b1∧b2, f] K1 ≡ K2 & ⬆*[f] I2 ≡ 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 #H elim (drops_inv_skip2 … H) -H /2 width=5 by ex3_2_intro/ @@ -114,7 +114,7 @@ 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] 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 @@ -126,7 +126,7 @@ lapply (drops_mono … H0 … Hf2) -L #H destruct /2 width=1 by conj/ 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 diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_length.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_length.ma index 10cc0f579..7543a5559 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_length.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_length.ma @@ -20,13 +20,13 @@ include "basic_2/relocation/drops.ma". (* Forward lemmas with length for local environments ************************) (* Basic_2A1: includes: drop_fwd_length_le4 *) -lemma drops_fwd_length_le4: ∀b,f,L1,L2. ⬇*[b, f] L1 ≡ L2 → |L2| ≤ |L1|. +lemma drops_fwd_length_le4: ∀b,f,L1,L2. ⬇*[b, f] L1 ≘ L2 → |L2| ≤ |L1|. #b #f #L1 #L2 #H elim H -f -L1 -L2 /2 width=1 by le_S, le_S_S/ qed-. (* Basic_2A1: includes: drop_fwd_length_eq1 *) -theorem drops_fwd_length_eq1: ∀b1,b2,f,L1,K1. ⬇*[b1, f] L1 ≡ K1 → - ∀L2,K2. ⬇*[b2, f] L2 ≡ K2 → +theorem drops_fwd_length_eq1: ∀b1,b2,f,L1,K1. ⬇*[b1, f] L1 ≘ K1 → + ∀L2,K2. ⬇*[b2, f] L2 ≘ K2 → |L1| = |L2| → |K1| = |K2|. #b1 #b2 #f #L1 #K1 #HLK1 elim HLK1 -f -L1 -K1 [ #f #_ #L2 #K2 #HLK2 #H lapply (length_inv_zero_sn … H) -H @@ -43,8 +43,8 @@ qed-. (* forward lemmas with finite colength assignment ***************************) -lemma drops_fwd_fcla: ∀f,L1,L2. ⬇*[Ⓣ, f] L1 ≡ L2 → - ∃∃n. 𝐂⦃f⦄ ≡ n & |L1| = |L2| + n. +lemma drops_fwd_fcla: ∀f,L1,L2. ⬇*[Ⓣ, f] L1 ≘ L2 → + ∃∃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,53 +53,53 @@ 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|. +lemma drops_fwd_fcla_le2: ∀f,L1,L2. ⬇*[Ⓣ, f] L1 ≘ L2 → + ∃∃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 H1 -L1 @@ -107,8 +107,8 @@ elim (drops_fwd_fcla … HLK2) -HLK2 #n2 #Hn2 #H2 >H2 -L2 <(fcla_mono … Hn2 … Hn1) -f // qed-. -theorem drops_conf_div: ∀f1,f2,L1,L2. ⬇*[Ⓣ, f1] L1 ≡ L2 → ⬇*[Ⓣ, f2] L1 ≡ L2 → - ∃∃n. 𝐂⦃f1⦄ ≡ n & 𝐂⦃f2⦄ ≡ n. +theorem drops_conf_div: ∀f1,f2,L1,L2. ⬇*[Ⓣ, f1] L1 ≘ L2 → ⬇*[Ⓣ, f2] L1 ≘ L2 → + ∃∃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/basic_2/relocation/drops_lexs.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_lexs.ma index a3ff3cdac..dfee0330d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_lexs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_lexs.ma @@ -43,8 +43,8 @@ qed-. lemma lexs_liftable_co_dedropable_bi: ∀RN,RP. d_liftable2_sn … liftsb RN → d_liftable2_sn … liftsb RP → ∀f2,L1,L2. L1 ⪤*[cfull, RP, f2] L2 → ∀f1,K1,K2. K1 ⪤*[RN, RP, f1] K2 → - ∀b,f. ⬇*[b, f] L1 ≡ K1 → ⬇*[b, f] L2 ≡ K2 → - f ~⊚ f1 ≡ f2 → L1 ⪤*[RN, RP, f2] L2. + ∀b,f. ⬇*[b, f] L1 ≘ K1 → ⬇*[b, f] L2 ≘ K2 → + f ~⊚ f1 ≘ f2 → L1 ⪤*[RN, RP, f2] L2. #RN #RP #HRN #HRP #f2 #L1 #L2 #H elim H -f2 -L1 -L2 // #g2 #I1 #I2 #L1 #L2 #HL12 #HI12 #IH #f1 #Y1 #Y2 #HK12 #b #f #HY1 #HY2 #H [ elim (coafter_inv_xxn … H) [ |*: // ] -H #g #g1 #Hg2 #H1 #H2 destruct @@ -88,9 +88,9 @@ lemma lexs_liftable_co_dedropable_sn: ∀RN,RP. (∀L. reflexive … (RN L)) → ] qed-. -fact lexs_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. +fact lexs_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 [ #f #Hf #_ #f2 #X #H #f1 #Hf2 lapply (lexs_inv_atom2 … H) -H #H destruct /4 width=3 by lexs_atom, drops_atom, ex2_intro/ @@ -117,9 +117,9 @@ lemma lexs_co_dropable_dx: ∀RN,RP. co_dropable_dx (lexs RN RP). (* Basic_2A1: includes: lpx_sn_drop_conf *) (**) lemma lexs_drops_conf_next: ∀RN,RP. ∀f2,L1,L2. L1 ⪤*[RN, RP, f2] L2 → - ∀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. + ∀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. #RN #RP #f2 #L1 #L2 #HL12 #b #f #I1 #K1 #HLK1 #Hf #f1 #Hf2 elim (lexs_co_dropable_sn … HLK1 … Hf … HL12 … Hf2) -L1 -f2 -Hf #X #HX #HLK2 elim (lexs_inv_next1 … HX) -HX @@ -128,9 +128,9 @@ qed-. lemma lexs_drops_conf_push: ∀RN,RP. ∀f2,L1,L2. L1 ⪤*[RN, RP, f2] L2 → - ∀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. + ∀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. #RN #RP #f2 #L1 #L2 #HL12 #b #f #I1 #K1 #HLK1 #Hf #f1 #Hf2 elim (lexs_co_dropable_sn … HLK1 … Hf … HL12 … Hf2) -L1 -f2 -Hf #X #HX #HLK2 elim (lexs_inv_push1 … HX) -HX @@ -139,9 +139,9 @@ qed-. (* Basic_2A1: includes: lpx_sn_drop_trans *) lemma lexs_drops_trans_next: ∀RN,RP,f2,L1,L2. L1 ⪤*[RN, RP, f2] L2 → - ∀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. + ∀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. #RN #RP #f2 #L1 #L2 #HL12 #b #f #I2 #K2 #HLK2 #Hf #f1 #Hf2 elim (lexs_co_dropable_dx … HL12 … HLK2 … Hf … Hf2) -L2 -f2 -Hf #X #HLK1 #HX elim (lexs_inv_next2 … HX) -HX @@ -149,9 +149,9 @@ elim (lexs_co_dropable_dx … HL12 … HLK2 … Hf … Hf2) -L2 -f2 -Hf qed-. lemma lexs_drops_trans_push: ∀RN,RP,f2,L1,L2. L1 ⪤*[RN, RP, f2] L2 → - ∀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. + ∀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. #RN #RP #f2 #L1 #L2 #HL12 #b #f #I2 #K2 #HLK2 #Hf #f1 #Hf2 elim (lexs_co_dropable_dx … HL12 … HLK2 … Hf … Hf2) -L2 -f2 -Hf #X #HLK1 #HX elim (lexs_inv_push2 … HX) -HX @@ -161,9 +161,9 @@ qed-. lemma drops_lexs_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 → - ∀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}. + ∀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}. #RN #RP #H1RN #H1RP #H2RN #H2RP #f1 #K1 #K2 #HK12 #b #f #I1 #L1 #HLK1 #f2 #Hf2 elim (lexs_liftable_co_dedropable_sn … H1RN H1RP H2RN H2RP … HLK1 … HK12 … Hf2) -K1 -f1 -H1RN -H1RP -H2RN -H2RP #X #HX #HLK2 #H1L12 elim (lexs_inv_next1 … HX) -HX @@ -173,18 +173,18 @@ qed-. lemma drops_lexs_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 → - ∀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}. + ∀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}. #RN #RP #H1RN #H1RP #H2RN #H2RP #f1 #K1 #K2 #HK12 #b #f #I1 #L1 #HLK1 #f2 #Hf2 elim (lexs_liftable_co_dedropable_sn … H1RN H1RP H2RN H2RP … HLK1 … HK12 … Hf2) -K1 -f1 -H1RN -H1RP -H2RN -H2RP #X #HX #HLK2 #H1L12 elim (lexs_inv_push1 … HX) -HX #I2 #L2 #H2L12 #HI12 #H destruct /2 width=6 by ex4_2_intro/ qed-. -lemma drops_atom2_lexs_conf: ∀RN,RP,b,f1,L1. ⬇*[b, f1] L1 ≡ ⋆ → 𝐔⦃f1⦄ → +lemma drops_atom2_lexs_conf: ∀RN,RP,b,f1,L1. ⬇*[b, f1] L1 ≘ ⋆ → 𝐔⦃f1⦄ → ∀f,L2. L1 ⪤*[RN, RP, f] L2 → - ∀f2. f1 ~⊚ f2 ≡f → ⬇*[b, f1] L2 ≡ ⋆. + ∀f2. f1 ~⊚ f2 ≘f → ⬇*[b, f1] L2 ≘ ⋆. #RN #RP #b #f1 #L1 #H1 #Hf1 #f #L2 #H2 #f2 #H3 elim (lexs_co_dropable_sn … H1 … H2 … H3) // -H1 -H2 -H3 -Hf1 #L #H #HL2 lapply (lexs_inv_atom1 … H) -H // diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_lreq.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_lreq.ma index bc32717b6..8c6feaaa2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_lreq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_lreq.ma @@ -29,10 +29,10 @@ lemma lreq_co_dropable_dx: co_dropable_dx lreq. @lexs_co_dropable_dx qed-. (* Basic_2A1: includes: lreq_drop_trans_be *) -lemma lreq_drops_trans_next: ∀f2,L1,L2. L1 ≐[f2] L2 → - ∀b,f,I,K2. ⬇*[b, f] L2 ≡ K2.ⓘ{I} → 𝐔⦃f⦄ → - ∀f1. f ~⊚ ⫯f1 ≡ f2 → - ∃∃K1. ⬇*[b, f] L1 ≡ K1.ⓘ{I} & K1 ≐[f1] K2. +lemma lreq_drops_trans_next: ∀f2,L1,L2. L1 ≡[f2] L2 → + ∀b,f,I,K2. ⬇*[b, f] L2 ≘ K2.ⓘ{I} → 𝐔⦃f⦄ → + ∀f1. f ~⊚ ⫯f1 ≘ f2 → + ∃∃K1. ⬇*[b, f] L1 ≘ K1.ⓘ{I} & K1 ≡[f1] K2. #f2 #L1 #L2 #HL12 #b #f #I2 #K2 #HLK2 #Hf #f1 #Hf2 elim (lexs_drops_trans_next … HL12 … HLK2 Hf … Hf2) -f2 -L2 -Hf #I1 #K1 #HLK1 #HK12 #H <(ceq_ext_inv_eq … H) -I2 @@ -40,19 +40,19 @@ elim (lexs_drops_trans_next … HL12 … HLK2 Hf … Hf2) -f2 -L2 -Hf qed-. (* Basic_2A1: includes: lreq_drop_conf_be *) -lemma lreq_drops_conf_next: ∀f2,L1,L2. L1 ≐[f2] L2 → - ∀b,f,I,K1. ⬇*[b, f] L1 ≡ K1.ⓘ{I} → 𝐔⦃f⦄ → - ∀f1. f ~⊚ ⫯f1 ≡ f2 → - ∃∃K2. ⬇*[b, f] L2 ≡ K2.ⓘ{I} & K1 ≐[f1] K2. +lemma lreq_drops_conf_next: ∀f2,L1,L2. L1 ≡[f2] L2 → + ∀b,f,I,K1. ⬇*[b, f] L1 ≘ K1.ⓘ{I} → 𝐔⦃f⦄ → + ∀f1. f ~⊚ ⫯f1 ≘ f2 → + ∃∃K2. ⬇*[b, f] L2 ≘ K2.ⓘ{I} & K1 ≡[f1] K2. #f2 #L1 #L2 #HL12 #b #f #I1 #K1 #HLK1 #Hf #f1 #Hf2 elim (lreq_drops_trans_next … (lreq_sym … HL12) … HLK1 … Hf2) // -f2 -L1 -Hf /3 width=3 by lreq_sym, ex2_intro/ qed-. -lemma drops_lreq_trans_next: ∀f1,K1,K2. K1 ≐[f1] K2 → - ∀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}. +lemma drops_lreq_trans_next: ∀f1,K1,K2. K1 ≡[f1] K2 → + ∀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}. #f1 #K1 #K2 #HK12 #b #f #I1 #L1 #HLK1 #f2 #Hf2 elim (drops_lexs_trans_next … HK12 … HLK1 … Hf2) -f1 -K1 /2 width=6 by cfull_lift_sn, ceq_lift_sn/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_lstar.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_lstar.ma index 4820ed775..dadccae4f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_lstar.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_lstar.ma @@ -21,7 +21,7 @@ include "basic_2/relocation/lreq_lreq.ma". (* Properties with reflexive and transitive closure *************************) (* Basic_2A1: was: d_liftable_LTC *) -lemma d2_liftable_sn_LTC: ∀C,S,R. d_liftable2_sn C S R → d_liftable2_sn C S (LTC … R). +lemma d2_liftable_sn_CTC: ∀C,S,R. d_liftable2_sn C S R → d_liftable2_sn C S (CTC … R). #C #S #R #HR #K #T1 #T2 #H elim H -T2 [ #T2 #HT12 #b #f #L #HLK #U1 #HTU1 elim (HR … HT12 … HLK … HTU1) /3 width=3 by inj, ex2_intro/ @@ -32,7 +32,7 @@ lemma d2_liftable_sn_LTC: ∀C,S,R. d_liftable2_sn C S R → d_liftable2_sn C S qed-. (* Basic_2A1: was: d_deliftable_sn_LTC *) -lemma d2_deliftable_sn_LTC: ∀C,S,R. d_deliftable2_sn C S R → d_deliftable2_sn C S (LTC … R). +lemma d2_deliftable_sn_CTC: ∀C,S,R. d_deliftable2_sn C S R → d_deliftable2_sn C S (CTC … R). #C #S #R #HR #L #U1 #U2 #H elim H -U2 [ #U2 #HU12 #b #f #K #HLK #T1 #HTU1 elim (HR … HU12 … HLK … HTU1) -HR -L -U1 /3 width=3 by inj, ex2_intro/ @@ -42,7 +42,7 @@ lemma d2_deliftable_sn_LTC: ∀C,S,R. d_deliftable2_sn C S R → d_deliftable2_s ] qed-. -lemma co_dropable_sn_TC: ∀R. co_dropable_sn R → co_dropable_sn (LTC … R). +lemma co_dropable_sn_TC: ∀R. co_dropable_sn R → co_dropable_sn (CTC … R). #R #HR #b #f #L1 #K1 #HLK1 #Hf #f2 #L2 #H elim H -L2 [ #L2 #HL12 #f1 #H elim (HR … HLK1 … Hf … HL12 … H) -HR -Hf -f2 -L1 /3 width=3 by inj, ex2_intro/ @@ -73,7 +73,7 @@ lemma d2_deliftable_sn_llstar: ∀C,S,R. d_deliftable2_sn C S R → ] qed-. -lemma co_dropable_dx_TC: ∀R. co_dropable_dx R → co_dropable_dx (LTC … R). +lemma co_dropable_dx_TC: ∀R. co_dropable_dx R → co_dropable_dx (CTC … R). #R #HR #f2 #L1 #L2 #H elim H -L2 [ #L2 #HL12 #b #f #K2 #HLK2 #Hf #f1 #Hf2 elim (HR … HL12 … HLK2 … Hf … Hf2) -HR -Hf -f2 -L2 /3 width=3 by inj, ex2_intro/ @@ -83,7 +83,7 @@ lemma co_dropable_dx_TC: ∀R. co_dropable_dx R → co_dropable_dx (LTC … R). ] qed-. -lemma co_dedropable_sn_TC: ∀R. co_dedropable_sn R → co_dedropable_sn (LTC … R). +lemma co_dedropable_sn_TC: ∀R. co_dedropable_sn R → co_dedropable_sn (CTC … R). #R #HR #b #f #L1 #K1 #HLK1 #f1 #K2 #H elim H -K2 [ #K2 #HK12 #f2 #Hf elim (HR … HLK1 … HK12 … Hf) -HR -f1 -K1 /3 width=4 by inj, ex3_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_vector.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_vector.ma index d2c162806..6a7560248 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_vector.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_vector.ma @@ -19,8 +19,8 @@ include "basic_2/relocation/drops.ma". definition d_liftable1_all: predicate (relation2 lenv term) ≝ λR. ∀K,Ts. all … (R K) Ts → - ∀b,f,L. ⬇*[b, f] L ≡ K → - ∀Us. ⬆*[f] Ts ≡ Us → all … (R L) Us. + ∀b,f,L. ⬇*[b, f] L ≘ K → + ∀Us. ⬆*[f] Ts ≘ Us → all … (R L) Us. (* Properties with generic relocation for term vectors **********************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_weight.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_weight.ma index 59f2a9e30..3b75c89f6 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_weight.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_weight.ma @@ -21,7 +21,7 @@ include "basic_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 @@ -30,7 +30,7 @@ lemma drops_fwd_lw: ∀b,f,L1,L2. ⬇*[b, f] L1 ≡ L2 → ♯{L2} ≤ ♯{L1}. qed-. (* Basic_2A1: includes: drop_fwd_lw_lt *) -lemma drops_fwd_lw_lt: ∀f,L1,L2. ⬇*[Ⓣ, f] L1 ≡ L2 → +lemma drops_fwd_lw_lt: ∀f,L1,L2. ⬇*[Ⓣ, f] L1 ≘ L2 → (𝐈⦃f⦄ → ⊥) → ♯{L2} < ♯{L1}. #f #L1 #L2 #H elim H -f -L1 -L2 [ #f #Hf #Hnf elim Hnf -Hnf /2 width=1 by/ @@ -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/basic_2/relocation/lex_tc.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/lex_tc.ma index d9112a12e..9e48f4d36 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/lex_tc.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/lex_tc.ma @@ -23,8 +23,8 @@ alias symbol "subseteq" = "relation inclusion". (* Inversion lemmas with transitive closure *********************************) (* Basic_2A1: was: lpx_sn_LTC_TC_lpx_sn *) -lemma lex_inv_ltc: ∀R. c_reflexive … R → - lex (LTC … R) ⊆ TC … (lex R). +lemma lex_inv_CTC: ∀R. c_reflexive … R → + lex (CTC … R) ⊆ TC … (lex R). #R #HR #L1 #L2 * /5 width=11 by lexs_inv_tc_dx, lexs_co, ext2_inv_tc, ext2_refl, monotonic_TC, ex2_intro/ qed-. @@ -43,8 +43,8 @@ qed-. (* Properties with transitive closure ***************************************) (* Basic_2A1: was: TC_lpx_sn_inv_lpx_sn_LTC *) -lemma lex_ltc: ∀R. s_rs_transitive … R (λ_. lex R) → - TC … (lex R) ⊆ lex (LTC … R). +lemma lex_CTC: ∀R. s_rs_transitive … R (λ_. lex R) → + TC … (lex R) ⊆ lex (CTC … R). #R #HR #L1 #L2 #HL12 lapply (monotonic_TC … (lexs cfull (cext2 R) 𝐈𝐝) … HL12) -HL12 [ #L1 #L2 * /3 width=3 by lexs_eq_repl_fwd, eq_id_inv_isid/ @@ -52,12 +52,12 @@ lapply (monotonic_TC … (lexs cfull (cext2 R) 𝐈𝐝) … HL12) -HL12 ] qed-. -lemma lex_ltc_step_dx: ∀R. c_reflexive … R → s_rs_transitive … R (λ_. lex R) → - ∀L1,L. lex (LTC … R) L1 L → - ∀L2. lex R L L2 → lex (LTC … R) L1 L2. -/4 width=3 by lex_ltc, lex_inv_ltc, step/ qed-. +lemma lex_CTC_step_dx: ∀R. c_reflexive … R → s_rs_transitive … R (λ_. lex R) → + ∀L1,L. lex (CTC … R) L1 L → + ∀L2. lex R L L2 → lex (CTC … R) L1 L2. +/4 width=3 by lex_CTC, lex_inv_CTC, step/ qed-. -lemma lex_ltc_step_sn: ∀R. c_reflexive … R → s_rs_transitive … R (λ_. lex R) → +lemma lex_CTC_step_sn: ∀R. c_reflexive … R → s_rs_transitive … R (λ_. lex R) → ∀L1,L. lex R L1 L → - ∀L2. lex (LTC … R) L L2 → lex (LTC … R) L1 L2. -/4 width=3 by lex_ltc, lex_inv_ltc, TC_strap/ qed-. + ∀L2. lex (CTC … R) L L2 → lex (CTC … R) L1 L2. +/4 width=3 by lex_CTC, lex_inv_CTC, TC_strap/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/lexs_lexs.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/lexs_lexs.ma index d4c2272f9..c1f10efbf 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/lexs_lexs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/lexs_lexs.ma @@ -21,8 +21,8 @@ include "basic_2/relocation/drops.ma". theorem lexs_trans_gen (RN1) (RP1) (RN2) (RP2) (RN) (RP): ∀L1,f. - (∀g,I,K,n. ⬇*[n] L1 ≡ K.ⓘ{I} → ⫯g = ⫱*[n] f → lexs_transitive RN1 RN2 RN RN1 RP1 g K I) → - (∀g,I,K,n. ⬇*[n] L1 ≡ K.ⓘ{I} → ↑g = ⫱*[n] f → lexs_transitive RP1 RP2 RP RN1 RP1 g K I) → + (∀g,I,K,n. ⬇*[n] L1 ≘ K.ⓘ{I} → ⫯g = ⫱*[n] f → lexs_transitive RN1 RN2 RN RN1 RP1 g K I) → + (∀g,I,K,n. ⬇*[n] L1 ≘ K.ⓘ{I} → ↑g = ⫱*[n] f → lexs_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. @@ -64,8 +64,8 @@ qed-. (* Basic_2A1: includes: lpx_sn_conf *) theorem lexs_conf (RN1) (RP1) (RN2) (RP2): ∀L,f. - (∀g,I,K,n. ⬇*[n] L ≡ K.ⓘ{I} → ⫯g = ⫱*[n] f → R_pw_confluent2_lexs RN1 RN2 RN1 RP1 RN2 RP2 g K I) → - (∀g,I,K,n. ⬇*[n] L ≡ K.ⓘ{I} → ↑g = ⫱*[n] f → R_pw_confluent2_lexs RP1 RP2 RN1 RP1 RN2 RP2 g K I) → + (∀g,I,K,n. ⬇*[n] L ≘ K.ⓘ{I} → ⫯g = ⫱*[n] f → R_pw_confluent2_lexs RN1 RN2 RN1 RP1 RN2 RP2 g K I) → + (∀g,I,K,n. ⬇*[n] L ≘ K.ⓘ{I} → ↑g = ⫱*[n] f → R_pw_confluent2_lexs RP1 RP2 RN1 RP1 RN2 RP2 g K I) → pw_confluent2 … (lexs RN1 RP1 f) (lexs RN2 RP2 f) L. #RN1 #RP1 #RN2 #RP2 #L elim L -L [ #f #_ #_ #L1 #H1 #L2 #H2 >(lexs_inv_atom1 … H1) >(lexs_inv_atom1 … H2) -H2 -H1 @@ -97,7 +97,7 @@ theorem lexs_canc_dx: ∀RN,RP,f. Transitive … (lexs RN RP f) → lemma lexs_meet: ∀RN,RP,L1,L2. ∀f1. L1 ⪤*[RN, RP, f1] L2 → ∀f2. L1 ⪤*[RN, RP, f2] L2 → - ∀f. f1 ⋒ f2 ≡ f → L1 ⪤*[RN, RP, f] L2. + ∀f. f1 ⋒ f2 ≘ f → L1 ⪤*[RN, RP, f] L2. #RN #RP #L1 #L2 #f1 #H elim H -f1 -L1 -L2 // #f1 #I1 #I2 #L1 #L2 #_ #HI12 #IH #f2 #H #f #Hf elim (pn_split f2) * #g2 #H2 destruct @@ -110,7 +110,7 @@ qed-. lemma lexs_join: ∀RN,RP,L1,L2. ∀f1. L1 ⪤*[RN, RP, f1] L2 → ∀f2. L1 ⪤*[RN, RP, f2] L2 → - ∀f. f1 ⋓ f2 ≡ f → L1 ⪤*[RN, RP, f] L2. + ∀f. f1 ⋓ f2 ≘ f → L1 ⪤*[RN, RP, f] L2. #RN #RP #L1 #L2 #f1 #H elim H -f1 -L1 -L2 // #f1 #I1 #I2 #L1 #L2 #_ #HI12 #IH #f2 #H #f #Hf elim (pn_split f2) * #g2 #H2 destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/lexs_tc.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/lexs_tc.ma index 70cfdbd71..09536b034 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/lexs_tc.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/lexs_tc.ma @@ -34,7 +34,7 @@ lemma lexs_tc_next_sn: ∀RN,RP. c_reflexive … RN → qed. lemma lexs_tc_next_dx: ∀RN,RP. c_reflexive … RN → c_reflexive … RP → - ∀f,I1,I2,L1. (LTC … RN) L1 I1 I2 → ∀L2. L1 ⪤*[RN, RP, f] L2 → + ∀f,I1,I2,L1. (CTC … RN) L1 I1 I2 → ∀L2. L1 ⪤*[RN, RP, f] L2 → TC … (lexs RN RP (⫯f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}). #RN #RP #HRN #HRP #f #I1 #I2 #L1 #H elim H -I2 /4 width=5 by lexs_refl, lexs_next, step, inj/ @@ -48,18 +48,18 @@ lemma lexs_tc_push_sn: ∀RN,RP. c_reflexive … RP → qed. lemma lexs_tc_push_dx: ∀RN,RP. c_reflexive … RN → c_reflexive … RP → - ∀f,I1,I2,L1. (LTC … RP) L1 I1 I2 → ∀L2. L1 ⪤*[RN, RP, f] L2 → + ∀f,I1,I2,L1. (CTC … RP) L1 I1 I2 → ∀L2. L1 ⪤*[RN, RP, f] L2 → TC … (lexs RN RP (↑f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}). #RN #RP #HRN #HRP #f #I1 #I2 #L1 #H elim H -I2 /4 width=5 by lexs_refl, lexs_push, step, inj/ qed. -lemma lexs_tc_inj_sn: ∀RN,RP,f,L1,L2. L1 ⪤*[RN, RP, f] L2 → L1 ⪤*[LTC … RN, RP, f] L2. +lemma lexs_tc_inj_sn: ∀RN,RP,f,L1,L2. L1 ⪤*[RN, RP, f] L2 → L1 ⪤*[CTC … RN, RP, f] L2. #RN #RP #f #L1 #L2 #H elim H -f -L1 -L2 /3 width=1 by lexs_push, lexs_next, inj/ qed. -lemma lexs_tc_inj_dx: ∀RN,RP,f,L1,L2. L1 ⪤*[RN, RP, f] L2 → L1 ⪤*[RN, LTC … RP, f] L2. +lemma lexs_tc_inj_dx: ∀RN,RP,f,L1,L2. L1 ⪤*[RN, RP, f] L2 → L1 ⪤*[RN, CTC … RP, f] L2. #RN #RP #f #L1 #L2 #H elim H -f -L1 -L2 /3 width=1 by lexs_push, lexs_next, inj/ qed. @@ -67,14 +67,14 @@ qed. (* Main properties with transitive closure **********************************) theorem lexs_tc_next: ∀RN,RP. c_reflexive … RN → c_reflexive … RP → - ∀f,I1,I2,L1. (LTC … RN) L1 I1 I2 → ∀L2. TC … (lexs RN RP f) L1 L2 → + ∀f,I1,I2,L1. (CTC … RN) L1 I1 I2 → ∀L2. TC … (lexs RN RP f) L1 L2 → TC … (lexs RN RP (⫯f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}). #RN #RP #HRN #HRP #f #I1 #I2 #L1 #H elim H -I2 /4 width=5 by lexs_tc_next_sn, lexs_tc_refl, trans_TC/ qed. theorem lexs_tc_push: ∀RN,RP. c_reflexive … RN → c_reflexive … RP → - ∀f,I1,I2,L1. (LTC … RP) L1 I1 I2 → ∀L2. TC … (lexs RN RP f) L1 L2 → + ∀f,I1,I2,L1. (CTC … RP) L1 I1 I2 → ∀L2. TC … (lexs RN RP f) L1 L2 → TC … (lexs RN RP (↑f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}). #RN #RP #HRN #HRP #f #I1 #I2 #L1 #H elim H -I2 /4 width=5 by lexs_tc_push_sn, lexs_tc_refl, trans_TC/ @@ -83,7 +83,7 @@ qed. (* Basic_2A1: uses: TC_lpx_sn_ind *) theorem lexs_tc_step_dx: ∀RN,RP. s_rs_transitive_isid RN RP → ∀f,L1,L. L1 ⪤*[RN, RP, f] L → 𝐈⦃f⦄ → - ∀L2. L ⪤*[RN, LTC … RP, f] L2 → L1⪤* [RN, LTC … RP, f] L2. + ∀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 >(lexs_inv_atom1 … H) -Y // ] #f #I1 #I #L1 #L #HL1 #HI1 #IH #Hf #Y #H @@ -99,7 +99,7 @@ qed-. (* Advanced properties ******************************************************) lemma lexs_tc_dx: ∀RN,RP. s_rs_transitive_isid RN RP → - ∀f. 𝐈⦃f⦄ → ∀L1,L2. TC … (lexs RN RP f) L1 L2 → L1 ⪤*[RN, LTC … RP, f] L2. + ∀f. 𝐈⦃f⦄ → ∀L1,L2. TC … (lexs 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 lexs_tc_step_dx, lexs_tc_inj_dx/ qed. @@ -107,13 +107,13 @@ qed. (* Advanced inversion lemmas ************************************************) lemma lexs_inv_tc_sn: ∀RN,RP. c_reflexive … RN → c_reflexive … RP → - ∀f,L1,L2. L1 ⪤*[LTC … RN, RP, f] L2 → TC … (lexs RN RP f) L1 L2. + ∀f,L1,L2. L1 ⪤*[CTC … RN, RP, f] L2 → TC … (lexs RN RP f) L1 L2. #RN #RP #HRN #HRP #f #L1 #L2 #H elim H -f -L1 -L2 /2 width=1 by lexs_tc_next, lexs_tc_push_sn, lexs_atom, inj/ qed-. lemma lexs_inv_tc_dx: ∀RN,RP. c_reflexive … RN → c_reflexive … RP → - ∀f,L1,L2. L1 ⪤*[RN, LTC … RP, f] L2 → TC … (lexs RN RP f) L1 L2. + ∀f,L1,L2. L1 ⪤*[RN, CTC … RP, f] L2 → TC … (lexs RN RP f) L1 L2. #RN #RP #HRN #HRP #f #L1 #L2 #H elim H -f -L1 -L2 /2 width=1 by lexs_tc_push, lexs_tc_next_sn, lexs_atom, inj/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts.ma index 31f416f12..1b7c63c0b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts.ma @@ -25,7 +25,7 @@ include "basic_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 → @@ -42,24 +42,24 @@ interpretation "generic relocation (term)" 'RLiftStar f T1 T2 = (lifts f T1 T2). definition liftable2_sn: predicate (relation term) ≝ - λR. ∀T1,T2. R T1 T2 → ∀f,U1. ⬆*[f] T1 ≡ U1 → - ∃∃U2. ⬆*[f] T2 ≡ U2 & R U1 U2. + λR. ∀T1,T2. R T1 T2 → ∀f,U1. ⬆*[f] T1 ≘ U1 → + ∃∃U2. ⬆*[f] T2 ≘ U2 & R U1 U2. definition deliftable2_sn: predicate (relation term) ≝ - λR. ∀U1,U2. R U1 U2 → ∀f,T1. ⬆*[f] T1 ≡ U1 → - ∃∃T2. ⬆*[f] T2 ≡ U2 & R T1 T2. + λR. ∀U1,U2. R U1 U2 → ∀f,T1. ⬆*[f] T1 ≘ U1 → + ∃∃T2. ⬆*[f] T2 ≘ U2 & R T1 T2. definition liftable2_bi: predicate (relation term) ≝ - λR. ∀T1,T2. R T1 T2 → ∀f,U1. ⬆*[f] T1 ≡ U1 → - ∀U2. ⬆*[f] T2 ≡ U2 → R U1 U2. + λR. ∀T1,T2. R T1 T2 → ∀f,U1. ⬆*[f] T1 ≘ U1 → + ∀U2. ⬆*[f] T2 ≘ U2 → R U1 U2. definition deliftable2_bi: predicate (relation term) ≝ - λR. ∀U1,U2. R U1 U2 → ∀f,T1. ⬆*[f] T1 ≡ U1 → - ∀T2. ⬆*[f] T2 ≡ U2 → R T1 T2. + λR. ∀U1,U2. R U1 U2 → ∀f,T1. ⬆*[f] T1 ≘ U1 → + ∀T2. ⬆*[f] T2 ≘ U2 → R T1 T2. (* Basic inversion lemmas ***************************************************) -fact lifts_inv_sort1_aux: ∀f,X,Y. ⬆*[f] X ≡ Y → ∀s. X = ⋆s → Y = ⋆s. +fact lifts_inv_sort1_aux: ∀f,X,Y. ⬆*[f] X ≘ Y → ∀s. X = ⋆s → Y = ⋆s. #f #X #Y * -f -X -Y // [ #f #i1 #i2 #_ #x #H destruct | #f #p #I #V1 #V2 #T1 #T2 #_ #_ #x #H destruct @@ -69,11 +69,11 @@ qed-. (* Basic_1: was: lift1_sort *) (* Basic_2A1: includes: lift_inv_sort1 *) -lemma lifts_inv_sort1: ∀f,Y,s. ⬆*[f] ⋆s ≡ Y → Y = ⋆s. +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. +fact lifts_inv_lref1_aux: ∀f,X,Y. ⬆*[f] X ≘ Y → ∀i1. X = #i1 → + ∃∃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/ @@ -85,11 +85,11 @@ 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. +lemma lifts_inv_lref1: ∀f,Y,i1. ⬆*[f] #i1 ≘ Y → + ∃∃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. +fact lifts_inv_gref1_aux: ∀f,X,Y. ⬆*[f] X ≘ Y → ∀l. X = §l → Y = §l. #f #X #Y * -f -X -Y // [ #f #i1 #i2 #_ #x #H destruct | #f #p #I #V1 #V2 #T1 #T2 #_ #_ #x #H destruct @@ -98,12 +98,12 @@ fact lifts_inv_gref1_aux: ∀f,X,Y. ⬆*[f] X ≡ Y → ∀l. X = §l → Y = § qed-. (* Basic_2A1: includes: lift_inv_gref1 *) -lemma lifts_inv_gref1: ∀f,Y,l. ⬆*[f] §l ≡ Y → Y = §l. +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 → +fact lifts_inv_bind1_aux: ∀f,X,Y. ⬆*[f] X ≘ Y → ∀p,I,V1,T1. X = ⓑ{p,I}V1.T1 → - ∃∃V2,T2. ⬆*[f] V1 ≡ V2 & ⬆*[↑f] T1 ≡ T2 & + ∃∃V2,T2. ⬆*[f] V1 ≘ V2 & ⬆*[↑f] T1 ≘ T2 & Y = ⓑ{p,I}V2.T2. #f #X #Y * -f -X -Y [ #f #s #q #J #W1 #U1 #H destruct @@ -116,14 +116,14 @@ 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 → - ∃∃V2,T2. ⬆*[f] V1 ≡ V2 & ⬆*[↑f] T1 ≡ T2 & +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. /2 width=3 by lifts_inv_bind1_aux/ qed-. -fact lifts_inv_flat1_aux: ∀f:rtmap. ∀X,Y. ⬆*[f] X ≡ Y → +fact lifts_inv_flat1_aux: ∀f:rtmap. ∀X,Y. ⬆*[f] X ≘ Y → ∀I,V1,T1. X = ⓕ{I}V1.T1 → - ∃∃V2,T2. ⬆*[f] V1 ≡ V2 & ⬆*[f] T1 ≡ T2 & + ∃∃V2,T2. ⬆*[f] V1 ≘ V2 & ⬆*[f] T1 ≘ T2 & Y = ⓕ{I}V2.T2. #f #X #Y * -f -X -Y [ #f #s #J #W1 #U1 #H destruct @@ -136,12 +136,12 @@ 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 → - ∃∃V2,T2. ⬆*[f] V1 ≡ V2 & ⬆*[f] T1 ≡ T2 & +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. /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. +fact lifts_inv_sort2_aux: ∀f,X,Y. ⬆*[f] X ≘ Y → ∀s. Y = ⋆s → X = ⋆s. #f #X #Y * -f -X -Y // [ #f #i1 #i2 #_ #x #H destruct | #f #p #I #V1 #V2 #T1 #T2 #_ #_ #x #H destruct @@ -151,11 +151,11 @@ qed-. (* Basic_1: includes: lift_gen_sort *) (* Basic_2A1: includes: lift_inv_sort2 *) -lemma lifts_inv_sort2: ∀f,X,s. ⬆*[f] X ≡ ⋆s → X = ⋆s. +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. +fact lifts_inv_lref2_aux: ∀f,X,Y. ⬆*[f] X ≘ Y → ∀i2. Y = #i2 → + ∃∃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/ @@ -167,11 +167,11 @@ 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. +lemma lifts_inv_lref2: ∀f,X,i2. ⬆*[f] X ≘ #i2 → + ∃∃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. +fact lifts_inv_gref2_aux: ∀f,X,Y. ⬆*[f] X ≘ Y → ∀l. Y = §l → X = §l. #f #X #Y * -f -X -Y // [ #f #i1 #i2 #_ #x #H destruct | #f #p #I #V1 #V2 #T1 #T2 #_ #_ #x #H destruct @@ -180,12 +180,12 @@ fact lifts_inv_gref2_aux: ∀f,X,Y. ⬆*[f] X ≡ Y → ∀l. Y = §l → X = § qed-. (* Basic_2A1: includes: lift_inv_gref1 *) -lemma lifts_inv_gref2: ∀f,X,l. ⬆*[f] X ≡ §l → X = §l. +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 → +fact lifts_inv_bind2_aux: ∀f,X,Y. ⬆*[f] X ≘ Y → ∀p,I,V2,T2. Y = ⓑ{p,I}V2.T2 → - ∃∃V1,T1. ⬆*[f] V1 ≡ V2 & ⬆*[↑f] T1 ≡ T2 & + ∃∃V1,T1. ⬆*[f] V1 ≘ V2 & ⬆*[↑f] T1 ≘ T2 & X = ⓑ{p,I}V1.T1. #f #X #Y * -f -X -Y [ #f #s #q #J #W2 #U2 #H destruct @@ -198,14 +198,14 @@ 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 → - ∃∃V1,T1. ⬆*[f] V1 ≡ V2 & ⬆*[↑f] T1 ≡ 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. /2 width=3 by lifts_inv_bind2_aux/ qed-. -fact lifts_inv_flat2_aux: ∀f:rtmap. ∀X,Y. ⬆*[f] X ≡ Y → +fact lifts_inv_flat2_aux: ∀f:rtmap. ∀X,Y. ⬆*[f] X ≘ Y → ∀I,V2,T2. Y = ⓕ{I}V2.T2 → - ∃∃V1,T1. ⬆*[f] V1 ≡ V2 & ⬆*[f] T1 ≡ T2 & + ∃∃V1,T1. ⬆*[f] V1 ≘ V2 & ⬆*[f] T1 ≘ T2 & X = ⓕ{I}V1.T1. #f #X #Y * -f -X -Y [ #f #s #J #W2 #U2 #H destruct @@ -218,16 +218,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 → - ∃∃V1,T1. ⬆*[f] V1 ≡ V2 & ⬆*[f] T1 ≡ 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. /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) @@ -236,9 +236,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) @@ -248,7 +248,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 @@ -265,7 +265,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 @@ -282,22 +282,22 @@ qed-. (* Inversion lemmas with uniform relocations ********************************) -lemma lifts_inv_lref1_uni: ∀l,Y,i. ⬆*[l] #i ≡ Y → Y = #(l+i). +lemma lifts_inv_lref1_uni: ∀l,Y,i. ⬆*[l] #i ≘ Y → Y = #(l+i). #l #Y #i1 #H elim (lifts_inv_lref1 … H) -H /4 width=4 by at_mono, eq_f/ qed-. -lemma lifts_inv_lref2_uni: ∀l,X,i2. ⬆*[l] X ≡ #i2 → +lemma lifts_inv_lref2_uni: ∀l,X,i2. ⬆*[l] X ≘ #i2 → ∃∃i1. X = #i1 & i2 = l + i1. #l #X #i2 #H elim (lifts_inv_lref2 … H) -H /3 width=3 by at_inv_uni, ex2_intro/ qed-. -lemma lifts_inv_lref2_uni_ge: ∀l,X,i. ⬆*[l] X ≡ #(l + i) → X = #i. +lemma lifts_inv_lref2_uni_ge: ∀l,X,i. ⬆*[l] X ≘ #(l + i) → X = #i. #l #X #i2 #H elim (lifts_inv_lref2_uni … H) -H #i1 #H1 #H2 destruct /4 width=2 by injective_plus_r, eq_f, sym_eq/ qed-. -lemma lifts_inv_lref2_uni_lt: ∀l,X,i. ⬆*[l] X ≡ #i → i < l → ⊥. +lemma lifts_inv_lref2_uni_lt: ∀l,X,i. ⬆*[l] X ≘ #i → i < l → ⊥. #l #X #i2 #H elim (lifts_inv_lref2_uni … H) -H #i1 #_ #H1 #H2 destruct /2 width=4 by lt_le_false/ qed-. @@ -305,14 +305,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/ @@ -320,8 +320,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/ @@ -330,24 +330,24 @@ qed-. (* Basic properties *********************************************************) -lemma lifts_eq_repl_back: ∀T1,T2. eq_repl_back … (λf. ⬆*[f] T1 ≡ T2). +lemma lifts_eq_repl_back: ∀T1,T2. eq_repl_back … (λf. ⬆*[f] T1 ≘ T2). #T1 #T2 #f1 #H elim H -T1 -T2 -f1 /4 width=5 by lifts_flat, lifts_bind, lifts_lref, at_eq_repl_back, eq_push/ qed-. -lemma lifts_eq_repl_fwd: ∀T1,T2. eq_repl_fwd … (λf. ⬆*[f] T1 ≡ T2). +lemma lifts_eq_repl_fwd: ∀T1,T2. eq_repl_fwd … (λf. ⬆*[f] T1 ≘ T2). #T1 #T2 @eq_repl_sym /2 width=3 by lifts_eq_repl_back/ (**) (* full auto fails *) 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. (* Basic_2A1: includes: lift_total *) -lemma lifts_total: ∀T1,f. ∃T2. ⬆*[f] T1 ≡ T2. +lemma lifts_total: ∀T1,f. ∃T2. ⬆*[f] T1 ≘ T2. #T1 elim T1 -T1 * /3 width=2 by lifts_lref, lifts_sort, lifts_gref, ex_intro/ [ #p ] #I #V1 #T1 #IHV1 #IHT1 #f @@ -357,15 +357,15 @@ elim (IHV1 f) -IHV1 #V2 #HV12 ] qed-. -lemma lift_lref_uni: ∀l,i. ⬆*[l] #i ≡ #(l+i). +lemma lift_lref_uni: ∀l,i. ⬆*[l] #i ≘ #(l+i). #l elim l -l /2 width=1 by lifts_lref/ qed. (* Basic_1: includes: lift_free (right to left) *) (* Basic_2A1: includes: lift_split *) -lemma lifts_split_trans: ∀f,T1,T2. ⬆*[f] T1 ≡ T2 → - ∀f1,f2. f2 ⊚ f1 ≡ f → - ∃∃T. ⬆*[f1] T1 ≡ T & ⬆*[f2] T ≡ T2. +lemma lifts_split_trans: ∀f,T1,T2. ⬆*[f] T1 ≘ T2 → + ∀f1,f2. f2 ⊚ f1 ≘ f → + ∃∃T. ⬆*[f1] T1 ≘ T & ⬆*[f2] T ≘ T2. #f #T1 #T2 #H elim H -f -T1 -T2 [ /3 width=3 by lifts_sort, ex2_intro/ | #f #i1 #i2 #Hi #f1 #f2 #Ht elim (after_at_fwd … Hi … Ht) -Hi -Ht @@ -381,9 +381,9 @@ lemma lifts_split_trans: ∀f,T1,T2. ⬆*[f] T1 ≡ T2 → qed-. (* Note: apparently, this was missing in Basic_2A1 *) -lemma lifts_split_div: ∀f1,T1,T2. ⬆*[f1] T1 ≡ T2 → - ∀f2,f. f2 ⊚ f1 ≡ f → - ∃∃T. ⬆*[f2] T2 ≡ T & ⬆*[f] T1 ≡ T. +lemma lifts_split_div: ∀f1,T1,T2. ⬆*[f1] T1 ≘ T2 → + ∀f2,f. f2 ⊚ f1 ≘ f → + ∃∃T. ⬆*[f2] T2 ≘ T & ⬆*[f] T1 ≘ T. #f1 #T1 #T2 #H elim H -f1 -T1 -T2 [ /3 width=3 by lifts_sort, ex2_intro/ | #f1 #i1 #i2 #Hi #f2 #f #Ht elim (after_at1_fwd … Hi … Ht) -Hi -Ht @@ -400,7 +400,7 @@ qed-. (* Basic_1: includes: dnf_dec2 dnf_dec *) (* Basic_2A1: includes: is_lift_dec *) -lemma is_lifts_dec: ∀T2,f. Decidable (∃T1. ⬆*[f] T1 ≡ T2). +lemma is_lifts_dec: ∀T2,f. Decidable (∃T1. ⬆*[f] T1 ≘ T2). #T1 elim T1 -T1 [ * [1,3: /3 width=2 by lifts_sort, lifts_gref, ex_intro, or_introl/ ] #i2 #f elim (is_at_dec f i2) // @@ -434,7 +434,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/basic_2/relocation/lifts_bind.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_bind.ma index 59e17e274..fd56f4e69 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_bind.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_bind.ma @@ -28,37 +28,37 @@ interpretation "generic relocation (binder for local environments)" (* Basic_inversion lemmas **************************************************) -lemma liftsb_inv_unit_sn: ∀f,I,Z2. ⬆*[f] BUnit I ≡ Z2 → Z2 = BUnit I. +lemma liftsb_inv_unit_sn: ∀f,I,Z2. ⬆*[f] BUnit I ≘ Z2 → Z2 = BUnit I. /2 width=2 by ext2_inv_unit_sn/ qed-. -lemma liftsb_inv_pair_sn: ∀f:rtmap. ∀Z2,I,V1. ⬆*[f] BPair I V1 ≡ Z2 → - ∃∃V2. ⬆*[f] V1 ≡ V2 & Z2 = BPair I V2. +lemma liftsb_inv_pair_sn: ∀f:rtmap. ∀Z2,I,V1. ⬆*[f] BPair I V1 ≘ Z2 → + ∃∃V2. ⬆*[f] V1 ≘ V2 & Z2 = BPair I V2. /2 width=1 by ext2_inv_pair_sn/ qed-. -lemma liftsb_inv_unit_dx: ∀f,I,Z1. ⬆*[f] Z1 ≡ BUnit I → Z1 = BUnit I. +lemma liftsb_inv_unit_dx: ∀f,I,Z1. ⬆*[f] Z1 ≘ BUnit I → Z1 = BUnit I. /2 width=2 by ext2_inv_unit_dx/ qed-. -lemma liftsb_inv_pair_dx: ∀f:rtmap. ∀Z1,I,V2. ⬆*[f] Z1 ≡ BPair I V2 → - ∃∃V1. ⬆*[f] V1 ≡ V2 & Z1 = BPair I V1. +lemma liftsb_inv_pair_dx: ∀f:rtmap. ∀Z1,I,V2. ⬆*[f] Z1 ≘ BPair I V2 → + ∃∃V1. ⬆*[f] V1 ≘ V2 & Z1 = BPair I V1. /2 width=1 by ext2_inv_pair_dx/ qed-. (* Basic properties *********************************************************) -lemma liftsb_eq_repl_back: ∀I1,I2. eq_repl_back … (λf. ⬆*[f] I1 ≡ I2). +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). /3 width=1 by lifts_refl, ext2_refl/ qed. -lemma liftsb_total: ∀I1,f. ∃I2. ⬆*[f] I1 ≡ I2. +lemma liftsb_total: ∀I1,f. ∃I2. ⬆*[f] I1 ≘ I2. * [2: #I #T1 #f elim (lifts_total T1 f) ] /3 width=2 by ext2_unit, ext2_pair, ex_intro/ qed-. -lemma liftsb_split_trans: ∀f,I1,I2. ⬆*[f] I1 ≡ I2 → - ∀f1,f2. f2 ⊚ f1 ≡ f → - ∃∃I. ⬆*[f1] I1 ≡ I & ⬆*[f2] I ≡ I2. +lemma liftsb_split_trans: ∀f,I1,I2. ⬆*[f] I1 ≘ I2 → + ∀f1,f2. f2 ⊚ f1 ≘ f → + ∃∃I. ⬆*[f1] I1 ≘ I & ⬆*[f2] I ≘ I2. #f #I1 #I2 * -I1 -I2 /2 width=3 by ext2_unit, ex2_intro/ #I #V1 #V2 #HV12 #f1 #f2 #Hf elim (lifts_split_trans … HV12 … Hf) -f /3 width=3 by ext2_pair, ex2_intro/ @@ -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/basic_2/relocation/lifts_lifts.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_lifts.ma index 3822e2dd0..63546ec63 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_lifts.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_lifts.ma @@ -20,9 +20,9 @@ include "basic_2/relocation/lifts.ma". (* Basic_1: includes: lift_gen_lift *) (* Basic_2A1: includes: lift_div_le lift_div_be *) -theorem lifts_div4: ∀f2,Tf,T. ⬆*[f2] Tf ≡ T → ∀g2,Tg. ⬆*[g2] Tg ≡ T → +theorem lifts_div4: ∀f2,Tf,T. ⬆*[f2] Tf ≘ T → ∀g2,Tg. ⬆*[g2] Tg ≘ T → ∀f1,g1. H_at_div f2 g2 f1 g1 → - ∃∃T0. ⬆*[f1] T0 ≡ Tf & ⬆*[g1] T0 ≡ Tg. + ∃∃T0. ⬆*[f1] T0 ≘ Tf & ⬆*[g1] T0 ≘ Tg. #f2 #Tf #T #H elim H -f2 -Tf -T [ #f2 #s #g2 #Tg #H #f1 #g1 #_ lapply (lifts_inv_sort2 … H) -H #H destruct @@ -46,13 +46,13 @@ theorem lifts_div4: ∀f2,Tf,T. ⬆*[f2] Tf ≡ T → ∀g2,Tg. ⬆*[g2] Tg ≡ ] qed-. -lemma lifts_div4_one: ∀f,Tf,T. ⬆*[↑f] Tf ≡ T → - ∀T1. ⬆*[1] T1 ≡ T → - ∃∃T0. ⬆*[1] T0 ≡ Tf & ⬆*[f] T0 ≡ T1. +lemma lifts_div4_one: ∀f,Tf,T. ⬆*[↑f] Tf ≘ T → + ∀T1. ⬆*[1] T1 ≘ T → + ∃∃T0. ⬆*[1] T0 ≘ Tf & ⬆*[f] T0 ≘ T1. /4 width=6 by lifts_div4, at_div_id_dx, at_div_pn/ qed-. -theorem lifts_div3: ∀f2,T,T2. ⬆*[f2] T2 ≡ T → ∀f,T1. ⬆*[f] T1 ≡ T → - ∀f1. f2 ⊚ f1 ≡ f → ⬆*[f1] T1 ≡ T2. +theorem lifts_div3: ∀f2,T,T2. ⬆*[f2] T2 ≘ T → ∀f,T1. ⬆*[f] T1 ≘ T → + ∀f1. f2 ⊚ f1 ≘ f → ⬆*[f1] T1 ≘ T2. #f2 #T #T2 #H elim H -f2 -T -T2 [ #f2 #s #f #T1 #H >(lifts_inv_sort2 … H) -T1 // | #f2 #i2 #i #Hi2 #f #T1 #H #f1 #Ht21 elim (lifts_inv_lref2 … H) -H @@ -70,8 +70,8 @@ qed-. (* Basic_1: was: lift1_lift1 (left to right) *) (* Basic_1: includes: lift_free (left to right) lift_d lift1_xhg (right to left) lift1_free (right to left) *) (* Basic_2A1: includes: lift_trans_be lift_trans_le lift_trans_ge lifts_lift_trans_le lifts_lift_trans *) -theorem lifts_trans: ∀f1,T1,T. ⬆*[f1] T1 ≡ T → ∀f2,T2. ⬆*[f2] T ≡ T2 → - ∀f. f2 ⊚ f1 ≡ f → ⬆*[f] T1 ≡ T2. +theorem lifts_trans: ∀f1,T1,T. ⬆*[f1] T1 ≘ T → ∀f2,T2. ⬆*[f2] T ≘ T2 → + ∀f. f2 ⊚ f1 ≘ f → ⬆*[f] T1 ≘ T2. #f1 #T1 #T #H elim H -f1 -T1 -T [ #f1 #s #f2 #T2 #H >(lifts_inv_sort1 … H) -T2 // | #f1 #i1 #i #Hi1 #f2 #T2 #H #f #Ht21 elim (lifts_inv_lref1 … H) -H @@ -87,8 +87,8 @@ theorem lifts_trans: ∀f1,T1,T. ⬆*[f1] T1 ≡ T → ∀f2,T2. ⬆*[f2] T ≡ qed-. (* Basic_2A1: includes: lift_conf_O1 lift_conf_be *) -theorem lifts_conf: ∀f1,T,T1. ⬆*[f1] T ≡ T1 → ∀f,T2. ⬆*[f] T ≡ T2 → - ∀f2. f2 ⊚ f1 ≡ f → ⬆*[f2] T1 ≡ T2. +theorem lifts_conf: ∀f1,T,T1. ⬆*[f1] T ≘ T1 → ∀f,T2. ⬆*[f] T ≘ T2 → + ∀f2. f2 ⊚ f1 ≘ f → ⬆*[f2] T1 ≘ T2. #f1 #T #T1 #H elim H -f1 -T -T1 [ #f1 #s #f #T2 #H >(lifts_inv_sort1 … H) -T2 // | #f1 #i #i1 #Hi1 #f #T2 #H #f2 #Ht21 elim (lifts_inv_lref1 … H) -H diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_lifts_bind.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_lifts_bind.ma index 7054d1ff4..e1647b35b 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_lifts_bind.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_lifts_bind.ma @@ -19,22 +19,22 @@ include "basic_2/relocation/lifts_bind.ma". (* Main properties **********************************************************) -theorem liftsb_div3: ∀f2,I,I2. ⬆*[f2] I2 ≡ I → ∀f,I1. ⬆*[f] I1 ≡ I → - ∀f1. f2 ⊚ f1 ≡ f → ⬆*[f1] I1 ≡ I2. +theorem liftsb_div3: ∀f2,I,I2. ⬆*[f2] I2 ≘ I → ∀f,I1. ⬆*[f] I1 ≘ I → + ∀f1. f2 ⊚ f1 ≘ f → ⬆*[f1] I1 ≘ I2. #f2 #I #I2 * -I -I2 #I [2: #V #V2 #HV2 ] #f #I1 #H [ elim (liftsb_inv_pair_dx … H) | lapply (liftsb_inv_unit_dx … H) ] -H /3 width=6 by lifts_div3, ext2_pair, ext2_unit/ qed-. -theorem liftsb_trans: ∀f1,I1,I. ⬆*[f1] I1 ≡ I → ∀f2,I2. ⬆*[f2] I ≡ I2 → - ∀f. f2 ⊚ f1 ≡ f → ⬆*[f] I1 ≡ I2. +theorem liftsb_trans: ∀f1,I1,I. ⬆*[f1] I1 ≘ I → ∀f2,I2. ⬆*[f2] I ≘ I2 → + ∀f. f2 ⊚ f1 ≘ f → ⬆*[f] I1 ≘ I2. #f1 #I1 #I * -I1 -I #I1 [2: #V1 #V #HV1 ] #f2 #I2 #H [ elim (liftsb_inv_pair_sn … H) | lapply (liftsb_inv_unit_sn … H) ] -H /3 width=6 by lifts_trans, ext2_pair, ext2_unit/ qed-. -theorem liftsb_conf: ∀f1,I,I1. ⬆*[f1] I ≡ I1 → ∀f,I2. ⬆*[f] I ≡ I2 → - ∀f2. f2 ⊚ f1 ≡ f → ⬆*[f2] I1 ≡ I2. +theorem liftsb_conf: ∀f1,I,I1. ⬆*[f1] I ≘ I1 → ∀f,I2. ⬆*[f] I ≘ I2 → + ∀f2. f2 ⊚ f1 ≘ f → ⬆*[f2] I1 ≘ I2. #f1 #I #I1 * -I -I1 #I [2: #V #V1 #HV1 ] #f2 #I2 #H [ elim (liftsb_inv_pair_sn … H) | lapply (liftsb_inv_unit_sn … H) ] -H /3 width=6 by lifts_conf, ext2_pair, ext2_unit/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_lifts_vector.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_lifts_vector.ma index 6093315ab..26a4fbede 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_lifts_vector.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_lifts_vector.ma @@ -20,8 +20,8 @@ include "basic_2/relocation/lifts_vector.ma". (* Main properties **********************************************************) (* Basic_1: includes: lifts_inj *) -theorem liftsv_inj: ∀f,T1s,Us. ⬆*[f] T1s ≡ Us → - ∀T2s. ⬆*[f] T2s ≡ Us → T1s = T2s. +theorem liftsv_inj: ∀f,T1s,Us. ⬆*[f] T1s ≘ Us → + ∀T2s. ⬆*[f] T2s ≘ Us → T1s = T2s. #f #T1s #Us #H elim H -T1s -Us [ #T2s #H >(liftsv_inv_nil2 … H) -H // | #T1s #Us #T1 #U #HT1U #_ #IHT1Us #X #H destruct @@ -31,8 +31,8 @@ theorem liftsv_inj: ∀f,T1s,Us. ⬆*[f] T1s ≡ Us → qed-. (* Basic_2A1: includes: liftv_mono *) -theorem liftsv_mono: ∀f,Ts,U1s. ⬆*[f] Ts ≡ U1s → - ∀U2s. ⬆*[f] Ts ≡ U2s → U1s = U2s. +theorem liftsv_mono: ∀f,Ts,U1s. ⬆*[f] Ts ≘ U1s → + ∀U2s. ⬆*[f] Ts ≘ U2s → U1s = U2s. #f #Ts #U1s #H elim H -Ts -U1s [ #U2s #H >(liftsv_inv_nil1 … H) -H // | #Ts #U1s #T #U1 #HTU1 #_ #IHTU1s #X #H destruct @@ -43,8 +43,8 @@ qed-. (* Basic_1: includes: lifts1_xhg (right to left) *) (* Basic_2A1: includes: liftsv_liftv_trans_le *) -theorem liftsv_trans: ∀f1,T1s,Ts. ⬆*[f1] T1s ≡ Ts → ∀T2s,f2. ⬆*[f2] Ts ≡ T2s → - ∀f. f2 ⊚ f1 ≡ f → ⬆*[f] T1s ≡ T2s. +theorem liftsv_trans: ∀f1,T1s,Ts. ⬆*[f1] T1s ≘ Ts → ∀T2s,f2. ⬆*[f2] Ts ≘ T2s → + ∀f. f2 ⊚ f1 ≘ f → ⬆*[f] T1s ≘ T2s. #f1 #T1s #Ts #H elim H -T1s -Ts [ #T2s #f2 #H >(liftsv_inv_nil1 … H) -T2s /2 width=3 by liftsv_nil/ | #T1s #Ts #T1 #T #HT1 #_ #IHT1s #X #f2 #H elim (liftsv_inv_cons1 … H) -H diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_simple.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_simple.ma index 9afa0c02f..7d436c7b7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_simple.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_simple.ma @@ -20,13 +20,13 @@ include "basic_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/basic_2/relocation/lifts_vector.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_vector.ma index 62af6ac90..68cab8482 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_vector.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_vector.ma @@ -21,7 +21,7 @@ include "basic_2/relocation/lifts.ma". inductive liftsv (f:rtmap): relation (list term) ≝ | liftsv_nil : liftsv f (◊) (◊) | liftsv_cons: ∀T1s,T2s,T1,T2. - ⬆*[f] T1 ≡ T2 → liftsv f T1s T2s → + ⬆*[f] T1 ≘ T2 → liftsv f T1s T2s → liftsv f (T1 @ T1s) (T2 @ T2s) . @@ -33,18 +33,18 @@ interpretation "generic relocation (term vector)" (* Basic inversion lemmas ***************************************************) -fact liftsv_inv_nil1_aux: ∀f,X,Y. ⬆*[f] X ≡ Y → X = ◊ → Y = ◊. +fact liftsv_inv_nil1_aux: ∀f,X,Y. ⬆*[f] X ≘ Y → X = ◊ → Y = ◊. #f #X #Y * -X -Y // #T1s #T2s #T1 #T2 #_ #_ #H destruct qed-. (* Basic_2A1: includes: liftv_inv_nil1 *) -lemma liftsv_inv_nil1: ∀f,Y. ⬆*[f] ◊ ≡ Y → Y = ◊. +lemma liftsv_inv_nil1: ∀f,Y. ⬆*[f] ◊ ≘ Y → Y = ◊. /2 width=5 by liftsv_inv_nil1_aux/ qed-. -fact liftsv_inv_cons1_aux: ∀f:rtmap. ∀X,Y. ⬆*[f] X ≡ Y → +fact liftsv_inv_cons1_aux: ∀f:rtmap. ∀X,Y. ⬆*[f] X ≘ Y → ∀T1,T1s. X = T1 @ T1s → - ∃∃T2,T2s. ⬆*[f] T1 ≡ T2 & ⬆*[f] T1s ≡ T2s & + ∃∃T2,T2s. ⬆*[f] T1 ≘ T2 & ⬆*[f] T1s ≘ T2s & Y = T2 @ T2s. #f #X #Y * -X -Y [ #U1 #U1s #H destruct @@ -53,22 +53,22 @@ fact liftsv_inv_cons1_aux: ∀f:rtmap. ∀X,Y. ⬆*[f] X ≡ Y → qed-. (* Basic_2A1: includes: liftv_inv_cons1 *) -lemma liftsv_inv_cons1: ∀f:rtmap. ∀T1,T1s,Y. ⬆*[f] T1 @ T1s ≡ Y → - ∃∃T2,T2s. ⬆*[f] T1 ≡ T2 & ⬆*[f] T1s ≡ T2s & +lemma liftsv_inv_cons1: ∀f:rtmap. ∀T1,T1s,Y. ⬆*[f] T1 @ T1s ≘ Y → + ∃∃T2,T2s. ⬆*[f] T1 ≘ T2 & ⬆*[f] T1s ≘ T2s & Y = T2 @ T2s. /2 width=3 by liftsv_inv_cons1_aux/ qed-. -fact liftsv_inv_nil2_aux: ∀f,X,Y. ⬆*[f] X ≡ Y → Y = ◊ → X = ◊. +fact liftsv_inv_nil2_aux: ∀f,X,Y. ⬆*[f] X ≘ Y → Y = ◊ → X = ◊. #f #X #Y * -X -Y // #T1s #T2s #T1 #T2 #_ #_ #H destruct qed-. -lemma liftsv_inv_nil2: ∀f,X. ⬆*[f] X ≡ ◊ → X = ◊. +lemma liftsv_inv_nil2: ∀f,X. ⬆*[f] X ≘ ◊ → X = ◊. /2 width=5 by liftsv_inv_nil2_aux/ qed-. -fact liftsv_inv_cons2_aux: ∀f:rtmap. ∀X,Y. ⬆*[f] X ≡ Y → +fact liftsv_inv_cons2_aux: ∀f:rtmap. ∀X,Y. ⬆*[f] X ≘ Y → ∀T2,T2s. Y = T2 @ T2s → - ∃∃T1,T1s. ⬆*[f] T1 ≡ T2 & ⬆*[f] T1s ≡ T2s & + ∃∃T1,T1s. ⬆*[f] T1 ≘ T2 & ⬆*[f] T1s ≘ T2s & X = T1 @ T1s. #f #X #Y * -X -Y [ #U2 #U2s #H destruct @@ -76,14 +76,14 @@ fact liftsv_inv_cons2_aux: ∀f:rtmap. ∀X,Y. ⬆*[f] X ≡ Y → ] qed-. -lemma liftsv_inv_cons2: ∀f:rtmap. ∀X,T2,T2s. ⬆*[f] X ≡ T2 @ T2s → - ∃∃T1,T1s. ⬆*[f] T1 ≡ T2 & ⬆*[f] T1s ≡ T2s & +lemma liftsv_inv_cons2: ∀f:rtmap. ∀X,T2,T2s. ⬆*[f] X ≘ T2 @ T2s → + ∃∃T1,T1s. ⬆*[f] T1 ≘ T2 & ⬆*[f] T1s ≘ T2s & X = T1 @ T1s. /2 width=3 by liftsv_inv_cons2_aux/ qed-. (* Basic_1: was: lifts1_flat (left to right) *) -lemma lifts_inv_applv1: ∀f:rtmap. ∀V1s,U1,T2. ⬆*[f] Ⓐ V1s.U1 ≡ T2 → - ∃∃V2s,U2. ⬆*[f] V1s ≡ V2s & ⬆*[f] U1 ≡ U2 & +lemma lifts_inv_applv1: ∀f:rtmap. ∀V1s,U1,T2. ⬆*[f] Ⓐ V1s.U1 ≘ T2 → + ∃∃V2s,U2. ⬆*[f] V1s ≘ V2s & ⬆*[f] U1 ≘ U2 & T2 = Ⓐ V2s.U2. #f #V1s elim V1s -V1s [ /3 width=5 by ex3_2_intro, liftsv_nil/ @@ -93,8 +93,8 @@ lemma lifts_inv_applv1: ∀f:rtmap. ∀V1s,U1,T2. ⬆*[f] Ⓐ V1s.U1 ≡ T2 → ] qed-. -lemma lifts_inv_applv2: ∀f:rtmap. ∀V2s,U2,T1. ⬆*[f] T1 ≡ Ⓐ V2s.U2 → - ∃∃V1s,U1. ⬆*[f] V1s ≡ V2s & ⬆*[f] U1 ≡ U2 & +lemma lifts_inv_applv2: ∀f:rtmap. ∀V2s,U2,T1. ⬆*[f] T1 ≘ Ⓐ V2s.U2 → + ∃∃V1s,U1. ⬆*[f] V1s ≘ V2s & ⬆*[f] U1 ≘ U2 & T1 = Ⓐ V1s.U1. #f #V2s elim V2s -V2s [ /3 width=5 by ex3_2_intro, liftsv_nil/ @@ -107,7 +107,7 @@ qed-. (* Basic properties *********************************************************) (* Basic_2A1: includes: liftv_total *) -lemma liftsv_total: ∀f. ∀T1s:list term. ∃T2s. ⬆*[f] T1s ≡ T2s. +lemma liftsv_total: ∀f. ∀T1s:list term. ∃T2s. ⬆*[f] T1s ≘ T2s. #f #T1s elim T1s -T1s [ /2 width=2 by liftsv_nil, ex_intro/ | #T1 #T1s * #T2s #HT12s @@ -116,15 +116,15 @@ lemma liftsv_total: ∀f. ∀T1s:list term. ∃T2s. ⬆*[f] T1s ≡ T2s. qed-. (* Basic_1: was: lifts1_flat (right to left) *) -lemma lifts_applv: ∀f:rtmap. ∀V1s,V2s. ⬆*[f] V1s ≡ V2s → - ∀T1,T2. ⬆*[f] T1 ≡ T2 → - ⬆*[f] Ⓐ V1s.T1 ≡ Ⓐ V2s.T2. +lemma lifts_applv: ∀f:rtmap. ∀V1s,V2s. ⬆*[f] V1s ≘ V2s → + ∀T1,T2. ⬆*[f] T1 ≘ T2 → + ⬆*[f] Ⓐ V1s.T1 ≘ Ⓐ V2s.T2. #f #V1s #V2s #H elim H -V1s -V2s /3 width=1 by lifts_flat/ qed. -lemma liftsv_split_trans: ∀f,T1s,T2s. ⬆*[f] T1s ≡ T2s → - ∀f1,f2. f2 ⊚ f1 ≡ f → - ∃∃Ts. ⬆*[f1] T1s ≡ Ts & ⬆*[f2] Ts ≡ T2s. +lemma liftsv_split_trans: ∀f,T1s,T2s. ⬆*[f] T1s ≘ T2s → + ∀f1,f2. f2 ⊚ f1 ≘ f → + ∃∃Ts. ⬆*[f1] T1s ≘ Ts & ⬆*[f2] Ts ≘ T2s. #f #T1s #T2s #H elim H -T1s -T2s [ /2 width=3 by liftsv_nil, ex2_intro/ | #T1s #T2s #T1 #T2 #HT12 #_ #IH #f1 #f2 #Hf diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_weight.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_weight.ma index c6ad5b974..3504082ba 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_weight.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_weight.ma @@ -20,6 +20,6 @@ include "basic_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/basic_2/relocation/lifts_weight_bind.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_weight_bind.ma index 152ecbba1..f15143117 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_weight_bind.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_weight_bind.ma @@ -20,6 +20,6 @@ include "basic_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/basic_2/relocation/lreq.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/lreq.ma index 1ec062b82..14bc0576d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/lreq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/lreq.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "basic_2/notation/relations/doteqsn_3.ma". +include "basic_2/notation/relations/ideqsn_3.ma". include "basic_2/syntax/ceq_ext.ma". include "basic_2/relocation/lexs.ma". @@ -23,18 +23,18 @@ definition lreq: relation3 rtmap lenv lenv ≝ lexs ceq_ext cfull. interpretation "ranged equivalence (local environment)" - 'DotEqSn f L1 L2 = (lreq f L1 L2). + 'IdEqSn f L1 L2 = (lreq f L1 L2). (* Basic properties *********************************************************) -lemma lreq_eq_repl_back: ∀L1,L2. eq_repl_back … (λf. L1 ≐[f] L2). +lemma lreq_eq_repl_back: ∀L1,L2. eq_repl_back … (λf. L1 ≡[f] L2). /2 width=3 by lexs_eq_repl_back/ qed-. -lemma lreq_eq_repl_fwd: ∀L1,L2. eq_repl_fwd … (λf. L1 ≐[f] L2). +lemma lreq_eq_repl_fwd: ∀L1,L2. eq_repl_fwd … (λf. L1 ≡[f] L2). /2 width=3 by lexs_eq_repl_fwd/ qed-. -lemma sle_lreq_trans: ∀f2,L1,L2. L1 ≐[f2] L2 → - ∀f1. f1 ⊆ f2 → L1 ≐[f1] L2. +lemma sle_lreq_trans: ∀f2,L1,L2. L1 ≡[f2] L2 → + ∀f1. f1 ⊆ f2 → L1 ≡[f1] L2. /2 width=3 by sle_lexs_trans/ qed-. (* Basic_2A1: includes: lreq_refl *) @@ -48,54 +48,54 @@ lemma lreq_sym: ∀f. symmetric … (lreq f). (* Basic inversion lemmas ***************************************************) (* Basic_2A1: includes: lreq_inv_atom1 *) -lemma lreq_inv_atom1: ∀f,Y. ⋆ ≐[f] Y → Y = ⋆. +lemma lreq_inv_atom1: ∀f,Y. ⋆ ≡[f] Y → Y = ⋆. /2 width=4 by lexs_inv_atom1/ qed-. (* Basic_2A1: includes: lreq_inv_pair1 *) -lemma lreq_inv_next1: ∀g,J,K1,Y. K1.ⓘ{J} ≐[⫯g] Y → - ∃∃K2. K1 ≐[g] K2 & Y = K2.ⓘ{J}. +lemma lreq_inv_next1: ∀g,J,K1,Y. K1.ⓘ{J} ≡[⫯g] Y → + ∃∃K2. K1 ≡[g] K2 & Y = K2.ⓘ{J}. #g #J #K1 #Y #H elim (lexs_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 lreq_inv_push1: ∀g,J1,K1,Y. K1.ⓘ{J1} ≐[↑g] Y → - ∃∃J2,K2. K1 ≐[g] K2 & Y = K2.ⓘ{J2}. +lemma lreq_inv_push1: ∀g,J1,K1,Y. K1.ⓘ{J1} ≡[↑g] Y → + ∃∃J2,K2. K1 ≡[g] K2 & Y = K2.ⓘ{J2}. #g #J1 #K1 #Y #H elim (lexs_inv_push1 … H) -H /2 width=4 by ex2_2_intro/ qed-. (* Basic_2A1: includes: lreq_inv_atom2 *) -lemma lreq_inv_atom2: ∀f,X. X ≐[f] ⋆ → X = ⋆. +lemma lreq_inv_atom2: ∀f,X. X ≡[f] ⋆ → X = ⋆. /2 width=4 by lexs_inv_atom2/ qed-. (* Basic_2A1: includes: lreq_inv_pair2 *) -lemma lreq_inv_next2: ∀g,J,X,K2. X ≐[⫯g] K2.ⓘ{J} → - ∃∃K1. K1 ≐[g] K2 & X = K1.ⓘ{J}. +lemma lreq_inv_next2: ∀g,J,X,K2. X ≡[⫯g] K2.ⓘ{J} → + ∃∃K1. K1 ≡[g] K2 & X = K1.ⓘ{J}. #g #J #X #K2 #H elim (lexs_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 lreq_inv_push2: ∀g,J2,X,K2. X ≐[↑g] K2.ⓘ{J2} → - ∃∃J1,K1. K1 ≐[g] K2 & X = K1.ⓘ{J1}. +lemma lreq_inv_push2: ∀g,J2,X,K2. X ≡[↑g] K2.ⓘ{J2} → + ∃∃J1,K1. K1 ≡[g] K2 & X = K1.ⓘ{J1}. #g #J2 #X #K2 #H elim (lexs_inv_push2 … H) -H /2 width=4 by ex2_2_intro/ qed-. (* Basic_2A1: includes: lreq_inv_pair *) -lemma lreq_inv_next: ∀f,I1,I2,L1,L2. L1.ⓘ{I1} ≐[⫯f] L2.ⓘ{I2} → - L1 ≐[f] L2 ∧ I1 = I2. +lemma lreq_inv_next: ∀f,I1,I2,L1,L2. L1.ⓘ{I1} ≡[⫯f] L2.ⓘ{I2} → + L1 ≡[f] L2 ∧ I1 = I2. #f #I1 #I2 #L1 #L2 #H elim (lexs_inv_next … H) -H /3 width=3 by ceq_ext_inv_eq, conj/ qed-. (* Basic_2A1: includes: lreq_inv_succ *) -lemma lreq_inv_push: ∀f,I1,I2,L1,L2. L1.ⓘ{I1} ≐[↑f] L2.ⓘ{I2} → L1 ≐[f] L2. +lemma lreq_inv_push: ∀f,I1,I2,L1,L2. L1.ⓘ{I1} ≡[↑f] L2.ⓘ{I2} → L1 ≡[f] L2. #f #I1 #I2 #L1 #L2 #H elim (lexs_inv_push … H) -H /2 width=1 by conj/ qed-. -lemma lreq_inv_tl: ∀f,I,L1,L2. L1 ≐[⫱f] L2 → L1.ⓘ{I} ≐[f] L2.ⓘ{I}. +lemma lreq_inv_tl: ∀f,I,L1,L2. L1 ≡[⫱f] L2 → L1.ⓘ{I} ≡[f] L2.ⓘ{I}. /2 width=1 by lexs_inv_tl/ qed-. (* Basic_2A1: removed theorems 5: diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/lreq_length.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/lreq_length.ma index 69c4efa31..fcb54e71a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/lreq_length.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/lreq_length.ma @@ -20,5 +20,5 @@ include "basic_2/relocation/lreq.ma". (* Forward lemmas with length for local environments ************************) (* Basic_2A1: includes: lreq_fwd_length *) -lemma lreq_fwd_length: ∀f,L1,L2. L1 ≐[f] L2 → |L1| = |L2|. +lemma lreq_fwd_length: ∀f,L1,L2. L1 ≡[f] L2 → |L1| = |L2|. /2 width=4 by lexs_fwd_length/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/lreq_lreq.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/lreq_lreq.ma index b2bf0385a..d0c06d0c7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/lreq_lreq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/lreq_lreq.ma @@ -28,10 +28,10 @@ theorem lreq_canc_sn: ∀f. left_cancellable … (lreq f). theorem lreq_canc_dx: ∀f. right_cancellable … (lreq f). /3 width=3 by lexs_canc_dx, lreq_trans, lreq_sym/ qed-. -theorem lreq_join: ∀f1,L1,L2. L1 ≐[f1] L2 → ∀f2. L1 ≐[f2] L2 → - ∀f. f1 ⋓ f2 ≡ f → L1 ≐[f] L2. +theorem lreq_join: ∀f1,L1,L2. L1 ≡[f1] L2 → ∀f2. L1 ≡[f2] L2 → + ∀f. f1 ⋓ f2 ≘ f → L1 ≡[f] L2. /2 width=5 by lexs_join/ qed-. -theorem lreq_meet: ∀f1,L1,L2. L1 ≐[f1] L2 → ∀f2. L1 ≐[f2] L2 → - ∀f. f1 ⋒ f2 ≡ f → L1 ≐[f] L2. +theorem lreq_meet: ∀f1,L1,L2. L1 ≡[f1] L2 → ∀f2. L1 ≡[f2] L2 → + ∀f. f1 ⋒ f2 ≘ f → L1 ≡[f] L2. /2 width=5 by lexs_meet/ qed-. 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 638bcde72..e4abc29d5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs.ma @@ -19,7 +19,7 @@ include "basic_2/reduction/cnr.ma". (* Basic_1: includes: pr1_pr0 *) definition cprs: relation4 genv lenv term term ≝ - λG. LTC … (cpr G). + λG. CTC … (cpr G). interpretation "context-sensitive parallel computation (term)" 'PRedStar G L T1 T2 = (cprs G L T1 T2). @@ -60,7 +60,7 @@ lemma cprs_strap2: ∀G,L,T1,T,T2. normalize /2 width=3 by TC_strap/ qed-. lemma lsubr_cprs_trans: ∀G. lsub_trans … (cprs G) lsubr. -/3 width=5 by lsubr_cpr_trans, LTC_lsub_trans/ +/3 width=5 by lsubr_cpr_trans, CTC_lsub_trans/ qed-. (* Basic_1: was: pr3_pr1 *) @@ -85,7 +85,7 @@ lemma cprs_flat_sn: ∀I,G,L,T1,T2. ⦃G, L⦄ ⊢ T1 ➡ T2 → ∀V1,V2. ⦃G, /3 width=3 by cprs_strap1, cpr_cprs, cpr_pair_sn, cpr_flat/ qed. -lemma cprs_zeta: ∀G,L,V,T1,T,T2. ⬆[0, 1] T2 ≡ T → +lemma cprs_zeta: ∀G,L,V,T1,T,T2. ⬆[0, 1] T2 ≘ T → ⦃G, L.ⓓV⦄ ⊢ T1 ➡* T → ⦃G, L⦄ ⊢ +ⓓV.T1 ➡* T2. #G #L #V #T1 #T #T2 #HT2 #H @(cprs_ind_dx … H) -T1 /3 width=3 by cprs_strap2, cpr_cprs, cpr_bind, cpr_zeta/ @@ -104,7 +104,7 @@ lemma cprs_beta_dx: ∀a,G,L,V1,V2,W1,W2,T1,T2. qed. lemma cprs_theta_dx: ∀a,G,L,V1,V,V2,W1,W2,T1,T2. - ⦃G, L⦄ ⊢ V1 ➡ V → ⬆[0, 1] V ≡ V2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ➡* T2 → + ⦃G, L⦄ ⊢ V1 ➡ V → ⬆[0, 1] V ≘ V2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ➡* T2 → ⦃G, L⦄ ⊢ W1 ➡ W2 → ⦃G, L⦄ ⊢ ⓐV1.ⓓ{a}W1.T1 ➡* ⓓ{a}W2.ⓐV2.T2. #a #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV1 #HV2 * -T2 /4 width=9 by cprs_strap1, cpr_cprs, cprs_bind_dx, cprs_flat_dx, cpr_theta/ 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 60df2d785..76e2da87e 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 @@ -59,14 +59,14 @@ theorem cprs_beta: ∀a,G,L,V1,V2,W1,W2,T1,T2. qed. theorem cprs_theta_rc: ∀a,G,L,V1,V,V2,W1,W2,T1,T2. - ⦃G, L⦄ ⊢ V1 ➡ V → ⬆[0, 1] V ≡ V2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ➡* T2 → + ⦃G, L⦄ ⊢ V1 ➡ V → ⬆[0, 1] V ≘ V2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ➡* T2 → ⦃G, L⦄ ⊢ W1 ➡* W2 → ⦃G, L⦄ ⊢ ⓐV1.ⓓ{a}W1.T1 ➡* ⓓ{a}W2.ⓐV2.T2. #a #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV1 #HV2 #HT12 #H @(cprs_ind … H) -W2 /3 width=5 by cprs_trans, cprs_theta_dx, cprs_bind_dx/ qed. theorem cprs_theta: ∀a,G,L,V1,V,V2,W1,W2,T1,T2. - ⬆[0, 1] V ≡ V2 → ⦃G, L⦄ ⊢ W1 ➡* W2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ➡* T2 → + ⬆[0, 1] V ≘ V2 → ⦃G, L⦄ ⊢ W1 ➡* W2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ➡* T2 → ⦃G, L⦄ ⊢ V1 ➡* V → ⦃G, L⦄ ⊢ ⓐV1.ⓓ{a}W1.T1 ➡* ⓓ{a}W2.ⓐV2.T2. #a #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV2 #HW12 #HT12 #H @(cprs_ind_dx … H) -V1 /3 width=3 by cprs_trans, cprs_theta_rc, cprs_flat_dx/ @@ -80,7 +80,7 @@ lemma cprs_inv_appl1: ∀G,L,V1,T1,U2. ⦃G, L⦄ ⊢ ⓐV1.T1 ➡* U2 → U2 = ⓐV2. T2 | ∃∃a,W,T. ⦃G, L⦄ ⊢ T1 ➡* ⓛ{a}W.T & ⦃G, L⦄ ⊢ ⓓ{a}ⓝW.V1.T ➡* U2 - | ∃∃a,V0,V2,V,T. ⦃G, L⦄ ⊢ V1 ➡* V0 & ⬆[0,1] V0 ≡ V2 & + | ∃∃a,V0,V2,V,T. ⦃G, L⦄ ⊢ V1 ➡* V0 & ⬆[0,1] V0 ≘ V2 & ⦃G, L⦄ ⊢ T1 ➡* ⓓ{a}V.T & ⦃G, L⦄ ⊢ ⓓ{a}V.ⓐV2.T ➡* U2. #G #L #V1 #T1 #U2 #H @(cprs_ind … H) -U2 /3 width=5 by or3_intro0, ex3_2_intro/ @@ -125,7 +125,7 @@ lemma cpr_bind2: ∀G,L,V1,V2. ⦃G, L⦄ ⊢ V1 ➡ V2 → ∀I,T1,T2. ⦃G, L. (* Basic_1: was only: pr3_pr2_pr3_t pr3_wcpr0_t *) lemma lpr_cprs_trans: ∀G. b_rs_transitive … (cpr G) (λ_. lpr G). -#G @b_c_trans_LTC1 /2 width=3 by lpr_cpr_trans/ (**) (* full auto fails *) +#G @b_c_trans_CTC1 /2 width=3 by lpr_cpr_trans/ (**) (* full auto fails *) qed-. (* Basic_1: was: pr3_strip *) diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_lift.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_lift.ma index 1f12f5557..7a49ed3c6 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_lift.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cprs_lift.ma @@ -21,8 +21,8 @@ include "basic_2/computation/cprs.ma". (* Note: apparently this was missing in basic_1 *) lemma cprs_delta: ∀G,L,K,V,V2,i. - ⬇[i] L ≡ K.ⓓV → ⦃G, K⦄ ⊢ V ➡* V2 → - ∀W2. ⬆[0, i + 1] V2 ≡ W2 → ⦃G, L⦄ ⊢ #i ➡* W2. + ⬇[i] L ≘ K.ⓓV → ⦃G, K⦄ ⊢ V ➡* V2 → + ∀W2. ⬆[0, i + 1] V2 ≘ W2 → ⦃G, L⦄ ⊢ #i ➡* W2. #G #L #K #V #V2 #i #HLK #H elim H -V2 [ /3 width=6 by cpr_cprs, cpr_delta/ ] #V1 #V2 #_ #HV12 #IHV1 #W2 #HVW2 lapply (drop_fwd_drop2 … HLK) -HLK #HLK @@ -34,8 +34,8 @@ qed. (* Basic_1: was: pr3_gen_lref *) lemma cprs_inv_lref1: ∀G,L,T2,i. ⦃G, L⦄ ⊢ #i ➡* T2 → T2 = #i ∨ - ∃∃K,V1,T1. ⬇[i] L ≡ K.ⓓV1 & ⦃G, K⦄ ⊢ V1 ➡* T1 & - ⬆[0, i + 1] T1 ≡ T2. + ∃∃K,V1,T1. ⬇[i] L ≘ K.ⓓV1 & ⦃G, K⦄ ⊢ V1 ➡* T1 & + ⬆[0, i + 1] T1 ≘ T2. #G #L #T2 #i #H @(cprs_ind … H) -T2 /2 width=1 by or_introl/ #T #T2 #_ #HT2 * [ #H destruct @@ -52,9 +52,9 @@ qed-. (* Basic_1: was: pr3_lift *) lemma cprs_lift: ∀G. d_liftable (cprs G). -/3 width=10 by d_liftable_LTC, cpr_lift/ qed. +/3 width=10 by d_liftable_CTC, cpr_lift/ qed. (* Basic_1: was: pr3_gen_lift *) lemma cprs_inv_lift1: ∀G. d_deliftable_sn (cprs G). -/3 width=6 by d_deliftable_sn_LTC, cpr_inv_lift1/ +/3 width=6 by d_deliftable_sn_CTC, cpr_inv_lift1/ qed-. 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 2a60dd3d4..547c6d0d5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs.ma @@ -19,7 +19,7 @@ include "basic_2/rt_transition/cpx.ma". (* UNCOUNTED CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS ************) definition cpxs: sh → relation4 genv lenv term term ≝ - λh,G. LTC … (cpx h G). + λh,G. CTC … (cpx h G). interpretation "uncounted context-sensitive parallel rt-computation (term)" 'PRedTyStar h G L T1 T2 = (cpxs h G L T1 T2). @@ -89,7 +89,7 @@ lemma cpxs_pair_sn: ∀h,I,G,L,V1,V2. ⦃G, L⦄ ⊢ V1 ⬈*[h] V2 → /3 width=3 by cpxs_strap1, cpx_pair_sn/ qed. -lemma cpxs_zeta: ∀h,G,L,V,T1,T,T2. ⬆*[1] T2 ≡ T → +lemma cpxs_zeta: ∀h,G,L,V,T1,T,T2. ⬆*[1] T2 ≘ T → ⦃G, L.ⓓV⦄ ⊢ T1 ⬈*[h] T → ⦃G, L⦄ ⊢ +ⓓV.T1 ⬈*[h] T2. #h #G #L #V #T1 #T #T2 #HT2 #H @(cpxs_ind_dx … H) -T1 /3 width=3 by cpxs_strap2, cpx_cpxs, cpx_bind, cpx_zeta/ @@ -116,7 +116,7 @@ lemma cpxs_beta_dx: ∀h,p,G,L,V1,V2,W1,W2,T1,T2. 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⦄ ⊢ 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/ 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 74efaded1..880a3d9b8 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 @@ -51,7 +51,7 @@ theorem cpxs_beta: ∀h,p,G,L,V1,V2,W1,W2,T1,T2. 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⦄ ⊢ 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 @@ -59,7 +59,7 @@ theorem cpxs_theta_rc: ∀h,p,G,L,V1,V,V2,W1,W2,T1,T2. qed. theorem cpxs_theta: ∀h,p,G,L,V1,V,V2,W1,W2,T1,T2. - ⬆*[1] V ≡ V2 → ⦃G, L⦄ ⊢ W1 ⬈*[h] W2 → + ⬆*[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 @@ -72,7 +72,7 @@ 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 & + | ∃∃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 * * 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 172dcc3fb..0fd54e95a 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 @@ -21,7 +21,7 @@ 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. + ∀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 @@ -31,7 +31,7 @@ lemma cpxs_delta: ∀h,I,G,K,V1,V2. ⦃G, K⦄ ⊢ V1 ⬈*[h] V2 → 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. + ∀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 @@ -42,8 +42,8 @@ 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 @@ -56,7 +56,7 @@ qed. 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 & + ∃∃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 * @@ -71,7 +71,7 @@ qed-. 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 @@ -86,8 +86,8 @@ qed-. (* Basic_2A1: was: cpxs_inv_lref1 *) 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] T1 ≡ T2. + ∃∃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 * [ #H destruct @@ -104,7 +104,7 @@ qed-. (* Basic_2A1: includes: cpxs_lift *) lemma cpxs_lifts_sn: ∀h,G. d_liftable2_sn … lifts (cpxs h G). -/3 width=10 by cpx_lifts_sn, cpxs_strap1, d2_liftable_sn_LTC/ qed-. +/3 width=10 by cpx_lifts_sn, cpxs_strap1, d2_liftable_sn_CTC/ qed-. lemma cpxs_lifts_bi: ∀h,G. d_liftable2_bi … lifts (cpxs h G). /3 width=12 by cpxs_lifts_sn, d_liftable2_sn_bi, lifts_mono/ qed-. @@ -113,7 +113,7 @@ lemma cpxs_lifts_bi: ∀h,G. d_liftable2_bi … lifts (cpxs h G). (* Basic_2A1: includes: cpxs_inv_lift1 *) lemma cpxs_inv_lifts_sn: ∀h,G. d_deliftable2_sn … lifts (cpxs h G). -/3 width=6 by d2_deliftable_sn_LTC, cpx_inv_lifts_sn/ qed-. +/3 width=6 by d2_deliftable_sn_CTC, cpx_inv_lifts_sn/ qed-. lemma cpxs_inv_lifts_bi: ∀h,G. d_deliftable2_bi … lifts (cpxs h G). /3 width=12 by cpxs_inv_lifts_sn, d_deliftable2_sn_bi, lifts_inj/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_lfpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_lfpx.ma index bd1f44a92..0ae68d2c2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_lfpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_lfpx.ma @@ -22,7 +22,7 @@ include "basic_2/rt_computation/cpxs_cpxs.ma". (* Properties with uncounted parallel rt-transition on referred entries *****) lemma lfpx_cpxs_conf: ∀h,G. s_r_confluent1 … (cpxs h G) (lfpx h G). -/3 width=5 by lfpx_cpx_conf, s_r_conf1_LTC1/ qed-. +/3 width=5 by lfpx_cpx_conf, s_r_conf1_CTC1/ qed-. lemma lfpx_cpx_trans: ∀h,G. s_r_transitive … (cpx h G) (lfpx h G). #h #G #L2 #T1 #T2 #H @(cpx_ind … H) -G -L2 -T1 -T2 // @@ -53,7 +53,7 @@ lemma lfpx_cpx_trans: ∀h,G. s_r_transitive … (cpx h G) (lfpx h G). qed. lemma lfpx_cpxs_trans: ∀h,G. s_rs_transitive … (cpx h G) (lfpx h G). -/3 width=6 by lfpx_cpx_conf, lfpx_cpx_trans, s_r_trans_LTC1/ +/3 width=6 by lfpx_cpx_conf, lfpx_cpx_trans, s_r_trans_CTC1/ qed-. (* Advanced properties ******************************************************) 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 c4fcab186..ff4aa6c09 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 @@ -38,5 +38,5 @@ lemma lpx_cpx_trans: ∀h,G. s_r_transitive … (cpx h G) (λ_.lpx h G). qed-. lemma lpx_cpxs_trans: ∀h,G. s_rs_transitive … (cpx h G) (λ_.lpx h G). -#h #G @s_r_trans_LTC1 /2 width=3 by lpx_cpx_trans/ (**) (* full auto fails *) +#h #G @s_r_trans_CTC1 /2 width=3 by lpx_cpx_trans/ (**) (* full auto fails *) qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_lsubr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_lsubr.ma index 163f7a109..c4844c2e1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_lsubr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_lsubr.ma @@ -20,5 +20,5 @@ include "basic_2/rt_computation/cpxs.ma". (* Properties with restricted refinement for local environments *************) lemma lsubr_cpxs_trans: ∀h,G. lsub_trans … (cpxs h G) lsubr. -/3 width=5 by lsubr_cpx_trans, LTC_lsub_trans/ +/3 width=5 by lsubr_cpx_trans, CTC_lsub_trans/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_theq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_theq.ma index 8a52882a2..580f90ab2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_theq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_theq.ma @@ -32,8 +32,8 @@ qed-. (* Note: probably this is an inversion lemma *) (* Basic_2A1: was: cpxs_fwd_delta *) -lemma cpxs_fwd_delta_drops: ∀h,o,I,G,L,K,V1,i. ⬇*[i] L ≡ K.ⓑ{I}V1 → - ∀V2. ⬆*[⫯i] V1 ≡ V2 → +lemma cpxs_fwd_delta_drops: ∀h,o,I,G,L,K,V1,i. ⬇*[i] L ≘ K.ⓑ{I}V1 → + ∀V2. ⬆*[⫯i] V1 ≘ V2 → ∀U. ⦃G, L⦄ ⊢ #i ⬈*[h] U → #i ⩳[h, o] U ∨ ⦃G, L⦄ ⊢ V2 ⬈*[h] U. #h #o #I #G #L #K #V1 #i #HLK #V2 #HV12 #U #H @@ -58,7 +58,7 @@ lemma cpxs_fwd_beta: ∀h,o,p,G,L,V,W,T,U. ⦃G, L⦄ ⊢ ⓐV.ⓛ{p}W.T ⬈*[h] qed-. lemma cpxs_fwd_theta: ∀h,o,p,G,L,V1,V,T,U. ⦃G, L⦄ ⊢ ⓐV1.ⓓ{p}V.T ⬈*[h] U → - ∀V2. ⬆*[1] V1 ≡ V2 → ⓐV1.ⓓ{p}V.T ⩳[h, o] U ∨ + ∀V2. ⬆*[1] V1 ≘ V2 → ⓐV1.ⓓ{p}V.T ⩳[h, o] U ∨ ⦃G, L⦄ ⊢ ⓓ{p}V.ⓐV2.T ⬈*[h] U. #h #o #p #G #L #V1 #V #T #U #H #V2 #HV12 elim (cpxs_inv_appl1 … H) -H * diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_theq_vector.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_theq_vector.ma index bab5c447e..a1bf1e5b8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_theq_vector.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs_theq_vector.ma @@ -44,8 +44,8 @@ elim (cpxs_inv_appl1 … H) -H * qed-. (* Basic_2A1: was: cpxs_fwd_delta_vector *) -lemma cpxs_fwd_delta_drops_vector: ∀h,o,I,G,L,K,V1,i. ⬇*[i] L ≡ K.ⓑ{I}V1 → - ∀V2. ⬆*[⫯i] V1 ≡ V2 → +lemma cpxs_fwd_delta_drops_vector: ∀h,o,I,G,L,K,V1,i. ⬇*[i] L ≘ K.ⓑ{I}V1 → + ∀V2. ⬆*[⫯i] V1 ≘ V2 → ∀Vs,U. ⦃G, L⦄ ⊢ ⒶVs.#i ⬈*[h] U → ⒶVs.#i ⩳[h, o] U ∨ ⦃G, L⦄ ⊢ ⒶVs.V2 ⬈*[h] U. #h #o #I #G #L #K #V1 #i #HLK #V2 #HV12 #Vs elim Vs -Vs /2 width=5 by cpxs_fwd_delta_drops/ @@ -94,7 +94,7 @@ elim (cpxs_inv_appl1 … H) -H * qed-. (* Basic_1: was just: pr3_iso_appls_abbr *) -lemma cpxs_fwd_theta_vector: ∀h,o,G,L,V1b,V2b. ⬆*[1] V1b ≡ V2b → +lemma cpxs_fwd_theta_vector: ∀h,o,G,L,V1b,V2b. ⬆*[1] V1b ≘ V2b → ∀p,V,T,U. ⦃G, L⦄ ⊢ ⒶV1b.ⓓ{p}V.T ⬈*[h] U → ⒶV1b.ⓓ{p}V.T ⩳[h, o] U ∨ ⦃G, L⦄ ⊢ ⓓ{p}V.ⒶV2b.T ⬈*[h] U. #h #o #G #L #V1b #V2b * -V1b -V2b /3 width=1 by or_intror/ 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 badaae1ca..b836706dd 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 @@ -51,7 +51,7 @@ qed. (* Basic_1: was just: sn3_abbr *) (* Basic_2A1: was: csx_lref_bind *) -lemma csx_lref_pair: ∀h,o,I,G,L,K,V,i. ⬇*[i] L ≡ K.ⓑ{I}V → +lemma csx_lref_pair: ∀h,o,I,G,L,K,V,i. ⬇*[i] L ≘ K.ⓑ{I}V → ⦃G, K⦄ ⊢ ⬈*[h, o] 𝐒⦃V⦄ → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃#i⦄. #h #o #I #G #L #K #V #i #HLK #HV @csx_intro #X #H #Hi elim (cpx_inv_lref1_drops … H) -H @@ -66,7 +66,7 @@ qed. (* Basic_1: was: sn3_gen_def *) (* Basic_2A1: was: csx_inv_lref_bind *) -lemma csx_inv_lref_pair: ∀h,o,I,G,L,K,V,i. ⬇*[i] L ≡ K.ⓑ{I}V → +lemma csx_inv_lref_pair: ∀h,o,I,G,L,K,V,i. ⬇*[i] L ≘ K.ⓑ{I}V → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃#i⦄ → ⦃G, K⦄ ⊢ ⬈*[h, o] 𝐒⦃V⦄. #h #o #I #G #L #K #V #i #HLK #Hi elim (lifts_total V (𝐔❴⫯i❵)) @@ -74,9 +74,9 @@ elim (lifts_total V (𝐔❴⫯i❵)) qed-. lemma csx_inv_lref: ∀h,o,G,L,i. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃#i⦄ → - ∨∨ ⬇*[Ⓕ, 𝐔❴i❵] L ≡ ⋆ - | ∃∃I,K. ⬇*[i] L ≡ K.ⓤ{I} - | ∃∃I,K,V. ⬇*[i] L ≡ K.ⓑ{I}V & ⦃G, K⦄ ⊢ ⬈*[h, o] 𝐒⦃V⦄. + ∨∨ ⬇*[Ⓕ, 𝐔❴i❵] L ≘ ⋆ + | ∃∃I,K. ⬇*[i] L ≘ K.ⓤ{I} + | ∃∃I,K,V. ⬇*[i] L ≘ K.ⓑ{I}V & ⦃G, K⦄ ⊢ ⬈*[h, o] 𝐒⦃V⦄. #h #o #G #L #i #H elim (drops_F_uni L i) /2 width=1 by or3_intro0/ * * /4 width=9 by csx_inv_lref_pair, 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 c010a31a9..6872763e0 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 @@ -37,8 +37,8 @@ elim (cpxs_fwd_beta_vector … o … H) -H #H ] qed. -lemma csx_applv_delta: ∀h,o,I,G,L,K,V1,i. ⬇*[i] L ≡ K.ⓑ{I}V1 → - ∀V2. ⬆*[⫯i] V1 ≡ V2 → +lemma csx_applv_delta: ∀h,o,I,G,L,K,V1,i. ⬇*[i] L ≘ K.ⓑ{I}V1 → + ∀V2. ⬆*[⫯i] V1 ≘ V2 → ∀Vs. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⒶVs.V2⦄ → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⒶVs.#i⦄. #h #o #I #G #L #K #V1 #i #HLK #V2 #HV12 #Vs elim Vs -Vs [ /4 width=11 by csx_inv_lifts, csx_lref_pair, drops_isuni_fwd_drop2/ @@ -55,7 +55,7 @@ lemma csx_applv_delta: ∀h,o,I,G,L,K,V1,i. ⬇*[i] L ≡ K.ⓑ{I}V1 → qed. (* Basic_1: was just: sn3_appls_abbr *) -lemma csx_applv_theta: ∀h,o,p,G,L,V1b,V2b. ⬆*[1] V1b ≡ V2b → +lemma csx_applv_theta: ∀h,o,p,G,L,V1b,V2b. ⬆*[1] V1b ≘ V2b → ∀V,T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓓ{p}V.ⒶV2b.T⦄ → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⒶV1b.ⓓ{p}V.T⦄. #h #o #p #G #L #V1b #V2b * -V1b -V2b /2 width=1 by/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lfpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lfpx.ma index 2067df1b3..44fc48fae 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lfpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/csx_lfpx.ma @@ -60,7 +60,7 @@ elim (cpx_inv_abbr1 … H1) -H1 * ] qed. -fact csx_appl_theta_aux: ∀h,o,p,G,L,U. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃U⦄ → ∀V1,V2. ⬆*[1] V1 ≡ V2 → +fact csx_appl_theta_aux: ∀h,o,p,G,L,U. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃U⦄ → ∀V1,V2. ⬆*[1] V1 ≘ V2 → ∀V,T. U = ⓓ{p}V.ⓐV2.T → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓐV1.ⓓ{p}V.T⦄. #h #o #p #G #L #X #H @(csx_ind_cpxs … H) -X #X #HVT #IHVT #V1 #V2 #HV12 #V #T #H destruct @@ -95,5 +95,5 @@ elim (cpx_inv_appl1 … HL) -HL * qed-. lemma csx_appl_theta: ∀h,o,p,G,L,V,V2,T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓓ{p}V.ⓐV2.T⦄ → - ∀V1. ⬆*[1] V1 ≡ V2 → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓐV1.ⓓ{p}V.T⦄. + ∀V1. ⬆*[1] V1 ≘ V2 → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓐV1.ⓓ{p}V.T⦄. /2 width=5 by csx_appl_theta_aux/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lfpxs_cpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lfpxs_cpxs.ma index 472e94af1..6c951084e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lfpxs_cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lfpxs_cpxs.ma @@ -25,12 +25,12 @@ lemma lfpxs_pair_refl: ∀h,G,L,V1,V2. ⦃G, L⦄ ⊢ V1 ⬈*[h] V2 → /2 width=1 by tc_lfxs_pair_refl/ qed. lemma lfpxs_cpx_trans: ∀h,G. s_r_transitive … (cpx h G) (lfpxs h G). -#h #G @s_r_trans_LTC2 @lfpx_cpxs_trans (**) (* auto fails *) +#h #G @s_r_trans_CTC2 @lfpx_cpxs_trans (**) (* auto fails *) qed-. -(* Note: lfpxs_cpx_conf does not hold, thus we cannot invoke s_r_trans_LTC1 *) +(* Note: lfpxs_cpx_conf does not hold, thus we cannot invoke s_r_trans_CTC1 *) lemma lfpxs_cpxs_trans: ∀h,G. s_rs_transitive … (cpx h G) (lfpxs h G). -#h #G @s_r_to_s_rs_trans @s_r_trans_LTC2 +#h #G @s_r_to_s_rs_trans @s_r_trans_CTC2 @s_rs_trans_TC1 /2 width=3 by lfpx_cpxs_trans/ (**) (* full auto too slow *) qed-. @@ -57,7 +57,7 @@ lemma cpxs_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 ) ∨ - ∃∃T2. ⦃G, L.ⓓV1⦄ ⊢ T1 ⬈*[h] T2 & ⬆*[1] U2 ≡ T2 & p = true. + ∃∃T2. ⦃G, L.ⓓV1⦄ ⊢ T1 ⬈*[h] T2 & ⬆*[1] U2 ≘ T2 & p = true. #h #p #G #L #V1 #T1 #U2 #H @(cpxs_ind … H) -U2 /3 width=5 by ex3_2_intro, or_introl/ #U0 #U2 #_ #HU02 * * [ #V0 #T0 #HV10 #HT10 #H destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lfpxs_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lfpxs_drops.ma index 7f4060200..a1c78b6fd 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lfpxs_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lfpxs_drops.ma @@ -21,14 +21,14 @@ include "basic_2/rt_transition/lfpx_drops.ma". (* Basic_2A1: uses: drop_lpxs_trans *) lemma drops_lfpxs_trans: ∀h,G. tc_dedropable_sn (cpx h G). -/3 width=5 by drops_lfpx_trans, dedropable_sn_LTC/ qed-. +/3 width=5 by drops_lfpx_trans, dedropable_sn_CTC/ qed-. (* Inversion lemmas with generic slicing for local environments *************) (* Basic_2A1: uses: lpxs_drop_conf *) lemma lfpxs_drops_conf: ∀h,G. tc_dropable_sn (cpx h G). -/3 width=5 by lfpx_drops_conf, dropable_sn_LTC/ qed-. +/3 width=5 by lfpx_drops_conf, dropable_sn_CTC/ qed-. (* Basic_2A1: uses: lpxs_drop_trans_O1 *) lemma lfpxs_drops_trans: ∀h,G. tc_dropable_dx (cpx h G). -/3 width=5 by lfpx_drops_trans, dropable_dx_LTC/ qed-. +/3 width=5 by lfpx_drops_trans, dropable_dx_CTC/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lfpxs_lpxs.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lfpxs_lpxs.ma index 21beea53b..79b41f785 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lfpxs_lpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lfpxs_lpxs.ma @@ -26,11 +26,11 @@ lemma lfpxs_lpxs: ∀h,G,L1,L2,T. ⦃G, L1⦄ ⊢ ⬈*[h] L2 → ⦃G, L1⦄ ⊢ /2 width=1 by tc_lfxs_lex/ qed. lemma lfpxs_lpxs_lfeq: ∀h,G,L1,L. ⦃G, L1⦄ ⊢ ⬈*[h] L → - ∀L2,T. L ≐[T] L2 → ⦃G, L1⦄ ⊢ ⬈*[h, T] L2. + ∀L2,T. L ≡[T] L2 → ⦃G, L1⦄ ⊢ ⬈*[h, T] L2. /2 width=3 by tc_lfxs_lex_lfeq/ qed. (* Inversion lemmas with uncounted parallel rt-computation for local envs ***) lemma lfpxs_inv_lpxs_lfeq: ∀h,G,L1,L2,T. ⦃G, L1⦄ ⊢ ⬈*[h, T] L2 → - ∃∃L. ⦃G, L1⦄ ⊢ ⬈*[h] L & L ≐[T] L2. + ∃∃L. ⦃G, L1⦄ ⊢ ⬈*[h] L & L ≡[T] L2. /3 width=5 by lfpx_fsge_comp, lpx_cpxs_trans, lfeq_cpx_trans, tc_lfxs_inv_lex_lfeq/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lfsx_csx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lfsx_csx.ma index 5310d8ab7..b34b79890 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lfsx_csx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lfsx_csx.ma @@ -44,7 +44,7 @@ qed. (* Basic_2A1: uses: lsx_lref_be *) lemma lfsx_lref_pair_drops: ∀h,o,G,K,V. ⦃G, K⦄ ⊢ ⬈*[h, o] 𝐒⦃V⦄ → G ⊢ ⬈*[h, o, V] 𝐒⦃K⦄ → - ∀I,i,L. ⬇*[i] L ≡ K.ⓑ{I}V → G ⊢ ⬈*[h, o, #i] 𝐒⦃L⦄. + ∀I,i,L. ⬇*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h, o, #i] 𝐒⦃L⦄. #h #o #G #K #V #HV #HK #I #i elim i -i [ #L #H >(drops_fwd_isid … H) -H /2 width=3 by lfsx_pair_lpxs/ | #i #IH #L #H diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lfsx_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lfsx_drops.ma index e4679904f..488bb09cc 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lfsx_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lfsx_drops.ma @@ -44,13 +44,13 @@ qed-. (* Advanced properties ******************************************************) (* Basic_2A1: uses: lsx_lref_free *) -lemma lfsx_lref_atom: ∀h,o,G,L,i. ⬇*[Ⓕ, 𝐔❴i❵] L ≡ ⋆ → G ⊢ ⬈*[h, o, #i] 𝐒⦃L⦄. +lemma lfsx_lref_atom: ∀h,o,G,L,i. ⬇*[Ⓕ, 𝐔❴i❵] L ≘ ⋆ → G ⊢ ⬈*[h, o, #i] 𝐒⦃L⦄. #h #o #G #L1 #i #HL1 @(lfsx_lifts … (#0) … HL1) -HL1 // qed. (* Basic_2A1: uses: lsx_lref_skip *) -lemma lfsx_lref_unit: ∀h,o,I,G,L,K,i. ⬇*[i] L ≡ K.ⓤ{I} → G ⊢ ⬈*[h, o, #i] 𝐒⦃L⦄. +lemma lfsx_lref_unit: ∀h,o,I,G,L,K,i. ⬇*[i] L ≘ K.ⓤ{I} → G ⊢ ⬈*[h, o, #i] 𝐒⦃L⦄. #h #o #I #G #L1 #K1 #i #HL1 @(lfsx_lifts … (#0) … HL1) -HL1 // qed. @@ -59,7 +59,7 @@ qed. (* Basic_2A1: uses: lsx_fwd_lref_be *) lemma lfsx_fwd_lref_pair: ∀h,o,G,L,i. G ⊢ ⬈*[h, o, #i] 𝐒⦃L⦄ → - ∀I,K,V. ⬇*[i] L ≡ K.ⓑ{I}V → G ⊢ ⬈*[h, o, V] 𝐒⦃K⦄. + ∀I,K,V. ⬇*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h, o, V] 𝐒⦃K⦄. #h #o #G #L #i #HL #I #K #V #HLK lapply (lfsx_inv_lifts … HL … HLK … (#0) ?) -L /2 width=2 by lfsx_fwd_pair/ 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 4ade2ddf1..b386634ee 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 @@ -49,12 +49,12 @@ lemma lprs_ind_alt: ∀G. ∀R:relation lenv. (* Properties on context-sensitive parallel computation for terms ***********) lemma lprs_cpr_trans: ∀G. b_c_transitive … (cpr G) (λ_. lprs G). -/3 width=5 by b_c_trans_LTC2, lpr_cprs_trans/ qed-. +/3 width=5 by b_c_trans_CTC2, lpr_cprs_trans/ qed-. (* Basic_1: was just: pr3_pr3_pr3_t *) -(* Note: alternative proof /3 width=5 by s_r_trans_LTC1, lprs_cpr_trans/ *) +(* Note: alternative proof /3 width=5 by s_r_trans_CTC1, lprs_cpr_trans/ *) lemma lprs_cprs_trans: ∀G. b_rs_transitive … (cpr G) (λ_. lprs G). -#G @b_c_to_b_rs_trans @b_c_trans_LTC2 +#G @b_c_to_b_rs_trans @b_c_trans_CTC2 @b_rs_trans_TC1 /2 width=3 by lpr_cprs_trans/ (**) (* full auto too slow *) qed-. @@ -117,7 +117,7 @@ lemma cprs_inv_abbr1: ∀a,G,L,V1,T1,U2. ⦃G, L⦄ ⊢ ⓓ{a}V1.T1 ➡* U2 → ∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ➡* V2 & ⦃G, L.ⓓV1⦄ ⊢ T1 ➡* T2 & U2 = ⓓ{a}V2.T2 ) ∨ - ∃∃T2. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡* T2 & ⬆[0, 1] U2 ≡ T2 & a = true. + ∃∃T2. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡* T2 & ⬆[0, 1] U2 ≘ T2 & a = true. #a #G #L #V1 #T1 #U2 #H @(cprs_ind … H) -U2 /3 width=5 by ex3_2_intro, or_introl/ #U0 #U2 #_ #HU02 * * [ #V0 #T0 #HV10 #HT10 #H destruct 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 d4a602932..d43fd613f 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 @@ -23,9 +23,9 @@ include "basic_2/rt_computation/cpxs_lpx.ma". (* 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. -/3 width=3 by lpx_cpxs_trans, lex_ltc_step_dx/ qed-. +/3 width=3 by lpx_cpxs_trans, lex_CTC_step_dx/ 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. -/3 width=3 by lpx_cpxs_trans, lex_ltc_step_sn/ qed-. +/3 width=3 by lpx_cpxs_trans, lex_CTC_step_sn/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/scpds_scpds.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/scpds_scpds.ma index 79923e2ca..ae37338ac 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/scpds_scpds.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/scpds_scpds.ma @@ -60,7 +60,7 @@ elim (cprs_inv_abst1 … H2) -H2 #V2 #T2 #HV12 #HUT2 #H destruct qed-. lemma scpds_inv_abbr_abst: ∀h,o,a1,a2,G,L,V1,W2,T1,T2,d. ⦃G, L⦄ ⊢ ⓓ{a1}V1.T1 •*➡*[h, o, d] ⓛ{a2}W2.T2 → - ∃∃T. ⦃G, L.ⓓV1⦄ ⊢ T1 •*➡*[h, o, d] T & ⬆[0, 1] ⓛ{a2}W2.T2 ≡ T & a1 = true. + ∃∃T. ⦃G, L.ⓓV1⦄ ⊢ T1 •*➡*[h, o, d] T & ⬆[0, 1] ⓛ{a2}W2.T2 ≘ T & a1 = true. #h #o #a1 #a2 #G #L #V1 #W2 #T1 #T2 #d2 * #X #d1 #Hd21 #Hd1 #H1 #H2 lapply (da_inv_bind … Hd1) -Hd1 #Hd1 elim (lstas_inv_bind1 … H1) -H1 #U1 #HTU1 #H destruct 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 4289cde87..caf9b8dd0 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,o,G,L,i. ⬇*[i] L ≡ ⋆ → ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃#i⦄. +lemma cnx_lref_atom: ∀h,o,G,L,i. ⬇*[i] L ≘ ⋆ → ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃#i⦄. #h #o #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,o,I,G,L,K,i. ⬇*[i] L ≡ K.ⓤ{I} → ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃#i⦄. +lemma cnx_lref_unit: ∀h,o,I,G,L,K,i. ⬇*[i] L ≘ K.ⓤ{I} → ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃#i⦄. #h #o #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,7 +40,7 @@ qed-. (* Inversion lemmas with generic slicing ************************************) (* Basic_2A1: was: cnx_inv_delta *) -lemma cnx_inv_lref_pair: ∀h,o,I,G,L,K,V,i. ⬇*[i] L ≡ K.ⓑ{I}V → ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃#i⦄ → ⊥. +lemma cnx_inv_lref_pair: ∀h,o,I,G,L,K,V,i. ⬇*[i] L ≘ K.ⓑ{I}V → ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃#i⦄ → ⊥. #h #o #I #G #L #K #V #i #HLK #H elim (lifts_total V (𝐔❴⫯i❵)) #W #HVW lapply (H W ?) -H /2 width=7 by cpx_delta_drops/ -HLK 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 95af51e0b..e6f5d87ad 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg.ma @@ -27,11 +27,11 @@ 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_ess : ∀G,L,s. cpg Rt h (𝟘𝟙) G L (⋆s) (⋆(next 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 + ⬆*[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 + ⬆*[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) @@ -42,14 +42,14 @@ inductive cpg (Rt:relation rtc) (h): rtc → relation4 genv lenv term term ≝ cpg Rt h cU G L U1 U2 → cpg Rt h cT G L T1 T2 → cpg Rt h (cU∨cT) G L (ⓝU1.T1) (ⓝU2.T2) | cpg_zeta : ∀c,G,L,V,T1,T,T2. cpg Rt h c G (L.ⓓV) T1 T → - ⬆*[1] T2 ≡ T → cpg Rt h (c+𝟙𝟘) G L (+ⓓV.T1) T2 + ⬆*[1] T2 ≘ T → cpg Rt h (c+𝟙𝟘) G L (+ⓓV.T1) T2 | cpg_eps : ∀c,G,L,V,T1,T2. cpg Rt h c G L T1 T2 → cpg Rt h (c+𝟙𝟘) G L (ⓝV.T1) T2 | 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_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 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) . @@ -71,11 +71,11 @@ qed. 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 = ⋆(next 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 & + | ∃∃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/ @@ -97,11 +97,11 @@ qed-. 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 = ⋆(next 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 & + | ∃∃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-. @@ -117,9 +117,9 @@ qed-. 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/ @@ -131,7 +131,7 @@ qed-. 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 @@ -153,7 +153,7 @@ 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. ⦃G, L.ⓓV1⦄ ⊢ U1 ⬈[Rt, cT, h] T & ⬆*[1] U2 ≡ T & + | ∃∃cT,T. ⦃G, L.ⓓV1⦄ ⊢ U1 ⬈[Rt, cT, h] T & ⬆*[1] U2 ≘ T & 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 @@ -175,14 +175,14 @@ 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. ⦃G, L.ⓓV1⦄ ⊢ T1 ⬈[Rt, cT, h] T & ⬆*[1] U2 ≡ T & + | ∃∃cT,T. ⦃G, L.ⓓV1⦄ ⊢ T1 ⬈[Rt, cT, h] T & ⬆*[1] U2 ≘ T & 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. ⦃G, L.ⓓV1⦄ ⊢ T1 ⬈[Rt, cT, h] T & ⬆*[1] U2 ≡ T & + | ∃∃cT,T. ⦃G, L.ⓓV1⦄ ⊢ T1 ⬈[Rt, cT, h] T & ⬆*[1] U2 ≘ T & 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/ @@ -203,7 +203,7 @@ fact cpg_inv_appl1_aux: ∀Rt,c,h,G,L,U,U2. ⦃G, L⦄ ⊢ U ⬈[Rt, c, h] U2 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 & + | ∃∃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 @@ -227,7 +227,7 @@ lemma cpg_inv_appl1: ∀Rt,c,h,G,L,V1,U1,U2. ⦃G, L⦄ ⊢ ⓐV1.U1 ⬈[Rt, c, 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 & + | ∃∃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-. @@ -265,9 +265,9 @@ lemma cpg_inv_cast1: ∀Rt,c,h,G,L,V1,U1,U2. ⦃G, L⦄ ⊢ ⓝV1.U1 ⬈[Rt, c, 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/ @@ -275,7 +275,7 @@ qed-. 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-. 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 295cc2291..89a8d4132 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 @@ -21,8 +21,8 @@ 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 @@ -31,8 +31,8 @@ lemma cpg_delta_drops: ∀Rt,c,h,G,K,V,V2,i,L,T2. ⬇*[i] L ≡ K.ⓓV → ⦃G, ] 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 @@ -45,10 +45,10 @@ qed. 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 & - ⬆*[⫯i] V2 ≡ T2 & c = cV - | ∃∃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 & + ⬆*[⫯i] V2 ≘ T2 & c = cV + | ∃∃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/ /4 width=8 by drops_refl, ex4_4_intro, or3_intro2, or3_intro1/ @@ -64,10 +64,10 @@ qed-. lemma cpg_inv_atom1_drops: ∀Rt,c,h,I,G,L,T2. ⦃G, L⦄ ⊢ ⓪{I} ⬈[Rt, c, h] T2 → ∨∨ T2 = ⓪{I} ∧ c = 𝟘𝟘 | ∃∃s. T2 = ⋆(next h s) & I = Sort s & c = 𝟘𝟙 - | ∃∃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 & - ⬆*[⫯i] V2 ≡ T2 & I = LRef i & c = cV + 𝟘𝟙. + | ∃∃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 & + ⬆*[⫯i] V2 ≘ T2 & I = LRef i & c = cV + 𝟘𝟙. #Rt #c #h * #n #G #L #T2 #H [ elim (cpg_inv_sort1 … H) -H * /3 width=3 by or4_intro0, or4_intro1, ex3_intro, conj/ 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 7af9a5730..61badb90a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm.ma @@ -36,19 +36,19 @@ lemma cpm_ess: ∀h,G,L,s. ⦃G, L⦄ ⊢ ⋆s ➡[1, h] ⋆(next 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. + ⬆*[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. + ⬆*[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. + ⬆*[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. @@ -77,7 +77,7 @@ qed. (* Basic_2A1: includes: cpr_zeta *) lemma cpm_zeta: ∀n,h,G,L,V,T1,T,T2. ⦃G, L.ⓓV⦄ ⊢ T1 ➡[n, h] T → - ⬆*[1] T2 ≡ T → ⦃G, L⦄ ⊢ +ⓓV.T1 ➡[n, h] T2. + ⬆*[1] T2 ≘ T → ⦃G, L⦄ ⊢ +ⓓV.T1 ➡[n, h] T2. #n #h #G #L #V #T1 #T #T2 * /3 width=5 by cpg_zeta, isrt_plus_O2, ex2_intro/ qed. @@ -103,7 +103,7 @@ 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⦄ ⊢ 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 * @@ -122,11 +122,11 @@ lemma cpr_refl: ∀h,G,L. reflexive … (cpm 0 h G L). lemma cpm_inv_atom1: ∀n,h,J,G,L,T2. ⦃G, L⦄ ⊢ ⓪{J} ➡[n, h] T2 → ∨∨ T2 = ⓪{J} ∧ n = 0 | ∃∃s. T2 = ⋆(next 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 - | ∃∃k,K,V1,V2. ⦃G, K⦄ ⊢ V1 ➡[k, h] V2 & ⬆*[1] V2 ≡ T2 & + | ∃∃k,K,V1,V2. ⦃G, K⦄ ⊢ V1 ➡[k, h] V2 & ⬆*[1] V2 ≘ T2 & L = K.ⓛV1 & J = LRef 0 & n = ⫯k - | ∃∃I,K,T,i. ⦃G, K⦄ ⊢ #i ➡[n, h] T & ⬆*[1] T ≡ T2 & + | ∃∃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/ @@ -151,9 +151,9 @@ qed-. 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 - | ∃∃k,K,V1,V2. ⦃G, K⦄ ⊢ V1 ➡[k, h] V2 & ⬆*[1] V2 ≡ T2 & + | ∃∃k,K,V1,V2. ⦃G, K⦄ ⊢ V1 ➡[k, h] V2 & ⬆*[1] V2 ≘ T2 & L = K.ⓛV1 & n = ⫯k. #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/ @@ -167,7 +167,7 @@ qed-. 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 @@ -184,7 +184,7 @@ qed-. 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. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡[n, h] T & ⬆*[1] U2 ≡ T & + | ∃∃T. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡[n, h] T & ⬆*[1] U2 ≘ T & 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 @@ -201,7 +201,7 @@ qed-. 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. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡[n, h] T & ⬆*[1] U2 ≡ T & p = true. + | ∃∃T. ⦃G, L.ⓓV1⦄ ⊢ T1 ➡[n, h] T & ⬆*[1] U2 ≘ T & p = true. #n #h #p #G #L #V1 #T1 #U2 * #c #Hc #H elim (cpg_inv_abbr1 … H) -H * [ #cV #cT #V2 #T2 #HV12 #HT12 #H1 #H2 destruct elim (isrt_inv_max … Hc) -Hc #nV #nT #HcV #HcT #H destruct @@ -232,7 +232,7 @@ lemma cpm_inv_appl1: ∀n,h,G,L,V1,U1,U2. ⦃G, L⦄ ⊢ ⓐ V1.U1 ➡[n, h] U2 | ∃∃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 & + | ∃∃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 * 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 03e5a9440..cafb6a0e3 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 @@ -22,15 +22,15 @@ include "basic_2/rt_transition/cpm.ma". (* 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. @@ -40,10 +40,10 @@ qed. lemma cpm_inv_atom1_drops: ∀n,h,I,G,L,T2. ⦃G, L⦄ ⊢ ⓪{I} ➡[n, h] T2 → ∨∨ T2 = ⓪{I} ∧ n = 0 | ∃∃s. T2 = ⋆(next h s) & I = Sort s & n = 1 - | ∃∃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 & - ⬆*[⫯i] V2 ≡ T2 & I = LRef i & n = ⫯m. + | ∃∃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 & + ⬆*[⫯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 /3 width=1 by or4_intro0, conj/ @@ -59,10 +59,10 @@ qed-. 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 & - ⬆*[⫯i] V2 ≡ T2 - | ∃∃m,K,V,V2. ⬇*[i] L ≡ K. ⓛV & ⦃G, K⦄ ⊢ V ➡[m, h] V2 & - ⬆*[⫯i] V2 ≡ T2 & n = ⫯m. + | ∃∃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 & + ⬆*[⫯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 /3 width=1 by or3_intro0, conj/ 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 fd5163073..30fc36b59 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr.ma @@ -36,9 +36,9 @@ qed. 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 & + | ∃∃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 & + | ∃∃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 * /3 width=8 by tri_lt, or3_intro0, or3_intro1, or3_intro2, ex4_4_intro, ex4_3_intro/ @@ -52,7 +52,7 @@ qed-. 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/ @@ -61,7 +61,7 @@ qed-. 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-. @@ -86,7 +86,7 @@ lemma cpr_inv_flat1: ∀h,I,G,L,V1,U1,U2. ⦃G, L⦄ ⊢ ⓕ{I}V1.U1 ➡[h] U2 | ∃∃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 & + | ∃∃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. 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 714ce2f45..30d274be3 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 @@ -21,8 +21,8 @@ include "basic_2/rt_transition/cpm_drops.ma". (* 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 & - ⬆*[⫯i] V2 ≡ T2 & I = LRef 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/ | #s #_ #_ #H destruct @@ -35,8 +35,8 @@ qed-. (* Basic_2A1: includes: cpr_inv_lref1 *) 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 & - ⬆*[⫯i] V2 ≡ T2. + | ∃∃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/ | /3 width=6 by ex3_3_intro, or_intror/ 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 c0bb4856e..3df213a4f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx.ma @@ -31,13 +31,13 @@ lemma cpx_ess: ∀h,G,L,s. ⦃G, L⦄ ⊢ ⋆s ⬈[h] ⋆(next 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. + ⬆*[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. + ⬆*[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. @@ -57,7 +57,7 @@ lemma cpx_flat: ∀h,I,G,L,V1,V2,T1,T2. qed. lemma cpx_zeta: ∀h,G,L,V,T1,T,T2. ⦃G, L.ⓓV⦄ ⊢ T1 ⬈[h] T → - ⬆*[1] T2 ≡ T → ⦃G, L⦄ ⊢ +ⓓV.T1 ⬈[h] T2. + ⬆*[1] T2 ≘ T → ⦃G, L⦄ ⊢ +ⓓV.T1 ⬈[h] T2. #h #G #L #V #T1 #T #T2 * /3 width=4 by cpg_zeta, ex_intro/ qed. @@ -81,7 +81,7 @@ lemma cpx_beta: ∀h,p,G,L,V1,V2,W1,W2,T1,T2. 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⦄ ⊢ 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 * @@ -104,9 +104,9 @@ qed. lemma cpx_inv_atom1: ∀h,J,G,L,T2. ⦃G, L⦄ ⊢ ⓪{J} ⬈[h] T2 → ∨∨ T2 = ⓪{J} | ∃∃s. T2 = ⋆(next h s) & J = Sort s - | ∃∃I,K,V1,V2. ⦃G, K⦄ ⊢ V1 ⬈[h] V2 & ⬆*[1] V2 ≡ T2 & + | ∃∃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 & + | ∃∃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/ @@ -120,7 +120,7 @@ qed-. 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 & + | ∃∃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/ @@ -128,7 +128,7 @@ qed-. 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-. @@ -140,7 +140,7 @@ 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. ⦃G, L.ⓓV1⦄ ⊢ T1 ⬈[h] T & ⬆*[1] U2 ≡ T & + | ∃∃T. ⦃G, L.ⓓV1⦄ ⊢ T1 ⬈[h] T & ⬆*[1] U2 ≘ T & 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/ @@ -149,7 +149,7 @@ 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. ⦃G, L.ⓓV1⦄ ⊢ T1 ⬈[h] T & ⬆*[1] U2 ≡ T & p = true. + | ∃∃T. ⦃G, L.ⓓV1⦄ ⊢ T1 ⬈[h] T & ⬆*[1] U2 ≘ T & 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-. @@ -167,7 +167,7 @@ lemma cpx_inv_appl1: ∀h,G,L,V1,U1,U2. ⦃G, L⦄ ⊢ ⓐ V1.U1 ⬈[h] U2 → | ∃∃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 & + | ∃∃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 * @@ -187,14 +187,14 @@ qed-. 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 → ∨∨ 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-. @@ -208,7 +208,7 @@ lemma cpx_inv_flat1: ∀h,I,G,L,V1,U1,U2. ⦃G, L⦄ ⊢ ⓕ{I}V1.U1 ⬈[h] U2 ⦃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 & + | ∃∃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. @@ -235,15 +235,15 @@ lemma cpx_ind: ∀h. ∀R:relation4 genv lenv term term. (∀I,G,L. R G L (⓪{I}) (⓪{I})) → (∀G,L,s. R G L (⋆s) (⋆(next h s))) → (∀I,G,K,V1,V2,W2. ⦃G, K⦄ ⊢ V1 ⬈[h] V2 → R G K V1 V2 → - ⬆*[1] V2 ≡ W2 → R G (K.ⓑ{I}V1) (#0) W2 + ⬆*[1] V2 ≘ W2 → R G (K.ⓑ{I}V1) (#0) W2 ) → (∀I,G,K,T,U,i. ⦃G, K⦄ ⊢ #i ⬈[h] T → R G K (#i) T → - ⬆*[1] T ≡ U → R G (K.ⓘ{I}) (#⫯i) (U) + ⬆*[1] T ≘ U → R 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 → R G L V1 V2 → R G (L.ⓑ{I}V1) T1 T2 → R 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 → R G L V1 V2 → R G L T1 T2 → R G L (ⓕ{I}V1.T1) (ⓕ{I}V2.T2) ) → (∀G,L,V,T1,T,T2. ⦃G, L.ⓓV⦄ ⊢ T1 ⬈[h] T → R G (L.ⓓV) T1 T → - ⬆*[1] T2 ≡ T → R G L (+ⓓV.T1) T2 + ⬆*[1] T2 ≘ T → R G L (+ⓓV.T1) T2 ) → (∀G,L,V,T1,T2. ⦃G, L⦄ ⊢ T1 ⬈[h] T2 → R G L T1 T2 → R G L (ⓝV.T1) T2 ) → (∀G,L,V1,V2,T. ⦃G, L⦄ ⊢ V1 ⬈[h] V2 → R G L V1 V2 → @@ -253,7 +253,7 @@ lemma cpx_ind: ∀h. ∀R:relation4 genv lenv term term. R 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 → R G L V1 V → R G L W1 W2 → R G (L.ⓓW1) T1 T2 → - ⬆*[1] V ≡ V2 → R G L (ⓐV1.ⓓ{p}W1.T1) (ⓓ{p}W2.ⓐV2.T2) + ⬆*[1] V ≘ V2 → R G L (ⓐV1.ⓓ{p}W1.T1) (ⓓ{p}W2.ⓐV2.T2) ) → ∀G,L,T1,T2. ⦃G, L⦄ ⊢ T1 ⬈[h] T2 → R G L T1 T2. #h #R #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #IH10 #IH11 #G #L #T1 #T2 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 0c319c2ea..78f28e9b1 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 @@ -21,8 +21,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. @@ -33,8 +33,8 @@ qed. lemma cpx_inv_atom1_drops: ∀h,I,G,L,T2. ⦃G, L⦄ ⊢ ⓪{I} ⬈[h] T2 → ∨∨ T2 = ⓪{I} | ∃∃s. T2 = ⋆(next h s) & I = Sort s - | ∃∃J,K,V,V2,i. ⬇*[i] L ≡ K.ⓑ{J}V & ⦃G, K⦄ ⊢ V ⬈[h] V2 & - ⬆*[⫯i] V2 ≡ T2 & I = LRef i. + | ∃∃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-. @@ -42,8 +42,8 @@ qed-. (* Basic_2A1: was: cpx_inv_lref1 *) 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 & - ⬆*[⫯i] V2 ≡ T2. + ∃∃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/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_lfeq.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_lfeq.ma index 479953550..441377d0d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_lfeq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_lfeq.ma @@ -49,7 +49,7 @@ qed-. (* (* Basic_2A1: was: cpx_lleq_conf *) lemma cpx_lfeq_conf: ∀h,G,L2,T1,T2. ⦃G, L2⦄ ⊢ T1 ⬈[h] T2 → - ∀L1. L2 ≡[T1] L1 → ⦃G, L1⦄ ⊢ T1 ⬈[h] T2. + ∀L1. L2 ≘[T1] L1 → ⦃G, L1⦄ ⊢ T1 ⬈[h] T2. /3 width=3 by lfeq_cpx_trans, lfeq_sym/ qed-. *) (* Basic_2A1: was: cpx_lleq_conf_sn *) @@ -58,6 +58,6 @@ lemma cpx_lfeq_conf_sn: ∀h,G. s_r_confluent1 … (cpx h G) lfeq. (* (* Basic_2A1: was: cpx_lleq_conf_dx *) lemma cpx_lfeq_conf_dx: ∀h,G,L2,T1,T2. ⦃G, L2⦄ ⊢ T1 ⬈[h] T2 → - ∀L1. L1 ≡[T1] L2 → L1 ≡[T2] L2. + ∀L1. L1 ≘[T1] L2 → L1 ≘[T2] L2. /4 width=6 by cpx_lfeq_conf_sn, lfeq_sym/ qed-. *) \ No newline at end of file diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lfpr_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lfpr_drops.ma index 4b531bf74..239200568 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lfpr_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lfpr_drops.ma @@ -34,10 +34,10 @@ lemma lfpr_drops_conf: ∀h,G. dropable_sn (cpm 0 h G). lemma lfpr_drops_trans: ∀h,G. dropable_dx (cpm 0 h G). /2 width=5 by lfxs_dropable_dx/ qed-. -lemma lfpr_inv_lref_pair_sn: ∀h,G,L1,L2,i. ⦃G, L1⦄ ⊢ ➡[h, #i] L2 → ∀I,K1,V1. ⬇*[i] L1 ≡ K1.ⓑ{I}V1 → - ∃∃K2,V2. ⬇*[i] L2 ≡ K2.ⓑ{I}V2 & ⦃G, K1⦄ ⊢ ➡[h, V1] K2 & ⦃G, K1⦄ ⊢ V1 ➡[h] V2. +lemma lfpr_inv_lref_pair_sn: ∀h,G,L1,L2,i. ⦃G, L1⦄ ⊢ ➡[h, #i] L2 → ∀I,K1,V1. ⬇*[i] L1 ≘ K1.ⓑ{I}V1 → + ∃∃K2,V2. ⬇*[i] L2 ≘ K2.ⓑ{I}V2 & ⦃G, K1⦄ ⊢ ➡[h, V1] K2 & ⦃G, K1⦄ ⊢ V1 ➡[h] V2. /2 width=3 by lfxs_inv_lref_pair_sn/ qed-. -lemma lfpr_inv_lref_pair_dx: ∀h,G,L1,L2,i. ⦃G, L1⦄ ⊢ ➡[h, #i] L2 → ∀I,K2,V2. ⬇*[i] L2 ≡ K2.ⓑ{I}V2 → - ∃∃K1,V1. ⬇*[i] L1 ≡ K1.ⓑ{I}V1 & ⦃G, K1⦄ ⊢ ➡[h, V1] K2 & ⦃G, K1⦄ ⊢ V1 ➡[h] V2. +lemma lfpr_inv_lref_pair_dx: ∀h,G,L1,L2,i. ⦃G, L1⦄ ⊢ ➡[h, #i] L2 → ∀I,K2,V2. ⬇*[i] L2 ≘ K2.ⓑ{I}V2 → + ∃∃K1,V1. ⬇*[i] L1 ≘ K1.ⓑ{I}V1 & ⦃G, K1⦄ ⊢ ➡[h, V1] K2 & ⦃G, K1⦄ ⊢ V1 ➡[h] V2. /2 width=3 by lfxs_inv_lref_pair_dx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lfpr_lfpr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lfpr_lfpr.ma index 976060440..2e0e4aa7a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lfpr_lfpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lfpr_lfpr.ma @@ -34,8 +34,8 @@ fact cpr_conf_lfpr_atom_delta: ∀L1. ⦃G, L⦄ ⊢ ➡[h, T] L1 → ∀L2. ⦃G, L⦄ ⊢ ➡[h, T] L2 → ∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡[h] T0 & ⦃G, L2⦄ ⊢ T2 ➡[h] T0 ) → - ∀K0,V0. ⬇*[i] L0 ≡ K0.ⓓV0 → - ∀V2. ⦃G, K0⦄ ⊢ V0 ➡[h] V2 → ∀T2. ⬆*[⫯i] V2 ≡ T2 → + ∀K0,V0. ⬇*[i] L0 ≘ K0.ⓓV0 → + ∀V2. ⦃G, K0⦄ ⊢ V0 ➡[h] V2 → ∀T2. ⬆*[⫯i] V2 ≘ T2 → ∀L1. ⦃G, L0⦄ ⊢ ➡[h, #i] L1 → ∀L2. ⦃G, L0⦄ ⊢ ➡[h, #i] L2 → ∃∃T. ⦃G, L1⦄ ⊢ #i ➡[h] T & ⦃G, L2⦄ ⊢ T2 ➡[h] T. #h #G #L0 #i #IH #K0 #V0 #HLK0 #V2 #HV02 #T2 #HVT2 #L1 #HL01 #L2 #HL02 @@ -56,10 +56,10 @@ fact cpr_conf_lfpr_delta_delta: ∀L1. ⦃G, L⦄ ⊢ ➡[h, T] L1 → ∀L2. ⦃G, L⦄ ⊢ ➡[h, T] L2 → ∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡[h] T0 & ⦃G, L2⦄ ⊢ T2 ➡[h] T0 ) → - ∀K0,V0. ⬇*[i] L0 ≡ K0.ⓓV0 → - ∀V1. ⦃G, K0⦄ ⊢ V0 ➡[h] V1 → ∀T1. ⬆*[⫯i] V1 ≡ T1 → - ∀KX,VX. ⬇*[i] L0 ≡ KX.ⓓVX → - ∀V2. ⦃G, KX⦄ ⊢ VX ➡[h] V2 → ∀T2. ⬆*[⫯i] V2 ≡ T2 → + ∀K0,V0. ⬇*[i] L0 ≘ K0.ⓓV0 → + ∀V1. ⦃G, K0⦄ ⊢ V0 ➡[h] V1 → ∀T1. ⬆*[⫯i] V1 ≘ T1 → + ∀KX,VX. ⬇*[i] L0 ≘ KX.ⓓVX → + ∀V2. ⦃G, KX⦄ ⊢ VX ➡[h] V2 → ∀T2. ⬆*[⫯i] V2 ≘ T2 → ∀L1. ⦃G, L0⦄ ⊢ ➡[h, #i] L1 → ∀L2. ⦃G, L0⦄ ⊢ ➡[h, #i] L2 → ∃∃T. ⦃G, L1⦄ ⊢ T1 ➡[h] T & ⦃G, L2⦄ ⊢ T2 ➡[h] T. #h #G #L0 #i #IH #K0 #V0 #HLK0 #V1 #HV01 #T1 #HVT1 @@ -105,7 +105,7 @@ fact cpr_conf_lfpr_bind_zeta: ∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡[h] T0 & ⦃G, L2⦄ ⊢ T2 ➡[h] T0 ) → ∀V1. ⦃G, L0⦄ ⊢ V0 ➡[h] V1 → ∀T1. ⦃G, L0.ⓓV0⦄ ⊢ T0 ➡[h] T1 → - ∀T2. ⦃G, L0.ⓓV0⦄ ⊢ T0 ➡[h] T2 → ∀X2. ⬆*[1] X2 ≡ T2 → + ∀T2. ⦃G, L0.ⓓV0⦄ ⊢ T0 ➡[h] T2 → ∀X2. ⬆*[1] X2 ≘ T2 → ∀L1. ⦃G, L0⦄ ⊢ ➡[h, +ⓓV0.T0] L1 → ∀L2. ⦃G, L0⦄ ⊢ ➡[h, +ⓓV0.T0] L2 → ∃∃T. ⦃G, L1⦄ ⊢ +ⓓV1.T1 ➡[h] T & ⦃G, L2⦄ ⊢ X2 ➡[h] T. #h #G #L0 #V0 #T0 #IH #V1 #HV01 #T1 #HT01 @@ -124,8 +124,8 @@ fact cpr_conf_lfpr_zeta_zeta: ∀L1. ⦃G, L⦄ ⊢ ➡[h, T] L1 → ∀L2. ⦃G, L⦄ ⊢ ➡[h, T] L2 → ∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡[h] T0 & ⦃G, L2⦄ ⊢ T2 ➡[h] T0 ) → - ∀T1. ⦃G, L0.ⓓV0⦄ ⊢ T0 ➡[h] T1 → ∀X1. ⬆*[1] X1 ≡ T1 → - ∀T2. ⦃G, L0.ⓓV0⦄ ⊢ T0 ➡[h] T2 → ∀X2. ⬆*[1] X2 ≡ T2 → + ∀T1. ⦃G, L0.ⓓV0⦄ ⊢ T0 ➡[h] T1 → ∀X1. ⬆*[1] X1 ≘ T1 → + ∀T2. ⦃G, L0.ⓓV0⦄ ⊢ T0 ➡[h] T2 → ∀X2. ⬆*[1] X2 ≘ T2 → ∀L1. ⦃G, L0⦄ ⊢ ➡[h, +ⓓV0.T0] L1 → ∀L2. ⦃G, L0⦄ ⊢ ➡[h, +ⓓV0.T0] L2 → ∃∃T. ⦃G, L1⦄ ⊢ X1 ➡[h] T & ⦃G, L2⦄ ⊢ X2 ➡[h] T. #h #G #L0 #V0 #T0 #IH #T1 #HT01 #X1 #HXT1 @@ -224,7 +224,7 @@ fact cpr_conf_lfpr_flat_theta: ∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡[h] T0 & ⦃G, L2⦄ ⊢ T2 ➡[h] T0 ) → ∀V1. ⦃G, L0⦄ ⊢ V0 ➡[h] V1 → ∀T1. ⦃G, L0⦄ ⊢ ⓓ{p}W0.T0 ➡[h] T1 → - ∀V2. ⦃G, L0⦄ ⊢ V0 ➡[h] V2 → ∀U2. ⬆*[1] V2 ≡ U2 → + ∀V2. ⦃G, L0⦄ ⊢ V0 ➡[h] V2 → ∀U2. ⬆*[1] V2 ≘ U2 → ∀W2. ⦃G, L0⦄ ⊢ W0 ➡[h] W2 → ∀T2. ⦃G, L0.ⓓW0⦄ ⊢ T0 ➡[h] T2 → ∀L1. ⦃G, L0⦄ ⊢ ➡[h, ⓐV0.ⓓ{p}W0.T0] L1 → ∀L2. ⦃G, L0⦄ ⊢ ➡[h, ⓐV0.ⓓ{p}W0.T0] L2 → ∃∃T. ⦃G, L1⦄ ⊢ ⓐV1.T1 ➡[h] T & ⦃G, L2⦄ ⊢ ⓓ{p}W2.ⓐU2.T2 ➡[h] T. @@ -281,9 +281,9 @@ fact cpr_conf_lfpr_theta_theta: ∀L1. ⦃G, L⦄ ⊢ ➡[h, T] L1 → ∀L2. ⦃G, L⦄ ⊢ ➡[h, T] L2 → ∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡[h] T0 & ⦃G, L2⦄ ⊢ T2 ➡[h] T0 ) → - ∀V1. ⦃G, L0⦄ ⊢ V0 ➡[h] V1 → ∀U1. ⬆*[1] V1 ≡ U1 → + ∀V1. ⦃G, L0⦄ ⊢ V0 ➡[h] V1 → ∀U1. ⬆*[1] V1 ≘ U1 → ∀W1. ⦃G, L0⦄ ⊢ W0 ➡[h] W1 → ∀T1. ⦃G, L0.ⓓW0⦄ ⊢ T0 ➡[h] T1 → - ∀V2. ⦃G, L0⦄ ⊢ V0 ➡[h] V2 → ∀U2. ⬆*[1] V2 ≡ U2 → + ∀V2. ⦃G, L0⦄ ⊢ V0 ➡[h] V2 → ∀U2. ⬆*[1] V2 ≘ U2 → ∀W2. ⦃G, L0⦄ ⊢ W0 ➡[h] W2 → ∀T2. ⦃G, L0.ⓓW0⦄ ⊢ T0 ➡[h] T2 → ∀L1. ⦃G, L0⦄ ⊢ ➡[h, ⓐV0.ⓓ{p}W0.T0] L1 → ∀L2. ⦃G, L0⦄ ⊢ ➡[h, ⓐV0.ⓓ{p}W0.T0] L2 → ∃∃T. ⦃G, L1⦄ ⊢ ⓓ{p}W1.ⓐU1.T1 ➡[h] T & ⦃G, L2⦄ ⊢ ⓓ{p}W2.ⓐU2.T2 ➡[h] T. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lfpx_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lfpx_drops.ma index 8ae0af6af..94ed9d8bf 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lfpx_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lfpx_drops.ma @@ -34,10 +34,10 @@ lemma lfpx_drops_conf: ∀h,G. dropable_sn (cpx h G). lemma lfpx_drops_trans: ∀h,G. dropable_dx (cpx h G). /2 width=5 by lfxs_dropable_dx/ qed-. -lemma lfpx_inv_lref_pair_sn: ∀h,G,L1,L2,i. ⦃G, L1⦄ ⊢ ⬈[h, #i] L2 → ∀I,K1,V1. ⬇*[i] L1 ≡ K1.ⓑ{I}V1 → - ∃∃K2,V2. ⬇*[i] L2 ≡ K2.ⓑ{I}V2 & ⦃G, K1⦄ ⊢ ⬈[h, V1] K2 & ⦃G, K1⦄ ⊢ V1 ⬈[h] V2. +lemma lfpx_inv_lref_pair_sn: ∀h,G,L1,L2,i. ⦃G, L1⦄ ⊢ ⬈[h, #i] L2 → ∀I,K1,V1. ⬇*[i] L1 ≘ K1.ⓑ{I}V1 → + ∃∃K2,V2. ⬇*[i] L2 ≘ K2.ⓑ{I}V2 & ⦃G, K1⦄ ⊢ ⬈[h, V1] K2 & ⦃G, K1⦄ ⊢ V1 ⬈[h] V2. /2 width=3 by lfxs_inv_lref_pair_sn/ qed-. -lemma lfpx_inv_lref_pair_dx: ∀h,G,L1,L2,i. ⦃G, L1⦄ ⊢ ⬈[h, #i] L2 → ∀I,K2,V2. ⬇*[i] L2 ≡ K2.ⓑ{I}V2 → - ∃∃K1,V1. ⬇*[i] L1 ≡ K1.ⓑ{I}V1 & ⦃G, K1⦄ ⊢ ⬈[h, V1] K2 & ⦃G, K1⦄ ⊢ V1 ⬈[h] V2. +lemma lfpx_inv_lref_pair_dx: ∀h,G,L1,L2,i. ⦃G, L1⦄ ⊢ ⬈[h, #i] L2 → ∀I,K2,V2. ⬇*[i] L2 ≘ K2.ⓑ{I}V2 → + ∃∃K1,V1. ⬇*[i] L1 ≘ K1.ⓑ{I}V1 & ⦃G, K1⦄ ⊢ ⬈[h, V1] K2 & ⦃G, K1⦄ ⊢ V1 ⬈[h] V2. /2 width=3 by lfxs_inv_lref_pair_dx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lfpx_lpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lfpx_lpx.ma index a61602733..034ce9c7e 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lfpx_lpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lfpx_lpx.ma @@ -26,5 +26,5 @@ lemma lfpx_lpx: ∀h,G,L1,L2,T. ⦃G, L1⦄ ⊢ ⬈[h] L2 → ⦃G, L1⦄ ⊢ (* Inversion lemmas with uncounted parallel rt-transition for local envs ****) lemma lfpx_inv_lpx_lfeq: ∀h,G,L1,L2,T. ⦃G, L1⦄ ⊢ ⬈[h, T] L2 → - ∃∃L. ⦃G, L1⦄ ⊢ ⬈[h] L & L ≐[T] L2. + ∃∃L. ⦃G, L1⦄ ⊢ ⬈[h] L & L ≡[T] L2. /3 width=3 by lfpx_fsge_comp, lfxs_inv_lex_lfeq/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/s_computation/fqup_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/s_computation/fqup_drops.ma index f669ff80e..fbcca9516 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/s_computation/fqup_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/s_computation/fqup_drops.ma @@ -19,7 +19,7 @@ include "basic_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 → +lemma fqup_drops_succ: ∀b,G,K,T,i,L,U. ⬇*[⫯i] L ≘ K → ⬆*[⫯i] T ≘ U → ⦃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 @@ -32,7 +32,7 @@ lemma fqup_drops_succ: ∀b,G,K,T,i,L,U. ⬇*[⫯i] L ≡ K → ⬆*[⫯i] T ≡ ] qed. -lemma fqup_drops_strap1: ∀b,G1,G2,L1,K1,K2,T1,T2,U1,i. ⬇*[i] L1 ≡ K1 → ⬆*[i] T1 ≡ U1 → +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⦄. #b #G1 #G2 #L1 #K1 #K2 #T1 #T2 #U1 * [ #HLK1 #HTU1 #HT12 @@ -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/basic_2/s_computation/fqus.ma b/matita/matita/contribs/lambdadelta/basic_2/s_computation/fqus.ma index 15ad47cfb..40d4124a5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/s_computation/fqus.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/s_computation/fqus.ma @@ -98,7 +98,7 @@ lemma fqus_inv_bind1: ∀b,p,I,G1,G2,L1,L2,V1,T1,T2. ⦃G1, L1, ⓑ{p,I}V1.T1⦄ | ⦃G1, L1, V1⦄ ⊐*[b] ⦃G2, L2, T2⦄ | ⦃G1, L1.ⓑ{I}V1, T1⦄ ⊐*[b] ⦃G2, L2, T2⦄ | ⦃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}. + | ∃∃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 [4: #Hb ] #H destruct @@ -110,7 +110,7 @@ lemma fqus_inv_bind1_true: ∀p,I,G1,G2,L1,L2,V1,T1,T2. ⦃G1, L1, ⓑ{p,I}V1.T1 ∨∨ ∧∧ 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}. + | ∃∃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,4: * ] /3 width=1 by and3_intro, or4_intro0, or4_intro1, or4_intro2, or4_intro3, ex3_3_intro/ #_ #H destruct @@ -120,7 +120,7 @@ lemma fqus_inv_flat1: ∀b,I,G1,G2,L1,L2,V1,T1,T2. ⦃G1, L1, ⓕ{I}V1.T1⦄ ⊐ ∨∨ ∧∧ 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}. + | ∃∃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 diff --git a/matita/matita/contribs/lambdadelta/basic_2/s_computation/fqus_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/s_computation/fqus_drops.ma index a1adcfcf5..cfcecbb00 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/s_computation/fqus_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/s_computation/fqus_drops.ma @@ -19,7 +19,7 @@ include "basic_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 → +lemma fqus_drops: ∀b,G,L,K,T,U,i. ⬇*[i] L ≘ K → ⬆*[i] T ≘ U → ⦃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 // diff --git a/matita/matita/contribs/lambdadelta/basic_2/s_transition/fqu.ma b/matita/matita/contribs/lambdadelta/basic_2/s_transition/fqu.ma index 0f5feb7fc..85ddd67c7 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/s_transition/fqu.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/s_transition/fqu.ma @@ -31,7 +31,7 @@ inductive fqu (b:bool): tri_relation genv lenv term ≝ | fqu_bind_dx: ∀p,I,G,L,V,T. 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_drop : ∀I,G,L,T,U. ⬆*[1] T ≘ U → fqu b G (L.ⓘ{I}) U G L T . interpretation @@ -116,7 +116,7 @@ fact fqu_inv_bind1_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐[b] ⦃G2, L ∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2 | ∧∧ G1 = G2 & L1.ⓑ{I}V1 = L2 & U1 = T2 | ∧∧ 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/ @@ -131,13 +131,13 @@ lemma fqu_inv_bind1: ∀b,p,I,G1,G2,L1,L2,V1,U1,T2. ⦃G1, L1, ⓑ{p,I}V1.U1⦄ ∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2 | ∧∧ G1 = G2 & L1.ⓑ{I}V1 = L2 & U1 = T2 | ∧∧ 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⦄ → ∨∨ ∧∧ 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. + | ∃∃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_intro1, or3_intro2/ * #_ #_ #_ #H destruct @@ -147,7 +147,7 @@ fact fqu_inv_flat1_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐[b] ⦃G2, L ∀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/ @@ -161,7 +161,7 @@ qed-. 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 ************************************************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/aaa_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/static/aaa_drops.ma index a364e9496..930ca157c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/aaa_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/aaa_drops.ma @@ -22,7 +22,7 @@ include "basic_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/ @@ -35,7 +35,7 @@ qed. (* 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. + ∃∃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 @@ -47,8 +47,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 @@ -86,8 +86,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 diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/ffdeq_lfeq.ma b/matita/matita/contribs/lambdadelta/basic_2/static/ffdeq_lfeq.ma index e0453bf32..a0bf7c46d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/ffdeq_lfeq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/ffdeq_lfeq.ma @@ -19,7 +19,7 @@ include "basic_2/static/ffdeq.ma". (* Properties with syntactic equivalence on referred entries ****************) -lemma lfeq_lfdeq_trans: ∀h,o,L1,L,T1. L1 ≐[T1] L → +lemma lfeq_lfdeq_trans: ∀h,o,L1,L,T1. L1 ≡[T1] L → ∀G1,G2,L2,T2. ⦃G1, L, T1⦄ ≛[h, o] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≛[h, o] ⦃G2, L2, T2⦄. #h #o #L1 #L #T1 #HL1 #G1 #G2 #L2 #T2 #H elim (ffdeq_inv_gen_sn … H) -H #H #HL2 #T12 destruct diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/frees.ma b/matita/matita/contribs/lambdadelta/basic_2/static/frees.ma index 206ec63e4..12cf98187 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/frees.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/frees.ma @@ -28,9 +28,9 @@ inductive frees: relation3 lenv term rtmap ≝ 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 + 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,10 +50,10 @@ 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 → +fact frees_inv_atom_aux: ∀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 @@ -67,11 +67,11 @@ fact frees_inv_atom_aux: ∀f,L,X. L ⊢ 𝐅*⦃X⦄ ≡ f → ∀i. L = ⋆ ] 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. +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 * -f -L -X [ #f #L #s #_ #Z #Y #X #_ #H destruct | #f #i #_ #Z #Y #X #H destruct @@ -84,10 +84,10 @@ fact frees_inv_pair_aux: ∀f,L,X. L ⊢ 𝐅*⦃X⦄ ≡ f → ∀I,K,V. L = K. ] 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 → +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 * -f -L -X [ #f #L #s #_ #Z #Y #_ #H destruct @@ -101,11 +101,11 @@ fact frees_inv_unit_aux: ∀f,L,X. L ⊢ 𝐅*⦃X⦄ ≡ f → ∀I,K. L = K. ] 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. +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 * -f -L -X [ #f #L #s #_ #Z #Y #j #_ #H destruct | #f #i #_ #Z #Y #j #H destruct @@ -118,11 +118,11 @@ fact frees_inv_lref_aux: ∀f,L,X. L ⊢ 𝐅*⦃X⦄ ≡ f → ∀I,K,j. L = K. ] qed-. -lemma frees_inv_lref: ∀f,I,K,i. K.ⓘ{I} ⊢ 𝐅*⦃#(⫯i)⦄ ≡ f → - ∃∃g. K ⊢ 𝐅*⦃#i⦄ ≡ g & f = ↑g. +lemma frees_inv_lref: ∀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 @@ -133,11 +133,11 @@ 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. +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 * -f -L -X [ #f #L #s #_ #q #J #W #U #H destruct | #f #i #_ #q #J #W #U #H destruct @@ -150,12 +150,12 @@ fact frees_inv_bind_aux: ∀f,L,X. L ⊢ 𝐅*⦃X⦄ ≡ f → ∀p,I,V,T. X = ] 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. +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. /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 @@ -168,13 +168,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. +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. /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 @@ -195,11 +195,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/ @@ -207,7 +207,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/basic_2/static/frees_append.ma b/matita/matita/contribs/lambdadelta/basic_2/static/frees_append.ma index 56205c3db..9cf6bfe19 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/frees_append.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/frees_append.ma @@ -19,7 +19,7 @@ include "basic_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/ @@ -34,8 +34,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. +fact frees_inv_append_void_aux: ∀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 @@ -55,5 +55,5 @@ fact frees_inv_append_void_aux: ∀f,L,T. L ⊢ 𝐅*⦃T⦄ ≡ f → ] 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/basic_2/static/frees_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/static/frees_drops.ma index 096683f57..59c6b3ff4 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/frees_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/frees_drops.ma @@ -20,8 +20,8 @@ include "basic_2/static/frees_fqup.ma". (* Advanced properties ******************************************************) -lemma frees_atom_drops: ∀b,L,i. ⬇*[b, 𝐔❴i❵] L ≡ ⋆ → - ∀f. 𝐈⦃f⦄ → L ⊢ 𝐅*⦃#i⦄ ≡ ↑*[i]⫯f. +lemma frees_atom_drops: ∀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 @@ -29,16 +29,16 @@ lemma frees_atom_drops: ∀b,L,i. ⬇*[b, 𝐔❴i❵] L ≡ ⋆ → ] qed. -lemma frees_pair_drops: ∀f,K,V. K ⊢ 𝐅*⦃V⦄ ≡ f → - ∀i,I,L. ⬇*[i] L ≡ K.ⓑ{I}V → L ⊢ 𝐅*⦃#i⦄ ≡ ↑*[i] ⫯f. +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 #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/ ] qed. -lemma frees_unit_drops: ∀f. 𝐈⦃f⦄ → ∀I,K,i,L. ⬇*[i] L ≡ K.ⓤ{I} → - L ⊢ 𝐅*⦃#i⦄ ≡ ↑*[i] ⫯f. +lemma frees_unit_drops: ∀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 @@ -46,16 +46,16 @@ lemma frees_unit_drops: ∀f. 𝐈⦃f⦄ → ∀I,K,i,L. ⬇*[i] L ≡ K.ⓤ{I ] qed. (* -lemma frees_sort_pushs: ∀f,K,s. K ⊢ 𝐅*⦃⋆s⦄ ≡ f → - ∀i,L. ⬇*[i] L ≡ K → L ⊢ 𝐅*⦃⋆s⦄ ≡ ↑*[i] f. +lemma frees_sort_pushs: ∀f,K,s. K ⊢ 𝐅*⦃⋆s⦄ ≘ f → + ∀i,L. ⬇*[i] L ≘ K → L ⊢ 𝐅*⦃⋆s⦄ ≘ ↑*[i] f. #f #K #s #Hf #i elim i -i [ #L #H lapply (drops_fwd_isid … H ?) -H // | #i #IH #L #H elim (drops_inv_succ … H) -H /3 width=1 by frees_sort/ ] qed. *) -lemma frees_lref_pushs: ∀f,K,j. K ⊢ 𝐅*⦃#j⦄ ≡ f → - ∀i,L. ⬇*[i] L ≡ K → L ⊢ 𝐅*⦃#(i+j)⦄ ≡ ↑*[i] f. +lemma frees_lref_pushs: ∀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 @@ -63,8 +63,8 @@ lemma frees_lref_pushs: ∀f,K,j. K ⊢ 𝐅*⦃#j⦄ ≡ f → ] qed. (* -lemma frees_gref_pushs: ∀f,K,l. K ⊢ 𝐅*⦃§l⦄ ≡ f → - ∀i,L. ⬇*[i] L ≡ K → L ⊢ 𝐅*⦃§l⦄ ≡ ↑*[i] f. +lemma frees_gref_pushs: ∀f,K,l. K ⊢ 𝐅*⦃§l⦄ ≘ f → + ∀i,L. ⬇*[i] L ≘ K → L ⊢ 𝐅*⦃§l⦄ ≘ ↑*[i] f. #f #K #l #Hf #i elim i -i [ #L #H lapply (drops_fwd_isid … H ?) -H // | #i #IH #L #H elim (drops_inv_succ … H) -H /3 width=1 by frees_gref/ @@ -73,11 +73,11 @@ 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. +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 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 @@ -97,9 +97,9 @@ qed-. (* Properties with generic slicing for local environments *******************) -lemma frees_lifts: ∀b,f1,K,T. K ⊢ 𝐅*⦃T⦄ ≡ f1 → - ∀f,L. ⬇*[b, f] L ≡ K → ∀U. ⬆*[f] T ≡ U → - ∀f2. f ~⊚ f1 ≡ f2 → L ⊢ 𝐅*⦃U⦄ ≡ f2. +lemma frees_lifts: ∀b,f1,K,T. K ⊢ 𝐅*⦃T⦄ ≘ f1 → + ∀f,L. ⬇*[b, f] L ≘ K → ∀U. ⬆*[f] T ≘ U → + ∀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 @@ -154,48 +154,48 @@ lemma frees_lifts: ∀b,f1,K,T. K ⊢ 𝐅*⦃T⦄ ≡ f1 → ] qed-. -lemma frees_lifts_SO: ∀b,L,K. ⬇*[b, 𝐔❴1❵] L ≡ K → ∀T,U. ⬆*[1] T ≡ U → - ∀f. K ⊢ 𝐅*⦃T⦄ ≡ f → L ⊢ 𝐅*⦃U⦄ ≡ ↑f. +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 #HLK #T #U #HTU #f #Hf @(frees_lifts b … Hf … HTU) // (**) (* auto fails *) qed. (* Forward lemmas with generic slicing for local environments ***************) -lemma frees_fwd_coafter: ∀b,f2,L,U. L ⊢ 𝐅*⦃U⦄ ≡ f2 → - ∀f,K. ⬇*[b, f] L ≡ K → ∀T. ⬆*[f] T ≡ U → - ∀f1. K ⊢ 𝐅*⦃T⦄ ≡ f1 → f ~⊚ f1 ≡ f2. +lemma frees_fwd_coafter: ∀b,f2,L,U. L ⊢ 𝐅*⦃U⦄ ≘ f2 → + ∀f,K. ⬇*[b, f] L ≘ K → ∀T. ⬆*[f] T ≘ U → + ∀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 → - ∀f,K. ⬇*[b, f] L ≡ K → ∀T. ⬆*[f] T ≡ U → - ∃∃f1. f ~⊚ f1 ≡ f2 & K ⊢ 𝐅*⦃T⦄ ≡ f1. +lemma frees_inv_lifts_ex: ∀b,f2,L,U. L ⊢ 𝐅*⦃U⦄ ≘ f2 → + ∀f,K. ⬇*[b, f] L ≘ K → ∀T. ⬆*[f] T ≘ U → + ∃∃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. +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 #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 → - ∀f,K. ⬇*[b, f] L ≡ K → ∀T. ⬆*[f] T ≡ U → - ∀f1. f ~⊚ f1 ≡ f2 → K ⊢ 𝐅*⦃T⦄ ≡ f1. +lemma frees_inv_lifts: ∀b,f2,L,U. L ⊢ 𝐅*⦃U⦄ ≘ f2 → + ∀f,K. ⬇*[b, f] L ≘ K → ∀T. ⬆*[f] T ≘ U → + ∀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 lfxs_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 → +lemma frees_inv_drops_next: ∀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

(injective_push … Hx1) >(injective_push … Hx2) -x2 -x1 @@ -49,8 +49,8 @@ lemma after_inv_ppx: ∀g1,g2,g. g1 ⊚ g2 ≡ g → ∀f1,f2. ↑f1 = g1 → ] qed-. -lemma after_inv_pnx: ∀g1,g2,g. g1 ⊚ g2 ≡ g → ∀f1,f2. ↑f1 = g1 → ⫯f2 = g2 → - ∃∃f. f1 ⊚ f2 ≡ f & ⫯f = g. +lemma after_inv_pnx: ∀g1,g2,g. g1 ⊚ g2 ≘ g → ∀f1,f2. ↑f1 = g1 → ⫯f2 = g2 → + ∃∃f. f1 ⊚ f2 ≘ f & ⫯f = g. #g1 #g2 #g * -g1 -g2 -g #f1 #f2 #f #g1 [ #g2 #g #_ #_ #H2 #_ #x1 #x2 #_ #Hx2 destruct elim (discr_next_push … Hx2) @@ -62,8 +62,8 @@ lemma after_inv_pnx: ∀g1,g2,g. g1 ⊚ g2 ≡ g → ∀f1,f2. ↑f1 = g1 → ] qed-. -lemma after_inv_nxx: ∀g1,f2,g. g1 ⊚ f2 ≡ g → ∀f1. ⫯f1 = g1 → - ∃∃f. f1 ⊚ f2 ≡ f & ⫯f = g. +lemma after_inv_nxx: ∀g1,f2,g. g1 ⊚ f2 ≘ g → ∀f1. ⫯f1 = g1 → + ∃∃f. f1 ⊚ f2 ≘ f & ⫯f = g. #g1 #f2 #g * -g1 -f2 -g #f1 #f2 #f #g1 [ #g2 #g #_ #H1 #_ #_ #x1 #Hx1 destruct elim (discr_next_push … Hx1) @@ -77,71 +77,71 @@ qed-. (* Advanced inversion lemmas ************************************************) -lemma after_inv_ppp: ∀g1,g2,g. g1 ⊚ g2 ≡ g → - ∀f1,f2,f. ↑f1 = g1 → ↑f2 = g2 → ↑f = g → f1 ⊚ f2 ≡ f. +lemma after_inv_ppp: ∀g1,g2,g. g1 ⊚ g2 ≘ g → + ∀f1,f2,f. ↑f1 = g1 → ↑f2 = g2 → ↑f = g → f1 ⊚ f2 ≘ f. #g1 #g2 #g #Hg #f1 #f2 #f #H1 #H2 #H elim (after_inv_ppx … Hg … H1 H2) -g1 -g2 #x #Hf #Hx destruct <(injective_push … Hx) -f // qed-. -lemma after_inv_ppn: ∀g1,g2,g. g1 ⊚ g2 ≡ g → +lemma after_inv_ppn: ∀g1,g2,g. g1 ⊚ g2 ≘ g → ∀f1,f2,f. ↑f1 = g1 → ↑f2 = g2 → ⫯f = g → ⊥. #g1 #g2 #g #Hg #f1 #f2 #f #H1 #H2 #H elim (after_inv_ppx … Hg … H1 H2) -g1 -g2 #x #Hf #Hx destruct elim (discr_push_next … Hx) qed-. -lemma after_inv_pnn: ∀g1,g2,g. g1 ⊚ g2 ≡ g → - ∀f1,f2,f. ↑f1 = g1 → ⫯f2 = g2 → ⫯f = g → f1 ⊚ f2 ≡ f. +lemma after_inv_pnn: ∀g1,g2,g. g1 ⊚ g2 ≘ g → + ∀f1,f2,f. ↑f1 = g1 → ⫯f2 = g2 → ⫯f = g → f1 ⊚ f2 ≘ f. #g1 #g2 #g #Hg #f1 #f2 #f #H1 #H2 #H elim (after_inv_pnx … Hg … H1 H2) -g1 -g2 #x #Hf #Hx destruct <(injective_next … Hx) -f // qed-. -lemma after_inv_pnp: ∀g1,g2,g. g1 ⊚ g2 ≡ g → +lemma after_inv_pnp: ∀g1,g2,g. g1 ⊚ g2 ≘ g → ∀f1,f2,f. ↑f1 = g1 → ⫯f2 = g2 → ↑f = g → ⊥. #g1 #g2 #g #Hg #f1 #f2 #f #H1 #H2 #H elim (after_inv_pnx … Hg … H1 H2) -g1 -g2 #x #Hf #Hx destruct elim (discr_next_push … Hx) qed-. -lemma after_inv_nxn: ∀g1,f2,g. g1 ⊚ f2 ≡ g → - ∀f1,f. ⫯f1 = g1 → ⫯f = g → f1 ⊚ f2 ≡ f. +lemma after_inv_nxn: ∀g1,f2,g. g1 ⊚ f2 ≘ g → + ∀f1,f. ⫯f1 = g1 → ⫯f = g → f1 ⊚ f2 ≘ f. #g1 #f2 #g #Hg #f1 #f #H1 #H elim (after_inv_nxx … Hg … H1) -g1 #x #Hf #Hx destruct <(injective_next … Hx) -f // qed-. -lemma after_inv_nxp: ∀g1,f2,g. g1 ⊚ f2 ≡ g → +lemma after_inv_nxp: ∀g1,f2,g. g1 ⊚ f2 ≘ g → ∀f1,f. ⫯f1 = g1 → ↑f = g → ⊥. #g1 #f2 #g #Hg #f1 #f #H1 #H elim (after_inv_nxx … Hg … H1) -g1 #x #Hf #Hx destruct elim (discr_next_push … Hx) qed-. -lemma after_inv_pxp: ∀g1,g2,g. g1 ⊚ g2 ≡ g → +lemma after_inv_pxp: ∀g1,g2,g. g1 ⊚ g2 ≘ g → ∀f1,f. ↑f1 = g1 → ↑f = g → - ∃∃f2. f1 ⊚ f2 ≡ f & ↑f2 = g2. + ∃∃f2. f1 ⊚ f2 ≘ f & ↑f2 = g2. #g1 * * [2: #m2] #g2 #g #Hg #f1 #f #H1 #H [ elim (after_inv_pnp … Hg … H1 … H) -g1 -g -f1 -f // | lapply (after_inv_ppp … Hg … H1 … H) -g1 -g /2 width=3 by ex2_intro/ ] qed-. -lemma after_inv_pxn: ∀g1,g2,g. g1 ⊚ g2 ≡ g → +lemma after_inv_pxn: ∀g1,g2,g. g1 ⊚ g2 ≘ g → ∀f1,f. ↑f1 = g1 → ⫯f = g → - ∃∃f2. f1 ⊚ f2 ≡ f & ⫯f2 = g2. + ∃∃f2. f1 ⊚ f2 ≘ f & ⫯f2 = g2. #g1 * * [2: #m2] #g2 #g #Hg #f1 #f #H1 #H [ lapply (after_inv_pnn … Hg … H1 … H) -g1 -g /2 width=3 by ex2_intro/ | elim (after_inv_ppn … Hg … H1 … H) -g1 -g -f1 -f // ] qed-. -lemma after_inv_xxp: ∀g1,g2,g. g1 ⊚ g2 ≡ g → ∀f. ↑f = g → - ∃∃f1,f2. f1 ⊚ f2 ≡ f & ↑f1 = g1 & ↑f2 = g2. +lemma after_inv_xxp: ∀g1,g2,g. g1 ⊚ g2 ≘ g → ∀f. ↑f = g → + ∃∃f1,f2. f1 ⊚ f2 ≘ f & ↑f1 = g1 & ↑f2 = g2. * * [2: #m1 ] #g1 #g2 #g #Hg #f #H [ elim (after_inv_nxp … Hg … H) -g2 -g -f // | elim (after_inv_pxp … Hg … H) -g /2 width=5 by ex3_2_intro/ ] qed-. -lemma after_inv_xxn: ∀g1,g2,g. g1 ⊚ g2 ≡ g → ∀f. ⫯f = g → - (∃∃f1,f2. f1 ⊚ f2 ≡ f & ↑f1 = g1 & ⫯f2 = g2) ∨ - ∃∃f1. f1 ⊚ g2 ≡ f & ⫯f1 = g1. +lemma after_inv_xxn: ∀g1,g2,g. g1 ⊚ g2 ≘ g → ∀f. ⫯f = g → + (∃∃f1,f2. f1 ⊚ f2 ≘ f & ↑f1 = g1 & ⫯f2 = g2) ∨ + ∃∃f1. f1 ⊚ g2 ≘ f & ⫯f1 = g1. * * [2: #m1 ] #g1 #g2 #g #Hg #f #H [ /4 width=5 by after_inv_nxn, or_intror, ex2_intro/ | elim (after_inv_pxn … Hg … H) -g @@ -149,9 +149,9 @@ lemma after_inv_xxn: ∀g1,g2,g. g1 ⊚ g2 ≡ g → ∀f. ⫯f = g → ] qed-. -lemma after_inv_pxx: ∀g1,g2,g. g1 ⊚ g2 ≡ g → ∀f1. ↑f1 = g1 → - (∃∃f2,f. f1 ⊚ f2 ≡ f & ↑f2 = g2 & ↑f = g) ∨ - (∃∃f2,f. f1 ⊚ f2 ≡ f & ⫯f2 = g2 & ⫯f = g). +lemma after_inv_pxx: ∀g1,g2,g. g1 ⊚ g2 ≘ g → ∀f1. ↑f1 = g1 → + (∃∃f2,f. f1 ⊚ f2 ≘ f & ↑f2 = g2 & ↑f = g) ∨ + (∃∃f2,f. f1 ⊚ f2 ≘ f & ⫯f2 = g2 & ⫯f = g). #g1 * * [2: #m2 ] #g2 #g #Hg #f1 #H [ elim (after_inv_pnx … Hg … H) -g1 /3 width=5 by or_intror, ex3_2_intro/ @@ -162,7 +162,7 @@ qed-. (* Basic properties *********************************************************) -corec lemma after_eq_repl_back2: ∀f1,f. eq_repl_back (λf2. f2 ⊚ f1 ≡ f). +corec lemma after_eq_repl_back2: ∀f1,f. eq_repl_back (λf2. f2 ⊚ f1 ≘ f). #f1 #f #f2 * -f2 -f1 -f #f21 #f1 #f #g21 [1,2: #g1 ] #g #Hf #H21 [1,2: #H1 ] #H #g22 #H0 [ cases (eq_inv_px … H0 … H21) -g21 /3 width=7 by after_refl/ @@ -171,11 +171,11 @@ corec lemma after_eq_repl_back2: ∀f1,f. eq_repl_back (λf2. f2 ⊚ f1 ≡ f). ] qed-. -lemma after_eq_repl_fwd2: ∀f1,f. eq_repl_fwd (λf2. f2 ⊚ f1 ≡ f). +lemma after_eq_repl_fwd2: ∀f1,f. eq_repl_fwd (λf2. f2 ⊚ f1 ≘ f). #f1 #f @eq_repl_sym /2 width=3 by after_eq_repl_back2/ qed-. -corec lemma after_eq_repl_back1: ∀f2,f. eq_repl_back (λf1. f2 ⊚ f1 ≡ f). +corec lemma after_eq_repl_back1: ∀f2,f. eq_repl_back (λf1. f2 ⊚ f1 ≘ f). #f2 #f #f1 * -f2 -f1 -f #f2 #f11 #f #g2 [1,2: #g11 ] #g #Hf #H2 [1,2: #H11 ] #H #g2 #H0 [ cases (eq_inv_px … H0 … H11) -g11 /3 width=7 by after_refl/ @@ -184,11 +184,11 @@ corec lemma after_eq_repl_back1: ∀f2,f. eq_repl_back (λf1. f2 ⊚ f1 ≡ f). ] qed-. -lemma after_eq_repl_fwd1: ∀f2,f. eq_repl_fwd (λf1. f2 ⊚ f1 ≡ f). +lemma after_eq_repl_fwd1: ∀f2,f. eq_repl_fwd (λf1. f2 ⊚ f1 ≘ f). #f2 #f @eq_repl_sym /2 width=3 by after_eq_repl_back1/ qed-. -corec lemma after_eq_repl_back0: ∀f1,f2. eq_repl_back (λf. f2 ⊚ f1 ≡ f). +corec lemma after_eq_repl_back0: ∀f1,f2. eq_repl_back (λf. f2 ⊚ f1 ≘ f). #f2 #f1 #f * -f2 -f1 -f #f2 #f1 #f01 #g2 [1,2: #g1 ] #g01 #Hf01 #H2 [1,2: #H1 ] #H01 #g02 #H0 [ cases (eq_inv_px … H0 … H01) -g01 /3 width=7 by after_refl/ @@ -197,15 +197,15 @@ corec lemma after_eq_repl_back0: ∀f1,f2. eq_repl_back (λf. f2 ⊚ f1 ≡ f). ] qed-. -lemma after_eq_repl_fwd0: ∀f2,f1. eq_repl_fwd (λf. f2 ⊚ f1 ≡ f). +lemma after_eq_repl_fwd0: ∀f2,f1. eq_repl_fwd (λf. f2 ⊚ f1 ≘ f). #f2 #f1 @eq_repl_sym /2 width=3 by after_eq_repl_back0/ qed-. (* Main properties **********************************************************) -corec theorem after_trans1: ∀f0,f3,f4. f0 ⊚ f3 ≡ f4 → - ∀f1,f2. f1 ⊚ f2 ≡ f0 → - ∀f. f2 ⊚ f3 ≡ f → f1 ⊚ f ≡ f4. +corec theorem after_trans1: ∀f0,f3,f4. f0 ⊚ f3 ≘ f4 → + ∀f1,f2. f1 ⊚ f2 ≘ f0 → + ∀f. f2 ⊚ f3 ≘ f → f1 ⊚ f ≘ f4. #f0 #f3 #f4 * -f0 -f3 -f4 #f0 #f3 #f4 #g0 [1,2: #g3 ] #g4 [ #Hf4 #H0 #H3 #H4 #g1 #g2 #Hg0 #g #Hg cases (after_inv_xxp … Hg0 … H0) -g0 @@ -227,9 +227,9 @@ corec theorem after_trans1: ∀f0,f3,f4. f0 ⊚ f3 ≡ f4 → ] qed-. -corec theorem after_trans2: ∀f1,f0,f4. f1 ⊚ f0 ≡ f4 → - ∀f2, f3. f2 ⊚ f3 ≡ f0 → - ∀f. f1 ⊚ f2 ≡ f → f ⊚ f3 ≡ f4. +corec theorem after_trans2: ∀f1,f0,f4. f1 ⊚ f0 ≘ f4 → + ∀f2, f3. f2 ⊚ f3 ≘ f0 → + ∀f. f1 ⊚ f2 ≘ f → f ⊚ f3 ≘ f4. #f1 #f0 #f4 * -f1 -f0 -f4 #f1 #f0 #f4 #g1 [1,2: #g0 ] #g4 [ #Hf4 #H1 #H0 #H4 #g2 #g3 #Hg0 #g #Hg cases (after_inv_xxp … Hg0 … H0) -g0 @@ -253,7 +253,7 @@ qed-. (* Main inversion lemmas ****************************************************) -corec theorem after_mono: ∀f1,f2,x,y. f1 ⊚ f2 ≡ x → f1 ⊚ f2 ≡ y → x ≗ y. +corec theorem after_mono: ∀f1,f2,x,y. f1 ⊚ f2 ≘ x → f1 ⊚ f2 ≘ y → x ≗ y. #f1 #f2 #x #y * -f1 -f2 -x #f1 #f2 #x #g1 [1,2: #g2 ] #g #Hx #H1 [1,2: #H2 ] #H0x #Hy [ cases (after_inv_ppx … Hy … H1 H2) -g1 -g2 /3 width=8 by eq_push/ @@ -262,14 +262,14 @@ corec theorem after_mono: ∀f1,f2,x,y. f1 ⊚ f2 ≡ x → f1 ⊚ f2 ≡ y → ] qed-. -lemma after_mono_eq: ∀f1,f2,f. f1 ⊚ f2 ≡ f → ∀g1,g2,g. g1 ⊚ g2 ≡ g → +lemma after_mono_eq: ∀f1,f2,f. f1 ⊚ f2 ≘ f → ∀g1,g2,g. g1 ⊚ g2 ≘ g → f1 ≗ g1 → f2 ≗ g2 → f ≗ g. /4 width=4 by after_mono, after_eq_repl_back1, after_eq_repl_back2/ qed-. (* Properties on tls ********************************************************) -lemma after_tls: ∀n,f1,f2,f. @⦃0, f1⦄ ≡ n → - f1 ⊚ f2 ≡ f → ⫱*[n]f1 ⊚ f2 ≡ ⫱*[n]f. +lemma after_tls: ∀n,f1,f2,f. @⦃0, f1⦄ ≘ n → + f1 ⊚ f2 ≘ f → ⫱*[n]f1 ⊚ f2 ≘ ⫱*[n]f. #n elim n -n // #n #IH #f1 #f2 #f #Hf1 #Hf cases (at_inv_pxn … Hf1) -Hf1 [ |*: // ] #g1 #Hg1 #H1 @@ -279,12 +279,12 @@ qed. (* Properties on isid *******************************************************) -corec lemma after_isid_sn: ∀f1. 𝐈⦃f1⦄ → ∀f2. f1 ⊚ f2 ≡ f2. +corec lemma after_isid_sn: ∀f1. 𝐈⦃f1⦄ → ∀f2. f1 ⊚ f2 ≘ f2. #f1 * -f1 #f1 #g1 #Hf1 #H1 #f2 cases (pn_split f2) * #g2 #H2 /3 width=7 by after_push, after_refl/ qed. -corec lemma after_isid_dx: ∀f2. 𝐈⦃f2⦄ → ∀f1. f1 ⊚ f2 ≡ f1. +corec lemma after_isid_dx: ∀f2. 𝐈⦃f2⦄ → ∀f1. f1 ⊚ f2 ≘ f1. #f2 * -f2 #f2 #g2 #Hf2 #H2 #f1 cases (pn_split f1) * #g1 #H1 [ /3 width=7 by after_refl/ | @(after_next … H1 H1) /3 width=3 by isid_push/ @@ -293,37 +293,37 @@ qed. (* Inversion lemmas on isid *************************************************) -lemma after_isid_inv_sn: ∀f1,f2,f. f1 ⊚ f2 ≡ f → 𝐈⦃f1⦄ → f2 ≗ f. +lemma after_isid_inv_sn: ∀f1,f2,f. f1 ⊚ f2 ≘ f → 𝐈⦃f1⦄ → f2 ≗ f. /3 width=6 by after_isid_sn, after_mono/ qed-. -lemma after_isid_inv_dx: ∀f1,f2,f. f1 ⊚ f2 ≡ f → 𝐈⦃f2⦄ → f1 ≗ f. +lemma after_isid_inv_dx: ∀f1,f2,f. f1 ⊚ f2 ≘ f → 𝐈⦃f2⦄ → f1 ≗ f. /3 width=6 by after_isid_dx, after_mono/ qed-. -corec lemma after_fwd_isid1: ∀f1,f2,f. f1 ⊚ f2 ≡ f → 𝐈⦃f⦄ → 𝐈⦃f1⦄. +corec lemma after_fwd_isid1: ∀f1,f2,f. f1 ⊚ f2 ≘ f → 𝐈⦃f⦄ → 𝐈⦃f1⦄. #f1 #f2 #f * -f1 -f2 -f #f1 #f2 #f #g1 [1,2: #g2 ] #g #Hf #H1 [1,2: #H2 ] #H0 #H [ /4 width=6 by isid_inv_push, isid_push/ ] cases (isid_inv_next … H … H0) qed-. -corec lemma after_fwd_isid2: ∀f1,f2,f. f1 ⊚ f2 ≡ f → 𝐈⦃f⦄ → 𝐈⦃f2⦄. +corec lemma after_fwd_isid2: ∀f1,f2,f. f1 ⊚ f2 ≘ f → 𝐈⦃f⦄ → 𝐈⦃f2⦄. #f1 #f2 #f * -f1 -f2 -f #f1 #f2 #f #g1 [1,2: #g2 ] #g #Hf #H1 [1,2: #H2 ] #H0 #H [ /4 width=6 by isid_inv_push, isid_push/ ] cases (isid_inv_next … H … H0) qed-. -lemma after_inv_isid3: ∀f1,f2,f. f1 ⊚ f2 ≡ f → 𝐈⦃f⦄ → 𝐈⦃f1⦄ ∧ 𝐈⦃f2⦄. +lemma after_inv_isid3: ∀f1,f2,f. f1 ⊚ f2 ≘ f → 𝐈⦃f⦄ → 𝐈⦃f1⦄ ∧ 𝐈⦃f2⦄. /3 width=4 by after_fwd_isid2, after_fwd_isid1, conj/ qed-. (* Properties on isuni ******************************************************) -lemma after_isid_isuni: ∀f1,f2. 𝐈⦃f2⦄ → 𝐔⦃f1⦄ → f1 ⊚ ⫯f2 ≡ ⫯f1. +lemma after_isid_isuni: ∀f1,f2. 𝐈⦃f2⦄ → 𝐔⦃f1⦄ → f1 ⊚ ⫯f2 ≘ ⫯f1. #f1 #f2 #Hf2 #H elim H -H /5 width=7 by after_isid_dx, after_eq_repl_back2, after_next, after_push, eq_push_inv_isid/ qed. -lemma after_uni_next2: ∀f2. 𝐔⦃f2⦄ → ∀f1,f. ⫯f2 ⊚ f1 ≡ f → f2 ⊚ ⫯f1 ≡ f. +lemma after_uni_next2: ∀f2. 𝐔⦃f2⦄ → ∀f1,f. ⫯f2 ⊚ f1 ≘ f → f2 ⊚ ⫯f1 ≘ f. #f2 #H elim H -f2 [ #f2 #Hf2 #f1 #f #Hf elim (after_inv_nxx … Hf) -Hf [2,3: // ] #g #Hg #H0 destruct @@ -336,15 +336,15 @@ qed. (* Properties on uni ********************************************************) -lemma after_uni: ∀n1,n2. 𝐔❴n1❵ ⊚ 𝐔❴n2❵ ≡ 𝐔❴n1+n2❵. +lemma after_uni: ∀n1,n2. 𝐔❴n1❵ ⊚ 𝐔❴n2❵ ≘ 𝐔❴n1+n2❵. @nat_elim2 [3: #n #m (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 = ] 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, ] 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_push … Hx1) >(injective_push … Hx2) -x2 -x1 @@ -55,8 +55,8 @@ lemma coafter_inv_ppx: ∀g1,g2,g. g1 ~⊚ g2 ≡ g → ∀f1,f2. ↑f1 = g1 → ] qed-. -lemma coafter_inv_pnx: ∀g1,g2,g. g1 ~⊚ g2 ≡ g → ∀f1,f2. ↑f1 = g1 → ⫯f2 = g2 → - ∃∃f. f1 ~⊚ f2 ≡ f & ⫯f = g. +lemma coafter_inv_pnx: ∀g1,g2,g. g1 ~⊚ g2 ≘ g → ∀f1,f2. ↑f1 = g1 → ⫯f2 = g2 → + ∃∃f. f1 ~⊚ f2 ≘ f & ⫯f = g. #g1 #g2 #g * -g1 -g2 -g #f1 #f2 #f #g1 [ #g2 #g #_ #_ #H2 #_ #x1 #x2 #_ #Hx2 destruct elim (discr_next_push … Hx2) @@ -68,8 +68,8 @@ lemma coafter_inv_pnx: ∀g1,g2,g. g1 ~⊚ g2 ≡ g → ∀f1,f2. ↑f1 = g1 → ] qed-. -lemma coafter_inv_nxx: ∀g1,f2,g. g1 ~⊚ f2 ≡ g → ∀f1. ⫯f1 = g1 → - ∃∃f. f1 ~⊚ f2 ≡ f & ↑f = g. +lemma coafter_inv_nxx: ∀g1,f2,g. g1 ~⊚ f2 ≘ g → ∀f1. ⫯f1 = g1 → + ∃∃f. f1 ~⊚ f2 ≘ f & ↑f = g. #g1 #f2 #g * -g1 -f2 -g #f1 #f2 #f #g1 [ #g2 #g #_ #H1 #_ #_ #x1 #Hx1 destruct elim (discr_next_push … Hx1) @@ -83,85 +83,85 @@ qed-. (* Advanced inversion lemmas ************************************************) -lemma coafter_inv_ppp: ∀g1,g2,g. g1 ~⊚ g2 ≡ g → - ∀f1,f2,f. ↑f1 = g1 → ↑f2 = g2 → ↑f = g → f1 ~⊚ f2 ≡ f. +lemma coafter_inv_ppp: ∀g1,g2,g. g1 ~⊚ g2 ≘ g → + ∀f1,f2,f. ↑f1 = g1 → ↑f2 = g2 → ↑f = g → f1 ~⊚ f2 ≘ f. #g1 #g2 #g #Hg #f1 #f2 #f #H1 #H2 #H elim (coafter_inv_ppx … Hg … H1 H2) -g1 -g2 #x #Hf #Hx destruct <(injective_push … Hx) -f // qed-. -lemma coafter_inv_ppn: ∀g1,g2,g. g1 ~⊚ g2 ≡ g → +lemma coafter_inv_ppn: ∀g1,g2,g. g1 ~⊚ g2 ≘ g → ∀f1,f2,f. ↑f1 = g1 → ↑f2 = g2 → ⫯f = g → ⊥. #g1 #g2 #g #Hg #f1 #f2 #f #H1 #H2 #H elim (coafter_inv_ppx … Hg … H1 H2) -g1 -g2 #x #Hf #Hx destruct elim (discr_push_next … Hx) qed-. -lemma coafter_inv_pnn: ∀g1,g2,g. g1 ~⊚ g2 ≡ g → - ∀f1,f2,f. ↑f1 = g1 → ⫯f2 = g2 → ⫯f = g → f1 ~⊚ f2 ≡ f. +lemma coafter_inv_pnn: ∀g1,g2,g. g1 ~⊚ g2 ≘ g → + ∀f1,f2,f. ↑f1 = g1 → ⫯f2 = g2 → ⫯f = g → f1 ~⊚ f2 ≘ f. #g1 #g2 #g #Hg #f1 #f2 #f #H1 #H2 #H elim (coafter_inv_pnx … Hg … H1 H2) -g1 -g2 #x #Hf #Hx destruct <(injective_next … Hx) -f // qed-. -lemma coafter_inv_pnp: ∀g1,g2,g. g1 ~⊚ g2 ≡ g → +lemma coafter_inv_pnp: ∀g1,g2,g. g1 ~⊚ g2 ≘ g → ∀f1,f2,f. ↑f1 = g1 → ⫯f2 = g2 → ↑f = g → ⊥. #g1 #g2 #g #Hg #f1 #f2 #f #H1 #H2 #H elim (coafter_inv_pnx … Hg … H1 H2) -g1 -g2 #x #Hf #Hx destruct elim (discr_next_push … Hx) qed-. -lemma coafter_inv_nxp: ∀g1,f2,g. g1 ~⊚ f2 ≡ g → - ∀f1,f. ⫯f1 = g1 → ↑f = g → f1 ~⊚ f2 ≡ f. +lemma coafter_inv_nxp: ∀g1,f2,g. g1 ~⊚ f2 ≘ g → + ∀f1,f. ⫯f1 = g1 → ↑f = g → f1 ~⊚ f2 ≘ f. #g1 #f2 #g #Hg #f1 #f #H1 #H elim (coafter_inv_nxx … Hg … H1) -g1 #x #Hf #Hx destruct <(injective_push … Hx) -f // qed-. -lemma coafter_inv_nxn: ∀g1,f2,g. g1 ~⊚ f2 ≡ g → +lemma coafter_inv_nxn: ∀g1,f2,g. g1 ~⊚ f2 ≘ g → ∀f1,f. ⫯f1 = g1 → ⫯f = g → ⊥. #g1 #f2 #g #Hg #f1 #f #H1 #H elim (coafter_inv_nxx … Hg … H1) -g1 #x #Hf #Hx destruct elim (discr_push_next … Hx) qed-. -lemma coafter_inv_pxp: ∀g1,g2,g. g1 ~⊚ g2 ≡ g → +lemma coafter_inv_pxp: ∀g1,g2,g. g1 ~⊚ g2 ≘ g → ∀f1,f. ↑f1 = g1 → ↑f = g → - ∃∃f2. f1 ~⊚ f2 ≡ f & ↑f2 = g2. + ∃∃f2. f1 ~⊚ f2 ≘ f & ↑f2 = g2. #g1 #g2 #g #Hg #f1 #f #H1 #H elim (pn_split g2) * #f2 #H2 [ lapply (coafter_inv_ppp … Hg … H1 H2 H) -g1 -g /2 width=3 by ex2_intro/ | elim (coafter_inv_pnp … Hg … H1 H2 H) ] qed-. -lemma coafter_inv_pxn: ∀g1,g2,g. g1 ~⊚ g2 ≡ g → +lemma coafter_inv_pxn: ∀g1,g2,g. g1 ~⊚ g2 ≘ g → ∀f1,f. ↑f1 = g1 → ⫯f = g → - ∃∃f2. f1 ~⊚ f2 ≡ f & ⫯f2 = g2. + ∃∃f2. f1 ~⊚ f2 ≘ f & ⫯f2 = g2. #g1 #g2 #g #Hg #f1 #f #H1 #H elim (pn_split g2) * #f2 #H2 [ elim (coafter_inv_ppn … Hg … H1 H2 H) | lapply (coafter_inv_pnn … Hg … H1 … H) -g1 -g /2 width=3 by ex2_intro/ ] qed-. -lemma coafter_inv_xxn: ∀g1,g2,g. g1 ~⊚ g2 ≡ g → ∀f. ⫯f = g → - ∃∃f1,f2. f1 ~⊚ f2 ≡ f & ↑f1 = g1 & ⫯f2 = g2. +lemma coafter_inv_xxn: ∀g1,g2,g. g1 ~⊚ g2 ≘ g → ∀f. ⫯f = g → + ∃∃f1,f2. f1 ~⊚ f2 ≘ f & ↑f1 = g1 & ⫯f2 = g2. #g1 #g2 #g #Hg #f #H elim (pn_split g1) * #f1 #H1 [ elim (coafter_inv_pxn … Hg … H1 H) -g /2 width=5 by ex3_2_intro/ | elim (coafter_inv_nxn … Hg … H1 H) ] qed-. -lemma coafter_inv_xnn: ∀g1,g2,g. g1 ~⊚ g2 ≡ g → +lemma coafter_inv_xnn: ∀g1,g2,g. g1 ~⊚ g2 ≘ g → ∀f2,f. ⫯f2 = g2 → ⫯f = g → - ∃∃f1. f1 ~⊚ f2 ≡ f & ↑f1 = g1. + ∃∃f1. f1 ~⊚ f2 ≘ f & ↑f1 = g1. #g1 #g2 #g #Hg #f2 #f #H2 destruct #H elim (coafter_inv_xxn … Hg … H) -g #z1 #z2 #Hf #H1 #H2 destruct /2 width=3 by ex2_intro/ qed-. -lemma coafter_inv_xxp: ∀g1,g2,g. g1 ~⊚ g2 ≡ g → ∀f. ↑f = g → - (∃∃f1,f2. f1 ~⊚ f2 ≡ f & ↑f1 = g1 & ↑f2 = g2) ∨ - ∃∃f1. f1 ~⊚ g2 ≡ f & ⫯f1 = g1. +lemma coafter_inv_xxp: ∀g1,g2,g. g1 ~⊚ g2 ≘ g → ∀f. ↑f = g → + (∃∃f1,f2. f1 ~⊚ f2 ≘ f & ↑f1 = g1 & ↑f2 = g2) ∨ + ∃∃f1. f1 ~⊚ g2 ≘ f & ⫯f1 = g1. #g1 #g2 #g #Hg #f #H elim (pn_split g1) * #f1 #H1 [ elim (coafter_inv_pxp … Hg … H1 H) -g /3 width=5 by or_introl, ex3_2_intro/ @@ -169,9 +169,9 @@ lemma coafter_inv_xxp: ∀g1,g2,g. g1 ~⊚ g2 ≡ g → ∀f. ↑f = g → ] qed-. -lemma coafter_inv_pxx: ∀g1,g2,g. g1 ~⊚ g2 ≡ g → ∀f1. ↑f1 = g1 → - (∃∃f2,f. f1 ~⊚ f2 ≡ f & ↑f2 = g2 & ↑f = g) ∨ - (∃∃f2,f. f1 ~⊚ f2 ≡ f & ⫯f2 = g2 & ⫯f = g). +lemma coafter_inv_pxx: ∀g1,g2,g. g1 ~⊚ g2 ≘ g → ∀f1. ↑f1 = g1 → + (∃∃f2,f. f1 ~⊚ f2 ≘ f & ↑f2 = g2 & ↑f = g) ∨ + (∃∃f2,f. f1 ~⊚ f2 ≘ f & ⫯f2 = g2 & ⫯f = g). #g1 #g2 #g #Hg #f1 #H1 elim (pn_split g2) * #f2 #H2 [ elim (coafter_inv_ppx … Hg … H1 H2) -g1 /3 width=5 by or_introl, ex3_2_intro/ @@ -182,7 +182,7 @@ qed-. (* Basic properties *********************************************************) -corec lemma coafter_eq_repl_back2: ∀f1,f. eq_repl_back (λf2. f2 ~⊚ f1 ≡ f). +corec lemma coafter_eq_repl_back2: ∀f1,f. eq_repl_back (λf2. f2 ~⊚ f1 ≘ f). #f1 #f #f2 * -f2 -f1 -f #f21 #f1 #f #g21 [1,2: #g1 ] #g #Hf #H21 [1,2: #H1 ] #H #g22 #H0 [ cases (eq_inv_px … H0 … H21) -g21 /3 width=7 by coafter_refl/ @@ -191,11 +191,11 @@ corec lemma coafter_eq_repl_back2: ∀f1,f. eq_repl_back (λf2. f2 ~⊚ f1 ≡ f ] qed-. -lemma coafter_eq_repl_fwd2: ∀f1,f. eq_repl_fwd (λf2. f2 ~⊚ f1 ≡ f). +lemma coafter_eq_repl_fwd2: ∀f1,f. eq_repl_fwd (λf2. f2 ~⊚ f1 ≘ f). #f1 #f @eq_repl_sym /2 width=3 by coafter_eq_repl_back2/ qed-. -corec lemma coafter_eq_repl_back1: ∀f2,f. eq_repl_back (λf1. f2 ~⊚ f1 ≡ f). +corec lemma coafter_eq_repl_back1: ∀f2,f. eq_repl_back (λf1. f2 ~⊚ f1 ≘ f). #f2 #f #f1 * -f2 -f1 -f #f2 #f11 #f #g2 [1,2: #g11 ] #g #Hf #H2 [1,2: #H11 ] #H #g2 #H0 [ cases (eq_inv_px … H0 … H11) -g11 /3 width=7 by coafter_refl/ @@ -204,11 +204,11 @@ corec lemma coafter_eq_repl_back1: ∀f2,f. eq_repl_back (λf1. f2 ~⊚ f1 ≡ f ] qed-. -lemma coafter_eq_repl_fwd1: ∀f2,f. eq_repl_fwd (λf1. f2 ~⊚ f1 ≡ f). +lemma coafter_eq_repl_fwd1: ∀f2,f. eq_repl_fwd (λf1. f2 ~⊚ f1 ≘ f). #f2 #f @eq_repl_sym /2 width=3 by coafter_eq_repl_back1/ qed-. -corec lemma coafter_eq_repl_back0: ∀f1,f2. eq_repl_back (λf. f2 ~⊚ f1 ≡ f). +corec lemma coafter_eq_repl_back0: ∀f1,f2. eq_repl_back (λf. f2 ~⊚ f1 ≘ f). #f2 #f1 #f * -f2 -f1 -f #f2 #f1 #f01 #g2 [1,2: #g1 ] #g01 #Hf01 #H2 [1,2: #H1 ] #H01 #g02 #H0 [ cases (eq_inv_px … H0 … H01) -g01 /3 width=7 by coafter_refl/ @@ -217,13 +217,13 @@ corec lemma coafter_eq_repl_back0: ∀f1,f2. eq_repl_back (λf. f2 ~⊚ f1 ≡ f ] qed-. -lemma coafter_eq_repl_fwd0: ∀f2,f1. eq_repl_fwd (λf. f2 ~⊚ f1 ≡ f). +lemma coafter_eq_repl_fwd0: ∀f2,f1. eq_repl_fwd (λf. f2 ~⊚ f1 ≘ f). #f2 #f1 @eq_repl_sym /2 width=3 by coafter_eq_repl_back0/ qed-. (* Main inversion lemmas ****************************************************) -corec theorem coafter_mono: ∀f1,f2,x,y. f1 ~⊚ f2 ≡ x → f1 ~⊚ f2 ≡ y → x ≗ y. +corec theorem coafter_mono: ∀f1,f2,x,y. f1 ~⊚ f2 ≘ x → f1 ~⊚ f2 ≘ y → x ≗ y. #f1 #f2 #x #y * -f1 -f2 -x #f1 #f2 #x #g1 [1,2: #g2 ] #g #Hx #H1 [1,2: #H2 ] #H0x #Hy [ cases (coafter_inv_ppx … Hy … H1 H2) -g1 -g2 /3 width=8 by eq_push/ @@ -232,13 +232,13 @@ corec theorem coafter_mono: ∀f1,f2,x,y. f1 ~⊚ f2 ≡ x → f1 ~⊚ f2 ≡ y ] qed-. -lemma coafter_mono_eq: ∀f1,f2,f. f1 ~⊚ f2 ≡ f → ∀g1,g2,g. g1 ~⊚ g2 ≡ g → +lemma coafter_mono_eq: ∀f1,f2,f. f1 ~⊚ f2 ≘ f → ∀g1,g2,g. g1 ~⊚ g2 ≘ g → f1 ≗ g1 → f2 ≗ g2 → f ≗ g. /4 width=4 by coafter_mono, coafter_eq_repl_back1, coafter_eq_repl_back2/ qed-. (* Forward lemmas with pushs ************************************************) -lemma coafter_fwd_pushs: ∀j,i,g2,f1,g. g2 ~⊚ ↑*[i]f1 ≡ g → @⦃i, g2⦄ ≡ j → +lemma coafter_fwd_pushs: ∀j,i,g2,f1,g. g2 ~⊚ ↑*[i]f1 ≘ g → @⦃i, g2⦄ ≘ j → ∃f. ↑*[j] f = g. #j elim j -j [ #i #g2 #f1 #g #Hg #H @@ -260,16 +260,16 @@ qed-. (* Inversion lemmas with tail ***********************************************) -lemma coafter_inv_tl1: ∀g2,g1,g. g2 ~⊚ ⫱g1 ≡ g → - ∃∃f. ↑g2 ~⊚ g1 ≡ f & ⫱f = g. +lemma coafter_inv_tl1: ∀g2,g1,g. g2 ~⊚ ⫱g1 ≘ g → + ∃∃f. ↑g2 ~⊚ g1 ≘ f & ⫱f = g. #g2 #g1 #g elim (pn_split g1) * #f1 #H1 #H destruct [ /3 width=7 by coafter_refl, ex2_intro/ | @(ex2_intro … (⫯g)) /2 width=7 by coafter_push/ (**) (* full auto fails *) ] qed-. -lemma coafter_inv_tl0: ∀g2,g1,g. g2 ~⊚ g1 ≡ ⫱g → - ∃∃f1. ↑g2 ~⊚ f1 ≡ g & ⫱f1 = g1. +lemma coafter_inv_tl0: ∀g2,g1,g. g2 ~⊚ g1 ≘ ⫱g → + ∃∃f1. ↑g2 ~⊚ f1 ≘ g & ⫱f1 = g1. #g2 #g1 #g elim (pn_split g) * #f #H0 #H destruct [ /3 width=7 by coafter_refl, ex2_intro/ | @(ex2_intro … (⫯g1)) /2 width=7 by coafter_push/ (**) (* full auto fails *) @@ -278,8 +278,8 @@ qed-. (* Properties with iterated tail ********************************************) -lemma coafter_tls: ∀j,i,f1,f2,f. @⦃i, f1⦄ ≡ j → - f1 ~⊚ f2 ≡ f → ⫱*[j]f1 ~⊚ ⫱*[i]f2 ≡ ⫱*[j]f. +lemma coafter_tls: ∀j,i,f1,f2,f. @⦃i, f1⦄ ≘ j → + f1 ~⊚ f2 ≘ f → ⫱*[j]f1 ~⊚ ⫱*[i]f2 ≘ ⫱*[j]f. #j elim j -j [ #i | #j #IH * [| #i ] ] #f1 #f2 #f #Hf1 #Hf [ elim (at_inv_xxp … Hf1) -Hf1 [ |*: // ] #g1 #Hg1 #H1 destruct // | elim (at_inv_pxn … Hf1) -Hf1 [ |*: // ] #g1 #Hg1 #H1 @@ -294,12 +294,12 @@ lemma coafter_tls: ∀j,i,f1,f2,f. @⦃i, f1⦄ ≡ j → ] qed. -lemma coafter_tls_O: ∀n,f1,f2,f. @⦃0, f1⦄ ≡ n → - f1 ~⊚ f2 ≡ f → ⫱*[n]f1 ~⊚ f2 ≡ ⫱*[n]f. +lemma coafter_tls_O: ∀n,f1,f2,f. @⦃0, f1⦄ ≘ n → + f1 ~⊚ f2 ≘ f → ⫱*[n]f1 ~⊚ f2 ≘ ⫱*[n]f. /2 width=1 by coafter_tls/ qed. -lemma coafter_tls_succ: ∀g2,g1,g. g2 ~⊚ g1 ≡ g → - ∀n. @⦃0, g2⦄ ≡ n → ⫱*[⫯n]g2 ~⊚ ⫱g1 ≡ ⫱*[⫯n]g. +lemma coafter_tls_succ: ∀g2,g1,g. g2 ~⊚ g1 ≘ g → + ∀n. @⦃0, g2⦄ ≘ n → ⫱*[⫯n]g2 ~⊚ ⫱g1 ≘ ⫱*[⫯n]g. #g2 #g1 #g #Hg #n #Hg2 lapply (coafter_tls … Hg2 … Hg) -Hg #Hg lapply (at_pxx_tls … Hg2) -Hg2 #H @@ -308,8 +308,8 @@ elim (coafter_inv_pxx … Hg … H2) -Hg * #f1 #f #Hf #H1 #H0 destruct (H2f … Hf) in ⊢ (???%); -H2f // diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sand.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sand.ma index fcf82d2cc..7e97d953b 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sand.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sand.ma @@ -27,8 +27,8 @@ interpretation "intersection (rtmap)" (* Basic inversion lemmas ***************************************************) -lemma sand_inv_ppx: ∀g1,g2,g. g1 ⋒ g2 ≡ g → ∀f1,f2. ↑f1 = g1 → ↑f2 = g2 → - ∃∃f. f1 ⋒ f2 ≡ f & ↑f = g. +lemma sand_inv_ppx: ∀g1,g2,g. g1 ⋒ g2 ≘ g → ∀f1,f2. ↑f1 = g1 → ↑f2 = g2 → + ∃∃f. f1 ⋒ f2 ≘ f & ↑f = g. #g1 #g2 #g * -g1 -g2 -g #f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H0 #x1 #x2 #Hx1 #Hx2 destruct try (>(injective_push … Hx1) -x1) try (>(injective_next … Hx1) -x1) @@ -38,8 +38,8 @@ try elim (discr_push_next … Hx2) try elim (discr_next_push … Hx2) /2 width=3 by ex2_intro/ qed-. -lemma sand_inv_npx: ∀g1,g2,g. g1 ⋒ g2 ≡ g → ∀f1,f2. ⫯f1 = g1 → ↑f2 = g2 → - ∃∃f. f1 ⋒ f2 ≡ f & ↑f = g. +lemma sand_inv_npx: ∀g1,g2,g. g1 ⋒ g2 ≘ g → ∀f1,f2. ⫯f1 = g1 → ↑f2 = g2 → + ∃∃f. f1 ⋒ f2 ≘ f & ↑f = g. #g1 #g2 #g * -g1 -g2 -g #f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H0 #x1 #x2 #Hx1 #Hx2 destruct try (>(injective_push … Hx1) -x1) try (>(injective_next … Hx1) -x1) @@ -49,8 +49,8 @@ try elim (discr_push_next … Hx2) try elim (discr_next_push … Hx2) /2 width=3 by ex2_intro/ qed-. -lemma sand_inv_pnx: ∀g1,g2,g. g1 ⋒ g2 ≡ g → ∀f1,f2. ↑f1 = g1 → ⫯f2 = g2 → - ∃∃f. f1 ⋒ f2 ≡ f & ↑f = g. +lemma sand_inv_pnx: ∀g1,g2,g. g1 ⋒ g2 ≘ g → ∀f1,f2. ↑f1 = g1 → ⫯f2 = g2 → + ∃∃f. f1 ⋒ f2 ≘ f & ↑f = g. #g1 #g2 #g * -g1 -g2 -g #f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H0 #x1 #x2 #Hx1 #Hx2 destruct try (>(injective_push … Hx1) -x1) try (>(injective_next … Hx1) -x1) @@ -60,8 +60,8 @@ try elim (discr_push_next … Hx2) try elim (discr_next_push … Hx2) /2 width=3 by ex2_intro/ qed-. -lemma sand_inv_nnx: ∀g1,g2,g. g1 ⋒ g2 ≡ g → ∀f1,f2. ⫯f1 = g1 → ⫯f2 = g2 → - ∃∃f. f1 ⋒ f2 ≡ f & ⫯f = g. +lemma sand_inv_nnx: ∀g1,g2,g. g1 ⋒ g2 ≘ g → ∀f1,f2. ⫯f1 = g1 → ⫯f2 = g2 → + ∃∃f. f1 ⋒ f2 ≘ f & ⫯f = g. #g1 #g2 #g * -g1 -g2 -g #f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H0 #x1 #x2 #Hx1 #Hx2 destruct try (>(injective_push … Hx1) -x1) try (>(injective_next … Hx1) -x1) @@ -73,45 +73,45 @@ qed-. (* Basic properties *********************************************************) -corec lemma sand_eq_repl_back1: ∀f2,f. eq_repl_back … (λf1. f1 ⋒ f2 ≡ f). +corec lemma sand_eq_repl_back1: ∀f2,f. eq_repl_back … (λf1. f1 ⋒ f2 ≘ f). #f2 #f #f1 * -f1 -f2 -f #f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H0 #x #Hx try cases (eq_inv_px … Hx … H1) try cases (eq_inv_nx … Hx … H1) -g1 /3 width=7 by sand_pp, sand_np, sand_pn, sand_nn/ qed-. -lemma sand_eq_repl_fwd1: ∀f2,f. eq_repl_fwd … (λf1. f1 ⋒ f2 ≡ f). +lemma sand_eq_repl_fwd1: ∀f2,f. eq_repl_fwd … (λf1. f1 ⋒ f2 ≘ f). #f2 #f @eq_repl_sym /2 width=3 by sand_eq_repl_back1/ qed-. -corec lemma sand_eq_repl_back2: ∀f1,f. eq_repl_back … (λf2. f1 ⋒ f2 ≡ f). +corec lemma sand_eq_repl_back2: ∀f1,f. eq_repl_back … (λf2. f1 ⋒ f2 ≘ f). #f1 #f #f2 * -f1 -f2 -f #f1 #f2 #f #g1 #g2 #g #Hf #H #H2 #H0 #x #Hx try cases (eq_inv_px … Hx … H2) try cases (eq_inv_nx … Hx … H2) -g2 /3 width=7 by sand_pp, sand_np, sand_pn, sand_nn/ qed-. -lemma sand_eq_repl_fwd2: ∀f1,f. eq_repl_fwd … (λf2. f1 ⋒ f2 ≡ f). +lemma sand_eq_repl_fwd2: ∀f1,f. eq_repl_fwd … (λf2. f1 ⋒ f2 ≘ f). #f1 #f @eq_repl_sym /2 width=3 by sand_eq_repl_back2/ qed-. -corec lemma sand_eq_repl_back3: ∀f1,f2. eq_repl_back … (λf. f1 ⋒ f2 ≡ f). +corec lemma sand_eq_repl_back3: ∀f1,f2. eq_repl_back … (λf. f1 ⋒ f2 ≘ f). #f1 #f2 #f * -f1 -f2 -f #f1 #f2 #f #g1 #g2 #g #Hf #H #H2 #H0 #x #Hx try cases (eq_inv_px … Hx … H0) try cases (eq_inv_nx … Hx … H0) -g /3 width=7 by sand_pp, sand_np, sand_pn, sand_nn/ qed-. -lemma sand_eq_repl_fwd3: ∀f1,f2. eq_repl_fwd … (λf. f1 ⋒ f2 ≡ f). +lemma sand_eq_repl_fwd3: ∀f1,f2. eq_repl_fwd … (λf. f1 ⋒ f2 ≘ f). #f1 #f2 @eq_repl_sym /2 width=3 by sand_eq_repl_back3/ qed-. -corec lemma sand_refl: ∀f. f ⋒ f ≡ f. +corec lemma sand_refl: ∀f. f ⋒ f ≘ f. #f cases (pn_split f) * #g #H [ @(sand_pp … H H H) | @(sand_nn … H H H) ] -H // qed. -corec lemma sand_sym: ∀f1,f2,f. f1 ⋒ f2 ≡ f → f2 ⋒ f1 ≡ f. +corec lemma sand_sym: ∀f1,f2,f. f1 ⋒ f2 ≘ f → f2 ⋒ f1 ≘ f. #f1 #f2 #f * -f1 -f2 -f #f1 #f2 #f #g1 #g2 #g #Hf * * * -g1 -g2 -g [ @sand_pp | @sand_pn | @sand_np | @sand_nn ] /2 width=7 by/ 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 864f3dcb9..a461157d6 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sor.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sor.ma @@ -28,8 +28,8 @@ interpretation "union (rtmap)" (* Basic inversion lemmas ***************************************************) -lemma sor_inv_ppx: ∀g1,g2,g. g1 ⋓ g2 ≡ g → ∀f1,f2. ↑f1 = g1 → ↑f2 = g2 → - ∃∃f. f1 ⋓ f2 ≡ f & ↑f = g. +lemma sor_inv_ppx: ∀g1,g2,g. g1 ⋓ g2 ≘ g → ∀f1,f2. ↑f1 = g1 → ↑f2 = g2 → + ∃∃f. f1 ⋓ f2 ≘ f & ↑f = g. #g1 #g2 #g * -g1 -g2 -g #f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H0 #x1 #x2 #Hx1 #Hx2 destruct try (>(injective_push … Hx1) -x1) try (>(injective_next … Hx1) -x1) @@ -39,8 +39,8 @@ try elim (discr_push_next … Hx2) try elim (discr_next_push … Hx2) /2 width=3 by ex2_intro/ qed-. -lemma sor_inv_npx: ∀g1,g2,g. g1 ⋓ g2 ≡ g → ∀f1,f2. ⫯f1 = g1 → ↑f2 = g2 → - ∃∃f. f1 ⋓ f2 ≡ f & ⫯f = g. +lemma sor_inv_npx: ∀g1,g2,g. g1 ⋓ g2 ≘ g → ∀f1,f2. ⫯f1 = g1 → ↑f2 = g2 → + ∃∃f. f1 ⋓ f2 ≘ f & ⫯f = g. #g1 #g2 #g * -g1 -g2 -g #f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H0 #x1 #x2 #Hx1 #Hx2 destruct try (>(injective_push … Hx1) -x1) try (>(injective_next … Hx1) -x1) @@ -50,8 +50,8 @@ try elim (discr_push_next … Hx2) try elim (discr_next_push … Hx2) /2 width=3 by ex2_intro/ qed-. -lemma sor_inv_pnx: ∀g1,g2,g. g1 ⋓ g2 ≡ g → ∀f1,f2. ↑f1 = g1 → ⫯f2 = g2 → - ∃∃f. f1 ⋓ f2 ≡ f & ⫯f = g. +lemma sor_inv_pnx: ∀g1,g2,g. g1 ⋓ g2 ≘ g → ∀f1,f2. ↑f1 = g1 → ⫯f2 = g2 → + ∃∃f. f1 ⋓ f2 ≘ f & ⫯f = g. #g1 #g2 #g * -g1 -g2 -g #f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H0 #x1 #x2 #Hx1 #Hx2 destruct try (>(injective_push … Hx1) -x1) try (>(injective_next … Hx1) -x1) @@ -61,8 +61,8 @@ try elim (discr_push_next … Hx2) try elim (discr_next_push … Hx2) /2 width=3 by ex2_intro/ qed-. -lemma sor_inv_nnx: ∀g1,g2,g. g1 ⋓ g2 ≡ g → ∀f1,f2. ⫯f1 = g1 → ⫯f2 = g2 → - ∃∃f. f1 ⋓ f2 ≡ f & ⫯f = g. +lemma sor_inv_nnx: ∀g1,g2,g. g1 ⋓ g2 ≘ g → ∀f1,f2. ⫯f1 = g1 → ⫯f2 = g2 → + ∃∃f. f1 ⋓ f2 ≘ f & ⫯f = g. #g1 #g2 #g * -g1 -g2 -g #f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H0 #x1 #x2 #Hx1 #Hx2 destruct try (>(injective_push … Hx1) -x1) try (>(injective_next … Hx1) -x1) @@ -74,14 +74,14 @@ qed-. (* Advanced inversion lemmas ************************************************) -lemma sor_inv_ppn: ∀g1,g2,g. g1 ⋓ g2 ≡ g → +lemma sor_inv_ppn: ∀g1,g2,g. g1 ⋓ g2 ≘ g → ∀f1,f2,f. ↑f1 = g1 → ↑f2 = g2 → ⫯f = g → ⊥. #g1 #g2 #g #H #f1 #f2 #f #H1 #H2 #H0 elim (sor_inv_ppx … H … H1 H2) -g1 -g2 #x #_ #H destruct /2 width=3 by discr_push_next/ qed-. -lemma sor_inv_nxp: ∀g1,g2,g. g1 ⋓ g2 ≡ g → +lemma sor_inv_nxp: ∀g1,g2,g. g1 ⋓ g2 ≘ g → ∀f1,f. ⫯f1 = g1 → ↑f = g → ⊥. #g1 #g2 #g #H #f1 #f #H1 #H0 elim (pn_split g2) * #f2 #H2 @@ -91,7 +91,7 @@ elim (pn_split g2) * #f2 #H2 /2 width=3 by discr_next_push/ qed-. -lemma sor_inv_xnp: ∀g1,g2,g. g1 ⋓ g2 ≡ g → +lemma sor_inv_xnp: ∀g1,g2,g. g1 ⋓ g2 ≘ g → ∀f2,f. ⫯f2 = g2 → ↑f = g → ⊥. #g1 #g2 #g #H #f2 #f #H2 #H0 elim (pn_split g1) * #f1 #H1 @@ -101,37 +101,37 @@ elim (pn_split g1) * #f1 #H1 /2 width=3 by discr_next_push/ qed-. -lemma sor_inv_ppp: ∀g1,g2,g. g1 ⋓ g2 ≡ g → - ∀f1,f2,f. ↑f1 = g1 → ↑f2 = g2 → ↑f = g → f1 ⋓ f2 ≡ f. +lemma sor_inv_ppp: ∀g1,g2,g. g1 ⋓ g2 ≘ g → + ∀f1,f2,f. ↑f1 = g1 → ↑f2 = g2 → ↑f = g → f1 ⋓ f2 ≘ f. #g1 #g2 #g #H #f1 #f2 #f #H1 #H2 #H0 elim (sor_inv_ppx … H … H1 H2) -g1 -g2 #x #Hx #H destruct <(injective_push … H) -f // qed-. -lemma sor_inv_npn: ∀g1,g2,g. g1 ⋓ g2 ≡ g → - ∀f1,f2,f. ⫯f1 = g1 → ↑f2 = g2 → ⫯f = g → f1 ⋓ f2 ≡ f. +lemma sor_inv_npn: ∀g1,g2,g. g1 ⋓ g2 ≘ g → + ∀f1,f2,f. ⫯f1 = g1 → ↑f2 = g2 → ⫯f = g → f1 ⋓ f2 ≘ f. #g1 #g2 #g #H #f1 #f2 #f #H1 #H2 #H0 elim (sor_inv_npx … H … H1 H2) -g1 -g2 #x #Hx #H destruct <(injective_next … H) -f // qed-. -lemma sor_inv_pnn: ∀g1,g2,g. g1 ⋓ g2 ≡ g → - ∀f1,f2,f. ↑f1 = g1 → ⫯f2 = g2 → ⫯f = g → f1 ⋓ f2 ≡ f. +lemma sor_inv_pnn: ∀g1,g2,g. g1 ⋓ g2 ≘ g → + ∀f1,f2,f. ↑f1 = g1 → ⫯f2 = g2 → ⫯f = g → f1 ⋓ f2 ≘ f. #g1 #g2 #g #H #f1 #f2 #f #H1 #H2 #H0 elim (sor_inv_pnx … H … H1 H2) -g1 -g2 #x #Hx #H destruct <(injective_next … H) -f // qed-. -lemma sor_inv_nnn: ∀g1,g2,g. g1 ⋓ g2 ≡ g → - ∀f1,f2,f. ⫯f1 = g1 → ⫯f2 = g2 → ⫯f = g → f1 ⋓ f2 ≡ f. +lemma sor_inv_nnn: ∀g1,g2,g. g1 ⋓ g2 ≘ g → + ∀f1,f2,f. ⫯f1 = g1 → ⫯f2 = g2 → ⫯f = g → f1 ⋓ f2 ≘ f. #g1 #g2 #g #H #f1 #f2 #f #H1 #H2 #H0 elim (sor_inv_nnx … H … H1 H2) -g1 -g2 #x #Hx #H destruct <(injective_next … H) -f // qed-. -lemma sor_inv_pxp: ∀g1,g2,g. g1 ⋓ g2 ≡ g → +lemma sor_inv_pxp: ∀g1,g2,g. g1 ⋓ g2 ≘ g → ∀f1,f. ↑f1 = g1 → ↑f = g → - ∃∃f2. f1 ⋓ f2 ≡ f & ↑f2 = g2. + ∃∃f2. f1 ⋓ f2 ≘ f & ↑f2 = g2. #g1 #g2 #g #H #f1 #f #H1 #H0 elim (pn_split g2) * #f2 #H2 [ /3 width=7 by sor_inv_ppp, ex2_intro/ @@ -139,9 +139,9 @@ elim (pn_split g2) * #f2 #H2 ] qed-. -lemma sor_inv_xpp: ∀g1,g2,g. g1 ⋓ g2 ≡ g → +lemma sor_inv_xpp: ∀g1,g2,g. g1 ⋓ g2 ≘ g → ∀f2,f. ↑f2 = g2 → ↑f = g → - ∃∃f1. f1 ⋓ f2 ≡ f & ↑f1 = g1. + ∃∃f1. f1 ⋓ f2 ≘ f & ↑f1 = g1. #g1 #g2 #g #H #f2 #f #H2 #H0 elim (pn_split g1) * #f1 #H1 [ /3 width=7 by sor_inv_ppp, ex2_intro/ @@ -149,9 +149,9 @@ elim (pn_split g1) * #f1 #H1 ] qed-. -lemma sor_inv_pxn: ∀g1,g2,g. g1 ⋓ g2 ≡ g → +lemma sor_inv_pxn: ∀g1,g2,g. g1 ⋓ g2 ≘ g → ∀f1,f. ↑f1 = g1 → ⫯f = g → - ∃∃f2. f1 ⋓ f2 ≡ f & ⫯f2 = g2. + ∃∃f2. f1 ⋓ f2 ≘ f & ⫯f2 = g2. #g1 #g2 #g #H #f1 #f #H1 #H0 elim (pn_split g2) * #f2 #H2 [ elim (sor_inv_ppn … H … H1 H2 H0) @@ -159,9 +159,9 @@ elim (pn_split g2) * #f2 #H2 ] qed-. -lemma sor_inv_xpn: ∀g1,g2,g. g1 ⋓ g2 ≡ g → +lemma sor_inv_xpn: ∀g1,g2,g. g1 ⋓ g2 ≘ g → ∀f2,f. ↑f2 = g2 → ⫯f = g → - ∃∃f1. f1 ⋓ f2 ≡ f & ⫯f1 = g1. + ∃∃f1. f1 ⋓ f2 ≘ f & ⫯f1 = g1. #g1 #g2 #g #H #f2 #f #H2 #H0 elim (pn_split g1) * #f1 #H1 [ elim (sor_inv_ppn … H … H1 H2 H0) @@ -169,8 +169,8 @@ elim (pn_split g1) * #f1 #H1 ] qed-. -lemma sor_inv_xxp: ∀g1,g2,g. g1 ⋓ g2 ≡ g → ∀f. ↑f = g → - ∃∃f1,f2. f1 ⋓ f2 ≡ f & ↑f1 = g1 & ↑f2 = g2. +lemma sor_inv_xxp: ∀g1,g2,g. g1 ⋓ g2 ≘ g → ∀f. ↑f = g → + ∃∃f1,f2. f1 ⋓ f2 ≘ f & ↑f1 = g1 & ↑f2 = g2. #g1 #g2 #g #H #f #H0 elim (pn_split g1) * #f1 #H1 [ elim (sor_inv_pxp … H … H1 H0) -g /2 width=5 by ex3_2_intro/ @@ -178,26 +178,26 @@ elim (pn_split g1) * #f1 #H1 ] qed-. -lemma sor_inv_nxn: ∀g1,g2,g. g1 ⋓ g2 ≡ g → +lemma sor_inv_nxn: ∀g1,g2,g. g1 ⋓ g2 ≘ g → ∀f1,f. ⫯f1 = g1 → ⫯f = g → - (∃∃f2. f1 ⋓ f2 ≡ f & ↑f2 = g2) ∨ - ∃∃f2. f1 ⋓ f2 ≡ f & ⫯f2 = g2. + (∃∃f2. f1 ⋓ f2 ≘ f & ↑f2 = g2) ∨ + ∃∃f2. f1 ⋓ f2 ≘ f & ⫯f2 = g2. #g1 #g2 elim (pn_split g2) * /4 width=7 by sor_inv_npn, sor_inv_nnn, ex2_intro, or_intror, or_introl/ qed-. -lemma sor_inv_xnn: ∀g1,g2,g. g1 ⋓ g2 ≡ g → +lemma sor_inv_xnn: ∀g1,g2,g. g1 ⋓ g2 ≘ g → ∀f2,f. ⫯f2 = g2 → ⫯f = g → - (∃∃f1. f1 ⋓ f2 ≡ f & ↑f1 = g1) ∨ - ∃∃f1. f1 ⋓ f2 ≡ f & ⫯f1 = g1. + (∃∃f1. f1 ⋓ f2 ≘ f & ↑f1 = g1) ∨ + ∃∃f1. f1 ⋓ f2 ≘ f & ⫯f1 = g1. #g1 elim (pn_split g1) * /4 width=7 by sor_inv_pnn, sor_inv_nnn, ex2_intro, or_intror, or_introl/ qed-. -lemma sor_inv_xxn: ∀g1,g2,g. g1 ⋓ g2 ≡ g → ∀f. ⫯f = g → - ∨∨ ∃∃f1,f2. f1 ⋓ f2 ≡ f & ⫯f1 = g1 & ↑f2 = g2 - | ∃∃f1,f2. f1 ⋓ f2 ≡ f & ↑f1 = g1 & ⫯f2 = g2 - | ∃∃f1,f2. f1 ⋓ f2 ≡ f & ⫯f1 = g1 & ⫯f2 = g2. +lemma sor_inv_xxn: ∀g1,g2,g. g1 ⋓ g2 ≘ g → ∀f. ⫯f = g → + ∨∨ ∃∃f1,f2. f1 ⋓ f2 ≘ f & ⫯f1 = g1 & ↑f2 = g2 + | ∃∃f1,f2. f1 ⋓ f2 ≘ f & ↑f1 = g1 & ⫯f2 = g2 + | ∃∃f1,f2. f1 ⋓ f2 ≘ f & ⫯f1 = g1 & ⫯f2 = g2. #g1 #g2 #g #H #f #H0 elim (pn_split g1) * #f1 #H1 [ elim (sor_inv_pxn … H … H1 H0) -g @@ -209,7 +209,7 @@ qed-. (* Main inversion lemmas ****************************************************) -corec theorem sor_mono: ∀f1,f2,x,y. f1 ⋓ f2 ≡ x → f1 ⋓ f2 ≡ y → x ≗ y. +corec theorem sor_mono: ∀f1,f2,x,y. f1 ⋓ f2 ≘ x → f1 ⋓ f2 ≘ y → x ≗ y. #f1 #f2 #x #y * -f1 -f2 -x #f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H0 #H [ cases (sor_inv_ppx … H … H1 H2) @@ -222,45 +222,45 @@ qed-. (* Basic properties *********************************************************) -corec lemma sor_eq_repl_back1: ∀f2,f. eq_repl_back … (λf1. f1 ⋓ f2 ≡ f). +corec lemma sor_eq_repl_back1: ∀f2,f. eq_repl_back … (λf1. f1 ⋓ f2 ≘ f). #f2 #f #f1 * -f1 -f2 -f #f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H0 #x #Hx try cases (eq_inv_px … Hx … H1) try cases (eq_inv_nx … Hx … H1) -g1 /3 width=7 by sor_pp, sor_np, sor_pn, sor_nn/ qed-. -lemma sor_eq_repl_fwd1: ∀f2,f. eq_repl_fwd … (λf1. f1 ⋓ f2 ≡ f). +lemma sor_eq_repl_fwd1: ∀f2,f. eq_repl_fwd … (λf1. f1 ⋓ f2 ≘ f). #f2 #f @eq_repl_sym /2 width=3 by sor_eq_repl_back1/ qed-. -corec lemma sor_eq_repl_back2: ∀f1,f. eq_repl_back … (λf2. f1 ⋓ f2 ≡ f). +corec lemma sor_eq_repl_back2: ∀f1,f. eq_repl_back … (λf2. f1 ⋓ f2 ≘ f). #f1 #f #f2 * -f1 -f2 -f #f1 #f2 #f #g1 #g2 #g #Hf #H #H2 #H0 #x #Hx try cases (eq_inv_px … Hx … H2) try cases (eq_inv_nx … Hx … H2) -g2 /3 width=7 by sor_pp, sor_np, sor_pn, sor_nn/ qed-. -lemma sor_eq_repl_fwd2: ∀f1,f. eq_repl_fwd … (λf2. f1 ⋓ f2 ≡ f). +lemma sor_eq_repl_fwd2: ∀f1,f. eq_repl_fwd … (λf2. f1 ⋓ f2 ≘ f). #f1 #f @eq_repl_sym /2 width=3 by sor_eq_repl_back2/ qed-. -corec lemma sor_eq_repl_back3: ∀f1,f2. eq_repl_back … (λf. f1 ⋓ f2 ≡ f). +corec lemma sor_eq_repl_back3: ∀f1,f2. eq_repl_back … (λf. f1 ⋓ f2 ≘ f). #f1 #f2 #f * -f1 -f2 -f #f1 #f2 #f #g1 #g2 #g #Hf #H #H2 #H0 #x #Hx try cases (eq_inv_px … Hx … H0) try cases (eq_inv_nx … Hx … H0) -g /3 width=7 by sor_pp, sor_np, sor_pn, sor_nn/ qed-. -lemma sor_eq_repl_fwd3: ∀f1,f2. eq_repl_fwd … (λf. f1 ⋓ f2 ≡ f). +lemma sor_eq_repl_fwd3: ∀f1,f2. eq_repl_fwd … (λf. f1 ⋓ f2 ≘ f). #f1 #f2 @eq_repl_sym /2 width=3 by sor_eq_repl_back3/ qed-. -corec lemma sor_idem: ∀f. f ⋓ f ≡ f. +corec lemma sor_idem: ∀f. f ⋓ f ≘ f. #f cases (pn_split f) * #g #H [ @(sor_pp … H H H) | @(sor_nn … H H H) ] -H // qed. -corec lemma sor_comm: ∀f1,f2,f. f1 ⋓ f2 ≡ f → f2 ⋓ f1 ≡ f. +corec lemma sor_comm: ∀f1,f2,f. f1 ⋓ f2 ≘ f → f2 ⋓ f1 ≘ f. #f1 #f2 #f * -f1 -f2 -f #f1 #f2 #f #g1 #g2 #g #Hf * * * -g1 -g2 -g [ @sor_pp | @sor_pn | @sor_np | @sor_nn ] /2 width=7 by/ @@ -268,7 +268,7 @@ qed-. (* Properties with tail *****************************************************) -lemma sor_tl: ∀f1,f2,f. f1 ⋓ f2 ≡ f → ⫱f1 ⋓ ⫱f2 ≡ ⫱f. +lemma sor_tl: ∀f1,f2,f. f1 ⋓ f2 ≘ f → ⫱f1 ⋓ ⫱f2 ≘ ⫱f. #f1 cases (pn_split f1) * #g1 #H1 #f2 cases (pn_split f2) * #g2 #H2 #f #Hf @@ -279,22 +279,22 @@ lemma sor_tl: ∀f1,f2,f. f1 ⋓ f2 ≡ f → ⫱f1 ⋓ ⫱f2 ≡ ⫱f. ] -Hf #g #Hg #H destruct // qed. -lemma sor_xxn_tl: ∀g1,g2,g. g1 ⋓ g2 ≡ g → ∀f. ⫯f = g → - (∃∃f1,f2. f1 ⋓ f2 ≡ f & ⫯f1 = g1 & ⫱g2 = f2) ∨ - (∃∃f1,f2. f1 ⋓ f2 ≡ f & ⫱g1 = f1 & ⫯f2 = g2). +lemma sor_xxn_tl: ∀g1,g2,g. g1 ⋓ g2 ≘ g → ∀f. ⫯f = g → + (∃∃f1,f2. f1 ⋓ f2 ≘ f & ⫯f1 = g1 & ⫱g2 = f2) ∨ + (∃∃f1,f2. f1 ⋓ f2 ≘ f & ⫱g1 = f1 & ⫯f2 = g2). #g1 #g2 #g #H #f #H0 elim (sor_inv_xxn … H … H0) -H -H0 * /3 width=5 by ex3_2_intro, or_introl, or_intror/ qed-. -lemma sor_xnx_tl: ∀g1,g2,g. g1 ⋓ g2 ≡ g → ∀f2. ⫯f2 = g2 → - ∃∃f1,f. f1 ⋓ f2 ≡ f & ⫱g1 = f1 & ⫯f = g. +lemma sor_xnx_tl: ∀g1,g2,g. g1 ⋓ g2 ≘ g → ∀f2. ⫯f2 = g2 → + ∃∃f1,f. f1 ⋓ f2 ≘ f & ⫱g1 = f1 & ⫯f = g. #g1 elim (pn_split g1) * #f1 #H1 #g2 #g #H #f2 #H2 [ elim (sor_inv_pnx … H … H1 H2) | elim (sor_inv_nnx … H … H1 H2) ] -g2 /3 width=5 by ex3_2_intro/ qed-. -lemma sor_nxx_tl: ∀g1,g2,g. g1 ⋓ g2 ≡ g → ∀f1. ⫯f1 = g1 → - ∃∃f2,f. f1 ⋓ f2 ≡ f & ⫱g2 = f2 & ⫯f = g. +lemma sor_nxx_tl: ∀g1,g2,g. g1 ⋓ g2 ≘ g → ∀f1. ⫯f1 = g1 → + ∃∃f2,f. f1 ⋓ f2 ≘ f & ⫱g2 = f2 & ⫯f = g. #g1 #g2 elim (pn_split g2) * #f2 #H2 #g #H #f1 #H1 [ elim (sor_inv_npx … H … H1 H2) | elim (sor_inv_nnx … H … H1 H2) ] -g1 /3 width=5 by ex3_2_intro/ @@ -302,71 +302,71 @@ qed-. (* Properties with iterated tail ********************************************) -lemma sor_tls: ∀f1,f2,f. f1 ⋓ f2 ≡ f → - ∀n. ⫱*[n]f1 ⋓ ⫱*[n]f2 ≡ ⫱*[n]f. +lemma sor_tls: ∀f1,f2,f. f1 ⋓ f2 ≘ f → + ∀n. ⫱*[n]f1 ⋓ ⫱*[n]f2 ≘ ⫱*[n]f. #f1 #f2 #f #Hf #n elim n -n /2 width=1 by sor_tl/ 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 ***********************************************) -lemma sor_inv_tl_sn: ∀f1,f2,f. ⫱f1 ⋓ f2 ≡ f → f1 ⋓ ⫯f2 ≡ ⫯f. +lemma sor_inv_tl_sn: ∀f1,f2,f. ⫱f1 ⋓ f2 ≘ f → f1 ⋓ ⫯f2 ≘ ⫯f. #f1 #f2 #f elim (pn_split f1) * #g1 #H destruct /2 width=7 by sor_pn, sor_nn/ qed-. -lemma sor_inv_tl_dx: ∀f1,f2,f. f1 ⋓ ⫱f2 ≡ f → ⫯f1 ⋓ f2 ≡ ⫯f. +lemma sor_inv_tl_dx: ∀f1,f2,f. f1 ⋓ ⫱f2 ≘ f → ⫯f1 ⋓ f2 ≘ ⫯f. #f1 #f2 #f elim (pn_split f2) * #g2 #H destruct /2 width=7 by sor_np, sor_nn/ 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