(** Order *)

(* Specifications: *)
Lemma is_ub_Rbar_subset (E1 E2 : R -> Prop) (l : Rbar) :
(forall x : R, E2 x -> E1 x) -> is_ub_Rbar E1 l -> is_ub_Rbar E2 l.
Lemma is_lb_Rbar_subset (E1 E2 : R -> Prop) (l : Rbar) :
(forall x : R, E2 x -> E1 x) -> is_lb_Rbar E1 l -> is_lb_Rbar E2 l.
Lemma is_lub_Rbar_subset (E1 E2 : R -> Prop) (l1 l2 : Rbar) :
(forall x : R, E2 x -> E1 x) -> is_lub_Rbar E1 l1 -> is_lub_Rbar E2 l2
-> Rbar_le l2 l1.
Lemma is_glb_Rbar_subset (E1 E2 : R -> Prop) (l1 l2 : Rbar) :
(forall x : R, E2 x -> E1 x) -> is_glb_Rbar E1 l1 -> is_glb_Rbar E2 l2
-> Rbar_le l1 l2.
Lemma is_lub_Rbar_eqset (E1 E2 : R -> Prop) (l : Rbar) :
(forall x : R, E2 x <-> E1 x) -> is_lub_Rbar E1 l -> is_lub_Rbar E2 l.
Lemma is_glb_Rbar_eqset (E1 E2 : R -> Prop) (l : Rbar) :
(forall x : R, E2 x <-> E1 x) -> is_glb_Rbar E1 l -> is_glb_Rbar E2 l.
Lemma Lub_Rbar_eqset (E1 E2 : R -> Prop) :
(forall x, E1 x <-> E2 x) -> Lub_Rbar E1 = Lub_Rbar E2.
Lemma Glb_Rbar_eqset (E1 E2 : R -> Prop) :
(forall x, E1 x <-> E2 x) -> Glb_Rbar E1 = Glb_Rbar E2.
Lemma Rbar_is_ub_subset (E1 E2 : Rbar -> Prop) (l : Rbar) :
(forall x, E1 x -> E2 x) -> (Rbar_is_upper_bound E2 l) -> (Rbar_is_upper_bound E1 l).
Lemma Rbar_is_lb_subset (E1 E2 : Rbar -> Prop) (l : Rbar) :
(forall x, E1 x -> E2 x) -> (Rbar_is_lower_bound E2 l) -> (Rbar_is_lower_bound E1 l).
Lemma Rbar_glb_le_lub (E : Rbar -> Prop) :
(exists x, E x) -> Rbar_le (Rbar_glb E) (Rbar_lub E).
Lemma Rbar_is_lub_subset (E1 E2 : Rbar -> Prop) (l1 l2 : Rbar) :
(forall x, E1 x -> E2 x) -> (Rbar_is_lub E1 l1) -> (Rbar_is_lub E2 l2)
-> Rbar_le l1 l2.
Lemma Rbar_is_glb_subset (E1 E2 : Rbar -> Prop) (l1 l2 : Rbar) :
(forall x, E2 x -> E1 x) -> (Rbar_is_glb E1 l1) -> (Rbar_is_glb E2 l2)
-> Rbar_le l1 l2.
Lemma Rbar_is_lub_eq (E1 E2 : Rbar -> Prop) (l1 l2 : Rbar) :
(forall x, E1 x <-> E2 x) -> (Rbar_is_lub E1 l1) -> (Rbar_is_lub E2 l2)
-> l1 = l2.
Lemma Rbar_is_glb_eq (E1 E2 : Rbar -> Prop) (l1 l2 : Rbar) :
(forall x, E1 x <-> E2 x) -> (Rbar_is_glb E1 l1) -> (Rbar_is_glb E2 l2)
-> l1 = l2.
Lemma Rbar_is_lub_ext (E1 E2 : Rbar -> Prop) (l : Rbar) :
(forall x, E1 x <-> E2 x) -> (Rbar_is_lub E1 l) -> (Rbar_is_lub E2 l).
Lemma Rbar_is_glb_ext (E1 E2 : Rbar -> Prop) (l : Rbar) :
(forall x, E1 x <-> E2 x) -> (Rbar_is_glb E1 l) -> (Rbar_is_glb E2 l).
Lemma Rbar_lub_subset (E1 E2 : Rbar -> Prop) :
(forall x, E1 x -> E2 x) -> Rbar_le (Rbar_lub E1) (Rbar_lub E2).
Lemma Rbar_glb_subset (E1 E2 : Rbar -> Prop) :
(forall x, E2 x -> E1 x) -> Rbar_le (Rbar_glb E1) (Rbar_glb E2).
Lemma Rbar_lub_rw (E1 E2 : Rbar -> Prop) :
(forall x, E1 x <-> E2 x) -> Rbar_lub E1 = Rbar_lub E2.
Lemma Rbar_glb_rw (E1 E2 : Rbar -> Prop) :
(forall x, E1 x <-> E2 x) -> Rbar_glb E1 = Rbar_glb E2.
Lemma Rplus_lt_reg_l (x y z : R) : x + y < x + z -> y < z.
Lemma Rplus_lt_reg_r (x y z : R) : y + x < z + x -> y < z.
Lemma Rle_div_l : forall a b c, c > 0 -> (a / c <= b <-> a <= b * c).
Lemma Rle_div_r : forall a b c, c > 0 -> (a * c <= b <-> a <= b / c).
Lemma Rlt_div_l : forall a b c, c > 0 -> (a / c < b <-> a < b*c).
Lemma Rlt_div_r : forall a b c, c > 0 -> (a * c < b <-> a < b / c).
Lemma Rdiv_lt_0_compat : forall r1 r2 : R, 0 < r1 -> 0 < r2 -> 0 < r1 / r2.
Lemma Rdiv_le_0_compat : forall r1 r2 : R, 0 <= r1 -> 0 < r2 -> 0 <= r1 / r2.
Lemma Rdiv_lt_1 : forall r1 r2, 0 < r2 -> (r1 < r2 <-> r1 / r2 < 1).
Lemma Rdiv_le_1 : forall r1 r2, 0 < r2 -> (r1 <= r2 <-> r1/r2 <= 1).
(** * Rmult *)
Lemma Rle_mult_Rlt : forall c a b : R, 0 < b -> c < 1 -> a <= b*c -> a < b.
Lemma Rmult_le_0_r : forall a b, a <= 0 -> 0 <= b -> a * b <= 0.
Lemma Rmult_le_0_l : forall a b, 0 <= a -> b <= 0 -> a * b <= 0.
Lemma pow2_gt_0 (x : R) : x <> 0 -> 0 < x ^ 2.
(** * Rminus *)
(** Rewritings *)
Lemma Rminus_eq_0 : forall r : R, r - r = 0.
Lemma Rdiv_minus_distr : forall a b c, b <> 0 -> a / b - c = (a - b * c) / b.
Lemma Rmult_minus_distr_r: forall r1 r2 r3 : R, (r1 - r2) * r3 = r1 * r3 - r2 * r3.
Lemma Rminus_eq_compat_l : forall r r1 r2 : R, r1 = r2 <-> r - r1 = r - r2.
Lemma Ropp_plus_minus_distr : forall r1 r2 : R, - (r1 + r2) = - r1 - r2.
(** Order *)
Lemma Rle_minus_l : forall a b c,(a - c <= b <-> a <= b + c).
Lemma Rlt_minus_r : forall a b c,(a < b - c <-> a + c < b).
Lemma Rlt_minus_l : forall a b c,(a - c < b <-> a < b + c).
Lemma Rle_minus_r : forall a b c,(a <= b - c <-> a + c <= b).
Lemma Rminus_le_0 : forall a b, a <= b <-> 0 <= b - a.
Lemma Rminus_lt_0 : forall a b, a < b <-> 0 < b - a.
(** * Rplus *)
(** Sums *)
Lemma sum_f_rw (a : nat -> R) (n m : nat) :
(n < m)%nat -> sum_f (S n) m a = sum_f_R0 a m - sum_f_R0 a n.
Lemma sum_f_rw_0 (u : nat -> R) (n : nat) :
sum_f O n u = sum_f_R0 u n.
Lemma sum_f_n_Sm (u : nat -> R) (n m : nat) :
(n <= m)%nat -> sum_f n (S m) u = sum_f n m u + u (S m).
Lemma sum_f_u_Sk (u : nat -> R) (n m : nat) :
(n <= m)%nat -> sum_f (S n) (S m) u = sum_f n m (fun k => u (S k)).
Lemma sum_f_u_add (u : nat -> R) (p n m : nat) :
(n <= m)%nat -> sum_f (n + p)%nat (m + p)%nat u = sum_f n m (fun k => u (k + p)%nat).
Lemma sum_f_Sn_m (u : nat -> R) (n m : nat) :
(n < m)%nat -> sum_f (S n) m u = sum_f n m u - u n.
Lemma sum_f_R0_skip (u : nat -> R) (n : nat) :
sum_f_R0 (fun k => u (n - k)%nat) n = sum_f_R0 u n.
Lemma sum_f_chasles (u : nat -> R) (n m k : nat) :
(n < m)%nat -> (m < k)%nat ->
sum_f (S n) k u = sum_f (S n) m u + sum_f (S m) k u.