Global Instance enumerable_list (LX : enumT X) : enumT (list X).
End enumerable_list.

(* Specifications: *)
Lemma enumerable__T_list X : enumerable__T X -> enumerable__T (list X).
(** ** Enumerable predicates are closed under ... *)
Lemma enumerable_disj X (p q : X -> Prop) :
enumerable p -> enumerable q -> enumerable (fun x => p x \/ q x).
Lemma enumerable_conj X (p q : X -> Prop) :
discrete X -> enumerable p -> enumerable q -> enumerable (fun x => p x /\ q x).
Lemma projection X Y (p : X * Y -> Prop) :
enumerable p -> enumerable (fun x => exists y, p (x,y)).
Lemma projection' X Y (p : X * Y -> Prop) :
enumerable p -> enumerable (fun y => exists x, p (x,y)).