Instance proper_set_incl A :
Morphisms.Proper (set_eq ==> set_eq ==> Basics.impl) (@set_incl A).
Instance eq_setI U : Proper (set_eq ==> set_eq ==> set_eq) (@setI U).

(* Specifications: *)
Lemma setI_comm {U} (s1 s2 : set U) :
s1 :&: s2 <--> s2 :&: s1.
Lemma setU_comm {U} (s1 s2 : set U) :
s1 :|: s2 <--> s2 :|: s1.
Lemma setI_set0_abs {U} (s : set U) :
(s :&: set0) <--> set0.
Lemma setU_set0_neut {U} (s : set U) :
(s :|: set0) <--> s.
Lemma setU_set0_neut_eq {A} (s s1 : set A) :
s1 <--> set0 ->
s <--> s :|: s1.
Lemma setU_set0_l {A} (s1 s2 s3 : set A) :
s1 <--> set0 ->
s2 <--> s3 ->
(s1 :|: s2) <--> s3.
Lemma setU_set0_r {A} (s1 s2 s3 : set A) :
s1 <--> set0 ->
s3 <--> s2 ->
s3 <--> (s1 :|: s2).
Lemma setI_setT_neut {U} (s : set U) :
(s :&: setT) <--> s.
Lemma setU_setT_abs {U} (s : set U) :
(s :|: setT) <--> setT.
Lemma setU_set_eq_compat {T} (s1 s2 s1' s2' : set T) :
s1 <--> s1' ->
s2 <--> s2' ->
s1 :|: s2 <--> s1' :|: s2'.
Lemma setU_set_subset_compat :
forall (T : Type) (s1 s2 s1' s2' : set T),
s1 \subset s1' -> s2 \subset s2' -> s1 :|: s2 \subset s1' :|: s2'.
Lemma setU_set_incl_r :
forall (T : Type) (s1 s2 s2' : set T),
s1 \subset s2' -> s1 \subset s2 :|: s2'.
Lemma setU_assoc {U} (s1 s2 s3 : set U) :
(s1 :|: (s2 :|: s3)) <--> ((s1 :|: s2) :|: s3).
Lemma setI_assoc {U} (s1 s2 s3 : set U) :
(s1 :&: (s2 :&: s3)) <--> ((s1 :&: s2) :&: s3).
Lemma setI_impl_l {T} (s1 s2 : set T) : s1 \subset s2 -> s1 :&: s2 <--> s1.
Lemma setI_impl_r {T} (s1 s2 : set T) : s2 \subset s1 -> s1 :&: s2 <--> s2.
Lemma setI_set0 {U} (s1 s2 : set U) :
(forall x, s1 x -> ~ s2 x) ->
(s1 :&: s2) <--> set0.
Lemma setI_subset_compat {U} (s1 s2 s1' s2' : set U) :
s1 \subset s1' ->
s2 \subset s2' ->
(s1 :&: s2) \subset (s1' :&: s2').
Lemma setU_subset_r {U} (s1 s2 s3 : set U) :
s1 \subset s3 ->
s1 \subset (s2 :|: s3).
Lemma setU_subset_l {U} (s1 s2 s3 : set U) :
s1 \subset s2 ->
s1 \subset (s2 :|: s3).
Lemma setI_setU_distr {U} (s1 s2 s3 : set U) :
((s1 :|: s2) :&: s3) <--> ((s1 :&: s3) :|: (s2 :&: s3)).