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

(* Specifications: *)
Lemma In_add:
forall x s, ok s -> forall l0 h0, (In x (add l0 h0 s) <-> l0 <= x < h0 \/ In x s).
Lemma add_ok:
forall s, ok s -> forall l0 h0, l0 < h0 -> ok (add l0 h0 s).
Lemma In_add:
forall x s, ok s -> forall l0 h0, (In x (add l0 h0 s) <-> l0 <= x < h0 \/ In x s).
Lemma add_ok:
forall s, ok s -> forall l0 h0, l0 < h0 -> ok (add l0 h0 s).