Definition same_ratio (a b c d e f g h : Z) :=
  (a * f)%Z = (b * e)%Z /\
  (b * g)%Z = (c * f)%Z /\
  (c * h)%Z = (d * g)%Z /\
  (a * g)%Z = (c * e)%Z /\ (a * h)%Z = (d * e)%Z /\ (b * h)%Z = (d * f)%Z.

(* Specifications: *)
Lemma same_ratio_dec_inf : forall a b c d e f g h : Z, {same_ratio a b c d e f g h} + {~ same_ratio a b c d e f g h}.
Lemma Qquadratic_sign_tuple_equal : forall (l1 a1 b1 c1 d1 e1 f1 g1 h1 : Z) (x1 y1 : Qpositive) (l2 a2 b2 c2 d2 e2 f2 g2 h2 : Z) (x2 y2 : Qpositive), (l1, (a1, (b1, (c1, d1)), (e1, (f1, (g1, h1))), (x1, y1))) = (l2, (a2, (b2, (c2, d2)), (e2, (f2, (g2, h2))), (x2, y2))) -> l1 = l2 /\ (a1 = a2 /\ b1 = b2 /\ c1 = c2 /\ d1 = d2 /\ e1 = e2 /\ f1 = f2 /\ g1 = g2 /\ h1 = h2) /\ x1 = x2 /\ y1 = y2.
Lemma outside_square_1 : forall a b c d : Z, (2 < outside_square a b c d)%Z -> (0 < a + b + c + d)%Z.
Lemma outside_square_2 : forall a b c d : Z, (outside_square a b c d < -2)%Z -> (a + b + c + d < 0)%Z.
Lemma outside_square_3 : forall a b c d : Z, (2 < outside_square a b c d)%Z -> (0 <= a)%Z.
Lemma outside_square_4 : forall a b c d : Z, (2 < outside_square a b c d)%Z -> (0 <= b)%Z.
Lemma outside_square_5 : forall a b c d : Z, (2 < outside_square a b c d)%Z -> (0 <= c)%Z.
Lemma outside_square_6 : forall a b c d : Z, (2 < outside_square a b c d)%Z -> (0 <= d)%Z.
Lemma outside_square_7 : forall a b c d : Z, (outside_square a b c d < -2)%Z -> (a <= 0)%Z.
Lemma outside_square_8 : forall a b c d : Z, (outside_square a b c d < -2)%Z -> (b <= 0)%Z.
Lemma outside_square_9 : forall a b c d : Z, (outside_square a b c d < -2)%Z -> (c <= 0)%Z.
Lemma outside_square_10 : forall a b c d : Z, (outside_square a b c d < -2)%Z -> (d <= 0)%Z.
Lemma inside_square_1_inf : forall o1 o2 : Z, inside_square_1 o1 o2 -> {(2 < o1)%Z /\ (2 < o2)%Z} + {(o1 < -2)%Z /\ (o2 < -2)%Z}.
Lemma inside_square_2_inf : forall o1 o2 : Z, inside_square_2 o1 o2 -> {(2 < o1)%Z /\ (o2 < -2)%Z} + {(o1 < -2)%Z /\ (2 < o2)%Z}.
Lemma Qquadratic_sign_pos_1 : 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) (na nb nc nd ne nf ng nh : Z) (np1 np2 : Qpositive), Qquadratic_sign a b c d e f g h p1 p2 H_Qquadratic_sg_denom_nonzero = (1%Z, (na, (nb, (nc, nd)), (ne, (nf, (ng, nh))), (np1, np2))) -> {(0 < na + nb + nc + nd)%Z /\ (0 < ne + nf + ng + nh)%Z} + {(na + nb + nc + nd < 0)%Z /\ (ne + nf + ng + nh < 0)%Z}.
Lemma Qquadratic_sign_pos_2 : 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) (na nb nc nd ne nf ng nh : Z) (np1 np2 : Qpositive), Qquadratic_sign a b c d e f g h p1 p2 H_Qquadratic_sg_denom_nonzero = (1%Z, (na, (nb, (nc, nd)), (ne, (nf, (ng, nh))), (np1, np2))) -> {(0 <= na)%Z /\ (0 <= nb)%Z /\ (0 <= nc)%Z /\ (0 <= nd)%Z /\ (0 <= ne)%Z /\ (0 <= nf)%Z /\ (0 <= ng)%Z /\ (0 <= nh)%Z} + {(na <= 0)%Z /\ (nb <= 0)%Z /\ (nc <= 0)%Z /\ (nd <= 0)%Z /\ (ne <= 0)%Z /\ (nf <= 0)%Z /\ (ng <= 0)%Z /\ (nh <= 0)%Z} + {np1 = One /\ (0 <= na + nc)%Z /\ (0 <= nb + nd)%Z /\ (0 <= ne + ng)%Z /\ (0 <= nf + nh)%Z} + {np1 = One /\ (na + nc <= 0)%Z /\ (nb + nd <= 0)%Z /\ (ne + ng <= 0)%Z /\ (nf + nh <= 0)%Z} + {np1 = One /\ np2 = One} + {np1 <> One /\ np2 = One /\ (0 <= na + nb)%Z /\ (0 <= nc + nd)%Z /\ (0 <= ne + nf)%Z /\ (0 <= ng + nh)%Z} + {np1 <> One /\ np2 = One /\ (na + nb <= 0)%Z /\ (nc + nd <= 0)%Z /\ (ne + nf <= 0)%Z /\ (ng + nh <= 0)%Z}.
Lemma Qquadratic_sign_neg_1 : 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) (na nb nc nd ne nf ng nh : Z) (np1 np2 : Qpositive), Qquadratic_sign a b c d e f g h p1 p2 H_Qquadratic_sg_denom_nonzero = ((-1)%Z, (na, (nb, (nc, nd)), (ne, (nf, (ng, nh))), (np1, np2))) -> {(0 < na + nb + nc + nd)%Z /\ (ne + nf + ng + nh < 0)%Z} + {(na + nb + nc + nd < 0 < ne + nf + ng + nh)%Z}.
Lemma Qquadratic_sign_neg_2 : 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) (na nb nc nd ne nf ng nh : Z) (np1 np2 : Qpositive), Qquadratic_sign a b c d e f g h p1 p2 H_Qquadratic_sg_denom_nonzero = ((-1)%Z, (na, (nb, (nc, nd)), (ne, (nf, (ng, nh))), (np1, np2))) -> {(0 <= na)%Z /\ (0 <= nb)%Z /\ (0 <= nc)%Z /\ (0 <= nd)%Z /\ (ne <= 0)%Z /\ (nf <= 0)%Z /\ (ng <= 0)%Z /\ (nh <= 0)%Z} + {(na <= 0)%Z /\ (nb <= 0)%Z /\ (nc <= 0)%Z /\ (nd <= 0)%Z /\ (0 <= ne)%Z /\ (0 <= nf)%Z /\ (0 <= ng)%Z /\ (0 <= nh)%Z} + {np1 = One /\ (0 <= na + nc)%Z /\ (0 <= nb + nd)%Z /\ (ne + ng <= 0)%Z /\ (nf + nh <= 0)%Z} + {np1 = One /\ (na + nc <= 0)%Z /\ (nb + nd <= 0)%Z /\ (0 <= ne + ng)%Z /\ (0 <= nf + nh)%Z} + {np1 = One /\ np2 = One} + {np1 <> One /\ np2 = One /\ (0 <= na + nb)%Z /\ (0 <= nc + nd)%Z /\ (ne + nf <= 0)%Z /\ (ng + nh <= 0)%Z} + {np1 <> One /\ np2 = One /\ (na + nb <= 0)%Z /\ (nc + nd <= 0)%Z /\ (0 <= ne + nf)%Z /\ (0 <= ng + nh)%Z}.