X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fground_2%2Frelocation%2Frtmap_after.ma;h=b2ec8605cd6dcabd3d60a18283b2236726ae46c0;hb=bd53c4e895203eb049e75434f638f26b5a161a2b;hp=4ca5caf746694bedf22ee49ee1ee1cf5444a8a0b;hpb=f4e73c50acfc4ed453edd423c9bbe28af5dc9c4c;p=helm.git diff --git a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_after.ma b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_after.ma index 4ca5caf74..b2ec8605c 100644 --- a/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_after.ma +++ b/matita/matita/contribs/lambdadelta/ground_2/relocation/rtmap_after.ma @@ -19,24 +19,24 @@ include "ground_2/relocation/rtmap_istot.ma". coinductive after: relation3 rtmap rtmap rtmap ≝ | after_refl: ∀f1,f2,f,g1,g2,g. - after f1 f2 f → ↑f1 = g1 → ↑f2 = g2 → ↑f = g → after g1 g2 g + after f1 f2 f → ⫯f1 = g1 → ⫯f2 = g2 → ⫯f = g → after g1 g2 g | after_push: ∀f1,f2,f,g1,g2,g. - after f1 f2 f → ↑f1 = g1 → ⫯f2 = g2 → ⫯f = g → after g1 g2 g + after f1 f2 f → ⫯f1 = g1 → ↑f2 = g2 → ↑f = g → after g1 g2 g | after_next: ∀f1,f2,f,g1,g. - after f1 f2 f → ⫯f1 = g1 → ⫯f = g → after g1 f2 g + after f1 f2 f → ↑f1 = g1 → ↑f = g → after g1 f2 g . interpretation "relational composition (rtmap)" 'RAfter f1 f2 f = (after f1 f2 f). definition H_after_inj: predicate rtmap ≝ - λf1. 𝐓⦃f1⦄ → - ∀f,f21,f22. f1 ⊚ f21 ≡ f → f1 ⊚ f22 ≡ f → f21 ≗ f22. + λf1. 𝐓❪f1❫ → + ∀f,f21,f22. f1 ⊚ f21 ≘ f → f1 ⊚ f22 ≘ f → f21 ≡ f22. (* Basic inversion lemmas ***************************************************) -lemma after_inv_ppx: ∀g1,g2,g. g1 ⊚ g2 ≡ g → ∀f1,f2. ↑f1 = g1 → ↑f2 = g2 → - ∃∃f. f1 ⊚ f2 ≡ f & ↑f = g. +lemma after_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 #H #x1 #x2 #Hx1 #Hx2 destruct >(injective_push … Hx1) >(injective_push … Hx2) -x2 -x1 @@ -48,8 +48,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) @@ -61,8 +61,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) @@ -76,71 +76,71 @@ qed-. (* Advanced inversion lemmas ************************************************) -lemma after_inv_ppp: ∀g1,g2,g. g1 ⊚ g2 ≡ g → - ∀f1,f2,f. ↑f1 = g1 → ↑f2 = g2 → ↑f = g → f1 ⊚ f2 ≡ f. +lemma after_inv_ppp: ∀g1,g2,g. g1 ⊚ g2 ≘ g → + ∀f1,f2,f. ⫯f1 = g1 → ⫯f2 = g2 → ⫯f = g → f1 ⊚ f2 ≘ f. #g1 #g2 #g #Hg #f1 #f2 #f #H1 #H2 #H elim (after_inv_ppx … Hg … H1 H2) -g1 -g2 #x #Hf #Hx destruct <(injective_push … Hx) -f // qed-. -lemma after_inv_ppn: ∀g1,g2,g. g1 ⊚ g2 ≡ g → - ∀f1,f2,f. ↑f1 = g1 → ↑f2 = g2 → ⫯f = g → ⊥. +lemma after_inv_ppn: ∀g1,g2,g. g1 ⊚ g2 ≘ g → + ∀f1,f2,f. ⫯f1 = g1 → ⫯f2 = g2 → ↑f = g → ⊥. #g1 #g2 #g #Hg #f1 #f2 #f #H1 #H2 #H elim (after_inv_ppx … Hg … H1 H2) -g1 -g2 #x #Hf #Hx destruct elim (discr_push_next … Hx) qed-. -lemma after_inv_pnn: ∀g1,g2,g. g1 ⊚ g2 ≡ g → - ∀f1,f2,f. ↑f1 = g1 → ⫯f2 = g2 → ⫯f = g → f1 ⊚ f2 ≡ f. +lemma after_inv_pnn: ∀g1,g2,g. g1 ⊚ g2 ≘ g → + ∀f1,f2,f. ⫯f1 = g1 → ↑f2 = g2 → ↑f = g → f1 ⊚ f2 ≘ f. #g1 #g2 #g #Hg #f1 #f2 #f #H1 #H2 #H elim (after_inv_pnx … Hg … H1 H2) -g1 -g2 #x #Hf #Hx destruct <(injective_next … Hx) -f // qed-. -lemma after_inv_pnp: ∀g1,g2,g. g1 ⊚ g2 ≡ g → - ∀f1,f2,f. ↑f1 = g1 → ⫯f2 = g2 → ↑f = g → ⊥. +lemma after_inv_pnp: ∀g1,g2,g. g1 ⊚ g2 ≘ g → + ∀f1,f2,f. ⫯f1 = g1 → ↑f2 = g2 → ⫯f = g → ⊥. #g1 #g2 #g #Hg #f1 #f2 #f #H1 #H2 #H elim (after_inv_pnx … Hg … H1 H2) -g1 -g2 #x #Hf #Hx destruct elim (discr_next_push … Hx) qed-. -lemma after_inv_nxn: ∀g1,f2,g. g1 ⊚ f2 ≡ g → - ∀f1,f. ⫯f1 = g1 → ⫯f = g → f1 ⊚ f2 ≡ f. +lemma after_inv_nxn: ∀g1,f2,g. g1 ⊚ f2 ≘ g → + ∀f1,f. ↑f1 = g1 → ↑f = g → f1 ⊚ f2 ≘ f. #g1 #f2 #g #Hg #f1 #f #H1 #H elim (after_inv_nxx … Hg … H1) -g1 #x #Hf #Hx destruct <(injective_next … Hx) -f // qed-. -lemma after_inv_nxp: ∀g1,f2,g. g1 ⊚ f2 ≡ g → - ∀f1,f. ⫯f1 = g1 → ↑f = g → ⊥. +lemma after_inv_nxp: ∀g1,f2,g. g1 ⊚ f2 ≘ g → + ∀f1,f. ↑f1 = g1 → ⫯f = g → ⊥. #g1 #f2 #g #Hg #f1 #f #H1 #H elim (after_inv_nxx … Hg … H1) -g1 #x #Hf #Hx destruct elim (discr_next_push … Hx) qed-. -lemma after_inv_pxp: ∀g1,g2,g. g1 ⊚ g2 ≡ g → - ∀f1,f. ↑f1 = g1 → ↑f = g → - ∃∃f2. f1 ⊚ f2 ≡ f & ↑f2 = g2. +lemma after_inv_pxp: ∀g1,g2,g. g1 ⊚ g2 ≘ g → + ∀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/ ] qed-. -lemma after_inv_pxn: ∀g1,g2,g. g1 ⊚ g2 ≡ g → - ∀f1,f. ↑f1 = g1 → ⫯f = g → - ∃∃f2. f1 ⊚ f2 ≡ f & ⫯f2 = g2. +lemma after_inv_pxn: ∀g1,g2,g. g1 ⊚ g2 ≘ g → + ∀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 @@ -148,9 +148,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/ @@ -161,20 +161,20 @@ qed-. (* Basic properties *********************************************************) -corec lemma after_eq_repl_back2: ∀f1,f. eq_repl_back (λf2. f2 ⊚ f1 ≡ f). +corec lemma after_eq_repl_back2: ∀f1,f. eq_repl_back (λf2. f2 ⊚ f1 ≘ f). #f1 #f #f2 * -f2 -f1 -f #f21 #f1 #f #g21 [1,2: #g1 ] #g #Hf #H21 [1,2: #H1 ] #H #g22 #H0 [ cases (eq_inv_px … H0 … H21) -g21 /3 width=7 by after_refl/ | cases (eq_inv_px … H0 … H21) -g21 /3 width=7 by after_push/ -| cases (eq_inv_nx … H0 … H21) -g21 /3 width=5 by after_next/ +| cases (eq_inv_nx … H0 … H21) -g21 /3 width=5 by after_next/ ] qed-. -lemma after_eq_repl_fwd2: ∀f1,f. eq_repl_fwd (λf2. f2 ⊚ f1 ≡ f). +lemma after_eq_repl_fwd2: ∀f1,f. eq_repl_fwd (λf2. f2 ⊚ f1 ≘ f). #f1 #f @eq_repl_sym /2 width=3 by after_eq_repl_back2/ qed-. -corec lemma after_eq_repl_back1: ∀f2,f. eq_repl_back (λf1. f2 ⊚ f1 ≡ f). +corec lemma after_eq_repl_back1: ∀f2,f. eq_repl_back (λf1. f2 ⊚ f1 ≘ f). #f2 #f #f1 * -f2 -f1 -f #f2 #f11 #f #g2 [1,2: #g11 ] #g #Hf #H2 [1,2: #H11 ] #H #g2 #H0 [ cases (eq_inv_px … H0 … H11) -g11 /3 width=7 by after_refl/ @@ -183,11 +183,11 @@ corec lemma after_eq_repl_back1: ∀f2,f. eq_repl_back (λf1. f2 ⊚ f1 ≡ f). ] qed-. -lemma after_eq_repl_fwd1: ∀f2,f. eq_repl_fwd (λf1. f2 ⊚ f1 ≡ f). +lemma after_eq_repl_fwd1: ∀f2,f. eq_repl_fwd (λf1. f2 ⊚ f1 ≘ f). #f2 #f @eq_repl_sym /2 width=3 by after_eq_repl_back1/ qed-. -corec lemma after_eq_repl_back0: ∀f1,f2. eq_repl_back (λf. f2 ⊚ f1 ≡ f). +corec lemma after_eq_repl_back0: ∀f1,f2. eq_repl_back (λf. f2 ⊚ f1 ≘ f). #f2 #f1 #f * -f2 -f1 -f #f2 #f1 #f01 #g2 [1,2: #g1 ] #g01 #Hf01 #H2 [1,2: #H1 ] #H01 #g02 #H0 [ cases (eq_inv_px … H0 … H01) -g01 /3 width=7 by after_refl/ @@ -196,15 +196,15 @@ corec lemma after_eq_repl_back0: ∀f1,f2. eq_repl_back (λf. f2 ⊚ f1 ≡ f). ] qed-. -lemma after_eq_repl_fwd0: ∀f2,f1. eq_repl_fwd (λf. f2 ⊚ f1 ≡ f). +lemma after_eq_repl_fwd0: ∀f2,f1. eq_repl_fwd (λf. f2 ⊚ f1 ≘ f). #f2 #f1 @eq_repl_sym /2 width=3 by after_eq_repl_back0/ qed-. (* Main properties **********************************************************) -corec theorem after_trans1: ∀f0,f3,f4. f0 ⊚ f3 ≡ f4 → - ∀f1,f2. f1 ⊚ f2 ≡ f0 → - ∀f. f2 ⊚ f3 ≡ f → f1 ⊚ f ≡ f4. +corec theorem after_trans1: ∀f0,f3,f4. f0 ⊚ f3 ≘ f4 → + ∀f1,f2. f1 ⊚ f2 ≘ f0 → + ∀f. f2 ⊚ f3 ≘ f → f1 ⊚ f ≘ f4. #f0 #f3 #f4 * -f0 -f3 -f4 #f0 #f3 #f4 #g0 [1,2: #g3 ] #g4 [ #Hf4 #H0 #H3 #H4 #g1 #g2 #Hg0 #g #Hg cases (after_inv_xxp … Hg0 … H0) -g0 @@ -226,9 +226,9 @@ corec theorem after_trans1: ∀f0,f3,f4. f0 ⊚ f3 ≡ f4 → ] qed-. -corec theorem after_trans2: ∀f1,f0,f4. f1 ⊚ f0 ≡ f4 → - ∀f2, f3. f2 ⊚ f3 ≡ f0 → - ∀f. f1 ⊚ f2 ≡ f → f ⊚ f3 ≡ f4. +corec theorem after_trans2: ∀f1,f0,f4. f1 ⊚ f0 ≘ f4 → + ∀f2, f3. f2 ⊚ f3 ≘ f0 → + ∀f. f1 ⊚ f2 ≘ f → f ⊚ f3 ≘ f4. #f1 #f0 #f4 * -f1 -f0 -f4 #f1 #f0 #f4 #g1 [1,2: #g0 ] #g4 [ #Hf4 #H1 #H0 #H4 #g2 #g3 #Hg0 #g #Hg cases (after_inv_xxp … Hg0 … H0) -g0 @@ -252,7 +252,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/ @@ -261,14 +261,14 @@ corec theorem after_mono: ∀f1,f2,x,y. f1 ⊚ f2 ≡ x → f1 ⊚ f2 ≡ y → ] qed-. -lemma after_mono_eq: ∀f1,f2,f. f1 ⊚ f2 ≡ f → ∀g1,g2,g. g1 ⊚ g2 ≡ g → - f1 ≗ g1 → f2 ≗ g2 → f ≗ g. +lemma after_mono_eq: ∀f1,f2,f. f1 ⊚ f2 ≘ f → ∀g1,g2,g. g1 ⊚ g2 ≘ g → + f1 ≡ g1 → f2 ≡ g2 → f ≡ g. /4 width=4 by after_mono, after_eq_repl_back1, after_eq_repl_back2/ qed-. (* Properties on tls ********************************************************) -lemma after_tls: ∀n,f1,f2,f. @⦃0, f1⦄ ≡ n → - f1 ⊚ f2 ≡ f → ⫱*[n]f1 ⊚ f2 ≡ ⫱*[n]f. +lemma after_tls: ∀n,f1,f2,f. @❪0, f1❫ ≘ n → + f1 ⊚ f2 ≘ f → ⫱*[n]f1 ⊚ f2 ≘ ⫱*[n]f. #n elim n -n // #n #IH #f1 #f2 #f #Hf1 #Hf cases (at_inv_pxn … Hf1) -Hf1 [ |*: // ] #g1 #Hg1 #H1 @@ -278,12 +278,12 @@ qed. (* Properties on isid *******************************************************) -corec lemma after_isid_sn: ∀f1. 𝐈⦃f1⦄ → ∀f2. f1 ⊚ f2 ≡ f2. +corec lemma after_isid_sn: ∀f1. 𝐈❪f1❫ → ∀f2. f1 ⊚ f2 ≘ f2. #f1 * -f1 #f1 #g1 #Hf1 #H1 #f2 cases (pn_split f2) * #g2 #H2 /3 width=7 by after_push, after_refl/ qed. -corec lemma after_isid_dx: ∀f2. 𝐈⦃f2⦄ → ∀f1. f1 ⊚ f2 ≡ f1. +corec lemma after_isid_dx: ∀f2. 𝐈❪f2❫ → ∀f1. f1 ⊚ f2 ≘ f1. #f2 * -f2 #f2 #g2 #Hf2 #H2 #f1 cases (pn_split f1) * #g1 #H1 [ /3 width=7 by after_refl/ | @(after_next … H1 H1) /3 width=3 by isid_push/ @@ -292,37 +292,37 @@ qed. (* Inversion lemmas on isid *************************************************) -lemma after_isid_inv_sn: ∀f1,f2,f. f1 ⊚ f2 ≡ f → 𝐈⦃f1⦄ → f2 ≗ f. +lemma after_isid_inv_sn: ∀f1,f2,f. f1 ⊚ f2 ≘ f → 𝐈❪f1❫ → f2 ≡ f. /3 width=6 by after_isid_sn, after_mono/ qed-. -lemma after_isid_inv_dx: ∀f1,f2,f. f1 ⊚ f2 ≡ f → 𝐈⦃f2⦄ → f1 ≗ f. +lemma after_isid_inv_dx: ∀f1,f2,f. f1 ⊚ f2 ≘ f → 𝐈❪f2❫ → f1 ≡ f. /3 width=6 by after_isid_dx, after_mono/ qed-. -corec lemma after_fwd_isid1: ∀f1,f2,f. f1 ⊚ f2 ≡ f → 𝐈⦃f⦄ → 𝐈⦃f1⦄. +corec lemma after_fwd_isid1: ∀f1,f2,f. f1 ⊚ f2 ≘ f → 𝐈❪f❫ → 𝐈❪f1❫. #f1 #f2 #f * -f1 -f2 -f #f1 #f2 #f #g1 [1,2: #g2 ] #g #Hf #H1 [1,2: #H2 ] #H0 #H [ /4 width=6 by isid_inv_push, isid_push/ ] cases (isid_inv_next … H … H0) qed-. -corec lemma after_fwd_isid2: ∀f1,f2,f. f1 ⊚ f2 ≡ f → 𝐈⦃f⦄ → 𝐈⦃f2⦄. +corec lemma after_fwd_isid2: ∀f1,f2,f. f1 ⊚ f2 ≘ f → 𝐈❪f❫ → 𝐈❪f2❫. #f1 #f2 #f * -f1 -f2 -f #f1 #f2 #f #g1 [1,2: #g2 ] #g #Hf #H1 [1,2: #H2 ] #H0 #H [ /4 width=6 by isid_inv_push, isid_push/ ] cases (isid_inv_next … H … H0) qed-. -lemma after_inv_isid3: ∀f1,f2,f. f1 ⊚ f2 ≡ f → 𝐈⦃f⦄ → 𝐈⦃f1⦄ ∧ 𝐈⦃f2⦄. +lemma after_inv_isid3: ∀f1,f2,f. f1 ⊚ f2 ≘ f → 𝐈❪f❫ → 𝐈❪f1❫ ∧ 𝐈❪f2❫. /3 width=4 by after_fwd_isid2, after_fwd_isid1, conj/ qed-. (* Properties on isuni ******************************************************) -lemma after_isid_isuni: ∀f1,f2. 𝐈⦃f2⦄ → 𝐔⦃f1⦄ → f1 ⊚ ⫯f2 ≡ ⫯f1. +lemma after_isid_isuni: ∀f1,f2. 𝐈❪f2❫ → 𝐔❪f1❫ → f1 ⊚ ↑f2 ≘ ↑f1. #f1 #f2 #Hf2 #H elim H -H /5 width=7 by after_isid_dx, after_eq_repl_back2, after_next, after_push, eq_push_inv_isid/ qed. -lemma after_uni_next2: ∀f2. 𝐔⦃f2⦄ → ∀f1,f. ⫯f2 ⊚ f1 ≡ f → f2 ⊚ ⫯f1 ≡ f. +lemma after_uni_next2: ∀f2. 𝐔❪f2❫ → ∀f1,f. ↑f2 ⊚ f1 ≘ f → f2 ⊚ ↑f1 ≘ f. #f2 #H elim H -f2 [ #f2 #Hf2 #f1 #f #Hf elim (after_inv_nxx … Hf) -Hf [2,3: // ] #g #Hg #H0 destruct @@ -335,15 +335,15 @@ qed. (* Properties on uni ********************************************************) -lemma after_uni: ∀n1,n2. 𝐔❴n1❵ ⊚ 𝐔❴n2❵ ≡ 𝐔❴n1+n2❵. -@nat_elim2 -/4 width=5 by after_uni_next2, after_isid_sn, after_isid_dx, after_next/ +lemma after_uni: ∀n1,n2. 𝐔❨n1❩ ⊚ 𝐔❨n2❩ ≘ 𝐔❨n1+n2❩. +@nat_elim2 [3: #n #m