Definition finv: forall y:Y, (exists x:X, f x = y) ->
  { x:X | f x = y }.Definition ginv: forall x:X, (exists y:Y, g y = x) ->
  { y:Y | g y = x }.Definition ginv_odd: forall x:X, X_odd x ->
  { y:Y | g y = x }.Definition finv_noteven: forall y:Y, ~ Y_even y ->
  { x:X | f x = y }.Definition CSB_bijection (x:X) : Y :=
  match (classic_dec (X_odd x)) with
  | left o => proj1_sig (ginv_odd x o)
  | right _ => f x
  end.Definition CSB_bijection2 (y:Y) : X :=
  match (classic_dec (Y_even y)) with
  | left _ => g y
  | right ne => proj1_sig (finv_noteven y ne)
  end.

(* Specifications: *)
Lemma CSB_comp1: forall x:X, CSB_bijection2 (CSB_bijection x) = x.
Lemma CSB_comp2: forall y:Y, CSB_bijection (CSB_bijection2 y) = y.
Theorem CSB: exists h:X->Y, bijective h.