Functional Scheme Z_to_Q_ind := Induction for Z_to_Q Sort Prop.

(* Specifications: *)
Lemma Z_to_Qpositive_to_Q :
forall (m : Z) (Hm : (0 < m)%Z), Z_to_Q m = Qpos (Z_to_Qpositive m Hm).
Lemma Qpos_injective :
forall qp1 qp2 : Qpositive, Qpos qp1 = Qpos qp2 -> qp1 = qp2.
Lemma Qneg_injective :
forall qp1 qp2 : Qpositive, Qneg qp1 = Qneg qp2 -> qp1 = qp2.
Lemma Q_tail_Q_pos : forall q : Q, Qlt Zero q -> q = Qpos (Q_tail q).
Lemma Q_tail_Q_neg : forall q : Q, Qlt q Zero -> q = Qneg (Q_tail q).
Lemma Qpositive_to_Z_nonneg : forall x : Qpositive, (0 <= Qpositive_to_Z x)%Z.
Functional Scheme Qpositive_le_bool_ind :=
Induction for Qpositive_le_bool Sort Prop.
Lemma Qpositive_to_Z_Qpositive_le :
forall x y : Qpositive,
(Qpositive_to_Z x < Qpositive_to_Z y)%Z -> Qpositive_le x y.
Lemma Q_to_Z_monotone : forall x y : Q, Qlt x y -> (Q_to_Z x <= Q_to_Z y)%Z.
Lemma Qlt_irreflexive : forall x : Q, ~ Qlt x x.
Hint Resolve Qlt_irreflexive.
Lemma Qlt_not_eq : forall x y : Q, Qlt x y -> y <> x.
Hint Resolve Qlt_not_eq.
Lemma Qlt_transitive : forall x y z : Q, Qlt x y -> Qlt y z -> Qlt x z.
Lemma Z_to_Qopp : forall x : Z, Z_to_Q (- x) = Qopp (Z_to_Q x).
Lemma Z_to_Qplus_POS :
forall p1 p2 : positive,
Z_to_Q (Zpos p1 + Zpos p2) = Qplus (Z_to_Q (Zpos p1)) (Z_to_Q (Zpos p2)).
Lemma Z_to_Qplus_POS_NEG :
forall p1 p2 : positive,
Z_to_Q (Zpos p1 + Zneg p2) = Qplus (Z_to_Q (Zpos p1)) (Z_to_Q (Zneg p2)).
Lemma Z_to_Qplus_NEG :
forall p1 p2 : positive,
Z_to_Q (Zneg p1 + Zneg p2) = Qplus (Z_to_Q (Zneg p1)) (Z_to_Q (Zneg p2)).
Lemma Z_to_Qplus :
forall x y : Z, Z_to_Q (x + y) = Qplus (Z_to_Q x) (Z_to_Q y).
Lemma Z_to_Qminus :
forall x y : Z, Z_to_Q (x - y) = Qminus (Z_to_Q x) (Z_to_Q y).
Lemma Z_to_Qmult_POS :
forall p1 p2 : positive,
Z_to_Q (Zpos p1 * Zpos p2) = Qmult (Z_to_Q (Zpos p1)) (Z_to_Q (Zpos p2)).
Lemma Z_to_Qmult_POS_NEG :
forall p1 p2 : positive,
Z_to_Q (Zpos p1 * Zneg p2) = Qmult (Z_to_Q (Zpos p1)) (Z_to_Q (Zneg p2)).
Lemma Z_to_Qmult_NEG :
forall p1 p2 : positive,
Z_to_Q (Zneg p1 * Zneg p2) = Qmult (Z_to_Q (Zneg p1)) (Z_to_Q (Zneg p2)).
Lemma Z_to_Qmult :
forall x y : Z, Z_to_Q (x * y) = Qmult (Z_to_Q x) (Z_to_Q y).
Lemma Z_to_Q_S:forall k, Z_to_Q (Z_of_nat (S k))=Qplus k Qone.
Lemma Z_to_Q_min_one:Z_to_Q (-1)%Z= Qopp Qone.
Lemma Qlt_Zero_Qminus : forall x y : Q, Qlt Zero (Qminus y x) -> Qlt x y.
Lemma Z_to_Qlt : forall x y : Z, (x < y)%Z -> Qlt x y.
Lemma lt_Z_to_Q : forall x y : Z, Qlt (Z_to_Q x) (Z_to_Q y) -> (x < y)%Z.
Lemma pos_Z_to_Q : forall x : Z, Qlt Zero (Z_to_Q x) -> (0 < x)%Z.
Lemma neg_Z_to_Q : forall x : Z, Qlt (Z_to_Q x) Zero -> (x < 0)%Z.
Lemma Qlt_le_weak : forall x y : Q, Qlt x y -> Qle x y.
Lemma Z_to_Qle : forall x y : Z, (x <= y)%Z -> Qle x y.
Lemma Z_to_Q_pos : forall x : Z, (0 < x)%Z -> Qlt Zero x.
Lemma Z_to_Q_neg : forall x : Z, (x < 0)%Z -> Qlt x Zero.
Lemma Z_to_Q_nonneg : forall x : Z, (0 <= x)%Z -> Qle Zero x.
Lemma Z_to_Q_nonpos : forall x : Z, (x <= 0)%Z -> Qle x Zero.
Lemma Z_to_Q_not_eq : forall a b : Z, a <> b -> Z_to_Q a <> Z_to_Q b.
Lemma Qmult_Z_plus_Z_dL :
forall (a b : Z) (p : Qpositive),
Qplus (Qmult (Z_to_Q a) (Qpos (dL p))) (Z_to_Q b) =
Qmult (Qplus (Qmult (Z_to_Q (a + b)) (Qpos p)) (Z_to_Q b))
(Qinv (Qplus (Qpos p) Qone)).
Lemma Qinv_0 : forall q : Q, Qinv q = Zero -> q = Zero.
Lemma Qmult_resp_nonzero :
forall x y : Q, x <> Zero -> y <> Zero -> Qmult x y <> Zero.