Definition remove (x : elt) (s : t) : t := let (s', _) := remove x s in s'.

(* Specifications: *)
Lemma remove_1 : forall (s : t) (x y : elt), E.eq x y -> ~ In y (remove x s).
Lemma remove_2 :
forall (s : t) (x y : elt), ~ E.eq x y -> In y s -> In y (remove x s).
Lemma remove_3 : forall (s : t) (x y : elt), In y (remove x s) -> In y s.
Definition singleton (x : elt) : t := let (s, _) := singleton x in s.
Lemma singleton_1 : forall x y : elt, In y (singleton x) -> E.eq x y.
Lemma singleton_2 : forall x y : elt, E.eq x y -> In y (singleton x).
Definition union (s s' : t) : t := let (s'', _) := union s s' in s''.
Lemma union_1 :
forall (s s' : t) (x : elt), In x (union s s') -> In x s \/ In x s'.
Lemma union_2 : forall (s s' : t) (x : elt), In x s -> In x (union s s').
Lemma union_3 : forall (s s' : t) (x : elt), In x s' -> In x (union s s').
Definition inter (s s' : t) : t := let (s'', _) := inter s s' in s''.
Lemma inter_1 : forall (s s' : t) (x : elt), In x (inter s s') -> In x s.
Lemma inter_2 : forall (s s' : t) (x : elt), In x (inter s s') -> In x s'.
Lemma inter_3 :
forall (s s' : t) (x : elt), In x s -> In x s' -> In x (inter s s').