Definition cond_incr (b : bool) m := if b then (m + 1)%Z else m.

(* Specifications: *)
Theorem inbetween_float_round_sign : forall rnd choice, ( forall x m l, inbetween_int m (Rabs x) l -> rnd x = cond_Zopp (Rlt_bool x 0) (choice (Rlt_bool x 0) m l) ) -> forall x m l, let e := canonic_exp beta fexp x in inbetween_float beta m e (Rabs x) l -> round beta fexp rnd x = F2R (Float beta (cond_Zopp (Rlt_bool x 0) (choice (Rlt_bool x 0) m l)) e).
Theorem inbetween_int_DN : forall x m l, inbetween_int m x l -> Zfloor x = m.
Theorem inbetween_float_DN : forall x m l, let e := canonic_exp beta fexp x in inbetween_float beta m e x l -> round beta fexp Zfloor x = F2R (Float beta m e).
Theorem inbetween_float_round_sign : forall rnd choice, ( forall x m l, inbetween_int m (Rabs x) l -> rnd x = cond_Zopp (Rlt_bool x 0) (choice (Rlt_bool x 0) m l) ) -> forall x m l, let e := canonic_exp beta fexp x in inbetween_float beta m e (Rabs x) l -> round beta fexp rnd x = F2R (Float beta (cond_Zopp (Rlt_bool x 0) (choice (Rlt_bool x 0) m l)) e).
Theorem inbetween_int_DN : forall x m l, inbetween_int m x l -> Zfloor x = m.
Theorem inbetween_float_DN : forall x m l, let e := canonic_exp beta fexp x in inbetween_float beta m e x l -> round beta fexp Zfloor x = F2R (Float beta m e).