(* We call this morphism slow to remind that it should only be used for proofs, not for computations. *)
Definition SlowConstructiveRealsMorphism {R1 R2 : ConstructiveReals}
: @ConstructiveRealsMorphism R1 R2
:= Build_ConstructiveRealsMorphism
R1 R2 SlowMorph CauchyMorph_rat
SlowMorph_increasing.

(* Specifications: *)
Lemma CRmorph_abs : forall {R1 R2 : ConstructiveReals}
(f : @ConstructiveRealsMorphism R1 R2)
(x : CRcarrier R1),
CRabs R2 (CRmorph f x) == CRmorph f (CRabs R1 x).
Lemma CRmorph_cv : forall {R1 R2 : ConstructiveReals}
(f : @ConstructiveRealsMorphism R1 R2)
(un : nat -> CRcarrier R1)
(l : CRcarrier R1),
CR_cv R1 un l
-> CR_cv R2 (fun n => CRmorph f (un n)) (CRmorph f l).
Lemma CRmorph_cauchy_reverse : forall {R1 R2 : ConstructiveReals}
(f : @ConstructiveRealsMorphism R1 R2)
(un : nat -> CRcarrier R1),
CR_cauchy R2 (fun n => CRmorph f (un n))
-> CR_cauchy R1 un.