Inductive CountableT (X:Type) : Prop :=
  | intro_nat_injection: forall f:X->nat, injective f -> CountableT X.Inductive CountableT (X:Type) : Prop :=
  | intro_nat_injection: forall f:X->nat, injective f -> CountableT X.

(* Specifications: *)
Lemma CountableT_is_FiniteT_or_countably_infinite: forall X:Type, CountableT X -> {FiniteT X} + {exists f:X->nat, bijective f}.
Lemma countable_nat_product: CountableT (nat*nat).
Lemma countable_sum: forall X Y:Type, CountableT X -> CountableT Y -> CountableT (X+Y).
Lemma countable_product: forall X Y:Type, CountableT X -> CountableT Y -> CountableT (X*Y).
Lemma countable_exp: forall X Y:Type, FiniteT X -> CountableT Y -> CountableT (X->Y).