From 397413c4196f84c81d61ba7dd79b54ab1c428ebb Mon Sep 17 00:00:00 2001 From: Ferruccio Guidi Date: Fri, 20 Apr 2018 20:50:47 +0200 Subject: [PATCH] notational update in ground_2 and basic_2 + one addition in predefined_virtuals + works citing \lambda\delta updated on web site --- helm/www/lambdadelta/web/home/home.ldw.xml | 2 +- .../lambdadelta/basic_2/i_static/tc_lfxs.ma | 2 +- .../lambdadelta/basic_2/relocation/drops.ma | 38 +++--- .../basic_2/relocation/drops_drops.ma | 8 +- .../basic_2/relocation/drops_lexs.ma | 12 +- .../basic_2/relocation/drops_lreq.ma | 6 +- .../lambdadelta/basic_2/relocation/lex.ma | 4 +- .../lambdadelta/basic_2/relocation/lexs.ma | 24 ++-- .../basic_2/relocation/lexs_lexs.ma | 8 +- .../lambdadelta/basic_2/relocation/lexs_tc.ma | 12 +- .../lambdadelta/basic_2/relocation/lifts.ma | 18 +-- .../basic_2/relocation/lifts_lifts.ma | 2 +- .../lambdadelta/basic_2/relocation/lreq.ma | 12 +- .../basic_2/rt_computation/cpxs.ma | 2 +- .../basic_2/rt_computation/cpxs_drops.ma | 12 +- .../basic_2/rt_computation/cpxs_theq.ma | 2 +- .../rt_computation/cpxs_theq_vector.ma | 2 +- .../basic_2/rt_computation/csx_csx.ma | 2 +- .../basic_2/rt_computation/csx_csx_vector.ma | 2 +- .../basic_2/rt_computation/lsubsx.ma | 22 ++-- .../basic_2/rt_transition/cnx_drops.ma | 2 +- .../lambdadelta/basic_2/rt_transition/cpg.ma | 42 +++---- .../basic_2/rt_transition/cpg_drops.ma | 24 ++-- .../basic_2/rt_transition/cpg_simple.ma | 2 +- .../lambdadelta/basic_2/rt_transition/cpm.ma | 18 +-- .../basic_2/rt_transition/cpm_drops.ma | 12 +- .../lambdadelta/basic_2/rt_transition/cpr.ma | 6 +- .../basic_2/rt_transition/cpr_drops.ma | 4 +- .../lambdadelta/basic_2/rt_transition/cpx.ma | 14 +-- .../basic_2/rt_transition/cpx_drops.ma | 6 +- .../lambdadelta/basic_2/rt_transition/lfpr.ma | 8 +- .../basic_2/rt_transition/lfpr_lfpr.ma | 6 +- .../lambdadelta/basic_2/rt_transition/lfpx.ma | 8 +- .../basic_2/s_computation/fqup_drops.ma | 4 +- .../lambdadelta/basic_2/s_computation/fqus.ma | 6 +- .../lambdadelta/basic_2/s_transition/fqu.ma | 8 +- .../lambdadelta/basic_2/static/aaa.ma | 6 +- .../lambdadelta/basic_2/static/frees.ma | 30 ++--- .../lambdadelta/basic_2/static/frees_drops.ma | 22 ++-- .../lambdadelta/basic_2/static/frees_fqup.ma | 10 +- .../lambdadelta/basic_2/static/frees_frees.ma | 2 +- .../lambdadelta/basic_2/static/gcp_aaa.ma | 6 +- .../lambdadelta/basic_2/static/gcp_cr.ma | 10 +- .../lambdadelta/basic_2/static/lfdeq.ma | 8 +- .../lambdadelta/basic_2/static/lfeq.ma | 4 +- .../lambdadelta/basic_2/static/lfxs.ma | 8 +- .../lambdadelta/basic_2/static/lfxs_drops.ma | 2 +- .../lambdadelta/basic_2/static/lsubf.ma | 106 ++++++++--------- .../basic_2/syntax/append_length.ma | 6 +- .../lambdadelta/basic_2/syntax/item_sd.ma | 18 +-- .../lambdadelta/basic_2/syntax/item_sh.ma | 2 +- .../lambdadelta/basic_2/syntax/lenv_length.ma | 8 +- .../lambdadelta/basic_2/syntax/lveq.ma | 22 ++-- .../lambdadelta/basic_2/syntax/lveq_length.ma | 4 +- .../lambdadelta/basic_2/syntax/lveq_lveq.ma | 4 +- .../lambdadelta/basic_2/syntax/term_weight.ma | 2 +- .../lambdadelta/ground_2/lib/arith.ma | 42 +++---- .../contribs/lambdadelta/ground_2/lib/list.ma | 8 +- .../lambdadelta/ground_2/lib/list2.ma | 2 +- .../lambdadelta/ground_2/lib/streams_eq.ma | 18 +-- .../lambdadelta/ground_2/lib/streams_hdtl.ma | 6 +- .../lambdadelta/ground_2/lib/streams_tls.ma | 10 +- .../{successor_1.ma => uparrow_1.ma} | 4 +- .../{predecessor_1.ma => downarrow_1.ma} | 4 +- .../functions/{lift_1.ma => downspoon_1.ma} | 4 +- .../notation/functions/downspoonstar_2.ma | 19 +++ .../{successorstar_2.ma => uparrowstar_2.ma} | 4 +- .../{drops_2.ma => updownarrowstar_1.ma} | 4 +- .../functions/{drop_1.ma => upspoon_1.ma} | 4 +- .../{liftstar_2.ma => upspoonstar_2.ma} | 4 +- .../relations/{funexteq_2.ma => ideq_2.ma} | 4 +- .../relations/{exteq_3.ma => ringeq_3.ma} | 12 +- .../ground_2/relocation/mr2_plus.ma | 2 +- .../ground_2/relocation/nstream.ma | 36 +++--- .../ground_2/relocation/nstream_after.ma | 36 +++--- .../ground_2/relocation/nstream_coafter.ma | 16 +-- .../ground_2/relocation/nstream_eq.ma | 12 +- .../ground_2/relocation/nstream_id.ma | 6 +- .../ground_2/relocation/nstream_istot.ma | 10 +- .../lambdadelta/ground_2/relocation/rtmap.ma | 2 +- .../ground_2/relocation/rtmap_after.ma | 82 ++++++------- .../ground_2/relocation/rtmap_at.ma | 82 ++++++------- .../ground_2/relocation/rtmap_coafter.ma | 108 +++++++++--------- .../ground_2/relocation/rtmap_eq.ma | 48 ++++---- .../ground_2/relocation/rtmap_fcla.ma | 14 +-- .../ground_2/relocation/rtmap_id.ma | 4 +- .../ground_2/relocation/rtmap_isdiv.ma | 18 +-- .../ground_2/relocation/rtmap_isfin.ma | 14 +-- .../ground_2/relocation/rtmap_isid.ma | 18 +-- .../ground_2/relocation/rtmap_istot.ma | 14 +-- .../ground_2/relocation/rtmap_isuni.ma | 10 +- .../ground_2/relocation/rtmap_nexts.ma | 22 ++-- .../ground_2/relocation/rtmap_pushs.ma | 22 ++-- .../ground_2/relocation/rtmap_sand.ma | 24 ++-- .../ground_2/relocation/rtmap_sdj.ma | 34 +++--- .../ground_2/relocation/rtmap_sle.ma | 40 +++---- .../ground_2/relocation/rtmap_sor.ma | 102 ++++++++--------- .../ground_2/relocation/rtmap_tl.ma | 6 +- .../ground_2/relocation/rtmap_tls.ma | 8 +- .../ground_2/relocation/rtmap_uni.ma | 24 ++-- .../lambdadelta/ground_2/steps/rtc_max.ma | 2 +- .../lambdadelta/ground_2/steps/rtc_plus.ma | 4 +- .../lambdadelta/ground_2/steps/rtc_shift.ma | 16 +-- .../lambdadelta/ground_2/web/ground_2_src.tbl | 12 +- .../lambdadelta/ground_2/ynat/ynat_le.ma | 24 ++-- .../lambdadelta/ground_2/ynat/ynat_lt.ma | 36 +++--- .../lambdadelta/ground_2/ynat/ynat_plus.ma | 22 ++-- .../lambdadelta/ground_2/ynat/ynat_pred.ma | 12 +- .../lambdadelta/ground_2/ynat/ynat_succ.ma | 30 ++--- matita/matita/contribs/lambdadelta/replace.sh | 13 +-- matita/matita/predefined_virtuals.ml | 2 +- 111 files changed, 898 insertions(+), 880 deletions(-) rename matita/matita/contribs/lambdadelta/ground_2/notation/constructors/{successor_1.ma => uparrow_1.ma} (94%) rename matita/matita/contribs/lambdadelta/ground_2/notation/functions/{predecessor_1.ma => downarrow_1.ma} (94%) rename matita/matita/contribs/lambdadelta/ground_2/notation/functions/{lift_1.ma => downspoon_1.ma} (94%) create mode 100644 matita/matita/contribs/lambdadelta/ground_2/notation/functions/downspoonstar_2.ma rename matita/matita/contribs/lambdadelta/ground_2/notation/functions/{successorstar_2.ma => uparrowstar_2.ma} (93%) rename matita/matita/contribs/lambdadelta/ground_2/notation/functions/{drops_2.ma => updownarrowstar_1.ma} (93%) rename matita/matita/contribs/lambdadelta/ground_2/notation/functions/{drop_1.ma => upspoon_1.ma} (95%) rename matita/matita/contribs/lambdadelta/ground_2/notation/functions/{liftstar_2.ma => upspoonstar_2.ma} (93%) rename matita/matita/contribs/lambdadelta/ground_2/notation/relations/{funexteq_2.ma => ideq_2.ma} (93%) rename matita/matita/contribs/lambdadelta/ground_2/notation/relations/{exteq_3.ma => ringeq_3.ma} (82%) diff --git a/helm/www/lambdadelta/web/home/home.ldw.xml b/helm/www/lambdadelta/web/home/home.ldw.xml index 45fc177fb..e1b5eb425 100644 --- a/helm/www/lambdadelta/web/home/home.ldw.xml +++ b/helm/www/lambdadelta/web/home/home.ldw.xml @@ -49,7 +49,7 @@ Matthias Weber: An extended type system with lambda-typed lambda-expressions (extended version) - (2017). Technical report. Faculty of Computer Science, Technical University of Berlin. + (2018). Technical report. Faculty of Computer Science, Technical University of Berlin. 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 5fbe3afe2..da4959b88 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 @@ -56,7 +56,7 @@ lemma tc_lfxs_unit: ∀R,f,I,L1,L2. 𝐈⦃f⦄ → L1 ⪤*[cext2 R, cfull, f] L /3 width=3 by lfxs_unit, inj/ qed. lemma tc_lfxs_lref: ∀R,I,L1,L2,V1,V2,i. - L1 ⪤**[R, #i] L2 → L1.ⓑ{I}V1 ⪤**[R, #⫯i] L2.ⓑ{I}V2. + L1 ⪤**[R, #i] L2 → L1.ⓑ{I}V1 ⪤**[R, #↑i] L2.ⓑ{I}V2. #R #I #L1 #L2 #V1 #V2 #i #H elim H -L2 /3 width=4 by lfxs_lref, tc_lfxs_step_dx, inj/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/drops.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/drops.ma index fdcf1a70f..0a03101fd 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/drops.ma @@ -26,10 +26,10 @@ include "basic_2/relocation/lifts_bind.ma". *) 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_drop: ∀f,I,L1,L2. drops b f L1 L2 → drops b (↑f) (L1.ⓘ{I}) L2 | drops_skip: ∀f,I1,I2,L1,L2. drops b f L1 L2 → ⬆*[f] I2 ≘ I1 → - drops b (↑f) (L1.ⓘ{I1}) (L2.ⓘ{I2}) + drops b (⫯f) (L1.ⓘ{I1}) (L2.ⓘ{I2}) . interpretation "uniform slicing (local environment)" @@ -160,7 +160,7 @@ qed-. lemma drops_inv_atom1: ∀b,f,Y. ⬇*[b, f] ⋆ ≘ Y → Y = ⋆ ∧ (b = Ⓣ → 𝐈⦃f⦄). /2 width=3 by drops_inv_atom1_aux/ qed-. -fact drops_inv_drop1_aux: ∀b,f,X,Y. ⬇*[b, f] X ≘ Y → ∀g,I,K. X = K.ⓘ{I} → f = ⫯g → +fact drops_inv_drop1_aux: ∀b,f,X,Y. ⬇*[b, f] X ≘ Y → ∀g,I,K. X = K.ⓘ{I} → f = ↑g → ⬇*[b, g] K ≘ Y. #b #f #X #Y * -f -X -Y [ #f #Hf #g #J #K #H destruct @@ -171,10 +171,10 @@ 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 → +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 @@ -186,11 +186,11 @@ 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 → +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 → +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 @@ -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} → +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. + ∃∃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 @@ -220,7 +220,7 @@ 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. + ∃∃f1,f. 𝐈⦃f1⦄ & f2 ⊚ ↑f1 ≘ f & ⬇*[b, f] X ≘ K. /2 width=4 by drops_fwd_drop2_aux/ qed-. (* Properties with test for identity ****************************************) @@ -244,7 +244,7 @@ lemma drops_fwd_isid: ∀b,f,L1,L2. ⬇*[b, f] L1 ≘ L2 → 𝐈⦃f⦄ → L1 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. + ∀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/ @@ -269,7 +269,7 @@ qed-. 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/ @@ -280,7 +280,7 @@ qed-. (* Basic_2A1: was: drop_inv_O1_pair1 *) lemma drops_inv_bind1_isuni: ∀b,f,I,K,L2. 𝐔⦃f⦄ → ⬇*[b, f] K.ⓘ{I} ≘ L2 → (𝐈⦃f⦄ ∧ L2 = K.ⓘ{I}) ∨ - ∃∃g. 𝐔⦃g⦄ & ⬇*[b, g] K ≘ L2 & f = ⫯g. + ∃∃g. 𝐔⦃g⦄ & ⬇*[b, g] K ≘ L2 & f = ↑g. #b #f #I #K #L2 #Hf #H elim (isuni_split … Hf) -Hf * #g #Hg #H0 destruct [ lapply (drops_inv_skip1 … H) -H * #Z #Y #HY #HZ #H destruct <(drops_fwd_isid … HY Hg) -Y >(liftsb_fwd_isid … HZ Hg) -Z @@ -292,7 +292,7 @@ qed-. (* Basic_2A1: was: drop_inv_O1_pair2 *) lemma drops_inv_bind2_isuni: ∀b,f,I,K,L1. 𝐔⦃f⦄ → ⬇*[b, f] L1 ≘ K.ⓘ{I} → (𝐈⦃f⦄ ∧ L1 = K.ⓘ{I}) ∨ - ∃∃g,I1,K1. 𝐔⦃g⦄ & ⬇*[b, g] K1 ≘ K.ⓘ{I} & L1 = K1.ⓘ{I1} & f = ⫯g. + ∃∃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,7 +302,7 @@ 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} → +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 // @@ -341,7 +341,7 @@ 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 ********************************) @@ -358,7 +358,7 @@ lemma drops_inv_atom2: ∀b,L,f. ⬇*[b, f] L ≘ ⋆ → ] qed-. -lemma drops_inv_succ: ∀L1,L2,i. ⬇*[⫯i] L1 ≘ L2 → +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 // @@ -418,11 +418,11 @@ qed-. lemma drops_tls_at: ∀f,i1,i2. @⦃i1,f⦄ ≘ i2 → ∀b,L1,L2. ⬇*[b,⫱*[i2]f] 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. + ∃∃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 06f1c0655..8549cf02a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_drops.ma @@ -60,7 +60,7 @@ theorem drops_trans: ∀b1,f1,L1,L. ⬇*[b1, f1] L1 ≘ L → qed-. theorem drops_conf_div: ∀f1,L,K. ⬇*[Ⓣ,f1] L ≘ K → ∀f2. ⬇*[Ⓣ,f2] L ≘ K → - 𝐔⦃f1⦄ → 𝐔⦃f2⦄ → f1 ≗ f2. + 𝐔⦃f1⦄ → 𝐔⦃f2⦄ → f1 ≡ f2. #f1 #L #K #H elim H -f1 -L -K [ #f1 #Hf1 #f2 #Hf2 elim (drops_inv_atom1 … Hf2) -Hf2 /3 width=1 by isid_inv_eq_repl/ @@ -94,7 +94,7 @@ 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 → + ∀f2. f1 ⊚ ⫯f2 ≘ f → ∃∃I2,K2. L2 = K2.ⓘ{I2} & ⬇*[b2, f2] K1 ≘ K2 & ⬆*[f2] I2 ≘ I1. #b2 #f #L #L2 #H2 #b1 #f1 #I1 #K1 #H1 #f2 #Hf lapply (drops_conf … H1 … H2 … Hf) -L -Hf @@ -104,7 +104,7 @@ 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 → + ∀f. f1 ⊚ f2 ≘ ⫯f → ∃∃I1,K1. L1 = K1.ⓘ{I1} & ⬇*[b1∧b2, f] K1 ≘ K2 & ⬆*[f] I2 ≘ I1. #b1 #f1 #L1 #L #H1 #b2 #f2 #I2 #K2 #H2 #f #Hf @@ -115,7 +115,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⦄ → 𝐔⦃f2⦄ → f1 ≗ f2 ∧ I1 = I2. + 𝐔⦃f1⦄ → 𝐔⦃f2⦄ → f1 ≡ f2 ∧ I1 = I2. #f1 #f2 #I1 #I2 #L #K #Hf1 #Hf2 #HU1 #HU2 lapply (drops_isuni_fwd_drop2 … Hf1) // #H1 lapply (drops_isuni_fwd_drop2 … Hf2) // #H2 diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_lexs.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_lexs.ma index dfee0330d..18519b6fc 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_lexs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_lexs.ma @@ -118,7 +118,7 @@ lemma lexs_co_dropable_dx: ∀RN,RP. co_dropable_dx (lexs RN RP). 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 → + ∀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 @@ -129,7 +129,7 @@ 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 → + ∀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 @@ -140,7 +140,7 @@ 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 → + ∀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 @@ -150,7 +150,7 @@ 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 → + ∀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 @@ -162,7 +162,7 @@ lemma drops_lexs_trans_next: ∀RN,RP. (∀L. reflexive ? (RN L)) → (∀L. ref 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 → + ∀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 @@ -174,7 +174,7 @@ lemma drops_lexs_trans_push: ∀RN,RP. (∀L. reflexive ? (RN L)) → (∀L. ref 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 → + ∀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 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 8c6feaaa2..d07ea2210 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_lreq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/drops_lreq.ma @@ -31,7 +31,7 @@ lemma lreq_co_dropable_dx: co_dropable_dx lreq. (* 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 → + ∀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 @@ -42,7 +42,7 @@ 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 → + ∀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 @@ -51,7 +51,7 @@ 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 → + ∀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 diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/lex.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/lex.ma index 7e4e03c8e..5c76651b2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/lex.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/lex.ma @@ -54,7 +54,7 @@ qed-. lemma lex_inv_bind_sn: ∀R,I1,L2,K1. K1.ⓘ{I1} ⪤[R] L2 → ∃∃I2,K2. K1 ⪤[R] K2 & cext2 R K1 I1 I2 & L2 = K2.ⓘ{I2}. #R #I1 #L2 #K1 * #f #Hf #H -lapply (lexs_eq_repl_fwd … H (↑f) ?) -H /2 width=1 by eq_push_inv_isid/ #H +lapply (lexs_eq_repl_fwd … H (⫯f) ?) -H /2 width=1 by eq_push_inv_isid/ #H elim (lexs_inv_push1 … H) -H #I2 #K2 #HK12 #HI12 #H destruct /3 width=5 by ex2_intro, ex3_2_intro/ qed-. @@ -67,7 +67,7 @@ qed-. lemma lex_inv_bind_dx: ∀R,I2,L1,K2. L1 ⪤[R] K2.ⓘ{I2} → ∃∃I1,K1. K1 ⪤[R] K2 & cext2 R K1 I1 I2 & L1 = K1.ⓘ{I1}. #R #I2 #L1 #K2 * #f #Hf #H -lapply (lexs_eq_repl_fwd … H (↑f) ?) -H /2 width=1 by eq_push_inv_isid/ #H +lapply (lexs_eq_repl_fwd … H (⫯f) ?) -H /2 width=1 by eq_push_inv_isid/ #H elim (lexs_inv_push2 … H) -H #I1 #K1 #HK12 #HI12 #H destruct /3 width=5 by ex3_2_intro, ex2_intro/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/lexs.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/lexs.ma index 291892f71..0ff659b13 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/lexs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/lexs.ma @@ -23,10 +23,10 @@ inductive lexs (RN,RP:relation3 lenv bind bind): rtmap → relation lenv ≝ | lexs_atom: ∀f. lexs RN RP f (⋆) (⋆) | lexs_next: ∀f,I1,I2,L1,L2. lexs RN RP f L1 L2 → RN L1 I1 I2 → - lexs RN RP (⫯f) (L1.ⓘ{I1}) (L2.ⓘ{I2}) + lexs RN RP (↑f) (L1.ⓘ{I1}) (L2.ⓘ{I2}) | lexs_push: ∀f,I1,I2,L1,L2. lexs RN RP f L1 L2 → RP L1 I1 I2 → - lexs RN RP (↑f) (L1.ⓘ{I1}) (L2.ⓘ{I2}) + lexs RN RP (⫯f) (L1.ⓘ{I1}) (L2.ⓘ{I2}) . interpretation "generic entrywise extension (local environment)" @@ -60,7 +60,7 @@ qed-. lemma lexs_inv_atom1: ∀RN,RP,f,Y. ⋆ ⪤*[RN, RP, f] Y → Y = ⋆. /2 width=6 by lexs_inv_atom1_aux/ qed-. -fact lexs_inv_next1_aux: ∀RN,RP,f,X,Y. X ⪤*[RN, RP, f] Y → ∀g,J1,K1. X = K1.ⓘ{J1} → f = ⫯g → +fact lexs_inv_next1_aux: ∀RN,RP,f,X,Y. X ⪤*[RN, RP, f] Y → ∀g,J1,K1. X = K1.ⓘ{J1} → f = ↑g → ∃∃J2,K2. K1 ⪤*[RN, RP, g] K2 & RN K1 J1 J2 & Y = K2.ⓘ{J2}. #RN #RP #f #X #Y * -f -X -Y [ #f #g #J1 #K1 #H destruct @@ -71,11 +71,11 @@ fact lexs_inv_next1_aux: ∀RN,RP,f,X,Y. X ⪤*[RN, RP, f] Y → ∀g,J1,K1. X = qed-. (* Basic_2A1: includes lpx_sn_inv_pair1 *) -lemma lexs_inv_next1: ∀RN,RP,g,J1,K1,Y. K1.ⓘ{J1} ⪤*[RN, RP, ⫯g] Y → +lemma lexs_inv_next1: ∀RN,RP,g,J1,K1,Y. K1.ⓘ{J1} ⪤*[RN, RP, ↑g] Y → ∃∃J2,K2. K1 ⪤*[RN, RP, g] K2 & RN K1 J1 J2 & Y = K2.ⓘ{J2}. /2 width=7 by lexs_inv_next1_aux/ qed-. -fact lexs_inv_push1_aux: ∀RN,RP,f,X,Y. X ⪤*[RN, RP, f] Y → ∀g,J1,K1. X = K1.ⓘ{J1} → f = ↑g → +fact lexs_inv_push1_aux: ∀RN,RP,f,X,Y. X ⪤*[RN, RP, f] Y → ∀g,J1,K1. X = K1.ⓘ{J1} → f = ⫯g → ∃∃J2,K2. K1 ⪤*[RN, RP, g] K2 & RP K1 J1 J2 & Y = K2.ⓘ{J2}. #RN #RP #f #X #Y * -f -X -Y [ #f #g #J1 #K1 #H destruct @@ -85,7 +85,7 @@ fact lexs_inv_push1_aux: ∀RN,RP,f,X,Y. X ⪤*[RN, RP, f] Y → ∀g,J1,K1. X = ] qed-. -lemma lexs_inv_push1: ∀RN,RP,g,J1,K1,Y. K1.ⓘ{J1} ⪤*[RN, RP, ↑g] Y → +lemma lexs_inv_push1: ∀RN,RP,g,J1,K1,Y. K1.ⓘ{J1} ⪤*[RN, RP, ⫯g] Y → ∃∃J2,K2. K1 ⪤*[RN, RP, g] K2 & RP K1 J1 J2 & Y = K2.ⓘ{J2}. /2 width=7 by lexs_inv_push1_aux/ qed-. @@ -98,7 +98,7 @@ qed-. lemma lexs_inv_atom2: ∀RN,RP,f,X. X ⪤*[RN, RP, f] ⋆ → X = ⋆. /2 width=6 by lexs_inv_atom2_aux/ qed-. -fact lexs_inv_next2_aux: ∀RN,RP,f,X,Y. X ⪤*[RN, RP, f] Y → ∀g,J2,K2. Y = K2.ⓘ{J2} → f = ⫯g → +fact lexs_inv_next2_aux: ∀RN,RP,f,X,Y. X ⪤*[RN, RP, f] Y → ∀g,J2,K2. Y = K2.ⓘ{J2} → f = ↑g → ∃∃J1,K1. K1 ⪤*[RN, RP, g] K2 & RN K1 J1 J2 & X = K1.ⓘ{J1}. #RN #RP #f #X #Y * -f -X -Y [ #f #g #J2 #K2 #H destruct @@ -109,11 +109,11 @@ fact lexs_inv_next2_aux: ∀RN,RP,f,X,Y. X ⪤*[RN, RP, f] Y → ∀g,J2,K2. Y = qed-. (* Basic_2A1: includes lpx_sn_inv_pair2 *) -lemma lexs_inv_next2: ∀RN,RP,g,J2,X,K2. X ⪤*[RN, RP, ⫯g] K2.ⓘ{J2} → +lemma lexs_inv_next2: ∀RN,RP,g,J2,X,K2. X ⪤*[RN, RP, ↑g] K2.ⓘ{J2} → ∃∃J1,K1. K1 ⪤*[RN, RP, g] K2 & RN K1 J1 J2 & X = K1.ⓘ{J1}. /2 width=7 by lexs_inv_next2_aux/ qed-. -fact lexs_inv_push2_aux: ∀RN,RP,f,X,Y. X ⪤*[RN, RP, f] Y → ∀g,J2,K2. Y = K2.ⓘ{J2} → f = ↑g → +fact lexs_inv_push2_aux: ∀RN,RP,f,X,Y. X ⪤*[RN, RP, f] Y → ∀g,J2,K2. Y = K2.ⓘ{J2} → f = ⫯g → ∃∃J1,K1. K1 ⪤*[RN, RP, g] K2 & RP K1 J1 J2 & X = K1.ⓘ{J1}. #RN #RP #f #X #Y * -f -X -Y [ #f #J2 #K2 #g #H destruct @@ -123,20 +123,20 @@ fact lexs_inv_push2_aux: ∀RN,RP,f,X,Y. X ⪤*[RN, RP, f] Y → ∀g,J2,K2. Y = ] qed-. -lemma lexs_inv_push2: ∀RN,RP,g,J2,X,K2. X ⪤*[RN, RP, ↑g] K2.ⓘ{J2} → +lemma lexs_inv_push2: ∀RN,RP,g,J2,X,K2. X ⪤*[RN, RP, ⫯g] K2.ⓘ{J2} → ∃∃J1,K1. K1 ⪤*[RN, RP, g] K2 & RP K1 J1 J2 & X = K1.ⓘ{J1}. /2 width=7 by lexs_inv_push2_aux/ qed-. (* Basic_2A1: includes lpx_sn_inv_pair *) lemma lexs_inv_next: ∀RN,RP,f,I1,I2,L1,L2. - L1.ⓘ{I1} ⪤*[RN, RP, ⫯f] L2.ⓘ{I2} → + L1.ⓘ{I1} ⪤*[RN, RP, ↑f] L2.ⓘ{I2} → L1 ⪤*[RN, RP, f] L2 ∧ RN L1 I1 I2. #RN #RP #f #I1 #I2 #L1 #L2 #H elim (lexs_inv_next1 … H) -H #I0 #L0 #HL10 #HI10 #H destruct /2 width=1 by conj/ qed-. lemma lexs_inv_push: ∀RN,RP,f,I1,I2,L1,L2. - L1.ⓘ{I1} ⪤*[RN, RP, ↑f] L2.ⓘ{I2} → + L1.ⓘ{I1} ⪤*[RN, RP, ⫯f] L2.ⓘ{I2} → L1 ⪤*[RN, RP, f] L2 ∧ RP L1 I1 I2. #RN #RP #f #I1 #I2 #L1 #L2 #H elim (lexs_inv_push1 … H) -H #I0 #L0 #HL10 #HI10 #H destruct /2 width=1 by conj/ 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 c1f10efbf..545420f3b 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 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 09536b034..0ddcf6eb2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/lexs_tc.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/lexs_tc.ma @@ -28,28 +28,28 @@ lemma lexs_tc_refl: ∀RN,RP. c_reflexive … RN → c_reflexive … RP → lemma lexs_tc_next_sn: ∀RN,RP. c_reflexive … RN → ∀f,I2,L1,L2. TC … (lexs RN RP f) L1 L2 → ∀I1. RN L1 I1 I2 → - TC … (lexs RN RP (⫯f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}). + TC … (lexs RN RP (↑f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}). #RN #RP #HRN #f #I2 #L1 #L2 #H @(TC_ind_dx ??????? H) -L1 /3 width=3 by lexs_next, TC_strap, inj/ qed. lemma lexs_tc_next_dx: ∀RN,RP. c_reflexive … RN → c_reflexive … RP → ∀f,I1,I2,L1. (CTC … RN) L1 I1 I2 → ∀L2. L1 ⪤*[RN, RP, f] L2 → - TC … (lexs RN RP (⫯f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}). + 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/ qed. lemma lexs_tc_push_sn: ∀RN,RP. c_reflexive … RP → ∀f,I2,L1,L2. TC … (lexs RN RP f) L1 L2 → ∀I1. RP L1 I1 I2 → - TC … (lexs RN RP (↑f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}). + TC … (lexs RN RP (⫯f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}). #RN #RP #HRP #f #I2 #L1 #L2 #H @(TC_ind_dx ??????? H) -L1 /3 width=3 by lexs_push, TC_strap, inj/ qed. lemma lexs_tc_push_dx: ∀RN,RP. c_reflexive … RN → c_reflexive … RP → ∀f,I1,I2,L1. (CTC … RP) L1 I1 I2 → ∀L2. L1 ⪤*[RN, RP, f] L2 → - TC … (lexs RN RP (↑f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}). + 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. @@ -68,14 +68,14 @@ qed. theorem lexs_tc_next: ∀RN,RP. c_reflexive … RN → c_reflexive … RP → ∀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}). + 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. (CTC … RP) L1 I1 I2 → ∀L2. TC … (lexs RN RP f) L1 L2 → - TC … (lexs RN RP (↑f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}). + 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/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts.ma index 1b7c63c0b..5198b2d58 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts.ma @@ -28,7 +28,7 @@ inductive lifts: rtmap → relation term ≝ | lifts_lref: ∀f,i1,i2. @⦃i1, f⦄ ≘ i2 → lifts f (#i1) (#i2) | lifts_gref: ∀f,l. lifts f (§l) (§l) | lifts_bind: ∀f,p,I,V1,V2,T1,T2. - lifts f V1 V2 → lifts (↑f) T1 T2 → + lifts f V1 V2 → lifts (⫯f) T1 T2 → lifts f (ⓑ{p,I}V1.T1) (ⓑ{p,I}V2.T2) | lifts_flat: ∀f,I,V1,V2,T1,T2. lifts f V1 V2 → lifts f T1 T2 → @@ -103,7 +103,7 @@ lemma lifts_inv_gref1: ∀f,Y,l. ⬆*[f] §l ≘ Y → Y = §l. 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 @@ -117,7 +117,7 @@ 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 & + ∃∃V2,T2. ⬆*[f] V1 ≘ V2 & ⬆*[⫯f] T1 ≘ T2 & Y = ⓑ{p,I}V2.T2. /2 width=3 by lifts_inv_bind1_aux/ qed-. @@ -185,7 +185,7 @@ lemma lifts_inv_gref2: ∀f,X,l. ⬆*[f] X ≘ §l → X = §l. 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 @@ -199,7 +199,7 @@ 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 & + ∃∃V1,T1. ⬆*[f] V1 ≘ V2 & ⬆*[⫯f] T1 ≘ T2 & X = ⓑ{p,I}V1.T1. /2 width=3 by lifts_inv_bind2_aux/ qed-. @@ -352,7 +352,7 @@ lemma lifts_total: ∀T1,f. ∃T2. ⬆*[f] T1 ≘ T2. /3 width=2 by lifts_lref, lifts_sort, lifts_gref, ex_intro/ [ #p ] #I #V1 #T1 #IHV1 #IHT1 #f elim (IHV1 f) -IHV1 #V2 #HV12 -[ elim (IHT1 (↑f)) -IHT1 /3 width=2 by lifts_bind, ex_intro/ +[ elim (IHT1 (⫯f)) -IHT1 /3 width=2 by lifts_bind, ex_intro/ | elim (IHT1 f) -IHT1 /3 width=2 by lifts_flat, ex_intro/ ] qed-. @@ -372,7 +372,7 @@ lemma lifts_split_trans: ∀f,T1,T2. ⬆*[f] T1 ≘ T2 → /3 width=3 by lifts_lref, ex2_intro/ | /3 width=3 by lifts_gref, ex2_intro/ | #f #p #I #V1 #V2 #T1 #T2 #_ #_ #IHV #IHT #f1 #f2 #Ht - elim (IHV … Ht) elim (IHT (↑f1) (↑f2)) -IHV -IHT + elim (IHV … Ht) elim (IHT (⫯f1) (⫯f2)) -IHV -IHT /3 width=5 by lifts_bind, after_O2, ex2_intro/ | #f #I #V1 #V2 #T1 #T2 #_ #_ #IHV #IHT #f1 #f2 #Ht elim (IHV … Ht) elim (IHT … Ht) -IHV -IHT -Ht @@ -390,7 +390,7 @@ lemma lifts_split_div: ∀f1,T1,T2. ⬆*[f1] T1 ≘ T2 → /3 width=3 by lifts_lref, ex2_intro/ | /3 width=3 by lifts_gref, ex2_intro/ | #f1 #p #I #V1 #V2 #T1 #T2 #_ #_ #IHV #IHT #f2 #f #Ht - elim (IHV … Ht) elim (IHT (↑f2) (↑f)) -IHV -IHT + elim (IHV … Ht) elim (IHT (⫯f2) (⫯f)) -IHV -IHT /3 width=5 by lifts_bind, after_O2, ex2_intro/ | #f1 #I #V1 #V2 #T1 #T2 #_ #_ #IHV #IHT #f2 #f #Ht elim (IHV … Ht) elim (IHT … Ht) -IHV -IHT -Ht @@ -411,7 +411,7 @@ lemma is_lifts_dec: ∀T2,f. Decidable (∃T1. ⬆*[f] T1 ≘ T2). ] | * [ #p ] #I #V2 #T2 #IHV2 #IHT2 #f [ elim (IHV2 f) -IHV2 - [ * #V1 #HV12 elim (IHT2 (↑f)) -IHT2 + [ * #V1 #HV12 elim (IHT2 (⫯f)) -IHT2 [ * #T1 #HT12 @or_introl /3 width=2 by lifts_bind, ex_intro/ | -V1 #HT2 @or_intror * #X #H elim (lifts_inv_bind2 … H) -H /3 width=2 by ex_intro/ 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 63546ec63..9d7fc61bf 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_lifts.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/lifts_lifts.ma @@ -46,7 +46,7 @@ theorem lifts_div4: ∀f2,Tf,T. ⬆*[f2] Tf ≘ T → ∀g2,Tg. ⬆*[g2] Tg ≘ ] qed-. -lemma lifts_div4_one: ∀f,Tf,T. ⬆*[↑f] Tf ≘ T → +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-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/relocation/lreq.ma b/matita/matita/contribs/lambdadelta/basic_2/relocation/lreq.ma index 14bc0576d..747e9a511 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/relocation/lreq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/relocation/lreq.ma @@ -52,7 +52,7 @@ 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 → +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 @@ -60,7 +60,7 @@ elim (lexs_inv_next1 … H) -H #Z #K2 #HK12 #H1 #H2 destruct qed-. (* Basic_2A1: includes: lreq_inv_zero1 lreq_inv_succ1 *) -lemma lreq_inv_push1: ∀g,J1,K1,Y. K1.ⓘ{J1} ≡[↑g] Y → +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-. @@ -70,7 +70,7 @@ 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} → +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 @@ -78,20 +78,20 @@ elim (lexs_inv_next2 … H) -H #Z #K1 #HK12 #H1 #H2 destruct qed-. (* Basic_2A1: includes: lreq_inv_zero2 lreq_inv_succ2 *) -lemma lreq_inv_push2: ∀g,J2,X,K2. X ≡[↑g] K2.ⓘ{J2} → +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} → +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-. 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 547c6d0d5..e79ed15f5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/cpxs.ma @@ -130,7 +130,7 @@ lemma cpxs_inv_sort1: ∀h,G,L,X2,s. ⦃G, L⦄ ⊢ ⋆s ⬈*[h] X2 → #h #G #L #X2 #s #H @(cpxs_ind … H) -X2 /2 width=2 by ex_intro/ #X #X2 #_ #HX2 * #n #H destruct elim (cpx_inv_sort1 … HX2) -HX2 #H destruct /2 width=2 by ex_intro/ -@(ex_intro … (⫯n)) >iter_S // +@(ex_intro … (↑n)) >iter_S // qed-. lemma cpxs_inv_cast1: ∀h,G,L,W1,T1,U2. ⦃G, L⦄ ⊢ ⓝW1.T1 ⬈*[h] U2 → 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 0fd54e95a..87ff4a980 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 @@ -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 @@ -43,11 +43,11 @@ 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. + ∀W2. ⬆*[↑i] V2 ≘ W2 → ⦃G, L⦄ ⊢ #i ⬈*[h] W2. #h #I #G #L #K #V1 #V2 #i #HLK #H @(cpxs_ind … H) -V2 [ /3 width=7 by cpx_cpxs, cpx_delta_drops/ | #V #V2 #_ #HV2 #IH #W2 #HVW2 - elim (lifts_total V (𝐔❴⫯i❵)) + elim (lifts_total V (𝐔❴↑i❵)) /4 width=11 by cpxs_strap1, cpx_lifts_bi, drops_isuni_fwd_drop2/ ] qed. @@ -69,8 +69,8 @@ lemma cpxs_inv_zero1: ∀h,G,L,T2. ⦃G, L⦄ ⊢ #0 ⬈*[h] T2 → ] qed-. -lemma cpxs_inv_lref1: ∀h,G,L,T2,i. ⦃G, L⦄ ⊢ #⫯i ⬈*[h] T2 → - T2 = #(⫯i) ∨ +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}. #h #G #L #T2 #i #H @(cpxs_ind … H) -T2 /2 width=1 by or_introl/ #T #T2 #_ #HT2 * @@ -87,7 +87,7 @@ qed-. 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] T1 ≘ T2. #h #G #L #T2 #i #H @(cpxs_ind … H) -T2 /2 width=1 by or_introl/ #T #T2 #_ #HT2 * [ #H destruct 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 580f90ab2..22f20ecb0 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 @@ -33,7 +33,7 @@ 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 → + ∀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 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 a1bf1e5b8..529c90c25 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 @@ -45,7 +45,7 @@ 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 → + ∀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/ 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 b836706dd..34ccf92d0 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 @@ -69,7 +69,7 @@ qed. 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❵)) +elim (lifts_total V (𝐔❴↑i❵)) /4 width=9 by csx_inv_lifts, csx_cpx_trans, cpx_delta_drops, drops_isuni_fwd_drop2/ 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 6872763e0..e1166a0fd 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 @@ -38,7 +38,7 @@ 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 → + ∀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/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx.ma index 01f64cfa6..1a73fa89c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_computation/lsubsx.ma @@ -22,11 +22,11 @@ include "basic_2/rt_computation/lfsx.ma". inductive lsubsx (h) (o) (G): rtmap → relation lenv ≝ | lsubsx_atom: ∀f. lsubsx h o G f (⋆) (⋆) | lsubsx_push: ∀f,I,K1,K2. lsubsx h o G f K1 K2 → - lsubsx h o G (↑f) (K1.ⓘ{I}) (K2.ⓘ{I}) + lsubsx h o G (⫯f) (K1.ⓘ{I}) (K2.ⓘ{I}) | lsubsx_unit: ∀f,I,K1,K2. lsubsx h o G f K1 K2 → - lsubsx h o G (⫯f) (K1.ⓤ{I}) (K2.ⓧ) + lsubsx h o G (↑f) (K1.ⓤ{I}) (K2.ⓧ) | lsubsx_pair: ∀f,I,K1,K2,V. G ⊢ ⬈*[h, o, V] 𝐒⦃K2⦄ → - lsubsx h o G f K1 K2 → lsubsx h o G (⫯f) (K1.ⓑ{I}V) (K2.ⓧ) + lsubsx h o G f K1 K2 → lsubsx h o G (↑f) (K1.ⓑ{I}V) (K2.ⓧ) . interpretation @@ -48,7 +48,7 @@ lemma lsubsx_inv_atom_sn: ∀h,o,g,G,L2. G ⊢ ⋆ ⊆ⓧ[h, o, g] L2 → L2 = /2 width=7 by lsubsx_inv_atom_sn_aux/ qed-. fact lsubsx_inv_push_sn_aux: ∀h,o,g,G,L1,L2. G ⊢ L1 ⊆ⓧ[h, o, g] L2 → - ∀f,I,K1. g = ↑f → L1 = K1.ⓘ{I} → + ∀f,I,K1. g = ⫯f → L1 = K1.ⓘ{I} → ∃∃K2. G ⊢ K1 ⊆ⓧ[h, o, f] K2 & L2 = K2.ⓘ{I}. #h #o #g #G #L1 #L2 * -g -L1 -L2 [ #f #g #J #L1 #_ #H destruct @@ -61,12 +61,12 @@ fact lsubsx_inv_push_sn_aux: ∀h,o,g,G,L1,L2. G ⊢ L1 ⊆ⓧ[h, o, g] L2 → ] qed-. -lemma lsubsx_inv_push_sn: ∀h,o,f,I,G,K1,L2. G ⊢ K1.ⓘ{I} ⊆ⓧ[h, o, ↑f] L2 → +lemma lsubsx_inv_push_sn: ∀h,o,f,I,G,K1,L2. G ⊢ K1.ⓘ{I} ⊆ⓧ[h, o, ⫯f] L2 → ∃∃K2. G ⊢ K1 ⊆ⓧ[h, o, f] K2 & L2 = K2.ⓘ{I}. /2 width=5 by lsubsx_inv_push_sn_aux/ qed-. fact lsubsx_inv_unit_sn_aux: ∀h,o,g,G,L1,L2. G ⊢ L1 ⊆ⓧ[h, o, g] L2 → - ∀f,I,K1. g = ⫯f → L1 = K1.ⓤ{I} → + ∀f,I,K1. g = ↑f → L1 = K1.ⓤ{I} → ∃∃K2. G ⊢ K1 ⊆ⓧ[h, o, f] K2 & L2 = K2.ⓧ. #h #o #g #G #L1 #L2 * -g -L1 -L2 [ #f #g #J #L1 #_ #H destruct @@ -78,12 +78,12 @@ fact lsubsx_inv_unit_sn_aux: ∀h,o,g,G,L1,L2. G ⊢ L1 ⊆ⓧ[h, o, g] L2 → ] qed-. -lemma lsubsx_inv_unit_sn: ∀h,o,f,I,G,K1,L2. G ⊢ K1.ⓤ{I} ⊆ⓧ[h, o, ⫯f] L2 → +lemma lsubsx_inv_unit_sn: ∀h,o,f,I,G,K1,L2. G ⊢ K1.ⓤ{I} ⊆ⓧ[h, o, ↑f] L2 → ∃∃K2. G ⊢ K1 ⊆ⓧ[h, o, f] K2 & L2 = K2.ⓧ. /2 width=6 by lsubsx_inv_unit_sn_aux/ qed-. fact lsubsx_inv_pair_sn_aux: ∀h,o,g,G,L1,L2. G ⊢ L1 ⊆ⓧ[h, o, g] L2 → - ∀f,I,K1,V. g = ⫯f → L1 = K1.ⓑ{I}V → + ∀f,I,K1,V. g = ↑f → L1 = K1.ⓑ{I}V → ∃∃K2. G ⊢ ⬈*[h, o, V] 𝐒⦃K2⦄ & G ⊢ K1 ⊆ⓧ[h, o, f] K2 & L2 = K2.ⓧ. #h #o #g #G #L1 #L2 * -g -L1 -L2 @@ -97,7 +97,7 @@ fact lsubsx_inv_pair_sn_aux: ∀h,o,g,G,L1,L2. G ⊢ L1 ⊆ⓧ[h, o, g] L2 → qed-. (* Basic_2A1: uses: lcosx_inv_pair *) -lemma lsubsx_inv_pair_sn: ∀h,o,f,I,G,K1,L2,V. G ⊢ K1.ⓑ{I}V ⊆ⓧ[h, o, ⫯f] L2 → +lemma lsubsx_inv_pair_sn: ∀h,o,f,I,G,K1,L2,V. G ⊢ K1.ⓑ{I}V ⊆ⓧ[h, o, ↑f] L2 → ∃∃K2. G ⊢ ⬈*[h, o, V] 𝐒⦃K2⦄ & G ⊢ K1 ⊆ⓧ[h, o, f] K2 & L2 = K2.ⓧ. /2 width=6 by lsubsx_inv_pair_sn_aux/ qed-. @@ -105,9 +105,9 @@ lemma lsubsx_inv_pair_sn: ∀h,o,f,I,G,K1,L2,V. G ⊢ K1.ⓑ{I}V ⊆ⓧ[h, o, (* Advanced inversion lemmas ************************************************) lemma lsubsx_inv_pair_sn_gen: ∀h,o,g,I,G,K1,L2,V. G ⊢ K1.ⓑ{I}V ⊆ⓧ[h, o, g] L2 → - ∨∨ ∃∃f,K2. G ⊢ K1 ⊆ⓧ[h, o, f] K2 & g = ↑f & L2 = K2.ⓑ{I}V + ∨∨ ∃∃f,K2. G ⊢ K1 ⊆ⓧ[h, o, f] K2 & g = ⫯f & L2 = K2.ⓑ{I}V | ∃∃f,K2. G ⊢ ⬈*[h, o, V] 𝐒⦃K2⦄ & - G ⊢ K1 ⊆ⓧ[h, o, f] K2 & g = ⫯f & L2 = K2.ⓧ. + G ⊢ K1 ⊆ⓧ[h, o, f] K2 & g = ↑f & L2 = K2.ⓧ. #h #o #g #I #G #K1 #L2 #V #H elim (pn_split g) * #f #Hf destruct [ elim (lsubsx_inv_push_sn … H) -H /3 width=5 by ex3_2_intro, or_introl/ 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 caf9b8dd0..8b97e1bc4 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 @@ -42,7 +42,7 @@ qed-. (* 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⦄ → ⊥. #h #o #I #G #L #K #V #i #HLK #H -elim (lifts_total V (𝐔❴⫯i❵)) #W #HVW +elim (lifts_total V (𝐔❴↑i❵)) #W #HVW lapply (H W ?) -H /2 width=7 by cpx_delta_drops/ -HLK #H lapply (tdeq_inv_lref1 … H) -H #H destruct /2 width=5 by lifts_inv_lref2_uni_lt/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg.ma index e6f5d87ad..317f69e05 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg.ma @@ -31,13 +31,13 @@ inductive cpg (Rt:relation rtc) (h): rtc → relation4 genv lenv term term ≝ | cpg_ell : ∀c,G,L,V1,V2,W2. cpg Rt h c G L V1 V2 → ⬆*[1] V2 ≘ W2 → cpg Rt h (c+𝟘𝟙) G (L.ⓛV1) (#0) W2 | cpg_lref : ∀c,I,G,L,T,U,i. cpg Rt h c G L (#i) T → - ⬆*[1] T ≘ U → cpg Rt h c G (L.ⓘ{I}) (#⫯i) U + ⬆*[1] T ≘ U → cpg Rt h c G (L.ⓘ{I}) (#↑i) U | cpg_bind : ∀cV,cT,p,I,G,L,V1,V2,T1,T2. cpg Rt h cV G L V1 V2 → cpg Rt h cT G (L.ⓑ{I}V1) T1 T2 → - cpg Rt h ((↓cV)∨cT) G L (ⓑ{p,I}V1.T1) (ⓑ{p,I}V2.T2) + cpg Rt h ((↕*cV)∨cT) G L (ⓑ{p,I}V1.T1) (ⓑ{p,I}V2.T2) | cpg_appl : ∀cV,cT,G,L,V1,V2,T1,T2. cpg Rt h cV G L V1 V2 → cpg Rt h cT G L T1 T2 → - cpg Rt h ((↓cV)∨cT) G L (ⓐV1.T1) (ⓐV2.T2) + cpg Rt h ((↕*cV)∨cT) G L (ⓐV1.T1) (ⓐV2.T2) | cpg_cast : ∀cU,cT,G,L,U1,U2,T1,T2. Rt cU cT → 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) @@ -47,11 +47,11 @@ inductive cpg (Rt:relation rtc) (h): rtc → relation4 genv lenv term term ≝ | cpg_ee : ∀c,G,L,V1,V2,T. cpg Rt h c G L V1 V2 → cpg Rt h (c+𝟘𝟙) G L (ⓝV1.T) V2 | cpg_beta : ∀cV,cW,cT,p,G,L,V1,V2,W1,W2,T1,T2. cpg Rt h cV G L V1 V2 → cpg Rt h cW G L W1 W2 → cpg Rt h cT G (L.ⓛW1) T1 T2 → - cpg Rt h (((↓cV)∨(↓cW)∨cT)+𝟙𝟘) G L (ⓐV1.ⓛ{p}W1.T1) (ⓓ{p}ⓝW2.V2.T2) + cpg Rt h (((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘) G L (ⓐV1.ⓛ{p}W1.T1) (ⓓ{p}ⓝW2.V2.T2) | cpg_theta: ∀cV,cW,cT,p,G,L,V1,V,V2,W1,W2,T1,T2. cpg Rt h cV G L V1 V → ⬆*[1] V ≘ V2 → cpg Rt h cW G L W1 W2 → cpg Rt h cT G (L.ⓓW1) T1 T2 → - cpg Rt h (((↓cV)∨(↓cW)∨cT)+𝟙𝟘) G L (ⓐV1.ⓓ{p}W1.T1) (ⓓ{p}W2.ⓐV2.T2) + cpg Rt h (((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘) G L (ⓐV1.ⓓ{p}W1.T1) (ⓓ{p}W2.ⓐV2.T2) . interpretation @@ -76,7 +76,7 @@ fact cpg_inv_atom1_aux: ∀Rt,c,h,G,L,T1,T2. ⦃G, L⦄ ⊢ T1 ⬈[Rt, c, h] T2 | ∃∃cV,K,V1,V2. ⦃G, K⦄ ⊢ V1 ⬈[Rt, cV, h] V2 & ⬆*[1] V2 ≘ T2 & L = K.ⓛV1 & J = LRef 0 & c = cV+𝟘𝟙 | ∃∃I,K,T,i. ⦃G, K⦄ ⊢ #i ⬈[Rt, c, h] T & ⬆*[1] T ≘ T2 & - L = K.ⓘ{I} & J = LRef (⫯i). + L = K.ⓘ{I} & J = LRef (↑i). #Rt #c #h #G #L #T1 #T2 * -c -G -L -T1 -T2 [ #I #G #L #J #H destruct /3 width=1 by or5_intro0, conj/ | #G #L #s #J #H destruct /3 width=3 by or5_intro1, ex3_intro/ @@ -102,7 +102,7 @@ lemma cpg_inv_atom1: ∀Rt,c,h,J,G,L,T2. ⦃G, L⦄ ⊢ ⓪{J} ⬈[Rt, c, h] T2 | ∃∃cV,K,V1,V2. ⦃G, K⦄ ⊢ V1 ⬈[Rt, cV, h] V2 & ⬆*[1] V2 ≘ T2 & L = K.ⓛV1 & J = LRef 0 & c = cV+𝟘𝟙 | ∃∃I,K,T,i. ⦃G, K⦄ ⊢ #i ⬈[Rt, c, h] T & ⬆*[1] T ≘ T2 & - L = K.ⓘ{I} & J = LRef (⫯i). + L = K.ⓘ{I} & J = LRef (↑i). /2 width=3 by cpg_inv_atom1_aux/ qed-. lemma cpg_inv_sort1: ∀Rt,c,h,G,L,T2,s. ⦃G, L⦄ ⊢ ⋆s ⬈[Rt, c, h] T2 → @@ -129,8 +129,8 @@ elim (cpg_inv_atom1 … H) -H * /3 width=1 by or3_intro0, conj/ ] qed-. -lemma cpg_inv_lref1: ∀Rt,c,h,G,L,T2,i. ⦃G, L⦄ ⊢ #⫯i ⬈[Rt, c, h] T2 → - ∨∨ T2 = #(⫯i) ∧ c = 𝟘𝟘 +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}. #Rt #c #h #G #L #T2 #i #H elim (cpg_inv_atom1 … H) -H * /3 width=1 by or_introl, conj/ @@ -152,7 +152,7 @@ qed-. fact cpg_inv_bind1_aux: ∀Rt,c,h,G,L,U,U2. ⦃G, L⦄ ⊢ U ⬈[Rt, c, h] U2 → ∀p,J,V1,U1. U = ⓑ{p,J}V1.U1 → ∨∨ ∃∃cV,cT,V2,T2. ⦃G, L⦄ ⊢ V1 ⬈[Rt, cV, h] V2 & ⦃G, L.ⓑ{J}V1⦄ ⊢ U1 ⬈[Rt, cT, h] T2 & - U2 = ⓑ{p,J}V2.T2 & c = ((↓cV)∨cT) + U2 = ⓑ{p,J}V2.T2 & c = ((↕*cV)∨cT) | ∃∃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 @@ -174,14 +174,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) + U2 = ⓑ{p,I}V2.T2 & c = ((↕*cV)∨cT) | ∃∃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) + U2 = ⓓ{p}V2.T2 & c = ((↕*cV)∨cT) | ∃∃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 * @@ -190,7 +190,7 @@ qed-. lemma cpg_inv_abst1: ∀Rt,c,h,p,G,L,V1,T1,U2. ⦃G, L⦄ ⊢ ⓛ{p}V1.T1 ⬈[Rt, c, h] U2 → ∃∃cV,cT,V2,T2. ⦃G, L⦄ ⊢ V1 ⬈[Rt, cV, h] V2 & ⦃G, L.ⓛV1⦄ ⊢ T1 ⬈[Rt, cT, h] T2 & - U2 = ⓛ{p}V2.T2 & c = ((↓cV)∨cT). + U2 = ⓛ{p}V2.T2 & c = ((↕*cV)∨cT). #Rt #c #h #p #G #L #V1 #T1 #U2 #H elim (cpg_inv_bind1 … H) -H * [ /3 width=8 by ex4_4_intro/ | #c #T #_ #_ #_ #H destruct @@ -200,11 +200,11 @@ qed-. fact cpg_inv_appl1_aux: ∀Rt,c,h,G,L,U,U2. ⦃G, L⦄ ⊢ U ⬈[Rt, c, h] U2 → ∀V1,U1. U = ⓐV1.U1 → ∨∨ ∃∃cV,cT,V2,T2. ⦃G, L⦄ ⊢ V1 ⬈[Rt, cV, h] V2 & ⦃G, L⦄ ⊢ U1 ⬈[Rt, cT, h] T2 & - U2 = ⓐV2.T2 & c = ((↓cV)∨cT) + 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)+𝟙𝟘 + U1 = ⓛ{p}W1.T1 & U2 = ⓓ{p}ⓝW2.V2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘 | ∃∃cV,cW,cT,p,V,V2,W1,W2,T1,T2. ⦃G, L⦄ ⊢ V1 ⬈[Rt, cV, h] V & ⬆*[1] V ≘ V2 & ⦃G, L⦄ ⊢ W1 ⬈[Rt, cW, h] W2 & ⦃G, L.ⓓW1⦄ ⊢ T1 ⬈[Rt, cT, h] T2 & - U1 = ⓓ{p}W1.T1 & U2 = ⓓ{p}W2.ⓐV2.T2 & c = ((↓cV)∨(↓cW)∨cT)+𝟙𝟘. + U1 = ⓓ{p}W1.T1 & U2 = ⓓ{p}W2.ⓐV2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘. #Rt #c #h #G #L #U #U2 * -c -G -L -U -U2 [ #I #G #L #W #U1 #H destruct | #G #L #s #W #U1 #H destruct @@ -224,11 +224,11 @@ qed-. lemma cpg_inv_appl1: ∀Rt,c,h,G,L,V1,U1,U2. ⦃G, L⦄ ⊢ ⓐV1.U1 ⬈[Rt, c, h] U2 → ∨∨ ∃∃cV,cT,V2,T2. ⦃G, L⦄ ⊢ V1 ⬈[Rt, cV, h] V2 & ⦃G, L⦄ ⊢ U1 ⬈[Rt, cT, h] T2 & - U2 = ⓐV2.T2 & c = ((↓cV)∨cT) + 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)+𝟙𝟘 + U1 = ⓛ{p}W1.T1 & U2 = ⓓ{p}ⓝW2.V2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘 | ∃∃cV,cW,cT,p,V,V2,W1,W2,T1,T2. ⦃G, L⦄ ⊢ V1 ⬈[Rt, cV, h] V & ⬆*[1] V ≘ V2 & ⦃G, L⦄ ⊢ W1 ⬈[Rt, cW, h] W2 & ⦃G, L.ⓓW1⦄ ⊢ T1 ⬈[Rt, cT, h] T2 & - U1 = ⓓ{p}W1.T1 & U2 = ⓓ{p}W2.ⓐV2.T2 & c = ((↓cV)∨(↓cW)∨cT)+𝟙𝟘. + U1 = ⓓ{p}W1.T1 & U2 = ⓓ{p}W2.ⓐV2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘. /2 width=3 by cpg_inv_appl1_aux/ qed-. fact cpg_inv_cast1_aux: ∀Rt,c,h,G,L,U,U2. ⦃G, L⦄ ⊢ U ⬈[Rt, c, h] U2 → @@ -273,8 +273,8 @@ lemma cpg_inv_zero1_pair: ∀Rt,c,h,I,G,K,V1,T2. ⦃G, K.ⓑ{I}V1⦄ ⊢ #0 ⬈[ * #z #Y #X1 #X2 #HX12 #HXT2 #H1 #H2 destruct /3 width=5 by or3_intro1, or3_intro2, ex4_2_intro/ qed-. -lemma cpg_inv_lref1_bind: ∀Rt,c,h,I,G,K,T2,i. ⦃G, K.ⓘ{I}⦄ ⊢ #⫯i ⬈[Rt, c, h] T2 → - ∨∨ T2 = #(⫯i) ∧ c = 𝟘𝟘 +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. #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/ 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 89a8d4132..8b33836a2 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_drops.ma @@ -22,22 +22,22 @@ 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. + ⬆*[↑i] V2 ≘ T2 → ⦃G, L⦄ ⊢ #i ⬈[Rt, c, h] T2. #Rt #c #h #G #K #V #V2 #i elim i -i [ #L #T2 #HLK lapply (drops_fwd_isid … HLK ?) // #H destruct /3 width=3 by cpg_delta/ | #i #IH #L0 #T0 #H0 #HV2 #HVT2 elim (drops_inv_succ … H0) -H0 #I #L #HLK #H destruct - elim (lifts_split_trans … HVT2 (𝐔❴⫯i❵) (𝐔❴1❵) ?) -HVT2 /3 width=3 by cpg_lref/ + elim (lifts_split_trans … HVT2 (𝐔❴↑i❵) (𝐔❴1❵) ?) -HVT2 /3 width=3 by cpg_lref/ ] qed. lemma cpg_ell_drops: ∀Rt,c,h,G,K,V,V2,i,L,T2. ⬇*[i] L ≘ K.ⓛV → ⦃G, K⦄ ⊢ V ⬈[Rt,c, h] V2 → - ⬆*[⫯i] V2 ≘ T2 → ⦃G, L⦄ ⊢ #i ⬈[Rt, c+𝟘𝟙, h] T2. + ⬆*[↑i] V2 ≘ T2 → ⦃G, L⦄ ⊢ #i ⬈[Rt, c+𝟘𝟙, h] T2. #Rt #c #h #G #K #V #V2 #i elim i -i [ #L #T2 #HLK lapply (drops_fwd_isid … HLK ?) // #H destruct /3 width=3 by cpg_ell/ | #i #IH #L0 #T0 #H0 #HV2 #HVT2 elim (drops_inv_succ … H0) -H0 #I #L #HLK #H destruct - elim (lifts_split_trans … HVT2 (𝐔❴⫯i❵) (𝐔❴1❵) ?) -HVT2 /3 width=3 by cpg_lref/ + elim (lifts_split_trans … HVT2 (𝐔❴↑i❵) (𝐔❴1❵) ?) -HVT2 /3 width=3 by cpg_lref/ ] qed. @@ -46,9 +46,9 @@ 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 + ⬆*[↑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 + 𝟘𝟙. + ⬆*[↑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/ @@ -65,9 +65,9 @@ lemma cpg_inv_atom1_drops: ∀Rt,c,h,I,G,L,T2. ⦃G, L⦄ ⊢ ⓪{I} ⬈[Rt, c, ∨∨ 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 + ⬆*[↑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 + 𝟘𝟙. + ⬆*[↑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/ @@ -100,7 +100,7 @@ lemma cpg_lifts_sn: ∀Rt. reflexive … Rt → elim (drops_inv_skip2 … HY) -HY #Z #L0 #HLK0 #HZ #H destruct elim (liftsb_inv_pair_sn … HZ) -HZ #W #HVW #H destruct elim (IH … HV2 … HLK0 … HVW) -IH /2 width=2 by fqup_lref/ -K -K0 -V #W2 #HVW2 #HW2 - elim (lifts_total W2 (𝐔❴⫯i2❵)) #U2 #HWU2 + elim (lifts_total W2 (𝐔❴↑i2❵)) #U2 #HWU2 lapply (lifts_trans … HVW2 … HWU2 ??) -HVW2 [3,6: |*: // ] #HVU2 lapply (lifts_conf … HVT2 … HVU2 f ?) -V2 [1,3: /2 width=3 by after_uni_succ_sn/ ] /4 width=8 by cpg_ell_drops, cpg_delta_drops, drops_inv_gen, ex2_intro/ @@ -118,7 +118,7 @@ lemma cpg_lifts_sn: ∀Rt. reflexive … Rt → | #cT #T2 #HT12 #HXT2 #H1 #H2 #H3 destruct elim (IH … HT12 … HTU1) -IH -HT12 -HTU1 [ |*: /3 width=3 by drops_skip, ext2_pair/ ] #U2 #HTU2 #HU12 lapply (lifts_trans … HXT2 … HTU2 ??) -T2 [3: |*: // ] #HXU2 - elim (lifts_split_trans … HXU2 f (𝐔❴⫯O❵)) [2: /2 width=1 by after_uni_one_dx/ ] + elim (lifts_split_trans … HXU2 f (𝐔❴↑O❵)) [2: /2 width=1 by after_uni_one_dx/ ] /3 width=5 by cpg_zeta, ex2_intro/ ] | * #V1 #T1 #HG #HK #HT #c #X2 #H2 #b #f #L #HLK #X1 #H1 destruct @@ -141,7 +141,7 @@ lemma cpg_lifts_sn: ∀Rt. reflexive … Rt → elim (IH … HT12 … HTU1) -IH -HT12 -HTU1 [ |*: /3 width=3 by drops_skip, ext2_pair/ ] elim (lifts_total W2 (𝐔❴1❵)) #W20 #HW20 lapply (lifts_trans … HVW2 … HW20 ??) -HVW2 [3: |*: // ] #H - lapply (lifts_conf … HV20 … H (↑f) ?) -V2 /2 width=3 by after_uni_one_sn/ + lapply (lifts_conf … HV20 … H (⫯f) ?) -V2 /2 width=3 by after_uni_one_sn/ /4 width=9 by cpg_theta, lifts_bind, lifts_flat, ex2_intro/ ] | elim (cpg_inv_cast1 … H2) -H2 * @@ -222,7 +222,7 @@ lemma cpg_inv_lifts_sn: ∀Rt. reflexive … Rt → elim (IH … HZ12 … HLK … HYZ1) -HZ12 // elim (IH … HU12 … HTU1) -IH -HU12 -HTU1 [ |*: /3 width=3 by drops_skip, ext2_pair/ ] lapply (lifts_trans … HVW2 … HW20 ??) -W2 [3: |*: // ] #H - elim (lifts_split_trans … H ? (↑f)) -H [ |*: /2 width=3 by after_uni_one_sn/ ] + elim (lifts_split_trans … H ? (⫯f)) -H [ |*: /2 width=3 by after_uni_one_sn/ ] /4 width=9 by cpg_theta, lifts_bind, lifts_flat, ex2_intro/ ] | elim (cpg_inv_cast1 … H2) -H2 * diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_simple.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_simple.ma index 506386e42..ee36acaac 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_simple.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpg_simple.ma @@ -22,7 +22,7 @@ include "basic_2/rt_transition/cpg.ma". (* Note: the main property of simple terms *) lemma cpg_inv_appl1_simple: ∀Rt,c,h,G,L,V1,T1,U. ⦃G, L⦄ ⊢ ⓐV1.T1 ⬈[Rt, c, h] U → 𝐒⦃T1⦄ → ∃∃cV,cT,V2,T2. ⦃G, L⦄ ⊢ V1 ⬈[Rt, cV, h] V2 & ⦃G, L⦄ ⊢ T1 ⬈[Rt, cT, h] T2 & - U = ⓐV2.T2 & c = ((↓cV)∨cT). + U = ⓐV2.T2 & c = ((↕*cV)∨cT). #Rt #c #h #G #L #V1 #T1 #U #H #HT1 elim (cpg_inv_appl1 … H) -H * [ /2 width=8 by ex4_4_intro/ | #cV #cW #cT #p #V2 #W1 #W2 #U1 #U2 #_ #_ #_ #H destruct 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 61badb90a..81f381bf5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpm.ma @@ -42,13 +42,13 @@ lemma cpm_delta: ∀n,h,G,K,V1,V2,W2. ⦃G, K⦄ ⊢ V1 ➡[n, h] V2 → 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. @@ -88,7 +88,7 @@ lemma cpm_eps: ∀n,h,G,L,V,T1,T2. ⦃G, L⦄ ⊢ T1 ➡[n, h] T2 → ⦃G, L⦄ /3 width=3 by cpg_eps, isrt_plus_O2, ex2_intro/ qed. -lemma cpm_ee: ∀n,h,G,L,V1,V2,T. ⦃G, L⦄ ⊢ V1 ➡[n, h] V2 → ⦃G, L⦄ ⊢ ⓝV1.T ➡[⫯n, h] V2. +lemma cpm_ee: ∀n,h,G,L,V1,V2,T. ⦃G, L⦄ ⊢ V1 ➡[n, h] V2 → ⦃G, L⦄ ⊢ ⓝV1.T ➡[↑n, h] V2. #n #h #G #L #V1 #V2 #T * /3 width=3 by cpg_ee, isrt_succ, ex2_intro/ qed. @@ -125,9 +125,9 @@ lemma cpm_inv_atom1: ∀n,h,J,G,L,T2. ⦃G, L⦄ ⊢ ⓪{J} ➡[n, h] 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 & - L = K.ⓛV1 & J = LRef 0 & n = ⫯k + L = K.ⓛV1 & J = LRef 0 & n = ↑k | ∃∃I,K,T,i. ⦃G, K⦄ ⊢ #i ➡[n, h] T & ⬆*[1] T ≘ T2 & - L = K.ⓘ{I} & J = LRef (⫯i). + L = K.ⓘ{I} & J = LRef (↑i). #n #h #J #G #L #T2 * #c #Hc #H elim (cpg_inv_atom1 … H) -H * [ #H1 #H2 destruct /4 width=1 by isrt_inv_00, or5_intro0, conj/ | #s #H1 #H2 #H3 destruct /4 width=3 by isrt_inv_01, or5_intro1, ex3_intro/ @@ -154,7 +154,7 @@ lemma cpm_inv_zero1: ∀n,h,G,L,T2. ⦃G, L⦄ ⊢ #0 ➡[n, h] 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 & - L = K.ⓛV1 & n = ⫯k. + 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/ | #cV #K #V1 #V2 #HV12 #HVT2 #H1 #H2 destruct @@ -165,8 +165,8 @@ lemma cpm_inv_zero1: ∀n,h,G,L,T2. ⦃G, L⦄ ⊢ #0 ➡[n, h] T2 → ] qed-. -lemma cpm_inv_lref1: ∀n,h,G,L,T2,i. ⦃G, L⦄ ⊢ #⫯i ➡[n, h] T2 → - ∨∨ T2 = #(⫯i) ∧ n = 0 +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}. #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/ @@ -261,7 +261,7 @@ lemma cpm_inv_cast1: ∀n,h,G,L,V1,U1,U2. ⦃G, L⦄ ⊢ ⓝV1.U1 ➡[n, h] U2 ∨∨ ∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ➡[n, h] V2 & ⦃G, L⦄ ⊢ U1 ➡[n, h] T2 & U2 = ⓝV2.T2 | ⦃G, L⦄ ⊢ U1 ➡[n, h] U2 - | ∃∃k. ⦃G, L⦄ ⊢ V1 ➡[k, h] U2 & n = ⫯k. + | ∃∃k. ⦃G, L⦄ ⊢ V1 ➡[k, h] U2 & n = ↑k. #n #h #G #L #V1 #U1 #U2 * #c #Hc #H elim (cpg_inv_cast1 … H) -H * [ #cV #cT #V2 #T2 #HV12 #HT12 #HcVT #H1 #H2 destruct elim (isrt_inv_max … Hc) -Hc #nV #nT #HcV #HcT #H destruct 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 cafb6a0e3..4f04adc8f 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 @@ -23,14 +23,14 @@ include "basic_2/rt_transition/cpm.ma". (* 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] 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] 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. @@ -41,9 +41,9 @@ 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 + ⬆*[↑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. + ⬆*[↑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/ @@ -60,9 +60,9 @@ 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 + ⬆*[↑i] V2 ≘ T2 | ∃∃m,K,V,V2. ⬇*[i] L ≘ K. ⓛV & ⦃G, K⦄ ⊢ V ➡[m, h] V2 & - ⬆*[⫯i] V2 ≘ T2 & n = ⫯m. + ⬆*[↑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 30fc36b59..042e814cd 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpr.ma @@ -39,7 +39,7 @@ lemma cpr_inv_atom1: ∀h,J,G,L,T2. ⦃G, L⦄ ⊢ ⓪{J} ➡[h] 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 & - L = K.ⓘ{I} & J = LRef (⫯i). + 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/ #n #_ #_ #H destruct @@ -59,8 +59,8 @@ lemma cpr_inv_zero1: ∀h,G,L,T2. ⦃G, L⦄ ⊢ #0 ➡[h] T2 → #n #K #V1 #V2 #_ #_ #_ #H destruct qed-. -lemma cpr_inv_lref1: ∀h,G,L,T2,i. ⦃G, L⦄ ⊢ #⫯i ➡[h] T2 → - ∨∨ T2 = #(⫯i) +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}. #h #G #L #T2 #i #H elim (cpm_inv_lref1 … H) -H * /3 width=6 by ex3_3_intro, or_introl, or_intror/ 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 30d274be3..ba96c07fb 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 @@ -22,7 +22,7 @@ include "basic_2/rt_transition/cpm_drops.ma". 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. + ⬆*[↑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 @@ -36,7 +36,7 @@ qed-. 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. + ⬆*[↑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 3df213a4f..64d2c2128 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx.ma @@ -37,7 +37,7 @@ lemma cpx_delta: ∀h,I,G,K,V1,V2,W2. ⦃G, K⦄ ⊢ V1 ⬈[h] V2 → 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. @@ -107,7 +107,7 @@ lemma cpx_inv_atom1: ∀h,J,G,L,T2. ⦃G, L⦄ ⊢ ⓪{J} ⬈[h] 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 & - L = K.ⓘ{I} & J = LRef (⫯i). + L = K.ⓘ{I} & J = LRef (↑i). #h #J #G #L #T2 * #c #H elim (cpg_inv_atom1 … H) -H * /4 width=8 by or4_intro0, or4_intro1, or4_intro2, or4_intro3, ex4_4_intro, ex2_intro, ex_intro/ qed-. @@ -126,8 +126,8 @@ lemma cpx_inv_zero1: ∀h,G,L,T2. ⦃G, L⦄ ⊢ #0 ⬈[h] T2 → /4 width=7 by ex3_4_intro, ex_intro, or_introl, or_intror/ qed-. -lemma cpx_inv_lref1: ∀h,G,L,T2,i. ⦃G, L⦄ ⊢ #⫯i ⬈[h] T2 → - ∨∨ T2 = #(⫯i) +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}. #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/ @@ -192,8 +192,8 @@ lemma cpx_inv_zero1_pair: ∀h,I,G,K,V1,T2. ⦃G, K.ⓑ{I}V1⦄ ⊢ #0 ⬈[h] T2 /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) +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. #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/ @@ -237,7 +237,7 @@ lemma cpx_ind: ∀h. ∀R:relation4 genv lenv term term. (∀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 ) → (∀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 → 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 78f28e9b1..49b2f29d5 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/cpx_drops.ma @@ -22,7 +22,7 @@ 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] 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. @@ -34,7 +34,7 @@ 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. + ⬆*[↑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-. @@ -43,7 +43,7 @@ qed-. 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. + ⬆*[↑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/lfpr.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lfpr.ma index 92ff748bd..072675fba 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lfpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lfpr.ma @@ -39,7 +39,7 @@ lemma lfpr_pair: ∀h,I,G,L1,L2,V1,V2. ⦃G, L1⦄ ⊢ ➡[h, V1] L2 → /2 width=1 by lfxs_pair/ qed. lemma lfpr_lref: ∀h,I1,I2,G,L1,L2,i. - ⦃G, L1⦄ ⊢ ➡[h, #i] L2 → ⦃G, L1.ⓘ{I1}⦄ ⊢ ➡[h, #⫯i] L2.ⓘ{I2}. + ⦃G, L1⦄ ⊢ ➡[h, #i] L2 → ⦃G, L1.ⓘ{I1}⦄ ⊢ ➡[h, #↑i] L2.ⓘ{I2}. /2 width=1 by lfxs_lref/ qed. lemma lfpr_gref: ∀h,I1,I2,G,L1,L2,l. @@ -75,7 +75,7 @@ lemma lfpr_inv_zero: ∀h,G,Y1,Y2. ⦃G, Y1⦄ ⊢ ➡[h, #0] Y2 → Y1 = L1.ⓑ{I}V1 & Y2 = L2.ⓑ{I}V2. /2 width=1 by lfxs_inv_zero/ qed-. *) -lemma lfpr_inv_lref: ∀h,G,Y1,Y2,i. ⦃G, Y1⦄ ⊢ ➡[h, #⫯i] Y2 → +lemma lfpr_inv_lref: ∀h,G,Y1,Y2,i. ⦃G, Y1⦄ ⊢ ➡[h, #↑i] Y2 → ∨∨ Y1 = ⋆ ∧ Y2 = ⋆ | ∃∃I1,I2,L1,L2. ⦃G, L1⦄ ⊢ ➡[h, #i] L2 & Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}. @@ -115,11 +115,11 @@ lemma lfpr_inv_zero_pair_dx: ∀h,I,G,Y1,L2,V2. ⦃G, Y1⦄ ⊢ ➡[h, #0] L2. Y1 = L1.ⓑ{I}V1. /2 width=1 by lfxs_inv_zero_pair_dx/ qed-. -lemma lfpr_inv_lref_bind_sn: ∀h,I1,G,Y2,L1,i. ⦃G, L1.ⓘ{I1}⦄ ⊢ ➡[h, #⫯i] Y2 → +lemma lfpr_inv_lref_bind_sn: ∀h,I1,G,Y2,L1,i. ⦃G, L1.ⓘ{I1}⦄ ⊢ ➡[h, #↑i] Y2 → ∃∃I2,L2. ⦃G, L1⦄ ⊢ ➡[h, #i] L2 & Y2 = L2.ⓘ{I2}. /2 width=2 by lfxs_inv_lref_bind_sn/ qed-. -lemma lfpr_inv_lref_bind_dx: ∀h,I2,G,Y1,L2,i. ⦃G, Y1⦄ ⊢ ➡[h, #⫯i] L2.ⓘ{I2} → +lemma lfpr_inv_lref_bind_dx: ∀h,I2,G,Y1,L2,i. ⦃G, Y1⦄ ⊢ ➡[h, #↑i] L2.ⓘ{I2} → ∃∃I1,L1. ⦃G, L1⦄ ⊢ ➡[h, #i] L2 & Y1 = L1.ⓘ{I1}. /2 width=2 by lfxs_inv_lref_bind_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 2e0e4aa7a..498ecdb3b 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 @@ -35,7 +35,7 @@ fact cpr_conf_lfpr_atom_delta: ∃∃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 → + ∀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 @@ -57,9 +57,9 @@ fact cpr_conf_lfpr_delta_delta: ∃∃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 → + ∀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 → + ∀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 diff --git a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lfpx.ma b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lfpx.ma index 910324e69..68aed2bfb 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lfpx.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/rt_transition/lfpx.ma @@ -39,7 +39,7 @@ lemma lfpx_pair: ∀h,I,G,L1,L2,V1,V2. /2 width=1 by lfxs_pair/ qed. lemma lfpx_lref: ∀h,I1,I2,G,L1,L2,i. - ⦃G, L1⦄ ⊢ ⬈[h, #i] L2 → ⦃G, L1.ⓘ{I1}⦄ ⊢ ⬈[h, #⫯i] L2.ⓘ{I2}. + ⦃G, L1⦄ ⊢ ⬈[h, #i] L2 → ⦃G, L1.ⓘ{I1}⦄ ⊢ ⬈[h, #↑i] L2.ⓘ{I2}. /2 width=1 by lfxs_lref/ qed. lemma lfpx_gref: ∀h,I1,I2,G,L1,L2,l. @@ -68,7 +68,7 @@ lemma lfpx_inv_sort: ∀h,G,Y1,Y2,s. ⦃G, Y1⦄ ⊢ ⬈[h, ⋆s] Y2 → Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}. /2 width=1 by lfxs_inv_sort/ qed-. -lemma lfpx_inv_lref: ∀h,G,Y1,Y2,i. ⦃G, Y1⦄ ⊢ ⬈[h, #⫯i] Y2 → +lemma lfpx_inv_lref: ∀h,G,Y1,Y2,i. ⦃G, Y1⦄ ⊢ ⬈[h, #↑i] Y2 → ∨∨ Y1 = ⋆ ∧ Y2 = ⋆ | ∃∃I1,I2,L1,L2. ⦃G, L1⦄ ⊢ ⬈[h, #i] L2 & Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}. @@ -108,11 +108,11 @@ lemma lfpx_inv_zero_pair_dx: ∀h,I,G,Y1,L2,V2. ⦃G, Y1⦄ ⊢ ⬈[h, #0] L2. Y1 = L1.ⓑ{I}V1. /2 width=1 by lfxs_inv_zero_pair_dx/ qed-. -lemma lfpx_inv_lref_bind_sn: ∀h,I1,G,Y2,L1,i. ⦃G, L1.ⓘ{I1}⦄ ⊢ ⬈[h, #⫯i] Y2 → +lemma lfpx_inv_lref_bind_sn: ∀h,I1,G,Y2,L1,i. ⦃G, L1.ⓘ{I1}⦄ ⊢ ⬈[h, #↑i] Y2 → ∃∃I2,L2. ⦃G, L1⦄ ⊢ ⬈[h, #i] L2 & Y2 = L2.ⓘ{I2}. /2 width=2 by lfxs_inv_lref_bind_sn/ qed-. -lemma lfpx_inv_lref_bind_dx: ∀h,I2,G,Y1,L2,i. ⦃G, Y1⦄ ⊢ ⬈[h, #⫯i] L2.ⓘ{I2} → +lemma lfpx_inv_lref_bind_dx: ∀h,I2,G,Y1,L2,i. ⦃G, Y1⦄ ⊢ ⬈[h, #↑i] L2.ⓘ{I2} → ∃∃I1,L1. ⦃G, L1⦄ ⊢ ⬈[h, #i] L2 & Y1 = L1.ⓘ{I1}. /2 width=2 by lfxs_inv_lref_bind_dx/ 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 fbcca9516..f2db58c83 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 @@ -27,7 +27,7 @@ lemma fqup_drops_succ: ∀b,G,K,T,i,L,U. ⬇*[⫯i] L ≘ K → ⬆*[⫯i] T ≘ /3 width=2 by fqu_fqup, fqu_drop/ | #l #IH #L #U #HLK #HTU elim (drops_inv_succ … HLK) -HLK #I #Y #HY #H destruct - elim (lifts_split_trans … HTU … (𝐔❴⫯l❵) (𝐔❴1❵)) -HTU + elim (lifts_split_trans … HTU … (𝐔❴↑l❵) (𝐔❴1❵)) -HTU /4 width=5 by fqup_strap2, fqu_drop/ ] qed. 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 40d4124a5..5cc34a456 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/s_computation/fqus.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/s_computation/fqus.ma @@ -81,7 +81,7 @@ qed-. lemma fqus_inv_lref1: ∀b,G1,G2,L1,L2,T2,i. ⦃G1, L1, #i⦄ ⊐*[b] ⦃G2, L2, T2⦄ → ∨∨ ∧∧ G1 = G2 & L1 = L2 & #i = T2 | ∃∃J,L,V. ⦃G1, L, V⦄ ⊐*[b] ⦃G2, L2, T2⦄ & L1 = L.ⓑ{J}V & i = 0 - | ∃∃J,L,j. ⦃G1, L, #j⦄ ⊐*[b] ⦃G2, L2, T2⦄ & L1 = L.ⓘ{J} & i = ⫯j. + | ∃∃J,L,j. ⦃G1, L, #j⦄ ⊐*[b] ⦃G2, L2, T2⦄ & L1 = L.ⓘ{J} & i = ↑j. #b #G1 #G2 #L1 #L2 #T2 #i #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or3_intro0/ #G #L #T #H elim (fqu_inv_lref1 … H) -H * /3 width=7 by or3_intro1, or3_intro2, ex3_4_intro, ex3_3_intro/ qed-. @@ -149,8 +149,8 @@ lemma fqus_inv_zero1_pair: ∀b,I,G1,G2,L1,L2,V1,T2. ⦃G1, L1.ⓑ{I}V1, #0⦄ #H1 #H2 #H3 #H destruct /2 width=1 by or_intror/ qed-. -lemma fqus_inv_lref1_bind: ∀b,I,G1,G2,L1,L2,T2,i. ⦃G1, L1.ⓘ{I}, #⫯i⦄ ⊐*[b] ⦃G2, L2, T2⦄ → - (∧∧ G1 = G2 & L1.ⓘ{I} = L2 & #(⫯i) = T2) ∨ ⦃G1, L1, #i⦄ ⊐*[b] ⦃G2, L2, T2⦄. +lemma fqus_inv_lref1_bind: ∀b,I,G1,G2,L1,L2,T2,i. ⦃G1, L1.ⓘ{I}, #↑i⦄ ⊐*[b] ⦃G2, L2, T2⦄ → + (∧∧ G1 = G2 & L1.ⓘ{I} = L2 & #(↑i) = T2) ∨ ⦃G1, L1, #i⦄ ⊐*[b] ⦃G2, L2, T2⦄. #b #I #G1 #G2 #L1 #L2 #T2 #i #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/ #G #L #T #H elim (fqu_inv_lref1_bind … H) -H #H1 #H2 #H3 #H destruct /2 width=1 by or_intror/ 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 85ddd67c7..0377df1a1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/s_transition/fqu.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/s_transition/fqu.ma @@ -47,7 +47,7 @@ interpretation lemma fqu_sort: ∀b,I,G,L,s. ⦃G, L.ⓘ{I}, ⋆s⦄ ⊐[b] ⦃G, L, ⋆s⦄. /2 width=1 by fqu_drop/ qed. -lemma fqu_lref_S: ∀b,I,G,L,i. ⦃G, L.ⓘ{I}, #⫯i⦄ ⊐[b] ⦃G, L, #i⦄. +lemma fqu_lref_S: ∀b,I,G,L,i. ⦃G, L.ⓘ{I}, #↑i⦄ ⊐[b] ⦃G, L, #i⦄. /2 width=1 by fqu_drop/ qed. lemma fqu_gref: ∀b,I,G,L,l. ⦃G, L.ⓘ{I}, §l⦄ ⊐[b] ⦃G, L, §l⦄. @@ -76,7 +76,7 @@ lemma fqu_inv_sort1: ∀b,G1,G2,L1,L2,T2,s. ⦃G1, L1, ⋆s⦄ ⊐[b] ⦃G2, L2, fact fqu_inv_lref1_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐[b] ⦃G2, L2, T2⦄ → ∀i. T1 = #i → (∃∃J,V. G1 = G2 & L1 = L2.ⓑ{J}V & T2 = V & i = 0) ∨ - ∃∃J,j. G1 = G2 & L1 = L2.ⓘ{J} & T2 = #j & i = ⫯j. + ∃∃J,j. G1 = G2 & L1 = L2.ⓘ{J} & T2 = #j & i = ↑j. #b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2 [ #I #G #L #T #i #H destruct /3 width=4 by ex4_2_intro, or_introl/ | #I #G #L #V #T #i #H destruct @@ -90,7 +90,7 @@ qed-. lemma fqu_inv_lref1: ∀b,G1,G2,L1,L2,T2,i. ⦃G1, L1, #i⦄ ⊐[b] ⦃G2, L2, T2⦄ → (∃∃J,V. G1 = G2 & L1 = L2.ⓑ{J}V & T2 = V & i = 0) ∨ - ∃∃J,j. G1 = G2 & L1 = L2.ⓘ{J} & T2 = #j & i = ⫯j. + ∃∃J,j. G1 = G2 & L1 = L2.ⓘ{J} & T2 = #j & i = ↑j. /2 width=4 by fqu_inv_lref1_aux/ qed-. fact fqu_inv_gref1_aux: ∀b,G1,G2,L1,L2,T1,T2. ⦃G1, L1, T1⦄ ⊐[b] ⦃G2, L2, T2⦄ → @@ -184,7 +184,7 @@ lemma fqu_inv_zero1_pair: ∀b,I,G1,G2,K,L2,V,T2. ⦃G1, K.ⓑ{I}V, #0⦄ ⊐[b] #Z #X #H1 #H2 #H3 #H4 destruct /2 width=1 by and3_intro/ qed-. -lemma fqu_inv_lref1_bind: ∀b,I,G1,G2,K,L2,T2,i. ⦃G1, K.ⓘ{I}, #(⫯i)⦄ ⊐[b] ⦃G2, L2, T2⦄ → +lemma fqu_inv_lref1_bind: ∀b,I,G1,G2,K,L2,T2,i. ⦃G1, K.ⓘ{I}, #(↑i)⦄ ⊐[b] ⦃G2, L2, T2⦄ → ∧∧ G1 = G2 & L2 = K & T2 = #i. #b #I #G1 #G2 #K #L2 #T2 #i #H elim (fqu_inv_lref1 … H) -H * #Z #X #H1 #H2 #H3 #H4 destruct /2 width=1 by and3_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/static/aaa.ma index c119905ce..6ea5a39c4 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/aaa.ma @@ -23,7 +23,7 @@ include "basic_2/syntax/genv.ma". inductive aaa: relation4 genv lenv term aarity ≝ | aaa_sort: ∀G,L,s. aaa G L (⋆s) (⓪) | aaa_zero: ∀I,G,L,V,B. aaa G L V B → aaa G (L.ⓑ{I}V) (#0) B -| aaa_lref: ∀I,G,L,A,i. aaa G L (#i) A → aaa G (L.ⓘ{I}) (#⫯i) A +| aaa_lref: ∀I,G,L,A,i. aaa G L (#i) A → aaa G (L.ⓘ{I}) (#↑i) A | aaa_abbr: ∀p,G,L,V,T,B,A. aaa G L V B → aaa G (L.ⓓV) T A → aaa G L (ⓓ{p}V.T) A | aaa_abst: ∀p,G,L,V,T,B,A. @@ -67,7 +67,7 @@ lemma aaa_inv_zero: ∀G,L,A. ⦃G, L⦄ ⊢ #0 ⁝ A → ∃∃I,K,V. L = K.ⓑ{I}V & ⦃G, K⦄ ⊢ V ⁝ A. /2 width=3 by aaa_inv_zero_aux/ qed-. -fact aaa_inv_lref_aux: ∀G,L,T,A. ⦃G, L⦄ ⊢ T ⁝ A → ∀i. T = #(⫯i) → +fact aaa_inv_lref_aux: ∀G,L,T,A. ⦃G, L⦄ ⊢ T ⁝ A → ∀i. T = #(↑i) → ∃∃I,K. L = K.ⓘ{I} & ⦃G, K⦄ ⊢ #i ⁝ A. #G #L #T #A * -G -L -T -A [ #G #L #s #j #H destruct @@ -80,7 +80,7 @@ fact aaa_inv_lref_aux: ∀G,L,T,A. ⦃G, L⦄ ⊢ T ⁝ A → ∀i. T = #(⫯i) ] qed-. -lemma aaa_inv_lref: ∀G,L,A,i. ⦃G, L⦄ ⊢ #⫯i ⁝ A → +lemma aaa_inv_lref: ∀G,L,A,i. ⦃G, L⦄ ⊢ #↑i ⁝ A → ∃∃I,K. L = K.ⓘ{I} & ⦃G, K⦄ ⊢ #i ⁝ A. /2 width=3 by aaa_inv_lref_aux/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/frees.ma b/matita/matita/contribs/lambdadelta/basic_2/static/frees.ma index 12cf98187..b35ea99b8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/frees.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/frees.ma @@ -20,12 +20,12 @@ include "basic_2/syntax/lenv.ma". inductive frees: relation3 lenv term rtmap ≝ | frees_sort: ∀f,L,s. 𝐈⦃f⦄ → frees L (⋆s) f -| frees_atom: ∀f,i. 𝐈⦃f⦄ → frees (⋆) (#i) (↑*[i]⫯f) +| frees_atom: ∀f,i. 𝐈⦃f⦄ → frees (⋆) (#i) (⫯*[i]↑f) | frees_pair: ∀f,I,L,V. frees L V f → - frees (L.ⓑ{I}V) (#0) (⫯f) -| frees_unit: ∀f,I,L. 𝐈⦃f⦄ → frees (L.ⓤ{I}) (#0) (⫯f) + frees (L.ⓑ{I}V) (#0) (↑f) +| frees_unit: ∀f,I,L. 𝐈⦃f⦄ → frees (L.ⓤ{I}) (#0) (↑f) | frees_lref: ∀f,I,L,i. frees L (#i) f → - frees (L.ⓘ{I}) (#⫯i) (↑f) + frees (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 @@ -54,7 +54,7 @@ lemma frees_inv_sort: ∀f,L,s. L ⊢ 𝐅*⦃⋆s⦄ ≘ f → 𝐈⦃f⦄. /2 width=5 by frees_inv_sort_aux/ qed-. fact frees_inv_atom_aux: ∀f,L,X. L ⊢ 𝐅*⦃X⦄ ≘ f → ∀i. L = ⋆ → X = #i → - ∃∃g. 𝐈⦃g⦄ & f = ↑*[i]⫯g. + ∃∃g. 𝐈⦃g⦄ & f = ⫯*[i]↑g. #f #L #X #H elim H -f -L -X [ #f #L #s #_ #j #_ #H destruct | #f #i #Hf #j #_ #H destruct /2 width=3 by ex2_intro/ @@ -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. + ∃∃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,11 +84,11 @@ 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 → - ∃∃g. 𝐈⦃g⦄ & f = ⫯g. + ∃∃g. 𝐈⦃g⦄ & f = ↑g. #f #L #X * -f -L -X [ #f #L #s #_ #Z #Y #_ #H destruct | #f #i #_ #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,8 +118,8 @@ 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⦄. @@ -199,7 +199,7 @@ 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/ 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 59c6b3ff4..75e693912 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/frees_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/frees_drops.ma @@ -21,7 +21,7 @@ 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. + ∀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 @@ -30,7 +30,7 @@ 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. + ∀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/ @@ -38,7 +38,7 @@ lemma frees_pair_drops: ∀f,K,V. K ⊢ 𝐅*⦃V⦄ ≘ f → qed. lemma frees_unit_drops: ∀f. 𝐈⦃f⦄ → ∀I,K,i,L. ⬇*[i] L ≘ K.ⓤ{I} → - L ⊢ 𝐅*⦃#i⦄ ≘ ↑*[i] ⫯f. + 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 @@ -47,7 +47,7 @@ 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. + ∀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/ @@ -55,7 +55,7 @@ lemma frees_sort_pushs: ∀f,K,s. K ⊢ 𝐅*⦃⋆s⦄ ≘ f → qed. *) lemma frees_lref_pushs: ∀f,K,j. K ⊢ 𝐅*⦃#j⦄ ≘ f → - ∀i,L. ⬇*[i] L ≘ K → L ⊢ 𝐅*⦃#(i+j)⦄ ≘ ↑*[i] 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 @@ -64,7 +64,7 @@ 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. + ∀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/ @@ -74,10 +74,10 @@ qed. (* Advanced inversion lemmas ************************************************) lemma frees_inv_lref_drops: ∀L,i,f. L ⊢ 𝐅*⦃#i⦄ ≘ f → - ∨∨ ∃∃g. ⬇*[Ⓕ, 𝐔❴i❵] L ≘ ⋆ & 𝐈⦃g⦄ & f = ↑*[i] ⫯g + ∨∨ ∃∃g. ⬇*[Ⓕ, 𝐔❴i❵] 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. + ⬇*[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 @@ -155,7 +155,7 @@ 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. + ∀f. K ⊢ 𝐅*⦃T⦄ ≘ f → L ⊢ 𝐅*⦃U⦄ ≘ ⫯f. #b #L #K #HLK #T #U #HTU #f #Hf @(frees_lifts b … Hf … HTU) // (**) (* auto fails *) qed. @@ -194,7 +194,7 @@ 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 → - ∀g1. ⫯g1 = ⫱*[n] f1 → + ∀g1. ↑g1 = ⫱*[n] f1 → ∃∃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 diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/frees_fqup.ma b/matita/matita/contribs/lambdadelta/basic_2/static/frees_fqup.ma index 8946c6e4a..fab29bbe6 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/frees_fqup.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/frees_fqup.ma @@ -70,7 +70,7 @@ elim (pn_split f2) * #g2 #H destruct lapply (sor_comm … Hz) -Hz #Hz lapply (sor_mono … f Hz ?) // -Hz #H lapply (sor_inv_sle_sn … Hf) -Hf #Hf - lapply (frees_eq_repl_back … Hf0 (⫯f) ?) /2 width=5 by eq_next/ -z #Hf0 + lapply (frees_eq_repl_back … Hf0 (↑f) ?) /2 width=5 by eq_next/ -z #Hf0 @(frees_bind … Hf1 Hf0) -Hf1 -Hf0 (**) (* constructor needed *) /2 width=1 by sor_sle_dx/ ] @@ -104,15 +104,15 @@ lemma frees_ind_void: ∀R:relation3 …. ( ∀f,L,s. 𝐈⦃f⦄ → R L (⋆s) f ) → ( - ∀f,i. 𝐈⦃f⦄ → R (⋆) (#i) (↑*[i]⫯f) + ∀f,i. 𝐈⦃f⦄ → R (⋆) (#i) (⫯*[i]↑f) ) → ( ∀f,I,L,V. - L ⊢ 𝐅*⦃V⦄ ≘ f → R L V f→ R (L.ⓑ{I}V) (#O) (⫯f) + L ⊢ 𝐅*⦃V⦄ ≘ f → R L V f→ R (L.ⓑ{I}V) (#O) (↑f) ) → ( - ∀f,I,L. 𝐈⦃f⦄ → R (L.ⓤ{I}) (#O) (⫯f) + ∀f,I,L. 𝐈⦃f⦄ → R (L.ⓤ{I}) (#O) (↑f) ) → ( ∀f,I,L,i. - L ⊢ 𝐅*⦃#i⦄ ≘ f → R L (#i) f → R (L.ⓘ{I}) (#(⫯i)) (↑f) + L ⊢ 𝐅*⦃#i⦄ ≘ f → R L (#i) f → R (L.ⓘ{I}) (#(↑i)) (⫯f) ) → ( ∀f,L,l. 𝐈⦃f⦄ → R L (§l) f ) → ( diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/frees_frees.ma b/matita/matita/contribs/lambdadelta/basic_2/static/frees_frees.ma index a826bbd08..17e1f983d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/frees_frees.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/frees_frees.ma @@ -18,7 +18,7 @@ include "basic_2/static/frees.ma". (* Main inversion lemmas ****************************************************) -theorem frees_mono: ∀f1,L,T. L ⊢ 𝐅*⦃T⦄ ≘ f1 → ∀f2. L ⊢ 𝐅*⦃T⦄ ≘ f2 → f1 ≗ f2. +theorem frees_mono: ∀f1,L,T. L ⊢ 𝐅*⦃T⦄ ≘ f1 → ∀f2. L ⊢ 𝐅*⦃T⦄ ≘ f2 → f1 ≡ f2. #f1 #L #T #H elim H -f1 -L -T [ /3 width=3 by frees_inv_sort, isid_inv_eq_repl/ | #f1 #i #Hf1 #g2 #H diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/gcp_aaa.ma b/matita/matita/contribs/lambdadelta/basic_2/static/gcp_aaa.ma index 0f001a767..d8768fcf8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/gcp_aaa.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/gcp_aaa.ma @@ -41,7 +41,7 @@ theorem acr_aaa_csubc_lifts: ∀RR,RS,RP. lapply (drops_tls_at … Hf … HY) -Hf -HY #HY elim (drops_inv_skip2 … HY) -HY #Z #K0 #HK01 #HZ #H destruct elim (liftsb_inv_pair_sn … HZ) -HZ #V0 #HV10 #H destruct - elim (lifts_total V0 (𝐔❴⫯j❵)) #V #HV0 + elim (lifts_total V0 (𝐔❴↑j❵)) #V #HV0 elim (lsubc_drops_trans_isuni … HL20 … HLK0) -HL20 -HLK0 // #Y #HLK2 #H elim (lsubc_inv_bind2 … H) -H * [ #K2 #HK20 #H destruct @@ -52,7 +52,7 @@ theorem acr_aaa_csubc_lifts: ∀RR,RS,RP. lapply (drops_isuni_fwd_drop2 … HLK2) // #HLK2b lapply (aaa_lifts … HKV1 … HK01 … HV10) -HKV1 -HK01 -HV10 #HKV0A lapply (aaa_mono … HKV0B … HKV0A) #H destruct -HKV0B -HKV0A - elim (lifts_total V2 (𝐔❴⫯j❵)) #V3 #HV23 + elim (lifts_total V2 (𝐔❴↑j❵)) #V3 #HV23 lapply (s5 … HA … G … (◊) … (ⓝW2.V2) (ⓝV.V3) ????) [3: |*: /2 width=9 by drops_inv_gen, lifts_flat/ ] -HLK2 lapply (s7 … HA G L2 (◊)) -HA /3 width=7 by acr_lifts/ @@ -74,7 +74,7 @@ theorem acr_aaa_csubc_lifts: ∀RR,RS,RP. elim (drops_lsubc_trans … H1RP … HL32 … HL20) -L2 #L2 #HL32 #HL20 lapply (aaa_lifts … HW … (f3∘f) L2 … W3 ?) -HW [4: |*: /2 width=8 by drops_trans, lifts_trans/ ] #HW3 - @(IH … ((↑f3)∘↑f) … (L2. ⓛW3)) -IH + @(IH … ((⫯f3)∘⫯f) … (L2. ⓛW3)) -IH /4 width=12 by lsubc_beta, drops_trans, drops_skip, lifts_trans, ext2_pair/ | #V #T #HG #HL #HT #A #HA #b #f #L0 #HL01 #X0 #H0 #L2 #HL20 destruct elim (aaa_inv_appl … HA) -HA #B #HV #HT diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/gcp_cr.ma b/matita/matita/contribs/lambdadelta/basic_2/static/gcp_cr.ma index b9fa92b4d..562169f0c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/gcp_cr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/gcp_cr.ma @@ -39,7 +39,7 @@ definition S4 ≝ λRP,C:candidate. ∀G,L,Vs. all … (RP G L) Vs → ∀s. C G L (ⒶVs.⋆s). definition S5 ≝ λC:candidate. ∀I,G,L,K,Vs,V1,V2,i. - C G L (ⒶVs.V2) → ⬆*[⫯i] V1 ≘ V2 → + C G L (ⒶVs.V2) → ⬆*[↑i] V1 ≘ V2 → ⬇*[i] L ≘ K.ⓑ{I}V1 → C G L (ⒶVs.#i). definition S6 ≝ λRP,C:candidate. @@ -130,7 +130,7 @@ lemma acr_gcr: ∀RR,RS,RP. gcp RR RS RP → gcr RR RS RP RP → lapply (drops_tls_at … Hf … HY) -HY #HY elim (drops_inv_skip2 … HY) -HY #Z #K0 #HK0 #HZ #H destruct elim (liftsb_inv_pair_sn … HZ) -HZ #W1 #HVW1 #H destruct - elim (lifts_total W1 (𝐔❴⫯j❵)) #W2 #HW12 + elim (lifts_total W1 (𝐔❴↑j❵)) #W2 #HW12 lapply (lifts_trans … HVW1 … HW12 ??) -HVW1 [3: |*: // ] #H lapply (lifts_conf … HV12 … H f ?) -V1 [ /2 width=3 by after_uni_succ_sn/ ] #HVW2 @(s5 … IHA … (V0@V0s) … HW12) /3 width=4 by drops_inv_gen, lifts_applv/ @@ -140,10 +140,10 @@ lemma acr_gcr: ∀RR,RS,RP. gcp RR RS RP → gcr RR RS RP RP → elim (lifts_total V10 (𝐔❴1❵)) #V20 #HV120 elim (liftsv_total (𝐔❴1❵) V10s) #V20s #HV120s @(s6 … IHA … (V10@V10s) (V20@V20s)) /3 width=7 by cp2, liftsv_cons/ - @(HA … (↑f)) /3 width=2 by drops_skip, ext2_pair/ + @(HA … (⫯f)) /3 width=2 by drops_skip, ext2_pair/ [ @lifts_applv // lapply (liftsv_trans … HV10s … HV120s ??) -V10s [3: |*: // ] #H - elim (liftsv_split_trans … H (𝐔❴1❵) (↑f)) /2 width=1 by after_uni_one_sn/ #V10s #HV10s #HV120s + elim (liftsv_split_trans … H (𝐔❴1❵) (⫯f)) /2 width=1 by after_uni_one_sn/ #V10s #HV10s #HV120s >(liftsv_mono … HV12s … HV10s) -V1s // | @(acr_lifts … H1RP … HB … HV120) /3 width=2 by drops_refl, drops_drop/ ] @@ -156,7 +156,7 @@ qed. lemma acr_abst: ∀RR,RS,RP. gcp RR RS RP → gcr RR RS RP RP → ∀p,G,L,W,T,A,B. ⦃G, L, W⦄ ϵ[RP] 〚B〛 → ( - ∀b,f,L0,V0,W0,T0. ⬇*[b, f] L0 ≘ L → ⬆*[f] W ≘ W0 → ⬆*[↑f] T ≘ T0 → + ∀b,f,L0,V0,W0,T0. ⬇*[b, f] L0 ≘ L → ⬆*[f] W ≘ W0 → ⬆*[⫯f] T ≘ T0 → ⦃G, L0, V0⦄ ϵ[RP] 〚B〛 → ⦃G, L0, W0⦄ ϵ[RP] 〚B〛 → ⦃G, L0.ⓓⓝW0.V0, T0⦄ ϵ[RP] 〚A〛 ) → ⦃G, L, ⓛ{p}W.T⦄ ϵ[RP] 〚②B.A〛. diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/lfdeq.ma b/matita/matita/contribs/lambdadelta/basic_2/static/lfdeq.ma index 98b931445..47c5a38ba 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/lfdeq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/lfdeq.ma @@ -106,7 +106,7 @@ lemma lfdeq_unit: ∀h,o,f,I,L1,L2. 𝐈⦃f⦄ → L1 ⪤*[cdeq_ext h o, cfull, /2 width=3 by lfxs_unit/ qed. *) lemma lfdeq_lref: ∀h,o,I1,I2,L1,L2,i. - L1 ≛[h, o, #i] L2 → L1.ⓘ{I1} ≛[h, o, #⫯i] L2.ⓘ{I2}. + L1 ≛[h, o, #i] L2 → L1.ⓘ{I1} ≛[h, o, #↑i] L2.ⓘ{I2}. /2 width=1 by lfxs_lref/ qed. (* Basic_2A1: uses: lleq_gref *) @@ -138,7 +138,7 @@ lemma lfdeq_inv_zero: ∀h,o,Y1,Y2. Y1 ≛[h, o, #0] Y2 → /3 width=9 by or3_intro0, or3_intro1, or3_intro2, ex4_5_intro, ex4_4_intro, conj/ qed-. *) -lemma lfdeq_inv_lref: ∀h,o,Y1,Y2,i. Y1 ≛[h, o, #⫯i] Y2 → +lemma lfdeq_inv_lref: ∀h,o,Y1,Y2,i. Y1 ≛[h, o, #↑i] Y2 → (Y1 = ⋆ ∧ Y2 = ⋆) ∨ ∃∃I1,I2,L1,L2. L1 ≛[h, o, #i] L2 & Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}. @@ -164,11 +164,11 @@ lemma lfdeq_inv_zero_pair_dx: ∀h,o,I,Y1,L2,V2. Y1 ≛[h, o, #0] L2.ⓑ{I}V2 ∃∃L1,V1. L1 ≛[h, o, V1] L2 & V1 ≛[h, o] V2 & Y1 = L1.ⓑ{I}V1. /2 width=1 by lfxs_inv_zero_pair_dx/ qed-. -lemma lfdeq_inv_lref_bind_sn: ∀h,o,I1,Y2,L1,i. L1.ⓘ{I1} ≛[h, o, #⫯i] Y2 → +lemma lfdeq_inv_lref_bind_sn: ∀h,o,I1,Y2,L1,i. L1.ⓘ{I1} ≛[h, o, #↑i] Y2 → ∃∃I2,L2. L1 ≛[h, o, #i] L2 & Y2 = L2.ⓘ{I2}. /2 width=2 by lfxs_inv_lref_bind_sn/ qed-. -lemma lfdeq_inv_lref_bind_dx: ∀h,o,I2,Y1,L2,i. Y1 ≛[h, o, #⫯i] L2.ⓘ{I2} → +lemma lfdeq_inv_lref_bind_dx: ∀h,o,I2,Y1,L2,i. Y1 ≛[h, o, #↑i] L2.ⓘ{I2} → ∃∃I1,L1. L1 ≛[h, o, #i] L2 & Y1 = L1.ⓘ{I1}. /2 width=2 by lfxs_inv_lref_bind_dx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/lfeq.ma b/matita/matita/contribs/lambdadelta/basic_2/static/lfeq.ma index f108bc5af..f7375afbc 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/lfeq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/lfeq.ma @@ -56,11 +56,11 @@ elim (lfxs_inv_zero_pair_dx … H) -H #K1 #X #HK12 #HX #H destruct /2 width=3 by ex2_intro/ qed-. -lemma lfeq_inv_lref_bind_sn: ∀I1,K1,L2,i. K1.ⓘ{I1} ≡[#⫯i] L2 → +lemma lfeq_inv_lref_bind_sn: ∀I1,K1,L2,i. K1.ⓘ{I1} ≡[#↑i] L2 → ∃∃I2,K2. K1 ≡[#i] K2 & L2 = K2.ⓘ{I2}. /2 width=2 by lfxs_inv_lref_bind_sn/ qed-. -lemma lfeq_inv_lref_bind_dx: ∀I2,K2,L1,i. L1 ≡[#⫯i] K2.ⓘ{I2} → +lemma lfeq_inv_lref_bind_dx: ∀I2,K2,L1,i. L1 ≡[#↑i] K2.ⓘ{I2} → ∃∃I1,K1. K1 ≡[#i] K2 & L1 = K1.ⓘ{I1}. /2 width=2 by lfxs_inv_lref_bind_dx/ qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/lfxs.ma b/matita/matita/contribs/lambdadelta/basic_2/static/lfxs.ma index 8d82750f1..5daeedab0 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/lfxs.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/lfxs.ma @@ -84,7 +84,7 @@ lemma lfxs_inv_zero: ∀R,Y1,Y2. Y1 ⪤*[R, #0] Y2 → ] qed-. -lemma lfxs_inv_lref: ∀R,Y1,Y2,i. Y1 ⪤*[R, #⫯i] Y2 → +lemma lfxs_inv_lref: ∀R,Y1,Y2,i. Y1 ⪤*[R, #↑i] Y2 → ∨∨ Y1 = ⋆ ∧ Y2 = ⋆ | ∃∃I1,I2,L1,L2. L1 ⪤*[R, #i] L2 & Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}. @@ -183,7 +183,7 @@ lemma lfxs_inv_zero_unit_dx: ∀R,I,L1,K2. L1 ⪤*[R, #0] K2.ⓤ{I} → ] qed-. -lemma lfxs_inv_lref_bind_sn: ∀R,I1,K1,L2,i. K1.ⓘ{I1} ⪤*[R, #⫯i] L2 → +lemma lfxs_inv_lref_bind_sn: ∀R,I1,K1,L2,i. K1.ⓘ{I1} ⪤*[R, #↑i] L2 → ∃∃I2,K2. K1 ⪤*[R, #i] K2 & L2 = K2.ⓘ{I2}. #R #I1 #K1 #L2 #i #H elim (lfxs_inv_lref … H) -H * [ #H destruct @@ -191,7 +191,7 @@ lemma lfxs_inv_lref_bind_sn: ∀R,I1,K1,L2,i. K1.ⓘ{I1} ⪤*[R, #⫯i] L2 → ] qed-. -lemma lfxs_inv_lref_bind_dx: ∀R,I2,K2,L1,i. L1 ⪤*[R, #⫯i] K2.ⓘ{I2} → +lemma lfxs_inv_lref_bind_dx: ∀R,I2,K2,L1,i. L1 ⪤*[R, #↑i] K2.ⓘ{I2} → ∃∃I1,K1. K1 ⪤*[R, #i] K2 & L1 = K1.ⓘ{I1}. #R #I2 #K2 #L1 #i #H elim (lfxs_inv_lref … H) -H * [ #_ #H destruct @@ -273,7 +273,7 @@ lemma lfxs_unit: ∀R,f,I,L1,L2. 𝐈⦃f⦄ → L1 ⪤*[cext2 R, cfull, f] L2 /4 width=3 by frees_unit, lexs_next, ext2_unit, ex2_intro/ qed. lemma lfxs_lref: ∀R,I1,I2,L1,L2,i. - L1 ⪤*[R, #i] L2 → L1.ⓘ{I1} ⪤*[R, #⫯i] L2.ⓘ{I2}. + L1 ⪤*[R, #i] L2 → L1.ⓘ{I1} ⪤*[R, #↑i] L2.ⓘ{I2}. #R #I1 #I2 #L1 #L2 #i * /3 width=3 by lexs_push, frees_lref, ex2_intro/ qed. diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/lfxs_drops.ma b/matita/matita/contribs/lambdadelta/basic_2/static/lfxs_drops.ma index 40ce94c71..c37c2d346 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/lfxs_drops.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/lfxs_drops.ma @@ -36,7 +36,7 @@ definition dropable_dx: predicate (relation3 lenv term term) ≝ definition lfxs_transitive_next: relation3 … ≝ λR1,R2,R3. ∀f,L,T. L ⊢ 𝐅*⦃T⦄ ≘ f → - ∀g,I,K,n. ⬇*[n] L ≘ K.ⓘ{I} → ⫯g = ⫱*[n] f → + ∀g,I,K,n. ⬇*[n] L ≘ K.ⓘ{I} → ↑g = ⫱*[n] f → lexs_transitive (cext2 R1) (cext2 R2) (cext2 R3) (cext2 R1) cfull g K I. (* Properties with generic slicing for local environments *******************) diff --git a/matita/matita/contribs/lambdadelta/basic_2/static/lsubf.ma b/matita/matita/contribs/lambdadelta/basic_2/static/lsubf.ma index 23d4d379b..6eec91277 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/static/lsubf.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/static/lsubf.ma @@ -19,15 +19,15 @@ include "basic_2/static/frees.ma". (* RESTRICTED REFINEMENT FOR CONTEXT-SENSITIVE FREE VARIABLES ***************) inductive lsubf: relation4 lenv rtmap lenv rtmap ≝ -| lsubf_atom: ∀f1,f2. f1 ≗ f2 → lsubf (⋆) f1 (⋆) f2 +| lsubf_atom: ∀f1,f2. f1 ≡ f2 → lsubf (⋆) f1 (⋆) f2 | lsubf_push: ∀f1,f2,I1,I2,L1,L2. lsubf L1 (f1) L2 (f2) → - lsubf (L1.ⓘ{I1}) (↑f1) (L2.ⓘ{I2}) (↑f2) + lsubf (L1.ⓘ{I1}) (⫯f1) (L2.ⓘ{I2}) (⫯f2) | lsubf_bind: ∀f1,f2,I,L1,L2. lsubf L1 f1 L2 f2 → - lsubf (L1.ⓘ{I}) (⫯f1) (L2.ⓘ{I}) (⫯f2) + lsubf (L1.ⓘ{I}) (↑f1) (L2.ⓘ{I}) (↑f2) | lsubf_beta: ∀f,f0,f1,f2,L1,L2,W,V. L1 ⊢ 𝐅*⦃V⦄ ≘ f → f0 ⋓ f ≘ f1 → - lsubf L1 f0 L2 f2 → lsubf (L1.ⓓⓝW.V) (⫯f1) (L2.ⓛW) (⫯f2) + lsubf L1 f0 L2 f2 → lsubf (L1.ⓓⓝW.V) (↑f1) (L2.ⓛW) (↑f2) | lsubf_unit: ∀f,f0,f1,f2,I1,I2,L1,L2,V. L1 ⊢ 𝐅*⦃V⦄ ≘ f → f0 ⋓ f ≘ f1 → - lsubf L1 f0 L2 f2 → lsubf (L1.ⓑ{I1}V) (⫯f1) (L2.ⓤ{I2}) (⫯f2) + lsubf L1 f0 L2 f2 → lsubf (L1.ⓑ{I1}V) (↑f1) (L2.ⓤ{I2}) (↑f2) . interpretation @@ -37,7 +37,7 @@ interpretation (* Basic inversion lemmas ***************************************************) fact lsubf_inv_atom1_aux: ∀f1,f2,L1,L2. ⦃L1, f1⦄ ⫃𝐅* ⦃L2, f2⦄ → L1 = ⋆ → - f1 ≗ f2 ∧ L2 = ⋆. + f1 ≡ f2 ∧ L2 = ⋆. #f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2 [ /2 width=1 by conj/ | #f1 #f2 #I1 #I2 #L1 #L2 #_ #H destruct @@ -47,12 +47,12 @@ fact lsubf_inv_atom1_aux: ∀f1,f2,L1,L2. ⦃L1, f1⦄ ⫃𝐅* ⦃L2, f2⦄ → ] qed-. -lemma lsubf_inv_atom1: ∀f1,f2,L2. ⦃⋆, f1⦄ ⫃𝐅* ⦃L2, f2⦄ → f1 ≗ f2 ∧ L2 = ⋆. +lemma lsubf_inv_atom1: ∀f1,f2,L2. ⦃⋆, f1⦄ ⫃𝐅* ⦃L2, f2⦄ → f1 ≡ f2 ∧ L2 = ⋆. /2 width=3 by lsubf_inv_atom1_aux/ qed-. fact lsubf_inv_push1_aux: ∀f1,f2,L1,L2. ⦃L1, f1⦄ ⫃𝐅* ⦃L2, f2⦄ → - ∀g1,I1,K1. f1 = ↑g1 → L1 = K1.ⓘ{I1} → - ∃∃g2,I2,K2. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f2 = ↑g2 & L2 = K2.ⓘ{I2}. + ∀g1,I1,K1. f1 = ⫯g1 → L1 = K1.ⓘ{I1} → + ∃∃g2,I2,K2. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f2 = ⫯g2 & L2 = K2.ⓘ{I2}. #f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2 [ #f1 #f2 #_ #g1 #J1 #K1 #_ #H destruct | #f1 #f2 #I1 #I2 #L1 #L2 #H12 #g1 #J1 #K1 #H1 #H2 destruct @@ -63,18 +63,18 @@ fact lsubf_inv_push1_aux: ∀f1,f2,L1,L2. ⦃L1, f1⦄ ⫃𝐅* ⦃L2, f2⦄ → ] qed-. -lemma lsubf_inv_push1: ∀g1,f2,I1,K1,L2. ⦃K1.ⓘ{I1}, ↑g1⦄ ⫃𝐅* ⦃L2, f2⦄ → - ∃∃g2,I2,K2. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f2 = ↑g2 & L2 = K2.ⓘ{I2}. +lemma lsubf_inv_push1: ∀g1,f2,I1,K1,L2. ⦃K1.ⓘ{I1}, ⫯g1⦄ ⫃𝐅* ⦃L2, f2⦄ → + ∃∃g2,I2,K2. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f2 = ⫯g2 & L2 = K2.ⓘ{I2}. /2 width=6 by lsubf_inv_push1_aux/ qed-. fact lsubf_inv_pair1_aux: ∀f1,f2,L1,L2. ⦃L1, f1⦄ ⫃𝐅* ⦃L2, f2⦄ → - ∀g1,I,K1,X. f1 = ⫯g1 → L1 = K1.ⓑ{I}X → - ∨∨ ∃∃g2,K2. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f2 = ⫯g2 & L2 = K2.ⓑ{I}X + ∀g1,I,K1,X. f1 = ↑g1 → L1 = K1.ⓑ{I}X → + ∨∨ ∃∃g2,K2. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f2 = ↑g2 & L2 = K2.ⓑ{I}X | ∃∃g,g0,g2,K2,W,V. ⦃K1, g0⦄ ⫃𝐅* ⦃K2, g2⦄ & - K1 ⊢ 𝐅*⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ⫯g2 & + K1 ⊢ 𝐅*⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 & I = Abbr & X = ⓝW.V & L2 = K2.ⓛW | ∃∃g,g0,g2,J,K2. ⦃K1, g0⦄ ⫃𝐅* ⦃K2, g2⦄ & - K1 ⊢ 𝐅*⦃X⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ⫯g2 & + K1 ⊢ 𝐅*⦃X⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 & L2 = K2.ⓤ{J}. #f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2 [ #f1 #f2 #_ #g1 #J #K1 #X #_ #H destruct @@ -88,19 +88,19 @@ fact lsubf_inv_pair1_aux: ∀f1,f2,L1,L2. ⦃L1, f1⦄ ⫃𝐅* ⦃L2, f2⦄ → ] qed-. -lemma lsubf_inv_pair1: ∀g1,f2,I,K1,L2,X. ⦃K1.ⓑ{I}X, ⫯g1⦄ ⫃𝐅* ⦃L2, f2⦄ → - ∨∨ ∃∃g2,K2. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f2 = ⫯g2 & L2 = K2.ⓑ{I}X +lemma lsubf_inv_pair1: ∀g1,f2,I,K1,L2,X. ⦃K1.ⓑ{I}X, ↑g1⦄ ⫃𝐅* ⦃L2, f2⦄ → + ∨∨ ∃∃g2,K2. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f2 = ↑g2 & L2 = K2.ⓑ{I}X | ∃∃g,g0,g2,K2,W,V. ⦃K1, g0⦄ ⫃𝐅* ⦃K2, g2⦄ & - K1 ⊢ 𝐅*⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ⫯g2 & + K1 ⊢ 𝐅*⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 & I = Abbr & X = ⓝW.V & L2 = K2.ⓛW | ∃∃g,g0,g2,J,K2. ⦃K1, g0⦄ ⫃𝐅* ⦃K2, g2⦄ & - K1 ⊢ 𝐅*⦃X⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ⫯g2 & + K1 ⊢ 𝐅*⦃X⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 & L2 = K2.ⓤ{J}. /2 width=5 by lsubf_inv_pair1_aux/ qed-. fact lsubf_inv_unit1_aux: ∀f1,f2,L1,L2. ⦃L1, f1⦄ ⫃𝐅* ⦃L2, f2⦄ → - ∀g1,I,K1. f1 = ⫯g1 → L1 = K1.ⓤ{I} → - ∃∃g2,K2. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f2 = ⫯g2 & L2 = K2.ⓤ{I}. + ∀g1,I,K1. f1 = ↑g1 → L1 = K1.ⓤ{I} → + ∃∃g2,K2. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f2 = ↑g2 & L2 = K2.ⓤ{I}. #f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2 [ #f1 #f2 #_ #g1 #J #K1 #_ #H destruct | #f1 #f2 #I1 #I2 #L1 #L2 #H12 #g1 #J #K1 #H elim (discr_push_next … H) @@ -111,12 +111,12 @@ fact lsubf_inv_unit1_aux: ∀f1,f2,L1,L2. ⦃L1, f1⦄ ⫃𝐅* ⦃L2, f2⦄ → ] qed-. -lemma lsubf_inv_unit1: ∀g1,f2,I,K1,L2. ⦃K1.ⓤ{I}, ⫯g1⦄ ⫃𝐅* ⦃L2, f2⦄ → - ∃∃g2,K2. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f2 = ⫯g2 & L2 = K2.ⓤ{I}. +lemma lsubf_inv_unit1: ∀g1,f2,I,K1,L2. ⦃K1.ⓤ{I}, ↑g1⦄ ⫃𝐅* ⦃L2, f2⦄ → + ∃∃g2,K2. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f2 = ↑g2 & L2 = K2.ⓤ{I}. /2 width=5 by lsubf_inv_unit1_aux/ qed-. fact lsubf_inv_atom2_aux: ∀f1,f2,L1,L2. ⦃L1, f1⦄ ⫃𝐅* ⦃L2, f2⦄ → L2 = ⋆ → - f1 ≗ f2 ∧ L1 = ⋆. + f1 ≡ f2 ∧ L1 = ⋆. #f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2 [ /2 width=1 by conj/ | #f1 #f2 #I1 #I2 #L1 #L2 #_ #H destruct @@ -126,12 +126,12 @@ fact lsubf_inv_atom2_aux: ∀f1,f2,L1,L2. ⦃L1, f1⦄ ⫃𝐅* ⦃L2, f2⦄ → ] qed-. -lemma lsubf_inv_atom2: ∀f1,f2,L1. ⦃L1, f1⦄ ⫃𝐅* ⦃⋆, f2⦄ → f1 ≗ f2 ∧ L1 = ⋆. +lemma lsubf_inv_atom2: ∀f1,f2,L1. ⦃L1, f1⦄ ⫃𝐅* ⦃⋆, f2⦄ → f1 ≡ f2 ∧ L1 = ⋆. /2 width=3 by lsubf_inv_atom2_aux/ qed-. fact lsubf_inv_push2_aux: ∀f1,f2,L1,L2. ⦃L1, f1⦄ ⫃𝐅* ⦃L2, f2⦄ → - ∀g2,I2,K2. f2 = ↑g2 → L2 = K2.ⓘ{I2} → - ∃∃g1,I1,K1. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f1 = ↑g1 & L1 = K1.ⓘ{I1}. + ∀g2,I2,K2. f2 = ⫯g2 → L2 = K2.ⓘ{I2} → + ∃∃g1,I1,K1. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f1 = ⫯g1 & L1 = K1.ⓘ{I1}. #f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2 [ #f1 #f2 #_ #g2 #J2 #K2 #_ #H destruct | #f1 #f2 #I1 #I2 #L1 #L2 #H12 #g2 #J2 #K2 #H1 #H2 destruct @@ -142,15 +142,15 @@ fact lsubf_inv_push2_aux: ∀f1,f2,L1,L2. ⦃L1, f1⦄ ⫃𝐅* ⦃L2, f2⦄ → ] qed-. -lemma lsubf_inv_push2: ∀f1,g2,I2,L1,K2. ⦃L1, f1⦄ ⫃𝐅* ⦃K2.ⓘ{I2}, ↑g2⦄ → - ∃∃g1,I1,K1. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f1 = ↑g1 & L1 = K1.ⓘ{I1}. +lemma lsubf_inv_push2: ∀f1,g2,I2,L1,K2. ⦃L1, f1⦄ ⫃𝐅* ⦃K2.ⓘ{I2}, ⫯g2⦄ → + ∃∃g1,I1,K1. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f1 = ⫯g1 & L1 = K1.ⓘ{I1}. /2 width=6 by lsubf_inv_push2_aux/ qed-. fact lsubf_inv_pair2_aux: ∀f1,f2,L1,L2. ⦃L1, f1⦄ ⫃𝐅* ⦃L2, f2⦄ → - ∀g2,I,K2,W. f2 = ⫯g2 → L2 = K2.ⓑ{I}W → - ∨∨ ∃∃g1,K1. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f1 = ⫯g1 & L1 = K1.ⓑ{I}W + ∀g2,I,K2,W. f2 = ↑g2 → L2 = K2.ⓑ{I}W → + ∨∨ ∃∃g1,K1. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f1 = ↑g1 & L1 = K1.ⓑ{I}W | ∃∃g,g0,g1,K1,V. ⦃K1, g0⦄ ⫃𝐅* ⦃K2, g2⦄ & - K1 ⊢ 𝐅*⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f1 = ⫯g1 & + K1 ⊢ 𝐅*⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 & I = Abst & L1 = K1.ⓓⓝW.V. #f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2 [ #f1 #f2 #_ #g2 #J #K2 #X #_ #H destruct @@ -163,18 +163,18 @@ fact lsubf_inv_pair2_aux: ∀f1,f2,L1,L2. ⦃L1, f1⦄ ⫃𝐅* ⦃L2, f2⦄ → ] qed-. -lemma lsubf_inv_pair2: ∀f1,g2,I,L1,K2,W. ⦃L1, f1⦄ ⫃𝐅* ⦃K2.ⓑ{I}W, ⫯g2⦄ → - ∨∨ ∃∃g1,K1. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f1 = ⫯g1 & L1 = K1.ⓑ{I}W +lemma lsubf_inv_pair2: ∀f1,g2,I,L1,K2,W. ⦃L1, f1⦄ ⫃𝐅* ⦃K2.ⓑ{I}W, ↑g2⦄ → + ∨∨ ∃∃g1,K1. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f1 = ↑g1 & L1 = K1.ⓑ{I}W | ∃∃g,g0,g1,K1,V. ⦃K1, g0⦄ ⫃𝐅* ⦃K2, g2⦄ & - K1 ⊢ 𝐅*⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f1 = ⫯g1 & + K1 ⊢ 𝐅*⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 & I = Abst & L1 = K1.ⓓⓝW.V. /2 width=5 by lsubf_inv_pair2_aux/ qed-. fact lsubf_inv_unit2_aux: ∀f1,f2,L1,L2. ⦃L1, f1⦄ ⫃𝐅* ⦃L2, f2⦄ → - ∀g2,I,K2. f2 = ⫯g2 → L2 = K2.ⓤ{I} → - ∨∨ ∃∃g1,K1. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f1 = ⫯g1 & L1 = K1.ⓤ{I} + ∀g2,I,K2. f2 = ↑g2 → L2 = K2.ⓤ{I} → + ∨∨ ∃∃g1,K1. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f1 = ↑g1 & L1 = K1.ⓤ{I} | ∃∃g,g0,g1,J,K1,V. ⦃K1, g0⦄ ⫃𝐅* ⦃K2, g2⦄ & - K1 ⊢ 𝐅*⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f1 = ⫯g1 & + K1 ⊢ 𝐅*⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 & L1 = K1.ⓑ{J}V. #f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2 [ #f1 #f2 #_ #g2 #J #K2 #_ #H destruct @@ -187,27 +187,27 @@ fact lsubf_inv_unit2_aux: ∀f1,f2,L1,L2. ⦃L1, f1⦄ ⫃𝐅* ⦃L2, f2⦄ → ] qed-. -lemma lsubf_inv_unit2: ∀f1,g2,I,L1,K2. ⦃L1, f1⦄ ⫃𝐅* ⦃K2.ⓤ{I}, ⫯g2⦄ → - ∨∨ ∃∃g1,K1. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f1 = ⫯g1 & L1 = K1.ⓤ{I} +lemma lsubf_inv_unit2: ∀f1,g2,I,L1,K2. ⦃L1, f1⦄ ⫃𝐅* ⦃K2.ⓤ{I}, ↑g2⦄ → + ∨∨ ∃∃g1,K1. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f1 = ↑g1 & L1 = K1.ⓤ{I} | ∃∃g,g0,g1,J,K1,V. ⦃K1, g0⦄ ⫃𝐅* ⦃K2, g2⦄ & - K1 ⊢ 𝐅*⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f1 = ⫯g1 & + K1 ⊢ 𝐅*⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 & L1 = K1.ⓑ{J}V. /2 width=5 by lsubf_inv_unit2_aux/ qed-. (* Advanced inversion lemmas ************************************************) -lemma lsubf_inv_atom: ∀f1,f2. ⦃⋆, f1⦄ ⫃𝐅* ⦃⋆, f2⦄ → f1 ≗ f2. +lemma lsubf_inv_atom: ∀f1,f2. ⦃⋆, f1⦄ ⫃𝐅* ⦃⋆, f2⦄ → f1 ≡ f2. #f1 #f2 #H elim (lsubf_inv_atom1 … H) -H // qed-. -lemma lsubf_inv_push_sn: ∀g1,f2,I1,I2,K1,K2. ⦃K1.ⓘ{I1}, ↑g1⦄ ⫃𝐅* ⦃K2.ⓘ{I2}, f2⦄ → - ∃∃g2. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f2 = ↑g2. +lemma lsubf_inv_push_sn: ∀g1,f2,I1,I2,K1,K2. ⦃K1.ⓘ{I1}, ⫯g1⦄ ⫃𝐅* ⦃K2.ⓘ{I2}, f2⦄ → + ∃∃g2. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f2 = ⫯g2. #g1 #f2 #I #K1 #K2 #X #H elim (lsubf_inv_push1 … H) -H #g2 #I #Y #H0 #H2 #H destruct /2 width=3 by ex2_intro/ qed-. -lemma lsubf_inv_bind_sn: ∀g1,f2,I,K1,K2. ⦃K1.ⓘ{I}, ⫯g1⦄ ⫃𝐅* ⦃K2.ⓘ{I}, f2⦄ → - ∃∃g2. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f2 = ⫯g2. +lemma lsubf_inv_bind_sn: ∀g1,f2,I,K1,K2. ⦃K1.ⓘ{I}, ↑g1⦄ ⫃𝐅* ⦃K2.ⓘ{I}, f2⦄ → + ∃∃g2. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f2 = ↑g2. #g1 #f2 * #I [2: #X ] #K1 #K2 #H [ elim (lsubf_inv_pair1 … H) -H * [ #z2 #Y2 #H2 #H #H0 destruct /2 width=3 by ex2_intro/ @@ -219,8 +219,8 @@ lemma lsubf_inv_bind_sn: ∀g1,f2,I,K1,K2. ⦃K1.ⓘ{I}, ⫯g1⦄ ⫃𝐅* ⦃K2 ] qed-. -lemma lsubf_inv_beta_sn: ∀g1,f2,K1,K2,V,W. ⦃K1.ⓓⓝW.V, ⫯g1⦄ ⫃𝐅* ⦃K2.ⓛW, f2⦄ → - ∃∃g,g0,g2. ⦃K1, g0⦄ ⫃𝐅* ⦃K2, g2⦄ & K1 ⊢ 𝐅*⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ⫯g2. +lemma lsubf_inv_beta_sn: ∀g1,f2,K1,K2,V,W. ⦃K1.ⓓⓝW.V, ↑g1⦄ ⫃𝐅* ⦃K2.ⓛW, f2⦄ → + ∃∃g,g0,g2. ⦃K1, g0⦄ ⫃𝐅* ⦃K2, g2⦄ & K1 ⊢ 𝐅*⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2. #g1 #f2 #K1 #K2 #V #W #H elim (lsubf_inv_pair1 … H) -H * [ #z2 #Y2 #_ #_ #H destruct | #z #z0 #z2 #Y2 #X0 #X #H02 #Hz #Hg1 #H #_ #H0 #H1 destruct @@ -229,8 +229,8 @@ lemma lsubf_inv_beta_sn: ∀g1,f2,K1,K2,V,W. ⦃K1.ⓓⓝW.V, ⫯g1⦄ ⫃𝐅* ] qed-. -lemma lsubf_inv_unit_sn: ∀g1,f2,I,J,K1,K2,V. ⦃K1.ⓑ{I}V, ⫯g1⦄ ⫃𝐅* ⦃K2.ⓤ{J}, f2⦄ → - ∃∃g,g0,g2. ⦃K1, g0⦄ ⫃𝐅* ⦃K2, g2⦄ & K1 ⊢ 𝐅*⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ⫯g2. +lemma lsubf_inv_unit_sn: ∀g1,f2,I,J,K1,K2,V. ⦃K1.ⓑ{I}V, ↑g1⦄ ⫃𝐅* ⦃K2.ⓤ{J}, f2⦄ → + ∃∃g,g0,g2. ⦃K1, g0⦄ ⫃𝐅* ⦃K2, g2⦄ & K1 ⊢ 𝐅*⦃V⦄ ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2. #g1 #f2 #I #J #K1 #K2 #V #H elim (lsubf_inv_pair1 … H) -H * [ #z2 #Y2 #_ #_ #H destruct | #z #z0 #z2 #Y2 #X0 #X #_ #_ #_ #_ #_ #_ #H destruct @@ -239,7 +239,7 @@ lemma lsubf_inv_unit_sn: ∀g1,f2,I,J,K1,K2,V. ⦃K1.ⓑ{I}V, ⫯g1⦄ ⫃𝐅* ] qed-. -lemma lsubf_inv_refl: ∀L,f1,f2. ⦃L,f1⦄ ⫃𝐅* ⦃L,f2⦄ → f1 ≗ f2. +lemma lsubf_inv_refl: ∀L,f1,f2. ⦃L,f1⦄ ⫃𝐅* ⦃L,f2⦄ → f1 ≡ f2. #L elim L -L /2 width=1 by lsubf_inv_atom/ #L #I #IH #f1 #f2 #H12 elim (pn_split f1) * #g1 #H destruct @@ -302,7 +302,7 @@ lemma lsubf_refl: bi_reflexive … lsubf. /2 width=1 by lsubf_push, lsubf_bind/ qed. -lemma lsubf_refl_eq: ∀f1,f2,L. f1 ≗ f2 → ⦃L, f1⦄ ⫃𝐅* ⦃L, f2⦄. +lemma lsubf_refl_eq: ∀f1,f2,L. f1 ≡ f2 → ⦃L, f1⦄ ⫃𝐅* ⦃L, f2⦄. /2 width=3 by lsubf_eq_repl_back2/ qed. lemma lsubf_bind_tl_dx: ∀g1,f2,I,L1,L2. ⦃L1, g1⦄ ⫃𝐅* ⦃L2, ⫱f2⦄ → @@ -318,7 +318,7 @@ lemma lsubf_beta_tl_dx: ∀f,f0,g1,L1,V. L1 ⊢ 𝐅*⦃V⦄ ≘ f → f0 ⋓ f #f #f0 #g1 #L1 #V #Hf #Hg1 #f2 elim (pn_split f2) * #x2 #H2 #L2 #W #HL12 destruct [ /3 width=4 by lsubf_push, sor_inv_sle_sn, ex2_intro/ -| @(ex2_intro … (⫯g1)) /2 width=5 by lsubf_beta/ (**) (* full auto fails *) +| @(ex2_intro … (↑g1)) /2 width=5 by lsubf_beta/ (**) (* full auto fails *) ] qed-. diff --git a/matita/matita/contribs/lambdadelta/basic_2/syntax/append_length.ma b/matita/matita/contribs/lambdadelta/basic_2/syntax/append_length.ma index 043f1be89..9291ba5d1 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/syntax/append_length.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/syntax/append_length.ma @@ -24,14 +24,14 @@ lemma append_length: ∀L1,L2. |L1 @@ L2| = |L1| + |L2|. #L2 #I >append_bind >length_bind >length_bind // qed. -lemma ltail_length: ∀I,L. |ⓘ{I}.L| = ⫯|L|. +lemma ltail_length: ∀I,L. |ⓘ{I}.L| = ↑|L|. #I #L >append_length // qed. (* Advanced inversion lemmas on length for local environments ***************) (* Basic_2A1: was: length_inv_pos_dx_ltail *) -lemma length_inv_succ_dx_ltail: ∀L,n. |L| = ⫯n → +lemma length_inv_succ_dx_ltail: ∀L,n. |L| = ↑n → ∃∃I,K. |K| = n & L = ⓘ{I}.K. #Y #n #H elim (length_inv_succ_dx … H) -H #I #L #Hn #HLK destruct elim (lenv_case_tail … L) [2: * #K #J ] @@ -39,7 +39,7 @@ elim (lenv_case_tail … L) [2: * #K #J ] qed-. (* Basic_2A1: was: length_inv_pos_sn_ltail *) -lemma length_inv_succ_sn_ltail: ∀L,n. ⫯n = |L| → +lemma length_inv_succ_sn_ltail: ∀L,n. ↑n = |L| → ∃∃I,K. n = |K| & L = ⓘ{I}.K. #Y #n #H elim (length_inv_succ_sn … H) -H #I #L #Hn #HLK destruct elim (lenv_case_tail … L) [2: * #K #J ] diff --git a/matita/matita/contribs/lambdadelta/basic_2/syntax/item_sd.ma b/matita/matita/contribs/lambdadelta/basic_2/syntax/item_sd.ma index 3387066d3..15be7977f 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/syntax/item_sd.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/syntax/item_sd.ma @@ -21,7 +21,7 @@ record sd (h:sh): Type[0] ≝ { deg : relation nat; (* degree of the sort *) deg_total: ∀s. ∃d. deg s d; (* functional relation axioms *) deg_mono : ∀s,d1,d2. deg s d1 → deg s d2 → d1 = d2; - deg_next : ∀s,d. deg s d → deg (next h s) (⫰d) (* compatibility condition *) + deg_next : ∀s,d. deg s d → deg (next h s) (↓d) (* compatibility condition *) }. (* Notable specifications ***************************************************) @@ -33,11 +33,11 @@ definition sd_O: ∀h. sd h ≝ λh. mk_sd h deg_O …. (* Basic_2A1: includes: deg_SO_pos *) inductive deg_SO (h:sh) (s:nat) (s0:nat): predicate nat ≝ -| deg_SO_succ : ∀n. (next h)^n s0 = s → deg_SO h s s0 (⫯n) +| deg_SO_succ : ∀n. (next h)^n s0 = s → deg_SO h s s0 (↑n) | deg_SO_zero: ((∃n. (next h)^n s0 = s) → ⊥) → deg_SO h s s0 0 . -fact deg_SO_inv_succ_aux: ∀h,s,s0,n0. deg_SO h s s0 n0 → ∀n. n0 = ⫯n → +fact deg_SO_inv_succ_aux: ∀h,s,s0,n0. deg_SO h s s0 n0 → ∀n. n0 = ↑n → (next h)^n s0 = s. #h #s #s0 #n0 * -n0 [ #n #Hn #x #H destruct // @@ -46,7 +46,7 @@ fact deg_SO_inv_succ_aux: ∀h,s,s0,n0. deg_SO h s s0 n0 → ∀n. n0 = ⫯n → qed-. (* Basic_2A1: was: deg_SO_inv_pos *) -lemma deg_SO_inv_succ: ∀h,s,s0,n. deg_SO h s s0 (⫯n) → (next h)^n s0 = s. +lemma deg_SO_inv_succ: ∀h,s,s0,n. deg_SO h s s0 (↑n) → (next h)^n s0 = s. /2 width=3 by deg_SO_inv_succ_aux/ qed-. lemma deg_SO_refl: ∀h,s. deg_SO h s s 1. @@ -80,7 +80,7 @@ definition sd_SO: ∀h. nat → sd h ≝ λh,s. mk_sd h (deg_SO h s) …. [ #d #H destruct elim d -d normalize /2 width=1 by deg_SO_gt, deg_SO_succ, next_lt/ | #H1 @deg_SO_zero * #d #H2 destruct - @H1 -H1 @(ex_intro … (⫯d)) /2 width=1 by sym_eq/ (**) (* explicit constructor *) + @H1 -H1 @(ex_intro … (↑d)) /2 width=1 by sym_eq/ (**) (* explicit constructor *) ] ] defined. @@ -96,14 +96,14 @@ rec definition sd_d (h:sh) (s:nat) (d:nat) on d : sd h ≝ (* Basic inversion lemmas ***************************************************) -lemma deg_inv_pred: ∀h,o,s,d. deg h o (next h s) (⫯d) → deg h o s (⫯⫯d). +lemma deg_inv_pred: ∀h,o,s,d. deg h o (next h s) (↑d) → deg h o s (↑↑d). #h #o #s #d #H1 elim (deg_total h o s) #n #H0 lapply (deg_next … H0) #H2 lapply (deg_mono … H1 H2) -H1 -H2 #H >H >S_pred /2 width=2 by ltn_to_ltO/ qed-. -lemma deg_inv_prec: ∀h,o,s,n,d. deg h o ((next h)^n s) (⫯d) → deg h o s (⫯(d+n)). +lemma deg_inv_prec: ∀h,o,s,n,d. deg h o ((next h)^n s) (↑d) → deg h o s (↑(d+n)). #h #o #s #n elim n -n normalize /3 width=1 by deg_inv_pred/ qed-. @@ -113,10 +113,10 @@ lemma deg_iter: ∀h,o,s,d,n. deg h o s d → deg h o ((next h)^n s) (d-n). #h #o #s #d #n elim n -n normalize /3 width=1 by deg_next/ qed. -lemma deg_next_SO: ∀h,o,s,d. deg h o s (⫯d) → deg h o (next h s) d. +lemma deg_next_SO: ∀h,o,s,d. deg h o s (↑d) → deg h o (next h s) d. /2 width=1 by deg_next/ qed-. -lemma sd_d_SS: ∀h,s,d. sd_d h s (⫯⫯d) = sd_d h (next h s) (⫯d). +lemma sd_d_SS: ∀h,s,d. sd_d h s (↑↑d) = sd_d h (next h s) (↑d). // qed. lemma sd_d_correct: ∀h,d,s. deg h (sd_d h s d) s d. diff --git a/matita/matita/contribs/lambdadelta/basic_2/syntax/item_sh.ma b/matita/matita/contribs/lambdadelta/basic_2/syntax/item_sh.ma index d51bd1959..9e0b03f73 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/syntax/item_sh.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/syntax/item_sh.ma @@ -33,7 +33,7 @@ lapply (next_lt h ((next h)^n s)) #H lapply (le_to_lt_to_lt … IH H) -IH -H /2 width=2 by lt_to_le/ qed. -lemma nexts_lt: ∀h,s,n. s < (next h)^(⫯n) s. +lemma nexts_lt: ∀h,s,n. s < (next h)^(↑n) s. #h #s #n normalize lapply (nexts_le h s n) #H @(le_to_lt_to_lt … H) // diff --git a/matita/matita/contribs/lambdadelta/basic_2/syntax/lenv_length.ma b/matita/matita/contribs/lambdadelta/basic_2/syntax/lenv_length.ma index d2690db96..440c5497a 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/syntax/lenv_length.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/syntax/lenv_length.ma @@ -18,7 +18,7 @@ include "basic_2/syntax/lenv.ma". rec definition length L ≝ match L with [ LAtom ⇒ 0 -| LBind L _ ⇒ ⫯(length L) +| LBind L _ ⇒ ↑(length L) ]. interpretation "length (local environment)" 'card L = (length L). @@ -29,7 +29,7 @@ lemma length_atom: |⋆| = 0. // qed. (* Basic_2A1: uses: length_pair *) -lemma length_bind: ∀I,L. |L.ⓘ{I}| = ⫯|L|. +lemma length_bind: ∀I,L. |L.ⓘ{I}| = ↑|L|. // qed. (* Basic inversion lemmas ***************************************************) @@ -43,7 +43,7 @@ lemma length_inv_zero_sn: ∀L. 0 = |L| → L = ⋆. /2 width=1 by length_inv_zero_dx/ qed-. (* Basic_2A1: was: length_inv_pos_dx *) -lemma length_inv_succ_dx: ∀n,L. |L| = ⫯n → +lemma length_inv_succ_dx: ∀n,L. |L| = ↑n → ∃∃I,K. |K| = n & L = K. ⓘ{I}. #n * [ >length_atom #H destruct @@ -52,7 +52,7 @@ lemma length_inv_succ_dx: ∀n,L. |L| = ⫯n → qed-. (* Basic_2A1: was: length_inv_pos_sn *) -lemma length_inv_succ_sn: ∀n,L. ⫯n = |L| → +lemma length_inv_succ_sn: ∀n,L. ↑n = |L| → ∃∃I,K. n = |K| & L = K. ⓘ{I}. #n #L #H lapply (sym_eq ??? H) -H #H elim (length_inv_succ_dx … H) -H /2 width=4 by ex2_2_intro/ diff --git a/matita/matita/contribs/lambdadelta/basic_2/syntax/lveq.ma b/matita/matita/contribs/lambdadelta/basic_2/syntax/lveq.ma index 524c2779b..9dd335a05 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/syntax/lveq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/syntax/lveq.ma @@ -22,9 +22,9 @@ inductive lveq: bi_relation nat lenv ≝ | lveq_bind : ∀I1,I2,K1,K2. lveq 0 K1 0 K2 → lveq 0 (K1.ⓘ{I1}) 0 (K2.ⓘ{I2}) | lveq_void_sn: ∀K1,K2,n1. lveq n1 K1 0 K2 → - lveq (⫯n1) (K1.ⓧ) 0 K2 + lveq (↑n1) (K1.ⓧ) 0 K2 | lveq_void_dx: ∀K1,K2,n2. lveq 0 K1 n2 K2 → - lveq 0 K1 (⫯n2) (K2.ⓧ) + lveq 0 K1 (↑n2) (K2.ⓧ) . interpretation "equivalence up to exclusion binders (local environment)" @@ -60,7 +60,7 @@ lemma lveq_inv_zero: ∀L1,L2. L1 ≋ⓧ*[0, 0] L2 → /2 width=5 by lveq_inv_zero_aux/ qed-. fact lveq_inv_succ_sn_aux: ∀L1,L2,n1,n2. L1 ≋ⓧ*[n1, n2] L2 → - ∀m1. ⫯m1 = n1 → + ∀m1. ↑m1 = n1 → ∃∃K1. K1 ≋ⓧ*[m1, 0] L2 & K1.ⓧ = L1 & 0 = n2. #L1 #L2 #n1 #n2 * -L1 -L2 -n1 -n2 [1: #m #H destruct @@ -69,11 +69,11 @@ fact lveq_inv_succ_sn_aux: ∀L1,L2,n1,n2. L1 ≋ⓧ*[n1, n2] L2 → ] qed-. -lemma lveq_inv_succ_sn: ∀L1,K2,n1,n2. L1 ≋ⓧ*[⫯n1, n2] K2 → +lemma lveq_inv_succ_sn: ∀L1,K2,n1,n2. L1 ≋ⓧ*[↑n1, n2] K2 → ∃∃K1. K1 ≋ⓧ*[n1, 0] K2 & K1.ⓧ = L1 & 0 = n2. /2 width=3 by lveq_inv_succ_sn_aux/ qed-. -lemma lveq_inv_succ_dx: ∀K1,L2,n1,n2. K1 ≋ⓧ*[n1, ⫯n2] L2 → +lemma lveq_inv_succ_dx: ∀K1,L2,n1,n2. K1 ≋ⓧ*[n1, ↑n2] L2 → ∃∃K2. K1 ≋ⓧ*[0, n2] K2 & K2.ⓧ = L2 & 0 = n1. #K1 #L2 #n1 #n2 #H lapply (lveq_sym … H) -H #H @@ -81,7 +81,7 @@ elim (lveq_inv_succ_sn … H) -H /3 width=3 by lveq_sym, ex3_intro/ qed-. fact lveq_inv_succ_aux: ∀L1,L2,n1,n2. L1 ≋ⓧ*[n1, n2] L2 → - ∀m1,m2. ⫯m1 = n1 → ⫯m2 = n2 → ⊥. + ∀m1,m2. ↑m1 = n1 → ↑m2 = n2 → ⊥. #L1 #L2 #n1 #n2 * -L1 -L2 -n1 -n2 [1: #m1 #m2 #H1 #H2 destruct |2: #I1 #I2 #K1 #K2 #_ #m1 #m2 #H1 #H2 destruct @@ -89,7 +89,7 @@ fact lveq_inv_succ_aux: ∀L1,L2,n1,n2. L1 ≋ⓧ*[n1, n2] L2 → ] qed-. -lemma lveq_inv_succ: ∀L1,L2,n1,n2. L1 ≋ⓧ*[⫯n1, ⫯n2] L2 → ⊥. +lemma lveq_inv_succ: ∀L1,L2,n1,n2. L1 ≋ⓧ*[↑n1, ↑n2] L2 → ⊥. /2 width=9 by lveq_inv_succ_aux/ qed-. (* Advanced inversion lemmas ************************************************) @@ -109,7 +109,7 @@ lemma lveq_inv_atom_atom: ∀n1,n2. ⋆ ≋ⓧ*[n1, n2] ⋆ → ∧∧ 0 = n1 & qed-. lemma lveq_inv_bind_atom: ∀I1,K1,n1,n2. K1.ⓘ{I1} ≋ⓧ*[n1, n2] ⋆ → - ∃∃m1. K1 ≋ⓧ*[m1, 0] ⋆ & BUnit Void = I1 & ⫯m1 = n1 & 0 = n2. + ∃∃m1. K1 ≋ⓧ*[m1, 0] ⋆ & BUnit Void = I1 & ↑m1 = n1 & 0 = n2. #I1 #K1 * [2: #n1 ] * [2,4: #n2 ] #H [ elim (lveq_inv_succ … H) | elim (lveq_inv_succ_dx … H) -H #Y #_ #H1 #H2 destruct @@ -122,7 +122,7 @@ lemma lveq_inv_bind_atom: ∀I1,K1,n1,n2. K1.ⓘ{I1} ≋ⓧ*[n1, n2] ⋆ → qed-. lemma lveq_inv_atom_bind: ∀I2,K2,n1,n2. ⋆ ≋ⓧ*[n1, n2] K2.ⓘ{I2} → - ∃∃m2. ⋆ ≋ⓧ*[0, m2] K2 & BUnit Void = I2 & 0 = n1 & ⫯m2 = n2. + ∃∃m2. ⋆ ≋ⓧ*[0, m2] K2 & BUnit Void = I2 & 0 = n1 & ↑m2 = n2. #I2 #K2 #n1 #n2 #H lapply (lveq_sym … H) -H #H elim (lveq_inv_bind_atom … H) -H @@ -142,13 +142,13 @@ lemma lveq_inv_pair_pair: ∀I1,I2,K1,K2,V1,V2,n1,n2. K1.ⓑ{I1}V1 ≋ⓧ*[n1, n ] qed-. -lemma lveq_inv_void_succ_sn: ∀L1,L2,n1,n2. L1.ⓧ ≋ⓧ*[⫯n1, n2] L2 → +lemma lveq_inv_void_succ_sn: ∀L1,L2,n1,n2. L1.ⓧ ≋ⓧ*[↑n1, n2] L2 → ∧∧ L1 ≋ ⓧ*[n1, 0] L2 & 0 = n2. #L1 #L2 #n1 #n2 #H elim (lveq_inv_succ_sn … H) -H #Y #HY #H1 #H2 destruct /2 width=1 by conj/ qed-. -lemma lveq_inv_void_succ_dx: ∀L1,L2,n1,n2. L1 ≋ⓧ*[n1, ⫯n2] L2.ⓧ → +lemma lveq_inv_void_succ_dx: ∀L1,L2,n1,n2. L1 ≋ⓧ*[n1, ↑n2] L2.ⓧ → ∧∧ L1 ≋ ⓧ*[0, n2] L2 & 0 = n1. #L1 #L2 #n1 #n2 #H lapply (lveq_sym … H) -H #H diff --git a/matita/matita/contribs/lambdadelta/basic_2/syntax/lveq_length.ma b/matita/matita/contribs/lambdadelta/basic_2/syntax/lveq_length.ma index 5c1f16f6f..eca38567c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/syntax/lveq_length.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/syntax/lveq_length.ma @@ -92,7 +92,7 @@ lemma lveq_fwd_bind_abst_length_le: ∀I1,I2,L1,L2,V2,n1,n2. (* Inversion lemmas with length for local environments **********************) lemma lveq_inv_void_dx_length: ∀L1,L2,n1,n2. L1 ≋ⓧ*[n1, n2] L2.ⓧ → |L1| ≤ |L2| → - ∃∃m2. L1 ≋ ⓧ*[n1, m2] L2 & 0 = n1 & ⫯m2 = n2. + ∃∃m2. L1 ≋ ⓧ*[n1, m2] L2 & 0 = n1 & ↑m2 = n2. #L1 #L2 #n1 #n2 #H #HL12 lapply (lveq_fwd_length_plus … H) normalize >plus_n_Sm #H0 lapply (plus2_inv_le_sn … H0 HL12) -H0 -HL12 #H0 @@ -101,7 +101,7 @@ elim (lveq_inv_void_succ_dx … H) -H /2 width=3 by ex3_intro/ qed-. lemma lveq_inv_void_sn_length: ∀L1,L2,n1,n2. L1.ⓧ ≋ⓧ*[n1, n2] L2 → |L2| ≤ |L1| → - ∃∃m1. L1 ≋ ⓧ*[m1, n2] L2 & ⫯m1 = n1 & 0 = n2. + ∃∃m1. L1 ≋ ⓧ*[m1, n2] L2 & ↑m1 = n1 & 0 = n2. #L1 #L2 #n1 #n2 #H #HL lapply (lveq_sym … H) -H #H elim (lveq_inv_void_dx_length … H HL) -H -HL diff --git a/matita/matita/contribs/lambdadelta/basic_2/syntax/lveq_lveq.ma b/matita/matita/contribs/lambdadelta/basic_2/syntax/lveq_lveq.ma index 3d3417dba..40a5fb5c8 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/syntax/lveq_lveq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/syntax/lveq_lveq.ma @@ -38,7 +38,7 @@ qed-. theorem lveq_inj_void_sn_ge: ∀K1,K2. |K2| ≤ |K1| → ∀n1,n2. K1 ≋ⓧ*[n1, n2] K2 → ∀m1,m2. K1.ⓧ ≋ⓧ*[m1, m2] K2 → - ∧∧ ⫯n1 = m1 & 0 = m2 & 0 = n2. + ∧∧ ↑n1 = m1 & 0 = m2 & 0 = n2. #L1 #L2 #HL #n1 #n2 #Hn #m1 #m2 #Hm elim (lveq_fwd_length … Hn) -Hn #H1 #H2 destruct elim (lveq_fwd_length … Hm) -Hm #H1 #H2 destruct @@ -49,5 +49,5 @@ qed-. theorem lveq_inj_void_dx_le: ∀K1,K2. |K1| ≤ |K2| → ∀n1,n2. K1 ≋ⓧ*[n1, n2] K2 → ∀m1,m2. K1 ≋ⓧ*[m1, m2] K2.ⓧ → - ∧∧ ⫯n2 = m2 & 0 = m1 & 0 = n1. + ∧∧ ↑n2 = m2 & 0 = m1 & 0 = n1. /3 width=5 by lveq_inj_void_sn_ge, lveq_sym/ qed-. (* auto: 2x lveq_sym *) diff --git a/matita/matita/contribs/lambdadelta/basic_2/syntax/term_weight.ma b/matita/matita/contribs/lambdadelta/basic_2/syntax/term_weight.ma index 63b498610..6a0a4ea31 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/syntax/term_weight.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/syntax/term_weight.ma @@ -19,7 +19,7 @@ include "basic_2/syntax/term.ma". rec definition tw T ≝ match T with [ TAtom _ ⇒ 1 -| TPair _ V T ⇒ ⫯(tw V + tw T) +| TPair _ V T ⇒ ↑(tw V + tw T) ]. interpretation "weight (term)" 'Weight T = (tw T). diff --git a/matita/matita/contribs/lambdadelta/ground_2/lib/arith.ma b/matita/matita/contribs/lambdadelta/ground_2/lib/arith.ma index e3e224843..9135ff24d 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/lib/arith.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/lib/arith.ma @@ -12,16 +12,16 @@ (* *) (**************************************************************************) -include "ground_2/notation/constructors/successor_1.ma". -include "ground_2/notation/functions/predecessor_1.ma". +include "ground_2/notation/constructors/uparrow_1.ma". +include "ground_2/notation/functions/downarrow_1.ma". include "arithmetics/nat.ma". include "ground_2/lib/relations.ma". (* ARITHMETICAL PROPERTIES **************************************************) -interpretation "nat successor" 'Successor m = (S m). +interpretation "nat successor" 'UpArrow m = (S m). -interpretation "nat predecessor" 'Predecessor m = (pred m). +interpretation "nat predecessor" 'DownArrow m = (pred m). interpretation "nat min" 'and x y = (min x y). @@ -35,7 +35,7 @@ normalize // qed. lemma pred_S: ∀m. pred (S m) = m. // qed. -lemma plus_S1: ∀x,y. ⫯(x+y) = (⫯x) + y. +lemma plus_S1: ∀x,y. ↑(x+y) = (↑x) + y. // qed. lemma max_O1: ∀n. n = (0 ∨ n). @@ -44,14 +44,14 @@ lemma max_O1: ∀n. n = (0 ∨ n). lemma max_O2: ∀n. n = (n ∨ 0). // qed. -lemma max_SS: ∀n1,n2. ⫯(n1∨n2) = (⫯n1 ∨ ⫯n2). +lemma max_SS: ∀n1,n2. ↑(n1∨n2) = (↑n1 ∨ ↑n2). #n1 #n2 elim (decidable_le n1 n2) #H normalize [ >(le_to_leb_true … H) | >(not_le_to_leb_false … H) ] -H // qed. (* Equations ****************************************************************) -lemma plus_SO: ∀n. n + 1 = ⫯n. +lemma plus_SO: ∀n. n + 1 = ↑n. // qed. lemma minus_plus_m_m_commutative: ∀n,m:nat. n = m + n - m. @@ -145,16 +145,16 @@ lemma monotonic_lt_pred: ∀m,n. m < n → 0 < m → pred m < pred n. @le_S_S_to_le >S_pred /2 width=3 by transitive_lt/ qed. -lemma lt_S_S: ∀x,y. x < y → ⫯x < ⫯y. +lemma lt_S_S: ∀x,y. x < y → ↑x < ↑y. /2 width=1 by le_S_S/ qed. -lemma lt_S: ∀n,m. n < m → n < ⫯m. +lemma lt_S: ∀n,m. n < m → n < ↑m. /2 width=1 by le_S/ qed. -lemma max_S1_le_S: ∀n1,n2,n. (n1 ∨ n2) ≤ n → (⫯n1 ∨ n2) ≤ ⫯n. +lemma max_S1_le_S: ∀n1,n2,n. (n1 ∨ n2) ≤ n → (↑n1 ∨ n2) ≤ ↑n. /4 width=2 by to_max, le_maxr, le_S_S, le_S/ qed-. -lemma max_S2_le_S: ∀n1,n2,n. (n1 ∨ n2) ≤ n → (n1 ∨ ⫯n2) ≤ ⫯n. +lemma max_S2_le_S: ∀n1,n2,n. (n1 ∨ n2) ≤ n → (n1 ∨ ↑n2) ≤ ↑n. /2 width=1 by max_S1_le_S/ qed-. lemma arith_j: ∀x,y,z. x-y-1 ≤ x-(y-z)-1. @@ -187,8 +187,8 @@ qed-. lemma lt_le_false: ∀x,y. x < y → y ≤ x → ⊥. /3 width=4 by lt_refl_false, lt_to_le_to_lt/ qed-. -lemma succ_inv_refl_sn: ∀x. ⫯x = x → ⊥. -#x #H @(lt_le_false x (⫯x)) // +lemma succ_inv_refl_sn: ∀x. ↑x = x → ⊥. +#x #H @(lt_le_false x (↑x)) // qed-. lemma le_plus_xSy_O_false: ∀x,y. x + S y ≤ 0 → ⊥. @@ -225,7 +225,7 @@ lapply (monotonic_le_plus_l n1 … Hm) -Hm >H -H /2 width=2 by le_plus_to_le/ qed-. -lemma lt_S_S_to_lt: ∀x,y. ⫯x < ⫯y → x < y. +lemma lt_S_S_to_lt: ∀x,y. ↑x < ↑y → x < y. /2 width=1 by le_S_S_to_le/ qed-. (* Note this should go in nat.ma *) @@ -237,17 +237,17 @@ lemma discr_x_minus_xy: ∀x,y. x = x - y → x = 0 ∨ y = 0. #H destruct qed-. -lemma lt_inv_O1: ∀n. 0 < n → ∃m. ⫯m = n. +lemma lt_inv_O1: ∀n. 0 < n → ∃m. ↑m = n. * /2 width=2 by ex_intro/ #H cases (lt_le_false … H) -H // qed-. -lemma lt_inv_S1: ∀m,n. ⫯m < n → ∃∃p. m < p & ⫯p = n. +lemma lt_inv_S1: ∀m,n. ↑m < n → ∃∃p. m < p & ↑p = n. #m * /3 width=3 by lt_S_S_to_lt, ex2_intro/ #H cases (lt_le_false … H) -H // qed-. -lemma lt_inv_gen: ∀y,x. x < y → ∃∃z. x ≤ z & ⫯z = y. +lemma lt_inv_gen: ∀y,x. x < y → ∃∃z. x ≤ z & ↑z = y. * /3 width=3 by le_S_S_to_le, ex2_intro/ #x #H elim (lt_le_false … H) -H // qed-. @@ -263,13 +263,13 @@ lemma zero_eq_plus: ∀x,y. 0 = x + y → 0 = x ∧ 0 = y. * /2 width=1 by conj/ #x #y normalize #H destruct qed-. -lemma nat_split: ∀x. x = 0 ∨ ∃y. ⫯y = x. +lemma nat_split: ∀x. x = 0 ∨ ∃y. ↑y = x. * /3 width=2 by ex_intro, or_introl, or_intror/ qed-. lemma lt_elim: ∀R:relation nat. - (∀n2. R O (⫯n2)) → - (∀n1,n2. R n1 n2 → R (⫯n1) (⫯n2)) → + (∀n2. R O (↑n2)) → + (∀n1,n2. R n1 n2 → R (↑n1) (↑n2)) → ∀n2,n1. n1 < n2 → R n1 n2. #R #IH1 #IH2 #n2 elim n2 -n2 [ #n1 #H elim (lt_le_false … H) -H // @@ -279,7 +279,7 @@ qed-. lemma le_elim: ∀R:relation nat. (∀n2. R O (n2)) → - (∀n1,n2. R n1 n2 → R (⫯n1) (⫯n2)) → + (∀n1,n2. R n1 n2 → R (↑n1) (↑n2)) → ∀n1,n2. n1 ≤ n2 → R n1 n2. #R #IH1 #IH2 #n1 #n2 @(nat_elim2 … n1 n2) -n1 -n2 /4 width=1 by monotonic_pred/ -IH1 -IH2 diff --git a/matita/matita/contribs/lambdadelta/ground_2/lib/list.ma b/matita/matita/contribs/lambdadelta/ground_2/lib/list.ma index baa9179e9..3ec2d22c7 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/lib/list.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/lib/list.ma @@ -28,7 +28,7 @@ interpretation "cons (list)" 'Cons hd tl = (cons ? hd tl). rec definition length (A:Type[0]) (l:list A) on l ≝ match l with [ nil ⇒ 0 -| cons _ l ⇒ ⫯(length A l) +| cons _ l ⇒ ↑(length A l) ]. interpretation "length (list)" @@ -45,7 +45,7 @@ rec definition all A (R:predicate A) (l:list A) on l ≝ lemma length_nil (A:Type[0]): |nil A| = 0. // qed. -lemma length_cons (A:Type[0]) (l:list A) (a:A): |a@l| = ⫯|l|. +lemma length_cons (A:Type[0]) (l:list A) (a:A): |a@l| = ↑|l|. // qed. (* Basic inversion lemmas on length *****************************************) @@ -57,12 +57,12 @@ qed-. lemma length_inv_zero_sn (A:Type[0]) (l:list A): 0 = |l| → l = ◊. /2 width=1 by length_inv_zero_dx/ qed-. -lemma length_inv_succ_dx (A:Type[0]) (l:list A) (x): |l| = ⫯x → +lemma length_inv_succ_dx (A:Type[0]) (l:list A) (x): |l| = ↑x → ∃∃tl,a. x = |tl| & l = a @ tl. #A * /2 width=4 by ex2_2_intro/ >length_nil #x #H destruct qed-. -lemma length_inv_succ_sn (A:Type[0]) (l:list A) (x): ⫯x = |l| → +lemma length_inv_succ_sn (A:Type[0]) (l:list A) (x): ↑x = |l| → ∃∃tl,a. x = |tl| & l = a @ tl. /2 width=1 by length_inv_succ_dx/ qed. diff --git a/matita/matita/contribs/lambdadelta/ground_2/lib/list2.ma b/matita/matita/contribs/lambdadelta/ground_2/lib/list2.ma index b9a7327de..68f2d0628 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/lib/list2.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/lib/list2.ma @@ -37,7 +37,7 @@ interpretation "append (list of pairs)" rec definition length2 (A1,A2:Type[0]) (l:list2 A1 A2) on l ≝ match l with [ nil2 ⇒ 0 -| cons2 _ _ l ⇒ ⫯(length2 A1 A2 l) +| cons2 _ _ l ⇒ ↑(length2 A1 A2 l) ]. interpretation "length (list of pairs)" diff --git a/matita/matita/contribs/lambdadelta/ground_2/lib/streams_eq.ma b/matita/matita/contribs/lambdadelta/ground_2/lib/streams_eq.ma index 9435b5010..a9940337e 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/lib/streams_eq.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/lib/streams_eq.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "ground_2/notation/relations/exteq_3.ma". +include "ground_2/notation/relations/ringeq_3.ma". include "ground_2/lib/streams.ma". (* STREAMS ******************************************************************) @@ -22,22 +22,22 @@ coinductive eq_stream (A): relation (stream A) ≝ . interpretation "extensional equivalence (nstream)" - 'ExtEq A t1 t2 = (eq_stream A t1 t2). + 'RingEq A t1 t2 = (eq_stream A t1 t2). definition eq_stream_repl (A) (R:relation …) ≝ - ∀t1,t2. t1 ≐⦋A⦌ t2 → R t1 t2. + ∀t1,t2. t1 ≗{A} t2 → R t1 t2. definition eq_stream_repl_back (A) (R:predicate …) ≝ - ∀t1. R t1 → ∀t2. t1 ≐⦋A⦌ t2 → R t2. + ∀t1. R t1 → ∀t2. t1 ≗{A} t2 → R t2. definition eq_stream_repl_fwd (A) (R:predicate …) ≝ - ∀t1. R t1 → ∀t2. t2 ≐⦋A⦌ t1 → R t2. + ∀t1. R t1 → ∀t2. t2 ≗{A} t1 → R t2. (* Basic inversion lemmas ***************************************************) -lemma eq_stream_inv_seq: ∀A,t1,t2. t1 ≐⦋A⦌ t2 → +lemma eq_stream_inv_seq: ∀A,t1,t2. t1 ≗{A} t2 → ∀u1,u2,a1,a2. a1@u1 = t1 → a2@u2 = t2 → - u1 ≐ u2 ∧ a1 = a2. + u1 ≗ u2 ∧ a1 = a2. #A #t1 #t2 * -t1 -t2 #t1 #t2 #b1 #b2 #Hb #Ht #u1 #u2 #a1 #a2 #H1 #H2 destruct /2 width=1 by conj/ qed-. @@ -64,8 +64,8 @@ corec theorem eq_stream_trans: ∀A. Transitive … (eq_stream A). /3 width=7 by eq_seq/ qed-. -theorem eq_stream_canc_sn: ∀A,t,t1,t2. t ≐ t1 → t ≐ t2 → t1 ≐⦋A⦌ t2. +theorem eq_stream_canc_sn: ∀A,t,t1,t2. t ≗ t1 → t ≗ t2 → t1 ≗{A} t2. /3 width=3 by eq_stream_trans, eq_stream_sym/ qed-. -theorem eq_stream_canc_dx: ∀A,t,t1,t2. t1 ≐ t → t2 ≐ t → t1 ≐⦋A⦌ t2. +theorem eq_stream_canc_dx: ∀A,t,t1,t2. t1 ≗ t → t2 ≗ t → t1 ≗{A} t2. /3 width=3 by eq_stream_trans, eq_stream_sym/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground_2/lib/streams_hdtl.ma b/matita/matita/contribs/lambdadelta/ground_2/lib/streams_hdtl.ma index 3a31efc35..c85459664 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/lib/streams_hdtl.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/lib/streams_hdtl.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "ground_2/notation/functions/drop_1.ma". +include "ground_2/notation/functions/downspoon_1.ma". include "ground_2/lib/streams_eq.ma". include "ground_2/lib/arith.ma". @@ -24,7 +24,7 @@ definition hd (A:Type[0]): stream A → A ≝ definition tl (A:Type[0]): stream A → stream A ≝ λt. match t with [ seq _ t ⇒ t ]. -interpretation "tail (streams)" 'Drop t = (tl ? t). +interpretation "tail (streams)" 'DownSpoon t = (tl ? t). (* basic properties *********************************************************) @@ -34,6 +34,6 @@ lemma hd_rew (A) (a) (t): a = hd A (a@t). lemma tl_rew (A) (a) (t): t = tl A (a@t). // qed. -lemma eq_stream_split (A) (t): (hd … t) @ ↓t ≐⦋A⦌ t. +lemma eq_stream_split (A) (t): (hd … t) @ ⫰t ≗{A} t. #A * // qed. diff --git a/matita/matita/contribs/lambdadelta/ground_2/lib/streams_tls.ma b/matita/matita/contribs/lambdadelta/ground_2/lib/streams_tls.ma index d2d6bcc30..13bdf51a2 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/lib/streams_tls.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/lib/streams_tls.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "ground_2/notation/functions/drops_2.ma". +include "ground_2/notation/functions/downspoonstar_2.ma". include "ground_2/lib/streams_hdtl.ma". (* STREAMS ******************************************************************) @@ -21,21 +21,21 @@ rec definition tls (A:Type[0]) (n:nat) on n: stream A → stream A ≝ ?. cases n -n [ #t @t | #n #t @tl @(tls … n t) ] defined. -interpretation "recursive tail (strams)" 'Drops n f = (tls ? n f). +interpretation "recursive tail (strams)" 'DownSpoonStar n f = (tls ? n f). (* basic properties *********************************************************) lemma tls_rew_O (A) (t): t = tls A 0 t. // qed. -lemma tls_rew_S (A) (n) (t): ↓↓*[n]t = tls A (⫯n) t. +lemma tls_rew_S (A) (n) (t): ⫰⫰*[n]t = tls A (↑n) t. // qed. -lemma tls_S1 (A) (n) (t): ↓*[n]↓t = tls A (⫯n) t. +lemma tls_S1 (A) (n) (t): ⫰*[n]⫰t = tls A (↑n) t. #A #n elim n -n // qed. -lemma tls_eq_repl (A) (n): eq_stream_repl A (λt1,t2. ↓*[n] t1 ≐ ↓*[n] t2). +lemma tls_eq_repl (A) (n): eq_stream_repl A (λt1,t2. ⫰*[n] t1 ≗ ⫰*[n] t2). #A #n elim n -n // #n #IH * #n1 #t1 * #n2 #t2 #H elim (eq_stream_inv_seq … H) /2 width=7 by/ qed. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/constructors/successor_1.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/constructors/uparrow_1.ma similarity index 94% rename from matita/matita/contribs/lambdadelta/ground_2/notation/constructors/successor_1.ma rename to matita/matita/contribs/lambdadelta/ground_2/notation/constructors/uparrow_1.ma index 05e2c3146..01bc8d156 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/constructors/successor_1.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/constructors/uparrow_1.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( ⫯ term 70 T )" +notation "hvbox( ↑ term 70 T )" non associative with precedence 70 - for @{ 'Successor $T }. + for @{ 'UpArrow $T }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/predecessor_1.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/downarrow_1.ma similarity index 94% rename from matita/matita/contribs/lambdadelta/ground_2/notation/functions/predecessor_1.ma rename to matita/matita/contribs/lambdadelta/ground_2/notation/functions/downarrow_1.ma index cf94d0497..e35058c60 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/predecessor_1.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/downarrow_1.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( ⫰ term 70 T )" +notation "hvbox( ↓ term 70 T )" non associative with precedence 70 - for @{ 'Predecessor $T }. + for @{ 'DownArrow $T }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/lift_1.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/downspoon_1.ma similarity index 94% rename from matita/matita/contribs/lambdadelta/ground_2/notation/functions/lift_1.ma rename to matita/matita/contribs/lambdadelta/ground_2/notation/functions/downspoon_1.ma index 4d0fd7f04..c342d80b9 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/lift_1.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/downspoon_1.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( ↑ term 46 T )" +notation "hvbox( ⫰ term 46 T )" non associative with precedence 46 - for @{ 'Lift $T }. + for @{ 'DownSpoon $T }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/downspoonstar_2.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/downspoonstar_2.ma new file mode 100644 index 000000000..da7698c43 --- /dev/null +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/downspoonstar_2.ma @@ -0,0 +1,19 @@ +(**************************************************************************) +(* ___ *) +(* ||M|| *) +(* ||A|| A project by Andrea Asperti *) +(* ||T|| *) +(* ||I|| Developers: *) +(* ||T|| The HELM team. *) +(* ||A|| http://helm.cs.unibo.it *) +(* \ / *) +(* \ / This file is distributed under the terms of the *) +(* v GNU General Public License Version 2 *) +(* *) +(**************************************************************************) + +(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) + +notation "hvbox( ⫰ * [ term 46 n ] term 46 T )" + non associative with precedence 46 + for @{ 'DownSpoonStar $n $T }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/successorstar_2.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/uparrowstar_2.ma similarity index 93% rename from matita/matita/contribs/lambdadelta/ground_2/notation/functions/successorstar_2.ma rename to matita/matita/contribs/lambdadelta/ground_2/notation/functions/uparrowstar_2.ma index 6f1a617b7..553c4e494 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/successorstar_2.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/uparrowstar_2.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( ⫯ * [ term 46 n ] term 70 T )" +notation "hvbox( ↑ * [ term 46 n ] term 70 T )" non associative with precedence 70 - for @{ 'SuccessorStar $n $T }. + for @{ 'UpArrowStar $n $T }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/drops_2.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/updownarrowstar_1.ma similarity index 93% rename from matita/matita/contribs/lambdadelta/ground_2/notation/functions/drops_2.ma rename to matita/matita/contribs/lambdadelta/ground_2/notation/functions/updownarrowstar_1.ma index 9b20a4324..26ac82e66 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/drops_2.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/updownarrowstar_1.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( ↓ * [ term 46 n ] term 46 T )" +notation "hvbox( ↕* term 46 T )" non associative with precedence 46 - for @{ 'Drops $n $T }. + for @{ 'UpDownArrowStar $T }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/drop_1.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/upspoon_1.ma similarity index 95% rename from matita/matita/contribs/lambdadelta/ground_2/notation/functions/drop_1.ma rename to matita/matita/contribs/lambdadelta/ground_2/notation/functions/upspoon_1.ma index 1cc9141bb..2c71ef371 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/drop_1.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/upspoon_1.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( ↓ term 46 T )" +notation "hvbox( ⫯ term 46 T )" non associative with precedence 46 - for @{ 'Drop $T }. + for @{ 'UpSpoon $T }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/liftstar_2.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/upspoonstar_2.ma similarity index 93% rename from matita/matita/contribs/lambdadelta/ground_2/notation/functions/liftstar_2.ma rename to matita/matita/contribs/lambdadelta/ground_2/notation/functions/upspoonstar_2.ma index 8b9ac4da5..12beff4ec 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/functions/liftstar_2.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/functions/upspoonstar_2.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( ↑ * [ term 46 n ] term 46 T )" +notation "hvbox( ⫯ * [ term 46 n ] term 46 T )" non associative with precedence 46 - for @{ 'LiftStar $n $T }. + for @{ 'UpSpoonStar $n $T }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/relations/funexteq_2.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/relations/ideq_2.ma similarity index 93% rename from matita/matita/contribs/lambdadelta/ground_2/notation/relations/funexteq_2.ma rename to matita/matita/contribs/lambdadelta/ground_2/notation/relations/ideq_2.ma index c0c1aeb81..be8260416 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/relations/funexteq_2.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/relations/ideq_2.ma @@ -14,6 +14,6 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation "hvbox( f1 ≗ break term 46 f2 )" +notation "hvbox( f1 ≡ break term 46 f2 )" non associative with precedence 45 - for @{ 'FunExtEq $f1 $f2 }. + for @{ 'IdEq $f1 $f2 }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/notation/relations/exteq_3.ma b/matita/matita/contribs/lambdadelta/ground_2/notation/relations/ringeq_3.ma similarity index 82% rename from matita/matita/contribs/lambdadelta/ground_2/notation/relations/exteq_3.ma rename to matita/matita/contribs/lambdadelta/ground_2/notation/relations/ringeq_3.ma index 39597d89f..e8ca369b7 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/notation/relations/exteq_3.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/notation/relations/ringeq_3.ma @@ -14,14 +14,14 @@ (* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************) -notation < "hvbox( v1 ≐ break term 46 v2 )" +notation < "hvbox( v1 ≗ break term 46 v2 )" non associative with precedence 45 - for @{ 'ExtEq $M $v1 $v2 }. + for @{ 'RingEq $M $v1 $v2 }. -notation > "hvbox( v1 ≐ break term 46 v2 )" +notation > "hvbox( v1 ≗ break term 46 v2 )" non associative with precedence 45 - for @{ 'ExtEq ? $v1 $v2 }. + for @{ 'RingEq ? $v1 $v2 }. -notation > "hvbox( v1 ≐ break ⦋ term 46 M ⦌ break term 46 v2 )" +notation > "hvbox( v1 ≗{ break term 46 M } break term 46 v2 )" non associative with precedence 45 - for @{ 'ExtEq $M $v1 $v2 }. + for @{ 'RingEq $M $v1 $v2 }. diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/mr2_plus.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/mr2_plus.ma index da3380da9..8c3221597 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/mr2_plus.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/mr2_plus.ma @@ -26,7 +26,7 @@ interpretation "plus (multiple relocation with pairs)" (* Basic properties *********************************************************) -lemma pluss_SO2: ∀l,m,cs. ({l, m} @ cs) + 1 = {⫯l, m} @ cs + 1. +lemma pluss_SO2: ∀l,m,cs. ({l, m} @ cs) + 1 = {↑l, m} @ cs + 1. normalize // qed. (* Basic inversion lemmas ***************************************************) diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/nstream.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/nstream.ma index c852317f8..2106418bc 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/nstream.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/nstream.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "ground_2/notation/functions/lift_1.ma". +include "ground_2/notation/functions/upspoon_1.ma". include "ground_2/lib/streams_tls.ma". (* RELOCATION N-STREAM ******************************************************) @@ -21,20 +21,20 @@ definition rtmap: Type[0] ≝ stream nat. definition push: rtmap → rtmap ≝ λf. 0@f. -interpretation "push (nstream)" 'Lift f = (push f). +interpretation "push (nstream)" 'UpSpoon f = (push f). definition next: rtmap → rtmap. -* #n #f @(⫯n@f) +* #n #f @(↑n@f) defined. -interpretation "next (nstream)" 'Successor f = (next f). +interpretation "next (nstream)" 'UpArrow f = (next f). (* Basic properties *********************************************************) -lemma push_rew: ∀f. 0@f = ↑f. +lemma push_rew: ∀f. 0@f = ⫯f. // qed. -lemma next_rew: ∀f,n. (⫯n)@f = ⫯(n@f). +lemma next_rew: ∀f,n. (↑n)@f = ↑(n@f). // qed. (* Basic inversion lemmas ***************************************************) @@ -43,11 +43,11 @@ lemma injective_push: injective ? ? push. #f1 #f2 normalize #H destruct // qed-. -lemma discr_push_next: ∀f1,f2. ↑f1 = ⫯f2 → ⊥. +lemma discr_push_next: ∀f1,f2. ⫯f1 = ↑f2 → ⊥. #f1 * #n2 #f2 normalize #H destruct qed-. -lemma discr_next_push: ∀f1,f2. ⫯f1 = ↑f2 → ⊥. +lemma discr_next_push: ∀f1,f2. ↑f1 = ⫯f2 → ⊥. * #n1 #f1 #f2 normalize #H destruct qed-. @@ -55,43 +55,43 @@ lemma injective_next: injective ? ? next. * #n1 #f1 * #n2 #f2 normalize #H destruct // qed-. -lemma push_inv_seq_sn: ∀f,g,n. n@g = ↑f → 0 = n ∧ g = f. +lemma push_inv_seq_sn: ∀f,g,n. n@g = ⫯f → 0 = n ∧ g = f. #f #g #n (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) @@ -78,44 +78,44 @@ 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. + ∀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 → - ∀f1,f2,f. ↑f1 = g1 → ↑f2 = g2 → ⫯f = 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. + ∀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 → - ∀f1,f2,f. ↑f1 = g1 → ⫯f2 = g2 → ↑f = 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. + ∀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 → - ∀f1,f. ⫯f1 = g1 → ↑f = 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 → - ∀f1,f. ↑f1 = g1 → ↑f = g → - ∃∃f2. f1 ⊚ f2 ≘ f & ↑f2 = g2. + ∀f1,f. ⫯f1 = g1 → ⫯f = g → + ∃∃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/ @@ -123,25 +123,25 @@ lemma after_inv_pxp: ∀g1,g2,g. g1 ⊚ g2 ≘ g → qed-. lemma after_inv_pxn: ∀g1,g2,g. g1 ⊚ g2 ≘ g → - ∀f1,f. ↑f1 = g1 → ⫯f = g → - ∃∃f2. f1 ⊚ f2 ≘ f & ⫯f2 = g2. + ∀f1,f. ⫯f1 = g1 → ↑f = g → + ∃∃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/ @@ -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/ @@ -263,7 +263,7 @@ 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 → - f1 ≗ g1 → f2 ≗ g2 → f ≗ 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 ********************************************************) @@ -293,10 +293,10 @@ 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⦄. @@ -318,12 +318,12 @@ lemma after_inv_isid3: ∀f1,f2,f. f1 ⊚ f2 ≘ f → 𝐈⦃f⦄ → 𝐈⦃f1 (* 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 @@ -440,7 +440,7 @@ lemma after_uni_sn: ∀i2,i1,f2. @⦃i1, f2⦄ ≘ i2 → qed-. lemma after_uni_succ_dx: ∀i2,i1,f2. @⦃i1, f2⦄ ≘ i2 → - ∀f. f2 ⊚ 𝐔❴⫯i1❵ ≘ f → 𝐔❴⫯i2❵ ⊚ ⫱*[⫯i2] f2 ≘ f. + ∀f. f2 ⊚ 𝐔❴↑i1❵ ≘ f → 𝐔❴↑i2❵ ⊚ ⫱*[↑i2] f2 ≘ f. #i2 elim i2 -i2 [ #i1 #f2 #Hf2 #f #Hf elim (at_inv_xxp … Hf2) -Hf2 // #g2 #H1 #H2 destruct @@ -460,7 +460,7 @@ lemma after_uni_succ_dx: ∀i2,i1,f2. @⦃i1, f2⦄ ≘ i2 → qed. lemma after_uni_succ_sn: ∀i2,i1,f2. @⦃i1, f2⦄ ≘ i2 → - ∀f. 𝐔❴⫯i2❵ ⊚ ⫱*[⫯i2] f2 ≘ f → f2 ⊚ 𝐔❴⫯i1❵ ≘ f. + ∀f. 𝐔❴↑i2❵ ⊚ ⫱*[↑i2] f2 ≘ f → f2 ⊚ 𝐔❴↑i1❵ ≘ f. #i2 elim i2 -i2 [ #i1 #f2 #Hf2 #f #Hf elim (at_inv_xxp … Hf2) -Hf2 // #g2 #H1 #H2 destruct @@ -476,11 +476,11 @@ lemma after_uni_succ_sn: ∀i2,i1,f2. @⦃i1, f2⦄ ≘ i2 → ] qed-. -lemma after_uni_one_dx: ∀f2,f. ↑f2 ⊚ 𝐔❴⫯O❵ ≘ f → 𝐔❴⫯O❵ ⊚ f2 ≘ f. -#f2 #f #H @(after_uni_succ_dx … (↑f2)) /2 width=3 by at_refl/ +lemma after_uni_one_dx: ∀f2,f. ⫯f2 ⊚ 𝐔❴↑O❵ ≘ f → 𝐔❴↑O❵ ⊚ f2 ≘ f. +#f2 #f #H @(after_uni_succ_dx … (⫯f2)) /2 width=3 by at_refl/ qed. -lemma after_uni_one_sn: ∀f1,f. 𝐔❴⫯O❵ ⊚ f1 ≘ f → ↑f1 ⊚ 𝐔❴⫯O❵ ≘ f. +lemma after_uni_one_sn: ∀f1,f. 𝐔❴↑O❵ ⊚ f1 ≘ f → ⫯f1 ⊚ 𝐔❴↑O❵ ≘ f. /3 width=3 by after_uni_succ_sn, at_refl/ qed-. (* Forward lemmas on istot **************************************************) @@ -512,7 +512,7 @@ lemma after_at1_fwd: ∀f1,i1,i2. @⦃i1, f1⦄ ≘ i2 → ∀f2. 𝐓⦃f2⦄ /3 width=8 by after_fwd_at, ex2_intro/ qed-. -lemma after_fwd_isid_sn: ∀f2,f1,f. 𝐓⦃f⦄ → f2 ⊚ f1 ≘ f → f1 ≗ f → 𝐈⦃f2⦄. +lemma after_fwd_isid_sn: ∀f2,f1,f. 𝐓⦃f⦄ → f2 ⊚ f1 ≘ f → f1 ≡ f → 𝐈⦃f2⦄. #f2 #f1 #f #H #Hf elim (after_inv_istot … Hf H) -H #Hf2 #Hf1 #H @isid_at_total // -Hf2 #i2 #i #Hf2 elim (Hf1 i2) -Hf1 @@ -521,7 +521,7 @@ lemma after_fwd_isid_sn: ∀f2,f1,f. 𝐓⦃f⦄ → f2 ⊚ f1 ≘ f → f1 ≗ /3 width=7 by at_eq_repl_back, at_mono, at_id_le/ qed-. -lemma after_fwd_isid_dx: ∀f2,f1,f. 𝐓⦃f⦄ → f2 ⊚ f1 ≘ f → f2 ≗ f → 𝐈⦃f1⦄. +lemma after_fwd_isid_dx: ∀f2,f1,f. 𝐓⦃f⦄ → f2 ⊚ f1 ≘ f → f2 ≡ f → 𝐈⦃f1⦄. #f2 #f1 #f #H #Hf elim (after_inv_istot … Hf H) -H #Hf2 #Hf1 #H2 @isid_at_total // -Hf1 #i1 #i2 #Hi12 elim (after_at1_fwd … Hi12 … Hf) -f1 diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_at.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_at.ma index 97cc4d713..4a03364b8 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_at.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_at.ma @@ -18,9 +18,9 @@ include "ground_2/relocation/rtmap_uni.ma". (* RELOCATION MAP ***********************************************************) coinductive at: rtmap → relation nat ≝ -| at_refl: ∀f,g,j1,j2. ↑f = g → 0 = j1 → 0 = j2 → at g j1 j2 -| at_push: ∀f,i1,i2. at f i1 i2 → ∀g,j1,j2. ↑f = g → ⫯i1 = j1 → ⫯i2 = j2 → at g j1 j2 -| at_next: ∀f,i1,i2. at f i1 i2 → ∀g,j2. ⫯f = g → ⫯i2 = j2 → at g i1 j2 +| at_refl: ∀f,g,j1,j2. ⫯f = g → 0 = j1 → 0 = j2 → at g j1 j2 +| at_push: ∀f,i1,i2. at f i1 i2 → ∀g,j1,j2. ⫯f = g → ↑i1 = j1 → ↑i2 = j2 → at g j1 j2 +| at_next: ∀f,i1,i2. at f i1 i2 → ∀g,j2. ↑f = g → ↑i2 = j2 → at g i1 j2 . interpretation "relational application (rtmap)" @@ -32,15 +32,15 @@ definition H_at_div: relation4 rtmap rtmap rtmap rtmap ≝ λf2,g2,f1,g1. (* Basic inversion lemmas ***************************************************) -lemma at_inv_ppx: ∀f,i1,i2. @⦃i1, f⦄ ≘ i2 → ∀g. 0 = i1 → ↑g = f → 0 = i2. +lemma at_inv_ppx: ∀f,i1,i2. @⦃i1, f⦄ ≘ i2 → ∀g. 0 = i1 → ⫯g = f → 0 = i2. #f #i1 #i2 * -f -i1 -i2 // [ #f #i1 #i2 #_ #g #j1 #j2 #_ * #_ #x #H destruct | #f #i1 #i2 #_ #g #j2 * #_ #x #_ #H elim (discr_push_next … H) ] qed-. -lemma at_inv_npx: ∀f,i1,i2. @⦃i1, f⦄ ≘ i2 → ∀g,j1. ⫯j1 = i1 → ↑g = f → - ∃∃j2. @⦃j1, g⦄ ≘ j2 & ⫯j2 = i2. +lemma at_inv_npx: ∀f,i1,i2. @⦃i1, f⦄ ≘ i2 → ∀g,j1. ↑j1 = i1 → ⫯g = f → + ∃∃j2. @⦃j1, g⦄ ≘ j2 & ↑j2 = i2. #f #i1 #i2 * -f -i1 -i2 [ #f #g #j1 #j2 #_ * #_ #x #x1 #H destruct | #f #i1 #i2 #Hi #g #j1 #j2 * * * #x #x1 #H #Hf >(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) @@ -60,42 +60,42 @@ qed-. (* Advanced inversion lemmas ************************************************) lemma at_inv_ppn: ∀f,i1,i2. @⦃i1, f⦄ ≘ i2 → - ∀g,j2. 0 = i1 → ↑g = f → ⫯j2 = 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 → - ∀g,j1. ⫯j1 = i1 → ↑g = f → 0 = 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. + ∀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 → - ∀g. ⫯g = f → 0 = 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. + ∀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) @@ -104,7 +104,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 → - ∀j1. ⫯j1 = i1 → 0 = i2 → ⊥. + ∀j1. ↑j1 = i1 → 0 = i2 → ⊥. #f elim (pn_split f) * #g #H #i1 #i2 #Hf #j1 #H1 #H2 [ elim (at_inv_npp … Hf … H1 H H2) @@ -112,30 +112,30 @@ 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/ @@ -143,7 +143,7 @@ lemma at_inv_xpn: ∀f,i1,i2. @⦃i1, f⦄ ≘ i2 → ∀g,j2. ↑g = f → ⫯j qed-. lemma at_inv_xxp: ∀f,i1,i2. @⦃i1, f⦄ ≘ i2 → 0 = i2 → - ∃∃g. 0 = i1 & ↑g = f. + ∃∃g. 0 = i1 & ⫯g = f. #f elim (pn_split f) * #g #H #i1 #i2 #Hf #H2 [ /3 width=6 by at_inv_xpp, ex2_intro/ @@ -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/ @@ -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 @@ -278,7 +278,7 @@ elim (IH … Hf Hg) -IH -j /2 width=3 by ex2_intro/ qed-. theorem at_div_pp: ∀f2,g2,f1,g1. - H_at_div f2 g2 f1 g1 → H_at_div (↑f2) (↑g2) (↑f1) (↑g1). + H_at_div f2 g2 f1 g1 → H_at_div (⫯f2) (⫯g2) (⫯f1) (⫯g1). #f2 #g2 #f1 #g1 #IH #jf #jg #j #Hf #Hg elim (at_inv_xpx … Hf) -Hf [1,2: * |*: // ] [ #H1 #H2 destruct -IH @@ -291,7 +291,7 @@ elim (at_inv_xpx … Hf) -Hf [1,2: * |*: // ] qed-. theorem at_div_nn: ∀f2,g2,f1,g1. - H_at_div f2 g2 f1 g1 → H_at_div (⫯f2) (⫯g2) (f1) (g1). + H_at_div f2 g2 f1 g1 → H_at_div (↑f2) (↑g2) (f1) (g1). #f2 #g2 #f1 #g1 #IH #jf #jg #j #Hf #Hg elim (at_inv_xnx … Hf) -Hf [ |*: // ] #i #Hf2 #H destruct lapply (at_inv_xnn … Hg ????) -Hg [5: |*: // ] #Hg2 @@ -299,7 +299,7 @@ elim (IH … Hf2 Hg2) -IH -i /2 width=3 by ex2_intro/ qed-. theorem at_div_np: ∀f2,g2,f1,g1. - H_at_div f2 g2 f1 g1 → H_at_div (⫯f2) (↑g2) (f1) (⫯g1). + H_at_div f2 g2 f1 g1 → H_at_div (↑f2) (⫯g2) (f1) (↑g1). #f2 #g2 #f1 #g1 #IH #jf #jg #j #Hf #Hg elim (at_inv_xnx … Hf) -Hf [ |*: // ] #i #Hf2 #H destruct lapply (at_inv_xpn … Hg ????) -Hg [5: * |*: // ] #xg #Hg2 #H destruct @@ -307,7 +307,7 @@ elim (IH … Hf2 Hg2) -IH -i /3 width=7 by at_next, ex2_intro/ qed-. theorem at_div_pn: ∀f2,g2,f1,g1. - H_at_div f2 g2 f1 g1 → H_at_div (↑f2) (⫯g2) (⫯f1) (g1). + H_at_div f2 g2 f1 g1 → H_at_div (⫯f2) (↑g2) (↑f1) (g1). /4 width=6 by at_div_np, at_div_comm/ qed-. (* Properties on tls ********************************************************) @@ -319,7 +319,7 @@ 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) @@ -84,50 +84,50 @@ 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. + ∀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 → - ∀f1,f2,f. ↑f1 = g1 → ↑f2 = g2 → ⫯f = 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. + ∀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 → - ∀f1,f2,f. ↑f1 = g1 → ⫯f2 = g2 → ↑f = 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. + ∀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 → - ∀f1,f. ⫯f1 = g1 → ⫯f = 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 → - ∀f1,f. ↑f1 = g1 → ↑f = g → - ∃∃f2. f1 ~⊚ f2 ≘ f & ↑f2 = g2. + ∀f1,f. ⫯f1 = g1 → ⫯f = g → + ∃∃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) @@ -135,16 +135,16 @@ lemma coafter_inv_pxp: ∀g1,g2,g. g1 ~⊚ g2 ≘ g → qed-. lemma coafter_inv_pxn: ∀g1,g2,g. g1 ~⊚ g2 ≘ g → - ∀f1,f. ↑f1 = g1 → ⫯f = g → - ∃∃f2. f1 ~⊚ f2 ≘ f & ⫯f2 = g2. + ∀f1,f. ⫯f1 = g1 → ↑f = g → + ∃∃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) @@ -152,16 +152,16 @@ lemma coafter_inv_xxn: ∀g1,g2,g. g1 ~⊚ g2 ≘ g → ∀f. ⫯f = g → qed-. lemma coafter_inv_xnn: ∀g1,g2,g. g1 ~⊚ g2 ≘ g → - ∀f2,f. ⫯f2 = g2 → ⫯f = g → - ∃∃f1. f1 ~⊚ f2 ≘ f & ↑f1 = g1. + ∀f2,f. ↑f2 = g2 → ↑f = g → + ∃∃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/ @@ -223,7 +223,7 @@ 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/ @@ -233,13 +233,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 → - f1 ≗ g1 → f2 ≗ g2 → f ≗ 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 → - ∃f. ↑*[j] f = g. +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 elim (at_inv_xxp … H) -H [|*: // ] #f2 #H1 #H2 destruct @@ -261,18 +261,18 @@ qed-. (* Inversion lemmas with tail ***********************************************) lemma coafter_inv_tl1: ∀g2,g1,g. g2 ~⊚ ⫱g1 ≘ g → - ∃∃f. ↑g2 ~⊚ g1 ≘ f & ⫱f = 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 *) +| @(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. + ∃∃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 *) +| @(ex2_intro … (↑g1)) /2 width=7 by coafter_push/ (**) (* full auto fails *) ] qed-. @@ -299,7 +299,7 @@ lemma coafter_tls_O: ∀n,f1,f2,f. @⦃0, f1⦄ ≘ n → /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. + ∀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 (injective_next … H) -H // qed-. -lemma isdiv_inv_push: ∀g. 𝛀⦃g⦄ → ∀f. ↑f = g → ⊥. +lemma isdiv_inv_push: ∀g. 𝛀⦃g⦄ → ∀f. ⫯f = g → ⊥. #g #H elim (isdiv_inv_gen … H) -H #f #Hf * -g #g #H elim (discr_push_next … H) qed-. (* Main inversion lemmas ****************************************************) -corec theorem isdiv_inv_eq_repl: ∀f1,f2. 𝛀⦃f1⦄ → 𝛀⦃f2⦄ → f1 ≗ f2. +corec theorem isdiv_inv_eq_repl: ∀f1,f2. 𝛀⦃f1⦄ → 𝛀⦃f2⦄ → f1 ≡ f2. #f1 #f2 #H1 #H2 cases (isdiv_inv_gen … H1) -H1 cases (isdiv_inv_gen … H2) -H2 @@ -66,11 +66,11 @@ lemma isdiv_eq_repl_fwd: eq_repl_fwd … isdiv. (* Alternative definition ***************************************************) -corec lemma eq_next_isdiv: ∀f. ⫯f ≗ f → 𝛀⦃f⦄. +corec lemma eq_next_isdiv: ∀f. ↑f ≡ f → 𝛀⦃f⦄. #f #H cases (eq_inv_nx … H) -H /4 width=3 by isdiv_next, eq_trans/ qed. -corec lemma eq_next_inv_isdiv: ∀f. 𝛀⦃f⦄ → ⫯f ≗ f. +corec lemma eq_next_inv_isdiv: ∀f. 𝛀⦃f⦄ → ↑f ≡ f. #f * -f #f #g #Hf #Hg @(eq_next … Hg) [2: @eq_next_inv_isdiv // | skip ] @eq_f // @@ -78,13 +78,13 @@ qed-. (* Properties with iterated next ********************************************) -lemma isdiv_nexts: ∀n,f. 𝛀⦃f⦄ → 𝛀⦃⫯*[n]f⦄. +lemma isdiv_nexts: ∀n,f. 𝛀⦃f⦄ → 𝛀⦃↑*[n]f⦄. #n elim n -n /3 width=3 by isdiv_next/ qed. (* Inversion lemmas with iterated next **************************************) -lemma isdiv_inv_nexts: ∀n,g. 𝛀⦃⫯*[n]g⦄ → 𝛀⦃g⦄. +lemma isdiv_inv_nexts: ∀n,g. 𝛀⦃↑*[n]g⦄ → 𝛀⦃g⦄. #n elim n -n /3 width=3 by isdiv_inv_next/ qed. diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isfin.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isfin.ma index 29f6eca5a..f79431a17 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isfin.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isfin.ma @@ -26,8 +26,8 @@ interpretation "test for finite colength (rtmap)" (* Basic eliminators ********************************************************) lemma isfin_ind (R:predicate rtmap): (∀f. 𝐈⦃f⦄ → R f) → - (∀f. 𝐅⦃f⦄ → R f → R (↑f)) → (∀f. 𝐅⦃f⦄ → R f → R (⫯f)) → + (∀f. 𝐅⦃f⦄ → R f → R (↑f)) → ∀f. 𝐅⦃f⦄ → R f. #R #IH1 #IH2 #IH3 #f #H elim H -H #n #H elim H -f -n /3 width=2 by ex_intro/ @@ -35,11 +35,11 @@ qed-. (* Basic inversion lemmas ***************************************************) -lemma isfin_inv_push: ∀g. 𝐅⦃g⦄ → ∀f. ↑f = g → 𝐅⦃f⦄. +lemma isfin_inv_push: ∀g. 𝐅⦃g⦄ → ∀f. ⫯f = g → 𝐅⦃f⦄. #g * /3 width=4 by fcla_inv_px, ex_intro/ qed-. -lemma isfin_inv_next: ∀g. 𝐅⦃g⦄ → ∀f. ⫯f = g → 𝐅⦃f⦄. +lemma isfin_inv_next: ∀g. 𝐅⦃g⦄ → ∀f. ↑f = g → 𝐅⦃f⦄. #g * #n #H #f #H0 elim (fcla_inv_nx … H … H0) -g /2 width=2 by ex_intro/ qed-. @@ -56,23 +56,23 @@ lemma isfin_eq_repl_fwd: eq_repl_fwd … isfin. lemma isfin_isid: ∀f. 𝐈⦃f⦄ → 𝐅⦃f⦄. /3 width=2 by fcla_isid, ex_intro/ qed. -lemma isfin_push: ∀f. 𝐅⦃f⦄ → 𝐅⦃↑f⦄. +lemma isfin_push: ∀f. 𝐅⦃f⦄ → 𝐅⦃⫯f⦄. #f * /3 width=2 by fcla_push, ex_intro/ qed. -lemma isfin_next: ∀f. 𝐅⦃f⦄ → 𝐅⦃⫯f⦄. +lemma isfin_next: ∀f. 𝐅⦃f⦄ → 𝐅⦃↑f⦄. #f * /3 width=2 by fcla_next, ex_intro/ qed. (* Properties with iterated push ********************************************) -lemma isfin_pushs: ∀n,f. 𝐅⦃f⦄ → 𝐅⦃↑*[n]f⦄. +lemma isfin_pushs: ∀n,f. 𝐅⦃f⦄ → 𝐅⦃⫯*[n]f⦄. #n elim n -n /3 width=3 by isfin_push/ qed. (* Inversion lemmas with iterated push **************************************) -lemma isfin_inv_pushs: ∀n,g. 𝐅⦃↑*[n]g⦄ → 𝐅⦃g⦄. +lemma isfin_inv_pushs: ∀n,g. 𝐅⦃⫯*[n]g⦄ → 𝐅⦃g⦄. #n elim n -n /3 width=3 by isfin_inv_push/ qed. diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isid.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isid.ma index 65e111bbf..4fa424d49 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isid.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isid.ma @@ -18,7 +18,7 @@ include "ground_2/relocation/rtmap_tls.ma". (* RELOCATION MAP ***********************************************************) coinductive isid: predicate rtmap ≝ -| isid_push: ∀f,g. isid f → ↑f = g → isid g +| isid_push: ∀f,g. isid f → ⫯f = g → isid g . interpretation "test for identity (rtmap)" @@ -26,26 +26,26 @@ interpretation "test for identity (rtmap)" (* Basic inversion lemmas ***************************************************) -lemma isid_inv_gen: ∀g. 𝐈⦃g⦄ → ∃∃f. 𝐈⦃f⦄ & ↑f = g. +lemma isid_inv_gen: ∀g. 𝐈⦃g⦄ → ∃∃f. 𝐈⦃f⦄ & ⫯f = g. #g * -g #f #g #Hf * /2 width=3 by ex2_intro/ qed-. (* Advanced inversion lemmas ************************************************) -lemma isid_inv_push: ∀g. 𝐈⦃g⦄ → ∀f. ↑f = g → 𝐈⦃f⦄. +lemma isid_inv_push: ∀g. 𝐈⦃g⦄ → ∀f. ⫯f = g → 𝐈⦃f⦄. #g #H elim (isid_inv_gen … H) -H #f #Hf * -g #g #H >(injective_push … H) -H // qed-. -lemma isid_inv_next: ∀g. 𝐈⦃g⦄ → ∀f. ⫯f = g → ⊥. +lemma isid_inv_next: ∀g. 𝐈⦃g⦄ → ∀f. ↑f = g → ⊥. #g #H elim (isid_inv_gen … H) -H #f #Hf * -g #g #H elim (discr_next_push … H) qed-. (* Main inversion lemmas ****************************************************) -corec theorem isid_inv_eq_repl: ∀f1,f2. 𝐈⦃f1⦄ → 𝐈⦃f2⦄ → f1 ≗ f2. +corec theorem isid_inv_eq_repl: ∀f1,f2. 𝐈⦃f1⦄ → 𝐈⦃f2⦄ → f1 ≡ f2. #f1 #f2 #H1 #H2 cases (isid_inv_gen … H1) -H1 cases (isid_inv_gen … H2) -H2 @@ -65,11 +65,11 @@ lemma isid_eq_repl_fwd: eq_repl_fwd … isid. (* Alternative definition ***************************************************) -corec lemma eq_push_isid: ∀f. ↑f ≗ f → 𝐈⦃f⦄. +corec lemma eq_push_isid: ∀f. ⫯f ≡ f → 𝐈⦃f⦄. #f #H cases (eq_inv_px … H) -H /4 width=3 by isid_push, eq_trans/ qed. -corec lemma eq_push_inv_isid: ∀f. 𝐈⦃f⦄ → ↑f ≗ f. +corec lemma eq_push_inv_isid: ∀f. 𝐈⦃f⦄ → ⫯f ≡ f. #f * -f #f #g #Hf #Hg @(eq_push … Hg) [2: @eq_push_inv_isid // | skip ] @eq_f // @@ -77,13 +77,13 @@ qed-. (* Properties with iterated push ********************************************) -lemma isid_pushs: ∀n,f. 𝐈⦃f⦄ → 𝐈⦃↑*[n]f⦄. +lemma isid_pushs: ∀n,f. 𝐈⦃f⦄ → 𝐈⦃⫯*[n]f⦄. #n elim n -n /3 width=3 by isid_push/ qed. (* Inversion lemmas with iterated push **************************************) -lemma isid_inv_pushs: ∀n,g. 𝐈⦃↑*[n]g⦄ → 𝐈⦃g⦄. +lemma isid_inv_pushs: ∀n,g. 𝐈⦃⫯*[n]g⦄ → 𝐈⦃g⦄. #n elim n -n /3 width=3 by isid_inv_push/ qed. diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_istot.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_istot.ma index 9c5c0f71c..e65c3c113 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_istot.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_istot.ma @@ -24,12 +24,12 @@ interpretation "test for totality (rtmap)" (* Basic inversion lemmas ***************************************************) -lemma istot_inv_push: ∀g. 𝐓⦃g⦄ → ∀f. ↑f = g → 𝐓⦃f⦄. -#g #Hg #f #H #i elim (Hg (⫯i)) -Hg +lemma istot_inv_push: ∀g. 𝐓⦃g⦄ → ∀f. ⫯f = g → 𝐓⦃f⦄. +#g #Hg #f #H #i elim (Hg (↑i)) -Hg #j #Hg elim (at_inv_npx … Hg … H) -Hg -H /2 width=3 by ex_intro/ qed-. -lemma istot_inv_next: ∀g. 𝐓⦃g⦄ → ∀f. ⫯f = g → 𝐓⦃f⦄. +lemma istot_inv_next: ∀g. 𝐓⦃g⦄ → ∀f. ↑f = g → 𝐓⦃f⦄. #g #Hg #f #H #i elim (Hg i) -Hg #j #Hg elim (at_inv_xnx … Hg … H) -Hg -H /2 width=2 by ex_intro/ qed-. @@ -51,12 +51,12 @@ qed. corec theorem at_ext: ∀f1,f2. 𝐓⦃f1⦄ → 𝐓⦃f2⦄ → (∀i,i1,i2. @⦃i, f1⦄ ≘ i1 → @⦃i, f2⦄ ≘ i2 → i1 = i2) → - f1 ≗ f2. + f1 ≡ f2. #f1 cases (pn_split f1) * #g1 #H1 #f2 cases (pn_split f2) * #g2 #H2 #Hf1 #Hf2 #Hi [ @(eq_push … H1 H2) @at_ext -at_ext /2 width=3 by istot_inv_push/ -Hf1 -Hf2 - #i #i1 #i2 #Hg1 #Hg2 lapply (Hi (⫯i) (⫯i1) (⫯i2) ??) /2 width=7 by at_push/ + #i #i1 #i2 #Hg1 #Hg2 lapply (Hi (↑i) (↑i1) (↑i2) ??) /2 width=7 by at_push/ | cases (Hf2 0) -Hf1 -Hf2 -at_ext #j2 #Hf2 cases (at_increasing_strict … Hf2 … H2) -H2 lapply (Hi 0 0 j2 … Hf2) /2 width=2 by at_refl/ -Hi -Hf2 -H1 @@ -66,7 +66,7 @@ corec theorem at_ext: ∀f1,f2. 𝐓⦃f1⦄ → 𝐓⦃f2⦄ → lapply (Hi 0 j1 0 Hf1 ?) /2 width=2 by at_refl/ -Hi -Hf1 -H2 #H1 #H cases (lt_le_false … H) -H // | @(eq_next … H1 H2) @at_ext -at_ext /2 width=3 by istot_inv_next/ -Hf1 -Hf2 - #i #i1 #i2 #Hg1 #Hg2 lapply (Hi i (⫯i1) (⫯i2) ??) /2 width=5 by at_next/ + #i #i1 #i2 #Hg1 #Hg2 lapply (Hi i (↑i1) (↑i2) ??) /2 width=5 by at_next/ ] qed-. @@ -91,7 +91,7 @@ lemma is_at_dec_le: ∀f,i2,i. 𝐓⦃f⦄ → (∀i1. i1 + i ≤ i2 → @⦃i1, qed-. lemma is_at_dec: ∀f,i2. 𝐓⦃f⦄ → Decidable (∃i1. @⦃i1, f⦄ ≘ i2). -#f #i2 #Hf @(is_at_dec_le ?? (⫯i2)) /2 width=4 by lt_le_false/ +#f #i2 #Hf @(is_at_dec_le ?? (↑i2)) /2 width=4 by lt_le_false/ qed-. (* Advanced properties on isid **********************************************) diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isuni.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isuni.ma index 273793d93..38443bf59 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isuni.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_isuni.ma @@ -19,7 +19,7 @@ include "ground_2/relocation/rtmap_isfin.ma". inductive isuni: predicate rtmap ≝ | isuni_isid: ∀f. 𝐈⦃f⦄ → isuni f -| isuni_next: ∀f. isuni f → ∀g. ⫯f = g → isuni g +| isuni_next: ∀f. isuni f → ∀g. ↑f = g → isuni g . interpretation "test for uniformity (rtmap)" @@ -27,26 +27,26 @@ interpretation "test for uniformity (rtmap)" (* Basic inversion lemmas ***************************************************) -lemma isuni_inv_push: ∀g. 𝐔⦃g⦄ → ∀f. ↑f = g → 𝐈⦃f⦄. +lemma isuni_inv_push: ∀g. 𝐔⦃g⦄ → ∀f. ⫯f = g → 𝐈⦃f⦄. #g * -g /2 width=3 by isid_inv_push/ #f #_ #g #H #x #Hx destruct elim (discr_push_next … Hx) qed-. -lemma isuni_inv_next: ∀g. 𝐔⦃g⦄ → ∀f. ⫯f = g → 𝐔⦃f⦄. +lemma isuni_inv_next: ∀g. 𝐔⦃g⦄ → ∀f. ↑f = g → 𝐔⦃f⦄. #g * -g #f #Hf [ #x #Hx elim (isid_inv_next … Hf … Hx) | #g #H #x #Hx destruct /2 width=1 by injective_push/ ] qed-. -lemma isuni_split: ∀g. 𝐔⦃g⦄ → (∃∃f. 𝐈⦃f⦄ & ↑f = g) ∨ (∃∃f.𝐔⦃f⦄ & ⫯f = g). +lemma isuni_split: ∀g. 𝐔⦃g⦄ → (∃∃f. 𝐈⦃f⦄ & ⫯f = g) ∨ (∃∃f.𝐔⦃f⦄ & ↑f = g). #g #H elim (pn_split g) * #f #Hf /4 width=3 by isuni_inv_next, isuni_inv_push, or_introl, or_intror, ex2_intro/ qed-. (* basic forward lemmas *****************************************************) -lemma isuni_fwd_push: ∀g. 𝐔⦃g⦄ → ∀f. ↑f = g → 𝐔⦃f⦄. +lemma isuni_fwd_push: ∀g. 𝐔⦃g⦄ → ∀f. ⫯f = g → 𝐔⦃f⦄. /3 width=3 by isuni_inv_push, isuni_isid/ qed-. (* Forward lemmas with test for finite colength *****************************) diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_nexts.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_nexts.ma index 91e916d93..2de10f889 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_nexts.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_nexts.ma @@ -12,28 +12,28 @@ (* *) (**************************************************************************) -include "ground_2/notation/functions/successorstar_2.ma". +include "ground_2/notation/functions/uparrowstar_2.ma". include "ground_2/relocation/rtmap_eq.ma". (* RELOCATION MAP ***********************************************************) rec definition nexts (f:rtmap) (n:nat) on n: rtmap ≝ match n with -[ O ⇒ f | S m ⇒ ⫯(nexts f m) ]. +[ O ⇒ f | S m ⇒ ↑(nexts f m) ]. -interpretation "nexts (rtmap)" 'SuccessorStar n f = (nexts f n). +interpretation "nexts (rtmap)" 'UpArrowStar n f = (nexts f n). (* Basic_inversion lemmas *****************************************************) -lemma eq_inv_nexts_sn: ∀n,f1,g2. ⫯*[n] f1 ≗ g2 → - ∃∃f2. f1 ≗ f2 & ⫯*[n] f2 = g2. +lemma eq_inv_nexts_sn: ∀n,f1,g2. ↑*[n] f1 ≡ g2 → + ∃∃f2. f1 ≡ f2 & ↑*[n] f2 = g2. #n elim n -n /2 width=3 by ex2_intro/ #n #IH #f1 #g2 #H elim (eq_inv_nx … H) -H [|*: // ] #f0 #Hf10 #H1 elim (IH … Hf10) -IH -Hf10 #f2 #Hf12 #H2 destruct /2 width=3 by ex2_intro/ qed-. -lemma eq_inv_nexts_dx: ∀n,f2,g1. g1 ≗ ⫯*[n] f2 → - ∃∃f1. f1 ≗ f2 & ⫯*[n] f1 = g1. +lemma eq_inv_nexts_dx: ∀n,f2,g1. g1 ≡ ↑*[n] f2 → + ∃∃f1. f1 ≡ f2 & ↑*[n] f1 = g1. #n elim n -n /2 width=3 by ex2_intro/ #n #IH #f2 #g1 #H elim (eq_inv_xn … H) -H [|*: // ] #f0 #Hf02 #H1 elim (IH … Hf02) -IH -Hf02 #f1 #Hf12 #H2 destruct @@ -42,18 +42,18 @@ qed-. (* Basic properties *********************************************************) -lemma nexts_O: ∀f. f = ⫯*[0] f. +lemma nexts_O: ∀f. f = ↑*[0] f. // qed. -lemma nexts_S: ∀f,n. ⫯⫯*[n] f = ⫯*[⫯n] f. +lemma nexts_S: ∀f,n. ↑↑*[n] f = ↑*[↑n] f. // qed. -lemma nexts_eq_repl: ∀n. eq_repl (λf1,f2. ⫯*[n] f1 ≗ ⫯*[n] f2). +lemma nexts_eq_repl: ∀n. eq_repl (λf1,f2. ↑*[n] f1 ≡ ↑*[n] f2). #n elim n -n /3 width=5 by eq_next/ qed. (* Advanced properties ******************************************************) -lemma nexts_xn: ∀n,f. ⫯*[n] ⫯f = ⫯*[⫯n] f. +lemma nexts_xn: ∀n,f. ↑*[n] ↑f = ↑*[↑n] f. #n elim n -n // qed. diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_pushs.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_pushs.ma index a1e7ab669..dd88b8c35 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_pushs.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_pushs.ma @@ -12,28 +12,28 @@ (* *) (**************************************************************************) -include "ground_2/notation/functions/liftstar_2.ma". +include "ground_2/notation/functions/upspoonstar_2.ma". include "ground_2/relocation/rtmap_eq.ma". (* RELOCATION MAP ***********************************************************) rec definition pushs (f:rtmap) (n:nat) on n: rtmap ≝ match n with -[ O ⇒ f | S m ⇒ ↑(pushs f m) ]. +[ O ⇒ f | S m ⇒ ⫯(pushs f m) ]. -interpretation "pushs (rtmap)" 'LiftStar n f = (pushs f n). +interpretation "pushs (rtmap)" 'UpSpoonStar n f = (pushs f n). (* Basic_inversion lemmas *****************************************************) -lemma eq_inv_pushs_sn: ∀n,f1,g2. ↑*[n] f1 ≗ g2 → - ∃∃f2. f1 ≗ f2 & ↑*[n] f2 = g2. +lemma eq_inv_pushs_sn: ∀n,f1,g2. ⫯*[n] f1 ≡ g2 → + ∃∃f2. f1 ≡ f2 & ⫯*[n] f2 = g2. #n elim n -n /2 width=3 by ex2_intro/ #n #IH #f1 #g2 #H elim (eq_inv_px … H) -H [|*: // ] #f0 #Hf10 #H1 elim (IH … Hf10) -IH -Hf10 #f2 #Hf12 #H2 destruct /2 width=3 by ex2_intro/ qed-. -lemma eq_inv_pushs_dx: ∀n,f2,g1. g1 ≗ ↑*[n] f2 → - ∃∃f1. f1 ≗ f2 & ↑*[n] f1 = g1. +lemma eq_inv_pushs_dx: ∀n,f2,g1. g1 ≡ ⫯*[n] f2 → + ∃∃f1. f1 ≡ f2 & ⫯*[n] f1 = g1. #n elim n -n /2 width=3 by ex2_intro/ #n #IH #f2 #g1 #H elim (eq_inv_xp … H) -H [|*: // ] #f0 #Hf02 #H1 elim (IH … Hf02) -IH -Hf02 #f1 #Hf12 #H2 destruct @@ -42,18 +42,18 @@ qed-. (* Basic properties *********************************************************) -lemma pushs_O: ∀f. f = ↑*[0] f. +lemma pushs_O: ∀f. f = ⫯*[0] f. // qed. -lemma pushs_S: ∀f,n. ↑↑*[n] f = ↑*[⫯n] f. +lemma pushs_S: ∀f,n. ⫯⫯*[n] f = ⫯*[↑n] f. // qed. -lemma pushs_eq_repl: ∀n. eq_repl (λf1,f2. ↑*[n] f1 ≗ ↑*[n] f2). +lemma pushs_eq_repl: ∀n. eq_repl (λf1,f2. ⫯*[n] f1 ≡ ⫯*[n] f2). #n elim n -n /3 width=5 by eq_push/ qed. (* Advanced properties ******************************************************) -lemma pushs_xn: ∀n,f. ↑*[n] ↑f = ↑*[⫯n] f. +lemma pushs_xn: ∀n,f. ⫯*[n] ⫯f = ⫯*[↑n] f. #n elim n -n // qed. 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 7e97d953b..2a2058c59 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sand.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sand.ma @@ -16,10 +16,10 @@ include "ground_2/notation/relations/rintersection_3.ma". include "ground_2/relocation/rtmap_sle.ma". coinductive sand: relation3 rtmap rtmap rtmap ≝ -| sand_pp: ∀f1,f2,f,g1,g2,g. sand f1 f2 f → ↑f1 = g1 → ↑f2 = g2 → ↑f = g → sand g1 g2 g -| sand_np: ∀f1,f2,f,g1,g2,g. sand f1 f2 f → ⫯f1 = g1 → ↑f2 = g2 → ↑f = g → sand g1 g2 g -| sand_pn: ∀f1,f2,f,g1,g2,g. sand f1 f2 f → ↑f1 = g1 → ⫯f2 = g2 → ↑f = g → sand g1 g2 g -| sand_nn: ∀f1,f2,f,g1,g2,g. sand f1 f2 f → ⫯f1 = g1 → ⫯f2 = g2 → ⫯f = g → sand g1 g2 g +| sand_pp: ∀f1,f2,f,g1,g2,g. sand f1 f2 f → ⫯f1 = g1 → ⫯f2 = g2 → ⫯f = g → sand g1 g2 g +| sand_np: ∀f1,f2,f,g1,g2,g. sand f1 f2 f → ↑f1 = g1 → ⫯f2 = g2 → ⫯f = g → sand g1 g2 g +| sand_pn: ∀f1,f2,f,g1,g2,g. sand f1 f2 f → ⫯f1 = g1 → ↑f2 = g2 → ⫯f = g → sand g1 g2 g +| sand_nn: ∀f1,f2,f,g1,g2,g. sand f1 f2 f → ↑f1 = g1 → ↑f2 = g2 → ↑f = g → sand g1 g2 g . interpretation "intersection (rtmap)" @@ -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) diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sdj.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sdj.ma index 99c6915db..bc0086a60 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sdj.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sdj.ma @@ -18,9 +18,9 @@ include "ground_2/relocation/rtmap_isid.ma". (* RELOCATION MAP ***********************************************************) coinductive sdj: relation rtmap ≝ -| sdj_pp: ∀f1,f2,g1,g2. sdj f1 f2 → ↑f1 = g1 → ↑f2 = g2 → sdj g1 g2 -| sdj_np: ∀f1,f2,g1,g2. sdj f1 f2 → ⫯f1 = g1 → ↑f2 = g2 → sdj g1 g2 -| sdj_pn: ∀f1,f2,g1,g2. sdj f1 f2 → ↑f1 = g1 → ⫯f2 = g2 → sdj g1 g2 +| sdj_pp: ∀f1,f2,g1,g2. sdj f1 f2 → ⫯f1 = g1 → ⫯f2 = g2 → sdj g1 g2 +| sdj_np: ∀f1,f2,g1,g2. sdj f1 f2 → ↑f1 = g1 → ⫯f2 = g2 → sdj g1 g2 +| sdj_pn: ∀f1,f2,g1,g2. sdj f1 f2 → ⫯f1 = g1 → ↑f2 = g2 → sdj g1 g2 . interpretation "disjointness (rtmap)" @@ -49,7 +49,7 @@ qed-. (* Basic inversion lemmas ***************************************************) -lemma sdj_inv_pp: ∀g1,g2. g1 ∥ g2 → ∀f1,f2. ↑f1 = g1 → ↑f2 = g2 → f1 ∥ f2. +lemma sdj_inv_pp: ∀g1,g2. g1 ∥ g2 → ∀f1,f2. ⫯f1 = g1 → ⫯f2 = g2 → f1 ∥ f2. #g1 #g2 * -g1 -g2 #f1 #f2 #g1 #g2 #H #H1 #H2 #x1 #x2 #Hx1 #Hx2 destruct [ lapply (injective_push … Hx1) -Hx1 @@ -59,7 +59,7 @@ lemma sdj_inv_pp: ∀g1,g2. g1 ∥ g2 → ∀f1,f2. ↑f1 = g1 → ↑f2 = g2 ] qed-. -lemma sdj_inv_np: ∀g1,g2. g1 ∥ g2 → ∀f1,f2. ⫯f1 = g1 → ↑f2 = g2 → f1 ∥ f2. +lemma sdj_inv_np: ∀g1,g2. g1 ∥ g2 → ∀f1,f2. ↑f1 = g1 → ⫯f2 = g2 → f1 ∥ f2. #g1 #g2 * -g1 -g2 #f1 #f2 #g1 #g2 #H #H1 #H2 #x1 #x2 #Hx1 #Hx2 destruct [ elim (discr_next_push … Hx1) @@ -69,7 +69,7 @@ lemma sdj_inv_np: ∀g1,g2. g1 ∥ g2 → ∀f1,f2. ⫯f1 = g1 → ↑f2 = g2 ] qed-. -lemma sdj_inv_pn: ∀g1,g2. g1 ∥ g2 → ∀f1,f2. ↑f1 = g1 → ⫯f2 = g2 → f1 ∥ f2. +lemma sdj_inv_pn: ∀g1,g2. g1 ∥ g2 → ∀f1,f2. ⫯f1 = g1 → ↑f2 = g2 → f1 ∥ f2. #g1 #g2 * -g1 -g2 #f1 #f2 #g1 #g2 #H #H1 #H2 #x1 #x2 #Hx1 #Hx2 destruct [ elim (discr_next_push … Hx2) @@ -79,7 +79,7 @@ lemma sdj_inv_pn: ∀g1,g2. g1 ∥ g2 → ∀f1,f2. ↑f1 = g1 → ⫯f2 = g2 ] qed-. -lemma sdj_inv_nn: ∀g1,g2. g1 ∥ g2 → ∀f1,f2. ⫯f1 = g1 → ⫯f2 = g2 → ⊥. +lemma sdj_inv_nn: ∀g1,g2. g1 ∥ g2 → ∀f1,f2. ↑f1 = g1 → ↑f2 = g2 → ⊥. #g1 #g2 * -g1 -g2 #f1 #f2 #g1 #g2 #H #H1 #H2 #x1 #x2 #Hx1 #Hx2 destruct [ elim (discr_next_push … Hx1) @@ -90,33 +90,33 @@ qed-. (* Advanced inversion lemmas ************************************************) -lemma sdj_inv_nx: ∀g1,g2. g1 ∥ g2 → ∀f1. ⫯f1 = g1 → - ∃∃f2. f1 ∥ f2 & ↑f2 = g2. +lemma sdj_inv_nx: ∀g1,g2. g1 ∥ g2 → ∀f1. ↑f1 = g1 → + ∃∃f2. f1 ∥ f2 & ⫯f2 = g2. #g1 #g2 elim (pn_split g2) * #f2 #H2 #H #f1 #H1 [ lapply (sdj_inv_np … H … H1 H2) -H /2 width=3 by ex2_intro/ | elim (sdj_inv_nn … H … H1 H2) ] qed-. -lemma sdj_inv_xn: ∀g1,g2. g1 ∥ g2 → ∀f2. ⫯f2 = g2 → - ∃∃f1. f1 ∥ f2 & ↑f1 = g1. +lemma sdj_inv_xn: ∀g1,g2. g1 ∥ g2 → ∀f2. ↑f2 = g2 → + ∃∃f1. f1 ∥ f2 & ⫯f1 = g1. #g1 #g2 elim (pn_split g1) * #f1 #H1 #H #f2 #H2 [ lapply (sdj_inv_pn … H … H1 H2) -H /2 width=3 by ex2_intro/ | elim (sdj_inv_nn … H … H1 H2) ] qed-. -lemma sdj_inv_xp: ∀g1,g2. g1 ∥ g2 → ∀f2. ↑f2 = g2 → - ∨∨ ∃∃f1. f1 ∥ f2 & ↑f1 = g1 - | ∃∃f1. f1 ∥ f2 & ⫯f1 = g1. +lemma sdj_inv_xp: ∀g1,g2. g1 ∥ g2 → ∀f2. ⫯f2 = g2 → + ∨∨ ∃∃f1. f1 ∥ f2 & ⫯f1 = g1 + | ∃∃f1. f1 ∥ f2 & ↑f1 = g1. #g1 #g2 elim (pn_split g1) * #f1 #H1 #H #f2 #H2 [ lapply (sdj_inv_pp … H … H1 H2) | lapply (sdj_inv_np … H … H1 H2) ] -H -H2 /3 width=3 by ex2_intro, or_introl, or_intror/ qed-. -lemma sdj_inv_px: ∀g1,g2. g1 ∥ g2 → ∀f1. ↑f1 = g1 → - ∨∨ ∃∃f2. f1 ∥ f2 & ↑f2 = g2 - | ∃∃f2. f1 ∥ f2 & ⫯f2 = g2. +lemma sdj_inv_px: ∀g1,g2. g1 ∥ g2 → ∀f1. ⫯f1 = g1 → + ∨∨ ∃∃f2. f1 ∥ f2 & ⫯f2 = g2 + | ∃∃f2. f1 ∥ f2 & ↑f2 = g2. #g1 #g2 elim (pn_split g2) * #f2 #H2 #H #f1 #H1 [ lapply (sdj_inv_pp … H … H1 H2) | lapply (sdj_inv_pn … H … H1 H2) ] -H -H1 /3 width=3 by ex2_intro, or_introl, or_intror/ diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sle.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sle.ma index fb59fcb78..373be5488 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sle.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sle.ma @@ -18,9 +18,9 @@ include "ground_2/relocation/rtmap_isdiv.ma". (* RELOCATION MAP ***********************************************************) coinductive sle: relation rtmap ≝ -| sle_push: ∀f1,f2,g1,g2. sle f1 f2 → ↑f1 = g1 → ↑f2 = g2 → sle g1 g2 -| sle_next: ∀f1,f2,g1,g2. sle f1 f2 → ⫯f1 = g1 → ⫯f2 = g2 → sle g1 g2 -| sle_weak: ∀f1,f2,g1,g2. sle f1 f2 → ↑f1 = g1 → ⫯f2 = g2 → sle g1 g2 +| sle_push: ∀f1,f2,g1,g2. sle f1 f2 → ⫯f1 = g1 → ⫯f2 = g2 → sle g1 g2 +| sle_next: ∀f1,f2,g1,g2. sle f1 f2 → ↑f1 = g1 → ↑f2 = g2 → sle g1 g2 +| sle_weak: ∀f1,f2,g1,g2. sle f1 f2 → ⫯f1 = g1 → ↑f2 = g2 → sle g1 g2 . interpretation "inclusion (rtmap)" @@ -45,28 +45,28 @@ corec lemma sle_refl: ∀f. f ⊆ f. [ @(sle_push … H H) | @(sle_next … H H) ] -H // qed. -lemma sle_refl_eq: ∀f1,f2. f1 ≗ f2 → f1 ⊆ f2. +lemma sle_refl_eq: ∀f1,f2. f1 ≡ f2 → f1 ⊆ f2. /2 width=3 by sle_eq_repl_back2/ qed. (* Basic inversion lemmas ***************************************************) -lemma sle_inv_xp: ∀g1,g2. g1 ⊆ g2 → ∀f2. ↑f2 = g2 → - ∃∃f1. f1 ⊆ f2 & ↑f1 = g1. +lemma sle_inv_xp: ∀g1,g2. g1 ⊆ g2 → ∀f2. ⫯f2 = g2 → + ∃∃f1. f1 ⊆ f2 & ⫯f1 = g1. #g1 #g2 * -g1 -g2 #f1 #f2 #g1 #g2 #H #H1 #H2 #x2 #Hx2 destruct [ lapply (injective_push … Hx2) -Hx2 /2 width=3 by ex2_intro/ ] elim (discr_push_next … Hx2) qed-. -lemma sle_inv_nx: ∀g1,g2. g1 ⊆ g2 → ∀f1. ⫯f1 = g1 → - ∃∃f2. f1 ⊆ f2 & ⫯f2 = g2. +lemma sle_inv_nx: ∀g1,g2. g1 ⊆ g2 → ∀f1. ↑f1 = g1 → + ∃∃f2. f1 ⊆ f2 & ↑f2 = g2. #g1 #g2 * -g1 -g2 #f1 #f2 #g1 #g2 #H #H1 #H2 #x1 #Hx1 destruct [2: lapply (injective_next … Hx1) -Hx1 /2 width=3 by ex2_intro/ ] elim (discr_next_push … Hx1) qed-. -lemma sle_inv_pn: ∀g1,g2. g1 ⊆ g2 → ∀f1,f2. ↑f1 = g1 → ⫯f2 = g2 → f1 ⊆ f2. +lemma sle_inv_pn: ∀g1,g2. g1 ⊆ g2 → ∀f1,f2. ⫯f1 = g1 → ↑f2 = g2 → f1 ⊆ f2. #g1 #g2 * -g1 -g2 #f1 #f2 #g1 #g2 #H #H1 #H2 #x1 #x2 #Hx1 #Hx2 destruct [ elim (discr_next_push … Hx2) @@ -78,25 +78,25 @@ qed-. (* Advanced inversion lemmas ************************************************) -lemma sle_inv_pp: ∀g1,g2. g1 ⊆ g2 → ∀f1,f2. ↑f1 = g1 → ↑f2 = g2 → f1 ⊆ f2. +lemma sle_inv_pp: ∀g1,g2. g1 ⊆ g2 → ∀f1,f2. ⫯f1 = g1 → ⫯f2 = g2 → f1 ⊆ f2. #g1 #g2 #H #f1 #f2 #H1 #H2 elim (sle_inv_xp … H … H2) -g2 #x1 #H #Hx1 destruct lapply (injective_push … Hx1) -Hx1 // qed-. -lemma sle_inv_nn: ∀g1,g2. g1 ⊆ g2 → ∀f1,f2. ⫯f1 = g1 → ⫯f2 = g2 → f1 ⊆ f2. +lemma sle_inv_nn: ∀g1,g2. g1 ⊆ g2 → ∀f1,f2. ↑f1 = g1 → ↑f2 = g2 → f1 ⊆ f2. #g1 #g2 #H #f1 #f2 #H1 #H2 elim (sle_inv_nx … H … H1) -g1 #x2 #H #Hx2 destruct lapply (injective_next … Hx2) -Hx2 // qed-. -lemma sle_inv_px: ∀g1,g2. g1 ⊆ g2 → ∀f1. ↑f1 = g1 → - (∃∃f2. f1 ⊆ f2 & ↑f2 = g2) ∨ ∃∃f2. f1 ⊆ f2 & ⫯f2 = g2. +lemma sle_inv_px: ∀g1,g2. g1 ⊆ g2 → ∀f1. ⫯f1 = g1 → + (∃∃f2. f1 ⊆ f2 & ⫯f2 = g2) ∨ ∃∃f2. f1 ⊆ f2 & ↑f2 = g2. #g1 #g2 elim (pn_split g2) * #f2 #H2 #H #f1 #H1 [ lapply (sle_inv_pp … H … H1 H2) | lapply (sle_inv_pn … H … H1 H2) ] -H -H1 /3 width=3 by ex2_intro, or_introl, or_intror/ qed-. -lemma sle_inv_xn: ∀g1,g2. g1 ⊆ g2 → ∀f2. ⫯f2 = g2 → - (∃∃f1. f1 ⊆ f2 & ↑f1 = g1) ∨ ∃∃f1. f1 ⊆ f2 & ⫯f1 = g1. +lemma sle_inv_xn: ∀g1,g2. g1 ⊆ g2 → ∀f2. ↑f2 = g2 → + (∃∃f1. f1 ⊆ f2 & ⫯f1 = g1) ∨ ∃∃f1. f1 ⊆ f2 & ↑f1 = g1. #g1 #g2 elim (pn_split g1) * #f1 #H1 #H #f2 #H2 [ lapply (sle_inv_pn … H … H1 H2) | lapply (sle_inv_nn … H … H1 H2) ] -H -H2 /3 width=3 by ex2_intro, or_introl, or_intror/ @@ -113,17 +113,17 @@ qed-. (* Properties with iteraded push ********************************************) -lemma sle_pushs: ∀f1,f2. f1 ⊆ f2 → ∀i. ↑*[i] f1 ⊆ ↑*[i] f2. +lemma sle_pushs: ∀f1,f2. f1 ⊆ f2 → ∀i. ⫯*[i] f1 ⊆ ⫯*[i] f2. #f1 #f2 #Hf12 #i elim i -i /2 width=5 by sle_push/ qed. (* Properties with tail *****************************************************) -lemma sle_px_tl: ∀g1,g2. g1 ⊆ g2 → ∀f1. ↑f1 = g1 → f1 ⊆ ⫱g2. +lemma sle_px_tl: ∀g1,g2. g1 ⊆ g2 → ∀f1. ⫯f1 = g1 → f1 ⊆ ⫱g2. #g1 #g2 #H #f1 #H1 elim (sle_inv_px … H … H1) -H -H1 * // qed. -lemma sle_xn_tl: ∀g1,g2. g1 ⊆ g2 → ∀f2. ⫯f2 = g2 → ⫱g1 ⊆ f2. +lemma sle_xn_tl: ∀g1,g2. g1 ⊆ g2 → ∀f2. ↑f2 = g2 → ⫱g1 ⊆ f2. #g1 #g2 #H #f2 #H2 elim (sle_inv_xn … H … H2) -H -H2 * // qed. @@ -136,12 +136,12 @@ qed. (* Inversion lemmas with tail ***********************************************) -lemma sle_inv_tl_sn: ∀f1,f2. ⫱f1 ⊆ f2 → f1 ⊆ ⫯f2. +lemma sle_inv_tl_sn: ∀f1,f2. ⫱f1 ⊆ f2 → f1 ⊆ ↑f2. #f1 elim (pn_split f1) * #g1 #H destruct /2 width=5 by sle_next, sle_weak/ qed-. -lemma sle_inv_tl_dx: ∀f1,f2. f1 ⊆ ⫱f2 → ↑f1 ⊆ f2. +lemma sle_inv_tl_dx: ∀f1,f2. f1 ⊆ ⫱f2 → ⫯f1 ⊆ f2. #f1 #f2 elim (pn_split f2) * #g2 #H destruct /2 width=5 by sle_push, sle_weak/ qed-. 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 a461157d6..6070b9411 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sor.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_sor.ma @@ -17,10 +17,10 @@ include "ground_2/relocation/rtmap_isfin.ma". include "ground_2/relocation/rtmap_sle.ma". coinductive sor: relation3 rtmap rtmap rtmap ≝ -| sor_pp: ∀f1,f2,f,g1,g2,g. sor f1 f2 f → ↑f1 = g1 → ↑f2 = g2 → ↑f = g → sor g1 g2 g -| sor_np: ∀f1,f2,f,g1,g2,g. sor f1 f2 f → ⫯f1 = g1 → ↑f2 = g2 → ⫯f = g → sor g1 g2 g -| sor_pn: ∀f1,f2,f,g1,g2,g. sor f1 f2 f → ↑f1 = g1 → ⫯f2 = g2 → ⫯f = g → sor g1 g2 g -| sor_nn: ∀f1,f2,f,g1,g2,g. sor f1 f2 f → ⫯f1 = g1 → ⫯f2 = g2 → ⫯f = g → sor g1 g2 g +| sor_pp: ∀f1,f2,f,g1,g2,g. sor f1 f2 f → ⫯f1 = g1 → ⫯f2 = g2 → ⫯f = g → sor g1 g2 g +| sor_np: ∀f1,f2,f,g1,g2,g. sor f1 f2 f → ↑f1 = g1 → ⫯f2 = g2 → ↑f = g → sor g1 g2 g +| sor_pn: ∀f1,f2,f,g1,g2,g. sor f1 f2 f → ⫯f1 = g1 → ↑f2 = g2 → ↑f = g → sor g1 g2 g +| sor_nn: ∀f1,f2,f,g1,g2,g. sor f1 f2 f → ↑f1 = g1 → ↑f2 = g2 → ↑f = g → sor g1 g2 g . interpretation "union (rtmap)" @@ -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) @@ -75,14 +75,14 @@ qed-. (* Advanced inversion lemmas ************************************************) lemma sor_inv_ppn: ∀g1,g2,g. g1 ⋓ g2 ≘ g → - ∀f1,f2,f. ↑f1 = g1 → ↑f2 = g2 → ⫯f = 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 → - ∀f1,f. ⫯f1 = g1 → ↑f = g → ⊥. + ∀f1,f. ↑f1 = g1 → ⫯f = g → ⊥. #g1 #g2 #g #H #f1 #f #H1 #H0 elim (pn_split g2) * #f2 #H2 [ elim (sor_inv_npx … H … H1 H2) @@ -92,7 +92,7 @@ elim (pn_split g2) * #f2 #H2 qed-. lemma sor_inv_xnp: ∀g1,g2,g. g1 ⋓ g2 ≘ g → - ∀f2,f. ⫯f2 = g2 → ↑f = g → ⊥. + ∀f2,f. ↑f2 = g2 → ⫯f = g → ⊥. #g1 #g2 #g #H #f2 #f #H2 #H0 elim (pn_split g1) * #f1 #H1 [ elim (sor_inv_pnx … H … H1 H2) @@ -102,36 +102,36 @@ elim (pn_split g1) * #f1 #H1 qed-. lemma sor_inv_ppp: ∀g1,g2,g. g1 ⋓ g2 ≘ g → - ∀f1,f2,f. ↑f1 = g1 → ↑f2 = g2 → ↑f = g → f1 ⋓ f2 ≘ f. + ∀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. + ∀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. + ∀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. + ∀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 → - ∀f1,f. ↑f1 = g1 → ↑f = g → - ∃∃f2. f1 ⋓ f2 ≘ f & ↑f2 = g2. + ∀f1,f. ⫯f1 = g1 → ⫯f = g → + ∃∃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/ @@ -140,8 +140,8 @@ elim (pn_split g2) * #f2 #H2 qed-. lemma sor_inv_xpp: ∀g1,g2,g. g1 ⋓ g2 ≘ g → - ∀f2,f. ↑f2 = g2 → ↑f = g → - ∃∃f1. f1 ⋓ f2 ≘ f & ↑f1 = g1. + ∀f2,f. ⫯f2 = g2 → ⫯f = g → + ∃∃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/ @@ -150,8 +150,8 @@ elim (pn_split g1) * #f1 #H1 qed-. lemma sor_inv_pxn: ∀g1,g2,g. g1 ⋓ g2 ≘ g → - ∀f1,f. ↑f1 = g1 → ⫯f = g → - ∃∃f2. f1 ⋓ f2 ≘ f & ⫯f2 = g2. + ∀f1,f. ⫯f1 = g1 → ↑f = g → + ∃∃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) @@ -160,8 +160,8 @@ elim (pn_split g2) * #f2 #H2 qed-. lemma sor_inv_xpn: ∀g1,g2,g. g1 ⋓ g2 ≘ g → - ∀f2,f. ↑f2 = g2 → ⫯f = g → - ∃∃f1. f1 ⋓ f2 ≘ f & ⫯f1 = g1. + ∀f2,f. ⫯f2 = g2 → ↑f = g → + ∃∃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/ @@ -179,25 +179,25 @@ elim (pn_split g1) * #f1 #H1 qed-. 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. + ∀f1,f. ↑f1 = g1 → ↑f = g → + (∃∃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 → - ∀f2,f. ⫯f2 = g2 → ⫯f = g → - (∃∃f1. f1 ⋓ f2 ≘ f & ↑f1 = g1) ∨ - ∃∃f1. f1 ⋓ f2 ≘ f & ⫯f1 = g1. + ∀f2,f. ↑f2 = g2 → ↑f = g → + (∃∃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) @@ -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/ @@ -326,23 +326,23 @@ lemma sor_isid: ∀f1,f2,f. 𝐈⦃f1⦄ → 𝐈⦃f2⦄ → 𝐈⦃f⦄ → f1 (* 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-. diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_tl.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_tl.ma index 588f0d224..3ef75c04c 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_tl.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_tl.ma @@ -28,14 +28,14 @@ interpretation "tail (rtmap)" 'DropPred f = (tl f). lemma tl_rew: ∀f. case_type0 (λ_:rtmap.rtmap) (λf:rtmap.f) (λf:rtmap.f) f = ⫱f. // qed. -lemma tl_push_rew: ∀f. f = ⫱↑f. +lemma tl_push_rew: ∀f. f = ⫱⫯f. #f (plus_n_O n) /2 width=1 by isrt_plus/ qed. -lemma isrt_succ: ∀n,c. 𝐑𝐓⦃n, c⦄ → 𝐑𝐓⦃⫯n, c+𝟘𝟙⦄. +lemma isrt_succ: ∀n,c. 𝐑𝐓⦃n, c⦄ → 𝐑𝐓⦃↑n, c+𝟘𝟙⦄. /2 width=1 by isrt_plus/ qed. (* Inversion properties with test for constrained rt-transition counter *****) @@ -87,7 +87,7 @@ lapply (isrt_inj … Hn2 H2) -c2 #H destruct // qed-. lemma isrt_inv_plus_SO_dx: ∀n,c1,c2. 𝐑𝐓⦃n, c1 + c2⦄ → 𝐑𝐓⦃1, c2⦄ → - ∃∃m. 𝐑𝐓⦃m, c1⦄ & n = ⫯m. + ∃∃m. 𝐑𝐓⦃m, c1⦄ & n = ↑m. #n #c1 #c2 #H #H2 elim (isrt_inv_plus … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct lapply (isrt_inj … Hn2 H2) -c2 #H destruct diff --git a/matita/matita/contribs/lambdadelta/ground_2/steps/rtc_shift.ma b/matita/matita/contribs/lambdadelta/ground_2/steps/rtc_shift.ma index cb2c38284..e2f739d69 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/steps/rtc_shift.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/steps/rtc_shift.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "ground_2/notation/functions/drop_1.ma". +include "ground_2/notation/functions/updownarrowstar_1.ma". include "ground_2/steps/rtc_isrt.ma". (* RT-TRANSITION COUNTER ****************************************************) @@ -21,20 +21,20 @@ definition shift (c:rtc): rtc ≝ match c with [ mk_rtc ri rs ti ts ⇒ 〈ri∨rs, 0, ti∨ts, 0〉 ]. interpretation "shift (rtc)" - 'Drop c = (shift c). + 'UpDownArrowStar c = (shift c). (* Basic properties *********************************************************) -lemma shift_rew: ∀ri,rs,ti,ts. 〈ri∨rs, 0, ti∨ts, 0〉 = ↓〈ri, rs, ti, ts〉. +lemma shift_rew: ∀ri,rs,ti,ts. 〈ri∨rs, 0, ti∨ts, 0〉 = ↕*〈ri, rs, ti, ts〉. normalize // qed. -lemma shift_O: 𝟘𝟘 = ↓𝟘𝟘. +lemma shift_O: 𝟘𝟘 = ↕*𝟘𝟘. // qed. (* Basic inversion properties ***********************************************) -lemma shift_inv_dx: ∀ri,rs,ti,ts,c. 〈ri, rs, ti, ts〉 = ↓c → +lemma shift_inv_dx: ∀ri,rs,ti,ts,c. 〈ri, rs, ti, ts〉 = ↕*c → ∃∃ri0,rs0,ti0,ts0. (ri0∨rs0) = ri & 0 = rs & (ti0∨ts0) = ti & 0 = ts & 〈ri0, rs0, ti0, ts0〉 = c. #ri #rs #ti #ts * #ri0 #rs0 #ti0 #ts0 yplus_succ2 /2 width=1 by ysucc_inv_inj/ qed-. -lemma yplus_inv_succ_lt_sn: ∀x,y,z:ynat. 0 < x → x + y = ⫯z → ⫰x + y = z. +lemma yplus_inv_succ_lt_sn: ∀x,y,z:ynat. 0 < x → x + y = ↑z → ↓x + y = z. #x #y #z #H <(ylt_inv_O1 x) // >yplus_succ1 /2 width=1 by ysucc_inv_inj/ @@ -168,13 +168,13 @@ lemma ylt_inv_plus_Y: ∀x,y. x + y < ∞ → x < ∞ ∧ y < ∞. #z #H elim (yplus_inv_inj … H) -H /2 width=1 by conj/ qed-. -lemma ylt_inv_plus_sn: ∀x,y. x < y → ∃∃z. ⫯z + x = y & x < ∞. +lemma ylt_inv_plus_sn: ∀x,y. x < y → ∃∃z. ↑z + x = y & x < ∞. #x #y #H elim (ylt_inv_le … H) -H #Hx #H elim (yle_inv_plus_sn … H) -H /2 width=2 by ex2_intro/ qed-. -lemma ylt_inv_plus_dx: ∀x,y. x < y → ∃∃z. x + ⫯z = y & x < ∞. +lemma ylt_inv_plus_dx: ∀x,y. x < y → ∃∃z. x + ↑z = y & x < ∞. #x #y #H elim (ylt_inv_plus_sn … H) -H #z >yplus_comm /2 width=2 by ex2_intro/ qed-. @@ -302,11 +302,11 @@ qed-. (* Properties on predeccessor ***********************************************) -lemma yplus_pred1: ∀x,y:ynat. 0 < x → ⫰x + y = ⫰(x+y). +lemma yplus_pred1: ∀x,y:ynat. 0 < x → ↓x + y = ↓(x+y). #x * // #y elim y -y // #y #IH #Hx >yplus_S2 >yplus_S2 >IH -IH // >ylt_inv_O1 /2 width=1 by ylt_plus_dx1_trans/ qed-. -lemma yplus_pred2: ∀x,y:ynat. 0 < y → x + ⫰y = ⫰(x+y). +lemma yplus_pred2: ∀x,y:ynat. 0 < y → x + ↓y = ↓(x+y). /2 width=1 by yplus_pred1/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground_2/ynat/ynat_pred.ma b/matita/matita/contribs/lambdadelta/ground_2/ynat/ynat_pred.ma index 07fed2a50..b49dbda04 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/ynat/ynat_pred.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/ynat/ynat_pred.ma @@ -18,24 +18,24 @@ include "ground_2/ynat/ynat.ma". (* the predecessor function *) definition ypred: ynat → ynat ≝ λm. match m with -[ yinj m ⇒ ⫰m +[ yinj m ⇒ ↓m | Y ⇒ Y ]. -interpretation "ynat predecessor" 'Predecessor m = (ypred m). +interpretation "ynat predecessor" 'DownArrow m = (ypred m). -lemma ypred_O: ⫰(yinj 0) = yinj 0. +lemma ypred_O: ↓(yinj 0) = yinj 0. // qed. -lemma ypred_S: ∀m:nat. ⫰(⫯m) = yinj m. +lemma ypred_S: ∀m:nat. ↓(↑m) = yinj m. // qed. -lemma ypred_Y: (⫰∞) = ∞. +lemma ypred_Y: (↓∞) = ∞. // qed. (* Inversion lemmas *********************************************************) -lemma ypred_inv_refl: ∀m:ynat. ⫰m = m → m = 0 ∨ m = ∞. +lemma ypred_inv_refl: ∀m:ynat. ↓m = m → m = 0 ∨ m = ∞. * // #m #H lapply (yinj_inj … H) -H (**) (* destruct lemma needed *) /4 width=1 by pred_inv_refl, or_introl, eq_f/ qed-. diff --git a/matita/matita/contribs/lambdadelta/ground_2/ynat/ynat_succ.ma b/matita/matita/contribs/lambdadelta/ground_2/ynat/ynat_succ.ma index f08e63293..d0c7b3fda 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/ynat/ynat_succ.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/ynat/ynat_succ.ma @@ -18,24 +18,24 @@ include "ground_2/ynat/ynat_pred.ma". (* the successor function *) definition ysucc: ynat → ynat ≝ λm. match m with -[ yinj m ⇒ ⫯m +[ yinj m ⇒ ↑m | Y ⇒ Y ]. -interpretation "ynat successor" 'Successor m = (ysucc m). +interpretation "ynat successor" 'UpArrow m = (ysucc m). -lemma ysucc_inj: ∀m:nat. ⫯(yinj m) = yinj (⫯m). +lemma ysucc_inj: ∀m:nat. ↑(yinj m) = yinj (↑m). // qed. -lemma ysucc_Y: ⫯(∞) = ∞. +lemma ysucc_Y: ↑(∞) = ∞. // qed. (* Properties ***************************************************************) -lemma ypred_succ: ∀m. ⫰⫯m = m. +lemma ypred_succ: ∀m. ↓↑m = m. * // qed. -lemma ynat_cases: ∀n:ynat. n = 0 ∨ ∃m:ynat. n = ⫯m. +lemma ynat_cases: ∀n:ynat. n = 0 ∨ ∃m:ynat. n = ↑m. * [ * /2 width=1 by or_introl/ #n @or_intror @(ex_intro … n) // (**) (* explicit constructor *) @@ -50,17 +50,17 @@ qed. (* Inversion lemmas *********************************************************) -lemma ysucc_inv_inj: ∀m,n. ⫯m = ⫯n → m = n. +lemma ysucc_inv_inj: ∀m,n. ↑m = ↑n → m = n. #m #n #H <(ypred_succ m) <(ypred_succ n) // qed-. -lemma ysucc_inv_refl: ∀m. ⫯m = m → m = ∞. +lemma ysucc_inv_refl: ∀m. ↑m = m → m = ∞. * // #m #H lapply (yinj_inj … H) -H (**) (* destruct lemma needed *) #H elim (lt_refl_false m) // qed-. -lemma ysucc_inv_inj_sn: ∀m2,n1. yinj m2 = ⫯n1 → +lemma ysucc_inv_inj_sn: ∀m2,n1. yinj m2 = ↑n1 → ∃∃m1. n1 = yinj m1 & m2 = S m1. #m2 * normalize [ #n1 #H destruct /2 width=3 by ex2_intro/ @@ -68,30 +68,30 @@ lemma ysucc_inv_inj_sn: ∀m2,n1. yinj m2 = ⫯n1 → ] qed-. -lemma ysucc_inv_inj_dx: ∀m2,n1. ⫯n1 = yinj m2 → +lemma ysucc_inv_inj_dx: ∀m2,n1. ↑n1 = yinj m2 → ∃∃m1. n1 = yinj m1 & m2 = S m1. /2 width=1 by ysucc_inv_inj_sn/ qed-. -lemma ysucc_inv_Y_sn: ∀m. ∞ = ⫯m → m = ∞. +lemma ysucc_inv_Y_sn: ∀m. ∞ = ↑m → m = ∞. * // normalize #m #H destruct qed-. -lemma ysucc_inv_Y_dx: ∀m. ⫯m = ∞ → m = ∞. +lemma ysucc_inv_Y_dx: ∀m. ↑m = ∞ → m = ∞. /2 width=1 by ysucc_inv_Y_sn/ qed-. -lemma ysucc_inv_O_sn: ∀m. yinj 0 = ⫯m → ⊥. (**) (* explicit coercion *) +lemma ysucc_inv_O_sn: ∀m. yinj 0 = ↑m → ⊥. (**) (* explicit coercion *) #m #H elim (ysucc_inv_inj_sn … H) -H #n #_ #H destruct qed-. -lemma ysucc_inv_O_dx: ∀m:ynat. ⫯m = 0 → ⊥. +lemma ysucc_inv_O_dx: ∀m:ynat. ↑m = 0 → ⊥. /2 width=2 by ysucc_inv_O_sn/ qed-. (* Eliminators **************************************************************) lemma ynat_ind: ∀R:predicate ynat. - R 0 → (∀n:nat. R n → R (⫯n)) → R (∞) → + R 0 → (∀n:nat. R n → R (↑n)) → R (∞) → ∀x. R x. #R #H1 #H2 #H3 * // #n elim n -n /2 width=1 by/ qed-. diff --git a/matita/matita/contribs/lambdadelta/replace.sh b/matita/matita/contribs/lambdadelta/replace.sh index a70adc669..e121468e2 100644 --- a/matita/matita/contribs/lambdadelta/replace.sh +++ b/matita/matita/contribs/lambdadelta/replace.sh @@ -1,11 +1,10 @@ #!/bin/sh -for MA in `find basic_2 -name "*.ma"`; do -#for MA in `find -name "cpg*.ma" -or -name "cpx*.ma"`; do - sed "s!$1!$2!g" ${MA} > ${MA}.new - if [ ! -s ${MA}.new ] || diff ${MA} ${MA}.new > /dev/null; - then rm -f ${MA}.new; - else echo ${MA}; mv -f ${MA} ${MA}.old; mv -f ${MA}.new ${MA}; +for SRC in `find ground_2 basic_2 -name "*.ma" -or -name "*.tbl"`; do + sed "s!$1!$2!g" ${SRC} > ${SRC}.new + if [ ! -s ${SRC}.new ] || diff ${SRC} ${SRC}.new > /dev/null; + then rm -f ${SRC}.new; + else echo ${SRC}; mv -f ${SRC} ${SRC}.old; mv -f ${SRC}.new ${SRC}; fi done -unset MA +unset SRC diff --git a/matita/matita/predefined_virtuals.ml b/matita/matita/predefined_virtuals.ml index f2da70f44..e7814e5f3 100644 --- a/matita/matita/predefined_virtuals.ml +++ b/matita/matita/predefined_virtuals.ml @@ -1518,7 +1518,7 @@ let predefined_classes = [ ["^"; "↑"; ] ; ["⇑"; "⇧"; "⬆"; ] ; ["⇓"; "⇩"; "⬇"; "⬊"; "➷"; ] ; - ["⇕"; "⇳"; "⬍"; ]; + ["⇕"; "⇳"; "⬍"; "↕"; ]; ["↔"; "⇔"; "⬄"; "⬌"; ] ; ["≤"; "≲"; "≼"; "≰"; "≴"; "⋠"; "⊆"; "⫃"; "⊑"; ] ; ["_"; "↓"; "↙"; "⎽"; "⎼"; "⎻"; "⎺"; ]; -- 2.39.2