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.

Lemma add_ok:
forall s, ok s -> forall l0 h0, l0 < h0 -> ok (add l0 h0 s).