Fixpoint remove (L H: Z) (s: t) {struct s} : t :=
  match s with
  | Nil => Nil
  | Cons l h s' =>
      if zlt h L then Cons l h (remove L H s')
      else if zlt H l then s
      else if zlt l L then
        if zlt H h then Cons l L (Cons H h s') else Cons l L (remove L H s')
      else
        if zlt H h then Cons H h s' else remove L H s'
  end.

(* Specifications: *)
Lemma In_remove: forall x l0 h0 s, ok s -> (In x (remove l0 h0 s) <-> ~(l0 <= x < h0) /\ In x s).
Lemma remove_ok: forall l0 h0, l0 < h0 -> forall s, ok s -> ok (remove l0 h0 s).
Lemma In_remove: forall x l0 h0 s, ok s -> (In x (remove l0 h0 s) <-> ~(l0 <= x < h0) /\ In x s).
Lemma remove_ok: forall l0 h0, l0 < h0 -> forall s, ok s -> ok (remove l0 h0 s).