Definition R_fact (x y : Z) :=
1 < x /\ 1 < y /\ exists q : Z, y = q * x /\ 1 < q.

(* Specifications: *)
Lemma R_fact_wf : well_founded R_fact.
Lemma ind_fact : forall P : Z -> Prop,
(forall x : Z, (forall y : Z, (R_fact y x -> P y)) -> P x) ->
forall x : Z, P x.
Lemma Zfact : forall a : Z, 1 < a -> exists b : Z, (b | a) /\ prime b.
Definition R_p4 (x y : Z) :=
0 <= x /\ 1 < y /\ exists d : Z, y = d * d * x /\ 1 < d.
Lemma R_p4_wf : well_founded R_p4.
Lemma ind_p4 : forall P : Z -> Prop,
(forall x : Z, (forall y : Z, (R_p4 y x -> P y)) -> P x) ->
forall x : Z, P x.
Lemma sqr_prime1 :
forall a : Z, is_sqr a -> forall b : Z, (b | a) -> prime b -> (b * b | a).
Lemma sqr_prime2 : forall a b c : Z,
(a | b) -> (a * a | b * c) -> prime a -> (a * a | b) \/ (a | c).
Lemma prop4 : forall p q : Z,
0 <= p -> 0 <= q -> rel_prime p q -> is_sqr (p * q) -> is_sqr p /\ is_sqr q.
Lemma prop4b : forall p q : Z, 0 <= p -> 0 <= q -> p <= q -> rel_prime p q ->
is_sqr (p * (q * (q * q - p * p))) ->
is_sqr p /\ is_sqr q /\ is_sqr (q * q - p * p).
Lemma relp_pq1 : forall p q : Z, p >= 0 -> p <= q -> (rel_prime p q) ->
(distinct_parity p q) -> (rel_prime (q * q - p * p) (p * p + q * q)).
Lemma relp_pq2 : forall p q : Z, (rel_prime p q) -> (distinct_parity p q) ->
(rel_prime (2 * p * q) (p * p + q * q)).