#[local]
Hint Resolve incl_soustr_add_r: sets.

(* Specifications: *)
Lemma add_soustr_2 :
forall (X:Ensemble U) (x:U),
In U X x -> Included U X (Add U (Subtract U X x) x).
Lemma add_soustr_1 :
forall (X:Ensemble U) (x:U),
In U X x -> Included U (Add U (Subtract U X x) x) X.
Lemma add_soustr_xy :
forall (X:Ensemble U) (x y:U),
x <> y -> Subtract U (Add U X x) y = Add U (Subtract U X y) x.
Lemma incl_st_add_soustr :
forall (X Y:Ensemble U) (x:U),
~ In U X x ->
Strict_Included U (Add U X x) Y -> Strict_Included U X (Subtract U Y x).
Lemma Sub_Add_new :
forall (X:Ensemble U) (x:U), ~ In U X x -> X = Subtract U (Add U X x) x.
Lemma Simplify_add :
forall (X X0:Ensemble U) (x:U),
~ In U X x -> ~ In U X0 x -> Add U X x = Add U X0 x -> X = X0.
Lemma Included_Add :
forall (X A:Ensemble U) (x:U),
Included U X (Add U A x) ->
Included U X A \/ (exists A' : _, X = Add U A' x /\ Included U A' A).
Lemma setcover_inv :
forall A x y:Ensemble U,
covers (Ensemble U) (Power_set_PO U A) y x ->
Strict_Included U x y /\
(forall z:Ensemble U, Included U x z -> Included U z y -> x = z \/ z = y).
Theorem Add_covers :
forall A a:Ensemble U,
Included U a A ->
forall x:U,
In U A x ->
~ In U a x -> covers (Ensemble U) (Power_set_PO U A) (Add U a x) a.
Theorem covers_Add :
forall A a a':Ensemble U,
Included U a A ->
Included U a' A ->
covers (Ensemble U) (Power_set_PO U A) a' a ->
exists x : _, a' = Add U a x /\ In U A x /\ ~ In U a x.
Theorem covers_is_Add :
forall A a a':Ensemble U,
Included U a A ->
Included U a' A ->
(covers (Ensemble U) (Power_set_PO U A) a' a <->
(exists x : _, a' = Add U a x /\ In U A x /\ ~ In U a x)).
Theorem Singleton_atomic :
forall (x:U) (A:Ensemble U),
In U A x ->
covers (Ensemble U) (Power_set_PO U A) (Singleton U x) (Empty_set U).
Lemma less_than_singleton :
forall (X:Ensemble U) (x:U),
Strict_Included U X (Singleton U x) -> X = Empty_set U.