Definition inject_Q (q : Q) : CReal :=
{|
  seq := (fun n : Z => q);
  scale := Qbound_ltabs_ZExp2 q;
  cauchy := inject_Q_cauchy q;
  bound := (fun _ : Z => Qbound_ltabs_ZExp2_spec q)
|}.Definition inject_Z : Z -> CReal
  := fun n => inject_Q (n # 1).Notation "0" := (inject_Q 0) : CReal_scope.Notation "1" := (inject_Q 1) : CReal_scope.Notation "2" := (inject_Q 2) : CReal_scope.

(* Specifications: *)
Lemma CRealLt_0_1 : CRealLt (inject_Q 0) (inject_Q 1).
Lemma CReal_injectQPos : forall q : Q, (0 < q)%Q -> CRealLt (inject_Q 0) (inject_Q q).
Lemma inject_Q_compare : forall (x : CReal) (p : Z), x <= inject_Q (seq x p + (2^p)).