Proof with auto with typeclass_instances.
intros x y Hx Hy.
destruct (Rle_or_lt 0 (x + y)) as [H1|H1].
(* . *)
revert H1.
destruct (Zle_or_lt (canonic_exp beta fexp x) (canonic_exp beta fexp y)) as [H2|H2].
now apply round_plus_eq_zero_aux.
rewrite Rplus_comm.
apply round_plus_eq_zero_aux ; try easy.
now apply Zlt_le_weak.
(* . *)
revert H1.
rewrite <- (Ropp_involutive (x + y)), Ropp_plus_distr, <- Ropp_0.
intros H1.
rewrite round_opp.
intros Hxy.
apply f_equal.
cut (round beta fexp (Zrnd_opp rnd) (- x + - y) = 0)%R.
cut (0 <= -x + -y)%R.
destruct (Zle_or_lt (canonic_exp beta fexp (-x)) (canonic_exp beta fexp (-y))) as [H2|H2].
apply round_plus_eq_zero_aux ; try apply generic_format_opp...
rewrite Rplus_comm.
apply round_plus_eq_zero_aux ; try apply generic_format_opp...
now apply Zlt_le_weak.
apply Rlt_le.
now apply Ropp_lt_cancel.
rewrite <- (Ropp_involutive (round _ _ _ _)).
rewrite Hxy.
apply Ropp_involutive.
Qed.
End Fprop_plus_zero.
Section Fprop_plus_FLT.
Variable beta : radix.
Notation bpow e := (bpow beta e).
Variable emin prec : Z.
Context { prec_gt_0_ : Prec_gt_0 prec }.

(* Specifications: *)
Theorem FLT_format_plus_small: forall x y,
generic_format beta (FLT_exp emin prec) x ->
generic_format beta (FLT_exp emin prec) y ->
(Rabs (x+y) <= bpow (prec+emin))%R ->
generic_format beta (FLT_exp emin prec) (x+y).
Theorem FLT_format_plus_small: forall x y,
generic_format beta (FLT_exp emin prec) x ->
generic_format beta (FLT_exp emin prec) y ->
(Rabs (x+y) <= bpow (prec+emin))%R ->
generic_format beta (FLT_exp emin prec) (x+y).