(** Additional results about [Even] and [Odd] *)

Definition Even_Odd_dec n : {Even n} + {Odd n}.

(* Specifications: *)
Lemma Even_add_split n m : Even (n + m) -> Even n /\ Even m \/ Odd n /\ Odd m.
Lemma Odd_add_split n m : Odd (n + m) -> Odd n /\ Even m \/ Even n /\ Odd m.
Lemma Even_Even_add n m: Even n -> Even m -> Even (n + m).
Lemma Odd_add_l n m : Odd n -> Even m -> Odd (n + m).
Lemma Odd_add_r n m : Even n -> Odd m -> Odd (n + m).
Lemma Odd_Odd_add n m : Odd n -> Odd m -> Even (n + m).
Lemma Even_add_aux n m : (Odd (n + m) <-> Odd n /\ Even m \/ Even n /\ Odd m) /\ (Even (n + m) <-> Even n /\ Even m \/ Odd n /\ Odd m).
Lemma Even_add_Even_inv_r n m : Even (n + m) -> Even n -> Even m.
Lemma Even_add_Even_inv_l n m : Even (n + m) -> Even m -> Even n.
Lemma Even_add_Odd_inv_r n m : Even (n + m) -> Odd n -> Odd m.
Lemma Even_add_Odd_inv_l n m : Even (n + m) -> Odd m -> Odd n.
Lemma Odd_add_Even_inv_l n m : Odd (n + m) -> Odd m -> Even n.
Lemma Odd_add_Even_inv_r n m : Odd (n + m) -> Odd n -> Even m.
Lemma Odd_add_Odd_inv_l n m : Odd (n + m) -> Even m -> Odd n.
Lemma Odd_add_Odd_inv_r n m : Odd (n + m) -> Even n -> Odd m.
Lemma Even_mul_aux n m : (Odd (n * m) <-> Odd n /\ Odd m) /\ (Even (n * m) <-> Even n \/ Even m).
Lemma Even_mul_l n m : Even n -> Even (n * m).
Lemma Even_mul_r n m : Even m -> Even (n * m).
Lemma Even_mul_inv_r n m : Even (n * m) -> Odd n -> Even m.
Lemma Even_mul_inv_l n m : Even (n * m) -> Odd m -> Even n.
Lemma Odd_mul n m : Odd n -> Odd m -> Odd (n * m).
Lemma Odd_mul_inv_l n m : Odd (n * m) -> Odd n.
Lemma Odd_mul_inv_r n m : Odd (n * m) -> Odd m.
Lemma Even_div2 n : Even n -> div2 n = div2 (S n).
Lemma Odd_div2 n : Odd n -> S (div2 n) = div2 (S n).
Lemma div2_Even n : div2 n = div2 (S n) -> Even n.
Lemma div2_Odd n : S (div2 n) = div2 (S n) -> Odd n.
Lemma Even_Odd_div2 n : (Even n <-> div2 n = div2 (S n)) /\ (Odd n <-> S (div2 n) = div2 (S n)).
Lemma Even_Odd_double n : (Even n <-> n = double (div2 n)) /\ (Odd n <-> n = S (double (div2 n))).
Lemma Even_double n : Even n -> n = double (div2 n).
Lemma double_Even n : n = double (div2 n) -> Even n.
Lemma Odd_double n : Odd n -> n = S (double (div2 n)).
Lemma double_Odd n : n = S (double (div2 n)) -> Odd n.