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.

Lemma seq_trans : forall x y z:uniset, seq x y -> seq y z -> seq x z.