From Coq Require Export Ensembles.
From ZornsLemma Require Export Image.
From Coq Require Export Finite_sets.
From ZornsLemma Require Export FunctionProperties.
Set Asymmetric Patterns.
Inductive FiniteT : Type -> Prop :=
| empty_finite: FiniteT False
| add_finite: forall T:Type, FiniteT T -> FiniteT (option T)
| bij_finite: forall (X Y:Type) (f:X->Y), FiniteT X ->
invertible f -> FiniteT Y.

Lemma Finite_ens_type: forall {X:Type} (S:Ensemble X),
Finite S -> FiniteT { x:X | In S x }.