(* 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.

(* 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).