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.

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.