(** Absolute value *)
Definition Babs abs_nan (x : binary_float) : binary_float :=
match x with
| B754_nan sx plx =>
let '(sres, plres) := abs_nan sx plx in B754_nan sres plres
| B754_infinity sx => B754_infinity false
| B754_finite sx mx ex Hx => B754_finite false mx ex Hx
| B754_zero sx => B754_zero false
end.

(* Specifications: *)
Theorem B2R_Babs :
forall abs_nan x,
B2R (Babs abs_nan x) = Rabs (B2R x).
Theorem is_finite_Babs :
forall abs_nan x,
is_finite (Babs abs_nan x) = is_finite x.
Theorem Bsign_Babs :
forall abs_nan x,
is_nan x = false ->
Bsign (Babs abs_nan x) = false.
Theorem Babs_idempotent :
forall abs_nan (x: binary_float),
is_nan x = false ->
Babs abs_nan (Babs abs_nan x) = Babs abs_nan x.
Theorem Babs_Bopp :
forall abs_nan opp_nan x,
is_nan x = false ->
Babs abs_nan (Bopp opp_nan x) = Babs abs_nan x.
Theorem B2R_Babs :
forall abs_nan x,
B2R (Babs abs_nan x) = Rabs (B2R x).
Theorem is_finite_Babs :
forall abs_nan x,
is_finite (Babs abs_nan x) = is_finite x.
Theorem Bsign_Babs :
forall abs_nan x,
is_nan x = false ->
Bsign (Babs abs_nan x) = false.
Theorem Babs_idempotent :
forall abs_nan (x: binary_float),
is_nan x = false ->
Babs abs_nan (Babs abs_nan x) = Babs abs_nan x.
Theorem Babs_Bopp :
forall abs_nan opp_nan x,
is_nan x = false ->
Babs abs_nan (Bopp opp_nan x) = Babs abs_nan x.