Add Parametric Morphism {R : ConstructiveReals} : CRmin
with signature (CReq R) ==> (CReq R) ==> (CReq R)
as CRmin_morph.
#[global]
Instance CRmin_morphT
: forall {R : ConstructiveReals},
CMorphisms.Proper
(CMorphisms.respectful (CReq R) (CMorphisms.respectful (CReq R) (CReq R))) (@CRmin R).

(* Specifications: *)
Lemma CRmin_l : forall {R : ConstructiveReals} (x y : CRcarrier R),
CRmin x y <= x.
Lemma CRmin_r : forall {R : ConstructiveReals} (x y : CRcarrier R),
CRmin x y <= y.
Lemma CRnegPartAbsMin : forall {R : ConstructiveReals} (x : CRcarrier R),
CRmin 0 x == (x - CRabs _ x) * (CR_of_Q _ (1#2)).
Lemma CRmin_sym : forall {R : ConstructiveReals} (x y : CRcarrier R),
CRmin x y == CRmin y x.
Lemma CRmin_mult :
forall {R : ConstructiveReals} (p q r : CRcarrier R),
0 <= r -> CRmin (r * p) (r * q) == r * CRmin p q.
Lemma CRmin_plus : forall {R : ConstructiveReals} (x y z : CRcarrier R),
x + CRmin y z == CRmin (x + y) (x + z).
Lemma CRmin_left : forall {R : ConstructiveReals} (x y : CRcarrier R),
x <= y -> CRmin x y == x.
Lemma CRmin_right : forall {R : ConstructiveReals} (x y : CRcarrier R),
y <= x -> CRmin x y == y.
Lemma CRmin_lt : forall {R : ConstructiveReals} (x y z : CRcarrier R),
z < x -> z < y -> z < CRmin x y.
Lemma CRmin_contract : forall {R : ConstructiveReals} (x y a : CRcarrier R),
CRabs _ (CRmin x a - CRmin y a) <= CRabs _ (x - y).
Lemma CRmin_glb : forall {R : ConstructiveReals} (x y z:CRcarrier R),
z <= x -> z <= y -> z <= CRmin x y.
Lemma CRmin_assoc : forall {R : ConstructiveReals} (a b c : CRcarrier R),
CRmin a (CRmin b c) == CRmin (CRmin a b) c.
Lemma CRlt_min : forall {R : ConstructiveReals} (x y z : CRcarrier R),
z < CRmin x y -> prod (z < x) (z < y).