Definition mem_add (x: elt) (s: t) : option t :=
   match mem_add' x (proj1_sig s) as b return (b = mem_add' x (proj1_sig s) -> option t)with
     | None => fun _ => None
     | Some s' => fun p => Some (exist valid s' (mem_add_valid x _ (proj2_sig s) s' p))
     end (Logic.eq_refl _).

Lemma fold_spec : forall s (A : Type) (i : A) (f : elt -> A -> A), fold _ f s i = List.fold_left (fun a e => f e a) (elements s) i.