let rec union s1 s2 =
  match s1 with
      [] -> s2
    | e::s1' -> (add_elt e (union s1' s2))