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_2/notation/functions/lift_1.ma".
16 include "ground_2/relocation/nstream_at.ma".
18 (* RELOCATION N-STREAM ******************************************************)
20 definition push: rtmap → rtmap ≝ λf. 0@f.
22 interpretation "push (nstream)" 'Lift f = (push f).
24 definition next: rtmap → rtmap.
28 interpretation "next (nstream)" 'Successor f = (next f).
30 (* Basic properties on push *************************************************)
32 lemma push_at_O: ∀f. @⦃0, ↑f⦄ ≡ 0.
35 lemma push_at_S: ∀f,i1,i2. @⦃i1, f⦄ ≡ i2 → @⦃⫯i1, ↑f⦄ ≡ ⫯i2.
36 /2 width=1 by at_S1/ qed.
38 (* Basic inversion lemmas on push *******************************************)
40 lemma push_inv_at_S: ∀f,i1,i2. @⦃⫯i1, ↑f⦄ ≡ ⫯i2 → @⦃i1, f⦄ ≡ i2.
41 /2 width=1 by at_inv_SOS/ qed-.
43 lemma injective_push: injective ? ? push.
44 #f1 #f2 normalize #H destruct //
47 lemma discr_push_next: ∀f1,f2. ↑f1 = ⫯f2 → ⊥.
48 #f1 * #n2 #f2 normalize #H destruct
51 lemma discr_next_push: ∀f1,f2. ⫯f1 = ↑f2 → ⊥.
52 * #n1 #f1 #f2 normalize #H destruct
55 (* Basic properties on next *************************************************)
57 lemma next_at: ∀f,i1,i2. @⦃i1, f⦄ ≡ i2 → @⦃i1, ⫯f⦄ ≡ ⫯i2.
58 * /2 width=1 by at_lift/
61 (* Basic inversion lemmas on next *******************************************)
63 lemma next_inv_at: ∀f,i1,i2. @⦃i1, ⫯f⦄ ≡ ⫯i2 → @⦃i1, f⦄ ≡ i2.
64 * /2 width=1 by at_inv_xSS/
67 lemma injective_next: injective ? ? next.
68 * #a1 #f1 * #a2 #f2 normalize #H destruct //