Definition valid_cut_sign (op:Op1) :=
match op with
| Equal => true
| NonStrict => true
| _         => false
end.
Definition bound_var (v : positive) : Formula Z :=
Build_Formula (PEX v) OpGe (PEc 0).
Definition mk_eq_pos (x : positive) (y:positive) (t : positive) : Formula Z :=
Build_Formula (PEX x) OpEq (PEsub (PEX y) (PEX t)).
Fixpoint vars (jmp : positive) (p : Pol Z) : list positive :=
match p with
| Pc c => nil
| Pinj j p => vars (Pos.add j jmp) p
| PX p j q => jmp::(vars jmp p)++vars (Pos.succ jmp) q
end.
Fixpoint max_var (jmp : positive) (p : Pol Z) : positive :=
match p with
| Pc _ => jmp
| Pinj j p => max_var (Pos.add j jmp) p
| PX p j q => Pos.max (max_var jmp p) (max_var (Pos.succ jmp) q)
end.

(* Specifications: *)
Lemma pos_le_add : forall y x,
(x <= y + x)%positive.
Lemma max_var_le : forall p v,
(v <= max_var v p)%positive.
Lemma max_var_correct : forall p j v,
In v (vars j p) -> Pos.le v (max_var j p).