Definition enum {X} p (L: nat -> list X) :=
cumulative L /\ forall x, p x <-> exists m, x el L m.
Section enumerable_enum.
Variable X : Type.
Variable p : X -> Prop.
Variables (e : nat -> option X).
Definition T_ (n : nat) : list X :=  match e n with Some x => [x] | None => [] end.

(* Specifications: *)
Lemma count_enum' : exists L : nat -> list X, forall x, (exists n, e n = Some x) <-> (exists n, x el L n).
End enumerable_enum.
Lemma enum_to_cumulative X (p : X -> Prop) L :
(forall x, p x <-> exists m : nat, x el L m) -> exists L, enum p L.