Definition CReal_opp (x : CReal) : CReal :=
{|
seq := CReal_opp_seq x;
scale := CReal_opp_scale x;
cauchy := CReal_opp_cauchy x;
bound := CReal_opp_bound x
|}.
Notation "- x" := (CReal_opp x) : CReal_scope.
Definition CReal_minus (x y : CReal) : CReal
:= CReal_plus x (CReal_opp y).
Infix "-" := CReal_minus : CReal_scope.

(* Specifications: *)
(* ToDo: make a tactic for this *)
Lemma CReal_red_seq: forall (a : Z -> Q) (b : Z) (c : QCauchySeq a) (d : QBound a b),
seq (mkCReal a b c d) = a.
Lemma CReal_plus_assoc : forall (x y z : CReal),
(x + y) + z == x + (y + z).
Lemma CReal_plus_comm : forall x y : CReal,
x + y == y + x.
Lemma CReal_plus_0_l : forall r : CReal,
inject_Q 0 + r == r.
Lemma CReal_plus_0_r : forall r : CReal,
r + 0 == r.
Lemma CReal_plus_lt_compat_l :
forall x y z : CReal, y < z -> x + y < x + z.
Lemma CReal_plus_lt_compat_r :
forall x y z : CReal, y < z -> y + x < z + x.
Lemma CReal_plus_lt_reg_l :
forall x y z : CReal, x + y < x + z -> y < z.
Lemma CReal_plus_lt_reg_r :
forall x y z : CReal, y + x < z + x -> y < z.
Lemma CReal_plus_le_reg_l :
forall x y z : CReal, x + y <= x + z -> y <= z.
Lemma CReal_plus_le_reg_r :
forall x y z : CReal, y + x <= z + x -> y <= z.
Lemma CReal_plus_le_compat_l : forall r r1 r2, r1 <= r2 -> r + r1 <= r + r2.
Lemma CReal_plus_le_lt_compat :
forall r1 r2 r3 r4 : CReal, r1 <= r2 -> r3 < r4 -> r1 + r3 < r2 + r4.
Lemma CReal_plus_le_compat :
forall r1 r2 r3 r4 : CReal, r1 <= r2 -> r3 <= r4 -> r1 + r3 <= r2 + r4.
Lemma CReal_plus_opp_r : forall x : CReal,
x + - x == 0.
Lemma CReal_plus_opp_l : forall x : CReal,
- x + x == 0.
Lemma CReal_plus_proper_r : forall x y z : CReal,
CRealEq x y -> CRealEq (CReal_plus x z) (CReal_plus y z).
Lemma CReal_plus_proper_l : forall x y z : CReal,
CRealEq x y -> CRealEq (CReal_plus z x) (CReal_plus z y).