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 count_enum' : exists L : nat -> list X, forall x, (exists n, e n = Some x) <-> (exists n, x el L n).
End enumerable_enum.