(* This program is free software; you can redistribute it and/or      *)
(* modify it under the terms of the GNU Lesser General Public License *)
(* as published by the Free Software Foundation; either version 2.1   *)
(* of the License, or (at your option) any later version.             *)
(*                                                                    *)
(* This program is distributed in the hope that it will be useful,    *)
(* but WITHOUT ANY WARRANTY; without even the implied warranty of     *)
(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the      *)
(* GNU General Public License for more details.                       *)
(*                                                                    *)
(* You should have received a copy of the GNU Lesser General Public   *)
(* License along with this program; if not, write to the Free         *)
(* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *)
(* 02110-1301 USA                                                     *)
Definition outside_square (a b c d : Z) :=
(Z.sgn a + Z.sgn b + Z.sgn c + Z.sgn d)%Z.
Inductive Qquadratic_sg_denom_nonzero :
Z -> Z -> Z -> Z -> Qpositive -> Qpositive -> Prop :=
| Qquadratic_signok0 :
forall (e f g h : Z) (p1 p2 : Qpositive),
p2 = One ->
Qhomographic_sg_denom_nonzero (e + f) (g + h) p1 ->
Qquadratic_sg_denom_nonzero e f g h p1 p2
| Qquadratic_signok0' :
forall (e f g h : Z) (p1 p2 : Qpositive),
p1 = One ->
Qhomographic_sg_denom_nonzero (e + g) (f + h) p2 ->
Qquadratic_sg_denom_nonzero e f g h p1 p2
| Qquadratic_signok1 :
forall (e f g h : Z) (p1 p2 : Qpositive),
Qquadratic_sg_denom_nonzero e (e + f)%Z (e + g)%Z
(e + f + g + h)%Z p1 p2 ->
Qquadratic_sg_denom_nonzero e f g h (nR p1) (nR p2)
| Qquadratic_signok2 :
forall (e f g h : Z) (p1 p2 : Qpositive),
Qquadratic_sg_denom_nonzero (e + f)%Z f (e + f + g + h)%Z
(f + h)%Z p1 p2 ->
Qquadratic_sg_denom_nonzero e f g h (nR p1) (dL p2)
| Qquadratic_signok3 :
forall (e f g h : Z) (p1 p2 : Qpositive),
Qquadratic_sg_denom_nonzero (e + g)%Z (e + f + g + h)%Z g
(g + h)%Z p1 p2 ->
Qquadratic_sg_denom_nonzero e f g h (dL p1) (nR p2)
| Qquadratic_signok4 :
forall (e f g h : Z) (p1 p2 : Qpositive),
Qquadratic_sg_denom_nonzero (e + f + g + h)%Z
(f + h)%Z (g + h)%Z h p1 p2 ->
Qquadratic_sg_denom_nonzero e f g h (dL p1) (dL p2).

Lemma Qquadratic_sign_One_y :
forall (a b c d e f g h : Z) (p1 p2 : Qpositive)
(H_Qquadratic_sg_denom_nonzero : Qquadratic_sg_denom_nonzero e f g h p1 p2)
(l1 na nb nc nd : Z) (l3 : Qpositive)
(H_Qhomographic_sg_denom_nonzero : Qhomographic_sg_denom_nonzero
(e + g) (f + h) p2),
(l1, (na, (nb, (nc, nd)), l3)) =
Qhomographic_sign (a + c) (b + d) (e + g) (f + h) p2
H_Qhomographic_sg_denom_nonzero ->
p1 = One ->
Qquadratic_sign a b c d e f g h p1 p2 H_Qquadratic_sg_denom_nonzero =
(l1, (0%Z, (0%Z, (na, nb)), (0%Z, (0%Z, (nc, nd))), (One, l3))).