Add Parametric Morphism {R : ConstructiveReals} : (CRplus R)
with signature CReq R ==> CReq R ==> CReq R
as CRplus_morph.
Add Parametric Morphism {R : ConstructiveReals} : (CRopp R)
with signature CReq R ==> CReq R
as CRopp_morph.
Add Parametric Morphism {R : ConstructiveReals} : (CRmult R)
with signature CReq R ==> CReq R ==> CReq R
as CRmult_morph.
#[global]
Instance CRplus_morph_T
: forall {R : ConstructiveReals}, CMorphisms.Proper
(CMorphisms.respectful (CReq R) (CMorphisms.respectful (CReq R) (CReq R))) (CRplus R).
#[global]
Instance CRmult_morph_T
: forall {R : ConstructiveReals}, CMorphisms.Proper
(CMorphisms.respectful (CReq R) (CMorphisms.respectful (CReq R) (CReq R))) (CRmult R).
#[global]
Instance CRopp_morph_T
: forall {R : ConstructiveReals}, CMorphisms.Proper
(CMorphisms.respectful (CReq R) (CReq R)) (CRopp R).
Add Parametric Morphism {R : ConstructiveReals} : (CRminus R)
with signature (CReq R) ==> (CReq R) ==> (CReq R)
as CRminus_morph.
#[global]
Instance CRminus_morph_T
: forall {R : ConstructiveReals}, CMorphisms.Proper
(CMorphisms.respectful (CReq R) (CMorphisms.respectful (CReq R) (CReq R))) (CRminus R).

(* Specifications: *)
Lemma CRopp_involutive : forall {R : ConstructiveReals} (r : CRcarrier R),
- - r == r.
Lemma CRopp_gt_lt_contravar
: forall {R : ConstructiveReals} (r1 r2 : CRcarrier R),
r2 < r1 -> - r1 < - r2.
Lemma CRopp_lt_cancel : forall {R : ConstructiveReals} (r1 r2 : CRcarrier R),
- r2 < - r1 -> r1 < r2.
Lemma CRopp_ge_le_contravar
: forall {R : ConstructiveReals} (r1 r2 : CRcarrier R),
r2 <= r1 -> - r1 <= - r2.
Lemma CRopp_plus_distr : forall {R : ConstructiveReals} (r1 r2 : CRcarrier R),
- (r1 + r2) == - r1 + - r2.
Lemma CRmult_1_l : forall {R : ConstructiveReals} (r : CRcarrier R),
1 * r == r.
Lemma CRmult_1_r : forall {R : ConstructiveReals} (x : CRcarrier R),
x * 1 == x.
Lemma CRmult_assoc : forall {R : ConstructiveReals} (r r1 r2 : CRcarrier R),
r * r1 * r2 == r * (r1 * r2).
Lemma CRmult_comm : forall {R : ConstructiveReals} (r s : CRcarrier R),
r * s == s * r.
Lemma CRmult_plus_distr_l : forall {R : ConstructiveReals} (r1 r2 r3 : CRcarrier R),
r1 * (r2 + r3) == (r1 * r2) + (r1 * r3).
Lemma CRmult_plus_distr_r : forall {R : ConstructiveReals} (r1 r2 r3 : CRcarrier R),
(r2 + r3) * r1 == (r2 * r1) + (r3 * r1).
(* x == x+x -> x == 0 *)
Lemma CRzero_double : forall {R : ConstructiveReals} (x : CRcarrier R),
x == x + x -> x == 0.
Lemma CRmult_0_r : forall {R : ConstructiveReals} (x : CRcarrier R),
x * 0 == 0.
Lemma CRmult_0_l : forall {R : ConstructiveReals} (r : CRcarrier R),
0 * r == 0.
Lemma CRopp_mult_distr_r : forall {R : ConstructiveReals} (r1 r2 : CRcarrier R),
- (r1 * r2) == r1 * (- r2).
Lemma CRopp_mult_distr_l : forall {R : ConstructiveReals} (r1 r2 : CRcarrier R),
- (r1 * r2) == (- r1) * r2.
Lemma CRmult_lt_compat_r : forall {R : ConstructiveReals} (r r1 r2 : CRcarrier R),
0 < r -> r1 < r2 -> r1 * r < r2 * r.
Lemma CRmult_lt_compat_l : forall {R : ConstructiveReals} (r r1 r2 : CRcarrier R),
0 < r -> r1 < r2 -> r * r1 < r * r2.
Lemma CRinv_r : forall {R : ConstructiveReals} (r:CRcarrier R)
(rnz : r ≶ 0),
r * (/ r) rnz == 1.
Lemma CRmult_lt_reg_r : forall {R : ConstructiveReals} (r r1 r2 : CRcarrier R),
0 < r -> r1 * r < r2 * r -> r1 < r2.
Lemma CRmult_lt_reg_l : forall {R : ConstructiveReals} (r r1 r2 : CRcarrier R),
0 < r -> r * r1 < r * r2 -> r1 < r2.
Lemma CRmult_le_compat_l_half : forall {R : ConstructiveReals} (r r1 r2 : CRcarrier R),
0 < r -> r1 <= r2 -> r * r1 <= r * r2.
Lemma CRmult_le_compat_r_half : forall {R : ConstructiveReals} (r r1 r2 : CRcarrier R),
0 < r
-> r1 <= r2
-> r1 * r <= r2 * r.
Lemma CRmult_eq_reg_r : forall {R : ConstructiveReals} (r r1 r2 : CRcarrier R),
0 ≶ r
-> r1 * r == r2 * r
-> r1 == r2.
Lemma CRinv_1 : forall {R : ConstructiveReals} (onz : CRapart R 1 0),
(/ 1) onz == 1.
Lemma CRmult_eq_reg_l : forall {R : ConstructiveReals} (r r1 r2 : CRcarrier R),
r ≶ 0
-> r * r1 == r * r2
-> r1 == r2.
Lemma CRinv_mult_distr :
forall {R : ConstructiveReals} (r1 r2 : CRcarrier R)
(r1nz : r1 ≶ 0) (r2nz : r2 ≶ 0)
(rmnz : (r1*r2) ≶ 0),
(/ (r1 * r2)) rmnz == (/ r1) r1nz * (/ r2) r2nz.
Lemma CRinv_morph : forall {R : ConstructiveReals} (x y : CRcarrier R)
(rxnz : x ≶ 0) (rynz : y ≶ 0),
x == y
-> (/ x) rxnz == (/ y) rynz.
Lemma CRlt_minus : forall {R : ConstructiveReals} (x y : CRcarrier R),
x < y -> 0 < y - x.
Lemma CR_of_Q_le : forall {R : ConstructiveReals} (r q : Q),
Qle r q
-> CR_of_Q R r <= CR_of_Q R q.