Inductive uniset : Set :=
    Charac : (A -> bool) -> uniset.Inductive uniset : Set :=
    Charac : (A -> bool) -> uniset.Definition charac (s:uniset) (a:A) : bool := let (f) := s in f a.Definition Emptyset := Charac (fun a:A => false).Definition Fullset := Charac (fun a:A => true).Definition Singleton (a:A) :=
  Charac
    (fun a':A =>
       match eqA_dec a a' with
       | left h => true
       | right h => false
       end).Definition In (s:uniset) (a:A) : Prop := charac s a = true.(** uniset inclusion *)
Definition incl (s1 s2:uniset) := forall a:A, Bool.le (charac s1 a) (charac s2 a).(** uniset equality *)
Definition seq (s1 s2:uniset) := forall a:A, charac s1 a = charac s2 a.

(* Specifications: *)
Lemma le_refl : forall b, Bool.le b b.
Lemma incl_left : forall s1 s2:uniset, seq s1 s2 -> incl s1 s2.
Lemma incl_right : forall s1 s2:uniset, seq s1 s2 -> incl s2 s1.
Lemma seq_refl : forall x:uniset, seq x x.
Lemma seq_trans : forall x y z:uniset, seq x y -> seq y z -> seq x z.
Lemma seq_sym : forall x y:uniset, seq x y -> seq y x.