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 (**************************************************************************)
17 (* POINTER ORDER ************************************************************)
19 (* Note: precedence relation on redex pointers: p ≺ q
20 to serve as base for the order relations: p < q and p ≤ q *)
21 inductive pprec: relation ptr ≝
22 | pprec_nil : ∀c,q. pprec (◊) (c::q)
23 | ppprc_cons: ∀p,q. pprec (dx::p) (sn::q)
24 | pprec_comp: ∀c,p,q. pprec p q → pprec (c::p) (c::q)
25 | pprec_skip: pprec (dx::◊) ◊
28 interpretation "'precedes' on pointers"
29 'prec p q = (pprec p q).
31 (* Note: this should go to core_notation *)
32 notation "hvbox(a break ≺ b)"
33 non associative with precedence 45
36 (* Note: this is p < q *)
37 definition plt: relation ptr ≝ TC … pprec.
39 interpretation "'less than' on redex pointers"
42 (* Note: this is p ≤ q *)
43 definition ple: relation ptr ≝ star … pprec.
45 interpretation "'less or equal to' on redex pointers"
48 lemma pprec_ple: ∀p,q. p ≺ q → p ≤ q.
52 lemma ple_dx: dx::◊ ≤ ◊.
56 lemma ple_nil: ∀p. ◊ ≤ p.
60 lemma ple_comp: ∀p1,p2. p1 ≤ p2 → ∀c. (c::p1) ≤ (c::p2).
61 #p1 #p2 #H elim H -p2 // /3 width=3/