Variable X Y : Type.
Section fixLs.
Variables (L_X : enumT X).
Variables (L_Y : enumT Y).
Fixpoint T_prod (n : nat) : list (X * Y) :=
match n
with
| 0 => [ (x,y) | (x,y) ∈ (L_T X 0 × L_T Y 0) ]
| S n => T_prod n ++ [ (x,y) | (x,y) ∈ (L_T X n  × L_T Y n) ]
end.

(* Specifications: *)
Lemma T_prod_cum : cumulative T_prod.
End fixLs.
Lemma T_prod_el LX LY (a : X * Y)  :
exists n, a el T_prod LX LY n.