Fixpoint union (s1 s2: t) : t :=
match s1, s2 with
| Nil, _ => s2
| _, Nil => s1
| Cons l1 h1 s1', Cons l2 h2 s2' => add l1 h1 (add l2 h2 (union s1' s2'))
end.

(* Specifications: *)
Lemma In_ok_union:
forall s1, ok s1 -> forall s2, ok s2 ->
ok (union s1 s2) /\ (forall x, In x s1 \/ In x s2 <-> In x (union s1 s2)).
Lemma In_ok_union:
forall s1, ok s1 -> forall s2, ok s2 ->
ok (union s1 s2) /\ (forall x, In x s1 \/ In x s2 <-> In x (union s1 s2)).