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).