1 (**************************************************************************)
4 (* ||A|| A project by Andrea Asperti *)
6 (* ||I|| Developers: *)
7 (* ||T|| The HELM team. *)
8 (* ||A|| http://helm.cs.unibo.it *)
10 (* \ / This file is distributed under the terms of the *)
11 (* v GNU General Public License Version 2 *)
13 (**************************************************************************)
15 include "ground/relocation/gr_tl_eq.ma".
16 include "ground/relocation/gr_pat_lt.ma".
18 (* POSITIVE APPLICATION FOR GENERIC RELOCATION MAPS *************************)
20 (* Constructions with gr_eq *************************************************)
22 (*** at_eq_repl_back *)
23 corec lemma gr_pat_eq_repl_back (i1) (i2):
24 gr_eq_repl_back (λf. @❪i1,f❫ ≘ i2).
26 [ #f1 #g1 #j1 #j2 #H #H1 #H2 #f2 #H12
27 cases (gr_eq_inv_push_sn … H12 … H) -g1 /2 width=2 by gr_pat_refl/
28 | #f1 #i1 #i2 #Hf1 #g1 #j1 #j2 #H #H1 #H2 #f2 #H12
29 cases (gr_eq_inv_push_sn … H12 … H) -g1 /3 width=7 by gr_pat_push/
30 | #f1 #i1 #i2 #Hf1 #g1 #j2 #H #H2 #f2 #H12
31 cases (gr_eq_inv_next_sn … H12 … H) -g1 /3 width=5 by gr_pat_next/
35 (*** at_eq_repl_fwd *)
36 lemma gr_pat_eq_repl_fwd (i1) (i2):
37 gr_eq_repl_fwd (λf. @❪i1,f❫ ≘ i2).
38 #i1 #i2 @gr_eq_repl_sym /2 width=3 by gr_pat_eq_repl_back/
41 lemma gr_pat_eq (f): ⫯f ≡ f → ∀i. @❪i,f❫ ≘ i.
43 [ /3 width=3 by gr_pat_eq_repl_back, gr_pat_refl/
44 | /3 width=7 by gr_pat_eq_repl_back, gr_pat_push/
48 (* Inversions with gr_eq ****************************************************)
50 corec lemma gr_pat_inv_eq (f):
51 (∀i. @❪i,f❫ ≘ i) → ⫯f ≡ f.
54 lapply (gr_pat_des_id … H) -H #H
56 @gr_eq_push [3:|*: // ]
57 /3 width=7 by gr_pat_inv_succ_push_succ/