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/notation/functions/upspoon_1.ma".
16 include "ground/notation/functions/uparrow_1.ma".
17 include "ground/lib/stream.ma".
18 include "ground/lib/bool.ma".
20 (* PARTIAL RELOCATION MAPS **************************************************)
23 definition pr_map: Type[0] ≝ stream bool.
26 definition pr_push (f): pr_map ≝ Ⓕ⨮f.
29 "push (partial relocation maps)"
30 'UpSpoon f = (pr_push f).
33 definition pr_next (f): pr_map ≝ Ⓣ⨮f.
36 "next (partial relocation maps)"
37 'UpArrow f = (pr_next f).
39 (* Basic constructions (specific) *******************************************)
42 lemma pr_push_unfold (f): Ⓕ⨮f = ⫯f.
46 lemma pr_next_unfold (f): Ⓣ⨮f = ↑f.
49 (* Basic inversions *********************************************************)
51 (*** injective_push *)
52 lemma eq_inv_pr_push_bi: injective ? ? pr_push.
53 #f1 #f2 <pr_push_unfold <pr_push_unfold #H destruct //
56 (*** discr_push_next *)
57 lemma eq_inv_pr_push_next (f1) (f2): ⫯f1 = ↑f2 → ⊥.
58 #f1 #f2 <pr_push_unfold <pr_next_unfold #H destruct
61 (*** discr_next_push *)
62 lemma eq_inv_pr_next_push (f1) (f2): ↑f1 = ⫯f2 → ⊥.
63 #f1 #f2 <pr_next_unfold <pr_push_unfold #H destruct
66 (*** injective_next *)
67 lemma eq_inv_pr_next_bi: injective ? ? pr_next.
68 #f1 #f2 <pr_next_unfold <pr_next_unfold #H destruct //