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

(* Specifications: *)
Lemma sg_tuple_equal :
forall (l1 a1 b1 c1 d1 : Z) (p1 : Qpositive) (l2 a2 b2 c2 d2 : Z)
(p2 : Qpositive),
(l1, (a1, (b1, (c1, d1)), p1)) = (l2, (a2, (b2, (c2, d2)), p2)) ->
l1 = l2 /\ (a1 = a2 /\ b1 = b2 /\ c1 = c2 /\ d1 = d2) /\ p1 = p2.
Lemma inside_interval_1_inf :
forall o1 o2 : Z,
inside_interval_1 o1 o2 ->
{(0 < o1)%Z /\ (0 < o2)%Z} + {(o1 < 0)%Z /\ (o2 < 0)%Z}.
Lemma inside_interval_2_inf :
forall o1 o2 : Z,
inside_interval_2 o1 o2 ->
{(0 < o1)%Z /\ (o2 < 0)%Z} + {(o1 < 0)%Z /\ (0 < o2)%Z}.
Lemma sg_pos_1 :
forall (a b c d : Z) (p : Qpositive)
(H_Qhomographic_sg_denom_nonzero : Qhomographic_sg_denom_nonzero c d p)
(na nb nc nd : Z) (np : Qpositive),
Qhomographic_sign a b c d p H_Qhomographic_sg_denom_nonzero =
(1%Z, (na, (nb, (nc, nd)), np)) ->
{(0 < na + nb)%Z /\ (0 < nc + nd)%Z} + {(na + nb < 0)%Z /\ (nc + nd < 0)%Z}.
Lemma sg_pos_2 :
forall (a b c d : Z) (p : Qpositive)
(H_Qhomographic_sg_denom_nonzero : Qhomographic_sg_denom_nonzero c d p)
(na nb nc nd : Z) (np : Qpositive),
Qhomographic_sign a b c d p H_Qhomographic_sg_denom_nonzero =
(1%Z, (na, (nb, (nc, nd)), np)) ->
{(0 <= na)%Z /\ (0 <= nb)%Z /\ (0 <= nc)%Z /\ (0 <= nd)%Z} +
{(na <= 0)%Z /\ (nb <= 0)%Z /\ (nc <= 0)%Z /\ (nd <= 0)%Z} +
{np = One}.
Lemma sg_neg_1 :
forall (a b c d : Z) (p : Qpositive)
(H_Qhomographic_sg_denom_nonzero : Qhomographic_sg_denom_nonzero c d p)
(na nb nc nd : Z) (np : Qpositive),
Qhomographic_sign a b c d p H_Qhomographic_sg_denom_nonzero =
((-1)%Z, (na, (nb, (nc, nd)), np)) ->
{(0 < na + nb)%Z /\ (nc + nd < 0)%Z} + {(na + nb < 0)%Z /\ (0 < nc + nd)%Z}.
Lemma sg_neg_2 :
forall (a b c d : Z) (p : Qpositive)
(H_Qhomographic_sg_denom_nonzero : Qhomographic_sg_denom_nonzero c d p)
(na nb nc nd : Z) (np : Qpositive),
Qhomographic_sign a b c d p H_Qhomographic_sg_denom_nonzero =
((-1)%Z, (na, (nb, (nc, nd)), np)) ->
{(0 <= na)%Z /\ (0 <= nb)%Z /\ (nc <= 0)%Z /\ (nd <= 0)%Z} +
{(na <= 0)%Z /\ (nb <= 0)%Z /\ (0 <= nc)%Z /\ (0 <= nd)%Z} +
{np = One}.