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