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/lib/subset_ext_equivalence.ma".
16 include "delayed_updating/substitution/lift_path_after.ma".
17 include "delayed_updating/substitution/lift_prototerm.ma".
19 (* LIFT FOR PROTOTERM *******************************************************)
21 (* Constructions with subset_equivalence ************************************)
23 lemma lift_term_eq_repl_sn (f1) (f2) (t):
24 f1 ≗ f2 → ↑[f1]t ⇔ ↑[f2]t.
25 /3 width=1 by subset_equivalence_ext_f1_exteq, lift_path_eq_repl/
28 lemma lift_term_eq_repl_dx (f) (t1) (t2):
29 t1 ⇔ t2 → ↑[f]t1 ⇔ ↑[f]t2.
30 /2 width=1 by subset_equivalence_ext_f1_bi/
33 lemma lift_term_after (f1) (f2) (t):
34 ↑[f2]↑[f1]t ⇔ ↑[f2∘f1]t.
35 #f1 #f2 #t @subset_eq_trans
37 | @subset_inclusion_ext_f1_compose
38 | @subset_equivalence_ext_f1_exteq /2 width=5/
42 lemma lift_term_grafted_sn (f) (t) (p):
43 ↑[↑[p]f](t⋔p) ⊆ (↑[f]t)⋔(↑[f]p).
44 #f #t #p #q * #r #Hr #H0 destruct
46 <lift_path_append_sn //
49 lemma lift_term_grafted_dx (f) (t) (p):
50 (↑[f]t)⋔(↑[f]p) ⊆ ↑[↑[p]f](t⋔p).
51 #f #t #p #q * #r #Hr #H0
52 elim (lift_path_inv_append_sn … (sym_eq … H0)) -H0
53 #p0 #q0 #Hp0 #Hq0 #H0 destruct
54 lapply (lift_path_inj … Hp0) -Hp0 #Hp0 destruct
55 /2 width=1 by in_comp_lift_path_term/
58 lemma lift_term_grafted (f) (t) (p):
59 ↑[↑[p]f](t⋔p) ⇔ (↑[f]t)⋔(↑[f]p).
60 /3 width=1 by lift_term_grafted_sn, lift_term_grafted_dx, conj/ qed.
62 lemma lift_term_grafted_S (f) (t) (p):
63 ↑[↑[p]f](t⋔(p◖𝗦)) ⇔ (↑[f]t)⋔((↑[f]p)◖𝗦).