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.
End enumerable_enum.
Class enumT X :=
{
L_T : nat -> list X;
cum_T : cumulative L_T ;
el_T : forall x, exists m, x ∈ L_T m
}.
Arguments L_T {_ _} _, _ {_} _.
Hint Immediate cum_T : core.
Instance enum_bool : enumT bool.
Instance enumT_nat : enumT nat.

Lemma T_nat_length n : length (L_T nat n) = S n.