Require Export Ensembles.
Require Export Image.
Require Export Finite_sets.
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_dec_exists: forall (X:Type) (P:X->Prop),
FiniteT X -> (forall x:X, {P x} + {~ P x}) ->
{ exists x:X, P x } + { forall x:X, ~ P x }.