Definition Countable {X:Type} (S:Ensemble X) : Prop :=
  CountableT {x:X | In S x}.

(* Specifications: *)
Lemma inj_countable: forall {X Y:Type} (f:X->Y), CountableT Y -> injective f -> CountableT X.
Lemma surj_countable: forall {X Y:Type} (f:X->Y), CountableT X -> surjective f -> CountableT Y.
Lemma countable_downward_closed: forall {X:Type} (S T:Ensemble X), Countable T -> Included S T -> Countable S.
Lemma countable_img: forall {X Y:Type} (f:X->Y) (S:Ensemble X), Countable S -> Countable (Im S f).
Lemma countable_type_ensemble: forall {X:Type} (S:Ensemble X), CountableT X -> Countable S.
Lemma FiniteT_impl_CountableT: forall X:Type, FiniteT X -> CountableT X.
Lemma Finite_impl_Countable: forall {X:Type} (S:Ensemble X), Finite _ S -> Countable S.
Lemma positive_countable: CountableT positive.
Lemma Z_countable: CountableT Z.
Lemma Q_countable: CountableT Q.
Lemma countable_union: forall {X A:Type} (F:IndexedFamily A X), CountableT A -> (forall a:A, Countable (F a)) -> Countable (IndexedUnion F).