]> matita.cs.unibo.it Git - helm.git/blob - matita/matita/contribs/lambdadelta/ground/relocation/gr_coafter_pat_tls.ma
update in ground
[helm.git] / matita / matita / contribs / lambdadelta / ground / relocation / gr_coafter_pat_tls.ma
1 (**************************************************************************)
2 (*       ___                                                              *)
3 (*      ||M||                                                             *)
4 (*      ||A||       A project by Andrea Asperti                           *)
5 (*      ||T||                                                             *)
6 (*      ||I||       Developers:                                           *)
7 (*      ||T||         The HELM team.                                      *)
8 (*      ||A||         http://helm.cs.unibo.it                             *)
9 (*      \   /                                                             *)
10 (*       \ /        This file is distributed under the terms of the       *)
11 (*        v         GNU General Public License Version 2                  *)
12 (*                                                                        *)
13 (**************************************************************************)
14
15 include "ground/relocation/gr_pat_tls.ma".
16 include "ground/relocation/gr_coafter_nat_tls.ma".
17
18 (* RELATIONAL CO-COMPOSITION FOR GENERIC RELOCATION MAPS ********************)
19
20 (* Constructions with gr_pat and gr_tls *************************************)
21
22 (* Note: this does not require ↑ first and second j *)
23 (*** coafter_tls_succ *)
24 lemma gr_coafter_tls_tl_tls:
25       ∀g2,g1,g. g2 ~⊚ g1 ≘ g →
26       ∀j. @❪𝟏, g2❫ ≘ j → ⫱*[j]g2 ~⊚ ⫱g1 ≘ ⫱*[j]g.
27 #g2 #g1 #g #Hg #j #Hg2
28 lapply (gr_nat_pred_bi … Hg2) -Hg2 #Hg2
29 lapply (gr_coafter_tls_bi_tls … Hg2 … Hg) -Hg #Hg
30 lapply (gr_pat_unit_succ_tls … Hg2) -Hg2 #H
31 elim (gr_pat_inv_unit_bi … H) -H [ |*: // ] #f2 #H2
32 elim (gr_coafter_inv_push_sn … Hg … H2) -Hg * #f1 #f #Hf #H1 #H0
33 >(npsucc_pred j) <gr_tls_succ <gr_tls_succ //
34 qed.
35
36 (* Note: parked for now
37 lemma coafter_fwd_xpx_pushs:
38       ∀g2,f1,g,i,j. @❪i, g2❫ ≘ j → g2 ~⊚ ⫯*[i]⫯f1 ≘ g →
39       ∃∃f.  ⫱*[↑j]g2 ~⊚ f1 ≘ f & ⫯*[j]⫯f = g.
40 #g2 #g1 #g #i #j #Hg2 <pushs_xn #Hg(coafter_fwd_pushs … Hg Hg2) #f #H0 destruct
41 lapply (coafter_tls … Hg2 Hg) -Hg <tls_pushs <tls_pushs #Hf
42 lapply (at_inv_tls … Hg2) -Hg2 #H
43 lapply (coafter_eq_repl_fwd2 … Hf … H) -H -Hf #Hf
44 elim (coafter_inv_ppx … Hf) [|*: // ] -Hf #g #Hg #H destruct
45 /2 width=3 by ex2_intro/
46 qed-.
47
48 lemma coafter_fwd_xnx_pushs:
49       ∀g2,f1,g,i,j. @❪i, g2❫ ≘ j → g2 ~⊚ ⫯*[i]↑f1 ≘ g →
50       ∃∃f. ⫱*[↑j]g2 ~⊚ f1 ≘ f & ⫯*[j] ↑f = g.
51 #g2 #g1 #g #i #j #Hg2 #Hg
52 elim (coafter_fwd_pushs … Hg Hg2) #f #H0 destruct
53 lapply (coafter_tls … Hg2 Hg) -Hg <tls_pushs <tls_pushs #Hf
54 lapply (at_inv_tls … Hg2) -Hg2 #H
55 lapply (coafter_eq_repl_fwd2 … Hf … H) -H -Hf #Hf
56 elim (coafter_inv_pnx … Hf) [|*: // ] -Hf #g #Hg #H destruct
57 /2 width=3 by ex2_intro/
58 qed-.
59 *)