(* Alias the large order *)
Definition CRealLe (x y : CReal) : Prop
  := CRealLt y x -> False.Definition CRealGe (x y : CReal) := CRealLe y x.Infix "<=" := CRealLe : CReal_scope.Infix ">=" := CRealGe : CReal_scope.Notation "x <= y <= z" := (x <= y /\ y <= z) : CReal_scope.Notation "x <= y < z"  := (prod (x <= y) (y < z)) : CReal_scope.Notation "x < y < z"   := (prod (x < y) (y < z)) : CReal_scope.Notation "x < y <= z"  := (prod (x < y) (y <= z)) : CReal_scope.(* Alias the quotient order equality *)
Definition CRealEq (x y : CReal) : Prop
  := (CRealLe y x) /\ (CRealLe x y).Infix "==" := CRealEq : CReal_scope.

(* Specifications: *)
Lemma CRealLe_not_lt : forall x y : CReal, (forall n : Z, (seq x n - seq y n <= 2 * 2 ^ n)%Q) <-> x <= y.
Lemma CRealEq_diff : forall (x y : CReal), CRealEq x y <-> forall n:Z, ((Qabs (seq x n - seq y n)) <= (2 * 2 ^ n))%Q.
Lemma CRealLt_aboveSig : forall (x y : CReal) (n : Z), (2 * 2^n < seq y n - seq x n)%Q -> let (k, _) := QarchimedeanExp2_Z (/(seq y n - seq x n - (2 * 2 ^ n)%Q)) in forall p:Z, (p <= n)%Z -> (2^(-k) < seq y p - seq x p)%Q.
Lemma CRealLt_aboveSig' : forall (x y : CReal) (n : Z), (2 * 2^n < seq y n - seq x n)%Q -> let (k, _) := QarchimedeanExp2_Z (/(seq y n - seq x n - (2 * 2 ^ n)%Q)) in forall p:Z, (p <= n)%Z -> (2 * 2^(Z.min (-k-1) n) < seq y p - seq x p)%Q.
Lemma CRealLt_above : forall (x y : CReal), CRealLt x y -> { n : Z | forall p : Z, (p <= n)%Z -> (2 * 2 ^ n < seq y p - seq x p)%Q }.
Lemma CRealLt_above_same : forall (x y : CReal) (n : Z), (2 * 2 ^ n < seq y n - seq x n)%Q -> forall p:Z, (p <= n)%Z -> Qlt (seq x p) (seq y p).
Lemma CRealLt_asym : forall x y : CReal, x < y -> x <= y.
Lemma CRealLt_irrefl : forall x:CReal, x < x -> False.
Lemma CRealLe_refl : forall x : CReal, x <= x.
Lemma CRealEq_refl : forall x : CReal, x == x.
Lemma CRealEq_sym : forall x y : CReal, CRealEq x y -> CRealEq y x.
Lemma CRealLt_dec : forall x y z : CReal, x < y -> sum (x < z) (z < y).