Definition both_odd (x y : Z) := Zodd x /\ Zodd y.Definition distinct_parity (a b : Z) :=
   (Zeven a) /\ (Zodd b) \/ (Zodd a) /\ (Zeven b).

(* Specifications: *)
Lemma ndistp_eq : forall a : Z, ~ distinct_parity a a.
Lemma sqr_sum5 : forall a b: Z, a <> 0 -> b <> 0 -> distinct_parity a b -> a + b < a * a + b * b.
Lemma Zeven_def1 : forall z : Z, (Zeven z) -> exists k : Z, z = 2 * k.
Lemma Zeven_def2 : forall z : Z, (exists k : Z, z = 2 * k) -> (Zeven z).
Lemma Zodd_def1 : forall z : Z, (Zodd z) -> exists k : Z, z = 2 * k + 1.
Lemma Zodd_def2 : forall z : Z, (exists k : Z, z = 2 * k + 1) -> (Zodd z).
Lemma Zodd_0: forall n : Z, Zodd n -> n <> 0.
Lemma Zodd_opp1 : forall a : Z, Zodd (-a) -> Zodd a.
Lemma Zodd_opp2 : forall a : Z, Zodd a -> Zodd (-a).
Lemma Zodd_sum1 : forall a b : Z, Zodd a -> Zodd b -> Zeven (a + b).
Lemma Zodd_sum2 : forall a b : Z, Zodd a -> Zodd b -> Zeven (a - b).
Lemma Zodd_sum3 : forall a b : Z, Zodd (a + 2 * b) -> Zodd a.
Lemma Zodd_mult : forall u v : Z, Zodd u -> Zodd v -> (exists s : Z, (exists w : Z, (u - v = 4 * s /\ u + v = 2 * w) \/ (u - v = 2 * w /\ u + v = 4 * s))).
Lemma Zeven_sqr1 : forall z : Z, Zeven z -> Zeven (z * z).
Lemma Zeven_sqr2 : forall n, Zeven (n * n) -> Zeven n.
Lemma Zodd_sqr1 : forall z : Z, Zodd z -> Zodd (z * z).
Lemma Zodd_sqr2 : forall n, Zodd (n * n) -> Zodd n.
Lemma distp_neq : forall p q : Z, distinct_parity p q -> p <> q.
Lemma distp_sqr1 : forall p q : Z, (distinct_parity p q) -> (distinct_parity (p * p) (q * q)).
Lemma distp_sqr2 : forall p q : Z, (distinct_parity (p * p) (q * q)) -> (distinct_parity p q).
Lemma distp_odd : forall p q : Z, (distinct_parity p q) -> both_odd (p + q) (q - p).
Lemma not_divide1 : forall a b : Z, a <> 1 -> a <> -1 -> b <> 0 -> ~(a * b | b).
Lemma not_divide2 : forall a b : Z, 0 < a -> 0 < b -> b < a -> ~(a | b).
Lemma rel_prime_1: forall a : Z, rel_prime 1 a.
Lemma prime_2 : prime 2.
Lemma rel_prime_sym : forall x y : Z, rel_prime x y -> rel_prime y x.
Lemma rel_prime_dec : forall x y : Z, {rel_prime x y} + {~ rel_prime x y}.
Lemma not_rel_prime1 : forall x y : Z, ~ rel_prime x y -> exists d : Z, Zis_gcd x y d /\ d <> 1 /\ d <> -1.
Lemma not_rel_prime2 : forall x y d : Z, (d | x) -> (d | y) -> d <> 1 -> d <> -1 -> ~ rel_prime x y.
Lemma gcd_rel_prime : forall x y d : Z, Zis_gcd x y d -> exists a : Z, exists b : Z, x = d * a /\ y = d * b /\ rel_prime a b.
Lemma relp_mult2 : forall a b : Z, rel_prime (a * b) a -> a = 1 \/ a = -1.
Lemma relp_mult3 : forall a b c : Z, rel_prime (a * b) c -> rel_prime a c.
Lemma gcd2_rel_prime : forall a b s w : Z, (Zis_gcd a b 2) -> a = 4 * s -> b = 2 * w -> rel_prime s w.
Lemma relp_neq : forall m n : Z, m <> 1 -> m <> -1 -> rel_prime m n -> m <> n.
Lemma prop2 : forall m n : Z, rel_prime m n -> rel_prime (m * m) (n * n).
Lemma is_sqr_compat : forall k a : Z, k <> 0 -> is_sqr ((k * k) * a) -> is_sqr a.
Lemma divide_trans : forall a b c : Z, (a | b) -> (b | c) -> (a | c).
Lemma divide_sum : forall a b c : Z, (a | b) -> (a | b + c) -> (a | c).
Lemma divide_mult_l : forall a b c : Z, c <> 0 -> (c * a | c * b) -> (a | b).
Lemma divide_0 : forall z : Z, (0 | z) -> z = 0.
Lemma divide_2 : forall z : Z, 0 <= z -> z <> 0 -> z <> 1 -> (z | 2) -> z = 2.
Lemma divide_2b : forall z : Z, z <> 1 -> z <> -1 -> (z | 2) -> z = 2 \/ z = -2.
Lemma divide_4 : forall a b : Z, (a * a * a * a | b * b * b * b) -> (a | b).
Lemma divide_sqr : forall a b : Z, (a | b) -> (a * a | b * b).
Lemma gcd2_relp_odd : forall u v : Z, Zodd u -> Zodd v -> rel_prime u v -> (Zis_gcd (u - v) (u + v) 2).
Lemma rel_prime_opp : forall x y : Z, rel_prime x y -> rel_prime (-x) (-y).
Lemma rel_prime_oppr : forall x y : Z, rel_prime x y -> rel_prime x (-y).
Lemma rel_prime_2 : forall z : Z, Zodd z -> rel_prime 2 z.
Lemma relp_mult1 : forall a b c d k: Z, 0 <= a -> 0 <= b -> 0 < c -> 0 <= d -> a = k * c -> b = k * d -> rel_prime a b -> k = 1.
Lemma relp_parity : forall x y : Z, (rel_prime x y) -> (distinct_parity x y) \/ (both_odd x y).
Lemma relp_sum : forall m n : Z, (rel_prime (m + n) (m - n)) -> (rel_prime m n).
Lemma prop1 : forall m n : Z, rel_prime m n -> distinct_parity m n -> rel_prime (m + n) (n - m).
Lemma prop2b : forall m n : Z, rel_prime m n -> rel_prime m (m * m + n * n).
Lemma prop2c : forall m n : Z, rel_prime m n -> rel_prime m (m * m - n * n).
Lemma prop3 : forall m n : Z, rel_prime (m * m) (n * n) -> rel_prime m n.