Set Warnings "-extraction-opaque-accessed,-extraction".
Set Warnings "-notation-overridden,-parsing".
Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.
(* There are similar definitions in the Ensembles library (Included and Same_set); set_eq is not exactly the same as Same_set though (only logically equivalent). *)
Definition set T := T -> Prop.
Notation "x \in A" := (A x) (at level 70, only parsing) : set_scope.
Definition set_eq {A} (m1 m2 : set A) :=
forall (a : A), m1 a <-> m2 a.
Infix "<-->" := set_eq (at level 70, no associativity) : set_scope.
Open Scope set_scope.

(* Specifications: *)
Lemma set_eq_trans T B (A C : set T) : A <--> B -> B <--> C -> A <--> C.
Lemma set_eq_symm {A} (s1 s2 : set A) :
s1 <--> s2 -> s2 <--> s1.
Lemma set_eq_refl {A} (s : set A) :
s <--> s.