intros a b x H; case (set_add_elim _ _ _ H); intros; trivial.
case H1; trivial.
Qed.
#[local]
Hint Resolve set_add_intro set_add_elim set_add_elim2 : core.

(* Specifications: *)
Lemma set_add_not_empty : forall (a:A) (x:set), set_add a x <> empty_set.
Lemma set_add_iff a b l : In a (set_add b l) <-> a = b \/ In a l.
Lemma set_add_nodup a l : NoDup l -> NoDup (set_add a l).
Lemma set_remove_1 (a b : A) (l : set) :
In a (set_remove b l) -> In a l.
Lemma set_remove_2 (a b:A) (l : set) :
NoDup l -> In a (set_remove b l) -> a <> b.
Lemma set_remove_3 (a b : A) (l : set) :
In a l -> a <> b -> In a (set_remove b l).
Lemma set_remove_iff (a b : A) (l : set) :
NoDup l -> (In a (set_remove b l) <-> In a l /\ a <> b).
Lemma set_remove_nodup a l : NoDup l -> NoDup (set_remove a l).
Lemma set_union_intro1 :
forall (a:A) (x y:set), set_In a x -> set_In a (set_union x y).
Lemma set_union_intro2 :
forall (a:A) (x y:set), set_In a y -> set_In a (set_union x y).