End FinTupleSig.
Module FinTuple : FinTupleSig.
Section FinTuple.
Variables (n : nat) (T : finType).
Definition enum : seq (n.-tuple T) :=
let extend e := flatten (codom (fun x => map (cons x) e)) in
pmap insub (iter n extend [::[::]]).

(* Specifications: *)
Lemma enumP : Finite.axiom enum.
Lemma size_enum : size enum = #|T| ^ n.
End FinTuple.