Definition max := Rmax.
Definition min := Rmin.
Definition max_l := Rmax_l.
Definition max_r := Rmax_r.
Definition min_l := Rmin_l.
Definition min_r := Rmin_r.
End RHasMinMax.
Module R.
(** We obtain hence all the generic properties of max and min. *)
Include UsualMinMaxProperties R_as_OT RHasMinMax.
(** * Properties specific to the [R] domain *)
(** Compatibilities (consequences of monotonicity) *)

(* Specifications: *)
Lemma plus_max_distr_l : forall n m p, Rmax (p + n) (p + m) = p + Rmax n m.
Lemma plus_max_distr_r : forall n m p, Rmax (n + p) (m + p) = Rmax n m + p.
Lemma plus_min_distr_l : forall n m p, Rmin (p + n) (p + m) = p + Rmin n m.
Lemma plus_min_distr_r : forall n m p, Rmin (n + p) (m + p) = Rmin n m + p.
(** Anti-monotonicity swaps the role of [min] and [max] *)
Lemma opp_max_distr : forall n m : R, -(Rmax n m) = Rmin (- n) (- m).
Lemma opp_min_distr : forall n m : R, - (Rmin n m) = Rmax (- n) (- m).
Lemma minus_max_distr_l : forall n m p, Rmax (p - n) (p - m) = p - Rmin n m.
Lemma minus_max_distr_r : forall n m p, Rmax (n - p) (m - p) = Rmax n m - p.
Lemma minus_min_distr_l : forall n m p, Rmin (p - n) (p - m) = p - Rmax n m.
Lemma minus_min_distr_r : forall n m p, Rmin (n - p) (m - p) = Rmin n m - p.
End R.