(* Pythagorean.v *)
(***********************)
(* Pythagorean triples *)
(***********************)
Require Export Tactics.
(* A non nul predicate *)
Definition nnl_triple (a b c : Z) := ~(a = 0) /\ ~(b = 0) /\ ~(c = 0).
(* A positive predicate *)
Definition pos_triple (a b c : Z) := (a >= 0) /\ (b >= 0) /\ (c >= 0).
(* A Pythagorean predicate *)
Definition is_pytha (a b c : Z) := (pos_triple a b c) /\ a * a + b * b = c * c.
(* Unit circle and D_r *)
Definition in_ucirc (x y : R) := (x * x + y * y = 1)%R.
Definition D_r (r x y : R) := (y = r * (x + 1))%R.
(******************************)
(* Set of Pythagorean triples *)
(******************************)
(* step1 *)

(* Specifications: *)
Lemma pytha_ucirc1 : forall a b c : Z,
(c > 0) -> (is_pytha a b c) -> (in_ucirc (frac a c) (frac b c)).
Lemma pytha_ucirc2 : forall a b c : Z, (a >= 0) /\ (b >= 0) /\ (c > 0) ->
(in_ucirc (frac a c) (frac b c)) -> (is_pytha a b c).